ZGlmZiAtLWdpdCBhL2Rpc3QyLzEzMmh0bWwgYi9kaXN0Mi8xMzJodG1sCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjNhMTZhNTkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi8xMzJodG1sCkBAIC0wLDAgKzEsMzEzIEBACisjISAvdXNyL2Jpbi9wZXJsIC13CisKKyMgU2NyaXB0IHRvIHR1cm4gUENSRTIgbWFuIHBhZ2VzIGludG8gSFRNTAorCisKKyMgU3Vicm91dGluZSB0byBoYW5kbGUgZm9udCBjaGFuZ2VzIGFuZCBvdGhlciBlc2NhcGVzCisKK3N1YiBkb19saW5lIHsKK215KCRzKSA9ICRfWzBdOworCiskcyA9fiBzLzwvJiM2MDsvZzsgICAgICAgICAgICAgICAgICAgIyBEZWFsIHdpdGggPCBhbmQgPgorJHMgPX4gcy8+LyYjNjI7L2c7CiskcyA9fiBzIlxcZkkoLio/KVxcZltSUF0iPGk+JDE8L2k+Imc7CiskcyA9fiBzIlxcZkIoLio/KVxcZltSUF0iPGI+JDE8L2I+Imc7CiskcyA9fiBzIlxcZSJcXCJnOworJHMgPX4gcy8oPzw9Q29weXJpZ2h0IClcKGNcKS8mY29weTsvZzsKKyRzOworfQorCisjIFN1YnJvdXRpbmUgdG8gZW5zdXJlIG5vdCBpbiBhIHBhcmFncmFwaAorCitzdWIgZW5kX3BhcmEgeworaWYgKCRpbnBhcmEpCisgIHsKKyAgcHJpbnQgVEVNUCAiPC9QUkU+XG4iIGlmICgkaW5wcmUpOworICBwcmludCBURU1QICI8L1A+XG4iOworICB9CiskaW5wYXJhID0gJGlucHJlID0gMDsKKyR3cm90ZXRleHQgPSAwOworfQorCisjIFN1YnJvdXRpbmUgdG8gc3RhcnQgYSBuZXcgcGFyYWdyYXBoCisKK3N1YiBuZXdfcGFyYSB7CismZW5kX3BhcmEoKTsKK3ByaW50IFRFTVAgIjxQPlxuIjsKKyRpbnBhcmEgPSAxOworfQorCisKKyMgTWFpbiBwcm9ncmFtCisKKyRpbm5mID0gMDsKKyRpbnBhcmEgPSAwOworJGlucHJlID0gMDsKKyR3cm90ZXRleHQgPSAwOworJHRvYyA9IDA7CiskcmVmID0gMTsKKword2hpbGUgKCQjQVJHViA+PSAwICYmICRBUkdWWzBdID1+IC9eLS8pCisgIHsKKyAgJHRvYyA9IDEgaWYgJEFSR1ZbMF0gZXEgIi10b2MiOworICBzaGlmdDsKKyAgfQorCisjIEluaXRpYWwgb3V0cHV0IHRvIFNURE9VVAorCitwcmludCA8PEVuZCA7Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPiRBUkdWWzBdIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT4kQVJHVlswXSBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorRW5kCisKK3ByaW50ICI8dWw+XG4iIGlmICgkdG9jKTsKKworb3BlbihURU1QLCAiPi90bXAvJCQiKSB8fCBkaWUgIkNhbid0IG9wZW4gL3RtcC8kJCBmb3Igb3V0cHV0XG4iOworCit3aGlsZSAoPFNURElOPikKKyAgeworICAjIEhhbmRsZSBsaW5lcyBiZWdpbm5pbmcgd2l0aCBhIGRvdAorCisgIGlmICgvXlwuLykKKyAgICB7CisgICAgIyBTb21lIG9mIHRoZSBQQ1JFMiBtYW4gcGFnZXMgdXNlZCB0byBjb250YWluIGluc3RhbmNlcyBvZiAuYnIuIEhvd2V2ZXIsCisgICAgIyB0aGV5IHNob3VsZCBoYXZlIGFsbCBiZWVuIHJlbW92ZWQgYmVjYXVzZSB0aGV5IGNhdXNlIHRyb3VibGUgaW4gc29tZQorICAgICMgKG90aGVyKSBhdXRvbWF0ZWQgc3lzdGVtcyB0aGF0IHRyYW5zbGF0ZSBtYW4gcGFnZXMgdG8gSFRNTC4gQ29tcGxhaW4gaWYKKyAgICAjIHdlIGZpbmQgLmJyIG9yIC5pbiAoYW5vdGhlciBtYWNybyB0aGF0IGlzIGRlcHJlY2F0ZWQpLgorCisgICAgaWYgKC9eXC5ici8gfHwgL15cLmluLykKKyAgICAgIHsKKyAgICAgIHByaW50IFNUREVSUiAiXG4qKiogRGVwcmVjYXRlZCBtYWNybyBlbmNvdW50ZXJlZCAtIHJld3JpdGUgbmVlZGVkXG4iOworICAgICAgcHJpbnQgU1RERVJSICIqKiogJF9cbiI7CisgICAgICBkaWUgIioqKiBQcm9jZXNzaW5nIGFiYW5kb25lZFxuIjsKKyAgICAgIH0KKworICAgICMgSW5zdGVhZCBvZiAuYnIsIHJlbGV2ZW50ICJsaXRlcmFsIiBzZWN0aW9ucyBhcmUgZW5jbG9zZWQgaW4gLm5mLy5maS4KKworICAgIGVsc2lmICgvXlwubmYvKQorICAgICAgeworICAgICAgJGlubmYgPSAxOworICAgICAgfQorCisgICAgZWxzaWYgKC9eXC5maS8pCisgICAgICB7CisgICAgICAkaW5uZiA9IDA7CisgICAgICB9CisKKyAgICAjIEhhbmRsaW5nIC5zcCBpcyBzdWJ0bGUuIElmIGl0IGlzIGluc2lkZSBhIGxpdGVyYWwgc2VjdGlvbiwgZG8gbm90aGluZyBpZgorICAgICMgdGhlIG5leHQgbGluZSBpcyBhIG5vbiBsaXRlcmFsIHRleHQgbGluZTsgc2ltaWxhcmx5LCBpZiBub3QgaW5zaWRlIGEKKyAgICAjIGxpdGVyYWwgc2VjdGlvbiwgZG8gbm90aGluZyBpZiBhIGxpdGVyYWwgZm9sbG93cywgdW5sZXNzIHdlIGFyZSBpbnNpZGUKKyAgICAjIGEgLm5mLy5uZSBzZWN0aW9uLiBUaGUgcG9pbnQgYmVpbmcgdGhhdCB0aGUgPHByZT4gYW5kIDwvcHJlPiB0aGF0IGRlbGltaXQKKyAgICAjIGxpdGVyYWwgc2VjdGlvbnMgd2lsbCBkbyB0aGUgc3BhY2luZy4gQWx3YXlzIHNraXAgaWYgbm8gcHJldmlvdXMgb3V0cHV0LgorCisgICAgZWxzaWYgKC9eXC5zcC8pCisgICAgICB7CisgICAgICBpZiAoJHdyb3RldGV4dCkKKyAgICAgICAgeworICAgICAgICAkXyA9IDxTVERJTj47CisgICAgICAgIGlmICgkaW5wcmUpCisgICAgICAgICAgeworICAgICAgICAgIHByaW50IFRFTVAgIlxuIiBpZiAoL15bXHMuXS8pOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICBwcmludCBURU1QICI8YnI+XG48YnI+XG4iIGlmICgkaW5uZiB8fCAhL15bXHMuXS8pOworICAgICAgICAgIH0KKyAgICAgICAgcmVkbzsgICAgIyBOb3cgcHJvY2VzcyB0aGUgbG9va2FoZWFkIGxpbmUgd2UganVzdCByZWFkCisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlbHNpZiAoL15cLlRQLyB8fCAvXlwuUFAvIHx8IC9eXC5QLykKKyAgICAgIHsKKyAgICAgICZuZXdfcGFyYSgpOworICAgICAgfQorICAgIGVsc2lmICgvXlwuU0hccyooIj8pKC4qKVwxLykKKyAgICAgIHsKKyAgICAgICMgSWdub3JlIHRoZSBOQU1FIHNlY3Rpb24KKyAgICAgIGlmICgkMiA9fiAvXk5BTUVcYi8pCisgICAgICAgIHsKKyAgICAgICAgPFNURElOPjsKKyAgICAgICAgbmV4dDsKKyAgICAgICAgfQorCisgICAgICAmZW5kX3BhcmEoKTsKKyAgICAgIG15KCR0aXRsZSkgPSAmZG9fbGluZSgkMik7CisgICAgICBpZiAoJHRvYykKKyAgICAgICAgeworICAgICAgICBwcmludGYoIjxsaT48YSBuYW1lPVwiVE9DJWRcIiBocmVmPVwiI1NFQyVkXCI+JHRpdGxlPC9hPlxuIiwKKyAgICAgICAgICAkcmVmLCAkcmVmKTsKKyAgICAgICAgcHJpbnRmIFRFTVAgKCI8YnI+PGEgbmFtZT1cIlNFQyVkXCIgaHJlZj1cIiNUT0MxXCI+JHRpdGxlPC9hPjxicj5cbiIsCisgICAgICAgICAgJHJlZik7CisgICAgICAgICRyZWYrKzsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIHByaW50IFRFTVAgIjxicj48Yj5cbiR0aXRsZVxuPC9iPjxicj5cbiI7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlbHNpZiAoL15cLlNTXHMqKCI/KSguKilcMS8pCisgICAgICB7CisgICAgICAmZW5kX3BhcmEoKTsKKyAgICAgIG15KCR0aXRsZSkgPSAmZG9fbGluZSgkMik7CisgICAgICBwcmludCBURU1QICI8YnI+PGI+XG4kdGl0bGVcbjwvYj48YnI+XG4iOworICAgICAgfQorICAgIGVsc2lmICgvXlwuQlxzKiguKikvKQorICAgICAgeworICAgICAgJm5ld19wYXJhKCkgaWYgKCEkaW5wYXJhKTsKKyAgICAgICRfID0gJmRvX2xpbmUoJDEpOworICAgICAgcy8iKC4qPykiLyQxL2c7CisgICAgICBwcmludCBURU1QICI8Yj4kXzwvYj5cbiI7CisgICAgICAkd3JvdGV0ZXh0ID0gMTsKKyAgICAgIH0KKyAgICBlbHNpZiAoL15cLklccyooLiopLykKKyAgICAgIHsKKyAgICAgICZuZXdfcGFyYSgpIGlmICghJGlucGFyYSk7CisgICAgICAkXyA9ICZkb19saW5lKCQxKTsKKyAgICAgIHMvIiguKj8pIi8kMS9nOworICAgICAgcHJpbnQgVEVNUCAiPGk+JF88L2k+XG4iOworICAgICAgJHdyb3RldGV4dCA9IDE7CisgICAgICB9CisKKyAgICAjIEEgY29tbWVudCB0aGF0IHN0YXJ0cyAiSFJFRiIgdGFrZXMgdGhlIG5leHQgbGluZSBhcyBhIG5hbWUgdGhhdAorICAgICMgaXMgdHVybmVkIGludG8gYSBoeXBlcmxpbmssIHVzaW5nIHRoZSB0ZXh0IGdpdmVuLCB3aGljaCBtaWdodCBiZQorICAgICMgaW4gYSBzcGVjaWFsIGZvbnQuIElmIGl0IGVuZHMgaW4gKCkgb3IgKGRpZ2l0cykgb3IgcHVuY3R1YXRpb24sIHRoZXkKKyAgICAjIGFyZW4ndCBwYXJ0IG9mIHRoZSBsaW5rLgorCisgICAgZWxzaWYgKC9eXC5cXCJccypIUkVGLykKKyAgICAgIHsKKyAgICAgICRfPTxTVERJTj47CisgICAgICBjaG9tcDsKKyAgICAgICRfID0gJmRvX2xpbmUoJF8pOworICAgICAgJF8gPX4gcy9ccyskLy87CisgICAgICAkXyA9fiAvXig/OjwuPik/KFtePChdKykoPzpcKFwpKT8oPzo8XC8uPik/KD86XChcZCtcKSk/Wy4sOzpdPyQvOworICAgICAgcHJpbnQgVEVNUCAiPGEgaHJlZj1cIiQxLmh0bWxcIj4kXzwvYT5cbiI7CisgICAgICB9CisKKyAgICAjIEEgY29tbWVudCB0aGF0IHN0YXJ0cyAiSFRNTCIgaW5zZXJ0cyBsaXRlcmFsIEhUTUwKKworICAgIGVsc2lmICgvXlwuXFwiXHMqSFRNTFxzKiguKikvKQorICAgICAgeworICAgICAgcHJpbnQgVEVNUCAkMTsKKyAgICAgIH0KKworICAgICMgQSBjb21tZW50IHRoYXQgc3RhcnRzIDwgaW5zZXJ0cyB0aGF0IEhUTUwgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAjICpuZXh0KiBpbnB1dCBsaW5lIC0gc28gYXMgbm90IHRvIGdldCBhIG5ld2xpbmUgYmV0d2VlbiB0aGVtLgorCisgICAgZWxzaWYgKC9eXC5cXCJccyooPC4qPikvKQorICAgICAgeworICAgICAgbXkoJG1hcmt1cCkgPSAkMTsKKyAgICAgICRfPTxTVERJTj47CisgICAgICBjaG9tcDsKKyAgICAgICRfID0gJmRvX2xpbmUoJF8pOworICAgICAgJF8gPX4gcy9ccyskLy87CisgICAgICBwcmludCBURU1QICIkXyRtYXJrdXBcbiI7CisgICAgICB9CisKKyAgICAjIEEgY29tbWVudCB0aGF0IHN0YXJ0cyBKT0lOIGpvaW5zIHRoZSBuZXh0IHR3byBsaW5lcyB0b2dldGhlciwgd2l0aCBvbmUKKyAgICAjIHNwYWNlIGJldHdlZW4gdGhlbS4gVGhlbiB0aGF0IGxpbmUgaXMgcHJvY2Vzc2VkLiBUaGlzIGlzIHVzZWQgaW4gc29tZQorICAgICMgZGlzcGxheXMgd2hlcmUgdHdvIGxpbmVzIGFyZSBuZWVkZWQgZm9yIHRoZSAibWFuIiB2ZXJzaW9uLiBKT0lOU0ggd29ya3MKKyAgICAjIHRoZSBzYW1lLCBleGNlcHQgdGhhdCBpdCBhc3N1bWVzIHRoaXMgaXMgYSBzaGVsbCBjb21tYW5kLCBzbyByZW1vdmVzCisgICAgIyBjb250aW51YXRpb24gYmFja3NsYXNoZXMuCisKKyAgICBlbHNpZiAoL15cLlxcIlxzKkpPSU4oU0gpPy8pCisgICAgICB7CisgICAgICBteSgkb25lLCR0d28pOworICAgICAgJG9uZSA9IDxTVERJTj47CisgICAgICAkdHdvID0gPFNURElOPjsKKyAgICAgICRvbmUgPX4gcy9ccypcXGVccyokLy8gaWYgKGRlZmluZWQoJDEpKTsKKyAgICAgIGNob21wKCRvbmUpOworICAgICAgJHR3byA9fiBzL15ccysvLzsKKyAgICAgICRfID0gIiRvbmUgJHR3byI7CisgICAgICByZWRvOyAgICAgICAgICAgICMgUHJvY2VzcyB0aGUgam9pbmVkIGxpbmVzCisgICAgICB9CisKKyAgICAjIC5FWC8uRUUgYXJlIHVzZWQgaW4gdGhlIHBjcmUyZGVtbyBwYWdlIHRvIGJyYWNrZXQgdGhlIGVudGlyZSBwcm9ncmFtLAorICAgICMgd2hpY2ggaXMgdW5tb2RpZmllZCBleGNlcHQgZm9yIHR1cm5pbmcgYmFja3NsYXNoIGludG8gIlxlIi4KKworICAgIGVsc2lmICgvXlwuRVhccyokLykKKyAgICAgIHsKKyAgICAgIHByaW50IFRFTVAgIjxQUkU+XG4iOworICAgICAgd2hpbGUgKDxTVERJTj4pCisgICAgICAgIHsKKyAgICAgICAgbGFzdCBpZiAvXlwuRUVccyokLzsKKyAgICAgICAgcy9cXGUvXFwvZzsKKyAgICAgICAgcy8mLyZhbXA7L2c7CisgICAgICAgIHMvPC8mbHQ7L2c7CisgICAgICAgIHMvPi8mZ3Q7L2c7CisgICAgICAgIHByaW50IFRFTVA7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICMgSWdub3JlIGFueXRoaW5nIG5vdCByZWNvZ25pemVkCisKKyAgICBuZXh0OworICAgIH0KKworICAjIExpbmUgZG9lcyBub3QgYmVnaW4gd2l0aCBhIGRvdC4gUmVwbGFjZSBibGFuayBsaW5lcyB3aXRoIG5ldyBwYXJhZ3JhcGhzCisKKyAgaWYgKC9eXHMqJC8pCisgICAgeworICAgICZlbmRfcGFyYSgpIGlmICgkd3JvdGV0ZXh0KTsKKyAgICBuZXh0OworICAgIH0KKworICAjIENvbnZlcnQgZm9udHMgY2hhbmdlcyBhbmQgb3V0cHV0IGFuIG9yZGluYXJ5IGxpbmUuIEVuc3VyZSB0aGF0IGluZGVudGVkCisgICMgbGluZXMgYXJlIG1hcmtlZCBhcyBsaXRlcmFsLgorCisgICRfID0gJmRvX2xpbmUoJF8pOworICAmbmV3X3BhcmEoKSBpZiAoISRpbnBhcmEpOworCisgIGlmICgvXlxzLykKKyAgICB7CisgICAgaWYgKCEkaW5wcmUpCisgICAgICB7CisgICAgICBwcmludCBURU1QICI8cHJlPlxuIjsKKyAgICAgICRpbnByZSA9IDE7CisgICAgICB9CisgICAgfQorICBlbHNpZiAoJGlucHJlKQorICAgIHsKKyAgICBwcmludCBURU1QICI8L3ByZT5cbiI7CisgICAgJGlucHJlID0gMDsKKyAgICB9CisKKyAgIyBBZGQgPGJyPiB0byB0aGUgZW5kIG9mIGEgbm9uLWxpdGVyYWwgbGluZSBpZiB3ZSBhcmUgd2l0aGluIC5uZi8uZmkKKworICAkXyAuPSAiPGJyPlxuIiBpZiAoISRpbnByZSAmJiAkaW5uZik7CisKKyAgcHJpbnQgVEVNUDsKKyAgJHdyb3RldGV4dCA9IDE7CisgIH0KKworIyBUaGUgVE9DLCBpZiBwcmVzZW50LCB3aWxsIGhhdmUgYmVlbiB3cml0dGVuIC0gdGVybWluYXRlIGl0CisKK3ByaW50ICI8L3VsPlxuIiBpZiAoJHRvYyk7CisKKyMgQ29weSB0aGUgcmVtYWluZGVyIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQKKworY2xvc2UoVEVNUCk7CitvcGVuKFRFTVAsICIvdG1wLyQkIikgfHwgZGllICJDYW4ndCBvcGVuIC90bXAvJCQgZm9yIGlucHV0XG4iOworCitwcmludCB3aGlsZSAoPFRFTVA+KTsKKworcHJpbnQgPDxFbmQgOworPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorRW5kCisKK2Nsb3NlKFRFTVApOwordW5saW5rKCIvdG1wLyQkIik7CisKKyMgRW5kCmRpZmYgLS1naXQgYS9kaXN0Mi9BVVRIT1JTIGIvZGlzdDIvQVVUSE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWEwZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvQVVUSE9SUwpAQCAtMCwwICsxLDM2IEBACitUSEUgTUFJTiBQQ1JFMiBMSUJSQVJZIENPREUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXcml0dGVuIGJ5OiAgICAgICBQaGlsaXAgSGF6ZWwKK0VtYWlsIGxvY2FsIHBhcnQ6IHBoMTAKK0VtYWlsIGRvbWFpbjogICAgIGNhbS5hYy51aworCitVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBDb21wdXRpbmcgU2VydmljZSwKK0NhbWJyaWRnZSwgRW5nbGFuZC4KKworQ29weXJpZ2h0IChjKSAxOTk3LTIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKK0FsbCByaWdodHMgcmVzZXJ2ZWQKKworCitQQ1JFMiBKVVNULUlOLVRJTUUgQ09NUElMQVRJT04gU1VQUE9SVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV3JpdHRlbiBieTogICAgICAgWm9sdGFuIEhlcmN6ZWcKK0VtYWlsIGxvY2FsIHBhcnQ6IGh6bWVzdGVyCitFbWFpbiBkb21haW46ICAgICBmcmVlbWFpbC5odQorCitDb3B5cmlnaHQoYykgMjAxMC0yMDE2IFpvbHRhbiBIZXJjemVnCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCisKK1NUQUNLLUxFU1MgSlVTVC1JTi1USU1FIENPTVBJTEVSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXcml0dGVuIGJ5OiAgICAgICBab2x0YW4gSGVyY3plZworRW1haWwgbG9jYWwgcGFydDogaHptZXN0ZXIKK0VtYWluIGRvbWFpbjogICAgIGZyZWVtYWlsLmh1CisKK0NvcHlyaWdodChjKSAyMDA5LTIwMTYgWm9sdGFuIEhlcmN6ZWcKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyMjIyMKZGlmZiAtLWdpdCBhL2Rpc3QyL0NNYWtlTGlzdHMudHh0IGIvZGlzdDIvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM4NGIwNQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsNzgwIEBACisjIENNYWtlTGlzdHMudHh0CisjCisjCisjIFRoaXMgZmlsZSBlbmFibGVzIFBDUkUyIHRvIGJlIGJ1aWx0IHdpdGggdGhlIENNYWtlIGNvbmZpZ3VyYXRpb24gYW5kIGJ1aWxkCisjIHRvb2wuIERvd25sb2FkIENNYWtlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBmcm9tIGh0dHA6Ly93d3cuY21ha2Uub3JnLworIyBDb252ZXJ0ZWQgdG8gc3VwcG9ydCBQQ1JFMiBmcm9tIHRoZSBvcmlnaW5hbCBQQ1JFIGZpbGUsIEF1Z3VzdCAyMDE0LgorIworIyBPcmlnaW5hbCBsaXN0ZmlsZSBieSBDaHJpc3RpYW4gRWhybGljaGVyIDxDaC5FaHJsaWNoZXJAZ214LmRlPgorIyBSZWZpbmVkIGFuZCBleHBhbmRlZCBieSBEYW5pZWwgUmljaGFyZCBHLiA8c2t1bmtAaVNLVU5LLk9SRz4KKyMgMjAwNy0wOS0xNCBtb2QgYnkgU2hlcmkgc28gNy40IHN1cHBvcnRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgY2FuIGJlIGVudGVyZWQKKyMgMjAwNy0wOS0xOSBBZGp1c3RlZCBieSBQSCB0byByZXRhaW4gcHJldmlvdXMgZGVmYXVsdCBzZXR0aW5ncworIyAyMDA3LTEyLTI2IChhKSBPbiBVTklYLCB1c2UgbmFtZXMgbGlicGNyZSBpbnN0ZWFkIG9mIGp1c3QgcGNyZQorIyAgICAgICAgICAgIChiKSBFbnN1cmUgcGNyZXRlc3QgYW5kIHBjcmVncmVwIGxpbmsgd2l0aCB0aGUgbG9jYWwgbGlicmFyeSwKKyMgICAgICAgICAgICAgICAgbm90IGEgcHJldmlvdXNseS1pbnN0YWxsZWQgb25lLgorIyAgICAgICAgICAgIChjKSBBZGQgUENSRV9TVVBQT1JUX0xJQlJFQURMSU5FLCBQQ1JFX1NVUFBPUlRfTElCWiwgYW5kCisjICAgICAgICAgICAgICAgIFBDUkVfU1VQUE9SVF9MSUJCWjIuCisjIDIwMDgtMDEtMjAgQnJvdWdodCB1cCB0byBkYXRlIHRvIGluY2x1ZGUgc2V2ZXJhbCBuZXcgZmVhdHVyZXMgYnkgQ2hyaXN0aWFuCisjICAgICAgICAgICAgRWhybGljaGVyLgorIyAyMDA4LTAxLTIyIFNoZXJpIGFkZGVkIG9wdGlvbnMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb2YgbGlicmFyeSBuYW1lcworIyAgICAgICAgICAgIHdoZW4gYnVpbGRpbmcgd2l0aCBtaW5HVzoKKyMgICAgICAgICAgICBpZiAiT04iLCBOT05fU1RBTkRBUkRfTElCX1BSRUZJWCBjYXVzZXMgc2hhcmVkIGxpYnJhcmllcyB0bworIyAgICAgICAgICAgIGJlIGJ1aWx0IHdpdGhvdXQgImxpYiIgYXMgcHJlZml4LiAoVGhlIGxpYnJhcmllcyB3aWxsIGJlIG5hbWVkCisjICAgICAgICAgICAgcGNyZS5kbGwsIHBjcmVwb3NpeC5kbGwgYW5kIHBjcmVjcHAuZGxsKS4KKyMgICAgICAgICAgICBpZiAiT04iLCBOT05fU1RBTkRBUkRfTElCX1NVRkZJWCBjYXVzZXMgc2hhcmVkIGxpYnJhcmllcyB0bworIyAgICAgICAgICAgIGJlIGJ1aWx0IHdpdGggc3VmZml4IG9mICItMC5kbGwiLiAoVGhlIGxpYnJhcmllcyB3aWxsIGJlIG5hbWVkCisjICAgICAgICAgICAgbGlicGNyZS0wLmRsbCwgbGlicGNyZXBvc2l4LTAuZGxsIGFuZCBsaWJwY3JlY3BwLTAuZGxsIC0gc2FtZSBuYW1lcworIyAgICAgICAgICAgIGJ1aWx0IGJ5IGRlZmF1bHQgd2l0aCBDb25maWd1cmUgYW5kIE1ha2UuCisjIDIwMDgtMDEtMjMgUEggcmVtb3ZlZCB0aGUgYXV0b21hdGljIGJ1aWxkIG9mIHBjcmVkZW1vLgorIyAyMDA4LTA0LTIyIFBIIG1vZGlmaWVkIFJFQURMSU5FIHN1cHBvcnQgc28gaXQgZmluZHMgTkNVUlNFUyB3aGVuIG5lZWRlZC4KKyMgMjAwOC0wNy0wMyBQSCB1cGRhdGVkIGZvciByZXZpc2VkIFVDUCBwcm9wZXJ0eSBzdXBwb3J0IChjaGFuZ2Ugb2YgZmlsZXMpCisjIDIwMDktMDMtMjMgUEggYXBwbGllZCBTdGV2ZW4gVmFuIEluZ2VsZ2VtJ3MgcGF0Y2ggdG8gY2hhbmdlIHRoZSBuYW1lCisjICAgICAgICAgICAgQ01BS0VfQklOQVJZX0RJUiB0byBQUk9KRUNUX0JJTkFSWV9ESVIgc28gdGhhdCBpdCB3b3JrcyB3aGVuIFBDUkUKKyMgICAgICAgICAgICBpcyBpbmNsdWRlZCB3aXRoaW4gYW5vdGhlciBwcm9qZWN0LgorIyAyMDA5LTAzLTIzIFBIIGFwcGxpZWQgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIFN0ZXZlbiBWYW4gSW5nZWxnZW0ncyBwYXRjaGVzIHRvCisjICAgICAgICAgICAgYWRkIG9wdGlvbnMgdG8gc3RvcCB0aGUgYnVpbGRpbmcgb2YgcGNyZWdyZXAgYW5kIHRoZSB0ZXN0cywgYW5kCisjICAgICAgICAgICAgdG8gZGlzYWJsZSB0aGUgZmluYWwgY29uZmlndXJhdGlvbiByZXBvcnQuCisjIDIwMDktMDQtMTEgUEggYXBwbGllZCBDaHJpc3RpYW4gRWhybGljaGVyJ3MgcGF0Y2ggdG8gc2hvdyBjb21waWxlciBmbGFncyB0aGF0CisjICAgICAgICAgICAgYXJlIHNldCBieSBzcGVjaWZ5aW5nIGEgcmVsZWFzZSB0eXBlLgorIyAyMDEwLTAxLTAyIFBIIGFkZGVkIHRlc3QgZm9yIHN0ZGludC5oCisjIDIwMTAtMDMtMDIgUEggYWRkZWQgdGVzdCBmb3IgaW50dHlwZXMuaAorIyAyMDExLTA4LTAxIFBIIGFkZGVkIFBDUkVHUkVQX0JVRlNJWkUKKyMgMjAxMS0wOC0yMiBQSCBhZGRlZCBQQ1JFX1NVUFBPUlRfSklUCisjIDIwMTEtMDktMDYgUEggbW9kaWZpZWQgV0lOMzIgQUREX1RFU1QgbGluZSBhcyBzdWdnZXN0ZWQgYnkgU2VyZ2V5IENoZXJlcGFub3YKKyMgMjAxMS0wOS0wNiBQSCBhZGRlZCBQQ1JFX1NVUFBPUlRfUENSRUdSRVBfSklUCisjIDIwMTEtMTAtMDQgU2hlcmkgYWRkZWQgc3VwcG9ydCBmb3IgaW5jbHVkaW5nIGNvZmYgZGF0YSBpbiB3aW5kb3dzIHNoYXJlZCBsaWJyYXJpZXMKKyMgICAgICAgICAgICBjb21waWxlZCB3aXRoIE1JTkdXIGlmIHBjcmUucmMgYW5kL29yIHBjcmVwb3NpeC5yYyBhcmUgcGxhY2VkIGluCisjICAgICAgICAgICAgdGhlIHNvdXJjZSBkaXIgYnkgdGhlIHVzZXIgcHJpb3IgdG8gYnVpbGRpbmcKKyMgMjAxMS0xMC0wNCBTaGVyaSBjaGFuZ2VkIHZhcmlvdXMgYWRkX3Rlc3QncyB0byB1c2UgZXhlcycgbG9jYXRpb24gYnVpbHQgaW5zdGVhZAorIyAgICAgICAgICAgIG9mIERFQlVHIGxvY2F0aW9uIG9ubHkgKGxpa2VseSBvbmx5IG1hdHRlcnMgaW4gTVNWQykKKyMgMjAxMS0xMC0wNCBTaGVyaSBhZGRlZCBzY3JpcHRzIHRvIHByb3ZpZGUgbmVlZGVkIHZhcmlhYmxlcyB0byBSdW5UZXN0IGFuZAorIyAgICAgICAgICAgIFJ1bkdyZXBUZXN0ICh1c2VkIGZvciBVTklYIGFuZCBNc3lzKQorIyAyMDExLTEwLTA0IFNoZXJpIGFkZGVkIHNjcmlwdHMgdG8gcHJvdmlkZSBuZWVkZWQgdmFyaWFibGVzIGFuZCB0byBleGVjdXRlCisjICAgICAgICAgICAgUnVuVGVzdC5iYXQgaW4gV2luMzIgKGZvciBlZmZvcnRsZXNzIHRlc3Rpbmcgd2l0aCAibWFrZSB0ZXN0IikKKyMgMjAxMS0xMC0wNCBTaGVyaSBJbmNyZWFzZWQgbWluaW11bSByZXF1aXJlZCBjbWFrZSB2ZXJzaW9uCisjIDIwMTItMDEtMDYgUEggcmVtb3ZlZCBwY3JlX2luZm8uYyBhbmQgYWRkZWQgcGNyZV9zdHJpbmdfdXRpbHMuYworIyAyMDEyLTAxLTEwIFpvbHRhbiBIZXJjemVnIGFkZGVkIGxpYnBjcmUxNiBzdXBwb3J0CisjIDIwMTItMDEtMTMgU3RlcGhlbiBLZWxseSBhZGRlZCBvdXQgb2Ygc291cmNlIGJ1aWxkIHN1cHBvcnQKKyMgMjAxMi0wMS0xNyBQSCBhcHBsaWVkIFN0ZXBoZW4gS2VsbHkncyBwYXRjaCB0byBwYXJzZSB0aGUgdmVyc2lvbiBkYXRhIG91dAorIyAgICAgICAgICAgIG9mIHRoZSBjb25maWd1cmUuYWMgZmlsZQorIyAyMDEyLTAyLTI2IFBIIGFkZGVkIHN1cHBvcnQgZm9yIGxpYmVkaXQKKyMgMjAxMi0wOS0wNiBQSCBhZGRlZCBzdXBwb3J0IGZvciBQQ1JFX0VCQ0RJQ19OTDI1CisjIDIwMTItMDktMDggQ2hQZSBhZGRlZCBQQ1JFMzIgc3VwcG9ydAorIyAyMDEyLTEwLTIzIFBIIGFkZGVkIHN1cHBvcnQgZm9yIFZBTEdSSU5EIGFuZCBHQ09WCisjIDIwMTItMTItMDggUEggYWRkZWQgcGF0Y2ggZnJvbSBEYW5pZWwgUmljaGFyZCBHIHRvIHF1YXNoIHNvbWUgTVNWQyB3YXJuaW5ncworIyAyMDEzLTA3LTAxIFBIIHJlYWxpemVkIHRoYXQgdGhlICJzdXBwb3J0IiBmb3IgR0NPViB3YXMgYSB0b3RhbCBub25zZW5zZSBhbmQKKyMgICAgICAgICAgICBzbyBpdCBoYXMgYmVlbiByZW1vdmVkLgorIyAyMDEzLTEwLTA4IFBIIGdvdCByaWQgb2YgdGhlICJzb3VyY2UiIGNvbW1hbmQsIHdoaWNoIGlzIGEgYmFzaC1pc20gKHVzZSAiLiIpCisjIDIwMTMtMTEtMDUgUEggYWRkZWQgc3VwcG9ydCBmb3IgUEFSRU5TX05FU1RfTElNSVQKKyMgMjAxNC0wOC0yOSBQSCBjb252ZXJ0ZWQgdGhlIGZpbGUgZm9yIFBDUkUyICh3aGljaCBoYXMgbm8gQysrKS4KKyMgMjAxNS0wNC0yNCBQSCBhZGRlZCBzdXBwb3J0IGZvciBQQ1JFMl9ERUJVRworIyAyMDE1LTA3LTE2IFBIIHVwZGF0ZWQgZm9yIG5ldyBwY3JlMl9maW5kX2JyYWNrZXQgc291cmNlIG1vZHVsZQorIyAyMDE1LTA4LTI0IFBIIGNvcnJlY3QgQ19GTEFHUyBzZXR0aW5nIChwYXRjaCBmcm9tIFJveSBJdnkgSUlJKQorIyAyMDE1LTEwPTE2IFBIIGFkZGVkIHN1cHBvcnQgZm9yIG5ldmVyLWJhY2tzbGFzaC1DCisKK1BST0pFQ1QoUENSRTIgQykKKworIyBJbmNyZWFzZWQgbWluaW11bSB0byAyLjguMCB0byBzdXBwb3J0IG5ld2VyIGFkZF90ZXN0IGZlYXR1cmVzLiBTZXQgcG9saWN5CisjIENNUDAwMjYgdG8gYXZvaWQgd2FybmluZ3MgZm9yIHRoZSB1c2Ugb2YgTE9DQVRJT04gaW4gR0VUX1RBUkdFVF9QUk9QRVJUWS4KKworQ01BS0VfTUlOSU1VTV9SRVFVSVJFRChWRVJTSU9OIDIuOC4wKQorQ01BS0VfUE9MSUNZKFNFVCBDTVAwMDI2IE9MRCkKKworU0VUKENNQUtFX01PRFVMRV9QQVRIICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9jbWFrZSkgIyBmb3IgRmluZFJlYWRsaW5lLmNtYWtlCisKK1NFVChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC1JJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L3NyYyIpCisKKyMgZXh0ZXJuYWwgcGFja2FnZXMKK0ZJTkRfUEFDS0FHRSggQlppcDIgKQorRklORF9QQUNLQUdFKCBaTElCICkKK0ZJTkRfUEFDS0FHRSggUmVhZGxpbmUgKQorRklORF9QQUNLQUdFKCBFZGl0bGluZSApCisKKyMgQ29uZmlndXJhdGlvbiBjaGVja3MKKworSU5DTFVERShDaGVja0luY2x1ZGVGaWxlKQorSU5DTFVERShDaGVja0Z1bmN0aW9uRXhpc3RzKQorSU5DTFVERShDaGVja1R5cGVTaXplKQorCitDSEVDS19JTkNMVURFX0ZJTEUoZGlyZW50LmggICAgIEhBVkVfRElSRU5UX0gpCitDSEVDS19JTkNMVURFX0ZJTEUoc3RkaW50LmggICAgIEhBVkVfU1RESU5UX0gpCitDSEVDS19JTkNMVURFX0ZJTEUoaW50dHlwZXMuaCAgIEhBVkVfSU5UVFlQRVNfSCkKK0NIRUNLX0lOQ0xVREVfRklMRShzeXMvc3RhdC5oICAgSEFWRV9TWVNfU1RBVF9IKQorQ0hFQ0tfSU5DTFVERV9GSUxFKHN5cy90eXBlcy5oICBIQVZFX1NZU19UWVBFU19IKQorQ0hFQ0tfSU5DTFVERV9GSUxFKHVuaXN0ZC5oICAgICBIQVZFX1VOSVNURF9IKQorQ0hFQ0tfSU5DTFVERV9GSUxFKHdpbmRvd3MuaCAgICBIQVZFX1dJTkRPV1NfSCkKKworQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTKGJjb3B5ICAgICBIQVZFX0JDT1BZKQorQ0hFQ0tfRlVOQ1RJT05fRVhJU1RTKG1lbW1vdmUgICBIQVZFX01FTU1PVkUpCitDSEVDS19GVU5DVElPTl9FWElTVFMoc3RyZXJyb3IgIEhBVkVfU1RSRVJST1IpCisKKyMgVXNlci1jb25maWd1cmFibGUgb3B0aW9ucworIworIyBOb3RlOiBDTWFrZVNldHVwIGRpc3BsYXlzIHRoZXNlIGluIGFscGhhYmV0aWNhbCBvcmRlciwgcmVnYXJkbGVzcyBvZgorIyB0aGUgb3JkZXIgd2UgdXNlIGhlcmUuCisKK1NFVChCVUlMRF9TSEFSRURfTElCUyBPRkYgQ0FDSEUgQk9PTAorICAgICJCdWlsZCBzaGFyZWQgbGlicmFyaWVzIGluc3RlYWQgb2Ygc3RhdGljIG9uZXMuIikKKworT1BUSU9OKFBDUkUyX0JVSUxEX1BDUkUyXzggIkJ1aWxkIDggYml0IFBDUkUyIGxpYnJhcnkiIE9OKQorCitPUFRJT04oUENSRTJfQlVJTERfUENSRTJfMTYgIkJ1aWxkIDE2IGJpdCBQQ1JFMiBsaWJyYXJ5IiBPRkYpCisKK09QVElPTihQQ1JFMl9CVUlMRF9QQ1JFMl8zMiAiQnVpbGQgMzIgYml0IFBDUkUyIGxpYnJhcnkiIE9GRikKKworT1BUSU9OKFBDUkUyX0RFQlVHICJJbmNsdWRlIGRlYnVnZ2luZyBjb2RlIiBPRkYpCisKK1NFVChQQ1JFMl9FQkNESUMgT0ZGIENBQ0hFIEJPT0wKKyAgICAiVXNlIEVCQ0RJQyBjb2RpbmcgaW5zdGVhZCBvZiBBU0NJSS4gKFRoaXMgaXMgcmFyZWx5IHVzZWQgb3V0c2lkZSBvZiBtYWluZnJhbWUgc3lzdGVtcy4pIikKKworU0VUKFBDUkUyX0VCQ0RJQ19OTDI1IE9GRiBDQUNIRSBCT09MCisgICAgIlVzZSAweDI1IGFzIEVCQ0RJQyBOTCBjaGFyYWN0ZXIgaW5zdGVhZCBvZiAweDE1OyBpbXBsaWVzIEVCQ0RJQy4iKQorCitTRVQoUENSRTJfTElOS19TSVpFICIyIiBDQUNIRSBTVFJJTkcKKyAgICAiSW50ZXJuYWwgbGluayBzaXplICgyLCAzIG9yIDQgYWxsb3dlZCkuIFNlZSBMSU5LX1NJWkUgaW4gY29uZmlnLmguaW4gZm9yIGRldGFpbHMuIikKKworU0VUKFBDUkUyX1BBUkVOU19ORVNUX0xJTUlUICIyNTAiIENBQ0hFIFNUUklORworICAgICJEZWZhdWx0IG5lc3RlZCBwYXJlbnRoZXNlcyBsaW1pdC4gU2VlIFBBUkVOU19ORVNUX0xJTUlUIGluIGNvbmZpZy5oLmluIGZvciBkZXRhaWxzLiIpCisKK1NFVChQQ1JFMl9NQVRDSF9MSU1JVCAiMTAwMDAwMDAiIENBQ0hFIFNUUklORworICAgICJEZWZhdWx0IGxpbWl0IG9uIGludGVybmFsIGxvb3BpbmcuIFNlZSBNQVRDSF9MSU1JVCBpbiBjb25maWcuaC5pbiBmb3IgZGV0YWlscy4iKQorCitTRVQoUENSRTJfTUFUQ0hfTElNSVRfUkVDVVJTSU9OICJNQVRDSF9MSU1JVCIgQ0FDSEUgU1RSSU5HCisgICAgIkRlZmF1bHQgbGltaXQgb24gaW50ZXJuYWwgcmVjdXJzaW9uLiBTZWUgTUFUQ0hfTElNSVRfUkVDVVJTSU9OIGluIGNvbmZpZy5oLmluIGZvciBkZXRhaWxzLiIpCisKK1NFVChQQ1JFMkdSRVBfQlVGU0laRSAiMjA0ODAiIENBQ0hFIFNUUklORworICAgICJCdWZmZXIgc2l6ZSBwYXJhbWV0ZXIgZm9yIHBjcmUyZ3JlcC4gU2VlIFBDUkUyR1JFUF9CVUZTSVpFIGluIGNvbmZpZy5oLmluIGZvciBkZXRhaWxzLiIpCisKK1NFVChQQ1JFMl9ORVdMSU5FICJMRiIgQ0FDSEUgU1RSSU5HCisgICAgIldoYXQgdG8gcmVjb2duaXplIGFzIGEgbmV3bGluZSAob25lIG9mIENSLCBMRiwgQ1JMRiwgQU5ZLCBBTllDUkxGKS4iKQorCitTRVQoUENSRTJfSEVBUF9NQVRDSF9SRUNVUlNFIE9GRiBDQUNIRSBCT09MCisgICAgIklmIE9OLCB0aGVuIGRvbid0IHVzZSBzdGFjayByZWN1cnNpb24gd2hlbiBtYXRjaGluZy4gU2VlIEhFQVBfTUFUQ0hfUkVDVVJTRSBpbiBjb25maWcuaC5pbiBmb3IgZGV0YWlscy4iKQorCitTRVQoUENSRTJfU1VQUE9SVF9KSVQgT0ZGIENBQ0hFIEJPT0wKKyAgICAiRW5hYmxlIHN1cHBvcnQgZm9yIEp1c3QtaW4tdGltZSBjb21waWxpbmcuIikKKworU0VUKFBDUkUyX1NVUFBPUlRfUENSRTJHUkVQX0pJVCBPTiBDQUNIRSBCT09MCisgICAgIkVuYWJsZSB1c2Ugb2YgSnVzdC1pbi10aW1lIGNvbXBpbGluZyBpbiBwY3JlMmdyZXAuIikKKworU0VUKFBDUkUyX1NVUFBPUlRfVU5JQ09ERSBPTiBDQUNIRSBCT09MCisgICAgIkVuYWJsZSBzdXBwb3J0IGZvciBVbmljb2RlIGFuZCBVVEYtOC9VVEYtMTYvVVRGLTMyIGVuY29kaW5nLiIpCisKK1NFVChQQ1JFMl9TVVBQT1JUX0JTUl9BTllDUkxGIE9GRiBDQUNIRSBCT09MCisgICAgIk9OPUJhY2tzbGFzaC1SIG1hdGNoZXMgb25seSBMRiBDUiBhbmQgQ1JMRiwgT0ZGPUJhY2tzbGFzaC1SIG1hdGNoZXMgYWxsIFVuaWNvZGUgTGluZWJyZWFrcyIpCisKK1NFVChQQ1JFMl9ORVZFUl9CQUNLU0xBU0hfQyBPRkYgQ0FDSEUgQk9PTAorICAgICJJZiBPTiwgYmFja3NsYXNoLUMgKHVwcGVyIGNhc2UgQykgaXMgbG9ja2VkIG91dC4iKQorCitTRVQoUENSRTJfU1VQUE9SVF9WQUxHUklORCBPRkYgQ0FDSEUgQk9PTAorICAgICJFbmFibGUgVmFsZ3JpbmQgc3VwcG9ydC4iKQorCitPUFRJT04oUENSRTJfU0hPV19SRVBPUlQgICAgICJTaG93IHRoZSBmaW5hbCBjb25maWd1cmF0aW9uIHJlcG9ydCIgT04pCitPUFRJT04oUENSRTJfQlVJTERfUENSRTJHUkVQICJCdWlsZCBwY3JlMmdyZXAiIE9OKQorT1BUSU9OKFBDUkUyX0JVSUxEX1RFU1RTICAgICAiQnVpbGQgdGhlIHRlc3RzIiBPTikKKworSUYgKE1JTkdXKQorICBPUFRJT04oTk9OX1NUQU5EQVJEX0xJQl9QUkVGSVgKKyAgICAgICAgICJPTj1TaGFyZWQgbGlicmFyaWVzIGJ1aWx0IGluIG1pbmd3IHdpbGwgYmUgbmFtZWQgcGNyZTIuZGxsLCBldGMuLCBpbnN0ZWFkIG9mIGxpYnBjcmUyLmRsbCwgZXRjLiIKKyAgICAgICAgIE9GRikKKworICBPUFRJT04oTk9OX1NUQU5EQVJEX0xJQl9TVUZGSVgKKyAgICAgICAgICJPTj1TaGFyZWQgbGlicmFyaWVzIGJ1aWx0IGluIG1pbmd3IHdpbGwgYmUgbmFtZWQgbGlicGNyZTItMC5kbGwsIGV0Yy4sIGluc3RlYWQgb2YgbGlicGNyZTIuZGxsLCBldGMuIgorICAgICAgICAgT0ZGKQorRU5ESUYoTUlOR1cpCisKK0lGKE1TVkMpCisgIE9QVElPTihJTlNUQUxMX01TVkNfUERCCisgICAgICAgICAiT049SW5zdGFsbCAucGRiIGZpbGVzIGJ1aWx0IGJ5IE1TVkMsIGlmIGdlbmVyYXRlZCIKKyAgICAgICAgIE9GRikKK0VORElGKE1TVkMpCisKKyMgYnppcDIgbGliCitJRihCWklQMl9GT1VORCkKKyAgT1BUSU9OIChQQ1JFMl9TVVBQT1JUX0xJQkJaMiAiRW5hYmxlIHN1cHBvcnQgZm9yIGxpbmtpbmcgcGNyZTJncmVwIHdpdGggbGliYnoyLiIgT04pCitFTkRJRihCWklQMl9GT1VORCkKK0lGKFBDUkUyX1NVUFBPUlRfTElCQloyKQorICBJTkNMVURFX0RJUkVDVE9SSUVTKCR7QlpJUDJfSU5DTFVERV9ESVJ9KQorRU5ESUYoUENSRTJfU1VQUE9SVF9MSUJCWjIpCisKKyMgemxpYgorSUYoWkxJQl9GT1VORCkKKyAgT1BUSU9OIChQQ1JFMl9TVVBQT1JUX0xJQlogIkVuYWJsZSBzdXBwb3J0IGZvciBsaW5raW5nIHBjcmUyZ3JlcCB3aXRoIGxpYnouIiBPTikKK0VORElGKFpMSUJfRk9VTkQpCitJRihQQ1JFMl9TVVBQT1JUX0xJQlopCisgIElOQ0xVREVfRElSRUNUT1JJRVMoJHtaTElCX0lOQ0xVREVfRElSfSkKK0VORElGKFBDUkUyX1NVUFBPUlRfTElCWikKKworIyBlZGl0bGluZSBsaWIKK0lGKEVESVRMSU5FX0ZPVU5EKQorICBPUFRJT04gKFBDUkUyX1NVUFBPUlRfTElCRURJVCAgIkVuYWJsZSBzdXBwb3J0IGZvciBsaW5raW5nIHBjcmUydGVzdCB3aXRoIGxpYmVkaXQuIiBPRkYpCitFTkRJRihFRElUTElORV9GT1VORCkKK0lGKFBDUkUyX1NVUFBPUlRfTElCRURJVCkKKyAgSU5DTFVERV9ESVJFQ1RPUklFUygke0VESVRMSU5FX0lOQ0xVREVfRElSfSkKK0VORElGKFBDUkUyX1NVUFBPUlRfTElCRURJVCkKKworIyByZWFkbGluZSBsaWIKK0lGKFJFQURMSU5FX0ZPVU5EKQorICBPUFRJT04gKFBDUkUyX1NVUFBPUlRfTElCUkVBRExJTkUgICJFbmFibGUgc3VwcG9ydCBmb3IgbGlua2luZyBwY3JlMnRlc3Qgd2l0aCBsaWJyZWFkbGluZS4iIE9OKQorRU5ESUYoUkVBRExJTkVfRk9VTkQpCitJRihQQ1JFMl9TVVBQT1JUX0xJQlJFQURMSU5FKQorICBJTkNMVURFX0RJUkVDVE9SSUVTKCR7UkVBRExJTkVfSU5DTFVERV9ESVJ9KQorRU5ESUYoUENSRTJfU1VQUE9SVF9MSUJSRUFETElORSkKKworIyBQcmVwYXJlIGJ1aWxkIGNvbmZpZ3VyYXRpb24KKworSUYoTk9UIEJVSUxEX1NIQVJFRF9MSUJTKQorICAgICAgICBTRVQoUENSRTJfU1RBVElDIDEpCitFTkRJRihOT1QgQlVJTERfU0hBUkVEX0xJQlMpCisKK0lGKE5PVCBQQ1JFMl9CVUlMRF9QQ1JFMl84IEFORCBOT1QgUENSRTJfQlVJTERfUENSRTJfMTYgQU5EIE5PVCBQQ1JFMl9CVUlMRF9QQ1JFMl8zMikKKyAgICAgICAgTUVTU0FHRShGQVRBTF9FUlJPUiAiQXQgbGVhc3Qgb25lIG9mIFBDUkUyX0JVSUxEX1BDUkUyXzgsIFBDUkUyX0JVSUxEX1BDUkUyXzE2IG9yIFBDUkUyX0JVSUxEX1BDUkUyXzMyIG11c3QgYmUgZW5hYmxlZCIpCitFTkRJRihOT1QgUENSRTJfQlVJTERfUENSRTJfOCBBTkQgTk9UIFBDUkUyX0JVSUxEX1BDUkUyXzE2IEFORCBOT1QgUENSRTJfQlVJTERfUENSRTJfMzIpCisKK0lGKFBDUkUyX0JVSUxEX1BDUkUyXzgpCisgICAgICAgIFNFVChTVVBQT1JUX1BDUkUyXzggMSkKK0VORElGKFBDUkUyX0JVSUxEX1BDUkUyXzgpCisKK0lGKFBDUkUyX0JVSUxEX1BDUkUyXzE2KQorICAgICAgICBTRVQoU1VQUE9SVF9QQ1JFMl8xNiAxKQorRU5ESUYoUENSRTJfQlVJTERfUENSRTJfMTYpCisKK0lGKFBDUkUyX0JVSUxEX1BDUkUyXzMyKQorICAgICAgICBTRVQoU1VQUE9SVF9QQ1JFMl8zMiAxKQorRU5ESUYoUENSRTJfQlVJTERfUENSRTJfMzIpCisKK0lGKFBDUkUyX0JVSUxEX1BDUkUyR1JFUCBBTkQgTk9UIFBDUkUyX0JVSUxEX1BDUkUyXzgpCisgICAgICAgIE1FU1NBR0UoU1RBVFVTICIqKiBQQ1JFMl9CVUlMRF9QQ1JFMl84IG11c3QgYmUgZW5hYmxlZCBmb3IgdGhlIHBjcmUyZ3JlcCBwcm9ncmFtIikKKyAgICAgICAgU0VUKFBDUkUyX0JVSUxEX1BDUkUyR1JFUCBPRkYpCitFTkRJRihQQ1JFMl9CVUlMRF9QQ1JFMkdSRVAgQU5EIE5PVCBQQ1JFMl9CVUlMRF9QQ1JFMl84KQorCitJRihQQ1JFMl9TVVBQT1JUX0xJQlJFQURMSU5FIEFORCBQQ1JFMl9TVVBQT1JUX0xJQkVESVQpCisgICAgICAgIE1FU1NBR0UoRkFUQUxfRVJST1IgIk9ubHkgb25lIG9mIGxpYnJlYWRsaW5lIG9yIGxpYmVkaXRsaW5lIGNhbiBiZSBzcGVjaWZpZWQiKQorRU5ESUYoUENSRTJfU1VQUE9SVF9MSUJSRUFETElORSBBTkQgUENSRTJfU1VQUE9SVF9MSUJFRElUKQorCitJRihQQ1JFMl9TVVBQT1JUX0JTUl9BTllDUkxGKQorICAgICAgICBTRVQoQlNSX0FOWUNSTEYgMSkKK0VORElGKFBDUkUyX1NVUFBPUlRfQlNSX0FOWUNSTEYpCisKK0lGKFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DKQorICAgICAgICBTRVQoTkVWRVJfQkFDS1NMQVNIX0MgMSkKK0VORElGKFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DKQorCitJRihQQ1JFMl9TVVBQT1JUX1VOSUNPREUpCisgICAgICAgIFNFVChTVVBQT1JUX1VOSUNPREUgMSkKK0VORElGKFBDUkUyX1NVUFBPUlRfVU5JQ09ERSkKKworSUYoUENSRTJfU1VQUE9SVF9KSVQpCisgICAgICAgIFNFVChTVVBQT1JUX0pJVCAxKQorRU5ESUYoUENSRTJfU1VQUE9SVF9KSVQpCisKK0lGKFBDUkUyX1NVUFBPUlRfUENSRTJHUkVQX0pJVCkKKyAgICAgICAgU0VUKFNVUFBPUlRfUENSRTJHUkVQX0pJVCAxKQorRU5ESUYoUENSRTJfU1VQUE9SVF9QQ1JFMkdSRVBfSklUKQorCitJRihQQ1JFMl9TVVBQT1JUX1ZBTEdSSU5EKQorICAgICAgICBTRVQoU1VQUE9SVF9WQUxHUklORCAxKQorRU5ESUYoUENSRTJfU1VQUE9SVF9WQUxHUklORCkKKworIyBUaGlzIG5leHQgb25lIHVzZWQgdG8gcmVmZXJlbmNlICR7UkVBRExJTkVfTElCUkFSWX0pCisjIGJ1dCBJIHdhcyBhZHZpc2VkIHRvIGFkZCB0aGUgTkNVUlNFUyB0ZXN0IGFzIHdlbGwsIGFsb25nIHdpdGgKKyMgc29tZSBtb2RpZmljYXRpb25zIHRvIGNtYWtlL0ZpbmRSZWFkbGluZS5jbWFrZSB3aGljaCBzaG91bGQKKyMgbWFrZSBpdCBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpZiBuZWNlc3NhcnkuIFBICisKK0lGKFBDUkUyX1NVUFBPUlRfTElCUkVBRExJTkUpCisgICAgICAgIFNFVChTVVBQT1JUX0xJQlJFQURMSU5FIDEpCisgICAgICAgIFNFVChQQ1JFMlRFU1RfTElCUyAke1JFQURMSU5FX0xJQlJBUll9ICR7TkNVUlNFU19MSUJSQVJZfSkKK0VORElGKFBDUkUyX1NVUFBPUlRfTElCUkVBRExJTkUpCisKKyMgbGliZWRpdCBpcyBhIHBsdWctY29tcGF0aWJsZSBhbHRlcm5hdGl2ZSB0byBsaWJyZWFkbGluZQorCitJRihQQ1JFMl9TVVBQT1JUX0xJQkVESVQpCisgICAgICAgIFNFVChTVVBQT1JUX0xJQkVESVQgMSkKKyAgICAgICAgU0VUKFBDUkUyVEVTVF9MSUJTICR7RURJVExJTkVfTElCUkFSWX0gJHtOQ1VSU0VTX0xJQlJBUll9KQorRU5ESUYoUENSRTJfU1VQUE9SVF9MSUJFRElUKQorCitJRihQQ1JFMl9TVVBQT1JUX0xJQlopCisgICAgICAgIFNFVChTVVBQT1JUX0xJQlogMSkKKyAgICAgICAgU0VUKFBDUkUyR1JFUF9MSUJTICR7UENSRTJHUkVQX0xJQlN9ICR7WkxJQl9MSUJSQVJJRVN9KQorRU5ESUYoUENSRTJfU1VQUE9SVF9MSUJaKQorCitJRihQQ1JFMl9TVVBQT1JUX0xJQkJaMikKKyAgICAgICAgU0VUKFNVUFBPUlRfTElCQloyIDEpCisgICAgICAgIFNFVChQQ1JFMkdSRVBfTElCUyAke1BDUkUyR1JFUF9MSUJTfSAke0JaSVAyX0xJQlJBUklFU30pCitFTkRJRihQQ1JFMl9TVVBQT1JUX0xJQkJaMikKKworU0VUKE5FV0xJTkVfREVGQVVMVCAiIikKKworSUYoUENSRTJfTkVXTElORSBTVFJFUVVBTCAiQ1IiKQorICAgICAgICBTRVQoTkVXTElORV9ERUZBVUxUICIxIikKK0VORElGKFBDUkUyX05FV0xJTkUgU1RSRVFVQUwgIkNSIikKK0lGKFBDUkUyX05FV0xJTkUgU1RSRVFVQUwgIkxGIikKKyAgICAgICAgU0VUKE5FV0xJTkVfREVGQVVMVCAiMiIpCitFTkRJRihQQ1JFMl9ORVdMSU5FIFNUUkVRVUFMICJMRiIpCitJRihQQ1JFMl9ORVdMSU5FIFNUUkVRVUFMICJDUkxGIikKKyAgICAgICAgU0VUKE5FV0xJTkVfREVGQVVMVCAiMyIpCitFTkRJRihQQ1JFMl9ORVdMSU5FIFNUUkVRVUFMICJDUkxGIikKK0lGKFBDUkUyX05FV0xJTkUgU1RSRVFVQUwgIkFOWSIpCisgICAgICAgIFNFVChORVdMSU5FX0RFRkFVTFQgIjQiKQorRU5ESUYoUENSRTJfTkVXTElORSBTVFJFUVVBTCAiQU5ZIikKK0lGKFBDUkUyX05FV0xJTkUgU1RSRVFVQUwgIkFOWUNSTEYiKQorICAgICAgICBTRVQoTkVXTElORV9ERUZBVUxUICI1IikKK0VORElGKFBDUkUyX05FV0xJTkUgU1RSRVFVQUwgIkFOWUNSTEYiKQorCitJRihORVdMSU5FX0RFRkFVTFQgU1RSRVFVQUwgIiIpCisgICAgICAgIE1FU1NBR0UoRkFUQUxfRVJST1IgIlRoZSBQQ1JFMl9ORVdMSU5FIHZhcmlhYmxlIG11c3QgYmUgc2V0IHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczogXCJMRlwiLCBcIkNSXCIsIFwiQ1JMRlwiLCBcIkFOWVwiLCBcIkFOWUNSTEZcIi4iKQorRU5ESUYoTkVXTElORV9ERUZBVUxUIFNUUkVRVUFMICIiKQorCitJRihQQ1JFMl9FQkNESUMpCisgICAgICAgIFNFVChFQkNESUMgMSkKK0VORElGKFBDUkUyX0VCQ0RJQykKKworSUYoUENSRTJfRUJDRElDX05MMjUpCisgICAgICAgIFNFVChFQkNESUMgMSkKKyAgICAgICAgU0VUKEVCQ0RJQ19OTDI1IDEpCitFTkRJRihQQ1JFMl9FQkNESUNfTkwyNSkKKworSUYoUENSRTJfSEVBUF9NQVRDSF9SRUNVUlNFKQorICAgICAgICBTRVQoSEVBUF9NQVRDSF9SRUNVUlNFIDEpCitFTkRJRihQQ1JFMl9IRUFQX01BVENIX1JFQ1VSU0UpCisKKyMgT3V0cHV0IGZpbGVzCisKK0NPTkZJR1VSRV9GSUxFKGNvbmZpZy1jbWFrZS5oLmluCisgICAgICAgICAgICAgICAke1BST0pFQ1RfQklOQVJZX0RJUn0vY29uZmlnLmgKKyAgICAgICAgICAgICAgIEBPTkxZKQorCisjIFBhcnNlIHZlcnNpb24gbnVtYmVycyBhbmQgZGF0ZSBvdXQgb2YgY29uZmlndXJlLmFjCisKK2ZpbGUoU1RSSU5HUyAke1BST0pFQ1RfU09VUkNFX0RJUn0vY29uZmlndXJlLmFjCisgIGNvbmZpZ3VyZV9saW5lcworICBMSU1JVF9DT1VOVCA1MCAjIFJlYWQgb25seSB0aGUgZmlyc3QgNTAgbGluZXMgb2YgdGhlIGZpbGUKKykKKworc2V0KFNFQVJDSEVEX1ZBUklBQkxFUyAicGNyZTJfbWFqb3IiICJwY3JlMl9taW5vciIgInBjcmUyX3ByZXJlbGVhc2UiICJwY3JlMl9kYXRlIikKK2ZvcmVhY2goY29uZmlndXJlX2xpbmUgJHtjb25maWd1cmVfbGluZXN9KQorICAgIGZvcmVhY2goX3N1YnN0aXR1dGlvbl92YXJpYWJsZSAke1NFQVJDSEVEX1ZBUklBQkxFU30pCisgICAgICAgIHN0cmluZyhUT1VQUEVSICR7X3N1YnN0aXR1dGlvbl92YXJpYWJsZX0gX3N1YnN0aXR1dGlvbl92YXJpYWJsZV91cHBlcikKKyAgICAgICAgaWYgKE5PVCAke19zdWJzdGl0dXRpb25fdmFyaWFibGVfdXBwZXJ9KQorICAgICAgICAgICAgc3RyaW5nKFJFR0VYIE1BVENIICJtNF9kZWZpbmVcXCgke19zdWJzdGl0dXRpb25fdmFyaWFibGV9LCBcXFsoLiopXFxdIiBNQUNUSEVEX1NUUklORyAke2NvbmZpZ3VyZV9saW5lfSkKKyAgICAgICAgICAgIGlmIChDTUFLRV9NQVRDSF8xKQorICAgICAgICAgICAgICAgIHNldCgke19zdWJzdGl0dXRpb25fdmFyaWFibGVfdXBwZXJ9ICR7Q01BS0VfTUFUQ0hfMX0pCisgICAgICAgICAgICBlbmRpZigpCisgICAgICAgIGVuZGlmKCkKKyAgICBlbmRmb3JlYWNoKCkKK2VuZGZvcmVhY2goKQorCitDT05GSUdVUkVfRklMRShzcmMvcGNyZTIuaC5pbgorICAgICAgICAgICAgICAgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L3BjcmUyLmgKKyAgICAgICAgICAgICAgIEBPTkxZKQorCisjIFdoYXQgYWJvdXQgcGNyZTItY29uZmlnIGFuZCBsaWJwY3JlMi5wYz8KKworIyBDaGFyYWN0ZXIgdGFibGUgZ2VuZXJhdGlvbgorCitPUFRJT04oUENSRTJfUkVCVUlMRF9DSEFSVEFCTEVTICJSZWJ1aWxkIGNoYXIgdGFibGVzIiBPRkYpCitJRihQQ1JFMl9SRUJVSUxEX0NIQVJUQUJMRVMpCisgIEFERF9FWEVDVVRBQkxFKGRmdGFibGVzIHNyYy9kZnRhYmxlcy5jKQorICBBRERfQ1VTVE9NX0NPTU1BTkQoCisgICAgQ09NTUVOVCAiR2VuZXJhdGluZyBjaGFyYWN0ZXIgdGFibGVzIChwY3JlMl9jaGFydGFibGVzLmMpIGZvciBjdXJyZW50IGxvY2FsZSIKKyAgICBERVBFTkRTIGRmdGFibGVzCisgICAgQ09NTUFORCBkZnRhYmxlcworICAgIEFSR1MgICAgICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS9wY3JlMl9jaGFydGFibGVzLmMKKyAgICBPVVRQVVQgICAgICAke1BST0pFQ1RfQklOQVJZX0RJUn0vcGNyZTJfY2hhcnRhYmxlcy5jCisgICkKK0VMU0UoUENSRTJfUkVCVUlMRF9DSEFSVEFCTEVTKQorICBDT05GSUdVUkVfRklMRSgke1BST0pFQ1RfU09VUkNFX0RJUn0vc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0CisgICAgICAgICAgICAgICAgICAgICR7UFJPSkVDVF9CSU5BUllfRElSfS9wY3JlMl9jaGFydGFibGVzLmMKKyAgICAgICAgICAgICAgICAgICAgQ09QWU9OTFkpCitFTkRJRihQQ1JFMl9SRUJVSUxEX0NIQVJUQUJMRVMpCisKKyMgU291cmNlIGNvZGUKKworU0VUKFBDUkUyX0hFQURFUlMgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L3BjcmUyLmgpCisKK1NFVChQQ1JFMl9TT1VSQ0VTCisgIHNyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYworICAke1BST0pFQ1RfQklOQVJZX0RJUn0vcGNyZTJfY2hhcnRhYmxlcy5jCisgIHNyYy9wY3JlMl9jb21waWxlLmMKKyAgc3JjL3BjcmUyX2NvbmZpZy5jCisgIHNyYy9wY3JlMl9jb250ZXh0LmMKKyAgc3JjL3BjcmUyX2RmYV9tYXRjaC5jCisgIHNyYy9wY3JlMl9lcnJvci5jCisgIHNyYy9wY3JlMl9maW5kX2JyYWNrZXQuYworICBzcmMvcGNyZTJfaml0X2NvbXBpbGUuYworICBzcmMvcGNyZTJfbWFrZXRhYmxlcy5jCisgIHNyYy9wY3JlMl9tYXRjaC5jCisgIHNyYy9wY3JlMl9tYXRjaF9kYXRhLmMKKyAgc3JjL3BjcmUyX25ld2xpbmUuYworICBzcmMvcGNyZTJfb3JkMnV0Zi5jCisgIHNyYy9wY3JlMl9wYXR0ZXJuX2luZm8uYworICBzcmMvcGNyZTJfc2VyaWFsaXplLmMKKyAgc3JjL3BjcmUyX3N0cmluZ191dGlscy5jCisgIHNyYy9wY3JlMl9zdHVkeS5jCisgIHNyYy9wY3JlMl9zdWJzdGl0dXRlLmMKKyAgc3JjL3BjcmUyX3N1YnN0cmluZy5jCisgIHNyYy9wY3JlMl90YWJsZXMuYworICBzcmMvcGNyZTJfdWNkLmMKKyAgc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jCisgIHNyYy9wY3JlMl94Y2xhc3MuYworKQorCitTRVQoUENSRTJQT1NJWF9IRUFERVJTIHNyYy9wY3JlMnBvc2l4LmgpCitTRVQoUENSRTJQT1NJWF9TT1VSQ0VTIHNyYy9wY3JlMnBvc2l4LmMpCisKK0lGKE1JTkdXIEFORCBOT1QgUENSRTJfU1RBVElDKQorSUYgKEVYSVNUUyAke1BST0pFQ1RfU09VUkNFX0RJUn0vcGNyZTIucmMpCitBRERfQ1VTVE9NX0NPTU1BTkQoT1VUUFVUICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9wY3JlMi5vCitQUkUtTElOSworQ09NTUFORCB3aW5kcmVzIEFSR1MgcGNyZTIucmMgcGNyZTIubworV09SS0lOR19ESVJFQ1RPUlkgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9CitDT01NRU5UIFVzaW5nIHBjcmUyIGNvZmYgaW5mbyBpbiBtaW5ndyBidWlsZCkKK1NFVChQQ1JFMl9TT1VSQ0VTCisgICR7UENSRTJfU09VUkNFU30gJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L3BjcmUyLm8KKykKK0VORElGKEVYSVNUUyAke1BST0pFQ1RfU09VUkNFX0RJUn0vcGNyZTIucmMpCitJRiAoRVhJU1RTICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9wY3JlMnBvc2l4LnJjKQorQUREX0NVU1RPTV9DT01NQU5EKE9VVFBVVCAke1BST0pFQ1RfU09VUkNFX0RJUn0vcGNyZTJwb3NpeC5vCitQUkUtTElOSworQ09NTUFORCB3aW5kcmVzIEFSR1MgcGNyZTJwb3NpeC5yYyBwY3JlMnBvc2l4Lm8KK1dPUktJTkdfRElSRUNUT1JZICR7UFJPSkVDVF9TT1VSQ0VfRElSfQorQ09NTUVOVCBVc2luZyBwY3JlMnBvc2l4IGNvZmYgaW5mbyBpbiBtaW5ndyBidWlsZCkKK1NFVChQQ1JFMlBPU0lYX1NPVVJDRVMKKyAgJHtQQ1JFMlBPU0lYX1NPVVJDRVN9ICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9wY3JlMnBvc2l4Lm8KKykKK0VORElGKEVYSVNUUyAke1BST0pFQ1RfU09VUkNFX0RJUn0vcGNyZTJwb3NpeC5yYykKK0VORElGKE1JTkdXIEFORCBOT1QgUENSRTJfU1RBVElDKQorCitJRihNU1ZDIEFORCBOT1QgUENSRTJfU1RBVElDKQorSUYgKEVYSVNUUyAke1BST0pFQ1RfU09VUkNFX0RJUn0vcGNyZTIucmMpCitTRVQoUENSRTJfU09VUkNFUworICAke1BDUkUyX1NPVVJDRVN9IHBjcmUyLnJjKQorRU5ESUYoRVhJU1RTICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9wY3JlMi5yYykKK0lGIChFWElTVFMgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L3BjcmUycG9zaXgucmMpCitTRVQoUENSRTJQT1NJWF9TT1VSQ0VTCisgICR7UENSRTJQT1NJWF9TT1VSQ0VTfSBwY3JlMnBvc2l4LnJjKQorRU5ESUYgKEVYSVNUUyAke1BST0pFQ1RfU09VUkNFX0RJUn0vcGNyZTJwb3NpeC5yYykKK0VORElGKE1TVkMgQU5EIE5PVCBQQ1JFMl9TVEFUSUMpCisKKyMgQnVpbGQgc2V0dXAKKworQUREX0RFRklOSVRJT05TKC1ESEFWRV9DT05GSUdfSCkKKworSUYoTVNWQykKKyAgQUREX0RFRklOSVRJT05TKC1EX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MpCitFTkRJRihNU1ZDKQorCitTRVQoQ01BS0VfSU5DTFVERV9DVVJSRU5UX0RJUiAxKQorIyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRvIG5vdCBsaW5rIGRlYnVnIGxpYnMKKyMgYWdhaW5zdCByZWxlYXNlIGxpYnMgYW5kIHZpY2UgdmVyc2EKK0lGKFdJTjMyKQorICBTRVQoQ01BS0VfREVCVUdfUE9TVEZJWCAiZCIpCitFTkRJRihXSU4zMikKKworU0VUKHRhcmdldHMpCisKKyMgOC1iaXQgbGlicmFyeQorCitJRihQQ1JFMl9CVUlMRF9QQ1JFMl84KQorQUREX0xJQlJBUlkocGNyZTItOCAke1BDUkUyX0hFQURFUlN9ICR7UENSRTJfU09VUkNFU30gJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2NvbmZpZy5oKQorU0VUX1BST1BFUlRZKFRBUkdFVCBwY3JlMi04CisgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgUENSRTJfQ09ERV9VTklUX1dJRFRIPTgpCitTRVQodGFyZ2V0cyAke3RhcmdldHN9IHBjcmUyLTgpCitBRERfTElCUkFSWShwY3JlMnBvc2l4ICR7UENSRTJQT1NJWF9IRUFERVJTfSAke1BDUkUyUE9TSVhfU09VUkNFU30pCitTRVRfUFJPUEVSVFkoVEFSR0VUIHBjcmUycG9zaXgKKyAgUFJPUEVSVFkgQ09NUElMRV9ERUZJTklUSU9OUyBQQ1JFMl9DT0RFX1VOSVRfV0lEVEg9OCkKK1NFVCh0YXJnZXRzICR7dGFyZ2V0c30gcGNyZTJwb3NpeCkKK1RBUkdFVF9MSU5LX0xJQlJBUklFUyhwY3JlMnBvc2l4IHBjcmUyLTgpCisKK0lGKE1JTkdXIEFORCBOT1QgUENSRTJfU1RBVElDKQorICBJRihOT05fU1RBTkRBUkRfTElCX1BSRUZJWCkKKyAgICBTRVRfVEFSR0VUX1BST1BFUlRJRVMocGNyZTItOCBwY3JlMnBvc2l4IFBST1BFUlRJRVMgUFJFRklYICIiKQorICBFTkRJRihOT05fU1RBTkRBUkRfTElCX1BSRUZJWCkKKyAgSUYoTk9OX1NUQU5EQVJEX0xJQl9TVUZGSVgpCisgICAgU0VUX1RBUkdFVF9QUk9QRVJUSUVTKHBjcmUyLTggcGNyZTJwb3NpeCBQUk9QRVJUSUVTIFNVRkZJWCAiLTAuZGxsIikKKyAgRU5ESUYoTk9OX1NUQU5EQVJEX0xJQl9TVUZGSVgpCitFTkRJRihNSU5HVyBBTkQgTk9UIFBDUkUyX1NUQVRJQykKK0VORElGKFBDUkUyX0JVSUxEX1BDUkUyXzgpCisKKyMgMTYtYml0IGxpYnJhcnkKKworSUYoUENSRTJfQlVJTERfUENSRTJfMTYpCitBRERfTElCUkFSWShwY3JlMi0xNiAke1BDUkUyX0hFQURFUlN9ICR7UENSRTJfU09VUkNFU30gJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L2NvbmZpZy5oKQorU0VUX1BST1BFUlRZKFRBUkdFVCBwY3JlMi0xNgorICBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TIFBDUkUyX0NPREVfVU5JVF9XSURUSD0xNikKK1NFVCh0YXJnZXRzICR7dGFyZ2V0c30gcGNyZTItMTYpCisKK0lGKE1JTkdXIEFORCBOT1QgUENSRTJfU1RBVElDKQorICBJRihOT05fU1RBTkRBUkRfTElCX1BSRUZJWCkKKyAgICBTRVRfVEFSR0VUX1BST1BFUlRJRVMocGNyZTItMTYgUFJPUEVSVElFUyBQUkVGSVggIiIpCisgIEVORElGKE5PTl9TVEFOREFSRF9MSUJfUFJFRklYKQorICBJRihOT05fU1RBTkRBUkRfTElCX1NVRkZJWCkKKyAgICBTRVRfVEFSR0VUX1BST1BFUlRJRVMocGNyZTItMTYgUFJPUEVSVElFUyBTVUZGSVggIi0wLmRsbCIpCisgIEVORElGKE5PTl9TVEFOREFSRF9MSUJfU1VGRklYKQorRU5ESUYoTUlOR1cgQU5EIE5PVCBQQ1JFMl9TVEFUSUMpCitFTkRJRihQQ1JFMl9CVUlMRF9QQ1JFMl8xNikKKworIyAzMi1iaXQgbGlicmFyeQorCitJRihQQ1JFMl9CVUlMRF9QQ1JFMl8zMikKK0FERF9MSUJSQVJZKHBjcmUyLTMyICR7UENSRTJfSEVBREVSU30gJHtQQ1JFMl9TT1VSQ0VTfSAke1BST0pFQ1RfQklOQVJZX0RJUn0vY29uZmlnLmgpCitTRVRfUFJPUEVSVFkoVEFSR0VUIHBjcmUyLTMyCisgIFBST1BFUlRZIENPTVBJTEVfREVGSU5JVElPTlMgUENSRTJfQ09ERV9VTklUX1dJRFRIPTMyKQorU0VUKHRhcmdldHMgJHt0YXJnZXRzfSBwY3JlMi0zMikKKworSUYoTUlOR1cgQU5EIE5PVCBQQ1JFMl9TVEFUSUMpCisgIElGKE5PTl9TVEFOREFSRF9MSUJfUFJFRklYKQorICAgIFNFVF9UQVJHRVRfUFJPUEVSVElFUyhwY3JlMi0zMiBQUk9QRVJUSUVTIFBSRUZJWCAiIikKKyAgRU5ESUYoTk9OX1NUQU5EQVJEX0xJQl9QUkVGSVgpCisgIElGKE5PTl9TVEFOREFSRF9MSUJfU1VGRklYKQorICAgIFNFVF9UQVJHRVRfUFJPUEVSVElFUyhwY3JlMi0zMiBQUk9QRVJUSUVTIFNVRkZJWCAiLTAuZGxsIikKKyAgRU5ESUYoTk9OX1NUQU5EQVJEX0xJQl9TVUZGSVgpCitFTkRJRihNSU5HVyBBTkQgTk9UIFBDUkUyX1NUQVRJQykKK0VORElGKFBDUkUyX0JVSUxEX1BDUkUyXzMyKQorCisjIEV4ZWN1dGFibGVzCisKK0lGKFBDUkUyX0JVSUxEX1BDUkUyR1JFUCkKKyAgQUREX0VYRUNVVEFCTEUocGNyZTJncmVwIHNyYy9wY3JlMmdyZXAuYykKKyAgU0VUX1BST1BFUlRZKFRBUkdFVCBwY3JlMmdyZXAKKyAgICBQUk9QRVJUWSBDT01QSUxFX0RFRklOSVRJT05TIFBDUkUyX0NPREVfVU5JVF9XSURUSD04KQorICBTRVQodGFyZ2V0cyAke3RhcmdldHN9IHBjcmUyZ3JlcCkKKyAgVEFSR0VUX0xJTktfTElCUkFSSUVTKHBjcmUyZ3JlcCBwY3JlMnBvc2l4ICR7UENSRTJHUkVQX0xJQlN9KQorRU5ESUYoUENSRTJfQlVJTERfUENSRTJHUkVQKQorCisjIFRlc3RpbmcKKworSUYoUENSRTJfQlVJTERfVEVTVFMpCisgIEVOQUJMRV9URVNUSU5HKCkKKworICBTRVQoUENSRTJURVNUX1NPVVJDRVMgc3JjL3BjcmUydGVzdC5jKQorCisgIEFERF9FWEVDVVRBQkxFKHBjcmUydGVzdCAke1BDUkUyVEVTVF9TT1VSQ0VTfSkKKyAgU0VUKHRhcmdldHMgJHt0YXJnZXRzfSBwY3JlMnRlc3QpCisgIElGKFBDUkUyX0JVSUxEX1BDUkUyXzgpCisgICAgTElTVChBUFBFTkQgUENSRTJURVNUX0xJQlMgcGNyZTJwb3NpeCBwY3JlMi04KQorICBFTkRJRihQQ1JFMl9CVUlMRF9QQ1JFMl84KQorICBJRihQQ1JFMl9CVUlMRF9QQ1JFMl8xNikKKyAgICBMSVNUKEFQUEVORCBQQ1JFMlRFU1RfTElCUyBwY3JlMi0xNikKKyAgRU5ESUYoUENSRTJfQlVJTERfUENSRTJfMTYpCisgIElGKFBDUkUyX0JVSUxEX1BDUkUyXzMyKQorICAgIExJU1QoQVBQRU5EIFBDUkUyVEVTVF9MSUJTIHBjcmUyLTMyKQorICBFTkRJRihQQ1JFMl9CVUlMRF9QQ1JFMl8zMikKKyAgVEFSR0VUX0xJTktfTElCUkFSSUVTKHBjcmUydGVzdCAke1BDUkUyVEVTVF9MSUJTfSkKKworICBJRihQQ1JFMl9TVVBQT1JUX0pJVCkKKyAgICBBRERfRVhFQ1VUQUJMRShwY3JlMl9qaXRfdGVzdCBzcmMvcGNyZTJfaml0X3Rlc3QuYykKKyAgICBTRVQodGFyZ2V0cyAke3RhcmdldHN9IHBjcmUyX2ppdF90ZXN0KQorICAgIFNFVChQQ1JFMl9KSVRfVEVTVF9MSUJTICkKKyAgICBJRihQQ1JFMl9CVUlMRF9QQ1JFMl84KQorICAgICAgTElTVChBUFBFTkQgUENSRTJfSklUX1RFU1RfTElCUyBwY3JlMi04KQorICAgIEVORElGKFBDUkUyX0JVSUxEX1BDUkUyXzgpCisgICAgSUYoUENSRTJfQlVJTERfUENSRTJfMTYpCisgICAgICBMSVNUKEFQUEVORCBQQ1JFMl9KSVRfVEVTVF9MSUJTIHBjcmUyLTE2KQorICAgIEVORElGKFBDUkUyX0JVSUxEX1BDUkUyXzE2KQorICAgIElGKFBDUkUyX0JVSUxEX1BDUkUyXzMyKQorICAgICAgTElTVChBUFBFTkQgUENSRTJfSklUX1RFU1RfTElCUyBwY3JlMi0zMikKKyAgICBFTkRJRihQQ1JFMl9CVUlMRF9QQ1JFMl8zMikKKyAgICBUQVJHRVRfTElOS19MSUJSQVJJRVMocGNyZTJfaml0X3Rlc3QgJHtQQ1JFMl9KSVRfVEVTVF9MSUJTfSkKKyAgRU5ESUYoUENSRTJfU1VQUE9SVF9KSVQpCisKKyAgIyBleGVzIGluIERlYnVnIGxvY2F0aW9uIHRlc3RlZCBieSB0aGUgUnVuVGVzdCBzaGVsbCBzY3JpcHQKKyAgIyB2aWEgIm1ha2UgdGVzdCIKKworICBJRihQQ1JFMl9CVUlMRF9QQ1JFMkdSRVApCisgICAgR0VUX1RBUkdFVF9QUk9QRVJUWShQQ1JFMkdSRVBfRVhFIHBjcmUyZ3JlcCBERUJVR19MT0NBVElPTikKKyAgRU5ESUYoUENSRTJfQlVJTERfUENSRTJHUkVQKQorCisgIEdFVF9UQVJHRVRfUFJPUEVSVFkoUENSRTJURVNUX0VYRSBwY3JlMnRlc3QgREVCVUdfTE9DQVRJT04pCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAjIFdyaXRlIG91dCBhIENUZXN0IGNvbmZpZ3VyYXRpb24gZmlsZQorICAjCisgIEZJTEUoV1JJVEUgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L0NUZXN0Q3VzdG9tLmN0ZXN0CisgICIjIFRoaXMgaXMgYSBnZW5lcmF0ZWQgZmlsZS4KK01FU1NBR0UoXCJXaGVuIHRlc3RpbmcgaXMgY29tcGxldGUsIHJldmlldyB0ZXN0IG91dHB1dCBpbiB0aGUKK1xcXCIke1BST0pFQ1RfQklOQVJZX0RJUn0vVGVzdGluZy9UZW1wb3JhcnlcXFwiIGZvbGRlci5cIikKK01FU1NBR0UoXCIgXCIpCisiKQorCisgIEZJTEUoV1JJVEUgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L3BjcmUyX3Rlc3Quc2gKKyAgIiMhIC9iaW4vc2gKKyMgVGhpcyBpcyBhIGdlbmVyYXRlZCBmaWxlLgorLiAke1BST0pFQ1RfU09VUkNFX0RJUn0vUnVuVGVzdAoraWYgdGVzdCBcIiQ/XCIgIT0gXCIwXCI7IHRoZW4gZXhpdCAxOyBmaQorIyBFbmQKKyIpCisKKyAgSUYoVU5JWCkKKyAgICBBRERfVEVTVChwY3JlMl90ZXN0IHNoICR7UFJPSkVDVF9CSU5BUllfRElSfS9wY3JlMl90ZXN0LnNoKQorICBFTkRJRihVTklYKQorCisgIElGKFBDUkUyX0JVSUxEX1BDUkUyR1JFUCkKKyAgICBGSUxFKFdSSVRFICR7UFJPSkVDVF9CSU5BUllfRElSfS9wY3JlMl9ncmVwX3Rlc3Quc2gKKyAgICAiIyEgL2Jpbi9zaAorIyBUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGUuCisuICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9SdW5HcmVwVGVzdAoraWYgdGVzdCBcIiQ/XCIgIT0gXCIwXCI7IHRoZW4gZXhpdCAxOyBmaQorIyBFbmQKKyIpCisKKyAgICBJRihVTklYKQorICAgICAgQUREX1RFU1QocGNyZTJfZ3JlcF90ZXN0IHNoICR7UFJPSkVDVF9CSU5BUllfRElSfS9wY3JlMl9ncmVwX3Rlc3Quc2gpCisgICAgRU5ESUYoVU5JWCkKKyAgRU5ESUYoUENSRTJfQlVJTERfUENSRTJHUkVQKQorCisgIElGKFdJTjMyKQorICAgICMgUHJvdmlkZSBlbnZpcm9ubWVudCBmb3IgZXhlY3V0aW5nIHRoZSBiYXQgZmlsZSB2ZXJzaW9uIG9mIFJ1blRlc3QKKyAgICBGSUxFKFRPX05BVElWRV9QQVRIICR7UFJPSkVDVF9TT1VSQ0VfRElSfSB3aW5zcmMpCisgICAgRklMRShUT19OQVRJVkVfUEFUSCAke1BST0pFQ1RfQklOQVJZX0RJUn0gd2luYmluKQorICAgIEZJTEUoVE9fTkFUSVZFX1BBVEggJHtQQ1JFMlRFU1RfRVhFfSB3aW5leGUpCisKKyAgICBGSUxFKFdSSVRFICR7UFJPSkVDVF9CSU5BUllfRElSfS9wY3JlMl90ZXN0LmJhdAorICAgICJcQFJFTSBUaGlzIGlzIGEgZ2VuZXJhdGVkIGZpbGUuCitcQGVjaG8gb2ZmCitzZXRsb2NhbAorU0VUIHNyY2Rpcj1cIiR7d2luc3JjfVwiCitTRVQgcGNyZTJ0ZXN0PVwiJHt3aW5leGV9XCIKK2lmIG5vdCBbJUNNQUtFX0NPTkZJR19UWVBFJV09PVtdIFNFVCBwY3JlMnRlc3Q9XCIke3dpbmJpbn1cXCVDTUFLRV9DT05GSUdfVFlQRSVcXHBjcmUydGVzdC5leGVcIgorY2FsbCAlc3JjZGlyJVxcUnVuVGVzdC5CYXQKK2lmIGVycm9ybGV2ZWwgMSBleGl0IC9iIDEKK2VjaG8gUnVuVGVzdC5iYXQgdGVzdHMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZAorIikKKworICBBRERfVEVTVChOQU1FIHBjcmUyX3Rlc3RfYmF0CisgIENPTU1BTkQgcGNyZTJfdGVzdC5iYXQpCisgIFNFVF9URVNUU19QUk9QRVJUSUVTKHBjcmUyX3Rlc3RfYmF0IFBST1BFUlRJRVMKKyAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIlJ1blRlc3RcXC5iYXQgdGVzdHMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCIpCisKKyAgICBJRigiJEVOVntPU1RZUEV9IiBTVFJFUVVBTCAibXN5cyIpCisgICAgICAjIEJvdGggdGhlIHNoIGFuZCBiYXQgZmlsZSB2ZXJzaW9ucyBvZiBSdW5UZXN0IGFyZSBydW4gaWYgbWFrZSB0ZXN0IGlzIHVzZWQKKyAgICAgICMgaW4gbXN5cworICAgICAgQUREX1RFU1QocGNyZTJfdGVzdF9zaCAgICBzaC5leGUgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L3BjcmUyX3Rlc3Quc2gpCisgICAgICBJRihQQ1JFMl9CVUlMRF9QQ1JFMkdSRVApCisgICAgICAgIEFERF9URVNUKHBjcmUyX2dyZXBfdGVzdCAgc2guZXhlICR7UFJPSkVDVF9CSU5BUllfRElSfS9wY3JlMl9ncmVwX3Rlc3Quc2gpCisgICAgICBFTkRJRihQQ1JFMl9CVUlMRF9QQ1JFMkdSRVApCisgICAgRU5ESUYoIiRFTlZ7T1NUWVBFfSIgU1RSRVFVQUwgIm1zeXMiKQorICBFTkRJRihXSU4zMikKKworICAjIENoYW5nZWQgdG8gYWNjb21tb2RhdGUgdGVzdGluZyB3aGljaGV2ZXIgbG9jYXRpb24gd2FzIGp1c3QgYnVpbHQKKworICBJRihQQ1JFMl9TVVBQT1JUX0pJVCkKKyAgICBBRERfVEVTVChwY3JlMl9qaXRfdGVzdCBwY3JlMl9qaXRfdGVzdCkKKyAgRU5ESUYoUENSRTJfU1VQUE9SVF9KSVQpCisKK0VORElGKFBDUkUyX0JVSUxEX1RFU1RTKQorCisjIEluc3RhbGxhdGlvbgorCitTRVQoQ01BS0VfSU5TVEFMTF9BTFdBWVMgMSkKKworSU5TVEFMTChUQVJHRVRTICR7dGFyZ2V0c30KKyAgICAgICAgUlVOVElNRSBERVNUSU5BVElPTiBiaW4KKyAgICAgICAgTElCUkFSWSBERVNUSU5BVElPTiBsaWIKKyAgICAgICAgQVJDSElWRSBERVNUSU5BVElPTiBsaWIpCisKK0lOU1RBTEwoRklMRVMgJHtQQ1JFMl9IRUFERVJTfSAke1BDUkUyUE9TSVhfSEVBREVSU30gREVTVElOQVRJT04gaW5jbHVkZSkKKworRklMRShHTE9CIGh0bWwgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2RvYy9odG1sLyouaHRtbCkKK0ZJTEUoR0xPQiBtYW4xICR7UFJPSkVDVF9TT1VSQ0VfRElSfS9kb2MvKi4xKQorRklMRShHTE9CIG1hbjMgJHtQUk9KRUNUX1NPVVJDRV9ESVJ9L2RvYy8qLjMpCisKK0ZPUkVBQ0gobWFuICR7bWFuM30pCisgICAgICAgIEdFVF9GSUxFTkFNRV9DT01QT05FTlQobWFuX3RtcCAke21hbn0gTkFNRSkKKyAgICAgICAgU0VUKG1hbjNfbmV3ICR7bWFuM30gJHttYW59KQorRU5ERk9SRUFDSChtYW4gJHttYW4zfSkKK1NFVChtYW4zICR7bWFuM19uZXd9KQorCitJTlNUQUxMKEZJTEVTICR7bWFuMX0gREVTVElOQVRJT04gbWFuL21hbjEpCitJTlNUQUxMKEZJTEVTICR7bWFuM30gREVTVElOQVRJT04gbWFuL21hbjMpCitJTlNUQUxMKEZJTEVTICR7aHRtbH0gREVTVElOQVRJT04gc2hhcmUvZG9jL3BjcmUyL2h0bWwpCisKK0lGKE1TVkMgQU5EIElOU1RBTExfTVNWQ19QREIpCisgICAgSU5TVEFMTChGSUxFUyAke1BST0pFQ1RfQklOQVJZX0RJUn0vcGNyZTIucGRiCisgICAgICAgICAgICAgICAgICAke1BST0pFQ1RfQklOQVJZX0RJUn0vcGNyZTJwb3NpeC5wZGIKKyAgICAgICAgICAgIERFU1RJTkFUSU9OIGJpbgorICAgICAgICAgICAgQ09ORklHVVJBVElPTlMgUmVsV2l0aERlYkluZm8pCisgICAgSU5TVEFMTChGSUxFUyAke1BST0pFQ1RfQklOQVJZX0RJUn0vcGNyZTJkLnBkYgorICAgICAgICAgICAgICAgICAgJHtQUk9KRUNUX0JJTkFSWV9ESVJ9L3BjcmUycG9zaXhkLnBkYgorICAgICAgICAgICAgREVTVElOQVRJT04gYmluCisgICAgICAgICAgICBDT05GSUdVUkFUSU9OUyBEZWJ1ZykKK0VORElGKE1TVkMgQU5EIElOU1RBTExfTVNWQ19QREIpCisKKyMgSGVscCwgb25seSBmb3IgbmljZSBvdXRwdXQKK0lGKEJVSUxEX1NIQVJFRF9MSUJTKQorICBTRVQoQlVJTERfU1RBVElDX0xJQlMgT0ZGKQorRUxTRShCVUlMRF9TSEFSRURfTElCUykKKyAgU0VUKEJVSUxEX1NUQVRJQ19MSUJTIE9OKQorRU5ESUYoQlVJTERfU0hBUkVEX0xJQlMpCisKK0lGKFBDUkUyX1NIT1dfUkVQT1JUKQorICBTVFJJTkcoVE9VUFBFUiAiJHtDTUFLRV9CVUlMRF9UWVBFfSIgYnVpbGR0eXBlKQorICBJRiAoQ01BS0VfQ19GTEFHUykKKyAgICBTRVQoY2ZzcCAiICIpCisgIEVORElGKENNQUtFX0NfRkxBR1MpCisgIE1FU1NBR0UoU1RBVFVTICIiKQorICBNRVNTQUdFKFNUQVRVUyAiIikKKyAgTUVTU0FHRShTVEFUVVMgIlBDUkUyIGNvbmZpZ3VyYXRpb24gc3VtbWFyeToiKQorICBNRVNTQUdFKFNUQVRVUyAiIikKKyAgTUVTU0FHRShTVEFUVVMgIiAgSW5zdGFsbCBwcmVmaXggLi4uLi4uLi4uLi4uLi4uLi4uIDogJHtDTUFLRV9JTlNUQUxMX1BSRUZJWH0iKQorICBNRVNTQUdFKFNUQVRVUyAiICBDIGNvbXBpbGVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOiAke0NNQUtFX0NfQ09NUElMRVJ9IikKKyAgTUVTU0FHRShTVEFUVVMgIiAgQyBjb21waWxlciBmbGFncyAuLi4uLi4uLi4uLi4uLi4uIDogJHtDTUFLRV9DX0ZMQUdTfSR7Y2ZzcH0ke0NNQUtFX0NfRkxBR1NfJHtidWlsZHR5cGV9fSIpCisgIE1FU1NBR0UoU1RBVFVTICIiKQorICBNRVNTQUdFKFNUQVRVUyAiICBCdWlsZCA4IGJpdCBQQ1JFMiBsaWJyYXJ5IC4uLi4uLi4gOiAke1BDUkUyX0JVSUxEX1BDUkUyXzh9IikKKyAgTUVTU0FHRShTVEFUVVMgIiAgQnVpbGQgMTYgYml0IFBDUkUyIGxpYnJhcnkgLi4uLi4uIDogJHtQQ1JFMl9CVUlMRF9QQ1JFMl8xNn0iKQorICBNRVNTQUdFKFNUQVRVUyAiICBCdWlsZCAzMiBiaXQgUENSRTIgbGlicmFyeSAuLi4uLi4gOiAke1BDUkUyX0JVSUxEX1BDUkUyXzMyfSIpCisgIE1FU1NBR0UoU1RBVFVTICIgIEVuYWJsZSBKSVQgY29tcGlsaW5nIHN1cHBvcnQgLi4uLiA6ICR7UENSRTJfU1VQUE9SVF9KSVR9IikKKyAgTUVTU0FHRShTVEFUVVMgIiAgRW5hYmxlIFVuaWNvZGUgc3VwcG9ydCAuLi4uLi4uLi4uIDogJHtQQ1JFMl9TVVBQT1JUX1VOSUNPREV9IikKKyAgTUVTU0FHRShTVEFUVVMgIiAgTmV3bGluZSBjaGFyL3NlcXVlbmNlIC4uLi4uLi4uLi4uIDogJHtQQ1JFMl9ORVdMSU5FfSIpCisgIE1FU1NBR0UoU1RBVFVTICIgIFxcUiBtYXRjaGVzIG9ubHkgQU5ZQ1JMRiAuLi4uLi4uLi4gOiAke1BDUkUyX1NVUFBPUlRfQlNSX0FOWUNSTEZ9IikKKyAgTUVTU0FHRShTVEFUVVMgIiAgXFxDIGlzIGRpc2FibGVkIC4uLi4uLi4uLi4uLi4uLi4uLiA6ICR7UENSRTJfTkVWRVJfQkFDS1NMQVNIX0N9IikKKyAgTUVTU0FHRShTVEFUVVMgIiAgRUJDRElDIGNvZGluZyAuLi4uLi4uLi4uLi4uLi4uLi4uIDogJHtQQ1JFMl9FQkNESUN9IikKKyAgTUVTU0FHRShTVEFUVVMgIiAgRUJDRElDIGNvZGluZyB3aXRoIE5MPTB4MjUgLi4uLi4uIDogJHtQQ1JFMl9FQkNESUNfTkwyNX0iKQorICBNRVNTQUdFKFNUQVRVUyAiICBSZWJ1aWxkIGNoYXIgdGFibGVzIC4uLi4uLi4uLi4uLi4gOiAke1BDUkUyX1JFQlVJTERfQ0hBUlRBQkxFU30iKQorICBNRVNTQUdFKFNUQVRVUyAiICBVc2UgaGVhcCByZWN1cnNpb24gLi4uLi4uLi4uLi4uLi4gOiAke1BDUkUyX0hFQVBfTUFUQ0hfUkVDVVJTRX0iKQorICBNRVNTQUdFKFNUQVRVUyAiICBJbnRlcm5hbCBsaW5rIHNpemUgLi4uLi4uLi4uLi4uLi4gOiAke1BDUkUyX0xJTktfU0laRX0iKQorICBNRVNTQUdFKFNUQVRVUyAiICBQYXJlbnRoZXNlcyBuZXN0IGxpbWl0IC4uLi4uLi4uLi4gOiAke1BDUkUyX1BBUkVOU19ORVNUX0xJTUlUfSIpCisgIE1FU1NBR0UoU1RBVFVTICIgIE1hdGNoIGxpbWl0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiA6ICR7UENSRTJfTUFUQ0hfTElNSVR9IikKKyAgTUVTU0FHRShTVEFUVVMgIiAgTWF0Y2ggbGltaXQgcmVjdXJzaW9uIC4uLi4uLi4uLi4uIDogJHtQQ1JFMl9NQVRDSF9MSU1JVF9SRUNVUlNJT059IikKKyAgTUVTU0FHRShTVEFUVVMgIiAgQnVpbGQgc2hhcmVkIGxpYnMgLi4uLi4uLi4uLi4uLi4uIDogJHtCVUlMRF9TSEFSRURfTElCU30iKQorICBNRVNTQUdFKFNUQVRVUyAiICBCdWlsZCBzdGF0aWMgbGlicyAuLi4uLi4uLi4uLi4uLi4gOiAke0JVSUxEX1NUQVRJQ19MSUJTfSIpCisgIE1FU1NBR0UoU1RBVFVTICIgIEJ1aWxkIHBjcmUyZ3JlcCAuLi4uLi4uLi4uLi4uLi4uLiA6ICR7UENSRTJfQlVJTERfUENSRTJHUkVQfSIpCisgIE1FU1NBR0UoU1RBVFVTICIgIEVuYWJsZSBKSVQgaW4gcGNyZTJncmVwIC4uLi4uLi4uLiA6ICR7UENSRTJfU1VQUE9SVF9QQ1JFMkdSRVBfSklUfSIpCisgIE1FU1NBR0UoU1RBVFVTICIgIEJ1ZmZlciBzaXplIGZvciBwY3JlMmdyZXAgLi4uLi4uLiA6ICR7UENSRTJHUkVQX0JVRlNJWkV9IikKKyAgTUVTU0FHRShTVEFUVVMgIiAgQnVpbGQgdGVzdHMgKGltcGxpZXMgcGNyZTJ0ZXN0ICAuIDogJHtQQ1JFMl9CVUlMRF9URVNUU30iKQorICBNRVNTQUdFKFNUQVRVUyAiICAgICAgICAgICAgICAgYW5kIHBjcmUyZ3JlcCkiKQorICBJRihaTElCX0ZPVU5EKQorICAgIE1FU1NBR0UoU1RBVFVTICIgIExpbmsgcGNyZTJncmVwIHdpdGggbGlieiAuLi4uLi4uLiA6ICR7UENSRTJfU1VQUE9SVF9MSUJafSIpCisgIEVMU0UoWkxJQl9GT1VORCkKKyAgICBNRVNTQUdFKFNUQVRVUyAiICBMaW5rIHBjcmUyZ3JlcCB3aXRoIGxpYnogLi4uLi4uLi4gOiBMaWJyYXJ5IG5vdCBmb3VuZCIgKQorICBFTkRJRihaTElCX0ZPVU5EKQorICBJRihCWklQMl9GT1VORCkKKyAgICBNRVNTQUdFKFNUQVRVUyAiICBMaW5rIHBjcmUyZ3JlcCB3aXRoIGxpYmJ6MiAuLi4uLi4gOiAke1BDUkUyX1NVUFBPUlRfTElCQloyfSIpCisgIEVMU0UoQlpJUDJfRk9VTkQpCisgICAgTUVTU0FHRShTVEFUVVMgIiAgTGluayBwY3JlMmdyZXAgd2l0aCBsaWJiejIgLi4uLi4uIDogTGlicmFyeSBub3QgZm91bmQiICkKKyAgRU5ESUYoQlpJUDJfRk9VTkQpCisgIElGKEVESVRMSU5FX0ZPVU5EKQorICAgIE1FU1NBR0UoU1RBVFVTICIgIExpbmsgcGNyZTJ0ZXN0IHdpdGggbGliZWRpdGxpbmUgLiA6ICR7UENSRTJfU1VQUE9SVF9MSUJFRElUfSIpCisgIEVMU0UoRURJVExJTkVfRk9VTkQpCisgICAgTUVTU0FHRShTVEFUVVMgIiAgTGluayBwY3JlMnRlc3Qgd2l0aCBsaWJlZGl0bGluZSAuIDogTGlicmFyeSBub3QgZm91bmQiICkKKyAgRU5ESUYoRURJVExJTkVfRk9VTkQpCisgIElGKFJFQURMSU5FX0ZPVU5EKQorICAgIE1FU1NBR0UoU1RBVFVTICIgIExpbmsgcGNyZTJ0ZXN0IHdpdGggbGlicmVhZGxpbmUgLiA6ICR7UENSRTJfU1VQUE9SVF9MSUJSRUFETElORX0iKQorICBFTFNFKFJFQURMSU5FX0ZPVU5EKQorICAgIE1FU1NBR0UoU1RBVFVTICIgIExpbmsgcGNyZTJ0ZXN0IHdpdGggbGlicmVhZGxpbmUgLiA6IExpYnJhcnkgbm90IGZvdW5kIiApCisgIEVORElGKFJFQURMSU5FX0ZPVU5EKQorICBNRVNTQUdFKFNUQVRVUyAiICBTdXBwb3J0IFZhbGdyaW5kIC4uLi4uLi4uLi4uLi4uLi4uOiAke1BDUkUyX1NVUFBPUlRfVkFMR1JJTkR9IikKKworICBJRihNSU5HVyBBTkQgTk9UIFBDUkUyX1NUQVRJQykKKyAgICBNRVNTQUdFKFNUQVRVUyAiICBOb24tc3RhbmRhcmQgZGxsIG5hbWVzIChwcmVmaXgpIC4gOiAke05PTl9TVEFOREFSRF9MSUJfUFJFRklYfSIpCisgICAgTUVTU0FHRShTVEFUVVMgIiAgTm9uLXN0YW5kYXJkIGRsbCBuYW1lcyAoc3VmZml4KSAuIDogJHtOT05fU1RBTkRBUkRfTElCX1NVRkZJWH0iKQorICBFTkRJRihNSU5HVyBBTkQgTk9UIFBDUkUyX1NUQVRJQykKKworICBJRihNU1ZDKQorICAgIE1FU1NBR0UoU1RBVFVTICIgIEluc3RhbGwgTVNWQyAucGRiIGZpbGVzIC4uLi4uLi4uLi46ICR7SU5TVEFMTF9NU1ZDX1BEQn0iKQorICBFTkRJRihNU1ZDKQorCisgIE1FU1NBR0UoU1RBVFVTICIiKQorRU5ESUYoUENSRTJfU0hPV19SRVBPUlQpCisKKyMgZW5kIENNYWtlTGlzdHMudHh0CmRpZmYgLS1naXQgYS9kaXN0Mi9DT1BZSU5HIGIvZGlzdDIvQ09QWUlORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjMzOTUwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvQ09QWUlORwpAQCAtMCwwICsxLDUgQEAKK1BDUkUyIExJQ0VOQ0UKKworUGxlYXNlIHNlZSB0aGUgZmlsZSBMSUNFTkNFIGluIHRoZSBQQ1JFMiBkaXN0cmlidXRpb24gZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgorCitFbmQKZGlmZiAtLWdpdCBhL2Rpc3QyL0NoYW5nZUxvZyBiL2Rpc3QyL0NoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDM1NDkwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvQ2hhbmdlTG9nCkBAIC0wLDAgKzEsNzU4IEBACitDaGFuZ2UgTG9nIGZvciBQQ1JFMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVmVyc2lvbiAxMC4yMSAxMi1KYW51YXJ5LTIwMTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIEltcHJvdmUgbWF0Y2hpbmcgc3BlZWQgb2YgcGF0dGVybnMgc3RhcnRpbmcgd2l0aCArIG9yICogaW4gSklULgorCisyLiBVc2UgbWVtY2hyKCkgdG8gZmluZCB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGFuIHVuYW5jaG9yZWQgbWF0Y2ggaW4gOC1iaXQKK21vZGUgaW4gdGhlIGludGVycHJldGVyLiBUaGlzIGdpdmVzIGEgc2lnbmlmaWNhbnQgc3BlZWQgaW1wcm92ZW1lbnQuCisKKzMuIFJlbW92ZWQgYSByZWR1bmRhbnQgY29weSBvZiB0aGUgb3Bjb2RlX3Bvc3Nlc3NpZnkgdGFibGUgaW4gdGhlCitwY3JlMl9hdXRvX3Bvc3Nlc3NpZnkuYyBzb3VyY2UuCisKKzQuIEZpeCB0eXBvcyBpbiBkZnRhYmxlcy5jIGZvciB6L09TLgorCis1LiBDaGFuZ2UgMzYgZm9yIDEwLjIwIGJyb2tlIHRoZSBoYW5kbGluZyBvZiBbWzo+Ol1dIGFuZCBbWzo8Ol1dIGluIHRoYXQKK3Byb2Nlc3NpbmcgdGhlbSBjb3VsZCBpbnZvbHZlIGEgYnVmZmVyIG92ZXJmbG93IGlmIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIHdhcworYW4gb3BlbmluZyBwYXJlbnRoZXNpcy4KKworNi4gQ2hhbmdlIDM2IGZvciAxMC4yMCBhbHNvIGludHJvZHVjZWQgYSBidWcgaW4gcHJvY2Vzc2luZyB0aGlzIHBhdHRlcm46CisvKCg/eCkoKjowKSkjKD8nLy4gU3BlY2lmaWNhbGx5OiBpZiBhIHNldHRpbmcgb2YgKD94KSB3YXMgZm9sbG93ZWQgYnkgYSAoKk1BUkspCitzZXR0aW5nICh3aGljaCAoKjowKSBpcyksIHRoZW4gKD94KSBkaWQgbm90IGdldCB1bnNldCBhdCB0aGUgZW5kIG9mIGl0cyBncm91cAorZHVyaW5nIHRoZSBzY2FuIGZvciBuYW1lZCBncm91cHMsIGFuZCBoZW5jZSB0aGUgZXh0ZXJuYWwgIyB3YXMgaW5jb3JyZWN0bHkKK3RyZWF0ZWQgYXMgYSBjb21tZW50IGFuZCB0aGUgaW52YWxpZCAoPycgYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiB3YXMgbm90CitkaWFnbm9zZWQuIFRoaXMgY2F1c2VkIGEgYnVmZmVyIG92ZXJmbG93IGR1cmluZyB0aGUgcmVhbCBjb21waWxlLiBUaGlzIGJ1ZyB3YXMKK2Rpc2NvdmVyZWQgYnkgS2FybCBTa29tc2tpIHdpdGggdGhlIExMVk0gZnV6emVyLgorCis3LiBNb3ZlZCB0aGUgcGNyZTJfZmluZF9icmFja2V0KCkgZnVuY3Rpb24gZnJvbSBzcmMvcGNyZTJfY29tcGlsZS5jIGludG8gaXRzCitvd24gc291cmNlIG1vZHVsZSB0byBhdm9pZCBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBzcmMvcGNyZTJfY29tcGlsZS5jCithbmQgc3JjL3BjcmUyX3N0dWR5LmMKKworOC4gQSBjYWxsb3V0IHdpdGggYSBzdHJpbmcgYXJndW1lbnQgY29udGFpbmluZyBhbiBvcGVuaW5nIHNxdWFyZSBicmFja2V0LCBmb3IKK2V4YW1wbGUgLyg/QyRbJCkoPzxdLywgd2FzIGluY29ycmVjdGx5IHByb2Nlc3NlZCBhbmQgY291bGQgcHJvdm9rZSBhIGJ1ZmZlcgorb3ZlcmZsb3cuIFRoaXMgYnVnIHdhcyBkaXNjb3ZlcmVkIGJ5IEthcmwgU2tvbXNraSB3aXRoIHRoZSBMTFZNIGZ1enplci4KKworOS4gVGhlIGhhbmRsaW5nIG9mIGNhbGxvdXRzIGR1cmluZyB0aGUgcHJlLXBhc3MgZm9yIG5hbWVkIGdyb3VwIGlkZW50aWZpY2F0aW9uCitoYXMgYmVlbiB0aWdodGVuZWQgdXAuCisKKzEwLiBUaGUgcXVhbnRpZmllciB7MX0gY2FuIGJlIGlnbm9yZWQsIHdoZXRoZXIgZ3JlZWR5LCBub24tZ3JlZWR5LCBvcgorcG9zc2Vzc2l2ZS4gVGhpcyBpcyBhIHZlcnkgbWlub3Igb3B0aW1pemF0aW9uLgorCisxMS4gQSBwb3NzZXNzaXZlbHkgcmVwZWF0ZWQgY29uZGl0aW9uYWwgZ3JvdXAgdGhhdCBjb3VsZCBtYXRjaCBhbiBlbXB0eSBzdHJpbmcsCitmb3IgZXhhbXBsZSwgLyg/KFIpKSorLywgd2FzIGluY29ycmVjdGx5IGNvbXBpbGVkLgorCisxMi4gVGhlIFVuaWNvZGUgdGFibGVzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIFVuaWNvZGUgOC4wLjAgKHRoYW5rcyB0byBDaHJpc3RpYW4KK1BlcnNjaCkuCisKKzEzLiBBbiBlbXB0eSBjb21tZW50ICg/IykgaW4gYSBwYXR0ZXJuIHdhcyBpbmNvcnJlY3RseSBwcm9jZXNzZWQgYW5kIGNvdWxkCitwcm92b2tlIGEgYnVmZmVyIG92ZXJmbG93LiBUaGlzIGJ1ZyB3YXMgZGlzY292ZXJlZCBieSBLYXJsIFNrb21za2kgd2l0aCB0aGUKK0xMVk0gZnV6emVyLgorCisxNC4gRml4IGluZmluaXRlIHJlY3Vyc2lvbiBpbiB0aGUgSklUIGNvbXBpbGVyIHdoZW4gY2VydGFpbiBwYXR0ZXJucyBzdWNoIGFzCisvKD86fGF8KXsxMDB9eC8gYXJlIGFuYWx5c2VkLgorCisxNS4gU29tZSBwYXR0ZXJucyB3aXRoIGNoYXJhY3RlciBjbGFzc2VzIGludm9sdmluZyBbOiBhbmQgXFwgd2VyZSBpbmNvcnJlY3RseQorY29tcGlsZWQgYW5kIGNvdWxkIGNhdXNlIHJlYWRpbmcgZnJvbSB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbiBpbmNvcnJlY3QKK2Vycm9yIGRpYWdub3Npcy4gRXhhbXBsZXMgYXJlOiAvW1s6XFxdKD88Wzo6XS8gYW5kIC9bWzpcXF0oPydhYmMnKVthOl0uIFRoZQorZmlyc3Qgb2YgdGhlc2UgYnVncyB3YXMgZGlzY292ZXJlZCBieSBLYXJsIFNrb21za2kgd2l0aCB0aGUgTExWTSBmdXp6ZXIuCisKKzE2LiBQYXRob2xvZ2ljYWwgcGF0dGVybnMgY29udGFpbmluZyBtYW55IG5lc3RlZCBvY2N1cnJlbmNlcyBvZiBbOiBjYXVzZWQKK3BjcmUyX2NvbXBpbGUoKSB0byBydW4gZm9yIGEgdmVyeSBsb25nIHRpbWUuIFRoaXMgYnVnIHdhcyBmb3VuZCBieSB0aGUgTExWTQorZnV6emVyLgorCisxNy4gQSBtaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMgZm9yIGEgY2FsbG91dCB3aXRoIGEgc3RyaW5nIGFyZ3VtZW50IHdhcyBub3QKK2JlaW5nIGRpYWdub3NlZCwgcG9zc2libHkgbGVhZGluZyB0byBhIGJ1ZmZlciBvdmVyZmxvdy4gVGhpcyBidWcgd2FzIGZvdW5kIGJ5Cit0aGUgTExWTSBmdXp6ZXIuCisKKzE4LiBBIGNvbmRpdGlvbmFsIGdyb3VwIHdpdGggb25seSBvbmUgYnJhbmNoIGhhcyBhbiBpbXBsaWNpdCBlbXB0eSBhbHRlcm5hdGl2ZQorYnJhbmNoIGFuZCBtdXN0IHRoZXJlZm9yZSBiZSB0cmVhdGVkIGFzIHBvdGVudGlhbGx5IG1hdGNoaW5nIGFuIGVtcHR5IHN0cmluZy4KKworMTkuIElmICg/UiB3YXMgZm9sbG93ZWQgYnkgLSBvciArIGluY29ycmVjdCBiZWhhdmlvdXIgaGFwcGVuZWQgaW5zdGVhZCBvZiBhCitkaWFnbm9zdGljLiBUaGlzIGJ1ZyB3YXMgZGlzY292ZXJlZCBieSBLYXJsIFNrb21za2kgd2l0aCB0aGUgTExWTSBmdXp6ZXIuCisKKzIwLiBBbm90aGVyIGJ1ZyB0aGF0IHdhcyBpbnRyb2R1Y2VkIGJ5IGNoYW5nZSAzNiBmb3IgMTAuMjA6IGNvbmRpdGlvbmFsIGdyb3Vwcword2hvc2UgY29uZGl0aW9uIHdhcyBhbiBhc3NlcnRpb24gcHJlY2VkZWQgYnkgYW4gZXhwbGljaXQgY2FsbG91dCB3aXRoIGEgc3RyaW5nCithcmd1bWVudCBtaWdodCBiZSBpbmNvcnJlY3RseSBwcm9jZXNzZWQsIGVzcGVjaWFsbHkgaWYgdGhlIHN0cmluZyBjb250YWluZWQgXFEuCitUaGlzIGJ1ZyB3YXMgZGlzY292ZXJlZCBieSBLYXJsIFNrb21za2kgd2l0aCB0aGUgTExWTSBmdXp6ZXIuCisKKzIxLiBDb21waWxpbmcgUENSRTIgd2l0aCB0aGUgc2FuaXRpemUgb3B0aW9ucyBvZiBjbGFuZyBzaG93ZWQgdXAgYSBudW1iZXIgb2YKK3ZlcnkgcGVkYW50aWMgY29kaW5nIGluZmVsaWNpdGllcyBhbmQgYSBidWZmZXIgb3ZlcmZsb3cgd2hpbGUgY2hlY2tpbmcgYSBVVEYtOAorc3RyaW5nIGlmIHRoZSBmaW5hbCBtdWx0aS1ieXRlIFVURi04IGNoYXJhY3RlciB3YXMgdHJ1bmNhdGVkLgorCisyMi4gRm9yIFBlcmwgY29tcGF0aWJpbGl0eSBpbiBFQkNESUMgZW52aXJvbm1lbnRzLCByYW5nZXMgc3VjaCBhcyBhLXogaW4gYQorY2xhc3MsIHdoZXJlIGJvdGggdmFsdWVzIGFyZSBsaXRlcmFsIGxldHRlcnMgaW4gdGhlIHNhbWUgY2FzZSwgb21pdCB0aGUKK25vbi1sZXR0ZXIgRUJDRElDIGNvZGUgcG9pbnRzIHdpdGhpbiB0aGUgcmFuZ2UuCisKKzIzLiBGaW5kaW5nIHRoZSBtaW5pbXVtIG1hdGNoaW5nIGxlbmd0aCBvZiBjb21wbGV4IHBhdHRlcm5zIHdpdGggYmFjaworcmVmZXJlbmNlcyBhbmQvb3IgcmVjdXJzaW9ucyBjYW4gdGFrZSBhIGxvbmcgdGltZS4gVGhlcmUgaXMgbm93IGEgY3V0LW9mZiB0aGF0CitnaXZlcyB1cCB0cnlpbmcgdG8gZmluZCBhIG1pbmltdW0gbGVuZ3RoIHdoZW4gdGhpbmdzIGdldCB0b28gY29tcGxleC4KKworMjQuIEFuIG9wdGltaXphdGlvbiBoYXMgYmVlbiBhZGRlZCB0aGF0IHNwZWVkcyB1cCBmaW5kaW5nIHRoZSBtaW5pbXVtIG1hdGNoaW5nCitsZW5ndGggZm9yIHBhdHRlcm5zIGNvbnRhaW5pbmcgcmVwZWF0ZWQgY2FwdHVyaW5nIGdyb3VwcyBvciByZWN1cnNpb25zLgorCisyNS4gSWYgYSBwYXR0ZXJuIGNvbnRhaW5lZCBhIGJhY2sgcmVmZXJlbmNlIHRvIGEgZ3JvdXAgd2hvc2UgbnVtYmVyIHdhcworZHVwbGljYXRlZCBhcyBhIHJlc3VsdCBvZiBhcHBlYXJpbmcgaW4gYSAoP3wuLi4pIGdyb3VwLCB0aGUgY29tcHV0YXRpb24gb2YgdGhlCittaW5pbXVtIG1hdGNoaW5nIGxlbmd0aCBnYXZlIGEgd3JvbmcgcmVzdWx0LCB3aGljaCBjb3VsZCBjYXVzZSBpbmNvcnJlY3QgIm5vCittYXRjaCIgZXJyb3JzLiBGb3Igc3VjaCBwYXR0ZXJucywgYSBtaW5pbXVtIG1hdGNoaW5nIGxlbmd0aCBjYW5ub3QgYXQgcHJlc2VudAorYmUgY29tcHV0ZWQuCisKKzI2LiBBZGRlZCBhIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93IGluIGNvbmRpdGlvbnMgKD8oPGRpZ2l0cz4pIGFuZAorKD8oUjxkaWdpdHM+KS4gVGhpcyBvbWlzc2lvbiB3YXMgZGlzY292ZXJlZCBieSBLYXJsIFNrb21za2kgd2l0aCB0aGUgTExWTQorZnV6emVyLgorCisyNy4gRml4ZWQgYW4gaXNzdWUgd2hlbiBccHtBbnl9IGluc2lkZSBhbiB4Y2xhc3MgZGlkIG5vdCByZWFkIHRoZSBjdXJyZW50CitjaGFyYWN0ZXIuCisKKzI4LiBJZiBwY3JlMmdyZXAgd2FzIGdpdmVuIHRoZSAtcSBvcHRpb24gd2l0aCAtYyBvciAtbCwgb3Igd2hlbiBoYW5kbGluZyBhCitiaW5hcnkgZmlsZSwgaXQgaW5jb3JyZWN0bHkgd3JvdGUgb3V0cHV0IHRvIHN0ZG91dC4KKworMjkuIFRoZSBKSVQgY29tcGlsZXIgZGlkIG5vdCByZXN0b3JlIHRoZSBjb250cm9sIHZlcmIgaGVhZCBpbiBjYXNlIG9mICpUSEVOCitjb250cm9sIHZlcmJzLiBUaGlzIGlzc3VlIHdhcyBmb3VuZCBieSBLYXJsIFNrb21za2kgd2l0aCBhIGN1c3RvbSBMTFZNIGZ1enplci4KKworMzAuIFRoZSB3YXkgcmVjdXJzaXZlIHJlZmVyZW5jZXMgc3VjaCBhcyAoPzMpIGFyZSBjb21waWxlZCBoYXMgYmVlbiByZS13cml0dGVuCitiZWNhdXNlIHRoZSBvbGQgd2F5IHdhcyB0aGUgY2F1c2Ugb2YgbWFueSBpc3N1ZXMuIE5vdywgY29udmVyc2lvbiBvZiB0aGUgZ3JvdXAKK251bWJlciBpbnRvIGEgcGF0dGVybiBvZmZzZXQgZG9lcyBub3QgaGFwcGVuIHVudGlsIHRoZSBwYXR0ZXJuIGhhcyBiZWVuCitjb21wbGV0ZWx5IGNvbXBpbGVkLiBUaGlzIGRvZXMgbWVhbiB0aGF0IGRldGVjdGlvbiBvZiBhbGwgaW5maW5pdGVseSBsb29waW5nCityZWN1cnNpb25zIGlzIHBvc3Rwb25lZCB0aWxsIG1hdGNoIHRpbWUuIEluIHRoZSBwYXN0LCBzb21lIGVhc3kgb25lcyB3ZXJlCitkZXRlY3RlZCBhdCBjb21waWxlIHRpbWUuIFRoaXMgcmUtd3JpdGluZyB3YXMgZG9uZSBpbiByZXNwb25zZSB0byB5ZXQgYW5vdGhlcgorYnVnIGZvdW5kIGJ5IHRoZSBMTFZNIGZ1enplci4KKworMzEuIEEgdGVzdCBmb3IgYSBiYWNrIHJlZmVyZW5jZSB0byBhIG5vbi1leGlzdGVudCBncm91cCB3YXMgbWlzc2luZyBmb3IgaXRlbXMKK3N1Y2ggYXMgXDk4Ny4gVGhpcyBjYXVzZWQgaW5jb3JyZWN0IGNvZGUgdG8gYmUgY29tcGlsZWQuIFRoaXMgaXNzdWUgd2FzIGZvdW5kCitieSBLYXJsIFNrb21za2kgd2l0aCBhIGN1c3RvbSBMTFZNIGZ1enplci4KKworMzIuIEVycm9yIG1lc3NhZ2VzIGZvciBzeW50YXggZXJyb3JzIGZvbGxvd2luZyBcZyBhbmQgXGsgd2VyZSBnaXZpbmcgaW5hY2N1cmF0ZQorb2Zmc2V0cyBpbiB0aGUgcGF0dGVybi4KKworMzMuIEltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9mIHN0YXJ0aW5nIHNpbmdsZSBjaGFyYWN0ZXIgcmVwZXRpdGlvbnMgaW4gSklULgorCiszNC4gKCpMSU1JVF9NQVRDSD0pIG5vdyBnaXZlcyBhbiBlcnJvciBpbnN0ZWFkIG9mIHNldHRpbmcgdGhlIHZhbHVlIHRvIDAuCisKKzM1LiBFcnJvciBtZXNzYWdlcyBmb3Igc3ludGF4IGVycm9ycyBpbiAqTElNSVRfTUFUQ0ggYW5kICpMSU1JVF9SRUNVUlNJT04gbm93CitnaXZlIHRoZSByaWdodCBvZmZzZXQgaW5zdGVhZCBvZiB6ZXJvLgorCiszNi4gVGhlIEpJVCBjb21waWxlciBzaG91bGQgbm90IGNoZWNrIHJlcGVhdHMgYWZ0ZXIgYSB7MCwxfSByZXBlYXQgYnl0ZSBjb2RlLgorVGhpcyBpc3N1ZSB3YXMgZm91bmQgYnkgS2FybCBTa29tc2tpIHdpdGggYSBjdXN0b20gTExWTSBmdXp6ZXIuCisKKzM3LiBUaGUgSklUIGNvbXBpbGVyIHNob3VsZCByZXN0b3JlIHRoZSBjb250cm9sIGNoYWluIGZvciBlbXB0eSBwb3NzZXNzaXZlCityZXBlYXRzLiBUaGlzIGlzc3VlIHdhcyBmb3VuZCBieSBLYXJsIFNrb21za2kgd2l0aCBhIGN1c3RvbSBMTFZNIGZ1enplci4KKworMzguIEEgYnVnIHdoaWNoIHdhcyBpbnRyb2R1Y2VkIGJ5IHRoZSBzaW5nbGUgY2hhcmFjdGVyIHJlcGV0aXRpb24gb3B0aW1pemF0aW9uCit3YXMgZml4ZWQuCisKKzM5LiBNYXRjaCBsaW1pdCBjaGVjayBhZGRlZCB0byByZWN1cnNpb24uIFRoaXMgaXNzdWUgd2FzIGZvdW5kIGJ5IEthcmwgU2tvbXNraQord2l0aCBhIGN1c3RvbSBMTFZNIGZ1enplci4KKworNDAuIEFycmFuZ2UgZm9yIHRoZSBVVEYgY2hlY2sgaW4gcGNyZTJfbWF0Y2goKSBhbmQgcGNyZTJfZGZhX21hdGNoKCkgdG8gbG9vaworb25seSBhdCB0aGUgcGFydCBvZiB0aGUgc3ViamVjdCB0aGF0IGlzIHJlbGV2YW50IHdoZW4gdGhlIHN0YXJ0aW5nIG9mZnNldCBpcworbm9uLXplcm8uCisKKzQxLiBJbXByb3ZlIGZpcnN0IGNoYXJhY3RlciBtYXRjaCBpbiBKSVQgd2l0aCBTU0UyIG9uIHg4Ni4KKworNDIuIEZpeCB0d28gYXNzZXJ0aW9uIGZhaWxzIGluIEpJVC4gVGhlc2UgaXNzdWVzIHdlcmUgZm91bmQgYnkgS2FybCBTa29tc2tpCit3aXRoIGEgY3VzdG9tIExMVk0gZnV6emVyLgorCis0My4gQ29ycmVjdCB0aGUgc2V0dGluZyBvZiBDTUFLRV9DX0ZMQUdTIGluIENNYWtlTGlzdHMudHh0IChwYXRjaCBmcm9tIFJveSBJdnkKK0lJSSkuCisKKzQ0LiBGaXggYnVnIGluIFJ1blRlc3QuYmF0IGZvciBuZXcgdGVzdCAxNCwgYW5kIGFkanVzdCB0aGUgc2NyaXB0IGZvciB0aGUgYWRkZWQKK3Rlc3QgKHRoZXJlIGFyZSBub3cgMjAgaW4gdG90YWwpLgorCis0NS4gRml4ZWQgYSBjb3JuZXIgY2FzZSBvZiByYW5nZSBvcHRpbWl6YXRpb24gaW4gSklULgorCis0Ni4gQWRkIHRoZSAkeypNQVJLfSBmYWNpbGl0eSB0byBwY3JlMl9zdWJzdGl0dXRlKCkuCisKKzQ3LiBNb2RpZmllciBsaXN0cyBpbiBwY3JlMnRlc3Qgd2VyZSBzcGxpdHRpbmcgYXQgc3BhY2VzIHdpdGhvdXQgdGhlIHJlcXVpcmVkCitjb21tYXMuCisKKzQ4LiBJbXBsZW1lbnRlZCBQQ1JFMl9BTFRfVkVSQk5BTUVTLgorCis0OS4gRml4ZWQgdHdvIGlzc3VlcyBpbiBKSVQuIFRoZXNlIHdlcmUgZm91bmQgYnkgS2FybCBTa29tc2tpIHdpdGggYSBjdXN0b20KK0xMVk0gZnV6emVyLgorCis1MC4gVGhlIHBjcmUydGVzdCBwcm9ncmFtIGhhcyBiZWVuIGV4dGVuZGVkIGJ5IGFkZGluZyB0aGUgI25ld2xpbmVfZGVmYXVsdAorY29tbWFuZC4gVGhpcyBoYXMgbWFkZSBpdCBwb3NzaWJsZSB0byBydW4gdGhlIHN0YW5kYXJkIHRlc3RzIHdoZW4gUENSRTIgaXMKK2NvbXBpbGVkIHdpdGggZWl0aGVyIENSIG9yIENSTEYgYXMgdGhlIGRlZmF1bHQgbmV3bGluZSBjb252ZW50aW9uLiBBcyBwYXJ0IG9mCit0aGlzIHdvcmssIHRoZSBuZXcgY29tbWFuZCB3YXMgYWRkZWQgdG8gc2V2ZXJhbCB0ZXN0IGZpbGVzIGFuZCB0aGUgdGVzdGluZworc2NyaXB0cyB3ZXJlIG1vZGlmaWVkLiBUaGUgcGNyZTJncmVwIHRlc3RzIGNhbiBub3cgYWxzbyBiZSBydW4gd2hlbiB0aGVyZSBpcyBubworTEYgaW4gdGhlIGRlZmF1bHQgbmV3bGluZSBjb252ZW50aW9uLgorCis1MS4gVGhlIFJ1blRlc3Qgc2NyaXB0IGhhcyBiZWVuIG1vZGlmaWVkIHNvIHRoYXQsIHdoZW4gSklUIGlzIHVzZWQgYW5kIHZhbGdyaW5kCitpcyBzcGVjaWZpZWQsIGEgdmFsZ3JpbmQgc3VwcHJlc3Npb25zIGZpbGUgaXMgc2V0IHVwIHRvIGlnbm9yZSAiSW52YWxpZCByZWFkIG9mCitzaXplIDE2IiBlcnJvcnMgYmVjYXVzZSB0aGVzZSBhcmUgZmFsc2UgcG9zaXRpdmVzIHdoZW4gdGhlIGhhcmR3YXJlIHN1cHBvcnRzCit0aGUgU1NFMiBpbnN0cnVjdGlvbiBzZXQuCisKKzUyLiBJdCBpcyBub3cgcG9zc2libGUgdG8gaGF2ZSBjb21tZW50IGxpbmVzIGFtaWQgdGhlIHN1YmplY3Qgc3RyaW5ncyBpbgorcGNyZTJ0ZXN0IChhbmQgcGVybHRlc3Quc2gpIGlucHV0LgorCis1My4gSW1wbGVtZW50ZWQgUENSRTJfVVNFX09GRlNFVF9MSU1JVCBhbmQgcGNyZTJfc2V0X29mZnNldF9saW1pdCgpLgorCis1NC4gQWRkIHRoZSBudWxsX2NvbnRleHQgbW9kaWZpZXIgdG8gcGNyZTJ0ZXN0IHNvIHRoYXQgY2FsbGluZyBwY3JlMl9jb21waWxlKCkKK2FuZCB0aGUgbWF0Y2hpbmcgZnVuY3Rpb25zIHdpdGggTlVMTCBjb250ZXh0cyBjYW4gYmUgdGVzdGVkLgorCis1NS4gSW1wbGVtZW50ZWQgUENSRTJfU1VCU1RJVFVURV9FWFRFTkRFRC4KKworNTYuIEluIGEgY2hhcmFjdGVyIGNsYXNzIHN1Y2ggYXMgW1xXXHB7QW55fV0gd2hlcmUgYm90aCBhIG5lZ2F0aXZlLXR5cGUgZXNjYXBlCisoIm5vdCBhIHdvcmQgY2hhcmFjdGVyIikgYW5kIGEgcHJvcGVydHkgZXNjYXBlIHdlcmUgcHJlc2VudCwgdGhlIHByb3BlcnR5Citlc2NhcGUgd2FzIGJlaW5nIGlnbm9yZWQuCisKKzU3LiBGaXhlZCBpbnRlZ2VyIG92ZXJmbG93IGZvciBwYXR0ZXJucyB3aG9zZSBtaW5pbXVtIG1hdGNoaW5nIGxlbmd0aCBpcyB2ZXJ5LAordmVyeSBsYXJnZS4KKworNTguIEltcGxlbWVudGVkIC0tbmV2ZXItYmFja3NsYXNoLUMuCisKKzU5LiBDaGFuZ2UgNTUgYWJvdmUgaW50cm9kdWNlZCBhIGJ1ZyBieSB3aGljaCBjZXJ0YWluIHBhdHRlcm5zIHByb3Zva2VkIHRoZQorZXJyb25lb3VzIGVycm9yICJcIGF0IGVuZCBvZiBwYXR0ZXJuIi4KKworNjAuIFRoZSBzcGVjaWFsIHNlcXVlbmNlcyBbWzo8Ol1dIGFuZCBbWzo+Ol1dIGdhdmUgcmlzZSB0byBpbmNvcnJlY3QgY29tcGlsaW5nCitlcnJvcnMgb3Igb3RoZXIgc3RyYW5nZSBlZmZlY3RzIGlmIGNvbXBpbGVkIGluIFVDUCBtb2RlLiBGb3VuZCB3aXRoIGxpYkZ1enplcgorYW5kIEFkZHJlc3NTYW5pdGl6ZXIuCisKKzYxLiBXaGl0ZXNwYWNlIGF0IHRoZSBlbmQgb2YgYSBwY3JlMnRlc3QgcGF0dGVybiBsaW5lIGNhdXNlZCBhIHNwdXJpb3VzIGVycm9yCittZXNzYWdlIGlmIHRoZXJlIHdlcmUgb25seSBzaW5nbGUtY2hhcmFjdGVyIG1vZGlmaWVycy4gSXQgc2hvdWxkIGJlIGlnbm9yZWQuCisKKzYyLiBUaGUgdXNlIG9mIFBDUkUyX05PX0FVVE9fQ0FQVFVSRSBjb3VsZCBjYXVzZSBpbmNvcnJlY3QgY29tcGlsYXRpb24gcmVzdWx0cworb3Igc2VnbWVudGF0aW9uIGVycm9ycyBmb3Igc29tZSBwYXR0ZXJucy4gRm91bmQgd2l0aCBsaWJGdXp6ZXIgYW5kCitBZGRyZXNzU2FuaXRpemVyLgorCis2My4gVmVyeSBsb25nIG5hbWVzIGluICgqTUFSSykgb3IgKCpUSEVOKSBldGMuIGl0ZW1zIGNvdWxkIHByb3Zva2UgYSBidWZmZXIKK292ZXJmbG93LgorCis2NC4gSW1wcm92ZSBlcnJvciBtZXNzYWdlIGZvciBvdmVybHktY29tcGxpY2F0ZWQgcGF0dGVybnMuCisKKzY1LiBJbXBsZW1lbnRlZCBhbiBvcHRpb25hbCByZXBsaWNhdGlvbiBmZWF0dXJlIGZvciBwYXR0ZXJucyBpbiBwY3JlMnRlc3QsIHRvCittYWtlIGl0IGVhc2llciB0byB0ZXN0IGxvbmcgcmVwZXRpdGl2ZSBwYXR0ZXJucy4gVGhlIHRlc3RzIGZvciA2MyBhYm92ZSBhcmUKK2NvbnZlcnRlZCB0byB1c2UgdGhlIG5ldyBmZWF0dXJlLgorCis2Ni4gSW4gdGhlIFBPU0lYIHdyYXBwZXIsIGlmIHJlZ2Vycm9yKCkgd2FzIGdpdmVuIHRvbyBzbWFsbCBhIGJ1ZmZlciwgaXQgY291bGQKK21pc2JlaGF2ZS4KKworNjcuIEluIHBjcmUyX3N1YnN0aXR1dGUoKSBpbiBVVEYgbW9kZSwgdGhlIFVURiB2YWxpZGl0eSBjaGVjayBvbiB0aGUKK3JlcGxhY2VtZW50IHN0cmluZyB3YXMgaGFwcGVuaW5nIGJlZm9yZSB0aGUgbGVuZ3RoIHNldHRpbmcgd2hlbiB0aGUgcmVwbGFjZW1lbnQKK3N0cmluZyB3YXMgemVyby10ZXJtaW5hdGVkLgorCis2OC4gSW4gcGNyZTJfc3Vic3RpdHV0ZSgpIGluIFVURiBtb2RlLCBQQ1JFMl9OT19VVEZfQ0hFQ0sgY2FuIGJlIHNldCBmb3IgdGhlCitzZWNvbmQgYW5kIHN1YnNlcXVlbnQgY2FsbHMgdG8gcGNyZTJfbWF0Y2goKS4KKworNjkuIFRoZXJlIHdhcyBubyBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdyBmb3IgYSByZXBsYWNlbWVudCBncm91cCBudW1iZXIgaW4KK3BjcmUyX3N1YnN0aXR1dGUoKS4gQW4gYWRkZWQgY2hlY2sgZm9yIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB0aGUgbGFyZ2VzdCBncm91cAorbnVtYmVyIGluIHRoZSBwYXR0ZXJuIG1lYW5zIHRoaXMgaXMgbm90IG5vdyBuZWVkZWQuCisKKzcwLiBUaGUgUENSRTItc3BlY2lmaWMgVkVSU0lPTiBjb25kaXRpb24gZGlkbid0IHdvcmsgY29ycmVjdGx5IGlmIG9ubHkgb25lCitkaWdpdCB3YXMgZ2l2ZW4gYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQsIG9yIGlmIG1vcmUgdGhhbiB0d28gZGlnaXRzIHdlcmUgZ2l2ZW4uCitJdCBub3cgd29ya3Mgd2l0aCBvbmUgb3IgdHdvIGRpZ2l0cywgYW5kIGdpdmVzIGEgY29tcGlsZSB0aW1lIGVycm9yIGlmIG1vcmUgYXJlCitnaXZlbi4KKworNzEuIEluIHBjcmUyX3N1YnN0aXR1dGUoKSB0aGVyZSB3YXMgdGhlIHBvc3NpYmlsaXR5IG9mIHJlYWRpbmcgb25lIGNvZGUgdW5pdAorYmV5b25kIHRoZSBlbmQgb2YgdGhlIHJlcGxhY2VtZW50IHN0cmluZy4KKworNzIuIFRoZSBjb2RlIGZvciBjaGVja2luZyBhIHN1YmplY3QncyBVVEYtMzIgdmFsaWRpdHkgZm9yIGEgcGF0dGVybiB3aXRoIGEKK2xvb2tiZWhpbmQgaW52b2x2ZWQgYW4gb3V0LW9mLWJvdW5kcyBwb2ludGVyLCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBjYXVzZQordHJvdWJsZSBpbiBzb21lIGVudmlyb25tZW50cy4KKworNzMuIFRoZSBtYXhpbXVtIGxvb2tiZWhpbmQgbGVuZ3RoIHdhcyBpbmNvcnJlY3RseSBjYWxjdWxhdGVkIGZvciBwYXR0ZXJucyBzdWNoCithcyAvKD88PShhKSg/LTEpKXgvIHdoaWNoIGhhdmUgYSByZWN1cnNpb24gd2l0aGluIGEgYmFja3JlZmVyZW5jZS4KKworNzQuIEdpdmUgYW4gZXJyb3IgaWYgYSBsb29rYmVoaW5kIGFzc2VydGlvbiBpcyBsb25nZXIgdGhhbiA2NTUzNSBjb2RlIHVuaXRzLgorCis3NS4gR2l2ZSBhbiBlcnJvciBpbiBwY3JlMl9zdWJzdGl0dXRlKCkgaWYgYSBtYXRjaCBlbmRzIGJlZm9yZSBpdCBzdGFydHMgKGFzIGEKK3Jlc3VsdCBvZiB0aGUgdXNlIG9mIFxLKS4KKworNzYuIENoZWNrIHRoZSBsZW5ndGggb2Ygc3VicGF0dGVybiBuYW1lcyBhbmQgdGhlIG5hbWVzIGluICgqTUFSSzp4eCkgZXRjLgorZHluYW1pY2FsbHkgdG8gYXZvaWQgdGhlIHBvc3NpYmlsaXR5IG9mIGludGVnZXIgb3ZlcmZsb3cuCisKKzc3LiBJbXBsZW1lbnQgcGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aCgpIHNvIHRoYXQgcHJvZ3JhbXMgY2FuIHJlc3RyaWN0IHRoZQorc2l6ZSBvZiBwYXR0ZXJucyB0aGF0IHRoZXkgYXJlIHByZXBhcmVkIHRvIGhhbmRsZS4KKworNzguICgqTk9fQVVUT19QT1NTRVNTKSB3YXMgbm90IHdvcmtpbmcuCisKKzc5LiBBZGRpbmcgZ3JvdXAgaW5mb3JtYXRpb24gY2FjaGluZyBpbXByb3ZlcyB0aGUgc3BlZWQgb2YgY29tcGlsaW5nIHdoZW4KK2NoZWNraW5nIHdoZXRoZXIgYSBncm91cCBoYXMgYSBmaXhlZCBsZW5ndGggYW5kL29yIGNvdWxkIG1hdGNoIGFuIGVtcHR5IHN0cmluZywKK2VzcGVjaWFsbHkgd2hlbiByZWN1cnNpb24gb3Igc3Vicm91dGluZSBjYWxscyBhcmUgaW52b2x2ZWQuIEhvd2V2ZXIsIHRoaXMKK2Nhbm5vdCBiZSB1c2VkIHdoZW4gKD98IGlzIHByZXNlbnQgaW4gdGhlIHBhdHRlcm4gYmVjYXVzZSB0aGUgc2FtZSBudW1iZXIgbWF5CitiZSB1c2VkIGZvciBncm91cHMgb2YgZGlmZmVyZW50IHNpemVzLiBUbyBjYXRjaCBydW5hd2F5IHBhdHRlcm5zIGluIHRoaXMKK3NpdHVhdGlvbiwgY291bnRzIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHRvIHRoZSBmdW5jdGlvbnMgdGhhdCBzY2FuIGZvciBlbXB0eQorYnJhbmNoZXMgb3IgY29tcHV0ZSBmaXhlZCBsZW5ndGhzLgorCis4MC4gQWxsb3cgZm9yIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgc2l6ZSBvZiB0aGUgbmVzdF9zYXZlIHN0cnVjdHVyZSBub3QgYmVpbmcKK2EgZmFjdG9yIG9mIHRoZSBzaXplIG9mIHRoZSBjb21waWxpbmcgd29ya3NwYWNlIChpdCBjdXJyZW50bHkgaXMpLgorCis4MS4gQ2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3cgaW4gbWluaW11bSBsZW5ndGggY2FsY3VsYXRpb24gYW5kIGNhcCBpdCBhdAorNjU1MzUuCisKKzgyLiBTbWFsbCBvcHRpbWl6YXRpb25zIGluIGNvZGUgZm9yIGZpbmRpbmcgdGhlIG1pbmltdW0gbWF0Y2hpbmcgbGVuZ3RoLgorCis4My4gTG9jayBvdXQgY29uZmlndXJpbmcgZm9yIEVCQ0RJQyB3aXRoIG5vbi04LWJpdCBsaWJyYXJpZXMuCisKKzg0LiBUZXN0IGZvciBlcnJvciBjb2RlIDw9IDAgaW4gcmVnZXJyb3IoKS4KKworODUuIENoZWNrIGZvciB0b28gbWFueSByZXBsYWNlbWVudHMgKG1vcmUgdGhhbiBJTlRfTUFYKSBpbiBwY3JlMl9zdWJzdGl0dXRlKCkuCisKKzg2LiBBdm9pZCB0aGUgcG9zc2liaWxpdHkgb2YgY29tcHV0aW5nIHdpdGggYW4gb3V0LW9mLWJvdW5kcyBwb2ludGVyICh0aG91Z2gKK25vdCBkZXJlZmVyZW5jaW5nIGl0KSB3aGlsZSBoYW5kbGluZyBsb29rYmVoaW5kIGFzc2VydGlvbnMuCisKKzg3LiBGYWlsdXJlIHRvIGdldCBtZW1vcnkgZm9yIHRoZSBtYXRjaCBkYXRhIGluIHJlZ2NvbXAoKSBpcyBub3cgZ2l2ZW4gYXMgYQorcmVnY29tcCgpIGVycm9yIGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgcmVnZXhlYygpIHRvIHBpY2sgaXQgdXAuCisKKzg4LiBJbiBwY3JlMl9zdWJzdGl0dXRlKCksIGVuc3VyZSB0aGF0IENSTEYgaXMgbm90IHNwbGl0IHdoZW4gaXQgaXMgYSB2YWxpZAorbmV3bGluZSBzZXF1ZW5jZS4KKworODkuIFBhcmFub2lkIGNoZWNrIGluIHJlZ2NvbXAoKSBmb3IgYmFkIGVycm9yIGNvZGUgZnJvbSBwY3JlMl9jb21waWxlKCkuCisKKzkwLiBSdW4gdGVzdCA4IChpbnRlcm5hbCBvZmZzZXRzIGFuZCBjb2RlIHNpemVzKSBmb3IgbGluayBzaXplcyAzIGFuZCA0IGFzIHdlbGwKK2FzIGZvciBsaW5rIHNpemUgMi4KKworOTEuIERvY3VtZW50IHRoYXQgSklUIGhhcyBhIGxpbWl0IG9uIHBhdHRlcm4gc2l6ZSwgYW5kIGdpdmUgbW9yZSBpbmZvcm1hdGlvbgorYWJvdXQgSklUIGNvbXBpbGUgZmFpbHVyZXMgaW4gcGNyZTJ0ZXN0LgorCis5Mi4gSW1wbGVtZW50IFBDUkUyX0lORk9fSEFTQkFDS1NMQVNIQy4KKworOTMuIFJlLWFycmFuZ2UgdmFsZ3JpbmQgc3VwcG9ydCBjb2RlIGluIHBjcmUydGVzdCB0byBhdm9pZCBzcHVyaW91cyByZXBvcnRzCit3aXRoIEpJVCAocG9zc2libHkgY2F1c2VkIGJ5IFNTRTI/KS4KKworOTQuIFN1cHBvcnQgb2Zmc2V0X2xpbWl0IGluIEpJVC4KKworOTUuIEEgc2VxdWVuY2Ugc3VjaCBhcyBbWzpwdW5jdDpdYl0gdGhhdCBpcywgYSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MgZm9sbG93ZWQKK2J5IGEgc2luZ2xlIEFTQ0lJIGNoYXJhY3RlciBpbiBhIGNsYXNzIGl0ZW0sIHdhcyBpbmNvcnJlY3RseSBjb21waWxlZCBpbiBVQ1AKK21vZGUuIFRoZSBQT1NJWCBjbGFzcyBnb3QgbG9zdCwgYnV0IG9ubHkgaWYgdGhlIHNpbmdsZSBjaGFyYWN0ZXIgZm9sbG93ZWQgaXQuCisKKzk2LiBbOnB1bmN0Ol0gaW4gVUNQIG1vZGUgd2FzIG1hdGNoaW5nIHNvbWUgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgMTI4LTI1NQordGhhdCBzaG91bGQgbm90IGhhdmUgYmVlbiBtYXRjaGVkLgorCis5Ny4gSWYgWzpeYXNjaWk6XSBvciBbOl54ZGlnaXQ6XSBhcmUgcHJlc2VudCBpbiBhIG5vbi1uZWdhdGVkIGNsYXNzLCBhbGwKK2NoYXJhY3RlcnMgd2l0aCBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gMjU1IGFyZSBpbiB0aGUgY2xhc3MuIFdoZW4gYSBVbmljb2RlCitwcm9wZXJ0eSB3YXMgYWxzbyBpbiB0aGUgY2xhc3MgKGlmIFBDUkUyX1VDUCBpcyBzZXQsIGVzY2FwZXMgc3VjaCBhcyBcdyBhcmUKK3R1cm5lZCBpbnRvIFVuaWNvZGUgcHJvcGVydGllcyksIHdpZGUgY2hhcmFjdGVycyB3ZXJlIG5vdCBjb3JyZWN0bHkgaGFuZGxlZCwKK2FuZCBjb3VsZCBmYWlsIHRvIG1hdGNoLgorCis5OC4gSW4gcGNyZTJ0ZXN0LCBtYWtlIHRoZSAic3RhcnRvZmZzZXQiIG1vZGlmaWVyIGEgc3lub255bSBvZiAib2Zmc2V0IiwKK2JlY2F1c2UgaXQgc2V0cyB0aGUgInN0YXJ0b2Zmc2V0IiBwYXJhbWV0ZXIgZm9yIHBjcmUyX21hdGNoKCkuCisKKzk5LiBJZiBQQ1JFMl9BVVRPX0NBTExPVVQgd2FzIHNldCBvbiBhIHBhdHRlcm4gdGhhdCBoYWQgYSAoPyMgY29tbWVudCBiZXR3ZWVuCithbiBpdGVtIGFuZCBpdHMgcXVhbGlmaWVyIChmb3IgZXhhbXBsZSwgQSg/I2NvbW1lbnQpP0IpIHBjcmUyX2NvbXBpbGUoKQorbWlzYmVoYXZlZC4gVGhpcyBidWcgd2FzIGZvdW5kIGJ5IHRoZSBMTFZNIGZ1enplci4KKworMTAwLiBUaGUgZXJyb3IgZm9yIGFuIGludmFsaWQgVVRGIHBhdHRlcm4gc3RyaW5nIGFsd2F5cyBnYXZlIHRoZSBjb2RlIHVuaXQKK29mZnNldCBhcyB6ZXJvIGluc3RlYWQgb2Ygd2hlcmUgdGhlIGludmFsaWRpdHkgd2FzIGZvdW5kLgorCisxMDEuIEZ1cnRoZXIgdG8gOTcgYWJvdmUsIG5lZ2F0ZWQgY2xhc3NlcyBzdWNoIGFzIFteWzpeYXNjaWk6XVxkXSB3ZXJlIGFsc28gbm90Cit3b3JraW5nIGNvcnJlY3RseSBpbiBVQ1AgbW9kZS4KKworMTAyLiBTaW1pbGFyIHRvIDk5IGFib3ZlLCBpZiBhbiBpc29sYXRlZCBcRSB3YXMgcHJlc2VudCBiZXR3ZWVuIGFuIGl0ZW0gYW5kIGl0cworcXVhbGlmaWVyIHdoZW4gUENSRTJfQVVUT19DQUxMT1VUIHdhcyBzZXQsIHBjcmUyX2NvbXBpbGUoKSBtaXNiZWhhdmVkLiBUaGlzIGJ1Zword2FzIGZvdW5kIGJ5IHRoZSBMTFZNIGZ1enplci4KKworMTAzLiBUaGUgUE9TSVggd3JhcHBlciBmdW5jdGlvbiByZWdleGVjKCkgY3Jhc2hlZCBpZiB0aGUgb3B0aW9uIFJFR19TVEFSVEVORAord2FzIHNldCB3aGVuIHRoZSBwbWF0Y2ggYXJndW1lbnQgd2FzIE5VTEwuIEl0IG5vdyByZXR1cm5zIFJFR19JTlZBUkcuCisKKzEwNC4gQWxsb3cgZm9yIHVwIHRvIDMyLWJpdCBudW1iZXJzIGluIHRoZSBvcmRpbigpIGZ1bmN0aW9uIGluIHBjcmUyZ3JlcC4KKworMTA1LiBBbiBlbXB0eSBcUVxFIHNlcXVlbmNlIGJldHdlZW4gYW4gaXRlbSBhbmQgaXRzIHF1YWxpZmllciBjYXVzZWQKK3BjcmUyX2NvbXBpbGUoKSB0byBtaXNiZWhhdmUgd2hlbiBhdXRvIGNhbGxvdXRzIHdlcmUgZW5hYmxlZC4gVGhpcyBidWcKK3dhcyBmb3VuZCBieSB0aGUgTExWTSBmdXp6ZXIuCisKKzEwNi4gSWYgYm90aCBQQ1JFMl9BTFRfVkVSQk5BTUVTIGFuZCBQQ1JFMl9FWFRFTkRFRCB3ZXJlIHNldCwgYW5kIGEgKCpNQVJLKSBvcgorb3RoZXIgdmVyYiAibmFtZSIgZW5kZWQgd2l0aCB3aGl0ZXNwYWNlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgY2xvc2luZworcGFyZW50aGVzaXMsIHBjcmUyX2NvbXBpbGUoKSBtaXNiZWhhdmVkLiBFeGFtcGxlOiAvKCo6YWJjICkvLCBidXQgb25seSB3aGVuCitib3RoIHRob3NlIG9wdGlvbnMgd2VyZSBzZXQuCisKKzEwNy4gSW4gYSBudW1iZXIgb2YgcGxhY2VzIHBjcmUyX2NvbXBpbGUoKSB3YXMgbm90IGhhbmRsaW5nIE5VTEwgY2hhcmFjdGVycworY29ycmVjdGx5LCBhbmQgcGNyZTJ0ZXN0IHdpdGggdGhlICJiaW5jb2RlIiBtb2RpZmllciB3YXMgbm90IGFsd2F5cyBjb3JyZWN0bHkKK2Rpc3BsYXlpbmcgZmllbGRzIGNvbnRhaW5pbmcgTlVMTFM6CisKKyAgIChhKSBXaXRoaW4gL3ggZXh0ZW5kZWQgIy1jb21tZW50cworICAgKGIpIFdpdGhpbiB0aGUgIm5hbWUiIHBhcnQgb2YgKCpNQVJLKSBhbmQgb3RoZXIgKnZlcmJzCisgICAoYykgV2l0aGluIHRoZSB0ZXh0IGFyZ3VtZW50IG9mIGEgY2FsbG91dAorCisxMDguIElmIGEgcGF0dGVybiB0aGF0IHdhcyBjb21waWxlZCB3aXRoIFBDUkUyX0VYVEVOREVEIHN0YXJ0ZWQgd2l0aCB3aGl0ZQorc3BhY2Ugb3IgYSAjLXR5cGUgY29tbWVudCB0aGF0IHdhcyBmb2xsb3dlZCBieSAoPy14KSwgd2hpY2ggdHVybnMgb2ZmCitQQ1JFMl9FWFRFTkRFRCwgYW5kIHRoZXJlIHdhcyBubyBzdWJzZXF1ZW50ICg/eCkgdG8gdHVybiBpdCBvbiBhZ2FpbiwKK3BjcmUyX2NvbXBpbGUoKSBhc3N1bWVkIHRoYXQgKD8teCkgYXBwbGllZCB0byB0aGUgd2hvbGUgcGF0dGVybiBhbmQKK2NvbnNlcXVlbnRseSBtaXMtY29tcGlsZWQgaXQuIFRoaXMgYnVnIHdhcyBmb3VuZCBieSB0aGUgTExWTSBmdXp6ZXIuIFRoZSBmaXgKK2ZvciB0aGlzIGJ1ZyBtZWFucyB0aGF0IGEgc2V0dGluZyBvZiBhbnkgb2YgdGhlICg/aW1zeFUpIG9wdGlvbnMgYXQgdGhlIHN0YXJ0CitvZiBhIHBhdHRlcm4gaXMgbm8gbG9uZ2VyIHRyYW5zZmVycmVkIHRvIHRoZSBvcHRpb25zIHRoYXQgYXJlIHJldHVybmVkIGJ5CitQQ1JFMl9JTkZPX0FMTE9QVElPTlMuIEluIGZhY3QsIHRoaXMgd2FzIGFuIGFuYWNocm9uaXNtIHRoYXQgc2hvdWxkIGhhdmUKK2NoYW5nZWQgd2hlbiB0aGUgZWZmZWN0cyBvZiB0aG9zZSBvcHRpb25zIHdlcmUgYWxsIG1vdmVkIHRvIGNvbXBpbGUgdGltZS4KKworMTA5LiBBbiBlc2NhcGVkIGNsb3NpbmcgcGFyZW50aGVzaXMgaW4gdGhlICJuYW1lIiBwYXJ0IG9mIGEgKCp2ZXJiKSB3aGVuCitQQ1JFMl9BTFRfVkVSQk5BTUVTIHdhcyBzZXQgY2F1c2VkIHBjcmUyX2NvbXBpbGUoKSB0byBtYWxmdW5jdGlvbi4gVGhpcyBidWcKK3dhcyBmb3VuZCBieSB0aGUgTExWTSBmdXp6ZXIuCisKKzExMC4gSW1wbGVtZW50ZWQgUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWSwgYW5kIHVwZGF0ZWQgcGNyZTJ0ZXN0IHRvIG1ha2UgaXQKK3Bvc3NpYmxlIHRvIHRlc3QgaXQuCisKKzExMS4gIkhhcmRlbiIgcGNyZTJ0ZXN0IGFnYWluc3QgcmlkaWN1bG91c2x5IGxhcmdlIHZhbHVlcyBpbiBtb2RpZmllcnMgYW5kCitjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorCisxMTIuIEltcGxlbWVudGVkIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCBhbmQgUENSRTJfU1VCU1RJVFVURV9PVkVSRkxPV18KK0xFTkdUSC4KKworMTEzLiBGaXggcHJpbnRpbmcgb2YgKk1BUksgbmFtZXMgdGhhdCBjb250YWluIGJpbmFyeSB6ZXJvZXMgaW4gcGNyZTJ0ZXN0LgorCisKK1ZlcnNpb24gMTAuMjAgMzAtSnVuZS0yMDE1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBDYWxsb3V0cyB3aXRoIHN0cmluZyBhcmd1bWVudHMgaGF2ZSBiZWVuIGFkZGVkLgorCisyLiBBc3NlcnRpb24gY29kZSBnZW5lcmF0b3IgaW4gSklUIGhhcyBiZWVuIG9wdGltaXplZC4KKworMy4gVGhlIGludmFsaWQgcGF0dGVybiAoPyg/QykgaGFzIGEgbWlzc2luZyBhc3NlcnRpb24gY29uZGl0aW9uIGF0IHRoZSBlbmQuIFRoZQorcGNyZTJfY29tcGlsZSgpIGZ1bmN0aW9uIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBiZWZvcmUgZGlhZ25vc2luZyBhbgorZXJyb3IuIFRoaXMgYnVnIHdhcyBkaXNjb3ZlcmVkIGJ5IHRoZSBMTFZNIGZ1enplci4KKworNC4gSW1wbGVtZW50ZWQgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUoKS4KKworNS4gRml4IEpJVCBjb21waWxhdGlvbiBvZiBjb25kaXRpb25hbCBibG9ja3Mgd2hvc2UgYXNzZXJ0aW9uIGlzIGNvbnZlcnRlZCB0bworKCpGQUlMKS4gRS5nOiAvKD8oPyEpKS8uCisKKzYuIFRoZSBwYXR0ZXJuIC8oPyg/ISleKS8gY2F1c2VkIHJlZmVyZW5jZXMgdG8gcmFuZG9tIG1lbW9yeS4gVGhpcyBidWcgd2FzCitkaXNjb3ZlcmVkIGJ5IHRoZSBMTFZNIGZ1enplci4KKworNy4gVGhlIGFzc2VydGlvbiAoPyEpIGlzIG9wdGltaXplZCB0byAoKkZBSUwpLiBUaGlzIHdhcyBub3QgaGFuZGxlZCBjb3JyZWN0bHkKK3doZW4gdGhpcyBhc3NlcnRpb24gd2FzIHVzZWQgYXMgYSBjb25kaXRpb24sIGZvciBleGFtcGxlICg/KD8hKWF8YikuIEluCitwY3JlMl9tYXRjaCgpIGl0IHdvcmtlZCBieSBsdWNrOyBpbiBwY3JlMl9kZmFfbWF0Y2goKSBpdCBnYXZlIGFuIGluY29ycmVjdAorZXJyb3IgYWJvdXQgYW4gdW5zdXBwb3J0ZWQgaXRlbS4KKworOC4gRm9yIHNvbWUgdHlwZXMgb2YgcGF0dGVybiwgZm9yIGV4YW1wbGUgL1oqKHxkKil7MjE2fS8sIHRoZSBhdXRvLQorcG9zc2Vzc2lmaWNhdGlvbiBjb2RlIGNvdWxkIHRha2UgZXhwb25lbnRpYWwgdGltZSB0byBjb21wbGV0ZS4gQSByZWN1cnNpb24KK2RlcHRoIGxpbWl0IG9mIDEwMDAgaGFzIGJlZW4gaW1wb3NlZCB0byBsaW1pdCB0aGUgcmVzb3VyY2VzIHVzZWQgYnkgdGhpcworb3B0aW1pemF0aW9uLiBUaGlzIGluZmVsaWNpdHkgd2FzIGRpc2NvdmVyZWQgYnkgdGhlIExMVk0gZnV6emVyLgorCis5LiBBIHBhdHRlcm4gc3VjaCBhcyAvKCpVVEYpW1xTXFZcSF0vLCB3aGljaCBjb250YWlucyBhIG5lZ2F0ZWQgc3BlY2lhbCBjbGFzcworc3VjaCBhcyBcUyBpbiBub24tVUNQIG1vZGUsIGV4cGxpY2l0IHdpZGUgY2hhcmFjdGVycyAoPiAyNTUpIGNhbiBiZSBpZ25vcmVkCitiZWNhdXNlIFxTIGVuc3VyZXMgdGhleSBhcmUgYWxsIGluIHRoZSBjbGFzcy4gVGhlIGNvZGUgZm9yIGRvaW5nIHRoaXMgd2FzCitpbnRlcmFjdGluZyBiYWRseSB3aXRoIHRoZSBjb2RlIGZvciBjb21wdXRpbmcgdGhlIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQgdG8KK2NvbXBpbGUgdGhlIHBhdHRlcm4sIGxlYWRpbmcgdG8gYSBidWZmZXIgb3ZlcmZsb3cuIFRoaXMgYnVnIHdhcyBkaXNjb3ZlcmVkIGJ5Cit0aGUgTExWTSBmdXp6ZXIuCisKKzEwLiBBIHBhdHRlcm4gc3VjaCBhcyAvKCg/MikrKSgoPzEpKS8gd2hpY2ggaGFzIG11dHVhbCByZWN1cnNpb24gbmVzdGVkIGluc2lkZQorb3RoZXIga2luZHMgb2YgZ3JvdXAgY2F1c2VkIHN0YWNrIG92ZXJmbG93IGF0IGNvbXBpbGUgdGltZS4gVGhpcyBidWcgd2FzCitkaXNjb3ZlcmVkIGJ5IHRoZSBMTFZNIGZ1enplci4KKworMTEuIEEgcGF0dGVybiBzdWNoIGFzIC8oPzEpKD8jPycpezh9KGEpLyB3aGljaCBoYWQgYSBwYXJlbnRoZXNpemVkIGNvbW1lbnQKK2JldHdlZW4gYSBzdWJyb3V0aW5lIGNhbGwgYW5kIGl0cyBxdWFudGlmaWVyIHdhcyBpbmNvcnJlY3RseSBjb21waWxlZCwgbGVhZGluZwordG8gYnVmZmVyIG92ZXJmbG93IG9yIG90aGVyIGVycm9ycy4gVGhpcyBidWcgd2FzIGRpc2NvdmVyZWQgYnkgdGhlIExMVk0gZnV6emVyLgorCisxMi4gVGhlIGlsbGVnYWwgcGF0dGVybiAvKD8oPzxFPi4qIS4qKT8pLyB3YXMgbm90IGJlaW5nIGRpYWdub3NlZCBhcyBtaXNzaW5nIGFuCithc3NlcnRpb24gYWZ0ZXIgKD8oLiBUaGUgY29kZSB3YXMgZmFpbGluZyB0byBjaGVjayB0aGUgY2hhcmFjdGVyIGFmdGVyICg/KD88Citmb3IgdGhlICEgb3IgPSB0aGF0IHdvdWxkIGluZGljYXRlIGEgbG9va2JlaGluZCBhc3NlcnRpb24uIFRoaXMgYnVnIHdhcworZGlzY292ZXJlZCBieSB0aGUgTExWTSBmdXp6ZXIuCisKKzEzLiBBIHBhdHRlcm4gc3VjaCBhcyAvWCgoPzIpKCkqKyl7Mn0rLyB3aGljaCBoYXMgYSBwb3NzZXNzaXZlIHF1YW50aWZpZXIgd2l0aAorYSBmaXhlZCBtYXhpbXVtIGZvbGxvd2luZyBhIGdyb3VwIHRoYXQgY29udGFpbnMgYSBzdWJyb3V0aW5lIHJlZmVyZW5jZSB3YXMKK2luY29ycmVjdGx5IGNvbXBpbGVkIGFuZCBjb3VsZCB0cmlnZ2VyIGJ1ZmZlciBvdmVyZmxvdy4gVGhpcyBidWcgd2FzIGRpc2NvdmVyZWQKK2J5IHRoZSBMTFZNIGZ1enplci4KKworMTQuIE5lZ2F0aXZlIHJlbGF0aXZlIHJlY3Vyc2l2ZSByZWZlcmVuY2VzIHN1Y2ggYXMgKD8tNykgdG8gbm9uLWV4aXN0ZW50CitzdWJwYXR0ZXJucyB3ZXJlIG5vdCBiZWluZyBkaWFnbm9zZWQgYW5kIGNvdWxkIGxlYWQgdG8gdW5wcmVkaWN0YWJsZSBiZWhhdmlvdXIuCitUaGlzIGJ1ZyB3YXMgZGlzY292ZXJlZCBieSB0aGUgTExWTSBmdXp6ZXIuCisKKzE1LiBUaGUgYnVnIGZpeGVkIGluIDE0IHdhcyBkdWUgdG8gYW4gaW50ZWdlciB2YXJpYWJsZSB0aGF0IHdhcyB1bnNpZ25lZCB3aGVuCitpdCBzaG91bGQgaGF2ZSBiZWVuIHNpZ25lZC4gU29tZSBvdGhlciAiaW50IiB2YXJpYWJsZXMsIGhhdmluZyBiZWVuIGNoZWNrZWQsCitoYXZlIGVpdGhlciBiZWVuIGNoYW5nZWQgdG8gdWludDMyX3Qgb3IgY29tbWVudGVkIGFzICJtdXN0IGJlIHNpZ25lZCIuCisKKzE2LiBBIG11dHVhbCByZWN1cnNpb24gd2l0aGluIGEgbG9va2JlaGluZCBhc3NlcnRpb24gc3VjaCBhcyAoPzw9KCg/MikpKCg/MSkpKQorY2F1c2VkIGEgc3RhY2sgb3ZlcmZsb3cgaW5zdGVhZCBvZiB0aGUgZGlhZ25vc2lzIG9mIGEgbm9uLWZpeGVkIGxlbmd0aAorbG9va2JlaGluZCBhc3NlcnRpb24uIFRoaXMgYnVnIHdhcyBkaXNjb3ZlcmVkIGJ5IHRoZSBMTFZNIGZ1enplci4KKworMTcuIFRoZSB1c2Ugb2YgXEsgaW4gYSBwb3NpdGl2ZSBsb29rYmVoaW5kIGFzc2VydGlvbiBpbiBhIG5vbi1hbmNob3JlZCBwYXR0ZXJuCisoZS5nLiAvKD88PVxLYSkvKSBjb3VsZCBtYWtlIHBjcmUyZ3JlcCBsb29wLgorCisxOC4gVGhlcmUgd2FzIGEgc2ltaWxhciBwcm9ibGVtIHRvIDE3IGluIHBjcmUydGVzdCBmb3IgZ2xvYmFsIG1hdGNoZXMsIHRob3VnaAordGhlIGNvZGUgdGhlcmUgZGlkIGNhdGNoIHRoZSBsb29wLgorCisxOS4gSWYgYSBncmVlZHkgcXVhbnRpZmllZCBcWCB3YXMgcHJlY2VkZWQgYnkgXEMgaW4gVVRGIG1vZGUgKGUuZy4gXENcWCopLAorYW5kIGEgc3Vic2VxdWVudCBpdGVtIGluIHRoZSBwYXR0ZXJuIGNhdXNlZCBhIG5vbi1tYXRjaCwgYmFja3RyYWNraW5nIG92ZXIgdGhlCityZXBlYXRlZCBcWCBkaWQgbm90IHN0b3AsIGJ1dCBjYXJyaWVkIG9uIHBhc3QgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0LCBjYXVzaW5nCityZWZlcmVuY2UgdG8gcmFuZG9tIG1lbW9yeSBhbmQvb3IgYSBzZWdmYXVsdC4gVGhlcmUgd2VyZSBhbHNvIHNvbWUgb3RoZXIgY2FzZXMKK3doZXJlIGJhY2t0cmFja2luZyBhZnRlciBcQyBjb3VsZCBjcmFzaC4gVGhpcyBzZXQgb2YgYnVncyB3YXMgZGlzY292ZXJlZCBieSB0aGUKK0xMVk0gZnV6emVyLgorCisyMC4gVGhlIGZ1bmN0aW9uIGZvciBmaW5kaW5nIHRoZSBtaW5pbXVtIGxlbmd0aCBvZiBhIG1hdGNoaW5nIHN0cmluZyBjb3VsZCB0YWtlCithIHZlcnkgbG9uZyB0aW1lIGlmIG11dHVhbCByZWN1cnNpb24gd2FzIHByZXNlbnQgbWFueSB0aW1lcyBpbiBhIHBhdHRlcm4sIGZvcgorZXhhbXBsZSwgLygoPzIpezczfSg/MikpKCg/MSkpLy4gQSBiZXR0ZXIgbXV0dWFsIHJlY3Vyc2lvbiBkZXRlY3Rpb24gbWV0aG9kIGhhcworYmVlbiBpbXBsZW1lbnRlZC4gVGhpcyBpbmZlbGljaXR5IHdhcyBkaXNjb3ZlcmVkIGJ5IHRoZSBMTFZNIGZ1enplci4KKworMjEuIEltcGxlbWVudGVkIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DLgorCisyMi4gVGhlIGZlYXR1cmUgZm9yIHN0cmluZyByZXBsaWNhdGlvbiBpbiBwY3JlMnRlc3QgY291bGQgcmVhZCBmcm9tIGZyZWVkCittZW1vcnkgaWYgdGhlIHJlcGxpY2F0aW9uIHJlcXVpcmVkIGEgYnVmZmVyIHRvIGJlIGV4dGVuZGVkLCBhbmQgaXQgd2FzIG5vdAord29ya2luZyBwcm9wZXJseSBpbiAxNi1iaXQgYW5kIDMyLWJpdCBtb2Rlcy4gVGhpcyBpc3N1ZSB3YXMgZGlzY292ZXJlZCBieSBhCitmdXp6ZXI6IHNlZSBodHRwOi8vbGNhbXR1Zi5jb3JlZHVtcC5jeC9hZmwvLgorCisyMy4gQWRkZWQgdGhlIFBDUkUyX0FMVF9DSVJDVU1GTEVYIG9wdGlvbi4KKworMjQuIEFkanVzdCB0aGUgdHJlYXRtZW50IG9mIFw4IGFuZCBcOSB0byBiZSB0aGUgc2FtZSBhcyB0aGUgY3VycmVudCBQZXJsCitiZWhhdmlvdXIuCisKKzI1LiBTdGF0aWMgbGlua2luZyBhZ2FpbnN0IHRoZSBQQ1JFMiBsaWJyYXJ5IHVzaW5nIHRoZSBwa2ctY29uZmlnIG1vZHVsZSB3YXMKK2ZhaWxpbmcgb24gbWlzc2luZyBwdGhyZWFkIHN5bWJvbHMuCisKKzI2LiBJZiBhIGdyb3VwIHRoYXQgY29udGFpbmVkIGEgcmVjdXJzaXZlIGJhY2sgcmVmZXJlbmNlIGFsc28gY29udGFpbmVkIGEKK2ZvcndhcmQgcmVmZXJlbmNlIHN1YnJvdXRpbmUgY2FsbCBmb2xsb3dlZCBieSBhIG5vbi1mb3J3YXJkLXJlZmVyZW5jZQorc3Vicm91dGluZSBjYWxsLCBmb3IgZXhhbXBsZSAvLigoPzIpKD9SKVwxKSgpLywgcGNyZTJfY29tcGlsZSgpIGZhaWxlZCB0bworY29tcGlsZSBjb3JyZWN0IGNvZGUsIGxlYWRpbmcgdG8gdW5kZWZpbmVkIGJlaGF2aW91ciBvciBhbiBpbnRlcm5hbGx5IGRldGVjdGVkCitlcnJvci4gVGhpcyBidWcgd2FzIGRpc2NvdmVyZWQgYnkgdGhlIExMVk0gZnV6emVyLgorCisyNy4gUXVhbnRpZmljYXRpb24gb2YgY2VydGFpbiBpdGVtcyAoZS5nLiBhdG9taWMgYmFjayByZWZlcmVuY2VzKSBjb3VsZCBjYXVzZQoraW5jb3JyZWN0IGNvZGUgdG8gYmUgY29tcGlsZWQgd2hlbiByZWN1cnNpdmUgZm9yd2FyZCByZWZlcmVuY2VzIHdlcmUgaW52b2x2ZWQuCitGb3IgZXhhbXBsZSwgaW4gdGhpcyBwYXR0ZXJuOiAvKD8xKSgpKCgoKCgoXDErKykpXHg4NSkrKXwpKS8uIFRoaXMgYnVnIHdhcworZGlzY292ZXJlZCBieSB0aGUgTExWTSBmdXp6ZXIuCisKKzI4LiBBIHJlcGVhdGVkIGNvbmRpdGlvbmFsIGdyb3VwIHdob3NlIGNvbmRpdGlvbiB3YXMgYSByZWZlcmVuY2UgYnkgbmFtZSBjYXVzZWQKK2EgYnVmZmVyIG92ZXJmbG93IGlmIHRoZXJlIHdhcyBtb3JlIHRoYW4gb25lIGdyb3VwIHdpdGggdGhlIGdpdmVuIG5hbWUuIFRoaXMKK2J1ZyB3YXMgZGlzY292ZXJlZCBieSB0aGUgTExWTSBmdXp6ZXIuCisKKzI5LiBBIHJlY3Vyc2l2ZSBiYWNrIHJlZmVyZW5jZSBieSBuYW1lIHdpdGhpbiBhIGdyb3VwIHRoYXQgaGFkIHRoZSBzYW1lIG5hbWUgYXMKK2Fub3RoZXIgZ3JvdXAgY2F1c2VkIGEgYnVmZmVyIG92ZXJmbG93LiBGb3IgZXhhbXBsZTogLyg/SikoPydkJyg/J2QnXGd7ZH0pKS8uCitUaGlzIGJ1ZyB3YXMgZGlzY292ZXJlZCBieSB0aGUgTExWTSBmdXp6ZXIuCisKKzMwLiBBIGZvcndhcmQgcmVmZXJlbmNlIGJ5IG5hbWUgdG8gYSBncm91cCB3aG9zZSBudW1iZXIgaXMgdGhlIHNhbWUgYXMgdGhlCitjdXJyZW50IGdyb3VwLCBmb3IgZXhhbXBsZSBpbiB0aGlzIHBhdHRlcm46IC8oP3woXGsnUG0nKXwoPydQbScpKS8sIGNhdXNlZCBhCitidWZmZXIgb3ZlcmZsb3cgYXQgY29tcGlsZSB0aW1lLiBUaGlzIGJ1ZyB3YXMgZGlzY292ZXJlZCBieSB0aGUgTExWTSBmdXp6ZXIuCisKKzMxLiBGaXggLWZzYW5pdGl6ZT11bmRlZmluZWQgd2FybmluZ3MgZm9yIGxlZnQgc2hpZnRzIG9mIDEgYnkgMzEgKGl0IHRyZWF0cyAxCithcyBhbiBpbnQ7IGZpeGVkIGJ5IHdyaXRpbmcgaXQgYXMgMXUpLgorCiszMi4gRml4IHBjcmUyZ3JlcCBjb21waWxlIHdoZW4gLXN0ZD1jOTkgaXMgdXNlZCB3aXRoIGdjYywgdGhvdWdoIGl0IHN0aWxsIGdpdmVzCithIHdhcm5pbmcgZm9yICJmaWxlbm8iIHVubGVzcyAtc3RkPWdudTk5IHVzIHVzZWQuCisKKzMzLiBBIGxvb2tiZWhpbmQgYXNzZXJ0aW9uIHdpdGhpbiBhIHNldCBvZiBtdXR1YWxseSByZWN1cnNpdmUgc3VicGF0dGVybnMgY291bGQKK3Byb3Zva2UgYSBidWZmZXIgb3ZlcmZsb3cuIFRoaXMgYnVnIHdhcyBkaXNjb3ZlcmVkIGJ5IHRoZSBMTFZNIGZ1enplci4KKworMzQuIEdpdmUgYW4gZXJyb3IgZm9yIGFuIGVtcHR5IHN1YnBhdHRlcm4gbmFtZSBzdWNoIGFzICg/JycpLgorCiszNS4gTWFrZSBwY3JlMnRlc3QgZ2l2ZSBhbiBlcnJvciBpZiBhIHBhdHRlcm4gdGhhdCBmb2xsb3dzICNmb3JidWRfdXRmIGNvbnRhaW5zCitcUCwgXHAsIG9yIFxYLgorCiszNi4gVGhlIHdheSBuYW1lZCBzdWJwYXR0ZXJucyBhcmUgaGFuZGxlZCBoYXMgYmVlbiByZWZhY3RvcmVkLiBUaGVyZSBpcyBub3cgYQorcHJlLXBhc3Mgb3ZlciB0aGUgcmVnZXggd2hpY2ggZG9lcyBub3RoaW5nIG90aGVyIHRoYW4gaWRlbnRpZnkgbmFtZWQKK3N1YnBhdHRlcm5zIGFuZCBjb3VudCB0aGUgdG90YWwgY2FwdHVyZXMuIFRoaXMgbWVhbnMgdGhhdCBpbmZvcm1hdGlvbiBhYm91dAorbmFtZWQgcGF0dGVybnMgaXMga25vd24gYmVmb3JlIHRoZSByZXN0IG9mIHRoZSBjb21waWxlLiBJbiBwYXJ0aWN1bGFyLCBpdCBtZWFucwordGhhdCBmb3J3YXJkIHJlZmVyZW5jZXMgY2FuIGJlIGNoZWNrZWQgYXMgdGhleSBhcmUgZW5jb3VudGVyZWQuIFByZXZpb3VzbHksIHRoZQorY29kZSBmb3IgaGFuZGxpbmcgZm9yd2FyZCByZWZlcmVuY2VzIHdhcyBjb250b3J0ZWQgYW5kIGxlZCB0byBzZXZlcmFsIGVycm9ycyBpbgorY29tcHV0aW5nIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBzb21lIHBhdHRlcm5zLCBsZWFkaW5nIHRvIGJ1ZmZlcgorb3ZlcmZsb3dzLgorCiszNy4gVGhlcmUgd2FzIG5vIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93IGluIHN1YnJvdXRpbmUgY2FsbHMgc3VjaCBhcyAoPzEyMykuCisKKzM4LiBUaGUgdGFibGUgZW50cnkgZm9yIFxsIGluIEVCQ0RJQyBlbnZpcm9ubWVudHMgd2FzIGluY29ycmVjdCwgbGVhZGluZyB0byBpdHMKK2JlaW5nIHRyZWF0ZWQgYXMgYSBsaXRlcmFsICdsJyBpbnN0ZWFkIG9mIGNhdXNpbmcgYW4gZXJyb3IuCisKKzM5LiBJZiBhIG5vbi1jYXB0dXJpbmcgZ3JvdXAgY29udGFpbmluZyBhIGNvbmRpdGlvbmFsIGdyb3VwIHRoYXQgY291bGQgbWF0Y2gKK2FuIGVtcHR5IHN0cmluZyB3YXMgcmVwZWF0ZWQsIGl0IHdhcyBub3QgaWRlbnRpZmllZCBhcyBtYXRjaGluZyBhbiBlbXB0eSBzdHJpbmcKK2l0c2VsZi4gRm9yIGV4YW1wbGU6IC9eKD86KD8oMSl4fCkrKSskKCkvLgorCis0MC4gSW4gYW4gRUJDRElDIGVudmlyb25tZW50LCBwY3JldGVzdCB3YXMgbWlzaGFuZGxpbmcgdGhlIGVzY2FwZSBzZXF1ZW5jZXMKK1xhIGFuZCBcZSBpbiB0ZXN0IHN1YmplY3QgbGluZXMuCisKKzQxLiBJbiBhbiBFQkNESUMgZW52aXJvbm1lbnQsIFxhIGluIGEgcGF0dGVybiB3YXMgY29udmVydGVkIHRvIHRoZSBBU0NJSQoraW5zdGVhZCBvZiB0aGUgRUJDRElDIHZhbHVlLgorCis0Mi4gVGhlIGhhbmRsaW5nIG9mIFxjIGluIGFuIEVCQ0RJQyBlbnZpcm9ubWVudCBoYXMgYmVlbiByZXZpc2VkIHNvIHRoYXQgaXQgaXMKK25vdyBjb21wYXRpYmxlIHdpdGggdGhlIHNwZWNpZmljYXRpb24gaW4gUGVybCdzIHBlcmxlYmNkaWMgcGFnZS4KKworNDMuIFNpbmdsZSBjaGFyYWN0ZXIgcmVwZXRpdGlvbiBpbiBKSVQgaGFzIGJlZW4gaW1wcm92ZWQuIDIwLTMwJSBzcGVlZHVwCit3YXMgYWNoaWV2ZWQgb24gY2VydGFpbiBwYXR0ZXJucy4KKworNDQuIFRoZSBFQkNESUMgY2hhcmFjdGVyIDB4NDEgaXMgYSBub24tYnJlYWtpbmcgc3BhY2UsIGVxdWl2YWxlbnQgdG8gMHhhMCBpbgorQVNDSUkvVW5pY29kZS4gVGhpcyBoYXMgbm93IGJlZW4gYWRkZWQgdG8gdGhlIGxpc3Qgb2YgY2hhcmFjdGVycyB0aGF0IGFyZQorcmVjb2duaXplZCBhcyB3aGl0ZSBzcGFjZSBpbiBFQkNESUMuCisKKzQ1LiBXaGVuIFBDUkUyIHdhcyBjb21waWxlZCB3aXRob3V0IFVuaWNvZGUgc3VwcG9ydCwgdGhlIHVzZSBvZiBccCBhbmQgXFAgZ2F2ZQorYW4gZXJyb3IgKGNvcnJlY3RseSkgd2hlbiB1c2VkIG91dHNpZGUgYSBjbGFzcywgYnV0IGRpZCBub3QgZ2l2ZSBhbiBlcnJvcgord2l0aGluIGEgY2xhc3MuCisKKzQ2LiBcaCB3aXRoaW4gYSBjbGFzcyB3YXMgaW5jb3JyZWN0bHkgY29tcGlsZWQgaW4gRUJDRElDIGVudmlyb25tZW50cy4KKworNDcuIEpJVCBzaG91bGQgcmV0dXJuIHdpdGggZXJyb3Igd2hlbiB0aGUgY29tcGlsZWQgcGF0dGVybiByZXF1aXJlcworbW9yZSBzdGFjayBzcGFjZSB0aGFuIHRoZSBtYXhpbXVtLgorCis0OC4gRml4ZWQgYSBtZW1vcnkgbGVhayBpbiBwY3JlMmdyZXAgd2hlbiBhIGxvY2FsZSBpcyBzZXQuCisKKworVmVyc2lvbiAxMC4xMCAwNi1NYXJjaC0yMDE1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gV2hlbiBhIHBhdHRlcm4gaXMgY29tcGlsZWQsIGl0IHJlbWVtYmVycyB0aGUgaGlnaGVzdCBiYWNrIHJlZmVyZW5jZSBzbyB0aGF0Cit3aGVuIG1hdGNoaW5nLCBpZiB0aGUgb3ZlY3RvciBpcyB0b28gc21hbGwsIGV4dHJhIG1lbW9yeSBjYW4gYmUgb2J0YWluZWQgdG8KK3VzZSBpbnN0ZWFkLiBBIGNvbmRpdGlvbmFsIHN1YnBhdHRlcm4gd2hvc2UgY29uZGl0aW9uIGlzIGEgY2hlY2sgb24gYSBjYXB0dXJlCitoYXZpbmcgaGFwcGVuZWQsIHN1Y2ggYXMsIGZvciBleGFtcGxlIGluIHRoZSBwYXR0ZXJuIC9eKD86KGEpfGIpKD8oMSlBfEIpLywgaXMKK2Fub3RoZXIga2luZCBvZiBiYWNrIHJlZmVyZW5jZSwgYnV0IGl0IHdhcyBub3Qgc2V0dGluZyB0aGUgaGlnaGVzdAorYmFja3JlZmVyZW5jZSBudW1iZXIuIFRoaXMgbWF0dGVyZWQgb25seSBpZiBwY3JlMl9tYXRjaCgpIHdhcyBjYWxsZWQgd2l0aCBhbgorb3ZlY3RvciB0aGF0IHdhcyB0b28gc21hbGwgdG8gaG9sZCB0aGUgY2FwdHVyZSwgYW5kIHRoZXJlIHdhcyBubyBvdGhlciBraW5kIG9mCitiYWNrIHJlZmVyZW5jZSAoYSBzaXR1YXRpb24gd2hpY2ggaXMgcHJvYmFibHkgcXVpdGUgcmFyZSkuIFRoZSBlZmZlY3Qgb2YgdGhlCitidWcgd2FzIHRoYXQgdGhlIGNvbmRpdGlvbiB3YXMgYWx3YXlzIHRyZWF0ZWQgYXMgRkFMU0Ugd2hlbiB0aGUgY2FwdHVyZSBjb3VsZAorbm90IGJlIGNvbnN1bHRlZCwgbGVhZGluZyB0byBhIGluY29ycmVjdCBiZWhhdmlvdXIgYnkgcGNyZTJfbWF0Y2goKS4gVGhpcyBidWcKK2hhcyBiZWVuIGZpeGVkLgorCisyLiBGdW5jdGlvbnMgZm9yIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbiBvZiBzZXRzIG9mIGNvbXBpbGVkIHBhdHRlcm5zCitoYXZlIGJlZW4gYWRkZWQuCisKKzMuIFRoZSB2YWx1ZSB0aGF0IGlzIHJldHVybmVkIGJ5IFBDUkUyX0lORk9fU0laRSBoYXMgYmVlbiBjb3JyZWN0ZWQgdG8gcmVtb3ZlCitleGNlc3MgY29kZSB1bml0cyBhdCB0aGUgZW5kIG9mIHRoZSBkYXRhIGJsb2NrIHRoYXQgbWF5IG9jY2FzaW9uYWxseSBvY2N1ciBpZgordGhlIGNvZGUgZm9yIGNhbGN1bGF0aW5nIHRoZSBzaXplIG92ZXItZXN0aW1hdGVzLiBUaGlzIGNoYW5nZSBzdG9wcyB0aGUKK3NlcmlhbGl6YXRpb24gY29kZSBjb3B5aW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSwgdG8gd2hpY2ggdmFsZ3JpbmQgb2JqZWN0cy4gVGhlCitkb2N1bWVudGF0aW9uIG9mIFBDUkUyX0lORk9fU0laRSB3YXMgaW5jb3JyZWN0IGluIHN0YXRpbmcgdGhhdCB0aGUgc2l6ZSBkaWQgbm90CitpbmNsdWRlIHRoZSBnZW5lcmFsIG92ZXJoZWFkLiBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZC4KKworNC4gQWxsIGNvZGUgdW5pdHMgaW4gZXZlcnkgc2xvdCBpbiB0aGUgdGFibGUgb2YgZ3JvdXAgbmFtZXMgYXJlIG5vdyBzZXQsIGFnYWluCitpbiBvcmRlciB0byBhdm9pZCBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIHdoZW4gc2VyaWFsaXppbmcuCisKKzUuIFRoZSAoKk5PX0pJVCkgZmVhdHVyZSBpcyBpbXBsZW1lbnRlZC4KKworNi4gSWYgYSBidWcgdGhhdCBjYXVzZWQgcGNyZTJfY29tcGlsZSgpIHRvIHVzZSBtb3JlIG1lbW9yeSB0aGFuIGFsbG9jYXRlZCB3YXMKK3RyaWdnZXJlZCB3aGVuIHVzaW5nIHZhbGdyaW5kLCB0aGUgY29kZSBpbiAoMykgYWJvdmUgcGFzc2VkIGEgc3R1cGlkbHkgbGFyZ2UKK3ZhbHVlIHRvIHZhbGdyaW5kLiBUaGlzIGNhdXNlZCBhIGNyYXNoIGluc3RlYWQgb2YgYW4gImludGVybmFsIGVycm9yIiByZXR1cm4uCisKKzcuIEEgcmVmZXJlbmNlIHRvIGEgZHVwbGljYXRlZCBuYW1lZCBncm91cCAoZWl0aGVyIGEgYmFjayByZWZlcmVuY2Ugb3IgYSB0ZXN0Citmb3IgYmVpbmcgc2V0IGluIGEgY29uZGl0aW9uYWwpIHRoYXQgb2NjdXJyZWQgaW4gYSBwYXJ0IG9mIHRoZSBwYXR0ZXJuIHdoZXJlCitQQ1JFMl9EVVBOQU1FUyB3YXMgbm90IHNldCBjYXVzZWQgdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvciB0aGUgcGF0dGVybgordG8gYmUgaW5jb3JyZWN0bHkgY2FsY3VsYXRlZCwgbGVhZGluZyB0byBvdmVyd3JpdGluZy4KKworOC4gQSBtdXR1YWxseSByZWN1cnNpdmUgc2V0IG9mIGJhY2sgcmVmZXJlbmNlcyBzdWNoIGFzIChcMikoXDEpIGNhdXNlZCBhCitzZWdmYXVsdCBhdCBjb21waWxlIHRpbWUgKHdoaWxlIHRyeWluZyB0byBmaW5kIHRoZSBtaW5pbXVtIG1hdGNoaW5nIGxlbmd0aCkuCitUaGUgaW5maW5pdGUgbG9vcCBpcyBub3cgYnJva2VuICh3aXRoIHRoZSBtaW5pbXVtIGxlbmd0aCB1bnNldCwgdGhhdCBpcywgemVybykuCisKKzkuIElmIGFuIGFzc2VydGlvbiB0aGF0IHdhcyB1c2VkIGFzIGEgY29uZGl0aW9uIHdhcyBxdWFudGlmaWVkIHdpdGggYSBtaW5pbXVtCitvZiB6ZXJvLCBtYXRjaGluZyB3ZW50IHdyb25nLiBJbiBwYXJ0aWN1bGFyLCBpZiB0aGUgd2hvbGUgZ3JvdXAgaGFkIHVubGltaXRlZAorcmVwZXRpdGlvbiBhbmQgY291bGQgbWF0Y2ggYW4gZW1wdHkgc3RyaW5nLCBhIHNlZ2ZhdWx0IHdhcyBsaWtlbHkuIFRoZSBwYXR0ZXJuCisoPyg/PTApPykrIGlzIGFuIGV4YW1wbGUgdGhhdCBjYXVzZWQgdGhpcy4gUGVybCBhbGxvd3MgYXNzZXJ0aW9ucyB0byBiZQorcXVhbnRpZmllZCwgYnV0IG5vdCBpZiB0aGV5IGFyZSBiZWluZyB1c2VkIGFzIGNvbmRpdGlvbnMsIHNvIHRoZSBhYm92ZSBwYXR0ZXJuCitpcyBmYXVsdGVkIGJ5IFBlcmwuIFBDUkUyIGhhcyBub3cgYmVlbiBjaGFuZ2VkIHNvIHRoYXQgaXQgYWxzbyByZWplY3RzIHN1Y2gKK3BhdHRlcm5zLgorCisxMC4gVGhlIGVycm9yIG1lc3NhZ2UgZm9yIGFuIGludmFsaWQgcXVhbnRpZmllciBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gIm5vdGhpbmcKK3RvIHJlcGVhdCIgdG8gInF1YW50aWZpZXIgZG9lcyBub3QgZm9sbG93IGEgcmVwZWF0YWJsZSBpdGVtIi4KKworMTEuIElmIGEgYmFkIFVURiBzdHJpbmcgaXMgY29tcGlsZWQgd2l0aCBOT19VVEZfQ0hFQ0ssIGl0IG1heSBzdWNjZWVkLCBidXQKK3NjYW5uaW5nIHRoZSBjb21waWxlZCBwYXR0ZXJuIGluIHN1YnNlcXVlbnQgYXV0by1wb3NzZXNzaWZpY2F0aW9uIGNhbiBnZXQgb3V0CitvZiBzdGVwIGFuZCBsZWFkIHRvIGFuIHVua25vd24gb3Bjb2RlLiBQcmV2aW91c2x5IHRoaXMgY291bGQgaGF2ZSBjYXVzZWQgYW4KK2luZmluaXRlIGxvb3AuIE5vdyBpdCBnZW5lcmF0ZXMgYW4gImludGVybmFsIGVycm9yIiBlcnJvci4gVGhpcyBpcyBhIHRpZHl1cCwKK25vdCBhIGJ1ZyBmaXg7IHBhc3NpbmcgYmFkIFVURiB3aXRoIE5PX1VURl9DSEVDSyBpcyBkb2N1bWVudGVkIGFzIGhhdmluZyBhbgordW5kZWZpbmVkIG91dGNvbWUuCisKKzEyLiBBIFVURiBwYXR0ZXJuIGNvbnRhaW5pbmcgYSAibm90IiBtYXRjaCBvZiBhIG5vbi1BU0NJSSBjaGFyYWN0ZXIgYW5kIGEKK3N1YnJvdXRpbmUgcmVmZXJlbmNlIGNvdWxkIGxvb3AgYXQgY29tcGlsZSB0aW1lLiBFeGFtcGxlOiAvW15ceGZmXSgoPzEpKS8uCisKKzEzLiBUaGUgbG9jYWxlIHRlc3QgKFJ1blRlc3QgMykgaGFzIGJlZW4gdXBncmFkZWQuIEl0IG5vdyBjaGVja3MgdGhhdCBhIGxvY2FsZQordGhhdCBpcyBmb3VuZCBpbiB0aGUgb3V0cHV0IG9mICJsb2NhbGUgLWEiIGNhbiBhY3R1YWxseSBiZSBzZXQgYnkgcGNyZTJ0ZXN0CitiZWZvcmUgaXQgaXMgYWNjZXB0ZWQuIFByZXZpb3VzbHksIGluIGFuIGVudmlyb25tZW50IHdoZXJlIGEgbG9jYWxlIHdhcyBsaXN0ZWQKK2J1dCB3b3VsZCBub3Qgc2V0IChhbiBleGFtcGxlIGRvZXMgZXhpc3QpLCB0aGUgdGVzdCB3b3VsZCAicGFzcyIgd2l0aG91dAorYWN0dWFsbHkgZG9pbmcgYW55dGhpbmcuIEFsc28gdGhlIGZyX0NBIGxvY2FsZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgbGlzdCBvZgorbG9jYWxlcyB0aGF0IGNhbiBiZSB1c2VkLgorCisxNC4gRml4ZWQgYSBidWcgaW4gcGNyZTJfc3Vic3RpdHV0ZSgpLiBJZiBhIHJlcGxhY2VtZW50IHN0cmluZyBlbmRlZCBpbiBhCitjYXB0dXJpbmcgZ3JvdXAgbnVtYmVyIHdpdGhvdXQgcGFyZW50aGVzZXMsIHRoZSBsYXN0IGNoYXJhY3RlciB3YXMgaW5jb3JyZWN0bHkKK2xpdGVyYWxseSBpbmNsdWRlZCBhdCB0aGUgZW5kIG9mIHRoZSByZXBsYWNlbWVudCBzdHJpbmcuCisKKzE1LiBBIHBvc3Nlc3NpdmUgY2FwdHVyaW5nIGdyb3VwIHN1Y2ggYXMgKGEpKisgd2l0aCBhIG1pbmltdW0gcmVwZWF0IG9mIHplcm8KK2ZhaWxlZCB0byBhbGxvdyB0aGUgemVyby1yZXBlYXQgY2FzZSBpZiBwY3JlMl9tYXRjaCgpIHdhcyBjYWxsZWQgd2l0aCBhbgorb3ZlY3RvciB0b28gc21hbGwgdG8gY2FwdHVyZSB0aGUgZ3JvdXAuCisKKzE2LiBJbXByb3ZlZCBlcnJvciBtZXNzYWdlIGluIHBjcmUydGVzdCB3aGVuIHNldHRpbmcgdGhlIHN0YWNrIHNpemUgKC1TKSBmYWlscy4KKworMTcuIEZpeGVkIHR3byBidWdzIGluIENNYWtlTGlzdHMudHh0OiAoMSkgU29tZSBsaW5lcyBoYWQgZ290IGxvc3QgaW4gdGhlCit0cmFuc2ZlciBmcm9tIFBDUkUxLCBtZWFuaW5nIHRoYXQgQ01ha2UgY29uZmlndXJhdGlvbiBmYWlsZWQgaWYgImJ1aWxkIHRlc3RzIgord2FzIHNlbGVjdGVkLiAoMikgVGhlIGZpbGUgc3JjL3BjcmUyX3NlcmlhbGl6ZS5jIGhhZCBub3QgYmVlbiBhZGRlZCB0byB0aGUgbGlzdAorb2YgUENSRTIgc291cmNlcywgd2hpY2ggY2F1c2VkIGEgZmFpbHVyZSB0byBidWlsZCBwY3JlMnRlc3QuCisKKzE4LiBGaXhlZCB0eXBvIGluIHBjcmUyX3NlcmlhbGl6ZS5jIChERUNMIGluc3RlYWQgb2YgREVGTikgdGhhdCBjYXVzZXMgcHJvYmxlbXMKK29ubHkgb24gV2luZG93cy4KKworMTkuIFVzZSBiaW5hcnkgaW5wdXQgd2hlbiByZWFkaW5nIGJhY2sgc2F2ZWQgc2VyaWFsaXplZCBwYXR0ZXJucyBpbiBwY3JlMnRlc3QuCisKKzIwLiBBZGRlZCBSdW5UZXN0LmJhdCBmb3IgcnVubmluZyB0aGUgdGVzdHMgdW5kZXIgV2luZG93cy4KKworMjEuICJtYWtlIGRpc3RjbGVhbiIgd2FzIG5vdCByZW1vdmluZyBjb25maWcuaCwgYSBmaWxlIHRoYXQgbWF5IGJlIGNyZWF0ZWQgZm9yCit1c2Ugd2l0aCBDTWFrZS4KKworMjIuIEEgcGF0dGVybiBzdWNoIGFzICIoKD8yKXswLDE5OTl9KCkpPyIsIHdoaWNoIGhhcyBhIGdyb3VwIGNvbnRhaW5pbmcgYQorZm9yd2FyZCByZWZlcmVuY2UgcmVwZWF0ZWQgYSBsYXJnZSAoYnV0IGxpbWl0ZWQpIG51bWJlciBvZiB0aW1lcyB3aXRoaW4gYQorcmVwZWF0ZWQgb3V0ZXIgZ3JvdXAgdGhhdCBoYXMgYSB6ZXJvIG1pbmltdW0gcXVhbnRpZmllciwgY2F1c2VkIGluY29ycmVjdCBjb2RlCit0byBiZSBjb21waWxlZCwgbGVhZGluZyB0byB0aGUgZXJyb3IgImludGVybmFsIGVycm9yOiBwcmV2aW91c2x5LWNoZWNrZWQKK3JlZmVyZW5jZWQgc3VicGF0dGVybiBub3QgZm91bmQiIHdoZW4gYW4gaW5jb3JyZWN0IG1lbW9yeSBhZGRyZXNzIHdhcyByZWFkLgorVGhpcyBidWcgd2FzIHJlcG9ydGVkIGFzICJoZWFwIG92ZXJmbG93IiwgZGlzY292ZXJlZCBieSBLYWkgTHUgb2YgRm9ydGluZXQncworRm9ydGlHdWFyZCBMYWJzLiAoQWRkZWQgMjQtTWFyY2gtMjAxNTogQ1ZFLTIwMTUtMjMyNSB3YXMgZ2l2ZW4gdG8gdGhpcy4pCisKKzIzLiBBIHBhdHRlcm4gc3VjaCBhcyAiKCg/KzEpKFwxKSkvIiBjb250YWluaW5nIGEgZm9yd2FyZCByZWZlcmVuY2Ugc3Vicm91dGluZQorY2FsbCB3aXRoaW4gYSBncm91cCB0aGF0IGFsc28gY29udGFpbmVkIGEgcmVjdXJzaXZlIGJhY2sgcmVmZXJlbmNlIGNhdXNlZAoraW5jb3JyZWN0IGNvZGUgdG8gYmUgY29tcGlsZWQuIFRoaXMgYnVnIHdhcyByZXBvcnRlZCBhcyAiaGVhcCBvdmVyZmxvdyIsCitkaXNjb3ZlcmVkIGJ5IEthaSBMdSBvZiBGb3J0aW5ldCdzIEZvcnRpR3VhcmQgTGFicy4gKEFkZGVkIDI0LU1hcmNoLTIwMTU6CitDVkUtMjAxNS0yMzI2IHdhcyBnaXZlbiB0byB0aGlzLikKKworMjQuIENvbXB1dGluZyB0aGUgc2l6ZSBvZiB0aGUgSklUIHJlYWQtb25seSBkYXRhIGluIGFkdmFuY2UgaGFzIGJlZW4gYSBzb3VyY2UKK29mIHZhcmlvdXMgaXNzdWVzLCBhbmQgbmV3IG9uZXMgYXJlIHN0aWxsIGFwcGVhciB1bmZvcnR1bmF0ZWx5LiBUbyBmaXgKK2V4aXN0aW5nIGFuZCBmdXR1cmUgaXNzdWVzLCBzaXplIGNvbXB1dGF0aW9uIGlzIGVsaW1pbmF0ZWQgZnJvbSB0aGUgY29kZSwKK2FuZCByZXBsYWNlZCBieSBvbi1kZW1hbmQgbWVtb3J5IGFsbG9jYXRpb24uCisKKzI1LiBBIHBhdHRlcm4gc3VjaCBhcyAvKD9pKVtBLWBdLywgd2hlcmUgY2hhcmFjdGVycyBpbiB0aGUgb3RoZXIgY2FzZSBhcmUKK2FkamFjZW50IHRvIHRoZSBlbmQgb2YgdGhlIHJhbmdlLCBhbmQgdGhlIHJhbmdlIGNvbnRhaW5lZCBjaGFyYWN0ZXJzIHdpdGggbW9yZQordGhhbiBvbmUgb3RoZXIgY2FzZSwgY2F1c2VkIGluY29ycmVjdCBiZWhhdmlvdXIgd2hlbiBjb21waWxlZCBpbiBVVEYgbW9kZS4gSW4KK3RoYXQgZXhhbXBsZSwgdGhlIHJhbmdlIGEtaiB3YXMgbGVmdCBvdXQgb2YgdGhlIGNsYXNzLgorCisKK1ZlcnNpb24gMTAuMDAgMDUtSmFudWFyeS0yMDE1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWZXJzaW9uIDEwLjAwIGlzIHRoZSBmaXJzdCByZWxlYXNlIG9mIFBDUkUyLCBhIHJldmlzZWQgQVBJIGZvciB0aGUgUENSRQorbGlicmFyeS4gQ2hhbmdlcyBwcmlvciB0byAxMC4wMCBhcmUgbG9nZ2VkIGluIHRoZSBDaGFuZ2VMb2cgZmlsZSBmb3IgdGhlIG9sZAorQVBJLCB1cCB0byBpdGVtIDIwIGZvciByZWxlYXNlIDguMzYuCisKK1RoZSBjb2RlIG9mIHRoZSBsaWJyYXJ5IHdhcyBoZWF2aWx5IHJldmlzZWQgYXMgcGFydCBvZiB0aGUgbmV3IEFQSQoraW1wbGVtZW50YXRpb24uIERldGFpbHMgb2YgZWFjaCBhbmQgZXZlcnkgbW9kaWZpY2F0aW9uIHdlcmUgbm90IGluZGl2aWR1YWxseQorbG9nZ2VkLiBJbiBhZGRpdGlvbiB0byB0aGUgQVBJIGNoYW5nZXMsIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyB3ZXJlIG1hZGUuIFRoZXkKK2FyZSBlaXRoZXIgbmV3IGZ1bmN0aW9uYWxpdHksIG9yIGJ1ZyBmaXhlcyBhbmQgb3RoZXIgbm90aWNlYWJsZSBjaGFuZ2VzIG9mCitiZWhhdmlvdXIgdGhhdCB3ZXJlIGltcGxlbWVudGVkIGFmdGVyIHRoZSBjb2RlIGhhZCBiZWVuIGZvcmtlZC4KKworMS4gSW5jbHVkaW5nIFVuaWNvZGUgc3VwcG9ydCBhdCBidWlsZCB0aW1lIGlzIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBpdAorY2FuIG9wdGlvbmFsbHkgYmUgZGlzYWJsZWQuIEl0IGlzIG5vdCBlbmFibGVkIGJ5IGRlZmF1bHQgYXQgcnVuIHRpbWUgKG5vCitjaGFuZ2UpLgorCisyLiBUaGUgdGVzdCBwcm9ncmFtLCBub3cgY2FsbGVkIHBjcmUydGVzdCwgd2FzIHJlLXNwZWNpZmllZCBhbmQgYWxtb3N0Citjb21wbGV0ZWx5IHJlLXdyaXR0ZW4uIEl0cyBpbnB1dCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIGlucHV0IGZvciBwY3JldGVzdC4KKworMy4gUGF0dGVybnMgbWF5IHN0YXJ0IHdpdGggKCpOT1RFTVBUWSkgb3IgKCpOT1RFTVBUWV9BVFNUQVJUKSB0byBzZXQgdGhlCitQQ1JFMl9OT1RFTVBUWSBvciBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIG9wdGlvbnMgZm9yIGV2ZXJ5IHN1YmplY3QgbGluZSB0aGF0IGlzCittYXRjaGVkIGJ5IHRoYXQgcGF0dGVybi4KKworNC4gRm9yIHRoZSBiZW5lZml0IG9mIHRob3NlIHdobyB1c2UgUENSRTIgdmlhIHNvbWUgb3RoZXIgYXBwbGljYXRpb24sIHRoYXQgaXMsCitub3Qgd3JpdGluZyB0aGUgZnVuY3Rpb24gY2FsbHMgdGhlbXNlbHZlcywgaXQgaXMgcG9zc2libGUgdG8gY2hlY2sgdGhlIFBDUkUyCit2ZXJzaW9uIGJ5IG1hdGNoaW5nIGEgcGF0dGVybiBzdWNoIGFzIC8oPyhWRVJTSU9OPj0xMCl5ZXN8bm8pLyBhZ2FpbnN0IGEKK3N0cmluZyBzdWNoIGFzICJ5ZXNubyIuCisKKzUuIFRoZXJlIGFyZSBjYXNlLWVxdWl2YWxlbnQgVW5pY29kZSBjaGFyYWN0ZXJzIHdob3NlIGVuY29kaW5ncyB1c2UgZGlmZmVyZW50CitudW1iZXJzIG9mIGNvZGUgdW5pdHMgaW4gVVRGLTguIFUrMDIzQSBhbmQgVSsyQzY1IGFyZSBvbmUgZXhhbXBsZS4gKEl0IGlzCit0aGVvcmV0aWNhbGx5IHBvc3NpYmxlIGZvciB0aGlzIHRvIGhhcHBlbiBpbiBVVEYtMTYgdG9vLikgSWYgYSBiYWNrcmVmZXJlbmNlIHRvCithIGdyb3VwIGNvbnRhaW5pbmcgb25lIG9mIHRoZXNlIGNoYXJhY3RlcnMgd2FzIGdyZWVkaWx5IHJlcGVhdGVkLCBhbmQgZHVyaW5nCit0aGUgbWF0Y2ggYSBiYWNrdHJhY2sgb2NjdXJyZWQsIHRoZSBzdWJqZWN0IG1pZ2h0IGJlIGJhY2t0cmFja2VkIGJ5IHRoZSB3cm9uZworbnVtYmVyIG9mIGNvZGUgdW5pdHMuIEZvciBleGFtcGxlLCBpZiAvXihceHsyM2F9KVwxKiguKS8gaXMgbWF0Y2hlZCBjYXNlbGVzc2x5CisoYW5kIGluIFVURi04IG1vZGUpIGFnYWluc3QgIlx4ezIzYX1ceHsyYzY1fVx4ezJjNjV9XHh7MmM2NX0iLCBncm91cCAyIHNob3VsZAorY2FwdHVyZSB0aGUgZmluYWwgY2hhcmFjdGVyLCB3aGljaCBpcyB0aGUgdGhyZWUgYnl0ZXMgRTIsIEIxLCBhbmQgQTUgaW4gVVRGLTguCitJbmNvcnJlY3QgYmFja3RyYWNraW5nIG1lYW50IHRoYXQgZ3JvdXAgMiBjYXB0dXJlZCBvbmx5IHRoZSBsYXN0IHR3byBieXRlcy4KK1RoaXMgYnVnIGhhcyBiZWVuIGZpeGVkOyB0aGUgbmV3IGNvZGUgaXMgc2xvd2VyLCBidXQgaXQgaXMgdXNlZCBvbmx5IHdoZW4gdGhlCitzdHJpbmdzIG1hdGNoZWQgYnkgdGhlIHJlcGV0aXRpb24gYXJlIG5vdCBhbGwgdGhlIHNhbWUgbGVuZ3RoLgorCis2LiBBIHBhdHRlcm4gc3VjaCBhcyAvKClhLyB3YXMgbm90IHNldHRpbmcgdGhlICJmaXJzdCBjaGFyYWN0ZXIgbXVzdCBiZSAnYSciCitpbmZvcm1hdGlvbi4gVGhpcyBhcHBsaWVkIHRvIGFueSBwYXR0ZXJuIHdpdGggYSBncm91cCB0aGF0IG1hdGNoZWQgbm8KK2NoYXJhY3RlcnMsIGZvciBleGFtcGxlOiAvKD86KD89Lil8KD88IXgpKWEvLgorCis3LiBXaGVuIGFuICgqQUNDRVBUKSBpcyB0cmlnZ2VyZWQgaW5zaWRlIGNhcHR1cmluZyBwYXJlbnRoZXNlcywgaXQgYXJyYW5nZXMgZm9yCit0aG9zZSBwYXJlbnRoZXNlcyB0byBiZSBjbG9zZWQgd2l0aCB3aGF0ZXZlciBoYXMgYmVlbiBjYXB0dXJlZCBzbyBmYXIuIEhvd2V2ZXIsCitpdCB3YXMgZmFpbGluZyB0byBtYXJrIGFueSBvdGhlciBncm91cHMgYmV0d2VlbiB0aGUgaGlnaGVzdCBjYXB0dXJlIHNvIGZhciBhbmQKK3RoZSBjdXJycmVudCBncm91cCBhcyAidW5zZXQiLiBUaHVzLCB0aGUgb3ZlY3RvciBmb3IgdGhvc2UgZ3JvdXBzIGNvbnRhaW5lZAord2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgdGhlcmUuIEFuIGV4YW1wbGUgaXMgdGhlIHBhdHRlcm4gLyh4KXwoKCpBQ0NFUFQpKS8gd2hlbgorbWF0Y2hlZCBhZ2FpbnN0ICJhYmNkIi4KKworOC4gVGhlIHBjcmUyX3N1YnN0aXR1dGUoKSBmdW5jdGlvbiBoYXMgYmVlbiBpbXBsZW1lbnRlZC4KKworOS4gSWYgYW4gYXNzZXJ0aW9uIHVzZWQgYXMgYSBjb25kaXRpb24gd2FzIHF1YW50aWZpZWQgd2l0aCBhIG1pbmltdW0gb2YgemVybworKGFuIG9kZCB0aGluZyB0byBkbywgYnV0IGl0IGhhcHBlbmVkKSwgU0lHU0VHViBvciBvdGhlciBtaXNiZWhhdmlvdXIgY291bGQKK29jY3VyLgorCisxMC4gVGhlIFBDUkUyX05PX0RPVFNUQVJfQU5DSE9SIG9wdGlvbiBoYXMgYmVlbiBpbXBsZW1lbnRlZC4KKworKioqKgpkaWZmIC0tZ2l0IGEvZGlzdDIvQ2hlY2tNYW4gYi9kaXN0Mi9DaGVja01hbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41Njg2NzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvQ2hlY2tNYW4KQEAgLTAsMCArMSw2NyBAQAorIyEgL3Vzci9iaW4vcGVybAorCisjIEEgc2NyaXB0IHRvIHNjYW4gUENSRTIncyBtYW4gcGFnZXMgdG8gY2hlY2sgZm9yIHR5cG9zIGluIHRoZSBjb250cm9sCisjIHNlcXVlbmNlcy4gSSB1c2Ugb25seSBhIHNtYWxsIHNldCBvZiB0aGUgYXZhaWxhYmxlIHJlcGVydG9pcmUsIHNvIGl0IGlzIAorIyBzdHJhaWdodGZvcndhcmQgdG8gY2hlY2sgdGhhdCBub3RoaW5nIGVsc2UgaGFzIHNsaXBwZWQgaW4gYnkgbWlzdGFrZS4gVGhpcworIyBzY3JpcHQgc2hvdWxkIGJlIGNhbGxlZCBpbiB0aGUgZG9jIGRpcmVjdG9yeS4KKworJHlpZWxkID0gMDsKKword2hpbGUgKHNjYWxhcihAQVJHVikgPiAwKQorICB7CisgICRsaW5lID0gMDsgCisgICRmaWxlID0gc2hpZnQgQEFSR1Y7CisgICAgCisgIG9wZW4gKElOLCAkZmlsZSkgfHwgZGllICJGYWlsZWQgdG8gb3BlbiAkZmlsZVxuIjsKKyAgCisgIHdoaWxlICg8SU4+KQorICAgIHsgIAorICAgICRsaW5lKys7IAorICAgIGlmICgvXlxzKiQvKQorICAgICAgeworICAgICAgcHJpbnRmICJFbXB0eSBsaW5lICRsaW5lIG9mICRmaWxlXG4iOworICAgICAgJHlpZWxkID0gMTsgIAorICAgICAgfSAgIAorICAgIGVsc2lmICgvXlwuLykKKyAgICAgIHsKKyAgICAgIGlmICghL15cLlxzKiR8CisgICAgICAgICAgICBeXC5CXHMrXFN8IAorICAgICAgICAgICAgXlwuVEhcc1xTfAorICAgICAgICAgICAgXlwuU0hcc1xTfAorICAgICAgICAgICAgXlwuU1Ncc1xTfAorICAgICAgICAgICAgXlwuVFAoPzpccz9cZCspP1xzKiR8CisgICAgICAgICAgICBeXC5TTVxzKiR8CisgICAgICAgICAgICBeXC5iclxzKiR8IAorICAgICAgICAgICAgXlwucnNccyokfCAKKyAgICAgICAgICAgIF5cLnNwXHMqJHwgCisgICAgICAgICAgICBeXC5uZlxzKiR8IAorICAgICAgICAgICAgXlwuZmlccyokfCAKKyAgICAgICAgICAgIF5cLlBccyokfCAKKyAgICAgICAgICAgIF5cLlBQXHMqJHwgCisgICAgICAgICAgICBeXC5cXCIoPzpcIEhSRUYpP1xzKiR8CisgICAgICAgICAgICBeXC5cXCJcc0hUTUxcczxhXHNocmVmPSJbXiJdKz8iPlxzKiR8CisgICAgICAgICAgICBeXC5cXCJcc0hUTUxcczxhXHNuYW1lPSJbXiJdKz8iPjxcL2E+XHMqJHwKKyAgICAgICAgICAgIF5cLlxcIlxzPFwvYT5ccyokfAorICAgICAgICAgICAgXlwuXFwiXHNKT0lOU0hccyokfAorICAgICAgICAgICAgXlwuXFwiXHNKT0lOXHMqJC94ICAKKyAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICBwcmludGYgIkJhZCBjb250cm9sIGxpbmUgJGxpbmUgb2YgJGZpbGVcbiI7CisgICAgICAgICR5aWVsZCA9IDE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBpZiAoL1xcW15lZl18XFxmW15JQlBdLykKKyAgICAgICAgeworICAgICAgICBwcmludGYgIkJhZCBiYWNrc2xhc2ggaW4gbGluZSAkbGluZSBvZiAkZmlsZVxuIjsgIAorICAgICAgICAkeWllbGQgPSAxOyAKKyAgICAgICAgfSAKKyAgICAgIH0gICAKKyAgICB9CisgICAgIAorICBjbG9zZShJTik7ICAgCisgIH0KKyAgCitleGl0ICR5aWVsZDsKKyMgRW5kICAKZGlmZiAtLWdpdCBhL2Rpc3QyL0NsZWFuVHh0IGIvZGlzdDIvQ2xlYW5UeHQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMWY0MjUxOQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL0NsZWFuVHh0CkBAIC0wLDAgKzEsMTEzIEBACisjISAvdXNyL2Jpbi9wZXJsIC13CisKKyMgU2NyaXB0IHRvIHRha2UgdGhlIG91dHB1dCBvZiBucm9mZiAtbWFuIGFuZCByZW1vdmUgYWxsIHRoZSBiYWNrc3BhY2luZyBhbmQKKyMgdGhlIHBhZ2UgZm9vdGVycyBhbmQgdGhlIHNjcmVlbiBjb21tYW5kcyBldGMgc28gdGhhdCBpdCBpcyBtb3JlIHVzZWZ1bGx5CisjIHJlYWRhYmxlIG9ubGluZS4gSW4gZmFjdCwgaW4gdGhlIGxhdGVzdCBucm9mZiwgaW50ZXJtZWRpYXRlIGZvb3RlcnMgZG9uJ3QKKyMgc2VlbSB0byBiZSBnZW5lcmF0ZWQgYW55IG1vcmUuCisKKyRibGFua2NvdW50ID0gMDsKKyRsYXN0d2FzY3V0ID0gMDsKKyRmaXJzdGhlYWRlciA9IDE7CisKKyMgSW5wdXQgb24gU1RESU47IG91dHB1dCB0byBTVERPVVQuCisKK3doaWxlICg8U1RESU4+KQorICB7CisgIHMvXHgxYlxbXGQrbS8vZzsgICAjIFJlbW92ZSBzY3JlZW4gY29udHJvbHMgIkVTQyBbIG51bWJlciBtIgorICBzLy5ceDgvL2c7ICAgICAgICAgIyBSZW1vdmUgImNoYXIsIGJhY2tzcGFjZSIKKworICAjIEhhbmRsZSBoZWFkZXIgbGluZXMuIFJldGFpbiBvbmx5IHRoZSBmaXJzdCBvbmUgd2UgZW5jb3VudGVyLCBidXQgcmVtb3ZlCisgICMgdGhlIGJsYW5rIGxpbmUgdGhhdCBmb2xsb3dzLiBBbnkgb3RoZXJzIChlLmcuIGF0IGVuZCBvZiBkb2N1bWVudCkgYW5kIHRoZQorICAjIGZvbGxvd2luZyBibGFuayBsaW5lIGFyZSBkcm9wcGVkLgorCisgIGlmICgvXlBDUkUoXHcqKVwoKFsxM10pXClccytQQ1JFXDFcKFwyXCkkLykKKyAgICB7CisgICAgaWYgKCRmaXJzdGhlYWRlcikKKyAgICAgIHsKKyAgICAgICRmaXJzdGhlYWRlciA9IDA7CisgICAgICBwcmludDsKKyAgICAgICRsYXN0cHJpbnRlZCA9ICRfOworICAgICAgJGxhc3R3YXNjdXQgPSAwOworICAgICAgfQorICAgICRfPTxTVERJTj47ICAgICAgICMgUmVtb3ZlIGEgYmxhbmsgdGhhdCBmb2xsb3dzCisgICAgbmV4dDsKKyAgICB9CisKKyAgIyBDb3VudCBydW5zIG9mIGVtcHR5IGxpbmVzCisKKyAgaWYgKC9eXHMqJC8pCisgICAgeworICAgICRibGFua2NvdW50Kys7CisgICAgJGxhc3R3YXNjdXQgPSAwOworICAgIG5leHQ7CisgICAgfQorCisgICMgSWYgYSBjaHVuayBvZiBsaW5lcyBoYXMgYmVlbiBjdXQgb3V0IChwYWdlIGZvb3RlcikgYW5kIHRoZSBuZXh0IGxpbmUKKyAgIyBoYXMgYSBkaWZmZXJlbnQgaW5kZW50YXRpb24sIHB1dCBiYWNrIG9uZSBibGFuayBsaW5lLgorCisgIGlmICgkbGFzdHdhc2N1dCAmJiAkYmxhbmtjb3VudCA8IDEgJiYgZGVmaW5lZCgkbGFzdHByaW50ZWQpKQorICAgIHsKKyAgICAoJGEpID0gJGxhc3RwcmludGVkID1+IC9eKFxzKikvOworICAgICgkYikgPSAkXyA9fiAvXihccyopLzsKKyAgICAkYmxhbmtjb3VudCsrIGlmICgkYSBuZSAkYik7CisgICAgfQorCisgICMgV2UgZ2V0IGhlcmUgb25seSB3aGVuIHdlIGhhdmUgYSBub24tYmxhbmsgbGluZSBpbiBoYW5kLiBJZiBpdCB3YXMgcHJlY2VkZWQKKyAgIyBieSAzIG9yIG1vcmUgYmxhbmsgbGluZXMsIHJlYWQgdGhlIG5leHQgMyBsaW5lcyBhbmQgc2VlIGlmIHRoZXkgYXJlIGJsYW5rLgorICAjIElmIHNvLCByZW1vdmUgYWxsIDcgbGluZXMsIGFuZCByZW1lbWJlciB0aGF0IHdlIGhhdmUganVzdCBkb25lIGEgY3V0LgorCisgIGlmICgkYmxhbmtjb3VudCA+PSAzKQorICAgIHsKKyAgICBmb3IgKCRpID0gMDsgJGkgPCAzOyAkaSsrKQorICAgICAgeworICAgICAgJG5leHRbJGldID0gPFNURElOPjsKKyAgICAgICRuZXh0WyRpXSA9ICIiIGlmICFkZWZpbmVkICRuZXh0WyRpXTsKKyAgICAgICRuZXh0WyRpXSA9fiBzL1x4MWJcW1xkK20vL2c7ICAgIyBSZW1vdmUgc2NyZWVuIGNvbnRyb2xzICJFU0MgWyBudW1iZXIgbSIKKyAgICAgICRuZXh0WyRpXSA9fiBzLy5ceDgvL2c7ICAgICAgICAgIyBSZW1vdmUgImNoYXIsIGJhY2tzcGFjZSIKKyAgICAgIH0KKworICAgICMgQ3V0IG91dCBjaHVua3Mgb2YgdGhlIGZvcm0gPDMgYmxhbmtzPjxub24tYmxhbms+PDMgYmxhbmtzPgorCisgICAgaWYgKCRuZXh0WzBdID1+IC9eXHMqJC8gJiYKKyAgICAgICAgJG5leHRbMV0gPX4gL15ccyokLyAmJgorICAgICAgICAkbmV4dFsyXSA9fiAvXlxzKiQvKQorICAgICAgeworICAgICAgJGJsYW5rY291bnQgLT0gMzsKKyAgICAgICRsYXN0d2FzY3V0ID0gMTsKKyAgICAgIH0KKworICAgICMgT3RoZXJ3aXNlIG91dHB1dCB0aGUgc2F2ZWQgYmxhbmtzLCB0aGUgY3VycmVudCwgYW5kIHRoZSBuZXh0IHRocmVlCisgICAgIyBsaW5lcy4gUmVtZW1iZXIgdGhlIGxhc3QgcHJpbnRlZCBsaW5lLgorCisgICAgZWxzZQorICAgICAgeworICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGJsYW5rY291bnQ7ICRpKyspIHsgcHJpbnQgIlxuIjsgfQorICAgICAgcHJpbnQ7CisgICAgICBmb3IgKCRpID0gMDsgJGkgPCAzOyAkaSsrKQorICAgICAgICB7CisgICAgICAgICRuZXh0WyRpXSA9fiBzLy5ceDgvL2c7CisgICAgICAgIHByaW50ICRuZXh0WyRpXTsKKyAgICAgICAgJGxhc3RwcmludGVkID0gJF87CisgICAgICAgIH0KKyAgICAgICRsYXN0d2FzY3V0ID0gMDsKKyAgICAgICRibGFua2NvdW50ID0gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgIyBUaGlzIG5vbi1ibGFuayBsaW5lIGlzIG5vdCBwcmVjZWRlZCBieSAzIG9yIG1vcmUgYmxhbmsgbGluZXMuIE91dHB1dAorICAjIGFueSBibGFua3MgdGhlcmUgYXJlLCBhbmQgdGhlIGxpbmUuIFJlbWVtYmVyIGl0LiBGb3JjZSB0d28gYmxhbmsgbGluZXMKKyAgIyBiZWZvcmUgaGVhZGluZ3MuCisKKyAgZWxzZQorICAgIHsKKyAgICAkYmxhbmtjb3VudCA9IDIgaWYgL15cUy8gJiYgIS9eTGFzdCB1cGRhdGVkLyAmJiAhL15Db3B5cmlnaHQvICYmCisgICAgICBkZWZpbmVkKCRsYXN0cHJpbnRlZCk7CisgICAgZm9yICgkaSA9IDA7ICRpIDwgJGJsYW5rY291bnQ7ICRpKyspIHsgcHJpbnQgIlxuIjsgfQorICAgIHByaW50OworICAgICRsYXN0cHJpbnRlZCA9ICRfOworICAgICRsYXN0d2FzY3V0ID0gMDsKKyAgICAkYmxhbmtjb3VudCA9IDA7CisgICAgfQorICB9CisKKyMgRW5kCmRpZmYgLS1naXQgYS9kaXN0Mi9EZXRyYWlsIGIvZGlzdDIvRGV0cmFpbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xYzVjN2U5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvRGV0cmFpbApAQCAtMCwwICsxLDM1IEBACisjIS91c3IvYmluL3BlcmwKKworIyBUaGlzIGlzIGEgc2NyaXB0IGZvciByZW1vdmluZyB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gbGluZXMgaW4gZmlsZXMgdGhhdAorIyBhcmUgbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUuCisKKyMgVGhpcyBzdWJyb3V0aW5lIGRvZXMgdGhlIHdvcmsgZm9yIG9uZSBmaWxlLgorCitzdWIgZGV0cmFpbCB7CitteSgkZmlsZSkgPSAkX1swXTsKK215KCRjaGFuZ2VkKSA9IDA7CitvcGVuKElOLCAiJGZpbGUiKSB8fCBkaWUgIkNhbid0IG9wZW4gJGZpbGUgZm9yIGlucHV0IjsKK0BsaW5lcyA9IDxJTj47CitjbG9zZShJTik7Citmb3JlYWNoIChAbGluZXMpCisgIHsKKyAgaWYgKC9ccytcbiQvKQorICAgIHsKKyAgICBzL1xzK1xuJC9cbi87CisgICAgJGNoYW5nZWQgPSAxOworICAgIH0KKyAgfQoraWYgKCRjaGFuZ2VkKQorICB7CisgIG9wZW4oT1VULCAiPiRmaWxlIikgfHwgZGllICJDYW4ndCBvcGVuICRmaWxlIGZvciBvdXRwdXQiOworICBwcmludCBPVVQgQGxpbmVzOworICBjbG9zZShPVVQpOworICB9Cit9CisKKyMgVGhpcyBpcyB0aGUgbWFpbiBwcm9ncmFtCisKKyQsID0gIiI7ICAgIyBPdXRwdXQgZmllbGQgc2VwYXJhdG9yCitmb3IgKCRpID0gMDsgJGkgPCBAQVJHVjsgJGkrKykgeyAmZGV0cmFpbCgkQVJHVlskaV0pOyB9CisKKyMgRW5kCmRpZmYgLS1naXQgYS9kaXN0Mi9IQUNLSU5HIGIvZGlzdDIvSEFDS0lORwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTE1MjBjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvSEFDS0lORwpAQCAtMCwwICsxLDYwNCBAQAorVGVjaG5pY2FsIE5vdGVzIGFib3V0IFBDUkUyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlc2UgYXJlIHZlcnkgcm91Z2ggdGVjaG5pY2FsIG5vdGVzIHRoYXQgcmVjb3JkIHBvdGVudGlhbGx5IHVzZWZ1bCBpbmZvcm1hdGlvbgorYWJvdXQgUENSRTIgaW50ZXJuYWxzLiBQQ1JFMiBpcyBhIGxpYnJhcnkgYmFzZWQgb24gdGhlIG9yaWdpbmFsIFBDUkUgbGlicmFyeSwKK2J1dCB3aXRoIGEgcmV2aXNlZCAoYW5kIGluY29tcGF0aWJsZSkgQVBJLiBUbyBhdm9pZCBjb25mdXNpb24sIHRoZSBvcmlnaW5hbAorbGlicmFyeSBpcyByZWZlcnJlZCB0byBhcyBQQ1JFMSBiZWxvdy4gRm9yIGluZm9ybWF0aW9uIGFib3V0IHRlc3RpbmcgUENSRTIsIHNlZQordGhlIHBjcmUydGVzdCBkb2N1bWVudGF0aW9uIGFuZCB0aGUgY29tbWVudCBhdCB0aGUgaGVhZCBvZiB0aGUgUnVuVGVzdCBmaWxlLgorCitQQ1JFMSByZWxlYXNlcyB3ZXJlIHVwIHRvIDguM3ggd2hlbiBQQ1JFMiB3YXMgZGV2ZWxvcGVkLiBUaGUgOC54eCBzZXJpZXMgd2lsbAorY29udGludWUgZm9yIGJ1Z2ZpeGVzIGlmIG5lY2Vzc2FyeS4gUENSRTIgcmVsZWFzZXMgc3RhcnRlZCBhdCAxMC4wMCB0byBhdm9pZAorY29uZnVzaW9uIHdpdGggUENSRTEuCisKKworSGlzdG9yaWNhbCBub3RlIDEKKy0tLS0tLS0tLS0tLS0tLS0tCisKK01hbnkgeWVhcnMgYWdvIEkgaW1wbGVtZW50ZWQgc29tZSByZWd1bGFyIGV4cHJlc3Npb24gZnVuY3Rpb25zIHRvIGFuIGFsZ29yaXRobQorc3VnZ2VzdGVkIGJ5IE1hcnRpbiBSaWNoYXJkcy4gVGhlc2Ugd2VyZSBub3QgVW5peC1saWtlIGluIGZvcm0sIGFuZCB3ZXJlIHF1aXRlCityZXN0cmljdGVkIGluIHdoYXQgdGhleSBjb3VsZCBkbyBieSBjb21wYXJpc29uIHdpdGggUGVybC4gVGhlIGludGVyZXN0aW5nIHBhcnQKK2Fib3V0IHRoZSBhbGdvcml0aG0gd2FzIHRoYXQgdGhlIGFtb3VudCBvZiBzcGFjZSByZXF1aXJlZCB0byBob2xkIHRoZSBjb21waWxlZAorZm9ybSBvZiBhbiBleHByZXNzaW9uIHdhcyBrbm93biBpbiBhZHZhbmNlLiBUaGUgY29kZSB0byBhcHBseSBhbiBleHByZXNzaW9uIGRpZAorbm90IG9wZXJhdGUgYnkgYmFja3RyYWNraW5nLCBhcyB0aGUgb3JpZ2luYWwgSGVucnkgU3BlbmNlciBjb2RlIGFuZCBjdXJyZW50CitQQ1JFMiBhbmQgUGVybCBjb2RlIGRvZXMsIGJ1dCBpbnN0ZWFkIGNoZWNrZWQgYWxsIHBvc3NpYmlsaXRpZXMgc2ltdWx0YW5lb3VzbHkKK2J5IGtlZXBpbmcgYSBsaXN0IG9mIGN1cnJlbnQgc3RhdGVzIGFuZCBjaGVja2luZyBhbGwgb2YgdGhlbSBhcyBpdCBhZHZhbmNlZAordGhyb3VnaCB0aGUgc3ViamVjdCBzdHJpbmcuIEluIHRoZSB0ZXJtaW5vbG9neSBvZiBKZWZmcmV5IEZyaWVkbCdzIGJvb2ssIGl0IHdhcworYSAiREZBIGFsZ29yaXRobSIsIHRob3VnaCBpdCB3YXMgbm90IGEgdHJhZGl0aW9uYWwgRmluaXRlIFN0YXRlIE1hY2hpbmUgKEZTTSkuCitXaGVuIHRoZSBwYXR0ZXJuIHdhcyBhbGwgdXNlZCB1cCwgYWxsIHJlbWFpbmluZyBzdGF0ZXMgd2VyZSBwb3NzaWJsZSBtYXRjaGVzLAorYW5kIHRoZSBvbmUgbWF0Y2hpbmcgdGhlIGxvbmdlc3Qgc3Vic2V0IG9mIHRoZSBzdWJqZWN0IHN0cmluZyB3YXMgY2hvc2VuLiBUaGlzCitkaWQgbm90IG5lY2Vzc2FyaWx5IG1heGltaXplIHRoZSBpbmRpdmlkdWFsIHdpbGQgcG9ydGlvbnMgb2YgdGhlIHBhdHRlcm4sIGFzIGlzCitleHBlY3RlZCBpbiBVbml4IGFuZCBQZXJsLXN0eWxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisKKworSGlzdG9yaWNhbCBub3RlIDIKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0J5IGNvbnRyYXN0LCB0aGUgY29kZSBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgSGVucnkgU3BlbmNlciAod2hpY2ggd2FzCitzdWJzZXF1ZW50bHkgaGVhdmlseSBtb2RpZmllZCBmb3IgUGVybCkgY29tcGlsZXMgdGhlIGV4cHJlc3Npb24gdHdpY2U6IG9uY2UgaW4KK2EgZHVtbXkgbW9kZSBpbiBvcmRlciB0byBmaW5kIG91dCBob3cgbXVjaCBzdG9yZSB3aWxsIGJlIG5lZWRlZCwgYW5kIHRoZW4gZm9yCityZWFsLiAoVGhlIFBlcmwgdmVyc2lvbiBwcm9iYWJseSBkb2Vzbid0IGRvIHRoaXMgYW55IG1vcmU7IEknbSB0YWxraW5nIGFib3V0Cit0aGUgb3JpZ2luYWwgbGlicmFyeS4pIFRoZSBleGVjdXRpb24gZnVuY3Rpb24gb3BlcmF0ZXMgYnkgYmFja3RyYWNraW5nIGFuZAorbWF4aW1pemluZyAob3IsIG9wdGlvbmFsbHksIG1pbmltaXppbmcsIGluIFBlcmwpIHRoZSBhbW91bnQgb2YgdGhlIHN1YmplY3QgdGhhdAorbWF0Y2hlcyBpbmRpdmlkdWFsIHdpbGQgcG9ydGlvbnMgb2YgdGhlIHBhdHRlcm4uIFRoaXMgaXMgYW4gIk5GQSBhbGdvcml0aG0iIGluCitGcmllZGwncyB0ZXJtaW5vbG9neS4KKworCitPSywgaGVyZSdzIHRoZSByZWFsIHN0dWZmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciB0aGUgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGZvcm1lZCB0aGUgb3JpZ2luYWwgUENSRTEgbGlicmFyeSAod2hpY2ggYXJlCit1bnJlbGF0ZWQgdG8gdGhvc2UgbWVudGlvbmVkIGFib3ZlKSwgSSB0cmllZCBhdCBmaXJzdCB0byBpbnZlbnQgYW4gYWxnb3JpdGhtCit0aGF0IHVzZWQgYW4gYW1vdW50IG9mIHN0b3JlIGJvdW5kZWQgYnkgYSBtdWx0aXBsZSBvZiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKK2luIHRoZSBwYXR0ZXJuLCB0byBzYXZlIG9uIGNvbXBpbGluZyB0aW1lLiBIb3dldmVyLCBiZWNhdXNlIG9mIHRoZSBncmVhdGVyCitjb21wbGV4aXR5IGluIFBlcmwgcmVndWxhciBleHByZXNzaW9ucywgSSBjb3VsZG4ndCBkbyB0aGlzLiBJbiBhbnkgY2FzZSwgYQorZmlyc3QgcGFzcyB0aHJvdWdoIHRoZSBwYXR0ZXJuIGlzIGhlbHBmdWwgZm9yIG90aGVyIHJlYXNvbnMuCisKKworU3VwcG9ydCBmb3IgMTYtYml0IGFuZCAzMi1iaXQgZGF0YSBzdHJpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBsaWJyYXJ5IGNhbiBiZSBjb21waWxlZCBpbiBhbnkgY29tYmluYXRpb24gb2YgOC1iaXQsIDE2LWJpdCBvciAzMi1iaXQKK21vZGVzLCBjcmVhdGluZyB1cCB0byB0aHJlZSBkaWZmZXJlbnQgbGlicmFyaWVzLiBJbiB0aGUgZGVzY3JpcHRpb24gdGhhdAorZm9sbG93cywgdGhlIHdvcmQgInNob3J0IiBpcyB1c2VkIGZvciBhIDE2LWJpdCBkYXRhIHF1YW50aXR5LCBhbmQgdGhlIHBocmFzZQorImNvZGUgdW5pdCIgaXMgdXNlZCBmb3IgYSBxdWFudGl0eSB0aGF0IGlzIGEgYnl0ZSBpbiA4LWJpdCBtb2RlLCBhIHNob3J0IGluCisxNi1iaXQgbW9kZSBhbmQgYSAzMi1iaXQgd29yZCBpbiAzMi1iaXQgbW9kZS4gVGhlIG5hbWVzIG9mIFBDUkUyIGZ1bmN0aW9ucyBhcmUKK2dpdmVuIGluIGdlbmVyaWMgZm9ybSwgd2l0aG91dCB0aGUgXzgsIF8xNiwgb3IgXzMyIHN1ZmZpeC4KKworCitDb21wdXRpbmcgdGhlIG1lbW9yeSByZXF1aXJlbWVudDogaG93IGl0IHdhcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVXAgdG8gYW5kIGluY2x1ZGluZyByZWxlYXNlIDYuNywgUENSRTEgd29ya2VkIGJ5IHJ1bm5pbmcgYSB2ZXJ5IGRlZ2VuZXJhdGUKK2ZpcnN0IHBhc3MgdG8gY2FsY3VsYXRlIGEgbWF4aW11bSBtZW1vcnkgcmVxdWlyZW1lbnQsIGFuZCB0aGVuIGEgc2Vjb25kIHBhc3MgdG8KK2RvIHRoZSByZWFsIGNvbXBpbGUgLSB3aGljaCBtaWdodCB1c2UgYSBiaXQgbGVzcyB0aGFuIHRoZSBwcmVkaWN0ZWQgYW1vdW50IG9mCittZW1vcnkuIFRoZSBpZGVhIHdhcyB0aGF0IHRoaXMgd291bGQgdHVybiBvdXQgZmFzdGVyIHRoYW4gdGhlIEhlbnJ5IFNwZW5jZXIKK2NvZGUgYmVjYXVzZSB0aGUgZmlyc3QgcGFzcyBpcyBkZWdlbmVyYXRlIGFuZCB0aGUgc2Vjb25kIHBhc3MgY2FuIGp1c3Qgc3RvcmUKK3N0dWZmIHN0cmFpZ2h0IGludG8gbWVtb3J5LCB3aGljaCBpdCBrbm93cyBpcyBiaWcgZW5vdWdoLgorCisKK0NvbXB1dGluZyB0aGUgbWVtb3J5IHJlcXVpcmVtZW50OiBob3cgaXQgaXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnkgdGhlIHRpbWUgSSB3YXMgd29ya2luZyBvbiBhIHBvdGVudGlhbCA2LjggcmVsZWFzZSwgdGhlIGRlZ2VuZXJhdGUgZmlyc3QgcGFzcworaGFkIGJlY29tZSB2ZXJ5IGNvbXBsaWNhdGVkIGFuZCBoYXJkIHRvIG1haW50YWluLiBJbmRlZWQgb25lIG9mIHRoZSBlYXJseQordGhpbmdzIEkgZGlkIGZvciA2Ljggd2FzIHRvIGZpeCBZZXQgQW5vdGhlciBCdWcgaW4gdGhlIG1lbW9yeSBjb21wdXRhdGlvbi4gVGhlbgorSSBoYWQgYSBmbGFzaCBvZiBpbnNwaXJhdGlvbiBhcyB0byBob3cgSSBjb3VsZCBydW4gdGhlIHJlYWwgY29tcGlsZSBmdW5jdGlvbiBpbgorYSAiZmFrZSIgbW9kZSB0aGF0IGVuYWJsZXMgaXQgdG8gY29tcHV0ZSBob3cgbXVjaCBtZW1vcnkgaXQgd291bGQgbmVlZCwgd2hpbGUKK2FjdHVhbGx5IG9ubHkgZXZlciB1c2luZyBhIGZldyBodW5kcmVkIGJ5dGVzIG9mIHdvcmtpbmcgbWVtb3J5LCBhbmQgd2l0aG91dCB0b28KK21hbnkgdGVzdHMgb2YgdGhlIG1vZGUgdGhhdCBtaWdodCBzbG93IGl0IGRvd24uIFNvIEkgcmVmYWN0b3JlZCB0aGUgY29tcGlsaW5nCitmdW5jdGlvbnMgdG8gd29yayB0aGlzIHdheS4gVGhpcyBnb3QgcmlkIG9mIGFib3V0IDYwMCBsaW5lcyBvZiBzb3VyY2UuIEl0CitzaG91bGQgbWFrZSBmdXR1cmUgbWFpbnRlbmFuY2UgYW5kIGRldmVsb3BtZW50IGVhc2llci4gQXMgdGhpcyB3YXMgc3VjaCBhIG1ham9yCitjaGFuZ2UsIEkgbmV2ZXIgcmVsZWFzZWQgNi44LCBpbnN0ZWFkIHVwcGluZyB0aGUgbnVtYmVyIHRvIDcuMCAob3RoZXIgcXVpdGUKK21ham9yIGNoYW5nZXMgd2VyZSBhbHNvIHByZXNlbnQgaW4gdGhlIDcuMCByZWxlYXNlKS4KKworQSBzaWRlIGVmZmVjdCBvZiB0aGlzIHdvcmsgd2FzIHRoYXQgdGhlIHByZXZpb3VzIGxpbWl0IG9mIDIwMCBvbiB0aGUgbmVzdGluZworZGVwdGggb2YgcGFyZW50aGVzZXMgd2FzIHJlbW92ZWQuIEhvd2V2ZXIsIHRoZXJlIHdhcyBhIGRvd25zaWRlOiBjb21waWxpbmcgcmFuCittb3JlIHNsb3dseSB0aGFuIGJlZm9yZSAoMzAlIG9yIG1vcmUsIGRlcGVuZGluZyBvbiB0aGUgcGF0dGVybikgYmVjYXVzZSBpdCBub3cKK2RpZCBhIGZ1bGwgYW5hbHlzaXMgb2YgdGhlIHBhdHRlcm4uIE15IGhvcGUgd2FzIHRoYXQgdGhpcyB3b3VsZCBub3QgYmUgYSBiaWcKK2lzc3VlLCBhbmQgaW4gdGhlIGV2ZW50LCBub2JvZHkgaGFzIGNvbW1lbnRlZCBvbiBpdC4KKworQXQgcmVsZWFzZSA4LjM0LCBhIGxpbWl0IG9uIHRoZSBuZXN0aW5nIGRlcHRoIG9mIHBhcmVudGhlc2VzIHdhcyByZS1pbnRyb2R1Y2VkCisoZGVmYXVsdCAyNTAsIHNldHRhYmxlIGF0IGJ1aWxkIHRpbWUpIHNvIGFzIHRvIHB1dCBhIGxpbWl0IG9uIHRoZSBhbW91bnQgb2YKK3N5c3RlbSBzdGFjayB1c2VkIGJ5IHRoZSBjb21waWxlIGZ1bmN0aW9uLCB3aGljaCB1c2VzIHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscworZm9yIG5lc3RlZCBwYXJlbnRoZXNpemVkIGdyb3Vwcy4gVGhpcyBpcyBhIHNhZmV0eSBmZWF0dXJlIGZvciBlbnZpcm9ubWVudHMgd2l0aAorc21hbGwgc3RhY2tzIHdoZXJlIHRoZSBwYXR0ZXJucyBhcmUgcHJvdmlkZWQgYnkgdXNlcnMuCisKK0hpc3RvcnkgcmVwZWF0ZWQgaXRzZWxmIGZvciByZWxlYXNlIDEwLjIwLiBBIG51bWJlciBvZiBidWdzIHJlbGF0aW5nIHRvIG5hbWVkIAorc3VicGF0dGVybnMgaGFkIGJlZW4gZGlzY292ZXJlZCBieSBmdXp6ZXJzLiBNb3N0IG9mIHRoZXNlIHdlcmUgcmVsYXRlZCB0byB0aGUgCitoYW5kbGluZyBvZiBmb3J3YXJkIHJlZmVyZW5jZXMgd2hlbiBpdCB3YXMgbm90IGtub3duIGlmIHRoZSBuYW1lZCBwYXR0ZXJuIHdhcwordW5pcXVlLiAoUmVmZXJlbmNlcyB0byBub24tdW5pcXVlIG5hbWVzIHVzZSBhIGRpZmZlcmVudCBvcGNvZGUgYW5kIG1vcmUKK21lbW9yeS4pIFRoZSB1c2Ugb2YgZHVwbGljYXRlIGdyb3VwIG51bWJlcnMgKHRoZSAoP3wgZmFjaWxpdHkpIGFsc28gY2F1c2VkCitpc3N1ZXMuIAorCitUbyBnZXQgYXJvdW5kIHRoZXNlIHByb2JsZW1zIEkgYWRvcHRlZCBhIG5ldyBhcHByb2FjaCBieSBhZGRpbmcgYSB0aGlyZCBwYXNzLAorcmVhbGx5IGEgInByZS1wYXNzIiwgb3ZlciB0aGUgcGF0dGVybiwgd2hpY2ggZG9lcyBub3RoaW5nIG90aGVyIHRoYW4gaWRlbnRpZnkKK2FsbCB0aGUgbmFtZWQgc3VicGF0dGVybnMgYW5kIHRoZWlyIGNvcnJlc3BvbmRpbmcgZ3JvdXAgbnVtYmVycy4gVGhpcyBtZWFucyAKK3RoYXQgdGhlIGFjdHVhbCBjb21waWxlIChib3RoIHByZS1wYXNzIGFuZCByZWFsIGNvbXBpbGUpIGhhdmUgZnVsbCBrbm93bGVkZ2Ugb2YgCitncm91cCBuYW1lcyBhbmQgbnVtYmVycyB0aHJvdWdob3V0LiBTZXZlcmFsIGRvemVuIGxpbmVzIG9mIG1lc3N5IGNvZGUgd2VyZSAKK2VsaW1pbmF0ZWQsIHRob3VnaCB0aGUgbmV3IHByZS1wYXNzIGlzIG5vdCBzaG9ydCAoc2tpcHBpbmcgb3ZlciBbXSBjbGFzc2VzIGlzIAorY29tcGxpY2F0ZWQpLgorCisKK1RyYWRpdGlvbmFsIG1hdGNoaW5nIGZ1bmN0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgInRyYWRpdGlvbmFsIiwgYW5kIG9yaWdpbmFsLCBtYXRjaGluZyBmdW5jdGlvbiBpcyBjYWxsZWQgcGNyZTJfbWF0Y2goKSwgYW5kCitpdCBpbXBsZW1lbnRzIGFuIE5GQSBhbGdvcml0aG0sIHNpbWlsYXIgdG8gdGhlIG9yaWdpbmFsIEhlbnJ5IFNwZW5jZXIgYWxnb3JpdGhtCithbmQgdGhlIHdheSB0aGF0IFBlcmwgd29ya3MuIFRoaXMgaXMgbm90IHN1cnByaXNpbmcsIHNpbmNlIGl0IGlzIGludGVuZGVkIHRvIGJlCithcyBjb21wYXRpYmxlIHdpdGggUGVybCBhcyBwb3NzaWJsZS4gVGhpcyBpcyB0aGUgZnVuY3Rpb24gbW9zdCB1c2VycyBvZiBQQ1JFMgord2lsbCB1c2UgbW9zdCBvZiB0aGUgdGltZS4gSWYgUENSRTIgaXMgY29tcGlsZWQgd2l0aCBqdXN0LWluLXRpbWUgKEpJVCkKK3N1cHBvcnQsIGFuZCBzdHVkeWluZyBhIGNvbXBpbGVkIHBhdHRlcm4gd2l0aCBKSVQgaXMgc3VjY2Vzc2Z1bCwgdGhlIEpJVCBjb2RlCitpcyBydW4gaW5zdGVhZCBvZiB0aGUgbm9ybWFsIHBjcmUyX21hdGNoKCkgY29kZSwgYnV0IHRoZSByZXN1bHQgaXMgdGhlIHNhbWUuCisKKworU3VwcGxlbWVudGFyeSBtYXRjaGluZyBmdW5jdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBhbHNvIGEgc3VwcGxlbWVudGFyeSBtYXRjaGluZyBmdW5jdGlvbiBjYWxsZWQgcGNyZTJfZGZhX21hdGNoKCkuIFRoaXMKK2ltcGxlbWVudHMgYSBERkEgbWF0Y2hpbmcgYWxnb3JpdGhtIHRoYXQgc2VhcmNoZXMgc2ltdWx0YW5lb3VzbHkgZm9yIGFsbAorcG9zc2libGUgbWF0Y2hlcyB0aGF0IHN0YXJ0IGF0IG9uZSBwb2ludCBpbiB0aGUgc3ViamVjdCBzdHJpbmcuIChHb2luZyBiYWNrIHRvCitteSByb290czogc2VlIEhpc3RvcmljYWwgTm90ZSAxIGFib3ZlLikgVGhpcyBmdW5jdGlvbiBpbnRyZXByZXRzIHRoZSBzYW1lCitjb21waWxlZCBwYXR0ZXJuIGRhdGEgYXMgcGNyZTJfbWF0Y2goKTsgaG93ZXZlciwgbm90IGFsbCB0aGUgZmFjaWxpdGllcyBhcmUKK2F2YWlsYWJsZSwgYW5kIHRob3NlIHRoYXQgYXJlIGRvIG5vdCBhbHdheXMgd29yayBpbiBxdWl0ZSB0aGUgc2FtZSB3YXkuIFNlZSB0aGUKK3VzZXIgZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKworVGhlIGFsZ29yaXRobSB0aGF0IGlzIHVzZWQgZm9yIHBjcmUyX2RmYV9tYXRjaCgpIGlzIG5vdCBhIHRyYWRpdGlvbmFsIEZTTSwKK2JlY2F1c2UgaXQgbWF5IGhhdmUgYSBudW1iZXIgb2Ygc3RhdGVzIGFjdGl2ZSBhdCBvbmUgdGltZS4gTW9yZSB3b3JrIHdvdWxkIGJlCituZWVkZWQgYXQgY29tcGlsZSB0aW1lIHRvIHByb2R1Y2UgYSB0cmFkaXRpb25hbCBGU00gd2hlcmUgb25seSBvbmUgc3RhdGUgaXMKK2V2ZXIgYWN0aXZlIGF0IG9uY2UuIEkgYmVsaWV2ZSBzb21lIG90aGVyIHJlZ2V4IG1hdGNoZXJzIHdvcmsgdGhpcyB3YXkuIEpJVAorc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGtpbmQgb2YgbWF0Y2hpbmcuCisKKworQ2hhbmdlYWJsZSBvcHRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIC9pLCAvbSwgb3IgL3Mgb3B0aW9ucyAoUENSRTJfQ0FTRUxFU1MsIFBDUkUyX01VTFRJTElORSwgUENSRTJfRE9UQUxMLCBhbmQKK3NvbWUgb3RoZXJzKSBtYXkgY2hhbmdlIGluIHRoZSBtaWRkbGUgb2YgcGF0dGVybnMuIFRoZWlyIHByb2Nlc3NpbmcgaXMgaGFuZGxlZAorZW50aXJlbHkgYXQgY29tcGlsZSB0aW1lIGJ5IGdlbmVyYXRpbmcgZGlmZmVyZW50IG9wY29kZXMgZm9yIHRoZSBkaWZmZXJlbnQKK3NldHRpbmdzLiBUaGUgcnVudGltZSBmdW5jdGlvbnMgZG8gbm90IG5lZWQgdG8ga2VlcCB0cmFjayBvZiBhbiBvcHRpb25zIHN0YXRlLgorCisKK0Zvcm1hdCBvZiBjb21waWxlZCBwYXR0ZXJucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb21waWxlZCBmb3JtIG9mIGEgcGF0dGVybiBpcyBhIHZlY3RvciBvZiB1bnNpZ25lZCBjb2RlIHVuaXRzIChieXRlcyBpbgorOC1iaXQgbW9kZSwgc2hvcnRzIGluIDE2LWJpdCBtb2RlLCAzMi1iaXQgd29yZHMgaW4gMzItYml0IG1vZGUpLCBjb250YWluaW5nCitpdGVtcyBvZiB2YXJpYWJsZSBsZW5ndGguIFRoZSBmaXJzdCBjb2RlIHVuaXQgaW4gYW4gaXRlbSBjb250YWlucyBhbiBvcGNvZGUsCithbmQgdGhlIGxlbmd0aCBvZiB0aGUgaXRlbSBpcyBlaXRoZXIgaW1wbGljaXQgaW4gdGhlIG9wY29kZSBvciBjb250YWluZWQgaW4gdGhlCitkYXRhIHRoYXQgZm9sbG93cyBpdC4KKworSW4gbWFueSBjYXNlcyBsaXN0ZWQgYmVsb3csIExJTktfU0laRSBkYXRhIHZhbHVlcyBhcmUgc3BlY2lmaWVkIGZvciBvZmZzZXRzCit3aXRoaW4gdGhlIGNvbXBpbGVkIHBhdHRlcm4uIExJTktfU0laRSBhbHdheXMgc3BlY2lmaWVzIGEgbnVtYmVyIG9mIGJ5dGVzLiBUaGUKK2RlZmF1bHQgdmFsdWUgZm9yIExJTktfU0laRSBpcyAyLCBleGNlcHQgZm9yIHRoZSAzMi1iaXQgbGlicmFyeSwgd2hlcmUgaXQgY2FuCitvbmx5IGJlIDQuIFRoZSA4LWJpdCBsaWJyYXJ5IGNhbiBiZSBjb21waWxlZCB0byB1c2VkIDMtYnl0ZSBvciA0LWJ5dGUgdmFsdWVzLAorYW5kIHRoZSAxNi1iaXQgbGlicmFyeSBjYW4gYmUgY29tcGlsZWQgdG8gdXNlIDQtYnl0ZSB2YWx1ZXMsIHRob3VnaCB0aGlzCitpbXBhaXJzIHBlcmZvcm1hbmNlLiBTcGVjaWZpbmcgYSBMSU5LX1NJWkUgbGFyZ2VyIHRoYW4gMiBmb3IgdGhlc2UgbGlicmFyaWVzIGlzCituZWNlc3Nhcnkgb25seSB3aGVuIHBhdHRlcm5zIHdob3NlIGNvbXBpbGVkIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gNjRLIGNvZGUKK3VuaXRzIGFyZSBnb2luZyB0byBiZSBwcm9jZXNzZWQuIFdoZW4gYSBMSU5LX1NJWkUgdmFsdWUgdXNlcyBtb3JlIHRoYW4gb25lIGNvZGUKK3VuaXQsIHRoZSBtb3N0IHNpZ25pZmljYW50IHVuaXQgaXMgZmlyc3QuCisKK0luIHRoaXMgZGVzY3JpcHRpb24sIHdlIGFzc3VtZSB0aGUgIm5vcm1hbCIgY29tcGlsYXRpb24gb3B0aW9ucy4gRGF0YSB2YWx1ZXMKK3RoYXQgYXJlIGNvdW50cyAoZS5nLiBxdWFudGlmaWVycykgYXJlIGFsd2F5cyB0d28gYnl0ZXMgbG9uZyBpbiA4LWJpdCBtb2RlCisobW9zdCBzaWduaWZpY2FudCBieXRlIGZpcnN0KSwgb3Igb25lIGNvZGUgdW5pdCBpbiAxNi1iaXQgYW5kIDMyLWJpdCBtb2Rlcy4KKworCitPcGNvZGVzIHdpdGggbm8gZm9sbG93aW5nIGRhdGEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBpdGVtcyBhcmUgYWxsIGp1c3Qgb25lIHVuaXQgbG9uZworCisgIE9QX0VORCAgICAgICAgICAgICAgICAgZW5kIG9mIHBhdHRlcm4KKyAgT1BfQU5ZICAgICAgICAgICAgICAgICBtYXRjaCBhbnkgb25lIGNoYXJhY3RlciBvdGhlciB0aGFuIG5ld2xpbmUKKyAgT1BfQUxMQU5ZICAgICAgICAgICAgICBtYXRjaCBhbnkgb25lIGNoYXJhY3RlciwgaW5jbHVkaW5nIG5ld2xpbmUKKyAgT1BfQU5ZQllURSAgICAgICAgICAgICBtYXRjaCBhbnkgc2luZ2xlIGNvZGUgdW5pdCwgZXZlbiBpbiBVVEYtOC8xNiBtb2RlCisgIE9QX1NPRCAgICAgICAgICAgICAgICAgbWF0Y2ggc3RhcnQgb2YgZGF0YTogXEEKKyAgT1BfU09NLCAgICAgICAgICAgICAgICBzdGFydCBvZiBtYXRjaCAoc3ViamVjdCArIG9mZnNldCk6IFxHCisgIE9QX1NFVF9TT00sICAgICAgICAgICAgc2V0IHN0YXJ0IG9mIG1hdGNoIChcSykKKyAgT1BfQ0lSQyAgICAgICAgICAgICAgICBeIChzdGFydCBvZiBkYXRhKQorICBPUF9DSVJDTSAgICAgICAgICAgICAgIF4gbXVsdGlsaW5lIG1vZGUgKHN0YXJ0IG9mIGRhdGEgb3IgYWZ0ZXIgbmV3bGluZSkKKyAgT1BfTk9UX1dPUkRfQk9VTkRBUlkgICBcVworICBPUF9XT1JEX0JPVU5EQVJZICAgICAgIFx3CisgIE9QX05PVF9ESUdJVCAgICAgICAgICAgXEQKKyAgT1BfRElHSVQgICAgICAgICAgICAgICBcZAorICBPUF9OT1RfSFNQQUNFICAgICAgICAgIFxICisgIE9QX0hTUEFDRSAgICAgICAgICAgICAgXGgKKyAgT1BfTk9UX1dISVRFU1BBQ0UgICAgICBcUworICBPUF9XSElURVNQQUNFICAgICAgICAgIFxzCisgIE9QX05PVF9WU1BBQ0UgICAgICAgICAgXFYKKyAgT1BfVlNQQUNFICAgICAgICAgICAgICBcdgorICBPUF9OT1RfV09SRENIQVIgICAgICAgIFxXCisgIE9QX1dPUkRDSEFSICAgICAgICAgICAgXHcKKyAgT1BfRU9ETiAgICAgICAgICAgICAgICBtYXRjaCBlbmQgb2YgZGF0YSBvciBuZXdsaW5lIGF0IGVuZDogXFoKKyAgT1BfRU9EICAgICAgICAgICAgICAgICBtYXRjaCBlbmQgb2YgZGF0YTogXHoKKyAgT1BfRE9MTCAgICAgICAgICAgICAgICAkIChlbmQgb2YgZGF0YSwgb3IgYmVmb3JlIGZpbmFsIG5ld2xpbmUpCisgIE9QX0RPTExNICAgICAgICAgICAgICAgJCBtdWx0aWxpbmUgbW9kZSAoZW5kIG9mIGRhdGEgb3IgYmVmb3JlIG5ld2xpbmUpCisgIE9QX0VYVFVOSSAgICAgICAgICAgICAgbWF0Y2ggYW4gZXh0ZW5kZWQgVW5pY29kZSBncmFwaGVtZSBjbHVzdGVyCisgIE9QX0FOWU5MICAgICAgICAgICAgICAgbWF0Y2ggYW55IFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZQorCisgIE9QX0FTU0VSVF9BQ0NFUFQgICAgICAgKQorICBPUF9BQ0NFUFQgICAgICAgICAgICAgICkgVGhlc2UgYXJlIFBlcmwgNS4xMCdzICJiYWNrdHJhY2tpbmcgY29udHJvbAorICBPUF9DT01NSVQgICAgICAgICAgICAgICkgdmVyYnMiLiBJZiBPUF9BQ0NFUFQgaXMgaW5zaWRlIGNhcHR1cmluZworICBPUF9GQUlMICAgICAgICAgICAgICAgICkgcGFyZW50aGVzZXMsIGl0IG1heSBiZSBwcmVjZWRlZCBieSBvbmUgb3IgbW9yZQorICBPUF9QUlVORSAgICAgICAgICAgICAgICkgT1BfQ0xPU0UsIGVhY2ggZm9sbG93ZWQgYnkgYSBjb3VudCB0aGF0CisgIE9QX1NLSVAgICAgICAgICAgICAgICAgKSBpbmRpY2F0ZXMgd2hpY2ggcGFyZW50aGVzZXMgbXVzdCBiZSBjbG9zZWQuCisgIE9QX1RIRU4gICAgICAgICAgICAgICAgKQorCitPUF9BU1NFUlRfQUNDRVBUIGlzIHVzZWQgd2hlbiAoKkFDQ0VQVCkgaXMgZW5jb3VudGVyZWQgd2l0aGluIGFuIGFzc2VydGlvbi4KK1RoaXMgZW5kcyB0aGUgYXNzZXJ0aW9uLCBub3QgdGhlIGVudGlyZSBwYXR0ZXJuIG1hdGNoLiBUaGUgYXNzZXJ0aW9uICg/ISkgaXMgCithbHdheXMgb3B0aW1pemVkIHRvIE9QX0ZBSUwuCisKKworQmFja3RyYWNraW5nIGNvbnRyb2wgdmVyYnMgd2l0aCBvcHRpb25hbCBkYXRhCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKCpUSEVOKSB3aXRob3V0IGFuIGFyZ3VtZW50IGdlbmVyYXRlcyB0aGUgb3Bjb2RlIE9QX1RIRU4gYW5kIG5vIGZvbGxvd2luZyBkYXRhLgorT1BfTUFSSyBpcyBmb2xsb3dlZCBieSB0aGUgbWFyayBuYW1lLCBwcmVjZWRlZCBieSBhIGxlbmd0aCBpbiBvbmUgY29kZSB1bml0LAorYW5kIGZvbGxvd2VkIGJ5IGEgYmluYXJ5IHplcm8uIEZvciAoKlBSVU5FKSwgKCpTS0lQKSwgYW5kICgqVEhFTikgd2l0aAorYXJndW1lbnRzLCB0aGUgb3Bjb2RlcyBPUF9QUlVORV9BUkcsIE9QX1NLSVBfQVJHLCBhbmQgT1BfVEhFTl9BUkcgYXJlIHVzZWQsCit3aXRoIHRoZSBuYW1lIGZvbGxvd2luZyBpbiB0aGUgc2FtZSBmb3JtYXQgYXMgT1BfTUFSSy4KKworCitNYXRjaGluZyBsaXRlcmFsIGNoYXJhY3RlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgT1BfQ0hBUiBvcGNvZGUgaXMgZm9sbG93ZWQgYnkgYSBzaW5nbGUgY2hhcmFjdGVyIHRoYXQgaXMgdG8gYmUgbWF0Y2hlZAorY2FzZWZ1bGx5LiBGb3IgY2FzZWxlc3MgbWF0Y2hpbmcsIE9QX0NIQVJJIGlzIHVzZWQuIEluIFVURi04IG9yIFVURi0xNiBtb2RlcywKK3RoZSBjaGFyYWN0ZXIgbWF5IGJlIG1vcmUgdGhhbiBvbmUgY29kZSB1bml0IGxvbmcuIEluIFVURi0zMiBtb2RlLCBjaGFyYWN0ZXJzCithcmUgYWx3YXlzIGV4YWN0bHkgb25lIGNvZGUgdW5pdCBsb25nLgorCitJZiB0aGVyZSBpcyBvbmx5IG9uZSBjaGFyYWN0ZXIgaW4gYSBjaGFyYWN0ZXIgY2xhc3MsIE9QX0NIQVIgb3IgT1BfQ0hBUkkgaXMKK3VzZWQgZm9yIGEgcG9zaXRpdmUgY2xhc3MsIGFuZCBPUF9OT1Qgb3IgT1BfTk9USSBmb3IgYSBuZWdhdGl2ZSBvbmUgKHRoYXQgaXMsCitmb3Igc29tZXRoaW5nIGxpa2UgW15hXSkuCisKKworUmVwZWF0aW5nIHNpbmdsZSBjaGFyYWN0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNvbW1vbiByZXBlYXRzICgqLCArLCA/KSwgd2hlbiBhcHBsaWVkIHRvIGEgc2luZ2xlIGNoYXJhY3RlciwgdXNlIHRoZQorZm9sbG93aW5nIG9wY29kZXMsIHdoaWNoIGNvbWUgaW4gY2FzZWZ1bCBhbmQgY2FzZWxlc3MgdmVyc2lvbnM6CisKKyAgQ2FzZWZ1bCAgICAgICAgIENhc2VsZXNzCisgIE9QX1NUQVIgICAgICAgICBPUF9TVEFSSQorICBPUF9NSU5TVEFSICAgICAgT1BfTUlOU1RBUkkKKyAgT1BfUE9TU1RBUiAgICAgIE9QX1BPU1NUQVJJCisgIE9QX1BMVVMgICAgICAgICBPUF9QTFVTSQorICBPUF9NSU5QTFVTICAgICAgT1BfTUlOUExVU0kKKyAgT1BfUE9TUExVUyAgICAgIE9QX1BPU1BMVVNJCisgIE9QX1FVRVJZICAgICAgICBPUF9RVUVSWUkKKyAgT1BfTUlOUVVFUlkgICAgIE9QX01JTlFVRVJZSQorICBPUF9QT1NRVUVSWSAgICAgT1BfUE9TUVVFUllJCisKK0VhY2ggb3Bjb2RlIGlzIGZvbGxvd2VkIGJ5IHRoZSBjaGFyYWN0ZXIgdGhhdCBpcyB0byBiZSByZXBlYXRlZC4gSW4gQVNDSUkgb3IKK1VURi0zMiBtb2RlcywgdGhlc2UgYXJlIHR3by1jb2RlLXVuaXQgaXRlbXM7IGluIFVURi04IG9yIFVURi0xNiBtb2RlcywgdGhlCitsZW5ndGggaXMgdmFyaWFibGUuIFRob3NlIHdpdGggIk1JTiIgaW4gdGhlaXIgbmFtZXMgYXJlIHRoZSBtaW5pbWl6aW5nCit2ZXJzaW9ucy4gVGhvc2Ugd2l0aCAiUE9TIiBpbiB0aGVpciBuYW1lcyBhcmUgcG9zc2Vzc2l2ZSB2ZXJzaW9ucy4gT3RoZXIga2luZHMKK29mIHJlcGVhdCBtYWtlIHVzZSBvZiB0aGVzZSBvcGNvZGVzOgorCisgIENhc2VmdWwgICAgICAgICBDYXNlbGVzcworICBPUF9VUFRPICAgICAgICAgT1BfVVBUT0kKKyAgT1BfTUlOVVBUTyAgICAgIE9QX01JTlVQVE9JCisgIE9QX1BPU1VQVE8gICAgICBPUF9QT1NVUFRPSQorICBPUF9FWEFDVCAgICAgICAgT1BfRVhBQ1RJCisKK0VhY2ggb2YgdGhlc2UgaXMgZm9sbG93ZWQgYnkgYSBjb3VudCBhbmQgdGhlbiB0aGUgcmVwZWF0ZWQgY2hhcmFjdGVyLiBUaGUgY291bnQKK2lzIHR3byBieXRlcyBsb25nIGluIDgtYml0IG1vZGUgKG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCksIG9yIG9uZSBjb2RlIHVuaXQKK2luIDE2LWJpdCBhbmQgMzItYml0IG1vZGVzLgorCitPUF9VUFRPIG1hdGNoZXMgZnJvbSAwIHRvIHRoZSBnaXZlbiBudW1iZXIuIEEgcmVwZWF0IHdpdGggYSBub24temVybyBtaW5pbXVtCithbmQgYSBmaXhlZCBtYXhpbXVtIGlzIGNvZGVkIGFzIGFuIE9QX0VYQUNUIGZvbGxvd2VkIGJ5IGFuIE9QX1VQVE8gKG9yCitPUF9NSU5VUFRPIG9yIE9QVF9QT1NVUFRPKS4KKworQW5vdGhlciBzZXQgb2YgbWF0Y2hpbmcgcmVwZWF0aW5nIG9wY29kZXMgKGNhbGxlZCBPUF9OT1RTVEFSLCBPUF9OT1RTVEFSSSwKK2V0Yy4pIGFyZSB1c2VkIGZvciByZXBlYXRlZCwgbmVnYXRlZCwgc2luZ2xlLWNoYXJhY3RlciBjbGFzc2VzIHN1Y2ggYXMgW15hXSouCitUaGUgbm9ybWFsIHNpbmdsZS1jaGFyYWN0ZXIgb3Bjb2RlcyAoT1BfU1RBUiwgZXRjLikgYXJlIHVzZWQgZm9yIHJlcGVhdGVkCitwb3NpdGl2ZSBzaW5nbGUtY2hhcmFjdGVyIGNsYXNzZXMuCisKKworUmVwZWF0aW5nIGNoYXJhY3RlciB0eXBlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZXBlYXRzIG9mIHRoaW5ncyBsaWtlIFxkIGFyZSBkb25lIGV4YWN0bHkgYXMgZm9yIHNpbmdsZSBjaGFyYWN0ZXJzLCBleGNlcHQKK3RoYXQgaW5zdGVhZCBvZiBhIGNoYXJhY3RlciwgdGhlIG9wY29kZSBmb3IgdGhlIHR5cGUgKGUuZy4gT1BfRElHSVQpIGlzIHN0b3JlZAoraW4gdGhlIG5leHQgY29kZSB1bml0LiBUaGUgb3Bjb2RlcyBhcmU6CisKKyAgT1BfVFlQRVNUQVIKKyAgT1BfVFlQRU1JTlNUQVIKKyAgT1BfVFlQRVBPU1NUQVIKKyAgT1BfVFlQRVBMVVMKKyAgT1BfVFlQRU1JTlBMVVMKKyAgT1BfVFlQRVBPU1BMVVMKKyAgT1BfVFlQRVFVRVJZCisgIE9QX1RZUEVNSU5RVUVSWQorICBPUF9UWVBFUE9TUVVFUlkKKyAgT1BfVFlQRVVQVE8KKyAgT1BfVFlQRU1JTlVQVE8KKyAgT1BfVFlQRVBPU1VQVE8KKyAgT1BfVFlQRUVYQUNUCisKKworTWF0Y2ggYnkgVW5pY29kZSBwcm9wZXJ0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPUF9QUk9QIGFuZCBPUF9OT1RQUk9QIGFyZSB1c2VkIGZvciBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWF0Y2hlcyBvZiBhCitjaGFyYWN0ZXIgYnkgdGVzdGluZyBpdHMgVW5pY29kZSBwcm9wZXJ0eSAodGhlIFxwIGFuZCBcUCBlc2NhcGUgc2VxdWVuY2VzKS4KK0VhY2ggaXMgZm9sbG93ZWQgYnkgdHdvIGNvZGUgdW5pdHMgdGhhdCBlbmNvZGUgdGhlIGRlc2lyZWQgcHJvcGVydHkgYXMgYSB0eXBlCithbmQgYSB2YWx1ZS4gVGhlIHR5cGVzIGFyZSBhIHNldCBvZiAjZGVmaW5lcyBvZiB0aGUgZm9ybSBQVF94eHgsIGFuZCB0aGUgdmFsdWVzCithcmUgZW51bWVyYXRpb25zIG9mIHRoZSBmb3JtIHVjcF94eCwgZGVmaW5lZCBpbiB0aGUgcGNyZTJfdWNwLmggc291cmNlIGZpbGUuCitUaGUgdmFsdWUgaXMgcmVsZXZhbnQgb25seSBmb3IgUFRfR0MgKEdlbmVyYWwgQ2F0ZWdvcnkpLCBQVF9QQyAoUGFydGljdWxhcgorQ2F0ZWdvcnkpLCBhbmQgUFRfU0MgKFNjcmlwdCkuCisKK1JlcGVhdHMgb2YgdGhlc2UgaXRlbXMgdXNlIHRoZSBPUF9UWVBFU1RBUiBldGMuIHNldCBvZiBvcGNvZGVzLCBmb2xsb3dlZCBieQordGhyZWUgY29kZSB1bml0czogT1BfUFJPUCBvciBPUF9OT1RQUk9QLCBhbmQgdGhlbiB0aGUgZGVzaXJlZCBwcm9wZXJ0eSB0eXBlIGFuZAordmFsdWUuCisKKworQ2hhcmFjdGVyIGNsYXNzZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIHRoZXJlIGlzIG9ubHkgb25lIGNoYXJhY3RlciBpbiBhIGNsYXNzLCBPUF9DSEFSIG9yIE9QX0NIQVJJIGlzIHVzZWQgZm9yIGEKK3Bvc2l0aXZlIGNsYXNzLCBhbmQgT1BfTk9UIG9yIE9QX05PVEkgZm9yIGEgbmVnYXRpdmUgb25lICh0aGF0IGlzLCBmb3IKK3NvbWV0aGluZyBsaWtlIFteYV0pLgorCitBIHNldCBvZiByZXBlYXRpbmcgb3Bjb2RlcyAoY2FsbGVkIE9QX05PVFNUQVIgZXRjLikgYXJlIHVzZWQgZm9yIHJlcGVhdGVkLAorbmVnYXRlZCwgc2luZ2xlLWNoYXJhY3RlciBjbGFzc2VzLiBUaGUgbm9ybWFsIHNpbmdsZS1jaGFyYWN0ZXIgb3Bjb2RlcworKE9QX1NUQVIsIGV0Yy4pIGFyZSB1c2VkIGZvciByZXBlYXRlZCBwb3NpdGl2ZSBzaW5nbGUtY2hhcmFjdGVyIGNsYXNzZXMuCisKK1doZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gYSBjbGFzcywgYW5kIGFsbCB0aGUgY29kZSBwb2ludHMgYXJlCitsZXNzIHRoYW4gMjU2LCBPUF9DTEFTUyBpcyB1c2VkIGZvciBhIHBvc2l0aXZlIGNsYXNzLCBhbmQgT1BfTkNMQVNTIGZvciBhCituZWdhdGl2ZSBvbmUuIEluIGVpdGhlciBjYXNlLCB0aGUgb3Bjb2RlIGlzIGZvbGxvd2VkIGJ5IGEgMzItYnl0ZSAoMTYtc2hvcnQsCis4LXdvcmQpIGJpdCBtYXAgY29udGFpbmluZyBhIDEgYml0IGZvciBldmVyeSBjaGFyYWN0ZXIgdGhhdCBpcyBhY2NlcHRhYmxlLiBUaGUKK2JpdHMgYXJlIGNvdW50ZWQgZnJvbSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgZW5kIG9mIGVhY2ggdW5pdC4gSW4gY2FzZWxlc3MgbW9kZSwKK2JpdHMgZm9yIGJvdGggY2FzZXMgYXJlIHNldC4KKworVGhlIHJlYXNvbiBmb3IgaGF2aW5nIGJvdGggT1BfQ0xBU1MgYW5kIE9QX05DTEFTUyBpcyBzbyB0aGF0LCBpbiBVVEYtOCBhbmQKKzE2LWJpdCBhbmQgMzItYml0IG1vZGVzLCBzdWJqZWN0IGNoYXJhY3RlcnMgd2l0aCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDI1NSBjYW4gYmUKK2hhbmRsZWQgY29ycmVjdGx5LiBGb3IgT1BfQ0xBU1MgdGhleSBkbyBub3QgbWF0Y2gsIHdoZXJlYXMgZm9yIE9QX05DTEFTUyB0aGV5Citkby4KKworRm9yIGNsYXNzZXMgY29udGFpbmluZyBjaGFyYWN0ZXJzIHdpdGggdmFsdWVzIGdyZWF0ZXIgdGhhbiAyNTUgb3IgdGhhdCBjb250YWluCitccCBvciBcUCwgT1BfWENMQVNTIGlzIHVzZWQuIEl0IG9wdGlvbmFsbHkgdXNlcyBhIGJpdCBtYXAgaWYgYW55IGFjY2VwdGFibGUKK2NvZGUgcG9pbnRzIGFyZSBsZXNzIHRoYW4gMjU2LCBmb2xsb3dlZCBieSBhIGxpc3Qgb2YgcGFpcnMgKGZvciBhIHJhbmdlKSBhbmQvb3IKK3NpbmdsZSBjaGFyYWN0ZXJzIGFuZC9vciBwcm9wZXJ0aWVzLiBJbiBjYXNlbGVzcyBtb2RlLCBib3RoIGNhc2VzIGFyZQorZXhwbGljaXRseSBsaXN0ZWQuCisKK09QX1hDTEFTUyBpcyBmb2xsb3dlZCBieSBhIExJTktfU0laRSB2YWx1ZSBjb250YWluaW5nIHRoZSB0b3RhbCBsZW5ndGggb2YgdGhlCitvcGNvZGUgYW5kIGl0cyBkYXRhLiBUaGlzIGlzIGZvbGxvd2VkIGJ5IGEgY29kZSB1bml0IGNvbnRhaW5pbmcgZmxhZyBiaXRzOgorWENMX05PVCBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIGEgbmVnYXRpdmUgY2xhc3MsIGFuZCBYQ0xfTUFQIGluZGljYXRlcyB0aGF0IGEKK2JpdCBtYXAgaXMgcHJlc2VudC4gVGhlcmUgZm9sbG93cyB0aGUgYml0IG1hcCwgaWYgWENMX01BUCBpcyBzZXQsIGFuZCB0aGVuIGEKK3NlcXVlbmNlIG9mIGl0ZW1zIGNvZGVkIGFzIGZvbGxvd3M6CisKKyAgWENMX0VORCAgICAgIG1hcmtzIHRoZSBlbmQgb2YgdGhlIGxpc3QKKyAgWENMX1NJTkdMRSAgIG9uZSBjaGFyYWN0ZXIgZm9sbG93cworICBYQ0xfUkFOR0UgICAgdHdvIGNoYXJhY3RlcnMgZm9sbG93CisgIFhDTF9QUk9QICAgICBhIFVuaWNvZGUgcHJvcGVydHkgKHR5cGUsIHZhbHVlKSBmb2xsb3dzCisgIFhDTF9OT1RQUk9QICBhIFVuaWNvZGUgcHJvcGVydHkgKHR5cGUsIHZhbHVlKSBmb2xsb3dzCisKK0lmIGEgcmFuZ2Ugc3RhcnRzIHdpdGggYSBjb2RlIHBvaW50IGxlc3MgdGhhbiAyNTYgYW5kIGVuZHMgd2l0aCBvbmUgZ3JlYXRlcgordGhhbiAyNTUsIGl0IGlzIHNwbGl0IGludG8gdHdvIHJhbmdlcywgd2l0aCBjaGFyYWN0ZXJzIGxlc3MgdGhhbiAyNTYgYmVpbmcKK2luZGljYXRlZCBpbiB0aGUgYml0IG1hcCwgYW5kIHRoZSByZXN0IHdpdGggWENMX1JBTkdFLgorCitXaGVuIFhDTF9OT1QgaXMgc2V0LCB0aGUgYml0IG1hcCwgaWYgcHJlc2VudCwgY29udGFpbnMgYml0cyBmb3IgY2hhcmFjdGVycyB0aGF0CithcmUgYWxsb3dlZCAoZXhhY3RseSBhcyBmb3IgT1BfTkNMQVNTKSwgYnV0IHRoZSBsaXN0IG9mIGl0ZW1zIHRoYXQgZm9sbG93IGl0CitzcGVjaWZpZXMgY2hhcmFjdGVycyBhbmQgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgYWxsb3dlZC4KKworCitCYWNrIHJlZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0tLQorCitPUF9SRUYgKGNhc2VmdWwpIG9yIE9QX1JFRkkgKGNhc2VsZXNzKSBpcyBmb2xsb3dlZCBieSBhIGNvdW50IGNvbnRhaW5pbmcgdGhlCityZWZlcmVuY2UgbnVtYmVyIHdoZW4gdGhlIHJlZmVyZW5jZSBpcyB0byBhIHVuaXF1ZSBjYXB0dXJpbmcgZ3JvdXAgKGVpdGhlciBieQorbnVtYmVyIG9yIGJ5IG5hbWUpLiBXaGVuIG5hbWVkIGdyb3VwcyBhcmUgdXNlZCwgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUKK2dyb3VwIHdpdGggdGhlIHNhbWUgbmFtZS4gSW4gdGhpcyBjYXNlLCBhIHJlZmVyZW5jZSB0byBzdWNoIGEgZ3JvdXAgYnkgbmFtZQorZ2VuZXJhdGVzIE9QX0ROUkVGIG9yIE9QX0ROUkVGSS4gVGhlc2UgYXJlIGZvbGxvd2VkIGJ5IHR3byBjb3VudHM6IHRoZSBpbmRleAorKG5vdCB0aGUgYnl0ZSBvZmZzZXQpIGluIHRoZSBncm91cCBuYW1lIHRhYmxlIG9mIHRoZSBmaXJzdCBlbnRyeSBmb3IgdGhlCityZXF1aXJlZCBuYW1lLCBmb2xsb3dlZCBieSB0aGUgbnVtYmVyIG9mIGdyb3VwcyB3aXRoIHRoZSBzYW1lIG5hbWUuIFRoZQorbWF0Y2hpbmcgY29kZSBjYW4gdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBvbmUgdGhhdCBpcyBzZXQuCisKKworUmVwZWF0aW5nIGNoYXJhY3RlciBjbGFzc2VzIGFuZCBiYWNrIHJlZmVyZW5jZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NpbmdsZS1jaGFyYWN0ZXIgY2xhc3NlcyBhcmUgaGFuZGxlZCBzcGVjaWFsbHkgKHNlZSBhYm92ZSkuIFRoaXMgc2VjdGlvbgorYXBwbGllcyB0byBvdGhlciBjbGFzc2VzIGFuZCBhbHNvIHRvIGJhY2sgcmVmZXJlbmNlcy4gSW4gYm90aCBjYXNlcywgdGhlIHJlcGVhdAoraW5mb3JtYXRpb24gZm9sbG93cyB0aGUgYmFzZSBpdGVtLiBUaGUgbWF0Y2hpbmcgY29kZSBsb29rcyBhdCB0aGUgZm9sbG93aW5nCitvcGNvZGUgdG8gc2VlIGlmIGl0IGlzIG9uZSBvZiB0aGVzZToKKworICBPUF9DUlNUQVIKKyAgT1BfQ1JNSU5TVEFSCisgIE9QX0NSUE9TU1RBUgorICBPUF9DUlBMVVMKKyAgT1BfQ1JNSU5QTFVTCisgIE9QX0NSUE9TUExVUworICBPUF9DUlFVRVJZCisgIE9QX0NSTUlOUVVFUlkKKyAgT1BfQ1JQT1NRVUVSWQorICBPUF9DUlJBTkdFCisgIE9QX0NSTUlOUkFOR0UKKyAgT1BfQ1JQT1NSQU5HRQorCitBbGwgYnV0IHRoZSBsYXN0IHRocmVlIGFyZSBzaW5nbGUtY29kZS11bml0IGl0ZW1zLCB3aXRoIG5vIGRhdGEuIFRoZSBvdGhlcnMgYXJlCitmb2xsb3dlZCBieSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSByZXBlYXQgY291bnRzLgorCisKK0JyYWNrZXRzIGFuZCBhbHRlcm5hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgcGFpciBvZiBub24tY2FwdHVyaW5nIHJvdW5kIGJyYWNrZXRzIGlzIHdyYXBwZWQgcm91bmQgZWFjaCBleHByZXNzaW9uIGF0Citjb21waWxlIHRpbWUsIHNvIGFsdGVybmF0aW9uIGFsd2F5cyBoYXBwZW5zIGluIHRoZSBjb250ZXh0IG9mIGJyYWNrZXRzLgorCitbTm90ZSBmb3IgTm9ydGggQW1lcmljYW5zOiAiYnJhY2tldCIgdG8gc29tZSBFbmdsaXNoIHNwZWFrZXJzLCBpbmNsdWRpbmcKK215c2VsZiwgY2FuIGJlIHJvdW5kLCBzcXVhcmUsIGN1cmx5LCBvciBwb2ludHkuIEhlbmNlIHRoaXMgdXNhZ2UgcmF0aGVyIHRoYW4KKyJwYXJlbnRoZXNlcyIuXQorCitOb24tY2FwdHVyaW5nIGJyYWNrZXRzIHVzZSB0aGUgb3Bjb2RlIE9QX0JSQSwgY2FwdHVyaW5nIGJyYWNrZXRzIHVzZSBPUF9DQlJBLiBBCiticmFja2V0IG9wY29kZSBpcyBmb2xsb3dlZCBieSBhIExJTktfU0laRSB2YWx1ZSB3aGljaCBnaXZlcyB0aGUgb2Zmc2V0IHRvIHRoZQorbmV4dCBhbHRlcm5hdGl2ZSBPUF9BTFQgb3IsIGlmIHRoZXJlIGFyZW4ndCBhbnkgYnJhbmNoZXMsIHRvIHRoZSBtYXRjaGluZworT1BfS0VUIG9wY29kZS4gRWFjaCBPUF9BTFQgaXMgZm9sbG93ZWQgYnkgYSBMSU5LX1NJWkUgdmFsdWUgZ2l2aW5nIHRoZSBvZmZzZXQKK3RvIHRoZSBuZXh0IG9uZSwgb3IgdG8gdGhlIE9QX0tFVCBvcGNvZGUuIEZvciBjYXB0dXJpbmcgYnJhY2tldHMsIHRoZSBicmFja2V0CitudW1iZXIgaXMgYSBjb3VudCB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIG9mZnNldC4KKworT1BfS0VUIGlzIHVzZWQgZm9yIHN1YnBhdHRlcm5zIHRoYXQgZG8gbm90IHJlcGVhdCBpbmRlZmluaXRlbHksIGFuZCBPUF9LRVRSTUlOCithbmQgT1BfS0VUUk1BWCBhcmUgdXNlZCBmb3IgaW5kZWZpbml0ZSByZXBldGl0aW9ucywgbWluaW1hbGx5IG9yIG1heGltYWxseQorcmVzcGVjdGl2ZWx5IChzZWUgYmVsb3cgZm9yIHBvc3Nlc3NpdmUgcmVwZXRpdGlvbnMpLiBBbGwgdGhyZWUgYXJlIGZvbGxvd2VkIGJ5CithIExJTktfU0laRSB2YWx1ZSBnaXZpbmcgKGFzIGEgcG9zaXRpdmUgbnVtYmVyKSB0aGUgb2Zmc2V0IGJhY2sgdG8gdGhlIG1hdGNoaW5nCiticmFja2V0IG9wY29kZS4KKworSWYgYSBzdWJwYXR0ZXJuIGlzIHF1YW50aWZpZWQgc3VjaCB0aGF0IGl0IGlzIHBlcm1pdHRlZCB0byBtYXRjaCB6ZXJvIHRpbWVzLCBpdAoraXMgcHJlY2VkZWQgYnkgb25lIG9mIE9QX0JSQVpFUk8sIE9QX0JSQU1JTlpFUk8sIG9yIE9QX1NLSVBaRVJPLiBUaGVzZSBhcmUKK3NpbmdsZS11bml0IG9wY29kZXMgdGhhdCB0ZWxsIHRoZSBtYXRjaGVyIHRoYXQgc2tpcHBpbmcgdGhlIGZvbGxvd2luZworc3VicGF0dGVybiBlbnRpcmVseSBpcyBhIHZhbGlkIG1hdGNoLiBJbiB0aGUgY2FzZSBvZiB0aGUgZmlyc3QgdHdvLCBub3QKK3NraXBwaW5nIHRoZSBwYXR0ZXJuIGlzIGFsc28gdmFsaWQgKGdyZWVkeSBhbmQgbm9uLWdyZWVkeSkuIFRoZSB0aGlyZCBpcyB1c2VkCit3aGVuIGEgcGF0dGVybiBoYXMgdGhlIHF1YW50aWZpZXIgezAsMH0uIEl0IGNhbm5vdCBiZSBlbnRpcmVseSBkaXNjYXJkZWQsCitiZWNhdXNlIGl0IG1heSBiZSBjYWxsZWQgYXMgYSBzdWJyb3V0aW5lIGZyb20gZWxzZXdoZXJlIGluIHRoZSBwYXR0ZXJuLgorCitBIHN1YnBhdHRlcm4gd2l0aCBhbiBpbmRlZmluaXRlIG1heGltdW0gcmVwZXRpdGlvbiBpcyByZXBsaWNhdGVkIGluIHRoZQorY29tcGlsZWQgZGF0YSBpdHMgbWluaW11bSBudW1iZXIgb2YgdGltZXMgKG9yIG9uY2Ugd2l0aCBPUF9CUkFaRVJPIGlmIHRoZQorbWluaW11bSBpcyB6ZXJvKSwgd2l0aCB0aGUgZmluYWwgY29weSB0ZXJtaW5hdGluZyB3aXRoIE9QX0tFVFJNSU4gb3IgT1BfS0VUUk1BWAorYXMgYXBwcm9wcmlhdGUuCisKK0Egc3VicGF0dGVybiB3aXRoIGEgYm91bmRlZCBtYXhpbXVtIHJlcGV0aXRpb24gaXMgcmVwbGljYXRlZCBpbiBhIG5lc3RlZAorZmFzaGlvbiB1cCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMsIHdpdGggT1BfQlJBWkVSTyBvciBPUF9CUkFNSU5aRVJPCitiZWZvcmUgZWFjaCByZXBsaWNhdGlvbiBhZnRlciB0aGUgbWluaW11bSwgc28gdGhhdCwgZm9yIGV4YW1wbGUsIChhYmMpezIsNX0gaXMKK2NvbXBpbGVkIGFzIChhYmMpKGFiYykoKGFiYykoKGFiYykoYWJjKT8pPyk/LCBleGNlcHQgdGhhdCBlYWNoIGJyYWNrZXRlZCBncm91cAoraGFzIHRoZSBzYW1lIG51bWJlci4KKworV2hlbiBhIHJlcGVhdGVkIHN1YnBhdHRlcm4gaGFzIGFuIHVuYm91bmRlZCB1cHBlciBsaW1pdCwgaXQgaXMgY2hlY2tlZCB0byBzZWUKK3doZXRoZXIgaXQgY291bGQgbWF0Y2ggYW4gZW1wdHkgc3RyaW5nLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGUgb3Bjb2RlIGluIHRoZQorZmluYWwgcmVwbGljYXRpb24gaXMgY2hhbmdlZCB0byBPUF9TQlJBIG9yIE9QX1NDQlJBLiBUaGlzIHRlbGxzIHRoZSBtYXRjaGVyCit0aGF0IGl0IG5lZWRzIHRvIGNoZWNrIGZvciBtYXRjaGluZyBhbiBlbXB0eSBzdHJpbmcgd2hlbiBpdCBoaXRzIE9QX0tFVFJNSU4gb3IKK09QX0tFVFJNQVgsIGFuZCBpZiBzbywgdG8gYnJlYWsgdGhlIGxvb3AuCisKKworUG9zc2Vzc2l2ZSBicmFja2V0cworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGEgcmVwZWF0ZWQgZ3JvdXAgKGNhcHR1cmluZyBvciBub24tY2FwdHVyaW5nKSBpcyBtYXJrZWQgYXMgcG9zc2Vzc2l2ZSBieQordGhlICIrIiBub3RhdGlvbiwgZS5nLiAoYWJjKSsrLCBkaWZmZXJlbnQgb3Bjb2RlcyBhcmUgdXNlZC4gVGhlaXIgbmFtZXMgYWxsCitoYXZlIFBPUyBvbiB0aGUgZW5kLCBlLmcuIE9QX0JSQVBPUyBpbnN0ZWFkIG9mIE9QX0JSQSBhbmQgT1BfU0NCUkFQT1MgaW5zdGVhZAorb2YgT1BfU0NCUkEuIFRoZSBlbmQgb2Ygc3VjaCBhIGdyb3VwIGlzIG1hcmtlZCBieSBPUF9LRVRSUE9TLiBJZiB0aGUgbWluaW11bQorcmVwZXRpdGlvbiBpcyB6ZXJvLCB0aGUgZ3JvdXAgaXMgcHJlY2VkZWQgYnkgT1BfQlJBUE9TWkVSTy4KKworCitPbmNlLW9ubHkgKGF0b21pYykgZ3JvdXBzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGFyZSBqdXN0IGxpa2Ugb3RoZXIgc3VicGF0dGVybnMsIGJ1dCB0aGV5IHN0YXJ0IHdpdGggdGhlIG9wY29kZQorT1BfT05DRSBvciBPUF9PTkNFX05DLiBUaGUgZm9ybWVyIGlzIHVzZWQgd2hlbiB0aGVyZSBhcmUgbm8gY2FwdHVyaW5nIGJyYWNrZXRzCit3aXRoaW4gdGhlIGF0b21pYyBncm91cDsgdGhlIGxhdHRlciB3aGVuIHRoZXJlIGFyZS4gVGhlIGRpc3RpbmN0aW9uIGlzIG5lZWRlZAorZm9yIHdoZW4gdGhlcmUgaXMgYSBiYWNrdHJhY2sgdG8gYmVmb3JlIHRoZSBncm91cCAtIGFueSBjYXB0dXJlcyB3aXRoaW4gdGhlCitncm91cCBtdXN0IGJlIHJlc2V0LCBzbyBpdCBpcyBuZWNlc3NhcnkgdG8gcmV0YWluIGJhY2t0cmFja2luZyBwb2ludHMgaW5zaWRlCit0aGUgZ3JvdXAsIGV2ZW4gYWZ0ZXIgaXQgaXMgY29tcGxldGUsIGluIG9yZGVyIHRvIGRvIHRoaXMuIFdoZW4gdGhlcmUgYXJlIG5vCitjYXB0dXJlcyBpbiBhbiBhdG9taWMgZ3JvdXAsIGFsbCB0aGUgYmFja3RyYWNraW5nIGNhbiBiZSBkaXNjYXJkZWQgd2hlbiBpdCBpcworY29tcGxldGUuIFRoaXMgaXMgbW9yZSBlZmZpY2llbnQsIGFuZCBhbHNvIHVzZXMgbGVzcyBzdGFjay4KKworVGhlIGNoZWNrIGZvciBtYXRjaGluZyBhbiBlbXB0eSBzdHJpbmcgaW4gYW4gdW5ib3VuZGVkIHJlcGVhdCBpcyBoYW5kbGVkCitlbnRpcmVseSBhdCBydW50aW1lLCBzbyB0aGVyZSBhcmUganVzdCB0aGVzZSB0d28gb3Bjb2RlcyBmb3IgYXRvbWljIGdyb3Vwcy4KKworCitBc3NlcnRpb25zCistLS0tLS0tLS0tCisKK0ZvcndhcmQgYXNzZXJ0aW9ucyBhcmUgYWxzbyBqdXN0IGxpa2Ugb3RoZXIgc3VicGF0dGVybnMsIGJ1dCBzdGFydGluZyB3aXRoIG9uZQorb2YgdGhlIG9wY29kZXMgT1BfQVNTRVJUIG9yIE9QX0FTU0VSVF9OT1QuIEJhY2t3YXJkIGFzc2VydGlvbnMgdXNlIHRoZSBvcGNvZGVzCitPUF9BU1NFUlRCQUNLIGFuZCBPUF9BU1NFUlRCQUNLX05PVCwgYW5kIHRoZSBmaXJzdCBvcGNvZGUgaW5zaWRlIHRoZSBhc3NlcnRpb24KK2lzIE9QX1JFVkVSU0UsIGZvbGxvd2VkIGJ5IGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIG1vdmUgYmFjayB0aGUKK3BvaW50ZXIgaW4gdGhlIHN1YmplY3Qgc3RyaW5nLiBJbiBBU0NJSSBvciBVVEYtMzIgbW9kZSwgdGhlIGNvdW50IGlzIGFsc28gdGhlCitudW1iZXIgb2YgY29kZSB1bml0cywgYnV0IGluIFVURi04LzE2IG1vZGUgZWFjaCBjaGFyYWN0ZXIgbWF5IG9jY3VweSBtb3JlIHRoYW4KK29uZSBjb2RlIHVuaXQuIEEgc2VwYXJhdGUgY291bnQgaXMgcHJlc2VudCBpbiBlYWNoIGFsdGVybmF0aXZlIG9mIGEgbG9va2JlaGluZAorYXNzZXJ0aW9uLCBhbGxvd2luZyB0aGVtIHRvIGhhdmUgZGlmZmVyZW50IChidXQgZml4ZWQpIGxlbmd0aHMuCisKKworQ29uZGl0aW9uYWwgc3VicGF0dGVybnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGFyZSBsaWtlIG90aGVyIHN1YnBhdHRlcm5zLCBidXQgdGhleSBzdGFydCB3aXRoIHRoZSBvcGNvZGUgT1BfQ09ORCwgb3IKK09QX1NDT05EIGZvciBvbmUgdGhhdCBtaWdodCBtYXRjaCBhbiBlbXB0eSBzdHJpbmcgaW4gYW4gdW5ib3VuZGVkIHJlcGVhdC4KKworSWYgdGhlIGNvbmRpdGlvbiBpcyBhIGJhY2sgcmVmZXJlbmNlLCB0aGlzIGlzIHN0b3JlZCBhdCB0aGUgc3RhcnQgb2YgdGhlCitzdWJwYXR0ZXJuIHVzaW5nIHRoZSBvcGNvZGUgT1BfQ1JFRiBmb2xsb3dlZCBieSBhIGNvdW50IGNvbnRhaW5pbmcgdGhlCityZWZlcmVuY2UgbnVtYmVyLCBwcm92aWRlZCB0aGF0IHRoZSByZWZlcmVuY2UgaXMgdG8gYSB1bmlxdWUgY2FwdHVyaW5nIGdyb3VwLgorSWYgdGhlIHJlZmVyZW5jZSB3YXMgYnkgbmFtZSBhbmQgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBncm91cCB3aXRoIHRoYXQgbmFtZSwKK09QX0ROQ1JFRiBpcyB1c2VkIGluc3RlYWQuIEl0IGlzIGZvbGxvd2VkIGJ5IHR3byBjb3VudHM6IHRoZSBpbmRleCBpbiB0aGUgZ3JvdXAKK25hbWVzIHRhYmxlLCBhbmQgdGhlIG51bWJlciBvZiBncm91cHMgd2l0aCB0aGUgc2FtZSBuYW1lLiBUaGUgYWxsb3dzIHRoZQorbWF0Y2hlciB0byBjaGVjayBpZiBhbnkgZ3JvdXAgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpcyBzZXQuCisKK0lmIHRoZSBjb25kaXRpb24gaXMgImluIHJlY3Vyc2lvbiIgKGNvZGVkIGFzICIoPyhSKSIpLCBvciAiaW4gcmVjdXJzaW9uIG9mCitncm91cCB4IiAoY29kZWQgYXMgIig/KFJ4KSIpLCB0aGUgZ3JvdXAgbnVtYmVyIGlzIHN0b3JlZCBhdCB0aGUgc3RhcnQgb2YgdGhlCitzdWJwYXR0ZXJuIHVzaW5nIHRoZSBvcGNvZGUgT1BfUlJFRiAod2l0aCBhIHZhbHVlIG9mIFJSRUZfQU5ZICgweGZmZmYpIGZvciAidGhlCit3aG9sZSBwYXR0ZXJuIikgb3IgT1BfRE5SUkVGICh3aXRoIGRhdGEgYXMgZm9yIE9QX0ROQ1JFRikuCisKK0ZvciBhIERFRklORSBjb25kaXRpb24sIE9QX0ZBTFNFIGlzIHVzZWQgKHdpdGggbm8gYXNzb2NpYXRlZCBkYXRhKS4gRHVyaW5nCitjb21waWxhdGlvbiwgaG93ZXZlciwgYSBERUZJTkUgY29uZGl0aW9uIGlzIGNvZGVkIGFzIE9QX0RFRklORSBzbyB0aGF0LCB3aGVuCit0aGUgY29uZGl0aW9uYWwgZ3JvdXAgaXMgY29tcGxldGUsIHRoZXJlIGNhbiBiZSBhIGNoZWNrIHRvIGVuc3VyZSB0aGF0IGl0Citjb250YWlucyBvbmx5IG9uZSB0b3AtbGV2ZWwgYnJhbmNoLiBPbmNlIHRoaXMgaGFzIGhhcHBlbmVkLCB0aGUgb3Bjb2RlIGlzCitjaGFuZ2VkIHRvIE9QX0ZBTFNFLCBzbyB0aGUgbWF0Y2hlciBuZXZlciBzZWVzIE9QX0RFRklORS4KKworVGhlcmUgaXMgYSBzcGVjaWFsIFBDUkUyLXNwZWNpZmljIGNvbmRpdGlvbiBvZiB0aGUgZm9ybSAoVkVSU0lPTls+XT14LnkpLCB3aGljaAordGVzdHMgdGhlIFBDUkUyIHZlcnNpb24gbnVtYmVyLiBUaGlzIGNvbXBpbGVzIGludG8gb25lIG9mIHRoZSBvcGNvZGVzIE9QX1RSVUUKK29yIE9QX0ZBTFNFLgorCitJZiBhIGNvbmRpdGlvbiBpcyBub3QgYSBiYWNrIHJlZmVyZW5jZSwgcmVjdXJzaW9uIHRlc3QsIERFRklORSwgb3IgVkVSU0lPTiwgaXQKK211c3Qgc3RhcnQgd2l0aCBhbiBhc3NlcnRpb24sIHdob3NlIG9wY29kZSBub3JtYWxseSBpbW1lZGlhdGVseSBmb2xsb3dzIE9QX0NPTkQKK29yIE9QX1NDT05ELiBIb3dldmVyLCBpZiBhdXRvbWF0aWMgY2FsbG91dHMgYXJlIGVuYWJsZWQsIGEgY2FsbG91dCBpcyBpbnNlcnRlZAoraW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBhc3NlcnRpb24uIEl0IGlzIGFsc28gcG9zc2libGUgdG8gaW5zZXJ0IGEgbWFudWFsCitjYWxsb3V0IGF0IHRoaXMgcG9pbnQuIE9ubHkgYXNzZXJ0aW9uIGNvbmRpdGlvbnMgbWF5IGhhdmUgY2FsbG91dHMgcHJlY2VkaW5nCit0aGUgY29uZGl0aW9uLgorCitBIGNvbmRpdGlvbiB0aGF0IGlzIHRoZSBuZWdhdGl2ZSBhc3NlcnRpb24gKD8hKSBpcyBvcHRpbWl6ZWQgdG8gT1BfRkFJTCBpbiBhbGwgCitwYXJ0cyBvZiB0aGUgcGF0dGVybiwgc28gdGhpcyBpcyBhbm90aGVyIG9wY29kZSB0aGF0IG1heSBhcHBlYXIgYXMgYSBjb25kaXRpb24uIAorSXQgaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyBPUF9GQUxTRS4KKworCitSZWN1cnNpb24KKy0tLS0tLS0tLQorCitSZWN1cnNpb24gZWl0aGVyIG1hdGNoZXMgdGhlIGN1cnJlbnQgcGF0dGVybiwgb3Igc29tZSBzdWJleHByZXNzaW9uLiBUaGUgb3Bjb2RlCitPUF9SRUNVUlNFIGlzIGZvbGxvd2VkIGJ5IGEgTElOS19TSVpFIHZhbHVlIHRoYXQgaXMgdGhlIG9mZnNldCB0byB0aGUgc3RhcnRpbmcKK2JyYWNrZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHdob2xlIHBhdHRlcm4uIE9QX1JFQ1VSU0UgaXMgYWxzbyB1c2VkIGZvcgorInN1YnJvdXRpbmUiIGNhbGxzLCBldmVuIHRob3VnaCB0aGV5IGFyZSBub3Qgc3RyaWN0bHkgYSByZWN1cnNpb24uIFJlcGVhdGVkCityZWN1cnNpb25zIGFyZSBhdXRvbWF0aWNhbGx5IHdyYXBwZWQgaW5zaWRlIE9QX09OQ0UgYnJhY2tldHMsIGJlY2F1c2Ugb3RoZXJ3aXNlCitzb21lIHBhdHRlcm5zIGJyb2tlIHRoZW0uIEEgbm9uLXJlcGVhdGVkIHJlY3Vyc2lvbiBpcyBub3Qgd3JhcHBlZCBpbiBPUF9PTkNFCiticmFja2V0cywgYnV0IGl0IGlzIG5ldmVydGhlbGVzcyBzdGlsbCB0cmVhdGVkIGFzIGFuIGF0b21pYyBncm91cC4KKworCitDYWxsb3V0CistLS0tLS0tCisKK0EgY2FsbG91dCBjYW4gbm93YWRheXMgaGF2ZSBlaXRoZXIgYSBudW1lcmljYWwgYXJndW1lbnQgb3IgYSBzdHJpbmcgYXJndW1lbnQuCitUaGVzZSB1c2UgT1BfQ0FMTE9VVCBvciBPUF9DQUxMT1VUX1NUUiwgcmVzcGVjdGl2ZWx5LiBJbiBlYWNoIGNhc2UgdGhlc2UgYXJlCitmb2xsb3dlZCBieSB0d28gTElOS19TSVpFIHZhbHVlcyBnaXZpbmcgdGhlIG9mZnNldCBpbiB0aGUgcGF0dGVybiBzdHJpbmcgdG8gdGhlCitzdGFydCBvZiB0aGUgZm9sbG93aW5nIGl0ZW0sIGFuZCBhbm90aGVyIGNvdW50IGdpdmluZyB0aGUgbGVuZ3RoIG9mIHRoaXMgaXRlbS4KK1RoZXNlIHZhbHVlcyBtYWtlIGl0IHBvc3NpYmxlIGZvciBwY3JlMnRlc3QgdG8gb3V0cHV0IHVzZWZ1bCB0cmFjaW5nCitpbmZvcm1hdGlvbiB1c2luZyBjYWxsb3V0cy4KKworSW4gdGhlIGNhc2Ugb2YgYSBudW1lcmljIGNhbGxvdXQsIGFmdGVyIHRoZXNlIHR3byB2YWx1ZXMgdGhlcmUgaXMgYSBzaW5nbGUgY29kZQordW5pdCBjb250YWluaW5nIHRoZSBjYWxsb3V0IG51bWJlciwgaW4gdGhlIHJhbmdlIDAtMjU1LCB3aXRoIDI1NSBiZWluZyB1c2VkIGZvcgorY2FsbG91dHMgdGhhdCBhcmUgYXV0b21hdGljYWxseSBpbnNlcnRlZCBhcyBhIHJlc3VsdCBvZiB0aGUgUENSRTJfQVVUT19DQUxMT1VUCitvcHRpb24uIFRodXMsIHRoaXMgb3Bjb2RlIGl0ZW0gaXMgb2YgZml4ZWQgbGVuZ3RoOgorCisgIFtPUF9DQUxMT1VUXSBbUEFUVEVSTl9PRkZTRVRdIFtQQVRURVJOX0xFTkdUSF0gW05VTUJFUl0KKworRm9yIGNhbGxvdXRzIHdpdGggc3RyaW5nIGFyZ3VtZW50cywgT1BfQ0FMTE9VVF9TVFIgaGFzIHRocmVlIG1vcmUgZGF0YSBpdGVtczoKK2EgTElOS19TSVpFIHZhbHVlIGdpdmluZyB0aGUgY29tcGxldGUgbGVuZ3RoIG9mIHRoZSBlbnRpcmUgb3Bjb2RlIGl0ZW0sIGEKK0xJTktfU0laRSBpdGVtIGNvbnRhaW5pbmcgdGhlIG9mZnNldCB3aXRoaW4gdGhlIHBhdHRlcm4gc3RyaW5nIHRvIHRoZSBzdGFydCBvZgordGhlIHN0cmluZyBhcmd1bWVudCwgYW5kIHRoZSBzdHJpbmcgaXRzZWxmLCBwcmVjZWRlZCBieSBpdHMgc3RhcnRpbmcgZGVsaW1pdGVyCithbmQgZm9sbG93ZWQgYnkgYSBiaW5hcnkgemVyby4gV2hlbiBhIGNhbGxvdXQgZnVuY3Rpb24gaXMgY2FsbGVkLCBhIHBvaW50ZXIgdG8KK3RoZSBhY3R1YWwgc3RyaW5nIGlzIHBhc3NlZCwgYnV0IHRoZSBkZWxpbWl0ZXIgY2FuIGJlIGFjY2Vzc2VkIGFzIHN0cmluZ1stMV0gaWYKK3RoZSBhcHBsaWNhdGlvbiBuZWVkcyBpdC4gSW4gdGhlIDgtYml0IGxpYnJhcnksIHRoZSBjYWxsb3V0IGluIC9YKD9DJ2FiYycpWS8gaXMKK2NvbXBpbGVkIGFzIHRoZSBmb2xsb3dpbmcgYnl0ZXMgKGRlY2ltYWwgbnVtYmVycyByZXByZXNlbnQgYmluYXJ5IHZhbHVlcyk6CisKKyAgW09QX0NBTExPVVRdICBbMF0gWzEwXSAgWzBdIFsxXSAgWzBdIFsxNF0gIFswXSBbNV0gWyddIFthXSBbYl0gW2NdIFswXQorICAgICAgICAgICAgICAgIC0tLS0tLS0tICAtLS0tLS0tICAtLS0tLS0tLSAgLS0tLS0tLQorICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICB8ICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgIC0tLS0tLS0gTElOS19TSVpFIGl0ZW1zIC0tLS0tLQorCitPcGNvZGUgdGFibGUgY2hlY2tpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgbGFzdCBvcGNvZGUgdGhhdCBpcyBkZWZpbmVkIGluIHBjcmUyX2ludGVybmFsLmggaXMgT1BfVEFCTEVfTEVOR1RILiBUaGlzIGlzCitub3QgYSByZWFsIG9wY29kZSwgYnV0IGlzIHVzZWQgdG8gY2hlY2sgdGhhdCB0YWJsZXMgaW5kZXhlZCBieSBvcGNvZGUgYXJlIHRoZQorY29ycmVjdCBsZW5ndGgsIGluIG9yZGVyIHRvIGNhdGNoIHVwZGF0aW5nIGVycm9ycy4KKworUGhpbGlwIEhhemVsCitKdW5lIDIwMTUKZGlmZiAtLWdpdCBhL2Rpc3QyL0lOU1RBTEwgYi9kaXN0Mi9JTlNUQUxMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOTk4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9JTlNUQUxMCkBAIC0wLDAgKzEsMzcwIEBACitJbnN0YWxsYXRpb24gSW5zdHJ1Y3Rpb25zCisqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0NvcHlyaWdodCAoQykgMTk5NC0xOTk2LCAxOTk5LTIwMDIsIDIwMDQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCitJbmMuCisKKyAgIENvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sCithcmUgcGVybWl0dGVkIGluIGFueSBtZWRpdW0gd2l0aG91dCByb3lhbHR5IHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQKK25vdGljZSBhbmQgdGhpcyBub3RpY2UgYXJlIHByZXNlcnZlZC4gIFRoaXMgZmlsZSBpcyBvZmZlcmVkIGFzLWlzLAord2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZC4KKworQmFzaWMgSW5zdGFsbGF0aW9uCis9PT09PT09PT09PT09PT09PT0KKworICAgQnJpZWZseSwgdGhlIHNoZWxsIGNvbW1hbmQgYC4vY29uZmlndXJlICYmIG1ha2UgJiYgbWFrZSBpbnN0YWxsJworc2hvdWxkIGNvbmZpZ3VyZSwgYnVpbGQsIGFuZCBpbnN0YWxsIHRoaXMgcGFja2FnZS4gIFRoZSBmb2xsb3dpbmcKK21vcmUtZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zIGFyZSBnZW5lcmljOyBzZWUgdGhlIGBSRUFETUUnIGZpbGUgZm9yCitpbnN0cnVjdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlLiAgU29tZSBwYWNrYWdlcyBwcm92aWRlIHRoaXMKK2BJTlNUQUxMJyBmaWxlIGJ1dCBkbyBub3QgaW1wbGVtZW50IGFsbCBvZiB0aGUgZmVhdHVyZXMgZG9jdW1lbnRlZAorYmVsb3cuICBUaGUgbGFjayBvZiBhbiBvcHRpb25hbCBmZWF0dXJlIGluIGEgZ2l2ZW4gcGFja2FnZSBpcyBub3QKK25lY2Vzc2FyaWx5IGEgYnVnLiAgTW9yZSByZWNvbW1lbmRhdGlvbnMgZm9yIEdOVSBwYWNrYWdlcyBjYW4gYmUgZm91bmQKK2luICpub3RlIE1ha2VmaWxlIENvbnZlbnRpb25zOiAoc3RhbmRhcmRzKU1ha2VmaWxlIENvbnZlbnRpb25zLgorCisgICBUaGUgYGNvbmZpZ3VyZScgc2hlbGwgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGNvcnJlY3QgdmFsdWVzIGZvcgordmFyaW91cyBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyB1c2VkIGR1cmluZyBjb21waWxhdGlvbi4gIEl0IHVzZXMKK3Rob3NlIHZhbHVlcyB0byBjcmVhdGUgYSBgTWFrZWZpbGUnIGluIGVhY2ggZGlyZWN0b3J5IG9mIHRoZSBwYWNrYWdlLgorSXQgbWF5IGFsc28gY3JlYXRlIG9uZSBvciBtb3JlIGAuaCcgZmlsZXMgY29udGFpbmluZyBzeXN0ZW0tZGVwZW5kZW50CitkZWZpbml0aW9ucy4gIEZpbmFsbHksIGl0IGNyZWF0ZXMgYSBzaGVsbCBzY3JpcHQgYGNvbmZpZy5zdGF0dXMnIHRoYXQKK3lvdSBjYW4gcnVuIGluIHRoZSBmdXR1cmUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgYW5kIGEKK2ZpbGUgYGNvbmZpZy5sb2cnIGNvbnRhaW5pbmcgY29tcGlsZXIgb3V0cHV0ICh1c2VmdWwgbWFpbmx5IGZvcgorZGVidWdnaW5nIGBjb25maWd1cmUnKS4KKworICAgSXQgY2FuIGFsc28gdXNlIGFuIG9wdGlvbmFsIGZpbGUgKHR5cGljYWxseSBjYWxsZWQgYGNvbmZpZy5jYWNoZScKK2FuZCBlbmFibGVkIHdpdGggYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnIG9yIHNpbXBseSBgLUMnKSB0aGF0IHNhdmVzCit0aGUgcmVzdWx0cyBvZiBpdHMgdGVzdHMgdG8gc3BlZWQgdXAgcmVjb25maWd1cmluZy4gIENhY2hpbmcgaXMKK2Rpc2FibGVkIGJ5IGRlZmF1bHQgdG8gcHJldmVudCBwcm9ibGVtcyB3aXRoIGFjY2lkZW50YWwgdXNlIG9mIHN0YWxlCitjYWNoZSBmaWxlcy4KKworICAgSWYgeW91IG5lZWQgdG8gZG8gdW51c3VhbCB0aGluZ3MgdG8gY29tcGlsZSB0aGUgcGFja2FnZSwgcGxlYXNlIHRyeQordG8gZmlndXJlIG91dCBob3cgYGNvbmZpZ3VyZScgY291bGQgY2hlY2sgd2hldGhlciB0byBkbyB0aGVtLCBhbmQgbWFpbAorZGlmZnMgb3IgaW5zdHJ1Y3Rpb25zIHRvIHRoZSBhZGRyZXNzIGdpdmVuIGluIHRoZSBgUkVBRE1FJyBzbyB0aGV5IGNhbgorYmUgY29uc2lkZXJlZCBmb3IgdGhlIG5leHQgcmVsZWFzZS4gIElmIHlvdSBhcmUgdXNpbmcgdGhlIGNhY2hlLCBhbmQgYXQKK3NvbWUgcG9pbnQgYGNvbmZpZy5jYWNoZScgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3Qgd2FudCB0byBrZWVwLCB5b3UKK21heSByZW1vdmUgb3IgZWRpdCBpdC4KKworICAgVGhlIGZpbGUgYGNvbmZpZ3VyZS5hYycgKG9yIGBjb25maWd1cmUuaW4nKSBpcyB1c2VkIHRvIGNyZWF0ZQorYGNvbmZpZ3VyZScgYnkgYSBwcm9ncmFtIGNhbGxlZCBgYXV0b2NvbmYnLiAgWW91IG5lZWQgYGNvbmZpZ3VyZS5hYycgaWYKK3lvdSB3YW50IHRvIGNoYW5nZSBpdCBvciByZWdlbmVyYXRlIGBjb25maWd1cmUnIHVzaW5nIGEgbmV3ZXIgdmVyc2lvbgorb2YgYGF1dG9jb25mJy4KKworICAgVGhlIHNpbXBsZXN0IHdheSB0byBjb21waWxlIHRoaXMgcGFja2FnZSBpczoKKworICAxLiBgY2QnIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgcGFja2FnZSdzIHNvdXJjZSBjb2RlIGFuZCB0eXBlCisgICAgIGAuL2NvbmZpZ3VyZScgdG8gY29uZmlndXJlIHRoZSBwYWNrYWdlIGZvciB5b3VyIHN5c3RlbS4KKworICAgICBSdW5uaW5nIGBjb25maWd1cmUnIG1pZ2h0IHRha2UgYSB3aGlsZS4gIFdoaWxlIHJ1bm5pbmcsIGl0IHByaW50cworICAgICBzb21lIG1lc3NhZ2VzIHRlbGxpbmcgd2hpY2ggZmVhdHVyZXMgaXQgaXMgY2hlY2tpbmcgZm9yLgorCisgIDIuIFR5cGUgYG1ha2UnIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UuCisKKyAgMy4gT3B0aW9uYWxseSwgdHlwZSBgbWFrZSBjaGVjaycgdG8gcnVuIGFueSBzZWxmLXRlc3RzIHRoYXQgY29tZSB3aXRoCisgICAgIHRoZSBwYWNrYWdlLCBnZW5lcmFsbHkgdXNpbmcgdGhlIGp1c3QtYnVpbHQgdW5pbnN0YWxsZWQgYmluYXJpZXMuCisKKyAgNC4gVHlwZSBgbWFrZSBpbnN0YWxsJyB0byBpbnN0YWxsIHRoZSBwcm9ncmFtcyBhbmQgYW55IGRhdGEgZmlsZXMgYW5kCisgICAgIGRvY3VtZW50YXRpb24uICBXaGVuIGluc3RhbGxpbmcgaW50byBhIHByZWZpeCBvd25lZCBieSByb290LCBpdCBpcworICAgICByZWNvbW1lbmRlZCB0aGF0IHRoZSBwYWNrYWdlIGJlIGNvbmZpZ3VyZWQgYW5kIGJ1aWx0IGFzIGEgcmVndWxhcgorICAgICB1c2VyLCBhbmQgb25seSB0aGUgYG1ha2UgaW5zdGFsbCcgcGhhc2UgZXhlY3V0ZWQgd2l0aCByb290CisgICAgIHByaXZpbGVnZXMuCisKKyAgNS4gT3B0aW9uYWxseSwgdHlwZSBgbWFrZSBpbnN0YWxsY2hlY2snIHRvIHJlcGVhdCBhbnkgc2VsZi10ZXN0cywgYnV0CisgICAgIHRoaXMgdGltZSB1c2luZyB0aGUgYmluYXJpZXMgaW4gdGhlaXIgZmluYWwgaW5zdGFsbGVkIGxvY2F0aW9uLgorICAgICBUaGlzIHRhcmdldCBkb2VzIG5vdCBpbnN0YWxsIGFueXRoaW5nLiAgUnVubmluZyB0aGlzIHRhcmdldCBhcyBhCisgICAgIHJlZ3VsYXIgdXNlciwgcGFydGljdWxhcmx5IGlmIHRoZSBwcmlvciBgbWFrZSBpbnN0YWxsJyByZXF1aXJlZAorICAgICByb290IHByaXZpbGVnZXMsIHZlcmlmaWVzIHRoYXQgdGhlIGluc3RhbGxhdGlvbiBjb21wbGV0ZWQKKyAgICAgY29ycmVjdGx5LgorCisgIDYuIFlvdSBjYW4gcmVtb3ZlIHRoZSBwcm9ncmFtIGJpbmFyaWVzIGFuZCBvYmplY3QgZmlsZXMgZnJvbSB0aGUKKyAgICAgc291cmNlIGNvZGUgZGlyZWN0b3J5IGJ5IHR5cGluZyBgbWFrZSBjbGVhbicuICBUbyBhbHNvIHJlbW92ZSB0aGUKKyAgICAgZmlsZXMgdGhhdCBgY29uZmlndXJlJyBjcmVhdGVkIChzbyB5b3UgY2FuIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yCisgICAgIGEgZGlmZmVyZW50IGtpbmQgb2YgY29tcHV0ZXIpLCB0eXBlIGBtYWtlIGRpc3RjbGVhbicuICBUaGVyZSBpcworICAgICBhbHNvIGEgYG1ha2UgbWFpbnRhaW5lci1jbGVhbicgdGFyZ2V0LCBidXQgdGhhdCBpcyBpbnRlbmRlZCBtYWlubHkKKyAgICAgZm9yIHRoZSBwYWNrYWdlJ3MgZGV2ZWxvcGVycy4gIElmIHlvdSB1c2UgaXQsIHlvdSBtYXkgaGF2ZSB0byBnZXQKKyAgICAgYWxsIHNvcnRzIG9mIG90aGVyIHByb2dyYW1zIGluIG9yZGVyIHRvIHJlZ2VuZXJhdGUgZmlsZXMgdGhhdCBjYW1lCisgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICA3LiBPZnRlbiwgeW91IGNhbiBhbHNvIHR5cGUgYG1ha2UgdW5pbnN0YWxsJyB0byByZW1vdmUgdGhlIGluc3RhbGxlZAorICAgICBmaWxlcyBhZ2Fpbi4gIEluIHByYWN0aWNlLCBub3QgYWxsIHBhY2thZ2VzIGhhdmUgdGVzdGVkIHRoYXQKKyAgICAgdW5pbnN0YWxsYXRpb24gd29ya3MgY29ycmVjdGx5LCBldmVuIHRob3VnaCBpdCBpcyByZXF1aXJlZCBieSB0aGUKKyAgICAgR05VIENvZGluZyBTdGFuZGFyZHMuCisKKyAgOC4gU29tZSBwYWNrYWdlcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgdXNlIEF1dG9tYWtlLCBwcm92aWRlIGBtYWtlCisgICAgIGRpc3RjaGVjaycsIHdoaWNoIGNhbiBieSB1c2VkIGJ5IGRldmVsb3BlcnMgdG8gdGVzdCB0aGF0IGFsbCBvdGhlcgorICAgICB0YXJnZXRzIGxpa2UgYG1ha2UgaW5zdGFsbCcgYW5kIGBtYWtlIHVuaW5zdGFsbCcgd29yayBjb3JyZWN0bHkuCisgICAgIFRoaXMgdGFyZ2V0IGlzIGdlbmVyYWxseSBub3QgcnVuIGJ5IGVuZCB1c2Vycy4KKworQ29tcGlsZXJzIGFuZCBPcHRpb25zCis9PT09PT09PT09PT09PT09PT09PT0KKworICAgU29tZSBzeXN0ZW1zIHJlcXVpcmUgdW51c3VhbCBvcHRpb25zIGZvciBjb21waWxhdGlvbiBvciBsaW5raW5nIHRoYXQKK3RoZSBgY29uZmlndXJlJyBzY3JpcHQgZG9lcyBub3Qga25vdyBhYm91dC4gIFJ1biBgLi9jb25maWd1cmUgLS1oZWxwJworZm9yIGRldGFpbHMgb24gc29tZSBvZiB0aGUgcGVydGluZW50IGVudmlyb25tZW50IHZhcmlhYmxlcy4KKworICAgWW91IGNhbiBnaXZlIGBjb25maWd1cmUnIGluaXRpYWwgdmFsdWVzIGZvciBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMKK2J5IHNldHRpbmcgdmFyaWFibGVzIGluIHRoZSBjb21tYW5kIGxpbmUgb3IgaW4gdGhlIGVudmlyb25tZW50LiAgSGVyZQoraXMgYW4gZXhhbXBsZToKKworICAgICAuL2NvbmZpZ3VyZSBDQz1jOTkgQ0ZMQUdTPS1nIExJQlM9LWxwb3NpeAorCisgICAqTm90ZSBEZWZpbmluZyBWYXJpYWJsZXM6OiwgZm9yIG1vcmUgZGV0YWlscy4KKworQ29tcGlsaW5nIEZvciBNdWx0aXBsZSBBcmNoaXRlY3R1cmVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgWW91IGNhbiBjb21waWxlIHRoZSBwYWNrYWdlIGZvciBtb3JlIHRoYW4gb25lIGtpbmQgb2YgY29tcHV0ZXIgYXQgdGhlCitzYW1lIHRpbWUsIGJ5IHBsYWNpbmcgdGhlIG9iamVjdCBmaWxlcyBmb3IgZWFjaCBhcmNoaXRlY3R1cmUgaW4gdGhlaXIKK293biBkaXJlY3RvcnkuICBUbyBkbyB0aGlzLCB5b3UgY2FuIHVzZSBHTlUgYG1ha2UnLiAgYGNkJyB0byB0aGUKK2RpcmVjdG9yeSB3aGVyZSB5b3Ugd2FudCB0aGUgb2JqZWN0IGZpbGVzIGFuZCBleGVjdXRhYmxlcyB0byBnbyBhbmQgcnVuCit0aGUgYGNvbmZpZ3VyZScgc2NyaXB0LiAgYGNvbmZpZ3VyZScgYXV0b21hdGljYWxseSBjaGVja3MgZm9yIHRoZQorc291cmNlIGNvZGUgaW4gdGhlIGRpcmVjdG9yeSB0aGF0IGBjb25maWd1cmUnIGlzIGluIGFuZCBpbiBgLi4nLiAgVGhpcworaXMga25vd24gYXMgYSAiVlBBVEgiIGJ1aWxkLgorCisgICBXaXRoIGEgbm9uLUdOVSBgbWFrZScsIGl0IGlzIHNhZmVyIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yIG9uZQorYXJjaGl0ZWN0dXJlIGF0IGEgdGltZSBpbiB0aGUgc291cmNlIGNvZGUgZGlyZWN0b3J5LiAgQWZ0ZXIgeW91IGhhdmUKK2luc3RhbGxlZCB0aGUgcGFja2FnZSBmb3Igb25lIGFyY2hpdGVjdHVyZSwgdXNlIGBtYWtlIGRpc3RjbGVhbicgYmVmb3JlCityZWNvbmZpZ3VyaW5nIGZvciBhbm90aGVyIGFyY2hpdGVjdHVyZS4KKworICAgT24gTWFjT1MgWCAxMC41IGFuZCBsYXRlciBzeXN0ZW1zLCB5b3UgY2FuIGNyZWF0ZSBsaWJyYXJpZXMgYW5kCitleGVjdXRhYmxlcyB0aGF0IHdvcmsgb24gbXVsdGlwbGUgc3lzdGVtIHR5cGVzLS1rbm93biBhcyAiZmF0IiBvcgorInVuaXZlcnNhbCIgYmluYXJpZXMtLWJ5IHNwZWNpZnlpbmcgbXVsdGlwbGUgYC1hcmNoJyBvcHRpb25zIHRvIHRoZQorY29tcGlsZXIgYnV0IG9ubHkgYSBzaW5nbGUgYC1hcmNoJyBvcHRpb24gdG8gdGhlIHByZXByb2Nlc3Nvci4gIExpa2UKK3RoaXM6CisKKyAgICAgLi9jb25maWd1cmUgQ0M9ImdjYyAtYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCAtYXJjaCBwcGMgLWFyY2ggcHBjNjQiIFwKKyAgICAgICAgICAgICAgICAgQ1hYPSJnKysgLWFyY2ggaTM4NiAtYXJjaCB4ODZfNjQgLWFyY2ggcHBjIC1hcmNoIHBwYzY0IiBcCisgICAgICAgICAgICAgICAgIENQUD0iZ2NjIC1FIiBDWFhDUFA9ImcrKyAtRSIKKworICAgVGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBwcm9kdWNlIHdvcmtpbmcgb3V0cHV0IGluIGFsbCBjYXNlcywgeW91CittYXkgaGF2ZSB0byBidWlsZCBvbmUgYXJjaGl0ZWN0dXJlIGF0IGEgdGltZSBhbmQgY29tYmluZSB0aGUgcmVzdWx0cwordXNpbmcgdGhlIGBsaXBvJyB0b29sIGlmIHlvdSBoYXZlIHByb2JsZW1zLgorCitJbnN0YWxsYXRpb24gTmFtZXMKKz09PT09PT09PT09PT09PT09PQorCisgICBCeSBkZWZhdWx0LCBgbWFrZSBpbnN0YWxsJyBpbnN0YWxscyB0aGUgcGFja2FnZSdzIGNvbW1hbmRzIHVuZGVyCitgL3Vzci9sb2NhbC9iaW4nLCBpbmNsdWRlIGZpbGVzIHVuZGVyIGAvdXNyL2xvY2FsL2luY2x1ZGUnLCBldGMuICBZb3UKK2NhbiBzcGVjaWZ5IGFuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBgL3Vzci9sb2NhbCcgYnkgZ2l2aW5nCitgY29uZmlndXJlJyB0aGUgb3B0aW9uIGAtLXByZWZpeD1QUkVGSVgnLCB3aGVyZSBQUkVGSVggbXVzdCBiZSBhbgorYWJzb2x1dGUgZmlsZSBuYW1lLgorCisgICBZb3UgY2FuIHNwZWNpZnkgc2VwYXJhdGUgaW5zdGFsbGF0aW9uIHByZWZpeGVzIGZvcgorYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzIGFuZCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMuICBJZiB5b3UKK3Bhc3MgdGhlIG9wdGlvbiBgLS1leGVjLXByZWZpeD1QUkVGSVgnIHRvIGBjb25maWd1cmUnLCB0aGUgcGFja2FnZSB1c2VzCitQUkVGSVggYXMgdGhlIHByZWZpeCBmb3IgaW5zdGFsbGluZyBwcm9ncmFtcyBhbmQgbGlicmFyaWVzLgorRG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZGF0YSBmaWxlcyBzdGlsbCB1c2UgdGhlIHJlZ3VsYXIgcHJlZml4LgorCisgICBJbiBhZGRpdGlvbiwgaWYgeW91IHVzZSBhbiB1bnVzdWFsIGRpcmVjdG9yeSBsYXlvdXQgeW91IGNhbiBnaXZlCitvcHRpb25zIGxpa2UgYC0tYmluZGlyPURJUicgdG8gc3BlY2lmeSBkaWZmZXJlbnQgdmFsdWVzIGZvciBwYXJ0aWN1bGFyCitraW5kcyBvZiBmaWxlcy4gIFJ1biBgY29uZmlndXJlIC0taGVscCcgZm9yIGEgbGlzdCBvZiB0aGUgZGlyZWN0b3JpZXMKK3lvdSBjYW4gc2V0IGFuZCB3aGF0IGtpbmRzIG9mIGZpbGVzIGdvIGluIHRoZW0uICBJbiBnZW5lcmFsLCB0aGUKK2RlZmF1bHQgZm9yIHRoZXNlIG9wdGlvbnMgaXMgZXhwcmVzc2VkIGluIHRlcm1zIG9mIGAke3ByZWZpeH0nLCBzbyB0aGF0CitzcGVjaWZ5aW5nIGp1c3QgYC0tcHJlZml4JyB3aWxsIGFmZmVjdCBhbGwgb2YgdGhlIG90aGVyIGRpcmVjdG9yeQorc3BlY2lmaWNhdGlvbnMgdGhhdCB3ZXJlIG5vdCBleHBsaWNpdGx5IHByb3ZpZGVkLgorCisgICBUaGUgbW9zdCBwb3J0YWJsZSB3YXkgdG8gYWZmZWN0IGluc3RhbGxhdGlvbiBsb2NhdGlvbnMgaXMgdG8gcGFzcyB0aGUKK2NvcnJlY3QgbG9jYXRpb25zIHRvIGBjb25maWd1cmUnOyBob3dldmVyLCBtYW55IHBhY2thZ2VzIHByb3ZpZGUgb25lIG9yCitib3RoIG9mIHRoZSBmb2xsb3dpbmcgc2hvcnRjdXRzIG9mIHBhc3NpbmcgdmFyaWFibGUgYXNzaWdubWVudHMgdG8gdGhlCitgbWFrZSBpbnN0YWxsJyBjb21tYW5kIGxpbmUgdG8gY2hhbmdlIGluc3RhbGxhdGlvbiBsb2NhdGlvbnMgd2l0aG91dAoraGF2aW5nIHRvIHJlY29uZmlndXJlIG9yIHJlY29tcGlsZS4KKworICAgVGhlIGZpcnN0IG1ldGhvZCBpbnZvbHZlcyBwcm92aWRpbmcgYW4gb3ZlcnJpZGUgdmFyaWFibGUgZm9yIGVhY2gKK2FmZmVjdGVkIGRpcmVjdG9yeS4gIEZvciBleGFtcGxlLCBgbWFrZSBpbnN0YWxsCitwcmVmaXg9L2FsdGVybmF0ZS9kaXJlY3RvcnknIHdpbGwgY2hvb3NlIGFuIGFsdGVybmF0ZSBsb2NhdGlvbiBmb3IgYWxsCitkaXJlY3RvcnkgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCB3ZXJlIGV4cHJlc3NlZCBpbiB0ZXJtcyBvZgorYCR7cHJlZml4fScuICBBbnkgZGlyZWN0b3JpZXMgdGhhdCB3ZXJlIHNwZWNpZmllZCBkdXJpbmcgYGNvbmZpZ3VyZScsCitidXQgbm90IGluIHRlcm1zIG9mIGAke3ByZWZpeH0nLCBtdXN0IGVhY2ggYmUgb3ZlcnJpZGRlbiBhdCBpbnN0YWxsCit0aW1lIGZvciB0aGUgZW50aXJlIGluc3RhbGxhdGlvbiB0byBiZSByZWxvY2F0ZWQuICBUaGUgYXBwcm9hY2ggb2YKK21ha2VmaWxlIHZhcmlhYmxlIG92ZXJyaWRlcyBmb3IgZWFjaCBkaXJlY3RvcnkgdmFyaWFibGUgaXMgcmVxdWlyZWQgYnkKK3RoZSBHTlUgQ29kaW5nIFN0YW5kYXJkcywgYW5kIGlkZWFsbHkgY2F1c2VzIG5vIHJlY29tcGlsYXRpb24uCitIb3dldmVyLCBzb21lIHBsYXRmb3JtcyBoYXZlIGtub3duIGxpbWl0YXRpb25zIHdpdGggdGhlIHNlbWFudGljcyBvZgorc2hhcmVkIGxpYnJhcmllcyB0aGF0IGVuZCB1cCByZXF1aXJpbmcgcmVjb21waWxhdGlvbiB3aGVuIHVzaW5nIHRoaXMKK21ldGhvZCwgcGFydGljdWxhcmx5IG5vdGljZWFibGUgaW4gcGFja2FnZXMgdGhhdCB1c2UgR05VIExpYnRvb2wuCisKKyAgIFRoZSBzZWNvbmQgbWV0aG9kIGludm9sdmVzIHByb3ZpZGluZyB0aGUgYERFU1RESVInIHZhcmlhYmxlLiAgRm9yCitleGFtcGxlLCBgbWFrZSBpbnN0YWxsIERFU1RESVI9L2FsdGVybmF0ZS9kaXJlY3RvcnknIHdpbGwgcHJlcGVuZAorYC9hbHRlcm5hdGUvZGlyZWN0b3J5JyBiZWZvcmUgYWxsIGluc3RhbGxhdGlvbiBuYW1lcy4gIFRoZSBhcHByb2FjaCBvZgorYERFU1RESVInIG92ZXJyaWRlcyBpcyBub3QgcmVxdWlyZWQgYnkgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLCBhbmQKK2RvZXMgbm90IHdvcmsgb24gcGxhdGZvcm1zIHRoYXQgaGF2ZSBkcml2ZSBsZXR0ZXJzLiAgT24gdGhlIG90aGVyIGhhbmQsCitpdCBkb2VzIGJldHRlciBhdCBhdm9pZGluZyByZWNvbXBpbGF0aW9uIGlzc3VlcywgYW5kIHdvcmtzIHdlbGwgZXZlbgord2hlbiBzb21lIGRpcmVjdG9yeSBvcHRpb25zIHdlcmUgbm90IHNwZWNpZmllZCBpbiB0ZXJtcyBvZiBgJHtwcmVmaXh9JworYXQgYGNvbmZpZ3VyZScgdGltZS4KKworT3B0aW9uYWwgRmVhdHVyZXMKKz09PT09PT09PT09PT09PT09CisKKyAgIElmIHRoZSBwYWNrYWdlIHN1cHBvcnRzIGl0LCB5b3UgY2FuIGNhdXNlIHByb2dyYW1zIHRvIGJlIGluc3RhbGxlZAord2l0aCBhbiBleHRyYSBwcmVmaXggb3Igc3VmZml4IG9uIHRoZWlyIG5hbWVzIGJ5IGdpdmluZyBgY29uZmlndXJlJyB0aGUKK29wdGlvbiBgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVgnIG9yIGAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCcuCisKKyAgIFNvbWUgcGFja2FnZXMgcGF5IGF0dGVudGlvbiB0byBgLS1lbmFibGUtRkVBVFVSRScgb3B0aW9ucyB0bworYGNvbmZpZ3VyZScsIHdoZXJlIEZFQVRVUkUgaW5kaWNhdGVzIGFuIG9wdGlvbmFsIHBhcnQgb2YgdGhlIHBhY2thZ2UuCitUaGV5IG1heSBhbHNvIHBheSBhdHRlbnRpb24gdG8gYC0td2l0aC1QQUNLQUdFJyBvcHRpb25zLCB3aGVyZSBQQUNLQUdFCitpcyBzb21ldGhpbmcgbGlrZSBgZ251LWFzJyBvciBgeCcgKGZvciB0aGUgWCBXaW5kb3cgU3lzdGVtKS4gIFRoZQorYFJFQURNRScgc2hvdWxkIG1lbnRpb24gYW55IGAtLWVuYWJsZS0nIGFuZCBgLS13aXRoLScgb3B0aW9ucyB0aGF0IHRoZQorcGFja2FnZSByZWNvZ25pemVzLgorCisgICBGb3IgcGFja2FnZXMgdGhhdCB1c2UgdGhlIFggV2luZG93IFN5c3RlbSwgYGNvbmZpZ3VyZScgY2FuIHVzdWFsbHkKK2ZpbmQgdGhlIFggaW5jbHVkZSBhbmQgbGlicmFyeSBmaWxlcyBhdXRvbWF0aWNhbGx5LCBidXQgaWYgaXQgZG9lc24ndCwKK3lvdSBjYW4gdXNlIHRoZSBgY29uZmlndXJlJyBvcHRpb25zIGAtLXgtaW5jbHVkZXM9RElSJyBhbmQKK2AtLXgtbGlicmFyaWVzPURJUicgdG8gc3BlY2lmeSB0aGVpciBsb2NhdGlvbnMuCisKKyAgIFNvbWUgcGFja2FnZXMgb2ZmZXIgdGhlIGFiaWxpdHkgdG8gY29uZmlndXJlIGhvdyB2ZXJib3NlIHRoZQorZXhlY3V0aW9uIG9mIGBtYWtlJyB3aWxsIGJlLiAgRm9yIHRoZXNlIHBhY2thZ2VzLCBydW5uaW5nIGAuL2NvbmZpZ3VyZQorLS1lbmFibGUtc2lsZW50LXJ1bGVzJyBzZXRzIHRoZSBkZWZhdWx0IHRvIG1pbmltYWwgb3V0cHV0LCB3aGljaCBjYW4gYmUKK292ZXJyaWRkZW4gd2l0aCBgbWFrZSBWPTEnOyB3aGlsZSBydW5uaW5nIGAuL2NvbmZpZ3VyZQorLS1kaXNhYmxlLXNpbGVudC1ydWxlcycgc2V0cyB0aGUgZGVmYXVsdCB0byB2ZXJib3NlLCB3aGljaCBjYW4gYmUKK292ZXJyaWRkZW4gd2l0aCBgbWFrZSBWPTAnLgorCitQYXJ0aWN1bGFyIHN5c3RlbXMKKz09PT09PT09PT09PT09PT09PQorCisgICBPbiBIUC1VWCwgdGhlIGRlZmF1bHQgQyBjb21waWxlciBpcyBub3QgQU5TSSBDIGNvbXBhdGlibGUuICBJZiBHTlUKK0NDIGlzIG5vdCBpbnN0YWxsZWQsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgZm9sbG93aW5nIG9wdGlvbnMgaW4KK29yZGVyIHRvIHVzZSBhbiBBTlNJIEMgY29tcGlsZXI6CisKKyAgICAgLi9jb25maWd1cmUgQ0M9ImNjIC1BZSAtRF9YT1BFTl9TT1VSQ0U9NTAwIgorCithbmQgaWYgdGhhdCBkb2Vzbid0IHdvcmssIGluc3RhbGwgcHJlLWJ1aWx0IGJpbmFyaWVzIG9mIEdDQyBmb3IgSFAtVVguCisKKyAgIEhQLVVYIGBtYWtlJyB1cGRhdGVzIHRhcmdldHMgd2hpY2ggaGF2ZSB0aGUgc2FtZSB0aW1lIHN0YW1wcyBhcwordGhlaXIgcHJlcmVxdWlzaXRlcywgd2hpY2ggbWFrZXMgaXQgZ2VuZXJhbGx5IHVudXNhYmxlIHdoZW4gc2hpcHBlZAorZ2VuZXJhdGVkIGZpbGVzIHN1Y2ggYXMgYGNvbmZpZ3VyZScgYXJlIGludm9sdmVkLiAgVXNlIEdOVSBgbWFrZScKK2luc3RlYWQuCisKKyAgIE9uIE9TRi8xIGEuay5hLiBUcnU2NCwgc29tZSB2ZXJzaW9ucyBvZiB0aGUgZGVmYXVsdCBDIGNvbXBpbGVyIGNhbm5vdAorcGFyc2UgaXRzIGA8d2NoYXIuaD4nIGhlYWRlciBmaWxlLiAgVGhlIG9wdGlvbiBgLW5vZHRrJyBjYW4gYmUgdXNlZCBhcworYSB3b3JrYXJvdW5kLiAgSWYgR05VIENDIGlzIG5vdCBpbnN0YWxsZWQsIGl0IGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZAordG8gdHJ5CisKKyAgICAgLi9jb25maWd1cmUgQ0M9ImNjIgorCithbmQgaWYgdGhhdCBkb2Vzbid0IHdvcmssIHRyeQorCisgICAgIC4vY29uZmlndXJlIENDPSJjYyAtbm9kdGsiCisKKyAgIE9uIFNvbGFyaXMsIGRvbid0IHB1dCBgL3Vzci91Y2InIGVhcmx5IGluIHlvdXIgYFBBVEgnLiAgVGhpcworZGlyZWN0b3J5IGNvbnRhaW5zIHNldmVyYWwgZHlzZnVuY3Rpb25hbCBwcm9ncmFtczsgd29ya2luZyB2YXJpYW50cyBvZgordGhlc2UgcHJvZ3JhbXMgYXJlIGF2YWlsYWJsZSBpbiBgL3Vzci9iaW4nLiAgU28sIGlmIHlvdSBuZWVkIGAvdXNyL3VjYicKK2luIHlvdXIgYFBBVEgnLCBwdXQgaXQgX2FmdGVyXyBgL3Vzci9iaW4nLgorCisgICBPbiBIYWlrdSwgc29mdHdhcmUgaW5zdGFsbGVkIGZvciBhbGwgdXNlcnMgZ29lcyBpbiBgL2Jvb3QvY29tbW9uJywKK25vdCBgL3Vzci9sb2NhbCcuICBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGZvbGxvd2luZyBvcHRpb25zOgorCisgICAgIC4vY29uZmlndXJlIC0tcHJlZml4PS9ib290L2NvbW1vbgorCitTcGVjaWZ5aW5nIHRoZSBTeXN0ZW0gVHlwZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgVGhlcmUgbWF5IGJlIHNvbWUgZmVhdHVyZXMgYGNvbmZpZ3VyZScgY2Fubm90IGZpZ3VyZSBvdXQKK2F1dG9tYXRpY2FsbHksIGJ1dCBuZWVkcyB0byBkZXRlcm1pbmUgYnkgdGhlIHR5cGUgb2YgbWFjaGluZSB0aGUgcGFja2FnZQord2lsbCBydW4gb24uICBVc3VhbGx5LCBhc3N1bWluZyB0aGUgcGFja2FnZSBpcyBidWlsdCB0byBiZSBydW4gb24gdGhlCitfc2FtZV8gYXJjaGl0ZWN0dXJlcywgYGNvbmZpZ3VyZScgY2FuIGZpZ3VyZSB0aGF0IG91dCwgYnV0IGlmIGl0IHByaW50cworYSBtZXNzYWdlIHNheWluZyBpdCBjYW5ub3QgZ3Vlc3MgdGhlIG1hY2hpbmUgdHlwZSwgZ2l2ZSBpdCB0aGUKK2AtLWJ1aWxkPVRZUEUnIG9wdGlvbi4gIFRZUEUgY2FuIGVpdGhlciBiZSBhIHNob3J0IG5hbWUgZm9yIHRoZSBzeXN0ZW0KK3R5cGUsIHN1Y2ggYXMgYHN1bjQnLCBvciBhIGNhbm9uaWNhbCBuYW1lIHdoaWNoIGhhcyB0aGUgZm9ybToKKworICAgICBDUFUtQ09NUEFOWS1TWVNURU0KKword2hlcmUgU1lTVEVNIGNhbiBoYXZlIG9uZSBvZiB0aGVzZSBmb3JtczoKKworICAgICBPUworICAgICBLRVJORUwtT1MKKworICAgU2VlIHRoZSBmaWxlIGBjb25maWcuc3ViJyBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBlYWNoIGZpZWxkLiAgSWYKK2Bjb25maWcuc3ViJyBpc24ndCBpbmNsdWRlZCBpbiB0aGlzIHBhY2thZ2UsIHRoZW4gdGhpcyBwYWNrYWdlIGRvZXNuJ3QKK25lZWQgdG8ga25vdyB0aGUgbWFjaGluZSB0eXBlLgorCisgICBJZiB5b3UgYXJlIF9idWlsZGluZ18gY29tcGlsZXIgdG9vbHMgZm9yIGNyb3NzLWNvbXBpbGluZywgeW91IHNob3VsZAordXNlIHRoZSBvcHRpb24gYC0tdGFyZ2V0PVRZUEUnIHRvIHNlbGVjdCB0aGUgdHlwZSBvZiBzeXN0ZW0gdGhleSB3aWxsCitwcm9kdWNlIGNvZGUgZm9yLgorCisgICBJZiB5b3Ugd2FudCB0byBfdXNlXyBhIGNyb3NzIGNvbXBpbGVyLCB0aGF0IGdlbmVyYXRlcyBjb2RlIGZvciBhCitwbGF0Zm9ybSBkaWZmZXJlbnQgZnJvbSB0aGUgYnVpbGQgcGxhdGZvcm0sIHlvdSBzaG91bGQgc3BlY2lmeSB0aGUKKyJob3N0IiBwbGF0Zm9ybSAoaS5lLiwgdGhhdCBvbiB3aGljaCB0aGUgZ2VuZXJhdGVkIHByb2dyYW1zIHdpbGwKK2V2ZW50dWFsbHkgYmUgcnVuKSB3aXRoIGAtLWhvc3Q9VFlQRScuCisKK1NoYXJpbmcgRGVmYXVsdHMKKz09PT09PT09PT09PT09PT0KKworICAgSWYgeW91IHdhbnQgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBgY29uZmlndXJlJyBzY3JpcHRzIHRvIHNoYXJlLAoreW91IGNhbiBjcmVhdGUgYSBzaXRlIHNoZWxsIHNjcmlwdCBjYWxsZWQgYGNvbmZpZy5zaXRlJyB0aGF0IGdpdmVzCitkZWZhdWx0IHZhbHVlcyBmb3IgdmFyaWFibGVzIGxpa2UgYENDJywgYGNhY2hlX2ZpbGUnLCBhbmQgYHByZWZpeCcuCitgY29uZmlndXJlJyBsb29rcyBmb3IgYFBSRUZJWC9zaGFyZS9jb25maWcuc2l0ZScgaWYgaXQgZXhpc3RzLCB0aGVuCitgUFJFRklYL2V0Yy9jb25maWcuc2l0ZScgaWYgaXQgZXhpc3RzLiAgT3IsIHlvdSBjYW4gc2V0IHRoZQorYENPTkZJR19TSVRFJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgbG9jYXRpb24gb2YgdGhlIHNpdGUgc2NyaXB0LgorQSB3YXJuaW5nOiBub3QgYWxsIGBjb25maWd1cmUnIHNjcmlwdHMgbG9vayBmb3IgYSBzaXRlIHNjcmlwdC4KKworRGVmaW5pbmcgVmFyaWFibGVzCis9PT09PT09PT09PT09PT09PT0KKworICAgVmFyaWFibGVzIG5vdCBkZWZpbmVkIGluIGEgc2l0ZSBzaGVsbCBzY3JpcHQgY2FuIGJlIHNldCBpbiB0aGUKK2Vudmlyb25tZW50IHBhc3NlZCB0byBgY29uZmlndXJlJy4gIEhvd2V2ZXIsIHNvbWUgcGFja2FnZXMgbWF5IHJ1bgorY29uZmlndXJlIGFnYWluIGR1cmluZyB0aGUgYnVpbGQsIGFuZCB0aGUgY3VzdG9taXplZCB2YWx1ZXMgb2YgdGhlc2UKK3ZhcmlhYmxlcyBtYXkgYmUgbG9zdC4gIEluIG9yZGVyIHRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgeW91IHNob3VsZCBzZXQKK3RoZW0gaW4gdGhlIGBjb25maWd1cmUnIGNvbW1hbmQgbGluZSwgdXNpbmcgYFZBUj12YWx1ZScuICBGb3IgZXhhbXBsZToKKworICAgICAuL2NvbmZpZ3VyZSBDQz0vdXNyL2xvY2FsMi9iaW4vZ2NjCisKK2NhdXNlcyB0aGUgc3BlY2lmaWVkIGBnY2MnIHRvIGJlIHVzZWQgYXMgdGhlIEMgY29tcGlsZXIgKHVubGVzcyBpdCBpcworb3ZlcnJpZGRlbiBpbiB0aGUgc2l0ZSBzaGVsbCBzY3JpcHQpLgorCitVbmZvcnR1bmF0ZWx5LCB0aGlzIHRlY2huaXF1ZSBkb2VzIG5vdCB3b3JrIGZvciBgQ09ORklHX1NIRUxMJyBkdWUgdG8KK2FuIEF1dG9jb25mIGxpbWl0YXRpb24uICBVbnRpbCB0aGUgbGltaXRhdGlvbiBpcyBsaWZ0ZWQsIHlvdSBjYW4gdXNlCit0aGlzIHdvcmthcm91bmQ6CisKKyAgICAgQ09ORklHX1NIRUxMPS9iaW4vYmFzaCAuL2NvbmZpZ3VyZSBDT05GSUdfU0hFTEw9L2Jpbi9iYXNoCisKK2Bjb25maWd1cmUnIEludm9jYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT0KKworICAgYGNvbmZpZ3VyZScgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29udHJvbCBob3cgaXQKK29wZXJhdGVzLgorCitgLS1oZWxwJworYC1oJworICAgICBQcmludCBhIHN1bW1hcnkgb2YgYWxsIG9mIHRoZSBvcHRpb25zIHRvIGBjb25maWd1cmUnLCBhbmQgZXhpdC4KKworYC0taGVscD1zaG9ydCcKK2AtLWhlbHA9cmVjdXJzaXZlJworICAgICBQcmludCBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdW5pcXVlIHRvIHRoaXMgcGFja2FnZSdzCisgICAgIGBjb25maWd1cmUnLCBhbmQgZXhpdC4gIFRoZSBgc2hvcnQnIHZhcmlhbnQgbGlzdHMgb3B0aW9ucyB1c2VkCisgICAgIG9ubHkgaW4gdGhlIHRvcCBsZXZlbCwgd2hpbGUgdGhlIGByZWN1cnNpdmUnIHZhcmlhbnQgbGlzdHMgb3B0aW9ucworICAgICBhbHNvIHByZXNlbnQgaW4gYW55IG5lc3RlZCBwYWNrYWdlcy4KKworYC0tdmVyc2lvbicKK2AtVicKKyAgICAgUHJpbnQgdGhlIHZlcnNpb24gb2YgQXV0b2NvbmYgdXNlZCB0byBnZW5lcmF0ZSB0aGUgYGNvbmZpZ3VyZScKKyAgICAgc2NyaXB0LCBhbmQgZXhpdC4KKworYC0tY2FjaGUtZmlsZT1GSUxFJworICAgICBFbmFibGUgdGhlIGNhY2hlOiB1c2UgYW5kIHNhdmUgdGhlIHJlc3VsdHMgb2YgdGhlIHRlc3RzIGluIEZJTEUsCisgICAgIHRyYWRpdGlvbmFsbHkgYGNvbmZpZy5jYWNoZScuICBGSUxFIGRlZmF1bHRzIHRvIGAvZGV2L251bGwnIHRvCisgICAgIGRpc2FibGUgY2FjaGluZy4KKworYC0tY29uZmlnLWNhY2hlJworYC1DJworICAgICBBbGlhcyBmb3IgYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnLgorCitgLS1xdWlldCcKK2AtLXNpbGVudCcKK2AtcScKKyAgICAgRG8gbm90IHByaW50IG1lc3NhZ2VzIHNheWluZyB3aGljaCBjaGVja3MgYXJlIGJlaW5nIG1hZGUuICBUbworICAgICBzdXBwcmVzcyBhbGwgbm9ybWFsIG91dHB1dCwgcmVkaXJlY3QgaXQgdG8gYC9kZXYvbnVsbCcgKGFueSBlcnJvcgorICAgICBtZXNzYWdlcyB3aWxsIHN0aWxsIGJlIHNob3duKS4KKworYC0tc3JjZGlyPURJUicKKyAgICAgTG9vayBmb3IgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBpbiBkaXJlY3RvcnkgRElSLiAgVXN1YWxseQorICAgICBgY29uZmlndXJlJyBjYW4gZGV0ZXJtaW5lIHRoYXQgZGlyZWN0b3J5IGF1dG9tYXRpY2FsbHkuCisKK2AtLXByZWZpeD1ESVInCisgICAgIFVzZSBESVIgYXMgdGhlIGluc3RhbGxhdGlvbiBwcmVmaXguICAqbm90ZSBJbnN0YWxsYXRpb24gTmFtZXM6OgorICAgICBmb3IgbW9yZSBkZXRhaWxzLCBpbmNsdWRpbmcgb3RoZXIgb3B0aW9ucyBhdmFpbGFibGUgZm9yIGZpbmUtdHVuaW5nCisgICAgIHRoZSBpbnN0YWxsYXRpb24gbG9jYXRpb25zLgorCitgLS1uby1jcmVhdGUnCitgLW4nCisgICAgIFJ1biB0aGUgY29uZmlndXJlIGNoZWNrcywgYnV0IHN0b3AgYmVmb3JlIGNyZWF0aW5nIGFueSBvdXRwdXQKKyAgICAgZmlsZXMuCisKK2Bjb25maWd1cmUnIGFsc28gYWNjZXB0cyBzb21lIG90aGVyLCBub3Qgd2lkZWx5IHVzZWZ1bCwgb3B0aW9ucy4gIFJ1bgorYGNvbmZpZ3VyZSAtLWhlbHAnIGZvciBtb3JlIGRldGFpbHMuCmRpZmYgLS1naXQgYS9kaXN0Mi9MSUNFTkNFIGIvZGlzdDIvTElDRU5DRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjAwYTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvTElDRU5DRQpAQCAtMCwwICsxLDgzIEBACitQQ1JFMiBMSUNFTkNFCistLS0tLS0tLS0tLS0tCisKK1BDUkUyIGlzIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHN5bnRheAorYW5kIHNlbWFudGljcyBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2Ugb2YgdGhlIFBlcmwgNSBsYW5ndWFnZS4KKworUmVsZWFzZSAxMCBvZiBQQ1JFMiBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlICJCU0QiIGxpY2VuY2UsIGFzCitzcGVjaWZpZWQgYmVsb3cuIFRoZSBkb2N1bWVudGF0aW9uIGZvciBQQ1JFMiwgc3VwcGxpZWQgaW4gdGhlICJkb2MiCitkaXJlY3RvcnksIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFzIHRoZSBzb2Z0d2FyZSBpdHNlbGYuIFRoZSBkYXRhCitpbiB0aGUgdGVzdGRhdGEgZGlyZWN0b3J5IGlzIG5vdCBjb3B5cmlnaHRlZCBhbmQgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK1RoZSBiYXNpYyBsaWJyYXJ5IGZ1bmN0aW9ucyBhcmUgd3JpdHRlbiBpbiBDIGFuZCBhcmUgZnJlZXN0YW5kaW5nLiBBbHNvCitpbmNsdWRlZCBpbiB0aGUgZGlzdHJpYnV0aW9uIGlzIGEganVzdC1pbi10aW1lIGNvbXBpbGVyIHRoYXQgY2FuIGJlIHVzZWQgdG8KK29wdGltaXplIHBhdHRlcm4gbWF0Y2hpbmcuIFRoaXMgaXMgYW4gb3B0aW9uYWwgZmVhdHVyZSB0aGF0IGNhbiBiZSBvbWl0dGVkIHdoZW4KK3RoZSBsaWJyYXJ5IGlzIGJ1aWx0LgorCisKK1RIRSBCQVNJQyBMSUJSQVJZIEZVTkNUSU9OUworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dyaXR0ZW4gYnk6ICAgICAgIFBoaWxpcCBIYXplbAorRW1haWwgbG9jYWwgcGFydDogcGgxMAorRW1haWwgZG9tYWluOiAgICAgY2FtLmFjLnVrCisKK1VuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIENvbXB1dGluZyBTZXJ2aWNlLAorQ2FtYnJpZGdlLCBFbmdsYW5kLgorCitDb3B5cmlnaHQgKGMpIDE5OTctMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworCitQQ1JFMiBKVVNULUlOLVRJTUUgQ09NUElMQVRJT04gU1VQUE9SVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV3JpdHRlbiBieTogICAgICAgWm9sdGFuIEhlcmN6ZWcKK0VtYWlsIGxvY2FsIHBhcnQ6IGh6bWVzdGVyCitFbWFpbiBkb21haW46ICAgICBmcmVlbWFpbC5odQorCitDb3B5cmlnaHQoYykgMjAxMC0yMDE2IFpvbHRhbiBIZXJjemVnCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCisKK1NUQUNLLUxFU1MgSlVTVC1JTi1USU1FIENPTVBJTEVSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXcml0dGVuIGJ5OiAgICAgICBab2x0YW4gSGVyY3plZworRW1haWwgbG9jYWwgcGFydDogaHptZXN0ZXIKK0VtYWluIGRvbWFpbjogICAgIGZyZWVtYWlsLmh1CisKK0NvcHlyaWdodChjKSAyMDA5LTIwMTYgWm9sdGFuIEhlcmN6ZWcKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKKworVEhFICJCU0QiIExJQ0VOQ0UKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBub3IgdGhlIG5hbWVzIG9mIGFueQorICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICAgICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK0VuZApkaWZmIC0tZ2l0IGEvZGlzdDIvTWFrZWZpbGUuYW0gYi9kaXN0Mi9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTc3YmEwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw3OTYgQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbi4KKworQVVUT01BS0VfT1BUSU9OUyA9IHN1YmRpci1vYmplY3RzCitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorQU1fQ1BQRkxBR1MgPSAtSSQoYnVpbGRkaXIpL3NyYyAtSSQoc3JjZGlyKS9zcmMKKworIyMgU3BlY2lmeSB0aGUgZG9jdW1lbnRhdGlvbiBmaWxlcyB0aGF0IGFyZSBkaXN0cmlidXRlZC4KKworZGlzdF9kb2NfREFUQSA9IFwKKyAgQVVUSE9SUyBcCisgIENPUFlJTkcgXAorICBDaGFuZ2VMb2cgXAorICBMSUNFTkNFIFwKKyAgTkVXUyBcCisgIFJFQURNRSBcCisgIGRvYy9wY3JlMi50eHQgXAorICBkb2MvcGNyZTItY29uZmlnLnR4dCBcCisgIGRvYy9wY3JlMmdyZXAudHh0IFwKKyAgZG9jL3BjcmUydGVzdC50eHQKKworZGlzdF9odG1sX0RBVEEgPSBcCisgIGRvYy9odG1sL05PTi1BVVRPVE9PTFMtQlVJTEQudHh0IFwKKyAgZG9jL2h0bWwvUkVBRE1FLnR4dCBcCisgIGRvYy9odG1sL2luZGV4Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMi1jb25maWcuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9jYWxsb3V0X2VudW1lcmF0ZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfY29kZV9mcmVlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9jb21waWxlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9jb21waWxlX2NvbnRleHRfY29weS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfY29tcGlsZV9jb250ZXh0X2ZyZWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2NvbmZpZy5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfZGZhX21hdGNoLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9nZW5lcmFsX2NvbnRleHRfY29weS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2dldF9lcnJvcl9tZXNzYWdlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9nZXRfbWFyay5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfZ2V0X292ZWN0b3JfY291bnQuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2dldF9zdGFydGNoYXIuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2ppdF9jb21waWxlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9qaXRfbWF0Y2guaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2ppdF9zdGFja19hc3NpZ24uaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2ppdF9zdGFja19jcmVhdGUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2ppdF9zdGFja19mcmVlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9tYWtldGFibGVzLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9tYXRjaC5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9tYXRjaF9kYXRhX2ZyZWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3BhdHRlcm5faW5mby5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc2VyaWFsaXplX2RlY29kZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc2VyaWFsaXplX2VuY29kZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc2VyaWFsaXplX2ZyZWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXRfYnNyLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXRfY2FsbG91dC5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXMuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZC5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc2V0X21hdGNoX2xpbWl0Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXRfb2Zmc2V0X2xpbWl0Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXRfbmV3bGluZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXRfcmVjdXJzaW9uX2xpbWl0Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zdWJzdGl0dXRlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfZnJlZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2Nhbi5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyYXBpLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMmJ1aWxkLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMmNhbGxvdXQuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyY29tcGF0Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMmRlbW8uaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyZ3JlcC5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJqaXQuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUybGltaXRzLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMm1hdGNoaW5nLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMnBhcnRpYWwuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUycGF0dGVybi5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJwZXJmb3JtLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMnBvc2l4Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMnNhbXBsZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJzZXJpYWxpemUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyc3RhY2suaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyc3ludGF4Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMnRlc3QuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUydW5pY29kZS5odG1sCisKK2Rpc3RfbWFuX01BTlMgPSBcCisgIGRvYy9wY3JlMi1jb25maWcuMSBcCisgIGRvYy9wY3JlMi4zIFwKKyAgZG9jL3BjcmUyX2NhbGxvdXRfZW51bWVyYXRlLjMgXAorICBkb2MvcGNyZTJfY29kZV9mcmVlLjMgXAorICBkb2MvcGNyZTJfY29tcGlsZS4zIFwKKyAgZG9jL3BjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5LjMgXAorICBkb2MvcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZS4zIFwKKyAgZG9jL3BjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlLjMgXAorICBkb2MvcGNyZTJfY29uZmlnLjMgXAorICBkb2MvcGNyZTJfZGZhX21hdGNoLjMgXAorICBkb2MvcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHkuMyBcCisgIGRvYy9wY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlLjMgXAorICBkb2MvcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUuMyBcCisgIGRvYy9wY3JlMl9nZXRfZXJyb3JfbWVzc2FnZS4zIFwKKyAgZG9jL3BjcmUyX2dldF9tYXJrLjMgXAorICBkb2MvcGNyZTJfZ2V0X292ZWN0b3JfY291bnQuMyBcCisgIGRvYy9wY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyLjMgXAorICBkb2MvcGNyZTJfZ2V0X3N0YXJ0Y2hhci4zIFwKKyAgZG9jL3BjcmUyX2ppdF9jb21waWxlLjMgXAorICBkb2MvcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeS4zIFwKKyAgZG9jL3BjcmUyX2ppdF9tYXRjaC4zIFwKKyAgZG9jL3BjcmUyX2ppdF9zdGFja19hc3NpZ24uMyBcCisgIGRvYy9wY3JlMl9qaXRfc3RhY2tfY3JlYXRlLjMgXAorICBkb2MvcGNyZTJfaml0X3N0YWNrX2ZyZWUuMyBcCisgIGRvYy9wY3JlMl9tYWtldGFibGVzLjMgXAorICBkb2MvcGNyZTJfbWF0Y2guMyBcCisgIGRvYy9wY3JlMl9tYXRjaF9jb250ZXh0X2NvcHkuMyBcCisgIGRvYy9wY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZS4zIFwKKyAgZG9jL3BjcmUyX21hdGNoX2NvbnRleHRfZnJlZS4zIFwKKyAgZG9jL3BjcmUyX21hdGNoX2RhdGFfY3JlYXRlLjMgXAorICBkb2MvcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuLjMgXAorICBkb2MvcGNyZTJfbWF0Y2hfZGF0YV9mcmVlLjMgXAorICBkb2MvcGNyZTJfcGF0dGVybl9pbmZvLjMgXAorICBkb2MvcGNyZTJfc2VyaWFsaXplX2RlY29kZS4zIFwKKyAgZG9jL3BjcmUyX3NlcmlhbGl6ZV9lbmNvZGUuMyBcCisgIGRvYy9wY3JlMl9zZXJpYWxpemVfZnJlZS4zIFwKKyAgZG9jL3BjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzLjMgXAorICBkb2MvcGNyZTJfc2V0X2Jzci4zIFwKKyAgZG9jL3BjcmUyX3NldF9jYWxsb3V0LjMgXAorICBkb2MvcGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXMuMyBcCisgIGRvYy9wY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQuMyBcCisgIGRvYy9wY3JlMl9zZXRfbWF0Y2hfbGltaXQuMyBcCisgIGRvYy9wY3JlMl9zZXRfb2Zmc2V0X2xpbWl0LjMgXAorICBkb2MvcGNyZTJfc2V0X25ld2xpbmUuMyBcCisgIGRvYy9wY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQuMyBcCisgIGRvYy9wY3JlMl9zZXRfcmVjdXJzaW9uX2xpbWl0LjMgXAorICBkb2MvcGNyZTJfc2V0X3JlY3Vyc2lvbl9tZW1vcnlfbWFuYWdlbWVudC4zIFwKKyAgZG9jL3BjcmUyX3N1YnN0aXR1dGUuMyBcCisgIGRvYy9wY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUuMyBcCisgIGRvYy9wY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlci4zIFwKKyAgZG9jL3BjcmUyX3N1YnN0cmluZ19mcmVlLjMgXAorICBkb2MvcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUuMyBcCisgIGRvYy9wY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyLjMgXAorICBkb2MvcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUuMyBcCisgIGRvYy9wY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyLjMgXAorICBkb2MvcGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZS4zIFwKKyAgZG9jL3BjcmUyX3N1YnN0cmluZ19saXN0X2dldC4zIFwKKyAgZG9jL3BjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2Nhbi4zIFwKKyAgZG9jL3BjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lLjMgXAorICBkb2MvcGNyZTJhcGkuMyBcCisgIGRvYy9wY3JlMmJ1aWxkLjMgXAorICBkb2MvcGNyZTJjYWxsb3V0LjMgXAorICBkb2MvcGNyZTJjb21wYXQuMyBcCisgIGRvYy9wY3JlMmRlbW8uMyBcCisgIGRvYy9wY3JlMmdyZXAuMSBcCisgIGRvYy9wY3JlMmppdC4zIFwKKyAgZG9jL3BjcmUybGltaXRzLjMgXAorICBkb2MvcGNyZTJtYXRjaGluZy4zIFwKKyAgZG9jL3BjcmUycGFydGlhbC4zIFwKKyAgZG9jL3BjcmUycGF0dGVybi4zIFwKKyAgZG9jL3BjcmUycGVyZm9ybS4zIFwKKyAgZG9jL3BjcmUycG9zaXguMyBcCisgIGRvYy9wY3JlMnNhbXBsZS4zIFwKKyAgZG9jL3BjcmUyc2VyaWFsaXplLjMgXAorICBkb2MvcGNyZTJzdGFjay4zIFwKKyAgZG9jL3BjcmUyc3ludGF4LjMgXAorICBkb2MvcGNyZTJ0ZXN0LjEgXAorICBkb2MvcGNyZTJ1bmljb2RlLjMKKworIyBUaGUgTGlidG9vbCBsaWJyYXJpZXMgdG8gaW5zdGFsbC4gIFdlJ2xsIGFkZCB0byB0aGlzIGxhdGVyLgorCitsaWJfTFRMSUJSQVJJRVMgPQorCisjIFVuaXQgdGVzdHMgeW91IHdhbnQgdG8gcnVuIHdoZW4gcGVvcGxlIHR5cGUgJ21ha2UgY2hlY2snLgorIyBURVNUUyBpcyBmb3IgYmluYXJ5IHVuaXQgdGVzdHMsIGNoZWNrX1NDUklQVFMgZm9yIHNjcmlwdC1iYXNlZCB0ZXN0cworCitURVNUUyA9CitjaGVja19TQ1JJUFRTID0KK2Rpc3Rfbm9pbnN0X1NDUklQVFMgPQorCisjIFNvbWUgb2YgdGhlIGJpbmFyaWVzIHdlIG1ha2UgYXJlIHRvIGJlIGluc3RhbGxlZCwgYW5kIG90aGVycyBhcmUKKyMgKG5vbi11c2VyLXZpc2libGUpIGhlbHBlciBwcm9ncmFtcyBuZWVkZWQgdG8gYnVpbGQgdGhlIGxpYnJhcmllcy4KKworYmluX1BST0dSQU1TID0KK25vaW5zdF9QUk9HUkFNUyA9CisKKyMgQWRkaXRpb25hbCBmaWxlcyB0byBkZWxldGUgb24gJ21ha2UgY2xlYW4nLCAnbWFrZSBkaXN0Y2xlYW4nLAorIyBhbmQgJ21ha2UgbWFpbnRhaW5lci1jbGVhbicuCisKK0NMRUFORklMRVMgPQorRElTVENMRUFORklMRVMgPSBzcmMvY29uZmlnLmguaW5+IGNvbmZpZy5oCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyA9CisKKyMgQWRkaXRpb25hbCBmaWxlcyB0byBidW5kbGUgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBvdmVyIGFuZCBhYm92ZSB3aGF0CisjIHRoZSBBdXRvdG9vbHMgaW5jbHVkZSBieSBkZWZhdWx0LgorCitFWFRSQV9ESVNUID0KKworIyBUaGVzZSBmaWxlcyBjb250YWluIGFkZGl0aW9uYWwgbTQgbWFjcm9zIHRoYXQgYXJlIHVzZWQgYnkgYXV0b2NvbmYuCisKK0VYVFJBX0RJU1QgKz0gXAorICBtNC9heF9wdGhyZWFkLm00IG00L3BjcmUyX3Zpc2liaWxpdHkubTQKKworIyBUaGVzZSBmaWxlcyBjb250YWluIG1haW50ZW5hbmNlIGluZm9ybWF0aW9uCisKK0VYVFJBX0RJU1QgKz0gXAorICBOT04tQVVUT1RPT0xTLUJVSUxEIFwKKyAgSEFDS0lORworCisjIFRoZXNlIGZpbGVzIGFyZSB1c2VkIGluIHRoZSBwcmVwYXJhdGlvbiBvZiBhIHJlbGVhc2UKKworRVhUUkFfRElTVCArPSBcCisgIFByZXBhcmVSZWxlYXNlIFwKKyAgQ2hlY2tNYW4gXAorICBDbGVhblR4dCBcCisgIERldHJhaWwgXAorICAxMzJodG1sIFwKKyAgZG9jL2luZGV4Lmh0bWwuc3JjCisKKyMgVGhlc2UgZmlsZXMgYXJlIHVzYWJsZSB2ZXJzaW9ucyBvZiBwY3JlMi5oIGFuZCBjb25maWcuaCB0aGF0IGFyZSBkaXN0cmlidXRlZAorIyBmb3IgdGhlIGJlbmVmaXQgb2YgcGVvcGxlIHdobyBhcmUgYnVpbGRpbmcgUENSRTIgbWFudWFsbHksIHdpdGhvdXQgdGhlCisjIEF1dG90b29scyBzdXBwb3J0LgorCitFWFRSQV9ESVNUICs9IFwKKyAgc3JjL3BjcmUyLmguZ2VuZXJpYyBcCisgIHNyYy9jb25maWcuaC5nZW5lcmljCisKKyMgVGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuIHBjcmUyLmguaW4gYW5kIHBjcmUyLmggaXMgdGhlIHNldHRpbmcgb2YgdGhlIFBDUkUKKyMgdmVyc2lvbiBudW1iZXIuIFRoZXJlZm9yZSwgd2UgY2FuIGNyZWF0ZSB0aGUgZ2VuZXJpYyB2ZXJzaW9uIGp1c3QgYnkgY29weWluZy4KKworc3JjL3BjcmUyLmguZ2VuZXJpYzogc3JjL3BjcmUyLmguaW4gY29uZmlndXJlLmFjCisJcm0gLWYgJEAKKwljcCAtcCBzcmMvcGNyZTIuaCAkQAorCisjIEl0IGlzIG1vcmUgY29tcGxpY2F0ZWQgZm9yIGNvbmZpZy5oLmdlbmVyaWMuIFdlIG5lZWQgdGhlIHZlcnNpb24gdGhhdCByZXN1bHRzCisjIGZyb20gYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gc28gYXMgdG8gZ2V0IGFsbCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIFBDUkUKKyMgY29uZmlndXJhdGlvbiBtYWNyb3Mgc3VjaCBhcyBNQVRDSF9MSU1JVCBhbmQgTkVXTElORS4gV2UgY2FuIGdldCB0aGlzIGJ5CisjIGRvaW5nIGEgY29uZmlndXJlIGluIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4gSG93ZXZlciwgc29tZSB0cmlja2VyeSBpcyBuZWVkZWQsCisjIGJlY2F1c2UgdGhlIHNvdXJjZSBkaXJlY3RvcnkgbWF5IGFscmVhZHkgYmUgY29uZmlndXJlZC4gSWYgeW91IGp1c3QgdHJ5CisjIHJ1bm5pbmcgY29uZmlndXJlIGluIGEgbmV3IGRpcmVjdG9yeSwgaXQgY29tcGxhaW5zLiBGb3IgdGhpcyByZWFzb24sIHdlIG1vdmUKKyMgY29uZmlnLnN0YXR1cyBvdXQgb2YgdGhlIHdheSB3aGlsZSBkb2luZyB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLiBUaGUKKyMgcmVzdWx0aW5nIGNvbmZpZy5oIGlzIG11bmdlZCBieSBwZXJsIHRvIHB1dCAjaWZkZWZzIHJvdW5kIGFueSAjZGVmaW5lcyBmb3IKKyMgbWFjcm9zIHdpdGggdmFsdWVzLCBhbmQgdG8gI3VuZGVmIGFsbCBib29sZWFuIG1hY3JvcyBzdWNoIGFzIEhBVkVfeHh4IGFuZAorIyBTVVBQT1JUX3h4eC4gV2UgYWxzbyBnZXQgcmlkIG9mIGFueSBnY2Mtc3BlY2lmaWMgdmlzaWJpbGl0eSBzZXR0aW5ncy4gTWFrZQorIyBzdXJlIHRoYXQgUENSRTJfRVhQX0RFRk4gaXMgdW5zZXQgKGluIGNhc2UgaXQgaGFzIHZpc2liaWxpdHkgc2V0dGluZ3MpLgorCitzcmMvY29uZmlnLmguZ2VuZXJpYzogY29uZmlndXJlLmFjCisJcm0gLXJmICRAIF9nZW5lcmljCisJbWtkaXIgX2dlbmVyaWMKKwljcz0kKHNyY2RpcikvY29uZmlnLnN0YXR1czsgdGVzdCAhIC1mICQkY3MgfHwgbXYgLWYgJCRjcyAkJGNzLmFzaWRlCisJY2QgX2dlbmVyaWMgJiYgJChhYnNfdG9wX3NyY2RpcikvY29uZmlndXJlIHx8IDoKKwljcz0kKHNyY2RpcikvY29uZmlnLnN0YXR1czsgdGVzdCAhIC1mICQkY3MuYXNpZGUgfHwgbXYgLWYgJCRjcy5hc2lkZSAkJGNzCisJdGVzdCAtZiBfZ2VuZXJpYy9zcmMvY29uZmlnLmgKKwlwZXJsIC1uIFwKKwkgIC1lICdCRUdJTnskJGJsYW5rPTA7fScgXAorCSAgLWUgJ2lmKC9QQ1JFMl9FWFBfREVGTi8pe3ByaW50Ii8qICN1bmRlZiBQQ1JFMl9FWFBfREVGTiAqL1xuIjskJGJsYW5rPTA7bmV4dDt9JyBcCisJICAtZSAnaWYoL3RvIG1ha2UgYSBzeW1ib2wgdmlzaWJsZS8pe25leHQ7fScgXAorCSAgLWUgJ2lmKC9fX2F0dHJpYnV0ZV9fIFwoXCh2aXNpYmlsaXR5Lyl7bmV4dDt9JyBcCisJICAtZSAnaWYoL0xUX09CSkRJUi8pe3ByaW50Ii8qIFRoaXMgaXMgaWdub3JlZCB1bmxlc3MgeW91IGFyZSB1c2luZyBsaWJ0b29sLiAqL1xuIjt9JyBcCisJICAtZSAnaWYoL14jZGVmaW5lXHMoKD86SEFWRXxTVVBQT1JUfFNUREMpX1x3KykvKXtwcmludCIvKiAjdW5kZWYgJCQxICovXG4iOyQkYmxhbms9MDtuZXh0O30nIFwKKwkgIC1lICdpZigvXiNkZWZpbmVccyg/IVBBQ0tBR0V8VkVSU0lPTikoXHcrKS8pe3ByaW50IiNpZm5kZWYgJCQxXG4kJF8jZW5kaWZcbiI7JCRibGFuaz0wO25leHQ7fScgXAorCSAgLWUgJ2lmKC9eXHMqJCQvKXtwcmludCB1bmxlc3MgJCRibGFuazsgJCRibGFuaz0xO30gZWxzZXtwcmludDskJGJsYW5rPTA7fScgXAorCSAgX2dlbmVyaWMvc3JjL2NvbmZpZy5oID4kQAorCXJtIC1yZiBfZ2VuZXJpYworCitNQUlOVEFJTkVSQ0xFQU5GSUxFUyArPSBzcmMvcGNyZTIuaC5nZW5lcmljIHNyYy9jb25maWcuaC5nZW5lcmljCisKKyMgVGhlc2UgYXJlIHRoZSBoZWFkZXIgZmlsZXMgd2UnbGwgaW5zdGFsbC4gV2UgZG8gbm90IGRpc3RyaWJ1dGUgcGNyZTIuaAorIyBiZWNhdXNlIGl0IGlzIGdlbmVyYXRlZCBmcm9tIHBjcmUyLmguaW4uCisKK25vZGlzdF9pbmNsdWRlX0hFQURFUlMgPSBzcmMvcGNyZTIuaAoraW5jbHVkZV9IRUFERVJTID0gc3JjL3BjcmUycG9zaXguaAorCisjIFRoaXMgaXMgdGhlICJjb25maWciIHNjcmlwdC4KKworYmluX1NDUklQVFMgPSBwY3JlMi1jb25maWcKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIyBUaGUgZGZ0YWJsZXMgcHJvZ3JhbSBpcyB1c2VkIHRvIHJlYnVpbGQgY2hhcmFjdGVyIHRhYmxlcyBiZWZvcmUgY29tcGlsaW5nCisjIyBQQ1JFMiwgaWYgLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzIGlzIHNwZWNpZmllZC4gSXQgaXMgbm90IGEgdXNlci12aXNpYmxlCisjIyBwcm9ncmFtLiBUaGUgZGVmYXVsdCAod2hlbiAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgaXMgbm90IHNwZWNpZmllZCkgaXMKKyMjIHRvIGNvcHkgYSBkaXN0cmlidXRlZCBzZXQgb2YgdGFibGVzIHRoYXQgYXJlIGRlZmluZWQgZm9yIEFTQ0lJIGNvZGUuIEluIHRoaXMKKyMjIGNhc2UsIGRmdGFibGVzIGlzIG5vdCBuZWVkZWQuCisKK2lmIFdJVEhfUkVCVUlMRF9DSEFSVEFCTEVTCitub2luc3RfUFJPR1JBTVMgKz0gZGZ0YWJsZXMKK2RmdGFibGVzX1NPVVJDRVMgPSBzcmMvZGZ0YWJsZXMuYworc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYzogZGZ0YWJsZXMkKEVYRUVYVCkKKwlybSAtZiAkQAorCS4vZGZ0YWJsZXMkKEVYRUVYVCkgJEAKK2Vsc2UKK3NyYy9wY3JlMl9jaGFydGFibGVzLmM6ICQoc3JjZGlyKS9zcmMvcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QKKwlybSAtZiAkQAorCSQoTE5fUykgJChhYnNfc3JjZGlyKS9zcmMvcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QgJChhYnNfYnVpbGRkaXIpL3NyYy9wY3JlMl9jaGFydGFibGVzLmMKK2VuZGlmICMgV0lUSF9SRUJVSUxEX0NIQVJUQUJMRVMKKworQlVJTFRfU09VUkNFUyA9IHNyYy9wY3JlMl9jaGFydGFibGVzLmMKK05PRElTVF9TT1VSQ0VTID0gc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYworCisjIyBEZWZpbmUgdGhlIGxpc3Qgb2YgY29tbW9uIHNvdXJjZXMsIHRoZW4gYXJyYW5nZSB0byBidWlsZCB3aGljaGV2ZXIgb2YgdGhlCisjIyA4LSwgMTYtLCBvciAzMi1iaXQgbGlicmFyaWVzIGFyZSBjb25maWd1cmVkLgorCitDT01NT05fU09VUkNFUyA9IFwKKyAgc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jIFwKKyAgc3JjL3BjcmUyX2NvbXBpbGUuYyBcCisgIHNyYy9wY3JlMl9jb25maWcuYyBcCisgIHNyYy9wY3JlMl9jb250ZXh0LmMgXAorICBzcmMvcGNyZTJfZGZhX21hdGNoLmMgXAorICBzcmMvcGNyZTJfZXJyb3IuYyBcCisgIHNyYy9wY3JlMl9maW5kX2JyYWNrZXQuYyBcCisgIHNyYy9wY3JlMl9pbnRlcm5hbC5oIFwKKyAgc3JjL3BjcmUyX2ludG1vZGVkZXAuaCBcCisgIHNyYy9wY3JlMl9qaXRfY29tcGlsZS5jIFwKKyAgc3JjL3BjcmUyX21ha2V0YWJsZXMuYyBcCisgIHNyYy9wY3JlMl9tYXRjaC5jIFwKKyAgc3JjL3BjcmUyX21hdGNoX2RhdGEuYyBcCisgIHNyYy9wY3JlMl9uZXdsaW5lLmMgXAorICBzcmMvcGNyZTJfb3JkMnV0Zi5jIFwKKyAgc3JjL3BjcmUyX3BhdHRlcm5faW5mby5jIFwKKyAgc3JjL3BjcmUyX3NlcmlhbGl6ZS5jIFwKKyAgc3JjL3BjcmUyX3N0cmluZ191dGlscy5jIFwKKyAgc3JjL3BjcmUyX3N0dWR5LmMgXAorICBzcmMvcGNyZTJfc3Vic3RpdHV0ZS5jIFwKKyAgc3JjL3BjcmUyX3N1YnN0cmluZy5jIFwKKyAgc3JjL3BjcmUyX3RhYmxlcy5jIFwKKyAgc3JjL3BjcmUyX3VjZC5jIFwKKyAgc3JjL3BjcmUyX3VjcC5oIFwKKyAgc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jIFwKKyAgc3JjL3BjcmUyX3hjbGFzcy5jCisKK2lmIFdJVEhfUENSRTJfOAorbGliX0xUTElCUkFSSUVTICs9IGxpYnBjcmUyLTgubGEKK2xpYnBjcmUyXzhfbGFfU09VUkNFUyA9IFwKKyAgJChDT01NT05fU09VUkNFUykKK25vZGlzdF9saWJwY3JlMl84X2xhX1NPVVJDRVMgPSBcCisgICQoTk9ESVNUX1NPVVJDRVMpCitsaWJwY3JlMl84X2xhX0NGTEFHUyA9IFwKKyAgLURQQ1JFMl9DT0RFX1VOSVRfV0lEVEg9OCBcCisgICQoVklTSUJJTElUWV9DRkxBR1MpIFwKKyAgJChBTV9DRkxBR1MpCitsaWJwY3JlMl84X2xhX0xJQkFERCA9CitlbmRpZiAjIFdJVEhfUENSRTJfOAorCitpZiBXSVRIX1BDUkUyXzE2CitsaWJfTFRMSUJSQVJJRVMgKz0gbGlicGNyZTItMTYubGEKK2xpYnBjcmUyXzE2X2xhX1NPVVJDRVMgPSBcCisgICQoQ09NTU9OX1NPVVJDRVMpCitub2Rpc3RfbGlicGNyZTJfMTZfbGFfU09VUkNFUyA9IFwKKyAgJChOT0RJU1RfU09VUkNFUykKK2xpYnBjcmUyXzE2X2xhX0NGTEFHUyA9IFwKKyAgLURQQ1JFMl9DT0RFX1VOSVRfV0lEVEg9MTYgXAorICAkKFZJU0lCSUxJVFlfQ0ZMQUdTKSBcCisgICQoQU1fQ0ZMQUdTKQorbGlicGNyZTJfMTZfbGFfTElCQUREID0KK2VuZGlmICMgV0lUSF9QQ1JFMl8xNgorCitpZiBXSVRIX1BDUkUyXzMyCitsaWJfTFRMSUJSQVJJRVMgKz0gbGlicGNyZTItMzIubGEKK2xpYnBjcmUyXzMyX2xhX1NPVVJDRVMgPSBcCisgICQoQ09NTU9OX1NPVVJDRVMpCitub2Rpc3RfbGlicGNyZTJfMzJfbGFfU09VUkNFUyA9IFwKKyAgJChOT0RJU1RfU09VUkNFUykKK2xpYnBjcmUyXzMyX2xhX0NGTEFHUyA9IFwKKyAgLURQQ1JFMl9DT0RFX1VOSVRfV0lEVEg9MzIgXAorICAkKFZJU0lCSUxJVFlfQ0ZMQUdTKSBcCisgICQoQU1fQ0ZMQUdTKQorbGlicGNyZTJfMzJfbGFfTElCQUREID0KK2VuZGlmICMgV0lUSF9QQ1JFMl8zMgorCisjIFRoZSBwY3JlMl9jaGFydGFibGVzLmMuZGlzdCBmaWxlIGlzIHRoZSBkZWZhdWx0IHZlcnNpb24gb2YKKyMgcGNyZTJfY2hhcnRhYmxlcy5jLCB1c2VkIHVubGVzcyAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgaXMgc3BlY2lmaWVkLgorCitFWFRSQV9ESVNUICs9IHNyYy9wY3JlMl9jaGFydGFibGVzLmMuZGlzdAorQ0xFQU5GSUxFUyArPSBzcmMvcGNyZTJfY2hhcnRhYmxlcy5jCisKKyMgVGhlIEpJVCBjb21waWxlciBsaXZlcyBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeSwgYnV0IGl0cyBmaWxlcyBhcmUgI2luY2x1ZGVkCisjIHdoZW4gcGNyZTJfaml0X2NvbXBpbGUuYyBpcyBwcm9jZXNzZWQsIHNvIHRoZXkgbXVzdCBiZSBkaXN0cmlidXRlZC4KKworRVhUUkFfRElTVCArPSBcCisgIHNyYy9zbGppdC9zbGppdENvbmZpZy5oIFwKKyAgc3JjL3Nsaml0L3Nsaml0Q29uZmlnSW50ZXJuYWwuaCBcCisgIHNyYy9zbGppdC9zbGppdEV4ZWNBbGxvY2F0b3IuYyBcCisgIHNyYy9zbGppdC9zbGppdExpci5jIFwKKyAgc3JjL3Nsaml0L3Nsaml0TGlyLmggXAorICBzcmMvc2xqaXQvc2xqaXROYXRpdmVBUk1fMzIuYyBcCisgIHNyYy9zbGppdC9zbGppdE5hdGl2ZUFSTV82NC5jIFwKKyAgc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNX1QyXzMyLmMgXAorICBzcmMvc2xqaXQvc2xqaXROYXRpdmVNSVBTXzMyLmMgXAorICBzcmMvc2xqaXQvc2xqaXROYXRpdmVNSVBTXzY0LmMgXAorICBzcmMvc2xqaXQvc2xqaXROYXRpdmVNSVBTX2NvbW1vbi5jIFwKKyAgc3JjL3Nsaml0L3Nsaml0TmF0aXZlUFBDXzMyLmMgXAorICBzcmMvc2xqaXQvc2xqaXROYXRpdmVQUENfNjQuYyBcCisgIHNyYy9zbGppdC9zbGppdE5hdGl2ZVBQQ19jb21tb24uYyBcCisgIHNyYy9zbGppdC9zbGppdE5hdGl2ZVNQQVJDXzMyLmMgXAorICBzcmMvc2xqaXQvc2xqaXROYXRpdmVTUEFSQ19jb21tb24uYyBcCisgIHNyYy9zbGppdC9zbGppdE5hdGl2ZVRJTEVHWC1lbmNvZGVyLmMgXAorICBzcmMvc2xqaXQvc2xqaXROYXRpdmVUSUxFR1hfNjQuYyBcCisgIHNyYy9zbGppdC9zbGppdE5hdGl2ZVg4Nl8zMi5jIFwKKyAgc3JjL3Nsaml0L3Nsaml0TmF0aXZlWDg2XzY0LmMgXAorICBzcmMvc2xqaXQvc2xqaXROYXRpdmVYODZfY29tbW9uLmMgXAorICBzcmMvc2xqaXQvc2xqaXRVdGlscy5jCisKKyMgU29tZSBvZiB0aGUgSklUIHNvdXJjZXMgYXJlIGFsc28gaW4gc2VwYXJhdGUgZmlsZXMgdGhhdCBhcmUgI2luY2x1ZGVkLgorCitFWFRSQV9ESVNUICs9IFwKKyAgc3JjL3BjcmUyX2ppdF9tYXRjaC5jIFwKKyAgc3JjL3BjcmUyX2ppdF9taXNjLmMKKworaWYgV0lUSF9QQ1JFMl84CitsaWJwY3JlMl84X2xhX0xERkxBR1MgPSAkKEVYVFJBX0xJQlBDUkUyXzhfTERGTEFHUykKK2VuZGlmICMgV0lUSF9QQ1JFMl84CitpZiBXSVRIX1BDUkUyXzE2CitsaWJwY3JlMl8xNl9sYV9MREZMQUdTID0gJChFWFRSQV9MSUJQQ1JFMl8xNl9MREZMQUdTKQorZW5kaWYgIyBXSVRIX1BDUkUyXzE2CitpZiBXSVRIX1BDUkUyXzMyCitsaWJwY3JlMl8zMl9sYV9MREZMQUdTID0gJChFWFRSQV9MSUJQQ1JFMl8zMl9MREZMQUdTKQorZW5kaWYgIyBXSVRIX1BDUkUyXzMyCisKK2lmIFdJVEhfVkFMR1JJTkQKK2lmIFdJVEhfUENSRTJfOAorbGlicGNyZTJfOF9sYV9DRkxBR1MgKz0gJChWQUxHUklORF9DRkxBR1MpCitlbmRpZiAjIFdJVEhfUENSRTJfOAoraWYgV0lUSF9QQ1JFMl8xNgorbGlicGNyZTJfMTZfbGFfQ0ZMQUdTICs9ICQoVkFMR1JJTkRfQ0ZMQUdTKQorZW5kaWYgIyBXSVRIX1BDUkUyXzE2CitpZiBXSVRIX1BDUkUyXzMyCitsaWJwY3JlMl8zMl9sYV9DRkxBR1MgKz0gJChWQUxHUklORF9DRkxBR1MpCitlbmRpZiAjIFdJVEhfUENSRTJfMzIKK2VuZGlmICMgV0lUSF9WQUxHUklORAorCitpZiBXSVRIX0dDT1YKK2lmIFdJVEhfUENSRTJfOAorbGlicGNyZTJfOF9sYV9DRkxBR1MgKz0gJChHQ09WX0NGTEFHUykKK2VuZGlmICMgV0lUSF9QQ1JFMl84CitpZiBXSVRIX1BDUkUyXzE2CitsaWJwY3JlMl8xNl9sYV9DRkxBR1MgKz0gJChHQ09WX0NGTEFHUykKK2VuZGlmICMgV0lUSF9QQ1JFMl8xNgoraWYgV0lUSF9QQ1JFMl8zMgorbGlicGNyZTJfMzJfbGFfQ0ZMQUdTICs9ICQoR0NPVl9DRkxBR1MpCitlbmRpZiAjIFdJVEhfUENSRTJfMzIKK2VuZGlmICMgV0lUSF9HQ09WCisKKyMjIEEgdmVyc2lvbiBvZiB0aGUgOC1iaXQgbGlicmFyeSB0aGF0IGhhcyBhIFBPU0lYIEFQSS4KKworaWYgV0lUSF9QQ1JFMl84CitsaWJfTFRMSUJSQVJJRVMgKz0gbGlicGNyZTItcG9zaXgubGEKK2xpYnBjcmUyX3Bvc2l4X2xhX1NPVVJDRVMgPSBzcmMvcGNyZTJwb3NpeC5jCitsaWJwY3JlMl9wb3NpeF9sYV9DRkxBR1MgPSBcCisgIC1EUENSRTJfQ09ERV9VTklUX1dJRFRIPTggXAorICAkKFZJU0lCSUxJVFlfQ0ZMQUdTKSAkKEFNX0NGTEFHUykKK2xpYnBjcmUyX3Bvc2l4X2xhX0xERkxBR1MgPSAkKEVYVFJBX0xJQlBDUkUyX1BPU0lYX0xERkxBR1MpCitsaWJwY3JlMl9wb3NpeF9sYV9MSUJBREQgPSBsaWJwY3JlMi04LmxhCitpZiBXSVRIX0dDT1YKK2xpYnBjcmUyX3Bvc2l4X2xhX0NGTEFHUyArPSAkKEdDT1ZfQ0ZMQUdTKQorZW5kaWYgIyBXSVRIX0dDT1YKK2VuZGlmICMgV0lUSF9QQ1JFMl84CisKKyMjIEJ1aWxkIHBjcmUyZ3JlcCBpZiB0aGUgOC1iaXQgbGlicmFyeSBpcyBlbmFibGVkCisKK2lmIFdJVEhfUENSRTJfOAorYmluX1BST0dSQU1TICs9IHBjcmUyZ3JlcAorcGNyZTJncmVwX1NPVVJDRVMgPSBzcmMvcGNyZTJncmVwLmMKK3BjcmUyZ3JlcF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK3BjcmUyZ3JlcF9MREFERCA9ICQoTElCWikgJChMSUJCWjIpCitwY3JlMmdyZXBfTERBREQgKz0gbGlicGNyZTItOC5sYQoraWYgV0lUSF9HQ09WCitwY3JlMmdyZXBfQ0ZMQUdTICs9ICQoR0NPVl9DRkxBR1MpCitwY3JlMmdyZXBfTERBREQgKz0gJChHQ09WX0xJQlMpCitlbmRpZiAjIFdJVEhfR0NPVgorZW5kaWYgIyBXSVRIX1BDUkUyXzgKKworIyMgLS0tLS0tLS0gVGVzdGluZyAtLS0tLS0tLS0tCisKKyMjIElmIEpJVCBzdXBwb3J0IGlzIGVuYWJsZWQsIGFycmFuZ2UgZm9yIHRoZSBKSVQgdGVzdCBwcm9ncmFtIHRvIHJ1bi4KKworaWYgV0lUSF9KSVQKK1RFU1RTICs9IHBjcmUyX2ppdF90ZXN0Citub2luc3RfUFJPR1JBTVMgKz0gcGNyZTJfaml0X3Rlc3QKK3BjcmUyX2ppdF90ZXN0X1NPVVJDRVMgPSBzcmMvcGNyZTJfaml0X3Rlc3QuYworcGNyZTJfaml0X3Rlc3RfQ0ZMQUdTID0gJChBTV9DRkxBR1MpCitwY3JlMl9qaXRfdGVzdF9MREFERCA9CitpZiBXSVRIX1BDUkUyXzgKK3BjcmUyX2ppdF90ZXN0X0xEQUREICs9IGxpYnBjcmUyLTgubGEKK2VuZGlmICMgV0lUSF9QQ1JFMl84CitpZiBXSVRIX1BDUkUyXzE2CitwY3JlMl9qaXRfdGVzdF9MREFERCArPSBsaWJwY3JlMi0xNi5sYQorZW5kaWYgIyBXSVRIX1BDUkUyXzE2CitpZiBXSVRIX1BDUkUyXzMyCitwY3JlMl9qaXRfdGVzdF9MREFERCArPSBsaWJwY3JlMi0zMi5sYQorZW5kaWYgIyBXSVRIX1BDUkUyXzMyCitpZiBXSVRIX0dDT1YKK3BjcmUyX2ppdF90ZXN0X0NGTEFHUyArPSAkKEdDT1ZfQ0ZMQUdTKQorcGNyZTJfaml0X3Rlc3RfTERBREQgKz0gJChHQ09WX0xJQlMpCitlbmRpZiAjIFdJVEhfR0NPVgorZW5kaWYgIyBXSVRIX0pJVAorCisjIEJ1aWxkIHRoZSBnZW5lcmFsIHBjcmUydGVzdCBwcm9ncmFtLiBUaGUgZmlsZSBzcmMvcGNyZTJfcHJpbnRpbnQuYyBpcworIyAjaW5jbHVkZWQgYnkgcGNyZTJ0ZXN0IGFzIG1hbnkgdGltZXMgYXMgbmVlZGVkLCBhdCBkaWZmZXJlbnQgY29kZSB1bml0CisjIHdpZHRocy4KKworYmluX1BST0dSQU1TICs9IHBjcmUydGVzdAorRVhUUkFfRElTVCArPSBzcmMvcGNyZTJfcHJpbnRpbnQuYworcGNyZTJ0ZXN0X1NPVVJDRVMgPSBzcmMvcGNyZTJ0ZXN0LmMKK3BjcmUydGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykKK3BjcmUydGVzdF9MREFERCA9ICQoTElCUkVBRExJTkUpCisKK2lmIFdJVEhfUENSRTJfOAorcGNyZTJ0ZXN0X0xEQUREICs9IGxpYnBjcmUyLTgubGEgbGlicGNyZTItcG9zaXgubGEKK2VuZGlmICMgV0lUSF9QQ1JFMl84CisKK2lmIFdJVEhfUENSRTJfMTYKK3BjcmUydGVzdF9MREFERCArPSBsaWJwY3JlMi0xNi5sYQorZW5kaWYgIyBXSVRIX1BDUkUyXzE2CisKK2lmIFdJVEhfUENSRTJfMzIKK3BjcmUydGVzdF9MREFERCArPSBsaWJwY3JlMi0zMi5sYQorZW5kaWYgIyBXSVRIX1BDUkUyXzMyCisKK2lmIFdJVEhfVkFMR1JJTkQKK3BjcmUydGVzdF9DRkxBR1MgKz0gJChWQUxHUklORF9DRkxBR1MpCitlbmRpZiAjIFdJVEhfVkFMR1JJTkQKKworaWYgV0lUSF9HQ09WCitwY3JlMnRlc3RfQ0ZMQUdTICs9ICQoR0NPVl9DRkxBR1MpCitwY3JlMnRlc3RfTERBREQgKz0gJChHQ09WX0xJQlMpCitlbmRpZiAjIFdJVEhfR0NPVgorCisjIyBUaGUgbWFpbiBsaWJyYXJ5IHRlc3RzLiBFYWNoIHRlc3QgaXMgYSBiaW5hcnkgcGx1cyBhIHNjcmlwdCB0aGF0IHJ1bnMgdGhhdAorIyMgYmluYXJ5IGluIHZhcmlvdXMgd2F5cy4gV2UgaW5zdGFsbCB0aGVzZSB0ZXN0IGJpbmFyaWVzIGluIGNhc2UgZm9sa3MgZmluZCBpdAorIyMgaGVscGZ1bC4KKworVEVTVFMgKz0gUnVuVGVzdAorZGlzdF9ub2luc3RfU0NSSVBUUyArPSBSdW5UZXN0CisKK0VYVFJBX0RJU1QgKz0gUnVuVGVzdC5iYXQKKworIyMgV2hlbiB0aGUgOC1iaXQgbGlicmFyeSBpcyBjb25maWd1cmVkLCBwY3JlMmdyZXAgd2lsbCBoYXZlIGJlZW4gYnVpbHQuCisKK2lmIFdJVEhfUENSRTJfOAorVEVTVFMgKz0gUnVuR3JlcFRlc3QKK2Rpc3Rfbm9pbnN0X1NDUklQVFMgKz0gUnVuR3JlcFRlc3QKK2VuZGlmICMgV0lUSF9QQ1JFMl84CisKKyMjIERpc3RyaWJ1dGUgYWxsIHRoZSB0ZXN0IGRhdGEgZmlsZXMKKworRVhUUkFfRElTVCArPSBcCisgIHRlc3RkYXRhL2dyZXBiaW5hcnkgXAorICB0ZXN0ZGF0YS9ncmVwZmlsZWxpc3QgXAorICB0ZXN0ZGF0YS9ncmVwaW5wdXQgXAorICB0ZXN0ZGF0YS9ncmVwaW5wdXQzIFwKKyAgdGVzdGRhdGEvZ3JlcGlucHV0OCBcCisgIHRlc3RkYXRhL2dyZXBpbnB1dHYgXAorICB0ZXN0ZGF0YS9ncmVwaW5wdXR4IFwKKyAgdGVzdGRhdGEvZ3JlcGxpc3QgXAorICB0ZXN0ZGF0YS9ncmVwb3V0cHV0IFwKKyAgdGVzdGRhdGEvZ3JlcG91dHB1dDggXAorICB0ZXN0ZGF0YS9ncmVwb3V0cHV0TiBcCisgIHRlc3RkYXRhL2dyZXBwYXRONCBcCisgIHRlc3RkYXRhL3Rlc3RpbnB1dDEgXAorICB0ZXN0ZGF0YS90ZXN0aW5wdXQyIFwKKyAgdGVzdGRhdGEvdGVzdGlucHV0MyBcCisgIHRlc3RkYXRhL3Rlc3RpbnB1dDQgXAorICB0ZXN0ZGF0YS90ZXN0aW5wdXQ1IFwKKyAgdGVzdGRhdGEvdGVzdGlucHV0NiBcCisgIHRlc3RkYXRhL3Rlc3RpbnB1dDcgXAorICB0ZXN0ZGF0YS90ZXN0aW5wdXQ4IFwKKyAgdGVzdGRhdGEvdGVzdGlucHV0OSBcCisgIHRlc3RkYXRhL3Rlc3RpbnB1dDEwIFwKKyAgdGVzdGRhdGEvdGVzdGlucHV0MTEgXAorICB0ZXN0ZGF0YS90ZXN0aW5wdXQxMiBcCisgIHRlc3RkYXRhL3Rlc3RpbnB1dDEzIFwKKyAgdGVzdGRhdGEvdGVzdGlucHV0MTQgXAorICB0ZXN0ZGF0YS90ZXN0aW5wdXQxNSBcCisgIHRlc3RkYXRhL3Rlc3RpbnB1dDE2IFwKKyAgdGVzdGRhdGEvdGVzdGlucHV0MTcgXAorICB0ZXN0ZGF0YS90ZXN0aW5wdXQxOCBcCisgIHRlc3RkYXRhL3Rlc3RpbnB1dDE5IFwKKyAgdGVzdGRhdGEvdGVzdGlucHV0MjAgXAorICB0ZXN0ZGF0YS90ZXN0aW5wdXQyMSBcCisgIHRlc3RkYXRhL3Rlc3RpbnB1dDIyIFwKKyAgdGVzdGRhdGEvdGVzdGlucHV0MjMgXAorICB0ZXN0ZGF0YS90ZXN0aW5wdXRFQkMgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0MSBcCisgIHRlc3RkYXRhL3Rlc3RvdXRwdXQyIFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDMgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0M0EgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0M0IgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0NCBcCisgIHRlc3RkYXRhL3Rlc3RvdXRwdXQ1IFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDYgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0NyBcCisgIHRlc3RkYXRhL3Rlc3RvdXRwdXQ4LTE2LTIgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0OC0xNi0zIFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDgtMTYtMyBcCisgIHRlc3RkYXRhL3Rlc3RvdXRwdXQ4LTMyLTIgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0OC0zMi0zIFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDgtMzItNCBcCisgIHRlc3RkYXRhL3Rlc3RvdXRwdXQ4LTgtMiBcCisgIHRlc3RkYXRhL3Rlc3RvdXRwdXQ4LTgtMyBcCisgIHRlc3RkYXRhL3Rlc3RvdXRwdXQ4LTgtNCBcCisgIHRlc3RkYXRhL3Rlc3RvdXRwdXQ5IFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDEwIFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDExLTE2IFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDExLTMyIFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDEyLTE2IFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDEyLTMyIFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDEzIFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDE0LTE2IFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDE0LTMyIFwKKyAgdGVzdGRhdGEvdGVzdG91dHB1dDE0LTggXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0MTUgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0MTYgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0MTcgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0MTggXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0MTkgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0MjAgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0MjEgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0MjItMTYgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0MjItMzIgXAorICB0ZXN0ZGF0YS90ZXN0b3V0cHV0MjItOCBcCisgIHRlc3RkYXRhL3Rlc3RvdXRwdXQyMyBcCisgIHRlc3RkYXRhL3Rlc3RvdXRwdXRFQkMgXAorICB0ZXN0ZGF0YS92YWxncmluZC1qaXQuc3VwcCBcCisgIHRlc3RkYXRhL3dpbnRlc3RpbnB1dDMgXAorICB0ZXN0ZGF0YS93aW50ZXN0b3V0cHV0MyBcCisgIHBlcmx0ZXN0LnNoCisKKyMgUnVuVGVzdCBhbmQgUnVuR3JlcFRlc3Qgc2hvdWxkIGNsZWFuIHVwIGFmdGVyIHRoZW1zZWx2ZXMsIGJ1dCBqdXN0IGluIGNhc2UKKyMgdGhleSBkb24ndCwgYWRkIHRoZWlyIHdvcmtpbmcgZmlsZXMgdG8gQ0xFQU5GSUxFUy4KKworQ0xFQU5GSUxFUyArPSBcCisgICAgICAgIHRlc3RTaW5wdXQgXAorICAgICAgICB0ZXN0M2lucHV0IFwKKyAgICAgICAgdGVzdDNvdXRwdXQgXAorICAgICAgICB0ZXN0M291dHB1dEEgXAorICAgICAgICB0ZXN0M291dHB1dEIgXAorICAgICAgICB0ZXN0dHJ5IFwKKyAgICAgICAgdGVzdHN0ZG91dCBcCisJdGVzdHN0ZGVyciBcCisgICAgICAgIHRlc3RzdGRlcnJncmVwIFwKKyAgICAgICAgdGVzdHRlbXAxZ3JlcCBcCisgICAgICAgIHRlc3R0ZW1wMmdyZXAgXAorICAgICAgICB0ZXN0dHJ5Z3JlcCBcCisgICAgICAgIHRlc3ROaW5wdXRncmVwCisKKyMjIC0tLS0tLS0tLS0tLSBFbmQgb2YgdGVzdGluZyAtLS0tLS0tLS0tLS0tCisKKworIyBQQ1JFMiBkZW1vbnN0cmF0aW9uIHByb2dyYW0uIE5vdCBidWlsdCBhdXRvbWF0Y2FsbHkuIFRoZSBwb2ludCBpcyB0aGF0IHRoZQorIyB1c2VycyBzaG91bGQgYnVpbGQgaXQgdGhlbXNlbHZlcy4gU28ganVzdCBkaXN0cmlidXRlIHRoZSBzb3VyY2UuCisKK0VYVFJBX0RJU1QgKz0gc3JjL3BjcmUyZGVtby5jCisKKworIyBXZSBoYXZlIC5wYyBmaWxlcyBmb3IgcGtnLWNvbmZpZyB1c2Vycy4KKworcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworcGtnY29uZmlnX0RBVEEgPQorCitpZiBXSVRIX1BDUkUyXzgKK3BrZ2NvbmZpZ19EQVRBICs9IGxpYnBjcmUyLTgucGMgbGlicGNyZTItcG9zaXgucGMKK2VuZGlmCisKK2lmIFdJVEhfUENSRTJfMTYKK3BrZ2NvbmZpZ19EQVRBICs9IGxpYnBjcmUyLTE2LnBjCitlbmRpZgorCitpZiBXSVRIX1BDUkUyXzMyCitwa2djb25maWdfREFUQSArPSBsaWJwY3JlMi0zMi5wYworZW5kaWYKKworCisjIGdjb3YvbGNvdiBjb2RlIGNvdmVyYWdlIHJlcG9ydGluZworIworIyBDb3ZlcmFnZSByZXBvcnRpbmcgdGFyZ2V0czoKKyMKKyMgY292ZXJhZ2U6IENyZWF0ZSBhIGNvdmVyYWdlIHJlcG9ydCBmcm9tICdtYWtlIGNoZWNrJworIyBjb3ZlcmFnZS1iYXNlbGluZTogQ2FwdHVyZSBiYXNlbGluZSBjb3ZlcmFnZSBpbmZvcm1hdGlvbgorIyBjb3ZlcmFnZS1yZXNldDogVGhpcyB6ZXJvcyB0aGUgY292ZXJhZ2UgY291bnRlcnMgb25seQorIyBjb3ZlcmFnZS1yZXBvcnQ6IFRoaXMgY3JlYXRlcyB0aGUgY292ZXJhZ2UgcmVwb3J0IG9ubHkKKyMgY292ZXJhZ2UtY2xlYW4tcmVwb3J0OiBUaGlzIHJlbW92ZXMgdGhlIGdlbmVyYXRlZCBjb3ZlcmFnZSByZXBvcnQKKyMgICB3aXRob3V0IGNsZWFuaW5nIHRoZSBjb3ZlcmFnZSBkYXRhIGl0c2VsZgorIyBjb3ZlcmFnZS1jbGVhbi1kYXRhOiBUaGlzIHJlbW92ZXMgdGhlIGNhcHR1cmVkIGNvdmVyYWdlIGRhdGEgd2l0aG91dAorIyAgIHJlbW92aW5nIHRoZSBjb3ZlcmFnZSBmaWxlcyBjcmVhdGVkIGF0IGNvbXBpbGUgdGltZSAoKi5nY25vKQorIyBjb3ZlcmFnZS1jbGVhbjogVGhpcyBjbGVhbnMgYWxsIGNvdmVyYWdlIGRhdGEgaW5jbHVkaW5nIHRoZSBnZW5lcmF0ZWQKKyMgICBjb3ZlcmFnZSByZXBvcnQuCisKK2lmIFdJVEhfR0NPVgorQ09WRVJBR0VfVEVTVF9OQU1FID0gJChQQUNLQUdFKQorQ09WRVJBR0VfTkFNRSA9ICQoUEFDS0FHRSktJChWRVJTSU9OKQorQ09WRVJBR0VfT1VUUFVUX0ZJTEUgPSAkKENPVkVSQUdFX05BTUUpLWNvdmVyYWdlLmluZm8KK0NPVkVSQUdFX09VVFBVVF9ESVIgPSAkKENPVkVSQUdFX05BTUUpLWNvdmVyYWdlCitDT1ZFUkFHRV9MQ09WX0VYVFJBX0ZMQUdTID0KK0NPVkVSQUdFX0dFTkhUTUxfRVhUUkFfRkxBR1MgPQorCitjb3ZlcmFnZV9xdWlldCA9ICQoY292ZXJhZ2VfcXVpZXRfJChWKSkKK2NvdmVyYWdlX3F1aWV0XyA9ICQoY292ZXJhZ2VfcXVpZXRfJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSkpCitjb3ZlcmFnZV9xdWlldF8wID0gLS1xdWlldAorCitjb3ZlcmFnZS1jaGVjazogYWxsCisJLSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIC1rIGNoZWNrCisKK2NvdmVyYWdlLWJhc2VsaW5lOgorCSQoTENPVikgJChjb3ZlcmFnZV9xdWlldCkgXAorCQktLWRpcmVjdG9yeSAkKHRvcF9idWlsZGRpcikgXAorCQktLW91dHB1dC1maWxlICIkKENPVkVSQUdFX09VVFBVVF9GSUxFKSIgXAorCQktLWNhcHR1cmUgXAorCQktLWluaXRpYWwKKworY292ZXJhZ2UtcmVwb3J0OgorCSQoTENPVikgJChjb3ZlcmFnZV9xdWlldCkgXAorCQktLWRpcmVjdG9yeSAkKHRvcF9idWlsZGRpcikgXAorCQktLWNhcHR1cmUgXAorCQktLW91dHB1dC1maWxlICIkKENPVkVSQUdFX09VVFBVVF9GSUxFKS50bXAiIFwKKwkJLS10ZXN0LW5hbWUgIiQoQ09WRVJBR0VfVEVTVF9OQU1FKSIgXAorCQktLW5vLWNoZWNrc3VtIFwKKwkJLS1jb21wYXQtbGlidG9vbCBcCisJCSQoQ09WRVJBR0VfTENPVl9FWFRSQV9GTEFHUykKKwkkKExDT1YpICQoY292ZXJhZ2VfcXVpZXQpIFwKKwkJLS1kaXJlY3RvcnkgJCh0b3BfYnVpbGRkaXIpIFwKKwkJLS1vdXRwdXQtZmlsZSAiJChDT1ZFUkFHRV9PVVRQVVRfRklMRSkiIFwKKwkJLS1yZW1vdmUgIiQoQ09WRVJBR0VfT1VUUFVUX0ZJTEUpLnRtcCIgXAorCQkiL3RtcC8qIiBcCisJCSIvdXNyL2luY2x1ZGUvKiIgXAorCQkiJChpbmNsdWRlZGlyKS8qIgorCS1Acm0gLWYgIiQoQ09WRVJBR0VfT1VUUFVUX0ZJTEUpLnRtcCIKKwlMQU5HPUMgJChHRU5IVE1MKSAkKGNvdmVyYWdlX3F1aWV0KSBcCisJCS0tcHJlZml4ICQodG9wX2J1aWxkZGlyKSBcCisJCS0tb3V0cHV0LWRpcmVjdG9yeSAiJChDT1ZFUkFHRV9PVVRQVVRfRElSKSIgXAorCQktLXRpdGxlICIkKFBBQ0tBR0UpICQoVkVSU0lPTikgQ29kZSBDb3ZlcmFnZSBSZXBvcnQiIFwKKwkJLS1zaG93LWRldGFpbHMgIiQoQ09WRVJBR0VfT1VUUFVUX0ZJTEUpIiBcCisJCS0tbGVnZW5kIFwKKwkJJChDT1ZFUkFHRV9HRU5IVE1MX0VYVFJBX0ZMQUdTKQorCUBlY2hvICJDb2RlIGNvdmVyYWdlIHJlcG9ydCB3cml0dGVuIHRvIGZpbGU6Ly8kKGFic19idWlsZGRpcikvJChDT1ZFUkFHRV9PVVRQVVRfRElSKS9pbmRleC5odG1sIgorCitjb3ZlcmFnZS1yZXNldDoKKwktJChMQ09WKSAkKGNvdmVyYWdlX3F1aWV0KSAtLXplcm9jb3VudGVycyAtLWRpcmVjdG9yeSAkKHRvcF9idWlsZGRpcikKKworY292ZXJhZ2UtY2xlYW4tcmVwb3J0OgorCS1ybSAtZiAiJChDT1ZFUkFHRV9PVVRQVVRfRklMRSkiICIkKENPVkVSQUdFX09VVFBVVF9GSUxFKS50bXAiCisJLXJtIC1yZiAiJChDT1ZFUkFHRV9PVVRQVVRfRElSKSIKKworY292ZXJhZ2UtY2xlYW4tZGF0YToKKwktZmluZCAkKHRvcF9idWlsZGRpcikgLW5hbWUgIiouZ2NkYSIgLWRlbGV0ZQorCitjb3ZlcmFnZS1jbGVhbjogY292ZXJhZ2UtcmVzZXQgY292ZXJhZ2UtY2xlYW4tcmVwb3J0IGNvdmVyYWdlLWNsZWFuLWRhdGEKKwktZmluZCAkKHRvcF9idWlsZGRpcikgLW5hbWUgIiouZ2NubyIgLWRlbGV0ZQorCitjb3ZlcmFnZS1kaXN0Y2xlYW46IGNvdmVyYWdlLWNsZWFuCisKK2NvdmVyYWdlOiBjb3ZlcmFnZS1yZXNldCBjb3ZlcmFnZS1iYXNlbGluZSBjb3ZlcmFnZS1jaGVjayBjb3ZlcmFnZS1yZXBvcnQKK2NsZWFuLWxvY2FsOiBjb3ZlcmFnZS1jbGVhbgorZGlzdGNsZWFuLWxvY2FsOiBjb3ZlcmFnZS1kaXN0Y2xlYW4KKworLlBIT05ZOiBjb3ZlcmFnZSBjb3ZlcmFnZS1iYXNlbGluZSBjb3ZlcmFnZS1jaGVjayBjb3ZlcmFnZS1yZXBvcnQgY292ZXJhZ2UtcmVzZXQgY292ZXJhZ2UtY2xlYW4tcmVwb3J0IGNvdmVyYWdlLWNsZWFuLWRhdGEgY292ZXJhZ2UtY2xlYW4gY292ZXJhZ2UtZGlzdGNsZWFuCisKKyMgV2l0aG91dCBjb3ZlcmFnZSBzdXBwb3J0LCBzdGlsbCBhcnJhbmdlIGZvciAnbWFrZSBkaXN0Y2xlYW4nIHRvIGdldCByaWQgb2YKKyMgYW55IGNvdmVyYWdlIGZpbGVzIHRoYXQgbWF5IGhhdmUgYmVlbiBsZWZ0IGZyb20gYSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbi4KKworZWxzZQorCitjb3ZlcmFnZToKKwlAZWNobyAiQ29uZmlndXJpbmcgd2l0aCAtLWVuYWJsZS1jb3ZlcmFnZSBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSBjb2RlIGNvdmVyYWdlIHJlcG9ydC4iCisKK0RJU1RDTEVBTkZJTEVTICs9IHNyYy8qLmdjZGEgc3JjLyouZ2NubworCitkaXN0Y2xlYW4tbG9jYWw6CisJcm0gLXJmICQoUEFDS0FHRSktJChWRVJTSU9OKS1jb3ZlcmFnZSoKKworZW5kaWYgIyBXSVRIX0dDT1YKKworIyMgQ01ha2Ugc3VwcG9ydAorCitFWFRSQV9ESVNUICs9IFwKKyAgY21ha2UvQ09QWUlORy1DTUFLRS1TQ1JJUFRTIFwKKyAgY21ha2UvRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UgXAorICBjbWFrZS9GaW5kUmVhZGxpbmUuY21ha2UgXAorICBjbWFrZS9GaW5kRWRpdGxpbmUuY21ha2UgXAorICBDTWFrZUxpc3RzLnR4dCBcCisgIGNvbmZpZy1jbWFrZS5oLmluCisKKyMjIGVuZCBNYWtlZmlsZS5hbQpkaWZmIC0tZ2l0IGEvZGlzdDIvTWFrZWZpbGUuaW4gYi9kaXN0Mi9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODYxMjBiCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSwzMTM1IEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjE1IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworCisKKworCitWUEFUSCA9IEBzcmNkaXJACithbV9faXNfZ251X21ha2UgPSB7IFwKKyAgaWYgdGVzdCAteiAnJChNQUtFTEVWRUwpJzsgdGhlbiBcCisgICAgZmFsc2U7IFwKKyAgZWxpZiB0ZXN0IC1uICckKE1BS0VfSE9TVCknOyB0aGVuIFwKKyAgICB0cnVlOyBcCisgIGVsaWYgdGVzdCAtbiAnJChNQUtFX1ZFUlNJT04pJyAmJiB0ZXN0IC1uICckKENVUkRJUiknOyB0aGVuIFwKKyAgICB0cnVlOyBcCisgIGVsc2UgXAorICAgIGZhbHNlOyBcCisgIGZpOyBcCit9CithbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAorICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCisgICAgICA/KSA7OyBcCisgICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAorICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAorICAgICAgICAgZXhpdCAxOzsgXAorICBlc2FjOyBcCisgIGhhc19vcHQ9bm87IFwKKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKyAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKKyAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAorICBlbHNlIFwKKyAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKKyAgICAgICpcXFtcIFwJXSopIFwKKyAgICAgICAgYnM9XFw7IFwKKyAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCisgICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCisgICAgZXNhYzsgXAorICBmaTsgXAorICBza2lwX25leHQ9bm87IFwKKyAgc3RyaXBfdHJhaWxvcHQgKCkgXAorICB7IFwKKyAgICBmbGc9YHByaW50ZiAnJXNcbicgIiQkZmxnIiB8IHNlZCAicy8kJDEuKiQkLy8iYDsgXAorICB9OyBcCisgIGZvciBmbGcgaW4gJCRzYW5lX21ha2VmbGFnczsgZG8gXAorICAgIHRlc3QgJCRza2lwX25leHQgPSB5ZXMgJiYgeyBza2lwX25leHQ9bm87IGNvbnRpbnVlOyB9OyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqPSp8LS0qKSBjb250aW51ZTs7IFwKKyAgICAgICAgLSpJKSBzdHJpcF90cmFpbG9wdCAnSSc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKkk/Kikgc3RyaXBfdHJhaWxvcHQgJ0knOzsgXAorICAgICAgICAtKk8pIHN0cmlwX3RyYWlsb3B0ICdPJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qTz8qKSBzdHJpcF90cmFpbG9wdCAnTyc7OyBcCisgICAgICAgIC0qbCkgc3RyaXBfdHJhaWxvcHQgJ2wnOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpsPyopIHN0cmlwX3RyYWlsb3B0ICdsJzs7IFwKKyAgICAgIC1bZEVEbV0pIHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtW0pUXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICBlc2FjOyBcCisgICAgY2FzZSAkJGZsZyBpbiBcCisgICAgICAqJCR0YXJnZXRfb3B0aW9uKikgaGFzX29wdD15ZXM7IGJyZWFrOzsgXAorICAgIGVzYWM7IFwKKyAgZG9uZTsgXAorICB0ZXN0ICQkaGFzX29wdCA9IHllcworYW1fX21ha2VfZHJ5cnVuID0gKHRhcmdldF9vcHRpb249bjsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKK2FtX19tYWtlX2tlZXBnb2luZyA9ICh0YXJnZXRfb3B0aW9uPWs7ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnbGliZXhlY2RpciA9ICQobGliZXhlY2RpcikvQFBBQ0tBR0VACithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACitURVNUUyA9ICQoYW1fX0VYRUVYVF8zKSBSdW5UZXN0ICQoYW1fX2FwcGVuZF8yOSkKK2Jpbl9QUk9HUkFNUyA9ICQoYW1fX0VYRUVYVF8xKSBwY3JlMnRlc3QkKEVYRUVYVCkKK25vaW5zdF9QUk9HUkFNUyA9ICQoYW1fX0VYRUVYVF8yKSAkKGFtX19FWEVFWFRfMykKK0BXSVRIX1JFQlVJTERfQ0hBUlRBQkxFU19UUlVFQGFtX19hcHBlbmRfMSA9IGRmdGFibGVzCitAV0lUSF9QQ1JFMl84X1RSVUVAYW1fX2FwcGVuZF8yID0gbGlicGNyZTItOC5sYQorQFdJVEhfUENSRTJfMTZfVFJVRUBhbV9fYXBwZW5kXzMgPSBsaWJwY3JlMi0xNi5sYQorQFdJVEhfUENSRTJfMzJfVFJVRUBhbV9fYXBwZW5kXzQgPSBsaWJwY3JlMi0zMi5sYQorQFdJVEhfUENSRTJfOF9UUlVFQEBXSVRIX1ZBTEdSSU5EX1RSVUVAYW1fX2FwcGVuZF81ID0gJChWQUxHUklORF9DRkxBR1MpCitAV0lUSF9QQ1JFMl8xNl9UUlVFQEBXSVRIX1ZBTEdSSU5EX1RSVUVAYW1fX2FwcGVuZF82ID0gJChWQUxHUklORF9DRkxBR1MpCitAV0lUSF9QQ1JFMl8zMl9UUlVFQEBXSVRIX1ZBTEdSSU5EX1RSVUVAYW1fX2FwcGVuZF83ID0gJChWQUxHUklORF9DRkxBR1MpCitAV0lUSF9HQ09WX1RSVUVAQFdJVEhfUENSRTJfOF9UUlVFQGFtX19hcHBlbmRfOCA9ICQoR0NPVl9DRkxBR1MpCitAV0lUSF9HQ09WX1RSVUVAQFdJVEhfUENSRTJfMTZfVFJVRUBhbV9fYXBwZW5kXzkgPSAkKEdDT1ZfQ0ZMQUdTKQorQFdJVEhfR0NPVl9UUlVFQEBXSVRIX1BDUkUyXzMyX1RSVUVAYW1fX2FwcGVuZF8xMCA9ICQoR0NPVl9DRkxBR1MpCitAV0lUSF9QQ1JFMl84X1RSVUVAYW1fX2FwcGVuZF8xMSA9IGxpYnBjcmUyLXBvc2l4LmxhCitAV0lUSF9HQ09WX1RSVUVAQFdJVEhfUENSRTJfOF9UUlVFQGFtX19hcHBlbmRfMTIgPSAkKEdDT1ZfQ0ZMQUdTKQorQFdJVEhfUENSRTJfOF9UUlVFQGFtX19hcHBlbmRfMTMgPSBwY3JlMmdyZXAKK0BXSVRIX0dDT1ZfVFJVRUBAV0lUSF9QQ1JFMl84X1RSVUVAYW1fX2FwcGVuZF8xNCA9ICQoR0NPVl9DRkxBR1MpCitAV0lUSF9HQ09WX1RSVUVAQFdJVEhfUENSRTJfOF9UUlVFQGFtX19hcHBlbmRfMTUgPSAkKEdDT1ZfTElCUykKK0BXSVRIX0pJVF9UUlVFQGFtX19hcHBlbmRfMTYgPSBwY3JlMl9qaXRfdGVzdAorQFdJVEhfSklUX1RSVUVAYW1fX2FwcGVuZF8xNyA9IHBjcmUyX2ppdF90ZXN0CitAV0lUSF9KSVRfVFJVRUBAV0lUSF9QQ1JFMl84X1RSVUVAYW1fX2FwcGVuZF8xOCA9IGxpYnBjcmUyLTgubGEKK0BXSVRIX0pJVF9UUlVFQEBXSVRIX1BDUkUyXzE2X1RSVUVAYW1fX2FwcGVuZF8xOSA9IGxpYnBjcmUyLTE2LmxhCitAV0lUSF9KSVRfVFJVRUBAV0lUSF9QQ1JFMl8zMl9UUlVFQGFtX19hcHBlbmRfMjAgPSBsaWJwY3JlMi0zMi5sYQorQFdJVEhfR0NPVl9UUlVFQEBXSVRIX0pJVF9UUlVFQGFtX19hcHBlbmRfMjEgPSAkKEdDT1ZfQ0ZMQUdTKQorQFdJVEhfR0NPVl9UUlVFQEBXSVRIX0pJVF9UUlVFQGFtX19hcHBlbmRfMjIgPSAkKEdDT1ZfTElCUykKK0BXSVRIX1BDUkUyXzhfVFJVRUBhbV9fYXBwZW5kXzIzID0gbGlicGNyZTItOC5sYSBsaWJwY3JlMi1wb3NpeC5sYQorQFdJVEhfUENSRTJfMTZfVFJVRUBhbV9fYXBwZW5kXzI0ID0gbGlicGNyZTItMTYubGEKK0BXSVRIX1BDUkUyXzMyX1RSVUVAYW1fX2FwcGVuZF8yNSA9IGxpYnBjcmUyLTMyLmxhCitAV0lUSF9WQUxHUklORF9UUlVFQGFtX19hcHBlbmRfMjYgPSAkKFZBTEdSSU5EX0NGTEFHUykKK0BXSVRIX0dDT1ZfVFJVRUBhbV9fYXBwZW5kXzI3ID0gJChHQ09WX0NGTEFHUykKK0BXSVRIX0dDT1ZfVFJVRUBhbV9fYXBwZW5kXzI4ID0gJChHQ09WX0xJQlMpCitAV0lUSF9QQ1JFMl84X1RSVUVAYW1fX2FwcGVuZF8yOSA9IFJ1bkdyZXBUZXN0CitAV0lUSF9QQ1JFMl84X1RSVUVAYW1fX2FwcGVuZF8zMCA9IFJ1bkdyZXBUZXN0CitAV0lUSF9QQ1JFMl84X1RSVUVAYW1fX2FwcGVuZF8zMSA9IGxpYnBjcmUyLTgucGMgbGlicGNyZTItcG9zaXgucGMKK0BXSVRIX1BDUkUyXzE2X1RSVUVAYW1fX2FwcGVuZF8zMiA9IGxpYnBjcmUyLTE2LnBjCitAV0lUSF9QQ1JFMl8zMl9UUlVFQGFtX19hcHBlbmRfMzMgPSBsaWJwY3JlMi0zMi5wYworQFdJVEhfR0NPVl9GQUxTRUBhbV9fYXBwZW5kXzM0ID0gc3JjLyouZ2NkYSBzcmMvKi5nY25vCitzdWJkaXIgPSAuCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9heF9wdGhyZWFkLm00IFwKKwkkKHRvcF9zcmNkaXIpL200L2xpYnRvb2wubTQgJCh0b3Bfc3JjZGlyKS9tNC9sdG9wdGlvbnMubTQgXAorCSQodG9wX3NyY2RpcikvbTQvbHRzdWdhci5tNCAkKHRvcF9zcmNkaXIpL200L2x0dmVyc2lvbi5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9sdH5vYnNvbGV0ZS5tNCBcCisJJCh0b3Bfc3JjZGlyKS9tNC9wY3JlMl92aXNpYmlsaXR5Lm00IFwKKwkkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSBcCisJJChhbV9fY29uZmlndXJlX2RlcHMpICQoYW1fX2Rpc3Rfbm9pbnN0X1NDUklQVFNfRElTVCkgXAorCSQoZGlzdF9kb2NfREFUQSkgJChkaXN0X2h0bWxfREFUQSkgJChpbmNsdWRlX0hFQURFUlMpIFwKKwkkKGFtX19ESVNUX0NPTU1PTikKK2FtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTID0gY29uZmlnLnN0YXR1cyBjb25maWcuY2FjaGUgY29uZmlnLmxvZyBcCisgY29uZmlndXJlLmxpbmVubyBjb25maWcuc3RhdHVzLmxpbmVubworbWtpbnN0YWxsZGlycyA9ICQoaW5zdGFsbF9zaCkgLWQKK0NPTkZJR19IRUFERVIgPSAkKHRvcF9idWlsZGRpcikvc3JjL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPSBsaWJwY3JlMi04LnBjIGxpYnBjcmUyLTE2LnBjIGxpYnBjcmUyLTMyLnBjIFwKKwlsaWJwY3JlMi1wb3NpeC5wYyBwY3JlMi1jb25maWcgc3JjL3BjcmUyLmgKK0NPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CithbV9fdnBhdGhfYWRqX3NldHVwID0gc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsKK2FtX192cGF0aF9hZGogPSBjYXNlICQkcCBpbiBcCisgICAgJChzcmNkaXIpLyopIGY9YGVjaG8gIiQkcCIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKyAgICAqKSBmPSQkcDs7IFwKKyAgZXNhYzsKK2FtX19zdHJpcF9kaXIgPSBmPWBlY2hvICQkcCB8IHNlZCAtZSAnc3xeLiovfHwnYDsKK2FtX19pbnN0YWxsX21heCA9IDQwCithbV9fbm9iYXNlX3N0cmlwX3NldHVwID0gXAorICBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqfF0vXFxcXCYvZydgCithbV9fbm9iYXNlX3N0cmlwID0gXAorICBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgLWUgInN8JCRzcmNkaXJzdHJpcC98fCIKK2FtX19ub2Jhc2VfbGlzdCA9ICQoYW1fX25vYmFzZV9zdHJpcF9zZXR1cCk7IFwKKyAgZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAgJCRwIjsgZG9uZSB8IFwKKyAgc2VkICJzfCAkJHNyY2RpcnN0cmlwL3wgfDsiJyAvIC4qXC8vIXMvIC4qLyAuLzsgcyxcKCAuKlwpL1teL10qJCQsXDEsJyB8IFwKKyAgJChBV0spICdCRUdJTiB7IGZpbGVzWyIuIl0gPSAiIiB9IHsgZmlsZXNbJCQyXSA9IGZpbGVzWyQkMl0gIiAiICQkMTsgXAorICAgIGlmICgrK25bJCQyXSA9PSAkKGFtX19pbnN0YWxsX21heCkpIFwKKyAgICAgIHsgcHJpbnQgJCQyLCBmaWxlc1skJDJdOyBuWyQkMl0gPSAwOyBmaWxlc1skJDJdID0gIiIgfSB9IFwKKyAgICBFTkQgeyBmb3IgKGRpciBpbiBmaWxlcykgcHJpbnQgZGlyLCBmaWxlc1tkaXJdIH0nCithbV9fYmFzZV9saXN0ID0gXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnIHwgXAorICBzZWQgJyQkIU47JCQhTjskJCFOOyQkIU47cy9cbi8gL2cnCithbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyID0geyBcCisgIHRlc3QgLXogIiQkZmlsZXMiIFwKKyAgICB8fCB7IHRlc3QgISAtZCAiJCRkaXIiICYmIHRlc3QgISAtZiAiJCRkaXIiICYmIHRlc3QgISAtciAiJCRkaXIiOyB9IFwKKyAgICB8fCB7IGVjaG8gIiAoIGNkICckJGRpcicgJiYgcm0gLWYiICQkZmlsZXMgIikiOyBcCisgICAgICAgICAkKGFtX19jZCkgIiQkZGlyIiAmJiBybSAtZiAkJGZpbGVzOyB9OyBcCisgIH0KK2FtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIgXAorCSIkKERFU1RESVIpJChiaW5kaXIpIiAiJChERVNURElSKSQobWFuMWRpcikiIFwKKwkiJChERVNURElSKSQobWFuM2RpcikiICIkKERFU1RESVIpJChkb2NkaXIpIiBcCisJIiQoREVTVERJUikkKGh0bWxkaXIpIiAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgXAorCSIkKERFU1RESVIpJChpbmNsdWRlZGlyKSIgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIgorTFRMSUJSQVJJRVMgPSAkKGxpYl9MVExJQlJBUklFUykKK2xpYnBjcmUyXzE2X2xhX0RFUEVOREVOQ0lFUyA9CithbV9fbGlicGNyZTJfMTZfbGFfU09VUkNFU19ESVNUID0gc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jIFwKKwlzcmMvcGNyZTJfY29tcGlsZS5jIHNyYy9wY3JlMl9jb25maWcuYyBzcmMvcGNyZTJfY29udGV4dC5jIFwKKwlzcmMvcGNyZTJfZGZhX21hdGNoLmMgc3JjL3BjcmUyX2Vycm9yLmMgXAorCXNyYy9wY3JlMl9maW5kX2JyYWNrZXQuYyBzcmMvcGNyZTJfaW50ZXJuYWwuaCBcCisJc3JjL3BjcmUyX2ludG1vZGVkZXAuaCBzcmMvcGNyZTJfaml0X2NvbXBpbGUuYyBcCisJc3JjL3BjcmUyX21ha2V0YWJsZXMuYyBzcmMvcGNyZTJfbWF0Y2guYyBcCisJc3JjL3BjcmUyX21hdGNoX2RhdGEuYyBzcmMvcGNyZTJfbmV3bGluZS5jIHNyYy9wY3JlMl9vcmQydXRmLmMgXAorCXNyYy9wY3JlMl9wYXR0ZXJuX2luZm8uYyBzcmMvcGNyZTJfc2VyaWFsaXplLmMgXAorCXNyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYyBzcmMvcGNyZTJfc3R1ZHkuYyBcCisJc3JjL3BjcmUyX3N1YnN0aXR1dGUuYyBzcmMvcGNyZTJfc3Vic3RyaW5nLmMgXAorCXNyYy9wY3JlMl90YWJsZXMuYyBzcmMvcGNyZTJfdWNkLmMgc3JjL3BjcmUyX3VjcC5oIFwKKwlzcmMvcGNyZTJfdmFsaWRfdXRmLmMgc3JjL3BjcmUyX3hjbGFzcy5jCithbV9fZGlyc3RhbXAgPSAkKGFtX19sZWFkaW5nX2RvdClkaXJzdGFtcAorYW1fX29iamVjdHNfMSA9IHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9jb21waWxlLmxvIFwKKwlzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29uZmlnLmxvIFwKKwlzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29udGV4dC5sbyBcCisJc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2RmYV9tYXRjaC5sbyBcCisJc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2Vycm9yLmxvIFwKKwlzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfZmluZF9icmFja2V0LmxvIFwKKwlzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfaml0X2NvbXBpbGUubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9tYWtldGFibGVzLmxvIFwKKwlzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWF0Y2gubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9tYXRjaF9kYXRhLmxvIFwKKwlzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbmV3bGluZS5sbyBcCisJc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX29yZDJ1dGYubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9wYXR0ZXJuX2luZm8ubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zZXJpYWxpemUubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdHJpbmdfdXRpbHMubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdHVkeS5sbyBcCisJc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3N1YnN0aXR1dGUubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdWJzdHJpbmcubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl90YWJsZXMubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl91Y2QubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl92YWxpZF91dGYubG8gXAorCXNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl94Y2xhc3MubG8KK0BXSVRIX1BDUkUyXzE2X1RSVUVAYW1fbGlicGNyZTJfMTZfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMSkKK2FtX19vYmplY3RzXzIgPSBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY2hhcnRhYmxlcy5sbworQFdJVEhfUENSRTJfMTZfVFJVRUBub2Rpc3RfbGlicGNyZTJfMTZfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMikKK2xpYnBjcmUyXzE2X2xhX09CSkVDVFMgPSAkKGFtX2xpYnBjcmUyXzE2X2xhX09CSkVDVFMpIFwKKwkkKG5vZGlzdF9saWJwY3JlMl8xNl9sYV9PQkpFQ1RTKQorQU1fVl9sdCA9ICQoYW1fX3ZfbHRfQEFNX1ZAKQorYW1fX3ZfbHRfID0gJChhbV9fdl9sdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2x0XzAgPSAtLXNpbGVudAorYW1fX3ZfbHRfMSA9IAorbGlicGNyZTJfMTZfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpICQobGlicGNyZTJfMTZfbGFfTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK0BXSVRIX1BDUkUyXzE2X1RSVUVAYW1fbGlicGNyZTJfMTZfbGFfcnBhdGggPSAtcnBhdGggJChsaWJkaXIpCitsaWJwY3JlMl8zMl9sYV9ERVBFTkRFTkNJRVMgPQorYW1fX2xpYnBjcmUyXzMyX2xhX1NPVVJDRVNfRElTVCA9IHNyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYyBcCisJc3JjL3BjcmUyX2NvbXBpbGUuYyBzcmMvcGNyZTJfY29uZmlnLmMgc3JjL3BjcmUyX2NvbnRleHQuYyBcCisJc3JjL3BjcmUyX2RmYV9tYXRjaC5jIHNyYy9wY3JlMl9lcnJvci5jIFwKKwlzcmMvcGNyZTJfZmluZF9icmFja2V0LmMgc3JjL3BjcmUyX2ludGVybmFsLmggXAorCXNyYy9wY3JlMl9pbnRtb2RlZGVwLmggc3JjL3BjcmUyX2ppdF9jb21waWxlLmMgXAorCXNyYy9wY3JlMl9tYWtldGFibGVzLmMgc3JjL3BjcmUyX21hdGNoLmMgXAorCXNyYy9wY3JlMl9tYXRjaF9kYXRhLmMgc3JjL3BjcmUyX25ld2xpbmUuYyBzcmMvcGNyZTJfb3JkMnV0Zi5jIFwKKwlzcmMvcGNyZTJfcGF0dGVybl9pbmZvLmMgc3JjL3BjcmUyX3NlcmlhbGl6ZS5jIFwKKwlzcmMvcGNyZTJfc3RyaW5nX3V0aWxzLmMgc3JjL3BjcmUyX3N0dWR5LmMgXAorCXNyYy9wY3JlMl9zdWJzdGl0dXRlLmMgc3JjL3BjcmUyX3N1YnN0cmluZy5jIFwKKwlzcmMvcGNyZTJfdGFibGVzLmMgc3JjL3BjcmUyX3VjZC5jIHNyYy9wY3JlMl91Y3AuaCBcCisJc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jIHNyYy9wY3JlMl94Y2xhc3MuYworYW1fX29iamVjdHNfMyA9IHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9jb21waWxlLmxvIFwKKwlzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29uZmlnLmxvIFwKKwlzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29udGV4dC5sbyBcCisJc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2RmYV9tYXRjaC5sbyBcCisJc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2Vycm9yLmxvIFwKKwlzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfZmluZF9icmFja2V0LmxvIFwKKwlzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfaml0X2NvbXBpbGUubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYWtldGFibGVzLmxvIFwKKwlzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfbWF0Y2gubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYXRjaF9kYXRhLmxvIFwKKwlzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfbmV3bGluZS5sbyBcCisJc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX29yZDJ1dGYubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9wYXR0ZXJuX2luZm8ubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zZXJpYWxpemUubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdHJpbmdfdXRpbHMubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdHVkeS5sbyBcCisJc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N1YnN0aXR1dGUubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdWJzdHJpbmcubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl90YWJsZXMubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl91Y2QubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl92YWxpZF91dGYubG8gXAorCXNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl94Y2xhc3MubG8KK0BXSVRIX1BDUkUyXzMyX1RSVUVAYW1fbGlicGNyZTJfMzJfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMykKK2FtX19vYmplY3RzXzQgPSBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY2hhcnRhYmxlcy5sbworQFdJVEhfUENSRTJfMzJfVFJVRUBub2Rpc3RfbGlicGNyZTJfMzJfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfNCkKK2xpYnBjcmUyXzMyX2xhX09CSkVDVFMgPSAkKGFtX2xpYnBjcmUyXzMyX2xhX09CSkVDVFMpIFwKKwkkKG5vZGlzdF9saWJwY3JlMl8zMl9sYV9PQkpFQ1RTKQorbGlicGNyZTJfMzJfbGFfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpICQobGlicGNyZTJfMzJfbGFfTERGTEFHUykgXAorCSQoTERGTEFHUykgLW8gJEAKK0BXSVRIX1BDUkUyXzMyX1RSVUVAYW1fbGlicGNyZTJfMzJfbGFfcnBhdGggPSAtcnBhdGggJChsaWJkaXIpCitsaWJwY3JlMl84X2xhX0RFUEVOREVOQ0lFUyA9CithbV9fbGlicGNyZTJfOF9sYV9TT1VSQ0VTX0RJU1QgPSBzcmMvcGNyZTJfYXV0b19wb3NzZXNzLmMgXAorCXNyYy9wY3JlMl9jb21waWxlLmMgc3JjL3BjcmUyX2NvbmZpZy5jIHNyYy9wY3JlMl9jb250ZXh0LmMgXAorCXNyYy9wY3JlMl9kZmFfbWF0Y2guYyBzcmMvcGNyZTJfZXJyb3IuYyBcCisJc3JjL3BjcmUyX2ZpbmRfYnJhY2tldC5jIHNyYy9wY3JlMl9pbnRlcm5hbC5oIFwKKwlzcmMvcGNyZTJfaW50bW9kZWRlcC5oIHNyYy9wY3JlMl9qaXRfY29tcGlsZS5jIFwKKwlzcmMvcGNyZTJfbWFrZXRhYmxlcy5jIHNyYy9wY3JlMl9tYXRjaC5jIFwKKwlzcmMvcGNyZTJfbWF0Y2hfZGF0YS5jIHNyYy9wY3JlMl9uZXdsaW5lLmMgc3JjL3BjcmUyX29yZDJ1dGYuYyBcCisJc3JjL3BjcmUyX3BhdHRlcm5faW5mby5jIHNyYy9wY3JlMl9zZXJpYWxpemUuYyBcCisJc3JjL3BjcmUyX3N0cmluZ191dGlscy5jIHNyYy9wY3JlMl9zdHVkeS5jIFwKKwlzcmMvcGNyZTJfc3Vic3RpdHV0ZS5jIHNyYy9wY3JlMl9zdWJzdHJpbmcuYyBcCisJc3JjL3BjcmUyX3RhYmxlcy5jIHNyYy9wY3JlMl91Y2QuYyBzcmMvcGNyZTJfdWNwLmggXAorCXNyYy9wY3JlMl92YWxpZF91dGYuYyBzcmMvcGNyZTJfeGNsYXNzLmMKK2FtX19vYmplY3RzXzUgPSBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MubG8gXAorCXNyYy9saWJwY3JlMl84X2xhLXBjcmUyX2NvbXBpbGUubG8gXAorCXNyYy9saWJwY3JlMl84X2xhLXBjcmUyX2NvbmZpZy5sbyBcCisJc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfY29udGV4dC5sbyBcCisJc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfZGZhX21hdGNoLmxvIFwKKwlzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9lcnJvci5sbyBcCisJc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfZmluZF9icmFja2V0LmxvIFwKKwlzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9qaXRfY29tcGlsZS5sbyBcCisJc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWFrZXRhYmxlcy5sbyBcCisJc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWF0Y2gubG8gXAorCXNyYy9saWJwY3JlMl84X2xhLXBjcmUyX21hdGNoX2RhdGEubG8gXAorCXNyYy9saWJwY3JlMl84X2xhLXBjcmUyX25ld2xpbmUubG8gXAorCXNyYy9saWJwY3JlMl84X2xhLXBjcmUyX29yZDJ1dGYubG8gXAorCXNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3BhdHRlcm5faW5mby5sbyBcCisJc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc2VyaWFsaXplLmxvIFwKKwlzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zdHJpbmdfdXRpbHMubG8gXAorCXNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3N0dWR5LmxvIFwKKwlzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zdWJzdGl0dXRlLmxvIFwKKwlzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zdWJzdHJpbmcubG8gXAorCXNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3RhYmxlcy5sbyBcCisJc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfdWNkLmxvIFwKKwlzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl92YWxpZF91dGYubG8gXAorCXNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3hjbGFzcy5sbworQFdJVEhfUENSRTJfOF9UUlVFQGFtX2xpYnBjcmUyXzhfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfNSkKK2FtX19vYmplY3RzXzYgPSBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9jaGFydGFibGVzLmxvCitAV0lUSF9QQ1JFMl84X1RSVUVAbm9kaXN0X2xpYnBjcmUyXzhfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfNikKK2xpYnBjcmUyXzhfbGFfT0JKRUNUUyA9ICQoYW1fbGlicGNyZTJfOF9sYV9PQkpFQ1RTKSBcCisJJChub2Rpc3RfbGlicGNyZTJfOF9sYV9PQkpFQ1RTKQorbGlicGNyZTJfOF9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChsaWJwY3JlMl84X2xhX0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQFdJVEhfUENSRTJfOF9UUlVFQGFtX2xpYnBjcmUyXzhfbGFfcnBhdGggPSAtcnBhdGggJChsaWJkaXIpCitAV0lUSF9QQ1JFMl84X1RSVUVAbGlicGNyZTJfcG9zaXhfbGFfREVQRU5ERU5DSUVTID0gbGlicGNyZTItOC5sYQorYW1fX2xpYnBjcmUyX3Bvc2l4X2xhX1NPVVJDRVNfRElTVCA9IHNyYy9wY3JlMnBvc2l4LmMKK0BXSVRIX1BDUkUyXzhfVFJVRUBhbV9saWJwY3JlMl9wb3NpeF9sYV9PQkpFQ1RTID0gIFwKK0BXSVRIX1BDUkUyXzhfVFJVRUAJc3JjL2xpYnBjcmUyX3Bvc2l4X2xhLXBjcmUycG9zaXgubG8KK2xpYnBjcmUyX3Bvc2l4X2xhX09CSkVDVFMgPSAkKGFtX2xpYnBjcmUyX3Bvc2l4X2xhX09CSkVDVFMpCitsaWJwY3JlMl9wb3NpeF9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgXAorCSQobGlicGNyZTJfcG9zaXhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQobGlicGNyZTJfcG9zaXhfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQFdJVEhfUENSRTJfOF9UUlVFQGFtX2xpYnBjcmUyX3Bvc2l4X2xhX3JwYXRoID0gLXJwYXRoICQobGliZGlyKQorQFdJVEhfUENSRTJfOF9UUlVFQGFtX19FWEVFWFRfMSA9IHBjcmUyZ3JlcCQoRVhFRVhUKQorQFdJVEhfUkVCVUlMRF9DSEFSVEFCTEVTX1RSVUVAYW1fX0VYRUVYVF8yID0gZGZ0YWJsZXMkKEVYRUVYVCkKK0BXSVRIX0pJVF9UUlVFQGFtX19FWEVFWFRfMyA9IHBjcmUyX2ppdF90ZXN0JChFWEVFWFQpCitQUk9HUkFNUyA9ICQoYmluX1BST0dSQU1TKSAkKG5vaW5zdF9QUk9HUkFNUykKK2FtX19kZnRhYmxlc19TT1VSQ0VTX0RJU1QgPSBzcmMvZGZ0YWJsZXMuYworQFdJVEhfUkVCVUlMRF9DSEFSVEFCTEVTX1RSVUVAYW1fZGZ0YWJsZXNfT0JKRUNUUyA9ICBcCitAV0lUSF9SRUJVSUxEX0NIQVJUQUJMRVNfVFJVRUAJc3JjL2RmdGFibGVzLiQoT0JKRVhUKQorZGZ0YWJsZXNfT0JKRUNUUyA9ICQoYW1fZGZ0YWJsZXNfT0JKRUNUUykKK2RmdGFibGVzX0xEQUREID0gJChMREFERCkKK2FtX19wY3JlMl9qaXRfdGVzdF9TT1VSQ0VTX0RJU1QgPSBzcmMvcGNyZTJfaml0X3Rlc3QuYworQFdJVEhfSklUX1RSVUVAYW1fcGNyZTJfaml0X3Rlc3RfT0JKRUNUUyA9ICBcCitAV0lUSF9KSVRfVFJVRUAJc3JjL3BjcmUyX2ppdF90ZXN0LXBjcmUyX2ppdF90ZXN0LiQoT0JKRVhUKQorcGNyZTJfaml0X3Rlc3RfT0JKRUNUUyA9ICQoYW1fcGNyZTJfaml0X3Rlc3RfT0JKRUNUUykKK2FtX19ERVBFTkRFTkNJRVNfMSA9CitAV0lUSF9HQ09WX1RSVUVAQFdJVEhfSklUX1RSVUVAYW1fX0RFUEVOREVOQ0lFU18yID0gIFwKK0BXSVRIX0dDT1ZfVFJVRUBAV0lUSF9KSVRfVFJVRUAJJChhbV9fREVQRU5ERU5DSUVTXzEpCitAV0lUSF9KSVRfVFJVRUBwY3JlMl9qaXRfdGVzdF9ERVBFTkRFTkNJRVMgPSAkKGFtX19hcHBlbmRfMTgpIFwKK0BXSVRIX0pJVF9UUlVFQAkkKGFtX19hcHBlbmRfMTkpICQoYW1fX2FwcGVuZF8yMCkgXAorQFdJVEhfSklUX1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18yKQorcGNyZTJfaml0X3Rlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyBcCisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpIFwKKwkkKHBjcmUyX2ppdF90ZXN0X0NGTEFHUykgJChDRkxBR1MpICQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyBcCisJJEAKK2FtX19wY3JlMmdyZXBfU09VUkNFU19ESVNUID0gc3JjL3BjcmUyZ3JlcC5jCitAV0lUSF9QQ1JFMl84X1RSVUVAYW1fcGNyZTJncmVwX09CSkVDVFMgPSAgXAorQFdJVEhfUENSRTJfOF9UUlVFQAlzcmMvcGNyZTJncmVwLXBjcmUyZ3JlcC4kKE9CSkVYVCkKK3BjcmUyZ3JlcF9PQkpFQ1RTID0gJChhbV9wY3JlMmdyZXBfT0JKRUNUUykKK0BXSVRIX0dDT1ZfVFJVRUBAV0lUSF9QQ1JFMl84X1RSVUVAYW1fX0RFUEVOREVOQ0lFU18zID0gIFwKK0BXSVRIX0dDT1ZfVFJVRUBAV0lUSF9QQ1JFMl84X1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18xKQorQFdJVEhfUENSRTJfOF9UUlVFQHBjcmUyZ3JlcF9ERVBFTkRFTkNJRVMgPSAkKGFtX19ERVBFTkRFTkNJRVNfMSkgXAorQFdJVEhfUENSRTJfOF9UUlVFQAkkKGFtX19ERVBFTkRFTkNJRVNfMSkgbGlicGNyZTItOC5sYSBcCitAV0lUSF9QQ1JFMl84X1RSVUVACSQoYW1fX0RFUEVOREVOQ0lFU18zKQorcGNyZTJncmVwX0xJTksgPSAkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKKwkkKExJQlRPT0xGTEFHUykgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKHBjcmUyZ3JlcF9DRkxBR1MpIFwKKwkkKENGTEFHUykgJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACithbV9wY3JlMnRlc3RfT0JKRUNUUyA9IHNyYy9wY3JlMnRlc3QtcGNyZTJ0ZXN0LiQoT0JKRVhUKQorcGNyZTJ0ZXN0X09CSkVDVFMgPSAkKGFtX3BjcmUydGVzdF9PQkpFQ1RTKQorQFdJVEhfR0NPVl9UUlVFQGFtX19ERVBFTkRFTkNJRVNfNCA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKQorcGNyZTJ0ZXN0X0RFUEVOREVOQ0lFUyA9ICQoYW1fX0RFUEVOREVOQ0lFU18xKSAkKGFtX19hcHBlbmRfMjMpIFwKKwkkKGFtX19hcHBlbmRfMjQpICQoYW1fX2FwcGVuZF8yNSkgJChhbV9fREVQRU5ERU5DSUVTXzQpCitwY3JlMnRlc3RfTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQocGNyZTJ0ZXN0X0NGTEFHUykgXAorCSQoQ0ZMQUdTKSAkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK2FtX19kaXN0X25vaW5zdF9TQ1JJUFRTX0RJU1QgPSBSdW5UZXN0IFJ1bkdyZXBUZXN0CitTQ1JJUFRTID0gJChiaW5fU0NSSVBUUykgJChkaXN0X25vaW5zdF9TQ1JJUFRTKQorQU1fVl9QID0gJChhbV9fdl9QX0BBTV9WQCkKK2FtX192X1BfID0gJChhbV9fdl9QX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfUF8wID0gZmFsc2UKK2FtX192X1BfMSA9IDoKK0FNX1ZfR0VOID0gJChhbV9fdl9HRU5fQEFNX1ZAKQorYW1fX3ZfR0VOXyA9ICQoYW1fX3ZfR0VOX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfR0VOXzAgPSBAZWNobyAiICBHRU4gICAgICIgJEA7CithbV9fdl9HRU5fMSA9IAorQU1fVl9hdCA9ICQoYW1fX3ZfYXRfQEFNX1ZAKQorYW1fX3ZfYXRfID0gJChhbV9fdl9hdF9AQU1fREVGQVVMVF9WQCkKK2FtX192X2F0XzAgPSBACithbV9fdl9hdF8xID0gCitERUZBVUxUX0lOQ0xVREVTID0gLUkuQGFtX19pc3JjQCAtSSQodG9wX2J1aWxkZGlyKS9zcmMKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCithbV9fbXYgPSBtdiAtZgorQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOworYW1fX3ZfQ0NfMSA9IAorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitBTV9WX0NDTEQgPSAkKGFtX192X0NDTERfQEFNX1ZAKQorYW1fX3ZfQ0NMRF8gPSAkKGFtX192X0NDTERfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ0xEXzAgPSBAZWNobyAiICBDQ0xEICAgICIgJEA7CithbV9fdl9DQ0xEXzEgPSAKK1NPVVJDRVMgPSAkKGxpYnBjcmUyXzE2X2xhX1NPVVJDRVMpICQobm9kaXN0X2xpYnBjcmUyXzE2X2xhX1NPVVJDRVMpIFwKKwkkKGxpYnBjcmUyXzMyX2xhX1NPVVJDRVMpICQobm9kaXN0X2xpYnBjcmUyXzMyX2xhX1NPVVJDRVMpIFwKKwkkKGxpYnBjcmUyXzhfbGFfU09VUkNFUykgJChub2Rpc3RfbGlicGNyZTJfOF9sYV9TT1VSQ0VTKSBcCisJJChsaWJwY3JlMl9wb3NpeF9sYV9TT1VSQ0VTKSAkKGRmdGFibGVzX1NPVVJDRVMpIFwKKwkkKHBjcmUyX2ppdF90ZXN0X1NPVVJDRVMpICQocGNyZTJncmVwX1NPVVJDRVMpIFwKKwkkKHBjcmUydGVzdF9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChhbV9fbGlicGNyZTJfMTZfbGFfU09VUkNFU19ESVNUKSBcCisJJChhbV9fbGlicGNyZTJfMzJfbGFfU09VUkNFU19ESVNUKSBcCisJJChhbV9fbGlicGNyZTJfOF9sYV9TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19saWJwY3JlMl9wb3NpeF9sYV9TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19kZnRhYmxlc19TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19wY3JlMl9qaXRfdGVzdF9TT1VSQ0VTX0RJU1QpIFwKKwkkKGFtX19wY3JlMmdyZXBfU09VUkNFU19ESVNUKSAkKHBjcmUydGVzdF9TT1VSQ0VTKQorYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCisgIGNhc2UgJCRBTV9VUERBVEVfSU5GT19ESVIgaW4gXAorICAgIG58bm98Tk8pIGZhbHNlOzsgXAorICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCisgIGVzYWMKK21hbjFkaXIgPSAkKG1hbmRpcikvbWFuMQorbWFuM2RpciA9ICQobWFuZGlyKS9tYW4zCitOUk9GRiA9IG5yb2ZmCitNQU5TID0gJChkaXN0X21hbl9NQU5TKQorREFUQSA9ICQoZGlzdF9kb2NfREFUQSkgJChkaXN0X2h0bWxfREFUQSkgJChwa2djb25maWdfREFUQSkKK0hFQURFUlMgPSAkKGluY2x1ZGVfSEVBREVSUykgJChub2Rpc3RfaW5jbHVkZV9IRUFERVJTKQorYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKKyMgUmVhZCBhIGxpc3Qgb2YgbmV3bGluZS1zZXBhcmF0ZWQgc3RyaW5ncyBmcm9tIHRoZSBzdGFuZGFyZCBpbnB1dCwKKyMgYW5kIHByaW50IGVhY2ggb2YgdGhlbSBvbmNlLCB3aXRob3V0IGR1cGxpY2F0ZXMuICBJbnB1dCBvcmRlciBpcworIyAqbm90KiBwcmVzZXJ2ZWQuCithbV9fdW5pcXVpZnlfaW5wdXQgPSAkKEFXSykgJ1wKKyAgQkVHSU4geyBub25lbXB0eSA9IDA7IH0gXAorICB7IGl0ZW1zWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAorICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGl0ZW1zKSBwcmludCBpOyB9OyB9IFwKKycKKyMgTWFrZSBzdXJlIHRoZSBsaXN0IG9mIHNvdXJjZXMgaXMgdW5pcXVlLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSwKKyMgZS5nLiwgdGhlIHNhbWUgc291cmNlIGZpbGUgbWlnaHQgYmUgc2hhcmVkIGFtb25nIF9TT1VSQ0VTIHZhcmlhYmxlcworIyBmb3IgZGlmZmVyZW50IHByb2dyYW1zL2xpYnJhcmllcy4KK2FtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMgPSBcCisgIGxpc3Q9JyQoYW1fX3RhZ2dlZF9maWxlcyknOyBcCisgIHVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisgIGRvbmUgfCAkKGFtX191bmlxdWlmeV9pbnB1dClgCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitDU0NPUEUgPSBjc2NvcGUKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTID0gY3Njb3BlIGNoZWNrIHJlY2hlY2sKK2FtX190dHlfY29sb3JzX2R1bW15ID0gXAorICBtZ249IHJlZD0gZ3JuPSBsZ249IGJsdT0gYnJnPSBzdGQ9OyBcCisgIGFtX19jb2xvcl90ZXN0cz1ubworYW1fX3R0eV9jb2xvcnMgPSB7IFwKKyAgJChhbV9fdHR5X2NvbG9yc19kdW1teSk7IFwKKyAgaWYgdGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiA9IFhubzsgdGhlbiBcCisgICAgYW1fX2NvbG9yX3Rlc3RzPW5vOyBcCisgIGVsaWYgdGVzdCAiWCQoQU1fQ09MT1JfVEVTVFMpIiA9IFhhbHdheXM7IHRoZW4gXAorICAgIGFtX19jb2xvcl90ZXN0cz15ZXM7IFwKKyAgZWxpZiB0ZXN0ICJYJCRURVJNIiAhPSBYZHVtYiAmJiB7IHRlc3QgLXQgMTsgfSAyPi9kZXYvbnVsbDsgdGhlbiBcCisgICAgYW1fX2NvbG9yX3Rlc3RzPXllczsgXAorICBmaTsgXAorICBpZiB0ZXN0ICQkYW1fX2NvbG9yX3Rlc3RzID0geWVzOyB0aGVuIFwKKyAgICByZWQ9JxtbMDszMW0nOyBcCisgICAgZ3JuPScbWzA7MzJtJzsgXAorICAgIGxnbj0nG1sxOzMybSc7IFwKKyAgICBibHU9JxtbMTszNG0nOyBcCisgICAgbWduPScbWzA7MzVtJzsgXAorICAgIGJyZz0nG1sxbSc7IFwKKyAgICBzdGQ9JxtbbSc7IFwKKyAgZmk7IFwKK30KK2FtX19yZWNoZWNrX3J4ID0gXlsgCV0qOnJlY2hlY2s6WyAJXSoKK2FtX19nbG9iYWxfdGVzdF9yZXN1bHRfcnggPSBeWyAJXSo6Z2xvYmFsLXRlc3QtcmVzdWx0OlsgCV0qCithbV9fY29weV9pbl9nbG9iYWxfbG9nX3J4ID0gXlsgCV0qOmNvcHktaW4tZ2xvYmFsLWxvZzpbIAldKgorIyBBIGNvbW1hbmQgdGhhdCwgZ2l2ZW4gYSBuZXdsaW5lLXNlcGFyYXRlZCBsaXN0IG9mIHRlc3QgbmFtZXMgb24gdGhlCisjIHN0YW5kYXJkIGlucHV0LCBwcmludCB0aGUgbmFtZSBvZiB0aGUgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcmUtcnVuCisjIHVwb24gIm1ha2UgcmVjaGVjayIuCithbV9fbGlzdF9yZWNoZWNrX3Rlc3RzID0gJChBV0spICd7IFwKKyAgcmVjaGVjayA9IDE7IFwKKyAgd2hpbGUgKChyYyA9IChnZXRsaW5lIGxpbmUgPCAoJCQwICIudHJzIikpKSAhPSAwKSBcCisgICAgeyBcCisgICAgICBpZiAocmMgPCAwKSBcCisgICAgICAgIHsgXAorICAgICAgICAgIGlmICgoZ2V0bGluZSBsaW5lMiA8ICgkJDAgIi5sb2ciKSkgPCAwKSBcCisJICAgIHJlY2hlY2sgPSAwOyBcCisgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgfSBcCisgICAgICBlbHNlIGlmIChsaW5lIH4gLyQoYW1fX3JlY2hlY2tfcngpW25OXVtPb10vKSBcCisgICAgICAgIHsgXAorICAgICAgICAgIHJlY2hlY2sgPSAwOyBcCisgICAgICAgICAgYnJlYWs7IFwKKyAgICAgICAgfSBcCisgICAgICBlbHNlIGlmIChsaW5lIH4gLyQoYW1fX3JlY2hlY2tfcngpW3lZXVtlRV1bc1NdLykgXAorICAgICAgICB7IFwKKyAgICAgICAgICBicmVhazsgXAorICAgICAgICB9IFwKKyAgICB9OyBcCisgIGlmIChyZWNoZWNrKSBcCisgICAgcHJpbnQgJCQwOyBcCisgIGNsb3NlICgkJDAgIi50cnMiKTsgXAorICBjbG9zZSAoJCQwICIubG9nIik7IFwKK30nCisjIEEgY29tbWFuZCB0aGF0LCBnaXZlbiBhIG5ld2xpbmUtc2VwYXJhdGVkIGxpc3Qgb2YgdGVzdCBuYW1lcyBvbiB0aGUKKyMgc3RhbmRhcmQgaW5wdXQsIGNyZWF0ZSB0aGUgZ2xvYmFsIGxvZyBmcm9tIHRoZWlyIC50cnMgYW5kIC5sb2cgZmlsZXMuCithbV9fY3JlYXRlX2dsb2JhbF9sb2cgPSAkKEFXSykgJyBcCitmdW5jdGlvbiBmYXRhbChtc2cpIFwKK3sgXAorICBwcmludCAiZmF0YWw6IG1ha2luZyAkQDogIiBtc2cgfCAiY2F0ID4mMiI7IFwKKyAgZXhpdCAxOyBcCit9IFwKK2Z1bmN0aW9uIHJzdF9zZWN0aW9uKGhlYWRlcikgXAoreyBcCisgIHByaW50IGhlYWRlcjsgXAorICBsZW4gPSBsZW5ndGgoaGVhZGVyKTsgXAorICBmb3IgKGkgPSAxOyBpIDw9IGxlbjsgaSA9IGkgKyAxKSBcCisgICAgcHJpbnRmICI9IjsgXAorICBwcmludGYgIlxuXG4iOyBcCit9IFwKK3sgXAorICBjb3B5X2luX2dsb2JhbF9sb2cgPSAxOyBcCisgIGdsb2JhbF90ZXN0X3Jlc3VsdCA9ICJSVU4iOyBcCisgIHdoaWxlICgocmMgPSAoZ2V0bGluZSBsaW5lIDwgKCQkMCAiLnRycyIpKSkgIT0gMCkgXAorICAgIHsgXAorICAgICAgaWYgKHJjIDwgMCkgXAorICAgICAgICAgZmF0YWwoImZhaWxlZCB0byByZWFkIGZyb20gIiAkJDAgIi50cnMiKTsgXAorICAgICAgaWYgKGxpbmUgfiAvJChhbV9fZ2xvYmFsX3Rlc3RfcmVzdWx0X3J4KS8pIFwKKyAgICAgICAgeyBcCisgICAgICAgICAgc3ViKCIkKGFtX19nbG9iYWxfdGVzdF9yZXN1bHRfcngpIiwgIiIsIGxpbmUpOyBcCisgICAgICAgICAgc3ViKCJbIAldKiQkIiwgIiIsIGxpbmUpOyBcCisgICAgICAgICAgZ2xvYmFsX3Rlc3RfcmVzdWx0ID0gbGluZTsgXAorICAgICAgICB9IFwKKyAgICAgIGVsc2UgaWYgKGxpbmUgfiAvJChhbV9fY29weV9pbl9nbG9iYWxfbG9nX3J4KVtuTl1bb09dLykgXAorICAgICAgICBjb3B5X2luX2dsb2JhbF9sb2cgPSAwOyBcCisgICAgfTsgXAorICBpZiAoY29weV9pbl9nbG9iYWxfbG9nKSBcCisgICAgeyBcCisgICAgICByc3Rfc2VjdGlvbihnbG9iYWxfdGVzdF9yZXN1bHQgIjogIiAkJDApOyBcCisgICAgICB3aGlsZSAoKHJjID0gKGdldGxpbmUgbGluZSA8ICgkJDAgIi5sb2ciKSkpICE9IDApIFwKKyAgICAgIHsgXAorICAgICAgICBpZiAocmMgPCAwKSBcCisgICAgICAgICAgZmF0YWwoImZhaWxlZCB0byByZWFkIGZyb20gIiAkJDAgIi5sb2ciKTsgXAorICAgICAgICBwcmludCBsaW5lOyBcCisgICAgICB9OyBcCisgICAgICBwcmludGYgIlxuIjsgXAorICAgIH07IFwKKyAgY2xvc2UgKCQkMCAiLnRycyIpOyBcCisgIGNsb3NlICgkJDAgIi5sb2ciKTsgXAorfScKKyMgUmVzdHJ1Y3R1cmVkIFRleHQgdGl0bGUuCithbV9fcnN0X3RpdGxlID0geyBzZWQgJ3MvLiovICAgJiAgIC87aDtzLy4vPS9nO3A7eDtzLyAqJCQvLztwO2cnICYmIGVjaG87IH0KKyMgU29sYXJpcyAxMCAnbWFrZScsIGFuZCBzZXZlcmFsIG90aGVyIHRyYWRpdGlvbmFsICdtYWtlJyBpbXBsZW1lbnRhdGlvbnMsCisjIHBhc3MgIi1lIiB0byAkKFNIRUxMKSwgYW5kIFBPU0lYIDIwMDggZXZlbiByZXF1aXJlcyB0aGlzLiAgV29yayBhcm91bmQgaXQKKyMgYnkgZGlzYWJsaW5nIC1lICh1c2luZyB0aGUgWFNJIGV4dGVuc2lvbiAic2V0ICtlIikgaWYgaXQncyBzZXQuCithbV9fc2hfZV9zZXR1cCA9IGNhc2UgJCQtIGluICplKikgc2V0ICtlOzsgZXNhYworIyBEZWZhdWx0IGZsYWdzIHBhc3NlZCB0byB0ZXN0IGRyaXZlcnMuCithbV9fY29tbW9uX2RyaXZlcl9mbGFncyA9IFwKKyAgLS1jb2xvci10ZXN0cyAiJCRhbV9fY29sb3JfdGVzdHMiIFwKKyAgLS1lbmFibGUtaGFyZC1lcnJvcnMgIiQkYW1fX2VuYWJsZV9oYXJkX2Vycm9ycyIgXAorICAtLWV4cGVjdC1mYWlsdXJlICIkJGFtX19leHBlY3RfZmFpbHVyZSIKKyMgVG8gYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBjb21tYW5kIHJ1bm5pbmcgdGhlIHRlc3QuICBDcmVhdGVzIHRoZQorIyBkaXJlY3RvcnkgZm9yIHRoZSBsb2cgaWYgbmVlZGVkLiAgU3RvcmVzIGluICRkaXIgdGhlIGRpcmVjdG9yeQorIyBjb250YWluaW5nICRmLCBpbiAkdHN0IHRoZSB0ZXN0LCBpbiAkbG9nIHRoZSBsb2cuICBFeGVjdXRlcyB0aGUKKyMgZGV2ZWxvcGVyLSBkZWZpbmVkIHRlc3Qgc2V0dXAgQU1fVEVTVFNfRU5WSVJPTk1FTlQgKGlmIGFueSksIGFuZAorIyBwYXNzZXMgVEVTVFNfRU5WSVJPTk1FTlQuICBTZXQgdXAgb3B0aW9ucyBmb3IgdGhlIHdyYXBwZXIgdGhhdAorIyB3aWxsIHJ1biB0aGUgdGVzdCBzY3JpcHRzIChvciB0aGVpciBhc3NvY2lhdGVkIExPR19DT01QSUxFUiwgaWYKKyMgdGh5IGhhdmUgb25lKS4KK2FtX19jaGVja19wcmUgPSBcCiskKGFtX19zaF9lX3NldHVwKTsJCQkJCVwKKyQoYW1fX3ZwYXRoX2Fkal9zZXR1cCkgJChhbV9fdnBhdGhfYWRqKQkJCVwKKyQoYW1fX3R0eV9jb2xvcnMpOwkJCQkJXAorc3JjZGlyPSQoc3JjZGlyKTsgZXhwb3J0IHNyY2RpcjsJCQlcCitjYXNlICIkQCIgaW4JCQkJCQlcCisgICovKikgYW1fX29kaXI9YGVjaG8gIi4vJEAiIHwgc2VkICdzfC9bXi9dKiQkfHwnYDs7CVwKKyAgICAqKSBhbV9fb2Rpcj0uOzsgCQkJCQlcCitlc2FjOwkJCQkJCQlcCit0ZXN0ICJ4JCRhbV9fb2RpciIgPSB4Ii4iIHx8IHRlc3QgLWQgIiQkYW1fX29kaXIiIAlcCisgIHx8ICQoTUtESVJfUCkgIiQkYW1fX29kaXIiIHx8IGV4aXQgJCQ/OwkJXAoraWYgdGVzdCAtZiAiLi8kJGYiOyB0aGVuIGRpcj0uLzsJCQlcCitlbGlmIHRlc3QgLWYgIiQkZiI7IHRoZW4gZGlyPTsJCQkJXAorZWxzZSBkaXI9IiQoc3JjZGlyKS8iOyBmaTsJCQkJXAordHN0PSQkZGlyJCRmOyBsb2c9JyRAJzsgCQkJCVwKK2lmIHRlc3QgLW4gJyQoRElTQUJMRV9IQVJEX0VSUk9SUyknOyB0aGVuCQlcCisgIGFtX19lbmFibGVfaGFyZF9lcnJvcnM9bm87IAkJCQlcCitlbHNlCQkJCQkJCVwKKyAgYW1fX2VuYWJsZV9oYXJkX2Vycm9ycz15ZXM7IAkJCQlcCitmaTsgCQkJCQkJCVwKK2Nhc2UgIiAkKFhGQUlMX1RFU1RTKSAiIGluCQkJCVwKKyAgKltcIFwJXSQkZltcIFwJXSogfCAqW1wgXAldJCRkaXIkJGZbXCBcCV0qKSBcCisgICAgYW1fX2V4cGVjdF9mYWlsdXJlPXllczs7CQkJCVwKKyAgKikJCQkJCQkJXAorICAgIGFtX19leHBlY3RfZmFpbHVyZT1ubzs7CQkJCVwKK2VzYWM7IAkJCQkJCQlcCiskKEFNX1RFU1RTX0VOVklST05NRU5UKSAkKFRFU1RTX0VOVklST05NRU5UKQorIyBBIHNoZWxsIGNvbW1hbmQgdG8gZ2V0IHRoZSBuYW1lcyBvZiB0aGUgdGVzdHMgc2NyaXB0cyB3aXRoIGFueSByZWdpc3RlcmVkCisjIGV4dGVuc2lvbiByZW1vdmVkIChpLmUuLCBlcXVpdmFsZW50bHksIHRoZSBuYW1lcyBvZiB0aGUgdGVzdCBsb2dzLCB3aXRoCisjIHRoZSAnLmxvZycgZXh0ZW5zaW9uIHJlbW92ZWQpLiAgVGhlIHJlc3VsdCBpcyBzYXZlZCBpbiB0aGUgc2hlbGwgdmFyaWFibGUKKyMgJyRiYXNlcycuICBUaGlzIGhvbm9ycyBydW50aW1lIG92ZXJyaWRpbmcgb2YgVEVTVFMgYW5kIFRFU1RfTE9HUy4gIFNhZGx5LAorIyB3ZSBjYW5ub3QgdXNlIHNvbWV0aGluZyBzaW1wbGVyLCBpbnZvbHZpbmcgZS5nLiwgIiQoVEVTVF9MT0dTOi5sb2c9KSIsCisjIHNpbmNlIHRoYXQgbWlnaHQgY2F1c2UgcHJvYmxlbSB3aXRoIFZQQVRIIHJld3JpdGVzIGZvciBzdWZmaXgtbGVzcyB0ZXN0cy4KKyMgU2VlIGFsc28gJ3Rlc3QtaGFybmVzcy12cGF0aC1yZXdyaXRlLnNoJyBhbmQgJ3Rlc3QtdHJzLWJhc2ljLnNoJy4KK2FtX19zZXRfVEVTVFNfYmFzZXMgPSBcCisgIGJhc2VzPSckKFRFU1RfTE9HUyknOyBcCisgIGJhc2VzPWBmb3IgaSBpbiAkJGJhc2VzOyBkbyBlY2hvICQkaTsgZG9uZSB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAorICBiYXNlcz1gZWNobyAkJGJhc2VzYAorUkVDSEVDS19MT0dTID0gJChURVNUX0xPR1MpCitURVNUX1NVSVRFX0xPRyA9IHRlc3Qtc3VpdGUubG9nCitURVNUX0VYVEVOU0lPTlMgPSBARVhFRVhUQCAudGVzdAorTE9HX0RSSVZFUiA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvdGVzdC1kcml2ZXIKK0xPR19DT01QSUxFID0gJChMT0dfQ09NUElMRVIpICQoQU1fTE9HX0ZMQUdTKSAkKExPR19GTEFHUykKK2FtX19zZXRfYiA9IFwKKyAgY2FzZSAnJEAnIGluIFwKKyAgICAqLyopIFwKKyAgICAgIGNhc2UgJyQqJyBpbiBcCisgICAgICAgICovKikgYj0nJConOzsgXAorICAgICAgICAgICopIGI9YGVjaG8gJyRAJyB8IHNlZCAncy9cLmxvZyQkLy8nYDsgXAorICAgICAgIGVzYWM7OyBcCisgICAgKikgXAorICAgICAgYj0nJConOzsgXAorICBlc2FjCithbV9fdGVzdF9sb2dzMSA9ICQoVEVTVFM6PS5sb2cpCithbV9fdGVzdF9sb2dzMiA9ICQoYW1fX3Rlc3RfbG9nczE6QEVYRUVYVEAubG9nPS5sb2cpCitURVNUX0xPR1MgPSAkKGFtX190ZXN0X2xvZ3MyOi50ZXN0LmxvZz0ubG9nKQorVEVTVF9MT0dfRFJJVkVSID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS90ZXN0LWRyaXZlcgorVEVTVF9MT0dfQ09NUElMRSA9ICQoVEVTVF9MT0dfQ09NUElMRVIpICQoQU1fVEVTVF9MT0dfRkxBR1MpIFwKKwkkKFRFU1RfTE9HX0ZMQUdTKQorYW1fX0RJU1RfQ09NTU9OID0gJChkaXN0X21hbl9NQU5TKSAkKHNyY2RpcikvTWFrZWZpbGUuaW4gXAorCSQoc3JjZGlyKS9saWJwY3JlMi0xNi5wYy5pbiAkKHNyY2RpcikvbGlicGNyZTItMzIucGMuaW4gXAorCSQoc3JjZGlyKS9saWJwY3JlMi04LnBjLmluICQoc3JjZGlyKS9saWJwY3JlMi1wb3NpeC5wYy5pbiBcCisJJChzcmNkaXIpL3BjcmUyLWNvbmZpZy5pbiAkKHRvcF9zcmNkaXIpL3NyYy9jb25maWcuaC5pbiBcCisJJCh0b3Bfc3JjZGlyKS9zcmMvcGNyZTIuaC5pbiBBVVRIT1JTIENPUFlJTkcgQ2hhbmdlTG9nIElOU1RBTEwgXAorCU5FV1MgUkVBRE1FIGFyLWxpYiBjb21waWxlIGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGRlcGNvbXAgXAorCWluc3RhbGwtc2ggbHRtYWluLnNoIG1pc3NpbmcgdGVzdC1kcml2ZXIKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitkaXN0ZGlyID0gJChQQUNLQUdFKS0kKFZFUlNJT04pCit0b3BfZGlzdGRpciA9ICQoZGlzdGRpcikKK2FtX19yZW1vdmVfZGlzdGRpciA9IFwKKyAgaWYgdGVzdCAtZCAiJChkaXN0ZGlyKSI7IHRoZW4gXAorICAgIGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAorICAgICAgJiYgcm0gLXJmICIkKGRpc3RkaXIpIiBcCisgICAgICB8fCB7IHNsZWVwIDUgJiYgcm0gLXJmICIkKGRpc3RkaXIpIjsgfTsgXAorICBlbHNlIDo7IGZpCithbV9fcG9zdF9yZW1vdmVfZGlzdGRpciA9ICQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorRElTVF9BUkNISVZFUyA9ICQoZGlzdGRpcikudGFyLmd6ICQoZGlzdGRpcikudGFyLmJ6MiAkKGRpc3RkaXIpLnppcAorR1pJUF9FTlYgPSAtLWJlc3QKK0RJU1RfVEFSR0VUUyA9IGRpc3QtYnppcDIgZGlzdC1nemlwIGRpc3QtemlwCitkaXN0dW5pbnN0YWxsY2hlY2tfbGlzdGZpbGVzID0gZmluZCAuIC10eXBlIGYgLXByaW50CithbV9fZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcyA9ICQoZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcykgXAorICB8IHNlZCAnc3xeXC4vfCQocHJlZml4KS98JyB8IGdyZXAgLXYgJyQoaW5mb2RpcikvZGlyJCQnCitkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACitBUiA9IEBBUkAKK0FTID0gQEFTQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTID0gQERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1NACitETExUT09MID0gQERMTFRPT0xACitEU1lNVVRJTCA9IEBEU1lNVVRJTEAKK0RVTVBCSU4gPSBARFVNUEJJTkAKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0VYVFJBX0xJQlBDUkUyXzE2X0xERkxBR1MgPSBARVhUUkFfTElCUENSRTJfMTZfTERGTEFHU0AKK0VYVFJBX0xJQlBDUkUyXzMyX0xERkxBR1MgPSBARVhUUkFfTElCUENSRTJfMzJfTERGTEFHU0AKK0VYVFJBX0xJQlBDUkUyXzhfTERGTEFHUyA9IEBFWFRSQV9MSUJQQ1JFMl84X0xERkxBR1NACitFWFRSQV9MSUJQQ1JFMl9QT1NJWF9MREZMQUdTID0gQEVYVFJBX0xJQlBDUkUyX1BPU0lYX0xERkxBR1NACitGR1JFUCA9IEBGR1JFUEAKK0dDT1ZfQ0ZMQUdTID0gQEdDT1ZfQ0ZMQUdTQAorR0NPVl9DWFhGTEFHUyA9IEBHQ09WX0NYWEZMQUdTQAorR0NPVl9MSUJTID0gQEdDT1ZfTElCU0AKK0dFTkhUTUwgPSBAR0VOSFRNTEAKK0dSRVAgPSBAR1JFUEAKK0hBVkVfVklTSUJJTElUWSA9IEBIQVZFX1ZJU0lCSUxJVFlACitJTlNUQUxMID0gQElOU1RBTExACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0xDT1YgPSBATENPVkAKK0xEID0gQExEQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCQloyID0gQExJQkJaMkAKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlJFQURMSU5FID0gQExJQlJFQURMSU5FQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTElCWiA9IEBMSUJaQAorTElQTyA9IEBMSVBPQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xUX1NZU19MSUJSQVJZX1BBVEggPSBATFRfU1lTX0xJQlJBUllfUEFUSEAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorTUFOSUZFU1RfVE9PTCA9IEBNQU5JRkVTVF9UT09MQAorTUtESVJfUCA9IEBNS0RJUl9QQAorTk0gPSBATk1ACitOTUVESVQgPSBATk1FRElUQAorT0JKRFVNUCA9IEBPQkpEVU1QQAorT0JKRVhUID0gQE9CSkVYVEAKK09UT09MID0gQE9UT09MQAorT1RPT0w2NCA9IEBPVE9PTDY0QAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9VUkwgPSBAUEFDS0FHRV9VUkxACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitQQ1JFMl9EQVRFID0gQFBDUkUyX0RBVEVACitQQ1JFMl9NQUpPUiA9IEBQQ1JFMl9NQUpPUkAKK1BDUkUyX01JTk9SID0gQFBDUkUyX01JTk9SQAorUENSRTJfUFJFUkVMRUFTRSA9IEBQQ1JFMl9QUkVSRUxFQVNFQAorUENSRTJfU1RBVElDX0NGTEFHID0gQFBDUkUyX1NUQVRJQ19DRkxBR0AKK1BLR19DT05GSUcgPSBAUEtHX0NPTkZJR0AKK1BLR19DT05GSUdfTElCRElSID0gQFBLR19DT05GSUdfTElCRElSQAorUEtHX0NPTkZJR19QQVRIID0gQFBLR19DT05GSUdfUEFUSEAKK1BUSFJFQURfQ0MgPSBAUFRIUkVBRF9DQ0AKK1BUSFJFQURfQ0ZMQUdTID0gQFBUSFJFQURfQ0ZMQUdTQAorUFRIUkVBRF9MSUJTID0gQFBUSFJFQURfTElCU0AKK1JBTkxJQiA9IEBSQU5MSUJACitTRUQgPSBAU0VEQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NIVE9PTCA9IEBTSFRPT0xACitTVFJJUCA9IEBTVFJJUEAKK1ZBTEdSSU5EX0NGTEFHUyA9IEBWQUxHUklORF9DRkxBR1NACitWQUxHUklORF9MSUJTID0gQFZBTEdSSU5EX0xJQlNACitWRVJTSU9OID0gQFZFUlNJT05ACitWSVNJQklMSVRZX0NGTEFHUyA9IEBWSVNJQklMSVRZX0NGTEFHU0AKK1ZJU0lCSUxJVFlfQ1hYRkxBR1MgPSBAVklTSUJJTElUWV9DWFhGTEFHU0AKK2Fic19idWlsZGRpciA9IEBhYnNfYnVpbGRkaXJACithYnNfc3JjZGlyID0gQGFic19zcmNkaXJACithYnNfdG9wX2J1aWxkZGlyID0gQGFic190b3BfYnVpbGRkaXJACithYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9EVU1QQklOID0gQGFjX2N0X0RVTVBCSU5ACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2F4X3B0aHJlYWRfY29uZmlnID0gQGF4X3B0aHJlYWRfY29uZmlnQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorYnVpbGRkaXIgPSBAYnVpbGRkaXJACitkYXRhZGlyID0gQGRhdGFkaXJACitkYXRhcm9vdGRpciA9IEBkYXRhcm9vdGRpckAKK2RvY2RpciA9IEBkb2NkaXJACitkdmlkaXIgPSBAZHZpZGlyQAorZW5hYmxlX3BjcmUyXzE2ID0gQGVuYWJsZV9wY3JlMl8xNkAKK2VuYWJsZV9wY3JlMl8zMiA9IEBlbmFibGVfcGNyZTJfMzJACitlbmFibGVfcGNyZTJfOCA9IEBlbmFibGVfcGNyZTJfOEAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2h0bWxkaXIgPSBAaHRtbGRpckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbGVkaXIgPSBAbG9jYWxlZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3BkZmRpciA9IEBwZGZkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorcHNkaXIgPSBAcHNkaXJACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3NyY2RpciA9IEBzcmNkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordG9wX2J1aWxkX3ByZWZpeCA9IEB0b3BfYnVpbGRfcHJlZml4QAordG9wX2J1aWxkZGlyID0gQHRvcF9idWlsZGRpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK0FVVE9NQUtFX09QVElPTlMgPSBzdWJkaXItb2JqZWN0cworQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKK0FNX0NQUEZMQUdTID0gLUkkKGJ1aWxkZGlyKS9zcmMgLUkkKHNyY2Rpcikvc3JjCitkaXN0X2RvY19EQVRBID0gXAorICBBVVRIT1JTIFwKKyAgQ09QWUlORyBcCisgIENoYW5nZUxvZyBcCisgIExJQ0VOQ0UgXAorICBORVdTIFwKKyAgUkVBRE1FIFwKKyAgZG9jL3BjcmUyLnR4dCBcCisgIGRvYy9wY3JlMi1jb25maWcudHh0IFwKKyAgZG9jL3BjcmUyZ3JlcC50eHQgXAorICBkb2MvcGNyZTJ0ZXN0LnR4dAorCitkaXN0X2h0bWxfREFUQSA9IFwKKyAgZG9jL2h0bWwvTk9OLUFVVE9UT09MUy1CVUlMRC50eHQgXAorICBkb2MvaHRtbC9SRUFETUUudHh0IFwKKyAgZG9jL2h0bWwvaW5kZXguaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyLWNvbmZpZy5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTIuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2NhbGxvdXRfZW51bWVyYXRlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9jb2RlX2ZyZWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2NvbXBpbGUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfY29uZmlnLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9kZmFfbWF0Y2guaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2dlbmVyYWxfY29udGV4dF9jb3B5Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9nZW5lcmFsX2NvbnRleHRfZnJlZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2dldF9tYXJrLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudC5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlci5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfZ2V0X3N0YXJ0Y2hhci5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfaml0X2NvbXBpbGUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX2ppdF9tYXRjaC5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfaml0X3N0YWNrX2Fzc2lnbi5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfaml0X3N0YWNrX2NyZWF0ZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfaml0X3N0YWNrX2ZyZWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX21ha2V0YWJsZXMuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX21hdGNoLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9tYXRjaF9jb250ZXh0X2NvcHkuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX21hdGNoX2NvbnRleHRfY3JlYXRlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX21hdGNoX2RhdGFfY3JlYXRlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4uaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX21hdGNoX2RhdGFfZnJlZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfcGF0dGVybl9pbmZvLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXJpYWxpemVfZGVjb2RlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXJpYWxpemVfZW5jb2RlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXJpYWxpemVfZnJlZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXMuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3NldF9ic3IuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3NldF9jYWxsb3V0Lmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcy5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXRfbWF0Y2hfbGltaXQuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3NldF9vZmZzZXRfbGltaXQuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3NldF9uZXdsaW5lLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3NldF9yZWN1cnNpb25fbGltaXQuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3NldF9yZWN1cnNpb25fbWVtb3J5X21hbmFnZW1lbnQuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3N1YnN0aXR1dGUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19mcmVlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlci5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19saXN0X2dldC5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJhcGkuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyYnVpbGQuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyY2FsbG91dC5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJjb21wYXQuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyZGVtby5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJncmVwLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMmppdC5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJsaW1pdHMuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUybWF0Y2hpbmcuaHRtbCBcCisgIGRvYy9odG1sL3BjcmUycGFydGlhbC5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJwYXR0ZXJuLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMnBlcmZvcm0uaHRtbCBcCisgIGRvYy9odG1sL3BjcmUycG9zaXguaHRtbCBcCisgIGRvYy9odG1sL3BjcmUyc2FtcGxlLmh0bWwgXAorICBkb2MvaHRtbC9wY3JlMnNlcmlhbGl6ZS5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJzdGFjay5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJzeW50YXguaHRtbCBcCisgIGRvYy9odG1sL3BjcmUydGVzdC5odG1sIFwKKyAgZG9jL2h0bWwvcGNyZTJ1bmljb2RlLmh0bWwKKworZGlzdF9tYW5fTUFOUyA9IFwKKyAgZG9jL3BjcmUyLWNvbmZpZy4xIFwKKyAgZG9jL3BjcmUyLjMgXAorICBkb2MvcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUuMyBcCisgIGRvYy9wY3JlMl9jb2RlX2ZyZWUuMyBcCisgIGRvYy9wY3JlMl9jb21waWxlLjMgXAorICBkb2MvcGNyZTJfY29tcGlsZV9jb250ZXh0X2NvcHkuMyBcCisgIGRvYy9wY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlLjMgXAorICBkb2MvcGNyZTJfY29tcGlsZV9jb250ZXh0X2ZyZWUuMyBcCisgIGRvYy9wY3JlMl9jb25maWcuMyBcCisgIGRvYy9wY3JlMl9kZmFfbWF0Y2guMyBcCisgIGRvYy9wY3JlMl9nZW5lcmFsX2NvbnRleHRfY29weS4zIFwKKyAgZG9jL3BjcmUyX2dlbmVyYWxfY29udGV4dF9jcmVhdGUuMyBcCisgIGRvYy9wY3JlMl9nZW5lcmFsX2NvbnRleHRfZnJlZS4zIFwKKyAgZG9jL3BjcmUyX2dldF9lcnJvcl9tZXNzYWdlLjMgXAorICBkb2MvcGNyZTJfZ2V0X21hcmsuMyBcCisgIGRvYy9wY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudC4zIFwKKyAgZG9jL3BjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIuMyBcCisgIGRvYy9wY3JlMl9nZXRfc3RhcnRjaGFyLjMgXAorICBkb2MvcGNyZTJfaml0X2NvbXBpbGUuMyBcCisgIGRvYy9wY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5LjMgXAorICBkb2MvcGNyZTJfaml0X21hdGNoLjMgXAorICBkb2MvcGNyZTJfaml0X3N0YWNrX2Fzc2lnbi4zIFwKKyAgZG9jL3BjcmUyX2ppdF9zdGFja19jcmVhdGUuMyBcCisgIGRvYy9wY3JlMl9qaXRfc3RhY2tfZnJlZS4zIFwKKyAgZG9jL3BjcmUyX21ha2V0YWJsZXMuMyBcCisgIGRvYy9wY3JlMl9tYXRjaC4zIFwKKyAgZG9jL3BjcmUyX21hdGNoX2NvbnRleHRfY29weS4zIFwKKyAgZG9jL3BjcmUyX21hdGNoX2NvbnRleHRfY3JlYXRlLjMgXAorICBkb2MvcGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlLjMgXAorICBkb2MvcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUuMyBcCisgIGRvYy9wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4uMyBcCisgIGRvYy9wY3JlMl9tYXRjaF9kYXRhX2ZyZWUuMyBcCisgIGRvYy9wY3JlMl9wYXR0ZXJuX2luZm8uMyBcCisgIGRvYy9wY3JlMl9zZXJpYWxpemVfZGVjb2RlLjMgXAorICBkb2MvcGNyZTJfc2VyaWFsaXplX2VuY29kZS4zIFwKKyAgZG9jL3BjcmUyX3NlcmlhbGl6ZV9mcmVlLjMgXAorICBkb2MvcGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXMuMyBcCisgIGRvYy9wY3JlMl9zZXRfYnNyLjMgXAorICBkb2MvcGNyZTJfc2V0X2NhbGxvdXQuMyBcCisgIGRvYy9wY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcy4zIFwKKyAgZG9jL3BjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZC4zIFwKKyAgZG9jL3BjcmUyX3NldF9tYXRjaF9saW1pdC4zIFwKKyAgZG9jL3BjcmUyX3NldF9vZmZzZXRfbGltaXQuMyBcCisgIGRvYy9wY3JlMl9zZXRfbmV3bGluZS4zIFwKKyAgZG9jL3BjcmUyX3NldF9wYXJlbnNfbmVzdF9saW1pdC4zIFwKKyAgZG9jL3BjcmUyX3NldF9yZWN1cnNpb25fbGltaXQuMyBcCisgIGRvYy9wY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50LjMgXAorICBkb2MvcGNyZTJfc3Vic3RpdHV0ZS4zIFwKKyAgZG9jL3BjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZS4zIFwKKyAgZG9jL3BjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyLjMgXAorICBkb2MvcGNyZTJfc3Vic3RyaW5nX2ZyZWUuMyBcCisgIGRvYy9wY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZS4zIFwKKyAgZG9jL3BjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIuMyBcCisgIGRvYy9wY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZS4zIFwKKyAgZG9jL3BjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIuMyBcCisgIGRvYy9wY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlLjMgXAorICBkb2MvcGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0LjMgXAorICBkb2MvcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuLjMgXAorICBkb2MvcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUuMyBcCisgIGRvYy9wY3JlMmFwaS4zIFwKKyAgZG9jL3BjcmUyYnVpbGQuMyBcCisgIGRvYy9wY3JlMmNhbGxvdXQuMyBcCisgIGRvYy9wY3JlMmNvbXBhdC4zIFwKKyAgZG9jL3BjcmUyZGVtby4zIFwKKyAgZG9jL3BjcmUyZ3JlcC4xIFwKKyAgZG9jL3BjcmUyaml0LjMgXAorICBkb2MvcGNyZTJsaW1pdHMuMyBcCisgIGRvYy9wY3JlMm1hdGNoaW5nLjMgXAorICBkb2MvcGNyZTJwYXJ0aWFsLjMgXAorICBkb2MvcGNyZTJwYXR0ZXJuLjMgXAorICBkb2MvcGNyZTJwZXJmb3JtLjMgXAorICBkb2MvcGNyZTJwb3NpeC4zIFwKKyAgZG9jL3BjcmUyc2FtcGxlLjMgXAorICBkb2MvcGNyZTJzZXJpYWxpemUuMyBcCisgIGRvYy9wY3JlMnN0YWNrLjMgXAorICBkb2MvcGNyZTJzeW50YXguMyBcCisgIGRvYy9wY3JlMnRlc3QuMSBcCisgIGRvYy9wY3JlMnVuaWNvZGUuMworCisKKyMgVGhlIExpYnRvb2wgbGlicmFyaWVzIHRvIGluc3RhbGwuICBXZSdsbCBhZGQgdG8gdGhpcyBsYXRlci4KK2xpYl9MVExJQlJBUklFUyA9ICQoYW1fX2FwcGVuZF8yKSAkKGFtX19hcHBlbmRfMykgJChhbV9fYXBwZW5kXzQpIFwKKwkkKGFtX19hcHBlbmRfMTEpCitjaGVja19TQ1JJUFRTID0gCitkaXN0X25vaW5zdF9TQ1JJUFRTID0gUnVuVGVzdCAkKGFtX19hcHBlbmRfMzApCisKKyMgQWRkaXRpb25hbCBmaWxlcyB0byBkZWxldGUgb24gJ21ha2UgY2xlYW4nLCAnbWFrZSBkaXN0Y2xlYW4nLAorIyBhbmQgJ21ha2UgbWFpbnRhaW5lci1jbGVhbicuCisKKyMgUnVuVGVzdCBhbmQgUnVuR3JlcFRlc3Qgc2hvdWxkIGNsZWFuIHVwIGFmdGVyIHRoZW1zZWx2ZXMsIGJ1dCBqdXN0IGluIGNhc2UKKyMgdGhleSBkb24ndCwgYWRkIHRoZWlyIHdvcmtpbmcgZmlsZXMgdG8gQ0xFQU5GSUxFUy4KK0NMRUFORklMRVMgPSBzcmMvcGNyZTJfY2hhcnRhYmxlcy5jIHRlc3RTaW5wdXQgdGVzdDNpbnB1dCB0ZXN0M291dHB1dCBcCisJdGVzdDNvdXRwdXRBIHRlc3Qzb3V0cHV0QiB0ZXN0dHJ5IHRlc3RzdGRvdXQgdGVzdHN0ZGVyciBcCisJdGVzdHN0ZGVycmdyZXAgdGVzdHRlbXAxZ3JlcCB0ZXN0dGVtcDJncmVwIHRlc3R0cnlncmVwIFwKKwl0ZXN0TmlucHV0Z3JlcAorRElTVENMRUFORklMRVMgPSBzcmMvY29uZmlnLmguaW5+IGNvbmZpZy5oICQoYW1fX2FwcGVuZF8zNCkKK01BSU5UQUlORVJDTEVBTkZJTEVTID0gc3JjL3BjcmUyLmguZ2VuZXJpYyBzcmMvY29uZmlnLmguZ2VuZXJpYworCisjIEFkZGl0aW9uYWwgZmlsZXMgdG8gYnVuZGxlIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgb3ZlciBhbmQgYWJvdmUgd2hhdAorIyB0aGUgQXV0b3Rvb2xzIGluY2x1ZGUgYnkgZGVmYXVsdC4KKworIyBUaGVzZSBmaWxlcyBjb250YWluIGFkZGl0aW9uYWwgbTQgbWFjcm9zIHRoYXQgYXJlIHVzZWQgYnkgYXV0b2NvbmYuCisKKyMgVGhlc2UgZmlsZXMgY29udGFpbiBtYWludGVuYW5jZSBpbmZvcm1hdGlvbgorCisjIFRoZXNlIGZpbGVzIGFyZSB1c2VkIGluIHRoZSBwcmVwYXJhdGlvbiBvZiBhIHJlbGVhc2UKKworIyBUaGVzZSBmaWxlcyBhcmUgdXNhYmxlIHZlcnNpb25zIG9mIHBjcmUyLmggYW5kIGNvbmZpZy5oIHRoYXQgYXJlIGRpc3RyaWJ1dGVkCisjIGZvciB0aGUgYmVuZWZpdCBvZiBwZW9wbGUgd2hvIGFyZSBidWlsZGluZyBQQ1JFMiBtYW51YWxseSwgd2l0aG91dCB0aGUKKyMgQXV0b3Rvb2xzIHN1cHBvcnQuCisKKyMgVGhlIHBjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0IGZpbGUgaXMgdGhlIGRlZmF1bHQgdmVyc2lvbiBvZgorIyBwY3JlMl9jaGFydGFibGVzLmMsIHVzZWQgdW5sZXNzIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcyBpcyBzcGVjaWZpZWQuCisKKyMgVGhlIEpJVCBjb21waWxlciBsaXZlcyBpbiBhIHNlcGFyYXRlIGRpcmVjdG9yeSwgYnV0IGl0cyBmaWxlcyBhcmUgI2luY2x1ZGVkCisjIHdoZW4gcGNyZTJfaml0X2NvbXBpbGUuYyBpcyBwcm9jZXNzZWQsIHNvIHRoZXkgbXVzdCBiZSBkaXN0cmlidXRlZC4KKworIyBTb21lIG9mIHRoZSBKSVQgc291cmNlcyBhcmUgYWxzbyBpbiBzZXBhcmF0ZSBmaWxlcyB0aGF0IGFyZSAjaW5jbHVkZWQuCisKKyMgUENSRTIgZGVtb25zdHJhdGlvbiBwcm9ncmFtLiBOb3QgYnVpbHQgYXV0b21hdGNhbGx5LiBUaGUgcG9pbnQgaXMgdGhhdCB0aGUKKyMgdXNlcnMgc2hvdWxkIGJ1aWxkIGl0IHRoZW1zZWx2ZXMuIFNvIGp1c3QgZGlzdHJpYnV0ZSB0aGUgc291cmNlLgorRVhUUkFfRElTVCA9IG00L2F4X3B0aHJlYWQubTQgbTQvcGNyZTJfdmlzaWJpbGl0eS5tNCBcCisJTk9OLUFVVE9UT09MUy1CVUlMRCBIQUNLSU5HIFByZXBhcmVSZWxlYXNlIENoZWNrTWFuIENsZWFuVHh0IFwKKwlEZXRyYWlsIDEzMmh0bWwgZG9jL2luZGV4Lmh0bWwuc3JjIHNyYy9wY3JlMi5oLmdlbmVyaWMgXAorCXNyYy9jb25maWcuaC5nZW5lcmljIHNyYy9wY3JlMl9jaGFydGFibGVzLmMuZGlzdCBcCisJc3JjL3Nsaml0L3Nsaml0Q29uZmlnLmggc3JjL3Nsaml0L3Nsaml0Q29uZmlnSW50ZXJuYWwuaCBcCisJc3JjL3Nsaml0L3Nsaml0RXhlY0FsbG9jYXRvci5jIHNyYy9zbGppdC9zbGppdExpci5jIFwKKwlzcmMvc2xqaXQvc2xqaXRMaXIuaCBzcmMvc2xqaXQvc2xqaXROYXRpdmVBUk1fMzIuYyBcCisJc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNXzY0LmMgc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNX1QyXzMyLmMgXAorCXNyYy9zbGppdC9zbGppdE5hdGl2ZU1JUFNfMzIuYyBzcmMvc2xqaXQvc2xqaXROYXRpdmVNSVBTXzY0LmMgXAorCXNyYy9zbGppdC9zbGppdE5hdGl2ZU1JUFNfY29tbW9uLmMgXAorCXNyYy9zbGppdC9zbGppdE5hdGl2ZVBQQ18zMi5jIHNyYy9zbGppdC9zbGppdE5hdGl2ZVBQQ182NC5jIFwKKwlzcmMvc2xqaXQvc2xqaXROYXRpdmVQUENfY29tbW9uLmMgXAorCXNyYy9zbGppdC9zbGppdE5hdGl2ZVNQQVJDXzMyLmMgXAorCXNyYy9zbGppdC9zbGppdE5hdGl2ZVNQQVJDX2NvbW1vbi5jIFwKKwlzcmMvc2xqaXQvc2xqaXROYXRpdmVUSUxFR1gtZW5jb2Rlci5jIFwKKwlzcmMvc2xqaXQvc2xqaXROYXRpdmVUSUxFR1hfNjQuYyBzcmMvc2xqaXQvc2xqaXROYXRpdmVYODZfMzIuYyBcCisJc3JjL3Nsaml0L3Nsaml0TmF0aXZlWDg2XzY0LmMgXAorCXNyYy9zbGppdC9zbGppdE5hdGl2ZVg4Nl9jb21tb24uYyBzcmMvc2xqaXQvc2xqaXRVdGlscy5jIFwKKwlzcmMvcGNyZTJfaml0X21hdGNoLmMgc3JjL3BjcmUyX2ppdF9taXNjLmMgXAorCXNyYy9wY3JlMl9wcmludGludC5jIFJ1blRlc3QuYmF0IHRlc3RkYXRhL2dyZXBiaW5hcnkgXAorCXRlc3RkYXRhL2dyZXBmaWxlbGlzdCB0ZXN0ZGF0YS9ncmVwaW5wdXQgdGVzdGRhdGEvZ3JlcGlucHV0MyBcCisJdGVzdGRhdGEvZ3JlcGlucHV0OCB0ZXN0ZGF0YS9ncmVwaW5wdXR2IHRlc3RkYXRhL2dyZXBpbnB1dHggXAorCXRlc3RkYXRhL2dyZXBsaXN0IHRlc3RkYXRhL2dyZXBvdXRwdXQgdGVzdGRhdGEvZ3JlcG91dHB1dDggXAorCXRlc3RkYXRhL2dyZXBvdXRwdXROIHRlc3RkYXRhL2dyZXBwYXRONCB0ZXN0ZGF0YS90ZXN0aW5wdXQxIFwKKwl0ZXN0ZGF0YS90ZXN0aW5wdXQyIHRlc3RkYXRhL3Rlc3RpbnB1dDMgdGVzdGRhdGEvdGVzdGlucHV0NCBcCisJdGVzdGRhdGEvdGVzdGlucHV0NSB0ZXN0ZGF0YS90ZXN0aW5wdXQ2IHRlc3RkYXRhL3Rlc3RpbnB1dDcgXAorCXRlc3RkYXRhL3Rlc3RpbnB1dDggdGVzdGRhdGEvdGVzdGlucHV0OSB0ZXN0ZGF0YS90ZXN0aW5wdXQxMCBcCisJdGVzdGRhdGEvdGVzdGlucHV0MTEgdGVzdGRhdGEvdGVzdGlucHV0MTIgdGVzdGRhdGEvdGVzdGlucHV0MTMgXAorCXRlc3RkYXRhL3Rlc3RpbnB1dDE0IHRlc3RkYXRhL3Rlc3RpbnB1dDE1IHRlc3RkYXRhL3Rlc3RpbnB1dDE2IFwKKwl0ZXN0ZGF0YS90ZXN0aW5wdXQxNyB0ZXN0ZGF0YS90ZXN0aW5wdXQxOCB0ZXN0ZGF0YS90ZXN0aW5wdXQxOSBcCisJdGVzdGRhdGEvdGVzdGlucHV0MjAgdGVzdGRhdGEvdGVzdGlucHV0MjEgdGVzdGRhdGEvdGVzdGlucHV0MjIgXAorCXRlc3RkYXRhL3Rlc3RpbnB1dDIzIHRlc3RkYXRhL3Rlc3RpbnB1dEVCQyBcCisJdGVzdGRhdGEvdGVzdG91dHB1dDEgdGVzdGRhdGEvdGVzdG91dHB1dDIgdGVzdGRhdGEvdGVzdG91dHB1dDMgXAorCXRlc3RkYXRhL3Rlc3RvdXRwdXQzQSB0ZXN0ZGF0YS90ZXN0b3V0cHV0M0IgXAorCXRlc3RkYXRhL3Rlc3RvdXRwdXQ0IHRlc3RkYXRhL3Rlc3RvdXRwdXQ1IHRlc3RkYXRhL3Rlc3RvdXRwdXQ2IFwKKwl0ZXN0ZGF0YS90ZXN0b3V0cHV0NyB0ZXN0ZGF0YS90ZXN0b3V0cHV0OC0xNi0yIFwKKwl0ZXN0ZGF0YS90ZXN0b3V0cHV0OC0xNi0zIHRlc3RkYXRhL3Rlc3RvdXRwdXQ4LTE2LTMgXAorCXRlc3RkYXRhL3Rlc3RvdXRwdXQ4LTMyLTIgdGVzdGRhdGEvdGVzdG91dHB1dDgtMzItMyBcCisJdGVzdGRhdGEvdGVzdG91dHB1dDgtMzItNCB0ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTIgXAorCXRlc3RkYXRhL3Rlc3RvdXRwdXQ4LTgtMyB0ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTQgXAorCXRlc3RkYXRhL3Rlc3RvdXRwdXQ5IHRlc3RkYXRhL3Rlc3RvdXRwdXQxMCBcCisJdGVzdGRhdGEvdGVzdG91dHB1dDExLTE2IHRlc3RkYXRhL3Rlc3RvdXRwdXQxMS0zMiBcCisJdGVzdGRhdGEvdGVzdG91dHB1dDEyLTE2IHRlc3RkYXRhL3Rlc3RvdXRwdXQxMi0zMiBcCisJdGVzdGRhdGEvdGVzdG91dHB1dDEzIHRlc3RkYXRhL3Rlc3RvdXRwdXQxNC0xNiBcCisJdGVzdGRhdGEvdGVzdG91dHB1dDE0LTMyIHRlc3RkYXRhL3Rlc3RvdXRwdXQxNC04IFwKKwl0ZXN0ZGF0YS90ZXN0b3V0cHV0MTUgdGVzdGRhdGEvdGVzdG91dHB1dDE2IFwKKwl0ZXN0ZGF0YS90ZXN0b3V0cHV0MTcgdGVzdGRhdGEvdGVzdG91dHB1dDE4IFwKKwl0ZXN0ZGF0YS90ZXN0b3V0cHV0MTkgdGVzdGRhdGEvdGVzdG91dHB1dDIwIFwKKwl0ZXN0ZGF0YS90ZXN0b3V0cHV0MjEgdGVzdGRhdGEvdGVzdG91dHB1dDIyLTE2IFwKKwl0ZXN0ZGF0YS90ZXN0b3V0cHV0MjItMzIgdGVzdGRhdGEvdGVzdG91dHB1dDIyLTggXAorCXRlc3RkYXRhL3Rlc3RvdXRwdXQyMyB0ZXN0ZGF0YS90ZXN0b3V0cHV0RUJDIFwKKwl0ZXN0ZGF0YS92YWxncmluZC1qaXQuc3VwcCB0ZXN0ZGF0YS93aW50ZXN0aW5wdXQzIFwKKwl0ZXN0ZGF0YS93aW50ZXN0b3V0cHV0MyBwZXJsdGVzdC5zaCBzcmMvcGNyZTJkZW1vLmMgXAorCWNtYWtlL0NPUFlJTkctQ01BS0UtU0NSSVBUUyBcCisJY21ha2UvRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MuY21ha2UgXAorCWNtYWtlL0ZpbmRSZWFkbGluZS5jbWFrZSBjbWFrZS9GaW5kRWRpdGxpbmUuY21ha2UgXAorCUNNYWtlTGlzdHMudHh0IGNvbmZpZy1jbWFrZS5oLmluCisKKyMgVGhlc2UgYXJlIHRoZSBoZWFkZXIgZmlsZXMgd2UnbGwgaW5zdGFsbC4gV2UgZG8gbm90IGRpc3RyaWJ1dGUgcGNyZTIuaAorIyBiZWNhdXNlIGl0IGlzIGdlbmVyYXRlZCBmcm9tIHBjcmUyLmguaW4uCitub2Rpc3RfaW5jbHVkZV9IRUFERVJTID0gc3JjL3BjcmUyLmgKK2luY2x1ZGVfSEVBREVSUyA9IHNyYy9wY3JlMnBvc2l4LmgKKworIyBUaGlzIGlzIHRoZSAiY29uZmlnIiBzY3JpcHQuCitiaW5fU0NSSVBUUyA9IHBjcmUyLWNvbmZpZworQFdJVEhfUkVCVUlMRF9DSEFSVEFCTEVTX1RSVUVAZGZ0YWJsZXNfU09VUkNFUyA9IHNyYy9kZnRhYmxlcy5jCitCVUlMVF9TT1VSQ0VTID0gc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYworTk9ESVNUX1NPVVJDRVMgPSBzcmMvcGNyZTJfY2hhcnRhYmxlcy5jCitDT01NT05fU09VUkNFUyA9IFwKKyAgc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jIFwKKyAgc3JjL3BjcmUyX2NvbXBpbGUuYyBcCisgIHNyYy9wY3JlMl9jb25maWcuYyBcCisgIHNyYy9wY3JlMl9jb250ZXh0LmMgXAorICBzcmMvcGNyZTJfZGZhX21hdGNoLmMgXAorICBzcmMvcGNyZTJfZXJyb3IuYyBcCisgIHNyYy9wY3JlMl9maW5kX2JyYWNrZXQuYyBcCisgIHNyYy9wY3JlMl9pbnRlcm5hbC5oIFwKKyAgc3JjL3BjcmUyX2ludG1vZGVkZXAuaCBcCisgIHNyYy9wY3JlMl9qaXRfY29tcGlsZS5jIFwKKyAgc3JjL3BjcmUyX21ha2V0YWJsZXMuYyBcCisgIHNyYy9wY3JlMl9tYXRjaC5jIFwKKyAgc3JjL3BjcmUyX21hdGNoX2RhdGEuYyBcCisgIHNyYy9wY3JlMl9uZXdsaW5lLmMgXAorICBzcmMvcGNyZTJfb3JkMnV0Zi5jIFwKKyAgc3JjL3BjcmUyX3BhdHRlcm5faW5mby5jIFwKKyAgc3JjL3BjcmUyX3NlcmlhbGl6ZS5jIFwKKyAgc3JjL3BjcmUyX3N0cmluZ191dGlscy5jIFwKKyAgc3JjL3BjcmUyX3N0dWR5LmMgXAorICBzcmMvcGNyZTJfc3Vic3RpdHV0ZS5jIFwKKyAgc3JjL3BjcmUyX3N1YnN0cmluZy5jIFwKKyAgc3JjL3BjcmUyX3RhYmxlcy5jIFwKKyAgc3JjL3BjcmUyX3VjZC5jIFwKKyAgc3JjL3BjcmUyX3VjcC5oIFwKKyAgc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jIFwKKyAgc3JjL3BjcmUyX3hjbGFzcy5jCisKK0BXSVRIX1BDUkUyXzhfVFJVRUBsaWJwY3JlMl84X2xhX1NPVVJDRVMgPSBcCitAV0lUSF9QQ1JFMl84X1RSVUVAICAkKENPTU1PTl9TT1VSQ0VTKQorCitAV0lUSF9QQ1JFMl84X1RSVUVAbm9kaXN0X2xpYnBjcmUyXzhfbGFfU09VUkNFUyA9IFwKK0BXSVRIX1BDUkUyXzhfVFJVRUAgICQoTk9ESVNUX1NPVVJDRVMpCisKK0BXSVRIX1BDUkUyXzhfVFJVRUBsaWJwY3JlMl84X2xhX0NGTEFHUyA9IC1EUENSRTJfQ09ERV9VTklUX1dJRFRIPTggXAorQFdJVEhfUENSRTJfOF9UUlVFQAkkKFZJU0lCSUxJVFlfQ0ZMQUdTKSAkKEFNX0NGTEFHUykgXAorQFdJVEhfUENSRTJfOF9UUlVFQAkkKGFtX19hcHBlbmRfNSkgJChhbV9fYXBwZW5kXzgpCitAV0lUSF9QQ1JFMl84X1RSVUVAbGlicGNyZTJfOF9sYV9MSUJBREQgPSAKK0BXSVRIX1BDUkUyXzE2X1RSVUVAbGlicGNyZTJfMTZfbGFfU09VUkNFUyA9IFwKK0BXSVRIX1BDUkUyXzE2X1RSVUVAICAkKENPTU1PTl9TT1VSQ0VTKQorCitAV0lUSF9QQ1JFMl8xNl9UUlVFQG5vZGlzdF9saWJwY3JlMl8xNl9sYV9TT1VSQ0VTID0gXAorQFdJVEhfUENSRTJfMTZfVFJVRUAgICQoTk9ESVNUX1NPVVJDRVMpCisKK0BXSVRIX1BDUkUyXzE2X1RSVUVAbGlicGNyZTJfMTZfbGFfQ0ZMQUdTID0gIFwKK0BXSVRIX1BDUkUyXzE2X1RSVUVACS1EUENSRTJfQ09ERV9VTklUX1dJRFRIPTE2IFwKK0BXSVRIX1BDUkUyXzE2X1RSVUVACSQoVklTSUJJTElUWV9DRkxBR1MpICQoQU1fQ0ZMQUdTKSBcCitAV0lUSF9QQ1JFMl8xNl9UUlVFQAkkKGFtX19hcHBlbmRfNikgJChhbV9fYXBwZW5kXzkpCitAV0lUSF9QQ1JFMl8xNl9UUlVFQGxpYnBjcmUyXzE2X2xhX0xJQkFERCA9IAorQFdJVEhfUENSRTJfMzJfVFJVRUBsaWJwY3JlMl8zMl9sYV9TT1VSQ0VTID0gXAorQFdJVEhfUENSRTJfMzJfVFJVRUAgICQoQ09NTU9OX1NPVVJDRVMpCisKK0BXSVRIX1BDUkUyXzMyX1RSVUVAbm9kaXN0X2xpYnBjcmUyXzMyX2xhX1NPVVJDRVMgPSBcCitAV0lUSF9QQ1JFMl8zMl9UUlVFQCAgJChOT0RJU1RfU09VUkNFUykKKworQFdJVEhfUENSRTJfMzJfVFJVRUBsaWJwY3JlMl8zMl9sYV9DRkxBR1MgPSAgXAorQFdJVEhfUENSRTJfMzJfVFJVRUAJLURQQ1JFMl9DT0RFX1VOSVRfV0lEVEg9MzIgXAorQFdJVEhfUENSRTJfMzJfVFJVRUAJJChWSVNJQklMSVRZX0NGTEFHUykgJChBTV9DRkxBR1MpIFwKK0BXSVRIX1BDUkUyXzMyX1RSVUVACSQoYW1fX2FwcGVuZF83KSAkKGFtX19hcHBlbmRfMTApCitAV0lUSF9QQ1JFMl8zMl9UUlVFQGxpYnBjcmUyXzMyX2xhX0xJQkFERCA9IAorQFdJVEhfUENSRTJfOF9UUlVFQGxpYnBjcmUyXzhfbGFfTERGTEFHUyA9ICQoRVhUUkFfTElCUENSRTJfOF9MREZMQUdTKQorQFdJVEhfUENSRTJfMTZfVFJVRUBsaWJwY3JlMl8xNl9sYV9MREZMQUdTID0gJChFWFRSQV9MSUJQQ1JFMl8xNl9MREZMQUdTKQorQFdJVEhfUENSRTJfMzJfVFJVRUBsaWJwY3JlMl8zMl9sYV9MREZMQUdTID0gJChFWFRSQV9MSUJQQ1JFMl8zMl9MREZMQUdTKQorQFdJVEhfUENSRTJfOF9UUlVFQGxpYnBjcmUyX3Bvc2l4X2xhX1NPVVJDRVMgPSBzcmMvcGNyZTJwb3NpeC5jCitAV0lUSF9QQ1JFMl84X1RSVUVAbGlicGNyZTJfcG9zaXhfbGFfQ0ZMQUdTID0gIFwKK0BXSVRIX1BDUkUyXzhfVFJVRUAJLURQQ1JFMl9DT0RFX1VOSVRfV0lEVEg9OCBcCitAV0lUSF9QQ1JFMl84X1RSVUVACSQoVklTSUJJTElUWV9DRkxBR1MpICQoQU1fQ0ZMQUdTKSBcCitAV0lUSF9QQ1JFMl84X1RSVUVACSQoYW1fX2FwcGVuZF8xMikKK0BXSVRIX1BDUkUyXzhfVFJVRUBsaWJwY3JlMl9wb3NpeF9sYV9MREZMQUdTID0gJChFWFRSQV9MSUJQQ1JFMl9QT1NJWF9MREZMQUdTKQorQFdJVEhfUENSRTJfOF9UUlVFQGxpYnBjcmUyX3Bvc2l4X2xhX0xJQkFERCA9IGxpYnBjcmUyLTgubGEKK0BXSVRIX1BDUkUyXzhfVFJVRUBwY3JlMmdyZXBfU09VUkNFUyA9IHNyYy9wY3JlMmdyZXAuYworQFdJVEhfUENSRTJfOF9UUlVFQHBjcmUyZ3JlcF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChhbV9fYXBwZW5kXzE0KQorQFdJVEhfUENSRTJfOF9UUlVFQHBjcmUyZ3JlcF9MREFERCA9ICQoTElCWikgJChMSUJCWjIpIGxpYnBjcmUyLTgubGEgXAorQFdJVEhfUENSRTJfOF9UUlVFQAkkKGFtX19hcHBlbmRfMTUpCitAV0lUSF9KSVRfVFJVRUBwY3JlMl9qaXRfdGVzdF9TT1VSQ0VTID0gc3JjL3BjcmUyX2ppdF90ZXN0LmMKK0BXSVRIX0pJVF9UUlVFQHBjcmUyX2ppdF90ZXN0X0NGTEFHUyA9ICQoQU1fQ0ZMQUdTKSAkKGFtX19hcHBlbmRfMjEpCitAV0lUSF9KSVRfVFJVRUBwY3JlMl9qaXRfdGVzdF9MREFERCA9ICQoYW1fX2FwcGVuZF8xOCkgXAorQFdJVEhfSklUX1RSVUVACSQoYW1fX2FwcGVuZF8xOSkgJChhbV9fYXBwZW5kXzIwKSBcCitAV0lUSF9KSVRfVFJVRUAJJChhbV9fYXBwZW5kXzIyKQorcGNyZTJ0ZXN0X1NPVVJDRVMgPSBzcmMvcGNyZTJ0ZXN0LmMKK3BjcmUydGVzdF9DRkxBR1MgPSAkKEFNX0NGTEFHUykgJChhbV9fYXBwZW5kXzI2KSAkKGFtX19hcHBlbmRfMjcpCitwY3JlMnRlc3RfTERBREQgPSAkKExJQlJFQURMSU5FKSAkKGFtX19hcHBlbmRfMjMpICQoYW1fX2FwcGVuZF8yNCkgXAorCSQoYW1fX2FwcGVuZF8yNSkgJChhbV9fYXBwZW5kXzI4KQorCisjIFdlIGhhdmUgLnBjIGZpbGVzIGZvciBwa2ctY29uZmlnIHVzZXJzLgorcGtnY29uZmlnZGlyID0gJChsaWJkaXIpL3BrZ2NvbmZpZworcGtnY29uZmlnX0RBVEEgPSAkKGFtX19hcHBlbmRfMzEpICQoYW1fX2FwcGVuZF8zMikgJChhbV9fYXBwZW5kXzMzKQorCisjIGdjb3YvbGNvdiBjb2RlIGNvdmVyYWdlIHJlcG9ydGluZworIworIyBDb3ZlcmFnZSByZXBvcnRpbmcgdGFyZ2V0czoKKyMKKyMgY292ZXJhZ2U6IENyZWF0ZSBhIGNvdmVyYWdlIHJlcG9ydCBmcm9tICdtYWtlIGNoZWNrJworIyBjb3ZlcmFnZS1iYXNlbGluZTogQ2FwdHVyZSBiYXNlbGluZSBjb3ZlcmFnZSBpbmZvcm1hdGlvbgorIyBjb3ZlcmFnZS1yZXNldDogVGhpcyB6ZXJvcyB0aGUgY292ZXJhZ2UgY291bnRlcnMgb25seQorIyBjb3ZlcmFnZS1yZXBvcnQ6IFRoaXMgY3JlYXRlcyB0aGUgY292ZXJhZ2UgcmVwb3J0IG9ubHkKKyMgY292ZXJhZ2UtY2xlYW4tcmVwb3J0OiBUaGlzIHJlbW92ZXMgdGhlIGdlbmVyYXRlZCBjb3ZlcmFnZSByZXBvcnQKKyMgICB3aXRob3V0IGNsZWFuaW5nIHRoZSBjb3ZlcmFnZSBkYXRhIGl0c2VsZgorIyBjb3ZlcmFnZS1jbGVhbi1kYXRhOiBUaGlzIHJlbW92ZXMgdGhlIGNhcHR1cmVkIGNvdmVyYWdlIGRhdGEgd2l0aG91dAorIyAgIHJlbW92aW5nIHRoZSBjb3ZlcmFnZSBmaWxlcyBjcmVhdGVkIGF0IGNvbXBpbGUgdGltZSAoKi5nY25vKQorIyBjb3ZlcmFnZS1jbGVhbjogVGhpcyBjbGVhbnMgYWxsIGNvdmVyYWdlIGRhdGEgaW5jbHVkaW5nIHRoZSBnZW5lcmF0ZWQKKyMgICBjb3ZlcmFnZSByZXBvcnQuCitAV0lUSF9HQ09WX1RSVUVAQ09WRVJBR0VfVEVTVF9OQU1FID0gJChQQUNLQUdFKQorQFdJVEhfR0NPVl9UUlVFQENPVkVSQUdFX05BTUUgPSAkKFBBQ0tBR0UpLSQoVkVSU0lPTikKK0BXSVRIX0dDT1ZfVFJVRUBDT1ZFUkFHRV9PVVRQVVRfRklMRSA9ICQoQ09WRVJBR0VfTkFNRSktY292ZXJhZ2UuaW5mbworQFdJVEhfR0NPVl9UUlVFQENPVkVSQUdFX09VVFBVVF9ESVIgPSAkKENPVkVSQUdFX05BTUUpLWNvdmVyYWdlCitAV0lUSF9HQ09WX1RSVUVAQ09WRVJBR0VfTENPVl9FWFRSQV9GTEFHUyA9IAorQFdJVEhfR0NPVl9UUlVFQENPVkVSQUdFX0dFTkhUTUxfRVhUUkFfRkxBR1MgPSAKK0BXSVRIX0dDT1ZfVFJVRUBjb3ZlcmFnZV9xdWlldCA9ICQoY292ZXJhZ2VfcXVpZXRfJChWKSkKK0BXSVRIX0dDT1ZfVFJVRUBjb3ZlcmFnZV9xdWlldF8gPSAkKGNvdmVyYWdlX3F1aWV0XyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpKQorQFdJVEhfR0NPVl9UUlVFQGNvdmVyYWdlX3F1aWV0XzAgPSAtLXF1aWV0CithbGw6ICQoQlVJTFRfU09VUkNFUykKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLmxvZyAubyAub2JqIC50ZXN0IC50ZXN0JChFWEVFWFQpIC50cnMKK2FtLS1yZWZyZXNoOiBNYWtlZmlsZQorCUA6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46ICAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGVjaG8gJyBjZCAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUnOyBcCisJICAgICAgJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgTWFrZWZpbGUnOyBcCisJJChhbV9fY2QpICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBlY2hvICcgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzJzsgXAorCSAgICAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXM7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIC0tcmVjaGVjaworCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCSQoYW1fX2NkKSAkKHNyY2RpcikgJiYgJChBVVRPQ09ORikKKyQoQUNMT0NBTF9NNCk6ICAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJJChhbV9fY2QpICQoc3JjZGlyKSAmJiAkKEFDTE9DQUwpICQoQUNMT0NBTF9BTUZMQUdTKQorJChhbV9fYWNsb2NhbF9tNF9kZXBzKToKKworc3JjL2NvbmZpZy5oOiBzcmMvc3RhbXAtaDEKKwlAdGVzdCAtZiAkQCB8fCBybSAtZiBzcmMvc3RhbXAtaDEKKwlAdGVzdCAtZiAkQCB8fCAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBzcmMvc3RhbXAtaDEKKworc3JjL3N0YW1wLWgxOiAkKHRvcF9zcmNkaXIpL3NyYy9jb25maWcuaC5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBybSAtZiBzcmMvc3RhbXAtaDEKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzIHNyYy9jb25maWcuaAorJCh0b3Bfc3JjZGlyKS9zcmMvY29uZmlnLmguaW46ICAkKGFtX19jb25maWd1cmVfZGVwcykgCisJKCQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikpCisJcm0gLWYgc3JjL3N0YW1wLWgxCisJdG91Y2ggJEAKKworZGlzdGNsZWFuLWhkcjoKKwktcm0gLWYgc3JjL2NvbmZpZy5oIHNyYy9zdGFtcC1oMQorbGlicGNyZTItOC5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2xpYnBjcmUyLTgucGMuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRACitsaWJwY3JlMi0xNi5wYzogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJChzcmNkaXIpL2xpYnBjcmUyLTE2LnBjLmluCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkQAorbGlicGNyZTItMzIucGM6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9saWJwY3JlMi0zMi5wYy5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAKK2xpYnBjcmUyLXBvc2l4LnBjOiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cyAkKHNyY2RpcikvbGlicGNyZTItcG9zaXgucGMuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRACitwY3JlMi1jb25maWc6ICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzICQoc3JjZGlyKS9wY3JlMi1jb25maWcuaW4KKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRACitzcmMvcGNyZTIuaDogJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMgJCh0b3Bfc3JjZGlyKS9zcmMvcGNyZTIuaC5pbgorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAKKworaW5zdGFsbC1saWJMVExJQlJBUklFUzogJChsaWJfTFRMSUJSQVJJRVMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQGxpc3Q9JyQobGliX0xUTElCUkFSSUVTKSc7IHRlc3QgLW4gIiQobGliZGlyKSIgfHwgbGlzdD07IFwKKwlsaXN0Mj07IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gXAorCSAgICBsaXN0Mj0iJCRsaXN0MiAkJHAiOyBcCisJICBlbHNlIDo7IGZpOyBcCisJZG9uZTsgXAorCXRlc3QgLXogIiQkbGlzdDIiIHx8IHsgXAorCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQobGliZGlyKSIgfHwgZXhpdCAxOyBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgJyQoREVTVERJUikkKGxpYmRpciknIjsgXAorCSAgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICQkbGlzdDIgIiQoREVTVERJUikkKGxpYmRpcikiOyBcCisJfQorCit1bmluc3RhbGwtbGliTFRMSUJSQVJJRVM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgdGVzdCAtbiAiJChsaWJkaXIpIiB8fCBsaXN0PTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgJChhbV9fc3RyaXBfZGlyKSBcCisJICBlY2hvICIgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT11bmluc3RhbGwgcm0gLWYgJyQoREVTVERJUikkKGxpYmRpcikvJCRmJyI7IFwKKwkgICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkZiI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBcCisJbG9jcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICQkcDsgZG9uZSB8IFwKKwkgICAgICBzZWQgJ3N8XlteL10qJCR8Lnw7IHN8L1teL10qJCR8fDsgc3wkJHwvc29fbG9jYXRpb25zfCcgfCBcCisJICAgICAgc29ydCAtdWA7IFwKKwl0ZXN0IC16ICIkJGxvY3MiIHx8IHsgXAorCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAorCSAgcm0gLWYgJCR7bG9jc307IFwKKwl9CitzcmMvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHNyYworCUA6ID4gc3JjLyQoYW1fX2RpcnN0YW1wKQorc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjLyQoREVQRElSKQorCUA6ID4gc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29tcGlsZS5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9jb25maWcubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29udGV4dC5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9kZmFfbWF0Y2gubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfZXJyb3IubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfZmluZF9icmFja2V0LmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2ppdF9jb21waWxlLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX21ha2V0YWJsZXMubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWF0Y2gubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWF0Y2hfZGF0YS5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9uZXdsaW5lLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX29yZDJ1dGYubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfcGF0dGVybl9pbmZvLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3NlcmlhbGl6ZS5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdHJpbmdfdXRpbHMubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3R1ZHkubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3Vic3RpdHV0ZS5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdWJzdHJpbmcubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfdGFibGVzLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3VjZC5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl92YWxpZF91dGYubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfeGNsYXNzLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NoYXJ0YWJsZXMubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCisKK2xpYnBjcmUyLTE2LmxhOiAkKGxpYnBjcmUyXzE2X2xhX09CSkVDVFMpICQobGlicGNyZTJfMTZfbGFfREVQRU5ERU5DSUVTKSAkKEVYVFJBX2xpYnBjcmUyXzE2X2xhX0RFUEVOREVOQ0lFUykgCisJJChBTV9WX0NDTEQpJChsaWJwY3JlMl8xNl9sYV9MSU5LKSAkKGFtX2xpYnBjcmUyXzE2X2xhX3JwYXRoKSAkKGxpYnBjcmUyXzE2X2xhX09CSkVDVFMpICQobGlicGNyZTJfMTZfbGFfTElCQUREKSAkKExJQlMpCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfYXV0b19wb3NzZXNzLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2NvbXBpbGUubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29uZmlnLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2NvbnRleHQubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfZGZhX21hdGNoLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2Vycm9yLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9qaXRfY29tcGlsZS5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYWtldGFibGVzLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX21hdGNoLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX21hdGNoX2RhdGEubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfbmV3bGluZS5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9vcmQydXRmLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3BhdHRlcm5faW5mby5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zZXJpYWxpemUubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfc3RyaW5nX3V0aWxzLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N0dWR5LmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N1YnN0aXR1dGUubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfc3Vic3RyaW5nLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3RhYmxlcy5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl91Y2QubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfdmFsaWRfdXRmLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3hjbGFzcy5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9jaGFydGFibGVzLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorCitsaWJwY3JlMi0zMi5sYTogJChsaWJwY3JlMl8zMl9sYV9PQkpFQ1RTKSAkKGxpYnBjcmUyXzMyX2xhX0RFUEVOREVOQ0lFUykgJChFWFRSQV9saWJwY3JlMl8zMl9sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DQ0xEKSQobGlicGNyZTJfMzJfbGFfTElOSykgJChhbV9saWJwY3JlMl8zMl9sYV9ycGF0aCkgJChsaWJwY3JlMl8zMl9sYV9PQkpFQ1RTKSAkKGxpYnBjcmUyXzMyX2xhX0xJQkFERCkgJChMSUJTKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfYXV0b19wb3NzZXNzLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfY29tcGlsZS5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX2NvbmZpZy5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX2NvbnRleHQubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9kZmFfbWF0Y2gubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9lcnJvci5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX2ppdF9jb21waWxlLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWFrZXRhYmxlcy5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX21hdGNoLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWF0Y2hfZGF0YS5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX25ld2xpbmUubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9vcmQydXRmLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfcGF0dGVybl9pbmZvLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc2VyaWFsaXplLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3RyaW5nX3V0aWxzLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3R1ZHkubG86IHNyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zdWJzdGl0dXRlLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3Vic3RyaW5nLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfdGFibGVzLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfdWNkLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfdmFsaWRfdXRmLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfeGNsYXNzLmxvOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfY2hhcnRhYmxlcy5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKworbGlicGNyZTItOC5sYTogJChsaWJwY3JlMl84X2xhX09CSkVDVFMpICQobGlicGNyZTJfOF9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGlicGNyZTJfOF9sYV9ERVBFTkRFTkNJRVMpIAorCSQoQU1fVl9DQ0xEKSQobGlicGNyZTJfOF9sYV9MSU5LKSAkKGFtX2xpYnBjcmUyXzhfbGFfcnBhdGgpICQobGlicGNyZTJfOF9sYV9PQkpFQ1RTKSAkKGxpYnBjcmUyXzhfbGFfTElCQUREKSAkKExJQlMpCitzcmMvbGlicGNyZTJfcG9zaXhfbGEtcGNyZTJwb3NpeC5sbzogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKworbGlicGNyZTItcG9zaXgubGE6ICQobGlicGNyZTJfcG9zaXhfbGFfT0JKRUNUUykgJChsaWJwY3JlMl9wb3NpeF9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGlicGNyZTJfcG9zaXhfbGFfREVQRU5ERU5DSUVTKSAKKwkkKEFNX1ZfQ0NMRCkkKGxpYnBjcmUyX3Bvc2l4X2xhX0xJTkspICQoYW1fbGlicGNyZTJfcG9zaXhfbGFfcnBhdGgpICQobGlicGNyZTJfcG9zaXhfbGFfT0JKRUNUUykgJChsaWJwY3JlMl9wb3NpeF9sYV9MSUJBREQpICQoTElCUykKK2luc3RhbGwtYmluUFJPR1JBTVM6ICQoYmluX1BST0dSQU1TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkKGJpbmRpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoYmluZGlyKSciOyBcCisJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChiaW5kaXIpIiB8fCBleGl0IDE7IFwKKwlmaTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwICQkcCI7IGRvbmUgfCBcCisJc2VkICdzLyQoRVhFRVhUKSQkLy8nIHwgXAorCXdoaWxlIHJlYWQgcCBwMTsgZG8gaWYgdGVzdCAtZiAkJHAgXAorCSB8fCB0ZXN0IC1mICQkcDEgXAorCSAgOyB0aGVuIGVjaG8gIiQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO247aCcgXAorCSAgICAtZSAnc3wuKnwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7cy8kKEVYRUVYVCkkJC8vOyQodHJhbnNmb3JtKTtzLyQkLyQoRVhFRVhUKS8nIHwgXAorCXNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDEgfSBcCisJICB7IGQ9JCQzOyBpZiAoZGlyc1tkXSAhPSAxKSB7IHByaW50ICJkIiwgZDsgZGlyc1tkXSA9IDEgfSBcCisJICAgIGlmICgkJDIgPT0gJCQ0KSBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgZWxzZSB7IHByaW50ICJmIiwgJCQzICIvIiAkJDQsICQkMTsgfSB9IFwKKwkgIEVORCB7IGZvciAoZCBpbiBmaWxlcykgcHJpbnQgImYiLCBkLCBmaWxlc1tkXSB9JyB8IFwKKwl3aGlsZSByZWFkIHR5cGUgZGlyIGZpbGVzOyBkbyBcCisJICAgIGlmIHRlc3QgIiQkZGlyIiA9IC47IHRoZW4gZGlyPTsgZWxzZSBkaXI9LyQkZGlyOyBmaTsgXAorCSAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9QUk9HUkFNX0VOVikgJChMSUJUT09MKSAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1pbnN0YWxsICQoSU5TVEFMTF9QUk9HUkFNKSAkJGZpbGVzICckKERFU1RESVIpJChiaW5kaXIpJCRkaXInIjsgXAorCSAgICAkKElOU1RBTExfUFJPR1JBTV9FTlYpICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9aW5zdGFsbCAkKElOU1RBTExfUFJPR1JBTSkgJCRmaWxlcyAiJChERVNURElSKSQoYmluZGlyKSQkZGlyIiB8fCBleGl0ICQkPzsgXAorCSAgICB9IFwKKwk7IGRvbmUKKwordW5pbnN0YWxsLWJpblBST0dSQU1TOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoYmluX1BST0dSQU1TKSc7IHRlc3QgLW4gIiQoYmluZGlyKSIgfHwgbGlzdD07IFwKKwlmaWxlcz1gZm9yIHAgaW4gJCRsaXN0OyBkbyBlY2hvICIkJHAiOyBkb25lIHwgXAorCSAgc2VkIC1lICdoO3MsXi4qLywsO3MvJChFWEVFWFQpJCQvLzskKHRyYW5zZm9ybSknIFwKKwkgICAgICAtZSAncy8kJC8kKEVYRUVYVCkvJyBcCisJYDsgXAorCXRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiICggY2QgJyQoREVTVERJUikkKGJpbmRpciknICYmIHJtIC1mIiAkJGZpbGVzICIpIjsgXAorCWNkICIkKERFU1RESVIpJChiaW5kaXIpIiAmJiBybSAtZiAkJGZpbGVzCisKK2NsZWFuLWJpblBST0dSQU1TOgorCUBsaXN0PSckKGJpbl9QUk9HUkFNUyknOyB0ZXN0IC1uICIkJGxpc3QiIHx8IGV4aXQgMDsgXAorCWVjaG8gIiBybSAtZiIgJCRsaXN0OyBcCisJcm0gLWYgJCRsaXN0IHx8IGV4aXQgJCQ/OyBcCisJdGVzdCAtbiAiJChFWEVFWFQpIiB8fCBleGl0IDA7IFwKKwlsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkcCI7IGRvbmUgfCBzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QKKworY2xlYW4tbm9pbnN0UFJPR1JBTVM6CisJQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IHRlc3QgLW4gIiQkbGlzdCIgfHwgZXhpdCAwOyBcCisJZWNobyAiIHJtIC1mIiAkJGxpc3Q7IFwKKwlybSAtZiAkJGxpc3QgfHwgZXhpdCAkJD87IFwKKwl0ZXN0IC1uICIkKEVYRUVYVCkiIHx8IGV4aXQgMDsgXAorCWxpc3Q9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwllY2hvICIgcm0gLWYiICQkbGlzdDsgXAorCXJtIC1mICQkbGlzdAorc3JjL2RmdGFibGVzLiQoT0JKRVhUKTogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKworZGZ0YWJsZXMkKEVYRUVYVCk6ICQoZGZ0YWJsZXNfT0JKRUNUUykgJChkZnRhYmxlc19ERVBFTkRFTkNJRVMpICQoRVhUUkFfZGZ0YWJsZXNfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZGZ0YWJsZXMkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKExJTkspICQoZGZ0YWJsZXNfT0JKRUNUUykgJChkZnRhYmxlc19MREFERCkgJChMSUJTKQorc3JjL3BjcmUyX2ppdF90ZXN0LXBjcmUyX2ppdF90ZXN0LiQoT0JKRVhUKTogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKworcGNyZTJfaml0X3Rlc3QkKEVYRUVYVCk6ICQocGNyZTJfaml0X3Rlc3RfT0JKRUNUUykgJChwY3JlMl9qaXRfdGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfcGNyZTJfaml0X3Rlc3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcGNyZTJfaml0X3Rlc3QkKEVYRUVYVCkKKwkkKEFNX1ZfQ0NMRCkkKHBjcmUyX2ppdF90ZXN0X0xJTkspICQocGNyZTJfaml0X3Rlc3RfT0JKRUNUUykgJChwY3JlMl9qaXRfdGVzdF9MREFERCkgJChMSUJTKQorc3JjL3BjcmUyZ3JlcC1wY3JlMmdyZXAuJChPQkpFWFQpOiBzcmMvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorCitwY3JlMmdyZXAkKEVYRUVYVCk6ICQocGNyZTJncmVwX09CSkVDVFMpICQocGNyZTJncmVwX0RFUEVOREVOQ0lFUykgJChFWFRSQV9wY3JlMmdyZXBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcGNyZTJncmVwJChFWEVFWFQpCisJJChBTV9WX0NDTEQpJChwY3JlMmdyZXBfTElOSykgJChwY3JlMmdyZXBfT0JKRUNUUykgJChwY3JlMmdyZXBfTERBREQpICQoTElCUykKK3NyYy9wY3JlMnRlc3QtcGNyZTJ0ZXN0LiQoT0JKRVhUKTogc3JjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKworcGNyZTJ0ZXN0JChFWEVFWFQpOiAkKHBjcmUydGVzdF9PQkpFQ1RTKSAkKHBjcmUydGVzdF9ERVBFTkRFTkNJRVMpICQoRVhUUkFfcGNyZTJ0ZXN0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHBjcmUydGVzdCQoRVhFRVhUKQorCSQoQU1fVl9DQ0xEKSQocGNyZTJ0ZXN0X0xJTkspICQocGNyZTJ0ZXN0X09CSkVDVFMpICQocGNyZTJ0ZXN0X0xEQUREKSAkKExJQlMpCitpbnN0YWxsLWJpblNDUklQVFM6ICQoYmluX1NDUklQVFMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQGxpc3Q9JyQoYmluX1NDUklQVFMpJzsgdGVzdCAtbiAiJChiaW5kaXIpIiB8fCBsaXN0PTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGJpbmRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoYmluZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBpZiB0ZXN0IC1mICIkJGQkJHAiOyB0aGVuIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IGVsc2UgOjsgZmk7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAncDtzLC4qLywsO24nIFwKKwkgICAgLWUgJ2g7c3wuKnwufCcgXAorCSAgICAtZSAncDt4O3MsLiovLCw7JCh0cmFuc2Zvcm0pJyB8IHNlZCAnTjtOO047cyxcbiwgLGcnIHwgXAorCSQoQVdLKSAnQkVHSU4geyBmaWxlc1siLiJdID0gIiI7IGRpcnNbIi4iXSA9IDE7IH0gXAorCSAgeyBkPSQkMzsgaWYgKGRpcnNbZF0gIT0gMSkgeyBwcmludCAiZCIsIGQ7IGRpcnNbZF0gPSAxIH0gXAorCSAgICBpZiAoJCQyID09ICQkNCkgeyBmaWxlc1tkXSA9IGZpbGVzW2RdICIgIiAkJDE7IFwKKwkgICAgICBpZiAoKytuW2RdID09ICQoYW1fX2luc3RhbGxfbWF4KSkgeyBcCisJCXByaW50ICJmIiwgZCwgZmlsZXNbZF07IG5bZF0gPSAwOyBmaWxlc1tkXSA9ICIiIH0gfSBcCisJICAgIGVsc2UgeyBwcmludCAiZiIsIGQgIi8iICQkNCwgJCQxIH0gfSBcCisJICBFTkQgeyBmb3IgKGQgaW4gZmlsZXMpIHByaW50ICJmIiwgZCwgZmlsZXNbZF0gfScgfCBcCisJd2hpbGUgcmVhZCB0eXBlIGRpciBmaWxlczsgZG8gXAorCSAgICAgaWYgdGVzdCAiJCRkaXIiID0gLjsgdGhlbiBkaXI9OyBlbHNlIGRpcj0vJCRkaXI7IGZpOyBcCisJICAgICB0ZXN0IC16ICIkJGZpbGVzIiB8fCB7IFwKKwkgICAgICAgZWNobyAiICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgJyQoREVTVERJUikkKGJpbmRpcikkJGRpciciOyBcCisJICAgICAgICQoSU5TVEFMTF9TQ1JJUFQpICQkZmlsZXMgIiQoREVTVERJUikkKGJpbmRpcikkJGRpciIgfHwgZXhpdCAkJD87IFwKKwkgICAgIH0gXAorCTsgZG9uZQorCit1bmluc3RhbGwtYmluU0NSSVBUUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGJpbl9TQ1JJUFRTKSc7IHRlc3QgLW4gIiQoYmluZGlyKSIgfHwgZXhpdCAwOyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAiJCRwIjsgZG9uZSB8IFwKKwkgICAgICAgc2VkIC1lICdzLC4qLywsOyQodHJhbnNmb3JtKSdgOyBcCisJZGlyPSckKERFU1RESVIpJChiaW5kaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCS1ybSAtZiBzcmMvKi4kKE9CSkVYVCkKKwktcm0gLWYgc3JjLyoubG8KKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvZGZ0YWJsZXMuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfYXV0b19wb3NzZXNzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9jaGFydGFibGVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9jb21waWxlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9jb25maWcuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NvbnRleHQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2RmYV9tYXRjaC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfZXJyb3IuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfaml0X2NvbXBpbGUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX21ha2V0YWJsZXMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX21hdGNoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9tYXRjaF9kYXRhLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9uZXdsaW5lLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9vcmQydXRmLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9wYXR0ZXJuX2luZm8uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3NlcmlhbGl6ZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3RyaW5nX3V0aWxzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdHVkeS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3Vic3RpdHV0ZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3Vic3RyaW5nLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl90YWJsZXMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3VjZC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfdmFsaWRfdXRmLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl94Y2xhc3MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2F1dG9fcG9zc2Vzcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfY2hhcnRhYmxlcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29tcGlsZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29uZmlnLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9jb250ZXh0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9kZmFfbWF0Y2guUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2Vycm9yLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9maW5kX2JyYWNrZXQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2ppdF9jb21waWxlLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYWtldGFibGVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYXRjaC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfbWF0Y2hfZGF0YS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfbmV3bGluZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfb3JkMnV0Zi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfcGF0dGVybl9pbmZvLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9zZXJpYWxpemUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N0cmluZ191dGlscy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfc3R1ZHkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N1YnN0aXR1dGUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N1YnN0cmluZy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfdGFibGVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl91Y2QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3ZhbGlkX3V0Zi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfeGNsYXNzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2F1dG9fcG9zc2Vzcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9jaGFydGFibGVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2NvbXBpbGUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfY29uZmlnLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2NvbnRleHQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfZGZhX21hdGNoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2Vycm9yLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9qaXRfY29tcGlsZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9tYWtldGFibGVzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX21hdGNoLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX21hdGNoX2RhdGEuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfbmV3bGluZS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9vcmQydXRmLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX3BhdHRlcm5faW5mby5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9zZXJpYWxpemUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3RyaW5nX3V0aWxzLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX3N0dWR5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX3N1YnN0aXR1dGUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3Vic3RyaW5nLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX3RhYmxlcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl91Y2QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfdmFsaWRfdXRmLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX3hjbGFzcy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvbGlicGNyZTJfcG9zaXhfbGEtcGNyZTJwb3NpeC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvcGNyZTJfaml0X3Rlc3QtcGNyZTJfaml0X3Rlc3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy8kKERFUERJUikvcGNyZTJncmVwLXBjcmUyZ3JlcC5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjLyQoREVQRElSKS9wY3JlMnRlc3QtcGNyZTJ0ZXN0LlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgJDwgJiZcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICQkZGVwYmFzZS5UcG8gLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYCAmJlwKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENPTVBJTEUpIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MubG86IHNyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfYXV0b19wb3NzZXNzLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfYXV0b19wb3NzZXNzLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfYXV0b19wb3NzZXNzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfYXV0b19wb3NzZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2F1dG9fcG9zc2Vzcy5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfYXV0b19wb3NzZXNzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfYXV0b19wb3NzZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYworCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29tcGlsZS5sbzogc3JjL3BjcmUyX2NvbXBpbGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29tcGlsZS5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NvbXBpbGUuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9jb21waWxlLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfY29tcGlsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfY29tcGlsZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29tcGlsZS5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9jb21waWxlLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9jb21waWxlLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NvbXBpbGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29tcGlsZS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2NvbXBpbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2NvbXBpbGUuYworCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29uZmlnLmxvOiBzcmMvcGNyZTJfY29uZmlnLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NvbmZpZy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NvbmZpZy5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NvbmZpZy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2NvbmZpZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfY29uZmlnLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9jb25maWcuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29uZmlnLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9jb25maWcuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29uZmlnLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NvbmZpZy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2NvbmZpZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfY29uZmlnLmMKKworc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NvbnRleHQubG86IHNyYy9wY3JlMl9jb250ZXh0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NvbnRleHQubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9jb250ZXh0LlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29udGV4dC5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2NvbnRleHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2NvbnRleHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NvbnRleHQuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfY29udGV4dC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfY29udGV4dC5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9jb250ZXh0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NvbnRleHQubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9jb250ZXh0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9jb250ZXh0LmMKKworc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2RmYV9tYXRjaC5sbzogc3JjL3BjcmUyX2RmYV9tYXRjaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9kZmFfbWF0Y2gubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9kZmFfbWF0Y2guVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9kZmFfbWF0Y2gubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9kZmFfbWF0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2RmYV9tYXRjaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfZGZhX21hdGNoLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2RmYV9tYXRjaC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfZGZhX21hdGNoLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2RmYV9tYXRjaC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9kZmFfbWF0Y2gubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9kZmFfbWF0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2RmYV9tYXRjaC5jCisKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9lcnJvci5sbzogc3JjL3BjcmUyX2Vycm9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2Vycm9yLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfZXJyb3IuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9lcnJvci5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2Vycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9lcnJvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfZXJyb3IuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfZXJyb3IuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX2Vycm9yLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2Vycm9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2Vycm9yLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfZXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2Vycm9yLmMKKworc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5sbzogc3JjL3BjcmUyX2ZpbmRfYnJhY2tldC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9maW5kX2JyYWNrZXQubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9maW5kX2JyYWNrZXQuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9maW5kX2JyYWNrZXQubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9maW5kX2JyYWNrZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2ZpbmRfYnJhY2tldC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfZmluZF9icmFja2V0LlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfZmluZF9icmFja2V0LmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9maW5kX2JyYWNrZXQubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9maW5kX2JyYWNrZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2ZpbmRfYnJhY2tldC5jCisKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9qaXRfY29tcGlsZS5sbzogc3JjL3BjcmUyX2ppdF9jb21waWxlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2ppdF9jb21waWxlLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfaml0X2NvbXBpbGUuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9qaXRfY29tcGlsZS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2ppdF9jb21waWxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9qaXRfY29tcGlsZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfaml0X2NvbXBpbGUuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfaml0X2NvbXBpbGUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX2ppdF9jb21waWxlLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2ppdF9jb21waWxlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2ppdF9jb21waWxlLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfaml0X2NvbXBpbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2ppdF9jb21waWxlLmMKKworc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX21ha2V0YWJsZXMubG86IHNyYy9wY3JlMl9tYWtldGFibGVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX21ha2V0YWJsZXMubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9tYWtldGFibGVzLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWFrZXRhYmxlcy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX21ha2V0YWJsZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX21ha2V0YWJsZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX21ha2V0YWJsZXMuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWFrZXRhYmxlcy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfbWFrZXRhYmxlcy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9tYWtldGFibGVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX21ha2V0YWJsZXMubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9tYWtldGFibGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9tYWtldGFibGVzLmMKKworc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX21hdGNoLmxvOiBzcmMvcGNyZTJfbWF0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWF0Y2gubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9tYXRjaC5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX21hdGNoLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfbWF0Y2guYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX21hdGNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9tYXRjaC5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9tYXRjaC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfbWF0Y2guYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWF0Y2gubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWF0Y2gubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9tYXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbWF0Y2guYworCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWF0Y2hfZGF0YS5sbzogc3JjL3BjcmUyX21hdGNoX2RhdGEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWF0Y2hfZGF0YS5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX21hdGNoX2RhdGEuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9tYXRjaF9kYXRhLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfbWF0Y2hfZGF0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbWF0Y2hfZGF0YS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWF0Y2hfZGF0YS5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9tYXRjaF9kYXRhLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9tYXRjaF9kYXRhLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX21hdGNoX2RhdGEubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbWF0Y2hfZGF0YS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX21hdGNoX2RhdGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX21hdGNoX2RhdGEuYworCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbmV3bGluZS5sbzogc3JjL3BjcmUyX25ld2xpbmUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbmV3bGluZS5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX25ld2xpbmUuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9uZXdsaW5lLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfbmV3bGluZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbmV3bGluZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfbmV3bGluZS5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9uZXdsaW5lLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9uZXdsaW5lLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX25ld2xpbmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfbmV3bGluZS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX25ld2xpbmUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX25ld2xpbmUuYworCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfb3JkMnV0Zi5sbzogc3JjL3BjcmUyX29yZDJ1dGYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfb3JkMnV0Zi5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX29yZDJ1dGYuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9vcmQydXRmLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfb3JkMnV0Zi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfb3JkMnV0Zi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfb3JkMnV0Zi5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9vcmQydXRmLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9vcmQydXRmLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX29yZDJ1dGYubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfb3JkMnV0Zi5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX29yZDJ1dGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX29yZDJ1dGYuYworCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfcGF0dGVybl9pbmZvLmxvOiBzcmMvcGNyZTJfcGF0dGVybl9pbmZvLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3BhdHRlcm5faW5mby5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3BhdHRlcm5faW5mby5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3BhdHRlcm5faW5mby5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3BhdHRlcm5faW5mby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfcGF0dGVybl9pbmZvLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9wYXR0ZXJuX2luZm8uVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfcGF0dGVybl9pbmZvLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9wYXR0ZXJuX2luZm8uYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfcGF0dGVybl9pbmZvLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3BhdHRlcm5faW5mby5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3BhdHRlcm5faW5mby5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfcGF0dGVybl9pbmZvLmMKKworc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3NlcmlhbGl6ZS5sbzogc3JjL3BjcmUyX3NlcmlhbGl6ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zZXJpYWxpemUubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9zZXJpYWxpemUuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zZXJpYWxpemUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zZXJpYWxpemUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3NlcmlhbGl6ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfc2VyaWFsaXplLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3NlcmlhbGl6ZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfc2VyaWFsaXplLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3NlcmlhbGl6ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zZXJpYWxpemUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zZXJpYWxpemUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3NlcmlhbGl6ZS5jCisKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdHJpbmdfdXRpbHMubG86IHNyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3RyaW5nX3V0aWxzLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3RyaW5nX3V0aWxzLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3RyaW5nX3V0aWxzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfc3RyaW5nX3V0aWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3N0cmluZ191dGlscy5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdHJpbmdfdXRpbHMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3N0cmluZ191dGlscy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdHJpbmdfdXRpbHMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3RyaW5nX3V0aWxzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfc3RyaW5nX3V0aWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYworCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3R1ZHkubG86IHNyYy9wY3JlMl9zdHVkeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdHVkeS5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3N0dWR5LlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3R1ZHkubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zdHVkeS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfc3R1ZHkuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3N0dWR5LlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3N0dWR5LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9zdHVkeS5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdHVkeS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdHVkeS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3N0dWR5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zdHVkeS5jCisKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdWJzdGl0dXRlLmxvOiBzcmMvcGNyZTJfc3Vic3RpdHV0ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdWJzdGl0dXRlLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3Vic3RpdHV0ZS5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3N1YnN0aXR1dGUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zdWJzdGl0dXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zdWJzdGl0dXRlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdWJzdGl0dXRlLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3N1YnN0aXR1dGUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3N1YnN0aXR1dGUuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3Vic3RpdHV0ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdWJzdGl0dXRlLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfc3Vic3RpdHV0ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfc3Vic3RpdHV0ZS5jCisKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdWJzdHJpbmcubG86IHNyYy9wY3JlMl9zdWJzdHJpbmcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3Vic3RyaW5nLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3Vic3RyaW5nLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3Vic3RyaW5nLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfc3Vic3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zdWJzdHJpbmcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3N1YnN0cmluZy5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdWJzdHJpbmcuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3N1YnN0cmluZy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9zdWJzdHJpbmcubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfc3Vic3RyaW5nLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfc3Vic3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zdWJzdHJpbmcuYworCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfdGFibGVzLmxvOiBzcmMvcGNyZTJfdGFibGVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3RhYmxlcy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3RhYmxlcy5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3RhYmxlcy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3RhYmxlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfdGFibGVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl90YWJsZXMuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfdGFibGVzLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl90YWJsZXMuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfdGFibGVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3RhYmxlcy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3RhYmxlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfdGFibGVzLmMKKworc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3VjZC5sbzogc3JjL3BjcmUyX3VjZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl91Y2QubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl91Y2QuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl91Y2QubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl91Y2QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3VjZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfdWNkLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3VjZC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfdWNkLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3VjZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl91Y2QubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl91Y2QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3VjZC5jCisKK3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl92YWxpZF91dGYubG86IHNyYy9wY3JlMl92YWxpZF91dGYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzE2X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfdmFsaWRfdXRmLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfdmFsaWRfdXRmLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfdmFsaWRfdXRmLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfdmFsaWRfdXRmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl92YWxpZF91dGYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3ZhbGlkX3V0Zi5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl92YWxpZF91dGYuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl92YWxpZF91dGYubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfdmFsaWRfdXRmLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfdmFsaWRfdXRmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl92YWxpZF91dGYuYworCitzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfeGNsYXNzLmxvOiBzcmMvcGNyZTJfeGNsYXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3hjbGFzcy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3hjbGFzcy5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3hjbGFzcy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3hjbGFzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfeGNsYXNzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl94Y2xhc3MuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfeGNsYXNzLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl94Y2xhc3MuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfeGNsYXNzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX3hjbGFzcy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3hjbGFzcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfeGNsYXNzLmMKKworc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NoYXJ0YWJsZXMubG86IHNyYy9wY3JlMl9jaGFydGFibGVzLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8xNl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NoYXJ0YWJsZXMubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8xNl9sYS1wY3JlMl9jaGFydGFibGVzLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMTZfbGEtcGNyZTJfY2hhcnRhYmxlcy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NoYXJ0YWJsZXMuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMTZfbGEtcGNyZTJfY2hhcnRhYmxlcy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfY2hhcnRhYmxlcy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8xNl9sYS1wY3JlMl9jaGFydGFibGVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMTZfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzE2X2xhLXBjcmUyX2NoYXJ0YWJsZXMubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9jaGFydGFibGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9jaGFydGFibGVzLmMKKworc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2F1dG9fcG9zc2Vzcy5sbzogc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfYXV0b19wb3NzZXNzLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2F1dG9fcG9zc2Vzcy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfYXV0b19wb3NzZXNzLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2F1dG9fcG9zc2Vzcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jCisKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9jb21waWxlLmxvOiBzcmMvcGNyZTJfY29tcGlsZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9jb21waWxlLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29tcGlsZS5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2NvbXBpbGUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9jb21waWxlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9jb21waWxlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9jb21waWxlLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2NvbXBpbGUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX2NvbXBpbGUuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29tcGlsZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9jb21waWxlLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfY29tcGlsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfY29tcGlsZS5jCisKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9jb25maWcubG86IHNyYy9wY3JlMl9jb25maWcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29uZmlnLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29uZmlnLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29uZmlnLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfY29uZmlnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9jb25maWcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2NvbmZpZy5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9jb25maWcuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX2NvbmZpZy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9jb25maWcubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29uZmlnLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfY29uZmlnLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9jb25maWcuYworCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29udGV4dC5sbzogc3JjL3BjcmUyX2NvbnRleHQuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29udGV4dC5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2NvbnRleHQuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9jb250ZXh0LmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfY29udGV4dC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfY29udGV4dC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29udGV4dC5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9jb250ZXh0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9jb250ZXh0LmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2NvbnRleHQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY29udGV4dC5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2NvbnRleHQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2NvbnRleHQuYworCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfZGZhX21hdGNoLmxvOiBzcmMvcGNyZTJfZGZhX21hdGNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2RmYV9tYXRjaC5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2RmYV9tYXRjaC5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2RmYV9tYXRjaC5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2RmYV9tYXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfZGZhX21hdGNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9kZmFfbWF0Y2guVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfZGZhX21hdGNoLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9kZmFfbWF0Y2guYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfZGZhX21hdGNoLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2RmYV9tYXRjaC5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2RmYV9tYXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfZGZhX21hdGNoLmMKKworc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2Vycm9yLmxvOiBzcmMvcGNyZTJfZXJyb3IuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfZXJyb3IubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9lcnJvci5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2Vycm9yLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfZXJyb3IuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2Vycm9yLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9lcnJvci5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9lcnJvci5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfZXJyb3IuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfZXJyb3IubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfZXJyb3IubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9lcnJvci5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfZXJyb3IuYworCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfZmluZF9icmFja2V0LmxvOiBzcmMvcGNyZTJfZmluZF9icmFja2V0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2ZpbmRfYnJhY2tldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfZmluZF9icmFja2V0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9maW5kX2JyYWNrZXQuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfZmluZF9icmFja2V0LlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9maW5kX2JyYWNrZXQuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfZmluZF9icmFja2V0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2ZpbmRfYnJhY2tldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfZmluZF9icmFja2V0LmMKKworc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2ppdF9jb21waWxlLmxvOiBzcmMvcGNyZTJfaml0X2NvbXBpbGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfaml0X2NvbXBpbGUubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9qaXRfY29tcGlsZS5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2ppdF9jb21waWxlLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfaml0X2NvbXBpbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2ppdF9jb21waWxlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9qaXRfY29tcGlsZS5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9qaXRfY29tcGlsZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfaml0X2NvbXBpbGUuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfaml0X2NvbXBpbGUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfaml0X2NvbXBpbGUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9qaXRfY29tcGlsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfaml0X2NvbXBpbGUuYworCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfbWFrZXRhYmxlcy5sbzogc3JjL3BjcmUyX21ha2V0YWJsZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfbWFrZXRhYmxlcy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX21ha2V0YWJsZXMuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYWtldGFibGVzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfbWFrZXRhYmxlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbWFrZXRhYmxlcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfbWFrZXRhYmxlcy5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYWtldGFibGVzLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9tYWtldGFibGVzLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX21ha2V0YWJsZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfbWFrZXRhYmxlcy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX21ha2V0YWJsZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX21ha2V0YWJsZXMuYworCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfbWF0Y2gubG86IHNyYy9wY3JlMl9tYXRjaC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYXRjaC5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX21hdGNoLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfbWF0Y2gubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9tYXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbWF0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX21hdGNoLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX21hdGNoLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9tYXRjaC5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYXRjaC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYXRjaC5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX21hdGNoLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9tYXRjaC5jCisKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYXRjaF9kYXRhLmxvOiBzcmMvcGNyZTJfbWF0Y2hfZGF0YS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYXRjaF9kYXRhLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfbWF0Y2hfZGF0YS5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX21hdGNoX2RhdGEubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9tYXRjaF9kYXRhLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9tYXRjaF9kYXRhLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYXRjaF9kYXRhLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX21hdGNoX2RhdGEuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX21hdGNoX2RhdGEuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfbWF0Y2hfZGF0YS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9tYXRjaF9kYXRhLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfbWF0Y2hfZGF0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbWF0Y2hfZGF0YS5jCisKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9uZXdsaW5lLmxvOiBzcmMvcGNyZTJfbmV3bGluZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9uZXdsaW5lLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfbmV3bGluZS5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX25ld2xpbmUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9uZXdsaW5lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9uZXdsaW5lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9uZXdsaW5lLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX25ld2xpbmUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX25ld2xpbmUuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfbmV3bGluZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9uZXdsaW5lLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfbmV3bGluZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbmV3bGluZS5jCisKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9vcmQydXRmLmxvOiBzcmMvcGNyZTJfb3JkMnV0Zi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9vcmQydXRmLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfb3JkMnV0Zi5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX29yZDJ1dGYubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9vcmQydXRmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9vcmQydXRmLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9vcmQydXRmLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX29yZDJ1dGYuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX29yZDJ1dGYuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfb3JkMnV0Zi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9vcmQydXRmLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfb3JkMnV0Zi5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfb3JkMnV0Zi5jCisKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9wYXR0ZXJuX2luZm8ubG86IHNyYy9wY3JlMl9wYXR0ZXJuX2luZm8uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfcGF0dGVybl9pbmZvLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfcGF0dGVybl9pbmZvLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfcGF0dGVybl9pbmZvLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfcGF0dGVybl9pbmZvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9wYXR0ZXJuX2luZm8uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3BhdHRlcm5faW5mby5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9wYXR0ZXJuX2luZm8uUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3BhdHRlcm5faW5mby5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9wYXR0ZXJuX2luZm8ubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfcGF0dGVybl9pbmZvLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfcGF0dGVybl9pbmZvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9wYXR0ZXJuX2luZm8uYworCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfc2VyaWFsaXplLmxvOiBzcmMvcGNyZTJfc2VyaWFsaXplLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3NlcmlhbGl6ZS5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3NlcmlhbGl6ZS5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3NlcmlhbGl6ZS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3NlcmlhbGl6ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfc2VyaWFsaXplLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9zZXJpYWxpemUuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfc2VyaWFsaXplLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9zZXJpYWxpemUuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfc2VyaWFsaXplLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3NlcmlhbGl6ZS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3NlcmlhbGl6ZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfc2VyaWFsaXplLmMKKworc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N0cmluZ191dGlscy5sbzogc3JjL3BjcmUyX3N0cmluZ191dGlscy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdHJpbmdfdXRpbHMubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdHJpbmdfdXRpbHMuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdHJpbmdfdXRpbHMubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3N0cmluZ191dGlscy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfc3RyaW5nX3V0aWxzLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N0cmluZ191dGlscy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfc3RyaW5nX3V0aWxzLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N0cmluZ191dGlscy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdHJpbmdfdXRpbHMubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3N0cmluZ191dGlscy5jCisKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdHVkeS5sbzogc3JjL3BjcmUyX3N0dWR5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N0dWR5LmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfc3R1ZHkuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdHVkeS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3N0dWR5LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zdHVkeS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfc3R1ZHkuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfc3R1ZHkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3N0dWR5LmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N0dWR5LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N0dWR5LmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfc3R1ZHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3N0dWR5LmMKKworc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N1YnN0aXR1dGUubG86IHNyYy9wY3JlMl9zdWJzdGl0dXRlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N1YnN0aXR1dGUubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdWJzdGl0dXRlLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfc3Vic3RpdHV0ZS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3N1YnN0aXR1dGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3N1YnN0aXR1dGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N1YnN0aXR1dGUuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfc3Vic3RpdHV0ZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfc3Vic3RpdHV0ZS5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdWJzdGl0dXRlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N1YnN0aXR1dGUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zdWJzdGl0dXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zdWJzdGl0dXRlLmMKKworc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N1YnN0cmluZy5sbzogc3JjL3BjcmUyX3N1YnN0cmluZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdWJzdHJpbmcubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdWJzdHJpbmcuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdWJzdHJpbmcubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zdWJzdHJpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3N1YnN0cmluZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfc3Vic3RyaW5nLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N1YnN0cmluZy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfc3Vic3RyaW5nLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3N1YnN0cmluZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9zdWJzdHJpbmcubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zdWJzdHJpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3N1YnN0cmluZy5jCisKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl90YWJsZXMubG86IHNyYy9wY3JlMl90YWJsZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfdGFibGVzLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfdGFibGVzLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfdGFibGVzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfdGFibGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl90YWJsZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3RhYmxlcy5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl90YWJsZXMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3RhYmxlcy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl90YWJsZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfdGFibGVzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfdGFibGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl90YWJsZXMuYworCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfdWNkLmxvOiBzcmMvcGNyZTJfdWNkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3VjZC5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3VjZC5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3VjZC5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3VjZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfdWNkLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl91Y2QuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfdWNkLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl91Y2QuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfdWNkLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3VjZC5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3VjZC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfdWNkLmMKKworc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3ZhbGlkX3V0Zi5sbzogc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfMzJfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl92YWxpZF91dGYubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl92YWxpZF91dGYuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl92YWxpZF91dGYubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl92YWxpZF91dGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfdmFsaWRfdXRmLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3ZhbGlkX3V0Zi5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfdmFsaWRfdXRmLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3ZhbGlkX3V0Zi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl92YWxpZF91dGYubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl92YWxpZF91dGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jCisKK3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl94Y2xhc3MubG86IHNyYy9wY3JlMl94Y2xhc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfeGNsYXNzLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfeGNsYXNzLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfeGNsYXNzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfeGNsYXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl94Y2xhc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX3hjbGFzcy5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl94Y2xhc3MuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3hjbGFzcy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl94Y2xhc3MubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfeGNsYXNzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfeGNsYXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl94Y2xhc3MuYworCitzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY2hhcnRhYmxlcy5sbzogc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzMyX2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY2hhcnRhYmxlcy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2NoYXJ0YWJsZXMuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl8zMl9sYS1wY3JlMl9jaGFydGFibGVzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfY2hhcnRhYmxlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfY2hhcnRhYmxlcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfMzJfbGEtcGNyZTJfY2hhcnRhYmxlcy5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl8zMl9sYS1wY3JlMl9jaGFydGFibGVzLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9jaGFydGFibGVzLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzMyX2xhLXBjcmUyX2NoYXJ0YWJsZXMubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl8zMl9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfMzJfbGEtcGNyZTJfY2hhcnRhYmxlcy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MubG86IHNyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX2F1dG9fcG9zc2Vzcy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfYXV0b19wb3NzZXNzLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9hdXRvX3Bvc3Nlc3MuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX2F1dG9fcG9zc2Vzcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfYXV0b19wb3NzZXNzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfYXV0b19wb3NzZXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9jb21waWxlLmxvOiBzcmMvcGNyZTJfY29tcGlsZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfY29tcGlsZS5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfY29tcGlsZS5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfY29tcGlsZS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2NvbXBpbGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2NvbXBpbGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfY29tcGlsZS5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2NvbXBpbGUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX2NvbXBpbGUuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9jb21waWxlLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9jb21waWxlLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfY29tcGlsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfY29tcGlsZS5jCisKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX2NvbmZpZy5sbzogc3JjL3BjcmUyX2NvbmZpZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfY29uZmlnLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9jb25maWcuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX2NvbmZpZy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2NvbmZpZy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfY29uZmlnLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2NvbmZpZy5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2NvbmZpZy5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfY29uZmlnLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfY29uZmlnLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9jb25maWcubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9jb25maWcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2NvbmZpZy5jCisKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX2NvbnRleHQubG86IHNyYy9wY3JlMl9jb250ZXh0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl84X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9jb250ZXh0LmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9jb250ZXh0LlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9jb250ZXh0LmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfY29udGV4dC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfY29udGV4dC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9jb250ZXh0LlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfY29udGV4dC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfY29udGV4dC5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX2NvbnRleHQubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl84X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX2NvbnRleHQubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9jb250ZXh0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9jb250ZXh0LmMKKworc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfZGZhX21hdGNoLmxvOiBzcmMvcGNyZTJfZGZhX21hdGNoLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl84X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9kZmFfbWF0Y2gubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2RmYV9tYXRjaC5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfZGZhX21hdGNoLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfZGZhX21hdGNoLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9kZmFfbWF0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfZGZhX21hdGNoLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfZGZhX21hdGNoLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9kZmFfbWF0Y2guYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9kZmFfbWF0Y2gubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl84X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX2RmYV9tYXRjaC5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2RmYV9tYXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfZGZhX21hdGNoLmMKKworc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfZXJyb3IubG86IHNyYy9wY3JlMl9lcnJvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfZXJyb3IubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2Vycm9yLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9lcnJvci5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2Vycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9lcnJvci5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9lcnJvci5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2Vycm9yLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9lcnJvci5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX2Vycm9yLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9lcnJvci5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2Vycm9yLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9lcnJvci5jCisKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5sbzogc3JjL3BjcmUyX2ZpbmRfYnJhY2tldC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfZmluZF9icmFja2V0LmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9maW5kX2JyYWNrZXQuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2ZpbmRfYnJhY2tldC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfZmluZF9icmFja2V0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2ZpbmRfYnJhY2tldC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfZmluZF9icmFja2V0LmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfZmluZF9icmFja2V0LmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9maW5kX2JyYWNrZXQubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9maW5kX2JyYWNrZXQuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2ZpbmRfYnJhY2tldC5jCisKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX2ppdF9jb21waWxlLmxvOiBzcmMvcGNyZTJfaml0X2NvbXBpbGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX2ppdF9jb21waWxlLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9qaXRfY29tcGlsZS5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfaml0X2NvbXBpbGUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9qaXRfY29tcGlsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfaml0X2NvbXBpbGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfaml0X2NvbXBpbGUuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9qaXRfY29tcGlsZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfaml0X2NvbXBpbGUuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9qaXRfY29tcGlsZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfaml0X2NvbXBpbGUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9qaXRfY29tcGlsZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfaml0X2NvbXBpbGUuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9tYWtldGFibGVzLmxvOiBzcmMvcGNyZTJfbWFrZXRhYmxlcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWFrZXRhYmxlcy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWFrZXRhYmxlcy5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWFrZXRhYmxlcy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX21ha2V0YWJsZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX21ha2V0YWJsZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWFrZXRhYmxlcy5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX21ha2V0YWJsZXMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX21ha2V0YWJsZXMuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9tYWtldGFibGVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9tYWtldGFibGVzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfbWFrZXRhYmxlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbWFrZXRhYmxlcy5jCisKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX21hdGNoLmxvOiBzcmMvcGNyZTJfbWF0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX21hdGNoLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9tYXRjaC5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWF0Y2gubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9tYXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbWF0Y2guYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWF0Y2guVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9tYXRjaC5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfbWF0Y2guYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9tYXRjaC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWF0Y2gubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9tYXRjaC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbWF0Y2guYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9tYXRjaF9kYXRhLmxvOiBzcmMvcGNyZTJfbWF0Y2hfZGF0YS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWF0Y2hfZGF0YS5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWF0Y2hfZGF0YS5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWF0Y2hfZGF0YS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX21hdGNoX2RhdGEuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX21hdGNoX2RhdGEuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfbWF0Y2hfZGF0YS5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX21hdGNoX2RhdGEuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX21hdGNoX2RhdGEuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9tYXRjaF9kYXRhLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9tYXRjaF9kYXRhLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfbWF0Y2hfZGF0YS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbWF0Y2hfZGF0YS5jCisKK3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX25ld2xpbmUubG86IHNyYy9wY3JlMl9uZXdsaW5lLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl84X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9uZXdsaW5lLmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9uZXdsaW5lLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9uZXdsaW5lLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfbmV3bGluZS5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfbmV3bGluZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9uZXdsaW5lLlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfbmV3bGluZS5QbG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfbmV3bGluZS5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX25ld2xpbmUubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl84X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX25ld2xpbmUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9uZXdsaW5lLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9uZXdsaW5lLmMKKworc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfb3JkMnV0Zi5sbzogc3JjL3BjcmUyX29yZDJ1dGYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX29yZDJ1dGYubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX29yZDJ1dGYuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX29yZDJ1dGYubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9vcmQydXRmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9vcmQydXRmLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX29yZDJ1dGYuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9vcmQydXRmLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9vcmQydXRmLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfb3JkMnV0Zi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfb3JkMnV0Zi5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX29yZDJ1dGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX29yZDJ1dGYuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9wYXR0ZXJuX2luZm8ubG86IHNyYy9wY3JlMl9wYXR0ZXJuX2luZm8uYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3BhdHRlcm5faW5mby5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfcGF0dGVybl9pbmZvLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9wYXR0ZXJuX2luZm8ubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9wYXR0ZXJuX2luZm8uYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3BhdHRlcm5faW5mby5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9wYXR0ZXJuX2luZm8uVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9wYXR0ZXJuX2luZm8uUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3BhdHRlcm5faW5mby5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX3BhdHRlcm5faW5mby5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfcGF0dGVybl9pbmZvLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfcGF0dGVybl9pbmZvLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9wYXR0ZXJuX2luZm8uYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zZXJpYWxpemUubG86IHNyYy9wY3JlMl9zZXJpYWxpemUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3NlcmlhbGl6ZS5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfc2VyaWFsaXplLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zZXJpYWxpemUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zZXJpYWxpemUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3NlcmlhbGl6ZS5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9zZXJpYWxpemUuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9zZXJpYWxpemUuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3NlcmlhbGl6ZS5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX3NlcmlhbGl6ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc2VyaWFsaXplLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfc2VyaWFsaXplLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zZXJpYWxpemUuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zdHJpbmdfdXRpbHMubG86IHNyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3N0cmluZ191dGlscy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3RyaW5nX3V0aWxzLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zdHJpbmdfdXRpbHMubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3N0cmluZ191dGlscy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9zdHJpbmdfdXRpbHMuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9zdHJpbmdfdXRpbHMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3N0cmluZ191dGlscy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX3N0cmluZ191dGlscy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3RyaW5nX3V0aWxzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfc3RyaW5nX3V0aWxzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zdHVkeS5sbzogc3JjL3BjcmUyX3N0dWR5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9DQykkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl84X2xhX0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zdHVkeS5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3R1ZHkuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3N0dWR5LmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfc3R1ZHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3N0dWR5LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX3N0dWR5LlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3R1ZHkuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3N0dWR5LmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3R1ZHkubG8nIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExJQlRPT0wpICQoQU1fVl9sdCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChsaWJwY3JlMl84X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3N0dWR5LmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfc3R1ZHkuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3N0dWR5LmMKKworc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3Vic3RpdHV0ZS5sbzogc3JjL3BjcmUyX3N1YnN0aXR1dGUuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3N1YnN0aXR1dGUubG8gLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX3N1YnN0aXR1dGUuVHBvIC1jIC1vIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3N1YnN0aXR1dGUubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zdWJzdGl0dXRlLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zdWJzdGl0dXRlLmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX3N1YnN0aXR1dGUuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9zdWJzdGl0dXRlLlBsbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMl9zdWJzdGl0dXRlLmMnIG9iamVjdD0nc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3Vic3RpdHV0ZS5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3Vic3RpdHV0ZS5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX3N1YnN0aXR1dGUuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3N1YnN0aXR1dGUuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zdWJzdHJpbmcubG86IHNyYy9wY3JlMl9zdWJzdHJpbmcuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3N1YnN0cmluZy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3Vic3RyaW5nLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9zdWJzdHJpbmcubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9zdWJzdHJpbmcuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3N1YnN0cmluZy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9zdWJzdHJpbmcuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl9zdWJzdHJpbmcuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3N1YnN0cmluZy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX3N1YnN0cmluZy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfc3Vic3RyaW5nLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfc3Vic3RyaW5nLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9zdWJzdHJpbmcuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl90YWJsZXMubG86IHNyYy9wY3JlMl90YWJsZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3RhYmxlcy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfdGFibGVzLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl90YWJsZXMubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl90YWJsZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3RhYmxlcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl90YWJsZXMuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl90YWJsZXMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3RhYmxlcy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX3RhYmxlcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfdGFibGVzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfdGFibGVzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl90YWJsZXMuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl91Y2QubG86IHNyYy9wY3JlMl91Y2QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3VjZC5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfdWNkLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl91Y2QubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl91Y2QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3VjZC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl91Y2QuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl91Y2QuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3VjZC5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX3VjZC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfdWNkLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfdWNkLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl91Y2QuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl92YWxpZF91dGYubG86IHNyYy9wY3JlMl92YWxpZF91dGYuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3ZhbGlkX3V0Zi5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfdmFsaWRfdXRmLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl92YWxpZF91dGYubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl92YWxpZF91dGYuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl92YWxpZF91dGYuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl92YWxpZF91dGYuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX3ZhbGlkX3V0Zi5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfdmFsaWRfdXRmLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfdmFsaWRfdXRmLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl92YWxpZF91dGYuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl94Y2xhc3MubG86IHNyYy9wY3JlMl94Y2xhc3MuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl84X2xhLXBjcmUyX3hjbGFzcy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfeGNsYXNzLlRwbyAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl94Y2xhc3MubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMl94Y2xhc3MuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX3hjbGFzcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl94Y2xhc3MuVHBvIHNyYy8kKERFUERJUikvbGlicGNyZTJfOF9sYS1wY3JlMl94Y2xhc3MuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX3hjbGFzcy5jJyBvYmplY3Q9J3NyYy9saWJwY3JlMl84X2xhLXBjcmUyX3hjbGFzcy5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyXzhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfeGNsYXNzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfeGNsYXNzLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl94Y2xhc3MuYworCitzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9jaGFydGFibGVzLmxvOiBzcmMvcGNyZTJfY2hhcnRhYmxlcy5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfY2hhcnRhYmxlcy5sbyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfY2hhcnRhYmxlcy5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyXzhfbGEtcGNyZTJfY2hhcnRhYmxlcy5sbyBgdGVzdCAtZiAnc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL2xpYnBjcmUyXzhfbGEtcGNyZTJfY2hhcnRhYmxlcy5UcG8gc3JjLyQoREVQRElSKS9saWJwY3JlMl84X2xhLXBjcmUyX2NoYXJ0YWJsZXMuUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9jaGFydGFibGVzLmxvJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfOF9sYV9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvbGlicGNyZTJfOF9sYS1wY3JlMl9jaGFydGFibGVzLmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJfY2hhcnRhYmxlcy5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfY2hhcnRhYmxlcy5jCisKK3NyYy9saWJwY3JlMl9wb3NpeF9sYS1wY3JlMnBvc2l4LmxvOiBzcmMvcGNyZTJwb3NpeC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQobGlicGNyZTJfcG9zaXhfbGFfQ0ZMQUdTKSAkKENGTEFHUykgLU1UIHNyYy9saWJwY3JlMl9wb3NpeF9sYS1wY3JlMnBvc2l4LmxvIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvbGlicGNyZTJfcG9zaXhfbGEtcGNyZTJwb3NpeC5UcG8gLWMgLW8gc3JjL2xpYnBjcmUyX3Bvc2l4X2xhLXBjcmUycG9zaXgubG8gYHRlc3QgLWYgJ3NyYy9wY3JlMnBvc2l4LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMnBvc2l4LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9saWJwY3JlMl9wb3NpeF9sYS1wY3JlMnBvc2l4LlRwbyBzcmMvJChERVBESVIpL2xpYnBjcmUyX3Bvc2l4X2xhLXBjcmUycG9zaXguUGxvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUycG9zaXguYycgb2JqZWN0PSdzcmMvbGlicGNyZTJfcG9zaXhfbGEtcGNyZTJwb3NpeC5sbycgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKGxpYnBjcmUyX3Bvc2l4X2xhX0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9saWJwY3JlMl9wb3NpeF9sYS1wY3JlMnBvc2l4LmxvIGB0ZXN0IC1mICdzcmMvcGNyZTJwb3NpeC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJwb3NpeC5jCisKK3NyYy9wY3JlMl9qaXRfdGVzdC1wY3JlMl9qaXRfdGVzdC5vOiBzcmMvcGNyZTJfaml0X3Rlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBjcmUyX2ppdF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvcGNyZTJfaml0X3Rlc3QtcGNyZTJfaml0X3Rlc3QubyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL3BjcmUyX2ppdF90ZXN0LXBjcmUyX2ppdF90ZXN0LlRwbyAtYyAtbyBzcmMvcGNyZTJfaml0X3Rlc3QtcGNyZTJfaml0X3Rlc3QubyBgdGVzdCAtZiAnc3JjL3BjcmUyX2ppdF90ZXN0LmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMl9qaXRfdGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvcGNyZTJfaml0X3Rlc3QtcGNyZTJfaml0X3Rlc3QuVHBvIHNyYy8kKERFUERJUikvcGNyZTJfaml0X3Rlc3QtcGNyZTJfaml0X3Rlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJfaml0X3Rlc3QuYycgb2JqZWN0PSdzcmMvcGNyZTJfaml0X3Rlc3QtcGNyZTJfaml0X3Rlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGNyZTJfaml0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL3BjcmUyX2ppdF90ZXN0LXBjcmUyX2ppdF90ZXN0Lm8gYHRlc3QgLWYgJ3NyYy9wY3JlMl9qaXRfdGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJfaml0X3Rlc3QuYworCitzcmMvcGNyZTJfaml0X3Rlc3QtcGNyZTJfaml0X3Rlc3Qub2JqOiBzcmMvcGNyZTJfaml0X3Rlc3QuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBjcmUyX2ppdF90ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvcGNyZTJfaml0X3Rlc3QtcGNyZTJfaml0X3Rlc3Qub2JqIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvcGNyZTJfaml0X3Rlc3QtcGNyZTJfaml0X3Rlc3QuVHBvIC1jIC1vIHNyYy9wY3JlMl9qaXRfdGVzdC1wY3JlMl9qaXRfdGVzdC5vYmogYGlmIHRlc3QgLWYgJ3NyYy9wY3JlMl9qaXRfdGVzdC5jJzsgdGhlbiAkKENZR1BBVEhfVykgJ3NyYy9wY3JlMl9qaXRfdGVzdC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zcmMvcGNyZTJfaml0X3Rlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL3BjcmUyX2ppdF90ZXN0LXBjcmUyX2ppdF90ZXN0LlRwbyBzcmMvJChERVBESVIpL3BjcmUyX2ppdF90ZXN0LXBjcmUyX2ppdF90ZXN0LlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyX2ppdF90ZXN0LmMnIG9iamVjdD0nc3JjL3BjcmUyX2ppdF90ZXN0LXBjcmUyX2ppdF90ZXN0Lm9iaicgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGNyZTJfaml0X3Rlc3RfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL3BjcmUyX2ppdF90ZXN0LXBjcmUyX2ppdF90ZXN0Lm9iaiBgaWYgdGVzdCAtZiAnc3JjL3BjcmUyX2ppdF90ZXN0LmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc3JjL3BjcmUyX2ppdF90ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NyYy9wY3JlMl9qaXRfdGVzdC5jJzsgZmlgCisKK3NyYy9wY3JlMmdyZXAtcGNyZTJncmVwLm86IHNyYy9wY3JlMmdyZXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBjcmUyZ3JlcF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL3BjcmUyZ3JlcC1wY3JlMmdyZXAubyAtTUQgLU1QIC1NRiBzcmMvJChERVBESVIpL3BjcmUyZ3JlcC1wY3JlMmdyZXAuVHBvIC1jIC1vIHNyYy9wY3JlMmdyZXAtcGNyZTJncmVwLm8gYHRlc3QgLWYgJ3NyYy9wY3JlMmdyZXAuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUyZ3JlcC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfYXQpJChhbV9fbXYpIHNyYy8kKERFUERJUikvcGNyZTJncmVwLXBjcmUyZ3JlcC5UcG8gc3JjLyQoREVQRElSKS9wY3JlMmdyZXAtcGNyZTJncmVwLlBvCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nc3JjL3BjcmUyZ3JlcC5jJyBvYmplY3Q9J3NyYy9wY3JlMmdyZXAtcGNyZTJncmVwLm8nIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBjcmUyZ3JlcF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvcGNyZTJncmVwLXBjcmUyZ3JlcC5vIGB0ZXN0IC1mICdzcmMvcGNyZTJncmVwLmMnIHx8IGVjaG8gJyQoc3JjZGlyKS8nYHNyYy9wY3JlMmdyZXAuYworCitzcmMvcGNyZTJncmVwLXBjcmUyZ3JlcC5vYmo6IHNyYy9wY3JlMmdyZXAuYworQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBjcmUyZ3JlcF9DRkxBR1MpICQoQ0ZMQUdTKSAtTVQgc3JjL3BjcmUyZ3JlcC1wY3JlMmdyZXAub2JqIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvcGNyZTJncmVwLXBjcmUyZ3JlcC5UcG8gLWMgLW8gc3JjL3BjcmUyZ3JlcC1wY3JlMmdyZXAub2JqIGBpZiB0ZXN0IC1mICdzcmMvcGNyZTJncmVwLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc3JjL3BjcmUyZ3JlcC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zcmMvcGNyZTJncmVwLmMnOyBmaWAKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9wY3JlMmdyZXAtcGNyZTJncmVwLlRwbyBzcmMvJChERVBESVIpL3BjcmUyZ3JlcC1wY3JlMmdyZXAuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJncmVwLmMnIG9iamVjdD0nc3JjL3BjcmUyZ3JlcC1wY3JlMmdyZXAub2JqJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChwY3JlMmdyZXBfQ0ZMQUdTKSAkKENGTEFHUykgLWMgLW8gc3JjL3BjcmUyZ3JlcC1wY3JlMmdyZXAub2JqIGBpZiB0ZXN0IC1mICdzcmMvcGNyZTJncmVwLmMnOyB0aGVuICQoQ1lHUEFUSF9XKSAnc3JjL3BjcmUyZ3JlcC5jJzsgZWxzZSAkKENZR1BBVEhfVykgJyQoc3JjZGlyKS9zcmMvcGNyZTJncmVwLmMnOyBmaWAKKworc3JjL3BjcmUydGVzdC1wY3JlMnRlc3Qubzogc3JjL3BjcmUydGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGNyZTJ0ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvcGNyZTJ0ZXN0LXBjcmUydGVzdC5vIC1NRCAtTVAgLU1GIHNyYy8kKERFUERJUikvcGNyZTJ0ZXN0LXBjcmUydGVzdC5UcG8gLWMgLW8gc3JjL3BjcmUydGVzdC1wY3JlMnRlc3QubyBgdGVzdCAtZiAnc3JjL3BjcmUydGVzdC5jJyB8fCBlY2hvICckKHNyY2RpcikvJ2BzcmMvcGNyZTJ0ZXN0LmMKK0BhbV9fZmFzdGRlcENDX1RSVUVACSQoQU1fVl9hdCkkKGFtX19tdikgc3JjLyQoREVQRElSKS9wY3JlMnRlc3QtcGNyZTJ0ZXN0LlRwbyBzcmMvJChERVBESVIpL3BjcmUydGVzdC1wY3JlMnRlc3QuUG8KK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSdzcmMvcGNyZTJ0ZXN0LmMnIG9iamVjdD0nc3JjL3BjcmUydGVzdC1wY3JlMnRlc3QubycgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGNyZTJ0ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1jIC1vIHNyYy9wY3JlMnRlc3QtcGNyZTJ0ZXN0Lm8gYHRlc3QgLWYgJ3NyYy9wY3JlMnRlc3QuYycgfHwgZWNobyAnJChzcmNkaXIpLydgc3JjL3BjcmUydGVzdC5jCisKK3NyYy9wY3JlMnRlc3QtcGNyZTJ0ZXN0Lm9iajogc3JjL3BjcmUydGVzdC5jCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKEFNX1ZfQ0MpJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQocGNyZTJ0ZXN0X0NGTEFHUykgJChDRkxBR1MpIC1NVCBzcmMvcGNyZTJ0ZXN0LXBjcmUydGVzdC5vYmogLU1EIC1NUCAtTUYgc3JjLyQoREVQRElSKS9wY3JlMnRlc3QtcGNyZTJ0ZXN0LlRwbyAtYyAtbyBzcmMvcGNyZTJ0ZXN0LXBjcmUydGVzdC5vYmogYGlmIHRlc3QgLWYgJ3NyYy9wY3JlMnRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzcmMvcGNyZTJ0ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NyYy9wY3JlMnRlc3QuYyc7IGZpYAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX2F0KSQoYW1fX212KSBzcmMvJChERVBESVIpL3BjcmUydGVzdC1wY3JlMnRlc3QuVHBvIHNyYy8kKERFUERJUikvcGNyZTJ0ZXN0LXBjcmUydGVzdC5QbworQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9J3NyYy9wY3JlMnRlc3QuYycgb2JqZWN0PSdzcmMvcGNyZTJ0ZXN0LXBjcmUydGVzdC5vYmonIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQ0BhbV9fbm9kZXBAKSQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKHBjcmUydGVzdF9DRkxBR1MpICQoQ0ZMQUdTKSAtYyAtbyBzcmMvcGNyZTJ0ZXN0LXBjcmUydGVzdC5vYmogYGlmIHRlc3QgLWYgJ3NyYy9wY3JlMnRlc3QuYyc7IHRoZW4gJChDWUdQQVRIX1cpICdzcmMvcGNyZTJ0ZXN0LmMnOyBlbHNlICQoQ1lHUEFUSF9XKSAnJChzcmNkaXIpL3NyYy9wY3JlMnRlc3QuYyc7IGZpYAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCS1ybSAtcmYgc3JjLy5saWJzIHNyYy9fbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbCBjb25maWcubHQKK2luc3RhbGwtbWFuMTogJChkaXN0X21hbl9NQU5TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCUBsaXN0MT0nJzsgXAorCWxpc3QyPSckKGRpc3RfbWFuX01BTlMpJzsgXAorCXRlc3QgLW4gIiQobWFuMWRpcikiIFwKKwkgICYmIHRlc3QgLW4gImBlY2hvICQkbGlzdDEkJGxpc3QyYCIgXAorCSAgfHwgZXhpdCAwOyBcCisJZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKG1hbjFkaXIpJyI7IFwKKwkkKE1LRElSX1ApICIkKERFU1RESVIpJChtYW4xZGlyKSIgfHwgZXhpdCAxOyBcCisJeyBmb3IgaSBpbiAkJGxpc3QxOyBkbyBlY2hvICIkJGkiOyBkb25lOyAgXAorCWlmIHRlc3QgLW4gIiQkbGlzdDIiOyB0aGVuIFwKKwkgIGZvciBpIGluICQkbGlzdDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgXAorCSAgICB8IHNlZCAtbiAnL1wuMVthLXpdKiQkL3AnOyBcCisJZmk7IFwKKwl9IHwgd2hpbGUgcmVhZCBwOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAnbjtzLC4qLywsO3A7aDtzLC4qXC4sLDtzLF5bXjFdWzAtOWEtel0qJCQsMSw7eCcgXAorCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJyB8IFwKKwlzZWQgJ047TjtzLFxuLCAsZycgfCB7IFwKKwlsaXN0PTsgd2hpbGUgcmVhZCBmaWxlIGJhc2UgaW5zdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRiYXNlIiA9ICIkJGluc3QiOyB0aGVuIGxpc3Q9IiQkbGlzdCAkJGZpbGUiOyBlbHNlIFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRmaWxlJyAnJChERVNURElSKSQobWFuMWRpcikvJCRpbnN0JyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICIkJGZpbGUiICIkKERFU1RESVIpJChtYW4xZGlyKS8kJGluc3QiIHx8IGV4aXQgJCQ/OyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKG1hbjFkaXIpJyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKG1hbjFkaXIpIiB8fCBleGl0ICQkPzsgfTsgXAorCWRvbmU7IH0KKwordW5pbnN0YWxsLW1hbjE6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJzsgdGVzdCAtbiAiJChtYW4xZGlyKSIgfHwgZXhpdCAwOyBcCisJZmlsZXM9YHsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lOyBcCisJbDI9JyQoZGlzdF9tYW5fTUFOUyknOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAorCSAgc2VkIC1uICcvXC4xW2Etel0qJCQvcCc7IFwKKwl9IHwgc2VkIC1lICdzLC4qLywsO2g7cywuKlwuLCw7cyxeW14xXVswLTlhLXpdKiQkLDEsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCdgOyBcCisJZGlyPSckKERFU1RESVIpJChtYW4xZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK2luc3RhbGwtbWFuMzogJChkaXN0X21hbl9NQU5TKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCUBsaXN0MT0nJzsgXAorCWxpc3QyPSckKGRpc3RfbWFuX01BTlMpJzsgXAorCXRlc3QgLW4gIiQobWFuM2RpcikiIFwKKwkgICYmIHRlc3QgLW4gImBlY2hvICQkbGlzdDEkJGxpc3QyYCIgXAorCSAgfHwgZXhpdCAwOyBcCisJZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKG1hbjNkaXIpJyI7IFwKKwkkKE1LRElSX1ApICIkKERFU1RESVIpJChtYW4zZGlyKSIgfHwgZXhpdCAxOyBcCisJeyBmb3IgaSBpbiAkJGxpc3QxOyBkbyBlY2hvICIkJGkiOyBkb25lOyAgXAorCWlmIHRlc3QgLW4gIiQkbGlzdDIiOyB0aGVuIFwKKwkgIGZvciBpIGluICQkbGlzdDI7IGRvIGVjaG8gIiQkaSI7IGRvbmUgXAorCSAgICB8IHNlZCAtbiAnL1wuM1thLXpdKiQkL3AnOyBcCisJZmk7IFwKKwl9IHwgd2hpbGUgcmVhZCBwOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IGVjaG8gIiQkcCI7IFwKKwlkb25lIHwgXAorCXNlZCAtZSAnbjtzLC4qLywsO3A7aDtzLC4qXC4sLDtzLF5bXjNdWzAtOWEtel0qJCQsMyw7eCcgXAorCSAgICAgIC1lICdzLFwuWzAtOWEtel0qJCQsLDskKHRyYW5zZm9ybSk7RztzLFxuLC4sJyB8IFwKKwlzZWQgJ047TjtzLFxuLCAsZycgfCB7IFwKKwlsaXN0PTsgd2hpbGUgcmVhZCBmaWxlIGJhc2UgaW5zdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRiYXNlIiA9ICIkJGluc3QiOyB0aGVuIGxpc3Q9IiQkbGlzdCAkJGZpbGUiOyBlbHNlIFwKKwkgICAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAnJCRmaWxlJyAnJChERVNURElSKSQobWFuM2RpcikvJCRpbnN0JyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICIkJGZpbGUiICIkKERFU1RESVIpJChtYW4zZGlyKS8kJGluc3QiIHx8IGV4aXQgJCQ/OyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gIiQkaSI7IGRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIHRlc3QgLXogIiQkZmlsZXMiIHx8IHsgXAorCSAgICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKG1hbjNkaXIpJyI7IFwKKwkgICAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKG1hbjNkaXIpIiB8fCBleGl0ICQkPzsgfTsgXAorCWRvbmU7IH0KKwordW5pbnN0YWxsLW1hbjM6CisJQCQoTk9STUFMX1VOSU5TVEFMTCkKKwlAbGlzdD0nJzsgdGVzdCAtbiAiJChtYW4zZGlyKSIgfHwgZXhpdCAwOyBcCisJZmlsZXM9YHsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICIkJGkiOyBkb25lOyBcCisJbDI9JyQoZGlzdF9tYW5fTUFOUyknOyBmb3IgaSBpbiAkJGwyOyBkbyBlY2hvICIkJGkiOyBkb25lIHwgXAorCSAgc2VkIC1uICcvXC4zW2Etel0qJCQvcCc7IFwKKwl9IHwgc2VkIC1lICdzLC4qLywsO2g7cywuKlwuLCw7cyxeW14zXVswLTlhLXpdKiQkLDMsO3gnIFwKKwkgICAgICAtZSAncyxcLlswLTlhLXpdKiQkLCw7JCh0cmFuc2Zvcm0pO0c7cyxcbiwuLCdgOyBcCisJZGlyPSckKERFU1RESVIpJChtYW4zZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK2luc3RhbGwtZGlzdF9kb2NEQVRBOiAkKGRpc3RfZG9jX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQGxpc3Q9JyQoZGlzdF9kb2NfREFUQSknOyB0ZXN0IC1uICIkKGRvY2RpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoZG9jZGlyKSciOyBcCisJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChkb2NkaXIpIiB8fCBleGl0IDE7IFwKKwlmaTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgJyQoREVTVERJUikkKGRvY2RpciknIjsgXAorCSAgJChJTlNUQUxMX0RBVEEpICQkZmlsZXMgIiQoREVTVERJUikkKGRvY2RpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtZGlzdF9kb2NEQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQoZGlzdF9kb2NfREFUQSknOyB0ZXN0IC1uICIkKGRvY2RpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGRvY2RpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCitpbnN0YWxsLWRpc3RfaHRtbERBVEE6ICQoZGlzdF9odG1sX0RBVEEpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQGxpc3Q9JyQoZGlzdF9odG1sX0RBVEEpJzsgdGVzdCAtbiAiJChodG1sZGlyKSIgfHwgbGlzdD07IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChodG1sZGlyKSciOyBcCisJICAkKE1LRElSX1ApICIkKERFU1RESVIpJChodG1sZGlyKSIgfHwgZXhpdCAxOyBcCisJZmk7IFwKKwlmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgLWYgIiQkcCI7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCisJICBlY2hvICIkJGQkJHAiOyBcCisJZG9uZSB8ICQoYW1fX2Jhc2VfbGlzdCkgfCBcCisJd2hpbGUgcmVhZCBmaWxlczsgZG8gXAorCSAgZWNobyAiICQoSU5TVEFMTF9EQVRBKSAkJGZpbGVzICckKERFU1RESVIpJChodG1sZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQoaHRtbGRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtZGlzdF9odG1sREFUQToKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGRpc3RfaHRtbF9EQVRBKSc7IHRlc3QgLW4gIiQoaHRtbGRpcikiIHx8IGxpc3Q9OyBcCisJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKKwlkaXI9JyQoREVTVERJUikkKGh0bWxkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQoraW5zdGFsbC1wa2djb25maWdEQVRBOiAkKHBrZ2NvbmZpZ19EQVRBKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCUBsaXN0PSckKHBrZ2NvbmZpZ19EQVRBKSc7IHRlc3QgLW4gIiQocGtnY29uZmlnZGlyKSIgfHwgbGlzdD07IFwKKwlpZiB0ZXN0IC1uICIkJGxpc3QiOyB0aGVuIFwKKwkgIGVjaG8gIiAkKE1LRElSX1ApICckKERFU1RESVIpJChwa2djb25maWdkaXIpJyI7IFwKKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKHBrZ2NvbmZpZ2RpcikiIHx8IGV4aXQgMTsgXAorCWZpOyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAnJChERVNURElSKSQocGtnY29uZmlnZGlyKSciOyBcCisJICAkKElOU1RBTExfREFUQSkgJCRmaWxlcyAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1wa2djb25maWdEQVRBOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQocGtnY29uZmlnX0RBVEEpJzsgdGVzdCAtbiAiJChwa2djb25maWdkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChwa2djb25maWdkaXIpJzsgJChhbV9fdW5pbnN0YWxsX2ZpbGVzX2Zyb21fZGlyKQoraW5zdGFsbC1pbmNsdWRlSEVBREVSUzogJChpbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQGxpc3Q9JyQoaW5jbHVkZV9IRUFERVJTKSc7IHRlc3QgLW4gIiQoaW5jbHVkZWRpcikiIHx8IGxpc3Q9OyBcCisJaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCisJICBlY2hvICIgJChNS0RJUl9QKSAnJChERVNURElSKSQoaW5jbHVkZWRpciknIjsgXAorCSAgJChNS0RJUl9QKSAiJChERVNURElSKSQoaW5jbHVkZWRpcikiIHx8IGV4aXQgMTsgXAorCWZpOyBcCisJZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZWNobyAiJCRkJCRwIjsgXAorCWRvbmUgfCAkKGFtX19iYXNlX2xpc3QpIHwgXAorCXdoaWxlIHJlYWQgZmlsZXM7IGRvIFwKKwkgIGVjaG8gIiAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICckKERFU1RESVIpJChpbmNsdWRlZGlyKSciOyBcCisJICAkKElOU1RBTExfSEVBREVSKSAkJGZpbGVzICIkKERFU1RESVIpJChpbmNsdWRlZGlyKSIgfHwgZXhpdCAkJD87IFwKKwlkb25lCisKK3VuaW5zdGFsbC1pbmNsdWRlSEVBREVSUzoKKwlAJChOT1JNQUxfVU5JTlNUQUxMKQorCUBsaXN0PSckKGluY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChpbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKK2luc3RhbGwtbm9kaXN0X2luY2x1ZGVIRUFERVJTOiAkKG5vZGlzdF9pbmNsdWRlX0hFQURFUlMpCisJQCQoTk9STUFMX0lOU1RBTEwpCisJQGxpc3Q9JyQobm9kaXN0X2luY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWlmIHRlc3QgLW4gIiQkbGlzdCI7IHRoZW4gXAorCSAgZWNobyAiICQoTUtESVJfUCkgJyQoREVTVERJUikkKGluY2x1ZGVkaXIpJyI7IFwKKwkgICQoTUtESVJfUCkgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIiB8fCBleGl0IDE7IFwKKwlmaTsgXAorCWZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAtZiAiJCRwIjsgdGhlbiBkPTsgZWxzZSBkPSIkKHNyY2RpcikvIjsgZmk7IFwKKwkgIGVjaG8gIiQkZCQkcCI7IFwKKwlkb25lIHwgJChhbV9fYmFzZV9saXN0KSB8IFwKKwl3aGlsZSByZWFkIGZpbGVzOyBkbyBcCisJICBlY2hvICIgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAnJChERVNURElSKSQoaW5jbHVkZWRpciknIjsgXAorCSAgJChJTlNUQUxMX0hFQURFUikgJCRmaWxlcyAiJChERVNURElSKSQoaW5jbHVkZWRpcikiIHx8IGV4aXQgJCQ/OyBcCisJZG9uZQorCit1bmluc3RhbGwtbm9kaXN0X2luY2x1ZGVIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQobm9kaXN0X2luY2x1ZGVfSEVBREVSUyknOyB0ZXN0IC1uICIkKGluY2x1ZGVkaXIpIiB8fCBsaXN0PTsgXAorCWZpbGVzPWBmb3IgcCBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRwOyBkb25lIHwgc2VkIC1lICdzfF4uKi98fCdgOyBcCisJZGlyPSckKERFU1RESVIpJChpbmNsdWRlZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKKworSUQ6ICQoYW1fX3RhZ2dlZF9maWxlcykKKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IHRhZ3MtYW0KK1RBR1M6IHRhZ3MKKwordGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorCXNldCB4OyBcCisJaGVyZT1gcHdkYDsgXAorCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKKwlzaGlmdDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICBpZiB0ZXN0ICQkIyAtZ3QgMDsgdGhlbiBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAiJCRAIiAkJHVuaXF1ZTsgXAorCSAgZWxzZSBcCisJICAgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgICAkJHVuaXF1ZTsgXAorCSAgZmk7IFwKKwlmaQorY3RhZ3M6IGN0YWdzLWFtCisKK0NUQUdTOiBjdGFncworY3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKKwkkKGFtX19kZWZpbmVfdW5pcV90YWdnZWRfZmlsZXMpOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorY3Njb3BlOiBjc2NvcGUuZmlsZXMKKwl0ZXN0ICEgLXMgY3Njb3BlLmZpbGVzIFwKKwkgIHx8ICQoQ1NDT1BFKSAtYiAtcSAkKEFNX0NTQ09QRUZMQUdTKSAkKENTQ09QRUZMQUdTKSAtaSBjc2NvcGUuZmlsZXMgJChDU0NPUEVfQVJHUykKK2NsZWFuLWNzY29wZToKKwktcm0gLWYgY3Njb3BlLmZpbGVzCitjc2NvcGUuZmlsZXM6IGNsZWFuLWNzY29wZSBjc2NvcGVsaXN0Citjc2NvcGVsaXN0OiBjc2NvcGVsaXN0LWFtCisKK2NzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKKwlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAorCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAorCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAorCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKKwllc2FjOyBcCisJZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIFwKKwkgICAgZWNobyAiJChzdWJkaXIpLyQkaSI7IFwKKwkgIGVsc2UgXAorCSAgICBlY2hvICIkJHNkaXIvJCRpIjsgXAorCSAgZmk7IFwKKwlkb25lID4+ICQodG9wX2J1aWxkZGlyKS9jc2NvcGUuZmlsZXMKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKwktcm0gLWYgY3Njb3BlLm91dCBjc2NvcGUuaW4ub3V0IGNzY29wZS5wby5vdXQgY3Njb3BlLmZpbGVzCisKKyMgUmVjb3ZlciBmcm9tIGRlbGV0ZWQgJy50cnMnIGZpbGU7IHRoaXMgc2hvdWxkIGVuc3VyZSB0aGF0CisjICJybSAtZiBmb28ubG9nOyBtYWtlIGZvby50cnMiIHJlLXJ1biAnZm9vLnRlc3QnLCBhbmQgcmUtY3JlYXRlCisjIGJvdGggJ2Zvby5sb2cnIGFuZCAnZm9vLnRycycuICBCcmVhayB0aGUgcmVjaXBlIGluIHR3byBzdWJzaGVsbHMKKyMgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCAibWFrZSAtbiIuCisubG9nLnRyczoKKwlybSAtZiAkPCAkQAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQ8CisKKyMgTGVhZGluZyAnYW0tLWZub3JkJyBpcyB0aGVyZSB0byBlbnN1cmUgdGhlIGxpc3Qgb2YgdGFyZ2V0cyBkb2VzIG5vdAorIyBleHBhbmQgdG8gZW1wdHksIGFzIGNvdWxkIGhhcHBlbiBlLmcuIHdpdGggbWFrZSBjaGVjayBURVNUUz0nJy4KK2FtLS1mbm9yZCAkKFRFU1RfTE9HUykgJChURVNUX0xPR1M6LmxvZz0udHJzKTogJChhbV9fZm9yY2VfcmVjaGVjaykKK2FtLS1mb3JjZS1yZWNoZWNrOgorCUA6CisKKyQoVEVTVF9TVUlURV9MT0cpOiAkKFRFU1RfTE9HUykKKwlAJChhbV9fc2V0X1RFU1RTX2Jhc2VzKTsgXAorCWFtX19mX29rICgpIHsgdGVzdCAtZiAiJCQxIiAmJiB0ZXN0IC1yICIkJDEiOyB9OyBcCisJcmVkb19iYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gXAorCSAgICAgICAgICAgICAgYW1fX2Zfb2sgJCRpLnRycyAmJiBhbV9fZl9vayAkJGkubG9nIHx8IGVjaG8gJCRpOyBcCisJICAgICAgICAgICAgZG9uZWA7IFwKKwlpZiB0ZXN0IC1uICIkJHJlZG9fYmFzZXMiOyB0aGVuIFwKKwkgIHJlZG9fbG9ncz1gZm9yIGkgaW4gJCRyZWRvX2Jhc2VzOyBkbyBlY2hvICQkaS5sb2c7IGRvbmVgOyBcCisJICByZWRvX3Jlc3VsdHM9YGZvciBpIGluICQkcmVkb19iYXNlczsgZG8gZWNobyAkJGkudHJzOyBkb25lYDsgXAorCSAgaWYgJChhbV9fbWFrZV9kcnlydW4pOyB0aGVuIDo7IGVsc2UgXAorCSAgICBybSAtZiAkJHJlZG9fbG9ncyAmJiBybSAtZiAkJHJlZG9fcmVzdWx0cyB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZmk7IFwKKwlpZiB0ZXN0IC1uICIkJGFtX19yZW1ha2luZ19sb2dzIjsgdGhlbiBcCisJICBlY2hvICJmYXRhbDogbWFraW5nICQoVEVTVF9TVUlURV9MT0cpOiBwb3NzaWJsZSBpbmZpbml0ZSIgXAorCSAgICAgICAicmVjdXJzaW9uIGRldGVjdGVkIiA+JjI7IFwKKwllbGlmIHRlc3QgLW4gIiQkcmVkb19sb2dzIjsgdGhlbiBcCisJICBhbV9fcmVtYWtpbmdfbG9ncz15ZXMgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRyZWRvX2xvZ3M7IFwKKwlmaTsgXAorCWlmICQoYW1fX21ha2VfZHJ5cnVuKTsgdGhlbiA6OyBlbHNlIFwKKwkgIHN0PTA7ICBcCisJICBlcnJtc2c9ImZhdGFsOiBtYWtpbmcgJChURVNUX1NVSVRFX0xPRyk6IGZhaWxlZCB0byBjcmVhdGUiOyBcCisJICBmb3IgaSBpbiAkJHJlZG9fYmFzZXM7IGRvIFwKKwkgICAgdGVzdCAtZiAkJGkudHJzICYmIHRlc3QgLXIgJCRpLnRycyBcCisJICAgICAgfHwgeyBlY2hvICIkJGVycm1zZyAkJGkudHJzIiA+JjI7IHN0PTE7IH07IFwKKwkgICAgdGVzdCAtZiAkJGkubG9nICYmIHRlc3QgLXIgJCRpLmxvZyBcCisJICAgICAgfHwgeyBlY2hvICIkJGVycm1zZyAkJGkubG9nIiA+JjI7IHN0PTE7IH07IFwKKwkgIGRvbmU7IFwKKwkgIHRlc3QgJCRzdCAtZXEgMCB8fCBleGl0IDE7IFwKKwlmaQorCUAkKGFtX19zaF9lX3NldHVwKTsgJChhbV9fdHR5X2NvbG9ycyk7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwl3cz0nWyAJXSc7IFwKKwlyZXN1bHRzPWBmb3IgYiBpbiAkJGJhc2VzOyBkbyBlY2hvICQkYi50cnM7IGRvbmVgOyBcCisJdGVzdCAtbiAiJCRyZXN1bHRzIiB8fCByZXN1bHRzPS9kZXYvbnVsbDsgXAorCWFsbD1gICBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6IiAgICAgICAgICAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJcGFzcz1gIGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlBBU1MiICAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwlmYWlsPWAgZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqRkFJTCIgICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCXNraXA9YCBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypTS0lQIiAgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJeGZhaWw9YGdyZXAgIl4kJHdzKjp0ZXN0LXJlc3VsdDokJHdzKlhGQUlMIiAkJHJlc3VsdHMgfCB3YyAtbGA7IFwKKwl4cGFzcz1gZ3JlcCAiXiQkd3MqOnRlc3QtcmVzdWx0OiQkd3MqWFBBU1MiICQkcmVzdWx0cyB8IHdjIC1sYDsgXAorCWVycm9yPWBncmVwICJeJCR3cyo6dGVzdC1yZXN1bHQ6JCR3cypFUlJPUiIgJCRyZXN1bHRzIHwgd2MgLWxgOyBcCisJaWYgdGVzdCBgZXhwciAkJGZhaWwgKyAkJHhwYXNzICsgJCRlcnJvcmAgLWVxIDA7IHRoZW4gXAorCSAgc3VjY2Vzcz10cnVlOyBcCisJZWxzZSBcCisJICBzdWNjZXNzPWZhbHNlOyBcCisJZmk7IFwKKwlicj0nPT09PT09PT09PT09PT09PT09PSc7IGJyPSQkYnIkJGJyJCRiciQkYnI7IFwKKwlyZXN1bHRfY291bnQgKCkgXAorCXsgXAorCSAgICBpZiB0ZXN0IHgiJCQxIiA9IHgiLS1tYXliZS1jb2xvciI7IHRoZW4gXAorCSAgICAgIG1heWJlX2NvbG9yaXplPXllczsgXAorCSAgICBlbGlmIHRlc3QgeCIkJDEiID0geCItLW5vLWNvbG9yIjsgdGhlbiBcCisJICAgICAgbWF5YmVfY29sb3JpemU9bm87IFwKKwkgICAgZWxzZSBcCisJICAgICAgZWNobyAiJEA6IGludmFsaWQgJ3Jlc3VsdF9jb3VudCcgdXNhZ2UiID4mMjsgZXhpdCA0OyBcCisJICAgIGZpOyBcCisJICAgIHNoaWZ0OyBcCisJICAgIGRlc2M9JCQxIGNvdW50PSQkMjsgXAorCSAgICBpZiB0ZXN0ICQkbWF5YmVfY29sb3JpemUgPSB5ZXMgJiYgdGVzdCAkJGNvdW50IC1ndCAwOyB0aGVuIFwKKwkgICAgICBjb2xvcl9zdGFydD0kJDMgY29sb3JfZW5kPSQkc3RkOyBcCisJICAgIGVsc2UgXAorCSAgICAgIGNvbG9yX3N0YXJ0PSBjb2xvcl9lbmQ9OyBcCisJICAgIGZpOyBcCisJICAgIGVjaG8gIiQke2NvbG9yX3N0YXJ0fSMgJCRkZXNjICQkY291bnQkJHtjb2xvcl9lbmR9IjsgXAorCX07IFwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAoKSBcCisJeyBcCisJICByZXN1bHRfY291bnQgJCQxICJUT1RBTDoiICQkYWxsICAgIiQkYnJnIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiUEFTUzogIiAkJHBhc3MgICIkJGdybiI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlNLSVA6ICIgJCRza2lwICAiJCRibHUiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJYRkFJTDoiICQkeGZhaWwgIiQkbGduIjsgXAorCSAgcmVzdWx0X2NvdW50ICQkMSAiRkFJTDogIiAkJGZhaWwgICIkJHJlZCI7IFwKKwkgIHJlc3VsdF9jb3VudCAkJDEgIlhQQVNTOiIgJCR4cGFzcyAiJCRyZWQiOyBcCisJICByZXN1bHRfY291bnQgJCQxICJFUlJPUjoiICQkZXJyb3IgIiQkbWduIjsgXAorCX07IFwKKwl7CQkJCQkJCQlcCisJICBlY2hvICIkKFBBQ0tBR0VfU1RSSU5HKTogJChzdWJkaXIpLyQoVEVTVF9TVUlURV9MT0cpIiB8CVwKKwkgICAgJChhbV9fcnN0X3RpdGxlKTsJCQkJCQlcCisJICBjcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW5vLWNvbG9yOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZWNobyAiLi4gY29udGVudHM6OiA6ZGVwdGg6IDIiOwkJCQlcCisJICBlY2hvOwkJCQkJCQkJXAorCSAgZm9yIGIgaW4gJCRiYXNlczsgZG8gZWNobyAkJGI7IGRvbmUJCQkJXAorCSAgICB8ICQoYW1fX2NyZWF0ZV9nbG9iYWxfbG9nKTsJCQkJCVwKKwl9ID4kKFRFU1RfU1VJVEVfTE9HKS50bXAgfHwgZXhpdCAxOwkJCQlcCisJbXYgJChURVNUX1NVSVRFX0xPRykudG1wICQoVEVTVF9TVUlURV9MT0cpOwkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4JCQkJCQlcCisJICBjb2w9IiQkZ3JuIjsJCQkJCQkJXAorCSBlbHNlCQkJCQkJCQlcCisJICBjb2w9IiQkcmVkIjsJCQkJCQkJXAorCSAgdGVzdCB4IiQkVkVSQk9TRSIgPSB4IHx8IGNhdCAkKFRFU1RfU1VJVEVfTE9HKTsJCVwKKwlmaTsJCQkJCQkJCVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwllY2hvICIkJHtjb2x9VGVzdHN1aXRlIHN1bW1hcnkgZm9yICQoUEFDS0FHRV9TVFJJTkcpJCR7c3RkfSI7CVwKKwllY2hvICIkJHtjb2x9JCRiciQke3N0ZH0iOyAJCQkJCVwKKwljcmVhdGVfdGVzdHN1aXRlX3JlcG9ydCAtLW1heWJlLWNvbG9yOwkJCQlcCisJZWNobyAiJCRjb2wkJGJyJCRzdGQiOwkJCQkJCVwKKwlpZiAkJHN1Y2Nlc3M7IHRoZW4gOjsgZWxzZQkJCQkJXAorCSAgZWNobyAiJCR7Y29sfVNlZSAkKHN1YmRpcikvJChURVNUX1NVSVRFX0xPRykkJHtzdGR9IjsJCVwKKwkgIGlmIHRlc3QgLW4gIiQoUEFDS0FHRV9CVUdSRVBPUlQpIjsgdGhlbgkJCVwKKwkgICAgZWNobyAiJCR7Y29sfVBsZWFzZSByZXBvcnQgdG8gJChQQUNLQUdFX0JVR1JFUE9SVCkkJHtzdGR9IjsJXAorCSAgZmk7CQkJCQkJCQlcCisJICBlY2hvICIkJGNvbCQkYnIkJHN0ZCI7CQkJCQlcCisJZmk7CQkJCQkJCQlcCisJJCRzdWNjZXNzIHx8IGV4aXQgMQorCitjaGVjay1URVNUUzoKKwlAbGlzdD0nJChSRUNIRUNLX0xPR1MpJzsgICAgICAgICAgIHRlc3QgLXogIiQkbGlzdCIgfHwgcm0gLWYgJCRsaXN0CisJQGxpc3Q9JyQoUkVDSEVDS19MT0dTOi5sb2c9LnRycyknOyB0ZXN0IC16ICIkJGxpc3QiIHx8IHJtIC1mICQkbGlzdAorCUB0ZXN0IC16ICIkKFRFU1RfU1VJVEVfTE9HKSIgfHwgcm0gLWYgJChURVNUX1NVSVRFX0xPRykKKwlAc2V0ICtlOyAkKGFtX19zZXRfVEVTVFNfYmFzZXMpOyBcCisJbG9nX2xpc3Q9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpLmxvZzsgZG9uZWA7IFwKKwl0cnNfbGlzdD1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGkudHJzOyBkb25lYDsgXAorCWxvZ19saXN0PWBlY2hvICQkbG9nX2xpc3RgOyB0cnNfbGlzdD1gZWNobyAkJHRyc19saXN0YDsgXAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoVEVTVF9TVUlURV9MT0cpIFRFU1RfTE9HUz0iJCRsb2dfbGlzdCI7IFwKKwlleGl0ICQkPzsKK3JlY2hlY2s6IGFsbCAkKGNoZWNrX1NDUklQVFMpCisJQHRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQorCUBzZXQgK2U7ICQoYW1fX3NldF9URVNUU19iYXNlcyk7IFwKKwliYXNlcz1gZm9yIGkgaW4gJCRiYXNlczsgZG8gZWNobyAkJGk7IGRvbmUgXAorCSAgICAgICAgIHwgJChhbV9fbGlzdF9yZWNoZWNrX3Rlc3RzKWAgfHwgZXhpdCAxOyBcCisJbG9nX2xpc3Q9YGZvciBpIGluICQkYmFzZXM7IGRvIGVjaG8gJCRpLmxvZzsgZG9uZWA7IFwKKwlsb2dfbGlzdD1gZWNobyAkJGxvZ19saXN0YDsgXAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQoVEVTVF9TVUlURV9MT0cpIFwKKwkgICAgICAgIGFtX19mb3JjZV9yZWNoZWNrPWFtLS1mb3JjZS1yZWNoZWNrIFwKKwkgICAgICAgIFRFU1RfTE9HUz0iJCRsb2dfbGlzdCI7IFwKKwlleGl0ICQkPworcGNyZTJfaml0X3Rlc3QubG9nOiBwY3JlMl9qaXRfdGVzdCQoRVhFRVhUKQorCUBwPSdwY3JlMl9qaXRfdGVzdCQoRVhFRVhUKSc7IFwKKwliPSdwY3JlMl9qaXRfdGVzdCc7IFwKKwkkKGFtX19jaGVja19wcmUpICQoTE9HX0RSSVZFUikgLS10ZXN0LW5hbWUgIiQkZiIgXAorCS0tbG9nLWZpbGUgJCRiLmxvZyAtLXRycy1maWxlICQkYi50cnMgXAorCSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fTE9HX0RSSVZFUl9GTEFHUykgJChMT0dfRFJJVkVSX0ZMQUdTKSAtLSAkKExPR19DT01QSUxFKSBcCisJIiQkdHN0IiAkKEFNX1RFU1RTX0ZEX1JFRElSRUNUKQorUnVuVGVzdC5sb2c6IFJ1blRlc3QKKwlAcD0nUnVuVGVzdCc7IFwKKwliPSdSdW5UZXN0JzsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKKwkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCitSdW5HcmVwVGVzdC5sb2c6IFJ1bkdyZXBUZXN0CisJQHA9J1J1bkdyZXBUZXN0JzsgXAorCWI9J1J1bkdyZXBUZXN0JzsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChMT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCisJLS1sb2ctZmlsZSAkJGIubG9nIC0tdHJzLWZpbGUgJCRiLnRycyBcCisJJChhbV9fY29tbW9uX2RyaXZlcl9mbGFncykgJChBTV9MT0dfRFJJVkVSX0ZMQUdTKSAkKExPR19EUklWRVJfRkxBR1MpIC0tICQoTE9HX0NPTVBJTEUpIFwKKwkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCisudGVzdC5sb2c6CisJQHA9JyQ8JzsgXAorCSQoYW1fX3NldF9iKTsgXAorCSQoYW1fX2NoZWNrX3ByZSkgJChURVNUX0xPR19EUklWRVIpIC0tdGVzdC1uYW1lICIkJGYiIFwKKwktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKKwkkKGFtX19jb21tb25fZHJpdmVyX2ZsYWdzKSAkKEFNX1RFU1RfTE9HX0RSSVZFUl9GTEFHUykgJChURVNUX0xPR19EUklWRVJfRkxBR1MpIC0tICQoVEVTVF9MT0dfQ09NUElMRSkgXAorCSIkJHRzdCIgJChBTV9URVNUU19GRF9SRURJUkVDVCkKK0BhbV9fRVhFRVhUX1RSVUVALnRlc3QkKEVYRUVYVCkubG9nOgorQGFtX19FWEVFWFRfVFJVRUAJQHA9JyQ8JzsgXAorQGFtX19FWEVFWFRfVFJVRUAJJChhbV9fc2V0X2IpOyBcCitAYW1fX0VYRUVYVF9UUlVFQAkkKGFtX19jaGVja19wcmUpICQoVEVTVF9MT0dfRFJJVkVSKSAtLXRlc3QtbmFtZSAiJCRmIiBcCitAYW1fX0VYRUVYVF9UUlVFQAktLWxvZy1maWxlICQkYi5sb2cgLS10cnMtZmlsZSAkJGIudHJzIFwKK0BhbV9fRVhFRVhUX1RSVUVACSQoYW1fX2NvbW1vbl9kcml2ZXJfZmxhZ3MpICQoQU1fVEVTVF9MT0dfRFJJVkVSX0ZMQUdTKSAkKFRFU1RfTE9HX0RSSVZFUl9GTEFHUykgLS0gJChURVNUX0xPR19DT01QSUxFKSBcCitAYW1fX0VYRUVYVF9UUlVFQAkiJCR0c3QiICQoQU1fVEVTVFNfRkRfUkVESVJFQ1QpCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCXRlc3QgLWQgIiQoZGlzdGRpcikiIHx8IG1rZGlyICIkKGRpc3RkaXIpIgorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAncy9bXS5bXiQkXFwqXS9cXFxcJi9nJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgXAorCSAgZGlzdF9maWxlcz1gZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBlY2hvICQkZmlsZTsgZG9uZSB8IFwKKwkgIHNlZCAtZSAic3xeJCRzcmNkaXJzdHJpcC98fDt0IiBcCisJICAgICAgLWUgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98O3QiYDsgXAorCWNhc2UgJCRkaXN0X2ZpbGVzIGluIFwKKwkgICovKikgJChNS0RJUl9QKSBgZWNobyAiJCRkaXN0X2ZpbGVzIiB8IFwKKwkJCSAgIHNlZCAnL1wvLyFkO3N8XnwkKGRpc3RkaXIpL3w7cywvW14vXSokJCwsJyB8IFwKKwkJCSAgIHNvcnQgLXVgIDs7IFwKKwllc2FjOyBcCisJZm9yIGZpbGUgaW4gJCRkaXN0X2ZpbGVzOyBkbyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBkaXI9YGVjaG8gIi8kJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgICBpZiB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkZmlsZSI7IHRoZW4gXAorCSAgICAgIGZpbmQgIiQoZGlzdGRpcikvJCRmaWxlIiAtdHlwZSBkICEgLXBlcm0gLTcwMCAtZXhlYyBjaG1vZCB1K3J3eCB7fSBcOzsgXAorCSAgICBmaTsgXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtZnBSICQoc3JjZGlyKS8kJGZpbGUgIiQoZGlzdGRpcikkJGRpciIgfHwgZXhpdCAxOyBcCisJICAgICAgZmluZCAiJChkaXN0ZGlyKS8kJGZpbGUiIC10eXBlIGQgISAtcGVybSAtNzAwIC1leGVjIGNobW9kIHUrcnd4IHt9IFw7OyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1mcFIgJCRkLyQkZmlsZSAiJChkaXN0ZGlyKSQkZGlyIiB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICIkKGRpc3RkaXIpLyQkZmlsZSIgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCS10ZXN0IC1uICIkKGFtX19za2lwX21vZGVfZml4KSIgXAorCXx8IGZpbmQgIiQoZGlzdGRpcikiIC10eXBlIGQgISAtcGVybSAtNzU1IFwKKwkJLWV4ZWMgY2htb2QgdStyd3gsZ28rcngge30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtbGlua3MgMSAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQwMCAtZXhlYyBjaG1vZCBhK3Ige30gXDsgLW8gXAorCSAgISAtdHlwZSBkICEgLXBlcm0gLTQ0NCAtZXhlYyAkKGluc3RhbGxfc2gpIC1jIC1tIGErciB7fSB7fSBcOyBcCisJfHwgY2htb2QgLVIgYStyICIkKGRpc3RkaXIpIgorZGlzdC1nemlwOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS50YXIuZ3oKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorZGlzdC1iemlwMjogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBCWklQMj0kJHtCWklQMi0tOX0gYnppcDIgLWMgPiQoZGlzdGRpcikudGFyLmJ6MgorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtbHppcDogZGlzdGRpcgorCXRhcmRpcj0kKGRpc3RkaXIpICYmICQoYW1fX3RhcikgfCBsemlwIC1jICQke0xaSVBfT1BULS05fSA+JChkaXN0ZGlyKS50YXIubHoKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LXh6OiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IFhaX09QVD0kJHtYWl9PUFQtLWV9IHh6IC1jID4kKGRpc3RkaXIpLnRhci54egorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtdGFyWjogZGlzdGRpcgorCUBlY2hvIFdBUk5JTkc6ICJTdXBwb3J0IGZvciBkaXN0cmlidXRpb24gYXJjaGl2ZXMgY29tcHJlc3NlZCB3aXRoIiBcCisJCSAgICAgICAibGVnYWN5IHByb2dyYW0gJ2NvbXByZXNzJyBpcyBkZXByZWNhdGVkLiIgPiYyCisJQGVjaG8gV0FSTklORzogIkl0IHdpbGwgYmUgcmVtb3ZlZCBhbHRvZ2V0aGVyIGluIEF1dG9tYWtlIDIuMCIgPiYyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGNvbXByZXNzIC1jID4kKGRpc3RkaXIpLnRhci5aCisJJChhbV9fcG9zdF9yZW1vdmVfZGlzdGRpcikKKworZGlzdC1zaGFyOiBkaXN0ZGlyCisJQGVjaG8gV0FSTklORzogIlN1cHBvcnQgZm9yIHNoYXIgZGlzdHJpYnV0aW9uIGFyY2hpdmVzIGlzIiBcCisJICAgICAgICAgICAgICAgImRlcHJlY2F0ZWQuIiA+JjIKKwlAZWNobyBXQVJOSU5HOiAiSXQgd2lsbCBiZSByZW1vdmVkIGFsdG9nZXRoZXIgaW4gQXV0b21ha2UgMi4wIiA+JjIKKwlzaGFyICQoZGlzdGRpcikgfCBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWMgPiQoZGlzdGRpcikuc2hhci5negorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCitkaXN0LXppcDogZGlzdGRpcgorCS1ybSAtZiAkKGRpc3RkaXIpLnppcAorCXppcCAtcnEgJChkaXN0ZGlyKS56aXAgJChkaXN0ZGlyKQorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QgZGlzdC1hbGw6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChESVNUX1RBUkdFVFMpIGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyPSdAOicKKwkkKGFtX19wb3N0X3JlbW92ZV9kaXN0ZGlyKQorCisjIFRoaXMgdGFyZ2V0IHVudGFycyB0aGUgZGlzdCBmaWxlIGFuZCB0cmllcyBhIFZQQVRIIGNvbmZpZ3VyYXRpb24uICBUaGVuCisjIGl0IGd1YXJhbnRlZXMgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGlzIHNlbGYtY29udGFpbmVkIGJ5IG1ha2luZyBhbm90aGVyCisjIHRhcmZpbGUuCitkaXN0Y2hlY2s6IGRpc3QKKwljYXNlICckKERJU1RfQVJDSElWRVMpJyBpbiBcCisJKi50YXIuZ3oqKSBcCisJICBHWklQPSQoR1pJUF9FTlYpIGd6aXAgLWRjICQoZGlzdGRpcikudGFyLmd6IHwgJChhbV9fdW50YXIpIDs7XAorCSoudGFyLmJ6MiopIFwKKwkgIGJ6aXAyIC1kYyAkKGRpc3RkaXIpLnRhci5iejIgfCAkKGFtX191bnRhcikgOztcCisJKi50YXIubHoqKSBcCisJICBsemlwIC1kYyAkKGRpc3RkaXIpLnRhci5seiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci54eiopIFwKKwkgIHh6IC1kYyAkKGRpc3RkaXIpLnRhci54eiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5aKikgXAorCSAgdW5jb21wcmVzcyAtYyAkKGRpc3RkaXIpLnRhci5aIHwgJChhbV9fdW50YXIpIDs7XAorCSouc2hhci5neiopIFwKKwkgIEdaSVA9JChHWklQX0VOVikgZ3ppcCAtZGMgJChkaXN0ZGlyKS5zaGFyLmd6IHwgdW5zaGFyIDs7XAorCSouemlwKikgXAorCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCisJZXNhYworCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpCisJY2htb2QgdSt3ICQoZGlzdGRpcikKKwlta2RpciAkKGRpc3RkaXIpL19idWlsZCAkKGRpc3RkaXIpL19idWlsZC9zdWIgJChkaXN0ZGlyKS9faW5zdAorCWNobW9kIGEtdyAkKGRpc3RkaXIpCisJdGVzdCAtZCAkKGRpc3RkaXIpL19idWlsZCB8fCBleGl0IDA7IFwKKwlkY19pbnN0YWxsX2Jhc2U9YCQoYW1fX2NkKSAkKGRpc3RkaXIpL19pbnN0ICYmIHB3ZCB8IHNlZCAtZSAncyxeW146XFwvXTpbXFwvXSwvLCdgIFwKKwkgICYmIGRjX2Rlc3RkaXI9IiQke1RNUERJUi0vdG1wfS9hbS1kYy0kJCQkLyIgXAorCSAgJiYgYW1fX2N3ZD1gcHdkYCBcCisJICAmJiAkKGFtX19jZCkgJChkaXN0ZGlyKS9fYnVpbGQvc3ViIFwKKwkgICYmIC4uLy4uL2NvbmZpZ3VyZSBcCisJICAgICQoQU1fRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAorCSAgICAkKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpIFwKKwkgICAgLS1zcmNkaXI9Li4vLi4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkdmkgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgY2hlY2sgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbCBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsY2hlY2sgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdW5pbnN0YWxsIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAgICAgICBkaXN0dW5pbnN0YWxsY2hlY2sgXAorCSAgJiYgY2htb2QgLVIgYS13ICIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgJiYgKHsgXAorCSAgICAgICAoY2QgLi4vLi4gJiYgdW1hc2sgMDc3ICYmIG1rZGlyICIkJGRjX2Rlc3RkaXIiKSBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgaW5zdGFsbCBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgdW5pbnN0YWxsIFwKKwkgICAgICAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgREVTVERJUj0iJCRkY19kZXN0ZGlyIiBcCisJICAgICAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrX2Rpcj0iJCRkY19kZXN0ZGlyIiBkaXN0dW5pbnN0YWxsY2hlY2s7IFwKKwkgICAgICB9IHx8IHsgcm0gLXJmICIkJGRjX2Rlc3RkaXIiOyBleGl0IDE7IH0pIFwKKwkgICYmIHJtIC1yZiAiJCRkY19kZXN0ZGlyIiBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0IFwKKwkgICYmIHJtIC1yZiAkKERJU1RfQVJDSElWRVMpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGRpc3RjbGVhbmNoZWNrIFwKKwkgICYmIGNkICIkJGFtX19jd2QiIFwKKwkgIHx8IGV4aXQgMQorCSQoYW1fX3Bvc3RfcmVtb3ZlX2Rpc3RkaXIpCisJQChlY2hvICIkKGRpc3RkaXIpIGFyY2hpdmVzIHJlYWR5IGZvciBkaXN0cmlidXRpb246ICI7IFwKKwkgIGxpc3Q9JyQoRElTVF9BUkNISVZFUyknOyBmb3IgaSBpbiAkJGxpc3Q7IGRvIGVjaG8gJCRpOyBkb25lKSB8IFwKKwkgIHNlZCAtZSAxaCAtZSAxcy8uLz0vZyAtZSAxcCAtZSAxeCAtZSAnJCRwJyAtZSAnJCR4JworZGlzdHVuaW5zdGFsbGNoZWNrOgorCUB0ZXN0IC1uICckKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyB8fCB7IFwKKwkgIGVjaG8gJ0VSUk9SOiB0cnlpbmcgdG8gcnVuICRAIHdpdGggYW4gZW1wdHknIFwKKwkgICAgICAgJyQkKGRpc3R1bmluc3RhbGxjaGVja19kaXIpJyA+JjI7IFwKKwkgIGV4aXQgMTsgXAorCX07IFwKKwkkKGFtX19jZCkgJyQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknIHx8IHsgXAorCSAgZWNobyAnRVJST1I6IGNhbm5vdCBjaGRpciBpbnRvICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpciknID4mMjsgXAorCSAgZXhpdCAxOyBcCisJfTsgXAorCXRlc3QgYCQoYW1fX2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1lcSAwIFwKKwkgICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGFmdGVyIHVuaW5zdGFsbDoiIDsgXAorCSAgICAgICAgaWYgdGVzdCAtbiAiJChERVNURElSKSI7IHRoZW4gXAorCSAgICAgICAgICBlY2hvICIgIChjaGVjayBERVNURElSIHN1cHBvcnQpIjsgXAorCSAgICAgICAgZmkgOyBcCisJICAgICAgICAkKGRpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICAgZXhpdCAxOyB9ID4mMgorZGlzdGNsZWFuY2hlY2s6IGRpc3RjbGVhbgorCUBpZiB0ZXN0ICckKHNyY2RpciknID0gLiA7IHRoZW4gXAorCSAgZWNobyAiRVJST1I6IGRpc3RjbGVhbmNoZWNrIGNhbiBvbmx5IHJ1biBmcm9tIGEgVlBBVEggYnVpbGQiIDsgXAorCSAgZXhpdCAxIDsgXAorCWZpCisJQHRlc3QgYCQoZGlzdGNsZWFuY2hlY2tfbGlzdGZpbGVzKSB8IHdjIC1sYCAtZXEgMCBcCisJICB8fCB7IGVjaG8gIkVSUk9SOiBmaWxlcyBsZWZ0IGluIGJ1aWxkIGRpcmVjdG9yeSBhZnRlciBkaXN0Y2xlYW46IiA7IFwKKwkgICAgICAgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIDsgXAorCSAgICAgICBleGl0IDE7IH0gPiYyCitjaGVjay1hbTogYWxsLWFtCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJChjaGVja19TQ1JJUFRTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLVRFU1RTCitjaGVjazogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoTFRMSUJSQVJJRVMpICQoUFJPR1JBTVMpICQoU0NSSVBUUykgJChNQU5TKSAkKERBVEEpIFwKKwkJJChIRUFERVJTKQoraW5zdGFsbC1iaW5QUk9HUkFNUzogaW5zdGFsbC1saWJMVExJQlJBUklFUworCitpbnN0YWxsZGlyczoKKwlmb3IgZGlyIGluICIkKERFU1RESVIpJChsaWJkaXIpIiAiJChERVNURElSKSQoYmluZGlyKSIgIiQoREVTVERJUikkKGJpbmRpcikiICIkKERFU1RESVIpJChtYW4xZGlyKSIgIiQoREVTVERJUikkKG1hbjNkaXIpIiAiJChERVNURElSKSQoZG9jZGlyKSIgIiQoREVTVERJUikkKGh0bWxkaXIpIiAiJChERVNURElSKSQocGtnY29uZmlnZGlyKSIgIiQoREVTVERJUikkKGluY2x1ZGVkaXIpIiAiJChERVNURElSKSQoaW5jbHVkZWRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChNS0RJUl9QKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogJChCVUlMVF9TT1VSQ0VTKQorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJaWYgdGVzdCAteiAnJChTVFJJUCknOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAgIGluc3RhbGw7IFwKKwllbHNlIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICAgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgICAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyIgaW5zdGFsbDsgXAorCWZpCittb3N0bHljbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKFRFU1RfTE9HUykiIHx8IHJtIC1mICQoVEVTVF9MT0dTKQorCS10ZXN0IC16ICIkKFRFU1RfTE9HUzoubG9nPS50cnMpIiB8fCBybSAtZiAkKFRFU1RfTE9HUzoubG9nPS50cnMpCisJLXRlc3QgLXogIiQoVEVTVF9TVUlURV9MT0cpIiB8fCBybSAtZiAkKFRFU1RfU1VJVEVfTE9HKQorCitjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENMRUFORklMRVMpIiB8fCBybSAtZiAkKENMRUFORklMRVMpCisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCS10ZXN0IC4gPSAiJChzcmNkaXIpIiB8fCB0ZXN0IC16ICIkKENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTKQorCS1ybSAtZiBzcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorCS1ybSAtZiBzcmMvJChhbV9fZGlyc3RhbXApCisJLXRlc3QgLXogIiQoRElTVENMRUFORklMRVMpIiB8fCBybSAtZiAkKERJU1RDTEVBTkZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKKwktdGVzdCAteiAiJChCVUlMVF9TT1VSQ0VTKSIgfHwgcm0gLWYgJChCVUlMVF9TT1VSQ0VTKQorCS10ZXN0IC16ICIkKE1BSU5UQUlORVJDTEVBTkZJTEVTKSIgfHwgcm0gLWYgJChNQUlOVEFJTkVSQ0xFQU5GSUxFUykKK0BXSVRIX0dDT1ZfRkFMU0VAY2xlYW4tbG9jYWw6CitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWJpblBST0dSQU1TIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGliTFRMSUJSQVJJRVMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbG9jYWwgY2xlYW4tbm9pbnN0UFJPR1JBTVMgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKKwktcm0gLXJmIHNyYy8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLWxvY2FsIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitodG1sLWFtOgorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbTogaW5zdGFsbC1kaXN0X2RvY0RBVEEgaW5zdGFsbC1kaXN0X2h0bWxEQVRBIFwKKwlpbnN0YWxsLWluY2x1ZGVIRUFERVJTIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLW5vZGlzdF9pbmNsdWRlSEVBREVSUyBpbnN0YWxsLXBrZ2NvbmZpZ0RBVEEKKworaW5zdGFsbC1kdmk6IGluc3RhbGwtZHZpLWFtCisKK2luc3RhbGwtZHZpLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06IGluc3RhbGwtYmluUFJPR1JBTVMgaW5zdGFsbC1iaW5TQ1JJUFRTIFwKKwlpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaHRtbDogaW5zdGFsbC1odG1sLWFtCisKK2luc3RhbGwtaHRtbC1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1pbmZvLWFtOgorCitpbnN0YWxsLW1hbjogaW5zdGFsbC1tYW4xIGluc3RhbGwtbWFuMworCitpbnN0YWxsLXBkZjogaW5zdGFsbC1wZGYtYW0KKworaW5zdGFsbC1wZGYtYW06CisKK2luc3RhbGwtcHM6IGluc3RhbGwtcHMtYW0KKworaW5zdGFsbC1wcy1hbToKKworaW5zdGFsbGNoZWNrLWFtOgorCittYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLWFtCisJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCisJLXJtIC1yZiAkKHRvcF9zcmNkaXIpL2F1dG9tNHRlLmNhY2hlCisJLXJtIC1yZiBzcmMvJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1iaW5QUk9HUkFNUyB1bmluc3RhbGwtYmluU0NSSVBUUyBcCisJdW5pbnN0YWxsLWRpc3RfZG9jREFUQSB1bmluc3RhbGwtZGlzdF9odG1sREFUQSBcCisJdW5pbnN0YWxsLWluY2x1ZGVIRUFERVJTIHVuaW5zdGFsbC1saWJMVExJQlJBUklFUyBcCisJdW5pbnN0YWxsLW1hbiB1bmluc3RhbGwtbm9kaXN0X2luY2x1ZGVIRUFERVJTIFwKKwl1bmluc3RhbGwtcGtnY29uZmlnREFUQQorCit1bmluc3RhbGwtbWFuOiB1bmluc3RhbGwtbWFuMSB1bmluc3RhbGwtbWFuMworCisuTUFLRTogYWxsIGNoZWNrIGNoZWNrLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgVEFHUyBhbGwgYWxsLWFtIGFtLS1yZWZyZXNoIGNoZWNrIGNoZWNrLVRFU1RTIFwKKwljaGVjay1hbSBjbGVhbiBjbGVhbi1iaW5QUk9HUkFNUyBjbGVhbi1jc2NvcGUgY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBjbGVhbi1sb2NhbCBcCisJY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3Njb3BlIGNzY29wZWxpc3QtYW0gY3RhZ3MgY3RhZ3MtYW0gZGlzdCBcCisJZGlzdC1hbGwgZGlzdC1iemlwMiBkaXN0LWd6aXAgZGlzdC1semlwIGRpc3Qtc2hhciBkaXN0LXRhclogXAorCWRpc3QteHogZGlzdC16aXAgZGlzdGNoZWNrIGRpc3RjbGVhbiBkaXN0Y2xlYW4tY29tcGlsZSBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWhkciBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLWxvY2FsIGRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgXAorCWRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWJpblBST0dSQU1TIGluc3RhbGwtYmluU0NSSVBUUyBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWRpc3RfZG9jREFUQSBcCisJaW5zdGFsbC1kaXN0X2h0bWxEQVRBIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAorCWluc3RhbGwtaW5jbHVkZUhFQURFUlMgaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCisJaW5zdGFsbC1saWJMVExJQlJBUklFUyBpbnN0YWxsLW1hbiBpbnN0YWxsLW1hbjEgaW5zdGFsbC1tYW4zIFwKKwlpbnN0YWxsLW5vZGlzdF9pbmNsdWRlSEVBREVSUyBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBcCisJaW5zdGFsbC1wa2djb25maWdEQVRBIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIFwKKwlpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJcmVjaGVjayB0YWdzIHRhZ3MtYW0gdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWJpblBST0dSQU1TIHVuaW5zdGFsbC1iaW5TQ1JJUFRTIFwKKwl1bmluc3RhbGwtZGlzdF9kb2NEQVRBIHVuaW5zdGFsbC1kaXN0X2h0bWxEQVRBIFwKKwl1bmluc3RhbGwtaW5jbHVkZUhFQURFUlMgdW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTIFwKKwl1bmluc3RhbGwtbWFuIHVuaW5zdGFsbC1tYW4xIHVuaW5zdGFsbC1tYW4zIFwKKwl1bmluc3RhbGwtbm9kaXN0X2luY2x1ZGVIRUFERVJTIHVuaW5zdGFsbC1wa2djb25maWdEQVRBCisKKy5QUkVDSU9VUzogTWFrZWZpbGUKKworCisjIFRoZSBvbmx5IGRpZmZlcmVuY2UgYmV0d2VlbiBwY3JlMi5oLmluIGFuZCBwY3JlMi5oIGlzIHRoZSBzZXR0aW5nIG9mIHRoZSBQQ1JFCisjIHZlcnNpb24gbnVtYmVyLiBUaGVyZWZvcmUsIHdlIGNhbiBjcmVhdGUgdGhlIGdlbmVyaWMgdmVyc2lvbiBqdXN0IGJ5IGNvcHlpbmcuCisKK3NyYy9wY3JlMi5oLmdlbmVyaWM6IHNyYy9wY3JlMi5oLmluIGNvbmZpZ3VyZS5hYworCXJtIC1mICRACisJY3AgLXAgc3JjL3BjcmUyLmggJEAKKworIyBJdCBpcyBtb3JlIGNvbXBsaWNhdGVkIGZvciBjb25maWcuaC5nZW5lcmljLiBXZSBuZWVkIHRoZSB2ZXJzaW9uIHRoYXQgcmVzdWx0cworIyBmcm9tIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIHNvIGFzIHRvIGdldCBhbGwgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBQQ1JFCisjIGNvbmZpZ3VyYXRpb24gbWFjcm9zIHN1Y2ggYXMgTUFUQ0hfTElNSVQgYW5kIE5FV0xJTkUuIFdlIGNhbiBnZXQgdGhpcyBieQorIyBkb2luZyBhIGNvbmZpZ3VyZSBpbiBhIHRlbXBvcmFyeSBkaXJlY3RvcnkuIEhvd2V2ZXIsIHNvbWUgdHJpY2tlcnkgaXMgbmVlZGVkLAorIyBiZWNhdXNlIHRoZSBzb3VyY2UgZGlyZWN0b3J5IG1heSBhbHJlYWR5IGJlIGNvbmZpZ3VyZWQuIElmIHlvdSBqdXN0IHRyeQorIyBydW5uaW5nIGNvbmZpZ3VyZSBpbiBhIG5ldyBkaXJlY3RvcnksIGl0IGNvbXBsYWlucy4gRm9yIHRoaXMgcmVhc29uLCB3ZSBtb3ZlCisjIGNvbmZpZy5zdGF0dXMgb3V0IG9mIHRoZSB3YXkgd2hpbGUgZG9pbmcgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gVGhlCisjIHJlc3VsdGluZyBjb25maWcuaCBpcyBtdW5nZWQgYnkgcGVybCB0byBwdXQgI2lmZGVmcyByb3VuZCBhbnkgI2RlZmluZXMgZm9yCisjIG1hY3JvcyB3aXRoIHZhbHVlcywgYW5kIHRvICN1bmRlZiBhbGwgYm9vbGVhbiBtYWNyb3Mgc3VjaCBhcyBIQVZFX3h4eCBhbmQKKyMgU1VQUE9SVF94eHguIFdlIGFsc28gZ2V0IHJpZCBvZiBhbnkgZ2NjLXNwZWNpZmljIHZpc2liaWxpdHkgc2V0dGluZ3MuIE1ha2UKKyMgc3VyZSB0aGF0IFBDUkUyX0VYUF9ERUZOIGlzIHVuc2V0IChpbiBjYXNlIGl0IGhhcyB2aXNpYmlsaXR5IHNldHRpbmdzKS4KKworc3JjL2NvbmZpZy5oLmdlbmVyaWM6IGNvbmZpZ3VyZS5hYworCXJtIC1yZiAkQCBfZ2VuZXJpYworCW1rZGlyIF9nZW5lcmljCisJY3M9JChzcmNkaXIpL2NvbmZpZy5zdGF0dXM7IHRlc3QgISAtZiAkJGNzIHx8IG12IC1mICQkY3MgJCRjcy5hc2lkZQorCWNkIF9nZW5lcmljICYmICQoYWJzX3RvcF9zcmNkaXIpL2NvbmZpZ3VyZSB8fCA6CisJY3M9JChzcmNkaXIpL2NvbmZpZy5zdGF0dXM7IHRlc3QgISAtZiAkJGNzLmFzaWRlIHx8IG12IC1mICQkY3MuYXNpZGUgJCRjcworCXRlc3QgLWYgX2dlbmVyaWMvc3JjL2NvbmZpZy5oCisJcGVybCAtbiBcCisJICAtZSAnQkVHSU57JCRibGFuaz0wO30nIFwKKwkgIC1lICdpZigvUENSRTJfRVhQX0RFRk4vKXtwcmludCIvKiAjdW5kZWYgUENSRTJfRVhQX0RFRk4gKi9cbiI7JCRibGFuaz0wO25leHQ7fScgXAorCSAgLWUgJ2lmKC90byBtYWtlIGEgc3ltYm9sIHZpc2libGUvKXtuZXh0O30nIFwKKwkgIC1lICdpZigvX19hdHRyaWJ1dGVfXyBcKFwodmlzaWJpbGl0eS8pe25leHQ7fScgXAorCSAgLWUgJ2lmKC9MVF9PQkpESVIvKXtwcmludCIvKiBUaGlzIGlzIGlnbm9yZWQgdW5sZXNzIHlvdSBhcmUgdXNpbmcgbGlidG9vbC4gKi9cbiI7fScgXAorCSAgLWUgJ2lmKC9eI2RlZmluZVxzKCg/OkhBVkV8U1VQUE9SVHxTVERDKV9cdyspLyl7cHJpbnQiLyogI3VuZGVmICQkMSAqL1xuIjskJGJsYW5rPTA7bmV4dDt9JyBcCisJICAtZSAnaWYoL14jZGVmaW5lXHMoPyFQQUNLQUdFfFZFUlNJT04pKFx3KykvKXtwcmludCIjaWZuZGVmICQkMVxuJCRfI2VuZGlmXG4iOyQkYmxhbms9MDtuZXh0O30nIFwKKwkgIC1lICdpZigvXlxzKiQkLyl7cHJpbnQgdW5sZXNzICQkYmxhbms7ICQkYmxhbms9MTt9IGVsc2V7cHJpbnQ7JCRibGFuaz0wO30nIFwKKwkgIF9nZW5lcmljL3NyYy9jb25maWcuaCA+JEAKKwlybSAtcmYgX2dlbmVyaWMKK0BXSVRIX1JFQlVJTERfQ0hBUlRBQkxFU19UUlVFQHNyYy9wY3JlMl9jaGFydGFibGVzLmM6IGRmdGFibGVzJChFWEVFWFQpCitAV0lUSF9SRUJVSUxEX0NIQVJUQUJMRVNfVFJVRUAJcm0gLWYgJEAKK0BXSVRIX1JFQlVJTERfQ0hBUlRBQkxFU19UUlVFQAkuL2RmdGFibGVzJChFWEVFWFQpICRACitAV0lUSF9SRUJVSUxEX0NIQVJUQUJMRVNfRkFMU0VAc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYzogJChzcmNkaXIpL3NyYy9wY3JlMl9jaGFydGFibGVzLmMuZGlzdAorQFdJVEhfUkVCVUlMRF9DSEFSVEFCTEVTX0ZBTFNFQAlybSAtZiAkQAorQFdJVEhfUkVCVUlMRF9DSEFSVEFCTEVTX0ZBTFNFQAkkKExOX1MpICQoYWJzX3NyY2Rpcikvc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0ICQoYWJzX2J1aWxkZGlyKS9zcmMvcGNyZTJfY2hhcnRhYmxlcy5jCisKK0BXSVRIX0dDT1ZfVFJVRUBjb3ZlcmFnZS1jaGVjazogYWxsCitAV0lUSF9HQ09WX1RSVUVACS0kKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAtayBjaGVjaworCitAV0lUSF9HQ09WX1RSVUVAY292ZXJhZ2UtYmFzZWxpbmU6CitAV0lUSF9HQ09WX1RSVUVACSQoTENPVikgJChjb3ZlcmFnZV9xdWlldCkgXAorQFdJVEhfR0NPVl9UUlVFQAkJLS1kaXJlY3RvcnkgJCh0b3BfYnVpbGRkaXIpIFwKK0BXSVRIX0dDT1ZfVFJVRUAJCS0tb3V0cHV0LWZpbGUgIiQoQ09WRVJBR0VfT1VUUFVUX0ZJTEUpIiBcCitAV0lUSF9HQ09WX1RSVUVACQktLWNhcHR1cmUgXAorQFdJVEhfR0NPVl9UUlVFQAkJLS1pbml0aWFsCisKK0BXSVRIX0dDT1ZfVFJVRUBjb3ZlcmFnZS1yZXBvcnQ6CitAV0lUSF9HQ09WX1RSVUVACSQoTENPVikgJChjb3ZlcmFnZV9xdWlldCkgXAorQFdJVEhfR0NPVl9UUlVFQAkJLS1kaXJlY3RvcnkgJCh0b3BfYnVpbGRkaXIpIFwKK0BXSVRIX0dDT1ZfVFJVRUAJCS0tY2FwdHVyZSBcCitAV0lUSF9HQ09WX1RSVUVACQktLW91dHB1dC1maWxlICIkKENPVkVSQUdFX09VVFBVVF9GSUxFKS50bXAiIFwKK0BXSVRIX0dDT1ZfVFJVRUAJCS0tdGVzdC1uYW1lICIkKENPVkVSQUdFX1RFU1RfTkFNRSkiIFwKK0BXSVRIX0dDT1ZfVFJVRUAJCS0tbm8tY2hlY2tzdW0gXAorQFdJVEhfR0NPVl9UUlVFQAkJLS1jb21wYXQtbGlidG9vbCBcCitAV0lUSF9HQ09WX1RSVUVACQkkKENPVkVSQUdFX0xDT1ZfRVhUUkFfRkxBR1MpCitAV0lUSF9HQ09WX1RSVUVACSQoTENPVikgJChjb3ZlcmFnZV9xdWlldCkgXAorQFdJVEhfR0NPVl9UUlVFQAkJLS1kaXJlY3RvcnkgJCh0b3BfYnVpbGRkaXIpIFwKK0BXSVRIX0dDT1ZfVFJVRUAJCS0tb3V0cHV0LWZpbGUgIiQoQ09WRVJBR0VfT1VUUFVUX0ZJTEUpIiBcCitAV0lUSF9HQ09WX1RSVUVACQktLXJlbW92ZSAiJChDT1ZFUkFHRV9PVVRQVVRfRklMRSkudG1wIiBcCitAV0lUSF9HQ09WX1RSVUVACQkiL3RtcC8qIiBcCitAV0lUSF9HQ09WX1RSVUVACQkiL3Vzci9pbmNsdWRlLyoiIFwKK0BXSVRIX0dDT1ZfVFJVRUAJCSIkKGluY2x1ZGVkaXIpLyoiCitAV0lUSF9HQ09WX1RSVUVACS1Acm0gLWYgIiQoQ09WRVJBR0VfT1VUUFVUX0ZJTEUpLnRtcCIKK0BXSVRIX0dDT1ZfVFJVRUAJTEFORz1DICQoR0VOSFRNTCkgJChjb3ZlcmFnZV9xdWlldCkgXAorQFdJVEhfR0NPVl9UUlVFQAkJLS1wcmVmaXggJCh0b3BfYnVpbGRkaXIpIFwKK0BXSVRIX0dDT1ZfVFJVRUAJCS0tb3V0cHV0LWRpcmVjdG9yeSAiJChDT1ZFUkFHRV9PVVRQVVRfRElSKSIgXAorQFdJVEhfR0NPVl9UUlVFQAkJLS10aXRsZSAiJChQQUNLQUdFKSAkKFZFUlNJT04pIENvZGUgQ292ZXJhZ2UgUmVwb3J0IiBcCitAV0lUSF9HQ09WX1RSVUVACQktLXNob3ctZGV0YWlscyAiJChDT1ZFUkFHRV9PVVRQVVRfRklMRSkiIFwKK0BXSVRIX0dDT1ZfVFJVRUAJCS0tbGVnZW5kIFwKK0BXSVRIX0dDT1ZfVFJVRUAJCSQoQ09WRVJBR0VfR0VOSFRNTF9FWFRSQV9GTEFHUykKK0BXSVRIX0dDT1ZfVFJVRUAJQGVjaG8gIkNvZGUgY292ZXJhZ2UgcmVwb3J0IHdyaXR0ZW4gdG8gZmlsZTovLyQoYWJzX2J1aWxkZGlyKS8kKENPVkVSQUdFX09VVFBVVF9ESVIpL2luZGV4Lmh0bWwiCisKK0BXSVRIX0dDT1ZfVFJVRUBjb3ZlcmFnZS1yZXNldDoKK0BXSVRIX0dDT1ZfVFJVRUAJLSQoTENPVikgJChjb3ZlcmFnZV9xdWlldCkgLS16ZXJvY291bnRlcnMgLS1kaXJlY3RvcnkgJCh0b3BfYnVpbGRkaXIpCisKK0BXSVRIX0dDT1ZfVFJVRUBjb3ZlcmFnZS1jbGVhbi1yZXBvcnQ6CitAV0lUSF9HQ09WX1RSVUVACS1ybSAtZiAiJChDT1ZFUkFHRV9PVVRQVVRfRklMRSkiICIkKENPVkVSQUdFX09VVFBVVF9GSUxFKS50bXAiCitAV0lUSF9HQ09WX1RSVUVACS1ybSAtcmYgIiQoQ09WRVJBR0VfT1VUUFVUX0RJUikiCisKK0BXSVRIX0dDT1ZfVFJVRUBjb3ZlcmFnZS1jbGVhbi1kYXRhOgorQFdJVEhfR0NPVl9UUlVFQAktZmluZCAkKHRvcF9idWlsZGRpcikgLW5hbWUgIiouZ2NkYSIgLWRlbGV0ZQorCitAV0lUSF9HQ09WX1RSVUVAY292ZXJhZ2UtY2xlYW46IGNvdmVyYWdlLXJlc2V0IGNvdmVyYWdlLWNsZWFuLXJlcG9ydCBjb3ZlcmFnZS1jbGVhbi1kYXRhCitAV0lUSF9HQ09WX1RSVUVACS1maW5kICQodG9wX2J1aWxkZGlyKSAtbmFtZSAiKi5nY25vIiAtZGVsZXRlCisKK0BXSVRIX0dDT1ZfVFJVRUBjb3ZlcmFnZS1kaXN0Y2xlYW46IGNvdmVyYWdlLWNsZWFuCisKK0BXSVRIX0dDT1ZfVFJVRUBjb3ZlcmFnZTogY292ZXJhZ2UtcmVzZXQgY292ZXJhZ2UtYmFzZWxpbmUgY292ZXJhZ2UtY2hlY2sgY292ZXJhZ2UtcmVwb3J0CitAV0lUSF9HQ09WX1RSVUVAY2xlYW4tbG9jYWw6IGNvdmVyYWdlLWNsZWFuCitAV0lUSF9HQ09WX1RSVUVAZGlzdGNsZWFuLWxvY2FsOiBjb3ZlcmFnZS1kaXN0Y2xlYW4KKworQFdJVEhfR0NPVl9UUlVFQC5QSE9OWTogY292ZXJhZ2UgY292ZXJhZ2UtYmFzZWxpbmUgY292ZXJhZ2UtY2hlY2sgY292ZXJhZ2UtcmVwb3J0IGNvdmVyYWdlLXJlc2V0IGNvdmVyYWdlLWNsZWFuLXJlcG9ydCBjb3ZlcmFnZS1jbGVhbi1kYXRhIGNvdmVyYWdlLWNsZWFuIGNvdmVyYWdlLWRpc3RjbGVhbgorCisjIFdpdGhvdXQgY292ZXJhZ2Ugc3VwcG9ydCwgc3RpbGwgYXJyYW5nZSBmb3IgJ21ha2UgZGlzdGNsZWFuJyB0byBnZXQgcmlkIG9mCisjIGFueSBjb3ZlcmFnZSBmaWxlcyB0aGF0IG1heSBoYXZlIGJlZW4gbGVmdCBmcm9tIGEgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24uCisKK0BXSVRIX0dDT1ZfRkFMU0VAY292ZXJhZ2U6CitAV0lUSF9HQ09WX0ZBTFNFQAlAZWNobyAiQ29uZmlndXJpbmcgd2l0aCAtLWVuYWJsZS1jb3ZlcmFnZSBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSBjb2RlIGNvdmVyYWdlIHJlcG9ydC4iCisKK0BXSVRIX0dDT1ZfRkFMU0VAZGlzdGNsZWFuLWxvY2FsOgorQFdJVEhfR0NPVl9GQUxTRUAJcm0gLXJmICQoUEFDS0FHRSktJChWRVJTSU9OKS1jb3ZlcmFnZSoKKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvZGlzdDIvTkVXUyBiL2Rpc3QyL05FV1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlZWU1YwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL05FV1MKQEAgLTAsMCArMSw4OCBAQAorTmV3cyBhYm91dCBQQ1JFMiByZWxlYXNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitWZXJzaW9uIDEwLjIxIDEyLUphbnVhcnktMjAxNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gTWFueSBidWdzIGhhdmUgYmVlbiBmaXhlZC4gQSBsYXJnZSBudW1iZXIgb2YgdGhlbSB3ZXJlIHByb3Zva2VkIG9ubHkgYnkgdmVyeQorc3RyYW5nZSBwYXR0ZXJuIGlucHV0LCBhbmQgd2VyZSBkaXNjb3ZlcmVkIGJ5IGZ1enplcnMuIFNvbWUgb3RoZXJzIHdlcmUKK2Rpc2NvdmVyZWQgYnkgY29kZSBhdWRpdGluZy4gU2VlIENoYW5nZUxvZyBmb3IgZGV0YWlscy4KKworMi4gVGhlIFVuaWNvZGUgdGFibGVzIGhhdmUgYmVlbiB1cGRhdGVkIHRvIFVuaWNvZGUgdmVyc2lvbiA4LjAuMC4KKworMy4gRm9yIFBlcmwgY29tcGF0aWJpbGl0eSBpbiBFQkNESUMgZW52aXJvbm1lbnRzLCByYW5nZXMgc3VjaCBhcyBhLXogaW4gYQorY2xhc3MsIHdoZXJlIGJvdGggdmFsdWVzIGFyZSBsaXRlcmFsIGxldHRlcnMgaW4gdGhlIHNhbWUgY2FzZSwgb21pdCB0aGUKK25vbi1sZXR0ZXIgRUJDRElDIGNvZGUgcG9pbnRzIHdpdGhpbiB0aGUgcmFuZ2UuCisKKzQuIFRoZXJlIGhhdmUgYmVlbiBhIG51bWJlciBvZiBlbmhhbmNlbWVudHMgdG8gdGhlIHBjcmUyX3N1YnN0aXR1dGUoKSBmdW5jdGlvbiwKK2dpdmluZyBtb3JlIGZsZXhpYmlsaXR5IHRvIHJlcGxhY2VtZW50IGZhY2lsaXRpZXMuIEl0IGlzIG5vdyBhbHNvIHBvc3NpYmxlIHRvCitjYXVzZSB0aGUgZnVuY3Rpb24gdG8gcmV0dXJuIHRoZSBuZWVkZWQgYnVmZmVyIHNpemUgaWYgdGhlIG9uZSBnaXZlbiBpcyB0b28KK3NtYWxsLgorCis1LiBUaGUgUENSRTJfQUxUX1ZFUkJOQU1FUyBvcHRpb24gY2F1c2VzIHRoZSAibmFtZSIgcGFydHMgb2Ygc3BlY2lhbCB2ZXJicyBzdWNoCithcyAoKlRIRU46bmFtZSkgdG8gYmUgcHJvY2Vzc2VkIGZvciBiYWNrc2xhc2hlcyBhbmQgdG8gdGFrZSBub3RlIG9mCitQQ1JFMl9FWFRFTkRFRC4KKworNi4gUENSRTJfSU5GT19IQVNCQUNLU0xBU0hDIG1ha2VzIGl0IHBvc3NpYmxlIGZvciBhIGNsaWVudCB0byBmaW5kIG91dCBpZiBhCitwYXR0ZXJuIHVzZXMgXEMsIGFuZCAtLW5ldmVyLWJhY2tzbGFzaC1DIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgYSB2ZXJzaW9uCitQQ1JFMiBpbiB3aGljaCB0aGUgdXNlIG9mIFxDIGlzIGFsd2F5cyBmb3JiaWRkZW4uCisKKzcuIEEgbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBwYXR0ZXJuIHRoYXQgY2FuIGJlIGhhbmRsZWQgY2FuIG5vdyBiZSBzZXQgYnkKK2NhbGxpbmcgcGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aCgpLgorCis4LiBXaGVuIG1hdGNoaW5nIGFuIHVuYW5jaG9yZWQgcGF0dGVybiwgYSBtYXRjaCBjYW4gYmUgcmVxdWlyZWQgdG8gYmVnaW4gd2l0aGluCithIGdpdmVuIG51bWJlciBvZiBjb2RlIHVuaXRzIGFmdGVyIHRoZSBzdGFydCBvZiB0aGUgc3ViamVjdCBieSBjYWxsaW5nCitwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0KCkuCisKKzkuIFRoZSBwY3JlMnRlc3QgcHJvZ3JhbSBoYXMgYmVlbiBleHRlbmRlZCB0byB0ZXN0IG5ldyBmYWNpbGl0aWVzLCBhbmQgaXQgY2FuCitub3cgcnVuIHRoZSB0ZXN0cyB3aGVuIExGIG9uIGl0cyBvd24gaXMgbm90IGEgdmFsaWQgbmV3bGluZSBzZXF1ZW5jZS4KKworMTAuIFRoZSBSdW5UZXN0IHNjcmlwdCBoYXMgYWxzbyBiZWVuIHVwZGF0ZWQgdG8gZW5hYmxlIG1vcmUgdGVzdHMgdG8gYmUgcnVuLgorCisxMS4gVGhlcmUgaGF2ZSBiZWVuIHNvbWUgbWlub3IgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzLgorCisKK1ZlcnNpb24gMTAuMjAgMzAtSnVuZS0yMDE1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBDYWxsb3V0cyB3aXRoIHN0cmluZyBhcmd1bWVudHMgYW5kIHRoZSBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSgpIGZ1bmN0aW9uCitoYXZlIGJlZW4gaW1wbGVtZW50ZWQuCisKKzIuIFRoZSBQQ1JFMl9ORVZFUl9CQUNLU0xBU0hfQyBvcHRpb24sIHdoaWNoIGxvY2tzIG91dCB0aGUgdXNlIG9mIFxDLCBpcyBhZGRlZC4KKworMy4gVGhlIFBDUkUyX0FMVF9DSVJDVU1GTEVYIG9wdGlvbiBsZXRzIF4gbWF0Y2ggYWZ0ZXIgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgYQorc3ViamVjdCBpbiBtdWx0aWxpbmUgbW9kZS4KKworNC4gVGhlIHdheSBuYW1lZCBzdWJwYXR0ZXJucyBhcmUgaGFuZGxlZCBoYXMgYmVlbiByZWZhY3RvcmVkLiBUaGUgcHJldmlvdXMKK2FwcHJvYWNoIGhhZCBzZXZlcmFsIGJ1Z3MuCisKKzUuIFRoZSBoYW5kbGluZyBvZiBcYyBpbiBFQkNESUMgZW52aXJvbm1lbnRzIGhhcyBiZWVuIGNoYW5nZWQgdG8gY29uZm9ybSB0byB0aGUKK3BlcmxlYmNkaWMgZG9jdW1lbnQuIFRoaXMgaXMgYW4gaW5jb21wYXRpYmxlIGNoYW5nZS4KKworNi4gQnVncyBoYXZlIGJlZW4gbWVuZGVkLCBtYW55IG9mIHRoZW0gZGlzY292ZXJlZCBieSBmdXp6ZXJzLgorCisKK1ZlcnNpb24gMTAuMTAgMDYtTWFyY2gtMjAxNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIFNlcmlhbGl6YXRpb24gYW5kIGRlLXNlcmlhbGl6YXRpb24gZnVuY3Rpb25zIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgQVBJLAorbWFraW5nIGl0IHBvc3NpYmxlIHRvIHNhdmUgYW5kIHJlc3RvcmUgc2V0cyBvZiBjb21waWxlZCBwYXR0ZXJucywgdGhvdWdoCityZXN0b3JhdGlvbiBtdXN0IGJlIGRvbmUgaW4gdGhlIHNhbWUgZW52aXJvbm1lbnQgdGhhdCB3YXMgdXNlZCBmb3IgY29tcGlsYXRpb24uCisKKzIuIFRoZSAoKk5PX0pJVCkgZmVhdHVyZSBoYXMgYmVlbiBhZGRlZDsgdGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYSBwYXR0ZXJuCitjcmVhdG9yIHRvIHNwZWNpZnkgdGhhdCBKSVQgaXMgbm90IHRvIGJlIHVzZWQuCisKKzMuIEEgbnVtYmVyIG9mIGJ1Z3MgaGF2ZSBiZWVuIGZpeGVkLiBJbiBwYXJ0aWN1bGFyLCBidWdzIHRoYXQgY2F1c2VkIGJ1aWxkaW5nCitvbiBXaW5kb3dzIHVzaW5nIENNYWtlIHRvIGZhaWwgaGF2ZSBiZWVuIG1lbmRlZC4KKworCitWZXJzaW9uIDEwLjAwIDA1LUphbnVhcnktMjAxNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVmVyc2lvbiAxMC4wMCBpcyB0aGUgZmlyc3QgcmVsZWFzZSBvZiBQQ1JFMiwgYSByZXZpc2VkIEFQSSBmb3IgdGhlIFBDUkUKK2xpYnJhcnkuIENoYW5nZXMgcHJpb3IgdG8gMTAuMDAgYXJlIGxvZ2dlZCBpbiB0aGUgQ2hhbmdlTG9nIGZpbGUgZm9yIHRoZSBvbGQKK0FQSSwgdXAgdG8gaXRlbSAyMCBmb3IgcmVsZWFzZSA4LjM2LiBOZXcgcHJvZ3JhbXMgYXJlIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUKK25ldyBsaWJyYXJ5LiBQcm9ncmFtcyB0aGF0IHVzZSB0aGUgb3JpZ2luYWwgKFBDUkUxKSBBUEkgd2lsbCBuZWVkIGNoYW5naW5nCitiZWZvcmUgbGlua2luZyB3aXRoIHRoZSBuZXcgbGlicmFyeS4KKworKioqKgpkaWZmIC0tZ2l0IGEvZGlzdDIvTk9OLUFVVE9UT09MUy1CVUlMRCBiL2Rpc3QyL05PTi1BVVRPVE9PTFMtQlVJTEQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ViOTI0NQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL05PTi1BVVRPVE9PTFMtQlVJTEQKQEAgLTAsMCArMSwzOTIgQEAKK0J1aWxkaW5nIFBDUkUyIHdpdGhvdXQgdXNpbmcgYXV0b3Rvb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IGhhcyBiZWVuIGNvbnZlcnRlZCBmcm9tIHRoZSBQQ1JFMSBkb2N1bWVudC4gSSBoYXZlIHJlbW92ZWQgYQorbnVtYmVyIG9mIHNlY3Rpb25zIGFib3V0IGJ1aWxkaW5nIGluIHZhcmlvdXMgZW52aXJvbm1lbnRzLCBhcyB0aGV5IGFwcGxpZWQgb25seQordG8gUENSRTEgYW5kIGFyZSBwcm9iYWJseSBvdXQgb2YgZGF0ZS4KKworVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgIEdlbmVyYWwKKyAgR2VuZXJpYyBpbnN0cnVjdGlvbnMgZm9yIHRoZSBQQ1JFMiBDIGxpYnJhcnkKKyAgU3RhY2sgc2l6ZSBpbiBXaW5kb3dzIGVudmlyb25tZW50cworICBMaW5raW5nIHByb2dyYW1zIGluIFdpbmRvd3MgZW52aXJvbm1lbnRzCisgIENhbGxpbmcgY29udmVudGlvbnMgaW4gV2luZG93cyBlbnZpcm9ubWVudHMKKyAgQ29tbWVudHMgYWJvdXQgV2luMzIgYnVpbGRzCisgIEJ1aWxkaW5nIFBDUkUyIG9uIFdpbmRvd3Mgd2l0aCBDTWFrZQorICBUZXN0aW5nIHdpdGggUnVuVGVzdC5iYXQKKyAgQnVpbGRpbmcgUENSRTIgb24gbmF0aXZlIHovT1MgYW5kIHovVk0KKworCitHRU5FUkFMCisKK1RoZSBiYXNpYyBQQ1JFMiBsaWJyYXJ5IGNvbnNpc3RzIGVudGlyZWx5IG9mIGNvZGUgd3JpdHRlbiBpbiBTdGFuZGFyZCBDLCBhbmQgc28KK3Nob3VsZCBjb21waWxlIHN1Y2Nlc3NmdWxseSBvbiBhbnkgc3lzdGVtIHRoYXQgaGFzIGEgU3RhbmRhcmQgQyBjb21waWxlciBhbmQKK2xpYnJhcnkuCisKK1RoZSBQQ1JFMiBkaXN0cmlidXRpb24gaW5jbHVkZXMgYSAiY29uZmlndXJlIiBmaWxlIGZvciB1c2UgYnkgdGhlCitjb25maWd1cmUvbWFrZSAoYXV0b3Rvb2xzKSBidWlsZCBzeXN0ZW0sIGFzIGZvdW5kIGluIG1hbnkgVW5peC1saWtlCitlbnZpcm9ubWVudHMuIFRoZSBSRUFETUUgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3B0aW9ucyBmb3IKKyJjb25maWd1cmUiLgorCitUaGVyZSBpcyBhbHNvIHN1cHBvcnQgZm9yIENNYWtlLCB3aGljaCBzb21lIHVzZXJzIHByZWZlciwgZXNwZWNpYWxseSBpbiBXaW5kb3dzCitlbnZpcm9ubWVudHMsIHRob3VnaCBpdCBjYW4gYWxzbyBiZSBydW4gaW4gVW5peC1saWtlIGVudmlyb25tZW50cy4gU2VlIHRoZQorc2VjdGlvbiBlbnRpdGxlZCAiQnVpbGRpbmcgUENSRTIgb24gV2luZG93cyB3aXRoIENNYWtlIiBiZWxvdy4KKworVmVyc2lvbnMgb2Ygc3JjL2NvbmZpZy5oIGFuZCBzcmMvcGNyZTIuaCBhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIFBDUkUyIHRhcmJhbGxzCit1bmRlciB0aGUgbmFtZXMgc3JjL2NvbmZpZy5oLmdlbmVyaWMgYW5kIHNyYy9wY3JlMi5oLmdlbmVyaWMuIFRoZXNlIGFyZQorcHJvdmlkZWQgZm9yIHRob3NlIHdobyBidWlsZCBQQ1JFMiB3aXRob3V0IHVzaW5nICJjb25maWd1cmUiIG9yIENNYWtlLiBJZiB5b3UKK3VzZSAiY29uZmlndXJlIiBvciBDTWFrZSwgdGhlIC5nZW5lcmljIHZlcnNpb25zIGFyZSBub3QgdXNlZC4KKworCitHRU5FUklDIElOU1RSVUNUSU9OUyBGT1IgVEhFIFBDUkUyIEMgTElCUkFSWQorCitUaGUgZm9sbG93aW5nIGFyZSBnZW5lcmljIGluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgdGhlIFBDUkUyIEMgbGlicmFyeSAiYnkKK2hhbmQiLiBJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSBDTWFrZSwgdGhpcyBzZWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIHlvdTsgeW91CitjYW4gc2tpcCBhaGVhZCB0byB0aGUgQ01ha2Ugc2VjdGlvbi4KKworICgxKSBDb3B5IG9yIHJlbmFtZSB0aGUgZmlsZSBzcmMvY29uZmlnLmguZ2VuZXJpYyBhcyBzcmMvY29uZmlnLmgsIGFuZCBlZGl0IHRoZQorICAgICBtYWNybyBzZXR0aW5ncyB0aGF0IGl0IGNvbnRhaW5zIHRvIHdoYXRldmVyIGlzIGFwcHJvcHJpYXRlIGZvciB5b3VyCisgICAgIGVudmlyb25tZW50LiBJbiBwYXJ0aWN1bGFyLCB5b3UgY2FuIGFsdGVyIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBORVdMSU5FCisgICAgIG1hY3JvIHRvIHNwZWNpZnkgd2hhdCBjaGFyYWN0ZXIocykgeW91IHdhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgbGluZQorICAgICB0ZXJtaW5hdG9ycy4KKworICAgICBXaGVuIHlvdSBjb21waWxlIGFueSBvZiB0aGUgUENSRTIgbW9kdWxlcywgeW91IG11c3Qgc3BlY2lmeQorICAgICAtREhBVkVfQ09ORklHX0ggdG8geW91ciBjb21waWxlciBzbyB0aGF0IHNyYy9jb25maWcuaCBpcyBpbmNsdWRlZCBpbiB0aGUKKyAgICAgc291cmNlcy4KKworICAgICBBbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyBub3QgdG8gZWRpdCBzcmMvY29uZmlnLmgsIGJ1dCB0byB1c2UgLUQgb24gdGhlCisgICAgIGNvbXBpbGVyIGNvbW1hbmQgbGluZSB0byBtYWtlIGFueSBjaGFuZ2VzIHRoYXQgeW91IG5lZWQgdG8gdGhlCisgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSW4gdGhpcyBjYXNlIC1ESEFWRV9DT05GSUdfSCBtdXN0IG5vdCBiZSBzZXQuCisKKyAgICAgTk9URTogVGhlcmUgaGF2ZSBiZWVuIG9jY2FzaW9ucyB3aGVuIHRoZSB3YXkgaW4gd2hpY2ggY2VydGFpbiBwYXJhbWV0ZXJzCisgICAgIGluIHNyYy9jb25maWcuaCBhcmUgdXNlZCBoYXMgY2hhbmdlZCBiZXR3ZWVuIHJlbGVhc2VzLiAoSW4gdGhlCisgICAgIGNvbmZpZ3VyZS9tYWtlIHdvcmxkLCB0aGlzIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseS4pIFdoZW4gdXBncmFkaW5nIHRvIGEKKyAgICAgbmV3IHJlbGVhc2UsIHlvdSBhcmUgc3Ryb25nbHkgYWR2aXNlZCB0byByZXZpZXcgc3JjL2NvbmZpZy5oLmdlbmVyaWMKKyAgICAgYmVmb3JlIHJlLXVzaW5nIHdoYXQgeW91IGhhZCBwcmV2aW91c2x5LgorCisgKDIpIENvcHkgb3IgcmVuYW1lIHRoZSBmaWxlIHNyYy9wY3JlMi5oLmdlbmVyaWMgYXMgc3JjL3BjcmUyLmguCisKKyAoMykgRUlUSEVSOgorICAgICAgIENvcHkgb3IgcmVuYW1lIGZpbGUgc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0IGFzCisgICAgICAgc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYy4KKworICAgICBPUjoKKyAgICAgICBDb21waWxlIHNyYy9kZnRhYmxlcy5jIGFzIGEgc3RhbmQtYWxvbmUgcHJvZ3JhbSAodXNpbmcgLURIQVZFX0NPTkZJR19ICisgICAgICAgaWYgeW91IGhhdmUgc2V0IHVwIHNyYy9jb25maWcuaCksIGFuZCB0aGVuIHJ1biBpdCB3aXRoIHRoZSBzaW5nbGUKKyAgICAgICBhcmd1bWVudCAic3JjL3BjcmUyX2NoYXJ0YWJsZXMuYyIuIFRoaXMgZ2VuZXJhdGVzIGEgc2V0IG9mIHN0YW5kYXJkCisgICAgICAgY2hhcmFjdGVyIHRhYmxlcyBhbmQgd3JpdGVzIHRoZW0gdG8gdGhhdCBmaWxlLiBUaGUgdGFibGVzIGFyZSBnZW5lcmF0ZWQKKyAgICAgICB1c2luZyB0aGUgZGVmYXVsdCBDIGxvY2FsZSBmb3IgeW91ciBzeXN0ZW0uIElmIHlvdSB3YW50IHRvIHVzZSBhIGxvY2FsZQorICAgICAgIHRoYXQgaXMgc3BlY2lmaWVkIGJ5IExDX3h4eCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGFkZCB0aGUgLUwgb3B0aW9uIHRvCisgICAgICAgdGhlIGRmdGFibGVzIGNvbW1hbmQuIFlvdSBtdXN0IHVzZSB0aGlzIG1ldGhvZCBpZiB5b3UgYXJlIGJ1aWxkaW5nIG9uIGEKKyAgICAgICBzeXN0ZW0gdGhhdCB1c2VzIEVCQ0RJQyBjb2RlLgorCisgICAgIFRoZSB0YWJsZXMgaW4gc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYyBhcmUgZGVmYXVsdHMuIFRoZSBjYWxsZXIgb2YgUENSRTIgY2FuCisgICAgIHNwZWNpZnkgYWx0ZXJuYXRpdmUgdGFibGVzIGF0IHJ1biB0aW1lLgorCisgKDQpIEZvciBhbiA4LWJpdCBsaWJyYXJ5LCBjb21waWxlIHRoZSBmb2xsb3dpbmcgc291cmNlIGZpbGVzIGZyb20gdGhlIHNyYworICAgICBkaXJlY3RvcnksIHNldHRpbmcgLURQQ1JFMl9DT0RFX1VOSVRfV0lEVEg9OCBhcyBhIGNvbXBpbGVyIG9wdGlvbi4gQWxzbworICAgICBzZXQgLURIQVZFX0NPTkZJR19IIGlmIHlvdSBoYXZlIHNldCB1cCBzcmMvY29uZmlnLmggd2l0aCB5b3VyCisgICAgIGNvbmZpZ3VyYXRpb24sIG9yIGVsc2UgdXNlIG90aGVyIC1EIHNldHRpbmdzIHRvIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbgorICAgICBhcyByZXF1aXJlZC4KKworICAgICAgIHBjcmUyX2F1dG9fcG9zc2Vzcy5jCisgICAgICAgcGNyZTJfY2hhcnRhYmxlcy5jCisgICAgICAgcGNyZTJfY29tcGlsZS5jCisgICAgICAgcGNyZTJfY29uZmlnLmMKKyAgICAgICBwY3JlMl9jb250ZXh0LmMKKyAgICAgICBwY3JlMl9kZmFfbWF0Y2guYworICAgICAgIHBjcmUyX2Vycm9yLmMKKyAgICAgICBwY3JlMl9maW5kX2JyYWNrZXQuYworICAgICAgIHBjcmUyX2ppdF9jb21waWxlLmMKKyAgICAgICBwY3JlMl9tYWtldGFibGVzLmMKKyAgICAgICBwY3JlMl9tYXRjaC5jCisgICAgICAgcGNyZTJfbWF0Y2hfZGF0YS5jCisgICAgICAgcGNyZTJfbmV3bGluZS5jCisgICAgICAgcGNyZTJfb3JkMnV0Zi5jCisgICAgICAgcGNyZTJfcGF0dGVybl9pbmZvLmMKKyAgICAgICBwY3JlMl9zZXJpYWxpemUuYworICAgICAgIHBjcmUyX3N0cmluZ191dGlscy5jCisgICAgICAgcGNyZTJfc3R1ZHkuYworICAgICAgIHBjcmUyX3N1YnN0aXR1dGUuYworICAgICAgIHBjcmUyX3N1YnN0cmluZy5jCisgICAgICAgcGNyZTJfdGFibGVzLmMKKyAgICAgICBwY3JlMl91Y2QuYworICAgICAgIHBjcmUyX3ZhbGlkX3V0Zi5jCisgICAgICAgcGNyZTJfeGNsYXNzLmMKKworICAgICBNYWtlIHN1cmUgdGhhdCB5b3UgaW5jbHVkZSAtSS4gaW4gdGhlIGNvbXBpbGVyIGNvbW1hbmQgKG9yIGVxdWl2YWxlbnQgZm9yCisgICAgIGFuIHVudXN1YWwgY29tcGlsZXIpIHNvIHRoYXQgYWxsIGluY2x1ZGVkIFBDUkUyIGhlYWRlciBmaWxlcyBhcmUgZmlyc3QKKyAgICAgc291Z2h0IGluIHRoZSBzcmMgZGlyZWN0b3J5IHVuZGVyIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gT3RoZXJ3aXNlIHlvdSBydW4KKyAgICAgdGhlIHJpc2sgb2YgcGlja2luZyB1cCBhIHByZXZpb3VzbHktaW5zdGFsbGVkIGZpbGUgZnJvbSBzb21ld2hlcmUgZWxzZS4KKworICAgICBOb3RlIHRoYXQgeW91IG11c3QgY29tcGlsZSBwY3JlMl9qaXRfY29tcGlsZS5jLCBldmVuIGlmIHlvdSBoYXZlIG5vdAorICAgICBkZWZpbmVkIFNVUFBPUlRfSklUIGluIHNyYy9jb25maWcuaCwgYmVjYXVzZSB3aGVuIEpJVCBzdXBwb3J0IGlzIG5vdAorICAgICBjb25maWd1cmVkLCBkdW1teSBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkLiBXaGVuIEpJVCBzdXBwb3J0IElTIGNvbmZpZ3VyZWQsCisgICAgIHBjcmUyX2NvbXBpbGUuYyAjaW5jbHVkZXMgb3RoZXIgZmlsZXMgZnJvbSB0aGUgc2xqaXQgc3ViZGlyZWN0b3J5LCB3aGVyZQorICAgICB0aGVyZSBzaG91bGQgYmUgMTYgZmlsZXMsIGFsbCBvZiB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoICJzbGppdCIuIEl0IGFsc28KKyAgICAgI2luY2x1ZGVzIHNyYy9wY3JlMl9qaXRfbWF0Y2guYyBhbmQgc3JjL3BjcmUyX2ppdF9taXNjLmMsIHNvIHlvdSBzaG91bGQKKyAgICAgbm90IGNvbXBpbGUgdGhlc2UgeW91cnNlbGYuCisKKyAoNSkgTm93IGxpbmsgYWxsIHRoZSBjb21waWxlZCBjb2RlIGludG8gYW4gb2JqZWN0IGxpYnJhcnkgaW4gd2hpY2hldmVyIGZvcm0KKyAgICAgeW91ciBzeXN0ZW0ga2VlcHMgc3VjaCBsaWJyYXJpZXMuIFRoaXMgaXMgdGhlIGJhc2ljIFBDUkUyIEMgOC1iaXQgbGlicmFyeS4KKyAgICAgSWYgeW91ciBzeXN0ZW0gaGFzIHN0YXRpYyBhbmQgc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSBoYXZlIHRvIGRvIHRoaXMKKyAgICAgb25jZSBmb3IgZWFjaCB0eXBlLgorCisgKDYpIElmIHlvdSB3YW50IHRvIGJ1aWxkIGEgMTYtYml0IGxpYnJhcnkgb3IgMzItYml0IGxpYnJhcnkgKGFzIHdlbGwgYXMsIG9yCisgICAgIGluc3RlYWQgb2YgdGhlIDgtYml0IGxpYnJhcnkpIGp1c3Qgc3VwcGx5IDE2IG9yIDMyIGFzIHRoZSB2YWx1ZSBvZgorICAgICAtRFBDUkUyX0NPREVfVU5JVF9XSURUSCB3aGVuIHlvdSBhcmUgY29tcGlsaW5nLgorCisgKDcpIElmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBQT1NJWCB3cmFwcGVyIGZ1bmN0aW9ucyAod2hpY2ggYXBwbHkgb25seSB0byB0aGUKKyAgICAgOC1iaXQgbGlicmFyeSksIGVuc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBzcmMvcGNyZTJwb3NpeC5oIGZpbGUgYW5kIHRoZW4KKyAgICAgY29tcGlsZSBzcmMvcGNyZTJwb3NpeC5jLiBMaW5rIHRoZSByZXN1bHQgKG9uIGl0cyBvd24pIGFzIHRoZSBwY3JlMnBvc2l4CisgICAgIGxpYnJhcnkuCisKKyAoOCkgVGhlIHBjcmUydGVzdCBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgd2l0aCBhbnkgY29tYmluYXRpb24gb2YgdGhlIDgtYml0LAorICAgICAxNi1iaXQgYW5kIDMyLWJpdCBsaWJyYXJpZXMgKGRlcGVuZGluZyBvbiB3aGF0IHlvdSBzZWxlY3RlZCBpbgorICAgICBzcmMvY29uZmlnLmgpLiBDb21waWxlIHNyYy9wY3JlMnRlc3QuYzsgZG9uJ3QgZm9yZ2V0IC1ESEFWRV9DT05GSUdfSCBpZgorICAgICBuZWNlc3NhcnksIGJ1dCBkbyBOT1QgZGVmaW5lIFBDUkUyX0NPREVfVU5JVF9XSURUSC4gVGhlbiBsaW5rIHdpdGggdGhlCisgICAgIGFwcHJvcHJpYXRlIGxpYnJhcnkvaWVzLiBJZiB5b3UgY29tcGlsZWQgYW4gOC1iaXQgbGlicmFyeSwgcGNyZTJ0ZXN0IGFsc28KKyAgICAgbmVlZHMgdGhlIHBjcmUycG9zaXggd3JhcHBlciBsaWJyYXJ5LgorCisgKDkpIFJ1biBwY3JlMnRlc3Qgb24gdGhlIHRlc3RpbnB1dCBmaWxlcyBpbiB0aGUgdGVzdGRhdGEgZGlyZWN0b3J5LCBhbmQgY2hlY2sKKyAgICAgdGhhdCB0aGUgb3V0cHV0IG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgdGVzdG91dHB1dCBmaWxlcy4gVGhlcmUgYXJlCisgICAgIGNvbW1lbnRzIGFib3V0IHdoYXQgZWFjaCB0ZXN0IGRvZXMgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIlRlc3RpbmcgUENSRTIiCisgICAgIGluIHRoZSBSRUFETUUgZmlsZS4gSWYgeW91IGNvbXBpbGVkIG1vcmUgdGhhbiBvbmUgb2YgdGhlIDgtYml0LCAxNi1iaXQgYW5kCisgICAgIDMyLWJpdCBsaWJyYXJpZXMsIHlvdSBuZWVkIHRvIHJ1biBwY3JlMnRlc3Qgd2l0aCB0aGUgLTE2IG9wdGlvbiB0byBkbworICAgICAxNi1iaXQgdGVzdHMgYW5kIHdpdGggdGhlIC0zMiBvcHRpb24gdG8gZG8gMzItYml0IHRlc3RzLgorCisgICAgIFNvbWUgdGVzdHMgYXJlIHJlbGV2YW50IG9ubHkgd2hlbiBjZXJ0YWluIGJ1aWxkLXRpbWUgb3B0aW9ucyBhcmUgc2VsZWN0ZWQuCisgICAgIEZvciBleGFtcGxlLCB0ZXN0IDQgaXMgZm9yIFVuaWNvZGUgc3VwcG9ydCwgYW5kIHdpbGwgbm90IHJ1biBpZiB5b3UgaGF2ZQorICAgICBidWlsdCBQQ1JFMiB3aXRob3V0IGl0LiBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSBzdGFydCBvZiBlYWNoIHRlc3RpbnB1dAorICAgICBmaWxlLiBJZiB5b3UgaGF2ZSBhIHN1aXRhYmxlIFVuaXgtbGlrZSBzaGVsbCwgdGhlIFJ1blRlc3Qgc2NyaXB0IHdpbGwgcnVuCisgICAgIHRoZSBhcHByb3ByaWF0ZSB0ZXN0cyBmb3IgeW91LiBUaGUgY29tbWFuZCAiUnVuVGVzdCBsaXN0IiB3aWxsIG91dHB1dCBhCisgICAgIGxpc3Qgb2YgYWxsIHRoZSB0ZXN0cy4KKworICAgICBOb3RlIHRoYXQgdGhlIHN1cHBsaWVkIGZpbGVzIGFyZSBpbiBVbml4IGZvcm1hdCwgd2l0aCBqdXN0IExGIGNoYXJhY3RlcnMKKyAgICAgYXMgbGluZSB0ZXJtaW5hdG9ycy4gWW91IG1heSBuZWVkIHRvIGVkaXQgdGhlbSB0byBjaGFuZ2UgdGhpcyBpZiB5b3VyCisgICAgIHN5c3RlbSB1c2VzIGEgZGlmZmVyZW50IGNvbnZlbnRpb24uCisKKygxMCkgSWYgeW91IGhhdmUgYnVpbHQgUENSRTIgd2l0aCBTVVBQT1JUX0pJVCwgdGhlIEpJVCBmZWF0dXJlcyBjYW4gYmUgdGVzdGVkCisgICAgIGJ5IHJ1bm5pbmcgcGNyZTJ0ZXN0IHdpdGggdGhlIC1qaXQgb3B0aW9uLiBUaGlzIGlzIGRvbmUgYXV0b21hdGljYWxseSBieQorICAgICB0aGUgUnVuVGVzdCBzY3JpcHQuIFlvdSBtaWdodCBhbHNvIGxpa2UgdG8gYnVpbGQgYW5kIHJ1biB0aGUgZnJlZXN0YW5kaW5nCisgICAgIEpJVCB0ZXN0IHByb2dyYW0sIHNyYy9wY3JlMl9qaXRfdGVzdC5jLgorCisoMTEpIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgcGNyZTJncmVwIGNvbW1hbmQsIGNvbXBpbGUgYW5kIGxpbmsKKyAgICAgc3JjL3BjcmUyZ3JlcC5jOyBpdCB1c2VzIG9ubHkgdGhlIGJhc2ljIDgtYml0IFBDUkUyIGxpYnJhcnkgKGl0IGRvZXMgbm90CisgICAgIG5lZWQgdGhlIHBjcmUycG9zaXggbGlicmFyeSkuCisKKworU1RBQ0sgU0laRSBJTiBXSU5ET1dTIEVOVklST05NRU5UUworCitUaGUgZGVmYXVsdCBwcm9jZXNzb3Igc3RhY2sgc2l6ZSBvZiAxTWIgaW4gc29tZSBXaW5kb3dzIGVudmlyb25tZW50cyBpcyB0b28KK3NtYWxsIGZvciBtYXRjaGluZyBwYXR0ZXJucyB0aGF0IG5lZWQgbXVjaCByZWN1cnNpb24uIEluIHBhcnRpY3VsYXIsIHRlc3QgMiBtYXkKK2ZhaWwgYmVjYXVzZSBvZiB0aGlzLiBOb3JtYWxseSwgcnVubmluZyBvdXQgb2Ygc3RhY2sgY2F1c2VzIGEgY3Jhc2gsIGJ1dCB0aGVyZQoraGF2ZSBiZWVuIGNhc2VzIHdoZXJlIHRoZSB0ZXN0IHByb2dyYW0gaGFzIGp1c3QgZGllZCBzaWxlbnRseS4gU2VlIHlvdXIgbGlua2VyCitkb2N1bWVudGF0aW9uIGZvciBob3cgdG8gaW5jcmVhc2Ugc3RhY2sgc2l6ZSBpZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcy4gSWYgeW91CithcmUgdXNpbmcgQ01ha2UgKHNlZSAiQlVJTERJTkcgUENSRTIgT04gV0lORE9XUyBXSVRIIENNQUtFIiBiZWxvdykgYW5kIHRoZSBnY2MKK2NvbXBpbGVyLCB5b3UgY2FuIGluY3JlYXNlIHRoZSBzdGFjayBzaXplIGZvciBwY3JlMnRlc3QgYW5kIHBjcmUyZ3JlcCBieQorc2V0dGluZyB0aGUgQ01BS0VfRVhFX0xJTktFUl9GTEFHUyB2YXJpYWJsZSB0byAiLVdsLC0tc3RhY2ssODM4ODYwOCIgKGZvcgorZXhhbXBsZSkuIFRoZSBMaW51eCBkZWZhdWx0IG9mIDhNYiBpcyBhIHJlYXNvbmFibGUgY2hvaWNlIGZvciB0aGUgc3RhY2ssIHRob3VnaAorZXZlbiB0aGF0IGNhbiBiZSB0b28gc21hbGwgZm9yIHNvbWUgcGF0dGVybi9zdWJqZWN0IGNvbWJpbmF0aW9ucy4KKworUENSRTIgaGFzIGEgY29tcGlsZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBkaXNhYmxlIHRoZSB1c2Ugb2Ygc3RhY2sgZm9yCityZWN1cnNpb24gc28gdGhhdCBoZWFwIGlzIHVzZWQgaW5zdGVhZC4gSG93ZXZlciwgcGF0dGVybiBtYXRjaGluZyBpcworc2lnbmlmaWNhbnRseSBzbG93ZXIgd2hlbiB0aGlzIGlzIGRvbmUuIFRoZXJlIGlzIG1vcmUgYWJvdXQgc3RhY2sgdXNhZ2UgaW4gdGhlCisicGNyZTJzdGFjayIgZG9jdW1lbnRhdGlvbi4KKworCitMSU5LSU5HIFBST0dSQU1TIElOIFdJTkRPV1MgRU5WSVJPTk1FTlRTCisKK0lmIHlvdSB3YW50IHRvIHN0YXRpY2FsbHkgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhIFBDUkUyIGxpYnJhcnkgaW4gdGhlIGZvcm0gb2YKK2Egbm9uLWRsbCAuYSBmaWxlLCB5b3UgbXVzdCBkZWZpbmUgUENSRTJfU1RBVElDIGJlZm9yZSBpbmNsdWRpbmcgc3JjL3BjcmUyLmguCisKKworQ0FMTElORyBDT05WRU5USU9OUyBJTiBXSU5ET1dTIEVOVklST05NRU5UUworCitJdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIHByb2dyYW1zIHRvIHVzZSBkaWZmZXJlbnQgY2FsbGluZyBjb252ZW50aW9ucyB1c2luZworTVNWQy4gU2VhcmNoIHRoZSB3ZWIgZm9yICJjYWxsaW5nIGNvbnZlbnRpb25zIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gVG8gbWFrZSBpdAorZWFzaWVyIHRvIGNoYW5nZSB0aGUgY2FsbGluZyBjb252ZW50aW9uIGZvciB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGluIHRoZQorUENSRTIgbGlicmFyeSwgdGhlIG1hY3JvIFBDUkUyX0NBTExfQ09OVkVOVElPTiBpcyBwcmVzZW50IGluIGFsbCB0aGUgZXh0ZXJuYWwKK2RlZmluaXRpb25zLiBJdCBjYW4gYmUgc2V0IGV4dGVybmFsbHkgd2hlbiBjb21waWxpbmcgKGUuZy4gaW4gQ0ZMQUdTKS4gSWYgaXQgaXMKK25vdCBzZXQsIGl0IGRlZmF1bHRzIHRvIGVtcHR5OyB0aGUgZGVmYXVsdCBjYWxsaW5nIGNvbnZlbnRpb24gaXMgdGhlbiB1c2VkCisod2hpY2ggaXMgd2hhdCBpcyB3YW50ZWQgbW9zdCBvZiB0aGUgdGltZSkuCisKKworQ09NTUVOVFMgQUJPVVQgV0lOMzIgQlVJTERTIChzZWUgYWxzbyAiQlVJTERJTkcgUENSRTIgT04gV0lORE9XUyBXSVRIIENNQUtFIikKKworVGhlcmUgYXJlIHR3byB3YXlzIG9mIGJ1aWxkaW5nIFBDUkUyIHVzaW5nIHRoZSAiY29uZmlndXJlLCBtYWtlLCBtYWtlIGluc3RhbGwiCitwYXJhZGlnbSBvbiBXaW5kb3dzIHN5c3RlbXM6IHVzaW5nIE1pbkdXIG9yIHVzaW5nIEN5Z3dpbi4gVGhlc2UgYXJlIG5vdCBhdCBhbGwKK3RoZSBzYW1lIHRoaW5nOyB0aGV5IGFyZSBjb21wbGV0ZWx5IGRpZmZlcmVudCBmcm9tIGVhY2ggb3RoZXIuIFRoZXJlIGlzIGFsc28KK3N1cHBvcnQgZm9yIGJ1aWxkaW5nIHVzaW5nIENNYWtlLCB3aGljaCBzb21lIHVzZXJzIGZpbmQgYSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZAord2F5IG9mIGJ1aWxkaW5nIFBDUkUyIHVuZGVyIFdpbmRvd3MuCisKK1RoZSBNaW5HVyBob21lIHBhZ2UgKGh0dHA6Ly93d3cubWluZ3cub3JnLykgc2F5cyB0aGlzOgorCisgIE1pbkdXOiBBIGNvbGxlY3Rpb24gb2YgZnJlZWx5IGF2YWlsYWJsZSBhbmQgZnJlZWx5IGRpc3RyaWJ1dGFibGUgV2luZG93cworICBzcGVjaWZpYyBoZWFkZXIgZmlsZXMgYW5kIGltcG9ydCBsaWJyYXJpZXMgY29tYmluZWQgd2l0aCBHTlUgdG9vbHNldHMgdGhhdAorICBhbGxvdyBvbmUgdG8gcHJvZHVjZSBuYXRpdmUgV2luZG93cyBwcm9ncmFtcyB0aGF0IGRvIG5vdCByZWx5IG9uIGFueQorICAzcmQtcGFydHkgQyBydW50aW1lIERMTHMuCisKK1RoZSBDeWd3aW4gaG9tZSBwYWdlIChodHRwOi8vd3d3LmN5Z3dpbi5jb20vKSBzYXlzIHRoaXM6CisKKyAgQ3lnd2luIGlzIGEgTGludXgtbGlrZSBlbnZpcm9ubWVudCBmb3IgV2luZG93cy4gSXQgY29uc2lzdHMgb2YgdHdvIHBhcnRzOgorCisgIC4gQSBETEwgKGN5Z3dpbjEuZGxsKSB3aGljaCBhY3RzIGFzIGEgTGludXggQVBJIGVtdWxhdGlvbiBsYXllciBwcm92aWRpbmcKKyAgICBzdWJzdGFudGlhbCBMaW51eCBBUEkgZnVuY3Rpb25hbGl0eQorCisgIC4gQSBjb2xsZWN0aW9uIG9mIHRvb2xzIHdoaWNoIHByb3ZpZGUgTGludXggbG9vayBhbmQgZmVlbC4KKworT24gYm90aCBNaW5HVyBhbmQgQ3lnd2luLCBQQ1JFMiBzaG91bGQgYnVpbGQgY29ycmVjdGx5IHVzaW5nOgorCisgIC4vY29uZmlndXJlICYmIG1ha2UgJiYgbWFrZSBpbnN0YWxsCisKK1RoaXMgc2hvdWxkIGNyZWF0ZSB0d28gbGlicmFyaWVzIGNhbGxlZCBsaWJwY3JlMi04IGFuZCBsaWJwY3JlMi1wb3NpeC4gVGhlc2UKK2FyZSBpbmRlcGVuZGVudCBsaWJyYXJpZXM6IHdoZW4geW91IGxpbmsgd2l0aCBsaWJwY3JlMi1wb3NpeCB5b3UgbXVzdCBhbHNvIGxpbmsKK3dpdGggbGlicGNyZTItOCwgd2hpY2ggY29udGFpbnMgdGhlIGJhc2ljIGZ1bmN0aW9ucy4KKworVXNpbmcgQ3lnd2luJ3MgY29tcGlsZXIgZ2VuZXJhdGVzIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgdGhhdCBkZXBlbmQgb24KK2N5Z3dpbjEuZGxsLiBJZiBhIGxpYnJhcnkgdGhhdCBpcyBnZW5lcmF0ZWQgdGhpcyB3YXkgaXMgZGlzdHJpYnV0ZWQsCitjeWd3aW4xLmRsbCBoYXMgdG8gYmUgZGlzdHJpYnV0ZWQgYXMgd2VsbC4gU2luY2UgY3lnd2luMS5kbGwgaXMgdW5kZXIgdGhlIEdQTAorbGljZW5jZSwgdGhpcyBmb3JjZXMgbm90IG9ubHkgUENSRTIgdG8gYmUgdW5kZXIgdGhlIEdQTCwgYnV0IGFsc28gdGhlIGVudGlyZQorYXBwbGljYXRpb24uIEEgZGlzdHJpYnV0b3Igd2hvIHdhbnRzIHRvIGtlZXAgdGhlaXIgb3duIGNvZGUgcHJvcHJpZXRhcnkgbXVzdAorcHVyY2hhc2UgYW4gYXBwcm9wcmlhdGUgQ3lnd2luIGxpY2VuY2UuCisKK01pbkdXIGhhcyBubyBzdWNoIHJlc3RyaWN0aW9ucy4gVGhlIE1pbkdXIGNvbXBpbGVyIGdlbmVyYXRlcyBhIGxpYnJhcnkgb3IKK2V4ZWN1dGFibGUgdGhhdCBjYW4gcnVuIHN0YW5kYWxvbmUgb24gV2luZG93cyB3aXRob3V0IGFueSB0aGlyZCBwYXJ0eSBkbGwgb3IKK2xpY2Vuc2luZyBpc3N1ZXMuCisKK0J1dCB0aGVyZSBpcyBtb3JlIGNvbXBsaWNhdGlvbjoKKworSWYgYSBDeWd3aW4gdXNlciB1c2VzIHRoZSAtbW5vLWN5Z3dpbiBDeWd3aW4gZ2NjIGZsYWcsIHdoYXQgdGhhdCByZWFsbHkgZG9lcyBpcwordG8gdGVsbCBDeWd3aW4ncyBnY2MgdG8gdXNlIHRoZSBNaW5HVyBnY2MuIEN5Z3dpbidzIGdjYyBpcyBvbmx5IGFjdGluZyBhcyBhCitmcm9udCBlbmQgdG8gTWluR1cncyBnY2MgKGlmIHlvdSBpbnN0YWxsIEN5Z3dpbidzIGdjYywgeW91IGdldCBib3RoIEN5Z3dpbidzCitnY2MgYW5kIE1pbkdXJ3MgZ2NjKS4gU28sIGEgdXNlciBjYW46CisKKy4gQnVpbGQgbmF0aXZlIGJpbmFyaWVzIGJ5IHVzaW5nIE1pbkdXIG9yIGJ5IGdldHRpbmcgQ3lnd2luIGFuZCB1c2luZworICAtbW5vLWN5Z3dpbi4KKworLiBCdWlsZCBiaW5hcmllcyB0aGF0IGRlcGVuZCBvbiBjeWd3aW4xLmRsbCBieSB1c2luZyBDeWd3aW4gd2l0aCB0aGUgbm9ybWFsCisgIGNvbXBpbGVyIGZsYWdzLgorCitUaGUgdGVzdCBmaWxlcyB0aGF0IGFyZSBzdXBwbGllZCB3aXRoIFBDUkUyIGFyZSBpbiBVTklYIGZvcm1hdCwgd2l0aCBMRgorY2hhcmFjdGVycyBhcyBsaW5lIHRlcm1pbmF0b3JzLiBVbmxlc3MgeW91ciBQQ1JFMiBsaWJyYXJ5IHVzZXMgYSBkZWZhdWx0CituZXdsaW5lIG9wdGlvbiB0aGF0IGluY2x1ZGVzIExGIGFzIGEgdmFsaWQgbmV3bGluZSwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0bworY2hhbmdlIHRoZSBsaW5lIHRlcm1pbmF0b3JzIGluIHRoZSB0ZXN0IGZpbGVzIHRvIGdldCBzb21lIG9mIHRoZSB0ZXN0cyB0byB3b3JrLgorCisKK0JVSUxESU5HIFBDUkUyIE9OIFdJTkRPV1MgV0lUSCBDTUFLRQorCitDTWFrZSBpcyBhbiBhbHRlcm5hdGl2ZSBjb25maWd1cmF0aW9uIGZhY2lsaXR5IHRoYXQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZgorImNvbmZpZ3VyZSIuIENNYWtlIGNyZWF0ZXMgcHJvamVjdCBmaWxlcyAobWFrZSBmaWxlcywgc29sdXRpb24gZmlsZXMsIGV0Yy4pCit0YWlsb3JlZCB0byBudW1lcm91cyBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMsIGluY2x1ZGluZyBWaXN1YWwgU3R1ZGlvLAorQm9ybGFuZCwgTXN5cywgTWluR1csIE5NYWtlLCBhbmQgVW5peC4gSWYgcG9zc2libGUsIHVzZSBzaG9ydCBwYXRocyB3aXRoIG5vCitzcGFjZXMgaW4gdGhlIG5hbWVzIGZvciB5b3VyIENNYWtlIGluc3RhbGxhdGlvbiBhbmQgeW91ciBQQ1JFMiBzb3VyY2UgYW5kIGJ1aWxkCitkaXJlY3Rvcmllcy4KKworVGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgd2VyZSBjb250cmlidXRlZCBieSBhIFBDUkUxIHVzZXIsIGJ1dCB0aGV5IHNob3VsZAorYWxzbyB3b3JrIGZvciBQQ1JFMi4gSWYgdGhleSBhcmUgbm90IGZvbGxvd2VkIGV4YWN0bHksIGVycm9ycyBtYXkgb2NjdXIuIEluIHRoZQorZXZlbnQgdGhhdCBlcnJvcnMgZG8gb2NjdXIsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRlbGV0ZSB0aGUgQ01ha2UgY2FjaGUKK2JlZm9yZSBhdHRlbXB0aW5nIHRvIHJlcGVhdCB0aGUgQ01ha2UgYnVpbGQgcHJvY2Vzcy4gSW4gdGhlIENNYWtlIEdVSSwgdGhlCitjYWNoZSBjYW4gYmUgZGVsZXRlZCBieSBzZWxlY3RpbmcgIkZpbGUgPiBEZWxldGUgQ2FjaGUiLgorCisxLiAgSW5zdGFsbCB0aGUgbGF0ZXN0IENNYWtlIHZlcnNpb24gYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5jbWFrZS5vcmcvLCBhbmQKKyAgICBlbnN1cmUgdGhhdCBjbWFrZVxiaW4gaXMgb24geW91ciBwYXRoLgorCisyLiAgVW56aXAgKHJldGFpbmluZyBmb2xkZXIgc3RydWN0dXJlKSB0aGUgUENSRTIgc291cmNlIHRyZWUgaW50byBhIHNvdXJjZQorICAgIGRpcmVjdG9yeSBzdWNoIGFzIEM6XHBjcmUyLiBZb3Ugc2hvdWxkIGVuc3VyZSB5b3VyIGxvY2FsIGRhdGUgYW5kIHRpbWUKKyAgICBpcyBub3QgZWFybGllciB0aGFuIHRoZSBmaWxlIGRhdGVzIGluIHlvdXIgc291cmNlIGRpciBpZiB0aGUgcmVsZWFzZSBpcworICAgIHZlcnkgbmV3LgorCiszLiAgQ3JlYXRlIGEgbmV3LCBlbXB0eSBidWlsZCBkaXJlY3RvcnksIHByZWZlcmFibHkgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgc291cmNlIGRpci4gRm9yIGV4YW1wbGUsIEM6XHBjcmUyXHBjcmUyLXh4XGJ1aWxkLgorCis0LiAgUnVuIGNtYWtlLWd1aSBmcm9tIHRoZSBTaGVsbCBlbnZpcm9ybm1lbnQgb2YgeW91ciBidWlsZCB0b29sLCBmb3IgZXhhbXBsZSwKKyAgICBNc3lzIGZvciBNc3lzL01pbkdXIG9yIFZpc3VhbCBTdHVkaW8gQ29tbWFuZCBQcm9tcHQgZm9yIFZDL1ZDKysuIERvIG5vdCB0cnkKKyAgICB0byBzdGFydCBDbWFrZSBmcm9tIHRoZSBXaW5kb3dzIFN0YXJ0IG1lbnUsIGFzIHRoaXMgY2FuIGxlYWQgdG8gZXJyb3JzLgorCis1LiAgRW50ZXIgQzpccGNyZTJccGNyZTIteHggYW5kIEM6XHBjcmUyXHBjcmUyLXh4XGJ1aWxkIGZvciB0aGUgc291cmNlIGFuZAorICAgIGJ1aWxkIGRpcmVjdG9yaWVzLCByZXNwZWN0aXZlbHkuCisKKzYuICBIaXQgdGhlICJDb25maWd1cmUiIGJ1dHRvbi4KKworNy4gIFNlbGVjdCB0aGUgcGFydGljdWxhciBJREUgLyBidWlsZCB0b29sIHRoYXQgeW91IGFyZSB1c2luZyAoVmlzdWFsCisgICAgU3R1ZGlvLCBNU1lTIG1ha2VmaWxlcywgTWluR1cgbWFrZWZpbGVzLCBldGMuKQorCis4LiAgVGhlIEdVSSB3aWxsIHRoZW4gbGlzdCBzZXZlcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyBpcyB3aGVyZQorICAgIHlvdSBjYW4gZGlzYWJsZSBVbmljb2RlIHN1cHBvcnQgb3Igc2VsZWN0IG90aGVyIFBDUkUyIG9wdGlvbmFsIGZlYXR1cmVzLgorCis5LiAgSGl0ICJDb25maWd1cmUiIGFnYWluLiBUaGUgYWRqYWNlbnQgIkdlbmVyYXRlIiBidXR0b24gc2hvdWxkIG5vdyBiZQorICAgIGFjdGl2ZS4KKworMTAuIEhpdCAiR2VuZXJhdGUiLgorCisxMS4gVGhlIGJ1aWxkIGRpcmVjdG9yeSBzaG91bGQgbm93IGNvbnRhaW4gYSB1c2FibGUgYnVpbGQgc3lzdGVtLCBiZSBpdCBhCisgICAgc29sdXRpb24gZmlsZSBmb3IgVmlzdWFsIFN0dWRpbywgbWFrZWZpbGVzIGZvciBNaW5HVywgZXRjLiBFeGl0IGZyb20KKyAgICBjbWFrZS1ndWkgYW5kIHVzZSB0aGUgZ2VuZXJhdGVkIGJ1aWxkIHN5c3RlbSB3aXRoIHlvdXIgY29tcGlsZXIgb3IgSURFLgorICAgIEUuZy4sIGZvciBNaW5HVyB5b3UgY2FuIHJ1biAibWFrZSIsIG9yIGZvciBWaXN1YWwgU3R1ZGlvLCBvcGVuIHRoZSBQQ1JFMgorICAgIHNvbHV0aW9uLCBzZWxlY3QgdGhlIGRlc2lyZWQgY29uZmlndXJhdGlvbiAoRGVidWcsIG9yIFJlbGVhc2UsIGV0Yy4pIGFuZAorICAgIGJ1aWxkIHRoZSBBTExfQlVJTEQgcHJvamVjdC4KKworMTIuIElmIGR1cmluZyBjb25maWd1cmF0aW9uIHdpdGggY21ha2UtZ3VpIHlvdSd2ZSBlbGVjdGVkIHRvIGJ1aWxkIHRoZSB0ZXN0CisgICAgcHJvZ3JhbXMsIHlvdSBjYW4gZXhlY3V0ZSB0aGVtIGJ5IGJ1aWxkaW5nIHRoZSB0ZXN0IHByb2plY3QuIEUuZy4sIGZvcgorICAgIE1pbkdXOiAibWFrZSB0ZXN0IjsgZm9yIFZpc3VhbCBTdHVkaW8gYnVpbGQgdGhlIFJVTl9URVNUUyBwcm9qZWN0LiBUaGUKKyAgICBtb3N0IHJlY2VudCBidWlsZCBjb25maWd1cmF0aW9uIGlzIHRhcmdldGVkIGJ5IHRoZSB0ZXN0cy4gQSBzdW1tYXJ5IG9mCisgICAgdGVzdCByZXN1bHRzIGlzIHByZXNlbnRlZC4gQ29tcGxldGUgdGVzdCBvdXRwdXQgaXMgc3Vic2VxdWVudGx5CisgICAgYXZhaWxhYmxlIGZvciByZXZpZXcgaW4gVGVzdGluZ1xUZW1wb3JhcnkgdW5kZXIgeW91ciBidWlsZCBkaXIuCisKKworVEVTVElORyBXSVRIIFJVTlRFU1QuQkFUCisKK0lmIGNvbmZpZ3VyZWQgd2l0aCBDTWFrZSwgYnVpbGRpbmcgdGhlIHRlc3QgcHJvamVjdCAoIm1ha2UgdGVzdCIgb3IgYnVpbGRpbmcKK0FMTF9URVNUUyBpbiBWaXN1YWwgU3R1ZGlvKSBjcmVhdGVzIChhbmQgcnVucykgcGNyZTJfdGVzdC5iYXQgKGFuZCBkZXBlbmRpbmcKK29uIHlvdXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwb3NzaWJseSBvdGhlciB0ZXN0IHByb2dyYW1zKSBpbiB0aGUgYnVpbGQKK2RpcmVjdG9yeS4gVGhlIHBjcmUyX3Rlc3QuYmF0IHNjcmlwdCBydW5zIFJ1blRlc3QuYmF0IHdpdGggY29ycmVjdCBzb3VyY2UgYW5kCitleGUgcGF0aHMuCisKK0ZvciBtYW51YWwgdGVzdGluZyB3aXRoIFJ1blRlc3QuYmF0LCBwcm92aWRlZCB0aGUgYnVpbGQgZGlyIGlzIGEgc3ViZGlyZWN0b3J5CitvZiB0aGUgc291cmNlIGRpcmVjdG9yeTogT3BlbiBjb21tYW5kIHNoZWxsIHdpbmRvdy4gQ2hkaXIgdG8gdGhlIGxvY2F0aW9uCitvZiB5b3VyIHBjcmUydGVzdC5leGUgYW5kIHBjcmUyZ3JlcC5leGUgcHJvZ3JhbXMuIENhbGwgUnVuVGVzdC5iYXQgd2l0aAorIi4uXFJ1blRlc3QuQmF0IiBvciAiLi5cLi5cUnVuVGVzdC5iYXQiIGFzIGFwcHJvcHJpYXRlLgorCitUbyBydW4gb25seSBhIHBhcnRpY3VsYXIgdGVzdCB3aXRoIFJ1blRlc3QuQmF0IHByb3ZpZGUgYSB0ZXN0IG51bWJlciBhcmd1bWVudC4KKworT3RoZXJ3aXNlOgorCisxLiBDb3B5IFJ1blRlc3QuYmF0IGludG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBwY3JlMnRlc3QuZXhlIGFuZCBwY3JlMmdyZXAuZXhlCisgICBoYXZlIGJlZW4gY3JlYXRlZC4KKworMi4gRWRpdCBSdW5UZXN0LmJhdCB0byBpbmRlbnRpZnkgdGhlIGZ1bGwgb3IgcmVsYXRpdmUgbG9jYXRpb24gb2YKKyAgIHRoZSBwY3JlMiBzb3VyY2UgKHdoZXJlaW4gd2hpY2ggdGhlIHRlc3RkYXRhIGZvbGRlciByZXNpZGVzKSwgZS5nLjoKKworICAgc2V0IHNyY2Rpcj1DOlxwY3JlMlxwY3JlMi0xMC4wMAorCiszLiBJbiBhIFdpbmRvd3MgY29tbWFuZCBlbnZpcm9ubWVudCwgY2hkaXIgdG8gdGhlIGxvY2F0aW9uIG9mIHlvdXIgYmF0IGFuZAorICAgZXhlIHByb2dyYW1zLgorCis0LiBSdW4gUnVuVGVzdC5iYXQuIFRlc3Qgb3V0cHV0cyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY29tcGFyZWQgdG8gZXhwZWN0ZWQKKyAgIHJlc3VsdHMsIGFuZCBkaXNjcmVwYW5jaWVzIHdpbGwgYmUgaWRlbnRpZmllZCBpbiB0aGUgY29uc29sZSBvdXRwdXQuCisKK1RvIGluZGVwZW5kZW50bHkgdGVzdCB0aGUganVzdC1pbi10aW1lIGNvbXBpbGVyLCBydW4gcGNyZTJfaml0X3Rlc3QuZXhlLgorCisKK0JVSUxESU5HIFBDUkUyIE9OIE5BVElWRSBaL09TIEFORCBaL1ZNCisKK3ovT1MgYW5kIHovVk0gYXJlIG9wZXJhdGluZyBzeXN0ZW1zIGZvciBtYWluZnJhbWUgY29tcHV0ZXJzLCBwcm9kdWNlZCBieSBJQk0uCitUaGUgY2hhcmFjdGVyIGNvZGUgdXNlZCBpcyBFQkNESUMsIG5vdCBBU0NJSSBvciBVbmljb2RlLiBJbiB6L09TLCBVTklYIEFQSXMgYW5kCithcHBsaWNhdGlvbnMgY2FuIGJlIHN1cHBvcnRlZCB0aHJvdWdoIFVOSVggU3lzdGVtIFNlcnZpY2VzLCBhbmQgaW4gc3VjaCBhbgorZW52aXJvbm1lbnQgUENSRTIgY2FuIGJlIGJ1aWx0IGluIHRoZSBzYW1lIHdheSBhcyBpbiBvdGhlciBzeXN0ZW1zLiBIb3dldmVyLCBpbgorbmF0aXZlIHovT1MgKHdpdGhvdXQgVU5JWCBTeXN0ZW0gU2VydmljZXMpIGFuZCBpbiB6L1ZNLCBzcGVjaWFsIHBvcnRzIGFyZQorcmVxdWlyZWQuIEZvciBkZXRhaWxzLCBwbGVhc2Ugc2VlIHRoaXMgd2ViIHNpdGU6CisKKyAgaHR0cDovL3d3dy56YWNvbnN1bHRhbnRzLm5ldAorCitUaGUgc2l0ZSBjdXJyZW50bHkgaGFzIHBvcnRzIGZvciBQQ1JFMSByZWxlYXNlcywgYnV0IFBDUkUyIHNob3VsZCBmb2xsb3cgaW4gZHVlCitjb3Vyc2UuCisKK1lvdSBtYXkgYWxzbyBkb3dubG9hZCBQQ1JFMSBmcm9tIFdXVy5DQlRUQVBFLk9SRyzCoGZpbGUgODgyLiBFdmVyeXRoaW5nLCBzb3VyY2UKK2FuZCBleGVjdXRhYmxlLCBpcyBpbiBFQkNESUMgYW5kIG5hdGl2ZSB6L09TIGZpbGUgZm9ybWF0cyBhbmQgdGhpcyBpcyB0aGUKK3JlY29tbWVuZGVkIGRvd25sb2FkIHNpdGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMYXN0IFVwZGF0ZWQ6IDE2IEp1bHkgMjAxNQpkaWZmIC0tZ2l0IGEvZGlzdDIvUHJlcGFyZVJlbGVhc2UgYi9kaXN0Mi9QcmVwYXJlUmVsZWFzZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xMTRmY2UwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvUHJlcGFyZVJlbGVhc2UKQEAgLTAsMCArMSwyMzUgQEAKKyMvYmluL3NoCisKKyMgU2NyaXB0IHRvIHByZXBhcmUgdGhlIGZpbGVzIGZvciBidWlsZGluZyBhIFBDUkUyIHJlbGVhc2UuIEl0IGRvZXMgc29tZQorIyBwcm9jZXNzaW5nIG9mIHRoZSBkb2N1bWVudGF0aW9uLCBkZXRyYWlscyBmaWxlcywgYW5kIGNyZWF0ZXMgcGNyZTIuaC5nZW5lcmljCisjIGFuZCBjb25maWcuaC5nZW5lcmljIChmb3IgdXNlIGJ5IGJ1aWxkZXJzIHdobyBjYW4ndCBydW4gLi9jb25maWd1cmUpLgorCisjIFlvdSBtdXN0IHJ1biB0aGlzIHNjcmlwdCBiZWZvcmUgcnVubm5pbmcgIm1ha2UgZGlzdCIuIElmIGl0cyBmaXJzdCBhcmd1bWVudAorIyBpcyAiZG9jIiwgaXQgc3RvcHMgYWZ0ZXIgcHJlcGFyaW5nIHRoZSBkb2N1bWVudGF0aW9uLiBUaGVyZSBhcmUgbm8gb3RoZXIKKyMgYXJndW1lbnRzLiBUaGUgc2NyaXB0IG1ha2VzIHVzZSBvZiB0aGUgZm9sbG93aW5nIGZpbGVzOgorCisjIDEzMmh0bWwgICAgIEEgUGVybCBzY3JpcHQgdGhhdCBjb252ZXJ0cyBhIC4xIG9yIC4zIG1hbiBwYWdlIGludG8gSFRNTC4gSXQKKyMgICAgICAgICAgICAgImtub3dzIiB0aGUgcmVsZXZhbnQgdHJvZmYgY29uc3RydWN0cyB0aGF0IGFyZSB1c2VkIGluIHRoZSBQQ1JFMgorIyAgICAgICAgICAgICBtYW4gcGFnZXMuCisKKyMgQ2hlY2tNYW4gICAgQSBQZXJsIHNjcmlwdCB0aGF0IGNoZWNrcyBtYW4gcGFnZXMgZm9yIHR5cG9zIGluIHRoZSBtYXJrIHVwLgorCisjIENsZWFuVHh0ICAgIEEgUGVybCBzY3JpcHQgdGhhdCBjbGVhbnMgdXAgdGhlIG91dHB1dCBvZiAibnJvZmYgLW1hbiIgYnkKKyMgICAgICAgICAgICAgcmVtb3ZpbmcgYmFja3NwYWNlcyBhbmQgb3RoZXIgcmVkdW5kYW50IHRleHQgc28gYXMgdG8gcHJvZHVjZQorIyAgICAgICAgICAgICBhIHJlYWRhYmxlIC50eHQgZmlsZS4KKworIyBEZXRyYWlsICAgICBBIFBlcmwgc2NyaXB0IHRoYXQgcmVtb3ZlcyB0cmFpbGluZyBzcGFjZXMgZnJvbSBmaWxlcy4KKworIyBkb2MvaW5kZXguaHRtbC5zcmMKKyMgICAgICAgICAgICAgQSBmaWxlIHRoYXQgaXMgY29waWVkIGFzIGluZGV4Lmh0bWwgaW50byB0aGUgZG9jL2h0bWwgZGlyZWN0b3J5CisjICAgICAgICAgICAgIHdoZW4gdGhlIEhUTUwgZG9jdW1lbnRhdGlvbiBpcyBidWlsdC4gSXQgd29ya3MgbGlrZSB0aGlzIHNvIHRoYXQKKyMgICAgICAgICAgICAgZG9jL2h0bWwgY2FuIGJlIGRlbGV0ZWQgYW5kIHJlLWNyZWF0ZWQgZnJvbSBzY3JhdGNoLgorCisjIFJFQURNRSAmIE5PTi1BVVRPVE9PTFMtQlVJTEQKKyMgICAgICAgICAgICAgVGhlc2UgZmlsZXMgYXJlIGNvcGllZCBpbnRvIHRoZSBkb2MvaHRtbCBkaXJlY3RvcnksIHdpdGggLnR4dAorIyAgICAgICAgICAgICBleHRlbnNpb25zIHNvIHRoYXQgdGhleSBjYW4gYnkgaHlwZXJsaW5rZWQgZnJvbSB0aGUgSFRNTAorIyAgICAgICAgICAgICBkb2N1bWVudGF0aW9uLCBiZWNhdXNlIHNvbWUgcGVvcGxlIGp1c3QgZ28gdG8gdGhlIEhUTUwgd2l0aG91dAorIyAgICAgICAgICAgICBsb29raW5nIGZvciB0ZXh0IGZpbGVzLgorCisKKyMgRmlyc3QsIHNvcnQgb3V0IHRoZSBkb2N1bWVudGF0aW9uLiBSZW1vdmUgcGNyZTJkZW1vLjMgZmlyc3QgYmVjYXVzZSBpdCB3b24ndAorIyBwYXNzIHRoZSBtYXJrdXAgY2hlY2sgKGl0IGlzIGNyZWF0ZWQgYmVsb3csIHVzaW5nIG1hcmt1cCB0aGF0IG5vbmUgb2YgdGhlCisjIG90aGVyIHBhZ2VzIHVzZSkuCisKK2NkIGRvYworZWNobyBQcm9jZXNzaW5nIGRvY3VtZW50YXRpb24KKworL2Jpbi9ybSAtZiBwY3JlMmRlbW8uMworCisjIENoZWNrIHRoZSByZW1haW5pbmcgbWFuIHBhZ2VzCisKK3BlcmwgLi4vQ2hlY2tNYW4gKi4xICouMworaWYgWyAkPyAhPSAwIF0gOyB0aGVuIGV4aXQgMTsgZmkKKworIyBNYWtlIFRleHQgZm9ybSBvZiB0aGUgZG9jdW1lbnRhdGlvbi4gSXQgbmVlZHMgc29tZSBtYW5nbGluZyB0byBtYWtlIGl0CisjIHRpZHkgZm9yIG9ubGluZSByZWFkaW5nLiBDb25jYXRlbmF0ZSBhbGwgdGhlIC4zIHN0dWZmLCBidXQgb21pdCB0aGUKKyMgaW5kaXZpZHVhbCBmdW5jdGlvbiBwYWdlcy4KKworY2F0IDw8RW5kID5wY3JlMi50eHQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGZpbGUgY29udGFpbnMgYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBQQ1JFMiBtYW4gcGFnZXMsIGNvbnZlcnRlZCB0byBwbGFpbgordGV4dCBmb3JtYXQgZm9yIGVhc2Ugb2Ygc2VhcmNoaW5nIHdpdGggYSB0ZXh0IGVkaXRvciwgb3IgZm9yIHVzZSBvbiBzeXN0ZW1zCit0aGF0IGRvIG5vdCBoYXZlIGEgbWFuIHBhZ2UgcHJvY2Vzc29yLiBUaGUgc21hbGwgaW5kaXZpZHVhbCBmaWxlcyB0aGF0IGdpdmUKK3N5bm9wc2VzIG9mIGVhY2ggZnVuY3Rpb24gaW4gdGhlIGxpYnJhcnkgaGF2ZSBub3QgYmVlbiBpbmNsdWRlZC4gTmVpdGhlciBoYXMKK3RoZSBwY3JlMmRlbW8gcHJvZ3JhbS4gVGhlcmUgYXJlIHNlcGFyYXRlIHRleHQgZmlsZXMgZm9yIHRoZSBwY3JlMmdyZXAgYW5kCitwY3JlMnRlc3QgY29tbWFuZHMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0VuZAorCitlY2hvICJNYWtpbmcgcGNyZTIudHh0IgorZm9yIGZpbGUgaW4gcGNyZTIgcGNyZTJhcGkgcGNyZTJidWlsZCBwY3JlMmNhbGxvdXQgcGNyZTJjb21wYXQgcGNyZTJqaXQgXAorICAgICAgICAgICAgcGNyZTJsaW1pdHMgcGNyZTJtYXRjaGluZyBwY3JlMnBhcnRpYWwgcGNyZTJwYXR0ZXJuIHBjcmUycGVyZm9ybSBcCisgICAgICAgICAgICBwY3JlMnBvc2l4IHBjcmUyc2FtcGxlIHBjcmUyc2VyaWFsaXplIHBjcmUyc3RhY2sgcGNyZTJzeW50YXggXAorICAgICAgICAgICAgcGNyZTJ1bmljb2RlIDsgZG8KKyAgZWNobyAiICBQcm9jZXNzaW5nICRmaWxlLjMiCisgIG5yb2ZmIC1jIC1tYW4gJGZpbGUuMyA+JGZpbGUucmF3dHh0CisgIHBlcmwgLi4vQ2xlYW5UeHQgPCRmaWxlLnJhd3R4dCA+PnBjcmUyLnR4dAorICAvYmluL3JtICRmaWxlLnJhd3R4dAorICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+cGNyZTIudHh0CisgIGlmIFsgIiRmaWxlIiAhPSAicGNyZTJzYW1wbGUiIF0gOyB0aGVuCisgICAgZWNobyAiICIgPj5wY3JlMi50eHQKKyAgICBlY2hvICIgIiA+PnBjcmUyLnR4dAorICBmaQorZG9uZQorCisjIFRoZSB0aHJlZSBjb21tYW5kcworZm9yIGZpbGUgaW4gcGNyZTJ0ZXN0IHBjcmUyZ3JlcCBwY3JlMi1jb25maWcgOyBkbworICBlY2hvIE1ha2luZyAkZmlsZS50eHQKKyAgbnJvZmYgLWMgLW1hbiAkZmlsZS4xID4kZmlsZS5yYXd0eHQKKyAgcGVybCAuLi9DbGVhblR4dCA8JGZpbGUucmF3dHh0ID4kZmlsZS50eHQKKyAgL2Jpbi9ybSAkZmlsZS5yYXd0eHQKK2RvbmUKKworCisjIE1ha2UgcGNyZTJkZW1vLjMgZnJvbSB0aGUgcGNyZTJkZW1vLmMgc291cmNlIGZpbGUKKworZWNobyAiTWFraW5nIHBjcmUyZGVtby4zIgorcGVybCA8PCJFTkQiID5wY3JlMmRlbW8uMworICBvcGVuKElOLCAiLi4vc3JjL3BjcmUyZGVtby5jIikgfHwgZGllICJGYWlsZWQgdG8gb3BlbiBzcmMvcGNyZTJkZW1vLmNcbiI7CisgIG9wZW4oT1VULCAiPnBjcmUyZGVtby4zIikgfHwgZGllICJGYWlsZWQgdG8gb3BlbiBwY3JlMmRlbW8uM1xuIjsKKyAgcHJpbnQgT1VUICIuXFxcIiBTdGFydCBleGFtcGxlLlxuIiAuCisgICAgICAgICAgICAiLmRlIEVYXG4iIC4KKyAgICAgICAgICAgICIuICBuciBtRSBcXFxcbiguZlxuIiAuCisgICAgICAgICAgICAiLiAgbmZcbiIgLgorICAgICAgICAgICAgIi4gIG5oXG4iIC4KKyAgICAgICAgICAgICIuICBmdCBDV1xuIiAuCisgICAgICAgICAgICAiLi5cbiIgLgorICAgICAgICAgICAgIi5cbiIgLgorICAgICAgICAgICAgIi5cbiIgLgorICAgICAgICAgICAgIi5cXFwiIEVuZCBleGFtcGxlLlxuIiAuCisgICAgICAgICAgICAiLmRlIEVFXG4iIC4KKyAgICAgICAgICAgICIuICBmdCBcXFxcbihtRVxuIiAuCisgICAgICAgICAgICAiLiAgZmlcbiIgLgorICAgICAgICAgICAgIi4gIGh5IFxcXFxuKEhZXG4iIC4KKyAgICAgICAgICAgICIuLlxuIiAuCisgICAgICAgICAgICAiLlxuIiAuCisgICAgICAgICAgICAiLkVYXG4iIDsKKyAgd2hpbGUgKDxJTj4pCisgICAgeworICAgIHMvXFwvXFxlL2c7CisgICAgcHJpbnQgT1VUOworICAgIH0KKyAgcHJpbnQgT1VUICIuRUVcbiI7CisgIGNsb3NlKElOKTsKKyAgY2xvc2UoT1VUKTsKK0VORAoraWYgWyAkPyAhPSAwIF0gOyB0aGVuIGV4aXQgMTsgZmkKKworCisjIE1ha2UgSFRNTCBmb3JtIG9mIHRoZSBkb2N1bWVudGF0aW9uLgorCitlY2hvICJNYWtpbmcgSFRNTCBkb2N1bWVudGF0aW9uIgorL2Jpbi9ybSBodG1sLyoKK2NwIGluZGV4Lmh0bWwuc3JjIGh0bWwvaW5kZXguaHRtbAorY3AgLi4vUkVBRE1FIGh0bWwvUkVBRE1FLnR4dAorY3AgLi4vTk9OLUFVVE9UT09MUy1CVUlMRCBodG1sL05PTi1BVVRPVE9PTFMtQlVJTEQudHh0CisKK2ZvciBmaWxlIGluICouMSA7IGRvCisgIGJhc2U9YGJhc2VuYW1lICRmaWxlIC4xYAorICBlY2hvICIgIE1ha2luZyAkYmFzZS5odG1sIgorICBwZXJsIC4uLzEzMmh0bWwgLXRvYyAkYmFzZSA8JGZpbGUgPmh0bWwvJGJhc2UuaHRtbAorZG9uZQorCisjIEV4Y2x1ZGUgdGFibGUgb2YgY29udGVudHMgZm9yIGZ1bmN0aW9uIHN1bW1hcmllcy4gSXQgc2VlbXMgdGhhdCBleHByCisjIGZvcmNlcyBhbiBhbmNob3JlZCByZWdleC4gQWxzbyBleGNsdWRlIHRoZW0gZm9yIHNtYWxsIHBhZ2VzIHRoYXQgaGF2ZQorIyBvbmx5IG9uZSBzZWN0aW9uLgorCitmb3IgZmlsZSBpbiAqLjMgOyBkbworICBiYXNlPWBiYXNlbmFtZSAkZmlsZSAuM2AKKyAgdG9jPS10b2MKKyAgaWYgWyBgZXhwciAkYmFzZSA6ICcuKl8nYCAtbmUgMCBdIDsgdGhlbiB0b2M9IiIgOyBmaQorICBpZiBbICIkYmFzZSIgPSAicGNyZTJzYW1wbGUiIF0gIHx8IFwKKyAgICAgWyAiJGJhc2UiID0gInBjcmUyc3RhY2siIF0gICB8fCBcCisgICAgIFsgIiRiYXNlIiA9ICJwY3JlMmNvbXBhdCIgXSAgfHwgXAorICAgICBbICIkYmFzZSIgPSAicGNyZTJsaW1pdHMiIF0gIHx8IFwKKyAgICAgWyAiJGJhc2UiID0gInBjcmUydW5pY29kZSIgXSA7IHRoZW4KKyAgICB0b2M9IiIKKyAgZmkKKyAgZWNobyAiICBNYWtpbmcgJGJhc2UuaHRtbCIKKyAgcGVybCAuLi8xMzJodG1sICR0b2MgJGJhc2UgPCRmaWxlID5odG1sLyRiYXNlLmh0bWwKKyAgaWYgWyAkPyAhPSAwIF0gOyB0aGVuIGV4aXQgMTsgZmkKK2RvbmUKKworIyBFbmQgb2YgZG9jdW1lbnRhdGlvbiBwcm9jZXNzaW5nOyBzdG9wIGlmIG9ubHkgZG9jdW1lbnRhdGlvbiByZXF1aXJlZC4KKworY2QgLi4KK2VjaG8gRG9jdW1lbnRhdGlvbiBkb25lCitpZiBbICIkMSIgPSAiZG9jIiBdIDsgdGhlbiBleGl0OyBmaQorCisjIFRoZXNlIGZpbGVzIGFyZSBkZXRyYWlsZWQ7IGRvIG5vdCBkZXRyYWlsIHRoZSB0ZXN0IGRhdGEgYmVjYXVzZSB0aGVyZSBtYXkgYmUKKyMgc2lnbmlmaWNhbnQgdHJhaWxpbmcgc3BhY2VzLiBEbyBub3QgZGV0cmFpbCBSdW5UZXN0LmJhdCwgYmVjYXVzZSBpdCBoYXMgQ1JMRgorIyBsaW5lIGVuZGluZ3MgYW5kIHRoZSBkZXRyYWlsIHNjcmlwdCByZW1vdmVzIGFsbCB0cmFpbGluZyB3aGl0ZSBzcGFjZS4gVGhlCisjIGNvbmZpZ3VyZSBmaWxlcyBhcmUgYWxzbyBvbWl0dGVkIGZyb20gdGhlIGRldHJhaWxpbmcuCisKK2ZpbGVzPSJcCisgIE1ha2VmaWxlLmFtIFwKKyAgY29uZmlndXJlLmFjIFwKKyAgUkVBRE1FIFwKKyAgTElDRU5DRSBcCisgIENPUFlJTkcgXAorICBBVVRIT1JTIFwKKyAgTkVXUyBcCisgIE5PTi1BVVRPVE9PTFMtQlVJTEQgXAorICBJTlNUQUxMIFwKKyAgMTMyaHRtbCBcCisgIENsZWFuVHh0IFwKKyAgRGV0cmFpbCBcCisgIENoYW5nZUxvZyBcCisgIENNYWtlTGlzdHMudHh0IFwKKyAgUnVuR3JlcFRlc3QgXAorICBSdW5UZXN0IFwKKyAgcGNyZTItY29uZmlnLmluIFwKKyAgcGVybHRlc3Quc2ggXAorICBsaWJwY3JlMi04LnBjLmluIFwKKyAgbGlicGNyZTItMTYucGMuaW4gXAorICBsaWJwY3JlMi0zMi5wYy5pbiBcCisgIGxpYnBjcmUyLXBvc2l4LnBjLmluIFwKKyAgc3JjL2RmdGFibGVzLmMgXAorICBzcmMvcGNyZTIuaC5pbiBcCisgIHNyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYyBcCisgIHNyYy9wY3JlMl9jb21waWxlLmMgXAorICBzcmMvcGNyZTJfY29uZmlnLmMgXAorICBzcmMvcGNyZTJfY29udGV4dC5jIFwKKyAgc3JjL3BjcmUyX2RmYV9tYXRjaC5jIFwKKyAgc3JjL3BjcmUyX2Vycm9yLmMgXAorICBzcmMvcGNyZTJfZmluZF9icmFja2V0LmMgXAorICBzcmMvcGNyZTJfaW50ZXJuYWwuaCBcCisgIHNyYy9wY3JlMl9pbnRtb2RlZGVwLmggXAorICBzcmMvcGNyZTJfaml0X2NvbXBpbGUuYyBcCisgIHNyYy9wY3JlMl9qaXRfbWF0Y2guYyBcCisgIHNyYy9wY3JlMl9qaXRfbWlzYy5jIFwKKyAgc3JjL3BjcmUyX2ppdF90ZXN0LmMgXAorICBzcmMvcGNyZTJfbWFrZXRhYmxlcy5jIFwKKyAgc3JjL3BjcmUyX21hdGNoLmMgXAorICBzcmMvcGNyZTJfbWF0Y2hfZGF0YS5jIFwKKyAgc3JjL3BjcmUyX25ld2xpbmUuYyBcCisgIHNyYy9wY3JlMl9vcmQydXRmLmMgXAorICBzcmMvcGNyZTJfcGF0dGVybl9pbmZvLmMgXAorICBzcmMvcGNyZTJfcHJpbnRpbnQuYyBcCisgIHNyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYyBcCisgIHNyYy9wY3JlMl9zdHVkeS5jIFwKKyAgc3JjL3BjcmUyX3N1YnN0cmluZy5jIFwKKyAgc3JjL3BjcmUyX3RhYmxlcy5jIFwKKyAgc3JjL3BjcmUyX3VjZC5jIFwKKyAgc3JjL3BjcmUyX3VjcC5oIFwKKyAgc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jIFwKKyAgc3JjL3BjcmUyX3hjbGFzcy5jIFwKKyAgc3JjL3BjcmUyZGVtby5jIFwKKyAgc3JjL3BjcmUyZ3JlcC5jIFwKKyAgc3JjL3BjcmUycG9zaXguYyBcCisgIHNyYy9wY3JlMnBvc2l4LmggXAorICBzcmMvcGNyZTJ0ZXN0LmMiCisKK2VjaG8gRGV0cmFpbGluZworcGVybCAuL0RldHJhaWwgJGZpbGVzIGRvYy9wKiBkb2MvaHRtbC8qCisKK2VjaG8gRG9uZQorCisjRW5kCmRpZmYgLS1naXQgYS9kaXN0Mi9SRUFETUUgYi9kaXN0Mi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkMmZmZAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL1JFQURNRQpAQCAtMCwwICsxLDg0MyBAQAorUkVBRE1FIGZpbGUgZm9yIFBDUkUyIChQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9uIGxpYnJhcnkpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUENSRTIgaXMgYSByZS13b3JraW5nIG9mIHRoZSBvcmlnaW5hbCBQQ1JFIGxpYnJhcnkgdG8gcHJvdmlkZSBhbiBlbnRpcmVseSBuZXcKK0FQSS4gVGhlIGxhdGVzdCByZWxlYXNlIG9mIFBDUkUyIGlzIGFsd2F5cyBhdmFpbGFibGUgaW4gdGhyZWUgYWx0ZXJuYXRpdmUKK2Zvcm1hdHMgZnJvbToKKworICBmdHA6Ly9mdHAuY3N4LmNhbS5hYy51ay9wdWIvc29mdHdhcmUvcHJvZ3JhbW1pbmcvcGNyZS9wY3JlMi14eHgudGFyLmd6CisgIGZ0cDovL2Z0cC5jc3guY2FtLmFjLnVrL3B1Yi9zb2Z0d2FyZS9wcm9ncmFtbWluZy9wY3JlL3BjcmUyLXh4eC50YXIuYnoyCisgIGZ0cDovL2Z0cC5jc3guY2FtLmFjLnVrL3B1Yi9zb2Z0d2FyZS9wcm9ncmFtbWluZy9wY3JlL3BjcmUyLXh4eC56aXAKKworVGhlcmUgaXMgYSBtYWlsaW5nIGxpc3QgZm9yIGRpc2N1c3Npb24gYWJvdXQgdGhlIGRldmVsb3BtZW50IG9mIFBDUkUgKGJvdGggdGhlCitvcmlnaW5hbCBhbmQgbmV3IEFQSXMpIGF0IHBjcmUtZGV2QGV4aW0ub3JnLiBZb3UgY2FuIGFjY2VzcyB0aGUgYXJjaGl2ZXMgYW5kCitzdWJzY3JpYmUgb3IgbWFuYWdlIHlvdXIgc3Vic2NyaXB0aW9uIGhlcmU6CisKKyAgIGh0dHBzOi8vbGlzdHMuZXhpbS5vcmcvbWFpbG1hbi9saXN0aW5mby9wY3JlLWRldgorCitQbGVhc2UgcmVhZCB0aGUgTkVXUyBmaWxlIGlmIHlvdSBhcmUgdXBncmFkaW5nIGZyb20gYSBwcmV2aW91cyByZWxlYXNlLgorVGhlIGNvbnRlbnRzIG9mIHRoaXMgUkVBRE1FIGZpbGUgYXJlOgorCisgIFRoZSBQQ1JFMiBBUElzCisgIERvY3VtZW50YXRpb24gZm9yIFBDUkUyCisgIENvbnRyaWJ1dGlvbnMgYnkgdXNlcnMgb2YgUENSRTIKKyAgQnVpbGRpbmcgUENSRTIgb24gbm9uLVVuaXgtbGlrZSBzeXN0ZW1zCisgIEJ1aWxkaW5nIFBDUkUyIHdpdGhvdXQgdXNpbmcgYXV0b3Rvb2xzCisgIEJ1aWxkaW5nIFBDUkUyIHVzaW5nIGF1dG90b29scworICBSZXRyaWV2aW5nIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKyAgU2hhcmVkIGxpYnJhcmllcworICBDcm9zcy1jb21waWxpbmcgdXNpbmcgYXV0b3Rvb2xzCisgIE1ha2luZyBuZXcgdGFyYmFsbHMKKyAgVGVzdGluZyBQQ1JFMgorICBDaGFyYWN0ZXIgdGFibGVzCisgIEZpbGUgbWFuaWZlc3QKKworCitUaGUgUENSRTIgQVBJcworLS0tLS0tLS0tLS0tLS0KKworUENSRTIgaXMgd3JpdHRlbiBpbiBDLCBhbmQgaXQgaGFzIGl0cyBvd24gQVBJLiBUaGVyZSBhcmUgdGhyZWUgc2V0cyBvZgorZnVuY3Rpb25zLCBvbmUgZm9yIHRoZSA4LWJpdCBsaWJyYXJ5LCB3aGljaCBwcm9jZXNzZXMgc3RyaW5ncyBvZiBieXRlcywgb25lIGZvcgordGhlIDE2LWJpdCBsaWJyYXJ5LCB3aGljaCBwcm9jZXNzZXMgc3RyaW5ncyBvZiAxNi1iaXQgdmFsdWVzLCBhbmQgb25lIGZvciB0aGUKKzMyLWJpdCBsaWJyYXJ5LCB3aGljaCBwcm9jZXNzZXMgc3RyaW5ncyBvZiAzMi1iaXQgdmFsdWVzLiBUaGVyZSBhcmUgbm8gQysrCit3cmFwcGVycy4KKworVGhlIGRpc3RyaWJ1dGlvbiBkb2VzIGNvbnRhaW4gYSBzZXQgb2YgQyB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgdGhlIDgtYml0CitsaWJyYXJ5IHRoYXQgYXJlIGJhc2VkIG9uIHRoZSBQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24gQVBJIChzZWUgdGhlIHBjcmUycG9zaXgKK21hbiBwYWdlKS4gVGhlc2UgY2FuIGJlIGZvdW5kIGluIGEgbGlicmFyeSBjYWxsZWQgbGlicGNyZTJwb3NpeC4gTm90ZSB0aGF0IHRoaXMKK2p1c3QgcHJvdmlkZXMgYSBQT1NJWCBjYWxsaW5nIGludGVyZmFjZSB0byBQQ1JFMjsgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKK3RoZW1zZWx2ZXMgc3RpbGwgZm9sbG93IFBlcmwgc3ludGF4IGFuZCBzZW1hbnRpY3MuIFRoZSBQT1NJWCBBUEkgaXMgcmVzdHJpY3RlZCwKK2FuZCBkb2VzIG5vdCBnaXZlIGZ1bGwgYWNjZXNzIHRvIGFsbCBvZiBQQ1JFMidzIGZhY2lsaXRpZXMuCisKK1RoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIFBPU0lYLXN0eWxlIGZ1bmN0aW9ucyBpcyBjYWxsZWQgcGNyZTJwb3NpeC5oLiBUaGUKK29mZmljaWFsIFBPU0lYIG5hbWUgaXMgcmVnZXguaCwgYnV0IEkgZGlkIG5vdCB3YW50IHRvIHJpc2sgcG9zc2libGUgcHJvYmxlbXMKK3dpdGggZXhpc3RpbmcgZmlsZXMgb2YgdGhhdCBuYW1lIGJ5IGRpc3RyaWJ1dGluZyBpdCB0aGF0IHdheS4gVG8gdXNlIFBDUkUyIHdpdGgKK2FuIGV4aXN0aW5nIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBQT1NJWCBBUEksIHBjcmUycG9zaXguaCB3aWxsIGhhdmUgdG8gYmUKK3JlbmFtZWQgb3IgcG9pbnRlZCBhdCBieSBhIGxpbmsuCisKK0lmIHlvdSBhcmUgdXNpbmcgdGhlIFBPU0lYIGludGVyZmFjZSB0byBQQ1JFMiBhbmQgdGhlcmUgaXMgYWxyZWFkeSBhIFBPU0lYCityZWdleCBsaWJyYXJ5IGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbSwgYXMgd2VsbCBhcyB3b3JyeWluZyBhYm91dCB0aGUgcmVnZXguaAoraGVhZGVyIGZpbGUgKGFzIG1lbnRpb25lZCBhYm92ZSksIHlvdSBtdXN0IGFsc28gdGFrZSBjYXJlIHdoZW4gbGlua2luZyBwcm9ncmFtcwordG8gZW5zdXJlIHRoYXQgdGhleSBsaW5rIHdpdGggUENSRTIncyBsaWJwY3JlMnBvc2l4IGxpYnJhcnkuIE90aGVyd2lzZSB0aGV5IG1heQorcGljayB1cCB0aGUgUE9TSVggZnVuY3Rpb25zIG9mIHRoZSBzYW1lIG5hbWUgZnJvbSB0aGUgb3RoZXIgbGlicmFyeS4KKworT25lIHdheSBvZiBhdm9pZGluZyB0aGlzIGNvbmZ1c2lvbiBpcyB0byBjb21waWxlIFBDUkUyIHdpdGggdGhlIGFkZGl0aW9uIG9mCistRHJlZ2NvbXA9UENSRTJyZWdjb21wIChhbmQgc2ltaWxhcmx5IGZvciB0aGUgb3RoZXIgUE9TSVggZnVuY3Rpb25zKSB0byB0aGUKK2NvbXBpbGVyIGZsYWdzIChDRkxBR1MgaWYgeW91IGFyZSB1c2luZyAiY29uZmlndXJlIiAtLSBzZWUgYmVsb3cpLiBUaGlzIGhhcyB0aGUKK2VmZmVjdCBvZiByZW5hbWluZyB0aGUgZnVuY3Rpb25zIHNvIHRoYXQgdGhlIG5hbWVzIG5vIGxvbmdlciBjbGFzaC4gT2YgY291cnNlLAoreW91IGhhdmUgdG8gZG8gdGhlIHNhbWUgdGhpbmcgZm9yIHlvdXIgYXBwbGljYXRpb25zLCBvciB3cml0ZSB0aGVtIHVzaW5nIHRoZQorbmV3IG5hbWVzLgorCisKK0RvY3VtZW50YXRpb24gZm9yIFBDUkUyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgaW5zdGFsbCBQQ1JFMiBpbiB0aGUgbm9ybWFsIHdheSBvbiBhIFVuaXgtbGlrZSBzeXN0ZW0sIHlvdSB3aWxsIGVuZCB1cAord2l0aCBhIHNldCBvZiBtYW4gcGFnZXMgd2hvc2UgbmFtZXMgYWxsIHN0YXJ0IHdpdGggInBjcmUyIi4gVGhlIG9uZSB0aGF0IGlzCitqdXN0IGNhbGxlZCAicGNyZTIiIGxpc3RzIGFsbCB0aGUgb3RoZXJzLiBJbiBhZGRpdGlvbiB0byB0aGVzZSBtYW4gcGFnZXMsIHRoZQorUENSRTIgZG9jdW1lbnRhdGlvbiBpcyBzdXBwbGllZCBpbiB0d28gb3RoZXIgZm9ybXM6CisKKyAgMS4gVGhlcmUgYXJlIGZpbGVzIGNhbGxlZCBkb2MvcGNyZTIudHh0LCBkb2MvcGNyZTJncmVwLnR4dCwgYW5kCisgICAgIGRvYy9wY3JlMnRlc3QudHh0IGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLiBUaGUgZmlyc3Qgb2YgdGhlc2UgaXMgYQorICAgICBjb25jYXRlbmF0aW9uIG9mIHRoZSB0ZXh0IGZvcm1zIG9mIGFsbCB0aGUgc2VjdGlvbiAzIG1hbiBwYWdlcyBleGNlcHQgdGhlCisgICAgIGxpc3Rpbmcgb2YgcGNyZTJkZW1vLmMgYW5kIHRob3NlIHRoYXQgc3VtbWFyaXplIGluZGl2aWR1YWwgZnVuY3Rpb25zLiBUaGUKKyAgICAgb3RoZXIgdHdvIGFyZSB0aGUgdGV4dCBmb3JtcyBvZiB0aGUgc2VjdGlvbiAxIG1hbiBwYWdlcyBmb3IgdGhlIHBjcmUyZ3JlcAorICAgICBhbmQgcGNyZTJ0ZXN0IGNvbW1hbmRzLiBUaGVzZSB0ZXh0IGZvcm1zIGFyZSBwcm92aWRlZCBmb3IgZWFzZSBvZiBzY2FubmluZworICAgICB3aXRoIHRleHQgZWRpdG9ycyBvciBzaW1pbGFyIHRvb2xzLiBUaGV5IGFyZSBpbnN0YWxsZWQgaW4KKyAgICAgPHByZWZpeD4vc2hhcmUvZG9jL3BjcmUyLCB3aGVyZSA8cHJlZml4PiBpcyB0aGUgaW5zdGFsbGF0aW9uIHByZWZpeAorICAgICAoZGVmYXVsdGluZyB0byAvdXNyL2xvY2FsKS4KKworICAyLiBBIHNldCBvZiBmaWxlcyBjb250YWluaW5nIGFsbCB0aGUgZG9jdW1lbnRhdGlvbiBpbiBIVE1MIGZvcm0sIGh5cGVybGlua2VkCisgICAgIGluIHZhcmlvdXMgd2F5cywgYW5kIHJvb3RlZCBpbiBhIGZpbGUgY2FsbGVkIGluZGV4Lmh0bWwsIGlzIGRpc3RyaWJ1dGVkIGluCisgICAgIGRvYy9odG1sIGFuZCBpbnN0YWxsZWQgaW4gPHByZWZpeD4vc2hhcmUvZG9jL3BjcmUyL2h0bWwuCisKKworQnVpbGRpbmcgUENSRTIgb24gbm9uLVVuaXgtbGlrZSBzeXN0ZW1zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIGEgbm9uLVVuaXgtbGlrZSBzeXN0ZW0sIHBsZWFzZSByZWFkIHRoZSBjb21tZW50cyBpbiB0aGUgZmlsZQorTk9OLUFVVE9UT09MUy1CVUlMRCwgdGhvdWdoIGlmIHlvdXIgc3lzdGVtIHN1cHBvcnRzIHRoZSB1c2Ugb2YgImNvbmZpZ3VyZSIgYW5kCisibWFrZSIgeW91IG1heSBiZSBhYmxlIHRvIGJ1aWxkIFBDUkUyIHVzaW5nIGF1dG90b29scyBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yCittYW55IFVuaXgtbGlrZSBzeXN0ZW1zLgorCitQQ1JFMiBjYW4gYWxzbyBiZSBjb25maWd1cmVkIHVzaW5nIENNYWtlLCB3aGljaCBjYW4gYmUgcnVuIGluIHZhcmlvdXMgd2F5cworKGNvbW1hbmQgbGluZSwgR1VJLCBldGMpLiBUaGlzIGNyZWF0ZXMgTWFrZWZpbGVzLCBzb2x1dGlvbiBmaWxlcywgZXRjLiBUaGUgZmlsZQorTk9OLUFVVE9UT09MUy1CVUlMRCBoYXMgaW5mb3JtYXRpb24gYWJvdXQgQ01ha2UuCisKK1BDUkUyIGhhcyBiZWVuIGNvbXBpbGVkIG9uIG1hbnkgZGlmZmVyZW50IG9wZXJhdGluZyBzeXN0ZW1zLiBJdCBzaG91bGQgYmUKK3N0cmFpZ2h0Zm9yd2FyZCB0byBidWlsZCBQQ1JFMiBvbiBhbnkgc3lzdGVtIHRoYXQgaGFzIGEgU3RhbmRhcmQgQyBjb21waWxlciBhbmQKK2xpYnJhcnksIGJlY2F1c2UgaXQgdXNlcyBvbmx5IFN0YW5kYXJkIEMgZnVuY3Rpb25zLgorCisKK0J1aWxkaW5nIFBDUkUyIHdpdGhvdXQgdXNpbmcgYXV0b3Rvb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdXNlIG9mIGF1dG90b29scyAoaW4gcGFydGljdWxhciwgbGlidG9vbCkgaXMgcHJvYmxlbWF0aWMgaW4gc29tZQorZW52aXJvbm1lbnRzLCBldmVuIHNvbWUgdGhhdCBhcmUgVW5peCBvciBVbml4LWxpa2UuIFNlZSB0aGUgTk9OLUFVVE9UT09MUy1CVUlMRAorZmlsZSBmb3Igd2F5cyBvZiBidWlsZGluZyBQQ1JFMiB3aXRob3V0IHVzaW5nIGF1dG90b29scy4KKworCitCdWlsZGluZyBQQ1JFMiB1c2luZyBhdXRvdG9vbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZm9sbG93aW5nIGluc3RydWN0aW9ucyBhc3N1bWUgdGhlIHVzZSBvZiB0aGUgd2lkZWx5IHVzZWQgImNvbmZpZ3VyZTsgbWFrZTsKK21ha2UgaW5zdGFsbCIgKGF1dG90b29scykgcHJvY2Vzcy4KKworVG8gYnVpbGQgUENSRTIgb24gc3lzdGVtIHRoYXQgc3VwcG9ydHMgYXV0b3Rvb2xzLCBmaXJzdCBydW4gdGhlICJjb25maWd1cmUiCitjb21tYW5kIGZyb20gdGhlIFBDUkUyIGRpc3RyaWJ1dGlvbiBkaXJlY3RvcnksIHdpdGggeW91ciBjdXJyZW50IGRpcmVjdG9yeSBzZXQKK3RvIHRoZSBkaXJlY3Rvcnkgd2hlcmUgeW91IHdhbnQgdGhlIGZpbGVzIHRvIGJlIGNyZWF0ZWQuIFRoaXMgY29tbWFuZCBpcyBhCitzdGFuZGFyZCBHTlUgImF1dG9jb25mIiBjb25maWd1cmF0aW9uIHNjcmlwdCwgZm9yIHdoaWNoIGdlbmVyaWMgaW5zdHJ1Y3Rpb25zCithcmUgc3VwcGxpZWQgaW4gdGhlIGZpbGUgSU5TVEFMTC4KKworTW9zdCBjb21tb25seSwgcGVvcGxlIGJ1aWxkIFBDUkUyIHdpdGhpbiBpdHMgb3duIGRpc3RyaWJ1dGlvbiBkaXJlY3RvcnksIGFuZCBpbgordGhpcyBjYXNlLCBvbiBtYW55IHN5c3RlbXMsIGp1c3QgcnVubmluZyAiLi9jb25maWd1cmUiIGlzIHN1ZmZpY2llbnQuIEhvd2V2ZXIsCit0aGUgdXN1YWwgbWV0aG9kcyBvZiBjaGFuZ2luZyBzdGFuZGFyZCBkZWZhdWx0cyBhcmUgYXZhaWxhYmxlLiBGb3IgZXhhbXBsZToKKworQ0ZMQUdTPSctTzIgLVdhbGwnIC4vY29uZmlndXJlIC0tcHJlZml4PS9vcHQvbG9jYWwKKworVGhpcyBjb21tYW5kIHNwZWNpZmllcyB0aGF0IHRoZSBDIGNvbXBpbGVyIHNob3VsZCBiZSBydW4gd2l0aCB0aGUgZmxhZ3MgJy1PMgorLVdhbGwnIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQsIGFuZCB0aGF0ICJtYWtlIGluc3RhbGwiIHNob3VsZCBpbnN0YWxsIFBDUkUyCit1bmRlciAvb3B0L2xvY2FsIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgL3Vzci9sb2NhbC4KKworSWYgeW91IHdhbnQgdG8gYnVpbGQgaW4gYSBkaWZmZXJlbnQgZGlyZWN0b3J5LCBqdXN0IHJ1biAiY29uZmlndXJlIiB3aXRoIHRoYXQKK2RpcmVjdG9yeSBhcyBjdXJyZW50LiBGb3IgZXhhbXBsZSwgc3VwcG9zZSB5b3UgaGF2ZSB1bnBhY2tlZCB0aGUgUENSRTIgc291cmNlCitpbnRvIC9zb3VyY2UvcGNyZTIvcGNyZTIteHh4LCBidXQgeW91IHdhbnQgdG8gYnVpbGQgaXQgaW4KKy9idWlsZC9wY3JlMi9wY3JlMi14eHg6CisKK2NkIC9idWlsZC9wY3JlMi9wY3JlMi14eHgKKy9zb3VyY2UvcGNyZTIvcGNyZTIteHh4L2NvbmZpZ3VyZQorCitQQ1JFMiBpcyB3cml0dGVuIGluIEMgYW5kIGlzIG5vcm1hbGx5IGNvbXBpbGVkIGFzIGEgQyBsaWJyYXJ5LiBIb3dldmVyLCBpdCBpcworcG9zc2libGUgdG8gYnVpbGQgaXQgYXMgYSBDKysgbGlicmFyeSwgdGhvdWdoIHRoZSBwcm92aWRlZCBidWlsZGluZyBhcHBhcmF0dXMKK2RvZXMgbm90IGhhdmUgYW55IGZlYXR1cmVzIHRvIHN1cHBvcnQgdGhpcy4KKworVGhlcmUgYXJlIHNvbWUgb3B0aW9uYWwgZmVhdHVyZXMgdGhhdCBjYW4gYmUgaW5jbHVkZWQgb3Igb21pdHRlZCBmcm9tIHRoZSBQQ1JFMgorbGlicmFyeS4gVGhleSBhcmUgYWxzbyBkb2N1bWVudGVkIGluIHRoZSBwY3JlMmJ1aWxkIG1hbiBwYWdlLgorCisuIEJ5IGRlZmF1bHQsIGJvdGggc2hhcmVkIGFuZCBzdGF0aWMgbGlicmFyaWVzIGFyZSBidWlsdC4gWW91IGNhbiBjaGFuZ2UgdGhpcworICBieSBhZGRpbmcgb25lIG9mIHRoZXNlIG9wdGlvbnMgdG8gdGhlICJjb25maWd1cmUiIGNvbW1hbmQ6CisKKyAgLS1kaXNhYmxlLXNoYXJlZAorICAtLWRpc2FibGUtc3RhdGljCisKKyAgKFNlZSBhbHNvICJTaGFyZWQgbGlicmFyaWVzIG9uIFVuaXgtbGlrZSBzeXN0ZW1zIiBiZWxvdy4pCisKKy4gQnkgZGVmYXVsdCwgb25seSB0aGUgOC1iaXQgbGlicmFyeSBpcyBidWlsdC4gSWYgeW91IGFkZCAtLWVuYWJsZS1wY3JlMi0xNiB0bworICB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZCwgdGhlIDE2LWJpdCBsaWJyYXJ5IGlzIGFsc28gYnVpbHQuIElmIHlvdSBhZGQKKyAgLS1lbmFibGUtcGNyZTItMzIgdG8gdGhlICJjb25maWd1cmUiIGNvbW1hbmQsIHRoZSAzMi1iaXQgbGlicmFyeSBpcyBhbHNvCisgIGJ1aWx0LiBJZiB5b3Ugd2FudCBvbmx5IHRoZSAxNi1iaXQgb3IgMzItYml0IGxpYnJhcnksIHVzZSAtLWRpc2FibGUtcGNyZTItOAorICB0byBkaXNhYmxlIGJ1aWxkaW5nIHRoZSA4LWJpdCBsaWJyYXJ5LgorCisuIElmIHlvdSB3YW50IHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IganVzdC1pbi10aW1lIGNvbXBpbGluZywgd2hpY2ggY2FuIGdpdmUKKyAgbGFyZ2UgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIG9uIGNlcnRhaW4gcGxhdGZvcm1zLCBhZGQgLS1lbmFibGUtaml0IHRvIHRoZQorICAiY29uZmlndXJlIiBjb21tYW5kLiBUaGlzIHN1cHBvcnQgaXMgYXZhaWxhYmxlIG9ubHkgZm9yIGNlcnRhaW4gaGFyZHdhcmUKKyAgYXJjaGl0ZWN0dXJlcy4gSWYgeW91IHRyeSB0byBlbmFibGUgaXQgb24gYW4gdW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlLCB0aGVyZQorICB3aWxsIGJlIGEgY29tcGlsZSB0aW1lIGVycm9yLgorCisuIFdoZW4gSklUIHN1cHBvcnQgaXMgZW5hYmxlZCwgcGNyZTJncmVwIGF1dG9tYXRpY2FsbHkgbWFrZXMgdXNlIG9mIGl0LCB1bmxlc3MKKyAgeW91IGFkZCAtLWRpc2FibGUtcGNyZTJncmVwLWppdCB0byB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZC4KKworLiBJZiB5b3UgZG8gbm90IHdhbnQgdG8gbWFrZSB1c2Ugb2YgdGhlIHN1cHBvcnQgZm9yIFVURi04IFVuaWNvZGUgY2hhcmFjdGVyCisgIHN0cmluZ3MgaW4gdGhlIDgtYml0IGxpYnJhcnksIFVURi0xNiBVbmljb2RlIGNoYXJhY3RlciBzdHJpbmdzIGluIHRoZSAxNi1iaXQKKyAgbGlicmFyeSwgb3IgVVRGLTMyIFVuaWNvZGUgY2hhcmFjdGVyIHN0cmluZ3MgaW4gdGhlIDMyLWJpdCBsaWJyYXJ5LCB5b3UgY2FuCisgIGFkZCAtLWRpc2FibGUtdW5pY29kZSB0byB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZC4gVGhpcyByZWR1Y2VzIHRoZSBzaXplIG9mCisgIHRoZSBsaWJyYXJpZXMuIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBjb25maWd1cmUgb25lIGxpYnJhcnkgd2l0aCBVbmljb2RlCisgIHN1cHBvcnQsIGFuZCBhbm90aGVyIHdpdGhvdXQsIGluIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24uCisKKyAgV2hlbiBVbmljb2RlIHN1cHBvcnQgaXMgYXZhaWxhYmxlLCB0aGUgdXNlIG9mIGEgVVRGIGVuY29kaW5nIHN0aWxsIGhhcyB0byBiZQorICBlbmFibGVkIGJ5IHNldHRpbmcgdGhlIFBDUkUyX1VURiBvcHRpb24gYXQgcnVuIHRpbWUgb3Igc3RhcnRpbmcgYSBwYXR0ZXJuCisgIHdpdGggKCpVVEYpLiBXaGVuIFBDUkUyIGlzIGNvbXBpbGVkIHdpdGggVW5pY29kZSBzdXBwb3J0LCBpdHMgaW5wdXQgY2FuIG9ubHkKKyAgZWl0aGVyIGJlIEFTQ0lJIG9yIFVURi04LzE2LzMyLCBldmVuIHdoZW4gcnVubmluZyBvbiBFQkNESUMgcGxhdGZvcm1zLiBJdCBpcworICBub3QgcG9zc2libGUgdG8gdXNlIGJvdGggLS1lbmFibGUtdW5pY29kZSBhbmQgLS1lbmFibGUtZWJjZGljIGF0IHRoZSBzYW1lCisgIHRpbWUuCisKKyAgQXMgd2VsbCBhcyBzdXBwb3J0aW5nIFVURiBzdHJpbmdzLCBVbmljb2RlIHN1cHBvcnQgaW5jbHVkZXMgc3VwcG9ydCBmb3IgdGhlCisgIFxQLCBccCwgYW5kIFxYIHNlcXVlbmNlcyB0aGF0IHJlY29nbml6ZSBVbmljb2RlIGNoYXJhY3RlciBwcm9wZXJ0aWVzLgorICBIb3dldmVyLCBvbmx5IHRoZSBiYXNpYyB0d28tbGV0dGVyIHByb3BlcnRpZXMgc3VjaCBhcyBMdSBhcmUgc3VwcG9ydGVkLgorICBFc2NhcGUgc2VxdWVuY2VzIHN1Y2ggYXMgXGQgYW5kIFx3IGluIHBhdHRlcm5zIGRvIG5vdCBieSBkZWZhdWx0IG1ha2UgdXNlIG9mCisgIFVuaWNvZGUgcHJvcGVydGllcywgYnV0IGNhbiBiZSBtYWRlIHRvIGRvIHNvIGJ5IHNldHRpbmcgdGhlIFBDUkUyX1VDUCBvcHRpb24KKyAgb3Igc3RhcnRpbmcgYSBwYXR0ZXJuIHdpdGggKCpVQ1ApLgorCisuIFlvdSBjYW4gYnVpbGQgUENSRTIgdG8gcmVjb2duaXplIGVpdGhlciBDUiBvciBMRiBvciB0aGUgc2VxdWVuY2UgQ1JMRiwgb3IgYW55CisgIG9mIHRoZSBwcmVjZWRpbmcsIG9yIGFueSBvZiB0aGUgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlcywgYXMgaW5kaWNhdGluZyB0aGUKKyAgZW5kIG9mIGEgbGluZS4gV2hhdGV2ZXIgeW91IHNwZWNpZnkgYXQgYnVpbGQgdGltZSBpcyB0aGUgZGVmYXVsdDsgdGhlIGNhbGxlcgorICBvZiBQQ1JFMiBjYW4gY2hhbmdlIHRoZSBzZWxlY3Rpb24gYXQgcnVuIHRpbWUuIFRoZSBkZWZhdWx0IG5ld2xpbmUgaW5kaWNhdG9yCisgIGlzIGEgc2luZ2xlIExGIGNoYXJhY3RlciAodGhlIFVuaXggc3RhbmRhcmQpLiBZb3UgY2FuIHNwZWNpZnkgdGhlIGRlZmF1bHQKKyAgbmV3bGluZSBpbmRpY2F0b3IgYnkgYWRkaW5nIC0tZW5hYmxlLW5ld2xpbmUtaXMtY3IsIC0tZW5hYmxlLW5ld2xpbmUtaXMtbGYsCisgIC0tZW5hYmxlLW5ld2xpbmUtaXMtY3JsZiwgLS1lbmFibGUtbmV3bGluZS1pcy1hbnljcmxmLCBvcgorICAtLWVuYWJsZS1uZXdsaW5lLWlzLWFueSB0byB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZCwgcmVzcGVjdGl2ZWx5LgorCisgIElmIHlvdSBzcGVjaWZ5IC0tZW5hYmxlLW5ld2xpbmUtaXMtY3Igb3IgLS1lbmFibGUtbmV3bGluZS1pcy1jcmxmLCBzb21lIG9mCisgIHRoZSBzdGFuZGFyZCB0ZXN0cyB3aWxsIGZhaWwsIGJlY2F1c2UgdGhlIGxpbmVzIGluIHRoZSB0ZXN0IGZpbGVzIGVuZCB3aXRoCisgIExGLiBFdmVuIGlmIHRoZSBmaWxlcyBhcmUgZWRpdGVkIHRvIGNoYW5nZSB0aGUgbGluZSBlbmRpbmdzLCB0aGVyZSBhcmUgbGlrZWx5CisgIHRvIGJlIHNvbWUgZmFpbHVyZXMuIFdpdGggLS1lbmFibGUtbmV3bGluZS1pcy1hbnljcmxmIG9yCisgIC0tZW5hYmxlLW5ld2xpbmUtaXMtYW55LCBtYW55IHRlc3RzIHNob3VsZCBzdWNjZWVkLCBidXQgdGhlcmUgbWF5IGJlIHNvbWUKKyAgZmFpbHVyZXMuCisKKy4gQnkgZGVmYXVsdCwgdGhlIHNlcXVlbmNlIFxSIGluIGEgcGF0dGVybiBtYXRjaGVzIGFueSBVbmljb2RlIGxpbmUgZW5kaW5nCisgIHNlcXVlbmNlLiBUaGlzIGlzIGluZGVwZW5kZW50IG9mIHRoZSBvcHRpb24gc3BlY2lmeWluZyB3aGF0IFBDUkUyIGNvbnNpZGVycworICB0byBiZSB0aGUgZW5kIG9mIGEgbGluZSAoc2VlIGFib3ZlKS4gSG93ZXZlciwgdGhlIGNhbGxlciBvZiBQQ1JFMiBjYW4KKyAgcmVzdHJpY3QgXFIgdG8gbWF0Y2ggb25seSBDUiwgTEYsIG9yIENSTEYuIFlvdSBjYW4gbWFrZSB0aGlzIHRoZSBkZWZhdWx0IGJ5CisgIGFkZGluZyAtLWVuYWJsZS1ic3ItYW55Y3JsZiB0byB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZCAoYnNyID0gImJhY2tzbGFzaCBSIikuCisKKy4gSW4gYSBwYXR0ZXJuLCB0aGUgZXNjYXBlIHNlcXVlbmNlIFxDIG1hdGNoZXMgYSBzaW5nbGUgY29kZSB1bml0LCBldmVuIGluIGEKKyAgVVRGIG1vZGUuIFRoaXMgY2FuIGJlIGRhbmdlcm91cyBiZWNhdXNlIGl0IGJyZWFrcyB1cCBtdWx0aS1jb2RlLXVuaXQKKyAgY2hhcmFjdGVycy4gWW91IGNhbiBidWlsZCBQQ1JFMiB3aXRoIHRoZSB1c2Ugb2YgXEMgcGVybWFuZW50bHkgbG9ja2VkIG91dCBieQorICBhZGRpbmcgLS1lbmFibGUtbmV2ZXItYmFja3NsYXNoLUMgKG5vdGUgdGhlIHVwcGVyIGNhc2UgQykgdG8gdGhlICJjb25maWd1cmUiCisgIGNvbW1hbmQuIFdoZW4gXEMgaXMgYWxsb3dlZCBieSB0aGUgbGlicmFyeSwgaW5kaXZpZHVhbCBhcHBsaWNhdGlvbnMgY2FuIGxvY2sKKyAgaXQgb3V0IGJ5IGNhbGxpbmcgcGNyZTJfY29tcGlsZSgpIHdpdGggdGhlIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DIG9wdGlvbi4KKworLiBQQ1JFMiBoYXMgYSBjb3VudGVyIHRoYXQgbGltaXRzIHRoZSBkZXB0aCBvZiBuZXN0aW5nIG9mIHBhcmVudGhlc2VzIGluIGEKKyAgcGF0dGVybi4gVGhpcyBsaW1pdHMgdGhlIGFtb3VudCBvZiBzeXN0ZW0gc3RhY2sgdGhhdCBhIHBhdHRlcm4gdXNlcyB3aGVuIGl0CisgIGlzIGNvbXBpbGVkLiBUaGUgZGVmYXVsdCBpcyAyNTAsIGJ1dCB5b3UgY2FuIGNoYW5nZSBpdCBieSBzZXR0aW5nLCBmb3IKKyAgZXhhbXBsZSwKKworICAtLXdpdGgtcGFyZW5zLW5lc3QtbGltaXQ9NTAwCisKKy4gUENSRTIgaGFzIGEgY291bnRlciB0aGF0IGNhbiBiZSBzZXQgdG8gbGltaXQgdGhlIGFtb3VudCBvZiByZXNvdXJjZXMgaXQgdXNlcworICB3aGVuIG1hdGNoaW5nIGEgcGF0dGVybi4gSWYgdGhlIGxpbWl0IGlzIGV4Y2VlZGVkIGR1cmluZyBhIG1hdGNoLCB0aGUgbWF0Y2gKKyAgZmFpbHMuIFRoZSBkZWZhdWx0IGlzIHRlbiBtaWxsaW9uLiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdCBieSBzZXR0aW5nLCBmb3IKKyAgZXhhbXBsZSwKKworICAtLXdpdGgtbWF0Y2gtbGltaXQ9NTAwMDAwCisKKyAgb24gdGhlICJjb25maWd1cmUiIGNvbW1hbmQuIFRoaXMgaXMganVzdCB0aGUgZGVmYXVsdDsgaW5kaXZpZHVhbCBjYWxscyB0bworICBwY3JlMl9tYXRjaCgpIGNhbiBzdXBwbHkgdGhlaXIgb3duIHZhbHVlLiBUaGVyZSBpcyBtb3JlIGRpc2N1c3Npb24gb24gdGhlCisgIHBjcmUyYXBpIG1hbiBwYWdlLgorCisuIFRoZXJlIGlzIGEgc2VwYXJhdGUgY291bnRlciB0aGF0IGxpbWl0cyB0aGUgZGVwdGggb2YgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzCisgIGR1cmluZyBhIG1hdGNoaW5nIHByb2Nlc3MuIFRoaXMgYWxzbyBoYXMgYSBkZWZhdWx0IG9mIHRlbiBtaWxsaW9uLCB3aGljaCBpcworICBlc3NlbnRpYWxseSAidW5saW1pdGVkIi4gWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgYnkgc2V0dGluZywgZm9yIGV4YW1wbGUsCisKKyAgLS13aXRoLW1hdGNoLWxpbWl0LXJlY3Vyc2lvbj01MDAwMDAKKworICBSZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMgdXNlIHVwIHRoZSBydW50aW1lIHN0YWNrOyBydW5uaW5nIG91dCBvZiBzdGFjayBjYW4KKyAgY2F1c2UgcHJvZ3JhbXMgdG8gY3Jhc2ggaW4gc3RyYW5nZSB3YXlzLiBUaGVyZSBpcyBhIGRpc2N1c3Npb24gYWJvdXQgc3RhY2sKKyAgc2l6ZXMgaW4gdGhlIHBjcmUyc3RhY2sgbWFuIHBhZ2UuCisKKy4gSW4gdGhlIDgtYml0IGxpYnJhcnksIHRoZSBkZWZhdWx0IG1heGltdW0gY29tcGlsZWQgcGF0dGVybiBzaXplIGlzIGFyb3VuZAorICA2NEsuIFlvdSBjYW4gaW5jcmVhc2UgdGhpcyBieSBhZGRpbmcgLS13aXRoLWxpbmstc2l6ZT0zIHRvIHRoZSAiY29uZmlndXJlIgorICBjb21tYW5kLiBQQ1JFMiB0aGVuIHVzZXMgdGhyZWUgYnl0ZXMgaW5zdGVhZCBvZiB0d28gZm9yIG9mZnNldHMgdG8gZGlmZmVyZW50CisgIHBhcnRzIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuLiBJbiB0aGUgMTYtYml0IGxpYnJhcnksIC0td2l0aC1saW5rLXNpemU9MyBpcworICB0aGUgc2FtZSBhcyAtLXdpdGgtbGluay1zaXplPTQsIHdoaWNoIChpbiBib3RoIGxpYnJhcmllcykgdXNlcyBmb3VyLWJ5dGUKKyAgb2Zmc2V0cy4gSW5jcmVhc2luZyB0aGUgaW50ZXJuYWwgbGluayBzaXplIHJlZHVjZXMgcGVyZm9ybWFuY2UgaW4gdGhlIDgtYml0CisgIGFuZCAxNi1iaXQgbGlicmFyaWVzLiBJbiB0aGUgMzItYml0IGxpYnJhcnksIHRoZSBsaW5rIHNpemUgc2V0dGluZyBpcworICBpZ25vcmVkLCBhcyA0LWJ5dGUgb2Zmc2V0cyBhcmUgYWx3YXlzIHVzZWQuCisKKy4gWW91IGNhbiBidWlsZCBQQ1JFMiBzbyB0aGF0IGl0cyBpbnRlcm5hbCBtYXRjaCgpIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZyb20KKyAgcGNyZTJfbWF0Y2goKSBkb2VzIG5vdCBjYWxsIGl0c2VsZiByZWN1cnNpdmVseS4gSW5zdGVhZCwgaXQgdXNlcyBtZW1vcnkKKyAgYmxvY2tzIG9idGFpbmVkIGZyb20gdGhlIGhlYXAgdG8gc2F2ZSBkYXRhIHRoYXQgd291bGQgb3RoZXJ3aXNlIGJlIHNhdmVkIG9uCisgIHRoZSBzdGFjay4gVG8gYnVpbGQgUENSRTIgbGlrZSB0aGlzLCB1c2UKKworICAtLWRpc2FibGUtc3RhY2stZm9yLXJlY3Vyc2lvbgorCisgIG9uIHRoZSAiY29uZmlndXJlIiBjb21tYW5kLiBQQ1JFMiBydW5zIG1vcmUgc2xvd2x5IGluIHRoaXMgbW9kZSwgYnV0IGl0IG1heQorICBiZSBuZWNlc3NhcnkgaW4gZW52aXJvbm1lbnRzIHdpdGggbGltaXRlZCBzdGFjayBzaXplcy4gVGhpcyBhcHBsaWVzIG9ubHkgdG8KKyAgdGhlIG5vcm1hbCBleGVjdXRpb24gb2YgdGhlIHBjcmUyX21hdGNoKCkgZnVuY3Rpb247IGlmIEpJVCBzdXBwb3J0IGlzIGJlaW5nCisgIHN1Y2Nlc3NmdWxseSB1c2VkLCBpdCBpcyBub3QgcmVsZXZhbnQuIEVxdWFsbHksIGl0IGRvZXMgbm90IGFwcGx5IHRvCisgIHBjcmUyX2RmYV9tYXRjaCgpLCB3aGljaCBkb2VzIG5vdCB1c2UgZGVlcGx5IG5lc3RlZCByZWN1cnNpb24uIFRoZXJlIGlzIGEKKyAgZGlzY3Vzc2lvbiBhYm91dCBzdGFjayBzaXplcyBpbiB0aGUgcGNyZTJzdGFjayBtYW4gcGFnZS4KKworLiBGb3Igc3BlZWQsIFBDUkUyIHVzZXMgZm91ciB0YWJsZXMgZm9yIG1hbmlwdWxhdGluZyBhbmQgaWRlbnRpZnlpbmcgY2hhcmFjdGVycworICB3aG9zZSBjb2RlIHBvaW50IHZhbHVlcyBhcmUgbGVzcyB0aGFuIDI1Ni4gQnkgZGVmYXVsdCwgaXQgdXNlcyBhIHNldCBvZgorICB0YWJsZXMgZm9yIEFTQ0lJIGVuY29kaW5nIHRoYXQgaXMgcGFydCBvZiB0aGUgZGlzdHJpYnV0aW9uLiBJZiB5b3Ugc3BlY2lmeQorCisgIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcworCisgIGEgcHJvZ3JhbSBjYWxsZWQgZGZ0YWJsZXMgaXMgY29tcGlsZWQgYW5kIHJ1biBpbiB0aGUgZGVmYXVsdCBDIGxvY2FsZSB3aGVuCisgIHlvdSBvYmV5ICJtYWtlIi4gSXQgYnVpbGRzIGEgc291cmNlIGZpbGUgY2FsbGVkIHBjcmUyX2NoYXJ0YWJsZXMuYy4gSWYgeW91IGRvCisgIG5vdCBzcGVjaWZ5IHRoaXMgb3B0aW9uLCBwY3JlMl9jaGFydGFibGVzLmMgaXMgY3JlYXRlZCBhcyBhIGNvcHkgb2YKKyAgcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QuIFNlZSAiQ2hhcmFjdGVyIHRhYmxlcyIgYmVsb3cgZm9yIGZ1cnRoZXIKKyAgaW5mb3JtYXRpb24uCisKKy4gSXQgaXMgcG9zc2libGUgdG8gY29tcGlsZSBQQ1JFMiBmb3IgdXNlIG9uIHN5c3RlbXMgdGhhdCB1c2UgRUJDRElDIGFzIHRoZWlyCisgIGNoYXJhY3RlciBjb2RlIChhcyBvcHBvc2VkIHRvIEFTQ0lJL1VuaWNvZGUpIGJ5IHNwZWNpZnlpbmcKKworICAtLWVuYWJsZS1lYmNkaWMgLS1kaXNhYmxlLXVuaWNvZGUKKworICBUaGlzIGF1dG9tYXRpY2FsbHkgaW1wbGllcyAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgKHNlZSBhYm92ZSkuIEhvd2V2ZXIsCisgIHdoZW4gUENSRTIgaXMgYnVpbHQgdGhpcyB3YXksIGl0IGFsd2F5cyBvcGVyYXRlcyBpbiBFQkNESUMuIEl0IGNhbm5vdCBzdXBwb3J0CisgIGJvdGggRUJDRElDIGFuZCBVVEYtOC8xNi8zMi4gVGhlcmUgaXMgYSBzZWNvbmQgb3B0aW9uLCAtLWVuYWJsZS1lYmNkaWMtbmwyNSwKKyAgd2hpY2ggc3BlY2lmaWVzIHRoYXQgdGhlIGNvZGUgdmFsdWUgZm9yIHRoZSBFQkNESUMgTkwgY2hhcmFjdGVyIGlzIDB4MjUKKyAgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAweDE1LgorCisuIElmIHlvdSBzcGVjaWZ5IC0tZW5hYmxlLWRlYnVnLCBhZGRpdGlvbmFsIGRlYnVnZ2luZyBjb2RlIGlzIGluY2x1ZGVkIGluIHRoZQorICBidWlsZC4gVGhpcyBvcHRpb24gaXMgaW50ZW5kZWQgZm9yIHVzZSBieSB0aGUgUENSRTIgbWFpbnRhaW5lcnMuCisKKy4gSW4gZW52aXJvbm1lbnRzIHdoZXJlIHZhbGdyaW5kIGlzIGluc3RhbGxlZCwgaWYgeW91IHNwZWNpZnkKKworICAtLWVuYWJsZS12YWxncmluZAorCisgIFBDUkUyIHdpbGwgdXNlIHZhbGdyaW5kIGFubm90YXRpb25zIHRvIG1hcmsgY2VydGFpbiBtZW1vcnkgcmVnaW9ucyBhcworICB1bmFkZHJlc3NhYmxlLiBUaGlzIGFsbG93cyBpdCB0byBkZXRlY3QgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMsIGFuZCBpcworICBtb3N0bHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgUENSRTIgaXRzZWxmLgorCisuIEluIGVudmlyb25tZW50cyB3aGVyZSB0aGUgZ2NjIGNvbXBpbGVyIGlzIHVzZWQgYW5kIGxjb3YgdmVyc2lvbiAxLjYgb3IgYWJvdmUKKyAgaXMgaW5zdGFsbGVkLCBpZiB5b3Ugc3BlY2lmeQorCisgIC0tZW5hYmxlLWNvdmVyYWdlCisKKyAgdGhlIGJ1aWxkIHByb2Nlc3MgaW1wbGVtZW50cyBhIGNvZGUgY292ZXJhZ2UgcmVwb3J0IGZvciB0aGUgdGVzdCBzdWl0ZS4gVGhlCisgIHJlcG9ydCBpcyBnZW5lcmF0ZWQgYnkgcnVubmluZyAibWFrZSBjb3ZlcmFnZSIuIElmIGNjYWNoZSBpcyBpbnN0YWxsZWQgb24KKyAgeW91ciBzeXN0ZW0sIGl0IG11c3QgYmUgZGlzYWJsZWQgd2hlbiBidWlsZGluZyBQQ1JFMiBmb3IgY292ZXJhZ2UgcmVwb3J0aW5nLgorICBZb3UgY2FuIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQ0NBQ0hFX0RJU0FCTEU9MSBiZWZvcmUKKyAgcnVubmluZyAibWFrZSIgdG8gYnVpbGQgUENSRTIuIFRoZXJlIGlzIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY292ZXJhZ2UKKyAgcmVwb3J0aW5nIGluIHRoZSAicGNyZTJidWlsZCIgZG9jdW1lbnRhdGlvbi4KKworLiBUaGUgcGNyZTJncmVwIHByb2dyYW0gY3VycmVudGx5IHN1cHBvcnRzIG9ubHkgOC1iaXQgZGF0YSBmaWxlcywgYW5kIHNvCisgIHJlcXVpcmVzIHRoZSA4LWJpdCBQQ1JFMiBsaWJyYXJ5LiBJdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIHBjcmUyZ3JlcCB0byB1c2UKKyAgbGlieiBhbmQvb3IgbGliYnoyLCBpbiBvcmRlciB0byByZWFkIC5neiBhbmQgLmJ6MiBmaWxlcyAocmVzcGVjdGl2ZWx5KSwgYnkKKyAgc3BlY2lmeWluZyBvbmUgb3IgYm90aCBvZgorCisgIC0tZW5hYmxlLXBjcmUyZ3JlcC1saWJ6CisgIC0tZW5hYmxlLXBjcmUyZ3JlcC1saWJiejIKKworICBPZiBjb3Vyc2UsIHRoZSByZWxldmFudCBsaWJyYXJpZXMgbXVzdCBiZSBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0uCisKKy4gVGhlIGRlZmF1bHQgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIgdXNlZCBieSBwY3JlMmdyZXAgY2FuIGJlCisgIHNldCBieSwgZm9yIGV4YW1wbGU6CisKKyAgLS13aXRoLXBjcmUyZ3JlcC1idWZzaXplPTUxMjAwCisKKyAgVGhlIHZhbHVlIG11c3QgYmUgYSBwbGFpbiBpbnRlZ2VyLiBUaGUgZGVmYXVsdCBpcyAyMDQ4MC4KKworLiBJdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIHBjcmUydGVzdCBzbyB0aGF0IGl0IGxpbmtzIHdpdGggdGhlIGxpYnJlYWRsaW5lCisgIG9yIGxpYmVkaXQgbGlicmFyaWVzLCBieSBzcGVjaWZ5aW5nLCByZXNwZWN0aXZlbHksCisKKyAgLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYnJlYWRsaW5lIG9yIC0tZW5hYmxlLXBjcmUydGVzdC1saWJlZGl0CisKKyAgSWYgdGhpcyBpcyBkb25lLCB3aGVuIHBjcmUydGVzdCdzIGlucHV0IGlzIGZyb20gYSB0ZXJtaW5hbCwgaXQgcmVhZHMgaXQgdXNpbmcKKyAgdGhlIHJlYWRsaW5lKCkgZnVuY3Rpb24uIFRoaXMgcHJvdmlkZXMgbGluZS1lZGl0aW5nIGFuZCBoaXN0b3J5IGZhY2lsaXRpZXMuCisgIE5vdGUgdGhhdCBsaWJyZWFkbGluZSBpcyBHUEwtbGljZW5jZWQsIHNvIGlmIHlvdSBkaXN0cmlidXRlIGEgYmluYXJ5IG9mCisgIHBjcmUydGVzdCBsaW5rZWQgaW4gdGhpcyB3YXksIHRoZXJlIG1heSBiZSBsaWNlbnNpbmcgaXNzdWVzLiBUaGVzZSBjYW4gYmUKKyAgYXZvaWRlZCBieSBsaW5raW5nIHdpdGggbGliZWRpdCAod2hpY2ggaGFzIGEgQlNEIGxpY2VuY2UpIGluc3RlYWQuCisKKyAgRW5hYmxpbmcgbGlicmVhZGxpbmUgY2F1c2VzIHRoZSAtbHJlYWRsaW5lIG9wdGlvbiB0byBiZSBhZGRlZCB0byB0aGUKKyAgcGNyZTJ0ZXN0IGJ1aWxkLiBJbiBtYW55IG9wZXJhdGluZyBlbnZpcm9ubWVudHMgd2l0aCBhIHN5dGVtLWluc3RhbGxlZAorICByZWFkbGluZSBsaWJyYXJ5IHRoaXMgaXMgc3VmZmljaWVudC4gSG93ZXZlciwgaW4gc29tZSBlbnZpcm9ubWVudHMgKGUuZy4gaWYKKyAgYW4gdW5tb2RpZmllZCBkaXN0cmlidXRpb24gdmVyc2lvbiBvZiByZWFkbGluZSBpcyBpbiB1c2UpLCBpdCBtYXkgYmUKKyAgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgc29tZXRoaW5nIGxpa2UgTElCUz0iLWxuY3Vyc2VzIiBhcyB3ZWxsLiBUaGlzIGlzCisgIGJlY2F1c2UsIHRvIHF1b3RlIHRoZSByZWFkbGluZSBJTlNUQUxMLCAiUmVhZGxpbmUgdXNlcyB0aGUgdGVybWNhcCBmdW5jdGlvbnMsCisgIGJ1dCBkb2VzIG5vdCBsaW5rIHdpdGggdGhlIHRlcm1jYXAgb3IgY3Vyc2VzIGxpYnJhcnkgaXRzZWxmLCBhbGxvd2luZworICBhcHBsaWNhdGlvbnMgd2hpY2ggbGluayB3aXRoIHJlYWRsaW5lIHRoZSB0byBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgbGlicmFyeS4iCisgIElmIHlvdSBnZXQgZXJyb3IgbWVzc2FnZXMgYWJvdXQgbWlzc2luZyBmdW5jdGlvbnMgdGdldHN0ciwgdGdldGVudCwgdHB1dHMsCisgIHRnZXRmbGFnLCBvciB0Z290bywgdGhpcyBpcyB0aGUgcHJvYmxlbSwgYW5kIGxpbmtpbmcgd2l0aCB0aGUgbmN1cnNlcyBsaWJyYXJ5CisgIHNob3VsZCBmaXggaXQuCisKK1RoZSAiY29uZmlndXJlIiBzY3JpcHQgYnVpbGRzIHRoZSBmb2xsb3dpbmcgZmlsZXMgZm9yIHRoZSBiYXNpYyBDIGxpYnJhcnk6CisKKy4gTWFrZWZpbGUgICAgICAgICAgICAgdGhlIG1ha2VmaWxlIHRoYXQgYnVpbGRzIHRoZSBsaWJyYXJ5CisuIHNyYy9jb25maWcuaCAgICAgICAgIGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbGlicmFyeQorLiBzcmMvcGNyZTIuaCAgICAgICAgICB0aGUgcHVibGljIFBDUkUyIGhlYWRlciBmaWxlCisuIHBjcmUyLWNvbmZpZyAgICAgICAgICBzY3JpcHQgdGhhdCBzaG93cyB0aGUgYnVpbGRpbmcgc2V0dGluZ3Mgc3VjaCBhcyBDRkxBR1MKKyAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdlcmUgc2V0IGZvciAiY29uZmlndXJlIgorLiBsaWJwY3JlMi04LnBjICAgICAgICApCisuIGxpYnBjcmUyLTE2LnBjICAgICAgICkgZGF0YSBmb3IgdGhlIHBrZy1jb25maWcgY29tbWFuZAorLiBsaWJwY3JlMi0zMi5wYyAgICAgICApCisuIGxpYnBjcmUyLXBvc2l4LnBjICAgICkKKy4gbGlidG9vbCAgICAgICAgICAgICAgc2NyaXB0IHRoYXQgYnVpbGRzIHNoYXJlZCBhbmQvb3Igc3RhdGljIGxpYnJhcmllcworCitWZXJzaW9ucyBvZiBjb25maWcuaCBhbmQgcGNyZTIuaCBhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIHNyYyBkaXJlY3Rvcnkgb2YgUENSRTIKK3RhcmJhbGxzIHVuZGVyIHRoZSBuYW1lcyBjb25maWcuaC5nZW5lcmljIGFuZCBwY3JlMi5oLmdlbmVyaWMuIFRoZXNlIGFyZQorcHJvdmlkZWQgZm9yIHRob3NlIHdobyBoYXZlIHRvIGJ1aWxkIFBDUkUyIHdpdGhvdXQgdXNpbmcgImNvbmZpZ3VyZSIgb3IgQ01ha2UuCitJZiB5b3UgdXNlICJjb25maWd1cmUiIG9yIENNYWtlLCB0aGUgLmdlbmVyaWMgdmVyc2lvbnMgYXJlIG5vdCB1c2VkLgorCitUaGUgImNvbmZpZ3VyZSIgc2NyaXB0IGFsc28gY3JlYXRlcyBjb25maWcuc3RhdHVzLCB3aGljaCBpcyBhbiBleGVjdXRhYmxlCitzY3JpcHQgdGhhdCBjYW4gYmUgcnVuIHRvIHJlY3JlYXRlIHRoZSBjb25maWd1cmF0aW9uLCBhbmQgY29uZmlnLmxvZywgd2hpY2gKK2NvbnRhaW5zIGNvbXBpbGVyIG91dHB1dCBmcm9tIHRlc3RzIHRoYXQgImNvbmZpZ3VyZSIgcnVucy4KKworT25jZSAiY29uZmlndXJlIiBoYXMgcnVuLCB5b3UgY2FuIHJ1biAibWFrZSIuIFRoaXMgYnVpbGRzIHdoaWNoZXZlciBvZiB0aGUKK2xpYnJhcmllcyBsaWJwY3JlMi04LCBsaWJwY3JlMi0xNiBhbmQgbGlicGNyZTItMzIgYXJlIGNvbmZpZ3VyZWQsIGFuZCBhIHRlc3QKK3Byb2dyYW0gY2FsbGVkIHBjcmUydGVzdC4gSWYgeW91IGVuYWJsZWQgSklUIHN1cHBvcnQgd2l0aCAtLWVuYWJsZS1qaXQsIGFub3RoZXIKK3Rlc3QgcHJvZ3JhbSBjYWxsZWQgcGNyZTJfaml0X3Rlc3QgaXMgYnVpbHQgYXMgd2VsbC4gSWYgdGhlIDgtYml0IGxpYnJhcnkgaXMKK2J1aWx0LCBsaWJwY3JlMi1wb3NpeCBhbmQgdGhlIHBjcmUyZ3JlcCBjb21tYW5kIGFyZSBhbHNvIGJ1aWx0LiBSdW5uaW5nCisibWFrZSIgd2l0aCB0aGUgLWogb3B0aW9uIG1heSBzcGVlZCB1cCBjb21waWxhdGlvbiBvbiBtdWx0aXByb2Nlc3NvciBzeXN0ZW1zLgorCitUaGUgY29tbWFuZCAibWFrZSBjaGVjayIgcnVucyBhbGwgdGhlIGFwcHJvcHJpYXRlIHRlc3RzLiBEZXRhaWxzIG9mIHRoZSBQQ1JFMgordGVzdHMgYXJlIGdpdmVuIGJlbG93IGluIGEgc2VwYXJhdGUgc2VjdGlvbiBvZiB0aGlzIGRvY3VtZW50LiBUaGUgLWogb3B0aW9uIG9mCisibWFrZSIgY2FuIGFsc28gYmUgdXNlZCB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzLgorCitZb3UgY2FuIHVzZSAibWFrZSBpbnN0YWxsIiB0byBpbnN0YWxsIFBDUkUyIGludG8gbGl2ZSBkaXJlY3RvcmllcyBvbiB5b3VyCitzeXN0ZW0uIFRoZSBmb2xsb3dpbmcgYXJlIGluc3RhbGxlZCAoZmlsZSBuYW1lcyBhcmUgYWxsIHJlbGF0aXZlIHRvIHRoZQorPHByZWZpeD4gdGhhdCBpcyBzZXQgd2hlbiAiY29uZmlndXJlIiBpcyBydW4pOgorCisgIENvbW1hbmRzIChiaW4pOgorICAgIHBjcmUydGVzdAorICAgIHBjcmUyZ3JlcCAoaWYgOC1iaXQgc3VwcG9ydCBpcyBlbmFibGVkKQorICAgIHBjcmUyLWNvbmZpZworCisgIExpYnJhcmllcyAobGliKToKKyAgICBsaWJwY3JlMi04ICAgICAgKGlmIDgtYml0IHN1cHBvcnQgaXMgZW5hYmxlZCkKKyAgICBsaWJwY3JlMi0xNiAgICAgKGlmIDE2LWJpdCBzdXBwb3J0IGlzIGVuYWJsZWQpCisgICAgbGlicGNyZTItMzIgICAgIChpZiAzMi1iaXQgc3VwcG9ydCBpcyBlbmFibGVkKQorICAgIGxpYnBjcmUyLXBvc2l4ICAoaWYgOC1iaXQgc3VwcG9ydCBpcyBlbmFibGVkKQorCisgIENvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gKGxpYi9wa2djb25maWcpOgorICAgIGxpYnBjcmUyLTgucGMKKyAgICBsaWJwY3JlMi0xNi5wYworICAgIGxpYnBjcmUyLTMyLnBjCisgICAgbGlicGNyZTItcG9zaXgucGMKKworICBIZWFkZXIgZmlsZXMgKGluY2x1ZGUpOgorICAgIHBjcmUyLmgKKyAgICBwY3JlMnBvc2l4LmgKKworICBNYW4gcGFnZXMgKHNoYXJlL21hbi9tYW57MSwzfSk6CisgICAgcGNyZTJncmVwLjEKKyAgICBwY3JlMnRlc3QuMQorICAgIHBjcmUyLWNvbmZpZy4xCisgICAgcGNyZTIuMworICAgIHBjcmUyKi4zIChsb3RzIG1vcmUgcGFnZXMsIGFsbCBzdGFydGluZyAicGNyZTIiKQorCisgIEhUTUwgZG9jdW1lbnRhdGlvbiAoc2hhcmUvZG9jL3BjcmUyL2h0bWwpOgorICAgIGluZGV4Lmh0bWwKKyAgICAqLmh0bWwgKGxvdHMgbW9yZSBwYWdlcywgaHlwZXJsaW5rZWQgZnJvbSBpbmRleC5odG1sKQorCisgIFRleHQgZmlsZSBkb2N1bWVudGF0aW9uIChzaGFyZS9kb2MvcGNyZTIpOgorICAgIEFVVEhPUlMKKyAgICBDT1BZSU5HCisgICAgQ2hhbmdlTG9nCisgICAgTElDRU5DRQorICAgIE5FV1MKKyAgICBSRUFETUUKKyAgICBwY3JlMi50eHQgICAgICAgICAoYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBtYW4oMykgcGFnZXMpCisgICAgcGNyZTJ0ZXN0LnR4dCAgICAgdGhlIHBjcmUydGVzdCBtYW4gcGFnZQorICAgIHBjcmUyZ3JlcC50eHQgICAgIHRoZSBwY3JlMmdyZXAgbWFuIHBhZ2UKKyAgICBwY3JlMi1jb25maWcudHh0ICB0aGUgcGNyZTItY29uZmlnIG1hbiBwYWdlCisKK0lmIHlvdSB3YW50IHRvIHJlbW92ZSBQQ1JFMiBmcm9tIHlvdXIgc3lzdGVtLCB5b3UgY2FuIHJ1biAibWFrZSB1bmluc3RhbGwiLgorVGhpcyByZW1vdmVzIGFsbCB0aGUgZmlsZXMgdGhhdCAibWFrZSBpbnN0YWxsIiBpbnN0YWxsZWQuIEhvd2V2ZXIsIGl0IGRvZXMgbm90CityZW1vdmUgYW55IGRpcmVjdG9yaWVzLCBiZWNhdXNlIHRoZXNlIGFyZSBvZnRlbiBzaGFyZWQgd2l0aCBvdGhlciBwcm9ncmFtcy4KKworCitSZXRyaWV2aW5nIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSdW5uaW5nICJtYWtlIGluc3RhbGwiIGluc3RhbGxzIHRoZSBjb21tYW5kIHBjcmUyLWNvbmZpZywgd2hpY2ggY2FuIGJlIHVzZWQgdG8KK3JlY2FsbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUENSRTIgY29uZmlndXJhdGlvbiBhbmQgaW5zdGFsbGF0aW9uLiBGb3IgZXhhbXBsZToKKworICBwY3JlMi1jb25maWcgLS12ZXJzaW9uCisKK3ByaW50cyB0aGUgdmVyc2lvbiBudW1iZXIsIGFuZAorCisgIHBjcmUyLWNvbmZpZyAtLWxpYnM4CisKK291dHB1dHMgaW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgdGhlIDgtYml0IGxpYnJhcnkgaXMgaW5zdGFsbGVkLiBUaGlzIGNvbW1hbmQKK2NhbiBiZSBpbmNsdWRlZCBpbiBtYWtlZmlsZXMgZm9yIHByb2dyYW1zIHRoYXQgdXNlIFBDUkUyLCBzYXZpbmcgdGhlIHByb2dyYW1tZXIKK2Zyb20gaGF2aW5nIHRvIHJlbWVtYmVyIHRvbyBtYW55IGRldGFpbHMuIFJ1biBwY3JlMi1jb25maWcgd2l0aCBubyBhcmd1bWVudHMgdG8KK29idGFpbiBhIGxpc3Qgb2YgcG9zc2libGUgYXJndW1lbnRzLgorCitUaGUgcGtnLWNvbmZpZyBjb21tYW5kIGlzIGFub3RoZXIgc3lzdGVtIGZvciBzYXZpbmcgYW5kIHJldHJpZXZpbmcgaW5mb3JtYXRpb24KK2Fib3V0IGluc3RhbGxlZCBsaWJyYXJpZXMuIEluc3RlYWQgb2Ygc2VwYXJhdGUgY29tbWFuZHMgZm9yIGVhY2ggbGlicmFyeSwgYQorc2luZ2xlIGNvbW1hbmQgaXMgdXNlZC4gRm9yIGV4YW1wbGU6CisKKyAgcGtnLWNvbmZpZyAtLWxpYnMgbGlicGNyZTItMTYKKworVGhlIGRhdGEgaXMgaGVsZCBpbiAqLnBjIGZpbGVzIHRoYXQgYXJlIGluc3RhbGxlZCBpbiBhIGRpcmVjdG9yeSBjYWxsZWQKKzxwcmVmaXg+L2xpYi9wa2djb25maWcuCisKKworU2hhcmVkIGxpYnJhcmllcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZGVmYXVsdCBkaXN0cmlidXRpb24gYnVpbGRzIFBDUkUyIGFzIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMsCithcyBsb25nIGFzIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuIFNoYXJlZCBsaWJyYXJ5CitzdXBwb3J0IHJlbGllcyBvbiB0aGUgImxpYnRvb2wiIHNjcmlwdCB3aGljaCBpcyBidWlsdCBhcyBwYXJ0IG9mIHRoZQorImNvbmZpZ3VyZSIgcHJvY2Vzcy4KKworVGhlIGxpYnRvb2wgc2NyaXB0IGlzIHVzZWQgdG8gY29tcGlsZSBhbmQgbGluayBib3RoIHNoYXJlZCBhbmQgc3RhdGljCitsaWJyYXJpZXMuIFRoZXkgYXJlIHBsYWNlZCBpbiBhIHN1YmRpcmVjdG9yeSBjYWxsZWQgLmxpYnMgd2hlbiB0aGV5IGFyZSBuZXdseQorYnVpbHQuIFRoZSBwcm9ncmFtcyBwY3JlMnRlc3QgYW5kIHBjcmUyZ3JlcCBhcmUgYnVpbHQgdG8gdXNlIHRoZXNlIHVuaW5zdGFsbGVkCitsaWJyYXJpZXMgKGJ5IG1lYW5zIG9mIHdyYXBwZXIgc2NyaXB0cyBpbiB0aGUgY2FzZSBvZiBzaGFyZWQgbGlicmFyaWVzKS4gV2hlbgoreW91IHVzZSAibWFrZSBpbnN0YWxsIiB0byBpbnN0YWxsIHNoYXJlZCBsaWJyYXJpZXMsIHBjcmUyZ3JlcCBhbmQgcGNyZTJ0ZXN0IGFyZQorYXV0b21hdGljYWxseSByZS1idWlsdCB0byB1c2UgdGhlIG5ld2x5IGluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIGJlZm9yZSBiZWluZworaW5zdGFsbGVkIHRoZW1zZWx2ZXMuIEhvd2V2ZXIsIHRoZSB2ZXJzaW9ucyBsZWZ0IGluIHRoZSBidWlsZCBkaXJlY3Rvcnkgc3RpbGwKK3VzZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgorCitUbyBidWlsZCBQQ1JFMiB1c2luZyBzdGF0aWMgbGlicmFyaWVzIG9ubHkgeW91IG11c3QgdXNlIC0tZGlzYWJsZS1zaGFyZWQgd2hlbgorY29uZmlndXJpbmcgaXQuIEZvciBleGFtcGxlOgorCisuL2NvbmZpZ3VyZSAtLXByZWZpeD0vdXNyL2dudSAtLWRpc2FibGUtc2hhcmVkCisKK1RoZW4gcnVuICJtYWtlIiBpbiB0aGUgdXN1YWwgd2F5LiBTaW1pbGFybHksIHlvdSBjYW4gdXNlIC0tZGlzYWJsZS1zdGF0aWMgdG8KK2J1aWxkIG9ubHkgc2hhcmVkIGxpYnJhcmllcy4KKworCitDcm9zcy1jb21waWxpbmcgdXNpbmcgYXV0b3Rvb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gc3BlY2lmeSBDQyBhbmQgQ0ZMQUdTIGluIHRoZSBub3JtYWwgd2F5IHRvIHRoZSAiY29uZmlndXJlIiBjb21tYW5kLCBpbgorb3JkZXIgdG8gY3Jvc3MtY29tcGlsZSBQQ1JFMiBmb3Igc29tZSBvdGhlciBob3N0LiBIb3dldmVyLCB5b3Ugc2hvdWxkIE5PVAorc3BlY2lmeSAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMsIGJlY2F1c2UgaWYgeW91IGRvLCB0aGUgZGZ0YWJsZXMuYyBzb3VyY2UKK2ZpbGUgaXMgY29tcGlsZWQgYW5kIHJ1biBvbiB0aGUgbG9jYWwgaG9zdCwgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgdGhlIGluYnVpbHQKK2NoYXJhY3RlciB0YWJsZXMgKHRoZSBwY3JlMl9jaGFydGFibGVzLmMgZmlsZSkuIFRoaXMgd2lsbCBwcm9iYWJseSBub3Qgd29yaywKK2JlY2F1c2UgZGZ0YWJsZXMuYyBuZWVkcyB0byBiZSBjb21waWxlZCB3aXRoIHRoZSBsb2NhbCBjb21waWxlciwgbm90IHRoZSBjcm9zcworY29tcGlsZXIuCisKK1doZW4gLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzIGlzIG5vdCBzcGVjaWZpZWQsIHBjcmUyX2NoYXJ0YWJsZXMuYyBpcworY3JlYXRlZCBieSBtYWtpbmcgYSBjb3B5IG9mIHBjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0LCB3aGljaCBpcyBhIGRlZmF1bHQgc2V0IG9mCit0YWJsZXMgdGhhdCBhc3N1bWVzIEFTQ0lJIGNvZGUuIENyb3NzLWNvbXBpbGluZyB3aXRoIHRoZSBkZWZhdWx0IHRhYmxlcyBzaG91bGQKK25vdCBiZSBhIHByb2JsZW0uCisKK0lmIHlvdSBuZWVkIHRvIG1vZGlmeSB0aGUgY2hhcmFjdGVyIHRhYmxlcyB3aGVuIGNyb3NzLWNvbXBpbGluZywgeW91IHNob3VsZAorbW92ZSBwY3JlMl9jaGFydGFibGVzLmMuZGlzdCBvdXQgb2YgdGhlIHdheSwgdGhlbiBjb21waWxlIGRmdGFibGVzLmMgYnkgaGFuZAorYW5kIHJ1biBpdCBvbiB0aGUgbG9jYWwgaG9zdCB0byBtYWtlIGEgbmV3IHZlcnNpb24gb2YgcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QuCitUaGVuIHdoZW4geW91IGNyb3NzLWNvbXBpbGUgUENSRTIgdGhpcyBuZXcgdmVyc2lvbiBvZiB0aGUgdGFibGVzIHdpbGwgYmUgdXNlZC4KKworCitNYWtpbmcgbmV3IHRhcmJhbGxzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBjb21tYW5kICJtYWtlIGRpc3QiIGNyZWF0ZXMgdGhyZWUgUENSRTIgdGFyYmFsbHMsIGluIHRhci5neiwgdGFyLmJ6MiwgYW5kCit6aXAgZm9ybWF0cy4gVGhlIGNvbW1hbmQgIm1ha2UgZGlzdGNoZWNrIiBkb2VzIHRoZSBzYW1lLCBidXQgdGhlbiBkb2VzIGEgdHJpYWwKK2J1aWxkIG9mIHRoZSBuZXcgZGlzdHJpYnV0aW9uIHRvIGVuc3VyZSB0aGF0IGl0IHdvcmtzLgorCitJZiB5b3UgaGF2ZSBtb2RpZmllZCBhbnkgb2YgdGhlIG1hbiBwYWdlIHNvdXJjZXMgaW4gdGhlIGRvYyBkaXJlY3RvcnksIHlvdQorc2hvdWxkIGZpcnN0IHJ1biB0aGUgUHJlcGFyZVJlbGVhc2Ugc2NyaXB0IGJlZm9yZSBtYWtpbmcgYSBkaXN0cmlidXRpb24uIFRoaXMKK3NjcmlwdCBjcmVhdGVzIHRoZSAudHh0IGFuZCBIVE1MIGZvcm1zIG9mIHRoZSBkb2N1bWVudGF0aW9uIGZyb20gdGhlIG1hbiBwYWdlcy4KKworCitUZXN0aW5nIFBDUkUyCistLS0tLS0tLS0tLS0KKworVG8gdGVzdCB0aGUgYmFzaWMgUENSRTIgbGlicmFyeSBvbiBhIFVuaXgtbGlrZSBzeXN0ZW0sIHJ1biB0aGUgUnVuVGVzdCBzY3JpcHQuCitUaGVyZSBpcyBhbm90aGVyIHNjcmlwdCBjYWxsZWQgUnVuR3JlcFRlc3QgdGhhdCB0ZXN0cyB0aGUgcGNyZTJncmVwIGNvbW1hbmQuCitXaGVuIEpJVCBzdXBwb3J0IGlzIGVuYWJsZWQsIGEgdGhpcmQgdGVzdCBwcm9ncmFtIGNhbGxlZCBwY3JlMl9qaXRfdGVzdCBpcworYnVpbHQuIEJvdGggdGhlIHNjcmlwdHMgYW5kIGFsbCB0aGUgcHJvZ3JhbSB0ZXN0cyBhcmUgcnVuIGlmIHlvdSBvYmV5ICJtYWtlCitjaGVjayIuIEZvciBvdGhlciBlbnZpcm9ubWVudHMsIHNlZSB0aGUgaW5zdHJ1Y3Rpb25zIGluIE5PTi1BVVRPVE9PTFMtQlVJTEQuCisKK1RoZSBSdW5UZXN0IHNjcmlwdCBydW5zIHRoZSBwY3JlMnRlc3QgdGVzdCBwcm9ncmFtICh3aGljaCBpcyBkb2N1bWVudGVkIGluIGl0cworb3duIG1hbiBwYWdlKSBvbiBlYWNoIG9mIHRoZSByZWxldmFudCB0ZXN0aW5wdXQgZmlsZXMgaW4gdGhlIHRlc3RkYXRhCitkaXJlY3RvcnksIGFuZCBjb21wYXJlcyB0aGUgb3V0cHV0IHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoZSBjb3JyZXNwb25kaW5nCit0ZXN0b3V0cHV0IGZpbGVzLiBSdW5UZXN0IHVzZXMgYSBmaWxlIGNhbGxlZCB0ZXN0dHJ5IHRvIGhvbGQgdGhlIG1haW4gb3V0cHV0Citmcm9tIHBjcmUydGVzdC4gT3RoZXIgZmlsZXMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAidGVzdCIgYXJlIHVzZWQgYXMgd29ya2luZworZmlsZXMgaW4gc29tZSB0ZXN0cy4KKworU29tZSB0ZXN0cyBhcmUgcmVsZXZhbnQgb25seSB3aGVuIGNlcnRhaW4gYnVpbGQtdGltZSBvcHRpb25zIHdlcmUgc2VsZWN0ZWQuIEZvcgorZXhhbXBsZSwgdGhlIHRlc3RzIGZvciBVVEYtOC8xNi8zMiBmZWF0dXJlcyBhcmUgcnVuIG9ubHkgd2hlbiBVbmljb2RlIHN1cHBvcnQKK2lzIGF2YWlsYWJsZS4gUnVuVGVzdCBvdXRwdXRzIGEgY29tbWVudCB3aGVuIGl0IHNraXBzIGEgdGVzdC4KKworTWFueSAoYnV0IG5vdCBhbGwpIG9mIHRoZSB0ZXN0cyB0aGF0IGFyZSBub3Qgc2tpcHBlZCBhcmUgcnVuIHR3aWNlIGlmIEpJVAorc3VwcG9ydCBpcyBhdmFpbGFibGUuIE9uIHRoZSBzZWNvbmQgcnVuLCBKSVQgY29tcGlsYXRpb24gaXMgZm9yY2VkLiBUaGlzCit0ZXN0aW5nIGNhbiBiZSBzdXBwcmVzc2VkIGJ5IHB1dHRpbmcgIm5vaml0IiBvbiB0aGUgUnVuVGVzdCBjb21tYW5kIGxpbmUuCisKK1RoZSBlbnRpcmUgc2V0IG9mIHRlc3RzIGlzIHJ1biBvbmNlIGZvciBlYWNoIG9mIHRoZSA4LWJpdCwgMTYtYml0IGFuZCAzMi1iaXQKK2xpYnJhcmllcyB0aGF0IGFyZSBlbmFibGVkLiBJZiB5b3Ugd2FudCB0byBydW4ganVzdCBvbmUgc2V0IG9mIHRlc3RzLCBjYWxsCitSdW5UZXN0IHdpdGggZWl0aGVyIHRoZSAtOCwgLTE2IG9yIC0zMiBvcHRpb24uCisKK0lmIHZhbGdyaW5kIGlzIGluc3RhbGxlZCwgeW91IGNhbiBydW4gdGhlIHRlc3RzIHVuZGVyIGl0IGJ5IHB1dHRpbmcgInZhbGdyaW5kIgorb24gdGhlIFJ1blRlc3QgY29tbWFuZCBsaW5lLiBUbyBydW4gcGNyZTJ0ZXN0IG9uIGp1c3Qgb25lIG9yIG1vcmUgc3BlY2lmaWMgdGVzdAorZmlsZXMsIGdpdmUgdGhlaXIgbnVtYmVycyBhcyBhcmd1bWVudHMgdG8gUnVuVGVzdCwgZm9yIGV4YW1wbGU6CisKKyAgUnVuVGVzdCAyIDcgMTEKKworWW91IGNhbiBhbHNvIHNwZWNpZnkgcmFuZ2VzIG9mIHRlc3RzIHN1Y2ggYXMgMy02IG9yIDMtIChtZWFuaW5nIDMgdG8gdGhlCitlbmQpLCBvciBhIG51bWJlciBwcmVjZWRlZCBieSB+IHRvIGV4Y2x1ZGUgYSB0ZXN0LiBGb3IgZXhhbXBsZToKKworICBSdW50ZXN0IDMtMTUgfjEwCisKK1RoaXMgcnVucyB0ZXN0cyAzIHRvIDE1LCBleGNsdWRpbmcgdGVzdCAxMCwgYW5kIGp1c3QgfjEzIHJ1bnMgYWxsIHRoZSB0ZXN0cworZXhjZXB0IHRlc3QgMTMuIFdoYXRldmVyIG9yZGVyIHRoZSBhcmd1bWVudHMgYXJlIGluLCB0aGUgdGVzdHMgYXJlIGFsd2F5cyBydW4KK2luIG51bWVyaWNhbCBvcmRlci4KKworWW91IGNhbiBhbHNvIGNhbGwgUnVuVGVzdCB3aXRoIHRoZSBzaW5nbGUgYXJndW1lbnQgImxpc3QiIHRvIGNhdXNlIGl0IHRvIG91dHB1dAorYSBsaXN0IG9mIHRlc3RzLgorCitUaGUgdGVzdCBzZXF1ZW5jZSBzdGFydHMgd2l0aCAidGVzdCAwIiwgd2hpY2ggaXMgYSBzcGVjaWFsIHRlc3QgdGhhdCBoYXMgbm8KK2lucHV0IGZpbGUsIGFuZCB3aG9zZSBvdXRwdXQgaXMgbm90IGNoZWNrZWQuIFRoaXMgaXMgYmVjYXVzZSBpdCB3aWxsIGJlCitkaWZmZXJlbnQgb24gZGlmZmVyZW50IGhhcmR3YXJlIGFuZCB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy4gVGhlIHRlc3QKK2V4aXN0cyBpbiBvcmRlciB0byBleGVyY2lzZSBzb21lIG9mIHBjcmUydGVzdCdzIGNvZGUgdGhhdCB3b3VsZCBub3Qgb3RoZXJ3aXNlCitiZSBydW4uCisKK1Rlc3RzIDEgYW5kIDIgY2FuIGFsd2F5cyBiZSBydW4sIGFzIHRoZXkgZXhwZWN0IG9ubHkgcGxhaW4gdGV4dCBzdHJpbmdzIChub3QKK1VURikgYW5kIG1ha2Ugbm8gdXNlIG9mIFVuaWNvZGUgcHJvcGVydGllcy4gVGhlIGZpcnN0IHRlc3QgZmlsZSBjYW4gYmUgZmVkCitkaXJlY3RseSBpbnRvIHRoZSBwZXJsdGVzdC5zaCBzY3JpcHQgdG8gY2hlY2sgdGhhdCBQZXJsIGdpdmVzIHRoZSBzYW1lIHJlc3VsdHMuCitUaGUgb25seSBkaWZmZXJlbmNlIHlvdSBzaG91bGQgc2VlIGlzIGluIHRoZSBmaXJzdCBmZXcgbGluZXMsIHdoZXJlIHRoZSBQZXJsCit2ZXJzaW9uIGlzIGdpdmVuIGluc3RlYWQgb2YgdGhlIFBDUkUyIHZlcnNpb24uIFRoZSBzZWNvbmQgc2V0IG9mIHRlc3RzIGNoZWNrCithdXhpbGlhcnkgZnVuY3Rpb25zLCBlcnJvciBkZXRlY3Rpb24sIGFuZCBydW4tdGltZSBmbGFncyB0aGF0IGFyZSBzcGVjaWZpYyB0bworUENSRTIuIEl0IGFsc28gdXNlcyB0aGUgZGVidWdnaW5nIGZsYWdzIHRvIGNoZWNrIHNvbWUgb2YgdGhlIGludGVybmFscyBvZgorcGNyZTJfY29tcGlsZSgpLgorCitJZiB5b3UgYnVpbGQgUENSRTIgd2l0aCBhIGxvY2FsZSBzZXR0aW5nIHRoYXQgaXMgbm90IHRoZSBzdGFuZGFyZCBDIGxvY2FsZSwgdGhlCitjaGFyYWN0ZXIgdGFibGVzIG1heSBiZSBkaWZmZXJlbnQgKHNlZSBuZXh0IHBhcmFncmFwaCkuIEluIHNvbWUgY2FzZXMsIHRoaXMgbWF5CitjYXVzZSBmYWlsdXJlcyBpbiB0aGUgc2Vjb25kIHNldCBvZiB0ZXN0cy4gRm9yIGV4YW1wbGUsIGluIGEgbG9jYWxlIHdoZXJlIHRoZQoraXNwcmludCgpIGZ1bmN0aW9uIHlpZWxkcyBUUlVFIGZvciBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSAxMjgtMjU1LCB0aGUgdXNlIG9mCitbOmlzYXNjaWk6XSBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MgZGVmaW5lcyBhIGRpZmZlcmVudCBzZXQgb2YgY2hhcmFjdGVycywgYW5kCit0aGlzIHNob3dzIHVwIGluIHRoaXMgdGVzdCBhcyBhIGRpZmZlcmVuY2UgaW4gdGhlIGNvbXBpbGVkIGNvZGUsIHdoaWNoIGlzIGJlaW5nCitsaXN0ZWQgZm9yIGNoZWNraW5nLiBGb3IgZXhhbXBsZSwgd2hlcmUgdGhlIGNvbXBhcmlzb24gdGVzdCBvdXRwdXQgY29udGFpbnMKK1tceDAwLVx4N2ZdIHRoZSB0ZXN0IG1pZ2h0IGNvbnRhaW4gW1x4MDAtXHhmZl0sIGFuZCBzaW1pbGFybHkgaW4gc29tZSBvdGhlcgorY2FzZXMuIFRoaXMgaXMgbm90IGEgYnVnIGluIFBDUkUyLgorCitUZXN0IDMgY2hlY2tzIHBjcmUyX21ha2V0YWJsZXMoKSwgdGhlIGZhY2lsaXR5IGZvciBidWlsZGluZyBhIHNldCBvZiBjaGFyYWN0ZXIKK3RhYmxlcyBmb3IgYSBzcGVjaWZpYyBsb2NhbGUgYW5kIHVzaW5nIHRoZW0gaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCB0YWJsZXMuIFRoZQorc2NyaXB0IHVzZXMgdGhlICJsb2NhbGUiIGNvbW1hbmQgdG8gY2hlY2sgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlICJmcl9GUiIsCisiZnJlbmNoIiwgb3IgImZyIiBsb2NhbGUsIGFuZCB1c2VzIHRoZSBmaXJzdCBvbmUgdGhhdCBpdCBmaW5kcy4gSWYgdGhlICJsb2NhbGUiCitjb21tYW5kIGZhaWxzLCBvciBpZiBpdHMgb3V0cHV0IGRvZXNuJ3QgaW5jbHVkZSAiZnJfRlIiLCAiZnJlbmNoIiwgb3IgImZyIiBpbgordGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGxvY2FsZXMsIHRoZSB0aGlyZCB0ZXN0IGNhbm5vdCBiZSBydW4sIGFuZCBhIGNvbW1lbnQgaXMKK291dHB1dCB0byBzYXkgd2h5LiBJZiBydW5uaW5nIHRoaXMgdGVzdCBwcm9kdWNlcyBhbiBlcnJvciBsaWtlIHRoaXM6CisKKyAgKiogRmFpbGVkIHRvIHNldCBsb2NhbGUgImZyX0ZSIgorCitpdCBtZWFucyB0aGF0IHRoZSBnaXZlbiBsb2NhbGUgaXMgbm90IGF2YWlsYWJsZSBvbiB5b3VyIHN5c3RlbSwgZGVzcGl0ZSBiZWluZworbGlzdGVkIGJ5ICJsb2NhbGUiLiBUaGlzIGRvZXMgbm90IG1lYW4gdGhhdCBQQ1JFMiBpcyBicm9rZW4uIFRoZXJlIGFyZSB0aHJlZQorYWx0ZXJuYXRpdmUgb3V0cHV0IGZpbGVzIGZvciB0aGUgdGhpcmQgdGVzdCwgYmVjYXVzZSB0aHJlZSBkaWZmZXJlbnQgdmVyc2lvbnMKK29mIHRoZSBGcmVuY2ggbG9jYWxlIGhhdmUgYmVlbiBlbmNvdW50ZXJlZC4gVGhlIHRlc3QgcGFzc2VzIGlmIGl0cyBvdXRwdXQKK21hdGNoZXMgYW55IG9uZSBvZiB0aGVtLgorCitUZXN0cyA0IGFuZCA1IGNoZWNrIFVURiBhbmQgVW5pY29kZSBwcm9wZXJ0eSBzdXBwb3J0LCB0ZXN0IDQgYmVpbmcgY29tcGF0aWJsZQord2l0aCB0aGUgcGVybHRlc3Quc2ggc2NyaXB0LCBhbmQgdGVzdCA1IGNoZWNraW5nIFBDUkUyLXNwZWNpZmljIHRoaW5ncy4KKworVGVzdHMgNiBhbmQgNyBjaGVjayB0aGUgcGNyZTJfZGZhX21hdGNoKCkgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24sIGluCitub24tVVRGIG1vZGUgYW5kIFVURi1tb2RlIHdpdGggVW5pY29kZSBwcm9wZXJ0eSBzdXBwb3J0LCByZXNwZWN0aXZlbHkuCisKK1Rlc3QgOCBjaGVja3Mgc29tZSBpbnRlcm5hbCBvZmZzZXRzIGFuZCBjb2RlIHNpemUgZmVhdHVyZXM7IGl0IGlzIHJ1biBvbmx5IHdoZW4KK3RoZSBkZWZhdWx0ICJsaW5rIHNpemUiIG9mIDIgaXMgc2V0IChpbiBvdGhlciBjYXNlcyB0aGUgc2l6ZXMgY2hhbmdlKSBhbmQgd2hlbgorVW5pY29kZSBzdXBwb3J0IGlzIGVuYWJsZWQuCisKK1Rlc3RzIDkgYW5kIDEwIGFyZSBydW4gb25seSBpbiA4LWJpdCBtb2RlLCBhbmQgdGVzdHMgMTEgYW5kIDEyIGFyZSBydW4gb25seSBpbgorMTYtYml0IGFuZCAzMi1iaXQgbW9kZXMuIFRoZXNlIGFyZSB0ZXN0cyB0aGF0IGdlbmVyYXRlIGRpZmZlcmVudCBvdXRwdXQgaW4KKzgtYml0IG1vZGUuIEVhY2ggcGFpciBhcmUgZm9yIGdlbmVyYWwgY2FzZXMgYW5kIFVuaWNvZGUgc3VwcG9ydCwgcmVzcGVjdGl2ZWx5LgorVGVzdCAxMyBjaGVja3MgdGhlIGhhbmRsaW5nIG9mIG5vbi1VVEYgY2hhcmFjdGVycyBncmVhdGVyIHRoYW4gMjU1IGJ5CitwY3JlMl9kZmFfbWF0Y2goKSBpbiAxNi1iaXQgYW5kIDMyLWJpdCBtb2Rlcy4KKworVGVzdCAxNCBjb250YWlucyBhIG51bWJlciBvZiB0ZXN0cyB0aGF0IG11c3Qgbm90IGJlIHJ1biB3aXRoIEpJVC4gVGhleSBjaGVjaywKK2Ftb25nIG90aGVyIG5vbi1KSVQgdGhpbmdzLCB0aGUgbWF0Y2gtbGltaXRpbmcgZmVhdHVyZXMgb2YgdGhlIGludGVwcmV0aXZlCittYXRjaGVyLgorCitUZXN0IDE1IGlzIHJ1biBvbmx5IHdoZW4gSklUIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4gSXQgY2hlY2tzIHRoYXQgYW4KK2F0dGVtcHQgdG8gdXNlIEpJVCBoYXMgdGhlIGV4cGVjdGVkIGJlaGF2aW91ci4KKworVGVzdCAxNiBpcyBydW4gb25seSB3aGVuIEpJVCBzdXBwb3J0IGlzIGF2YWlsYWJsZS4gSXQgY2hlY2tzIEpJVCBjb21wbGV0ZSBhbmQKK3BhcnRpYWwgbW9kZXMsIG1hdGNoLWxpbWl0aW5nIHVuZGVyIEpJVCwgYW5kIG90aGVyIEpJVC1zcGVjaWZpYyBmZWF0dXJlcy4KKworVGVzdHMgMTcgYW5kIDE4IGFyZSBydW4gb25seSBpbiA4LWJpdCBtb2RlLiBUaGV5IGNoZWNrIHRoZSBQT1NJWCBpbnRlcmZhY2UgdG8KK3RoZSA4LWJpdCBsaWJyYXJ5LCB3aXRob3V0IGFuZCB3aXRoIFVuaWNvZGUgc3VwcG9ydCwgcmVzcGVjdGl2ZWx5LgorCitUZXN0IDE5IGNoZWNrcyB0aGUgc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMgYnkgd3JpdGluZyBhIHNldCBvZiBjb21waWxlZAorcGF0dGVybnMgdG8gYSBmaWxlLCBhbmQgdGhlbiByZWxvYWRpbmcgYW5kIGNoZWNraW5nIHRoZW0uCisKKworQ2hhcmFjdGVyIHRhYmxlcworLS0tLS0tLS0tLS0tLS0tLQorCitGb3Igc3BlZWQsIFBDUkUyIHVzZXMgZm91ciB0YWJsZXMgZm9yIG1hbmlwdWxhdGluZyBhbmQgaWRlbnRpZnlpbmcgY2hhcmFjdGVycword2hvc2UgY29kZSBwb2ludCB2YWx1ZXMgYXJlIGxlc3MgdGhhbiAyNTYuIEJ5IGRlZmF1bHQsIGEgc2V0IG9mIHRhYmxlcyB0aGF0IGlzCitidWlsdCBpbnRvIHRoZSBsaWJyYXJ5IGlzIHVzZWQuIFRoZSBwY3JlMl9tYWtldGFibGVzKCkgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZAorYnkgYW4gYXBwbGljYXRpb24gdG8gY3JlYXRlIGEgbmV3IHNldCBvZiB0YWJsZXMgaW4gdGhlIGN1cnJlbnQgbG9jYWxlLiBUaGlzIGFyZQorcGFzc2VkIHRvIFBDUkUyIGJ5IGNhbGxpbmcgcGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXMoKSB0byBwdXQgYSBwb2ludGVyIGludG8gYQorY29tcGlsZSBjb250ZXh0LgorCitUaGUgc291cmNlIGZpbGUgY2FsbGVkIHBjcmUyX2NoYXJ0YWJsZXMuYyBjb250YWlucyB0aGUgZGVmYXVsdCBzZXQgb2YgdGFibGVzLgorQnkgZGVmYXVsdCwgdGhpcyBpcyBjcmVhdGVkIGFzIGEgY29weSBvZiBwY3JlMl9jaGFydGFibGVzLmMuZGlzdCwgd2hpY2gKK2NvbnRhaW5zIHRhYmxlcyBmb3IgQVNDSUkgY29kaW5nLiBIb3dldmVyLCBpZiAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgaXMKK3NwZWNpZmllZCBmb3IgLi9jb25maWd1cmUsIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgcGNyZTJfY2hhcnRhYmxlcy5jIGlzIGJ1aWx0CitieSB0aGUgcHJvZ3JhbSBkZnRhYmxlcyAoY29tcGlsZWQgZnJvbSBkZnRhYmxlcy5jKSwgd2hpY2ggdXNlcyB0aGUgQU5TSSBDCitjaGFyYWN0ZXIgaGFuZGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgaXNhbG51bSgpLCBpc2FscGhhKCksIGlzdXBwZXIoKSwKK2lzbG93ZXIoKSwgZXRjLiB0byBidWlsZCB0aGUgdGFibGUgc291cmNlcy4gVGhpcyBtZWFucyB0aGF0IHRoZSBkZWZhdWx0IEMKK2xvY2FsZSB3aGljaCBpcyBzZXQgZm9yIHlvdXIgc3lzdGVtIHdpbGwgY29udHJvbCB0aGUgY29udGVudHMgb2YgdGhlc2UgZGVmYXVsdAordGFibGVzLiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdCB0YWJsZXMgYnkgZWRpdGluZyBwY3JlMl9jaGFydGFibGVzLmMgYW5kCit0aGVuIHJlLWJ1aWxkaW5nIFBDUkUyLiBJZiB5b3UgZG8gdGhpcywgeW91IHNob3VsZCB0YWtlIGNhcmUgdG8gZW5zdXJlIHRoYXQgdGhlCitmaWxlIGRvZXMgbm90IGdldCBhdXRvbWF0aWNhbGx5IHJlLWdlbmVyYXRlZC4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdG8KK21vdmUgcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3Qgb3V0IG9mIHRoZSB3YXkgYW5kIHJlcGxhY2UgaXQgd2l0aCB5b3VyIGN1c3RvbWl6ZWQKK3RhYmxlcy4KKworV2hlbiB0aGUgZGZ0YWJsZXMgcHJvZ3JhbSBpcyBydW4gYXMgYSByZXN1bHQgb2YgLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzLAoraXQgdXNlcyB0aGUgZGVmYXVsdCBDIGxvY2FsZSB0aGF0IGlzIHNldCBvbiB5b3VyIHN5c3RlbS4gSXQgZG9lcyBub3QgcGF5CithdHRlbnRpb24gdG8gdGhlIExDX3h4eCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIEluIG90aGVyIHdvcmRzLCBpdCB1c2VzIHRoZQorc3lzdGVtJ3MgZGVmYXVsdCBsb2NhbGUgcmF0aGVyIHRoYW4gd2hhdGV2ZXIgdGhlIGNvbXBpbGluZyB1c2VyIGhhcHBlbnMgdG8gaGF2ZQorc2V0LiBJZiB5b3UgcmVhbGx5IGRvIHdhbnQgdG8gYnVpbGQgYSBzb3VyY2Ugc2V0IG9mIGNoYXJhY3RlciB0YWJsZXMgaW4gYQorbG9jYWxlIHRoYXQgaXMgc3BlY2lmaWVkIGJ5IHRoZSBMQ194eHggdmFyaWFibGVzLCB5b3UgY2FuIHJ1biB0aGUgZGZ0YWJsZXMKK3Byb2dyYW0gYnkgaGFuZCB3aXRoIHRoZSAtTCBvcHRpb24uIEZvciBleGFtcGxlOgorCisgIC4vZGZ0YWJsZXMgLUwgcGNyZTJfY2hhcnRhYmxlcy5jLnNwZWNpYWwKKworVGhlIGZpcnN0IHR3byAyNTYtYnl0ZSB0YWJsZXMgcHJvdmlkZSBsb3dlciBjYXNpbmcgYW5kIGNhc2UgZmxpcHBpbmcgZnVuY3Rpb25zLAorcmVzcGVjdGl2ZWx5LiBUaGUgbmV4dCB0YWJsZSBjb25zaXN0cyBvZiB0aHJlZSAzMi1ieXRlIGJpdCBtYXBzIHdoaWNoIGlkZW50aWZ5CitkaWdpdHMsICJ3b3JkIiBjaGFyYWN0ZXJzLCBhbmQgd2hpdGUgc3BhY2UsIHJlc3BlY3RpdmVseS4gVGhlc2UgYXJlIHVzZWQgd2hlbgorYnVpbGRpbmcgMzItYnl0ZSBiaXQgbWFwcyB0aGF0IHJlcHJlc2VudCBjaGFyYWN0ZXIgY2xhc3NlcyBmb3IgY29kZSBwb2ludHMgbGVzcwordGhhbiAyNTYuIFRoZSBmaW5hbCAyNTYtYnl0ZSB0YWJsZSBoYXMgYml0cyBpbmRpY2F0aW5nIHZhcmlvdXMgY2hhcmFjdGVyIHR5cGVzLAorYXMgZm9sbG93czoKKworICAgIDEgICB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIKKyAgICAyICAgbGV0dGVyCisgICAgNCAgIGRlY2ltYWwgZGlnaXQKKyAgICA4ICAgaGV4YWRlY2ltYWwgZGlnaXQKKyAgIDE2ICAgYWxwaGFudW1lcmljIG9yICdfJworICAxMjggICByZWd1bGFyIGV4cHJlc3Npb24gbWV0YWNoYXJhY3RlciBvciBiaW5hcnkgemVybworCitZb3Ugc2hvdWxkIG5vdCBhbHRlciB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdGhhdCBjb250YWluIHRoZSAxMjggYml0LCBhcyB0aGF0Cit3aWxsIGNhdXNlIFBDUkUyIHRvIG1hbGZ1bmN0aW9uLgorCisKK0ZpbGUgbWFuaWZlc3QKKy0tLS0tLS0tLS0tLS0KKworVGhlIGRpc3RyaWJ1dGlvbiBzaG91bGQgY29udGFpbiB0aGUgZmlsZXMgbGlzdGVkIGJlbG93LgorCisoQSkgU291cmNlIGZpbGVzIGZvciB0aGUgUENSRTIgbGlicmFyeSBmdW5jdGlvbnMgYW5kIHRoZWlyIGhlYWRlcnMgYXJlIGZvdW5kIGluCisgICAgdGhlIHNyYyBkaXJlY3Rvcnk6CisKKyAgc3JjL2RmdGFibGVzLmMgICAgICAgICAgIGF1eGlsaWFyeSBwcm9ncmFtIGZvciBidWlsZGluZyBwY3JlMl9jaGFydGFibGVzLmMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzIGlzIHNwZWNpZmllZAorCisgIHNyYy9wY3JlMl9jaGFydGFibGVzLmMuZGlzdCAgYSBkZWZhdWx0IHNldCBvZiBjaGFyYWN0ZXIgdGFibGVzIHRoYXQgYXNzdW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBU0NJSSBjb2Rpbmc7IHVubGVzcyAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgdXNlZCBieSBjb3B5aW5nIHRvIHBjcmUyX2NoYXJ0YWJsZXMuYworCisgIHNyYy9wY3JlMnBvc2l4LmMgICAgICAgICApCisgIHNyYy9wY3JlMl9hdXRvX3Bvc3Nlc3MuYyApCisgIHNyYy9wY3JlMl9jb21waWxlLmMgICAgICApCisgIHNyYy9wY3JlMl9jb25maWcuYyAgICAgICApCisgIHNyYy9wY3JlMl9jb250ZXh0LmMgICAgICApCisgIHNyYy9wY3JlMl9kZmFfbWF0Y2guYyAgICApCisgIHNyYy9wY3JlMl9lcnJvci5jICAgICAgICApCisgIHNyYy9wY3JlMl9maW5kX2JyYWNrZXQuYyApCisgIHNyYy9wY3JlMl9qaXRfY29tcGlsZS5jICApCisgIHNyYy9wY3JlMl9qaXRfbWF0Y2guYyAgICApIHNvdXJjZXMgZm9yIHRoZSBmdW5jdGlvbnMgaW4gdGhlIGxpYnJhcnksCisgIHNyYy9wY3JlMl9qaXRfbWlzYy5jICAgICApICAgYW5kIHNvbWUgaW50ZXJuYWwgZnVuY3Rpb25zIHRoYXQgdGhleSB1c2UKKyAgc3JjL3BjcmUyX21ha2V0YWJsZXMuYyAgICkKKyAgc3JjL3BjcmUyX21hdGNoLmMgICAgICAgICkKKyAgc3JjL3BjcmUyX21hdGNoX2RhdGEuYyAgICkKKyAgc3JjL3BjcmUyX25ld2xpbmUuYyAgICAgICkKKyAgc3JjL3BjcmUyX29yZDJ1dGYuYyAgICAgICkKKyAgc3JjL3BjcmUyX3BhdHRlcm5faW5mby5jICkKKyAgc3JjL3BjcmUyX3NlcmlhbGl6ZS5jICAgICkKKyAgc3JjL3BjcmUyX3N0cmluZ191dGlscy5jICkKKyAgc3JjL3BjcmUyX3N0dWR5LmMgICAgICAgICkKKyAgc3JjL3BjcmUyX3N1YnN0aXR1dGUuYyAgICkKKyAgc3JjL3BjcmUyX3N1YnN0cmluZy5jICAgICkKKyAgc3JjL3BjcmUyX3RhYmxlcy5jICAgICAgICkKKyAgc3JjL3BjcmUyX3VjZC5jICAgICAgICAgICkKKyAgc3JjL3BjcmUyX3ZhbGlkX3V0Zi5jICAgICkKKyAgc3JjL3BjcmUyX3hjbGFzcy5jICAgICAgICkKKworICBzcmMvcGNyZTJfcHJpbnRpbnQuYyAgICAgZGVidWdnaW5nIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCBieSBwY3JlMnRlc3QsCisKKyAgc3JjL2NvbmZpZy5oLmluICAgICAgICAgIHRlbXBsYXRlIGZvciBjb25maWcuaCwgd2hlbiBidWlsdCBieSAiY29uZmlndXJlIgorICBzcmMvcGNyZTIuaC5pbiAgICAgICAgICAgdGVtcGxhdGUgZm9yIHBjcmUyLmggd2hlbiBidWlsdCBieSAiY29uZmlndXJlIgorICBzcmMvcGNyZTJwb3NpeC5oICAgICAgICAgaGVhZGVyIGZvciB0aGUgZXh0ZXJuYWwgUE9TSVggd3JhcHBlciBBUEkKKyAgc3JjL3BjcmUyX2ludGVybmFsLmggICAgIGhlYWRlciBmb3IgaW50ZXJuYWwgdXNlCisgIHNyYy9wY3JlMl9pbnRtb2RlZGVwLmggICBhIG1vZGUtc3BlY2lmaWMgaW50ZXJuYWwgaGVhZGVyCisgIHNyYy9wY3JlMl91Y3AuaCAgICAgICAgICBoZWFkZXIgZm9yIFVuaWNvZGUgcHJvcGVydHkgaGFuZGxpbmcKKworICBzbGppdC8qICAgICAgICAgICAgICAgICAgc291cmNlIGZpbGVzIGZvciB0aGUgSklUIGNvbXBpbGVyCisKKyhCKSBTb3VyY2UgZmlsZXMgZm9yIHByb2dyYW1zIHRoYXQgdXNlIFBDUkUyOgorCisgIHNyYy9wY3JlMmRlbW8uYyAgICAgICAgICBzaW1wbGUgZGVtb25zdHJhdGlvbiBvZiBjb2RpbmcgY2FsbHMgdG8gUENSRTIKKyAgc3JjL3BjcmUyZ3JlcC5jICAgICAgICAgIHNvdXJjZSBvZiBhIGdyZXAgdXRpbGl0eSB0aGF0IHVzZXMgUENSRTIKKyAgc3JjL3BjcmUydGVzdC5jICAgICAgICAgIGNvbXByZWhlbnNpdmUgdGVzdCBwcm9ncmFtCisgIHNyYy9wY3JlMl9wcmludGludC5jICAgICBwYXJ0IG9mIHBjcmUydGVzdAorICBzcmMvcGNyZTJfaml0X3Rlc3QuYyAgICAgSklUIHRlc3QgcHJvZ3JhbQorCisoQykgQXV4aWxpYXJ5IGZpbGVzOgorCisgIDEzMmh0bWwgICAgICAgICAgICAgICAgICBzY3JpcHQgdG8gdHVybiAibWFuIiBwYWdlcyBpbnRvIEhUTUwKKyAgQVVUSE9SUyAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhdXRob3Igb2YgUENSRTIKKyAgQ2hhbmdlTG9nICAgICAgICAgICAgICAgIGxvZyBvZiBjaGFuZ2VzIHRvIHRoZSBjb2RlCisgIENsZWFuVHh0ICAgICAgICAgICAgICAgICBzY3JpcHQgdG8gY2xlYW4gbnJvZmYgb3V0cHV0IGZvciB0eHQgbWFuIHBhZ2VzCisgIERldHJhaWwgICAgICAgICAgICAgICAgICBzY3JpcHQgdG8gcmVtb3ZlIHRyYWlsaW5nIHNwYWNlcworICBIQUNLSU5HICAgICAgICAgICAgICAgICAgc29tZSBub3RlcyBhYm91dCB0aGUgaW50ZXJuYWxzIG9mIFBDUkUyCisgIElOU1RBTEwgICAgICAgICAgICAgICAgICBnZW5lcmljIGluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMKKyAgTElDRU5DRSAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnMgZm9yIHRoZSB1c2Ugb2YgUENSRTIKKyAgQ09QWUlORyAgICAgICAgICAgICAgICAgIHRoZSBzYW1lLCB1c2luZyBHTlUncyBzdGFuZGFyZCBuYW1lCisgIE1ha2VmaWxlLmluICAgICAgICAgICAgICApIHRlbXBsYXRlIGZvciBVbml4IE1ha2VmaWxlLCB3aGljaCBpcyBidWlsdCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICJjb25maWd1cmUiCisgIE1ha2VmaWxlLmFtICAgICAgICAgICAgICApIHRoZSBhdXRvbWFrZSBpbnB1dCB0aGF0IHdhcyB1c2VkIHRvIGNyZWF0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgIE1ha2VmaWxlLmluCisgIE5FV1MgICAgICAgICAgICAgICAgICAgICBpbXBvcnRhbnQgY2hhbmdlcyBpbiB0aGlzIHJlbGVhc2UKKyAgTk9OLUFVVE9UT09MUy1CVUlMRCAgICAgIG5vdGVzIG9uIGJ1aWxkaW5nIFBDUkUyIHdpdGhvdXQgdXNpbmcgYXV0b3Rvb2xzCisgIFByZXBhcmVSZWxlYXNlICAgICAgICAgICBzY3JpcHQgdG8gbWFrZSBwcmVwYXJhdGlvbnMgZm9yICJtYWtlIGRpc3QiCisgIFJFQURNRSAgICAgICAgICAgICAgICAgICB0aGlzIGZpbGUKKyAgUnVuVGVzdCAgICAgICAgICAgICAgICAgIGEgVW5peCBzaGVsbCBzY3JpcHQgZm9yIHJ1bm5pbmcgdGVzdHMKKyAgUnVuR3JlcFRlc3QgICAgICAgICAgICAgIGEgVW5peCBzaGVsbCBzY3JpcHQgZm9yIHBjcmUyZ3JlcCB0ZXN0cworICBhY2xvY2FsLm00ICAgICAgICAgICAgICAgbTQgbWFjcm9zIChnZW5lcmF0ZWQgYnkgImFjbG9jYWwiKQorICBjb25maWcuZ3Vlc3MgICAgICAgICAgICAgKSBmaWxlcyB1c2VkIGJ5IGxpYnRvb2wsCisgIGNvbmZpZy5zdWIgICAgICAgICAgICAgICApICAgdXNlZCBvbmx5IHdoZW4gYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeQorICBjb25maWd1cmUgICAgICAgICAgICAgICAgYSBjb25maWd1cmluZyBzaGVsbCBzY3JpcHQgKGJ1aWx0IGJ5IGF1dG9jb25mKQorICBjb25maWd1cmUuYWMgICAgICAgICAgICAgKSB0aGUgYXV0b2NvbmYgaW5wdXQgdGhhdCB3YXMgdXNlZCB0byBidWlsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgICJjb25maWd1cmUiIGFuZCBjb25maWcuaAorICBkZXBjb21wICAgICAgICAgICAgICAgICAgKSBzY3JpcHQgdG8gZmluZCBwcm9ncmFtIGRlcGVuZGVuY2llcywgZ2VuZXJhdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgYXV0b21ha2UKKyAgZG9jLyouMyAgICAgICAgICAgICAgICAgIG1hbiBwYWdlIHNvdXJjZXMgZm9yIFBDUkUyCisgIGRvYy8qLjEgICAgICAgICAgICAgICAgICBtYW4gcGFnZSBzb3VyY2VzIGZvciBwY3JlMmdyZXAgYW5kIHBjcmUydGVzdAorICBkb2MvaW5kZXguaHRtbC5zcmMgICAgICAgdGhlIGJhc2UgSFRNTCBwYWdlCisgIGRvYy9odG1sLyogICAgICAgICAgICAgICBIVE1MIGRvY3VtZW50YXRpb24KKyAgZG9jL3BjcmUyLnR4dCAgICAgICAgICAgIHBsYWluIHRleHQgdmVyc2lvbiBvZiB0aGUgbWFuIHBhZ2VzCisgIGRvYy9wY3JlMnRlc3QudHh0ICAgICAgICBwbGFpbiB0ZXh0IGRvY3VtZW50YXRpb24gb2YgdGVzdCBwcm9ncmFtCisgIGluc3RhbGwtc2ggICAgICAgICAgICAgICBhIHNoZWxsIHNjcmlwdCBmb3IgaW5zdGFsbGluZyBmaWxlcworICBsaWJwY3JlMi04LnBjLmluICAgICAgICAgdGVtcGxhdGUgZm9yIGxpYnBjcmUyLTgucGMgZm9yIHBrZy1jb25maWcKKyAgbGlicGNyZTItMTYucGMuaW4gICAgICAgIHRlbXBsYXRlIGZvciBsaWJwY3JlMi0xNi5wYyBmb3IgcGtnLWNvbmZpZworICBsaWJwY3JlMi0zMi5wYy5pbiAgICAgICAgdGVtcGxhdGUgZm9yIGxpYnBjcmUyLTMyLnBjIGZvciBwa2ctY29uZmlnCisgIGxpYnBjcmUycG9zaXgucGMuaW4gICAgICB0ZW1wbGF0ZSBmb3IgbGlicGNyZTJwb3NpeC5wYyBmb3IgcGtnLWNvbmZpZworICBsdG1haW4uc2ggICAgICAgICAgICAgICAgZmlsZSB1c2VkIHRvIGJ1aWxkIGEgbGlidG9vbCBzY3JpcHQKKyAgbWlzc2luZyAgICAgICAgICAgICAgICAgICkgY29tbW9uIHN0dWIgZm9yIGEgZmV3IG1pc3NpbmcgR05VIHByb2dyYW1zIHdoaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICApICAgaW5zdGFsbGluZywgZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlCisgIG1raW5zdGFsbGRpcnMgICAgICAgICAgICBzY3JpcHQgZm9yIG1ha2luZyBpbnN0YWxsIGRpcmVjdG9yaWVzCisgIHBlcmx0ZXN0LnNoICAgICAgICAgICAgICBTY3JpcHQgZm9yIHJ1bm5pbmcgYSBQZXJsIHRlc3QgcHJvZ3JhbQorICBwY3JlMi1jb25maWcuaW4gICAgICAgICAgc291cmNlIG9mIHNjcmlwdCB3aGljaCByZXRhaW5zIFBDUkUyIGluZm9ybWF0aW9uCisgIHRlc3RkYXRhL3Rlc3RpbnB1dCogICAgICB0ZXN0IGRhdGEgZm9yIG1haW4gbGlicmFyeSB0ZXN0cworICB0ZXN0ZGF0YS90ZXN0b3V0cHV0KiAgICAgZXhwZWN0ZWQgdGVzdCByZXN1bHRzCisgIHRlc3RkYXRhL2dyZXAqICAgICAgICAgICBpbnB1dCBhbmQgb3V0cHV0IGZvciBwY3JlMmdyZXAgdGVzdHMKKyAgdGVzdGRhdGEvKiAgICAgICAgICAgICAgIG90aGVyIHN1cHBvcnRpbmcgdGVzdCBmaWxlcworCisoRCkgQXV4aWxpYXJ5IGZpbGVzIGZvciBjbWFrZSBzdXBwb3J0CisKKyAgY21ha2UvQ09QWUlORy1DTUFLRS1TQ1JJUFRTCisgIGNtYWtlL0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlCisgIGNtYWtlL0ZpbmRFZGl0bGluZS5jbWFrZQorICBjbWFrZS9GaW5kUmVhZGxpbmUuY21ha2UKKyAgQ01ha2VMaXN0cy50eHQKKyAgY29uZmlnLWNtYWtlLmguaW4KKworKEUpIEF1eGlsaWFyeSBmaWxlcyBmb3IgYnVpbGRpbmcgUENSRTIgImJ5IGhhbmQiCisKKyAgcGNyZTIuaC5nZW5lcmljICAgICAgICAgKSBhIHZlcnNpb24gb2YgdGhlIHB1YmxpYyBQQ1JFMiBoZWFkZXIgZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICApICAgZm9yIHVzZSBpbiBub24tImNvbmZpZ3VyZSIgZW52aXJvbm1lbnRzCisgIGNvbmZpZy5oLmdlbmVyaWMgICAgICAgICkgYSB2ZXJzaW9uIG9mIGNvbmZpZy5oIGZvciB1c2UgaW4gbm9uLSJjb25maWd1cmUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICkgICBlbnZpcm9ubWVudHMKKworUGhpbGlwIEhhemVsCitFbWFpbCBsb2NhbCBwYXJ0OiBwaDEwCitFbWFpbCBkb21haW46IGNhbS5hYy51aworTGFzdCB1cGRhdGVkOiAxNiBPY3RvYmVyIDIwMTUKZGlmZiAtLWdpdCBhL2Rpc3QyL1J1bkdyZXBUZXN0IGIvZGlzdDIvUnVuR3JlcFRlc3QKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjdkNjcyYgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL1J1bkdyZXBUZXN0CkBAIC0wLDAgKzEsNjMzIEBACisjISAvYmluL3NoCisKKyMgUnVuIHBjcmUyZ3JlcCB0ZXN0cy4gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGUgUENSRTIgdGVzdHMgY2hlY2sgdGhlIGxpYnJhcnkKKyMgaXRzZWxmLiBXaGF0IHdlIGFyZSBjaGVja2luZyBoZXJlIGlzIHRoZSBmaWxlIGhhbmRsaW5nIGFuZCBvcHRpb25zIHRoYXQgYXJlCisjIHN1cHBvcnRlZCBieSBwY3JlMmdyZXAuIFRoaXMgc2NyaXB0IG11c3QgYmUgcnVuIGluIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKKyMgU2V0IHRoZSBDIGxvY2FsZSwgc28gdGhhdCBzb3J0KDEpIGJlaGF2ZXMgcHJlZGljdGFibHkuCisKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCisKKyMgUmVtb3ZlIGFueSBub24tZGVmYXVsdCBjb2xvdXJpbmcgYW5kIGFsaWFzZXMgdGhhdCB0aGUgY2FsbGVyIG1heSBoYXZlIHNldC4KKwordW5zZXQgUENSRTJHUkVQX0NPTE9VUiBQQ1JFMkdSRVBfQ09MT1IKK3Vuc2V0IGNwIGxzIG12IHJtCisKKyMgUmVtZW1iZXIgdGhlIGN1cnJlbnQgKGJ1aWxkKSBkaXJlY3RvcnksIHNldCB0aGUgcHJvZ3JhbSB0byBiZSB0ZXN0ZWQsIGFuZAorIyB2YWxncmluZCBzZXR0aW5ncyB3aGVuIHJlcXVlc3RlZC4KKworYnVpbGRkaXI9YHB3ZGAKK3BjcmUyZ3JlcD0kYnVpbGRkaXIvcGNyZTJncmVwCitwY3JlMnRlc3Q9JGJ1aWxkZGlyL3BjcmUydGVzdAorCitpZiBbICEgLXggJHBjcmUyZ3JlcCBdIDsgdGhlbgorICBlY2hvICIqKiAkcGNyZTJncmVwIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBleGVjdWF0YmxlLiIKKyAgZXhpdCAxCitmaQorCitpZiBbICEgLXggJHBjcmUydGVzdCBdIDsgdGhlbgorICBlY2hvICIqKiAkcGNyZTJ0ZXN0IGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBleGVjdWF0YmxlLiIKKyAgZXhpdCAxCitmaQorCit2YWxncmluZD0KK3doaWxlIFsgJCMgLWd0IDAgXSA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICB2YWxncmluZCkgdmFsZ3JpbmQ9InZhbGdyaW5kIC1xIC0tbGVhay1jaGVjaz1ubyAtLXNtYy1jaGVjaz1hbGwiOzsKKyAgICAqKSBlY2hvICJSdW5HcmVwVGVzdDogVW5rbm93biBhcmd1bWVudCAkMSI7IGV4aXQgMTs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworcGNyZTJncmVwX3ZlcnNpb249YCRwY3JlMmdyZXAgLVZgCitpZiBbICIkdmFsZ3JpbmQiID0gIiIgXSA7IHRoZW4KKyAgZWNobyAiVGVzdGluZyAkcGNyZTJncmVwX3ZlcnNpb24iCitlbHNlCisgIGVjaG8gIlRlc3RpbmcgJHBjcmUyZ3JlcF92ZXJzaW9uIHVzaW5nIHZhbGdyaW5kIgorZmkKKworIyBTZXQgdXAgYSBzdWl0YWJsZSAiZGlmZiIgY29tbWFuZCBmb3IgY29tcGFyaXNvbi4gU29tZSBzeXN0ZW1zIGhhdmUgYSBkaWZmCisjIHRoYXQgbGFja3MgYSAtdSBvcHRpb24uIFRyeSB0byBkZWFsIHdpdGggdGhpczsgYmV0dGVyIGRvIHRoZSB0ZXN0IGZvciB0aGUgLWIKKyMgb3B0aW9uIGFzIHdlbGwuCisKK2NmPSJkaWZmIgorZGlmZiAtYiAgL2Rldi9udWxsIC9kZXYvbnVsbCAyPi9kZXYvbnVsbCAmJiBjZj0iZGlmZiAtYiIKK2RpZmYgLXUgIC9kZXYvbnVsbCAvZGV2L251bGwgMj4vZGV2L251bGwgJiYgY2Y9ImRpZmYgLXUiCitkaWZmIC11YiAvZGV2L251bGwgL2Rldi9udWxsIDI+L2Rldi9udWxsICYmIGNmPSJkaWZmIC11YiIKKworIyBJZiB0aGlzIHRlc3QgaXMgYmVpbmcgcnVuIGZyb20gIm1ha2UgY2hlY2siLCAkc3JjZGlyIHdpbGwgYmUgc2V0LiBJZiBub3QsIHNldAorIyBpdCB0byB0aGUgY3VycmVudCBvciBwYXJlbnQgZGlyZWN0b3J5LCB3aGljaGV2ZXIgb25lIGNvbnRhaW5zIHRoZSB0ZXN0IGRhdGEuCisjIFN1YnNlcXVlbnRseSwgd2UgcnVuIG1vc3Qgb2YgdGhlIHBjcmUyZ3JlcCB0ZXN0cyBpbiB0aGUgc291cmNlIGRpcmVjdG9yeSBzbworIyB0aGF0IHRoZSBmaWxlIG5hbWVzIGluIHRoZSBvdXRwdXQgYXJlIGFsd2F5cyB0aGUgc2FtZS4KKworaWYgWyAteiAiJHNyY2RpciIgLW8gISAtZCAiJHNyY2Rpci90ZXN0ZGF0YSIgXSA7IHRoZW4KKyAgaWYgWyAtZCAiLi90ZXN0ZGF0YSIgXSA7IHRoZW4KKyAgICBzcmNkaXI9LgorICBlbGlmIFsgLWQgIi4uL3Rlc3RkYXRhIiBdIDsgdGhlbgorICAgIHNyY2Rpcj0uLgorICBlbHNlCisgICAgZWNobyAiQ2Fubm90IGZpbmQgdGhlIHRlc3RkYXRhIGRpcmVjdG9yeSIKKyAgICBleGl0IDEKKyAgZmkKK2ZpCisKKyMgQ2hlY2sgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgVVRGLTggc3VwcG9ydAorCiskcGNyZTJ0ZXN0IC1DIHVuaWNvZGUgPi9kZXYvbnVsbAordXRmOD0kPworCisjIENoZWNrIGRlZmF1bHQgbmV3bGluZSBjb252ZW50aW9uLiBJZiBpdCBkb2VzIG5vdCBpbmNsdWRlIExGLCBmb3JjZSBMRi4KKworbmw9YCRwY3JlMnRlc3QgLUMgbmV3bGluZWAKK2lmIFsgIiRubCIgIT0gIkxGIiAtYSAiJG5sIiAhPSAiQU5ZIiAtYSAiJG5sIiAhPSAiQU5ZQ1JMRiIgXTsgdGhlbgorICBwY3JlMmdyZXA9IiRwY3JlMmdyZXAgLU4gTEYiCisgIGVjaG8gIkRlZmF1bHQgbmV3bGluZSBzZXR0aW5nIGZvcmNlZCB0byBMRiIKK2ZpCisKKyMgLS0tLS0tIEZ1bmN0aW9uIHRvIHJ1biBhbmQgY2hlY2sgYSBzcGVjaWFsIHBjcmUyZ3JlcCBhcmd1bWVudHMgdGVzdCAtLS0tLS0tCisKK2NoZWNrc3BlY2lhbCgpCisgIHsKKyAgJHZhbGdyaW5kICRwY3JlMmdyZXAgJDEgPj50ZXN0dHJ5Z3JlcCAyPiYxCisgIGlmIFsgJD8gLW5lICQyIF0gOyB0aGVuCisgICAgZWNobyAiKiogcGNyZTJncmVwICQxIGZhaWxlZCAtIGNoZWNrIHRlc3R0cnlncmVwIgorICAgIGV4aXQgMQorICBmaQorICB9CisKKyMgLS0tLS0tIE5vcm1hbCB0ZXN0cyAtLS0tLS0KKworZWNobyAiVGVzdGluZyBwY3JlMmdyZXAgbWFpbiBmZWF0dXJlcyIKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAnXlBBVFRFUk4nIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtaW4gUEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWljIFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1pbiBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWluaCBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWlsIFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbCBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0IC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLXEgUEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1xIE5FVkVSLVBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtdm4gcGF0dGVybiAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1peCBwYXR0ZXJuIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCitlY2hvIHNldmVudGVlbiA+dGVzdHRlbXAxZ3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1mLi90ZXN0ZGF0YS9ncmVwbGlzdCAtZiAkYnVpbGRkaXIvdGVzdHRlbXAxZ3JlcCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC13IHBhdCAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwICdhYmNeKicgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpIDI+PnRlc3R0cnlncmVwID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIGFiYyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL25vbmV4aXN0ZmlsZSkgMj4+dGVzdHRyeWdyZXAgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDE3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLU0gJ3RoZVxub3V0cHV0JyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDE4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLU1uICcodGhlXG5vdXRwdXR8ZG9nXC5cbi0tKScgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxOSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1NaXggJ1BhdHRlcm4nIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDIwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLU1peG4gJ2NvbXBsZXRlIHBhaXJcbm9mIGxpbmVzJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAyMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1uQTMgJ2ZvdXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDIyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLW5CMyAnZm91cicgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMjMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtQzMgJ2ZvdXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDI0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUE5ICdmb3VyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAyNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1uQjkgJ2ZvdXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDI2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUE5IC1COSAnZm91cicgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMjcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtQTEwICdmb3VyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1uQjEwICdmb3VyJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAyOSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1DMTIgLUIxMCAnZm91cicgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMzAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtaW5CMyAncGF0dGVybicgLi90ZXN0ZGF0YS9ncmVwaW5wdXQgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMzEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtaW5BMyAncGF0dGVybicgLi90ZXN0ZGF0YS9ncmVwaW5wdXQgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMzIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtTCAnZm94JyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCAuL3Rlc3RkYXRhL2dyZXBpbnB1dHgpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAzMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwICdmb3gnIC4vdGVzdGRhdGEvZ3JlcG5vbmV4aXN0KSA+PnRlc3R0cnlncmVwIDI+JjEKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAzNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1zICdmb3gnIC4vdGVzdGRhdGEvZ3JlcG5vbmV4aXN0KSA+PnRlc3R0cnlncmVwIDI+JjEKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAzNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZT1ncmVwaW5wdXR4IC0taW5jbHVkZSBncmVwaW5wdXQ4IC0tZXhjbHVkZS1kaXI9J15cLicgJ2ZveCcgLi90ZXN0ZGF0YSB8IHNvcnQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAzNiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZT1ncmVwaW5wdXQgLS1leGNsdWRlICdncmVwaW5wdXQkJyAtLWV4Y2x1ZGU9Z3JlcGlucHV0OCAtLWV4Y2x1ZGUtZGlyPSdeXC4nICdmb3gnIC4vdGVzdGRhdGEgfCBzb3J0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMzcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAgJ14oYSspKlxkJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcCAyPnRlc3RzdGRlcnJncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorZWNobyAiPT09PT09PT0gU1RERVJSID09PT09PT09IiA+PnRlc3R0cnlncmVwCitjYXQgdGVzdHN0ZGVycmdyZXAgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMzggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgJz5ceDAwPCcgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAzOSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtQTEgJ2JlZm9yZSB0aGUgYmluYXJ5IHplcm8nIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUIxICdhZnRlciB0aGUgYmluYXJ5IHplcm8nIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUIxIC1vICdcdysgdGhlIGJpbmFyeSB6ZXJvJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDQyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1CMSAtb25IICdcdysgdGhlIGJpbmFyeSB6ZXJvJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDQzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vbiAnYmVmb3JlfHplcm98YWZ0ZXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNDQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLW9uIC1lIGJlZm9yZSAtZXplcm8gLWUgYWZ0ZXIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA0NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtb24gLWYgLi90ZXN0ZGF0YS9ncmVwbGlzdCAtZSBiaW5hcnkgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA0NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtZWFiYyAtZSAnKHVuY2xvc2VkJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgMj4+dGVzdHRyeWdyZXAgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDQ3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1GeCAiQUIuVkUKK2VsZXBoYW50IiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDQ4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1GICJBQi5WRQorZWxlcGhhbnQiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNDkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUYgLWUgREFUQSAtZSAiQUIuVkUKK2VsZXBoYW50IiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDUwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwICJeKGFiY3xkZWZ8Z2hpfGprbCkiIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDUxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1NdiAiYnJvd25cc2ZveCIgLi90ZXN0ZGF0YS9ncmVwaW5wdXR2KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1jb2xvdXI9YWx3YXlzIGp1bXBzIC4vdGVzdGRhdGEvZ3JlcGlucHV0dikgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDUzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tZmlsZS1vZmZzZXRzICdiZWZvcmV8emVyb3xhZnRlcicgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA1NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLWxpbmUtb2Zmc2V0cyAnYmVmb3JlfHplcm98YWZ0ZXInIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNTUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtZi4vdGVzdGRhdGEvZ3JlcGxpc3QgLS1jb2xvcj1hbHdheXMgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNTYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtYyBsYXp5IC4vdGVzdGRhdGEvZ3JlcGlucHV0KikgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDU3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWMgLWwgbGF6eSAuL3Rlc3RkYXRhL2dyZXBpbnB1dCopID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA1OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tcmVnZXg9UEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDU5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1yZWdleHA9UEFUVEVSTiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDYwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1yZWdleCBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNjEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLXJlZ2V4cCBQQVRURVJOIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNjIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLW1hdGNoLWxpbWl0PTEwMDAgLS1uby1qaXQgLU0gJ1RoaXMgaXMgYSBmaWxlKC58XFIpKmZpbGUuJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcCAyPiYxCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNjMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLXJlY3Vyc2lvbi1saW1pdD0xMDAwIC0tbm8taml0IC1NICdUaGlzIGlzIGEgZmlsZSgufFxSKSpmaWxlLicgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAgMj4mMQorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDY0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vMSAnKD88PVBBVClURVJOIChhcChwZWFyKXMpJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDY1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vMiAnKD88PVBBVClURVJOIChhcChwZWFyKXMpJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDY2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vMyAnKD88PVBBVClURVJOIChhcChwZWFyKXMpJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDY3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vMTIgJyg/PD1QQVQpVEVSTiAoYXAocGVhcilzKScgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA2OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLW9ubHktbWF0Y2hpbmc9MiAnKD88PVBBVClURVJOIChhcChwZWFyKXMpJyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDY5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLXZuIC0tY29sb3VyPWFsd2F5cyBwYXR0ZXJuIC4vdGVzdGRhdGEvZ3JlcGlucHV0eCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDcwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1jb2xvcj1hbHdheXMgLU0gInRyaXBsZTpcdC4qXG5cbiIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQzKSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNzEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbyAiXjAxfF4wMnxeMDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNzIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLWNvbG9yPWFsd2F5cyAiXjAxfF4wMnxeMDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNzMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbyAtLWNvbG91cj1hbHdheXMgIl4wMXxeMDJ8XjAzIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDc0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLW8gIl4wMXwwMnxeMDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNzUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLWNvbG9yPWFsd2F5cyAiXjAxfDAyfF4wMyIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA3NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vIC0tY29sb3VyPWFsd2F5cyAiXjAxfDAyfF4wMyIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA3NyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vICJeMDF8XjAyfDAzIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDc4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1jb2xvcj1hbHdheXMgIl4wMXxeMDJ8MDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgNzkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbyAtLWNvbG91cj1hbHdheXMgIl4wMXxeMDJ8MDMiIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgODAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbyAiXGIwMXxcYjAyIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDgxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1jb2xvcj1hbHdheXMgIlxcYjAxfFxcYjAyIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDgyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLW8gLS1jb2xvdXI9YWx3YXlzICJcXGIwMXxcXGIwMiIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA4MyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tYnVmZmVyLXNpemU9MTAwICJeYSIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQzKSA+PnRlc3R0cnlncmVwIDI+JjEKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA4NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorZWNobyB0ZXN0ZGF0YS9ncmVwaW5wdXQzID50ZXN0dGVtcDFncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1maWxlLWxpc3QgLi90ZXN0ZGF0YS9ncmVwZmlsZWxpc3QgLS1maWxlLWxpc3QgJGJ1aWxkZGlyL3Rlc3R0ZW1wMWdyZXAgImZveHxjb21wbGV0ZXx0NyIpID4+dGVzdHRyeWdyZXAgMj4mMQorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDg1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1maWxlLWxpc3Q9Li90ZXN0ZGF0YS9ncmVwZmlsZWxpc3QgImRvbG9yIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dDMpID4+dGVzdHRyeWdyZXAgMj4mMQorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDg2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgImRvZyIgLi90ZXN0ZGF0YS9ncmVwYmluYXJ5KSA+PnRlc3R0cnlncmVwIDI+JjEKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA4NyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwICJjYXQiIC4vdGVzdGRhdGEvZ3JlcGJpbmFyeSkgPj50ZXN0dHJ5Z3JlcCAyPiYxCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgODggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtdiAiY2F0IiAuL3Rlc3RkYXRhL2dyZXBiaW5hcnkpID4+dGVzdHRyeWdyZXAgMj4mMQorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDg5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUkgImRvZyIgLi90ZXN0ZGF0YS9ncmVwYmluYXJ5KSA+PnRlc3R0cnlncmVwIDI+JjEKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5MCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tYmluYXJ5LWZpbGVzPXdpdGhvdXQtbWF0Y2ggImRvZyIgLi90ZXN0ZGF0YS9ncmVwYmluYXJ5KSA+PnRlc3R0cnlncmVwIDI+JjEKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5MSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1hICJkb2ciIC4vdGVzdGRhdGEvZ3JlcGJpbmFyeSkgPj50ZXN0dHJ5Z3JlcCAyPiYxCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgOTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLWJpbmFyeS1maWxlcz10ZXh0ICJkb2ciIC4vdGVzdGRhdGEvZ3JlcGJpbmFyeSkgPj50ZXN0dHJ5Z3JlcCAyPiYxCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgOTMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLXRleHQgImRvZyIgLi90ZXN0ZGF0YS9ncmVwYmluYXJ5KSA+PnRlc3R0cnlncmVwIDI+JjEKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZT1ncmVwaW5wdXR4IC0taW5jbHVkZSBncmVwaW5wdXQ4ICdmb3gnIC4vdGVzdGRhdGEvZ3JlcGlucHV0KiB8IHNvcnQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5NSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC0tZmlsZS1saXN0IC4vdGVzdGRhdGEvZ3JlcGZpbGVsaXN0IC0tZXhjbHVkZSBncmVwaW5wdXR2ICJmb3h8Y29tcGxldGUiKSA+PnRlc3R0cnlncmVwIDI+JjEKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5NiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZS1kaXI9dGVzdGRhdGEgLS1leGNsdWRlICdeKD8hZ3JlcGlucHV0KScgJ2ZveCcgLi90ZXN0KiB8IHNvcnQpID4+dGVzdHRyeWdyZXAKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCA5NyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorZWNobyAiZ3JlcGlucHV0JCIgPnRlc3R0ZW1wMWdyZXAKK2VjaG8gImdyZXBpbnB1dDgiID4+dGVzdHRlbXAxZ3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZT1ncmVwaW5wdXQgLS1leGNsdWRlLWZyb20gJGJ1aWxkZGlyL3Rlc3R0ZW1wMWdyZXAgLS1leGNsdWRlLWRpcj0nXlwuJyAnZm94JyAuL3Rlc3RkYXRhIHwgc29ydCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDk4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCitlY2hvICJncmVwaW5wdXQkIiA+dGVzdHRlbXAxZ3JlcAorZWNobyAiZ3JlcGlucHV0OCIgPj50ZXN0dGVtcDFncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLUwgLXIgLS1leGNsdWRlPWdyZXBpbnB1dDMgLS1pbmNsdWRlPWdyZXBpbnB1dCAtLWV4Y2x1ZGUtZnJvbSAkYnVpbGRkaXIvdGVzdHRlbXAxZ3JlcCAtLWV4Y2x1ZGUtZGlyPSdeXC4nICdmb3gnIC4vdGVzdGRhdGEgfCBzb3J0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgOTkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKK2VjaG8gImdyZXBpbnB1dCQiID50ZXN0dGVtcDFncmVwCitlY2hvICJncmVwaW5wdXQ4IiA+dGVzdHRlbXAyZ3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1MIC1yIC0taW5jbHVkZSBncmVwaW5wdXQgLS1leGNsdWRlLWZyb20gJGJ1aWxkZGlyL3Rlc3R0ZW1wMWdyZXAgLS1leGNsdWRlLWZyb209JGJ1aWxkZGlyL3Rlc3R0ZW1wMmdyZXAgLS1leGNsdWRlLWRpcj0nXlwuJyAnZm94JyAuL3Rlc3RkYXRhIHwgc29ydCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEwMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtSG8yIC0tb25seS1tYXRjaGluZz0xIC1vMyAnKFx3KykgYmluYXJ5IChcdyspKFwuKT8nIC4vdGVzdGRhdGEvZ3JlcGlucHV0KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTAxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1vMyAtSG8yIC1vMTIgLS1vbmx5LW1hdGNoaW5nPTEgLW8zIC0tY29sb3VyPWFsd2F5cyAtLW9tLXNlcGFyYXRvcj0nfCcgJyhcdyspIGJpbmFyeSAoXHcrKShcLik/JyAuL3Rlc3RkYXRhL2dyZXBpbnB1dCkgPj50ZXN0dHJ5Z3JlcAorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEwMiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1uICJeJCIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQzKSA+PnRlc3R0cnlncmVwIDI+JjEKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxMDMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iID4+dGVzdHRyeWdyZXAKKyhjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtLW9ubHktbWF0Y2hpbmcgIl4kIiAuL3Rlc3RkYXRhL2dyZXBpbnB1dDMpID4+dGVzdHRyeWdyZXAgMj4mMQorZWNobyAiUkM9JD8iID4+dGVzdHRyeWdyZXAKKworZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IDEwNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwIC1uIC0tb25seS1tYXRjaGluZyAiXiQiIC4vdGVzdGRhdGEvZ3JlcGlucHV0MykgPj50ZXN0dHJ5Z3JlcCAyPiYxCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTA1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1jb2xvdXI9YWx3YXlzICJpcHN1bXwiIC4vdGVzdGRhdGEvZ3JlcGlucHV0MykgPj50ZXN0dHJ5Z3JlcCAyPiYxCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTA2IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgZWNobyAiYSIgfCAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtTSAifGEiICkgPj50ZXN0dHJ5Z3JlcCAyPiYxCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTA3IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCitlY2hvICJhIiA+dGVzdHRlbXAxZ3JlcAorZWNobyAiYWFhYWEiID4+dGVzdHRlbXAxZ3JlcAorKGNkICRzcmNkaXI7ICR2YWxncmluZCAkcGNyZTJncmVwICAtLWxpbmUtb2Zmc2V0cyAnKD88PVxLYSknICRidWlsZGRpci90ZXN0dGVtcDFncmVwKSA+PnRlc3R0cnlncmVwIDI+JjEKK2VjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKK2VjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCAxMDggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWxxIFBBVFRFUk4gLi90ZXN0ZGF0YS9ncmVwaW5wdXQgLi90ZXN0ZGF0YS9ncmVwaW5wdXR4KSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCitlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgMTA5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiA+PnRlc3R0cnlncmVwCisoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLWNxIGxhenkgLi90ZXN0ZGF0YS9ncmVwaW5wdXQqKSA+PnRlc3R0cnlncmVwCitlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCisjIE5vdyBjb21wYXJlIHRoZSByZXN1bHRzLgorCiskY2YgJHNyY2Rpci90ZXN0ZGF0YS9ncmVwb3V0cHV0IHRlc3R0cnlncmVwCitpZiBbICQ/ICE9IDAgXSA7IHRoZW4gZXhpdCAxOyBmaQorCisKKyMgVGhlc2UgdGVzdHMgcmVxdWlyZSBVVEYtOCBzdXBwb3J0CisKK2lmIFsgJHV0ZjggLW5lIDAgXSA7IHRoZW4KKyAgZWNobyAiVGVzdGluZyBwY3JlMmdyZXAgVVRGLTggZmVhdHVyZXMiCisKKyAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IFUxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPnRlc3R0cnlncmVwCisgIChjZCAkc3JjZGlyOyAkdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbiAtdSAtLW5ld2xpbmU9YW55ICJeWCIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQ4KSA+PnRlc3R0cnlncmVwCisgIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKKyAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IFUyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorICAoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLW4gLXUgLUMgMyAtLW5ld2xpbmU9YW55ICJNYXRjaCIgLi90ZXN0ZGF0YS9ncmVwaW5wdXQ4KSA+PnRlc3R0cnlncmVwCisgIGVjaG8gIlJDPSQ/IiA+PnRlc3R0cnlncmVwCisKKyAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZXN0IFUzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPj50ZXN0dHJ5Z3JlcAorICAoY2QgJHNyY2RpcjsgJHZhbGdyaW5kICRwY3JlMmdyZXAgLS1saW5lLW9mZnNldHMgLXUgLS1uZXdsaW5lPWFueSAnKD88PVxLXHh7MTdmfSknIC4vdGVzdGRhdGEvZ3JlcGlucHV0OCkgPj50ZXN0dHJ5Z3JlcAorICBlY2hvICJSQz0kPyIgPj50ZXN0dHJ5Z3JlcAorCisgICRjZiAkc3JjZGlyL3Rlc3RkYXRhL2dyZXBvdXRwdXQ4IHRlc3R0cnlncmVwCisgIGlmIFsgJD8gIT0gMCBdIDsgdGhlbiBleGl0IDE7IGZpCisKK2Vsc2UKKyAgZWNobyAiU2tpcHBpbmcgcGNyZTJncmVwIFVURi04IHRlc3RzOiBubyBVVEYtOCBzdXBwb3J0IGluIFBDUkUyIGxpYnJhcnkiCitmaQorCisKKyMgV2UgZ28gdG8gc29tZSBjb250b3J0aW9ucyB0byB0cnkgdG8gZW5zdXJlIHRoYXQgdGhlIHRlc3RzIGZvciB0aGUgdmFyaW91cworIyBuZXdsaW5lIHNldHRpbmdzIHdpbGwgd29yayBpbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIG5vcm1hbCBuZXdsaW5lIHNlcXVlbmNlCisjIGlzIG5vdCBcbi4gRG8gbm90IHVzZSBleHBvcnRlZCBmaWxlcywgd2hvc2UgbGluZSBlbmRpbmdzIG1pZ2h0IGJlIGNoYW5nZWQuCisjIEluc3RlYWQsIGNyZWF0ZSBhbiBpbnB1dCBmaWxlIHVzaW5nIHByaW50ZiBzbyB0aGF0IGl0cyBjb250ZW50cyBhcmUgZXhhY3RseQorIyB3aGF0IHdlIHdhbnQuIE5vdGUgdGhlIG1lc3N5IGZ1ZGdlIHRvIGdldCBwcmludGYgdG8gd3JpdGUgYSBzdHJpbmcgdGhhdAorIyBzdGFydHMgd2l0aCBhIGh5cGhlbi4gVGhlc2UgdGVzdHMgYXJlIHJ1biBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorCitlY2hvICJUZXN0aW5nIHBjcmUyZ3JlcCBuZXdsaW5lIHNldHRpbmdzIgorcHJpbnRmICJhYmNccmRlZlxyXG5naGlcbmprbCIgPnRlc3ROaW5wdXRncmVwCisKK3ByaW50ZiAiJWMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCBOMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIiAtID50ZXN0dHJ5Z3JlcAorJHZhbGdyaW5kICRwY3JlMmdyZXAgLW4gLU4gQ1IgIl4oYWJjfGRlZnxnaGl8amtsKSIgdGVzdE5pbnB1dGdyZXAgPj50ZXN0dHJ5Z3JlcAorCitwcmludGYgIiVjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgTjIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiIgLSA+PnRlc3R0cnlncmVwCiskdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbiAtLW5ld2xpbmU9Y3JsZiAiXihhYmN8ZGVmfGdoaXxqa2wpIiB0ZXN0TmlucHV0Z3JlcCA+PnRlc3R0cnlncmVwCisKK3ByaW50ZiAiJWMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCBOMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIiAtID4+dGVzdHRyeWdyZXAKK3BhdHRlcm49YHByaW50ZiAnZGVmXHJqa2wnYAorJHZhbGdyaW5kICRwY3JlMmdyZXAgLW4gLS1uZXdsaW5lPWNyIC1GICIkcGF0dGVybiIgdGVzdE5pbnB1dGdyZXAgPj50ZXN0dHJ5Z3JlcAorCitwcmludGYgIiVjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgTjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiIgLSA+PnRlc3R0cnlncmVwCiskdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbiAtLW5ld2xpbmU9Y3JsZiAtRiAtZiAkc3JjZGlyL3Rlc3RkYXRhL2dyZXBwYXRONCB0ZXN0TmlucHV0Z3JlcCA+PnRlc3R0cnlncmVwCisKK3ByaW50ZiAiJWMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVzdCBONSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIiAtID4+dGVzdHRyeWdyZXAKKyR2YWxncmluZCAkcGNyZTJncmVwIC1uIC0tbmV3bGluZT1hbnkgIl4oYWJjfGRlZnxnaGl8amtsKSIgdGVzdE5pbnB1dGdyZXAgPj50ZXN0dHJ5Z3JlcAorCitwcmludGYgIiVjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFRlc3QgTjYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiIgLSA+PnRlc3R0cnlncmVwCiskdmFsZ3JpbmQgJHBjcmUyZ3JlcCAtbiAtLW5ld2xpbmU9YW55Y3JsZiAiXihhYmN8ZGVmfGdoaXxqa2wpIiB0ZXN0TmlucHV0Z3JlcCA+PnRlc3R0cnlncmVwCisKKyRjZiAkc3JjZGlyL3Rlc3RkYXRhL2dyZXBvdXRwdXROIHRlc3R0cnlncmVwCitpZiBbICQ/ICE9IDAgXSA7IHRoZW4gZXhpdCAxOyBmaQorCisKKyMgRmluYWxseSwgc29tZSB0ZXN0cyB0byBleGVyY2lzZSBjb2RlIHRoYXQgaXMgbm90IHRlc3RlZCBhYm92ZSwganVzdCB0byBiZQorIyBzdXJlIHRoYXQgaXQgcnVucyBPSy4gRG9pbmcgdGhpcyBpbXByb3ZlcyB0aGUgY292ZXJhZ2Ugc3RhdGlzdGljcy4gVGhlIG91dHB1dAorIyBpcyBub3QgY2hlY2tlZC4KKworZWNobyAiVGVzdGluZyBtaXNjZWxsYW5lb3VzIHBjcmUyZ3JlcCBhcmd1bWVudHMgKHVuY2hlY2tlZCkiCitlY2hvICcnID50ZXN0dHJ5Z3JlcAorY2hlY2tzcGVjaWFsICcteHh4eHgnIDIKK2NoZWNrc3BlY2lhbCAnLS1oZWxwJyAwCitjaGVja3NwZWNpYWwgJy0tbGluZS1idWZmZXJlZCAtLWNvbG91cj1hdXRvIGFiYyAvZGV2L251bGwnIDEKKworIyBDbGVhbiB1cCBsb2NhbCB3b3JraW5nIGZpbGVzCitybSAtZiB0ZXN0TmlucHV0Z3JlcCB0ZXN0c3RkZXJyZ3JlcCB0ZXN0dHJ5Z3JlcCB0ZXN0dGVtcDFncmVwIHRlc3R0ZW1wMmdyZXAKKworZXhpdCAwCisKKyMgRW5kCmRpZmYgLS1naXQgYS9kaXN0Mi9SdW5UZXN0IGIvZGlzdDIvUnVuVGVzdApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNmRjNjM4Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvUnVuVGVzdApAQCAtMCwwICsxLDg1MCBAQAorIyEgL2Jpbi9zaAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJ1biB0aGUgUENSRTIgdGVzdHMgdXNpbmcgdGhlIHBjcmUydGVzdCBwcm9ncmFtLiBUaGUgYXBwcm9wcmlhdGUgdGVzdHMgYXJlCisjIHNlbGVjdGVkLCBkZXBlbmRpbmcgb24gd2hpY2ggYnVpbGQtdGltZSBvcHRpb25zIHdlcmUgdXNlZC4KKyMKKyMgV2hlbiBKSVQgc3VwcG9ydCBpcyBhdmFpbGFibGUsIGFsbCBhcHByb3ByaWF0ZSB0ZXN0cyBhcmUgcnVuIHdpdGggYW5kIHdpdGhvdXQKKyMgSklULCB1bmxlc3MgIi1ub2ppdCIgaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZS4gVGhlcmUgYXJlIGFsc28gdHdvIHRlc3RzCisjIGZvciBKSVQtc3BlY2lmaWMgZmVhdHVyZXMsIG9uZSB0byBiZSBydW4gd2hlbiBKSVQgc3VwcG9ydCBpcyBhdmFpbGFibGUKKyMgKHVubGVzcyAiLW5vaml0IiBpcyBzcGVjaWZpZWQpLCBhbmQgb25lIHdoZW4gaXQgaXMgbm90LgorIworIyBXaGljaGV2ZXIgb2YgdGhlIDgtLCAxNi0gYW5kIDMyLWJpdCBsaWJyYXJpZXMgZXhpc3QgYXJlIHRlc3RlZC4gSXQgaXMgYWxzbworIyBwb3NzaWJsZSB0byBzZWxlY3Qgd2hpY2ggdG8gdGVzdCBieSBnaXZpbmcgIi04IiwgIi0xNiIgb3IgIi0zMiIgb24gdGhlCisjIGNvbW1hbmQgbGluZS4KKyMKKyMgQXMgd2VsbCBhcyAiLW5vaml0IiwgIi04IiwgIi0xNiIsIGFuZCAiLTMyIiwgYXJndW1lbnRzIGZvciB0aGlzIHNjcmlwdCBhcmUKKyMgaW5kaXZpZHVhbCB0ZXN0IG51bWJlcnMsIHJhbmdlcyBvZiB0ZXN0cyBzdWNoIGFzIDMtNiBvciAzLSAobWVhbmluZyAzIHRvIHRoZQorIyBlbmQpLCBvciBhIG51bWJlciBwcmVjZWRlZCBieSB+IHRvIGV4Y2x1ZGUgYSB0ZXN0LiBGb3IgZXhhbXBsZSwgIjMtMTUgfjEwIgorIyBydW5zIHRlc3RzIDMgdG8gMTUsIGV4Y2x1ZGluZyB0ZXN0IDEwLCBhbmQganVzdCAifjEwIiBydW5zIGFsbCB0aGUgdGVzdHMKKyMgZXhjZXB0IHRlc3QgMTAuIFdoYXRldmVyIG9yZGVyIHRoZSBhcmd1bWVudHMgYXJlIGluLCB0aGUgdGVzdHMgYXJlIGFsd2F5cyBydW4KKyMgaW4gbnVtZXJpY2FsIG9yZGVyLgorIworIyBJbmFwcHJvcHJpYXRlIHRlc3RzIGFyZSBhdXRvbWF0aWNhbGx5IHNraXBwZWQgKHdpdGggYSBjb21tZW50IHRvIHNheSBzbykuIEZvcgorIyBleGFtcGxlLCBpZiBKSVQgc3VwcG9ydCBpcyBub3QgY29tcGlsZWQsIHRlc3QgMTYgaXMgc2tpcHBlZCwgd2hlcmVhcyBpZiBKSVQKKyMgc3VwcG9ydCBpcyBjb21waWxlZCwgdGVzdCAxNSBpcyBza2lwcGVkLgorIworIyBPdGhlciBhcmd1bWVudHMgY2FuIGJlIG9uZSBvZiB0aGUgd29yZHMgIi12YWxncmluZCIsICItdmFsZ3JpbmQtbG9nIiwgb3IKKyMgIi1zaW0iIGZvbGxvd2VkIGJ5IGFuIGFyZ3VtZW50IHRvIHJ1biBjcm9zcy1jb21waWxlZCBleGVjdXRhYmxlcyB1bmRlciBhCisjIHNpbXVsYXRvciwgZm9yIGV4YW1wbGU6CisjCisjIFJ1blRlc3QgMyAtc2ltICJxZW11LWFybSAtcyA4Mzg4NjA4IgorIworIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIC1ub2ppdCwgLXZhbGdyaW5kLCAtdmFsZ3JpbmQtbG9nLCBhbmQgLXNpbSBtYXkKKyMgYmUgZ2l2ZW4gd2l0aG91dCB0aGUgbGVhZGluZyAiLSIgY2hhcmFjdGVyLgorIworIyBXaGVuIFBDUkUyIGlzIGNvbXBpbGVkIGJ5IGNsYW5nIHdpdGggLWZzYW5pdGl6ZSBhcmd1bWVudHMsIHNvbWUgdGVzdHMgbmVlZAorIyB2ZXJ5IG11Y2ggbW9yZSBzdGFjayB0aGFuIG5vcm1hbC4gSW4gZW52aXJvbm1lbnRzIHdoZXJlIHRoZSBzdGFjayBjYW4gYmUKKyMgc2V0IGF0IHJ1bnRpbWUsIC1iaWdzdGFjayBzZXRzIGEgZ2lnYW50aWMgc3RhY2suCisjCisjIFRoZXJlIGFyZSB0d28gc3BlY2lhbCBjYXNlcyB3aGVyZSBvbmx5IG9uZSBhcmd1bWVudCBpcyBhbGxvd2VkOgorIworIyBJZiB0aGUgZmlyc3QgYW5kIG9ubHkgYXJndW1lbnQgaXMgImViY2RpYyIsIHRoZSBzY3JpcHQgcnVucyB0aGUgc3BlY2lhbAorIyBFQkNESUMgdGVzdCB0aGF0IGNhbiBiZSB1c2VmdWwgZm9yIGNoZWNraW5nIGNlcnRhaW4gRUJDRElDIGZlYXR1cmVzLCBldmVuCisjIHdoZW4gcnVuIGluIGFuIEFTQ0lJIGVudmlyb25tZW50LiBQQ1JFMiBtdXN0IGJlIGJ1aWx0IHdpdGggRUJDRElDIHN1cHBvcnQgZm9yCisjIHRoaXMgdGVzdCB0byBiZSBydW4uCisjCisjIElmIHRoZSBzY3JpcHQgaXMgb2JleWVkIGFzICJSdW5UZXN0IGxpc3QiLCBhIGxpc3Qgb2YgYXZhaWxhYmxlIHRlc3RzIGlzCisjIG91dHB1dCwgYnV0IG5vbmUgb2YgdGhlbSBhcmUgcnVuLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIERlZmluZSB0ZXN0IHRpdGxlcyBpbiB2YXJpYWJsZXMgc28gdGhhdCB0aGV5IGNhbiBiZSBvdXRwdXQgYXMgYSBsaXN0LiBTb21lCisjIG9mIHRoZW0gYXJlIG1vZGlmaWVkIChlLmcuIHdpdGggLTggb3IgLTE2KSB3aGVuIHVzZWQgaW4gdGhlIGFjdHVhbCB0ZXN0cy4KKwordGl0bGUwPSJUZXN0IDA6IFVuY2hlY2tlZCBwY3JlMnRlc3QgYXJndW1lbnQgdGVzdHMgKHRvIGltcHJvdmUgY292ZXJhZ2UpIgordGl0bGUxPSJUZXN0IDE6IE1haW4gbm9uLVVURiwgbm9uLVVDUCBmdW5jdGlvbmFsaXR5IChjb21wYXRpYmxlIHdpdGggUGVybCA+PSA1LjEwKSIKK3RpdGxlMj0iVGVzdCAyOiBBUEksIGVycm9ycywgaW50ZXJuYWxzLCBhbmQgbm9uLVBlcmwgc3R1ZmYiCit0aXRsZTM9IlRlc3QgMzogTG9jYWxlLXNwZWNpZmljIGZlYXR1cmVzIgordGl0bGU0QT0iVGVzdCA0OiBVVEYiCit0aXRsZTRCPSIgYW5kIFVuaWNvZGUgcHJvcGVydHkgc3VwcG9ydCAoY29tcGF0aWJsZSB3aXRoIFBlcmwgPj0gNS4xMCkiCit0aXRsZTVBPSJUZXN0IDU6IEFQSSwgaW50ZXJuYWxzLCBhbmQgbm9uLVBlcmwgc3R1ZmYgZm9yIFVURiIKK3RpdGxlNUI9IiBhbmQgVUNQIHN1cHBvcnQiCit0aXRsZTY9IlRlc3QgNjogREZBIG1hdGNoaW5nIG1haW4gbm9uLVVURiwgbm9uLVVDUCBmdW5jdGlvbmFsaXR5IgordGl0bGU3QT0iVGVzdCA3OiBERkEgbWF0Y2hpbmcgd2l0aCBVVEYiCit0aXRsZTdCPSIgYW5kIFVuaWNvZGUgcHJvcGVydHkgc3VwcG9ydCIKK3RpdGxlOD0iVGVzdCA4OiBJbnRlcm5hbCBvZmZzZXRzIGFuZCBjb2RlIHNpemUgdGVzdHMiCit0aXRsZTk9IlRlc3QgOTogU3BlY2lhbHMgZm9yIHRoZSBiYXNpYyA4LWJpdCBsaWJyYXJ5IgordGl0bGUxMD0iVGVzdCAxMDogU3BlY2lhbHMgZm9yIHRoZSA4LWJpdCBsaWJyYXJ5IHdpdGggVVRGLTggYW5kIFVDUCBzdXBwb3J0IgordGl0bGUxMT0iVGVzdCAxMTogU3BlY2lhbHMgZm9yIHRoZSBiYXNpYyAxNi1iaXQgYW5kIDMyLWJpdCBsaWJyYXJpZXMiCit0aXRsZTEyPSJUZXN0IDEyOiBTcGVjaWFscyBmb3IgdGhlIDE2LWJpdCBhbmQgMzItYml0IGxpYnJhcmllcyBVVEYgYW5kIFVDUCBzdXBwb3J0IgordGl0bGUxMz0iVGVzdCAxMzogREZBIHNwZWNpYWxzIGZvciB0aGUgYmFzaWMgMTYtYml0IGFuZCAzMi1iaXQgbGlicmFyaWVzIgordGl0bGUxND0iVGVzdCAxNDogREZBIHNwZWNpYWxzIGZvciBVVEYgYW5kIFVDUCBzdXBwb3J0IgordGl0bGUxNT0iVGVzdCAxNTogTm9uLUpJVCBsaW1pdHMgYW5kIG90aGVyIG5vbi1KSVQgdGVzdHMiCit0aXRsZTE2PSJUZXN0IDE2OiBKSVQtc3BlY2lmaWMgZmVhdHVyZXMgd2hlbiBKSVQgaXMgbm90IGF2YWlsYWJsZSIKK3RpdGxlMTc9IlRlc3QgMTc6IEpJVC1zcGVjaWZpYyBmZWF0dXJlcyB3aGVuIEpJVCBpcyBhdmFpbGFibGUiCit0aXRsZTE4PSJUZXN0IDE4OiBUZXN0cyBvZiB0aGUgUE9TSVggaW50ZXJmYWNlLCBleGNsdWRpbmcgVVRGL1VDUCIKK3RpdGxlMTk9IlRlc3QgMTk6IFRlc3RzIG9mIHRoZSBQT1NJWCBpbnRlcmZhY2Ugd2l0aCBVVEYvVUNQIgordGl0bGUyMD0iVGVzdCAyMDogU2VyaWFsaXphdGlvbiB0ZXN0cyIKK3RpdGxlMjE9IlRlc3QgMjE6IFxDIHRlc3RzIHdpdGhvdXQgVVRGIChzdXBwb3J0ZWQgZm9yIERGQSBtYXRjaGluZykiCit0aXRsZTIyPSJUZXN0IDIyOiBcQyB0ZXN0cyB3aXRoIFVURiAobm90IHN1cHBvcnRlZCBmb3IgREZBIG1hdGNoaW5nKSIKK3RpdGxlMjM9IlRlc3QgMjM6IFxDIGRpc2FibGVkIHRlc3QiCittYXh0ZXN0PTIzCisKK2lmIFsgJCMgLWVxIDEgLWEgIiQxIiA9ICJsaXN0IiBdOyB0aGVuCisgIGVjaG8gJHRpdGxlMAorICBlY2hvICR0aXRsZTEKKyAgZWNobyAkdGl0bGUyICIobm90IFVURiBvciBVQ1ApIgorICBlY2hvICR0aXRsZTMKKyAgZWNobyAkdGl0bGU0QSAkdGl0bGU0QgorICBlY2hvICR0aXRsZTVBICR0aXRsZTVCCisgIGVjaG8gJHRpdGxlNgorICBlY2hvICR0aXRsZTdBICR0aXRsZTdCCisgIGVjaG8gJHRpdGxlOAorICBlY2hvICR0aXRsZTkKKyAgZWNobyAkdGl0bGUxMAorICBlY2hvICR0aXRsZTExCisgIGVjaG8gJHRpdGxlMTIKKyAgZWNobyAkdGl0bGUxMworICBlY2hvICR0aXRsZTE0CisgIGVjaG8gJHRpdGxlMTUKKyAgZWNobyAkdGl0bGUxNgorICBlY2hvICR0aXRsZTE3CisgIGVjaG8gJHRpdGxlMTgKKyAgZWNobyAkdGl0bGUxOQorICBlY2hvICR0aXRsZTIwCisgIGVjaG8gJHRpdGxlMjEKKyAgZWNobyAkdGl0bGUyMgorICBlY2hvICR0aXRsZTIzCisgIGV4aXQgMAorZmkKKworIyBTZXQgdXAgYSBzdWl0YWJsZSAiZGlmZiIgY29tbWFuZCBmb3IgY29tcGFyaXNvbi4gU29tZSBzeXN0ZW1zCisjIGhhdmUgYSBkaWZmIHRoYXQgbGFja3MgYSAtdSBvcHRpb24uIFRyeSB0byBkZWFsIHdpdGggdGhpcy4KKworY2Y9ImRpZmYiCitkaWZmIC11IC9kZXYvbnVsbCAvZGV2L251bGwgMj4vZGV2L251bGwgJiYgY2Y9ImRpZmYgLXUiCisKKyMgRmluZCB0aGUgdGVzdCBkYXRhCisKK2lmIFsgLW4gIiRzcmNkaXIiIC1hIC1kICIkc3JjZGlyIiBdIDsgdGhlbgorICB0ZXN0ZGF0YT0iJHNyY2Rpci90ZXN0ZGF0YSIKK2VsaWYgWyAtZCAiLi90ZXN0ZGF0YSIgXSA7IHRoZW4KKyAgdGVzdGRhdGE9Li90ZXN0ZGF0YQorZWxpZiBbIC1kICIuLi90ZXN0ZGF0YSIgXSA7IHRoZW4KKyAgdGVzdGRhdGE9Li4vdGVzdGRhdGEKK2Vsc2UKKyAgZWNobyAiQ2Fubm90IGZpbmQgdGhlIHRlc3RkYXRhIGRpcmVjdG9yeSIKKyAgZXhpdCAxCitmaQorCisKKyMgLS0tLS0tIEZ1bmN0aW9uIHRvIGNoZWNrIHJlc3VsdHMgb2YgYSB0ZXN0IC0tLS0tLS0KKworIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRocmVlIHBhcmFtZXRlcnM6CisjCisjICAkMSB0aGUgdmFsdWUgb2YgJD8gYWZ0ZXIgYSBjYWxsIHRvIHBjcmUydGVzdAorIyAgJDIgdGhlIHN1ZmZpeCBvZiB0aGUgb3V0cHV0IGZpbGUgdG8gY29tcGFyZSB3aXRoCisjICAkMyB0aGUgJG9wdCB2YWx1ZSAoZW1wdHksIC1qaXQsIG9yIC1kZmEpCisjCisjIE5vdGU6IG11c3QgZGVmaW5lIHVzaW5nIG5hbWUoKSwgbm90ICJmdW5jdGlvbiBuYW1lIiwgZm9yIFNvbGFyaXMuCisKK2NoZWNrcmVzdWx0KCkKKyAgeworICBpZiBbICQxIC1uZSAwIF0gOyB0aGVuCisgICAgZWNobyAiKiogcGNyZTJ0ZXN0IGZhaWxlZCAtIGNoZWNrIHRlc3R0cnkiCisgICAgZXhpdCAxCisgIGZpCisgIGNhc2UgIiQzIiBpbgorICAgIC1qaXQpIHdpdGg9IiB3aXRoIEpJVCI7OworICAgIC1kZmEpIHdpdGg9IiB3aXRoIERGQSI7OworICAgICopICAgIHdpdGg9IiI7OworICBlc2FjCisgICRjZiAkdGVzdGRhdGEvdGVzdG91dHB1dCQyIHRlc3R0cnkKKyAgaWYgWyAkPyAhPSAwIF0gOyB0aGVuCisgICAgZWNobyAiIgorICAgIGVjaG8gIioqIFRlc3QgJDIgZmFpbGVkJHdpdGgiCisgICAgZXhpdCAxCisgIGZpCisgIGVjaG8gIiAgT0skd2l0aCIKKyAgfQorCisKKyMgLS0tLS0tIEZ1bmN0aW9uIHRvIHJ1biBhbmQgY2hlY2sgYSBzcGVjaWFsIHBjcmUydGVzdCBhcmd1bWVudHMgdGVzdCAtLS0tLS0tCisKK2NoZWNrc3BlY2lhbCgpCisgIHsKKyAgJHZhbGdyaW5kICAkdmpzIC4vcGNyZTJ0ZXN0ICQxID4+dGVzdHRyeQorICBpZiBbICQ/IC1uZSAwIF0gOyB0aGVuCisgICAgZWNobyAiKiogcGNyZTJ0ZXN0ICQxIGZhaWxlZCAtIGNoZWNrIHRlc3R0cnkiCisgICAgZXhpdCAxCisgIGZpCisgIH0KKworCisjIC0tLS0tLSBTcGVjaWFsIEVCQ0RJQyBUZXN0IC0tLS0tLS0KKworaWYgWyAkIyAtZXEgMSAtYSAiJDEiID0gImViY2RpYyIgXTsgdGhlbgorICAkdmFsZ3JpbmQgLi9wY3JlMnRlc3QgLUMgZWJjZGljID4vZGV2L251bGwKKyAgZWJjZGljPSQ/CisgIGlmIFsgJGViY2RpYyAtbmUgMSBdIDsgdGhlbgorICAgIGVjaG8gIkNhbm5vdCBydW4gRUJDRElDIHRlc3RzOiBFQkNESUMgc3VwcG9ydCBub3QgY29tcGlsZWQiCisgICAgZXhpdCAxCisgIGZpCisgIGZvciBvcHQgaW4gIiIgIi1kZmEiOyBkbworICAgIC4vcGNyZTJ0ZXN0IC1xICRvcHQgJHRlc3RkYXRhL3Rlc3RpbnB1dEVCQyA+dGVzdHRyeQorICAgIGNoZWNrcmVzdWx0ICQ/IEVCQyAiJG9wdCIKKyAgZG9uZQorZXhpdCAwCitmaQorCisKKyMgLS0tLS0tIE5vcm1hbCBUZXN0cyAtLS0tLS0KKworIyBEZWZhdWx0IHZhbHVlcworCithcmc4PQorYXJnMTY9CithcmczMj0KK25vaml0PQorYmlnc3RhY2s9CitzaW09Citza2lwPQordmFsZ3JpbmQ9Cit2anM9CisKKyMgVGhpcyBpcyBpbiBjYXNlIHRoZSBjYWxsZXIgaGFzIHNldCBhbGlhc2VzIChhcyBJIGRvIC0gUEgpCit1bnNldCBjcCBscyBtdiBybQorCisjIFByb2Nlc3Mgb3B0aW9ucyBhbmQgc2VsZWN0IHdoaWNoIHRlc3RzIHRvIHJ1bjsgZm9yIHRob3NlIHRoYXQgYXJlIGV4cGxpY2l0bHkKKyMgcmVxdWVzdGVkLCBjaGVjayB0aGF0IHRoZSBuZWNlc3Nhcnkgb3B0aW9uYWwgZmFjaWxpdGllcyBhcmUgYXZhaWxhYmxlLgorCitkbzA9bm8KK2RvMT1ubworZG8yPW5vCitkbzM9bm8KK2RvND1ubworZG81PW5vCitkbzY9bm8KK2RvNz1ubworZG84PW5vCitkbzk9bm8KK2RvMTA9bm8KK2RvMTE9bm8KK2RvMTI9bm8KK2RvMTM9bm8KK2RvMTQ9bm8KK2RvMTU9bm8KK2RvMTY9bm8KK2RvMTc9bm8KK2RvMTg9bm8KK2RvMTk9bm8KK2RvMjA9bm8KK2RvMjE9bm8KK2RvMjI9bm8KK2RvMjM9bm8KKword2hpbGUgWyAkIyAtZ3QgMCBdIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIDApIGRvMD15ZXM7OworICAgIDEpIGRvMT15ZXM7OworICAgIDIpIGRvMj15ZXM7OworICAgIDMpIGRvMz15ZXM7OworICAgIDQpIGRvND15ZXM7OworICAgIDUpIGRvNT15ZXM7OworICAgIDYpIGRvNj15ZXM7OworICAgIDcpIGRvNz15ZXM7OworICAgIDgpIGRvOD15ZXM7OworICAgIDkpIGRvOT15ZXM7OworICAgMTApIGRvMTA9eWVzOzsKKyAgIDExKSBkbzExPXllczs7CisgICAxMikgZG8xMj15ZXM7OworICAgMTMpIGRvMTM9eWVzOzsKKyAgIDE0KSBkbzE0PXllczs7CisgICAxNSkgZG8xNT15ZXM7OworICAgMTYpIGRvMTY9eWVzOzsKKyAgIDE3KSBkbzE3PXllczs7CisgICAxOCkgZG8xOD15ZXM7OworICAgMTkpIGRvMTk9eWVzOzsKKyAgIDIwKSBkbzIwPXllczs7CisgICAyMSkgZG8yMT15ZXM7OworICAgMjIpIGRvMjI9eWVzOzsKKyAgIDIzKSBkbzIzPXllczs7CisgICAtOCkgYXJnOD15ZXM7OworICAtMTYpIGFyZzE2PXllczs7CisgIC0zMikgYXJnMzI9eWVzOzsKKyAgIGJpZ3N0YWNrfC1iaWdzdGFjaykgYmlnc3RhY2s9eWVzOzsKKyAgIG5vaml0fC1ub2ppdCkgbm9qaXQ9eWVzOzsKKyAgIHNpbXwtc2ltKSBzaGlmdDsgc2ltPSQxOzsKKyAgIHZhbGdyaW5kfC12YWxncmluZCkgdmFsZ3JpbmQ9InZhbGdyaW5kIC0tdG9vbD1tZW1jaGVjayAtcSAtLXNtYy1jaGVjaz1hbGwiOzsKKyAgIHZhbGdyaW5kLWxvZ3wtdmFsZ3JpbmQtbG9nKSB2YWxncmluZD0idmFsZ3JpbmQgLS10b29sPW1lbWNoZWNrIC0tbnVtLWNhbGxlcnM9MzAgLS1sZWFrLWNoZWNrPW5vIC0tZXJyb3ItbGltaXQ9bm8gLS1zbWMtY2hlY2s9YWxsIC0tbG9nLWZpbGU9cmVwb3J0LiVwICI7OworICAgfiopCisgICAgIGlmIGV4cHIgIiQxIiA6ICd+WzAtOV1bMC05XSokJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgc2tpcD0iJHNraXAgYGV4cHIgIiQxIiA6ICd+XChbMC05XSpcKSokJ2AiCisgICAgIGVsc2UKKyAgICAgICBlY2hvICJVbmtub3duIG9wdGlvbiBvciB0ZXN0IHNlbGVjdG9yICckMSciOyBleGl0IDEKKyAgICAgZmkKKyAgIDs7CisgICAqLSopCisgICAgIGlmIGV4cHIgIiQxIiA6ICdbMC05XVswLTldKi1bMC05XSokJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgdGY9YGV4cHIgIiQxIiA6ICdcKFswLTldKlwpJ2AKKyAgICAgICB0dD1gZXhwciAiJDEiIDogJy4qLVwoWzAtOV0qXCknYAorICAgICAgIGlmIFsgIiR0dCIgPSAiIiBdIDsgdGhlbiB0dD0kbWF4dGVzdDsgZmkKKyAgICAgICBpZiBleHByIFwoICIkdHQiICI+IiAiJG1heHRlc3QiIFwpID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGVjaG8gIkludmFsaWQgdGVzdCByYW5nZSAnJDEnIjsgZXhpdCAxCisgICAgICAgZmkKKyAgICAgICB3aGlsZSBleHByICIkdGYiICI8PSIgIiR0dCIgPi9kZXYvbnVsbDsgZG8KKyAgICAgICAgIGV2YWwgZG8ke3RmfT15ZXMKKyAgICAgICAgIHRmPWBleHByICR0ZiArIDFgCisgICAgICAgZG9uZQorICAgICBlbHNlCisgICAgICAgZWNobyAiSW52YWxpZCB0ZXN0IHJhbmdlICckMSciOyBleGl0IDEKKyAgICAgZmkKKyAgIDs7CisgICAqKSBlY2hvICJVbmtub3duIG9wdGlvbiBvciB0ZXN0IHNlbGVjdG9yICckMSciOyBleGl0IDE7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKKyMgRmluZCB3aGljaCBvcHRpb25hbCBmYWNpbGl0aWVzIGFyZSBhdmFpbGFibGUuCisKKyRzaW0gLi9wY3JlMnRlc3QgLUMgbGlua3NpemUgPi9kZXYvbnVsbAorbGlua19zaXplPSQ/CitpZiBbICRsaW5rX3NpemUgLWx0IDIgXSA7IHRoZW4KKyAgZWNobyAiUnVuVGVzdDogRmFpbGVkIHRvIGZpbmQgaW50ZXJuYWwgbGluayBzaXplIgorICBleGl0IDEKK2ZpCitpZiBbICRsaW5rX3NpemUgLWd0IDQgXSA7IHRoZW4KKyAgZWNobyAiUnVuVGVzdDogRmFpbGVkIHRvIGZpbmQgaW50ZXJuYWwgbGluayBzaXplIgorICBleGl0IDEKK2ZpCisKKyMgSWYgaXQgaXMgcG9zc2libGUgdG8gc2V0IHRoZSBzeXN0ZW0gc3RhY2sgc2l6ZSwgYXJyYW5nZSB0byBzZXQgYSB2YWx1ZSBmb3IKKyMgdGVzdCAyLCB3aGljaCBuZWVkcyBtb3JlIHRoYW4gdGhlIGV2ZW4gdGhlIExpbnV4IGRlZmF1bHQgd2hlbiBQQ1JFMiBoYXMgYmVlbgorIyBjb21waWxlZCBieSBnY2Mgd2l0aCAtZnNhbml0aXplPWFkZHJlc3MuIFdoZW4gdGhlIGNvbXBpbGVyIGlzIGNsYW5nLCBzYW5pdGl6ZQorIyBvcHRpb25zIHJlcXVpcmUgYW4gZXZlbiBiaWdnZXIgc3RhY2sgZm9yIHRlc3QgMiwgYW5kIGFuIGluY3JlYXNlZCBzdGFjayBmb3IKKyMgc29tZSBvZiB0aGUgb3RoZXIgdGVzdHMuCisKKyRzaW0gLi9wY3JlMnRlc3QgLVMgMSAvZGV2L251bGwgL2Rldi9udWxsCitpZiBbICQ/IC1lcSAwIF0gOyB0aGVuCisgIGlmIFsgIiRiaWdzdGFjayIgPSAiIiBdIDsgdGhlbgorICAgIHRlc3Qyc3RhY2s9Ii1TIDE2IgorICAgIGRlZmF1bHRzdGFjaz0iIgorICBlbHNlCisgICAgdGVzdDJzdGFjaz0iLVMgMTAyNCIKKyAgICBkZWZhdWx0c3RhY2s9Ii1TIDY0IgorICBmaQorZWxzZQorICB0ZXN0MnN0YWNrPSIiCisgIGRlZmF1bHRzdGFjaz0iIgorZmkKKworIyBBbGwgb2YgOC1iaXQsIDE2LWJpdCwgYW5kIDMyLWJpdCBjaGFyYWN0ZXIgc3RyaW5ncyBtYXkgYmUgc3VwcG9ydGVkLCBidXQgb25seQorIyBvbmUgbmVlZCBiZS4KKworJHNpbSAuL3BjcmUydGVzdCAtQyBwY3JlMi04ID4vZGV2L251bGwKK3N1cHBvcnQ4PSQ/Ciskc2ltIC4vcGNyZTJ0ZXN0IC1DIHBjcmUyLTE2ID4vZGV2L251bGwKK3N1cHBvcnQxNj0kPworJHNpbSAuL3BjcmUydGVzdCAtQyBwY3JlMi0zMiA+L2Rldi9udWxsCitzdXBwb3J0MzI9JD8KKworIyBcQyBtYXkgYmUgZGlzYWJsZWQKKworJHNpbSAuL3BjcmUydGVzdCAtQyBiYWNrc2xhc2gtQyA+L2Rldi9udWxsCitzdXBwb3J0QlNDPSQ/CisKKyMgSW5pdGlhbGl6ZSBhbGwgYml0c2l6ZXMgc2tpcHBlZAorCit0ZXN0OD1za2lwCit0ZXN0MTY9c2tpcAordGVzdDMyPXNraXAKKworIyBJZiBubyBiaXRzaXplIGFyZ3VtZW50cywgc2VsZWN0IGFsbCB0aGF0IGFyZSBhdmFpbGFibGUKKworaWYgWyAiJGFyZzgkYXJnMTYkYXJnMzIiID0gIiIgXSA7IHRoZW4KKyAgaWYgWyAkc3VwcG9ydDggLW5lIDAgXSA7IHRoZW4KKyAgICB0ZXN0OD0tOAorICBmaQorICBpZiBbICRzdXBwb3J0MTYgLW5lIDAgXSA7IHRoZW4KKyAgICB0ZXN0MTY9LTE2CisgIGZpCisgIGlmIFsgJHN1cHBvcnQzMiAtbmUgMCBdIDsgdGhlbgorICAgIHRlc3QzMj0tMzIKKyAgZmkKKworIyBPdGhlcndpc2UsIHNlbGVjdCByZXF1ZXN0ZWQgYml0IHNpemVzCisKK2Vsc2UKKyAgaWYgWyAiJGFyZzgiID0geWVzIF0gOyB0aGVuCisgICAgaWYgWyAkc3VwcG9ydDggLWVxIDAgXSA7IHRoZW4KKyAgICAgIGVjaG8gIkNhbm5vdCBydW4gOC1iaXQgbGlicmFyeSB0ZXN0czogOC1iaXQgbGlicmFyeSBub3QgY29tcGlsZWQiCisgICAgICBleGl0IDEKKyAgICBmaQorICAgIHRlc3Q4PS04CisgIGZpCisgIGlmIFsgIiRhcmcxNiIgPSB5ZXMgXSA7IHRoZW4KKyAgICBpZiBbICRzdXBwb3J0MTYgLWVxIDAgXSA7IHRoZW4KKyAgICAgIGVjaG8gIkNhbm5vdCBydW4gMTYtYml0IGxpYnJhcnkgdGVzdHM6IDE2LWJpdCBsaWJyYXJ5IG5vdCBjb21waWxlZCIKKyAgICAgIGV4aXQgMQorICAgIGZpCisgICAgdGVzdDE2PS0xNgorICBmaQorICBpZiBbICIkYXJnMzIiID0geWVzIF0gOyB0aGVuCisgICAgaWYgWyAkc3VwcG9ydDMyIC1lcSAwIF0gOyB0aGVuCisgICAgICBlY2hvICJDYW5ub3QgcnVuIDMyLWJpdCBsaWJyYXJ5IHRlc3RzOiAzMi1iaXQgbGlicmFyeSBub3QgY29tcGlsZWQiCisgICAgICBleGl0IDEKKyAgICBmaQorICAgIHRlc3QzMj0tMzIKKyAgZmkKK2ZpCisKKyMgVVRGIHN1cHBvcnQgaXMgaW1wbGllZCBieSBVbmljb2RlIHN1cHBvcnQsIGFuZCBpdCBhbHdheXMgYXBwbGllcyB0byBhbGwgYml0CisjIHNpemVzIGlmIGJvdGggYXJlIHN1cHBvcnRlZDsgd2UgY2FuJ3QgaGF2ZSBVVEYtOCBzdXBwb3J0IHdpdGhvdXQgVVRGLTE2IG9yCisjIFVURi0zMiBzdXBwb3J0LgorCiskc2ltIC4vcGNyZTJ0ZXN0IC1DIHVuaWNvZGUgPi9kZXYvbnVsbAordXRmPSQ/CisKKyMgV2hlbiBKSVQgaXMgdXNlZCB3aXRoIHZhbGdyaW5kLCB3ZSBuZWVkIHRvIHNldCB1cCB2YWxncmluZCBzdXBwcmVzc2lvbnMgYXMKKyMgb3RoZXJ3aXNlIHRoZXJlIGFyZSBhIGxvdCBvZiBmYWxzZSBwb3NpdGl2ZSB2YWxncmluZCByZXBvcnRzIHdoZW4gdGhlCisjIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBTU0UyLgorCitqaXRvcHQ9Ciskc2ltIC4vcGNyZTJ0ZXN0IC1DIGppdCA+L2Rldi9udWxsCitqaXQ9JD8KK2lmIFsgJGppdCAtbmUgMCAtYSAiJG5vaml0IiAhPSAieWVzIiBdIDsgdGhlbgorICBqaXRvcHQ9LWppdAorICBpZiBbICIkdmFsZ3JpbmQiICE9ICIiIF0gOyB0aGVuCisgICAgdmpzPSItLXN1cHByZXNzaW9ucz0kdGVzdGRhdGEvdmFsZ3JpbmQtaml0LnN1cHAiCisgIGZpCitmaQorCisjIElmIG5vIHNwZWNpZmljIHRlc3RzIHdlcmUgcmVxdWVzdGVkLCBzZWxlY3QgYWxsLiBUaG9zZSB0aGF0IGFyZSBub3QKKyMgcmVsZXZhbnQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNraXBwZWQuCisKK2lmIFsgJGRvMCAgPSBubyAtYSAkZG8xICA9IG5vIC1hICRkbzIgID0gbm8gLWEgJGRvMyAgPSBubyAtYSBcCisgICAgICRkbzQgID0gbm8gLWEgJGRvNSAgPSBubyAtYSAkZG82ICA9IG5vIC1hICRkbzcgID0gbm8gLWEgXAorICAgICAkZG84ICA9IG5vIC1hICRkbzkgID0gbm8gLWEgJGRvMTAgPSBubyAtYSAkZG8xMSA9IG5vIC1hIFwKKyAgICAgJGRvMTIgPSBubyAtYSAkZG8xMyA9IG5vIC1hICRkbzE0ID0gbm8gLWEgJGRvMTUgPSBubyAtYSBcCisgICAgICRkbzE2ID0gbm8gLWEgJGRvMTcgPSBubyAtYSAkZG8xOCA9IG5vIC1hICRkbzE5ID0gbm8gLWEgXAorICAgICAkZG8yMCA9IG5vIC1hICRkbzIxID0gbm8gLWEgJGRvMjIgPSBubyAtYSAkZG8yMyA9IG5vIFwKKyAgIF07IHRoZW4KKyAgZG8wPXllcworICBkbzE9eWVzCisgIGRvMj15ZXMKKyAgZG8zPXllcworICBkbzQ9eWVzCisgIGRvNT15ZXMKKyAgZG82PXllcworICBkbzc9eWVzCisgIGRvOD15ZXMKKyAgZG85PXllcworICBkbzEwPXllcworICBkbzExPXllcworICBkbzEyPXllcworICBkbzEzPXllcworICBkbzE0PXllcworICBkbzE1PXllcworICBkbzE2PXllcworICBkbzE3PXllcworICBkbzE4PXllcworICBkbzE5PXllcworICBkbzIwPXllcworICBkbzIxPXllcworICBkbzIyPXllcworICBkbzIzPXllcworZmkKKworIyBIYW5kbGUgYW55IGV4cGxpY2l0IHNraXBzIGF0IHRoaXMgc3RhZ2UsIHNvIHRoYXQgYW4gYXJndW1lbnQgbGlzdCBtYXkgY29uc2lzdAorIyBvbmx5IG9mIGV4cGxpY2l0IHNraXBzLgorCitmb3IgaSBpbiAkc2tpcDsgZG8gZXZhbCBkbyRpPW5vOyBkb25lCisKKyMgU2hvdyB3aGljaCByZWxlYXNlIGFuZCB3aGljaCB0ZXN0IGRhdGEKKworZWNobyAiIgorZWNobyBQQ1JFMiBDIGxpYnJhcnkgdGVzdHMgdXNpbmcgdGVzdCBkYXRhIGZyb20gJHRlc3RkYXRhCiskc2ltIC4vcGNyZTJ0ZXN0IC9kZXYvbnVsbAorZWNobyAiIgorCitmb3IgYm1vZGUgaW4gIiR0ZXN0OCIgIiR0ZXN0MTYiICIkdGVzdDMyIjsgZG8KKyAgY2FzZSAiJGJtb2RlIiBpbgorICAgIHNraXApIGNvbnRpbnVlOzsKKyAgICAtMTYpICBpZiBbICIkdGVzdDgkdGVzdDMyIiAhPSAic2tpcHNraXAiIF0gOyB0aGVuIGVjaG8gIiI7IGZpCisgICAgICAgICAgYml0cz0xNjsgZWNobyAiLS0tLSBUZXN0aW5nIDE2LWJpdCBsaWJyYXJ5IC0tLS0iOyBlY2hvICIiOzsKKyAgICAtMzIpICBpZiBbICIkdGVzdDgkdGVzdDE2IiAhPSAic2tpcHNraXAiIF0gOyB0aGVuIGVjaG8gIiI7IGZpCisgICAgICAgICAgYml0cz0zMjsgZWNobyAiLS0tLSBUZXN0aW5nIDMyLWJpdCBsaWJyYXJ5IC0tLS0iOyBlY2hvICIiOzsKKyAgICAtOCkgICBiaXRzPTg7IGVjaG8gIi0tLS0gVGVzdGluZyA4LWJpdCBsaWJyYXJ5IC0tLS0iOyBlY2hvICIiOzsKKyAgZXNhYworCisgICMgVGVzdCAwIGlzIGEgc3BlY2lhbCB0ZXN0LiBJdHMgb3V0cHV0IGlzIG5vdCBjaGVja2VkLCBiZWNhdXNlIGl0IHdpbGwKKyAgIyBiZSBkaWZmZXJlbnQgb24gZGlmZmVyZW50IGhhcmR3YXJlIGFuZCB3aXRoIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy4KKyAgIyBSdW5uaW5nIHRoaXMgdGVzdCBqdXN0IGV4ZXJjaXNlcyB0aGUgY29kZS4KKworICBpZiBbICRkbzAgPSB5ZXMgXSA7IHRoZW4KKyAgICBlY2hvICR0aXRsZTAKKyAgICBlY2hvICcvYWJjL2ppdCxtZW1vcnknID50ZXN0U2lucHV0CisgICAgZWNobyAnICAgYWJjJyA+PnRlc3RTaW5wdXQKKyAgICBlY2hvICcnID50ZXN0dHJ5CisgICAgY2hlY2tzcGVjaWFsICctQycKKyAgICBjaGVja3NwZWNpYWwgJy0taGVscCcKKyAgICBjaGVja3NwZWNpYWwgJy1TIDEgLXQgMTAgdGVzdFNpbnB1dCcKKyAgICBlY2hvICIgIE9LIgorICBmaQorCisgICMgUHJpbWFyeSBub24tVVRGIHRlc3QsIGNvbXBhdGlibGUgd2l0aCBKSVQgYW5kIGFsbCB2ZXJzaW9ucyBvZiBQZXJsID49IDUuOAorCisgIGlmIFsgJGRvMSA9IHllcyBdIDsgdGhlbgorICAgIGVjaG8gJHRpdGxlMQorICAgIGZvciBvcHQgaW4gIiIgJGppdG9wdDsgZG8KKyAgICAgICRzaW0gJHZhbGdyaW5kICR7b3B0OiskdmpzfSAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkb3B0ICR0ZXN0ZGF0YS90ZXN0aW5wdXQxIHRlc3R0cnkKKyAgICAgIGNoZWNrcmVzdWx0ICQ/IDEgIiRvcHQiCisgICAgZG9uZQorICBmaQorCisgICMgUENSRTIgdGVzdHMgdGhhdCBhcmUgbm90IFBlcmwtY29tcGF0aWJsZTogQVBJLCBlcnJvcnMsIGludGVybmFscworCisgIGlmIFsgJGRvMiA9IHllcyBdIDsgdGhlbgorICAgIGVjaG8gJHRpdGxlMiAiKGV4Y2x1ZGluZyBVVEYtJGJpdHMpIgorICAgIGZvciBvcHQgaW4gIiIgJGppdG9wdDsgZG8KKyAgICAgICRzaW0gJHZhbGdyaW5kICR7b3B0OiskdmpzfSAuL3BjcmUydGVzdCAtcSAkdGVzdDJzdGFjayAkYm1vZGUgJG9wdCAkdGVzdGRhdGEvdGVzdGlucHV0MiB0ZXN0dHJ5CisgICAgICBpZiBbICQ/ID0gMCBdIDsgdGhlbgorICAgICAgICBjaGVja3Jlc3VsdCAkPyAyICIkb3B0IgorICAgICAgZWxzZQorICAgICAgICBlY2hvICIgIgorICAgICAgICBlY2hvICIqKiBUZXN0IDIgcmVxdWlyZXMgYSBsb3Qgb2Ygc3RhY2suIElmIGl0IGhhcyBjcmFzaGVkIHdpdGggYSIKKyAgICAgICAgZWNobyAiKiogc2VnbWVudGF0aW9uIGZhdWx0LCBpdCBtYXkgYmUgdGhhdCB5b3UgZG8gbm90IGhhdmUgZW5vdWdoIgorICAgICAgICBlY2hvICIqKiBzdGFjayBhdmFpbGFibGUgYnkgZGVmYXVsdC4gUGxlYXNlIHNlZSB0aGUgJ3BjcmUyc3RhY2snIG1hbiIKKyAgICAgICAgZWNobyAiKiogcGFnZSBmb3IgYSBkaXNjdXNzaW9uIG9mIFBDUkUyJ3Mgc3RhY2sgdXNhZ2UuIgorICAgICAgICBlY2hvICIgIgorICAgICAgICBleGl0IDEKKyAgICAgIGZpCisgICAgZG9uZQorICBmaQorCisgICMgTG9jYWxlLXNwZWNpZmljIHRlc3RzLCBwcm92aWRlZCB0aGF0IGVpdGhlciB0aGUgImZyX0ZSIiwgImZyX0NBIiwgImZyZW5jaCIKKyAgIyBvciAiZnIiIGxvY2FsZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCB0d28gYXJlIFVuaXgtbGlrZSBzdGFuZGFyZHM7IHRoZQorICAjIGxhc3QgdHdvIGFyZSBmb3IgV2luZG93cy4gVW5mb3J0dW5hdGVseSwgZGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBGcmVuY2gKKyAgIyBsb2NhbGUgZ2l2ZSBkaWZmZXJlbnQgb3V0cHV0cyBmb3Igc29tZSBpdGVtcy4gVGhpcyB0ZXN0IHBhc3NlcyBpZiB0aGUKKyAgIyBvdXRwdXQgbWF0Y2hlcyBhbnkgb25lIG9mIHRoZSBhbHRlcm5hdGl2ZSBvdXRwdXQgZmlsZXMuCisKKyAgaWYgWyAkZG8zID0geWVzIF0gOyB0aGVuCisgICAgbG9jYWxlPQorCisgICAgIyBJbiBzb21lIGVudmlyb25tZW50cyBsb2NhbGVzIHRoYXQgYXJlIGxpc3RlZCBieSB0aGUgImxvY2FsZSAtYSIKKyAgICAjIGNvbW1hbmQgZG8gbm90IHNlZW0gdG8gd29yayB3aXRoIHNldGxvY2FsZSgpLiBUaGVyZWZvcmUsIHdlIGRvCisgICAgIyBhIHByZWxpbWluYXJ5IHRlc3QgdG8gc2VlIGlmIHBjcmUydGVzdCBjYW4gc2V0IG9uZSBiZWZvcmUgZ29pbmcKKyAgICAjIG9uIHRvIHVzZSBpdC4KKworICAgIGZvciBsb2MgaW4gJ2ZyX0ZSJyAnZnJlbmNoJyAnZnInICdmcl9DQSc7IGRvCisgICAgICBsb2NhbGUgLWEgfCBncmVwICJeJGxvY1wkIiA+L2Rldi9udWxsCisgICAgICBpZiBbICQ/IC1lcSAwIF0gOyB0aGVuCisgICAgICAgIGVjaG8gIi9hL2xvY2FsZT0kbG9jIiB8IFwKKyAgICAgICAgICAkc2ltICR2YWxncmluZCAuL3BjcmUydGVzdCAtcSAkYm1vZGUgfCBcCisgICAgICAgICAgICBncmVwICJGYWlsZWQgdG8gc2V0IGxvY2FsZSIgPi9kZXYvbnVsbAorICAgICAgICBpZiBbICQ/IC1uZSAwIF0gOyB0aGVuCisgICAgICAgICAgbG9jYWxlPSRsb2MKKyAgICAgICAgICBpZiBbICIkbG9jYWxlIiA9ICJmcl9GUiIgXSA7IHRoZW4KKyAgICAgICAgICAgIGluZmlsZT0kdGVzdGRhdGEvdGVzdGlucHV0MworICAgICAgICAgICAgb3V0ZmlsZT0kdGVzdGRhdGEvdGVzdG91dHB1dDMKKyAgICAgICAgICAgIG91dGZpbGUyPSR0ZXN0ZGF0YS90ZXN0b3V0cHV0M0EKKyAgICAgICAgICAgIG91dGZpbGUzPSR0ZXN0ZGF0YS90ZXN0b3V0cHV0M0IKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpbmZpbGU9dGVzdDNpbnB1dAorICAgICAgICAgICAgb3V0ZmlsZT10ZXN0M291dHB1dAorICAgICAgICAgICAgb3V0ZmlsZTI9dGVzdDNvdXRwdXRBCisgICAgICAgICAgICBvdXRmaWxlMz10ZXN0M291dHB1dEIKKyAgICAgICAgICAgIHNlZCAicy9mcl9GUi8kbG9jLyIgJHRlc3RkYXRhL3Rlc3RpbnB1dDMgPnRlc3QzaW5wdXQKKyAgICAgICAgICAgIHNlZCAicy9mcl9GUi8kbG9jLyIgJHRlc3RkYXRhL3Rlc3RvdXRwdXQzID50ZXN0M291dHB1dAorICAgICAgICAgICAgc2VkICJzL2ZyX0ZSLyRsb2MvIiAkdGVzdGRhdGEvdGVzdG91dHB1dDNBID50ZXN0M291dHB1dEEKKyAgICAgICAgICAgIHNlZCAicy9mcl9GUi8kbG9jLyIgJHRlc3RkYXRhL3Rlc3RvdXRwdXQzQiA+dGVzdDNvdXRwdXRCCisgICAgICAgICAgZmkKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBpZiBbICIkbG9jYWxlIiAhPSAiIiBdIDsgdGhlbgorICAgICAgZWNobyAkdGl0bGUzICIodXNpbmcgJyRsb2NhbGUnIGxvY2FsZSkiCisgICAgICBmb3Igb3B0IGluICIiICRqaXRvcHQ7IGRvCisgICAgICAgICRzaW0gJHZhbGdyaW5kICR7b3B0OiskdmpzfSAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkb3B0ICRpbmZpbGUgdGVzdHRyeQorICAgICAgICBpZiBbICQ/ID0gMCBdIDsgdGhlbgorICAgICAgICAgIGNhc2UgIiRvcHQiIGluCisgICAgICAgICAgICAtaml0KSB3aXRoPSIgd2l0aCBKSVQiOzsKKyAgICAgICAgICAgICopICAgIHdpdGg9IiI7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICBpZiAkY2YgJG91dGZpbGUgdGVzdHRyeSA+dGVzdHN0ZG91dCB8fCBcCisgICAgICAgICAgICAgJGNmICRvdXRmaWxlMiB0ZXN0dHJ5ID50ZXN0c3Rkb3V0IHx8IFwKKyAgICAgICAgICAgICAkY2YgJG91dGZpbGUzIHRlc3R0cnkgPnRlc3RzdGRvdXQKKyAgICAgICAgICB0aGVuCisgICAgICAgICAgICBlY2hvICIgIE9LJHdpdGgiCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyAiKiogTG9jYWxlIHRlc3QgZGlkIG5vdCBydW4gc3VjY2Vzc2Z1bGx5JHdpdGguIFRoZSBvdXRwdXQgZGlkIG5vdCBtYXRjaCIKKyAgICAgICAgICAgIGVjaG8gIiAgICRvdXRmaWxlLCAkb3V0ZmlsZTIgb3IgJG91dGZpbGUzLiIKKyAgICAgICAgICAgIGVjaG8gIiAgIFRoaXMgbWF5IG1lYW4gdGhhdCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aCB0aGUgbG9jYWxlIHNldHRpbmdzIHJhdGhlciIKKyAgICAgICAgICAgIGVjaG8gIiAgIHRoYW4gYSBidWcgaW4gUENSRTIuIgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgZmkKKyAgICAgICAgZWxzZSBleGl0IDEKKyAgICAgICAgZmkKKyAgICAgIGRvbmUKKyAgICBlbHNlCisgICAgICBlY2hvICJDYW5ub3QgdGVzdCBsb2NhbGUtc3BlY2lmaWMgZmVhdHVyZXMgLSBub25lIG9mIHRoZSAnZnJfRlInLCAnZnJfQ0EnLCIKKyAgICAgIGVjaG8gIidmcicgb3IgJ2ZyZW5jaCcgbG9jYWxlcyBjYW4gYmUgc2V0LCBvciB0aGUgXCJsb2NhbGVcIiBjb21tYW5kIGlzIgorICAgICAgZWNobyAibm90IGF2YWlsYWJsZSB0byBjaGVjayBmb3IgdGhlbS4iCisgICAgICBlY2hvICIgIgorICAgIGZpCisgIGZpCisKKyAgIyBUZXN0cyBmb3IgVVRGIGFuZCBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQKKworICBpZiBbICRkbzQgPSB5ZXMgXSA7IHRoZW4KKyAgICBlY2hvICR7dGl0bGU0QX0tJHtiaXRzfSR7dGl0bGU0Qn0KKyAgICBpZiBbICR1dGYgLWVxIDAgXSA7IHRoZW4KKyAgICAgIGVjaG8gIiAgU2tpcHBlZCBiZWNhdXNlIFVURi0kYml0cyBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUiCisgICAgZWxzZQorICAgICAgZm9yIG9wdCBpbiAiIiAkaml0b3B0OyBkbworICAgICAgICAkc2ltICR2YWxncmluZCAke29wdDorJHZqc30gLi9wY3JlMnRlc3QgLXEgJGRlZmF1bHRzdGFjayAkYm1vZGUgJG9wdCAkdGVzdGRhdGEvdGVzdGlucHV0NCB0ZXN0dHJ5CisgICAgICAgIGNoZWNrcmVzdWx0ICQ/IDQgIiRvcHQiCisgICAgICBkb25lCisgICAgZmkKKyAgZmkKKworICBpZiBbICRkbzUgPSB5ZXMgXSA7IHRoZW4KKyAgICBlY2hvICR7dGl0bGU1QX0tJHtiaXRzfSR0aXRsZTVCCisgICAgaWYgWyAkdXRmIC1lcSAwIF0gOyB0aGVuCisgICAgICBlY2hvICIgIFNraXBwZWQgYmVjYXVzZSBVVEYtJGJpdHMgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIgorICAgIGVsc2UKKyAgICAgIGZvciBvcHQgaW4gIiIgJGppdG9wdDsgZG8KKyAgICAgICAgJHNpbSAkdmFsZ3JpbmQgJHtvcHQ6KyR2anN9IC4vcGNyZTJ0ZXN0IC1xICRkZWZhdWx0c3RhY2sgJGJtb2RlICRvcHQgJHRlc3RkYXRhL3Rlc3RpbnB1dDUgdGVzdHRyeQorICAgICAgICBjaGVja3Jlc3VsdCAkPyA1ICIkb3B0IgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisKKyAgIyBUZXN0cyBmb3IgREZBIG1hdGNoaW5nIHN1cHBvcnQKKworICBpZiBbICRkbzYgPSB5ZXMgXSA7IHRoZW4KKyAgICBlY2hvICR0aXRsZTYKKyAgICAkc2ltICR2YWxncmluZCAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkdGVzdGRhdGEvdGVzdGlucHV0NiB0ZXN0dHJ5CisgICAgY2hlY2tyZXN1bHQgJD8gNiAiIgorICBmaQorCisgIGlmIFsgJGRvNyA9IHllcyBdIDsgdGhlbgorICAgIGVjaG8gJHt0aXRsZTdBfS0ke2JpdHN9JHRpdGxlN0IKKyAgICBpZiBbICR1dGYgLWVxIDAgXSA7IHRoZW4KKyAgICAgIGVjaG8gIiAgU2tpcHBlZCBiZWNhdXNlIFVURi0kYml0cyBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUiCisgICAgZWxzZQorICAgICAgJHNpbSAkdmFsZ3JpbmQgLi9wY3JlMnRlc3QgLXEgJGRlZmF1bHRzdGFjayAkYm1vZGUgJG9wdCAkdGVzdGRhdGEvdGVzdGlucHV0NyB0ZXN0dHJ5CisgICAgICBjaGVja3Jlc3VsdCAkPyA3ICIiCisgICAgZmkKKyAgZmkKKworICAjIFRlc3Qgb2YgaW50ZXJuYWwgb2Zmc2V0cyBhbmQgY29kZSBzaXplcy4gVGhpcyB0ZXN0IGlzIHJ1biBvbmx5IHdoZW4gdGhlcmUKKyAgIyBpcyBVVEYvVUNQIHN1cHBvcnQuIFRoZSBhY3R1YWwgdGVzdHMgYXJlIG1vc3RseSB0aGUgc2FtZSBhcyBpbiBzb21lIG9mIHRoZQorICAjIGFib3ZlLCBidXQgaW4gdGhpcyB0ZXN0IHdlIGluc3BlY3Qgc29tZSBvZmZzZXRzIGFuZCBzaXplcy4gVGhpcyBpcyBhCisgICMgZG91YmxlY2hlY2sgZm9yIHRoZSBtYWludGFpbmVyLCBqdXN0IGluIGNhc2Ugc29tZXRoaW5nIGNoYW5nZXMgdW5leHBlY3RlbHkuCisgICMgVGhlIG91dHB1dCBmcm9tIHRoaXMgdGVzdCBpcyBkaWZmZXJlbnQgaW4gOC1iaXQsIDE2LWJpdCwgYW5kIDMyLWJpdCBtb2RlcworICAjIGFuZCBmb3IgZGlmZmVyZW50IGxpbmsgc2l6ZXMsIHNvIHRoZXJlIGFyZSBkaWZmZXJlbnQgb3V0cHV0IGZpbGVzIGZvciBlYWNoCisgICMgbW9kZSBhbmQgbGluayBzaXplLgorCisgIGlmIFsgJGRvOCA9IHllcyBdIDsgdGhlbgorICAgIGVjaG8gJHRpdGxlOAorICAgIGlmIFsgJHV0ZiAtZXEgMCBdIDsgdGhlbgorICAgICAgZWNobyAiICBTa2lwcGVkIGJlY2F1c2UgVVRGLSRiaXRzIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSIKKyAgICBlbHNlCisgICAgICAkc2ltICR2YWxncmluZCAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkdGVzdGRhdGEvdGVzdGlucHV0OCB0ZXN0dHJ5CisgICAgICBjaGVja3Jlc3VsdCAkPyA4LSRiaXRzLSRsaW5rX3NpemUgIiIKKyAgICBmaQorICBmaQorCisgICMgVGVzdHMgZm9yIDgtYml0LXNwZWNpZmljIGZlYXR1cmVzCisKKyAgaWYgWyAiJGRvOSIgPSB5ZXMgXSA7IHRoZW4KKyAgICBlY2hvICR0aXRsZTkKKyAgICBpZiBbICIkYml0cyIgPSAiMTYiIC1vICIkYml0cyIgPSAiMzIiIF0gOyB0aGVuCisgICAgICBlY2hvICIgIFNraXBwZWQgd2hlbiBydW5uaW5nIDE2LzMyLWJpdCB0ZXN0cyIKKyAgICBlbHNlCisgICAgICBmb3Igb3B0IGluICIiICRqaXRvcHQ7IGRvCisgICAgICAgICRzaW0gJHZhbGdyaW5kICR7b3B0OiskdmpzfSAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkb3B0ICR0ZXN0ZGF0YS90ZXN0aW5wdXQ5IHRlc3R0cnkKKyAgICAgICAgY2hlY2tyZXN1bHQgJD8gOSAiJG9wdCIKKyAgICAgIGRvbmUKKyAgICBmaQorICBmaQorCisgICMgVGVzdHMgZm9yIFVURi04IGFuZCBVQ1AgOC1iaXQtc3BlY2lmaWMgZmVhdHVyZXMKKworICBpZiBbICIkZG8xMCIgPSB5ZXMgXSA7IHRoZW4KKyAgICBlY2hvICR0aXRsZTEwCisgICAgaWYgWyAiJGJpdHMiID0gIjE2IiAtbyAiJGJpdHMiID0gIjMyIiBdIDsgdGhlbgorICAgICAgZWNobyAiICBTa2lwcGVkIHdoZW4gcnVubmluZyAxNi8zMi1iaXQgdGVzdHMiCisgICAgZWxpZiBbICR1dGYgLWVxIDAgXSA7IHRoZW4KKyAgICAgIGVjaG8gIiAgU2tpcHBlZCBiZWNhdXNlIFVURi0kYml0cyBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUiCisgICAgZWxzZQorICAgICAgZm9yIG9wdCBpbiAiIiAkaml0b3B0OyBkbworICAgICAgICAkc2ltICR2YWxncmluZCAke29wdDorJHZqc30gLi9wY3JlMnRlc3QgLXEgJGRlZmF1bHRzdGFjayAkYm1vZGUgJG9wdCAkdGVzdGRhdGEvdGVzdGlucHV0MTAgdGVzdHRyeQorICAgICAgICBjaGVja3Jlc3VsdCAkPyAxMCAiJG9wdCIKKyAgICAgIGRvbmUKKyAgICBmaQorICBmaQorCisgICMgVGVzdHMgZm9yIDE2LWJpdCBhbmQgMzItYml0IGZlYXR1cmVzLiBPdXRwdXQgaXMgZGlmZmVyZW50IGZvciB0aGUgdHdvIHdpZHRocy4KKworICBpZiBbICRkbzExID0geWVzIF0gOyB0aGVuCisgICAgZWNobyAkdGl0bGUxMQorICAgIGlmIFsgIiRiaXRzIiA9ICI4IiBdIDsgdGhlbgorICAgICAgZWNobyAiICBTa2lwcGVkIHdoZW4gcnVubmluZyA4LWJpdCB0ZXN0cyIKKyAgICBlbHNlCisgICAgICBmb3Igb3B0IGluICIiICRqaXRvcHQ7IGRvCisgICAgICAgICRzaW0gJHZhbGdyaW5kICR7b3B0OiskdmpzfSAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkb3B0ICR0ZXN0ZGF0YS90ZXN0aW5wdXQxMSB0ZXN0dHJ5CisgICAgICAgIGNoZWNrcmVzdWx0ICQ/IDExLSRiaXRzICIkb3B0IgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisKKyAgIyBUZXN0cyBmb3IgMTYtYml0IGFuZCAzMi1iaXQgZmVhdHVyZXMgd2l0aCBVVEYtMTYvMzIgYW5kIFVDUCBzdXBwb3J0LiBPdXRwdXQKKyAgIyBpcyBkaWZmZXJlbnQgZm9yIHRoZSB0d28gd2lkdGhzLgorCisgIGlmIFsgJGRvMTIgPSB5ZXMgXSA7IHRoZW4KKyAgICBlY2hvICR0aXRsZTEyCisgICAgaWYgWyAiJGJpdHMiID0gIjgiIF0gOyB0aGVuCisgICAgICBlY2hvICIgIFNraXBwZWQgd2hlbiBydW5uaW5nIDgtYml0IHRlc3RzIgorICAgIGVsaWYgWyAkdXRmIC1lcSAwIF0gOyB0aGVuCisgICAgICBlY2hvICIgIFNraXBwZWQgYmVjYXVzZSBVVEYtJGJpdHMgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIgorICAgIGVsc2UKKyAgICAgIGZvciBvcHQgaW4gIiIgJGppdG9wdDsgZG8KKyAgICAgICAgJHNpbSAkdmFsZ3JpbmQgJHtvcHQ6KyR2anN9IC4vcGNyZTJ0ZXN0IC1xICRkZWZhdWx0c3RhY2sgJGJtb2RlICRvcHQgJHRlc3RkYXRhL3Rlc3RpbnB1dDEyIHRlc3R0cnkKKyAgICAgICAgY2hlY2tyZXN1bHQgJD8gMTItJGJpdHMgIiRvcHQiCisgICAgICBkb25lCisgICAgZmkKKyAgZmkKKworICAjIFRlc3RzIGZvciAxNi8zMi1iaXQtc3BlY2lmaWMgZmVhdHVyZXMgaW4gREZBIG5vbi1VVEYgbW9kZXMKKworICBpZiBbICRkbzEzID0geWVzIF0gOyB0aGVuCisgICAgZWNobyAkdGl0bGUxMworICAgIGlmIFsgIiRiaXRzIiA9ICI4IiBdIDsgdGhlbgorICAgICAgZWNobyAiICBTa2lwcGVkIHdoZW4gcnVubmluZyA4LWJpdCB0ZXN0cyIKKyAgICBlbHNlCisgICAgICAkc2ltICR2YWxncmluZCAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkdGVzdGRhdGEvdGVzdGlucHV0MTMgdGVzdHRyeQorICAgICAgY2hlY2tyZXN1bHQgJD8gMTMgIiIKKyAgICBmaQorICBmaQorCisgICMgVGVzdHMgZm9yIERGQSBVVEYgYW5kIFVDUCBmZWF0dXJlcy4gT3V0cHV0IGlzIGRpZmZlcmVudCBmb3IgdGhlIGRpZmZlcmVudCB3aWR0aHMuCisKKyAgaWYgWyAkZG8xNCA9IHllcyBdIDsgdGhlbgorICAgIGVjaG8gJHRpdGxlMTQKKyAgICBpZiBbICR1dGYgLWVxIDAgXSA7IHRoZW4KKyAgICAgIGVjaG8gIiAgU2tpcHBlZCBiZWNhdXNlIFVURi0kYml0cyBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUiCisgICAgZWxzZQorICAgICAgJHNpbSAkdmFsZ3JpbmQgLi9wY3JlMnRlc3QgLXEgJGRlZmF1bHRzdGFjayAkYm1vZGUgJG9wdCAkdGVzdGRhdGEvdGVzdGlucHV0MTQgdGVzdHRyeQorICAgICAgY2hlY2tyZXN1bHQgJD8gMTQtJGJpdHMgIiIKKyAgICBmaQorICBmaQorCisgICMgVGVzdCBub24tSklUIG1hdGNoIGFuZCByZWN1cnNpb24gbGltaXRzCisKKyAgaWYgWyAkZG8xNSA9IHllcyBdIDsgdGhlbgorICAgIGVjaG8gJHRpdGxlMTUKKyAgICAkc2ltICR2YWxncmluZCAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkdGVzdGRhdGEvdGVzdGlucHV0MTUgdGVzdHRyeQorICAgIGNoZWNrcmVzdWx0ICQ/IDE1ICIiCisgIGZpCisKKyAgIyBUZXN0IEpJVC1zcGVjaWZpYyBmZWF0dXJlcyB3aGVuIEpJVCBpcyBub3QgYXZhaWxhYmxlCisKKyAgaWYgWyAkZG8xNiA9IHllcyBdIDsgdGhlbgorICAgIGVjaG8gJHRpdGxlMTYKKyAgICBpZiBbICRqaXQgLW5lIDAgXSA7IHRoZW4KKyAgICAgIGVjaG8gIiAgU2tpcHBlZCBiZWNhdXNlIEpJVCBpcyBhdmFpbGFibGUiCisgICAgZWxzZQorICAgICAgJHNpbSAkdmFsZ3JpbmQgLi9wY3JlMnRlc3QgLXEgJGRlZmF1bHRzdGFjayAkYm1vZGUgJHRlc3RkYXRhL3Rlc3RpbnB1dDE2IHRlc3R0cnkKKyAgICAgIGNoZWNrcmVzdWx0ICQ/IDE2ICIiCisgICAgZmkKKyAgZmkKKworICAjIFRlc3QgSklULXNwZWNpZmljIGZlYXR1cmVzIHdoZW4gSklUIGlzIGF2YWlsYWJsZQorCisgIGlmIFsgJGRvMTcgPSB5ZXMgXSA7IHRoZW4KKyAgICBlY2hvICR0aXRsZTE3CisgICAgaWYgWyAkaml0IC1lcSAwIC1vICIkbm9qaXQiID0gInllcyIgXSA7IHRoZW4KKyAgICAgIGVjaG8gIiAgU2tpcHBlZCBiZWNhdXNlIEpJVCBpcyBub3QgYXZhaWxhYmxlIG9yIG5vaml0IHdhcyBzcGVjaWZpZWQiCisgICAgZWxzZQorICAgICAgJHNpbSAkdmFsZ3JpbmQgJHZqcyAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkdGVzdGRhdGEvdGVzdGlucHV0MTcgdGVzdHRyeQorICAgICAgY2hlY2tyZXN1bHQgJD8gMTcgIiIKKyAgICBmaQorICBmaQorCisgICMgVGVzdHMgZm9yIHRoZSBQT1NJWCBpbnRlcmZhY2Ugd2l0aG91dCBVVEYvVUNQICg4LWJpdCBvbmx5KQorCisgIGlmIFsgJGRvMTggPSB5ZXMgXSA7IHRoZW4KKyAgICBlY2hvICR0aXRsZTE4CisgICAgaWYgWyAiJGJpdHMiID0gIjE2IiAtbyAiJGJpdHMiID0gIjMyIiBdIDsgdGhlbgorICAgICAgZWNobyAiICBTa2lwcGVkIHdoZW4gcnVubmluZyAxNi8zMi1iaXQgdGVzdHMiCisgICAgZWxzZQorICAgICAgJHNpbSAkdmFsZ3JpbmQgLi9wY3JlMnRlc3QgLXEgJGRlZmF1bHRzdGFjayAkYm1vZGUgJHRlc3RkYXRhL3Rlc3RpbnB1dDE4IHRlc3R0cnkKKyAgICAgIGNoZWNrcmVzdWx0ICQ/IDE4ICIiCisgICAgZmkKKyAgZmkKKworICAjIFRlc3RzIGZvciB0aGUgUE9TSVggaW50ZXJmYWNlIHdpdGggVVRGL1VDUCAoOC1iaXQgb25seSkKKworICBpZiBbICRkbzE5ID0geWVzIF0gOyB0aGVuCisgICAgZWNobyAkdGl0bGUxOQorICAgIGlmIFsgIiRiaXRzIiA9ICIxNiIgLW8gIiRiaXRzIiA9ICIzMiIgXSA7IHRoZW4KKyAgICAgIGVjaG8gIiAgU2tpcHBlZCB3aGVuIHJ1bm5pbmcgMTYvMzItYml0IHRlc3RzIgorICAgIGVsaWYgWyAkdXRmIC1lcSAwIF0gOyB0aGVuCisgICAgICBlY2hvICIgIFNraXBwZWQgYmVjYXVzZSBVVEYtJGJpdHMgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlIgorICAgIGVsc2UKKyAgICAgICRzaW0gJHZhbGdyaW5kIC4vcGNyZTJ0ZXN0IC1xICRkZWZhdWx0c3RhY2sgJGJtb2RlICR0ZXN0ZGF0YS90ZXN0aW5wdXQxOSB0ZXN0dHJ5CisgICAgICBjaGVja3Jlc3VsdCAkPyAxOSAiIgorICAgIGZpCisgIGZpCisKKyAgIyBTZXJpYWxpemF0aW9uIHRlc3RzCisKKyAgaWYgWyAkZG8yMCA9IHllcyBdIDsgdGhlbgorICAgIGVjaG8gJHRpdGxlMjAKKyAgICAkc2ltICR2YWxncmluZCAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkdGVzdGRhdGEvdGVzdGlucHV0MjAgdGVzdHRyeQorICAgIGNoZWNrcmVzdWx0ICQ/IDIwICIiCisgIGZpCisKKyAgIyBcQyB0ZXN0cyB3aXRob3V0IFVURiAtIERGQSBtYXRjaGluZyBpcyBzdXBwb3J0ZWQKKworICBpZiBbICIkZG8yMSIgPSB5ZXMgXSA7IHRoZW4KKyAgICBlY2hvICR0aXRsZTIxCisgICAgaWYgWyAkc3VwcG9ydEJTQyAtZXEgMCBdIDsgdGhlbgorICAgICAgZWNobyAiICBTa2lwcGVkIGJlY2F1c2UgXEMgaXMgZGlzYWJsZWQiCisgICAgZWxzZQorICAgICAgZm9yIG9wdCBpbiAiIiAkaml0b3B0IC1kZmE7IGRvCisgICAgICAgICRzaW0gJHZhbGdyaW5kICR7b3B0OiskdmpzfSAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkb3B0ICR0ZXN0ZGF0YS90ZXN0aW5wdXQyMSB0ZXN0dHJ5CisgICAgICAgIGNoZWNrcmVzdWx0ICQ/IDIxICIkb3B0IgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisKKyAgIyBcQyB0ZXN0cyB3aXRoIFVURiAtIERGQSBtYXRjaGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBcQyBpbiBVVEYgbW9kZQorCisgIGlmIFsgIiRkbzIyIiA9IHllcyBdIDsgdGhlbgorICAgIGVjaG8gJHRpdGxlMjIKKyAgICBpZiBbICRzdXBwb3J0QlNDIC1lcSAwIF0gOyB0aGVuCisgICAgICBlY2hvICIgIFNraXBwZWQgYmVjYXVzZSBcQyBpcyBkaXNhYmxlZCIKKyAgICBlbGlmIFsgJHV0ZiAtZXEgMCBdIDsgdGhlbgorICAgICAgZWNobyAiICBTa2lwcGVkIGJlY2F1c2UgVVRGLSRiaXRzIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSIKKyAgICBlbHNlCisgICAgICBmb3Igb3B0IGluICIiICRqaXRvcHQ7IGRvCisgICAgICAgICRzaW0gJHZhbGdyaW5kICR7b3B0OiskdmpzfSAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkb3B0ICR0ZXN0ZGF0YS90ZXN0aW5wdXQyMiB0ZXN0dHJ5CisgICAgICAgIGNoZWNrcmVzdWx0ICQ/IDIyLSRiaXRzICIkb3B0IgorICAgICAgZG9uZQorICAgIGZpCisgIGZpCisKKyAgIyBUZXN0IHdoZW4gXEMgaXMgZGlzYWJsZWQKKworICBpZiBbICIkZG8yMyIgPSB5ZXMgXSA7IHRoZW4KKyAgICBlY2hvICR0aXRsZTIzCisgICAgaWYgWyAkc3VwcG9ydEJTQyAtbmUgMCBdIDsgdGhlbgorICAgICAgZWNobyAiICBTa2lwcGVkIGJlY2F1c2UgXEMgaXMgbm90IGRpc2FibGVkIgorICAgIGVsc2UKKyAgICAgICRzaW0gJHZhbGdyaW5kICR7b3B0OiskdmpzfSAuL3BjcmUydGVzdCAtcSAkZGVmYXVsdHN0YWNrICRibW9kZSAkb3B0ICR0ZXN0ZGF0YS90ZXN0aW5wdXQyMyB0ZXN0dHJ5CisgICAgICBjaGVja3Jlc3VsdCAkPyAyMyAiIgorICAgIGZpCisgIGZpCisKKyMgRW5kIG9mIGxvb3AgZm9yIDgvMTYvMzItYml0IHRlc3RzCitkb25lCisKKyMgQ2xlYW4gdXAgbG9jYWwgd29ya2luZyBmaWxlcworcm0gLWYgdGVzdFNpbnB1dCB0ZXN0M2lucHV0IHRlc3RzYXZlZDEgdGVzdHNhdmVkMiB0ZXN0M291dHB1dCB0ZXN0M291dHB1dEEgdGVzdDNvdXRwdXRCIHRlc3RzdGRvdXQgdGVzdHN0ZGVyciB0ZXN0dHJ5CisKKyMgRW5kCmRpZmYgLS1naXQgYS9kaXN0Mi9SdW5UZXN0LmJhdCBiL2Rpc3QyL1J1blRlc3QuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlOWQ1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9SdW5UZXN0LmJhdApAQCAtMCwwICsxLDUyNCBAQAorQGVjaG8gb2ZmDQorQHJlbQ0KK0ByZW0gTVMgV2luZG93cyBiYXRjaCBmaWxlIHRvIHJ1biBwY3JlMnRlc3Qgb24gdGVzdGZpbGVzIHdpdGggdGhlIGNvcnJlY3QNCitAcmVtIG9wdGlvbnMuIFRoaXMgZmlsZSBtdXN0IHVzZSBDUkxGIGxpbmVicmVha3MgdG8gZnVuY3Rpb24gcHJvcGVybHksDQorQHJlbSBhbmQgcmVxdWlyZXMgYm90aCBwY3JlMnRlc3QgYW5kIHBjcmUyZ3JlcC4NCitAcmVtDQorQHJlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSElTVE9SWSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorQHJlbSBUaGlzIGZpbGUgd2FzIG9yaWdpbmFsbHkgY29udHJpYnV0ZWQgdG8gUENSRTEgYnkgUmFsZiBKdW5rZXIsIGFuZCB0b3VjaGVkDQorQHJlbSB1cCBieSBEYW5pZWwgUmljaGFyZCBHLiBUZXN0cyAxMC0xMiBhZGRlZCBieSBQaGlsaXAgSC4NCitAcmVtIFBoaWxpcCBIIGFsc28gY2hhbmdlZCB0ZXN0IDMgdG8gdXNlICJ3aW50ZXN0IiBmaWxlcy4NCitAcmVtDQorQHJlbSBVcGRhdGVkIGJ5IFRvbSBGb3J0bWFubiB0byBzdXBwb3J0IGV4cGxpY2l0IHRlc3QgbnVtYmVycyBvbiB0aGUgY29tbWFuZA0KK0ByZW0gbGluZS4gQWRkZWQgYXJndW1lbnQgdmFsaWRhdGlvbiBhbmQgYWRkZWQgZXJyb3IgcmVwb3J0aW5nLg0KK0ByZW0NCitAcmVtIFNoZXJpIFBpZXJjZSBhZGRlZCBsb2dpYyB0byBza2lwIGZlYXR1cmUgZGVwZW5kZW50IHRlc3RzDQorQHJlbSB0ZXN0cyA0IDUgNyAxMCAxMiAxNCAxOSBhbmQgMjIgcmVxdWlyZSBVbmljb2RlIHN1cHBvcnQNCitAcmVtIDggcmVxdWlyZXMgVW5pY29kZSBhbmQgbGluayBzaXplIDINCitAcmVtIDE2IHJlcXVpcmVzIGFic2VuY2Ugb2Ygaml0IHN1cHBvcnQNCitAcmVtIDE3IHJlcXVpcmVzIHByZXNlbmNlIG9mIGppdCBzdXBwb3J0DQorQHJlbSBTaGVyaSBQIGFsc28gYWRkZWQgb3ZlcnJpZGUgdGVzdHMgZm9yIHN0dWR5IGFuZCBqaXQgdGVzdGluZw0KK0ByZW0gWm9sdGFuIEhlcmN6ZWcgYWRkZWQgbGlicGNyZTE2IHN1cHBvcnQNCitAcmVtIFpvbHRhbiBIZXJjemVnIGFkZGVkIGxpYnBjcmUzMiBzdXBwb3J0DQorQHJlbSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorQHJlbQ0KK0ByZW0gVGhlIGZpbGUgd2FzIGNvbnZlcnRlZCBmb3IgUENSRTIgYnkgUEgsIEZlYnJ1YXJ5IDIwMTUuDQorQHJlbSBVcGRhdGVkIGZvciBuZXcgdGVzdCAxNCAobW92aW5nIG90aGVycyB1cCBhIG51bWJlciksIEF1Z3VzdCAyMDE1Lg0KK0ByZW0gVGlkaWVkIGFuZCB1cGRhdGVkIGZvciBuZXcgdGVzdHMgMjEsIDIyLCAyMyBieSBQSCwgT2N0b2JlciAyMDE1Lg0KKw0KKw0KK3NldGxvY2FsIGVuYWJsZWRlbGF5ZWRleHBhbnNpb24NCitpZiBbJXNyY2RpciVdPT1bXSAoDQoraWYgZXhpc3QgdGVzdGRhdGFcIHNldCBzcmNkaXI9LikNCitpZiBbJXNyY2RpciVdPT1bXSAoDQoraWYgZXhpc3QgLi5cdGVzdGRhdGFcIHNldCBzcmNkaXI9Li4pDQoraWYgWyVzcmNkaXIlXT09W10gKA0KK2lmIGV4aXN0IC4uXC4uXHRlc3RkYXRhXCBzZXQgc3JjZGlyPS4uXC4uKQ0KK2lmIE5PVCBleGlzdCAlc3JjZGlyJVx0ZXN0ZGF0YVwgKA0KK0Vycm9yOiBlY2hvIGRpc3RyaWJ1dGlvbiB0ZXN0ZGF0YSBmb2xkZXIgbm90IGZvdW5kIQ0KK2NhbGwgOmNvbmZlcnJvcg0KK2V4aXQgL2IgMQ0KK2dvdG8gOmVvZg0KKykNCisNCitpZiBbJXBjcmUydGVzdCVdPT1bXSBzZXQgcGNyZTJ0ZXN0PS5ccGNyZTJ0ZXN0LmV4ZQ0KKw0KK2VjaG8gc291cmNlIGRpciBpcyAlc3JjZGlyJQ0KK2VjaG8gcGNyZTJ0ZXN0PSVwY3JlMnRlc3QlDQorDQoraWYgTk9UIGV4aXN0ICVwY3JlMnRlc3QlICgNCitlY2hvIEVycm9yOiAlcGNyZTJ0ZXN0JSBub3QgZm91bmQhDQorZWNoby4NCitjYWxsIDpjb25mZXJyb3INCitleGl0IC9iIDENCispDQorDQorJXBjcmUydGVzdCUgLUMgbGlua3NpemUgPk5VTA0KK3NldCBsaW5rX3NpemU9JUVSUk9STEVWRUwlDQorJXBjcmUydGVzdCUgLUMgcGNyZTItOCA+TlVMDQorc2V0IHN1cHBvcnQ4PSVFUlJPUkxFVkVMJQ0KKyVwY3JlMnRlc3QlIC1DIHBjcmUyLTE2ID5OVUwNCitzZXQgc3VwcG9ydDE2PSVFUlJPUkxFVkVMJQ0KKyVwY3JlMnRlc3QlIC1DIHBjcmUyLTMyID5OVUwNCitzZXQgc3VwcG9ydDMyPSVFUlJPUkxFVkVMJQ0KKyVwY3JlMnRlc3QlIC1DIHVuaWNvZGUgPk5VTA0KK3NldCB1bmljb2RlPSVFUlJPUkxFVkVMJQ0KKyVwY3JlMnRlc3QlIC1DIGppdCA+TlVMDQorc2V0IGppdD0lRVJST1JMRVZFTCUNCislcGNyZTJ0ZXN0JSAtQyBiYWNrc2xhc2gtQyA+TlVMDQorc2V0IHN1cHBvcnRCU0M9JUVSUk9STEVWRUwlDQorDQoraWYgJXN1cHBvcnQ4JSBFUVUgMSAoDQoraWYgbm90IGV4aXN0IHRlc3RvdXQ4IG1kIHRlc3RvdXQ4DQoraWYgbm90IGV4aXN0IHRlc3RvdXRqaXQ4IG1kIHRlc3RvdXRqaXQ4DQorKQ0KKw0KK2lmICVzdXBwb3J0MTYlIEVRVSAxICgNCitpZiBub3QgZXhpc3QgdGVzdG91dDE2IG1kIHRlc3RvdXQxNg0KK2lmIG5vdCBleGlzdCB0ZXN0b3V0aml0MTYgbWQgdGVzdG91dGppdDE2DQorKQ0KKw0KK2lmICVzdXBwb3J0MTYlIEVRVSAxICgNCitpZiBub3QgZXhpc3QgdGVzdG91dDMyIG1kIHRlc3RvdXQzMg0KK2lmIG5vdCBleGlzdCB0ZXN0b3V0aml0MzIgbWQgdGVzdG91dGppdDMyDQorKQ0KKw0KK3NldCBkbzE9bm8NCitzZXQgZG8yPW5vDQorc2V0IGRvMz1ubw0KK3NldCBkbzQ9bm8NCitzZXQgZG81PW5vDQorc2V0IGRvNj1ubw0KK3NldCBkbzc9bm8NCitzZXQgZG84PW5vDQorc2V0IGRvOT1ubw0KK3NldCBkbzEwPW5vDQorc2V0IGRvMTE9bm8NCitzZXQgZG8xMj1ubw0KK3NldCBkbzEzPW5vDQorc2V0IGRvMTQ9bm8NCitzZXQgZG8xNT1ubw0KK3NldCBkbzE2PW5vDQorc2V0IGRvMTc9bm8NCitzZXQgZG8xOD1ubw0KK3NldCBkbzE5PW5vDQorc2V0IGRvMjA9bm8NCitzZXQgZG8yMT1ubw0KK3NldCBkbzIyPW5vDQorc2V0IGRvMjM9bm8NCitzZXQgYWxsPXllcw0KKw0KK2ZvciAlJWEgaW4gKCUqKSBkbyAoDQorICBzZXQgdmFsaWQ9bm8NCisgIGZvciAlJXYgaW4gKDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzKSBkbyBpZiAlJXYgPT0gJSVhIHNldCB2YWxpZD15ZXMNCisgIGlmICIhdmFsaWQhIiA9PSAieWVzIiAoDQorICAgIHNldCBkbyUlYT15ZXMNCisgICAgc2V0IGFsbD1ubw0KKykgZWxzZSAoDQorICAgIGVjaG8gSW52YWxpZCB0ZXN0IG51bWJlciAtICUlYSENCisgICAgICAgIGVjaG8gVXNhZ2UgJTAgWyB0ZXN0X251bWJlciBdIC4uLg0KKyAgICAgICAgZWNobyBXaGVyZSB0ZXN0X251bWJlciBpcyBvbmUgb3IgbW9yZSBvcHRpb25hbCB0ZXN0IG51bWJlcnMgMSB0aHJvdWdoIDIzLCBkZWZhdWx0IGlzIGFsbCB0ZXN0cy4NCisgICAgICAgIGV4aXQgL2IgMQ0KKykNCispDQorc2V0IGZhaWxlZD0ibm8iDQorDQoraWYgIiVhbGwlIiA9PSAieWVzIiAoDQorICBzZXQgZG8xPXllcw0KKyAgc2V0IGRvMj15ZXMNCisgIHNldCBkbzM9eWVzDQorICBzZXQgZG80PXllcw0KKyAgc2V0IGRvNT15ZXMNCisgIHNldCBkbzY9eWVzDQorICBzZXQgZG83PXllcw0KKyAgc2V0IGRvOD15ZXMNCisgIHNldCBkbzk9eWVzDQorICBzZXQgZG8xMD15ZXMNCisgIHNldCBkbzExPXllcw0KKyAgc2V0IGRvMTI9eWVzDQorICBzZXQgZG8xMz15ZXMNCisgIHNldCBkbzE0PXllcw0KKyAgc2V0IGRvMTU9eWVzDQorICBzZXQgZG8xNj15ZXMNCisgIHNldCBkbzE3PXllcw0KKyAgc2V0IGRvMTg9eWVzDQorICBzZXQgZG8xOT15ZXMNCisgIHNldCBkbzIwPXllcw0KKyAgc2V0IGRvMjE9eWVzDQorICBzZXQgZG8yMj15ZXMNCisgIHNldCBkbzIzPXllcw0KKykNCisNCitAZWNobyBSdW5UZXN0LmJhdCdzIHBjcmUydGVzdCBvdXRwdXQgaXMgd3JpdHRlbiB0byBuZXdseSBjcmVhdGVkIHN1YmZvbGRlcnMNCitAZWNobyBuYW1lZCB0ZXN0b3V0ezgsMTYsMzJ9IGFuZCB0ZXN0b3V0aml0ezgsMTYsMzJ9Lg0KK0BlY2hvLg0KKw0KK3NldCBtb2RlPQ0KK3NldCBiaXRzPTgNCisNCis6bmV4dE1vZGUNCitpZiAiJW1vZGUlIiA9PSAiIiAoDQorICBpZiAlc3VwcG9ydDglIEVRVSAwIGdvdG8gbW9kZVNraXANCisgIGVjaG8uDQorICBlY2hvIC0tLS0gVGVzdGluZyA4LWJpdCBsaWJyYXJ5IC0tLS0NCisgIGVjaG8uDQorKQ0KK2lmICIlbW9kZSUiID09ICItMTYiICgNCisgIGlmICVzdXBwb3J0MTYlIEVRVSAwIGdvdG8gbW9kZVNraXANCisgIGVjaG8uDQorICBlY2hvIC0tLS0gVGVzdGluZyAxNi1iaXQgbGlicmFyeSAtLS0tDQorICBlY2hvLg0KKykNCitpZiAiJW1vZGUlIiA9PSAiLTMyIiAoDQorICBpZiAlc3VwcG9ydDMyJSBFUVUgMCBnb3RvIG1vZGVTa2lwDQorICBlY2hvLg0KKyAgZWNobyAtLS0tIFRlc3RpbmcgMzItYml0IGxpYnJhcnkgLS0tLQ0KKyAgZWNoby4NCispDQoraWYgIiVkbzElIiA9PSAieWVzIiBjYWxsIDpkbzENCitpZiAiJWRvMiUiID09ICJ5ZXMiIGNhbGwgOmRvMg0KK2lmICIlZG8zJSIgPT0gInllcyIgY2FsbCA6ZG8zDQoraWYgIiVkbzQlIiA9PSAieWVzIiBjYWxsIDpkbzQNCitpZiAiJWRvNSUiID09ICJ5ZXMiIGNhbGwgOmRvNQ0KK2lmICIlZG82JSIgPT0gInllcyIgY2FsbCA6ZG82DQoraWYgIiVkbzclIiA9PSAieWVzIiBjYWxsIDpkbzcNCitpZiAiJWRvOCUiID09ICJ5ZXMiIGNhbGwgOmRvOA0KK2lmICIlZG85JSIgPT0gInllcyIgY2FsbCA6ZG85DQoraWYgIiVkbzEwJSIgPT0gInllcyIgY2FsbCA6ZG8xMA0KK2lmICIlZG8xMSUiID09ICJ5ZXMiIGNhbGwgOmRvMTENCitpZiAiJWRvMTIlIiA9PSAieWVzIiBjYWxsIDpkbzEyDQoraWYgIiVkbzEzJSIgPT0gInllcyIgY2FsbCA6ZG8xMw0KK2lmICIlZG8xNCUiID09ICJ5ZXMiIGNhbGwgOmRvMTQNCitpZiAiJWRvMTUlIiA9PSAieWVzIiBjYWxsIDpkbzE1DQoraWYgIiVkbzE2JSIgPT0gInllcyIgY2FsbCA6ZG8xNg0KK2lmICIlZG8xNyUiID09ICJ5ZXMiIGNhbGwgOmRvMTcNCitpZiAiJWRvMTglIiA9PSAieWVzIiBjYWxsIDpkbzE4DQoraWYgIiVkbzE5JSIgPT0gInllcyIgY2FsbCA6ZG8xOQ0KK2lmICIlZG8yMCUiID09ICJ5ZXMiIGNhbGwgOmRvMjANCitpZiAiJWRvMjElIiA9PSAieWVzIiBjYWxsIDpkbzIxDQoraWYgIiVkbzIyJSIgPT0gInllcyIgY2FsbCA6ZG8yMg0KK2lmICIlZG8yMyUiID09ICJ5ZXMiIGNhbGwgOmRvMjMNCis6bW9kZVNraXANCitpZiAiJW1vZGUlIiA9PSAiIiAoDQorICBzZXQgbW9kZT0tMTYNCisgIHNldCBiaXRzPTE2DQorICBnb3RvIG5leHRNb2RlDQorKQ0KK2lmICIlbW9kZSUiID09ICItMTYiICgNCisgIHNldCBtb2RlPS0zMg0KKyAgc2V0IGJpdHM9MzINCisgIGdvdG8gbmV4dE1vZGUNCispDQorDQorQHJlbSBJZiBtb2RlIGlzIC0zMiwgdGVzdGluZyBpcyBmaW5pc2hlZA0KK2lmICVmYWlsZWQlID09ICJ5ZXMiICgNCitlY2hvIEluIGFib3ZlIG91dHB1dCwgb25lIG9yIG1vcmUgb2YgdGhlIHZhcmlvdXMgdGVzdHMgZmFpbGVkIQ0KK2V4aXQgL2IgMQ0KKykNCitlY2hvIEFsbCBPSw0KK2dvdG8gOmVvZg0KKw0KKzpydW5zdWINCitAcmVtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUgcGNyZTJ0ZXN0IGFuZCBjb21wYXJlIHRoZSBvdXRwdXQNCitAcmVtIEFyZ3VtZW50cyBhcmUgYXMgZm9sbG93czoNCitAcmVtDQorQHJlbSAgICAgICAxID0gdGVzdCBudW1iZXINCitAcmVtICAgICAgIDIgPSBvdXRwdXRkaXINCitAcmVtICAgICAgIDMgPSB0ZXN0IG5hbWUgdXNlIGRvdWJsZSBxdW90ZXMNCitAcmVtICAgNCAtIDkgPSBwY3JlMnRlc3Qgb3B0aW9ucw0KKw0KK2lmIFslMV0gPT0gW10gKA0KKyAgZWNobyBNaXNzaW5nIHRlc3QgbnVtYmVyIGFyZ3VtZW50IQ0KKyAgZXhpdCAvYiAxDQorKQ0KKw0KK2lmIFslMl0gPT0gW10gKA0KKyAgZWNobyBNaXNzaW5nIG91dHB1dGRpciENCisgIGV4aXQgL2IgMQ0KKykNCisNCitpZiBbJTNdID09IFtdICgNCisgIGVjaG8gTWlzc2luZyB0ZXN0IG5hbWUgYXJndW1lbnQhDQorICBleGl0IC9iIDENCispDQorDQorc2V0IHRlc3RpbnB1dD10ZXN0aW5wdXQlMQ0KK3NldCB0ZXN0b3V0cHV0PXRlc3RvdXRwdXQlMQ0KK2lmIGV4aXN0ICVzcmNkaXIlXHRlc3RkYXRhXHdpbiV0ZXN0aW5wdXQlICgNCisgIHNldCB0ZXN0aW5wdXQ9d2ludGVzdGlucHV0JTENCisgIHNldCB0ZXN0b3V0cHV0PXdpbnRlc3RvdXRwdXQlMQ0KKykNCisNCitlY2hvIFRlc3QgJTE6ICUzDQorJXBjcmUydGVzdCUgJW1vZGUlICU0ICU1ICU2ICU3ICU4ICU5ICVzcmNkaXIlXHRlc3RkYXRhXCV0ZXN0aW5wdXQlID4lMiViaXRzJVwldGVzdG91dHB1dCUNCitpZiBlcnJvcmxldmVsIDEgKA0KKyAgZWNoby4gICAgICAgICAgZmFpbGVkIGV4ZWN1dGluZyBjb21tYW5kLWxpbmU6DQorICBlY2hvLiAgICAgICAgICAgICVwY3JlMnRlc3QlICVtb2RlJSAlNCAlNSAlNiAlNyAlOCAlOSAlc3JjZGlyJVx0ZXN0ZGF0YVwldGVzdGlucHV0JSBePiUyJWJpdHMlXCV0ZXN0b3V0cHV0JQ0KKyAgc2V0IGZhaWxlZD0ieWVzIg0KKyAgZ290byA6ZW9mDQorKQ0KKw0KK3NldCB0eXBlPQ0KK2lmIFslMV09PVs4XSAoDQorICBzZXQgdHlwZT0tJWJpdHMlDQorKQ0KK2lmIFslMV09PVsxMV0gKA0KKyAgc2V0IHR5cGU9LSViaXRzJQ0KKykNCitpZiBbJTFdPT1bMTJdICgNCisgIHNldCB0eXBlPS0lYml0cyUNCispDQoraWYgWyUxXT09WzE0XSAoDQorICBzZXQgdHlwZT0tJWJpdHMlDQorKQ0KKw0KK2ZjIC9uICVzcmNkaXIlXHRlc3RkYXRhXCV0ZXN0b3V0cHV0JSV0eXBlJSAlMiViaXRzJVwldGVzdG91dHB1dCUgPk5VTA0KKw0KK2lmIGVycm9ybGV2ZWwgMSAoDQorICBlY2hvLiAgICAgICAgICBmYWlsZWQgY29tcGFyaXNvbjogZmMgL24gJXNyY2RpciVcdGVzdGRhdGFcJXRlc3RvdXRwdXQlICUyJWJpdHMlXCV0ZXN0b3V0cHV0JQ0KKyAgaWYgWyUxXT09WzJdICgNCisgICAgZWNoby4NCisgICAgZWNobyAqKiBUZXN0IDIgcmVxdWlyZXMgYSBsb3Qgb2Ygc3RhY2suIFBDUkUyIGNhbiBiZSBjb25maWd1cmVkIHRvDQorICAgIGVjaG8gKiogdXNlIGhlYXAgZm9yIHJlY3Vyc2lvbi4gT3RoZXJ3aXNlLCB0byBwYXNzIFRlc3QgMg0KKyAgICBlY2hvICoqIHlvdSBnZW5lcmFsbHkgbmVlZCB0byBhbGxvY2F0ZSA4IG1iIHN0YWNrIHRvIFBDUkUyLg0KKyAgICBlY2hvICoqIFNlZSB0aGUgJ3BjcmUyc3RhY2snIHBhZ2UgZm9yIGEgZGlzY3Vzc2lvbiBvZiBQQ1JFMidzDQorICAgIGVjaG8gKiogc3RhY2sgdXNhZ2UuDQorICAgIGVjaG8uDQorKQ0KKyAgaWYgWyUxXT09WzNdICgNCisgICAgZWNoby4NCisgICAgZWNobyAqKiBUZXN0IDMgZmFpbHVyZSB1c3VhbGx5IG1lYW5zIGZyZW5jaCBsb2NhbGUgaXMgbm90DQorICAgIGVjaG8gKiogYXZhaWxhYmxlIG9uIHRoZSBzeXN0ZW0sIHJhdGhlciB0aGFuIGEgYnVnIG9yIHByb2JsZW0gd2l0aCBQQ1JFMi4NCisgICAgZWNoby4NCisgICAgZ290byA6ZW9mDQorKQ0KKw0KKyAgc2V0IGZhaWxlZD0ieWVzIg0KKyAgZ290byA6ZW9mDQorKQ0KKw0KK2VjaG8uICAgICAgICAgIFBhc3NlZC4NCitnb3RvIDplb2YNCisNCis6ZG8xDQorY2FsbCA6cnVuc3ViIDEgdGVzdG91dCAiTWFpbiBub24tVVRGLCBub24tVUNQIGZ1bmN0aW9uYWxpdHkgKENvbXBhdGlibGUgd2l0aCBQZXJsID49IDUuMTApIiAtcQ0KK2lmICVqaXQlIEVRVSAxIGNhbGwgOnJ1bnN1YiAxIHRlc3RvdXRqaXQgIlRlc3Qgd2l0aCBKSVQgT3ZlcnJpZGUiIC1xIC1qaXQNCitnb3RvIDplb2YNCisNCis6ZG8yDQorICBjYWxsIDpydW5zdWIgMiB0ZXN0b3V0ICJBUEksIGVycm9ycywgaW50ZXJuYWxzLCBhbmQgbm9uLVBlcmwgc3R1ZmYiIC1xDQorICBpZiAlaml0JSBFUVUgMSBjYWxsIDpydW5zdWIgMiB0ZXN0b3V0aml0ICJUZXN0IHdpdGggSklUIE92ZXJyaWRlIiAtcSAtaml0DQorZ290byA6ZW9mDQorDQorOmRvMw0KKyAgY2FsbCA6cnVuc3ViIDMgdGVzdG91dCAiTG9jYWxlLXNwZWNpZmljIGZlYXR1cmVzIiAtcQ0KKyAgaWYgJWppdCUgRVFVIDEgY2FsbCA6cnVuc3ViIDMgdGVzdG91dGppdCAiVGVzdCB3aXRoIEpJVCBPdmVycmlkZSIgLXEgLWppdA0KK2dvdG8gOmVvZg0KKw0KKzpkbzQNCitpZiAldW5pY29kZSUgRVFVIDAgKA0KKyAgZWNobyBUZXN0IDQgU2tpcHBlZCBkdWUgdG8gYWJzZW5jZSBvZiBVbmljb2RlIHN1cHBvcnQuDQorICBnb3RvIDplb2YNCispDQorICBjYWxsIDpydW5zdWIgNCB0ZXN0b3V0ICJVVEYtJWJpdHMlIGFuZCBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQgLSAoQ29tcGF0aWJsZSB3aXRoIFBlcmwgPj0gNS4xMCkiIC1xDQorICBpZiAlaml0JSBFUVUgMSBjYWxsIDpydW5zdWIgNCB0ZXN0b3V0aml0ICJUZXN0IHdpdGggSklUIE92ZXJyaWRlIiAtcSAtaml0DQorZ290byA6ZW9mDQorDQorOmRvNQ0KK2lmICV1bmljb2RlJSBFUVUgMCAoDQorICBlY2hvIFRlc3QgNSBTa2lwcGVkIGR1ZSB0byBhYnNlbmNlIG9mIFVuaWNvZGUgc3VwcG9ydC4NCisgIGdvdG8gOmVvZg0KKykNCisgIGNhbGwgOnJ1bnN1YiA1IHRlc3RvdXQgIkFQSSwgaW50ZXJuYWxzLCBhbmQgbm9uLVBlcmwgc3R1ZmYgZm9yIFVURi0lYml0cyUgYW5kIFVDUCIgLXENCisgIGlmICVqaXQlIEVRVSAxIGNhbGwgOnJ1bnN1YiA1IHRlc3RvdXRqaXQgIlRlc3Qgd2l0aCBKSVQgT3ZlcnJpZGUiIC1xIC1qaXQNCitnb3RvIDplb2YNCisNCis6ZG82DQorICBjYWxsIDpydW5zdWIgNiB0ZXN0b3V0ICJERkEgbWF0Y2hpbmcgbWFpbiBub24tVVRGLCBub24tVUNQIGZ1bmN0aW9uYWxpdHkiIC1xDQorZ290byA6ZW9mDQorDQorOmRvNw0KK2lmICV1bmljb2RlJSBFUVUgMCAoDQorICBlY2hvIFRlc3QgNyBTa2lwcGVkIGR1ZSB0byBhYnNlbmNlIG9mIFVuaWNvZGUgc3VwcG9ydC4NCisgIGdvdG8gOmVvZg0KKykNCisgIGNhbGwgOnJ1bnN1YiA3IHRlc3RvdXQgIkRGQSBtYXRjaGluZyB3aXRoIFVURi0lYml0cyUgYW5kIFVuaWNvZGUgcHJvcGVydHkgc3VwcG9ydCIgLXENCisgIGdvdG8gOmVvZg0KKw0KKzpkbzgNCitpZiBOT1QgJWxpbmtfc2l6ZSUgRVFVIDIgKA0KKyAgZWNobyBUZXN0IDggU2tpcHBlZCBiZWNhdXNlIGxpbmsgc2l6ZSBpcyBub3QgMi4NCisgIGdvdG8gOmVvZg0KKykNCitpZiAldW5pY29kZSUgRVFVIDAgKA0KKyAgZWNobyBUZXN0IDggU2tpcHBlZCBkdWUgdG8gYWJzZW5jZSBvZiBVbmljb2RlIHN1cHBvcnQuDQorICBnb3RvIDplb2YNCispDQorICBjYWxsIDpydW5zdWIgOCB0ZXN0b3V0ICJJbnRlcm5hbCBvZmZzZXRzIGFuZCBjb2RlIHNpemUgdGVzdHMiIC1xDQorZ290byA6ZW9mDQorDQorOmRvOQ0KK2lmIE5PVCAlYml0cyUgRVFVIDggKA0KKyAgZWNobyBUZXN0IDkgU2tpcHBlZCB3aGVuIHJ1bm5pbmcgMTYvMzItYml0IHRlc3RzLg0KKyAgZ290byA6ZW9mDQorKQ0KKyAgY2FsbCA6cnVuc3ViIDkgdGVzdG91dCAiU3BlY2lhbHMgZm9yIHRoZSBiYXNpYyA4LWJpdCBsaWJyYXJ5IiAtcQ0KKyAgaWYgJWppdCUgRVFVIDEgY2FsbCA6cnVuc3ViIDkgdGVzdG91dGppdCAiVGVzdCB3aXRoIEpJVCBPdmVycmlkZSIgLXEgLWppdA0KK2dvdG8gOmVvZg0KKw0KKzpkbzEwDQoraWYgTk9UICViaXRzJSBFUVUgOCAoDQorICBlY2hvIFRlc3QgMTAgU2tpcHBlZCB3aGVuIHJ1bm5pbmcgMTYvMzItYml0IHRlc3RzLg0KKyAgZ290byA6ZW9mDQorKQ0KK2lmICV1bmljb2RlJSBFUVUgMCAoDQorICBlY2hvIFRlc3QgMTAgU2tpcHBlZCBkdWUgdG8gYWJzZW5jZSBvZiBVbmljb2RlIHN1cHBvcnQuDQorICBnb3RvIDplb2YNCispDQorICBjYWxsIDpydW5zdWIgMTAgdGVzdG91dCAiU3BlY2lhbHMgZm9yIHRoZSA4LWJpdCBsaWJyYXJ5IHdpdGggVW5pY29kZSBzdXBwb3J0IiAtcQ0KKyAgaWYgJWppdCUgRVFVIDEgY2FsbCA6cnVuc3ViIDEwIHRlc3RvdXRqaXQgIlRlc3Qgd2l0aCBKSVQgT3ZlcnJpZGUiIC1xIC1qaXQNCitnb3RvIDplb2YNCisNCis6ZG8xMQ0KK2lmICViaXRzJSBFUVUgOCAoDQorICBlY2hvIFRlc3QgMTEgU2tpcHBlZCB3aGVuIHJ1bm5pbmcgOC1iaXQgdGVzdHMuDQorICBnb3RvIDplb2YNCispDQorICBjYWxsIDpydW5zdWIgMTEgdGVzdG91dCAiU3BlY2lhbHMgZm9yIHRoZSBiYXNpYyAxNi8zMi1iaXQgbGlicmFyeSIgLXENCisgIGlmICVqaXQlIEVRVSAxIGNhbGwgOnJ1bnN1YiAxMSB0ZXN0b3V0aml0ICJUZXN0IHdpdGggSklUIE92ZXJyaWRlIiAtcSAtaml0DQorZ290byA6ZW9mDQorDQorOmRvMTINCitpZiAlYml0cyUgRVFVIDggKA0KKyAgZWNobyBUZXN0IDEyIFNraXBwZWQgd2hlbiBydW5uaW5nIDgtYml0IHRlc3RzLg0KKyAgZ290byA6ZW9mDQorKQ0KK2lmICV1bmljb2RlJSBFUVUgMCAoDQorICBlY2hvIFRlc3QgMTIgU2tpcHBlZCBkdWUgdG8gYWJzZW5jZSBvZiBVbmljb2RlIHN1cHBvcnQuDQorICBnb3RvIDplb2YNCispDQorICBjYWxsIDpydW5zdWIgMTIgdGVzdG91dCAiU3BlY2lhbHMgZm9yIHRoZSAxNi8zMi1iaXQgbGlicmFyeSB3aXRoIFVuaWNvZGUgc3VwcG9ydCIgLXENCisgIGlmICVqaXQlIEVRVSAxIGNhbGwgOnJ1bnN1YiAxMiB0ZXN0b3V0aml0ICJUZXN0IHdpdGggSklUIE92ZXJyaWRlIiAtcSAtaml0DQorZ290byA6ZW9mDQorDQorOmRvMTMNCitpZiAlYml0cyUgRVFVIDggKA0KKyAgZWNobyBUZXN0IDEzIFNraXBwZWQgd2hlbiBydW5uaW5nIDgtYml0IHRlc3RzLg0KKyAgZ290byA6ZW9mDQorKQ0KKyAgY2FsbCA6cnVuc3ViIDEzIHRlc3RvdXQgIkRGQSBzcGVjaWFscyBmb3IgdGhlIGJhc2ljIDE2LzMyLWJpdCBsaWJyYXJ5IiAtcQ0KK2dvdG8gOmVvZg0KKw0KKzpkbzE0DQoraWYgJXVuaWNvZGUlIEVRVSAwICgNCisgIGVjaG8gVGVzdCAxNCBTa2lwcGVkIGR1ZSB0byBhYnNlbmNlIG9mIFVuaWNvZGUgc3VwcG9ydC4NCisgIGdvdG8gOmVvZg0KKykNCisgIGNhbGwgOnJ1bnN1YiAxNCB0ZXN0b3V0ICJERkEgc3BlY2lhbHMgZm9yIFVURiBhbmQgVUNQIHN1cHBvcnQiIC1xDQorICBnb3RvIDplb2YNCisNCis6ZG8xNQ0KK2NhbGwgOnJ1bnN1YiAxNSB0ZXN0b3V0ICJOb24tSklUIGxpbWl0cyBhbmQgb3RoZXIgbm9uX0pJVCB0ZXN0cyIgLXENCitnb3RvIDplb2YNCisNCis6ZG8xNg0KK2lmICVqaXQlIEVRVSAxICgNCisgIGVjaG8gVGVzdCAxNiBTa2lwcGVkIGR1ZSB0byBwcmVzZW5jZSBvZiBKSVQgc3VwcG9ydC4NCisgIGdvdG8gOmVvZg0KKykNCisgIGNhbGwgOnJ1bnN1YiAxNiB0ZXN0b3V0ICJKSVQtc3BlY2lmaWMgZmVhdHVyZXMgd2hlbiBKSVQgaXMgbm90IGF2YWlsYWJsZSIgLXENCitnb3RvIDplb2YNCisNCis6ZG8xNw0KK2lmICVqaXQlIEVRVSAwICgNCisgIGVjaG8gVGVzdCAxNyBTa2lwcGVkIGR1ZSB0byBhYnNlbmNlIG9mIEpJVCBzdXBwb3J0Lg0KKyAgZ290byA6ZW9mDQorKQ0KKyAgY2FsbCA6cnVuc3ViIDE3IHRlc3RvdXQgIkpJVC1zcGVjaWZpYyBmZWF0dXJlcyB3aGVuIEpJVCBpcyBhdmFpbGFibGUiIC1xDQorZ290byA6ZW9mDQorDQorOmRvMTgNCitpZiAlYml0cyUgRVFVIDE2ICgNCisgIGVjaG8gVGVzdCAxOCBTa2lwcGVkIHdoZW4gcnVubmluZyAxNi1iaXQgdGVzdHMuDQorICBnb3RvIDplb2YNCispDQoraWYgJWJpdHMlIEVRVSAzMiAoDQorICBlY2hvIFRlc3QgMTggU2tpcHBlZCB3aGVuIHJ1bm5pbmcgMzItYml0IHRlc3RzLg0KKyAgZ290byA6ZW9mDQorKQ0KKyAgY2FsbCA6cnVuc3ViIDE4IHRlc3RvdXQgIlBPU0lYIGludGVyZmFjZSwgZXhjbHVkaW5nIFVURi04IGFuZCBVQ1AiIC1xDQorZ290byA6ZW9mDQorDQorOmRvMTkNCitpZiAlYml0cyUgRVFVIDE2ICgNCisgIGVjaG8gVGVzdCAxOSBTa2lwcGVkIHdoZW4gcnVubmluZyAxNi1iaXQgdGVzdHMuDQorICBnb3RvIDplb2YNCispDQoraWYgJWJpdHMlIEVRVSAzMiAoDQorICBlY2hvIFRlc3QgMTkgU2tpcHBlZCB3aGVuIHJ1bm5pbmcgMzItYml0IHRlc3RzLg0KKyAgZ290byA6ZW9mDQorKQ0KK2lmICV1bmljb2RlJSBFUVUgMCAoDQorICBlY2hvIFRlc3QgMTkgU2tpcHBlZCBkdWUgdG8gYWJzZW5jZSBvZiBVbmljb2RlIHN1cHBvcnQuDQorICBnb3RvIDplb2YNCispDQorICBjYWxsIDpydW5zdWIgMTkgdGVzdG91dCAiUE9TSVggaW50ZXJmYWNlIHdpdGggVVRGLTggYW5kIFVDUCIgLXENCitnb3RvIDplb2YNCisNCis6ZG8yMA0KK2NhbGwgOnJ1bnN1YiAyMCB0ZXN0b3V0ICJTZXJpYWxpemF0aW9uIHRlc3RzIiAtcQ0KK2dvdG8gOmVvZg0KKw0KKzpkbzIxDQoraWYgJXN1cHBvcnRCU0MlIEVRVSAwICgNCisgIGVjaG8gVGVzdCAyMSBTa2lwcGVkIGR1ZSB0byBhYnNlbmNlIG9mIGJhY2tzbGFzaC1DIHN1cHBvcnQuDQorICBnb3RvIDplb2YNCispDQorICBjYWxsIDpydW5zdWIgMjEgdGVzdG91dCAiQmFja3NsYXNoLUMgdGVzdHMgd2l0aG91dCBVVEYiIC1xDQorICBjYWxsIDpydW5zdWIgMjEgdGVzdG91dCAiQmFja3NsYXNoLUMgdGVzdHMgd2l0aG91dCBVVEYgKERGQSkiIC1xIC1kZmENCisgIGlmICVqaXQlIEVRVSAxIGNhbGwgOnJ1bnN1YiAyMSB0ZXN0b3V0aml0ICJUZXN0IHdpdGggSklUIE92ZXJyaWRlIiAtcSAtaml0DQorZ290byA6ZW9mDQorDQorOmRvMjINCitpZiAlc3VwcG9ydEJTQyUgRVFVIDAgKA0KKyAgZWNobyBUZXN0IDIyIFNraXBwZWQgZHVlIHRvIGFic2VuY2Ugb2YgYmFja3NsYXNoLUMgc3VwcG9ydC4NCisgIGdvdG8gOmVvZg0KKykNCitpZiAldW5pY29kZSUgRVFVIDAgKA0KKyAgZWNobyBUZXN0IDIyIFNraXBwZWQgZHVlIHRvIGFic2VuY2Ugb2YgVW5pY29kZSBzdXBwb3J0Lg0KKyAgZ290byA6ZW9mDQorKQ0KKyAgY2FsbCA6cnVuc3ViIDIyIHRlc3RvdXQgIkJhY2tzbGFzaC1DIHRlc3RzIHdpdGggVVRGIiAtcQ0KKyAgaWYgJWppdCUgRVFVIDEgY2FsbCA6cnVuc3ViIDIyIHRlc3RvdXRqaXQgIlRlc3Qgd2l0aCBKSVQgT3ZlcnJpZGUiIC1xIC1qaXQNCitnb3RvIDplb2YNCisNCis6ZG8yMw0KK2lmICVzdXBwb3J0QlNDJSBFUVUgMSAoDQorICBlY2hvIFRlc3QgMjMgU2tpcHBlZCBkdWUgdG8gcHJlc2VuY2Ugb2YgYmFja3NsYXNoLUMgc3VwcG9ydC4NCisgIGdvdG8gOmVvZg0KKykNCisgIGNhbGwgOnJ1bnN1YiAyMyB0ZXN0b3V0ICJCYWNrc2xhc2gtQyBkaXNhYmxlZCB0ZXN0IiAtcQ0KK2dvdG8gOmVvZg0KKw0KKzpjb25mZXJyb3INCitAZWNoby4NCitAZWNobyBFaXRoZXIgeW91ciBidWlsZCBpcyBpbmNvbXBsZXRlIG9yIHlvdSBoYXZlIGEgY29uZmlndXJhdGlvbiBlcnJvci4NCitAZWNoby4NCitAZWNobyBJZiBjb25maWd1cmVkIHdpdGggY21ha2UgYW5kIGV4ZWN1dGVkIHZpYSAibWFrZSB0ZXN0IiBvciB0aGUgTVNWQyAiUlVOX1RFU1RTIg0KK0BlY2hvIHByb2plY3QsIHBjcmUyX3Rlc3QuYmF0IGRlZmluZXMgdmFyaWFibGVzIGFuZCBhdXRvbWF0aWNhbGx5IGNhbGxzIFJ1blRlc3QuYmF0Lg0KK0BlY2hvIEZvciBtYW51YWwgdGVzdGluZyBvZiBhbGwgYXZhaWxhYmxlIGZlYXR1cmVzLCBhZnRlciBjb25maWd1cmluZyB3aXRoIGNtYWtlDQorQGVjaG8gYW5kIGJ1aWxkaW5nLCB5b3UgY2FuIHJ1biB0aGUgYnVpbHQgcGNyZTJfdGVzdC5iYXQuIEZvciBiZXN0IHJlc3VsdHMgd2l0aA0KK0BlY2hvIGNtYWtlIGJ1aWxkcyBhbmQgdGVzdHMgYXZvaWQgZGlyZWN0b3JpZXMgd2l0aCBmdWxsIHBhdGggbmFtZXMgdGhhdCBpbmNsdWRlDQorQGVjaG8gc3BhY2VzIGZvciBzb3VyY2Ugb3IgYnVpbGQuDQorQGVjaG8uDQorQGVjaG8gT3RoZXJ3aXNlLCBpZiB0aGUgYnVpbGQgZGlyIGlzIGluIGEgc3ViZGlyIG9mIHRoZSBzb3VyY2UgZGlyLCB0ZXN0ZGF0YSBuZWVkZWQNCitAZWNobyBmb3IgaW5wdXQgYW5kIHZlcmlmaWNhdGlvbiBzaG91bGQgYmUgZm91bmQgYXV0b21hdGljYWxseSB3aGVuIChmcm9tIHRoZQ0KK0BlY2hvIGxvY2F0aW9uIG9mIHRoZSB0aGUgYnVpbHQgZXhlcykgeW91IGNhbGwgUnVuVGVzdC5iYXQuIEJ5IGRlZmF1bHQgUnVuVGVzdC5iYXQNCitAZWNobyBydW5zIGFsbCB0ZXN0cyBjb21wYXRpYmxlIHdpdGggdGhlIGxpbmtlZCBwY3JlMiBsaWJyYXJ5IGJ1dCBpdCBjYW4gYmUgZ2l2ZW4NCitAZWNobyBhIHRlc3QgbnVtYmVyIGFzIGFuIGFyZ3VtZW50Lg0KK0BlY2hvLg0KK0BlY2hvIElmIHRoZSBidWlsZCBkaXIgaXMgbm90IHVuZGVyIHRoZSBzb3VyY2UgZGlyIHlvdSBjYW4gZWl0aGVyIGNvcHkgeW91ciBleGVzDQorQGVjaG8gdG8gdGhlIHNvdXJjZSBmb2xkZXIgb3IgY29weSBSdW5UZXN0LmJhdCBhbmQgdGhlIHRlc3RkYXRhIGZvbGRlciB0byB0aGUNCitAZWNobyBsb2NhdGlvbiBvZiB5b3VyIGJ1aWx0IGV4ZXMgYW5kIHRoZW4gcnVuIFJ1blRlc3QuYmF0Lg0KK0BlY2hvLg0KK2dvdG8gOmVvZg0KZGlmZiAtLWdpdCBhL2Rpc3QyL2FjbG9jYWwubTQgYi9kaXN0Mi9hY2xvY2FsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYzljZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9hY2xvY2FsLm00CkBAIC0wLDAgKzEsMTQ5NSBAQAorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTUgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK200X2lmbmRlZihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbbTRfZGVmdW4oW19BTV9DT05GSUdfTUFDUk9fRElSU10sIFtdKW00X2RlZnVuKFtBQ19DT05GSUdfTUFDUk9fRElSU10sIFtfQU1fQ09ORklHX01BQ1JPX0RJUlMoJEApXSldKQorbTRfaWZuZGVmKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSwKKyAgW200X2NvcHkoW200X1BBQ0tBR0VfVkVSU0lPTl0sIFtBQ19BVVRPQ09ORl9WRVJTSU9OXSldKWRubAorbTRfaWYobTRfZGVmbihbQUNfQVVUT0NPTkZfVkVSU0lPTl0pLCBbMi42OV0sLAorW200X3dhcm5pbmcoW3RoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGZvciBhdXRvY29uZiAyLjY5LgorWW91IGhhdmUgYW5vdGhlciB2ZXJzaW9uIG9mIGF1dG9jb25mLiAgSXQgbWF5IHdvcmssIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0by4KK0lmIHlvdSBoYXZlIHByb2JsZW1zLCB5b3UgbWF5IG5lZWQgdG8gcmVnZW5lcmF0ZSB0aGUgYnVpbGQgc3lzdGVtIGVudGlyZWx5LgorVG8gZG8gc28sIHVzZSB0aGUgcHJvY2VkdXJlIGRvY3VtZW50ZWQgYnkgdGhlIHBhY2thZ2UsIHR5cGljYWxseSAnYXV0b3JlY29uZicuXSldKQorCitkbmwgcGtnLm00IC0gTWFjcm9zIHRvIGxvY2F0ZSBhbmQgdXRpbGlzZSBwa2ctY29uZmlnLiAgIC0qLSBBdXRvY29uZiAtKi0KK2RubCBzZXJpYWwgMTEgKHBrZy1jb25maWctMC4yOSkKK2RubAorZG5sIENvcHlyaWdodCDCqSAyMDA0IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QG5ldHNwbGl0LmNvbT4uCitkbmwgQ29weXJpZ2h0IMKpIDIwMTItMjAxNSBEYW4gTmljaG9sc29uIDxkYm4ubGlzdHNAZ21haWwuY29tPgorZG5sCitkbmwgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2RubCBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorZG5sIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCitkbmwgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KK2RubAorZG5sIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKK2RubCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitkbmwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorZG5sIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KK2RubAorZG5sIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitkbmwgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKK2RubCBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEKK2RubCAwMjExMS0xMzA3LCBVU0EuCitkbmwKK2RubCBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CitkbmwgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCitkbmwgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKK2RubCB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0CitkbmwgcHJvZ3JhbS4KKworZG5sIFBLR19QUkVSRVEoTUlOLVZFUlNJT04pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaW5jZTogMC4yOQorZG5sCitkbmwgVmVyaWZ5IHRoYXQgdGhlIHZlcnNpb24gb2YgdGhlIHBrZy1jb25maWcgbWFjcm9zIGFyZSBhdCBsZWFzdAorZG5sIE1JTi1WRVJTSU9OLiBVbmxpa2UgUEtHX1BST0dfUEtHX0NPTkZJRywgd2hpY2ggY2hlY2tzIHRoZSB1c2VyJ3MKK2RubCBpbnN0YWxsZWQgdmVyc2lvbiBvZiBwa2ctY29uZmlnLCB0aGlzIGNoZWNrcyB0aGUgZGV2ZWxvcGVyJ3MgdmVyc2lvbgorZG5sIG9mIHBrZy5tNCB3aGVuIGdlbmVyYXRpbmcgY29uZmlndXJlLgorZG5sCitkbmwgVG8gZW5zdXJlIHRoYXQgdGhpcyBtYWNybyBpcyBkZWZpbmVkLCBhbHNvIGFkZDoKK2RubCBtNF9pZm5kZWYoW1BLR19QUkVSRVFdLAorZG5sICAgICBbbTRfZmF0YWwoW211c3QgaW5zdGFsbCBwa2ctY29uZmlnIDAuMjkgb3IgbGF0ZXIgYmVmb3JlIHJ1bm5pbmcgYXV0b2NvbmYvYXV0b2dlbl0pXSkKK2RubAorZG5sIFNlZSB0aGUgIlNpbmNlIiBjb21tZW50IGZvciBlYWNoIG1hY3JvIHlvdSB1c2UgdG8gc2VlIHdoYXQgdmVyc2lvbgorZG5sIG9mIHRoZSBtYWNyb3MgeW91IHJlcXVpcmUuCittNF9kZWZ1bihbUEtHX1BSRVJFUV0sCitbbTRfZGVmaW5lKFtQS0dfTUFDUk9TX1ZFUlNJT05dLCBbMC4yOV0pCittNF9pZihtNF92ZXJzaW9uX2NvbXBhcmUoUEtHX01BQ1JPU19WRVJTSU9OLCBbJDFdKSwgLTEsCisgICAgW200X2ZhdGFsKFtwa2cubTQgdmVyc2lvbiAkMSBvciBoaWdoZXIgaXMgcmVxdWlyZWQgYnV0IF1QS0dfTUFDUk9TX1ZFUlNJT05bIGZvdW5kXSldKQorXSlkbmwgUEtHX1BSRVJFUQorCitkbmwgUEtHX1BST0dfUEtHX0NPTkZJRyhbTUlOLVZFUlNJT05dKQorZG5sIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaW5jZTogMC4xNgorZG5sCitkbmwgU2VhcmNoIGZvciB0aGUgcGtnLWNvbmZpZyB0b29sIGFuZCBzZXQgdGhlIFBLR19DT05GSUcgdmFyaWFibGUgdG8KK2RubCBmaXJzdCBmb3VuZCBpbiB0aGUgcGF0aC4gQ2hlY2tzIHRoYXQgdGhlIHZlcnNpb24gb2YgcGtnLWNvbmZpZyBmb3VuZAorZG5sIGlzIGF0IGxlYXN0IE1JTi1WRVJTSU9OLiBJZiBNSU4tVkVSU0lPTiBpcyBub3Qgc3BlY2lmaWVkLCAwLjkuMCBpcworZG5sIHVzZWQgc2luY2UgdGhhdCdzIHRoZSBmaXJzdCB2ZXJzaW9uIHdoZXJlIG1vc3QgY3VycmVudCBmZWF0dXJlcyBvZgorZG5sIHBrZy1jb25maWcgZXhpc3RlZC4KK0FDX0RFRlVOKFtQS0dfUFJPR19QS0dfQ09ORklHXSwKK1ttNF9wYXR0ZXJuX2ZvcmJpZChbXl8/UEtHX1tBLVpfXSskXSkKK200X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHKF8oUEFUSHxMSUJESVJ8U1lTUk9PVF9ESVJ8QUxMT1dfU1lTVEVNXyhDRkxBR1N8TElCUykpKT8kXSkKK200X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHXyhESVNBQkxFX1VOSU5TVEFMTEVEfFRPUF9CVUlMRF9ESVJ8REVCVUdfU1BFVykkXSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUddLCBbcGF0aCB0byBwa2ctY29uZmlnIHV0aWxpdHldKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR19QQVRIXSwgW2RpcmVjdG9yaWVzIHRvIGFkZCB0byBwa2ctY29uZmlnJ3Mgc2VhcmNoIHBhdGhdKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR19MSUJESVJdLCBbcGF0aCBvdmVycmlkaW5nIHBrZy1jb25maWcncyBidWlsdC1pbiBzZWFyY2ggcGF0aF0pCisKK2lmIHRlc3QgIngkYWNfY3ZfZW52X1BLR19DT05GSUdfc2V0IiAhPSAieHNldCI7IHRoZW4KKwlBQ19QQVRIX1RPT0woW1BLR19DT05GSUddLCBbcGtnLWNvbmZpZ10pCitmaQoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisJX3BrZ19taW5fdmVyc2lvbj1tNF9kZWZhdWx0KFskMV0sIFswLjkuMF0pCisJQUNfTVNHX0NIRUNLSU5HKFtwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb25dKQorCWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgorCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCWVsc2UKKwkJQUNfTVNHX1JFU1VMVChbbm9dKQorCQlQS0dfQ09ORklHPSIiCisJZmkKK2ZpW11kbmwKK10pZG5sIFBLR19QUk9HX1BLR19DT05GSUcKKworZG5sIFBLR19DSEVDS19FWElTVFMoTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2luY2U6IDAuMTgKK2RubAorZG5sIENoZWNrIHRvIHNlZSB3aGV0aGVyIGEgcGFydGljdWxhciBzZXQgb2YgbW9kdWxlcyBleGlzdHMuIFNpbWlsYXIgdG8KK2RubCBQS0dfQ0hFQ0tfTU9EVUxFUygpLCBidXQgZG9lcyBub3Qgc2V0IHZhcmlhYmxlcyBvciBwcmludCBlcnJvcnMuCitkbmwKK2RubCBQbGVhc2UgcmVtZW1iZXIgdGhhdCBtNCBleHBhbmRzIEFDX1JFUVVJUkUoW1BLR19QUk9HX1BLR19DT05GSUddKQorZG5sIG9ubHkgYXQgdGhlIGZpcnN0IG9jY3VyZW5jZSBpbiBjb25maWd1cmUuYWMsIHNvIGlmIHRoZSBmaXJzdCBwbGFjZQorZG5sIGl0J3MgY2FsbGVkIG1pZ2h0IGJlIHNraXBwZWQgKHN1Y2ggYXMgaWYgaXQgaXMgd2l0aGluIGFuICJpZiIsIHlvdQorZG5sIGhhdmUgdG8gY2FsbCBQS0dfQ0hFQ0tfRVhJU1RTIG1hbnVhbGx5CitBQ19ERUZVTihbUEtHX0NIRUNLX0VYSVNUU10sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyIgJiYgXAorICAgIEFDX1JVTl9MT0coWyRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzICIkMSJdKTsgdGhlbgorICBtNF9kZWZhdWx0KFskMl0sIFs6XSkKK200X2lmdmFsbihbJDNdLCBbZWxzZQorICAkM10pZG5sCitmaV0pCisKK2RubCBfUEtHX0NPTkZJRyhbVkFSSUFCTEVdLCBbQ09NTUFORF0sIFtNT0RVTEVTXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBJbnRlcm5hbCB3cmFwcGVyIGNhbGxpbmcgcGtnLWNvbmZpZyB2aWEgUEtHX0NPTkZJRyBhbmQgc2V0dGluZworZG5sIHBrZ19mYWlsZWQgYmFzZWQgb24gdGhlIHJlc3VsdC4KK200X2RlZmluZShbX1BLR19DT05GSUddLAorW2lmIHRlc3QgLW4gIiQkMSI7IHRoZW4KKyAgICBwa2dfY3ZfW10kMT0iJCQxIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgUEtHX0NIRUNLX0VYSVNUUyhbJDNdLAorICAgICAgICAgICAgICAgICAgICAgW3BrZ19jdl9bXSQxPWAkUEtHX0NPTkZJRyAtLVtdJDIgIiQzIiAyPi9kZXYvbnVsbGAKKwkJICAgICAgdGVzdCAieCQ/IiAhPSAieDAiICYmIHBrZ19mYWlsZWQ9eWVzIF0sCisJCSAgICAgW3BrZ19mYWlsZWQ9eWVzXSkKKyBlbHNlCisgICAgcGtnX2ZhaWxlZD11bnRyaWVkCitmaVtdZG5sCitdKWRubCBfUEtHX0NPTkZJRworCitkbmwgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgSW50ZXJuYWwgY2hlY2sgdG8gc2VlIGlmIHBrZy1jb25maWcgc3VwcG9ydHMgc2hvcnQgZXJyb3JzLgorQUNfREVGVU4oW19QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRF0sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCitpZiAkUEtHX0NPTkZJRyAtLWF0bGVhc3QtcGtnY29uZmlnLXZlcnNpb24gMC4yMDsgdGhlbgorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9eWVzCitlbHNlCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD1ubworZmlbXWRubAorXSlkbmwgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisKKworZG5sIFBLR19DSEVDS19NT0RVTEVTKFZBUklBQkxFLVBSRUZJWCwgTU9EVUxFUywgW0FDVElPTi1JRi1GT1VORF0sCitkbmwgICBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaW5jZTogMC40LjAKK2RubAorZG5sIE5vdGUgdGhhdCBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoZSBmaXJzdCBjYWxsIHRvCitkbmwgUEtHX0NIRUNLX01PRFVMRVMgbWlnaHQgbm90IGhhcHBlbiwgeW91IHNob3VsZCBiZSBzdXJlIHRvIGluY2x1ZGUgYW4KK2RubCBleHBsaWNpdCBjYWxsIHRvIFBLR19QUk9HX1BLR19DT05GSUcgaW4geW91ciBjb25maWd1cmUuYWMKK0FDX0RFRlVOKFtQS0dfQ0hFQ0tfTU9EVUxFU10sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCitBQ19BUkdfVkFSKFskMV1bX0NGTEFHU10sIFtDIGNvbXBpbGVyIGZsYWdzIGZvciAkMSwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKK0FDX0FSR19WQVIoWyQxXVtfTElCU10sIFtsaW5rZXIgZmxhZ3MgZm9yICQxLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubAorCitwa2dfZmFpbGVkPW5vCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCisKK19QS0dfQ09ORklHKFskMV1bX0NGTEFHU10sIFtjZmxhZ3NdLCBbJDJdKQorX1BLR19DT05GSUcoWyQxXVtfTElCU10sIFtsaWJzXSwgWyQyXSkKKworbTRfZGVmaW5lKFtfUEtHX1RFWFRdLCBbQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyAkMVtdX0NGTEFHUworYW5kICQxW11fTElCUyB0byBhdm9pZCB0aGUgbmVlZCB0byBjYWxsIHBrZy1jb25maWcuCitTZWUgdGhlIHBrZy1jb25maWcgbWFuIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy5dKQorCitpZiB0ZXN0ICRwa2dfZmFpbGVkID0geWVzOyB0aGVuCisgICAJQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICBfUEtHX1NIT1JUX0VSUk9SU19TVVBQT1JURUQKKyAgICAgICAgaWYgdGVzdCAkX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkID0geWVzOyB0aGVuCisJICAgICAgICAkMVtdX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tc2hvcnQtZXJyb3JzIC0tcHJpbnQtZXJyb3JzIC0tY2ZsYWdzIC0tbGlicyAiJDIiIDI+JjFgCisgICAgICAgIGVsc2UgCisJICAgICAgICAkMVtdX1BLR19FUlJPUlM9YCRQS0dfQ09ORklHIC0tcHJpbnQtZXJyb3JzIC0tY2ZsYWdzIC0tbGlicyAiJDIiIDI+JjFgCisgICAgICAgIGZpCisJIyBQdXQgdGhlIG5hc3R5IGVycm9yIG1lc3NhZ2UgaW4gY29uZmlnLmxvZyB3aGVyZSBpdCBiZWxvbmdzCisJZWNobyAiJCQxW11fUEtHX0VSUk9SUyIgPiZBU19NRVNTQUdFX0xPR19GRAorCisJbTRfZGVmYXVsdChbJDRdLCBbQUNfTVNHX0VSUk9SKAorW1BhY2thZ2UgcmVxdWlyZW1lbnRzICgkMikgd2VyZSBub3QgbWV0OgorCiskJDFfUEtHX0VSUk9SUworCitDb25zaWRlciBhZGp1c3RpbmcgdGhlIFBLR19DT05GSUdfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiB5b3UKK2luc3RhbGxlZCBzb2Z0d2FyZSBpbiBhIG5vbi1zdGFuZGFyZCBwcmVmaXguCisKK19QS0dfVEVYVF0pW11kbmwKKyAgICAgICAgXSkKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCUFDX01TR19SRVNVTFQoW25vXSkKKwltNF9kZWZhdWx0KFskNF0sIFtBQ19NU0dfRkFJTFVSRSgKK1tUaGUgcGtnLWNvbmZpZyBzY3JpcHQgY291bGQgbm90IGJlIGZvdW5kIG9yIGlzIHRvbyBvbGQuICBNYWtlIHN1cmUgaXQKK2lzIGluIHlvdXIgUEFUSCBvciBzZXQgdGhlIFBLR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIGZ1bGwKK3BhdGggdG8gcGtnLWNvbmZpZy4KKworX1BLR19URVhUCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+Ll0pW11kbmwKKyAgICAgICAgXSkKK2Vsc2UKKwkkMVtdX0NGTEFHUz0kcGtnX2N2X1tdJDFbXV9DRkxBR1MKKwkkMVtdX0xJQlM9JHBrZ19jdl9bXSQxW11fTElCUworICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCSQzCitmaVtdZG5sCitdKWRubCBQS0dfQ0hFQ0tfTU9EVUxFUworCisKK2RubCBQS0dfQ0hFQ0tfTU9EVUxFU19TVEFUSUMoVkFSSUFCTEUtUFJFRklYLCBNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwKK2RubCAgIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaW5jZTogMC4yOQorZG5sCitkbmwgQ2hlY2tzIGZvciBleGlzdGVuY2Ugb2YgTU9EVUxFUyBhbmQgZ2F0aGVycyBpdHMgYnVpbGQgZmxhZ3Mgd2l0aAorZG5sIHN0YXRpYyBsaWJyYXJpZXMgZW5hYmxlZC4gU2V0cyBWQVJJQUJMRS1QUkVGSVhfQ0ZMQUdTIGZyb20gLS1jZmxhZ3MKK2RubCBhbmQgVkFSSUFCTEUtUFJFRklYX0xJQlMgZnJvbSAtLWxpYnMuCitkbmwKK2RubCBOb3RlIHRoYXQgaWYgdGhlcmUgaXMgYSBwb3NzaWJpbGl0eSB0aGUgZmlyc3QgY2FsbCB0bworZG5sIFBLR19DSEVDS19NT0RVTEVTX1NUQVRJQyBtaWdodCBub3QgaGFwcGVuLCB5b3Ugc2hvdWxkIGJlIHN1cmUgdG8KK2RubCBpbmNsdWRlIGFuIGV4cGxpY2l0IGNhbGwgdG8gUEtHX1BST0dfUEtHX0NPTkZJRyBpbiB5b3VyCitkbmwgY29uZmlndXJlLmFjLgorQUNfREVGVU4oW1BLR19DSEVDS19NT0RVTEVTX1NUQVRJQ10sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCitfc2F2ZV9QS0dfQ09ORklHPSRQS0dfQ09ORklHCitQS0dfQ09ORklHPSIkUEtHX0NPTkZJRyAtLXN0YXRpYyIKK1BLR19DSEVDS19NT0RVTEVTKCRAKQorUEtHX0NPTkZJRz0kX3NhdmVfUEtHX0NPTkZJR1tdZG5sCitdKWRubCBQS0dfQ0hFQ0tfTU9EVUxFU19TVEFUSUMKKworCitkbmwgUEtHX0lOU1RBTExESVIoW0RJUkVDVE9SWV0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZG5sIFNpbmNlOiAwLjI3CitkbmwKK2RubCBTdWJzdGl0dXRlcyB0aGUgdmFyaWFibGUgcGtnY29uZmlnZGlyIGFzIHRoZSBsb2NhdGlvbiB3aGVyZSBhIG1vZHVsZQorZG5sIHNob3VsZCBpbnN0YWxsIHBrZy1jb25maWcgLnBjIGZpbGVzLiBCeSBkZWZhdWx0IHRoZSBkaXJlY3RvcnkgaXMKK2RubCAkbGliZGlyL3BrZ2NvbmZpZywgYnV0IHRoZSBkZWZhdWx0IGNhbiBiZSBjaGFuZ2VkIGJ5IHBhc3NpbmcKK2RubCBESVJFQ1RPUlkuIFRoZSB1c2VyIGNhbiBvdmVycmlkZSB0aHJvdWdoIHRoZSAtLXdpdGgtcGtnY29uZmlnZGlyCitkbmwgcGFyYW1ldGVyLgorQUNfREVGVU4oW1BLR19JTlNUQUxMRElSXSwKK1ttNF9wdXNoZGVmKFtwa2dfZGVmYXVsdF0sIFttNF9kZWZhdWx0KFskMV0sIFsnJHtsaWJkaXJ9L3BrZ2NvbmZpZyddKV0pCittNF9wdXNoZGVmKFtwa2dfZGVzY3JpcHRpb25dLAorICAgIFtwa2ctY29uZmlnIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgQDw6QF1wa2dfZGVmYXVsdFtAOj5AXSkKK0FDX0FSR19XSVRIKFtwa2djb25maWdkaXJdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBrZ2NvbmZpZ2Rpcl0sIHBrZ19kZXNjcmlwdGlvbildLCwKKyAgICBbd2l0aF9wa2djb25maWdkaXI9XXBrZ19kZWZhdWx0KQorQUNfU1VCU1QoW3BrZ2NvbmZpZ2Rpcl0sIFskd2l0aF9wa2djb25maWdkaXJdKQorbTRfcG9wZGVmKFtwa2dfZGVmYXVsdF0pCittNF9wb3BkZWYoW3BrZ19kZXNjcmlwdGlvbl0pCitdKWRubCBQS0dfSU5TVEFMTERJUgorCisKK2RubCBQS0dfTk9BUkNIX0lOU1RBTExESVIoW0RJUkVDVE9SWV0pCitkbmwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RubCBTaW5jZTogMC4yNworZG5sCitkbmwgU3Vic3RpdHV0ZXMgdGhlIHZhcmlhYmxlIG5vYXJjaF9wa2djb25maWdkaXIgYXMgdGhlIGxvY2F0aW9uIHdoZXJlIGEKK2RubCBtb2R1bGUgc2hvdWxkIGluc3RhbGwgYXJjaC1pbmRlcGVuZGVudCBwa2ctY29uZmlnIC5wYyBmaWxlcy4gQnkKK2RubCBkZWZhdWx0IHRoZSBkaXJlY3RvcnkgaXMgJGRhdGFkaXIvcGtnY29uZmlnLCBidXQgdGhlIGRlZmF1bHQgY2FuIGJlCitkbmwgY2hhbmdlZCBieSBwYXNzaW5nIERJUkVDVE9SWS4gVGhlIHVzZXIgY2FuIG92ZXJyaWRlIHRocm91Z2ggdGhlCitkbmwgLS13aXRoLW5vYXJjaC1wa2djb25maWdkaXIgcGFyYW1ldGVyLgorQUNfREVGVU4oW1BLR19OT0FSQ0hfSU5TVEFMTERJUl0sCitbbTRfcHVzaGRlZihbcGtnX2RlZmF1bHRdLCBbbTRfZGVmYXVsdChbJDFdLCBbJyR7ZGF0YWRpcn0vcGtnY29uZmlnJ10pXSkKK200X3B1c2hkZWYoW3BrZ19kZXNjcmlwdGlvbl0sCisgICAgW3BrZy1jb25maWcgYXJjaC1pbmRlcGVuZGVudCBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IEA8OkBdcGtnX2RlZmF1bHRbQDo+QF0pCitBQ19BUkdfV0lUSChbbm9hcmNoLXBrZ2NvbmZpZ2Rpcl0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtbm9hcmNoLXBrZ2NvbmZpZ2Rpcl0sIHBrZ19kZXNjcmlwdGlvbildLCwKKyAgICBbd2l0aF9ub2FyY2hfcGtnY29uZmlnZGlyPV1wa2dfZGVmYXVsdCkKK0FDX1NVQlNUKFtub2FyY2hfcGtnY29uZmlnZGlyXSwgWyR3aXRoX25vYXJjaF9wa2djb25maWdkaXJdKQorbTRfcG9wZGVmKFtwa2dfZGVmYXVsdF0pCittNF9wb3BkZWYoW3BrZ19kZXNjcmlwdGlvbl0pCitdKWRubCBQS0dfTk9BUkNIX0lOU1RBTExESVIKKworCitkbmwgUEtHX0NIRUNLX1ZBUihWQVJJQUJMRSwgTU9EVUxFLCBDT05GSUctVkFSSUFCTEUsCitkbmwgW0FDVElPTi1JRi1GT1VORF0sIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSkKK2RubCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkbmwgU2luY2U6IDAuMjgKK2RubAorZG5sIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgdGhlIHBrZy1jb25maWcgdmFyaWFibGUgZm9yIHRoZSBnaXZlbiBtb2R1bGUuCitBQ19ERUZVTihbUEtHX0NIRUNLX1ZBUl0sCitbQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pZG5sCitBQ19BUkdfVkFSKFskMV0sIFt2YWx1ZSBvZiAkMyBmb3IgJDIsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCisKK19QS0dfQ09ORklHKFskMV0sIFt2YXJpYWJsZT0iXVskM11bIl0sIFskMl0pCitBU19WQVJfQ09QWShbJDFdLCBbcGtnX2N2X11bJDFdKQorCitBU19WQVJfSUYoWyQxXSwgWyIiXSwgWyQ1XSwgWyQ0XSlkbmwKK10pZG5sIFBLR19DSEVDS19WQVIKKworIyBDb3B5cmlnaHQgKEMpIDIwMDItMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX0FVVE9NQUtFX1ZFUlNJT04oVkVSU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBdXRvbWFrZSBYLlkgdHJhY2VzIHRoaXMgbWFjcm8gdG8gZW5zdXJlIGFjbG9jYWwubTQgaGFzIGJlZW4KKyMgZ2VuZXJhdGVkIGZyb20gdGhlIG00IGZpbGVzIGFjY29tcGFueWluZyBBdXRvbWFrZSBYLlkuCisjIChUaGlzIHByaXZhdGUgbWFjcm8gc2hvdWxkIG5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGlzIGZpbGUuKQorQUNfREVGVU4oW0FNX0FVVE9NQUtFX1ZFUlNJT05dLAorW2FtX19hcGlfdmVyc2lvbj0nMS4xNScKK2RubCBTb21lIHVzZXJzIGZpbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgbWlzdGFrZSBpdCBmb3IgYSB3YXkgdG8KK2RubCByZXF1aXJlIHNvbWUgbWluaW11bSB2ZXJzaW9uLiAgUG9pbnQgdGhlbSB0byB0aGUgcmlnaHQgbWFjcm8uCittNF9pZihbJDFdLCBbMS4xNV0sIFtdLAorICAgICAgW0FDX0ZBVEFMKFtEbyBub3QgY2FsbCAkMCwgdXNlIEFNX0lOSVRfQVVUT01BS0UoWyQxXSkuXSldKWRubAorXSkKKworIyBfQU1fQVVUT0NPTkZfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBhY2xvY2FsIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGZpbmQgdGhlIEF1dG9jb25mIHZlcnNpb24uCisjIFRoaXMgaXMgYSBwcml2YXRlIG1hY3JvIHRvby4gIFVzaW5nIG00X2RlZmluZSBzaW1wbGlmaWVzCisjIHRoZSBsb2dpYyBpbiBhY2xvY2FsLCB3aGljaCBjYW4gc2ltcGx5IGlnbm9yZSB0aGlzIGRlZmluaXRpb24uCittNF9kZWZpbmUoW19BTV9BVVRPQ09ORl9WRVJTSU9OXSwgW10pCisKKyMgQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyB0aGV5IGNhbiBiZSB0cmFjZWQuCisjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQU1fSU5JVF9BVVRPTUFLRS4KK0FDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKK1tBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjE1XSlkbmwKK200X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCisgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKK19BTV9BVVRPQ09ORl9WRVJTSU9OKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSldKQorCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19BUihbQUNULUlGLUZBSUxdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBkZXRlcm1pbmUgdGhlIGFyY2hpdmVyIGludGVyZmFjZSwgYW5kIHRyaWdnZXIgdGhlIGFyLWxpYiB3cmFwcGVyCisjIGlmIGl0IGlzIG5lZWRlZC4gIElmIHRoZSBkZXRlY3Rpb24gb2YgYXJjaGl2ZXIgaW50ZXJmYWNlIGZhaWxzLCBydW4KKyMgQUNULUlGLUZBSUwgKGRlZmF1bHQgaXMgdG8gYWJvcnQgY29uZmlndXJlIHdpdGggYSBwcm9wZXIgZXJyb3IgbWVzc2FnZSkuCitBQ19ERUZVTihbQU1fUFJPR19BUl0sCitbQUNfQkVGT1JFKFskMF0sIFtMVF9JTklUXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbQUNfUFJPR19MSUJUT09MXSlkbmwKK0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKK0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2FyLWxpYl0pZG5sCitBQ19DSEVDS19UT09MUyhbQVJdLCBbYXIgbGliICJsaW5rIC1saWIiXSwgW2ZhbHNlXSkKKzogJHtBUj1hcn0KKworQUNfQ0FDSEVfQ0hFQ0soW3RoZSBhcmNoaXZlciAoJEFSKSBpbnRlcmZhY2VdLCBbYW1fY3ZfYXJfaW50ZXJmYWNlXSwKKyAgW0FDX0xBTkdfUFVTSChbQ10pCisgICBhbV9jdl9hcl9pbnRlcmZhY2U9YXIKKyAgIEFDX0NPTVBJTEVfSUZFTFNFKFtBQ19MQU5HX1NPVVJDRShbW2ludCBzb21lX3ZhcmlhYmxlID0gMDtdXSldLAorICAgICBbYW1fYXJfdHJ5PSckQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QuJGFjX29iamV4dCA+JkFTX01FU1NBR0VfTE9HX0ZEJworICAgICAgQUNfVFJZX0VWQUwoW2FtX2FyX3RyeV0pCisgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorICAgICAgICBhbV9jdl9hcl9pbnRlcmZhY2U9YXIKKyAgICAgIGVsc2UKKyAgICAgICAgYW1fYXJfdHJ5PSckQVIgLU5PTE9HTyAtT1VUOmNvbmZ0ZXN0LmxpYiBjb25mdGVzdC4kYWNfb2JqZXh0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCisgICAgICAgIEFDX1RSWV9FVkFMKFthbV9hcl90cnldKQorICAgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorICAgICAgICAgIGFtX2N2X2FyX2ludGVyZmFjZT1saWIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGFtX2N2X2FyX2ludGVyZmFjZT11bmtub3duCisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QubGliIGxpYmNvbmZ0ZXN0LmEKKyAgICAgXSkKKyAgIEFDX0xBTkdfUE9QKFtDXSldKQorCitjYXNlICRhbV9jdl9hcl9pbnRlcmZhY2UgaW4KK2FyKQorICA7OworbGliKQorICAjIE1pY3Jvc29mdCBsaWIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIGFyLWxpYiB3cmFwcGVyIHNjcmlwdC4KKyAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBBUi4KKyAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCisgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0FSIGluIHRoaXMgY2FzZSwKKyAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0FSPSIkYW1fYXV4X2Rpci9hci1saWIgXCQoQVIpIiBvciBzb21ldGhpbmcKKyAgIyBzaW1pbGFyLgorICBBUj0iJGFtX2F1eF9kaXIvYXItbGliICRBUiIKKyAgOzsKK3Vua25vd24pCisgIG00X2RlZmF1bHQoWyQxXSwKKyAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFtjb3VsZCBub3QgZGV0ZXJtaW5lICRBUiBpbnRlcmZhY2VdKV0pCisgIDs7Citlc2FjCitBQ19TVUJTVChbQVJdKWRubAorXSkKKworIyBBTV9BVVhfRElSX0VYUEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgRm9yIHByb2plY3RzIHVzaW5nIEFDX0NPTkZJR19BVVhfRElSKFtmb29dKSwgQXV0b2NvbmYgc2V0cworIyAkYWNfYXV4X2RpciB0byAnJHNyY2Rpci9mb28nLiAgSW4gb3RoZXIgcHJvamVjdHMsIGl0IGlzIHNldCB0bworIyAnJHNyY2RpcicsICckc3JjZGlyLy4uJywgb3IgJyRzcmNkaXIvLi4vLi4nLgorIworIyBPZiBjb3Vyc2UsIEF1dG9tYWtlIG11c3QgaG9ub3IgdGhpcyB2YXJpYWJsZSB3aGVuZXZlciBpdCBjYWxscyBhCisjIHRvb2wgZnJvbSB0aGUgYXV4aWxpYXJ5IGRpcmVjdG9yeS4gIFRoZSBwcm9ibGVtIGlzIHRoYXQgJHNyY2RpciAoYW5kCisjIHRoZXJlZm9yZSAkYWNfYXV4X2RpciBhcyB3ZWxsKSBjYW4gYmUgZWl0aGVyIGFic29sdXRlIG9yIHJlbGF0aXZlLAorIyBkZXBlbmRpbmcgb24gaG93IGNvbmZpZ3VyZSBpcyBydW4uICBUaGlzIGlzIHByZXR0eSBhbm5veWluZywgc2luY2UKKyMgaXQgbWFrZXMgJGFjX2F1eF9kaXIgcXVpdGUgdW51c2FibGUgaW4gc3ViZGlyZWN0b3JpZXM6IGluIHRoZSB0b3AKKyMgc291cmNlIGRpcmVjdG9yeSwgYW55IGZvcm0gd2lsbCB3b3JrIGZpbmUsIGJ1dCBpbiBzdWJkaXJlY3RvcmllcyBhCisjIHJlbGF0aXZlIHBhdGggbmVlZHMgdG8gYmUgYWRqdXN0ZWQgZmlyc3QuCisjCisjICRhY19hdXhfZGlyL21pc3NpbmcKKyMgICAgZmFpbHMgd2hlbiBjYWxsZWQgZnJvbSBhIHN1YmRpcmVjdG9yeSBpZiAkYWNfYXV4X2RpciBpcyByZWxhdGl2ZQorIyAkdG9wX3NyY2Rpci8kYWNfYXV4X2Rpci9taXNzaW5nCisjICAgIGZhaWxzIGlmICRhY19hdXhfZGlyIGlzIGFic29sdXRlLAorIyAgICBmYWlscyB3aGVuIGNhbGxlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IGluIGEgVlBBVEggYnVpbGQgd2l0aAorIyAgICAgICAgICBhIHJlbGF0aXZlICRhY19hdXhfZGlyCisjCisjIFRoZSByZWFzb24gb2YgdGhlIGxhdHRlciBmYWlsdXJlIGlzIHRoYXQgJHRvcF9zcmNkaXIgYW5kICRhY19hdXhfZGlyCisjIGFyZSBib3RoIHByZWZpeGVkIGJ5ICRzcmNkaXIuICBJbiBhbiBpbi1zb3VyY2UgYnVpbGQgdGhpcyBpcyB1c3VhbGx5CisjIGhhcm1sZXNzIGJlY2F1c2UgJHNyY2RpciBpcyAnLicsIGJ1dCB0aGluZ3Mgd2lsbCBicm9rZSB3aGVuIHlvdQorIyBzdGFydCBhIFZQQVRIIGJ1aWxkIG9yIHVzZSBhbiBhYnNvbHV0ZSAkc3JjZGlyLgorIworIyBTbyB3ZSBjb3VsZCB1c2Ugc29tZXRoaW5nIHNpbWlsYXIgdG8gJHRvcF9zcmNkaXIvJGFjX2F1eF9kaXIvbWlzc2luZywKKyMgaWZmIHdlIHN0cmlwIHRoZSBsZWFkaW5nICRzcmNkaXIgZnJvbSAkYWNfYXV4X2Rpci4gIFRoYXQgd291bGQgYmU6CisjICAgYW1fYXV4X2Rpcj0nXCQodG9wX3NyY2RpcikvJ2BleHByICIkYWNfYXV4X2RpciIgOiAiJHNyY2Rpci8vKlwoLipcKSJgCisjIGFuZCB0aGVuIHdlIHdvdWxkIGRlZmluZSAkTUlTU0lORyBhcworIyAgIE1JU1NJTkc9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9taXNzaW5nIgorIyBUaGlzIHdpbGwgd29yayBhcyBsb25nIGFzIE1JU1NJTkcgaXMgbm90IGNhbGxlZCBmcm9tIGNvbmZpZ3VyZSwgYmVjYXVzZQorIyB1bmZvcnR1bmF0ZWx5ICQodG9wX3NyY2RpcikgaGFzIG5vIG1lYW5pbmcgaW4gY29uZmlndXJlLgorIyBIb3dldmVyIHRoZXJlIGFyZSBvdGhlciB2YXJpYWJsZXMsIGxpa2UgQ0MsIHdoaWNoIGFyZSBvZnRlbiB1c2VkIGluCisjIGNvbmZpZ3VyZSwgYW5kIGNvdWxkIHRoZXJlZm9yZSBub3QgdXNlIHRoaXMgImZpeGVkIiAkYWNfYXV4X2Rpci4KKyMKKyMgQW5vdGhlciBzb2x1dGlvbiwgdXNlZCBoZXJlLCBpcyB0byBhbHdheXMgZXhwYW5kICRhY19hdXhfZGlyIHRvIGFuCisjIGFic29sdXRlIFBBVEguICBUaGUgZHJhd2JhY2sgaXMgdGhhdCB1c2luZyBhYnNvbHV0ZSBwYXRocyBwcmV2ZW50IGEKKyMgY29uZmlndXJlZCB0cmVlIHRvIGJlIG1vdmVkIHdpdGhvdXQgcmVjb25maWd1cmF0aW9uLgorCitBQ19ERUZVTihbQU1fQVVYX0RJUl9FWFBBTkRdLAorW0FDX1JFUVVJUkUoW0FDX0NPTkZJR19BVVhfRElSX0RFRkFVTFRdKWRubAorIyBFeHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4gYWJzb2x1dGUgcGF0aC4KK2FtX2F1eF9kaXI9YGNkICIkYWNfYXV4X2RpciIgJiYgcHdkYAorXSkKKworIyBBTV9DT05ESVRJT05BTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5Ny0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fQ09ORElUSU9OQUwoTkFNRSwgU0hFTEwtQ09ORElUSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBhIGNvbmRpdGlvbmFsLgorQUNfREVGVU4oW0FNX0NPTkRJVElPTkFMXSwKK1tBQ19QUkVSRVEoWzIuNTJdKWRubAorIG00X2lmKFskMV0sIFtUUlVFXSwgIFtBQ19GQVRBTChbJDA6IGludmFsaWQgY29uZGl0aW9uOiAkMV0pXSwKKyAgICAgICBbJDFdLCBbRkFMU0VdLCBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0pZG5sCitBQ19TVUJTVChbJDFfVFJVRV0pZG5sCitBQ19TVUJTVChbJDFfRkFMU0VdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX1RSVUVdKWRubAorX0FNX1NVQlNUX05PVE1BS0UoWyQxX0ZBTFNFXSlkbmwKK200X2RlZmluZShbX0FNX0NPTkRfVkFMVUVfJDFdLCBbJDJdKWRubAoraWYgJDI7IHRoZW4KKyAgJDFfVFJVRT0KKyAgJDFfRkFMU0U9JyMnCitlbHNlCisgICQxX1RSVUU9JyMnCisgICQxX0ZBTFNFPQorZmkKK0FDX0NPTkZJR19DT01NQU5EU19QUkUoCitbaWYgdGVzdCAteiAiJHskMV9UUlVFfSIgJiYgdGVzdCAteiAiJHskMV9GQUxTRX0iOyB0aGVuCisgIEFDX01TR19FUlJPUihbW2NvbmRpdGlvbmFsICIkMSIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS5dXSkKK2ZpXSldKQorCisjIENvcHlyaWdodCAoQykgMTk5OS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKworIyBUaGVyZSBhcmUgYSBmZXcgZGlydHkgaGFja3MgYmVsb3cgdG8gYXZvaWQgbGV0dGluZyAnQUNfUFJPR19DQycgYmUKKyMgd3JpdHRlbiBpbiBjbGVhciwgaW4gd2hpY2ggY2FzZSBhdXRvbWFrZSwgd2hlbiByZWFkaW5nIGFjbG9jYWwubTQsCisjIHdpbGwgdGhpbmsgaXQgc2VlcyBhICp1c2UqLCBhbmQgdGhlcmVmb3JlIHdpbGwgdHJpZ2dlciBhbGwgaXQncworIyBDIHN1cHBvcnQgbWFjaGluZXJ5LiAgQWxzbyBub3RlIHRoYXQgaXQgbWVhbnMgdGhhdCBhdXRvc2Nhbiwgc2VlaW5nCisjIENDIGV0Yy4gaW4gdGhlIE1ha2VmaWxlLCB3aWxsIGFzayBmb3IgYW4gQUNfUFJPR19DQyB1c2UuLi4KKworCisjIF9BTV9ERVBFTkRFTkNJRVMoTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWUgaG93IHRoZSBjb21waWxlciBpbXBsZW1lbnRzIGRlcGVuZGVuY3kgY2hlY2tpbmcuCisjIE5BTUUgaXMgIkNDIiwgIkNYWCIsICJPQkpDIiwgIk9CSkNYWCIsICJVUEMiLCBvciAiR0pDIi4KKyMgV2UgdHJ5IGEgZmV3IHRlY2huaXF1ZXMgYW5kIHVzZSB0aGF0IHRvIHNldCBhIHNpbmdsZSBjYWNoZSB2YXJpYWJsZS4KKyMKKyMgV2UgZG9uJ3QgQUNfUkVRVUlSRSB0aGUgY29ycmVzcG9uZGluZyBBQ19QUk9HX0NDIHNpbmNlIHRoZSBsYXR0ZXIgd2FzCisjIG1vZGlmaWVkIHRvIGludm9rZSBfQU1fREVQRU5ERU5DSUVTKENDKTsgd2Ugd291bGQgaGF2ZSBhIGNpcmN1bGFyCisjIGRlcGVuZGVuY3ksIGFuZCBnaXZlbiB0aGF0IHRoZSB1c2VyIGlzIG5vdCBleHBlY3RlZCB0byBydW4gdGhpcyBtYWNybywKKyMganVzdCByZWx5IG9uIEFDX1BST0dfQ0MuCitBQ19ERUZVTihbX0FNX0RFUEVOREVOQ0lFU10sCitbQUNfUkVRVUlSRShbQU1fU0VUX0RFUERJUl0pZG5sCitBQ19SRVFVSVJFKFtBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10pZG5sCitBQ19SRVFVSVJFKFtBTV9NQUtFX0lOQ0xVREVdKWRubAorQUNfUkVRVUlSRShbQU1fREVQX1RSQUNLXSlkbmwKKworbTRfaWYoWyQxXSwgW0NDXSwgICBbZGVwY2M9IiRDQyIgICBhbV9jb21waWxlcl9saXN0PV0sCisgICAgICBbJDFdLCBbQ1hYXSwgIFtkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgIFskMV0sIFtPQkpDXSwgW2RlcGNjPSIkT0JKQyIgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgIFskMV0sIFtPQkpDWFhdLCBbZGVwY2M9IiRPQkpDWFgiIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCisgICAgICBbJDFdLCBbVVBDXSwgIFtkZXBjYz0iJFVQQyIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgIFskMV0sIFtHQ0pdLCAgW2RlcGNjPSIkR0NKIiAgYW1fY29tcGlsZXJfbGlzdD0nZ2NjMyBnY2MnXSwKKyAgICAgICAgICAgICAgICAgICAgW2RlcGNjPSIkJDEiICAgYW1fY29tcGlsZXJfbGlzdD1dKQorCitBQ19DQUNIRV9DSEVDSyhbZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2NdLAorICAgICAgICAgICAgICAgW2FtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlXSwKK1tpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCisgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkICdEJyAtLSBiZWNhdXNlICctTUQnIG1lYW5zICJwdXQgdGhlIG91dHB1dAorICAjIGluIEQiLgorICBybSAtcmYgY29uZnRlc3QuZGlyCisgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAjIENvcHkgZGVwY29tcCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQorICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5LgorICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0ZXN0LmRpcgorICBjZCBjb25mdGVzdC5kaXIKKyAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5kIGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlCisgICMgaXQgaGVscHMgdG8gZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlCisgICMgYm90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2llcyBhcyBhCisgICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQgdGhlIGRlcGVuZGVuY2llcyBpbgorICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QKKyAgIyBkaXJlY3RvcnkuCisgIG1rZGlyIHN1YgorCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKKyAgaWYgdGVzdCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4KKyAgICAgYW1fY29tcGlsZXJfbGlzdD1gc2VkIC1uIFsncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCddIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIG00X2Nhc2UoWyQxXSwgW0NDXSwKKyAgICBbY2FzZSAiICRkZXBjYyAiIGluICMoCisgICAgICpcIC1hcmNoXCAqXCAtYXJjaFwgKikgYW1fX3VuaXZlcnNhbD10cnVlIDs7CisgICAgIGVzYWNdLAorICAgIFtDWFhdLAorICAgIFtjYXNlICIgJGRlcGNjICIgaW4gIygKKyAgICAgKlwgLWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsKKyAgICAgZXNhY10pCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgorICAgICAgZWNobyAnLyogZHVtbXkgKi8nID4gc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgJy1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgorICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCitdKQorQUNfU1VCU1QoWyQxREVQTU9ERV0sIFtkZXBtb2RlPSRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZV0pCitBTV9DT05ESVRJT05BTChbYW1fX2Zhc3RkZXAkMV0sIFsKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzNdKQorXSkKKworCisjIEFNX1NFVF9ERVBESVIKKyMgLS0tLS0tLS0tLS0tLQorIyBDaG9vc2UgYSBkaXJlY3RvcnkgbmFtZSBmb3IgZGVwZW5kZW5jeSBmaWxlcy4KKyMgVGhpcyBtYWNybyBpcyBBQ19SRVFVSVJFZCBpbiBfQU1fREVQRU5ERU5DSUVTLgorQUNfREVGVU4oW0FNX1NFVF9ERVBESVJdLAorW0FDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCitBQ19TVUJTVChbREVQRElSXSwgWyIke2FtX19sZWFkaW5nX2RvdH1kZXBzIl0pZG5sCitdKQorCisKKyMgQU1fREVQX1RSQUNLCisjIC0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX0RFUF9UUkFDS10sCitbQUNfQVJHX0VOQUJMRShbZGVwZW5kZW5jeS10cmFja2luZ10sIFtkbmwKK0FTX0hFTFBfU1RSSU5HKAorICBbLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZ10sCisgIFtkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRyYWN0b3JzXSkKK0FTX0hFTFBfU1RSSU5HKAorICBbLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmddLAorICBbc3BlZWRzIHVwIG9uZS10aW1lIGJ1aWxkXSldKQoraWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vOyB0aGVuCisgIGFtX2RlcGNvbXA9IiRhY19hdXhfZGlyL2RlcGNvbXAiCisgIEFNREVQQkFDS1NMQVNIPSdcJworICBhbV9fbm9kZXA9J19ubycKK2ZpCitBTV9DT05ESVRJT05BTChbQU1ERVBdLCBbdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vXSkKK0FDX1NVQlNUKFtBTURFUEJBQ0tTTEFTSF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbQU1ERVBCQUNLU0xBU0hdKWRubAorQUNfU1VCU1QoW2FtX19ub2RlcF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbYW1fX25vZGVwXSlkbmwKK10pCisKKyMgR2VuZXJhdGUgY29kZSB0byBzZXQgdXAgZGVwZW5kZW5jeSB0cmFja2luZy4gICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisKKyMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCitbeworICAjIE9sZGVyIEF1dG9jb25mIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAorICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KKyAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCisgICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7CisgICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OworICBlc2FjCisgIHNoaWZ0CisgIGZvciBtZgorICBkbworICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCAnTWFrZWZpbGUuaW4nLCBidXQKKyAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKKyAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKyAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBkaXJwYXJ0PWBBU19ESVJOQU1FKCIkbWYiKWAKKyAgICBlbHNlCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgIyBFeHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVvdGUKKyAgICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyAnbWFrZScuCisgICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKKyAgICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQorICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAorICAgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKKyAgICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKKyAgICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorICAgICMgZXhwYW5zaW9uLgorICAgIGZvciBmaWxlIGluIGBzZWQgLW4gIgorICAgICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCisJIHNlZCAtZSAncy9cJChERVBESVIpLyciJERFUERJUiInL2cnYDsgZG8KKyAgICAgICMgTWFrZSBzdXJlIHRoZSBkaXJlY3RvcnkgZXhpc3RzLgorICAgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgICBmZGlyPWBBU19ESVJOQU1FKFsiJGZpbGUiXSlgCisgICAgICBBU19NS0RJUl9QKFskZGlycGFydC8kZmRpcl0pCisgICAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgICAgZG9uZQorICBkb25lCit9CitdKSMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisKKworIyBBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIHNob3VsZCBvbmx5IGJlIGludm9rZWQgb25jZSAtLSB1c2UgdmlhIEFDX1JFUVVJUkUuCisjCisjIFRoaXMgY29kZSBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcKKyMgaXMgZW5hYmxlZC4gIEZJWE1FLiAgVGhpcyBjcmVhdGVzIGVhY2ggJy5QJyBmaWxlIHRoYXQgd2Ugd2lsbAorIyBuZWVkIGluIG9yZGVyIHRvIGJvb3RzdHJhcCB0aGUgZGVwZW5kZW5jeSBoYW5kbGluZyBjb2RlLgorQUNfREVGVU4oW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKK1tBQ19DT05GSUdfQ09NTUFORFMoW2RlcGZpbGVzXSwKKyAgICAgW3Rlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCisgICAgIFtBTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiXSkKK10pCisKKyMgRG8gYWxsIHRoZSB3b3JrIGZvciBBdXRvbWFrZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgbWFjcm8gYWN0dWFsbHkgZG9lcyB0b28gbXVjaC4gIFNvbWUgY2hlY2tzIGFyZSBvbmx5IG5lZWRlZCBpZgorIyB5b3VyIHBhY2thZ2UgZG9lcyBjZXJ0YWluIHRoaW5ncy4gIEJ1dCB0aGlzIGlzbid0IHJlYWxseSBhIGJpZyBkZWFsLgorCitkbmwgUmVkZWZpbmUgQUNfUFJPR19DQyB0byBhdXRvbWF0aWNhbGx5IGludm9rZSBfQU1fUFJPR19DQ19DX08uCittNF9kZWZpbmUoW0FDX1BST0dfQ0NdLAorbTRfZGVmbihbQUNfUFJPR19DQ10pCitbX0FNX1BST0dfQ0NfQ19PCitdKQorCisjIEFNX0lOSVRfQVVUT01BS0UoUEFDS0FHRSwgVkVSU0lPTiwgW05PLURFRklORV0pCisjIEFNX0lOSVRfQVVUT01BS0UoW09QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgY2FsbCB3aXRoIFBBQ0tBR0UgYW5kIFZFUlNJT04gYXJndW1lbnRzIGlzIHRoZSBvbGQgc3R5bGUKKyMgY2FsbCAocHJlIGF1dG9jb25mLTIuNTApLCB3aGljaCBpcyBiZWluZyBwaGFzZWQgb3V0LiAgUEFDS0FHRQorIyBhbmQgVkVSU0lPTiBzaG91bGQgbm93IGJlIHBhc3NlZCB0byBBQ19JTklUIGFuZCByZW1vdmVkIGZyb20KKyMgdGhlIGNhbGwgdG8gQU1fSU5JVF9BVVRPTUFLRS4KKyMgV2Ugc3VwcG9ydCBib3RoIGNhbGwgc3R5bGVzIGZvciB0aGUgdHJhbnNpdGlvbi4gIEFmdGVyCisjIHRoZSBuZXh0IEF1dG9tYWtlIHJlbGVhc2UsIEF1dG9jb25mIGNhbiBtYWtlIHRoZSBBQ19JTklUCisjIGFyZ3VtZW50cyBtYW5kYXRvcnksIGFuZCB0aGVuIHdlIGNhbiBkZXBlbmQgb24gYSBuZXcgQXV0b2NvbmYKKyMgcmVsZWFzZSBhbmQgZHJvcCB0aGUgb2xkIGNhbGwgc3VwcG9ydC4KK0FDX0RFRlVOKFtBTV9JTklUX0FVVE9NQUtFXSwKK1tBQ19QUkVSRVEoWzIuNjVdKWRubAorZG5sIEF1dG9jb25mIHdhbnRzIHRvIGRpc2FsbG93IEFNXyBuYW1lcy4gIFdlIGV4cGxpY2l0bHkgYWxsb3cKK2RubCB0aGUgb25lcyB3ZSBjYXJlIGFib3V0LgorbTRfcGF0dGVybl9hbGxvdyhbXkFNX1tBLVpdK0ZMQUdTJF0pZG5sCitBQ19SRVFVSVJFKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfSU5TVEFMTF0pZG5sCitpZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiOyB0aGVuCisgICMgVXNlIC1JJChzcmNkaXIpIG9ubHkgd2hlbiAkKHNyY2RpcikgIT0gLiwgc28gdGhhdCBtYWtlJ3Mgb3V0cHV0CisgICMgaXMgbm90IHBvbGx1dGVkIHdpdGggcmVwZWF0ZWQgIi1JLiIKKyAgQUNfU1VCU1QoW2FtX19pc3JjXSwgWycgLUkkKHNyY2RpciknXSlfQU1fU1VCU1RfTk9UTUFLRShbYW1fX2lzcmNdKWRubAorICAjIHRlc3QgdG8gc2VlIGlmIHNyY2RpciBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgaWYgdGVzdCAtZiAkc3JjZGlyL2NvbmZpZy5zdGF0dXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW3NvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gIm1ha2UgZGlzdGNsZWFuIiB0aGVyZSBmaXJzdF0pCisgIGZpCitmaQorCisjIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKK2lmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCisgIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKKyAgZWxzZQorICAgIENZR1BBVEhfVz1lY2hvCisgIGZpCitmaQorQUNfU1VCU1QoW0NZR1BBVEhfV10pCisKKyMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KK2RubCBEaXN0aW5ndWlzaCBiZXR3ZWVuIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGNhbGxzLgorbTRfaWZ2YWwoWyQyXSwKK1tBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorICAgICAgICAgICAgIFskMDogdHdvLSBhbmQgdGhyZWUtYXJndW1lbnRzIGZvcm1zIGFyZSBkZXByZWNhdGVkLl0pCittNF9pZnZhbChbJDNdLCBbX0FNX1NFVF9PUFRJT04oW25vLWRlZmluZV0pXSlkbmwKKyBBQ19TVUJTVChbUEFDS0FHRV0sIFskMV0pZG5sCisgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJDJdKV0sCitbX0FNX1NFVF9PUFRJT05TKFskMV0pZG5sCitkbmwgRGlhZ25vc2Ugb2xkLXN0eWxlIEFDX0lOSVQgd2l0aCBuZXctc3R5bGUgQU1fQVVUT01BS0VfSU5JVC4KK200X2lmKAorICBtNF9pZmRlZihbQUNfUEFDS0FHRV9OQU1FXSwgW29rXSk6bTRfaWZkZWYoW0FDX1BBQ0tBR0VfVkVSU0lPTl0sIFtva10pLAorICBbb2s6b2tdLCwKKyAgW200X2ZhdGFsKFtBQ19JTklUIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBwYWNrYWdlIGFuZCB2ZXJzaW9uIGFyZ3VtZW50c10pXSlkbmwKKyBBQ19TVUJTVChbUEFDS0FHRV0sIFsnQUNfUEFDS0FHRV9UQVJOQU1FJ10pZG5sCisgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJ0FDX1BBQ0tBR0VfVkVSU0lPTiddKV0pZG5sCisKK19BTV9JRl9PUFRJT04oW25vLWRlZmluZV0sLAorW0FDX0RFRklORV9VTlFVT1RFRChbUEFDS0FHRV0sIFsiJFBBQ0tBR0UiXSwgW05hbWUgb2YgcGFja2FnZV0pCisgQUNfREVGSU5FX1VOUVVPVEVEKFtWRVJTSU9OXSwgWyIkVkVSU0lPTiJdLCBbVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZV0pXSlkbmwKKworIyBTb21lIHRvb2xzIEF1dG9tYWtlIG5lZWRzLgorQUNfUkVRVUlSRShbQU1fU0FOSVRZX0NIRUNLXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0FSR19QUk9HUkFNXSlkbmwKK0FNX01JU1NJTkdfUFJPRyhbQUNMT0NBTF0sIFthY2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufV0pCitBTV9NSVNTSU5HX1BST0coW0FVVE9DT05GXSwgW2F1dG9jb25mXSkKK0FNX01JU1NJTkdfUFJPRyhbQVVUT01BS0VdLCBbYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259XSkKK0FNX01JU1NJTkdfUFJPRyhbQVVUT0hFQURFUl0sIFthdXRvaGVhZGVyXSkKK0FNX01JU1NJTkdfUFJPRyhbTUFLRUlORk9dLCBbbWFrZWluZm9dKQorQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKK0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX01LRElSX1BdKWRubAorIyBGb3IgYmV0dGVyIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBUbyBiZSByZW1vdmVkIG9uY2UgQXV0b21ha2UgMS45LngKKyMgZGllcyBvdXQgZm9yIGdvb2QuICBGb3IgbW9yZSBiYWNrZ3JvdW5kLCBzZWU6CisjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b21ha2UvMjAxMi0wNy9tc2cwMDAwMS5odG1sPgorIyA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2F1dG9tYWtlLzIwMTItMDcvbXNnMDAwMTQuaHRtbD4KK0FDX1NVQlNUKFtta2Rpcl9wXSwgWyckKE1LRElSX1ApJ10pCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQgKGFuZCBwb3NzaWJseSB0aGUgVEFQIGRyaXZlcikuICBUaGUKKyMgc3lzdGVtICJhd2siIGlzIGJhZCBvbiBzb21lIHBsYXRmb3Jtcy4KK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK19BTV9JRl9PUFRJT04oW3Rhci11c3Rhcl0sIFtfQU1fUFJPR19UQVIoW3VzdGFyXSldLAorCSAgICAgIFtfQU1fSUZfT1BUSU9OKFt0YXItcGF4XSwgW19BTV9QUk9HX1RBUihbcGF4XSldLAorCQkJICAgICBbX0FNX1BST0dfVEFSKFt2N10pXSldKQorX0FNX0lGX09QVElPTihbbm8tZGVwZW5kZW5jaWVzXSwsCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ0NdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKFtDQ10pXSwKKwkJICBbbTRfZGVmaW5lKFtBQ19QUk9HX0NDXSwKKwkJCSAgICAgbTRfZGVmbihbQUNfUFJPR19DQ10pW19BTV9ERVBFTkRFTkNJRVMoW0NDXSldKV0pZG5sCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorCQkgIFtfQU1fREVQRU5ERU5DSUVTKFtDWFhdKV0sCisJCSAgW200X2RlZmluZShbQUNfUFJPR19DWFhdLAorCQkJICAgICBtNF9kZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoW0NYWF0pXSldKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfT0JKQ10sCisJCSAgW19BTV9ERVBFTkRFTkNJRVMoW09CSkNdKV0sCisJCSAgW200X2RlZmluZShbQUNfUFJPR19PQkpDXSwKKwkJCSAgICAgbTRfZGVmbihbQUNfUFJPR19PQkpDXSlbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ10pXSldKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfT0JKQ1hYXSwKKwkJICBbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ1hYXSldLAorCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfT0JKQ1hYXSwKKwkJCSAgICAgbTRfZGVmbihbQUNfUFJPR19PQkpDWFhdKVtfQU1fREVQRU5ERU5DSUVTKFtPQkpDWFhdKV0pXSlkbmwKK10pCitBQ19SRVFVSVJFKFtBTV9TSUxFTlRfUlVMRVNdKWRubAorZG5sIFRoZSB0ZXN0c3VpdGUgZHJpdmVyIG1heSBuZWVkIHRvIGtub3cgYWJvdXQgRVhFRVhULCBzbyBhZGQgdGhlCitkbmwgJ2FtX19FWEVFWFQnIGNvbmRpdGlvbmFsIGlmIF9BTV9DT01QSUxFUl9FWEVFWFQgd2FzIHNlZW4uICBUaGlzCitkbmwgbWFjcm8gaXMgaG9va2VkIG9udG8gX0FDX0NPTVBJTEVSX0VYRUVYVCBlYXJseSwgc2VlIGJlbG93LgorQUNfQ09ORklHX0NPTU1BTkRTX1BSRShkbmwKK1ttNF9wcm92aWRlX2lmKFtfQU1fQ09NUElMRVJfRVhFRVhUXSwKKyAgW0FNX0NPTkRJVElPTkFMKFthbV9fRVhFRVhUXSwgW3Rlc3QgLW4gIiRFWEVFWFQiXSldKV0pZG5sCisKKyMgUE9TSVggd2lsbCBzYXkgaW4gYSBmdXR1cmUgdmVyc2lvbiB0aGF0IHJ1bm5pbmcgInJtIC1mIiB3aXRoIG5vIGFyZ3VtZW50CisjIGlzIE9LOyBhbmQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIG1ha2UgdGhhdCBhc3N1bXB0aW9uIGluIG91ciBNYWtlZmlsZQorIyByZWNpcGVzLiAgU28gdXNlIGFuIGFnZ3Jlc3NpdmUgcHJvYmUgdG8gY2hlY2sgdGhhdCB0aGUgdXNhZ2Ugd2Ugd2FudCBpcworIyBhY3R1YWxseSBzdXBwb3J0ZWQgImluIHRoZSB3aWxkIiB0byBhbiBhY2NlcHRhYmxlIGRlZ3JlZS4KKyMgU2VlIGF1dG9tYWtlIGJ1ZyMxMDgyOC4KKyMgVG8gbWFrZSBhbnkgaXNzdWUgbW9yZSB2aXNpYmxlLCBjYXVzZSB0aGUgcnVubmluZyBjb25maWd1cmUgdG8gYmUgYWJvcnRlZAorIyBieSBkZWZhdWx0IGlmIHRoZSAncm0nIHByb2dyYW0gaW4gdXNlIGRvZXNuJ3QgbWF0Y2ggb3VyIGV4cGVjdGF0aW9uczsgdGhlCisjIHVzZXIgY2FuIHN0aWxsIG92ZXJyaWRlIHRoaXMgdGhvdWdoLgoraWYgcm0gLWYgJiYgcm0gLWZyICYmIHJtIC1yZjsgdGhlbiA6IE9LOyBlbHNlCisgIGNhdCA+JjIgPDwnRU5EJworT29wcyEKKworWW91ciAncm0nIHByb2dyYW0gc2VlbXMgdW5hYmxlIHRvIHJ1biB3aXRob3V0IGZpbGUgb3BlcmFuZHMgc3BlY2lmaWVkCitvbiB0aGUgY29tbWFuZCBsaW5lLCBldmVuIHdoZW4gdGhlICctZicgb3B0aW9uIGlzIHByZXNlbnQuICBUaGlzIGlzIGNvbnRyYXJ5Cit0byB0aGUgYmVoYXZpb3VyIG9mIG1vc3Qgcm0gcHJvZ3JhbXMgb3V0IHRoZXJlLCBhbmQgbm90IGNvbmZvcm1pbmcgd2l0aAordGhlIHVwY29taW5nIFBPU0lYIHN0YW5kYXJkOiA8aHR0cDovL2F1c3Rpbmdyb3VwYnVncy5uZXQvdmlldy5waHA/aWQ9NTQyPgorCitQbGVhc2UgdGVsbCBidWctYXV0b21ha2VAZ251Lm9yZyBhYm91dCB5b3VyIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSB2YWx1ZQorb2YgeW91ciAkUEFUSCBhbmQgYW55IGVycm9yIHBvc3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcyBtZXNzYWdlLiAgVGhpcworY2FuIGhlbHAgdXMgaW1wcm92ZSBmdXR1cmUgYXV0b21ha2UgdmVyc2lvbnMuCisKK0VORAorICBpZiB0ZXN0IHgiJEFDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNIiA9IHgieWVzIjsgdGhlbgorICAgIGVjaG8gJ0NvbmZpZ3VyYXRpb24gd2lsbCBwcm9jZWVkIGFueXdheSwgc2luY2UgeW91IGhhdmUgc2V0IHRoZScgPiYyCisgICAgZWNobyAnQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0gdmFyaWFibGUgdG8gInllcyInID4mMgorICAgIGVjaG8gPiYyCisgIGVsc2UKKyAgICBjYXQgPiYyIDw8J0VORCcKK0Fib3J0aW5nIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MsIHRvIGVuc3VyZSB5b3UgdGFrZSBub3RpY2Ugb2YgdGhlIGlzc3VlLgorCitZb3UgY2FuIGRvd25sb2FkIGFuZCBpbnN0YWxsIEdOVSBjb3JldXRpbHMgdG8gZ2V0IGFuICdybScgaW1wbGVtZW50YXRpb24KK3RoYXQgYmVoYXZlcyBwcm9wZXJseTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jb3JldXRpbHMvPi4KKworSWYgeW91IHdhbnQgdG8gY29tcGxldGUgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VzcyB1c2luZyB5b3VyIHByb2JsZW1hdGljCisncm0nIGFueXdheSwgZXhwb3J0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBBQ0NFUFRfSU5GRVJJT1JfUk1fUFJPR1JBTQordG8gInllcyIsIGFuZCByZS1ydW4gY29uZmlndXJlLgorCitFTkQKKyAgICBBQ19NU0dfRVJST1IoW1lvdXIgJ3JtJyBwcm9ncmFtIGlzIGJhZCwgc29ycnkuXSkKKyAgZmkKK2ZpCitkbmwgVGhlIHRyYWlsaW5nIG5ld2xpbmUgaW4gdGhpcyBtYWNybydzIGRlZmluaXRpb24gaXMgZGVsaWJlcmF0ZSwgZm9yCitkbmwgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgdG8gYWxsb3cgdHJhaWxpbmcgJ2RubCctc3R5bGUgY29tbWVudHMKK2RubCBhZnRlciB0aGUgQU1fSU5JVF9BVVRPTUFLRSBpbnZvY2F0aW9uLiBTZWUgYXV0b21ha2UgYnVnIzE2ODQxLgorXSkKKworZG5sIEhvb2sgaW50byAnX0FDX0NPTVBJTEVSX0VYRUVYVCcgZWFybHkgdG8gbGVhcm4gaXRzIGV4cGFuc2lvbi4gIERvIG5vdAorZG5sIGFkZCB0aGUgY29uZGl0aW9uYWwgcmlnaHQgaGVyZSwgYXMgX0FDX0NPTVBJTEVSX0VYRUVYVCBtYXkgYmUgZnVydGhlcgorZG5sIG1hbmdsZWQgYnkgQXV0b2NvbmYgYW5kIHJ1biBpbiBhIHNoZWxsIGNvbmRpdGlvbmFsIHN0YXRlbWVudC4KK200X2RlZmluZShbX0FDX0NPTVBJTEVSX0VYRUVYVF0sCittNF9kZWZuKFtfQUNfQ09NUElMRVJfRVhFRVhUXSlbbTRfcHJvdmlkZShbX0FNX0NPTVBJTEVSX0VYRUVYVF0pXSkKKworIyBXaGVuIGNvbmZpZy5zdGF0dXMgZ2VuZXJhdGVzIGEgaGVhZGVyLCB3ZSBtdXN0IHVwZGF0ZSB0aGUgc3RhbXAtaCBmaWxlLgorIyBUaGlzIGZpbGUgcmVzaWRlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGNvbmZpZyBoZWFkZXIKKyMgdGhhdCBpcyBnZW5lcmF0ZWQuICBUaGUgc3RhbXAgZmlsZXMgYXJlIG51bWJlcmVkIHRvIGhhdmUgZGlmZmVyZW50IG5hbWVzLgorCisjIEF1dG9jb25mIGNhbGxzIF9BQ19BTV9DT05GSUdfSEVBREVSX0hPT0sgKHdoZW4gZGVmaW5lZCkgaW4gdGhlCisjIGxvb3Agd2hlcmUgY29uZmlnLnN0YXR1cyBjcmVhdGVzIHRoZSBoZWFkZXJzLCBzbyB3ZSBjYW4gZ2VuZXJhdGUKKyMgb3VyIHN0YW1wIGZpbGVzIHRoZXJlLgorQUNfREVGVU4oW19BQ19BTV9DT05GSUdfSEVBREVSX0hPT0tdLAorWyMgQ29tcHV0ZSAkMSdzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9hcmc9JDEKK19hbV9zdGFtcF9jb3VudD0xCitmb3IgX2FtX2hlYWRlciBpbiAkY29uZmlnX2hlYWRlcnMgOjsgZG8KKyAgY2FzZSAkX2FtX2hlYWRlciBpbgorICAgICRfYW1fYXJnIHwgJF9hbV9hcmc6KiApCisgICAgICBicmVhayA7OworICAgICogKQorICAgICAgX2FtX3N0YW1wX2NvdW50PWBleHByICRfYW1fc3RhbXBfY291bnQgKyAxYCA7OworICBlc2FjCitkb25lCitlY2hvICJ0aW1lc3RhbXAgZm9yICRfYW1fYXJnIiA+YEFTX0RJUk5BTUUoWyIkX2FtX2FyZyJdKWAvc3RhbXAtaFtdJF9hbV9zdGFtcF9jb3VudF0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9QUk9HX0lOU1RBTExfU0gKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSAkaW5zdGFsbF9zaC4KK0FDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU0hdLAorW0FDX1JFUVVJUkUoW0FNX0FVWF9ESVJfRVhQQU5EXSlkbmwKK2lmIHRlc3QgeCIke2luc3RhbGxfc2grc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAnJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCciIDs7CisgICopCisgICAgaW5zdGFsbF9zaD0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL2luc3RhbGwtc2giCisgIGVzYWMKK2ZpCitBQ19TVUJTVChbaW5zdGFsbF9zaF0pXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIENoZWNrIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgZmlsZS1zeXN0ZW0gc3VwcG9ydHMgZmlsZW5hbWVzCisjIHdpdGggYSBsZWFkaW5nIGRvdC4gIEZvciBpbnN0YW5jZSBNUy1ET1MgZG9lc24ndC4KK0FDX0RFRlVOKFtBTV9TRVRfTEVBRElOR19ET1RdLAorW3JtIC1yZiAudHN0IDI+L2Rldi9udWxsCitta2RpciAudHN0IDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC50c3Q7IHRoZW4KKyAgYW1fX2xlYWRpbmdfZG90PS4KK2Vsc2UKKyAgYW1fX2xlYWRpbmdfZG90PV8KK2ZpCitybWRpciAudHN0IDI+L2Rldi9udWxsCitBQ19TVUJTVChbYW1fX2xlYWRpbmdfZG90XSldKQorCisjIENoZWNrIHRvIHNlZSBob3cgJ21ha2UnIHRyZWF0cyBpbmNsdWRlcy4JICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fTUFLRV9JTkNMVURFKCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGhvdyBtYWtlIHRyZWF0cyBpbmNsdWRlcy4KK0FDX0RFRlVOKFtBTV9NQUtFX0lOQ0xVREVdLAorW2FtX21ha2U9JHtNQUtFLW1ha2V9CitjYXQgPiBjb25maW5jIDw8ICdFTkQnCithbV9fZG9pdDoKKwlAZWNobyB0aGlzIGlzIHRoZSBhbV9fZG9pdCB0YXJnZXQKKy5QSE9OWTogYW1fX2RvaXQKK0VORAorIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgorQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlXSkKK2FtX19pbmNsdWRlPSIjIgorYW1fX3F1b3RlPQorX2FtX3Jlc3VsdD1ub25lCisjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgorZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorIyBJZ25vcmUgYWxsIGtpbmRzIG9mIGFkZGl0aW9uYWwgb3V0cHV0IGZyb20gJ21ha2UnLgorY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICBhbV9faW5jbHVkZT1pbmNsdWRlCisgIGFtX19xdW90ZT0KKyAgX2FtX3Jlc3VsdD1HTlUKKyAgOzsKK2VzYWMKKyMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgoraWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgorICAgY2FzZSBgJGFtX21ha2UgLXMgLWYgY29uZm1mIDI+IC9kZXYvbnVsbGAgaW4gIygKKyAgICp0aGVcIGFtX19kb2l0XCB0YXJnZXQqKQorICAgICBhbV9faW5jbHVkZT0uaW5jbHVkZQorICAgICBhbV9fcXVvdGU9IlwiIgorICAgICBfYW1fcmVzdWx0PUJTRAorICAgICA7OworICAgZXNhYworZmkKK0FDX1NVQlNUKFthbV9faW5jbHVkZV0pCitBQ19TVUJTVChbYW1fX3F1b3RlXSkKK0FDX01TR19SRVNVTFQoWyRfYW1fcmVzdWx0XSkKK3JtIC1mIGNvbmZpbmMgY29uZm1mCitdKQorCisjIEZha2UgdGhlIGV4aXN0ZW5jZSBvZiBwcm9ncmFtcyB0aGF0IEdOVSBtYWludGFpbmVycyB1c2UuICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9NSVNTSU5HX1BST0coTkFNRSwgUFJPR1JBTSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fTUlTU0lOR19QUk9HXSwKK1tBQ19SRVFVSVJFKFtBTV9NSVNTSU5HX0hBU19SVU5dKQorJDE9JHskMS0iJHthbV9taXNzaW5nX3J1bn0kMiJ9CitBQ19TVUJTVCgkMSldKQorCisjIEFNX01JU1NJTkdfSEFTX1JVTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IGlzIG1vZGVybiBlbm91Z2guCisjIElmIGl0IGlzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCitBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitBQ19SRVFVSVJFX0FVWF9GSUxFKFttaXNzaW5nXSlkbmwKK2lmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsKKyAgKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKKyAgZXNhYworZmkKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1pcy1saWdodHdlaWdodCI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIEFDX01TR19XQVJOKFsnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCitmaQorXSkKKworIyBIZWxwZXIgZnVuY3Rpb25zIGZvciBvcHRpb24gaGFuZGxpbmcuICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgX0FNX01BTkdMRV9PUFRJT04oTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfQU1fTUFOR0xFX09QVElPTl0sCitbW19BTV9PUFRJT05fXW00X2JwYXRzdWJzdCgkMSwgW1teYS16QS1aMC05X11dLCBbX10pXSkKKworIyBfQU1fU0VUX09QVElPTihOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE5BTUUuICBQcmVzZW50bHkgdGhhdCBvbmx5IG1lYW5zIGRlZmluaW5nIGEgZmxhZyBmb3IgdGhpcyBvcHRpb24uCitBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgWzFdKV0pCisKKyMgX0FNX1NFVF9PUFRJT05TKE9QVElPTlMpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPUFRJT05TIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgQXV0b21ha2Ugb3B0aW9ucy4KK0FDX0RFRlVOKFtfQU1fU0VUX09QVElPTlNdLAorW200X2ZvcmVhY2hfdyhbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKKworIyBfQU1fSUZfT1BUSU9OKE9QVElPTiwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCitBQ19ERUZVTihbX0FNX0lGX09QVElPTl0sCitbbTRfaWZzZXQoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFskMl0sIFskM10pXSkKKworIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIF9BTV9QUk9HX0NDX0NfTworIyAtLS0tLS0tLS0tLS0tLS0KKyMgTGlrZSBBQ19QUk9HX0NDX0NfTywgYnV0IGNoYW5nZWQgZm9yIGF1dG9tYWtlLiAgV2UgcmV3cml0ZSBBQ19QUk9HX0NDCisjIHRvIGF1dG9tYXRpY2FsbHkgY2FsbCB0aGlzLgorQUNfREVGVU4oW19BTV9QUk9HX0NDX0NfT10sCitbQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAorQUNfUkVRVUlSRV9BVVhfRklMRShbY29tcGlsZV0pZG5sCitBQ19MQU5HX1BVU0goW0NdKWRubAorQUNfQ0FDSEVfQ0hFQ0soCisgIFt3aGV0aGVyICRDQyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXJdLAorICBbYW1fY3ZfcHJvZ19jY19jX29dLAorICBbQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19QUk9HUkFNKFtdKV0pCisgICMgTWFrZSBzdXJlIGl0IHdvcmtzIGJvdGggd2l0aCAkQ0MgYW5kIHdpdGggc2ltcGxlIGNjLgorICAjIEZvbGxvd2luZyBBQ19QUk9HX0NDX0NfTywgd2UgZG8gdGhlIHRlc3QgdHdpY2UgYmVjYXVzZSBzb21lCisgICMgY29tcGlsZXJzIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgLm8gZmlsZSB3aXRoIC1vLAorICAjIHRob3VnaCB0aGV5IHdpbGwgY3JlYXRlIG9uZS4KKyAgYW1fY3ZfcHJvZ19jY19jX289eWVzCisgIGZvciBhbV9pIGluIDEgMjsgZG8KKyAgICBpZiBBTV9SVU5fTE9HKFskQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dF0pIFwKKyAgICAgICAgICYmIHRlc3QgLWYgY29uZnRlc3QyLiRhY19vYmpleHQ7IHRoZW4KKyAgICAgIDogT0sKKyAgICBlbHNlCisgICAgICBhbV9jdl9wcm9nX2NjX2Nfbz1ubworICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIHJtIC1mIGNvcmUgY29uZnRlc3QqCisgIHVuc2V0IGFtX2ldKQoraWYgdGVzdCAiJGFtX2N2X3Byb2dfY2NfY19vIiAhPSB5ZXM7IHRoZW4KKyAgICMgTG9zaW5nIGNvbXBpbGVyLCBzbyBvdmVycmlkZSB3aXRoIHRoZSBzY3JpcHQuCisgICAjIEZJWE1FOiBJdCBpcyB3cm9uZyB0byByZXdyaXRlIENDLgorICAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCisgICAjIEEgbG9uZ2VyLXRlcm0gZml4IHdvdWxkIGJlIHRvIGhhdmUgYXV0b21ha2UgdXNlIGFtX19DQyBpbiB0aGlzIGNhc2UsCisgICAjIGFuZCB0aGVuIHdlIGNvdWxkIHNldCBhbV9fQ0M9IlwkKHRvcF9zcmNkaXIpL2NvbXBpbGUgXCQoQ0MpIgorICAgQ0M9IiRhbV9hdXhfZGlyL2NvbXBpbGUgJENDIgorZmkKK0FDX0xBTkdfUE9QKFtDXSldKQorCisjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorQUNfREVGVU5fT05DRShbQU1fUFJPR19DQ19DX09dLCBbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIEFNX1JVTl9MT0coQ09NTUFORCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSdW4gQ09NTUFORCwgc2F2ZSB0aGUgZXhpdCBzdGF0dXMgaW4gYWNfc3RhdHVzLCBhbmQgbG9nIGl0LgorIyAoVGhpcyBoYXMgYmVlbiBhZGFwdGVkIGZyb20gQXV0b2NvbmYncyBfQUNfUlVOX0xPRyBtYWNyby4pCitBQ19ERUZVTihbQU1fUlVOX0xPR10sCitbeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJDEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICgkMSkgPiZBU19NRVNTQUdFX0xPR19GRCAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgYWNfc3RhdHVzPSQ/CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH1dKQorCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLiAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9TQU5JVFlfQ0hFQ0sKKyMgLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQU1fU0FOSVRZX0NIRUNLXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZV0pCisjIFJlamVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeQorIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0dGVyLgorYW1fbGY9JworJworY2FzZSBgcHdkYCBpbgorICAqW1tcXFwiXCNcJFwmXCdcYCRhbV9sZl1dKikKKyAgICBBQ19NU0dfRVJST1IoW3Vuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBuYW1lXSk7OworZXNhYworY2FzZSAkc3JjZGlyIGluCisgICpbW1xcXCJcI1wkXCZcJ1xgJGFtX2xmXCBcCV1dKikKKyAgICBBQ19NU0dfRVJST1IoW3Vuc2FmZSBzcmNkaXIgdmFsdWU6ICckc3JjZGlyJ10pOzsKK2VzYWMKKworIyBEbyAnc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncworIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBmaXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhCisjIHN5bWxpbms7IHNvbWUgc3lzdGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzCisjIChlZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmluZworIyBkaXJlY3RvcnkpLgoraWYgKAorICAgYW1faGFzX3NsZXB0PW5vCisgICBmb3IgYW1fdHJ5IGluIDEgMjsgZG8KKyAgICAgZWNobyAidGltZXN0YW1wLCBzbGVwdDogJGFtX2hhc19zbGVwdCIgPiBjb25mdGVzdC5maWxlCisgICAgIHNldCBYIGBscyAtTHQgIiRzcmNkaXIvY29uZmlndXJlIiBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgICAgaWYgdGVzdCAiJFsqXSIgPSAiWCI7IHRoZW4KKwkjIC1MIGRpZG4ndCB3b3JrLgorCXNldCBYIGBscyAtdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgCisgICAgIGZpCisgICAgIGlmIHRlc3QgIiRbKl0iICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKKwkmJiB0ZXN0ICIkWypdIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorCisJIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorCSMgaWYsIGZvciBpbnN0YW5jZSwgQ09ORklHX1NIRUxMIGlzIGJhc2ggYW5kIGl0IGluaGVyaXRzIGEKKwkjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisJIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorCUFDX01TR19FUlJPUihbbHMgLXQgYXBwZWFycyB0byBmYWlsLiAgTWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhIGJyb2tlbgorICBhbGlhcyBpbiB5b3VyIGVudmlyb25tZW50XSkKKyAgICAgZmkKKyAgICAgaWYgdGVzdCAiJFsyXSIgPSBjb25mdGVzdC5maWxlIHx8IHRlc3QgJGFtX3RyeSAtZXEgMjsgdGhlbgorICAgICAgIGJyZWFrCisgICAgIGZpCisgICAgICMgSnVzdCBpbiBjYXNlLgorICAgICBzbGVlcCAxCisgICAgIGFtX2hhc19zbGVwdD15ZXMKKyAgIGRvbmUKKyAgIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIEFDX01TR19FUlJPUihbbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9ja10pCitmaQorQUNfTVNHX1JFU1VMVChbeWVzXSkKKyMgSWYgd2UgZGlkbid0IHNsZWVwLCB3ZSBzdGlsbCBuZWVkIHRvIGVuc3VyZSB0aW1lIHN0YW1wcyBvZiBjb25maWcuc3RhdHVzIGFuZAorIyBnZW5lcmF0ZWQgZmlsZXMgYXJlIHN0cmljdGx5IG5ld2VyLgorYW1fc2xlZXBfcGlkPQoraWYgZ3JlcCAnc2xlcHQ6IG5vJyBjb25mdGVzdC5maWxlID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAoIHNsZWVwIDEgKSAmCisgIGFtX3NsZWVwX3BpZD0kIQorZmkKK0FDX0NPTkZJR19DT01NQU5EU19QUkUoCisgIFtBQ19NU0dfQ0hFQ0tJTkcoW3RoYXQgZ2VuZXJhdGVkIGZpbGVzIGFyZSBuZXdlciB0aGFuIGNvbmZpZ3VyZV0pCisgICBpZiB0ZXN0IC1uICIkYW1fc2xlZXBfcGlkIjsgdGhlbgorICAgICAjIEhpZGUgd2FybmluZ3MgYWJvdXQgcmV1c2VkIFBJRHMuCisgICAgIHdhaXQgJGFtX3NsZWVwX3BpZCAyPi9kZXYvbnVsbAorICAgZmkKKyAgIEFDX01TR19SRVNVTFQoW2RvbmVdKV0pCitybSAtZiBjb25mdGVzdC5maWxlCitdKQorCisjIENvcHlyaWdodCAoQykgMjAwOS0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fU0lMRU5UX1JVTEVTKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5hYmxlIGxlc3MgdmVyYm9zZSBidWlsZCBydWxlczsgd2l0aCB0aGUgZGVmYXVsdCBzZXQgdG8gREVGQVVMVAorIyAoInllcyIgYmVpbmcgbGVzcyB2ZXJib3NlLCAibm8iIG9yIGVtcHR5IGJlaW5nIHZlcmJvc2UpLgorQUNfREVGVU4oW0FNX1NJTEVOVF9SVUxFU10sCitbQUNfQVJHX0VOQUJMRShbc2lsZW50LXJ1bGVzXSwgW2RubAorQVNfSEVMUF9TVFJJTkcoCisgIFstLWVuYWJsZS1zaWxlbnQtcnVsZXNdLAorICBbbGVzcyB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0xIildKQorQVNfSEVMUF9TVFJJTkcoCisgIFstLWRpc2FibGUtc2lsZW50LXJ1bGVzXSwKKyAgW3ZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTAiKV0pZG5sCitdKQorY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbiBAJTpAICgoKAorICB5ZXMpIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7OworICAgbm8pIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworICAgICopIEFNX0RFRkFVTFRfVkVSQk9TSVRZPW00X2lmKFskMV0sIFt5ZXNdLCBbMF0sIFsxXSk7OworZXNhYworZG5sCitkbmwgQSBmZXcgJ21ha2UnIGltcGxlbWVudGF0aW9ucyAoZS5nLiwgTm9uU3RvcCBPUyBhbmQgTmV4dFN0ZXApCitkbmwgZG8gbm90IHN1cHBvcnQgbmVzdGVkIHZhcmlhYmxlIGV4cGFuc2lvbnMuCitkbmwgU2VlIGF1dG9tYWtlIGJ1ZyM5OTI4IGFuZCBidWcjMTAyMzcuCithbV9tYWtlPSR7TUFLRS1tYWtlfQorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlc10sCisgICBbYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXNdLAorICAgW2lmIEFTX0VDSE8oW1snVFJVRT0kKEJBUiQoVikpCitCQVIwPWZhbHNlCitCQVIxPXRydWUKK1Y9MQorYW1fX2RvaXQ6CisJQCQoVFJVRSkKKy5QSE9OWTogYW1fX2RvaXQnXV0pIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCitlbHNlCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCitmaV0pCitpZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgorICBkbmwgVXNpbmcgJyRWJyBpbnN0ZWFkIG9mICckKFYpJyBicmVha3MgSVJJWCBtYWtlLgorICBBTV9WPSckKFYpJworICBBTV9ERUZBVUxUX1Y9JyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpJworZWxzZQorICBBTV9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorICBBTV9ERUZBVUxUX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCitmaQorQUNfU1VCU1QoW0FNX1ZdKWRubAorQU1fU1VCU1RfTk9UTUFLRShbQU1fVl0pZG5sCitBQ19TVUJTVChbQU1fREVGQVVMVF9WXSlkbmwKK0FNX1NVQlNUX05PVE1BS0UoW0FNX0RFRkFVTFRfVl0pZG5sCitBQ19TVUJTVChbQU1fREVGQVVMVF9WRVJCT1NJVFldKWRubAorQU1fQkFDS1NMQVNIPSdcJworQUNfU1VCU1QoW0FNX0JBQ0tTTEFTSF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbQU1fQkFDS1NMQVNIXSlkbmwKK10pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBBTV9QUk9HX0lOU1RBTExfU1RSSVAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9uZSBpc3N1ZSB3aXRoIHZlbmRvciAnaW5zdGFsbCcgKGV2ZW4gR05VKSBpcyB0aGF0IHlvdSBjYW4ndAorIyBzcGVjaWZ5IHRoZSBwcm9ncmFtIHVzZWQgdG8gc3RyaXAgYmluYXJpZXMuICBUaGlzIGlzIGVzcGVjaWFsbHkKKyMgYW5ub3lpbmcgaW4gY3Jvc3MtY29tcGlsaW5nIGVudmlyb25tZW50cywgd2hlcmUgdGhlIGJ1aWxkJ3Mgc3RyaXAKKyMgaXMgdW5saWtlbHkgdG8gaGFuZGxlIHRoZSBob3N0J3MgYmluYXJpZXMuCisjIEZvcnR1bmF0ZWx5IGluc3RhbGwtc2ggd2lsbCBob25vciBhIFNUUklQUFJPRyB2YXJpYWJsZSwgc28gd2UKKyMgYWx3YXlzIHVzZSBpbnN0YWxsLXNoIGluICJtYWtlIGluc3RhbGwtc3RyaXAiLCBhbmQgaW5pdGlhbGl6ZQorIyBTVFJJUFBST0cgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIFNUUklQIHZhcmlhYmxlIChzZXQgYnkgdGhlIHVzZXIpLgorQUNfREVGVU4oW0FNX1BST0dfSU5TVEFMTF9TVFJJUF0sCitbQUNfUkVRVUlSRShbQU1fUFJPR19JTlNUQUxMX1NIXSlkbmwKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nICdzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gIm1ha2UgaW5zdGFsbC1zdHJpcCIuICBIb3dldmVyICdzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSAnU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2RubCBEb24ndCB0ZXN0IGZvciAkY3Jvc3NfY29tcGlsaW5nID0geWVzLCBiZWNhdXNlIGl0IG1pZ2h0IGJlICdtYXliZScuCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorICBBQ19DSEVDS19UT09MKFtTVFJJUF0sIFtzdHJpcF0sIDopCitmaQorSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChpbnN0YWxsX3NoKSAtYyAtcyIKK0FDX1NVQlNUKFtJTlNUQUxMX1NUUklQX1BST0dSQU1dKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBfQU1fU1VCU1RfTk9UTUFLRShWQVJJQUJMRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByZXZlbnQgQXV0b21ha2UgZnJvbSBvdXRwdXR0aW5nIFZBUklBQkxFID0gQFZBUklBQkxFQCBpbiBNYWtlZmlsZS5pbi4KKyMgVGhpcyBtYWNybyBpcyB0cmFjZWQgYnkgQXV0b21ha2UuCitBQ19ERUZVTihbX0FNX1NVQlNUX05PVE1BS0VdKQorCisjIEFNX1NVQlNUX05PVE1BS0UoVkFSSUFCTEUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFB1YmxpYyBzaXN0ZXIgb2YgX0FNX1NVQlNUX05PVE1BS0UuCitBQ19ERUZVTihbQU1fU1VCU1RfTk9UTUFLRV0sIFtfQU1fU1VCU1RfTk9UTUFLRSgkQCldKQorCisjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBfQU1fUFJPR19UQVIoRk9STUFUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbCBpbiBmb3JtYXQgRk9STUFULgorIyBGT1JNQVQgc2hvdWxkIGJlIG9uZSBvZiAndjcnLCAndXN0YXInLCBvciAncGF4Jy4KKyMKKyMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3RhcikgdGhhdCBpcyBhIGNvbW1hbmQKKyMgd3JpdGluZyB0byBzdGRvdXQgYSBGT1JNQVQtdGFyYmFsbCBjb250YWluaW5nIHRoZSBkaXJlY3RvcnkKKyMgJHRhcmRpci4KKyMgICAgIHRhcmRpcj1kaXJlY3RvcnkgJiYgJChhbV9fdGFyKSA+IHJlc3VsdC50YXIKKyMKKyMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3VudGFyKSB0aGF0IGV4dHJhY3Qgc3VjaAorIyBhIHRhcmJhbGwgcmVhZCBmcm9tIHN0ZGluLgorIyAgICAgJChhbV9fdW50YXIpIDwgcmVzdWx0LnRhcgorIworQUNfREVGVU4oW19BTV9QUk9HX1RBUl0sCitbIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgWWVzLCBpdCdzIHN0aWxsIHVzZWQKKyMgaW4gdGhlIHdpbGQgOi0oICBXZSBzaG91bGQgZmluZCBhIHByb3BlciB3YXkgdG8gZGVwcmVjYXRlIGl0IC4uLgorQUNfU1VCU1QoW0FNVEFSXSwgWyckJHtUQVItdGFyfSddKQorCisjIFdlJ2xsIGxvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCitfYW1fdG9vbHM9J2dudXRhciBtNF9pZihbJDFdLCBbdXN0YXJdLCBbcGxhaW50YXJdKSBwYXggY3BpbyBub25lJworCittNF9pZihbJDFdLCBbdjddLAorICBbYW1fX3Rhcj0nJCR7VEFSLXRhcn0gY2hvZiAtICIkJHRhcmRpciInIGFtX191bnRhcj0nJCR7VEFSLXRhcn0geGYgLSddLAorCisgIFttNF9jYXNlKFskMV0sCisgICAgW3VzdGFyXSwKKyAgICAgWyMgVGhlIFBPU0lYIDE5ODggJ3VzdGFyJyBmb3JtYXQgaXMgZGVmaW5lZCB3aXRoIGZpeGVkLXNpemUgZmllbGRzLgorICAgICAgIyBUaGVyZSBpcyBub3RhYmx5IGEgMjEgYml0cyBsaW1pdCBmb3IgdGhlIFVJRCBhbmQgdGhlIEdJRC4gIEluIGZhY3QsCisgICAgICAjIHRoZSAncGF4JyB1dGlsaXR5IGNhbiBoYW5nIG9uIGJpZ2dlciBVSUQvR0lEIChzZWUgYXV0b21ha2UgYnVnIzgzNDMKKyAgICAgICMgYW5kIGJ1ZyMxMzU4OCkuCisgICAgICBhbV9tYXhfdWlkPTIwOTcxNTEgIyAyXjIxIC0gMQorICAgICAgYW1fbWF4X2dpZD0kYW1fbWF4X3VpZAorICAgICAgIyBUaGUgJFVJRCBhbmQgJEdJRCB2YXJpYWJsZXMgYXJlIG5vdCBwb3J0YWJsZSwgc28gd2UgbmVlZCB0byByZXNvcnQKKyAgICAgICMgdG8gdGhlIFBPU0lYLW1hbmRhdGVkIGlkKDEpIHV0aWxpdHkuICBFcnJvcnMgaW4gdGhlICdpZCcgY2FsbHMKKyAgICAgICMgYmVsb3cgYXJlIGRlZmluaXRlbHkgdW5leHBlY3RlZCwgc28gYWxsb3cgdGhlIHVzZXJzIHRvIHNlZSB0aGVtCisgICAgICAjICh0aGF0IGlzLCBhdm9pZCBzdGRlcnIgcmVkaXJlY3Rpb24pLgorICAgICAgYW1fdWlkPWBpZCAtdSB8fCBlY2hvIHVua25vd25gCisgICAgICBhbV9naWQ9YGlkIC1nIHx8IGVjaG8gdW5rbm93bmAKKyAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBVSUQgJyRhbV91aWQnIGlzIHN1cHBvcnRlZCBieSB1c3RhciBmb3JtYXRdKQorICAgICAgaWYgdGVzdCAkYW1fdWlkIC1sZSAkYW1fbWF4X3VpZDsgdGhlbgorICAgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgIGVsc2UKKyAgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgIF9hbV90b29scz1ub25lCisgICAgICBmaQorICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIEdJRCAnJGFtX2dpZCcgaXMgc3VwcG9ydGVkIGJ5IHVzdGFyIGZvcm1hdF0pCisgICAgICBpZiB0ZXN0ICRhbV9naWQgLWxlICRhbV9tYXhfZ2lkOyB0aGVuCisgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIF9hbV90b29scz1ub25lCisgICAgICBmaV0sCisKKyAgW3BheF0sCisgICAgW10sCisKKyAgW200X2ZhdGFsKFtVbmtub3duIHRhciBmb3JtYXRdKV0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY3JlYXRlIGEgJDEgdGFyIGFyY2hpdmVdKQorCisgICMgR28gYWhlYWQgZXZlbiBpZiB3ZSBoYXZlIHRoZSB2YWx1ZSBhbHJlYWR5IGNhY2hlZC4gIFdlIGRvIHNvIGJlY2F1c2Ugd2UKKyAgIyBuZWVkIHRvIHNldCB0aGUgdmFsdWVzIGZvciB0aGUgJ2FtX190YXInIGFuZCAnYW1fX3VudGFyJyB2YXJpYWJsZXMuCisgIF9hbV90b29scz0ke2FtX2N2X3Byb2dfdGFyXyQxLSRfYW1fdG9vbHN9CisKKyAgZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHM7IGRvCisgICAgY2FzZSAkX2FtX3Rvb2wgaW4KKyAgICBnbnV0YXIpCisgICAgICBmb3IgX2FtX3RhciBpbiB0YXIgZ251dGFyIGd0YXI7IGRvCisgICAgICAgIEFNX1JVTl9MT0coWyRfYW1fdGFyIC0tdmVyc2lvbl0pICYmIGJyZWFrCisgICAgICBkb25lCisgICAgICBhbV9fdGFyPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiQkdGFyZGlyIicKKyAgICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiR0YXJkaXIiJworICAgICAgYW1fX3VudGFyPSIkX2FtX3RhciAteGYgLSIKKyAgICAgIDs7CisgICAgcGxhaW50YXIpCisgICAgICAjIE11c3Qgc2tpcCBHTlUgdGFyOiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9ybWF0PSBpdCBkb2Vzbid0IGNyZWF0ZQorICAgICAgIyB1c3RhciB0YXJiYWxsIGVpdGhlci4KKyAgICAgICh0YXIgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjEgJiYgY29udGludWUKKyAgICAgIGFtX190YXI9J3RhciBjaGYgLSAiJCR0YXJkaXIiJworICAgICAgYW1fX3Rhcl89J3RhciBjaGYgLSAiJHRhcmRpciInCisgICAgICBhbV9fdW50YXI9J3RhciB4ZiAtJworICAgICAgOzsKKyAgICBwYXgpCisgICAgICBhbV9fdGFyPSdwYXggLUwgLXggJDEgLXcgIiQkdGFyZGlyIicKKyAgICAgIGFtX190YXJfPSdwYXggLUwgLXggJDEgLXcgIiR0YXJkaXIiJworICAgICAgYW1fX3VudGFyPSdwYXggLXInCisgICAgICA7OworICAgIGNwaW8pCisgICAgICBhbV9fdGFyPSdmaW5kICIkJHRhcmRpciIgLXByaW50IHwgY3BpbyAtbyAtSCAkMSAtTCcKKyAgICAgIGFtX190YXJfPSdmaW5kICIkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgICAgYW1fX3VudGFyPSdjcGlvIC1pIC1IICQxIC1kJworICAgICAgOzsKKyAgICBub25lKQorICAgICAgYW1fX3Rhcj1mYWxzZQorICAgICAgYW1fX3Rhcl89ZmFsc2UKKyAgICAgIGFtX191bnRhcj1mYWxzZQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgorICAgICMgYW5kIGFtX191bnRhciBzZXQuCisgICAgdGVzdCAtbiAiJHthbV9jdl9wcm9nX3Rhcl8kMX0iICYmIGJyZWFrCisKKyAgICAjIHRhci91bnRhciBhIGR1bW15IGRpcmVjdG9yeSwgYW5kIHN0b3AgaWYgdGhlIGNvbW1hbmQgd29ya3MuCisgICAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICAgIG1rZGlyIGNvbmZ0ZXN0LmRpcgorICAgIGVjaG8gR3JlcE1lID4gY29uZnRlc3QuZGlyL2ZpbGUKKyAgICBBTV9SVU5fTE9HKFt0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXJdKQorICAgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LnRhcjsgdGhlbgorICAgICAgQU1fUlVOX0xPRyhbJGFtX191bnRhciA8Y29uZnRlc3QudGFyXSkKKyAgICAgIEFNX1JVTl9MT0coW2NhdCBjb25mdGVzdC5kaXIvZmlsZV0pCisgICAgICBncmVwIEdyZXBNZSBjb25mdGVzdC5kaXIvZmlsZSA+L2Rldi9udWxsIDI+JjEgJiYgYnJlYWsKKyAgICBmaQorICBkb25lCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKworICBBQ19DQUNIRV9WQUwoW2FtX2N2X3Byb2dfdGFyXyQxXSwgW2FtX2N2X3Byb2dfdGFyXyQxPSRfYW1fdG9vbF0pCisgIEFDX01TR19SRVNVTFQoWyRhbV9jdl9wcm9nX3Rhcl8kMV0pXSkKKworQUNfU1VCU1QoW2FtX190YXJdKQorQUNfU1VCU1QoW2FtX191bnRhcl0pCitdKSAjIF9BTV9QUk9HX1RBUgorCittNF9pbmNsdWRlKFttNC9heF9wdGhyZWFkLm00XSkKK200X2luY2x1ZGUoW200L2xpYnRvb2wubTRdKQorbTRfaW5jbHVkZShbbTQvbHRvcHRpb25zLm00XSkKK200X2luY2x1ZGUoW200L2x0c3VnYXIubTRdKQorbTRfaW5jbHVkZShbbTQvbHR2ZXJzaW9uLm00XSkKK200X2luY2x1ZGUoW200L2x0fm9ic29sZXRlLm00XSkKK200X2luY2x1ZGUoW200L3BjcmUyX3Zpc2liaWxpdHkubTRdKQpkaWZmIC0tZ2l0IGEvZGlzdDIvYXItbGliIGIvZGlzdDIvYXItbGliCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ2M2I5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9hci1saWIKQEAgLTAsMCArMSwyNzAgQEAKKyMhIC9iaW4vc2gKKyMgV3JhcHBlciBmb3IgTWljcm9zb2Z0IGxpYi5leGUKKworbWU9YXItbGliCitzY3JpcHR2ZXJzaW9uPTIwMTItMDMtMDEuMDg7ICMgVVRDCisKKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgUGV0ZXIgUm9zaW4gPHBlZGFAbHlzYXRvci5saXUuc2U+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworCisjIGZ1bmNfZXJyb3IgbWVzc2FnZQorZnVuY19lcnJvciAoKQoreworICBlY2hvICIkbWU6ICQxIiAxPiYyCisgIGV4aXQgMQorfQorCitmaWxlX2NvbnY9CisKKyMgZnVuY19maWxlX2NvbnYgYnVpbGRfZmlsZQorIyBDb252ZXJ0IGEgJGJ1aWxkIGZpbGUgdG8gJGhvc3QgZm9ybSBhbmQgc3RvcmUgaXQgaW4gJGZpbGUKKyMgQ3VycmVudGx5IG9ubHkgc3VwcG9ydHMgV2luZG93cyBob3N0cy4KK2Z1bmNfZmlsZV9jb252ICgpCit7CisgIGZpbGU9JDEKKyAgY2FzZSAkZmlsZSBpbgorICAgIC8gfCAvWyEvXSopICMgYWJzb2x1dGUgZmlsZSwgYW5kIG5vdCBhIFVOQyBmaWxlCisgICAgICBpZiB0ZXN0IC16ICIkZmlsZV9jb252IjsgdGhlbgorCSMgbGF6aWx5IGRldGVybWluZSBob3cgdG8gY29udmVydCBhYnMgZmlsZXMKKwljYXNlIGB1bmFtZSAtc2AgaW4KKwkgIE1JTkdXKikKKwkgICAgZmlsZV9jb252PW1pbmd3CisJICAgIDs7CisJICBDWUdXSU4qKQorCSAgICBmaWxlX2NvbnY9Y3lnd2luCisJICAgIDs7CisJICAqKQorCSAgICBmaWxlX2NvbnY9d2luZQorCSAgICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBjYXNlICRmaWxlX2NvbnYgaW4KKwltaW5ndykKKwkgIGZpbGU9YGNtZCAvL0MgZWNobyAiJGZpbGUgIiB8IHNlZCAtZSAncy8iXCguKlwpICIgKiQvXDEvJ2AKKwkgIDs7CisJY3lnd2luKQorCSAgZmlsZT1gY3lncGF0aCAtbSAiJGZpbGUiIHx8IGVjaG8gIiRmaWxlImAKKwkgIDs7CisJd2luZSkKKwkgIGZpbGU9YHdpbmVwYXRoIC13ICIkZmlsZSIgfHwgZWNobyAiJGZpbGUiYAorCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2F0X2ZpbGUgYXRfZmlsZSBvcGVyYXRpb24gYXJjaGl2ZQorIyBJdGVyYXRlIG92ZXIgYWxsIG1lbWJlcnMgaW4gQVRfRklMRSBwZXJmb3JtaW5nIE9QRVJBVElPTiBvbiBBUkNISVZFCisjIGZvciBlYWNoIG9mIHRoZW0uCisjIFdoZW4gaW50ZXJwcmV0aW5nIHRoZSBjb250ZW50IG9mIHRoZSBARklMRSwgZG8gTk9UIHVzZSBmdW5jX2ZpbGVfY29udiwKKyMgc2luY2UgdGhlIHVzZXIgd291bGQgbmVlZCB0byBzdXBwbHkgcHJlY29udmVydGVkIGZpbGUgbmFtZXMgdG8KKyMgYmludXRpbHMgYXIsIGF0IGxlYXN0IGZvciBNaW5HVy4KK2Z1bmNfYXRfZmlsZSAoKQoreworICBvcGVyYXRpb249JDIKKyAgYXJjaGl2ZT0kMworICBhdF9maWxlX2NvbnRlbnRzPWBjYXQgIiQxImAKKyAgZXZhbCBzZXQgeCAiJGF0X2ZpbGVfY29udGVudHMiCisgIHNoaWZ0CisKKyAgZm9yIG1lbWJlcgorICBkbworICAgICRBUiAtTk9MT0dPICRvcGVyYXRpb246IiRtZW1iZXIiICIkYXJjaGl2ZSIgfHwgZXhpdCAkPworICBkb25lCit9CisKK2Nhc2UgJDEgaW4KKyAgJycpCisgICAgIGZ1bmNfZXJyb3IgIm5vIGNvbW1hbmQuICBUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgICA7OworICAtaCB8IC0taCopCisgICAgY2F0IDw8RU9GCitVc2FnZTogJG1lIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gQUNUSU9OIEFSQ0hJVkUgW01FTUJFUi4uLl0KKworTWVtYmVycyBtYXkgYmUgc3BlY2lmaWVkIGluIGEgZmlsZSBuYW1lZCB3aXRoIEBGSUxFLgorRU9GCisgICAgZXhpdCAkPworICAgIDs7CisgIC12IHwgLS12KikKKyAgICBlY2hvICIkbWUsIHZlcnNpb24gJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7Citlc2FjCisKK2lmIHRlc3QgJCMgLWx0IDM7IHRoZW4KKyAgZnVuY19lcnJvciAieW91IG11c3Qgc3BlY2lmeSBhIHByb2dyYW0sIGFuIGFjdGlvbiBhbmQgYW4gYXJjaGl2ZSIKK2ZpCisKK0FSPSQxCitzaGlmdAord2hpbGUgOgorZG8KKyAgaWYgdGVzdCAkIyAtbHQgMjsgdGhlbgorICAgIGZ1bmNfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYSBwcm9ncmFtLCBhbiBhY3Rpb24gYW5kIGFuIGFyY2hpdmUiCisgIGZpCisgIGNhc2UgJDEgaW4KKyAgICAtbGliIHwgLUxJQiBcCisgICAgfCAtbHRjZyB8IC1MVENHIFwKKyAgICB8IC1tYWNoaW5lKiB8IC1NQUNISU5FKiBcCisgICAgfCAtc3Vic3lzdGVtKiB8IC1TVUJTWVNURU0qIFwKKyAgICB8IC12ZXJib3NlIHwgLVZFUkJPU0UgXAorICAgIHwgLXd4KiB8IC1XWCogKQorICAgICAgQVI9IiRBUiAkMSIKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBhY3Rpb249JDEKKyAgICAgIHNoaWZ0CisgICAgICBicmVhaworICAgICAgOzsKKyAgZXNhYworZG9uZQorb3JpZ19hcmNoaXZlPSQxCitzaGlmdAorZnVuY19maWxlX2NvbnYgIiRvcmlnX2FyY2hpdmUiCithcmNoaXZlPSRmaWxlCisKKyMgc3RyaXAgbGVhZGluZyBkYXNoIGluICRhY3Rpb24KK2FjdGlvbj0ke2FjdGlvbiMtfQorCitkZWxldGU9CitleHRyYWN0PQorbGlzdD0KK3F1aWNrPQorcmVwbGFjZT0KK2luZGV4PQorY3JlYXRlPQorCit3aGlsZSB0ZXN0IC1uICIkYWN0aW9uIgorZG8KKyAgY2FzZSAkYWN0aW9uIGluCisgICAgZCopIGRlbGV0ZT15ZXMgIDs7CisgICAgeCopIGV4dHJhY3Q9eWVzIDs7CisgICAgdCopIGxpc3Q9eWVzICAgIDs7CisgICAgcSopIHF1aWNrPXllcyAgIDs7CisgICAgciopIHJlcGxhY2U9eWVzIDs7CisgICAgcyopIGluZGV4PXllcyAgIDs7CisgICAgUyopICAgICAgICAgICAgIDs7ICMgdGhlIGluZGV4IGlzIGFsd2F5cyB1cGRhdGVkIGltcGxpY2l0bHkKKyAgICBjKikgY3JlYXRlPXllcyAgOzsKKyAgICB1KikgICAgICAgICAgICAgOzsgIyBUT0RPOiBkb24ndCBpZ25vcmUgdGhlIHVwZGF0ZSBtb2RpZmllcgorICAgIHYqKSAgICAgICAgICAgICA7OyAjIFRPRE86IGRvbid0IGlnbm9yZSB0aGUgdmVyYm9zZSBtb2RpZmllcgorICAgICopCisgICAgICBmdW5jX2Vycm9yICJ1bmtub3duIGFjdGlvbiBzcGVjaWZpZWQiCisgICAgICA7OworICBlc2FjCisgIGFjdGlvbj0ke2FjdGlvbiM/fQorZG9uZQorCitjYXNlICRkZWxldGUkZXh0cmFjdCRsaXN0JHF1aWNrJHJlcGxhY2UsJGluZGV4IGluCisgIHllcywqIHwgLHllcykKKyAgICA7OworICB5ZXN5ZXMqKQorICAgIGZ1bmNfZXJyb3IgIm1vcmUgdGhhbiBvbmUgYWN0aW9uIHNwZWNpZmllZCIKKyAgICA7OworICAqKQorICAgIGZ1bmNfZXJyb3IgIm5vIGFjdGlvbiBzcGVjaWZpZWQiCisgICAgOzsKK2VzYWMKKworaWYgdGVzdCAtbiAiJGRlbGV0ZSI7IHRoZW4KKyAgaWYgdGVzdCAhIC1mICIkb3JpZ19hcmNoaXZlIjsgdGhlbgorICAgIGZ1bmNfZXJyb3IgImFyY2hpdmUgbm90IGZvdW5kIgorICBmaQorICBmb3IgbWVtYmVyCisgIGRvCisgICAgY2FzZSAkMSBpbgorICAgICAgQCopCisgICAgICAgIGZ1bmNfYXRfZmlsZSAiJHsxI0B9IiAtUkVNT1ZFICIkYXJjaGl2ZSIKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZmlsZV9jb252ICIkMSIKKyAgICAgICAgJEFSIC1OT0xPR08gLVJFTU9WRToiJGZpbGUiICIkYXJjaGl2ZSIgfHwgZXhpdCAkPworICAgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCitlbGlmIHRlc3QgLW4gIiRleHRyYWN0IjsgdGhlbgorICBpZiB0ZXN0ICEgLWYgIiRvcmlnX2FyY2hpdmUiOyB0aGVuCisgICAgZnVuY19lcnJvciAiYXJjaGl2ZSBub3QgZm91bmQiCisgIGZpCisgIGlmIHRlc3QgJCMgLWd0IDA7IHRoZW4KKyAgICBmb3IgbWVtYmVyCisgICAgZG8KKyAgICAgIGNhc2UgJDEgaW4KKyAgICAgICAgQCopCisgICAgICAgICAgZnVuY19hdF9maWxlICIkezEjQH0iIC1FWFRSQUNUICIkYXJjaGl2ZSIKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIGZ1bmNfZmlsZV9jb252ICIkMSIKKyAgICAgICAgICAkQVIgLU5PTE9HTyAtRVhUUkFDVDoiJGZpbGUiICIkYXJjaGl2ZSIgfHwgZXhpdCAkPworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorICBlbHNlCisgICAgJEFSIC1OT0xPR08gLUxJU1QgIiRhcmNoaXZlIiB8IHNlZCAtZSAncy9cXC9cXFxcL2cnIHwgd2hpbGUgcmVhZCBtZW1iZXIKKyAgICBkbworICAgICAgJEFSIC1OT0xPR08gLUVYVFJBQ1Q6IiRtZW1iZXIiICIkYXJjaGl2ZSIgfHwgZXhpdCAkPworICAgIGRvbmUKKyAgZmkKKworZWxpZiB0ZXN0IC1uICIkcXVpY2skcmVwbGFjZSI7IHRoZW4KKyAgaWYgdGVzdCAhIC1mICIkb3JpZ19hcmNoaXZlIjsgdGhlbgorICAgIGlmIHRlc3QgLXogIiRjcmVhdGUiOyB0aGVuCisgICAgICBlY2hvICIkbWU6IGNyZWF0aW5nICRvcmlnX2FyY2hpdmUiCisgICAgZmkKKyAgICBvcmlnX2FyY2hpdmU9CisgIGVsc2UKKyAgICBvcmlnX2FyY2hpdmU9JGFyY2hpdmUKKyAgZmkKKworICBmb3IgbWVtYmVyCisgIGRvCisgICAgY2FzZSAkMSBpbgorICAgIEAqKQorICAgICAgZnVuY19maWxlX2NvbnYgIiR7MSNAfSIKKyAgICAgIHNldCB4ICIkQCIgIkAkZmlsZSIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGZ1bmNfZmlsZV9jb252ICIkMSIKKyAgICAgIHNldCB4ICIkQCIgIiRmaWxlIgorICAgICAgOzsKKyAgICBlc2FjCisgICAgc2hpZnQKKyAgICBzaGlmdAorICBkb25lCisKKyAgaWYgdGVzdCAtbiAiJG9yaWdfYXJjaGl2ZSI7IHRoZW4KKyAgICAkQVIgLU5PTE9HTyAtT1VUOiIkYXJjaGl2ZSIgIiRvcmlnX2FyY2hpdmUiICIkQCIgfHwgZXhpdCAkPworICBlbHNlCisgICAgJEFSIC1OT0xPR08gLU9VVDoiJGFyY2hpdmUiICIkQCIgfHwgZXhpdCAkPworICBmaQorCitlbGlmIHRlc3QgLW4gIiRsaXN0IjsgdGhlbgorICBpZiB0ZXN0ICEgLWYgIiRvcmlnX2FyY2hpdmUiOyB0aGVuCisgICAgZnVuY19lcnJvciAiYXJjaGl2ZSBub3QgZm91bmQiCisgIGZpCisgICRBUiAtTk9MT0dPIC1MSVNUICIkYXJjaGl2ZSIgfHwgZXhpdCAkPworZmkKZGlmZiAtLWdpdCBhL2Rpc3QyL2NtYWtlL0NPUFlJTkctQ01BS0UtU0NSSVBUUyBiL2Rpc3QyL2NtYWtlL0NPUFlJTkctQ01BS0UtU0NSSVBUUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjQxNzc2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvY21ha2UvQ09QWUlORy1DTUFLRS1TQ1JJUFRTCkBAIC0wLDAgKzEsMjIgQEAKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKK05PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvZGlzdDIvY21ha2UvRmluZEVkaXRsaW5lLmNtYWtlIGIvZGlzdDIvY21ha2UvRmluZEVkaXRsaW5lLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMGI3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9jbWFrZS9GaW5kRWRpdGxpbmUuY21ha2UKQEAgLTAsMCArMSwxNyBAQAorIyBNb2RpZmllZCBmcm9tIEZpbmRSZWFkbGluZS5jbWFrZSAoUEggRmViIDIwMTIpCisKK2lmKEVESVRMSU5FX0lOQ0xVREVfRElSIEFORCBFRElUTElORV9MSUJSQVJZIEFORCBOQ1VSU0VTX0xJQlJBUlkpCisgIHNldChFRElUTElORV9GT1VORCBUUlVFKQorZWxzZShFRElUTElORV9JTkNMVURFX0RJUiBBTkQgRURJVExJTkVfTElCUkFSWSBBTkQgTkNVUlNFU19MSUJSQVJZKQorICBGSU5EX1BBVEgoRURJVExJTkVfSU5DTFVERV9ESVIgcmVhZGxpbmUuaAorICAgIC91c3IvaW5jbHVkZS9lZGl0bGluZQorICAgIC91c3IvaW5jbHVkZS9lZGl0L3JlYWRsaW5lICAKKyAgICAvdXNyL2luY2x1ZGUvcmVhZGxpbmUKKyAgKQorICAKKyAgRklORF9MSUJSQVJZKEVESVRMSU5FX0xJQlJBUlkgTkFNRVMgZWRpdCkKKyAgaW5jbHVkZShGaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncykKKyAgRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKEVkaXRsaW5lIERFRkFVTFRfTVNHIEVESVRMSU5FX0lOQ0xVREVfRElSIEVESVRMSU5FX0xJQlJBUlkgKQorCisgIE1BUktfQVNfQURWQU5DRUQoRURJVExJTkVfSU5DTFVERV9ESVIgRURJVExJTkVfTElCUkFSWSkKK2VuZGlmKEVESVRMSU5FX0lOQ0xVREVfRElSIEFORCBFRElUTElORV9MSUJSQVJZIEFORCBOQ1VSU0VTX0xJQlJBUlkpCmRpZmYgLS1naXQgYS9kaXN0Mi9jbWFrZS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZSBiL2Rpc3QyL2NtYWtlL0ZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MWQ4MTIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9jbWFrZS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZQpAQCAtMCwwICsxLDU4IEBACisjIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhOQU1FIChERUZBVUxUX01TR3wiQ3VzdG9tIGZhaWx1cmUgbWVzc2FnZSIpIFZBUjEgLi4uICkKKyMgICAgVGhpcyBtYWNybyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGluIEZpbmRYWFguY21ha2UgbW9kdWxlcyBmaWxlcy4KKyMgICAgSXQgaGFuZGxlcyB0aGUgUkVRVUlSRUQgYW5kIFFVSUVUIGFyZ3VtZW50IHRvIEZJTkRfUEFDS0FHRSgpIGFuZAorIyAgICBpdCBhbHNvIHNldHMgdGhlIDxVUFBFUkNBU0VEX05BTUU+X0ZPVU5EIHZhcmlhYmxlLgorIyAgICBUaGUgcGFja2FnZSBpcyBmb3VuZCBpZiBhbGwgdmFyaWFibGVzIGxpc3RlZCBhcmUgVFJVRS4KKyMgICAgRXhhbXBsZToKKyMKKyMgICAgRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKExpYlhtbDIgREVGQVVMVF9NU0cgTElCWE1MMl9MSUJSQVJJRVMgTElCWE1MMl9JTkNMVURFX0RJUikKKyMKKyMgICAgTGliWG1sMiBpcyBjb25zaWRlcmVkIHRvIGJlIGZvdW5kLCBpZiBib3RoIExJQlhNTDJfTElCUkFSSUVTIGFuZCAKKyMgICAgTElCWE1MMl9JTkNMVURFX0RJUiBhcmUgdmFsaWQuIFRoZW4gYWxzbyBMSUJYTUwyX0ZPVU5EIGlzIHNldCB0byBUUlVFLgorIyAgICBJZiBpdCBpcyBub3QgZm91bmQgYW5kIFJFUVVJUkVEIHdhcyB1c2VkLCBpdCBmYWlscyB3aXRoIEZBVEFMX0VSUk9SLCAKKyMgICAgaW5kZXBlbmRlbnQgd2hldGhlciBRVUlFVCB3YXMgdXNlZCBvciBub3QuCisjICAgIElmIGl0IGlzIGZvdW5kLCB0aGUgbG9jYXRpb24gaXMgcmVwb3J0ZWQgdXNpbmcgdGhlIFZBUjEgYXJndW1lbnQsIHNvIAorIyAgICBoZXJlIGEgbWVzc2FnZSAiRm91bmQgTGliWG1sMjogL3Vzci9saWIvbGlieG1sMi5zbyIgd2lsbCBiZSBwcmludGVkIG91dC4KKyMgICAgSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBERUZBVUxUX01TRywgdGhlIG1lc3NhZ2UgaW4gdGhlIGZhaWx1cmUgY2FzZSB3aWxsIAorIyAgICBiZSAiQ291bGQgTk9UIGZpbmQgTGliWG1sMiIsIGlmIHlvdSBkb24ndCBsaWtlIHRoaXMgbWVzc2FnZSB5b3UgY2FuIHNwZWNpZnkKKyMgICAgeW91ciBvd24gY3VzdG9tIGZhaWx1cmUgbWVzc2FnZSB0aGVyZS4KKworTUFDUk8oRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTIF9OQU1FIF9GQUlMX01TRyBfVkFSMSApCisKKyAgSUYoIiR7X0ZBSUxfTVNHfSIgU1RSRVFVQUwgIkRFRkFVTFRfTVNHIikKKyAgICBJRiAoJHtfTkFNRX1fRklORF9SRVFVSVJFRCkKKyAgICAgIFNFVChfRkFJTF9NRVNTQUdFICJDb3VsZCBub3QgZmluZCBSRVFVSVJFRCBwYWNrYWdlICR7X05BTUV9IikKKyAgICBFTFNFICgke19OQU1FfV9GSU5EX1JFUVVJUkVEKQorICAgICAgU0VUKF9GQUlMX01FU1NBR0UgIkNvdWxkIG5vdCBmaW5kIE9QVElPTkFMIHBhY2thZ2UgJHtfTkFNRX0iKQorICAgIEVORElGICgke19OQU1FfV9GSU5EX1JFUVVJUkVEKQorICBFTFNFKCIke19GQUlMX01TR30iIFNUUkVRVUFMICJERUZBVUxUX01TRyIpCisgICAgU0VUKF9GQUlMX01FU1NBR0UgIiR7X0ZBSUxfTVNHfSIpCisgIEVORElGKCIke19GQUlMX01TR30iIFNUUkVRVUFMICJERUZBVUxUX01TRyIpCisKKyAgU1RSSU5HKFRPVVBQRVIgJHtfTkFNRX0gX05BTUVfVVBQRVIpCisKKyAgU0VUKCR7X05BTUVfVVBQRVJ9X0ZPVU5EIFRSVUUpCisgIElGKE5PVCAke19WQVIxfSkKKyAgICBTRVQoJHtfTkFNRV9VUFBFUn1fRk9VTkQgRkFMU0UpCisgIEVORElGKE5PVCAke19WQVIxfSkKKworICBGT1JFQUNIKF9DVVJSRU5UX1ZBUiAke0FSR059KQorICAgIElGKE5PVCAke19DVVJSRU5UX1ZBUn0pCisgICAgICBTRVQoJHtfTkFNRV9VUFBFUn1fRk9VTkQgRkFMU0UpCisgICAgRU5ESUYoTk9UICR7X0NVUlJFTlRfVkFSfSkKKyAgRU5ERk9SRUFDSChfQ1VSUkVOVF9WQVIpCisKKyAgSUYgKCR7X05BTUVfVVBQRVJ9X0ZPVU5EKQorICAgIElGIChOT1QgJHtfTkFNRX1fRklORF9RVUlFVExZKQorICAgICAgICBNRVNTQUdFKFNUQVRVUyAiRm91bmQgJHtfTkFNRX06ICR7JHtfVkFSMX19IikKKyAgICBFTkRJRiAoTk9UICR7X05BTUV9X0ZJTkRfUVVJRVRMWSkKKyAgRUxTRSAoJHtfTkFNRV9VUFBFUn1fRk9VTkQpCisgICAgSUYgKCR7X05BTUV9X0ZJTkRfUkVRVUlSRUQpCisgICAgICAgIE1FU1NBR0UoRkFUQUxfRVJST1IgIiR7X0ZBSUxfTUVTU0FHRX0iKQorICAgIEVMU0UgKCR7X05BTUV9X0ZJTkRfUkVRVUlSRUQpCisgICAgICBJRiAoTk9UICR7X05BTUV9X0ZJTkRfUVVJRVRMWSkKKyAgICAgICAgTUVTU0FHRShTVEFUVVMgIiR7X0ZBSUxfTUVTU0FHRX0iKQorICAgICAgRU5ESUYgKE5PVCAke19OQU1FfV9GSU5EX1FVSUVUTFkpCisgICAgRU5ESUYgKCR7X05BTUV9X0ZJTkRfUkVRVUlSRUQpCisgIEVORElGICgke19OQU1FX1VQUEVSfV9GT1VORCkKK0VORE1BQ1JPKEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUykKZGlmZiAtLWdpdCBhL2Rpc3QyL2NtYWtlL0ZpbmRSZWFkbGluZS5jbWFrZSBiL2Rpc3QyL2NtYWtlL0ZpbmRSZWFkbGluZS5jbWFrZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDRjYzU1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvY21ha2UvRmluZFJlYWRsaW5lLmNtYWtlCkBAIC0wLDAgKzEsMjkgQEAKKyMgZnJvbSBodHRwOi8vd2Vic3ZuLmtkZS5vcmcvdHJ1bmsvS0RFL2tkZWVkdS9jbWFrZS9tb2R1bGVzL0ZpbmRSZWFkbGluZS5jbWFrZQorIyBodHRwOi8vd2Vic3ZuLmtkZS5vcmcvdHJ1bmsvS0RFL2tkZWVkdS9jbWFrZS9tb2R1bGVzL0NPUFlJTkctQ01BS0UtU0NSSVBUUworIyAtLT4gQlNEIGxpY2Vuc2VkCisjCisjIEdOVSBSZWFkbGluZSBsaWJyYXJ5IGZpbmRlcgoraWYoUkVBRExJTkVfSU5DTFVERV9ESVIgQU5EIFJFQURMSU5FX0xJQlJBUlkgQU5EIE5DVVJTRVNfTElCUkFSWSkKKyAgc2V0KFJFQURMSU5FX0ZPVU5EIFRSVUUpCitlbHNlKFJFQURMSU5FX0lOQ0xVREVfRElSIEFORCBSRUFETElORV9MSUJSQVJZIEFORCBOQ1VSU0VTX0xJQlJBUlkpCisgIEZJTkRfUEFUSChSRUFETElORV9JTkNMVURFX0RJUiByZWFkbGluZS9yZWFkbGluZS5oCisgICAgL3Vzci9pbmNsdWRlL3JlYWRsaW5lCisgICkKKyAgCisjIDIwMDgtMDQtMjIgVGhlIG5leHQgY2xhdXNlIHVzZWQgdG8gcmVhZCBsaWtlIHRoaXM6CisjCisjICBGSU5EX0xJQlJBUlkoUkVBRExJTkVfTElCUkFSWSBOQU1FUyByZWFkbGluZSkKKyMgICAgICAgIEZJTkRfTElCUkFSWShOQ1VSU0VTX0xJQlJBUlkgTkFNRVMgbmN1cnNlcyApCisjICAgICAgICBpbmNsdWRlKEZpbmRQYWNrYWdlSGFuZGxlU3RhbmRhcmRBcmdzKQorIyAgICAgICAgRklORF9QQUNLQUdFX0hBTkRMRV9TVEFOREFSRF9BUkdTKFJlYWRsaW5lIERFRkFVTFRfTVNHIE5DVVJTRVNfTElCUkFSWSBSRUFETElORV9JTkNMVURFX0RJUiBSRUFETElORV9MSUJSQVJZICkKKyMKKyMgSSB3YXMgYWR2aXNlZCB0byBtb2RpZnkgaXQgc3VjaCB0aGF0IGl0IHdpbGwgZmluZCBhbiBuY3Vyc2VzIGxpYnJhcnkgaWYKKyMgcmVxdWlyZWQsIGJ1dCBub3QgaWYgb25lIHdhcyBleHBsaWNpdGx5IGdpdmVuLCB0aGF0IGlzLCBpdCBhbGxvd3MgdGhlCisjIGRlZmF1bHQgdG8gYmUgb3ZlcnJpZGRlbi4gUEggCisKKyAgRklORF9MSUJSQVJZKFJFQURMSU5FX0xJQlJBUlkgTkFNRVMgcmVhZGxpbmUpCisgICAgICAgIGluY2x1ZGUoRmluZFBhY2thZ2VIYW5kbGVTdGFuZGFyZEFyZ3MpCisgICAgICAgIEZJTkRfUEFDS0FHRV9IQU5ETEVfU1RBTkRBUkRfQVJHUyhSZWFkbGluZSBERUZBVUxUX01TRyBSRUFETElORV9JTkNMVURFX0RJUiBSRUFETElORV9MSUJSQVJZICkKKworICBNQVJLX0FTX0FEVkFOQ0VEKFJFQURMSU5FX0lOQ0xVREVfRElSIFJFQURMSU5FX0xJQlJBUlkpCitlbmRpZihSRUFETElORV9JTkNMVURFX0RJUiBBTkQgUkVBRExJTkVfTElCUkFSWSBBTkQgTkNVUlNFU19MSUJSQVJZKQpkaWZmIC0tZ2l0IGEvZGlzdDIvY29tcGlsZSBiL2Rpc3QyL2NvbXBpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTg1YjcyMwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2NvbXBpbGUKQEAgLTAsMCArMSwzNDcgQEAKKyMhIC9iaW4vc2gKKyMgV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kICctYyAtbycuCisKK3NjcmlwdHZlcnNpb249MjAxMi0xMC0xNC4xMTsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBUb20gVHJvbWV5IDx0cm9tZXlAY3lnbnVzLmNvbT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBUaGlzIGZpbGUgaXMgbWFpbnRhaW5lZCBpbiBBdXRvbWFrZSwgcGxlYXNlIHJlcG9ydAorIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCisjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgorCitubD0nCisnCisKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgdG9vbHMgZnJvbSBjb21wbGFpbmluZyBhYm91dCB3aGl0ZXNwYWNlIHVzYWdlLgorSUZTPSIgIiIJJG5sIgorCitmaWxlX2NvbnY9CisKKyMgZnVuY19maWxlX2NvbnYgYnVpbGRfZmlsZSBsYXp5CisjIENvbnZlcnQgYSAkYnVpbGQgZmlsZSB0byAkaG9zdCBmb3JtIGFuZCBzdG9yZSBpdCBpbiAkZmlsZQorIyBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBXaW5kb3dzIGhvc3RzLiBJZiB0aGUgZGV0ZXJtaW5lZCBjb252ZXJzaW9uCisjIHR5cGUgaXMgbGlzdGVkIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHdpbGwKKyMgdGFrZSBwbGFjZS4KK2Z1bmNfZmlsZV9jb252ICgpCit7CisgIGZpbGU9JDEKKyAgY2FzZSAkZmlsZSBpbgorICAgIC8gfCAvWyEvXSopICMgYWJzb2x1dGUgZmlsZSwgYW5kIG5vdCBhIFVOQyBmaWxlCisgICAgICBpZiB0ZXN0IC16ICIkZmlsZV9jb252IjsgdGhlbgorCSMgbGF6aWx5IGRldGVybWluZSBob3cgdG8gY29udmVydCBhYnMgZmlsZXMKKwljYXNlIGB1bmFtZSAtc2AgaW4KKwkgIE1JTkdXKikKKwkgICAgZmlsZV9jb252PW1pbmd3CisJICAgIDs7CisJICBDWUdXSU4qKQorCSAgICBmaWxlX2NvbnY9Y3lnd2luCisJICAgIDs7CisJICAqKQorCSAgICBmaWxlX2NvbnY9d2luZQorCSAgICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBjYXNlICRmaWxlX2NvbnYvLCQyLCBpbgorCSosJGZpbGVfY29udiwqKQorCSAgOzsKKwltaW5ndy8qKQorCSAgZmlsZT1gY21kIC8vQyBlY2hvICIkZmlsZSAiIHwgc2VkIC1lICdzLyJcKC4qXCkgIiAqJC9cMS8nYAorCSAgOzsKKwljeWd3aW4vKikKKwkgIGZpbGU9YGN5Z3BhdGggLW0gIiRmaWxlIiB8fCBlY2hvICIkZmlsZSJgCisJICA7OworCXdpbmUvKikKKwkgIGZpbGU9YHdpbmVwYXRoIC13ICIkZmlsZSIgfHwgZWNobyAiJGZpbGUiYAorCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2NsX2Rhc2hMIGxpbmtkaXIKKyMgTWFrZSBjbCBsb29rIGZvciBsaWJyYXJpZXMgaW4gTElOS0RJUgorZnVuY19jbF9kYXNoTCAoKQoreworICBmdW5jX2ZpbGVfY29udiAiJDEiCisgIGlmIHRlc3QgLXogIiRsaWJfcGF0aCI7IHRoZW4KKyAgICBsaWJfcGF0aD0kZmlsZQorICBlbHNlCisgICAgbGliX3BhdGg9IiRsaWJfcGF0aDskZmlsZSIKKyAgZmkKKyAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAtTElCUEFUSDokZmlsZSIKK30KKworIyBmdW5jX2NsX2Rhc2hsIGxpYnJhcnkKKyMgRG8gYSBsaWJyYXJ5IHNlYXJjaC1wYXRoIGxvb2t1cCBmb3IgY2wKK2Z1bmNfY2xfZGFzaGwgKCkKK3sKKyAgbGliPSQxCisgIGZvdW5kPW5vCisgIHNhdmVfSUZTPSRJRlMKKyAgSUZTPSc7JworICBmb3IgZGlyIGluICRsaWJfcGF0aCAkTElCCisgIGRvCisgICAgSUZTPSRzYXZlX0lGUworICAgIGlmICRzaGFyZWQgJiYgdGVzdCAtZiAiJGRpci8kbGliLmRsbC5saWIiOyB0aGVuCisgICAgICBmb3VuZD15ZXMKKyAgICAgIGxpYj0kZGlyLyRsaWIuZGxsLmxpYgorICAgICAgYnJlYWsKKyAgICBmaQorICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYi5saWIiOyB0aGVuCisgICAgICBmb3VuZD15ZXMKKyAgICAgIGxpYj0kZGlyLyRsaWIubGliCisgICAgICBicmVhaworICAgIGZpCisgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbGliLmEiOyB0aGVuCisgICAgICBmb3VuZD15ZXMKKyAgICAgIGxpYj0kZGlyL2xpYiRsaWIuYQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0kc2F2ZV9JRlMKKworICBpZiB0ZXN0ICIkZm91bmQiICE9IHllczsgdGhlbgorICAgIGxpYj0kbGliLmxpYgorICBmaQorfQorCisjIGZ1bmNfY2xfd3JhcHBlciBjbCBhcmcuLi4KKyMgQWRqdXN0IGNvbXBpbGUgY29tbWFuZCB0byBzdWl0IGNsCitmdW5jX2NsX3dyYXBwZXIgKCkKK3sKKyAgIyBBc3N1bWUgYSBjYXBhYmxlIHNoZWxsCisgIGxpYl9wYXRoPQorICBzaGFyZWQ9OgorICBsaW5rZXJfb3B0cz0KKyAgZm9yIGFyZworICBkbworICAgIGlmIHRlc3QgLW4gIiRlYXQiOyB0aGVuCisgICAgICBlYXQ9CisgICAgZWxzZQorICAgICAgY2FzZSAkMSBpbgorCS1vKQorCSAgIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzICdjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCisJICBlYXQ9MQorCSAgY2FzZSAkMiBpbgorCSAgICAqLm8gfCAqLltvT11bYkJdW2pKXSkKKwkgICAgICBmdW5jX2ZpbGVfY29udiAiJDIiCisJICAgICAgc2V0IHggIiRAIiAtRm8iJGZpbGUiCisJICAgICAgc2hpZnQKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgIGZ1bmNfZmlsZV9jb252ICIkMiIKKwkgICAgICBzZXQgeCAiJEAiIC1GZSIkZmlsZSIKKwkgICAgICBzaGlmdAorCSAgICAgIDs7CisJICBlc2FjCisJICA7OworCS1JKQorCSAgZWF0PTEKKwkgIGZ1bmNfZmlsZV9jb252ICIkMiIgbWluZ3cKKwkgIHNldCB4ICIkQCIgLUkiJGZpbGUiCisJICBzaGlmdAorCSAgOzsKKwktSSopCisJICBmdW5jX2ZpbGVfY29udiAiJHsxIy1JfSIgbWluZ3cKKwkgIHNldCB4ICIkQCIgLUkiJGZpbGUiCisJICBzaGlmdAorCSAgOzsKKwktbCkKKwkgIGVhdD0xCisJICBmdW5jX2NsX2Rhc2hsICIkMiIKKwkgIHNldCB4ICIkQCIgIiRsaWIiCisJICBzaGlmdAorCSAgOzsKKwktbCopCisJICBmdW5jX2NsX2Rhc2hsICIkezEjLWx9IgorCSAgc2V0IHggIiRAIiAiJGxpYiIKKwkgIHNoaWZ0CisJICA7OworCS1MKQorCSAgZWF0PTEKKwkgIGZ1bmNfY2xfZGFzaEwgIiQyIgorCSAgOzsKKwktTCopCisJICBmdW5jX2NsX2Rhc2hMICIkezEjLUx9IgorCSAgOzsKKwktc3RhdGljKQorCSAgc2hhcmVkPWZhbHNlCisJICA7OworCS1XbCwqKQorCSAgYXJnPSR7MSMtV2wsfQorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJICBmb3IgZmxhZyBpbiAkYXJnOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAkZmxhZyIKKwkgIGRvbmUKKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgOzsKKwktWGxpbmtlcikKKwkgIGVhdD0xCisJICBsaW5rZXJfb3B0cz0iJGxpbmtlcl9vcHRzICQyIgorCSAgOzsKKwktKikKKwkgIHNldCB4ICIkQCIgIiQxIgorCSAgc2hpZnQKKwkgIDs7CisJKi5jYyB8ICouQ0MgfCAqLmN4eCB8ICouQ1hYIHwgKi5bY0NdKyspCisJICBmdW5jX2ZpbGVfY29udiAiJDEiCisJICBzZXQgeCAiJEAiIC1UcCIkZmlsZSIKKwkgIHNoaWZ0CisJICA7OworCSouYyB8ICouY3BwIHwgKi5DUFAgfCAqLmxpYiB8ICouTElCIHwgKi5MaWIgfCAqLk9CSiB8ICoub2JqIHwgKi5bb09dKQorCSAgZnVuY19maWxlX2NvbnYgIiQxIiBtaW5ndworCSAgc2V0IHggIiRAIiAiJGZpbGUiCisJICBzaGlmdAorCSAgOzsKKwkqKQorCSAgc2V0IHggIiRAIiAiJDEiCisJICBzaGlmdAorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIHNoaWZ0CisgIGRvbmUKKyAgaWYgdGVzdCAtbiAiJGxpbmtlcl9vcHRzIjsgdGhlbgorICAgIGxpbmtlcl9vcHRzPSItbGluayRsaW5rZXJfb3B0cyIKKyAgZmkKKyAgZXhlYyAiJEAiICRsaW5rZXJfb3B0cworICBleGl0IDEKK30KKworZWF0PQorCitjYXNlICQxIGluCisgICcnKQorICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZXhpdCAxOworICAgICA7OworICAtaCB8IC0taCopCisgICAgY2F0IDw8XEVPRgorVXNhZ2U6IGNvbXBpbGUgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KKworV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kICctYyAtbycuCitSZW1vdmUgJy1vIGRlc3QubycgZnJvbSBBUkdTLCBydW4gUFJPR1JBTSB3aXRoIHRoZSByZW1haW5pbmcKK2FyZ3VtZW50cywgYW5kIHJlbmFtZSB0aGUgb3V0cHV0IGFzIGV4cGVjdGVkLgorCitJZiB5b3UgYXJlIHRyeWluZyB0byBidWlsZCBhIHdob2xlIHBhY2thZ2UgdGhpcyBpcyBub3QgdGhlCityaWdodCBzY3JpcHQgdG8gcnVuOiBwbGVhc2Ugc3RhcnQgYnkgcmVhZGluZyB0aGUgZmlsZSAnSU5TVEFMTCcuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gImNvbXBpbGUgJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7CisgIGNsIHwgKlsvXFxdY2wgfCBjbC5leGUgfCAqWy9cXF1jbC5leGUgKQorICAgIGZ1bmNfY2xfd3JhcHBlciAiJEAiICAgICAgIyBEb2Vzbid0IHJldHVybi4uLgorICAgIDs7Citlc2FjCisKK29maWxlPQorY2ZpbGU9CisKK2ZvciBhcmcKK2RvCisgIGlmIHRlc3QgLW4gIiRlYXQiOyB0aGVuCisgICAgZWF0PQorICBlbHNlCisgICAgY2FzZSAkMSBpbgorICAgICAgLW8pCisJIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzICdjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCisJIyBTbyB3ZSBzdHJpcCAnLW8gYXJnJyBvbmx5IGlmIGFyZyBpcyBhbiBvYmplY3QuCisJZWF0PTEKKwljYXNlICQyIGluCisJICAqLm8gfCAqLm9iaikKKwkgICAgb2ZpbGU9JDIKKwkgICAgOzsKKwkgICopCisJICAgIHNldCB4ICIkQCIgLW8gIiQyIgorCSAgICBzaGlmdAorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKi5jKQorCWNmaWxlPSQxCisJc2V0IHggIiRAIiAiJDEiCisJc2hpZnQKKwk7OworICAgICAgKikKKwlzZXQgeCAiJEAiICIkMSIKKwlzaGlmdAorCTs7CisgICAgZXNhYworICBmaQorICBzaGlmdAorZG9uZQorCitpZiB0ZXN0IC16ICIkb2ZpbGUiIHx8IHRlc3QgLXogIiRjZmlsZSI7IHRoZW4KKyAgIyBJZiBubyAnLW8nIG9wdGlvbiB3YXMgc2VlbiB0aGVuIHdlIG1pZ2h0IGhhdmUgYmVlbiBpbnZva2VkIGZyb20gYQorICAjIHBhdHRlcm4gcnVsZSB3aGVyZSB3ZSBkb24ndCBuZWVkIG9uZS4gIFRoYXQgaXMgb2sgLS0gdGhpcyBpcyBhCisgICMgbm9ybWFsIGNvbXBpbGF0aW9uIHRoYXQgdGhlIGxvc2luZyBjb21waWxlciBjYW4gaGFuZGxlLiAgSWYgbm8KKyAgIyAnLmMnIGZpbGUgd2FzIHNlZW4gdGhlbiB3ZSBhcmUgcHJvYmFibHkgbGlua2luZy4gIFRoYXQgaXMgYWxzbworICAjIG9rLgorICBleGVjICIkQCIKK2ZpCisKKyMgTmFtZSBvZiBmaWxlIHdlIGV4cGVjdCBjb21waWxlciB0byBjcmVhdGUuCitjb2ZpbGU9YGVjaG8gIiRjZmlsZSIgfCBzZWQgJ3N8Xi4qW1xcL118fDsgc3xeW2EtekEtWl06fHw7IHMvXC5jJC8uby8nYAorCisjIENyZWF0ZSB0aGUgbG9jayBkaXJlY3RvcnkuCisjIE5vdGU6IHVzZSAnWy9cXDouLV0nIGhlcmUgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgdXNlIHRoZSBzYW1lIG5hbWUKKyMgdGhhdCB3ZSBhcmUgdXNpbmcgZm9yIHRoZSAubyBmaWxlLiAgQWxzbywgYmFzZSB0aGUgbmFtZSBvbiB0aGUgZXhwZWN0ZWQKKyMgb2JqZWN0IGZpbGUgbmFtZSwgc2luY2UgdGhhdCBpcyB3aGF0IG1hdHRlcnMgd2l0aCBhIHBhcmFsbGVsIGJ1aWxkLgorbG9ja2Rpcj1gZWNobyAiJGNvZmlsZSIgfCBzZWQgLWUgJ3N8Wy9cXDouLV18X3xnJ2AuZAord2hpbGUgdHJ1ZTsgZG8KKyAgaWYgbWtkaXIgIiRsb2NrZGlyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBicmVhaworICBmaQorICBzbGVlcCAxCitkb25lCisjIEZJWE1FOiByYWNlIGNvbmRpdGlvbiBoZXJlIGlmIHVzZXIga2lsbHMgYmV0d2VlbiBta2RpciBhbmQgdHJhcC4KK3RyYXAgInJtZGlyICckbG9ja2Rpcic7IGV4aXQgMSIgMSAyIDE1CisKKyMgUnVuIHRoZSBjb21waWxlLgorIiRAIgorcmV0PSQ/CisKK2lmIHRlc3QgLWYgIiRjb2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRjb2ZpbGUiID0gIiRvZmlsZSIgfHwgbXYgIiRjb2ZpbGUiICIkb2ZpbGUiCitlbGlmIHRlc3QgLWYgIiR7Y29maWxlfWJqIjsgdGhlbgorICB0ZXN0ICIke2NvZmlsZX1iaiIgPSAiJG9maWxlIiB8fCBtdiAiJHtjb2ZpbGV9YmoiICIkb2ZpbGUiCitmaQorCitybWRpciAiJGxvY2tkaXIiCitleGl0ICRyZXQKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2Rpc3QyL2NvbmZpZy1jbWFrZS5oLmluIGIvZGlzdDIvY29uZmlnLWNtYWtlLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmZDhiMQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2NvbmZpZy1jbWFrZS5oLmluCkBAIC0wLDAgKzEsNDggQEAKKy8qIGNvbmZpZy5oIGZvciBDTWFrZSBidWlsZHMgKi8KKworI2NtYWtlZGVmaW5lIEhBVkVfRElSRU5UX0ggMQorI2NtYWtlZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxICAgIAorI2NtYWtlZGVmaW5lIEhBVkVfU1RESU5UX0ggMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2NtYWtlZGVmaW5lIEhBVkVfU1RSRVJST1IgMQorI2NtYWtlZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisjY21ha2VkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisjY21ha2VkZWZpbmUgSEFWRV9VTklTVERfSCAxCisjY21ha2VkZWZpbmUgSEFWRV9XSU5ET1dTX0ggMQorCisjY21ha2VkZWZpbmUgSEFWRV9CQ09QWSAxCisjY21ha2VkZWZpbmUgSEFWRV9NRU1NT1ZFIDEKKworI2NtYWtlZGVmaW5lIFBDUkUyX1NUQVRJQyAxCisKKyNjbWFrZWRlZmluZSBTVVBQT1JUX1BDUkUyXzggMQorI2NtYWtlZGVmaW5lIFNVUFBPUlRfUENSRTJfMTYgMQorI2NtYWtlZGVmaW5lIFNVUFBPUlRfUENSRTJfMzIgMQorI2NtYWtlZGVmaW5lIFBDUkUyX0RFQlVHIDEKKworI2NtYWtlZGVmaW5lIFNVUFBPUlRfTElCQloyIDEKKyNjbWFrZWRlZmluZSBTVVBQT1JUX0xJQkVESVQgMQorI2NtYWtlZGVmaW5lIFNVUFBPUlRfTElCUkVBRExJTkUgMQorI2NtYWtlZGVmaW5lIFNVUFBPUlRfTElCWiAxCisKKyNjbWFrZWRlZmluZSBTVVBQT1JUX0pJVCAxCisjY21ha2VkZWZpbmUgU1VQUE9SVF9QQ1JFMkdSRVBfSklUIDEKKyNjbWFrZWRlZmluZSBTVVBQT1JUX1VOSUNPREUgMQorI2NtYWtlZGVmaW5lIFNVUFBPUlRfVkFMR1JJTkQgMQorCisjY21ha2VkZWZpbmUgQlNSX0FOWUNSTEYgMQorI2NtYWtlZGVmaW5lIEVCQ0RJQyAxCisjY21ha2VkZWZpbmUgRUJDRElDX05MMjUgMQorI2NtYWtlZGVmaW5lIEhFQVBfTUFUQ0hfUkVDVVJTRSAxCisjY21ha2VkZWZpbmUgTkVWRVJfQkFDS1NMQVNIX0MgMQorCisjZGVmaW5lIExJTktfU0laRQkJQFBDUkUyX0xJTktfU0laRUAKKyNkZWZpbmUgTUFUQ0hfTElNSVQJCUBQQ1JFMl9NQVRDSF9MSU1JVEAKKyNkZWZpbmUgTUFUQ0hfTElNSVRfUkVDVVJTSU9OCUBQQ1JFMl9NQVRDSF9MSU1JVF9SRUNVUlNJT05ACisjZGVmaW5lIE5FV0xJTkVfREVGQVVMVCAgICAgICAgIEBORVdMSU5FX0RFRkFVTFRACisjZGVmaW5lIFBBUkVOU19ORVNUX0xJTUlUICAgICAgIEBQQ1JFMl9QQVJFTlNfTkVTVF9MSU1JVEAKKyNkZWZpbmUgUENSRTJHUkVQX0JVRlNJWkUgICAgICAgQFBDUkUyR1JFUF9CVUZTSVpFQAorCisjZGVmaW5lIE1BWF9OQU1FX1NJWkUJMzIKKyNkZWZpbmUgTUFYX05BTUVfQ09VTlQJMTAwMDAKKworLyogZW5kIGNvbmZpZy5oIGZvciBDTWFrZSBidWlsZHMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL2NvbmZpZy5ndWVzcyBiL2Rpc3QyL2NvbmZpZy5ndWVzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42YzMyYzg2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvY29uZmlnLmd1ZXNzCkBAIC0wLDAgKzEsMTQyMSBAQAorIyEgL2Jpbi9zaAorIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgorIyAgIENvcHlyaWdodCAxOTkyLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAxNC0xMS0wNCcKKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0CisjIHByb2dyYW0uICBUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3CisjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4KKyMKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyOyBtYWludGFpbmVkIHNpbmNlIDIwMDAgYnkgQmVuIEVsbGlzdG9uLgorIworIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECisjCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LgorCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dCisKK091dHB1dCB0aGUgY29uZmlndXJhdGlvbiBuYW1lIG9mIHRoZSBzeXN0ZW0gXGAkbWUnIGlzIHJ1biBvbi4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQorCitPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCitDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTword2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgorCitoZWxwPSIKK1RyeSBcYCRtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworIyBQYXJzZSBjb21tYW5kIGxpbmUKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLS10aW1lLXN0YW1wIHwgLS10aW1lKiB8IC10ICkKKyAgICAgICBlY2hvICIkdGltZXN0YW1wIiA7IGV4aXQgOzsKKyAgICAtLXZlcnNpb24gfCAtdiApCisgICAgICAgZWNobyAiJHZlcnNpb24iIDsgZXhpdCA7OworICAgIC0taGVscCB8IC0taCogfCAtaCApCisgICAgICAgZWNobyAiJHVzYWdlIjsgZXhpdCA7OworICAgIC0tICkgICAgICMgU3RvcCBvcHRpb24gcHJvY2Vzc2luZworICAgICAgIHNoaWZ0OyBicmVhayA7OworICAgIC0gKQkjIFVzZSBzdGRpbiBhcyBpbnB1dC4KKyAgICAgICBicmVhayA7OworICAgIC0qICkKKyAgICAgICBlY2hvICIkbWU6IGludmFsaWQgb3B0aW9uICQxJGhlbHAiID4mMgorICAgICAgIGV4aXQgMSA7OworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworaWYgdGVzdCAkIyAhPSAwOyB0aGVuCisgIGVjaG8gIiRtZTogdG9vIG1hbnkgYXJndW1lbnRzJGhlbHAiID4mMgorICBleGl0IDEKK2ZpCisKK3RyYXAgJ2V4aXQgMScgMSAyIDE1CisKKyMgQ0NfRk9SX0JVSUxEIC0tIGNvbXBpbGVyIHVzZWQgYnkgdGhpcyBzY3JpcHQuIE5vdGUgdGhhdCB0aGUgdXNlIG9mIGEKKyMgY29tcGlsZXIgdG8gYWlkIGluIHN5c3RlbSBkZXRlY3Rpb24gaXMgZGlzY291cmFnZWQgYXMgaXQgcmVxdWlyZXMKKyMgdGVtcG9yYXJ5IGZpbGVzIHRvIGJlIGNyZWF0ZWQgYW5kLCBhcyB5b3UgY2FuIHNlZSBiZWxvdywgaXQgaXMgYQorIyBoZWFkYWNoZSB0byBkZWFsIHdpdGggaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgorCisjIEhpc3RvcmljYWxseSwgYENDX0ZPUl9CVUlMRCcgdXNlZCB0byBiZSBuYW1lZCBgSE9TVF9DQycuIFdlIHN0aWxsCisjIHVzZSBgSE9TVF9DQycgaWYgZGVmaW5lZCwgYnV0IGl0IGlzIGRlcHJlY2F0ZWQuCisKKyMgUG9ydGFibGUgdG1wIGRpcmVjdG9yeSBjcmVhdGlvbiBpbnNwaXJlZCBieSB0aGUgQXV0b2NvbmYgdGVhbS4KKworc2V0X2NjX2Zvcl9idWlsZD0nCit0cmFwICJleGl0Y29kZT1cJD87IChybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbCkgJiYgZXhpdCBcJGV4aXRjb2RlIiAwIDsKK3RyYXAgInJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsOyBleGl0IDEiIDEgMiAxMyAxNSA7Cis6ICR7VE1QRElSPS90bXB9IDsKKyB7IHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIiRUTVBESVIvY2dYWFhYWFgiKSAyPi9kZXYvbnVsbGAgJiYgdGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCIgOyB9IHx8CisgeyB0ZXN0IC1uICIkUkFORE9NIiAmJiB0bXA9JFRNUERJUi9jZyQkLSRSQU5ET00gJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSA7IH0gfHwKKyB7IHRtcD0kVE1QRElSL2NnLSQkICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgJiYgZWNobyAiV2FybmluZzogY3JlYXRpbmcgaW5zZWN1cmUgdGVtcCBkaXJlY3RvcnkiID4mMiA7IH0gfHwKKyB7IGVjaG8gIiRtZTogY2Fubm90IGNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gJFRNUERJUiIgPiYyIDsgZXhpdCAxIDsgfSA7CitkdW1teT0kdG1wL2R1bW15IDsKK3RtcGZpbGVzPSIkZHVtbXkuYyAkZHVtbXkubyAkZHVtbXkucmVsICRkdW1teSIgOworY2FzZSAkQ0NfRk9SX0JVSUxELCRIT1NUX0NDLCRDQyBpbgorICwsKSAgICBlY2hvICJpbnQgeDsiID4gJGR1bW15LmMgOworCWZvciBjIGluIGNjIGdjYyBjODkgYzk5IDsgZG8KKwkgIGlmICgkYyAtYyAtbyAkZHVtbXkubyAkZHVtbXkuYykgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICAgQ0NfRk9SX0JVSUxEPSIkYyI7IGJyZWFrIDsKKwkgIGZpIDsKKwlkb25lIDsKKwlpZiB0ZXN0IHgiJENDX0ZPUl9CVUlMRCIgPSB4IDsgdGhlbgorCSAgQ0NfRk9SX0JVSUxEPW5vX2NvbXBpbGVyX2ZvdW5kIDsKKwlmaQorCTs7CisgLCwqKSAgIENDX0ZPUl9CVUlMRD0kQ0MgOzsKKyAsKiwqKSAgQ0NfRk9SX0JVSUxEPSRIT1NUX0NDIDs7Citlc2FjIDsgc2V0X2NjX2Zvcl9idWlsZD0gOycKKworIyBUaGlzIGlzIG5lZWRlZCB0byBmaW5kIHVuYW1lIG9uIGEgUHlyYW1pZCBPU3ggd2hlbiBydW4gaW4gdGhlIEJTRCB1bml2ZXJzZS4KKyMgKGdoYXppQG5vYy5ydXRnZXJzLmVkdSAxOTk0LTA4LTI0KQoraWYgKHRlc3QgLWYgLy5hdHRiaW4vdW5hbWUpID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwlQQVRIPSRQQVRIOi8uYXR0YmluIDsgZXhwb3J0IFBBVEgKK2ZpCisKK1VOQU1FX01BQ0hJTkU9YCh1bmFtZSAtbSkgMj4vZGV2L251bGxgIHx8IFVOQU1FX01BQ0hJTkU9dW5rbm93bgorVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfUkVMRUFTRT11bmtub3duCitVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgorVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCisKK2Nhc2UgIiR7VU5BTUVfU1lTVEVNfSIgaW4KK0xpbnV4fEdOVXxHTlUvKikKKwkjIElmIHRoZSBzeXN0ZW0gbGFja3MgYSBjb21waWxlciwgdGhlbiBqdXN0IHBpY2sgZ2xpYmMuCisJIyBXZSBjb3VsZCBwcm9iYWJseSB0cnkgaGFyZGVyLgorCUxJQkM9Z251CisKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJY2F0IDw8LUVPRiA+ICRkdW1teS5jCisJI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisJI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKKwlMSUJDPXVjbGliYworCSNlbGlmIGRlZmluZWQoX19kaWV0bGliY19fKQorCUxJQkM9ZGlldGxpYmMKKwkjZWxzZQorCUxJQkM9Z251CisJI2VuZGlmCisJRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJyB8IHNlZCAncywgLCxnJ2AKKwk7OworZXNhYworCisjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCisKK2Nhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KKyAgICAqOk5ldEJTRDoqOiopCisJIyBOZXRCU0QgKG5ic2QpIHRhcmdldHMgc2hvdWxkICh3aGVyZSBhcHBsaWNhYmxlKSBtYXRjaCBvbmUgb3IKKwkjIG1vcmUgb2YgdGhlIHR1cGxlczogKi0qLW5ldGJzZGVsZiosICotKi1uZXRic2Rhb3V0KiwKKwkjICotKi1uZXRic2RlY29mZiogYW5kICotKi1uZXRic2QqLiAgRm9yIHRhcmdldHMgdGhhdCByZWNlbnRseQorCSMgc3dpdGNoZWQgdG8gRUxGLCAqLSotbmV0YnNkKiB3b3VsZCBzZWxlY3QgdGhlIG9sZAorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LiAgVGhpcyBwcm92aWRlcyBib3RoIGZvcndhcmQKKwkjIGNvbXBhdGliaWxpdHkgYW5kIGEgY29uc2lzdGVudCBtZWNoYW5pc20gZm9yIHNlbGVjdGluZyB0aGUKKwkjIG9iamVjdCBmaWxlIGZvcm1hdC4KKwkjCisJIyBOb3RlOiBOZXRCU0QgZG9lc24ndCBwYXJ0aWN1bGFybHkgY2FyZSBhYm91dCB0aGUgdmVuZG9yCisJIyBwb3J0aW9uIG9mIHRoZSBuYW1lLiAgV2UgYWx3YXlzIHNldCBpdCB0byAidW5rbm93biIuCisJc3lzY3RsPSJzeXNjdGwgLW4gaHcubWFjaGluZV9hcmNoIgorCVVOQU1FX01BQ0hJTkVfQVJDSD1gKC9zYmluLyRzeXNjdGwgMj4vZGV2L251bGwgfHwgXAorCSAgICAvdXNyL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd24pYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORV9BUkNIfSIgaW4KKwkgICAgYXJtZWIpIG1hY2hpbmU9YXJtZWItdW5rbm93biA7OworCSAgICBhcm0qKSBtYWNoaW5lPWFybS11bmtub3duIDs7CisJICAgIHNoM2VsKSBtYWNoaW5lPXNobC11bmtub3duIDs7CisJICAgIHNoM2ViKSBtYWNoaW5lPXNoLXVua25vd24gOzsKKwkgICAgc2g1ZWwpIG1hY2hpbmU9c2g1bGUtdW5rbm93biA7OworCSAgICAqKSBtYWNoaW5lPSR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duIDs7CisJZXNhYworCSMgVGhlIE9wZXJhdGluZyBTeXN0ZW0gaW5jbHVkaW5nIG9iamVjdCBmb3JtYXQsIGlmIGl0IGhhcyBzd2l0Y2hlZAorCSMgdG8gRUxGIHJlY2VudGx5LCBvciB3aWxsIGluIHRoZSBmdXR1cmUuCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm0qfGkzODZ8bTY4a3xuczMya3xzaDMqfHNwYXJjfHZheCkKKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlpZiBlY2hvIF9fRUxGX18gfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAorCQkJfCBncmVwIC1xIF9fRUxGX18KKwkJdGhlbgorCQkgICAgIyBPbmNlIGFsbCB1dGlsaXRpZXMgY2FuIGJlIEVDT0ZGIChuZXRic2RlY29mZikgb3IgYS5vdXQgKG5ldGJzZGFvdXQpLgorCQkgICAgIyBSZXR1cm4gbmV0YnNkIGZvciBlaXRoZXIuICBGSVg/CisJCSAgICBvcz1uZXRic2QKKwkJZWxzZQorCQkgICAgb3M9bmV0YnNkZWxmCisJCWZpCisJCTs7CisJICAgICopCisJCW9zPW5ldGJzZAorCQk7OworCWVzYWMKKwkjIFRoZSBPUyByZWxlYXNlCisJIyBEZWJpYW4gR05VL05ldEJTRCBtYWNoaW5lcyBoYXZlIGEgZGlmZmVyZW50IHVzZXJsYW5kLCBhbmQKKwkjIHRodXMsIG5lZWQgYSBkaXN0aW5jdCB0cmlwbGV0LiBIb3dldmVyLCB0aGV5IGRvIG5vdCBuZWVkCisJIyBrZXJuZWwgdmVyc2lvbiBpbmZvcm1hdGlvbiwgc28gaXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYQorCSMgc3VpdGFibGUgdGFnLCBpbiB0aGUgc3R5bGUgb2YgbGludXgtZ251LgorCWNhc2UgIiR7VU5BTUVfVkVSU0lPTn0iIGluCisJICAgIERlYmlhbiopCisJCXJlbGVhc2U9Jy1nbnUnCisJCTs7CisJICAgICopCisJCXJlbGVhc2U9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy1fXS4qL1wuLydgCisJCTs7CisJZXNhYworCSMgU2luY2UgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNOgorCSMgY29udGFpbnMgcmVkdW5kYW50IGluZm9ybWF0aW9uLCB0aGUgc2hvcnRlciBmb3JtOgorCSMgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0gaXMgdXNlZC4KKwllY2hvICIke21hY2hpbmV9LSR7b3N9JHtyZWxlYXNlfSIKKwlleGl0IDs7CisgICAgKjpCaXRyaWc6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9CaXRyaWcuLy8nYAorCWVjaG8gJHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24tYml0cmlnJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk9wZW5CU0Q6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJ2AKKwllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6ZWtrb0JTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZWtrb2JzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpTb2xpZEJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc29saWRic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpNaXJCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYWxwaGE6T1NGMToqOiopCisJY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgorCSo0LjApCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCisJCTs7CisJKjUuKikKKwkJVU5BTUVfUkVMRUFTRT1gL3Vzci9zYmluL3NpemVyIC12IHwgYXdrICd7cHJpbnQgJDR9J2AKKwkJOzsKKwllc2FjCisJIyBBY2NvcmRpbmcgdG8gQ29tcGFxLCAvdXNyL3NiaW4vcHNyaW5mbyBoYXMgYmVlbiBhdmFpbGFibGUgb24KKwkjIE9TRi8xIGFuZCBUcnU2NCBzeXN0ZW1zIHByb2R1Y2VkIHNpbmNlIDE5OTUuICBJIGhvcGUgdGhhdAorCSMgY292ZXJzIG1vc3Qgc3lzdGVtcyBydW5uaW5nIHRvZGF5LiAgVGhpcyBjb2RlIHBpcGVzIHRoZSBDUFUKKwkjIHR5cGVzIHRocm91Z2ggaGVhZCAtbiAxLCBzbyB3ZSBvbmx5IGRldGVjdCB0aGUgdHlwZSBvZiBDUFUgMC4KKwlBTFBIQV9DUFVfVFlQRT1gL3Vzci9zYmluL3BzcmluZm8gLXYgfCBzZWQgLW4gLWUgJ3MvXiAgVGhlIGFscGhhIFwoLipcKSBwcm9jZXNzb3IuKiQvXDEvcCcgfCBoZWFkIC1uIDFgCisJY2FzZSAiJEFMUEhBX0NQVV9UWVBFIiBpbgorCSAgICAiRVY0ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNC41ICgyMTA2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkxDQTQgKDIxMDY2LzIxMDY4KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhIiA7OworCSAgICAiRVY1ICgyMTE2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NSIgOzsKKwkgICAgIkVWNS42ICgyMTE2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjU2IiA7OworCSAgICAiRVY1LjYgKDIxMTY0UEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFwY2E1NiIgOzsKKwkgICAgIkVWNS43ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTciIDs7CisJICAgICJFVjYgKDIxMjY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2IiA7OworCSAgICAiRVY2LjcgKDIxMjY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjciIDs7CisJICAgICJFVjYuOENCICgyMTI2NEMpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjhBTCAoMjEyNjRCKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44Q1ggKDIxMjY0RCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOUEgKDIxMjY0L0VWNjlBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OSIgOzsKKwkgICAgIkVWNyAoMjEzNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjciIDs7CisJICAgICJFVjcuOSAoMjEzNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3OSIgOzsKKwllc2FjCisJIyBBIFBuLm4gdmVyc2lvbiBpcyBhIHBhdGNoZWQgdmVyc2lvbi4KKwkjIEEgVm4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgdmVyc2lvbi4KKwkjIEEgVG4ubiB2ZXJzaW9uIGlzIGEgcmVsZWFzZWQgZmllbGQgdGVzdCB2ZXJzaW9uLgorCSMgQSBYbi5uIHZlcnNpb24gaXMgYW4gdW5yZWxlYXNlZCBleHBlcmltZW50YWwgYmFzZWxldmVsLgorCSMgMS4yIHVzZXMgIjEuMiIgZm9yIHVuYW1lIC1yLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtb3NmYGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9eW1BWVFhdLy8nIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYAorCSMgUmVzZXQgRVhJVCB0cmFwIGJlZm9yZSBleGl0aW5nIHRvIGF2b2lkIHNwdXJpb3VzIG5vbi16ZXJvIGV4aXQgY29kZS4KKwlleGl0Y29kZT0kPworCXRyYXAgJycgMAorCWV4aXQgJGV4aXRjb2RlIDs7CisgICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCisJIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/CisJZWNobyBhbHBoYS1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKKwllY2hvIGFscGhhLWRlYy13aW5udDMuNQorCWV4aXQgOzsKKyAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKKwllY2hvIG02OGstdW5rbm93bi1zeXN2NAorCWV4aXQgOzsKKyAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKKwlleGl0IDs7CisgICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCisJZXhpdCA7OworICAgICo6T1MvMzkwOio6KikKKwllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCisJZXhpdCA7OworICAgICo6ei9WTToqOiopCisJZWNobyBzMzkwLWlibS16dm1vZQorCWV4aXQgOzsKKyAgICAqOk9TNDAwOio6KikKKwllY2hvIHBvd2VycGMtaWJtLW9zNDAwCisJZXhpdCA7OworICAgIGFybTpSSVNDKjoxLlswMTJdKjoqfGFybTpyaXNjaXg6MS5bMDEyXSo6KikKKwllY2hvIGFybS1hY29ybi1yaXNjaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGFybSo6cmlzY29zOio6Knxhcm0qOlJJU0NPUzoqOiopCisJZWNobyBhcm0tdW5rbm93bi1yaXNjb3MKKwlleGl0IDs7CisgICAgU1IyPzAxOkhJLVVYL01QUDoqOiogfCBTUjgwMDA6SEktVVgvTVBQOio6KikKKwllY2hvIGhwcGExLjEtaGl0YWNoaS1oaXV4bXBwCisJZXhpdCA7OworICAgIFB5cmFtaWQqOk9TeCo6KjoqIHwgTUlTKjpPU3gqOio6KiB8IE1JUyo6U01QX0RDLU9TeCo6KjoqKQorCSMgYWtlZUB3cGRpczAzLndwYWZiLmFmLm1pbCAoRWFybGUgRi4gQWtlKSBjb250cmlidXRlZCBNSVMgYW5kIE5JTEUuCisJaWYgdGVzdCAiYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbGAiID0gYXR0IDsgdGhlbgorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1zeXN2MworCWVsc2UKKwkJZWNobyBweXJhbWlkLXB5cmFtaWQtYnNkCisJZmkKKwlleGl0IDs7CisgICAgTklMRSo6KjoqOmRjb3N4KQorCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN2cjQKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6dW5peDo0LjA6NiopCisJZWNobyBzcGFyYy1pY2wtbng2CisJZXhpdCA7OworICAgIERSUz82MDAwOlVOSVhfU1Y6NC4yKjo3KiB8IERSUz82MDAwOmlzaXM6NC4yKjo3KikKKwljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KKwkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OworCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40SDpTdW5PUzo1Lio6KikKKwllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCVNVTl9BUkNIPSJpMzg2IgorCSMgSWYgdGhlcmUgaXMgYSBjb21waWxlciwgc2VlIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDY0LWJpdCBvYmplY3RzLgorCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KKwkjIFRoaXMgdGVzdCB3b3JrcyBmb3IgYm90aCBjb21waWxlcnMuCisJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCShDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCWdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJU1VOX0FSQ0g9Ing4Nl82NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtTVU5fQVJDSH0tcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6Nio6KikKKwkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQorCSMgU3VuT1M2LiAgSGFyZCB0byBndWVzcyBleGFjdGx5IHdoYXQgU3VuT1M2IHdpbGwgYmUgbGlrZSwgYnV0CisJIyBpdCdzIGxpa2VseSB0byBiZSBtb3JlIGxpa2UgU29sYXJpcyB0aGFuIFN1bk9TNC4KKwllY2hvIHNwYXJjLXN1bi1zb2xhcmlzM2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKKyAgICBzdW40KjpTdW5PUzoqOiopCisJY2FzZSAiYC91c3IvYmluL2FyY2ggLWtgIiBpbgorCSAgICBTZXJpZXMqfFM0KikKKwkJVU5BTUVfUkVMRUFTRT1gdW5hbWUgLXZgCisJCTs7CisJZXNhYworCSMgSmFwYW5lc2UgTGFuZ3VhZ2UgdmVyc2lvbnMgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgYDQuMS4zLUpMJy4KKwllY2hvIHNwYXJjLXN1bi1zdW5vc2BlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy8nYAorCWV4aXQgOzsKKyAgICBzdW4zKjpTdW5PUzoqOiopCisJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgc3VuKjoqOjQuMkJTRDoqKQorCVVOQU1FX1JFTEVBU0U9YChzZWQgMXEgL2V0Yy9tb3RkIHwgYXdrICd7cHJpbnQgc3Vic3RyKCQ1LDEsMyl9JykgMj4vZGV2L251bGxgCisJdGVzdCAieCR7VU5BTUVfUkVMRUFTRX0iID0gIngiICYmIFVOQU1FX1JFTEVBU0U9MworCWNhc2UgImAvYmluL2FyY2hgIiBpbgorCSAgICBzdW4zKQorCQllY2hvIG02OGstc3VuLXN1bm9zJHtVTkFNRV9SRUxFQVNFfQorCQk7OworCSAgICBzdW40KQorCQllY2hvIHNwYXJjLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwllc2FjCisJZXhpdCA7OworICAgIGF1c2hwOlN1bk9TOio6KikKKwllY2hvIHNwYXJjLWF1c3BleC1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgIyBUaGUgc2l0dWF0aW9uIGZvciBNaU5UIGlzIGEgbGl0dGxlIGNvbmZ1c2luZy4gIFRoZSBtYWNoaW5lIG5hbWUKKyAgICAjIGNhbiBiZSB2aXJ0dWFsbHkgZXZlcnl0aGluZyAoZXZlcnl0aGluZyB3aGljaCBpcyBub3QKKyAgICAjICJhdGFyaXN0IiBvciAiYXRhcmlzdGUiIGF0IGxlYXN0IHNob3VsZCBoYXZlIGEgcHJvY2Vzc29yCisgICAgIyA+IG02ODAwMCkuICBUaGUgc3lzdGVtIG5hbWUgcmFuZ2VzIGZyb20gIk1pTlQiIG92ZXIgIkZyZWVNaU5UIgorICAgICMgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uICJtaW50IiAob3IgImZyZWVtaW50IikuICBGaW5hbGx5CisgICAgIyB0aGUgc3lzdGVtIG5hbWUgIlRPUyIgZGVub3RlcyBhIHN5c3RlbSB3aGljaCBpcyBhY3R1YWxseSBub3QKKyAgICAjIE1pTlQuICBCdXQgTWlOVCBpcyBkb3dud2FyZCBjb21wYXRpYmxlIHRvIFRPUywgc28gdGhpcyBzaG91bGQKKyAgICAjIGJlIG5vIHByb2JsZW0uCisgICAgYXRhcmlzdFtlXToqTWlOVDoqOiogfCBhdGFyaXN0W2VdOiptaW50Oio6KiB8IGF0YXJpc3RbZV06KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGF0YXJpKjoqTWlOVDoqOiogfCBhdGFyaSo6Km1pbnQ6KjoqIHwgYXRhcmlzdFtlXToqVE9TOio6KikKKwllY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisJZWNobyBtNjhrLWF0YXJpLW1pbnQke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pbGFuKjoqTWlOVDoqOiogfCBtaWxhbio6Km1pbnQ6KjoqIHwgKm1pbGFuKjoqVE9TOio6KikKKwllY2hvIG02OGstbWlsYW4tbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorCWVjaG8gbTY4ay1oYWRlcy1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOipNaU5UOio6KiB8ICo6Km1pbnQ6KjoqIHwgKjoqVE9TOio6KikKKwllY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtNjhrOm1hY2h0ZW46KjoqKQorCWVjaG8gbTY4ay1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBwb3dlcnBjOm1hY2h0ZW46KjoqKQorCWVjaG8gcG93ZXJwYy1hcHBsZS1tYWNodGVuJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBSSVNDKjpNYWNoOio6KikKKwllY2hvIG1pcHMtZGVjLW1hY2hfYnNkNC4zCisJZXhpdCA7OworICAgIFJJU0MqOlVMVFJJWDoqOiopCisJZWNobyBtaXBzLWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFZBWCo6VUxUUklYKjoqOiopCisJZWNobyB2YXgtZGVjLXVsdHJpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgMjAyMDpDTElYOio6KiB8IDI0MzA6Q0xJWDoqOiopCisJZWNobyBjbGlwcGVyLWludGVyZ3JhcGgtY2xpeCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbWlwczoqOio6VU1JUFMgfCBtaXBzOio6KjpSSVNDb3MpCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisjaWZkZWYgX19jcGx1c3BsdXMKKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIHByaW50ZigpIHByb3RvdHlwZSAqLworCWludCBtYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CisjZWxzZQorCWludCBtYWluIChhcmdjLCBhcmd2KSBpbnQgYXJnYzsgY2hhciAqYXJndltdOyB7CisjZW5kaWYKKwkjaWYgZGVmaW5lZCAoaG9zdF9taXBzKSAmJiBkZWZpbmVkIChNSVBTRUIpCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1lTVikKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N5c3ZcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9TVlI0KQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzc3ZyNFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNpZiBkZWZpbmVkIChTWVNUWVBFX0JTRDQzKSB8fCBkZWZpbmVkKFNZU1RZUEVfQlNEKQorCSAgcHJpbnRmICgibWlwcy1taXBzLXJpc2NvcyVzYnNkXG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2VuZGlmCisJICBleGl0ICgtMSk7CisJfQorRU9GCisJJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYKKwkgIGR1bW15YXJnPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtbiAncy9cKFswLTldKlwpLiovXDEvcCdgICYmCisJICBTWVNURU1fTkFNRT1gJGR1bW15ICRkdW1teWFyZ2AgJiYKKwkgICAgeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9CisJZWNobyBtaXBzLW1pcHMtcmlzY29zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLW1vdG9yb2xhLXBvd2VybWF4CisJZXhpdCA7OworICAgIE1vdG9yb2xhOio6NC4zOlBMOC0qKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJtYXgKKwlleGl0IDs7CisgICAgTmlnaHRfSGF3azoqOio6UG93ZXJNQVhfT1MgfCBTeW5lcmd5OlBvd2VyTUFYX09TOio6KikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6UG93ZXJfVU5JWDoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcnVuaXgKKwlleGl0IDs7CisgICAgbTg4azpDWC9VWDo3KjoqKQorCWVjaG8gbTg4ay1oYXJyaXMtY3h1eDcKKwlleGl0IDs7CisgICAgbTg4azoqOjQqOlI0KikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjQKKwlleGl0IDs7CisgICAgbTg4azoqOjMqOlIzKikKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgQVZpaU9OOmRndXg6KjoqKQorCSMgREcvVVggcmV0dXJucyBBVmlpT04gZm9yIGFsbCBhcmNoaXRlY3R1cmVzCisJVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZXhpdCA7OworICAgIE04OCo6RG9scGhpbk9TOio6KikJIyBEb2xwaGluT1MgKFNWUjMpCisJZWNobyBtODhrLWRvbHBoaW4tc3lzdjMKKwlleGl0IDs7CisgICAgTTg4KjoqOlIzKjoqKQorCSMgRGVsdGEgODhrIHN5c3RlbSBydW5uaW5nIFNWUjMKKwllY2hvIG04OGstbW90b3JvbGEtc3lzdjMKKwlleGl0IDs7CisgICAgWEQ4OCo6KjoqOiopICMgVGVrdHJvbml4IFhEODggc3lzdGVtIHJ1bm5pbmcgVVRla1YgKFNWUjMpCisJZWNobyBtODhrLXRla3Ryb25peC1zeXN2MworCWV4aXQgOzsKKyAgICBUZWs0M1swLTldWzAtOV06VVRlazoqOiopICMgVGVrdHJvbml4IDQzMDAgc3lzdGVtIHJ1bm5pbmcgVVRlayAoQlNEKQorCWVjaG8gbTY4ay10ZWt0cm9uaXgtYnNkCisJZXhpdCA7OworICAgICo6SVJJWCo6KjoqKQorCWVjaG8gbWlwcy1zZ2ktaXJpeGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLy0vXy9nJ2AKKwlleGl0IDs7CisgICAgPz8/Pz8/Pz86QUlYPzpbMTJdLjE6MikgICAjIEFJWCAyLjIuMSBvciBBSVggMi4xLjEgaXMgUlQvUEMgQUlYLgorCWVjaG8gcm9tcC1pYm0tYWl4ICAgICAjIHVuYW1lIC1tIGdpdmVzIGFuIDggaGV4LWNvZGUgQ1BVIGlkCisJZXhpdCA7OyAgICAgICAgICAgICAgICMgTm90ZSB0aGF0OiBlY2hvICInYHVuYW1lIC1zYCciIGdpdmVzICdBSVggJworICAgIGkqODY6QUlYOio6KikKKwllY2hvIGkzODYtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYTY0OkFJWDoqOiopCisJaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF0gOyB0aGVuCisJCUlCTV9SRVY9YC91c3IvYmluL29zbGV2ZWxgCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1haXgke0lCTV9SRVZ9CisJZXhpdCA7OworICAgICo6QUlYOjI6MykKKwlpZiBncmVwIGJvczMyNSAvdXNyL2luY2x1ZGUvc3RkaW8uaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCQlzZWQgJ3MvXgkJLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkJI2luY2x1ZGUgPHN5cy9zeXN0ZW1jZmcuaD4KKworCQltYWluKCkKKwkJCXsKKwkJCWlmICghX19wb3dlcl9wYygpKQorCQkJCWV4aXQoMSk7CisJCQlwdXRzKCJwb3dlcnBjLWlibS1haXgzLjIuNSIpOworCQkJZXhpdCgwKTsKKwkJCX0KK0VPRgorCQlpZiAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAmJiBTWVNURU1fTkFNRT1gJGR1bW15YAorCQl0aGVuCisJCQllY2hvICIkU1lTVEVNX05BTUUiCisJCWVsc2UKKwkJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNQorCQlmaQorCWVsaWYgZ3JlcCBib3MzMjQgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIuNAorCWVsc2UKKwkJZWNobyByczYwMDAtaWJtLWFpeDMuMgorCWZpCisJZXhpdCA7OworICAgICo6QUlYOio6WzQ1NjddKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vbHNscHAgXSA7IHRoZW4KKwkJSUJNX1JFVj1gL3Vzci9iaW4vbHNscHAgLUxxYyBib3MucnRlLmxpYmMgfAorCQkJICAgYXdrIC1GOiAneyBwcmludCAkMyB9JyB8IHNlZCBzL1swLTldKiQvMC9gCisJZWxzZQorCQlJQk1fUkVWPSR7VU5BTUVfVkVSU0lPTn0uJHtVTkFNRV9SRUxFQVNFfQorCWZpCisJZWNobyAke0lCTV9BUkNIfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOiopCisJZWNobyByczYwMDAtaWJtLWFpeAorCWV4aXQgOzsKKyAgICBpYm1ydDo0LjRCU0Q6Knxyb21wLWlibTpCU0Q6KikKKwllY2hvIHJvbXAtaWJtLWJzZDQuNAorCWV4aXQgOzsKKyAgICBpYm1ydDoqQlNEOip8cm9tcC1pYm06QlNEOiopICAgICAgICAgICAgIyBjb3ZlcnMgUlQvUEMgQlNEIGFuZAorCWVjaG8gcm9tcC1pYm0tYnNkJHtVTkFNRV9SRUxFQVNFfSAgICMgNC4zIHdpdGggdW5hbWUgYWRkZWQgdG8KKwlleGl0IDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlcG9ydDogcm9tcC1pYm0gQlNEIDQuMworICAgICo6Qk9TWDoqOiopCisJZWNobyByczYwMDAtYnVsbC1ib3N4CisJZXhpdCA7OworICAgIERQWC8yPzAwOkIuTy5TLjoqOiopCisJZWNobyBtNjhrLWJ1bGwtc3lzdjMKKwlleGl0IDs7CisgICAgOTAwMC9bMzRdPz86NC4zYnNkOjEuKjoqKQorCWVjaG8gbTY4ay1ocC1ic2QKKwlleGl0IDs7CisgICAgaHAzMDA6NC40QlNEOio6KiB8IDkwMDAvWzM0XT8/OjQuM2JzZDoyLio6KikKKwllY2hvIG02OGstaHAtYnNkNC40CisJZXhpdCA7OworICAgIDkwMDAvWzM0Njc4XT8/OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICA5MDAwLzMxPyApICAgICAgICAgICAgSFBfQVJDSD1tNjgwMDAgOzsKKwkgICAgOTAwMC9bMzRdPz8gKSAgICAgICAgIEhQX0FSQ0g9bTY4ayA7OworCSAgICA5MDAwL1s2NzhdWzAtOV1bMC05XSkKKwkJaWYgWyAteCAvdXNyL2Jpbi9nZXRjb25mIF07IHRoZW4KKwkJICAgIHNjX2NwdV92ZXJzaW9uPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0NQVV9WRVJTSU9OIDI+L2Rldi9udWxsYAorCQkgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCisJCSAgICBjYXNlICIke3NjX2NwdV92ZXJzaW9ufSIgaW4KKwkJICAgICAgNTIzKSBIUF9BUkNIPSJocHBhMS4wIiA7OyAjIENQVV9QQV9SSVNDMV8wCisJCSAgICAgIDUyOCkgSFBfQVJDSD0iaHBwYTEuMSIgOzsgIyBDUFVfUEFfUklTQzFfMQorCQkgICAgICA1MzIpICAgICAgICAgICAgICAgICAgICAgICMgQ1BVX1BBX1JJU0MyXzAKKwkJCWNhc2UgIiR7c2Nfa2VybmVsX2JpdHN9IiBpbgorCQkJICAzMikgSFBfQVJDSD0iaHBwYTIuMG4iIDs7CisJCQkgIDY0KSBIUF9BUkNIPSJocHBhMi4wdyIgOzsKKwkJCSAgJycpIEhQX0FSQ0g9ImhwcGEyLjAiIDs7ICAgIyBIUC1VWCAxMC4yMAorCQkJZXNhYyA7OworCQkgICAgZXNhYworCQlmaQorCQlpZiBbICIke0hQX0FSQ0h9IiA9ICIiIF07IHRoZW4KKwkJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJICAgIHNlZCAncy9eCQkvLycgPDwgRU9GID4kZHVtbXkuYworCisJCSNkZWZpbmUgX0hQVVhfU09VUkNFCisJCSNpbmNsdWRlIDxzdGRsaWIuaD4KKwkJI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisJCWludCBtYWluICgpCisJCXsKKwkJI2lmIGRlZmluZWQoX1NDX0tFUk5FTF9CSVRTKQorCQkgICAgbG9uZyBiaXRzID0gc3lzY29uZihfU0NfS0VSTkVMX0JJVFMpOworCQkjZW5kaWYKKwkJICAgIGxvbmcgY3B1ICA9IHN5c2NvbmYgKF9TQ19DUFVfVkVSU0lPTik7CisKKwkJICAgIHN3aXRjaCAoY3B1KQorCQkJeworCQkJY2FzZSBDUFVfUEFfUklTQzFfMDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisJCQljYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMSIpOyBicmVhazsKKwkJCWNhc2UgQ1BVX1BBX1JJU0MyXzA6CisJCSNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKwkJCSAgICBzd2l0Y2ggKGJpdHMpCisJCQkJeworCQkJCWNhc2UgNjQ6IHB1dHMgKCJocHBhMi4wdyIpOyBicmVhazsKKwkJCQljYXNlIDMyOiBwdXRzICgiaHBwYTIuMG4iKTsgYnJlYWs7CisJCQkJZGVmYXVsdDogcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisJCQkJfSBicmVhazsKKwkJI2Vsc2UgIC8qICFkZWZpbmVkKF9TQ19LRVJORUxfQklUUykgKi8KKwkJCSAgICBwdXRzICgiaHBwYTIuMCIpOyBicmVhazsKKwkJI2VuZGlmCisJCQlkZWZhdWx0OiBwdXRzICgiaHBwYTEuMCIpOyBicmVhazsKKwkJCX0KKwkJICAgIGV4aXQgKDApOworCQl9CitFT0YKKwkJICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsKSAmJiBIUF9BUkNIPWAkZHVtbXlgCisJCSAgICB0ZXN0IC16ICIkSFBfQVJDSCIgJiYgSFBfQVJDSD1ocHBhCisJCWZpIDs7CisJZXNhYworCWlmIFsgJHtIUF9BUkNIfSA9ICJocHBhMi4wdyIgXQorCXRoZW4KKwkgICAgZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCisJICAgICMgaHBwYTIuMHctaHAtaHB1eCogaGFzIGEgNjQtYml0IGtlcm5lbCBhbmQgYSBjb21waWxlciBnZW5lcmF0aW5nCisJICAgICMgMzItYml0IGNvZGUuICBocHBhNjQtaHAtaHB1eCogaGFzIHRoZSBzYW1lIGtlcm5lbCBhbmQgYSBjb21waWxlcgorCSAgICAjIGdlbmVyYXRpbmcgNjQtYml0IGNvZGUuICBHTlUgYW5kIEhQIHVzZSBkaWZmZXJlbnQgbm9tZW5jbGF0dXJlOgorCSAgICAjCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9Y2MgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhMi4wdy1ocC1ocHV4MTEuMjMKKwkgICAgIyAkIENDX0ZPUl9CVUlMRD0iY2MgK0RBMi4wdyIgLi9jb25maWcuZ3Vlc3MKKwkgICAgIyA9PiBocHBhNjQtaHAtaHB1eDExLjIzCisKKwkgICAgaWYgZWNobyBfX0xQNjRfXyB8IChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfAorCQlncmVwIC1xIF9fTFA2NF9fCisJICAgIHRoZW4KKwkJSFBfQVJDSD0iaHBwYTIuMHciCisJICAgIGVsc2UKKwkJSFBfQVJDSD0iaHBwYTY0IgorCSAgICBmaQorCWZpCisJZWNobyAke0hQX0FSQ0h9LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICBpYTY0OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwllY2hvIGlhNjQtaHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIDMwNTAqOkhJLVVYOio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJaW50CisJbWFpbiAoKQorCXsKKwkgIGxvbmcgY3B1ID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKwkgIC8qIFRoZSBvcmRlciBtYXR0ZXJzLCBiZWNhdXNlIENQVV9JU19IUF9NQzY4SyBlcnJvbmVvdXNseSByZXR1cm5zCisJICAgICB0cnVlIGZvciBDUFVfUEFfUklTQzFfMC4gIENQVV9JU19QQV9SSVNDIHJldHVybnMgY29ycmVjdAorCSAgICAgcmVzdWx0cywgaG93ZXZlci4gICovCisJICBpZiAoQ1BVX0lTX1BBX1JJU0MgKGNwdSkpCisJICAgIHsKKwkgICAgICBzd2l0Y2ggKGNwdSkKKwkJeworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzJfMDogcHV0cyAoImhwcGEyLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGRlZmF1bHQ6IHB1dHMgKCJocHBhLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChDUFVfSVNfSFBfTUM2OEsgKGNwdSkpCisJICAgIHB1dHMgKCJtNjhrLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZWxzZSBwdXRzICgidW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGV4aXQgKDApOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gdW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIKKwlleGl0IDs7CisgICAgOTAwMC83Pz86NC4zYnNkOio6KiB8IDkwMDAvOD9bNzldOjQuM2JzZDoqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1ic2QKKwlleGl0IDs7CisgICAgOTAwMC84Pz86NC4zYnNkOio6KikKKwllY2hvIGhwcGExLjAtaHAtYnNkCisJZXhpdCA7OworICAgICo5Pz8qOk1QRS9pWDoqOiogfCAqMzAwMCo6TVBFL2lYOio6KikKKwllY2hvIGhwcGExLjAtaHAtbXBlaXgKKwlleGl0IDs7CisgICAgaHA3Pz86T1NGMToqOiogfCBocDg/Wzc5XTpPU0YxOio6KiApCisJZWNobyBocHBhMS4xLWhwLW9zZgorCWV4aXQgOzsKKyAgICBocDg/PzpPU0YxOio6KikKKwllY2hvIGhwcGExLjAtaHAtb3NmCisJZXhpdCA7OworICAgIGkqODY6T1NGMToqOiopCisJaWYgWyAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiBdIDsgdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxbWsKKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjEKKwlmaQorCWV4aXQgOzsKKyAgICBwYXJpc2MqOkxpdGVzKjoqOiopCisJZWNobyBocHBhMS4xLWhwLWxpdGVzCisJZXhpdCA7OworICAgIEMxKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzEqOiopCisJZWNobyBjMS1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIEMyKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzIqOiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBDMzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzQqOiopCisJZWNobyBjMzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDMzgqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzgqOiopCisJZWNobyBjMzgtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkM0KjoqKQorCWVjaG8gYzQtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBDUkFZKlktTVA6KjoqOiopCisJZWNobyB5bXAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpbQS1aXTkwOio6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gXAorCXwgc2VkIC1lICdzL0NSQVkuKlwoW0EtWl05MFwpL1wxLycgXAorCSAgICAgIC1lIHkvQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovIFwKKwkgICAgICAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqVFM6KjoqOiopCisJZWNobyB0OTAtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUM0U6KjoqOiopCisJZWNobyBhbHBoYWV2NS1jcmF5LXVuaWNvc21rJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIENSQVkqU1YxOio6KjoqKQorCWVjaG8gc3YxLWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgICo6VU5JQ09TL21wOio6KikKKwllY2hvIGNyYXludi1jcmF5LXVuaWNvc21wJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAtZSAncy9cLlteLl0qJC8uWC8nCisJZXhpdCA7OworICAgIEYzMFswMV06VU5JWF9TeXN0ZW1fVjoqOiogfCBGNzAwOlVOSVhfU3lzdGVtX1Y6KjoqKQorCUZVSklUU1VfUFJPQz1gdW5hbWUgLW0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisJRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorCUZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvIC9fLydgCisJZWNobyAiJHtGVUpJVFNVX1BST0N9LWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorCUZVSklUU1VfU1lTPWB1bmFtZSAtcCB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyB8IHNlZCAtZSAncy9cLy8vJ2AKKwlGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzLyAvXy8nYAorCWVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHNwYXJjKjpCU0QvT1M6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkJTRC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpGcmVlQlNEOio6KikKKwlVTkFNRV9QUk9DRVNTT1I9YC91c3IvYmluL3VuYW1lIC1wYAorCWNhc2UgJHtVTkFNRV9QUk9DRVNTT1J9IGluCisJICAgIGFtZDY0KQorCQllY2hvIHg4Nl82NC11bmtub3duLWZyZWVic2RgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgIDs7CisJICAgICopCisJCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwllc2FjCisJZXhpdCA7OworICAgIGkqOkNZR1dJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtY3lnd2luCisJZXhpdCA7OworICAgICo6TUlOR1c2NCo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3c2NAorCWV4aXQgOzsKKyAgICAqOk1JTkdXKjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1taW5ndzMyCisJZXhpdCA7OworICAgICo6TVNZUyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXN5cworCWV4aXQgOzsKKyAgICBpKjp3aW5kb3dzMzIqOiopCisJIyB1bmFtZSAtbSBpbmNsdWRlcyAiLXBjIiBvbiB0aGlzIHN5c3RlbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjpQVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgorCWV4aXQgOzsKKyAgICAqOkludGVyaXgqOiopCisJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCisJICAgIHg4NikKKwkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgYXV0aGVudGljYW1kIHwgZ2VudWluZWludGVsIHwgRU02NFQpCisJCWVjaG8geDg2XzY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCSAgICBJQTY0KQorCQllY2hvIGlhNjQtdW5rbm93bi1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJZXNhYyA7OworICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKKwllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcworCWV4aXQgOzsKKyAgICA4NjY0OldpbmRvd3NfTlQ6KikKKwllY2hvIHg4Nl82NC1wYy1ta3MKKwlleGl0IDs7CisgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCisJIyBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZCBvZiBpMzg2PworCWVjaG8gaTU4Ni1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIGkqOlVXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXV3aW4KKwlleGl0IDs7CisgICAgYW1kNjQ6Q1lHV0lOKjoqOiogfCB4ODZfNjQ6Q1lHV0lOKjoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcCo6Q1lHV0lOKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHByZXAqOlN1bk9TOjUuKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgKjpHTlU6KjoqKQorCSMgdGhlIEdOVSBzeXN0ZW0KKwllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tJHtMSUJDfWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLC8uKiQsLCdgCisJZXhpdCA7OworICAgICo6R05VLyo6KjoqKQorCSMgb3RoZXIgc3lzdGVtcyB3aXRoIEdOVSBsaWJjIGFuZCB1c2VybGFuZAorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWBlY2hvICR7VU5BTUVfU1lTVEVNfSB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgJ1tBLVpdJyAnW2Etel0nYGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpKjg2Ok1pbml4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluaXgKKwlleGl0IDs7CisgICAgYWFyY2g2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBhYXJjaDY0X2JlOkxpbnV4Oio6KikKKwlVTkFNRV9NQUNISU5FPWFhcmNoNjRfYmUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisJZXNhYworCW9iamR1bXAgLS1wcml2YXRlLWhlYWRlcnMgL2Jpbi9zaCB8IGdyZXAgLXEgbGQuc28uMQorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImdudWxpYmMxIiA7IGZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBhcmM6TGludXg6KjoqIHwgYXJjZWI6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYXJtKjpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkgICAgfCBncmVwIC1xIF9fQVJNX0VBQklfXworCXRoZW4KKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWVsc2UKKwkgICAgaWYgZWNobyBfX0FSTV9QQ1NfVkZQIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKKwkJfCBncmVwIC1xIF9fQVJNX1BDU19WRlAKKwkgICAgdGhlbgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9ZWFiaQorCSAgICBlbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ31lYWJpaGYKKwkgICAgZmkKKwlmaQorCWV4aXQgOzsKKyAgICBhdnIzMio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgY3JpczpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWF4aXMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBjcmlzdjMyOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGZydjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBoZXhhZ29uOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGkqODY6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIGlhNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgbTMycio6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgbTY4KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBtaXBzOkxpbnV4Oio6KiB8IG1pcHM2NDpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9CisJI3VuZGVmICR7VU5BTUVfTUFDSElORX1lbAorCSNpZiBkZWZpbmVkKF9fTUlQU0VMX18pIHx8IGRlZmluZWQoX19NSVBTRUwpIHx8IGRlZmluZWQoX01JUFNFTCkgfHwgZGVmaW5lZChNSVBTRUwpCisJQ1BVPSR7VU5BTUVfTUFDSElORX1lbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9JHtVTkFNRV9NQUNISU5FfQorCSNlbHNlCisJQ1BVPQorCSNlbmRpZgorCSNlbmRpZgorRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15DUFUnYAorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC0ke0xJQkN9IjsgZXhpdDsgfQorCTs7CisgICAgb3BlbnJpc2MqOkxpbnV4Oio6KikKKwllY2hvIG9yMWstdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIG9yMzI6TGludXg6KjoqIHwgb3Ixayo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgcGFkcmU6TGludXg6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKKwkjIExvb2sgZm9yIENQVSBsZXZlbAorCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCisJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJZXNhYworCWV4aXQgOzsKKyAgICBwcGM2NDpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBwYzpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGM2NGxlOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGM2NGxlLXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBwcGNsZTpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjbGUtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHMzOTA6TGludXg6KjoqIHwgczM5MHg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzaDY0KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBzaCo6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB0aWxlKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB2YXg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICB4ODZfNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgeHRlbnNhKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQorCWV4aXQgOzsKKyAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQorCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCisJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aAorCSMgc3lzbmFtZSBhbmQgbm9kZW5hbWUuCisJZWNobyBpMzg2LXNlcXVlbnQtc3lzdjQKKwlleGl0IDs7CisgICAgaSo4NjpVTklYX1NWOjQuMk1QOjIuKikKKwkjIFVuaXh3YXJlIGlzIGFuIG9mZnNob290IG9mIFNWUjQsIGJ1dCBpdCBoYXMgaXRzIG93biB2ZXJzaW9uCisJIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgorCSMgSSBhbSBub3QgcG9zaXRpdmUgdGhhdCBvdGhlciBTVlI0IHN5c3RlbXMgd29uJ3QgbWF0Y2ggdGhpcywKKwkjIEkganVzdCBoYXZlIHRvIGhvcGUuICAtLSBybXMuCisJIyBVc2Ugc3lzdjQuMnV3Li4uIHNvIHRoYXQgc3lzdjQqIG1hdGNoZXMgaXQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5c3Y0LjJ1dyR7VU5BTUVfVkVSU0lPTn0KKwlleGl0IDs7CisgICAgaSo4NjpPUy8yOio6KikKKwkjIElmIHdlIHdlcmUgYWJsZSB0byBmaW5kIGB1bmFtZScsIHRoZW4gRU1YIFVuaXggY29tcGF0aWJpbGl0eQorCSMgaXMgcHJvYmFibHkgaW5zdGFsbGVkLgorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1vczItZW14CisJZXhpdCA7OworICAgIGkqODY6WFRTLTMwMDoqOlNUT1ApCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc3RvcAorCWV4aXQgOzsKKyAgICBpKjg2OmF0aGVvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYXRoZW9zCisJZXhpdCA7OworICAgIGkqODY6c3lsbGFibGU6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeWxsYWJsZQorCWV4aXQgOzsKKyAgICBpKjg2Okx5bnhPUzoyLio6KiB8IGkqODY6THlueE9TOjMuWzAxXSo6KiB8IGkqODY6THlueE9TOjQuWzAyXSo6KikKKwllY2hvIGkzODYtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIGkqODY6KkRPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1zZG9zZGpncHAKKwlleGl0IDs7CisgICAgaSo4NjoqOjQuKjoqIHwgaSo4NjpTWVNURU1fVjo0Lio6KikKKwlVTkFNRV9SRUw9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfSB8IHNlZCAncy9cL01QJC8vJ2AKKwlpZiBncmVwIE5vdmVsbCAvdXNyL2luY2x1ZGUvbGluay5oID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVuaXZlbC1zeXN2JHtVTkFNRV9SRUx9CisJZWxzZQorCQllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdiR7VU5BTUVfUkVMfQorCWZpCisJZXhpdCA7OworICAgIGkqODY6Kjo1Ols2NzhdKikKKwkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KKwljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgorCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKKwkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7CisJICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9JHtVTkFNRV9TWVNURU19JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Oio6My4yOiopCisJaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgorCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1pc2MkVU5BTUVfUkVMCisJZWxpZiAvYmluL3VuYW1lIC1YIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX1JFTD1gKC9iaW4vdW5hbWUgLVh8Z3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCBpODA0ODYgPi9kZXYvbnVsbCkgJiYgVU5BTUVfTUFDSElORT1pNDg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk1ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnQgKklJJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKKwlmaQorCWV4aXQgOzsKKyAgICBwYzoqOio6KikKKwkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKKwkjIHVuYW1lIC1tIHByaW50cyBmb3IgREpHUFAgYWx3YXlzICdwYycsIGJ1dCBpdCBwcmludHMgbm90aGluZyBhYm91dAorCSMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGk1ODYuCisJIyBOb3RlOiB3aGF0ZXZlciB0aGlzIGlzLCBpdCBNVVNUIGJlIHRoZSBzYW1lIGFzIHdoYXQgY29uZmlnLnN1YgorCSMgcHJpbnRzIGZvciB0aGUgImRqZ3BwIiBob3N0LCBvciBlbHNlIEdEQiBjb25maWd1cnkgd2lsbCBkZWNpZGUgdGhhdAorCSMgdGhpcyBpcyBhIGNyb3NzLWJ1aWxkLgorCWVjaG8gaTU4Ni1wYy1tc2Rvc2RqZ3BwCisJZXhpdCA7OworICAgIEludGVsOk1hY2g6Myo6KikKKwllY2hvIGkzODYtcGMtbWFjaDMKKwlleGl0IDs7CisgICAgcGFyYWdvbjoqOio6KikKKwllY2hvIGk4NjAtaW50ZWwtb3NmMQorCWV4aXQgOzsKKyAgICBpODYwOio6NC4qOiopICMgaTg2MC1TVlI0CisJaWYgZ3JlcCBTdGFyZGVudCAvdXNyL2luY2x1ZGUvc3lzL3VhZG1pbi5oID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgIGVjaG8gaTg2MC1zdGFyZGVudC1zeXN2JHtVTkFNRV9SRUxFQVNFfSAjIFN0YXJkZW50IFZpc3RyYSBpODYwLVNWUjQKKwllbHNlICMgQWRkIG90aGVyIGk4NjAtU1ZSNCB2ZW5kb3JzIGJlbG93IGFzIHRoZXkgYXJlIGRpc2NvdmVyZWQuCisJICBlY2hvIGk4NjAtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfSAgIyBVbmtub3duIGk4NjAtU1ZSNAorCWZpCisJZXhpdCA7OworICAgIG1pbmkqOkNUSVg6U1lTKjU6KikKKwkjICJtaW5pZnJhbWUiCisJZWNobyBtNjgwMTAtY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIG1jNjhrOlVOSVg6U1lTVEVNNTozLjUxbSkKKwllY2hvIG02OGstY29udmVyZ2VudC1zeXN2CisJZXhpdCA7OworICAgIE02ODA/MDpELU5JWDo1LjM6KikKKwllY2hvIG02OGstZGlhYi1kbml4CisJZXhpdCA7OworICAgIE02OCo6KjpSM1ZbNTY3OF0qOiopCisJdGVzdCAtciAvc3lzVjY4ICYmIHsgZWNobyAnbTY4ay1tb3Rvcm9sYS1zeXN2JzsgZXhpdDsgfSA7OworICAgIDNbMzQ1XT8/Oio6NC4wOjMuMCB8IDNbMzRdPz9BOio6NC4wOjMuMCB8IDNbMzRdPz8sKjoqOjQuMDozLjAgfCAzWzM0XT8/Lyo6Kjo0LjA6My4wIHwgNDQwMDoqOjQuMDozLjAgfCA0ODUwOio6NC4wOjMuMCB8IFNLQTQwOio6NC4wOjMuMCB8IFNEUzI6Kjo0LjA6My4wIHwgU0hHMjoqOjQuMDozLjAgfCBTNzUwMSo6Kjo0LjA6My4wKQorCU9TX1JFTD0nJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgJiYgeyBlY2hvIGk1ODYtbmNyLXN5c3Y0LjMke09TX1JFTH07IGV4aXQ7IH0gOzsKKyAgICAzWzM0XT8/Oio6NC4wOiogfCAzWzM0XT8/LCo6Kjo0LjA6KikKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NDsgZXhpdDsgfSA7OworICAgIE5DUio6Kjo0LjI6KiB8IE1QUkFTKjoqOjQuMjoqKQorCU9TX1JFTD0nLjMnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJICAgICYmIE9TX1JFTD0uYHNlZCAtbiAncy9bXiBdKiBbXiBdKiBcKFswLTldWzAtOV1cKS4qL1wxL3AnIDwgL2V0Yy8ucmVsaWRgCisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IGdyZXAgODYgPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBwdGVyb24gPi9kZXYvbnVsbCBcCisJICAgICYmIHsgZWNobyBpNTg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9IDs7CisgICAgbTY4KjpMeW54T1M6Mi4qOiogfCBtNjgqOkx5bnhPUzozLjAqOiopCisJZWNobyBtNjhrLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtYzY4MDMwOlVOSVhfU3lzdGVtX1Y6NC4qOiopCisJZWNobyBtNjhrLWF0YXJpLXN5c3Y0CisJZXhpdCA7OworICAgIFRTVU5BTUk6THlueE9TOjIuKjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCisJZWNobyByczYwMDAtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC5bMDJdKjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU01bQkVdUzpVTklYX1NWOio6KikKKwllY2hvIG1pcHMtZGRlLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFJNKjpSZWxpYW50VU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgIFJNKjpTSU5JWC0qOio6KikKKwllY2hvIG1pcHMtc25pLXN5c3Y0CisJZXhpdCA7OworICAgICo6U0lOSVgtKjoqOiopCisJaWYgdW5hbWUgLXAgMj4vZGV2L251bGwgPi9kZXYvbnVsbCA7IHRoZW4KKwkJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXNuaS1zeXN2NAorCWVsc2UKKwkJZWNobyBuczMyay1zbmktc3lzdgorCWZpCisJZXhpdCA7OworICAgIFBFTlRJVU06Kjo0LjAqOiopCSMgVW5pc3lzIGBDbGVhclBhdGggSE1QIElYIDQwMDAnIFNWUjQvTVAgZWZmb3J0CisJCQkjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+CisJZWNobyBpNTg2LXVuaXN5cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOlVOSVhfU3lzdGVtX1Y6NCo6RlRYKikKKwkjIEZyb20gR2VyYWxkIEhld2VzIDxoZXdlc0BvcGVubWFya2V0LmNvbT4uCisJIyBIb3cgYWJvdXQgZGlmZmVyZW50aWF0aW5nIGJldHdlZW4gc3RyYXR1cyBhcmNoaXRlY3R1cmVzPyAtZGptCisJZWNobyBocHBhMS4xLXN0cmF0dXMtc3lzdjQKKwlleGl0IDs7CisgICAgKjoqOio6RlRYKikKKwkjIEZyb20gc2VhbmZAc3dkYy5zdHJhdHVzLmNvbS4KKwllY2hvIGk4NjAtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICBpKjg2OlZPUzoqOiopCisJIyBGcm9tIFBhdWwuR3JlZW5Ac3RyYXR1cy5jb20uCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXN0cmF0dXMtdm9zCisJZXhpdCA7OworICAgICo6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvIGhwcGExLjEtc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgbWM2OCo6QS9VWDoqOiopCisJZWNobyBtNjhrLWFwcGxlLWF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgbmV3cyo6TkVXUy1PUzo2KjoqKQorCWVjaG8gbWlwcy1zb255LW5ld3NvczYKKwlleGl0IDs7CisgICAgUlszNF0wMDA6KlN5c3RlbV9WKjoqOiogfCBSNDAwMDpVTklYX1NZU1Y6KjoqIHwgUiowMDA6VU5JWF9TVjoqOiopCisJaWYgWyAtZCAvdXNyL25lYyBdOyB0aGVuCisJCWVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwllbHNlCisJCWVjaG8gbWlwcy11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9CisJZmkKKwlleGl0IDs7CisgICAgQmVCb3g6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIGhhcmR3YXJlIG1hZGUgYnkgQmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1iZS1iZW9zCisJZXhpdCA7OworICAgIEJlTWFjOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBNYWMgb3IgTWFjIGNsb25lLCBQUEMgb25seS4KKwllY2hvIHBvd2VycGMtYXBwbGUtYmVvcworCWV4aXQgOzsKKyAgICBCZVBDOkJlT1M6KjoqKQkjIEJlT1MgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6SGFpa3U6KjoqKQkjIEhhaWt1IHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KKwllY2hvIGk1ODYtcGMtaGFpa3UKKwlleGl0IDs7CisgICAgeDg2XzY0OkhhaWt1Oio6KikKKwllY2hvIHg4Nl82NC11bmtub3duLWhhaWt1CisJZXhpdCA7OworICAgIFNYLTQ6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC01OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NS1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNjpTVVBFUi1VWDoqOiopCisJZWNobyBzeDYtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTc6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g3LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC04OlNVUEVSLVVYOio6KikKKwllY2hvIHN4OC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtOFI6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g4ci1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXIqOlJoYXBzb2R5Oio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UmhhcHNvZHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1hcHBsZS1yaGFwc29keSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEYXJ3aW46KjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCWlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gdW5rbm93biA7IHRoZW4KKwkgICAgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMKKwlmaQorCWlmIHRlc3QgYGVjaG8gIiRVTkFNRV9SRUxFQVNFIiB8IHNlZCAtZSAncy9cLi4qLy8nYCAtbGUgMTAgOyB0aGVuCisJICAgIGlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCQlpZiAoZWNobyAnI2lmZGVmIF9fTFA2NF9fJzsgZWNobyBJU182NEJJVF9BUkNIOyBlY2hvICcjZW5kaWYnKSB8IFwKKwkJICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCSAgICBncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCQl0aGVuCisJCSAgICBjYXNlICRVTkFNRV9QUk9DRVNTT1IgaW4KKwkJCWkzODYpIFVOQU1FX1BST0NFU1NPUj14ODZfNjQgOzsKKwkJCXBvd2VycGMpIFVOQU1FX1BST0NFU1NPUj1wb3dlcnBjNjQgOzsKKwkJICAgIGVzYWMKKwkJZmkKKwkgICAgZmkKKwllbGlmIHRlc3QgIiRVTkFNRV9QUk9DRVNTT1IiID0gaTM4NiA7IHRoZW4KKwkgICAgIyBBdm9pZCBleGVjdXRpbmcgY2Mgb24gT1MgWCAxMC45LCBhcyBpdCBzaGlwcyB3aXRoIGEgc3R1YgorCSAgICAjIHRoYXQgcHV0cyB1cCBhIGdyYXBoaWNhbCBhbGVydCBwcm9tcHRpbmcgdG8gaW5zdGFsbAorCSAgICAjIGRldmVsb3BlciB0b29scy4gIEFueSBzeXN0ZW0gcnVubmluZyBNYWMgT1MgWCAxMC43IG9yCisJICAgICMgbGF0ZXIgKERhcndpbiAxMSBhbmQgbGF0ZXIpIGlzIHJlcXVpcmVkIHRvIGhhdmUgYSA2NC1iaXQKKwkgICAgIyBwcm9jZXNzb3IuIFRoaXMgaXMgbm90IHRydWUgb2YgdGhlIEFSTSB2ZXJzaW9uIG9mIERhcndpbgorCSAgICAjIHRoYXQgQXBwbGUgdXNlcyBpbiBwb3J0YWJsZSBkZXZpY2VzLgorCSAgICBVTkFNRV9QUk9DRVNTT1I9eDg2XzY0CisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSAieDg2IjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9NQUNISU5FPXBjCisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNobyBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBORU8tPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuZW8tdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNFLSo6Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNlLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIE5TUi0/Ok5PTlNUT1BfS0VSTkVMOio6KikKKwllY2hvIG5zci10YW5kZW0tbnNrJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOk5vblN0b3AtVVg6KjoqKQorCWVjaG8gbWlwcy1jb21wYXEtbm9uc3RvcHV4CisJZXhpdCA7OworICAgIEJTMjAwMDpQT1NJWCo6KjoqKQorCWVjaG8gYnMyMDAwLXNpZW1lbnMtc3lzdgorCWV4aXQgOzsKKyAgICBEUy8qOlVOSVhfU3lzdGVtX1Y6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS0ke1VOQU1FX1NZU1RFTX0tJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlBsYW45Oio6KikKKwkjICJ1bmFtZSAtbSIgaXMgbm90IGNvbnNpc3RlbnQsIHNvIHVzZSAkY3B1dHlwZSBpbnN0ZWFkLiAzODYKKwkjIGlzIGNvbnZlcnRlZCB0byBpMzg2IGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIHg4NgorCSMgb3BlcmF0aW5nIHN5c3RlbXMuCisJaWYgdGVzdCAiJGNwdXR5cGUiID0gIjM4NiI7IHRoZW4KKwkgICAgVU5BTUVfTUFDSElORT1pMzg2CisJZWxzZQorCSAgICBVTkFNRV9NQUNISU5FPSIkY3B1dHlwZSIKKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXBsYW45CisJZXhpdCA7OworICAgICo6VE9QUy0xMDoqOiopCisJZWNobyBwZHAxMC11bmtub3duLXRvcHMxMAorCWV4aXQgOzsKKyAgICAqOlRFTkVYOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdGVuZXgKKwlleGl0IDs7CisgICAgS1MxMDpUT1BTLTIwOio6KiB8IEtMMTA6VE9QUy0yMDoqOiogfCBUWVBFNDpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLWRlYy10b3BzMjAKKwlleGl0IDs7CisgICAgWEtMLTE6VE9QUy0yMDoqOiogfCBUWVBFNTpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXhrbC10b3BzMjAKKwlleGl0IDs7CisgICAgKjpUT1BTLTIwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczIwCisJZXhpdCA7OworICAgICo6SVRTOio6KikKKwllY2hvIHBkcDEwLXVua25vd24taXRzCisJZXhpdCA7OworICAgIFNFSToqOio6U0VJVVgpCisJZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKwlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCWNhc2UgIiR7VU5BTUVfTUFDSElORX0iIGluCisJICAgIEEqKSBlY2hvIGFscGhhLWRlYy12bXMgOyBleGl0IDs7CisJICAgIEkqKSBlY2hvIGlhNjQtZGVjLXZtcyA7IGV4aXQgOzsKKwkgICAgViopIGVjaG8gdmF4LWRlYy12bXMgOyBleGl0IDs7CisJZXNhYyA7OworICAgICo6WEVOSVg6KjpTeXNWKQorCWVjaG8gaTM4Ni1wYy14ZW5peAorCWV4aXQgOzsKKyAgICBpKjg2OnNreW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc2t5b3NgZWNobyAke1VOQU1FX1JFTEVBU0V9YCB8IHNlZCAtZSAncy8gLiokLy8nCisJZXhpdCA7OworICAgIGkqODY6cmRvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXJkb3MKKwlleGl0IDs7CisgICAgaSo4NjpBUk9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtYXJvcworCWV4aXQgOzsKKyAgICB4ODZfNjQ6Vk1rZXJuZWw6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWVzeAorCWV4aXQgOzsKK2VzYWMKKworY2F0ID4mMiA8PEVPRgorJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQorCitUaGlzIHNjcmlwdCwgbGFzdCBtb2RpZmllZCAkdGltZXN0YW1wLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZQordGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCisKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECithbmQKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCitJZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKK3NlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCitwZXJ0aW5lbnQgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIG5lZWRlZAoraW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgorCitjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAorCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbGAKKworaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAorCitVTkFNRV9NQUNISU5FID0gJHtVTkFNRV9NQUNISU5FfQorVU5BTUVfUkVMRUFTRSA9ICR7VU5BTUVfUkVMRUFTRX0KK1VOQU1FX1NZU1RFTSAgPSAke1VOQU1FX1NZU1RFTX0KK1VOQU1FX1ZFUlNJT04gPSAke1VOQU1FX1ZFUlNJT059CitFT0YKKworZXhpdCAxCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2Rpc3QyL2NvbmZpZy5zdWIgYi9kaXN0Mi9jb25maWcuc3ViCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmZmUzNzMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9jb25maWcuc3ViCkBAIC0wLDAgKzEsMTgwNyBAQAorIyEgL2Jpbi9zaAorIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCisjICAgQ29weXJpZ2h0IDE5OTItMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwordGltZXN0YW1wPScyMDE0LTEyLTAzJworCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQKKyMgcHJvZ3JhbS4gIFRoaXMgRXhjZXB0aW9uIGlzIGFuIGFkZGl0aW9uYWwgcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcKKyMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgKCJHUEx2MyIpLgorCisKKyMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uCisjCisjIENvbmZpZ3VyYXRpb24gc3Vicm91dGluZSB0byB2YWxpZGF0ZSBhbmQgY2Fub25pY2FsaXplIGEgY29uZmlndXJhdGlvbiB0eXBlLgorIyBTdXBwbHkgdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uIHR5cGUgYXMgYW4gYXJndW1lbnQuCisjIElmIGl0IGlzIGludmFsaWQsIHdlIHByaW50IGFuIGVycm9yIG1lc3NhZ2Ugb24gc3RkZXJyIGFuZCBleGl0IHdpdGggY29kZSAxLgorIyBPdGhlcndpc2UsIHdlIHByaW50IHRoZSBjYW5vbmljYWwgY29uZmlnIHR5cGUgb24gc3Rkb3V0IGFuZCBzdWNjZWVkLgorCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLnN1YjtoYj1IRUFECisKKyMgVGhpcyBmaWxlIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lIGZvciBhbGwgR05VIHBhY2thZ2VzCisjIGFuZCByZWNvZ25pemUgYWxsIHRoZSBDUFUgdHlwZXMsIHN5c3RlbSB0eXBlcyBhbmQgYWxpYXNlcworIyB0aGF0IGFyZSBtZWFuaW5nZnVsIHdpdGggKmFueSogR05VIHNvZnR3YXJlLgorIyBFYWNoIHBhY2thZ2UgaXMgcmVzcG9uc2libGUgZm9yIHJlcG9ydGluZyB3aGljaCB2YWxpZCBjb25maWd1cmF0aW9ucworIyBpdCBkb2VzIG5vdCBzdXBwb3J0LiAgVGhlIHVzZXIgc2hvdWxkIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2gKKyMgYSBmYWlsdXJlIHRvIHN1cHBvcnQgYSB2YWxpZCBjb25maWd1cmF0aW9uIGZyb20gYSBtZWFuaW5nbGVzcworIyBjb25maWd1cmF0aW9uLgorCisjIFRoZSBnb2FsIG9mIHRoaXMgZmlsZSBpcyB0byBtYXAgYWxsIHRoZSB2YXJpb3VzIHZhcmlhdGlvbnMgb2YgYSBnaXZlbgorIyBtYWNoaW5lIHNwZWNpZmljYXRpb24gaW50byBhIHNpbmdsZSBzcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtOgorIwlDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTQorIyBvciBpbiBzb21lIGNhc2VzLCB0aGUgbmV3ZXIgZm91ci1wYXJ0IGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1LRVJORUwtT1BFUkFUSU5HX1NZU1RFTQorIyBJdCBpcyB3cm9uZyB0byBlY2hvIGFueSBvdGhlciB0eXBlIG9mIHNwZWNpZmljYXRpb24uCisKK21lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3MsLiovLCwnYAorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dIENQVS1NRlItT1BTWVMKKyAgICAgICAkMCBbT1BUSU9OXSBBTElBUworCitDYW5vbmljYWxpemUgYSBjb25maWd1cmF0aW9uIG5hbWUuCisKK09wZXJhdGlvbiBtb2RlczoKKyAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC10LCAtLXRpbWUtc3RhbXAgICBwcmludCBkYXRlIG9mIGxhc3QgbW9kaWZpY2F0aW9uLCB0aGVuIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKworUmVwb3J0IGJ1Z3MgYW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiIKKwordmVyc2lvbj0iXAorR05VIGNvbmZpZy5zdWIgKCR0aW1lc3RhbXApCisKK0NvcHlyaWdodCAxOTkyLTIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIKKyAgICAgICBleGl0IDEgOzsKKworICAgICpsb2NhbCopCisgICAgICAgIyBGaXJzdCBwYXNzIHRocm91Z2ggYW55IGxvY2FsIG1hY2hpbmUgdHlwZXMuCisgICAgICAgZWNobyAkMQorICAgICAgIGV4aXQgOzsKKworICAgICogKQorICAgICAgIGJyZWFrIDs7CisgIGVzYWMKK2RvbmUKKworY2FzZSAkIyBpbgorIDApIGVjaG8gIiRtZTogbWlzc2luZyBhcmd1bWVudCRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworIDEpIDs7CisgKikgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgICAgZXhpdCAxOzsKK2VzYWMKKworIyBTZXBhcmF0ZSB3aGF0IHRoZSB1c2VyIGdhdmUgaW50byBDUFUtQ09NUEFOWSBhbmQgT1Mgb3IgS0VSTkVMLU9TIChpZiBhbnkpLgorIyBIZXJlIHdlIG11c3QgcmVjb2duaXplIGFsbCB0aGUgdmFsaWQgS0VSTkVMLU9TIGNvbWJpbmF0aW9ucy4KK21heWJlX29zPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMi8nYAorY2FzZSAkbWF5YmVfb3MgaW4KKyAgbnRvLXFueCogfCBsaW51eC1nbnUqIHwgbGludXgtYW5kcm9pZCogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBcCisgIGxpbnV4LW11c2wqIHwgbGludXgtdWNsaWJjKiB8IHVjbGludXgtdWNsaWJjKiB8IHVjbGludXgtZ251KiB8IGtmcmVlYnNkKi1nbnUqIHwgXAorICBrbmV0YnNkKi1nbnUqIHwgbmV0YnNkKi1nbnUqIHwgXAorICBrb3BlbnNvbGFyaXMqLWdudSogfCBcCisgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKyAgICBvcz0tJG1heWJlX29zCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICA7OworICBhbmRyb2lkLWxpbnV4KQorICAgIG9zPS1saW51eC1hbmRyb2lkCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AtdW5rbm93bgorICAgIDs7CisgICopCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy8tW14tXSokLy8nYAorICAgIGlmIFsgJGJhc2ljX21hY2hpbmUgIT0gJDEgXQorICAgIHRoZW4gb3M9YGVjaG8gJDEgfCBzZWQgJ3MvLiotLy0vJ2AKKyAgICBlbHNlIG9zPTsgZmkKKyAgICA7OworZXNhYworCisjIyMgTGV0J3MgcmVjb2duaXplIGNvbW1vbiBtYWNoaW5lcyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMgc28KKyMjIyB0aGF0IHRoaW5ncyBsaWtlIGNvbmZpZy5zdWIgZGVjc3RhdGlvbi0zMTAwIHdvcmsuICBXZSBhbHNvCisjIyMgcmVjb2duaXplIHNvbWUgbWFudWZhY3R1cmVycyBhcyBub3QgYmVpbmcgb3BlcmF0aW5nIHN5c3RlbXMsIHNvIHdlCisjIyMgY2FuIHByb3ZpZGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyBiZWxvdy4KK2Nhc2UgJG9zIGluCisJLXN1bipvcyopCisJCSMgUHJldmVudCBmb2xsb3dpbmcgY2xhdXNlIGZyb20gaGFuZGxpbmcgdGhpcyBpbnZhbGlkIGlucHV0LgorCQk7OworCS1kZWMqIHwgLW1pcHMqIHwgLXNlcXVlbnQqIHwgLWVuY29yZSogfCAtcGM1MzIqIHwgLXNnaSogfCAtc29ueSogfCBcCisJLWF0dCogfCAtNzMwMCogfCAtMzMwMCogfCAtZGVsdGEqIHwgLW1vdG9yb2xhKiB8IC1zdW5bMjM0XSogfCBcCisJLXVuaWNvbSogfCAtaWJtKiB8IC1uZXh0IHwgLWhwIHwgLWlzaSogfCAtYXBvbGxvIHwgLWFsdG9zKiB8IFwKKwktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAorCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCisJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCisJLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSB8IC1taWNyb2JsYXplKikKKwkJb3M9CisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktYmx1ZWdlbmUqKQorCQlvcz0tY25rCisJCTs7CisJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCisJCW9zPQorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLXNjb3V0KQorCQk7OworCS13cnMpCisJCW9zPS12eHdvcmtzCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktY2hvcnVzb3MqKQorCQlvcz0tY2hvcnVzb3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1jaG9ydXNyZGIpCisJCW9zPS1jaG9ydXNyZGIKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworCS1oaXV4KikKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwktc2NvNikKKwkJb3M9LXNjbzV2NgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzUpCisJCW9zPS1zY28zLjJ2NQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzQpCisJCW9zPS1zY28zLjJ2NAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMi5bNC05XSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy9zY28zLjIuL3NjbzMuMnYvJ2AKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjJ2WzQtOV0qKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzV2NiopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvKikKKwkJb3M9LXNjbzMuMnYyCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktdWRrKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1pc2MpCisJCW9zPS1pc2MyLjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1jbGl4KikKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWludGVyZ3JhcGgKKwkJOzsKKwktaXNjKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1seW54KjE3OCkKKwkJb3M9LWx5bnhvczE3OAorCQk7OworCS1seW54KjUpCisJCW9zPS1seW54b3M1CisJCTs7CisJLWx5bngqKQorCQlvcz0tbHlueG9zCisJCTs7CisJLXB0eCopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtc2VxdWVudC8nYAorCQk7OworCS13aW5kb3dzbnQqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3Mvd2luZG93c250L3dpbm50LydgCisJCTs7CisJLXBzb3MqKQorCQlvcz0tcHNvcworCQk7OworCS1taW50IHwgLW1pbnRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworZXNhYworCisjIERlY29kZSBhbGlhc2VzIGZvciBjZXJ0YWluIENQVS1DT01QQU5ZIGNvbWJpbmF0aW9ucy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLgorCSMgU29tZSBhcmUgb21pdHRlZCBoZXJlIGJlY2F1c2UgdGhleSBoYXZlIHNwZWNpYWwgbWVhbmluZ3MgYmVsb3cuCisJMTc1MGEgfCA1ODAgXAorCXwgYTI5ayBcCisJfCBhYXJjaDY0IHwgYWFyY2g2NF9iZSBcCisJfCBhbHBoYSB8IGFscGhhZXZbNC04XSB8IGFscGhhZXY1NiB8IGFscGhhZXY2Wzc4XSB8IGFscGhhcGNhNVs2N10gXAorCXwgYWxwaGE2NCB8IGFscGhhNjRldls0LThdIHwgYWxwaGE2NGV2NTYgfCBhbHBoYTY0ZXY2Wzc4XSB8IGFscGhhNjRwY2E1WzY3XSBcCisJfCBhbTMzXzIuMCBcCisJfCBhcmMgfCBhcmNlYiBcCisJfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyLThdIHwgYXJtdlszLThdW2xiXSB8IGFybXY3W2FybV0gXAorCXwgYXZyIHwgYXZyMzIgXAorCXwgYmUzMiB8IGJlNjQgXAorCXwgYmZpbiBcCisJfCBjNHggfCBjODA1MSB8IGNsaXBwZXIgXAorCXwgZDEwdiB8IGQzMHYgfCBkbHggfCBkc3AxNnh4IFwKKwl8IGVwaXBoYW55IFwKKwl8IGZpZG8gfCBmcjMwIHwgZnJ2IFwKKwl8IGg4MzAwIHwgaDg1MDAgfCBocHBhIHwgaHBwYTEuWzAxXSB8IGhwcGEyLjAgfCBocHBhMi4wW253XSB8IGhwcGE2NCBcCisJfCBoZXhhZ29uIFwKKwl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAorCXwgaXAyayB8IGlxMjAwMCBcCisJfCBrMW9tIFwKKwl8IGxlMzIgfCBsZTY0IFwKKwl8IGxtMzIgXAorCXwgbTMyYyB8IG0zMnIgfCBtMzJybGUgfCBtNjgwMDAgfCBtNjhrIHwgbTg4ayBcCisJfCBtYXhxIHwgbWIgfCBtaWNyb2JsYXplIHwgbWljcm9ibGF6ZWVsIHwgbWNvcmUgfCBtZXAgfCBtZXRhZyBcCisJfCBtaXBzIHwgbWlwc2JlIHwgbWlwc2ViIHwgbWlwc2VsIHwgbWlwc2xlIFwKKwl8IG1pcHMxNiBcCisJfCBtaXBzNjQgfCBtaXBzNjRlbCBcCisJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCisJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorCXwgbWlwczY0cjU5MDAgfCBtaXBzNjRyNTkwMGVsIFwKKwl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCisJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCisJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCisJfCBtaXBzNjR2cjU5MDAgfCBtaXBzNjR2cjU5MDBlbCBcCisJfCBtaXBzaXNhMzIgfCBtaXBzaXNhMzJlbCBcCisJfCBtaXBzaXNhMzJyMiB8IG1pcHNpc2EzMnIyZWwgXAorCXwgbWlwc2lzYTMycjYgfCBtaXBzaXNhMzJyNmVsIFwKKwl8IG1pcHNpc2E2NCB8IG1pcHNpc2E2NGVsIFwKKwl8IG1pcHNpc2E2NHIyIHwgbWlwc2lzYTY0cjJlbCBcCisJfCBtaXBzaXNhNjRyNiB8IG1pcHNpc2E2NHI2ZWwgXAorCXwgbWlwc2lzYTY0c2IxIHwgbWlwc2lzYTY0c2IxZWwgXAorCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKKwl8IG1pcHNyNTkwMCB8IG1pcHNyNTkwMGVsIFwKKwl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCisJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtb3hpZSBcCisJfCBtdCBcCisJfCBtc3A0MzAgXAorCXwgbmRzMzIgfCBuZHMzMmxlIHwgbmRzMzJiZSBcCisJfCBuaW9zIHwgbmlvczIgfCBuaW9zMmViIHwgbmlvczJlbCBcCisJfCBuczE2ayB8IG5zMzJrIFwKKwl8IG9wZW44IHwgb3IxayB8IG9yMWtuZCB8IG9yMzIgXAorCXwgcGRwMTAgfCBwZHAxMSB8IHBqIHwgcGpsIFwKKwl8IHBvd2VycGMgfCBwb3dlcnBjNjQgfCBwb3dlcnBjNjRsZSB8IHBvd2VycGNsZSBcCisJfCBweXJhbWlkIFwKKwl8IHJpc2N2MzIgfCByaXNjdjY0IFwKKwl8IHJsNzggfCByeCBcCisJfCBzY29yZSBcCisJfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAorCXwgc2g2NCB8IHNoNjRsZSBcCisJfCBzcGFyYyB8IHNwYXJjNjQgfCBzcGFyYzY0YiB8IHNwYXJjNjR2IHwgc3BhcmM4NnggfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSBcCisJfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgXAorCXwgc3B1IFwKKwl8IHRhaG9lIHwgdGljNHggfCB0aWM1NHggfCB0aWM1NXggfCB0aWM2eCB8IHRpYzgwIHwgdHJvbiBcCisJfCB1Ymljb20zMiBcCisJfCB2ODUwIHwgdjg1MGUgfCB2ODUwZTEgfCB2ODUwZTIgfCB2ODUwZXMgfCB2ODUwZTJ2MyBcCisJfCB2aXNpdW0gXAorCXwgd2UzMmsgXAorCXwgeDg2IHwgeGMxNnggfCB4c3Rvcm15MTYgfCB4dGVuc2EgXAorCXwgejhrIHwgejgwKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwljNTR4KQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCisJCTs7CisJYzU1eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtdW5rbm93bgorCQk7OworCWM2eCkKKwkJYmFzaWNfbWFjaGluZT10aWM2eC11bmtub3duCisJCTs7CisJbGVvbnxsZW9uWzMtOV0pCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtJGJhc2ljX21hY2hpbmUKKwkJOzsKKwltNjgxMSB8IG02OGhjMTEgfCBtNjgxMiB8IG02OGhjMTIgfCBtNjhoY3MxMnggfCBudnB0eCB8IHBpY29jaGlwKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJb3M9LW5vbmUKKwkJOzsKKwltODgxMTAgfCBtNjgwWzEyMzQ2XTAgfCBtNjgzPzIgfCBtNjgzNjAgfCBtNTIwMCB8IHY3MCB8IHc2NSB8IHo4aykKKwkJOzsKKwltczEpCisJCWJhc2ljX21hY2hpbmU9bXQtdW5rbm93bgorCQk7OworCisJc3Ryb25nYXJtIHwgdGh1bWIgfCB4c2NhbGUpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJOzsKKwl4Z2F0ZSkKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCW9zPS1ub25lCisJCTs7CisJeHNjYWxlZWIpCisJCWJhc2ljX21hY2hpbmU9YXJtZWItdW5rbm93bgorCQk7OworCisJeHNjYWxlZWwpCisJCWJhc2ljX21hY2hpbmU9YXJtZWwtdW5rbm93bgorCQk7OworCisJIyBXZSB1c2UgYHBjJyByYXRoZXIgdGhhbiBgdW5rbm93bicKKwkjIGJlY2F1c2UgKDEpIHRoYXQncyB3aGF0IHRoZXkgbm9ybWFsbHkgYXJlLCBhbmQKKwkjICgyKSB0aGUgd29yZCAidW5rbm93biIgdGVuZHMgdG8gY29uZnVzZSBiZWdpbm5pbmcgdXNlcnMuCisJaSo4NiB8IHg4Nl82NCkKKwkgIGJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtcGMKKwkgIDs7CisJIyBPYmplY3QgaWYgbW9yZSB0aGFuIG9uZSBjb21wYW55IG5hbWUgd29yZC4KKwkqLSotKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aCBjb21wYW55IG5hbWUuCisJNTgwLSogXAorCXwgYTI5ay0qIFwKKwl8IGFhcmNoNjQtKiB8IGFhcmNoNjRfYmUtKiBcCisJfCBhbHBoYS0qIHwgYWxwaGFldls0LThdLSogfCBhbHBoYWV2NTYtKiB8IGFscGhhZXY2Wzc4XS0qIFwKKwl8IGFscGhhNjQtKiB8IGFscGhhNjRldls0LThdLSogfCBhbHBoYTY0ZXY1Ni0qIHwgYWxwaGE2NGV2Nls3OF0tKiBcCisJfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIHwgYXJjZWItKiBcCisJfCBhcm0tKiAgfCBhcm1iZS0qIHwgYXJtbGUtKiB8IGFybWViLSogfCBhcm12Ki0qIFwKKwl8IGF2ci0qIHwgYXZyMzItKiBcCisJfCBiZTMyLSogfCBiZTY0LSogXAorCXwgYmZpbi0qIHwgYnMyMDAwLSogXAorCXwgY1sxMjNdKiB8IGMzMC0qIHwgW2NqdF05MC0qIHwgYzR4LSogXAorCXwgYzgwNTEtKiB8IGNsaXBwZXItKiB8IGNyYXludi0qIHwgY3lkcmEtKiBcCisJfCBkMTB2LSogfCBkMzB2LSogfCBkbHgtKiBcCisJfCBlbHhzaS0qIFwKKwl8IGYzMFswMV0tKiB8IGY3MDAtKiB8IGZpZG8tKiB8IGZyMzAtKiB8IGZydi0qIHwgZng4MC0qIFwKKwl8IGg4MzAwLSogfCBoODUwMC0qIFwKKwl8IGhwcGEtKiB8IGhwcGExLlswMV0tKiB8IGhwcGEyLjAtKiB8IGhwcGEyLjBbbnddLSogfCBocHBhNjQtKiBcCisJfCBoZXhhZ29uLSogXAorCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKKwl8IGlwMmstKiB8IGlxMjAwMC0qIFwKKwl8IGsxb20tKiBcCisJfCBsZTMyLSogfCBsZTY0LSogXAorCXwgbG0zMi0qIFwKKwl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKKwl8IG02ODAwMC0qIHwgbTY4MFswMTIzNDZdMC0qIHwgbTY4MzYwLSogfCBtNjgzPzItKiB8IG02OGstKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogfCBtZXRhZy0qIFwKKwl8IG1pY3JvYmxhemUtKiB8IG1pY3JvYmxhemVlbC0qIFwKKwl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKKwl8IG1pcHMxNi0qIFwKKwl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCisJfCBtaXBzNjRvY3Rlb24tKiB8IG1pcHM2NG9jdGVvbmVsLSogXAorCXwgbWlwczY0b3Jpb24tKiB8IG1pcHM2NG9yaW9uZWwtKiBcCisJfCBtaXBzNjRyNTkwMC0qIHwgbWlwczY0cjU5MDBlbC0qIFwKKwl8IG1pcHM2NHZyLSogfCBtaXBzNjR2cmVsLSogXAorCXwgbWlwczY0dnI0MTAwLSogfCBtaXBzNjR2cjQxMDBlbC0qIFwKKwl8IG1pcHM2NHZyNDMwMC0qIHwgbWlwczY0dnI0MzAwZWwtKiBcCisJfCBtaXBzNjR2cjUwMDAtKiB8IG1pcHM2NHZyNTAwMGVsLSogXAorCXwgbWlwczY0dnI1OTAwLSogfCBtaXBzNjR2cjU5MDBlbC0qIFwKKwl8IG1pcHNpc2EzMi0qIHwgbWlwc2lzYTMyZWwtKiBcCisJfCBtaXBzaXNhMzJyMi0qIHwgbWlwc2lzYTMycjJlbC0qIFwKKwl8IG1pcHNpc2EzMnI2LSogfCBtaXBzaXNhMzJyNmVsLSogXAorCXwgbWlwc2lzYTY0LSogfCBtaXBzaXNhNjRlbC0qIFwKKwl8IG1pcHNpc2E2NHIyLSogfCBtaXBzaXNhNjRyMmVsLSogXAorCXwgbWlwc2lzYTY0cjYtKiB8IG1pcHNpc2E2NHI2ZWwtKiBcCisJfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAorCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCisJfCBtaXBzcjU5MDAtKiB8IG1pcHNyNTkwMGVsLSogXAorCXwgbWlwc3R4MzktKiB8IG1pcHN0eDM5ZWwtKiBcCisJfCBtbWl4LSogXAorCXwgbXQtKiBcCisJfCBtc3A0MzAtKiBcCisJfCBuZHMzMi0qIHwgbmRzMzJsZS0qIHwgbmRzMzJiZS0qIFwKKwl8IG5pb3MtKiB8IG5pb3MyLSogfCBuaW9zMmViLSogfCBuaW9zMmVsLSogXAorCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCisJfCBvcGVuOC0qIFwKKwl8IG9yMWsqLSogXAorCXwgb3Jpb24tKiBcCisJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKKwl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIFwKKwl8IHB5cmFtaWQtKiBcCisJfCBybDc4LSogfCByb21wLSogfCByczYwMDAtKiB8IHJ4LSogXAorCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyNF1hZWItKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAorCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCisJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCisJfCBzcGFyY2xpdGUtKiBcCisJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN2MS0qIHwgc3g/LSogXAorCXwgdGFob2UtKiBcCisJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiBcCisJfCB0aWxlKi0qIFwKKwl8IHRyb24tKiBcCisJfCB1Ymljb20zMi0qIFwKKwl8IHY4NTAtKiB8IHY4NTBlLSogfCB2ODUwZTEtKiB8IHY4NTBlcy0qIHwgdjg1MGUyLSogfCB2ODUwZTJ2My0qIFwKKwl8IHZheC0qIFwKKwl8IHZpc2l1bS0qIFwKKwl8IHdlMzJrLSogXAorCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhjMTZ4LSogfCB4cHMxMDAtKiBcCisJfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYSotKiBcCisJfCB5bXAtKiBcCisJfCB6OGstKiB8IHo4MC0qKQorCQk7OworCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUsIHdpdGggZ2xvYiBtYXRjaC4KKwl4dGVuc2EqKQorCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgdmFyaW91cyBtYWNoaW5lIG5hbWVzIGFuZCBhbGlhc2VzIHdoaWNoIHN0YW5kCisJIyBmb3IgYSBDUFUgdHlwZSBhbmQgYSBjb21wYW55IGFuZCBzb21ldGltZXMgZXZlbiBhbiBPUy4KKwkzODZic2QpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS1ic2QKKwkJOzsKKwkzYjEgfCA3MzAwIHwgNzMwMC1hdHQgfCBhdHQtNzMwMCB8IHBjNzMwMCB8IHNhZmFyaSB8IHVuaXhwYykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtYXR0CisJCTs7CisJM2IqKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCWEyOWtoaWYpCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCWFiYWN1cykKKwkJYmFzaWNfbWFjaGluZT1hYmFjdXMtdW5rbm93bgorCQk7OworCWFkb2JlNjhrKQorCQliYXNpY19tYWNoaW5lPW02ODAxMC1hZG9iZQorCQlvcz0tc2NvdXQKKwkJOzsKKwlhbGxpYW50IHwgZng4MCkKKwkJYmFzaWNfbWFjaGluZT1meDgwLWFsbGlhbnQKKwkJOzsKKwlhbHRvcyB8IGFsdG9zMzA2OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFsdG9zCisJCTs7CisJYW0yOWspCisJCWJhc2ljX21hY2hpbmU9YTI5ay1ub25lCisJCW9zPS1ic2QKKwkJOzsKKwlhbWQ2NCkKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKKwkJOzsKKwlhbWQ2NC0qKQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWFtZGFobCkKKwkJYmFzaWNfbWFjaGluZT01ODAtYW1kYWhsCisJCW9zPS1zeXN2CisJCTs7CisJYW1pZ2EgfCBhbWlnYS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQk7OworCWFtaWdhb3MgfCBhbWlnYWRvcykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwlhbWlnYXVuaXggfCBhbWl4KQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tc3lzdjQKKwkJOzsKKwlhcG9sbG82OCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwb2xsbworCQlvcz0tc3lzdgorCQk7OworCWFwb2xsbzY4YnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1ic2QKKwkJOzsKKwlhcm9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWFyb3MKKwkJOzsKKwlhdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQorCQlvcz0tYXV4CisJCTs7CisJYmFsYW5jZSkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCWJsYWNrZmluKQorCQliYXNpY19tYWNoaW5lPWJmaW4tdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlibGFja2Zpbi0qKQorCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJYmx1ZWdlbmUqKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1jbmsKKwkJOzsKKwljNTR4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNTR4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzU1eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM2eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzkwKQorCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwljZWdjYykKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tY2VnY2MKKwkJOzsKKwljb252ZXgtYzEpCisJCWJhc2ljX21hY2hpbmU9YzEtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzIpCisJCWJhc2ljX21hY2hpbmU9YzItY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzMyKQorCQliYXNpY19tYWNoaW5lPWMzMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzQpCisJCWJhc2ljX21hY2hpbmU9YzM0LWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzOCkKKwkJYmFzaWNfbWFjaGluZT1jMzgtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljcmF5IHwgajkwKQorCQliYXNpY19tYWNoaW5lPWo5MC1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwljcmF5bnYpCisJCWJhc2ljX21hY2hpbmU9Y3JheW52LWNyYXkKKwkJb3M9LXVuaWNvc21wCisJCTs7CisJY3IxNiB8IGNyMTYtKikKKwkJYmFzaWNfbWFjaGluZT1jcjE2LXVua25vd24KKwkJb3M9LWVsZgorCQk7OworCWNyZHMgfCB1bm9zKQorCQliYXNpY19tYWNoaW5lPW02OGstY3JkcworCQk7OworCWNyaXN2MzIgfCBjcmlzdjMyLSogfCBldHJheGZzKikKKwkJYmFzaWNfbWFjaGluZT1jcmlzdjMyLWF4aXMKKwkJOzsKKwljcmlzIHwgY3Jpcy0qIHwgZXRyYXgqKQorCQliYXNpY19tYWNoaW5lPWNyaXMtYXhpcworCQk7OworCWNyeCkKKwkJYmFzaWNfbWFjaGluZT1jcngtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJZGEzMCB8IGRhMzAtKikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWRhMzAKKwkJOzsKKwlkZWNzdGF0aW9uIHwgZGVjc3RhdGlvbi0zMTAwIHwgcG1heCB8IHBtYXgtKiB8IHBtaW4gfCBkZWMzMTAwIHwgZGVjc3RhdG4pCisJCWJhc2ljX21hY2hpbmU9bWlwcy1kZWMKKwkJOzsKKwlkZWNzeXN0ZW0xMCogfCBkZWMxMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMTAKKwkJOzsKKwlkZWNzeXN0ZW0yMCogfCBkZWMyMCopCisJCWJhc2ljX21hY2hpbmU9cGRwMTAtZGVjCisJCW9zPS10b3BzMjAKKwkJOzsKKwlkZWx0YSB8IDMzMDAgfCBtb3Rvcm9sYS0zMzAwIHwgbW90b3JvbGEtZGVsdGEgXAorCSAgICAgIHwgMzMwMC1tb3Rvcm9sYSB8IGRlbHRhLW1vdG9yb2xhKQorCQliYXNpY19tYWNoaW5lPW02OGstbW90b3JvbGEKKwkJOzsKKwlkZWx0YTg4KQorCQliYXNpY19tYWNoaW5lPW04OGstbW90b3JvbGEKKwkJb3M9LXN5c3YzCisJCTs7CisJZGljb3MpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tZGljb3MKKwkJOzsKKwlkamdwcCkKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCW9zPS1tc2Rvc2RqZ3BwCisJCTs7CisJZHB4MjAgfCBkcHgyMC0qKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1idWxsCisJCW9zPS1ib3N4CisJCTs7CisJZHB4MiogfCBkcHgyKi1idWxsKQorCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAorCQlvcz0tc3lzdjMKKwkJOzsKKwllYm1vbjI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tZWJtb24KKwkJOzsKKwllbHhzaSkKKwkJYmFzaWNfbWFjaGluZT1lbHhzaS1lbHhzaQorCQlvcz0tYnNkCisJCTs7CisJZW5jb3JlIHwgdW1heCB8IG1tYXgpCisJCWJhc2ljX21hY2hpbmU9bnMzMmstZW5jb3JlCisJCTs7CisJZXMxODAwIHwgT1NFNjhrIHwgb3NlNjhrIHwgb3NlIHwgT1NFKQorCQliYXNpY19tYWNoaW5lPW02OGstZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCWZ4MjgwMCkKKwkJYmFzaWNfbWFjaGluZT1pODYwLWFsbGlhbnQKKwkJOzsKKwlnZW5peCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1ucworCQk7OworCWdtaWNybykKKwkJYmFzaWNfbWFjaGluZT10cm9uLWdtaWNybworCQlvcz0tc3lzdgorCQk7OworCWdvMzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tZ28zMgorCQk7OworCWgzMDUwciogfCBoaXV4KikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhpdGFjaGkKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwloODMwMGhtcykKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwloODMwMHhyYXkpCisJCWJhc2ljX21hY2hpbmU9aDgzMDAtaGl0YWNoaQorCQlvcz0teHJheQorCQk7OworCWg4NTAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4NTAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWhhcnJpcykKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tc3lzdjMKKwkJOzsKKwlocDMwMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDMwMGJzZCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ic2QKKwkJOzsKKwlocDMwMGhwdXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQlvcz0taHB1eAorCQk7OworCWhwM2s5WzAtOV1bMC05XSB8IGhwOVswLTldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMC1ocAorCQk7OworCWhwOWsyWzAtOV1bMC05XSB8IGhwOWszMVswLTldKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1ocAorCQk7OworCWhwOWszWzItOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCTs7CisJaHA5azZbMC05XVswLTldIHwgaHA2WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azdbMC03OV1bMC05XSB8IGhwN1swLTc5XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrNzhbMC05XSB8IGhwNzhbMC05XSkKKwkJIyBGSVhNRTogcmVhbGx5IGhwcGEyLjAtaHAKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbNjddMSB8IGhwOFs2N10xIHwgaHA5azgwWzI0XSB8IGhwODBbMjRdIHwgaHA5azhbNzhdOSB8IGhwOFs3OF05IHwgaHA5azg5MyB8IGhwODkzKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzEzNjc5XSB8IGhwOFswLTldWzEzNjc5XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCTs7CisJaHA5azhbMC05XVswLTldIHwgaHA4WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHBwYS1uZXh0KQorCQlvcz0tbmV4dHN0ZXAzCisJCTs7CisJaHBwYW9zZikKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1vc2YKKwkJOzsKKwlocHBybykKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4xLWhwCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlpMzcwLWlibSogfCBpYm0qKQorCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisJCTs7CisJaSo4NnYzMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2MzIKKwkJOzsKKwlpKjg2djQqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3Y0CisJCTs7CisJaSo4NnYpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdgorCQk7OworCWkqODZzb2wyKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXNvbGFyaXMyCisJCTs7CisJaTM4Nm1hY2gpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1tYWNoCisJCW9zPS1tYWNoCisJCTs7CisJaTM4Ni12c3RhIHwgdnN0YSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LXZzdGEKKwkJOzsKKwlpcmlzIHwgaXJpczRkKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2dpCisJCWNhc2UgJG9zIGluCisJCSAgICAtaXJpeCopCisJCQk7OworCQkgICAgKikKKwkJCW9zPS1pcml4NAorCQkJOzsKKwkJZXNhYworCQk7OworCWlzaTY4IHwgaXNpKQorCQliYXNpY19tYWNoaW5lPW02OGstaXNpCisJCW9zPS1zeXN2CisJCTs7CisJbGVvbi0qfGxlb25bMy05XS0qKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzLy0uKi8vJ2AKKwkJOzsKKwltNjhrbm9tbXUpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCW02OGtub21tdS0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJb3M9LWxpbnV4CisJCTs7CisJbTg4ay1vbXJvbiopCisJCWJhc2ljX21hY2hpbmU9bTg4ay1vbXJvbgorCQk7OworCW1hZ251bSB8IG0zMjMwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtbWlwcworCQlvcz0tc3lzdgorCQk7OworCW1lcmxpbikKKwkJYmFzaWNfbWFjaGluZT1uczMyay11dGVrCisJCW9zPS1zeXN2CisJCTs7CisJbWljcm9ibGF6ZSopCisJCWJhc2ljX21hY2hpbmU9bWljcm9ibGF6ZS14aWxpbngKKwkJOzsKKwltaW5ndzY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQlvcz0tbWluZ3c2NAorCQk7OworCW1pbmd3MzIpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbWluZ3czMgorCQk7OworCW1pbmd3MzJjZSkKKwkJYmFzaWNfbWFjaGluZT1hcm0tdW5rbm93bgorCQlvcz0tbWluZ3czMmNlCisJCTs7CisJbWluaWZyYW1lKQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1jb252ZXJnZW50CisJCTs7CisJKm1pbnQgfCAtbWludFswLTldKiB8ICpNaU5UIHwgKk1pTlRbMC05XSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hdGFyaQorCQlvcz0tbWludAorCQk7OworCW1pcHMzKi0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21pcHMzL21pcHM2NC8nYAorCQk7OworCW1pcHMzKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AtdW5rbm93bgorCQk7OworCW1vbml0b3IpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1yb202OGsKKwkJb3M9LWNvZmYKKwkJOzsKKwltb3JwaG9zKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQlvcz0tbW9ycGhvcworCQk7OworCW1veGllYm94KQorCQliYXNpY19tYWNoaW5lPW1veGllLXVua25vd24KKwkJb3M9LW1veGllYm94CisJCTs7CisJbXNkb3MpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tbXNkb3MKKwkJOzsKKwltczEtKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9tczEtL210LS8nYAorCQk7OworCW1zeXMpCisJCWJhc2ljX21hY2hpbmU9aTY4Ni1wYworCQlvcz0tbXN5cworCQk7OworCW12cykKKwkJYmFzaWNfbWFjaGluZT1pMzcwLWlibQorCQlvcz0tbXZzCisJCTs7CisJbmFjbCkKKwkJYmFzaWNfbWFjaGluZT1sZTMyLXVua25vd24KKwkJb3M9LW5hY2wKKwkJOzsKKwluY3IzMDAwKQorCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCisJCW9zPS1zeXN2NAorCQk7OworCW5ldGJzZDM4NikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LW5ldGJzZAorCQk7OworCW5ldHdpbmRlcikKKwkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKKwkJb3M9LWxpbnV4CisJCTs7CisJbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MxMDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzLTM2MDAgfCByaXNjLW5ld3MpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZWN2NzApCisJCWJhc2ljX21hY2hpbmU9djcwLW5lYworCQlvcz0tc3lzdgorCQk7OworCW5leHQgfCBtKi1uZXh0ICkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1uZXh0c3RlcCogKQorCQkJOzsKKwkJICAgIC1uczIqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAyCisJCQk7OworCQkgICAgKikKKwkJICAgICAgb3M9LW5leHRzdGVwMworCQkJOzsKKwkJZXNhYworCQk7OworCW5oMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5oWzQ1XTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5pbmR5OTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW5pbmR5CisJCTs7CisJbW9uOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW1vbjk2MAorCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CisJbnAxKQorCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAorCQk7OworCW5lby10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bmVvLXRhbmRlbQorCQk7OworCW5zZS10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNlLXRhbmRlbQorCQk7OworCW5zci10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CisJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCW9zNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQlvcz0tb3M2OGsKKwkJOzsKKwlwYS1oaXRhY2hpKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCXBhcmFnb24pCisJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAorCQlvcz0tb3NmCisJCTs7CisJcGFyaXNjKQorCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlwYXJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCXBiZCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKKwkJOzsKKwlwYmIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay10dGkKKwkJOzsKKwlwYzUzMiB8IHBjNTMyLSopCisJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKKwkJOzsKKwlwYzk4KQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJOzsKKwlwYzk4LSopCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCTs7CisJcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bTQpCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1wYworCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtNC0qKQorCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwbikKKwkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAorCQk7OworCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQorCQk7OworCXBwYyB8IHBwY2JlKQliYXNpY19tYWNoaW5lPXBvd2VycGMtdW5rbm93bgorCQk7OworCXBwYy0qIHwgcHBjYmUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjbGUgfCBwb3dlcnBjbGl0dGxlIHwgcHBjLWxlIHwgcG93ZXJwYy1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KKwkJOzsKKwlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCisJCTs7CisJcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KKwkJOzsKKwlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBzMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQorCQk7OworCXB3MzIpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCisJCW9zPS1wdzMyCisJCTs7CisJcmRvcyB8IHJkb3M2NCkKKwkJYmFzaWNfbWFjaGluZT14ODZfNjQtcGMKKwkJb3M9LXJkb3MKKwkJOzsKKwlyZG9zMzIpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYworCQlvcz0tcmRvcworCQk7OworCXJvbTY4aykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXJvbTY4aworCQlvcz0tY29mZgorCQk7OworCXJtWzQ2XTAwKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2llbWVucworCQk7OworCXJ0cGMgfCBydHBjLSopCisJCWJhc2ljX21hY2hpbmU9cm9tcC1pYm0KKwkJOzsKKwlzMzkwIHwgczM5MC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTAtaWJtCisJCTs7CisJczM5MHggfCBzMzkweC0qKQorCQliYXNpY19tYWNoaW5lPXMzOTB4LWlibQorCQk7OworCXNhMjkyMDApCisJCWJhc2ljX21hY2hpbmU9YTI5ay1hbWQKKwkJb3M9LXVkaQorCQk7OworCXNiMSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhNjRzYjEtdW5rbm93bgorCQk7OworCXNiMWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMWVsLXVua25vd24KKwkJOzsKKwlzZGUpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTMyLXNkZQorCQlvcz0tZWxmCisJCTs7CisJc2VpKQorCQliYXNpY19tYWNoaW5lPW1pcHMtc2VpCisJCW9zPS1zZWl1eAorCQk7OworCXNlcXVlbnQpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCTs7CisJc2gpCisJCWJhc2ljX21hY2hpbmU9c2gtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJc2g1ZWwpCisJCWJhc2ljX21hY2hpbmU9c2g1bGUtdW5rbm93bgorCQk7OworCXNoNjQpCisJCWJhc2ljX21hY2hpbmU9c2g2NC11bmtub3duCisJCTs7CisJc3BhcmNsaXRlLXdycyB8IHNpbXNvLXdycykKKwkJYmFzaWNfbWFjaGluZT1zcGFyY2xpdGUtd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJc3BzNykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWJ1bGwKKwkJb3M9LXN5c3YyCisJCTs7CisJc3B1cikKKwkJYmFzaWNfbWFjaGluZT1zcHVyLXVua25vd24KKwkJOzsKKwlzdDIwMDApCisJCWJhc2ljX21hY2hpbmU9bTY4ay10YW5kZW0KKwkJOzsKKwlzdHJhdHVzKQorCQliYXNpY19tYWNoaW5lPWk4NjAtc3RyYXR1cworCQlvcz0tc3lzdjQKKwkJOzsKKwlzdHJvbmdhcm0tKiB8IHRodW1iLSopCisJCWJhc2ljX21hY2hpbmU9YXJtLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJc3VuMikKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCTs7CisJc3VuMm9zMykKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4yb3M0KQorCQliYXNpY19tYWNoaW5lPW02ODAwMC1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjNvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zMworCQk7OworCXN1bjNvczQpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRvczMpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW40b3M0KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3M0CisJCTs7CisJc3VuNHNvbDIpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCW9zPS1zb2xhcmlzMgorCQk7OworCXN1bjMgfCBzdW4zLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1zdW4KKwkJOzsKKwlzdW40KQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQk7OworCXN1bjM4NiB8IHN1bjM4NmkgfCByb2FkcnVubmVyKQorCQliYXNpY19tYWNoaW5lPWkzODYtc3VuCisJCTs7CisJc3YxKQorCQliYXNpY19tYWNoaW5lPXN2MS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwlzeW1tZXRyeSkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJdDNlKQorCQliYXNpY19tYWNoaW5lPWFscGhhZXY1LWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXQ5MCkKKwkJYmFzaWNfbWFjaGluZT10OTAtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJdGlsZSopCisJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdHgzOSkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCisJCTs7CisJdHgzOWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgorCQk7OworCXRvYWQxKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAorCQlvcz0tdG9wczIwCisJCTs7CisJdG93ZXIgfCB0b3dlci0zMikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgorCQk7OworCXRwZikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJb3M9LXRwZgorCQk7OworCXVkaTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJdWx0cmEzKQorCQliYXNpY19tYWNoaW5lPWEyOWstbnl1CisJCW9zPS1zeW0xCisJCTs7CisJdjgxMCB8IG5lY3Y4MTApCisJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKKwkJb3M9LW5vbmUKKwkJOzsKKwl2YXh2KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwl2bXMpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tdm1zCisJCTs7CisJdnBwKnx2eHx2eC0qKQorCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQorCQk7OworCXZ4d29ya3M5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdzY1KikKKwkJYmFzaWNfbWFjaGluZT13NjUtd2RjCisJCW9zPS1ub25lCisJCTs7CisJdzg5ay0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQlvcz0tcHJvZWxmCisJCTs7CisJeGJveCkKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJeHBzIHwgeHBzMTAwKQorCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKwkJOzsKKwl4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXnhzY2FsZS9hcm0vJ2AKKwkJOzsKKwl5bXApCisJCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXo4ay0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCXo4MC0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCW5vbmUpCisJCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCisJCW9zPS1ub25lCisJCTs7CisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KKyMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KKwl3ODlrKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQk7OworCW9wNTBuKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJb3A2MGMpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlyb21wKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJbW1peCkKKwkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCisJCTs7CisJcnM2MDAwKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KKwkJOzsKKwl2YXgpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQk7OworCXBkcDEwKQorCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0CisJCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgorCQk7OworCXBkcDExKQorCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYworCQk7OworCXdlMzJrKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisJCTs7CisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJY3lkcmEpCisJCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQorCQk7OworCW9yaW9uKQorCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAorCQk7OworCW9yaW9uMTA1KQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCisJCTs7CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCTs7CisJcG1hYyB8IHBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKKwkJOzsKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWRpZ2l0YWwqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKKwkJOzsKKwkqLWNvbW1vZG9yZSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIFsgeCIkb3MiICE9IHgiIiBdCit0aGVuCitjYXNlICRvcyBpbgorCSMgRmlyc3QgbWF0Y2ggc29tZSBzeXN0ZW0gdHlwZSBhbGlhc2VzCisJIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KKwkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KKwktYXVyb3JhdXgpCisJCW9zPS1hdXJvcmF1eAorCQk7OworCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisJCTs7CisJLXNvbGFyaXMpCisJCW9zPS1zb2xhcmlzMgorCQk7OworCS1zdnI0KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXVuaXh3YXJlKikKKwkJb3M9LXN5c3Y0LjJ1dworCQk7OworCS1nbnUvbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCisJIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KKwkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KKwktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtY25rKiB8IC1zdW5vcyB8IC1zdW5vc1szNF0qXAorCSAgICAgIHwgLWhwdXgqIHwgLXVub3MqIHwgLW9zZiogfCAtbHVuYSogfCAtZGd1eCogfCAtYXVyb3JhdXgqIHwgLXNvbGFyaXMqIFwKKwkgICAgICB8IC1zeW0qIHwgLWtvcGVuc29sYXJpcyogfCAtcGxhbjkqIFwKKwkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKKwkgICAgICB8IC1hb3MqIHwgLWFyb3MqIFwKKwkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXAorCSAgICAgIHwgLWNsaXgqIHwgLXJpc2NvcyogfCAtdW5pcGx1cyogfCAtaXJpcyogfCAtcnR1KiB8IC14ZW5peCogXAorCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAta25ldGJzZCogfCAtbWlyYnNkKiB8IC1uZXRic2QqIFwKKwkgICAgICB8IC1iaXRyaWcqIHwgLW9wZW5ic2QqIHwgLXNvbGlkYnNkKiBcCisJICAgICAgfCAtZWtrb2JzZCogfCAta2ZyZWVic2QqIHwgLWZyZWVic2QqIHwgLXJpc2NpeCogfCAtbHlueG9zKiBcCisJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAorCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKKwkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiB8IC1jZWdjYyogXAorCSAgICAgIHwgLWN5Z3dpbiogfCAtbXN5cyogfCAtcGUqIHwgLXBzb3MqIHwgLW1vc3MqIHwgLXByb2VsZiogfCAtcnRlbXMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1taW5ndzY0KiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LWFuZHJvaWQqIFwKKwkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LW11c2wqIHwgLWxpbnV4LXVjbGliYyogXAorCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIHwgLW1veGllYm94KiBcCisJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKwkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKKwkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKKwkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCisJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCisJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKKwkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyogfCAtdGlydG9zKikKKwkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OworCS1saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwktc3Vub3M1KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQk7OworCS1zdW5vczYqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJLW9wZW5lZCopCisJCW9zPS1vcGVuZWRpdGlvbgorCQk7OworCS1vczQwMCopCisJCW9zPS1vczQwMAorCQk7OworCS13aW5jZSopCisJCW9zPS13aW5jZQorCQk7OworCS1vc2Zyb3NlKikKKwkJb3M9LW9zZnJvc2UKKwkJOzsKKwktb3NmKikKKwkJb3M9LW9zZgorCQk7OworCS11dGVrKikKKwkJb3M9LWJzZAorCQk7OworCS1keW5peCopCisJCW9zPS1ic2QKKwkJOzsKKwktYWNpcyopCisJCW9zPS1hb3MKKwkJOzsKKwktYXRoZW9zKikKKwkJb3M9LWF0aGVvcworCQk7OworCS1zeWxsYWJsZSopCisJCW9zPS1zeWxsYWJsZQorCQk7OworCS0zODZic2QpCisJCW9zPS1ic2QKKwkJOzsKKwktY3RpeCogfCAtdXRzKikKKwkJb3M9LXN5c3YKKwkJOzsKKwktbm92YSopCisJCW9zPS1ydG1rLW5vdmEKKwkJOzsKKwktbnMyICkKKwkJb3M9LW5leHRzdGVwMgorCQk7OworCS1uc2sqKQorCQlvcz0tbnNrCisJCTs7CisJIyBQcmVzZXJ2ZSB0aGUgdmVyc2lvbiBudW1iZXIgb2Ygc2luaXg1LgorCS1zaW5peDUuKikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHNpbml4fHN5c3Z8J2AKKwkJOzsKKwktc2luaXgqKQorCQlvcz0tc3lzdjQKKwkJOzsKKwktdHBmKikKKwkJb3M9LXRwZgorCQk7OworCS10cml0b24qKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktb3NzKikKKwkJb3M9LXN5c3YzCisJCTs7CisJLXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCS1zdnIzKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3lzdnI0KQorCQlvcz0tc3lzdjQKKwkJOzsKKwkjIFRoaXMgbXVzdCBjb21lIGFmdGVyIC1zeXN2cjQuCisJLXN5c3YqKQorCQk7OworCS1vc2UqKQorCQlvcz0tb3NlCisJCTs7CisJLWVzMTgwMCopCisJCW9zPS1vc2UKKwkJOzsKKwkteGVuaXgpCisJCW9zPS14ZW5peAorCQk7OworCS0qbWludCB8IC1taW50WzAtOV0qIHwgLSpNaU5UIHwgLU1pTlRbMC05XSopCisJCW9zPS1taW50CisJCTs7CisJLWFyb3MqKQorCQlvcz0tYXJvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCisJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisJLW5hY2wqKQorCQk7OworCS1ub25lKQorCQk7OworCSopCisJCSMgR2V0IHJpZCBvZiB0aGUgYC0nIGF0IHRoZSBiZWdpbm5pbmcgb2YgJG9zLgorCQlvcz1gZWNobyAkb3MgfCBzZWQgJ3MvW14tXSotLy8nYAorCQllY2hvIEludmFsaWQgY29uZmlndXJhdGlvbiBcYCQxXCc6IHN5c3RlbSBcYCRvc1wnIG5vdCByZWNvZ25pemVkIDE+JjIKKwkJZXhpdCAxCisJCTs7Citlc2FjCitlbHNlCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgdGhhdCBjb21lIHdpdGggdmFyaW91cyBtYWNoaW5lcy4KKyMgVGhlIHZhbHVlIHNob3VsZCBiZSB3aGF0IHRoZSB2ZW5kb3IgY3VycmVudGx5IHNoaXBzIG91dCB0aGUgZG9vciB3aXRoIHRoZWlyCisjIG1hY2hpbmUgb3IgcHV0IGFub3RoZXIgd2F5LCB0aGUgbW9zdCBwb3B1bGFyIG9zIHByb3ZpZGVkIHdpdGggdGhlIG1hY2hpbmUuCisKKyMgTm90ZSB0aGF0IGlmIHlvdSdyZSBnb2luZyB0byB0cnkgdG8gbWF0Y2ggIi1NQU5VRkFDVFVSRVIiIGhlcmUgKHNheSwKKyMgIi1zdW4iKSwgdGhlbiB5b3UgaGF2ZSB0byB0ZWxsIHRoZSBjYXNlIHN0YXRlbWVudCB1cCB0b3dhcmRzIHRoZSB0b3AKKyMgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nIHN5c3RlbS4gIE90aGVyd2lzZSwgY29kZSBhYm92ZQorIyB3aWxsIHNpZ25hbCBhbiBlcnJvciBzYXlpbmcgdGhhdCBNQU5VRkFDVFVSRVIgaXNuJ3QgYW4gb3BlcmF0aW5nCisjIHN5c3RlbSwgYW5kIHdlJ2xsIG5ldmVyIGdldCB0byB0aGlzIHBvaW50LgorCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJc2NvcmUtKikKKwkJb3M9LWVsZgorCQk7OworCXNwdS0qKQorCQlvcz0tZWxmCisJCTs7CisJKi1hY29ybikKKwkJb3M9LXJpc2NpeDEuMgorCQk7OworCWFybSotcmViZWwpCisJCW9zPS1saW51eAorCQk7OworCWFybSotc2VtaSkKKwkJb3M9LWFvdXQKKwkJOzsKKwljNHgtKiB8IHRpYzR4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJYzgwNTEtKikKKwkJb3M9LWVsZgorCQk7OworCWhleGFnb24tKikKKwkJb3M9LWVsZgorCQk7OworCXRpYzU0eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzU1eC0qKQorCQlvcz0tY29mZgorCQk7OworCXRpYzZ4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPS10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQorCQlvcz0tbm9uZQorCQk7OworCSotZGVjIHwgdmF4LSopCisJCW9zPS11bHRyaXg0LjIKKwkJOzsKKwltNjgqLWFwb2xsbykKKwkJb3M9LWRvbWFpbgorCQk7OworCWkzODYtc3VuKQorCQlvcz0tc3Vub3M0LjAuMgorCQk7OworCW02ODAwMC1zdW4pCisJCW9zPS1zdW5vczMKKwkJOzsKKwltNjgqLWNpc2NvKQorCQlvcz0tYW91dAorCQk7OworCW1lcC0qKQorCQlvcz0tZWxmCisJCTs7CisJbWlwcyotY2lzY28pCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi0qKQorCQlvcz0tZWxmCisJCTs7CisJb3IzMi0qKQorCQlvcz0tY29mZgorCQk7OworCSotdHRpKQkjIG11c3QgYmUgYmVmb3JlIHNwYXJjIGVudHJ5IG9yIHdlIGdldCB0aGUgd3Jvbmcgb3MuCisJCW9zPS1zeXN2MworCQk7OworCXNwYXJjLSogfCAqLXN1bikKKwkJb3M9LXN1bm9zNC4xLjEKKwkJOzsKKwkqLWJlKQorCQlvcz0tYmVvcworCQk7OworCSotaGFpa3UpCisJCW9zPS1oYWlrdQorCQk7OworCSotaWJtKQorCQlvcz0tYWl4CisJCTs7CisJKi1rbnV0aCkKKwkJb3M9LW1taXh3YXJlCisJCTs7CisJKi13ZWMpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLXdpbmJvbmQpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLW9raSkKKwkJb3M9LXByb2VsZgorCQk7OworCSotaHApCisJCW9zPS1ocHV4CisJCTs7CisJKi1oaXRhY2hpKQorCQlvcz0taGl1eAorCQk7OworCWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVyZ2VudCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWNibSkKKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwkqLWRnKQorCQlvcz0tZGd1eAorCQk7OworCSotZG9scGhpbikKKwkJb3M9LXN5c3YzCisJCTs7CisJbTY4ay1jY3VyKQorCQlvcz0tcnR1CisJCTs7CisJbTg4ay1vbXJvbiopCisJCW9zPS1sdW5hCisJCTs7CisJKi1uZXh0ICkKKwkJb3M9LW5leHRzdGVwCisJCTs7CisJKi1zZXF1ZW50KQorCQlvcz0tcHR4CisJCTs7CisJKi1jcmRzKQorCQlvcz0tdW5vcworCQk7OworCSotbnMpCisJCW9zPS1nZW5peAorCQk7OworCWkzNzAtKikKKwkJb3M9LW12cworCQk7OworCSotbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCSotZ291bGQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1oaWdobGV2ZWwpCisJCW9zPS1ic2QKKwkJOzsKKwkqLWVuY29yZSkKKwkJb3M9LWJzZAorCQk7OworCSotc2dpKQorCQlvcz0taXJpeAorCQk7OworCSotc2llbWVucykKKwkJb3M9LXN5c3Y0CisJCTs7CisJKi1tYXNzY29tcCkKKwkJb3M9LXJ0dQorCQk7OworCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRzdSkKKwkJb3M9LXV4cHYKKwkJOzsKKwkqLXJvbTY4aykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLSpidWcpCisJCW9zPS1jb2ZmCisJCTs7CisJKi1hcHBsZSkKKwkJb3M9LW1hY29zCisJCTs7CisJKi1hdGFyaSopCisJCW9zPS1taW50CisJCTs7CisJKikKKwkJb3M9LW5vbmUKKwkJOzsKK2VzYWMKK2ZpCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCisjIG1hbnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgordmVuZG9yPXVua25vd24KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLXVua25vd24pCisJCWNhc2UgJG9zIGluCisJCQktcmlzY2l4KikKKwkJCQl2ZW5kb3I9YWNvcm4KKwkJCQk7OworCQkJLXN1bm9zKikKKwkJCQl2ZW5kb3I9c3VuCisJCQkJOzsKKwkJCS1jbmsqfC1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLWJlb3MqKQorCQkJCXZlbmRvcj1iZQorCQkJCTs7CisJCQktaHB1eCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1oaXV4KikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktdW5vcyopCisJCQkJdmVuZG9yPWNyZHMKKwkJCQk7OworCQkJLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQktbHVuYSopCisJCQkJdmVuZG9yPW9tcm9uCisJCQkJOzsKKwkJCS1nZW5peCopCisJCQkJdmVuZG9yPW5zCisJCQkJOzsKKwkJCS1tdnMqIHwgLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktb3M0MDAqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQorCQkJCXZlbmRvcj13cnMKKwkJCQk7OworCQkJLWF1eCopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS1tcHcqIHwgLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJLXZvcyopCisJCQkJdmVuZG9yPXN0cmF0dXMKKwkJCQk7OworCQllc2FjCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCisJCTs7Citlc2FjCisKK2VjaG8gJGJhc2ljX21hY2hpbmUkb3MKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvZGlzdDIvY29uZmlndXJlIGIvZGlzdDIvY29uZmlndXJlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmU5ZjllMzcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9jb25maWd1cmUKQEAgLTAsMCArMSwxODI1NyBAQAorIyEgL2Jpbi9zaAorIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVzIGFuZCBjcmVhdGUgTWFrZWZpbGVzLgorIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkgZm9yIFBDUkUyIDEwLjIxLgorIworIworIyBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NiwgMTk5OC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIworIyBUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgbW9yZSBCb3VybmUgY29tcGF0aWJsZQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorCisKK2FzX25sPScKKycKK2V4cG9ydCBhc19ubAorIyBQcmludGluZyBhIGxvbmcgc3RyaW5nIGNyYXNoZXMgU29sYXJpcyA3IC91c3IvYmluL3ByaW50Zi4KK2FzX2VjaG89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCisjIFByZWZlciBhIGtzaCBzaGVsbCBidWlsdGluIG92ZXIgYW4gZXh0ZXJuYWwgcHJpbnRmIHByb2dyYW0gb24gU29sYXJpcywKKyMgYnV0IHdpdGhvdXQgd2FzdGluZyBmb3JrcyBmb3IgYmFzaCBvciB6c2guCitpZiB0ZXN0IC16ICIkQkFTSF9WRVJTSU9OJFpTSF9WRVJTSU9OIiBcCisgICAgJiYgKHRlc3QgIlhgcHJpbnQgLXIgLS0gJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludCAtciAtLScKKyAgYXNfZWNob19uPSdwcmludCAtcm4gLS0nCitlbGlmICh0ZXN0ICJYYHByaW50ZiAlcyAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50ZiAlc1xuJworICBhc19lY2hvX249J3ByaW50ZiAlcycKK2Vsc2UKKyAgaWYgdGVzdCAiWGAoL3Vzci91Y2IvZWNobyAtbiAtbiAkYXNfZWNobykgMj4vZGV2L251bGxgIiA9ICJYLW4gJGFzX2VjaG8iOyB0aGVuCisgICAgYXNfZWNob19ib2R5PSdldmFsIC91c3IvdWNiL2VjaG8gLW4gIiQxJGFzX25sIicKKyAgICBhc19lY2hvX249Jy91c3IvdWNiL2VjaG8gLW4nCisgIGVsc2UKKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgZXhwciAiWCQxIiA6ICJYXFwoLipcXCkiJworICAgIGFzX2VjaG9fbl9ib2R5PSdldmFsCisgICAgICBhcmc9JDE7CisgICAgICBjYXNlICRhcmcgaW4gIygKKyAgICAgICoiJGFzX25sIiopCisJZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSRhc19ubCI7CisJYXJnPWBleHByICJYJGFyZyIgOiAiLiokYXNfbmxcXCguKlxcKSJgOzsKKyAgICAgIGVzYWM7CisgICAgICBleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpIiB8IHRyIC1kICIkYXNfbmwiCisgICAgJworICAgIGV4cG9ydCBhc19lY2hvX25fYm9keQorICAgIGFzX2VjaG9fbj0nc2ggLWMgJGFzX2VjaG9fbl9ib2R5IGFzX2VjaG8nCisgIGZpCisgIGV4cG9ydCBhc19lY2hvX2JvZHkKKyAgYXNfZWNobz0nc2ggLWMgJGFzX2VjaG9fYm9keSBhc19lY2hvJworZmkKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBQQVRIX1NFUEFSQVRPUj06CisgIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxICYmIHsKKyAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSB8fAorICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIH0KK2ZpCisKKworIyBJRlMKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgZWRpdG9ycyBmcm9tIGNvbXBsYWluaW5nIGFib3V0IHNwYWNlLXRhYi4KKyMgKElmIF9BU19QQVRIX1dBTEsgd2VyZSBjYWxsZWQgd2l0aCBJRlMgdW5zZXQsIGl0IHdvdWxkIGRpc2FibGUgd29yZAorIyBzcGxpdHRpbmcgYnkgc2V0dGluZyBJRlMgdG8gZW1wdHkgdmFsdWUuKQorSUZTPSIgIiIJJGFzX25sIgorCisjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBkaXJlY3Rvcnkgc2VwYXJhdG9yLgorYXNfbXlzZWxmPQorY2FzZSAkMCBpbiAjKCgKKyAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgICAgIDs7Citlc2FjCisjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KK2lmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KKyAgYXNfbXlzZWxmPSQwCitmaQoraWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgorICAkYXNfZWNobyAiJGFzX215c2VsZjogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBmaWxlIG5hbWUiID4mMgorICBleGl0IDEKK2ZpCisKKyMgVW5zZXQgdmFyaWFibGVzIHRoYXQgd2UgZG8gbm90IG5lZWQgYW5kIHdoaWNoIGNhdXNlIGJ1Z3MgKGUuZy4gaW4KKyMgcHJlLTMuMCBVV0lOIGtzaCkuICBCdXQgZG8gbm90IGNhdXNlIGJ1Z3MgaW4gYmFzaCAyLjAxOyB0aGUgInx8IGV4aXQgMSIKKyMgc3VwcHJlc3NlcyBhbnkgIlNlZ21lbnRhdGlvbiBmYXVsdCIgbWVzc2FnZSB0aGVyZS4gICcoKCcgY291bGQKKyMgdHJpZ2dlciBhIGJ1ZyBpbiBwZGtzaCA1LjIuMTQuCitmb3IgYXNfdmFyIGluIEJBU0hfRU5WIEVOViBNQUlMIE1BSUxQQVRICitkbyBldmFsIHRlc3QgeFwkeyRhc192YXIrc2V0fSA9IHhzZXQgXAorICAmJiAoICh1bnNldCAkYXNfdmFyKSB8fCBleGl0IDEpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCAkYXNfdmFyIHx8IDoKK2RvbmUKK1BTMT0nJCAnCitQUzI9Jz4gJworUFM0PScrICcKKworIyBOTFMgbnVpc2FuY2VzLgorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQorCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworIyBVc2UgYSBwcm9wZXIgaW50ZXJuYWwgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gZW5zdXJlIHdlIGRvbid0IGZhbGwKKyAgIyBpbnRvIGFuIGluZmluaXRlIGxvb3AsIGNvbnRpbnVvdXNseSByZS1leGVjdXRpbmcgb3Vyc2VsdmVzLgorICBpZiB0ZXN0IHgiJHtfYXNfY2FuX3JlZXhlY30iICE9IHhubyAmJiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgIT0geDsgdGhlbgorICAgIF9hc19jYW5fcmVleGVjPW5vOyBleHBvcnQgX2FzX2Nhbl9yZWV4ZWM7CisgICAgIyBXZSBjYW5ub3QgeWV0IGFzc3VtZSBhIGRlY2VudCBzaGVsbCwgc28gd2UgaGF2ZSB0byBwcm92aWRlIGEKKyMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCisjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorIyBQcmVzZXJ2ZSAtdiBhbmQgLXggdG8gdGhlIHJlcGxhY2VtZW50IHNoZWxsLgorQkFTSF9FTlY9L2Rldi9udWxsCitFTlY9L2Rldi9udWxsCisodW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKK2Nhc2UgJC0gaW4gIyAoKCgoCisgICp2KngqIHwgKngqdiogKSBhc19vcHRzPS12eCA7OworICAqdiogKSBhc19vcHRzPS12IDs7CisgICp4KiApIGFzX29wdHM9LXggOzsKKyAgKiApIGFzX29wdHM9IDs7Citlc2FjCitleGVjICRDT05GSUdfU0hFTEwgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJEAifQorIyBBZG1pdHRlZGx5LCB0aGlzIGlzIHF1aXRlIHBhcmFub2lkLCBzaW5jZSBhbGwgdGhlIGtub3duIHNoZWxscyBiYWlsCisjIG91dCBhZnRlciBhIGZhaWxlZCBgZXhlYycuCiskYXNfZWNobyAiJDA6IGNvdWxkIG5vdCByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCIgPiYyCithc19mbl9leGl0IDI1NQorICBmaQorICAjIFdlIGRvbid0IHdhbnQgdGhpcyB0byBwcm9wYWdhdGUgdG8gb3RoZXIgc3VicHJvY2Vzc2VzLgorICAgICAgICAgIHsgX2FzX2Nhbl9yZWV4ZWM9OyB1bnNldCBfYXNfY2FuX3JlZXhlYzt9CitpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCisgIGFzX2JvdXJuZV9jb21wYXRpYmxlPSJpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorIgorICBhc19yZXF1aXJlZD0iYXNfZm5fcmV0dXJuICgpIHsgKGV4aXQgXCQxKTsgfQorYXNfZm5fc3VjY2VzcyAoKSB7IGFzX2ZuX3JldHVybiAwOyB9Cithc19mbl9mYWlsdXJlICgpIHsgYXNfZm5fcmV0dXJuIDE7IH0KK2FzX2ZuX3JldF9zdWNjZXNzICgpIHsgcmV0dXJuIDA7IH0KK2FzX2ZuX3JldF9mYWlsdXJlICgpIHsgcmV0dXJuIDE7IH0KKworZXhpdGNvZGU9MAorYXNfZm5fc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2FzX2ZuX3JldF9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9yZXRfZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQoraWYgKCBzZXQgeDsgYXNfZm5fcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4gOgorCitlbHNlCisgIGV4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorZmkKK3Rlc3QgeFwkZXhpdGNvZGUgPSB4MCB8fCBleGl0IDEKK3Rlc3QgLXggLyB8fCBleGl0IDEiCisgIGFzX3N1Z2dlc3RlZD0iICBhc19saW5lbm9fMT0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzFhPVwkTElORU5PCisgIGFzX2xpbmVub18yPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMmE9XCRMSU5FTk8KKyAgZXZhbCAndGVzdCBcInhcJGFzX2xpbmVub18xJ1wkYXNfcnVuJ1wiICE9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCIgJiYKKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSdcJGFzX3J1bicgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCInIHx8IGV4aXQgMQordGVzdCBcJCgoIDEgKyAxICkpID0gMiB8fCBleGl0IDEKKworICB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwke0JBU0hfVkVSU0lPTitzZXR9XCIgfHwgKAorICAgIEVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworICAgIEVDSE89XCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPCisgICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KKyAgICBQQVRIPS9lbXB0eSBGUEFUSD0vZW1wdHk7IGV4cG9ydCBQQVRIIEZQQVRICisgICAgdGVzdCBcIlhcYHByaW50ZiAlcyBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgXFwKKyAgICAgIHx8IHRlc3QgXCJYXGBwcmludCAtciAtLSBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgKSB8fCBleGl0IDEiCisgIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitlbHNlCisgIGFzX2hhdmVfcmVxdWlyZWQ9bm8KK2ZpCisgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKworZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19mb3VuZD1mYWxzZQorZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBhc19mb3VuZD06CisgIGNhc2UgJGFzX2RpciBpbiAjKAorCSAvKikKKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisJICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcworCQkgICBpZiB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19zdWdnZXN0ZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBicmVhayAyCitmaQorZmkKKwkgICBkb25lOzsKKyAgICAgICBlc2FjCisgIGFzX2ZvdW5kPWZhbHNlCitkb25lCiskYXNfZm91bmQgfHwgeyBpZiB7IHRlc3QgLWYgIiRTSEVMTCIgfHwgdGVzdCAtZiAiJFNIRUxMLmV4ZSI7IH0gJiYKKwkgICAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJFNIRUxMIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2ZpOyB9CitJRlM9JGFzX3NhdmVfSUZTCisKKworICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4gOgorICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICAgICAgICAgIyBXZSBjYW5ub3QgeWV0IGFzc3VtZSBhIGRlY2VudCBzaGVsbCwgc28gd2UgaGF2ZSB0byBwcm92aWRlIGEKKyMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCisjIHdvcmtzIGFyb3VuZCBzaGVsbHMgdGhhdCBjYW5ub3QgdW5zZXQgbm9uZXhpc3RlbnQgdmFyaWFibGVzLgorIyBQcmVzZXJ2ZSAtdiBhbmQgLXggdG8gdGhlIHJlcGxhY2VtZW50IHNoZWxsLgorQkFTSF9FTlY9L2Rldi9udWxsCitFTlY9L2Rldi9udWxsCisodW5zZXQgQkFTSF9FTlYpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBCQVNIX0VOViBFTlYKK2Nhc2UgJC0gaW4gIyAoKCgoCisgICp2KngqIHwgKngqdiogKSBhc19vcHRzPS12eCA7OworICAqdiogKSBhc19vcHRzPS12IDs7CisgICp4KiApIGFzX29wdHM9LXggOzsKKyAgKiApIGFzX29wdHM9IDs7Citlc2FjCitleGVjICRDT05GSUdfU0hFTEwgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJEAifQorIyBBZG1pdHRlZGx5LCB0aGlzIGlzIHF1aXRlIHBhcmFub2lkLCBzaW5jZSBhbGwgdGhlIGtub3duIHNoZWxscyBiYWlsCisjIG91dCBhZnRlciBhIGZhaWxlZCBgZXhlYycuCiskYXNfZWNobyAiJDA6IGNvdWxkIG5vdCByZS1leGVjdXRlIHdpdGggJENPTkZJR19TSEVMTCIgPiYyCitleGl0IDI1NQorZmkKKworICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIgorICAkYXNfZWNobyAiJDA6IHRoZSBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiIKKyAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KKyAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCIKKyAgICAkYXNfZWNobyAiJDA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iCisgIGVsc2UKKyAgICAkYXNfZWNobyAiJDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFib3V0IHlvdXIgc3lzdGVtLAorJDA6IGluY2x1ZGluZyBhbnkgZXJyb3IgcG9zc2libHkgb3V0cHV0IGJlZm9yZSB0aGlzCiskMDogbWVzc2FnZS4gVGhlbiBpbnN0YWxsIGEgbW9kZXJuIHNoZWxsLCBvciBtYW51YWxseSBydW4KKyQwOiB0aGUgc2NyaXB0IHVuZGVyIHN1Y2ggYSBzaGVsbCBpZiB5b3UgZG8gaGF2ZSBvbmUuIgorICBmaQorICBleGl0IDEKK2ZpCitmaQorZmkKK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CitleHBvcnQgU0hFTEwKKyMgVW5zZXQgbW9yZSB2YXJpYWJsZXMga25vd24gdG8gaW50ZXJmZXJlIHdpdGggYmVoYXZpb3Igb2YgY29tbW9uIHRvb2xzLgorQ0xJQ09MT1JfRk9SQ0U9IEdSRVBfT1BUSU9OUz0KK3Vuc2V0IENMSUNPTE9SX0ZPUkNFIEdSRVBfT1BUSU9OUworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggU2hlbGwgRnVuY3Rpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIGFzX2ZuX3Vuc2V0IFZBUgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgUG9ydGFibHkgdW5zZXQgVkFSLgorYXNfZm5fdW5zZXQgKCkKK3sKKyAgeyBldmFsICQxPTsgdW5zZXQgJDE7fQorfQorYXNfdW5zZXQ9YXNfZm5fdW5zZXQKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fbWtkaXJfcAorIyAtLS0tLS0tLS0tLS0tCisjIENyZWF0ZSAiJGFzX2RpciIgYXMgYSBkaXJlY3RvcnksIGluY2x1ZGluZyBwYXJlbnRzIGlmIG5lY2Vzc2FyeS4KK2FzX2ZuX21rZGlyX3AgKCkKK3sKKworICBjYXNlICRhc19kaXIgaW4gIygKKyAgLSopIGFzX2Rpcj0uLyRhc19kaXI7OworICBlc2FjCisgIHRlc3QgLWQgIiRhc19kaXIiIHx8IGV2YWwgJGFzX21rZGlyX3AgfHwgeworICAgIGFzX2RpcnM9CisgICAgd2hpbGUgOjsgZG8KKyAgICAgIGNhc2UgJGFzX2RpciBpbiAjKAorICAgICAgKlwnKikgYXNfcWRpcj1gJGFzX2VjaG8gIiRhc19kaXIiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgIycoCisgICAgICAqKSBhc19xZGlyPSRhc19kaXI7OworICAgICAgZXNhYworICAgICAgYXNfZGlycz0iJyRhc19xZGlyJyAkYXNfZGlycyIKKyAgICAgIGFzX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19kaXIiIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgICAgIHRlc3QgLWQgIiRhc19kaXIiICYmIGJyZWFrCisgICAgZG9uZQorICAgIHRlc3QgLXogIiRhc19kaXJzIiB8fCBldmFsICJta2RpciAkYXNfZGlycyIKKyAgfSB8fCB0ZXN0IC1kICIkYXNfZGlyIiB8fCBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGFzX2RpciIKKworCit9ICMgYXNfZm5fbWtkaXJfcAorCisjIGFzX2ZuX2V4ZWN1dGFibGVfcCBGSUxFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KK2FzX2ZuX2V4ZWN1dGFibGVfcCAoKQoreworICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCit9ICMgYXNfZm5fZXhlY3V0YWJsZV9wCisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCisKKyAgYXNfbGluZW5vXzE9JExJTkVOTyBhc19saW5lbm9fMWE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PIGFzX2xpbmVub18yYT0kTElORU5PCisgIGV2YWwgJ3Rlc3QgIngkYXNfbGluZW5vXzEnJGFzX3J1biciICE9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIiAmJgorICB0ZXN0ICJ4YGV4cHIgJGFzX2xpbmVub18xJyRhc19ydW4nICsgMWAiID0gIngkYXNfbGluZW5vXzInJGFzX3J1biciJyB8fCB7CisgICMgQmxhbWUgTGVlIEUuIE1jTWFob24gKDE5MzEtMTk4OSkgZm9yIHNlZCdzIHN5bnRheC4gIDotKQorICBzZWQgLW4gJworICAgIHAKKyAgICAvWyRdTElORU5PLz0KKyAgJyA8JGFzX215c2VsZiB8CisgICAgc2VkICcKKyAgICAgIHMvWyRdTElORU5PLiovJi0vCisgICAgICB0IGxpbmVubworICAgICAgYgorICAgICAgOmxpbmVubworICAgICAgTgorICAgICAgOmxvb3AKKyAgICAgIHMvWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX10uKlxuXClcKC4qXCkvXDJcMVwyLworICAgICAgdCBsb29wCisgICAgICBzLy1cbi4qLy8KKyAgICAnID4kYXNfbWUubGluZW5vICYmCisgIGNobW9kICt4ICIkYXNfbWUubGluZW5vIiB8fAorICAgIHsgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7IGFzX2ZuX2V4aXQgMTsgfQorCisgICMgSWYgd2UgaGFkIHRvIHJlLWV4ZWN1dGUgd2l0aCAkQ09ORklHX1NIRUxMLCB3ZSdyZSBlbnN1cmVkIHRvIGhhdmUKKyAgIyBhbHJlYWR5IGRvbmUgdGhhdCwgc28gZW5zdXJlIHdlIGRvbid0IHRyeSB0byBkbyBzbyBhZ2FpbiBhbmQgZmFsbAorICAjIGluIGFuIGluZmluaXRlIGxvb3AuICBUaGlzIGhhcyBhbHJlYWR5IGhhcHBlbmVkIGluIHByYWN0aWNlLgorICBfYXNfY2FuX3JlZXhlYz1ubzsgZXhwb3J0IF9hc19jYW5fcmVleGVjCisgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCisgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorICBleGl0Cit9CisKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OworZXNhYworCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wUicuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXBSJworICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIGFzX2xuX3M9bG4KKyAgZWxzZQorICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZmkKK2Vsc2UKKyAgYXNfbG5fcz0nY3AgLXBSJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKKworaWYgbWtkaXIgLXAgLiAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19ta2Rpcl9wPSdta2RpciAtcCAiJGFzX2RpciInCitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKK2FzX3Rlc3RfeD0ndGVzdCAteCcKK2FzX2V4ZWN1dGFibGVfcD1hc19mbl9leGVjdXRhYmxlX3AKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCisKK3Rlc3QgLW4gIiRESkRJUiIgfHwgZXhlYyA3PCYwIDwvZGV2L251bGwKK2V4ZWMgNj4mMQorCisjIE5hbWUgb2YgdGhlIGhvc3QuCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBvbGQgR05VL0xpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KK2FjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorCisjCisjIEluaXRpYWxpemF0aW9ucy4KKyMKK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKK2FjX2NsZWFuX2ZpbGVzPQorYWNfY29uZmlnX2xpYm9ial9kaXI9LgorTElCT0JKUz0KK2Nyb3NzX2NvbXBpbGluZz1ubworc3ViZGlycz0KK01GTEFHUz0KK01BS0VGTEFHUz0KKworIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCitQQUNLQUdFX05BTUU9J1BDUkUyJworUEFDS0FHRV9UQVJOQU1FPSdwY3JlMicKK1BBQ0tBR0VfVkVSU0lPTj0nMTAuMjEnCitQQUNLQUdFX1NUUklORz0nUENSRTIgMTAuMjEnCitQQUNLQUdFX0JVR1JFUE9SVD0nJworUEFDS0FHRV9VUkw9JycKKworYWNfdW5pcXVlX2ZpbGU9InNyYy9wY3JlMi5oLmluIgorIyBGYWN0b3JpbmcgZGVmYXVsdCBoZWFkZXJzIGZvciBtb3N0IHRlc3RzLgorYWNfaW5jbHVkZXNfZGVmYXVsdD0iXAorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorIyBpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgU1REQ19IRUFERVJTCisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbHNlCisjIGlmZGVmIEhBVkVfU1RETElCX0gKKyMgIGluY2x1ZGUgPHN0ZGxpYi5oPgorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyBpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgZGVmaW5lZCBIQVZFX01FTU9SWV9ICisjICBpbmNsdWRlIDxtZW1vcnkuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1RESU5UX0gKKyMgaW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjIGluY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmIgorCithY19zdWJzdF92YXJzPSdhbV9fRVhFRVhUX0ZBTFNFCithbV9fRVhFRVhUX1RSVUUKK0xUTElCT0JKUworTElCT0JKUworV0lUSF9HQ09WX0ZBTFNFCitXSVRIX0dDT1ZfVFJVRQorR0NPVl9MSUJTCitHQ09WX0NYWEZMQUdTCitHQ09WX0NGTEFHUworR0VOSFRNTAorTENPVgorU0hUT09MCitWQUxHUklORF9MSUJTCitWQUxHUklORF9DRkxBR1MKK1BLR19DT05GSUdfTElCRElSCitQS0dfQ09ORklHX1BBVEgKK1BLR19DT05GSUcKK0xJQkJaMgorTElCWgorRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUworRVhUUkFfTElCUENSRTJfUE9TSVhfTERGTEFHUworRVhUUkFfTElCUENSRTJfMzJfTERGTEFHUworRVhUUkFfTElCUENSRTJfMTZfTERGTEFHUworRVhUUkFfTElCUENSRTJfOF9MREZMQUdTCitQVEhSRUFEX0NGTEFHUworUFRIUkVBRF9MSUJTCitQVEhSRUFEX0NDCitheF9wdGhyZWFkX2NvbmZpZworUENSRTJfU1RBVElDX0NGTEFHCitMSUJSRUFETElORQorV0lUSF9WQUxHUklORF9GQUxTRQorV0lUSF9WQUxHUklORF9UUlVFCitXSVRIX1VOSUNPREVfRkFMU0UKK1dJVEhfVU5JQ09ERV9UUlVFCitXSVRIX0pJVF9GQUxTRQorV0lUSF9KSVRfVFJVRQorV0lUSF9SRUJVSUxEX0NIQVJUQUJMRVNfRkFMU0UKK1dJVEhfUkVCVUlMRF9DSEFSVEFCTEVTX1RSVUUKK1dJVEhfREVCVUdfRkFMU0UKK1dJVEhfREVCVUdfVFJVRQorV0lUSF9QQ1JFMl8zMl9GQUxTRQorV0lUSF9QQ1JFMl8zMl9UUlVFCitXSVRIX1BDUkUyXzE2X0ZBTFNFCitXSVRIX1BDUkUyXzE2X1RSVUUKK1dJVEhfUENSRTJfOF9GQUxTRQorV0lUSF9QQ1JFMl84X1RSVUUKK2VuYWJsZV9wY3JlMl8zMgorZW5hYmxlX3BjcmUyXzE2CitlbmFibGVfcGNyZTJfOAorUENSRTJfREFURQorUENSRTJfUFJFUkVMRUFTRQorUENSRTJfTUlOT1IKK1BDUkUyX01BSk9SCitIQVZFX1ZJU0lCSUxJVFkKK1ZJU0lCSUxJVFlfQ1hYRkxBR1MKK1ZJU0lCSUxJVFlfQ0ZMQUdTCitMVF9TWVNfTElCUkFSWV9QQVRICitPVE9PTDY0CitPVE9PTAorTElQTworTk1FRElUCitEU1lNVVRJTAorTUFOSUZFU1RfVE9PTAorUkFOTElCCitMTl9TCitOTQorYWNfY3RfRFVNUEJJTgorRFVNUEJJTgorTEQKK0ZHUkVQCitTRUQKK0xJQlRPT0wKK09CSkRVTVAKK0RMTFRPT0wKK0FTCitob3N0X29zCitob3N0X3ZlbmRvcgoraG9zdF9jcHUKK2hvc3QKK2J1aWxkX29zCitidWlsZF92ZW5kb3IKK2J1aWxkX2NwdQorYnVpbGQKK0VHUkVQCitHUkVQCitDUFAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UKK2FtX19mYXN0ZGVwQ0NfVFJVRQorQ0NERVBNT0RFCithbV9fbm9kZXAKK0FNREVQQkFDS1NMQVNICitBTURFUF9GQUxTRQorQU1ERVBfVFJVRQorYW1fX3F1b3RlCithbV9faW5jbHVkZQorREVQRElSCitPQkpFWFQKK0VYRUVYVAorYWNfY3RfQ0MKK0NQUEZMQUdTCitMREZMQUdTCitDRkxBR1MKK0NDCithY19jdF9BUgorQVIKK0FNX0JBQ0tTTEFTSAorQU1fREVGQVVMVF9WRVJCT1NJVFkKK0FNX0RFRkFVTFRfVgorQU1fVgorYW1fX3VudGFyCithbV9fdGFyCitBTVRBUgorYW1fX2xlYWRpbmdfZG90CitTRVRfTUFLRQorQVdLCitta2Rpcl9wCitNS0RJUl9QCitJTlNUQUxMX1NUUklQX1BST0dSQU0KK1NUUklQCitpbnN0YWxsX3NoCitNQUtFSU5GTworQVVUT0hFQURFUgorQVVUT01BS0UKK0FVVE9DT05GCitBQ0xPQ0FMCitWRVJTSU9OCitQQUNLQUdFCitDWUdQQVRIX1cKK2FtX19pc3JjCitJTlNUQUxMX0RBVEEKK0lOU1RBTExfU0NSSVBUCitJTlNUQUxMX1BST0dSQU0KK3RhcmdldF9hbGlhcworaG9zdF9hbGlhcworYnVpbGRfYWxpYXMKK0xJQlMKK0VDSE9fVAorRUNIT19OCitFQ0hPX0MKK0RFRlMKK21hbmRpcgorbG9jYWxlZGlyCitsaWJkaXIKK3BzZGlyCitwZGZkaXIKK2R2aWRpcgoraHRtbGRpcgoraW5mb2RpcgorZG9jZGlyCitvbGRpbmNsdWRlZGlyCitpbmNsdWRlZGlyCitsb2NhbHN0YXRlZGlyCitzaGFyZWRzdGF0ZWRpcgorc3lzY29uZmRpcgorZGF0YWRpcgorZGF0YXJvb3RkaXIKK2xpYmV4ZWNkaXIKK3NiaW5kaXIKK2JpbmRpcgorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZQorcHJlZml4CitleGVjX3ByZWZpeAorUEFDS0FHRV9VUkwKK1BBQ0tBR0VfQlVHUkVQT1JUCitQQUNLQUdFX1NUUklORworUEFDS0FHRV9WRVJTSU9OCitQQUNLQUdFX1RBUk5BTUUKK1BBQ0tBR0VfTkFNRQorUEFUSF9TRVBBUkFUT1IKK1NIRUxMJworYWNfc3Vic3RfZmlsZXM9JycKK2FjX3VzZXJfb3B0cz0nCitlbmFibGVfb3B0aW9uX2NoZWNraW5nCitlbmFibGVfc2lsZW50X3J1bGVzCitlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZworZW5hYmxlX3NoYXJlZAorZW5hYmxlX3N0YXRpYword2l0aF9waWMKK2VuYWJsZV9mYXN0X2luc3RhbGwKK3dpdGhfYWl4X3NvbmFtZQord2l0aF9nbnVfbGQKK3dpdGhfc3lzcm9vdAorZW5hYmxlX2xpYnRvb2xfbG9jaworZW5hYmxlX3BjcmU4CitlbmFibGVfcGNyZTE2CitlbmFibGVfcGNyZTMyCitlbmFibGVfcGNyZTJfOAorZW5hYmxlX3BjcmUyXzE2CitlbmFibGVfcGNyZTJfMzIKK2VuYWJsZV9kZWJ1ZworZW5hYmxlX2ppdAorZW5hYmxlX3BjcmUyZ3JlcF9qaXQKK2VuYWJsZV9yZWJ1aWxkX2NoYXJ0YWJsZXMKK2VuYWJsZV91bmljb2RlCitlbmFibGVfbmV3bGluZV9pc19jcgorZW5hYmxlX25ld2xpbmVfaXNfbGYKK2VuYWJsZV9uZXdsaW5lX2lzX2NybGYKK2VuYWJsZV9uZXdsaW5lX2lzX2FueWNybGYKK2VuYWJsZV9uZXdsaW5lX2lzX2FueQorZW5hYmxlX2Jzcl9hbnljcmxmCitlbmFibGVfbmV2ZXJfYmFja3NsYXNoX0MKK2VuYWJsZV9lYmNkaWMKK2VuYWJsZV9lYmNkaWNfbmwyNQorZW5hYmxlX3N0YWNrX2Zvcl9yZWN1cnNpb24KK2VuYWJsZV9wY3JlMmdyZXBfbGliegorZW5hYmxlX3BjcmUyZ3JlcF9saWJiejIKK3dpdGhfcGNyZTJncmVwX2J1ZnNpemUKK2VuYWJsZV9wY3JlMnRlc3RfbGliZWRpdAorZW5hYmxlX3BjcmUydGVzdF9saWJyZWFkbGluZQord2l0aF9saW5rX3NpemUKK3dpdGhfcGFyZW5zX25lc3RfbGltaXQKK3dpdGhfbWF0Y2hfbGltaXQKK3dpdGhfbWF0Y2hfbGltaXRfcmVjdXJzaW9uCitlbmFibGVfdmFsZ3JpbmQKK2VuYWJsZV9jb3ZlcmFnZQorJworICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKK2hvc3RfYWxpYXMKK3RhcmdldF9hbGlhcworQ0MKK0NGTEFHUworTERGTEFHUworTElCUworQ1BQRkxBR1MKK0NQUAorTFRfU1lTX0xJQlJBUllfUEFUSAorUEtHX0NPTkZJRworUEtHX0NPTkZJR19QQVRICitQS0dfQ09ORklHX0xJQkRJUgorVkFMR1JJTkRfQ0ZMQUdTCitWQUxHUklORF9MSUJTCitMQ09WCitHRU5IVE1MJworCisKKyMgSW5pdGlhbGl6ZSBzb21lIHZhcmlhYmxlcyBzZXQgYnkgb3B0aW9ucy4KK2FjX2luaXRfaGVscD0KK2FjX2luaXRfdmVyc2lvbj1mYWxzZQorYWNfdW5yZWNvZ25pemVkX29wdHM9CithY191bnJlY29nbml6ZWRfc2VwPQorIyBUaGUgdmFyaWFibGVzIGhhdmUgdGhlIHNhbWUgbmFtZXMgYXMgdGhlIG9wdGlvbnMsIHdpdGgKKyMgZGFzaGVzIGNoYW5nZWQgdG8gdW5kZXJsaW5lcy4KK2NhY2hlX2ZpbGU9L2Rldi9udWxsCitleGVjX3ByZWZpeD1OT05FCitub19jcmVhdGU9Citub19yZWN1cnNpb249CitwcmVmaXg9Tk9ORQorcHJvZ3JhbV9wcmVmaXg9Tk9ORQorcHJvZ3JhbV9zdWZmaXg9Tk9ORQorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1zLHgseCwKK3NpbGVudD0KK3NpdGU9CitzcmNkaXI9Cit2ZXJib3NlPQoreF9pbmNsdWRlcz1OT05FCit4X2xpYnJhcmllcz1OT05FCisKKyMgSW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBvcHRpb25zLgorIyBUaGVzZSBhcmUgbGVmdCB1bmV4cGFuZGVkIHNvIHVzZXJzIGNhbiAibWFrZSBpbnN0YWxsIGV4ZWNfcHJlZml4PS9mb28iCisjIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBiYXNlZCBvbiBleGVjX3ByZWZpeAorIyBieSBkZWZhdWx0IHdpbGwgYWN0dWFsbHkgY2hhbmdlLgorIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKyMgKFRoZSBsaXN0IGZvbGxvd3MgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLikKK2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJworc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKK2xpYmV4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCitkYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3NoYXJlJworZGF0YWRpcj0nJHtkYXRhcm9vdGRpcn0nCitzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJworc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCitsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJworaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCitvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCitkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0nCitpbmZvZGlyPScke2RhdGFyb290ZGlyfS9pbmZvJworaHRtbGRpcj0nJHtkb2NkaXJ9JworZHZpZGlyPScke2RvY2Rpcn0nCitwZGZkaXI9JyR7ZG9jZGlyfScKK3BzZGlyPScke2RvY2Rpcn0nCitsaWJkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYicKK2xvY2FsZWRpcj0nJHtkYXRhcm9vdGRpcn0vbG9jYWxlJworbWFuZGlyPScke2RhdGFyb290ZGlyfS9tYW4nCisKK2FjX3ByZXY9CithY19kYXNoZGFzaD0KK2ZvciBhY19vcHRpb24KK2RvCisgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgICBldmFsICRhY19wcmV2PVwkYWNfb3B0aW9uCisgICAgYWNfcHJldj0KKyAgICBjb250aW51ZQorICBmaQorCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAqPT8qKSBhY19vcHRhcmc9YGV4cHIgIlgkYWNfb3B0aW9uIiA6ICdbXj1dKj1cKC4qXCknYCA7OworICAqPSkgICBhY19vcHRhcmc9IDs7CisgICopICAgIGFjX29wdGFyZz15ZXMgOzsKKyAgZXNhYworCisgICMgQWNjZXB0IHRoZSBpbXBvcnRhbnQgQ3lnbnVzIGNvbmZpZ3VyZSBvcHRpb25zLCBzbyB3ZSBjYW4gZGlhZ25vc2UgdHlwb3MuCisKKyAgY2FzZSAkYWNfZGFzaGRhc2gkYWNfb3B0aW9uIGluCisgIC0tKQorICAgIGFjX2Rhc2hkYXNoPXllcyA7OworCisgIC1iaW5kaXIgfCAtLWJpbmRpciB8IC0tYmluZGkgfCAtLWJpbmQgfCAtLWJpbiB8IC0tYmkpCisgICAgYWNfcHJldj1iaW5kaXIgOzsKKyAgLWJpbmRpcj0qIHwgLS1iaW5kaXI9KiB8IC0tYmluZGk9KiB8IC0tYmluZD0qIHwgLS1iaW49KiB8IC0tYmk9KikKKyAgICBiaW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1idWlsZCB8IC0tYnVpbGQgfCAtLWJ1aWwgfCAtLWJ1aSB8IC0tYnUpCisgICAgYWNfcHJldj1idWlsZF9hbGlhcyA7OworICAtYnVpbGQ9KiB8IC0tYnVpbGQ9KiB8IC0tYnVpbD0qIHwgLS1idWk9KiB8IC0tYnU9KikKKyAgICBidWlsZF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbGUgfCAtLWNhY2hlLWZpbCB8IC0tY2FjaGUtZmkgXAorICB8IC0tY2FjaGUtZiB8IC0tY2FjaGUtIHwgLS1jYWNoZSB8IC0tY2FjaCB8IC0tY2FjIHwgLS1jYSB8IC0tYykKKyAgICBhY19wcmV2PWNhY2hlX2ZpbGUgOzsKKyAgLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWw9KiB8IC0tY2FjaGUtZmk9KiBcCisgIHwgLS1jYWNoZS1mPSogfCAtLWNhY2hlLT0qIHwgLS1jYWNoZT0qIHwgLS1jYWNoPSogfCAtLWNhYz0qIHwgLS1jYT0qIHwgLS1jPSopCisgICAgY2FjaGVfZmlsZT0kYWNfb3B0YXJnIDs7CisKKyAgLS1jb25maWctY2FjaGUgfCAtQykKKyAgICBjYWNoZV9maWxlPWNvbmZpZy5jYWNoZSA7OworCisgIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkKQorICAgIGFjX3ByZXY9ZGF0YWRpciA7OworICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qKQorICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OworCisgIC1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaXIgfCAtLWRhdGFyb290ZGkgfCAtLWRhdGFyb290ZCB8IC0tZGF0YXJvb3QgXAorICB8IC0tZGF0YXJvbyB8IC0tZGF0YXJvIHwgLS1kYXRhcikKKyAgICBhY19wcmV2PWRhdGFyb290ZGlyIDs7CisgIC1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpcj0qIHwgLS1kYXRhcm9vdGRpPSogfCAtLWRhdGFyb290ZD0qIFwKKyAgfCAtLWRhdGFyb290PSogfCAtLWRhdGFyb289KiB8IC0tZGF0YXJvPSogfCAtLWRhdGFyPSopCisgICAgZGF0YXJvb3RkaXI9JGFjX29wdGFyZyA7OworCisgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorImVuYWJsZV8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1kaXNhYmxlLSRhY191c2Vyb3B0X29yaWciCisJIGFjX3VucmVjb2duaXplZF9zZXA9JywgJzs7CisgICAgZXNhYworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PW5vIDs7CisKKyAgLWRvY2RpciB8IC0tZG9jZGlyIHwgLS1kb2NkaSB8IC0tZG9jIHwgLS1kbykKKyAgICBhY19wcmV2PWRvY2RpciA7OworICAtZG9jZGlyPSogfCAtLWRvY2Rpcj0qIHwgLS1kb2NkaT0qIHwgLS1kb2M9KiB8IC0tZG89KikKKyAgICBkb2NkaXI9JGFjX29wdGFyZyA7OworCisgIC1kdmlkaXIgfCAtLWR2aWRpciB8IC0tZHZpZGkgfCAtLWR2aWQgfCAtLWR2aSB8IC0tZHYpCisgICAgYWNfcHJldj1kdmlkaXIgOzsKKyAgLWR2aWRpcj0qIHwgLS1kdmlkaXI9KiB8IC0tZHZpZGk9KiB8IC0tZHZpZD0qIHwgLS1kdmk9KiB8IC0tZHY9KikKKyAgICBkdmlkaXI9JGFjX29wdGFyZyA7OworCisgIC1lbmFibGUtKiB8IC0tZW5hYmxlLSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmVuYWJsZS1cKFtePV0qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorImVuYWJsZV8kYWNfdXNlcm9wdCIKKyIqKSA7OworICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS1lbmFibGUtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKKworICAtZXhlYy1wcmVmaXggfCAtLWV4ZWNfcHJlZml4IHwgLS1leGVjLXByZWZpeCB8IC0tZXhlYy1wcmVmaSBcCisgIHwgLS1leGVjLXByZWYgfCAtLWV4ZWMtcHJlIHwgLS1leGVjLXByIHwgLS1leGVjLXAgfCAtLWV4ZWMtIFwKKyAgfCAtLWV4ZWMgfCAtLWV4ZSB8IC0tZXgpCisgICAgYWNfcHJldj1leGVjX3ByZWZpeCA7OworICAtZXhlYy1wcmVmaXg9KiB8IC0tZXhlY19wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaXg9KiB8IC0tZXhlYy1wcmVmaT0qIFwKKyAgfCAtLWV4ZWMtcHJlZj0qIHwgLS1leGVjLXByZT0qIHwgLS1leGVjLXByPSogfCAtLWV4ZWMtcD0qIHwgLS1leGVjLT0qIFwKKyAgfCAtLWV4ZWM9KiB8IC0tZXhlPSogfCAtLWV4PSopCisgICAgZXhlY19wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1nYXMgfCAtLWdhcyB8IC0tZ2EgfCAtLWcpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC1nYXMuCisgICAgd2l0aF9nYXM9eWVzIDs7CisKKyAgLWhlbHAgfCAtLWhlbHAgfCAtLWhlbCB8IC0taGUgfCAtaCkKKyAgICBhY19pbml0X2hlbHA9bG9uZyA7OworICAtaGVscD1yKiB8IC0taGVscD1yKiB8IC0taGVsPXIqIHwgLS1oZT1yKiB8IC1ociopCisgICAgYWNfaW5pdF9oZWxwPXJlY3Vyc2l2ZSA7OworICAtaGVscD1zKiB8IC0taGVscD1zKiB8IC0taGVsPXMqIHwgLS1oZT1zKiB8IC1ocyopCisgICAgYWNfaW5pdF9oZWxwPXNob3J0IDs7CisKKyAgLWhvc3QgfCAtLWhvc3QgfCAtLWhvcyB8IC0taG8pCisgICAgYWNfcHJldj1ob3N0X2FsaWFzIDs7CisgIC1ob3N0PSogfCAtLWhvc3Q9KiB8IC0taG9zPSogfCAtLWhvPSopCisgICAgaG9zdF9hbGlhcz0kYWNfb3B0YXJnIDs7CisKKyAgLWh0bWxkaXIgfCAtLWh0bWxkaXIgfCAtLWh0bWxkaSB8IC0taHRtbGQgfCAtLWh0bWwgfCAtLWh0bSB8IC0taHQpCisgICAgYWNfcHJldj1odG1sZGlyIDs7CisgIC1odG1sZGlyPSogfCAtLWh0bWxkaXI9KiB8IC0taHRtbGRpPSogfCAtLWh0bWxkPSogfCAtLWh0bWw9KiB8IC0taHRtPSogXAorICB8IC0taHQ9KikKKyAgICBodG1sZGlyPSRhY19vcHRhcmcgOzsKKworICAtaW5jbHVkZWRpciB8IC0taW5jbHVkZWRpciB8IC0taW5jbHVkZWRpIHwgLS1pbmNsdWRlZCB8IC0taW5jbHVkZSBcCisgIHwgLS1pbmNsdWQgfCAtLWluY2x1IHwgLS1pbmNsIHwgLS1pbmMpCisgICAgYWNfcHJldj1pbmNsdWRlZGlyIDs7CisgIC1pbmNsdWRlZGlyPSogfCAtLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpPSogfCAtLWluY2x1ZGVkPSogfCAtLWluY2x1ZGU9KiBcCisgIHwgLS1pbmNsdWQ9KiB8IC0taW5jbHU9KiB8IC0taW5jbD0qIHwgLS1pbmM9KikKKyAgICBpbmNsdWRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtaW5mb2RpciB8IC0taW5mb2RpciB8IC0taW5mb2RpIHwgLS1pbmZvZCB8IC0taW5mbyB8IC0taW5mKQorICAgIGFjX3ByZXY9aW5mb2RpciA7OworICAtaW5mb2Rpcj0qIHwgLS1pbmZvZGlyPSogfCAtLWluZm9kaT0qIHwgLS1pbmZvZD0qIHwgLS1pbmZvPSogfCAtLWluZj0qKQorICAgIGluZm9kaXI9JGFjX29wdGFyZyA7OworCisgIC1saWJkaXIgfCAtLWxpYmRpciB8IC0tbGliZGkgfCAtLWxpYmQpCisgICAgYWNfcHJldj1saWJkaXIgOzsKKyAgLWxpYmRpcj0qIHwgLS1saWJkaXI9KiB8IC0tbGliZGk9KiB8IC0tbGliZD0qKQorICAgIGxpYmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaXIgfCAtLWxpYmV4ZWNkaSB8IC0tbGliZXhlY2QgfCAtLWxpYmV4ZWMgXAorICB8IC0tbGliZXhlIHwgLS1saWJleCB8IC0tbGliZSkKKyAgICBhY19wcmV2PWxpYmV4ZWNkaXIgOzsKKyAgLWxpYmV4ZWNkaXI9KiB8IC0tbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGk9KiB8IC0tbGliZXhlY2Q9KiB8IC0tbGliZXhlYz0qIFwKKyAgfCAtLWxpYmV4ZT0qIHwgLS1saWJleD0qIHwgLS1saWJlPSopCisgICAgbGliZXhlY2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxvY2FsZWRpciB8IC0tbG9jYWxlZGlyIHwgLS1sb2NhbGVkaSB8IC0tbG9jYWxlZCB8IC0tbG9jYWxlKQorICAgIGFjX3ByZXY9bG9jYWxlZGlyIDs7CisgIC1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpPSogfCAtLWxvY2FsZWQ9KiB8IC0tbG9jYWxlPSopCisgICAgbG9jYWxlZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCisgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IHwgLS1sb2NhbHMpCisgICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7CisgIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAorICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIHwgLS1sb2NhbHM9KikKKyAgICBsb2NhbHN0YXRlZGlyPSRhY19vcHRhcmcgOzsKKworICAtbWFuZGlyIHwgLS1tYW5kaXIgfCAtLW1hbmRpIHwgLS1tYW5kIHwgLS1tYW4gfCAtLW1hIHwgLS1tKQorICAgIGFjX3ByZXY9bWFuZGlyIDs7CisgIC1tYW5kaXI9KiB8IC0tbWFuZGlyPSogfCAtLW1hbmRpPSogfCAtLW1hbmQ9KiB8IC0tbWFuPSogfCAtLW1hPSogfCAtLW09KikKKyAgICBtYW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1uZnAgfCAtLW5mcCB8IC0tbmYpCisgICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aG91dC1mcC4KKyAgICB3aXRoX2ZwPW5vIDs7CisKKyAgLW5vLWNyZWF0ZSB8IC0tbm8tY3JlYXRlIHwgLS1uby1jcmVhdCB8IC0tbm8tY3JlYSB8IC0tbm8tY3JlIFwKKyAgfCAtLW5vLWNyIHwgLS1uby1jIHwgLW4pCisgICAgbm9fY3JlYXRlPXllcyA7OworCisgIC1uby1yZWN1cnNpb24gfCAtLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW8gfCAtLW5vLXJlY3Vyc2kgXAorICB8IC0tbm8tcmVjdXJzIHwgLS1uby1yZWN1ciB8IC0tbm8tcmVjdSB8IC0tbm8tcmVjIHwgLS1uby1yZSB8IC0tbm8tcikKKyAgICBub19yZWN1cnNpb249eWVzIDs7CisKKyAgLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaXIgfCAtLW9sZGluY2x1ZGVkaSB8IC0tb2xkaW5jbHVkZWQgXAorICB8IC0tb2xkaW5jbHVkZSB8IC0tb2xkaW5jbHVkIHwgLS1vbGRpbmNsdSB8IC0tb2xkaW5jbCB8IC0tb2xkaW5jIFwKKyAgfCAtLW9sZGluIHwgLS1vbGRpIHwgLS1vbGQgfCAtLW9sIHwgLS1vKQorICAgIGFjX3ByZXY9b2xkaW5jbHVkZWRpciA7OworICAtb2xkaW5jbHVkZWRpcj0qIHwgLS1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaT0qIHwgLS1vbGRpbmNsdWRlZD0qIFwKKyAgfCAtLW9sZGluY2x1ZGU9KiB8IC0tb2xkaW5jbHVkPSogfCAtLW9sZGluY2x1PSogfCAtLW9sZGluY2w9KiB8IC0tb2xkaW5jPSogXAorICB8IC0tb2xkaW49KiB8IC0tb2xkaT0qIHwgLS1vbGQ9KiB8IC0tb2w9KiB8IC0tbz0qKQorICAgIG9sZGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1wcmVmaXggfCAtLXByZWZpeCB8IC0tcHJlZmkgfCAtLXByZWYgfCAtLXByZSB8IC0tcHIgfCAtLXApCisgICAgYWNfcHJldj1wcmVmaXggOzsKKyAgLXByZWZpeD0qIHwgLS1wcmVmaXg9KiB8IC0tcHJlZmk9KiB8IC0tcHJlZj0qIHwgLS1wcmU9KiB8IC0tcHI9KiB8IC0tcD0qKQorICAgIHByZWZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpeCB8IC0tcHJvZ3JhbS1wcmVmaSB8IC0tcHJvZ3JhbS1wcmVmIFwKKyAgfCAtLXByb2dyYW0tcHJlIHwgLS1wcm9ncmFtLXByIHwgLS1wcm9ncmFtLXApCisgICAgYWNfcHJldj1wcm9ncmFtX3ByZWZpeCA7OworICAtcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaXg9KiB8IC0tcHJvZ3JhbS1wcmVmaT0qIFwKKyAgfCAtLXByb2dyYW0tcHJlZj0qIHwgLS1wcm9ncmFtLXByZT0qIHwgLS1wcm9ncmFtLXByPSogfCAtLXByb2dyYW0tcD0qKQorICAgIHByb2dyYW1fcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZml4IHwgLS1wcm9ncmFtLXN1ZmZpIHwgLS1wcm9ncmFtLXN1ZmYgXAorICB8IC0tcHJvZ3JhbS1zdWYgfCAtLXByb2dyYW0tc3UgfCAtLXByb2dyYW0tcykKKyAgICBhY19wcmV2PXByb2dyYW1fc3VmZml4IDs7CisgIC1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpeD0qIHwgLS1wcm9ncmFtLXN1ZmZpPSogXAorICB8IC0tcHJvZ3JhbS1zdWZmPSogfCAtLXByb2dyYW0tc3VmPSogfCAtLXByb2dyYW0tc3U9KiB8IC0tcHJvZ3JhbS1zPSopCisgICAgcHJvZ3JhbV9zdWZmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbSB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmEgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtIHwgLS1wcm9ncmFtLXRyYW5zZm9yIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmbyB8IC0tcHJvZ3JhbS10cmFuc2YgXAorICB8IC0tcHJvZ3JhbS10cmFucyB8IC0tcHJvZ3JhbS10cmFuIFwKKyAgfCAtLXByb2dyLXRyYSB8IC0tcHJvZ3JhbS10ciB8IC0tcHJvZ3JhbS10KQorICAgIGFjX3ByZXY9cHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA7OworICAtcHJvZ3JhbS10cmFuc2Zvcm0tbmFtZT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbj0qIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS09KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybT0qIHwgLS1wcm9ncmFtLXRyYW5zZm9yPSogXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvPSogfCAtLXByb2dyYW0tdHJhbnNmPSogXAorICB8IC0tcHJvZ3JhbS10cmFucz0qIHwgLS1wcm9ncmFtLXRyYW49KiBcCisgIHwgLS1wcm9nci10cmE9KiB8IC0tcHJvZ3JhbS10cj0qIHwgLS1wcm9ncmFtLXQ9KikKKyAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSRhY19vcHRhcmcgOzsKKworICAtcGRmZGlyIHwgLS1wZGZkaXIgfCAtLXBkZmRpIHwgLS1wZGZkIHwgLS1wZGYgfCAtLXBkKQorICAgIGFjX3ByZXY9cGRmZGlyIDs7CisgIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCisgICAgcGRmZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQorICAgIGFjX3ByZXY9cHNkaXIgOzsKKyAgLXBzZGlyPSogfCAtLXBzZGlyPSogfCAtLXBzZGk9KiB8IC0tcHNkPSogfCAtLXBzPSopCisgICAgcHNkaXI9JGFjX29wdGFyZyA7OworCisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgIHNpbGVudD15ZXMgOzsKKworICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1zYmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikKKyAgICBhY19wcmV2PXNiaW5kaXIgOzsKKyAgLXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jpbj0qIFwKKyAgfCAtLXNiaT0qIHwgLS1zYj0qKQorICAgIHNiaW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGkgXAorICB8IC0tc2hhcmVkc3RhdGVkIHwgLS1zaGFyZWRzdGF0ZSB8IC0tc2hhcmVkc3RhdCB8IC0tc2hhcmVkc3RhIFwKKyAgfCAtLXNoYXJlZHN0IHwgLS1zaGFyZWRzIHwgLS1zaGFyZWQgfCAtLXNoYXJlIHwgLS1zaGFyIFwKKyAgfCAtLXNoYSB8IC0tc2gpCisgICAgYWNfcHJldj1zaGFyZWRzdGF0ZWRpciA7OworICAtc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaT0qIFwKKyAgfCAtLXNoYXJlZHN0YXRlZD0qIHwgLS1zaGFyZWRzdGF0ZT0qIHwgLS1zaGFyZWRzdGF0PSogfCAtLXNoYXJlZHN0YT0qIFwKKyAgfCAtLXNoYXJlZHN0PSogfCAtLXNoYXJlZHM9KiB8IC0tc2hhcmVkPSogfCAtLXNoYXJlPSogfCAtLXNoYXI9KiBcCisgIHwgLS1zaGE9KiB8IC0tc2g9KikKKyAgICBzaGFyZWRzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNpdGUgfCAtLXNpdGUgfCAtLXNpdCkKKyAgICBhY19wcmV2PXNpdGUgOzsKKyAgLXNpdGU9KiB8IC0tc2l0ZT0qIHwgLS1zaXQ9KikKKyAgICBzaXRlPSRhY19vcHRhcmcgOzsKKworICAtc3JjZGlyIHwgLS1zcmNkaXIgfCAtLXNyY2RpIHwgLS1zcmNkIHwgLS1zcmMgfCAtLXNyKQorICAgIGFjX3ByZXY9c3JjZGlyIDs7CisgIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCisgICAgc3JjZGlyPSRhY19vcHRhcmcgOzsKKworICAtc3lzY29uZmRpciB8IC0tc3lzY29uZmRpciB8IC0tc3lzY29uZmRpIHwgLS1zeXNjb25mZCB8IC0tc3lzY29uZiBcCisgIHwgLS1zeXNjb24gfCAtLXN5c2NvIHwgLS1zeXNjIHwgLS1zeXMgfCAtLXN5KQorICAgIGFjX3ByZXY9c3lzY29uZmRpciA7OworICAtc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaT0qIHwgLS1zeXNjb25mZD0qIHwgLS1zeXNjb25mPSogXAorICB8IC0tc3lzY29uPSogfCAtLXN5c2NvPSogfCAtLXN5c2M9KiB8IC0tc3lzPSogfCAtLXN5PSopCisgICAgc3lzY29uZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXRhcmdldCB8IC0tdGFyZ2V0IHwgLS10YXJnZSB8IC0tdGFyZyB8IC0tdGFyIHwgLS10YSB8IC0tdCkKKyAgICBhY19wcmV2PXRhcmdldF9hbGlhcyA7OworICAtdGFyZ2V0PSogfCAtLXRhcmdldD0qIHwgLS10YXJnZT0qIHwgLS10YXJnPSogfCAtLXRhcj0qIHwgLS10YT0qIHwgLS10PSopCisgICAgdGFyZ2V0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtdiB8IC12ZXJib3NlIHwgLS12ZXJib3NlIHwgLS12ZXJib3MgfCAtLXZlcmJvIHwgLS12ZXJiKQorICAgIHZlcmJvc2U9eWVzIDs7CisKKyAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtVikKKyAgICBhY19pbml0X3ZlcnNpb249OiA7OworCisgIC13aXRoLSogfCAtLXdpdGgtKikKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKKworICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGhvdXQtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PW5vIDs7CisKKyAgLS14KQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KKyAgICB3aXRoX3g9eWVzIDs7CisKKyAgLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZXMgfCAtLXgtaW5jbHVkZSB8IC0teC1pbmNsdWQgfCAtLXgtaW5jbHUgXAorICB8IC0teC1pbmNsIHwgLS14LWluYyB8IC0teC1pbiB8IC0teC1pKQorICAgIGFjX3ByZXY9eF9pbmNsdWRlcyA7OworICAteC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGVzPSogfCAtLXgtaW5jbHVkZT0qIHwgLS14LWluY2x1ZD0qIHwgLS14LWluY2x1PSogXAorICB8IC0teC1pbmNsPSogfCAtLXgtaW5jPSogfCAtLXgtaW49KiB8IC0teC1pPSopCisgICAgeF9pbmNsdWRlcz0kYWNfb3B0YXJnIDs7CisKKyAgLXgtbGlicmFyaWVzIHwgLS14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZSB8IC0teC1saWJyYXJpIFwKKyAgfCAtLXgtbGlicmFyIHwgLS14LWxpYnJhIHwgLS14LWxpYnIgfCAtLXgtbGliIHwgLS14LWxpIHwgLS14LWwpCisgICAgYWNfcHJldj14X2xpYnJhcmllcyA7OworICAteC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZXM9KiB8IC0teC1saWJyYXJpZT0qIHwgLS14LWxpYnJhcmk9KiBcCisgIHwgLS14LWxpYnJhcj0qIHwgLS14LWxpYnJhPSogfCAtLXgtbGlicj0qIHwgLS14LWxpYj0qIHwgLS14LWxpPSogfCAtLXgtbD0qKQorICAgIHhfbGlicmFyaWVzPSRhY19vcHRhcmcgOzsKKworICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJGFjX29wdGlvbicKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgICAgOzsKKworICAqPSopCisgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKKyAgICAgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7CisgICAgZXNhYworICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZworICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CisKKyAgKikKKyAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCisgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogeW91IHNob3VsZCB1c2UgLS1idWlsZCwgLS1ob3N0LCAtLXRhcmdldCIgPiYyCisgICAgZXhwciAieCRhY19vcHRpb24iIDogIi4qW14tLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCisgICAgOiAiJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0iCisgICAgOzsKKworICBlc2FjCitkb25lCisKK2lmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorICBhY19vcHRpb249LS1gZWNobyAkYWNfcHJldiB8IHNlZCAncy9fLy0vZydgCisgIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGFyZ3VtZW50IHRvICRhY19vcHRpb24iCitmaQorCitpZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiOyB0aGVuCisgIGNhc2UgJGVuYWJsZV9vcHRpb25fY2hlY2tpbmcgaW4KKyAgICBubykgOzsKKyAgICBmYXRhbCkgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiIDs7CisgICAgKikgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5yZWNvZ25pemVkX29wdHMiID4mMiA7OworICBlc2FjCitmaQorCisjIENoZWNrIGFsbCBkaXJlY3RvcnkgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeS4KK2ZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAorCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKwkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAorCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpcgorZG8KKyAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICMgUmVtb3ZlIHRyYWlsaW5nIHNsYXNoZXMuCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgICovICkKKyAgICAgIGFjX3ZhbD1gZXhwciAiWCRhY192YWwiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRhY192YWwiIDogJ1hcKC4qXCknYAorICAgICAgZXZhbCAkYWNfdmFyPVwkYWNfdmFsOzsKKyAgZXNhYworICAjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZXMuCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgIFtcXC8kXSogfCA/OltcXC9dKiApICBjb250aW51ZTs7CisgICAgTk9ORSB8ICcnICkgY2FzZSAkYWNfdmFyIGluICpwcmVmaXggKSBjb250aW51ZTs7IGVzYWM7OworICBlc2FjCisgIGFzX2ZuX2Vycm9yICQ/ICJleHBlY3RlZCBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBmb3IgLS0kYWNfdmFyOiAkYWNfdmFsIgorZG9uZQorCisjIFRoZXJlIG1pZ2h0IGJlIHBlb3BsZSB3aG8gZGVwZW5kIG9uIHRoZSBvbGQgYnJva2VuIGJlaGF2aW9yOiBgJGhvc3QnCisjIHVzZWQgdG8gaG9sZCB0aGUgYXJndW1lbnQgb2YgLS1ob3N0IGV0Yy4KKyMgRklYTUU6IFRvIHJlbW92ZSBzb21lIGRheS4KK2J1aWxkPSRidWlsZF9hbGlhcworaG9zdD0kaG9zdF9hbGlhcwordGFyZ2V0PSR0YXJnZXRfYWxpYXMKKworIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgoraWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCisgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQorICBlbGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiICE9ICJ4JGhvc3RfYWxpYXMiOyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPXllcworICBmaQorZmkKKworYWNfdG9vbF9wcmVmaXg9Cit0ZXN0IC1uICIkaG9zdF9hbGlhcyIgJiYgYWNfdG9vbF9wcmVmaXg9JGhvc3RfYWxpYXMtCisKK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmIGV4ZWMgNj4vZGV2L251bGwKKworCithY19wd2Q9YHB3ZGAgJiYgdGVzdCAtbiAiJGFjX3B3ZCIgJiYKK2FjX2xzX2RpPWBscyAtZGkgLmAgJiYKK2FjX3B3ZF9sc19kaT1gY2QgIiRhY19wd2QiICYmIGxzIC1kaSAuYCB8fAorICBhc19mbl9lcnJvciAkPyAid29ya2luZyBkaXJlY3RvcnkgY2Fubm90IGJlIGRldGVybWluZWQiCit0ZXN0ICJYJGFjX2xzX2RpIiA9ICJYJGFjX3B3ZF9sc19kaSIgfHwKKyAgYXNfZm5fZXJyb3IgJD8gInB3ZCBkb2VzIG5vdCByZXBvcnQgbmFtZSBvZiB3b3JraW5nIGRpcmVjdG9yeSIKKworCisjIEZpbmQgdGhlIHNvdXJjZSBmaWxlcywgaWYgbG9jYXRpb24gd2FzIG5vdCBzcGVjaWZpZWQuCitpZiB0ZXN0IC16ICIkc3JjZGlyIjsgdGhlbgorICBhY19zcmNkaXJfZGVmYXVsdGVkPXllcworICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisgIGFjX2NvbmZkaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfbXlzZWxmIiB8fAorJGFzX2V4cHIgWCIkYXNfbXlzZWxmIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX215c2VsZiIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgIHNyY2Rpcj0kYWNfY29uZmRpcgorICBpZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbgorICAgIHNyY2Rpcj0uLgorICBmaQorZWxzZQorICBhY19zcmNkaXJfZGVmYXVsdGVkPW5vCitmaQoraWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KKyAgdGVzdCAiJGFjX3NyY2Rpcl9kZWZhdWx0ZWQiID0geWVzICYmIHNyY2Rpcj0iJGFjX2NvbmZkaXIgb3IgLi4iCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBzb3VyY2VzICgkYWNfdW5pcXVlX2ZpbGUpIGluICRzcmNkaXIiCitmaQorYWNfbXNnPSJzb3VyY2VzIGFyZSBpbiAkc3JjZGlyLCBidXQgXGBjZCAkc3JjZGlyJyBkb2VzIG5vdCB3b3JrIgorYWNfYWJzX2NvbmZkaXI9YCgKKwljZCAiJHNyY2RpciIgJiYgdGVzdCAtciAiLi8kYWNfdW5pcXVlX2ZpbGUiIHx8IGFzX2ZuX2Vycm9yICQ/ICIkYWNfbXNnIgorCXB3ZClgCisjIFdoZW4gYnVpbGRpbmcgaW4gcGxhY2UsIHNldCBzcmNkaXI9LgoraWYgdGVzdCAiJGFjX2Fic19jb25mZGlyIiA9ICIkYWNfcHdkIjsgdGhlbgorICBzcmNkaXI9LgorZmkKKyMgUmVtb3ZlIHVubmVjZXNzYXJ5IHRyYWlsaW5nIHNsYXNoZXMgZnJvbSBzcmNkaXIuCisjIERvdWJsZSBzbGFzaGVzIGluIGZpbGUgbmFtZXMgaW4gb2JqZWN0IGZpbGUgZGVidWdnaW5nIGluZm8KKyMgbWVzcyB1cCBNLXggZ2RiIGluIEVtYWNzLgorY2FzZSAkc3JjZGlyIGluCisqLykgc3JjZGlyPWBleHByICJYJHNyY2RpciIgOiAnWFwoLipbXi9dXCknIFx8ICJYJHNyY2RpciIgOiAnWFwoLipcKSdgOzsKK2VzYWMKK2ZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvCisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKyAgZXZhbCBhY19lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQ9XCR7JHthY192YXJ9K3NldH0KKyAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlPVwkJHthY192YXJ9Citkb25lCisKKyMKKyMgUmVwb3J0IHRoZSAtLWhlbHAgbWVzc2FnZS4KKyMKK2lmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gImxvbmciOyB0aGVuCisgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgorICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCisgIGNhdCA8PF9BQ0VPRgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgUENSRTIgMTAuMjEgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KKworVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAoZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcworVkFSPVZBTFVFLiAgU2VlIGJlbG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4KKworRGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuCisKK0NvbmZpZ3VyYXRpb246CisgIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0CisgICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGlzIHBhY2thZ2UKKyAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzCisgIC1WLCAtLXZlcnNpb24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZyAuLi4nIG1lc3NhZ2VzCisgICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtkaXNhYmxlZF0KKyAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScKKyAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0ZSBvdXRwdXQgZmlsZXMKKyAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNlcyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddCisKK0luc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCisgICAgICAgICAgICAgICAgICAgICAgICAgIFtQUkVGSVhdCisKK0J5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK2FuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCitmb3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLgorCitGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KKworRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBbRVBSRUZJWC9iaW5dCisgIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQorICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgIHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQorICAtLXNoYXJlZHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQorICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisgIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVjdCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdCisgIC0taW5jbHVkZWRpcj1ESVIgICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KKyAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKyAgLS1kYXRhcm9vdGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJFRklYL3NoYXJlXQorICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQorICAtLWluZm9kaXI9RElSICAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dCisgIC0tbG9jYWxlZGlyPURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIvbWFuXQorICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFST09URElSL2RvYy9wY3JlMl0KKyAgLS1odG1sZGlyPURJUiAgICAgICAgICAgaHRtbCBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tZHZpZGlyPURJUiAgICAgICAgICAgIGR2aSBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcGRmZGlyPURJUiAgICAgICAgICAgIHBkZiBkb2N1bWVudGF0aW9uIFtET0NESVJdCisgIC0tcHNkaXI9RElSICAgICAgICAgICAgIHBzIGRvY3VtZW50YXRpb24gW0RPQ0RJUl0KK19BQ0VPRgorCisgIGNhdCA8PFxfQUNFT0YKKworUHJvZ3JhbSBuYW1lczoKKyAgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVggICAgICAgICAgICBwcmVwZW5kIFBSRUZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCAgICAgICAgICAgIGFwcGVuZCBTVUZGSVggdG8gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKyAgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPVBST0dSQU0gICBydW4gc2VkIFBST0dSQU0gb24gaW5zdGFsbGVkIHByb2dyYW0gbmFtZXMKKworU3lzdGVtIHR5cGVzOgorICAtLWJ1aWxkPUJVSUxEICAgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIG9uIEJVSUxEIFtndWVzc2VkXQorICAtLWhvc3Q9SE9TVCAgICAgICBjcm9zcy1jb21waWxlIHRvIGJ1aWxkIHByb2dyYW1zIHRvIHJ1biBvbiBIT1NUIFtCVUlMRF0KK19BQ0VPRgorZmkKKworaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KKyAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBQQ1JFMiAxMC4yMToiOzsKKyAgIGVzYWMKKyAgY2F0IDw8XF9BQ0VPRgorCitPcHRpb25hbCBGZWF0dXJlczoKKyAgLS1kaXNhYmxlLW9wdGlvbi1jaGVja2luZyAgaWdub3JlIHVucmVjb2duaXplZCAtLWVuYWJsZS8tLXdpdGggb3B0aW9ucworICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCisgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKyAgLS1lbmFibGUtc2lsZW50LXJ1bGVzICAgbGVzcyB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0xIikKKyAgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyAgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MCIpCisgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9ycworICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZworICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgLS1lbmFibGUtc2hhcmVkWz1QS0dTXSAgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCisgIC0tZW5hYmxlLXN0YXRpY1s9UEtHU10gIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorICAtLWVuYWJsZS1mYXN0LWluc3RhbGxbPVBLR1NdCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBbZGVmYXVsdD15ZXNdCisgIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgIGF2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcykKKworICAtLWRpc2FibGUtcGNyZTItOCAgICAgICBkaXNhYmxlIDggYml0IGNoYXJhY3RlciBzdXBwb3J0CisgIC0tZW5hYmxlLXBjcmUyLTE2ICAgICAgIGVuYWJsZSAxNiBiaXQgY2hhcmFjdGVyIHN1cHBvcnQKKyAgLS1lbmFibGUtcGNyZTItMzIgICAgICAgZW5hYmxlIDMyIGJpdCBjaGFyYWN0ZXIgc3VwcG9ydAorICAtLWVuYWJsZS1kZWJ1ZyAgICAgICAgICBlbmFibGUgZGVidWdnaW5nIGNvZGUKKyAgLS1lbmFibGUtaml0ICAgICAgICAgICAgZW5hYmxlIEp1c3QtSW4tVGltZSBjb21waWxpbmcgc3VwcG9ydAorICAtLWRpc2FibGUtcGNyZTJncmVwLWppdCBkaXNhYmxlIEpJVCBzdXBwb3J0IGluIHBjcmUyZ3JlcAorICAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVidWlsZCBjaGFyYWN0ZXIgdGFibGVzIGluIGN1cnJlbnQgbG9jYWxlCisgIC0tZGlzYWJsZS11bmljb2RlICAgICAgIGRpc2FibGUgVW5pY29kZSBzdXBwb3J0CisgIC0tZW5hYmxlLW5ld2xpbmUtaXMtY3IgIHVzZSBDUiBhcyBuZXdsaW5lIGNoYXJhY3RlcgorICAtLWVuYWJsZS1uZXdsaW5lLWlzLWxmICB1c2UgTEYgYXMgbmV3bGluZSBjaGFyYWN0ZXIgKGRlZmF1bHQpCisgIC0tZW5hYmxlLW5ld2xpbmUtaXMtY3JsZgorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgQ1JMRiBhcyBuZXdsaW5lIHNlcXVlbmNlCisgIC0tZW5hYmxlLW5ld2xpbmUtaXMtYW55Y3JsZgorICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgQ1IsIExGLCBvciBDUkxGIGFzIG5ld2xpbmUgc2VxdWVuY2UKKyAgLS1lbmFibGUtbmV3bGluZS1pcy1hbnkgdXNlIGFueSB2YWxpZCBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UKKyAgLS1lbmFibGUtYnNyLWFueWNybGYgICAgXFIgbWF0Y2hlcyBvbmx5IENSLCBMRiwgQ1JMRiBieSBkZWZhdWx0CisgIC0tZW5hYmxlLW5ldmVyLWJhY2tzbGFzaC1DCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBvZiBcQyBjYXVzZXMgYW4gZXJyb3IKKyAgLS1lbmFibGUtZWJjZGljICAgICAgICAgYXNzdW1lIEVCQ0RJQyBjb2RpbmcgcmF0aGVyIHRoYW4gQVNDSUk7IGluY29tcGF0aWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIC0tZW5hYmxlLXV0ZjsgdXNlIG9ubHkgaW4gKHVuY29tbW9uKSBFQkNESUMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnRzOyBpdCBpbXBsaWVzIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcworICAtLWVuYWJsZS1lYmNkaWMtbmwyNSAgICBzZXQgRUJDRElDIGNvZGUgZm9yIE5MIHRvIDB4MjUgaW5zdGVhZCBvZiAweDE1OyBpdAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsaWVzIC0tZW5hYmxlLWViY2RpYworICAtLWRpc2FibGUtc3RhY2stZm9yLXJlY3Vyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICBkb24ndCB1c2Ugc3RhY2sgcmVjdXJzaW9uIHdoZW4gbWF0Y2hpbmcKKyAgLS1lbmFibGUtcGNyZTJncmVwLWxpYnogbGluayBwY3JlMmdyZXAgd2l0aCBsaWJ6IHRvIGhhbmRsZSAuZ3ogZmlsZXMKKyAgLS1lbmFibGUtcGNyZTJncmVwLWxpYmJ6MgorICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rIHBjcmUyZ3JlcCB3aXRoIGxpYmJ6MiB0byBoYW5kbGUgLmJ6MiBmaWxlcworICAtLWVuYWJsZS1wY3JlMnRlc3QtbGliZWRpdAorICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rIHBjcmUydGVzdCB3aXRoIGxpYmVkaXQKKyAgLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYnJlYWRsaW5lCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmsgcGNyZTJ0ZXN0IHdpdGggbGlicmVhZGxpbmUKKyAgLS1lbmFibGUtdmFsZ3JpbmQgICAgICAgdmFsZ3JpbmQgc3VwcG9ydAorICAtLWVuYWJsZS1jb3ZlcmFnZSAgICAgICBlbmFibGUgY29kZSBjb3ZlcmFnZSByZXBvcnRzIHVzaW5nIGdjb3YKKworT3B0aW9uYWwgUGFja2FnZXM6CisgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQorICAtLXdpdGhvdXQtUEFDS0FHRSAgICAgICBkbyBub3QgdXNlIFBBQ0tBR0UgKHNhbWUgYXMgLS13aXRoLVBBQ0tBR0U9bm8pCisgIC0td2l0aC1waWNbPVBLR1NdICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQorICAtLXdpdGgtYWl4LXNvbmFtZT1haXh8c3ZyNHxib3RoCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgKGFrYSAiU09OQU1FIikgdmFyaWFudCB0bworICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlIG9uIEFJWCwgW2RlZmF1bHQ9YWl4XS4KKyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorICAtLXdpdGgtc3lzcm9vdFs9RElSXSAgICBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUiAob3IgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgLS13aXRoLXBjcmUyZ3JlcC1idWZzaXplPU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGNyZTJncmVwIGJ1ZmZlciBzaXplIChkZWZhdWx0PTIwNDgwLCBtaW5pbXVtPTgxOTIpCisgIC0td2l0aC1saW5rLXNpemU9TiAgICAgIGludGVybmFsIGxpbmsgc2l6ZSAoMiwgMywgb3IgNCBhbGxvd2VkOyBkZWZhdWx0PTIpCisgIC0td2l0aC1wYXJlbnMtbmVzdC1saW1pdD1OCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5lc3RlZCBwYXJlbnRoZXNlcyBsaW1pdCAoZGVmYXVsdD0yNTApCisgIC0td2l0aC1tYXRjaC1saW1pdD1OICAgIGRlZmF1bHQgbGltaXQgb24gaW50ZXJuYWwgbG9vcGluZyAoZGVmYXVsdD0xMDAwMDAwMCkKKyAgLS13aXRoLW1hdGNoLWxpbWl0LXJlY3Vyc2lvbj1OCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgbGltaXQgb24gaW50ZXJuYWwgcmVjdXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0PU1BVENIX0xJTUlUKQorCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgorICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCisgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDUFAgICAgICAgICBDIHByZXByb2Nlc3NvcgorICBMVF9TWVNfTElCUkFSWV9QQVRICisgICAgICAgICAgICAgIFVzZXItZGVmaW5lZCBydW4tdGltZSBsaWJyYXJ5IHNlYXJjaCBwYXRoLgorICBQS0dfQ09ORklHICBwYXRoIHRvIHBrZy1jb25maWcgdXRpbGl0eQorICBQS0dfQ09ORklHX1BBVEgKKyAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgdG8gYWRkIHRvIHBrZy1jb25maWcncyBzZWFyY2ggcGF0aAorICBQS0dfQ09ORklHX0xJQkRJUgorICAgICAgICAgICAgICBwYXRoIG92ZXJyaWRpbmcgcGtnLWNvbmZpZydzIGJ1aWx0LWluIHNlYXJjaCBwYXRoCisgIFZBTEdSSU5EX0NGTEFHUworICAgICAgICAgICAgICBDIGNvbXBpbGVyIGZsYWdzIGZvciBWQUxHUklORCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIFZBTEdSSU5EX0xJQlMKKyAgICAgICAgICAgICAgbGlua2VyIGZsYWdzIGZvciBWQUxHUklORCwgb3ZlcnJpZGluZyBwa2ctY29uZmlnCisgIExDT1YgICAgICAgIHRoZSBsdHAgbGNvdiBwcm9ncmFtCisgIEdFTkhUTUwgICAgIHRoZSBsdHAgZ2VuaHRtbCBwcm9ncmFtCisKK1VzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCitpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCisKK1JlcG9ydCBidWdzIHRvIHRoZSBwYWNrYWdlIHByb3ZpZGVyLgorX0FDRU9GCithY19zdGF0dXM9JD8KK2ZpCisKK2lmIHRlc3QgIiRhY19pbml0X2hlbHAiID0gInJlY3Vyc2l2ZSI7IHRoZW4KKyAgIyBJZiB0aGVyZSBhcmUgc3ViZGlycywgcmVwb3J0IHRoZWlyIHNwZWNpZmljIC0taGVscC4KKyAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKKyAgICB0ZXN0IC1kICIkYWNfZGlyIiB8fAorICAgICAgeyBjZCAiJHNyY2RpciIgJiYgYWNfcHdkPWBwd2RgICYmIHNyY2Rpcj0uICYmIHRlc3QgLWQgIiRhY19kaXIiOyB9IHx8CisgICAgICBjb250aW51ZQorICAgIGFjX2J1aWxkZGlyPS4KKworY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpcl9zdWIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfcHdkIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgbmFtZS4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7Citlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CisKKyAgICBjZCAiJGFjX2RpciIgfHwgeyBhY19zdGF0dXM9JD87IGNvbnRpbnVlOyB9CisgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQorICAgIGVsc2UKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCisgICAgZmkgfHwgYWNfc3RhdHVzPSQ/CisgICAgY2QgIiRhY19wd2QiIHx8IHsgYWNfc3RhdHVzPSQ/OyBicmVhazsgfQorICBkb25lCitmaQorCit0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKK2lmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKyAgY2F0IDw8XF9BQ0VPRgorUENSRTIgY29uZmlndXJlIDEwLjIxCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkKKworQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KK19BQ0VPRgorICBleGl0CitmaQorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG9jb25mIGluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgYWNfZm5fY190cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2NwcCBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jcHAgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4gY29uZnRlc3QuaSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICBhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY3BwCisKKyMgYWNfZm5fY190cnlfcnVuIExJTkVOTworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4gQXNzdW1lcworIyB0aGF0IGV4ZWN1dGFibGVzICpjYW4qIGJlIHJ1bi4KK2FjX2ZuX2NfdHJ5X3J1biAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyB7IGNhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CisgICAgICAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICAgICBhY19yZXR2YWw9JGFjX3N0YXR1cworZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9ydW4KKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzIGFuZCBjYW4gYmUgY29tcGlsZWQgdXNpbmcgdGhlIGluY2x1ZGUgZmlsZXMgaW4KKyMgSU5DTFVERVMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAorI2luY2x1ZGUgPCQyPgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZQorCisjIGFjX2ZuX2NfZmluZF9pbnRYX3QgTElORU5PIEJJVFMgVkFSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmRzIGEgc2lnbmVkIGludGVnZXIgdHlwZSB3aXRoIHdpZHRoIEJJVFMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19maW5kX2ludFhfdCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGludCQyX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGludCQyX3QuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1ubyIKKyAgICAgIyBPcmRlciBpcyBpbXBvcnRhbnQgLSBuZXZlciBjaGVjayBhIHR5cGUgdGhhdCBpcyBwb3RlbnRpYWxseSBzbWFsbGVyCisgICAgICMgdGhhbiBoYWxmIG9mIHRoZSBleHBlY3RlZCB0YXJnZXQgd2lkdGguCisgICAgIGZvciBhY190eXBlIGluIGludCQyX3QgJ2ludCcgJ2xvbmcgaW50JyBcCisJICdsb25nIGxvbmcgaW50JyAnc2hvcnQgaW50JyAnc2lnbmVkIGNoYXInOyBkbworICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisJICAgICBlbnVtIHsgTiA9ICQyIC8gMiAtIDEgfTsKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoMCA8ICgkYWNfdHlwZSkgKCgoKCgkYWNfdHlwZSkgMSA8PCBOKSA8PCBOKSAtIDEpICogMiArIDEpKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorCSAgICAgICAgZW51bSB7IE4gPSAkMiAvIDIgLSAxIH07CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkYWNfdHlwZSkgKCgoKCgkYWNfdHlwZSkgMSA8PCBOKSA8PCBOKSAtIDEpICogMiArIDEpCisJCSA8ICgkYWNfdHlwZSkgKCgoKCgkYWNfdHlwZSkgMSA8PCBOKSA8PCBOKSAtIDEpICogMiArIDIpKV07Cit0ZXN0X2FycmF5IFswXSA9IDA7CityZXR1cm4gdGVzdF9hcnJheSBbMF07CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGNhc2UgJGFjX3R5cGUgaW4gIygKKyAgaW50JDJfdCkgOgorICAgIGV2YWwgIiQzPXllcyIgOzsgIygKKyAgKikgOgorICAgIGV2YWwgIiQzPVwkYWNfdHlwZSIgOzsKK2VzYWMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJDMiXCIgPSB4Im5vIjsgdGhlbiA6CisKK2Vsc2UKKyAgYnJlYWsKK2ZpCisgICAgIGRvbmUKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2ZpbmRfaW50WF90CisKKyMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgdGVzdCAteCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja19mdW5jIExJTkVOTyBGVU5DIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgRlVOQyBleGlzdHMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseQorYWNfZm5fY19jaGVja19mdW5jICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICQyCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICQyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2Z1bmMKKworIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBIRUFERVIgZXhpc3RzLCBnaXZpbmcgYSB3YXJuaW5nIGlmIGl0IGNhbm5vdCBiZSBjb21waWxlZCB1c2luZworIyB0aGUgaW5jbHVkZSBmaWxlcyBpbiBJTkNMVURFUyBhbmQgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSCisjIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorZWxzZQorICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgdXNhYmlsaXR5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHVzYWJpbGl0eS4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGFjX2hlYWRlcl9jb21waWxlcj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgcHJlc2VuY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgcHJlc2VuY2UuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDwkMj4KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBhY19oZWFkZXJfcHJlcHJvYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQorJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIgPiY2OyB9CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAjKCgKKyAgeWVzOm5vOiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQorICAgIDs7CisgIG5vOnllczoqICkKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICA7OworZXNhYworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciIKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbAorCisjIGFjX2ZuX2NfY2hlY2tfdHlwZSBMSU5FTk8gVFlQRSBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFRZUEUgZXhpc3RzIGFmdGVyIGhhdmluZyBpbmNsdWRlZCBJTkNMVURFUywgc2V0dGluZyBjYWNoZQorIyB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX3R5cGUgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBldmFsICIkMz1ubyIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworaWYgKHNpemVvZiAoJDIpKQorCSByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CitpZiAoc2l6ZW9mICgoJDIpKSkKKwkgICAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBldmFsICIkMz15ZXMiCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworCit9ICMgYWNfZm5fY19jaGVja190eXBlCitjYXQgPmNvbmZpZy5sb2cgPDxfQUNFT0YKK1RoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCitydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgorCitJdCB3YXMgY3JlYXRlZCBieSBQQ1JFMiAkYXNfbWUgMTAuMjEsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCisKKyAgJCAkMCAkQAorCitfQUNFT0YKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworY2F0IDw8X0FTVU5BTUUKKyMjIC0tLS0tLS0tLSAjIworIyMgUGxhdGZvcm0uICMjCisjIyAtLS0tLS0tLS0gIyMKKworaG9zdG5hbWUgPSBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKK3VuYW1lIC1tID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXIgPSBgKHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtcyA9IGAodW5hbWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC12ID0gYCh1bmFtZSAtdikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorCisvdXNyL2Jpbi91bmFtZSAtcCA9IGAoL3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtub3duYAorCisvYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxsICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9ob3N0aW5mbyAgICAgID0gYCgvdXNyL2Jpbi9ob3N0aW5mbykgMj4vZGV2L251bGwgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL21hY2hpbmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gCisvYmluL3VuaXZlcnNlICAgICAgICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25vd25gCisKK19BU1VOQU1FCisKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAkYXNfZWNobyAiUEFUSDogJGFzX2RpciIKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCit9ID4mNQorCitjYXQgPiY1IDw8X0FDRU9GCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIENvcmUgdGVzdHMuICMjCisjIyAtLS0tLS0tLS0tLSAjIworCitfQUNFT0YKKworCisjIEtlZXAgYSB0cmFjZSBvZiB0aGUgY29tbWFuZCBsaW5lLgorIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCisjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKyMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGEtY2hhcmFjdGVycy4KKyMgTWFrZSB0d28gcGFzc2VzIHRvIGFsbG93IGZvciBwcm9wZXIgZHVwbGljYXRlLWFyZ3VtZW50IHN1cHByZXNzaW9uLgorYWNfY29uZmlndXJlX2FyZ3M9CithY19jb25maWd1cmVfYXJnczA9CithY19jb25maWd1cmVfYXJnczE9CithY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorZm9yIGFjX3Bhc3MgaW4gMSAyCitkbworICBmb3IgYWNfYXJnCisgIGRvCisgICAgY2FzZSAkYWNfYXJnIGluCisgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgICBjb250aW51ZSA7OworICAgICpcJyopCisgICAgICBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBjYXNlICRhY19wYXNzIGluCisgICAgMSkgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMCAiICckYWNfYXJnJyIgOzsKKyAgICAyKQorICAgICAgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMSAiICckYWNfYXJnJyIKKyAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgorCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKyAgICAgIGVsc2UKKwljYXNlICRhY19hcmcgaW4KKwkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorCSAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1uZiogXAorCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCisJICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbgorCSAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorZG9uZQoreyBhY19jb25maWd1cmVfYXJnczA9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczA7fQoreyBhY19jb25maWd1cmVfYXJnczE9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczE7fQorCisjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCisjIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQorIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCisjIFdBUk5JTkc6IFVzZSAnXCcnIHRvIHJlcHJlc2VudCBhbiBhcG9zdHJvcGhlIHdpdGhpbiB0aGUgdHJhcC4KKyMgV0FSTklORzogRG8gbm90IHN0YXJ0IHRoZSB0cmFwIGNvZGUgd2l0aCBhIG5ld2xpbmUsIGR1ZSB0byBhIEZyZWVCU0QgNC4wIGJ1Zy4KK3RyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29tZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLgorICB7CisgICAgZWNobworCisgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENhY2hlIHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgZWNobworICAgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ1wnJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnXCcnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgc2VkIC1uIFwKKwkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1wnJ1xcMidcJycvcCIKKyAgICAgIDs7ICMoCisgICAgKikKKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykKKyAgICBlY2hvCisKKyAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE91dHB1dCB2YXJpYWJsZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIyIKKyAgICBlY2hvCisgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycworICAgIGRvCisgICAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICAgIGNhc2UgJGFjX3ZhbCBpbgorICAgICAgKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworICAgICAgZXNhYworICAgICAgJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgorICAgIGRvbmUgfCBzb3J0CisgICAgZWNobworCisgICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgorICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiCisgICAgICBlY2hvCisgICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcworICAgICAgZG8KKwlldmFsIGFjX3ZhbD1cJCRhY192YXIKKwljYXNlICRhY192YWwgaW4KKwkqXCdcJycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxcXCdcJycnXCcnL2ciYDs7CisJZXNhYworCSRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wnJyIKKyAgICAgIGRvbmUgfCBzb3J0CisgICAgICBlY2hvCisgICAgZmkKKworICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgorICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tICMjCisjIyBjb25mZGVmcy5oLiAjIworIyMgLS0tLS0tLS0tLS0gIyMiCisgICAgICBlY2hvCisgICAgICBjYXQgY29uZmRlZnMuaAorICAgICAgZWNobworICAgIGZpCisgICAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgorICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFsIgorICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIgorICB9ID4mNQorICBybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYKKyAgICBybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmCisgICAgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvCisgIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IGFzX2ZuX2V4aXQgMScgJGFjX3NpZ25hbAorZG9uZQorYWNfc2lnbmFsPTAKKworIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KK3JtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oCisKKyRhc19lY2hvICIvKiBjb25mZGVmcy5oICovIiA+IGNvbmZkZWZzLmgKKworIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciB2YXJpYWJsZXMuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIkUEFDS0FHRV9UQVJOQU1FIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgorX0FDRU9GCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyIKK19BQ0VPRgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIkUEFDS0FHRV9CVUdSRVBPUlQiCitfQUNFT0YKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1VSTCAiJFBBQ0tBR0VfVVJMIgorX0FDRU9GCisKKworIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCisjIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgorYWNfc2l0ZV9maWxlMT1OT05FCithY19zaXRlX2ZpbGUyPU5PTkUKK2lmIHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4KKyAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEggc2VhcmNoIGZvciBjb25maWcuc2l0ZS4KKyAgY2FzZSAkQ09ORklHX1NJVEUgaW4gIygoCisgICAgLSopICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgICAqLyopIGFjX3NpdGVfZmlsZTE9JENPTkZJR19TSVRFOzsKKyAgICAqKSAgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7OworICBlc2FjCitlbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgorICBhY19zaXRlX2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kcHJlZml4L2V0Yy9jb25maWcuc2l0ZQorZWxzZQorICBhY19zaXRlX2ZpbGUxPSRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZQorICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2ZpCitmb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIgIiRhY19zaXRlX2ZpbGUyIgorZG8KKyAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYgY29udGludWUKKyAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRhY19zaXRlX2ZpbGUiICYmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQorICAgIC4gIiRhY19zaXRlX2ZpbGUiIFwKKyAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImZhaWxlZCB0byBsb2FkIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgIGZpCitkb25lCisKK2lmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgorICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbCBmaWxlcworICAjIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4gIERKR1BQIGVtdWxhdGVzIGl0IGFzIGEgcmVndWxhciBmaWxlLgorICBpZiB0ZXN0IC9kZXYvbnVsbCAhPSAiJGNhY2hlX2ZpbGUiICYmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4KKyAgICAgIFtcXC9dKiB8ID86W1xcL10qICkgLiAiJGNhY2hlX2ZpbGUiOzsKKyAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gIi4vJGNhY2hlX2ZpbGUiOzsKKyAgICBlc2FjCisgIGZpCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgID4kY2FjaGVfZmlsZQorZmkKKworIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQorIyB2YWx1ZS4KK2FjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQorZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KKyAgZXZhbCBhY19vbGRfc2V0PVwkYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQKKyAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKKyAgZXZhbCBhY19vbGRfdmFsPVwkYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZQorICBldmFsIGFjX25ld192YWw9XCRhY19lbnZfJHthY192YXJ9X3ZhbHVlCisgIGNhc2UgJGFjX29sZF9zZXQsJGFjX25ld19zZXQgaW4KKyAgICBzZXQsKQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNldCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQorICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKKyAgICAsc2V0KQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBub3Qgc2V0IGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICwpOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAieCRhY19vbGRfdmFsIiAhPSAieCRhY19uZXdfdmFsIjsgdGhlbgorCSMgZGlmZmVyZW5jZXMgaW4gd2hpdGVzcGFjZSBkbyBub3QgbGVhZCB0byBmYWlsdXJlLgorCWFjX29sZF92YWxfdz1gZWNobyB4ICRhY19vbGRfdmFsYAorCWFjX25ld192YWxfdz1gZWNobyB4ICRhY19uZXdfdmFsYAorCWlmIHRlc3QgIiRhY19vbGRfdmFsX3ciICE9ICIkYWNfbmV3X3ZhbF93IjsgdGhlbgorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGFjX2NhY2hlX2NvcnJ1cHRlZD06CisJZWxzZQorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB3YXJuaW5nOiBpZ25vcmluZyB3aGl0ZXNwYWNlIGNoYW5nZXMgaW4gXGAkYWNfdmFyJyBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwkgIGV2YWwgJGFjX3Zhcj1cJGFjX29sZF92YWwKKwlmaQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjI7fQorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogICBjdXJyZW50IHZhbHVlOiBcYCRhY19uZXdfdmFsJyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjI7fQorICAgICAgZmk7OworICBlc2FjCisgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KKyAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCisgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgorICAgICpcJyopIGFjX2FyZz0kYWNfdmFyPWAkYXNfZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgKikgYWNfYXJnPSRhY192YXI9JGFjX25ld192YWwgOzsKKyAgICBlc2FjCisgICAgY2FzZSAiICRhY19jb25maWd1cmVfYXJncyAiIGluCisgICAgICAqIiAnJGFjX2FyZycgIiopIDs7ICMgQXZvaWQgZHVwcy4gIFVzZSBvZiBxdW90ZXMgZW5zdXJlcyBhY2N1cmFjeS4KKyAgICAgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIgOzsKKyAgICBlc2FjCisgIGZpCitkb25lCitpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mMjt9CisgIGFzX2ZuX2Vycm9yICQ/ICJydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiAiJExJTkVOTyIgNQorZmkKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2Ygc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKworYW1fX2FwaV92ZXJzaW9uPScxLjE1JworCithY19hdXhfZGlyPQorZm9yIGFjX2RpciBpbiAiJHNyY2RpciIgIiRzcmNkaXIvLi4iICIkc3JjZGlyLy4uLy4uIjsgZG8KKyAgaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLXNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL2luc3RhbGwuc2giOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvc2h0b29sIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIgorICAgIGJyZWFrCisgIGZpCitkb25lCitpZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIGluc3RhbGwtc2gsIGluc3RhbGwuc2gsIG9yIHNodG9vbCBpbiBcIiRzcmNkaXJcIiBcIiRzcmNkaXIvLi5cIiBcIiRzcmNkaXIvLi4vLi5cIiIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgVGhlc2UgdGhyZWUgdmFyaWFibGVzIGFyZSB1bmRvY3VtZW50ZWQgYW5kIHVuc3VwcG9ydGVkLAorIyBhbmQgYXJlIGludGVuZGVkIHRvIGJlIHdpdGhkcmF3biBpbiBhIGZ1dHVyZSBBdXRvY29uZiByZWxlYXNlLgorIyBUaGV5IGNhbiBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIGlmIGEgYnVpbGRlcidzIHNvdXJjZSB0cmVlIGlzIGluIGEgZGlyZWN0b3J5CisjIHdob3NlIGZ1bGwgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMuCithY19jb25maWdfZ3Vlc3M9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuZ3Vlc3MiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWdfc3ViPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KK2FjX2NvbmZpZ3VyZT0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZ3VyZSIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4KKworCisjIEZpbmQgYSBnb29kIGluc3RhbGwgcHJvZ3JhbS4gIFdlIHByZWZlciBhIEMgcHJvZ3JhbSAoZmFzdGVyKSwKKyMgc28gb25lIHNjcmlwdCBpcyBhcyBnb29kIGFzIGFub3RoZXIuICBCdXQgYXZvaWQgdGhlIGJyb2tlbiBvcgorIyBpbmNvbXBhdGlibGUgdmVyc2lvbnM6CisjIFN5c1YgL2V0Yy9pbnN0YWxsLCAvdXNyL3NiaW4vaW5zdGFsbAorIyBTdW5PUyAvdXNyL2V0Yy9pbnN0YWxsCisjIElSSVggL3NiaW4vaW5zdGFsbAorIyBBSVggL2Jpbi9pbnN0YWxsCisjIEFtaWdhT1MgL0MvaW5zdGFsbCwgd2hpY2ggaW5zdGFsbHMgYm9vdGJsb2NrcyBvbiBmbG9wcHkgZGlzY3MKKyMgQUlYIDQgL3Vzci9iaW4vaW5zdGFsbGJzZCwgd2hpY2ggZG9lc24ndCB3b3JrIHdpdGhvdXQgYSAtZyBmbGFnCisjIEFGUyAvdXNyL2Fmc3dzL2Jpbi9pbnN0YWxsLCB3aGljaCBtaXNoYW5kbGVzIG5vbmV4aXN0ZW50IGFyZ3MKKyMgU1ZSNCAvdXNyL3VjYi9pbnN0YWxsLCB3aGljaCB0cmllcyB0byB1c2UgdGhlIG5vbmV4aXN0ZW50IGdyb3VwICJzdGFmZiIKKyMgT1MvMidzIHN5c3RlbSBpbnN0YWxsLCB3aGljaCBoYXMgYSBjb21wbGV0ZWx5IGRpZmZlcmVudCBzZW1hbnRpYworIyAuL2luc3RhbGwsIHdoaWNoIGNhbiBiZSBlcnJvbmVvdXNseSBjcmVhdGVkIGJ5IG1ha2UgZnJvbSAuL2luc3RhbGwuc2guCisjIFJlamVjdCBpbnN0YWxsIHByb2dyYW1zIHRoYXQgY2Fubm90IGluc3RhbGwgbXVsdGlwbGUgZmlsZXMuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbC4uLiAiID4mNjsgfQoraWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCitpZiAke2FjX2N2X3BhdGhfaW5zdGFsbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICAjIEFjY291bnQgZm9yIHBlb3BsZSB3aG8gcHV0IHRyYWlsaW5nIHNsYXNoZXMgaW4gUEFUSCBlbGVtZW50cy4KK2Nhc2UgJGFzX2Rpci8gaW4gIygoCisgIC4vIHwgLi8vIHwgL1tjQ10vKiB8IFwKKyAgL2V0Yy8qIHwgL3Vzci9zYmluLyogfCAvdXNyL2V0Yy8qIHwgL3NiaW4vKiB8IC91c3IvYWZzd3MvYmluLyogfCBcCisgID86W1xcL11vczJbXFwvXWluc3RhbGxbXFwvXSogfCA/OltcXC9dT1MyW1xcL11JTlNUQUxMW1xcL10qIHwgXAorICAvdXNyL3VjYi8qICkgOzsKKyAgKikKKyAgICAjIE9TRjEgYW5kIFNDTyBPRFQgMy4wIGhhdmUgdGhlaXIgb3duIG5hbWVzIGZvciBpbnN0YWxsLgorICAgICMgRG9uJ3QgdXNlIGluc3RhbGxic2QgZnJvbSBPU0Ygc2luY2UgaXQgaW5zdGFsbHMgc3R1ZmYgYXMgcm9vdAorICAgICMgYnkgZGVmYXVsdC4KKyAgICBmb3IgYWNfcHJvZyBpbiBnaW5zdGFsbCBzY29pbnN0IGluc3RhbGw7IGRvCisgICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKwlpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisJICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKwkgICAgOgorCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorCSAgICA6CisJICBlbHNlCisJICAgIHJtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCSAgICBlY2hvIG9uZSA+IGNvbmZ0ZXN0Lm9uZQorCSAgICBlY2hvIHR3byA+IGNvbmZ0ZXN0LnR3bworCSAgICBta2RpciBjb25mdGVzdC5kaXIKKwkgICAgaWYgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiIC1jIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gImBwd2RgL2NvbmZ0ZXN0LmRpciIgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0Lm9uZSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LnR3byAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0Lm9uZSAmJgorCSAgICAgIHRlc3QgLXMgY29uZnRlc3QuZGlyL2NvbmZ0ZXN0LnR3bworCSAgICB0aGVuCisJICAgICAgYWNfY3ZfcGF0aF9pbnN0YWxsPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IC1jIgorCSAgICAgIGJyZWFrIDMKKwkgICAgZmkKKwkgIGZpCisJZmkKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgOzsKK2VzYWMKKworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK3JtIC1yZiBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvIGNvbmZ0ZXN0LmRpcgorCitmaQorICBpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICAgIElOU1RBTEw9JGFjX2N2X3BhdGhfaW5zdGFsbAorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIElOU1RBTEwgd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBJTlNUQUxMPSRhY19pbnN0YWxsX3NoCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRJTlNUQUxMIiA+JjUKKyRhc19lY2hvICIkSU5TVEFMTCIgPiY2OyB9CisKKyMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCit0ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4uLiAiID4mNjsgfQorIyBSZWplY3QgdW5zYWZlIGNoYXJhY3RlcnMgaW4gJHNyY2RpciBvciB0aGUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkKKyMgbmFtZS4gIEFjY2VwdCBzcGFjZSBhbmQgdGFiIG9ubHkgaW4gdGhlIGxhdHRlci4KK2FtX2xmPScKKycKK2Nhc2UgYHB3ZGAgaW4KKyAgKltcXFwiXCNcJFwmXCdcYCRhbV9sZl0qKQorICAgIGFzX2ZuX2Vycm9yICQ/ICJ1bnNhZmUgYWJzb2x1dGUgd29ya2luZyBkaXJlY3RvcnkgbmFtZSIgIiRMSU5FTk8iIDU7OworZXNhYworY2FzZSAkc3JjZGlyIGluCisgICpbXFxcIlwjXCRcJlwnXGAkYW1fbGZcIFwJXSopCisgICAgYXNfZm5fZXJyb3IgJD8gInVuc2FmZSBzcmNkaXIgdmFsdWU6ICckc3JjZGlyJyIgIiRMSU5FTk8iIDU7OworZXNhYworCisjIERvICdzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKKyMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKKyMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCisjIGRpcmVjdG9yeSkuCitpZiAoCisgICBhbV9oYXNfc2xlcHQ9bm8KKyAgIGZvciBhbV90cnkgaW4gMSAyOyBkbworICAgICBlY2hvICJ0aW1lc3RhbXAsIHNsZXB0OiAkYW1faGFzX3NsZXB0IiA+IGNvbmZ0ZXN0LmZpbGUKKyAgICAgc2V0IFggYGxzIC1MdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAorICAgICBpZiB0ZXN0ICIkKiIgPSAiWCI7IHRoZW4KKwkjIC1MIGRpZG4ndCB3b3JrLgorCXNldCBYIGBscyAtdCAiJHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgCisgICAgIGZpCisgICAgIGlmIHRlc3QgIiQqIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcCisJJiYgdGVzdCAiJCoiICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuCisKKwkjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCisJIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorCSMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBoYXMgYWN0dWFsbHkKKwkjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCisJYXNfZm5fZXJyb3IgJD8gImxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KKyAgYWxpYXMgaW4geW91ciBlbnZpcm9ubWVudCIgIiRMSU5FTk8iIDUKKyAgICAgZmkKKyAgICAgaWYgdGVzdCAiJDIiID0gY29uZnRlc3QuZmlsZSB8fCB0ZXN0ICRhbV90cnkgLWVxIDI7IHRoZW4KKyAgICAgICBicmVhaworICAgICBmaQorICAgICAjIEp1c3QgaW4gY2FzZS4KKyAgICAgc2xlZXAgMQorICAgICBhbV9oYXNfc2xlcHQ9eWVzCisgICBkb25lCisgICB0ZXN0ICIkMiIgPSBjb25mdGVzdC5maWxlCisgICApCit0aGVuCisgICAjIE9rLgorICAgOgorZWxzZQorICAgYXNfZm5fZXJyb3IgJD8gIm5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siICIkTElORU5PIiA1CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyMgSWYgd2UgZGlkbid0IHNsZWVwLCB3ZSBzdGlsbCBuZWVkIHRvIGVuc3VyZSB0aW1lIHN0YW1wcyBvZiBjb25maWcuc3RhdHVzIGFuZAorIyBnZW5lcmF0ZWQgZmlsZXMgYXJlIHN0cmljdGx5IG5ld2VyLgorYW1fc2xlZXBfcGlkPQoraWYgZ3JlcCAnc2xlcHQ6IG5vJyBjb25mdGVzdC5maWxlID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAoIHNsZWVwIDEgKSAmCisgIGFtX3NsZWVwX3BpZD0kIQorZmkKKworcm0gLWYgY29uZnRlc3QuZmlsZQorCit0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYKKyAgcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT0icyZeJiRwcm9ncmFtX3ByZWZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4KK3Rlc3QgIiRwcm9ncmFtX3N1ZmZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJlwkJiRwcm9ncmFtX3N1ZmZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiCisjIERvdWJsZSBhbnkgXCBvciAkLgorIyBCeSBkZWZhdWx0IHdhcyBgcyx4LHgnLCByZW1vdmUgaXQgaWYgdXNlbGVzcy4KK2FjX3NjcmlwdD0ncy9bXFwkXS8mJi9nO3MvO3MseCx4LCQvLycKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9YCRhc19lY2hvICIkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgfCBzZWQgIiRhY19zY3JpcHQiYAorCisjIEV4cGFuZCAkYWNfYXV4X2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoLgorYW1fYXV4X2Rpcj1gY2QgIiRhY19hdXhfZGlyIiAmJiBwd2RgCisKK2lmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0geHNldDsgdGhlbgorICBjYXNlICRhbV9hdXhfZGlyIGluCisgICpcICogfCAqXAkqKQorICAgIE1JU1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsKKyAgKikKKyAgICBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsKKyAgZXNhYworZmkKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1pcy1saWdodHdlaWdodCI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJ21pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJ21pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mMjt9CitmaQorCitpZiB0ZXN0IHgiJHtpbnN0YWxsX3NoK3NldH0iICE9IHhzZXQ7IHRoZW4KKyAgY2FzZSAkYW1fYXV4X2RpciBpbgorICAqXCAqIHwgKlwJKikKKyAgICBpbnN0YWxsX3NoPSJcJHtTSEVMTH0gJyRhbV9hdXhfZGlyL2luc3RhbGwtc2gnIiA7OworICAqKQorICAgIGluc3RhbGxfc2g9Ilwke1NIRUxMfSAkYW1fYXV4X2Rpci9pbnN0YWxsLXNoIgorICBlc2FjCitmaQorCisjIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyAnc3RyaXAnIHdoZW4gdGhlIHVzZXIKKyMgcnVuICJtYWtlIGluc3RhbGwtc3RyaXAiLiAgSG93ZXZlciAnc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKyMgd2lsbCBob25vciB0aGUgJ1NUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiAhPSBubzsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkU1RSSVAiID4mNQorJGFzX2VjaG8gIiRTVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAoraWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfU1RSSVAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9TVFJJUCIgPSB4OyB0aGVuCisgICAgU1RSSVA9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgU1RSSVA9JGFjX2N0X1NUUklQCisgIGZpCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKK2ZpCitJTlNUQUxMX1NUUklQX1BST0dSQU09IlwkKGluc3RhbGxfc2gpIC1jIC1zIgorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRocmVhZC1zYWZlIG1rZGlyIC1wLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkTUtESVJfUCI7IHRoZW4KKyAgaWYgJHthY19jdl9wYXRoX21rZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi9vcHQvc2Z3L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIG1rZGlyIGdta2RpcjsgZG8KKwkgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJICAgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiB8fCBjb250aW51ZQorCSAgIGNhc2UgYCIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtLXZlcnNpb24gMj4mMWAgaW4gIygKKwkgICAgICdta2RpciAoR05VIGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGNvcmV1dGlscykgJyogfCBcCisJICAgICAnbWtkaXIgKGZpbGV1dGlscykgJzQuMSopCisJICAgICAgIGFjX2N2X3BhdGhfbWtkaXI9JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dAorCSAgICAgICBicmVhayAzOzsKKwkgICBlc2FjCisJIGRvbmUKKyAgICAgICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKKworICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9ta2RpcitzZXR9IiA9IHNldDsgdGhlbgorICAgIE1LRElSX1A9IiRhY19jdl9wYXRoX21rZGlyIC1wIgorICBlbHNlCisgICAgIyBBcyBhIGxhc3QgcmVzb3J0LCB1c2UgdGhlIHNsb3cgc2hlbGwgc2NyaXB0LiAgRG9uJ3QgY2FjaGUgYQorICAgICMgdmFsdWUgZm9yIE1LRElSX1Agd2l0aGluIGEgc291cmNlIGRpcmVjdG9yeSwgYmVjYXVzZSB0aGF0IHdpbGwKKyAgICAjIGJyZWFrIG90aGVyIHBhY2thZ2VzIHVzaW5nIHRoZSBjYWNoZSBpZiB0aGF0IGRpcmVjdG9yeSBpcworICAgICMgcmVtb3ZlZCwgb3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVsYXRpdmUgbmFtZS4KKyAgICBNS0RJUl9QPSIkYWNfaW5zdGFsbF9zaCAtZCIKKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1LRElSX1AiID4mNQorJGFzX2VjaG8gIiRNS0RJUl9QIiA+JjY7IH0KKworZm9yIGFjX3Byb2cgaW4gZ2F3ayBtYXdrIG5hd2sgYXdrCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQVdLKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BV0s9IiRBV0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BV0s9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FXSz0kYWNfY3ZfcHJvZ19BV0sKK2lmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVdLIiA+JjUKKyRhc19lY2hvICIkQVdLIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gIiA+JjY7IH0KK3NldCB4ICR7TUFLRS1tYWtlfQorYWNfbWFrZT1gJGFzX2VjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCitpZiBldmFsIFwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKK1NIRUxMID0gL2Jpbi9zaAorYWxsOgorCUBlY2hvICdAQEAlJSU9JChNQUtFKT1AQEAlJSUnCitfQUNFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KK2Nhc2UgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsYCBpbgorICAqQEBAJSUlPT8qPUBAQCUlJSopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKKyAgKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubzs7Citlc2FjCitybSAtZiBjb25mdGVzdC5tYWtlCitmaQoraWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIFNFVF9NQUtFPQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorZmkKKworcm0gLXJmIC50c3QgMj4vZGV2L251bGwKK21rZGlyIC50c3QgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLnRzdDsgdGhlbgorICBhbV9fbGVhZGluZ19kb3Q9LgorZWxzZQorICBhbV9fbGVhZGluZ19kb3Q9XworZmkKK3JtZGlyIC50c3QgMj4vZGV2L251bGwKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNpbGVudC1ydWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaWxlbnRfcnVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaWxlbnRfcnVsZXM7CitmaQorCitjYXNlICRlbmFibGVfc2lsZW50X3J1bGVzIGluICMgKCgoCisgIHllcykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MDs7CisgICBubykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisgICAgKikgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7Citlc2FjCithbV9tYWtlPSR7TUFLRS1tYWtlfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgJGFzX2VjaG8gJ1RSVUU9JChCQVIkKFYpKQorQkFSMD1mYWxzZQorQkFSMT10cnVlCitWPTEKK2FtX19kb2l0OgorCUAkKFRSVUUpCisuUEhPTlk6IGFtX19kb2l0JyB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcworZWxzZQorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNjsgfQoraWYgdGVzdCAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMgPSB5ZXM7IHRoZW4KKyAgICBBTV9WPSckKFYpJworICBBTV9ERUZBVUxUX1Y9JyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpJworZWxzZQorICBBTV9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorICBBTV9ERUZBVUxUX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCitmaQorQU1fQkFDS1NMQVNIPSdcJworCitpZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiOyB0aGVuCisgICMgVXNlIC1JJChzcmNkaXIpIG9ubHkgd2hlbiAkKHNyY2RpcikgIT0gLiwgc28gdGhhdCBtYWtlJ3Mgb3V0cHV0CisgICMgaXMgbm90IHBvbGx1dGVkIHdpdGggcmVwZWF0ZWQgIi1JLiIKKyAgYW1fX2lzcmM9JyAtSSQoc3JjZGlyKScKKyAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCisgIGlmIHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gInNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVhblwiIHRoZXJlIGZpcnN0IiAiJExJTkVOTyIgNQorICBmaQorZmkKKworIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCitpZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbgorICBpZiAoY3lncGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgICBDWUdQQVRIX1c9J2N5Z3BhdGggLXcnCisgIGVsc2UKKyAgICBDWUdQQVRIX1c9ZWNobworICBmaQorZmkKKworCisjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCisgUEFDS0FHRT0ncGNyZTInCisgVkVSU0lPTj0nMTAuMjEnCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFICIkUEFDS0FHRSIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgVkVSU0lPTiAiJFZFUlNJT04iCitfQUNFT0YKKworIyBTb21lIHRvb2xzIEF1dG9tYWtlIG5lZWRzLgorCitBQ0xPQ0FMPSR7QUNMT0NBTC0iJHthbV9taXNzaW5nX3J1bn1hY2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufSJ9CisKKworQVVUT0NPTkY9JHtBVVRPQ09ORi0iJHthbV9taXNzaW5nX3J1bn1hdXRvY29uZiJ9CisKKworQVVUT01BS0U9JHtBVVRPTUFLRS0iJHthbV9taXNzaW5nX3J1bn1hdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0ifQorCisKK0FVVE9IRUFERVI9JHtBVVRPSEVBREVSLSIke2FtX21pc3NpbmdfcnVufWF1dG9oZWFkZXIifQorCisKK01BS0VJTkZPPSR7TUFLRUlORk8tIiR7YW1fbWlzc2luZ19ydW59bWFrZWluZm8ifQorCisjIEZvciBiZXR0ZXIgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFRvIGJlIHJlbW92ZWQgb25jZSBBdXRvbWFrZSAxLjkueAorIyBkaWVzIG91dCBmb3IgZ29vZC4gIEZvciBtb3JlIGJhY2tncm91bmQsIHNlZToKKyMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9hdXRvbWFrZS8yMDEyLTA3L21zZzAwMDAxLmh0bWw+CisjIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYXV0b21ha2UvMjAxMi0wNy9tc2cwMDAxNC5odG1sPgorbWtkaXJfcD0nJChNS0RJUl9QKScKKworIyBXZSBuZWVkIGF3ayBmb3IgdGhlICJjaGVjayIgdGFyZ2V0IChhbmQgcG9zc2libHkgdGhlIFRBUCBkcml2ZXIpLiAgVGhlCisjIHN5c3RlbSAiYXdrIiBpcyBiYWQgb24gc29tZSBwbGF0Zm9ybXMuCisjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICBZZXMsIGl0J3Mgc3RpbGwgdXNlZAorIyBpbiB0aGUgd2lsZCA6LSggIFdlIHNob3VsZCBmaW5kIGEgcHJvcGVyIHdheSB0byBkZXByZWNhdGUgaXQgLi4uCitBTVRBUj0nJCR7VEFSLXRhcn0nCisKKworIyBXZSdsbCBsb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgorX2FtX3Rvb2xzPSdnbnV0YXIgIHBheCBjcGlvIG5vbmUnCisKK2FtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIiJyBhbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nCisKKworCisKKworCisjIFBPU0lYIHdpbGwgc2F5IGluIGEgZnV0dXJlIHZlcnNpb24gdGhhdCBydW5uaW5nICJybSAtZiIgd2l0aCBubyBhcmd1bWVudAorIyBpcyBPSzsgYW5kIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBtYWtlIHRoYXQgYXNzdW1wdGlvbiBpbiBvdXIgTWFrZWZpbGUKKyMgcmVjaXBlcy4gIFNvIHVzZSBhbiBhZ2dyZXNzaXZlIHByb2JlIHRvIGNoZWNrIHRoYXQgdGhlIHVzYWdlIHdlIHdhbnQgaXMKKyMgYWN0dWFsbHkgc3VwcG9ydGVkICJpbiB0aGUgd2lsZCIgdG8gYW4gYWNjZXB0YWJsZSBkZWdyZWUuCisjIFNlZSBhdXRvbWFrZSBidWcjMTA4MjguCisjIFRvIG1ha2UgYW55IGlzc3VlIG1vcmUgdmlzaWJsZSwgY2F1c2UgdGhlIHJ1bm5pbmcgY29uZmlndXJlIHRvIGJlIGFib3J0ZWQKKyMgYnkgZGVmYXVsdCBpZiB0aGUgJ3JtJyBwcm9ncmFtIGluIHVzZSBkb2Vzbid0IG1hdGNoIG91ciBleHBlY3RhdGlvbnM7IHRoZQorIyB1c2VyIGNhbiBzdGlsbCBvdmVycmlkZSB0aGlzIHRob3VnaC4KK2lmIHJtIC1mICYmIHJtIC1mciAmJiBybSAtcmY7IHRoZW4gOiBPSzsgZWxzZQorICBjYXQgPiYyIDw8J0VORCcKK09vcHMhCisKK1lvdXIgJ3JtJyBwcm9ncmFtIHNlZW1zIHVuYWJsZSB0byBydW4gd2l0aG91dCBmaWxlIG9wZXJhbmRzIHNwZWNpZmllZAorb24gdGhlIGNvbW1hbmQgbGluZSwgZXZlbiB3aGVuIHRoZSAnLWYnIG9wdGlvbiBpcyBwcmVzZW50LiAgVGhpcyBpcyBjb250cmFyeQordG8gdGhlIGJlaGF2aW91ciBvZiBtb3N0IHJtIHByb2dyYW1zIG91dCB0aGVyZSwgYW5kIG5vdCBjb25mb3JtaW5nIHdpdGgKK3RoZSB1cGNvbWluZyBQT1NJWCBzdGFuZGFyZDogPGh0dHA6Ly9hdXN0aW5ncm91cGJ1Z3MubmV0L3ZpZXcucGhwP2lkPTU0Mj4KKworUGxlYXNlIHRlbGwgYnVnLWF1dG9tYWtlQGdudS5vcmcgYWJvdXQgeW91ciBzeXN0ZW0sIGluY2x1ZGluZyB0aGUgdmFsdWUKK29mIHlvdXIgJFBBVEggYW5kIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMgbWVzc2FnZS4gIFRoaXMKK2NhbiBoZWxwIHVzIGltcHJvdmUgZnV0dXJlIGF1dG9tYWtlIHZlcnNpb25zLgorCitFTkQKKyAgaWYgdGVzdCB4IiRBQ0NFUFRfSU5GRVJJT1JfUk1fUFJPR1JBTSIgPSB4InllcyI7IHRoZW4KKyAgICBlY2hvICdDb25maWd1cmF0aW9uIHdpbGwgcHJvY2VlZCBhbnl3YXksIHNpbmNlIHlvdSBoYXZlIHNldCB0aGUnID4mMgorICAgIGVjaG8gJ0FDQ0VQVF9JTkZFUklPUl9STV9QUk9HUkFNIHZhcmlhYmxlIHRvICJ5ZXMiJyA+JjIKKyAgICBlY2hvID4mMgorICBlbHNlCisgICAgY2F0ID4mMiA8PCdFTkQnCitBYm9ydGluZyB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLCB0byBlbnN1cmUgeW91IHRha2Ugbm90aWNlIG9mIHRoZSBpc3N1ZS4KKworWW91IGNhbiBkb3dubG9hZCBhbmQgaW5zdGFsbCBHTlUgY29yZXV0aWxzIHRvIGdldCBhbiAncm0nIGltcGxlbWVudGF0aW9uCit0aGF0IGJlaGF2ZXMgcHJvcGVybHk6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvY29yZXV0aWxzLz4uCisKK0lmIHlvdSB3YW50IHRvIGNvbXBsZXRlIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgdXNpbmcgeW91ciBwcm9ibGVtYXRpYworJ3JtJyBhbnl3YXksIGV4cG9ydCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgQUNDRVBUX0lORkVSSU9SX1JNX1BST0dSQU0KK3RvICJ5ZXMiLCBhbmQgcmUtcnVuIGNvbmZpZ3VyZS4KKworRU5ECisgICAgYXNfZm5fZXJyb3IgJD8gIllvdXIgJ3JtJyBwcm9ncmFtIGlzIGJhZCwgc29ycnkuIiAiJExJTkVOTyIgNQorICBmaQorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNpbGVudC1ydWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaWxlbnRfcnVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaWxlbnRfcnVsZXM7CitmaQorCitjYXNlICRlbmFibGVfc2lsZW50X3J1bGVzIGluICMgKCgoCisgIHllcykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MDs7CisgICBubykgQU1fREVGQVVMVF9WRVJCT1NJVFk9MTs7CisgICAgKikgQU1fREVGQVVMVF9WRVJCT1NJVFk9MDs7Citlc2FjCithbV9tYWtlPSR7TUFLRS1tYWtlfQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkYW1fbWFrZSBzdXBwb3J0cyBuZXN0ZWQgdmFyaWFibGVzLi4uICIgPiY2OyB9CitpZiAke2FtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgJGFzX2VjaG8gJ1RSVUU9JChCQVIkKFYpKQorQkFSMD1mYWxzZQorQkFSMT10cnVlCitWPTEKK2FtX19kb2l0OgorCUAkKFRSVUUpCisuUEhPTlk6IGFtX19kb2l0JyB8ICRhbV9tYWtlIC1mIC0gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPXllcworZWxzZQorICBhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcz1ubworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNjsgfQoraWYgdGVzdCAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMgPSB5ZXM7IHRoZW4KKyAgICBBTV9WPSckKFYpJworICBBTV9ERUZBVUxUX1Y9JyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpJworZWxzZQorICBBTV9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorICBBTV9ERUZBVUxUX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCitmaQorQU1fQkFDS1NMQVNIPSdcJworCithY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIHNyYy9jb25maWcuaCIKKworCisjIFRoaXMgaXMgYSBuZXcgdGhpbmcgcmVxdWlyZWQgdG8gc3RvcCBhIHdhcm5pbmcgZnJvbSBhdXRvbWFrZSAxLjEyCitERVBESVI9IiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiCisKK2FjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZXBmaWxlcyIKKworCithbV9tYWtlPSR7TUFLRS1tYWtlfQorY2F0ID4gY29uZmluYyA8PCAnRU5EJworYW1fX2RvaXQ6CisJQGVjaG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0CisuUEhPTlk6IGFtX19kb2l0CitFTkQKKyMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICIgPiY2OyB9CithbV9faW5jbHVkZT0iIyIKK2FtX19xdW90ZT0KK19hbV9yZXN1bHQ9bm9uZQorIyBGaXJzdCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2VjaG8gImluY2x1ZGUgY29uZmluYyIgPiBjb25mbWYKKyMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tICdtYWtlJy4KK2Nhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgYW1fX2luY2x1ZGU9aW5jbHVkZQorICBhbV9fcXVvdGU9CisgIF9hbV9yZXN1bHQ9R05VCisgIDs7Citlc2FjCisjIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUgaW5jbHVkZS4KK2lmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4KKyAgIGVjaG8gJy5pbmNsdWRlICJjb25maW5jIicgPiBjb25mbWYKKyAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoCisgICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikKKyAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgYW1fX3F1b3RlPSJcIiIKKyAgICAgX2FtX3Jlc3VsdD1CU0QKKyAgICAgOzsKKyAgIGVzYWMKK2ZpCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUKKyRhc19lY2hvICIkX2FtX3Jlc3VsdCIgPiY2OyB9CitybSAtZiBjb25maW5jIGNvbmZtZgorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZzsKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9kZXBjb21wIgorICBBTURFUEJBQ0tTTEFTSD0nXCcKKyAgYW1fX25vZGVwPSdfbm8nCitmaQorIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBBTURFUF9UUlVFPQorICBBTURFUF9GQUxTRT0nIycKK2Vsc2UKKyAgQU1ERVBfVFJVRT0nIycKKyAgQU1ERVBfRkFMU0U9CitmaQorCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIGZpCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgY29udGludWUKKyAgICAgZmkKKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2ZpCisKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCiskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGIub3V0IgorIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0LgorIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25vc2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbgorIyBvZiBleGVleHQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAiID4mNjsgfQorYWNfbGlua19kZWZhdWx0PWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKKworIyBUaGUgcG9zc2libGUgb3V0cHV0IGZpbGVzOgorYWNfZmlsZXM9ImEub3V0IGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBhLmV4ZSBhX291dC5leGUgYi5vdXQgY29uZnRlc3QuKiIKKworYWNfcm1maWxlcz0KK2ZvciBhY19maWxlIGluICRhY19maWxlcworZG8KKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsKKyAgZXNhYworZG9uZQorcm0gLWYgJGFjX3JtZmlsZXMKKworaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmtfZGVmYXVsdCIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxlIHRvIGBubycuCisjIFNvIGlnbm9yZSBhIHZhbHVlIG9mIGBubycsIG90aGVyd2lzZSB0aGlzIHdvdWxkIGxlYWQgdG8gYEVYRUVYVCA9IG5vJworIyBpbiBhIE1ha2VmaWxlLiAgV2Ugc2hvdWxkIG5vdCBvdmVycmlkZSBhY19jdl9leGVleHQgaWYgaXQgd2FzIGNhY2hlZCwKKyMgc28gdGhhdCB0aGUgdXNlciBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIHRlc3QgZm9yIGNvbXBpbGVycyB1bmtub3duIHRvCisjIEF1dG9jb25mLgorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzICcnCitkbworICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKKyAgY2FzZSAkYWNfZmlsZSBpbgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkKKwk7OworICAgIFthYl0ub3V0ICkKKwkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAorCSMgY2VydGFpbmx5IHJpZ2h0LgorCWJyZWFrOzsKKyAgICAqLiogKQorCWlmIHRlc3QgIiR7YWNfY3ZfZXhlZXh0K3NldH0iID0gc2V0ICYmIHRlc3QgIiRhY19jdl9leGVleHQiICE9IG5vOworCXRoZW4gOjsgZWxzZQorCSAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCWZpCisJIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVzZSB0aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90CisJIyBzYWZlOiBjcm9zcyBjb21waWxlcnMgbWF5IG5vdCBhZGQgdGhlIHN1ZmZpeCBpZiBnaXZlbiBhbiBgLW8nCisJIyBhcmd1bWVudCwgc28gd2UgbWF5IG5lZWQgdG8ga25vdyBpdCBhdCB0aGF0IHBvaW50IGFscmVhZHkuCisJIyBFdmVuIGlmIHRoaXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mCisJIyBhY3R1YWxseSB3b3JraW5nLgorCWJyZWFrOzsKKyAgICAqICkKKwlicmVhazs7CisgIGVzYWMKK2RvbmUKK3Rlc3QgIiRhY19jdl9leGVleHQiID0gbm8gJiYgYWNfY3ZfZXhlZXh0PQorCitlbHNlCisgIGFjX2ZpbGU9JycKK2ZpCitpZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCit7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0KK2FjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0CisKK3JtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CithY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0KK2lmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9ic2VydmFibGUpCisjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKKyMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCisjIGBybScuCitmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7CisgICAgKi4qICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJICBicmVhazs7CisgICAgKiApIGJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBjb21waWxlIGFuZCBsaW5rCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitFWEVFWFQ9JGFjX2N2X2V4ZWV4dAorYWNfZXhlZXh0PSRFWEVFWFQKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgoraW50CittYWluICgpCit7CitGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOworIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGNvbmZ0ZXN0Lm91dCIKKyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgorICB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorICBpZiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19jdl9leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1ubworICBlbHNlCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorCWNyb3NzX2NvbXBpbGluZz15ZXMKKyAgICBlbHNlCisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgIGZpCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQorJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBjb25mdGVzdC5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X29iamV4dCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKK2lmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoKKyAgZm9yIGFjX2ZpbGUgaW4gY29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlOworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNICkgOzsKKyAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19maWxlIiA6ICcuKlwuXCguKlwpJ2AKKyAgICAgICBicmVhazs7CisgIGVzYWMKK2RvbmUKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK3sgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0KK09CSkVYVD0kYWNfY3Zfb2JqZXh0CithY19vYmpleHQ9JE9CSkVYVAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCithY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CithY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBDRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0cnVjdCBzdGF0OworLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworc3RydWN0IGJ1ZiB7IGludCB4OyB9OworRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK3N0YXRpYyBjaGFyICplIChwLCBpKQorICAgICBjaGFyICoqcDsKKyAgICAgaW50IGk7Cit7CisgIHJldHVybiBwW2ldOworfQorc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQoreworICBjaGFyICpzOworICB2YV9saXN0IHY7CisgIHZhX3N0YXJ0ICh2LHApOworICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworICB2YV9lbmQgKHYpOworICByZXR1cm4gczsKK30KKworLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKK2ludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CitzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK2ludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworaW50IGFyZ2M7CitjaGFyICoqYXJndjsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCisJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKKworZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfcHJvZ19jY19jX28rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKyAgIyBNYWtlIHN1cmUgaXQgd29ya3MgYm90aCB3aXRoICRDQyBhbmQgd2l0aCBzaW1wbGUgY2MuCisgICMgRm9sbG93aW5nIEFDX1BST0dfQ0NfQ19PLCB3ZSBkbyB0aGUgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUKKyAgIyBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sCisgICMgdGhvdWdoIHRoZXkgd2lsbCBjcmVhdGUgb25lLgorICBhbV9jdl9wcm9nX2NjX2Nfbz15ZXMKKyAgZm9yIGFtX2kgaW4gMSAyOyBkbworICAgIGlmIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0IiA+JjUKKyAgICgkQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCkgPiY1IDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gXAorICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dDsgdGhlbgorICAgICAgOiBPSworICAgIGVsc2UKKyAgICAgIGFtX2N2X3Byb2dfY2NfY19vPW5vCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgcm0gLWYgY29yZSBjb25mdGVzdCoKKyAgdW5zZXQgYW1faQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfcHJvZ19jY19jX28iID4mNQorJGFzX2VjaG8gIiRhbV9jdl9wcm9nX2NjX2NfbyIgPiY2OyB9CitpZiB0ZXN0ICIkYW1fY3ZfcHJvZ19jY19jX28iICE9IHllczsgdGhlbgorICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KKyAgICMgRklYTUU6IEl0IGlzIHdyb25nIHRvIHJld3JpdGUgQ0MuCisgICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KKyAgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0NDIGluIHRoaXMgY2FzZSwKKyAgICMgYW5kIHRoZW4gd2UgY291bGQgc2V0IGFtX19DQz0iXCQodG9wX3NyY2RpcikvY29tcGlsZSBcJChDQykiCisgICBDQz0iJGFtX2F1eF9kaXIvY29tcGlsZSAkQ0MiCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKK2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgJ0QnIC0tIGJlY2F1c2UgJy1NRCcgbWVhbnMgInB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCIuCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgorICAgICAgZWNobyAnLyogZHVtbXkgKi8nID4gc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgJy1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgorICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorQ0NERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorICBhbV9fZmFzdGRlcENDX1RSVUU9CisgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0nIycKKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0KK2ZpCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGFyIGxpYiAibGluayAtbGliIgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BUis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVI9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FSPSRhY19jdl9wcm9nX0FSCitpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVIiID4mNQorJGFzX2VjaG8gIiRBUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJEFSIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJEFSIjsgdGhlbgorICBhY19jdF9BUj0kQVIKKyAgZm9yIGFjX3Byb2cgaW4gYXIgbGliICJsaW5rIC1saWIiCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgoraWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgQVI9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIEFSPSRhY19jdF9BUgorICBmaQorZmkKKworOiAke0FSPWFyfQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBhcmNoaXZlciAoJEFSKSBpbnRlcmZhY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIGFyY2hpdmVyICgkQVIpIGludGVyZmFjZS4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9hcl9pbnRlcmZhY2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgIGFtX2N2X2FyX2ludGVyZmFjZT1hcgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IHNvbWVfdmFyaWFibGUgPSAwOworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFtX2FyX3RyeT0nJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiY1JworICAgICAgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFtX2FyX3RyeVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFtX2FyX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKyAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisgICAgICAgIGFtX2N2X2FyX2ludGVyZmFjZT1hcgorICAgICAgZWxzZQorICAgICAgICBhbV9hcl90cnk9JyRBUiAtTk9MT0dPIC1PVVQ6Y29uZnRlc3QubGliIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiY1JworICAgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYW1fYXJfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkYW1fYXJfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorICAgICAgICBpZiB0ZXN0ICIkYWNfc3RhdHVzIiAtZXEgMDsgdGhlbgorICAgICAgICAgIGFtX2N2X2FyX2ludGVyZmFjZT1saWIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGFtX2N2X2FyX2ludGVyZmFjZT11bmtub3duCisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QubGliIGxpYmNvbmZ0ZXN0LmEKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9hcl9pbnRlcmZhY2UiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9hcl9pbnRlcmZhY2UiID4mNjsgfQorCitjYXNlICRhbV9jdl9hcl9pbnRlcmZhY2UgaW4KK2FyKQorICA7OworbGliKQorICAjIE1pY3Jvc29mdCBsaWIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIGFyLWxpYiB3cmFwcGVyIHNjcmlwdC4KKyAgIyBGSVhNRTogSXQgaXMgd3JvbmcgdG8gcmV3cml0ZSBBUi4KKyAgIyBCdXQgaWYgd2UgZG9uJ3QgdGhlbiB3ZSBnZXQgaW50byB0cm91YmxlIG9mIG9uZSBzb3J0IG9yIGFub3RoZXIuCisgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0FSIGluIHRoaXMgY2FzZSwKKyAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0FSPSIkYW1fYXV4X2Rpci9hci1saWIgXCQoQVIpIiBvciBzb21ldGhpbmcKKyAgIyBzaW1pbGFyLgorICBBUj0iJGFtX2F1eF9kaXIvYXItbGliICRBUiIKKyAgOzsKK3Vua25vd24pCisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgZGV0ZXJtaW5lICRBUiBpbnRlcmZhY2UiICIkTElORU5PIiA1CisgIDs7Citlc2FjCisKKworIyBUaGlzIHdhcyBhZGRlZCBhdCB0aGUgc3VnZ2VzdGlvbiBvZiBsaWJ0b29saXplICgwMy1KYW4tMTApCisKKworIyBUaGUgZGVmYXVsdCBDRkxBR1MgaW4gQXV0b2NvbmYgYXJlICItZyAtTzIiIGZvciBnY2MgYW5kIGp1c3QgIi1nIiBmb3IgYW55CisjIG90aGVyIGNvbXBpbGVyLiBUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGFuZGFyZCB3YXkgb2YgZ2V0dGluZyByaWQgb2YgdGhlCisjIC1nICh3aGljaCBJIGRvbid0IHRoaW5rIGlzIG5lZWRlZCBmb3IgYSBwcm9kdWN0aW9uIGxpYnJhcnkpLiBUaGlzIGZ1ZGdlIHNlZW1zCisjIHRvIGFjaGlldmUgdGhlIG5lY2Vzc2FyeS4gRmlyc3QsIHdlIHJlbWVtYmVyIHRoZSBleHRlcm5hbGx5IHNldCB2YWx1ZXMgb2YKKyMgQ0ZMQUdTLiBUaGVuIGNhbGwgdGhlIEFDX1BST0dfQ0MgbWFjcm8gdG8gZmluZCB0aGUgY29tcGlsZXIgLSBpZiBDRkxBR1MgaXMKKyMgbm90IHNldCwgaXQgd2lsbCBiZSBzZXQgdG8gQXV0b2NvbmYncyBkZWZhdWx0cy4gQWZ0ZXJ3YXJkcywgaWYgdGhlIG9yaWdpbmFsCisjIHZhbHVlcyB3ZXJlIG5vdCBzZXQsIHJlbW92ZSB0aGUgLWcgZnJvbSB0aGUgQXV0b2NvbmYgZGVmYXVsdHMuCisKK3JlbWVtYmVyX3NldF9DRkxBR1M9IiRDRkxBR1MiCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1nY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQ0M9JGFjX2N2X3Byb2dfQ0MKK2lmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CiskYXNfZWNobyAiJENDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4KKyAgYWNfY3RfQ0M9JENDCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQorZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIke2FjX3Rvb2xfcHJlZml4fWNjIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIGZpCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCisgIGFjX3Byb2dfcmVqZWN0ZWQ9bm8KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgorICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCisgICAgICAgY29udGludWUKKyAgICAgZmkKKyAgICBhY19jdl9wcm9nX0NDPSJjYyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgZm9yIGFjX3Byb2cgaW4gY2wuZXhlCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKK2ZpCisKK2ZpCisKKwordGVzdCAteiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIgZm91bmQgaW4gXCRQQVRICitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCiskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIHNlZCAnMTBhXAorLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLgorICAgICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KK2RvbmUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jb21waWxlcl9nbnU9eWVzCitlbHNlCisgIGFjX2NvbXBpbGVyX2dudT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbgorICBHQ0M9eWVzCitlbHNlCisgIEdDQz0KK2ZpCithY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9CithY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcKKyAgIGFjX2Nfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2NjX2c9bm8KKyAgIENGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZWxzZQorICBDRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY193ZXJyb3JfZmxhZworCSBDRkxBR1M9Ii1nIgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jY19nPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19jY19jODk9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KK3N0cnVjdCBzdGF0OworLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLworc3RydWN0IGJ1ZiB7IGludCB4OyB9OworRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsKK3N0YXRpYyBjaGFyICplIChwLCBpKQorICAgICBjaGFyICoqcDsKKyAgICAgaW50IGk7Cit7CisgIHJldHVybiBwW2ldOworfQorc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQoreworICBjaGFyICpzOworICB2YV9saXN0IHY7CisgIHZhX3N0YXJ0ICh2LHApOworICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOworICB2YV9lbmQgKHYpOworICByZXR1cm4gczsKK30KKworLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMKKyAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4KKyAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovCitpbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOworCisvKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMKKyAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8KKyNkZWZpbmUgRk9PKHgpICd4JworaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07CisKK2ludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOworc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307CitzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsKK2ludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOworaW50IGFyZ2M7CitjaGFyICoqYXJndjsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcCisJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrCitkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0CitDQz0kYWNfc2F2ZV9DQworCitmaQorIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKKyAgKikKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OworZXNhYworaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoKKworZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRDQyB1bmRlcnN0YW5kcyAtYyBhbmQgLW8gdG9nZXRoZXIuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfcHJvZ19jY19jX28rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKyAgIyBNYWtlIHN1cmUgaXQgd29ya3MgYm90aCB3aXRoICRDQyBhbmQgd2l0aCBzaW1wbGUgY2MuCisgICMgRm9sbG93aW5nIEFDX1BST0dfQ0NfQ19PLCB3ZSBkbyB0aGUgdGVzdCB0d2ljZSBiZWNhdXNlIHNvbWUKKyAgIyBjb21waWxlcnMgcmVmdXNlIHRvIG92ZXJ3cml0ZSBhbiBleGlzdGluZyAubyBmaWxlIHdpdGggLW8sCisgICMgdGhvdWdoIHRoZXkgd2lsbCBjcmVhdGUgb25lLgorICBhbV9jdl9wcm9nX2NjX2Nfbz15ZXMKKyAgZm9yIGFtX2kgaW4gMSAyOyBkbworICAgIGlmIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0IiA+JjUKKyAgICgkQ0MgLWMgY29uZnRlc3QuJGFjX2V4dCAtbyBjb25mdGVzdDIuJGFjX29iamV4dCkgPiY1IDI+JjUKKyAgIGFjX3N0YXR1cz0kPworICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gXAorICAgICAgICAgJiYgdGVzdCAtZiBjb25mdGVzdDIuJGFjX29iamV4dDsgdGhlbgorICAgICAgOiBPSworICAgIGVsc2UKKyAgICAgIGFtX2N2X3Byb2dfY2NfY19vPW5vCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgcm0gLWYgY29yZSBjb25mdGVzdCoKKyAgdW5zZXQgYW1faQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfcHJvZ19jY19jX28iID4mNQorJGFzX2VjaG8gIiRhbV9jdl9wcm9nX2NjX2NfbyIgPiY2OyB9CitpZiB0ZXN0ICIkYW1fY3ZfcHJvZ19jY19jX28iICE9IHllczsgdGhlbgorICAgIyBMb3NpbmcgY29tcGlsZXIsIHNvIG92ZXJyaWRlIHdpdGggdGhlIHNjcmlwdC4KKyAgICMgRklYTUU6IEl0IGlzIHdyb25nIHRvIHJld3JpdGUgQ0MuCisgICAjIEJ1dCBpZiB3ZSBkb24ndCB0aGVuIHdlIGdldCBpbnRvIHRyb3VibGUgb2Ygb25lIHNvcnQgb3IgYW5vdGhlci4KKyAgICMgQSBsb25nZXItdGVybSBmaXggd291bGQgYmUgdG8gaGF2ZSBhdXRvbWFrZSB1c2UgYW1fX0NDIGluIHRoaXMgY2FzZSwKKyAgICMgYW5kIHRoZW4gd2UgY291bGQgc2V0IGFtX19DQz0iXCQodG9wX3NyY2RpcikvY29tcGlsZSBcJChDQykiCisgICBDQz0iJGFtX2F1eF9kaXIvY29tcGlsZSAkQ0MiCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKK2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYy4uLiAiID4mNjsgfQoraWYgJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRBTURFUF9UUlVFIiAmJiB0ZXN0IC1mICIkYW1fZGVwY29tcCI7IHRoZW4KKyAgIyBXZSBtYWtlIGEgc3ViZGlyIGFuZCBkbyB0aGUgdGVzdHMgdGhlcmUuICBPdGhlcndpc2Ugd2UgY2FuIGVuZCB1cAorICAjIG1ha2luZyBib2d1cyBmaWxlcyB0aGF0IHdlIGRvbid0IGtub3cgYWJvdXQgYW5kIG5ldmVyIHJlbW92ZS4gIEZvcgorICAjIGluc3RhbmNlIGl0IHdhcyByZXBvcnRlZCB0aGF0IG9uIEhQLVVYIHRoZSBnY2MgdGVzdCB3aWxsIGVuZCB1cAorICAjIG1ha2luZyBhIGR1bW15IGZpbGUgbmFtZWQgJ0QnIC0tIGJlY2F1c2UgJy1NRCcgbWVhbnMgInB1dCB0aGUgb3V0cHV0CisgICMgaW4gRCIuCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKKyAgbWtkaXIgY29uZnRlc3QuZGlyCisgICMgQ29weSBkZXBjb21wIHRvIHN1YmRpciBiZWNhdXNlIG90aGVyd2lzZSB3ZSB3b24ndCBmaW5kIGl0IGlmIHdlJ3JlCisgICMgdXNpbmcgYSByZWxhdGl2ZSBkaXJlY3RvcnkuCisgIGNwICIkYW1fZGVwY29tcCIgY29uZnRlc3QuZGlyCisgIGNkIGNvbmZ0ZXN0LmRpcgorICAjIFdlIHdpbGwgYnVpbGQgb2JqZWN0cyBhbmQgZGVwZW5kZW5jaWVzIGluIGEgc3ViZGlyZWN0b3J5IGJlY2F1c2UKKyAgIyBpdCBoZWxwcyB0byBkZXRlY3QgaW5hcHBsaWNhYmxlIGRlcGVuZGVuY3kgbW9kZXMuICBGb3IgaW5zdGFuY2UKKyAgIyBib3RoIFRydTY0J3MgY2MgYW5kIElDQyBzdXBwb3J0IC1NRCB0byBvdXRwdXQgZGVwZW5kZW5jaWVzIGFzIGEKKyAgIyBzaWRlIGVmZmVjdCBvZiBjb21waWxhdGlvbiwgYnV0IElDQyB3aWxsIHB1dCB0aGUgZGVwZW5kZW5jaWVzIGluCisgICMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoaWxlIFRydTY0IHdpbGwgcHV0IHRoZW0gaW4gdGhlIG9iamVjdAorICAjIGRpcmVjdG9yeS4KKyAgbWtkaXIgc3ViCisKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgorICAgICAgZWNobyAnLyogZHVtbXkgKi8nID4gc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgJy1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgorICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPSRkZXBtb2RlCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgIGZpCisgIGRvbmUKKworICBjZCAuLgorICBybSAtcmYgY29uZnRlc3QuZGlyCitlbHNlCisgIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNjsgfQorQ0NERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorICBhbV9fZmFzdGRlcENDX1RSVUU9CisgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0nIycKKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0KK2ZpCisKKworCisKK2lmIHRlc3QgIngkcmVtZW1iZXJfc2V0X0NGTEFHUyIgPSAieCIKK3RoZW4KKyAgaWYgdGVzdCAiJENGTEFHUyIgPSAiLWcgLU8yIgorICB0aGVuCisgICAgQ0ZMQUdTPSItTzIiCisgIGVsaWYgdGVzdCAiJENGTEFHUyIgPSAiLWciCisgIHRoZW4KKyAgICBDRkxBR1M9IiIKKyAgZmkKK2ZpCisKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IGludGVnZXIgdHlwZQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQorIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KK2lmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCisgIENQUD0KK2ZpCitpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgorICBpZiAke2FjX2N2X3Byb2dfQ1BQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9jcHAiCisgICAgZG8KKyAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCisKK2ZpCisgIENQUD0kYWNfY3ZfcHJvZ19DUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9JENQUAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ1BQIiA+JjUKKyRhc19lY2hvICIkQ1BQIiA+JjY7IH0KK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcworZG8KKyAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYworICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KKyAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgorICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAorICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCitlbHNlCisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9HUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEdSRVAiOyB0aGVuCisgIGFjX3BhdGhfR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGdyZXAgZ2dyZXA7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBhY19wYXRoX0dSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0dSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9HUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9HUkVQCitjYXNlIGAiJGFjX3BhdGhfR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIiBhY19wYXRoX0dSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0dSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfR1JFUCIgLWUgJ0dSRVAkJyAtZSAnLShjYW5ub3QgbWF0Y2gpLScgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0dSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIKKyAgICAgIGFjX3BhdGhfR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0dSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0dSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfR1JFUD0kR1JFUAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9HUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9HUkVQIiA+JjY7IH0KKyBHUkVQPSIkYWNfY3ZfcGF0aF9HUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBlZ3JlcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0VHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyBhIHwgJEdSRVAgLUUgJyhhfGIpJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9FR1JFUD0iJEdSRVAgLUUiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRFR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9FR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGVncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9FR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFjX3BhdGhfRUdSRVAiIHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVAKK2Nhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiIGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0VHUkVQIiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRUdSRVBfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQIgorICAgICAgYWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQCitmaQorCisgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQorIEVHUkVQPSIkYWNfY3ZfcGF0aF9FR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2FjX2ZuX2NfZmluZF9pbnRYX3QgIiRMSU5FTk8iICI2NCIgImFjX2N2X2NfaW50NjRfdCIKK2Nhc2UgJGFjX2N2X2NfaW50NjRfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgaW50NjRfdCAkYWNfY3ZfY19pbnQ2NF90CitfQUNFT0YKKzs7Citlc2FjCisKKworCisjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCiskU0hFTEwgIiRhY19hdXhfZGlyL2NvbmZpZy5zdWIiIHN1bjQgPi9kZXYvbnVsbCAyPiYxIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgcnVuICRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAiJExJTkVOTyIgNQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2J1aWxkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiAiJExJTkVOTyIgNQorYWNfY3ZfYnVpbGQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGFjX2J1aWxkX2FsaWFzYCB8fAorICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9idWlsZCIgPiY2OyB9CitjYXNlICRhY19jdl9idWlsZCBpbgorKi0qLSopIDs7CisqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgYnVpbGQiICIkTElORU5PIiA1OzsKK2VzYWMKK2J1aWxkPSRhY19jdl9idWlsZAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X2J1aWxkCitzaGlmdAorYnVpbGRfY3B1PSQxCitidWlsZF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6CitidWlsZF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkYnVpbGRfb3MgaW4gKlwgKikgYnVpbGRfb3M9YGVjaG8gIiRidWlsZF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9ob3N0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAieCRob3N0X2FsaWFzIiA9IHg7IHRoZW4KKyAgYWNfY3ZfaG9zdD0kYWNfY3ZfYnVpbGQKK2Vsc2UKKyAgYWNfY3ZfaG9zdD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkaG9zdF9hbGlhc2AgfHwKKyAgICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGhvc3RfYWxpYXMgZmFpbGVkIiAiJExJTkVOTyIgNQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hvc3QiID4mNjsgfQorY2FzZSAkYWNfY3ZfaG9zdCBpbgorKi0qLSopIDs7CisqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB2YWx1ZSBvZiBjYW5vbmljYWwgaG9zdCIgIiRMSU5FTk8iIDU7OworZXNhYworaG9zdD0kYWNfY3ZfaG9zdAorYWNfc2F2ZV9JRlM9JElGUzsgSUZTPSctJworc2V0IHggJGFjX2N2X2hvc3QKK3NoaWZ0Citob3N0X2NwdT0kMQoraG9zdF92ZW5kb3I9JDIKK3NoaWZ0OyBzaGlmdAorIyBSZW1lbWJlciwgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBJRlMgaXMgdXNlZCB0byBjcmVhdGUgJCosCisjIGV4Y2VwdCB3aXRoIG9sZCBzaGVsbHM6Citob3N0X29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICRob3N0X29zIGluICpcICopIGhvc3Rfb3M9YGVjaG8gIiRob3N0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworCisKK2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUz0iJEFTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVM9IiR7YWNfdG9vbF9wcmVmaXh9YXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVM9JGFjX2N2X3Byb2dfQVMKK2lmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUyIgPiY1CiskYXNfZWNobyAiJEFTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KKyAgYWNfY3RfQVM9JEFTCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9BUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iJGFjX2N0X0FTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImFzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FTPSRhY19jdl9wcm9nX2FjX2N0X0FTCitpZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FTIiA9IHg7IHRoZW4KKyAgICBBUz0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVM9JGFjX2N0X0FTCisgIGZpCitlbHNlCisgIEFTPSIkYWNfY3ZfcHJvZ19BUyIKK2ZpCisKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCitpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorICAgIERMTFRPT0w9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKyAgZmkKK2Vsc2UKKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKK2ZpCisKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCitpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCitpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgorICAgIE9CSkRVTVA9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKKyAgZmkKK2Vsc2UKKyAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKK2ZpCisKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworCisKKworCisKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKworCisKKworCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKworCisKK2Nhc2UgYHB3ZGAgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiYyO30gOzsKK2VzYWMKKworCisKK21hY3JvX3ZlcnNpb249JzIuNC42JworbWFjcm9fcmV2aXNpb249JzIuNC42JworCisKKworCisKKworCisKKworCisKKworCitsdG1haW49JGFjX2F1eF9kaXIvbHRtYWluLnNoCisKKyMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KKyMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCitkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2luZ2xlIHF1b3RlLgorZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0PSdzLydcJycvJ1wnXFxcXFxcXCdcJycvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCitub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKKworRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnQgc3RyaW5ncy4uLiAiID4mNjsgfQorIyBUZXN0IHByaW50IGZpcnN0LCBiZWNhdXNlIGl0IHdpbGwgYmUgYSBidWlsdGluIGlmIHByZXNlbnQuCitpZiB0ZXN0ICJYYCggcHJpbnQgLXIgLS0gLW4gKSAyPi9kZXYvbnVsbGAiID0gWC1uICYmIFwKKyAgIHRlc3QgIlhgcHJpbnQgLXIgLS0gJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50IC1yIC0tJworZWxpZiB0ZXN0ICJYYHByaW50ZiAlcyAkRUNITyAyPi9kZXYvbnVsbGAiID0gIlgkRUNITyI7IHRoZW4KKyAgRUNITz0ncHJpbnRmICVzXG4nCitlbHNlCisgICMgVXNlIHRoaXMgZnVuY3Rpb24gYXMgYSBmYWxsYmFjayB0aGF0IGFsd2F5cyB3b3Jrcy4KKyAgZnVuY19mYWxsYmFja19lY2hvICgpCisgIHsKKyAgICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJDEKK19MVEVDSE9fRU9GJworICB9CisgIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKK2ZpCisKKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKyMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KK2Z1bmNfZWNob19hbGwgKCkKK3sKKyAgICAkRUNITyAiIgorfQorCitjYXNlICRFQ0hPIGluCisgIHByaW50ZiopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludGYiID4mNQorJGFzX2VjaG8gInByaW50ZiIgPiY2OyB9IDs7CisgIHByaW50KikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50IC1yIiA+JjUKKyRhc19lY2hvICJwcmludCAtciIgPiY2OyB9IDs7CisgICopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBjYXQiID4mNQorJGFzX2VjaG8gImNhdCIgPiY2OyB9IDs7Citlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfU0VEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICAgICAgIGFjX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KKyAgICAgZm9yIGFjX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KKyAgICAgICBhY19zY3JpcHQ9IiRhY19zY3JpcHQkYXNfbmwkYWNfc2NyaXB0IgorICAgICBkb25lCisgICAgIGVjaG8gIiRhY19zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCisgICAgIHsgYWNfc2NyaXB0PTsgdW5zZXQgYWNfc2NyaXB0O30KKyAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgYWNfcGF0aF9TRURfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX1NFRCIgfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX1NFRCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfU0VECitjYXNlIGAiJGFjX3BhdGhfU0VEIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIiBhY19wYXRoX1NFRF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX1NFRCIgLWYgY29uZnRlc3Quc2VkIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9TRURfbWF4LTB9OyB0aGVuCisgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiCisgICAgICBhY19wYXRoX1NFRF9tYXg9JGFjX2NvdW50CisgICAgZmkKKyAgICAjIDEwKigyXjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCisgICAgdGVzdCAkYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCisgIGRvbmUKKyAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7Citlc2FjCisKKyAgICAgICRhY19wYXRoX1NFRF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0VEIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1CisgIGZpCitlbHNlCisgIGFjX2N2X3BhdGhfU0VEPSRTRUQKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfU0VEIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9TRUQiID4mNjsgfQorIFNFRD0iJGFjX2N2X3BhdGhfU0VEIgorICBybSAtZiBjb25mdGVzdC5zZWQKKwordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorCisKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZncmVwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmZ3JlcC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0ZHUkVQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgZWNobyAnYWIqYycgfCAkR1JFUCAtRiAnYWIqYycgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRkdSRVA9IiRHUkVQIC1GIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRkdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRkdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBmZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRkdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX0ZHUkVQIiB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRkdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0ZHUkVQCitjYXNlIGAiJGFjX3BhdGhfRkdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIiBhY19wYXRoX0ZHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdGR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9GR1JFUCIgRkdSRVAgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0ZHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIKKyAgICAgIGFjX3BhdGhfRkdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9GR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRkdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZmdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0ZHUkVQPSRGR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRkdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0ZHUkVQIiA+JjY7IH0KKyBGR1JFUD0iJGFjX2N2X3BhdGhfRkdSRVAiCisKKwordGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3Qgbm8gPSAiJHdpdGh2YWwiIHx8IHdpdGhfZ251X2xkPXllcworZWxzZQorICB3aXRoX2dudV9sZD1ubworZmkKKworYWNfcHJvZz1sZAoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAiID4mNjsgfQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuLCB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCA/OltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSRhY19wcm9nCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CitmaQoraWYgJHtsdF9jdl9wYXRoX0xEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSRsdF9zYXZlX2lmcworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSRhY19kaXIvJGFjX3Byb2cKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCBubyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgeWVzICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0kbHRfc2F2ZV9pZnMKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0kTEQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaQorZmkKKworTEQ9JGx0X2N2X3BhdGhfTEQKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfZ251X2xkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSkiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfTk0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSROTQorZWxzZQorICBsdF9ubV90b19jaGVjaz0ke2FjX3Rvb2xfcHJlZml4fW5tCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgorICBmaQorICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KKyAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICAgIHRtcF9ubT0kYWNfZGlyLyRsdF90bXBfbm0KKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IjsgdGhlbgorCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBubSBhY2NlcHRzIGEgQlNELWNvbXBhdCBmbGFnLgorCSMgQWRkaW5nIHRoZSAnc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CisJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAorCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQorCSMgTVNZUyBjb252ZXJ0cyAvZGV2L251bGwgdG8gTlVMLCBNaW5HVyBubSB0cmVhdHMgTlVMIGFzIGVtcHR5CisJY2FzZSAkYnVpbGRfb3MgaW4KKwltaW5ndyopIGx0X2JhZF9maWxlPWNvbmZ0ZXN0Lm5tL25vZmlsZSA7OworCSopIGx0X2JhZF9maWxlPS9kZXYvbnVsbCA7OworCWVzYWMKKwljYXNlIGAiJHRtcF9ubSIgLUIgJGx0X2JhZF9maWxlIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkqJGx0X2JhZF9maWxlKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCisJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgorCSAgYnJlYWsgMgorCSAgOzsKKwkqKQorCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJICAqL2Rldi9udWxsKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKKwkgICAgYnJlYWsgMgorCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSRsdF9zYXZlX2lmcworICBkb25lCisgIDogJHtsdF9jdl9wYXRoX05NPW5vfQorZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfTk0iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wYXRoX05NIiA+JjY7IH0KK2lmIHRlc3Qgbm8gIT0gIiRsdF9jdl9wYXRoX05NIjsgdGhlbgorICBOTT0kbHRfY3ZfcGF0aF9OTQorZWxzZQorICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KKyAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKKyAgICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgZWxzZQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZHVtcGJpbiAibGluayAtZHVtcCIKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRFVNUEJJTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX0RVTVBCSU49IiREVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFVNUEJJTj0kYWNfY3ZfcHJvZ19EVU1QQklOCitpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREVU1QQklOIiA+JjUKKyRhc19lY2hvICIkRFVNUEJJTiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJERVTVBCSU4iICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3RfRFVNUEJJTj0kRFVNUEJJTgorICBmb3IgYWNfcHJvZyBpbiBkdW1wYmluICJsaW5rIC1kdW1wIgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RVTVBCSU4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfY3RfRFVNUEJJTiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RVTVBCSU49IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RVTVBCSU49JGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTgoraWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFVNUEJJTiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RVTVBCSU4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RVTVBCSU4iID0geDsgdGhlbgorICAgIERVTVBCSU49IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFVNUEJJTj0kYWNfY3RfRFVNUEJJTgorICBmaQorZmkKKworICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC1oZWFkZXJzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisgICAgKkNPRkYqKQorICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMiCisgICAgICA7OworICAgICopCisgICAgICBEVU1QQklOPToKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgIGlmIHRlc3QgOiAhPSAiJERVTVBCSU4iOyB0aGVuCisgICAgTk09JERVTVBCSU4KKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9ubV9pbnRlcmZhY2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkYWNfY29tcGlsZVwiIiA+JjUpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mNSkKKyAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiY1KQorICBjYXQgY29uZnRlc3Qub3V0ID4mNQorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNjsgfQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAiID4mNjsgfQorTE5fUz0kYXNfbG5fcworaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKyRhc19lY2hvICJubywgdXNpbmcgJExOX1MiID4mNjsgfQorZmkKKworIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3N5c19tYXhfY21kX2xlbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICAgaT0wCisgIHRlc3RzdHJpbmc9QUJDRAorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBtaW50KikKKyAgICAjIE9uIE1pTlQgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGJpdHJpZyogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KiB8IGZyZWVic2QqIHwgbmV0YnNkKiB8IG9wZW5ic2QqKQorICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworICAgIGZpCisgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgOzsKKworICBpbnRlcml4KikKKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisgICAgOzsKKworICBvczIqKQorICAgICMgVGhlIHRlc3QgdGFrZXMgYSBsb25nIHRpbWUgb24gT1MvMi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MgorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qWwkgXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgJiYgXAorICAgICAgIHRlc3QgdW5kZWZpbmVkICE9ICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gNGAKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgZWxzZQorICAgICAgIyBNYWtlIHRlc3RzdHJpbmcgYSBsaXR0bGUgYmlnZ2VyIGJlZm9yZSB3ZSBkbyBhbnl0aGluZyB3aXRoIGl0LgorICAgICAgIyBhIDFLIHN0cmluZyBzaG91bGQgYmUgYSByZWFzb25hYmxlIHN0YXJ0LgorICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4OyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCBYYGVudiBlY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgICB0ZXN0IDE3ICE9ICIkaSIgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAorICAgICAgZG8KKyAgICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgIyBPbmx5IGNoZWNrIHRoZSBzdHJpbmcgbGVuZ3RoIG91dHNpZGUgdGhlIGxvb3AuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgCisgICAgICB0ZXN0c3RyaW5nPQorICAgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbgorICAgICAgIyBtYXNzaXZlIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUKKyAgICAgICMgbGlua2VyLiAgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXC8gMmAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKworZmkKKworaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm9uZSIgPiY1CiskYXNfZWNobyAibm9uZSIgPiY2OyB9CitmaQorbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorCisKKworCisKKworOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorCitpZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHRfdW5zZXQ9dW5zZXQKK2Vsc2UKKyAgbHRfdW5zZXQ9ZmFsc2UKK2ZpCisKKworCisKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl90b19ob3N0X2ZpbGVfY21kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqLSotY3lnd2luKiApCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorICAgICAgICA7OworICAgICAgKiApICMgb3RoZXJ3aXNlLCBhc3N1bWUgKm5peAorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKi0qLWN5Z3dpbiogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4KKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqICkgIyB1bmhhbmRsZWQgaG9zdHMgKGFuZCAibm9ybWFsIiBuYXRpdmUgYnVpbGRzKQorICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorICAgIDs7Citlc2FjCisKK2ZpCisKK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiID4mNjsgfQorCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gdG9vbGNoYWluIGZvcm1hdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAjYXNzdW1lIG9yZGluYXJ5IGNyb3NzIHRvb2xzLCBvciBuYXRpdmUgYnVpbGQuCitsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKK2Nhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworZXNhYworCitmaQorCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl90b190b29sX2ZpbGVfY21kIiA+JjY7IH0KKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9sZF9yZWxvYWRfZmxhZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNjsgfQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCitjYXNlICRyZWxvYWRfZmxhZyBpbgorIiIgfCAiICIqKSA7OworKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Citlc2FjCityZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisgICAgZmkKKyAgICA7OworICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAkd2wtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGVsc2UKKyAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBmaQorICAgIDs7Citlc2FjCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1vYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIkT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitPQkpEVU1QPSRhY19jdl9wcm9nX09CSkRVTVAKK2lmIHRlc3QgLW4gIiRPQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE9CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRPQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PQkpEVU1QIjsgdGhlbgorICBhY19jdF9PQkpEVU1QPSRPQkpEVU1QCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgb2JqZHVtcDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9IiRhY19jdF9PQkpEVU1QIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0ib2JqZHVtcCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKK2lmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X09CSkRVTVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PQkpEVU1QIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfT0JKRFVNUCIgPSB4OyB0aGVuCisgICAgT0JKRFVNUD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAorICBmaQorZWxzZQorICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgorZmkKKwordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgJ3Vua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB0aGF0IHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSAnZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgJ3Bhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorCitjYXNlICRob3N0X29zIGluCithaXhbNC05XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpWzQ1XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKyAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KKyAgaWYgKCBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICBlbHNlCisgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKikKKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pWzMtOV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworaGFpa3UqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqIHwgaHB1eDExKikKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRlsgLV1bMC05XVswLTldKSgtYml0KT8oIFtMTV1TQik/IHNoYXJlZCBvYmplY3QoIGZpbGUpP1ssIC1dKiBQQS1SSVNDIFswLTldXC5bMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfFBBLVJJU0NbMC05XVwuWzAtOV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbMy05XSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298XC5hKSQnCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJExEIGluCisgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CisgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICBlc2FjCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK25ld29zNiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KKyAgOzsKKworKm50byogfCAqcW54KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworb3BlbmJzZCogfCBiaXRyaWcqKQorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8XC5zb3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb1wuWzAtOV0rXC5bMC05XSt8X3BpY1wuYSkkJworICBmaQorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3Jkb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzb2xhcmlzKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgIG1vdG9yb2xhKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNWzAtOV1bMC05XSogVmVyc2lvbiBbMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKyAgICA7OworICBuY3IpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBzZXF1ZW50KQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKKyAgICA7OworICBzbmkpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiBkeW5hbWljIGxpYiIKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgICA7OworICBzaWVtZW5zKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgcGMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBlc2FjCisgIDs7CisKK3RwZiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CitvczIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworZXNhYworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjY7IH0KKworZmlsZV9tYWdpY19nbG9iPQord2FudF9ub2Nhc2VnbG9iPW5vCitpZiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG1pbmd3KiB8IHB3MzIqKQorICAgIGlmICggc2hvcHQgfCBncmVwIG5vY2FzZWdsb2IgKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHdhbnRfbm9jYXNlZ2xvYj15ZXMKKyAgICBlbHNlCisgICAgICBmaWxlX21hZ2ljX2dsb2I9YGVjaG8gYUFiQmNDZERlRWZGZ0doSGlJakprS2xMbU1uTm9PcFBxUXJSc1N0VHVVdlZ3V3hYeVl6WiB8ICRTRUQgLWUgInMvXCguLlwpL3NcL1tcMV1cL1tcMV1cL2c7L2ciYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworZmkKKworZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKK3Rlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19ETExUT09MPSIkRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitETExUT09MPSRhY19jdl9wcm9nX0RMTFRPT0wKK2lmIHRlc3QgLW4gIiRETExUT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJERMTFRPT0wiID4mNQorJGFzX2VjaG8gIiRETExUT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19ETExUT09MIjsgdGhlbgorICBhY19jdF9ETExUT09MPSRETExUT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgZGxsdG9vbDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfRExMVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9IiRhY19jdF9ETExUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iZGxsdG9vbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKK2lmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0RMTFRPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9ETExUT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfRExMVE9PTCIgPSB4OyB0aGVuCisgICAgRExMVE9PTD0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAorICBmaQorZWxzZQorICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgorZmkKKwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSd1bmtub3duJworCitjYXNlICRob3N0X29zIGluCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2g7CisgICMgZGVjaWRlIHdoaWNoIG9uZSB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorICAqLS1pZGVudGlmeS1zdHJpY3QqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorICAgIDs7CisgICopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisgICAgOzsKKyAgZXNhYworICA7OworKikKKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisgIDs7Citlc2FjCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiID4mNjsgfQorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCit0ZXN0IC16ICIkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQiICYmIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gYXIKKyAgZG8KKyAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfQVI9IiRBUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0FSPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitBUj0kYWNfY3ZfcHJvZ19BUgoraWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEFSIiA+JjUKKyRhc19lY2hvICIkQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICAgIHRlc3QgLW4gIiRBUiIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRBUiI7IHRoZW4KKyAgYWNfY3RfQVI9JEFSCisgIGZvciBhY19wcm9nIGluIGFyCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgoraWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0FSIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQVIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfQVIiICYmIGJyZWFrCitkb25lCisKKyAgaWYgdGVzdCAieCRhY19jdF9BUiIgPSB4OyB0aGVuCisgICAgQVI9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIEFSPSRhY19jdF9BUgorICBmaQorZmkKKworOiAke0FSPWFyfQorOiAke0FSX0ZMQUdTPWNydX0KKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FyX2F0X2ZpbGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9hcl9hdF9maWxlPW5vCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CisgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mNScKKyAgICAgIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisgICAgICBpZiB0ZXN0IDAgLWVxICIkYWNfc3RhdHVzIjsgdGhlbgorCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCisJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCisJeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGx0X2FyX3RyeVwiIjsgfSA+JjUKKyAgKGV2YWwgJGx0X2FyX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0KKwlpZiB0ZXN0IDAgLW5lICIkYWNfc3RhdHVzIjsgdGhlbgorICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiogbGliY29uZnRlc3QuYQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KKworaWYgdGVzdCBubyA9ICIkbHRfY3ZfYXJfYXRfZmlsZSI7IHRoZW4KKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorZWxzZQorICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKK2ZpCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1CiskYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKwordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgoraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRSQU5MSUIiID4mNQorJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKyAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCitpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1JBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCisgICAgUkFOTElCPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCisgIGZpCitlbHNlCisgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorZmkKKwordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKKworCisKKworCisKKyMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIGJpdHJpZyogfCBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJHRvb2xfb2xkbGliIgorZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj15ZXMgOzsKKyAgKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKKworCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW0JDREVHUlNUXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW19BLVphLXpdW19BLVphLXowLTldKlwpJworCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW0JDRFRdJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbQUJDREdJU1RXXScKKyAgOzsKK2hwdXgqKQorICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgIHN5bWNvZGU9J1tBQkNERUdSU1RdJworICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbQkNERUdSU1RdJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW0JDREVHUVJTVF0nCisgIDs7Citzb2xhcmlzKikKKyAgc3ltY29kZT0nW0JEUlRdJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tEVF0nCisgIDs7CitzeXN2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICBzeW1jb2RlPSdbQUJEVF0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW0RGTlNUVV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OworZXNhYworCitpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAjIEdldHMgbGlzdCBvZiBkYXRhIHN5bWJvbHMgdG8gaW1wb3J0LgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9InNlZCAtbiAtZSAncy9eSSAuKiBcKC4qXCkkL1wxL3AnIgorICAjIEFkanVzdCB0aGUgYmVsb3cgZ2xvYmFsIHN5bWJvbCB0cmFuc2Zvcm1zIHRvIGZpeHVwIGltcG9ydGVkIHZhcmlhYmxlcy4KKyAgbHRfY2RlY2xfaG9vaz0iIC1lICdzL15JIC4qIFwoLipcKSQvZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KSBjaGFyIFwxOy9wJyIKKyAgbHRfY19uYW1lX2hvb2s9IiAtZSAncy9eSSAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIgorICBsdF9jX25hbWVfbGliX2hvb2s9IlwKKyAgLWUgJ3MvXkkgLiogXChsaWIuKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJ1wKKyAgLWUgJ3MvXkkgLiogXCguKlwpJC8gIHtcImxpYlwxXCIsICh2b2lkICopIDB9LC9wJyIKK2Vsc2UKKyAgIyBEaXNhYmxlIGhvb2tzIGJ5IGRlZmF1bHQuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0KKyAgbHRfY2RlY2xfaG9vaz0KKyAgbHRfY19uYW1lX2hvb2s9CisgIGx0X2NfbmFtZV9saWJfaG9vaz0KK2ZpCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24uCisjIFNvbWUgc3lzdGVtcyAoZXNwLiBvbiBpYTY0KSBsaW5rIGRhdGEgYW5kIGNvZGUgc3ltYm9scyBkaWZmZXJlbnRseSwKKyMgc28gdXNlIHRoaXMgZ2VuZXJhbCBhcHByb2FjaC4KK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4iXAorJGx0X2NkZWNsX2hvb2tcCisiIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIlwKKyRsdF9jX25hbWVfaG9va1wKKyIgLWUgJ3MvXjogXCguKlwpIC4qJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSB3aXRoIGxpYiBwcmVmaXggYW5kCisjIHN5bWJvbCBhZGRyZXNzLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIlwKKyRsdF9jX25hbWVfbGliX2hvb2tcCisiIC1lICdzL146IFwoLipcKSAuKiQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciXAorIiAtZSAncy9eJHN5bWNvZGUkc3ltY29kZSogLiogXChsaWIuKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIFwmXDF9LC9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wibGliXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIgorCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gJEVDSE8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcnNjb3JlLCB0aGVuIHdpdGggaXQuCitmb3IgYWNfc3ltcHJmeCBpbiAiIiAiXyI7IGRvCisKKyAgIyBUcmFuc2Zvcm0gc3ltY29kZSwgc3ltcGF0LCBhbmQgc3ltcHJmeCBpbnRvIGEgcmF3IHN5bWJvbCBhbmQgYSBDIHN5bWJvbC4KKyAgc3lteGZybT0iXFwxICRhY19zeW1wcmZ4XFwyIFxcMiIKKworICAjIFdyaXRlIHRoZSByYXcgYW5kIEMgaWRlbnRpZmllcnMuCisgIGlmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24sCisgICAgIyBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlIGFuZCBJIGZvciBhbnkgaW1wb3J0ZWQgdmFyaWFibGUuCisgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCisgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLICciXAorIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCisiICAgICAvXkNPRkYgU1lNQk9MIFRBQkxFL3tmb3IoaSBpbiBoaWRlKSBkZWxldGUgaGlkZVtpXX07IlwKKyIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAorIiAgICAgL14gKlN5bWJvbCBuYW1lICo6IC97c3BsaXQoXCQgMCxzbixcIjpcIik7IHNpPXN1YnN0cihzblsyXSwyKX07IlwKKyIgICAgIC9eICpUeXBlICo6IGNvZGUve3ByaW50IFwiVFwiLHNpLHN1YnN0cihzaSxsZW5ndGgocHJmeCkpfTsiXAorIiAgICAgL14gKlR5cGUgKjogZGF0YS97cHJpbnQgXCJJXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj1cIkRcIn07IFwkIDB+L1woXCkuKlx8L3tmPVwiVFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsYSwvXHx8XHIvKTsgc3BsaXQoYVsyXSxzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBmLHNbMV0sc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgZix0WzFdLHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKyIgICAgICcgcHJmeD1eJGFjX3N5bXByZngiCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qWwkgXVwoJHN5bWNvZGUkc3ltY29kZSpcKVsJIF1bCSBdKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgorICBmaQorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSB8IHNlZCAnLyBfX2dudV9sdG8vZCciCisKKyAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGUgcGlwZSB3b3JrcyBjb3JyZWN0bHkuCisgIHBpcGVfd29ya3M9bm8KKworICBybSAtZiBjb25mdGVzdCoKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKK2NoYXIgbm1fdGVzdF92YXI7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKTsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpe30KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCitpbnQgbWFpbigpe25tX3Rlc3RfdmFyPSdhJztubV90ZXN0X2Z1bmMoKTtyZXR1cm4oMCk7fQorX0xUX0VPRgorCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0XCIiOyB9ID4mNQorICAoZXZhbCAkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdCkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKyAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCisJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisgICAgICBlbHNlCisJcm0gLWYgIiRubGlzdCJUCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9XSU4zMl9XQ0UKKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY2FuJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKyNlbGlmIGRlZmluZWQgX19vc2ZfXworLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2Vsc2UKKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfTFRfRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorX0xUX0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworCSAgTElCUz1jb25mdHN0bS4kYWNfb2JqZXh0CisJICBDRkxBR1M9IiRDRkxBR1MkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciCisJICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisJICAgIHBpcGVfd29ya3M9eWVzCisJICBmaQorCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworCWVsc2UKKwkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorCWZpCisgICAgICBlbHNlCisJZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JjUKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiY1CisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKKworICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCisgIGlmIHRlc3QgeWVzID0gIiRwaXBlX3dvcmtzIjsgdGhlbgorICAgIGJyZWFrCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQorICBmaQorZG9uZQorCitmaQorCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CitmaQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBmYWlsZWQiID4mNQorJGFzX2VjaG8gImZhaWxlZCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBvayIgPiY1CiskYXNfZWNobyAib2siID4mNjsgfQorZmkKKworIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCitpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tAXUZJTEUnID4vZGV2L251bGw7IHRoZW4KKyAgbm1fZmlsZV9saXN0X3NwZWM9J0AnCitmaQorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzcm9vdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc3lzcm9vdDsKK2Vsc2UKKyAgd2l0aF9zeXNyb290PW5vCitmaQorCisKK2x0X3N5c3Jvb3Q9CitjYXNlICR3aXRoX3N5c3Jvb3QgaW4gIygKKyB5ZXMpCisgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAorICAgZmkKKyAgIDs7ICMoCisgLyopCisgICBsdF9zeXNyb290PWBlY2hvICIkd2l0aF9zeXNyb290IiB8IHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICA7OyAjKAorIG5vfCcnKQorICAgOzsgIygKKyAqKQorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRoX3N5c3Jvb3QiID4mNQorJGFzX2VjaG8gIiR3aXRoX3N5c3Jvb3QiID4mNjsgfQorICAgYXNfZm5fZXJyb3IgJD8gIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisgICA7OworZXNhYworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSB3b3JraW5nIGRkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHdvcmtpbmcgZGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9sdF9ERCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHByaW50ZiAwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiA+Y29uZnRlc3QuaQorY2F0IGNvbmZ0ZXN0LmkgY29uZnRlc3QuaSA+Y29uZnRlc3QyLmkKKzogJHtsdF9ERDo9JEREfQoraWYgdGVzdCAteiAiJGx0X0REIjsgdGhlbgorICBhY19wYXRoX2x0X0REX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBkZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfbHRfREQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBhc19mbl9leGVjdXRhYmxlX3AgIiRhY19wYXRoX2x0X0REIiB8fCBjb250aW51ZQoraWYgIiRhY19wYXRoX2x0X0REIiBicz0zMiBjb3VudD0xIDxjb25mdGVzdDIuaSA+Y29uZnRlc3Qub3V0IDI+L2Rldi9udWxsOyB0aGVuCisgIGNtcCAtcyBjb25mdGVzdC5pIGNvbmZ0ZXN0Lm91dCBcCisgICYmIGFjX2N2X3BhdGhfbHRfREQ9IiRhY19wYXRoX2x0X0REIiBhY19wYXRoX2x0X0REX2ZvdW5kPToKK2ZpCisgICAgICAkYWNfcGF0aF9sdF9ERF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfbHRfREQiOyB0aGVuCisgICAgOgorICBmaQorZWxzZQorICBhY19jdl9wYXRoX2x0X0REPSRsdF9ERAorZmkKKworcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdDIuaSBjb25mdGVzdC5vdXQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfbHRfREQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX2x0X0REIiA+JjY7IH0KKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byB0cnVuY2F0ZSBiaW5hcnkgcGlwZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHRydW5jYXRlIGJpbmFyeSBwaXBlcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl90cnVuY2F0ZV9iaW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBwcmludGYgMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYgPmNvbmZ0ZXN0LmkKK2NhdCBjb25mdGVzdC5pIGNvbmZ0ZXN0LmkgPmNvbmZ0ZXN0Mi5pCitsdF9jdl90cnVuY2F0ZV9iaW49CitpZiAiJGFjX2N2X3BhdGhfbHRfREQiIGJzPTMyIGNvdW50PTEgPGNvbmZ0ZXN0Mi5pID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGw7IHRoZW4KKyAgY21wIC1zIGNvbmZ0ZXN0LmkgY29uZnRlc3Qub3V0IFwKKyAgJiYgbHRfY3ZfdHJ1bmNhdGVfYmluPSIkYWNfY3ZfcGF0aF9sdF9ERCBicz00MDk2IGNvdW50PTEiCitmaQorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdDIuaSBjb25mdGVzdC5vdXQKK3Rlc3QgLXogIiRsdF9jdl90cnVuY2F0ZV9iaW4iICYmIGx0X2N2X3RydW5jYXRlX2Jpbj0iJFNFRCAtZSA0cSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3RydW5jYXRlX2JpbiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3RydW5jYXRlX2JpbiIgPiY2OyB9CisKKworCisKKworCisKKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorZnVuY19jY19iYXNlbmFtZSAoKQoreworICAgIGZvciBjY190ZW1wIGluICQqIiI7IGRvCisgICAgICBjYXNlICRjY190ZW1wIGluCisgICAgICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICAgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICAgICAgXC0qKSA7OworICAgICAgICAqKSBicmVhazs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorfQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2xpYnRvb2xfbG9jazsKK2ZpCisKK3Rlc3Qgbm8gPSAiJGVuYWJsZV9saWJ0b29sX2xvY2siIHx8IGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBtb2RlCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPTMyCisJOzsKKyAgICAgICpFTEYtNjQqKQorCUhQVVhfSUE2NF9NT0RFPTY0CisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgorICBlY2hvICcjbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK21pcHM2NCotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJyNsaW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBlbXVsPWVsZgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICozMi1iaXQqKQorCWVtdWw9IiR7ZW11bH0zMiIKKwk7OworICAgICAgKjY0LWJpdCopCisJZW11bD0iJHtlbXVsfTY0IgorCTs7CisgICAgZXNhYworICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpNU0IqKQorCWVtdWw9IiR7ZW11bH1idHNtaXAiCisJOzsKKyAgICAgICpMU0IqKQorCWVtdWw9IiR7ZW11bH1sdHNtaXAiCisJOzsKKyAgICBlc2FjCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKk4zMiopCisJZW11bD0iJHtlbXVsfW4zMiIKKwk7OworICAgIGVzYWMKKyAgICBMRD0iJHtMRC1sZH0gLW0gJGVtdWwiCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK3MzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LiAgTm90ZSB0aGF0IHRoZSBsaXN0ZWQgY2FzZXMgb25seSBjb3ZlciB0aGUKKyAgIyBzaXR1YXRpb25zIHdoZXJlIGFkZGl0aW9uYWwgbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCAoc3VjaCBhcyB3aGVuCisgICMgZG9pbmcgMzItYml0IGNvbXBpbGF0aW9uIGZvciBhIGhvc3Qgd2hlcmUgbGQgZGVmYXVsdHMgdG8gNjQtYml0LCBvcgorICAjIHZpY2UgdmVyc2EpOyB0aGUgY29tbW9uIGNhc2VzIHdoZXJlIG5vIGxpbmtlciBvcHRpb25zIGFyZSBuZWVkZWQgZG8KKyAgIyBub3QgYXBwZWFyIGluIHRoZSBsaXN0LgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisJICAgICAgKng4Ni02NCopCisJCUxEPSIke0xELWxkfSAtbSBlbGYzMl94ODZfNjQiCisJCTs7CisJICAgICAgKikKKwkJTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorCQk7OworCSAgICBlc2FjCisJICAgIDs7CisJICBwb3dlcnBjNjRsZS0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJscHBjbGludXgiCisJICAgIDs7CisJICBwb3dlcnBjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMycHBjbGludXgiCisJICAgIDs7CisJICBzMzkweC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3MzOTAiCisJICAgIDs7CisJICBzcGFyYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMl9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKwkgICAgOzsKKwkgIHBvd2VycGNsZS0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRscHBjIgorCSAgICA7OworCSAgcG93ZXJwYy0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisJICAgIDs7CisJICBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjKi0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9JENGTEFHUworICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2NjX25lZWRzX2JlbGYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2NjX25lZWRzX2JlbGY9eWVzCitlbHNlCisgIGx0X2N2X2NjX25lZWRzX2JlbGY9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBhY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KKyAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9jY19uZWVkc19iZWxmIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0kU0FWRV9DRkxBR1MKKyAgZmkKKyAgOzsKKyotKnNvbGFyaXMqKQorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAqNjQtYml0KikKKyAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCisgICAgICB5ZXMqKQorICAgICAgICBjYXNlICRob3N0IGluCisgICAgICAgIGk/ODYtKi1zb2xhcmlzKnx4ODZfNjQtKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKyAgICAgICAgICA7OworICAgICAgICBzcGFyYyotKi1zb2xhcmlzKikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICAjIEdOVSBsZCAyLjIxIGludHJvZHVjZWQgX3NvbDIgZW11bGF0aW9ucy4gIFVzZSB0aGVtIGlmIGF2YWlsYWJsZS4KKyAgICAgICAgaWYgJHtMRC1sZH0gLVYgfCBncmVwIF9zb2wyID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgIExEPSR7TEQtbGR9X3NvbDIKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgICopCisJaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7Citlc2FjCisKK25lZWRfbG9ja3M9JGVuYWJsZV9saWJ0b29sX2xvY2sKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9bXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX01BTklGRVNUX1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIkTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX01BTklGRVNUX1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9bXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MCitpZiB0ZXN0IC1uICIkTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQU5JRkVTVF9UT09MIiA+JjUKKyRhc19lY2hvICIkTUFOSUZFU1RfVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3RfTUFOSUZFU1RfVE9PTD0kTUFOSUZFU1RfVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBtdDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9NQU5JRkVTVF9UT09MIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9IiRhY19jdF9NQU5JRkVTVF9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTD0ibXQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTUFOSUZFU1RfVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9NQU5JRkVTVF9UT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X01BTklGRVNUX1RPT0wiID0geDsgdGhlbgorICAgIE1BTklGRVNUX1RPT0w9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTUFOSUZFU1RfVE9PTD0kYWNfY3RfTUFOSUZFU1RfVE9PTAorICBmaQorZWxzZQorICBNQU5JRkVTVF9UT09MPSIkYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MIgorZmkKKwordGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJE1BTklGRVNUX1RPT0wgaXMgYSBtYW5pZmVzdCB0b29sIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9bm8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86ICRNQU5JRkVTVF9UT09MICctPyciID4mNQorICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0KgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIiA+JjY7IH0KK2lmIHRlc3QgeWVzICE9ICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIjsgdGhlbgorICBNQU5JRkVTVF9UT09MPToKK2ZpCisKKworCisKKworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19EU1lNVVRJTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJERTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFNZTVVUSUw9JGFjX2N2X3Byb2dfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJERTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3RfRFNZTVVUSUw9JERTWU1VVElMCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iJGFjX2N0X0RTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9ImRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RTWU1VVElMPSRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMCitpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiRhY19jdF9EU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RTWU1VVElMIiA9IHg7IHRoZW4KKyAgICBEU1lNVVRJTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKKyAgZmkKK2Vsc2UKKyAgRFNZTVVUSUw9IiRhY19jdl9wcm9nX0RTWU1VVElMIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1ubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX05NRURJVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfTk1FRElUPSIkTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfTk1FRElUPSIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitOTUVESVQ9JGFjX2N2X3Byb2dfTk1FRElUCitpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE5NRURJVCIgPiY1CiskYXNfZWNobyAiJE5NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTk1FRElUIjsgdGhlbgorICBhY19jdF9OTUVESVQ9JE5NRURJVAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0iJGFjX2N0X05NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0ibm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X05NRURJVD0kYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQKK2lmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTk1FRElUIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTk1FRElUIiA9IHg7IHRoZW4KKyAgICBOTUVESVQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTk1FRElUPSRhY19jdF9OTUVESVQKKyAgZmkKK2Vsc2UKKyAgTk1FRElUPSIkYWNfY3ZfcHJvZ19OTUVESVQiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1saXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19MSVBPKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfTElQTz0iJExJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19MSVBPPSIke2FjX3Rvb2xfcHJlZml4fWxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTElQTz0kYWNfY3ZfcHJvZ19MSVBPCitpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSVBPIiA+JjUKKyRhc19lY2hvICIkTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTElQTyI7IHRoZW4KKyAgYWNfY3RfTElQTz0kTElQTworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0xJUE8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSIkYWNfY3RfTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0xJUE89ImxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTElQTz0kYWNfY3ZfcHJvZ19hY19jdF9MSVBPCitpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9MSVBPIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0xJUE8iID0geDsgdGhlbgorICAgIExJUE89IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTElQTz0kYWNfY3RfTElQTworICBmaQorZWxzZQorICBMSVBPPSIkYWNfY3ZfcHJvZ19MSVBPIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTD0iJE9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w9JGFjX2N2X3Byb2dfT1RPT0wKK2lmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTCIgPiY1CiskYXNfZWNobyAiJE9UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w9JE9UT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0iJGFjX2N0X09UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9Im90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MPSRhY19jdl9wcm9nX2FjX2N0X09UT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MIiA9IHg7IHRoZW4KKyAgICBPVE9PTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTD0kYWNfY3RfT1RPT0wKKyAgZmkKK2Vsc2UKKyAgT1RPT0w9IiRhY19jdl9wcm9nX09UT09MIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT1RPT0w2NCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MNjQ9IiRPVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJHthY190b29sX3ByZWZpeH1vdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MNjQ9JGFjX2N2X3Byb2dfT1RPT0w2NAoraWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJE9UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MNjQiOyB0aGVuCisgIGFjX2N0X09UT09MNjQ9JE9UT09MNjQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0iJGFjX2N0X09UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSJvdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MNjQ9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTDY0IiA9IHg7IHRoZW4KKyAgICBPVE9PTDY0PSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MNjQ9JGFjX2N0X09UT09MNjQKKyAgZmkKK2Vsc2UKKyAgT1RPT0w2ND0iJGFjX2N2X3Byb2dfT1RPT0w2NCIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIkTFRfTVVMVElfTU9EVUxFIjsgdGhlbgorCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQorCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQorCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKKwkjIGxpbmsgZmxhZ3MuCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCWVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCisJZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKKy1keW5hbWljbGliIC1XbCwtc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jIiA+JjUKKwkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKKyAgICAgICAgX2x0X3Jlc3VsdD0kPworCSMgSWYgdGhlcmUgaXMgYSBub24tZW1wdHkgZXJyb3IgbG9nLCBhbmQgInNpbmdsZV9tb2R1bGUiCisJIyBhcHBlYXJzIGluIGl0LCBhc3N1bWUgdGhlIGZsYWcgY2F1c2VkIGEgbGlua2VyIHdhcm5pbmcKKyAgICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgc2luZ2xlX21vZHVsZSBjb25mdGVzdC5lcnI7IHRoZW4KKwkgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisJIyBPdGhlcndpc2UsIGlmIHRoZSBvdXRwdXQgd2FzIGNyZWF0ZWQgd2l0aCBhIDAgZXhpdCBjb2RlIGZyb20KKwkjIHRoZSBjb21waWxlciwgaXQgd29ya2VkLgorCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0IDAgPSAiJF9sdF9yZXN1bHQiOyB0aGVuCisJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjY7IH0KKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCisgICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQorICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXMKK2Vsc2UKKyAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKwlMREZMQUdTPSRzYXZlX0xERkxBR1MKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjY7IH0KKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9sZF9mb3JjZV9sb2FkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfZm9yY2VfbG9hZD1ubworICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgZm9yY2VkX2xvYWRlZCgpIHsgcmV0dXJuIDI7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyIgPiY1CisgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JjUKKyAgICAgIGVjaG8gIiRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIiA+JjUKKyAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JjUKKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiY1CisgICAgICAkUkFOTElCIGxpYmNvbmZ0ZXN0LmEgMj4mNQorICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSIgPiY1CisgICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCisgICAgICBfbHRfcmVzdWx0PSQ/CisgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBmb3JjZV9sb2FkIGNvbmZ0ZXN0LmVycjsgdGhlbgorCWNhdCBjb25mdGVzdC5lcnIgPiY1CisgICAgICBlbGlmIHRlc3QgLWYgY29uZnRlc3QgJiYgdGVzdCAwID0gIiRfbHRfcmVzdWx0IiAmJiAkR1JFUCBmb3JjZWRfbG9hZCBjb25mdGVzdCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwlsdF9jdl9sZF9mb3JjZV9sb2FkPXllcworICAgICAgZWxzZQorCWNhdCBjb25mdGVzdC5lcnIgPiY1CisgICAgICBmaQorICAgICAgICBybSAtZiBjb25mdGVzdC5lcnIgbGliY29uZnRlc3QuYSBjb25mdGVzdCBjb25mdGVzdC5jCisgICAgICAgIHJtIC1yZiBjb25mdGVzdC5kU1lNCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA+JjY7IH0KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luMS4qKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC1mbGF0X25hbWVzcGFjZSAkd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luKikgIyBkYXJ3aW4gNS54IG9uCisgICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCisgICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAorICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/CisgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCisJMTAuMCwqODYqLWRhcndpbjgqfDEwLjAsKi1kYXJ3aW5bOTFdKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJMTAuWzAxMl1bLC5dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworCTEwLiopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KKyAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCisgICAgZmkKKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IjsgdGhlbgorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR3bC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUtc3ltYm9scy5leHBzeW0nCisgICAgZWxzZQorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUtc3ltYm9scy5leHBzeW0gJGxpYicKKyAgICBmaQorICAgIGlmIHRlc3QgOiAhPSAiJERTWU1VVElMIiAmJiB0ZXN0IG5vID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgorICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKKyAgICBlbHNlCisgICAgICBfbHRfZHN5bXV0aWw9CisgICAgZmkKKyAgICA7OworICBlc2FjCisKKyMgZnVuY19tdW5nZV9wYXRoX2xpc3QgVkFSSUFCTEUgUEFUSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBWQVJJQUJMRSBpcyBuYW1lIG9mIHZhcmlhYmxlIGNvbnRhaW5pbmcgX3NwYWNlXyBzZXBhcmF0ZWQgbGlzdCBvZgorIyBkaXJlY3RvcmllcyB0byBiZSBtdW5nZWQgYnkgdGhlIGNvbnRlbnRzIG9mIFBBVEgsIHdoaWNoIGlzIHN0cmluZworIyBoYXZpbmcgYSBmb3JtYXQ6CisjICJESVJbOkRJUl06IgorIyAgICAgICBzdHJpbmcgIkRJUlsgRElSXSIgd2lsbCBiZSBwcmVwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIjpESVJbOkRJUl0iCisjICAgICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJlIGFwcGVuZGVkIHRvIFZBUklBQkxFCisjICJESVJQWzpESVJQXTo6W0RJUkE6XURJUkEiCisjICAgICAgIHN0cmluZyAiRElSUFsgRElSUF0iIHdpbGwgYmUgcHJlcGVuZGVkIHRvIFZBUklBQkxFIGFuZCBzdHJpbmcKKyMgICAgICAgIkRJUkFbIERJUkFdIiB3aWxsIGJlIGFwcGVuZGVkIHRvIFZBUklBQkxFCisjICJESVJbOkRJUl0iCisjICAgICAgIFZBUklBQkxFIHdpbGwgYmUgcmVwbGFjZWQgYnkgIkRJUlsgRElSXSIKK2Z1bmNfbXVuZ2VfcGF0aF9saXN0ICgpCit7CisgICAgY2FzZSB4JDIgaW4KKyAgICB4KQorICAgICAgICA7OworICAgICo6KQorICAgICAgICBldmFsICQxPVwiYCRFQ0hPICQyIHwgJFNFRCAncy86LyAvZydgIFwkJDFcIgorICAgICAgICA7OworICAgIHg6KikKKyAgICAgICAgZXZhbCAkMT1cIlwkJDEgYCRFQ0hPICQyIHwgJFNFRCAncy86LyAvZydgXCIKKyAgICAgICAgOzsKKyAgICAqOjoqKQorICAgICAgICBldmFsICQxPVwiXCQkMVwgYCRFQ0hPICQyIHwgJFNFRCAtZSAncy8uKjo6Ly8nIC1lICdzLzovIC9nJ2BcIgorICAgICAgICBldmFsICQxPVwiYCRFQ0hPICQyIHwgJFNFRCAtZSAncy86Oi4qLy8nIC1lICdzLzovIC9nJ2BcIFwkJDFcIgorICAgICAgICA7OworICAgICopCisgICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2BcIgorICAgICAgICA7OworICAgIGVzYWMKK30KKworZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJkbGZjbi5oIiAiYWNfY3ZfaGVhZGVyX2RsZmNuX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RMRkNOX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKworCisjIFNldCBvcHRpb25zCisKKworCisgICAgICAgIGVuYWJsZV9kbG9wZW49bm8KKworCisKKyAgICAgICAgICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2hhcmVkOyBwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zaGFyZWQ9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc2hhcmVkPXllcworZmkKKworCisKKworCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zdGF0aWM7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSRsdF9zYXZlX2lmcworCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc3RhdGljPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3N0YXRpYz15ZXMKK2ZpCisKKworCisKKworCisKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9waWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3BpYzsgbHRfcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICR3aXRodmFsIGluCisgICAgeWVzfG5vKSBwaWNfbW9kZT0kd2l0aHZhbCA7OworICAgICopCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKKyAgICAgIGZvciBsdF9wa2cgaW4gJHdpdGh2YWw7IGRvCisJSUZTPSRsdF9zYXZlX2lmcworCWlmIHRlc3QgIlgkbHRfcGtnIiA9ICJYJGx0X3AiOyB0aGVuCisJICBwaWNfbW9kZT15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIHBpY19tb2RlPWRlZmF1bHQKK2ZpCisKKworCisKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2Zhc3RfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSRsdF9zYXZlX2lmcworCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKK2ZpCisKKworCisKKworCisKKworICBzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz0KK2Nhc2UgJGhvc3QsJGVuYWJsZV9zaGFyZWQgaW4KK3Bvd2VyKi0qLWFpeFs1LTldKix5ZXMpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hpY2ggdmFyaWFudCBvZiBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIHRvIHByb3ZpZGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hpY2ggdmFyaWFudCBvZiBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIHRvIHByb3ZpZGUuLi4gIiA+JjY7IH0KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1haXgtc29uYW1lIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9haXhfc29uYW1lK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9haXhfc29uYW1lOyBjYXNlICR3aXRodmFsIGluCisgICAgYWl4fHN2cjR8Ym90aCkKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJVbmtub3duIGFyZ3VtZW50IHRvIC0td2l0aC1haXgtc29uYW1lIiAiJExJTkVOTyIgNQorICAgICAgOzsKKyAgICBlc2FjCisgICAgbHRfY3Zfd2l0aF9haXhfc29uYW1lPSR3aXRoX2FpeF9zb25hbWUKK2Vsc2UKKyAgaWYgJHtsdF9jdl93aXRoX2FpeF9zb25hbWUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl93aXRoX2FpeF9zb25hbWU9YWl4CitmaQorCisgICAgd2l0aF9haXhfc29uYW1lPSRsdF9jdl93aXRoX2FpeF9zb25hbWUKK2ZpCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR3aXRoX2FpeF9zb25hbWUiID4mNQorJGFzX2VjaG8gIiR3aXRoX2FpeF9zb25hbWUiID4mNjsgfQorICBpZiB0ZXN0IGFpeCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KKyAgICAjIEZvciB0aGUgQUlYIHdheSBvZiBtdWx0aWxpYiwgd2UgbmFtZSB0aGUgc2hhcmVkIGFyY2hpdmUgbWVtYmVyCisgICAgIyBiYXNlZCBvbiB0aGUgYml0d2lkdGggdXNlZCwgdHJhZGl0aW9uYWxseSAnc2hyLm8nIG9yICdzaHJfNjQubycsCisgICAgIyBhbmQgJ3Noci5pbXAnIG9yICdzaHJfNjQuaW1wJywgcmVzcGVjdGl2ZWx5LCBmb3IgdGhlIEltcG9ydCBGaWxlLgorICAgICMgRXZlbiB3aGVuIEdOVSBjb21waWxlcnMgaWdub3JlIE9CSkVDVF9NT0RFIGJ1dCBuZWVkICctbWFpeDY0JyBmbGFnLAorICAgICMgdGhlIEFJWCB0b29sY2hhaW4gd29ya3MgYmV0dGVyIHdpdGggT0JKRUNUX01PREUgc2V0IChkZWZhdWx0IDMyKS4KKyAgICBpZiB0ZXN0IDY0ID0gIiR7T0JKRUNUX01PREUtMzJ9IjsgdGhlbgorICAgICAgc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9c2hyXzY0CisgICAgZWxzZQorICAgICAgc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9c2hyCisgICAgZmkKKyAgZmkKKyAgOzsKKyopCisgIHdpdGhfYWl4X3NvbmFtZT1haXgKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSRsdG1haW4KKworIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKwordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorCisKKworCisKKworCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBvYmpkaXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG9iamRpci4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9vYmpkaXIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBybSAtZiAubGlicyAyPi9kZXYvbnVsbAorbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLmxpYnM7IHRoZW4KKyAgbHRfY3Zfb2JqZGlyPS5saWJzCitlbHNlCisgICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCisgIGx0X2N2X29iamRpcj1fbGlicworZmkKK3JtZGlyIC5saWJzIDI+L2Rldi9udWxsCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9vYmpkaXIiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9vYmpkaXIiID4mNjsgfQorb2JqZGlyPSRsdF9jdl9vYmpkaXIKKworCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExUX09CSkRJUiAiJGx0X2N2X29iamRpci8iCitfQUNFT0YKKworCisKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgorICBpZiB0ZXN0IHNldCAhPSAiJHtDT0xMRUNUX05BTUVTK3NldH0iOyB0aGVuCisgICAgQ09MTEVDVF9OQU1FUz0KKyAgICBleHBvcnQgQ09MTEVDVF9OQU1FUworICBmaQorICA7OworZXNhYworCisjIEdsb2JhbCB2YXJpYWJsZXM6CitvZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSAnLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCisKK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCitvbGRfQ0M9JENDCitvbGRfQ0ZMQUdTPSRDRkxBR1MKKworIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCitmdW5jX2NjX2Jhc2VuYW1lICRjb21waWxlcgorY2NfYmFzZW5hbWU9JGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0CisKKworIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0Cit0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQorY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KK2ZpbGVfbWFnaWMqKQorICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRNQUdJQ19DTUQgaW4KK1tcXC8qXSB8ICA/OltcXC9dKikKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JE1BR0lDX0NNRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBhY19kdW1teT0iL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSRsdF9zYXZlX2lmcworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fWZpbGUiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kYWNfZGlyLyIke2FjX3Rvb2xfcHJlZml4fWZpbGUiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworX0xUX0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0kbHRfc2F2ZV9pZnMKKyAgTUFHSUNfQ01EPSRsdF9zYXZlX01BR0lDX0NNRAorICA7OworZXNhYworZmkKKworTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworCisKKworaWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZmlsZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX01BR0lDX0NNRCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kTUFHSUNfQ01EICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9JE1BR0lDX0NNRAorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyL2ZpbGUiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kYWNfZGlyLyJmaWxlIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9JGx0X3NhdmVfaWZzCisgIE1BR0lDX0NNRD0kbHRfc2F2ZV9NQUdJQ19DTUQKKyAgOzsKK2VzYWMKK2ZpCisKK01BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorCisgIGZpCisgIDs7Citlc2FjCisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CisKK2x0X3NhdmVfQ0M9JENDCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK29iamV4dD0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCisKKworCisKKworCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKKworIyBTYXZlIHRoZSBkZWZhdWx0IGNvbXBpbGVyLCBzaW5jZSBpdCBnZXRzIG92ZXJ3cml0dGVuIHdoZW4gdGhlIG90aGVyCisjIHRhZ3MgYXJlIGJlaW5nIHRlc3RlZCwgYW5kIF9MVF9UQUdWQVIoY29tcGlsZXIsIFtdKSBpcyBhIE5PUC4KK2NvbXBpbGVyX0RFRkFVTFQ9JENDCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKKworYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0KKworaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgbnZjYyopCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKKyAgKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1mbm8tYnVpbHRpbicgOzsKKyAgZXNhYworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubworICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiICAjIyBleGNsdWRlIGZyb20gc2NfdXNlbGVzc19xdW90ZXNfaW5fYXNzaWdubWVudAorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjY7IH0KKworaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIjsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKK2Vsc2UKKyAgICA6CitmaQorCitmaQorCisKKworCisKKworICBsdF9wcm9nX2NvbXBpbGVyX3dsPQorbHRfcHJvZ19jb21waWxlcl9waWM9CitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KKworCisgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSAnLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlICctbTY4MDQwJy4KKyAgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCisgICAgICA7OworCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9zMiopCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9JyR3bC1zdGF0aWMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGludGVyaXhbMy05XSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWM9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgIG52Y2MqKSAjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVhsaW5rZXIgJworICAgICAgaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iLVhjb21waWxlciAkbHRfcHJvZ19jb21waWxlcl9waWMiCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIG5hZ2ZvciopCisgICAgICAgICMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLC1XbCwsJworICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9zMiopCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9JyR3bC1zdGF0aWMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9JytaJworCTs7CisgICAgICBlc2FjCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSckd2wtYSAke3dsfWFyY2hpdmUnCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0LCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBpY2MgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisgICAgICAjIElDQyAxMCBkb2Vzbid0IGFjY2VwdCAtS1BJQyBhbnkgbW9yZS4KKyAgICAgIGljYyogfCBpZm9ydCopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIExhaGV5IEZvcnRyYW4gOC4xLgorICAgICAgbGY5NSopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLS1zaGFyZWQnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy0tc3RhdGljJworCTs7CisgICAgICBuYWdmb3IqKQorCSMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsLVdsLCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCTs7CisgICAgICB0Y2MqKQorCSMgRmFicmljZSBCZWxsYXJkIGV0IGFsJ3MgVGlueSBDIENvbXBpbGVyCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisJOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICAgIDs7CisgICAgICB4bCogfCBiZ3hsKiB8IGJnZiogfCBtcGl4bCopCisJIyBJQk0gWEwgQyA4LjAvRm9ydHJhbiAxMC4xLCAxMS4xIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctcXBpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXFzdGF0aWNsaW5rJworCTs7CisgICAgICAqKQorCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIENlcmVzXCBGb3J0cmFuKiB8ICpTdW4qRm9ydHJhbipcIFsxLTddLiogfCAqU3VuKkZvcnRyYW4qXCA4LlswLTNdKikKKwkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfd2w9JycKKwkgIDs7CisJKlN1blwgRiogfCAqU3VuKkZvcnRyYW4qKQorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJworCSAgOzsKKwkqU3VuXCBDKikKKwkgICMgU3VuIEMgNS45CisJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCSAgOzsKKyAgICAgICAgKkludGVsKlwgW0NGXSpDb21waWxlciopCisJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisJICA7OworCSpQb3J0bGFuZFwgR3JvdXAqKQorCSAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZnBpYycKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICByZG9zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVFvcHRpb24gbGQgJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LY29uZm9ybV9waWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1waWMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgIyBGb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgOzsKK2VzYWMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CitsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIiAgIyMgZXhjbHVkZSBmcm9tIHNjX3VzZWxlc3NfcXVvdGVzX2luX2Fzc2lnbm1lbnQKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2OyB9CisKK2lmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyI7IHRoZW4KKyAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpYyBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljIiA7OworICAgICBlc2FjCitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9waWM9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZD1ubworZmkKKworZmkKKworCisKKworCisKKworCisKKworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9bm8KKyAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9JHNhdmVfTERGTEFHUworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjY7IH0KKworaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIjsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KK2ZpCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKKworCisKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPW5vCisgICAkUk0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY2OyB9CisKKworCisKK2hhcmRfbGlua3M9bm90dGVzdGVkCitpZiB0ZXN0IG5vID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgJiYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKyRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9CisgIGlmIHRlc3Qgbm8gPSAiJGhhcmRfbGlua3MiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorCisgIHJ1bnBhdGhfdmFyPQorICBhbGxvd191bmRlZmluZWRfZmxhZz0KKyAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgIGFyY2hpdmVfY21kcz0KKyAgYXJjaGl2ZV9leHBzeW1fY21kcz0KKyAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PW5vCisgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9bm8KKyAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQorICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIGhhcmRjb2RlX2F1dG9tYXRpYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPW5vCisgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CisgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisgIGhhcmRjb2RlX21pbnVzX0w9bm8KKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpbmhlcml0X3JwYXRoPW5vCisgIGxpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgorICBtb2R1bGVfY21kcz0KKyAgbW9kdWxlX2V4cHN5bV9jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPQorICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0KKyAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjPQorICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBpbmNsdWRlX2V4cHN5bXM9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5ICcgKCcgYW5kICcpJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6ICdhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgJ2EnIGFuZCAnYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zICdkJy4KKyAgZXhjbHVkZV9leHBzeW1zPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCisgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAorICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKyAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisgICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgorICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRHQ0MiOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKiB8IGJpdHJpZyopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBlc2FjCisKKyAgbGRfc2hsaWJzPXllcworCisgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgorICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKyAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CisJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCisJIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuWzItOV0qKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFszLTldKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0IHllcyA9ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHdsJworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiB8ICRTRUQgLWUgJ3MvKF4pXCspXHNcKy8vJyAyPiYxYCBpbgorICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXhbMy05XSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gaW5zdGFsbCBiaW51dGlscworKioqIDIuMjAgb3IgYWJvdmUsIG9yIG1vZGlmeSB5b3VyIFBBVEggc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLgorKioqIFlvdSB3aWxsIHRoZW4gbmVlZCB0byByZXN0YXJ0IHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MuCisKK19MVF9FT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCWFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLztzL14uKlsgXV9fbm1fX1woW14gXSpcKVsgXVteIF0qL1wxIERBVEEvOy9eSVsgXS9kOy9eW0FJVFddWyBdL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBleGNsdWRlX2V4cHN5bXM9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUsIHVzZSBpdCBhcworCSMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgIGZpfgorICAgICAgICAkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhhaWt1KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisgICAgICBzaHJleHRfY21kcz0uZGxsCisgICAgICBhcmNoaXZlX2NtZHM9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14ZXhwICRsaWJvYmpzIHwgJFNFRCAvIl9ETExfSW5pdFRlcm0iL2QgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREFUQSBNVUxUSVBMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwlwcmVmaXhfY21kcz0iJFNFRCJ+CisJaWYgdGVzdCBFWFBPUlRTID0gImAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiOyB0aGVuCisJICBwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIDFkIjsKKwlmaX4KKwlwcmVmaXhfY21kcz0iJHByZWZpeF9jbWRzIC1lIFwicy9eXCguKlwpJC9fXDEvZ1wiIn4KKwljYXQgJGV4cG9ydF9zeW1ib2xzIHwgJHByZWZpeF9jbWRzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICA7OworCisgICAgaW50ZXJpeFszLTldKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCBsaW51eC1kaWV0bGliYyA9ICIkaG9zdF9vcyI7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCBubyA9ICIkdG1wX2RpZXQiCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCisJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OworCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OworCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CisJaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKKwkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7CisJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworICAgICAgICBuYWdmb3IqKSAgICAgICAgICAgICAgICAgICAgICAgICMgTkFHRk9SIDUuMworICAgICAgICAgIHRtcF9zaGFyZWRmbGFnPSctV2wsLXNoYXJlZCcgOzsKKwl4bFtjQ10qIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PXllcworCSAgOzsKKwllc2FjCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJKlN1blwgRiopCQkJIyBTdW4gRm9ydHJhbiA4LjMKKwkgIHRtcF9zaGFyZWRmbGFnPSctRycgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKworICAgICAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXRjYyopCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Jy1yZHluYW1pYycKKwkgIDs7CisJeGxmKiB8IGJnZiogfCBiZ3hsZiogfCBtcGl4bGYqKQorCSAgIyBJQk0gWEwgRm9ydHJhbiAxMC4xIG9uIFBQQyBjYW5ub3QgY3JlYXRlIHNoYXJlZCBsaWJzIGl0c2VsZgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKKwkgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgIGZpCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCAkR1JFUCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJbGRfc2hsaWJzPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbm5vdAorKioqIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNDTyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjE2LjkxLjAuMyBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisJOzsKKwkqKQorCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIGxkX3NobGlicz1ubworCSAgZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3Qgbm8gPSAiJGxkX3NobGlicyI7IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIiAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJaGFyZGNvZGVfZGlyZWN0PXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFs0LTldKikKKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9CisgICAgICBlbHNlCisJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCisJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBHTlUgbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB0byBBSVggbm0uCisJIyBXaXRob3V0IHRoZSAiLWwiIG9wdGlvbiwgb3Igd2l0aCB0aGUgIi1CIiBvcHRpb24sIEFJWCBubSB0cmVhdHMKKwkjIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcworCSMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorCSMgV2hpbGUgdGhlICd3ZWFrJyBrZXl3b3JkIGlzIGlnbm9yZWQgaW4gdGhlIEV4cG9ydCBGaWxlLCB3ZSBuZWVkCisJIyBpdCBpbiB0aGUgSW1wb3J0IEZpbGUgZm9yIHRoZSAnYWl4LXNvbmFtZScgZmVhdHVyZSwgc28gd2UgaGF2ZQorCSMgdG8gcmVwbGFjZSB0aGUgIi1CIiBvcHRpb24gd2l0aCAiLVAiIGZvciBBSVggbm0uCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBpZiAoXCQgMiA9PSAiVyIpIHsgcHJpbnQgXCQgMyAiIHdlYWsiIH0gZWxzZSB7IHByaW50IFwkIDMgfSB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSdgZnVuY19lY2hvX2FsbCAkTk0gfCAkU0VEIC1lICdcJydzL0JcKFteQl0qXCkkL1BcMS8nXCcnYCAtUENwZ2wgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSB8fCAoXCQgMiA9PSAiViIpIHx8IChcJCAyID09ICJaIikpICYmIChzdWJzdHIoXCQgMSwxLDEpICE9ICIuIikpIHsgaWYgKChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSB7IHByaW50IFwkIDEgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAxIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZmkKKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKwkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKwkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKwkjIGhhdmUgcnVudGltZSBsaW5raW5nIGVuYWJsZWQsIGFuZCB1c2UgaXQgZm9yIGV4ZWN1dGFibGVzLgorCSMgRm9yIHNoYXJlZCBsaWJyYXJpZXMsIHdlIGVuYWJsZS9kaXNhYmxlIHJ1bnRpbWUgbGlua2luZworCSMgZGVwZW5kaW5nIG9uIHRoZSBraW5kIG9mIHRoZSBzaGFyZWQgbGlicmFyeSBjcmVhdGVkIC0KKwkjIHdoZW4gIndpdGhfYWl4X3NvbmFtZSxhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiBpczoKKwkjICJhaXgsbm8iICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCisJIyAiYWl4LHllcyIgIGxpYi5zbyAgICAgICAgICBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworCSMgICAgICAgICAgICBsaWIuYSAgICAgICAgICAgc3RhdGljIGFyY2hpdmUKKwkjICJib3RoLG5vIiAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcworCSMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8sICBmb3IgZXhlY3V0YWJsZXMKKwkjICJib3RoLHllcyIgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisJIyAgICAgICAgICAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubworCSMgInN2cjQsKiIgICBsaWIuc28uVihzaHIubykgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKwkjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCB4LWJydGwgPSAieCRsZF9mbGFnIiB8fCB0ZXN0IHgtV2wsLWJydGwgPSAieCRsZF9mbGFnIik7IHRoZW4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgIGZpCisJICBkb25lCisJICBpZiB0ZXN0IHN2cjQsbm8gPSAiJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgIyBXaXRoIGFpeC1zb25hbWU9c3ZyNCwgd2UgY3JlYXRlIHRoZSBsaWIuc28uViBzaGFyZWQgYXJjaGl2ZXMgb25seSwKKwkgICAgIyBzbyB3ZSBkb24ndCBoYXZlIGxpYi5hIHNoYXJlZCBsaWJzIHRvIGxpbmsgb3VyIGV4ZWN1dGFibGVzLgorCSAgICAjIFdlIGhhdmUgdG8gZm9yY2UgcnVudGltZSBsaW5raW5nIGluIHRoaXMgY2FzZS4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1icnRsIgorCSAgZmkKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIGFyY2hpdmVfY21kcz0nJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBmaWxlX2xpc3Rfc3BlYz0nJHdsLWYsJworICAgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgICBhaXgsKikgOzsgIyB0cmFkaXRpb25hbCwgbm8gaW1wb3J0IGZpbGUKKyAgICAgIHN2cjQsKiB8ICoseWVzKSAjIHVzZSBpbXBvcnQgZmlsZQorCSMgVGhlIEltcG9ydCBGaWxlIGRlZmluZXMgd2hhdCB0byBoYXJkY29kZS4KKwloYXJkY29kZV9kaXJlY3Q9bm8KKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KKwk7OworICAgICAgZXNhYworCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCRDQyAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICA6CisJICBlbHNlCisJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR3bC1HJworCWZpCisJIyBOZWVkIHRvIGVuc3VyZSBydW50aW1lIGxpbmtpbmcgaXMgZGlzYWJsZWQgZm9yIHRoZSB0cmFkaXRpb25hbAorCSMgc2hhcmVkIGxpYnJhcnksIG9yIHRoZSBsaW5rZXIgbWF5IGV2ZW50dWFsbHkgZmluZCBzaGFyZWQgbGlicmFyaWVzCisJIyAvd2l0aC8gSW1wb3J0IEZpbGUgLSB3ZSBkbyBub3Qgd2FudCB0byBtaXggdGhlbS4KKwlzaGFyZWRfZmxhZ19haXg9Jy1zaGFyZWQnCisJc2hhcmVkX2ZsYWdfc3ZyND0nLXNoYXJlZCAkd2wtRycKKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR3bC1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKKwkgIGZpCisJICBzaGFyZWRfZmxhZ19haXg9JyR3bC1iTTpTUkUnCisJICBzaGFyZWRfZmxhZ19zdnI0PSckd2wtRycKKwlmaQorICAgICAgZmkKKworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtYmV4cGFsbCcKKyAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKyAgICAgIGlmIHRlc3QgYWl4LHllcyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJworICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz0vdXNyL2xpYjovbGliCisgIGZpCisKK2ZpCisKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworZmkKKworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZworICAgICAgZWxzZQorCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0iLXogbm9kZWZzIgorCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoXz0vdXNyL2xpYjovbGliCisgIGZpCisKK2ZpCisKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworZmkKKworCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBub191bmRlZmluZWRfZmxhZz0nICR3bC1iZXJub3RvaycKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHdsLWJlcm9rJworCSAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGVsc2UKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckY29udmVuaWVuY2UnCisJICBmaQorCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckUk0gLXIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmR+JE1LRElSICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJworCSAgIyAtYnJ0bCBhZmZlY3RzIG11bHRpcGxlIGxpbmtlciBzZXR0aW5ncywgLWJlcm9rIGRvZXMgbm90IGFuZCBpcyBvdmVycmlkZGVuIGxhdGVyCisJICBjb21waWxlcl9mbGFnc19maWx0ZXJlZD0nYGZ1bmNfZWNob19hbGwgIiRjb21waWxlcl9mbGFncyAiIHwgJFNFRCAtZSAicyUtYnJ0bFxcKFssIF1cXCklLWJlcm9rXFwxJWciYCcKKwkgIGlmIHRlc3Qgc3ZyNCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KKwkgICAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0iJGFyY2hpdmVfZXhwc3ltX2NtZHMiJ34kQ0MgJyRzaGFyZWRfZmxhZ19haXgnIC1vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICckY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQnJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lJworCSAgZmkKKwkgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSIkYXJjaGl2ZV9leHBzeW1fY21kcyInfiRDQyAnJHNoYXJlZF9mbGFnX3N2cjQnIC1vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAnJGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkJyR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JFNUUklQIC1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vfiggZnVuY19lY2hvX2FsbCAiIyEgJHNvbmFtZSgkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiOyBpZiB0ZXN0IHNocl82NCA9ICIkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiMgNjQiOyBlbHNlIGZ1bmNfZWNob19hbGwgIiMgMzIiOyBmaTsgY2F0ICRleHBvcnRfc3ltYm9scyApID4gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcH4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLmltcCcKKwkgIGVsc2UKKwkgICAgIyB1c2VkIGJ5IC1kbHByZW9wZW4gdG8gZ2V0IHRoZSBzeW1ib2xzCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IiRhcmNoaXZlX2V4cHN5bV9jbWRzIid+JE1WICAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRvdXRwdXRfb2JqZGlyJworCSAgZmkKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9IiRhcmNoaXZlX2V4cHN5bV9jbWRzIid+JFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJzZGlbNDVdKikKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgY2wqKQorCSMgTmF0aXZlIE1TVkMKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworCWZpbGVfbGlzdF9zcGVjPSdAJworCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPS5kbGwKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgICAgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmIjsKKyAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICRTRUQgLWUgJ1wnJ3MvXi8tbGluayAtRVhQT1JUOi8nXCcnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisgICAgICAgICAgZml+CisgICAgICAgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorICAgICAgICAgIGxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisJZXhjbHVkZV9leHBzeW1zPSdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUnxfSU1QT1JUX0RFU0NSSVBUT1JfLionCisJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworCSMgRG9uJ3QgdXNlIHJhbmxpYgorCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKyAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisgICAgICAgICAgICAqLmV4ZXwqLkVYRSkgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0kbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWN+CisgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisgICAgICAgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworICAgICAgICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisgICAgICAgICAgZmknCisJOzsKKyAgICAgICopCisJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPS5kbGwKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorCW9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J3RydWUnCisJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKwlvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisJZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisKKworICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgaGFyZGNvZGVfYXV0b21hdGljPXllcworICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHdsLWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisKKyAgZWxzZQorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScnCisgIGZpCisgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZAorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICBpZm9ydCp8bmFnZm9yKikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgeWVzID0gIiRfbHRfZGFyX2Nhbl9zaGFyZWQiOyB0aGVuCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZHN5bXV0aWwiCisgICAgbW9kdWxlX2NtZHM9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZHN5bXV0aWwiCisgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHM9InNlZCAtZSAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKworICBlbHNlCisgIGxkX3NobGlicz1ubworICBmaQorCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIuKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIGhwdXg5KikKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsK2IgJHdsJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtRScKKyAgICAgIDs7CisKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdDQywkd2l0aF9nbnVfbGQiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bCtiICR3bCRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisJaGFyZGNvZGVfZGlyZWN0PXllcworCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHQ0MsJHdpdGhfZ251X2xkIjsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCisJICAjIE9sZGVyIHZlcnNpb25zIG9mIHRoZSAxMS4wMCBjb21waWxlciBkbyBub3QgdW5kZXJzdGFuZCAtYiB5ZXQKKwkgICMgKEhQOTI0NTMtMDEgQS4xMS4wMS4yMCBkb2Vzbid0LCBIUDkyNDUzLTAxIEIuMTEuWC4zNTE3NS0zNTE3Ni5HUCBkb2VzKQorCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkQ0MgdW5kZXJzdGFuZHMgLWIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJENDIHVuZGVyc3RhbmRzIC1iLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfX2IrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPW5vCisgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgIExERkxBR1M9IiRMREZMQUdTIC1iIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJEVDSE8gIiRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX19iPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9JHNhdmVfTERGTEFHUworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY2OyB9CisKK2lmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIjsgdGhlbgorICAgIGFyY2hpdmVfY21kcz0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworZWxzZQorICAgIGFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKK2ZpCisKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bCtiICR3bCRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqfGlhNjQqKQorCSAgaGFyZGNvZGVfZGlyZWN0PW5vCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJICA7OworCSopCisJICBoYXJkY29kZV9kaXJlY3Q9eWVzCisJICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJworCisJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJICBoYXJkY29kZV9taW51c19MPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBzYXZlX0xERkxBR1M9JExERkxBR1MKKwkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR3bC1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wvZGV2L251bGwiCisJICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllcworZWxzZQorICBsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPiY2OyB9CisJaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zICR3bC1leHBvcnRzX2ZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJZmkKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGluaGVyaXRfcnBhdGg9eWVzCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIGxpbnV4KikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICB0Y2MqKQorCSMgRmFicmljZSBCZWxsYXJkIGV0IGFsJ3MgVGlueSBDIENvbXBpbGVyCisJbGRfc2hsaWJzPXllcworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKiB8IGJpdHJpZyopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJworCWVsc2UKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCisJZmkKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgc2hyZXh0X2NtZHM9LmRsbAorICAgICAgYXJjaGl2ZV9jbWRzPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJcHJlZml4X2NtZHM9IiRTRUQifgorCWlmIHRlc3QgRVhQT1JUUyA9ICJgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIjsgdGhlbgorCSAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSAxZCI7CisJZml+CisJcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSBcInMvXlwoLipcKSQvX1wxL2dcIiJ+CisJY2F0ICRleHBvcnRfc3ltYm9scyB8ICRwcmVmaXhfY21kcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJENDIC1aZGxsIC1aY3J0ZGxsIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwllbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfV9kbGwuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKyAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkd2wtaW5wdXQgJHdsJGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYn4kUk0gJGxpYi5leHAnCisKKwkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCXdsYXJjPSckd2wnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICBlbHNlCisJY2FzZSBgJENDIC1WIDI+JjFgIGluCisJKiJDb21waWxlcnMgNS4wIiopCisJICB3bGFyYz0nJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgICAkTEQgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwkqKQorCSAgd2xhcmM9JyR3bCcKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgICAkQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgJy16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0ICckd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wteiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHdsLXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBpZiB0ZXN0IHNlcXVlbnQgPSAiJGhvc3RfdmVuZG9yIjsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAkd2wtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisJOzsKKwlzaWVtZW5zKQorCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICByZWxvYWRfY21kcz0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgOzsKKwltb3Rvcm9sYSkKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIHN5c3Y0LjMqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Jy1CZXhwb3J0JworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlsZF9zaGxpYnM9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCisgICAgICBub191bmRlZmluZWRfZmxhZz0nJHdsLXosdGV4dCcKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIyBOb3RlOiBXZSBDQU5OT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisgICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKyAgICAgICMgYXMgLXogZGVmcy4KKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPSckd2wteix0ZXh0JworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR3bC16LG5vZGVmcycKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtUiwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3Qgc25pID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1CbGFyZ2VkeW5zeW0nCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlicyIgPiY1CiskYXNfZWNobyAiJGxkX3NobGlicyIgPiY2OyB9Cit0ZXN0IG5vID0gIiRsZF9zaGxpYnMiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKword2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisKKworCisKKworCisKKworCisKKworCisKKworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworCisgIGlmIHRlc3QgeWVzLHllcyA9ICIkR0NDLCRlbmFibGVfc2hhcmVkIjsgdGhlbgorICAgIGNhc2UgJGFyY2hpdmVfY21kcyBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICRSTSBjb25mdGVzdCoKKwllY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworCWlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kbHRfcHJvZ19jb21waWxlcl93bAorCSAgcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0KKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisJICB0aGVuCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPW5vCisJICBlbHNlCisJICAgIGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjPXllcworCSAgZmkKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisJZWxzZQorCSAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisJZmkKKwkkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNjsgfQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9JGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAiID4mNjsgfQorCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgICAgZGFyd2luKikgbHRfYXdrX2FyZz0nL15saWJyYXJpZXM6LywvTFIvJyA7OworICAgICopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8nIDs7CisgIGVzYWMKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VkX3N0cmlwX2VxPSdzfD1cKFtBLVphLXpdOlwpfFwxfGcnIDs7CisgICAgKikgbHRfc2VkX3N0cmlwX2VxPSdzfD0vfC98ZycgOzsKKyAgZXNhYworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAorICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCisgICpcOyopCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICdzLzsvIC9nJ2AKKyAgICA7OworICAqKQorICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgIDs7CisgIGVzYWMKKyAgIyBPaywgbm93IHdlIGhhdmUgdGhlIHBhdGgsIHNlcGFyYXRlZCBieSBzcGFjZXMsIHdlIGNhbiBzdGVwIHRocm91Z2ggaXQKKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuLi4KKyAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9CisgIGx0X211bHRpX29zX2Rpcj0vYCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICAjIC4uLmJ1dCBpZiBzb21lIHBhdGggY29tcG9uZW50IGFscmVhZHkgZW5kcyB3aXRoIHRoZSBtdWx0aWxpYiBkaXIgd2UgYXNzdW1lCisgICMgdGhhdCBhbGwgaXMgZmluZSBhbmQgdHJ1c3QgLXByaW50LXNlYXJjaC1kaXJzIGFzIGlzIChHQ0MgNC4yPyBvciBuZXdlcikuCisgIGNhc2UgIiRsdF9tdWx0aV9vc19kaXI7ICRsdF9zZWFyY2hfcGF0aF9zcGVjICIgaW4KKyAgIi87ICIqIHwgIi8uOyAiKiB8ICIvLi87ICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyLyAiKikKKyAgICBsdF9tdWx0aV9vc19kaXI9CisgICAgOzsKKyAgZXNhYworICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCisgICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciI7IHRoZW4KKyAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoJGx0X211bHRpX29zX2RpciIKKyAgICBlbGlmIHRlc3QgLW4gIiRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKwlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKKyAgICBmaQorICBkb25lCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKK0JFR0lOIHtSUyA9ICIgIjsgRlMgPSAiL3xcbiI7fSB7CisgIGx0X2ZvbyA9ICIiOworICBsdF9jb3VudCA9IDA7CisgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CisgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgeworICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKKyAgICAgICAgbHRfY291bnQrKzsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7CisgICAgICAgICAgbHRfZm9vID0gIi8iICRsdF9pIGx0X2ZvbzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBsdF9jb3VudC0tOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9CisgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtsdF9mb29dKys7IH0KKyAgaWYgKGx0X2ZyZXFbbHRfZm9vXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorfSdgCisgICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocworICAjIGZvciB0aGVzZSBob3N0cy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAorICAgICAgJFNFRCAnc3wvXChbQS1aYS16XTpcKXxcMXxnJ2AgOzsKKyAgZXNhYworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0uc28KK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCisKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgOzsKKworYWl4WzQtOV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lICcjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gJy4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICRDQyAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIFVzaW5nIEltcG9ydCBGaWxlcyBhcyBhcmNoaXZlIG1lbWJlcnMsIGl0IGlzIHBvc3NpYmxlIHRvIHN1cHBvcnQKKyAgICAjIGZpbGVuYW1lLWJhc2VkIHZlcnNpb25pbmcgb2Ygc2hhcmVkIGxpYnJhcnkgYXJjaGl2ZXMgb24gQUlYLiBXaGlsZQorICAgICMgdGhpcyB3b3VsZCB3b3JrIGZvciBib3RoIHdpdGggYW5kIHdpdGhvdXQgcnVudGltZSBsaW5raW5nLCBpdCB3aWxsCisgICAgIyBwcmV2ZW50IHN0YXRpYyBsaW5raW5nIG9mIHN1Y2ggYXJjaGl2ZXMuIFNvIHdlIGRvIGZpbGVuYW1lLWJhc2VkCisgICAgIyBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIHdpdGggLnNvIGV4dGVuc2lvbiBvbmx5LCB3aGljaCBpcyB1c2VkCisgICAgIyB3aGVuIGJvdGggcnVudGltZSBsaW5raW5nIGFuZCBzaGFyZWQgbGlua2luZyBpcyBlbmFibGVkLgorICAgICMgVW5mb3J0dW5hdGVseSwgcnVudGltZSBsaW5raW5nIG1heSBpbXBhY3QgcGVyZm9ybWFuY2UsIHNvIHdlIGRvCisgICAgIyBub3Qgd2FudCB0aGlzIHRvIGJlIHRoZSBkZWZhdWx0IGV2ZW50dWFsbHkuIEFsc28sIHdlIHVzZSB0aGUKKyAgICAjIHZlcnNpb25lZCAuc28gbGlicyBmb3IgZXhlY3V0YWJsZXMgb25seSBpZiB0aGVyZSBpcyB0aGUgLWJydGwKKyAgICAjIGxpbmtlciBmbGFnIGluIExERkxBR1MgYXMgd2VsbCwgb3IgLS13aXRoLWFpeC1zb25hbWU9c3ZyNCBvbmx5LgorICAgICMgVG8gYWxsb3cgZm9yIGZpbGVuYW1lLWJhc2VkIHZlcnNpb25pbmcgc3VwcG9ydCwgd2UgbmVlZCB0byBjcmVhdGUKKyAgICAjIGxpYk5BTUUuc28uViBhcyBhbiBhcmNoaXZlIGZpbGUsIGNvbnRhaW5pbmc6CisgICAgIyAqKSBhbiBJbXBvcnQgRmlsZSwgcmVmZXJyaW5nIHRvIHRoZSB2ZXJzaW9uZWQgZmlsZW5hbWUgb2YgdGhlCisgICAgIyAgICBhcmNoaXZlIGFzIHdlbGwgYXMgdGhlIHNoYXJlZCBhcmNoaXZlIG1lbWJlciwgdGVsbGluZyB0aGUKKyAgICAjICAgIGJpdHdpZHRoICgzMiBvciA2NCkgb2YgdGhhdCBzaGFyZWQgb2JqZWN0LCBhbmQgcHJvdmlkaW5nIHRoZQorICAgICMgICAgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzIG9mIHRoYXQgc2hhcmVkIG9iamVjdCwgZXZlbnR1YWxseQorICAgICMgICAgZGVjb3JhdGVkIHdpdGggdGhlICd3ZWFrJyBrZXl3b3JkCisgICAgIyAqKSB0aGUgc2hhcmVkIG9iamVjdCB3aXRoIHRoZSBGX0xPQURPTkxZIGZsYWcgc2V0LCB0byByZWFsbHkgYXZvaWQKKyAgICAjICAgIGl0IGJlaW5nIHNlZW4gYnkgdGhlIGxpbmtlci4KKyAgICAjIEF0IHJ1biB0aW1lIHdlIGJldHRlciB1c2UgdGhlIHJlYWwgZmlsZSByYXRoZXIgdGhhbiBhbm90aGVyIHN5bWxpbmssCisgICAgIyBidXQgZm9yIGxpbmsgdGltZSB3ZSBjcmVhdGUgdGhlIHN5bWxpbmsgbGliTkFNRS5zbyAtPiBsaWJOQU1FLnNvLlYKKworICAgIGNhc2UgJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgorICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW5ub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGFpeCx5ZXMpICMgdHJhZGl0aW9uYWwgbGlidG9vbAorICAgICAgZHluYW1pY19saW5rZXI9J0FJWCB1bnZlcnNpb25hYmxlIGxpYi5zbycKKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgYWl4LG5vKSAjIHRyYWRpdGlvbmFsIEFJWCBvbmx5CisgICAgICBkeW5hbWljX2xpbmtlcj0nQUlYIGxpYi5hKGxpYi5zby5WKScKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgICAgOzsKKyAgICBzdnI0LCopICMgZnVsbCBzdnI0IG9ubHkKKyAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLnNvLlYoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgICMgV2UgZG8gbm90IHNwZWNpZnkgYSBwYXRoIGluIEltcG9ydCBGaWxlcywgc28gTElCUEFUSCBmaXJlcy4KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICAgIDs7CisgICAgKix5ZXMpICMgYm90aCwgcHJlZmVyIHN2cjQKKyAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLnNvLlYoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pLCBsaWIuYShsaWIuc28uVikiCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgIyB1bnByZWZlcnJlZCBzaGFyZWRsaWIgbGliTkFNRS5hIG5lZWRzIGV4dHJhIGhhbmRsaW5nCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSd0ZXN0IC1uICIkbGlua25hbWUiIHx8IGxpbmtuYW1lPSIkcmVhbG5hbWUifmZ1bmNfc3RyaXBuYW1lICIiICIuc28iICIkbGlua25hbWUifiRpbnN0YWxsX3NoYXJlZF9wcm9nICIkZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCIgIiRkZXN0ZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCJ+dGVzdCAteiAiJHRzdHJpcG1lIiB8fCB0ZXN0IC16ICIkc3RyaXBsaWIiIHx8ICRzdHJpcGxpYiAiJGRlc3RkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IicKKyAgICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXMgJG9sZF9saWJyYXJ5OyBkbyA6OyBkb25lfmZ1bmNfc3RyaXBuYW1lICIiICIuc28iICIkbiJ+dGVzdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIgPSAiJG4iIHx8IGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiJworICAgICAgIyBXZSBkbyBub3Qgc3BlY2lmeSBhIHBhdGggaW4gSW1wb3J0IEZpbGVzLCBzbyBMSUJQQVRIIGZpcmVzLgorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgICAgOzsKKyAgICAqLG5vKSAjIGJvdGgsIHByZWZlciBhaXgKKyAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLmEobGliLnNvLlYpLCBsaWIuc28uVigkc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubykiCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICAgICMgdW5wcmVmZXJyZWQgc2hhcmVkbGliIGxpYk5BTUUuc28uViBhbmQgc3ltbGluayBsaWJOQU1FLnNvIG5lZWQgZXh0cmEgaGFuZGxpbmcKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9J3Rlc3QgLXogIiRkbG5hbWUiIHx8ICRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJGRsbmFtZSAkZGVzdGRpci8kZGxuYW1lfnRlc3QgLXogIiR0c3RyaXBtZSIgfHwgdGVzdCAteiAiJHN0cmlwbGliIiB8fCAkc3RyaXBsaWIgJGRlc3RkaXIvJGRsbmFtZX50ZXN0IC1uICIkbGlua25hbWUiIHx8IGxpbmtuYW1lPSRyZWFsbmFtZX5mdW5jX3N0cmlwbmFtZSAiIiAiLmEiICIkbGlua25hbWUifihjZCAiJGRlc3RkaXIiICYmICRMTl9TIC1mICRkbG5hbWUgJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5zbyknCisgICAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J3Rlc3QgLXogIiRkbG5hbWUiIHx8IGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZGxuYW1lIn5mb3IgbiBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvIDo7IGRvbmV+ZnVuY19zdHJpcG5hbWUgIiIgIi5hIiAiJG4ifmZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LnNvIicKKyAgICAgIDs7CisgICAgZXNhYworICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0JworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGlbNDVdKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9LmRsbAorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorICB5ZXMsKikKKyAgICAjIGdjYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgICBmaScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiCisgICAgICA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgZXNhYworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKworICAqLGNsKikKKyAgICAjIE5hdGl2ZSBNU1ZDCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmxpYicKKworICAgIGNhc2UgJGJ1aWxkX29zIGluCisgICAgbWluZ3cqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorICAgICAgbHRfc2F2ZV9pZnM9JElGUworICAgICAgSUZTPSc7JworICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorICAgICAgZG8KKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFthLXpBLVpdXFwpOnwgL1xcMXxnJyAtZSAnc3xeIHx8J2AKKyAgICAgIDs7CisgICAgY3lnd2luKikKKyAgICAgICMgQ29udmVydCB0byB1bml4IGZvcm0sIHRoZW4gdG8gZG9zIGZvcm0sIHRoZW4gYmFjayB0byB1bml4IGZvcm0KKyAgICAgICMgYnV0IHRoaXMgdGltZSBkb3Mgc3R5bGUgKG5vIHNwYWNlcyEpIHNvIHRoYXQgdGhlIHVuaXggZm9ybSBsb29rcworICAgICAgIyBsaWtlIC9jeWdkcml2ZS9jL1BST0dSQX4xOi9jeWdkci4uLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRMSUIiYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLWRvcyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgMj4vZGV2L251bGxgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgOzsKKyAgICAqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRMSUIKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgIDs7CisKKyAgKikKKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCAkbGlibmFtZS5saWInCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworICBlc2FjCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkWzIzXS4qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMi4qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAorICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2hhaWt1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgaWYgdGVzdCAzMiA9ICIkSFBVWF9JQTY0X01PREUiOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4MzIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0vdXNyL2xpYi9ocHV4NjQKKyAgICBmaQorICAgIDs7CisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisgIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKKyAgOzsKKworaW50ZXJpeFszLTldKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIC91c3IvbG9jYWwvbGliJGxpYnN1ZmYiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitsaW51eCphbmRyb2lkKikKKyAgdmVyc2lvbl90eXBlPW5vbmUgIyBBbmRyb2lkIGRvZXNuJ3Qgc3VwcG9ydCB2ZXJzaW9uZWQgbGlicmFyaWVzLgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBmaW5pc2hfY21kcz0KKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgIGR5bmFtaWNfbGlua2VyPSdBbmRyb2lkIGxpbmtlcicKKyAgIyBEb24ndCBlbWJlZCAtcnBhdGggZGlyZWN0b3JpZXMgc2luY2UgdGhlIGxpbmtlciBkb2Vzbid0IHN1cHBvcnQgdGhlbS4KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgaWYgJHtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorCitmaQorCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBJZGVhbGx5LCB3ZSBjb3VsZCB1c2UgbGRjb25maWcgdG8gcmVwb3J0ICphbGwqIGRpcmVjdG9yZXMgd2hpY2ggYXJlCisgICMgc2VhcmNoZWQgZm9yIGxpYnJhcmllcywgaG93ZXZlciB0aGlzIGlzIHN0aWxsIG5vdCBwb3NzaWJsZS4gIEFzaWRlIGZyb20gbm90CisgICMgYmVpbmcgY2VydGFpbiAvc2Jpbi9sZGNvbmZpZyBpcyBhdmFpbGFibGUsIGNvbW1hbmQKKyAgIyAnbGRjb25maWcgLU4gLVggLXYgfCBncmVwIF4vJyBvbiA2NGJpdCBGZWRvcmEgZG9lcyBub3QgcmVwb3J0IC91c3IvbGliNjQsCisgICMgZXZlbiB0aG91Z2ggaXQgaXMgc2VhcmNoZWQgYXQgcnVuLXRpbWUuICBUcnkgdG8gZG8gdGhlIGJlc3QgZ3Vlc3MgYnkKKyAgIyBhcHBlbmRpbmcgbGQuc28uY29uZiBjb250ZW50cyAoYW5kIGluY2x1ZGVzKSB0byB0aGUgc2VhcmNoIHBhdGguCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCogfCBiaXRyaWcqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorICAgIG5lZWRfdmVyc2lvbj1ubworICBlbHNlCisgICAgbmVlZF92ZXJzaW9uPXllcworICBmaQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9LmRsbAorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgT1MvMiBjYW4gb25seSBsb2FkIGEgRExMIHdpdGggYSBiYXNlIG5hbWUgb2YgOCBjaGFyYWN0ZXJzIG9yIGxlc3MuCisgIHNvbmFtZV9zcGVjPSdgdGVzdCAtbiAiJG9zMmRsbG5hbWUiICYmIGxpYm5hbWU9IiRvczJkbGxuYW1lIjsKKyAgICB2PSQoJEVDSE8gJHJlbGVhc2UkdmVyc3VmZml4IHwgdHIgLWQgLi0pOworICAgIG49JCgkRUNITyAkbGlibmFtZSB8IGN1dCAtYiAtJCgoOCAtICR7I3Z9KSkgfCB0ciAuIF8pOworICAgICRFQ0hPICRuJHZgJHNoYXJlZF9leHQnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfV9kbGwuJGxpYmV4dCcKKyAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJworICBzaGxpYnBhdGhfdmFyPUJFR0lOTElCUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgJEVDSE8gXCRkbG5hbWUnXCcnYH4KKyAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWV+CisgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgIGV2YWwgJ1wnJyRzdHJpcGxpYiBcJGRsZGlyLyRkbG5hbWUnXCcnIHx8IGV4aXQgXCQ/OworICAgIGZpJworICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgJEVDSE8gXCRkbG5hbWUnXCcnYH4KKyAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICRSTSBcJGRscGF0aCcKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICB2ZXJzaW9uX3R5cGU9b3NmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgIDs7CisKK3Jkb3MqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitzb2xhcmlzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgIHNuaSkKKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9c2NvCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9Cit0ZXN0IG5vID0gIiRkeW5hbWljX2xpbmtlciIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCitmaQorCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworZmkKKworIyByZW1lbWJlciB1bmF1Z21lbnRlZCBzeXNfbGliX2Rsc2VhcmNoX3BhdGggY29udGVudCBmb3IgbGlidG9vbCBzY3JpcHQgZGVjbHMuLi4KK2NvbmZpZ3VyZV90aW1lX2Rsc2VhcmNoX3BhdGg9JHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgLi4uIGJ1dCBpdCBuZWVkcyBMVF9TWVNfTElCUkFSWV9QQVRIIG11bmdpbmcgZm9yIG90aGVyIGNvbmZpZ3VyZS10aW1lIGNvZGUKK2Z1bmNfbXVuZ2VfcGF0aF9saXN0IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjICIkTFRfU1lTX0xJQlJBUllfUEFUSCIKKworIyB0byBiZSB1c2VkIGFzIGRlZmF1bHQgTFRfU1lTX0xJQlJBUllfUEFUSCB2YWx1ZSBpbiBnZW5lcmF0ZWQgbGlidG9vbAorY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aD0kTFRfU1lTX0xJQlJBUllfUEFUSAorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CitoYXJkY29kZV9hY3Rpb249CitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwKKyAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwKKyAgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiOyB0aGVuCisKKyAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0ZW50IGRpcmVjdG9yaWVzLgorICBpZiB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCApIiAmJgorICAgICB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIGhhcmRjb2RlX2FjdGlvbj1yZWxpbmsKKyAgZWxzZQorICAgICMgV2UgY2FuIGxpbmsgd2l0aG91dCBoYXJkY29kaW5nLCBhbmQgd2UgY2FuIGhhcmRjb2RlIG5vbmV4aXN0aW5nIGRpcnMuCisgICAgaGFyZGNvZGVfYWN0aW9uPWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBoYXJkY29kZV9hY3Rpb249dW5zdXBwb3J0ZWQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CiskYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9CisKK2lmIHRlc3QgcmVsaW5rID0gIiRoYXJkY29kZV9hY3Rpb24iIHx8CisgICB0ZXN0IHllcyA9ICIkaW5oZXJpdF9ycGF0aCI7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfHwKKyAgICAgdGVzdCBubyA9ICIkZW5hYmxlX3NoYXJlZCI7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworCisKKworCisgIGlmIHRlc3QgeWVzICE9ICIkZW5hYmxlX2Rsb3BlbiI7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49bG9hZF9hZGRfb24KKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICA7OworCisgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGx0X2N2X2Rsb3Blbj1Mb2FkTGlicmFyeQorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ZGxvcGVuCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBkYXJ3aW4qKQorICAgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbAorZWxzZQorCisgICAgbHRfY3ZfZGxvcGVuPWR5bGQKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKworZmkKKworICAgIDs7CisKKyAgdHBmKikKKyAgICAjIERvbid0IHRyeSB0byBydW4gYW55IGxpbmsgdGVzdHMgZm9yIFRQRi4gIFdlIGtub3cgaXQncyBpbXBvc3NpYmxlCisgICAgIyBiZWNhdXNlIFRQRiBpcyBhIGNyb3NzLWNvbXBpbGVyLCBhbmQgd2Uga25vdyBob3cgd2Ugb3BlbiBEU09zLgorICAgIGx0X2N2X2Rsb3Blbj1kbG9wZW4KKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubworICAgIDs7CisKKyAgKikKKyAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaGxfbG9hZCIgImFjX2N2X2Z1bmNfc2hsX2xvYWQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2hsX2xvYWQiID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj1zaGxfbG9hZAorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igc2hsX2xvYWQgaW4gLWxkbGQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGxkICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzaGxfbG9hZCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNobF9sb2FkICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49c2hsX2xvYWQgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGQKK2Vsc2UKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZGxvcGVuIiAiYWNfY3ZfZnVuY19kbG9wZW4iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ZGxvcGVuCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGwKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sc3ZsZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfc3ZsZF9kbG9wZW4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHN2bGQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRsb3BlbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc3ZsZF9kbG9wZW49eWVzCitlbHNlCisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxzdmxkCitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxkX2RsZF9saW5rKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxkbGQgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRsZF9saW5rICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxkX2xpbmsgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID0geHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbj1kbGRfbGluayBsdF9jdl9kbG9wZW5fbGlicz0tbGRsZAorZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCBubyA9ICIkbHRfY3ZfZGxvcGVuIjsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworICAgIHRlc3QgeWVzID0gIiRhY19jdl9oZWFkZXJfZGxmY25faCIgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0kTElCUworICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAJICBpZiB0ZXN0IHllcyA9ICIkY3Jvc3NfY29tcGlsaW5nIjsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNpYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfQorX0xUX0VPRgorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgImNvbmZ0ZXN0JGFjX2V4ZWV4dCIgMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSBsdF9jdl9kbG9wZW5fc2VsZj15ZXMgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzIDs7CisgICAgICB4JGx0X2RsdW5rbm93bnx4KikgbHRfY3ZfZGxvcGVuX3NlbGY9bm8gOzsKKyAgICBlc2FjCisgIGVsc2UgOgorICAgICMgY29tcGlsYXRpb24gZmFpbGVkCisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZiIgPiY2OyB9CisKKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfZGxvcGVuX3NlbGYiOyB0aGVuCisgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgCSAgaWYgdGVzdCB5ZXMgPSAiJGNyb3NzX2NvbXBpbGluZyI7IHRoZW4gOgorICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MKK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2xpbmUgJExJTkVOTyAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2hlbiAtZnZpc2liaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCitpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CisjZW5kaWYKKworaW50IGZub3JkICgpIHsgcmV0dXJuIDQyOyB9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlCisgICAgICAgIHsKKwkgIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpICBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgICAgICBlbHNlIHB1dHMgKGRsZXJyb3IgKCkpOworCX0KKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgIHJldHVybiBzdGF0dXM7Cit9CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiY29uZnRlc3QkYWNfZXhlZXh0IiAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcyA7OworICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KKyAgICBmaQorCisgICAgQ1BQRkxBR1M9JHNhdmVfQ1BQRkxBR1MKKyAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKKyAgICBMSUJTPSRzYXZlX0xJQlMKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgIGVsc2UKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICA7OworICBlc2FjCitmaQorCisKKworCisKKworCisKKworCisKKworICAjIFJlcG9ydCB3aGF0IGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkY2FuX2J1aWxkX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICBmaQorICAgIDs7CisKKyAgYWl4WzQtOV0qKQorICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICAgY2FzZSAkZW5hYmxlX3NoYXJlZCwkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgICB5ZXMsYWl4LHllcykgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQorICAgICAgeWVzLHN2cjQsKikgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKKyAgICAgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3NoYXJlZCIgPiY2OyB9CisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKKyRhc19lY2hvICIkZW5hYmxlX3N0YXRpYyIgPiY2OyB9CisKKworCisKK2ZpCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK0NDPSRsdF9zYXZlX0NDCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgICAgIGFjX2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBsaWJ0b29sIgorCisKKworCisjIE9ubHkgZXhwYW5kIG9uY2U6CisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gIiA+JjY7IH0KK0xOX1M9JGFzX2xuX3MKK2lmIHRlc3QgIiRMTl9TIiA9ICJsbiAtcyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1CiskYXNfZWNobyAibm8sIHVzaW5nICRMTl9TIiA+JjY7IH0KK2ZpCisKKworIyBDaGVjayBmb3IgR0NDIHZpc2liaWxpdHkgZmVhdHVyZQorCisKKworICBWSVNJQklMSVRZX0NGTEFHUz0KKyAgVklTSUJJTElUWV9DWFhGTEFHUz0KKyAgSEFWRV9WSVNJQklMSVRZPTAKKyAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4KKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIC1XZXJyb3Igb3B0aW9uIGlzIHVzYWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAtV2Vycm9yIG9wdGlvbiBpcyB1c2FibGUuLi4gIiA+JjY7IH0KKyAgICBpZiAke3BjcmUyX2N2X2NjX3Zpc193ZXJyb3IrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICBwY3JlMl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIHBjcmUyX2N2X2NjX3Zpc193ZXJyb3I9eWVzCitlbHNlCisgIHBjcmUyX2N2X2NjX3Zpc193ZXJyb3I9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgIENGTEFHUz0iJHBjcmUyX3NhdmVfQ0ZMQUdTIgorZmkKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkcGNyZTJfY3ZfY2NfdmlzX3dlcnJvciIgPiY1CiskYXNfZWNobyAiJHBjcmUyX2N2X2NjX3Zpc193ZXJyb3IiID4mNjsgfQorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzaW1wbGUgdmlzaWJpbGl0eSBkZWNsYXJhdGlvbnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNpbXBsZSB2aXNpYmlsaXR5IGRlY2xhcmF0aW9ucy4uLiAiID4mNjsgfQorICAgIGlmICR7cGNyZTJfY3ZfY2NfdmlzaWJpbGl0eSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgIHBjcmUyX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1mdmlzaWJpbGl0eT1oaWRkZW4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICRwY3JlMl9jdl9jY192aXNfd2Vycm9yID0geWVzOyB0aGVuCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIgorICAgICAgZmkKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK2V4dGVybiBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiaGlkZGVuIikpKSBpbnQgaGlkZGVudmFyOworICAgICAgICAgICAgIGV4dGVybiBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiZGVmYXVsdCIpKSkgaW50IGV4cG9ydGVkdmFyOworICAgICAgICAgICAgIGV4dGVybiBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiaGlkZGVuIikpKSBpbnQgaGlkZGVuZnVuYyAodm9pZCk7CisgICAgICAgICAgICAgZXh0ZXJuIF9fYXR0cmlidXRlX18oKF9fdmlzaWJpbGl0eV9fKCJkZWZhdWx0IikpKSBpbnQgZXhwb3J0ZWRmdW5jICh2b2lkKTsKKyAgICAgICAgICAgICB2b2lkIGR1bW15ZnVuYyAodm9pZCkge30KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBwY3JlMl9jdl9jY192aXNpYmlsaXR5PXllcworZWxzZQorICBwY3JlMl9jdl9jY192aXNpYmlsaXR5PW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICBDRkxBR1M9IiRwY3JlMl9zYXZlX0NGTEFHUyIKK2ZpCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHBjcmUyX2N2X2NjX3Zpc2liaWxpdHkiID4mNQorJGFzX2VjaG8gIiRwY3JlMl9jdl9jY192aXNpYmlsaXR5IiA+JjY7IH0KKyAgICBpZiB0ZXN0ICRwY3JlMl9jdl9jY192aXNpYmlsaXR5ID0geWVzOyB0aGVuCisgICAgICBWSVNJQklMSVRZX0NGTEFHUz0iLWZ2aXNpYmlsaXR5PWhpZGRlbiIKKyAgICAgIFZJU0lCSUxJVFlfQ1hYRkxBR1M9Ii1mdmlzaWJpbGl0eT1oaWRkZW4gLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIgorICAgICAgSEFWRV9WSVNJQklMSVRZPTEKKworJGFzX2VjaG8gIiNkZWZpbmUgUENSRTJfRVhQX0RFQ0wgZXh0ZXJuIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5IChcImRlZmF1bHRcIikpKSIgPj5jb25mZGVmcy5oCisKKworJGFzX2VjaG8gIiNkZWZpbmUgUENSRTJfRVhQX0RFRk4gX19hdHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKFwiZGVmYXVsdFwiKSkpIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBQQ1JFMlBPU0lYX0VYUF9ERUNMIGV4dGVybiBfX2F0dHJpYnV0ZV9fICgodmlzaWJpbGl0eSAoXCJkZWZhdWx0XCIpKSkiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIFBDUkUyUE9TSVhfRVhQX0RFRk4gZXh0ZXJuIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5IChcImRlZmF1bHRcIikpKSIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorICBmaQorCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVklTSUJJTElUWSAkSEFWRV9WSVNJQklMSVRZCitfQUNFT0YKKworCisKKyMgVmVyc2lvbmluZworCitQQ1JFMl9NQUpPUj0iMTAiCitQQ1JFMl9NSU5PUj0iMjEiCitQQ1JFMl9QUkVSRUxFQVNFPSIiCitQQ1JFMl9EQVRFPSIyMDE2LTAxLTEyIgorCitpZiB0ZXN0ICIkUENSRTJfTUlOT1IiID0gIjA4IiAtbyAiJFBDUkUyX01JTk9SIiA9ICIwOSIKK3RoZW4KKyAgZWNobyAiKioqIgorICBlY2hvICIqKiogTWlub3IgdmVyc2lvbiBudW1iZXIgJFBDUkUyX01JTk9SIG11c3Qgbm90IGJlIHVzZWQuICoqKiIKKyAgZWNobyAiKioqIFVzZSBvbmx5IDAwIHRvIDA3IG9yIDEwIG9ud2FyZHMsIHRvIGF2b2lkIG9jdGFsIGlzc3Vlcy4gKioqIgorICBlY2hvICIqKioiCisgIGV4aXQgMQorZmkKKworCisKKworCisKKyMgU2V0IGEgbW9yZSBzZW5zaWJsZSBkZWZhdWx0IHZhbHVlIGZvciAkKGh0bWxkaXIpLgoraWYgdGVzdCAieCRodG1sZGlyIiA9ICd4JHtkb2NkaXJ9JwordGhlbgorICBodG1sZGlyPScke2RvY2Rpcn0vaHRtbCcKK2ZpCisKKyMgRm9yY2UgYW4gZXJyb3IgZm9yIFBDUkUxIHNpemUgb3B0aW9ucworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBjcmU4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BjcmU4K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGNyZTg7CitlbHNlCisgIGVuYWJsZV9wY3JlOD1ubworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBjcmUxNiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wY3JlMTYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wY3JlMTY7CitlbHNlCisgIGVuYWJsZV9wY3JlMTY9bm8KK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wY3JlMzIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcGNyZTMyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGNyZTMyOworZWxzZQorICBlbmFibGVfcGNyZTMyPW5vCitmaQorCisKK2lmIHRlc3QgIiRlbmFibGVfcGNyZTgkZW5hYmxlX3BjcmUxNiRlbmFibGVfcGNyZTMyIiAhPSAibm9ub25vIgordGhlbgorICBlY2hvICIqKiBFUlJPUjogVXNlIC0tW2VufGRpc11hYmxlLXBjcmUyLVs4fDE2fDMyXSwgbm90IC0tW2VufGRpc11hYmxlLXBjcmVbOHwxNnwzMl0iCisgIGV4aXQgMQorZmkKKworIyBIYW5kbGUgLS1kaXNhYmxlLXBjcmUyLTggKGVuYWJsZWQgYnkgZGVmYXVsdCkKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wY3JlMi04IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BjcmUyXzgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wY3JlMl84OworZWxzZQorICBlbmFibGVfcGNyZTJfOD11bnNldAorZmkKKworCisKKyMgSGFuZGxlIC0tZW5hYmxlLXBjcmUyLTE2IChkaXNhYmxlZCBieSBkZWZhdWx0KQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBjcmUyLTE2IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BjcmUyXzE2K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGNyZTJfMTY7CitlbHNlCisgIGVuYWJsZV9wY3JlMl8xNj11bnNldAorZmkKKworCisKKyMgSGFuZGxlIC0tZW5hYmxlLXBjcmUyLTMyIChkaXNhYmxlZCBieSBkZWZhdWx0KQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBjcmUyLTMyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BjcmUyXzMyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGNyZTJfMzI7CitlbHNlCisgIGVuYWJsZV9wY3JlMl8zMj11bnNldAorZmkKKworCisKKyMgSGFuZGxlIC0tZG5hYmxlLWRlYnVnIChkaXNhYmxlZCBieSBkZWZhdWx0KQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlYnVnIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVidWc7CitlbHNlCisgIGVuYWJsZV9kZWJ1Zz1ubworZmkKKworCisjIEhhbmRsZSAtLWVuYWJsZS1qaXQgKGRpc2FibGVkIGJ5IGRlZmF1bHQpCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtaml0IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2ppdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2ppdDsKK2Vsc2UKKyAgZW5hYmxlX2ppdD1ubworZmkKKworCisjIEhhbmRsZSAtLWRpc2FibGUtcGNyZTJncmVwLWppdCAoZW5hYmxlZCBieSBkZWZhdWx0KQorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBjcmUyZ3JlcC1qaXQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcGNyZTJncmVwX2ppdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3BjcmUyZ3JlcF9qaXQ7CitlbHNlCisgIGVuYWJsZV9wY3JlMmdyZXBfaml0PXllcworZmkKKworCisjIEhhbmRsZSAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcmVidWlsZF9jaGFydGFibGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcmVidWlsZF9jaGFydGFibGVzOworZWxzZQorICBlbmFibGVfcmVidWlsZF9jaGFydGFibGVzPW5vCitmaQorCisKKyMgSGFuZGxlIC0tZGlzYWJsZS11bmljb2RlIChlbmFibGVkIGJ5IGRlZmF1bHQpCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdW5pY29kZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV91bmljb2RlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfdW5pY29kZTsKK2Vsc2UKKyAgZW5hYmxlX3VuaWNvZGU9dW5zZXQKK2ZpCisKKworIyBIYW5kbGUgbmV3bGluZSBvcHRpb25zCithY19wY3JlMl9uZXdsaW5lPWxmCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmV3bGluZS1pcy1jciB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9uZXdsaW5lX2lzX2NyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3bGluZV9pc19jcjsgYWNfcGNyZTJfbmV3bGluZT1jcgorZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ld2xpbmUtaXMtbGYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbmV3bGluZV9pc19sZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25ld2xpbmVfaXNfbGY7IGFjX3BjcmUyX25ld2xpbmU9bGYKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXdsaW5lLWlzLWNybGYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbmV3bGluZV9pc19jcmxmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3bGluZV9pc19jcmxmOyBhY19wY3JlMl9uZXdsaW5lPWNybGYKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXdsaW5lLWlzLWFueWNybGYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbmV3bGluZV9pc19hbnljcmxmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3bGluZV9pc19hbnljcmxmOyBhY19wY3JlMl9uZXdsaW5lPWFueWNybGYKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXdsaW5lLWlzLWFueSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9uZXdsaW5lX2lzX2FueStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25ld2xpbmVfaXNfYW55OyBhY19wY3JlMl9uZXdsaW5lPWFueQorZmkKKworZW5hYmxlX25ld2xpbmU9IiRhY19wY3JlMl9uZXdsaW5lIgorCisjIEhhbmRsZSAtLWVuYWJsZS1ic3ItYW55Y3JsZgorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWJzci1hbnljcmxmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2Jzcl9hbnljcmxmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYnNyX2FueWNybGY7CitlbHNlCisgIGVuYWJsZV9ic3JfYW55Y3JsZj1ubworZmkKKworCisjIEhhbmRsZSAtLWVuYWJsZS1uZXZlci1iYWNrc2xhc2gtQworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5ldmVyLWJhY2tzbGFzaC1DIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25ldmVyX2JhY2tzbGFzaF9DK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbmV2ZXJfYmFja3NsYXNoX0M7CitlbHNlCisgIGVuYWJsZV9uZXZlcl9iYWNrc2xhc2hfQz1ubworZmkKKworCisjIEhhbmRsZSAtLWVuYWJsZS1lYmNkaWMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lYmNkaWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZWJjZGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZWJjZGljOworZWxzZQorICBlbmFibGVfZWJjZGljPW5vCitmaQorCisKKyMgSGFuZGxlIC0tZW5hYmxlLWViY2RpYy1ubDI1CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZWJjZGljLW5sMjUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZWJjZGljX25sMjUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9lYmNkaWNfbmwyNTsKK2Vsc2UKKyAgZW5hYmxlX2ViY2RpY19ubDI1PW5vCitmaQorCisKKyMgSGFuZGxlIC0tZGlzYWJsZS1zdGFjay1mb3ItcmVjdXJzaW9uCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3RhY2stZm9yLXJlY3Vyc2lvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zdGFja19mb3JfcmVjdXJzaW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3RhY2tfZm9yX3JlY3Vyc2lvbjsKK2Vsc2UKKyAgZW5hYmxlX3N0YWNrX2Zvcl9yZWN1cnNpb249eWVzCitmaQorCisKKyMgSGFuZGxlIC0tZW5hYmxlLXBjcmUyZ3JlcC1saWJ6CisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGNyZTJncmVwLWxpYnogd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcGNyZTJncmVwX2xpYnorc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wY3JlMmdyZXBfbGliejsKK2Vsc2UKKyAgZW5hYmxlX3BjcmUyZ3JlcF9saWJ6PW5vCitmaQorCisKKyMgSGFuZGxlIC0tZW5hYmxlLXBjcmUyZ3JlcC1saWJiejIKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wY3JlMmdyZXAtbGliYnoyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BjcmUyZ3JlcF9saWJiejIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wY3JlMmdyZXBfbGliYnoyOworZWxzZQorICBlbmFibGVfcGNyZTJncmVwX2xpYmJ6Mj1ubworZmkKKworCisjIEhhbmRsZSAtLXdpdGgtcGNyZTJncmVwLWJ1ZnNpemU9TgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBjcmUyZ3JlcC1idWZzaXplIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wY3JlMmdyZXBfYnVmc2l6ZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGNyZTJncmVwX2J1ZnNpemU7CitlbHNlCisgIHdpdGhfcGNyZTJncmVwX2J1ZnNpemU9MjA0ODAKK2ZpCisKKworIyBIYW5kbGUgLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYmVkaXQKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wY3JlMnRlc3QtbGliZWRpdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wY3JlMnRlc3RfbGliZWRpdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3BjcmUydGVzdF9saWJlZGl0OworZWxzZQorICBlbmFibGVfcGNyZTJ0ZXN0X2xpYmVkaXQ9bm8KK2ZpCisKKworIyBIYW5kbGUgLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYnJlYWRsaW5lCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYnJlYWRsaW5lIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BjcmUydGVzdF9saWJyZWFkbGluZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3BjcmUydGVzdF9saWJyZWFkbGluZTsKK2Vsc2UKKyAgZW5hYmxlX3BjcmUydGVzdF9saWJyZWFkbGluZT1ubworZmkKKworCisjIEhhbmRsZSAtLXdpdGgtbGluay1zaXplPU4KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saW5rLXNpemUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xpbmtfc2l6ZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGlua19zaXplOworZWxzZQorICB3aXRoX2xpbmtfc2l6ZT0yCitmaQorCisKKyMgSGFuZGxlIC0td2l0aC1wYXJlbnMtbmVzdC1saW1pdD1OCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGFyZW5zLW5lc3QtbGltaXQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BhcmVuc19uZXN0X2xpbWl0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9wYXJlbnNfbmVzdF9saW1pdDsKK2Vsc2UKKyAgd2l0aF9wYXJlbnNfbmVzdF9saW1pdD0yNTAKK2ZpCisKKworIyBIYW5kbGUgLS13aXRoLW1hdGNoLWxpbWl0PU4KKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tYXRjaC1saW1pdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWF0Y2hfbGltaXQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21hdGNoX2xpbWl0OworZWxzZQorICB3aXRoX21hdGNoX2xpbWl0PTEwMDAwMDAwCitmaQorCisKKyMgSGFuZGxlIC0td2l0aC1tYXRjaC1saW1pdF9yZWN1cnNpb249TgorIworIyBOb3RlOiBJbiBjb25maWcuaCwgdGhlIGRlZmF1bHQgaXMgdG8gZGVmaW5lIE1BVENIX0xJTUlUX1JFQ1VSU0lPTgorIyBzeW1ib2xpY2FsbHkgYXMgTUFUQ0hfTElNSVQsIHdoaWNoIGluIHR1cm4gaXMgZGVmaW5lZCB0byBiZSBzb21lIG51bWVyaWMKKyMgdmFsdWUgKGUuZy4gMTAwMDAwMDApLiBNQVRDSF9MSU1JVF9SRUNVUlNJT04gY2FuIG90aGVyd2lzZSBiZSBzZXQgdG8gc29tZQorIyBkaWZmZXJlbnQgbnVtZXJpYyB2YWx1ZSAob3IgZXZlbiB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIE1BVENIX0xJTUlULAorIyB0aG91Z2ggbm8gbG9uZ2VyIGRlZmluZWQgaW4gdGVybXMgb2YgdGhlIGxhdHRlcikuCisjCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWF0Y2gtbGltaXQtcmVjdXJzaW9uIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tYXRjaF9saW1pdF9yZWN1cnNpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21hdGNoX2xpbWl0X3JlY3Vyc2lvbjsKK2Vsc2UKKyAgd2l0aF9tYXRjaF9saW1pdF9yZWN1cnNpb249TUFUQ0hfTElNSVQKK2ZpCisKKworIyBIYW5kbGUgLS1lbmFibGUtdmFsZ3JpbmQKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS12YWxncmluZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV92YWxncmluZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3ZhbGdyaW5kOworZWxzZQorICBlbmFibGVfdmFsZ3JpbmQ9bm8KK2ZpCisKKworIyBFbmFibGUgY29kZSBjb3ZlcmFnZSByZXBvcnRzIHVzaW5nIGdjb3YKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jb3ZlcmFnZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9jb3ZlcmFnZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2NvdmVyYWdlOworZWxzZQorICBlbmFibGVfY292ZXJhZ2U9bm8KK2ZpCisKKworIyBTZXQgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHBjcmUyLTgKK2lmIHRlc3QgIngkZW5hYmxlX3BjcmUyXzgiID0gInh1bnNldCIKK3RoZW4KKyAgZW5hYmxlX3BjcmUyXzg9eWVzCitmaQorCisjIFNldCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgcGNyZTItMTYKK2lmIHRlc3QgIngkZW5hYmxlX3BjcmUyXzE2IiA9ICJ4dW5zZXQiCit0aGVuCisgIGVuYWJsZV9wY3JlMl8xNj1ubworZmkKKworIyBTZXQgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHBjcmUyLTMyCitpZiB0ZXN0ICJ4JGVuYWJsZV9wY3JlMl8zMiIgPSAieHVuc2V0IgordGhlbgorICBlbmFibGVfcGNyZTJfMzI9bm8KK2ZpCisKKyMgTWFrZSBzdXJlIGF0IGxlYXN0IG9uZSBsaWJyYXJ5IGlzIHNlbGVjdGVkCitpZiB0ZXN0ICJ4JGVuYWJsZV9wY3JlMl84JGVuYWJsZV9wY3JlMl8xNiRlbmFibGVfcGNyZTJfMzIiID0gInhub25vbm8iCit0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJBdCBsZWFzdCBvbmUgb2YgdGhlIDgsIDE2IG9yIDMyIGJpdCBsaWJyYXJpZXMgbXVzdCBiZSBlbmFibGVkIiAiJExJTkVOTyIgNQorZmkKKworIyBVbmljb2RlIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KK2lmIHRlc3QgIngkZW5hYmxlX3VuaWNvZGUiID0gInh1bnNldCIKK3RoZW4KKyAgZW5hYmxlX3VuaWNvZGU9eWVzCitmaQorCisjIENvbnZlcnQgdGhlIG5ld2xpbmUgaWRlbnRpZmllciBpbnRvIHRoZSBhcHByb3ByaWF0ZSBpbnRlZ2VyIHZhbHVlLiBUaGVzZSBtdXN0CisjIGFncmVlIHdpdGggdGhlIFBDUkUyX05FV0xJTkVfeHh4IHZhbHVlcyBpbiBwY3JlMi5oLgorCitjYXNlICIkZW5hYmxlX25ld2xpbmUiIGluCisgIGNyKSAgICAgIGFjX3BjcmUyX25ld2xpbmVfdmFsdWU9MSA7OworICBsZikgICAgICBhY19wY3JlMl9uZXdsaW5lX3ZhbHVlPTIgOzsKKyAgY3JsZikgICAgYWNfcGNyZTJfbmV3bGluZV92YWx1ZT0zIDs7CisgIGFueSkgICAgIGFjX3BjcmUyX25ld2xpbmVfdmFsdWU9NCA7OworICBhbnljcmxmKSBhY19wY3JlMl9uZXdsaW5lX3ZhbHVlPTUgOzsKKyAgKikKKyAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgYXJndW1lbnQgXCIkZW5hYmxlX25ld2xpbmVcIiB0byAtLWVuYWJsZS1uZXdsaW5lIG9wdGlvbiIgIiRMSU5FTk8iIDUKKyAgOzsKK2VzYWMKKworIyAtLWVuYWJsZS1lYmNkaWMtbmwyNSBpbXBsaWVzIC0tZW5hYmxlLWViY2RpYworaWYgdGVzdCAieCRlbmFibGVfZWJjZGljX25sMjUiID0gInh5ZXMiOyB0aGVuCisgIGVuYWJsZV9lYmNkaWM9eWVzCitmaQorCisjIE1ha2Ugc3VyZSB0aGF0IGlmIGVuYWJsZV9lYmNkaWMgaXMgc2V0LCByZWJ1aWxkX2NoYXJ0YWJsZXMgaXMgYWxzbyBlbmFibGVkLgorIyBBbHNvIGNoZWNrIHRoYXQgVVRGIHN1cHBvcnQgaXMgbm90IHJlcXVlc3RlZCwgYmVjYXVzZSBQQ1JFMiBjYW5ub3QgaGFuZGxlCisjIEVCQ0RJQyBhbmQgVVRGIGluIHRoZSBzYW1lIGJ1aWxkLiBUbyBkbyBzbyBpdCB3b3VsZCBuZWVkIHRvIHVzZSBkaWZmZXJlbnQKKyMgY2hhcmFjdGVyIGNvbnN0YW50cyBkZXBlbmRpbmcgb24gdGhlIG1vZGUuIEFsc28sIEVCQ0RJQyBjYW5ub3QgYmUgdXNlZCB3aXRoCisjIDE2LWJpdCBhbmQgMzItYml0IGxpYnJhcmllcy4KKyMKK2lmIHRlc3QgIngkZW5hYmxlX2ViY2RpYyIgPSAieHllcyI7IHRoZW4KKyAgZW5hYmxlX3JlYnVpbGRfY2hhcnRhYmxlcz15ZXMKKyAgaWYgdGVzdCAieCRlbmFibGVfdW5pY29kZSIgPSAieHllcyI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAic3VwcG9ydCBmb3IgRUJDRElDIGFuZCBVbmljb2RlIGNhbm5vdCBiZSBlbmFibGVkIGF0IHRoZSBzYW1lIHRpbWUiICIkTElORU5PIiA1CisgIGZpCisgIGlmIHRlc3QgIngkZW5hYmxlX3BjcmUyXzE2IiA9ICJ4eWVzIiAtbyAieCRlbmFibGVfcGNyZTJfMzIiID0gInh5ZXMiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkVCQ0RJQyBzdXBwb3J0IGlzIGF2YWlsYWJsZSBvbmx5IGZvciB0aGUgOC1iaXQgbGlicmFyeSIgIiRMSU5FTk8iIDUKKyAgZmkKK2ZpCisKKyMgQ2hlY2sgYXJndW1lbnQgdG8gLS13aXRoLWxpbmstc2l6ZQorY2FzZSAiJHdpdGhfbGlua19zaXplIiBpbgorICAyfDN8NCkgOzsKKyAgKikKKyAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgYXJndW1lbnQgXCIkd2l0aF9saW5rX3NpemVcIiB0byAtLXdpdGgtbGluay1zaXplIG9wdGlvbiIgIiRMSU5FTk8iIDUKKyAgOzsKK2VzYWMKKworCisKKyMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZsb2F0Lmg+CisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgImZyZWUiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgcmV0dXJuIDI7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKK2ZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworZm9yIGFjX2hlYWRlciBpbiBsaW1pdHMuaCBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIGRpcmVudC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK2ZvciBhY19oZWFkZXIgaW4gd2luZG93cy5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ3aW5kb3dzLmgiICJhY19jdl9oZWFkZXJfd2luZG93c19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl93aW5kb3dzX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9XSU5ET1dTX0ggMQorX0FDRU9GCisgSEFWRV9XSU5ET1dTX0g9MQorZmkKKworZG9uZQorCisKKyMgQ29uZGl0aW9uYWwgY29tcGlsYXRpb24KKyBpZiB0ZXN0ICJ4JGVuYWJsZV9wY3JlMl84IiA9ICJ4eWVzIjsgdGhlbgorICBXSVRIX1BDUkUyXzhfVFJVRT0KKyAgV0lUSF9QQ1JFMl84X0ZBTFNFPScjJworZWxzZQorICBXSVRIX1BDUkUyXzhfVFJVRT0nIycKKyAgV0lUSF9QQ1JFMl84X0ZBTFNFPQorZmkKKworIGlmIHRlc3QgIngkZW5hYmxlX3BjcmUyXzE2IiA9ICJ4eWVzIjsgdGhlbgorICBXSVRIX1BDUkUyXzE2X1RSVUU9CisgIFdJVEhfUENSRTJfMTZfRkFMU0U9JyMnCitlbHNlCisgIFdJVEhfUENSRTJfMTZfVFJVRT0nIycKKyAgV0lUSF9QQ1JFMl8xNl9GQUxTRT0KK2ZpCisKKyBpZiB0ZXN0ICJ4JGVuYWJsZV9wY3JlMl8zMiIgPSAieHllcyI7IHRoZW4KKyAgV0lUSF9QQ1JFMl8zMl9UUlVFPQorICBXSVRIX1BDUkUyXzMyX0ZBTFNFPScjJworZWxzZQorICBXSVRIX1BDUkUyXzMyX1RSVUU9JyMnCisgIFdJVEhfUENSRTJfMzJfRkFMU0U9CitmaQorCisgaWYgdGVzdCAieCRlbmFibGVfZGVidWciID0gInh5ZXMiOyB0aGVuCisgIFdJVEhfREVCVUdfVFJVRT0KKyAgV0lUSF9ERUJVR19GQUxTRT0nIycKK2Vsc2UKKyAgV0lUSF9ERUJVR19UUlVFPScjJworICBXSVRIX0RFQlVHX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgIngkZW5hYmxlX3JlYnVpbGRfY2hhcnRhYmxlcyIgPSAieHllcyI7IHRoZW4KKyAgV0lUSF9SRUJVSUxEX0NIQVJUQUJMRVNfVFJVRT0KKyAgV0lUSF9SRUJVSUxEX0NIQVJUQUJMRVNfRkFMU0U9JyMnCitlbHNlCisgIFdJVEhfUkVCVUlMRF9DSEFSVEFCTEVTX1RSVUU9JyMnCisgIFdJVEhfUkVCVUlMRF9DSEFSVEFCTEVTX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgIngkZW5hYmxlX2ppdCIgPSAieHllcyI7IHRoZW4KKyAgV0lUSF9KSVRfVFJVRT0KKyAgV0lUSF9KSVRfRkFMU0U9JyMnCitlbHNlCisgIFdJVEhfSklUX1RSVUU9JyMnCisgIFdJVEhfSklUX0ZBTFNFPQorZmkKKworIGlmIHRlc3QgIngkZW5hYmxlX3VuaWNvZGUiID0gInh5ZXMiOyB0aGVuCisgIFdJVEhfVU5JQ09ERV9UUlVFPQorICBXSVRIX1VOSUNPREVfRkFMU0U9JyMnCitlbHNlCisgIFdJVEhfVU5JQ09ERV9UUlVFPScjJworICBXSVRIX1VOSUNPREVfRkFMU0U9CitmaQorCisgaWYgdGVzdCAieCRlbmFibGVfdmFsZ3JpbmQiID0gInh5ZXMiOyB0aGVuCisgIFdJVEhfVkFMR1JJTkRfVFJVRT0KKyAgV0lUSF9WQUxHUklORF9GQUxTRT0nIycKK2Vsc2UKKyAgV0lUSF9WQUxHUklORF9UUlVFPScjJworICBXSVRIX1ZBTEdSSU5EX0ZBTFNFPQorZmkKKworCisjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbiBBTlNJIEMtY29uZm9ybWluZyBjb25zdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9jX2NvbnN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworI2lmbmRlZiBfX2NwbHVzcGx1cworICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMgc29ydCBvZiB0aGluZy4gICovCisgIHR5cGVkZWYgaW50IGNoYXJzZXRbMl07CisgIGNvbnN0IGNoYXJzZXQgY3MgPSB7IDAsIDAgfTsKKyAgLyogU3VuT1MgNC4xLjEgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgY2hhciBjb25zdCAqY29uc3QgKnBjcGNjOworICBjaGFyICoqcHBjOworICAvKiBORUMgU1ZSNC4wLjIgbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICBzdHJ1Y3QgcG9pbnQge2ludCB4LCB5O307CisgIHN0YXRpYyBzdHJ1Y3QgcG9pbnQgY29uc3QgemVybyA9IHswLDB9OworICAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMuCisgICAgIEl0IGRvZXMgbm90IGxldCB5b3Ugc3VidHJhY3Qgb25lIGNvbnN0IFgqIHBvaW50ZXIgZnJvbSBhbm90aGVyIGluCisgICAgIGFuIGFybSBvZiBhbiBpZi1leHByZXNzaW9uIHdob3NlIGlmLXBhcnQgaXMgbm90IGEgY29uc3RhbnQKKyAgICAgZXhwcmVzc2lvbiAqLworICBjb25zdCBjaGFyICpnID0gInN0cmluZyI7CisgIHBjcGNjID0gJmcgKyAoZyA/IGctZyA6IDApOworICAvKiBIUFVYIDcuMCBjYyByZWplY3RzIHRoZXNlLiAqLworICArK3BjcGNjOworICBwcGMgPSAoY2hhcioqKSBwY3BjYzsKKyAgcGNwY2MgPSAoY2hhciBjb25zdCAqY29uc3QgKikgcHBjOworICB7IC8qIFNDTyAzLjJ2NCBjYyByZWplY3RzIHRoaXMgc29ydCBvZiB0aGluZy4gICovCisgICAgY2hhciB0eDsKKyAgICBjaGFyICp0ID0gJnR4OworICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisKKyAgICAqdCsrID0gMDsKKyAgICBpZiAocykgcmV0dXJuIDA7CisgIH0KKyAgeyAvKiBTb21lb25lIHRoaW5rcyB0aGUgU3VuIHN1cHBvc2VkbHktQU5TSSBjb21waWxlciB3aWxsIHJlamVjdCB0aGlzLiAgKi8KKyAgICBpbnQgeFtdID0gezI1LCAxN307CisgICAgY29uc3QgaW50ICpmb28gPSAmeFswXTsKKyAgICArK2ZvbzsKKyAgfQorICB7IC8qIFN1biBTQzEuMCBBTlNJIGNvbXBpbGVyIHJlamVjdHMgdGhpcyAtLSBidXQgbm90IHRoZSBhYm92ZS4gKi8KKyAgICB0eXBlZGVmIGNvbnN0IGludCAqaXB0cjsKKyAgICBpcHRyIHAgPSAwOworICAgICsrcDsKKyAgfQorICB7IC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcyBzb3J0IG9mIHRoaW5nLCBzYXlpbmcKKyAgICAgICAiay5jIiwgbGluZSAyLjI3OiAxNTA2LTAyNSAoUykgT3BlcmFuZCBtdXN0IGJlIGEgbW9kaWZpYWJsZSBsdmFsdWUuICovCisgICAgc3RydWN0IHMgeyBpbnQgajsgY29uc3QgaW50ICphcFszXTsgfSBieDsKKyAgICBzdHJ1Y3QgcyAqYiA9ICZieDsgYi0+aiA9IDU7CisgIH0KKyAgeyAvKiBVTFRSSVgtMzIgVjMuMSAoUmV2IDkpIHZjYyByZWplY3RzIHRoaXMgKi8KKyAgICBjb25zdCBpbnQgZm9vID0gMTA7CisgICAgaWYgKCFmb28pIHJldHVybiAwOworICB9CisgIHJldHVybiAhY3NbMF0gJiYgIXplcm8ueDsKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19jb25zdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfY19jb25zdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2NfY29uc3QiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfY19jb25zdCA9IG5vOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIGNvbnN0IC8qKi8iID4+Y29uZmRlZnMuaAorCitmaQorCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzaXplX3QiICJhY19jdl90eXBlX3NpemVfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NpemVfdCIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIHNpemVfdCB1bnNpZ25lZCBpbnQKK19BQ0VPRgorCitmaQorCisKKyMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KKworZm9yIGFjX2Z1bmMgaW4gYmNvcHkgbWVtbW92ZSBzdHJlcnJvcgorZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworIyBDaGVjayBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBsaWJ6IChha2EgemxpYikKKworZm9yIGFjX2hlYWRlciBpbiB6bGliLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInpsaWIuaCIgImFjX2N2X2hlYWRlcl96bGliX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3psaWJfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1pMSUJfSCAxCitfQUNFT0YKKyBIQVZFX1pMSUJfSD0xCitmaQorCitkb25lCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGd6b3BlbiBpbiAtbHoiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGd6b3BlbiBpbiAtbHouLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3pfZ3pvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWx6ICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnem9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBnem9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3pfZ3pvcGVuPXllcworZWxzZQorICBhY19jdl9saWJfel9nem9wZW49bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3pfZ3pvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3pfZ3pvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3pfZ3pvcGVuIiA9IHh5ZXM7IHRoZW4gOgorICBIQVZFX0xJQlo9MQorZmkKKworCisjIENoZWNrIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIGxpYmJ6Mi4gT3JpZ2luYWxseSB3ZSBqdXN0IHVzZWQgQUNfQ0hFQ0tfTElCLAorIyBhcyBmb3IgbGliei4gSG93ZXZlciwgdGhpcyBoYWQgdGhlIGZvbGxvd2luZyBwcm9ibGVtLCBkaWFnbm9zZWQgYW5kIGZpeGVkIGJ5CisjIGEgdXNlcjoKKyMKKyMgICAtIGxpYmJ6MiB1c2VzIHRoZSBQYXNjYWwgY2FsbGluZyBjb252ZW50aW9uIChXSU5BUEkpIGZvciB0aGUgZnVuY3Rpb25zCisjICAgICB1bmRlciBXaW4zMi4KKyMgICAtIFRoZSBzdGFuZGFyZCBhdXRvY29uZiBBQ19DSEVDS19MSUIgZmFpbHMgdG8gaW5jbHVkZSAiYnpsaWIuaCIsCisjICAgICB0aGVyZWZvcmUgbWlzc2luZyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4KKyMgICAtIFRoZSBjb21waWxlciB0aHVzIGdlbmVyYXRlcyBhICJDIiBzaWduYXR1cmUgZm9yIHRoZSB0ZXN0IGZ1bmN0aW9uLgorIyAgIC0gVGhlIGxpbmtlciBmYWlscyB0byBmaW5kIHRoZSAiQyIgZnVuY3Rpb24uCisjICAgLSBQQ1JFMiBmYWlscyB0byBjb25maWd1cmUgaWYgYXNrZWQgdG8gZG8gc28gYWdhaW5zdCBsaWJiejIuCisjCisjIFNvbHV0aW9uOgorIworIyAgIC0gUmVwbGFjZSB0aGUgQUNfQ0hFQ0tfTElCIHRlc3Qgd2l0aCBhIGN1c3RvbSB0ZXN0LgorCitmb3IgYWNfaGVhZGVyIGluIGJ6bGliLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImJ6bGliLmgiICJhY19jdl9oZWFkZXJfYnpsaWJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfYnpsaWJfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0JaTElCX0ggMQorX0FDRU9GCisgSEFWRV9CWkxJQl9IPTEKK2ZpCisKK2RvbmUKKworIyBPcmlnaW5hbCB0ZXN0CisjIEFDX0NIRUNLX0xJQihbYnoyXSwgW0JaMl9iem9wZW5dLCBbSEFWRV9MSUJCWjI9MV0pCisjCisjIEN1c3RvbSB0ZXN0IGZvbGxvd3MKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGliYnoyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJiejIuLi4gIiA+JjY7IH0KK09MRF9MSUJTPSIkTElCUyIKK0xJQlM9IiRMSUJTIC1sYnoyIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaWZkZWYgSEFWRV9CWkxJQl9ICisjaW5jbHVkZSA8YnpsaWIuaD4KKyNlbmRpZgoraW50CittYWluICgpCit7CityZXR1cm4gKGludClCWjJfYnpvcGVuKCJjb25mdGVzdCIsICJyYiIpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9O0hBVkVfTElCQloyPTE7IGJyZWFrOworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0iJE9MRF9MSUJTIgorCisjIENoZWNrIGZvciB0aGUgYXZhaWxhYmlpdHkgb2YgbGlicmVhZGxpbmUKKworaWYgdGVzdCAiJGVuYWJsZV9wY3JlMnRlc3RfbGlicmVhZGxpbmUiID0gInllcyI7IHRoZW4KKyBmb3IgYWNfaGVhZGVyIGluIHJlYWRsaW5lL3JlYWRsaW5lLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInJlYWRsaW5lL3JlYWRsaW5lLmgiICJhY19jdl9oZWFkZXJfcmVhZGxpbmVfcmVhZGxpbmVfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcmVhZGxpbmVfcmVhZGxpbmVfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1JFQURMSU5FX1JFQURMSU5FX0ggMQorX0FDRU9GCisgSEFWRV9SRUFETElORV9IPTEKK2ZpCisKK2RvbmUKKworIGZvciBhY19oZWFkZXIgaW4gcmVhZGxpbmUvaGlzdG9yeS5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJyZWFkbGluZS9oaXN0b3J5LmgiICJhY19jdl9oZWFkZXJfcmVhZGxpbmVfaGlzdG9yeV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9yZWFkbGluZV9oaXN0b3J5X2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9SRUFETElORV9ISVNUT1JZX0ggMQorX0FDRU9GCisgSEFWRV9ISVNUT1JZX0g9MQorZmkKKworZG9uZQorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcmVhZGxpbmUgaW4gLWxyZWFkbGluZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcmVhZGxpbmUgaW4gLWxyZWFkbGluZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHJlYWRsaW5lICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciByZWFkbGluZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJlYWRsaW5lICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSIgPSB4eWVzOyB0aGVuIDoKKyAgTElCUkVBRExJTkU9Ii1scmVhZGxpbmUiCitlbHNlCisgIHVuc2V0IGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZTsKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciByZWFkbGluZSBpbiAtbHJlYWRsaW5lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciByZWFkbGluZSBpbiAtbHJlYWRsaW5lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scmVhZGxpbmUgLWx0aW5mbyAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciByZWFkbGluZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJlYWRsaW5lICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSIgPSB4eWVzOyB0aGVuIDoKKyAgTElCUkVBRExJTkU9Ii1sdGluZm8iCitlbHNlCisgIHVuc2V0IGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZTsKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHJlYWRsaW5lIGluIC1scmVhZGxpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHJlYWRsaW5lIGluIC1scmVhZGxpbmUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxyZWFkbGluZSAtbGN1cnNlcyAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciByZWFkbGluZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJlYWRsaW5lICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSIgPSB4eWVzOyB0aGVuIDoKKyAgTElCUkVBRExJTkU9Ii1sY3Vyc2VzIgorZWxzZQorICB1bnNldCBhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmU7CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHJlYWRsaW5lIGluIC1scmVhZGxpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHJlYWRsaW5lIGluIC1scmVhZGxpbmUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxyZWFkbGluZSAtbG5jdXJzZXMgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcmVhZGxpbmUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiByZWFkbGluZSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmU9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZT1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmUiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmUiID0geHllczsgdGhlbiA6CisgIExJQlJFQURMSU5FPSItbG5jdXJzZXMiCitlbHNlCisgIHVuc2V0IGFjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZTsKKwkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHJlYWRsaW5lIGluIC1scmVhZGxpbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHJlYWRsaW5lIGluIC1scmVhZGxpbmUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxyZWFkbGluZSAtbG5jdXJzZXN3ICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHJlYWRsaW5lICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcmVhZGxpbmUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lPXllcworZWxzZQorICBhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lIiA9IHh5ZXM7IHRoZW4gOgorICBMSUJSRUFETElORT0iLWxuY3Vyc2VzdyIKK2Vsc2UKKyAgdW5zZXQgYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lOworCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciByZWFkbGluZSBpbiAtbHJlYWRsaW5lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciByZWFkbGluZSBpbiAtbHJlYWRsaW5lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9yZWFkbGluZV9yZWFkbGluZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scmVhZGxpbmUgLWx0ZXJtY2FwICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHJlYWRsaW5lICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcmVhZGxpbmUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lPXllcworZWxzZQorICBhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lIiA9IHh5ZXM7IHRoZW4gOgorICBMSUJSRUFETElORT0iLWx0ZXJtY2FwIgorZWxzZQorICBMSUJSRUFETElORT0iIgorZmkKKworZmkKKworZmkKKworZmkKKworZmkKKworZmkKKworCisgaWYgdGVzdCAtbiAiJExJQlJFQURMSU5FIjsgdGhlbgorICAgaWYgdGVzdCAiJExJQlJFQURMSU5FIiAhPSAiLWxyZWFkbGluZSI7IHRoZW4KKyAgICAgZWNobyAiLWxyZWFkbGluZSBuZWVkcyAkTElCUkVBRExJTkUiCisgICAgIExJQlJFQURMSU5FPSItbHJlYWRsaW5lICRMSUJSRUFETElORSIKKyAgIGZpCisgZmkKK2ZpCisKKworIyBDaGVjayBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBsaWJlZGl0LiBEaWZmZXJlbnQgZGlzdHJpYnV0aW9ucyBwdXQgaXRzCisjIGhlYWRlcnMgaW4gZGlmZmVyZW50IHBsYWNlcy4gVHJ5IHRvIGNvdmVyIHRoZSBtb3N0IGNvbW1vbiBvbmVzLgorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUydGVzdF9saWJlZGl0IiA9ICJ5ZXMiOyB0aGVuCisgIGZvciBhY19oZWFkZXIgaW4gZWRpdGxpbmUvcmVhZGxpbmUuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZWRpdGxpbmUvcmVhZGxpbmUuaCIgImFjX2N2X2hlYWRlcl9lZGl0bGluZV9yZWFkbGluZV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9lZGl0bGluZV9yZWFkbGluZV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRURJVExJTkVfUkVBRExJTkVfSCAxCitfQUNFT0YKKyBIQVZFX0VESVRMSU5FX1JFQURMSU5FX0g9MQorZWxzZQorICBmb3IgYWNfaGVhZGVyIGluIGVkaXQvcmVhZGxpbmUvcmVhZGxpbmUuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiZWRpdC9yZWFkbGluZS9yZWFkbGluZS5oIiAiYWNfY3ZfaGVhZGVyX2VkaXRfcmVhZGxpbmVfcmVhZGxpbmVfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfZWRpdF9yZWFkbGluZV9yZWFkbGluZV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRURJVF9SRUFETElORV9SRUFETElORV9IIDEKK19BQ0VPRgorIEhBVkVfUkVBRExJTkVfUkVBRExJTkVfSD0xCitlbHNlCisgIGZvciBhY19oZWFkZXIgaW4gcmVhZGxpbmUvcmVhZGxpbmUuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicmVhZGxpbmUvcmVhZGxpbmUuaCIgImFjX2N2X2hlYWRlcl9yZWFkbGluZV9yZWFkbGluZV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9yZWFkbGluZV9yZWFkbGluZV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUkVBRExJTkVfUkVBRExJTkVfSCAxCitfQUNFT0YKKyBIQVZFX1JFQURMSU5FX1JFQURMSU5FX0g9MQorZmkKKworZG9uZQorCitmaQorCitkb25lCisKK2ZpCisKK2RvbmUKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciByZWFkbGluZSBpbiAtbGVkaXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHJlYWRsaW5lIGluIC1sZWRpdC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZWRpdF9yZWFkbGluZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZWRpdCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcmVhZGxpbmUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiByZWFkbGluZSAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfZWRpdF9yZWFkbGluZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX2VkaXRfcmVhZGxpbmU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2VkaXRfcmVhZGxpbmUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZWRpdF9yZWFkbGluZSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9lZGl0X3JlYWRsaW5lIiA9IHh5ZXM7IHRoZW4gOgorICBMSUJFRElUPSItbGVkaXQiCitmaQorCitmaQorCisjIFRoaXMgZmFjaWxpdGF0ZXMgLWFuc2kgYnVpbGRzIHVuZGVyIExpbnV4CisKK1BDUkUyX1NUQVRJQ19DRkxBRz0iIgoraWYgdGVzdCAieCRlbmFibGVfc2hhcmVkIiA9ICJ4bm8iIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBQQ1JFMl9TVEFUSUMgMSIgPj5jb25mZGVmcy5oCisKKyAgUENSRTJfU1RBVElDX0NGTEFHPSItRFBDUkUyX1NUQVRJQyIKK2ZpCisKKworIyBIZXJlIGlzIHdoZXJlIFBDUkUyLXNwZWNpZmljIGRlZmluZXMgYXJlIGhhbmRsZWQKKworaWYgdGVzdCAiJGVuYWJsZV9wY3JlMl84IiA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNVUFBPUlRfUENSRTJfOCAvKiovIiA+PmNvbmZkZWZzLmgKKworZmkKKworaWYgdGVzdCAiJGVuYWJsZV9wY3JlMl8xNiIgPSAieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVVBQT1JUX1BDUkUyXzE2IC8qKi8iID4+Y29uZmRlZnMuaAorCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUyXzMyIiA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIFNVUFBPUlRfUENSRTJfMzIgLyoqLyIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfZGVidWciID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgUENSRTJfREVCVUcgLyoqLyIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgVW5sZXNzIHJ1bm5pbmcgdW5kZXIgV2luZG93cywgSklUIHN1cHBvcnQgcmVxdWlyZXMgcHRocmVhZHMuCisKK2lmIHRlc3QgIiRlbmFibGVfaml0IiA9ICJ5ZXMiOyB0aGVuCisgIGlmIHRlc3QgIiRIQVZFX1dJTkRPV1NfSCIgIT0gIjEiOyB0aGVuCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitheF9wdGhyZWFkX29rPW5vCisKKyMgV2UgdXNlZCB0byBjaGVjayBmb3IgcHRocmVhZC5oIGZpcnN0LCBidXQgdGhpcyBmYWlscyBpZiBwdGhyZWFkLmgKKyMgcmVxdWlyZXMgc3BlY2lhbCBjb21waWxlciBmbGFncyAoZS5nLiBvbiBUcnVlNjQgb3IgU2VxdWVudCkuCisjIEl0IGdldHMgY2hlY2tlZCBmb3IgaW4gdGhlIGxpbmsgdGVzdCBhbnl3YXkuCisKKyMgRmlyc3Qgb2YgYWxsLCBjaGVjayBpZiB0aGUgdXNlciBoYXMgc2V0IGFueSBvZiB0aGUgUFRIUkVBRF9MSUJTLAorIyBldGNldGVyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGFuZCBpZiB0aHJlYWRzIGxpbmtpbmcgd29ya3MgdXNpbmcKKyMgdGhlbToKK2lmIHRlc3QgeCIkUFRIUkVBRF9MSUJTJFBUSFJFQURfQ0ZMQUdTIiAhPSB4OyB0aGVuCisgICAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFkX2pvaW4gaW4gTElCUz0kUFRIUkVBRF9MSUJTIHdpdGggQ0ZMQUdTPSRQVEhSRUFEX0NGTEFHUyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9qb2luIGluIExJQlM9JFBUSFJFQURfTElCUyB3aXRoIENGTEFHUz0kUFRIUkVBRF9DRkxBR1MuLi4gIiA+JjY7IH0KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHB0aHJlYWRfam9pbiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHB0aHJlYWRfam9pbiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBheF9wdGhyZWFkX29rPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXhfcHRocmVhZF9vayIgPiY1CiskYXNfZWNobyAiJGF4X3B0aHJlYWRfb2siID4mNjsgfQorICAgICAgICBpZiB0ZXN0IHgiJGF4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCisgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSIiCisgICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKKyAgICAgICAgZmkKKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCitmaQorCisjIFdlIG11c3QgY2hlY2sgZm9yIHRoZSB0aHJlYWRzIGxpYnJhcnkgdW5kZXIgYSBudW1iZXIgb2YgZGlmZmVyZW50CisjIG5hbWVzOyB0aGUgb3JkZXJpbmcgaXMgdmVyeSBpbXBvcnRhbnQgYmVjYXVzZSBzb21lIHN5c3RlbXMKKyMgKGUuZy4gREVDKSBoYXZlIGJvdGggLWxwdGhyZWFkIGFuZCAtbHB0aHJlYWRzLCB3aGVyZSBvbmUgb2YgdGhlCisjIGxpYnJhcmllcyBpcyBicm9rZW4gKG5vbi1QT1NJWCkuCisKKyMgQ3JlYXRlIGEgbGlzdCBvZiB0aHJlYWQgZmxhZ3MgdG8gdHJ5LiAgSXRlbXMgc3RhcnRpbmcgd2l0aCBhICItIiBhcmUKKyMgQyBjb21waWxlciBmbGFncywgYW5kIG90aGVyIGl0ZW1zIGFyZSBsaWJyYXJ5IG5hbWVzLCBleGNlcHQgZm9yICJub25lIgorIyB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSB0cnkgd2l0aG91dCBhbnkgZmxhZ3MgYXQgYWxsLCBhbmQgInB0aHJlYWQtY29uZmlnIgorIyB3aGljaCBpcyBhIHByb2dyYW0gcmV0dXJuaW5nIHRoZSBmbGFncyBmb3IgdGhlIFB0aCBlbXVsYXRpb24gbGlicmFyeS4KKworYXhfcHRocmVhZF9mbGFncz0icHRocmVhZHMgbm9uZSAtS3RocmVhZCAta3RocmVhZCBsdGhyZWFkIC1wdGhyZWFkIC1wdGhyZWFkcyAtbXRocmVhZHMgcHRocmVhZCAtLXRocmVhZC1zYWZlIC1tdCBwdGhyZWFkLWNvbmZpZyIKKworIyBUaGUgb3JkZXJpbmcgKmlzKiAoc29tZXRpbWVzKSBpbXBvcnRhbnQuICBTb21lIG5vdGVzIG9uIHRoZQorIyBpbmRpdmlkdWFsIGl0ZW1zIGZvbGxvdzoKKworIyBwdGhyZWFkczogQUlYIChtdXN0IGNoZWNrIHRoaXMgYmVmb3JlIC1scHRocmVhZCkKKyMgbm9uZTogaW4gY2FzZSB0aHJlYWRzIGFyZSBpbiBsaWJjOyBzaG91bGQgYmUgdHJpZWQgYmVmb3JlIC1LdGhyZWFkIGFuZAorIyAgICAgICBvdGhlciBjb21waWxlciBmbGFncyB0byBwcmV2ZW50IGNvbnRpbnVhbCBjb21waWxlciB3YXJuaW5ncworIyAtS3RocmVhZDogU2VxdWVudCAodGhyZWFkcyBpbiBsaWJjLCBidXQgLUt0aHJlYWQgbmVlZGVkIGZvciBwdGhyZWFkLmgpCisjIC1rdGhyZWFkOiBGcmVlQlNEIGtlcm5lbCB0aHJlYWRzIChwcmVmZXJyZWQgdG8gLXB0aHJlYWQgc2luY2UgU01QLWFibGUpCisjIGx0aHJlYWQ6IExpbnV4VGhyZWFkcyBwb3J0IG9uIEZyZWVCU0QgKGFsc28gcHJlZmVycmVkIHRvIC1wdGhyZWFkKQorIyAtcHRocmVhZDogTGludXgvZ2NjIChrZXJuZWwgdGhyZWFkcyksIEJTRC9nY2MgKHVzZXJsYW5kIHRocmVhZHMpCisjIC1wdGhyZWFkczogU29sYXJpcy9nY2MKKyMgLW10aHJlYWRzOiBNaW5ndzMyL2djYywgTHlueC9nY2MKKyMgLW10OiBTdW4gV29ya3Nob3AgQyAobWF5IG9ubHkgbGluayBTdW5PUyB0aHJlYWRzIFstbHRocmVhZF0sIGJ1dCBpdAorIyAgICAgIGRvZXNuJ3QgaHVydCB0byBjaGVjayBzaW5jZSB0aGlzIHNvbWV0aW1lcyBkZWZpbmVzIHB0aHJlYWRzIHRvbzsKKyMgICAgICBhbHNvIGRlZmluZXMgLURfUkVFTlRSQU5UKQorIyAgICAgIC4uLiAtbXQgaXMgYWxzbyB0aGUgcHRocmVhZHMgZmxhZyBmb3IgSFAvYUNDCisjIHB0aHJlYWQ6IExpbnV4LCBldGNldGVyYQorIyAtLXRocmVhZC1zYWZlOiBLQUkgQysrCisjIHB0aHJlYWQtY29uZmlnOiB1c2UgcHRocmVhZC1jb25maWcgcHJvZ3JhbSAoZm9yIEdOVSBQdGggbGlicmFyeSkKKworY2FzZSAke2hvc3Rfb3N9IGluCisgICAgICAgIHNvbGFyaXMqKQorCisgICAgICAgICMgT24gU29sYXJpcyAoYXQgbGVhc3QsIGZvciBzb21lIHZlcnNpb25zKSwgbGliYyBjb250YWlucyBzdHViYmVkCisgICAgICAgICMgKG5vbi1mdW5jdGlvbmFsKSB2ZXJzaW9ucyBvZiB0aGUgcHRocmVhZHMgcm91dGluZXMsIHNvIGxpbmstYmFzZWQKKyAgICAgICAgIyB0ZXN0cyB3aWxsIGVycm9uZW91c2x5IHN1Y2NlZWQuICAoV2UgbmVlZCB0byBsaW5rIHdpdGggLXB0aHJlYWRzLy1tdC8KKyAgICAgICAgIyAtbHB0aHJlYWQuKSAgKFRoZSBzdHVicyBhcmUgbWlzc2luZyBwdGhyZWFkX2NsZWFudXBfcHVzaCwgb3IgcmF0aGVyCisgICAgICAgICMgYSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhpcyBtYWNybywgc28gd2UgY291bGQgY2hlY2sgZm9yIHRoYXQsIGJ1dAorICAgICAgICAjIHdobyBrbm93cyB3aGV0aGVyIHRoZXknbGwgc3R1YiB0aGF0IHRvbyBpbiBhIGZ1dHVyZSBsaWJjLikgIFNvLAorICAgICAgICAjIHdlJ2xsIGp1c3QgbG9vayBmb3IgLXB0aHJlYWRzIGFuZCAtbHB0aHJlYWQgZmlyc3Q6CisKKyAgICAgICAgYXhfcHRocmVhZF9mbGFncz0iLXB0aHJlYWRzIHB0aHJlYWQgLW10IC1wdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgorICAgICAgICA7OworCisgICAgICAgIGRhcndpbiopCisgICAgICAgIGF4X3B0aHJlYWRfZmxhZ3M9Ii1wdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgorICAgICAgICA7OworZXNhYworCitpZiB0ZXN0IHgiJGF4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCitmb3IgZmxhZyBpbiAkYXhfcHRocmVhZF9mbGFnczsgZG8KKworICAgICAgICBjYXNlICRmbGFnIGluCisgICAgICAgICAgICAgICAgbm9uZSkKKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcHRocmVhZHMgd29yayB3aXRob3V0IGFueSBmbGFncyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aG91dCBhbnkgZmxhZ3MuLi4gIiA+JjY7IH0KKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgLSopCisgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAkZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHB0aHJlYWRzIHdvcmsgd2l0aCAkZmxhZy4uLiAiID4mNjsgfQorICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkZmxhZyIKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgcHRocmVhZC1jb25maWcpCisgICAgICAgICAgICAgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwdGhyZWFkLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcHRocmVhZC1jb25maWc7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGF4X3B0aHJlYWRfY29uZmlnIjsgdGhlbgorICBhY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnPSIkYXhfcHRocmVhZF9jb25maWciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19heF9wdGhyZWFkX2NvbmZpZz0ieWVzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnIiAmJiBhY19jdl9wcm9nX2F4X3B0aHJlYWRfY29uZmlnPSJubyIKK2ZpCitmaQorYXhfcHRocmVhZF9jb25maWc9JGFjX2N2X3Byb2dfYXhfcHRocmVhZF9jb25maWcKK2lmIHRlc3QgLW4gIiRheF9wdGhyZWFkX2NvbmZpZyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRheF9wdGhyZWFkX2NvbmZpZyIgPiY1CiskYXNfZWNobyAiJGF4X3B0aHJlYWRfY29uZmlnIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IHgiJGF4X3B0aHJlYWRfY29uZmlnIiA9IHhubzsgdGhlbiBjb250aW51ZTsgZmkKKyAgICAgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iYHB0aHJlYWQtY29uZmlnIC0tY2ZsYWdzYCIKKyAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9ImBwdGhyZWFkLWNvbmZpZyAtLWxkZmxhZ3NgIGBwdGhyZWFkLWNvbmZpZyAtLWxpYnNgIgorICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHRoZSBwdGhyZWFkcyBsaWJyYXJ5IC1sJGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHRoZSBwdGhyZWFkcyBsaWJyYXJ5IC1sJGZsYWcuLi4gIiA+JjY7IH0KKyAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9Ii1sJGZsYWciCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorCisgICAgICAgICMgQ2hlY2sgZm9yIHZhcmlvdXMgZnVuY3Rpb25zLiAgV2UgbXVzdCBpbmNsdWRlIHB0aHJlYWQuaCwKKyAgICAgICAgIyBzaW5jZSBzb21lIGZ1bmN0aW9ucyBtYXkgYmUgbWFjcm9zLiAgKE9uIHRoZSBTZXF1ZW50LCB3ZQorICAgICAgICAjIG5lZWQgYSBzcGVjaWFsIGZsYWcgLUt0aHJlYWQgdG8gbWFrZSB0aGlzIGhlYWRlciBjb21waWxlLikKKyAgICAgICAgIyBXZSBjaGVjayBmb3IgcHRocmVhZF9qb2luIGJlY2F1c2UgaXQgaXMgaW4gLWxwdGhyZWFkIG9uIElSSVgKKyAgICAgICAgIyB3aGlsZSBwdGhyZWFkX2NyZWF0ZSBpcyBpbiBsaWJjLiAgV2UgY2hlY2sgZm9yIHB0aHJlYWRfYXR0cl9pbml0CisgICAgICAgICMgZHVlIHRvIERFQyBjcmF6aW5lc3Mgd2l0aCAtbHB0aHJlYWRzLiAgV2UgY2hlY2sgZm9yCisgICAgICAgICMgcHRocmVhZF9jbGVhbnVwX3B1c2ggYmVjYXVzZSBpdCBpcyBvbmUgb2YgdGhlIGZldyBwdGhyZWFkCisgICAgICAgICMgZnVuY3Rpb25zIG9uIFNvbGFyaXMgdGhhdCBkb2Vzbid0IGhhdmUgYSBub24tZnVuY3Rpb25hbCBsaWJjIHN0dWIuCisgICAgICAgICMgV2UgdHJ5IHB0aHJlYWRfY3JlYXRlIG9uIGdlbmVyYWwgcHJpbmNpcGxlcy4KKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHJvdXRpbmUodm9pZCAqYSkgeyBhID0gMDsgfQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgKnN0YXJ0X3JvdXRpbmUodm9pZCAqYSkgeyByZXR1cm4gYTsgfQoraW50CittYWluICgpCit7CitwdGhyZWFkX3QgdGg7IHB0aHJlYWRfYXR0cl90IGF0dHI7CisgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgmdGgsIDAsIHN0YXJ0X3JvdXRpbmUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9qb2luKHRoLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY2xlYW51cF9wdXNoKHJvdXRpbmUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jbGVhbnVwX3BvcCgwKSAvKiA7ICovCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYXhfcHRocmVhZF9vaz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXhfcHRocmVhZF9vayIgPiY1CiskYXNfZWNobyAiJGF4X3B0aHJlYWRfb2siID4mNjsgfQorICAgICAgICBpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmaQorCisgICAgICAgIFBUSFJFQURfTElCUz0iIgorICAgICAgICBQVEhSRUFEX0NGTEFHUz0iIgorZG9uZQorZmkKKworIyBWYXJpb3VzIG90aGVyIGNoZWNrczoKK2lmIHRlc3QgIngkYXhfcHRocmVhZF9vayIgPSB4eWVzOyB0aGVuCisgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisgICAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorCisgICAgICAgICMgRGV0ZWN0IEFJWCBsb3NzYWdlOiBKT0lOQUJMRSBhdHRyaWJ1dGUgaXMgY2FsbGVkIFVOREVUQUNIRUQuCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGpvaW5hYmxlIHB0aHJlYWQgYXR0cmlidXRlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBqb2luYWJsZSBwdGhyZWFkIGF0dHJpYnV0ZS4uLiAiID4mNjsgfQorICAgICAgICBhdHRyX25hbWU9dW5rbm93bgorICAgICAgICBmb3IgYXR0ciBpbiBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSBQVEhSRUFEX0NSRUFURV9VTkRFVEFDSEVEOyBkbworICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludAorbWFpbiAoKQoreworaW50IGF0dHIgPSAkYXR0cjsgcmV0dXJuIGF0dHIgLyogOyAqLworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGF0dHJfbmFtZT0kYXR0cjsgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICBkb25lCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYXR0cl9uYW1lIiA+JjUKKyRhc19lY2hvICIkYXR0cl9uYW1lIiA+JjY7IH0KKyAgICAgICAgaWYgdGVzdCAiJGF0dHJfbmFtZSIgIT0gUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEU7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSAkYXR0cl9uYW1lCitfQUNFT0YKKworICAgICAgICBmaQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgbW9yZSBzcGVjaWFsIGZsYWdzIGFyZSByZXF1aXJlZCBmb3IgcHRocmVhZHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbW9yZSBzcGVjaWFsIGZsYWdzIGFyZSByZXF1aXJlZCBmb3IgcHRocmVhZHMuLi4gIiA+JjY7IH0KKyAgICAgICAgZmxhZz1ubworICAgICAgICBjYXNlICR7aG9zdF9vc30gaW4KKyAgICAgICAgICAgIGFpeCogfCBmcmVlYnNkKiB8IGRhcndpbiopIGZsYWc9Ii1EX1RIUkVBRF9TQUZFIjs7CisgICAgICAgICAgICBvc2YqIHwgaHB1eCopIGZsYWc9Ii1EX1JFRU5UUkFOVCI7OworICAgICAgICAgICAgc29sYXJpcyopCisgICAgICAgICAgICBpZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiOyB0aGVuCisgICAgICAgICAgICAgICAgZmxhZz0iLURfUkVFTlRSQU5UIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZsYWc9Ii1tdCAtRF9SRUVOVFJBTlQiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtmbGFnfSIgPiY1CiskYXNfZWNobyAiJHtmbGFnfSIgPiY2OyB9CisgICAgICAgIGlmIHRlc3QgIngkZmxhZyIgIT0geG5vOyB0aGVuCisgICAgICAgICAgICBQVEhSRUFEX0NGTEFHUz0iJGZsYWcgJFBUSFJFQURfQ0ZMQUdTIgorICAgICAgICBmaQorCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFBUSFJFQURfUFJJT19JTkhFUklUIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBQVEhSRUFEX1BSSU9fSU5IRVJJVC4uLiAiID4mNjsgfQoraWYgJHtheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKKyAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHB0aHJlYWQuaD4KK2ludAorbWFpbiAoKQoreworaW50IGkgPSBQVEhSRUFEX1BSSU9fSU5IRVJJVDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVD15ZXMKK2Vsc2UKKyAgYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVCIgPiY1CiskYXNfZWNobyAiJGF4X2N2X1BUSFJFQURfUFJJT19JTkhFUklUIiA+JjY7IH0KKyAgICAgICAgaWYgdGVzdCAieCRheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVCIgPSAieHllcyI7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX1BUSFJFQURfUFJJT19JTkhFUklUIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisgICAgICAgICMgTW9yZSBBSVggbG9zc2FnZTogbXVzdCBjb21waWxlIHdpdGggeGxjX3Igb3IgY2NfcgorICAgICAgICBpZiB0ZXN0IHgiJEdDQyIgIT0geHllczsgdGhlbgorICAgICAgICAgIGZvciBhY19wcm9nIGluIHhsY19yIGNjX3IKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19QVEhSRUFEX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFBUSFJFQURfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfUFRIUkVBRF9DQz0iJFBUSFJFQURfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19QVEhSRUFEX0NDPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitQVEhSRUFEX0NDPSRhY19jdl9wcm9nX1BUSFJFQURfQ0MKK2lmIHRlc3QgLW4gIiRQVEhSRUFEX0NDIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBUSFJFQURfQ0MiID4mNQorJGFzX2VjaG8gIiRQVEhSRUFEX0NDIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJFBUSFJFQURfQ0MiICYmIGJyZWFrCitkb25lCit0ZXN0IC1uICIkUFRIUkVBRF9DQyIgfHwgUFRIUkVBRF9DQz0iJHtDQ30iCisKKyAgICAgICAgZWxzZQorICAgICAgICAgIFBUSFJFQURfQ0M9JENDCisgICAgICAgIGZpCitlbHNlCisgICAgICAgIFBUSFJFQURfQ0M9IiRDQyIKK2ZpCisKKworCisKKworIyBGaW5hbGx5LCBleGVjdXRlIEFDVElPTi1JRi1GT1VORC9BQ1RJT04tSUYtTk9ULUZPVU5EOgoraWYgdGVzdCB4IiRheF9wdGhyZWFkX29rIiA9IHh5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QVEhSRUFEIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgIDoKK2Vsc2UKKyAgICAgICAgYXhfcHRocmVhZF9vaz1ubworICAgICAgICBhc19mbl9lcnJvciAkPyAiSklUIHN1cHBvcnQgcmVxdWlyZXMgcHRocmVhZHMiICIkTElORU5PIiA1CitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKyAgICBDQz0iJFBUSFJFQURfQ0MiCisgICAgQ0ZMQUdTPSIkUFRIUkVBRF9DRkxBR1MgJENGTEFHUyIKKyAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBTVVBQT1JUX0pJVCAvKiovIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBlbmFibGVfcGNyZTJncmVwX2ppdD0ibm8iCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUyZ3JlcF9qaXQiID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1VQUE9SVF9QQ1JFMkdSRVBfSklUIC8qKi8iID4+Y29uZmRlZnMuaAorCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3VuaWNvZGUiID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1VQUE9SVF9VTklDT0RFIC8qKi8iID4+Y29uZmRlZnMuaAorCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3N0YWNrX2Zvcl9yZWN1cnNpb24iID0gIm5vIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIRUFQX01BVENIX1JFQ1VSU0UgLyoqLyIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfcGNyZTJncmVwX2xpYnoiID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1VQUE9SVF9MSUJaIC8qKi8iID4+Y29uZmRlZnMuaAorCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUyZ3JlcF9saWJiejIiID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1VQUE9SVF9MSUJCWjIgLyoqLyIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2lmIHRlc3QgJHdpdGhfcGNyZTJncmVwX2J1ZnNpemUgLWx0IDgxOTIgOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJHdpdGhfcGNyZTJncmVwX2J1ZnNpemUgaXMgdG9vIHNtYWxsIGZvciAtLXdpdGgtcGNyZTJncmVwLWJ1ZnNpemU7IHVzaW5nIDgxOTIiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJHdpdGhfcGNyZTJncmVwX2J1ZnNpemUgaXMgdG9vIHNtYWxsIGZvciAtLXdpdGgtcGNyZTJncmVwLWJ1ZnNpemU7IHVzaW5nIDgxOTIiID4mMjt9CisgIHdpdGhfcGNyZTJncmVwX2J1ZnNpemU9IjgxOTIiCitlbHNlCisgIGlmIHRlc3QgJD8gLWd0IDEgOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJCYWQgdmFsdWUgZm9yICAtLXdpdGgtcGNyZTJncmVwLWJ1ZnNpemUiICIkTElORU5PIiA1CisgIGZpCitmaQorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUENSRTJHUkVQX0JVRlNJWkUgJHdpdGhfcGNyZTJncmVwX2J1ZnNpemUKK19BQ0VPRgorCisKK2lmIHRlc3QgIiRlbmFibGVfcGNyZTJ0ZXN0X2xpYmVkaXQiID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1VQUE9SVF9MSUJFRElUIC8qKi8iID4+Y29uZmRlZnMuaAorCisgIExJQlJFQURMSU5FPSIkTElCRURJVCIKK2VsaWYgdGVzdCAiJGVuYWJsZV9wY3JlMnRlc3RfbGlicmVhZGxpbmUiID0gInllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1VQUE9SVF9MSUJSRUFETElORSAvKiovIiA+PmNvbmZkZWZzLmgKKworZmkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FV0xJTkVfREVGQVVMVCAkYWNfcGNyZTJfbmV3bGluZV92YWx1ZQorX0FDRU9GCisKKworaWYgdGVzdCAiJGVuYWJsZV9ic3JfYW55Y3JsZiIgPSAieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBCU1JfQU5ZQ1JMRiAvKiovIiA+PmNvbmZkZWZzLmgKKworZmkKKworaWYgdGVzdCAiJGVuYWJsZV9uZXZlcl9iYWNrc2xhc2hfQyIgPSAieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVZFUl9CQUNLU0xBU0hfQyAvKiovIiA+PmNvbmZkZWZzLmgKKworZmkKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIExJTktfU0laRSAkd2l0aF9saW5rX3NpemUKK19BQ0VPRgorCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQVJFTlNfTkVTVF9MSU1JVCAkd2l0aF9wYXJlbnNfbmVzdF9saW1pdAorX0FDRU9GCisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE1BVENIX0xJTUlUICR3aXRoX21hdGNoX2xpbWl0CitfQUNFT0YKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTUFUQ0hfTElNSVRfUkVDVVJTSU9OICR3aXRoX21hdGNoX2xpbWl0X3JlY3Vyc2lvbgorX0FDRU9GCisKKworCiskYXNfZWNobyAiI2RlZmluZSBNQVhfTkFNRV9TSVpFIDMyIiA+PmNvbmZkZWZzLmgKKworCisKKyRhc19lY2hvICIjZGVmaW5lIE1BWF9OQU1FX0NPVU5UIDEwMDAwIiA+PmNvbmZkZWZzLmgKKworCisKKworaWYgdGVzdCAiJGVuYWJsZV9lYmNkaWMiID0gInllcyI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBFQkNESUMgLyoqLworX0FDRU9GCisKK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfZWJjZGljX25sMjUiID0gInllcyI7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBFQkNESUNfTkwyNSAvKiovCitfQUNFT0YKKworZmkKKworaWYgdGVzdCAiJGVuYWJsZV92YWxncmluZCIgPSAieWVzIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNVUFBPUlRfVkFMR1JJTkQgLyoqLworX0FDRU9GCisKK2ZpCisKKyMgUGxhdGZvcm0gc3BlY2lmaWMgaXNzdWVzCitOT19VTkRFRklORUQ9CitFWFBPUlRfQUxMX1NZTUJPTFM9CitjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogKQorICAgIGlmIHRlc3QgWCIkZW5hYmxlX3NoYXJlZCIgPSBYeWVzOyB0aGVuCisgICAgICBOT19VTkRFRklORUQ9Ii1uby11bmRlZmluZWQiCisgICAgICBFWFBPUlRfQUxMX1NZTUJPTFM9Ii1XbCwtLWV4cG9ydC1hbGwtc3ltYm9scyIKKyAgICBmaQorICAgIDs7Citlc2FjCisKKyMgVGhlIGV4dHJhIExERkxBR1MgZm9yIGVhY2ggcGFydGljdWxhciBsaWJyYXJ5LiBUaGUgbGlicGNyZTIqX3ZlcnNpb24gdmFsdWVzCisjIGFyZSBtNCB2YXJpYWJsZXMsIGFzc2lnbmVkIGFib3ZlLgorCitFWFRSQV9MSUJQQ1JFMl84X0xERkxBR1M9IiRFWFRSQV9MSUJQQ1JFMl84X0xERkxBR1MgXAorICAkTk9fVU5ERUZJTkVEIC12ZXJzaW9uLWluZm8gMzowOjMiCisKK0VYVFJBX0xJQlBDUkUyXzE2X0xERkxBR1M9IiRFWFRSQV9MSUJQQ1JFMl8xNl9MREZMQUdTIFwKKyAgJE5PX1VOREVGSU5FRCAtdmVyc2lvbi1pbmZvIDM6MDozIgorCitFWFRSQV9MSUJQQ1JFMl8zMl9MREZMQUdTPSIkRVhUUkFfTElCUENSRTJfMzJfTERGTEFHUyBcCisgICROT19VTkRFRklORUQgLXZlcnNpb24taW5mbyAzOjA6MyIKKworRVhUUkFfTElCUENSRTJfUE9TSVhfTERGTEFHUz0iJEVYVFJBX0xJQlBDUkUyX1BPU0lYX0xERkxBR1MgXAorICAkTk9fVU5ERUZJTkVEIC12ZXJzaW9uLWluZm8gMDoxOjAiCisKKworCisKKworCisjIFdoZW4gd2UgcnVuICdtYWtlIGRpc3RjaGVjaycsIHVzZSB0aGVzZSBhcmd1bWVudHMuIFR1cm5pbmcgb2ZmIGNvbXBpbGVyCisjIG9wdGltaXphdGlvbiBtYWtlcyBpdCBydW4gZmFzdGVyLgorRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUz0iQ0ZMQUdTPScnIENYWEZMQUdTPScnIC0tZW5hYmxlLXBjcmUyLTE2IC0tZW5hYmxlLXBjcmUyLTMyIC0tZW5hYmxlLWppdCAtLWVuYWJsZS11dGYiCisKKworIyBDaGVjayB0aGF0LCBpZiAtLWVuYWJsZS1wY3JlMmdyZXAtbGlieiBvciAtLWVuYWJsZS1wY3JlMmdyZXAtbGliYnoyIGlzCisjIHNwZWNpZmllZCwgdGhlIHJlbGV2YW50IGxpYnJhcnkgaXMgYXZhaWxhYmxlLgorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUyZ3JlcF9saWJ6IiA9ICJ5ZXMiOyB0aGVuCisgIGlmIHRlc3QgIiRIQVZFX1pMSUJfSCIgIT0gIjEiOyB0aGVuCisgICAgZWNobyAiKiogQ2Fubm90IC0tZW5hYmxlLXBjcmUyZ3JlcC1saWJ6IGJlY2F1c2UgemxpYi5oIHdhcyBub3QgZm91bmQiCisgICAgZXhpdCAxCisgIGZpCisgIGlmIHRlc3QgIiRIQVZFX0xJQloiICE9ICIxIjsgdGhlbgorICAgIGVjaG8gIioqIENhbm5vdCAtLWVuYWJsZS1wY3JlMmdyZXAtbGlieiBiZWNhdXNlIGxpYnogd2FzIG5vdCBmb3VuZCIKKyAgICBleGl0IDEKKyAgZmkKKyAgTElCWj0iLWx6IgorZmkKKworCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUyZ3JlcF9saWJiejIiID0gInllcyI7IHRoZW4KKyAgaWYgdGVzdCAiJEhBVkVfQlpMSUJfSCIgIT0gIjEiOyB0aGVuCisgICAgZWNobyAiKiogQ2Fubm90IC0tZW5hYmxlLXBjcmUyZ3JlcC1saWJiejIgYmVjYXVzZSBiemxpYi5oIHdhcyBub3QgZm91bmQiCisgICAgZXhpdCAxCisgIGZpCisgIGlmIHRlc3QgIiRIQVZFX0xJQkJaMiIgIT0gIjEiOyB0aGVuCisgICAgZWNobyAiKiogQ2Fubm90IC0tZW5hYmxlLXBjcmUyZ3JlcC1saWJiejIgYmVjYXVzZSBsaWJiejIgd2FzIG5vdCBmb3VuZCIKKyAgICBleGl0IDEKKyAgZmkKKyAgTElCQloyPSItbGJ6MiIKK2ZpCisKKworIyBTaW1pbGFybHkgZm9yIC0tZW5hYmxlLXBjcmUydGVzdC1yZWFkbGluZQorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUydGVzdF9saWJlZGl0IiA9ICJ5ZXMiOyB0aGVuCisgIGlmIHRlc3QgIiRlbmFibGVfcGNyZTJ0ZXN0X2xpYnJlYWRsaW5lIiA9ICJ5ZXMiOyB0aGVuCisgICAgZWNobyAiKiogQ2Fubm90IHVzZSBib3RoIC0tZW5hYmxlLXBjcmUydGVzdC1saWJlZGl0IGFuZCAtLWVuYWJsZS1wY3JlMnRlc3QtcmVhZGxpbmUiCisgICAgZXhpdCAxCisgIGZpCisgIGlmIHRlc3QgIiRIQVZFX0VESVRMSU5FX1JFQURMSU5FX0giICE9ICIxIiAtYSBcCisgICAgICAgICAgIiRIQVZFX1JFQURMSU5FX1JFQURMSU5FX0giICE9ICIxIjsgdGhlbgorICAgIGVjaG8gIioqIENhbm5vdCAtLWVuYWJsZS1wY3JlMnRlc3QtbGliZWRpdCBiZWNhdXNlIG5laXRoZXIgZWRpdGxpbmUvcmVhZGxpbmUuaCIKKyAgICBlY2hvICIqKiBub3IgcmVhZGxpbmUvcmVhZGxpbmUuaCB3YXMgZm91bmQuIgorICAgIGV4aXQgMQorICBmaQorICBpZiB0ZXN0IC16ICIkTElCRURJVCI7IHRoZW4KKyAgICBlY2hvICIqKiBDYW5ub3QgLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYmVkaXQgYmVjYXVzZSBsaWJlZGl0IGxpYnJhcnkgd2FzIG5vdCBmb3VuZC4iCisgICAgZXhpdCAxCisgIGZpCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUydGVzdF9saWJyZWFkbGluZSIgPSAieWVzIjsgdGhlbgorICBpZiB0ZXN0ICIkSEFWRV9SRUFETElORV9IIiAhPSAiMSI7IHRoZW4KKyAgICBlY2hvICIqKiBDYW5ub3QgLS1lbmFibGUtcGNyZTJ0ZXN0LXJlYWRsaW5lIGJlY2F1c2UgcmVhZGxpbmUvcmVhZGxpbmUuaCB3YXMgbm90IGZvdW5kLiIKKyAgICBleGl0IDEKKyAgZmkKKyAgaWYgdGVzdCAiJEhBVkVfSElTVE9SWV9IIiAhPSAiMSI7IHRoZW4KKyAgICBlY2hvICIqKiBDYW5ub3QgLS1lbmFibGUtcGNyZTJ0ZXN0LXJlYWRsaW5lIGJlY2F1c2UgcmVhZGxpbmUvaGlzdG9yeS5oIHdhcyBub3QgZm91bmQuIgorICAgIGV4aXQgMQorICBmaQorICBpZiB0ZXN0IC16ICIkTElCUkVBRExJTkUiOyB0aGVuCisgICAgZWNobyAiKiogQ2Fubm90IC0tZW5hYmxlLXBjcmUydGVzdC1yZWFkbGluZSBiZWNhdXNlIHJlYWRsaW5lIGxpYnJhcnkgd2FzIG5vdCBmb3VuZC4iCisgICAgZXhpdCAxCisgIGZpCitmaQorCisjIEhhbmRsZSB2YWxncmluZCBzdXBwb3J0CisKK2lmIHRlc3QgIiRlbmFibGVfdmFsZ3JpbmQiID0gInllcyI7IHRoZW4KKworCisKKworCisKKworaWYgdGVzdCAieCRhY19jdl9lbnZfUEtHX0NPTkZJR19zZXQiICE9ICJ4c2V0IjsgdGhlbgorCWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXBrZy1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfUEtHX0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUEtHX0NPTkZJRz0iJFBLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitQS0dfQ09ORklHPSRhY19jdl9wYXRoX1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRQS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9QS0dfQ09ORklHIjsgdGhlbgorICBhY19wdF9QS0dfQ09ORklHPSRQS0dfQ09ORklHCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcGtnLWNvbmZpZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJGFjX3B0X1BLR19DT05GSUcgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfYWNfcHRfUEtHX0NPTkZJRz0iJGFjX3B0X1BLR19DT05GSUciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIGFzX2ZuX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUc9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCithY19wdF9QS0dfQ09ORklHPSRhY19jdl9wYXRoX2FjX3B0X1BLR19DT05GSUcKK2lmIHRlc3QgLW4gIiRhY19wdF9QS0dfQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3B0X1BLR19DT05GSUciID4mNQorJGFzX2VjaG8gIiRhY19wdF9QS0dfQ09ORklHIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfcHRfUEtHX0NPTkZJRyIgPSB4OyB0aGVuCisgICAgUEtHX0NPTkZJRz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFBLR19DT05GSUc9JGFjX3B0X1BLR19DT05GSUcKKyAgZmkKK2Vsc2UKKyAgUEtHX0NPTkZJRz0iJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyIKK2ZpCisKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPTAuOS4wCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uLi4uICIgPiY2OyB9CisJaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJZWxzZQorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwkJUEtHX0NPTkZJRz0iIgorCWZpCitmaQorCitwa2dfZmFpbGVkPW5vCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBWQUxHUklORCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgVkFMR1JJTkQuLi4gIiA+JjY7IH0KKworaWYgdGVzdCAtbiAiJFZBTEdSSU5EX0NGTEFHUyI7IHRoZW4KKyAgICBwa2dfY3ZfVkFMR1JJTkRfQ0ZMQUdTPSIkVkFMR1JJTkRfQ0ZMQUdTIgorIGVsaWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJFBLR19DT05GSUciICYmIFwKKyAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCRQS0dfQ09ORklHIC0tZXhpc3RzIC0tcHJpbnQtZXJyb3JzIFwidmFsZ3JpbmRcIiI7IH0gPiY1CisgICgkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyAidmFsZ3JpbmQiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICBwa2dfY3ZfVkFMR1JJTkRfQ0ZMQUdTPWAkUEtHX0NPTkZJRyAtLWNmbGFncyAidmFsZ3JpbmQiIDI+L2Rldi9udWxsYAorCQkgICAgICB0ZXN0ICJ4JD8iICE9ICJ4MCIgJiYgcGtnX2ZhaWxlZD15ZXMKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKK2lmIHRlc3QgLW4gIiRWQUxHUklORF9MSUJTIjsgdGhlbgorICAgIHBrZ19jdl9WQUxHUklORF9MSUJTPSIkVkFMR1JJTkRfTElCUyIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkUEtHX0NPTkZJRyAtLWV4aXN0cyAtLXByaW50LWVycm9ycyBcInZhbGdyaW5kXCIiOyB9ID4mNQorICAoJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgInZhbGdyaW5kIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgcGtnX2N2X1ZBTEdSSU5EX0xJQlM9YCRQS0dfQ09ORklHIC0tbGlicyAidmFsZ3JpbmQiIDI+L2Rldi9udWxsYAorCQkgICAgICB0ZXN0ICJ4JD8iICE9ICJ4MCIgJiYgcGtnX2ZhaWxlZD15ZXMKK2Vsc2UKKyAgcGtnX2ZhaWxlZD15ZXMKK2ZpCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmkKKworCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uIDAuMjA7IHRoZW4KKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPXllcworZWxzZQorICAgICAgICBfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQ9bm8KK2ZpCisgICAgICAgIGlmIHRlc3QgJF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZCA9IHllczsgdGhlbgorCSAgICAgICAgVkFMR1JJTkRfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1wcmludC1lcnJvcnMgLS1jZmxhZ3MgLS1saWJzICJ2YWxncmluZCIgMj4mMWAKKyAgICAgICAgZWxzZQorCSAgICAgICAgVkFMR1JJTkRfUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1wcmludC1lcnJvcnMgLS1jZmxhZ3MgLS1saWJzICJ2YWxncmluZCIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkVkFMR1JJTkRfUEtHX0VSUk9SUyIgPiY1CisKKwlhc19mbl9lcnJvciAkPyAiUGFja2FnZSByZXF1aXJlbWVudHMgKHZhbGdyaW5kKSB3ZXJlIG5vdCBtZXQ6CisKKyRWQUxHUklORF9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworQWx0ZXJuYXRpdmVseSwgeW91IG1heSBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBWQUxHUklORF9DRkxBR1MKK2FuZCBWQUxHUklORF9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLiIgIiRMSU5FTk8iIDUKK2VsaWYgdGVzdCAkcGtnX2ZhaWxlZCA9IHVudHJpZWQ7IHRoZW4KKyAgICAgCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCXsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIlRoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIFZBTEdSSU5EX0NGTEFHUworYW5kIFZBTEdSSU5EX0xJQlMgdG8gYXZvaWQgdGhlIG5lZWQgdG8gY2FsbCBwa2ctY29uZmlnLgorU2VlIHRoZSBwa2ctY29uZmlnIG1hbiBwYWdlIGZvciBtb3JlIGRldGFpbHMuCisKK1RvIGdldCBwa2ctY29uZmlnLCBzZWUgPGh0dHA6Ly9wa2ctY29uZmlnLmZyZWVkZXNrdG9wLm9yZy8+LgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KK2Vsc2UKKwlWQUxHUklORF9DRkxBR1M9JHBrZ19jdl9WQUxHUklORF9DRkxBR1MKKwlWQUxHUklORF9MSUJTPSRwa2dfY3ZfVkFMR1JJTkRfTElCUworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorZmkKKworIyBIYW5kbGUgY29kZSBjb3ZlcmFnZSByZXBvcnRpbmcgc3VwcG9ydAoraWYgdGVzdCAiJGVuYWJsZV9jb3ZlcmFnZSIgPSAieWVzIjsgdGhlbgorICBpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIkNvZGUgY292ZXJhZ2UgcmVwb3J0cyBjYW4gb25seSBiZSBnZW5lcmF0ZWQgd2hlbiB1c2luZyBHQ0MiICIkTElORU5PIiA1CisgIGZpCisKKyAgIyBjY2FjaGUgaXMgaW5jb21wYXRpYmxlIHdpdGggZ2NvdgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInNodG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgc2h0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9TSFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRTSFRPT0wgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfU0hUT09MPSIkU0hUT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9TSFRPT0w9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgdGVzdCAteiAiJGFjX2N2X3BhdGhfU0hUT09MIiAmJiBhY19jdl9wYXRoX1NIVE9PTD0iZmFsc2UiCisgIDs7Citlc2FjCitmaQorU0hUT09MPSRhY19jdl9wYXRoX1NIVE9PTAoraWYgdGVzdCAtbiAiJFNIVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTSFRPT0wiID4mNQorJGFzX2VjaG8gIiRTSFRPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBjYXNlIGAkU0hUT09MIHBhdGggJENDYCBpbgorICAgICpjY2FjaGUqKSBjY19jY2FjaGU9eWVzOzsKKyAgICAqKSBjY19jY2FjaGU9bm87OworICBlc2FjCisKKyAgaWYgdGVzdCAiJGNjX2NjYWNoZSIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgLXogIiRDQ0FDSEVfRElTQUJMRSIgLW8gIiRDQ0FDSEVfRElTQUJMRSIgIT0gIjEiOyB0aGVuCisgICAgICBhc19mbl9lcnJvciAkPyAibXVzdCBleHBvcnQgQ0NBQ0hFX0RJU0FCTEU9MSB0byBkaXNhYmxlIGNjYWNoZSBmb3IgY29kZSBjb3ZlcmFnZSIgIiRMSU5FTk8iIDUKKyAgICBmaQorICBmaQorCisKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJsY292Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBsY292OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9MQ09WKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTENPViBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9MQ09WPSIkTENPViIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfTENPVj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9MQ09WIiAmJiBhY19jdl9wYXRoX0xDT1Y9ImZhbHNlIgorICA7OworZXNhYworZmkKK0xDT1Y9JGFjX2N2X3BhdGhfTENPVgoraWYgdGVzdCAtbiAiJExDT1YiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTENPViIgPiY1CiskYXNfZWNobyAiJExDT1YiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICBpZiB0ZXN0ICJ4JExDT1YiID0gInhmYWxzZSI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibGNvdiBub3QgZm91bmQiICIkTElORU5PIiA1CisgIGZpCisKKworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdlbmh0bWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGdlbmh0bWw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0dFTkhUTUwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRHRU5IVE1MIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0dFTkhUTUw9IiRHRU5IVE1MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9HRU5IVE1MPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIHRlc3QgLXogIiRhY19jdl9wYXRoX0dFTkhUTUwiICYmIGFjX2N2X3BhdGhfR0VOSFRNTD0iZmFsc2UiCisgIDs7Citlc2FjCitmaQorR0VOSFRNTD0kYWNfY3ZfcGF0aF9HRU5IVE1MCitpZiB0ZXN0IC1uICIkR0VOSFRNTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRHRU5IVE1MIiA+JjUKKyRhc19lY2hvICIkR0VOSFRNTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIGlmIHRlc3QgIngkR0VOSFRNTCIgPSAieGZhbHNlIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJnZW5odG1sIG5vdCBmb3VuZCIgIiRMSU5FTk8iIDUKKyAgZmkKKworICAjIFNldCBmbGFncyBuZWVkZWQgZm9yIGdjb3YKKyAgR0NPVl9DRkxBR1M9Ii1PMCAtZ2dkYjMgLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIgorICBHQ09WX0NYWEZMQUdTPSItTzAgLWdnZGIzIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKKyAgR0NPVl9MSUJTPSItbGdjb3YiCisKKworCitmaSAjIGVuYWJsZV9jb3ZlcmFnZQorCisgaWYgdGVzdCAieCRlbmFibGVfY292ZXJhZ2UiID0gInh5ZXMiOyB0aGVuCisgIFdJVEhfR0NPVl9UUlVFPQorICBXSVRIX0dDT1ZfRkFMU0U9JyMnCitlbHNlCisgIFdJVEhfR0NPVl9UUlVFPScjJworICBXSVRIX0dDT1ZfRkFMU0U9CitmaQorCisKKyMgUHJvZHVjZSB0aGVzZSBmaWxlcywgaW4gYWRkaXRpb24gdG8gY29uZmlnLmguCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUgbGlicGNyZTItOC5wYyBsaWJwY3JlMi0xNi5wYyBsaWJwY3JlMi0zMi5wYyBsaWJwY3JlMi1wb3NpeC5wYyBwY3JlMi1jb25maWcgc3JjL3BjcmUyLmgiCisKKworIyBNYWtlIHRoZSBnZW5lcmF0ZWQgc2NyaXB0IGZpbGVzIGV4ZWN1dGFibGUuCithY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgc2NyaXB0LWNobW9kIgorCisKKyMgTWFrZSBzdXJlIHRoYXQgcGNyZTJfY2hhcnRhYmxlcy5jIGlzIHJlbW92ZWQgaW4gY2FzZSB0aGUgbWV0aG9kIGZvcgorIyBjcmVhdGluZyBpdCB3YXMgY2hhbmdlZCBieSByZWNvbmZpZ3VyYXRpb24uCithY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVsZXRlLW9sZC1jaGFydGFibGVzIgorCisKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorCit0ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CisjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KK3Rlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKworREVGUz0tREhBVkVfQ09ORklHX0gKKworYWNfbGlib2Jqcz0KK2FjX2x0bGlib2Jqcz0KK1U9Citmb3IgYWNfaSBpbiA6ICRMSUJPQkpTOyBkbyB0ZXN0ICJ4JGFjX2kiID0geDogJiYgY29udGludWUKKyAgIyAxLiBSZW1vdmUgdGhlIGV4dGVuc2lvbiwgYW5kICRVIGlmIGFscmVhZHkgaW5zdGFsbGVkLgorICBhY19zY3JpcHQ9J3MvXCRVXC4vLi87cy9cLm8kLy87cy9cLm9iaiQvLycKKyAgYWNfaT1gJGFzX2VjaG8gIiRhY19pIiB8IHNlZCAiJGFjX3NjcmlwdCJgCisgICMgMi4gUHJlcGVuZCBMSUJPQkpESVIuICBXaGVuIHVzZWQgd2l0aCBhdXRvbWFrZT49MS4xMCBMSUJPQkpESVIKKyAgIyAgICB3aWxsIGJlIHNldCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIExJQk9CSlMgb2JqZWN0cyBhcmUgYnVpbHQuCisgIGFzX2ZuX2FwcGVuZCBhY19saWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pXCRVLiRhY19vYmpleHQiCisgIGFzX2ZuX2FwcGVuZCBhY19sdGxpYm9ianMgIiBcJHtMSUJPQkpESVJ9JGFjX2kiJyRVLmxvJworZG9uZQorTElCT0JKUz0kYWNfbGlib2JqcworCitMVExJQk9CSlM9JGFjX2x0bGlib2JqcworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhhdCBnZW5lcmF0ZWQgZmlsZXMgYXJlIG5ld2VyIHRoYW4gY29uZmlndXJlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoYXQgZ2VuZXJhdGVkIGZpbGVzIGFyZSBuZXdlciB0aGFuIGNvbmZpZ3VyZS4uLiAiID4mNjsgfQorICAgaWYgdGVzdCAtbiAiJGFtX3NsZWVwX3BpZCI7IHRoZW4KKyAgICAgIyBIaWRlIHdhcm5pbmdzIGFib3V0IHJldXNlZCBQSURzLgorICAgICB3YWl0ICRhbV9zbGVlcF9waWQgMj4vZGV2L251bGwKKyAgIGZpCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZG9uZSIgPiY1CiskYXNfZWNobyAiZG9uZSIgPiY2OyB9CisgaWYgdGVzdCAtbiAiJEVYRUVYVCI7IHRoZW4KKyAgYW1fX0VYRUVYVF9UUlVFPQorICBhbV9fRVhFRVhUX0ZBTFNFPScjJworZWxzZQorICBhbV9fRVhFRVhUX1RSVUU9JyMnCisgIGFtX19FWEVFWFRfRkFMU0U9CitmaQorCitpZiB0ZXN0IC16ICIke0FNREVQX1RSVUV9IiAmJiB0ZXN0IC16ICIke0FNREVQX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiQU1ERVBcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1dJVEhfUENSRTJfOF9UUlVFfSIgJiYgdGVzdCAteiAiJHtXSVRIX1BDUkUyXzhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJXSVRIX1BDUkUyXzhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1dJVEhfUENSRTJfMTZfVFJVRX0iICYmIHRlc3QgLXogIiR7V0lUSF9QQ1JFMl8xNl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIldJVEhfUENSRTJfMTZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1dJVEhfUENSRTJfMzJfVFJVRX0iICYmIHRlc3QgLXogIiR7V0lUSF9QQ1JFMl8zMl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIldJVEhfUENSRTJfMzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1dJVEhfREVCVUdfVFJVRX0iICYmIHRlc3QgLXogIiR7V0lUSF9ERUJVR19GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIldJVEhfREVCVUdcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1dJVEhfUkVCVUlMRF9DSEFSVEFCTEVTX1RSVUV9IiAmJiB0ZXN0IC16ICIke1dJVEhfUkVCVUlMRF9DSEFSVEFCTEVTX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiV0lUSF9SRUJVSUxEX0NIQVJUQUJMRVNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1dJVEhfSklUX1RSVUV9IiAmJiB0ZXN0IC16ICIke1dJVEhfSklUX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiV0lUSF9KSVRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1dJVEhfVU5JQ09ERV9UUlVFfSIgJiYgdGVzdCAteiAiJHtXSVRIX1VOSUNPREVfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJXSVRIX1VOSUNPREVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1dJVEhfVkFMR1JJTkRfVFJVRX0iICYmIHRlc3QgLXogIiR7V0lUSF9WQUxHUklORF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIldJVEhfVkFMR1JJTkRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCitpZiB0ZXN0IC16ICIke1dJVEhfR0NPVl9UUlVFfSIgJiYgdGVzdCAteiAiJHtXSVRIX0dDT1ZfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJXSVRIX0dDT1ZcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCisKKzogIiR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9IgorYWNfd3JpdGVfZmFpbD0wCithY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcworYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Cithc193cml0ZV9mYWlsPTAKK2NhdCA+JENPTkZJR19TVEFUVVMgPDxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xCisjISAkU0hFTEwKKyMgR2VuZXJhdGVkIGJ5ICRhc19tZS4KKyMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLgorIyBDb21waWxlciBvdXRwdXQgcHJvZHVjZWQgYnkgY29uZmlndXJlLCB1c2VmdWwgZm9yIGRlYnVnZ2luZworIyBjb25maWd1cmUsIGlzIGluIGNvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLgorCitkZWJ1Zz1mYWxzZQorYWNfY3NfcmVjaGVjaz1mYWxzZQorYWNfY3Nfc2lsZW50PWZhbHNlCisKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYworZmkKKworCithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQU5HVUFHRT1DCitleHBvcnQgTEFOR1VBR0UKKworIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKKworIyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuCithc19mbl9zZXRfc3RhdHVzICgpCit7CisgIHJldHVybiAkMQorfSAjIGFzX2ZuX3NldF9zdGF0dXMKKworIyBhc19mbl9leGl0IFNUQVRVUworIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZlbiBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuCithc19mbl9leGl0ICgpCit7CisgIHNldCArZQorICBhc19mbl9zZXRfc3RhdHVzICQxCisgIGV4aXQgJDEKK30gIyBhc19mbl9leGl0CisKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2YgdGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQorIyBhZHZhbnRhZ2Ugb2YgYW55IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBvdmVyCisjIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGljIGdyb3d0aCBwcmVzZW50IGluIG5haXZlCisjIGltcGxlbWVudGF0aW9ucy4KK2lmIChldmFsICJhc192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgZXZhbCAnYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxKz1cJDIKKyAgfScKK2Vsc2UKKyAgYXNfZm5fYXBwZW5kICgpCisgIHsKKyAgICBldmFsICQxPVwkJDFcJDIKKyAgfQorZmkgIyBhc19mbl9hcHBlbmQKKworIyBhc19mbl9hcml0aCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBhbmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUKKyMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cworIyBtdXN0IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4KK2lmIChldmFsICJ0ZXN0IFwkKCggMSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPSQoKCAkKiApKQorICB9JworZWxzZQorICBhc19mbl9hcml0aCAoKQorICB7CisgICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWAKKyAgfQorZmkgIyBhc19mbl9hcml0aAorCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworaWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgorICBhc19iYXNlbmFtZT1iYXNlbmFtZQorZWxzZQorICBhc19iYXNlbmFtZT1mYWxzZQorZmkKKworaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQorCithc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwKKyRhc19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcCisJIFgiJDAiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisKKyMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJhbmdlcy4KK2FzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworYXNfY3JfTEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCithc19jcl9MZXR0ZXJzPSRhc19jcl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMKK2FzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKK2FzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cworCitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKK2VzYWMKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcFInLgorICAgIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwKKyAgICAgIGFzX2xuX3M9J2NwIC1wUicKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcFInCisgIGZpCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wUicKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCisKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKK2Vsc2UKKyAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKKyAgYXNfbWtkaXJfcD1mYWxzZQorZmkKKworCisjIGFzX2ZuX2V4ZWN1dGFibGVfcCBGSUxFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3QgaWYgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KK2FzX2ZuX2V4ZWN1dGFibGVfcCAoKQoreworICB0ZXN0IC1mICIkMSIgJiYgdGVzdCAteCAiJDEiCit9ICMgYXNfZm5fZXhlY3V0YWJsZV9wCithc190ZXN0X3g9J3Rlc3QgLXgnCithc19leGVjdXRhYmxlX3A9YXNfZm5fZXhlY3V0YWJsZV9wCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworCitleGVjIDY+JjEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2YgJENPTkZJR19TVEFUVVMgc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0VPRgordGVzdCAkYXNfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKKyMgU2F2ZSB0aGUgbG9nIG1lc3NhZ2UsIHRvIGtlZXAgJDAgYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bworIyByZXBvcnQgYWN0dWFsIGlucHV0IHZhbHVlcyBvZiBDT05GSUdfRklMRVMgZXRjLiBpbnN0ZWFkIG9mIHRoZWlyCisjIHZhbHVlcyBhZnRlciBvcHRpb25zIGhhbmRsaW5nLgorYWNfbG9nPSIKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgUENSRTIgJGFzX21lIDEwLjIxLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCisgIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MKKyAgQ09ORklHX0NPTU1BTkRTID0gJENPTkZJR19DT01NQU5EUworICAkICQwICRACisKK29uIGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAorIgorCitfQUNFT0YKKworY2FzZSAkYWNfY29uZmlnX2ZpbGVzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19maWxlczsgc2hpZnQ7IGFjX2NvbmZpZ19maWxlcz0kKjs7Citlc2FjCisKK2Nhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoiCisiKikgc2V0IHggJGFjX2NvbmZpZ19oZWFkZXJzOyBzaGlmdDsgYWNfY29uZmlnX2hlYWRlcnM9JCo7OworZXNhYworCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgorY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIgorY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyIKK2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyIKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2FjX2NzX3VzYWdlPSJcCitcYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGFjdGlvbnMKK2Zyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiAgVW5sZXNzIHRoZSBmaWxlcworYW5kIGFjdGlvbnMgYXJlIHNwZWNpZmllZCBhcyBUQUdzLCBhbGwgYXJlIGluc3RhbnRpYXRlZCBieSBkZWZhdWx0LgorCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1RBR10uLi4KKworICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0CisgIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIHRoZW4gZXhpdAorICAgICAgLS1jb25maWcgICAgIHByaW50IGNvbmZpZ3VyYXRpb24sIHRoZW4gZXhpdAorICAtcSwgLS1xdWlldCwgLS1zaWxlbnQKKyAgICAgICAgICAgICAgICAgICBkbyBub3QgcHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMKKyAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCisgICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNvbmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMKKyAgICAgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKyAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIEZJTEUKKyAgICAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFCisKK0NvbmZpZ3VyYXRpb24gZmlsZXM6CiskY29uZmlnX2ZpbGVzCisKK0NvbmZpZ3VyYXRpb24gaGVhZGVyczoKKyRjb25maWdfaGVhZGVycworCitDb25maWd1cmF0aW9uIGNvbW1hbmRzOgorJGNvbmZpZ19jb21tYW5kcworCitSZXBvcnQgYnVncyB0byB0aGUgcGFja2FnZSBwcm92aWRlci4iCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCithY19jc19jb25maWc9ImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgIgorYWNfY3NfdmVyc2lvbj0iXFwKK1BDUkUyIGNvbmZpZy5zdGF0dXMgMTAuMjEKK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSwKKyAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCisKK0NvcHlyaWdodCAoQykgMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKKworYWNfcHdkPSckYWNfcHdkJworc3JjZGlyPSckc3JjZGlyJworSU5TVEFMTD0nJElOU1RBTEwnCitNS0RJUl9QPSckTUtESVJfUCcKK0FXSz0nJEFXSycKK3Rlc3QgLW4gIlwkQVdLIiB8fCBBV0s9YXdrCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBUaGUgZGVmYXVsdCBsaXN0cyBhcHBseSBpZiB0aGUgdXNlciBkb2VzIG5vdCBzcGVjaWZ5IGFueSBmaWxlLgorYWNfbmVlZF9kZWZhdWx0cz06Cit3aGlsZSB0ZXN0ICQjICE9IDAKK2RvCisgIGNhc2UgJDEgaW4KKyAgLS0qPT8qKQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAtLSo9KQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPQorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAqKQorICAgIGFjX29wdGlvbj0kMQorICAgIGFjX29wdGFyZz0kMgorICAgIGFjX3NoaWZ0PXNoaWZ0CisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorICAtcmVjaGVjayB8IC0tcmVjaGVjayB8IC0tcmVjaGVjIHwgLS1yZWNoZSB8IC0tcmVjaCB8IC0tcmVjIHwgLS1yZSB8IC0tcikKKyAgICBhY19jc19yZWNoZWNrPTogOzsKKyAgLS12ZXJzaW9uIHwgLS12ZXJzaW8gfCAtLXZlcnNpIHwgLS12ZXJzIHwgLS12ZXIgfCAtLXZlIHwgLS12IHwgLVYgKQorICAgICRhc19lY2hvICIkYWNfY3NfdmVyc2lvbiI7IGV4aXQgOzsKKyAgLS1jb25maWcgfCAtLWNvbmZpIHwgLS1jb25mIHwgLS1jb24gfCAtLWNvIHwgLS1jICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX2NvbmZpZyI7IGV4aXQgOzsKKyAgLS1kZWJ1ZyB8IC0tZGVidSB8IC0tZGViIHwgLS1kZSB8IC0tZCB8IC1kICkKKyAgICBkZWJ1Zz06IDs7CisgIC0tZmlsZSB8IC0tZmlsIHwgLS1maSB8IC0tZiApCisgICAgJGFjX3NoaWZ0CisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAnJykgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgZmlsZSBhcmd1bWVudCIgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19GSUxFUyAiICckYWNfb3B0YXJnJyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZWFkZXIgfCAtLWhlYWRlIHwgLS1oZWFkIHwgLS1oZWEgKQorICAgICRhY19zaGlmdAorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfSEVBREVSUyAiICckYWNfb3B0YXJnJyIKKyAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgLS1oZSB8IC0taCkKKyAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgorICAgIGFzX2ZuX2Vycm9yICQ/ICJhbWJpZ3VvdXMgb3B0aW9uOiBcYCQxJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iOzsKKyAgLS1oZWxwIHwgLS1oZWwgfCAtaCApCisgICAgJGFzX2VjaG8gIiRhY19jc191c2FnZSI7IGV4aXQgOzsKKyAgLXEgfCAtcXVpZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwKKyAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwgfCAtLXNpIHwgLS1zKQorICAgIGFjX2NzX3NpbGVudD06IDs7CisKKyAgIyBUaGlzIGlzIGFuIGVycm9yLgorICAtKikgYXNfZm5fZXJyb3IgJD8gInVucmVjb2duaXplZCBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgOzsKKworICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlnX3RhcmdldHMgIiAkMSIKKyAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZSA7OworCisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9CisKK2lmICRhY19jc19zaWxlbnQ7IHRoZW4KKyAgZXhlYyA2Pi9kZXYvbnVsbAorICBhY19jb25maWd1cmVfZXh0cmFfYXJncz0iJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tc2lsZW50IgorZmkKKworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgorICBzZXQgWCAkU0hFTEwgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzaGlmdAorICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICBleGVjICJcJEAiCitmaQorCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworICBlY2hvCisgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisjIyBSdW5uaW5nICRhc19tZS4gIyMKK19BU0JPWAorICAkYXNfZWNobyAiJGFjX2xvZyIKK30gPiY1CisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjCisjIElOSVQtQ09NTUFORFMKKyMKK0FNREVQX1RSVUU9IiRBTURFUF9UUlVFIiBhY19hdXhfZGlyPSIkYWNfYXV4X2RpciIKKworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworQVM9J2AkRUNITyAiJEFTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYWNyb192ZXJzaW9uPSdgJEVDSE8gIiRtYWNyb192ZXJzaW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21hY3JvX3JldmlzaW9uPSdgJEVDSE8gIiRtYWNyb19yZXZpc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zdGF0aWM9J2AkRUNITyAiJGVuYWJsZV9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcGljX21vZGU9J2AkRUNITyAiJHBpY19tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9mYXN0X2luc3RhbGw9J2AkRUNITyAiJGVuYWJsZV9mYXN0X2luc3RhbGwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9J2AkRUNITyAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NIRUxMPSdgJEVDSE8gIiRTSEVMTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitFQ0hPPSdgJEVDSE8gIiRFQ0hPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1BBVEhfU0VQQVJBVE9SPSdgJEVDSE8gIiRQQVRIX1NFUEFSQVRPUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0X2FsaWFzPSdgJEVDSE8gIiRob3N0X2FsaWFzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3Q9J2AkRUNITyAiJGhvc3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9vcz0nYCRFQ0hPICIkaG9zdF9vcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZF9hbGlhcz0nYCRFQ0hPICIkYnVpbGRfYWxpYXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGQ9J2AkRUNITyAiJGJ1aWxkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkX29zPSdgJEVDSE8gIiRidWlsZF9vcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitTRUQ9J2AkRUNITyAiJFNFRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitYc2VkPSdgJEVDSE8gIiRYc2VkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0dSRVA9J2AkRUNITyAiJEdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRUdSRVA9J2AkRUNITyAiJEVHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0ZHUkVQPSdgJEVDSE8gIiRGR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMRD0nYCRFQ0hPICIkTEQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTk09J2AkRUNITyAiJE5NIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xOX1M9J2AkRUNITyAiJExOX1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbWF4X2NtZF9sZW49J2AkRUNITyAiJG1heF9jbWRfbGVuIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FjX29iamV4dD0nYCRFQ0hPICIkYWNfb2JqZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4ZWV4dD0nYCRFQ0hPICIkZXhlZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Vuc2V0PSdgJEVDSE8gIiRsdF91bnNldCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9TUDJOTD0nYCRFQ0hPICIkbHRfU1AyTkwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfTkwyU1A9J2AkRUNITyAiJGx0X05MMlNQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfdG9fdG9vbF9maWxlX2NtZD0nYCRFQ0hPICIkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfZmxhZz0nYCRFQ0hPICIkcmVsb2FkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2NtZHM9J2AkRUNITyAiJHJlbG9hZF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdgJEVDSE8gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitmaWxlX21hZ2ljX2NtZD0nYCRFQ0hPICIkZmlsZV9tYWdpY19jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9tYWdpY19nbG9iPSdgJEVDSE8gIiRmaWxlX21hZ2ljX2dsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2FudF9ub2Nhc2VnbG9iPSdgJEVDSE8gIiR3YW50X25vY2FzZWdsb2IiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J2AkRUNITyAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0FSPSdgJEVDSE8gIiRBUiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUl9GTEFHUz0nYCRFQ0hPICIkQVJfRkxBR1MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZXJfbGlzdF9zcGVjPSdgJEVDSE8gIiRhcmNoaXZlcl9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU1RSSVA9J2AkRUNITyAiJFNUUklQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1JBTkxJQj0nYCRFQ0hPICIkUkFOTElCIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdGluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPSdgJEVDSE8gIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQ0M9J2AkRUNITyAiJENDIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0NGTEFHUz0nYCRFQ0hPICIkQ0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyPSdgJEVDSE8gIiRjb21waWxlciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHQ0M9J2AkRUNITyAiJEdDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9ubV9pbnRlcmZhY2U9J2AkRUNITyAiJGx0X2N2X25tX2ludGVyZmFjZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitubV9maWxlX2xpc3Rfc3BlYz0nYCRFQ0hPICIkbm1fZmlsZV9saXN0X3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfc3lzcm9vdD0nYCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl90cnVuY2F0ZV9iaW49J2AkRUNITyAiJGx0X2N2X3RydW5jYXRlX2JpbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvYmpkaXI9J2AkRUNITyAiJG9iamRpciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitNQUdJQ19DTUQ9J2AkRUNITyAiJE1BR0lDX0NNRCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9waWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfd2w9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfd2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3Byb2dfY29tcGlsZXJfY19vPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCituZWVkX2xvY2tzPSdgJEVDSE8gIiRuZWVkX2xvY2tzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK01BTklGRVNUX1RPT0w9J2AkRUNITyAiJE1BTklGRVNUX1RPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworRFNZTVVUSUw9J2AkRUNITyAiJERTWU1VVElMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK05NRURJVD0nYCRFQ0hPICIkTk1FRElUIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0xJUE89J2AkRUNITyAiJExJUE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT1RPT0w9J2AkRUNITyAiJE9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09UT09MNjQ9J2AkRUNITyAiJE9UT09MNjQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGliZXh0PSdgJEVDSE8gIiRsaWJleHQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hyZXh0X2NtZHM9J2AkRUNITyAiJHNocmV4dF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4dHJhY3RfZXhwc3ltc19jbWRzPSdgJEVDSE8gIiRleHRyYWN0X2V4cHN5bXNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2NtZHNfbmVlZF9sYz0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzX25lZWRfbGMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz0nYCRFQ0hPICIkZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9J2AkRUNITyAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nYCRFQ0hPICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbmVlZHNfb2JqZWN0PSdgJEVDSE8gIiRjb21waWxlcl9uZWVkc19vYmplY3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9leHBzeW1fY21kcz0nYCRFQ0hPICIkYXJjaGl2ZV9leHBzeW1fY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittb2R1bGVfY21kcz0nYCRFQ0hPICIkbW9kdWxlX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2V4cHN5bV9jbWRzPSdgJEVDSE8gIiRtb2R1bGVfZXhwc3ltX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2l0aF9nbnVfbGQ9J2AkRUNITyAiJHdpdGhfZ251X2xkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FsbG93X3VuZGVmaW5lZF9mbGFnPSdgJEVDSE8gIiRhbGxvd191bmRlZmluZWRfZmxhZyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitub191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICIkbm9fdW5kZWZpbmVkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX21pbnVzX0w9J2AkRUNITyAiJGhhcmRjb2RlX21pbnVzX0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF92ZXJzaW9uPSdgJEVDSE8gIiRuZWVkX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmVyc2lvbl90eXBlPSdgJEVDSE8gIiR2ZXJzaW9uX3R5cGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcnVucGF0aF92YXI9J2AkRUNITyAiJHJ1bnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NobGlicGF0aF92YXI9J2AkRUNITyAiJHNobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSdgJEVDSE8gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlibmFtZV9zcGVjPSdgJEVDSE8gIiRsaWJuYW1lX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlicmFyeV9uYW1lc19zcGVjPSdgJEVDSE8gIiRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc29uYW1lX3NwZWM9J2AkRUNITyAiJHNvbmFtZV9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0nYCRFQ0hPICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRwb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2NtZHM9J2AkRUNITyAiJGZpbmlzaF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9ldmFsPSdgJEVDSE8gIiRmaW5pc2hfZXZhbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9pbnRvX2xpYnM9J2AkRUNITyAiJGhhcmRjb2RlX2ludG9fbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoPSdgJEVDSE8gIiRjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg9J2AkRUNITyAiJGNvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uPSdgJEVDSE8gIiRoYXJkY29kZV9hY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbj0nYCRFQ0hPICIkZW5hYmxlX2Rsb3BlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGY9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9zdHJpcGxpYj0nYCRFQ0hPICIkb2xkX3N0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N0cmlwbGliPSdgJEVDSE8gIiRzdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJDEKK19MVEVDSE9fRU9GJworfQorCisjIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBBUyBcCitETExUT09MIFwKK09CSkRVTVAgXAorU0hFTEwgXAorRUNITyBcCitQQVRIX1NFUEFSQVRPUiBcCitTRUQgXAorR1JFUCBcCitFR1JFUCBcCitGR1JFUCBcCitMRCBcCitOTSBcCitMTl9TIFwKK2x0X1NQMk5MIFwKK2x0X05MMlNQIFwKK3JlbG9hZF9mbGFnIFwKK2RlcGxpYnNfY2hlY2tfbWV0aG9kIFwKK2ZpbGVfbWFnaWNfY21kIFwKK2ZpbGVfbWFnaWNfZ2xvYiBcCit3YW50X25vY2FzZWdsb2IgXAorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorQVIgXAorQVJfRkxBR1MgXAorYXJjaGl2ZXJfbGlzdF9zcGVjIFwKK1NUUklQIFwKK1JBTkxJQiBcCitDQyBcCitDRkxBR1MgXAorY29tcGlsZXIgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCitsdF9jdl9ubV9pbnRlcmZhY2UgXAorbm1fZmlsZV9saXN0X3NwZWMgXAorbHRfY3ZfdHJ1bmNhdGVfYmluIFwKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKK2x0X3Byb2dfY29tcGlsZXJfcGljIFwKK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorbmVlZF9sb2NrcyBcCitNQU5JRkVTVF9UT09MIFwKK0RTWU1VVElMIFwKK05NRURJVCBcCitMSVBPIFwKK09UT09MIFwKK09UT09MNjQgXAorc2hyZXh0X2NtZHMgXAorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKK2NvbXBpbGVyX25lZWRzX29iamVjdCBcCit3aXRoX2dudV9sZCBcCithbGxvd191bmRlZmluZWRfZmxhZyBcCitub191bmRlZmluZWRfZmxhZyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgXAorZXhjbHVkZV9leHBzeW1zIFwKK2luY2x1ZGVfZXhwc3ltcyBcCitmaWxlX2xpc3Rfc3BlYyBcCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBcCitsaWJuYW1lX3NwZWMgXAorbGlicmFyeV9uYW1lc19zcGVjIFwKK3NvbmFtZV9zcGVjIFwKK2luc3RhbGxfb3ZlcnJpZGVfbW9kZSBcCitmaW5pc2hfZXZhbCBcCitvbGRfc3RyaXBsaWIgXAorc3RyaXBsaWI7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIHJlbG9hZF9jbWRzIFwKK29sZF9wb3N0aW5zdGFsbF9jbWRzIFwKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAorb2xkX2FyY2hpdmVfY21kcyBcCitleHRyYWN0X2V4cHN5bXNfY21kcyBcCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIFwKK2FyY2hpdmVfY21kcyBcCithcmNoaXZlX2V4cHN5bV9jbWRzIFwKK21vZHVsZV9jbWRzIFwKK21vZHVsZV9leHBzeW1fY21kcyBcCitleHBvcnRfc3ltYm9sc19jbWRzIFwKK3ByZWxpbmtfY21kcyBcCitwb3N0bGlua19jbWRzIFwKK3Bvc3RpbnN0YWxsX2NtZHMgXAorcG9zdHVuaW5zdGFsbF9jbWRzIFwKK2ZpbmlzaF9jbWRzIFwKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBcCitjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoIFwKK2NvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCithY19hdXhfZGlyPSckYWNfYXV4X2RpcicKKworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCisKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBSTT0nJFJNJworICAgIG9maWxlPSckb2ZpbGUnCisKKworCisKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisKKyMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgorZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCitkbworICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluCisgICAgInNyYy9jb25maWcuaCIpIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgc3JjL2NvbmZpZy5oIiA7OworICAgICJkZXBmaWxlcyIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsKKyAgICAibGlidG9vbCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBsaWJ0b29sIiA7OworICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZSIgOzsKKyAgICAibGlicGNyZTItOC5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJwY3JlMi04LnBjIiA7OworICAgICJsaWJwY3JlMi0xNi5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJwY3JlMi0xNi5wYyIgOzsKKyAgICAibGlicGNyZTItMzIucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbGlicGNyZTItMzIucGMiIDs7CisgICAgImxpYnBjcmUyLXBvc2l4LnBjIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGxpYnBjcmUyLXBvc2l4LnBjIiA7OworICAgICJwY3JlMi1jb25maWciKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcGNyZTItY29uZmlnIiA7OworICAgICJzcmMvcGNyZTIuaCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzcmMvcGNyZTIuaCIgOzsKKyAgICAic2NyaXB0LWNobW9kIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIHNjcmlwdC1jaG1vZCIgOzsKKyAgICAiZGVsZXRlLW9sZC1jaGFydGFibGVzIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIGRlbGV0ZS1vbGQtY2hhcnRhYmxlcyIgOzsKKworICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKKyAgZXNhYworZG9uZQorCisKKyMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCisgIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCitmaQorCisjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KKyMgSG9vayBmb3IgaXRzIHJlbW92YWwgdW5sZXNzIGRlYnVnZ2luZy4KKyMgTm90ZSB0aGF0IHRoZXJlIGlzIGEgc21hbGwgd2luZG93IGluIHdoaWNoIHRoZSBkaXJlY3Rvcnkgd2lsbCBub3QgYmUgY2xlYW5lZDoKKyMgYWZ0ZXIgaXRzIGNyZWF0aW9uIGJ1dCBiZWZvcmUgaXRzIG5hbWUgaGFzIGJlZW4gYXNzaWduZWQgdG8gYCR0bXAnLgorJGRlYnVnIHx8Cit7CisgIHRtcD0gYWNfdG1wPQorICB0cmFwICdleGl0X3N0YXR1cz0kPworICA6ICIke2FjX3RtcDo9JHRtcH0iCisgIHsgdGVzdCAhIC1kICIkYWNfdG1wIiB8fCBybSAtZnIgIiRhY190bXAiOyB9ICYmIGV4aXQgJGV4aXRfc3RhdHVzCisnIDAKKyAgdHJhcCAnYXNfZm5fZXhpdCAxJyAxIDIgMTMgMTUKK30KKyMgQ3JlYXRlIGEgKHNlY3VyZSkgdG1wIGRpcmVjdG9yeSBmb3IgdG1wIGZpbGVzLgorCit7CisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1kICIkdG1wIgorfSAgfHwKK3sKKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCit9IHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorYWNfdG1wPSR0bXAKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgoraWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KKworCithY19jcj1gZWNobyBYIHwgdHIgWCAnXDAxNSdgCisjIE9uIGN5Z3dpbiwgYmFzaCBjYW4gZWF0IFxyIGluc2lkZSBgYCBpZiB0aGUgdXNlciByZXF1ZXN0ZWQgaWduY3IuCisjIEJ1dCB3ZSBrbm93IG9mIG5vIG90aGVyIHNoZWxsIHdoZXJlIGFjX2NyIHdvdWxkIGJlIGVtcHR5IGF0IHRoaXMKKyMgcG9pbnQsIHNvIHdlIGNhbiB1c2UgYSBiYXNoaXNtIGFzIGEgZmFsbGJhY2suCitpZiB0ZXN0ICJ4JGFjX2NyIiA9IHg7IHRoZW4KKyAgZXZhbCBhY19jcj1cJFwnXFxyXCcKK2ZpCithY19jc19hd2tfY3I9YCRBV0sgJ0JFR0lOIHsgcHJpbnQgImFccmIiIH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCitpZiB0ZXN0ICIkYWNfY3NfYXdrX2NyIiA9ICJhJHthY19jcn1iIjsgdGhlbgorICBhY19jc19hd2tfY3I9J1xccicKK2Vsc2UKKyAgYWNfY3NfYXdrX2NyPSRhY19jcgorZmkKKworZWNobyAnQkVHSU4geycgPiIkYWNfdG1wL3N1YnMxLmF3ayIgJiYKK19BQ0VPRgorCisKK3sKKyAgZWNobyAiY2F0ID5jb25mJCRzdWJzLmF3ayA8PF9BQ0VPRiIgJiYKKyAgZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgc2VkICdzLy4qLyYhJCYkYWNfZGVsaW0vJyAmJgorICBlY2hvICJfQUNFT0YiCit9ID5jb25mJCRzdWJzLnNoIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKK2FjX2RlbGltX251bT1gZWNobyAiJGFjX3N1YnN0X3ZhcnMiIHwgZ3JlcCAtYyAnXidgCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIGZhbHNlIDo7IGRvCisgIC4gLi9jb25mJCRzdWJzLnNoIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorCisgIGFjX2RlbGltX249YHNlZCAtbiAicy8uKiRhY19kZWxpbVwkL1gvcCIgY29uZiQkc3Vicy5hd2sgfCBncmVwIC1jIFhgCisgIGlmIHRlc3QgJGFjX2RlbGltX24gPSAkYWNfZGVsaW1fbnVtOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisgIGVsc2UKKyAgICBhY19kZWxpbT0iJGFjX2RlbGltISRhY19kZWxpbSBfJGFjX2RlbGltISEgIgorICBmaQorZG9uZQorcm0gLWYgY29uZiQkc3Vicy5zaAorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8XFxfQUNBV0sgJiYKK19BQ0VPRgorc2VkIC1uICcKK2gKK3MvXi9TWyIvOyBzLyEuKi8iXT0vCitwCitnCitzL15bXiFdKiEvLworOnJlcGwKK3QgcmVwbAorcy8nIiRhY19kZWxpbSInJC8vCit0IGRlbGltCis6bmwKK2gKK3MvXCguXHsxNDhcfVwpLi4qL1wxLwordCBtb3JlMQorcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxuIlxcLworcAorbgorYiByZXBsCis6bW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBubAorOmRlbGltCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyIvCitwCitiCis6bW9yZTIKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kLyJcXC8KK3AKK2cKK3MvLlx7MTQ4XH0vLwordCBkZWxpbQorJyA8Y29uZiQkc3Vicy5hd2sgfCBzZWQgJworL15bXiIiXS97CisgIE4KKyAgcy9cbi8vCit9CisnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCitybSAtZiBjb25mJCRzdWJzLmF3aworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitfQUNBV0sKK2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8X0FDQVdLICYmCisgIGZvciAoa2V5IGluIFMpIFNfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCisKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CisKKyAgcHJpbnQgbGluZQorfQorCitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQoraWYgc2VkICJzLyRhY19jci8vIiA8IC9kZXYvbnVsbCA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIHNlZCAicy8kYWNfY3JcJC8vOyBzLyRhY19jci8kYWNfY3NfYXdrX2NyL2ciCitlbHNlCisgIGNhdAorZmkgPCAiJGFjX3RtcC9zdWJzMS5hd2siID4gIiRhY190bXAvc3Vicy5hd2siIFwKKyAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBzZXR1cCBjb25maWcgZmlsZXMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorX0FDRU9GCisKKyMgVlBBVEggbWF5IGNhdXNlIHRyb3VibGUgd2l0aCBzb21lIG1ha2VzLCBzbyB3ZSByZW1vdmUgc29sZSAkKHNyY2RpciksCisjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZW50cmllcyBmcm9tIFZQQVRIIGlmIHNyY2RpciBpcyAiLiIsIHN0cmlwIGxlYWRpbmcgYW5kCisjIHRyYWlsaW5nIGNvbG9ucyBhbmQgdGhlbiByZW1vdmUgdGhlIHdob2xlIGxpbmUgaWYgVlBBVEggYmVjb21lcyBlbXB0eQorIyAoYWN0dWFsbHkgd2UgbGVhdmUgYW4gZW1wdHkgbGluZSB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMpLgoraWYgdGVzdCAieCRzcmNkaXIiID0geC47IHRoZW4KKyAgYWNfdnBzdWI9Jy9eWwkgXSpWUEFUSFsJIF0qPVsJIF0qL3sKK2gKK3MvLy8KK3MvXi86Lworcy9bCSBdKiQvOi8KK3MvOlwkKHNyY2Rpcik6LzovZworcy86XCR7c3JjZGlyfTovOi9nCitzLzpAc3JjZGlyQDovOi9nCitzL146Ki8vCitzLzoqJC8vCit4CitzL1woPVsJIF0qXCkuKi9cMS8KK0cKK3MvXG4vLworcy9eW149XSo9WwkgXSokLy8KK30nCitmaQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisKKyMgU2V0IHVwIHRoZSBzY3JpcHRzIGZvciBDT05GSUdfSEVBREVSUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19IRUFERVJTLgorIyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBNYWtlZmlsZScuCitpZiB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiOyB0aGVuCitjYXQgPiIkYWNfdG1wL2RlZmluZXMuYXdrIiA8PFxfQUNBV0sgfHwKK0JFR0lOIHsKK19BQ0VPRgorCisjIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gYW4gYXdrIHNjcmlwdCBgZGVmaW5lcy5hd2snLCBlbWJlZGRlZCBhcworIyBoZXJlLWRvY3VtZW50IGluIGNvbmZpZy5zdGF0dXMsIHRoYXQgc3Vic3RpdHV0ZXMgdGhlIHByb3BlciB2YWx1ZXMgaW50bworIyBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLgorCisjIENyZWF0ZSBhIGRlbGltaXRlciBzdHJpbmcgdGhhdCBkb2VzIG5vdCBleGlzdCBpbiBjb25mZGVmcy5oLCB0byBlYXNlCisjIGhhbmRsaW5nIG9mIGxvbmcgbGluZXMuCithY19kZWxpbT0nJSFfISMgJworZm9yIGFjX2xhc3RfdHJ5IGluIGZhbHNlIGZhbHNlIDo7IGRvCisgIGFjX3R0PWBzZWQgLW4gIi8kYWNfZGVsaW0vcCIgY29uZmRlZnMuaGAKKyAgaWYgdGVzdCAteiAiJGFjX3R0IjsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfSEVBREVSUyIgIiRMSU5FTk8iIDUKKyAgZWxzZQorICAgIGFjX2RlbGltPSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiCisgIGZpCitkb25lCisKKyMgRm9yIHRoZSBhd2sgc2NyaXB0LCBEIGlzIGFuIGFycmF5IG9mIG1hY3JvIHZhbHVlcyBrZXllZCBieSBuYW1lLAorIyBsaWtld2lzZSBQIGNvbnRhaW5zIG1hY3JvIHBhcmFtZXRlcnMgaWYgYW55LiAgUHJlc2VydmUgYmFja3NsYXNoCisjIG5ld2xpbmUgc2VxdWVuY2VzLgorCithY193b3JkX3JlPVtfJGFzX2NyX0xldHRlcnNdW18kYXNfY3JfYWxudW1dKgorc2VkIC1uICcKK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCByc2V0Cis6cnNldAorcy9eWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSovIC8KK3QgZGVmCitkCis6ZGVmCitzL1xcJC8vCit0IGJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzIi9wCitzL14gXCgnIiRhY193b3JkX3JlIidcKVsJIF0qXCguKlwpL0RbIlwxIl09IiBcMiIvcAorZAorOmJzbmwKK3MvWyJcXF0vXFwmL2cKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpXCgoW14oKV0qKVwpWwkgXSpcKC4qXCkvUFsiXDEiXT0iXDIiXAorRFsiXDEiXT0iIFwzXFxcXFxcbiJcXC9wCit0IGNvbnQKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyXFxcXFxcbiJcXC9wCit0IGNvbnQKK2QKKzpjb250CituCitzLy5cezE0OFx9LyYnIiRhY19kZWxpbSInL2cKK3QgY2xlYXIKKzpjbGVhcgorcy9cXCQvLwordCBic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi9wCitkCis6YnNubGMKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcXFxcXG4iXFwvcAorYiBjb250CisnIDxjb25mZGVmcy5oIHwgc2VkICcKK3MvJyIkYWNfZGVsaW0iJy8iXFxcCisiL2cnID4+JENPTkZJR19TVEFUVVMgfHwgYWNfd3JpdGVfZmFpbD0xCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBmb3IgKGtleSBpbiBEKSBEX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorfQorL15bXHQgXSojW1x0IF0qKGRlZmluZXx1bmRlZilbXHQgXSskYWNfd29yZF9yZShbXHQgKF18XCQpLyB7CisgIGxpbmUgPSBcJCAwCisgIHNwbGl0KGxpbmUsIGFyZywgIiAiKQorICBpZiAoYXJnWzFdID09ICIjIikgeworICAgIGRlZnVuZGVmID0gYXJnWzJdCisgICAgbWFjMSA9IGFyZ1szXQorICB9IGVsc2UgeworICAgIGRlZnVuZGVmID0gc3Vic3RyKGFyZ1sxXSwgMikKKyAgICBtYWMxID0gYXJnWzJdCisgIH0KKyAgc3BsaXQobWFjMSwgbWFjMiwgIigiKSAjKQorICBtYWNybyA9IG1hYzJbMV0KKyAgcHJlZml4ID0gc3Vic3RyKGxpbmUsIDEsIGluZGV4KGxpbmUsIGRlZnVuZGVmKSAtIDEpCisgIGlmIChEX2lzX3NldFttYWNyb10pIHsKKyAgICAjIFByZXNlcnZlIHRoZSB3aGl0ZSBzcGFjZSBzdXJyb3VuZGluZyB0aGUgIiMiLgorICAgIHByaW50IHByZWZpeCAiZGVmaW5lIiwgbWFjcm8gUFttYWNyb10gRFttYWNyb10KKyAgICBuZXh0CisgIH0gZWxzZSB7CisgICAgIyBSZXBsYWNlICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvciBleGFtcGxlLAorICAgICMgaW4gdGhlIGNhc2Ugb2YgX1BPU0lYX1NPVVJDRSwgd2hpY2ggaXMgcHJlZGVmaW5lZCBhbmQgcmVxdWlyZWQKKyAgICAjIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KKyAgICBpZiAoZGVmdW5kZWYgPT0gInVuZGVmIikgeworICAgICAgcHJpbnQgIi8qIiwgcHJlZml4IGRlZnVuZGVmLCBtYWNybywgIiovIgorICAgICAgbmV4dAorICAgIH0KKyAgfQorfQoreyBwcmludCB9CitfQUNBV0sKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IHNldHVwIGNvbmZpZyBoZWFkZXJzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKK2ZpICMgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIgorCisKK2V2YWwgc2V0IFggIiAgOkYgJENPTkZJR19GSUxFUyAgOkggJENPTkZJR19IRUFERVJTICAgIDpDICRDT05GSUdfQ09NTUFORFMiCitzaGlmdAorZm9yIGFjX3RhZworZG8KKyAgY2FzZSAkYWNfdGFnIGluCisgIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsgY29udGludWU7OworICBlc2FjCisgIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluCisgIDpbRkhMXSo6Kik7OworICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdGFnIFxgJGFjX3RhZyciICIkTElORU5PIiA1OzsKKyAgOltGSF0tKSBhY190YWc9LTotOzsKKyAgOltGSF0qKSBhY190YWc9JGFjX3RhZzokYWNfdGFnLmluOzsKKyAgZXNhYworICBhY19zYXZlX0lGUz0kSUZTCisgIElGUz06CisgIHNldCB4ICRhY190YWcKKyAgSUZTPSRhY19zYXZlX0lGUworICBzaGlmdAorICBhY19maWxlPSQxCisgIHNoaWZ0CisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6TCkgYWNfc291cmNlPSQxOzsKKyAgOltGSF0pCisgICAgYWNfZmlsZV9pbnB1dHM9CisgICAgZm9yIGFjX2YKKyAgICBkbworICAgICAgY2FzZSAkYWNfZiBpbgorICAgICAgLSkgYWNfZj0iJGFjX3RtcC9zdGRpbiI7OworICAgICAgKikgIyBMb29rIGZvciB0aGUgZmlsZSBmaXJzdCBpbiB0aGUgYnVpbGQgdHJlZSwgdGhlbiBpbiB0aGUgc291cmNlIHRyZWUKKwkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRoZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsCisJICMgYmVjYXVzZSAkYWNfZiBjYW5ub3QgY29udGFpbiBgOicuCisJIHRlc3QgLWYgIiRhY19mIiB8fAorCSAgIGNhc2UgJGFjX2YgaW4KKwkgICBbXFwvJF0qKSBmYWxzZTs7CisJICAgKikgdGVzdCAtZiAiJHNyY2Rpci8kYWNfZiIgJiYgYWNfZj0iJHNyY2Rpci8kYWNfZiI7OworCSAgIGVzYWMgfHwKKwkgICBhc19mbl9lcnJvciAxICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYworICAgICAgYXNfZm5fYXBwZW5kIGFjX2ZpbGVfaW5wdXRzICIgJyRhY19mJyIKKyAgICBkb25lCisKKyAgICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAgICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKKyAgICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICAgIGNvbmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2AKKwkgICRhc19lY2hvICIkKiIgfCBzZWQgJ3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJworCWAnIGJ5IGNvbmZpZ3VyZS4nCisgICAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICRjb25maWd1cmVfaW5wdXQiCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRhY19maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQorICAgIGZpCisgICAgIyBOZXV0cmFsaXplIHNwZWNpYWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4KKyAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygKKyAgICAqXCYqIHwgKlx8KiB8ICpcXCogKQorICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIgfAorICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKAorICAgICopIGFjX3NlZF9jb25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7OworICAgIGVzYWMKKworICAgIGNhc2UgJGFjX3RhZyBpbgorICAgICo6LToqIHwgKjotKSBjYXQgPiIkYWNfdG1wL3N0ZGluIiBcCisgICAgICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworCisgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKKyAgYXNfZGlyPSIkYWNfZGlyIjsgYXNfZm5fbWtkaXJfcAorICBhY19idWlsZGRpcj0uCisKK2Nhc2UgIiRhY19kaXIiIGluCisuKSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsKKyopCisgIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdgCisgICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgCisgIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4KKyAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsKKyAgZXNhYyA7OworZXNhYworYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkCithY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4CisjIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OgorYWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4CisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIKKyAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgbmFtZS4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7OworZXNhYworYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeAorCisKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6RikKKyAgIworICAjIENPTkZJR19GSUxFCisgICMKKworICBjYXNlICRJTlNUQUxMIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKKyAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7CisgIGVzYWMKKyAgYWNfTUtESVJfUD0kTUtESVJfUAorICBjYXNlICRNS0RJUl9QIGluCisgIFtcXC8kXSogfCA/OltcXC9dKiApIDs7CisgICovKikgYWNfTUtESVJfUD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRNS0RJUl9QIDs7CisgIGVzYWMKK19BQ0VPRgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorYWNfc2VkX2RhdGFyb290PScKKy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wJworY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfc2VkX2V4dHJhPSIkYWNfdnBzdWIKKyRleHRyYXN1YgorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCis6dAorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorc3xAY29uZmlndXJlX2lucHV0QHwkYWNfc2VkX2NvbmZfaW5wdXR8O3QgdAorcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0CitzJkB0b3BfYnVpbGRfcHJlZml4QCYkYWNfdG9wX2J1aWxkX3ByZWZpeCY7dCB0CitzJkBzcmNkaXJAJiRhY19zcmNkaXImO3QgdAorcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdAorcyZAdG9wX3NyY2RpckAmJGFjX3RvcF9zcmNkaXImO3QgdAorcyZAYWJzX3RvcF9zcmNkaXJAJiRhY19hYnNfdG9wX3NyY2RpciY7dCB0CitzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQKK3MmQGFic19idWlsZGRpckAmJGFjX2Fic19idWlsZGRpciY7dCB0CitzJkBhYnNfdG9wX2J1aWxkZGlyQCYkYWNfYWJzX3RvcF9idWlsZGRpciY7dCB0CitzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0CitzJkBNS0RJUl9QQCYkYWNfTUtESVJfUCY7dCB0CiskYWNfZGF0YXJvb3RkaXJfaGFjaworIgorZXZhbCBzZWQgXCJcJGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIgXAorICA+JGFjX3RtcC9vdXQgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisKK3Rlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNrJGFjX2RhdGFyb290ZGlyX3NlZW4iICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9vdGRpcn0vcCcgIiRhY190bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmCisgIHsgYWNfb3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnIFwKKyAgICAgICIkYWNfdG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJword2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjI7fQorCisgIHJtIC1mICIkYWNfdG1wL3N0ZGluIgorICBjYXNlICRhY19maWxlIGluCisgIC0pIGNhdCAiJGFjX3RtcC9vdXQiICYmIHJtIC1mICIkYWNfdG1wL291dCI7OworICAqKSBybSAtZiAiJGFjX2ZpbGUiICYmIG12ICIkYWNfdG1wL291dCIgIiRhY19maWxlIjs7CisgIGVzYWMgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyA7OworICA6SCkKKyAgIworICAjIENPTkZJR19IRUFERVIKKyAgIworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgeworICAgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIKKyAgICB9ID4iJGFjX3RtcC9jb25maWcuaCIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkYWNfdG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICBlbHNlCisgICAgICBybSAtZiAiJGFjX2ZpbGUiCisgICAgICBtdiAiJGFjX3RtcC9jb25maWcuaCIgIiRhY19maWxlIiBcCisJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1CisgICAgZmkKKyAgZWxzZQorICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlIC0iICIkTElORU5PIiA1CisgIGZpCisjIENvbXB1dGUgIiRhY19maWxlIidzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9hcmc9IiRhY19maWxlIgorX2FtX3N0YW1wX2NvdW50PTEKK2ZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbworICBjYXNlICRfYW1faGVhZGVyIGluCisgICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkKKyAgICAgIGJyZWFrIDs7CisgICAgKiApCisgICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFgIDs7CisgIGVzYWMKK2RvbmUKK2VjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gJGFzX2Rpcm5hbWUgLS0gIiRfYW1fYXJnIiB8fAorJGFzX2V4cHIgWCIkX2FtX2FyZyIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkX2FtX2FyZyIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRfYW1fYXJnIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpW14vXS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cL1wpJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2Avc3RhbXAtaCRfYW1fc3RhbXBfY291bnQKKyA7OworCisgIDpDKSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBleGVjdXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjY7fQorIDs7CisgIGVzYWMKKworCisgIGNhc2UgJGFjX2ZpbGUkYWNfbW9kZSBpbgorICAgICJkZXBmaWxlcyI6QykgdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgeworICAjIE9sZGVyIEF1dG9jb25mIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKKyAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAorICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KKyAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCisgICpcJyopIGV2YWwgc2V0IHggIiRDT05GSUdfRklMRVMiIDs7CisgICopICAgc2V0IHggJENPTkZJR19GSUxFUyA7OworICBlc2FjCisgIHNoaWZ0CisgIGZvciBtZgorICBkbworICAgICMgU3RyaXAgTUYgc28gd2UgZW5kIHVwIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUuCisgICAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgICAjIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBBdXRvbWFrZSBnZW5lcmF0ZWQgTWFrZWZpbGUgb3Igbm90LgorICAgICMgV2UgdXNlZCB0byBtYXRjaCBvbmx5IHRoZSBmaWxlcyBuYW1lZCAnTWFrZWZpbGUuaW4nLCBidXQKKyAgICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgICAjIEdyZXAnaW5nIHRoZSBmaXJzdCBsaW5lIGlzIG5vdCBlbm91Z2g6IHNvbWUgcGVvcGxlIHBvc3QtcHJvY2VzcworICAgICMgZWFjaCBNYWtlZmlsZS5pbiBhbmQgYWRkIGEgbmV3IGxpbmUgb24gdG9wIG9mIGVhY2ggZmlsZSB0byBzYXkgc28uCisgICAgIyBHcmVwJ2luZyB0aGUgd2hvbGUgZmlsZSBpcyBub3QgZ29vZCBlaXRoZXI6IEFJWCBncmVwIGhhcyBhIGxpbmUKKyAgICAjIGxpbWl0IG9mIDIwNDgsIGJ1dCBhbGwgc2VkJ3Mgd2Uga25vdyBoYXZlIHVuZGVyc3RhbmQgYXQgbGVhc3QgNDAwMC4KKyAgICBpZiBzZWQgLW4gJ3MsXiMuKmdlbmVyYXRlZCBieSBhdXRvbWFrZS4qLFgscCcgIiRtZiIgfCBncmVwIFggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICBkaXJwYXJ0PWAkYXNfZGlybmFtZSAtLSAiJG1mIiB8fAorJGFzX2V4cHIgWCIkbWYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRtZiIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkbWYiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgIGVsc2UKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKyAgICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAgICMgZnJvbSB0aGUgTWFrZWZpbGUgd2l0aG91dCBydW5uaW5nICdtYWtlJy4KKyAgICBERVBESVI9YHNlZCAtbiAncy9eREVQRElSID0gLy9wJyA8ICIkbWYiYAorICAgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgICAgYW1fX2luY2x1ZGU9YHNlZCAtbiAncy9eYW1fX2luY2x1ZGUgPSAvL3AnIDwgIiRtZiJgCisgICAgdGVzdCAteiAiJGFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgCisgICAgIyBGaW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMgd2l0aAorICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcgJChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlCisgICAgIyBleHBhbnNpb24uCisgICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwKKwkgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZydgOyBkbworICAgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgICB0ZXN0IC1mICIkZGlycGFydC8kZmlsZSIgJiYgY29udGludWUKKyAgICAgIGZkaXI9YCRhc19kaXJuYW1lIC0tICIkZmlsZSIgfHwKKyRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXI7IGFzX2ZuX21rZGlyX3AKKyAgICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgICBlY2hvICcjIGR1bW15JyA+ICIkZGlycGFydC8kZmlsZSIKKyAgICBkb25lCisgIGRvbmUKK30KKyA7OworICAgICJsaWJ0b29sIjpDKQorCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCisgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0ke29maWxlfVQKKyAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAgICRSTSAiJGNmZ2ZpbGUiCisKKyAgICBjYXQgPDxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisKKyMgUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKKworIyBDb3B5cmlnaHQgKEMpIDIwMTQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQgaXMgYnVpbHQKKyMgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlICBzYW1lCisjIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCisjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2F2YWlsYWJsZV90YWdzPScnCisKKyMgQ29uZmlndXJlZCBkZWZhdWx0cyBmb3Igc3lzX2xpYl9kbHNlYXJjaF9wYXRoIG11bmdpbmcuCis6IFwke0xUX1NZU19MSUJSQVJZX1BBVEg9IiRjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoIn0KKworIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcKKworIyBBc3NlbWJsZXIgcHJvZ3JhbS4KK0FTPSRsdF9BUworCisjIERMTCBjcmVhdGlvbiBwcm9ncmFtLgorRExMVE9PTD0kbHRfRExMVE9PTAorCisjIE9iamVjdCBkdW1wZXIgcHJvZ3JhbS4KK09CSkRVTVA9JGx0X09CSkRVTVAKKworIyBXaGljaCByZWxlYXNlIG9mIGxpYnRvb2wubTQgd2FzIHVzZWQ/CittYWNyb192ZXJzaW9uPSRtYWNyb192ZXJzaW9uCittYWNyb19yZXZpc2lvbj0kbWFjcm9fcmV2aXNpb24KKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KK2J1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCisKKyMgV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGQuCitwaWNfbW9kZT0kcGljX21vZGUKKworIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCitmYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKKworIyBTaGFyZWQgYXJjaGl2ZSBtZW1iZXIgYmFzZW5hbWUsZm9yIGZpbGVuYW1lIGJhc2VkIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgb24gQUlYLgorc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9JHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjCisKKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KK1NIRUxMPSRsdF9TSEVMTAorCisjIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IHByb3RlY3RzIGJhY2tzbGFzaGVzLgorRUNITz0kbHRfRUNITworCisjIFRoZSBQQVRIIHNlcGFyYXRvciBmb3IgdGhlIGJ1aWxkIHN5c3RlbS4KK1BBVEhfU0VQQVJBVE9SPSRsdF9QQVRIX1NFUEFSQVRPUgorCisjIFRoZSBob3N0IHN5c3RlbS4KK2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK2hvc3Q9JGhvc3QKK2hvc3Rfb3M9JGhvc3Rfb3MKKworIyBUaGUgYnVpbGQgc3lzdGVtLgorYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCitidWlsZD0kYnVpbGQKK2J1aWxkX29zPSRidWlsZF9vcworCisjIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9JGx0X1NFRAorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iXCRTRUQgLWUgMXMvXlgvLyIKKworIyBBIGdyZXAgcHJvZ3JhbSB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcy4KK0dSRVA9JGx0X0dSRVAKKworIyBBbiBFUkUgbWF0Y2hlci4KK0VHUkVQPSRsdF9FR1JFUAorCisjIEEgbGl0ZXJhbCBzdHJpbmcgbWF0Y2hlci4KK0ZHUkVQPSRsdF9GR1JFUAorCisjIEEgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyLgorTk09JGx0X05NCisKKyMgV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rcy4KK0xOX1M9JGx0X0xOX1MKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbWF4X2NtZF9sZW4KKworIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCitvYmpleHQ9JGFjX29iamV4dAorCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0kZXhlZXh0CisKKyMgd2hldGhlciB0aGUgc2hlbGwgdW5kZXJzdGFuZHMgInVuc2V0Ii4KK2x0X3Vuc2V0PSRsdF91bnNldAorCisjIHR1cm4gc3BhY2VzIGludG8gbmV3bGluZXMuCitTUDJOTD0kbHRfbHRfU1AyTkwKKworIyB0dXJuIG5ld2xpbmVzIGludG8gc3BhY2VzLgorTkwyU1A9JGx0X2x0X05MMlNQCisKKyMgY29udmVydCBcJGJ1aWxkIGZpbGUgbmFtZXMgdG8gXCRob3N0IGZvcm1hdC4KK3RvX2hvc3RfZmlsZV9jbWQ9JGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQKKworIyBjb252ZXJ0IFwkYnVpbGQgZmlsZXMgdG8gdG9vbGNoYWluIGZvcm1hdC4KK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKKworIyBNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0cy4KK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9kZXBsaWJzX2NoZWNrX21ldGhvZAorCisjIENvbW1hbmQgdG8gdXNlIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCitmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKworIyBIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KK2ZpbGVfbWFnaWNfZ2xvYj0kbHRfZmlsZV9tYWdpY19nbG9iCisKKyMgRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgord2FudF9ub2Nhc2VnbG9iPSRsdF93YW50X25vY2FzZWdsb2IKKworIyBDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzLgorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JGx0X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisKKyMgVGhlIGFyY2hpdmVyLgorQVI9JGx0X0FSCisKKyMgRmxhZ3MgdG8gY3JlYXRlIGFuIGFyY2hpdmUuCitBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKworIyBIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXIuCithcmNoaXZlcl9saXN0X3NwZWM9JGx0X2FyY2hpdmVyX2xpc3Rfc3BlYworCisjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtLgorU1RSSVA9JGx0X1NUUklQCisKKyMgQ29tbWFuZHMgdXNlZCB0byBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorUkFOTElCPSRsdF9SQU5MSUIKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcworCisjIFdoZXRoZXIgdG8gdXNlIGEgbG9jayBmb3Igb2xkIGFyY2hpdmUgZXh0cmFjdGlvbi4KK2xvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj0kbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uCisKKyMgQSBDIGNvbXBpbGVyLgorTFRDQz0kbHRfQ0MKKworIyBMVENDIGNvbXBpbGVyIGZsYWdzLgorTFRDRkxBR1M9JGx0X0NGTEFHUworCisjIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCitnbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbnRvIGEgbGlzdCBvZiBzeW1ib2xzIHRvIG1hbnVhbGx5IHJlbG9jYXRlLgorZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpci4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyIHdoZW4gbGliIHByZWZpeCBpcyBuZWVkZWQuCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgKKworIyBUaGUgbmFtZSBsaXN0ZXIgaW50ZXJmYWNlLgorbm1faW50ZXJmYWNlPSRsdF9sdF9jdl9ubV9pbnRlcmZhY2UKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yIFwkTk0uCitubV9maWxlX2xpc3Rfc3BlYz0kbHRfbm1fZmlsZV9saXN0X3NwZWMKKworIyBUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMsYW5kIHdoZXJlIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC4KK2x0X3N5c3Jvb3Q9JGx0X3N5c3Jvb3QKKworIyBDb21tYW5kIHRvIHRydW5jYXRlIGEgYmluYXJ5IHBpcGUuCitsdF90cnVuY2F0ZV9iaW49JGx0X2x0X2N2X3RydW5jYXRlX2JpbgorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIi4KK01BR0lDX0NNRD0kTUFHSUNfQ01ECisKKyMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CituZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisKKyMgTWFuaWZlc3QgdG9vbC4KK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorRFNZTVVUSUw9JGx0X0RTWU1VVElMCisKKyMgVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFguCitOTUVESVQ9JGx0X05NRURJVAorCisjIFRvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFguCitMSVBPPSRsdF9MSVBPCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFguCitPVE9PTD0kbHRfT1RPT0wKKworIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNC4KK09UT09MNjQ9JGx0X09UT09MNjQKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9JGxpYmV4dAorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgorc2hyZXh0X2NtZHM9JGx0X3NocmV4dF9jbWRzCisKKyMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK2V4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcworCisjIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorIyByZXN0b3JlZCBhdCBsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0kbHRfdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsKKworIyBEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/CituZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAorCisjIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/CituZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgorCisjIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgordmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKKworIyBTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCitydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKKworIyBTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgorc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgorCisjIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYworCisjIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisjIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUKK2xpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCisKKyMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCitzb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKKworIyBQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzLgoraW5zdGFsbF9vdmVycmlkZV9tb2RlPSRsdF9pbnN0YWxsX292ZXJyaWRlX21vZGUKKworIyBDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKKworIyBDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgorcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKKworIyBBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKyMgbm90IHNob3duLgorZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKworIyBEZXRlY3RlZCBydW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoCisKKyMgRXhwbGljaXQgTFRfU1lTX0xJQlJBUllfUEFUSCBzZXQgZHVyaW5nIC4vY29uZmlndXJlIHRpbWUuCitjb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoPSRsdF9jb25maWd1cmVfdGltZV9sdF9zeXNfbGlicmFyeV9wYXRoCisKKyMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgorZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KKworIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCisKKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRAorCisjIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCityZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKK3JlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzCisKKyMgQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlci4KK0NDPSRsdF9jb21waWxlcgorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbworCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYy4KK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYworCisjIFdoZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5LgorY29tcGlsZXJfbmVlZHNfb2JqZWN0PSRsdF9jb21waWxlcl9uZWVkc19vYmplY3QKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcworCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzCithcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworIyBhIHNoYXJlZCBhcmNoaXZlLgorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzCittb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kcworCisjIFdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdC4KK3dpdGhfZ251X2xkPSRsdF93aXRoX2dudV9sZAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0aGF0IGVuZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0CitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5IGFuZCB0aGUgcmVzdWx0aW5nIGxpYnJhcnkgZGVwZW5kZW5jeSBpcworIyAiYWJzb2x1dGUiLGkuZSBpbXBvc3NpYmxlIHRvIGNoYW5nZSBieSBzZXR0aW5nIFwkc2hsaWJwYXRoX3ZhciBpZiB0aGUKKyMgbGlicmFyeSBpcyByZWxvY2F0ZWQuCitoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9JGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZQorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXIKKworIyBTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyMgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyMgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0kaGFyZGNvZGVfYXV0b21hdGljCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlicworCisjIFNldCB0byAieWVzIiBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KK2Fsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCisKKyMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KK2V4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHMKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXMKKworIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCitpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHMKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGZpbmlzaGluZyBsaW5raW5nIHByb2dyYW1zLgorcG9zdGxpbmtfY21kcz0kbHRfcG9zdGxpbmtfY21kcworCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcy4KK2ZpbGVfbGlzdF9zcGVjPSRsdF9maWxlX2xpc3Rfc3BlYworCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb24KKworIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCisKK19MVF9FT0YKKworICAgIGNhdCA8PCdfTFRfRU9GJyA+PiAiJGNmZ2ZpbGUiCisKKyMgIyMjIEJFR0lOIEZVTkNUSU9OUyBTSEFSRUQgV0lUSCBDT05GSUdVUkUKKworIyBmdW5jX211bmdlX3BhdGhfbGlzdCBWQVJJQUJMRSBQQVRICisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFZBUklBQkxFIGlzIG5hbWUgb2YgdmFyaWFibGUgY29udGFpbmluZyBfc3BhY2VfIHNlcGFyYXRlZCBsaXN0IG9mCisjIGRpcmVjdG9yaWVzIHRvIGJlIG11bmdlZCBieSB0aGUgY29udGVudHMgb2YgUEFUSCwgd2hpY2ggaXMgc3RyaW5nCisjIGhhdmluZyBhIGZvcm1hdDoKKyMgIkRJUls6RElSXToiCisjICAgICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRQorIyAiOkRJUls6RElSXSIKKyMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIkRJUlBbOkRJUlBdOjpbRElSQTpdRElSQSIKKyMgICAgICAgc3RyaW5nICJESVJQWyBESVJQXSIgd2lsbCBiZSBwcmVwZW5kZWQgdG8gVkFSSUFCTEUgYW5kIHN0cmluZworIyAgICAgICAiRElSQVsgRElSQV0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIkRJUls6RElSXSIKKyMgICAgICAgVkFSSUFCTEUgd2lsbCBiZSByZXBsYWNlZCBieSAiRElSWyBESVJdIgorZnVuY19tdW5nZV9wYXRoX2xpc3QgKCkKK3sKKyAgICBjYXNlIHgkMiBpbgorICAgIHgpCisgICAgICAgIDs7CisgICAgKjopCisgICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2AgXCQkMVwiCisgICAgICAgIDs7CisgICAgeDoqKQorICAgICAgICBldmFsICQxPVwiXCQkMSBgJEVDSE8gJDIgfCAkU0VEICdzLzovIC9nJ2BcIgorICAgICAgICA7OworICAgICo6OiopCisgICAgICAgIGV2YWwgJDE9XCJcJCQxXCBgJEVDSE8gJDIgfCAkU0VEIC1lICdzLy4qOjovLycgLWUgJ3MvOi8gL2cnYFwiCisgICAgICAgIGV2YWwgJDE9XCJgJEVDSE8gJDIgfCAkU0VEIC1lICdzLzo6LiovLycgLWUgJ3MvOi8gL2cnYFwgXCQkMVwiCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZXZhbCAkMT1cImAkRUNITyAkMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCisgICAgICAgIDs7CisgICAgZXNhYworfQorCisKKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorZnVuY19jY19iYXNlbmFtZSAoKQoreworICAgIGZvciBjY190ZW1wIGluICQqIiI7IGRvCisgICAgICBjYXNlICRjY190ZW1wIGluCisgICAgICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICAgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICAgICAgXC0qKSA7OworICAgICAgICAqKSBicmVhazs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0PWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorfQorCisKKyMgIyMjIEVORCBGVU5DVElPTlMgU0hBUkVEIFdJVEggQ09ORklHVVJFCisKK19MVF9FT0YKKworICBjYXNlICRob3N0X29zIGluCisgIGFpeDMqKQorICAgIGNhdCA8PFxfTFRfRU9GID4+ICIkY2ZnZmlsZSIKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0IHNldCAhPSAiJHtDT0xMRUNUX05BTUVTK3NldH0iOyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworCitsdG1haW49JGFjX2F1eF9kaXIvbHRtYWluLnNoCisKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiBcCisgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiOyBleGl0IDEpCisKKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorCisgOzsKKyAgICAic2NyaXB0LWNobW9kIjpDKSBjaG1vZCBhK3ggcGNyZTItY29uZmlnIDs7CisgICAgImRlbGV0ZS1vbGQtY2hhcnRhYmxlcyI6Qykgcm0gLWYgcGNyZTJfY2hhcnRhYmxlcy5jIDs7CisKKyAgZXNhYworZG9uZSAjIGZvciBhY190YWcKKworCithc19mbl9leGl0IDAKK19BQ0VPRgorYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKwordGVzdCAkYWNfd3JpdGVfZmFpbCA9IDAgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIndyaXRlIGZhaWx1cmUgY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CisKKworIyBjb25maWd1cmUgaXMgd3JpdGluZyB0byBjb25maWcubG9nLCBhbmQgdGhlbiBjYWxscyBjb25maWcuc3RhdHVzLgorIyBjb25maWcuc3RhdHVzIGRvZXMgaXRzIG93biByZWRpcmVjdGlvbiwgYXBwZW5kaW5nIHRvIGNvbmZpZy5sb2cuCisjIFVuZm9ydHVuYXRlbHksIG9uIERPUyB0aGlzIGZhaWxzLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQgb3BlbgorIyBieSBjb25maWd1cmUsIHNvIGNvbmZpZy5zdGF0dXMgd29uJ3QgYmUgYWJsZSB0byB3cml0ZSB0byBpdDsgaXRzCisjIG91dHB1dCBpcyBzaW1wbHkgZGlzY2FyZGVkLiAgU28gd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLAorIyBlZmZlY3RpdmVseSBjbG9zaW5nIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZAorIyBhcHBlbmRlZCB0byBieSBjb25maWcuc3RhdHVzLiAgV2hlbiBjb21pbmcgYmFjayB0byBjb25maWd1cmUsIHdlCisjIG5lZWQgdG8gbWFrZSB0aGUgRkQgYXZhaWxhYmxlIGFnYWluLgoraWYgdGVzdCAiJG5vX2NyZWF0ZSIgIT0geWVzOyB0aGVuCisgIGFjX2NzX3N1Y2Nlc3M9OgorICBhY19jb25maWdfc3RhdHVzX2FyZ3M9CisgIHRlc3QgIiRzaWxlbnQiID0geWVzICYmCisgICAgYWNfY29uZmlnX3N0YXR1c19hcmdzPSIkYWNfY29uZmlnX3N0YXR1c19hcmdzIC0tcXVpZXQiCisgIGV4ZWMgNT4vZGV2L251bGwKKyAgJFNIRUxMICRDT05GSUdfU1RBVFVTICRhY19jb25maWdfc3RhdHVzX2FyZ3MgfHwgYWNfY3Nfc3VjY2Vzcz1mYWxzZQorICBleGVjIDU+PmNvbmZpZy5sb2cKKyAgIyBVc2UgfHwsIG5vdCAmJiwgdG8gYXZvaWQgZXhpdGluZyBmcm9tIHRoZSBpZiB3aXRoICQ/ID0gMSwgd2hpY2gKKyAgIyB3b3VsZCBtYWtlIGNvbmZpZ3VyZSBmYWlsIGlmIHRoaXMgaXMgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24uCisgICRhY19jc19zdWNjZXNzIHx8IGFzX2ZuX2V4aXQgMQorZmkKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyIgJiYgdGVzdCAiJGVuYWJsZV9vcHRpb25fY2hlY2tpbmciICE9IG5vOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjI7fQorZmkKKworCisjIFByaW50IG91dCBhIG5pY2UgbGl0dGxlIG1lc3NhZ2UgYWZ0ZXIgY29uZmlndXJlIGlzIHJ1biBkaXNwbGF5aW5nIHRoZQorIyBjaG9zZW4gb3B0aW9ucy4KKworZWJjZGljX25sX2NvZGU9bi9hCitpZiB0ZXN0ICIkZW5hYmxlX2ViY2RpY19ubDI1IiA9ICJ5ZXMiOyB0aGVuCisgIGViY2RpY19ubF9jb2RlPTB4MjUKK2VsaWYgdGVzdCAiJGVuYWJsZV9lYmNkaWMiID0gInllcyI7IHRoZW4KKyAgZWJjZGljX25sX2NvZGU9MHgxNQorZmkKKworY2F0IDw8RU9GCisKKyRQQUNLQUdFLSRWRVJTSU9OIGNvbmZpZ3VyYXRpb24gc3VtbWFyeToKKworICAgIEluc3RhbGwgcHJlZml4IC4uLi4uLi4uLi4uLi4uLi4uLiA6ICR7cHJlZml4fQorICAgIEMgcHJlcHJvY2Vzc29yIC4uLi4uLi4uLi4uLi4uLi4uLiA6ICR7Q1BQfQorICAgIEMgY29tcGlsZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA6ICR7Q0N9CisgICAgTGlua2VyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDogJHtMRH0KKyAgICBDIHByZXByb2Nlc3NvciBmbGFncyAuLi4uLi4uLi4uLi4gOiAke0NQUEZMQUdTfQorICAgIEMgY29tcGlsZXIgZmxhZ3MgLi4uLi4uLi4uLi4uLi4uLiA6ICR7Q0ZMQUdTfSAke1ZJU0lCSUxJVFlfQ0ZMQUdTfQorICAgIExpbmtlciBmbGFncyAuLi4uLi4uLi4uLi4uLi4uLi4uLiA6ICR7TERGTEFHU30KKyAgICBFeHRyYSBsaWJyYXJpZXMgLi4uLi4uLi4uLi4uLi4uLi4gOiAke0xJQlN9CisKKyAgICBCdWlsZCA4LWJpdCBwY3JlMiBsaWJyYXJ5IC4uLi4uLi4gOiAke2VuYWJsZV9wY3JlMl84fQorICAgIEJ1aWxkIDE2LWJpdCBwY3JlMiBsaWJyYXJ5IC4uLi4uLiA6ICR7ZW5hYmxlX3BjcmUyXzE2fQorICAgIEJ1aWxkIDMyLWJpdCBwY3JlMiBsaWJyYXJ5IC4uLi4uLiA6ICR7ZW5hYmxlX3BjcmUyXzMyfQorICAgIEluY2x1ZGUgZGVidWdnaW5nIGNvZGUgLi4uLi4uLi4uLiA6ICR7ZW5hYmxlX2RlYnVnfQorICAgIEVuYWJsZSBKSVQgY29tcGlsaW5nIHN1cHBvcnQgLi4uLiA6ICR7ZW5hYmxlX2ppdH0KKyAgICBFbmFibGUgVW5pY29kZSBzdXBwb3J0IC4uLi4uLi4uLi4gOiAke2VuYWJsZV91bmljb2RlfQorICAgIE5ld2xpbmUgY2hhci9zZXF1ZW5jZSAuLi4uLi4uLi4uLiA6ICR7ZW5hYmxlX25ld2xpbmV9CisgICAgXFIgbWF0Y2hlcyBvbmx5IEFOWUNSTEYgLi4uLi4uLi4uIDogJHtlbmFibGVfYnNyX2FueWNybGZ9CisgICAgXEMgaXMgZGlzYWJsZWQgLi4uLi4uLi4uLi4uLi4uLi4uIDogJHtlbmFibGVfbmV2ZXJfYmFja3NsYXNoX0N9CisgICAgRUJDRElDIGNvZGluZyAuLi4uLi4uLi4uLi4uLi4uLi4uIDogJHtlbmFibGVfZWJjZGljfQorICAgIEVCQ0RJQyBjb2RlIGZvciBOTCAuLi4uLi4uLi4uLi4uLiA6ICR7ZWJjZGljX25sX2NvZGV9CisgICAgUmVidWlsZCBjaGFyIHRhYmxlcyAuLi4uLi4uLi4uLi4uIDogJHtlbmFibGVfcmVidWlsZF9jaGFydGFibGVzfQorICAgIFVzZSBzdGFjayByZWN1cnNpb24gLi4uLi4uLi4uLi4uLiA6ICR7ZW5hYmxlX3N0YWNrX2Zvcl9yZWN1cnNpb259CisgICAgSW50ZXJuYWwgbGluayBzaXplIC4uLi4uLi4uLi4uLi4uIDogJHt3aXRoX2xpbmtfc2l6ZX0KKyAgICBOZXN0ZWQgcGFyZW50aGVzZXMgbGltaXQgLi4uLi4uLi4gOiAke3dpdGhfcGFyZW5zX25lc3RfbGltaXR9CisgICAgTWF0Y2ggbGltaXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDogJHt3aXRoX21hdGNoX2xpbWl0fQorICAgIE1hdGNoIGxpbWl0IHJlY3Vyc2lvbiAuLi4uLi4uLi4uLiA6ICR7d2l0aF9tYXRjaF9saW1pdF9yZWN1cnNpb259CisgICAgQnVpbGQgc2hhcmVkIGxpYnMgLi4uLi4uLi4uLi4uLi4uIDogJHtlbmFibGVfc2hhcmVkfQorICAgIEJ1aWxkIHN0YXRpYyBsaWJzIC4uLi4uLi4uLi4uLi4uLiA6ICR7ZW5hYmxlX3N0YXRpY30KKyAgICBVc2UgSklUIGluIHBjcmUyZ3JlcCAuLi4uLi4uLi4uLi4gOiAke2VuYWJsZV9wY3JlMmdyZXBfaml0fQorICAgIEJ1ZmZlciBzaXplIGZvciBwY3JlMmdyZXAgLi4uLi4uLiA6ICR7d2l0aF9wY3JlMmdyZXBfYnVmc2l6ZX0KKyAgICBMaW5rIHBjcmUyZ3JlcCB3aXRoIGxpYnogLi4uLi4uLi4gOiAke2VuYWJsZV9wY3JlMmdyZXBfbGlien0KKyAgICBMaW5rIHBjcmUyZ3JlcCB3aXRoIGxpYmJ6MiAuLi4uLi4gOiAke2VuYWJsZV9wY3JlMmdyZXBfbGliYnoyfQorICAgIExpbmsgcGNyZTJ0ZXN0IHdpdGggbGliZWRpdCAuLi4uLiA6ICR7ZW5hYmxlX3BjcmUydGVzdF9saWJlZGl0fQorICAgIExpbmsgcGNyZTJ0ZXN0IHdpdGggbGlicmVhZGxpbmUgLiA6ICR7ZW5hYmxlX3BjcmUydGVzdF9saWJyZWFkbGluZX0KKyAgICBWYWxncmluZCBzdXBwb3J0IC4uLi4uLi4uLi4uLi4uLi4gOiAke2VuYWJsZV92YWxncmluZH0KKyAgICBDb2RlIGNvdmVyYWdlIC4uLi4uLi4uLi4uLi4uLi4uLi4gOiAke2VuYWJsZV9jb3ZlcmFnZX0KKworRU9GCisKZGlmZiAtLWdpdCBhL2Rpc3QyL2NvbmZpZ3VyZS5hYyBiL2Rpc3QyL2NvbmZpZ3VyZS5hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWFkOGE5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvY29uZmlndXJlLmFjCkBAIC0wLDAgKzEsOTIxIEBACitkbmwgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKworZG5sIE5PVEUgRk9SIE1BSU5UQUlORVJTOiBEbyBub3QgdXNlIG1pbm9yIHZlcnNpb24gbnVtYmVycyAwOCBvciAwOSBiZWNhdXNlCitkbmwgdGhlIGxlYWRpbmcgemVyb3MgbWF5IGNhdXNlIHRoZW0gdG8gYmUgdHJlYXRlZCBhcyBpbnZhbGlkIG9jdGFsIGNvbnN0YW50cworZG5sIGlmIGEgUENSRTIgdXNlciB3cml0ZXMgY29kZSB0aGF0IHVzZXMgUENSRTJfTUlOT1IgYXMgYSBudW1iZXIuIFRoZXJlIGlzIG5vdworZG5sIGEgY2hlY2sgZnVydGhlciBkb3duIHRoYXQgdGhyb3dzIGFuIGVycm9yIGlmIDA4IG9yIDA5IGFyZSB1c2VkLgorCitkbmwgVGhlIFBDUkUyX1BSRVJFTEVBU0UgZmVhdHVyZSBpcyBmb3IgaWRlbnRpZnlpbmcgcmVsZWFzZSBjYW5kaWRhdGVzLiBJdCBtaWdodAorZG5sIGJlIGRlZmluZWQgYXMgLVJDMiwgZm9yIGV4YW1wbGUuIEZvciByZWFsIHJlbGVhc2VzLCBpdCBzaG91bGQgYmUgZW1wdHkuCisKK200X2RlZmluZShwY3JlMl9tYWpvciwgWzEwXSkKK200X2RlZmluZShwY3JlMl9taW5vciwgWzIxXSkKK200X2RlZmluZShwY3JlMl9wcmVyZWxlYXNlLCBbXSkKK200X2RlZmluZShwY3JlMl9kYXRlLCBbMjAxNi0wMS0xMl0pCisKKyMgTk9URTogVGhlIENNYWtlTGlzdHMudHh0IGZpbGUgc2VhcmNoZXMgZm9yIHRoZSBhYm92ZSB2YXJpYWJsZXMgaW4gdGhlIGZpcnN0CisjIDUwIGxpbmVzIG9mIHRoaXMgZmlsZS4gUGxlYXNlIHVwZGF0ZSB0aGF0IGlmIHRoZSB2YXJpYWJsZXMgYWJvdmUgYXJlIG1vdmVkLgorCisjIExpYnRvb2wgc2hhcmVkIGxpYnJhcnkgaW50ZXJmYWNlIHZlcnNpb25zIChjdXJyZW50OnJldmlzaW9uOmFnZSkKK200X2RlZmluZShsaWJwY3JlMl84X3ZlcnNpb24sICAgICBbMzowOjNdKQorbTRfZGVmaW5lKGxpYnBjcmUyXzE2X3ZlcnNpb24sICAgIFszOjA6M10pCittNF9kZWZpbmUobGlicGNyZTJfMzJfdmVyc2lvbiwgICAgWzM6MDozXSkKK200X2RlZmluZShsaWJwY3JlMl9wb3NpeF92ZXJzaW9uLCBbMDoxOjBdKQorCitBQ19QUkVSRVEoMi41NykKK0FDX0lOSVQoUENSRTIsIHBjcmUyX21ham9yLnBjcmUyX21pbm9yW11wY3JlMl9wcmVyZWxlYXNlLCAsIHBjcmUyKQorQUNfQ09ORklHX1NSQ0RJUihbc3JjL3BjcmUyLmguaW5dKQorQU1fSU5JVF9BVVRPTUFLRShbZGlzdC1iemlwMiBkaXN0LXppcF0pCittNF9pZmRlZihbQU1fU0lMRU5UX1JVTEVTXSwgW0FNX1NJTEVOVF9SVUxFUyhbeWVzXSldKQorQUNfQ09ORklHX0hFQURFUlMoc3JjL2NvbmZpZy5oKQorCisjIFRoaXMgaXMgYSBuZXcgdGhpbmcgcmVxdWlyZWQgdG8gc3RvcCBhIHdhcm5pbmcgZnJvbSBhdXRvbWFrZSAxLjEyCittNF9pZmRlZihbQU1fUFJPR19BUl0sIFtBTV9QUk9HX0FSXSkKKworIyBUaGlzIHdhcyBhZGRlZCBhdCB0aGUgc3VnZ2VzdGlvbiBvZiBsaWJ0b29saXplICgwMy1KYW4tMTApCitBQ19DT05GSUdfTUFDUk9fRElSKFttNF0pCisKKyMgVGhlIGRlZmF1bHQgQ0ZMQUdTIGluIEF1dG9jb25mIGFyZSAiLWcgLU8yIiBmb3IgZ2NjIGFuZCBqdXN0ICItZyIgZm9yIGFueQorIyBvdGhlciBjb21waWxlci4gVGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhbmRhcmQgd2F5IG9mIGdldHRpbmcgcmlkIG9mIHRoZQorIyAtZyAod2hpY2ggSSBkb24ndCB0aGluayBpcyBuZWVkZWQgZm9yIGEgcHJvZHVjdGlvbiBsaWJyYXJ5KS4gVGhpcyBmdWRnZSBzZWVtcworIyB0byBhY2hpZXZlIHRoZSBuZWNlc3NhcnkuIEZpcnN0LCB3ZSByZW1lbWJlciB0aGUgZXh0ZXJuYWxseSBzZXQgdmFsdWVzIG9mCisjIENGTEFHUy4gVGhlbiBjYWxsIHRoZSBBQ19QUk9HX0NDIG1hY3JvIHRvIGZpbmQgdGhlIGNvbXBpbGVyIC0gaWYgQ0ZMQUdTIGlzCisjIG5vdCBzZXQsIGl0IHdpbGwgYmUgc2V0IHRvIEF1dG9jb25mJ3MgZGVmYXVsdHMuIEFmdGVyd2FyZHMsIGlmIHRoZSBvcmlnaW5hbAorIyB2YWx1ZXMgd2VyZSBub3Qgc2V0LCByZW1vdmUgdGhlIC1nIGZyb20gdGhlIEF1dG9jb25mIGRlZmF1bHRzLgorCityZW1lbWJlcl9zZXRfQ0ZMQUdTPSIkQ0ZMQUdTIgorCitBQ19QUk9HX0NDCitBTV9QUk9HX0NDX0NfTworCitpZiB0ZXN0ICJ4JHJlbWVtYmVyX3NldF9DRkxBR1MiID0gIngiCit0aGVuCisgIGlmIHRlc3QgIiRDRkxBR1MiID0gIi1nIC1PMiIKKyAgdGhlbgorICAgIENGTEFHUz0iLU8yIgorICBlbGlmIHRlc3QgIiRDRkxBR1MiID0gIi1nIgorICB0aGVuCisgICAgQ0ZMQUdTPSIiCisgIGZpCitmaQorCisjIENoZWNrIGZvciBhIDY0LWJpdCBpbnRlZ2VyIHR5cGUKK0FDX1RZUEVfSU5UNjRfVAorCitBQ19QUk9HX0lOU1RBTEwKK0FDX0xJQlRPT0xfV0lOMzJfRExMCitMVF9JTklUCitBQ19QUk9HX0xOX1MKKworIyBDaGVjayBmb3IgR0NDIHZpc2liaWxpdHkgZmVhdHVyZQorCitQQ1JFMl9WSVNJQklMSVRZCisKKyMgVmVyc2lvbmluZworCitQQ1JFMl9NQUpPUj0icGNyZTJfbWFqb3IiCitQQ1JFMl9NSU5PUj0icGNyZTJfbWlub3IiCitQQ1JFMl9QUkVSRUxFQVNFPSJwY3JlMl9wcmVyZWxlYXNlIgorUENSRTJfREFURT0icGNyZTJfZGF0ZSIKKworaWYgdGVzdCAiJFBDUkUyX01JTk9SIiA9ICIwOCIgLW8gIiRQQ1JFMl9NSU5PUiIgPSAiMDkiCit0aGVuCisgIGVjaG8gIioqKiIKKyAgZWNobyAiKioqIE1pbm9yIHZlcnNpb24gbnVtYmVyICRQQ1JFMl9NSU5PUiBtdXN0IG5vdCBiZSB1c2VkLiAqKioiCisgIGVjaG8gIioqKiBVc2Ugb25seSAwMCB0byAwNyBvciAxMCBvbndhcmRzLCB0byBhdm9pZCBvY3RhbCBpc3N1ZXMuICoqKiIKKyAgZWNobyAiKioqIgorICBleGl0IDEKK2ZpCisKK0FDX1NVQlNUKFBDUkUyX01BSk9SKQorQUNfU1VCU1QoUENSRTJfTUlOT1IpCitBQ19TVUJTVChQQ1JFMl9QUkVSRUxFQVNFKQorQUNfU1VCU1QoUENSRTJfREFURSkKKworIyBTZXQgYSBtb3JlIHNlbnNpYmxlIGRlZmF1bHQgdmFsdWUgZm9yICQoaHRtbGRpcikuCitpZiB0ZXN0ICJ4JGh0bWxkaXIiID0gJ3gke2RvY2Rpcn0nCit0aGVuCisgIGh0bWxkaXI9JyR7ZG9jZGlyfS9odG1sJworZmkKKworIyBGb3JjZSBhbiBlcnJvciBmb3IgUENSRTEgc2l6ZSBvcHRpb25zCitBQ19BUkdfRU5BQkxFKHBjcmU4LCwsZW5hYmxlX3BjcmU4PW5vKQorQUNfQVJHX0VOQUJMRShwY3JlMTYsLCxlbmFibGVfcGNyZTE2PW5vKQorQUNfQVJHX0VOQUJMRShwY3JlMzIsLCxlbmFibGVfcGNyZTMyPW5vKQorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmU4JGVuYWJsZV9wY3JlMTYkZW5hYmxlX3BjcmUzMiIgIT0gIm5vbm9ubyIKK3RoZW4KKyAgZWNobyAiKiogRVJST1I6IFVzZSAtLVtbZW58ZGlzXV1hYmxlLXBjcmUyLVtbOHwxNnwzMl1dLCBub3QgLS1bW2VufGRpc11dYWJsZS1wY3JlW1s4fDE2fDMyXV0iCisgIGV4aXQgMQorZmkKKworIyBIYW5kbGUgLS1kaXNhYmxlLXBjcmUyLTggKGVuYWJsZWQgYnkgZGVmYXVsdCkKK0FDX0FSR19FTkFCTEUocGNyZTItOCwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1wY3JlMi04XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGUgOCBiaXQgY2hhcmFjdGVyIHN1cHBvcnRdKSwKKyAgICAgICAgICAgICAgLCBlbmFibGVfcGNyZTJfOD11bnNldCkKK0FDX1NVQlNUKGVuYWJsZV9wY3JlMl84KQorCisjIEhhbmRsZSAtLWVuYWJsZS1wY3JlMi0xNiAoZGlzYWJsZWQgYnkgZGVmYXVsdCkKK0FDX0FSR19FTkFCTEUocGNyZTItMTYsCisgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wY3JlMi0xNl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgMTYgYml0IGNoYXJhY3RlciBzdXBwb3J0XSksCisgICAgICAgICAgICAgICwgZW5hYmxlX3BjcmUyXzE2PXVuc2V0KQorQUNfU1VCU1QoZW5hYmxlX3BjcmUyXzE2KQorCisjIEhhbmRsZSAtLWVuYWJsZS1wY3JlMi0zMiAoZGlzYWJsZWQgYnkgZGVmYXVsdCkKK0FDX0FSR19FTkFCTEUocGNyZTItMzIsCisgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wY3JlMi0zMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgMzIgYml0IGNoYXJhY3RlciBzdXBwb3J0XSksCisgICAgICAgICAgICAgICwgZW5hYmxlX3BjcmUyXzMyPXVuc2V0KQorQUNfU1VCU1QoZW5hYmxlX3BjcmUyXzMyKQorCisjIEhhbmRsZSAtLWRuYWJsZS1kZWJ1ZyAoZGlzYWJsZWQgYnkgZGVmYXVsdCkKK0FDX0FSR19FTkFCTEUoZGVidWcsCisgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1kZWJ1Z10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlbmFibGUgZGVidWdnaW5nIGNvZGVdKSwKKyAgICAgICAgICAgICAgLCBlbmFibGVfZGVidWc9bm8pCisKKyMgSGFuZGxlIC0tZW5hYmxlLWppdCAoZGlzYWJsZWQgYnkgZGVmYXVsdCkKK0FDX0FSR19FTkFCTEUoaml0LAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtaml0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZSBKdXN0LUluLVRpbWUgY29tcGlsaW5nIHN1cHBvcnRdKSwKKyAgICAgICAgICAgICAgLCBlbmFibGVfaml0PW5vKQorCisjIEhhbmRsZSAtLWRpc2FibGUtcGNyZTJncmVwLWppdCAoZW5hYmxlZCBieSBkZWZhdWx0KQorQUNfQVJHX0VOQUJMRShwY3JlMmdyZXAtaml0LAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXBjcmUyZ3JlcC1qaXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZSBKSVQgc3VwcG9ydCBpbiBwY3JlMmdyZXBdKSwKKyAgICAgICAgICAgICAgLCBlbmFibGVfcGNyZTJncmVwX2ppdD15ZXMpCisKKyMgSGFuZGxlIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcworQUNfQVJHX0VOQUJMRShyZWJ1aWxkLWNoYXJ0YWJsZXMsCisgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVidWlsZCBjaGFyYWN0ZXIgdGFibGVzIGluIGN1cnJlbnQgbG9jYWxlXSksCisgICAgICAgICAgICAgICwgZW5hYmxlX3JlYnVpbGRfY2hhcnRhYmxlcz1ubykKKworIyBIYW5kbGUgLS1kaXNhYmxlLXVuaWNvZGUgKGVuYWJsZWQgYnkgZGVmYXVsdCkKK0FDX0FSR19FTkFCTEUodW5pY29kZSwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS11bmljb2RlXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGUgVW5pY29kZSBzdXBwb3J0XSksCisgICAgICAgICAgICAgICwgZW5hYmxlX3VuaWNvZGU9dW5zZXQpCisKKyMgSGFuZGxlIG5ld2xpbmUgb3B0aW9ucworYWNfcGNyZTJfbmV3bGluZT1sZgorQUNfQVJHX0VOQUJMRShuZXdsaW5lLWlzLWNyLAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtbmV3bGluZS1pcy1jcl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1c2UgQ1IgYXMgbmV3bGluZSBjaGFyYWN0ZXJdKSwKKyAgICAgICAgICAgICAgYWNfcGNyZTJfbmV3bGluZT1jcikKK0FDX0FSR19FTkFCTEUobmV3bGluZS1pcy1sZiwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5ld2xpbmUtaXMtbGZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlIExGIGFzIG5ld2xpbmUgY2hhcmFjdGVyIChkZWZhdWx0KV0pLAorICAgICAgICAgICAgICBhY19wY3JlMl9uZXdsaW5lPWxmKQorQUNfQVJHX0VOQUJMRShuZXdsaW5lLWlzLWNybGYsCisgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1uZXdsaW5lLWlzLWNybGZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlIENSTEYgYXMgbmV3bGluZSBzZXF1ZW5jZV0pLAorICAgICAgICAgICAgICBhY19wY3JlMl9uZXdsaW5lPWNybGYpCitBQ19BUkdfRU5BQkxFKG5ld2xpbmUtaXMtYW55Y3JsZiwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5ld2xpbmUtaXMtYW55Y3JsZl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1c2UgQ1IsIExGLCBvciBDUkxGIGFzIG5ld2xpbmUgc2VxdWVuY2VdKSwKKyAgICAgICAgICAgICAgYWNfcGNyZTJfbmV3bGluZT1hbnljcmxmKQorQUNfQVJHX0VOQUJMRShuZXdsaW5lLWlzLWFueSwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLW5ld2xpbmUtaXMtYW55XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VzZSBhbnkgdmFsaWQgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlXSksCisgICAgICAgICAgICAgIGFjX3BjcmUyX25ld2xpbmU9YW55KQorZW5hYmxlX25ld2xpbmU9IiRhY19wY3JlMl9uZXdsaW5lIgorCisjIEhhbmRsZSAtLWVuYWJsZS1ic3ItYW55Y3JsZgorQUNfQVJHX0VOQUJMRShic3ItYW55Y3JsZiwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWJzci1hbnljcmxmXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1xSIG1hdGNoZXMgb25seSBDUiwgTEYsIENSTEYgYnkgZGVmYXVsdF0pLAorICAgICAgICAgICAgICAsIGVuYWJsZV9ic3JfYW55Y3JsZj1ubykKKworIyBIYW5kbGUgLS1lbmFibGUtbmV2ZXItYmFja3NsYXNoLUMKK0FDX0FSR19FTkFCTEUobmV2ZXItYmFja3NsYXNoLUMsCisgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1uZXZlci1iYWNrc2xhc2gtQ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1c2Ugb2YgXEMgY2F1c2VzIGFuIGVycm9yXSksCisgICAgICAgICAgICAgICwgZW5hYmxlX25ldmVyX2JhY2tzbGFzaF9DPW5vKQorCisjIEhhbmRsZSAtLWVuYWJsZS1lYmNkaWMKK0FDX0FSR19FTkFCTEUoZWJjZGljLAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtZWJjZGljXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Fzc3VtZSBFQkNESUMgY29kaW5nIHJhdGhlciB0aGFuIEFTQ0lJOyBpbmNvbXBhdGlibGUgd2l0aCAtLWVuYWJsZS11dGY7IHVzZSBvbmx5IGluICh1bmNvbW1vbikgRUJDRElDIGVudmlyb25tZW50czsgaXQgaW1wbGllcyAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXNdKSwKKyAgICAgICAgICAgICAgLCBlbmFibGVfZWJjZGljPW5vKQorCisjIEhhbmRsZSAtLWVuYWJsZS1lYmNkaWMtbmwyNQorQUNfQVJHX0VOQUJMRShlYmNkaWMtbmwyNSwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWViY2RpYy1ubDI1XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NldCBFQkNESUMgY29kZSBmb3IgTkwgdG8gMHgyNSBpbnN0ZWFkIG9mIDB4MTU7IGl0IGltcGxpZXMgLS1lbmFibGUtZWJjZGljXSksCisgICAgICAgICAgICAgICwgZW5hYmxlX2ViY2RpY19ubDI1PW5vKQorCisjIEhhbmRsZSAtLWRpc2FibGUtc3RhY2stZm9yLXJlY3Vyc2lvbgorQUNfQVJHX0VOQUJMRShzdGFjay1mb3ItcmVjdXJzaW9uLAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLXN0YWNrLWZvci1yZWN1cnNpb25dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZG9uJ3QgdXNlIHN0YWNrIHJlY3Vyc2lvbiB3aGVuIG1hdGNoaW5nXSksCisgICAgICAgICAgICAgICwgZW5hYmxlX3N0YWNrX2Zvcl9yZWN1cnNpb249eWVzKQorCisjIEhhbmRsZSAtLWVuYWJsZS1wY3JlMmdyZXAtbGliegorQUNfQVJHX0VOQUJMRShwY3JlMmdyZXAtbGlieiwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXBjcmUyZ3JlcC1saWJ6XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmsgcGNyZTJncmVwIHdpdGggbGlieiB0byBoYW5kbGUgLmd6IGZpbGVzXSksCisgICAgICAgICAgICAgICwgZW5hYmxlX3BjcmUyZ3JlcF9saWJ6PW5vKQorCisjIEhhbmRsZSAtLWVuYWJsZS1wY3JlMmdyZXAtbGliYnoyCitBQ19BUkdfRU5BQkxFKHBjcmUyZ3JlcC1saWJiejIsCisgICAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1wY3JlMmdyZXAtbGliYnoyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmsgcGNyZTJncmVwIHdpdGggbGliYnoyIHRvIGhhbmRsZSAuYnoyIGZpbGVzXSksCisgICAgICAgICAgICAgICwgZW5hYmxlX3BjcmUyZ3JlcF9saWJiejI9bm8pCisKKyMgSGFuZGxlIC0td2l0aC1wY3JlMmdyZXAtYnVmc2l6ZT1OCitBQ19BUkdfV0lUSChwY3JlMmdyZXAtYnVmc2l6ZSwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wY3JlMmdyZXAtYnVmc2l6ZT1OXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BjcmUyZ3JlcCBidWZmZXIgc2l6ZSAoZGVmYXVsdD0yMDQ4MCwgbWluaW11bT04MTkyKV0pLAorICAgICAgICAgICAgICAsIHdpdGhfcGNyZTJncmVwX2J1ZnNpemU9MjA0ODApCisKKyMgSGFuZGxlIC0tZW5hYmxlLXBjcmUydGVzdC1saWJlZGl0CitBQ19BUkdfRU5BQkxFKHBjcmUydGVzdC1saWJlZGl0LAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYmVkaXRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGluayBwY3JlMnRlc3Qgd2l0aCBsaWJlZGl0XSksCisgICAgICAgICAgICAgICwgZW5hYmxlX3BjcmUydGVzdF9saWJlZGl0PW5vKQorCisjIEhhbmRsZSAtLWVuYWJsZS1wY3JlMnRlc3QtbGlicmVhZGxpbmUKK0FDX0FSR19FTkFCTEUocGNyZTJ0ZXN0LWxpYnJlYWRsaW5lLAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYnJlYWRsaW5lXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpbmsgcGNyZTJ0ZXN0IHdpdGggbGlicmVhZGxpbmVdKSwKKyAgICAgICAgICAgICAgLCBlbmFibGVfcGNyZTJ0ZXN0X2xpYnJlYWRsaW5lPW5vKQorCisjIEhhbmRsZSAtLXdpdGgtbGluay1zaXplPU4KK0FDX0FSR19XSVRIKGxpbmstc2l6ZSwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtbGluay1zaXplPU5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ludGVybmFsIGxpbmsgc2l6ZSAoMiwgMywgb3IgNCBhbGxvd2VkOyBkZWZhdWx0PTIpXSksCisgICAgICAgICAgICAsIHdpdGhfbGlua19zaXplPTIpCisKKyMgSGFuZGxlIC0td2l0aC1wYXJlbnMtbmVzdC1saW1pdD1OCitBQ19BUkdfV0lUSChwYXJlbnMtbmVzdC1saW1pdCwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGFyZW5zLW5lc3QtbGltaXQ9Tl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmVzdGVkIHBhcmVudGhlc2VzIGxpbWl0IChkZWZhdWx0PTI1MCldKSwKKyAgICAgICAgICAgICwgd2l0aF9wYXJlbnNfbmVzdF9saW1pdD0yNTApCisKKyMgSGFuZGxlIC0td2l0aC1tYXRjaC1saW1pdD1OCitBQ19BUkdfV0lUSChtYXRjaC1saW1pdCwKKyAgICAgICAgICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtbWF0Y2gtbGltaXQ9Tl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdCBsaW1pdCBvbiBpbnRlcm5hbCBsb29waW5nIChkZWZhdWx0PTEwMDAwMDAwKV0pLAorICAgICAgICAgICAgLCB3aXRoX21hdGNoX2xpbWl0PTEwMDAwMDAwKQorCisjIEhhbmRsZSAtLXdpdGgtbWF0Y2gtbGltaXRfcmVjdXJzaW9uPU4KKyMKKyMgTm90ZTogSW4gY29uZmlnLmgsIHRoZSBkZWZhdWx0IGlzIHRvIGRlZmluZSBNQVRDSF9MSU1JVF9SRUNVUlNJT04KKyMgc3ltYm9saWNhbGx5IGFzIE1BVENIX0xJTUlULCB3aGljaCBpbiB0dXJuIGlzIGRlZmluZWQgdG8gYmUgc29tZSBudW1lcmljCisjIHZhbHVlIChlLmcuIDEwMDAwMDAwKS4gTUFUQ0hfTElNSVRfUkVDVVJTSU9OIGNhbiBvdGhlcndpc2UgYmUgc2V0IHRvIHNvbWUKKyMgZGlmZmVyZW50IG51bWVyaWMgdmFsdWUgKG9yIGV2ZW4gdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyBNQVRDSF9MSU1JVCwKKyMgdGhvdWdoIG5vIGxvbmdlciBkZWZpbmVkIGluIHRlcm1zIG9mIHRoZSBsYXR0ZXIpLgorIworQUNfQVJHX1dJVEgobWF0Y2gtbGltaXQtcmVjdXJzaW9uLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1tYXRjaC1saW1pdC1yZWN1cnNpb249Tl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVmYXVsdCBsaW1pdCBvbiBpbnRlcm5hbCByZWN1cnNpb24gKGRlZmF1bHQ9TUFUQ0hfTElNSVQpXSksCisgICAgICAgICAgICAsIHdpdGhfbWF0Y2hfbGltaXRfcmVjdXJzaW9uPU1BVENIX0xJTUlUKQorCisjIEhhbmRsZSAtLWVuYWJsZS12YWxncmluZAorQUNfQVJHX0VOQUJMRSh2YWxncmluZCwKKyAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXZhbGdyaW5kXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbGdyaW5kIHN1cHBvcnRdKSwKKyAgICAgICAgICAgICAgLCBlbmFibGVfdmFsZ3JpbmQ9bm8pCisKKyMgRW5hYmxlIGNvZGUgY292ZXJhZ2UgcmVwb3J0cyB1c2luZyBnY292CitBQ19BUkdfRU5BQkxFKGNvdmVyYWdlLAorICAgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS1lbmFibGUtY292ZXJhZ2VdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlIGNvZGUgY292ZXJhZ2UgcmVwb3J0cyB1c2luZyBnY292XSksCisgICAgICAgICAgICAgICwgZW5hYmxlX2NvdmVyYWdlPW5vKQorCisjIFNldCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgcGNyZTItOAoraWYgdGVzdCAieCRlbmFibGVfcGNyZTJfOCIgPSAieHVuc2V0IgordGhlbgorICBlbmFibGVfcGNyZTJfOD15ZXMKK2ZpCisKKyMgU2V0IHRoZSBkZWZhdWx0IHZhbHVlIGZvciBwY3JlMi0xNgoraWYgdGVzdCAieCRlbmFibGVfcGNyZTJfMTYiID0gInh1bnNldCIKK3RoZW4KKyAgZW5hYmxlX3BjcmUyXzE2PW5vCitmaQorCisjIFNldCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgcGNyZTItMzIKK2lmIHRlc3QgIngkZW5hYmxlX3BjcmUyXzMyIiA9ICJ4dW5zZXQiCit0aGVuCisgIGVuYWJsZV9wY3JlMl8zMj1ubworZmkKKworIyBNYWtlIHN1cmUgYXQgbGVhc3Qgb25lIGxpYnJhcnkgaXMgc2VsZWN0ZWQKK2lmIHRlc3QgIngkZW5hYmxlX3BjcmUyXzgkZW5hYmxlX3BjcmUyXzE2JGVuYWJsZV9wY3JlMl8zMiIgPSAieG5vbm9ubyIKK3RoZW4KKyAgQUNfTVNHX0VSUk9SKFtBdCBsZWFzdCBvbmUgb2YgdGhlIDgsIDE2IG9yIDMyIGJpdCBsaWJyYXJpZXMgbXVzdCBiZSBlbmFibGVkXSkKK2ZpCisKKyMgVW5pY29kZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCitpZiB0ZXN0ICJ4JGVuYWJsZV91bmljb2RlIiA9ICJ4dW5zZXQiCit0aGVuCisgIGVuYWJsZV91bmljb2RlPXllcworZmkKKworIyBDb252ZXJ0IHRoZSBuZXdsaW5lIGlkZW50aWZpZXIgaW50byB0aGUgYXBwcm9wcmlhdGUgaW50ZWdlciB2YWx1ZS4gVGhlc2UgbXVzdAorIyBhZ3JlZSB3aXRoIHRoZSBQQ1JFMl9ORVdMSU5FX3h4eCB2YWx1ZXMgaW4gcGNyZTIuaC4KKworY2FzZSAiJGVuYWJsZV9uZXdsaW5lIiBpbgorICBjcikgICAgICBhY19wY3JlMl9uZXdsaW5lX3ZhbHVlPTEgOzsKKyAgbGYpICAgICAgYWNfcGNyZTJfbmV3bGluZV92YWx1ZT0yIDs7CisgIGNybGYpICAgIGFjX3BjcmUyX25ld2xpbmVfdmFsdWU9MyA7OworICBhbnkpICAgICBhY19wY3JlMl9uZXdsaW5lX3ZhbHVlPTQgOzsKKyAgYW55Y3JsZikgYWNfcGNyZTJfbmV3bGluZV92YWx1ZT01IDs7CisgICopCisgIEFDX01TR19FUlJPUihbaW52YWxpZCBhcmd1bWVudCBcIiRlbmFibGVfbmV3bGluZVwiIHRvIC0tZW5hYmxlLW5ld2xpbmUgb3B0aW9uXSkKKyAgOzsKK2VzYWMKKworIyAtLWVuYWJsZS1lYmNkaWMtbmwyNSBpbXBsaWVzIC0tZW5hYmxlLWViY2RpYworaWYgdGVzdCAieCRlbmFibGVfZWJjZGljX25sMjUiID0gInh5ZXMiOyB0aGVuCisgIGVuYWJsZV9lYmNkaWM9eWVzCitmaQorCisjIE1ha2Ugc3VyZSB0aGF0IGlmIGVuYWJsZV9lYmNkaWMgaXMgc2V0LCByZWJ1aWxkX2NoYXJ0YWJsZXMgaXMgYWxzbyBlbmFibGVkLgorIyBBbHNvIGNoZWNrIHRoYXQgVVRGIHN1cHBvcnQgaXMgbm90IHJlcXVlc3RlZCwgYmVjYXVzZSBQQ1JFMiBjYW5ub3QgaGFuZGxlCisjIEVCQ0RJQyBhbmQgVVRGIGluIHRoZSBzYW1lIGJ1aWxkLiBUbyBkbyBzbyBpdCB3b3VsZCBuZWVkIHRvIHVzZSBkaWZmZXJlbnQKKyMgY2hhcmFjdGVyIGNvbnN0YW50cyBkZXBlbmRpbmcgb24gdGhlIG1vZGUuIEFsc28sIEVCQ0RJQyBjYW5ub3QgYmUgdXNlZCB3aXRoCisjIDE2LWJpdCBhbmQgMzItYml0IGxpYnJhcmllcy4KKyMKK2lmIHRlc3QgIngkZW5hYmxlX2ViY2RpYyIgPSAieHllcyI7IHRoZW4KKyAgZW5hYmxlX3JlYnVpbGRfY2hhcnRhYmxlcz15ZXMKKyAgaWYgdGVzdCAieCRlbmFibGVfdW5pY29kZSIgPSAieHllcyI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW3N1cHBvcnQgZm9yIEVCQ0RJQyBhbmQgVW5pY29kZSBjYW5ub3QgYmUgZW5hYmxlZCBhdCB0aGUgc2FtZSB0aW1lXSkKKyAgZmkKKyAgaWYgdGVzdCAieCRlbmFibGVfcGNyZTJfMTYiID0gInh5ZXMiIC1vICJ4JGVuYWJsZV9wY3JlMl8zMiIgPSAieHllcyI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW0VCQ0RJQyBzdXBwb3J0IGlzIGF2YWlsYWJsZSBvbmx5IGZvciB0aGUgOC1iaXQgbGlicmFyeV0pCisgIGZpCitmaQorCisjIENoZWNrIGFyZ3VtZW50IHRvIC0td2l0aC1saW5rLXNpemUKK2Nhc2UgIiR3aXRoX2xpbmtfc2l6ZSIgaW4KKyAgMnwzfDQpIDs7CisgICopCisgIEFDX01TR19FUlJPUihbaW52YWxpZCBhcmd1bWVudCBcIiR3aXRoX2xpbmtfc2l6ZVwiIHRvIC0td2l0aC1saW5rLXNpemUgb3B0aW9uXSkKKyAgOzsKK2VzYWMKKworQUhfVE9QKFsKKy8qIFBDUkUyIGlzIHdyaXR0ZW4gaW4gU3RhbmRhcmQgQywgYnV0IHRoZXJlIGFyZSBhIGZldyBub24tc3RhbmRhcmQgdGhpbmdzIGl0CitjYW4gY29wZSB3aXRoLCBhbGxvd2luZyBpdCB0byBydW4gb24gU3VuT1M0IGFuZCBvdGhlciAiY2xvc2UgdG8gc3RhbmRhcmQiCitzeXN0ZW1zLgorCitJbiBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IHRoZSBHTlUgYXV0b3Rvb2xzLCBjb25maWcuaC5pbiBpcyBjb252ZXJ0ZWQgaW50bworY29uZmlnLmggYnkgdGhlICJjb25maWd1cmUiIHNjcmlwdC4gSW4gZW52aXJvbm1lbnRzIHRoYXQgdXNlIENNYWtlLAorY29uZmlnLWNtYWtlLmluIGlzIGNvbnZlcnRlZCBpbnRvIGNvbmZpZy5oLiBJZiB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIFBDUkUyICJieQoraGFuZCIgd2l0aG91dCB1c2luZyAiY29uZmlndXJlIiBvciBDTWFrZSwgeW91IHNob3VsZCBjb3B5IHRoZSBkaXN0cmlidXRlZAorY29uZmlnLmguZ2VuZXJpYyB0byBjb25maWcuaCwgYW5kIGVkaXQgdGhlIG1hY3JvIGRlZmluaXRpb25zIHRvIGJlIHRoZSB3YXkgeW91CituZWVkIHRoZW0uIFlvdSBtdXN0IHRoZW4gYWRkIC1ESEFWRV9DT05GSUdfSCB0byBhbGwgb2YgeW91ciBjb21waWxlIGNvbW1hbmRzLAorc28gdGhhdCBjb25maWcuaCBpcyBpbmNsdWRlZCBhdCB0aGUgc3RhcnQgb2YgZXZlcnkgc291cmNlLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGF2b2lkIGVkaXRpbmcgYnkgdXNpbmcgLUQgb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZQordG8gc2V0IHRoZSBtYWNybyB2YWx1ZXMuIEluIHRoaXMgY2FzZSwgeW91IGRvIG5vdCBoYXZlIHRvIHNldCAtREhBVkVfQ09ORklHX0gsCitidXQgaWYgeW91IGRvLCBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHRha2VuIGZyb20gY29uZmlnLmggZm9yIG5vbi1ib29sZWFuCittYWNyb3MgdGhhdCBhcmUgbm90IGRlZmluZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworQm9vbGVhbiBtYWNyb3Mgc3VjaCBhcyBIQVZFX1NURExJQl9IIGFuZCBTVVBQT1JUX1BDUkUyXzggc2hvdWxkIGVpdGhlciBiZSBkZWZpbmVkCisoY29udmVudGlvbmFsbHkgdG8gMSkgZm9yIFRSVUUsIGFuZCBub3QgZGVmaW5lZCBhdCBhbGwgZm9yIEZBTFNFLiBBbGwgc3VjaAorbWFjcm9zIGFyZSBsaXN0ZWQgYXMgYSBjb21tZW50ZWQgI3VuZGVmIGluIGNvbmZpZy5oLmdlbmVyaWMuIE1hY3JvcyBzdWNoIGFzCitNQVRDSF9MSU1JVCwgd2hvc2UgYWN0dWFsIHZhbHVlIGlzIHJlbGV2YW50LCBoYXZlIGRlZmF1bHRzIGRlZmluZWQsIGJ1dCBhcmUKK3N1cnJvdW5kZWQgYnkgI2lmbmRlZi8jZW5kaWYgbGluZXMgc28gdGhhdCB0aGUgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgLUQuCisKK1BDUkUyIHVzZXMgbWVtbW92ZSgpIGlmIEhBVkVfTUVNTU9WRSBpcyBkZWZpbmVkOyBvdGhlcndpc2UgaXQgdXNlcyBiY29weSgpIGlmCitIQVZFX0JDT1BZIGlzIGRlZmluZWQuIElmIHlvdXIgc3lzdGVtIGhhcyBuZWl0aGVyIGJjb3B5KCkgbm9yIG1lbW1vdmUoKSwgbWFrZQorc3VyZSBib3RoIG1hY3JvcyBhcmUgdW5kZWZpbmVkOyBhbiBlbXVsYXRpb24gZnVuY3Rpb24gd2lsbCB0aGVuIGJlIHVzZWQuICovXSkKKworIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KK0FDX0hFQURFUl9TVERDCitBQ19DSEVDS19IRUFERVJTKGxpbWl0cy5oIHN5cy90eXBlcy5oIHN5cy9zdGF0LmggZGlyZW50LmgpCitBQ19DSEVDS19IRUFERVJTKFt3aW5kb3dzLmhdLCBbSEFWRV9XSU5ET1dTX0g9MV0pCisKKyMgQ29uZGl0aW9uYWwgY29tcGlsYXRpb24KK0FNX0NPTkRJVElPTkFMKFdJVEhfUENSRTJfOCwgdGVzdCAieCRlbmFibGVfcGNyZTJfOCIgPSAieHllcyIpCitBTV9DT05ESVRJT05BTChXSVRIX1BDUkUyXzE2LCB0ZXN0ICJ4JGVuYWJsZV9wY3JlMl8xNiIgPSAieHllcyIpCitBTV9DT05ESVRJT05BTChXSVRIX1BDUkUyXzMyLCB0ZXN0ICJ4JGVuYWJsZV9wY3JlMl8zMiIgPSAieHllcyIpCitBTV9DT05ESVRJT05BTChXSVRIX0RFQlVHLCB0ZXN0ICJ4JGVuYWJsZV9kZWJ1ZyIgPSAieHllcyIpCitBTV9DT05ESVRJT05BTChXSVRIX1JFQlVJTERfQ0hBUlRBQkxFUywgdGVzdCAieCRlbmFibGVfcmVidWlsZF9jaGFydGFibGVzIiA9ICJ4eWVzIikKK0FNX0NPTkRJVElPTkFMKFdJVEhfSklULCB0ZXN0ICJ4JGVuYWJsZV9qaXQiID0gInh5ZXMiKQorQU1fQ09ORElUSU9OQUwoV0lUSF9VTklDT0RFLCB0ZXN0ICJ4JGVuYWJsZV91bmljb2RlIiA9ICJ4eWVzIikKK0FNX0NPTkRJVElPTkFMKFdJVEhfVkFMR1JJTkQsIHRlc3QgIngkZW5hYmxlX3ZhbGdyaW5kIiA9ICJ4eWVzIikKKworIyBDaGVja3MgZm9yIHR5cGVkZWZzLCBzdHJ1Y3R1cmVzLCBhbmQgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzLgorCitBQ19DX0NPTlNUCitBQ19UWVBFX1NJWkVfVAorCisjIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCisKK0FDX0NIRUNLX0ZVTkNTKGJjb3B5IG1lbW1vdmUgc3RyZXJyb3IpCisKKyMgQ2hlY2sgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgbGlieiAoYWthIHpsaWIpCisKK0FDX0NIRUNLX0hFQURFUlMoW3psaWIuaF0sIFtIQVZFX1pMSUJfSD0xXSkKK0FDX0NIRUNLX0xJQihbel0sIFtnem9wZW5dLCBbSEFWRV9MSUJaPTFdKQorCisjIENoZWNrIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIGxpYmJ6Mi4gT3JpZ2luYWxseSB3ZSBqdXN0IHVzZWQgQUNfQ0hFQ0tfTElCLAorIyBhcyBmb3IgbGliei4gSG93ZXZlciwgdGhpcyBoYWQgdGhlIGZvbGxvd2luZyBwcm9ibGVtLCBkaWFnbm9zZWQgYW5kIGZpeGVkIGJ5CisjIGEgdXNlcjoKKyMKKyMgICAtIGxpYmJ6MiB1c2VzIHRoZSBQYXNjYWwgY2FsbGluZyBjb252ZW50aW9uIChXSU5BUEkpIGZvciB0aGUgZnVuY3Rpb25zCisjICAgICB1bmRlciBXaW4zMi4KKyMgICAtIFRoZSBzdGFuZGFyZCBhdXRvY29uZiBBQ19DSEVDS19MSUIgZmFpbHMgdG8gaW5jbHVkZSAiYnpsaWIuaCIsCisjICAgICB0aGVyZWZvcmUgbWlzc2luZyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4KKyMgICAtIFRoZSBjb21waWxlciB0aHVzIGdlbmVyYXRlcyBhICJDIiBzaWduYXR1cmUgZm9yIHRoZSB0ZXN0IGZ1bmN0aW9uLgorIyAgIC0gVGhlIGxpbmtlciBmYWlscyB0byBmaW5kIHRoZSAiQyIgZnVuY3Rpb24uCisjICAgLSBQQ1JFMiBmYWlscyB0byBjb25maWd1cmUgaWYgYXNrZWQgdG8gZG8gc28gYWdhaW5zdCBsaWJiejIuCisjCisjIFNvbHV0aW9uOgorIworIyAgIC0gUmVwbGFjZSB0aGUgQUNfQ0hFQ0tfTElCIHRlc3Qgd2l0aCBhIGN1c3RvbSB0ZXN0LgorCitBQ19DSEVDS19IRUFERVJTKFtiemxpYi5oXSwgW0hBVkVfQlpMSUJfSD0xXSkKKyMgT3JpZ2luYWwgdGVzdAorIyBBQ19DSEVDS19MSUIoW2J6Ml0sIFtCWjJfYnpvcGVuXSwgW0hBVkVfTElCQloyPTFdKQorIworIyBDdXN0b20gdGVzdCBmb2xsb3dzCisKK0FDX01TR19DSEVDS0lORyhbZm9yIGxpYmJ6Ml0pCitPTERfTElCUz0iJExJQlMiCitMSUJTPSIkTElCUyAtbGJ6MiIKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpZmRlZiBIQVZFX0JaTElCX0gKKyNpbmNsdWRlIDxiemxpYi5oPgorI2VuZGlmXV0sCitbW3JldHVybiAoaW50KUJaMl9iem9wZW4oImNvbmZ0ZXN0IiwgInJiIik7XV0pXSwKK1tBQ19NU0dfUkVTVUxUKFt5ZXNdKTtIQVZFX0xJQkJaMj0xOyBicmVhaztdLAorQUNfTVNHX1JFU1VMVChbbm9dKSkKK0xJQlM9IiRPTERfTElCUyIKKworIyBDaGVjayBmb3IgdGhlIGF2YWlsYWJpaXR5IG9mIGxpYnJlYWRsaW5lCisKK2lmIHRlc3QgIiRlbmFibGVfcGNyZTJ0ZXN0X2xpYnJlYWRsaW5lIiA9ICJ5ZXMiOyB0aGVuCisgQUNfQ0hFQ0tfSEVBREVSUyhbcmVhZGxpbmUvcmVhZGxpbmUuaF0sIFtIQVZFX1JFQURMSU5FX0g9MV0pCisgQUNfQ0hFQ0tfSEVBREVSUyhbcmVhZGxpbmUvaGlzdG9yeS5oXSwgW0hBVkVfSElTVE9SWV9IPTFdKQorIEFDX0NIRUNLX0xJQihbcmVhZGxpbmVdLCBbcmVhZGxpbmVdLCBbTElCUkVBRExJTkU9Ii1scmVhZGxpbmUiXSwKKyAgIFt1bnNldCBhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmU7CisgICAgQUNfQ0hFQ0tfTElCKFtyZWFkbGluZV0sIFtyZWFkbGluZV0sIFtMSUJSRUFETElORT0iLWx0aW5mbyJdLAorICAgICBbdW5zZXQgYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lOworICAgICAgQUNfQ0hFQ0tfTElCKFtyZWFkbGluZV0sIFtyZWFkbGluZV0sIFtMSUJSRUFETElORT0iLWxjdXJzZXMiXSwKKyAgICAgICBbdW5zZXQgYWNfY3ZfbGliX3JlYWRsaW5lX3JlYWRsaW5lOworICAgICAgICBBQ19DSEVDS19MSUIoW3JlYWRsaW5lXSwgW3JlYWRsaW5lXSwgW0xJQlJFQURMSU5FPSItbG5jdXJzZXMiXSwKKyAgICAgICAgIFt1bnNldCBhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmU7CisJICBBQ19DSEVDS19MSUIoW3JlYWRsaW5lXSwgW3JlYWRsaW5lXSwgW0xJQlJFQURMSU5FPSItbG5jdXJzZXN3Il0sCisgICAgICAgICAgIFt1bnNldCBhY19jdl9saWJfcmVhZGxpbmVfcmVhZGxpbmU7CisJICAgIEFDX0NIRUNLX0xJQihbcmVhZGxpbmVdLCBbcmVhZGxpbmVdLCBbTElCUkVBRExJTkU9Ii1sdGVybWNhcCJdLAorICAgICAgICAgICAgIFtMSUJSRUFETElORT0iIl0sCisgICAgICAgICAgICAgWy1sdGVybWNhcF0pXSwKKyAgICAgICAgICAgWy1sbmN1cnNlc3ddKV0sCisgICAgICAgICBbLWxuY3Vyc2VzXSldLAorICAgICAgIFstbGN1cnNlc10pXSwKKyAgICAgWy1sdGluZm9dKV0pCisgQUNfU1VCU1QoTElCUkVBRExJTkUpCisgaWYgdGVzdCAtbiAiJExJQlJFQURMSU5FIjsgdGhlbgorICAgaWYgdGVzdCAiJExJQlJFQURMSU5FIiAhPSAiLWxyZWFkbGluZSI7IHRoZW4KKyAgICAgZWNobyAiLWxyZWFkbGluZSBuZWVkcyAkTElCUkVBRExJTkUiCisgICAgIExJQlJFQURMSU5FPSItbHJlYWRsaW5lICRMSUJSRUFETElORSIKKyAgIGZpCisgZmkKK2ZpCisKKworIyBDaGVjayBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBsaWJlZGl0LiBEaWZmZXJlbnQgZGlzdHJpYnV0aW9ucyBwdXQgaXRzCisjIGhlYWRlcnMgaW4gZGlmZmVyZW50IHBsYWNlcy4gVHJ5IHRvIGNvdmVyIHRoZSBtb3N0IGNvbW1vbiBvbmVzLgorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUydGVzdF9saWJlZGl0IiA9ICJ5ZXMiOyB0aGVuCisgIEFDX0NIRUNLX0hFQURFUlMoW2VkaXRsaW5lL3JlYWRsaW5lLmhdLCBbSEFWRV9FRElUTElORV9SRUFETElORV9IPTFdLAorICAgIFtBQ19DSEVDS19IRUFERVJTKFtlZGl0L3JlYWRsaW5lL3JlYWRsaW5lLmhdLCBbSEFWRV9SRUFETElORV9SRUFETElORV9IPTFdLAorICAgICAgW0FDX0NIRUNLX0hFQURFUlMoW3JlYWRsaW5lL3JlYWRsaW5lLmhdLCBbSEFWRV9SRUFETElORV9SRUFETElORV9IPTFdKV0pXSkKKyAgQUNfQ0hFQ0tfTElCKFtlZGl0XSwgW3JlYWRsaW5lXSwgW0xJQkVESVQ9Ii1sZWRpdCJdKQorZmkKKworIyBUaGlzIGZhY2lsaXRhdGVzIC1hbnNpIGJ1aWxkcyB1bmRlciBMaW51eAorZG5sIEFDX0RFRklORShbX0dOVV9TT1VSQ0VdLCBbXSwgW0VuYWJsZSBHTlUgZXh0ZW5zaW9ucyBpbiBnbGliY10pCisKK1BDUkUyX1NUQVRJQ19DRkxBRz0iIgoraWYgdGVzdCAieCRlbmFibGVfc2hhcmVkIiA9ICJ4bm8iIDsgdGhlbgorICBBQ19ERUZJTkUoW1BDUkUyX1NUQVRJQ10sIFsxXSwgWworICAgIERlZmluZSB0byBhbnkgdmFsdWUgaWYgbGlua2luZyBzdGF0aWNhbGx5IChUT0RPOiBtYWtlIG5pY2Ugd2l0aCBMaWJ0b29sKV0pCisgIFBDUkUyX1NUQVRJQ19DRkxBRz0iLURQQ1JFMl9TVEFUSUMiCitmaQorQUNfU1VCU1QoUENSRTJfU1RBVElDX0NGTEFHKQorCisjIEhlcmUgaXMgd2hlcmUgUENSRTItc3BlY2lmaWMgZGVmaW5lcyBhcmUgaGFuZGxlZAorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUyXzgiID0gInllcyI7IHRoZW4KKyAgQUNfREVGSU5FKFtTVVBQT1JUX1BDUkUyXzhdLCBbXSwgWworICAgIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIHRoZSA4IGJpdCBQQ1JFMiBsaWJyYXJ5Ll0pCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUyXzE2IiA9ICJ5ZXMiOyB0aGVuCisgIEFDX0RFRklORShbU1VQUE9SVF9QQ1JFMl8xNl0sIFtdLCBbCisgICAgRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBlbmFibGUgdGhlIDE2IGJpdCBQQ1JFMiBsaWJyYXJ5Ll0pCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUyXzMyIiA9ICJ5ZXMiOyB0aGVuCisgIEFDX0RFRklORShbU1VQUE9SVF9QQ1JFMl8zMl0sIFtdLCBbCisgICAgRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBlbmFibGUgdGhlIDMyIGJpdCBQQ1JFMiBsaWJyYXJ5Ll0pCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX2RlYnVnIiA9ICJ5ZXMiOyB0aGVuCisgIEFDX0RFRklORShbUENSRTJfREVCVUddLCBbXSwgWworICAgIERlZmluZSB0byBhbnkgdmFsdWUgdG8gaW5jbHVkZSBkZWJ1Z2dpbmcgY29kZS5dKQorZmkKKworIyBVbmxlc3MgcnVubmluZyB1bmRlciBXaW5kb3dzLCBKSVQgc3VwcG9ydCByZXF1aXJlcyBwdGhyZWFkcy4KKworaWYgdGVzdCAiJGVuYWJsZV9qaXQiID0gInllcyI7IHRoZW4KKyAgaWYgdGVzdCAiJEhBVkVfV0lORE9XU19IIiAhPSAiMSI7IHRoZW4KKyAgICBBWF9QVEhSRUFEKFtdLCBbQUNfTVNHX0VSUk9SKFtKSVQgc3VwcG9ydCByZXF1aXJlcyBwdGhyZWFkc10pXSkKKyAgICBDQz0iJFBUSFJFQURfQ0MiCisgICAgQ0ZMQUdTPSIkUFRIUkVBRF9DRkxBR1MgJENGTEFHUyIKKyAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorICBmaQorICBBQ19ERUZJTkUoW1NVUFBPUlRfSklUXSwgW10sIFsKKyAgICBEZWZpbmUgdG8gYW55IHZhbHVlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBKdXN0LUluLVRpbWUgY29tcGlsaW5nLl0pCitlbHNlCisgIGVuYWJsZV9wY3JlMmdyZXBfaml0PSJubyIKK2ZpCisKK2lmIHRlc3QgIiRlbmFibGVfcGNyZTJncmVwX2ppdCIgPSAieWVzIjsgdGhlbgorICBBQ19ERUZJTkUoW1NVUFBPUlRfUENSRTJHUkVQX0pJVF0sIFtdLCBbCisgICAgRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBlbmFibGUgSklUIHN1cHBvcnQgaW4gcGNyZTJncmVwLl0pCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3VuaWNvZGUiID0gInllcyI7IHRoZW4KKyAgQUNfREVGSU5FKFtTVVBQT1JUX1VOSUNPREVdLCBbXSwgWworICAgIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFVuaWNvZGUgYW5kIFVURiBlbmNvZGluZy4KKyAgICBUaGlzIHdpbGwgd29yayBldmVuIGluIGFuIEVCQ0RJQyBlbnZpcm9ubWVudCwgYnV0IGl0IGlzIGluY29tcGF0aWJsZQorICAgIHdpdGggdGhlIEVCQ0RJQyBtYWNyby4gVGhhdCBpcywgUENSRTIgY2FuIHN1cHBvcnQgKmVpdGhlciogRUJDRElDCisgICAgY29kZSAqb3IqIEFTQ0lJL1VuaWNvZGUsIGJ1dCBub3QgYm90aCBhdCBvbmNlLl0pCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX3N0YWNrX2Zvcl9yZWN1cnNpb24iID0gIm5vIjsgdGhlbgorICBBQ19ERUZJTkUoW0hFQVBfTUFUQ0hfUkVDVVJTRV0sIFtdLCBbCisgICAgUENSRTIgdXNlcyByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMgdG8gaGFuZGxlIGJhY2t0cmFja2luZyB3aGlsZQorICAgIG1hdGNoaW5nLiBUaGlzIGNhbiBzb21ldGltZXMgYmUgYSBwcm9ibGVtIG9uIHN5c3RlbXMgdGhhdCBoYXZlCisgICAgc3RhY2tzIG9mIGxpbWl0ZWQgc2l6ZS4gRGVmaW5lIEhFQVBfTUFUQ0hfUkVDVVJTRSB0byBhbnkgdmFsdWUgdG8gZ2V0IGEKKyAgICB2ZXJzaW9uIHRoYXQgZG9lc24ndCB1c2UgcmVjdXJzaW9uIGluIHRoZSBtYXRjaCgpIGZ1bmN0aW9uOyBpbnN0ZWFkCisgICAgaXQgY3JlYXRlcyBpdHMgb3duIHN0YWNrIGJ5IHN0ZWFtIHVzaW5nIG1lbW9yeSBmcm9tIHRoZSBoZWFwLiBGb3IgbW9yZQorICAgIGRldGFpbCwgc2VlIHRoZSBjb21tZW50cyBhbmQgb3RoZXIgc3R1ZmYganVzdCBhYm92ZSB0aGUgbWF0Y2goKSBmdW5jdGlvbi5dKQorZmkKKworaWYgdGVzdCAiJGVuYWJsZV9wY3JlMmdyZXBfbGlieiIgPSAieWVzIjsgdGhlbgorICBBQ19ERUZJTkUoW1NVUFBPUlRfTElCWl0sIFtdLCBbCisgICAgRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBhbGxvdyBwY3JlMmdyZXAgdG8gYmUgbGlua2VkIHdpdGggbGlieiwgc28gdGhhdCBpdCBpcworICAgIGFibGUgdG8gaGFuZGxlIC5neiBmaWxlcy5dKQorZmkKKworaWYgdGVzdCAiJGVuYWJsZV9wY3JlMmdyZXBfbGliYnoyIiA9ICJ5ZXMiOyB0aGVuCisgIEFDX0RFRklORShbU1VQUE9SVF9MSUJCWjJdLCBbXSwgWworICAgIERlZmluZSB0byBhbnkgdmFsdWUgdG8gYWxsb3cgcGNyZTJncmVwIHRvIGJlIGxpbmtlZCB3aXRoIGxpYmJ6Miwgc28gdGhhdCBpdAorICAgIGlzIGFibGUgdG8gaGFuZGxlIC5iejIgZmlsZXMuXSkKK2ZpCisKK2lmIHRlc3QgJHdpdGhfcGNyZTJncmVwX2J1ZnNpemUgLWx0IDgxOTIgOyB0aGVuCisgIEFDX01TR19XQVJOKFskd2l0aF9wY3JlMmdyZXBfYnVmc2l6ZSBpcyB0b28gc21hbGwgZm9yIC0td2l0aC1wY3JlMmdyZXAtYnVmc2l6ZTsgdXNpbmcgODE5Ml0pCisgIHdpdGhfcGNyZTJncmVwX2J1ZnNpemU9IjgxOTIiCitlbHNlCisgIGlmIHRlc3QgJD8gLWd0IDEgOyB0aGVuCisgIEFDX01TR19FUlJPUihbQmFkIHZhbHVlIGZvciAgLS13aXRoLXBjcmUyZ3JlcC1idWZzaXplXSkKKyAgZmkKK2ZpCisKK0FDX0RFRklORV9VTlFVT1RFRChbUENSRTJHUkVQX0JVRlNJWkVdLCBbJHdpdGhfcGNyZTJncmVwX2J1ZnNpemVdLCBbCisgIFRoZSB2YWx1ZSBvZiBQQ1JFMkdSRVBfQlVGU0laRSBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIGJ1ZmZlciB1c2VkIGJ5IHBjcmUyZ3JlcAorICB0byBob2xkIHBhcnRzIG9mIHRoZSBmaWxlIGl0IGlzIHNlYXJjaGluZy4gVGhpcyBpcyBhbHNvIHRoZSBtaW5pbXVtIHZhbHVlLgorICBUaGUgYWN0dWFsIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBieSBwY3JlMmdyZXAgaXMgdGhyZWUgdGltZXMgdGhpcyBudW1iZXIsCisgIGJlY2F1c2UgaXQgYWxsb3dzIGZvciB0aGUgYnVmZmVyaW5nIG9mICJiZWZvcmUiIGFuZCAiYWZ0ZXIiIGxpbmVzLl0pCisKK2lmIHRlc3QgIiRlbmFibGVfcGNyZTJ0ZXN0X2xpYmVkaXQiID0gInllcyI7IHRoZW4KKyAgQUNfREVGSU5FKFtTVVBQT1JUX0xJQkVESVRdLCBbXSwgWworICAgIERlZmluZSB0byBhbnkgdmFsdWUgdG8gYWxsb3cgcGNyZTJ0ZXN0IHRvIGJlIGxpbmtlZCB3aXRoIGxpYmVkaXQuXSkKKyAgTElCUkVBRExJTkU9IiRMSUJFRElUIgorZWxpZiB0ZXN0ICIkZW5hYmxlX3BjcmUydGVzdF9saWJyZWFkbGluZSIgPSAieWVzIjsgdGhlbgorICBBQ19ERUZJTkUoW1NVUFBPUlRfTElCUkVBRExJTkVdLCBbXSwgWworICAgIERlZmluZSB0byBhbnkgdmFsdWUgdG8gYWxsb3cgcGNyZTJ0ZXN0IHRvIGJlIGxpbmtlZCB3aXRoIGxpYnJlYWRsaW5lLl0pCitmaQorCitBQ19ERUZJTkVfVU5RVU9URUQoW05FV0xJTkVfREVGQVVMVF0sIFskYWNfcGNyZTJfbmV3bGluZV92YWx1ZV0sIFsKKyAgVGhlIHZhbHVlIG9mIE5FV0xJTkVfREVGQVVMVCBkZXRlcm1pbmVzIHRoZSBkZWZhdWx0IG5ld2xpbmUgY2hhcmFjdGVyCisgIHNlcXVlbmNlLiBQQ1JFMiBjbGllbnQgcHJvZ3JhbXMgY2FuIG92ZXJyaWRlIHRoaXMgYnkgc2VsZWN0aW5nIG90aGVyIHZhbHVlcworICBhdCBydW4gdGltZS4gVGhlIHZhbGlkIHZhbHVlcyBhcmUgMSAoQ1IpLCAyIChMRiksIDMgKENSTEYpLCA0IChBTlkpLAorICBhbmQgNSAoQU5ZQ1JMRikuXSkKKworaWYgdGVzdCAiJGVuYWJsZV9ic3JfYW55Y3JsZiIgPSAieWVzIjsgdGhlbgorICBBQ19ERUZJTkUoW0JTUl9BTllDUkxGXSwgW10sIFsKKyAgICBCeSBkZWZhdWx0LCB0aGUgXFIgZXNjYXBlIHNlcXVlbmNlIG1hdGNoZXMgYW55IFVuaWNvZGUgbGluZSBlbmRpbmcKKyAgICBjaGFyYWN0ZXIgb3Igc2VxdWVuY2Ugb2YgY2hhcmFjdGVycy4gSWYgQlNSX0FOWUNSTEYgaXMgZGVmaW5lZCAodG8gYW55CisgICAgdmFsdWUpLCB0aGlzIGlzIGNoYW5nZWQgc28gdGhhdCBiYWNrc2xhc2gtUiBtYXRjaGVzIG9ubHkgQ1IsIExGLCBvciBDUkxGLgorICAgIFRoZSBidWlsZC10aW1lIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHVzZXIgb2YgUENSRTIgYXQgcnVudGltZS5dKQorZmkKKworaWYgdGVzdCAiJGVuYWJsZV9uZXZlcl9iYWNrc2xhc2hfQyIgPSAieWVzIjsgdGhlbgorICBBQ19ERUZJTkUoW05FVkVSX0JBQ0tTTEFTSF9DXSwgW10sIFsKKyAgICBEZWZpbmluZyBORVZFUl9CQUNLU0xBU0hfQyBsb2NrcyBvdXQgdGhlIHVzZSBvZiBcQyBpbiBhbGwgcGF0dGVybnMuXSkKK2ZpCisKK0FDX0RFRklORV9VTlFVT1RFRChbTElOS19TSVpFXSwgWyR3aXRoX2xpbmtfc2l6ZV0sIFsKKyAgVGhlIHZhbHVlIG9mIExJTktfU0laRSBkZXRlcm1pbmVzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdXNlZCB0byBzdG9yZQorICBsaW5rcyBhcyBvZmZzZXRzIHdpdGhpbiB0aGUgY29tcGlsZWQgcmVnZXguIFRoZSBkZWZhdWx0IGlzIDIsIHdoaWNoCisgIGFsbG93cyBmb3IgY29tcGlsZWQgcGF0dGVybnMgdXAgdG8gNjRLIGxvbmcuIFRoaXMgY292ZXJzIHRoZSB2YXN0CisgIG1ham9yaXR5IG9mIGNhc2VzLiBIb3dldmVyLCBQQ1JFMiBjYW4gYWxzbyBiZSBjb21waWxlZCB0byB1c2UgMyBvciA0CisgIGJ5dGVzIGluc3RlYWQuIFRoaXMgYWxsb3dzIGZvciBsb25nZXIgcGF0dGVybnMgaW4gZXh0cmVtZSBjYXNlcy5dKQorCitBQ19ERUZJTkVfVU5RVU9URUQoW1BBUkVOU19ORVNUX0xJTUlUXSwgWyR3aXRoX3BhcmVuc19uZXN0X2xpbWl0XSwgWworICBUaGUgdmFsdWUgb2YgUEFSRU5TX05FU1RfTElNSVQgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIGRlcHRoIG9mIG5lc3RlZAorICBwYXJlbnRoZXNlcyAob2YgYW55IGtpbmQpIGluIGEgcGF0dGVybi4gVGhpcyBsaW1pdHMgdGhlIGFtb3VudCBvZiBzeXN0ZW0KKyAgc3RhY2sgdGhhdCBpcyB1c2VkIHdoaWxlIGNvbXBpbGluZyBhIHBhdHRlcm4uXSkKKworQUNfREVGSU5FX1VOUVVPVEVEKFtNQVRDSF9MSU1JVF0sIFskd2l0aF9tYXRjaF9saW1pdF0sIFsKKyAgVGhlIHZhbHVlIG9mIE1BVENIX0xJTUlUIGRldGVybWluZXMgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHRpbWVzIHRoZQorICBpbnRlcm5hbCBtYXRjaCgpIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZHVyaW5nIGEgc2luZ2xlIGV4ZWN1dGlvbiBvZgorICBwY3JlMl9tYXRjaCgpLiBUaGVyZSBpcyBhIHJ1bnRpbWUgaW50ZXJmYWNlIGZvciBzZXR0aW5nIGEgZGlmZmVyZW50CisgIGxpbWl0LiBUaGUgbGltaXQgZXhpc3RzIGluIG9yZGVyIHRvIGNhdGNoIHJ1bmF3YXkgcmVndWxhcgorICBleHByZXNzaW9ucyB0aGF0IHRha2UgZm9yIGV2ZXIgdG8gZGV0ZXJtaW5lIHRoYXQgdGhleSBkbyBub3QgbWF0Y2guCisgIFRoZSBkZWZhdWx0IGlzIHNldCB2ZXJ5IGxhcmdlIHNvIHRoYXQgaXQgZG9lcyBub3QgYWNjaWRlbnRhbGx5IGNhdGNoCisgIGxlZ2l0aW1hdGUgY2FzZXMuXSkKKworQUNfREVGSU5FX1VOUVVPVEVEKFtNQVRDSF9MSU1JVF9SRUNVUlNJT05dLCBbJHdpdGhfbWF0Y2hfbGltaXRfcmVjdXJzaW9uXSwgWworICBUaGUgYWJvdmUgbGltaXQgYXBwbGllcyB0byBhbGwgY2FsbHMgb2YgbWF0Y2goKSwgd2hldGhlciBvciBub3QgdGhleQorICBpbmNyZWFzZSB0aGUgcmVjdXJzaW9uIGRlcHRoLiBJbiBzb21lIGVudmlyb25tZW50cyBpdCBpcyBkZXNpcmFibGUKKyAgdG8gbGltaXQgdGhlIGRlcHRoIG9mIHJlY3Vyc2l2ZSBjYWxscyBvZiBtYXRjaCgpIG1vcmUgc3RyaWN0bHksIGluCisgIG9yZGVyIHRvIHJlc3RyaWN0IHRoZSBtYXhpbXVtIGFtb3VudCBvZiBzdGFjayAob3IgaGVhcCwgaWYKKyAgSEVBUF9NQVRDSF9SRUNVUlNFIGlzIGRlZmluZWQpIHRoYXQgaXMgdXNlZC4gVGhlIHZhbHVlIG9mCisgIE1BVENIX0xJTUlUX1JFQ1VSU0lPTiBhcHBsaWVzIG9ubHkgdG8gcmVjdXJzaXZlIGNhbGxzIG9mIG1hdGNoKCkuIFRvCisgIGhhdmUgYW55IHVzZWZ1bCBlZmZlY3QsIGl0IG11c3QgYmUgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZgorICBNQVRDSF9MSU1JVC4gVGhlIGRlZmF1bHQgaXMgdG8gdXNlIHRoZSBzYW1lIHZhbHVlIGFzIE1BVENIX0xJTUlULgorICBUaGVyZSBpcyBhIHJ1bnRpbWUgbWV0aG9kIGZvciBzZXR0aW5nIGEgZGlmZmVyZW50IGxpbWl0Ll0pCisKK0FDX0RFRklORShbTUFYX05BTUVfU0laRV0sIFszMl0sIFsKKyAgVGhpcyBsaW1pdCBpcyBwYXJhbWV0ZXJpemVkIGp1c3QgaW4gY2FzZSBhbnlib2R5IGV2ZXIgd2FudHMgdG8KKyAgY2hhbmdlIGl0LiBDYXJlIG11c3QgYmUgdGFrZW4gaWYgaXQgaXMgaW5jcmVhc2VkLCBiZWNhdXNlIGl0IGd1YXJkcworICBhZ2FpbnN0IGludGVnZXIgb3ZlcmZsb3cgY2F1c2VkIGJ5IGVub3Jtb3VzbHkgbGFyZ2UgcGF0dGVybnMuXSkKKworQUNfREVGSU5FKFtNQVhfTkFNRV9DT1VOVF0sIFsxMDAwMF0sIFsKKyAgVGhpcyBsaW1pdCBpcyBwYXJhbWV0ZXJpemVkIGp1c3QgaW4gY2FzZSBhbnlib2R5IGV2ZXIgd2FudHMgdG8KKyAgY2hhbmdlIGl0LiBDYXJlIG11c3QgYmUgdGFrZW4gaWYgaXQgaXMgaW5jcmVhc2VkLCBiZWNhdXNlIGl0IGd1YXJkcworICBhZ2FpbnN0IGludGVnZXIgb3ZlcmZsb3cgY2F1c2VkIGJ5IGVub3Jtb3VzbHkgbGFyZ2UgcGF0dGVybnMuXSkKKworQUhfVkVSQkFUSU0oW1BDUkUyX0VYUF9ERUZOXSwgWworLyogSWYgeW91IGFyZSBjb21waWxpbmcgZm9yIGEgc3lzdGVtIG90aGVyIHRoYW4gYSBVbml4LWxpa2Ugc3lzdGVtIG9yCisgICBXaW4zMiwgYW5kIGl0IG5lZWRzIHNvbWUgbWFnaWMgdG8gYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBkZWZpbml0aW9uCisgICBvZiBhIGZ1bmN0aW9uIHRoYXQgaXMgZXhwb3J0ZWQgYnkgdGhlIGxpYnJhcnksIGRlZmluZSB0aGlzIG1hY3JvIHRvCisgICBjb250YWluIHRoZSByZWxldmFudCBtYWdpYy4gSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgYSBzdWl0YWJsZQorICAgIF9fZGVjbHNwZWMgdmFsdWUgaXMgdXNlZCBmb3IgV2luZG93cyBzeXN0ZW1zOyBpbiBvdGhlciBlbnZpcm9ubWVudHMKKyAgICJleHRlcm4iIGlzIHVzZWQgZm9yIGEgQyBjb21waWxlciBhbmQgImV4dGVybiBDIiBmb3IgYSBDKysgY29tcGlsZXIuCisgICBUaGlzIG1hY3JvIGFwZWFycyBhdCB0aGUgc3RhcnQgb2YgZXZlcnkgZXhwb3J0ZWQgZnVuY3Rpb24gdGhhdCBpcyBwYXJ0CisgICBvZiB0aGUgZXh0ZXJuYWwgQVBJLiBJdCBkb2VzIG5vdCBhcHBlYXIgb24gZnVuY3Rpb25zIHRoYXQgYXJlICJleHRlcm5hbCIKKyAgIGluIHRoZSBDIHNlbnNlLCBidXQgd2hpY2ggYXJlIGludGVybmFsIHRvIHRoZSBsaWJyYXJ5LiAqLworI3VuZGVmIFBDUkUyX0VYUF9ERUZOXSkKKworaWYgdGVzdCAiJGVuYWJsZV9lYmNkaWMiID0gInllcyI7IHRoZW4KKyAgQUNfREVGSU5FX1VOUVVPVEVEKFtFQkNESUNdLCBbXSwgWworICAgIElmIHlvdSBhcmUgY29tcGlsaW5nIGZvciBhIHN5c3RlbSB0aGF0IHVzZXMgRUJDRElDIGluc3RlYWQgb2YgQVNDSUkKKyAgICBjaGFyYWN0ZXIgY29kZXMsIGRlZmluZSB0aGlzIG1hY3JvIHRvIGFueSB2YWx1ZS4gV2hlbiBFQkNESUMgaXMgc2V0LCBQQ1JFMgorICAgIGFzc3VtZXMgdGhhdCBhbGwgaW5wdXQgc3RyaW5ncyBhcmUgaW4gRUJDRElDLiBJZiB5b3UgZG8gbm90IGRlZmluZSB0aGlzCisgICAgbWFjcm8sIFBDUkUyIHdpbGwgYXNzdW1lIGlucHV0IHN0cmluZ3MgYXJlIEFTQ0lJIG9yIFVURi04LzE2LzMyIFVuaWNvZGUuIEl0CisgICAgaXMgbm90IHBvc3NpYmxlIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBQQ1JFMiB0aGF0IHN1cHBvcnRzIGJvdGggRUJDRElDIGFuZAorICAgIFVURi04LzE2LzMyLl0pCitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX2ViY2RpY19ubDI1IiA9ICJ5ZXMiOyB0aGVuCisgIEFDX0RFRklORV9VTlFVT1RFRChbRUJDRElDX05MMjVdLCBbXSwgWworICAgIEluIGFuIEVCQ0RJQyBlbnZpcm9ubWVudCwgZGVmaW5lIHRoaXMgbWFjcm8gdG8gYW55IHZhbHVlIHRvIGFycmFuZ2UgZm9yCisgICAgdGhlIE5MIGNoYXJhY3RlciB0byBiZSAweDI1IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgMHgxNS4gTkwgcGxheXMgdGhlIHJvbGUKKyAgICB0aGF0IExGIGRvZXMgaW4gYW4gQVNDSUkvVW5pY29kZSBlbnZpcm9ubWVudC5dKQorZmkKKworaWYgdGVzdCAiJGVuYWJsZV92YWxncmluZCIgPSAieWVzIjsgdGhlbgorICBBQ19ERUZJTkVfVU5RVU9URUQoW1NVUFBPUlRfVkFMR1JJTkRdLCBbXSwgWworICAgICBEZWZpbmUgdG8gYW55IHZhbHVlIGZvciB2YWxncmluZCBzdXBwb3J0IHRvIGZpbmQgaW52YWxpZCBtZW1vcnkgcmVhZHMuXSkKK2ZpCisKKyMgUGxhdGZvcm0gc3BlY2lmaWMgaXNzdWVzCitOT19VTkRFRklORUQ9CitFWFBPUlRfQUxMX1NZTUJPTFM9CitjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogKQorICAgIGlmIHRlc3QgWCIkZW5hYmxlX3NoYXJlZCIgPSBYeWVzOyB0aGVuCisgICAgICBOT19VTkRFRklORUQ9Ii1uby11bmRlZmluZWQiCisgICAgICBFWFBPUlRfQUxMX1NZTUJPTFM9Ii1XbCwtLWV4cG9ydC1hbGwtc3ltYm9scyIKKyAgICBmaQorICAgIDs7Citlc2FjCisKKyMgVGhlIGV4dHJhIExERkxBR1MgZm9yIGVhY2ggcGFydGljdWxhciBsaWJyYXJ5LiBUaGUgbGlicGNyZTIqX3ZlcnNpb24gdmFsdWVzCisjIGFyZSBtNCB2YXJpYWJsZXMsIGFzc2lnbmVkIGFib3ZlLgorCitFWFRSQV9MSUJQQ1JFMl84X0xERkxBR1M9IiRFWFRSQV9MSUJQQ1JFMl84X0xERkxBR1MgXAorICAkTk9fVU5ERUZJTkVEIC12ZXJzaW9uLWluZm8gbGlicGNyZTJfOF92ZXJzaW9uIgorCitFWFRSQV9MSUJQQ1JFMl8xNl9MREZMQUdTPSIkRVhUUkFfTElCUENSRTJfMTZfTERGTEFHUyBcCisgICROT19VTkRFRklORUQgLXZlcnNpb24taW5mbyBsaWJwY3JlMl8xNl92ZXJzaW9uIgorCitFWFRSQV9MSUJQQ1JFMl8zMl9MREZMQUdTPSIkRVhUUkFfTElCUENSRTJfMzJfTERGTEFHUyBcCisgICROT19VTkRFRklORUQgLXZlcnNpb24taW5mbyBsaWJwY3JlMl8zMl92ZXJzaW9uIgorCitFWFRSQV9MSUJQQ1JFMl9QT1NJWF9MREZMQUdTPSIkRVhUUkFfTElCUENSRTJfUE9TSVhfTERGTEFHUyBcCisgICROT19VTkRFRklORUQgLXZlcnNpb24taW5mbyBsaWJwY3JlMl9wb3NpeF92ZXJzaW9uIgorCitBQ19TVUJTVChFWFRSQV9MSUJQQ1JFMl84X0xERkxBR1MpCitBQ19TVUJTVChFWFRSQV9MSUJQQ1JFMl8xNl9MREZMQUdTKQorQUNfU1VCU1QoRVhUUkFfTElCUENSRTJfMzJfTERGTEFHUykKK0FDX1NVQlNUKEVYVFJBX0xJQlBDUkUyX1BPU0lYX0xERkxBR1MpCisKKyMgV2hlbiB3ZSBydW4gJ21ha2UgZGlzdGNoZWNrJywgdXNlIHRoZXNlIGFyZ3VtZW50cy4gVHVybmluZyBvZmYgY29tcGlsZXIKKyMgb3B0aW1pemF0aW9uIG1ha2VzIGl0IHJ1biBmYXN0ZXIuCitESVNUQ0hFQ0tfQ09ORklHVVJFX0ZMQUdTPSJDRkxBR1M9JycgQ1hYRkxBR1M9JycgLS1lbmFibGUtcGNyZTItMTYgLS1lbmFibGUtcGNyZTItMzIgLS1lbmFibGUtaml0IC0tZW5hYmxlLXV0ZiIKK0FDX1NVQlNUKERJU1RDSEVDS19DT05GSUdVUkVfRkxBR1MpCisKKyMgQ2hlY2sgdGhhdCwgaWYgLS1lbmFibGUtcGNyZTJncmVwLWxpYnogb3IgLS1lbmFibGUtcGNyZTJncmVwLWxpYmJ6MiBpcworIyBzcGVjaWZpZWQsIHRoZSByZWxldmFudCBsaWJyYXJ5IGlzIGF2YWlsYWJsZS4KKworaWYgdGVzdCAiJGVuYWJsZV9wY3JlMmdyZXBfbGlieiIgPSAieWVzIjsgdGhlbgorICBpZiB0ZXN0ICIkSEFWRV9aTElCX0giICE9ICIxIjsgdGhlbgorICAgIGVjaG8gIioqIENhbm5vdCAtLWVuYWJsZS1wY3JlMmdyZXAtbGlieiBiZWNhdXNlIHpsaWIuaCB3YXMgbm90IGZvdW5kIgorICAgIGV4aXQgMQorICBmaQorICBpZiB0ZXN0ICIkSEFWRV9MSUJaIiAhPSAiMSI7IHRoZW4KKyAgICBlY2hvICIqKiBDYW5ub3QgLS1lbmFibGUtcGNyZTJncmVwLWxpYnogYmVjYXVzZSBsaWJ6IHdhcyBub3QgZm91bmQiCisgICAgZXhpdCAxCisgIGZpCisgIExJQlo9Ii1seiIKK2ZpCitBQ19TVUJTVChMSUJaKQorCitpZiB0ZXN0ICIkZW5hYmxlX3BjcmUyZ3JlcF9saWJiejIiID0gInllcyI7IHRoZW4KKyAgaWYgdGVzdCAiJEhBVkVfQlpMSUJfSCIgIT0gIjEiOyB0aGVuCisgICAgZWNobyAiKiogQ2Fubm90IC0tZW5hYmxlLXBjcmUyZ3JlcC1saWJiejIgYmVjYXVzZSBiemxpYi5oIHdhcyBub3QgZm91bmQiCisgICAgZXhpdCAxCisgIGZpCisgIGlmIHRlc3QgIiRIQVZFX0xJQkJaMiIgIT0gIjEiOyB0aGVuCisgICAgZWNobyAiKiogQ2Fubm90IC0tZW5hYmxlLXBjcmUyZ3JlcC1saWJiejIgYmVjYXVzZSBsaWJiejIgd2FzIG5vdCBmb3VuZCIKKyAgICBleGl0IDEKKyAgZmkKKyAgTElCQloyPSItbGJ6MiIKK2ZpCitBQ19TVUJTVChMSUJCWjIpCisKKyMgU2ltaWxhcmx5IGZvciAtLWVuYWJsZS1wY3JlMnRlc3QtcmVhZGxpbmUKKworaWYgdGVzdCAiJGVuYWJsZV9wY3JlMnRlc3RfbGliZWRpdCIgPSAieWVzIjsgdGhlbgorICBpZiB0ZXN0ICIkZW5hYmxlX3BjcmUydGVzdF9saWJyZWFkbGluZSIgPSAieWVzIjsgdGhlbgorICAgIGVjaG8gIioqIENhbm5vdCB1c2UgYm90aCAtLWVuYWJsZS1wY3JlMnRlc3QtbGliZWRpdCBhbmQgLS1lbmFibGUtcGNyZTJ0ZXN0LXJlYWRsaW5lIgorICAgIGV4aXQgMQorICBmaQorICBpZiB0ZXN0ICIkSEFWRV9FRElUTElORV9SRUFETElORV9IIiAhPSAiMSIgLWEgXAorICAgICAgICAgICIkSEFWRV9SRUFETElORV9SRUFETElORV9IIiAhPSAiMSI7IHRoZW4KKyAgICBlY2hvICIqKiBDYW5ub3QgLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYmVkaXQgYmVjYXVzZSBuZWl0aGVyIGVkaXRsaW5lL3JlYWRsaW5lLmgiCisgICAgZWNobyAiKiogbm9yIHJlYWRsaW5lL3JlYWRsaW5lLmggd2FzIGZvdW5kLiIKKyAgICBleGl0IDEKKyAgZmkKKyAgaWYgdGVzdCAteiAiJExJQkVESVQiOyB0aGVuCisgICAgZWNobyAiKiogQ2Fubm90IC0tZW5hYmxlLXBjcmUydGVzdC1saWJlZGl0IGJlY2F1c2UgbGliZWRpdCBsaWJyYXJ5IHdhcyBub3QgZm91bmQuIgorICAgIGV4aXQgMQorICBmaQorZmkKKworaWYgdGVzdCAiJGVuYWJsZV9wY3JlMnRlc3RfbGlicmVhZGxpbmUiID0gInllcyI7IHRoZW4KKyAgaWYgdGVzdCAiJEhBVkVfUkVBRExJTkVfSCIgIT0gIjEiOyB0aGVuCisgICAgZWNobyAiKiogQ2Fubm90IC0tZW5hYmxlLXBjcmUydGVzdC1yZWFkbGluZSBiZWNhdXNlIHJlYWRsaW5lL3JlYWRsaW5lLmggd2FzIG5vdCBmb3VuZC4iCisgICAgZXhpdCAxCisgIGZpCisgIGlmIHRlc3QgIiRIQVZFX0hJU1RPUllfSCIgIT0gIjEiOyB0aGVuCisgICAgZWNobyAiKiogQ2Fubm90IC0tZW5hYmxlLXBjcmUydGVzdC1yZWFkbGluZSBiZWNhdXNlIHJlYWRsaW5lL2hpc3RvcnkuaCB3YXMgbm90IGZvdW5kLiIKKyAgICBleGl0IDEKKyAgZmkKKyAgaWYgdGVzdCAteiAiJExJQlJFQURMSU5FIjsgdGhlbgorICAgIGVjaG8gIioqIENhbm5vdCAtLWVuYWJsZS1wY3JlMnRlc3QtcmVhZGxpbmUgYmVjYXVzZSByZWFkbGluZSBsaWJyYXJ5IHdhcyBub3QgZm91bmQuIgorICAgIGV4aXQgMQorICBmaQorZmkKKworIyBIYW5kbGUgdmFsZ3JpbmQgc3VwcG9ydAorCitpZiB0ZXN0ICIkZW5hYmxlX3ZhbGdyaW5kIiA9ICJ5ZXMiOyB0aGVuCisgIG00X2lmZGVmKFtQS0dfQ0hFQ0tfTU9EVUxFU10sCisgICAgICAgICAgIFtQS0dfQ0hFQ0tfTU9EVUxFUyhbVkFMR1JJTkRdLFt2YWxncmluZF0pXSwKKyAgICAgICAgICAgW0FDX01TR19FUlJPUihbcGtnLWNvbmZpZyBub3Qgc3VwcG9ydGVkXSldKQorZmkKKworIyBIYW5kbGUgY29kZSBjb3ZlcmFnZSByZXBvcnRpbmcgc3VwcG9ydAoraWYgdGVzdCAiJGVuYWJsZV9jb3ZlcmFnZSIgPSAieWVzIjsgdGhlbgorICBpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtDb2RlIGNvdmVyYWdlIHJlcG9ydHMgY2FuIG9ubHkgYmUgZ2VuZXJhdGVkIHdoZW4gdXNpbmcgR0NDXSkKKyAgZmkKKworICAjIGNjYWNoZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBnY292CisgIEFDX1BBVEhfUFJPRyhbU0hUT09MXSxbc2h0b29sXSxbZmFsc2VdKQorICBjYXNlIGAkU0hUT09MIHBhdGggJENDYCBpbgorICAgICpjY2FjaGUqKSBjY19jY2FjaGU9eWVzOzsKKyAgICAqKSBjY19jY2FjaGU9bm87OworICBlc2FjCisKKyAgaWYgdGVzdCAiJGNjX2NjYWNoZSIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgLXogIiRDQ0FDSEVfRElTQUJMRSIgLW8gIiRDQ0FDSEVfRElTQUJMRSIgIT0gIjEiOyB0aGVuCisgICAgICBBQ19NU0dfRVJST1IoW211c3QgZXhwb3J0IENDQUNIRV9ESVNBQkxFPTEgdG8gZGlzYWJsZSBjY2FjaGUgZm9yIGNvZGUgY292ZXJhZ2VdKQorICAgIGZpCisgIGZpCisKKyAgQUNfQVJHX1ZBUihbTENPVl0sW3RoZSBsdHAgbGNvdiBwcm9ncmFtXSkKKyAgQUNfUEFUSF9QUk9HKFtMQ09WXSxbbGNvdl0sW2ZhbHNlXSkKKyAgaWYgdGVzdCAieCRMQ09WIiA9ICJ4ZmFsc2UiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtsY292IG5vdCBmb3VuZF0pCisgIGZpCisKKyAgQUNfQVJHX1ZBUihbR0VOSFRNTF0sW3RoZSBsdHAgZ2VuaHRtbCBwcm9ncmFtXSkKKyAgQUNfUEFUSF9QUk9HKFtHRU5IVE1MXSxbZ2VuaHRtbF0sW2ZhbHNlXSkKKyAgaWYgdGVzdCAieCRHRU5IVE1MIiA9ICJ4ZmFsc2UiOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtnZW5odG1sIG5vdCBmb3VuZF0pCisgIGZpCisKKyAgIyBTZXQgZmxhZ3MgbmVlZGVkIGZvciBnY292CisgIEdDT1ZfQ0ZMQUdTPSItTzAgLWdnZGIzIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIKKyAgR0NPVl9DWFhGTEFHUz0iLU8wIC1nZ2RiMyAtZnByb2ZpbGUtYXJjcyAtZnRlc3QtY292ZXJhZ2UiCisgIEdDT1ZfTElCUz0iLWxnY292IgorICBBQ19TVUJTVChbR0NPVl9DRkxBR1NdKQorICBBQ19TVUJTVChbR0NPVl9DWFhGTEFHU10pCisgIEFDX1NVQlNUKFtHQ09WX0xJQlNdKQorZmkgIyBlbmFibGVfY292ZXJhZ2UKKworQU1fQ09ORElUSU9OQUwoW1dJVEhfR0NPVl0sW3Rlc3QgIngkZW5hYmxlX2NvdmVyYWdlIiA9ICJ4eWVzIl0pCisKKyMgUHJvZHVjZSB0aGVzZSBmaWxlcywgaW4gYWRkaXRpb24gdG8gY29uZmlnLmguCitBQ19DT05GSUdfRklMRVMoCisJTWFrZWZpbGUKKwlsaWJwY3JlMi04LnBjCisJbGlicGNyZTItMTYucGMKKwlsaWJwY3JlMi0zMi5wYworCWxpYnBjcmUyLXBvc2l4LnBjCisJcGNyZTItY29uZmlnCisJc3JjL3BjcmUyLmgKKykKKworIyBNYWtlIHRoZSBnZW5lcmF0ZWQgc2NyaXB0IGZpbGVzIGV4ZWN1dGFibGUuCitBQ19DT05GSUdfQ09NTUFORFMoW3NjcmlwdC1jaG1vZF0sIFtjaG1vZCBhK3ggcGNyZTItY29uZmlnXSkKKworIyBNYWtlIHN1cmUgdGhhdCBwY3JlMl9jaGFydGFibGVzLmMgaXMgcmVtb3ZlZCBpbiBjYXNlIHRoZSBtZXRob2QgZm9yCisjIGNyZWF0aW5nIGl0IHdhcyBjaGFuZ2VkIGJ5IHJlY29uZmlndXJhdGlvbi4KK0FDX0NPTkZJR19DT01NQU5EUyhbZGVsZXRlLW9sZC1jaGFydGFibGVzXSwgW3JtIC1mIHBjcmUyX2NoYXJ0YWJsZXMuY10pCisKK0FDX09VVFBVVAorCisjIFByaW50IG91dCBhIG5pY2UgbGl0dGxlIG1lc3NhZ2UgYWZ0ZXIgY29uZmlndXJlIGlzIHJ1biBkaXNwbGF5aW5nIHRoZQorIyBjaG9zZW4gb3B0aW9ucy4KKworZWJjZGljX25sX2NvZGU9bi9hCitpZiB0ZXN0ICIkZW5hYmxlX2ViY2RpY19ubDI1IiA9ICJ5ZXMiOyB0aGVuCisgIGViY2RpY19ubF9jb2RlPTB4MjUKK2VsaWYgdGVzdCAiJGVuYWJsZV9lYmNkaWMiID0gInllcyI7IHRoZW4KKyAgZWJjZGljX25sX2NvZGU9MHgxNQorZmkKKworY2F0IDw8RU9GCisKKyRQQUNLQUdFLSRWRVJTSU9OIGNvbmZpZ3VyYXRpb24gc3VtbWFyeToKKworICAgIEluc3RhbGwgcHJlZml4IC4uLi4uLi4uLi4uLi4uLi4uLiA6ICR7cHJlZml4fQorICAgIEMgcHJlcHJvY2Vzc29yIC4uLi4uLi4uLi4uLi4uLi4uLiA6ICR7Q1BQfQorICAgIEMgY29tcGlsZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA6ICR7Q0N9CisgICAgTGlua2VyIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDogJHtMRH0KKyAgICBDIHByZXByb2Nlc3NvciBmbGFncyAuLi4uLi4uLi4uLi4gOiAke0NQUEZMQUdTfQorICAgIEMgY29tcGlsZXIgZmxhZ3MgLi4uLi4uLi4uLi4uLi4uLiA6ICR7Q0ZMQUdTfSAke1ZJU0lCSUxJVFlfQ0ZMQUdTfQorICAgIExpbmtlciBmbGFncyAuLi4uLi4uLi4uLi4uLi4uLi4uLiA6ICR7TERGTEFHU30KKyAgICBFeHRyYSBsaWJyYXJpZXMgLi4uLi4uLi4uLi4uLi4uLi4gOiAke0xJQlN9CisKKyAgICBCdWlsZCA4LWJpdCBwY3JlMiBsaWJyYXJ5IC4uLi4uLi4gOiAke2VuYWJsZV9wY3JlMl84fQorICAgIEJ1aWxkIDE2LWJpdCBwY3JlMiBsaWJyYXJ5IC4uLi4uLiA6ICR7ZW5hYmxlX3BjcmUyXzE2fQorICAgIEJ1aWxkIDMyLWJpdCBwY3JlMiBsaWJyYXJ5IC4uLi4uLiA6ICR7ZW5hYmxlX3BjcmUyXzMyfQorICAgIEluY2x1ZGUgZGVidWdnaW5nIGNvZGUgLi4uLi4uLi4uLiA6ICR7ZW5hYmxlX2RlYnVnfQorICAgIEVuYWJsZSBKSVQgY29tcGlsaW5nIHN1cHBvcnQgLi4uLiA6ICR7ZW5hYmxlX2ppdH0KKyAgICBFbmFibGUgVW5pY29kZSBzdXBwb3J0IC4uLi4uLi4uLi4gOiAke2VuYWJsZV91bmljb2RlfQorICAgIE5ld2xpbmUgY2hhci9zZXF1ZW5jZSAuLi4uLi4uLi4uLiA6ICR7ZW5hYmxlX25ld2xpbmV9CisgICAgXFIgbWF0Y2hlcyBvbmx5IEFOWUNSTEYgLi4uLi4uLi4uIDogJHtlbmFibGVfYnNyX2FueWNybGZ9CisgICAgXEMgaXMgZGlzYWJsZWQgLi4uLi4uLi4uLi4uLi4uLi4uIDogJHtlbmFibGVfbmV2ZXJfYmFja3NsYXNoX0N9CisgICAgRUJDRElDIGNvZGluZyAuLi4uLi4uLi4uLi4uLi4uLi4uIDogJHtlbmFibGVfZWJjZGljfQorICAgIEVCQ0RJQyBjb2RlIGZvciBOTCAuLi4uLi4uLi4uLi4uLiA6ICR7ZWJjZGljX25sX2NvZGV9CisgICAgUmVidWlsZCBjaGFyIHRhYmxlcyAuLi4uLi4uLi4uLi4uIDogJHtlbmFibGVfcmVidWlsZF9jaGFydGFibGVzfQorICAgIFVzZSBzdGFjayByZWN1cnNpb24gLi4uLi4uLi4uLi4uLiA6ICR7ZW5hYmxlX3N0YWNrX2Zvcl9yZWN1cnNpb259CisgICAgSW50ZXJuYWwgbGluayBzaXplIC4uLi4uLi4uLi4uLi4uIDogJHt3aXRoX2xpbmtfc2l6ZX0KKyAgICBOZXN0ZWQgcGFyZW50aGVzZXMgbGltaXQgLi4uLi4uLi4gOiAke3dpdGhfcGFyZW5zX25lc3RfbGltaXR9CisgICAgTWF0Y2ggbGltaXQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDogJHt3aXRoX21hdGNoX2xpbWl0fQorICAgIE1hdGNoIGxpbWl0IHJlY3Vyc2lvbiAuLi4uLi4uLi4uLiA6ICR7d2l0aF9tYXRjaF9saW1pdF9yZWN1cnNpb259CisgICAgQnVpbGQgc2hhcmVkIGxpYnMgLi4uLi4uLi4uLi4uLi4uIDogJHtlbmFibGVfc2hhcmVkfQorICAgIEJ1aWxkIHN0YXRpYyBsaWJzIC4uLi4uLi4uLi4uLi4uLiA6ICR7ZW5hYmxlX3N0YXRpY30KKyAgICBVc2UgSklUIGluIHBjcmUyZ3JlcCAuLi4uLi4uLi4uLi4gOiAke2VuYWJsZV9wY3JlMmdyZXBfaml0fQorICAgIEJ1ZmZlciBzaXplIGZvciBwY3JlMmdyZXAgLi4uLi4uLiA6ICR7d2l0aF9wY3JlMmdyZXBfYnVmc2l6ZX0KKyAgICBMaW5rIHBjcmUyZ3JlcCB3aXRoIGxpYnogLi4uLi4uLi4gOiAke2VuYWJsZV9wY3JlMmdyZXBfbGlien0KKyAgICBMaW5rIHBjcmUyZ3JlcCB3aXRoIGxpYmJ6MiAuLi4uLi4gOiAke2VuYWJsZV9wY3JlMmdyZXBfbGliYnoyfQorICAgIExpbmsgcGNyZTJ0ZXN0IHdpdGggbGliZWRpdCAuLi4uLiA6ICR7ZW5hYmxlX3BjcmUydGVzdF9saWJlZGl0fQorICAgIExpbmsgcGNyZTJ0ZXN0IHdpdGggbGlicmVhZGxpbmUgLiA6ICR7ZW5hYmxlX3BjcmUydGVzdF9saWJyZWFkbGluZX0KKyAgICBWYWxncmluZCBzdXBwb3J0IC4uLi4uLi4uLi4uLi4uLi4gOiAke2VuYWJsZV92YWxncmluZH0KKyAgICBDb2RlIGNvdmVyYWdlIC4uLi4uLi4uLi4uLi4uLi4uLi4gOiAke2VuYWJsZV9jb3ZlcmFnZX0KKworRU9GCisKK2RubCBlbmQgY29uZmlndXJlLmFjCmRpZmYgLS1naXQgYS9kaXN0Mi9kZXBjb21wIGIvZGlzdDIvZGVwY29tcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYzk4NzEwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZGVwY29tcApAQCAtMCwwICsxLDc5MSBAQAorIyEgL2Jpbi9zaAorIyBkZXBjb21wIC0gY29tcGlsZSBhIHByb2dyYW0gZ2VuZXJhdGluZyBkZXBlbmRlbmNpZXMgYXMgc2lkZS1lZmZlY3RzCisKK3NjcmlwdHZlcnNpb249MjAxMy0wNS0zMC4wNzsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbGV4YW5kcmUgT2xpdmEgPG9saXZhQGRjYy51bmljYW1wLmJyPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSAnJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICBleGl0IDE7CisgICAgOzsKKyAgLWggfCAtLWgqKQorICAgIGNhdCA8PFxFT0YKK1VzYWdlOiBkZXBjb21wIFstLWhlbHBdIFstLXZlcnNpb25dIFBST0dSQU0gW0FSR1NdCisKK1J1biBQUk9HUkFNUyBBUkdTIHRvIGNvbXBpbGUgYSBmaWxlLCBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcworYXMgc2lkZS1lZmZlY3RzLgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXM6CisgIGRlcG1vZGUgICAgIERlcGVuZGVuY3kgdHJhY2tpbmcgbW9kZS4KKyAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSAnUFJPR1JBTVMgQVJHUycuCisgIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSAnUFJPR1JBTVMgQVJHUycuCisgIERFUERJUiAgICAgIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBkZXBlbmRlbmNpZXMuCisgIGRlcGZpbGUgICAgIERlcGVuZGVuY3kgZmlsZSB0byBvdXRwdXQuCisgIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dHRpbmcgZGVwZW5kZW5jaWVzLgorICBsaWJ0b29sICAgICBXaGV0aGVyIGxpYnRvb2wgaXMgdXNlZCAoeWVzL25vKS4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiZGVwY29tcCAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworIyBHZXQgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHBhdGgsIGFuZCBzYXZlIGl0IGluIHRoZQorIyBnbG9iYWwgdmFyaWFibGVzICckZGlyJy4gIE5vdGUgdGhhdCB0aGlzIGRpcmVjdG9yeSBjb21wb25lbnQgd2lsbAorIyBiZSBlaXRoZXIgZW1wdHkgb3IgZW5kaW5nIHdpdGggYSAnLycgY2hhcmFjdGVyLiAgVGhpcyBpcyBkZWxpYmVyYXRlLgorc2V0X2Rpcl9mcm9tICgpCit7CisgIGNhc2UgJDEgaW4KKyAgICAqLyopIGRpcj1gZWNobyAiJDEiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYDs7CisgICAgICAqKSBkaXI9OzsKKyAgZXNhYworfQorCisjIEdldCB0aGUgc3VmZml4LXN0cmlwcGVkIGJhc2VuYW1lIG9mIHRoZSBnaXZlbiBwYXRoLCBhbmQgc2F2ZSBpdCB0aGUKKyMgZ2xvYmFsIHZhcmlhYmxlICckYmFzZScuCitzZXRfYmFzZV9mcm9tICgpCit7CisgIGJhc2U9YGVjaG8gIiQxIiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wuW14uXSokLy8nYAorfQorCisjIElmIG5vIGRlcGVuZGVuY3kgZmlsZSB3YXMgYWN0dWFsbHkgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaW52b2NhdGlvbiwKKyMgd2Ugc3RpbGwgaGF2ZSB0byBjcmVhdGUgYSBkdW1teSBkZXBmaWxlLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUKKyMgTWFrZWZpbGUgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCittYWtlX2R1bW15X2RlcGZpbGUgKCkKK3sKKyAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKK30KKworIyBGYWN0b3Igb3V0IHNvbWUgY29tbW9uIHBvc3QtcHJvY2Vzc2luZyBvZiB0aGUgZ2VuZXJhdGVkIGRlcGZpbGUuCisjIFJlcXVpcmVzIHRoZSBhdXhpbGlhcnkgZ2xvYmFsIHZhcmlhYmxlICckdG1wZGVwZmlsZScgdG8gYmUgc2V0LgorYWl4X3Bvc3RfcHJvY2Vzc19kZXBmaWxlICgpCit7CisgICMgSWYgdGhlIGNvbXBpbGVyIGFjdHVhbGx5IG1hbmFnZWQgdG8gcHJvZHVjZSBhIGRlcGVuZGVuY3kgZmlsZSwKKyAgIyBwb3N0LXByb2Nlc3MgaXQuCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtICdmb28ubzogZGVwZW5kZW5jeS5oJy4KKyAgICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAgICMgICAkb2JqZWN0OiBkZXBlbmRlbmN5LmgKKyAgICAjIGFuZCBvbmUgdG8gc2ltcGx5IG91dHB1dAorICAgICMgICBkZXBlbmRlbmN5Lmg6CisgICAgIyB3aGljaCBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGRlbGV0ZWQtaGVhZGVyIHByb2JsZW0uCisgICAgeyBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiCisgICAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6WyR0YWIgXSosLCIgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiCisgICAgfSA+ICIkZGVwZmlsZSIKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIGVsc2UKKyAgICBtYWtlX2R1bW15X2RlcGZpbGUKKyAgZmkKK30KKworIyBBIHRhYnVsYXRpb24gY2hhcmFjdGVyLgordGFiPScJJworIyBBIG5ld2xpbmUgY2hhcmFjdGVyLgorbmw9JworJworIyBDaGFyYWN0ZXIgcmFuZ2VzIG1pZ2h0IGJlIHByb2JsZW1hdGljIG91dHNpZGUgdGhlIEMgbG9jYWxlLgorIyBUaGVzZSBkZWZpbml0aW9ucyBoZWxwLgordXBwZXI9QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKK2xvd2VyPWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitkaWdpdHM9MDEyMzQ1Njc4OQorYWxwaGE9JHt1cHBlcn0ke2xvd2VyfQorCitpZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KKyAgZWNobyAiZGVwY29tcDogVmFyaWFibGVzIHNvdXJjZSwgb2JqZWN0IGFuZCBkZXBtb2RlIG11c3QgYmUgc2V0IiAxPiYyCisgIGV4aXQgMQorZmkKKworIyBEZXBlbmRlbmNpZXMgZm9yIHN1Yi9iYXIubyBvciBzdWIvYmFyLm9iaiBnbyBpbnRvIHN1Yi8uZGVwcy9iYXIuUG8uCitkZXBmaWxlPSR7ZGVwZmlsZS1gZWNobyAiJG9iamVjdCIgfAorICBzZWQgJ3N8W15cXC9dKiR8JyR7REVQRElSLS5kZXBzfScvJnw7c3xcLlwoW14uXSpcKSR8LlBcMXw7c3xQb2JqJHxQb3wnYH0KK3RtcGRlcGZpbGU9JHt0bXBkZXBmaWxlLWBlY2hvICIkZGVwZmlsZSIgfCBzZWQgJ3MvXC5cKFteLl0qXCkkLy5UXDEvJ2B9CisKK3JtIC1mICIkdG1wZGVwZmlsZSIKKworIyBBdm9pZCBpbnRlcmZlcmVuY2VzIGZyb20gdGhlIGVudmlyb25tZW50LgorZ2NjZmxhZz0gZGFzaG1mbGFnPQorCisjIFNvbWUgbW9kZXMgd29yayBqdXN0IGxpa2Ugb3RoZXIgbW9kZXMsIGJ1dCB1c2UgZGlmZmVyZW50IGZsYWdzLiAgV2UKKyMgcGFyYW1ldGVyaXplIGhlcmUsIGJ1dCBzdGlsbCBsaXN0IHRoZSBtb2RlcyBpbiB0aGUgYmlnIGNhc2UgYmVsb3csCisjIHRvIG1ha2UgZGVwZW5kLm00IGVhc2llciB0byB3cml0ZS4gIE5vdGUgdGhhdCB3ZSAqY2Fubm90KiB1c2UgYSBjYXNlCisjIGhlcmUsIGJlY2F1c2UgdGhpcyBmaWxlIGNhbiBvbmx5IGNvbnRhaW4gb25lIGNhc2Ugc3RhdGVtZW50LgoraWYgdGVzdCAiJGRlcG1vZGUiID0gaHA7IHRoZW4KKyAgIyBIUCBjb21waWxlciB1c2VzIC1NIGFuZCBubyBleHRyYSBhcmcuCisgIGdjY2ZsYWc9LU0KKyAgZGVwbW9kZT1nY2MKK2ZpCisKK2lmIHRlc3QgIiRkZXBtb2RlIiA9IGRhc2hYbXN0ZG91dDsgdGhlbgorICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgIGRhc2htZmxhZz0teE0KKyAgZGVwbW9kZT1kYXNobXN0ZG91dAorZmkKKworY3lncGF0aF91PSJjeWdwYXRoIC11IC1mIC0iCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjbXN5czsgdGhlbgorICAjIFRoaXMgaXMganVzdCBsaWtlIG1zdmlzdWFsY3BwIGJ1dCB3L28gY3lncGF0aCB0cmFuc2xhdGlvbi4KKyAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCisgICMgc2xhc2hlcyB0byBzYXRpc2Z5IGRlcGVuZC5tNAorICBjeWdwYXRoX3U9J3NlZCBzLFxcXFwsLyxnJworICBkZXBtb2RlPW1zdmlzdWFsY3BwCitmaQorCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjN21zeXM7IHRoZW4KKyAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3ZjNyBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCisgICMgSnVzdCBjb252ZXJ0IHRoZSBiYWNrc2xhc2gtZXNjYXBlZCBiYWNrc2xhc2hlcyB0byBzaW5nbGUgZm9yd2FyZAorICAjIHNsYXNoZXMgdG8gc2F0aXNmeSBkZXBlbmQubTQKKyAgY3lncGF0aF91PSdzZWQgcyxcXFxcLC8sZycKKyAgZGVwbW9kZT1tc3ZjNworZmkKKworaWYgdGVzdCAiJGRlcG1vZGUiID0geGxjOyB0aGVuCisgICMgSUJNIEMvQysrIENvbXBpbGVycyB4bGMveGxDIGNhbiBvdXRwdXQgZ2NjLWxpa2UgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbi4KKyAgZ2NjZmxhZz0tcW1ha2VkZXA9Z2NjLC1NRgorICBkZXBtb2RlPWdjYworZmkKKworY2FzZSAiJGRlcG1vZGUiIGluCitnY2MzKQorIyMgZ2NjIDMgaW1wbGVtZW50cyBkZXBlbmRlbmN5IHRyYWNraW5nIHRoYXQgZG9lcyBleGFjdGx5IHdoYXQKKyMjIHdlIHdhbnQuICBZYXkhICBOb3RlOiBmb3Igc29tZSByZWFzb24gbGlidG9vbCAxLjQgZG9lc24ndCBsaWtlCisjIyBpdCBpZiAtTUQgLU1QIGNvbWVzIGFmdGVyIHRoZSAtTUYgc3R1ZmYuICBIbW0uCisjIyBVbmZvcnR1bmF0ZWx5LCBGcmVlQlNEIGM4OSBhY2NlcHRhbmNlIG9mIGZsYWdzIGRlcGVuZHMgdXBvbgorIyMgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCBvcmRlcjsgc28gYWRkIHRoZSBmbGFncyB3aGVyZSB0aGV5CisjIyBhcHBlYXIgaW4gZGVwZW5kMi5hbS4gIE5vdGUgdGhhdCB0aGUgc2xvd2Rvd24gaW5jdXJyZWQgaGVyZQorIyMgYWZmZWN0cyBvbmx5IGNvbmZpZ3VyZTogaW4gbWFrZWZpbGVzLCAlRkFTVERFUCUgc2hvcnRjdXRzIHRoaXMuCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtYykgc2V0IGZub3JkICIkQCIgLU1UICIkb2JqZWN0IiAtTUQgLU1QIC1NRiAiJHRtcGRlcGZpbGUiICIkYXJnIiA7OworICAgICopICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIgOzsKKyAgICBlc2FjCisgICAgc2hpZnQgIyBmbm9yZAorICAgIHNoaWZ0ICMgJGFyZworICBkb25lCisgICIkQCIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgbXYgIiR0bXBkZXBmaWxlIiAiJGRlcGZpbGUiCisgIDs7CisKK2djYykKKyMjIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QganVzdCBjYXRlciB0byBvYnNvc2V0ZSBwcmUtMy54IEdDQyBjb21waWxlcnMuCisjIyBidXQgYWxzbyB0byBpbi11c2UgY29tcGlsZXJzIGxpa2UgSU1CIHhsYy94bEMgYW5kIHRoZSBIUCBDIGNvbXBpbGVyLgorIyMgKHNlZSB0aGUgY29uZGl0aW9uYWwgYXNzaWdubWVudCB0byAkZ2NjZmxhZyBhYm92ZSkuCisjIyBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGdldCBkZXBlbmRlbmN5IG91dHB1dCBmcm9tIGdjYy4gIEhlcmUncworIyMgd2h5IHdlIHBpY2sgdGhpcyByYXRoZXIgb2JzY3VyZSBtZXRob2Q6CisjIyAtIERvbid0IHdhbnQgdG8gdXNlIC1NRCBiZWNhdXNlIHdlJ2QgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuZAorIyMgICB1cCBpbiBhIHN1YmRpci4gIEhhdmluZyB0byByZW5hbWUgYnkgaGFuZCBpcyB1Z2x5LgorIyMgICAoV2UgbWlnaHQgZW5kIHVwIGRvaW5nIHRoaXMgYW55d2F5IHRvIHN1cHBvcnQgb3RoZXIgY29tcGlsZXJzLikKKyMjIC0gVGhlIERFUEVOREVOQ0lFU19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgbWFrZXMgZ2NjIGFjdCBsaWtlCisjIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4gIEFsc28sIGl0IG1pZ2h0IG5vdCBiZQorIyMgICBzdXBwb3J0ZWQgYnkgdGhlIG90aGVyIGNvbXBpbGVycyB3aGljaCB1c2UgdGhlICdnY2MnIGRlcG1vZGUuCisjIyAtIFVzaW5nIC1NIGRpcmVjdGx5IG1lYW5zIHJ1bm5pbmcgdGhlIGNvbXBpbGVyIHR3aWNlIChldmVuIHdvcnNlCisjIyAgIHRoYW4gcmVuYW1pbmcpLgorICBpZiB0ZXN0IC16ICIkZ2NjZmxhZyI7IHRoZW4KKyAgICBnY2NmbGFnPS1NRCwKKyAgZmkKKyAgIiRAIiAtV3AsIiRnY2NmbGFnJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgIyBUaGUgc2Vjb25kIC1lIGV4cHJlc3Npb24gaGFuZGxlcyBET1Mtc3R5bGUgZmlsZSBuYW1lcyB3aXRoIGRyaXZlCisgICMgbGV0dGVycy4KKyAgc2VkIC1lICdzL15bXjpdKjogLyAvJyBcCisgICAgICAtZSAncy9eWyckYWxwaGEnXTpcL1teOl0qOiAvIC8nIDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisjIyBUaGlzIG5leHQgcGllY2Ugb2YgbWFnaWMgYXZvaWRzIHRoZSAiZGVsZXRlZCBoZWFkZXIgZmlsZSIgcHJvYmxlbS4KKyMjIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiBhIGhlYWRlciBmaWxlIHdoaWNoIGFwcGVhcnMgaW4gYSAuUCBmaWxlCisjIyBpcyBkZWxldGVkLCB0aGUgZGVwZW5kZW5jeSBjYXVzZXMgbWFrZSB0byBkaWUgKGJlY2F1c2UgdGhlcmUgaXMKKyMjIHR5cGljYWxseSBubyB3YXkgdG8gcmVidWlsZCB0aGUgaGVhZGVyKS4gIFdlIGF2b2lkIHRoaXMgYnkgYWRkaW5nCisjIyBkdW1teSBkZXBlbmRlbmNpZXMgZm9yIGVhY2ggaGVhZGVyIGZpbGUuICBUb28gYmFkIGdjYyBkb2Vzbid0IGRvCisjIyB0aGlzIGZvciB1cyBkaXJlY3RseS4KKyMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgJzonLiAgT24gdGhlIHRoZW9yeQorIyMgdGhhdCB0aGUgc3BhY2UgbWVhbnMgc29tZXRoaW5nLCB3ZSBhZGQgYSBzcGFjZSB0byB0aGUgb3V0cHV0IGFzCisjIyB3ZWxsLiAgaHAgZGVwbW9kZSBhbHNvIGFkZHMgdGhhdCBzcGFjZSwgYnV0IGFsc28gcHJlZml4ZXMgdGhlIFZQQVRICisjIyB0byB0aGUgb2JqZWN0LiAgVGFrZSBjYXJlIHRvIG5vdCByZXBlYXQgaXQgaW4gdGhlIG91dHB1dC4KKyMjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIEhQVVggMTAuMjAgc2VkIGNhbid0IHByb2Nlc3MgdGhpcyBpbnZvY2F0aW9uCisjIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgInN8Liokb2JqZWN0JHx8IiAtZSAnLzokL2QnIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworc2dpKQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAiJEAiICItV3AsLU1EdXBkYXRlLCR0bXBkZXBmaWxlIgorICBlbHNlCisgICAgIiRAIiAtTUR1cGRhdGUgIiR0bXBkZXBmaWxlIgorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisKKyAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuICAjIHllcywgdGhlIHNvdXJjZWZpbGUgZGVwZW5kIG9uIG90aGVyIGZpbGVzCisgICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCisgICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKKyAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KKyAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOworICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlICcjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAjIGRlcGVuZGVuY3kgbGluZS4KKyAgICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICAgIHwgc2VkIC1lICdzL14uKlwubzovLycgLWUgJ3MvIy4qJC8vJyAtZSAnL14kLyBkJyBcCisgICAgICB8IHRyICIkbmwiICcgJyA+PiAiJGRlcGZpbGUiCisgICAgZWNobyA+PiAiJGRlcGZpbGUiCisgICAgIyBUaGUgc2Vjb25kIHBhc3MgZ2VuZXJhdGVzIGEgZHVtbXkgZW50cnkgZm9yIGVhY2ggaGVhZGVyIGZpbGUuCisgICAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAorICAgICAgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworeGxjKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworYWl4KQorICAjIFRoZSBDIGZvciBBSVggQ29tcGlsZXIgdXNlcyAtTSBhbmQgb3V0cHV0cyB0aGUgZGVwZW5kZW5jaWVzCisgICMgaW4gYSAudSBmaWxlLiAgSW4gb2xkZXIgdmVyc2lvbnMsIHRoaXMgZmlsZSBhbHdheXMgbGl2ZXMgaW4gdGhlCisgICMgY3VycmVudCBkaXJlY3RvcnkuICBBbHNvLCB0aGUgQUlYIGNvbXBpbGVyIHB1dHMgJyRvYmplY3Q6JyBhdCB0aGUKKyAgIyBzdGFydCBvZiBlYWNoIGxpbmU7ICRvYmplY3QgZG9lc24ndCBoYXZlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KKyAgIyBWZXJzaW9uIDYgdXNlcyB0aGUgZGlyZWN0b3J5IGluIGJvdGggY2FzZXMuCisgIHNldF9kaXJfZnJvbSAiJG9iamVjdCIKKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kYmFzZS51CisgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLnUKKyAgICAiJEAiIC1XYywtTQorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS51CisgICAgIiRAIiAtTQorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgIGFpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZQorICA7OworCit0Y2MpCisgICMgdGNjIChUaW55IEMgQ29tcGlsZXIpIHVuZGVyc3RhbmQgJy1NRCAtTUYgZmlsZScgc2luY2UgdmVyc2lvbiAwLjkuMjYKKyAgIyBGSVhNRTogVGhhdCB2ZXJzaW9uIHN0aWxsIHVuZGVyIGRldmVsb3BtZW50IGF0IHRoZSBtb21lbnQgb2Ygd3JpdGluZy4KKyAgIyAgICAgICAgTWFrZSB0aGF0IHRoaXMgc3RhdGVtZW50IHJlbWFpbnMgdHJ1ZSBhbHNvIGZvciBzdGFibGUsIHJlbGVhc2VkCisgICMgICAgICAgIHZlcnNpb25zLgorICAjIEl0IHdpbGwgd3JhcCBsaW5lcyAoZG9lc24ndCBtYXR0ZXIgd2hldGhlciBsb25nIG9yIHNob3J0KSB3aXRoIGEKKyAgIyB0cmFpbGluZyAnXCcsIGFzIGluOgorICAjCisgICMgICBmb28ubyA6IFwKKyAgIyAgICBmb28uYyBcCisgICMgICAgZm9vLmggXAorICAjCisgICMgSXQgd2lsbCBwdXQgYSB0cmFpbGluZyAnXCcgZXZlbiBvbiB0aGUgbGFzdCBsaW5lLCBhbmQgd2lsbCB1c2UgbGVhZGluZworICAjIHNwYWNlcyByYXRoZXIgdGhhbiBsZWFkaW5nIHRhYnMgKGF0IGxlYXN0IHNpbmNlIGl0cyBjb21taXQgMDM5NGNhZjcKKyAgIyAiRW1pdCBzcGFjZXMgZm9yIC1NRCIpLgorICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgICMgRWFjaCBub24tZW1wdHkgbGluZSBpcyBvZiB0aGUgZm9ybSAnZm9vLm8gOiBcJyBvciAnIGRlcC5oIFwnLgorICAjIFdlIGhhdmUgdG8gY2hhbmdlIGxpbmVzIG9mIHRoZSBmaXJzdCBraW5kIHRvICckb2JqZWN0OiBcJy4KKyAgc2VkIC1lICJzfC4qOnwkb2JqZWN0IDp8IiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgQW5kIGZvciBlYWNoIGxpbmUgb2YgdGhlIHNlY29uZCBraW5kLCB3ZSBoYXZlIHRvIGVtaXQgYSAnZGVwLmg6JworICAjIGR1bW15IGRlcGVuZGVuY3ksIHRvIGF2b2lkIHRoZSBkZWxldGVkLWhlYWRlciBwcm9ibGVtLgorICBzZWQgLW4gLWUgJ3N8XiAgKlwoLipcKSAqXFwkfFwxOnxwJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKKyMjIFRoZSBvcmRlciBvZiB0aGlzIG9wdGlvbiBpbiB0aGUgY2FzZSBzdGF0ZW1lbnQgaXMgaW1wb3J0YW50LCBzaW5jZSB0aGUKKyMjIHNoZWxsIGNvZGUgaW4gY29uZmlndXJlIHdpbGwgdHJ5IGVhY2ggb2YgdGhlc2UgZm9ybWF0cyBpbiB0aGUgb3JkZXIKKyMjIGxpc3RlZCBpbiB0aGlzIGZpbGUuICBBIHBsYWluICctTUQnIG9wdGlvbiB3b3VsZCBiZSB1bmRlcnN0b29kIGJ5IG1hbnkKKyMjIGNvbXBpbGVycywgc28gd2UgbXVzdCBlbnN1cmUgdGhpcyBjb21lcyBhZnRlciB0aGUgZ2NjIGFuZCBpY2Mgb3B0aW9ucy4KK3BnY2MpCisgICMgUG9ydGxhbmQncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzICctTUQnLgorICAjIFdpbGwgYWx3YXlzIG91dHB1dCBkZXBzIHRvICdmaWxlLmQnIHdoZXJlIGZpbGUgaXMgdGhlIHJvb3QgbmFtZSBvZiB0aGUKKyAgIyBzb3VyY2UgZmlsZSB1bmRlciBjb21waWxhdGlvbiwgZXZlbiBpZiBmaWxlIHJlc2lkZXMgaW4gYSBzdWJkaXJlY3RvcnkuCisgICMgVGhlIG9iamVjdCBmaWxlIG5hbWUgZG9lcyBub3QgYWZmZWN0IHRoZSBuYW1lIG9mIHRoZSAnLmQnIGZpbGUuCisgICMgcGdjYyAxMC4yIHdpbGwgb3V0cHV0CisgICMgICAgZm9vLm86IHN1Yi9mb28uYyBzdWIvZm9vLmgKKyAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgJ1wnIDoKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIC4uLiBcCisgICMgICAgIHN1Yi9mb28uaCAuLi4gXAorICAjICAgICAuLi4KKyAgc2V0X2Rpcl9mcm9tICIkb2JqZWN0IgorICAjIFVzZSB0aGUgc291cmNlLCBub3QgdGhlIG9iamVjdCwgdG8gZGV0ZXJtaW5lIHRoZSBiYXNlIG5hbWUsIHNpbmNlCisgICMgdGhhdCdzIHNhZGx5IHdoYXQgcGdjYyB3aWxsIGRvIHRvby4KKyAgc2V0X2Jhc2VfZnJvbSAiJHNvdXJjZSIKKyAgdG1wZGVwZmlsZT0kYmFzZS5kCisKKyAgIyBGb3IgcHJvamVjdHMgdGhhdCBidWlsZCB0aGUgc2FtZSBzb3VyY2UgZmlsZSB0d2ljZSBpbnRvIGRpZmZlcmVudCBvYmplY3QKKyAgIyBmaWxlcywgdGhlIHBnY2MgYXBwcm9hY2ggb2YgdXNpbmcgdGhlICpzb3VyY2UqIGZpbGUgcm9vdCBuYW1lIGNhbiBjYXVzZQorICAjIHByb2JsZW1zIGluIHBhcmFsbGVsIGJ1aWxkcy4gIFVzZSBhIGxvY2tpbmcgc3RyYXRlZ3kgdG8gYXZvaWQgc3RvbXBpbmcgb24KKyAgIyB0aGUgc2FtZSAkdG1wZGVwZmlsZS4KKyAgbG9ja2Rpcj0kYmFzZS5kLWxvY2sKKyAgdHJhcCAiCisgICAgZWNobyAnJDA6IGNhdWdodCBzaWduYWwsIGNsZWFuaW5nIHVwLi4uJyA+JjIKKyAgICBybWRpciAnJGxvY2tkaXInCisgICAgZXhpdCAxCisgICIgMSAyIDEzIDE1CisgIG51bXRyaWVzPTEwMAorICBpPSRudW10cmllcworICB3aGlsZSB0ZXN0ICRpIC1ndCAwOyBkbworICAgICMgbWtkaXIgaXMgYSBwb3J0YWJsZSB0ZXN0LWFuZC1zZXQuCisgICAgaWYgbWtkaXIgIiRsb2NrZGlyIiAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIyBUaGlzIHByb2Nlc3MgYWNxdWlyZWQgdGhlIGxvY2suCisgICAgICAiJEAiIC1NRAorICAgICAgc3RhdD0kPworICAgICAgIyBSZWxlYXNlIHRoZSBsb2NrLgorICAgICAgcm1kaXIgIiRsb2NrZGlyIgorICAgICAgYnJlYWsKKyAgICBlbHNlCisgICAgICAjIElmIHRoZSBsb2NrIGlzIGJlaW5nIGhlbGQgYnkgYSBkaWZmZXJlbnQgcHJvY2Vzcywgd2FpdAorICAgICAgIyB1bnRpbCB0aGUgd2lubmluZyBwcm9jZXNzIGlzIGRvbmUgb3Igd2UgdGltZW91dC4KKyAgICAgIHdoaWxlIHRlc3QgLWQgIiRsb2NrZGlyIiAmJiB0ZXN0ICRpIC1ndCAwOyBkbworICAgICAgICBzbGVlcCAxCisgICAgICAgIGk9YGV4cHIgJGkgLSAxYAorICAgICAgZG9uZQorICAgIGZpCisgICAgaT1gZXhwciAkaSAtIDFgCisgIGRvbmUKKyAgdHJhcCAtIDEgMiAxMyAxNQorICBpZiB0ZXN0ICRpIC1sZSAwOyB0aGVuCisgICAgZWNobyAiJDA6IGZhaWxlZCB0byBhY3F1aXJlIGxvY2sgYWZ0ZXIgJG51bXRyaWVzIGF0dGVtcHRzIiA+JjIKKyAgICBlY2hvICIkMDogY2hlY2sgbG9ja2RpciAnJGxvY2tkaXInIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKKworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJywKKyAgIyBvciBgZm9vLm86IGRlcDEuaCBkZXAyLmggXCcsIG9yIGAgZGVwMy5oIGRlcDQuaCBcJy4KKyAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICBzZWQgInMsXlteOl0qOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK2hwMikKKyAgIyBUaGUgImhwIiBzdGFuemEgYWJvdmUgZG9lcyBub3Qgd29yayB3aXRoIGFDQyAoQysrKSBhbmQgSFAncyBpYTY0CisgICMgY29tcGlsZXJzLCB3aGljaCBoYXZlIGludGVncmF0ZWQgcHJlcHJvY2Vzc29ycy4gIFRoZSBjb3JyZWN0IG9wdGlvbgorICAjIHRvIHVzZSB3aXRoIHRoZXNlIGlzICtNYWtlZDsgaXQgd3JpdGVzIGRlcGVuZGVuY2llcyB0byBhIGZpbGUgbmFtZWQKKyAgIyAnZm9vLmQnLCB3aGljaCBsYW5kcyBuZXh0IHRvIHRoZSBvYmplY3QgZmlsZSwgd2hlcmV2ZXIgdGhhdAorICAjIGhhcHBlbnMgdG8gYmUuCisgICMgTXVjaCBvZiB0aGlzIGlzIHNpbWlsYXIgdG8gdGhlIHRydTY0IGNhc2U7IHNlZSBjb21tZW50cyB0aGVyZS4KKyAgc2V0X2Rpcl9mcm9tICAiJG9iamVjdCIKKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2UuZAorICAgICIkQCIgLVdjLCtNYWtlZAorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgICIkQCIgK01ha2VkCisgIGZpCisgIHN0YXQ9JD8KKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgICAjIEFkZCAnZGVwZW5kZW50Lmg6JyBsaW5lcy4KKyAgICBzZWQgLW5lICcyLCR7CisgICAgICAgICAgICAgICBzL14gKi8vCisgICAgICAgICAgICAgICBzLyBcXCokLy8KKyAgICAgICAgICAgICAgIHMvJC86LworICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgIH0nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgbWFrZV9kdW1teV9kZXBmaWxlCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIgIiR0bXBkZXBmaWxlMiIKKyAgOzsKKwordHJ1NjQpCisgICMgVGhlIFRydTY0IGNvbXBpbGVyIHVzZXMgLU1EIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llcyBhcyBhIHNpZGUKKyAgIyBlZmZlY3QuICAnY2MgLU1EIC1vIGZvby5vIC4uLicgcHV0cyB0aGUgZGVwZW5kZW5jaWVzIGludG8gJ2Zvby5vLmQnLgorICAjIEF0IGxlYXN0IG9uIEFscGhhL1JlZGhhdCA2LjEsIENvbXBhcSBDQ0MgVjYuMi01MDQgc2VlbXMgdG8gcHV0CisgICMgZGVwZW5kZW5jaWVzIGluICdmb28uZCcgaW5zdGVhZCwgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vLgorICAjIFN1YmRpcmVjdG9yaWVzIGFyZSByZXNwZWN0ZWQuCisgIHNldF9kaXJfZnJvbSAgIiRvYmplY3QiCisgIHNldF9iYXNlX2Zyb20gIiRvYmplY3QiCisKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIyBMaWJ0b29sIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlCisgICAgIyB0d28gY29tcGlsYXRpb25zIG91dHB1dCBkZXBlbmRlbmNpZXMgaW4gJGRpci5saWJzLyRiYXNlLm8uZCBhbmQKKyAgICAjIGluICRkaXIkYmFzZS5vLmQuICBXZSBoYXZlIHRvIGNoZWNrIGZvciBib3RoIGZpbGVzLCBiZWNhdXNlCisgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgorICAgICMgJGRpciRiYXNlLm8uZCBvdmVyICRkaXIubGlicy8kYmFzZS5vLmQgYmVjYXVzZSB0aGUgbGF0dGVyIGlzCisgICAgIyBhdXRvbWF0aWNhbGx5IGNsZWFuZWQgd2hlbiAubGlicy8gaXMgZGVsZXRlZCwgd2hpbGUgaWdub3JpbmcKKyAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KKyAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2Uuby5kICAgICAgICAgICMgbGlidG9vbCAxLjUKKyAgICB0bXBkZXBmaWxlMj0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgTGlrZXdpc2UuCisgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLmQgICAgICAjIENvbXBhcSBDQ0MgVjYuMi01MDQKKyAgICAiJEAiIC1XYywtTUQKKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAorICAgICIkQCIgLU1ECisgIGZpCisKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgICBleGl0ICRzdGF0CisgIGZpCisKKyAgZm9yIHRtcGRlcGZpbGUgaW4gIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgZG8KKyAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKKyAgZG9uZQorICAjIFNhbWUgcG9zdC1wcm9jZXNzaW5nIHRoYXQgaXMgcmVxdWlyZWQgZm9yIEFJWCBtb2RlLgorICBhaXhfcG9zdF9wcm9jZXNzX2RlcGZpbGUKKyAgOzsKKworbXN2YzcpCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHNob3dJbmNsdWRlcz0tV2MsLXNob3dJbmNsdWRlcworICBlbHNlCisgICAgc2hvd0luY2x1ZGVzPS1zaG93SW5jbHVkZXMKKyAgZmkKKyAgIiRAIiAkc2hvd0luY2x1ZGVzID4gIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGdyZXAgLXYgJ15Ob3RlOiBpbmNsdWRpbmcgZmlsZTogJyAiJHRtcGRlcGZpbGUiCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgICAgZXhpdCAkc3RhdAorICBmaQorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgICMgVGhlIGZpcnN0IHNlZCBwcm9ncmFtIGJlbG93IGV4dHJhY3RzIHRoZSBmaWxlIG5hbWVzIGFuZCBlc2NhcGVzCisgICMgYmFja3NsYXNoZXMgZm9yIGN5Z3BhdGguICBUaGUgc2Vjb25kIHNlZCBwcm9ncmFtIG91dHB1dHMgdGhlIGZpbGUKKyAgIyBuYW1lIHdoZW4gcmVhZGluZywgYnV0IGFsc28gYWNjdW11bGF0ZXMgYWxsIGluY2x1ZGUgZmlsZXMgaW4gdGhlCisgICMgaG9sZCBidWZmZXIgaW4gb3JkZXIgdG8gb3V0cHV0IHRoZW0gYWdhaW4gYXQgdGhlIGVuZC4gIFRoaXMgb25seQorICAjIHdvcmtzIHdpdGggc2VkIGltcGxlbWVudGF0aW9ucyB0aGF0IGNhbiBoYW5kbGUgbGFyZ2UgYnVmZmVycy4KKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAnCisvXk5vdGU6IGluY2x1ZGluZyBmaWxlOiAgKlwoLipcKS8geworICBzLy9cMS8KKyAgcy9cXC9cXFxcL2cKKyAgcAorfScgfCAkY3lncGF0aF91IHwgc29ydCAtdSB8IHNlZCAtbiAnCitzLyAvXFwgL2cKK3MvXCguKlwpLyciJHRhYiInXDEgXFwvcAorcy8uXCguKlwpIFxcL1wxOi8KK0gKKyQgeworICBzLy4qLyciJHRhYiInLworICBHCisgIHAKK30nID4+ICIkZGVwZmlsZSIKKyAgZWNobyA+PiAiJGRlcGZpbGUiICMgbWFrZSBzdXJlIHRoZSBmcmFnbWVudCBkb2Vzbid0IGVuZCB3aXRoIGEgYmFja3NsYXNoCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2Yzdtc3lzKQorICAjIFRoaXMgY2FzZSBleGlzdHMgb25seSB0byBsZXQgZGVwZW5kLm00IGRvIGl0cyB3b3JrLiAgSXQgd29ya3MgYnkKKyAgIyBsb29raW5nIGF0IHRoZSB0ZXh0IG9mIHRoaXMgc2NyaXB0LiAgVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgcnVuLAorICAjIHNpbmNlIGl0IGlzIGNoZWNrZWQgZm9yIGFib3ZlLgorICBleGl0IDEKKyAgOzsKKworI25vc2lkZWVmZmVjdCkKKyAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0CisgICMgZGVwZW5kZW5jeSB0cmFja2luZyBtZWNoYW5pc21zIGZyb20gc2xvd2VyIG9uZXMuCisKK2Rhc2htc3Rkb3V0KQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtby4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAiWCQxIiAhPSAnWC0tbW9kZT1jb21waWxlJzsgZG8KKyAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIHNoaWZ0CisgIGZpCisKKyAgIyBSZW1vdmUgJy1vICRvYmplY3QnLgorICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtbykKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICRvYmplY3QpCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgICBzaGlmdCAjICRhcmcKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgdGVzdCAteiAiJGRhc2htZmxhZyIgJiYgZGFzaG1mbGFnPS1NCisgICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciAnOicKKyAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgorICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzICdjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCAnYycgb3RoZXJ3aXNlLgorICAiJEAiICRkYXNobWZsYWcgfAorICAgIHNlZCAic3xeWyR0YWIgXSpbXjokdGFiIF1bXjpdW146XSo6WyR0YWIgXSp8JG9iamVjdDogfCIgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgc2VkIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICB0ciAnICcgIiRubCIgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitkYXNoWG1zdGRvdXQpCisgICMgVGhpcyBjYXNlIG9ubHkgZXhpc3RzIHRvIHNhdGlzZnkgZGVwZW5kLm00LiAgSXQgaXMgbmV2ZXIgYWN0dWFsbHkKKyAgIyBydW4sIGFzIHRoaXMgbW9kZSBpcyBzcGVjaWFsbHkgcmVjb2duaXplZCBpbiB0aGUgcHJlYW1ibGUuCisgIGV4aXQgMQorICA7OworCittYWtlZGVwZW5kKQorICAiJEAiIHx8IGV4aXQgJD8KKyAgIyBSZW1vdmUgYW55IExpYnRvb2wgY2FsbAorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKyAgIyBYIG1ha2VkZXBlbmQKKyAgc2hpZnQKKyAgY2xlYXJlZD1ubyBlYXQ9bm8KKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGNsZWFyZWQgaW4KKyAgICBubykKKyAgICAgIHNldCAiIjsgc2hpZnQKKyAgICAgIGNsZWFyZWQ9eWVzIDs7CisgICAgZXNhYworICAgIGlmIHRlc3QgJGVhdCA9IHllczsgdGhlbgorICAgICAgZWF0PW5vCisgICAgICBjb250aW51ZQorICAgIGZpCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAtRCp8LUkqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgICMgU3RyaXAgYW55IG9wdGlvbiB0aGF0IG1ha2VkZXBlbmQgbWF5IG5vdCB1bmRlcnN0YW5kLiAgUmVtb3ZlCisgICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgorICAgIC1hcmNoKQorICAgICAgZWF0PXllcyA7OworICAgIC0qfCRvYmplY3QpCisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgZXNhYworICBkb25lCisgIG9ial9zdWZmaXg9YGVjaG8gIiRvYmplY3QiIHwgc2VkICdzL14uKlwuLy4vJ2AKKyAgdG91Y2ggIiR0bXBkZXBmaWxlIgorICAke01BS0VERVBFTkQtbWFrZWRlcGVuZH0gLW8iJG9ial9zdWZmaXgiIC1mIiR0bXBkZXBmaWxlIiAiJEAiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgIyBtYWtlZGVwZW5kIG1heSBwcmVwZW5kIHRoZSBWUEFUSCBmcm9tIHRoZSBzb3VyY2UgZmlsZSBuYW1lIHRvIHRoZSBvYmplY3QuCisgICMgTm8gbmVlZCB0byByZWdleC1lc2NhcGUgJG9iamVjdCwgZXhjZXNzIG1hdGNoaW5nIG9mICcuJyBpcyBoYXJtbGVzcy4KKyAgc2VkICJzfF4uKlwoJG9iamVjdCAqOlwpfFwxfCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoZSBsYXN0IGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgXAorICAgIHwgdHIgJyAnICIkbmwiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUiLmJhaworICA7OworCitjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSAnLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAiJEAiIC1FIFwKKyAgICB8IHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisgICAgICAgICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKKyAgICB8IHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgJy9eJC9kO3MvXiAvLztzLyBcXCQvLztzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbXN2aXN1YWxjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICJYJDEiICE9ICdYLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICBJRlM9IiAiCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICIkYXJnIiBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICItR20ifCIvR20ifCItR2kifCIvR2kifCItWkkifCIvWkkiKQorICAgICAgICBzZXQgZm5vcmQgIiRAIgorICAgICAgICBzaGlmdAorICAgICAgICBzaGlmdAorICAgICAgICA7OworICAgICopCisgICAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgICBzaGlmdAorICAgICAgICBzaGlmdAorICAgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorICAiJEAiIC1FIDI+L2Rldi9udWxsIHwKKyAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjpcMTpwJyB8ICRjeWdwYXRoX3UgfCBzb3J0IC11ID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6JyIkdGFiIidcMSBcXDpwJyA+PiAiJGRlcGZpbGUiCisgIGVjaG8gIiR0YWIiID4+ICIkZGVwZmlsZSIKKyAgc2VkIDwgIiR0bXBkZXBmaWxlIiAtbiAtZSAncyUgJVxcICVnJyAtZSAnL15cKC4qXCkkLyBzOjpcMVw6OnAnID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCittc3ZjbXN5cykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK25vbmUpCisgIGV4ZWMgIiRAIgorICA7OworCisqKQorICBlY2hvICJVbmtub3duIGRlcG1vZGUgJGRlcG1vZGUiIDE+JjIKKyAgZXhpdCAxCisgIDs7Citlc2FjCisKK2V4aXQgMAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvTk9OLUFVVE9UT09MUy1CVUlMRC50eHQgYi9kaXN0Mi9kb2MvaHRtbC9OT04tQVVUT1RPT0xTLUJVSUxELnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWI5MjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvTk9OLUFVVE9UT09MUy1CVUlMRC50eHQKQEAgLTAsMCArMSwzOTIgQEAKK0J1aWxkaW5nIFBDUkUyIHdpdGhvdXQgdXNpbmcgYXV0b3Rvb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGRvY3VtZW50IGhhcyBiZWVuIGNvbnZlcnRlZCBmcm9tIHRoZSBQQ1JFMSBkb2N1bWVudC4gSSBoYXZlIHJlbW92ZWQgYQorbnVtYmVyIG9mIHNlY3Rpb25zIGFib3V0IGJ1aWxkaW5nIGluIHZhcmlvdXMgZW52aXJvbm1lbnRzLCBhcyB0aGV5IGFwcGxpZWQgb25seQordG8gUENSRTEgYW5kIGFyZSBwcm9iYWJseSBvdXQgb2YgZGF0ZS4KKworVGhpcyBkb2N1bWVudCBjb250YWlucyB0aGUgZm9sbG93aW5nIHNlY3Rpb25zOgorCisgIEdlbmVyYWwKKyAgR2VuZXJpYyBpbnN0cnVjdGlvbnMgZm9yIHRoZSBQQ1JFMiBDIGxpYnJhcnkKKyAgU3RhY2sgc2l6ZSBpbiBXaW5kb3dzIGVudmlyb25tZW50cworICBMaW5raW5nIHByb2dyYW1zIGluIFdpbmRvd3MgZW52aXJvbm1lbnRzCisgIENhbGxpbmcgY29udmVudGlvbnMgaW4gV2luZG93cyBlbnZpcm9ubWVudHMKKyAgQ29tbWVudHMgYWJvdXQgV2luMzIgYnVpbGRzCisgIEJ1aWxkaW5nIFBDUkUyIG9uIFdpbmRvd3Mgd2l0aCBDTWFrZQorICBUZXN0aW5nIHdpdGggUnVuVGVzdC5iYXQKKyAgQnVpbGRpbmcgUENSRTIgb24gbmF0aXZlIHovT1MgYW5kIHovVk0KKworCitHRU5FUkFMCisKK1RoZSBiYXNpYyBQQ1JFMiBsaWJyYXJ5IGNvbnNpc3RzIGVudGlyZWx5IG9mIGNvZGUgd3JpdHRlbiBpbiBTdGFuZGFyZCBDLCBhbmQgc28KK3Nob3VsZCBjb21waWxlIHN1Y2Nlc3NmdWxseSBvbiBhbnkgc3lzdGVtIHRoYXQgaGFzIGEgU3RhbmRhcmQgQyBjb21waWxlciBhbmQKK2xpYnJhcnkuCisKK1RoZSBQQ1JFMiBkaXN0cmlidXRpb24gaW5jbHVkZXMgYSAiY29uZmlndXJlIiBmaWxlIGZvciB1c2UgYnkgdGhlCitjb25maWd1cmUvbWFrZSAoYXV0b3Rvb2xzKSBidWlsZCBzeXN0ZW0sIGFzIGZvdW5kIGluIG1hbnkgVW5peC1saWtlCitlbnZpcm9ubWVudHMuIFRoZSBSRUFETUUgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3B0aW9ucyBmb3IKKyJjb25maWd1cmUiLgorCitUaGVyZSBpcyBhbHNvIHN1cHBvcnQgZm9yIENNYWtlLCB3aGljaCBzb21lIHVzZXJzIHByZWZlciwgZXNwZWNpYWxseSBpbiBXaW5kb3dzCitlbnZpcm9ubWVudHMsIHRob3VnaCBpdCBjYW4gYWxzbyBiZSBydW4gaW4gVW5peC1saWtlIGVudmlyb25tZW50cy4gU2VlIHRoZQorc2VjdGlvbiBlbnRpdGxlZCAiQnVpbGRpbmcgUENSRTIgb24gV2luZG93cyB3aXRoIENNYWtlIiBiZWxvdy4KKworVmVyc2lvbnMgb2Ygc3JjL2NvbmZpZy5oIGFuZCBzcmMvcGNyZTIuaCBhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIFBDUkUyIHRhcmJhbGxzCit1bmRlciB0aGUgbmFtZXMgc3JjL2NvbmZpZy5oLmdlbmVyaWMgYW5kIHNyYy9wY3JlMi5oLmdlbmVyaWMuIFRoZXNlIGFyZQorcHJvdmlkZWQgZm9yIHRob3NlIHdobyBidWlsZCBQQ1JFMiB3aXRob3V0IHVzaW5nICJjb25maWd1cmUiIG9yIENNYWtlLiBJZiB5b3UKK3VzZSAiY29uZmlndXJlIiBvciBDTWFrZSwgdGhlIC5nZW5lcmljIHZlcnNpb25zIGFyZSBub3QgdXNlZC4KKworCitHRU5FUklDIElOU1RSVUNUSU9OUyBGT1IgVEhFIFBDUkUyIEMgTElCUkFSWQorCitUaGUgZm9sbG93aW5nIGFyZSBnZW5lcmljIGluc3RydWN0aW9ucyBmb3IgYnVpbGRpbmcgdGhlIFBDUkUyIEMgbGlicmFyeSAiYnkKK2hhbmQiLiBJZiB5b3UgYXJlIGdvaW5nIHRvIHVzZSBDTWFrZSwgdGhpcyBzZWN0aW9uIGRvZXMgbm90IGFwcGx5IHRvIHlvdTsgeW91CitjYW4gc2tpcCBhaGVhZCB0byB0aGUgQ01ha2Ugc2VjdGlvbi4KKworICgxKSBDb3B5IG9yIHJlbmFtZSB0aGUgZmlsZSBzcmMvY29uZmlnLmguZ2VuZXJpYyBhcyBzcmMvY29uZmlnLmgsIGFuZCBlZGl0IHRoZQorICAgICBtYWNybyBzZXR0aW5ncyB0aGF0IGl0IGNvbnRhaW5zIHRvIHdoYXRldmVyIGlzIGFwcHJvcHJpYXRlIGZvciB5b3VyCisgICAgIGVudmlyb25tZW50LiBJbiBwYXJ0aWN1bGFyLCB5b3UgY2FuIGFsdGVyIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBORVdMSU5FCisgICAgIG1hY3JvIHRvIHNwZWNpZnkgd2hhdCBjaGFyYWN0ZXIocykgeW91IHdhbnQgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgbGluZQorICAgICB0ZXJtaW5hdG9ycy4KKworICAgICBXaGVuIHlvdSBjb21waWxlIGFueSBvZiB0aGUgUENSRTIgbW9kdWxlcywgeW91IG11c3Qgc3BlY2lmeQorICAgICAtREhBVkVfQ09ORklHX0ggdG8geW91ciBjb21waWxlciBzbyB0aGF0IHNyYy9jb25maWcuaCBpcyBpbmNsdWRlZCBpbiB0aGUKKyAgICAgc291cmNlcy4KKworICAgICBBbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyBub3QgdG8gZWRpdCBzcmMvY29uZmlnLmgsIGJ1dCB0byB1c2UgLUQgb24gdGhlCisgICAgIGNvbXBpbGVyIGNvbW1hbmQgbGluZSB0byBtYWtlIGFueSBjaGFuZ2VzIHRoYXQgeW91IG5lZWQgdG8gdGhlCisgICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSW4gdGhpcyBjYXNlIC1ESEFWRV9DT05GSUdfSCBtdXN0IG5vdCBiZSBzZXQuCisKKyAgICAgTk9URTogVGhlcmUgaGF2ZSBiZWVuIG9jY2FzaW9ucyB3aGVuIHRoZSB3YXkgaW4gd2hpY2ggY2VydGFpbiBwYXJhbWV0ZXJzCisgICAgIGluIHNyYy9jb25maWcuaCBhcmUgdXNlZCBoYXMgY2hhbmdlZCBiZXR3ZWVuIHJlbGVhc2VzLiAoSW4gdGhlCisgICAgIGNvbmZpZ3VyZS9tYWtlIHdvcmxkLCB0aGlzIGlzIGhhbmRsZWQgYXV0b21hdGljYWxseS4pIFdoZW4gdXBncmFkaW5nIHRvIGEKKyAgICAgbmV3IHJlbGVhc2UsIHlvdSBhcmUgc3Ryb25nbHkgYWR2aXNlZCB0byByZXZpZXcgc3JjL2NvbmZpZy5oLmdlbmVyaWMKKyAgICAgYmVmb3JlIHJlLXVzaW5nIHdoYXQgeW91IGhhZCBwcmV2aW91c2x5LgorCisgKDIpIENvcHkgb3IgcmVuYW1lIHRoZSBmaWxlIHNyYy9wY3JlMi5oLmdlbmVyaWMgYXMgc3JjL3BjcmUyLmguCisKKyAoMykgRUlUSEVSOgorICAgICAgIENvcHkgb3IgcmVuYW1lIGZpbGUgc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0IGFzCisgICAgICAgc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYy4KKworICAgICBPUjoKKyAgICAgICBDb21waWxlIHNyYy9kZnRhYmxlcy5jIGFzIGEgc3RhbmQtYWxvbmUgcHJvZ3JhbSAodXNpbmcgLURIQVZFX0NPTkZJR19ICisgICAgICAgaWYgeW91IGhhdmUgc2V0IHVwIHNyYy9jb25maWcuaCksIGFuZCB0aGVuIHJ1biBpdCB3aXRoIHRoZSBzaW5nbGUKKyAgICAgICBhcmd1bWVudCAic3JjL3BjcmUyX2NoYXJ0YWJsZXMuYyIuIFRoaXMgZ2VuZXJhdGVzIGEgc2V0IG9mIHN0YW5kYXJkCisgICAgICAgY2hhcmFjdGVyIHRhYmxlcyBhbmQgd3JpdGVzIHRoZW0gdG8gdGhhdCBmaWxlLiBUaGUgdGFibGVzIGFyZSBnZW5lcmF0ZWQKKyAgICAgICB1c2luZyB0aGUgZGVmYXVsdCBDIGxvY2FsZSBmb3IgeW91ciBzeXN0ZW0uIElmIHlvdSB3YW50IHRvIHVzZSBhIGxvY2FsZQorICAgICAgIHRoYXQgaXMgc3BlY2lmaWVkIGJ5IExDX3h4eCBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGFkZCB0aGUgLUwgb3B0aW9uIHRvCisgICAgICAgdGhlIGRmdGFibGVzIGNvbW1hbmQuIFlvdSBtdXN0IHVzZSB0aGlzIG1ldGhvZCBpZiB5b3UgYXJlIGJ1aWxkaW5nIG9uIGEKKyAgICAgICBzeXN0ZW0gdGhhdCB1c2VzIEVCQ0RJQyBjb2RlLgorCisgICAgIFRoZSB0YWJsZXMgaW4gc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYyBhcmUgZGVmYXVsdHMuIFRoZSBjYWxsZXIgb2YgUENSRTIgY2FuCisgICAgIHNwZWNpZnkgYWx0ZXJuYXRpdmUgdGFibGVzIGF0IHJ1biB0aW1lLgorCisgKDQpIEZvciBhbiA4LWJpdCBsaWJyYXJ5LCBjb21waWxlIHRoZSBmb2xsb3dpbmcgc291cmNlIGZpbGVzIGZyb20gdGhlIHNyYworICAgICBkaXJlY3RvcnksIHNldHRpbmcgLURQQ1JFMl9DT0RFX1VOSVRfV0lEVEg9OCBhcyBhIGNvbXBpbGVyIG9wdGlvbi4gQWxzbworICAgICBzZXQgLURIQVZFX0NPTkZJR19IIGlmIHlvdSBoYXZlIHNldCB1cCBzcmMvY29uZmlnLmggd2l0aCB5b3VyCisgICAgIGNvbmZpZ3VyYXRpb24sIG9yIGVsc2UgdXNlIG90aGVyIC1EIHNldHRpbmdzIHRvIGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbgorICAgICBhcyByZXF1aXJlZC4KKworICAgICAgIHBjcmUyX2F1dG9fcG9zc2Vzcy5jCisgICAgICAgcGNyZTJfY2hhcnRhYmxlcy5jCisgICAgICAgcGNyZTJfY29tcGlsZS5jCisgICAgICAgcGNyZTJfY29uZmlnLmMKKyAgICAgICBwY3JlMl9jb250ZXh0LmMKKyAgICAgICBwY3JlMl9kZmFfbWF0Y2guYworICAgICAgIHBjcmUyX2Vycm9yLmMKKyAgICAgICBwY3JlMl9maW5kX2JyYWNrZXQuYworICAgICAgIHBjcmUyX2ppdF9jb21waWxlLmMKKyAgICAgICBwY3JlMl9tYWtldGFibGVzLmMKKyAgICAgICBwY3JlMl9tYXRjaC5jCisgICAgICAgcGNyZTJfbWF0Y2hfZGF0YS5jCisgICAgICAgcGNyZTJfbmV3bGluZS5jCisgICAgICAgcGNyZTJfb3JkMnV0Zi5jCisgICAgICAgcGNyZTJfcGF0dGVybl9pbmZvLmMKKyAgICAgICBwY3JlMl9zZXJpYWxpemUuYworICAgICAgIHBjcmUyX3N0cmluZ191dGlscy5jCisgICAgICAgcGNyZTJfc3R1ZHkuYworICAgICAgIHBjcmUyX3N1YnN0aXR1dGUuYworICAgICAgIHBjcmUyX3N1YnN0cmluZy5jCisgICAgICAgcGNyZTJfdGFibGVzLmMKKyAgICAgICBwY3JlMl91Y2QuYworICAgICAgIHBjcmUyX3ZhbGlkX3V0Zi5jCisgICAgICAgcGNyZTJfeGNsYXNzLmMKKworICAgICBNYWtlIHN1cmUgdGhhdCB5b3UgaW5jbHVkZSAtSS4gaW4gdGhlIGNvbXBpbGVyIGNvbW1hbmQgKG9yIGVxdWl2YWxlbnQgZm9yCisgICAgIGFuIHVudXN1YWwgY29tcGlsZXIpIHNvIHRoYXQgYWxsIGluY2x1ZGVkIFBDUkUyIGhlYWRlciBmaWxlcyBhcmUgZmlyc3QKKyAgICAgc291Z2h0IGluIHRoZSBzcmMgZGlyZWN0b3J5IHVuZGVyIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gT3RoZXJ3aXNlIHlvdSBydW4KKyAgICAgdGhlIHJpc2sgb2YgcGlja2luZyB1cCBhIHByZXZpb3VzbHktaW5zdGFsbGVkIGZpbGUgZnJvbSBzb21ld2hlcmUgZWxzZS4KKworICAgICBOb3RlIHRoYXQgeW91IG11c3QgY29tcGlsZSBwY3JlMl9qaXRfY29tcGlsZS5jLCBldmVuIGlmIHlvdSBoYXZlIG5vdAorICAgICBkZWZpbmVkIFNVUFBPUlRfSklUIGluIHNyYy9jb25maWcuaCwgYmVjYXVzZSB3aGVuIEpJVCBzdXBwb3J0IGlzIG5vdAorICAgICBjb25maWd1cmVkLCBkdW1teSBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkLiBXaGVuIEpJVCBzdXBwb3J0IElTIGNvbmZpZ3VyZWQsCisgICAgIHBjcmUyX2NvbXBpbGUuYyAjaW5jbHVkZXMgb3RoZXIgZmlsZXMgZnJvbSB0aGUgc2xqaXQgc3ViZGlyZWN0b3J5LCB3aGVyZQorICAgICB0aGVyZSBzaG91bGQgYmUgMTYgZmlsZXMsIGFsbCBvZiB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoICJzbGppdCIuIEl0IGFsc28KKyAgICAgI2luY2x1ZGVzIHNyYy9wY3JlMl9qaXRfbWF0Y2guYyBhbmQgc3JjL3BjcmUyX2ppdF9taXNjLmMsIHNvIHlvdSBzaG91bGQKKyAgICAgbm90IGNvbXBpbGUgdGhlc2UgeW91cnNlbGYuCisKKyAoNSkgTm93IGxpbmsgYWxsIHRoZSBjb21waWxlZCBjb2RlIGludG8gYW4gb2JqZWN0IGxpYnJhcnkgaW4gd2hpY2hldmVyIGZvcm0KKyAgICAgeW91ciBzeXN0ZW0ga2VlcHMgc3VjaCBsaWJyYXJpZXMuIFRoaXMgaXMgdGhlIGJhc2ljIFBDUkUyIEMgOC1iaXQgbGlicmFyeS4KKyAgICAgSWYgeW91ciBzeXN0ZW0gaGFzIHN0YXRpYyBhbmQgc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSBoYXZlIHRvIGRvIHRoaXMKKyAgICAgb25jZSBmb3IgZWFjaCB0eXBlLgorCisgKDYpIElmIHlvdSB3YW50IHRvIGJ1aWxkIGEgMTYtYml0IGxpYnJhcnkgb3IgMzItYml0IGxpYnJhcnkgKGFzIHdlbGwgYXMsIG9yCisgICAgIGluc3RlYWQgb2YgdGhlIDgtYml0IGxpYnJhcnkpIGp1c3Qgc3VwcGx5IDE2IG9yIDMyIGFzIHRoZSB2YWx1ZSBvZgorICAgICAtRFBDUkUyX0NPREVfVU5JVF9XSURUSCB3aGVuIHlvdSBhcmUgY29tcGlsaW5nLgorCisgKDcpIElmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBQT1NJWCB3cmFwcGVyIGZ1bmN0aW9ucyAod2hpY2ggYXBwbHkgb25seSB0byB0aGUKKyAgICAgOC1iaXQgbGlicmFyeSksIGVuc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBzcmMvcGNyZTJwb3NpeC5oIGZpbGUgYW5kIHRoZW4KKyAgICAgY29tcGlsZSBzcmMvcGNyZTJwb3NpeC5jLiBMaW5rIHRoZSByZXN1bHQgKG9uIGl0cyBvd24pIGFzIHRoZSBwY3JlMnBvc2l4CisgICAgIGxpYnJhcnkuCisKKyAoOCkgVGhlIHBjcmUydGVzdCBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgd2l0aCBhbnkgY29tYmluYXRpb24gb2YgdGhlIDgtYml0LAorICAgICAxNi1iaXQgYW5kIDMyLWJpdCBsaWJyYXJpZXMgKGRlcGVuZGluZyBvbiB3aGF0IHlvdSBzZWxlY3RlZCBpbgorICAgICBzcmMvY29uZmlnLmgpLiBDb21waWxlIHNyYy9wY3JlMnRlc3QuYzsgZG9uJ3QgZm9yZ2V0IC1ESEFWRV9DT05GSUdfSCBpZgorICAgICBuZWNlc3NhcnksIGJ1dCBkbyBOT1QgZGVmaW5lIFBDUkUyX0NPREVfVU5JVF9XSURUSC4gVGhlbiBsaW5rIHdpdGggdGhlCisgICAgIGFwcHJvcHJpYXRlIGxpYnJhcnkvaWVzLiBJZiB5b3UgY29tcGlsZWQgYW4gOC1iaXQgbGlicmFyeSwgcGNyZTJ0ZXN0IGFsc28KKyAgICAgbmVlZHMgdGhlIHBjcmUycG9zaXggd3JhcHBlciBsaWJyYXJ5LgorCisgKDkpIFJ1biBwY3JlMnRlc3Qgb24gdGhlIHRlc3RpbnB1dCBmaWxlcyBpbiB0aGUgdGVzdGRhdGEgZGlyZWN0b3J5LCBhbmQgY2hlY2sKKyAgICAgdGhhdCB0aGUgb3V0cHV0IG1hdGNoZXMgdGhlIGNvcnJlc3BvbmRpbmcgdGVzdG91dHB1dCBmaWxlcy4gVGhlcmUgYXJlCisgICAgIGNvbW1lbnRzIGFib3V0IHdoYXQgZWFjaCB0ZXN0IGRvZXMgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIlRlc3RpbmcgUENSRTIiCisgICAgIGluIHRoZSBSRUFETUUgZmlsZS4gSWYgeW91IGNvbXBpbGVkIG1vcmUgdGhhbiBvbmUgb2YgdGhlIDgtYml0LCAxNi1iaXQgYW5kCisgICAgIDMyLWJpdCBsaWJyYXJpZXMsIHlvdSBuZWVkIHRvIHJ1biBwY3JlMnRlc3Qgd2l0aCB0aGUgLTE2IG9wdGlvbiB0byBkbworICAgICAxNi1iaXQgdGVzdHMgYW5kIHdpdGggdGhlIC0zMiBvcHRpb24gdG8gZG8gMzItYml0IHRlc3RzLgorCisgICAgIFNvbWUgdGVzdHMgYXJlIHJlbGV2YW50IG9ubHkgd2hlbiBjZXJ0YWluIGJ1aWxkLXRpbWUgb3B0aW9ucyBhcmUgc2VsZWN0ZWQuCisgICAgIEZvciBleGFtcGxlLCB0ZXN0IDQgaXMgZm9yIFVuaWNvZGUgc3VwcG9ydCwgYW5kIHdpbGwgbm90IHJ1biBpZiB5b3UgaGF2ZQorICAgICBidWlsdCBQQ1JFMiB3aXRob3V0IGl0LiBTZWUgdGhlIGNvbW1lbnRzIGF0IHRoZSBzdGFydCBvZiBlYWNoIHRlc3RpbnB1dAorICAgICBmaWxlLiBJZiB5b3UgaGF2ZSBhIHN1aXRhYmxlIFVuaXgtbGlrZSBzaGVsbCwgdGhlIFJ1blRlc3Qgc2NyaXB0IHdpbGwgcnVuCisgICAgIHRoZSBhcHByb3ByaWF0ZSB0ZXN0cyBmb3IgeW91LiBUaGUgY29tbWFuZCAiUnVuVGVzdCBsaXN0IiB3aWxsIG91dHB1dCBhCisgICAgIGxpc3Qgb2YgYWxsIHRoZSB0ZXN0cy4KKworICAgICBOb3RlIHRoYXQgdGhlIHN1cHBsaWVkIGZpbGVzIGFyZSBpbiBVbml4IGZvcm1hdCwgd2l0aCBqdXN0IExGIGNoYXJhY3RlcnMKKyAgICAgYXMgbGluZSB0ZXJtaW5hdG9ycy4gWW91IG1heSBuZWVkIHRvIGVkaXQgdGhlbSB0byBjaGFuZ2UgdGhpcyBpZiB5b3VyCisgICAgIHN5c3RlbSB1c2VzIGEgZGlmZmVyZW50IGNvbnZlbnRpb24uCisKKygxMCkgSWYgeW91IGhhdmUgYnVpbHQgUENSRTIgd2l0aCBTVVBQT1JUX0pJVCwgdGhlIEpJVCBmZWF0dXJlcyBjYW4gYmUgdGVzdGVkCisgICAgIGJ5IHJ1bm5pbmcgcGNyZTJ0ZXN0IHdpdGggdGhlIC1qaXQgb3B0aW9uLiBUaGlzIGlzIGRvbmUgYXV0b21hdGljYWxseSBieQorICAgICB0aGUgUnVuVGVzdCBzY3JpcHQuIFlvdSBtaWdodCBhbHNvIGxpa2UgdG8gYnVpbGQgYW5kIHJ1biB0aGUgZnJlZXN0YW5kaW5nCisgICAgIEpJVCB0ZXN0IHByb2dyYW0sIHNyYy9wY3JlMl9qaXRfdGVzdC5jLgorCisoMTEpIElmIHlvdSB3YW50IHRvIHVzZSB0aGUgcGNyZTJncmVwIGNvbW1hbmQsIGNvbXBpbGUgYW5kIGxpbmsKKyAgICAgc3JjL3BjcmUyZ3JlcC5jOyBpdCB1c2VzIG9ubHkgdGhlIGJhc2ljIDgtYml0IFBDUkUyIGxpYnJhcnkgKGl0IGRvZXMgbm90CisgICAgIG5lZWQgdGhlIHBjcmUycG9zaXggbGlicmFyeSkuCisKKworU1RBQ0sgU0laRSBJTiBXSU5ET1dTIEVOVklST05NRU5UUworCitUaGUgZGVmYXVsdCBwcm9jZXNzb3Igc3RhY2sgc2l6ZSBvZiAxTWIgaW4gc29tZSBXaW5kb3dzIGVudmlyb25tZW50cyBpcyB0b28KK3NtYWxsIGZvciBtYXRjaGluZyBwYXR0ZXJucyB0aGF0IG5lZWQgbXVjaCByZWN1cnNpb24uIEluIHBhcnRpY3VsYXIsIHRlc3QgMiBtYXkKK2ZhaWwgYmVjYXVzZSBvZiB0aGlzLiBOb3JtYWxseSwgcnVubmluZyBvdXQgb2Ygc3RhY2sgY2F1c2VzIGEgY3Jhc2gsIGJ1dCB0aGVyZQoraGF2ZSBiZWVuIGNhc2VzIHdoZXJlIHRoZSB0ZXN0IHByb2dyYW0gaGFzIGp1c3QgZGllZCBzaWxlbnRseS4gU2VlIHlvdXIgbGlua2VyCitkb2N1bWVudGF0aW9uIGZvciBob3cgdG8gaW5jcmVhc2Ugc3RhY2sgc2l6ZSBpZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcy4gSWYgeW91CithcmUgdXNpbmcgQ01ha2UgKHNlZSAiQlVJTERJTkcgUENSRTIgT04gV0lORE9XUyBXSVRIIENNQUtFIiBiZWxvdykgYW5kIHRoZSBnY2MKK2NvbXBpbGVyLCB5b3UgY2FuIGluY3JlYXNlIHRoZSBzdGFjayBzaXplIGZvciBwY3JlMnRlc3QgYW5kIHBjcmUyZ3JlcCBieQorc2V0dGluZyB0aGUgQ01BS0VfRVhFX0xJTktFUl9GTEFHUyB2YXJpYWJsZSB0byAiLVdsLC0tc3RhY2ssODM4ODYwOCIgKGZvcgorZXhhbXBsZSkuIFRoZSBMaW51eCBkZWZhdWx0IG9mIDhNYiBpcyBhIHJlYXNvbmFibGUgY2hvaWNlIGZvciB0aGUgc3RhY2ssIHRob3VnaAorZXZlbiB0aGF0IGNhbiBiZSB0b28gc21hbGwgZm9yIHNvbWUgcGF0dGVybi9zdWJqZWN0IGNvbWJpbmF0aW9ucy4KKworUENSRTIgaGFzIGEgY29tcGlsZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBkaXNhYmxlIHRoZSB1c2Ugb2Ygc3RhY2sgZm9yCityZWN1cnNpb24gc28gdGhhdCBoZWFwIGlzIHVzZWQgaW5zdGVhZC4gSG93ZXZlciwgcGF0dGVybiBtYXRjaGluZyBpcworc2lnbmlmaWNhbnRseSBzbG93ZXIgd2hlbiB0aGlzIGlzIGRvbmUuIFRoZXJlIGlzIG1vcmUgYWJvdXQgc3RhY2sgdXNhZ2UgaW4gdGhlCisicGNyZTJzdGFjayIgZG9jdW1lbnRhdGlvbi4KKworCitMSU5LSU5HIFBST0dSQU1TIElOIFdJTkRPV1MgRU5WSVJPTk1FTlRTCisKK0lmIHlvdSB3YW50IHRvIHN0YXRpY2FsbHkgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhIFBDUkUyIGxpYnJhcnkgaW4gdGhlIGZvcm0gb2YKK2Egbm9uLWRsbCAuYSBmaWxlLCB5b3UgbXVzdCBkZWZpbmUgUENSRTJfU1RBVElDIGJlZm9yZSBpbmNsdWRpbmcgc3JjL3BjcmUyLmguCisKKworQ0FMTElORyBDT05WRU5USU9OUyBJTiBXSU5ET1dTIEVOVklST05NRU5UUworCitJdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIHByb2dyYW1zIHRvIHVzZSBkaWZmZXJlbnQgY2FsbGluZyBjb252ZW50aW9ucyB1c2luZworTVNWQy4gU2VhcmNoIHRoZSB3ZWIgZm9yICJjYWxsaW5nIGNvbnZlbnRpb25zIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gVG8gbWFrZSBpdAorZWFzaWVyIHRvIGNoYW5nZSB0aGUgY2FsbGluZyBjb252ZW50aW9uIGZvciB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25zIGluIHRoZQorUENSRTIgbGlicmFyeSwgdGhlIG1hY3JvIFBDUkUyX0NBTExfQ09OVkVOVElPTiBpcyBwcmVzZW50IGluIGFsbCB0aGUgZXh0ZXJuYWwKK2RlZmluaXRpb25zLiBJdCBjYW4gYmUgc2V0IGV4dGVybmFsbHkgd2hlbiBjb21waWxpbmcgKGUuZy4gaW4gQ0ZMQUdTKS4gSWYgaXQgaXMKK25vdCBzZXQsIGl0IGRlZmF1bHRzIHRvIGVtcHR5OyB0aGUgZGVmYXVsdCBjYWxsaW5nIGNvbnZlbnRpb24gaXMgdGhlbiB1c2VkCisod2hpY2ggaXMgd2hhdCBpcyB3YW50ZWQgbW9zdCBvZiB0aGUgdGltZSkuCisKKworQ09NTUVOVFMgQUJPVVQgV0lOMzIgQlVJTERTIChzZWUgYWxzbyAiQlVJTERJTkcgUENSRTIgT04gV0lORE9XUyBXSVRIIENNQUtFIikKKworVGhlcmUgYXJlIHR3byB3YXlzIG9mIGJ1aWxkaW5nIFBDUkUyIHVzaW5nIHRoZSAiY29uZmlndXJlLCBtYWtlLCBtYWtlIGluc3RhbGwiCitwYXJhZGlnbSBvbiBXaW5kb3dzIHN5c3RlbXM6IHVzaW5nIE1pbkdXIG9yIHVzaW5nIEN5Z3dpbi4gVGhlc2UgYXJlIG5vdCBhdCBhbGwKK3RoZSBzYW1lIHRoaW5nOyB0aGV5IGFyZSBjb21wbGV0ZWx5IGRpZmZlcmVudCBmcm9tIGVhY2ggb3RoZXIuIFRoZXJlIGlzIGFsc28KK3N1cHBvcnQgZm9yIGJ1aWxkaW5nIHVzaW5nIENNYWtlLCB3aGljaCBzb21lIHVzZXJzIGZpbmQgYSBtb3JlIHN0cmFpZ2h0Zm9yd2FyZAord2F5IG9mIGJ1aWxkaW5nIFBDUkUyIHVuZGVyIFdpbmRvd3MuCisKK1RoZSBNaW5HVyBob21lIHBhZ2UgKGh0dHA6Ly93d3cubWluZ3cub3JnLykgc2F5cyB0aGlzOgorCisgIE1pbkdXOiBBIGNvbGxlY3Rpb24gb2YgZnJlZWx5IGF2YWlsYWJsZSBhbmQgZnJlZWx5IGRpc3RyaWJ1dGFibGUgV2luZG93cworICBzcGVjaWZpYyBoZWFkZXIgZmlsZXMgYW5kIGltcG9ydCBsaWJyYXJpZXMgY29tYmluZWQgd2l0aCBHTlUgdG9vbHNldHMgdGhhdAorICBhbGxvdyBvbmUgdG8gcHJvZHVjZSBuYXRpdmUgV2luZG93cyBwcm9ncmFtcyB0aGF0IGRvIG5vdCByZWx5IG9uIGFueQorICAzcmQtcGFydHkgQyBydW50aW1lIERMTHMuCisKK1RoZSBDeWd3aW4gaG9tZSBwYWdlIChodHRwOi8vd3d3LmN5Z3dpbi5jb20vKSBzYXlzIHRoaXM6CisKKyAgQ3lnd2luIGlzIGEgTGludXgtbGlrZSBlbnZpcm9ubWVudCBmb3IgV2luZG93cy4gSXQgY29uc2lzdHMgb2YgdHdvIHBhcnRzOgorCisgIC4gQSBETEwgKGN5Z3dpbjEuZGxsKSB3aGljaCBhY3RzIGFzIGEgTGludXggQVBJIGVtdWxhdGlvbiBsYXllciBwcm92aWRpbmcKKyAgICBzdWJzdGFudGlhbCBMaW51eCBBUEkgZnVuY3Rpb25hbGl0eQorCisgIC4gQSBjb2xsZWN0aW9uIG9mIHRvb2xzIHdoaWNoIHByb3ZpZGUgTGludXggbG9vayBhbmQgZmVlbC4KKworT24gYm90aCBNaW5HVyBhbmQgQ3lnd2luLCBQQ1JFMiBzaG91bGQgYnVpbGQgY29ycmVjdGx5IHVzaW5nOgorCisgIC4vY29uZmlndXJlICYmIG1ha2UgJiYgbWFrZSBpbnN0YWxsCisKK1RoaXMgc2hvdWxkIGNyZWF0ZSB0d28gbGlicmFyaWVzIGNhbGxlZCBsaWJwY3JlMi04IGFuZCBsaWJwY3JlMi1wb3NpeC4gVGhlc2UKK2FyZSBpbmRlcGVuZGVudCBsaWJyYXJpZXM6IHdoZW4geW91IGxpbmsgd2l0aCBsaWJwY3JlMi1wb3NpeCB5b3UgbXVzdCBhbHNvIGxpbmsKK3dpdGggbGlicGNyZTItOCwgd2hpY2ggY29udGFpbnMgdGhlIGJhc2ljIGZ1bmN0aW9ucy4KKworVXNpbmcgQ3lnd2luJ3MgY29tcGlsZXIgZ2VuZXJhdGVzIGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgdGhhdCBkZXBlbmQgb24KK2N5Z3dpbjEuZGxsLiBJZiBhIGxpYnJhcnkgdGhhdCBpcyBnZW5lcmF0ZWQgdGhpcyB3YXkgaXMgZGlzdHJpYnV0ZWQsCitjeWd3aW4xLmRsbCBoYXMgdG8gYmUgZGlzdHJpYnV0ZWQgYXMgd2VsbC4gU2luY2UgY3lnd2luMS5kbGwgaXMgdW5kZXIgdGhlIEdQTAorbGljZW5jZSwgdGhpcyBmb3JjZXMgbm90IG9ubHkgUENSRTIgdG8gYmUgdW5kZXIgdGhlIEdQTCwgYnV0IGFsc28gdGhlIGVudGlyZQorYXBwbGljYXRpb24uIEEgZGlzdHJpYnV0b3Igd2hvIHdhbnRzIHRvIGtlZXAgdGhlaXIgb3duIGNvZGUgcHJvcHJpZXRhcnkgbXVzdAorcHVyY2hhc2UgYW4gYXBwcm9wcmlhdGUgQ3lnd2luIGxpY2VuY2UuCisKK01pbkdXIGhhcyBubyBzdWNoIHJlc3RyaWN0aW9ucy4gVGhlIE1pbkdXIGNvbXBpbGVyIGdlbmVyYXRlcyBhIGxpYnJhcnkgb3IKK2V4ZWN1dGFibGUgdGhhdCBjYW4gcnVuIHN0YW5kYWxvbmUgb24gV2luZG93cyB3aXRob3V0IGFueSB0aGlyZCBwYXJ0eSBkbGwgb3IKK2xpY2Vuc2luZyBpc3N1ZXMuCisKK0J1dCB0aGVyZSBpcyBtb3JlIGNvbXBsaWNhdGlvbjoKKworSWYgYSBDeWd3aW4gdXNlciB1c2VzIHRoZSAtbW5vLWN5Z3dpbiBDeWd3aW4gZ2NjIGZsYWcsIHdoYXQgdGhhdCByZWFsbHkgZG9lcyBpcwordG8gdGVsbCBDeWd3aW4ncyBnY2MgdG8gdXNlIHRoZSBNaW5HVyBnY2MuIEN5Z3dpbidzIGdjYyBpcyBvbmx5IGFjdGluZyBhcyBhCitmcm9udCBlbmQgdG8gTWluR1cncyBnY2MgKGlmIHlvdSBpbnN0YWxsIEN5Z3dpbidzIGdjYywgeW91IGdldCBib3RoIEN5Z3dpbidzCitnY2MgYW5kIE1pbkdXJ3MgZ2NjKS4gU28sIGEgdXNlciBjYW46CisKKy4gQnVpbGQgbmF0aXZlIGJpbmFyaWVzIGJ5IHVzaW5nIE1pbkdXIG9yIGJ5IGdldHRpbmcgQ3lnd2luIGFuZCB1c2luZworICAtbW5vLWN5Z3dpbi4KKworLiBCdWlsZCBiaW5hcmllcyB0aGF0IGRlcGVuZCBvbiBjeWd3aW4xLmRsbCBieSB1c2luZyBDeWd3aW4gd2l0aCB0aGUgbm9ybWFsCisgIGNvbXBpbGVyIGZsYWdzLgorCitUaGUgdGVzdCBmaWxlcyB0aGF0IGFyZSBzdXBwbGllZCB3aXRoIFBDUkUyIGFyZSBpbiBVTklYIGZvcm1hdCwgd2l0aCBMRgorY2hhcmFjdGVycyBhcyBsaW5lIHRlcm1pbmF0b3JzLiBVbmxlc3MgeW91ciBQQ1JFMiBsaWJyYXJ5IHVzZXMgYSBkZWZhdWx0CituZXdsaW5lIG9wdGlvbiB0aGF0IGluY2x1ZGVzIExGIGFzIGEgdmFsaWQgbmV3bGluZSwgaXQgbWF5IGJlIG5lY2Vzc2FyeSB0bworY2hhbmdlIHRoZSBsaW5lIHRlcm1pbmF0b3JzIGluIHRoZSB0ZXN0IGZpbGVzIHRvIGdldCBzb21lIG9mIHRoZSB0ZXN0cyB0byB3b3JrLgorCisKK0JVSUxESU5HIFBDUkUyIE9OIFdJTkRPV1MgV0lUSCBDTUFLRQorCitDTWFrZSBpcyBhbiBhbHRlcm5hdGl2ZSBjb25maWd1cmF0aW9uIGZhY2lsaXR5IHRoYXQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZgorImNvbmZpZ3VyZSIuIENNYWtlIGNyZWF0ZXMgcHJvamVjdCBmaWxlcyAobWFrZSBmaWxlcywgc29sdXRpb24gZmlsZXMsIGV0Yy4pCit0YWlsb3JlZCB0byBudW1lcm91cyBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMsIGluY2x1ZGluZyBWaXN1YWwgU3R1ZGlvLAorQm9ybGFuZCwgTXN5cywgTWluR1csIE5NYWtlLCBhbmQgVW5peC4gSWYgcG9zc2libGUsIHVzZSBzaG9ydCBwYXRocyB3aXRoIG5vCitzcGFjZXMgaW4gdGhlIG5hbWVzIGZvciB5b3VyIENNYWtlIGluc3RhbGxhdGlvbiBhbmQgeW91ciBQQ1JFMiBzb3VyY2UgYW5kIGJ1aWxkCitkaXJlY3Rvcmllcy4KKworVGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgd2VyZSBjb250cmlidXRlZCBieSBhIFBDUkUxIHVzZXIsIGJ1dCB0aGV5IHNob3VsZAorYWxzbyB3b3JrIGZvciBQQ1JFMi4gSWYgdGhleSBhcmUgbm90IGZvbGxvd2VkIGV4YWN0bHksIGVycm9ycyBtYXkgb2NjdXIuIEluIHRoZQorZXZlbnQgdGhhdCBlcnJvcnMgZG8gb2NjdXIsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGRlbGV0ZSB0aGUgQ01ha2UgY2FjaGUKK2JlZm9yZSBhdHRlbXB0aW5nIHRvIHJlcGVhdCB0aGUgQ01ha2UgYnVpbGQgcHJvY2Vzcy4gSW4gdGhlIENNYWtlIEdVSSwgdGhlCitjYWNoZSBjYW4gYmUgZGVsZXRlZCBieSBzZWxlY3RpbmcgIkZpbGUgPiBEZWxldGUgQ2FjaGUiLgorCisxLiAgSW5zdGFsbCB0aGUgbGF0ZXN0IENNYWtlIHZlcnNpb24gYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5jbWFrZS5vcmcvLCBhbmQKKyAgICBlbnN1cmUgdGhhdCBjbWFrZVxiaW4gaXMgb24geW91ciBwYXRoLgorCisyLiAgVW56aXAgKHJldGFpbmluZyBmb2xkZXIgc3RydWN0dXJlKSB0aGUgUENSRTIgc291cmNlIHRyZWUgaW50byBhIHNvdXJjZQorICAgIGRpcmVjdG9yeSBzdWNoIGFzIEM6XHBjcmUyLiBZb3Ugc2hvdWxkIGVuc3VyZSB5b3VyIGxvY2FsIGRhdGUgYW5kIHRpbWUKKyAgICBpcyBub3QgZWFybGllciB0aGFuIHRoZSBmaWxlIGRhdGVzIGluIHlvdXIgc291cmNlIGRpciBpZiB0aGUgcmVsZWFzZSBpcworICAgIHZlcnkgbmV3LgorCiszLiAgQ3JlYXRlIGEgbmV3LCBlbXB0eSBidWlsZCBkaXJlY3RvcnksIHByZWZlcmFibHkgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlCisgICAgc291cmNlIGRpci4gRm9yIGV4YW1wbGUsIEM6XHBjcmUyXHBjcmUyLXh4XGJ1aWxkLgorCis0LiAgUnVuIGNtYWtlLWd1aSBmcm9tIHRoZSBTaGVsbCBlbnZpcm9ybm1lbnQgb2YgeW91ciBidWlsZCB0b29sLCBmb3IgZXhhbXBsZSwKKyAgICBNc3lzIGZvciBNc3lzL01pbkdXIG9yIFZpc3VhbCBTdHVkaW8gQ29tbWFuZCBQcm9tcHQgZm9yIFZDL1ZDKysuIERvIG5vdCB0cnkKKyAgICB0byBzdGFydCBDbWFrZSBmcm9tIHRoZSBXaW5kb3dzIFN0YXJ0IG1lbnUsIGFzIHRoaXMgY2FuIGxlYWQgdG8gZXJyb3JzLgorCis1LiAgRW50ZXIgQzpccGNyZTJccGNyZTIteHggYW5kIEM6XHBjcmUyXHBjcmUyLXh4XGJ1aWxkIGZvciB0aGUgc291cmNlIGFuZAorICAgIGJ1aWxkIGRpcmVjdG9yaWVzLCByZXNwZWN0aXZlbHkuCisKKzYuICBIaXQgdGhlICJDb25maWd1cmUiIGJ1dHRvbi4KKworNy4gIFNlbGVjdCB0aGUgcGFydGljdWxhciBJREUgLyBidWlsZCB0b29sIHRoYXQgeW91IGFyZSB1c2luZyAoVmlzdWFsCisgICAgU3R1ZGlvLCBNU1lTIG1ha2VmaWxlcywgTWluR1cgbWFrZWZpbGVzLCBldGMuKQorCis4LiAgVGhlIEdVSSB3aWxsIHRoZW4gbGlzdCBzZXZlcmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhpcyBpcyB3aGVyZQorICAgIHlvdSBjYW4gZGlzYWJsZSBVbmljb2RlIHN1cHBvcnQgb3Igc2VsZWN0IG90aGVyIFBDUkUyIG9wdGlvbmFsIGZlYXR1cmVzLgorCis5LiAgSGl0ICJDb25maWd1cmUiIGFnYWluLiBUaGUgYWRqYWNlbnQgIkdlbmVyYXRlIiBidXR0b24gc2hvdWxkIG5vdyBiZQorICAgIGFjdGl2ZS4KKworMTAuIEhpdCAiR2VuZXJhdGUiLgorCisxMS4gVGhlIGJ1aWxkIGRpcmVjdG9yeSBzaG91bGQgbm93IGNvbnRhaW4gYSB1c2FibGUgYnVpbGQgc3lzdGVtLCBiZSBpdCBhCisgICAgc29sdXRpb24gZmlsZSBmb3IgVmlzdWFsIFN0dWRpbywgbWFrZWZpbGVzIGZvciBNaW5HVywgZXRjLiBFeGl0IGZyb20KKyAgICBjbWFrZS1ndWkgYW5kIHVzZSB0aGUgZ2VuZXJhdGVkIGJ1aWxkIHN5c3RlbSB3aXRoIHlvdXIgY29tcGlsZXIgb3IgSURFLgorICAgIEUuZy4sIGZvciBNaW5HVyB5b3UgY2FuIHJ1biAibWFrZSIsIG9yIGZvciBWaXN1YWwgU3R1ZGlvLCBvcGVuIHRoZSBQQ1JFMgorICAgIHNvbHV0aW9uLCBzZWxlY3QgdGhlIGRlc2lyZWQgY29uZmlndXJhdGlvbiAoRGVidWcsIG9yIFJlbGVhc2UsIGV0Yy4pIGFuZAorICAgIGJ1aWxkIHRoZSBBTExfQlVJTEQgcHJvamVjdC4KKworMTIuIElmIGR1cmluZyBjb25maWd1cmF0aW9uIHdpdGggY21ha2UtZ3VpIHlvdSd2ZSBlbGVjdGVkIHRvIGJ1aWxkIHRoZSB0ZXN0CisgICAgcHJvZ3JhbXMsIHlvdSBjYW4gZXhlY3V0ZSB0aGVtIGJ5IGJ1aWxkaW5nIHRoZSB0ZXN0IHByb2plY3QuIEUuZy4sIGZvcgorICAgIE1pbkdXOiAibWFrZSB0ZXN0IjsgZm9yIFZpc3VhbCBTdHVkaW8gYnVpbGQgdGhlIFJVTl9URVNUUyBwcm9qZWN0LiBUaGUKKyAgICBtb3N0IHJlY2VudCBidWlsZCBjb25maWd1cmF0aW9uIGlzIHRhcmdldGVkIGJ5IHRoZSB0ZXN0cy4gQSBzdW1tYXJ5IG9mCisgICAgdGVzdCByZXN1bHRzIGlzIHByZXNlbnRlZC4gQ29tcGxldGUgdGVzdCBvdXRwdXQgaXMgc3Vic2VxdWVudGx5CisgICAgYXZhaWxhYmxlIGZvciByZXZpZXcgaW4gVGVzdGluZ1xUZW1wb3JhcnkgdW5kZXIgeW91ciBidWlsZCBkaXIuCisKKworVEVTVElORyBXSVRIIFJVTlRFU1QuQkFUCisKK0lmIGNvbmZpZ3VyZWQgd2l0aCBDTWFrZSwgYnVpbGRpbmcgdGhlIHRlc3QgcHJvamVjdCAoIm1ha2UgdGVzdCIgb3IgYnVpbGRpbmcKK0FMTF9URVNUUyBpbiBWaXN1YWwgU3R1ZGlvKSBjcmVhdGVzIChhbmQgcnVucykgcGNyZTJfdGVzdC5iYXQgKGFuZCBkZXBlbmRpbmcKK29uIHlvdXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwb3NzaWJseSBvdGhlciB0ZXN0IHByb2dyYW1zKSBpbiB0aGUgYnVpbGQKK2RpcmVjdG9yeS4gVGhlIHBjcmUyX3Rlc3QuYmF0IHNjcmlwdCBydW5zIFJ1blRlc3QuYmF0IHdpdGggY29ycmVjdCBzb3VyY2UgYW5kCitleGUgcGF0aHMuCisKK0ZvciBtYW51YWwgdGVzdGluZyB3aXRoIFJ1blRlc3QuYmF0LCBwcm92aWRlZCB0aGUgYnVpbGQgZGlyIGlzIGEgc3ViZGlyZWN0b3J5CitvZiB0aGUgc291cmNlIGRpcmVjdG9yeTogT3BlbiBjb21tYW5kIHNoZWxsIHdpbmRvdy4gQ2hkaXIgdG8gdGhlIGxvY2F0aW9uCitvZiB5b3VyIHBjcmUydGVzdC5leGUgYW5kIHBjcmUyZ3JlcC5leGUgcHJvZ3JhbXMuIENhbGwgUnVuVGVzdC5iYXQgd2l0aAorIi4uXFJ1blRlc3QuQmF0IiBvciAiLi5cLi5cUnVuVGVzdC5iYXQiIGFzIGFwcHJvcHJpYXRlLgorCitUbyBydW4gb25seSBhIHBhcnRpY3VsYXIgdGVzdCB3aXRoIFJ1blRlc3QuQmF0IHByb3ZpZGUgYSB0ZXN0IG51bWJlciBhcmd1bWVudC4KKworT3RoZXJ3aXNlOgorCisxLiBDb3B5IFJ1blRlc3QuYmF0IGludG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBwY3JlMnRlc3QuZXhlIGFuZCBwY3JlMmdyZXAuZXhlCisgICBoYXZlIGJlZW4gY3JlYXRlZC4KKworMi4gRWRpdCBSdW5UZXN0LmJhdCB0byBpbmRlbnRpZnkgdGhlIGZ1bGwgb3IgcmVsYXRpdmUgbG9jYXRpb24gb2YKKyAgIHRoZSBwY3JlMiBzb3VyY2UgKHdoZXJlaW4gd2hpY2ggdGhlIHRlc3RkYXRhIGZvbGRlciByZXNpZGVzKSwgZS5nLjoKKworICAgc2V0IHNyY2Rpcj1DOlxwY3JlMlxwY3JlMi0xMC4wMAorCiszLiBJbiBhIFdpbmRvd3MgY29tbWFuZCBlbnZpcm9ubWVudCwgY2hkaXIgdG8gdGhlIGxvY2F0aW9uIG9mIHlvdXIgYmF0IGFuZAorICAgZXhlIHByb2dyYW1zLgorCis0LiBSdW4gUnVuVGVzdC5iYXQuIFRlc3Qgb3V0cHV0cyB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgY29tcGFyZWQgdG8gZXhwZWN0ZWQKKyAgIHJlc3VsdHMsIGFuZCBkaXNjcmVwYW5jaWVzIHdpbGwgYmUgaWRlbnRpZmllZCBpbiB0aGUgY29uc29sZSBvdXRwdXQuCisKK1RvIGluZGVwZW5kZW50bHkgdGVzdCB0aGUganVzdC1pbi10aW1lIGNvbXBpbGVyLCBydW4gcGNyZTJfaml0X3Rlc3QuZXhlLgorCisKK0JVSUxESU5HIFBDUkUyIE9OIE5BVElWRSBaL09TIEFORCBaL1ZNCisKK3ovT1MgYW5kIHovVk0gYXJlIG9wZXJhdGluZyBzeXN0ZW1zIGZvciBtYWluZnJhbWUgY29tcHV0ZXJzLCBwcm9kdWNlZCBieSBJQk0uCitUaGUgY2hhcmFjdGVyIGNvZGUgdXNlZCBpcyBFQkNESUMsIG5vdCBBU0NJSSBvciBVbmljb2RlLiBJbiB6L09TLCBVTklYIEFQSXMgYW5kCithcHBsaWNhdGlvbnMgY2FuIGJlIHN1cHBvcnRlZCB0aHJvdWdoIFVOSVggU3lzdGVtIFNlcnZpY2VzLCBhbmQgaW4gc3VjaCBhbgorZW52aXJvbm1lbnQgUENSRTIgY2FuIGJlIGJ1aWx0IGluIHRoZSBzYW1lIHdheSBhcyBpbiBvdGhlciBzeXN0ZW1zLiBIb3dldmVyLCBpbgorbmF0aXZlIHovT1MgKHdpdGhvdXQgVU5JWCBTeXN0ZW0gU2VydmljZXMpIGFuZCBpbiB6L1ZNLCBzcGVjaWFsIHBvcnRzIGFyZQorcmVxdWlyZWQuIEZvciBkZXRhaWxzLCBwbGVhc2Ugc2VlIHRoaXMgd2ViIHNpdGU6CisKKyAgaHR0cDovL3d3dy56YWNvbnN1bHRhbnRzLm5ldAorCitUaGUgc2l0ZSBjdXJyZW50bHkgaGFzIHBvcnRzIGZvciBQQ1JFMSByZWxlYXNlcywgYnV0IFBDUkUyIHNob3VsZCBmb2xsb3cgaW4gZHVlCitjb3Vyc2UuCisKK1lvdSBtYXkgYWxzbyBkb3dubG9hZCBQQ1JFMSBmcm9tIFdXVy5DQlRUQVBFLk9SRyzCoGZpbGUgODgyLiBFdmVyeXRoaW5nLCBzb3VyY2UKK2FuZCBleGVjdXRhYmxlLCBpcyBpbiBFQkNESUMgYW5kIG5hdGl2ZSB6L09TIGZpbGUgZm9ybWF0cyBhbmQgdGhpcyBpcyB0aGUKK3JlY29tbWVuZGVkIGRvd25sb2FkIHNpdGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMYXN0IFVwZGF0ZWQ6IDE2IEp1bHkgMjAxNQpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvUkVBRE1FLnR4dCBiL2Rpc3QyL2RvYy9odG1sL1JFQURNRS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhkMmZmZAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL1JFQURNRS50eHQKQEAgLTAsMCArMSw4NDMgQEAKK1JFQURNRSBmaWxlIGZvciBQQ1JFMiAoUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BDUkUyIGlzIGEgcmUtd29ya2luZyBvZiB0aGUgb3JpZ2luYWwgUENSRSBsaWJyYXJ5IHRvIHByb3ZpZGUgYW4gZW50aXJlbHkgbmV3CitBUEkuIFRoZSBsYXRlc3QgcmVsZWFzZSBvZiBQQ1JFMiBpcyBhbHdheXMgYXZhaWxhYmxlIGluIHRocmVlIGFsdGVybmF0aXZlCitmb3JtYXRzIGZyb206CisKKyAgZnRwOi8vZnRwLmNzeC5jYW0uYWMudWsvcHViL3NvZnR3YXJlL3Byb2dyYW1taW5nL3BjcmUvcGNyZTIteHh4LnRhci5negorICBmdHA6Ly9mdHAuY3N4LmNhbS5hYy51ay9wdWIvc29mdHdhcmUvcHJvZ3JhbW1pbmcvcGNyZS9wY3JlMi14eHgudGFyLmJ6MgorICBmdHA6Ly9mdHAuY3N4LmNhbS5hYy51ay9wdWIvc29mdHdhcmUvcHJvZ3JhbW1pbmcvcGNyZS9wY3JlMi14eHguemlwCisKK1RoZXJlIGlzIGEgbWFpbGluZyBsaXN0IGZvciBkaXNjdXNzaW9uIGFib3V0IHRoZSBkZXZlbG9wbWVudCBvZiBQQ1JFIChib3RoIHRoZQorb3JpZ2luYWwgYW5kIG5ldyBBUElzKSBhdCBwY3JlLWRldkBleGltLm9yZy4gWW91IGNhbiBhY2Nlc3MgdGhlIGFyY2hpdmVzIGFuZAorc3Vic2NyaWJlIG9yIG1hbmFnZSB5b3VyIHN1YnNjcmlwdGlvbiBoZXJlOgorCisgICBodHRwczovL2xpc3RzLmV4aW0ub3JnL21haWxtYW4vbGlzdGluZm8vcGNyZS1kZXYKKworUGxlYXNlIHJlYWQgdGhlIE5FV1MgZmlsZSBpZiB5b3UgYXJlIHVwZ3JhZGluZyBmcm9tIGEgcHJldmlvdXMgcmVsZWFzZS4KK1RoZSBjb250ZW50cyBvZiB0aGlzIFJFQURNRSBmaWxlIGFyZToKKworICBUaGUgUENSRTIgQVBJcworICBEb2N1bWVudGF0aW9uIGZvciBQQ1JFMgorICBDb250cmlidXRpb25zIGJ5IHVzZXJzIG9mIFBDUkUyCisgIEJ1aWxkaW5nIFBDUkUyIG9uIG5vbi1Vbml4LWxpa2Ugc3lzdGVtcworICBCdWlsZGluZyBQQ1JFMiB3aXRob3V0IHVzaW5nIGF1dG90b29scworICBCdWlsZGluZyBQQ1JFMiB1c2luZyBhdXRvdG9vbHMKKyAgUmV0cmlldmluZyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCisgIFNoYXJlZCBsaWJyYXJpZXMKKyAgQ3Jvc3MtY29tcGlsaW5nIHVzaW5nIGF1dG90b29scworICBNYWtpbmcgbmV3IHRhcmJhbGxzCisgIFRlc3RpbmcgUENSRTIKKyAgQ2hhcmFjdGVyIHRhYmxlcworICBGaWxlIG1hbmlmZXN0CisKKworVGhlIFBDUkUyIEFQSXMKKy0tLS0tLS0tLS0tLS0tCisKK1BDUkUyIGlzIHdyaXR0ZW4gaW4gQywgYW5kIGl0IGhhcyBpdHMgb3duIEFQSS4gVGhlcmUgYXJlIHRocmVlIHNldHMgb2YKK2Z1bmN0aW9ucywgb25lIGZvciB0aGUgOC1iaXQgbGlicmFyeSwgd2hpY2ggcHJvY2Vzc2VzIHN0cmluZ3Mgb2YgYnl0ZXMsIG9uZSBmb3IKK3RoZSAxNi1iaXQgbGlicmFyeSwgd2hpY2ggcHJvY2Vzc2VzIHN0cmluZ3Mgb2YgMTYtYml0IHZhbHVlcywgYW5kIG9uZSBmb3IgdGhlCiszMi1iaXQgbGlicmFyeSwgd2hpY2ggcHJvY2Vzc2VzIHN0cmluZ3Mgb2YgMzItYml0IHZhbHVlcy4gVGhlcmUgYXJlIG5vIEMrKword3JhcHBlcnMuCisKK1RoZSBkaXN0cmlidXRpb24gZG9lcyBjb250YWluIGEgc2V0IG9mIEMgd3JhcHBlciBmdW5jdGlvbnMgZm9yIHRoZSA4LWJpdAorbGlicmFyeSB0aGF0IGFyZSBiYXNlZCBvbiB0aGUgUE9TSVggcmVndWxhciBleHByZXNzaW9uIEFQSSAoc2VlIHRoZSBwY3JlMnBvc2l4CittYW4gcGFnZSkuIFRoZXNlIGNhbiBiZSBmb3VuZCBpbiBhIGxpYnJhcnkgY2FsbGVkIGxpYnBjcmUycG9zaXguIE5vdGUgdGhhdCB0aGlzCitqdXN0IHByb3ZpZGVzIGEgUE9TSVggY2FsbGluZyBpbnRlcmZhY2UgdG8gUENSRTI7IHRoZSByZWd1bGFyIGV4cHJlc3Npb25zCit0aGVtc2VsdmVzIHN0aWxsIGZvbGxvdyBQZXJsIHN5bnRheCBhbmQgc2VtYW50aWNzLiBUaGUgUE9TSVggQVBJIGlzIHJlc3RyaWN0ZWQsCithbmQgZG9lcyBub3QgZ2l2ZSBmdWxsIGFjY2VzcyB0byBhbGwgb2YgUENSRTIncyBmYWNpbGl0aWVzLgorCitUaGUgaGVhZGVyIGZpbGUgZm9yIHRoZSBQT1NJWC1zdHlsZSBmdW5jdGlvbnMgaXMgY2FsbGVkIHBjcmUycG9zaXguaC4gVGhlCitvZmZpY2lhbCBQT1NJWCBuYW1lIGlzIHJlZ2V4LmgsIGJ1dCBJIGRpZCBub3Qgd2FudCB0byByaXNrIHBvc3NpYmxlIHByb2JsZW1zCit3aXRoIGV4aXN0aW5nIGZpbGVzIG9mIHRoYXQgbmFtZSBieSBkaXN0cmlidXRpbmcgaXQgdGhhdCB3YXkuIFRvIHVzZSBQQ1JFMiB3aXRoCithbiBleGlzdGluZyBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgUE9TSVggQVBJLCBwY3JlMnBvc2l4Lmggd2lsbCBoYXZlIHRvIGJlCityZW5hbWVkIG9yIHBvaW50ZWQgYXQgYnkgYSBsaW5rLgorCitJZiB5b3UgYXJlIHVzaW5nIHRoZSBQT1NJWCBpbnRlcmZhY2UgdG8gUENSRTIgYW5kIHRoZXJlIGlzIGFscmVhZHkgYSBQT1NJWAorcmVnZXggbGlicmFyeSBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0sIGFzIHdlbGwgYXMgd29ycnlpbmcgYWJvdXQgdGhlIHJlZ2V4LmgKK2hlYWRlciBmaWxlIChhcyBtZW50aW9uZWQgYWJvdmUpLCB5b3UgbXVzdCBhbHNvIHRha2UgY2FyZSB3aGVuIGxpbmtpbmcgcHJvZ3JhbXMKK3RvIGVuc3VyZSB0aGF0IHRoZXkgbGluayB3aXRoIFBDUkUyJ3MgbGlicGNyZTJwb3NpeCBsaWJyYXJ5LiBPdGhlcndpc2UgdGhleSBtYXkKK3BpY2sgdXAgdGhlIFBPU0lYIGZ1bmN0aW9ucyBvZiB0aGUgc2FtZSBuYW1lIGZyb20gdGhlIG90aGVyIGxpYnJhcnkuCisKK09uZSB3YXkgb2YgYXZvaWRpbmcgdGhpcyBjb25mdXNpb24gaXMgdG8gY29tcGlsZSBQQ1JFMiB3aXRoIHRoZSBhZGRpdGlvbiBvZgorLURyZWdjb21wPVBDUkUycmVnY29tcCAoYW5kIHNpbWlsYXJseSBmb3IgdGhlIG90aGVyIFBPU0lYIGZ1bmN0aW9ucykgdG8gdGhlCitjb21waWxlciBmbGFncyAoQ0ZMQUdTIGlmIHlvdSBhcmUgdXNpbmcgImNvbmZpZ3VyZSIgLS0gc2VlIGJlbG93KS4gVGhpcyBoYXMgdGhlCitlZmZlY3Qgb2YgcmVuYW1pbmcgdGhlIGZ1bmN0aW9ucyBzbyB0aGF0IHRoZSBuYW1lcyBubyBsb25nZXIgY2xhc2guIE9mIGNvdXJzZSwKK3lvdSBoYXZlIHRvIGRvIHRoZSBzYW1lIHRoaW5nIGZvciB5b3VyIGFwcGxpY2F0aW9ucywgb3Igd3JpdGUgdGhlbSB1c2luZyB0aGUKK25ldyBuYW1lcy4KKworCitEb2N1bWVudGF0aW9uIGZvciBQQ1JFMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91IGluc3RhbGwgUENSRTIgaW4gdGhlIG5vcm1hbCB3YXkgb24gYSBVbml4LWxpa2Ugc3lzdGVtLCB5b3Ugd2lsbCBlbmQgdXAKK3dpdGggYSBzZXQgb2YgbWFuIHBhZ2VzIHdob3NlIG5hbWVzIGFsbCBzdGFydCB3aXRoICJwY3JlMiIuIFRoZSBvbmUgdGhhdCBpcworanVzdCBjYWxsZWQgInBjcmUyIiBsaXN0cyBhbGwgdGhlIG90aGVycy4gSW4gYWRkaXRpb24gdG8gdGhlc2UgbWFuIHBhZ2VzLCB0aGUKK1BDUkUyIGRvY3VtZW50YXRpb24gaXMgc3VwcGxpZWQgaW4gdHdvIG90aGVyIGZvcm1zOgorCisgIDEuIFRoZXJlIGFyZSBmaWxlcyBjYWxsZWQgZG9jL3BjcmUyLnR4dCwgZG9jL3BjcmUyZ3JlcC50eHQsIGFuZAorICAgICBkb2MvcGNyZTJ0ZXN0LnR4dCBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4gVGhlIGZpcnN0IG9mIHRoZXNlIGlzIGEKKyAgICAgY29uY2F0ZW5hdGlvbiBvZiB0aGUgdGV4dCBmb3JtcyBvZiBhbGwgdGhlIHNlY3Rpb24gMyBtYW4gcGFnZXMgZXhjZXB0IHRoZQorICAgICBsaXN0aW5nIG9mIHBjcmUyZGVtby5jIGFuZCB0aG9zZSB0aGF0IHN1bW1hcml6ZSBpbmRpdmlkdWFsIGZ1bmN0aW9ucy4gVGhlCisgICAgIG90aGVyIHR3byBhcmUgdGhlIHRleHQgZm9ybXMgb2YgdGhlIHNlY3Rpb24gMSBtYW4gcGFnZXMgZm9yIHRoZSBwY3JlMmdyZXAKKyAgICAgYW5kIHBjcmUydGVzdCBjb21tYW5kcy4gVGhlc2UgdGV4dCBmb3JtcyBhcmUgcHJvdmlkZWQgZm9yIGVhc2Ugb2Ygc2Nhbm5pbmcKKyAgICAgd2l0aCB0ZXh0IGVkaXRvcnMgb3Igc2ltaWxhciB0b29scy4gVGhleSBhcmUgaW5zdGFsbGVkIGluCisgICAgIDxwcmVmaXg+L3NoYXJlL2RvYy9wY3JlMiwgd2hlcmUgPHByZWZpeD4gaXMgdGhlIGluc3RhbGxhdGlvbiBwcmVmaXgKKyAgICAgKGRlZmF1bHRpbmcgdG8gL3Vzci9sb2NhbCkuCisKKyAgMi4gQSBzZXQgb2YgZmlsZXMgY29udGFpbmluZyBhbGwgdGhlIGRvY3VtZW50YXRpb24gaW4gSFRNTCBmb3JtLCBoeXBlcmxpbmtlZAorICAgICBpbiB2YXJpb3VzIHdheXMsIGFuZCByb290ZWQgaW4gYSBmaWxlIGNhbGxlZCBpbmRleC5odG1sLCBpcyBkaXN0cmlidXRlZCBpbgorICAgICBkb2MvaHRtbCBhbmQgaW5zdGFsbGVkIGluIDxwcmVmaXg+L3NoYXJlL2RvYy9wY3JlMi9odG1sLgorCisKK0J1aWxkaW5nIFBDUkUyIG9uIG5vbi1Vbml4LWxpa2Ugc3lzdGVtcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBhIG5vbi1Vbml4LWxpa2Ugc3lzdGVtLCBwbGVhc2UgcmVhZCB0aGUgY29tbWVudHMgaW4gdGhlIGZpbGUKK05PTi1BVVRPVE9PTFMtQlVJTEQsIHRob3VnaCBpZiB5b3VyIHN5c3RlbSBzdXBwb3J0cyB0aGUgdXNlIG9mICJjb25maWd1cmUiIGFuZAorIm1ha2UiIHlvdSBtYXkgYmUgYWJsZSB0byBidWlsZCBQQ1JFMiB1c2luZyBhdXRvdG9vbHMgaW4gdGhlIHNhbWUgd2F5IGFzIGZvcgorbWFueSBVbml4LWxpa2Ugc3lzdGVtcy4KKworUENSRTIgY2FuIGFsc28gYmUgY29uZmlndXJlZCB1c2luZyBDTWFrZSwgd2hpY2ggY2FuIGJlIHJ1biBpbiB2YXJpb3VzIHdheXMKKyhjb21tYW5kIGxpbmUsIEdVSSwgZXRjKS4gVGhpcyBjcmVhdGVzIE1ha2VmaWxlcywgc29sdXRpb24gZmlsZXMsIGV0Yy4gVGhlIGZpbGUKK05PTi1BVVRPVE9PTFMtQlVJTEQgaGFzIGluZm9ybWF0aW9uIGFib3V0IENNYWtlLgorCitQQ1JFMiBoYXMgYmVlbiBjb21waWxlZCBvbiBtYW55IGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy4gSXQgc2hvdWxkIGJlCitzdHJhaWdodGZvcndhcmQgdG8gYnVpbGQgUENSRTIgb24gYW55IHN5c3RlbSB0aGF0IGhhcyBhIFN0YW5kYXJkIEMgY29tcGlsZXIgYW5kCitsaWJyYXJ5LCBiZWNhdXNlIGl0IHVzZXMgb25seSBTdGFuZGFyZCBDIGZ1bmN0aW9ucy4KKworCitCdWlsZGluZyBQQ1JFMiB3aXRob3V0IHVzaW5nIGF1dG90b29scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHVzZSBvZiBhdXRvdG9vbHMgKGluIHBhcnRpY3VsYXIsIGxpYnRvb2wpIGlzIHByb2JsZW1hdGljIGluIHNvbWUKK2Vudmlyb25tZW50cywgZXZlbiBzb21lIHRoYXQgYXJlIFVuaXggb3IgVW5peC1saWtlLiBTZWUgdGhlIE5PTi1BVVRPVE9PTFMtQlVJTEQKK2ZpbGUgZm9yIHdheXMgb2YgYnVpbGRpbmcgUENSRTIgd2l0aG91dCB1c2luZyBhdXRvdG9vbHMuCisKKworQnVpbGRpbmcgUENSRTIgdXNpbmcgYXV0b3Rvb2xzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbnMgYXNzdW1lIHRoZSB1c2Ugb2YgdGhlIHdpZGVseSB1c2VkICJjb25maWd1cmU7IG1ha2U7CittYWtlIGluc3RhbGwiIChhdXRvdG9vbHMpIHByb2Nlc3MuCisKK1RvIGJ1aWxkIFBDUkUyIG9uIHN5c3RlbSB0aGF0IHN1cHBvcnRzIGF1dG90b29scywgZmlyc3QgcnVuIHRoZSAiY29uZmlndXJlIgorY29tbWFuZCBmcm9tIHRoZSBQQ1JFMiBkaXN0cmlidXRpb24gZGlyZWN0b3J5LCB3aXRoIHlvdXIgY3VycmVudCBkaXJlY3Rvcnkgc2V0Cit0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSB3YW50IHRoZSBmaWxlcyB0byBiZSBjcmVhdGVkLiBUaGlzIGNvbW1hbmQgaXMgYQorc3RhbmRhcmQgR05VICJhdXRvY29uZiIgY29uZmlndXJhdGlvbiBzY3JpcHQsIGZvciB3aGljaCBnZW5lcmljIGluc3RydWN0aW9ucworYXJlIHN1cHBsaWVkIGluIHRoZSBmaWxlIElOU1RBTEwuCisKK01vc3QgY29tbW9ubHksIHBlb3BsZSBidWlsZCBQQ1JFMiB3aXRoaW4gaXRzIG93biBkaXN0cmlidXRpb24gZGlyZWN0b3J5LCBhbmQgaW4KK3RoaXMgY2FzZSwgb24gbWFueSBzeXN0ZW1zLCBqdXN0IHJ1bm5pbmcgIi4vY29uZmlndXJlIiBpcyBzdWZmaWNpZW50LiBIb3dldmVyLAordGhlIHVzdWFsIG1ldGhvZHMgb2YgY2hhbmdpbmcgc3RhbmRhcmQgZGVmYXVsdHMgYXJlIGF2YWlsYWJsZS4gRm9yIGV4YW1wbGU6CisKK0NGTEFHUz0nLU8yIC1XYWxsJyAuL2NvbmZpZ3VyZSAtLXByZWZpeD0vb3B0L2xvY2FsCisKK1RoaXMgY29tbWFuZCBzcGVjaWZpZXMgdGhhdCB0aGUgQyBjb21waWxlciBzaG91bGQgYmUgcnVuIHdpdGggdGhlIGZsYWdzICctTzIKKy1XYWxsJyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0LCBhbmQgdGhhdCAibWFrZSBpbnN0YWxsIiBzaG91bGQgaW5zdGFsbCBQQ1JFMgordW5kZXIgL29wdC9sb2NhbCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IC91c3IvbG9jYWwuCisKK0lmIHlvdSB3YW50IHRvIGJ1aWxkIGluIGEgZGlmZmVyZW50IGRpcmVjdG9yeSwganVzdCBydW4gImNvbmZpZ3VyZSIgd2l0aCB0aGF0CitkaXJlY3RvcnkgYXMgY3VycmVudC4gRm9yIGV4YW1wbGUsIHN1cHBvc2UgeW91IGhhdmUgdW5wYWNrZWQgdGhlIFBDUkUyIHNvdXJjZQoraW50byAvc291cmNlL3BjcmUyL3BjcmUyLXh4eCwgYnV0IHlvdSB3YW50IHRvIGJ1aWxkIGl0IGluCisvYnVpbGQvcGNyZTIvcGNyZTIteHh4OgorCitjZCAvYnVpbGQvcGNyZTIvcGNyZTIteHh4Cisvc291cmNlL3BjcmUyL3BjcmUyLXh4eC9jb25maWd1cmUKKworUENSRTIgaXMgd3JpdHRlbiBpbiBDIGFuZCBpcyBub3JtYWxseSBjb21waWxlZCBhcyBhIEMgbGlicmFyeS4gSG93ZXZlciwgaXQgaXMKK3Bvc3NpYmxlIHRvIGJ1aWxkIGl0IGFzIGEgQysrIGxpYnJhcnksIHRob3VnaCB0aGUgcHJvdmlkZWQgYnVpbGRpbmcgYXBwYXJhdHVzCitkb2VzIG5vdCBoYXZlIGFueSBmZWF0dXJlcyB0byBzdXBwb3J0IHRoaXMuCisKK1RoZXJlIGFyZSBzb21lIG9wdGlvbmFsIGZlYXR1cmVzIHRoYXQgY2FuIGJlIGluY2x1ZGVkIG9yIG9taXR0ZWQgZnJvbSB0aGUgUENSRTIKK2xpYnJhcnkuIFRoZXkgYXJlIGFsc28gZG9jdW1lbnRlZCBpbiB0aGUgcGNyZTJidWlsZCBtYW4gcGFnZS4KKworLiBCeSBkZWZhdWx0LCBib3RoIHNoYXJlZCBhbmQgc3RhdGljIGxpYnJhcmllcyBhcmUgYnVpbHQuIFlvdSBjYW4gY2hhbmdlIHRoaXMKKyAgYnkgYWRkaW5nIG9uZSBvZiB0aGVzZSBvcHRpb25zIHRvIHRoZSAiY29uZmlndXJlIiBjb21tYW5kOgorCisgIC0tZGlzYWJsZS1zaGFyZWQKKyAgLS1kaXNhYmxlLXN0YXRpYworCisgIChTZWUgYWxzbyAiU2hhcmVkIGxpYnJhcmllcyBvbiBVbml4LWxpa2Ugc3lzdGVtcyIgYmVsb3cuKQorCisuIEJ5IGRlZmF1bHQsIG9ubHkgdGhlIDgtYml0IGxpYnJhcnkgaXMgYnVpbHQuIElmIHlvdSBhZGQgLS1lbmFibGUtcGNyZTItMTYgdG8KKyAgdGhlICJjb25maWd1cmUiIGNvbW1hbmQsIHRoZSAxNi1iaXQgbGlicmFyeSBpcyBhbHNvIGJ1aWx0LiBJZiB5b3UgYWRkCisgIC0tZW5hYmxlLXBjcmUyLTMyIHRvIHRoZSAiY29uZmlndXJlIiBjb21tYW5kLCB0aGUgMzItYml0IGxpYnJhcnkgaXMgYWxzbworICBidWlsdC4gSWYgeW91IHdhbnQgb25seSB0aGUgMTYtYml0IG9yIDMyLWJpdCBsaWJyYXJ5LCB1c2UgLS1kaXNhYmxlLXBjcmUyLTgKKyAgdG8gZGlzYWJsZSBidWlsZGluZyB0aGUgOC1iaXQgbGlicmFyeS4KKworLiBJZiB5b3Ugd2FudCB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIGp1c3QtaW4tdGltZSBjb21waWxpbmcsIHdoaWNoIGNhbiBnaXZlCisgIGxhcmdlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBvbiBjZXJ0YWluIHBsYXRmb3JtcywgYWRkIC0tZW5hYmxlLWppdCB0byB0aGUKKyAgImNvbmZpZ3VyZSIgY29tbWFuZC4gVGhpcyBzdXBwb3J0IGlzIGF2YWlsYWJsZSBvbmx5IGZvciBjZXJ0YWluIGhhcmR3YXJlCisgIGFyY2hpdGVjdHVyZXMuIElmIHlvdSB0cnkgdG8gZW5hYmxlIGl0IG9uIGFuIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZSwgdGhlcmUKKyAgd2lsbCBiZSBhIGNvbXBpbGUgdGltZSBlcnJvci4KKworLiBXaGVuIEpJVCBzdXBwb3J0IGlzIGVuYWJsZWQsIHBjcmUyZ3JlcCBhdXRvbWF0aWNhbGx5IG1ha2VzIHVzZSBvZiBpdCwgdW5sZXNzCisgIHlvdSBhZGQgLS1kaXNhYmxlLXBjcmUyZ3JlcC1qaXQgdG8gdGhlICJjb25maWd1cmUiIGNvbW1hbmQuCisKKy4gSWYgeW91IGRvIG5vdCB3YW50IHRvIG1ha2UgdXNlIG9mIHRoZSBzdXBwb3J0IGZvciBVVEYtOCBVbmljb2RlIGNoYXJhY3RlcgorICBzdHJpbmdzIGluIHRoZSA4LWJpdCBsaWJyYXJ5LCBVVEYtMTYgVW5pY29kZSBjaGFyYWN0ZXIgc3RyaW5ncyBpbiB0aGUgMTYtYml0CisgIGxpYnJhcnksIG9yIFVURi0zMiBVbmljb2RlIGNoYXJhY3RlciBzdHJpbmdzIGluIHRoZSAzMi1iaXQgbGlicmFyeSwgeW91IGNhbgorICBhZGQgLS1kaXNhYmxlLXVuaWNvZGUgdG8gdGhlICJjb25maWd1cmUiIGNvbW1hbmQuIFRoaXMgcmVkdWNlcyB0aGUgc2l6ZSBvZgorICB0aGUgbGlicmFyaWVzLiBJdCBpcyBub3QgcG9zc2libGUgdG8gY29uZmlndXJlIG9uZSBsaWJyYXJ5IHdpdGggVW5pY29kZQorICBzdXBwb3J0LCBhbmQgYW5vdGhlciB3aXRob3V0LCBpbiB0aGUgc2FtZSBjb25maWd1cmF0aW9uLgorCisgIFdoZW4gVW5pY29kZSBzdXBwb3J0IGlzIGF2YWlsYWJsZSwgdGhlIHVzZSBvZiBhIFVURiBlbmNvZGluZyBzdGlsbCBoYXMgdG8gYmUKKyAgZW5hYmxlZCBieSBzZXR0aW5nIHRoZSBQQ1JFMl9VVEYgb3B0aW9uIGF0IHJ1biB0aW1lIG9yIHN0YXJ0aW5nIGEgcGF0dGVybgorICB3aXRoICgqVVRGKS4gV2hlbiBQQ1JFMiBpcyBjb21waWxlZCB3aXRoIFVuaWNvZGUgc3VwcG9ydCwgaXRzIGlucHV0IGNhbiBvbmx5CisgIGVpdGhlciBiZSBBU0NJSSBvciBVVEYtOC8xNi8zMiwgZXZlbiB3aGVuIHJ1bm5pbmcgb24gRUJDRElDIHBsYXRmb3Jtcy4gSXQgaXMKKyAgbm90IHBvc3NpYmxlIHRvIHVzZSBib3RoIC0tZW5hYmxlLXVuaWNvZGUgYW5kIC0tZW5hYmxlLWViY2RpYyBhdCB0aGUgc2FtZQorICB0aW1lLgorCisgIEFzIHdlbGwgYXMgc3VwcG9ydGluZyBVVEYgc3RyaW5ncywgVW5pY29kZSBzdXBwb3J0IGluY2x1ZGVzIHN1cHBvcnQgZm9yIHRoZQorICBcUCwgXHAsIGFuZCBcWCBzZXF1ZW5jZXMgdGhhdCByZWNvZ25pemUgVW5pY29kZSBjaGFyYWN0ZXIgcHJvcGVydGllcy4KKyAgSG93ZXZlciwgb25seSB0aGUgYmFzaWMgdHdvLWxldHRlciBwcm9wZXJ0aWVzIHN1Y2ggYXMgTHUgYXJlIHN1cHBvcnRlZC4KKyAgRXNjYXBlIHNlcXVlbmNlcyBzdWNoIGFzIFxkIGFuZCBcdyBpbiBwYXR0ZXJucyBkbyBub3QgYnkgZGVmYXVsdCBtYWtlIHVzZSBvZgorICBVbmljb2RlIHByb3BlcnRpZXMsIGJ1dCBjYW4gYmUgbWFkZSB0byBkbyBzbyBieSBzZXR0aW5nIHRoZSBQQ1JFMl9VQ1Agb3B0aW9uCisgIG9yIHN0YXJ0aW5nIGEgcGF0dGVybiB3aXRoICgqVUNQKS4KKworLiBZb3UgY2FuIGJ1aWxkIFBDUkUyIHRvIHJlY29nbml6ZSBlaXRoZXIgQ1Igb3IgTEYgb3IgdGhlIHNlcXVlbmNlIENSTEYsIG9yIGFueQorICBvZiB0aGUgcHJlY2VkaW5nLCBvciBhbnkgb2YgdGhlIFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZXMsIGFzIGluZGljYXRpbmcgdGhlCisgIGVuZCBvZiBhIGxpbmUuIFdoYXRldmVyIHlvdSBzcGVjaWZ5IGF0IGJ1aWxkIHRpbWUgaXMgdGhlIGRlZmF1bHQ7IHRoZSBjYWxsZXIKKyAgb2YgUENSRTIgY2FuIGNoYW5nZSB0aGUgc2VsZWN0aW9uIGF0IHJ1biB0aW1lLiBUaGUgZGVmYXVsdCBuZXdsaW5lIGluZGljYXRvcgorICBpcyBhIHNpbmdsZSBMRiBjaGFyYWN0ZXIgKHRoZSBVbml4IHN0YW5kYXJkKS4gWW91IGNhbiBzcGVjaWZ5IHRoZSBkZWZhdWx0CisgIG5ld2xpbmUgaW5kaWNhdG9yIGJ5IGFkZGluZyAtLWVuYWJsZS1uZXdsaW5lLWlzLWNyLCAtLWVuYWJsZS1uZXdsaW5lLWlzLWxmLAorICAtLWVuYWJsZS1uZXdsaW5lLWlzLWNybGYsIC0tZW5hYmxlLW5ld2xpbmUtaXMtYW55Y3JsZiwgb3IKKyAgLS1lbmFibGUtbmV3bGluZS1pcy1hbnkgdG8gdGhlICJjb25maWd1cmUiIGNvbW1hbmQsIHJlc3BlY3RpdmVseS4KKworICBJZiB5b3Ugc3BlY2lmeSAtLWVuYWJsZS1uZXdsaW5lLWlzLWNyIG9yIC0tZW5hYmxlLW5ld2xpbmUtaXMtY3JsZiwgc29tZSBvZgorICB0aGUgc3RhbmRhcmQgdGVzdHMgd2lsbCBmYWlsLCBiZWNhdXNlIHRoZSBsaW5lcyBpbiB0aGUgdGVzdCBmaWxlcyBlbmQgd2l0aAorICBMRi4gRXZlbiBpZiB0aGUgZmlsZXMgYXJlIGVkaXRlZCB0byBjaGFuZ2UgdGhlIGxpbmUgZW5kaW5ncywgdGhlcmUgYXJlIGxpa2VseQorICB0byBiZSBzb21lIGZhaWx1cmVzLiBXaXRoIC0tZW5hYmxlLW5ld2xpbmUtaXMtYW55Y3JsZiBvcgorICAtLWVuYWJsZS1uZXdsaW5lLWlzLWFueSwgbWFueSB0ZXN0cyBzaG91bGQgc3VjY2VlZCwgYnV0IHRoZXJlIG1heSBiZSBzb21lCisgIGZhaWx1cmVzLgorCisuIEJ5IGRlZmF1bHQsIHRoZSBzZXF1ZW5jZSBcUiBpbiBhIHBhdHRlcm4gbWF0Y2hlcyBhbnkgVW5pY29kZSBsaW5lIGVuZGluZworICBzZXF1ZW5jZS4gVGhpcyBpcyBpbmRlcGVuZGVudCBvZiB0aGUgb3B0aW9uIHNwZWNpZnlpbmcgd2hhdCBQQ1JFMiBjb25zaWRlcnMKKyAgdG8gYmUgdGhlIGVuZCBvZiBhIGxpbmUgKHNlZSBhYm92ZSkuIEhvd2V2ZXIsIHRoZSBjYWxsZXIgb2YgUENSRTIgY2FuCisgIHJlc3RyaWN0IFxSIHRvIG1hdGNoIG9ubHkgQ1IsIExGLCBvciBDUkxGLiBZb3UgY2FuIG1ha2UgdGhpcyB0aGUgZGVmYXVsdCBieQorICBhZGRpbmcgLS1lbmFibGUtYnNyLWFueWNybGYgdG8gdGhlICJjb25maWd1cmUiIGNvbW1hbmQgKGJzciA9ICJiYWNrc2xhc2ggUiIpLgorCisuIEluIGEgcGF0dGVybiwgdGhlIGVzY2FwZSBzZXF1ZW5jZSBcQyBtYXRjaGVzIGEgc2luZ2xlIGNvZGUgdW5pdCwgZXZlbiBpbiBhCisgIFVURiBtb2RlLiBUaGlzIGNhbiBiZSBkYW5nZXJvdXMgYmVjYXVzZSBpdCBicmVha3MgdXAgbXVsdGktY29kZS11bml0CisgIGNoYXJhY3RlcnMuIFlvdSBjYW4gYnVpbGQgUENSRTIgd2l0aCB0aGUgdXNlIG9mIFxDIHBlcm1hbmVudGx5IGxvY2tlZCBvdXQgYnkKKyAgYWRkaW5nIC0tZW5hYmxlLW5ldmVyLWJhY2tzbGFzaC1DIChub3RlIHRoZSB1cHBlciBjYXNlIEMpIHRvIHRoZSAiY29uZmlndXJlIgorICBjb21tYW5kLiBXaGVuIFxDIGlzIGFsbG93ZWQgYnkgdGhlIGxpYnJhcnksIGluZGl2aWR1YWwgYXBwbGljYXRpb25zIGNhbiBsb2NrCisgIGl0IG91dCBieSBjYWxsaW5nIHBjcmUyX2NvbXBpbGUoKSB3aXRoIHRoZSBQQ1JFMl9ORVZFUl9CQUNLU0xBU0hfQyBvcHRpb24uCisKKy4gUENSRTIgaGFzIGEgY291bnRlciB0aGF0IGxpbWl0cyB0aGUgZGVwdGggb2YgbmVzdGluZyBvZiBwYXJlbnRoZXNlcyBpbiBhCisgIHBhdHRlcm4uIFRoaXMgbGltaXRzIHRoZSBhbW91bnQgb2Ygc3lzdGVtIHN0YWNrIHRoYXQgYSBwYXR0ZXJuIHVzZXMgd2hlbiBpdAorICBpcyBjb21waWxlZC4gVGhlIGRlZmF1bHQgaXMgMjUwLCBidXQgeW91IGNhbiBjaGFuZ2UgaXQgYnkgc2V0dGluZywgZm9yCisgIGV4YW1wbGUsCisKKyAgLS13aXRoLXBhcmVucy1uZXN0LWxpbWl0PTUwMAorCisuIFBDUkUyIGhhcyBhIGNvdW50ZXIgdGhhdCBjYW4gYmUgc2V0IHRvIGxpbWl0IHRoZSBhbW91bnQgb2YgcmVzb3VyY2VzIGl0IHVzZXMKKyAgd2hlbiBtYXRjaGluZyBhIHBhdHRlcm4uIElmIHRoZSBsaW1pdCBpcyBleGNlZWRlZCBkdXJpbmcgYSBtYXRjaCwgdGhlIG1hdGNoCisgIGZhaWxzLiBUaGUgZGVmYXVsdCBpcyB0ZW4gbWlsbGlvbi4gWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgYnkgc2V0dGluZywgZm9yCisgIGV4YW1wbGUsCisKKyAgLS13aXRoLW1hdGNoLWxpbWl0PTUwMDAwMAorCisgIG9uIHRoZSAiY29uZmlndXJlIiBjb21tYW5kLiBUaGlzIGlzIGp1c3QgdGhlIGRlZmF1bHQ7IGluZGl2aWR1YWwgY2FsbHMgdG8KKyAgcGNyZTJfbWF0Y2goKSBjYW4gc3VwcGx5IHRoZWlyIG93biB2YWx1ZS4gVGhlcmUgaXMgbW9yZSBkaXNjdXNzaW9uIG9uIHRoZQorICBwY3JlMmFwaSBtYW4gcGFnZS4KKworLiBUaGVyZSBpcyBhIHNlcGFyYXRlIGNvdW50ZXIgdGhhdCBsaW1pdHMgdGhlIGRlcHRoIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscworICBkdXJpbmcgYSBtYXRjaGluZyBwcm9jZXNzLiBUaGlzIGFsc28gaGFzIGEgZGVmYXVsdCBvZiB0ZW4gbWlsbGlvbiwgd2hpY2ggaXMKKyAgZXNzZW50aWFsbHkgInVubGltaXRlZCIuIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IGJ5IHNldHRpbmcsIGZvciBleGFtcGxlLAorCisgIC0td2l0aC1tYXRjaC1saW1pdC1yZWN1cnNpb249NTAwMDAwCisKKyAgUmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIHVzZSB1cCB0aGUgcnVudGltZSBzdGFjazsgcnVubmluZyBvdXQgb2Ygc3RhY2sgY2FuCisgIGNhdXNlIHByb2dyYW1zIHRvIGNyYXNoIGluIHN0cmFuZ2Ugd2F5cy4gVGhlcmUgaXMgYSBkaXNjdXNzaW9uIGFib3V0IHN0YWNrCisgIHNpemVzIGluIHRoZSBwY3JlMnN0YWNrIG1hbiBwYWdlLgorCisuIEluIHRoZSA4LWJpdCBsaWJyYXJ5LCB0aGUgZGVmYXVsdCBtYXhpbXVtIGNvbXBpbGVkIHBhdHRlcm4gc2l6ZSBpcyBhcm91bmQKKyAgNjRLLiBZb3UgY2FuIGluY3JlYXNlIHRoaXMgYnkgYWRkaW5nIC0td2l0aC1saW5rLXNpemU9MyB0byB0aGUgImNvbmZpZ3VyZSIKKyAgY29tbWFuZC4gUENSRTIgdGhlbiB1c2VzIHRocmVlIGJ5dGVzIGluc3RlYWQgb2YgdHdvIGZvciBvZmZzZXRzIHRvIGRpZmZlcmVudAorICBwYXJ0cyBvZiB0aGUgY29tcGlsZWQgcGF0dGVybi4gSW4gdGhlIDE2LWJpdCBsaWJyYXJ5LCAtLXdpdGgtbGluay1zaXplPTMgaXMKKyAgdGhlIHNhbWUgYXMgLS13aXRoLWxpbmstc2l6ZT00LCB3aGljaCAoaW4gYm90aCBsaWJyYXJpZXMpIHVzZXMgZm91ci1ieXRlCisgIG9mZnNldHMuIEluY3JlYXNpbmcgdGhlIGludGVybmFsIGxpbmsgc2l6ZSByZWR1Y2VzIHBlcmZvcm1hbmNlIGluIHRoZSA4LWJpdAorICBhbmQgMTYtYml0IGxpYnJhcmllcy4gSW4gdGhlIDMyLWJpdCBsaWJyYXJ5LCB0aGUgbGluayBzaXplIHNldHRpbmcgaXMKKyAgaWdub3JlZCwgYXMgNC1ieXRlIG9mZnNldHMgYXJlIGFsd2F5cyB1c2VkLgorCisuIFlvdSBjYW4gYnVpbGQgUENSRTIgc28gdGhhdCBpdHMgaW50ZXJuYWwgbWF0Y2goKSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBmcm9tCisgIHBjcmUyX21hdGNoKCkgZG9lcyBub3QgY2FsbCBpdHNlbGYgcmVjdXJzaXZlbHkuIEluc3RlYWQsIGl0IHVzZXMgbWVtb3J5CisgIGJsb2NrcyBvYnRhaW5lZCBmcm9tIHRoZSBoZWFwIHRvIHNhdmUgZGF0YSB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBzYXZlZCBvbgorICB0aGUgc3RhY2suIFRvIGJ1aWxkIFBDUkUyIGxpa2UgdGhpcywgdXNlCisKKyAgLS1kaXNhYmxlLXN0YWNrLWZvci1yZWN1cnNpb24KKworICBvbiB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZC4gUENSRTIgcnVucyBtb3JlIHNsb3dseSBpbiB0aGlzIG1vZGUsIGJ1dCBpdCBtYXkKKyAgYmUgbmVjZXNzYXJ5IGluIGVudmlyb25tZW50cyB3aXRoIGxpbWl0ZWQgc3RhY2sgc2l6ZXMuIFRoaXMgYXBwbGllcyBvbmx5IHRvCisgIHRoZSBub3JtYWwgZXhlY3V0aW9uIG9mIHRoZSBwY3JlMl9tYXRjaCgpIGZ1bmN0aW9uOyBpZiBKSVQgc3VwcG9ydCBpcyBiZWluZworICBzdWNjZXNzZnVsbHkgdXNlZCwgaXQgaXMgbm90IHJlbGV2YW50LiBFcXVhbGx5LCBpdCBkb2VzIG5vdCBhcHBseSB0bworICBwY3JlMl9kZmFfbWF0Y2goKSwgd2hpY2ggZG9lcyBub3QgdXNlIGRlZXBseSBuZXN0ZWQgcmVjdXJzaW9uLiBUaGVyZSBpcyBhCisgIGRpc2N1c3Npb24gYWJvdXQgc3RhY2sgc2l6ZXMgaW4gdGhlIHBjcmUyc3RhY2sgbWFuIHBhZ2UuCisKKy4gRm9yIHNwZWVkLCBQQ1JFMiB1c2VzIGZvdXIgdGFibGVzIGZvciBtYW5pcHVsYXRpbmcgYW5kIGlkZW50aWZ5aW5nIGNoYXJhY3RlcnMKKyAgd2hvc2UgY29kZSBwb2ludCB2YWx1ZXMgYXJlIGxlc3MgdGhhbiAyNTYuIEJ5IGRlZmF1bHQsIGl0IHVzZXMgYSBzZXQgb2YKKyAgdGFibGVzIGZvciBBU0NJSSBlbmNvZGluZyB0aGF0IGlzIHBhcnQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gSWYgeW91IHNwZWNpZnkKKworICAtLWVuYWJsZS1yZWJ1aWxkLWNoYXJ0YWJsZXMKKworICBhIHByb2dyYW0gY2FsbGVkIGRmdGFibGVzIGlzIGNvbXBpbGVkIGFuZCBydW4gaW4gdGhlIGRlZmF1bHQgQyBsb2NhbGUgd2hlbgorICB5b3Ugb2JleSAibWFrZSIuIEl0IGJ1aWxkcyBhIHNvdXJjZSBmaWxlIGNhbGxlZCBwY3JlMl9jaGFydGFibGVzLmMuIElmIHlvdSBkbworICBub3Qgc3BlY2lmeSB0aGlzIG9wdGlvbiwgcGNyZTJfY2hhcnRhYmxlcy5jIGlzIGNyZWF0ZWQgYXMgYSBjb3B5IG9mCisgIHBjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0LiBTZWUgIkNoYXJhY3RlciB0YWJsZXMiIGJlbG93IGZvciBmdXJ0aGVyCisgIGluZm9ybWF0aW9uLgorCisuIEl0IGlzIHBvc3NpYmxlIHRvIGNvbXBpbGUgUENSRTIgZm9yIHVzZSBvbiBzeXN0ZW1zIHRoYXQgdXNlIEVCQ0RJQyBhcyB0aGVpcgorICBjaGFyYWN0ZXIgY29kZSAoYXMgb3Bwb3NlZCB0byBBU0NJSS9Vbmljb2RlKSBieSBzcGVjaWZ5aW5nCisKKyAgLS1lbmFibGUtZWJjZGljIC0tZGlzYWJsZS11bmljb2RlCisKKyAgVGhpcyBhdXRvbWF0aWNhbGx5IGltcGxpZXMgLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzIChzZWUgYWJvdmUpLiBIb3dldmVyLAorICB3aGVuIFBDUkUyIGlzIGJ1aWx0IHRoaXMgd2F5LCBpdCBhbHdheXMgb3BlcmF0ZXMgaW4gRUJDRElDLiBJdCBjYW5ub3Qgc3VwcG9ydAorICBib3RoIEVCQ0RJQyBhbmQgVVRGLTgvMTYvMzIuIFRoZXJlIGlzIGEgc2Vjb25kIG9wdGlvbiwgLS1lbmFibGUtZWJjZGljLW5sMjUsCisgIHdoaWNoIHNwZWNpZmllcyB0aGF0IHRoZSBjb2RlIHZhbHVlIGZvciB0aGUgRUJDRElDIE5MIGNoYXJhY3RlciBpcyAweDI1CisgIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgMHgxNS4KKworLiBJZiB5b3Ugc3BlY2lmeSAtLWVuYWJsZS1kZWJ1ZywgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgY29kZSBpcyBpbmNsdWRlZCBpbiB0aGUKKyAgYnVpbGQuIFRoaXMgb3B0aW9uIGlzIGludGVuZGVkIGZvciB1c2UgYnkgdGhlIFBDUkUyIG1haW50YWluZXJzLgorCisuIEluIGVudmlyb25tZW50cyB3aGVyZSB2YWxncmluZCBpcyBpbnN0YWxsZWQsIGlmIHlvdSBzcGVjaWZ5CisKKyAgLS1lbmFibGUtdmFsZ3JpbmQKKworICBQQ1JFMiB3aWxsIHVzZSB2YWxncmluZCBhbm5vdGF0aW9ucyB0byBtYXJrIGNlcnRhaW4gbWVtb3J5IHJlZ2lvbnMgYXMKKyAgdW5hZGRyZXNzYWJsZS4gVGhpcyBhbGxvd3MgaXQgdG8gZGV0ZWN0IGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLCBhbmQgaXMKKyAgbW9zdGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIFBDUkUyIGl0c2VsZi4KKworLiBJbiBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIGdjYyBjb21waWxlciBpcyB1c2VkIGFuZCBsY292IHZlcnNpb24gMS42IG9yIGFib3ZlCisgIGlzIGluc3RhbGxlZCwgaWYgeW91IHNwZWNpZnkKKworICAtLWVuYWJsZS1jb3ZlcmFnZQorCisgIHRoZSBidWlsZCBwcm9jZXNzIGltcGxlbWVudHMgYSBjb2RlIGNvdmVyYWdlIHJlcG9ydCBmb3IgdGhlIHRlc3Qgc3VpdGUuIFRoZQorICByZXBvcnQgaXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmcgIm1ha2UgY292ZXJhZ2UiLiBJZiBjY2FjaGUgaXMgaW5zdGFsbGVkIG9uCisgIHlvdXIgc3lzdGVtLCBpdCBtdXN0IGJlIGRpc2FibGVkIHdoZW4gYnVpbGRpbmcgUENSRTIgZm9yIGNvdmVyYWdlIHJlcG9ydGluZy4KKyAgWW91IGNhbiBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIENDQUNIRV9ESVNBQkxFPTEgYmVmb3JlCisgIHJ1bm5pbmcgIm1ha2UiIHRvIGJ1aWxkIFBDUkUyLiBUaGVyZSBpcyBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNvdmVyYWdlCisgIHJlcG9ydGluZyBpbiB0aGUgInBjcmUyYnVpbGQiIGRvY3VtZW50YXRpb24uCisKKy4gVGhlIHBjcmUyZ3JlcCBwcm9ncmFtIGN1cnJlbnRseSBzdXBwb3J0cyBvbmx5IDgtYml0IGRhdGEgZmlsZXMsIGFuZCBzbworICByZXF1aXJlcyB0aGUgOC1iaXQgUENSRTIgbGlicmFyeS4gSXQgaXMgcG9zc2libGUgdG8gY29tcGlsZSBwY3JlMmdyZXAgdG8gdXNlCisgIGxpYnogYW5kL29yIGxpYmJ6MiwgaW4gb3JkZXIgdG8gcmVhZCAuZ3ogYW5kIC5iejIgZmlsZXMgKHJlc3BlY3RpdmVseSksIGJ5CisgIHNwZWNpZnlpbmcgb25lIG9yIGJvdGggb2YKKworICAtLWVuYWJsZS1wY3JlMmdyZXAtbGliegorICAtLWVuYWJsZS1wY3JlMmdyZXAtbGliYnoyCisKKyAgT2YgY291cnNlLCB0aGUgcmVsZXZhbnQgbGlicmFyaWVzIG11c3QgYmUgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLgorCisuIFRoZSBkZWZhdWx0IHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyIHVzZWQgYnkgcGNyZTJncmVwIGNhbiBiZQorICBzZXQgYnksIGZvciBleGFtcGxlOgorCisgIC0td2l0aC1wY3JlMmdyZXAtYnVmc2l6ZT01MTIwMAorCisgIFRoZSB2YWx1ZSBtdXN0IGJlIGEgcGxhaW4gaW50ZWdlci4gVGhlIGRlZmF1bHQgaXMgMjA0ODAuCisKKy4gSXQgaXMgcG9zc2libGUgdG8gY29tcGlsZSBwY3JlMnRlc3Qgc28gdGhhdCBpdCBsaW5rcyB3aXRoIHRoZSBsaWJyZWFkbGluZQorICBvciBsaWJlZGl0IGxpYnJhcmllcywgYnkgc3BlY2lmeWluZywgcmVzcGVjdGl2ZWx5LAorCisgIC0tZW5hYmxlLXBjcmUydGVzdC1saWJyZWFkbGluZSBvciAtLWVuYWJsZS1wY3JlMnRlc3QtbGliZWRpdAorCisgIElmIHRoaXMgaXMgZG9uZSwgd2hlbiBwY3JlMnRlc3QncyBpbnB1dCBpcyBmcm9tIGEgdGVybWluYWwsIGl0IHJlYWRzIGl0IHVzaW5nCisgIHRoZSByZWFkbGluZSgpIGZ1bmN0aW9uLiBUaGlzIHByb3ZpZGVzIGxpbmUtZWRpdGluZyBhbmQgaGlzdG9yeSBmYWNpbGl0aWVzLgorICBOb3RlIHRoYXQgbGlicmVhZGxpbmUgaXMgR1BMLWxpY2VuY2VkLCBzbyBpZiB5b3UgZGlzdHJpYnV0ZSBhIGJpbmFyeSBvZgorICBwY3JlMnRlc3QgbGlua2VkIGluIHRoaXMgd2F5LCB0aGVyZSBtYXkgYmUgbGljZW5zaW5nIGlzc3Vlcy4gVGhlc2UgY2FuIGJlCisgIGF2b2lkZWQgYnkgbGlua2luZyB3aXRoIGxpYmVkaXQgKHdoaWNoIGhhcyBhIEJTRCBsaWNlbmNlKSBpbnN0ZWFkLgorCisgIEVuYWJsaW5nIGxpYnJlYWRsaW5lIGNhdXNlcyB0aGUgLWxyZWFkbGluZSBvcHRpb24gdG8gYmUgYWRkZWQgdG8gdGhlCisgIHBjcmUydGVzdCBidWlsZC4gSW4gbWFueSBvcGVyYXRpbmcgZW52aXJvbm1lbnRzIHdpdGggYSBzeXRlbS1pbnN0YWxsZWQKKyAgcmVhZGxpbmUgbGlicmFyeSB0aGlzIGlzIHN1ZmZpY2llbnQuIEhvd2V2ZXIsIGluIHNvbWUgZW52aXJvbm1lbnRzIChlLmcuIGlmCisgIGFuIHVubW9kaWZpZWQgZGlzdHJpYnV0aW9uIHZlcnNpb24gb2YgcmVhZGxpbmUgaXMgaW4gdXNlKSwgaXQgbWF5IGJlCisgIG5lY2Vzc2FyeSB0byBzcGVjaWZ5IHNvbWV0aGluZyBsaWtlIExJQlM9Ii1sbmN1cnNlcyIgYXMgd2VsbC4gVGhpcyBpcworICBiZWNhdXNlLCB0byBxdW90ZSB0aGUgcmVhZGxpbmUgSU5TVEFMTCwgIlJlYWRsaW5lIHVzZXMgdGhlIHRlcm1jYXAgZnVuY3Rpb25zLAorICBidXQgZG9lcyBub3QgbGluayB3aXRoIHRoZSB0ZXJtY2FwIG9yIGN1cnNlcyBsaWJyYXJ5IGl0c2VsZiwgYWxsb3dpbmcKKyAgYXBwbGljYXRpb25zIHdoaWNoIGxpbmsgd2l0aCByZWFkbGluZSB0aGUgdG8gY2hvb3NlIGFuIGFwcHJvcHJpYXRlIGxpYnJhcnkuIgorICBJZiB5b3UgZ2V0IGVycm9yIG1lc3NhZ2VzIGFib3V0IG1pc3NpbmcgZnVuY3Rpb25zIHRnZXRzdHIsIHRnZXRlbnQsIHRwdXRzLAorICB0Z2V0ZmxhZywgb3IgdGdvdG8sIHRoaXMgaXMgdGhlIHByb2JsZW0sIGFuZCBsaW5raW5nIHdpdGggdGhlIG5jdXJzZXMgbGlicmFyeQorICBzaG91bGQgZml4IGl0LgorCitUaGUgImNvbmZpZ3VyZSIgc2NyaXB0IGJ1aWxkcyB0aGUgZm9sbG93aW5nIGZpbGVzIGZvciB0aGUgYmFzaWMgQyBsaWJyYXJ5OgorCisuIE1ha2VmaWxlICAgICAgICAgICAgIHRoZSBtYWtlZmlsZSB0aGF0IGJ1aWxkcyB0aGUgbGlicmFyeQorLiBzcmMvY29uZmlnLmggICAgICAgICBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGxpYnJhcnkKKy4gc3JjL3BjcmUyLmggICAgICAgICAgdGhlIHB1YmxpYyBQQ1JFMiBoZWFkZXIgZmlsZQorLiBwY3JlMi1jb25maWcgICAgICAgICAgc2NyaXB0IHRoYXQgc2hvd3MgdGhlIGJ1aWxkaW5nIHNldHRpbmdzIHN1Y2ggYXMgQ0ZMQUdTCisgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCB3ZXJlIHNldCBmb3IgImNvbmZpZ3VyZSIKKy4gbGlicGNyZTItOC5wYyAgICAgICAgKQorLiBsaWJwY3JlMi0xNi5wYyAgICAgICApIGRhdGEgZm9yIHRoZSBwa2ctY29uZmlnIGNvbW1hbmQKKy4gbGlicGNyZTItMzIucGMgICAgICAgKQorLiBsaWJwY3JlMi1wb3NpeC5wYyAgICApCisuIGxpYnRvb2wgICAgICAgICAgICAgIHNjcmlwdCB0aGF0IGJ1aWxkcyBzaGFyZWQgYW5kL29yIHN0YXRpYyBsaWJyYXJpZXMKKworVmVyc2lvbnMgb2YgY29uZmlnLmggYW5kIHBjcmUyLmggYXJlIGRpc3RyaWJ1dGVkIGluIHRoZSBzcmMgZGlyZWN0b3J5IG9mIFBDUkUyCit0YXJiYWxscyB1bmRlciB0aGUgbmFtZXMgY29uZmlnLmguZ2VuZXJpYyBhbmQgcGNyZTIuaC5nZW5lcmljLiBUaGVzZSBhcmUKK3Byb3ZpZGVkIGZvciB0aG9zZSB3aG8gaGF2ZSB0byBidWlsZCBQQ1JFMiB3aXRob3V0IHVzaW5nICJjb25maWd1cmUiIG9yIENNYWtlLgorSWYgeW91IHVzZSAiY29uZmlndXJlIiBvciBDTWFrZSwgdGhlIC5nZW5lcmljIHZlcnNpb25zIGFyZSBub3QgdXNlZC4KKworVGhlICJjb25maWd1cmUiIHNjcmlwdCBhbHNvIGNyZWF0ZXMgY29uZmlnLnN0YXR1cywgd2hpY2ggaXMgYW4gZXhlY3V0YWJsZQorc2NyaXB0IHRoYXQgY2FuIGJlIHJ1biB0byByZWNyZWF0ZSB0aGUgY29uZmlndXJhdGlvbiwgYW5kIGNvbmZpZy5sb2csIHdoaWNoCitjb250YWlucyBjb21waWxlciBvdXRwdXQgZnJvbSB0ZXN0cyB0aGF0ICJjb25maWd1cmUiIHJ1bnMuCisKK09uY2UgImNvbmZpZ3VyZSIgaGFzIHJ1biwgeW91IGNhbiBydW4gIm1ha2UiLiBUaGlzIGJ1aWxkcyB3aGljaGV2ZXIgb2YgdGhlCitsaWJyYXJpZXMgbGlicGNyZTItOCwgbGlicGNyZTItMTYgYW5kIGxpYnBjcmUyLTMyIGFyZSBjb25maWd1cmVkLCBhbmQgYSB0ZXN0Citwcm9ncmFtIGNhbGxlZCBwY3JlMnRlc3QuIElmIHlvdSBlbmFibGVkIEpJVCBzdXBwb3J0IHdpdGggLS1lbmFibGUtaml0LCBhbm90aGVyCit0ZXN0IHByb2dyYW0gY2FsbGVkIHBjcmUyX2ppdF90ZXN0IGlzIGJ1aWx0IGFzIHdlbGwuIElmIHRoZSA4LWJpdCBsaWJyYXJ5IGlzCitidWlsdCwgbGlicGNyZTItcG9zaXggYW5kIHRoZSBwY3JlMmdyZXAgY29tbWFuZCBhcmUgYWxzbyBidWlsdC4gUnVubmluZworIm1ha2UiIHdpdGggdGhlIC1qIG9wdGlvbiBtYXkgc3BlZWQgdXAgY29tcGlsYXRpb24gb24gbXVsdGlwcm9jZXNzb3Igc3lzdGVtcy4KKworVGhlIGNvbW1hbmQgIm1ha2UgY2hlY2siIHJ1bnMgYWxsIHRoZSBhcHByb3ByaWF0ZSB0ZXN0cy4gRGV0YWlscyBvZiB0aGUgUENSRTIKK3Rlc3RzIGFyZSBnaXZlbiBiZWxvdyBpbiBhIHNlcGFyYXRlIHNlY3Rpb24gb2YgdGhpcyBkb2N1bWVudC4gVGhlIC1qIG9wdGlvbiBvZgorIm1ha2UiIGNhbiBhbHNvIGJlIHVzZWQgd2hlbiBydW5uaW5nIHRoZSB0ZXN0cy4KKworWW91IGNhbiB1c2UgIm1ha2UgaW5zdGFsbCIgdG8gaW5zdGFsbCBQQ1JFMiBpbnRvIGxpdmUgZGlyZWN0b3JpZXMgb24geW91cgorc3lzdGVtLiBUaGUgZm9sbG93aW5nIGFyZSBpbnN0YWxsZWQgKGZpbGUgbmFtZXMgYXJlIGFsbCByZWxhdGl2ZSB0byB0aGUKKzxwcmVmaXg+IHRoYXQgaXMgc2V0IHdoZW4gImNvbmZpZ3VyZSIgaXMgcnVuKToKKworICBDb21tYW5kcyAoYmluKToKKyAgICBwY3JlMnRlc3QKKyAgICBwY3JlMmdyZXAgKGlmIDgtYml0IHN1cHBvcnQgaXMgZW5hYmxlZCkKKyAgICBwY3JlMi1jb25maWcKKworICBMaWJyYXJpZXMgKGxpYik6CisgICAgbGlicGNyZTItOCAgICAgIChpZiA4LWJpdCBzdXBwb3J0IGlzIGVuYWJsZWQpCisgICAgbGlicGNyZTItMTYgICAgIChpZiAxNi1iaXQgc3VwcG9ydCBpcyBlbmFibGVkKQorICAgIGxpYnBjcmUyLTMyICAgICAoaWYgMzItYml0IHN1cHBvcnQgaXMgZW5hYmxlZCkKKyAgICBsaWJwY3JlMi1wb3NpeCAgKGlmIDgtYml0IHN1cHBvcnQgaXMgZW5hYmxlZCkKKworICBDb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIChsaWIvcGtnY29uZmlnKToKKyAgICBsaWJwY3JlMi04LnBjCisgICAgbGlicGNyZTItMTYucGMKKyAgICBsaWJwY3JlMi0zMi5wYworICAgIGxpYnBjcmUyLXBvc2l4LnBjCisKKyAgSGVhZGVyIGZpbGVzIChpbmNsdWRlKToKKyAgICBwY3JlMi5oCisgICAgcGNyZTJwb3NpeC5oCisKKyAgTWFuIHBhZ2VzIChzaGFyZS9tYW4vbWFuezEsM30pOgorICAgIHBjcmUyZ3JlcC4xCisgICAgcGNyZTJ0ZXN0LjEKKyAgICBwY3JlMi1jb25maWcuMQorICAgIHBjcmUyLjMKKyAgICBwY3JlMiouMyAobG90cyBtb3JlIHBhZ2VzLCBhbGwgc3RhcnRpbmcgInBjcmUyIikKKworICBIVE1MIGRvY3VtZW50YXRpb24gKHNoYXJlL2RvYy9wY3JlMi9odG1sKToKKyAgICBpbmRleC5odG1sCisgICAgKi5odG1sIChsb3RzIG1vcmUgcGFnZXMsIGh5cGVybGlua2VkIGZyb20gaW5kZXguaHRtbCkKKworICBUZXh0IGZpbGUgZG9jdW1lbnRhdGlvbiAoc2hhcmUvZG9jL3BjcmUyKToKKyAgICBBVVRIT1JTCisgICAgQ09QWUlORworICAgIENoYW5nZUxvZworICAgIExJQ0VOQ0UKKyAgICBORVdTCisgICAgUkVBRE1FCisgICAgcGNyZTIudHh0ICAgICAgICAgKGEgY29uY2F0ZW5hdGlvbiBvZiB0aGUgbWFuKDMpIHBhZ2VzKQorICAgIHBjcmUydGVzdC50eHQgICAgIHRoZSBwY3JlMnRlc3QgbWFuIHBhZ2UKKyAgICBwY3JlMmdyZXAudHh0ICAgICB0aGUgcGNyZTJncmVwIG1hbiBwYWdlCisgICAgcGNyZTItY29uZmlnLnR4dCAgdGhlIHBjcmUyLWNvbmZpZyBtYW4gcGFnZQorCitJZiB5b3Ugd2FudCB0byByZW1vdmUgUENSRTIgZnJvbSB5b3VyIHN5c3RlbSwgeW91IGNhbiBydW4gIm1ha2UgdW5pbnN0YWxsIi4KK1RoaXMgcmVtb3ZlcyBhbGwgdGhlIGZpbGVzIHRoYXQgIm1ha2UgaW5zdGFsbCIgaW5zdGFsbGVkLiBIb3dldmVyLCBpdCBkb2VzIG5vdAorcmVtb3ZlIGFueSBkaXJlY3RvcmllcywgYmVjYXVzZSB0aGVzZSBhcmUgb2Z0ZW4gc2hhcmVkIHdpdGggb3RoZXIgcHJvZ3JhbXMuCisKKworUmV0cmlldmluZyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUnVubmluZyAibWFrZSBpbnN0YWxsIiBpbnN0YWxscyB0aGUgY29tbWFuZCBwY3JlMi1jb25maWcsIHdoaWNoIGNhbiBiZSB1c2VkIHRvCityZWNhbGwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFBDUkUyIGNvbmZpZ3VyYXRpb24gYW5kIGluc3RhbGxhdGlvbi4gRm9yIGV4YW1wbGU6CisKKyAgcGNyZTItY29uZmlnIC0tdmVyc2lvbgorCitwcmludHMgdGhlIHZlcnNpb24gbnVtYmVyLCBhbmQKKworICBwY3JlMi1jb25maWcgLS1saWJzOAorCitvdXRwdXRzIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHRoZSA4LWJpdCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4gVGhpcyBjb21tYW5kCitjYW4gYmUgaW5jbHVkZWQgaW4gbWFrZWZpbGVzIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBQQ1JFMiwgc2F2aW5nIHRoZSBwcm9ncmFtbWVyCitmcm9tIGhhdmluZyB0byByZW1lbWJlciB0b28gbWFueSBkZXRhaWxzLiBSdW4gcGNyZTItY29uZmlnIHdpdGggbm8gYXJndW1lbnRzIHRvCitvYnRhaW4gYSBsaXN0IG9mIHBvc3NpYmxlIGFyZ3VtZW50cy4KKworVGhlIHBrZy1jb25maWcgY29tbWFuZCBpcyBhbm90aGVyIHN5c3RlbSBmb3Igc2F2aW5nIGFuZCByZXRyaWV2aW5nIGluZm9ybWF0aW9uCithYm91dCBpbnN0YWxsZWQgbGlicmFyaWVzLiBJbnN0ZWFkIG9mIHNlcGFyYXRlIGNvbW1hbmRzIGZvciBlYWNoIGxpYnJhcnksIGEKK3NpbmdsZSBjb21tYW5kIGlzIHVzZWQuIEZvciBleGFtcGxlOgorCisgIHBrZy1jb25maWcgLS1saWJzIGxpYnBjcmUyLTE2CisKK1RoZSBkYXRhIGlzIGhlbGQgaW4gKi5wYyBmaWxlcyB0aGF0IGFyZSBpbnN0YWxsZWQgaW4gYSBkaXJlY3RvcnkgY2FsbGVkCis8cHJlZml4Pi9saWIvcGtnY29uZmlnLgorCisKK1NoYXJlZCBsaWJyYXJpZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRlZmF1bHQgZGlzdHJpYnV0aW9uIGJ1aWxkcyBQQ1JFMiBhcyBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzLAorYXMgbG9uZyBhcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLiBTaGFyZWQgbGlicmFyeQorc3VwcG9ydCByZWxpZXMgb24gdGhlICJsaWJ0b29sIiBzY3JpcHQgd2hpY2ggaXMgYnVpbHQgYXMgcGFydCBvZiB0aGUKKyJjb25maWd1cmUiIHByb2Nlc3MuCisKK1RoZSBsaWJ0b29sIHNjcmlwdCBpcyB1c2VkIHRvIGNvbXBpbGUgYW5kIGxpbmsgYm90aCBzaGFyZWQgYW5kIHN0YXRpYworbGlicmFyaWVzLiBUaGV5IGFyZSBwbGFjZWQgaW4gYSBzdWJkaXJlY3RvcnkgY2FsbGVkIC5saWJzIHdoZW4gdGhleSBhcmUgbmV3bHkKK2J1aWx0LiBUaGUgcHJvZ3JhbXMgcGNyZTJ0ZXN0IGFuZCBwY3JlMmdyZXAgYXJlIGJ1aWx0IHRvIHVzZSB0aGVzZSB1bmluc3RhbGxlZAorbGlicmFyaWVzIChieSBtZWFucyBvZiB3cmFwcGVyIHNjcmlwdHMgaW4gdGhlIGNhc2Ugb2Ygc2hhcmVkIGxpYnJhcmllcykuIFdoZW4KK3lvdSB1c2UgIm1ha2UgaW5zdGFsbCIgdG8gaW5zdGFsbCBzaGFyZWQgbGlicmFyaWVzLCBwY3JlMmdyZXAgYW5kIHBjcmUydGVzdCBhcmUKK2F1dG9tYXRpY2FsbHkgcmUtYnVpbHQgdG8gdXNlIHRoZSBuZXdseSBpbnN0YWxsZWQgc2hhcmVkIGxpYnJhcmllcyBiZWZvcmUgYmVpbmcKK2luc3RhbGxlZCB0aGVtc2VsdmVzLiBIb3dldmVyLCB0aGUgdmVyc2lvbnMgbGVmdCBpbiB0aGUgYnVpbGQgZGlyZWN0b3J5IHN0aWxsCit1c2UgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4KKworVG8gYnVpbGQgUENSRTIgdXNpbmcgc3RhdGljIGxpYnJhcmllcyBvbmx5IHlvdSBtdXN0IHVzZSAtLWRpc2FibGUtc2hhcmVkIHdoZW4KK2NvbmZpZ3VyaW5nIGl0LiBGb3IgZXhhbXBsZToKKworLi9jb25maWd1cmUgLS1wcmVmaXg9L3Vzci9nbnUgLS1kaXNhYmxlLXNoYXJlZAorCitUaGVuIHJ1biAibWFrZSIgaW4gdGhlIHVzdWFsIHdheS4gU2ltaWxhcmx5LCB5b3UgY2FuIHVzZSAtLWRpc2FibGUtc3RhdGljIHRvCitidWlsZCBvbmx5IHNoYXJlZCBsaWJyYXJpZXMuCisKKworQ3Jvc3MtY29tcGlsaW5nIHVzaW5nIGF1dG90b29scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitZb3UgY2FuIHNwZWNpZnkgQ0MgYW5kIENGTEFHUyBpbiB0aGUgbm9ybWFsIHdheSB0byB0aGUgImNvbmZpZ3VyZSIgY29tbWFuZCwgaW4KK29yZGVyIHRvIGNyb3NzLWNvbXBpbGUgUENSRTIgZm9yIHNvbWUgb3RoZXIgaG9zdC4gSG93ZXZlciwgeW91IHNob3VsZCBOT1QKK3NwZWNpZnkgLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzLCBiZWNhdXNlIGlmIHlvdSBkbywgdGhlIGRmdGFibGVzLmMgc291cmNlCitmaWxlIGlzIGNvbXBpbGVkIGFuZCBydW4gb24gdGhlIGxvY2FsIGhvc3QsIGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBpbmJ1aWx0CitjaGFyYWN0ZXIgdGFibGVzICh0aGUgcGNyZTJfY2hhcnRhYmxlcy5jIGZpbGUpLiBUaGlzIHdpbGwgcHJvYmFibHkgbm90IHdvcmssCitiZWNhdXNlIGRmdGFibGVzLmMgbmVlZHMgdG8gYmUgY29tcGlsZWQgd2l0aCB0aGUgbG9jYWwgY29tcGlsZXIsIG5vdCB0aGUgY3Jvc3MKK2NvbXBpbGVyLgorCitXaGVuIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcyBpcyBub3Qgc3BlY2lmaWVkLCBwY3JlMl9jaGFydGFibGVzLmMgaXMKK2NyZWF0ZWQgYnkgbWFraW5nIGEgY29weSBvZiBwY3JlMl9jaGFydGFibGVzLmMuZGlzdCwgd2hpY2ggaXMgYSBkZWZhdWx0IHNldCBvZgordGFibGVzIHRoYXQgYXNzdW1lcyBBU0NJSSBjb2RlLiBDcm9zcy1jb21waWxpbmcgd2l0aCB0aGUgZGVmYXVsdCB0YWJsZXMgc2hvdWxkCitub3QgYmUgYSBwcm9ibGVtLgorCitJZiB5b3UgbmVlZCB0byBtb2RpZnkgdGhlIGNoYXJhY3RlciB0YWJsZXMgd2hlbiBjcm9zcy1jb21waWxpbmcsIHlvdSBzaG91bGQKK21vdmUgcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3Qgb3V0IG9mIHRoZSB3YXksIHRoZW4gY29tcGlsZSBkZnRhYmxlcy5jIGJ5IGhhbmQKK2FuZCBydW4gaXQgb24gdGhlIGxvY2FsIGhvc3QgdG8gbWFrZSBhIG5ldyB2ZXJzaW9uIG9mIHBjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0LgorVGhlbiB3aGVuIHlvdSBjcm9zcy1jb21waWxlIFBDUkUyIHRoaXMgbmV3IHZlcnNpb24gb2YgdGhlIHRhYmxlcyB3aWxsIGJlIHVzZWQuCisKKworTWFraW5nIG5ldyB0YXJiYWxscworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY29tbWFuZCAibWFrZSBkaXN0IiBjcmVhdGVzIHRocmVlIFBDUkUyIHRhcmJhbGxzLCBpbiB0YXIuZ3osIHRhci5iejIsIGFuZAoremlwIGZvcm1hdHMuIFRoZSBjb21tYW5kICJtYWtlIGRpc3RjaGVjayIgZG9lcyB0aGUgc2FtZSwgYnV0IHRoZW4gZG9lcyBhIHRyaWFsCitidWlsZCBvZiB0aGUgbmV3IGRpc3RyaWJ1dGlvbiB0byBlbnN1cmUgdGhhdCBpdCB3b3Jrcy4KKworSWYgeW91IGhhdmUgbW9kaWZpZWQgYW55IG9mIHRoZSBtYW4gcGFnZSBzb3VyY2VzIGluIHRoZSBkb2MgZGlyZWN0b3J5LCB5b3UKK3Nob3VsZCBmaXJzdCBydW4gdGhlIFByZXBhcmVSZWxlYXNlIHNjcmlwdCBiZWZvcmUgbWFraW5nIGEgZGlzdHJpYnV0aW9uLiBUaGlzCitzY3JpcHQgY3JlYXRlcyB0aGUgLnR4dCBhbmQgSFRNTCBmb3JtcyBvZiB0aGUgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBtYW4gcGFnZXMuCisKKworVGVzdGluZyBQQ1JFMgorLS0tLS0tLS0tLS0tCisKK1RvIHRlc3QgdGhlIGJhc2ljIFBDUkUyIGxpYnJhcnkgb24gYSBVbml4LWxpa2Ugc3lzdGVtLCBydW4gdGhlIFJ1blRlc3Qgc2NyaXB0LgorVGhlcmUgaXMgYW5vdGhlciBzY3JpcHQgY2FsbGVkIFJ1bkdyZXBUZXN0IHRoYXQgdGVzdHMgdGhlIHBjcmUyZ3JlcCBjb21tYW5kLgorV2hlbiBKSVQgc3VwcG9ydCBpcyBlbmFibGVkLCBhIHRoaXJkIHRlc3QgcHJvZ3JhbSBjYWxsZWQgcGNyZTJfaml0X3Rlc3QgaXMKK2J1aWx0LiBCb3RoIHRoZSBzY3JpcHRzIGFuZCBhbGwgdGhlIHByb2dyYW0gdGVzdHMgYXJlIHJ1biBpZiB5b3Ugb2JleSAibWFrZQorY2hlY2siLiBGb3Igb3RoZXIgZW52aXJvbm1lbnRzLCBzZWUgdGhlIGluc3RydWN0aW9ucyBpbiBOT04tQVVUT1RPT0xTLUJVSUxELgorCitUaGUgUnVuVGVzdCBzY3JpcHQgcnVucyB0aGUgcGNyZTJ0ZXN0IHRlc3QgcHJvZ3JhbSAod2hpY2ggaXMgZG9jdW1lbnRlZCBpbiBpdHMKK293biBtYW4gcGFnZSkgb24gZWFjaCBvZiB0aGUgcmVsZXZhbnQgdGVzdGlucHV0IGZpbGVzIGluIHRoZSB0ZXN0ZGF0YQorZGlyZWN0b3J5LCBhbmQgY29tcGFyZXMgdGhlIG91dHB1dCB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgY29ycmVzcG9uZGluZwordGVzdG91dHB1dCBmaWxlcy4gUnVuVGVzdCB1c2VzIGEgZmlsZSBjYWxsZWQgdGVzdHRyeSB0byBob2xkIHRoZSBtYWluIG91dHB1dAorZnJvbSBwY3JlMnRlc3QuIE90aGVyIGZpbGVzIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggInRlc3QiIGFyZSB1c2VkIGFzIHdvcmtpbmcKK2ZpbGVzIGluIHNvbWUgdGVzdHMuCisKK1NvbWUgdGVzdHMgYXJlIHJlbGV2YW50IG9ubHkgd2hlbiBjZXJ0YWluIGJ1aWxkLXRpbWUgb3B0aW9ucyB3ZXJlIHNlbGVjdGVkLiBGb3IKK2V4YW1wbGUsIHRoZSB0ZXN0cyBmb3IgVVRGLTgvMTYvMzIgZmVhdHVyZXMgYXJlIHJ1biBvbmx5IHdoZW4gVW5pY29kZSBzdXBwb3J0CitpcyBhdmFpbGFibGUuIFJ1blRlc3Qgb3V0cHV0cyBhIGNvbW1lbnQgd2hlbiBpdCBza2lwcyBhIHRlc3QuCisKK01hbnkgKGJ1dCBub3QgYWxsKSBvZiB0aGUgdGVzdHMgdGhhdCBhcmUgbm90IHNraXBwZWQgYXJlIHJ1biB0d2ljZSBpZiBKSVQKK3N1cHBvcnQgaXMgYXZhaWxhYmxlLiBPbiB0aGUgc2Vjb25kIHJ1biwgSklUIGNvbXBpbGF0aW9uIGlzIGZvcmNlZC4gVGhpcwordGVzdGluZyBjYW4gYmUgc3VwcHJlc3NlZCBieSBwdXR0aW5nICJub2ppdCIgb24gdGhlIFJ1blRlc3QgY29tbWFuZCBsaW5lLgorCitUaGUgZW50aXJlIHNldCBvZiB0ZXN0cyBpcyBydW4gb25jZSBmb3IgZWFjaCBvZiB0aGUgOC1iaXQsIDE2LWJpdCBhbmQgMzItYml0CitsaWJyYXJpZXMgdGhhdCBhcmUgZW5hYmxlZC4gSWYgeW91IHdhbnQgdG8gcnVuIGp1c3Qgb25lIHNldCBvZiB0ZXN0cywgY2FsbAorUnVuVGVzdCB3aXRoIGVpdGhlciB0aGUgLTgsIC0xNiBvciAtMzIgb3B0aW9uLgorCitJZiB2YWxncmluZCBpcyBpbnN0YWxsZWQsIHlvdSBjYW4gcnVuIHRoZSB0ZXN0cyB1bmRlciBpdCBieSBwdXR0aW5nICJ2YWxncmluZCIKK29uIHRoZSBSdW5UZXN0IGNvbW1hbmQgbGluZS4gVG8gcnVuIHBjcmUydGVzdCBvbiBqdXN0IG9uZSBvciBtb3JlIHNwZWNpZmljIHRlc3QKK2ZpbGVzLCBnaXZlIHRoZWlyIG51bWJlcnMgYXMgYXJndW1lbnRzIHRvIFJ1blRlc3QsIGZvciBleGFtcGxlOgorCisgIFJ1blRlc3QgMiA3IDExCisKK1lvdSBjYW4gYWxzbyBzcGVjaWZ5IHJhbmdlcyBvZiB0ZXN0cyBzdWNoIGFzIDMtNiBvciAzLSAobWVhbmluZyAzIHRvIHRoZQorZW5kKSwgb3IgYSBudW1iZXIgcHJlY2VkZWQgYnkgfiB0byBleGNsdWRlIGEgdGVzdC4gRm9yIGV4YW1wbGU6CisKKyAgUnVudGVzdCAzLTE1IH4xMAorCitUaGlzIHJ1bnMgdGVzdHMgMyB0byAxNSwgZXhjbHVkaW5nIHRlc3QgMTAsIGFuZCBqdXN0IH4xMyBydW5zIGFsbCB0aGUgdGVzdHMKK2V4Y2VwdCB0ZXN0IDEzLiBXaGF0ZXZlciBvcmRlciB0aGUgYXJndW1lbnRzIGFyZSBpbiwgdGhlIHRlc3RzIGFyZSBhbHdheXMgcnVuCitpbiBudW1lcmljYWwgb3JkZXIuCisKK1lvdSBjYW4gYWxzbyBjYWxsIFJ1blRlc3Qgd2l0aCB0aGUgc2luZ2xlIGFyZ3VtZW50ICJsaXN0IiB0byBjYXVzZSBpdCB0byBvdXRwdXQKK2EgbGlzdCBvZiB0ZXN0cy4KKworVGhlIHRlc3Qgc2VxdWVuY2Ugc3RhcnRzIHdpdGggInRlc3QgMCIsIHdoaWNoIGlzIGEgc3BlY2lhbCB0ZXN0IHRoYXQgaGFzIG5vCitpbnB1dCBmaWxlLCBhbmQgd2hvc2Ugb3V0cHV0IGlzIG5vdCBjaGVja2VkLiBUaGlzIGlzIGJlY2F1c2UgaXQgd2lsbCBiZQorZGlmZmVyZW50IG9uIGRpZmZlcmVudCBoYXJkd2FyZSBhbmQgd2l0aCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuIFRoZSB0ZXN0CitleGlzdHMgaW4gb3JkZXIgdG8gZXhlcmNpc2Ugc29tZSBvZiBwY3JlMnRlc3QncyBjb2RlIHRoYXQgd291bGQgbm90IG90aGVyd2lzZQorYmUgcnVuLgorCitUZXN0cyAxIGFuZCAyIGNhbiBhbHdheXMgYmUgcnVuLCBhcyB0aGV5IGV4cGVjdCBvbmx5IHBsYWluIHRleHQgc3RyaW5ncyAobm90CitVVEYpIGFuZCBtYWtlIG5vIHVzZSBvZiBVbmljb2RlIHByb3BlcnRpZXMuIFRoZSBmaXJzdCB0ZXN0IGZpbGUgY2FuIGJlIGZlZAorZGlyZWN0bHkgaW50byB0aGUgcGVybHRlc3Quc2ggc2NyaXB0IHRvIGNoZWNrIHRoYXQgUGVybCBnaXZlcyB0aGUgc2FtZSByZXN1bHRzLgorVGhlIG9ubHkgZGlmZmVyZW5jZSB5b3Ugc2hvdWxkIHNlZSBpcyBpbiB0aGUgZmlyc3QgZmV3IGxpbmVzLCB3aGVyZSB0aGUgUGVybAordmVyc2lvbiBpcyBnaXZlbiBpbnN0ZWFkIG9mIHRoZSBQQ1JFMiB2ZXJzaW9uLiBUaGUgc2Vjb25kIHNldCBvZiB0ZXN0cyBjaGVjaworYXV4aWxpYXJ5IGZ1bmN0aW9ucywgZXJyb3IgZGV0ZWN0aW9uLCBhbmQgcnVuLXRpbWUgZmxhZ3MgdGhhdCBhcmUgc3BlY2lmaWMgdG8KK1BDUkUyLiBJdCBhbHNvIHVzZXMgdGhlIGRlYnVnZ2luZyBmbGFncyB0byBjaGVjayBzb21lIG9mIHRoZSBpbnRlcm5hbHMgb2YKK3BjcmUyX2NvbXBpbGUoKS4KKworSWYgeW91IGJ1aWxkIFBDUkUyIHdpdGggYSBsb2NhbGUgc2V0dGluZyB0aGF0IGlzIG5vdCB0aGUgc3RhbmRhcmQgQyBsb2NhbGUsIHRoZQorY2hhcmFjdGVyIHRhYmxlcyBtYXkgYmUgZGlmZmVyZW50IChzZWUgbmV4dCBwYXJhZ3JhcGgpLiBJbiBzb21lIGNhc2VzLCB0aGlzIG1heQorY2F1c2UgZmFpbHVyZXMgaW4gdGhlIHNlY29uZCBzZXQgb2YgdGVzdHMuIEZvciBleGFtcGxlLCBpbiBhIGxvY2FsZSB3aGVyZSB0aGUKK2lzcHJpbnQoKSBmdW5jdGlvbiB5aWVsZHMgVFJVRSBmb3IgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgMTI4LTI1NSwgdGhlIHVzZSBvZgorWzppc2FzY2lpOl0gaW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzIGRlZmluZXMgYSBkaWZmZXJlbnQgc2V0IG9mIGNoYXJhY3RlcnMsIGFuZAordGhpcyBzaG93cyB1cCBpbiB0aGlzIHRlc3QgYXMgYSBkaWZmZXJlbmNlIGluIHRoZSBjb21waWxlZCBjb2RlLCB3aGljaCBpcyBiZWluZworbGlzdGVkIGZvciBjaGVja2luZy4gRm9yIGV4YW1wbGUsIHdoZXJlIHRoZSBjb21wYXJpc29uIHRlc3Qgb3V0cHV0IGNvbnRhaW5zCitbXHgwMC1ceDdmXSB0aGUgdGVzdCBtaWdodCBjb250YWluIFtceDAwLVx4ZmZdLCBhbmQgc2ltaWxhcmx5IGluIHNvbWUgb3RoZXIKK2Nhc2VzLiBUaGlzIGlzIG5vdCBhIGJ1ZyBpbiBQQ1JFMi4KKworVGVzdCAzIGNoZWNrcyBwY3JlMl9tYWtldGFibGVzKCksIHRoZSBmYWNpbGl0eSBmb3IgYnVpbGRpbmcgYSBzZXQgb2YgY2hhcmFjdGVyCit0YWJsZXMgZm9yIGEgc3BlY2lmaWMgbG9jYWxlIGFuZCB1c2luZyB0aGVtIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgdGFibGVzLiBUaGUKK3NjcmlwdCB1c2VzIHRoZSAibG9jYWxlIiBjb21tYW5kIHRvIGNoZWNrIGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSAiZnJfRlIiLAorImZyZW5jaCIsIG9yICJmciIgbG9jYWxlLCBhbmQgdXNlcyB0aGUgZmlyc3Qgb25lIHRoYXQgaXQgZmluZHMuIElmIHRoZSAibG9jYWxlIgorY29tbWFuZCBmYWlscywgb3IgaWYgaXRzIG91dHB1dCBkb2Vzbid0IGluY2x1ZGUgImZyX0ZSIiwgImZyZW5jaCIsIG9yICJmciIgaW4KK3RoZSBsaXN0IG9mIGF2YWlsYWJsZSBsb2NhbGVzLCB0aGUgdGhpcmQgdGVzdCBjYW5ub3QgYmUgcnVuLCBhbmQgYSBjb21tZW50IGlzCitvdXRwdXQgdG8gc2F5IHdoeS4gSWYgcnVubmluZyB0aGlzIHRlc3QgcHJvZHVjZXMgYW4gZXJyb3IgbGlrZSB0aGlzOgorCisgICoqIEZhaWxlZCB0byBzZXQgbG9jYWxlICJmcl9GUiIKKworaXQgbWVhbnMgdGhhdCB0aGUgZ2l2ZW4gbG9jYWxlIGlzIG5vdCBhdmFpbGFibGUgb24geW91ciBzeXN0ZW0sIGRlc3BpdGUgYmVpbmcKK2xpc3RlZCBieSAibG9jYWxlIi4gVGhpcyBkb2VzIG5vdCBtZWFuIHRoYXQgUENSRTIgaXMgYnJva2VuLiBUaGVyZSBhcmUgdGhyZWUKK2FsdGVybmF0aXZlIG91dHB1dCBmaWxlcyBmb3IgdGhlIHRoaXJkIHRlc3QsIGJlY2F1c2UgdGhyZWUgZGlmZmVyZW50IHZlcnNpb25zCitvZiB0aGUgRnJlbmNoIGxvY2FsZSBoYXZlIGJlZW4gZW5jb3VudGVyZWQuIFRoZSB0ZXN0IHBhc3NlcyBpZiBpdHMgb3V0cHV0CittYXRjaGVzIGFueSBvbmUgb2YgdGhlbS4KKworVGVzdHMgNCBhbmQgNSBjaGVjayBVVEYgYW5kIFVuaWNvZGUgcHJvcGVydHkgc3VwcG9ydCwgdGVzdCA0IGJlaW5nIGNvbXBhdGlibGUKK3dpdGggdGhlIHBlcmx0ZXN0LnNoIHNjcmlwdCwgYW5kIHRlc3QgNSBjaGVja2luZyBQQ1JFMi1zcGVjaWZpYyB0aGluZ3MuCisKK1Rlc3RzIDYgYW5kIDcgY2hlY2sgdGhlIHBjcmUyX2RmYV9tYXRjaCgpIGFsdGVybmF0aXZlIG1hdGNoaW5nIGZ1bmN0aW9uLCBpbgorbm9uLVVURiBtb2RlIGFuZCBVVEYtbW9kZSB3aXRoIFVuaWNvZGUgcHJvcGVydHkgc3VwcG9ydCwgcmVzcGVjdGl2ZWx5LgorCitUZXN0IDggY2hlY2tzIHNvbWUgaW50ZXJuYWwgb2Zmc2V0cyBhbmQgY29kZSBzaXplIGZlYXR1cmVzOyBpdCBpcyBydW4gb25seSB3aGVuCit0aGUgZGVmYXVsdCAibGluayBzaXplIiBvZiAyIGlzIHNldCAoaW4gb3RoZXIgY2FzZXMgdGhlIHNpemVzIGNoYW5nZSkgYW5kIHdoZW4KK1VuaWNvZGUgc3VwcG9ydCBpcyBlbmFibGVkLgorCitUZXN0cyA5IGFuZCAxMCBhcmUgcnVuIG9ubHkgaW4gOC1iaXQgbW9kZSwgYW5kIHRlc3RzIDExIGFuZCAxMiBhcmUgcnVuIG9ubHkgaW4KKzE2LWJpdCBhbmQgMzItYml0IG1vZGVzLiBUaGVzZSBhcmUgdGVzdHMgdGhhdCBnZW5lcmF0ZSBkaWZmZXJlbnQgb3V0cHV0IGluCis4LWJpdCBtb2RlLiBFYWNoIHBhaXIgYXJlIGZvciBnZW5lcmFsIGNhc2VzIGFuZCBVbmljb2RlIHN1cHBvcnQsIHJlc3BlY3RpdmVseS4KK1Rlc3QgMTMgY2hlY2tzIHRoZSBoYW5kbGluZyBvZiBub24tVVRGIGNoYXJhY3RlcnMgZ3JlYXRlciB0aGFuIDI1NSBieQorcGNyZTJfZGZhX21hdGNoKCkgaW4gMTYtYml0IGFuZCAzMi1iaXQgbW9kZXMuCisKK1Rlc3QgMTQgY29udGFpbnMgYSBudW1iZXIgb2YgdGVzdHMgdGhhdCBtdXN0IG5vdCBiZSBydW4gd2l0aCBKSVQuIFRoZXkgY2hlY2ssCithbW9uZyBvdGhlciBub24tSklUIHRoaW5ncywgdGhlIG1hdGNoLWxpbWl0aW5nIGZlYXR1cmVzIG9mIHRoZSBpbnRlcHJldGl2ZQorbWF0Y2hlci4KKworVGVzdCAxNSBpcyBydW4gb25seSB3aGVuIEpJVCBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUuIEl0IGNoZWNrcyB0aGF0IGFuCithdHRlbXB0IHRvIHVzZSBKSVQgaGFzIHRoZSBleHBlY3RlZCBiZWhhdmlvdXIuCisKK1Rlc3QgMTYgaXMgcnVuIG9ubHkgd2hlbiBKSVQgc3VwcG9ydCBpcyBhdmFpbGFibGUuIEl0IGNoZWNrcyBKSVQgY29tcGxldGUgYW5kCitwYXJ0aWFsIG1vZGVzLCBtYXRjaC1saW1pdGluZyB1bmRlciBKSVQsIGFuZCBvdGhlciBKSVQtc3BlY2lmaWMgZmVhdHVyZXMuCisKK1Rlc3RzIDE3IGFuZCAxOCBhcmUgcnVuIG9ubHkgaW4gOC1iaXQgbW9kZS4gVGhleSBjaGVjayB0aGUgUE9TSVggaW50ZXJmYWNlIHRvCit0aGUgOC1iaXQgbGlicmFyeSwgd2l0aG91dCBhbmQgd2l0aCBVbmljb2RlIHN1cHBvcnQsIHJlc3BlY3RpdmVseS4KKworVGVzdCAxOSBjaGVja3MgdGhlIHNlcmlhbGl6YXRpb24gZnVuY3Rpb25zIGJ5IHdyaXRpbmcgYSBzZXQgb2YgY29tcGlsZWQKK3BhdHRlcm5zIHRvIGEgZmlsZSwgYW5kIHRoZW4gcmVsb2FkaW5nIGFuZCBjaGVja2luZyB0aGVtLgorCisKK0NoYXJhY3RlciB0YWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworRm9yIHNwZWVkLCBQQ1JFMiB1c2VzIGZvdXIgdGFibGVzIGZvciBtYW5pcHVsYXRpbmcgYW5kIGlkZW50aWZ5aW5nIGNoYXJhY3RlcnMKK3dob3NlIGNvZGUgcG9pbnQgdmFsdWVzIGFyZSBsZXNzIHRoYW4gMjU2LiBCeSBkZWZhdWx0LCBhIHNldCBvZiB0YWJsZXMgdGhhdCBpcworYnVpbHQgaW50byB0aGUgbGlicmFyeSBpcyB1c2VkLiBUaGUgcGNyZTJfbWFrZXRhYmxlcygpIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQKK2J5IGFuIGFwcGxpY2F0aW9uIHRvIGNyZWF0ZSBhIG5ldyBzZXQgb2YgdGFibGVzIGluIHRoZSBjdXJyZW50IGxvY2FsZS4gVGhpcyBhcmUKK3Bhc3NlZCB0byBQQ1JFMiBieSBjYWxsaW5nIHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKCkgdG8gcHV0IGEgcG9pbnRlciBpbnRvIGEKK2NvbXBpbGUgY29udGV4dC4KKworVGhlIHNvdXJjZSBmaWxlIGNhbGxlZCBwY3JlMl9jaGFydGFibGVzLmMgY29udGFpbnMgdGhlIGRlZmF1bHQgc2V0IG9mIHRhYmxlcy4KK0J5IGRlZmF1bHQsIHRoaXMgaXMgY3JlYXRlZCBhcyBhIGNvcHkgb2YgcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QsIHdoaWNoCitjb250YWlucyB0YWJsZXMgZm9yIEFTQ0lJIGNvZGluZy4gSG93ZXZlciwgaWYgLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzIGlzCitzcGVjaWZpZWQgZm9yIC4vY29uZmlndXJlLCBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHBjcmUyX2NoYXJ0YWJsZXMuYyBpcyBidWlsdAorYnkgdGhlIHByb2dyYW0gZGZ0YWJsZXMgKGNvbXBpbGVkIGZyb20gZGZ0YWJsZXMuYyksIHdoaWNoIHVzZXMgdGhlIEFOU0kgQworY2hhcmFjdGVyIGhhbmRsaW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGlzYWxudW0oKSwgaXNhbHBoYSgpLCBpc3VwcGVyKCksCitpc2xvd2VyKCksIGV0Yy4gdG8gYnVpbGQgdGhlIHRhYmxlIHNvdXJjZXMuIFRoaXMgbWVhbnMgdGhhdCB0aGUgZGVmYXVsdCBDCitsb2NhbGUgd2hpY2ggaXMgc2V0IGZvciB5b3VyIHN5c3RlbSB3aWxsIGNvbnRyb2wgdGhlIGNvbnRlbnRzIG9mIHRoZXNlIGRlZmF1bHQKK3RhYmxlcy4gWW91IGNhbiBjaGFuZ2UgdGhlIGRlZmF1bHQgdGFibGVzIGJ5IGVkaXRpbmcgcGNyZTJfY2hhcnRhYmxlcy5jIGFuZAordGhlbiByZS1idWlsZGluZyBQQ1JFMi4gSWYgeW91IGRvIHRoaXMsIHlvdSBzaG91bGQgdGFrZSBjYXJlIHRvIGVuc3VyZSB0aGF0IHRoZQorZmlsZSBkb2VzIG5vdCBnZXQgYXV0b21hdGljYWxseSByZS1nZW5lcmF0ZWQuIFRoZSBiZXN0IHdheSB0byBkbyB0aGlzIGlzIHRvCittb3ZlIHBjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0IG91dCBvZiB0aGUgd2F5IGFuZCByZXBsYWNlIGl0IHdpdGggeW91ciBjdXN0b21pemVkCit0YWJsZXMuCisKK1doZW4gdGhlIGRmdGFibGVzIHByb2dyYW0gaXMgcnVuIGFzIGEgcmVzdWx0IG9mIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcywKK2l0IHVzZXMgdGhlIGRlZmF1bHQgQyBsb2NhbGUgdGhhdCBpcyBzZXQgb24geW91ciBzeXN0ZW0uIEl0IGRvZXMgbm90IHBheQorYXR0ZW50aW9uIHRvIHRoZSBMQ194eHggZW52aXJvbm1lbnQgdmFyaWFibGVzLiBJbiBvdGhlciB3b3JkcywgaXQgdXNlcyB0aGUKK3N5c3RlbSdzIGRlZmF1bHQgbG9jYWxlIHJhdGhlciB0aGFuIHdoYXRldmVyIHRoZSBjb21waWxpbmcgdXNlciBoYXBwZW5zIHRvIGhhdmUKK3NldC4gSWYgeW91IHJlYWxseSBkbyB3YW50IHRvIGJ1aWxkIGEgc291cmNlIHNldCBvZiBjaGFyYWN0ZXIgdGFibGVzIGluIGEKK2xvY2FsZSB0aGF0IGlzIHNwZWNpZmllZCBieSB0aGUgTENfeHh4IHZhcmlhYmxlcywgeW91IGNhbiBydW4gdGhlIGRmdGFibGVzCitwcm9ncmFtIGJ5IGhhbmQgd2l0aCB0aGUgLUwgb3B0aW9uLiBGb3IgZXhhbXBsZToKKworICAuL2RmdGFibGVzIC1MIHBjcmUyX2NoYXJ0YWJsZXMuYy5zcGVjaWFsCisKK1RoZSBmaXJzdCB0d28gMjU2LWJ5dGUgdGFibGVzIHByb3ZpZGUgbG93ZXIgY2FzaW5nIGFuZCBjYXNlIGZsaXBwaW5nIGZ1bmN0aW9ucywKK3Jlc3BlY3RpdmVseS4gVGhlIG5leHQgdGFibGUgY29uc2lzdHMgb2YgdGhyZWUgMzItYnl0ZSBiaXQgbWFwcyB3aGljaCBpZGVudGlmeQorZGlnaXRzLCAid29yZCIgY2hhcmFjdGVycywgYW5kIHdoaXRlIHNwYWNlLCByZXNwZWN0aXZlbHkuIFRoZXNlIGFyZSB1c2VkIHdoZW4KK2J1aWxkaW5nIDMyLWJ5dGUgYml0IG1hcHMgdGhhdCByZXByZXNlbnQgY2hhcmFjdGVyIGNsYXNzZXMgZm9yIGNvZGUgcG9pbnRzIGxlc3MKK3RoYW4gMjU2LiBUaGUgZmluYWwgMjU2LWJ5dGUgdGFibGUgaGFzIGJpdHMgaW5kaWNhdGluZyB2YXJpb3VzIGNoYXJhY3RlciB0eXBlcywKK2FzIGZvbGxvd3M6CisKKyAgICAxICAgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgICAgMiAgIGxldHRlcgorICAgIDQgICBkZWNpbWFsIGRpZ2l0CisgICAgOCAgIGhleGFkZWNpbWFsIGRpZ2l0CisgICAxNiAgIGFscGhhbnVtZXJpYyBvciAnXycKKyAgMTI4ICAgcmVndWxhciBleHByZXNzaW9uIG1ldGFjaGFyYWN0ZXIgb3IgYmluYXJ5IHplcm8KKworWW91IHNob3VsZCBub3QgYWx0ZXIgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRoYXQgY29udGFpbiB0aGUgMTI4IGJpdCwgYXMgdGhhdAord2lsbCBjYXVzZSBQQ1JFMiB0byBtYWxmdW5jdGlvbi4KKworCitGaWxlIG1hbmlmZXN0CistLS0tLS0tLS0tLS0tCisKK1RoZSBkaXN0cmlidXRpb24gc2hvdWxkIGNvbnRhaW4gdGhlIGZpbGVzIGxpc3RlZCBiZWxvdy4KKworKEEpIFNvdXJjZSBmaWxlcyBmb3IgdGhlIFBDUkUyIGxpYnJhcnkgZnVuY3Rpb25zIGFuZCB0aGVpciBoZWFkZXJzIGFyZSBmb3VuZCBpbgorICAgIHRoZSBzcmMgZGlyZWN0b3J5OgorCisgIHNyYy9kZnRhYmxlcy5jICAgICAgICAgICBhdXhpbGlhcnkgcHJvZ3JhbSBmb3IgYnVpbGRpbmcgcGNyZTJfY2hhcnRhYmxlcy5jCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcyBpcyBzcGVjaWZpZWQKKworICBzcmMvcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QgIGEgZGVmYXVsdCBzZXQgb2YgY2hhcmFjdGVyIHRhYmxlcyB0aGF0IGFzc3VtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNDSUkgY29kaW5nOyB1bmxlc3MgLS1lbmFibGUtcmVidWlsZC1jaGFydGFibGVzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIHVzZWQgYnkgY29weWluZyB0byBwY3JlMl9jaGFydGFibGVzLmMKKworICBzcmMvcGNyZTJwb3NpeC5jICAgICAgICAgKQorICBzcmMvcGNyZTJfYXV0b19wb3NzZXNzLmMgKQorICBzcmMvcGNyZTJfY29tcGlsZS5jICAgICAgKQorICBzcmMvcGNyZTJfY29uZmlnLmMgICAgICAgKQorICBzcmMvcGNyZTJfY29udGV4dC5jICAgICAgKQorICBzcmMvcGNyZTJfZGZhX21hdGNoLmMgICAgKQorICBzcmMvcGNyZTJfZXJyb3IuYyAgICAgICAgKQorICBzcmMvcGNyZTJfZmluZF9icmFja2V0LmMgKQorICBzcmMvcGNyZTJfaml0X2NvbXBpbGUuYyAgKQorICBzcmMvcGNyZTJfaml0X21hdGNoLmMgICAgKSBzb3VyY2VzIGZvciB0aGUgZnVuY3Rpb25zIGluIHRoZSBsaWJyYXJ5LAorICBzcmMvcGNyZTJfaml0X21pc2MuYyAgICAgKSAgIGFuZCBzb21lIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IHRoZXkgdXNlCisgIHNyYy9wY3JlMl9tYWtldGFibGVzLmMgICApCisgIHNyYy9wY3JlMl9tYXRjaC5jICAgICAgICApCisgIHNyYy9wY3JlMl9tYXRjaF9kYXRhLmMgICApCisgIHNyYy9wY3JlMl9uZXdsaW5lLmMgICAgICApCisgIHNyYy9wY3JlMl9vcmQydXRmLmMgICAgICApCisgIHNyYy9wY3JlMl9wYXR0ZXJuX2luZm8uYyApCisgIHNyYy9wY3JlMl9zZXJpYWxpemUuYyAgICApCisgIHNyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYyApCisgIHNyYy9wY3JlMl9zdHVkeS5jICAgICAgICApCisgIHNyYy9wY3JlMl9zdWJzdGl0dXRlLmMgICApCisgIHNyYy9wY3JlMl9zdWJzdHJpbmcuYyAgICApCisgIHNyYy9wY3JlMl90YWJsZXMuYyAgICAgICApCisgIHNyYy9wY3JlMl91Y2QuYyAgICAgICAgICApCisgIHNyYy9wY3JlMl92YWxpZF91dGYuYyAgICApCisgIHNyYy9wY3JlMl94Y2xhc3MuYyAgICAgICApCisKKyAgc3JjL3BjcmUyX3ByaW50aW50LmMgICAgIGRlYnVnZ2luZyBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgYnkgcGNyZTJ0ZXN0LAorCisgIHNyYy9jb25maWcuaC5pbiAgICAgICAgICB0ZW1wbGF0ZSBmb3IgY29uZmlnLmgsIHdoZW4gYnVpbHQgYnkgImNvbmZpZ3VyZSIKKyAgc3JjL3BjcmUyLmguaW4gICAgICAgICAgIHRlbXBsYXRlIGZvciBwY3JlMi5oIHdoZW4gYnVpbHQgYnkgImNvbmZpZ3VyZSIKKyAgc3JjL3BjcmUycG9zaXguaCAgICAgICAgIGhlYWRlciBmb3IgdGhlIGV4dGVybmFsIFBPU0lYIHdyYXBwZXIgQVBJCisgIHNyYy9wY3JlMl9pbnRlcm5hbC5oICAgICBoZWFkZXIgZm9yIGludGVybmFsIHVzZQorICBzcmMvcGNyZTJfaW50bW9kZWRlcC5oICAgYSBtb2RlLXNwZWNpZmljIGludGVybmFsIGhlYWRlcgorICBzcmMvcGNyZTJfdWNwLmggICAgICAgICAgaGVhZGVyIGZvciBVbmljb2RlIHByb3BlcnR5IGhhbmRsaW5nCisKKyAgc2xqaXQvKiAgICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBmb3IgdGhlIEpJVCBjb21waWxlcgorCisoQikgU291cmNlIGZpbGVzIGZvciBwcm9ncmFtcyB0aGF0IHVzZSBQQ1JFMjoKKworICBzcmMvcGNyZTJkZW1vLmMgICAgICAgICAgc2ltcGxlIGRlbW9uc3RyYXRpb24gb2YgY29kaW5nIGNhbGxzIHRvIFBDUkUyCisgIHNyYy9wY3JlMmdyZXAuYyAgICAgICAgICBzb3VyY2Ugb2YgYSBncmVwIHV0aWxpdHkgdGhhdCB1c2VzIFBDUkUyCisgIHNyYy9wY3JlMnRlc3QuYyAgICAgICAgICBjb21wcmVoZW5zaXZlIHRlc3QgcHJvZ3JhbQorICBzcmMvcGNyZTJfcHJpbnRpbnQuYyAgICAgcGFydCBvZiBwY3JlMnRlc3QKKyAgc3JjL3BjcmUyX2ppdF90ZXN0LmMgICAgIEpJVCB0ZXN0IHByb2dyYW0KKworKEMpIEF1eGlsaWFyeSBmaWxlczoKKworICAxMzJodG1sICAgICAgICAgICAgICAgICAgc2NyaXB0IHRvIHR1cm4gIm1hbiIgcGFnZXMgaW50byBIVE1MCisgIEFVVEhPUlMgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYXV0aG9yIG9mIFBDUkUyCisgIENoYW5nZUxvZyAgICAgICAgICAgICAgICBsb2cgb2YgY2hhbmdlcyB0byB0aGUgY29kZQorICBDbGVhblR4dCAgICAgICAgICAgICAgICAgc2NyaXB0IHRvIGNsZWFuIG5yb2ZmIG91dHB1dCBmb3IgdHh0IG1hbiBwYWdlcworICBEZXRyYWlsICAgICAgICAgICAgICAgICAgc2NyaXB0IHRvIHJlbW92ZSB0cmFpbGluZyBzcGFjZXMKKyAgSEFDS0lORyAgICAgICAgICAgICAgICAgIHNvbWUgbm90ZXMgYWJvdXQgdGhlIGludGVybmFscyBvZiBQQ1JFMgorICBJTlNUQUxMICAgICAgICAgICAgICAgICAgZ2VuZXJpYyBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zCisgIExJQ0VOQ0UgICAgICAgICAgICAgICAgICBjb25kaXRpb25zIGZvciB0aGUgdXNlIG9mIFBDUkUyCisgIENPUFlJTkcgICAgICAgICAgICAgICAgICB0aGUgc2FtZSwgdXNpbmcgR05VJ3Mgc3RhbmRhcmQgbmFtZQorICBNYWtlZmlsZS5pbiAgICAgICAgICAgICAgKSB0ZW1wbGF0ZSBmb3IgVW5peCBNYWtlZmlsZSwgd2hpY2ggaXMgYnVpbHQgYnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICAiY29uZmlndXJlIgorICBNYWtlZmlsZS5hbSAgICAgICAgICAgICAgKSB0aGUgYXV0b21ha2UgaW5wdXQgdGhhdCB3YXMgdXNlZCB0byBjcmVhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICBNYWtlZmlsZS5pbgorICBORVdTICAgICAgICAgICAgICAgICAgICAgaW1wb3J0YW50IGNoYW5nZXMgaW4gdGhpcyByZWxlYXNlCisgIE5PTi1BVVRPVE9PTFMtQlVJTEQgICAgICBub3RlcyBvbiBidWlsZGluZyBQQ1JFMiB3aXRob3V0IHVzaW5nIGF1dG90b29scworICBQcmVwYXJlUmVsZWFzZSAgICAgICAgICAgc2NyaXB0IHRvIG1ha2UgcHJlcGFyYXRpb25zIGZvciAibWFrZSBkaXN0IgorICBSRUFETUUgICAgICAgICAgICAgICAgICAgdGhpcyBmaWxlCisgIFJ1blRlc3QgICAgICAgICAgICAgICAgICBhIFVuaXggc2hlbGwgc2NyaXB0IGZvciBydW5uaW5nIHRlc3RzCisgIFJ1bkdyZXBUZXN0ICAgICAgICAgICAgICBhIFVuaXggc2hlbGwgc2NyaXB0IGZvciBwY3JlMmdyZXAgdGVzdHMKKyAgYWNsb2NhbC5tNCAgICAgICAgICAgICAgIG00IG1hY3JvcyAoZ2VuZXJhdGVkIGJ5ICJhY2xvY2FsIikKKyAgY29uZmlnLmd1ZXNzICAgICAgICAgICAgICkgZmlsZXMgdXNlZCBieSBsaWJ0b29sLAorICBjb25maWcuc3ViICAgICAgICAgICAgICAgKSAgIHVzZWQgb25seSB3aGVuIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkKKyAgY29uZmlndXJlICAgICAgICAgICAgICAgIGEgY29uZmlndXJpbmcgc2hlbGwgc2NyaXB0IChidWlsdCBieSBhdXRvY29uZikKKyAgY29uZmlndXJlLmFjICAgICAgICAgICAgICkgdGhlIGF1dG9jb25mIGlucHV0IHRoYXQgd2FzIHVzZWQgdG8gYnVpbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkgICAiY29uZmlndXJlIiBhbmQgY29uZmlnLmgKKyAgZGVwY29tcCAgICAgICAgICAgICAgICAgICkgc2NyaXB0IHRvIGZpbmQgcHJvZ3JhbSBkZXBlbmRlbmNpZXMsIGdlbmVyYXRlZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgIGF1dG9tYWtlCisgIGRvYy8qLjMgICAgICAgICAgICAgICAgICBtYW4gcGFnZSBzb3VyY2VzIGZvciBQQ1JFMgorICBkb2MvKi4xICAgICAgICAgICAgICAgICAgbWFuIHBhZ2Ugc291cmNlcyBmb3IgcGNyZTJncmVwIGFuZCBwY3JlMnRlc3QKKyAgZG9jL2luZGV4Lmh0bWwuc3JjICAgICAgIHRoZSBiYXNlIEhUTUwgcGFnZQorICBkb2MvaHRtbC8qICAgICAgICAgICAgICAgSFRNTCBkb2N1bWVudGF0aW9uCisgIGRvYy9wY3JlMi50eHQgICAgICAgICAgICBwbGFpbiB0ZXh0IHZlcnNpb24gb2YgdGhlIG1hbiBwYWdlcworICBkb2MvcGNyZTJ0ZXN0LnR4dCAgICAgICAgcGxhaW4gdGV4dCBkb2N1bWVudGF0aW9uIG9mIHRlc3QgcHJvZ3JhbQorICBpbnN0YWxsLXNoICAgICAgICAgICAgICAgYSBzaGVsbCBzY3JpcHQgZm9yIGluc3RhbGxpbmcgZmlsZXMKKyAgbGlicGNyZTItOC5wYy5pbiAgICAgICAgIHRlbXBsYXRlIGZvciBsaWJwY3JlMi04LnBjIGZvciBwa2ctY29uZmlnCisgIGxpYnBjcmUyLTE2LnBjLmluICAgICAgICB0ZW1wbGF0ZSBmb3IgbGlicGNyZTItMTYucGMgZm9yIHBrZy1jb25maWcKKyAgbGlicGNyZTItMzIucGMuaW4gICAgICAgIHRlbXBsYXRlIGZvciBsaWJwY3JlMi0zMi5wYyBmb3IgcGtnLWNvbmZpZworICBsaWJwY3JlMnBvc2l4LnBjLmluICAgICAgdGVtcGxhdGUgZm9yIGxpYnBjcmUycG9zaXgucGMgZm9yIHBrZy1jb25maWcKKyAgbHRtYWluLnNoICAgICAgICAgICAgICAgIGZpbGUgdXNlZCB0byBidWlsZCBhIGxpYnRvb2wgc2NyaXB0CisgIG1pc3NpbmcgICAgICAgICAgICAgICAgICApIGNvbW1vbiBzdHViIGZvciBhIGZldyBtaXNzaW5nIEdOVSBwcm9ncmFtcyB3aGlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgIGluc3RhbGxpbmcsIGdlbmVyYXRlZCBieSBhdXRvbWFrZQorICBta2luc3RhbGxkaXJzICAgICAgICAgICAgc2NyaXB0IGZvciBtYWtpbmcgaW5zdGFsbCBkaXJlY3RvcmllcworICBwZXJsdGVzdC5zaCAgICAgICAgICAgICAgU2NyaXB0IGZvciBydW5uaW5nIGEgUGVybCB0ZXN0IHByb2dyYW0KKyAgcGNyZTItY29uZmlnLmluICAgICAgICAgIHNvdXJjZSBvZiBzY3JpcHQgd2hpY2ggcmV0YWlucyBQQ1JFMiBpbmZvcm1hdGlvbgorICB0ZXN0ZGF0YS90ZXN0aW5wdXQqICAgICAgdGVzdCBkYXRhIGZvciBtYWluIGxpYnJhcnkgdGVzdHMKKyAgdGVzdGRhdGEvdGVzdG91dHB1dCogICAgIGV4cGVjdGVkIHRlc3QgcmVzdWx0cworICB0ZXN0ZGF0YS9ncmVwKiAgICAgICAgICAgaW5wdXQgYW5kIG91dHB1dCBmb3IgcGNyZTJncmVwIHRlc3RzCisgIHRlc3RkYXRhLyogICAgICAgICAgICAgICBvdGhlciBzdXBwb3J0aW5nIHRlc3QgZmlsZXMKKworKEQpIEF1eGlsaWFyeSBmaWxlcyBmb3IgY21ha2Ugc3VwcG9ydAorCisgIGNtYWtlL0NPUFlJTkctQ01BS0UtU0NSSVBUUworICBjbWFrZS9GaW5kUGFja2FnZUhhbmRsZVN0YW5kYXJkQXJncy5jbWFrZQorICBjbWFrZS9GaW5kRWRpdGxpbmUuY21ha2UKKyAgY21ha2UvRmluZFJlYWRsaW5lLmNtYWtlCisgIENNYWtlTGlzdHMudHh0CisgIGNvbmZpZy1jbWFrZS5oLmluCisKKyhFKSBBdXhpbGlhcnkgZmlsZXMgZm9yIGJ1aWxkaW5nIFBDUkUyICJieSBoYW5kIgorCisgIHBjcmUyLmguZ2VuZXJpYyAgICAgICAgICkgYSB2ZXJzaW9uIG9mIHRoZSBwdWJsaWMgUENSRTIgaGVhZGVyIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKSAgIGZvciB1c2UgaW4gbm9uLSJjb25maWd1cmUiIGVudmlyb25tZW50cworICBjb25maWcuaC5nZW5lcmljICAgICAgICApIGEgdmVyc2lvbiBvZiBjb25maWcuaCBmb3IgdXNlIGluIG5vbi0iY29uZmlndXJlIgorICAgICAgICAgICAgICAgICAgICAgICAgICApICAgZW52aXJvbm1lbnRzCisKK1BoaWxpcCBIYXplbAorRW1haWwgbG9jYWwgcGFydDogcGgxMAorRW1haWwgZG9tYWluOiBjYW0uYWMudWsKK0xhc3QgdXBkYXRlZDogMTYgT2N0b2JlciAyMDE1CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9pbmRleC5odG1sIGIvZGlzdDIvZG9jL2h0bWwvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDU5NjU3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvaW5kZXguaHRtbApAQCAtMCwwICsxLDI3MCBAQAorPGh0bWw+Cis8IS0tIFRoaXMgaXMgYSBtYW51YWxseSBtYWludGFpbmVkIGZpbGUgdGhhdCBpcyB0aGUgcm9vdCBvZiB0aGUgSFRNTCB2ZXJzaW9uIG9mCisgICAgIHRoZSBQQ1JFMiBkb2N1bWVudGF0aW9uLiBXaGVuIHRoZSBIVE1MIGRvY3VtZW50cyBhcmUgYnVpbHQgZnJvbSB0aGUgbWFuCisgICAgIHBhZ2UgdmVyc2lvbnMsIHRoZSBlbnRpcmUgZG9jL2h0bWwgZGlyZWN0b3J5IGlzIGVtcHRpZWQsIHRoaXMgZmlsZSBpcyB0aGVuCisgICAgIGNvcGllZCBpbnRvIGRvYy9odG1sL2luZGV4Lmh0bWwsIGFuZCB0aGUgcmVtYWluaW5nIGZpbGVzIHRoZXJlaW4gYXJlCisgICAgIGNyZWF0ZWQgYnkgdGhlIDEzMmh0bWwgc2NyaXB0LgorLS0+Cis8aGVhZD4KKzx0aXRsZT5QQ1JFMiBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+UGVybC1jb21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJOiBQQ1JFMik8L2gxPgorPHA+CitUaGUgSFRNTCBkb2N1bWVudGF0aW9uIGZvciBQQ1JFMiBjb25zaXN0cyBvZiBhIG51bWJlciBvZiBwYWdlcyB0aGF0IGFyZSBsaXN0ZWQKK2JlbG93IGluIGFscGhhYmV0aWNhbCBvcmRlci4gSWYgeW91IGFyZSBuZXcgdG8gUENSRTIsIHBsZWFzZSByZWFkIHRoZSBmaXJzdCBvbmUKK2ZpcnN0LgorPC9wPgorCis8dGFibGU+Cis8dHI+PHRkPjxhIGhyZWY9InBjcmUyLmh0bWwiPnBjcmUyPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0ludHJvZHVjdG9yeSBwYWdlPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyLWNvbmZpZy5odG1sIj5wY3JlMi1jb25maWc8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7SW5mb3JtYXRpb24gYWJvdXQgdGhlIGluc3RhbGxhdGlvbiBjb25maWd1cmF0aW9uPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPnBjcmUyYXBpPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1BDUkUyJ3MgbmF0aXZlIEFQSTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMmJ1aWxkLmh0bWwiPnBjcmUyYnVpbGQ8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7QnVpbGRpbmcgUENSRTI8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJjYWxsb3V0Lmh0bWwiPnBjcmUyY2FsbG91dDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtUaGUgPGk+Y2FsbG91dDwvaT4gZmFjaWxpdHk8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJjb21wYXQuaHRtbCI+cGNyZTJjb21wYXQ8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7Q29tcGFiaWxpdHkgd2l0aCBQZXJsPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyZGVtby5odG1sIj5wY3JlMmRlbW88L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7QSBkZW1vbnN0cmF0aW9uIEMgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIFBDUkUyIGxpYnJhcnk8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJncmVwLmh0bWwiPnBjcmUyZ3JlcDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtUaGUgPGI+cGNyZTJncmVwPC9iPiBjb21tYW5kPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyaml0Lmh0bWwiPnBjcmUyaml0PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0Rpc2N1c3Npb24gb2YgdGhlIGp1c3QtaW4tdGltZSBvcHRpbWl6YXRpb24gc3VwcG9ydDwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMmxpbWl0cy5odG1sIj5wY3JlMmxpbWl0czwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtEZXRhaWxzIG9mIHNpemUgYW5kIG90aGVyIGxpbWl0czwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMm1hdGNoaW5nLmh0bWwiPnBjcmUybWF0Y2hpbmc8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RGlzY3Vzc2lvbiBvZiB0aGUgdHdvIG1hdGNoaW5nIGFsZ29yaXRobXM8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJwYXJ0aWFsLmh0bWwiPnBjcmUycGFydGlhbDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtVc2luZyBQQ1JFMiBmb3IgcGFydGlhbCBtYXRjaGluZzwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCI+cGNyZTJwYXR0ZXJuPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1NwZWNpZmljYXRpb24gb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgc3VwcG9ydGVkIGJ5IFBDUkUyPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUycGVyZm9ybS5odG1sIj5wY3JlMnBlcmZvcm08L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7U29tZSBjb21tZW50cyBvbiBwZXJmb3JtYW5jZTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPnBjcmUycG9zaXg8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7VGhlIFBPU0lYIEFQSSB0byB0aGUgUENSRTIgOC1iaXQgbGlicmFyeTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMnNhbXBsZS5odG1sIj5wY3JlMnNhbXBsZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtEaXNjdXNzaW9uIG9mIHRoZSBwY3JlMmRlbW8gcHJvZ3JhbTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMnNlcmlhbGl6ZS5odG1sIj5wY3JlMnNlcmlhbGl6ZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTZXJpYWxpemluZyBmdW5jdGlvbnMgZm9yIHNhdmluZyBwcmVjb21waWxlZCBwYXR0ZXJuczwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMnN0YWNrLmh0bWwiPnBjcmUyc3RhY2s8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RGlzY3Vzc2lvbiBvZiBQQ1JFMidzIHN0YWNrIHVzYWdlPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyc3ludGF4Lmh0bWwiPnBjcmUyc3ludGF4PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1N5bnRheCBxdWljay1yZWZlcmVuY2Ugc3VtbWFyeTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMnRlc3QuaHRtbCI+cGNyZTJ0ZXN0PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1RoZSA8Yj5wY3JlMnRlc3Q8L2I+IGNvbW1hbmQgZm9yIHRlc3RpbmcgUENSRTI8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJ1bmljb2RlLmh0bWwiPnBjcmUydW5pY29kZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtEaXNjdXNzaW9uIG9mIFVuaWNvZGUgYW5kIFVURi04L1VURi0xNi9VVEYtMzIgc3VwcG9ydDwvdGQ+PC90cj4KKzwvdGFibGU+CisKKzxwPgorVGhlcmUgYXJlIGFsc28gaW5kaXZpZHVhbCBwYWdlcyB0aGF0IHN1bW1hcml6ZSB0aGUgaW50ZXJmYWNlIGZvciBlYWNoIGZ1bmN0aW9uCitpbiB0aGUgbGlicmFyeS4KKzwvcD4KKworPHRhYmxlPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2NhbGxvdXRfZW51bWVyYXRlLmh0bWwiPnBjcmUyX2NhbGxvdXRfZW51bWVyYXRlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0VudW1lcmF0ZSBjYWxsb3V0cyBpbiBhIGNvbXBpbGVkIHBhdHRlcm48L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfY29kZV9mcmVlLmh0bWwiPnBjcmUyX2NvZGVfZnJlZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtGcmVlIGEgY29tcGlsZWQgcGF0dGVybjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9jb21waWxlLmh0bWwiPnBjcmUyX2NvbXBpbGU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7Q29tcGlsZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5Lmh0bWwiPnBjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0NvcHkgYSBjb21waWxlIGNvbnRleHQ8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZS5odG1sIj5wY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0NyZWF0ZSBhIGNvbXBpbGUgY29udGV4dDwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZS5odG1sIj5wY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtGcmVlIGEgY29tcGlsZSBjb250ZXh0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2NvbmZpZy5odG1sIj5wY3JlMl9jb25maWc8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7U2hvdyBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gb3B0aW9uczwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9kZmFfbWF0Y2guaHRtbCI+cGNyZTJfZGZhX21hdGNoPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO01hdGNoIGEgY29tcGlsZWQgcGF0dGVybiB0byBhIHN1YmplY3Qgc3RyaW5nCisgICAgKERGQSBhbGdvcml0aG07IDxpPm5vdDwvaT4gUGVybCBjb21wYXRpYmxlKTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9nZW5lcmFsX2NvbnRleHRfY29weS5odG1sIj5wY3JlMl9nZW5lcmFsX2NvbnRleHRfY29weTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtDb3B5IGEgZ2VuZXJhbCBjb250ZXh0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2dlbmVyYWxfY29udGV4dF9jcmVhdGUuaHRtbCI+cGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtDcmVhdGUgYSBnZW5lcmFsIGNvbnRleHQ8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUuaHRtbCI+cGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RnJlZSBhIGdlbmVyYWwgY29udGV4dDwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZS5odG1sIj5wY3JlMl9nZXRfZXJyb3JfbWVzc2FnZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtGcmVlIHN0dWR5IGRhdGE8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfZ2V0X21hcmsuaHRtbCI+cGNyZTJfZ2V0X21hcms8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7R2V0IGEgKCpNQVJLKSBuYW1lPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2dldF9vdmVjdG9yX2NvdW50Lmh0bWwiPnBjcmUyX2dldF9vdmVjdG9yX2NvdW50PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0dldCB0aGUgb3ZlY3RvciBjb3VudDwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyLmh0bWwiPnBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXI8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7R2V0IGEgcG9pbnRlciB0byB0aGUgb3ZlY3RvcjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9nZXRfc3RhcnRjaGFyLmh0bWwiPnBjcmUyX2dldF9zdGFydGNoYXI8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7R2V0IHRoZSBzdGFydGluZyBjaGFyYWN0ZXIgb2Zmc2V0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2ppdF9jb21waWxlLmh0bWwiPnBjcmUyX2ppdF9jb21waWxlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1Byb2Nlc3MgYSBjb21waWxlZCBwYXR0ZXJuIHdpdGggdGhlIEpJVCBjb21waWxlcjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5Lmh0bWwiPnBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnk8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RnJlZSB1bnVzZWQgSklUIG1lbW9yeTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9qaXRfbWF0Y2guaHRtbCI+cGNyZTJfaml0X21hdGNoPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0Zhc3QgcGF0aCBpbnRlcmZhY2UgdG8gSklUIG1hdGNoaW5nPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2ppdF9zdGFja19hc3NpZ24uaHRtbCI+cGNyZTJfaml0X3N0YWNrX2Fzc2lnbjwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtBc3NpZ24gc3RhY2sgZm9yIEpJVCBtYXRjaGluZzwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9qaXRfc3RhY2tfY3JlYXRlLmh0bWwiPnBjcmUyX2ppdF9zdGFja19jcmVhdGU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7Q3JlYXRlIGEgc3RhY2sgZm9yIEpJVCBtYXRjaGluZzwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9qaXRfc3RhY2tfZnJlZS5odG1sIj5wY3JlMl9qaXRfc3RhY2tfZnJlZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtGcmVlIGEgSklUIG1hdGNoaW5nIHN0YWNrPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX21ha2V0YWJsZXMuaHRtbCI+cGNyZTJfbWFrZXRhYmxlczwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtCdWlsZCBjaGFyYWN0ZXIgdGFibGVzIGluIGN1cnJlbnQgbG9jYWxlPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX21hdGNoLmh0bWwiPnBjcmUyX21hdGNoPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO01hdGNoIGEgY29tcGlsZWQgcGF0dGVybiB0byBhIHN1YmplY3Qgc3RyaW5nCisgICAgKFBlcmwgY29tcGF0aWJsZSk8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5Lmh0bWwiPnBjcmUyX21hdGNoX2NvbnRleHRfY29weTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtDb3B5IGEgbWF0Y2ggY29udGV4dDwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZS5odG1sIj5wY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtDcmVhdGUgYSBtYXRjaCBjb250ZXh0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX21hdGNoX2NvbnRleHRfZnJlZS5odG1sIj5wY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RnJlZSBhIG1hdGNoIGNvbnRleHQ8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUuaHRtbCI+cGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7Q3JlYXRlIGEgbWF0Y2ggZGF0YSBibG9jazwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4uaHRtbCI+cGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0NyZWF0ZSBhIG1hdGNoIGRhdGEgYmxvY2sgZ2V0dGluZyBzaXplIGZyb20gcGF0dGVybjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9tYXRjaF9kYXRhX2ZyZWUuaHRtbCI+cGNyZTJfbWF0Y2hfZGF0YV9mcmVlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0ZyZWUgYSBtYXRjaCBkYXRhIGJsb2NrPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3BhdHRlcm5faW5mby5odG1sIj5wY3JlMl9wYXR0ZXJuX2luZm88L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RXh0cmFjdCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhdHRlcm48L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2VyaWFsaXplX2RlY29kZS5odG1sIj5wY3JlMl9zZXJpYWxpemVfZGVjb2RlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0RlY29kZSBzZXJpYWxpemVkIGNvbXBpbGVkIHBhdHRlcm5zPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUuaHRtbCI+cGNyZTJfc2VyaWFsaXplX2VuY29kZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTZXJpYWxpemUgY29tcGlsZWQgcGF0dGVybnMgZm9yIHNhdmUvcmVzdG9yZTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zZXJpYWxpemVfZnJlZS5odG1sIj5wY3JlMl9zZXJpYWxpemVfZnJlZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtGcmVlIHNlcmlhbGl6ZWQgY29tcGlsZWQgcGF0dGVybnM8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXMuaHRtbCI+cGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXM8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7R2V0IG51bWJlciBvZiBzZXJpYWxpemVkIGNvbXBpbGVkIHBhdHRlcm5zPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3NldF9ic3IuaHRtbCI+cGNyZTJfc2V0X2JzcjwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTZXQgXFIgY29udmVudGlvbjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zZXRfY2FsbG91dC5odG1sIj5wY3JlMl9zZXRfY2FsbG91dDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTZXQgdXAgYSBjYWxsb3V0IGZ1bmN0aW9uPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzLmh0bWwiPnBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1NldCBjaGFyYWN0ZXIgdGFibGVzPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZC5odG1sIj5wY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQ8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7U2V0IHVwIGEgY29tcGlsZSByZWN1cnNpb24gZ3VhcmQgZnVuY3Rpb248L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2V0X21hdGNoX2xpbWl0Lmh0bWwiPnBjcmUyX3NldF9tYXRjaF9saW1pdDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTZXQgdGhlIG1hdGNoIGxpbWl0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3NldF9tYXhfcGF0dGVybl9sZW5ndGguaHRtbCI+cGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTZXQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIHBhdHRlcm48L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2V0X25ld2xpbmUuaHRtbCI+cGNyZTJfc2V0X25ld2xpbmU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7U2V0IHRoZSBuZXdsaW5lIGNvbnZlbnRpb248L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2V0X29mZnNldF9saW1pdC5odG1sIj5wY3JlMl9zZXRfb2Zmc2V0X2xpbWl0PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1NldCB0aGUgb2Zmc2V0IGxpbWl0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3NldF9wYXJlbnNfbmVzdF9saW1pdC5odG1sIj5wY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQ8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7U2V0IHRoZSBwYXJlbnRoZXNlcyBuZXN0aW5nIGxpbWl0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3NldF9yZWN1cnNpb25fbGltaXQuaHRtbCI+cGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTZXQgdGhlIG1hdGNoIHJlY3Vyc2lvbiBsaW1pdDwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50Lmh0bWwiPnBjcmUyX3NldF9yZWN1cnNpb25fbWVtb3J5X21hbmFnZW1lbnQ8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7U2V0IG1hdGNoIHJlY3Vyc2lvbiBtZW1vcnkgbWFuYWdlbWVudDwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zdWJzdGl0dXRlLmh0bWwiPnBjcmUyX3N1YnN0aXR1dGU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7TWF0Y2ggYSBjb21waWxlZCBwYXR0ZXJuIHRvIGEgc3ViamVjdCBzdHJpbmcgYW5kIGRvCisgICAgc3Vic3RpdHV0aW9uczwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUuaHRtbCI+cGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0V4dHJhY3QgbmFtZWQgc3Vic3RyaW5nIGludG8gZ2l2ZW4gYnVmZmVyPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyLmh0bWwiPnBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0V4dHJhY3QgbnVtYmVyZWQgc3Vic3RyaW5nIGludG8gZ2l2ZW4gYnVmZmVyPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3N1YnN0cmluZ19mcmVlLmh0bWwiPnBjcmUyX3N1YnN0cmluZ19mcmVlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0ZyZWUgZXh0cmFjdGVkIHN1YnN0cmluZzwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZS5odG1sIj5wY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtFeHRyYWN0IG5hbWVkIHN1YnN0cmluZyBpbnRvIG5ldyBtZW1vcnk8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlci5odG1sIj5wY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0V4dHJhY3QgbnVtYmVyZWQgc3Vic3RyaW5nIGludG8gbmV3IG1lbW9yeTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZS5odG1sIj5wY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtGaW5kIGxlbmd0aCBvZiBuYW1lZCBzdWJzdHJpbmc8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlci5odG1sIj5wY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0ZpbmQgbGVuZ3RoIG9mIG51bWJlcmVkIHN1YnN0cmluZzwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlLmh0bWwiPnBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RnJlZSBsaXN0IG9mIGV4dHJhY3RlZCBzdWJzdHJpbmdzPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3N1YnN0cmluZ19saXN0X2dldC5odG1sIj5wY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQ8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RXh0cmFjdCBhbGwgc3Vic3RyaW5ncyBpbnRvIG5ldyBtZW1vcnk8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuLmh0bWwiPnBjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2NhbjwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtGaW5kIHRhYmxlIGVudHJpZXMgZm9yIGdpdmVuIHN0cmluZyBuYW1lPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lLmh0bWwiPnBjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0NvbnZlcnQgY2FwdHVyZWQgc3RyaW5nIG5hbWUgdG8gbnVtYmVyPC90ZD48L3RyPgorPC90YWJsZT4KKworPC9odG1sPgorCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMi1jb25maWcuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyLWNvbmZpZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MWQ3NjAKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMi1jb25maWcuaHRtbApAQCAtMCwwICsxLDEwMiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMi1jb25maWcgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyLWNvbmZpZyBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPHVsPgorPGxpPjxhIG5hbWU9IlRPQzEiIGhyZWY9IiNTRUMxIj5TWU5PUFNJUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MyIiBocmVmPSIjU0VDMiI+REVTQ1JJUFRJT048L2E+Cis8bGk+PGEgbmFtZT0iVE9DMyIgaHJlZj0iI1NFQzMiPk9QVElPTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNCIgaHJlZj0iI1NFQzQiPlNFRSBBTFNPPC9hPgorPGxpPjxhIG5hbWU9IlRPQzUiIGhyZWY9IiNTRUM1Ij5BVVRIT1I8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNiIgaHJlZj0iI1NFQzYiPlJFVklTSU9OPC9hPgorPC91bD4KKzxicj48YSBuYW1lPSJTRUMxIiBocmVmPSIjVE9DMSI+U1lOT1BTSVM8L2E+PGJyPgorPFA+Cis8Yj5wY3JlMi1jb25maWcgIFstLXByZWZpeF0gWy0tZXhlYy1wcmVmaXhdIFstLXZlcnNpb25dPC9iPgorPGI+ICAgICAgICAgICAgIFstLWxpYnM4XSBbLS1saWJzMTZdIFstLWxpYnMzMl0gWy0tbGlicy1wb3NpeF08L2I+Cis8Yj4gICAgICAgICAgICAgWy0tY2ZsYWdzXSBbLS1jZmxhZ3MtcG9zaXhdPC9iPgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzIiIGhyZWY9IiNUT0MxIj5ERVNDUklQVElPTjwvYT48YnI+Cis8UD4KKzxiPnBjcmUyLWNvbmZpZzwvYj4gcmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgaW5zdGFsbGVkIFBDUkUyIGxpYnJhcmllcworYW5kIHRoZSBvcHRpb25zIHJlcXVpcmVkIHRvIGNvbXBpbGUgYSBwcm9ncmFtIHRvIHVzZSB0aGVtLiBTb21lIG9mIHRoZSBvcHRpb25zCithcHBseSBvbmx5IHRvIHRoZSA4LWJpdCwgb3IgMTYtYml0LCBvciAzMi1iaXQgbGlicmFyaWVzLCByZXNwZWN0aXZlbHksIGFuZCBhcmUKK25vdCBhdmFpbGFibGUgZm9yIGxpYnJhcmllcyB0aGF0IGhhdmUgbm90IGJlZW4gYnVpbHQuIElmIGFuIHVuYXZhaWxhYmxlIG9wdGlvbgoraXMgZW5jb3VudGVyZWQsIHRoZSAidXNhZ2UiIGluZm9ybWF0aW9uIGlzIG91dHB1dC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMzIiBocmVmPSIjVE9DMSI+T1BUSU9OUzwvYT48YnI+Cis8UD4KKzxiPi0tcHJlZml4PC9iPgorV3JpdGVzIHRoZSBkaXJlY3RvcnkgcHJlZml4IHVzZWQgaW4gdGhlIFBDUkUyIGluc3RhbGxhdGlvbiBmb3IgYXJjaGl0ZWN0dXJlCitpbmRlcGVuZGVudCBmaWxlcyAoPGk+L3VzcjwvaT4gb24gbWFueSBzeXN0ZW1zLCA8aT4vdXNyL2xvY2FsPC9pPiBvbiBzb21lCitzeXN0ZW1zKSB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LgorPC9QPgorPFA+Cis8Yj4tLWV4ZWMtcHJlZml4PC9iPgorV3JpdGVzIHRoZSBkaXJlY3RvcnkgcHJlZml4IHVzZWQgaW4gdGhlIFBDUkUyIGluc3RhbGxhdGlvbiBmb3IgYXJjaGl0ZWN0dXJlCitkZXBlbmRlbnQgZmlsZXMgKG5vcm1hbGx5IHRoZSBzYW1lIGFzIDxiPi0tcHJlZml4PC9iPikgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KKzwvUD4KKzxQPgorPGI+LS12ZXJzaW9uPC9iPgorV3JpdGVzIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgaW5zdGFsbGVkIFBDUkUyIGxpYnJhcmllcyB0byB0aGUgc3RhbmRhcmQKK291dHB1dC4KKzwvUD4KKzxQPgorPGI+LS1saWJzODwvYj4KK1dyaXRlcyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyByZXF1aXJlZCB0byBsaW5rCit3aXRoIHRoZSA4LWJpdCBQQ1JFMiBsaWJyYXJ5ICg8Yj4tbHBjcmUyLTg8L2I+IG9uIG1hbnkgc3lzdGVtcykuCis8L1A+Cis8UD4KKzxiPi0tbGliczE2PC9iPgorV3JpdGVzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHJlcXVpcmVkIHRvIGxpbmsKK3dpdGggdGhlIDE2LWJpdCBQQ1JFMiBsaWJyYXJ5ICg8Yj4tbHBjcmUyLTE2PC9iPiBvbiBtYW55IHN5c3RlbXMpLgorPC9QPgorPFA+Cis8Yj4tLWxpYnMzMjwvYj4KK1dyaXRlcyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyByZXF1aXJlZCB0byBsaW5rCit3aXRoIHRoZSAzMi1iaXQgUENSRTIgbGlicmFyeSAoPGI+LWxwY3JlMi0zMjwvYj4gb24gbWFueSBzeXN0ZW1zKS4KKzwvUD4KKzxQPgorPGI+LS1saWJzLXBvc2l4PC9iPgorV3JpdGVzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHJlcXVpcmVkIHRvIGxpbmsgd2l0aAorUENSRTIncyBQT1NJWCBBUEkgd3JhcHBlciBsaWJyYXJ5ICg8Yj4tbHBjcmUyLXBvc2l4PC9iPiA8Yj4tbHBjcmUyLTg8L2I+IG9uIG1hbnkKK3N5c3RlbXMpLgorPC9QPgorPFA+Cis8Yj4tLWNmbGFnczwvYj4KK1dyaXRlcyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyByZXF1aXJlZCB0byBjb21waWxlCitmaWxlcyB0aGF0IHVzZSBQQ1JFMiAodGhpcyBtYXkgaW5jbHVkZSBzb21lIDxiPi1JPC9iPiBvcHRpb25zLCBidXQgaXMgYmxhbmsgb24KK21hbnkgc3lzdGVtcykuCis8L1A+Cis8UD4KKzxiPi0tY2ZsYWdzLXBvc2l4PC9iPgorV3JpdGVzIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHJlcXVpcmVkIHRvIGNvbXBpbGUKK2ZpbGVzIHRoYXQgdXNlIFBDUkUyJ3MgUE9TSVggQVBJIHdyYXBwZXIgbGlicmFyeSAodGhpcyBtYXkgaW5jbHVkZSBzb21lCis8Yj4tSTwvYj4gb3B0aW9ucywgYnV0IGlzIGJsYW5rIG9uIG1hbnkgc3lzdGVtcykuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNCIgaHJlZj0iI1RPQzEiPlNFRSBBTFNPPC9hPjxicj4KKzxQPgorPGI+cGNyZTIoMyk8L2I+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNSIgaHJlZj0iI1RPQzEiPkFVVEhPUjwvYT48YnI+Cis8UD4KK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBNYXJrIEJha2VyIGZvciB0aGUgRGViaWFuIEdOVS9MaW51eAorc3lzdGVtLiBJdCBoYXMgYmVlbiBzdWJzZXF1ZW50bHkgcmV2aXNlZCBhcyBhIGdlbmVyaWMgUENSRTIgbWFuIHBhZ2UuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNiIgaHJlZj0iI1RPQzEiPlJFVklTSU9OPC9hPjxicj4KKzxQPgorTGFzdCB1cGRhdGVkOiAyOCBTZXB0ZW1iZXIgMjAxNAorPGJyPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTIuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdhYjhlOQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyLmh0bWwKQEAgLTAsMCArMSwxOTggQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTIgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8dWw+Cis8bGk+PGEgbmFtZT0iVE9DMSIgaHJlZj0iI1NFQzEiPklOVFJPRFVDVElPTjwvYT4KKzxsaT48YSBuYW1lPSJUT0MyIiBocmVmPSIjU0VDMiI+U0VDVVJJVFkgQ09OU0lERVJBVElPTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMyIgaHJlZj0iI1NFQzMiPlVTRVIgRE9DVU1FTlRBVElPTjwvYT4KKzxsaT48YSBuYW1lPSJUT0M0IiBocmVmPSIjU0VDNCI+QVVUSE9SPC9hPgorPGxpPjxhIG5hbWU9IlRPQzUiIGhyZWY9IiNTRUM1Ij5SRVZJU0lPTjwvYT4KKzwvdWw+Cis8YnI+PGEgbmFtZT0iU0VDMSIgaHJlZj0iI1RPQzEiPklOVFJPRFVDVElPTjwvYT48YnI+Cis8UD4KK1BDUkUyIGlzIHRoZSBuYW1lIHVzZWQgZm9yIGEgcmV2aXNlZCBBUEkgZm9yIHRoZSBQQ1JFIGxpYnJhcnksIHdoaWNoIGlzIGEgc2V0CitvZiBmdW5jdGlvbnMsIHdyaXR0ZW4gaW4gQywgdGhhdCBpbXBsZW1lbnQgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gbWF0Y2hpbmcKK3VzaW5nIHRoZSBzYW1lIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzIFBlcmwsIHdpdGgganVzdCBhIGZldyBkaWZmZXJlbmNlcy4gU29tZQorZmVhdHVyZXMgdGhhdCBhcHBlYXJlZCBpbiBQeXRob24gYW5kIHRoZSBvcmlnaW5hbCBQQ1JFIGJlZm9yZSB0aGV5IGFwcGVhcmVkIGluCitQZXJsIGFyZSBhbHNvIGF2YWlsYWJsZSB1c2luZyB0aGUgUHl0aG9uIHN5bnRheC4gVGhlcmUgaXMgYWxzbyBzb21lIHN1cHBvcnQgZm9yCitvbmUgb3IgdHdvIC5ORVQgYW5kIE9uaWd1cnVtYSBzeW50YXggaXRlbXMsIGFuZCB0aGVyZSBhcmUgb3B0aW9ucyBmb3IKK3JlcXVlc3Rpbmcgc29tZSBtaW5vciBjaGFuZ2VzIHRoYXQgZ2l2ZSBiZXR0ZXIgRUNNQVNjcmlwdCAoYWthIEphdmFTY3JpcHQpCitjb21wYXRpYmlsaXR5LgorPC9QPgorPFA+CitUaGUgc291cmNlIGNvZGUgZm9yIFBDUkUyIGNhbiBiZSBjb21waWxlZCB0byBzdXBwb3J0IDgtYml0LCAxNi1iaXQsIG9yIDMyLWJpdAorY29kZSB1bml0cywgd2hpY2ggbWVhbnMgdGhhdCB1cCB0byB0aHJlZSBzZXBhcmF0ZSBsaWJyYXJpZXMgbWF5IGJlIGluc3RhbGxlZC4KK1RoZSBvcmlnaW5hbCB3b3JrIHRvIGV4dGVuZCBQQ1JFIHRvIDE2LWJpdCBhbmQgMzItYml0IGNvZGUgdW5pdHMgd2FzIGRvbmUgYnkKK1pvbHRhbiBIZXJjemVnIGFuZCBDaHJpc3RpYW4gUGVyc2NoLCByZXNwZWN0aXZlbHkuIEluIGFsbCB0aHJlZSBjYXNlcywgc3RyaW5ncworY2FuIGJlIGludGVycHJldGVkIGVpdGhlciBhcyBvbmUgY2hhcmFjdGVyIHBlciBjb2RlIHVuaXQsIG9yIGFzIFVURi1lbmNvZGVkCitVbmljb2RlLCB3aXRoIHN1cHBvcnQgZm9yIFVuaWNvZGUgZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0aWVzLiBVbmljb2RlIHN1cHBvcnQKK2lzIG9wdGlvbmFsIGF0IGJ1aWxkIHRpbWUgKGJ1dCBpcyB0aGUgZGVmYXVsdCkuIEhvd2V2ZXIsIHByb2Nlc3Npbmcgc3RyaW5ncyBhcworVVRGIGNvZGUgdW5pdHMgbXVzdCBiZSBlbmFibGVkIGV4cGxpY2l0bHkgYXQgcnVuIHRpbWUuIFRoZSB2ZXJzaW9uIG9mIFVuaWNvZGUKK2luIHVzZSBjYW4gYmUgZGlzY292ZXJlZCBieSBydW5uaW5nCis8cHJlPgorICBwY3JlMnRlc3QgLUMKKzwvUFJFPgorPC9QPgorPFA+CitUaGUgdGhyZWUgbGlicmFyaWVzIGNvbnRhaW4gaWRlbnRpY2FsIHNldHMgb2YgZnVuY3Rpb25zLCB3aXRoIG5hbWVzIGVuZGluZyBpbgorXzgsIF8xNiwgb3IgXzMyLCByZXNwZWN0aXZlbHkgKGZvciBleGFtcGxlLCA8Yj5wY3JlMl9jb21waWxlXzgoKTwvYj4pLiBIb3dldmVyLAorYnkgZGVmaW5pbmcgUENSRTJfQ09ERV9VTklUX1dJRFRIIHRvIGJlIDgsIDE2LCBvciAzMiwgYSBwcm9ncmFtIHRoYXQgdXNlcyBqdXN0CitvbmUgY29kZSB1bml0IHdpZHRoIGNhbiBiZSB3cml0dGVuIHVzaW5nIGdlbmVyaWMgbmFtZXMgc3VjaCBhcworPGI+cGNyZTJfY29tcGlsZSgpPC9iPiwgYW5kIHRoZSBkb2N1bWVudGF0aW9uIGlzIHdyaXR0ZW4gYXNzdW1pbmcgdGhhdCB0aGlzIGlzCit0aGUgY2FzZS4KKzwvUD4KKzxQPgorSW4gYWRkaXRpb24gdG8gdGhlIFBlcmwtY29tcGF0aWJsZSBtYXRjaGluZyBmdW5jdGlvbiwgUENSRTIgY29udGFpbnMgYW4KK2FsdGVybmF0aXZlIGZ1bmN0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgc2FtZSBjb21waWxlZCBwYXR0ZXJucyBpbiBhIGRpZmZlcmVudAord2F5LiBJbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMsIHRoZSBhbHRlcm5hdGl2ZSBmdW5jdGlvbiBoYXMgc29tZSBhZHZhbnRhZ2VzLgorRm9yIGEgZGlzY3Vzc2lvbiBvZiB0aGUgdHdvIG1hdGNoaW5nIGFsZ29yaXRobXMsIHNlZSB0aGUKKzxhIGhyZWY9InBjcmUybWF0Y2hpbmcuaHRtbCI+PGI+cGNyZTJtYXRjaGluZzwvYj48L2E+CitwYWdlLgorPC9QPgorPFA+CitEZXRhaWxzIG9mIGV4YWN0bHkgd2hpY2ggUGVybCByZWd1bGFyIGV4cHJlc3Npb24gZmVhdHVyZXMgYXJlIGFuZCBhcmUgbm90CitzdXBwb3J0ZWQgYnkgUENSRTIgYXJlIGdpdmVuIGluIHNlcGFyYXRlIGRvY3VtZW50cy4gU2VlIHRoZQorPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwiPjxiPnBjcmUycGF0dGVybjwvYj48L2E+CithbmQKKzxhIGhyZWY9InBjcmUyY29tcGF0Lmh0bWwiPjxiPnBjcmUyY29tcGF0PC9iPjwvYT4KK3BhZ2VzLiBUaGVyZSBpcyBhIHN5bnRheCBzdW1tYXJ5IGluIHRoZQorPGEgaHJlZj0icGNyZTJzeW50YXguaHRtbCI+PGI+cGNyZTJzeW50YXg8L2I+PC9hPgorcGFnZS4KKzwvUD4KKzxQPgorU29tZSBmZWF0dXJlcyBvZiBQQ1JFMiBjYW4gYmUgaW5jbHVkZWQsIGV4Y2x1ZGVkLCBvciBjaGFuZ2VkIHdoZW4gdGhlIGxpYnJhcnkKK2lzIGJ1aWx0LiBUaGUKKzxhIGhyZWY9InBjcmUyX2NvbmZpZy5odG1sIj48Yj5wY3JlMl9jb25maWcoKTwvYj48L2E+CitmdW5jdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYSBjbGllbnQgdG8gZGlzY292ZXIgd2hpY2ggZmVhdHVyZXMgYXJlCithdmFpbGFibGUuIFRoZSBmZWF0dXJlcyB0aGVtc2VsdmVzIGFyZSBkZXNjcmliZWQgaW4gdGhlCis8YSBocmVmPSJwY3JlMmJ1aWxkLmh0bWwiPjxiPnBjcmUyYnVpbGQ8L2I+PC9hPgorcGFnZS4gRG9jdW1lbnRhdGlvbiBhYm91dCBidWlsZGluZyBQQ1JFMiBmb3IgdmFyaW91cyBvcGVyYXRpbmcgc3lzdGVtcyBjYW4gYmUKK2ZvdW5kIGluIHRoZQorPGEgaHJlZj0iUkVBRE1FLnR4dCI+PGI+UkVBRE1FPC9iPjwvYT4KK2FuZAorPGEgaHJlZj0iTk9OLUFVVE9UT09MUy1CVUlMRC50eHQiPjxiPk5PTi1BVVRPVE9PTFNfQlVJTEQ8L2I+PC9hPgorZmlsZXMgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24uCis8L1A+Cis8UD4KK1RoZSBsaWJyYXJpZXMgY29udGFpbnMgYSBudW1iZXIgb2YgdW5kb2N1bWVudGVkIGludGVybmFsIGZ1bmN0aW9ucyBhbmQgZGF0YQordGFibGVzIHRoYXQgYXJlIHVzZWQgYnkgbW9yZSB0aGFuIG9uZSBvZiB0aGUgZXhwb3J0ZWQgZXh0ZXJuYWwgZnVuY3Rpb25zLCBidXQKK3doaWNoIGFyZSBub3QgaW50ZW5kZWQgZm9yIHVzZSBieSBleHRlcm5hbCBjYWxsZXJzLiBUaGVpciBuYW1lcyBhbGwgYmVnaW4gd2l0aAorIl9wY3JlMiIsIHdoaWNoIGhvcGVmdWxseSB3aWxsIG5vdCBwcm92b2tlIGFueSBuYW1lIGNsYXNoZXMuIEluIHNvbWUKK2Vudmlyb25tZW50cywgaXQgaXMgcG9zc2libGUgdG8gY29udHJvbCB3aGljaCBleHRlcm5hbCBzeW1ib2xzIGFyZSBleHBvcnRlZAord2hlbiBhIHNoYXJlZCBsaWJyYXJ5IGlzIGJ1aWx0LCBhbmQgaW4gdGhlc2UgY2FzZXMgdGhlIHVuZG9jdW1lbnRlZCBzeW1ib2xzIGFyZQorbm90IGV4cG9ydGVkLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzIiIGhyZWY9IiNUT0MxIj5TRUNVUklUWSBDT05TSURFUkFUSU9OUzwvYT48YnI+Cis8UD4KK0lmIHlvdSBhcmUgdXNpbmcgUENSRTIgaW4gYSBub24tVVRGIGFwcGxpY2F0aW9uIHRoYXQgcGVybWl0cyB1c2VycyB0byBzdXBwbHkKK2FyYml0cmFyeSBwYXR0ZXJucyBmb3IgY29tcGlsYXRpb24sIHlvdSBzaG91bGQgYmUgYXdhcmUgb2YgYSBmZWF0dXJlIHRoYXQKK2FsbG93cyB1c2VycyB0byB0dXJuIG9uIFVURiBzdXBwb3J0IGZyb20gd2l0aGluIGEgcGF0dGVybi4gRm9yIGV4YW1wbGUsIGFuCis4LWJpdCBwYXR0ZXJuIHRoYXQgYmVnaW5zIHdpdGggIigqVVRGKSIgdHVybnMgb24gVVRGLTggbW9kZSwgd2hpY2ggaW50ZXJwcmV0cworcGF0dGVybnMgYW5kIHN1YmplY3RzIGFzIHN0cmluZ3Mgb2YgVVRGLTggY29kZSB1bml0cyBpbnN0ZWFkIG9mIGluZGl2aWR1YWwKKzgtYml0IGNoYXJhY3RlcnMuIFRoaXMgY2F1c2VzIGJvdGggdGhlIHBhdHRlcm4gYW5kIGFueSBkYXRhIGFnYWluc3Qgd2hpY2ggaXQgaXMKK21hdGNoZWQgdG8gYmUgY2hlY2tlZCBmb3IgVVRGLTggdmFsaWRpdHkuIElmIHRoZSBkYXRhIHN0cmluZyBpcyB2ZXJ5IGxvbmcsIHN1Y2gKK2EgY2hlY2sgbWlnaHQgdXNlIHN1ZmZpY2llbnRseSBtYW55IHJlc291cmNlcyBhcyB0byBjYXVzZSB5b3VyIGFwcGxpY2F0aW9uIHRvCitsb3NlIHBlcmZvcm1hbmNlLgorPC9QPgorPFA+CitPbmUgd2F5IG9mIGd1YXJkaW5nIGFnYWluc3QgdGhpcyBwb3NzaWJpbGl0eSBpcyB0byB1c2UgdGhlCis8Yj5wY3JlMl9wYXR0ZXJuX2luZm8oKTwvYj4gZnVuY3Rpb24gdG8gY2hlY2sgdGhlIGNvbXBpbGVkIHBhdHRlcm4ncyBvcHRpb25zIGZvcgorUENSRTJfVVRGLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNldCB0aGUgUENSRTJfTkVWRVJfVVRGIG9wdGlvbiB3aGVuIGNhbGxpbmcKKzxiPnBjcmUyX2NvbXBpbGUoKTwvYj4uIFRoaXMgY2F1c2VzIGFuIGNvbXBpbGUgdGltZSBlcnJvciBpZiBhIHBhdHRlcm4gY29udGFpbnMKK2EgVVRGLXNldHRpbmcgc2VxdWVuY2UuCis8L1A+Cis8UD4KK1RoZSB1c2Ugb2YgVW5pY29kZSBwcm9wZXJ0aWVzIGZvciBjaGFyYWN0ZXIgdHlwZXMgc3VjaCBhcyBcZCBjYW4gYWxzbyBiZQorZW5hYmxlZCBmcm9tIHdpdGhpbiB0aGUgcGF0dGVybiwgYnkgc3BlY2lmeWluZyAiKCpVQ1ApIi4gVGhpcyBmZWF0dXJlIGNhbiBiZQorZGlzYWxsb3dlZCBieSBzZXR0aW5nIHRoZSBQQ1JFMl9ORVZFUl9VQ1Agb3B0aW9uLgorPC9QPgorPFA+CitJZiB5b3VyIGFwcGxpY2F0aW9uIGlzIG9uZSB0aGF0IHN1cHBvcnRzIFVURiwgYmUgYXdhcmUgdGhhdCB2YWxpZGl0eSBjaGVja2luZworY2FuIHRha2UgdGltZS4gSWYgdGhlIHNhbWUgZGF0YSBzdHJpbmcgaXMgdG8gYmUgbWF0Y2hlZCBtYW55IHRpbWVzLCB5b3UgY2FuIHVzZQordGhlIFBDUkUyX05PX1VURl9DSEVDSyBvcHRpb24gZm9yIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgbWF0Y2hlcyB0byBhdm9pZAorcnVubmluZyByZWR1bmRhbnQgY2hlY2tzLgorPC9QPgorPFA+CitUaGUgdXNlIG9mIHRoZSBcQyBlc2NhcGUgc2VxdWVuY2UgaW4gYSBVVEYtOCBvciBVVEYtMTYgcGF0dGVybiBjYW4gbGVhZCB0bworcHJvYmxlbXMsIGJlY2F1c2UgaXQgbWF5IGxlYXZlIHRoZSBjdXJyZW50IG1hdGNoaW5nIHBvaW50IGluIHRoZSBtaWRkbGUgb2YgYQorbXVsdGktY29kZS11bml0IGNoYXJhY3Rlci4gVGhlIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DIG9wdGlvbiBjYW4gYmUgdXNlZCBieSBhbgorYXBwbGljYXRpb24gdG8gbG9jayBvdXQgdGhlIHVzZSBvZiBcQywgY2F1c2luZyBhIGNvbXBpbGUtdGltZSBlcnJvciBpZiBpdCBpcworZW5jb3VudGVyZWQuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gYnVpbGQgUENSRTIgd2l0aCB0aGUgdXNlIG9mIFxDIHBlcm1hbmVudGx5CitkaXNhYmxlZC4KKzwvUD4KKzxQPgorQW5vdGhlciB3YXkgdGhhdCBwZXJmb3JtYW5jZSBjYW4gYmUgaGl0IGlzIGJ5IHJ1bm5pbmcgYSBwYXR0ZXJuIHRoYXQgaGFzIGEgdmVyeQorbGFyZ2Ugc2VhcmNoIHRyZWUgYWdhaW5zdCBhIHN0cmluZyB0aGF0IHdpbGwgbmV2ZXIgbWF0Y2guIE5lc3RlZCB1bmxpbWl0ZWQKK3JlcGVhdHMgaW4gYSBwYXR0ZXJuIGFyZSBhIGNvbW1vbiBleGFtcGxlLiBQQ1JFMiBwcm92aWRlcyBzb21lIHByb3RlY3Rpb24KK2FnYWluc3QgdGhpczogc2VlIHRoZSA8Yj5wY3JlMl9zZXRfbWF0Y2hfbGltaXQoKTwvYj4gZnVuY3Rpb24gaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzMiIGhyZWY9IiNUT0MxIj5VU0VSIERPQ1VNRU5UQVRJT048L2E+PGJyPgorPFA+CitUaGUgdXNlciBkb2N1bWVudGF0aW9uIGZvciBQQ1JFMiBjb21wcmlzZXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IHNlY3Rpb25zLiBJbgordGhlICJtYW4iIGZvcm1hdCwgZWFjaCBvZiB0aGVzZSBpcyBhIHNlcGFyYXRlICJtYW4gcGFnZSIuIEluIHRoZSBIVE1MIGZvcm1hdCwKK2VhY2ggaXMgYSBzZXBhcmF0ZSBwYWdlLCBsaW5rZWQgZnJvbSB0aGUgaW5kZXggcGFnZS4gSW4gdGhlIHBsYWluIHRleHQgZm9ybWF0LAordGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUgPGI+cGNyZTJncmVwPC9iPiBhbmQgPGI+cGNyZTJ0ZXN0PC9iPiBwcm9ncmFtcyBhcmUgaW4KK2ZpbGVzIGNhbGxlZCA8Yj5wY3JlMmdyZXAudHh0PC9iPiBhbmQgPGI+cGNyZTJ0ZXN0LnR4dDwvYj4sIHJlc3BlY3RpdmVseS4gVGhlCityZW1haW5pbmcgc2VjdGlvbnMsIGV4Y2VwdCBmb3IgdGhlIDxiPnBjcmUyZGVtbzwvYj4gc2VjdGlvbiAod2hpY2ggaXMgYSBwcm9ncmFtCitsaXN0aW5nKSwgYW5kIHRoZSBzaG9ydCBwYWdlcyBmb3IgaW5kaXZpZHVhbCBmdW5jdGlvbnMsIGFyZSBjb25jYXRlbmF0ZWQgaW4KKzxiPnBjcmUyLnR4dDwvYj4sIGZvciBlYXNlIG9mIHNlYXJjaGluZy4gVGhlIHNlY3Rpb25zIGFyZSBhcyBmb2xsb3dzOgorPHByZT4KKyAgcGNyZTIgICAgICAgICAgICAgIHRoaXMgZG9jdW1lbnQKKyAgcGNyZTItY29uZmlnICAgICAgIHNob3cgUENSRTIgaW5zdGFsbGF0aW9uIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24KKyAgcGNyZTJhcGkgICAgICAgICAgIGRldGFpbHMgb2YgUENSRTIncyBuYXRpdmUgQyBBUEkKKyAgcGNyZTJidWlsZCAgICAgICAgIGJ1aWxkaW5nIFBDUkUyCisgIHBjcmUyY2FsbG91dCAgICAgICBkZXRhaWxzIG9mIHRoZSBjYWxsb3V0IGZlYXR1cmUKKyAgcGNyZTJjb21wYXQgICAgICAgIGRpc2N1c3Npb24gb2YgUGVybCBjb21wYXRpYmlsaXR5CisgIHBjcmUyZGVtbyAgICAgICAgICBhIGRlbW9uc3RyYXRpb24gQyBwcm9ncmFtIHRoYXQgdXNlcyBQQ1JFMgorICBwY3JlMmdyZXAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIDxiPnBjcmUyZ3JlcDwvYj4gY29tbWFuZCAoOC1iaXQgb25seSkKKyAgcGNyZTJqaXQgICAgICAgICAgIGRpc2N1c3Npb24gb2YganVzdC1pbi10aW1lIG9wdGltaXphdGlvbiBzdXBwb3J0CisgIHBjcmUybGltaXRzICAgICAgICBkZXRhaWxzIG9mIHNpemUgYW5kIG90aGVyIGxpbWl0cworICBwY3JlMm1hdGNoaW5nICAgICAgZGlzY3Vzc2lvbiBvZiB0aGUgdHdvIG1hdGNoaW5nIGFsZ29yaXRobXMKKyAgcGNyZTJwYXJ0aWFsICAgICAgIGRldGFpbHMgb2YgdGhlIHBhcnRpYWwgbWF0Y2hpbmcgZmFjaWxpdHkKKyAgcGNyZTJwYXR0ZXJuICAgICAgIHN5bnRheCBhbmQgc2VtYW50aWNzIG9mIHN1cHBvcnRlZCByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybnMKKyAgcGNyZTJwZXJmb3JtICAgICAgIGRpc2N1c3Npb24gb2YgcGVyZm9ybWFuY2UgaXNzdWVzCisgIHBjcmUycG9zaXggICAgICAgICB0aGUgUE9TSVgtY29tcGF0aWJsZSBDIEFQSSBmb3IgdGhlIDgtYml0IGxpYnJhcnkKKyAgcGNyZTJzYW1wbGUgICAgICAgIGRpc2N1c3Npb24gb2YgdGhlIHBjcmUyZGVtbyBwcm9ncmFtCisgIHBjcmUyc3RhY2sgICAgICAgICBkaXNjdXNzaW9uIG9mIHN0YWNrIHVzYWdlCisgIHBjcmUyc3ludGF4ICAgICAgICBxdWljayBzeW50YXggcmVmZXJlbmNlCisgIHBjcmUydGVzdCAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgPGI+cGNyZTJ0ZXN0PC9iPiBjb21tYW5kCisgIHBjcmUydW5pY29kZSAgICAgICBkaXNjdXNzaW9uIG9mIFVuaWNvZGUgYW5kIFVURiBzdXBwb3J0Cis8L3ByZT4KK0luIHRoZSAibWFuIiBhbmQgSFRNTCBmb3JtYXRzLCB0aGVyZSBpcyBhbHNvIGEgc2hvcnQgcGFnZSBmb3IgZWFjaCBDIGxpYnJhcnkKK2Z1bmN0aW9uLCBsaXN0aW5nIGl0cyBhcmd1bWVudHMgYW5kIHJlc3VsdHMuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNCIgaHJlZj0iI1RPQzEiPkFVVEhPUjwvYT48YnI+Cis8UD4KK1BoaWxpcCBIYXplbAorPGJyPgorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorPGJyPgorQ2FtYnJpZGdlLCBFbmdsYW5kLgorPGJyPgorPC9QPgorPFA+CitQdXR0aW5nIGFuIGFjdHVhbCBlbWFpbCBhZGRyZXNzIGhlcmUgaXMgYSBzcGFtIG1hZ25ldC4gSWYgeW91IHdhbnQgdG8gZW1haWwgbWUsCit1c2UgbXkgdHdvIGluaXRpYWxzLCBmb2xsb3dlZCBieSB0aGUgdHdvIGRpZ2l0cyAxMCwgYXQgdGhlIGRvbWFpbiBjYW0uYWMudWsuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNSIgaHJlZj0iI1RPQzEiPlJFVklTSU9OPC9hPjxicj4KKzxQPgorTGFzdCB1cGRhdGVkOiAxNiBPY3RvYmVyIDIwMTUKKzxicj4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorPGJyPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2NhbGxvdXRfZW51bWVyYXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyY2RiOAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2NhbGxvdXRfZW51bWVyYXRlLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfY2FsbG91dF9lbnVtZXJhdGUgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKGNvbnN0IHBjcmUyX2NvZGUgKjxpPmNvZGU8L2k+LDwvYj4KKzxiPiAgaW50ICgqPGk+Y2FsbGJhY2s8L2k+KShwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9jayAqLCB2b2lkICopLDwvYj4KKzxiPiAgdm9pZCAqPGk+Y2FsbG91dF9kYXRhPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gc2NhbnMgYSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGNhbGxzIHRoZSA8aT5jYWxsYmFjaygpPC9pPgorZnVuY3Rpb24gZm9yIGVhY2ggY2FsbG91dCB3aXRoaW4gdGhlIHBhdHRlcm4uIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgemVybworZm9yIHN1Y2Nlc3MgYW5kIG5vbi16ZXJvIG90aGVyd2lzZS4gVGhlIGFyZ3VtZW50cyBhcmU6Cis8cHJlPgorICA8aT5jb2RlPC9pPiAgICAgICAgICAgUG9pbnRzIHRvIHRoZSBjb21waWxlZCBwYXR0ZXJuCisgIDxpPmNhbGxiYWNrPC9pPiAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgPGk+Y2FsbG91dF9kYXRhPC9pPiAgIFVzZXIgZGF0YSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKzwvcHJlPgorVGhlIDxpPmNhbGxiYWNrKCk8L2k+IGZ1bmN0aW9uIGlzIHBhc3NlZCBhIHBvaW50ZXIgdG8gYSBkYXRhIGJsb2NrIGNvbnRhaW5pbmcKK3RoZSBmb2xsb3dpbmcgZmllbGRzOgorPHByZT4KKyAgPGk+dmVyc2lvbjwvaT4gICAgICAgICAgICAgICAgQmxvY2sgdmVyc2lvbiBudW1iZXIKKyAgPGk+cGF0dGVybl9wb3NpdGlvbjwvaT4gICAgICAgT2Zmc2V0IHRvIG5leHQgaXRlbSBpbiBwYXR0ZXJuCisgIDxpPm5leHRfaXRlbV9sZW5ndGg8L2k+ICAgICAgIExlbmd0aCBvZiBuZXh0IGl0ZW0gaW4gcGF0dGVybgorICA8aT5jYWxsb3V0X251bWJlcjwvaT4gICAgICAgICBOdW1iZXIgZm9yIG51bWJlcmVkIGNhbGxvdXRzCisgIDxpPmNhbGxvdXRfc3RyaW5nX29mZnNldDwvaT4gIE9mZnNldCB0byBzdHJpbmcgd2l0aGluIHBhdHRlcm4KKyAgPGk+Y2FsbG91dF9zdHJpbmdfbGVuZ3RoPC9pPiAgTGVuZ3RoIG9mIGNhbGxvdXQgc3RyaW5nCisgIDxpPmNhbGxvdXRfc3RyaW5nPC9pPiAgICAgICAgIFBvaW50cyB0byBjYWxsb3V0IHN0cmluZyBvciBpcyBOVUxMCis8L3ByZT4KK1RoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIGNhbGxvdXQgZGF0YSB0aGF0IHdhcyBwYXNzZWQgdG8KKzxiPnBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKCk8L2I+LiBUaGUgPGI+Y2FsbGJhY2soKTwvYj4gZnVuY3Rpb24gbXVzdCByZXR1cm4gemVybworZm9yIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBjYXVzZXMgdGhlIHBhdHRlcm4gc2NhbiB0byBzdG9wLCB3aXRoIHRoZSB2YWx1ZQorYmVpbmcgcGFzc2VkIGJhY2sgYXMgdGhlIHJlc3VsdCBvZiA8Yj5wY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSgpPC9iPi4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfY29kZV9mcmVlLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9jb2RlX2ZyZWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDc3YWJlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfY29kZV9mcmVlLmh0bWwKQEAgLTAsMCArMSwzOSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9jb2RlX2ZyZWUgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX2NvZGVfZnJlZSBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj52b2lkIHBjcmUyX2NvZGVfZnJlZShwY3JlMl9jb2RlICo8aT5jb2RlPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIG1lbW9yeSB1c2VkIGZvciBhIGNvbXBpbGVkIHBhdHRlcm4sIGluY2x1ZGluZyBhbnkKK21lbW9yeSB1c2VkIGJ5IHRoZSBKSVQgY29tcGlsZXIuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2NvbXBpbGUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2NvbXBpbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDRmNGZlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfY29tcGlsZS5odG1sCkBAIC0wLDAgKzEsOTEgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfY29tcGlsZSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfY29tcGlsZSBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5wY3JlMl9jb2RlICpwY3JlMl9jb21waWxlKFBDUkUyX1NQVFIgPGk+cGF0dGVybjwvaT4sIFBDUkUyX1NJWkUgPGk+bGVuZ3RoPC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPm9wdGlvbnM8L2k+LCBpbnQgKjxpPmVycm9yY29kZTwvaT4sIFBDUkUyX1NJWkUgKjxpPmVycm9yb2Zmc2V0LDwvaT48L2I+Cis8Yj4gIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBjb21waWxlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIGludG8gYW4gaW50ZXJuYWwgZm9ybS4gSXRzCithcmd1bWVudHMgYXJlOgorPHByZT4KKyAgPGk+cGF0dGVybjwvaT4gICAgICAgQSBzdHJpbmcgY29udGFpbmluZyBleHByZXNzaW9uIHRvIGJlIGNvbXBpbGVkCisgIDxpPmxlbmd0aDwvaT4gICAgICAgIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBvciBQQ1JFMl9aRVJPX1RFUk1JTkFURUQKKyAgPGk+b3B0aW9uczwvaT4gICAgICAgT3B0aW9uIGJpdHMKKyAgPGk+ZXJyb3Jjb2RlPC9pPiAgICAgV2hlcmUgdG8gcHV0IGFuIGVycm9yIGNvZGUKKyAgPGk+ZXJyb2Zmc2V0PC9pPiAgICAgV2hlcmUgdG8gcHV0IGFuIGVycm9yIG9mZnNldAorICA8aT5jY29udGV4dDwvaT4gICAgICBQb2ludGVyIHRvIGEgY29tcGlsZSBjb250ZXh0IG9yIE5VTEwKKzwvcHJlPgorVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGFuZCBhbnkgZXJyb3Igb2Zmc2V0IHRoYXQgaXMgcmV0dXJuZWQgYXJlIGluIGNvZGUKK3VuaXRzLCBub3QgY2hhcmFjdGVycy4gQSBjb21waWxlIGNvbnRleHQgaXMgbmVlZGVkIG9ubHkgaWYgeW91IHdhbnQgdG8gY2hhbmdlCis8cHJlPgorICBXaGF0IFxSIG1hdGNoZXMgKFVuaWNvZGUgbmV3bGluZXMgb3IgQ1IsIExGLCBDUkxGIG9ubHkpCisgIFBDUkUyJ3MgY2hhcmFjdGVyIHRhYmxlcworICBUaGUgbmV3bGluZSBjaGFyYWN0ZXIgc2VxdWVuY2UKKyAgVGhlIGNvbXBpbGUgdGltZSBuZXN0ZWQgcGFyZW50aGVzZXMgbGltaXQKKzwvcHJlPgorb3IgcHJvdmlkZSBhbiBleHRlcm5hbCBmdW5jdGlvbiBmb3Igc3RhY2sgc2l6ZSBjaGVja2luZy4gVGhlIG9wdGlvbiBiaXRzIGFyZToKKzxwcmU+CisgIFBDUkUyX0FOQ0hPUkVEICAgICAgICAgICBGb3JjZSBwYXR0ZXJuIGFuY2hvcmluZworICBQQ1JFMl9BTFRfQlNVWCAgICAgICAgICAgQWx0ZXJuYXRpdmUgaGFuZGxpbmcgb2YgXHUsIFxVLCBhbmQgXHgKKyAgUENSRTJfQUxUX0NJUkNVTUZMRVggICAgIEFsdGVybmF0aXZlIGhhbmRsaW5nIG9mIF4gaW4gbXVsdGlsaW5lIG1vZGUKKyAgUENSRTJfQVVUT19DQUxMT1VUICAgICAgIENvbXBpbGUgYXV0b21hdGljIGNhbGxvdXRzCisgIFBDUkUyX0NBU0VMRVNTICAgICAgICAgICBEbyBjYXNlbGVzcyBtYXRjaGluZworICBQQ1JFMl9ET0xMQVJfRU5ET05MWSAgICAgJCBub3QgdG8gbWF0Y2ggbmV3bGluZSBhdCBlbmQKKyAgUENSRTJfRE9UQUxMICAgICAgICAgICAgIC4gbWF0Y2hlcyBhbnl0aGluZyBpbmNsdWRpbmcgTkwKKyAgUENSRTJfRFVQTkFNRVMgICAgICAgICAgIEFsbG93IGR1cGxpY2F0ZSBuYW1lcyBmb3Igc3VicGF0dGVybnMKKyAgUENSRTJfRVhURU5ERUQgICAgICAgICAgIElnbm9yZSB3aGl0ZSBzcGFjZSBhbmQgIyBjb21tZW50cworICBQQ1JFMl9GSVJTVExJTkUgICAgICAgICAgRm9yY2UgbWF0Y2hpbmcgdG8gYmUgYmVmb3JlIG5ld2xpbmUKKyAgUENSRTJfTUFUQ0hfVU5TRVRfQkFDS1JFRiAgTWF0Y2ggdW5zZXQgYmFjayByZWZlcmVuY2VzCisgIFBDUkUyX01VTFRJTElORSAgICAgICAgICBeIGFuZCAkIG1hdGNoIG5ld2xpbmVzIHdpdGhpbiBkYXRhCisgIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DICBMb2NrIG91dCB0aGUgdXNlIG9mIFxDIGluIHBhdHRlcm5zCisgIFBDUkUyX05FVkVSX1VDUCAgICAgICAgICBMb2NrIG91dCBQQ1JFMl9VQ1AsIGUuZy4gdmlhICgqVUNQKQorICBQQ1JFMl9ORVZFUl9VVEYgICAgICAgICAgTG9jayBvdXQgUENSRTJfVVRGLCBlLmcuIHZpYSAoKlVURikKKyAgUENSRTJfTk9fQVVUT19DQVBUVVJFICAgIERpc2FibGUgbnVtYmVyZWQgY2FwdHVyaW5nIHBhcmVuLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlcyAobmFtZWQgb25lcyBhdmFpbGFibGUpCisgIFBDUkUyX05PX0FVVE9fUE9TU0VTUyAgICBEaXNhYmxlIGF1dG8tcG9zc2Vzc2lmaWNhdGlvbgorICBQQ1JFMl9OT19ET1RTVEFSX0FOQ0hPUiAgRGlzYWJsZSBhdXRvbWF0aWMgYW5jaG9yaW5nIGZvciAuKgorICBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSAgRGlzYWJsZSBtYXRjaC10aW1lIHN0YXJ0IG9wdGltaXphdGlvbnMKKyAgUENSRTJfTk9fVVRGX0NIRUNLICAgICAgIERvIG5vdCBjaGVjayB0aGUgcGF0dGVybiBmb3IgVVRGIHZhbGlkaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IHJlbGV2YW50IGlmIFBDUkUyX1VURiBpcyBzZXQpCisgIFBDUkUyX1VDUCAgICAgICAgICAgICAgICBVc2UgVW5pY29kZSBwcm9wZXJ0aWVzIGZvciBcZCwgXHcsIGV0Yy4KKyAgUENSRTJfVU5HUkVFRFkgICAgICAgICAgIEludmVydCBncmVlZGluZXNzIG9mIHF1YW50aWZpZXJzCisgIFBDUkUyX1VURiAgICAgICAgICAgICAgICBUcmVhdCBwYXR0ZXJuIGFuZCBzdWJqZWN0cyBhcyBVVEYgc3RyaW5ncworPC9wcmU+CitQQ1JFMiBtdXN0IGJlIGJ1aWx0IHdpdGggVW5pY29kZSBzdXBwb3J0IGluIG9yZGVyIHRvIHVzZSBQQ1JFMl9VVEYsIFBDUkUyX1VDUAorYW5kIHJlbGF0ZWQgb3B0aW9ucy4KKzwvUD4KKzxQPgorVGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyBhIHBvaW50ZXIgdG8gYSBwcml2YXRlIGRhdGEgc3RydWN0dXJlIHRoYXQKK2NvbnRhaW5zIHRoZSBjb21waWxlZCBwYXR0ZXJuLCBvciBOVUxMIGlmIGFuIGVycm9yIHdhcyBkZXRlY3RlZC4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfY29tcGlsZV9jb250ZXh0X2NvcHkuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU5ODg0YgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5Lmh0bWwKQEAgLTAsMCArMSw0MSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9jb21waWxlX2NvbnRleHRfY29weSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfY29tcGlsZV9jb250ZXh0X2NvcHkgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+cGNyZTJfY29tcGlsZV9jb250ZXh0ICpwY3JlMl9jb21waWxlX2NvbnRleHRfY29weSg8L2I+Cis8Yj4gIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBtYWtlcyBhIG5ldyBjb3B5IG9mIGEgY29tcGlsZSBjb250ZXh0LCB1c2luZyB0aGUgbWVtb3J5CithbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQgd2FzIHVzZWQgZm9yIHRoZSBvcmlnaW5hbCBjb250ZXh0LiBUaGUgcmVzdWx0IGlzIE5VTEwKK2lmIHRoZSBtZW1vcnkgY2Fubm90IGJlIG9idGFpbmVkLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhY2Q0ZQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUuaHRtbApAQCAtMCwwICsxLDQyIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+cGNyZTJfY29tcGlsZV9jb250ZXh0ICpwY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlKDwvYj4KKzxiPiAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICo8aT5nY29udGV4dDwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIGluaXRpYWxpemVzIGEgbmV3IGNvbXBpbGUgY29udGV4dC4gSWYgaXRzIGFyZ3VtZW50IGlzCitOVUxMLCA8Yj5tYWxsb2MoKTwvYj4gaXMgdXNlZCB0byBnZXQgdGhlIG5lY2Vzc2FyeSBtZW1vcnk7IG90aGVyd2lzZSB0aGUgbWVtb3J5CithbGxvY2F0aW9uIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZ2VuZXJhbCBjb250ZXh0IGlzIHVzZWQuIFRoZSByZXN1bHQgaXMgTlVMTCBpZgordGhlIG1lbW9yeSBjb3VsZCBub3QgYmUgb2J0YWluZWQuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhNjdhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZS5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfY29tcGlsZV9jb250ZXh0X2ZyZWUgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPnZvaWQgcGNyZTJfY29tcGlsZV9jb250ZXh0X2ZyZWUocGNyZTJfY29tcGlsZV9jb250ZXh0ICo8aT5jY29udGV4dDwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBtZW1vcnkgb2NjdXBpZWQgYnkgYSBjb21waWxlIGNvbnRleHQsIHVzaW5nIHRoZSBtZW1vcnkKK2ZyZWVpbmcgZnVuY3Rpb24gZnJvbSB0aGUgZ2VuZXJhbCBjb250ZXh0IHdpdGggd2hpY2ggaXQgd2FzIGNyZWF0ZWQsIG9yCis8Yj5mcmVlKCk8L2I+IGlmIHRoYXQgd2FzIG5vdCBzZXQuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2NvbmZpZy5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfY29uZmlnLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUxYjBjNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2NvbmZpZy5odG1sCkBAIC0wLDAgKzEsODMgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfY29uZmlnIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9jb25maWcgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX2NvbmZpZyh1aW50MzJfdCA8aT53aGF0PC9pPiwgdm9pZCAqPGk+d2hlcmU8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYSBjbGllbnQgcHJvZ3JhbSB0byBmaW5kIG91dCB3aGljaCBvcHRpb25hbAorZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgdmVyc2lvbiBvZiB0aGUgUENSRTIgbGlicmFyeSBpdCBpcyB1c2luZy4gVGhlCithcmd1bWVudHMgYXJlIGFzIGZvbGxvd3M6Cis8cHJlPgorICA8aT53aGF0PC9pPiAgICAgQSBjb2RlIHNwZWNpZnlpbmcgd2hhdCBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZAorICA8aT53aGVyZTwvaT4gICAgUG9pbnRzIHRvIHdoZXJlIHRvIHB1dCB0aGUgaW5mb3JtYXRpb24KKzwvcHJlPgorSWYgPGk+d2hlcmU8L2k+IGlzIE5VTEwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgbWVtb3J5IG5lZWRlZCBmb3IKK3RoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24uIFdoZW4gdGhlIGluZm9ybWF0aW9uIGlzIGEgc3RyaW5nLCB0aGUgdmFsdWUgaXMgaW4KK2NvZGUgdW5pdHM7IGZvciBvdGhlciB0eXBlcyBvZiBkYXRhIGl0IGlzIGluIGJ5dGVzLgorPC9QPgorPFA+CitJZiA8Yj53aGVyZTwvYj4gaXMgbm90IE5VTEwsIGZvciBQQ1JFMl9DT05GSUdfSklUVEFSR0VULAorUENSRTJfQ09ORklHX1VOSUNPREVfVkVSU0lPTiwgYW5kIFBDUkUyX0NPTkZJR19WRVJTSU9OIGl0IG11c3QgcG9pbnQgdG8gYQorYnVmZmVyIHRoYXQgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIHN0cmluZy4gRm9yIGFsbCBvdGhlciBjb2RlcyBpdCBtdXN0Citwb2ludCB0byBhIHVpbnQzMl90IGludGVnZXIgdmFyaWFibGUuIFRoZSBhdmFpbGFibGUgY29kZXMgYXJlOgorPHByZT4KKyAgUENSRTJfQ09ORklHX0JTUiAgICAgICAgICAgICBJbmRpY2F0ZXMgd2hhdCBcUiBtYXRjaGVzIGJ5IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9CU1JfVU5JQ09ERQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfQlNSX0FOWUNSTEYKKyAgUENSRTJfQ09ORklHX0pJVCAgICAgICAgICAgICBBdmFpbGFiaWxpdHkgb2YganVzdC1pbi10aW1lIGNvbXBpbGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgKDE9eWVzIDA9bm8pCisgIFBDUkUyX0NPTkZJR19KSVRUQVJHRVQgICAgICAgSW5mb3JtYXRpb24gYWJvdXQgdGhlIHRhcmdldCBhcmNoaS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlY3R1cmUgZm9yIHRoZSBKSVQgY29tcGlsZXIKKyAgUENSRTJfQ09ORklHX0xJTktTSVpFICAgICAgICBDb25maWd1cmVkIGludGVybmFsIGxpbmsgc2l6ZSAoMiwgMywgNCkKKyAgUENSRTJfQ09ORklHX01BVENITElNSVQgICAgICBEZWZhdWx0IGludGVybmFsIHJlc291cmNlIGxpbWl0CisgIFBDUkUyX0NPTkZJR19ORVdMSU5FICAgICAgICAgQ29kZSBmb3IgdGhlIGRlZmF1bHQgbmV3bGluZSBzZXF1ZW5jZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX05FV0xJTkVfQ1IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX05FV0xJTkVfTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX05FV0xJTkVfQ1JMRgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfTkVXTElORV9BTlkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRgorICBQQ1JFMl9DT05GSUdfUEFSRU5TTElNSVQgICAgIERlZmF1bHQgcGFyZW50aGVzZXMgbmVzdGluZyBsaW1pdAorICBQQ1JFMl9DT05GSUdfUkVDVVJTSU9OTElNSVQgIEludGVybmFsIHJlY3Vyc2lvbiBkZXB0aCBsaW1pdAorICBQQ1JFMl9DT05GSUdfU1RBQ0tSRUNVUlNFICAgIFJlY3Vyc2lvbiBpbXBsZW1lbnRhdGlvbiAoMT1zdGFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMD1oZWFwKQorICBQQ1JFMl9DT05GSUdfVU5JQ09ERSAgICAgICAgIEF2YWlsYWJpbGl0eSBvZiBVbmljb2RlIHN1cHBvcnQgKDE9eWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwPW5vKQorICBQQ1JFMl9DT05GSUdfVU5JQ09ERV9WRVJTSU9OIFRoZSBVbmljb2RlIHZlcnNpb24gKGEgc3RyaW5nKQorICBQQ1JFMl9DT05GSUdfVkVSU0lPTiAgICAgICAgIFRoZSBQQ1JFMiB2ZXJzaW9uIChhIHN0cmluZykKKzwvcHJlPgorVGhlIGZ1bmN0aW9uIHlpZWxkcyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSBvbiBzdWNjZXNzIG9yIHRoZSBuZWdhdGl2ZSB2YWx1ZQorUENSRTJfRVJST1JfQkFET1BUSU9OIG90aGVyd2lzZS4gVGhpcyBpcyBhbHNvIHRoZSByZXN1bHQgZm9yIHRoZQorUENSRTJfQ09ORklHX0pJVFRBUkdFVCBjb2RlIGlmIEpJVCBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUuIFdoZW4gYSBzdHJpbmcgaXMKK3JlcXVlc3RlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBjb2RlIHVuaXRzIHVzZWQsIGluY2x1ZGluZyB0aGUKK3Rlcm1pbmF0aW5nIHplcm8uCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2RmYV9tYXRjaC5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfZGZhX21hdGNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTEzN2ExNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2RmYV9tYXRjaC5odG1sCkBAIC0wLDAgKzEsNzkgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfZGZhX21hdGNoIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9kZmFfbWF0Y2ggbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX2RmYV9tYXRjaChjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgUENSRTJfU1BUUiA8aT5zdWJqZWN0PC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgPGk+bGVuZ3RoPC9pPiwgUENSRTJfU0laRSA8aT5zdGFydG9mZnNldDwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT5vcHRpb25zPC9pPiwgcGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4sPC9iPgorPGI+ICBpbnQgKjxpPndvcmtzcGFjZTwvaT4sIFBDUkUyX1NJWkUgPGk+d3Njb3VudDwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIG1hdGNoZXMgYSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gYWdhaW5zdCBhIGdpdmVuIHN1YmplY3QKK3N0cmluZywgdXNpbmcgYW4gYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgYWxnb3JpdGhtIHRoYXQgc2NhbnMgdGhlIHN1YmplY3Qgc3RyaW5nCitqdXN0IG9uY2UgKDxpPm5vdDwvaT4gUGVybC1jb21wYXRpYmxlKS4gKFRoZSBQZXJsLWNvbXBhdGlibGUgbWF0Y2hpbmcgZnVuY3Rpb24KK2lzIDxiPnBjcmUyX21hdGNoKCk8L2I+LikgVGhlIGFyZ3VtZW50cyBmb3IgdGhpcyBmdW5jdGlvbiBhcmU6Cis8cHJlPgorICA8aT5jb2RlPC9pPiAgICAgICAgIFBvaW50cyB0byB0aGUgY29tcGlsZWQgcGF0dGVybgorICA8aT5zdWJqZWN0PC9pPiAgICAgIFBvaW50cyB0byB0aGUgc3ViamVjdCBzdHJpbmcKKyAgPGk+bGVuZ3RoPC9pPiAgICAgICBMZW5ndGggb2YgdGhlIHN1YmplY3Qgc3RyaW5nCisgIDxpPnN0YXJ0b2Zmc2V0PC9pPiAgT2Zmc2V0IGluIHRoZSBzdWJqZWN0IGF0IHdoaWNoIHRvIHN0YXJ0IG1hdGNoaW5nCisgIDxpPm9wdGlvbnM8L2k+ICAgICAgT3B0aW9uIGJpdHMKKyAgPGk+bWF0Y2hfZGF0YTwvaT4gICBQb2ludHMgdG8gYSBtYXRjaCBkYXRhIGJsb2NrLCBmb3IgcmVzdWx0cworICA8aT5tY29udGV4dDwvaT4gICAgIFBvaW50cyB0byBhIG1hdGNoIGNvbnRleHQsIG9yIGlzIE5VTEwKKyAgPGk+d29ya3NwYWNlPC9pPiAgICBQb2ludHMgdG8gYSB2ZWN0b3Igb2YgaW50cyB1c2VkIGFzIHdvcmtpbmcgc3BhY2UKKyAgPGk+d3Njb3VudDwvaT4gICAgICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHZlY3RvcgorPC9wcmU+CitGb3IgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+LCBhIG1hdGNoIGNvbnRleHQgaXMgbmVlZGVkIG9ubHkgaWYgeW91IHdhbnQgdG8gc2V0Cit1cCBhIGNhbGxvdXQgZnVuY3Rpb24uIFRoZSA8aT5sZW5ndGg8L2k+IGFuZCA8aT5zdGFydG9mZnNldDwvaT4gdmFsdWVzIGFyZSBjb2RlCit1bml0cywgbm90IGNoYXJhY3RlcnMuIFRoZSBvcHRpb25zIGFyZToKKzxwcmU+CisgIFBDUkUyX0FOQ0hPUkVEICAgICAgICAgIE1hdGNoIG9ubHkgYXQgdGhlIGZpcnN0IHBvc2l0aW9uCisgIFBDUkUyX05PVEJPTCAgICAgICAgICAgIFN1YmplY3QgaXMgbm90IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCisgIFBDUkUyX05PVEVPTCAgICAgICAgICAgIFN1YmplY3QgaXMgbm90IHRoZSBlbmQgb2YgYSBsaW5lCisgIFBDUkUyX05PVEVNUFRZICAgICAgICAgIEFuIGVtcHR5IHN0cmluZyBpcyBub3QgYSB2YWxpZCBtYXRjaAorICBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUICBBbiBlbXB0eSBzdHJpbmcgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgYSB2YWxpZCBtYXRjaAorICBQQ1JFMl9OT19VVEZfQ0hFQ0sgICAgICBEbyBub3QgY2hlY2sgdGhlIHN1YmplY3QgZm9yIFVURgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRpdHkgKG9ubHkgcmVsZXZhbnQgaWYgUENSRTJfVVRGCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgc2V0IGF0IGNvbXBpbGUgdGltZSkKKyAgUENSRTJfUEFSVElBTF9TT0ZUICAgICAgUmV0dXJuIFBDUkUyX0VSUk9SX1BBUlRJQUwgZm9yIGEgcGFydGlhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIGlmIG5vIGZ1bGwgbWF0Y2hlcyBhcmUgZm91bmQKKyAgUENSRTJfUEFSVElBTF9IQVJEICAgICAgUmV0dXJuIFBDUkUyX0VSUk9SX1BBUlRJQUwgZm9yIGEgcGFydGlhbCBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbiBpZiB0aGVyZSBpcyBhIGZ1bGwgbWF0Y2ggYXMgd2VsbAorICBQQ1JFMl9ERkFfUkVTVEFSVCAgICAgICBSZXN0YXJ0IGFmdGVyIGEgcGFydGlhbCBtYXRjaAorICBQQ1JFMl9ERkFfU0hPUlRFU1QgICAgICBSZXR1cm4gb25seSB0aGUgc2hvcnRlc3QgbWF0Y2gKKzwvcHJlPgorVGhlcmUgYXJlIHJlc3RyaWN0aW9ucyBvbiB3aGF0IG1heSBhcHBlYXIgaW4gYSBwYXR0ZXJuIHdoZW4gdXNpbmcgdGhpcyBtYXRjaGluZworZnVuY3Rpb24uIERldGFpbHMgYXJlIGdpdmVuIGluIHRoZQorPGEgaHJlZj0icGNyZTJtYXRjaGluZy5odG1sIj48Yj5wY3JlMm1hdGNoaW5nPC9iPjwvYT4KK2RvY3VtZW50YXRpb24uIEZvciBkZXRhaWxzIG9mIHBhcnRpYWwgbWF0Y2hpbmcsIHNlZSB0aGUKKzxhIGhyZWY9InBjcmUycGFydGlhbC5odG1sIj48Yj5wY3JlMnBhcnRpYWw8L2I+PC9hPgorcGFnZS4gVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHkuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dlbmVyYWxfY29udGV4dF9jb3B5Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxODUzNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dlbmVyYWxfY29udGV4dF9jb3B5Lmh0bWwKQEAgLTAsMCArMSw0MiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9nZW5lcmFsX2NvbnRleHRfY29weSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHkgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+cGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpwY3JlMl9nZW5lcmFsX2NvbnRleHRfY29weSg8L2I+Cis8Yj4gIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqPGk+Z2NvbnRleHQ8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBtYWtlcyBhIG5ldyBjb3B5IG9mIGEgZ2VuZXJhbCBjb250ZXh0LCB1c2luZyB0aGUgbWVtb3J5CithbGxvY2F0aW9uIGZ1bmN0aW9ucyBpbiB0aGUgY29udGV4dCwgaWYgc2V0LCB0byBnZXQgdGhlIG5lY2Vzc2FyeSBtZW1vcnkuCitPdGhlcndpc2UgPGI+bWFsbG9jKCk8L2I+IGlzIHVzZWQuIFRoZSByZXN1bHQgaXMgTlVMTCBpZiB0aGUgbWVtb3J5IGNhbm5vdCBiZQorb2J0YWluZWQuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dlbmVyYWxfY29udGV4dF9jcmVhdGUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dlbmVyYWxfY29udGV4dF9jcmVhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzMxZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZS5odG1sCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZSBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5wY3JlMl9nZW5lcmFsX2NvbnRleHQgKnBjcmUyX2dlbmVyYWxfY29udGV4dF9jcmVhdGUoPC9iPgorPGI+ICB2b2lkICooKjxpPnByaXZhdGVfbWFsbG9jPC9pPikoUENSRTJfU0laRSwgdm9pZCAqKSw8L2I+Cis8Yj4gIHZvaWQgKCo8aT5wcml2YXRlX2ZyZWU8L2k+KSh2b2lkICosIHZvaWQgKiksIHZvaWQgKjxpPm1lbW9yeV9kYXRhPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBnZW5lcmFsIGNvbnRleHQuIFRoZSBhcmd1bWVudHMgZGVmaW5lCitjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFuZCBhIGRhdGEgdmFsdWUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlbSB3aGVuCit0aGV5IGFyZSBjYWxsZWQuIFRoZSA8Yj5wcml2YXRlX21hbGxvYygpPC9iPiBmdW5jdGlvbiBpcyB1c2VkIHRvIGdldCBtZW1vcnkgZm9yCit0aGUgY29udGV4dC4gSWYgZWl0aGVyIG9mIHRoZSBmaXJzdCB0d28gYXJndW1lbnRzIGlzIE5VTEwsIHRoZSBzeXN0ZW0gbWVtb3J5CittYW5hZ2VtZW50IGZ1bmN0aW9uIGlzIHVzZWQuIFRoZSByZXN1bHQgaXMgTlVMTCBpZiBubyBtZW1vcnkgY291bGQgYmUgb2J0YWluZWQuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dlbmVyYWxfY29udGV4dF9mcmVlLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9nZW5lcmFsX2NvbnRleHRfZnJlZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjODE4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9nZW5lcmFsX2NvbnRleHRfZnJlZS5odG1sCkBAIC0wLDAgKzEsMzkgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX2dlbmVyYWxfY29udGV4dF9mcmVlIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPnZvaWQgcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICo8aT5nY29udGV4dDwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBtZW1vcnkgb2NjdXBpZWQgYnkgYSBnZW5lcmFsIGNvbnRleHQsIHVzaW5nIHRoZSBtZW1vcnkKK2ZyZWVpbmcgZnVuY3Rpb24gd2l0aGluIHRoZSBjb250ZXh0LCBpZiBzZXQuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dldF9lcnJvcl9tZXNzYWdlLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9nZXRfZXJyb3JfbWVzc2FnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNDIyOTEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9nZXRfZXJyb3JfbWVzc2FnZS5odG1sCkBAIC0wLDAgKzEsNDggQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2Ugc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludCBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZShpbnQgPGk+ZXJyb3Jjb2RlPC9pPiwgUENSRTJfVUNIQVIgKjxpPmJ1ZmZlcjwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFIDxpPmJ1ZmZsZW48L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIHRleHR1YWwgZXJyb3IgbWVzc2FnZSBmb3IgZWFjaCBQQ1JFMiBlcnJvciBjb2RlLgorQ29tcGlsYXRpb24gZXJyb3JzIGFyZSBwb3NpdGl2ZSBudW1iZXJzOyBVVEYgZm9ybWF0dGluZyBlcnJvcnMgYW5kIG1hdGNoaW5nCitlcnJvcnMgYXJlIG5lZ2F0aXZlIG51bWJlcnMuIFRoZSBhcmd1bWVudHMgYXJlOgorPHByZT4KKyAgPGk+ZXJyb3Jjb2RlPC9pPiAgIGFuIGVycm9yIGNvZGUgKHBvc2l0aXZlIG9yIG5lZ2F0aXZlKQorICA8aT5idWZmZXI8L2k+ICAgICAgd2hlcmUgdG8gcHV0IHRoZSBtZXNzYWdlCisgIDxpPmJ1ZmZsZW48L2k+ICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgKGNvZGUgdW5pdHMpCis8L3ByZT4KK1RoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgemVybywgb3IKK2EgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbC4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfZ2V0X21hcmsuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dldF9tYXJrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhlNTBlMwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dldF9tYXJrLmh0bWwKQEAgLTAsMCArMSw0MyBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9nZXRfbWFyayBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfZ2V0X21hcmsgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+UENSRTJfU1BUUiBwY3JlMl9nZXRfbWFyayhwY3JlMl9tYXRjaF9kYXRhICo8aT5tYXRjaF9kYXRhPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK0FmdGVyIGEgY2FsbCBvZiA8Yj5wY3JlMl9tYXRjaCgpPC9iPiB0aGF0IHdhcyBwYXNzZWQgdGhlIG1hdGNoIGJsb2NrIHRoYXQgaXMKK3RoaXMgZnVuY3Rpb24ncyBhcmd1bWVudCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbGFzdCAoKk1BUkspCituYW1lIHRoYXQgd2FzIGVuY291bnRlcmVkLiBUaGUgbmFtZSBpcyB6ZXJvLXRlcm1pbmF0ZWQsIGFuZCBpcyB3aXRoaW4gdGhlCitjb21waWxlZCBwYXR0ZXJuLiBJZiBubyAoKk1BUkspIG5hbWUgaXMgYXZhaWxhYmxlLCBOVUxMIGlzIHJldHVybmVkLiBBICgqTUFSSykKK25hbWUgbWF5IGJlIGF2YWlsYWJsZSBhZnRlciBhIGZhaWxlZCBtYXRjaCBvciBhIHBhcnRpYWwgbWF0Y2gsIGFzIHdlbGwgYXMgYWZ0ZXIKK2Egc3VjY2Vzc2Z1bCBvbmUuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dldF9vdmVjdG9yX2NvdW50Lmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1YWFjYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudC5odG1sCkBAIC0wLDAgKzEsMzkgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfZ2V0X292ZWN0b3JfY291bnQgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX2dldF9vdmVjdG9yX2NvdW50IG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPnVpbnQzMl90IHBjcmUyX2dldF9vdmVjdG9yX2NvdW50KHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFpcnMgb2Ygb2Zmc2V0cyBpbiB0aGUgb3ZlY3RvciB0aGF0IGZvcm1zCitwYXJ0IG9mIHRoZSBnaXZlbiBtYXRjaCBkYXRhIGJsb2NrLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY2MzE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIuaHRtbApAQCAtMCwwICsxLDQwIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+UENSRTJfU0laRSAqcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcihwY3JlMl9tYXRjaF9kYXRhICo8aT5tYXRjaF9kYXRhPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHZlY3RvciBvZiBvZmZzZXRzIHRoYXQgZm9ybXMgcGFydCBvZiB0aGUKK2dpdmVuIG1hdGNoIGRhdGEgYmxvY2suIFRoZSBudW1iZXIgb2YgcGFpcnMgY2FuIGJlIGZvdW5kIGJ5IGNhbGxpbmcKKzxiPnBjcmUyX2dldF9vdmVjdG9yX2NvdW50KCk8L2I+LgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9nZXRfc3RhcnRjaGFyLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9nZXRfc3RhcnRjaGFyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjMjhiMgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2dldF9zdGFydGNoYXIuaHRtbApAQCAtMCwwICsxLDQ0IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX2dldF9zdGFydGNoYXIgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX2dldF9zdGFydGNoYXIgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+UENSRTJfU0laRSBwY3JlMl9nZXRfc3RhcnRjaGFyKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorQWZ0ZXIgYSBzdWNjZXNzZnVsIGNhbGwgb2YgPGI+cGNyZTJfbWF0Y2goKTwvYj4gdGhhdCB3YXMgcGFzc2VkIHRoZSBtYXRjaCBibG9jawordGhhdCBpcyB0aGlzIGZ1bmN0aW9uJ3MgYXJndW1lbnQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29kZSB1bml0IG9mZnNldCBvZgordGhlIGNoYXJhY3RlciBhdCB3aGljaCB0aGUgc3VjY2Vzc2Z1bCBtYXRjaCBzdGFydGVkLiBGb3IgYSBub24tcGFydGlhbCBtYXRjaCwKK3RoaXMgY2FuIGJlIGRpZmZlcmVudCB0byB0aGUgdmFsdWUgb2YgPGk+b3ZlY3RvclswXTwvaT4gaWYgdGhlIHBhdHRlcm4gY29udGFpbnMKK3RoZSBcSyBlc2NhcGUgc2VxdWVuY2UuIEFmdGVyIGEgcGFydGlhbCBtYXRjaCwgaG93ZXZlciwgdGhpcyB2YWx1ZSBpcyBhbHdheXMKK3RoZSBzYW1lIGFzIDxpPm92ZWN0b3JbMF08L2k+IGJlY2F1c2UgXEsgZG9lcyBub3QgYWZmZWN0IHRoZSByZXN1bHQgb2YgYQorcGFydGlhbCBtYXRjaC4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfaml0X2NvbXBpbGUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2ppdF9jb21waWxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTViMDEzOAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2ppdF9jb21waWxlLmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9qaXRfY29tcGlsZSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfaml0X2NvbXBpbGUgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX2ppdF9jb21waWxlKHBjcmUyX2NvZGUgKjxpPmNvZGU8L2k+LCB1aW50MzJfdCA8aT5vcHRpb25zPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gcmVxdWVzdHMgSklUIGNvbXBpbGF0aW9uLCB3aGljaCwgaWYgdGhlIGp1c3QtaW4tdGltZSBjb21waWxlciBpcworYXZhaWxhYmxlLCBmdXJ0aGVyIHByb2Nlc3NlcyBhIGNvbXBpbGVkIHBhdHRlcm4gaW50byBtYWNoaW5lIGNvZGUgdGhhdCBleGVjdXRlcworbXVjaCBmYXN0ZXIgdGhhbiB0aGUgPGI+cGNyZTJfbWF0Y2goKTwvYj4gaW50ZXJwcmV0aXZlIG1hdGNoaW5nIGZ1bmN0aW9uLiBGdWxsCitkZXRhaWxzIGFyZSBnaXZlbiBpbiB0aGUKKzxhIGhyZWY9InBjcmUyaml0Lmh0bWwiPjxiPnBjcmUyaml0PC9iPjwvYT4KK2RvY3VtZW50YXRpb24uCis8L1A+Cis8UD4KK1RoZSBmaXJzdCBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYSBzdWNjZXNzZnVsIGNhbGwgdG8KKzxiPnBjcmUyX2NvbXBpbGUoKTwvYj4sIGFuZCB0aGUgc2Vjb25kIG11c3QgY29udGFpbiBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nCitiaXRzOgorPHByZT4KKyAgUENSRTJfSklUX0NPTVBMRVRFICAgICAgY29tcGlsZSBjb2RlIGZvciBmdWxsIG1hdGNoaW5nCisgIFBDUkUyX0pJVF9QQVJUSUFMX1NPRlQgIGNvbXBpbGUgY29kZSBmb3Igc29mdCBwYXJ0aWFsIG1hdGNoaW5nCisgIFBDUkUyX0pJVF9QQVJUSUFMX0hBUkQgIGNvbXBpbGUgY29kZSBmb3IgaGFyZCBwYXJ0aWFsIG1hdGNoaW5nCis8L3ByZT4KK1RoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgMCBmb3Igc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG90aGVyd2lzZS4KK0luIHBhcnRpY3VsYXIsIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04gaXMgcmV0dXJuZWQgaWYgSklUIGlzIG5vdCBzdXBwb3J0ZWQgb3IKK2lmIGFuIHVua25vd24gYml0IGlzIHNldCBpbiA8aT5vcHRpb25zPC9pPi4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeS5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiNTliOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5Lmh0bWwKQEAgLTAsMCArMSw0MyBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5IHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5IG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPnZvaWQgcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeShwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gZnJlZXMgdW51c2VkIEpJVCBleGVjdXRhYmxlIG1lbW9yeS4gVGhlIGFyZ3VtZW50IGlzIGEgZ2VuZXJhbAorY29udGV4dCwgZm9yIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCwgb3IgTlVMTCBmb3Igc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQuCitKSVQgbWVtb3J5IGFsbG9jYXRpb24gcmV0YWlucyBzb21lIG1lbW9yeSBpbiBvcmRlciB0byBpbXByb3ZlIGZ1dHVyZSBKSVQKK2NvbXBpbGF0aW9uIHNwZWVkLiBJbiBsb3cgbWVtb3J5IGNvbmRpdGlvbnMsCitcZkJwY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5KClcZkIgY2FuIGJlIHVzZWQgdG8gY2F1c2UgdGhpcyBtZW1vcnkgdG8gYmUKK2ZyZWVkLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9qaXRfbWF0Y2guaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2ppdF9tYXRjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNTk2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9qaXRfbWF0Y2guaHRtbApAQCAtMCwwICsxLDU4IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX2ppdF9tYXRjaCBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfaml0X21hdGNoIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludCBwY3JlMl9qaXRfbWF0Y2goY29uc3QgcGNyZTJfY29kZSAqPGk+Y29kZTwvaT4sIFBDUkUyX1NQVFIgPGk+c3ViamVjdDwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFIDxpPmxlbmd0aDwvaT4sIFBDUkUyX1NJWkUgPGk+c3RhcnRvZmZzZXQ8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+b3B0aW9uczwvaT4sIHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+LDwvYj4KKzxiPiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBtYXRjaGVzIGEgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uIHRoYXQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5Citwcm9jZXNzZWQgYnkgdGhlIEpJVCBjb21waWxlciBhZ2FpbnN0IGEgZ2l2ZW4gc3ViamVjdCBzdHJpbmcsIHVzaW5nIGEgbWF0Y2hpbmcKK2FsZ29yaXRobSB0aGF0IGlzIHNpbWlsYXIgdG8gUGVybCdzLiBJdCBpcyBhICJmYXN0IHBhdGgiIGludGVyZmFjZSB0byBKSVQsIGFuZAoraXQgYnlwYXNzZXMgc29tZSBvZiB0aGUgc2FuaXR5IGNoZWNrcyB0aGF0IDxiPnBjcmUyX21hdGNoKCk8L2I+IGFwcGxpZXMuCitJdHMgYXJndW1lbnRzIGFyZSBleGFjdGx5IHRoZSBzYW1lIGFzIGZvcgorPGEgaHJlZj0icGNyZTJfbWF0Y2guaHRtbCI+PGI+cGNyZTJfbWF0Y2goKTwvYj4uPC9hPgorPC9QPgorPFA+CitUaGUgc3VwcG9ydGVkIG9wdGlvbnMgYXJlIFBDUkUyX05PVEJPTCwgUENSRTJfTk9URU9MLCBQQ1JFMl9OT1RFTVBUWSwKK1BDUkUyX05PVEVNUFRZX0FUU1RBUlQsIFBDUkUyX1BBUlRJQUxfSEFSRCwgYW5kIFBDUkUyX1BBUlRJQUxfU09GVC4gVW5zdXBwb3J0ZWQKK29wdGlvbnMgYXJlIGlnbm9yZWQuIFRoZSBzdWJqZWN0IHN0cmluZyBpcyBub3QgY2hlY2tlZCBmb3IgVVRGIHZhbGlkaXR5LgorPC9QPgorPFA+CitUaGUgcmV0dXJuIHZhbHVlcyBhcmUgdGhlIHNhbWUgYXMgZm9yIDxiPnBjcmUyX21hdGNoKCk8L2I+IHBsdXMKK1BDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04gaWYgYSBtYXRjaGluZyBtb2RlIChwYXJ0aWFsIG9yIGNvbXBsZXRlKSBpcyByZXF1ZXN0ZWQKK3RoYXQgd2FzIG5vdCBjb21waWxlZC4gRm9yIGRldGFpbHMgb2YgcGFydGlhbCBtYXRjaGluZywgc2VlIHRoZQorPGEgaHJlZj0icGNyZTJwYXJ0aWFsLmh0bWwiPjxiPnBjcmUycGFydGlhbDwvYj48L2E+CitwYWdlLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgSklUIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyaml0Lmh0bWwiPjxiPnBjcmUyaml0PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9qaXRfc3RhY2tfYXNzaWduLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9qaXRfc3RhY2tfYXNzaWduLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdlM2E2YQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2ppdF9zdGFja19hc3NpZ24uaHRtbApAQCAtMCwwICsxLDcwIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX2ppdF9zdGFja19hc3NpZ24gc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX2ppdF9zdGFja19hc3NpZ24gbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+dm9pZCBwY3JlMl9qaXRfc3RhY2tfYXNzaWduKHBjcmUyX21hdGNoX2NvbnRleHQgKjxpPm1jb250ZXh0PC9pPiw8L2I+Cis8Yj4gIHBjcmUyX2ppdF9jYWxsYmFjayA8aT5jYWxsYmFja19mdW5jdGlvbjwvaT4sIHZvaWQgKjxpPmNhbGxiYWNrX2RhdGE8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSB1c2VkIGJ5IEpJVCBhcyBhIHJ1bi10aW1lIHN0YWNrCit3aGVuIDxiPnBjcmUyX21hdGNoKCk8L2I+IG9yIDxiPnBjcmUyX2ppdF9tYXRjaCgpPC9iPiBpcyBjYWxsZWQgd2l0aCBhIHBhdHRlcm4KK3RoYXQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBieSB0aGUgSklUIGNvbXBpbGVyLiBUaGUgaW5mb3JtYXRpb24gdGhhdAorZGV0ZXJtaW5lcyB3aGljaCBzdGFjayBpcyB1c2VkIGlzIHB1dCBpbnRvIGEgbWF0Y2ggY29udGV4dCB0aGF0IGlzIHN1YnNlcXVlbnRseQorcGFzc2VkIHRvIGEgbWF0Y2hpbmcgZnVuY3Rpb24uIFRoZSBhcmd1bWVudHMgb2YgdGhpcyBmdW5jdGlvbiBhcmU6Cis8cHJlPgorICBtY29udGV4dCAgICAgICBhIHBvaW50ZXIgdG8gYSBtYXRjaCBjb250ZXh0CisgIGNhbGxiYWNrICAgICAgIGEgY2FsbGJhY2sgZnVuY3Rpb24KKyAgY2FsbGJhY2tfZGF0YSAgYSBKSVQgc3RhY2sgb3IgYSB2YWx1ZSB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrCis8L1BSRT4KKzwvUD4KKzxQPgorSWYgPGk+Y2FsbGJhY2s8L2k+IGlzIE5VTEwgYW5kIDxpPmNhbGxiYWNrX2RhdGE8L2k+IGlzIE5VTEwsIGFuIGludGVybmFsIDMySworYmxvY2sgb24gdGhlIG1hY2hpbmUgc3RhY2sgaXMgdXNlZC4KKzwvUD4KKzxQPgorSWYgPGk+Y2FsbGJhY2s8L2k+IGlzIE5VTEwgYW5kIDxpPmNhbGxiYWNrX2RhdGE8L2k+IGlzIG5vdCBOVUxMLAorPGk+Y2FsbGJhY2tfZGF0YTwvaT4gbXVzdCBiZSBhIHZhbGlkIEpJVCBzdGFjaywgdGhlIHJlc3VsdCBvZiBjYWxsaW5nCis8Yj5wY3JlMl9qaXRfc3RhY2tfY3JlYXRlKCk8L2I+LgorPC9QPgorPFA+CitJZiA8aT5jYWxsYmFjazwvaT4gbm90IE5VTEwsIGl0IGlzIGNhbGxlZCB3aXRoIDxpPmNhbGxiYWNrX2RhdGE8L2k+IGFzIGFuCithcmd1bWVudCBhdCB0aGUgc3RhcnQgb2YgbWF0Y2hpbmcsIGluIG9yZGVyIHRvIHNldCB1cCBhIEpJVCBzdGFjay4gSWYgdGhlCityZXN1bHQgaXMgTlVMTCwgdGhlIGludGVybmFsIDMySyBzdGFjayBpcyB1c2VkOyBvdGhlcndpc2UgdGhlIHJldHVybiB2YWx1ZSBtdXN0CitiZSBhIHZhbGlkIEpJVCBzdGFjaywgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIDxiPnBjcmUyX2ppdF9zdGFja19jcmVhdGUoKTwvYj4uCis8L1A+Cis8UD4KK1lvdSBtYXkgc2FmZWx5IHVzZSB0aGUgc2FtZSBKSVQgc3RhY2sgZm9yIG11bHRpcGxlIHBhdHRlcm5zLCBhcyBsb25nIGFzIHRoZXkKK2FyZSBhbGwgbWF0Y2hlZCBpbiB0aGUgc2FtZSB0aHJlYWQuIEluIGEgbXVsdGl0aHJlYWQgYXBwbGljYXRpb24sIGVhY2ggdGhyZWFkCittdXN0IHVzZSBpdHMgb3duIEpJVCBzdGFjay4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZQorPGEgaHJlZj0icGNyZTJqaXQuaHRtbCI+PGI+cGNyZTJqaXQ8L2I+PC9hPgorcGFnZS4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfaml0X3N0YWNrX2NyZWF0ZS5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfaml0X3N0YWNrX2NyZWF0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NjhlMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9qaXRfc3RhY2tfY3JlYXRlLmh0bWwKQEAgLTAsMCArMSw1MCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9qaXRfc3RhY2tfY3JlYXRlIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9qaXRfc3RhY2tfY3JlYXRlIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPnBjcmUyX2ppdF9zdGFjayAqcGNyZTJfaml0X3N0YWNrX2NyZWF0ZShQQ1JFMl9TSVpFIDxpPnN0YXJ0c2l6ZTwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFIDxpPm1heHNpemU8L2k+LCBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjcmVhdGUgYSBzdGFjayBmb3IgdXNlIGJ5IHRoZSBjb2RlIGNvbXBpbGVkIGJ5IHRoZSBKSVQKK2NvbXBpbGVyLiBUaGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBhcmUgYSBzdGFydGluZyBzaXplIGZvciB0aGUgc3RhY2ssIGFuZCBhCittYXhpbXVtIHNpemUgdG8gd2hpY2ggaXQgaXMgYWxsb3dlZCB0byBncm93LiBUaGUgZmluYWwgYXJndW1lbnQgaXMgYSBnZW5lcmFsCitjb250ZXh0LCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLCBvciBOVUxMIGZvciBzdGFuZGFyZCBtZW1vcnkKK2FsbG9jYXRpb24uIFRoZSByZXN1bHQgY2FuIGJlIHBhc3NlZCB0byB0aGUgSklUIHJ1bi10aW1lIGNvZGUgYnkgY2FsbGluZworPGI+cGNyZTJfaml0X3N0YWNrX2Fzc2lnbigpPC9iPiB0byBhc3NvY2lhdGUgdGhlIHN0YWNrIHdpdGggYSBjb21waWxlZCBwYXR0ZXJuLAord2hpY2ggY2FuIHRoZW4gYmUgcHJvY2Vzc2VkIGJ5IDxiPnBjcmUyX21hdGNoKCk8L2I+LiBJZiB0aGUgImZhc3QgcGF0aCIgSklUCittYXRjaGVyLCA8Yj5wY3JlMl9qaXRfbWF0Y2goKTwvYj4gaXMgdXNlZCwgdGhlIHN0YWNrIGNhbiBiZSBwYXNzZWQgZGlyZWN0bHkgYXMKK2FuIGFyZ3VtZW50LiBBIG1heGltdW0gc3RhY2sgc2l6ZSBvZiA1MTJLIHRvIDFNIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoIGZvcgorYW55IHBhdHRlcm4uIEZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUKKzxhIGhyZWY9InBjcmUyaml0Lmh0bWwiPjxiPnBjcmUyaml0PC9iPjwvYT4KK3BhZ2UuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX2ppdF9zdGFja19mcmVlLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9qaXRfc3RhY2tfZnJlZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYWMyNzYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9qaXRfc3RhY2tfZnJlZS5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfaml0X3N0YWNrX2ZyZWUgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX2ppdF9zdGFja19mcmVlIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPnZvaWQgcGNyZTJfaml0X3N0YWNrX2ZyZWUocGNyZTJfaml0X3N0YWNrICo8aT5qaXRfc3RhY2s8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGZyZWUgYSBKSVQgc3RhY2sgdGhhdCB3YXMgY3JlYXRlZCBieQorPGI+cGNyZTJfaml0X3N0YWNrX2NyZWF0ZSgpPC9iPiB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuIEZvciBtb3JlIGRldGFpbHMsCitzZWUgdGhlCis8YSBocmVmPSJwY3JlMmppdC5odG1sIj48Yj5wY3JlMmppdDwvYj48L2E+CitwYWdlLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9tYWtldGFibGVzLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9tYWtldGFibGVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY4ZTZkNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX21ha2V0YWJsZXMuaHRtbApAQCAtMCwwICsxLDQ4IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX21ha2V0YWJsZXMgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX21ha2V0YWJsZXMgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+Y29uc3QgdW5zaWduZWQgY2hhciAqcGNyZTJfbWFrZXRhYmxlcyhwY3JlMjJfZ2VuZXJhbF9jb250ZXh0ICo8aT5nY29udGV4dDwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIGJ1aWxkcyBhIHNldCBvZiBjaGFyYWN0ZXIgdGFibGVzIGZvciBjaGFyYWN0ZXIgdmFsdWVzIGxlc3MgdGhhbgorMjU2LiBUaGVzZSBjYW4gYmUgcGFzc2VkIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gaW4gYSBjb21waWxlIGNvbnRleHQgaW4gb3JkZXIKK3RvIG92ZXJyaWRlIHRoZSBpbnRlcm5hbCwgYnVpbHQtaW4gdGFibGVzICh3aGljaCB3ZXJlIGVpdGhlciBkZWZhdWx0ZWQgb3IgbWFkZQorYnkgPGI+cGNyZTJfbWFrZXRhYmxlcygpPC9iPiB3aGVuIFBDUkUyIHdhcyBjb21waWxlZCkuIFNlZSB0aGUKKzxhIGhyZWY9InBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzLmh0bWwiPjxiPnBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKCk8L2I+PC9hPgorcGFnZS4gWW91IG1pZ2h0IHdhbnQgdG8gZG8gdGhpcyBpZiB5b3UgYXJlIHVzaW5nIGEgbm9uLXN0YW5kYXJkIGxvY2FsZS4KKzwvUD4KKzxQPgorSWYgdGhlIGFyZ3VtZW50IGlzIE5VTEwsIDxiPm1hbGxvYygpPC9iPiBpcyB1c2VkIHRvIGdldCBtZW1vcnkgZm9yIHRoZSB0YWJsZXMuCitPdGhlcndpc2UgaXQgbXVzdCBwb2ludCB0byBhIGdlbmVyYWwgY29udGV4dCwgd2hpY2ggY2FuIHN1cHBseSBwb2ludGVycyB0byBhCitjdXN0b20gbWVtb3J5IG1hbmFnZXIuIFRoZSBmdW5jdGlvbiB5aWVsZHMgYSBwb2ludGVyIHRvIHRoZSB0YWJsZXMuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX21hdGNoLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9tYXRjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlMzg5ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9tYXRjaC5odG1sCkBAIC0wLDAgKzEsNzYgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfbWF0Y2ggc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX21hdGNoIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludCBwY3JlMl9tYXRjaChjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgUENSRTJfU1BUUiA8aT5zdWJqZWN0PC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgPGk+bGVuZ3RoPC9pPiwgUENSRTJfU0laRSA8aT5zdGFydG9mZnNldDwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT5vcHRpb25zPC9pPiwgcGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIG1hdGNoZXMgYSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gYWdhaW5zdCBhIGdpdmVuIHN1YmplY3QKK3N0cmluZywgdXNpbmcgYSBtYXRjaGluZyBhbGdvcml0aG0gdGhhdCBpcyBzaW1pbGFyIHRvIFBlcmwncy4gSXQgcmV0dXJucworb2Zmc2V0cyB0byBjYXB0dXJlZCBzdWJzdHJpbmdzLiBJdHMgYXJndW1lbnRzIGFyZToKKzxwcmU+CisgIDxpPmNvZGU8L2k+ICAgICAgICAgUG9pbnRzIHRvIHRoZSBjb21waWxlZCBwYXR0ZXJuCisgIDxpPnN1YmplY3Q8L2k+ICAgICAgUG9pbnRzIHRvIHRoZSBzdWJqZWN0IHN0cmluZworICA8aT5sZW5ndGg8L2k+ICAgICAgIExlbmd0aCBvZiB0aGUgc3ViamVjdCBzdHJpbmcKKyAgPGk+c3RhcnRvZmZzZXQ8L2k+ICBPZmZzZXQgaW4gdGhlIHN1YmplY3QgYXQgd2hpY2ggdG8gc3RhcnQgbWF0Y2hpbmcKKyAgPGk+b3B0aW9uczwvaT4gICAgICBPcHRpb24gYml0cworICA8aT5tYXRjaF9kYXRhPC9pPiAgIFBvaW50cyB0byBhIG1hdGNoIGRhdGEgYmxvY2ssIGZvciByZXN1bHRzCisgIDxpPm1jb250ZXh0PC9pPiAgICAgUG9pbnRzIHRvIGEgbWF0Y2ggY29udGV4dCwgb3IgaXMgTlVMTAorPC9wcmU+CitBIG1hdGNoIGNvbnRleHQgaXMgbmVlZGVkIG9ubHkgaWYgeW91IHdhbnQgdG86Cis8cHJlPgorICBTZXQgdXAgYSBjYWxsb3V0IGZ1bmN0aW9uCisgIENoYW5nZSB0aGUgbGltaXQgZm9yIGNhbGxpbmcgdGhlIGludGVybmFsIGZ1bmN0aW9uIDxpPm1hdGNoKCk8L2k+CisgIENoYW5nZSB0aGUgbGltaXQgZm9yIGNhbGxpbmcgPGk+bWF0Y2goKTwvaT4gcmVjdXJzaXZlbHkKKyAgU2V0IGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCB3aGVuIHRoZSBoZWFwIGlzIHVzZWQgZm9yIHJlY3Vyc2lvbgorPC9wcmU+CitUaGUgPGk+bGVuZ3RoPC9pPiBhbmQgPGk+c3RhcnRvZmZzZXQ8L2k+IHZhbHVlcyBhcmUgY29kZQordW5pdHMsIG5vdCBjaGFyYWN0ZXJzLiBUaGUgb3B0aW9ucyBhcmU6Cis8cHJlPgorICBQQ1JFMl9BTkNIT1JFRCAgICAgICAgICBNYXRjaCBvbmx5IGF0IHRoZSBmaXJzdCBwb3NpdGlvbgorICBQQ1JFMl9OT1RCT0wgICAgICAgICAgICBTdWJqZWN0IHN0cmluZyBpcyBub3QgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKKyAgUENSRTJfTk9URU9MICAgICAgICAgICAgU3ViamVjdCBzdHJpbmcgaXMgbm90IHRoZSBlbmQgb2YgYSBsaW5lCisgIFBDUkUyX05PVEVNUFRZICAgICAgICAgIEFuIGVtcHR5IHN0cmluZyBpcyBub3QgYSB2YWxpZCBtYXRjaAorICBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUICBBbiBlbXB0eSBzdHJpbmcgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBub3QgYSB2YWxpZCBtYXRjaAorICBQQ1JFMl9OT19VVEZfQ0hFQ0sgICAgICBEbyBub3QgY2hlY2sgdGhlIHN1YmplY3QgZm9yIFVURgorICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRpdHkgKG9ubHkgcmVsZXZhbnQgaWYgUENSRTJfVVRGCisgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgc2V0IGF0IGNvbXBpbGUgdGltZSkKKyAgUENSRTJfUEFSVElBTF9TT0ZUICAgICAgUmV0dXJuIFBDUkUyX0VSUk9SX1BBUlRJQUwgZm9yIGEgcGFydGlhbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIGlmIG5vIGZ1bGwgbWF0Y2hlcyBhcmUgZm91bmQKKyAgUENSRTJfUEFSVElBTF9IQVJEICAgICAgUmV0dXJuIFBDUkUyX0VSUk9SX1BBUlRJQUwgZm9yIGEgcGFydGlhbCBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhhdCBpcyBmb3VuZCBiZWZvcmUgYSBmdWxsIG1hdGNoCis8L3ByZT4KK0ZvciBkZXRhaWxzIG9mIHBhcnRpYWwgbWF0Y2hpbmcsIHNlZSB0aGUKKzxhIGhyZWY9InBjcmUycGFydGlhbC5odG1sIj48Yj5wY3JlMnBhcnRpYWw8L2I+PC9hPgorcGFnZS4gVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5Lmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9tYXRjaF9jb250ZXh0X2NvcHkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTcxOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5Lmh0bWwKQEAgLTAsMCArMSw0MSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9tYXRjaF9jb250ZXh0X2NvcHkgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX21hdGNoX2NvbnRleHRfY29weSBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5wY3JlMl9tYXRjaF9jb250ZXh0ICpwY3JlMl9tYXRjaF9jb250ZXh0X2NvcHkoPC9iPgorPGI+ICBwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIG1ha2VzIGEgbmV3IGNvcHkgb2YgYSBtYXRjaCBjb250ZXh0LCB1c2luZyB0aGUgbWVtb3J5CithbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQgd2FzIHVzZWQgZm9yIHRoZSBvcmlnaW5hbCBjb250ZXh0LiBUaGUgcmVzdWx0IGlzIE5VTEwKK2lmIHRoZSBtZW1vcnkgY2Fubm90IGJlIG9idGFpbmVkLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZS5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfbWF0Y2hfY29udGV4dF9jcmVhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2YyNzM1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfbWF0Y2hfY29udGV4dF9jcmVhdGUuaHRtbApAQCAtMCwwICsxLDQyIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX21hdGNoX2NvbnRleHRfY3JlYXRlIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZSBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5wY3JlMl9tYXRjaF9jb250ZXh0ICpwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZSg8L2I+Cis8Yj4gIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqPGk+Z2NvbnRleHQ8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIG5ldyBtYXRjaCBjb250ZXh0LiBJZiBpdHMgYXJndW1lbnQgaXMKK05VTEwsIDxiPm1hbGxvYygpPC9iPiBpcyB1c2VkIHRvIGdldCB0aGUgbmVjZXNzYXJ5IG1lbW9yeTsgb3RoZXJ3aXNlIHRoZSBtZW1vcnkKK2FsbG9jYXRpb24gZnVuY3Rpb24gd2l0aGluIHRoZSBnZW5lcmFsIGNvbnRleHQgaXMgdXNlZC4gVGhlIHJlc3VsdCBpcyBOVUxMIGlmCit0aGUgbWVtb3J5IGNvdWxkIG5vdCBiZSBvYnRhaW5lZC4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjQ4OTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlLmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWUgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX21hdGNoX2NvbnRleHRfZnJlZSBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj52b2lkIHBjcmUyX21hdGNoX2NvbnRleHRfZnJlZShwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBtZW1vcnkgb2NjdXBpZWQgYnkgYSBtYXRjaCBjb250ZXh0LCB1c2luZyB0aGUgbWVtb3J5CitmcmVlaW5nIGZ1bmN0aW9uIGZyb20gdGhlIGdlbmVyYWwgY29udGV4dCB3aXRoIHdoaWNoIGl0IHdhcyBjcmVhdGVkLCBvcgorPGI+ZnJlZSgpPC9iPiBpZiB0aGF0IHdhcyBub3Qgc2V0LgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZS5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDAzMjFiCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUuaHRtbApAQCAtMCwwICsxLDQ5IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5wY3JlMl9tYXRjaF9kYXRhICpwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSh1aW50MzJfdCA8aT5vdmVjc2l6ZTwvaT4sPC9iPgorPGI+ICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBtYXRjaCBkYXRhIGJsb2NrLCB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nIHRoZQorcmVzdWx0IG9mIGEgbWF0Y2guIFRoZSBmaXJzdCBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBwYWlycyBvZiBvZmZzZXRzCit0aGF0IGFyZSByZXF1aXJlZC4gVGhlc2UgZm9ybSB0aGUgIm91dHB1dCB2ZWN0b3IiIChvdmVjdG9yKSB3aXRoaW4gdGhlIG1hdGNoCitkYXRhIGJsb2NrLCBhbmQgYXJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIG1hdGNoZWQgc3RyaW5nIGFuZCBhbnkgY2FwdHVyZWQKK3N1YnN0cmluZ3MuIFRoZXJlIGlzIGFsd2F5cyBvbmUgcGFpciBvZiBvZmZzZXRzOyBpZiA8Yj5vdmVjc2l6ZTwvYj4gaXMgemVybywgaXQKK2lzIHRyZWF0ZWQgYXMgb25lLgorPC9QPgorPFA+CitUaGUgc2Vjb25kIGFyZ3VtZW50IHBvaW50cyB0byBhIGdlbmVyYWwgY29udGV4dCwgZm9yIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCwKK29yIGlzIE5VTEwgZm9yIHN5c3RlbSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gaXMgTlVMTCBpZgordGhlIG1lbW9yeSBmb3IgdGhlIGJsb2NrIGNvdWxkIG5vdCBiZSBvYnRhaW5lZC4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDBjZjFlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuLmh0bWwKQEAgLTAsMCArMSw1MCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4gc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybiBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5wY3JlMl9tYXRjaF9kYXRhICpwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4oPC9iPgorPGI+ICBjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICo8aT5nY29udGV4dDwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgbWF0Y2ggZGF0YSBibG9jaywgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyB0aGUKK3Jlc3VsdCBvZiBhIG1hdGNoLiBUaGUgZmlyc3QgYXJndW1lbnQgcG9pbnRzIHRvIGEgY29tcGlsZWQgcGF0dGVybi4gVGhlIG51bWJlcgorb2YgY2FwdHVyaW5nIHBhcmVudGhlc2VzIHdpdGhpbiB0aGUgcGF0dGVybiBpcyB1c2VkIHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZgorcGFpcnMgb2Ygb2Zmc2V0cyB0aGF0IGFyZSByZXF1aXJlZCBpbiB0aGUgbWF0Y2ggZGF0YSBibG9jay4gVGhlc2UgZm9ybSB0aGUKKyJvdXRwdXQgdmVjdG9yIiAob3ZlY3Rvcikgd2l0aGluIHRoZSBtYXRjaCBkYXRhIGJsb2NrLCBhbmQgYXJlIHVzZWQgdG8gaWRlbnRpZnkKK3RoZSBtYXRjaGVkIHN0cmluZyBhbmQgYW55IGNhcHR1cmVkIHN1YnN0cmluZ3MuCis8L1A+Cis8UD4KK1RoZSBzZWNvbmQgYXJndW1lbnQgcG9pbnRzIHRvIGEgZ2VuZXJhbCBjb250ZXh0LCBmb3IgY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50LAorb3IgaXMgTlVMTCB0byB1c2UgdGhlIHNhbWUgbWVtb3J5IGFsbG9jYXRvciBhcyB3YXMgdXNlZCBmb3IgdGhlIGNvbXBpbGVkCitwYXR0ZXJuLiBUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBpcyBOVUxMIGlmIHRoZSBtZW1vcnkgZm9yIHRoZSBibG9jayBjb3VsZAorbm90IGJlIG9idGFpbmVkLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9tYXRjaF9kYXRhX2ZyZWUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX21hdGNoX2RhdGFfZnJlZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZTEwN2UKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9tYXRjaF9kYXRhX2ZyZWUuaHRtbApAQCAtMCwwICsxLDQwIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX21hdGNoX2RhdGFfZnJlZSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfbWF0Y2hfZGF0YV9mcmVlIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPnZvaWQgcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgbWVtb3J5IG9jY3VwaWVkIGJ5IGEgbWF0Y2ggZGF0YSBibG9jaywgdXNpbmcgdGhlIG1lbW9yeQorZnJlZWluZyBmdW5jdGlvbiBmcm9tIHRoZSBnZW5lcmFsIGNvbnRleHQgd2l0aCB3aGljaCBpdCB3YXMgY3JlYXRlZCwgb3IKKzxiPmZyZWUoKTwvYj4gaWYgdGhhdCB3YXMgbm90IHNldC4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfcGF0dGVybl9pbmZvLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9wYXR0ZXJuX2luZm8uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGNkNmY1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfcGF0dGVybl9pbmZvLmh0bWwKQEAgLTAsMCArMSwxMDcgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfcGF0dGVybl9pbmZvIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9wYXR0ZXJuX2luZm8gbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX3BhdHRlcm5faW5mbyhjb25zdCBwY3JlMiAqPGk+Y29kZTwvaT4sIHVpbnQzMl90IDxpPndoYXQ8L2k+LCB2b2lkICo8aT53aGVyZTwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBjb21waWxlZCBwYXR0ZXJuLiBJdHMgYXJndW1lbnRzIGFyZToKKzxwcmU+CisgIDxpPmNvZGU8L2k+ICAgICBQb2ludGVyIHRvIGEgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uCisgIDxpPndoYXQ8L2k+ICAgICBXaGF0IGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkCisgIDxpPndoZXJlPC9pPiAgICBXaGVyZSB0byBwdXQgdGhlIGluZm9ybWF0aW9uCis8L3ByZT4KK1RoZSByZWNvZ25pemVkIHZhbHVlcyBmb3IgdGhlIDxpPndoYXQ8L2k+IGFyZ3VtZW50LCBhbmQgdGhlIGluZm9ybWF0aW9uIHRoZXkKK3JlcXVlc3QgYXJlIGFzIGZvbGxvd3M6Cis8cHJlPgorICBQQ1JFMl9JTkZPX0FMTE9QVElPTlMgICAgICBGaW5hbCBvcHRpb25zIGFmdGVyIGNvbXBpbGluZworICBQQ1JFMl9JTkZPX0FSR09QVElPTlMgICAgICBPcHRpb25zIHBhc3NlZCB0byA8Yj5wY3JlMl9jb21waWxlKCk8L2I+CisgIFBDUkUyX0lORk9fQkFDS1JFRk1BWCAgICAgIE51bWJlciBvZiBoaWdoZXN0IGJhY2sgcmVmZXJlbmNlCisgIFBDUkUyX0lORk9fQlNSICAgICAgICAgICAgIFdoYXQgXFIgbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9CU1JfVU5JQ09ERTogVW5pY29kZSBsaW5lIGVuZGluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9CU1JfQU5ZQ1JMRjogQ1IsIExGLCBvciBDUkxGIG9ubHkKKyAgUENSRTJfSU5GT19DQVBUVVJFQ09VTlQgICAgTnVtYmVyIG9mIGNhcHR1cmluZyBzdWJwYXR0ZXJucworICBQQ1JFMl9JTkZPX0ZJUlNUQklUTUFQICAgICBCaXRtYXAgb2YgZmlyc3QgY29kZSB1bml0cywgb3IgTlVMTAorICBQQ1JFMl9JTkZPX0ZJUlNUQ09ERVRZUEUgICBUeXBlIG9mIHN0YXJ0LW9mLW1hdGNoIGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCBub3RoaW5nIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgZmlyc3QgY29kZSB1bml0IGlzIHNldAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgc3RhcnQgb2Ygc3RyaW5nIG9yIGFmdGVyIG5ld2xpbmUKKyAgUENSRTJfSU5GT19GSVJTVENPREVVTklUICAgRmlyc3QgY29kZSB1bml0IHdoZW4gdHlwZSBpcyAxCisgIFBDUkUyX0lORk9fSEFTQkFDS1NMQVNIQyAgIFJldHVybiAxIGlmIHBhdHRlcm4gY29udGFpbnMgXEMKKyAgUENSRTJfSU5GT19IQVNDUk9STEYgICAgICAgUmV0dXJuIDEgaWYgZXhwbGljaXQgQ1Igb3IgTEYgbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IGluIHRoZSBwYXR0ZXJuCisgIFBDUkUyX0lORk9fSkNIQU5HRUQgICAgICAgIFJldHVybiAxIGlmICg/Sikgb3IgKD8tSikgd2FzIHVzZWQKKyAgUENSRTJfSU5GT19KSVRTSVpFICAgICAgICAgU2l6ZSBvZiBKSVQgY29tcGlsZWQgY29kZSwgb3IgMAorICBQQ1JFMl9JTkZPX0xBU1RDT0RFVFlQRSAgICBUeXBlIG9mIG11c3QtYmUtcHJlc2VudCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgbm90aGluZyBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIGNvZGUgdW5pdCBpcyBzZXQKKyAgUENSRTJfSU5GT19MQVNUQ09ERVVOSVQgICAgTGFzdCBjb2RlIHVuaXQgd2hlbiB0eXBlIGlzIDEKKyAgUENSRTJfSU5GT19NQVRDSEVNUFRZICAgICAgMSBpZiB0aGUgcGF0dGVybiBjYW4gbWF0Y2ggYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eSBzdHJpbmcsIDAgb3RoZXJ3aXNlCisgIFBDUkUyX0lORk9fTUFUQ0hMSU1JVCAgICAgIE1hdGNoIGxpbWl0IGlmIHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgUENSRTJfRVJST1JfVU5TRVQKKyAgUENSRTJfSU5GT19NQVhMT09LQkVISU5EICAgTGVuZ3RoIChpbiBjaGFyYWN0ZXJzKSBvZiB0aGUgbG9uZ2VzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tiZWhpbmQgYXNzZXJ0aW9uCisgIFBDUkUyX0lORk9fTUlOTEVOR1RIICAgICAgIExvd2VyIGJvdW5kIGxlbmd0aCBvZiBtYXRjaGluZyBzdHJpbmdzCisgIFBDUkUyX0lORk9fTkFNRUNPVU5UICAgICAgIE51bWJlciBvZiBuYW1lZCBzdWJwYXR0ZXJucworICBQQ1JFMl9JTkZPX05BTUVFTlRSWVNJWkUgICBTaXplIG9mIG5hbWUgdGFibGUgZW50cmllcworICBQQ1JFMl9JTkZPX05BTUVUQUJMRSAgICAgICBQb2ludGVyIHRvIG5hbWUgdGFibGUKKyAgUENSRTJfQ09ORklHX05FV0xJTkUgICAgICAgQ29kZSBmb3IgdGhlIG5ld2xpbmUgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfTkVXTElORV9DUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX05FV0xJTkVfTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9ORVdMSU5FX0NSTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9ORVdMSU5FX0FOWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRgorICBQQ1JFMl9JTkZPX1JFQ1VSU0lPTkxJTUlUICBSZWN1cnNpb24gbGltaXQgaWYgc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBQQ1JFMl9FUlJPUl9VTlNFVAorICBQQ1JFMl9JTkZPX1NJWkUgICAgICAgICAgICBTaXplIG9mIGNvbXBpbGVkIHBhdHRlcm4KKzwvcHJlPgorSWYgPGk+d2hlcmU8L2k+IGlzIE5VTEwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgbWVtb3J5IG5lZWRlZCBmb3IKK3RoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24sIGluIGJ5dGVzLiBPdGhlcndpc2UsIHRoZSA8aT53aGVyZTwvaT4gYXJndW1lbnQgbXVzdAorcG9pbnQgdG8gYW4gdW5zaWduZWQgMzItYml0IGludGVnZXIgKHVpbnQzMl90IHZhcmlhYmxlKSwgZXhjZXB0IGZvciB0aGUKK2ZvbGxvd2luZyA8aT53aGF0PC9pPiB2YWx1ZXMsIHdoZW4gaXQgbXVzdCBwb2ludCB0byBhIHZhcmlhYmxlIG9mIHRoZSB0eXBlCitzaG93bjoKKzxwcmU+CisgIFBDUkUyX0lORk9fRklSU1RCSVRNQVAgICAgIGNvbnN0IHVpbnQ4X3QgKgorICBQQ1JFMl9JTkZPX0pJVFNJWkUgICAgICAgICBzaXplX3QKKyAgUENSRTJfSU5GT19OQU1FVEFCTEUgICAgICAgUENSRTJfU1BUUgorICBQQ1JFMl9JTkZPX1NJWkUgICAgICAgICAgICBzaXplX3QKKzwvcHJlPgorVGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyB6ZXJvIG9uIHN1Y2Nlc3Mgb3I6Cis8cHJlPgorICBQQ1JFMl9FUlJPUl9OVUxMICAgICAgICAgICB0aGUgYXJndW1lbnQgPGk+Y29kZTwvaT4gaXMgTlVMTAorICBQQ1JFMl9FUlJPUl9CQURNQUdJQyAgICAgICB0aGUgIm1hZ2ljIG51bWJlciIgd2FzIG5vdCBmb3VuZAorICBQQ1JFMl9FUlJPUl9CQURPUFRJT04gICAgICB0aGUgdmFsdWUgb2YgPGk+d2hhdDwvaT4gaXMgaW52YWxpZAorICBQQ1JFMl9FUlJPUl9CQURNT0RFICAgICAgICB0aGUgcGF0dGVybiB3YXMgY29tcGlsZWQgaW4gdGhlIHdyb25nIG1vZGUKKyAgUENSRTJfRVJST1JfVU5TRVQgICAgICAgICAgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBpcyBub3Qgc2V0Cis8L1BSRT4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2VyaWFsaXplX2RlY29kZS5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2VyaWFsaXplX2RlY29kZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ODM5OGYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXJpYWxpemVfZGVjb2RlLmh0bWwKQEAgLTAsMCArMSw2MiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zZXJpYWxpemVfZGVjb2RlIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9zZXJpYWxpemVfZGVjb2RlIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludDMyX3QgcGNyZTJfc2VyaWFsaXplX2RlY29kZShwY3JlMl9jb2RlICoqPGk+Y29kZXM8L2k+LDwvYj4KKzxiPiAgaW50MzJfdCA8aT5udW1iZXJfb2ZfY29kZXM8L2k+LCBjb25zdCB1aW50OF90ICo8aT5ieXRlczwvaT4sPC9iPgorPGI+ICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gZGVjb2RlcyBhIHNlcmlhbGl6ZWQgc2V0IG9mIGNvbXBpbGVkIHBhdHRlcm5zIGJhY2sgaW50byBhIGxpc3Qgb2YKK2luZGl2aWR1YWwgcGF0dGVybnMuIEl0cyBhcmd1bWVudHMgYXJlOgorPHByZT4KKyAgPGk+Y29kZXM8L2k+ICAgICAgICAgICAgcG9pbnRlciB0byBhIHZlY3RvciBpbiB3aGljaCB0byBidWlsZCB0aGUgbGlzdAorICA8aT5udW1iZXJfb2ZfY29kZXM8L2k+ICBudW1iZXIgb2Ygc2xvdHMgaW4gdGhlIHZlY3RvcgorICA8aT5ieXRlczwvaT4gICAgICAgICAgICB0aGUgc2VyaWFsaXplZCBieXRlIHN0cmVhbQorICA8aT5nY29udGV4dDwvaT4gICAgICAgICBwb2ludGVyIHRvIGEgZ2VuZXJhbCBjb250ZXh0IG9yIE5VTEwKKzwvcHJlPgorVGhlIDxpPmJ5dGVzPC9pPiBhcmd1bWVudCBtdXN0IHBvaW50IHRvIGEgYmxvY2sgb2YgZGF0YSB0aGF0IHdhcyBvcmlnaW5hbGx5CitjcmVhdGVkIGJ5IDxiPnBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUoKTwvYj4sIHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuIHNhdmVkIG9uCitkaXNjIG9yIGVsc2V3aGVyZSBpbiB0aGUgbWVhbnRpbWUuIElmIHRoZXJlIGFyZSBtb3JlIGNvZGVzIGluIHRoZSBzZXJpYWxpemVkCitkYXRhIHRoYW4gc2xvdHMgaW4gdGhlIGxpc3QsIG9ubHkgdGhvc2UgY29tcGlsZWQgcGF0dGVybnMgdGhhdCB3aWxsIGZpdCBhcmUKK2RlY29kZWQuIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgdGhlIG51bWJlciBvZiBkZWNvZGVkIHBhdHRlcm5zLCBvciBvbmUgb2YKK3RoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6Cis8cHJlPgorICBQQ1JFMl9FUlJPUl9CQUREQVRBICAgPGk+bnVtYmVyX29mX2NvZGVzPC9pPiBpcyB6ZXJvIG9yIGxlc3MKKyAgUENSRTJfRVJST1JfQkFETUFHSUMgIG1pc21hdGNoIG9mIGlkIGJ5dGVzIGluIDxpPmJ5dGVzPC9pPgorICBQQ1JFMl9FUlJPUl9CQURNT0RFICAgbWlzbWF0Y2ggb2YgdmFyaWFibGUgdW5pdCBzaXplIG9yIFBDUkUgdmVyc2lvbgorICBQQ1JFMl9FUlJPUl9NRU1PUlkgICAgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgIFBDUkUyX0VSUk9SX05VTEwgICAgICA8aT5jb2RlczwvaT4gb3IgPGk+Ynl0ZXM8L2k+IGlzIE5VTEwKKzwvcHJlPgorUENSRTJfRVJST1JfQkFETUFHSUMgbWF5IG1lYW4gdGhhdCB0aGUgZGF0YSBpcyBjb3JydXB0LCBvciB0aGF0IGl0IHdhcyBjb21waWxlZAorb24gYSBzeXN0ZW0gd2l0aCBkaWZmZXJlbnQgZW5kaWFubmVzcy4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2VyaWFsaXplX2VuY29kZS5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2VyaWFsaXplX2VuY29kZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Y2M0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXJpYWxpemVfZW5jb2RlLmh0bWwKQEAgLTAsMCArMSw2MSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zZXJpYWxpemVfZW5jb2RlIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9zZXJpYWxpemVfZW5jb2RlIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludDMyX3QgcGNyZTJfc2VyaWFsaXplX2VuY29kZShjb25zdCBwY3JlMl9jb2RlICoqPGk+Y29kZXM8L2k+LDwvYj4KKzxiPiAgaW50MzJfdCA8aT5udW1iZXJfb2ZfY29kZXM8L2k+LCB1aW50OF90ICoqPGk+c2VyaWFsaXplZF9ieXRlczwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFICo8aT5zZXJpYWxpemVkX3NpemU8L2k+LCBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gZW5jb2RlcyBhIGxpc3Qgb2YgY29tcGlsZWQgcGF0dGVybnMgaW50byBhIGJ5dGUgc3RyZWFtIHRoYXQgY2FuCitiZSBzYXZlZCBvbiBkaXNjIG9yIGVsc2V3aGVyZS4gSXRzIGFyZ3VtZW50cyBhcmU6Cis8cHJlPgorICA8aT5jb2RlczwvaT4gICAgICAgICAgICAgcG9pbnRlciB0byBhIHZlY3RvciBjb250YWluaW5nIHRoZSBsaXN0CisgIDxpPm51bWJlcl9vZl9jb2RlczwvaT4gICBudW1iZXIgb2Ygc2xvdHMgaW4gdGhlIHZlY3RvcgorICA8aT5zZXJpYWxpemVkX2J5dGVzPC9pPiAgc2V0IHRvIHBvaW50IHRvIHRoZSBzZXJpYWxpemVkIGJ5dGUgc3RyZWFtCisgIDxpPnNlcmlhbGl6ZWRfc2l6ZTwvaT4gICBzZXQgdG8gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgYnl0ZSBzdHJlYW0KKyAgPGk+Z2NvbnRleHQ8L2k+ICAgICAgICAgIHBvaW50ZXIgdG8gYSBnZW5lcmFsIGNvbnRleHQgb3IgTlVMTAorPC9wcmU+CitUaGUgY29udGV4dCBhcmd1bWVudCBpcyB1c2VkIHRvIG9idGFpbiBtZW1vcnkgZm9yIHRoZSBieXRlIHN0cmVhbS4gV2hlbiB0aGUKK3NlcmlhbGl6ZWQgZGF0YSBpcyBubyBsb25nZXIgbmVlZGVkLCBpdCBtdXN0IGJlIGZyZWVkIGJ5IGNhbGxpbmcKKzxiPnBjcmUyX3NlcmlhbGl6ZV9mcmVlKCk8L2I+LiBUaGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIHRoZSBudW1iZXIgb2YKK3NlcmlhbGl6ZWQgcGF0dGVybnMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorPHByZT4KKyAgUENSRTJfRVJST1JfQkFEREFUQSAgICAgIDxpPm51bWJlcl9vZl9jb2RlczwvaT4gaXMgemVybyBvciBsZXNzCisgIFBDUkUyX0VSUk9SX0JBRE1BR0lDICAgICBtaXNtYXRjaCBvZiBpZCBieXRlcyBpbiBvbmUgb2YgdGhlIHBhdHRlcm5zCisgIFBDUkUyX0VSUk9SX01FTU9SWSAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAgUENSRTJfRVJST1JfTUlYRURUQUJMRVMgIHRoZSBwYXR0ZXJucyBkbyBub3QgYWxsIHVzZSB0aGUgc2FtZSB0YWJsZXMKKyAgUENSRTJfRVJST1JfTlVMTCAgICAgICAgIGFuIGFyZ3VtZW50IG90aGVyIHRoYW4gPGk+Z2NvbnRleHQ8L2k+IGlzIE5VTEwKKzwvcHJlPgorUENSRTJfRVJST1JfQkFETUFHSUMgbWVhbnMgZWl0aGVyIHRoYXQgYSBwYXR0ZXJuJ3MgY29kZSBoYXMgYmVlbiBjb3JydXB0ZWQsIG9yCit0aGF0IGEgc2xvdCBpbiB0aGUgdmVjdG9yIGRvZXMgbm90IHBvaW50IHRvIGEgY29tcGlsZWQgcGF0dGVybi4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2VyaWFsaXplX2ZyZWUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3NlcmlhbGl6ZV9mcmVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA2OTVkYwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3NlcmlhbGl6ZV9mcmVlLmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zZXJpYWxpemVfZnJlZSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfc2VyaWFsaXplX2ZyZWUgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+dm9pZCBwY3JlMl9zZXJpYWxpemVfZnJlZSh1aW50OF90ICo8aT5ieXRlczwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBtZW1vcnkgdGhhdCB3YXMgb2J0YWluZWQgYnkKKzxiPnBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUoKTwvYj4gdG8gaG9sZCBhIHNlcmlhbGl6ZWQgYnl0ZSBzdHJlYW0uIFRoZSBhcmd1bWVudAorbXVzdCBwb2ludCB0byBzdWNoIGEgYnl0ZSBzdHJlYW0uCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYWI0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlcy5odG1sCkBAIC0wLDAgKzEsNDkgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXMgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludDMyX3QgcGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXMoY29uc3QgdWludDhfdCAqPGk+Ynl0ZXM8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhlIDxpPmJ5dGVzPC9pPiBhcmd1bWVudCBtdXN0IHBvaW50IHRvIGEgc2VyaWFsaXplZCBieXRlIHN0cmVhbSB0aGF0IHdhcworb3JpZ2luYWxseSBjcmVhdGVkIGJ5IDxiPnBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUoKTwvYj4gKHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuCitzYXZlZCBvbiBkaXNjIG9yIGVsc2V3aGVyZSBpbiB0aGUgbWVhbnRpbWUpLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mCitzZXJpYWxpemVkIHBhdHRlcm5zIGluIHRoZSBieXRlIHN0cmVhbSwgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IKK2NvZGVzOgorPHByZT4KKyAgUENSRTJfRVJST1JfQkFETUFHSUMgIG1pc21hdGNoIG9mIGlkIGJ5dGVzIGluIDxpPmJ5dGVzPC9pPgorICBQQ1JFMl9FUlJPUl9CQURNT0RFICAgbWlzbWF0Y2ggb2YgdmFyaWFibGUgdW5pdCBzaXplIG9yIFBDUkUgdmVyc2lvbgorICBQQ1JFMl9FUlJPUl9OVUxMICAgICAgdGhlIGFyZ3VtZW50IGlzIE5VTEwKKzwvcHJlPgorUENSRTJfRVJST1JfQkFETUFHSUMgbWF5IG1lYW4gdGhhdCB0aGUgZGF0YSBpcyBjb3JydXB0LCBvciB0aGF0IGl0IHdhcyBjb21waWxlZAorb24gYSBzeXN0ZW0gd2l0aCBkaWZmZXJlbnQgZW5kaWFubmVzcy4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X2Jzci5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X2Jzci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNjJmMTgKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXRfYnNyLmh0bWwKQEAgLTAsMCArMSw0MiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zZXRfYnNyIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9zZXRfYnNyIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludCBwY3JlMl9zZXRfYnNyKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+dmFsdWU8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjb252ZW50aW9uIGZvciBwcm9jZXNzaW5nIFxSIHdpdGhpbiBhIGNvbXBpbGUgY29udGV4dC4KK1RoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgUENSRTJfQlNSX0FOWUNSTEYgb3IgUENSRTJfQlNSX1VOSUNPREUuIFRoZQorcmVzdWx0IGlzIHplcm8gZm9yIHN1Y2Nlc3Mgb3IgUENSRTJfRVJST1JfQkFEREFUQSBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCitpbnZhbGlkLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXRfY2FsbG91dC5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X2NhbGxvdXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzVlMGMyCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X2NhbGxvdXQuaHRtbApAQCAtMCwwICsxLDQzIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX3NldF9jYWxsb3V0IHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9zZXRfY2FsbG91dCBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5pbnQgcGNyZTJfc2V0X2NhbGxvdXQocGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+LDwvYj4KKzxiPiAgaW50ICgqPGk+Y2FsbG91dF9mdW5jdGlvbjwvaT4pKHBjcmUyX2NhbGxvdXRfYmxvY2sgKiksPC9iPgorPGI+ICB2b2lkICo8aT5jYWxsb3V0X2RhdGE8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBjYWxsb3V0IGZpZWxkcyBpbiBhIG1hdGNoIGNvbnRleHQgKHRoZSBmaXJzdCBhcmd1bWVudCkuCitUaGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyBhIGNhbGxvdXQgZnVuY3Rpb24sIGFuZCB0aGUgdGhpcmQgYXJndW1lbnQgaXMgYW4KK29wYXF1ZSBkYXRhIHRpbWUgdGhhdCBpcyBwYXNzZWQgdG8gaXQuIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMKK3plcm8uCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMWJkMjAKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcy5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXMgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludCBwY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcyhwY3JlMl9jb21waWxlX2NvbnRleHQgKjxpPmNjb250ZXh0PC9pPiw8L2I+Cis8Yj4gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKjxpPnRhYmxlczwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIHNldHMgYSBwb2ludGVyIHRvIGN1c3RvbSBjaGFyYWN0ZXIgdGFibGVzIHdpdGhpbiBhIGNvbXBpbGUKK2NvbnRleHQuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0bworPGI+cGNyZTJfbWFrZXRhYmxlcygpPC9iPiBvciBOVUxMIHRvIHJlcXVlc3QgdGhlIGRlZmF1bHQgdGFibGVzLiBUaGUgcmVzdWx0IGlzCithbHdheXMgemVyby4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDk5NDJjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkLmh0bWwKQEAgLTAsMCArMSw0NiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZCBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5pbnQgcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+LDwvYj4KKzxiPiAgaW50ICgqPGk+Z3VhcmRfZnVuY3Rpb248L2k+KSh1aW50MzJfdCwgdm9pZCAqKSwgdm9pZCAqPGk+dXNlcl9kYXRhPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gZGVmaW5lcywgd2l0aGluIGEgY29tcGlsZSBjb250ZXh0LCBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkCit3aGVuZXZlciA8Yj5wY3JlMl9jb21waWxlKCk8L2I+IHN0YXJ0cyB0byBjb21waWxlIGEgcGFyZW50aGVzaXplZCBwYXJ0IG9mIGEKK3BhdHRlcm4uIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZnVuY3Rpb24gZ2l2ZXMgdGhlIGN1cnJlbnQgZGVwdGggb2YKK3BhcmVudGhlc2lzIG5lc3RpbmcsIGFuZCB0aGUgc2Vjb25kIGlzIHVzZXIgZGF0YSB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gdGhlCitmdW5jdGlvbiBpcyBzZXQgdXAuIFRoZSBjYWxsb3V0IGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gemVybyBpZiBhbGwgaXMgd2VsbCwgb3IKK25vbi16ZXJvIHRvIGZvcmNlIGFuIGVycm9yLiBUaGlzIGZlYXR1cmUgaXMgcHJvdmlkZWQgc28gdGhhdCBhcHBsaWNhdGlvbnMgY2FuCitjaGVjayB0aGUgYXZhaWxhYmxlIHN5c3RlbSBzdGFjayBzcGFjZSwgaW4gb3JkZXIgdG8gYXZvaWQgcnVubmluZyBvdXQuIFRoZQorcmVzdWx0IG9mIDxiPnBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZCgpPC9iPiBpcyBhbHdheXMgemVyby4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X21hdGNoX2xpbWl0Lmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXRfbWF0Y2hfbGltaXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODQwYzc0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X21hdGNoX2xpbWl0Lmh0bWwKQEAgLTAsMCArMSw0MCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zZXRfbWF0Y2hfbGltaXQgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX3NldF9tYXRjaF9saW1pdCBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5pbnQgcGNyZTJfc2V0X21hdGNoX2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKjxpPm1jb250ZXh0PC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPnZhbHVlPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbWF0Y2ggbGltaXQgZmllbGQgaW4gYSBtYXRjaCBjb250ZXh0LiBUaGUgcmVzdWx0IGlzCithbHdheXMgemVyby4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X25ld2xpbmUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3NldF9uZXdsaW5lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU2MzMyYQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3NldF9uZXdsaW5lLmh0bWwKQEAgLTAsMCArMSw1MCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zZXRfbmV3bGluZSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfc2V0X25ld2xpbmUgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX3NldF9uZXdsaW5lKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+dmFsdWU8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBuZXdsaW5lIGNvbnZlbnRpb24gd2l0aGluIGEgY29tcGlsZSBjb250ZXh0LiBUaGlzCitzcGVjaWZpZXMgd2hpY2ggY2hhcmFjdGVyKHMpIGFyZSByZWNvZ25pemVkIGFzIG5ld2xpbmVzIHdoZW4gY29tcGlsaW5nIGFuZAorbWF0Y2hpbmcgcGF0dGVybnMuIFRoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2Y6Cis8cHJlPgorICBQQ1JFMl9ORVdMSU5FX0NSICAgICAgICBDYXJyaWFnZSByZXR1cm4gb25seQorICBQQ1JFMl9ORVdMSU5FX0xGICAgICAgICBMaW5lZmVlZCBvbmx5CisgIFBDUkUyX05FV0xJTkVfQ1JMRiAgICAgIENSIGZvbGxvd2VkIGJ5IExGIG9ubHkKKyAgUENSRTJfTkVXTElORV9BTllDUkxGICAgQW55IG9mIHRoZSBhYm92ZQorICBQQ1JFMl9ORVdMSU5FX0FOWSAgICAgICBBbnkgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlCis8L3ByZT4KK1RoZSByZXN1bHQgaXMgemVybyBmb3Igc3VjY2VzcyBvciBQQ1JFMl9FUlJPUl9CQUREQVRBIGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMKK2ludmFsaWQuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3NldF9vZmZzZXRfbGltaXQuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3NldF9vZmZzZXRfbGltaXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDlhODVjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X29mZnNldF9saW1pdC5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfc2V0X29mZnNldF9saW1pdCBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfc2V0X29mZnNldF9saW1pdCBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5pbnQgcGNyZTJfc2V0X29mZnNldF9saW1pdChwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFIDxpPnZhbHVlPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gc2V0cyB0aGUgb2Zmc2V0IGxpbWl0IGZpZWxkIGluIGEgbWF0Y2ggY29udGV4dC4gVGhlIHJlc3VsdCBpcworYWx3YXlzIHplcm8uCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3NldF9wYXJlbnNfbmVzdF9saW1pdC5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVmZDMxYwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3NldF9wYXJlbnNfbmVzdF9saW1pdC5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0IHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX3NldF9wYXJlbnNfbmVzdF9saW1pdChwY3JlMl9jb21waWxlX2NvbnRleHQgKjxpPmNjb250ZXh0PC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPnZhbHVlPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgZnVuY3Rpb24gc2V0cywgaW4gYSBjb21waWxlIGNvbnRleHQsIHRoZSBtYXhpbXVtIGRlcHRoIG9mIG5lc3RlZAorcGFyZW50aGVzZXMgaW4gYSBwYXR0ZXJuLiBUaGUgcmVzdWx0IGlzIGFsd2F5cyB6ZXJvLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXRfcmVjdXJzaW9uX2xpbWl0Lmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXRfcmVjdXJzaW9uX2xpbWl0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkY2M5OQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3NldF9yZWN1cnNpb25fbGltaXQuaHRtbApAQCAtMCwwICsxLDQwIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX3NldF9yZWN1cnNpb25fbGltaXQgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX3NldF9yZWN1cnNpb25fbGltaXQgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX3NldF9yZWN1cnNpb25fbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+dmFsdWU8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSByZWN1cnNpb24gbGltaXQgZmllbGQgaW4gYSBtYXRjaCBjb250ZXh0LiBUaGUgcmVzdWx0IGlzCithbHdheXMgemVyby4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X3JlY3Vyc2lvbl9tZW1vcnlfbWFuYWdlbWVudC5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc2V0X3JlY3Vyc2lvbl9tZW1vcnlfbWFuYWdlbWVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMTg5NDcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50Lmh0bWwKQEAgLTAsMCArMSw0NyBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50IHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50IG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludCBwY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50KDwvYj4KKzxiPiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+LDwvYj4KKzxiPiAgdm9pZCAqKCo8aT5wcml2YXRlX21hbGxvYzwvaT4pKFBDUkUyX1NJWkUsIHZvaWQgKiksPC9iPgorPGI+ICB2b2lkICgqPGk+cHJpdmF0ZV9mcmVlPC9pPikodm9pZCAqLCB2b2lkICopLCB2b2lkICo8aT5tZW1vcnlfZGF0YTwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG1hdGNoIGNvbnRleHQgZmllbGRzIGZvciBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgd2hlbgorUENSRTIgaXMgY29tcGlsZWQgdG8gdXNlIHRoZSBoZWFwIGluc3RlYWQgb2YgdGhlIHN5c3RlbSBzdGFjayBmb3IgcmVjdXJzaXZlCitmdW5jdGlvbiBjYWxscyB3aGlsZSBtYXRjaGluZy4gV2hlbiBQQ1JFMiBpcyBjb21waWxlZCB0byB1c2UgdGhlIHN0YWNrICh0aGUKK2RlZmF1bHQpIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSBtYXRjaCBjb250ZXh0LCB0aGUKK3NlY29uZCBhbmQgdGhpcmQgc3BlY2lmeSB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgZnVuY3Rpb25zLCBhbmQgdGhlCitmaW5hbCBhcmd1bWVudCBpcyBhbiBvcGFxdWUgdmFsdWUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlbSB3aGVuZXZlciB0aGV5IGFyZQorY2FsbGVkLiBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIHplcm8uCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0aXR1dGUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0aXR1dGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGZkMDk0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc3Vic3RpdHV0ZS5odG1sCkBAIC0wLDAgKzEsOTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfc3Vic3RpdHV0ZSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfc3Vic3RpdHV0ZSBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5pbnQgcGNyZTJfc3Vic3RpdHV0ZShjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgUENSRTJfU1BUUiA8aT5zdWJqZWN0PC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgPGk+bGVuZ3RoPC9pPiwgUENSRTJfU0laRSA8aT5zdGFydG9mZnNldDwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT5vcHRpb25zPC9pPiwgcGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4sIFBDUkUyX1NQVFIgPGk+cmVwbGFjZW1lbnQ8L2k+LDwvYj4KKzxiPiAgUENSRTJfU0laRSA8aT5ybGVuZ3RoPC9pPiwgUENSRTJfVUNIQVIgKjxpPm91dHB1dGJ1ZmZlcjwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFICo8aT5vdXRsZW5ndGhwdHI8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiBtYXRjaGVzIGEgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uIGFnYWluc3QgYSBnaXZlbiBzdWJqZWN0CitzdHJpbmcsIHVzaW5nIGEgbWF0Y2hpbmcgYWxnb3JpdGhtIHRoYXQgaXMgc2ltaWxhciB0byBQZXJsJ3MuIEl0IHRoZW4gbWFrZXMgYQorY29weSBvZiB0aGUgc3ViamVjdCwgc3Vic3RpdHV0aW5nIGEgcmVwbGFjZW1lbnQgc3RyaW5nIGZvciB3aGF0IHdhcyBtYXRjaGVkLgorSXRzIGFyZ3VtZW50cyBhcmU6Cis8cHJlPgorICA8aT5jb2RlPC9pPiAgICAgICAgICBQb2ludHMgdG8gdGhlIGNvbXBpbGVkIHBhdHRlcm4KKyAgPGk+c3ViamVjdDwvaT4gICAgICAgUG9pbnRzIHRvIHRoZSBzdWJqZWN0IHN0cmluZworICA8aT5sZW5ndGg8L2k+ICAgICAgICBMZW5ndGggb2YgdGhlIHN1YmplY3Qgc3RyaW5nCisgIDxpPnN0YXJ0b2Zmc2V0PC9pPiAgIE9mZnNldCBpbiB0aGUgc3ViamVjdCBhdCB3aGljaCB0byBzdGFydCBtYXRjaGluZworICA8aT5vcHRpb25zPC9pPiAgICAgICBPcHRpb24gYml0cworICA8aT5tYXRjaF9kYXRhPC9pPiAgICBQb2ludHMgdG8gYSBtYXRjaCBkYXRhIGJsb2NrLCBvciBpcyBOVUxMCisgIDxpPm1jb250ZXh0PC9pPiAgICAgIFBvaW50cyB0byBhIG1hdGNoIGNvbnRleHQsIG9yIGlzIE5VTEwKKyAgPGk+cmVwbGFjZW1lbnQ8L2k+ICAgUG9pbnRzIHRvIHRoZSByZXBsYWNlbWVudCBzdHJpbmcKKyAgPGk+cmxlbmd0aDwvaT4gICAgICAgTGVuZ3RoIG9mIHRoZSByZXBsYWNlbWVudCBzdHJpbmcKKyAgPGk+b3V0cHV0YnVmZmVyPC9pPiAgUG9pbnRzIHRvIHRoZSBvdXRwdXQgYnVmZmVyCisgIDxpPm91dGxlbmd0aHB0cjwvaT4gIFBvaW50cyB0byB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQgYnVmZmVyCis8L3ByZT4KK0EgbWF0Y2ggY29udGV4dCBpcyBuZWVkZWQgb25seSBpZiB5b3Ugd2FudCB0bzoKKzxwcmU+CisgIFNldCB1cCBhIGNhbGxvdXQgZnVuY3Rpb24KKyAgQ2hhbmdlIHRoZSBsaW1pdCBmb3IgY2FsbGluZyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gPGk+bWF0Y2goKTwvaT4KKyAgQ2hhbmdlIHRoZSBsaW1pdCBmb3IgY2FsbGluZyA8aT5tYXRjaCgpPC9pPiByZWN1cnNpdmVseQorICBTZXQgY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50IHdoZW4gdGhlIGhlYXAgaXMgdXNlZCBmb3IgcmVjdXJzaW9uCis8L3ByZT4KK1RoZSA8aT5sZW5ndGg8L2k+LCA8aT5zdGFydG9mZnNldDwvaT4gYW5kIDxpPnJsZW5ndGg8L2k+IHZhbHVlcyBhcmUgY29kZQordW5pdHMsIG5vdCBjaGFyYWN0ZXJzLCBhcyBpcyB0aGUgY29udGVudHMgb2YgdGhlIHZhcmlhYmxlIHBvaW50ZWQgYXQgYnkKKzxpPm91dGxlbmd0aHB0cjwvaT4sIHdoaWNoIGlzIHVwZGF0ZWQgdG8gdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIG5ldyBzdHJpbmcuCitUaGUgb3B0aW9ucyBhcmU6Cis8cHJlPgorICBQQ1JFMl9BTkNIT1JFRCAgICAgICAgICAgICBNYXRjaCBvbmx5IGF0IHRoZSBmaXJzdCBwb3NpdGlvbgorICBQQ1JFMl9OT1RCT0wgICAgICAgICAgICAgICBTdWJqZWN0IGlzIG5vdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZQorICBQQ1JFMl9OT1RFT0wgICAgICAgICAgICAgICBTdWJqZWN0IGlzIG5vdCB0aGUgZW5kIG9mIGEgbGluZQorICBQQ1JFMl9OT1RFTVBUWSAgICAgICAgICAgICBBbiBlbXB0eSBzdHJpbmcgaXMgbm90IGEgdmFsaWQgbWF0Y2gKKyAgUENSRTJfTk9URU1QVFlfQVRTVEFSVCAgICAgQW4gZW1wdHkgc3RyaW5nIGF0IHRoZSBzdGFydCBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QgaXMgbm90IGEgdmFsaWQgbWF0Y2gKKyAgUENSRTJfTk9fVVRGX0NIRUNLICAgICAgICAgRG8gbm90IGNoZWNrIHRoZSBzdWJqZWN0IG9yIHJlcGxhY2VtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgVVRGIHZhbGlkaXR5IChvbmx5IHJlbGV2YW50IGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9VVEYgd2FzIHNldCBhdCBjb21waWxlIHRpbWUpCisgIFBDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUQgIERvIGV4dGVuZGVkIHJlcGxhY2VtZW50IHByb2Nlc3NpbmcKKyAgUENSRTJfU1VCU1RJVFVURV9HTE9CQUwgICAgUmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgaW4gdGhlIHN1YmplY3QKKyAgUENSRTJfU1VCU1RJVFVURV9PVkVSRkxPV19MRU5HVEggIElmIG92ZXJmbG93LCBjb21wdXRlIG5lZWRlZCBsZW5ndGgKKyAgUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUICBUcmVhdCB1bmtub3duIGdyb3VwIGFzIHVuc2V0CisgIFBDUkUyX1NVQlNUSVRVVEVfVU5TRVRfRU1QVFkgIFNpbXBsZSB1bnNldCBpbnNlcnQgPSBlbXB0eSBzdHJpbmcKKzwvcHJlPgorVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBzdWJzdGl0dXRpb25zLCB3aGljaCBtYXkgYmUgemVybyBpZiB0aGVyZQord2VyZSBubyBtYXRjaGVzLiBUaGUgcmVzdWx0IGNhbiBiZSBncmVhdGVyIHRoYW4gb25lIG9ubHkgd2hlbgorUENSRTJfU1VCU1RJVFVURV9HTE9CQUwgaXMgc2V0LiBJbiB0aGUgZXZlbnQgb2YgYW4gZXJyb3IsIGEgbmVnYXRpdmUgZXJyb3IgY29kZQoraXMgcmV0dXJuZWQuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZS5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwMTgwNQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZS5odG1sCkBAIC0wLDAgKzEsNTggQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZShwY3JlMl9tYXRjaF9kYXRhICo8aT5tYXRjaF9kYXRhPC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NQVFIgPGk+bmFtZTwvaT4sIFBDUkUyX1VDSEFSICo8aT5idWZmZXI8L2k+LCBQQ1JFMl9TSVpFICo8aT5idWZmbGVuPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZXh0cmFjdGluZyBhIGNhcHR1cmVkIHN1YnN0cmluZywgaWRlbnRpZmllZAorYnkgbmFtZSwgaW50byBhIGdpdmVuIGJ1ZmZlci4gVGhlIGFyZ3VtZW50cyBhcmU6Cis8cHJlPgorICA8aT5tYXRjaF9kYXRhPC9pPiAgICBUaGUgbWF0Y2ggZGF0YSBibG9jayBmb3IgdGhlIG1hdGNoCisgIDxpPm5hbWU8L2k+ICAgICAgICAgIE5hbWUgb2YgdGhlIHJlcXVpcmVkIHN1YnN0cmluZworICA8aT5idWZmZXI8L2k+ICAgICAgICBCdWZmZXIgdG8gcmVjZWl2ZSB0aGUgc3RyaW5nCisgIDxpPmJ1ZmZsZW48L2k+ICAgICAgIExlbmd0aCBvZiBidWZmZXIgKGNvZGUgdW5pdHMpCis8L3ByZT4KK1RoZSA8aT5idWZmbGVuPC9pPiB2YXJpYWJsZSBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUgZXh0cmFjdGVkCitzdHJpbmcsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgemVyby4gVGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyB6ZXJvIGZvcgorc3VjY2VzcyBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBudW1iZXJzOgorPHByZT4KKyAgUENSRTJfRVJST1JfTk9TVUJTVFJJTkcgICB0aGVyZSBhcmUgbm8gZ3JvdXBzIG9mIHRoYXQgbmFtZQorICBQQ1JFMl9FUlJPUl9VTkFWQUlMQkxFICAgIHRoZSBvdmVjdG9yIHdhcyB0b28gc21hbGwgZm9yIHRoYXQgZ3JvdXAKKyAgUENSRTJfRVJST1JfVU5TRVQgICAgICAgICB0aGUgZ3JvdXAgZGlkIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgbWF0Y2gKKyAgUENSRTJfRVJST1JfTk9NRU1PUlkgICAgICB0aGUgYnVmZmVyIGlzIG5vdCBiaWcgZW5vdWdoCis8L3ByZT4KK0lmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZ3JvdXAgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgdGhlIGZpcnN0IG9uZSB0aGF0IGlzIHNldAoraXMgcmV0dXJuZWQuIEluIHRoaXMgc2l0dWF0aW9uIFBDUkUyX0VSUk9SX1VOU0VUIG1lYW5zIHRoYXQgbm8gZ3JvdXAgd2l0aCB0aGUKK2dpdmVuIG5hbWUgd2FzIHNldC4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlMWEyNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyLmh0bWwKQEAgLTAsMCArMSw1NyBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlciBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+bnVtYmVyPC9pPiwgUENSRTJfVUNIQVIgKjxpPmJ1ZmZlcjwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFICo8aT5idWZmbGVuPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZXh0cmFjdGluZyBhIGNhcHR1cmVkIHN1YnN0cmluZyBpbnRvIGEgZ2l2ZW4KK2J1ZmZlci4gVGhlIGFyZ3VtZW50cyBhcmU6Cis8cHJlPgorICA8aT5tYXRjaF9kYXRhPC9pPiAgICBUaGUgbWF0Y2ggZGF0YSBibG9jayBmb3IgdGhlIG1hdGNoCisgIDxpPm51bWJlcjwvaT4gICAgICAgIE51bWJlciBvZiB0aGUgcmVxdWlyZWQgc3Vic3RyaW5nCisgIDxpPmJ1ZmZlcjwvaT4gICAgICAgIEJ1ZmZlciB0byByZWNlaXZlIHRoZSBzdHJpbmcKKyAgPGk+YnVmZmxlbjwvaT4gICAgICAgTGVuZ3RoIG9mIGJ1ZmZlcgorPC9wcmU+CitUaGUgPGk+YnVmZmxlbjwvaT4gdmFyaWFibGUgaXMgdXBkYXRlZCB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIGV4dHJhY3RlZCBzdHJpbmcsCitleGNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIHplcm8uIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgemVybyBmb3Igc3VjY2Vzcworb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgbnVtYmVyczoKKzxwcmU+CisgIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HICAgdGhlcmUgYXJlIG5vIGdyb3VwcyBvZiB0aGF0IG51bWJlcgorICBQQ1JFMl9FUlJPUl9VTkFWQUlMQkxFICAgIHRoZSBvdmVjdG9yIHdhcyB0b28gc21hbGwgZm9yIHRoYXQgZ3JvdXAKKyAgUENSRTJfRVJST1JfVU5TRVQgICAgICAgICB0aGUgZ3JvdXAgZGlkIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgbWF0Y2gKKyAgUENSRTJfRVJST1JfTk9NRU1PUlkgICAgICB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbAorCis8L1BSRT4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2ZyZWUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19mcmVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVhNWI1NQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19mcmVlLmh0bWwKQEAgLTAsMCArMSw0MSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zdWJzdHJpbmdfZnJlZSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfc3Vic3RyaW5nX2ZyZWUgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+dm9pZCBwY3JlMl9zdWJzdHJpbmdfZnJlZShQQ1JFMl9VQ0hBUiAqPGk+YnVmZmVyPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZnJlZWluZyB0aGUgbWVtb3J5IG9idGFpbmVkIGJ5IGEgcHJldmlvdXMKK2NhbGwgdG8gPGI+cGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUoKTwvYj4gb3IKKzxiPnBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIoKTwvYj4uIEl0cyBvbmx5IGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUKK3N0cmluZy4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiODc3MQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lLmh0bWwKQEAgLTAsMCArMSw2MCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+LDwvYj4KKzxiPiAgUENSRTJfU1BUUiA8aT5uYW1lPC9pPiwgUENSRTJfVUNIQVIgKio8aT5idWZmZXJwdHI8L2k+LCBQQ1JFMl9TSVpFICo8aT5idWZmbGVuPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZXh0cmFjdGluZyBhIGNhcHR1cmVkIHN1YnN0cmluZyBieSBuYW1lIGludG8KK25ld2x5IGFjcXVpcmVkIG1lbW9yeS4gVGhlIGFyZ3VtZW50cyBhcmU6Cis8cHJlPgorICA8aT5tYXRjaF9kYXRhPC9pPiAgICBUaGUgbWF0Y2ggZGF0YSBmb3IgdGhlIG1hdGNoCisgIDxpPm5hbWU8L2k+ICAgICAgICAgIE5hbWUgb2YgdGhlIHJlcXVpcmVkIHN1YnN0cmluZworICA8aT5idWZmZXJwdHI8L2k+ICAgICBXaGVyZSB0byBwdXQgdGhlIHN0cmluZyBwb2ludGVyCisgIDxpPmJ1ZmZsZW48L2k+ICAgICAgIFdoZXJlIHRvIHB1dCB0aGUgc3RyaW5nIGxlbmd0aAorPC9wcmU+CitUaGUgbWVtb3J5IGluIHdoaWNoIHRoZSBzdWJzdHJpbmcgaXMgcGxhY2VkIGlzIG9idGFpbmVkIGJ5IGNhbGxpbmcgdGhlIHNhbWUKK21lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQgd2FzIHVzZWQgZm9yIHRoZSBtYXRjaCBkYXRhIGJsb2NrLiBUaGUKK2NvbnZlbmllbmNlIGZ1bmN0aW9uIDxiPnBjcmUyX3N1YnN0cmluZ19mcmVlKCk8L2I+IGNhbiBiZSB1c2VkIHRvIGZyZWUgaXQgd2hlbgoraXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyB6ZXJvIGZvciBzdWNjZXNzIG9yIG9uZSBvZgordGhlIGZvbGxvd2luZyBlcnJvciBudW1iZXJzOgorPHByZT4KKyAgUENSRTJfRVJST1JfTk9TVUJTVFJJTkcgICB0aGVyZSBhcmUgbm8gZ3JvdXBzIG9mIHRoYXQgbmFtZQorICBQQ1JFMl9FUlJPUl9VTkFWQUlMQkxFICAgIHRoZSBvdmVjdG9yIHdhcyB0b28gc21hbGwgZm9yIHRoYXQgZ3JvdXAKKyAgUENSRTJfRVJST1JfVU5TRVQgICAgICAgICB0aGUgZ3JvdXAgZGlkIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgbWF0Y2gKKyAgUENSRTJfRVJST1JfTk9NRU1PUlkgICAgICBtZW1vcnkgY291bGQgbm90IGJlIG9idGFpbmVkCis8L3ByZT4KK0lmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZ3JvdXAgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgdGhlIGZpcnN0IG9uZSB0aGF0IGlzIHNldAoraXMgcmV0dXJuZWQuIEluIHRoaXMgc2l0dWF0aW9uIFBDUkUyX0VSUk9SX1VOU0VUIG1lYW5zIHRoYXQgbm8gZ3JvdXAgd2l0aCB0aGUKK2dpdmVuIG5hbWUgd2FzIHNldC4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlci5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MWJjODIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyLmh0bWwKQEAgLTAsMCArMSw1OCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludCBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+bnVtYmVyPC9pPiwgUENSRTJfVUNIQVIgKio8aT5idWZmZXJwdHI8L2k+LCBQQ1JFMl9TSVpFICo8aT5idWZmbGVuPC9pPik7PC9iPgorPC9QPgorPGJyPjxiPgorREVTQ1JJUFRJT04KKzwvYj48YnI+Cis8UD4KK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZXh0cmFjdGluZyBhIGNhcHR1cmVkIHN1YnN0cmluZyBieSBudW1iZXIKK2ludG8gbmV3bHkgYWNxdWlyZWQgbWVtb3J5LiBUaGUgYXJndW1lbnRzIGFyZToKKzxwcmU+CisgIDxpPm1hdGNoX2RhdGE8L2k+ICAgIFRoZSBtYXRjaCBkYXRhIGZvciB0aGUgbWF0Y2gKKyAgPGk+bnVtYmVyPC9pPiAgICAgICAgTnVtYmVyIG9mIHRoZSByZXF1aXJlZCBzdWJzdHJpbmcKKyAgPGk+YnVmZmVycHRyPC9pPiAgICAgV2hlcmUgdG8gcHV0IHRoZSBzdHJpbmcgcG9pbnRlcgorICA8aT5idWZmbGVuPC9pPiAgICAgICBXaGVyZSB0byBwdXQgdGhlIHN0cmluZyBsZW5ndGgKKzwvcHJlPgorVGhlIG1lbW9yeSBpbiB3aGljaCB0aGUgc3Vic3RyaW5nIGlzIHBsYWNlZCBpcyBvYnRhaW5lZCBieSBjYWxsaW5nIHRoZSBzYW1lCittZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbiB0aGF0IHdhcyB1c2VkIGZvciB0aGUgbWF0Y2ggZGF0YSBibG9jay4gVGhlCitjb252ZW5pZW5jZSBmdW5jdGlvbiA8Yj5wY3JlMl9zdWJzdHJpbmdfZnJlZSgpPC9iPiBjYW4gYmUgdXNlZCB0byBmcmVlIGl0IHdoZW4KK2l0IGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgemVybyBmb3Igc3VjY2VzcyBvciBvbmUgb2YKK3RoZSBmb2xsb3dpbmcgZXJyb3IgbnVtYmVyczoKKzxwcmU+CisgIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HICAgdGhlcmUgYXJlIG5vIGdyb3VwcyBvZiB0aGF0IG51bWJlcgorICBQQ1JFMl9FUlJPUl9VTkFWQUlMQkxFICAgIHRoZSBvdmVjdG9yIHdhcyB0b28gc21hbGwgZm9yIHRoYXQgZ3JvdXAKKyAgUENSRTJfRVJST1JfVU5TRVQgICAgICAgICB0aGUgZ3JvdXAgZGlkIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgbWF0Y2gKKyAgUENSRTJfRVJST1JfTk9NRU1PUlkgICAgICBtZW1vcnkgY291bGQgbm90IGJlIG9idGFpbmVkCisKKzwvUFJFPgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZS5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTNiYzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUuaHRtbApAQCAtMCwwICsxLDQ2IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZSBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TUFRSIDxpPm5hbWU8L2k+LCBQQ1JFMl9TSVpFICo8aT5sZW5ndGg8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgYSBtYXRjaGVkIHN1YnN0cmluZywgaWRlbnRpZmllZCBieSBuYW1lLgorVGhlIGFyZ3VtZW50cyBhcmU6Cis8cHJlPgorICA8aT5tYXRjaF9kYXRhPC9pPiAgIFRoZSBtYXRjaCBkYXRhIGJsb2NrIGZvciB0aGUgbWF0Y2gKKyAgPGk+bmFtZTwvaT4gICAgICAgICBUaGUgc3Vic3RyaW5nIG5hbWUKKyAgPGk+bGVuZ3RoPC9pPiAgICAgICBXaGVyZSB0byByZXR1cm4gdGhlIGxlbmd0aAorPC9wcmU+CitUaGUgeWllbGQgaXMgemVybyBvbiBzdWNjZXNzLCBvciBhbiBlcnJvciBjb2RlIGlmIHRoZSBzdWJzdHJpbmcgaXMgbm90IGZvdW5kLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwMWNjYQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIuaHRtbApAQCAtMCwwICsxLDQ4IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT5udW1iZXI8L2k+LCBQQ1JFMl9TSVpFICo8aT5sZW5ndGg8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgYSBtYXRjaGVkIHN1YnN0cmluZywgaWRlbnRpZmllZCBieSBudW1iZXIuCitUaGUgYXJndW1lbnRzIGFyZToKKzxwcmU+CisgIDxpPm1hdGNoX2RhdGE8L2k+ICAgVGhlIG1hdGNoIGRhdGEgYmxvY2sgZm9yIHRoZSBtYXRjaAorICA8aT5udW1iZXI8L2k+ICAgICAgIFRoZSBzdWJzdHJpbmcgbnVtYmVyCisgIDxpPmxlbmd0aDwvaT4gICAgICAgV2hlcmUgdG8gcmV0dXJuIHRoZSBsZW5ndGgsIG9yIE5VTEwKKzwvcHJlPgorVGhlIHRoaXJkIGFyZ3VtZW50IG1heSBiZSBOVUxMIGlmIGFsbCB5b3Ugd2FudCB0byBrbm93IGlzIHdoZXRoZXIgb3Igbm90IGEKK3N1YnN0cmluZyBpcyBzZXQuIFRoZSB5aWVsZCBpcyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorb3RoZXJ3aXNlLiBBZnRlciBhIHBhcnRpYWwgbWF0Y2gsIG9ubHkgc3Vic3RyaW5nIDAgaXMgYXZhaWxhYmxlLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxMjQxZAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUuaHRtbApAQCAtMCwwICsxLDQwIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NZTk9QU0lTCis8L2I+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+dm9pZCBwY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlKFBDUkUyX1NQVFIgKjxpPmxpc3Q8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBmcmVlaW5nIHRoZSBzdG9yZSBvYnRhaW5lZCBieSBhIHByZXZpb3VzCitjYWxsIHRvIDxiPnBjcmUyc3Vic3RyaW5nX2xpc3RfZ2V0KCk8L2I+LiBJdHMgb25seSBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8KK3RoZSBsaXN0IG9mIHN0cmluZyBwb2ludGVycy4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKzxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+PGI+cGNyZTJwb3NpeDwvYj48L2E+CitwYWdlLgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0Lmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDQzNjI3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0Lmh0bWwKQEAgLTAsMCArMSw1NiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX3N1YnN0cmluZ19saXN0X2dldCBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPGJyPjxiPgorU1lOT1BTSVMKKzwvYj48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTIuaCYjNjI7PC9iPgorPC9QPgorPFA+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0KHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+LDwvYj4KKzxiPiIgIFBDUkUyX1VDSEFSICoqKjxpPmxpc3RwdHI8L2k+LCBQQ1JFMl9TSVpFICoqPGk+bGVuZ3Roc3B0cjwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGV4dHJhY3RpbmcgYWxsIHRoZSBjYXB0dXJlZCBzdWJzdHJpbmdzIGFmdGVyCithIHBhdHRlcm4gbWF0Y2guIEl0IGJ1aWxkcyBhIGxpc3Qgb2YgcG9pbnRlcnMgdG8gdGhlIHN0cmluZ3MsIGFuZCAob3B0aW9uYWxseSkKK2Egc2Vjb25kIGxpc3QgdGhhdCBjb250YWlucyB0aGVpciBsZW5ndGhzIChpbiBjb2RlIHVuaXRzKSwgZXhjbHVkaW5nIGEKK3Rlcm1pbmF0aW5nIHplcm8gdGhhdCBpcyBhZGRlZCB0byBlYWNoIG9mIHRoZW0uIEFsbCB0aGlzIGlzIGRvbmUgaW4gYSBzaW5nbGUKK2Jsb2NrIG9mIG1lbW9yeSB0aGF0IGlzIG9idGFpbmVkIHVzaW5nIHRoZSBzYW1lIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQKK3dhcyB1c2VkIHRvIGdldCB0aGUgbWF0Y2ggZGF0YSBibG9jay4gVGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9uCis8Yj5wY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlKCk8L2I+IGNhbiBiZSB1c2VkIHRvIGZyZWUgaXQgd2hlbiBpdCBpcyBubyBsb25nZXIKK25lZWRlZC4gVGhlIGFyZ3VtZW50cyBhcmU6Cis8cHJlPgorICA8aT5tYXRjaF9kYXRhPC9pPiAgICBUaGUgbWF0Y2ggZGF0YSBibG9jaworICA8aT5saXN0cHRyPC9pPiAgICAgICBXaGVyZSB0byBwdXQgYSBwb2ludGVyIHRvIHRoZSBsaXN0CisgIDxpPmxlbmd0aHNwdHI8L2k+ICAgIFdoZXJlIHRvIHB1dCBhIHBvaW50ZXIgdG8gdGhlIGxlbmd0aHMsIG9yIE5VTEwKKzwvcHJlPgorQSBwb2ludGVyIHRvIGEgbGlzdCBvZiBwb2ludGVycyBpcyBwdXQgaW4gdGhlIHZhcmlhYmxlIHdob3NlIGFkZHJlc3MgaXMgaW4KKzxpPmxpc3RwdHI8L2k+LiBUaGUgbGlzdCBpcyB0ZXJtaW5hdGVkIGJ5IGEgTlVMTCBwb2ludGVyLiBJZiA8aT5sZW5ndGhzcHRyPC9pPiBpcworbm90IE5VTEwsIGEgbWF0Y2hpbmcgbGlzdCBvZiBsZW5ndGhzIGlzIGNyZWF0ZWQsIGFuZCBpdHMgYWRkcmVzcyBpcyBwbGFjZWQgaW4KKzxpPmxlbmd0aHNwdHI8L2k+LiBUaGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIHplcm8gb24gc3VjY2VzcyBvcgorUENSRTJfRVJST1JfTk9NRU1PUlkgaWYgc3VmZmljaWVudCBtZW1vcnkgY291bGQgbm90IGJlIG9idGFpbmVkLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK3BhZ2UuCis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4uaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2Nhbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNDRlYTkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4uaHRtbApAQCAtMCwwICsxLDUzIEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2NhbiBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludCBwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4oY29uc3QgcGNyZTJfY29kZSAqPGk+Y29kZTwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TUFRSIDxpPm5hbWU8L2k+LCBQQ1JFMl9TUFRSICo8aT5maXJzdDwvaT4sIFBDUkUyX1NQVFIgKjxpPmxhc3Q8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGI+CitERVNDUklQVElPTgorPC9iPjxicj4KKzxQPgorVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiBmaW5kcywgZm9yIGEgY29tcGlsZWQgcGF0dGVybiwgdGhlIGZpcnN0IGFuZCBsYXN0CitlbnRyaWVzIGZvciBhIGdpdmVuIG5hbWUgaW4gdGhlIHRhYmxlIHRoYXQgdHJhbnNsYXRlcyBjYXB0dXJpbmcgcGFyZW50aGVzaXMKK25hbWVzIGludG8gbnVtYmVycy4KKzxwcmU+CisgIDxpPmNvZGU8L2k+ICAgIENvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbgorICA8aT5uYW1lPC9pPiAgICBOYW1lIHdob3NlIGVudHJpZXMgcmVxdWlyZWQKKyAgPGk+Zmlyc3Q8L2k+ICAgV2hlcmUgdG8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgZW50cnkKKyAgPGk+bGFzdDwvaT4gICAgV2hlcmUgdG8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbGFzdCBlbnRyeQorPC9wcmU+CitXaGVuIHRoZSBuYW1lIGlzIGZvdW5kIGluIHRoZSB0YWJsZSwgaWYgPGk+Zmlyc3Q8L2k+IGlzIE5VTEwsIHRoZSBmdW5jdGlvbgorcmV0dXJucyBhIGdyb3VwIG51bWJlciwgYnV0IGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWF0Y2hpbmcgZW50cnksIGl0IGlzIG5vdAorZGVmaW5lZCB3aGljaCBvbmUuIE90aGVyd2lzZSwgd2hlbiBib3RoIHBvaW50ZXJzIGhhdmUgYmVlbiBzZXQsIHRoZSB5aWVsZCBvZgordGhlIGZ1bmN0aW9uIGlzIHRoZSBsZW5ndGggb2YgZWFjaCBlbnRyeSBpbiBjb2RlIHVuaXRzLiBJZiB0aGUgbmFtZSBpcyBub3QKK2ZvdW5kLCBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORyBpcyByZXR1cm5lZC4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSwgaW5jbHVkaW5nIHRoZSBmb3JtYXQgb2YKK3RoZSB0YWJsZSBlbnRyaWVzLCBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UsIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MGZiZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZS5odG1sCkBAIC0wLDAgKzEsNTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitTWU5PUFNJUworPC9iPjxicj4KKzxQPgorPGI+I2luY2x1ZGUgJiM2MDtwY3JlMi5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludCBwY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZShjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NQVFIgPGk+bmFtZTwvaT4pOzwvYj4KKzwvUD4KKzxicj48Yj4KK0RFU0NSSVBUSU9OCis8L2I+PGJyPgorPFA+CitUaGlzIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZpbmRzIHRoZSBudW1iZXIgb2YgYSBuYW1lZCBzdWJzdHJpbmcgY2FwdHVyaW5nCitwYXJlbnRoZXNpcyBpbiBhIGNvbXBpbGVkIHBhdHRlcm4sIHByb3ZpZGVkIHRoYXQgaXQgaXMgYSB1bmlxdWUgbmFtZS4gVGhlCitmdW5jdGlvbiBhcmd1bWVudHMgYXJlOgorPHByZT4KKyAgPGk+Y29kZTwvaT4gICAgQ29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uCisgIDxpPm5hbWU8L2k+ICAgIE5hbWUgd2hvc2UgbnVtYmVyIGlzIHJlcXVpcmVkCis8L3ByZT4KK1RoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgdGhlIG51bWJlciBvZiB0aGUgcGFyZW50aGVzaXMgaWYgdGhlIG5hbWUgaXMKK2ZvdW5kLCBvciBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORyBpZiBpdCBpcyBub3QgZm91bmQuIFdoZW4gZHVwbGljYXRlIG5hbWVzIGFyZQorYWxsb3dlZCAoUENSRTJfRFVQTkFNRVMgaXMgc2V0KSwgaWYgdGhlIG5hbWUgaXMgbm90IHVuaXF1ZSwKK1BDUkUyX0VSUk9SX05PVU5JUVVFU1VCU1RSSU5HIGlzIHJldHVybmVkLiBZb3UgY2FuIG9idGFpbiB0aGUgbGlzdCBvZiBudW1iZXJzCit3aXRoIHRoZSBzYW1lIG5hbWUgYnkgY2FsbGluZyA8Yj5wY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4oKTwvYj4uCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+CitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorcGFnZS4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyYXBpLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmFwaS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMWRkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmFwaS5odG1sCkBAIC0wLDAgKzEsMzEzMCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMmFwaSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJhcGkgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzx1bD4KKzxsaT48YSBuYW1lPSJUT0MxIiBocmVmPSIjU0VDMSI+UENSRTIgTkFUSVZFIEFQSSBCQVNJQyBGVU5DVElPTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMiIgaHJlZj0iI1NFQzIiPlBDUkUyIE5BVElWRSBBUEkgQVVYSUxJQVJZIE1BVENIIEZVTkNUSU9OUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MzIiBocmVmPSIjU0VDMyI+UENSRTIgTkFUSVZFIEFQSSBHRU5FUkFMIENPTlRFWFQgRlVOQ1RJT05TPC9hPgorPGxpPjxhIG5hbWU9IlRPQzQiIGhyZWY9IiNTRUM0Ij5QQ1JFMiBOQVRJVkUgQVBJIENPTVBJTEUgQ09OVEVYVCBGVU5DVElPTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNSIgaHJlZj0iI1NFQzUiPlBDUkUyIE5BVElWRSBBUEkgTUFUQ0ggQ09OVEVYVCBGVU5DVElPTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNiIgaHJlZj0iI1NFQzYiPlBDUkUyIE5BVElWRSBBUEkgU1RSSU5HIEVYVFJBQ1RJT04gRlVOQ1RJT05TPC9hPgorPGxpPjxhIG5hbWU9IlRPQzciIGhyZWY9IiNTRUM3Ij5QQ1JFMiBOQVRJVkUgQVBJIFNUUklORyBTVUJTVElUVVRJT04gRlVOQ1RJT048L2E+Cis8bGk+PGEgbmFtZT0iVE9DOCIgaHJlZj0iI1NFQzgiPlBDUkUyIE5BVElWRSBBUEkgSklUIEZVTkNUSU9OUzwvYT4KKzxsaT48YSBuYW1lPSJUT0M5IiBocmVmPSIjU0VDOSI+UENSRTIgTkFUSVZFIEFQSSBTRVJJQUxJWkFUSU9OIEZVTkNUSU9OUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMCIgaHJlZj0iI1NFQzEwIj5QQ1JFMiBOQVRJVkUgQVBJIEFVWElMSUFSWSBGVU5DVElPTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTEiIGhyZWY9IiNTRUMxMSI+UENSRTIgOC1CSVQsIDE2LUJJVCwgQU5EIDMyLUJJVCBMSUJSQVJJRVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTIiIGhyZWY9IiNTRUMxMiI+UENSRTIgQVBJIE9WRVJWSUVXPC9hPgorPGxpPjxhIG5hbWU9IlRPQzEzIiBocmVmPSIjU0VDMTMiPlNUUklORyBMRU5HVEhTIEFORCBPRkZTRVRTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE0IiBocmVmPSIjU0VDMTQiPk5FV0xJTkVTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE1IiBocmVmPSIjU0VDMTUiPk1VTFRJVEhSRUFESU5HPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE2IiBocmVmPSIjU0VDMTYiPlBDUkUyIENPTlRFWFRTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE3IiBocmVmPSIjU0VDMTciPkNIRUNLSU5HIEJVSUxELVRJTUUgT1BUSU9OUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxOCIgaHJlZj0iI1NFQzE4Ij5DT01QSUxJTkcgQSBQQVRURVJOPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE5IiBocmVmPSIjU0VDMTkiPkNPTVBJTEFUSU9OIEVSUk9SIENPREVTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzIwIiBocmVmPSIjU0VDMjAiPkpVU1QtSU4tVElNRSAoSklUKSBDT01QSUxBVElPTjwvYT4KKzxsaT48YSBuYW1lPSJUT0MyMSIgaHJlZj0iI1NFQzIxIj5MT0NBTEUgU1VQUE9SVDwvYT4KKzxsaT48YSBuYW1lPSJUT0MyMiIgaHJlZj0iI1NFQzIyIj5JTkZPUk1BVElPTiBBQk9VVCBBIENPTVBJTEVEIFBBVFRFUk48L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjMiIGhyZWY9IiNTRUMyMyI+SU5GT1JNQVRJT04gQUJPVVQgQSBQQVRURVJOJ1MgQ0FMTE9VVFM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjQiIGhyZWY9IiNTRUMyNCI+U0VSSUFMSVpBVElPTiBBTkQgUFJFQ09NUElMSU5HPC9hPgorPGxpPjxhIG5hbWU9IlRPQzI1IiBocmVmPSIjU0VDMjUiPlRIRSBNQVRDSCBEQVRBIEJMT0NLPC9hPgorPGxpPjxhIG5hbWU9IlRPQzI2IiBocmVmPSIjU0VDMjYiPk1BVENISU5HIEEgUEFUVEVSTjogVEhFIFRSQURJVElPTkFMIEZVTkNUSU9OPC9hPgorPGxpPjxhIG5hbWU9IlRPQzI3IiBocmVmPSIjU0VDMjciPk5FV0xJTkUgSEFORExJTkcgV0hFTiBNQVRDSElORzwvYT4KKzxsaT48YSBuYW1lPSJUT0MyOCIgaHJlZj0iI1NFQzI4Ij5IT1cgUENSRTJfTUFUQ0goKSBSRVRVUk5TIEEgU1RSSU5HIEFORCBDQVBUVVJFRCBTVUJTVFJJTkdTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzI5IiBocmVmPSIjU0VDMjkiPk9USEVSIElORk9STUFUSU9OIEFCT1VUIEEgTUFUQ0g8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMzAiIGhyZWY9IiNTRUMzMCI+RVJST1IgUkVUVVJOUyBGUk9NIDxiPnBjcmUyX21hdGNoKCk8L2I+PC9hPgorPGxpPjxhIG5hbWU9IlRPQzMxIiBocmVmPSIjU0VDMzEiPkVYVFJBQ1RJTkcgQ0FQVFVSRUQgU1VCU1RSSU5HUyBCWSBOVU1CRVI8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMzIiIGhyZWY9IiNTRUMzMiI+RVhUUkFDVElORyBBIExJU1QgT0YgQUxMIENBUFRVUkVEIFNVQlNUUklOR1M8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMzMiIGhyZWY9IiNTRUMzMyI+RVhUUkFDVElORyBDQVBUVVJFRCBTVUJTVFJJTkdTIEJZIE5BTUU8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMzQiIGhyZWY9IiNTRUMzNCI+Q1JFQVRJTkcgQSBORVcgU1RSSU5HIFdJVEggU1VCU1RJVFVUSU9OUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MzNSIgaHJlZj0iI1NFQzM1Ij5EVVBMSUNBVEUgU1VCUEFUVEVSTiBOQU1FUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MzNiIgaHJlZj0iI1NFQzM2Ij5GSU5ESU5HIEFMTCBQT1NTSUJMRSBNQVRDSEVTIEFUIE9ORSBQT1NJVElPTjwvYT4KKzxsaT48YSBuYW1lPSJUT0MzNyIgaHJlZj0iI1NFQzM3Ij5NQVRDSElORyBBIFBBVFRFUk46IFRIRSBBTFRFUk5BVElWRSBGVU5DVElPTjwvYT4KKzxsaT48YSBuYW1lPSJUT0MzOCIgaHJlZj0iI1NFQzM4Ij5TRUUgQUxTTzwvYT4KKzxsaT48YSBuYW1lPSJUT0MzOSIgaHJlZj0iI1NFQzM5Ij5BVVRIT1I8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNDAiIGhyZWY9IiNTRUM0MCI+UkVWSVNJT048L2E+Cis8L3VsPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzxicj4KKzxicj4KK1BDUkUyIGlzIGEgbmV3IEFQSSBmb3IgUENSRS4gVGhpcyBkb2N1bWVudCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIGFsbCBpdHMKK2Z1bmN0aW9ucy4gU2VlIHRoZQorPGEgaHJlZj0icGNyZTIuaHRtbCI+PGI+cGNyZTI8L2I+PC9hPgorZG9jdW1lbnQgZm9yIGFuIG92ZXJ2aWV3IG9mIGFsbCB0aGUgUENSRTIgZG9jdW1lbnRhdGlvbi4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxIiBocmVmPSIjVE9DMSI+UENSRTIgTkFUSVZFIEFQSSBCQVNJQyBGVU5DVElPTlM8L2E+PGJyPgorPFA+Cis8Yj5wY3JlMl9jb2RlICpwY3JlMl9jb21waWxlKFBDUkUyX1NQVFIgPGk+cGF0dGVybjwvaT4sIFBDUkUyX1NJWkUgPGk+bGVuZ3RoPC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPm9wdGlvbnM8L2k+LCBpbnQgKjxpPmVycm9yY29kZTwvaT4sIFBDUkUyX1NJWkUgKjxpPmVycm9yb2Zmc2V0LDwvaT48L2I+Cis8Yj4gIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj52b2lkIHBjcmUyX2NvZGVfZnJlZShwY3JlMl9jb2RlICo8aT5jb2RlPC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+cGNyZTJfbWF0Y2hfZGF0YSAqcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUodWludDMyX3QgPGk+b3ZlY3NpemU8L2k+LDwvYj4KKzxiPiAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICo8aT5nY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnBjcmUyX21hdGNoX2RhdGEgKnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybig8L2I+Cis8Yj4gIGNvbnN0IHBjcmUyX2NvZGUgKjxpPmNvZGU8L2k+LCBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+aW50IHBjcmUyX21hdGNoKGNvbnN0IHBjcmUyX2NvZGUgKjxpPmNvZGU8L2k+LCBQQ1JFMl9TUFRSIDxpPnN1YmplY3Q8L2k+LDwvYj4KKzxiPiAgUENSRTJfU0laRSA8aT5sZW5ndGg8L2k+LCBQQ1JFMl9TSVpFIDxpPnN0YXJ0b2Zmc2V0PC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPm9wdGlvbnM8L2k+LCBwY3JlMl9tYXRjaF9kYXRhICo8aT5tYXRjaF9kYXRhPC9pPiw8L2I+Cis8Yj4gIHBjcmUyX21hdGNoX2NvbnRleHQgKjxpPm1jb250ZXh0PC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+aW50IHBjcmUyX2RmYV9tYXRjaChjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgUENSRTJfU1BUUiA8aT5zdWJqZWN0PC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgPGk+bGVuZ3RoPC9pPiwgUENSRTJfU0laRSA8aT5zdGFydG9mZnNldDwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT5vcHRpb25zPC9pPiwgcGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4sPC9iPgorPGI+ICBpbnQgKjxpPndvcmtzcGFjZTwvaT4sIFBDUkUyX1NJWkUgPGk+d3Njb3VudDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnZvaWQgcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMiIgaHJlZj0iI1RPQzEiPlBDUkUyIE5BVElWRSBBUEkgQVVYSUxJQVJZIE1BVENIIEZVTkNUSU9OUzwvYT48YnI+Cis8UD4KKzxiPlBDUkUyX1NQVFIgcGNyZTJfZ2V0X21hcmsocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnVpbnQzMl90IHBjcmUyX2dldF9vdmVjdG9yX2NvdW50KHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5QQ1JFMl9TSVpFICpwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5QQ1JFMl9TSVpFIHBjcmUyX2dldF9zdGFydGNoYXIocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4pOzwvYj4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMzIiBocmVmPSIjVE9DMSI+UENSRTIgTkFUSVZFIEFQSSBHRU5FUkFMIENPTlRFWFQgRlVOQ1RJT05TPC9hPjxicj4KKzxQPgorPGI+cGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpwY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlKDwvYj4KKzxiPiAgdm9pZCAqKCo8aT5wcml2YXRlX21hbGxvYzwvaT4pKFBDUkUyX1NJWkUsIHZvaWQgKiksPC9iPgorPGI+ICB2b2lkICgqPGk+cHJpdmF0ZV9mcmVlPC9pPikodm9pZCAqLCB2b2lkICopLCB2b2lkICo8aT5tZW1vcnlfZGF0YTwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnBjcmUyX2dlbmVyYWxfY29udGV4dCAqcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHkoPC9iPgorPGI+ICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+dm9pZCBwY3JlMl9nZW5lcmFsX2NvbnRleHRfZnJlZShwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzQiIGhyZWY9IiNUT0MxIj5QQ1JFMiBOQVRJVkUgQVBJIENPTVBJTEUgQ09OVEVYVCBGVU5DVElPTlM8L2E+PGJyPgorPFA+Cis8Yj5wY3JlMl9jb21waWxlX2NvbnRleHQgKnBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUoPC9iPgorPGI+ICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+cGNyZTJfY29tcGlsZV9jb250ZXh0ICpwY3JlMl9jb21waWxlX2NvbnRleHRfY29weSg8L2I+Cis8Yj4gIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj52b2lkIHBjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc2V0X2JzcihwY3JlMl9jb21waWxlX2NvbnRleHQgKjxpPmNjb250ZXh0PC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPnZhbHVlPC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+aW50IHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+LDwvYj4KKzxiPiAgY29uc3QgdW5zaWduZWQgY2hhciAqPGk+dGFibGVzPC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+aW50IHBjcmUyX3NldF9tYXhfcGF0dGVybl9sZW5ndGgocGNyZTJfY29tcGlsZV9jb250ZXh0ICo8aT5jY29udGV4dDwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFIDxpPnZhbHVlPC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+aW50IHBjcmUyX3NldF9uZXdsaW5lKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+dmFsdWU8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0KHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+dmFsdWU8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqPGk+Y2NvbnRleHQ8L2k+LDwvYj4KKzxiPiAgaW50ICgqPGk+Z3VhcmRfZnVuY3Rpb248L2k+KSh1aW50MzJfdCwgdm9pZCAqKSwgdm9pZCAqPGk+dXNlcl9kYXRhPC9pPik7PC9iPgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzUiIGhyZWY9IiNUT0MxIj5QQ1JFMiBOQVRJVkUgQVBJIE1BVENIIENPTlRFWFQgRlVOQ1RJT05TPC9hPjxicj4KKzxQPgorPGI+cGNyZTJfbWF0Y2hfY29udGV4dCAqcGNyZTJfbWF0Y2hfY29udGV4dF9jcmVhdGUoPC9iPgorPGI+ICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+cGNyZTJfbWF0Y2hfY29udGV4dCAqcGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5KDwvYj4KKzxiPiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj52b2lkIHBjcmUyX21hdGNoX2NvbnRleHRfZnJlZShwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludCBwY3JlMl9zZXRfY2FsbG91dChwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4sPC9iPgorPGI+ICBpbnQgKCo8aT5jYWxsb3V0X2Z1bmN0aW9uPC9pPikocGNyZTJfY2FsbG91dF9ibG9jayAqLCB2b2lkICopLDwvYj4KKzxiPiAgdm9pZCAqPGk+Y2FsbG91dF9kYXRhPC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+aW50IHBjcmUyX3NldF9tYXRjaF9saW1pdChwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT52YWx1ZTwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludCBwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKjxpPm1jb250ZXh0PC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgPGk+dmFsdWU8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdChwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT52YWx1ZTwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludCBwY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50KDwvYj4KKzxiPiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+LDwvYj4KKzxiPiAgdm9pZCAqKCo8aT5wcml2YXRlX21hbGxvYzwvaT4pKFBDUkUyX1NJWkUsIHZvaWQgKiksPC9iPgorPGI+ICB2b2lkICgqPGk+cHJpdmF0ZV9mcmVlPC9pPikodm9pZCAqLCB2b2lkICopLCB2b2lkICo8aT5tZW1vcnlfZGF0YTwvaT4pOzwvYj4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM2IiBocmVmPSIjVE9DMSI+UENSRTIgTkFUSVZFIEFQSSBTVFJJTkcgRVhUUkFDVElPTiBGVU5DVElPTlM8L2E+PGJyPgorPFA+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+LDwvYj4KKzxiPiAgUENSRTJfU1BUUiA8aT5uYW1lPC9pPiwgUENSRTJfVUNIQVIgKjxpPmJ1ZmZlcjwvaT4sIFBDUkUyX1NJWkUgKjxpPmJ1ZmZsZW48L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT5udW1iZXI8L2k+LCBQQ1JFMl9VQ0hBUiAqPGk+YnVmZmVyPC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgKjxpPmJ1ZmZsZW48L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj52b2lkIHBjcmUyX3N1YnN0cmluZ19mcmVlKFBDUkUyX1VDSEFSICo8aT5idWZmZXI8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TUFRSIDxpPm5hbWU8L2k+LCBQQ1JFMl9VQ0hBUiAqKjxpPmJ1ZmZlcnB0cjwvaT4sIFBDUkUyX1NJWkUgKjxpPmJ1ZmZsZW48L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICo8aT5tYXRjaF9kYXRhPC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPm51bWJlcjwvaT4sIFBDUkUyX1VDSEFSICoqPGk+YnVmZmVycHRyPC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgKjxpPmJ1ZmZsZW48L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TUFRSIDxpPm5hbWU8L2k+LCBQQ1JFMl9TSVpFICo8aT5sZW5ndGg8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICo8aT5tYXRjaF9kYXRhPC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPm51bWJlcjwvaT4sIFBDUkUyX1NJWkUgKjxpPmxlbmd0aDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludCBwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4oY29uc3QgcGNyZTJfY29kZSAqPGk+Y29kZTwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TUFRSIDxpPm5hbWU8L2k+LCBQQ1JFMl9TUFRSICo8aT5maXJzdDwvaT4sIFBDUkUyX1NQVFIgKjxpPmxhc3Q8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUoY29uc3QgcGNyZTJfY29kZSAqPGk+Y29kZTwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TUFRSIDxpPm5hbWU8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj52b2lkIHBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUoUENSRTJfU1BUUiAqPGk+bGlzdDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludCBwY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+IiAgUENSRTJfVUNIQVIgKioqPGk+bGlzdHB0cjwvaT4sIFBDUkUyX1NJWkUgKio8aT5sZW5ndGhzcHRyPC9pPik7PC9iPgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzciIGhyZWY9IiNUT0MxIj5QQ1JFMiBOQVRJVkUgQVBJIFNUUklORyBTVUJTVElUVVRJT04gRlVOQ1RJT048L2E+PGJyPgorPFA+Cis8Yj5pbnQgcGNyZTJfc3Vic3RpdHV0ZShjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgUENSRTJfU1BUUiA8aT5zdWJqZWN0PC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgPGk+bGVuZ3RoPC9pPiwgUENSRTJfU0laRSA8aT5zdGFydG9mZnNldDwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT5vcHRpb25zPC9pPiwgcGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4sIFBDUkUyX1NQVFIgXGZJcmVwbGFjZW1lbnR6ZlAsPC9iPgorPGI+ICBQQ1JFMl9TSVpFIDxpPnJsZW5ndGg8L2k+LCBQQ1JFMl9VQ0hBUiAqPGk+b3V0cHV0YnVmZmVyPC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgKjxpPm91dGxlbmd0aHB0cjwvaT4pOzwvYj4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM4IiBocmVmPSIjVE9DMSI+UENSRTIgTkFUSVZFIEFQSSBKSVQgRlVOQ1RJT05TPC9hPjxicj4KKzxQPgorPGI+aW50IHBjcmUyX2ppdF9jb21waWxlKHBjcmUyX2NvZGUgKjxpPmNvZGU8L2k+LCB1aW50MzJfdCA8aT5vcHRpb25zPC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+aW50IHBjcmUyX2ppdF9tYXRjaChjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgUENSRTJfU1BUUiA8aT5zdWJqZWN0PC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgPGk+bGVuZ3RoPC9pPiwgUENSRTJfU0laRSA8aT5zdGFydG9mZnNldDwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT5vcHRpb25zPC9pPiwgcGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnZvaWQgcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeShwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+cGNyZTJfaml0X3N0YWNrICpwY3JlMl9qaXRfc3RhY2tfY3JlYXRlKFBDUkUyX1NJWkUgPGk+c3RhcnRzaXplPC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgPGk+bWF4c2l6ZTwvaT4sIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqPGk+Z2NvbnRleHQ8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj52b2lkIHBjcmUyX2ppdF9zdGFja19hc3NpZ24ocGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+LDwvYj4KKzxiPiAgcGNyZTJfaml0X2NhbGxiYWNrIDxpPmNhbGxiYWNrX2Z1bmN0aW9uPC9pPiwgdm9pZCAqPGk+Y2FsbGJhY2tfZGF0YTwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnZvaWQgcGNyZTJfaml0X3N0YWNrX2ZyZWUocGNyZTJfaml0X3N0YWNrICo8aT5qaXRfc3RhY2s8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDOSIgaHJlZj0iI1RPQzEiPlBDUkUyIE5BVElWRSBBUEkgU0VSSUFMSVpBVElPTiBGVU5DVElPTlM8L2E+PGJyPgorPFA+Cis8Yj5pbnQzMl90IHBjcmUyX3NlcmlhbGl6ZV9kZWNvZGUocGNyZTJfY29kZSAqKjxpPmNvZGVzPC9pPiw8L2I+Cis8Yj4gIGludDMyX3QgPGk+bnVtYmVyX29mX2NvZGVzPC9pPiwgY29uc3QgdWludDhfdCAqPGk+Ynl0ZXM8L2k+LDwvYj4KKzxiPiAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICo8aT5nY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludDMyX3QgcGNyZTJfc2VyaWFsaXplX2VuY29kZShjb25zdCBwY3JlMl9jb2RlICoqPGk+Y29kZXM8L2k+LDwvYj4KKzxiPiAgaW50MzJfdCA8aT5udW1iZXJfb2ZfY29kZXM8L2k+LCB1aW50OF90ICoqPGk+c2VyaWFsaXplZF9ieXRlczwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFICo8aT5zZXJpYWxpemVkX3NpemU8L2k+LCBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+dm9pZCBwY3JlMl9zZXJpYWxpemVfZnJlZSh1aW50OF90ICo8aT5ieXRlczwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludDMyX3QgcGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXMoY29uc3QgdWludDhfdCAqPGk+Ynl0ZXM8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTAiIGhyZWY9IiNUT0MxIj5QQ1JFMiBOQVRJVkUgQVBJIEFVWElMSUFSWSBGVU5DVElPTlM8L2E+PGJyPgorPFA+Cis8Yj5pbnQgcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoaW50IDxpPmVycm9yY29kZTwvaT4sIFBDUkUyX1VDSEFSICo8aT5idWZmZXI8L2k+LDwvYj4KKzxiPiAgUENSRTJfU0laRSA8aT5idWZmbGVuPC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+Y29uc3QgdW5zaWduZWQgY2hhciAqcGNyZTJfbWFrZXRhYmxlcyhwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+aW50IHBjcmUyX3BhdHRlcm5faW5mbyhjb25zdCBwY3JlMiAqPGk+Y29kZTwvaT4sIHVpbnQzMl90IDxpPndoYXQ8L2k+LCB2b2lkICo8aT53aGVyZTwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludCBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZShjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiw8L2I+Cis8Yj4gIGludCAoKjxpPmNhbGxiYWNrPC9pPikocGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2sgKiwgdm9pZCAqKSw8L2I+Cis8Yj4gIHZvaWQgKjxpPnVzZXJfZGF0YTwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludCBwY3JlMl9jb25maWcodWludDMyX3QgPGk+d2hhdDwvaT4sIHZvaWQgKjxpPndoZXJlPC9pPik7PC9iPgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzExIiBocmVmPSIjVE9DMSI+UENSRTIgOC1CSVQsIDE2LUJJVCwgQU5EIDMyLUJJVCBMSUJSQVJJRVM8L2E+PGJyPgorPFA+CitUaGVyZSBhcmUgdGhyZWUgUENSRTIgbGlicmFyaWVzLCBzdXBwb3J0aW5nIDgtYml0LCAxNi1iaXQsIGFuZCAzMi1iaXQgY29kZQordW5pdHMsIHJlc3BlY3RpdmVseS4gSG93ZXZlciwgdGhlcmUgaXMganVzdCBvbmUgaGVhZGVyIGZpbGUsIDxiPnBjcmUyLmg8L2I+LgorVGhpcyBjb250YWlucyB0aGUgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgb3RoZXIgZGVmaW5pdGlvbnMgZm9yIGFsbCB0aHJlZQorbGlicmFyaWVzLiBPbmUsIHR3bywgb3IgYWxsIHRocmVlIGNhbiBiZSBpbnN0YWxsZWQgc2ltdWx0YW5lb3VzbHkuIE9uIFVuaXgtbGlrZQorc3lzdGVtcyB0aGUgbGlicmFyaWVzIGFyZSBjYWxsZWQgPGI+bGlicGNyZTItODwvYj4sIDxiPmxpYnBjcmUyLTE2PC9iPiwgYW5kCis8Yj5saWJwY3JlMi0zMjwvYj4sIGFuZCB0aGV5IGNhbiBhbHNvIGNvLWV4aXN0IHdpdGggdGhlIG9yaWdpbmFsIFBDUkUgbGlicmFyaWVzLgorPC9QPgorPFA+CitDaGFyYWN0ZXIgc3RyaW5ncyBhcmUgcGFzc2VkIHRvIGFuZCBmcm9tIGEgUENSRTIgbGlicmFyeSBhcyBhIHNlcXVlbmNlIG9mCit1bnNpZ25lZCBpbnRlZ2VycyBpbiBjb2RlIHVuaXRzIG9mIHRoZSBhcHByb3ByaWF0ZSB3aWR0aC4gRXZlcnkgUENSRTIgZnVuY3Rpb24KK2NvbWVzIGluIHRocmVlIGRpZmZlcmVudCBmb3Jtcywgb25lIGZvciBlYWNoIGxpYnJhcnksIGZvciBleGFtcGxlOgorPHByZT4KKyAgPGI+cGNyZTJfY29tcGlsZV84KCk8L2I+CisgIDxiPnBjcmUyX2NvbXBpbGVfMTYoKTwvYj4KKyAgPGI+cGNyZTJfY29tcGlsZV8zMigpPC9iPgorPC9wcmU+CitUaGVyZSBhcmUgYWxzbyB0aHJlZSBkaWZmZXJlbnQgc2V0cyBvZiBkYXRhIHR5cGVzOgorPHByZT4KKyAgPGI+UENSRTJfVUNIQVI4LCBQQ1JFMl9VQ0hBUjE2LCBQQ1JFMl9VQ0hBUjMyPC9iPgorICA8Yj5QQ1JFMl9TUFRSOCwgIFBDUkUyX1NQVFIxNiwgIFBDUkUyX1NQVFIzMjwvYj4KKzwvcHJlPgorVGhlIFVDSEFSIHR5cGVzIGRlZmluZSB1bnNpZ25lZCBjb2RlIHVuaXRzIG9mIHRoZSBhcHByb3ByaWF0ZSB3aWR0aHMuIEZvcgorZXhhbXBsZSwgUENSRTJfVUNIQVIxNiBpcyB1c3VhbGx5IGRlZmluZWQgYXMgYHVpbnQxNl90Jy4gVGhlIFNQVFIgdHlwZXMgYXJlCitjb25zdGFudCBwb2ludGVycyB0byB0aGUgZXF1aXZhbGVudCBVQ0hBUiB0eXBlcywgdGhhdCBpcywgdGhleSBhcmUgcG9pbnRlcnMgdG8KK3ZlY3RvcnMgb2YgdW5zaWduZWQgY29kZSB1bml0cy4KKzwvUD4KKzxQPgorTWFueSBhcHBsaWNhdGlvbnMgdXNlIG9ubHkgb25lIGNvZGUgdW5pdCB3aWR0aC4gRm9yIHRoZWlyIGNvbnZlbmllbmNlLCBtYWNyb3MKK2FyZSBkZWZpbmVkIHdob3NlIG5hbWVzIGFyZSB0aGUgZ2VuZXJpYyBmb3JtcyBzdWNoIGFzIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gYW5kCitQQ1JFMl9TUFRSLiBUaGVzZSBtYWNyb3MgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgbWFjcm8gUENSRTJfQ09ERV9VTklUX1dJRFRIIHRvCitnZW5lcmF0ZSB0aGUgYXBwcm9wcmlhdGUgd2lkdGgtc3BlY2lmaWMgZnVuY3Rpb24gYW5kIG1hY3JvIG5hbWVzLgorUENSRTJfQ09ERV9VTklUX1dJRFRIIGlzIG5vdCBkZWZpbmVkIGJ5IGRlZmF1bHQuIEFuIGFwcGxpY2F0aW9uIG11c3QgZGVmaW5lIGl0Cit0byBiZSA4LCAxNiwgb3IgMzIgYmVmb3JlIGluY2x1ZGluZyA8Yj5wY3JlMi5oPC9iPiBpbiBvcmRlciB0byBtYWtlIHVzZSBvZiB0aGUKK2dlbmVyaWMgbmFtZXMuCis8L1A+Cis8UD4KK0FwcGxpY2F0aW9ucyB0aGF0IHVzZSBtb3JlIHRoYW4gb25lIGNvZGUgdW5pdCB3aWR0aCBjYW4gYmUgbGlua2VkIHdpdGggbW9yZQordGhhbiBvbmUgUENSRTIgbGlicmFyeSwgYnV0IG11c3QgZGVmaW5lIFBDUkUyX0NPREVfVU5JVF9XSURUSCB0byBiZSAwIGJlZm9yZQoraW5jbHVkaW5nIDxiPnBjcmUyLmg8L2I+LCBhbmQgdGhlbiB1c2UgdGhlIHJlYWwgZnVuY3Rpb24gbmFtZXMuIEFueSBjb2RlIHRoYXQgaXMKK3RvIGJlIGluY2x1ZGVkIGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSB2YWx1ZSBvZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggaXMKK3Vua25vd24gc2hvdWxkIGFsc28gdXNlIHRoZSByZWFsIGZ1bmN0aW9uIG5hbWVzLiAoVW5mb3J0dW5hdGVseSwgaXQgaXMgbm90Citwb3NzaWJsZSBpbiBDIGNvZGUgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgdmFsdWUgb2YgYSBtYWNyby4pCis8L1A+Cis8UD4KK0lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCBpcyBub3QgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIDxiPnBjcmUyLmg8L2I+LCBhCitjb21waWxlciBlcnJvciBvY2N1cnMuCis8L1A+Cis8UD4KK1doZW4gdXNpbmcgbXVsdGlwbGUgbGlicmFyaWVzIGluIGFuIGFwcGxpY2F0aW9uLCB5b3UgbXVzdCB0YWtlIGNhcmUgd2hlbgorcHJvY2Vzc2luZyBhbnkgcGFydGljdWxhciBwYXR0ZXJuIHRvIHVzZSBvbmx5IGZ1bmN0aW9ucyBmcm9tIGEgc2luZ2xlIGxpYnJhcnkuCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcnVuIGEgbWF0Y2ggdXNpbmcgYSBwYXR0ZXJuIHRoYXQgd2FzIGNvbXBpbGVkIHdpdGgKKzxiPnBjcmUyX2NvbXBpbGVfMTYoKTwvYj4sIHlvdSBtdXN0IGRvIHNvIHdpdGggPGI+cGNyZTJfbWF0Y2hfMTYoKTwvYj4sIG5vdAorPGI+cGNyZTJfbWF0Y2hfOCgpPC9iPi4KKzwvUD4KKzxQPgorSW4gdGhlIGZ1bmN0aW9uIHN1bW1hcmllcyBhYm92ZSwgYW5kIGluIHRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgYW5kIG90aGVyCitQQ1JFMiBkb2N1bWVudHMsIGZ1bmN0aW9ucyBhbmQgZGF0YSB0eXBlcyBhcmUgZGVzY3JpYmVkIHVzaW5nIHRoZWlyIGdlbmVyaWMKK25hbWVzLCB3aXRob3V0IHRoZSA4LCAxNiwgb3IgMzIgc3VmZml4LgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzEyIiBocmVmPSIjVE9DMSI+UENSRTIgQVBJIE9WRVJWSUVXPC9hPjxicj4KKzxQPgorUENSRTIgaGFzIGl0cyBvd24gbmF0aXZlIEFQSSwgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQuIFRoZXJlIGFyZQorYWxzbyBzb21lIHdyYXBwZXIgZnVuY3Rpb25zIGZvciB0aGUgOC1iaXQgbGlicmFyeSB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlCitQT1NJWCByZWd1bGFyIGV4cHJlc3Npb24gQVBJLCBidXQgdGhleSBkbyBub3QgZ2l2ZSBhY2Nlc3MgdG8gYWxsIHRoZQorZnVuY3Rpb25hbGl0eS4gVGhleSBhcmUgZGVzY3JpYmVkIGluIHRoZQorPGEgaHJlZj0icGNyZTJwb3NpeC5odG1sIj48Yj5wY3JlMnBvc2l4PC9iPjwvYT4KK2RvY3VtZW50YXRpb24uIEJvdGggdGhlc2UgQVBJcyBkZWZpbmUgYSBzZXQgb2YgQyBmdW5jdGlvbiBjYWxscy4KKzwvUD4KKzxQPgorVGhlIG5hdGl2ZSBBUEkgQyBkYXRhIHR5cGVzLCBmdW5jdGlvbiBwcm90b3R5cGVzLCBvcHRpb24gdmFsdWVzLCBhbmQgZXJyb3IKK2NvZGVzIGFyZSBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZSA8Yj5wY3JlMi5oPC9iPiwgd2hpY2ggY29udGFpbnMgZGVmaW5pdGlvbnMKK29mIFBDUkUyX01BSk9SIGFuZCBQQ1JFMl9NSU5PUiwgdGhlIG1ham9yIGFuZCBtaW5vciByZWxlYXNlIG51bWJlcnMgZm9yIHRoZQorbGlicmFyeS4gQXBwbGljYXRpb25zIGNhbiB1c2UgdGhlc2UgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBkaWZmZXJlbnQgcmVsZWFzZXMKK29mIFBDUkUyLgorPC9QPgorPFA+CitJbiBhIFdpbmRvd3MgZW52aXJvbm1lbnQsIGlmIHlvdSB3YW50IHRvIHN0YXRpY2FsbHkgbGluayBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtCithZ2FpbnN0IGEgbm9uLWRsbCBQQ1JFMiBsaWJyYXJ5LCB5b3UgbXVzdCBkZWZpbmUgUENSRTJfU1RBVElDIGJlZm9yZSBpbmNsdWRpbmcKKzxiPnBjcmUyLmg8L2I+LgorPC9QPgorPFA+CitUaGUgZnVuY3Rpb25zIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4sIGFuZCA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBhcmUgdXNlZCBmb3IKK2NvbXBpbGluZyBhbmQgbWF0Y2hpbmcgcmVndWxhciBleHByZXNzaW9ucyBpbiBhIFBlcmwtY29tcGF0aWJsZSBtYW5uZXIuIEEKK3NhbXBsZSBwcm9ncmFtIHRoYXQgZGVtb25zdHJhdGVzIHRoZSBzaW1wbGVzdCB3YXkgb2YgdXNpbmcgdGhlbSBpcyBwcm92aWRlZCBpbgordGhlIGZpbGUgY2FsbGVkIDxpPnBjcmUyZGVtby5jPC9pPiBpbiB0aGUgUENSRTIgc291cmNlIGRpc3RyaWJ1dGlvbi4gQSBsaXN0aW5nCitvZiB0aGlzIHByb2dyYW0gaXMgZ2l2ZW4gaW4gdGhlCis8YSBocmVmPSJwY3JlMmRlbW8uaHRtbCI+PGI+cGNyZTJkZW1vPC9iPjwvYT4KK2RvY3VtZW50YXRpb24sIGFuZCB0aGUKKzxhIGhyZWY9InBjcmUyc2FtcGxlLmh0bWwiPjxiPnBjcmUyc2FtcGxlPC9iPjwvYT4KK2RvY3VtZW50YXRpb24gZGVzY3JpYmVzIGhvdyB0byBjb21waWxlIGFuZCBydW4gaXQuCis8L1A+Cis8UD4KK0p1c3QtaW4tdGltZSBjb21waWxlciBzdXBwb3J0IGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUgb2YgUENSRTIgdGhhdCBjYW4gYmUgYnVpbHQKK2luIGFwcHJvcHJpYXRlIGhhcmR3YXJlIGVudmlyb25tZW50cy4gSXQgZ3JlYXRseSBzcGVlZHMgdXAgdGhlIG1hdGNoaW5nCitwZXJmb3JtYW5jZSBvZiBtYW55IHBhdHRlcm5zLiBQcm9ncmFtcyBjYW4gcmVxdWVzdCB0aGF0IGl0IGJlIHVzZWQgaWYKK2F2YWlsYWJsZSwgYnkgY2FsbGluZyA8Yj5wY3JlMl9qaXRfY29tcGlsZSgpPC9iPiBhZnRlciBhIHBhdHRlcm4gaGFzIGJlZW4KK3N1Y2Nlc3NmdWxseSBjb21waWxlZCBieSA8Yj5wY3JlMl9jb21waWxlKCk8L2I+LiBUaGlzIGRvZXMgbm90aGluZyBpZiBKSVQKK3N1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4KKzwvUD4KKzxQPgorTW9yZSBjb21wbGljYXRlZCBwcm9ncmFtcyBtaWdodCBuZWVkIHRvIG1ha2UgdXNlIG9mIHRoZSBzcGVjaWFsaXN0IGZ1bmN0aW9ucworPGI+cGNyZTJfaml0X3N0YWNrX2NyZWF0ZSgpPC9iPiwgPGI+cGNyZTJfaml0X3N0YWNrX2ZyZWUoKTwvYj4sIGFuZAorPGI+cGNyZTJfaml0X3N0YWNrX2Fzc2lnbigpPC9iPiBpbiBvcmRlciB0byBjb250cm9sIHRoZSBKSVQgY29kZSdzIG1lbW9yeSB1c2FnZS4KKzwvUD4KKzxQPgorSklUIG1hdGNoaW5nIGlzIGF1dG9tYXRpY2FsbHkgdXNlZCBieSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBpZiBpdCBpcyBhdmFpbGFibGUuCitUaGVyZSBpcyBhbHNvIGEgZGlyZWN0IGludGVyZmFjZSBmb3IgSklUIG1hdGNoaW5nLCB3aGljaCBnaXZlcyBpbXByb3ZlZAorcGVyZm9ybWFuY2UuIFRoZSBKSVQtc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBkaXNjdXNzZWQgaW4gdGhlCis8YSBocmVmPSJwY3JlMmppdC5odG1sIj48Yj5wY3JlMmppdDwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPC9QPgorPFA+CitBIHNlY29uZCBtYXRjaGluZyBmdW5jdGlvbiwgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+LCB3aGljaCBpcyBub3QKK1BlcmwtY29tcGF0aWJsZSwgaXMgYWxzbyBwcm92aWRlZC4gVGhpcyB1c2VzIGEgZGlmZmVyZW50IGFsZ29yaXRobSBmb3IgdGhlCittYXRjaGluZy4gVGhlIGFsdGVybmF0aXZlIGFsZ29yaXRobSBmaW5kcyBhbGwgcG9zc2libGUgbWF0Y2hlcyAoYXQgYSBnaXZlbgorcG9pbnQgaW4gdGhlIHN1YmplY3QpLCBhbmQgc2NhbnMgdGhlIHN1YmplY3QganVzdCBvbmNlICh1bmxlc3MgdGhlcmUgYXJlCitsb29rYmVoaW5kIGFzc2VydGlvbnMpLiBIb3dldmVyLCB0aGlzIGFsZ29yaXRobSBkb2VzIG5vdCByZXR1cm4gY2FwdHVyZWQKK3N1YnN0cmluZ3MuIEEgZGVzY3JpcHRpb24gb2YgdGhlIHR3byBtYXRjaGluZyBhbGdvcml0aG1zIGFuZCB0aGVpciBhZHZhbnRhZ2VzCithbmQgZGlzYWR2YW50YWdlcyBpcyBnaXZlbiBpbiB0aGUKKzxhIGhyZWY9InBjcmUybWF0Y2hpbmcuaHRtbCI+PGI+cGNyZTJtYXRjaGluZzwvYj48L2E+Citkb2N1bWVudGF0aW9uLiBUaGVyZSBpcyBubyBKSVQgc3VwcG9ydCBmb3IgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+LgorPC9QPgorPFA+CitJbiBhZGRpdGlvbiB0byB0aGUgbWFpbiBjb21waWxpbmcgYW5kIG1hdGNoaW5nIGZ1bmN0aW9ucywgdGhlcmUgYXJlIGNvbnZlbmllbmNlCitmdW5jdGlvbnMgZm9yIGV4dHJhY3RpbmcgY2FwdHVyZWQgc3Vic3RyaW5ncyBmcm9tIGEgc3ViamVjdCBzdHJpbmcgdGhhdCBoYXMKK2JlZW4gbWF0Y2hlZCBieSA8Yj5wY3JlMl9tYXRjaCgpPC9iPi4gVGhleSBhcmU6Cis8cHJlPgorICA8Yj5wY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUoKTwvYj4KKyAgPGI+cGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIoKTwvYj4KKyAgPGI+cGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUoKTwvYj4KKyAgPGI+cGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcigpPC9iPgorICA8Yj5wY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQoKTwvYj4KKyAgPGI+cGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUoKTwvYj4KKyAgPGI+cGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlcigpPC9iPgorICA8Yj5wY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4oKTwvYj4KKyAgPGI+cGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUoKTwvYj4KKzwvcHJlPgorPGI+cGNyZTJfc3Vic3RyaW5nX2ZyZWUoKTwvYj4gYW5kIDxiPnBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUoKTwvYj4gYXJlIGFsc28KK3Byb3ZpZGVkLCB0byBmcmVlIHRoZSBtZW1vcnkgdXNlZCBmb3IgZXh0cmFjdGVkIHN0cmluZ3MuCis8L1A+Cis8UD4KK1RoZSBmdW5jdGlvbiA8Yj5wY3JlMl9zdWJzdGl0dXRlKCk8L2I+IGNhbiBiZSBjYWxsZWQgdG8gbWF0Y2ggYSBwYXR0ZXJuIGFuZAorcmV0dXJuIGEgY29weSBvZiB0aGUgc3ViamVjdCBzdHJpbmcgd2l0aCBzdWJzdGl0dXRpb25zIGZvciBwYXJ0cyB0aGF0IHdlcmUKK21hdGNoZWQuCis8L1A+Cis8UD4KK0ZpbmFsbHksIHRoZXJlIGFyZSBmdW5jdGlvbnMgZm9yIGZpbmRpbmcgb3V0IGluZm9ybWF0aW9uIGFib3V0IGEgY29tcGlsZWQKK3BhdHRlcm4gKDxiPnBjcmUyX3BhdHRlcm5faW5mbygpPC9iPikgYW5kIGFib3V0IHRoZSBjb25maWd1cmF0aW9uIHdpdGggd2hpY2gKK1BDUkUyIHdhcyBidWlsdCAoPGI+cGNyZTJfY29uZmlnKCk8L2I+KS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxMyIgaHJlZj0iI1RPQzEiPlNUUklORyBMRU5HVEhTIEFORCBPRkZTRVRTPC9hPjxicj4KKzxQPgorVGhlIFBDUkUyIEFQSSB1c2VzIHN0cmluZyBsZW5ndGhzIGFuZCBvZmZzZXRzIGludG8gc3RyaW5ncyBvZiBjb2RlIHVuaXRzIGluCitzZXZlcmFsIHBsYWNlcy4gVGhlc2UgdmFsdWVzIGFyZSBhbHdheXMgb2YgdHlwZSBQQ1JFMl9TSVpFLCB3aGljaCBpcyBhbgordW5zaWduZWQgaW50ZWdlciB0eXBlLCBjdXJyZW50bHkgYWx3YXlzIGRlZmluZWQgYXMgPGk+c2l6ZV90PC9pPi4gVGhlIGxhcmdlc3QKK3ZhbHVlIHRoYXQgY2FuIGJlIHN0b3JlZCBpbiBzdWNoIGEgdHlwZSAodGhhdCBpcyB+KFBDUkUyX1NJWkUpMCkgaXMgcmVzZXJ2ZWQKK2FzIGEgc3BlY2lhbCBpbmRpY2F0b3IgZm9yIHplcm8tdGVybWluYXRlZCBzdHJpbmdzIGFuZCB1bnNldCBvZmZzZXRzLgorVGhlcmVmb3JlLCB0aGUgbG9uZ2VzdCBzdHJpbmcgdGhhdCBjYW4gYmUgaGFuZGxlZCBpcyBvbmUgbGVzcyB0aGFuIHRoaXMKK21heGltdW0uCis8YSBuYW1lPSJuZXdsaW5lcyI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMxNCIgaHJlZj0iI1RPQzEiPk5FV0xJTkVTPC9hPjxicj4KKzxQPgorUENSRTIgc3VwcG9ydHMgZml2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgZm9yIGluZGljYXRpbmcgbGluZSBicmVha3MgaW4KK3N0cmluZ3M6IGEgc2luZ2xlIENSIChjYXJyaWFnZSByZXR1cm4pIGNoYXJhY3RlciwgYSBzaW5nbGUgTEYgKGxpbmVmZWVkKQorY2hhcmFjdGVyLCB0aGUgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSBDUkxGLCBhbnkgb2YgdGhlIHRocmVlIHByZWNlZGluZywgb3IgYW55CitVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UuIFRoZSBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2VzIGFyZSB0aGUgdGhyZWUganVzdAorbWVudGlvbmVkLCBwbHVzIHRoZSBzaW5nbGUgY2hhcmFjdGVycyBWVCAodmVydGljYWwgdGFiLCBVKzAwMEIpLCBGRiAoZm9ybSBmZWVkLAorVSswMDBDKSwgTkVMIChuZXh0IGxpbmUsIFUrMDA4NSksIExTIChsaW5lIHNlcGFyYXRvciwgVSsyMDI4KSwgYW5kIFBTCisocGFyYWdyYXBoIHNlcGFyYXRvciwgVSsyMDI5KS4KKzwvUD4KKzxQPgorRWFjaCBvZiB0aGUgZmlyc3QgdGhyZWUgY29udmVudGlvbnMgaXMgdXNlZCBieSBhdCBsZWFzdCBvbmUgb3BlcmF0aW5nIHN5c3RlbSBhcworaXRzIHN0YW5kYXJkIG5ld2xpbmUgc2VxdWVuY2UuIFdoZW4gUENSRTIgaXMgYnVpbHQsIGEgZGVmYXVsdCBjYW4gYmUgc3BlY2lmaWVkLgorVGhlIGRlZmF1bHQgZGVmYXVsdCBpcyBMRiwgd2hpY2ggaXMgdGhlIFVuaXggc3RhbmRhcmQuIEhvd2V2ZXIsIHRoZSBuZXdsaW5lCitjb252ZW50aW9uIGNhbiBiZSBjaGFuZ2VkIGJ5IGFuIGFwcGxpY2F0aW9uIHdoZW4gY2FsbGluZyA8Yj5wY3JlMl9jb21waWxlKCk8L2I+LAorb3IgaXQgY2FuIGJlIHNwZWNpZmllZCBieSBzcGVjaWFsIHRleHQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIGl0c2VsZjsgdGhpcworb3ZlcnJpZGVzIGFueSBvdGhlciBzZXR0aW5ncy4gU2VlIHRoZQorPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwiPjxiPnBjcmUycGF0dGVybjwvYj48L2E+CitwYWdlIGZvciBkZXRhaWxzIG9mIHRoZSBzcGVjaWFsIGNoYXJhY3RlciBzZXF1ZW5jZXMuCis8L1A+Cis8UD4KK0luIHRoZSBQQ1JFMiBkb2N1bWVudGF0aW9uIHRoZSB3b3JkICJuZXdsaW5lIiBpcyB1c2VkIHRvIG1lYW4gInRoZSBjaGFyYWN0ZXIgb3IKK3BhaXIgb2YgY2hhcmFjdGVycyB0aGF0IGluZGljYXRlIGEgbGluZSBicmVhayIuIFRoZSBjaG9pY2Ugb2YgbmV3bGluZQorY29udmVudGlvbiBhZmZlY3RzIHRoZSBoYW5kbGluZyBvZiB0aGUgZG90LCBjaXJjdW1mbGV4LCBhbmQgZG9sbGFyCittZXRhY2hhcmFjdGVycywgdGhlIGhhbmRsaW5nIG9mICMtY29tbWVudHMgaW4gL3ggbW9kZSwgYW5kLCB3aGVuIENSTEYgaXMgYQorcmVjb2duaXplZCBsaW5lIGVuZGluZyBzZXF1ZW5jZSwgdGhlIG1hdGNoIHBvc2l0aW9uIGFkdmFuY2VtZW50IGZvciBhCitub24tYW5jaG9yZWQgcGF0dGVybi4gVGhlcmUgaXMgbW9yZSBkZXRhaWwgYWJvdXQgdGhpcyBpbiB0aGUKKzxhIGhyZWY9IiNtYXRjaG9wdGlvbnMiPnNlY3Rpb24gb24gPGI+cGNyZTJfbWF0Y2goKTwvYj4gb3B0aW9uczwvYT4KK2JlbG93LgorPC9QPgorPFA+CitUaGUgY2hvaWNlIG9mIG5ld2xpbmUgY29udmVudGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGludGVycHJldGF0aW9uIG9mCit0aGUgXG4gb3IgXHIgZXNjYXBlIHNlcXVlbmNlcywgbm9yIGRvZXMgaXQgYWZmZWN0IHdoYXQgXFIgbWF0Y2hlczsgdGhpcyBoYXMKK2l0cyBvd24gc2VwYXJhdGUgY29udmVudGlvbi4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxNSIgaHJlZj0iI1RPQzEiPk1VTFRJVEhSRUFESU5HPC9hPjxicj4KKzxQPgorSW4gYSBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9uIGl0IGlzIGltcG9ydGFudCB0byBrZWVwIHRocmVhZC1zcGVjaWZpYyBkYXRhCitzZXBhcmF0ZSBmcm9tIGRhdGEgdGhhdCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gdGhyZWFkcy4gVGhlIFBDUkUyIGxpYnJhcnkgY29kZQoraXRzZWxmIGlzIHRocmVhZC1zYWZlOiBpdCBjb250YWlucyBubyBzdGF0aWMgb3IgZ2xvYmFsIHZhcmlhYmxlcy4gVGhlIEFQSSBpcworZGVzaWduZWQgdG8gYmUgZmFpcmx5IHNpbXBsZSBmb3Igbm9uLXRocmVhZGVkIGFwcGxpY2F0aW9ucyB3aGlsZSBhdCB0aGUgc2FtZQordGltZSBlbnN1cmluZyB0aGF0IG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb25zIGNhbiB1c2UgaXQuCis8L1A+Cis8UD4KK1RoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCBibG9ja3Mgb2YgZGF0YSB0aGF0IGFyZSB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24KK2JldHdlZW4gdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGUgUENSRTIgbGlicmFyaWVzLgorPC9QPgorPFA+CisoMSkgQSBwb2ludGVyIHRvIHRoZSBjb21waWxlZCBmb3JtIG9mIGEgcGF0dGVybiBpcyByZXR1cm5lZCB0byB0aGUgdXNlciB3aGVuCis8Yj5wY3JlMl9jb21waWxlKCk8L2I+IGlzIHN1Y2Nlc3NmdWwuIFRoZSBkYXRhIGluIHRoZSBjb21waWxlZCBwYXR0ZXJuIGlzIGZpeGVkLAorYW5kIGRvZXMgbm90IGNoYW5nZSB3aGVuIHRoZSBwYXR0ZXJuIGlzIG1hdGNoZWQuIFRoZXJlZm9yZSwgaXQgaXMgdGhyZWFkLXNhZmUsCit0aGF0IGlzLCB0aGUgc2FtZSBjb21waWxlZCBwYXR0ZXJuIGNhbiBiZSB1c2VkIGJ5IG1vcmUgdGhhbiBvbmUgdGhyZWFkCitzaW11bHRhbmVvdXNseS4gQW4gYXBwbGljYXRpb24gY2FuIGNvbXBpbGUgYWxsIGl0cyBwYXR0ZXJucyBhdCB0aGUgc3RhcnQsCitiZWZvcmUgZm9ya2luZyBvZmYgbXVsdGlwbGUgdGhyZWFkcyB0aGF0IHVzZSB0aGVtLiBIb3dldmVyLCBpZiB0aGUganVzdC1pbi10aW1lCitvcHRpbWl6YXRpb24gZmVhdHVyZSBpcyBiZWluZyB1c2VkLCBpdCBuZWVkcyBzZXBhcmF0ZSBtZW1vcnkgc3RhY2sgYXJlYXMgZm9yCitlYWNoIHRocmVhZC4gU2VlIHRoZQorPGEgaHJlZj0icGNyZTJqaXQuaHRtbCI+PGI+cGNyZTJqaXQ8L2I+PC9hPgorZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorPC9QPgorPFA+CisoMikgVGhlIG5leHQgc2VjdGlvbiBiZWxvdyBpbnRyb2R1Y2VzIHRoZSBpZGVhIG9mICJjb250ZXh0cyIgaW4gd2hpY2ggUENSRTIKK2Z1bmN0aW9ucyBhcmUgY2FsbGVkLiBBIGNvbnRleHQgaXMgbm90aGluZyBtb3JlIHRoYW4gYSBjb2xsZWN0aW9uIG9mIHBhcmFtZXRlcnMKK3RoYXQgY29udHJvbCB0aGUgd2F5IFBDUkUyIG9wZXJhdGVzLiBHcm91cGluZyBhIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRvZ2V0aGVyCitpbiBhIGNvbnRleHQgaXMgYSBjb252ZW5pZW50IHdheSBvZiBwYXNzaW5nIHRoZW0gdG8gYSBQQ1JFMiBmdW5jdGlvbiB3aXRob3V0Cit1c2luZyBsb3RzIG9mIGFyZ3VtZW50cy4gVGhlIHBhcmFtZXRlcnMgdGhhdCBhcmUgc3RvcmVkIGluIGNvbnRleHRzIGFyZSBpbiBzb21lCitzZW5zZSAiYWR2YW5jZWQgZmVhdHVyZXMiIG9mIHRoZSBBUEkuIE1hbnkgc3RyYWlnaHRmb3J3YXJkIGFwcGxpY2F0aW9ucyB3aWxsCitub3QgbmVlZCB0byB1c2UgY29udGV4dHMuCis8L1A+Cis8UD4KK0luIGEgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbiwgaWYgdGhlIHBhcmFtZXRlcnMgaW4gYSBjb250ZXh0IGFyZSB2YWx1ZXMgdGhhdAorYXJlIG5ldmVyIGNoYW5nZWQsIHRoZSBzYW1lIGNvbnRleHQgY2FuIGJlIHVzZWQgYnkgYWxsIHRoZSB0aHJlYWRzLiBIb3dldmVyLCBpZgorYW55IHRocmVhZCBuZWVkcyB0byBjaGFuZ2UgYW55IHZhbHVlIGluIGEgY29udGV4dCwgaXQgbXVzdCBtYWtlIGl0cyBvd24KK3RocmVhZC1zcGVjaWZpYyBjb3B5LgorPC9QPgorPFA+CisoMykgVGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyBuZWVkIGEgYmxvY2sgb2YgbWVtb3J5IGZvciB3b3JraW5nIHNwYWNlIGFuZCBmb3IKK3N0b3JpbmcgdGhlIHJlc3VsdHMgb2YgYSBtYXRjaC4gVGhpcyBpbmNsdWRlcyBkZXRhaWxzIG9mIHdoYXQgd2FzIG1hdGNoZWQsIGFzCit3ZWxsIGFzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgbmFtZSBvZiBhICgqTUFSSykgc2V0dGluZy4gRWFjaAordGhyZWFkIG11c3QgcHJvdmlkZSBpdHMgb3duIHZlcnNpb24gb2YgdGhpcyBtZW1vcnkuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTYiIGhyZWY9IiNUT0MxIj5QQ1JFMiBDT05URVhUUzwvYT48YnI+Cis8UD4KK1NvbWUgUENSRTIgZnVuY3Rpb25zIGhhdmUgYSBsb3Qgb2YgcGFyYW1ldGVycywgbWFueSBvZiB3aGljaCBhcmUgdXNlZCBvbmx5IGJ5CitzcGVjaWFsaXN0IGFwcGxpY2F0aW9ucywgZm9yIGV4YW1wbGUsIHRob3NlIHRoYXQgdXNlIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudAorb3Igbm9uLXN0YW5kYXJkIGNoYXJhY3RlciB0YWJsZXMuIFRvIGtlZXAgZnVuY3Rpb24gYXJndW1lbnQgbGlzdHMgYXQgYQorcmVhc29uYWJsZSBzaXplLCBhbmQgYXQgdGhlIHNhbWUgdGltZSB0byBrZWVwIHRoZSBBUEkgZXh0ZW5zaWJsZSwgInVuY29tbW9uIgorcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIGNlcnRhaW4gZnVuY3Rpb25zIGluIGEgPGI+Y29udGV4dDwvYj4gaW5zdGVhZCBvZgorZGlyZWN0bHkuIEEgY29udGV4dCBpcyBqdXN0IGEgYmxvY2sgb2YgbWVtb3J5IHRoYXQgaG9sZHMgdGhlIHBhcmFtZXRlciB2YWx1ZXMuCitBcHBsaWNhdGlvbnMgdGhhdCBkbyBub3QgbmVlZCB0byBhZGp1c3QgYW55IG9mIHRoZSBjb250ZXh0IHBhcmFtZXRlcnMgY2FuIHBhc3MKK05VTEwgd2hlbiBhIGNvbnRleHQgcG9pbnRlciBpcyByZXF1aXJlZC4KKzwvUD4KKzxQPgorVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB0eXBlcyBvZiBjb250ZXh0OiBhIGdlbmVyYWwgY29udGV4dCB0aGF0IGlzIHJlbGV2YW50Citmb3Igc2V2ZXJhbCBQQ1JFMiBvcGVyYXRpb25zLCBhIGNvbXBpbGUtdGltZSBjb250ZXh0LCBhbmQgYSBtYXRjaC10aW1lIGNvbnRleHQuCis8L1A+Cis8YnI+PGI+CitUaGUgZ2VuZXJhbCBjb250ZXh0Cis8L2I+PGJyPgorPFA+CitBdCBwcmVzZW50LCB0aGlzIGNvbnRleHQganVzdCBjb250YWlucyBwb2ludGVycyB0byAoYW5kIGRhdGEgZm9yKSBleHRlcm5hbAorbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCBmcm9tIHNldmVyYWwgcGxhY2VzIGluIHRoZSBQQ1JFMgorbGlicmFyeS4gVGhlIGNvbnRleHQgaXMgbmFtZWQgYGdlbmVyYWwnIHJhdGhlciB0aGFuIHNwZWNpZmljYWxseSBgbWVtb3J5JworYmVjYXVzZSBpbiBmdXR1cmUgb3RoZXIgZmllbGRzIG1heSBiZSBhZGRlZC4gSWYgeW91IGRvIG5vdCB3YW50IHRvIHN1cHBseSB5b3VyCitvd24gY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgeW91IGRvIG5vdCBuZWVkIHRvIGJvdGhlciB3aXRoIGEKK2dlbmVyYWwgY29udGV4dC4gQSBnZW5lcmFsIGNvbnRleHQgaXMgY3JlYXRlZCBieToKKzxiPnBjcmUyX2dlbmVyYWxfY29udGV4dCAqcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZSg8L2I+Cis8Yj4gIHZvaWQgKigqPGk+cHJpdmF0ZV9tYWxsb2M8L2k+KShQQ1JFMl9TSVpFLCB2b2lkICopLDwvYj4KKzxiPiAgdm9pZCAoKjxpPnByaXZhdGVfZnJlZTwvaT4pKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqPGk+bWVtb3J5X2RhdGE8L2k+KTs8L2I+Cis8YnI+Cis8YnI+CitUaGUgdHdvIGZ1bmN0aW9uIHBvaW50ZXJzIHNwZWNpZnkgY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgd2hvc2UKK3Byb3RvdHlwZXMgYXJlOgorPHByZT4KKyAgPGI+dm9pZCAqcHJpdmF0ZV9tYWxsb2MoUENSRTJfU0laRSwgdm9pZCAqKTs8L2I+CisgIDxiPnZvaWQgIHByaXZhdGVfZnJlZSh2b2lkICosIHZvaWQgKik7PC9iPgorPC9wcmU+CitXaGVuZXZlciBjb2RlIGluIFBDUkUyIGNhbGxzIHRoZXNlIGZ1bmN0aW9ucywgdGhlIGZpbmFsIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZQorb2YgPGk+bWVtb3J5X2RhdGE8L2k+LiBFaXRoZXIgb2YgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMgb2YgdGhlIGNyZWF0aW9uCitmdW5jdGlvbiBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSB0aGUgc3lzdGVtIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucworPGk+bWFsbG9jKCk8L2k+IGFuZCA8aT5mcmVlKCk8L2k+IGFyZSB1c2VkLiAoVGhpcyBpcyBub3QgY3VycmVudGx5IHVzZWZ1bCwgYXMKK3RoZXJlIGFyZSBubyBvdGhlciBmaWVsZHMgaW4gYSBnZW5lcmFsIGNvbnRleHQsIGJ1dCBpbiBmdXR1cmUgdGhlcmUgbWlnaHQgYmUuKQorVGhlIDxpPnByaXZhdGVfbWFsbG9jKCk8L2k+IGZ1bmN0aW9uIGlzIHVzZWQgKGlmIHN1cHBsaWVkKSB0byBvYnRhaW4gbWVtb3J5IGZvcgorc3RvcmluZyB0aGUgY29udGV4dCwgYW5kIGFsbCB0aHJlZSB2YWx1ZXMgYXJlIHNhdmVkIGFzIHBhcnQgb2YgdGhlIGNvbnRleHQuCis8L1A+Cis8UD4KK1doZW5ldmVyIFBDUkUyIGNyZWF0ZXMgYSBkYXRhIGJsb2NrIG9mIGFueSBraW5kLCB0aGUgYmxvY2sgY29udGFpbnMgYSBwb2ludGVyCit0byB0aGUgPGk+ZnJlZSgpPC9pPiBmdW5jdGlvbiB0aGF0IG1hdGNoZXMgdGhlIDxpPm1hbGxvYygpPC9pPiBmdW5jdGlvbiB0aGF0IHdhcwordXNlZC4gV2hlbiB0aGUgdGltZSBjb21lcyB0byBmcmVlIHRoZSBibG9jaywgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCis8L1A+Cis8UD4KK0EgZ2VuZXJhbCBjb250ZXh0IGNhbiBiZSBjb3BpZWQgYnkgY2FsbGluZzoKKzxiPnBjcmUyX2dlbmVyYWxfY29udGV4dCAqcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHkoPC9iPgorPGI+ICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPGJyPgorPGJyPgorVGhlIG1lbW9yeSB1c2VkIGZvciBhIGdlbmVyYWwgY29udGV4dCBzaG91bGQgYmUgZnJlZWQgYnkgY2FsbGluZzoKKzxiPnZvaWQgcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICo8aT5nY29udGV4dDwvaT4pOzwvYj4KKzxhIG5hbWU9ImNvbXBpbGVjb250ZXh0Ij48L2E+PC9QPgorPGJyPjxiPgorVGhlIGNvbXBpbGUgY29udGV4dAorPC9iPjxicj4KKzxQPgorQSBjb21waWxlIGNvbnRleHQgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiBhbnkKK29mIHRoZSBmb2xsb3dpbmcgY29tcGlsZS10aW1lIHBhcmFtZXRlcnM6Cis8cHJlPgorICBXaGF0IFxSIG1hdGNoZXMgKFVuaWNvZGUgbmV3bGluZXMgb3IgQ1IsIExGLCBDUkxGIG9ubHkpCisgIFBDUkUyJ3MgY2hhcmFjdGVyIHRhYmxlcworICBUaGUgbmV3bGluZSBjaGFyYWN0ZXIgc2VxdWVuY2UKKyAgVGhlIGNvbXBpbGUgdGltZSBuZXN0ZWQgcGFyZW50aGVzZXMgbGltaXQKKyAgVGhlIG1heGltdW0gbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuIHN0cmluZworICBBbiBleHRlcm5hbCBmdW5jdGlvbiBmb3Igc3RhY2sgY2hlY2tpbmcKKzwvcHJlPgorQSBjb21waWxlIGNvbnRleHQgaXMgYWxzbyByZXF1aXJlZCBpZiB5b3UgYXJlIHVzaW5nIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudC4KK0lmIG5vbmUgb2YgdGhlc2UgYXBwbHksIGp1c3QgcGFzcyBOVUxMIGFzIHRoZSBjb250ZXh0IGFyZ3VtZW50IG9mCis8aT5wY3JlMl9jb21waWxlKCk8L2k+LgorPC9QPgorPFA+CitBIGNvbXBpbGUgY29udGV4dCBpcyBjcmVhdGVkLCBjb3BpZWQsIGFuZCBmcmVlZCBieSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKzxiPnBjcmUyX2NvbXBpbGVfY29udGV4dCAqcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZSg8L2I+Cis8Yj4gIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqPGk+Z2NvbnRleHQ8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5wY3JlMl9jb21waWxlX2NvbnRleHQgKnBjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5KDwvYj4KKzxiPiAgcGNyZTJfY29tcGlsZV9jb250ZXh0ICo8aT5jY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnZvaWQgcGNyZTJfY29tcGlsZV9jb250ZXh0X2ZyZWUocGNyZTJfY29tcGlsZV9jb250ZXh0ICo8aT5jY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KK0EgY29tcGlsZSBjb250ZXh0IGlzIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgaXRzIHBhcmFtZXRlcnMuIFRoZXNlIGNhbgorYmUgY2hhbmdlZCBieSBjYWxsaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zLCB3aGljaCByZXR1cm4gMCBvbiBzdWNjZXNzLCBvcgorUENSRTJfRVJST1JfQkFEREFUQSBpZiBpbnZhbGlkIGRhdGEgaXMgZGV0ZWN0ZWQuCis8Yj5pbnQgcGNyZTJfc2V0X2JzcihwY3JlMl9jb21waWxlX2NvbnRleHQgKjxpPmNjb250ZXh0PC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPnZhbHVlPC9pPik7PC9iPgorPGJyPgorPGJyPgorVGhlIHZhbHVlIG11c3QgYmUgUENSRTJfQlNSX0FOWUNSTEYsIHRvIHNwZWNpZnkgdGhhdCBcUiBtYXRjaGVzIG9ubHkgQ1IsIExGLAorb3IgQ1JMRiwgb3IgUENSRTJfQlNSX1VOSUNPREUsIHRvIHNwZWNpZnkgdGhhdCBcUiBtYXRjaGVzIGFueSBVbmljb2RlIGxpbmUKK2VuZGluZyBzZXF1ZW5jZS4gVGhlIHZhbHVlIGlzIHVzZWQgYnkgdGhlIEpJVCBjb21waWxlciBhbmQgYnkgdGhlIHR3bworaW50ZXJwcmV0ZWQgbWF0Y2hpbmcgZnVuY3Rpb25zLCA8aT5wY3JlMl9tYXRjaCgpPC9pPiBhbmQKKzxpPnBjcmUyX2RmYV9tYXRjaCgpPC9pPi4KKzxiPmludCBwY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcyhwY3JlMl9jb21waWxlX2NvbnRleHQgKjxpPmNjb250ZXh0PC9pPiw8L2I+Cis8Yj4gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKjxpPnRhYmxlczwvaT4pOzwvYj4KKzxicj4KKzxicj4KK1RoZSB2YWx1ZSBtdXN0IGJlIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvIDxpPnBjcmUyX21ha2V0YWJsZXMoKTwvaT4sIHdob3NlIG9ubHkKK2FyZ3VtZW50IGlzIGEgZ2VuZXJhbCBjb250ZXh0LiBUaGlzIGZ1bmN0aW9uIGJ1aWxkcyBhIHNldCBvZiBjaGFyYWN0ZXIgdGFibGVzCitpbiB0aGUgY3VycmVudCBsb2NhbGUuCis8Yj5pbnQgcGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aChwY3JlMl9jb21waWxlX2NvbnRleHQgKjxpPmNjb250ZXh0PC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgPGk+dmFsdWU8L2k+KTs8L2I+Cis8YnI+Cis8YnI+CitUaGlzIHNldHMgYSBtYXhpbXVtIGxlbmd0aCwgaW4gY29kZSB1bml0cywgZm9yIHRoZSBwYXR0ZXJuIHN0cmluZyB0aGF0IGlzIHRvIGJlCitjb21waWxlZC4gSWYgdGhlIHBhdHRlcm4gaXMgbG9uZ2VyLCBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuIFRoaXMgZmFjaWxpdHkgaXMKK3Byb3ZpZGVkIHNvIHRoYXQgYXBwbGljYXRpb25zIHRoYXQgYWNjZXB0IHBhdHRlcm5zIGZyb20gZXh0ZXJuYWwgc291cmNlcyBjYW4KK2xpbWl0IHRoZWlyIHNpemUuIFRoZSBkZWZhdWx0IGlzIHRoZSBsYXJnZXN0IG51bWJlciB0aGF0IGEgUENSRTJfU0laRSB2YXJpYWJsZQorY2FuIGhvbGQsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHVubGltaXRlZC4KKzxiPmludCBwY3JlMl9zZXRfbmV3bGluZShwY3JlMl9jb21waWxlX2NvbnRleHQgKjxpPmNjb250ZXh0PC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPnZhbHVlPC9pPik7PC9iPgorPGJyPgorPGJyPgorVGhpcyBzcGVjaWZpZXMgd2hpY2ggY2hhcmFjdGVycyBvciBjaGFyYWN0ZXIgc2VxdWVuY2VzIGFyZSB0byBiZSByZWNvZ25pemVkIGFzCituZXdsaW5lcy4gVGhlIHZhbHVlIG11c3QgYmUgb25lIG9mIFBDUkUyX05FV0xJTkVfQ1IgKGNhcnJpYWdlIHJldHVybiBvbmx5KSwKK1BDUkUyX05FV0xJTkVfTEYgKGxpbmVmZWVkIG9ubHkpLCBQQ1JFMl9ORVdMSU5FX0NSTEYgKHRoZSB0d28tY2hhcmFjdGVyCitzZXF1ZW5jZSBDUiBmb2xsb3dlZCBieSBMRiksIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRiAoYW55IG9mIHRoZSBhYm92ZSksIG9yCitQQ1JFMl9ORVdMSU5FX0FOWSAoYW55IFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZSkuCis8L1A+Cis8UD4KK1doZW4gYSBwYXR0ZXJuIGlzIGNvbXBpbGVkIHdpdGggdGhlIFBDUkUyX0VYVEVOREVEIG9wdGlvbiwgdGhlIHZhbHVlIG9mIHRoaXMKK3BhcmFtZXRlciBhZmZlY3RzIHRoZSByZWNvZ25pdGlvbiBvZiB3aGl0ZSBzcGFjZSBhbmQgdGhlIGVuZCBvZiBpbnRlcm5hbAorY29tbWVudHMgc3RhcnRpbmcgd2l0aCAjLiBUaGUgdmFsdWUgaXMgc2F2ZWQgd2l0aCB0aGUgY29tcGlsZWQgcGF0dGVybiBmb3IKK3N1YnNlcXVlbnQgdXNlIGJ5IHRoZSBKSVQgY29tcGlsZXIgYW5kIGJ5IHRoZSB0d28gaW50ZXJwcmV0ZWQgbWF0Y2hpbmcKK2Z1bmN0aW9ucywgPGk+cGNyZTJfbWF0Y2goKTwvaT4gYW5kIDxpPnBjcmUyX2RmYV9tYXRjaCgpPC9pPi4KKzxiPmludCBwY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQocGNyZTJfY29tcGlsZV9jb250ZXh0ICo8aT5jY29udGV4dDwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT52YWx1ZTwvaT4pOzwvYj4KKzxicj4KKzxicj4KK1RoaXMgcGFyYW1ldGVyIGFqdXN0cyB0aGUgbGltaXQsIHNldCB3aGVuIFBDUkUyIGlzIGJ1aWx0IChkZWZhdWx0IDI1MCksIG9uIHRoZQorZGVwdGggb2YgcGFyZW50aGVzaXMgbmVzdGluZyBpbiBhIHBhdHRlcm4uIFRoaXMgbGltaXQgc3RvcHMgcm9ndWUgcGF0dGVybnMKK3VzaW5nIHVwIHRvbyBtdWNoIHN5c3RlbSBzdGFjayB3aGVuIGJlaW5nIGNvbXBpbGVkLgorPGI+aW50IHBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZChwY3JlMl9jb21waWxlX2NvbnRleHQgKjxpPmNjb250ZXh0PC9pPiw8L2I+Cis8Yj4gIGludCAoKjxpPmd1YXJkX2Z1bmN0aW9uPC9pPikodWludDMyX3QsIHZvaWQgKiksIHZvaWQgKjxpPnVzZXJfZGF0YTwvaT4pOzwvYj4KKzxicj4KKzxicj4KK1RoZXJlIGlzIGF0IGxlYXN0IG9uZSBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgUENSRTIgaW4gdGhyZWFkcyB3aXRoIHZlcnkgbGltaXRlZAorc3lzdGVtIHN0YWNrLCB3aGVyZSBydW5uaW5nIG91dCBvZiBzdGFjayBpcyB0byBiZSBhdm9pZGVkIGF0IGFsbCBjb3N0cy4gVGhlCitwYXJlbnRoZXNpcyBsaW1pdCBhYm92ZSBjYW5ub3QgdGFrZSBhY2NvdW50IG9mIGhvdyBtdWNoIHN0YWNrIGlzIGFjdHVhbGx5CithdmFpbGFibGUuIEZvciBhIGZpbmVyIGNvbnRyb2wsIHlvdSBjYW4gc3VwcGx5IGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQKK3doZW5ldmVyIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gc3RhcnRzIHRvIGNvbXBpbGUgYSBwYXJlbnRoZXNpemVkIHBhcnQgb2YgYQorcGF0dGVybi4gVGhpcyBmdW5jdGlvbiBjYW4gY2hlY2sgdGhlIGFjdHVhbCBzdGFjayBzaXplIChvciBhbnl0aGluZyBlbHNlIHRoYXQKK2l0IHdhbnRzIHRvLCBvZiBjb3Vyc2UpLgorPC9QPgorPFA+CitUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGNhbGxvdXQgZnVuY3Rpb24gZ2l2ZXMgdGhlIGN1cnJlbnQgZGVwdGggb2YKK25lc3RpbmcsIGFuZCB0aGUgc2Vjb25kIGlzIHVzZXIgZGF0YSB0aGF0IGlzIHNldCB1cCBieSB0aGUgbGFzdCBhcmd1bWVudCBvZgorPGI+cGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKCk8L2I+LiBUaGUgY2FsbG91dCBmdW5jdGlvbiBzaG91bGQgcmV0dXJuCit6ZXJvIGlmIGFsbCBpcyB3ZWxsLCBvciBub24temVybyB0byBmb3JjZSBhbiBlcnJvci4KKzxhIG5hbWU9Im1hdGNoY29udGV4dCI+PC9hPjwvUD4KKzxicj48Yj4KK1RoZSBtYXRjaCBjb250ZXh0Cis8L2I+PGJyPgorPFA+CitBIG1hdGNoIGNvbnRleHQgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiBhbnkKK29mIHRoZSBmb2xsb3dpbmcgbWF0Y2gtdGltZSBwYXJhbWV0ZXJzOgorPHByZT4KKyAgQSBjYWxsb3V0IGZ1bmN0aW9uCisgIFRoZSBvZmZzZXQgbGltaXQgZm9yIG1hdGNoaW5nIGFuIHVuYW5jaG9yZWQgcGF0dGVybgorICBUaGUgbGltaXQgZm9yIGNhbGxpbmcgPGI+bWF0Y2goKTwvYj4gKHNlZSBiZWxvdykKKyAgVGhlIGxpbWl0IGZvciBjYWxsaW5nIDxiPm1hdGNoKCk8L2I+IHJlY3Vyc2l2ZWx5Cis8L3ByZT4KK0EgbWF0Y2ggY29udGV4dCBpcyBhbHNvIHJlcXVpcmVkIGlmIHlvdSBhcmUgdXNpbmcgY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50LgorSWYgbm9uZSBvZiB0aGVzZSBhcHBseSwganVzdCBwYXNzIE5VTEwgYXMgdGhlIGNvbnRleHQgYXJndW1lbnQgb2YKKzxiPnBjcmUyX21hdGNoKCk8L2I+LCA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4sIG9yIDxiPnBjcmUyX2ppdF9tYXRjaCgpPC9iPi4KKzwvUD4KKzxQPgorQSBtYXRjaCBjb250ZXh0IGlzIGNyZWF0ZWQsIGNvcGllZCwgYW5kIGZyZWVkIGJ5IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorPGI+cGNyZTJfbWF0Y2hfY29udGV4dCAqcGNyZTJfbWF0Y2hfY29udGV4dF9jcmVhdGUoPC9iPgorPGI+ICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+cGNyZTJfbWF0Y2hfY29udGV4dCAqcGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5KDwvYj4KKzxiPiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj52b2lkIHBjcmUyX21hdGNoX2NvbnRleHRfZnJlZShwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KK0EgbWF0Y2ggY29udGV4dCBpcyBjcmVhdGVkIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGl0cyBwYXJhbWV0ZXJzLiBUaGVzZSBjYW4KK2JlIGNoYW5nZWQgYnkgY2FsbGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgd2hpY2ggcmV0dXJuIDAgb24gc3VjY2Vzcywgb3IKK1BDUkUyX0VSUk9SX0JBRERBVEEgaWYgaW52YWxpZCBkYXRhIGlzIGRldGVjdGVkLgorPGI+aW50IHBjcmUyX3NldF9jYWxsb3V0KHBjcmUyX21hdGNoX2NvbnRleHQgKjxpPm1jb250ZXh0PC9pPiw8L2I+Cis8Yj4gIGludCAoKjxpPmNhbGxvdXRfZnVuY3Rpb248L2k+KShwY3JlMl9jYWxsb3V0X2Jsb2NrICosIHZvaWQgKiksPC9iPgorPGI+ICB2b2lkICo8aT5jYWxsb3V0X2RhdGE8L2k+KTs8L2I+Cis8YnI+Cis8YnI+CitUaGlzIHNldHMgdXAgYSAiY2FsbG91dCIgZnVuY3Rpb24sIHdoaWNoIFBDUkUyIHdpbGwgY2FsbCBhdCBzcGVjaWZpZWQgcG9pbnRzCitkdXJpbmcgYSBtYXRjaGluZyBvcGVyYXRpb24uIERldGFpbHMgYXJlIGdpdmVuIGluIHRoZQorPGEgaHJlZj0icGNyZTJjYWxsb3V0Lmh0bWwiPjxiPnBjcmUyY2FsbG91dDwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPGI+aW50IHBjcmUyX3NldF9vZmZzZXRfbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+LDwvYj4KKzxiPiAgUENSRTJfU0laRSA8aT52YWx1ZTwvaT4pOzwvYj4KKzxicj4KKzxicj4KK1RoZSA8aT5vZmZzZXRfbGltaXQ8L2k+IHBhcmFtZXRlciBsaW1pdHMgaG93IGZhciBhbiB1bmFuY2hvcmVkIHNlYXJjaCBjYW4KK2FkdmFuY2UgaW4gdGhlIHN1YmplY3Qgc3RyaW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBQQ1JFMl9VTlNFVC4gVGhlCis8Yj5wY3JlMl9tYXRjaCgpPC9iPiBhbmQgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IGZ1bmN0aW9ucyByZXR1cm4KK1BDUkUyX0VSUk9SX05PTUFUQ0ggaWYgYSBtYXRjaCB3aXRoIGEgc3RhcnRpbmcgcG9pbnQgYmVmb3JlIG9yIGF0IHRoZSBnaXZlbgorb2Zmc2V0IGlzIG5vdCBmb3VuZC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwYXR0ZXJuIC9hYmMvIGlzIG1hdGNoZWQgYWdhaW5zdAorIjEyM2FiYyIgd2l0aCBhbiBvZmZzZXQgbGltaXQgbGVzcyB0aGFuIDMsIHRoZSByZXN1bHQgaXMgUENSRTJfRVJST1JfTk9fTUFUQ0guCitBIG1hdGNoIGNhbiBuZXZlciBiZSBmb3VuZCBpZiB0aGUgPGk+c3RhcnRvZmZzZXQ8L2k+IGFyZ3VtZW50IG9mCis8Yj5wY3JlMl9tYXRjaCgpPC9iPiBvciA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4gaXMgZ3JlYXRlciB0aGFuIHRoZSBvZmZzZXQKK2xpbWl0LgorPC9QPgorPFA+CitXaGVuIHVzaW5nIHRoaXMgZmFjaWxpdHksIHlvdSBtdXN0IHNldCBQQ1JFMl9VU0VfT0ZGU0VUX0xJTUlUIHdoZW4gY2FsbGluZworPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBzbyB0aGF0IHdoZW4gSklUIGlzIGluIHVzZSwgZGlmZmVyZW50IGNvZGUgY2FuIGJlCitjb21waWxlZC4gSWYgYSBtYXRjaCBpcyBzdGFydGVkIHdpdGggYSBub24tZGVmYXVsdCBtYXRjaCBsaW1pdCB3aGVuCitQQ1JFMl9VU0VfT0ZGU0VUX0xJTUlUIGlzIG5vdCBzZXQsIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4KKzwvUD4KKzxQPgorVGhlIG9mZnNldCBsaW1pdCBmYWNpbGl0eSBjYW4gYmUgdXNlZCB0byB0cmFjayBwcm9ncmVzcyB3aGVuIHNlYXJjaGluZyBsYXJnZQorc3ViamVjdCBzdHJpbmdzLiBTZWUgYWxzbyB0aGUgUENSRTJfRklSU1RMSU5FIG9wdGlvbiwgd2hpY2ggcmVxdWlyZXMgYSBtYXRjaCB0bworc3RhcnQgd2l0aGluIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBzdWJqZWN0LiBJZiB0aGlzIGlzIHNldCB3aXRoIGFuIG9mZnNldAorbGltaXQsIGEgbWF0Y2ggbXVzdCBvY2N1ciBpbiB0aGUgZmlyc3QgbGluZSBhbmQgYWxzbyB3aXRoaW4gdGhlIG9mZnNldCBsaW1pdC4KK0luIG90aGVyIHdvcmRzLCB3aGljaGV2ZXIgbGltaXQgY29tZXMgZmlyc3QgaXMgdXNlZC4KKzxiPmludCBwY3JlMl9zZXRfbWF0Y2hfbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+dmFsdWU8L2k+KTs8L2I+Cis8YnI+Cis8YnI+CitUaGUgPGk+bWF0Y2hfbGltaXQ8L2k+IHBhcmFtZXRlciBwcm92aWRlcyBhIG1lYW5zIG9mIHByZXZlbnRpbmcgUENSRTIgZnJvbSB1c2luZwordXAgdG9vIG1hbnkgcmVzb3VyY2VzIHdoZW4gcHJvY2Vzc2luZyBwYXR0ZXJucyB0aGF0IGFyZSBub3QgZ29pbmcgdG8gbWF0Y2gsIGJ1dAord2hpY2ggaGF2ZSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIHBvc3NpYmlsaXRpZXMgaW4gdGhlaXIgc2VhcmNoIHRyZWVzLiBUaGUKK2NsYXNzaWMgZXhhbXBsZSBpcyBhIHBhdHRlcm4gdGhhdCB1c2VzIG5lc3RlZCB1bmxpbWl0ZWQgcmVwZWF0cy4KKzwvUD4KKzxQPgorSW50ZXJuYWxseSwgPGI+cGNyZTJfbWF0Y2goKTwvYj4gdXNlcyBhIGZ1bmN0aW9uIGNhbGxlZCA8Yj5tYXRjaCgpPC9iPiwgd2hpY2ggaXQKK2NhbGxzIHJlcGVhdGVkbHkgKHNvbWV0aW1lcyByZWN1cnNpdmVseSkuIFRoZSBsaW1pdCBzZXQgYnkgPGk+bWF0Y2hfbGltaXQ8L2k+IGlzCitpbXBvc2VkIG9uIHRoZSBudW1iZXIgb2YgdGltZXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGEgbWF0Y2gsIHdoaWNoCitoYXMgdGhlIGVmZmVjdCBvZiBsaW1pdGluZyB0aGUgYW1vdW50IG9mIGJhY2t0cmFja2luZyB0aGF0IGNhbiB0YWtlIHBsYWNlLiBGb3IKK3BhdHRlcm5zIHRoYXQgYXJlIG5vdCBhbmNob3JlZCwgdGhlIGNvdW50IHJlc3RhcnRzIGZyb20gemVybyBmb3IgZWFjaCBwb3NpdGlvbgoraW4gdGhlIHN1YmplY3Qgc3RyaW5nLiBUaGlzIGxpbWl0IGlzIG5vdCByZWxldmFudCB0byA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4sCit3aGljaCBpZ25vcmVzIGl0LgorPC9QPgorPFA+CitXaGVuIDxiPnBjcmUyX21hdGNoKCk8L2I+IGlzIGNhbGxlZCB3aXRoIGEgcGF0dGVybiB0aGF0IHdhcyBzdWNjZXNzZnVsbHkKK3Byb2Nlc3NlZCBieSA8Yj5wY3JlMl9qaXRfY29tcGlsZSgpPC9iPiwgdGhlIHdheSBpbiB3aGljaCBtYXRjaGluZyBpcyBleGVjdXRlZAoraXMgZW50aXJlbHkgZGlmZmVyZW50LiBIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCB0aGUgcG9zc2liaWxpdHkgb2YgcnVuYXdheQorbWF0Y2hpbmcgdGhhdCBnb2VzIG9uIGZvciBhIHZlcnkgbG9uZyB0aW1lLCBhbmQgc28gdGhlIDxpPm1hdGNoX2xpbWl0PC9pPiB2YWx1ZQoraXMgYWxzbyB1c2VkIGluIHRoaXMgY2FzZSAoYnV0IGluIGEgZGlmZmVyZW50IHdheSkgdG8gbGltaXQgaG93IGxvbmcgdGhlCittYXRjaGluZyBjYW4gY29udGludWUuCis8L1A+Cis8UD4KK1RoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgbGltaXQgY2FuIGJlIHNldCB3aGVuIFBDUkUyIGlzIGJ1aWx0OyB0aGUgZGVmYXVsdAorZGVmYXVsdCBpcyAxMCBtaWxsaW9uLCB3aGljaCBoYW5kbGVzIGFsbCBidXQgdGhlIG1vc3QgZXh0cmVtZSBjYXNlcy4gSWYgdGhlCitsaW1pdCBpcyBleGNlZWRlZCwgPGI+cGNyZTJfbWF0Y2goKTwvYj4gcmV0dXJucyBQQ1JFMl9FUlJPUl9NQVRDSExJTUlULiBBIHZhbHVlCitmb3IgdGhlIG1hdGNoIGxpbWl0IG1heSBhbHNvIGJlIHN1cHBsaWVkIGJ5IGFuIGl0ZW0gYXQgdGhlIHN0YXJ0IG9mIGEgcGF0dGVybgorb2YgdGhlIGZvcm0KKzxwcmU+CisgICgqTElNSVRfTUFUQ0g9ZGRkKQorPC9wcmU+Cit3aGVyZSBkZGQgaXMgYSBkZWNpbWFsIG51bWJlci4gSG93ZXZlciwgc3VjaCBhIHNldHRpbmcgaXMgaWdub3JlZCB1bmxlc3MgZGRkIGlzCitsZXNzIHRoYW4gdGhlIGxpbWl0IHNldCBieSB0aGUgY2FsbGVyIG9mIDxiPnBjcmUyX21hdGNoKCk8L2I+IG9yLCBpZiBubyBzdWNoCitsaW1pdCBpcyBzZXQsIGxlc3MgdGhhbiB0aGUgZGVmYXVsdC4KKzxiPmludCBwY3JlMl9zZXRfcmVjdXJzaW9uX2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKjxpPm1jb250ZXh0PC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPnZhbHVlPC9pPik7PC9iPgorPGJyPgorPGJyPgorVGhlIDxpPnJlY3Vyc2lvbl9saW1pdDwvaT4gcGFyYW1ldGVyIGlzIHNpbWlsYXIgdG8gPGk+bWF0Y2hfbGltaXQ8L2k+LCBidXQKK2luc3RlYWQgb2YgbGltaXRpbmcgdGhlIHRvdGFsIG51bWJlciBvZiB0aW1lcyB0aGF0IDxiPm1hdGNoKCk8L2I+IGlzIGNhbGxlZCwgaXQKK2xpbWl0cyB0aGUgZGVwdGggb2YgcmVjdXJzaW9uLiBUaGUgcmVjdXJzaW9uIGRlcHRoIGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiB0aGUKK3RvdGFsIG51bWJlciBvZiBjYWxscywgYmVjYXVzZSBub3QgYWxsIGNhbGxzIHRvIDxiPm1hdGNoKCk8L2I+IGFyZSByZWN1cnNpdmUuCitUaGlzIGxpbWl0IGlzIG9mIHVzZSBvbmx5IGlmIGl0IGlzIHNldCBzbWFsbGVyIHRoYW4gPGk+bWF0Y2hfbGltaXQ8L2k+LgorPC9QPgorPFA+CitMaW1pdGluZyB0aGUgcmVjdXJzaW9uIGRlcHRoIGxpbWl0cyB0aGUgYW1vdW50IG9mIHN5c3RlbSBzdGFjayB0aGF0IGNhbiBiZQordXNlZCwgb3IsIHdoZW4gUENSRTIgaGFzIGJlZW4gY29tcGlsZWQgdG8gdXNlIG1lbW9yeSBvbiB0aGUgaGVhcCBpbnN0ZWFkIG9mIHRoZQorc3RhY2ssIHRoZSBhbW91bnQgb2YgaGVhcCBtZW1vcnkgdGhhdCBjYW4gYmUgdXNlZC4gVGhpcyBsaW1pdCBpcyBub3QgcmVsZXZhbnQsCithbmQgaXMgaWdub3JlZCwgd2hlbiBtYXRjaGluZyBpcyBkb25lIHVzaW5nIEpJVCBjb21waWxlZCBjb2RlIG9yIGJ5IHRoZQorPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IGZ1bmN0aW9uLgorPC9QPgorPFA+CitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgPGk+cmVjdXJzaW9uX2xpbWl0PC9pPiBjYW4gYmUgc2V0IHdoZW4gUENSRTIgaXMgYnVpbHQ7IHRoZQorZGVmYXVsdCBkZWZhdWx0IGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBkZWZhdWx0IGZvciA8aT5tYXRjaF9saW1pdDwvaT4uIElmIHRoZQorbGltaXQgaXMgZXhjZWVkZWQsIDxiPnBjcmUyX21hdGNoKCk8L2I+IHJldHVybnMgUENSRTJfRVJST1JfUkVDVVJTSU9OTElNSVQuIEEKK3ZhbHVlIGZvciB0aGUgcmVjdXJzaW9uIGxpbWl0IG1heSBhbHNvIGJlIHN1cHBsaWVkIGJ5IGFuIGl0ZW0gYXQgdGhlIHN0YXJ0IG9mIGEKK3BhdHRlcm4gb2YgdGhlIGZvcm0KKzxwcmU+CisgICgqTElNSVRfUkVDVVJTSU9OPWRkZCkKKzwvcHJlPgord2hlcmUgZGRkIGlzIGEgZGVjaW1hbCBudW1iZXIuIEhvd2V2ZXIsIHN1Y2ggYSBzZXR0aW5nIGlzIGlnbm9yZWQgdW5sZXNzIGRkZCBpcworbGVzcyB0aGFuIHRoZSBsaW1pdCBzZXQgYnkgdGhlIGNhbGxlciBvZiA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBvciwgaWYgbm8gc3VjaAorbGltaXQgaXMgc2V0LCBsZXNzIHRoYW4gdGhlIGRlZmF1bHQuCis8Yj5pbnQgcGNyZTJfc2V0X3JlY3Vyc2lvbl9tZW1vcnlfbWFuYWdlbWVudCg8L2I+Cis8Yj4gIHBjcmUyX21hdGNoX2NvbnRleHQgKjxpPm1jb250ZXh0PC9pPiw8L2I+Cis8Yj4gIHZvaWQgKigqPGk+cHJpdmF0ZV9tYWxsb2M8L2k+KShQQ1JFMl9TSVpFLCB2b2lkICopLDwvYj4KKzxiPiAgdm9pZCAoKjxpPnByaXZhdGVfZnJlZTwvaT4pKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqPGk+bWVtb3J5X2RhdGE8L2k+KTs8L2I+Cis8YnI+Cis8YnI+CitUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdHdvIGFkZGl0aW9uYWwgY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBmb3IgdXNlCitieSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiB3aGVuIFBDUkUyIGlzIGNvbXBpbGVkIHRvIHVzZSB0aGUgaGVhcCBmb3IgcmVtZW1iZXJpbmcKK2JhY2t0cmFja2luZyBkYXRhLCBpbnN0ZWFkIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscyB0aGF0IHVzZSB0aGUgc3lzdGVtCitzdGFjay4gVGhlcmUgaXMgYSBkaXNjdXNzaW9uIGFib3V0IFBDUkUyJ3Mgc3RhY2sgdXNhZ2UgaW4gdGhlCis8YSBocmVmPSJwY3JlMnN0YWNrLmh0bWwiPjxiPnBjcmUyc3RhY2s8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4gU2VlIHRoZQorPGEgaHJlZj0icGNyZTJidWlsZC5odG1sIj48Yj5wY3JlMmJ1aWxkPC9iPjwvYT4KK2RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgb2YgaG93IHRvIGJ1aWxkIFBDUkUyLgorPC9QPgorPFA+CitVc2luZyB0aGUgaGVhcCBmb3IgcmVjdXJzaW9uIGlzIGEgbm9uLXN0YW5kYXJkIHdheSBvZiBidWlsZGluZyBQQ1JFMiwgZm9yIHVzZQoraW4gZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBsaW1pdGVkIHN0YWNrcy4gQmVjYXVzZSBvZiB0aGUgZ3JlYXRlciB1c2Ugb2YgbWVtb3J5CittYW5hZ2VtZW50LCA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBydW5zIG1vcmUgc2xvd2x5LiBGdW5jdGlvbnMgdGhhdCBhcmUgZGlmZmVyZW50Cit0byB0aGUgZ2VuZXJhbCBjdXN0b20gbWVtb3J5IGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgc28gdGhhdCBzcGVjaWFsLXB1cnBvc2UKK2V4dGVybmFsIGNvZGUgY2FuIGJlIHVzZWQgZm9yIHRoaXMgY2FzZSwgYmVjYXVzZSB0aGUgbWVtb3J5IGJsb2NrcyBhcmUgYWxsIHRoZQorc2FtZSBzaXplLiBUaGUgYmxvY2tzIGFyZSByZXRhaW5lZCBieSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiB1bnRpbCBpdCBpcyBhYm91dCB0bworZXhpdCBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlLXVzZWQgd2hlbiBwb3NzaWJsZSBkdXJpbmcgdGhlIG1hdGNoLiBJbiB0aGUgYWJzZW5jZQorb2YgdGhlc2UgZnVuY3Rpb25zLCB0aGUgbm9ybWFsIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIHVzZWQsIGlmCitzdXBwbGllZCwgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gZnVuY3Rpb25zLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzE3IiBocmVmPSIjVE9DMSI+Q0hFQ0tJTkcgQlVJTEQtVElNRSBPUFRJT05TPC9hPjxicj4KKzxQPgorPGI+aW50IHBjcmUyX2NvbmZpZyh1aW50MzJfdCA8aT53aGF0PC9pPiwgdm9pZCAqPGk+d2hlcmU8L2k+KTs8L2I+Cis8L1A+Cis8UD4KK1RoZSBmdW5jdGlvbiA8Yj5wY3JlMl9jb25maWcoKTwvYj4gbWFrZXMgaXQgcG9zc2libGUgZm9yIGEgUENSRTIgY2xpZW50IHRvCitkaXNjb3ZlciB3aGljaCBvcHRpb25hbCBmZWF0dXJlcyBoYXZlIGJlZW4gY29tcGlsZWQgaW50byB0aGUgUENSRTIgbGlicmFyeS4gVGhlCis8YSBocmVmPSJwY3JlMmJ1aWxkLmh0bWwiPjxiPnBjcmUyYnVpbGQ8L2I+PC9hPgorZG9jdW1lbnRhdGlvbiBoYXMgbW9yZSBkZXRhaWxzIGFib3V0IHRoZXNlIG9wdGlvbmFsIGZlYXR1cmVzLgorPC9QPgorPFA+CitUaGUgZmlyc3QgYXJndW1lbnQgZm9yIDxiPnBjcmUyX2NvbmZpZygpPC9iPiBzcGVjaWZpZXMgd2hpY2ggaW5mb3JtYXRpb24gaXMKK3JlcXVpcmVkLiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBtZW1vcnkgaW50byB3aGljaCB0aGUgaW5mb3JtYXRpb24KK2lzIHBsYWNlZC4gSWYgTlVMTCBpcyBwYXNzZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRoYXQgaXMKK25lZWRlZCBmb3IgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbi4gRm9yIGNhbGxzIHRoYXQgcmV0dXJuIG51bWVyaWNhbCB2YWx1ZXMsCit0aGUgdmFsdWUgaXMgaW4gYnl0ZXM7IHdoZW4gcmVxdWVzdGluZyB0aGVzZSB2YWx1ZXMsIDxpPndoZXJlPC9pPiBzaG91bGQgcG9pbnQKK3RvIGFwcHJvcHJpYXRlbHkgYWxpZ25lZCBtZW1vcnkuIEZvciBjYWxscyB0aGF0IHJldHVybiBzdHJpbmdzLCB0aGUgcmVxdWlyZWQKK2xlbmd0aCBpcyBnaXZlbiBpbiBjb2RlIHVuaXRzLCBub3QgY291bnRpbmcgdGhlIHRlcm1pbmF0aW5nIHplcm8uCis8L1A+Cis8UD4KK1doZW4gcmVxdWVzdGluZyBpbmZvcm1hdGlvbiwgdGhlIHJldHVybmVkIHZhbHVlIGZyb20gPGI+cGNyZTJfY29uZmlnKCk8L2I+IGlzCitub24tbmVnYXRpdmUgb24gc3VjY2Vzcywgb3IgdGhlIG5lZ2F0aXZlIGVycm9yIGNvZGUgUENSRTJfRVJST1JfQkFET1BUSU9OIGlmCit0aGUgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCByZWNvZ25pemVkLiBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzCithdmFpbGFibGU6Cis8cHJlPgorICBQQ1JFMl9DT05GSUdfQlNSCis8L3ByZT4KK1RoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHdob3NlIHZhbHVlIGluZGljYXRlcyB3aGF0IGNoYXJhY3Rlcgorc2VxdWVuY2VzIHRoZSBcUiBlc2NhcGUgc2VxdWVuY2UgbWF0Y2hlcyBieSBkZWZhdWx0LiBBIHZhbHVlIG9mCitQQ1JFMl9CU1JfVU5JQ09ERSBtZWFucyB0aGF0IFxSIG1hdGNoZXMgYW55IFVuaWNvZGUgbGluZSBlbmRpbmcgc2VxdWVuY2U7IGEKK3ZhbHVlIG9mIFBDUkUyX0JTUl9BTllDUkxGIG1lYW5zIHRoYXQgXFIgbWF0Y2hlcyBvbmx5IENSLCBMRiwgb3IgQ1JMRi4gVGhlCitkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIHdoZW4gYSBwYXR0ZXJuIGlzIGNvbXBpbGVkLgorPHByZT4KKyAgUENSRTJfQ09ORklHX0pJVAorPC9wcmU+CitUaGUgb3V0cHV0IGlzIGEgdWludDMyX3QgaW50ZWdlciB0aGF0IGlzIHNldCB0byBvbmUgaWYgc3VwcG9ydCBmb3IganVzdC1pbi10aW1lCitjb21waWxpbmcgaXMgYXZhaWxhYmxlOyBvdGhlcndpc2UgaXQgaXMgc2V0IHRvIHplcm8uCis8cHJlPgorICBQQ1JFMl9DT05GSUdfSklUVEFSR0VUCis8L3ByZT4KK1RoZSA8aT53aGVyZTwvaT4gYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGEgYnVmZmVyIHRoYXQgaXMgYXQgbGVhc3QgNDggY29kZQordW5pdHMgbG9uZy4gKFRoZSBleGFjdCBsZW5ndGggcmVxdWlyZWQgY2FuIGJlIGZvdW5kIGJ5IGNhbGxpbmcKKzxiPnBjcmUyX2NvbmZpZygpPC9iPiB3aXRoIDxiPndoZXJlPC9iPiBzZXQgdG8gTlVMTC4pIFRoZSBidWZmZXIgaXMgZmlsbGVkIHdpdGggYQorc3RyaW5nIHRoYXQgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGFyY2hpdGVjdHVyZSBmb3Igd2hpY2ggdGhlIEpJVCBjb21waWxlciBpcworY29uZmlndXJlZCwgZm9yIGV4YW1wbGUgIng4NiAzMmJpdCAobGl0dGxlIGVuZGlhbiArIHVuYWxpZ25lZCkiLiBJZiBKSVQgc3VwcG9ydAoraXMgbm90IGF2YWlsYWJsZSwgUENSRTJfRVJST1JfQkFET1BUSU9OIGlzIHJldHVybmVkLCBvdGhlcndpc2UgdGhlIG51bWJlciBvZgorY29kZSB1bml0cyB1c2VkIGlzIHJldHVybmVkLiBUaGlzIGlzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZywgcGx1cyBvbmUgdW5pdAorZm9yIHRoZSB0ZXJtaW5hdGluZyB6ZXJvLgorPHByZT4KKyAgUENSRTJfQ09ORklHX0xJTktTSVpFCis8L3ByZT4KK1RoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgY29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyB1c2VkIGZvcgoraW50ZXJuYWwgbGlua2FnZSBpbiBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb25zLiBXaGVuIFBDUkUyIGlzIGNvbmZpZ3VyZWQsIHRoZQordmFsdWUgY2FuIGJlIHNldCB0byAyLCAzLCBvciA0LCB3aXRoIHRoZSBkZWZhdWx0IGJlaW5nIDIuIFRoaXMgaXMgdGhlIHZhbHVlCit0aGF0IGlzIHJldHVybmVkIGJ5IDxiPnBjcmUyX2NvbmZpZygpPC9iPi4gSG93ZXZlciwgd2hlbiB0aGUgMTYtYml0IGxpYnJhcnkgaXMKK2NvbXBpbGVkLCBhIHZhbHVlIG9mIDMgaXMgcm91bmRlZCB1cCB0byA0LCBhbmQgd2hlbiB0aGUgMzItYml0IGxpYnJhcnkgaXMKK2NvbXBpbGVkLCBpbnRlcm5hbCBsaW5rYWdlcyBhbHdheXMgdXNlIDQgYnl0ZXMsIHNvIHRoZSBjb25maWd1cmVkIHZhbHVlIGlzIG5vdAorcmVsZXZhbnQuCis8L1A+Cis8UD4KK1RoZSBkZWZhdWx0IHZhbHVlIG9mIDIgZm9yIHRoZSA4LWJpdCBhbmQgMTYtYml0IGxpYnJhcmllcyBpcyBzdWZmaWNpZW50IGZvciBhbGwKK2J1dCB0aGUgbW9zdCBtYXNzaXZlIHBhdHRlcm5zLCBzaW5jZSBpdCBhbGxvd3MgdGhlIHNpemUgb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm4KK3RvIGJlIHVwIHRvIDY0SyBjb2RlIHVuaXRzLiBMYXJnZXIgdmFsdWVzIGFsbG93IGxhcmdlciByZWd1bGFyIGV4cHJlc3Npb25zIHRvCitiZSBjb21waWxlZCBieSB0aG9zZSB0d28gbGlicmFyaWVzLCBidXQgYXQgdGhlIGV4cGVuc2Ugb2Ygc2xvd2VyIG1hdGNoaW5nLgorPHByZT4KKyAgUENSRTJfQ09ORklHX01BVENITElNSVQKKzwvcHJlPgorVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgdGhhdCBnaXZlcyB0aGUgZGVmYXVsdCBsaW1pdCBmb3IgdGhlIG51bWJlciBvZgoraW50ZXJuYWwgbWF0Y2hpbmcgZnVuY3Rpb24gY2FsbHMgaW4gYSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBleGVjdXRpb24uIEZ1cnRoZXIKK2RldGFpbHMgYXJlIGdpdmVuIHdpdGggPGI+cGNyZTJfbWF0Y2goKTwvYj4gYmVsb3cuCis8cHJlPgorICBQQ1JFMl9DT05GSUdfTkVXTElORQorPC9wcmU+CitUaGUgb3V0cHV0IGlzIGEgdWludDMyX3QgaW50ZWdlciB3aG9zZSB2YWx1ZSBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgY2hhcmFjdGVyCitzZXF1ZW5jZSB0aGF0IGlzIHJlY29nbml6ZWQgYXMgbWVhbmluZyAibmV3bGluZSIuIFRoZSB2YWx1ZXMgYXJlOgorPHByZT4KKyAgUENSRTJfTkVXTElORV9DUiAgICAgICBDYXJyaWFnZSByZXR1cm4gKENSKQorICBQQ1JFMl9ORVdMSU5FX0xGICAgICAgIExpbmVmZWVkIChMRikKKyAgUENSRTJfTkVXTElORV9DUkxGICAgICBDYXJyaWFnZSByZXR1cm4sIGxpbmVmZWVkIChDUkxGKQorICBQQ1JFMl9ORVdMSU5FX0FOWSAgICAgIEFueSBVbmljb2RlIGxpbmUgZW5kaW5nCisgIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRiAgQW55IG9mIENSLCBMRiwgb3IgQ1JMRgorPC9wcmU+CitUaGUgZGVmYXVsdCBzaG91bGQgbm9ybWFsbHkgY29ycmVzcG9uZCB0byB0aGUgc3RhbmRhcmQgc2VxdWVuY2UgZm9yIHlvdXIKK29wZXJhdGluZyBzeXN0ZW0uCis8cHJlPgorICBQQ1JFMl9DT05GSUdfUEFSRU5TTElNSVQKKzwvcHJlPgorVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgdGhhdCBnaXZlcyB0aGUgbWF4aW11bSBkZXB0aCBvZiBuZXN0aW5nCitvZiBwYXJlbnRoZXNlcyAob2YgYW55IGtpbmQpIGluIGEgcGF0dGVybi4gVGhpcyBsaW1pdCBpcyBpbXBvc2VkIHRvIGNhcCB0aGUKK2Ftb3VudCBvZiBzeXN0ZW0gc3RhY2sgdXNlZCB3aGVuIGEgcGF0dGVybiBpcyBjb21waWxlZC4gSXQgaXMgc3BlY2lmaWVkIHdoZW4KK1BDUkUyIGlzIGJ1aWx0OyB0aGUgZGVmYXVsdCBpcyAyNTAuIFRoaXMgbGltaXQgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhlCitzdGFjayB0aGF0IG1heSBhbHJlYWR5IGJlIHVzZWQgYnkgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIEZvciBmaW5lciBjb250cm9sCitvdmVyIGNvbXBpbGF0aW9uIHN0YWNrIHVzYWdlLCBzZWUgPGI+cGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKCk8L2I+LgorPHByZT4KKyAgUENSRTJfQ09ORklHX1JFQ1VSU0lPTkxJTUlUCis8L3ByZT4KK1RoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgZ2l2ZXMgdGhlIGRlZmF1bHQgbGltaXQgZm9yIHRoZSBkZXB0aCBvZgorcmVjdXJzaW9uIHdoZW4gY2FsbGluZyB0aGUgaW50ZXJuYWwgbWF0Y2hpbmcgZnVuY3Rpb24gaW4gYSA8Yj5wY3JlMl9tYXRjaCgpPC9iPgorZXhlY3V0aW9uLiBGdXJ0aGVyIGRldGFpbHMgYXJlIGdpdmVuIHdpdGggPGI+cGNyZTJfbWF0Y2goKTwvYj4gYmVsb3cuCis8cHJlPgorICBQQ1JFMl9DT05GSUdfU1RBQ0tSRUNVUlNFCis8L3ByZT4KK1RoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgaXMgc2V0IHRvIG9uZSBpZiBpbnRlcm5hbCByZWN1cnNpb24gd2hlbgorcnVubmluZyA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBpcyBpbXBsZW1lbnRlZCBieSByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMgdGhhdCB1c2UKK3RoZSBzeXN0ZW0gc3RhY2sgdG8gcmVtZW1iZXIgdGhlaXIgc3RhdGUuIFRoaXMgaXMgdGhlIHVzdWFsIHdheSB0aGF0IFBDUkUyIGlzCitjb21waWxlZC4gVGhlIG91dHB1dCBpcyB6ZXJvIGlmIFBDUkUyIHdhcyBjb21waWxlZCB0byB1c2UgYmxvY2tzIG9mIGRhdGEgb24gdGhlCitoZWFwIGluc3RlYWQgb2YgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzLgorPHByZT4KKyAgUENSRTJfQ09ORklHX1VOSUNPREVfVkVSU0lPTgorPC9wcmU+CitUaGUgPGk+d2hlcmU8L2k+IGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIGJ1ZmZlciB0aGF0IGlzIGF0IGxlYXN0IDI0IGNvZGUKK3VuaXRzIGxvbmcuIChUaGUgZXhhY3QgbGVuZ3RoIHJlcXVpcmVkIGNhbiBiZSBmb3VuZCBieSBjYWxsaW5nCis8Yj5wY3JlMl9jb25maWcoKTwvYj4gd2l0aCA8Yj53aGVyZTwvYj4gc2V0IHRvIE5VTEwuKSBJZiBQQ1JFMiBoYXMgYmVlbiBjb21waWxlZAord2l0aG91dCBVbmljb2RlIHN1cHBvcnQsIHRoZSBidWZmZXIgaXMgZmlsbGVkIHdpdGggdGhlIHRleHQgIlVuaWNvZGUgbm90CitzdXBwb3J0ZWQiLiBPdGhlcndpc2UsIHRoZSBVbmljb2RlIHZlcnNpb24gc3RyaW5nIChmb3IgZXhhbXBsZSwgIjguMC4wIikgaXMKK2luc2VydGVkLiBUaGUgbnVtYmVyIG9mIGNvZGUgdW5pdHMgdXNlZCBpcyByZXR1cm5lZC4gVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIHRoZQorc3RyaW5nIHBsdXMgb25lIHVuaXQgZm9yIHRoZSB0ZXJtaW5hdGluZyB6ZXJvLgorPHByZT4KKyAgUENSRTJfQ09ORklHX1VOSUNPREUKKzwvcHJlPgorVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgdGhhdCBpcyBzZXQgdG8gb25lIGlmIFVuaWNvZGUgc3VwcG9ydCBpcworYXZhaWxhYmxlOyBvdGhlcndpc2UgaXQgaXMgc2V0IHRvIHplcm8uIFVuaWNvZGUgc3VwcG9ydCBpbXBsaWVzIFVURiBzdXBwb3J0LgorPHByZT4KKyAgUENSRTJfQ09ORklHX1ZFUlNJT04KKzwvcHJlPgorVGhlIDxpPndoZXJlPC9pPiBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSBidWZmZXIgdGhhdCBpcyBhdCBsZWFzdCAxMiBjb2RlCit1bml0cyBsb25nLiAoVGhlIGV4YWN0IGxlbmd0aCByZXF1aXJlZCBjYW4gYmUgZm91bmQgYnkgY2FsbGluZworPGI+cGNyZTJfY29uZmlnKCk8L2I+IHdpdGggPGI+d2hlcmU8L2I+IHNldCB0byBOVUxMLikgVGhlIGJ1ZmZlciBpcyBmaWxsZWQgd2l0aAordGhlIFBDUkUyIHZlcnNpb24gc3RyaW5nLCB6ZXJvLXRlcm1pbmF0ZWQuIFRoZSBudW1iZXIgb2YgY29kZSB1bml0cyB1c2VkIGlzCityZXR1cm5lZC4gVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgcGx1cyBvbmUgdW5pdCBmb3IgdGhlIHRlcm1pbmF0aW5nCit6ZXJvLgorPGEgbmFtZT0iY29tcGlsaW5nIj48L2E+PC9QPgorPGJyPjxhIG5hbWU9IlNFQzE4IiBocmVmPSIjVE9DMSI+Q09NUElMSU5HIEEgUEFUVEVSTjwvYT48YnI+Cis8UD4KKzxiPnBjcmUyX2NvZGUgKnBjcmUyX2NvbXBpbGUoUENSRTJfU1BUUiA8aT5wYXR0ZXJuPC9pPiwgUENSRTJfU0laRSA8aT5sZW5ndGg8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+b3B0aW9uczwvaT4sIGludCAqPGk+ZXJyb3Jjb2RlPC9pPiwgUENSRTJfU0laRSAqPGk+ZXJyb3JvZmZzZXQsPC9pPjwvYj4KKzxiPiAgcGNyZTJfY29tcGlsZV9jb250ZXh0ICo8aT5jY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnZvaWQgcGNyZTJfY29kZV9mcmVlKHBjcmUyX2NvZGUgKjxpPmNvZGU8L2k+KTs8L2I+Cis8L1A+Cis8UD4KK1RoZSA8Yj5wY3JlMl9jb21waWxlKCk8L2I+IGZ1bmN0aW9uIGNvbXBpbGVzIGEgcGF0dGVybiBpbnRvIGFuIGludGVybmFsIGZvcm0uCitUaGUgcGF0dGVybiBpcyBkZWZpbmVkIGJ5IGEgcG9pbnRlciB0byBhIHN0cmluZyBvZiBjb2RlIHVuaXRzIGFuZCBhIGxlbmd0aCwgSWYKK3RoZSBwYXR0ZXJuIGlzIHplcm8tdGVybWluYXRlZCwgdGhlIGxlbmd0aCBjYW4gYmUgc3BlY2lmaWVkIGFzCitQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhIGJsb2NrIG9mIG1lbW9yeSB0aGF0Citjb250YWlucyB0aGUgY29tcGlsZWQgcGF0dGVybiBhbmQgcmVsYXRlZCBkYXRhLiBUaGUgY2FsbGVyIG11c3QgZnJlZSB0aGUgbWVtb3J5CitieSBjYWxsaW5nIDxiPnBjcmUyX2NvZGVfZnJlZSgpPC9iPiB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCis8L1A+Cis8UD4KK05PVEU6IFdoZW4gb25lIG9mIHRoZSBtYXRjaGluZyBmdW5jdGlvbnMgaXMgY2FsbGVkLCBwb2ludGVycyB0byB0aGUgY29tcGlsZWQKK3BhdHRlcm4gYW5kIHRoZSBzdWJqZWN0IHN0cmluZyBhcmUgc2V0IGluIHRoZSBtYXRjaCBkYXRhIGJsb2NrIHNvIHRoYXQgdGhleSBjYW4KK2JlIHJlZmVyZW5jZWQgYnkgdGhlIGV4dHJhY3Rpb24gZnVuY3Rpb25zLiBBZnRlciBydW5uaW5nIGEgbWF0Y2gsIHlvdSBtdXN0IG5vdAorZnJlZSBhIGNvbXBpbGVkIHBhdHRlcm4gKG9yIGEgc3ViamVjdCBzdHJpbmcpIHVudGlsIGFmdGVyIGFsbCBvcGVyYXRpb25zIG9uIHRoZQorPGEgaHJlZj0iI21hdGNoZGF0YWJsb2NrIj5tYXRjaCBkYXRhIGJsb2NrPC9hPgoraGF2ZSB0YWtlbiBwbGFjZS4KKzwvUD4KKzxQPgorSWYgdGhlIGNvbXBpbGUgY29udGV4dCBhcmd1bWVudCA8aT5jY29udGV4dDwvaT4gaXMgTlVMTCwgbWVtb3J5IGZvciB0aGUgY29tcGlsZWQKK3BhdHRlcm4gaXMgb2J0YWluZWQgYnkgY2FsbGluZyA8Yj5tYWxsb2MoKTwvYj4uIE90aGVyd2lzZSwgaXQgaXMgb2J0YWluZWQgZnJvbQordGhlIHNhbWUgbWVtb3J5IGZ1bmN0aW9uIHRoYXQgd2FzIHVzZWQgZm9yIHRoZSBjb21waWxlIGNvbnRleHQuCis8L1A+Cis8UD4KK1RoZSA8aT5vcHRpb25zPC9pPiBhcmd1bWVudCBjb250YWlucyB2YXJpb3VzIGJpdCBzZXR0aW5ncyB0aGF0IGFmZmVjdCB0aGUKK2NvbXBpbGF0aW9uLiBJdCBzaG91bGQgYmUgemVybyBpZiBubyBvcHRpb25zIGFyZSByZXF1aXJlZC4gVGhlIGF2YWlsYWJsZQorb3B0aW9ucyBhcmUgZGVzY3JpYmVkIGJlbG93LiBTb21lIG9mIHRoZW0gKGluIHBhcnRpY3VsYXIsIHRob3NlIHRoYXQgYXJlCitjb21wYXRpYmxlIHdpdGggUGVybCwgYnV0IHNvbWUgb3RoZXJzIGFzIHdlbGwpIGNhbiBhbHNvIGJlIHNldCBhbmQgdW5zZXQgZnJvbQord2l0aGluIHRoZSBwYXR0ZXJuIChzZWUgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGluIHRoZQorPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwiPjxiPnBjcmUycGF0dGVybjwvYj48L2E+Citkb2N1bWVudGF0aW9uKS4KKzwvUD4KKzxQPgorRm9yIHRob3NlIG9wdGlvbnMgdGhhdCBjYW4gYmUgZGlmZmVyZW50IGluIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgcGF0dGVybiwgdGhlCitjb250ZW50cyBvZiB0aGUgPGk+b3B0aW9uczwvaT4gYXJndW1lbnQgc3BlY2lmaWVzIHRoZWlyIHNldHRpbmdzIGF0IHRoZSBzdGFydCBvZgorY29tcGlsYXRpb24uIFRoZSBQQ1JFMl9BTkNIT1JFRCBhbmQgUENSRTJfTk9fVVRGX0NIRUNLIG9wdGlvbnMgY2FuIGJlIHNldCBhdAordGhlIHRpbWUgb2YgbWF0Y2hpbmcgYXMgd2VsbCBhcyBhdCBjb21waWxlIHRpbWUuCis8L1A+Cis8UD4KK090aGVyLCBsZXNzIGZyZXF1ZW50bHkgcmVxdWlyZWQgY29tcGlsZS10aW1lIHBhcmFtZXRlcnMgKGZvciBleGFtcGxlLCB0aGUKK25ld2xpbmUgc2V0dGluZykgY2FuIGJlIHByb3ZpZGVkIGluIGEgY29tcGlsZSBjb250ZXh0IChhcyBkZXNjcmliZWQKKzxhIGhyZWY9IiNjb21waWxlY29udGV4dCI+YWJvdmUpLjwvYT4KKzwvUD4KKzxQPgorSWYgPGk+ZXJyb3Jjb2RlPC9pPiBvciA8aT5lcnJvcm9mZnNldDwvaT4gaXMgTlVMTCwgPGI+cGNyZTJfY29tcGlsZSgpPC9iPiByZXR1cm5zCitOVUxMIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UsIGlmIGNvbXBpbGF0aW9uIG9mIGEgcGF0dGVybiBmYWlscywKKzxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gcmV0dXJucyBOVUxMLCBoYXZpbmcgc2V0IHRoZXNlIHZhcmlhYmxlcyB0byBhbiBlcnJvciBjb2RlCithbmQgYW4gb2Zmc2V0IChudW1iZXIgb2YgY29kZSB1bml0cykgd2l0aGluIHRoZSBwYXR0ZXJuLCByZXNwZWN0aXZlbHkuIFRoZQorPGI+cGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKTwvYj4gZnVuY3Rpb24gcHJvdmlkZXMgYSB0ZXh0dWFsIG1lc3NhZ2UgZm9yIGVhY2gKK2Vycm9yIGNvZGUuIENvbXBpbGF0aW9uIGVycm9ycyBhcmUgcG9zaXRpdmUgbnVtYmVycywgYnV0IFVURiBmb3JtYXR0aW5nIGVycm9ycworYXJlIG5lZ2F0aXZlIG51bWJlcnMuIEZvciBhbiBpbnZhbGlkIFVURi04IG9yIFVURi0xNiBzdHJpbmcsIHRoZSBvZmZzZXQgaXMgdGhhdAorb2YgdGhlIGZpcnN0IGNvZGUgdW5pdCBvZiB0aGUgZmFpbGluZyBjaGFyYWN0ZXIuCis8L1A+Cis8UD4KK1NvbWUgZXJyb3JzIGFyZSBub3QgZGV0ZWN0ZWQgdW50aWwgdGhlIHdob2xlIHBhdHRlcm4gaGFzIGJlZW4gc2Nhbm5lZDsgaW4gdGhlc2UKK2Nhc2VzLCB0aGUgb2Zmc2V0IHBhc3NlZCBiYWNrIGlzIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uIE5vdGUgdGhhdCB0aGUKK29mZnNldCBpcyBpbiBjb2RlIHVuaXRzLCBub3QgY2hhcmFjdGVycywgZXZlbiBpbiBhIFVURiBtb2RlLiBJdCBtYXkgc29tZXRpbWVzCitwb2ludCBpbnRvIHRoZSBtaWRkbGUgb2YgYSBVVEYtOCBvciBVVEYtMTYgY2hhcmFjdGVyLgorPC9QPgorPFA+CitUaGlzIGNvZGUgZnJhZ21lbnQgc2hvd3MgYSB0eXBpY2FsIHN0cmFpZ2h0Zm9yd2FyZCBjYWxsIHRvCis8Yj5wY3JlMl9jb21waWxlKCk8L2I+OgorPHByZT4KKyAgcGNyZTJfY29kZSAqcmU7CisgIFBDUkUyX1NJWkUgZXJyb2Zmc2V0OworICBpbnQgZXJyb3Jjb2RlOworICByZSA9IHBjcmUyX2NvbXBpbGUoCisgICAgIl5BLipaIiwgICAgICAgICAgICAgICAgLyogdGhlIHBhdHRlcm4gKi8KKyAgICBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsICAvKiB0aGUgcGF0dGVybiBpcyB6ZXJvLXRlcm1pbmF0ZWQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IG9wdGlvbnMgKi8KKyAgICAmZXJyb3Jjb2RlLCAgICAgICAgICAgICAvKiBmb3IgZXJyb3IgY29kZSAqLworICAgICZlcnJvZmZzZXQsICAgICAgICAgICAgIC8qIGZvciBlcnJvciBvZmZzZXQgKi8KKyAgICBOVUxMKTsgICAgICAgICAgICAgICAgICAvKiBubyBjb21waWxlIGNvbnRleHQgKi8KKzwvcHJlPgorVGhlIGZvbGxvd2luZyBuYW1lcyBmb3Igb3B0aW9uIGJpdHMgYXJlIGRlZmluZWQgaW4gdGhlIDxiPnBjcmUyLmg8L2I+IGhlYWRlcgorZmlsZToKKzxwcmU+CisgIFBDUkUyX0FOQ0hPUkVECis8L3ByZT4KK0lmIHRoaXMgYml0IGlzIHNldCwgdGhlIHBhdHRlcm4gaXMgZm9yY2VkIHRvIGJlICJhbmNob3JlZCIsIHRoYXQgaXMsIGl0IGlzCitjb25zdHJhaW5lZCB0byBtYXRjaCBvbmx5IGF0IHRoZSBmaXJzdCBtYXRjaGluZyBwb2ludCBpbiB0aGUgc3RyaW5nIHRoYXQgaXMKK2JlaW5nIHNlYXJjaGVkICh0aGUgInN1YmplY3Qgc3RyaW5nIikuIFRoaXMgZWZmZWN0IGNhbiBhbHNvIGJlIGFjaGlldmVkIGJ5CithcHByb3ByaWF0ZSBjb25zdHJ1Y3RzIGluIHRoZSBwYXR0ZXJuIGl0c2VsZiwgd2hpY2ggaXMgdGhlIG9ubHkgd2F5IHRvIGRvIGl0IGluCitQZXJsLgorPHByZT4KKyAgUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1MKKzwvcHJlPgorQnkgZGVmYXVsdCwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLCBhIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgdGhhdAoraW1tZWRpYXRlbHkgZm9sbG93cyBhbiBvcGVuaW5nIG9uZSBpcyB0cmVhdGVkIGFzIGEgZGF0YSBjaGFyYWN0ZXIgZm9yIHRoZQorY2xhc3MuIFdoZW4gUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1MgaXMgc2V0LCBpdCB0ZXJtaW5hdGVzIHRoZSBjbGFzcywgd2hpY2gKK3RoZXJlZm9yZSBjb250YWlucyBubyBjaGFyYWN0ZXJzIGFuZCBzbyBjYW4gbmV2ZXIgbWF0Y2guCis8cHJlPgorICBQQ1JFMl9BTFRfQlNVWAorPC9wcmU+CitUaGlzIG9wdGlvbiByZXF1ZXN0IGFsdGVybmF0aXZlIGhhbmRsaW5nIG9mIHRocmVlIGVzY2FwZSBzZXF1ZW5jZXMsIHdoaWNoCittYWtlcyBQQ1JFMidzIGJlaGF2aW91ciBtb3JlIGxpa2UgRUNNQXNjcmlwdCAoYWthIEphdmFTY3JpcHQpLiBXaGVuIGl0IGlzIHNldDoKKzwvUD4KKzxQPgorKDEpIFxVIG1hdGNoZXMgYW4gdXBwZXIgY2FzZSAiVSIgY2hhcmFjdGVyOyBieSBkZWZhdWx0IFxVIGNhdXNlcyBhIGNvbXBpbGUKK3RpbWUgZXJyb3IgKFBlcmwgdXNlcyBcVSB0byB1cHBlciBjYXNlIHN1YnNlcXVlbnQgY2hhcmFjdGVycykuCis8L1A+Cis8UD4KKygyKSBcdSBtYXRjaGVzIGEgbG93ZXIgY2FzZSAidSIgY2hhcmFjdGVyIHVubGVzcyBpdCBpcyBmb2xsb3dlZCBieSBmb3VyCitoZXhhZGVjaW1hbCBkaWdpdHMsIGluIHdoaWNoIGNhc2UgdGhlIGhleGFkZWNpbWFsIG51bWJlciBkZWZpbmVzIHRoZSBjb2RlIHBvaW50Cit0byBtYXRjaC4gQnkgZGVmYXVsdCwgXHUgY2F1c2VzIGEgY29tcGlsZSB0aW1lIGVycm9yIChQZXJsIHVzZXMgaXQgdG8gdXBwZXIKK2Nhc2UgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIpLgorPC9QPgorPFA+CisoMykgXHggbWF0Y2hlcyBhIGxvd2VyIGNhc2UgIngiIGNoYXJhY3RlciB1bmxlc3MgaXQgaXMgZm9sbG93ZWQgYnkgdHdvCitoZXhhZGVjaW1hbCBkaWdpdHMsIGluIHdoaWNoIGNhc2UgdGhlIGhleGFkZWNpbWFsIG51bWJlciBkZWZpbmVzIHRoZSBjb2RlIHBvaW50Cit0byBtYXRjaC4gQnkgZGVmYXVsdCwgYXMgaW4gUGVybCwgYSBoZXhhZGVjaW1hbCBudW1iZXIgaXMgYWx3YXlzIGV4cGVjdGVkIGFmdGVyCitceCwgYnV0IGl0IG1heSBoYXZlIHplcm8sIG9uZSwgb3IgdHdvIGRpZ2l0cyAoc28sIGZvciBleGFtcGxlLCBceHogbWF0Y2hlcyBhCitiaW5hcnkgemVybyBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgeikuCis8cHJlPgorICBQQ1JFMl9BTFRfQ0lSQ1VNRkxFWAorPC9wcmU+CitJbiBtdWx0aWxpbmUgbW9kZSAod2hlbiBQQ1JFMl9NVUxUSUxJTkUgaXMgc2V0KSwgdGhlIGNpcmN1bWZsZXggbWV0YWNoYXJhY3RlcgorbWF0Y2hlcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3QgKHVubGVzcyBQQ1JFMl9OT1RCT0wgaXMgc2V0KSwgYW5kIGFsc28KK2FmdGVyIGFueSBpbnRlcm5hbCBuZXdsaW5lLiBIb3dldmVyLCBpdCBkb2VzIG5vdCBtYXRjaCBhZnRlciBhIG5ld2xpbmUgYXQgdGhlCitlbmQgb2YgdGhlIHN1YmplY3QsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUGVybC4gSWYgeW91IHdhbnQgYSBtdWx0aWxpbmUKK2NpcmN1bWZsZXggYWxzbyB0byBtYXRjaCBhZnRlciBhIHRlcm1pbmF0aW5nIG5ld2xpbmUsIHlvdSBtdXN0IHNldAorUENSRTJfQUxUX0NJUkNVTUZMRVguCis8cHJlPgorICBQQ1JFMl9BTFRfVkVSQk5BTUVTCis8L3ByZT4KK0J5IGRlZmF1bHQsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUGVybCwgdGhlIG5hbWUgaW4gYW55IHZlcmIgc2VxdWVuY2Ugc3VjaCBhcworKCpNQVJLOk5BTUUpIGlzIGFueSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgZG9lcyBub3QgaW5jbHVkZSBhIGNsb3NpbmcKK3BhcmVudGhlc2lzLiBUaGUgbmFtZSBpcyBub3QgcHJvY2Vzc2VkIGluIGFueSB3YXksIGFuZCBpdCBpcyBub3QgcG9zc2libGUgdG8KK2luY2x1ZGUgYSBjbG9zaW5nIHBhcmVudGhlc2lzIGluIHRoZSBuYW1lLiBIb3dldmVyLCBpZiB0aGUgUENSRTJfQUxUX1ZFUkJOQU1FUworb3B0aW9uIGlzIHNldCwgbm9ybWFsIGJhY2tzbGFzaCBwcm9jZXNzaW5nIGlzIGFwcGxpZWQgdG8gdmVyYiBuYW1lcyBhbmQgb25seSBhbgordW5lc2NhcGVkIGNsb3NpbmcgcGFyZW50aGVzaXMgdGVybWluYXRlcyB0aGUgbmFtZS4gQSBjbG9zaW5nIHBhcmVudGhlc2lzIGNhbiBiZQoraW5jbHVkZWQgaW4gYSBuYW1lIGVpdGhlciBhcyBcKSBvciBiZXR3ZWVuIFxRIGFuZCBcRS4gSWYgdGhlIFBDUkUyX0VYVEVOREVECitvcHRpb24gaXMgc2V0LCB1bmVzY2FwZWQgd2hpdGVzcGFjZSBpbiB2ZXJiIG5hbWVzIGlzIHNraXBwZWQgYW5kICMtY29tbWVudHMgYXJlCityZWNvZ25pemVkLCBleGFjdGx5IGFzIGluIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuLgorPHByZT4KKyAgUENSRTJfQVVUT19DQUxMT1VUCis8L3ByZT4KK0lmIHRoaXMgYml0IGlzIHNldCwgPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBhdXRvbWF0aWNhbGx5IGluc2VydHMgY2FsbG91dCBpdGVtcywKK2FsbCB3aXRoIG51bWJlciAyNTUsIGJlZm9yZSBlYWNoIHBhdHRlcm4gaXRlbS4gRm9yIGRpc2N1c3Npb24gb2YgdGhlIGNhbGxvdXQKK2ZhY2lsaXR5LCBzZWUgdGhlCis8YSBocmVmPSJwY3JlMmNhbGxvdXQuaHRtbCI+PGI+cGNyZTJjYWxsb3V0PC9iPjwvYT4KK2RvY3VtZW50YXRpb24uCis8cHJlPgorICBQQ1JFMl9DQVNFTEVTUworPC9wcmU+CitJZiB0aGlzIGJpdCBpcyBzZXQsIGxldHRlcnMgaW4gdGhlIHBhdHRlcm4gbWF0Y2ggYm90aCB1cHBlciBhbmQgbG93ZXIgY2FzZQorbGV0dGVycyBpbiB0aGUgc3ViamVjdC4gSXQgaXMgZXF1aXZhbGVudCB0byBQZXJsJ3MgL2kgb3B0aW9uLCBhbmQgaXQgY2FuIGJlCitjaGFuZ2VkIHdpdGhpbiBhIHBhdHRlcm4gYnkgYSAoP2kpIG9wdGlvbiBzZXR0aW5nLgorPHByZT4KKyAgUENSRTJfRE9MTEFSX0VORE9OTFkKKzwvcHJlPgorSWYgdGhpcyBiaXQgaXMgc2V0LCBhIGRvbGxhciBtZXRhY2hhcmFjdGVyIGluIHRoZSBwYXR0ZXJuIG1hdGNoZXMgb25seSBhdCB0aGUKK2VuZCBvZiB0aGUgc3ViamVjdCBzdHJpbmcuIFdpdGhvdXQgdGhpcyBvcHRpb24sIGEgZG9sbGFyIGFsc28gbWF0Y2hlcworaW1tZWRpYXRlbHkgYmVmb3JlIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKGJ1dCBub3QgYmVmb3JlIGFueSBvdGhlcgorbmV3bGluZXMpLiBUaGUgUENSRTJfRE9MTEFSX0VORE9OTFkgb3B0aW9uIGlzIGlnbm9yZWQgaWYgUENSRTJfTVVMVElMSU5FIGlzCitzZXQuIFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgdG8gdGhpcyBvcHRpb24gaW4gUGVybCwgYW5kIG5vIHdheSB0byBzZXQgaXQgd2l0aGluCithIHBhdHRlcm4uCis8cHJlPgorICBQQ1JFMl9ET1RBTEwKKzwvcHJlPgorSWYgdGhpcyBiaXQgaXMgc2V0LCBhIGRvdCBtZXRhY2hhcmFjdGVyIGluIHRoZSBwYXR0ZXJuIG1hdGNoZXMgYW55IGNoYXJhY3RlciwKK2luY2x1ZGluZyBvbmUgdGhhdCBpbmRpY2F0ZXMgYSBuZXdsaW5lLiBIb3dldmVyLCBpdCBvbmx5IGV2ZXIgbWF0Y2hlcyBvbmUKK2NoYXJhY3RlciwgZXZlbiBpZiBuZXdsaW5lcyBhcmUgY29kZWQgYXMgQ1JMRi4gV2l0aG91dCB0aGlzIG9wdGlvbiwgYSBkb3QgZG9lcworbm90IG1hdGNoIHdoZW4gdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN1YmplY3QgaXMgYXQgYSBuZXdsaW5lLiBUaGlzIG9wdGlvbgoraXMgZXF1aXZhbGVudCB0byBQZXJsJ3MgL3Mgb3B0aW9uLCBhbmQgaXQgY2FuIGJlIGNoYW5nZWQgd2l0aGluIGEgcGF0dGVybiBieSBhCisoP3MpIG9wdGlvbiBzZXR0aW5nLiBBIG5lZ2F0aXZlIGNsYXNzIHN1Y2ggYXMgW15hXSBhbHdheXMgbWF0Y2hlcyBuZXdsaW5lCitjaGFyYWN0ZXJzLCBpbmRlcGVuZGVudCBvZiB0aGUgc2V0dGluZyBvZiB0aGlzIG9wdGlvbi4KKzxwcmU+CisgIFBDUkUyX0RVUE5BTUVTCis8L3ByZT4KK0lmIHRoaXMgYml0IGlzIHNldCwgbmFtZXMgdXNlZCB0byBpZGVudGlmeSBjYXB0dXJpbmcgc3VicGF0dGVybnMgbmVlZCBub3QgYmUKK3VuaXF1ZS4gVGhpcyBjYW4gYmUgaGVscGZ1bCBmb3IgY2VydGFpbiB0eXBlcyBvZiBwYXR0ZXJuIHdoZW4gaXQgaXMga25vd24gdGhhdAorb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIG5hbWVkIHN1YnBhdHRlcm4gY2FuIGV2ZXIgYmUgbWF0Y2hlZC4gVGhlcmUgYXJlIG1vcmUKK2RldGFpbHMgb2YgbmFtZWQgc3VicGF0dGVybnMgYmVsb3c7IHNlZSBhbHNvIHRoZQorPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwiPjxiPnBjcmUycGF0dGVybjwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPHByZT4KKyAgUENSRTJfRVhURU5ERUQKKzwvcHJlPgorSWYgdGhpcyBiaXQgaXMgc2V0LCBtb3N0IHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4gYXJlIHRvdGFsbHkKK2lnbm9yZWQgZXhjZXB0IHdoZW4gZXNjYXBlZCBvciBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MuIEhvd2V2ZXIsIHdoaXRlIHNwYWNlCitpcyBub3QgYWxsb3dlZCB3aXRoaW4gc2VxdWVuY2VzIHN1Y2ggYXMgKD8mIzYyOyB0aGF0IGludHJvZHVjZSB2YXJpb3VzCitwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm5zLCBub3Igd2l0aGluIG51bWVyaWNhbCBxdWFudGlmaWVycyBzdWNoIGFzIHsxLDN9LgorSWdub3JhYmxlIHdoaXRlIHNwYWNlIGlzIHBlcm1pdHRlZCBiZXR3ZWVuIGFuIGl0ZW0gYW5kIGEgZm9sbG93aW5nIHF1YW50aWZpZXIKK2FuZCBiZXR3ZWVuIGEgcXVhbnRpZmllciBhbmQgYSBmb2xsb3dpbmcgKyB0aGF0IGluZGljYXRlcyBwb3NzZXNzaXZlbmVzcy4KKzwvUD4KKzxQPgorUENSRTJfRVhURU5ERUQgYWxzbyBjYXVzZXMgY2hhcmFjdGVycyBiZXR3ZWVuIGFuIHVuZXNjYXBlZCAjIG91dHNpZGUgYQorY2hhcmFjdGVyIGNsYXNzIGFuZCB0aGUgbmV4dCBuZXdsaW5lLCBpbmNsdXNpdmUsIHRvIGJlIGlnbm9yZWQsIHdoaWNoIG1ha2VzIGl0Citwb3NzaWJsZSB0byBpbmNsdWRlIGNvbW1lbnRzIGluc2lkZSBjb21wbGljYXRlZCBwYXR0ZXJucy4gTm90ZSB0aGF0IHRoZSBlbmQgb2YKK3RoaXMgdHlwZSBvZiBjb21tZW50IGlzIGEgbGl0ZXJhbCBuZXdsaW5lIHNlcXVlbmNlIGluIHRoZSBwYXR0ZXJuOyBlc2NhcGUKK3NlcXVlbmNlcyB0aGF0IGhhcHBlbiB0byByZXByZXNlbnQgYSBuZXdsaW5lIGRvIG5vdCBjb3VudC4gUENSRTJfRVhURU5ERUQgaXMKK2VxdWl2YWxlbnQgdG8gUGVybCdzIC94IG9wdGlvbiwgYW5kIGl0IGNhbiBiZSBjaGFuZ2VkIHdpdGhpbiBhIHBhdHRlcm4gYnkgYQorKD94KSBvcHRpb24gc2V0dGluZy4KKzwvUD4KKzxQPgorV2hpY2ggY2hhcmFjdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgbmV3bGluZXMgY2FuIGJlIHNwZWNpZmllZCBieSBhIHNldHRpbmcgaW4KK3RoZSBjb21waWxlIGNvbnRleHQgdGhhdCBpcyBwYXNzZWQgdG8gPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBvciBieSBhIHNwZWNpYWwKK3NlcXVlbmNlIGF0IHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiwgYXMgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCis8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCNuZXdsaW5lcyI+Ik5ld2xpbmUgY29udmVudGlvbnMiPC9hPgoraW4gdGhlIDxiPnBjcmUycGF0dGVybjwvYj4gZG9jdW1lbnRhdGlvbi4gQSBkZWZhdWx0IGlzIGRlZmluZWQgd2hlbiBQQ1JFMiBpcworYnVpbHQuCis8cHJlPgorICBQQ1JFMl9GSVJTVExJTkUKKzwvcHJlPgorSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBhbiB1bmFuY2hvcmVkIHBhdHRlcm4gaXMgcmVxdWlyZWQgdG8gbWF0Y2ggYmVmb3JlIG9yIGF0Cit0aGUgZmlyc3QgbmV3bGluZSBpbiB0aGUgc3ViamVjdCBzdHJpbmcsIHRob3VnaCB0aGUgbWF0Y2hlZCB0ZXh0IG1heSBjb250aW51ZQorb3ZlciB0aGUgbmV3bGluZS4gU2VlIGFsc28gUENSRTJfVVNFX09GRlNFVF9MSU1JVCwgd2hpY2ggcHJvdmlkZXMgYSBtb3JlCitnZW5lcmFsIGxpbWl0aW5nIGZhY2lsaXR5LiBJZiBQQ1JFMl9GSVJTVExJTkUgaXMgc2V0IHdpdGggYW4gb2Zmc2V0IGxpbWl0LCBhCittYXRjaCBtdXN0IG9jY3VyIGluIHRoZSBmaXJzdCBsaW5lIGFuZCBhbHNvIHdpdGhpbiB0aGUgb2Zmc2V0IGxpbWl0LiBJbiBvdGhlcgord29yZHMsIHdoaWNoZXZlciBsaW1pdCBjb21lcyBmaXJzdCBpcyB1c2VkLgorPHByZT4KKyAgUENSRTJfTUFUQ0hfVU5TRVRfQkFDS1JFRgorPC9wcmU+CitJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGEgYmFjayByZWZlcmVuY2UgdG8gYW4gdW5zZXQgc3VicGF0dGVybiBncm91cCBtYXRjaGVzIGFuCitlbXB0eSBzdHJpbmcgKGJ5IGRlZmF1bHQgdGhpcyBjYXVzZXMgdGhlIGN1cnJlbnQgbWF0Y2hpbmcgYWx0ZXJuYXRpdmUgdG8gZmFpbCkuCitBIHBhdHRlcm4gc3VjaCBhcyAoXDEpKGEpIHN1Y2NlZWRzIHdoZW4gdGhpcyBvcHRpb24gaXMgc2V0IChhc3N1bWluZyBpdCBjYW4KK2ZpbmQgYW4gImEiIGluIHRoZSBzdWJqZWN0KSwgd2hlcmVhcyBpdCBmYWlscyBieSBkZWZhdWx0LCBmb3IgUGVybAorY29tcGF0aWJpbGl0eS4gU2V0dGluZyB0aGlzIG9wdGlvbiBtYWtlcyBQQ1JFMiBiZWhhdmUgbW9yZSBsaWtlIEVDTUFzY3JpcHQgKGFrYQorSmF2YVNjcmlwdCkuCis8cHJlPgorICBQQ1JFMl9NVUxUSUxJTkUKKzwvcHJlPgorQnkgZGVmYXVsdCwgZm9yIHRoZSBwdXJwb3NlcyBvZiBtYXRjaGluZyAic3RhcnQgb2YgbGluZSIgYW5kICJlbmQgb2YgbGluZSIsCitQQ1JFMiB0cmVhdHMgdGhlIHN1YmplY3Qgc3RyaW5nIGFzIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgbGluZSBvZiBjaGFyYWN0ZXJzLAorZXZlbiBpZiBpdCBhY3R1YWxseSBjb250YWlucyBuZXdsaW5lcy4gVGhlICJzdGFydCBvZiBsaW5lIiBtZXRhY2hhcmFjdGVyICheKQorbWF0Y2hlcyBvbmx5IGF0IHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nLCBhbmQgdGhlICJlbmQgb2YgbGluZSIgbWV0YWNoYXJhY3RlcgorKCQpIG1hdGNoZXMgb25seSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIG9yIGJlZm9yZSBhIHRlcm1pbmF0aW5nIG5ld2xpbmUKKyhleGNlcHQgd2hlbiBQQ1JFMl9ET0xMQVJfRU5ET05MWSBpcyBzZXQpLiBOb3RlLCBob3dldmVyLCB0aGF0IHVubGVzcworUENSRTJfRE9UQUxMIGlzIHNldCwgdGhlICJhbnkgY2hhcmFjdGVyIiBtZXRhY2hhcmFjdGVyICguKSBkb2VzIG5vdCBtYXRjaCBhdCBhCituZXdsaW5lLiBUaGlzIGJlaGF2aW91ciAoZm9yIF4sICQsIGFuZCBkb3QpIGlzIHRoZSBzYW1lIGFzIFBlcmwuCis8L1A+Cis8UD4KK1doZW4gUENSRTJfTVVMVElMSU5FIGl0IGlzIHNldCwgdGhlICJzdGFydCBvZiBsaW5lIiBhbmQgImVuZCBvZiBsaW5lIgorY29uc3RydWN0cyBtYXRjaCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgb3IgaW1tZWRpYXRlbHkgYmVmb3JlIGludGVybmFsIG5ld2xpbmVzCitpbiB0aGUgc3ViamVjdCBzdHJpbmcsIHJlc3BlY3RpdmVseSwgYXMgd2VsbCBhcyBhdCB0aGUgdmVyeSBzdGFydCBhbmQgZW5kLiBUaGlzCitpcyBlcXVpdmFsZW50IHRvIFBlcmwncyAvbSBvcHRpb24sIGFuZCBpdCBjYW4gYmUgY2hhbmdlZCB3aXRoaW4gYSBwYXR0ZXJuIGJ5IGEKKyg/bSkgb3B0aW9uIHNldHRpbmcuIE5vdGUgdGhhdCB0aGUgInN0YXJ0IG9mIGxpbmUiIG1ldGFjaGFyYWN0ZXIgZG9lcyBub3QgbWF0Y2gKK2FmdGVyIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwuCitIb3dldmVyLCB5b3UgY2FuIGNoYW5nZSB0aGlzIGJ5IHNldHRpbmcgdGhlIFBDUkUyX0FMVF9DSVJDVU1GTEVYIG9wdGlvbi4gSWYKK3RoZXJlIGFyZSBubyBuZXdsaW5lcyBpbiBhIHN1YmplY3Qgc3RyaW5nLCBvciBubyBvY2N1cnJlbmNlcyBvZiBeIG9yICQgaW4gYQorcGF0dGVybiwgc2V0dGluZyBQQ1JFMl9NVUxUSUxJTkUgaGFzIG5vIGVmZmVjdC4KKzxwcmU+CisgIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DCis8L3ByZT4KK1RoaXMgb3B0aW9uIGxvY2tzIG91dCB0aGUgdXNlIG9mIFxDIGluIHRoZSBwYXR0ZXJuIHRoYXQgaXMgYmVpbmcgY29tcGlsZWQuCitUaGlzIGVzY2FwZSBjYW4gY2F1c2UgdW5wcmVkaWN0YWJsZSBiZWhhdmlvdXIgaW4gVVRGLTggb3IgVVRGLTE2IG1vZGVzLCBiZWNhdXNlCitpdCBtYXkgbGVhdmUgdGhlIGN1cnJlbnQgbWF0Y2hpbmcgcG9pbnQgaW4gdGhlIG1pZGRsZSBvZiBhIG11bHRpLWNvZGUtdW5pdAorY2hhcmFjdGVyLiBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIGluIGFwcGxpY2F0aW9ucyB0aGF0IHByb2Nlc3MgcGF0dGVybnMgZnJvbQorZXh0ZXJuYWwgc291cmNlcy4gTm90ZSB0aGF0IHRoZXJlIGlzIGFsc28gYSBidWlsZC10aW1lIG9wdGlvbiB0aGF0IHBlcm1hbmVudGx5Citsb2NrcyBvdXQgdGhlIHVzZSBvZiBcQy4KKzxwcmU+CisgIFBDUkUyX05FVkVSX1VDUAorPC9wcmU+CitUaGlzIG9wdGlvbiBsb2NrcyBvdXQgdGhlIHVzZSBvZiBVbmljb2RlIHByb3BlcnRpZXMgZm9yIGhhbmRsaW5nIFxCLCBcYiwgXEQsCitcZCwgXFMsIFxzLCBcVywgXHcsIGFuZCBzb21lIG9mIHRoZSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3NlcywgYXMgZGVzY3JpYmVkCitmb3IgdGhlIFBDUkUyX1VDUCBvcHRpb24gYmVsb3cuIEluIHBhcnRpY3VsYXIsIGl0IHByZXZlbnRzIHRoZSBjcmVhdG9yIG9mIHRoZQorcGF0dGVybiBmcm9tIGVuYWJsaW5nIHRoaXMgZmFjaWxpdHkgYnkgc3RhcnRpbmcgdGhlIHBhdHRlcm4gd2l0aCAoKlVDUCkuIFRoaXMKK29wdGlvbiBtYXkgYmUgdXNlZnVsIGluIGFwcGxpY2F0aW9ucyB0aGF0IHByb2Nlc3MgcGF0dGVybnMgZnJvbSBleHRlcm5hbAorc291cmNlcy4gVGhlIG9wdGlvbiBjb21iaW5hdGlvbiBQQ1JFX1VDUCBhbmQgUENSRV9ORVZFUl9VQ1AgY2F1c2VzIGFuIGVycm9yLgorPHByZT4KKyAgUENSRTJfTkVWRVJfVVRGCis8L3ByZT4KK1RoaXMgb3B0aW9uIGxvY2tzIG91dCBpbnRlcnByZXRhdGlvbiBvZiB0aGUgcGF0dGVybiBhcyBVVEYtOCwgVVRGLTE2LCBvcgorVVRGLTMyLCBkZXBlbmRpbmcgb24gd2hpY2ggbGlicmFyeSBpcyBpbiB1c2UuIEluIHBhcnRpY3VsYXIsIGl0IHByZXZlbnRzIHRoZQorY3JlYXRvciBvZiB0aGUgcGF0dGVybiBmcm9tIHN3aXRjaGluZyB0byBVVEYgaW50ZXJwcmV0YXRpb24gYnkgc3RhcnRpbmcgdGhlCitwYXR0ZXJuIHdpdGggKCpVVEYpLiBUaGlzIG9wdGlvbiBtYXkgYmUgdXNlZnVsIGluIGFwcGxpY2F0aW9ucyB0aGF0IHByb2Nlc3MKK3BhdHRlcm5zIGZyb20gZXh0ZXJuYWwgc291cmNlcy4gVGhlIGNvbWJpbmF0aW9uIG9mIFBDUkUyX1VURiBhbmQKK1BDUkUyX05FVkVSX1VURiBjYXVzZXMgYW4gZXJyb3IuCis8cHJlPgorICBQQ1JFMl9OT19BVVRPX0NBUFRVUkUKKzwvcHJlPgorSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBpdCBkaXNhYmxlcyB0aGUgdXNlIG9mIG51bWJlcmVkIGNhcHR1cmluZyBwYXJlbnRoZXNlcyBpbgordGhlIHBhdHRlcm4uIEFueSBvcGVuaW5nIHBhcmVudGhlc2lzIHRoYXQgaXMgbm90IGZvbGxvd2VkIGJ5ID8gYmVoYXZlcyBhcyBpZiBpdAord2VyZSBmb2xsb3dlZCBieSA/OiBidXQgbmFtZWQgcGFyZW50aGVzZXMgY2FuIHN0aWxsIGJlIHVzZWQgZm9yIGNhcHR1cmluZyAoYW5kCit0aGV5IGFjcXVpcmUgbnVtYmVycyBpbiB0aGUgdXN1YWwgd2F5KS4gVGhlcmUgaXMgbm8gZXF1aXZhbGVudCBvZiB0aGlzIG9wdGlvbgoraW4gUGVybC4KKzxwcmU+CisgIFBDUkUyX05PX0FVVE9fUE9TU0VTUworPC9wcmU+CitJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGl0IGRpc2FibGVzICJhdXRvLXBvc3Nlc3NpZmljYXRpb24iLCB3aGljaCBpcyBhbgorb3B0aW1pemF0aW9uIHRoYXQsIGZvciBleGFtcGxlLCB0dXJucyBhK2IgaW50byBhKytiIGluIG9yZGVyIHRvIGF2b2lkCitiYWNrdHJhY2tzIGludG8gYSsgdGhhdCBjYW4gbmV2ZXIgYmUgc3VjY2Vzc2Z1bC4gSG93ZXZlciwgaWYgY2FsbG91dHMgYXJlIGluCit1c2UsIGF1dG8tcG9zc2Vzc2lmaWNhdGlvbiBtZWFucyB0aGF0IHNvbWUgY2FsbG91dHMgYXJlIG5ldmVyIHRha2VuLiBZb3UgY2FuCitzZXQgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyB0byBkbyBhIGZ1bGwgdW5vcHRpbWl6ZWQKK3NlYXJjaCBhbmQgcnVuIGFsbCB0aGUgY2FsbG91dHMsIGJ1dCBpdCBpcyBtYWlubHkgcHJvdmlkZWQgZm9yIHRlc3RpbmcKK3B1cnBvc2VzLgorPHByZT4KKyAgUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IKKzwvcHJlPgorSWYgdGhpcyBvcHRpb24gaXMgc2V0LCBpdCBkaXNhYmxlcyBhbiBvcHRpbWl6YXRpb24gdGhhdCBpcyBhcHBsaWVkIHdoZW4gLiogaXMKK3RoZSBmaXJzdCBzaWduaWZpY2FudCBpdGVtIGluIGEgdG9wLWxldmVsIGJyYW5jaCBvZiBhIHBhdHRlcm4sIGFuZCBhbGwgdGhlCitvdGhlciBicmFuY2hlcyBhbHNvIHN0YXJ0IHdpdGggLiogb3Igd2l0aCBcQSBvciBcRyBvciBeLiBUaGUgb3B0aW1pemF0aW9uIGlzCithdXRvbWF0aWNhbGx5IGRpc2FibGVkIGZvciAuKiBpZiBpdCBpcyBpbnNpZGUgYW4gYXRvbWljIGdyb3VwIG9yIGEgY2FwdHVyaW5nCitncm91cCB0aGF0IGlzIHRoZSBzdWJqZWN0IG9mIGEgYmFjayByZWZlcmVuY2UsIG9yIGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zCisoKlBSVU5FKSBvciAoKlNLSVApLiBXaGVuIHRoZSBvcHRpbWl6YXRpb24gaXMgbm90IGRpc2FibGVkLCBzdWNoIGEgcGF0dGVybiBpcworYXV0b21hdGljYWxseSBhbmNob3JlZCBpZiBQQ1JFMl9ET1RBTEwgaXMgc2V0IGZvciBhbGwgdGhlIC4qIGl0ZW1zIGFuZAorUENSRTJfTVVMVElMSU5FIGlzIG5vdCBzZXQgZm9yIGFueSBeIGl0ZW1zLiBPdGhlcndpc2UsIHRoZSBmYWN0IHRoYXQgYW55IG1hdGNoCittdXN0IHN0YXJ0IGVpdGhlciBhdCB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3Qgb3IgZm9sbG93aW5nIGEgbmV3bGluZSBpcworcmVtZW1iZXJlZC4gTGlrZSBvdGhlciBvcHRpbWl6YXRpb25zLCB0aGlzIGNhbiBjYXVzZSBjYWxsb3V0cyB0byBiZSBza2lwcGVkLgorPHByZT4KKyAgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUKKzwvcHJlPgorVGhpcyBpcyBhbiBvcHRpb24gd2hvc2UgbWFpbiBlZmZlY3QgaXMgYXQgbWF0Y2hpbmcgdGltZS4gSXQgZG9lcyBub3QgY2hhbmdlCit3aGF0IDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gZ2VuZXJhdGVzLCBidXQgaXQgZG9lcyBhZmZlY3QgdGhlIG91dHB1dCBvZiB0aGUgSklUCitjb21waWxlci4KKzwvUD4KKzxQPgorVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG9wdGltaXphdGlvbnMgdGhhdCBtYXkgb2NjdXIgYXQgdGhlIHN0YXJ0IG9mIGEgbWF0Y2gsIGluCitvcmRlciB0byBzcGVlZCB1cCB0aGUgcHJvY2Vzcy4gRm9yIGV4YW1wbGUsIGlmIGl0IGlzIGtub3duIHRoYXQgYW4gdW5hbmNob3JlZAorbWF0Y2ggbXVzdCBzdGFydCB3aXRoIGEgc3BlY2lmaWMgY2hhcmFjdGVyLCB0aGUgbWF0Y2hpbmcgY29kZSBzZWFyY2hlcyB0aGUKK3N1YmplY3QgZm9yIHRoYXQgY2hhcmFjdGVyLCBhbmQgZmFpbHMgaW1tZWRpYXRlbHkgaWYgaXQgY2Fubm90IGZpbmQgaXQsIHdpdGhvdXQKK2FjdHVhbGx5IHJ1bm5pbmcgdGhlIG1haW4gbWF0Y2hpbmcgZnVuY3Rpb24uIFRoaXMgbWVhbnMgdGhhdCBhIHNwZWNpYWwgaXRlbQorc3VjaCBhcyAoKkNPTU1JVCkgYXQgdGhlIHN0YXJ0IG9mIGEgcGF0dGVybiBpcyBub3QgY29uc2lkZXJlZCB1bnRpbCBhZnRlciBhCitzdWl0YWJsZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIG1hdGNoIGhhcyBiZWVuIGZvdW5kLiBBbHNvLCB3aGVuIGNhbGxvdXRzIG9yCisoKk1BUkspIGl0ZW1zIGFyZSBpbiB1c2UsIHRoZXNlICJzdGFydC11cCIgb3B0aW1pemF0aW9ucyBjYW4gY2F1c2UgdGhlbSB0byBiZQorc2tpcHBlZCBpZiB0aGUgcGF0dGVybiBpcyBuZXZlciBhY3R1YWxseSB1c2VkLiBUaGUgc3RhcnQtdXAgb3B0aW1pemF0aW9ucyBhcmUKK2luIGVmZmVjdCBhIHByZS1zY2FuIG9mIHRoZSBzdWJqZWN0IHRoYXQgdGFrZXMgcGxhY2UgYmVmb3JlIHRoZSBwYXR0ZXJuIGlzIHJ1bi4KKzwvUD4KKzxQPgorVGhlIFBDUkUyX05PX1NUQVJUX09QVElNSVpFIG9wdGlvbiBkaXNhYmxlcyB0aGUgc3RhcnQtdXAgb3B0aW1pemF0aW9ucywKK3Bvc3NpYmx5IGNhdXNpbmcgcGVyZm9ybWFuY2UgdG8gc3VmZmVyLCBidXQgZW5zdXJpbmcgdGhhdCBpbiBjYXNlcyB3aGVyZSB0aGUKK3Jlc3VsdCBpcyAibm8gbWF0Y2giLCB0aGUgY2FsbG91dHMgZG8gb2NjdXIsIGFuZCB0aGF0IGl0ZW1zIHN1Y2ggYXMgKCpDT01NSVQpCithbmQgKCpNQVJLKSBhcmUgY29uc2lkZXJlZCBhdCBldmVyeSBwb3NzaWJsZSBzdGFydGluZyBwb3NpdGlvbiBpbiB0aGUgc3ViamVjdAorc3RyaW5nLgorPC9QPgorPFA+CitTZXR0aW5nIFBDUkUyX05PX1NUQVJUX09QVElNSVpFIG1heSBjaGFuZ2UgdGhlIG91dGNvbWUgb2YgYSBtYXRjaGluZyBvcGVyYXRpb24uCitDb25zaWRlciB0aGUgcGF0dGVybgorPHByZT4KKyAgKCpDT01NSVQpQUJDCis8L3ByZT4KK1doZW4gdGhpcyBpcyBjb21waWxlZCwgUENSRTIgcmVjb3JkcyB0aGUgZmFjdCB0aGF0IGEgbWF0Y2ggbXVzdCBzdGFydCB3aXRoIHRoZQorY2hhcmFjdGVyICJBIi4gU3VwcG9zZSB0aGUgc3ViamVjdCBzdHJpbmcgaXMgIkRFRkFCQyIuIFRoZSBzdGFydC11cAorb3B0aW1pemF0aW9uIHNjYW5zIGFsb25nIHRoZSBzdWJqZWN0LCBmaW5kcyAiQSIgYW5kIHJ1bnMgdGhlIGZpcnN0IG1hdGNoCithdHRlbXB0IGZyb20gdGhlcmUuIFRoZSAoKkNPTU1JVCkgaXRlbSBtZWFucyB0aGF0IHRoZSBwYXR0ZXJuIG11c3QgbWF0Y2ggdGhlCitjdXJyZW50IHN0YXJ0aW5nIHBvc2l0aW9uLCB3aGljaCBpbiB0aGlzIGNhc2UsIGl0IGRvZXMuIEhvd2V2ZXIsIGlmIHRoZSBzYW1lCittYXRjaCBpcyBydW4gd2l0aCBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSBzZXQsIHRoZSBpbml0aWFsIHNjYW4gYWxvbmcgdGhlCitzdWJqZWN0IHN0cmluZyBkb2VzIG5vdCBoYXBwZW4uIFRoZSBmaXJzdCBtYXRjaCBhdHRlbXB0IGlzIHJ1biBzdGFydGluZyBmcm9tCisiRCIgYW5kIHdoZW4gdGhpcyBmYWlscywgKCpDT01NSVQpIHByZXZlbnRzIGFueSBmdXJ0aGVyIG1hdGNoZXMgYmVpbmcgdHJpZWQsIHNvCit0aGUgb3ZlcmFsbCByZXN1bHQgaXMgIm5vIG1hdGNoIi4gVGhlcmUgYXJlIGFsc28gb3RoZXIgc3RhcnQtdXAgb3B0aW1pemF0aW9ucy4KK0ZvciBleGFtcGxlLCBhIG1pbmltdW0gbGVuZ3RoIGZvciB0aGUgc3ViamVjdCBtYXkgYmUgcmVjb3JkZWQuIENvbnNpZGVyIHRoZQorcGF0dGVybgorPHByZT4KKyAgKCpNQVJLOkEpKFh8WSkKKzwvcHJlPgorVGhlIG1pbmltdW0gbGVuZ3RoIGZvciBhIG1hdGNoIGlzIG9uZSBjaGFyYWN0ZXIuIElmIHRoZSBzdWJqZWN0IGlzICJBQkMiLCB0aGVyZQord2lsbCBiZSBhdHRlbXB0cyB0byBtYXRjaCAiQUJDIiwgIkJDIiwgYW5kICJDIi4gQW4gYXR0ZW1wdCB0byBtYXRjaCBhbiBlbXB0eQorc3RyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3QgZG9lcyBub3QgdGFrZSBwbGFjZSwgYmVjYXVzZSBQQ1JFMiBrbm93cyB0aGF0Cit0aGUgc3ViamVjdCBpcyBub3cgdG9vIHNob3J0LCBhbmQgc28gdGhlICgqTUFSSykgaXMgbmV2ZXIgZW5jb3VudGVyZWQuIEluIHRoaXMKK2Nhc2UsIHRoZSBvcHRpbWl6YXRpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBvdmVyYWxsIG1hdGNoIHJlc3VsdCwgd2hpY2ggaXMgc3RpbGwKKyJubyBtYXRjaCIsIGJ1dCBpdCBkb2VzIGFmZmVjdCB0aGUgYXV4aWxpYXJ5IGluZm9ybWF0aW9uIHRoYXQgaXMgcmV0dXJuZWQuCis8cHJlPgorICBQQ1JFMl9OT19VVEZfQ0hFQ0sKKzwvcHJlPgorV2hlbiBQQ1JFMl9VVEYgaXMgc2V0LCB0aGUgdmFsaWRpdHkgb2YgdGhlIHBhdHRlcm4gYXMgYSBVVEYgc3RyaW5nIGlzCithdXRvbWF0aWNhbGx5IGNoZWNrZWQuIFRoZXJlIGFyZSBkaXNjdXNzaW9ucyBhYm91dCB0aGUgdmFsaWRpdHkgb2YKKzxhIGhyZWY9InBjcmUydW5pY29kZS5odG1sI3V0ZjhzdHJpbmdzIj5VVEYtOCBzdHJpbmdzLDwvYT4KKzxhIGhyZWY9InBjcmUydW5pY29kZS5odG1sI3V0ZjE2c3RyaW5ncyI+VVRGLTE2IHN0cmluZ3MsPC9hPgorYW5kCis8YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCN1dGYzMnN0cmluZ3MiPlVURi0zMiBzdHJpbmdzPC9hPgoraW4gdGhlCis8YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCI+PGI+cGNyZTJ1bmljb2RlPC9iPjwvYT4KK2RvY3VtZW50LgorSWYgYW4gaW52YWxpZCBVVEYgc2VxdWVuY2UgaXMgZm91bmQsIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gcmV0dXJucyBhIG5lZ2F0aXZlCitlcnJvciBjb2RlLgorPC9QPgorPFA+CitJZiB5b3Uga25vdyB0aGF0IHlvdXIgcGF0dGVybiBpcyB2YWxpZCwgYW5kIHlvdSB3YW50IHRvIHNraXAgdGhpcyBjaGVjayBmb3IKK3BlcmZvcm1hbmNlIHJlYXNvbnMsIHlvdSBjYW4gc2V0IHRoZSBQQ1JFMl9OT19VVEZfQ0hFQ0sgb3B0aW9uLiBXaGVuIGl0IGlzIHNldCwKK3RoZSBlZmZlY3Qgb2YgcGFzc2luZyBhbiBpbnZhbGlkIFVURiBzdHJpbmcgYXMgYSBwYXR0ZXJuIGlzIHVuZGVmaW5lZC4gSXQgbWF5CitjYXVzZSB5b3VyIHByb2dyYW0gdG8gY3Jhc2ggb3IgbG9vcC4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHBhc3NlZAordG8gPGI+cGNyZTJfbWF0Y2goKTwvYj4gYW5kIDxiPnBjcmVfZGZhX21hdGNoKCk8L2I+LCB0byBzdXBwcmVzcyB2YWxpZGl0eQorY2hlY2tpbmcgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLgorPHByZT4KKyAgUENSRTJfVUNQCis8L3ByZT4KK1RoaXMgb3B0aW9uIGNoYW5nZXMgdGhlIHdheSBQQ1JFMiBwcm9jZXNzZXMgXEIsIFxiLCBcRCwgXGQsIFxTLCBccywgXFcsCitcdywgYW5kIHNvbWUgb2YgdGhlIFBPU0lYIGNoYXJhY3RlciBjbGFzc2VzLiBCeSBkZWZhdWx0LCBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMKK2FyZSByZWNvZ25pemVkLCBidXQgaWYgUENSRTJfVUNQIGlzIHNldCwgVW5pY29kZSBwcm9wZXJ0aWVzIGFyZSB1c2VkIGluc3RlYWQgdG8KK2NsYXNzaWZ5IGNoYXJhY3RlcnMuIE1vcmUgZGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlIHNlY3Rpb24gb24KKzxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sI2dlbmVyaWNjaGFydHlwZXMiPmdlbmVyaWMgY2hhcmFjdGVyIHR5cGVzPC9hPgoraW4gdGhlCis8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCI+PGI+cGNyZTJwYXR0ZXJuPC9iPjwvYT4KK3BhZ2UuIElmIHlvdSBzZXQgUENSRTJfVUNQLCBtYXRjaGluZyBvbmUgb2YgdGhlIGl0ZW1zIGl0IGFmZmVjdHMgdGFrZXMgbXVjaAorbG9uZ2VyLiBUaGUgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIFBDUkUyIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggVW5pY29kZQorc3VwcG9ydC4KKzxwcmU+CisgIFBDUkUyX1VOR1JFRURZCis8L3ByZT4KK1RoaXMgb3B0aW9uIGludmVydHMgdGhlICJncmVlZGluZXNzIiBvZiB0aGUgcXVhbnRpZmllcnMgc28gdGhhdCB0aGV5IGFyZSBub3QKK2dyZWVkeSBieSBkZWZhdWx0LCBidXQgYmVjb21lIGdyZWVkeSBpZiBmb2xsb3dlZCBieSAiPyIuIEl0IGlzIG5vdCBjb21wYXRpYmxlCit3aXRoIFBlcmwuIEl0IGNhbiBhbHNvIGJlIHNldCBieSBhICg/VSkgb3B0aW9uIHNldHRpbmcgd2l0aGluIHRoZSBwYXR0ZXJuLgorPHByZT4KKyAgUENSRTJfVVNFX09GRlNFVF9MSU1JVAorPC9wcmU+CitUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBmb3IgPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBpZgorPGI+cGNyZTJfc2V0X29mZnNldF9saW1pdCgpPC9iPiBpcyBnb2luZyB0byBiZSB1c2VkIHRvIHNldCBhIG5vbi1kZWZhdWx0IG9mZnNldAorbGltaXQgaW4gYSBtYXRjaCBjb250ZXh0IGZvciBtYXRjaGVzIHRoYXQgdXNlIHRoaXMgcGF0dGVybi4gQW4gZXJyb3IgaXMKK2dlbmVyYXRlZCBpZiBhbiBvZmZzZXQgbGltaXQgaXMgc2V0IHdpdGhvdXQgdGhpcyBvcHRpb24uIEZvciBtb3JlIGRldGFpbHMsIHNlZQordGhlIGRlc2NyaXB0aW9uIG9mIDxiPnBjcmUyX3NldF9vZmZzZXRfbGltaXQoKTwvYj4gaW4gdGhlCis8YSBocmVmPSIjbWF0Y2hjb250ZXh0Ij5zZWN0aW9uPC9hPgordGhhdCBkZXNjcmliZXMgbWF0Y2ggY29udGV4dHMuIFNlZSBhbHNvIHRoZSBQQ1JFMl9GSVJTVExJTkUKK29wdGlvbiBhYm92ZS4KKzxwcmU+CisgIFBDUkUyX1VURgorPC9wcmU+CitUaGlzIG9wdGlvbiBjYXVzZXMgUENSRTIgdG8gcmVnYXJkIGJvdGggdGhlIHBhdHRlcm4gYW5kIHRoZSBzdWJqZWN0IHN0cmluZ3MKK3RoYXQgYXJlIHN1YnNlcXVlbnRseSBwcm9jZXNzZWQgYXMgc3RyaW5ncyBvZiBVVEYgY2hhcmFjdGVycyBpbnN0ZWFkIG9mCitzaW5nbGUtY29kZS11bml0IHN0cmluZ3MuIEl0IGlzIGF2YWlsYWJsZSB3aGVuIFBDUkUyIGlzIGJ1aWx0IHRvIGluY2x1ZGUKK1VuaWNvZGUgc3VwcG9ydCAod2hpY2ggaXMgdGhlIGRlZmF1bHQpLiBJZiBVbmljb2RlIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSwKK3RoZSB1c2Ugb2YgdGhpcyBvcHRpb24gcHJvdm9rZXMgYW4gZXJyb3IuIERldGFpbHMgb2YgaG93IHRoaXMgb3B0aW9uIGNoYW5nZXMKK3RoZSBiZWhhdmlvdXIgb2YgUENSRTIgYXJlIGdpdmVuIGluIHRoZQorPGEgaHJlZj0icGNyZTJ1bmljb2RlLmh0bWwiPjxiPnBjcmUydW5pY29kZTwvYj48L2E+CitwYWdlLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzE5IiBocmVmPSIjVE9DMSI+Q09NUElMQVRJT04gRVJST1IgQ09ERVM8L2E+PGJyPgorPFA+CitUaGVyZSBhcmUgb3ZlciA4MCBwb3NpdGl2ZSBlcnJvciBjb2RlcyB0aGF0IDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gbWF5IHJldHVybiBpZgoraXQgZmluZHMgYW4gZXJyb3IgaW4gdGhlIHBhdHRlcm4uIFRoZXJlIGFyZSBhbHNvIHNvbWUgbmVnYXRpdmUgZXJyb3IgY29kZXMgdGhhdAorYXJlIHVzZWQgZm9yIGludmFsaWQgVVRGIHN0cmluZ3MuIFRoZXNlIGFyZSB0aGUgc2FtZSBhcyBnaXZlbiBieQorPGI+cGNyZTJfbWF0Y2goKTwvYj4gYW5kIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiwgYW5kIGFyZSBkZXNjcmliZWQgaW4gdGhlCis8YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCI+PGI+cGNyZTJ1bmljb2RlPC9iPjwvYT4KK3BhZ2UuIFRoZSA8Yj5wY3JlMl9nZXRfZXJyb3JfbWVzc2FnZSgpPC9iPiBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHRvIG9idGFpbiBhCit0ZXh0dWFsIGVycm9yIG1lc3NhZ2UgZnJvbSBhbnkgZXJyb3IgY29kZS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMyMCIgaHJlZj0iI1RPQzEiPkpVU1QtSU4tVElNRSAoSklUKSBDT01QSUxBVElPTjwvYT48YnI+Cis8UD4KKzxiPmludCBwY3JlMl9qaXRfY29tcGlsZShwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgdWludDMyX3QgPGk+b3B0aW9uczwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludCBwY3JlMl9qaXRfbWF0Y2goY29uc3QgcGNyZTJfY29kZSAqPGk+Y29kZTwvaT4sIFBDUkUyX1NQVFIgPGk+c3ViamVjdDwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFIDxpPmxlbmd0aDwvaT4sIFBDUkUyX1NJWkUgPGk+c3RhcnRvZmZzZXQ8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+b3B0aW9uczwvaT4sIHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+LDwvYj4KKzxiPiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj52b2lkIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICo8aT5nY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnBjcmUyX2ppdF9zdGFjayAqcGNyZTJfaml0X3N0YWNrX2NyZWF0ZShQQ1JFMl9TSVpFIDxpPnN0YXJ0c2l6ZTwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFIDxpPm1heHNpemU8L2k+LCBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+dm9pZCBwY3JlMl9qaXRfc3RhY2tfYXNzaWduKHBjcmUyX21hdGNoX2NvbnRleHQgKjxpPm1jb250ZXh0PC9pPiw8L2I+Cis8Yj4gIHBjcmUyX2ppdF9jYWxsYmFjayA8aT5jYWxsYmFja19mdW5jdGlvbjwvaT4sIHZvaWQgKjxpPmNhbGxiYWNrX2RhdGE8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj52b2lkIHBjcmUyX2ppdF9zdGFja19mcmVlKHBjcmUyX2ppdF9zdGFjayAqPGk+aml0X3N0YWNrPC9pPik7PC9iPgorPC9QPgorPFA+CitUaGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBzdXBwb3J0IGZvciBKSVQgY29tcGlsYXRpb24sIHdoaWNoLCBpZiB0aGUganVzdC1pbi10aW1lCitjb21waWxlciBpcyBhdmFpbGFibGUsIGZ1cnRoZXIgcHJvY2Vzc2VzIGEgY29tcGlsZWQgcGF0dGVybiBpbnRvIG1hY2hpbmUgY29kZQordGhhdCBleGVjdXRlcyBtdWNoIGZhc3RlciB0aGFuIHRoZSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBpbnRlcnByZXRpdmUgbWF0Y2hpbmcKK2Z1bmN0aW9uLiBGdWxsIGRldGFpbHMgYXJlIGdpdmVuIGluIHRoZQorPGEgaHJlZj0icGNyZTJqaXQuaHRtbCI+PGI+cGNyZTJqaXQ8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4KKzwvUD4KKzxQPgorSklUIGNvbXBpbGF0aW9uIGlzIGEgaGVhdnl3ZWlnaHQgb3B0aW1pemF0aW9uLiBJdCBjYW4gdGFrZSBzb21lIHRpbWUgZm9yCitwYXR0ZXJucyB0byBiZSBhbmFseXplZCwgYW5kIGZvciBvbmUtb2ZmIG1hdGNoZXMgYW5kIHNpbXBsZSBwYXR0ZXJucyB0aGUKK2JlbmVmaXQgb2YgZmFzdGVyIGV4ZWN1dGlvbiBtaWdodCBiZSBvZmZzZXQgYnkgYSBtdWNoIHNsb3dlciBjb21waWxhdGlvbiB0aW1lLgorTW9zdCwgYnV0IG5vdCBhbGwgcGF0dGVybnMgY2FuIGJlIG9wdGltaXplZCBieSB0aGUgSklUIGNvbXBpbGVyLgorPGEgbmFtZT0ibG9jYWxlc3VwcG9ydCI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMyMSIgaHJlZj0iI1RPQzEiPkxPQ0FMRSBTVVBQT1JUPC9hPjxicj4KKzxQPgorUENSRTIgaGFuZGxlcyBjYXNlbGVzcyBtYXRjaGluZywgYW5kIGRldGVybWluZXMgd2hldGhlciBjaGFyYWN0ZXJzIGFyZSBsZXR0ZXJzLAorZGlnaXRzLCBvciB3aGF0ZXZlciwgYnkgcmVmZXJlbmNlIHRvIGEgc2V0IG9mIHRhYmxlcywgaW5kZXhlZCBieSBjaGFyYWN0ZXIgY29kZQorcG9pbnQuIFRoaXMgYXBwbGllcyBvbmx5IHRvIGNoYXJhY3RlcnMgd2hvc2UgY29kZSBwb2ludHMgYXJlIGxlc3MgdGhhbiAyNTYuIEJ5CitkZWZhdWx0LCBoaWdoZXItdmFsdWVkIGNvZGUgcG9pbnRzIG5ldmVyIG1hdGNoIGVzY2FwZXMgc3VjaCBhcyBcdyBvciBcZC4KK0hvd2V2ZXIsIGlmIFBDUkUyIGlzIGJ1aWx0IHdpdGggVVRGIHN1cHBvcnQsIGFsbCBjaGFyYWN0ZXJzIGNhbiBiZSB0ZXN0ZWQgd2l0aAorXHAgYW5kIFxQLCBvciwgYWx0ZXJuYXRpdmVseSwgdGhlIFBDUkUyX1VDUCBvcHRpb24gY2FuIGJlIHNldCB3aGVuIGEgcGF0dGVybgoraXMgY29tcGlsZWQ7IHRoaXMgY2F1c2VzIFx3IGFuZCBmcmllbmRzIHRvIHVzZSBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQKK2luc3RlYWQgb2YgdGhlIGJ1aWx0LWluIHRhYmxlcy4KKzwvUD4KKzxQPgorVGhlIHVzZSBvZiBsb2NhbGVzIHdpdGggVW5pY29kZSBpcyBkaXNjb3VyYWdlZC4gSWYgeW91IGFyZSBoYW5kbGluZyBjaGFyYWN0ZXJzCit3aXRoIGNvZGUgcG9pbnRzIGdyZWF0ZXIgdGhhbiAxMjgsIHlvdSBzaG91bGQgZWl0aGVyIHVzZSBVbmljb2RlIHN1cHBvcnQsIG9yCit1c2UgbG9jYWxlcywgYnV0IG5vdCB0cnkgdG8gbWl4IHRoZSB0d28uCis8L1A+Cis8UD4KK1BDUkUyIGNvbnRhaW5zIGFuIGludGVybmFsIHNldCBvZiBjaGFyYWN0ZXIgdGFibGVzIHRoYXQgYXJlIHVzZWQgYnkgZGVmYXVsdC4KK1RoZXNlIGFyZSBzdWZmaWNpZW50IGZvciBtYW55IGFwcGxpY2F0aW9ucy4gTm9ybWFsbHksIHRoZSBpbnRlcm5hbCB0YWJsZXMKK3JlY29nbml6ZSBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMuIEhvd2V2ZXIsIHdoZW4gUENSRTIgaXMgYnVpbHQsIGl0IGlzIHBvc3NpYmxlCit0byBjYXVzZSB0aGUgaW50ZXJuYWwgdGFibGVzIHRvIGJlIHJlYnVpbHQgaW4gdGhlIGRlZmF1bHQgIkMiIGxvY2FsZSBvZiB0aGUKK2xvY2FsIHN5c3RlbSwgd2hpY2ggbWF5IGNhdXNlIHRoZW0gdG8gYmUgZGlmZmVyZW50LgorPC9QPgorPFA+CitUaGUgaW50ZXJuYWwgdGFibGVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRhYmxlcyBzdXBwbGllZCBieSB0aGUgYXBwbGljYXRpb24KK3RoYXQgY2FsbHMgUENSRTIuIFRoZXNlIG1heSBiZSBjcmVhdGVkIGluIGEgZGlmZmVyZW50IGxvY2FsZSBmcm9tIHRoZSBkZWZhdWx0LgorQXMgbW9yZSBhbmQgbW9yZSBhcHBsaWNhdGlvbnMgY2hhbmdlIHRvIHVzaW5nIFVuaWNvZGUsIHRoZSBuZWVkIGZvciB0aGlzIGxvY2FsZQorc3VwcG9ydCBpcyBleHBlY3RlZCB0byBkaWUgYXdheS4KKzwvUD4KKzxQPgorRXh0ZXJuYWwgdGFibGVzIGFyZSBidWlsdCBieSBjYWxsaW5nIHRoZSA8Yj5wY3JlMl9tYWtldGFibGVzKCk8L2I+IGZ1bmN0aW9uLCBpbgordGhlIHJlbGV2YW50IGxvY2FsZS4gVGhlIHJlc3VsdCBjYW4gYmUgcGFzc2VkIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gYXMgb2Z0ZW4KK2FzIG5lY2Vzc2FyeSwgYnkgY3JlYXRpbmcgYSBjb21waWxlIGNvbnRleHQgYW5kIGNhbGxpbmcKKzxiPnBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKCk8L2I+IHRvIHNldCB0aGUgdGFibGVzIHBvaW50ZXIgdGhlcmVpbi4gRm9yCitleGFtcGxlLCB0byBidWlsZCBhbmQgdXNlIHRhYmxlcyB0aGF0IGFyZSBhcHByb3ByaWF0ZSBmb3IgdGhlIEZyZW5jaCBsb2NhbGUKKyh3aGVyZSBhY2NlbnRlZCBjaGFyYWN0ZXJzIHdpdGggdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMjggYXJlIHRyZWF0ZWQgYXMKK2xldHRlcnMpLCB0aGUgZm9sbG93aW5nIGNvZGUgY291bGQgYmUgdXNlZDoKKzxwcmU+CisgIHNldGxvY2FsZShMQ19DVFlQRSwgImZyX0ZSIik7CisgIHRhYmxlcyA9IHBjcmUyX21ha2V0YWJsZXMoTlVMTCk7CisgIGNjb250ZXh0ID0gcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZShOVUxMKTsKKyAgcGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXMoY2NvbnRleHQsIHRhYmxlcyk7CisgIHJlID0gcGNyZTJfY29tcGlsZSguLi4sIGNjb250ZXh0KTsKKzwvcHJlPgorVGhlIGxvY2FsZSBuYW1lICJmcl9GUiIgaXMgdXNlZCBvbiBMaW51eCBhbmQgb3RoZXIgVW5peC1saWtlIHN5c3RlbXM7IGlmIHlvdQorYXJlIHVzaW5nIFdpbmRvd3MsIHRoZSBuYW1lIGZvciB0aGUgRnJlbmNoIGxvY2FsZSBpcyAiZnJlbmNoIi4gSXQgaXMgdGhlCitjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB0aGUgbWVtb3J5IGNvbnRhaW5pbmcgdGhlIHRhYmxlcyByZW1haW5zCithdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgaXQgaXMgbmVlZGVkLgorPC9QPgorPFA+CitUaGUgcG9pbnRlciB0aGF0IGlzIHBhc3NlZCAodmlhIHRoZSBjb21waWxlIGNvbnRleHQpIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4KK2lzIHNhdmVkIHdpdGggdGhlIGNvbXBpbGVkIHBhdHRlcm4sIGFuZCB0aGUgc2FtZSB0YWJsZXMgYXJlIHVzZWQgYnkKKzxiPnBjcmUyX21hdGNoKCk8L2I+IGFuZCA8Yj5wY3JlX2RmYV9tYXRjaCgpPC9iPi4gVGh1cywgZm9yIGFueSBzaW5nbGUgcGF0dGVybiwKK2NvbXBpbGF0aW9uLCBhbmQgbWF0Y2hpbmcgYWxsIGhhcHBlbiBpbiB0aGUgc2FtZSBsb2NhbGUsIGJ1dCBkaWZmZXJlbnQgcGF0dGVybnMKK2NhbiBiZSBwcm9jZXNzZWQgaW4gZGlmZmVyZW50IGxvY2FsZXMuCis8YSBuYW1lPSJpbmZvYWJvdXRwYXR0ZXJuIj48L2E+PC9QPgorPGJyPjxhIG5hbWU9IlNFQzIyIiBocmVmPSIjVE9DMSI+SU5GT1JNQVRJT04gQUJPVVQgQSBDT01QSUxFRCBQQVRURVJOPC9hPjxicj4KKzxQPgorPGI+aW50IHBjcmUyX3BhdHRlcm5faW5mbyhjb25zdCBwY3JlMiAqPGk+Y29kZTwvaT4sIHVpbnQzMl90IDxpPndoYXQ8L2k+LCB2b2lkICo8aT53aGVyZTwvaT4pOzwvYj4KKzwvUD4KKzxQPgorVGhlIDxiPnBjcmUyX3BhdHRlcm5faW5mbygpPC9iPiBmdW5jdGlvbiByZXR1cm5zIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgYQorY29tcGlsZWQgcGF0dGVybi4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGNhbGxvdXRzLCBzZWUgdGhlCis8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCNpbmZvYWJvdXRjYWxsb3V0cyI+bmV4dCBzZWN0aW9uLjwvYT4KK1RoZSBmaXJzdCBhcmd1bWVudCBmb3IgPGI+cGNyZTJfcGF0dGVybl9pbmZvKCk8L2I+IGlzIGEgcG9pbnRlciB0byB0aGUgY29tcGlsZWQKK3BhdHRlcm4uIFRoZSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmaWVzIHdoaWNoIHBpZWNlIG9mIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLAorYW5kIHRoZSB0aGlyZCBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0byByZWNlaXZlIHRoZSBkYXRhLiBJZiB0aGUKK3RoaXJkIGFyZ3VtZW50IGlzIE5VTEwsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBpZ25vcmVkLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMKK3RoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSB2YXJpYWJsZSB0aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgaW5mb3JtYXRpb24KK3JlcXVlc3RlZC4gT3RoZXJ3aXNlLCBUaGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIHplcm8gZm9yIHN1Y2Nlc3MsIG9yIG9uZSBvZgordGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBudW1iZXJzOgorPHByZT4KKyAgUENSRTJfRVJST1JfTlVMTCAgICAgICAgICAgdGhlIGFyZ3VtZW50IDxpPmNvZGU8L2k+IHdhcyBOVUxMCisgIFBDUkUyX0VSUk9SX0JBRE1BR0lDICAgICAgIHRoZSAibWFnaWMgbnVtYmVyIiB3YXMgbm90IGZvdW5kCisgIFBDUkUyX0VSUk9SX0JBRE9QVElPTiAgICAgIHRoZSB2YWx1ZSBvZiA8aT53aGF0PC9pPiB3YXMgaW52YWxpZAorICBQQ1JFMl9FUlJPUl9VTlNFVCAgICAgICAgICB0aGUgcmVxdWVzdGVkIGZpZWxkIGlzIG5vdCBzZXQKKzwvcHJlPgorVGhlICJtYWdpYyBudW1iZXIiIGlzIHBsYWNlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBjb21waWxlZCBwYXR0ZXJuIGFzIGFuIHNpbXBsZQorY2hlY2sgYWdhaW5zdCBwYXNzaW5nIGFuIGFyYml0cmFyeSBtZW1vcnkgcG9pbnRlci4gSGVyZSBpcyBhIHR5cGljYWwgY2FsbCBvZgorPGI+cGNyZTJfcGF0dGVybl9pbmZvKCk8L2I+LCB0byBvYnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUgY29tcGlsZWQgcGF0dGVybjoKKzxwcmU+CisgIGludCByYzsKKyAgc2l6ZV90IGxlbmd0aDsKKyAgcmMgPSBwY3JlMl9wYXR0ZXJuX2luZm8oCisgICAgcmUsICAgICAgICAgICAgICAgLyogcmVzdWx0IG9mIHBjcmUyX2NvbXBpbGUoKSAqLworICAgIFBDUkUyX0lORk9fU0laRSwgIC8qIHdoYXQgaXMgcmVxdWlyZWQgKi8KKyAgICAmbGVuZ3RoKTsgICAgICAgICAvKiB3aGVyZSB0byBwdXQgdGhlIGRhdGEgKi8KKzwvcHJlPgorVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHNlY29uZCBhcmd1bWVudCBhcmUgZGVmaW5lZCBpbiA8Yj5wY3JlMi5oPC9iPiwgYW5kCithcmUgYXMgZm9sbG93czoKKzxwcmU+CisgIFBDUkUyX0lORk9fQUxMT1BUSU9OUworICBQQ1JFMl9JTkZPX0FSR09QVElPTlMKKzwvcHJlPgorUmV0dXJuIGEgY29weSBvZiB0aGUgcGF0dGVybidzIG9wdGlvbnMuIFRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYQorPGI+dWludDMyX3Q8L2I+IHZhcmlhYmxlLiBQQ1JFMl9JTkZPX0FSR09QVElPTlMgcmV0dXJucyBleGFjdGx5IHRoZSBvcHRpb25zIHRoYXQKK3dlcmUgcGFzc2VkIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4sIHdoZXJlYXMgUENSRTJfSU5GT19BTExPUFRJT05TIHJldHVybnMKK3RoZSBjb21waWxlIG9wdGlvbnMgYXMgbW9kaWZpZWQgYnkgYW55IHRvcC1sZXZlbCBvcHRpb24gc2V0dGluZ3Mgc3VjaCBhcyAoKlVURikKK2F0IHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiBpdHNlbGYuIEZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiAvKCpVVEYpYWJjLyBpcworY29tcGlsZWQgd2l0aCB0aGUgUENSRTJfRVhURU5ERUQgb3B0aW9uLCB0aGUgcmVzdWx0IGlzIFBDUkUyX0VYVEVOREVEIGFuZAorUENSRTJfVVRGLgorPC9QPgorPFA+CitBIHBhdHRlcm4gY29tcGlsZWQgd2l0aG91dCBQQ1JFMl9BTkNIT1JFRCBpcyBhdXRvbWF0aWNhbGx5IGFuY2hvcmVkIGJ5IFBDUkUyIGlmCit0aGUgZmlyc3Qgc2lnbmlmaWNhbnQgaXRlbSBpbiBldmVyeSB0b3AtbGV2ZWwgYnJhbmNoIGlzIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorPHByZT4KKyAgXiAgICAgdW5sZXNzIFBDUkUyX01VTFRJTElORSBpcyBzZXQKKyAgXEEgICAgYWx3YXlzCisgIFxHICAgIGFsd2F5cworICAuKiAgICBzb21ldGltZXMgLSBzZWUgYmVsb3cKKzwvcHJlPgorV2hlbiAuKiBpcyB0aGUgZmlyc3Qgc2lnbmlmaWNhbnQgaXRlbSwgYW5jaG9yaW5nIGlzIHBvc3NpYmxlIG9ubHkgd2hlbiBhbGwgdGhlCitmb2xsb3dpbmcgYXJlIHRydWU6Cis8cHJlPgorICAuKiBpcyBub3QgaW4gYW4gYXRvbWljIGdyb3VwCisgIC4qIGlzIG5vdCBpbiBhIGNhcHR1cmluZyBncm91cCB0aGF0IGlzIHRoZSBzdWJqZWN0IG9mIGEgYmFjayByZWZlcmVuY2UKKyAgUENSRTJfRE9UQUxMIGlzIGluIGZvcmNlIGZvciAuKgorICBOZWl0aGVyICgqUFJVTkUpIG5vciAoKlNLSVApIGFwcGVhcnMgaW4gdGhlIHBhdHRlcm4uCisgIFBDUkUyX05PX0RPVFNUQVJfQU5DSE9SIGlzIG5vdCBzZXQuCis8L3ByZT4KK0ZvciBwYXR0ZXJucyB0aGF0IGFyZSBhdXRvLWFuY2hvcmVkLCB0aGUgUENSRTJfQU5DSE9SRUQgYml0IGlzIHNldCBpbiB0aGUKK29wdGlvbnMgcmV0dXJuZWQgZm9yIFBDUkUyX0lORk9fQUxMT1BUSU9OUy4KKzxwcmU+CisgIFBDUkUyX0lORk9fQkFDS1JFRk1BWAorPC9wcmU+CitSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgaGlnaGVzdCBiYWNrIHJlZmVyZW5jZSBpbiB0aGUgcGF0dGVybi4gVGhlIHRoaXJkCithcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gPGI+dWludDMyX3Q8L2I+IHZhcmlhYmxlLiBOYW1lZCBzdWJwYXR0ZXJucyBhY3F1aXJlCitudW1iZXJzIGFzIHdlbGwgYXMgbmFtZXMsIGFuZCB0aGVzZSBjb3VudCB0b3dhcmRzIHRoZSBoaWdoZXN0IGJhY2sgcmVmZXJlbmNlLgorQmFjayByZWZlcmVuY2VzIHN1Y2ggYXMgXDQgb3IgXGd7MTJ9IG1hdGNoIHRoZSBjYXB0dXJlZCBjaGFyYWN0ZXJzIG9mIHRoZQorZ2l2ZW4gZ3JvdXAsIGJ1dCBpbiBhZGRpdGlvbiwgdGhlIGNoZWNrIHRoYXQgYSBjYXB0dXJpbmcgZ3JvdXAgaXMgc2V0IGluIGEKK2NvbmRpdGlvbmFsIHN1YnBhdHRlcm4gc3VjaCBhcyAoPygzKWF8YikgaXMgYWxzbyBhIGJhY2sgcmVmZXJlbmNlLiBaZXJvIGlzCityZXR1cm5lZCBpZiB0aGVyZSBhcmUgbm8gYmFjayByZWZlcmVuY2VzLgorPHByZT4KKyAgUENSRTJfSU5GT19CU1IKKzwvcHJlPgorVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IHdob3NlIHZhbHVlIGluZGljYXRlcyB3aGF0IGNoYXJhY3RlciBzZXF1ZW5jZXMgdGhlIFxSCitlc2NhcGUgc2VxdWVuY2UgbWF0Y2hlcy4gQSB2YWx1ZSBvZiBQQ1JFMl9CU1JfVU5JQ09ERSBtZWFucyB0aGF0IFxSIG1hdGNoZXMKK2FueSBVbmljb2RlIGxpbmUgZW5kaW5nIHNlcXVlbmNlOyBhIHZhbHVlIG9mIFBDUkUyX0JTUl9BTllDUkxGIG1lYW5zIHRoYXQgXFIKK21hdGNoZXMgb25seSBDUiwgTEYsIG9yIENSTEYuCis8cHJlPgorICBQQ1JFMl9JTkZPX0NBUFRVUkVDT1VOVAorPC9wcmU+CitSZXR1cm4gdGhlIGhpZ2hlc3QgY2FwdHVyaW5nIHN1YnBhdHRlcm4gbnVtYmVyIGluIHRoZSBwYXR0ZXJuLiBJbiBwYXR0ZXJucword2hlcmUgKD98IGlzIG5vdCB1c2VkLCB0aGlzIGlzIGFsc28gdGhlIHRvdGFsIG51bWJlciBvZiBjYXB0dXJpbmcgc3VicGF0dGVybnMuCitUaGUgdGhpcmQgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIDxiPnVpbnQzMl90PC9iPiB2YXJpYWJsZS4KKzxwcmU+CisgIFBDUkUyX0lORk9fRklSU1RCSVRNQVAKKzwvcHJlPgorSW4gdGhlIGFic2VuY2Ugb2YgYSBzaW5nbGUgZmlyc3QgY29kZSB1bml0IGZvciBhIG5vbi1hbmNob3JlZCBwYXR0ZXJuLAorPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBtYXkgY29uc3RydWN0IGEgMjU2LWJpdCB0YWJsZSB0aGF0IGRlZmluZXMgYSBmaXhlZCBzZXQgb2YKK3ZhbHVlcyBmb3IgdGhlIGZpcnN0IGNvZGUgdW5pdCBpbiBhbnkgbWF0Y2guIEZvciBleGFtcGxlLCBhIHBhdHRlcm4gdGhhdCBzdGFydHMKK3dpdGggW2FiY10gcmVzdWx0cyBpbiBhIHRhYmxlIHdpdGggdGhyZWUgYml0cyBzZXQuIFdoZW4gY29kZSB1bml0IHZhbHVlcworZ3JlYXRlciB0aGFuIDI1NSBhcmUgc3VwcG9ydGVkLCB0aGUgZmxhZyBiaXQgZm9yIDI1NSBtZWFucyAiYW55IGNvZGUgdW5pdCBvZgordmFsdWUgMjU1IG9yIGFib3ZlIi4gSWYgc3VjaCBhIHRhYmxlIHdhcyBjb25zdHJ1Y3RlZCwgYSBwb2ludGVyIHRvIGl0IGlzCityZXR1cm5lZC4gT3RoZXJ3aXNlIE5VTEwgaXMgcmV0dXJuZWQuIFRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4KKzxiPmNvbnN0IHVpbnQ4X3QgKjwvYj4gdmFyaWFibGUuCis8cHJlPgorICBQQ1JFMl9JTkZPX0ZJUlNUQ09ERVRZUEUKKzwvcHJlPgorUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgYW55IG1hdGNoZWQgc3RyaW5nLCBmb3IgYQorbm9uLWFuY2hvcmVkIHBhdHRlcm4uIFRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gPGI+dWludDMyX3Q8L2I+Cit2YXJpYWJsZS4gSWYgdGhlcmUgaXMgYSBmaXhlZCBmaXJzdCB2YWx1ZSwgZm9yIGV4YW1wbGUsIHRoZSBsZXR0ZXIgImMiIGZyb20gYQorcGF0dGVybiBzdWNoIGFzIChjYXR8Y293fGNveW90ZSksIDEgaXMgcmV0dXJuZWQsIGFuZCB0aGUgY2hhcmFjdGVyIHZhbHVlIGNhbiBiZQorcmV0cmlldmVkIHVzaW5nIFBDUkUyX0lORk9fRklSU1RDT0RFVU5JVC4gSWYgdGhlcmUgaXMgbm8gZml4ZWQgZmlyc3QgdmFsdWUsIGJ1dAoraXQgaXMga25vd24gdGhhdCBhIG1hdGNoIGNhbiBvY2N1ciBvbmx5IGF0IHRoZSBzdGFydCBvZiB0aGUgc3ViamVjdCBvcgorZm9sbG93aW5nIGEgbmV3bGluZSBpbiB0aGUgc3ViamVjdCwgMiBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhbmQgZm9yIGFuY2hvcmVkCitwYXR0ZXJucywgMCBpcyByZXR1cm5lZC4KKzxwcmU+CisgIFBDUkUyX0lORk9fRklSU1RDT0RFVU5JVAorPC9wcmU+CitSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgYW55IG1hdGNoZWQgc3RyaW5nIGluIHRoZSBzaXR1YXRpb24KK3doZXJlIFBDUkUyX0lORk9fRklSU1RDT0RFVFlQRSByZXR1cm5zIDE7IG90aGVyd2lzZSByZXR1cm4gMC4gVGhlIHRoaXJkCithcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gPGI+dWludDMyX3Q8L2I+IHZhcmlhYmxlLiBJbiB0aGUgOC1iaXQgbGlicmFyeSwgdGhlCit2YWx1ZSBpcyBhbHdheXMgbGVzcyB0aGFuIDI1Ni4gSW4gdGhlIDE2LWJpdCBsaWJyYXJ5IHRoZSB2YWx1ZSBjYW4gYmUgdXAgdG8KKzB4ZmZmZi4gSW4gdGhlIDMyLWJpdCBsaWJyYXJ5IGluIFVURi0zMiBtb2RlIHRoZSB2YWx1ZSBjYW4gYmUgdXAgdG8gMHgxMGZmZmYsCithbmQgdXAgdG8gMHhmZmZmZmZmZiB3aGVuIG5vdCB1c2luZyBVVEYtMzIgbW9kZS4KKzxwcmU+CisgIFBDUkUyX0lORk9fSEFTQkFDS1NMQVNIQworPC9wcmU+CitSZXR1cm4gMSBpZiB0aGUgcGF0dGVybiBjb250YWlucyBhbnkgaW5zdGFuY2VzIG9mIFxDLCBvdGhlcndpc2UgMC4gVGhlIHRoaXJkCithcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gPGI+dWludDMyX3Q8L2I+IHZhcmlhYmxlLgorPHByZT4KKyAgUENSRTJfSU5GT19IQVNDUk9STEYKKzwvcHJlPgorUmV0dXJuIDEgaWYgdGhlIHBhdHRlcm4gY29udGFpbnMgYW55IGV4cGxpY2l0IG1hdGNoZXMgZm9yIENSIG9yIExGIGNoYXJhY3RlcnMsCitvdGhlcndpc2UgMC4gVGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiA8Yj51aW50MzJfdDwvYj4gdmFyaWFibGUuIEFuCitleHBsaWNpdCBtYXRjaCBpcyBlaXRoZXIgYSBsaXRlcmFsIENSIG9yIExGIGNoYXJhY3Rlciwgb3IgXHIgb3IgXG4uCis8cHJlPgorICBQQ1JFMl9JTkZPX0pDSEFOR0VECis8L3ByZT4KK1JldHVybiAxIGlmIHRoZSAoP0opIG9yICg/LUopIG9wdGlvbiBzZXR0aW5nIGlzIHVzZWQgaW4gdGhlIHBhdHRlcm4sIG90aGVyd2lzZQorMC4gVGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiA8Yj51aW50MzJfdDwvYj4gdmFyaWFibGUuICg/SikgYW5kCisoPy1KKSBzZXQgYW5kIHVuc2V0IHRoZSBsb2NhbCBQQ1JFMl9EVVBOQU1FUyBvcHRpb24sIHJlc3BlY3RpdmVseS4KKzxwcmU+CisgIFBDUkUyX0lORk9fSklUU0laRQorPC9wcmU+CitJZiB0aGUgY29tcGlsZWQgcGF0dGVybiB3YXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBieQorPGI+cGNyZTJfaml0X2NvbXBpbGUoKTwvYj4sIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgSklUIGNvbXBpbGVkIGNvZGUsIG90aGVyd2lzZQorcmV0dXJuIHplcm8uIFRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSA8Yj5zaXplX3Q8L2I+IHZhcmlhYmxlLgorPHByZT4KKyAgUENSRTJfSU5GT19MQVNUQ09ERVRZUEUKKzwvcHJlPgorUmV0dXJucyAxIGlmIHRoZXJlIGlzIGEgcmlnaHRtb3N0IGxpdGVyYWwgY29kZSB1bml0IHRoYXQgbXVzdCBleGlzdCBpbiBhbnkKK21hdGNoZWQgc3RyaW5nLCBvdGhlciB0aGFuIGF0IGl0cyBzdGFydC4gVGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCAgcG9pbnQgdG8gYW4KKzxiPnVpbnQzMl90PC9iPiB2YXJpYWJsZS4gSWYgdGhlcmUgaXMgbm8gc3VjaCB2YWx1ZSwgMCBpcyByZXR1cm5lZC4gV2hlbiAxIGlzCityZXR1cm5lZCwgdGhlIGNvZGUgdW5pdCB2YWx1ZSBpdHNlbGYgY2FuIGJlIHJldHJpZXZlZCB1c2luZworUENSRTJfSU5GT19MQVNUQ09ERVVOSVQuIEZvciBhbmNob3JlZCBwYXR0ZXJucywgYSBsYXN0IGxpdGVyYWwgdmFsdWUgaXMKK3JlY29yZGVkIG9ubHkgaWYgaXQgZm9sbG93cyBzb21ldGhpbmcgb2YgdmFyaWFibGUgbGVuZ3RoLiBGb3IgZXhhbXBsZSwgZm9yIHRoZQorcGF0dGVybiAvXmFcZCt6XGQrLyB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgMSAod2l0aCAieiIgcmV0dXJuZWQgZnJvbQorUENSRTJfSU5GT19MQVNUQ09ERVVOSVQpLCBidXQgZm9yIC9eYVxkelxkLyB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgMC4KKzxwcmU+CisgIFBDUkUyX0lORk9fTEFTVENPREVVTklUCis8L3ByZT4KK1JldHVybiB0aGUgdmFsdWUgb2YgdGhlIHJpZ2h0bW9zdCBsaXRlcmFsIGRhdGEgdW5pdCB0aGF0IG11c3QgZXhpc3QgaW4gYW55CittYXRjaGVkIHN0cmluZywgb3RoZXIgdGhhbiBhdCBpdHMgc3RhcnQsIGlmIHN1Y2ggYSB2YWx1ZSBoYXMgYmVlbiByZWNvcmRlZC4gVGhlCit0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gPGI+dWludDMyX3Q8L2I+IHZhcmlhYmxlLiBJZiB0aGVyZSBpcyBubyBzdWNoCit2YWx1ZSwgMCBpcyByZXR1cm5lZC4KKzxwcmU+CisgIFBDUkUyX0lORk9fTUFUQ0hFTVBUWQorPC9wcmU+CitSZXR1cm4gMSBpZiB0aGUgcGF0dGVybiBtaWdodCBtYXRjaCBhbiBlbXB0eSBzdHJpbmcsIG90aGVyd2lzZSAwLiBUaGUgdGhpcmQKK2FyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiA8Yj51aW50MzJfdDwvYj4gdmFyaWFibGUuIFdoZW4gYSBwYXR0ZXJuIGNvbnRhaW5zCityZWN1cnNpdmUgc3Vicm91dGluZSBjYWxscyBpdCBpcyBub3QgYWx3YXlzIHBvc3NpYmxlIHRvIGRldGVybWluZSB3aGV0aGVyIG9yCitub3QgaXQgY2FuIG1hdGNoIGFuIGVtcHR5IHN0cmluZy4gUENSRTIgdGFrZXMgYSBjYXV0aW91cyBhcHByb2FjaCBhbmQgcmV0dXJucyAxCitpbiBzdWNoIGNhc2VzLgorPHByZT4KKyAgUENSRTJfSU5GT19NQVRDSExJTUlUCis8L3ByZT4KK0lmIHRoZSBwYXR0ZXJuIHNldCBhIG1hdGNoIGxpbWl0IGJ5IGluY2x1ZGluZyBhbiBpdGVtIG9mIHRoZSBmb3JtCisoKkxJTUlUX01BVENIPW5ubm4pIGF0IHRoZSBzdGFydCwgdGhlIHZhbHVlIGlzIHJldHVybmVkLiBUaGUgdGhpcmQgYXJndW1lbnQKK3Nob3VsZCBwb2ludCB0byBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlci4gSWYgbm8gc3VjaCB2YWx1ZSBoYXMgYmVlbiBzZXQsIHRoZQorY2FsbCB0byA8Yj5wY3JlMl9wYXR0ZXJuX2luZm8oKTwvYj4gcmV0dXJucyB0aGUgZXJyb3IgUENSRTJfRVJST1JfVU5TRVQuCis8cHJlPgorICBQQ1JFMl9JTkZPX01BWExPT0tCRUhJTkQKKzwvcHJlPgorUmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyAobm90IGNvZGUgdW5pdHMpIGluIHRoZSBsb25nZXN0IGxvb2tiZWhpbmQKK2Fzc2VydGlvbiBpbiB0aGUgcGF0dGVybi4gVGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiB1bnNpZ25lZCAzMi1iaXQKK2ludGVnZXIuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIHdoZW4gZG9pbmcgbXVsdGktc2VnbWVudCBtYXRjaGluZyB1c2luZyB0aGUKK3BhcnRpYWwgbWF0Y2hpbmcgZmFjaWxpdGllcy4gTm90ZSB0aGF0IHRoZSBzaW1wbGUgYXNzZXJ0aW9ucyBcYiBhbmQgXEIKK3JlcXVpcmUgYSBvbmUtY2hhcmFjdGVyIGxvb2tiZWhpbmQuIFxBIGFsc28gcmVnaXN0ZXJzIGEgb25lLWNoYXJhY3RlcgorbG9va2JlaGluZCwgdGhvdWdoIGl0IGRvZXMgbm90IGFjdHVhbGx5IGluc3BlY3QgdGhlIHByZXZpb3VzIGNoYXJhY3Rlci4gVGhpcyBpcwordG8gZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBmcm9tIHRoZSBvbGQgc2VnbWVudCBpcyByZXRhaW5lZCB3aGVuIGEKK25ldyBzZWdtZW50IGlzIHByb2Nlc3NlZC4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgbm8gbG9va2JlaGluZHMgaW4gdGhlCitwYXR0ZXJuLCBcQSBtaWdodCBtYXRjaCBpbmNvcnJlY3RseSBhdCB0aGUgc3RhcnQgb2YgYSBuZXcgc2VnbWVudC4KKzxwcmU+CisgIFBDUkUyX0lORk9fTUlOTEVOR1RICis8L3ByZT4KK0lmIGEgbWluaW11bSBsZW5ndGggZm9yIG1hdGNoaW5nIHN1YmplY3Qgc3RyaW5ncyB3YXMgY29tcHV0ZWQsIGl0cyB2YWx1ZSBpcworcmV0dXJuZWQuIE90aGVyd2lzZSB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgMC4gVGhlIHZhbHVlIGlzIGEgbnVtYmVyIG9mCitjaGFyYWN0ZXJzLCB3aGljaCBpbiBVVEYgbW9kZSBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIG51bWJlciBvZiBjb2RlIHVuaXRzLgorVGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiA8Yj51aW50MzJfdDwvYj4gdmFyaWFibGUuIFRoZSB2YWx1ZSBpcyBhCitsb3dlciBib3VuZCB0byB0aGUgbGVuZ3RoIG9mIGFueSBtYXRjaGluZyBzdHJpbmcuIFRoZXJlIG1heSBub3QgYmUgYW55IHN0cmluZ3MKK29mIHRoYXQgbGVuZ3RoIHRoYXQgZG8gYWN0dWFsbHkgbWF0Y2gsIGJ1dCBldmVyeSBzdHJpbmcgdGhhdCBkb2VzIG1hdGNoIGlzIGF0CitsZWFzdCB0aGF0IGxvbmcuCis8cHJlPgorICBQQ1JFMl9JTkZPX05BTUVDT1VOVAorICBQQ1JFMl9JTkZPX05BTUVFTlRSWVNJWkUKKyAgUENSRTJfSU5GT19OQU1FVEFCTEUKKzwvcHJlPgorUENSRTIgc3VwcG9ydHMgdGhlIHVzZSBvZiBuYW1lZCBhcyB3ZWxsIGFzIG51bWJlcmVkIGNhcHR1cmluZyBwYXJlbnRoZXNlcy4gVGhlCituYW1lcyBhcmUganVzdCBhbiBhZGRpdGlvbmFsIHdheSBvZiBpZGVudGlmeWluZyB0aGUgcGFyZW50aGVzZXMsIHdoaWNoIHN0aWxsCithY3F1aXJlIG51bWJlcnMuIFNldmVyYWwgY29udmVuaWVuY2UgZnVuY3Rpb25zIHN1Y2ggYXMKKzxiPnBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lKCk8L2I+IGFyZSBwcm92aWRlZCBmb3IgZXh0cmFjdGluZyBjYXB0dXJlZAorc3Vic3RyaW5ncyBieSBuYW1lLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGV4dHJhY3QgdGhlIGRhdGEgZGlyZWN0bHksIGJ5IGZpcnN0Citjb252ZXJ0aW5nIHRoZSBuYW1lIHRvIGEgbnVtYmVyIGluIG9yZGVyIHRvIGFjY2VzcyB0aGUgY29ycmVjdCBwb2ludGVycyBpbiB0aGUKK291dHB1dCB2ZWN0b3IgKGRlc2NyaWJlZCB3aXRoIDxiPnBjcmUyX21hdGNoKCk8L2I+IGJlbG93KS4gVG8gZG8gdGhlIGNvbnZlcnNpb24sCit5b3UgbmVlZCB0byB1c2UgdGhlIG5hbWUtdG8tbnVtYmVyIG1hcCwgd2hpY2ggaXMgZGVzY3JpYmVkIGJ5IHRoZXNlIHRocmVlCit2YWx1ZXMuCis8L1A+Cis8UD4KK1RoZSBtYXAgY29uc2lzdHMgb2YgYSBudW1iZXIgb2YgZml4ZWQtc2l6ZSBlbnRyaWVzLiBQQ1JFMl9JTkZPX05BTUVDT1VOVCBnaXZlcwordGhlIG51bWJlciBvZiBlbnRyaWVzLCBhbmQgUENSRTJfSU5GT19OQU1FRU5UUllTSVpFIGdpdmVzIHRoZSBzaXplIG9mIGVhY2gKK2VudHJ5IGluIGNvZGUgdW5pdHM7IGJvdGggb2YgdGhlc2UgcmV0dXJuIGEgPGI+dWludDMyX3Q8L2I+IHZhbHVlLiBUaGUgZW50cnkKK3NpemUgZGVwZW5kcyBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IG5hbWUuCis8L1A+Cis8UD4KK1BDUkUyX0lORk9fTkFNRVRBQkxFIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgdGFibGUuIFRoaXMgaXMKK2EgUENSRTJfU1BUUiBwb2ludGVyIHRvIGEgYmxvY2sgb2YgY29kZSB1bml0cy4gSW4gdGhlIDgtYml0IGxpYnJhcnksIHRoZSBmaXJzdAordHdvIGJ5dGVzIG9mIGVhY2ggZW50cnkgYXJlIHRoZSBudW1iZXIgb2YgdGhlIGNhcHR1cmluZyBwYXJlbnRoZXNpcywgbW9zdAorc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdC4gSW4gdGhlIDE2LWJpdCBsaWJyYXJ5LCB0aGUgcG9pbnRlciBwb2ludHMgdG8gMTYtYml0Citjb2RlIHVuaXRzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggY29udGFpbnMgdGhlIHBhcmVudGhlc2lzIG51bWJlci4gSW4gdGhlIDMyLWJpdAorbGlicmFyeSwgdGhlIHBvaW50ZXIgcG9pbnRzIHRvIDMyLWJpdCBjb2RlIHVuaXRzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggY29udGFpbnMKK3RoZSBwYXJlbnRoZXNpcyBudW1iZXIuIFRoZSByZXN0IG9mIHRoZSBlbnRyeSBpcyB0aGUgY29ycmVzcG9uZGluZyBuYW1lLCB6ZXJvCit0ZXJtaW5hdGVkLgorPC9QPgorPFA+CitUaGUgbmFtZXMgYXJlIGluIGFscGhhYmV0aWNhbCBvcmRlci4gSWYgKD98IGlzIHVzZWQgdG8gY3JlYXRlIG11bHRpcGxlIGdyb3Vwcword2l0aCB0aGUgc2FtZSBudW1iZXIsIGFzIGRlc2NyaWJlZCBpbiB0aGUKKzxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sI2R1cHN1YnBhdHRlcm5udW1iZXIiPnNlY3Rpb24gb24gZHVwbGljYXRlIHN1YnBhdHRlcm4gbnVtYmVyczwvYT4KK2luIHRoZQorPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwiPjxiPnBjcmUycGF0dGVybjwvYj48L2E+CitwYWdlLCB0aGUgZ3JvdXBzIG1heSBiZSBnaXZlbiB0aGUgc2FtZSBuYW1lLCBidXQgdGhlcmUgaXMgb25seSBvbmUgZW50cnkgaW4gdGhlCit0YWJsZS4gRGlmZmVyZW50IG5hbWVzIGZvciBncm91cHMgb2YgdGhlIHNhbWUgbnVtYmVyIGFyZSBub3QgcGVybWl0dGVkLgorPC9QPgorPFA+CitEdXBsaWNhdGUgbmFtZXMgZm9yIHN1YnBhdHRlcm5zIHdpdGggZGlmZmVyZW50IG51bWJlcnMgYXJlIHBlcm1pdHRlZCwgYnV0IG9ubHkKK2lmIFBDUkUyX0RVUE5BTUVTIGlzIHNldC4gVGhleSBhcHBlYXIgaW4gdGhlIHRhYmxlIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5Cit3ZXJlIGZvdW5kIGluIHRoZSBwYXR0ZXJuLiBJbiB0aGUgYWJzZW5jZSBvZiAoP3wgdGhpcyBpcyB0aGUgb3JkZXIgb2YKK2luY3JlYXNpbmcgbnVtYmVyOyB3aGVuICg/fCBpcyB1c2VkIHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBjYXNlIGJlY2F1c2UKK2xhdGVyIHN1YnBhdHRlcm5zIG1heSBoYXZlIGxvd2VyIG51bWJlcnMuCis8L1A+Cis8UD4KK0FzIGEgc2ltcGxlIGV4YW1wbGUgb2YgdGhlIG5hbWUvbnVtYmVyIHRhYmxlLCBjb25zaWRlciB0aGUgZm9sbG93aW5nIHBhdHRlcm4KK2FmdGVyIGNvbXBpbGF0aW9uIGJ5IHRoZSA4LWJpdCBsaWJyYXJ5IChhc3N1bWUgUENSRTJfRVhURU5ERUQgaXMgc2V0LCBzbyB3aGl0ZQorc3BhY2UgLSBpbmNsdWRpbmcgbmV3bGluZXMgLSBpcyBpZ25vcmVkKToKKzxwcmU+CisgICg/JiM2MDtkYXRlJiM2MjsgKD8mIzYwO3llYXImIzYyOyhcZFxkKT9cZFxkKSAtICg/JiM2MDttb250aCYjNjI7XGRcZCkgLSAoPyYjNjA7ZGF5JiM2MjtcZFxkKSApCis8L3ByZT4KK1RoZXJlIGFyZSBmb3VyIG5hbWVkIHN1YnBhdHRlcm5zLCBzbyB0aGUgdGFibGUgaGFzIGZvdXIgZW50cmllcywgYW5kIGVhY2ggZW50cnkKK2luIHRoZSB0YWJsZSBpcyBlaWdodCBieXRlcyBsb25nLiBUaGUgdGFibGUgaXMgYXMgZm9sbG93cywgd2l0aCBub24tcHJpbnRpbmcKK2J5dGVzIHNob3dzIGluIGhleGFkZWNpbWFsLCBhbmQgdW5kZWZpbmVkIGJ5dGVzIHNob3duIGFzID8/OgorPHByZT4KKyAgMDAgMDEgZCAgYSAgdCAgZSAgMDAgPz8KKyAgMDAgMDUgZCAgYSAgeSAgMDAgPz8gPz8KKyAgMDAgMDQgbSAgbyAgbiAgdCAgaCAgMDAKKyAgMDAgMDIgeSAgZSAgYSAgciAgMDAgPz8KKzwvcHJlPgorV2hlbiB3cml0aW5nIGNvZGUgdG8gZXh0cmFjdCBkYXRhIGZyb20gbmFtZWQgc3VicGF0dGVybnMgdXNpbmcgdGhlCituYW1lLXRvLW51bWJlciBtYXAsIHJlbWVtYmVyIHRoYXQgdGhlIGxlbmd0aCBvZiB0aGUgZW50cmllcyBpcyBsaWtlbHkgdG8gYmUKK2RpZmZlcmVudCBmb3IgZWFjaCBjb21waWxlZCBwYXR0ZXJuLgorPHByZT4KKyAgUENSRTJfSU5GT19ORVdMSU5FCis8L3ByZT4KK1RoZSBvdXRwdXQgaXMgYSA8Yj51aW50MzJfdDwvYj4gd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Cis8cHJlPgorICBQQ1JFMl9ORVdMSU5FX0NSICAgICAgIENhcnJpYWdlIHJldHVybiAoQ1IpCisgIFBDUkUyX05FV0xJTkVfTEYgICAgICAgTGluZWZlZWQgKExGKQorICBQQ1JFMl9ORVdMSU5FX0NSTEYgICAgIENhcnJpYWdlIHJldHVybiwgbGluZWZlZWQgKENSTEYpCisgIFBDUkUyX05FV0xJTkVfQU5ZICAgICAgQW55IFVuaWNvZGUgbGluZSBlbmRpbmcKKyAgUENSRTJfTkVXTElORV9BTllDUkxGICBBbnkgb2YgQ1IsIExGLCBvciBDUkxGCis8L3ByZT4KK1RoaXMgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGNoYXJhY3RlciBzZXF1ZW5jZSB0aGF0IHdpbGwgYmUgcmVjb2duaXplZCBhcworbWVhbmluZyAibmV3bGluZSIgd2hpbGUgbWF0Y2hpbmcuCis8cHJlPgorICBQQ1JFMl9JTkZPX1JFQ1VSU0lPTkxJTUlUCis8L3ByZT4KK0lmIHRoZSBwYXR0ZXJuIHNldCBhIHJlY3Vyc2lvbiBsaW1pdCBieSBpbmNsdWRpbmcgYW4gaXRlbSBvZiB0aGUgZm9ybQorKCpMSU1JVF9SRUNVUlNJT049bm5ubikgYXQgdGhlIHN0YXJ0LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuIFRoZSB0aGlyZAorYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGhhcyBiZWVuCitzZXQsIHRoZSBjYWxsIHRvIDxiPnBjcmUyX3BhdHRlcm5faW5mbygpPC9iPiByZXR1cm5zIHRoZSBlcnJvciBQQ1JFMl9FUlJPUl9VTlNFVC4KKzxwcmU+CisgIFBDUkUyX0lORk9fU0laRQorPC9wcmU+CitSZXR1cm4gdGhlIHNpemUgb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4gYnl0ZXMgKGZvciBhbGwgdGhyZWUgbGlicmFyaWVzKS4gVGhlCit0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSA8Yj5zaXplX3Q8L2I+IHZhcmlhYmxlLiBUaGlzIHZhbHVlIGluY2x1ZGVzIHRoZQorc2l6ZSBvZiB0aGUgZ2VuZXJhbCBkYXRhIGJsb2NrIHRoYXQgcHJlY2VkZXMgdGhlIGNvZGUgdW5pdHMgb2YgdGhlIGNvbXBpbGVkCitwYXR0ZXJuIGl0c2VsZi4gVGhlIHZhbHVlIHRoYXQgaXMgdXNlZCB3aGVuIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gaXMgZ2V0dGluZworbWVtb3J5IGluIHdoaWNoIHRvIHBsYWNlIHRoZSBjb21waWxlZCBwYXR0ZXJuIG1heSBiZSBzbGlnaHRseSBsYXJnZXIgdGhhbiB0aGUKK3ZhbHVlIHJldHVybmVkIGJ5IHRoaXMgb3B0aW9uLCBiZWNhdXNlIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGUgY29kZSB0aGF0CitjYWxjdWxhdGVzIHRoZSBzaXplIGhhcyB0byBvdmVyLWVzdGltYXRlLiBQcm9jZXNzaW5nIGEgcGF0dGVybiB3aXRoIHRoZSBKSVQKK2NvbXBpbGVyIGRvZXMgbm90IGFsdGVyIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIG9wdGlvbi4KKzxhIG5hbWU9ImluZm9hYm91dGNhbGxvdXRzIj48L2E+PC9QPgorPGJyPjxhIG5hbWU9IlNFQzIzIiBocmVmPSIjVE9DMSI+SU5GT1JNQVRJT04gQUJPVVQgQSBQQVRURVJOJ1MgQ0FMTE9VVFM8L2E+PGJyPgorPFA+Cis8Yj5pbnQgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUoY29uc3QgcGNyZTJfY29kZSAqPGk+Y29kZTwvaT4sPC9iPgorPGI+ICBpbnQgKCo8aT5jYWxsYmFjazwvaT4pKHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrICosIHZvaWQgKiksPC9iPgorPGI+ICB2b2lkICo8aT51c2VyX2RhdGE8L2k+KTs8L2I+Cis8YnI+Cis8YnI+CitBIHNjcmlwdCBsYW5ndWFnZSB0aGF0IHN1cHBvcnRzIHRoZSB1c2Ugb2Ygc3RyaW5nIGFyZ3VtZW50cyBpbiBjYWxsb3V0cyBtaWdodAorbGlrZSB0byBzY2FuIGFsbCB0aGUgY2FsbG91dHMgaW4gYSBwYXR0ZXJuIGJlZm9yZSBydW5uaW5nIHRoZSBtYXRjaC4gVGhpcyBjYW4KK2JlIGRvbmUgYnkgY2FsbGluZyA8Yj5wY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSgpPC9iPi4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEKK3BvaW50ZXIgdG8gYSBjb21waWxlZCBwYXR0ZXJuLCB0aGUgc2Vjb25kIHBvaW50cyB0byBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQKK3RoZSB0aGlyZCBpcyBhcmJpdHJhcnkgdXNlciBkYXRhLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBldmVyeQorY2FsbG91dCBpbiB0aGUgcGF0dGVybiBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcHBlYXIuIEl0cyBmaXJzdCBhcmd1bWVudCBpcworYSBwb2ludGVyIHRvIGEgY2FsbG91dCBlbnVtZXJhdGlvbiBibG9jaywgYW5kIGl0cyBzZWNvbmQgYXJndW1lbnQgaXMgdGhlCis8aT51c2VyX2RhdGE8L2k+IHZhbHVlIHRoYXQgd2FzIHBhc3NlZCB0byA8Yj5wY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSgpPC9iPi4gVGhlCitjb250ZW50cyBvZiB0aGUgY2FsbG91dCBlbnVtZXJhdGlvbiBibG9jayBhcmUgZGVzY3JpYmVkIGluIHRoZQorPGEgaHJlZj0icGNyZTJjYWxsb3V0Lmh0bWwiPjxiPnBjcmUyY2FsbG91dDwvYj48L2E+Citkb2N1bWVudGF0aW9uLCB3aGljaCBhbHNvIGdpdmVzIGZ1cnRoZXIgZGV0YWlscyBhYm91dCBjYWxsb3V0cy4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMyNCIgaHJlZj0iI1RPQzEiPlNFUklBTElaQVRJT04gQU5EIFBSRUNPTVBJTElORzwvYT48YnI+Cis8UD4KK0l0IGlzIHBvc3NpYmxlIHRvIHNhdmUgY29tcGlsZWQgcGF0dGVybnMgb24gZGlzYyBvciBlbHNld2hlcmUsIGFuZCByZWxvYWQgdGhlbQorbGF0ZXIsIHN1YmplY3QgdG8gYSBudW1iZXIgb2YgcmVzdHJpY3Rpb25zLiBUaGUgZnVuY3Rpb25zIHdob3NlIG5hbWVzIGJlZ2luCit3aXRoIDxiPnBjcmUyX3NlcmlhbGl6ZV88L2I+IGFyZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIFRoZXkgYXJlIGRlc2NyaWJlZCBpbgordGhlCis8YSBocmVmPSJwY3JlMnNlcmlhbGl6ZS5odG1sIj48Yj5wY3JlMnNlcmlhbGl6ZTwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPGEgbmFtZT0ibWF0Y2hkYXRhYmxvY2siPjwvYT48L1A+Cis8YnI+PGEgbmFtZT0iU0VDMjUiIGhyZWY9IiNUT0MxIj5USEUgTUFUQ0ggREFUQSBCTE9DSzwvYT48YnI+Cis8UD4KKzxiPnBjcmUyX21hdGNoX2RhdGEgKnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKHVpbnQzMl90IDxpPm92ZWNzaXplPC9pPiw8L2I+Cis8Yj4gIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqPGk+Z2NvbnRleHQ8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5wY3JlMl9tYXRjaF9kYXRhICpwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4oPC9iPgorPGI+ICBjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICo8aT5nY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnZvaWQgcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+KTs8L2I+Cis8L1A+Cis8UD4KK0luZm9ybWF0aW9uIGFib3V0IGEgc3VjY2Vzc2Z1bCBvciB1bnN1Y2Nlc3NmdWwgbWF0Y2ggaXMgcGxhY2VkIGluIGEgbWF0Y2gKK2RhdGEgYmxvY2ssIHdoaWNoIGlzIGFuIG9wYXF1ZSBzdHJ1Y3R1cmUgdGhhdCBpcyBhY2Nlc3NlZCBieSBmdW5jdGlvbiBjYWxscy4gSW4KK3BhcnRpY3VsYXIsIHRoZSBtYXRjaCBkYXRhIGJsb2NrIGNvbnRhaW5zIGEgdmVjdG9yIG9mIG9mZnNldHMgaW50byB0aGUgc3ViamVjdAorc3RyaW5nIHRoYXQgZGVmaW5lIHRoZSBtYXRjaGVkIHBhcnQgb2YgdGhlIHN1YmplY3QgYW5kIGFueSBzdWJzdHJpbmdzIHRoYXQgd2VyZQorY2FwdHVyZWQuIFRoaXMgaXMga25vdyBhcyB0aGUgPGk+b3ZlY3RvcjwvaT4uCis8L1A+Cis8UD4KK0JlZm9yZSBjYWxsaW5nIDxiPnBjcmUyX21hdGNoKCk8L2I+LCA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4sIG9yCis8Yj5wY3JlMl9qaXRfbWF0Y2goKTwvYj4geW91IG11c3QgY3JlYXRlIGEgbWF0Y2ggZGF0YSBibG9jayBieSBjYWxsaW5nIG9uZSBvZgordGhlIGNyZWF0aW9uIGZ1bmN0aW9ucyBhYm92ZS4gRm9yIDxiPnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKCk8L2I+LCB0aGUgZmlyc3QKK2FyZ3VtZW50IGlzIHRoZSBudW1iZXIgb2YgcGFpcnMgb2Ygb2Zmc2V0cyBpbiB0aGUgPGk+b3ZlY3RvcjwvaT4uIE9uZSBwYWlyIG9mCitvZmZzZXRzIGlzIHJlcXVpcmVkIHRvIGlkZW50aWZ5IHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVkIHRoZSB3aG9sZSBwYXR0ZXJuLCB3aXRoCithbm90aGVyIHBhaXIgZm9yIGVhY2ggY2FwdHVyZWQgc3Vic3RyaW5nLiBGb3IgZXhhbXBsZSwgYSB2YWx1ZSBvZiA0IGNyZWF0ZXMKK2Vub3VnaCBzcGFjZSB0byByZWNvcmQgdGhlIG1hdGNoZWQgcG9ydGlvbiBvZiB0aGUgc3ViamVjdCBwbHVzIHRocmVlIGNhcHR1cmVkCitzdWJzdHJpbmdzLiBBIG1pbmltdW0gb2YgYXQgbGVhc3QgMSBwYWlyIGlzIGltcG9zZWQgYnkKKzxiPnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKCk8L2I+LCBzbyBpdCBpcyBhbHdheXMgcG9zc2libGUgdG8gcmV0dXJuIHRoZSBvdmVyYWxsCittYXRjaGVkIHN0cmluZy4KKzwvUD4KKzxQPgorVGhlIHNlY29uZCBhcmd1bWVudCBvZiA8Yj5wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSgpPC9iPiBpcyBhIHBvaW50ZXIgdG8gYQorZ2VuZXJhbCBjb250ZXh0LCB3aGljaCBjYW4gc3BlY2lmeSBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgZm9yIG9idGFpbmluZyB0aGUKK21lbW9yeSBmb3IgdGhlIG1hdGNoIGRhdGEgYmxvY2suIElmIHlvdSBhcmUgbm90IHVzaW5nIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCwKK3Bhc3MgTlVMTCwgd2hpY2ggY2F1c2VzIDxiPm1hbGxvYygpPC9iPiB0byBiZSB1c2VkLgorPC9QPgorPFA+CitGb3IgPGI+cGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuKCk8L2I+LCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYQorcG9pbnRlciB0byBhIGNvbXBpbGVkIHBhdHRlcm4uIFRoZSBvdmVjdG9yIGlzIGNyZWF0ZWQgdG8gYmUgZXhhY3RseSB0aGUgcmlnaHQKK3NpemUgdG8gaG9sZCBhbGwgdGhlIHN1YnN0cmluZ3MgYSBwYXR0ZXJuIG1pZ2h0IGNhcHR1cmUuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMKK2FnYWluIGEgcG9pbnRlciB0byBhIGdlbmVyYWwgY29udGV4dCwgYnV0IGluIHRoaXMgY2FzZSBpZiBOVUxMIGlzIHBhc3NlZCwgdGhlCittZW1vcnkgaXMgb2J0YWluZWQgdXNpbmcgdGhlIHNhbWUgYWxsb2NhdG9yIHRoYXQgd2FzIHVzZWQgZm9yIHRoZSBjb21waWxlZAorcGF0dGVybiAoY3VzdG9tIG9yIGRlZmF1bHQpLgorPC9QPgorPFA+CitBIG1hdGNoIGRhdGEgYmxvY2sgY2FuIGJlIHVzZWQgbWFueSB0aW1lcywgd2l0aCB0aGUgc2FtZSBvciBkaWZmZXJlbnQgY29tcGlsZWQKK3BhdHRlcm5zLiBZb3UgY2FuIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSBhIG1hdGNoIGRhdGEgYmxvY2sgYWZ0ZXIgYSBtYXRjaAorb3BlcmF0aW9uIGhhcyBmaW5pc2hlZCwgdXNpbmcgZnVuY3Rpb25zIHRoYXQgYXJlIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbnMgb24KKzxhIGhyZWY9IiNtYXRjaGVkc3RyaW5ncyI+bWF0Y2hlZCBzdHJpbmdzPC9hPgorYW5kCis8YSBocmVmPSIjbWF0Y2hvdGhlcmRhdGEiPm90aGVyIG1hdGNoIGRhdGE8L2E+CitiZWxvdy4KKzwvUD4KKzxQPgorV2hlbiBhIGNhbGwgb2YgPGI+cGNyZTJfbWF0Y2goKTwvYj4gZmFpbHMsIHZhbGlkIGRhdGEgaXMgYXZhaWxhYmxlIGluIHRoZSBtYXRjaAorYmxvY2sgb25seSB3aGVuIHRoZSBlcnJvciBpcyBQQ1JFMl9FUlJPUl9OT01BVENILCBQQ1JFMl9FUlJPUl9QQVJUSUFMLCBvciBvbmUKK29mIHRoZSBlcnJvciBjb2RlcyBmb3IgYW4gaW52YWxpZCBVVEYgc3RyaW5nLiBFeGFjdGx5IHdoYXQgaXMgYXZhaWxhYmxlIGRlcGVuZHMKK29uIHRoZSBlcnJvciwgYW5kIGlzIGRldGFpbGVkIGJlbG93LgorPC9QPgorPFA+CitXaGVuIG9uZSBvZiB0aGUgbWF0Y2hpbmcgZnVuY3Rpb25zIGlzIGNhbGxlZCwgcG9pbnRlcnMgdG8gdGhlIGNvbXBpbGVkIHBhdHRlcm4KK2FuZCB0aGUgc3ViamVjdCBzdHJpbmcgYXJlIHNldCBpbiB0aGUgbWF0Y2ggZGF0YSBibG9jayBzbyB0aGF0IHRoZXkgY2FuIGJlCityZWZlcmVuY2VkIGJ5IHRoZSBleHRyYWN0aW9uIGZ1bmN0aW9ucy4gQWZ0ZXIgcnVubmluZyBhIG1hdGNoLCB5b3UgbXVzdCBub3QKK2ZyZWUgYSBjb21waWxlZCBwYXR0ZXJuIG9yIGEgc3ViamVjdCBzdHJpbmcgdW50aWwgYWZ0ZXIgYWxsIG9wZXJhdGlvbnMgb24gdGhlCittYXRjaCBkYXRhIGJsb2NrIChmb3IgdGhhdCBtYXRjaCkgaGF2ZSB0YWtlbiBwbGFjZS4KKzwvUD4KKzxQPgorV2hlbiBhIG1hdGNoIGRhdGEgYmxvY2sgaXRzZWxmIGlzIG5vIGxvbmdlciBuZWVkZWQsIGl0IHNob3VsZCBiZSBmcmVlZCBieQorY2FsbGluZyA8Yj5wY3JlMl9tYXRjaF9kYXRhX2ZyZWUoKTwvYj4uCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMjYiIGhyZWY9IiNUT0MxIj5NQVRDSElORyBBIFBBVFRFUk46IFRIRSBUUkFESVRJT05BTCBGVU5DVElPTjwvYT48YnI+Cis8UD4KKzxiPmludCBwY3JlMl9tYXRjaChjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiwgUENSRTJfU1BUUiA8aT5zdWJqZWN0PC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgPGk+bGVuZ3RoPC9pPiwgUENSRTJfU0laRSA8aT5zdGFydG9mZnNldDwvaT4sPC9iPgorPGI+ICB1aW50MzJfdCA8aT5vcHRpb25zPC9pPiwgcGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBwY3JlMl9tYXRjaF9jb250ZXh0ICo8aT5tY29udGV4dDwvaT4pOzwvYj4KKzwvUD4KKzxQPgorVGhlIGZ1bmN0aW9uIDxiPnBjcmUyX21hdGNoKCk8L2I+IGlzIGNhbGxlZCB0byBtYXRjaCBhIHN1YmplY3Qgc3RyaW5nIGFnYWluc3QgYQorY29tcGlsZWQgcGF0dGVybiwgd2hpY2ggaXMgcGFzc2VkIGluIHRoZSA8aT5jb2RlPC9pPiBhcmd1bWVudC4gWW91IGNhbiBjYWxsCis8Yj5wY3JlMl9tYXRjaCgpPC9iPiB3aXRoIHRoZSBzYW1lIDxpPmNvZGU8L2k+IGFyZ3VtZW50IGFzIG1hbnkgdGltZXMgYXMgeW91CitsaWtlLCBpbiBvcmRlciB0byBmaW5kIG11bHRpcGxlIG1hdGNoZXMgaW4gdGhlIHN1YmplY3Qgc3RyaW5nIG9yIHRvIG1hdGNoCitkaWZmZXJlbnQgc3ViamVjdCBzdHJpbmdzIHdpdGggdGhlIHNhbWUgcGF0dGVybi4KKzwvUD4KKzxQPgorVGhpcyBmdW5jdGlvbiBpcyB0aGUgbWFpbiBtYXRjaGluZyBmYWNpbGl0eSBvZiB0aGUgbGlicmFyeSwgYW5kIGl0IG9wZXJhdGVzIGluCithIFBlcmwtbGlrZSBtYW5uZXIuIEZvciBzcGVjaWFsaXN0IHVzZSB0aGVyZSBpcyBhbHNvIGFuIGFsdGVybmF0aXZlIG1hdGNoaW5nCitmdW5jdGlvbiwgd2hpY2ggaXMgZGVzY3JpYmVkCis8YSBocmVmPSIjZGZhbWF0Y2giPmJlbG93PC9hPgoraW4gdGhlIHNlY3Rpb24gYWJvdXQgdGhlIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiBmdW5jdGlvbi4KKzwvUD4KKzxQPgorSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIGNhbGwgdG8gPGI+cGNyZTJfbWF0Y2goKTwvYj46Cis8cHJlPgorICBwY3JlMl9tYXRjaF9kYXRhICptZCA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKDQsIE5VTEwpOworICBpbnQgcmMgPSBwY3JlMl9tYXRjaCgKKyAgICByZSwgICAgICAgICAgICAgLyogcmVzdWx0IG9mIHBjcmUyX2NvbXBpbGUoKSAqLworICAgICJzb21lIHN0cmluZyIsICAvKiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgICAxMSwgICAgICAgICAgICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgLyogc3RhcnQgYXQgb2Zmc2V0IDAgaW4gdGhlIHN1YmplY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgLyogZGVmYXVsdCBvcHRpb25zICovCisgICAgbWF0Y2hfZGF0YSwgICAgIC8qIHRoZSBtYXRjaCBkYXRhIGJsb2NrICovCisgICAgTlVMTCk7ICAgICAgICAgIC8qIGEgbWF0Y2ggY29udGV4dDsgTlVMTCBtZWFucyB1c2UgZGVmYXVsdHMgKi8KKzwvcHJlPgorSWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIHplcm8tdGVybWluYXRlZCwgdGhlIGxlbmd0aCBjYW4gYmUgZ2l2ZW4gYXMKK1BDUkUyX1pFUk9fVEVSTUlOQVRFRC4gQSBtYXRjaCBjb250ZXh0IG11c3QgYmUgcHJvdmlkZWQgaWYgY2VydGFpbiBsZXNzIGNvbW1vbgorbWF0Y2hpbmcgcGFyYW1ldGVycyBhcmUgdG8gYmUgY2hhbmdlZC4gRm9yIGRldGFpbHMsIHNlZSB0aGUgc2VjdGlvbiBvbgorPGEgaHJlZj0iI21hdGNoY29udGV4dCI+dGhlIG1hdGNoIGNvbnRleHQ8L2E+CithYm92ZS4KKzwvUD4KKzxicj48Yj4KK1RoZSBzdHJpbmcgdG8gYmUgbWF0Y2hlZCBieSA8Yj5wY3JlMl9tYXRjaCgpPC9iPgorPC9iPjxicj4KKzxQPgorVGhlIHN1YmplY3Qgc3RyaW5nIGlzIHBhc3NlZCB0byA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBhcyBhIHBvaW50ZXIgaW4KKzxpPnN1YmplY3Q8L2k+LCBhIGxlbmd0aCBpbiA8aT5sZW5ndGg8L2k+LCBhbmQgYSBzdGFydGluZyBvZmZzZXQgaW4KKzxpPnN0YXJ0b2Zmc2V0PC9pPi4gVGhlIGxlbmd0aCBhbmQgb2Zmc2V0IGFyZSBpbiBjb2RlIHVuaXRzLCBub3QgY2hhcmFjdGVycy4KK1RoYXQgaXMsIHRoZXkgYXJlIGluIGJ5dGVzIGZvciB0aGUgOC1iaXQgbGlicmFyeSwgMTYtYml0IGNvZGUgdW5pdHMgZm9yIHRoZQorMTYtYml0IGxpYnJhcnksIGFuZCAzMi1iaXQgY29kZSB1bml0cyBmb3IgdGhlIDMyLWJpdCBsaWJyYXJ5LCB3aGV0aGVyIG9yIG5vdAorVVRGIHByb2Nlc3NpbmcgaXMgZW5hYmxlZC4KKzwvUD4KKzxQPgorSWYgPGk+c3RhcnRvZmZzZXQ8L2k+IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJqZWN0LAorPGI+cGNyZTJfbWF0Y2goKTwvYj4gcmV0dXJucyBQQ1JFMl9FUlJPUl9CQURPRkZTRVQuIFdoZW4gdGhlIHN0YXJ0aW5nIG9mZnNldCBpcworemVybywgdGhlIHNlYXJjaCBmb3IgYSBtYXRjaCBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3ViamVjdCwgYW5kIHRoaXMKK2lzIGJ5IGZhciB0aGUgbW9zdCBjb21tb24gY2FzZS4gSW4gVVRGLTggb3IgVVRGLTE2IG1vZGUsIHRoZSBzdGFydGluZyBvZmZzZXQKK211c3QgcG9pbnQgdG8gdGhlIHN0YXJ0IG9mIGEgY2hhcmFjdGVyLCBvciB0byB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IChpbiBVVEYtMzIKK21vZGUsIG9uZSBjb2RlIHVuaXQgZXF1YWxzIG9uZSBjaGFyYWN0ZXIsIHNvIGFsbCBvZmZzZXRzIGFyZSB2YWxpZCkuIExpa2UgdGhlCitwYXR0ZXJuIHN0cmluZywgdGhlIHN1YmplY3QgbWF5IGNvbnRhaW4gYmluYXJ5IHplcm9lcy4KKzwvUD4KKzxQPgorQSBub24temVybyBzdGFydGluZyBvZmZzZXQgaXMgdXNlZnVsIHdoZW4gc2VhcmNoaW5nIGZvciBhbm90aGVyIG1hdGNoIGluIHRoZQorc2FtZSBzdWJqZWN0IGJ5IGNhbGxpbmcgPGI+cGNyZTJfbWF0Y2goKTwvYj4gYWdhaW4gYWZ0ZXIgYSBwcmV2aW91cyBzdWNjZXNzLgorU2V0dGluZyA8aT5zdGFydG9mZnNldDwvaT4gZGlmZmVycyBmcm9tIHBhc3Npbmcgb3ZlciBhIHNob3J0ZW5lZCBzdHJpbmcgYW5kCitzZXR0aW5nIFBDUkUyX05PVEJPTCBpbiB0aGUgY2FzZSBvZiBhIHBhdHRlcm4gdGhhdCBiZWdpbnMgd2l0aCBhbnkga2luZCBvZgorbG9va2JlaGluZC4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBwYXR0ZXJuCis8cHJlPgorICBcQmlzc1xCCis8L3ByZT4KK3doaWNoIGZpbmRzIG9jY3VycmVuY2VzIG9mICJpc3MiIGluIHRoZSBtaWRkbGUgb2Ygd29yZHMuIChcQiBtYXRjaGVzIG9ubHkgaWYKK3RoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdWJqZWN0IGlzIG5vdCBhIHdvcmQgYm91bmRhcnkuKSBXaGVuIGFwcGxpZWQgdG8KK3RoZSBzdHJpbmcgIk1pc3Npc3NpcGkiIHRoZSBmaXJzdCBjYWxsIHRvIDxiPnBjcmUyX21hdGNoKCk8L2I+IGZpbmRzIHRoZSBmaXJzdAorb2NjdXJyZW5jZS4gSWYgPGI+cGNyZTJfbWF0Y2goKTwvYj4gaXMgY2FsbGVkIGFnYWluIHdpdGgganVzdCB0aGUgcmVtYWluZGVyIG9mCit0aGUgc3ViamVjdCwgbmFtZWx5ICJpc3NpcGkiLCBpdCBkb2VzIG5vdCBtYXRjaCwgYmVjYXVzZSBcQiBpcyBhbHdheXMgZmFsc2UgYXQKK3RoZSBzdGFydCBvZiB0aGUgc3ViamVjdCwgd2hpY2ggaXMgZGVlbWVkIHRvIGJlIGEgd29yZCBib3VuZGFyeS4gSG93ZXZlciwgaWYKKzxiPnBjcmUyX21hdGNoKCk8L2I+IGlzIHBhc3NlZCB0aGUgZW50aXJlIHN0cmluZyBhZ2FpbiwgYnV0IHdpdGgKKzxpPnN0YXJ0b2Zmc2V0PC9pPiBzZXQgdG8gNCwgaXQgZmluZHMgdGhlIHNlY29uZCBvY2N1cnJlbmNlIG9mICJpc3MiIGJlY2F1c2UgaXQKK2lzIGFibGUgdG8gbG9vayBiZWhpbmQgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIGRpc2NvdmVyIHRoYXQgaXQgaXMgcHJlY2VkZWQgYnkgYQorbGV0dGVyLgorPC9QPgorPFA+CitGaW5kaW5nIGFsbCB0aGUgbWF0Y2hlcyBpbiBhIHN1YmplY3QgaXMgdHJpY2t5IHdoZW4gdGhlIHBhdHRlcm4gY2FuIG1hdGNoIGFuCitlbXB0eSBzdHJpbmcuIEl0IGlzIHBvc3NpYmxlIHRvIGVtdWxhdGUgUGVybCdzIC9nIGJlaGF2aW91ciBieSBmaXJzdCB0cnlpbmcgdGhlCittYXRjaCBhZ2FpbiBhdCB0aGUgc2FtZSBvZmZzZXQsIHdpdGggdGhlIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQgYW5kCitQQ1JFMl9BTkNIT1JFRCBvcHRpb25zLCBhbmQgdGhlbiBpZiB0aGF0IGZhaWxzLCBhZHZhbmNpbmcgdGhlIHN0YXJ0aW5nIG9mZnNldAorYW5kIHRyeWluZyBhbiBvcmRpbmFyeSBtYXRjaCBhZ2Fpbi4gVGhlcmUgaXMgc29tZSBjb2RlIHRoYXQgZGVtb25zdHJhdGVzIGhvdyB0bworZG8gdGhpcyBpbiB0aGUKKzxhIGhyZWY9InBjcmUyZGVtby5odG1sIj48Yj5wY3JlMmRlbW88L2I+PC9hPgorc2FtcGxlIHByb2dyYW0uIEluIHRoZSBtb3N0IGdlbmVyYWwgY2FzZSwgeW91IGhhdmUgdG8gY2hlY2sgdG8gc2VlIGlmIHRoZQorbmV3bGluZSBjb252ZW50aW9uIHJlY29nbml6ZXMgQ1JMRiBhcyBhIG5ld2xpbmUsIGFuZCBpZiBzbywgYW5kIHRoZSBjdXJyZW50CitjaGFyYWN0ZXIgaXMgQ1IgZm9sbG93ZWQgYnkgTEYsIGFkdmFuY2UgdGhlIHN0YXJ0aW5nIG9mZnNldCBieSB0d28gY2hhcmFjdGVycworaW5zdGVhZCBvZiBvbmUuCis8L1A+Cis8UD4KK0lmIGEgbm9uLXplcm8gc3RhcnRpbmcgb2Zmc2V0IGlzIHBhc3NlZCB3aGVuIHRoZSBwYXR0ZXJuIGlzIGFuY2hvcmVkLCBvbmUKK2F0dGVtcHQgdG8gbWF0Y2ggYXQgdGhlIGdpdmVuIG9mZnNldCBpcyBtYWRlLiBUaGlzIGNhbiBvbmx5IHN1Y2NlZWQgaWYgdGhlCitwYXR0ZXJuIGRvZXMgbm90IHJlcXVpcmUgdGhlIG1hdGNoIHRvIGJlIGF0IHRoZSBzdGFydCBvZiB0aGUgc3ViamVjdC4KKzxhIG5hbWU9Im1hdGNob3B0aW9ucyI+PC9hPjwvUD4KKzxicj48Yj4KK09wdGlvbiBiaXRzIGZvciA8Yj5wY3JlMl9tYXRjaCgpPC9iPgorPC9iPjxicj4KKzxQPgorVGhlIHVudXNlZCBiaXRzIG9mIHRoZSA8aT5vcHRpb25zPC9pPiBhcmd1bWVudCBmb3IgPGI+cGNyZTJfbWF0Y2goKTwvYj4gbXVzdCBiZQoremVyby4gVGhlIG9ubHkgYml0cyB0aGF0IG1heSBiZSBzZXQgYXJlIFBDUkUyX0FOQ0hPUkVELCBQQ1JFMl9OT1RCT0wsCitQQ1JFMl9OT1RFT0wsIFBDUkUyX05PVEVNUFRZLCBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJULCBQQ1JFMl9OT19VVEZfQ0hFQ0ssCitQQ1JFMl9QQVJUSUFMX0hBUkQsIGFuZCBQQ1JFMl9QQVJUSUFMX1NPRlQuIFRoZWlyIGFjdGlvbiBpcyBkZXNjcmliZWQgYmVsb3cuCis8L1A+Cis8UD4KK1NldHRpbmcgUENSRTJfQU5DSE9SRUQgYXQgbWF0Y2ggdGltZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBqdXN0LWluLXRpbWUgKEpJVCkKK2NvbXBpbGVyLiBJZiBpdCBpcyBzZXQsIEpJVCBtYXRjaGluZyBpcyBkaXNhYmxlZCBhbmQgdGhlIG5vcm1hbCBpbnRlcnByZXRpdmUKK2NvZGUgaW4gPGI+cGNyZTJfbWF0Y2goKTwvYj4gaXMgcnVuLiBUaGUgcmVtYWluaW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBmb3IgSklUCittYXRjaGluZy4KKzxwcmU+CisgIFBDUkUyX0FOQ0hPUkVECis8L3ByZT4KK1RoZSBQQ1JFMl9BTkNIT1JFRCBvcHRpb24gbGltaXRzIDxiPnBjcmUyX21hdGNoKCk8L2I+IHRvIG1hdGNoaW5nIGF0IHRoZSBmaXJzdAorbWF0Y2hpbmcgcG9zaXRpb24uIElmIGEgcGF0dGVybiB3YXMgY29tcGlsZWQgd2l0aCBQQ1JFMl9BTkNIT1JFRCwgb3IgdHVybmVkIG91dAordG8gYmUgYW5jaG9yZWQgYnkgdmlydHVlIG9mIGl0cyBjb250ZW50cywgaXQgY2Fubm90IGJlIG1hZGUgdW5hY2hvcmVkIGF0CittYXRjaGluZyB0aW1lLiBOb3RlIHRoYXQgc2V0dGluZyB0aGUgb3B0aW9uIGF0IG1hdGNoIHRpbWUgZGlzYWJsZXMgSklUCittYXRjaGluZy4KKzxwcmU+CisgIFBDUkUyX05PVEJPTAorPC9wcmU+CitUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhhdCBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIG5vdCB0aGUKK2JlZ2lubmluZyBvZiBhIGxpbmUsIHNvIHRoZSBjaXJjdW1mbGV4IG1ldGFjaGFyYWN0ZXIgc2hvdWxkIG5vdCBtYXRjaCBiZWZvcmUKK2l0LiBTZXR0aW5nIHRoaXMgd2l0aG91dCBoYXZpbmcgc2V0IFBDUkUyX01VTFRJTElORSBhdCBjb21waWxlIHRpbWUgY2F1c2VzCitjaXJjdW1mbGV4IG5ldmVyIHRvIG1hdGNoLiBUaGlzIG9wdGlvbiBhZmZlY3RzIG9ubHkgdGhlIGJlaGF2aW91ciBvZiB0aGUKK2NpcmN1bWZsZXggbWV0YWNoYXJhY3Rlci4gSXQgZG9lcyBub3QgYWZmZWN0IFxBLgorPHByZT4KKyAgUENSRTJfTk9URU9MCis8L3ByZT4KK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIG5vdCB0aGUgZW5kIG9mIGEKK2xpbmUsIHNvIHRoZSBkb2xsYXIgbWV0YWNoYXJhY3RlciBzaG91bGQgbm90IG1hdGNoIGl0IG5vciAoZXhjZXB0IGluIG11bHRpbGluZQorbW9kZSkgYSBuZXdsaW5lIGltbWVkaWF0ZWx5IGJlZm9yZSBpdC4gU2V0dGluZyB0aGlzIHdpdGhvdXQgaGF2aW5nIHNldAorUENSRTJfTVVMVElMSU5FIGF0IGNvbXBpbGUgdGltZSBjYXVzZXMgZG9sbGFyIG5ldmVyIHRvIG1hdGNoLiBUaGlzIG9wdGlvbgorYWZmZWN0cyBvbmx5IHRoZSBiZWhhdmlvdXIgb2YgdGhlIGRvbGxhciBtZXRhY2hhcmFjdGVyLiBJdCBkb2VzIG5vdCBhZmZlY3QgXFoKK29yIFx6LgorPHByZT4KKyAgUENSRTJfTk9URU1QVFkKKzwvcHJlPgorQW4gZW1wdHkgc3RyaW5nIGlzIG5vdCBjb25zaWRlcmVkIHRvIGJlIGEgdmFsaWQgbWF0Y2ggaWYgdGhpcyBvcHRpb24gaXMgc2V0LiBJZgordGhlcmUgYXJlIGFsdGVybmF0aXZlcyBpbiB0aGUgcGF0dGVybiwgdGhleSBhcmUgdHJpZWQuIElmIGFsbCB0aGUgYWx0ZXJuYXRpdmVzCittYXRjaCB0aGUgZW1wdHkgc3RyaW5nLCB0aGUgZW50aXJlIG1hdGNoIGZhaWxzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4KKzxwcmU+CisgIGE/Yj8KKzwvcHJlPgoraXMgYXBwbGllZCB0byBhIHN0cmluZyBub3QgYmVnaW5uaW5nIHdpdGggImEiIG9yICJiIiwgaXQgbWF0Y2hlcyBhbiBlbXB0eQorc3RyaW5nIGF0IHRoZSBzdGFydCBvZiB0aGUgc3ViamVjdC4gV2l0aCBQQ1JFMl9OT1RFTVBUWSBzZXQsIHRoaXMgbWF0Y2ggaXMgbm90Cit2YWxpZCwgc28gPGI+cGNyZTJfbWF0Y2goKTwvYj4gc2VhcmNoZXMgZnVydGhlciBpbnRvIHRoZSBzdHJpbmcgZm9yIG9jY3VycmVuY2VzCitvZiAiYSIgb3IgImIiLgorPHByZT4KKyAgUENSRTJfTk9URU1QVFlfQVRTVEFSVAorPC9wcmU+CitUaGlzIGlzIGxpa2UgUENSRTJfTk9URU1QVFksIGV4Y2VwdCB0aGF0IGl0IGxvY2tzIG91dCBhbiBlbXB0eSBzdHJpbmcgbWF0Y2gKK29ubHkgYXQgdGhlIGZpcnN0IG1hdGNoaW5nIHBvc2l0aW9uLCB0aGF0IGlzLCBhdCB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3QgcGx1cwordGhlIHN0YXJ0aW5nIG9mZnNldC4gQW4gZW1wdHkgc3RyaW5nIG1hdGNoIGxhdGVyIGluIHRoZSBzdWJqZWN0IGlzIHBlcm1pdHRlZC4KK0lmIHRoZSBwYXR0ZXJuIGlzIGFuY2hvcmVkLCBzdWNoIGEgbWF0Y2ggY2FuIG9jY3VyIG9ubHkgaWYgdGhlIHBhdHRlcm4gY29udGFpbnMKK1xLLgorPHByZT4KKyAgUENSRTJfTk9fVVRGX0NIRUNLCis8L3ByZT4KK1doZW4gUENSRTJfVVRGIGlzIHNldCBhdCBjb21waWxlIHRpbWUsIHRoZSB2YWxpZGl0eSBvZiB0aGUgc3ViamVjdCBhcyBhIFVURgorc3RyaW5nIGlzIGNoZWNrZWQgYnkgZGVmYXVsdCB3aGVuIDxiPnBjcmUyX21hdGNoKCk8L2I+IGlzIHN1YnNlcXVlbnRseSBjYWxsZWQuCitJZiBhIG5vbi16ZXJvIHN0YXJ0aW5nIG9mZnNldCBpcyBnaXZlbiwgdGhlIGNoZWNrIGlzIGFwcGxpZWQgb25seSB0byB0aGF0IHBhcnQKK29mIHRoZSBzdWJqZWN0IHRoYXQgY291bGQgYmUgaW5zcGVjdGVkIGR1cmluZyBtYXRjaGluZywgYW5kIHRoZXJlIGlzIGEgY2hlY2sKK3RoYXQgdGhlIHN0YXJ0aW5nIG9mZnNldCBwb2ludHMgdG8gdGhlIGZpcnN0IGNvZGUgdW5pdCBvZiBhIGNoYXJhY3RlciBvciB0byB0aGUKK2VuZCBvZiB0aGUgc3ViamVjdC4gSWYgdGhlcmUgYXJlIG5vIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucyBpbiB0aGUgcGF0dGVybiwgdGhlCitjaGVjayBzdGFydHMgYXQgdGhlIHN0YXJ0aW5nIG9mZnNldC4gT3RoZXJ3aXNlLCBpdCBzdGFydHMgYXQgdGhlIGxlbmd0aCBvZiB0aGUKK2xvbmdlc3QgbG9va2JlaGluZCBiZWZvcmUgdGhlIHN0YXJ0aW5nIG9mZnNldCwgb3IgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0CitpZiB0aGVyZSBhcmUgbm90IHRoYXQgbWFueSBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgc3RhcnRpbmcgb2Zmc2V0LiBOb3RlIHRoYXQgdGhlCitzZXF1ZW5jZXMgXGIgYW5kIFxCIGFyZSBvbmUtY2hhcmFjdGVyIGxvb2tiZWhpbmRzLgorPC9QPgorPFA+CitUaGUgY2hlY2sgaXMgY2FycmllZCBvdXQgYmVmb3JlIGFueSBvdGhlciBwcm9jZXNzaW5nIHRha2VzIHBsYWNlLCBhbmQgYQorbmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpZiB0aGUgY2hlY2sgZmFpbHMuIFRoZXJlIGFyZSBzZXZlcmFsIFVURiBlcnJvcgorY29kZXMgZm9yIGVhY2ggY29kZSB1bml0IHdpZHRoLCBjb3JyZXNwb25kaW5nIHRvIGRpZmZlcmVudCBwcm9ibGVtcyB3aXRoIHRoZQorY29kZSB1bml0IHNlcXVlbmNlLiBUaGVyZSBhcmUgZGlzY3Vzc2lvbnMgYWJvdXQgdGhlIHZhbGlkaXR5IG9mCis8YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCN1dGY4c3RyaW5ncyI+VVRGLTggc3RyaW5ncyw8L2E+Cis8YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCN1dGYxNnN0cmluZ3MiPlVURi0xNiBzdHJpbmdzLDwvYT4KK2FuZAorPGEgaHJlZj0icGNyZTJ1bmljb2RlLmh0bWwjdXRmMzJzdHJpbmdzIj5VVEYtMzIgc3RyaW5nczwvYT4KK2luIHRoZQorPGEgaHJlZj0icGNyZTJ1bmljb2RlLmh0bWwiPjxiPnBjcmUydW5pY29kZTwvYj48L2E+CitwYWdlLgorPC9QPgorPFA+CitJZiB5b3Uga25vdyB0aGF0IHlvdXIgc3ViamVjdCBpcyB2YWxpZCwgYW5kIHlvdSB3YW50IHRvIHNraXAgdGhlc2UgY2hlY2tzIGZvcgorcGVyZm9ybWFuY2UgcmVhc29ucywgeW91IGNhbiBzZXQgdGhlIFBDUkUyX05PX1VURl9DSEVDSyBvcHRpb24gd2hlbiBjYWxsaW5nCis8Yj5wY3JlMl9tYXRjaCgpPC9iPi4gWW91IG1pZ2h0IHdhbnQgdG8gZG8gdGhpcyBmb3IgdGhlIHNlY29uZCBhbmQgc3Vic2VxdWVudAorY2FsbHMgdG8gPGI+cGNyZTJfbWF0Y2goKTwvYj4gaWYgeW91IGFyZSBtYWtpbmcgcmVwZWF0ZWQgY2FsbHMgdG8gZmluZCBhbGwgdGhlCittYXRjaGVzIGluIGEgc2luZ2xlIHN1YmplY3Qgc3RyaW5nLgorPC9QPgorPFA+CitOT1RFOiBXaGVuIFBDUkUyX05PX1VURl9DSEVDSyBpcyBzZXQsIHRoZSBlZmZlY3Qgb2YgcGFzc2luZyBhbiBpbnZhbGlkIHN0cmluZworYXMgYSBzdWJqZWN0LCBvciBhbiBpbnZhbGlkIHZhbHVlIG9mIDxpPnN0YXJ0b2Zmc2V0PC9pPiwgaXMgdW5kZWZpbmVkLiBZb3VyCitwcm9ncmFtIG1heSBjcmFzaCBvciBsb29wIGluZGVmaW5pdGVseS4KKzxwcmU+CisgIFBDUkUyX1BBUlRJQUxfSEFSRAorICBQQ1JFMl9QQVJUSUFMX1NPRlQKKzwvcHJlPgorVGhlc2Ugb3B0aW9ucyB0dXJuIG9uIHRoZSBwYXJ0aWFsIG1hdGNoaW5nIGZlYXR1cmUuIEEgcGFydGlhbCBtYXRjaCBvY2N1cnMgaWYKK3RoZSBlbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIHJlYWNoZWQgc3VjY2Vzc2Z1bGx5LCBidXQgdGhlcmUgYXJlIG5vdCBlbm91Z2gKK3N1YmplY3QgY2hhcmFjdGVycyB0byBjb21wbGV0ZSB0aGUgbWF0Y2guIElmIHRoaXMgaGFwcGVucyB3aGVuCitQQ1JFMl9QQVJUSUFMX1NPRlQgKGJ1dCBub3QgUENSRTJfUEFSVElBTF9IQVJEKSBpcyBzZXQsIG1hdGNoaW5nIGNvbnRpbnVlcyBieQordGVzdGluZyBhbnkgcmVtYWluaW5nIGFsdGVybmF0aXZlcy4gT25seSBpZiBubyBjb21wbGV0ZSBtYXRjaCBjYW4gYmUgZm91bmQgaXMKK1BDUkUyX0VSUk9SX1BBUlRJQUwgcmV0dXJuZWQgaW5zdGVhZCBvZiBQQ1JFMl9FUlJPUl9OT01BVENILiBJbiBvdGhlciB3b3JkcywKK1BDUkUyX1BBUlRJQUxfU09GVCBzcGVjaWZpZXMgdGhhdCB0aGUgY2FsbGVyIGlzIHByZXBhcmVkIHRvIGhhbmRsZSBhIHBhcnRpYWwKK21hdGNoLCBidXQgb25seSBpZiBubyBjb21wbGV0ZSBtYXRjaCBjYW4gYmUgZm91bmQuCis8L1A+Cis8UD4KK0lmIFBDUkUyX1BBUlRJQUxfSEFSRCBpcyBzZXQsIGl0IG92ZXJyaWRlcyBQQ1JFMl9QQVJUSUFMX1NPRlQuIEluIHRoaXMgY2FzZSwgaWYKK2EgcGFydGlhbCBtYXRjaCBpcyBmb3VuZCwgPGI+cGNyZTJfbWF0Y2goKTwvYj4gaW1tZWRpYXRlbHkgcmV0dXJucworUENSRTJfRVJST1JfUEFSVElBTCwgd2l0aG91dCBjb25zaWRlcmluZyBhbnkgb3RoZXIgYWx0ZXJuYXRpdmVzLiBJbiBvdGhlcgord29yZHMsIHdoZW4gUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldCwgYSBwYXJ0aWFsIG1hdGNoIGlzIGNvbnNpZGVyZWQgdG8gYmUgbW9yZQoraW1wb3J0YW50IHRoYXQgYW4gYWx0ZXJuYXRpdmUgY29tcGxldGUgbWF0Y2guCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgbW9yZSBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIHBhcnRpYWwgYW5kIG11bHRpLXNlZ21lbnQgbWF0Y2hpbmcsIHdpdGgKK2V4YW1wbGVzLCBpbiB0aGUKKzxhIGhyZWY9InBjcmUycGFydGlhbC5odG1sIj48Yj5wY3JlMnBhcnRpYWw8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMyNyIgaHJlZj0iI1RPQzEiPk5FV0xJTkUgSEFORExJTkcgV0hFTiBNQVRDSElORzwvYT48YnI+Cis8UD4KK1doZW4gUENSRTIgaXMgYnVpbHQsIGEgZGVmYXVsdCBuZXdsaW5lIGNvbnZlbnRpb24gaXMgc2V0OyB0aGlzIGlzIHVzdWFsbHkgdGhlCitzdGFuZGFyZCBjb252ZW50aW9uIGZvciB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gVGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gaW4KK2EKKzxhIGhyZWY9IiNjb21waWxlY29udGV4dCI+Y29tcGlsZSBjb250ZXh0PC9hPgorYnkgY2FsbGluZyA8Yj5wY3JlMl9zZXRfbmV3bGluZSgpPC9iPi4gSXQgY2FuIGFsc28gYmUgb3ZlcnJpZGRlbiBieSBzdGFydGluZyBhCitwYXR0ZXJuIHN0cmluZyB3aXRoLCBmb3IgZXhhbXBsZSwgKCpDUkxGKSwgYXMgZGVzY3JpYmVkIGluIHRoZQorPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwjbmV3bGluZXMiPnNlY3Rpb24gb24gbmV3bGluZSBjb252ZW50aW9uczwvYT4KK2luIHRoZQorPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwiPjxiPnBjcmUycGF0dGVybjwvYj48L2E+CitwYWdlLiBEdXJpbmcgbWF0Y2hpbmcsIHRoZSBuZXdsaW5lIGNob2ljZSBhZmZlY3RzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGRvdCwKK2NpcmN1bWZsZXgsIGFuZCBkb2xsYXIgbWV0YWNoYXJhY3RlcnMuIEl0IG1heSBhbHNvIGFsdGVyIHRoZSB3YXkgdGhlIG1hdGNoCitzdGFydGluZyBwb3NpdGlvbiBpcyBhZHZhbmNlZCBhZnRlciBhIG1hdGNoIGZhaWx1cmUgZm9yIGFuIHVuYW5jaG9yZWQgcGF0dGVybi4KKzwvUD4KKzxQPgorV2hlbiBQQ1JFMl9ORVdMSU5FX0NSTEYsIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRiwgb3IgUENSRTJfTkVXTElORV9BTlkgaXMgc2V0IGFzCit0aGUgbmV3bGluZSBjb252ZW50aW9uLCBhbmQgYSBtYXRjaCBhdHRlbXB0IGZvciBhbiB1bmFuY2hvcmVkIHBhdHRlcm4gZmFpbHMKK3doZW4gdGhlIGN1cnJlbnQgc3RhcnRpbmcgcG9zaXRpb24gaXMgYXQgYSBDUkxGIHNlcXVlbmNlLCBhbmQgdGhlIHBhdHRlcm4KK2NvbnRhaW5zIG5vIGV4cGxpY2l0IG1hdGNoZXMgZm9yIENSIG9yIExGIGNoYXJhY3RlcnMsIHRoZSBtYXRjaCBwb3NpdGlvbiBpcworYWR2YW5jZWQgYnkgdHdvIGNoYXJhY3RlcnMgaW5zdGVhZCBvZiBvbmUsIGluIG90aGVyIHdvcmRzLCB0byBhZnRlciB0aGUgQ1JMRi4KKzwvUD4KKzxQPgorVGhlIGFib3ZlIHJ1bGUgaXMgYSBjb21wcm9taXNlIHRoYXQgbWFrZXMgdGhlIG1vc3QgY29tbW9uIGNhc2VzIHdvcmsgYXMKK2V4cGVjdGVkLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4gaXMgLitBIChhbmQgdGhlIFBDUkUyX0RPVEFMTCBvcHRpb24gaXMKK25vdCBzZXQpLCBpdCBkb2VzIG5vdCBtYXRjaCB0aGUgc3RyaW5nICJcclxuQSIgYmVjYXVzZSwgYWZ0ZXIgZmFpbGluZyBhdCB0aGUKK3N0YXJ0LCBpdCBza2lwcyBib3RoIHRoZSBDUiBhbmQgdGhlIExGIGJlZm9yZSByZXRyeWluZy4gSG93ZXZlciwgdGhlIHBhdHRlcm4KK1tcclxuXUEgZG9lcyBtYXRjaCB0aGF0IHN0cmluZywgYmVjYXVzZSBpdCBjb250YWlucyBhbiBleHBsaWNpdCBDUiBvciBMRgorcmVmZXJlbmNlLCBhbmQgc28gYWR2YW5jZXMgb25seSBieSBvbmUgY2hhcmFjdGVyIGFmdGVyIHRoZSBmaXJzdCBmYWlsdXJlLgorPC9QPgorPFA+CitBbiBleHBsaWNpdCBtYXRjaCBmb3IgQ1Igb2YgTEYgaXMgZWl0aGVyIGEgbGl0ZXJhbCBhcHBlYXJhbmNlIG9mIG9uZSBvZiB0aG9zZQorY2hhcmFjdGVycyBpbiB0aGUgcGF0dGVybiwgb3Igb25lIG9mIHRoZSBcciBvciBcbiBlc2NhcGUgc2VxdWVuY2VzLiBJbXBsaWNpdAorbWF0Y2hlcyBzdWNoIGFzIFteWF0gZG8gbm90IGNvdW50LCBub3IgZG9lcyBccywgZXZlbiB0aG91Z2ggaXQgaW5jbHVkZXMgQ1IgYW5kCitMRiBpbiB0aGUgY2hhcmFjdGVycyB0aGF0IGl0IG1hdGNoZXMuCis8L1A+Cis8UD4KK05vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIGFub21hbG91cyBlZmZlY3RzIG1heSBzdGlsbCBvY2N1ciB3aGVuIENSTEYgaXMgYQordmFsaWQgbmV3bGluZSBzZXF1ZW5jZSBhbmQgZXhwbGljaXQgXHIgb3IgXG4gZXNjYXBlcyBhcHBlYXIgaW4gdGhlIHBhdHRlcm4uCis8YSBuYW1lPSJtYXRjaGVkc3RyaW5ncyI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMyOCIgaHJlZj0iI1RPQzEiPkhPVyBQQ1JFMl9NQVRDSCgpIFJFVFVSTlMgQSBTVFJJTkcgQU5EIENBUFRVUkVEIFNVQlNUUklOR1M8L2E+PGJyPgorPFA+Cis8Yj51aW50MzJfdCBwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudChwY3JlMl9tYXRjaF9kYXRhICo8aT5tYXRjaF9kYXRhPC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+UENSRTJfU0laRSAqcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcihwY3JlMl9tYXRjaF9kYXRhICo8aT5tYXRjaF9kYXRhPC9pPik7PC9iPgorPC9QPgorPFA+CitJbiBnZW5lcmFsLCBhIHBhdHRlcm4gbWF0Y2hlcyBhIGNlcnRhaW4gcG9ydGlvbiBvZiB0aGUgc3ViamVjdCwgYW5kIGluCithZGRpdGlvbiwgZnVydGhlciBzdWJzdHJpbmdzIGZyb20gdGhlIHN1YmplY3QgbWF5IGJlIHBpY2tlZCBvdXQgYnkKK3BhcmVudGhlc2l6ZWQgcGFydHMgb2YgdGhlIHBhdHRlcm4uIEZvbGxvd2luZyB0aGUgdXNhZ2UgaW4gSmVmZnJleSBGcmllZGwncworYm9vaywgdGhpcyBpcyBjYWxsZWQgImNhcHR1cmluZyIgaW4gd2hhdCBmb2xsb3dzLCBhbmQgdGhlIHBocmFzZSAiY2FwdHVyaW5nCitzdWJwYXR0ZXJuIiBvciAiY2FwdHVyaW5nIGdyb3VwIiBpcyB1c2VkIGZvciBhIGZyYWdtZW50IG9mIGEgcGF0dGVybiB0aGF0IHBpY2tzCitvdXQgYSBzdWJzdHJpbmcuIFBDUkUyIHN1cHBvcnRzIHNldmVyYWwgb3RoZXIga2luZHMgb2YgcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJuCit0aGF0IGRvIG5vdCBjYXVzZSBzdWJzdHJpbmdzIHRvIGJlIGNhcHR1cmVkLiBUaGUgPGI+cGNyZTJfcGF0dGVybl9pbmZvKCk8L2I+CitmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBmaW5kIG91dCBob3cgbWFueSBjYXB0dXJpbmcgc3VicGF0dGVybnMgdGhlcmUgYXJlIGluIGEKK2NvbXBpbGVkIHBhdHRlcm4uCis8L1A+Cis8UD4KK1lvdSBjYW4gdXNlIGF1eGlsaWFyeSBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyBjYXB0dXJlZCBzdWJzdHJpbmdzCis8YSBocmVmPSIjZXh0cmFjdGJ5bnVtYmVyIj5ieSBudW1iZXI8L2E+CitvcgorPGEgaHJlZj0iI2V4dHJhY3RieW5hbWUiPmJ5IG5hbWUsPC9hPgorYXMgZGVzY3JpYmVkIGluIHNlY3Rpb25zIGJlbG93LgorPC9QPgorPFA+CitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIG1ha2UgZGlyZWN0IHVzZSBvZiB0aGUgdmVjdG9yIG9mIFBDUkUyX1NJWkUgdmFsdWVzLAorY2FsbGVkIHRoZSA8Yj5vdmVjdG9yPC9iPiwgd2hpY2ggY29udGFpbnMgdGhlIG9mZnNldHMgb2YgY2FwdHVyZWQgc3RyaW5ncy4gSXQgaXMKK3BhcnQgb2YgdGhlCis8YSBocmVmPSIjbWF0Y2hkYXRhYmxvY2siPm1hdGNoIGRhdGEgYmxvY2suPC9hPgorVGhlIGZ1bmN0aW9uIDxiPnBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIoKTwvYj4gcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUKK292ZWN0b3IsIGFuZCA8Yj5wY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudCgpPC9iPiByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFpcnMgb2YKK3ZhbHVlcyBpdCBjb250YWlucy4KKzwvUD4KKzxQPgorV2l0aGluIHRoZSBvdmVjdG9yLCB0aGUgZmlyc3QgaW4gZWFjaCBwYWlyIG9mIHZhbHVlcyBpcyBzZXQgdG8gdGhlIG9mZnNldCBvZgordGhlIGZpcnN0IGNvZGUgdW5pdCBvZiBhIHN1YnN0cmluZywgYW5kIHRoZSBzZWNvbmQgaXMgc2V0IHRvIHRoZSBvZmZzZXQgb2YgdGhlCitmaXJzdCBjb2RlIHVuaXQgYWZ0ZXIgdGhlIGVuZCBvZiBhIHN1YnN0cmluZy4gVGhlc2UgdmFsdWVzIGFyZSBhbHdheXMgY29kZSB1bml0CitvZmZzZXRzLCBub3QgY2hhcmFjdGVyIG9mZnNldHMuIFRoYXQgaXMsIHRoZXkgYXJlIGJ5dGUgb2Zmc2V0cyBpbiB0aGUgOC1iaXQKK2xpYnJhcnksIDE2LWJpdCBvZmZzZXRzIGluIHRoZSAxNi1iaXQgbGlicmFyeSwgYW5kIDMyLWJpdCBvZmZzZXRzIGluIHRoZSAzMi1iaXQKK2xpYnJhcnkuCis8L1A+Cis8UD4KK0FmdGVyIGEgcGFydGlhbCBtYXRjaCAoZXJyb3IgcmV0dXJuIFBDUkUyX0VSUk9SX1BBUlRJQUwpLCBvbmx5IHRoZSBmaXJzdCBwYWlyCitvZiBvZmZzZXRzICh0aGF0IGlzLCA8aT5vdmVjdG9yWzBdPC9pPiBhbmQgPGk+b3ZlY3RvclsxXTwvaT4pIGFyZSBzZXQuIFRoZXkKK2lkZW50aWZ5IHRoZSBwYXJ0IG9mIHRoZSBzdWJqZWN0IHRoYXQgd2FzIHBhcnRpYWxseSBtYXRjaGVkLiBTZWUgdGhlCis8YSBocmVmPSJwY3JlMnBhcnRpYWwuaHRtbCI+PGI+cGNyZTJwYXJ0aWFsPC9iPjwvYT4KK2RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgb2YgcGFydGlhbCBtYXRjaGluZy4KKzwvUD4KKzxQPgorQWZ0ZXIgYSBzdWNjZXNzZnVsIG1hdGNoLCB0aGUgZmlyc3QgcGFpciBvZiBvZmZzZXRzIGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2YKK3RoZSBzdWJqZWN0IHN0cmluZyB0aGF0IHdhcyBtYXRjaGVkIGJ5IHRoZSBlbnRpcmUgcGF0dGVybi4gVGhlIG5leHQgcGFpciBpcwordXNlZCBmb3IgdGhlIGZpcnN0IGNhcHR1cmluZyBzdWJwYXR0ZXJuLCBhbmQgc28gb24uIFRoZSB2YWx1ZSByZXR1cm5lZCBieQorPGI+cGNyZTJfbWF0Y2goKTwvYj4gaXMgb25lIG1vcmUgdGhhbiB0aGUgaGlnaGVzdCBudW1iZXJlZCBwYWlyIHRoYXQgaGFzIGJlZW4KK3NldC4gRm9yIGV4YW1wbGUsIGlmIHR3byBzdWJzdHJpbmdzIGhhdmUgYmVlbiBjYXB0dXJlZCwgdGhlIHJldHVybmVkIHZhbHVlIGlzCiszLiBJZiB0aGVyZSBhcmUgbm8gY2FwdHVyaW5nIHN1YnBhdHRlcm5zLCB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYSBzdWNjZXNzZnVsCittYXRjaCBpcyAxLCBpbmRpY2F0aW5nIHRoYXQganVzdCB0aGUgZmlyc3QgcGFpciBvZiBvZmZzZXRzIGhhcyBiZWVuIHNldC4KKzwvUD4KKzxQPgorSWYgYSBwYXR0ZXJuIHVzZXMgdGhlIFxLIGVzY2FwZSBzZXF1ZW5jZSB3aXRoaW4gYSBwb3NpdGl2ZSBhc3NlcnRpb24sIHRoZQorcmVwb3J0ZWQgc3RhcnQgb2YgYSBzdWNjZXNzZnVsIG1hdGNoIGNhbiBiZSBncmVhdGVyIHRoYW4gdGhlIGVuZCBvZiB0aGUgbWF0Y2guCitGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4gKD89YWJcSykgaXMgbWF0Y2hlZCBhZ2FpbnN0ICJhYiIsIHRoZSBzdGFydCBhbmQKK2VuZCBvZmZzZXQgdmFsdWVzIGZvciB0aGUgbWF0Y2ggYXJlIDIgYW5kIDAuCis8L1A+Cis8UD4KK0lmIGEgY2FwdHVyaW5nIHN1YnBhdHRlcm4gZ3JvdXAgaXMgbWF0Y2hlZCByZXBlYXRlZGx5IHdpdGhpbiBhIHNpbmdsZSBtYXRjaAorb3BlcmF0aW9uLCBpdCBpcyB0aGUgbGFzdCBwb3J0aW9uIG9mIHRoZSBzdWJqZWN0IHRoYXQgaXQgbWF0Y2hlZCB0aGF0IGlzCityZXR1cm5lZC4KKzwvUD4KKzxQPgorSWYgdGhlIG92ZWN0b3IgaXMgdG9vIHNtYWxsIHRvIGhvbGQgYWxsIHRoZSBjYXB0dXJlZCBzdWJzdHJpbmcgb2Zmc2V0cywgYXMgbXVjaAorYXMgcG9zc2libGUgaXMgZmlsbGVkIGluLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSBvZiB6ZXJvLiBJZiBjYXB0dXJlZAorc3Vic3RyaW5ncyBhcmUgbm90IG9mIGludGVyZXN0LCA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBtYXkgYmUgY2FsbGVkIHdpdGggYSBtYXRjaAorZGF0YSBibG9jayB3aG9zZSBvdmVjdG9yIGlzIG9mIG1pbmltdW0gbGVuZ3RoICh0aGF0IGlzLCBvbmUgcGFpcikuIEhvd2V2ZXIsIGlmCit0aGUgcGF0dGVybiBjb250YWlucyBiYWNrIHJlZmVyZW5jZXMgYW5kIHRoZSA8aT5vdmVjdG9yPC9pPiBpcyBub3QgYmlnIGVub3VnaCB0bworcmVtZW1iZXIgdGhlIHJlbGF0ZWQgc3Vic3RyaW5ncywgUENSRTIgaGFzIHRvIGdldCBhZGRpdGlvbmFsIG1lbW9yeSBmb3IgdXNlCitkdXJpbmcgbWF0Y2hpbmcuIFRodXMgaXQgaXMgdXN1YWxseSBhZHZpc2FibGUgdG8gc2V0IHVwIGEgbWF0Y2ggZGF0YSBibG9jaworY29udGFpbmluZyBhbiBvdmVjdG9yIG9mIHJlYXNvbmFibGUgc2l6ZS4KKzwvUD4KKzxQPgorSXQgaXMgcG9zc2libGUgZm9yIGNhcHR1cmluZyBzdWJwYXR0ZXJuIG51bWJlciA8aT5uKzE8L2k+IHRvIG1hdGNoIHNvbWUgcGFydCBvZgordGhlIHN1YmplY3Qgd2hlbiBzdWJwYXR0ZXJuIDxpPm48L2k+IGhhcyBub3QgYmVlbiB1c2VkIGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmCit0aGUgc3RyaW5nICJhYmMiIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgcGF0dGVybiAoYXwoeikpKGJjKSB0aGUgcmV0dXJuIGZyb20gdGhlCitmdW5jdGlvbiBpcyA0LCBhbmQgc3VicGF0dGVybnMgMSBhbmQgMyBhcmUgbWF0Y2hlZCwgYnV0IDIgaXMgbm90LiBXaGVuIHRoaXMKK2hhcHBlbnMsIGJvdGggdmFsdWVzIGluIHRoZSBvZmZzZXQgcGFpcnMgY29ycmVzcG9uZGluZyB0byB1bnVzZWQgc3VicGF0dGVybnMKK2FyZSBzZXQgdG8gUENSRTJfVU5TRVQuCis8L1A+Cis8UD4KK09mZnNldCB2YWx1ZXMgdGhhdCBjb3JyZXNwb25kIHRvIHVudXNlZCBzdWJwYXR0ZXJucyBhdCB0aGUgZW5kIG9mIHRoZQorZXhwcmVzc2lvbiBhcmUgYWxzbyBzZXQgdG8gUENSRTJfVU5TRVQuIEZvciBleGFtcGxlLCBpZiB0aGUgc3RyaW5nICJhYmMiIGlzCittYXRjaGVkIGFnYWluc3QgdGhlIHBhdHRlcm4gKGFiYykoeCh5eik/KT8gc3VicGF0dGVybnMgMiBhbmQgMyBhcmUgbm90IG1hdGNoZWQuCitUaGUgcmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uIGlzIDIsIGJlY2F1c2UgdGhlIGhpZ2hlc3QgdXNlZCBjYXB0dXJpbmcKK3N1YnBhdHRlcm4gbnVtYmVyIGlzIDEuIFRoZSBvZmZzZXRzIGZvciBmb3IgdGhlIHNlY29uZCBhbmQgdGhpcmQgY2FwdHVyaW5nCitzdWJwYXR0ZXJucyAoYXNzdW1pbmcgdGhlIHZlY3RvciBpcyBsYXJnZSBlbm91Z2gsIG9mIGNvdXJzZSkgYXJlIHNldCB0bworUENSRTJfVU5TRVQuCis8L1A+Cis8UD4KK0VsZW1lbnRzIGluIHRoZSBvdmVjdG9yIHRoYXQgZG8gbm90IGNvcnJlc3BvbmQgdG8gY2FwdHVyaW5nIHBhcmVudGhlc2VzIGluIHRoZQorcGF0dGVybiBhcmUgbmV2ZXIgY2hhbmdlZC4gVGhhdCBpcywgaWYgYSBwYXR0ZXJuIGNvbnRhaW5zIDxpPm48L2k+IGNhcHR1cmluZworcGFyZW50aGVzZXMsIG5vIG1vcmUgdGhhbiA8aT5vdmVjdG9yWzBdPC9pPiB0byA8aT5vdmVjdG9yWzJuKzFdPC9pPiBhcmUgc2V0IGJ5Cis8Yj5wY3JlMl9tYXRjaCgpPC9iPi4gVGhlIG90aGVyIGVsZW1lbnRzIHJldGFpbiB3aGF0ZXZlciB2YWx1ZXMgdGhleSBwcmV2aW91c2x5CitoYWQuCis8YSBuYW1lPSJtYXRjaG90aGVyZGF0YSI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMyOSIgaHJlZj0iI1RPQzEiPk9USEVSIElORk9STUFUSU9OIEFCT1VUIEEgTUFUQ0g8L2E+PGJyPgorPFA+Cis8Yj5QQ1JFMl9TUFRSIHBjcmUyX2dldF9tYXJrKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5QQ1JFMl9TSVpFIHBjcmUyX2dldF9zdGFydGNoYXIocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4pOzwvYj4KKzwvUD4KKzxQPgorQXMgd2VsbCBhcyB0aGUgb2Zmc2V0cyBpbiB0aGUgb3ZlY3Rvciwgb3RoZXIgaW5mb3JtYXRpb24gYWJvdXQgYSBtYXRjaCBpcworcmV0YWluZWQgaW4gdGhlIG1hdGNoIGRhdGEgYmxvY2sgYW5kIGNhbiBiZSByZXRyaWV2ZWQgYnkgdGhlIGFib3ZlIGZ1bmN0aW9ucyBpbgorYXBwcm9wcmlhdGUgY2lyY3Vtc3RhbmNlcy4gSWYgdGhleSBhcmUgY2FsbGVkIGF0IG90aGVyIHRpbWVzLCB0aGUgcmVzdWx0IGlzCit1bmRlZmluZWQuCis8L1A+Cis8UD4KK0FmdGVyIGEgc3VjY2Vzc2Z1bCBtYXRjaCwgYSBwYXJ0aWFsIG1hdGNoIChQQ1JFMl9FUlJPUl9QQVJUSUFMKSwgb3IgYSBmYWlsdXJlCit0byBtYXRjaCAoUENSRTJfRVJST1JfTk9NQVRDSCksIGEgKCpNQVJLKSBuYW1lIG1heSBiZSBhdmFpbGFibGUsIGFuZAorPGI+cGNyZTJfZ2V0X21hcmsoKTwvYj4gY2FuIGJlIGNhbGxlZC4gSXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCit6ZXJvLXRlcm1pbmF0ZWQgbmFtZSwgd2hpY2ggaXMgd2l0aGluIHRoZSBjb21waWxlZCBwYXR0ZXJuLiBPdGhlcndpc2UgTlVMTCBpcworcmV0dXJuZWQuIFRoZSBsZW5ndGggb2YgdGhlICgqTUFSSykgbmFtZSAoZXhjbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyB6ZXJvKSBpcworc3RvcmVkIGluIHRoZSBjb2RlIHVuaXQgdGhhdCBwcmVjZWVkcyB0aGUgbmFtZS4gWW91IHNob3VsZCB1c2UgdGhpcyBpbnN0ZWFkIG9mCityZWx5aW5nIG9uIHRoZSB0ZXJtaW5hdGluZyB6ZXJvIGlmIHRoZSAoKk1BUkspIG5hbWUgbWlnaHQgY29udGFpbiBhIGJpbmFyeQoremVyby4KKzwvUD4KKzxQPgorQWZ0ZXIgYSBzdWNjZXNzZnVsIG1hdGNoLCB0aGUgKCpNQVJLKSBuYW1lIHRoYXQgaXMgcmV0dXJuZWQgaXMgdGhlCitsYXN0IG9uZSBlbmNvdW50ZXJlZCBvbiB0aGUgbWF0Y2hpbmcgcGF0aCB0aHJvdWdoIHRoZSBwYXR0ZXJuLiBBZnRlciBhICJubworbWF0Y2giIG9yIGEgcGFydGlhbCBtYXRjaCwgdGhlIGxhc3QgZW5jb3VudGVyZWQgKCpNQVJLKSBuYW1lIGlzIHJldHVybmVkLiBGb3IKK2V4YW1wbGUsIGNvbnNpZGVyIHRoaXMgcGF0dGVybjoKKzxwcmU+CisgIF4oKk1BUks6QSkoKCpNQVJLOkIpYXxiKWMKKzwvcHJlPgorV2hlbiBpdCBtYXRjaGVzICJiYyIsIHRoZSByZXR1cm5lZCBtYXJrIGlzIEEuIFRoZSBCIG1hcmsgaXMgInNlZW4iIGluIHRoZSBmaXJzdAorYnJhbmNoIG9mIHRoZSBncm91cCwgYnV0IGl0IGlzIG5vdCBvbiB0aGUgbWF0Y2hpbmcgcGF0aC4gT24gdGhlIG90aGVyIGhhbmQsCit3aGVuIHRoaXMgcGF0dGVybiBmYWlscyB0byBtYXRjaCAiYngiLCB0aGUgcmV0dXJuZWQgbWFyayBpcyBCLgorPC9QPgorPFA+CitBZnRlciBhIHN1Y2Nlc3NmdWwgbWF0Y2gsIGEgcGFydGlhbCBtYXRjaCwgb3Igb25lIG9mIHRoZSBpbnZhbGlkIFVURiBlcnJvcnMKKyhmb3IgZXhhbXBsZSwgUENSRTJfRVJST1JfVVRGOF9FUlI1KSwgPGI+cGNyZTJfZ2V0X3N0YXJ0Y2hhcigpPC9iPiBjYW4gYmUKK2NhbGxlZC4gQWZ0ZXIgYSBzdWNjZXNzZnVsIG9yIHBhcnRpYWwgbWF0Y2ggaXQgcmV0dXJucyB0aGUgY29kZSB1bml0IG9mZnNldCBvZgordGhlIGNoYXJhY3RlciBhdCB3aGljaCB0aGUgbWF0Y2ggc3RhcnRlZC4gRm9yIGEgbm9uLXBhcnRpYWwgbWF0Y2gsIHRoaXMgY2FuIGJlCitkaWZmZXJlbnQgdG8gdGhlIHZhbHVlIG9mIDxpPm92ZWN0b3JbMF08L2k+IGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIHRoZSBcSworZXNjYXBlIHNlcXVlbmNlLiBBZnRlciBhIHBhcnRpYWwgbWF0Y2gsIGhvd2V2ZXIsIHRoaXMgdmFsdWUgaXMgYWx3YXlzIHRoZSBzYW1lCithcyA8aT5vdmVjdG9yWzBdPC9pPiBiZWNhdXNlIFxLIGRvZXMgbm90IGFmZmVjdCB0aGUgcmVzdWx0IG9mIGEgcGFydGlhbCBtYXRjaC4KKzwvUD4KKzxQPgorQWZ0ZXIgYSBVVEYgY2hlY2sgZmFpbHVyZSwgPGI+cGNyZTJfZ2V0X3N0YXJ0Y2hhcigpPC9iPiBjYW4gYmUgdXNlZCB0byBvYnRhaW4KK3RoZSBjb2RlIHVuaXQgb2Zmc2V0IG9mIHRoZSBpbnZhbGlkIFVURiBjaGFyYWN0ZXIuIERldGFpbHMgYXJlIGdpdmVuIGluIHRoZQorPGEgaHJlZj0icGNyZTJ1bmljb2RlLmh0bWwiPjxiPnBjcmUydW5pY29kZTwvYj48L2E+CitwYWdlLgorPGEgbmFtZT0iZXJyb3JsaXN0Ij48L2E+PC9QPgorPGJyPjxhIG5hbWU9IlNFQzMwIiBocmVmPSIjVE9DMSI+RVJST1IgUkVUVVJOUyBGUk9NIDxiPnBjcmUyX21hdGNoKCk8L2I+PC9hPjxicj4KKzxQPgorSWYgPGI+cGNyZTJfbWF0Y2goKTwvYj4gZmFpbHMsIGl0IHJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIuIFRoaXMgY2FuIGJlCitjb252ZXJ0ZWQgdG8gYSB0ZXh0IHN0cmluZyBieSBjYWxsaW5nIDxiPnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCk8L2I+LiBOZWdhdGl2ZQorZXJyb3IgY29kZXMgYXJlIGFsc28gcmV0dXJuZWQgYnkgb3RoZXIgZnVuY3Rpb25zLCBhbmQgYXJlIGRvY3VtZW50ZWQgd2l0aCB0aGVtLgorVGhlIGNvZGVzIGFyZSBnaXZlbiBuYW1lcyBpbiB0aGUgaGVhZGVyIGZpbGUuIElmIFVURiBjaGVja2luZyBpcyBpbiBmb3JjZSBhbmQKK2FuIGludmFsaWQgVVRGIHN1YmplY3Qgc3RyaW5nIGlzIGRldGVjdGVkLCBvbmUgb2YgYSBudW1iZXIgb2YgVVRGLXNwZWNpZmljCituZWdhdGl2ZSBlcnJvciBjb2RlcyBpcyByZXR1cm5lZC4gRGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlCis8YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCI+PGI+cGNyZTJ1bmljb2RlPC9iPjwvYT4KK3BhZ2UuIFRoZSBmb2xsb3dpbmcgYXJlIHRoZSBvdGhlciBlcnJvcnMgdGhhdCBtYXkgYmUgcmV0dXJuZWQgYnkKKzxiPnBjcmUyX21hdGNoKCk8L2I+OgorPHByZT4KKyAgUENSRTJfRVJST1JfTk9NQVRDSAorPC9wcmU+CitUaGUgc3ViamVjdCBzdHJpbmcgZGlkIG5vdCBtYXRjaCB0aGUgcGF0dGVybi4KKzxwcmU+CisgIFBDUkUyX0VSUk9SX1BBUlRJQUwKKzwvcHJlPgorVGhlIHN1YmplY3Qgc3RyaW5nIGRpZCBub3QgbWF0Y2gsIGJ1dCBpdCBkaWQgbWF0Y2ggcGFydGlhbGx5LiBTZWUgdGhlCis8YSBocmVmPSJwY3JlMnBhcnRpYWwuaHRtbCI+PGI+cGNyZTJwYXJ0aWFsPC9iPjwvYT4KK2RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgb2YgcGFydGlhbCBtYXRjaGluZy4KKzxwcmU+CisgIFBDUkUyX0VSUk9SX0JBRE1BR0lDCis8L3ByZT4KK1BDUkUyIHN0b3JlcyBhIDQtYnl0ZSAibWFnaWMgbnVtYmVyIiBhdCB0aGUgc3RhcnQgb2YgdGhlIGNvbXBpbGVkIGNvZGUsIHRvCitjYXRjaCB0aGUgY2FzZSB3aGVuIGl0IGlzIHBhc3NlZCBhIGp1bmsgcG9pbnRlci4gVGhpcyBpcyB0aGUgZXJyb3IgdGhhdCBpcworcmV0dXJuZWQgd2hlbiB0aGUgbWFnaWMgbnVtYmVyIGlzIG5vdCBwcmVzZW50LgorPHByZT4KKyAgUENSRTJfRVJST1JfQkFETU9ERQorPC9wcmU+CitUaGlzIGVycm9yIGlzIGdpdmVuIHdoZW4gYSBwYXR0ZXJuIHRoYXQgd2FzIGNvbXBpbGVkIGJ5IHRoZSA4LWJpdCBsaWJyYXJ5IGlzCitwYXNzZWQgdG8gYSAxNi1iaXQgb3IgMzItYml0IGxpYnJhcnkgZnVuY3Rpb24sIG9yIHZpY2UgdmVyc2EuCis8cHJlPgorICBQQ1JFMl9FUlJPUl9CQURPRkZTRVQKKzwvcHJlPgorVGhlIHZhbHVlIG9mIDxpPnN0YXJ0b2Zmc2V0PC9pPiB3YXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHN1YmplY3QuCis8cHJlPgorICBQQ1JFMl9FUlJPUl9CQURPUFRJT04KKzwvcHJlPgorQW4gdW5yZWNvZ25pemVkIGJpdCB3YXMgc2V0IGluIHRoZSA8aT5vcHRpb25zPC9pPiBhcmd1bWVudC4KKzxwcmU+CisgIFBDUkUyX0VSUk9SX0JBRFVURk9GRlNFVAorPC9wcmU+CitUaGUgVVRGIGNvZGUgdW5pdCBzZXF1ZW5jZSB0aGF0IHdhcyBwYXNzZWQgYXMgYSBzdWJqZWN0IHdhcyBjaGVja2VkIGFuZCBmb3VuZAordG8gYmUgdmFsaWQgKHRoZSBQQ1JFMl9OT19VVEZfQ0hFQ0sgb3B0aW9uIHdhcyBub3Qgc2V0KSwgYnV0IHRoZSB2YWx1ZSBvZgorPGk+c3RhcnRvZmZzZXQ8L2k+IGRpZCBub3QgcG9pbnQgdG8gdGhlIGJlZ2lubmluZyBvZiBhIFVURiBjaGFyYWN0ZXIgb3IgdGhlIGVuZAorb2YgdGhlIHN1YmplY3QuCis8cHJlPgorICBQQ1JFMl9FUlJPUl9DQUxMT1VUCis8L3ByZT4KK1RoaXMgZXJyb3IgaXMgbmV2ZXIgZ2VuZXJhdGVkIGJ5IDxiPnBjcmUyX21hdGNoKCk8L2I+IGl0c2VsZi4gSXQgaXMgcHJvdmlkZWQgZm9yCit1c2UgYnkgY2FsbG91dCBmdW5jdGlvbnMgdGhhdCB3YW50IHRvIGNhdXNlIDxiPnBjcmUyX21hdGNoKCk8L2I+IG9yCis8Yj5wY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSgpPC9iPiB0byByZXR1cm4gYSBkaXN0aW5jdGl2ZSBlcnJvciBjb2RlLiBTZWUgdGhlCis8YSBocmVmPSJwY3JlMmNhbGxvdXQuaHRtbCI+PGI+cGNyZTJjYWxsb3V0PC9iPjwvYT4KK2RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCis8cHJlPgorICBQQ1JFMl9FUlJPUl9JTlRFUk5BTAorPC9wcmU+CitBbiB1bmV4cGVjdGVkIGludGVybmFsIGVycm9yIGhhcyBvY2N1cnJlZC4gVGhpcyBlcnJvciBjb3VsZCBiZSBjYXVzZWQgYnkgYSBidWcKK2luIFBDUkUyIG9yIGJ5IG92ZXJ3cml0aW5nIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuLgorPHByZT4KKyAgUENSRTJfRVJST1JfSklUX0JBRE9QVElPTgorPC9wcmU+CitUaGlzIGVycm9yIGlzIHJldHVybmVkIHdoZW4gYSBwYXR0ZXJuIHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBzdHVkaWVkIHVzaW5nIEpJVAoraXMgYmVpbmcgbWF0Y2hlZCwgYnV0IHRoZSBtYXRjaGluZyBtb2RlIChwYXJ0aWFsIG9yIGNvbXBsZXRlIG1hdGNoKSBkb2VzIG5vdAorY29ycmVzcG9uZCB0byBhbnkgSklUIGNvbXBpbGF0aW9uIG1vZGUuIFdoZW4gdGhlIEpJVCBmYXN0IHBhdGggZnVuY3Rpb24gaXMKK3VzZWQsIHRoaXMgZXJyb3IgbWF5IGJlIGFsc28gZ2l2ZW4gZm9yIGludmFsaWQgb3B0aW9ucy4gU2VlIHRoZQorPGEgaHJlZj0icGNyZTJqaXQuaHRtbCI+PGI+cGNyZTJqaXQ8L2I+PC9hPgorZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorPHByZT4KKyAgUENSRTJfRVJST1JfSklUX1NUQUNLTElNSVQKKzwvcHJlPgorVGhpcyBlcnJvciBpcyByZXR1cm5lZCB3aGVuIGEgcGF0dGVybiB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgc3R1ZGllZCB1c2luZyBKSVQKK2lzIGJlaW5nIG1hdGNoZWQsIGJ1dCB0aGUgbWVtb3J5IGF2YWlsYWJsZSBmb3IgdGhlIGp1c3QtaW4tdGltZSBwcm9jZXNzaW5nCitzdGFjayBpcyBub3QgbGFyZ2UgZW5vdWdoLiBTZWUgdGhlCis8YSBocmVmPSJwY3JlMmppdC5odG1sIj48Yj5wY3JlMmppdDwvYj48L2E+Citkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuCis8cHJlPgorICBQQ1JFMl9FUlJPUl9NQVRDSExJTUlUCis8L3ByZT4KK1RoZSBiYWNrdHJhY2tpbmcgbGltaXQgd2FzIHJlYWNoZWQuCis8cHJlPgorICBQQ1JFMl9FUlJPUl9OT01FTU9SWQorPC9wcmU+CitJZiBhIHBhdHRlcm4gY29udGFpbnMgYmFjayByZWZlcmVuY2VzLCBidXQgdGhlIG92ZWN0b3IgaXMgbm90IGJpZyBlbm91Z2ggdG8KK3JlbWVtYmVyIHRoZSByZWZlcmVuY2VkIHN1YnN0cmluZ3MsIFBDUkUyIGdldHMgYSBibG9jayBvZiBtZW1vcnkgYXQgdGhlIHN0YXJ0CitvZiBtYXRjaGluZyB0byB1c2UgZm9yIHRoaXMgcHVycG9zZS4gVGhlcmUgYXJlIHNvbWUgb3RoZXIgc3BlY2lhbCBjYXNlcyB3aGVyZQorZXh0cmEgbWVtb3J5IGlzIG5lZWRlZCBkdXJpbmcgbWF0Y2hpbmcuIFRoaXMgZXJyb3IgaXMgZ2l2ZW4gd2hlbiBtZW1vcnkgY2Fubm90CitiZSBvYnRhaW5lZC4KKzxwcmU+CisgIFBDUkUyX0VSUk9SX05VTEwKKzwvcHJlPgorRWl0aGVyIHRoZSA8aT5jb2RlPC9pPiwgPGk+c3ViamVjdDwvaT4sIG9yIDxpPm1hdGNoX2RhdGE8L2k+IGFyZ3VtZW50IHdhcyBwYXNzZWQKK2FzIE5VTEwuCis8cHJlPgorICBQQ1JFMl9FUlJPUl9SRUNVUlNFTE9PUAorPC9wcmU+CitUaGlzIGVycm9yIGlzIHJldHVybmVkIHdoZW4gPGI+cGNyZTJfbWF0Y2goKTwvYj4gZGV0ZWN0cyBhIHJlY3Vyc2lvbiBsb29wIHdpdGhpbgordGhlIHBhdHRlcm4uIFNwZWNpZmljYWxseSwgaXQgbWVhbnMgdGhhdCBlaXRoZXIgdGhlIHdob2xlIHBhdHRlcm4gb3IgYQorc3VicGF0dGVybiBoYXMgYmVlbiBjYWxsZWQgcmVjdXJzaXZlbHkgZm9yIHRoZSBzZWNvbmQgdGltZSBhdCB0aGUgc2FtZSBwb3NpdGlvbgoraW4gdGhlIHN1YmplY3Qgc3RyaW5nLiBTb21lIHNpbXBsZSBwYXR0ZXJucyB0aGF0IG1pZ2h0IGRvIHRoaXMgYXJlIGRldGVjdGVkIGFuZAorZmF1bHRlZCBhdCBjb21waWxlIHRpbWUsIGJ1dCBtb3JlIGNvbXBsaWNhdGVkIGNhc2VzLCBpbiBwYXJ0aWN1bGFyIG11dHVhbAorcmVjdXJzaW9ucyBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgc3VicGF0dGVybnMsIGNhbm5vdCBiZSBkZXRlY3RlZCB1bnRpbCBtYXRjaGluZworaXMgYXR0ZW1wdGVkLgorPHByZT4KKyAgUENSRTJfRVJST1JfUkVDVVJTSU9OTElNSVQKKzwvcHJlPgorVGhlIGludGVybmFsIHJlY3Vyc2lvbiBsaW1pdCB3YXMgcmVhY2hlZC4KKzxhIG5hbWU9ImV4dHJhY3RieW51bWJlciI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMzMSIgaHJlZj0iI1RPQzEiPkVYVFJBQ1RJTkcgQ0FQVFVSRUQgU1VCU1RSSU5HUyBCWSBOVU1CRVI8L2E+PGJyPgorPFA+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICo8aT5tYXRjaF9kYXRhPC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPm51bWJlcjwvaT4sIFBDUkUyX1NJWkUgKjxpPmxlbmd0aDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludCBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICo8aT5tYXRjaF9kYXRhPC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPm51bWJlcjwvaT4sIFBDUkUyX1VDSEFSICo8aT5idWZmZXI8L2k+LDwvYj4KKzxiPiAgUENSRTJfU0laRSAqPGk+YnVmZmxlbjwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludCBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+bnVtYmVyPC9pPiwgUENSRTJfVUNIQVIgKio8aT5idWZmZXJwdHI8L2k+LDwvYj4KKzxiPiAgUENSRTJfU0laRSAqPGk+YnVmZmxlbjwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnZvaWQgcGNyZTJfc3Vic3RyaW5nX2ZyZWUoUENSRTJfVUNIQVIgKjxpPmJ1ZmZlcjwvaT4pOzwvYj4KKzwvUD4KKzxQPgorQ2FwdHVyZWQgc3Vic3RyaW5ncyBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgYnkgdXNpbmcgdGhlIG92ZWN0b3IgYXMgZGVzY3JpYmVkCis8YSBocmVmPSIjbWF0Y2hlZHN0cmluZ3MiPmFib3ZlLjwvYT4KK0ZvciBjb252ZW5pZW5jZSwgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIGV4dHJhY3RpbmcgY2FwdHVyZWQKK3N1YnN0cmluZ3MgYXMgbmV3LCBzZXBhcmF0ZSwgemVyby10ZXJtaW5hdGVkIHN0cmluZ3MuIEEgc3Vic3RyaW5nIHRoYXQgY29udGFpbnMKK2EgYmluYXJ5IHplcm8gaXMgY29ycmVjdGx5IGV4dHJhY3RlZCBhbmQgaGFzIGEgZnVydGhlciB6ZXJvIGFkZGVkIG9uIHRoZSBlbmQsCitidXQgdGhlIHJlc3VsdCBpcyBub3QsIG9mIGNvdXJzZSwgYSBDIHN0cmluZy4KKzwvUD4KKzxQPgorVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIHNlY3Rpb24gaWRlbnRpZnkgc3Vic3RyaW5ncyBieSBudW1iZXIuIFRoZSBudW1iZXIgemVybworcmVmZXJzIHRvIHRoZSBlbnRpcmUgbWF0Y2hlZCBzdWJzdHJpbmcsIHdpdGggaGlnaGVyIG51bWJlcnMgcmVmZXJyaW5nIHRvCitzdWJzdHJpbmdzIGNhcHR1cmVkIGJ5IHBhcmVudGhlc2l6ZWQgZ3JvdXBzLiBBZnRlciBhIHBhcnRpYWwgbWF0Y2gsIG9ubHkKK3N1YnN0cmluZyB6ZXJvIGlzIGF2YWlsYWJsZS4gQW4gYXR0ZW1wdCB0byBleHRyYWN0IGFueSBvdGhlciBzdWJzdHJpbmcgZ2l2ZXMKK3RoZSBlcnJvciBQQ1JFMl9FUlJPUl9QQVJUSUFMLiBUaGUgbmV4dCBzZWN0aW9uIGRlc2NyaWJlcyBzaW1pbGFyIGZ1bmN0aW9ucyBmb3IKK2V4dHJhY3RpbmcgY2FwdHVyZWQgc3Vic3RyaW5ncyBieSBuYW1lLgorPC9QPgorPFA+CitJZiBhIHBhdHRlcm4gdXNlcyB0aGUgXEsgZXNjYXBlIHNlcXVlbmNlIHdpdGhpbiBhIHBvc2l0aXZlIGFzc2VydGlvbiwgdGhlCityZXBvcnRlZCBzdGFydCBvZiBhIHN1Y2Nlc3NmdWwgbWF0Y2ggY2FuIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZW5kIG9mIHRoZSBtYXRjaC4KK0ZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiAoPz1hYlxLKSBpcyBtYXRjaGVkIGFnYWluc3QgImFiIiwgdGhlIHN0YXJ0IGFuZAorZW5kIG9mZnNldCB2YWx1ZXMgZm9yIHRoZSBtYXRjaCBhcmUgMiBhbmQgMC4gSW4gdGhpcyBzaXR1YXRpb24sIGNhbGxpbmcgdGhlc2UKK2Z1bmN0aW9ucyB3aXRoIGEgemVybyBzdWJzdHJpbmcgbnVtYmVyIGV4dHJhY3RzIGEgemVyby1sZW5ndGggZW1wdHkgc3RyaW5nLgorPC9QPgorPFA+CitZb3UgY2FuIGZpbmQgdGhlIGxlbmd0aCBpbiBjb2RlIHVuaXRzIG9mIGEgY2FwdHVyZWQgc3Vic3RyaW5nIHdpdGhvdXQKK2V4dHJhY3RpbmcgaXQgYnkgY2FsbGluZyA8Yj5wY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyKCk8L2I+LiBUaGUgZmlyc3QKK2FyZ3VtZW50IGlzIGEgcG9pbnRlciB0byB0aGUgbWF0Y2ggZGF0YSBibG9jaywgdGhlIHNlY29uZCBpcyB0aGUgZ3JvdXAgbnVtYmVyLAorYW5kIHRoZSB0aGlyZCBpcyBhIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSBpbnRvIHdoaWNoIHRoZSBsZW5ndGggaXMgcGxhY2VkLiBJZgoreW91IGp1c3Qgd2FudCB0byBrbm93IHdoZXRoZXIgb3Igbm90IHRoZSBzdWJzdHJpbmcgaGFzIGJlZW4gY2FwdHVyZWQsIHlvdSBjYW4KK3Bhc3MgdGhlIHRoaXJkIGFyZ3VtZW50IGFzIE5VTEwuCis8L1A+Cis8UD4KK1RoZSA8Yj5wY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcigpPC9iPiBmdW5jdGlvbiBjb3BpZXMgYSBjYXB0dXJlZCBzdWJzdHJpbmcKK2ludG8gYSBzdXBwbGllZCBidWZmZXIsIHdoZXJlYXMgPGI+cGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcigpPC9iPiBjb3BpZXMgaXQKK2ludG8gbmV3IG1lbW9yeSwgb2J0YWluZWQgdXNpbmcgdGhlIHNhbWUgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24gdGhhdCB3YXMKK3VzZWQgZm9yIHRoZSBtYXRjaCBkYXRhIGJsb2NrLiBUaGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGEKK3BvaW50ZXIgdG8gdGhlIG1hdGNoIGRhdGEgYmxvY2sgYW5kIGEgY2FwdHVyaW5nIGdyb3VwIG51bWJlci4KKzwvUD4KKzxQPgorVGhlIGZpbmFsIGFyZ3VtZW50cyBvZiA8Yj5wY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcigpPC9iPiBhcmUgYSBwb2ludGVyIHRvCit0aGUgYnVmZmVyIGFuZCBhIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIGl0cyBsZW5ndGggaW4gY29kZSB1bml0cy4KK1RoaXMgaXMgdXBkYXRlZCB0byBjb250YWluIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGNvZGUgdW5pdHMgdXNlZCBmb3IgdGhlCitleHRyYWN0ZWQgc3Vic3RyaW5nLCBleGNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIHplcm8uCis8L1A+Cis8UD4KK0ZvciA8Yj5wY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyKCk8L2I+IHRoZSB0aGlyZCBhbmQgZm91cnRoIGFyZ3VtZW50cyBwb2ludAordG8gdmFyaWFibGVzIHRoYXQgYXJlIHVwZGF0ZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIG5ldyBtZW1vcnkgYW5kIHRoZSBudW1iZXIKK29mIGNvZGUgdW5pdHMgdGhhdCBjb21wcmlzZSB0aGUgc3Vic3RyaW5nLCBhZ2FpbiBleGNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCit6ZXJvLiBXaGVuIHRoZSBzdWJzdHJpbmcgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgdGhlIG1lbW9yeSBzaG91bGQgYmUgZnJlZWQgYnkKK2NhbGxpbmcgPGI+cGNyZTJfc3Vic3RyaW5nX2ZyZWUoKTwvYj4uCis8L1A+Cis8UD4KK1RoZSByZXR1cm4gdmFsdWUgZnJvbSBhbGwgdGhlc2UgZnVuY3Rpb25zIGlzIHplcm8gZm9yIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUKK2Vycm9yIGNvZGUuIElmIHRoZSBwYXR0ZXJuIG1hdGNoIGZhaWxlZCwgdGhlIG1hdGNoIGZhaWx1cmUgY29kZSBpcyByZXR1cm5lZC4KK0lmIGEgc3Vic3RyaW5nIG51bWJlciBncmVhdGVyIHRoYW4gemVybyBpcyB1c2VkIGFmdGVyIGEgcGFydGlhbCBtYXRjaCwKK1BDUkUyX0VSUk9SX1BBUlRJQUwgaXMgcmV0dXJuZWQuIE90aGVyIHBvc3NpYmxlIGVycm9yIGNvZGVzIGFyZToKKzxwcmU+CisgIFBDUkUyX0VSUk9SX05PTUVNT1JZCis8L3ByZT4KK1RoZSBidWZmZXIgd2FzIHRvbyBzbWFsbCBmb3IgPGI+cGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIoKTwvYj4sIG9yIHRoZQorYXR0ZW1wdCB0byBnZXQgbWVtb3J5IGZhaWxlZCBmb3IgPGI+cGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcigpPC9iPi4KKzxwcmU+CisgIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HCis8L3ByZT4KK1RoZXJlIGlzIG5vIHN1YnN0cmluZyB3aXRoIHRoYXQgbnVtYmVyIGluIHRoZSBwYXR0ZXJuLCB0aGF0IGlzLCB0aGUgbnVtYmVyIGlzCitncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMuCis8cHJlPgorICBQQ1JFMl9FUlJPUl9VTkFWQUlMQUJMRQorPC9wcmU+CitUaGUgc3Vic3RyaW5nIG51bWJlciwgdGhvdWdoIG5vdCBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjYXB0dXJlcyBpbiB0aGUKK3BhdHRlcm4sIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIHNsb3RzIGluIHRoZSBvdmVjdG9yLCBzbyB0aGUgc3Vic3RyaW5nCitjb3VsZCBub3QgYmUgY2FwdHVyZWQuCis8cHJlPgorICBQQ1JFMl9FUlJPUl9VTlNFVAorPC9wcmU+CitUaGUgc3Vic3RyaW5nIGRpZCBub3QgcGFydGljaXBhdGUgaW4gdGhlIG1hdGNoLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4gaXMKKyhhYmMpfChkZWYpIGFuZCB0aGUgc3ViamVjdCBpcyAiZGVmIiwgYW5kIHRoZSBvdmVjdG9yIGNvbnRhaW5zIGF0IGxlYXN0IHR3bworY2FwdHVyaW5nIHNsb3RzLCBzdWJzdHJpbmcgbnVtYmVyIDEgaXMgdW5zZXQuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMzIiIGhyZWY9IiNUT0MxIj5FWFRSQUNUSU5HIEEgTElTVCBPRiBBTEwgQ0FQVFVSRUQgU1VCU1RSSU5HUzwvYT48YnI+Cis8UD4KKzxiPmludCBwY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+IiAgUENSRTJfVUNIQVIgKioqPGk+bGlzdHB0cjwvaT4sIFBDUkUyX1NJWkUgKio8aT5sZW5ndGhzcHRyPC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+dm9pZCBwY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlKFBDUkUyX1NQVFIgKjxpPmxpc3Q8L2k+KTs8L2I+Cis8L1A+Cis8UD4KK1RoZSA8Yj5wY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQoKTwvYj4gZnVuY3Rpb24gZXh0cmFjdHMgYWxsIGF2YWlsYWJsZSBzdWJzdHJpbmdzCithbmQgYnVpbGRzIGEgbGlzdCBvZiBwb2ludGVycyB0byB0aGVtLiBJdCBhbHNvIChvcHRpb25hbGx5KSBidWlsZHMgYSBzZWNvbmQKK2xpc3QgdGhhdCBjb250YWlucyB0aGVpciBsZW5ndGhzIChpbiBjb2RlIHVuaXRzKSwgZXhjbHVkaW5nIGEgdGVybWluYXRpbmcgemVybwordGhhdCBpcyBhZGRlZCB0byBlYWNoIG9mIHRoZW0uIEFsbCB0aGlzIGlzIGRvbmUgaW4gYSBzaW5nbGUgYmxvY2sgb2YgbWVtb3J5Cit0aGF0IGlzIG9idGFpbmVkIHVzaW5nIHRoZSBzYW1lIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQgd2FzIHVzZWQgdG8gZ2V0Cit0aGUgbWF0Y2ggZGF0YSBibG9jay4KKzwvUD4KKzxQPgorVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBvbmx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCBtYXRjaC4gSWYgY2FsbGVkIGFmdGVyIGEKK3BhcnRpYWwgbWF0Y2gsIHRoZSBlcnJvciBjb2RlIFBDUkUyX0VSUk9SX1BBUlRJQUwgaXMgcmV0dXJuZWQuCis8L1A+Cis8UD4KK1RoZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgYmxvY2sgaXMgcmV0dXJuZWQgdmlhIDxpPmxpc3RwdHI8L2k+LCB3aGljaCBpcyBhbHNvCit0aGUgc3RhcnQgb2YgdGhlIGxpc3Qgb2Ygc3RyaW5nIHBvaW50ZXJzLiBUaGUgZW5kIG9mIHRoZSBsaXN0IGlzIG1hcmtlZCBieSBhCitOVUxMIHBvaW50ZXIuIFRoZSBhZGRyZXNzIG9mIHRoZSBsaXN0IG9mIGxlbmd0aHMgaXMgcmV0dXJuZWQgdmlhCis8aT5sZW5ndGhzcHRyPC9pPi4gSWYgeW91ciBzdHJpbmdzIGRvIG5vdCBjb250YWluIGJpbmFyeSB6ZXJvcyBhbmQgeW91IGRvIG5vdAordGhlcmVmb3JlIG5lZWQgdGhlIGxlbmd0aHMsIHlvdSBtYXkgc3VwcGx5IE5VTEwgYXMgdGhlIDxiPmxlbmd0aHNwdHI8L2I+Cithcmd1bWVudCB0byBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiBhIGxpc3Qgb2YgbGVuZ3Rocy4gVGhlIHlpZWxkIG9mIHRoZQorZnVuY3Rpb24gaXMgemVybyBpZiBhbGwgd2VudCB3ZWxsLCBvciBQQ1JFMl9FUlJPUl9OT01FTU9SWSBpZiB0aGUgbWVtb3J5IGJsb2NrCitjb3VsZCBub3QgYmUgb2J0YWluZWQuIFdoZW4gdGhlIGxpc3QgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgaXQgc2hvdWxkIGJlIGZyZWVkIGJ5CitjYWxsaW5nIDxiPnBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUoKTwvYj4uCis8L1A+Cis8UD4KK0lmIHRoaXMgZnVuY3Rpb24gZW5jb3VudGVycyBhIHN1YnN0cmluZyB0aGF0IGlzIHVuc2V0LCB3aGljaCBjYW4gaGFwcGVuIHdoZW4KK2NhcHR1cmluZyBzdWJwYXR0ZXJuIG51bWJlciA8aT5uKzE8L2k+IG1hdGNoZXMgc29tZSBwYXJ0IG9mIHRoZSBzdWJqZWN0LCBidXQKK3N1YnBhdHRlcm4gPGk+bjwvaT4gaGFzIG5vdCBiZWVuIHVzZWQgYXQgYWxsLCBpdCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4gVGhpcworY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBhIGdlbnVpbmUgemVyby1sZW5ndGggc3Vic3RyaW5nIGJ5IGluc3BlY3RpbmcgdGhlCithcHByb3ByaWF0ZSBvZmZzZXQgaW4gdGhlIG92ZWN0b3IsIHdoaWNoIGNvbnRhaW4gUENSRTJfVU5TRVQgZm9yIHVuc2V0CitzdWJzdHJpbmdzLCBvciBieSBjYWxsaW5nIDxiPnBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIoKTwvYj4uCis8YSBuYW1lPSJleHRyYWN0YnluYW1lIj48L2E+PC9QPgorPGJyPjxhIG5hbWU9IlNFQzMzIiBocmVmPSIjVE9DMSI+RVhUUkFDVElORyBDQVBUVVJFRCBTVUJTVFJJTkdTIEJZIE5BTUU8L2E+PGJyPgorPFA+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUoY29uc3QgcGNyZTJfY29kZSAqPGk+Y29kZTwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TUFRSIDxpPm5hbWU8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TUFRSIDxpPm5hbWU8L2k+LCBQQ1JFMl9TSVpFICo8aT5sZW5ndGg8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+LDwvYj4KKzxiPiAgUENSRTJfU1BUUiA8aT5uYW1lPC9pPiwgUENSRTJfVUNIQVIgKjxpPmJ1ZmZlcjwvaT4sIFBDUkUyX1NJWkUgKjxpPmJ1ZmZsZW48L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqPGk+bWF0Y2hfZGF0YTwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TUFRSIDxpPm5hbWU8L2k+LCBQQ1JFMl9VQ0hBUiAqKjxpPmJ1ZmZlcnB0cjwvaT4sIFBDUkUyX1NJWkUgKjxpPmJ1ZmZsZW48L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj52b2lkIHBjcmUyX3N1YnN0cmluZ19mcmVlKFBDUkUyX1VDSEFSICo8aT5idWZmZXI8L2k+KTs8L2I+Cis8L1A+Cis8UD4KK1RvIGV4dHJhY3QgYSBzdWJzdHJpbmcgYnkgbmFtZSwgeW91IGZpcnN0IGhhdmUgdG8gZmluZCBhc3NvY2lhdGVkIG51bWJlci4KK0ZvciBleGFtcGxlLCBmb3IgdGhpcyBwYXR0ZXJuOgorPHByZT4KKyAgKGErKWIoPyYjNjA7eHh4JiM2MjtcZCspLi4uCis8L3ByZT4KK3RoZSBudW1iZXIgb2YgdGhlIHN1YnBhdHRlcm4gY2FsbGVkICJ4eHgiIGlzIDIuIElmIHRoZSBuYW1lIGlzIGtub3duIHRvIGJlCit1bmlxdWUgKFBDUkUyX0RVUE5BTUVTIHdhcyBub3Qgc2V0KSwgeW91IGNhbiBmaW5kIHRoZSBudW1iZXIgZnJvbSB0aGUgbmFtZSBieQorY2FsbGluZyA8Yj5wY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZSgpPC9iPi4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZQorY29tcGlsZWQgcGF0dGVybiwgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIG5hbWUuIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgdGhlCitzdWJwYXR0ZXJuIG51bWJlciwgUENSRTJfRVJST1JfTk9TVUJTVFJJTkcgaWYgdGhlcmUgaXMgbm8gc3VicGF0dGVybiBvZiB0aGF0CituYW1lLCBvciBQQ1JFMl9FUlJPUl9OT1VOSVFVRVNVQlNUUklORyBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHN1YnBhdHRlcm4gb2YKK3RoYXQgbmFtZS4gR2l2ZW4gdGhlIG51bWJlciwgeW91IGNhbiBleHRyYWN0IHRoZSBzdWJzdHJpbmcgZGlyZWN0bHksIG9yIHVzZSBvbmUKK29mIHRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGFib3ZlLgorPC9QPgorPFA+CitGb3IgY29udmVuaWVuY2UsIHRoZXJlIGFyZSBhbHNvICJieW5hbWUiIGZ1bmN0aW9ucyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlCisiYnludW1iZXIiIGZ1bmN0aW9ucywgdGhlIG9ubHkgZGlmZmVyZW5jZSBiZWluZyB0aGF0IHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYQorbmFtZSBpbnN0ZWFkIG9mIGEgbnVtYmVyLiBJZiBQQ1JFMl9EVVBOQU1FUyBpcyBzZXQgYW5kIHRoZXJlIGFyZSBkdXBsaWNhdGUKK25hbWVzLCB0aGVzZSBmdW5jdGlvbnMgc2NhbiBhbGwgdGhlIGdyb3VwcyB3aXRoIHRoZSBnaXZlbiBuYW1lLCBhbmQgcmV0dXJuIHRoZQorZmlyc3QgbmFtZWQgc3RyaW5nIHRoYXQgaXMgc2V0LgorPC9QPgorPFA+CitJZiB0aGVyZSBhcmUgbm8gZ3JvdXBzIHdpdGggdGhlIGdpdmVuIG5hbWUsIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HIGlzCityZXR1cm5lZC4gSWYgYWxsIGdyb3VwcyB3aXRoIHRoZSBuYW1lIGhhdmUgbnVtYmVycyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gdGhlCitudW1iZXIgb2Ygc2xvdHMgaW4gdGhlIG92ZWN0b3IsIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFIGlzIHJldHVybmVkLiBJZiB0aGVyZQoraXMgYXQgbGVhc3Qgb25lIGdyb3VwIHdpdGggYSBzbG90IGluIHRoZSBvdmVjdG9yLCBidXQgbm8gZ3JvdXAgaXMgZm91bmQgdG8gYmUKK3NldCwgUENSRTJfRVJST1JfVU5TRVQgaXMgcmV0dXJuZWQuCis8L1A+Cis8UD4KKzxiPldhcm5pbmc6PC9iPiBJZiB0aGUgcGF0dGVybiB1c2VzIHRoZSAoP3wgZmVhdHVyZSB0byBzZXQgdXAgbXVsdGlwbGUKK3N1YnBhdHRlcm5zIHdpdGggdGhlIHNhbWUgbnVtYmVyLCBhcyBkZXNjcmliZWQgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCNkdXBzdWJwYXR0ZXJubnVtYmVyIj5zZWN0aW9uIG9uIGR1cGxpY2F0ZSBzdWJwYXR0ZXJuIG51bWJlcnM8L2E+CitpbiB0aGUKKzxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sIj48Yj5wY3JlMnBhdHRlcm48L2I+PC9hPgorcGFnZSwgeW91IGNhbm5vdCB1c2UgbmFtZXMgdG8gZGlzdGluZ3Vpc2ggdGhlIGRpZmZlcmVudCBzdWJwYXR0ZXJucywgYmVjYXVzZQorbmFtZXMgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgY29tcGlsZWQgY29kZS4gVGhlIG1hdGNoaW5nIHByb2Nlc3MgdXNlcyBvbmx5CitudW1iZXJzLiBGb3IgdGhpcyByZWFzb24sIHRoZSB1c2Ugb2YgZGlmZmVyZW50IG5hbWVzIGZvciBzdWJwYXR0ZXJucyBvZiB0aGUKK3NhbWUgbnVtYmVyIGNhdXNlcyBhbiBlcnJvciBhdCBjb21waWxlIHRpbWUuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMzQiIGhyZWY9IiNUT0MxIj5DUkVBVElORyBBIE5FVyBTVFJJTkcgV0lUSCBTVUJTVElUVVRJT05TPC9hPjxicj4KKzxQPgorPGI+aW50IHBjcmUyX3N1YnN0aXR1dGUoY29uc3QgcGNyZTJfY29kZSAqPGk+Y29kZTwvaT4sIFBDUkUyX1NQVFIgPGk+c3ViamVjdDwvaT4sPC9iPgorPGI+ICBQQ1JFMl9TSVpFIDxpPmxlbmd0aDwvaT4sIFBDUkUyX1NJWkUgPGk+c3RhcnRvZmZzZXQ8L2k+LDwvYj4KKzxiPiAgdWludDMyX3QgPGk+b3B0aW9uczwvaT4sIHBjcmUyX21hdGNoX2RhdGEgKjxpPm1hdGNoX2RhdGE8L2k+LDwvYj4KKzxiPiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqPGk+bWNvbnRleHQ8L2k+LCBQQ1JFMl9TUFRSIDxpPnJlcGxhY2VtZW50PC9pPiw8L2I+Cis8Yj4gIFBDUkUyX1NJWkUgPGk+cmxlbmd0aDwvaT4sIFBDUkUyX1VDSEFSICpcZklvdXRwdXRidWZmZXJcemZQLDwvYj4KKzxiPiAgUENSRTJfU0laRSAqPGk+b3V0bGVuZ3RocHRyPC9pPik7PC9iPgorPC9QPgorPFA+CitUaGlzIGZ1bmN0aW9uIGNhbGxzIDxiPnBjcmUyX21hdGNoKCk8L2I+IGFuZCB0aGVuIG1ha2VzIGEgY29weSBvZiB0aGUgc3ViamVjdAorc3RyaW5nIGluIDxpPm91dHB1dGJ1ZmZlcjwvaT4sIHJlcGxhY2luZyB0aGUgcGFydCB0aGF0IHdhcyBtYXRjaGVkIHdpdGggdGhlCis8aT5yZXBsYWNlbWVudDwvaT4gc3RyaW5nLCB3aG9zZSBsZW5ndGggaXMgc3VwcGxpZWQgaW4gPGI+cmxlbmd0aDwvYj4uIFRoaXMgY2FuCitiZSBnaXZlbiBhcyBQQ1JFMl9aRVJPX1RFUk1JTkFURUQgZm9yIGEgemVyby10ZXJtaW5hdGVkIHN0cmluZy4gTWF0Y2hlcyBpbgord2hpY2ggYSBcSyBpdGVtIGluIGEgbG9va2FoZWFkIGluIHRoZSBwYXR0ZXJuIGNhdXNlcyB0aGUgbWF0Y2ggdG8gZW5kIGJlZm9yZQoraXQgc3RhcnRzIGFyZSBub3Qgc3VwcG9ydGVkLCBhbmQgZ2l2ZSByaXNlIHRvIGFuIGVycm9yIHJldHVybi4KKzwvUD4KKzxQPgorVGhlIGZpcnN0IHNldmVuIGFyZ3VtZW50cyBvZiA8Yj5wY3JlMl9zdWJzdGl0dXRlKCk8L2I+IGFyZSB0aGUgc2FtZSBhcyBmb3IKKzxiPnBjcmUyX21hdGNoKCk8L2I+LCBleGNlcHQgdGhhdCB0aGUgcGFydGlhbCBtYXRjaGluZyBvcHRpb25zIGFyZSBub3QKK3Blcm1pdHRlZCwgYW5kIDxpPm1hdGNoX2RhdGE8L2k+IG1heSBiZSBwYXNzZWQgYXMgTlVMTCwgaW4gd2hpY2ggY2FzZSBhIG1hdGNoCitkYXRhIGJsb2NrIGlzIG9idGFpbmVkIGFuZCBmcmVlZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiwgdXNpbmcgbWVtb3J5IG1hbmFnZW1lbnQKK2Z1bmN0aW9ucyBmcm9tIHRoZSBtYXRjaCBjb250ZXh0LCBpZiBwcm92aWRlZCwgb3IgZWxzZSB0aG9zZSB0aGF0IHdlcmUgdXNlZCB0bworYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgY29tcGlsZWQgY29kZS4KKzwvUD4KKzxQPgorVGhlIDxpPm91dGxlbmd0aHB0cjwvaT4gYXJndW1lbnQgbXVzdCBwb2ludCB0byBhIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgdGhlCitsZW5ndGgsIGluIGNvZGUgdW5pdHMsIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiBJZiB0aGUgZnVuY3Rpb24gaXMgc3VjY2Vzc2Z1bCwgdGhlCit2YWx1ZSBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUgbmV3IHN0cmluZywgZXhjbHVkaW5nIHRoZQordHJhaWxpbmcgemVybyB0aGF0IGlzIGF1dG9tYXRpY2FsbHkgYWRkZWQuCis8L1A+Cis8UD4KK0lmIHRoZSBmdW5jdGlvbiBpcyBub3Qgc3VjY2Vzc2Z1bCwgdGhlIHZhbHVlIHNldCB2aWEgPGk+b3V0bGVuZ3RocHRyPC9pPiBkZXBlbmRzCitvbiB0aGUgdHlwZSBvZiBlcnJvci4gRm9yIHN5bnRheCBlcnJvcnMgaW4gdGhlIHJlcGxhY2VtZW50IHN0cmluZywgdGhlIHZhbHVlIGlzCit0aGUgb2Zmc2V0IGluIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgd2hlcmUgdGhlIGVycm9yIHdhcyBkZXRlY3RlZC4gRm9yIG90aGVyCitlcnJvcnMsIHRoZSB2YWx1ZSBpcyBQQ1JFMl9VTlNFVCBieSBkZWZhdWx0LiBUaGlzIGluY2x1ZGVzIHRoZSBjYXNlIG9mIHRoZQorb3V0cHV0IGJ1ZmZlciBiZWluZyB0b28gc21hbGwsIHVubGVzcyBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCBpcyBzZXQKKyhzZWUgYmVsb3cpLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBpcyB0aGUgbWluaW11bSBsZW5ndGggbmVlZGVkLCBpbmNsdWRpbmcKK3NwYWNlIGZvciB0aGUgdHJhaWxpbmcgemVyby4gTm90ZSB0aGF0IGluIG9yZGVyIHRvIGNvbXB1dGUgdGhlIHJlcXVpcmVkIGxlbmd0aCwKKzxiPnBjcmUyX3N1YnN0aXR1dGUoKTwvYj4gaGFzIHRvIHNpbXVsYXRlIGFsbCB0aGUgbWF0Y2hpbmcgYW5kIGNvcHlpbmcsIGluc3RlYWQKK29mIGdpdmluZyBhbiBlcnJvciByZXR1cm4gYXMgc29vbiBhcyB0aGUgYnVmZmVyIG92ZXJmbG93cy4gTm90ZSBhbHNvIHRoYXQgdGhlCitsZW5ndGggaXMgaW4gY29kZSB1bml0cywgbm90IGJ5dGVzLgorPC9QPgorPFA+CitJbiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nLCB3aGljaCBpcyBpbnRlcnByZXRlZCBhcyBhIFVURiBzdHJpbmcgaW4gVVRGIG1vZGUsCithbmQgaXMgY2hlY2tlZCBmb3IgVVRGIHZhbGlkaXR5IHVubGVzcyB0aGUgUENSRTJfTk9fVVRGX0NIRUNLIG9wdGlvbiBpcyBzZXQsIGEKK2RvbGxhciBjaGFyYWN0ZXIgaXMgYW4gZXNjYXBlIGNoYXJhY3RlciB0aGF0IGNhbiBzcGVjaWZ5IHRoZSBpbnNlcnRpb24gb2YKK2NoYXJhY3RlcnMgZnJvbSBjYXB0dXJpbmcgZ3JvdXBzIG9yICgqTUFSSykgaXRlbXMgaW4gdGhlIHBhdHRlcm4uIFRoZSBmb2xsb3dpbmcKK2Zvcm1zIGFyZSBhbHdheXMgcmVjb2duaXplZDoKKzxwcmU+CisgICQkICAgICAgICAgICAgICAgICAgaW5zZXJ0IGEgZG9sbGFyIGNoYXJhY3RlcgorICAkJiM2MDtuJiM2Mjsgb3IgJHsmIzYwO24mIzYyO30gICAgICBpbnNlcnQgdGhlIGNvbnRlbnRzIG9mIGdyb3VwICYjNjA7biYjNjI7CisgICQqTUFSSyBvciAkeypNQVJLfSAgaW5zZXJ0IHRoZSBuYW1lIG9mIHRoZSBsYXN0ICgqTUFSSykgZW5jb3VudGVyZWQKKzwvcHJlPgorRWl0aGVyIGEgZ3JvdXAgbnVtYmVyIG9yIGEgZ3JvdXAgbmFtZSBjYW4gYmUgZ2l2ZW4gZm9yICYjNjA7biYjNjI7LiBDdXJseSBicmFja2V0cyBhcmUKK3JlcXVpcmVkIG9ubHkgaWYgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgd291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgcGFydCBvZiB0aGUKK251bWJlciBvciBuYW1lLiBUaGUgbnVtYmVyIG1heSBiZSB6ZXJvIHRvIGluY2x1ZGUgdGhlIGVudGlyZSBtYXRjaGVkIHN0cmluZy4KK0ZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiBhKGIpYyBpcyBtYXRjaGVkIHdpdGggIj1hYmM9IiBhbmQgdGhlIHJlcGxhY2VtZW50CitzdHJpbmcgIiskMSQwJDErIiwgdGhlIHJlc3VsdCBpcyAiPStiYWJjYis9Ii4KKzwvUD4KKzxQPgorVGhlIGZhY2lsaXR5IGZvciBpbnNlcnRpbmcgYSAoKk1BUkspIG5hbWUgY2FuIGJlIHVzZWQgdG8gcGVyZm9ybSBzaW1wbGUKK3NpbXVsdGFuZW91cyBzdWJzdGl0dXRpb25zLCBhcyB0aGlzIDxiPnBjcmUydGVzdDwvYj4gZXhhbXBsZSBzaG93czoKKzxwcmU+CisgIC8oKjpwZWFyKWFwcGxlfCgqOm9yYW5nZSlsZW1vbi9nLHJlcGxhY2U9JHsqTUFSS30KKyAgICAgIGFwcGxlIGxlbW9uCisgICAyOiBwZWFyIG9yYW5nZQorPC9wcmU+CitBcyB3ZWxsIGFzIHRoZSB1c3VhbCBvcHRpb25zIGZvciA8Yj5wY3JlMl9tYXRjaCgpPC9iPiwgYSBudW1iZXIgb2YgYWRkaXRpb25hbAorb3B0aW9ucyBjYW4gYmUgc2V0IGluIHRoZSA8aT5vcHRpb25zPC9pPiBhcmd1bWVudC4KKzwvUD4KKzxQPgorUENSRTJfU1VCU1RJVFVURV9HTE9CQUwgY2F1c2VzIHRoZSBmdW5jdGlvbiB0byBpdGVyYXRlIG92ZXIgdGhlIHN1YmplY3Qgc3RyaW5nLAorcmVwbGFjaW5nIGV2ZXJ5IG1hdGNoaW5nIHN1YnN0cmluZy4gSWYgdGhpcyBpcyBub3Qgc2V0LCBvbmx5IHRoZSBmaXJzdCBtYXRjaGluZworc3Vic3RyaW5nIGlzIHJlcGxhY2VkLiBJZiBhbnkgbWF0Y2hlZCBzdWJzdHJpbmcgaGFzIHplcm8gbGVuZ3RoLCBhZnRlciB0aGUKK3N1YnN0aXR1dGlvbiBoYXMgaGFwcGVuZWQsIGFuIGF0dGVtcHQgdG8gZmluZCBhIG5vbi1lbXB0eSBtYXRjaCBhdCB0aGUgc2FtZQorcG9zaXRpb24gaXMgcGVyZm9ybWVkLiBJZiB0aGlzIGlzIG5vdCBzdWNjZXNzZnVsLCB0aGUgY3VycmVudCBwb3NpdGlvbiBpcworYWR2YW5jZWQgYnkgb25lIGNoYXJhY3RlciBleGNlcHQgd2hlbiBDUkxGIGlzIGEgdmFsaWQgbmV3bGluZSBzZXF1ZW5jZSBhbmQgdGhlCituZXh0IHR3byBjaGFyYWN0ZXJzIGFyZSBDUiwgTEYuIEluIHRoaXMgY2FzZSwgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYWR2YW5jZWQKK2J5IHR3byBjaGFyYWN0ZXJzLgorPC9QPgorPFA+CitQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCBjaGFuZ2VzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBvdXRwdXQgYnVmZmVyIGlzCit0b28gc21hbGwuIFRoZSBkZWZhdWx0IGFjdGlvbiBpcyB0byByZXR1cm4gUENSRTJfRVJST1JfTk9NRU1PUlkgaW1tZWRpYXRlbHkuIElmCit0aGlzIG9wdGlvbiBpcyBzZXQsIGhvd2V2ZXIsIDxiPnBjcmUyX3N1YnN0aXR1dGUoKTwvYj4gY29udGludWVzIHRvIGdvIHRocm91Z2gKK3RoZSBtb3Rpb25zIG9mIG1hdGNoaW5nIGFuZCBzdWJzdGl0dXRpbmcgKHdpdGhvdXQsIG9mIGNvdXJzZSwgd3JpdGluZyBhbnl0aGluZykKK2luIG9yZGVyIHRvIGNvbXB1dGUgdGhlIHNpemUgb2YgYnVmZmVyIHRoYXQgaXMgbmVlZGVkLiBUaGlzIHZhbHVlIGlzIHBhc3NlZAorYmFjayB2aWEgdGhlIDxpPm91dGxlbmd0aHB0cjwvaT4gdmFyaWFibGUsIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gc3RpbGwKK2JlaW5nIFBDUkUyX0VSUk9SX05PTUVNT1JZLgorPC9QPgorPFA+CitQYXNzaW5nIGEgYnVmZmVyIHNpemUgb2YgemVybyBpcyBhIHBlcm1pdHRlZCB3YXkgb2YgZmluZGluZyBvdXQgaG93IG11Y2ggbWVtb3J5CitpcyBuZWVkZWQgZm9yIGdpdmVuIHN1YnN0aXR1dGlvbi4gSG93ZXZlciwgdGhpcyBkb2VzIG1lYW4gdGhhdCB0aGUgZW50aXJlCitvcGVyYXRpb24gaXMgY2FycmllZCBvdXQgdHdpY2UuIERlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24sIGl0IG1heSBiZSBtb3JlCitlZmZpY2llbnQgdG8gYWxsb2NhdGUgYSBsYXJnZSBidWZmZXIgYW5kIGZyZWUgdGhlIGV4Y2VzcyBhZnRlcndhcmRzLCBpbnN0ZWFkIG9mCit1c2luZyBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSC4KKzwvUD4KKzxQPgorUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUIGNhdXNlcyByZWZlcmVuY2VzIHRvIGNhcHR1cmluZyBncm91cHMgdGhhdCBkbworbm90IGFwcGVhciBpbiB0aGUgcGF0dGVybiB0byBiZSB0cmVhdGVkIGFzIHVuc2V0IGdyb3Vwcy4gVGhpcyBvcHRpb24gc2hvdWxkIGJlCit1c2VkIHdpdGggY2FyZSwgYmVjYXVzZSBpdCBtZWFucyB0aGF0IGEgdHlwbyBpbiBhIGdyb3VwIG5hbWUgb3IgbnVtYmVyIG5vCitsb25nZXIgY2F1c2VzIHRoZSBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORyBlcnJvci4KKzwvUD4KKzxQPgorUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWSBjYXVzZXMgdW5zZXQgY2FwdHVyaW5nIGdyb3VwcyAoaW5jbHVkaW5nIHVua25vd24KK2dyb3VwcyB3aGVuIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCBpcyBzZXQpIHRvIGJlIHRyZWF0ZWQgYXMgZW1wdHkKK3N0cmluZ3Mgd2hlbiBpbnNlcnRlZCBhcyBkZXNjcmliZWQgYWJvdmUuIElmIHRoaXMgb3B0aW9uIGlzIG5vdCBzZXQsIGFuIGF0dGVtcHQKK3RvIGluc2VydCBhbiB1bnNldCBncm91cCBjYXVzZXMgdGhlIFBDUkUyX0VSUk9SX1VOU0VUIGVycm9yLiBUaGlzIG9wdGlvbiBkb2VzCitub3QgaW5mbHVlbmNlIHRoZSBleHRlbmRlZCBzdWJzdGl0dXRpb24gc3ludGF4IGRlc2NyaWJlZCBiZWxvdy4KKzwvUD4KKzxQPgorUENSRTJfU1VCU1RJVFVURV9FWFRFTkRFRCBjYXVzZXMgZXh0cmEgcHJvY2Vzc2luZyB0byBiZSBhcHBsaWVkIHRvIHRoZQorcmVwbGFjZW1lbnQgc3RyaW5nLiBXaXRob3V0IHRoaXMgb3B0aW9uLCBvbmx5IHRoZSBkb2xsYXIgY2hhcmFjdGVyIGlzIHNwZWNpYWwsCithbmQgb25seSB0aGUgZ3JvdXAgaW5zZXJ0aW9uIGZvcm1zIGxpc3RlZCBhYm92ZSBhcmUgdmFsaWQuIFdoZW4KK1BDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUQgaXMgc2V0LCB0d28gdGhpbmdzIGNoYW5nZToKKzwvUD4KKzxQPgorRmlyc3RseSwgYmFja3NsYXNoIGluIGEgcmVwbGFjZW1lbnQgc3RyaW5nIGlzIGludGVycHJldGVkIGFzIGFuIGVzY2FwZQorY2hhcmFjdGVyLiBUaGUgdXN1YWwgZm9ybXMgc3VjaCBhcyBcbiBvciBceHtkZGR9IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKK3BhcnRpY3VsYXIgY2hhcmFjdGVyIGNvZGVzLCBhbmQgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGFueSBub24tYWxwaGFudW1lcmljCitjaGFyYWN0ZXIgcXVvdGVzIHRoYXQgY2hhcmFjdGVyLiBFeHRlbmRlZCBxdW90aW5nIGNhbiBiZSBjb2RlZCB1c2luZyBcUS4uLlxFLAorZXhhY3RseSBhcyBpbiBwYXR0ZXJuIHN0cmluZ3MuCis8L1A+Cis8UD4KK1RoZXJlIGFyZSBhbHNvIGZvdXIgZXNjYXBlIHNlcXVlbmNlcyBmb3IgZm9yY2luZyB0aGUgY2FzZSBvZiBpbnNlcnRlZCBsZXR0ZXJzLgorVGhlIGluc2VydGlvbiBtZWNoYW5pc20gaGFzIHRocmVlIHN0YXRlczogbm8gY2FzZSBmb3JjaW5nLCBmb3JjZSB1cHBlciBjYXNlLAorYW5kIGZvcmNlIGxvd2VyIGNhc2UuIFRoZSBlc2NhcGUgc2VxdWVuY2VzIGNoYW5nZSB0aGUgY3VycmVudCBzdGF0ZTogXFUgYW5kCitcTCBjaGFuZ2UgdG8gdXBwZXIgb3IgbG93ZXIgY2FzZSBmb3JjaW5nLCByZXNwZWN0aXZlbHksIGFuZCBcRSAod2hlbiBub3QKK3Rlcm1pbmF0aW5nIGEgXFEgcXVvdGVkIHNlcXVlbmNlKSByZXZlcnRzIHRvIG5vIGNhc2UgZm9yY2luZy4gVGhlIHNlcXVlbmNlcworXHUgYW5kIFxsIGZvcmNlIHRoZSBuZXh0IGNoYXJhY3RlciAoaWYgaXQgaXMgYSBsZXR0ZXIpIHRvIHVwcGVyIG9yIGxvd2VyCitjYXNlLCByZXNwZWN0aXZlbHksIGFuZCB0aGVuIHRoZSBzdGF0ZSBhdXRvbWF0aWNhbGx5IHJldmVydHMgdG8gbm8gY2FzZQorZm9yY2luZy4gQ2FzZSBmb3JjaW5nIGFwcGxpZXMgdG8gYWxsIGluc2VydGVkICBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgdGhvc2UgZnJvbQorY2FwdHVyZWQgZ3JvdXBzIGFuZCBsZXR0ZXJzIHdpdGhpbiBcUS4uLlxFIHF1b3RlZCBzZXF1ZW5jZXMuCis8L1A+Cis8UD4KK05vdGUgdGhhdCBjYXNlIGZvcmNpbmcgc2VxdWVuY2VzIHN1Y2ggYXMgXFUuLi5cRSBkbyBub3QgbmVzdC4gRm9yIGV4YW1wbGUsCit0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgIlxVYWFcTEJCXEVjY1xFIiBpcyAiQUFiYmNjIjsgdGhlIGZpbmFsIFxFIGhhcyBubworZWZmZWN0LgorPC9QPgorPFA+CitUaGUgc2Vjb25kIGVmZmVjdCBvZiBzZXR0aW5nIFBDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUQgaXMgdG8gYWRkIG1vcmUKK2ZsZXhpYmlsaXR5IHRvIGdyb3VwIHN1YnN0aXR1dGlvbi4gVGhlIHN5bnRheCBpcyBzaW1pbGFyIHRvIHRoYXQgdXNlZCBieSBCYXNoOgorPHByZT4KKyAgJHsmIzYwO24mIzYyOzotJiM2MDtzdHJpbmcmIzYyO30KKyAgJHsmIzYwO24mIzYyOzorJiM2MDtzdHJpbmcxJiM2Mjs6JiM2MDtzdHJpbmcyJiM2Mjt9Cis8L3ByZT4KK0FzIGJlZm9yZSwgJiM2MDtuJiM2MjsgbWF5IGJlIGEgZ3JvdXAgbnVtYmVyIG9yIGEgbmFtZS4gVGhlIGZpcnN0IGZvcm0gc3BlY2lmaWVzIGEKK2RlZmF1bHQgdmFsdWUuIElmIGdyb3VwICYjNjA7biYjNjI7IGlzIHNldCwgaXRzIHZhbHVlIGlzIGluc2VydGVkOyBpZiBub3QsICYjNjA7c3RyaW5nJiM2MjsgaXMKK2V4cGFuZGVkIGFuZCB0aGUgcmVzdWx0IGluc2VydGVkLiBUaGUgc2Vjb25kIGZvcm0gc3BlY2lmaWVzIHN0cmluZ3MgdGhhdCBhcmUKK2V4cGFuZGVkIGFuZCBpbnNlcnRlZCB3aGVuIGdyb3VwICYjNjA7biYjNjI7IGlzIHNldCBvciB1bnNldCwgcmVzcGVjdGl2ZWx5LiBUaGUgZmlyc3QKK2Zvcm0gaXMganVzdCBhIGNvbnZlbmllbnQgc2hvcnRoYW5kIGZvcgorPHByZT4KKyAgJHsmIzYwO24mIzYyOzorJHsmIzYwO24mIzYyO306JiM2MDtzdHJpbmcmIzYyO30KKzwvcHJlPgorQmFja3NsYXNoIGNhbiBiZSB1c2VkIHRvIGVzY2FwZSBjb2xvbnMgYW5kIGNsb3NpbmcgY3VybHkgYnJhY2tldHMgaW4gdGhlCityZXBsYWNlbWVudCBzdHJpbmdzLiBBIGNoYW5nZSBvZiB0aGUgY2FzZSBmb3JjaW5nIHN0YXRlIHdpdGhpbiBhIHJlcGxhY2VtZW50CitzdHJpbmcgcmVtYWlucyBpbiBmb3JjZSBhZnRlcndhcmRzLCBhcyBzaG93biBpbiB0aGlzIDxiPnBjcmUydGVzdDwvYj4gZXhhbXBsZToKKzxwcmU+CisgIC8oc29tZSk/KGJvZHkpL3N1YnN0aXR1dGVfZXh0ZW5kZWQscmVwbGFjZT0kezE6K1xVOlxMfUhlTExvCisgICAgICBib2R5CisgICAxOiBoZWxsbworICAgICAgc29tZWJvZHkKKyAgIDE6IEhFTExPCis8L3ByZT4KK1RoZSBQQ1JFMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgZXh0ZW5kZWQKK3N1YnN0aXR1dGlvbnMuIEhvd2V2ZXIsIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCBkb2VzIGNhdXNlIHVua25vd24KK2dyb3VwcyBpbiB0aGUgZXh0ZW5kZWQgc3ludGF4IGZvcm1zIHRvIGJlIHRyZWF0ZWQgYXMgdW5zZXQuCis8L1A+Cis8UD4KK0lmIHN1Y2Nlc3NmdWwsIDxiPnBjcmUyX3N1YnN0aXR1dGUoKTwvYj4gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlcGxhY2VtZW50cyB0aGF0Cit3ZXJlIG1hZGUuIFRoaXMgbWF5IGJlIHplcm8gaWYgbm8gbWF0Y2hlcyB3ZXJlIGZvdW5kLCBhbmQgaXMgbmV2ZXIgZ3JlYXRlciB0aGFuCisxIHVubGVzcyBQQ1JFMl9TVUJTVElUVVRFX0dMT0JBTCBpcyBzZXQuCis8L1A+Cis8UD4KK0luIHRoZSBldmVudCBvZiBhbiBlcnJvciwgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlzIHJldHVybmVkLiBFeGNlcHQgZm9yCitQQ1JFMl9FUlJPUl9OT01BVENIICh3aGljaCBpcyBuZXZlciByZXR1cm5lZCksIGVycm9ycyBmcm9tIDxiPnBjcmUyX21hdGNoKCk8L2I+CithcmUgcGFzc2VkIHN0cmFpZ2h0IGJhY2suCis8L1A+Cis8UD4KK1BDUkUyX0VSUk9SX05PU1VCU1RSSU5HIGlzIHJldHVybmVkIGZvciBhIG5vbi1leGlzdGVudCBzdWJzdHJpbmcgaW5zZXJ0aW9uLAordW5sZXNzIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCBpcyBzZXQuCis8L1A+Cis8UD4KK1BDUkUyX0VSUk9SX1VOU0VUIGlzIHJldHVybmVkIGZvciBhbiB1bnNldCBzdWJzdHJpbmcgaW5zZXJ0aW9uIChpbmNsdWRpbmcgYW4KK3Vua25vd24gc3Vic3RyaW5nIHdoZW4gUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUIGlzIHNldCkgd2hlbiB0aGUgc2ltcGxlCisobm9uLWV4dGVuZGVkKSBzeW50YXggaXMgdXNlZCBhbmQgUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWSBpcyBub3Qgc2V0LgorPC9QPgorPFA+CitQQ1JFMl9FUlJPUl9OT01FTU9SWSBpcyByZXR1cm5lZCBpZiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBub3QgYmlnIGVub3VnaC4gSWYgdGhlCitQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCBvcHRpb24gaXMgc2V0LCB0aGUgc2l6ZSBvZiBidWZmZXIgdGhhdCBpcworbmVlZGVkIGlzIHJldHVybmVkIHZpYSA8aT5vdXRsZW5ndGhwdHI8L2k+LiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBoYXBwZW4gYnkKK2RlZmF1bHQuCis8L1A+Cis8UD4KK1BDUkUyX0VSUk9SX0JBRFJFUExBQ0VNRU5UIGlzIHVzZWQgZm9yIG1pc2NlbGxhbmVvdXMgc3ludGF4IGVycm9ycyBpbiB0aGUKK3JlcGxhY2VtZW50IHN0cmluZywgd2l0aCBtb3JlIHBhcnRpY3VsYXIgZXJyb3JzIGJlaW5nIFBDUkUyX0VSUk9SX0JBRFJFUEVTQ0FQRQorKGludmFsaWQgZXNjYXBlIHNlcXVlbmNlKSwgUENSRTJfRVJST1JfUkVQTUlTU0lOR19CUkFDRSAoY2xvc2luZyBjdXJseSBicmFja2V0Citub3QgZm91bmQpLCBQQ1JFMl9CQURTVUJTVElUVVRJT04gKHN5bnRheCBlcnJvciBpbiBleHRlbmRlZCBncm91cAorc3Vic3RpdHV0aW9uKSwgYW5kIFBDUkUyX0JBRFNVQlBBVFRFUk4gKHRoZSBwYXR0ZXJuIG1hdGNoIGVuZGVkIGJlZm9yZSBpdAorc3RhcnRlZCwgd2hpY2ggY2FuIGhhcHBlbiBpZiBcSyBpcyB1c2VkIGluIGFuIGFzc2VydGlvbikuCis8L1A+Cis8UD4KK0FzIGZvciBhbGwgUENSRTIgZXJyb3JzLCBhIHRleHQgbWVzc2FnZSB0aGF0IGRlc2NyaWJlcyB0aGUgZXJyb3IgY2FuIGJlCitvYnRhaW5lZCBieSBjYWxsaW5nIDxiPnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCk8L2I+LgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzM1IiBocmVmPSIjVE9DMSI+RFVQTElDQVRFIFNVQlBBVFRFUk4gTkFNRVM8L2E+PGJyPgorPFA+Cis8Yj5pbnQgcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuKGNvbnN0IHBjcmUyX2NvZGUgKjxpPmNvZGU8L2k+LDwvYj4KKzxiPiAgUENSRTJfU1BUUiA8aT5uYW1lPC9pPiwgUENSRTJfU1BUUiAqPGk+Zmlyc3Q8L2k+LCBQQ1JFMl9TUFRSICo8aT5sYXN0PC9pPik7PC9iPgorPC9QPgorPFA+CitXaGVuIGEgcGF0dGVybiBpcyBjb21waWxlZCB3aXRoIHRoZSBQQ1JFMl9EVVBOQU1FUyBvcHRpb24sIG5hbWVzIGZvcgorc3VicGF0dGVybnMgYXJlIG5vdCByZXF1aXJlZCB0byBiZSB1bmlxdWUuIER1cGxpY2F0ZSBuYW1lcyBhcmUgYWx3YXlzIGFsbG93ZWQKK2ZvciBzdWJwYXR0ZXJucyB3aXRoIHRoZSBzYW1lIG51bWJlciwgY3JlYXRlZCBieSB1c2luZyB0aGUgKD98IGZlYXR1cmUuIEluZGVlZCwKK2lmIHN1Y2ggc3VicGF0dGVybnMgYXJlIG5hbWVkLCB0aGV5IGFyZSByZXF1aXJlZCB0byB1c2UgdGhlIHNhbWUgbmFtZXMuCis8L1A+Cis8UD4KK05vcm1hbGx5LCBwYXR0ZXJucyB3aXRoIGR1cGxpY2F0ZSBuYW1lcyBhcmUgc3VjaCB0aGF0IGluIGFueSBvbmUgbWF0Y2gsIG9ubHkKK29uZSBvZiB0aGUgbmFtZWQgc3VicGF0dGVybnMgcGFydGljaXBhdGVzLiBBbiBleGFtcGxlIGlzIHNob3duIGluIHRoZQorPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwiPjxiPnBjcmUycGF0dGVybjwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPC9QPgorPFA+CitXaGVuIGR1cGxpY2F0ZXMgYXJlIHByZXNlbnQsIDxiPnBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZSgpPC9iPiBhbmQKKzxiPnBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lKCk8L2I+IHJldHVybiB0aGUgZmlyc3Qgc3Vic3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8KK3RoZSBnaXZlbiBuYW1lIHRoYXQgaXMgc2V0LiBPbmx5IGlmIG5vbmUgYXJlIHNldCBpcyBQQ1JFMl9FUlJPUl9VTlNFVCBpcworcmV0dXJuZWQuIFRoZSA8Yj5wY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZSgpPC9iPiBmdW5jdGlvbiByZXR1cm5zIHRoZQorZXJyb3IgUENSRTJfRVJST1JfTk9VTklRVUVTVUJTVFJJTkcgd2hlbiB0aGVyZSBhcmUgZHVwbGljYXRlIG5hbWVzLgorPC9QPgorPFA+CitJZiB5b3Ugd2FudCB0byBnZXQgZnVsbCBkZXRhaWxzIG9mIGFsbCBjYXB0dXJlZCBzdWJzdHJpbmdzIGZvciBhIGdpdmVuIG5hbWUsCit5b3UgbXVzdCB1c2UgdGhlIDxiPnBjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2NhbigpPC9iPiBmdW5jdGlvbi4gVGhlIGZpcnN0Cithcmd1bWVudCBpcyB0aGUgY29tcGlsZWQgcGF0dGVybiwgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIG5hbWUuIElmIHRoZSB0aGlyZCBhbmQKK2ZvdXJ0aCBhcmd1bWVudHMgYXJlIE5VTEwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgZ3JvdXAgbnVtYmVyIGZvciBhIHVuaXF1ZQorbmFtZSwgb3IgUENSRTJfRVJST1JfTk9VTklRVUVTVUJTVFJJTkcgb3RoZXJ3aXNlLgorPC9QPgorPFA+CitXaGVuIHRoZSB0aGlyZCBhbmQgZm91cnRoIGFyZ3VtZW50cyBhcmUgbm90IE5VTEwsIHRoZXkgbXVzdCBiZSBwb2ludGVycyB0bwordmFyaWFibGVzIHRoYXQgYXJlIHVwZGF0ZWQgYnkgdGhlIGZ1bmN0aW9uLiBBZnRlciBpdCBoYXMgcnVuLCB0aGV5IHBvaW50IHRvIHRoZQorZmlyc3QgYW5kIGxhc3QgZW50cmllcyBpbiB0aGUgbmFtZS10by1udW1iZXIgdGFibGUgZm9yIHRoZSBnaXZlbiBuYW1lLCBhbmQgdGhlCitmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgZWFjaCBlbnRyeSBpbiBjb2RlIHVuaXRzLiBJbiBib3RoIGNhc2VzLAorUENSRTJfRVJST1JfTk9TVUJTVFJJTkcgaXMgcmV0dXJuZWQgaWYgdGhlcmUgYXJlIG5vIGVudHJpZXMgZm9yIHRoZSBnaXZlbiBuYW1lLgorPC9QPgorPFA+CitUaGUgZm9ybWF0IG9mIHRoZSBuYW1lIHRhYmxlIGlzIGRlc2NyaWJlZAorPGEgaHJlZj0iI2luZm9hYm91dHBhdHRlcm4iPmFib3ZlPC9hPgoraW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgPGk+SW5mb3JtYXRpb24gYWJvdXQgYSBwYXR0ZXJuPC9pPi4gR2l2ZW4gYWxsIHRoZQorcmVsZXZhbnQgZW50cmllcyBmb3IgdGhlIG5hbWUsIHlvdSBjYW4gZXh0cmFjdCBlYWNoIG9mIHRoZWlyIG51bWJlcnMsIGFuZCBoZW5jZQordGhlIGNhcHR1cmVkIGRhdGEuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMzYiIGhyZWY9IiNUT0MxIj5GSU5ESU5HIEFMTCBQT1NTSUJMRSBNQVRDSEVTIEFUIE9ORSBQT1NJVElPTjwvYT48YnI+Cis8UD4KK1RoZSB0cmFkaXRpb25hbCBtYXRjaGluZyBmdW5jdGlvbiB1c2VzIGEgc2ltaWxhciBhbGdvcml0aG0gdG8gUGVybCwgd2hpY2ggc3RvcHMKK3doZW4gaXQgZmluZHMgdGhlIGZpcnN0IG1hdGNoIGF0IGEgZ2l2ZW4gcG9pbnQgaW4gdGhlIHN1YmplY3QuIElmIHlvdSB3YW50IHRvCitmaW5kIGFsbCBwb3NzaWJsZSBtYXRjaGVzLCBvciB0aGUgbG9uZ2VzdCBwb3NzaWJsZSBtYXRjaCBhdCBhIGdpdmVuIHBvc2l0aW9uLAorY29uc2lkZXIgdXNpbmcgdGhlIGFsdGVybmF0aXZlIG1hdGNoaW5nIGZ1bmN0aW9uIChzZWUgYmVsb3cpIGluc3RlYWQuIElmIHlvdQorY2Fubm90IHVzZSB0aGUgYWx0ZXJuYXRpdmUgZnVuY3Rpb24sIHlvdSBjYW4ga2x1ZGdlIGl0IHVwIGJ5IG1ha2luZyB1c2Ugb2YgdGhlCitjYWxsb3V0IGZhY2lsaXR5LCB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlCis8YSBocmVmPSJwY3JlMmNhbGxvdXQuaHRtbCI+PGI+cGNyZTJjYWxsb3V0PC9iPjwvYT4KK2RvY3VtZW50YXRpb24uCis8L1A+Cis8UD4KK1doYXQgeW91IGhhdmUgdG8gZG8gaXMgdG8gaW5zZXJ0IGEgY2FsbG91dCByaWdodCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLgorV2hlbiB5b3VyIGNhbGxvdXQgZnVuY3Rpb24gaXMgY2FsbGVkLCBleHRyYWN0IGFuZCBzYXZlIHRoZSBjdXJyZW50IG1hdGNoZWQKK3N1YnN0cmluZy4gVGhlbiByZXR1cm4gMSwgd2hpY2ggZm9yY2VzIDxiPnBjcmUyX21hdGNoKCk8L2I+IHRvIGJhY2t0cmFjayBhbmQgdHJ5CitvdGhlciBhbHRlcm5hdGl2ZXMuIFVsdGltYXRlbHksIHdoZW4gaXQgcnVucyBvdXQgb2YgbWF0Y2hlcywKKzxiPnBjcmUyX21hdGNoKCk8L2I+IHdpbGwgeWllbGQgUENSRTJfRVJST1JfTk9NQVRDSC4KKzxhIG5hbWU9ImRmYW1hdGNoIj48L2E+PC9QPgorPGJyPjxhIG5hbWU9IlNFQzM3IiBocmVmPSIjVE9DMSI+TUFUQ0hJTkcgQSBQQVRURVJOOiBUSEUgQUxURVJOQVRJVkUgRlVOQ1RJT048L2E+PGJyPgorPFA+Cis8Yj5pbnQgcGNyZTJfZGZhX21hdGNoKGNvbnN0IHBjcmUyX2NvZGUgKjxpPmNvZGU8L2k+LCBQQ1JFMl9TUFRSIDxpPnN1YmplY3Q8L2k+LDwvYj4KKzxiPiAgUENSRTJfU0laRSA8aT5sZW5ndGg8L2k+LCBQQ1JFMl9TSVpFIDxpPnN0YXJ0b2Zmc2V0PC9pPiw8L2I+Cis8Yj4gIHVpbnQzMl90IDxpPm9wdGlvbnM8L2k+LCBwY3JlMl9tYXRjaF9kYXRhICo8aT5tYXRjaF9kYXRhPC9pPiw8L2I+Cis8Yj4gIHBjcmUyX21hdGNoX2NvbnRleHQgKjxpPm1jb250ZXh0PC9pPiw8L2I+Cis8Yj4gIGludCAqPGk+d29ya3NwYWNlPC9pPiwgUENSRTJfU0laRSA8aT53c2NvdW50PC9pPik7PC9iPgorPC9QPgorPFA+CitUaGUgZnVuY3Rpb24gPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IGlzIGNhbGxlZCB0byBtYXRjaCBhIHN1YmplY3Qgc3RyaW5nCithZ2FpbnN0IGEgY29tcGlsZWQgcGF0dGVybiwgdXNpbmcgYSBtYXRjaGluZyBhbGdvcml0aG0gdGhhdCBzY2FucyB0aGUgc3ViamVjdAorc3RyaW5nIGp1c3Qgb25jZSwgYW5kIGRvZXMgbm90IGJhY2t0cmFjay4gVGhpcyBoYXMgZGlmZmVyZW50IGNoYXJhY3RlcmlzdGljcyB0bwordGhlIG5vcm1hbCBhbGdvcml0aG0sIGFuZCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFBlcmwuIFNvbWUgb2YgdGhlIGZlYXR1cmVzIG9mCitQQ1JFMiBwYXR0ZXJucyBhcmUgbm90IHN1cHBvcnRlZC4gTmV2ZXJ0aGVsZXNzLCB0aGVyZSBhcmUgdGltZXMgd2hlbiB0aGlzIGtpbmQKK29mIG1hdGNoaW5nIGNhbiBiZSB1c2VmdWwuIEZvciBhIGRpc2N1c3Npb24gb2YgdGhlIHR3byBtYXRjaGluZyBhbGdvcml0aG1zLCBhbmQKK2EgbGlzdCBvZiBmZWF0dXJlcyB0aGF0IDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiBkb2VzIG5vdCBzdXBwb3J0LCBzZWUgdGhlCis8YSBocmVmPSJwY3JlMm1hdGNoaW5nLmh0bWwiPjxiPnBjcmUybWF0Y2hpbmc8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4KKzwvUD4KKzxQPgorVGhlIGFyZ3VtZW50cyBmb3IgdGhlIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiBmdW5jdGlvbiBhcmUgdGhlIHNhbWUgYXMgZm9yCis8Yj5wY3JlMl9tYXRjaCgpPC9iPiwgcGx1cyB0d28gZXh0cmFzLiBUaGUgb3ZlY3RvciB3aXRoaW4gdGhlIG1hdGNoIGRhdGEgYmxvY2sKK2lzIHVzZWQgaW4gYSBkaWZmZXJlbnQgd2F5LCBhbmQgdGhpcyBpcyBkZXNjcmliZWQgYmVsb3cuIFRoZSBvdGhlciBjb21tb24KK2FyZ3VtZW50cyBhcmUgdXNlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIDxiPnBjcmUyX21hdGNoKCk8L2I+LCBzbyB0aGVpcgorZGVzY3JpcHRpb24gaXMgbm90IHJlcGVhdGVkIGhlcmUuCis8L1A+Cis8UD4KK1RoZSB0d28gYWRkaXRpb25hbCBhcmd1bWVudHMgcHJvdmlkZSB3b3Jrc3BhY2UgZm9yIHRoZSBmdW5jdGlvbi4gVGhlIHdvcmtzcGFjZQordmVjdG9yIHNob3VsZCBjb250YWluIGF0IGxlYXN0IDIwIGVsZW1lbnRzLiBJdCBpcyB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mCittdWx0aXBsZSBwYXRocyB0aHJvdWdoIHRoZSBwYXR0ZXJuIHRyZWUuIE1vcmUgd29ya3NwYWNlIGlzIG5lZWRlZCBmb3IgcGF0dGVybnMKK2FuZCBzdWJqZWN0cyB3aGVyZSB0aGVyZSBhcmUgYSBsb3Qgb2YgcG90ZW50aWFsIG1hdGNoZXMuCis8L1A+Cis8UD4KK0hlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjYWxsIHRvIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPjoKKzxwcmU+CisgIGludCB3c3BhY2VbMjBdOworICBwY3JlMl9tYXRjaF9kYXRhICptZCA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKDQsIE5VTEwpOworICBpbnQgcmMgPSBwY3JlMl9kZmFfbWF0Y2goCisgICAgcmUsICAgICAgICAgICAgIC8qIHJlc3VsdCBvZiBwY3JlMl9jb21waWxlKCkgKi8KKyAgICAic29tZSBzdHJpbmciLCAgLyogdGhlIHN1YmplY3Qgc3RyaW5nICovCisgICAgMTEsICAgICAgICAgICAgIC8qIHRoZSBsZW5ndGggb2YgdGhlIHN1YmplY3Qgc3RyaW5nICovCisgICAgMCwgICAgICAgICAgICAgIC8qIHN0YXJ0IGF0IG9mZnNldCAwIGluIHRoZSBzdWJqZWN0ICovCisgICAgMCwgICAgICAgICAgICAgIC8qIGRlZmF1bHQgb3B0aW9ucyAqLworICAgIG1hdGNoX2RhdGEsICAgICAvKiB0aGUgbWF0Y2ggZGF0YSBibG9jayAqLworICAgIE5VTEwsICAgICAgICAgICAvKiBhIG1hdGNoIGNvbnRleHQ7IE5VTEwgbWVhbnMgdXNlIGRlZmF1bHRzICovCisgICAgd3NwYWNlLCAgICAgICAgIC8qIHdvcmtpbmcgc3BhY2UgdmVjdG9yICovCisgICAgMjApOyAgICAgICAgICAgIC8qIG51bWJlciBvZiBlbGVtZW50cyAoTk9UIHNpemUgaW4gYnl0ZXMpICovCis8L1BSRT4KKzwvUD4KKzxicj48Yj4KK09wdGlvbiBiaXRzIGZvciA8Yj5wY3JlX2RmYV9tYXRjaCgpPC9iPgorPC9iPjxicj4KKzxQPgorVGhlIHVudXNlZCBiaXRzIG9mIHRoZSA8aT5vcHRpb25zPC9pPiBhcmd1bWVudCBmb3IgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IG11c3QKK2JlIHplcm8uIFRoZSBvbmx5IGJpdHMgdGhhdCBtYXkgYmUgc2V0IGFyZSBQQ1JFMl9BTkNIT1JFRCwgUENSRTJfTk9UQk9MLAorUENSRTJfTk9URU9MLCBQQ1JFMl9OT1RFTVBUWSwgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwgUENSRTJfTk9fVVRGX0NIRUNLLAorUENSRTJfUEFSVElBTF9IQVJELCBQQ1JFMl9QQVJUSUFMX1NPRlQsIFBDUkUyX0RGQV9TSE9SVEVTVCwgYW5kCitQQ1JFMl9ERkFfUkVTVEFSVC4gQWxsIGJ1dCB0aGUgbGFzdCBmb3VyIG9mIHRoZXNlIGFyZSBleGFjdGx5IHRoZSBzYW1lIGFzIGZvcgorPGI+cGNyZTJfbWF0Y2goKTwvYj4sIHNvIHRoZWlyIGRlc2NyaXB0aW9uIGlzIG5vdCByZXBlYXRlZCBoZXJlLgorPHByZT4KKyAgUENSRTJfUEFSVElBTF9IQVJECisgIFBDUkUyX1BBUlRJQUxfU09GVAorPC9wcmU+CitUaGVzZSBoYXZlIHRoZSBzYW1lIGdlbmVyYWwgZWZmZWN0IGFzIHRoZXkgZG8gZm9yIDxiPnBjcmUyX21hdGNoKCk8L2I+LCBidXQgdGhlCitkZXRhaWxzIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQuIFdoZW4gUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldCBmb3IKKzxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiwgaXQgcmV0dXJucyBQQ1JFMl9FUlJPUl9QQVJUSUFMIGlmIHRoZSBlbmQgb2YgdGhlCitzdWJqZWN0IGlzIHJlYWNoZWQgYW5kIHRoZXJlIGlzIHN0aWxsIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBwb3NzaWJpbGl0eSB0aGF0CityZXF1aXJlcyBhZGRpdGlvbmFsIGNoYXJhY3RlcnMuIFRoaXMgaGFwcGVucyBldmVuIGlmIHNvbWUgY29tcGxldGUgbWF0Y2hlcyBoYXZlCithbHJlYWR5IGJlZW4gZm91bmQuIFdoZW4gUENSRTJfUEFSVElBTF9TT0ZUIGlzIHNldCwgdGhlIHJldHVybiBjb2RlCitQQ1JFMl9FUlJPUl9OT01BVENIIGlzIGNvbnZlcnRlZCBpbnRvIFBDUkUyX0VSUk9SX1BBUlRJQUwgaWYgdGhlIGVuZCBvZiB0aGUKK3N1YmplY3QgaXMgcmVhY2hlZCwgdGhlcmUgaGF2ZSBiZWVuIG5vIGNvbXBsZXRlIG1hdGNoZXMsIGJ1dCB0aGVyZSBpcyBzdGlsbCBhdAorbGVhc3Qgb25lIG1hdGNoaW5nIHBvc3NpYmlsaXR5LiBUaGUgcG9ydGlvbiBvZiB0aGUgc3RyaW5nIHRoYXQgd2FzIGluc3BlY3RlZAord2hlbiB0aGUgbG9uZ2VzdCBwYXJ0aWFsIG1hdGNoIHdhcyBmb3VuZCBpcyBzZXQgYXMgdGhlIGZpcnN0IG1hdGNoaW5nIHN0cmluZyBpbgorYm90aCBjYXNlcy4gVGhlcmUgaXMgYSBtb3JlIGRldGFpbGVkIGRpc2N1c3Npb24gb2YgcGFydGlhbCBhbmQgbXVsdGktc2VnbWVudAorbWF0Y2hpbmcsIHdpdGggZXhhbXBsZXMsIGluIHRoZQorPGEgaHJlZj0icGNyZTJwYXJ0aWFsLmh0bWwiPjxiPnBjcmUycGFydGlhbDwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPHByZT4KKyAgUENSRTJfREZBX1NIT1JURVNUCis8L3ByZT4KK1NldHRpbmcgdGhlIFBDUkUyX0RGQV9TSE9SVEVTVCBvcHRpb24gY2F1c2VzIHRoZSBtYXRjaGluZyBhbGdvcml0aG0gdG8gc3RvcCBhcworc29vbiBhcyBpdCBoYXMgZm91bmQgb25lIG1hdGNoLiBCZWNhdXNlIG9mIHRoZSB3YXkgdGhlIGFsdGVybmF0aXZlIGFsZ29yaXRobQord29ya3MsIHRoaXMgaXMgbmVjZXNzYXJpbHkgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIG1hdGNoIGF0IHRoZSBmaXJzdCBwb3NzaWJsZQorbWF0Y2hpbmcgcG9pbnQgaW4gdGhlIHN1YmplY3Qgc3RyaW5nLgorPHByZT4KKyAgUENSRTJfREZBX1JFU1RBUlQKKzwvcHJlPgorV2hlbiA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4gcmV0dXJucyBhIHBhcnRpYWwgbWF0Y2gsIGl0IGlzIHBvc3NpYmxlIHRvIGNhbGwgaXQKK2FnYWluLCB3aXRoIGFkZGl0aW9uYWwgc3ViamVjdCBjaGFyYWN0ZXJzLCBhbmQgaGF2ZSBpdCBjb250aW51ZSB3aXRoIHRoZSBzYW1lCittYXRjaC4gVGhlIFBDUkUyX0RGQV9SRVNUQVJUIG9wdGlvbiByZXF1ZXN0cyB0aGlzIGFjdGlvbjsgd2hlbiBpdCBpcyBzZXQsIHRoZQorPGk+d29ya3NwYWNlPC9pPiBhbmQgPGk+d3Njb3VudDwvaT4gb3B0aW9ucyBtdXN0IHJlZmVyZW5jZSB0aGUgc2FtZSB2ZWN0b3IgYXMKK2JlZm9yZSBiZWNhdXNlIGRhdGEgYWJvdXQgdGhlIG1hdGNoIHNvIGZhciBpcyBsZWZ0IGluIHRoZW0gYWZ0ZXIgYSBwYXJ0aWFsCittYXRjaC4gVGhlcmUgaXMgbW9yZSBkaXNjdXNzaW9uIG9mIHRoaXMgZmFjaWxpdHkgaW4gdGhlCis8YSBocmVmPSJwY3JlMnBhcnRpYWwuaHRtbCI+PGI+cGNyZTJwYXJ0aWFsPC9iPjwvYT4KK2RvY3VtZW50YXRpb24uCis8L1A+Cis8YnI+PGI+CitTdWNjZXNzZnVsIHJldHVybnMgZnJvbSA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4KKzwvYj48YnI+Cis8UD4KK1doZW4gPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IHN1Y2NlZWRzLCBpdCBtYXkgaGF2ZSBtYXRjaGVkIG1vcmUgdGhhbiBvbmUKK3N1YnN0cmluZyBpbiB0aGUgc3ViamVjdC4gTm90ZSwgaG93ZXZlciwgdGhhdCBhbGwgdGhlIG1hdGNoZXMgZnJvbSBvbmUgcnVuIG9mCit0aGUgZnVuY3Rpb24gc3RhcnQgYXQgdGhlIHNhbWUgcG9pbnQgaW4gdGhlIHN1YmplY3QuIFRoZSBzaG9ydGVyIG1hdGNoZXMgYXJlCithbGwgaW5pdGlhbCBzdWJzdHJpbmdzIG9mIHRoZSBsb25nZXIgbWF0Y2hlcy4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwYXR0ZXJuCis8cHJlPgorICAmIzYwOy4qJiM2MjsKKzwvcHJlPgoraXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdHJpbmcKKzxwcmU+CisgIFRoaXMgaXMgJiM2MDtzb21ldGhpbmcmIzYyOyAmIzYwO3NvbWV0aGluZyBlbHNlJiM2MjsgJiM2MDtzb21ldGhpbmcgZnVydGhlciYjNjI7IG5vIG1vcmUKKzwvcHJlPgordGhlIHRocmVlIG1hdGNoZWQgc3RyaW5ncyBhcmUKKzxwcmU+CisgICYjNjA7c29tZXRoaW5nJiM2MjsgJiM2MDtzb21ldGhpbmcgZWxzZSYjNjI7ICYjNjA7c29tZXRoaW5nIGZ1cnRoZXImIzYyOworICAmIzYwO3NvbWV0aGluZyYjNjI7ICYjNjA7c29tZXRoaW5nIGVsc2UmIzYyOworICAmIzYwO3NvbWV0aGluZyYjNjI7Cis8L3ByZT4KK09uIHN1Y2Nlc3MsIHRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8sIHdoaWNoIGlzCit0aGUgbnVtYmVyIG9mIG1hdGNoZWQgc3Vic3RyaW5ncy4gVGhlIG9mZnNldHMgb2YgdGhlIHN1YnN0cmluZ3MgYXJlIHJldHVybmVkIGluCit0aGUgb3ZlY3RvciwgYW5kIGNhbiBiZSBleHRyYWN0ZWQgYnkgbnVtYmVyIGluIHRoZSBzYW1lIHdheSBhcyBmb3IKKzxiPnBjcmUyX21hdGNoKCk8L2I+LCBidXQgdGhlIG51bWJlcnMgYmVhciBubyByZWxhdGlvbiB0byBhbnkgY2FwdHVyaW5nIGdyb3VwcwordGhhdCBtYXkgZXhpc3QgaW4gdGhlIHBhdHRlcm4sIGJlY2F1c2UgREZBIG1hdGNoaW5nIGRvZXMgbm90IHN1cHBvcnQgZ3JvdXAKK2NhcHR1cmUuCis8L1A+Cis8UD4KK0NhbGxzIHRvIHRoZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgdGhhdCBleHRyYWN0IHN1YnN0cmluZ3MgYnkgbmFtZQorcmV0dXJuIHRoZSBlcnJvciBQQ1JFMl9FUlJPUl9ERkFfVUZVTkMgKHVuc3VwcG9ydGVkIGZ1bmN0aW9uKSBpZiB1c2VkIGFmdGVyIGEKK0RGQSBtYXRjaC4gVGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGV4dHJhY3Qgc3Vic3RyaW5ncyBieSBudW1iZXIgbmV2ZXIKK3JldHVybiBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORywgYW5kIHRoZSBtZWFuaW5ncyBvZiBzb21lIG90aGVyIGVycm9ycyBhcmUKK3NsaWdodGx5IGRpZmZlcmVudDoKKzxwcmU+CisgIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFCis8L3ByZT4KK1RoZSBvdmVjdG9yIGlzIG5vdCBiaWcgZW5vdWdoIHRvIGluY2x1ZGUgYSBzbG90IGZvciB0aGUgZ2l2ZW4gc3Vic3RyaW5nIG51bWJlci4KKzxwcmU+CisgIFBDUkUyX0VSUk9SX1VOU0VUCis8L3ByZT4KK1RoZXJlIGlzIGEgc2xvdCBpbiB0aGUgb3ZlY3RvciBmb3IgdGhpcyBzdWJzdHJpbmcsIGJ1dCB0aGVyZSB3ZXJlIGluc3VmZmljaWVudAorbWF0Y2hlcyB0byBmaWxsIGl0LgorPC9QPgorPFA+CitUaGUgbWF0Y2hlZCBzdHJpbmdzIGFyZSBzdG9yZWQgaW4gdGhlIG92ZWN0b3IgaW4gcmV2ZXJzZSBvcmRlciBvZiBsZW5ndGg7IHRoYXQKK2lzLCB0aGUgbG9uZ2VzdCBtYXRjaGluZyBzdHJpbmcgaXMgZmlyc3QuIElmIHRoZXJlIHdlcmUgdG9vIG1hbnkgbWF0Y2hlcyB0byBmaXQKK2ludG8gdGhlIG92ZWN0b3IsIHRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgemVybywgYW5kIHRoZSB2ZWN0b3IgaXMgZmlsbGVkCit3aXRoIHRoZSBsb25nZXN0IG1hdGNoZXMuCis8L1A+Cis8UD4KK05PVEU6IFBDUkUyJ3MgImF1dG8tcG9zc2Vzc2lmaWNhdGlvbiIgb3B0aW1pemF0aW9uIHVzdWFsbHkgYXBwbGllcyB0byBjaGFyYWN0ZXIKK3JlcGVhdHMgYXQgdGhlIGVuZCBvZiBhIHBhdHRlcm4gKGFzIHdlbGwgYXMgaW50ZXJuYWxseSkuIEZvciBleGFtcGxlLCB0aGUKK3BhdHRlcm4gImFcZCsiIGlzIGNvbXBpbGVkIGFzIGlmIGl0IHdlcmUgImFcZCsrIi4gRm9yIERGQSBtYXRjaGluZywgdGhpcworbWVhbnMgdGhhdCBvbmx5IG9uZSBwb3NzaWJsZSBtYXRjaCBpcyBmb3VuZC4gSWYgeW91IHJlYWxseSBkbyB3YW50IG11bHRpcGxlCittYXRjaGVzIGluIHN1Y2ggY2FzZXMsIGVpdGhlciB1c2UgYW4gdW5ncmVlZHkgcmVwZWF0IGF1Y2ggYXMgImFcZCs/IiBvciBzZXQKK3RoZSBQQ1JFMl9OT19BVVRPX1BPU1NFU1Mgb3B0aW9uIHdoZW4gY29tcGlsaW5nLgorPC9QPgorPGJyPjxiPgorRXJyb3IgcmV0dXJucyBmcm9tIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPgorPC9iPjxicj4KKzxQPgorVGhlIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiBmdW5jdGlvbiByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIHdoZW4gaXQgZmFpbHMuCitNYW55IG9mIHRoZSBlcnJvcnMgYXJlIHRoZSBzYW1lIGFzIGZvciA8Yj5wY3JlMl9tYXRjaCgpPC9iPiwgYXMgZGVzY3JpYmVkCis8YSBocmVmPSIjZXJyb3JsaXN0Ij5hYm92ZS48L2E+CitUaGVyZSBhcmUgaW4gYWRkaXRpb24gdGhlIGZvbGxvd2luZyBlcnJvcnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8KKzxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPjoKKzxwcmU+CisgIFBDUkUyX0VSUk9SX0RGQV9VSVRFTQorPC9wcmU+CitUaGlzIHJldHVybiBpcyBnaXZlbiBpZiA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4gZW5jb3VudGVycyBhbiBpdGVtIGluIHRoZQorcGF0dGVybiB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQsIGZvciBpbnN0YW5jZSwgdGhlIHVzZSBvZiBcQyBpbiBhIFVURiBtb2RlIG9yCithIGJhY2sgcmVmZXJlbmNlLgorPHByZT4KKyAgUENSRTJfRVJST1JfREZBX1VDT05ECis8L3ByZT4KK1RoaXMgcmV0dXJuIGlzIGdpdmVuIGlmIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiBlbmNvdW50ZXJzIGEgY29uZGl0aW9uIGl0ZW0KK3RoYXQgdXNlcyBhIGJhY2sgcmVmZXJlbmNlIGZvciB0aGUgY29uZGl0aW9uLCBvciBhIHRlc3QgZm9yIHJlY3Vyc2lvbiBpbiBhCitzcGVjaWZpYyBncm91cC4gVGhlc2UgYXJlIG5vdCBzdXBwb3J0ZWQuCis8cHJlPgorICBQQ1JFMl9FUlJPUl9ERkFfV1NTSVpFCis8L3ByZT4KK1RoaXMgcmV0dXJuIGlzIGdpdmVuIGlmIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiBydW5zIG91dCBvZiBzcGFjZSBpbiB0aGUKKzxpPndvcmtzcGFjZTwvaT4gdmVjdG9yLgorPHByZT4KKyAgUENSRTJfRVJST1JfREZBX1JFQ1VSU0UKKzwvcHJlPgorV2hlbiBhIHJlY3Vyc2l2ZSBzdWJwYXR0ZXJuIGlzIHByb2Nlc3NlZCwgdGhlIG1hdGNoaW5nIGZ1bmN0aW9uIGNhbGxzIGl0c2VsZgorcmVjdXJzaXZlbHksIHVzaW5nIHByaXZhdGUgbWVtb3J5IGZvciB0aGUgb3ZlY3RvciBhbmQgPGk+d29ya3NwYWNlPC9pPi4gVGhpcworZXJyb3IgaXMgZ2l2ZW4gaWYgdGhlIGludGVybmFsIG92ZWN0b3IgaXMgbm90IGxhcmdlIGVub3VnaC4gVGhpcyBzaG91bGQgYmUKK2V4dHJlbWVseSByYXJlLCBhcyBhIHZlY3RvciBvZiBzaXplIDEwMDAgaXMgdXNlZC4KKzxwcmU+CisgIFBDUkUyX0VSUk9SX0RGQV9CQURSRVNUQVJUCis8L3ByZT4KK1doZW4gPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IGlzIGNhbGxlZCB3aXRoIHRoZSA8Yj5QQ1JFMl9ERkFfUkVTVEFSVDwvYj4gb3B0aW9uLAorc29tZSBwbGF1c2liaWxpdHkgY2hlY2tzIGFyZSBtYWRlIG9uIHRoZSBjb250ZW50cyBvZiB0aGUgd29ya3NwYWNlLCB3aGljaAorc2hvdWxkIGNvbnRhaW4gZGF0YSBhYm91dCB0aGUgcHJldmlvdXMgcGFydGlhbCBtYXRjaC4gSWYgYW55IG9mIHRoZXNlIGNoZWNrcworZmFpbCwgdGhpcyBlcnJvciBpcyBnaXZlbi4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMzOCIgaHJlZj0iI1RPQzEiPlNFRSBBTFNPPC9hPjxicj4KKzxQPgorPGI+cGNyZTJidWlsZDwvYj4oMyksIDxiPnBjcmUyY2FsbG91dDwvYj4oMyksIDxiPnBjcmUyZGVtbygzKTwvYj4sCis8Yj5wY3JlMm1hdGNoaW5nPC9iPigzKSwgPGI+cGNyZTJwYXJ0aWFsPC9iPigzKSwgPGI+cGNyZTJwb3NpeDwvYj4oMyksCis8Yj5wY3JlMnNhbXBsZTwvYj4oMyksIDxiPnBjcmUyc3RhY2s8L2I+KDMpLCA8Yj5wY3JlMnVuaWNvZGU8L2I+KDMpLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzM5IiBocmVmPSIjVE9DMSI+QVVUSE9SPC9hPjxicj4KKzxQPgorUGhpbGlwIEhhemVsCis8YnI+CitVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCis8YnI+CitDYW1icmlkZ2UsIEVuZ2xhbmQuCis8YnI+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNDAiIGhyZWY9IiNUT0MxIj5SRVZJU0lPTjwvYT48YnI+Cis8UD4KK0xhc3QgdXBkYXRlZDogMTYgRGVjZW1iZXIgMjAxNQorPGJyPgorQ29weXJpZ2h0ICZjb3B5OyAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCis8YnI+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMmJ1aWxkLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmJ1aWxkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1ZjczNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyYnVpbGQuaHRtbApAQCAtMCwwICsxLDUxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMmJ1aWxkIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMmJ1aWxkIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8dWw+Cis8bGk+PGEgbmFtZT0iVE9DMSIgaHJlZj0iI1NFQzEiPkJVSUxESU5HIFBDUkUyPC9hPgorPGxpPjxhIG5hbWU9IlRPQzIiIGhyZWY9IiNTRUMyIj5QQ1JFMiBCVUlMRC1USU1FIE9QVElPTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMyIgaHJlZj0iI1NFQzMiPkJVSUxESU5HIDgtQklULCAxNi1CSVQgQU5EIDMyLUJJVCBMSUJSQVJJRVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNCIgaHJlZj0iI1NFQzQiPkJVSUxESU5HIFNIQVJFRCBBTkQgU1RBVElDIExJQlJBUklFUzwvYT4KKzxsaT48YSBuYW1lPSJUT0M1IiBocmVmPSIjU0VDNSI+VU5JQ09ERSBBTkQgVVRGIFNVUFBPUlQ8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNiIgaHJlZj0iI1NFQzYiPkRJU0FCTElORyBUSEUgVVNFIE9GIFxDPC9hPgorPGxpPjxhIG5hbWU9IlRPQzciIGhyZWY9IiNTRUM3Ij5KVVNULUlOLVRJTUUgQ09NUElMRVIgU1VQUE9SVDwvYT4KKzxsaT48YSBuYW1lPSJUT0M4IiBocmVmPSIjU0VDOCI+TkVXTElORSBSRUNPR05JVElPTjwvYT4KKzxsaT48YSBuYW1lPSJUT0M5IiBocmVmPSIjU0VDOSI+V0hBVCBcUiBNQVRDSEVTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzEwIiBocmVmPSIjU0VDMTAiPkhBTkRMSU5HIFZFUlkgTEFSR0UgUEFUVEVSTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTEiIGhyZWY9IiNTRUMxMSI+QVZPSURJTkcgRVhDRVNTSVZFIFNUQUNLIFVTQUdFPC9hPgorPGxpPjxhIG5hbWU9IlRPQzEyIiBocmVmPSIjU0VDMTIiPkxJTUlUSU5HIFBDUkUyIFJFU09VUkNFIFVTQUdFPC9hPgorPGxpPjxhIG5hbWU9IlRPQzEzIiBocmVmPSIjU0VDMTMiPkNSRUFUSU5HIENIQVJBQ1RFUiBUQUJMRVMgQVQgQlVJTEQgVElNRTwvYT4KKzxsaT48YSBuYW1lPSJUT0MxNCIgaHJlZj0iI1NFQzE0Ij5VU0lORyBFQkNESUMgQ09ERTwvYT4KKzxsaT48YSBuYW1lPSJUT0MxNSIgaHJlZj0iI1NFQzE1Ij5QQ1JFMkdSRVAgT1BUSU9OUyBGT1IgQ09NUFJFU1NFRCBGSUxFIFNVUFBPUlQ8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTYiIGhyZWY9IiNTRUMxNiI+UENSRTJHUkVQIEJVRkZFUiBTSVpFPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE3IiBocmVmPSIjU0VDMTciPlBDUkUyVEVTVCBPUFRJT04gRk9SIExJQlJFQURMSU5FIFNVUFBPUlQ8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTgiIGhyZWY9IiNTRUMxOCI+SU5DTFVESU5HIERFQlVHR0lORyBDT0RFPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE5IiBocmVmPSIjU0VDMTkiPkRFQlVHR0lORyBXSVRIIFZBTEdSSU5EIFNVUFBPUlQ8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjAiIGhyZWY9IiNTRUMyMCI+Q09ERSBDT1ZFUkFHRSBSRVBPUlRJTkc8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjEiIGhyZWY9IiNTRUMyMSI+U0VFIEFMU088L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjIiIGhyZWY9IiNTRUMyMiI+QVVUSE9SPC9hPgorPGxpPjxhIG5hbWU9IlRPQzIzIiBocmVmPSIjU0VDMjMiPlJFVklTSU9OPC9hPgorPC91bD4KKzxicj48YSBuYW1lPSJTRUMxIiBocmVmPSIjVE9DMSI+QlVJTERJTkcgUENSRTI8L2E+PGJyPgorPFA+CitQQ1JFMiBpcyBkaXN0cmlidXRlZCB3aXRoIGEgPGI+Y29uZmlndXJlPC9iPiBzY3JpcHQgdGhhdCBjYW4gYmUgdXNlZCB0byBidWlsZAordGhlIGxpYnJhcnkgaW4gVW5peC1saWtlIGVudmlyb25tZW50cyB1c2luZyB0aGUgYXBwbGljYXRpb25zIGtub3duIGFzCitBdXRvdG9vbHMuIEFsc28gaW4gdGhlIGRpc3RyaWJ1dGlvbiBhcmUgZmlsZXMgdG8gc3VwcG9ydCBidWlsZGluZyB1c2luZworPGI+Q01ha2U8L2I+IGluc3RlYWQgb2YgPGI+Y29uZmlndXJlPC9iPi4gVGhlIHRleHQgZmlsZQorPGEgaHJlZj0iUkVBRE1FLnR4dCI+PGI+UkVBRE1FPC9iPjwvYT4KK2NvbnRhaW5zIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgYnVpbGRpbmcgd2l0aCBBdXRvdG9vbHMgKHNvbWUgb2Ygd2hpY2ggaXMKK3JlcGVhdGVkIGJlbG93KSwgYW5kIGFsc28gaGFzIHNvbWUgY29tbWVudHMgYWJvdXQgYnVpbGRpbmcgb24gdmFyaW91cyBvcGVyYXRpbmcKK3N5c3RlbXMuIFRoZXJlIGlzIGEgbG90IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYnVpbGRpbmcgUENSRTIgd2l0aG91dCB1c2luZworQXV0b3Rvb2xzIChpbmNsdWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgPGI+Q01ha2U8L2I+IGFuZCBidWlsZGluZyAiYnkKK2hhbmQiKSBpbiB0aGUgdGV4dCBmaWxlIGNhbGxlZAorPGEgaHJlZj0iTk9OLUFVVE9UT09MUy1CVUlMRC50eHQiPjxiPk5PTi1BVVRPVE9PTFMtQlVJTEQ8L2I+LjwvYT4KK1lvdSBzaG91bGQgY29uc3VsdCB0aGlzIGZpbGUgYXMgd2VsbCBhcyB0aGUKKzxhIGhyZWY9IlJFQURNRS50eHQiPjxiPlJFQURNRTwvYj48L2E+CitmaWxlIGlmIHlvdSBhcmUgYnVpbGRpbmcgaW4gYSBub24tVW5peC1saWtlIGVudmlyb25tZW50LgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzIiIGhyZWY9IiNUT0MxIj5QQ1JFMiBCVUlMRC1USU1FIE9QVElPTlM8L2E+PGJyPgorPFA+CitUaGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgb3B0aW9uYWwgZmVhdHVyZXMgb2YgUENSRTIgdGhhdCBjYW4gYmUKK3NlbGVjdGVkIHdoZW4gdGhlIGxpYnJhcnkgaXMgY29tcGlsZWQuIEl0IGFzc3VtZXMgdXNlIG9mIHRoZSA8Yj5jb25maWd1cmU8L2I+CitzY3JpcHQsIHdoZXJlIHRoZSBvcHRpb25hbCBmZWF0dXJlcyBhcmUgc2VsZWN0ZWQgb3IgZGVzZWxlY3RlZCBieSBwcm92aWRpbmcKK29wdGlvbnMgdG8gPGI+Y29uZmlndXJlPC9iPiBiZWZvcmUgcnVubmluZyB0aGUgPGI+bWFrZTwvYj4gY29tbWFuZC4gSG93ZXZlciwgdGhlCitzYW1lIG9wdGlvbnMgY2FuIGJlIHNlbGVjdGVkIGluIGJvdGggVW5peC1saWtlIGFuZCBub24tVW5peC1saWtlIGVudmlyb25tZW50cworaWYgeW91IGFyZSB1c2luZyA8Yj5DTWFrZTwvYj4gaW5zdGVhZCBvZiA8Yj5jb25maWd1cmU8L2I+IHRvIGJ1aWxkIFBDUkUyLgorPC9QPgorPFA+CitJZiB5b3UgYXJlIG5vdCB1c2luZyBBdXRvdG9vbHMgb3IgPGI+Q01ha2U8L2I+LCBvcHRpb24gc2VsZWN0aW9uIGNhbiBiZSBkb25lIGJ5CitlZGl0aW5nIHRoZSA8Yj5jb25maWcuaDwvYj4gZmlsZSwgb3IgYnkgcGFzc2luZyBwYXJhbWV0ZXIgc2V0dGluZ3MgdG8gdGhlCitjb21waWxlciwgYXMgZGVzY3JpYmVkIGluCis8YSBocmVmPSJOT04tQVVUT1RPT0xTLUJVSUxELnR4dCI+PGI+Tk9OLUFVVE9UT09MUy1CVUlMRDwvYj4uPC9hPgorPC9QPgorPFA+CitUaGUgY29tcGxldGUgbGlzdCBvZiBvcHRpb25zIGZvciA8Yj5jb25maWd1cmU8L2I+ICh3aGljaCBpbmNsdWRlcyB0aGUgc3RhbmRhcmQKK29uZXMgc3VjaCBhcyB0aGUgc2VsZWN0aW9uIG9mIHRoZSBpbnN0YWxsYXRpb24gZGlyZWN0b3J5KSBjYW4gYmUgb2J0YWluZWQgYnkKK3J1bm5pbmcKKzxwcmU+CisgIC4vY29uZmlndXJlIC0taGVscAorPC9wcmU+CitUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGluY2x1ZGUgZGVzY3JpcHRpb25zIG9mIG9wdGlvbnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aAorLS1lbmFibGUgb3IgLS1kaXNhYmxlLiBUaGVzZSBzZXR0aW5ncyBzcGVjaWZ5IGNoYW5nZXMgdG8gdGhlIGRlZmF1bHRzIGZvciB0aGUKKzxiPmNvbmZpZ3VyZTwvYj4gY29tbWFuZC4gQmVjYXVzZSBvZiB0aGUgd2F5IHRoYXQgPGI+Y29uZmlndXJlPC9iPiB3b3JrcywKKy0tZW5hYmxlIGFuZCAtLWRpc2FibGUgYWx3YXlzIGNvbWUgaW4gcGFpcnMsIHNvIHRoZSBjb21wbGVtZW50YXJ5IG9wdGlvbiBhbHdheXMKK2V4aXN0cyBhcyB3ZWxsLCBidXQgYXMgaXQgc3BlY2lmaWVzIHRoZSBkZWZhdWx0LCBpdCBpcyBub3QgZGVzY3JpYmVkLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzMiIGhyZWY9IiNUT0MxIj5CVUlMRElORyA4LUJJVCwgMTYtQklUIEFORCAzMi1CSVQgTElCUkFSSUVTPC9hPjxicj4KKzxQPgorQnkgZGVmYXVsdCwgYSBsaWJyYXJ5IGNhbGxlZCA8Yj5saWJwY3JlMi04PC9iPiBpcyBidWlsdCwgY29udGFpbmluZyBmdW5jdGlvbnMKK3RoYXQgdGFrZSBzdHJpbmcgYXJndW1lbnRzIGNvbnRhaW5lZCBpbiB2ZWN0b3JzIG9mIGJ5dGVzLCBpbnRlcnByZXRlZCBlaXRoZXIgYXMKK3NpbmdsZS1ieXRlIGNoYXJhY3RlcnMsIG9yIFVURi04IHN0cmluZ3MuIFlvdSBjYW4gYWxzbyBidWlsZCB0d28gb3RoZXIKK2xpYnJhcmllcywgY2FsbGVkIDxiPmxpYnBjcmUyLTE2PC9iPiBhbmQgPGI+bGlicGNyZTItMzI8L2I+LCB3aGljaCBwcm9jZXNzCitzdHJpbmdzIHRoYXQgYXJlIGNvbnRhaW5lZCBpbiB2ZWN0b3JzIG9mIDE2LWJpdCBhbmQgMzItYml0IGNvZGUgdW5pdHMsCityZXNwZWN0aXZlbHkuIFRoZXNlIGNhbiBiZSBpbnRlcnByZXRlZCBlaXRoZXIgYXMgc2luZ2xlLXVuaXQgY2hhcmFjdGVycyBvcgorVVRGLTE2L1VURi0zMiBzdHJpbmdzLiBUbyBidWlsZCB0aGVzZSBhZGRpdGlvbmFsIGxpYnJhcmllcywgYWRkIG9uZSBvciBib3RoIG9mCit0aGUgZm9sbG93aW5nIHRvIHRoZSA8Yj5jb25maWd1cmU8L2I+IGNvbW1hbmQ6Cis8cHJlPgorICAtLWVuYWJsZS1wY3JlMi0xNgorICAtLWVuYWJsZS1wY3JlMi0zMgorPC9wcmU+CitJZiB5b3UgZG8gbm90IHdhbnQgdGhlIDgtYml0IGxpYnJhcnksIGFkZAorPHByZT4KKyAgLS1kaXNhYmxlLXBjcmUyLTgKKzwvcHJlPgorYXMgd2VsbC4gQXQgbGVhc3Qgb25lIG9mIHRoZSB0aHJlZSBsaWJyYXJpZXMgbXVzdCBiZSBidWlsdC4gTm90ZSB0aGF0IHRoZSBQT1NJWAord3JhcHBlciBpcyBmb3IgdGhlIDgtYml0IGxpYnJhcnkgb25seSwgYW5kIHRoYXQgPGI+cGNyZTJncmVwPC9iPiBpcyBhbiA4LWJpdAorcHJvZ3JhbS4gTmVpdGhlciBvZiB0aGVzZSBhcmUgYnVpbHQgaWYgeW91IHNlbGVjdCBvbmx5IHRoZSAxNi1iaXQgb3IgMzItYml0CitsaWJyYXJpZXMuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNCIgaHJlZj0iI1RPQzEiPkJVSUxESU5HIFNIQVJFRCBBTkQgU1RBVElDIExJQlJBUklFUzwvYT48YnI+Cis8UD4KK1RoZSBBdXRvdG9vbHMgUENSRTIgYnVpbGRpbmcgcHJvY2VzcyB1c2VzIDxiPmxpYnRvb2w8L2I+IHRvIGJ1aWxkIGJvdGggc2hhcmVkCithbmQgc3RhdGljIGxpYnJhcmllcyBieSBkZWZhdWx0LiBZb3UgY2FuIHN1cHByZXNzIGFuIHVud2FudGVkIGxpYnJhcnkgYnkgYWRkaW5nCitvbmUgb2YKKzxwcmU+CisgIC0tZGlzYWJsZS1zaGFyZWQKKyAgLS1kaXNhYmxlLXN0YXRpYworPC9wcmU+Cit0byB0aGUgPGI+Y29uZmlndXJlPC9iPiBjb21tYW5kLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzUiIGhyZWY9IiNUT0MxIj5VTklDT0RFIEFORCBVVEYgU1VQUE9SVDwvYT48YnI+Cis8UD4KK0J5IGRlZmF1bHQsIFBDUkUyIGlzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgVW5pY29kZSBhbmQgVVRGIGNoYXJhY3RlciBzdHJpbmdzLgorVG8gYnVpbGQgaXQgd2l0aG91dCBVbmljb2RlIHN1cHBvcnQsIGFkZAorPHByZT4KKyAgLS1kaXNhYmxlLXVuaWNvZGUKKzwvcHJlPgordG8gdGhlIDxiPmNvbmZpZ3VyZTwvYj4gY29tbWFuZC4gVGhpcyBzZXR0aW5nIGFwcGxpZXMgdG8gYWxsIHRocmVlIGxpYnJhcmllcy4gSXQKK2lzIG5vdCBwb3NzaWJsZSB0byBidWlsZCBvbmUgbGlicmFyeSB3aXRoIFVuaWNvZGUgc3VwcG9ydCwgYW5kIGFub3RoZXIgd2l0aG91dCwKK2luIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24uCis8L1A+Cis8UD4KK09mIGl0c2VsZiwgVW5pY29kZSBzdXBwb3J0IGRvZXMgbm90IG1ha2UgUENSRTIgdHJlYXQgc3RyaW5ncyBhcyBVVEYtOCwgVVRGLTE2CitvciBVVEYtMzIuIFRvIGRvIHRoYXQsIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgbGlicmFyeSBjYW4gc2V0IHRoZSBQQ1JFMl9VVEYKK29wdGlvbiB3aGVuIHRoZXkgY2FsbCA8Yj5wY3JlMl9jb21waWxlKCk8L2I+IHRvIGNvbXBpbGUgYSBwYXR0ZXJuLgorQWx0ZXJuYXRpdmVseSwgcGF0dGVybnMgbWF5IGJlIHN0YXJ0ZWQgd2l0aCAoKlVURikgdW5sZXNzIHRoZSBhcHBsaWNhdGlvbiBoYXMKK2xvY2tlZCB0aGlzIG91dCBieSBzZXR0aW5nIFBDUkUyX05FVkVSX1VURi4KKzwvUD4KKzxQPgorVVRGIHN1cHBvcnQgYWxsb3dzIHRoZSBsaWJyYXJpZXMgdG8gcHJvY2VzcyBjaGFyYWN0ZXIgY29kZSBwb2ludHMgdXAgdG8KKzB4MTBmZmZmIGluIHRoZSBzdHJpbmdzIHRoYXQgdGhleSBoYW5kbGUuIEl0IGFsc28gcHJvdmlkZXMgc3VwcG9ydCBmb3IKK2FjY2Vzc2luZyB0aGUgVW5pY29kZSBwcm9wZXJ0aWVzIG9mIHN1Y2ggY2hhcmFjdGVycywgdXNpbmcgcGF0dGVybiBlc2NhcGVzIHN1Y2gKK2FzIFxQLCBccCwgYW5kIFxYLiBPbmx5IHRoZSBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnRpZXMgc3VjaCBhcyA8aT5MdTwvaT4gYW5kCis8aT5OZDwvaT4gYXJlIHN1cHBvcnRlZC4gRGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlCis8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCI+PGI+cGNyZTJwYXR0ZXJuPC9iPjwvYT4KK2RvY3VtZW50YXRpb24uCis8L1A+Cis8UD4KK1BhdHRlcm4gZXNjYXBlcyBzdWNoIGFzIFxkIGFuZCBcdyBkbyBub3QgYnkgZGVmYXVsdCBtYWtlIHVzZSBvZiBVbmljb2RlCitwcm9wZXJ0aWVzLiBUaGUgYXBwbGljYXRpb24gY2FuIHJlcXVlc3QgdGhhdCB0aGV5IGRvIGJ5IHNldHRpbmcgdGhlIFBDUkUyX1VDUAorb3B0aW9uLiBVbmxlc3MgdGhlIGFwcGxpY2F0aW9uIGhhcyBzZXQgUENSRTJfTkVWRVJfVUNQLCBhIHBhdHRlcm4gbWF5IGFsc28KK3JlcXVlc3QgdGhpcyBieSBzdGFydGluZyB3aXRoICgqVUNQKS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM2IiBocmVmPSIjVE9DMSI+RElTQUJMSU5HIFRIRSBVU0UgT0YgXEM8L2E+PGJyPgorPFA+CitUaGUgXEMgZXNjYXBlIHNlcXVlbmNlLCB3aGljaCBtYXRjaGVzIGEgc2luZ2xlIGNvZGUgdW5pdCwgZXZlbiBpbiBhIFVURiBtb2RlLAorY2FuIGNhdXNlIHVucHJlZGljdGFibGUgYmVoYXZpb3VyIGJlY2F1c2UgaXQgbWF5IGxlYXZlIHRoZSBjdXJyZW50IG1hdGNoaW5nCitwb2ludCBpbiB0aGUgbWlkZGxlIG9mIGEgbXVsdGktY29kZS11bml0IGNoYXJhY3Rlci4gVGhlIGFwcGxpY2F0aW9uIGNhbiBsb2NrIGl0CitvdXQgYnkgc2V0dGluZyB0aGUgUENSRTJfTkVWRVJfQkFDS1NMQVNIX0Mgb3B0aW9uIHdoZW4gY2FsbGluZworPGI+cGNyZTJfY29tcGlsZSgpPC9iPi4gVGhlcmUgaXMgYWxzbyBhIGJ1aWxkLXRpbWUgb3B0aW9uCis8cHJlPgorICAtLWVuYWJsZS1uZXZlci1iYWNrc2xhc2gtQworPC9wcmU+Cisobm90ZSB0aGUgdXBwZXIgY2FzZSBDKSB3aGljaCBsb2NrcyBvdXQgdGhlIHVzZSBvZiBcQyBlbnRpcmVseS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM3IiBocmVmPSIjVE9DMSI+SlVTVC1JTi1USU1FIENPTVBJTEVSIFNVUFBPUlQ8L2E+PGJyPgorPFA+CitKdXN0LWluLXRpbWUgY29tcGlsZXIgc3VwcG9ydCBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgYnkgc3BlY2lmeWluZworPHByZT4KKyAgLS1lbmFibGUtaml0Cis8L3ByZT4KK1RoaXMgc3VwcG9ydCBpcyBhdmFpbGFibGUgb25seSBmb3IgY2VydGFpbiBoYXJkd2FyZSBhcmNoaXRlY3R1cmVzLiBJZiB0aGlzCitvcHRpb24gaXMgc2V0IGZvciBhbiB1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUsIGEgYnVpbGRpbmcgZXJyb3Igb2NjdXJzLgorU2VlIHRoZQorPGEgaHJlZj0icGNyZTJqaXQuaHRtbCI+PGI+cGNyZTJqaXQ8L2I+PC9hPgorZG9jdW1lbnRhdGlvbiBmb3IgYSBkaXNjdXNzaW9uIG9mIEpJVCB1c2FnZS4gV2hlbiBKSVQgc3VwcG9ydCBpcyBlbmFibGVkLAorcGNyZTJncmVwIGF1dG9tYXRpY2FsbHkgbWFrZXMgdXNlIG9mIGl0LCB1bmxlc3MgeW91IGFkZAorPHByZT4KKyAgLS1kaXNhYmxlLXBjcmUyZ3JlcC1qaXQKKzwvcHJlPgordG8gdGhlICJjb25maWd1cmUiIGNvbW1hbmQuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDOCIgaHJlZj0iI1RPQzEiPk5FV0xJTkUgUkVDT0dOSVRJT048L2E+PGJyPgorPFA+CitCeSBkZWZhdWx0LCBQQ1JFMiBpbnRlcnByZXRzIHRoZSBsaW5lZmVlZCAoTEYpIGNoYXJhY3RlciBhcyBpbmRpY2F0aW5nIHRoZSBlbmQKK29mIGEgbGluZS4gVGhpcyBpcyB0aGUgbm9ybWFsIG5ld2xpbmUgY2hhcmFjdGVyIG9uIFVuaXgtbGlrZSBzeXN0ZW1zLiBZb3UgY2FuCitjb21waWxlIFBDUkUyIHRvIHVzZSBjYXJyaWFnZSByZXR1cm4gKENSKSBpbnN0ZWFkLCBieSBhZGRpbmcKKzxwcmU+CisgIC0tZW5hYmxlLW5ld2xpbmUtaXMtY3IKKzwvcHJlPgordG8gdGhlIDxiPmNvbmZpZ3VyZTwvYj4gY29tbWFuZC4gVGhlcmUgaXMgYWxzbyBhbiAtLWVuYWJsZS1uZXdsaW5lLWlzLWxmIG9wdGlvbiwKK3doaWNoIGV4cGxpY2l0bHkgc3BlY2lmaWVzIGxpbmVmZWVkIGFzIHRoZSBuZXdsaW5lIGNoYXJhY3Rlci4KKzwvUD4KKzxQPgorQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzcGVjaWZ5IHRoYXQgbGluZSBlbmRpbmdzIGFyZSB0byBiZSBpbmRpY2F0ZWQgYnkgdGhlCit0d28tY2hhcmFjdGVyIHNlcXVlbmNlIENSTEYgKENSIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IExGKS4gSWYgeW91IHdhbnQgdGhpcywKK2FkZAorPHByZT4KKyAgLS1lbmFibGUtbmV3bGluZS1pcy1jcmxmCis8L3ByZT4KK3RvIHRoZSA8Yj5jb25maWd1cmU8L2I+IGNvbW1hbmQuIFRoZXJlIGlzIGEgZm91cnRoIG9wdGlvbiwgc3BlY2lmaWVkIGJ5Cis8cHJlPgorICAtLWVuYWJsZS1uZXdsaW5lLWlzLWFueWNybGYKKzwvcHJlPgord2hpY2ggY2F1c2VzIFBDUkUyIHRvIHJlY29nbml6ZSBhbnkgb2YgdGhlIHRocmVlIHNlcXVlbmNlcyBDUiwgTEYsIG9yIENSTEYgYXMKK2luZGljYXRpbmcgYSBsaW5lIGVuZGluZy4gRmluYWxseSwgYSBmaWZ0aCBvcHRpb24sIHNwZWNpZmllZCBieQorPHByZT4KKyAgLS1lbmFibGUtbmV3bGluZS1pcy1hbnkKKzwvcHJlPgorY2F1c2VzIFBDUkUyIHRvIHJlY29nbml6ZSBhbnkgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlLiBUaGUgVW5pY29kZSBuZXdsaW5lCitzZXF1ZW5jZXMgYXJlIHRoZSB0aHJlZSBqdXN0IG1lbnRpb25lZCwgcGx1cyB0aGUgc2luZ2xlIGNoYXJhY3RlcnMgVlQgKHZlcnRpY2FsCit0YWIsIFUrMDAwQiksIEZGIChmb3JtIGZlZWQsIFUrMDAwQyksIE5FTCAobmV4dCBsaW5lLCBVKzAwODUpLCBMUyAobGluZQorc2VwYXJhdG9yLCBVKzIwMjgpLCBhbmQgUFMgKHBhcmFncmFwaCBzZXBhcmF0b3IsIFUrMjAyOSkuCis8L1A+Cis8UD4KK1doYXRldmVyIGRlZmF1bHQgbGluZSBlbmRpbmcgY29udmVudGlvbiBpcyBzZWxlY3RlZCB3aGVuIFBDUkUyIGlzIGJ1aWx0IGNhbiBiZQorb3ZlcnJpZGRlbiBieSBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGhlIGxpYnJhcnkuIEF0IGJ1aWxkIHRpbWUgaXQgaXMKK2NvbnZlbnRpb25hbCB0byB1c2UgdGhlIHN0YW5kYXJkIGZvciB5b3VyIG9wZXJhdGluZyBzeXN0ZW0uCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDOSIgaHJlZj0iI1RPQzEiPldIQVQgXFIgTUFUQ0hFUzwvYT48YnI+Cis8UD4KK0J5IGRlZmF1bHQsIHRoZSBzZXF1ZW5jZSBcUiBpbiBhIHBhdHRlcm4gbWF0Y2hlcyBhbnkgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlLAoraW5kZXBlbmRlbnRseSBvZiB3aGF0IGhhcyBiZWVuIHNlbGVjdGVkIGFzIHRoZSBsaW5lIGVuZGluZyBzZXF1ZW5jZS4gSWYgeW91CitzcGVjaWZ5Cis8cHJlPgorICAtLWVuYWJsZS1ic3ItYW55Y3JsZgorPC9wcmU+Cit0aGUgZGVmYXVsdCBpcyBjaGFuZ2VkIHNvIHRoYXQgXFIgbWF0Y2hlcyBvbmx5IENSLCBMRiwgb3IgQ1JMRi4gV2hhdGV2ZXIgaXMKK3NlbGVjdGVkIHdoZW4gUENSRTIgaXMgYnVpbHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYXBwbGljYXRpb25zIHRoYXQgdXNlIHRoZQorY2FsbGVkLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzEwIiBocmVmPSIjVE9DMSI+SEFORExJTkcgVkVSWSBMQVJHRSBQQVRURVJOUzwvYT48YnI+Cis8UD4KK1dpdGhpbiBhIGNvbXBpbGVkIHBhdHRlcm4sIG9mZnNldCB2YWx1ZXMgYXJlIHVzZWQgdG8gcG9pbnQgZnJvbSBvbmUgcGFydCB0bworYW5vdGhlciAoZm9yIGV4YW1wbGUsIGZyb20gYW4gb3BlbmluZyBwYXJlbnRoZXNpcyB0byBhbiBhbHRlcm5hdGlvbgorbWV0YWNoYXJhY3RlcikuIEJ5IGRlZmF1bHQsIGluIHRoZSA4LWJpdCBhbmQgMTYtYml0IGxpYnJhcmllcywgdHdvLWJ5dGUgdmFsdWVzCithcmUgdXNlZCBmb3IgdGhlc2Ugb2Zmc2V0cywgbGVhZGluZyB0byBhIG1heGltdW0gc2l6ZSBmb3IgYSBjb21waWxlZCBwYXR0ZXJuIG9mCithcm91bmQgNjRLIGNvZGUgdW5pdHMuIFRoaXMgaXMgc3VmZmljaWVudCB0byBoYW5kbGUgYWxsIGJ1dCB0aGUgbW9zdCBnaWdhbnRpYworcGF0dGVybnMuIE5ldmVydGhlbGVzcywgc29tZSBwZW9wbGUgZG8gd2FudCB0byBwcm9jZXNzIHRydWx5IGVub3Jtb3VzIHBhdHRlcm5zLAorc28gaXQgaXMgcG9zc2libGUgdG8gY29tcGlsZSBQQ1JFMiB0byB1c2UgdGhyZWUtYnl0ZSBvciBmb3VyLWJ5dGUgb2Zmc2V0cyBieQorYWRkaW5nIGEgc2V0dGluZyBzdWNoIGFzCis8cHJlPgorICAtLXdpdGgtbGluay1zaXplPTMKKzwvcHJlPgordG8gdGhlIDxiPmNvbmZpZ3VyZTwvYj4gY29tbWFuZC4gVGhlIHZhbHVlIGdpdmVuIG11c3QgYmUgMiwgMywgb3IgNC4gRm9yIHRoZQorMTYtYml0IGxpYnJhcnksIGEgdmFsdWUgb2YgMyBpcyByb3VuZGVkIHVwIHRvIDQuIEluIHRoZXNlIGxpYnJhcmllcywgdXNpbmcKK2xvbmdlciBvZmZzZXRzIHNsb3dzIGRvd24gdGhlIG9wZXJhdGlvbiBvZiBQQ1JFMiBiZWNhdXNlIGl0IGhhcyB0byBsb2FkCithZGRpdGlvbmFsIGRhdGEgd2hlbiBoYW5kbGluZyB0aGVtLiBGb3IgdGhlIDMyLWJpdCBsaWJyYXJ5IHRoZSB2YWx1ZSBpcyBhbHdheXMKKzQgYW5kIGNhbm5vdCBiZSBvdmVycmlkZGVuOyB0aGUgdmFsdWUgb2YgLS13aXRoLWxpbmstc2l6ZSBpcyBpZ25vcmVkLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzExIiBocmVmPSIjVE9DMSI+QVZPSURJTkcgRVhDRVNTSVZFIFNUQUNLIFVTQUdFPC9hPjxicj4KKzxQPgorV2hlbiBtYXRjaGluZyB3aXRoIHRoZSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBmdW5jdGlvbiwgUENSRTIgaW1wbGVtZW50cworYmFja3RyYWNraW5nIGJ5IG1ha2luZyByZWN1cnNpdmUgY2FsbHMgdG8gYW4gaW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkCis8Yj5tYXRjaCgpPC9iPi4gSW4gZW52aXJvbm1lbnRzIHdoZXJlIHRoZSBzaXplIG9mIHRoZSBzdGFjayBpcyBsaW1pdGVkLCB0aGlzIGNhbgorc2V2ZXJlbHkgbGltaXQgUENSRTIncyBvcGVyYXRpb24uIChUaGUgVW5peCBlbnZpcm9ubWVudCBkb2VzIG5vdCB1c3VhbGx5IHN1ZmZlcgorZnJvbSB0aGlzIHByb2JsZW0sIGJ1dCBpdCBtYXkgc29tZXRpbWVzIGJlIG5lY2Vzc2FyeSB0byBpbmNyZWFzZSB0aGUgbWF4aW11bQorc3RhY2sgc2l6ZS4gVGhlcmUgaXMgYSBkaXNjdXNzaW9uIGluIHRoZQorPGEgaHJlZj0icGNyZTJzdGFjay5odG1sIj48Yj5wY3JlMnN0YWNrPC9iPjwvYT4KK2RvY3VtZW50YXRpb24uKSBBbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byByZWN1cnNpb24gdGhhdCB1c2VzIG1lbW9yeSBmcm9tIHRoZQoraGVhcCB0byByZW1lbWJlciBkYXRhLCBpbnN0ZWFkIG9mIHVzaW5nIHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscywgaGFzIGJlZW4KK2ltcGxlbWVudGVkIHRvIHdvcmsgcm91bmQgdGhlIHByb2JsZW0gb2YgbGltaXRlZCBzdGFjayBzaXplLiBJZiB5b3Ugd2FudCB0bworYnVpbGQgYSB2ZXJzaW9uIG9mIFBDUkUyIHRoYXQgd29ya3MgdGhpcyB3YXksIGFkZAorPHByZT4KKyAgLS1kaXNhYmxlLXN0YWNrLWZvci1yZWN1cnNpb24KKzwvcHJlPgordG8gdGhlIDxiPmNvbmZpZ3VyZTwvYj4gY29tbWFuZC4gQnkgZGVmYXVsdCwgdGhlIHN5c3RlbSBmdW5jdGlvbnMgPGI+bWFsbG9jKCk8L2I+CithbmQgPGI+ZnJlZSgpPC9iPiBhcmUgY2FsbGVkIHRvIG1hbmFnZSB0aGUgaGVhcCBtZW1vcnkgdGhhdCBpcyByZXF1aXJlZCwgYnV0CitjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGNhbiBiZSBjYWxsZWQgaW5zdGVhZC4gUENSRTIgcnVucyBub3RpY2VhYmx5Cittb3JlIHNsb3dseSB3aGVuIGJ1aWx0IGluIHRoaXMgd2F5LiBUaGlzIG9wdGlvbiBhZmZlY3RzIG9ubHkgdGhlCis8Yj5wY3JlMl9tYXRjaCgpPC9iPiBmdW5jdGlvbjsgaXQgaXMgbm90IHJlbGV2YW50IGZvciA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4uCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTIiIGhyZWY9IiNUT0MxIj5MSU1JVElORyBQQ1JFMiBSRVNPVVJDRSBVU0FHRTwvYT48YnI+Cis8UD4KK0ludGVybmFsbHksIFBDUkUyIGhhcyBhIGZ1bmN0aW9uIGNhbGxlZCA8Yj5tYXRjaCgpPC9iPiwgd2hpY2ggaXQgY2FsbHMKK3JlcGVhdGVkbHkgKHNvbWV0aW1lcyByZWN1cnNpdmVseSkgd2hlbiBtYXRjaGluZyBhIHBhdHRlcm4gd2l0aCB0aGUKKzxiPnBjcmUyX21hdGNoKCk8L2I+IGZ1bmN0aW9uLiBCeSBjb250cm9sbGluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdGhpcworZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBkdXJpbmcgYSBzaW5nbGUgbWF0Y2hpbmcgb3BlcmF0aW9uLCBhIGxpbWl0IGNhbiBiZQorcGxhY2VkIG9uIHRoZSByZXNvdXJjZXMgdXNlZCBieSBhIHNpbmdsZSBjYWxsIHRvIDxiPnBjcmUyX21hdGNoKCk8L2I+LiBUaGUgbGltaXQKK2NhbiBiZSBjaGFuZ2VkIGF0IHJ1biB0aW1lLCBhcyBkZXNjcmliZWQgaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+Citkb2N1bWVudGF0aW9uLiBUaGUgZGVmYXVsdCBpcyAxMCBtaWxsaW9uLCBidXQgdGhpcyBjYW4gYmUgY2hhbmdlZCBieSBhZGRpbmcgYQorc2V0dGluZyBzdWNoIGFzCis8cHJlPgorICAtLXdpdGgtbWF0Y2gtbGltaXQ9NTAwMDAwCis8L3ByZT4KK3RvIHRoZSA8Yj5jb25maWd1cmU8L2I+IGNvbW1hbmQuIFRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0IG9uIHRoZQorPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IG1hdGNoaW5nIGZ1bmN0aW9uLgorPC9QPgorPFA+CitJbiBzb21lIGVudmlyb25tZW50cyBpdCBpcyBkZXNpcmFibGUgdG8gbGltaXQgdGhlIGRlcHRoIG9mIHJlY3Vyc2l2ZSBjYWxscyBvZgorPGI+bWF0Y2goKTwvYj4gbW9yZSBzdHJpY3RseSB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY2FsbHMsIGluIG9yZGVyIHRvCityZXN0cmljdCB0aGUgbWF4aW11bSBhbW91bnQgb2Ygc3RhY2sgKG9yIGhlYXAsIGlmIC0tZGlzYWJsZS1zdGFjay1mb3ItcmVjdXJzaW9uCitpcyBzcGVjaWZpZWQpIHRoYXQgaXMgdXNlZC4gQSBzZWNvbmQgbGltaXQgY29udHJvbHMgdGhpczsgaXQgZGVmYXVsdHMgdG8gdGhlCit2YWx1ZSB0aGF0IGlzIHNldCBmb3IgLS13aXRoLW1hdGNoLWxpbWl0LCB3aGljaCBpbXBvc2VzIG5vIGFkZGl0aW9uYWwKK2NvbnN0cmFpbnRzLiBIb3dldmVyLCB5b3UgY2FuIHNldCBhIGxvd2VyIGxpbWl0IGJ5IGFkZGluZywgZm9yIGV4YW1wbGUsCis8cHJlPgorICAtLXdpdGgtbWF0Y2gtbGltaXQtcmVjdXJzaW9uPTEwMDAwCis8L3ByZT4KK3RvIHRoZSA8Yj5jb25maWd1cmU8L2I+IGNvbW1hbmQuIFRoaXMgdmFsdWUgY2FuIGFsc28gYmUgb3ZlcnJpZGRlbiBhdCBydW4gdGltZS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxMyIgaHJlZj0iI1RPQzEiPkNSRUFUSU5HIENIQVJBQ1RFUiBUQUJMRVMgQVQgQlVJTEQgVElNRTwvYT48YnI+Cis8UD4KK1BDUkUyIHVzZXMgZml4ZWQgdGFibGVzIGZvciBwcm9jZXNzaW5nIGNoYXJhY3RlcnMgd2hvc2UgY29kZSBwb2ludHMgYXJlIGxlc3MKK3RoYW4gMjU2LiBCeSBkZWZhdWx0LCBQQ1JFMiBpcyBidWlsdCB3aXRoIGEgc2V0IG9mIHRhYmxlcyB0aGF0IGFyZSBkaXN0cmlidXRlZAoraW4gdGhlIGZpbGUgPGk+c3JjL3BjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0PC9pPi4gVGhlc2UgdGFibGVzIGFyZSBmb3IgQVNDSUkgY29kZXMKK29ubHkuIElmIHlvdSBhZGQKKzxwcmU+CisgIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcworPC9wcmU+Cit0byB0aGUgPGI+Y29uZmlndXJlPC9iPiBjb21tYW5kLCB0aGUgZGlzdHJpYnV0ZWQgdGFibGVzIGFyZSBubyBsb25nZXIgdXNlZC4KK0luc3RlYWQsIGEgcHJvZ3JhbSBjYWxsZWQgPGI+ZGZ0YWJsZXM8L2I+IGlzIGNvbXBpbGVkIGFuZCBydW4uIFRoaXMgb3V0cHV0cyB0aGUKK3NvdXJjZSBmb3IgbmV3IHNldCBvZiB0YWJsZXMsIGNyZWF0ZWQgaW4gdGhlIGRlZmF1bHQgbG9jYWxlIG9mIHlvdXIgQyBydW4tdGltZQorc3lzdGVtLiAoVGhpcyBtZXRob2Qgb2YgcmVwbGFjaW5nIHRoZSB0YWJsZXMgZG9lcyBub3Qgd29yayBpZiB5b3UgYXJlIGNyb3NzCitjb21waWxpbmcsIGJlY2F1c2UgPGI+ZGZ0YWJsZXM8L2I+IGlzIHJ1biBvbiB0aGUgbG9jYWwgaG9zdC4gSWYgeW91IG5lZWQgdG8KK2NyZWF0ZSBhbHRlcm5hdGl2ZSB0YWJsZXMgd2hlbiBjcm9zcyBjb21waWxpbmcsIHlvdSB3aWxsIGhhdmUgdG8gZG8gc28gImJ5CitoYW5kIi4pCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTQiIGhyZWY9IiNUT0MxIj5VU0lORyBFQkNESUMgQ09ERTwvYT48YnI+Cis8UD4KK1BDUkUyIGFzc3VtZXMgYnkgZGVmYXVsdCB0aGF0IGl0IHdpbGwgcnVuIGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSBjaGFyYWN0ZXIKK2NvZGUgaXMgQVNDSUkgb3IgVW5pY29kZSwgd2hpY2ggaXMgYSBzdXBlcnNldCBvZiBBU0NJSS4gVGhpcyBpcyB0aGUgY2FzZSBmb3IKK21vc3QgY29tcHV0ZXIgb3BlcmF0aW5nIHN5c3RlbXMuIFBDUkUyIGNhbiwgaG93ZXZlciwgYmUgY29tcGlsZWQgdG8gcnVuIGluIGFuCis4LWJpdCBFQkNESUMgZW52aXJvbm1lbnQgYnkgYWRkaW5nCis8cHJlPgorICAtLWVuYWJsZS1lYmNkaWMgLS1kaXNhYmxlLXVuaWNvZGUKKzwvcHJlPgordG8gdGhlIDxiPmNvbmZpZ3VyZTwvYj4gY29tbWFuZC4gVGhpcyBzZXR0aW5nIGltcGxpZXMKKy0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcy4gWW91IHNob3VsZCBvbmx5IHVzZSBpdCBpZiB5b3Uga25vdyB0aGF0IHlvdSBhcmUgaW4KK2FuIEVCQ0RJQyBlbnZpcm9ubWVudCAoZm9yIGV4YW1wbGUsIGFuIElCTSBtYWluZnJhbWUgb3BlcmF0aW5nIHN5c3RlbSkuCis8L1A+Cis8UD4KK0l0IGlzIG5vdCBwb3NzaWJsZSB0byBzdXBwb3J0IGJvdGggRUJDRElDIGFuZCBVVEYtOCBjb2RlcyBpbiB0aGUgc2FtZSB2ZXJzaW9uCitvZiB0aGUgbGlicmFyeS4gQ29uc2VxdWVudGx5LCAtLWVuYWJsZS11bmljb2RlIGFuZCAtLWVuYWJsZS1lYmNkaWMgYXJlIG11dHVhbGx5CitleGNsdXNpdmUuCis8L1A+Cis8UD4KK1RoZSBFQkNESUMgY2hhcmFjdGVyIHRoYXQgY29ycmVzcG9uZHMgdG8gYW4gQVNDSUkgTEYgaXMgYXNzdW1lZCB0byBoYXZlIHRoZQordmFsdWUgMHgxNSBieSBkZWZhdWx0LiBIb3dldmVyLCBpbiBzb21lIEVCQ0RJQyBlbnZpcm9ubWVudHMsIDB4MjUgaXMgdXNlZC4gSW4KK3N1Y2ggYW4gZW52aXJvbm1lbnQgeW91IHNob3VsZCB1c2UKKzxwcmU+CisgIC0tZW5hYmxlLWViY2RpYy1ubDI1Cis8L3ByZT4KK2FzIHdlbGwgYXMsIG9yIGluc3RlYWQgb2YsIC0tZW5hYmxlLWViY2RpYy4gVGhlIEVCQ0RJQyBjaGFyYWN0ZXIgZm9yIENSIGhhcyB0aGUKK3NhbWUgdmFsdWUgYXMgaW4gQVNDSUksIG5hbWVseSwgMHgwZC4gV2hpY2hldmVyIG9mIDB4MTUgYW5kIDB4MjUgaXMgPGk+bm90PC9pPgorY2hvc2VuIGFzIExGIGlzIG1hZGUgdG8gY29ycmVzcG9uZCB0byB0aGUgVW5pY29kZSBORUwgY2hhcmFjdGVyICh3aGljaCwgaW4KK1VuaWNvZGUsIGlzIDB4ODUpLgorPC9QPgorPFA+CitUaGUgb3B0aW9ucyB0aGF0IHNlbGVjdCBuZXdsaW5lIGJlaGF2aW91ciwgc3VjaCBhcyAtLWVuYWJsZS1uZXdsaW5lLWlzLWNyLAorYW5kIGVxdWl2YWxlbnQgcnVuLXRpbWUgb3B0aW9ucywgcmVmZXIgdG8gdGhlc2UgY2hhcmFjdGVyIHZhbHVlcyBpbiBhbiBFQkNESUMKK2Vudmlyb25tZW50LgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzE1IiBocmVmPSIjVE9DMSI+UENSRTJHUkVQIE9QVElPTlMgRk9SIENPTVBSRVNTRUQgRklMRSBTVVBQT1JUPC9hPjxicj4KKzxQPgorQnkgZGVmYXVsdCwgPGI+cGNyZTJncmVwPC9iPiByZWFkcyBhbGwgZmlsZXMgYXMgcGxhaW4gdGV4dC4gWW91IGNhbiBidWlsZCBpdCBzbwordGhhdCBpdCByZWNvZ25pemVzIGZpbGVzIHdob3NlIG5hbWVzIGVuZCBpbiA8Yj4uZ3o8L2I+IG9yIDxiPi5iejI8L2I+LCBhbmQgcmVhZHMKK3RoZW0gd2l0aCA8Yj5saWJ6PC9iPiBvciA8Yj5saWJiejI8L2I+LCByZXNwZWN0aXZlbHksIGJ5IGFkZGluZyBvbmUgb3IgYm90aCBvZgorPHByZT4KKyAgLS1lbmFibGUtcGNyZTJncmVwLWxpYnoKKyAgLS1lbmFibGUtcGNyZTJncmVwLWxpYmJ6MgorPC9wcmU+Cit0byB0aGUgPGI+Y29uZmlndXJlPC9iPiBjb21tYW5kLiBUaGVzZSBvcHRpb25zIG5hdHVyYWxseSByZXF1aXJlIHRoYXQgdGhlCityZWxldmFudCBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbS4gQ29uZmlndXJhdGlvbiB3aWxsIGZhaWwgaWYKK3RoZXkgYXJlIG5vdC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxNiIgaHJlZj0iI1RPQzEiPlBDUkUyR1JFUCBCVUZGRVIgU0laRTwvYT48YnI+Cis8UD4KKzxiPnBjcmUyZ3JlcDwvYj4gdXNlcyBhbiBpbnRlcm5hbCBidWZmZXIgdG8gaG9sZCBhICJ3aW5kb3ciIG9uIHRoZSBmaWxlIGl0IGlzCitzY2FubmluZywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBvdXRwdXQgImJlZm9yZSIgYW5kICJhZnRlciIgbGluZXMgd2hlbiBpdAorZmluZHMgYSBtYXRjaC4gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBjb250cm9sbGVkIGJ5IGEgcGFyYW1ldGVyIHdob3NlCitkZWZhdWx0IHZhbHVlIGlzIDIwSy4gVGhlIGJ1ZmZlciBpdHNlbGYgaXMgdGhyZWUgdGltZXMgdGhpcyBzaXplLCBidXQgYmVjYXVzZQorb2YgdGhlIHdheSBpdCBpcyB1c2VkIGZvciBob2xkaW5nICJiZWZvcmUiIGxpbmVzLCB0aGUgbG9uZ2VzdCBsaW5lIHRoYXQgaXMKK2d1YXJhbnRlZWQgdG8gYmUgcHJvY2Vzc2FibGUgaXMgdGhlIHBhcmFtZXRlciBzaXplLiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdAorcGFyYW1ldGVyIHZhbHVlIGJ5IGFkZGluZywgZm9yIGV4YW1wbGUsCis8cHJlPgorICAtLXdpdGgtcGNyZTJncmVwLWJ1ZnNpemU9NTBLCis8L3ByZT4KK3RvIHRoZSA8Yj5jb25maWd1cmU8L2I+IGNvbW1hbmQuIFRoZSBjYWxsZXIgb2YgXGZQcGNyZTJncmVwXGZQIGNhbiBvdmVycmlkZSB0aGlzCit2YWx1ZSBieSB1c2luZyAtLWJ1ZmZlci1zaXplIG9uIHRoZSBjb21tYW5kIGxpbmUuLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzE3IiBocmVmPSIjVE9DMSI+UENSRTJURVNUIE9QVElPTiBGT1IgTElCUkVBRExJTkUgU1VQUE9SVDwvYT48YnI+Cis8UD4KK0lmIHlvdSBhZGQgb25lIG9mCis8cHJlPgorICAtLWVuYWJsZS1wY3JlMnRlc3QtbGlicmVhZGxpbmUKKyAgLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYmVkaXQKKzwvcHJlPgordG8gdGhlIDxiPmNvbmZpZ3VyZTwvYj4gY29tbWFuZCwgPGI+cGNyZTJ0ZXN0PC9iPiBpcyBsaW5rZWQgd2l0aCB0aGUKKzxiPmxpYnJlYWRsaW5lPC9iPiBvcjxiPmxpYmVkaXQ8L2I+IGxpYnJhcnksIHJlc3BlY3RpdmVseSwgYW5kIHdoZW4gaXRzIGlucHV0IGlzCitmcm9tIGEgdGVybWluYWwsIGl0IHJlYWRzIGl0IHVzaW5nIHRoZSA8Yj5yZWFkbGluZSgpPC9iPiBmdW5jdGlvbi4gVGhpcyBwcm92aWRlcworbGluZS1lZGl0aW5nIGFuZCBoaXN0b3J5IGZhY2lsaXRpZXMuIE5vdGUgdGhhdCA8Yj5saWJyZWFkbGluZTwvYj4gaXMKK0dQTC1saWNlbnNlZCwgc28gaWYgeW91IGRpc3RyaWJ1dGUgYSBiaW5hcnkgb2YgPGI+cGNyZTJ0ZXN0PC9iPiBsaW5rZWQgaW4gdGhpcword2F5LCB0aGVyZSBtYXkgYmUgbGljZW5zaW5nIGlzc3Vlcy4gVGhlc2UgY2FuIGJlIGF2b2lkZWQgYnkgbGlua2luZyBpbnN0ZWFkCit3aXRoIDxiPmxpYmVkaXQ8L2I+LCB3aGljaCBoYXMgYSBCU0QgbGljZW5jZS4KKzwvUD4KKzxQPgorU2V0dGluZyAtLWVuYWJsZS1wY3JlMnRlc3QtbGlicmVhZGxpbmUgY2F1c2VzIHRoZSA8Yj4tbHJlYWRsaW5lPC9iPiBvcHRpb24gdG8gYmUKK2FkZGVkIHRvIHRoZSA8Yj5wY3JlMnRlc3Q8L2I+IGJ1aWxkLiBJbiBtYW55IG9wZXJhdGluZyBlbnZpcm9ubWVudHMgd2l0aCBhCitzeXRlbS1pbnN0YWxsZWQgcmVhZGxpbmUgbGlicmFyeSB0aGlzIGlzIHN1ZmZpY2llbnQuIEhvd2V2ZXIsIGluIHNvbWUKK2Vudmlyb25tZW50cyAoZS5nLiBpZiBhbiB1bm1vZGlmaWVkIGRpc3RyaWJ1dGlvbiB2ZXJzaW9uIG9mIHJlYWRsaW5lIGlzIGluCit1c2UpLCBzb21lIGV4dHJhIGNvbmZpZ3VyYXRpb24gbWF5IGJlIG5lY2Vzc2FyeS4gVGhlIElOU1RBTEwgZmlsZSBmb3IKKzxiPmxpYnJlYWRsaW5lPC9iPiBzYXlzIHRoaXM6Cis8cHJlPgorICAiUmVhZGxpbmUgdXNlcyB0aGUgdGVybWNhcCBmdW5jdGlvbnMsIGJ1dCBkb2VzIG5vdCBsaW5rIHdpdGgKKyAgdGhlIHRlcm1jYXAgb3IgY3Vyc2VzIGxpYnJhcnkgaXRzZWxmLCBhbGxvd2luZyBhcHBsaWNhdGlvbnMKKyAgd2hpY2ggbGluayB3aXRoIHJlYWRsaW5lIHRoZSB0byBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgbGlicmFyeS4iCis8L3ByZT4KK0lmIHlvdXIgZW52aXJvbm1lbnQgaGFzIG5vdCBiZWVuIHNldCB1cCBzbyB0aGF0IGFuIGFwcHJvcHJpYXRlIGxpYnJhcnkgaXMKK2F1dG9tYXRpY2FsbHkgaW5jbHVkZWQsIHlvdSBtYXkgbmVlZCB0byBhZGQgc29tZXRoaW5nIGxpa2UKKzxwcmU+CisgIExJQlM9Ii1uY3Vyc2VzIgorPC9wcmU+CitpbW1lZGlhdGVseSBiZWZvcmUgdGhlIDxiPmNvbmZpZ3VyZTwvYj4gY29tbWFuZC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxOCIgaHJlZj0iI1RPQzEiPklOQ0xVRElORyBERUJVR0dJTkcgQ09ERTwvYT48YnI+Cis8UD4KK0lmIHlvdSBhZGQKKzxwcmU+CisgIC0tZW5hYmxlLWRlYnVnCis8L3ByZT4KK3RvIHRoZSA8Yj5jb25maWd1cmU8L2I+IGNvbW1hbmQsIGFkZGl0aW9uYWwgZGVidWdnaW5nIGNvZGUgaXMgaW5jbHVkZWQgaW4gdGhlCitidWlsZC4gVGhpcyBmZWF0dXJlIGlzIGludGVuZGVkIGZvciB1c2UgYnkgdGhlIFBDUkUyIG1haW50YWluZXJzLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzE5IiBocmVmPSIjVE9DMSI+REVCVUdHSU5HIFdJVEggVkFMR1JJTkQgU1VQUE9SVDwvYT48YnI+Cis8UD4KK0lmIHlvdSBhZGQKKzxwcmU+CisgIC0tZW5hYmxlLXZhbGdyaW5kCis8L3ByZT4KK3RvIHRoZSA8Yj5jb25maWd1cmU8L2I+IGNvbW1hbmQsIFBDUkUyIHdpbGwgdXNlIHZhbGdyaW5kIGFubm90YXRpb25zIHRvIG1hcmsKK2NlcnRhaW4gbWVtb3J5IHJlZ2lvbnMgYXMgdW5hZGRyZXNzYWJsZS4gVGhpcyBhbGxvd3MgaXQgdG8gZGV0ZWN0IGludmFsaWQKK21lbW9yeSBhY2Nlc3NlcywgYW5kIGlzIG1vc3RseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyBQQ1JFMiBpdHNlbGYuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMjAiIGhyZWY9IiNUT0MxIj5DT0RFIENPVkVSQUdFIFJFUE9SVElORzwvYT48YnI+Cis8UD4KK0lmIHlvdXIgQyBjb21waWxlciBpcyBnY2MsIHlvdSBjYW4gYnVpbGQgYSB2ZXJzaW9uIG9mIFBDUkUyIHRoYXQgY2FuIGdlbmVyYXRlIGEKK2NvZGUgY292ZXJhZ2UgcmVwb3J0IGZvciBpdHMgdGVzdCBzdWl0ZS4gVG8gZW5hYmxlIHRoaXMsIHlvdSBtdXN0IGluc3RhbGwKKzxiPmxjb3Y8L2I+IHZlcnNpb24gMS42IG9yIGFib3ZlLiBUaGVuIHNwZWNpZnkKKzxwcmU+CisgIC0tZW5hYmxlLWNvdmVyYWdlCis8L3ByZT4KK3RvIHRoZSA8Yj5jb25maWd1cmU8L2I+IGNvbW1hbmQgYW5kIGJ1aWxkIFBDUkUyIGluIHRoZSB1c3VhbCB3YXkuCis8L1A+Cis8UD4KK05vdGUgdGhhdCB1c2luZyA8Yj5jY2FjaGU8L2I+IChhIGNhY2hpbmcgQyBjb21waWxlcikgaXMgaW5jb21wYXRpYmxlIHdpdGggY29kZQorY292ZXJhZ2UgcmVwb3J0aW5nLiBJZiB5b3UgaGF2ZSBjb25maWd1cmVkIDxiPmNjYWNoZTwvYj4gdG8gcnVuIGF1dG9tYXRpY2FsbHkKK29uIHlvdXIgc3lzdGVtLCB5b3UgbXVzdCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCis8cHJlPgorICBDQ0FDSEVfRElTQUJMRT0xCis8L3ByZT4KK2JlZm9yZSBydW5uaW5nIDxiPm1ha2U8L2I+IHRvIGJ1aWxkIFBDUkUyLCBzbyB0aGF0IDxiPmNjYWNoZTwvYj4gaXMgbm90IHVzZWQuCis8L1A+Cis8UD4KK1doZW4gLS1lbmFibGUtY292ZXJhZ2UgaXMgdXNlZCwgdGhlIGZvbGxvd2luZyBhZGRpdGlvbiB0YXJnZXRzIGFyZSBhZGRlZCB0byB0aGUKKzxpPk1ha2VmaWxlPC9pPjoKKzxwcmU+CisgIG1ha2UgY292ZXJhZ2UKKzwvcHJlPgorVGhpcyBjcmVhdGVzIGEgZnJlc2ggY292ZXJhZ2UgcmVwb3J0IGZvciB0aGUgUENSRTIgdGVzdCBzdWl0ZS4gSXQgaXMgZXF1aXZhbGVudAordG8gcnVubmluZyAibWFrZSBjb3ZlcmFnZS1yZXNldCIsICJtYWtlIGNvdmVyYWdlLWJhc2VsaW5lIiwgIm1ha2UgY2hlY2siLCBhbmQKK3RoZW4gIm1ha2UgY292ZXJhZ2UtcmVwb3J0Ii4KKzxwcmU+CisgIG1ha2UgY292ZXJhZ2UtcmVzZXQKKzwvcHJlPgorVGhpcyB6ZXJvZXMgdGhlIGNvdmVyYWdlIGNvdW50ZXJzLCBidXQgZG9lcyBub3RoaW5nIGVsc2UuCis8cHJlPgorICBtYWtlIGNvdmVyYWdlLWJhc2VsaW5lCis8L3ByZT4KK1RoaXMgY2FwdHVyZXMgYmFzZWxpbmUgY292ZXJhZ2UgaW5mb3JtYXRpb24uCis8cHJlPgorICBtYWtlIGNvdmVyYWdlLXJlcG9ydAorPC9wcmU+CitUaGlzIGNyZWF0ZXMgdGhlIGNvdmVyYWdlIHJlcG9ydC4KKzxwcmU+CisgIG1ha2UgY292ZXJhZ2UtY2xlYW4tcmVwb3J0Cis8L3ByZT4KK1RoaXMgcmVtb3ZlcyB0aGUgZ2VuZXJhdGVkIGNvdmVyYWdlIHJlcG9ydCB3aXRob3V0IGNsZWFuaW5nIHRoZSBjb3ZlcmFnZSBkYXRhCitpdHNlbGYuCis8cHJlPgorICBtYWtlIGNvdmVyYWdlLWNsZWFuLWRhdGEKKzwvcHJlPgorVGhpcyByZW1vdmVzIHRoZSBjYXB0dXJlZCBjb3ZlcmFnZSBkYXRhIHdpdGhvdXQgcmVtb3ZpbmcgdGhlIGNvdmVyYWdlIGZpbGVzCitjcmVhdGVkIGF0IGNvbXBpbGUgdGltZSAoKi5nY25vKS4KKzxwcmU+CisgIG1ha2UgY292ZXJhZ2UtY2xlYW4KKzwvcHJlPgorVGhpcyBjbGVhbnMgYWxsIGNvdmVyYWdlIGRhdGEgaW5jbHVkaW5nIHRoZSBnZW5lcmF0ZWQgY292ZXJhZ2UgcmVwb3J0LiBGb3IgbW9yZQoraW5mb3JtYXRpb24gYWJvdXQgY29kZSBjb3ZlcmFnZSwgc2VlIHRoZSA8Yj5nY292PC9iPiBhbmQgPGI+bGNvdjwvYj4KK2RvY3VtZW50YXRpb24uCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMjEiIGhyZWY9IiNUT0MxIj5TRUUgQUxTTzwvYT48YnI+Cis8UD4KKzxiPnBjcmUyYXBpPC9iPigzKSwgPGI+cGNyZTItY29uZmlnPC9iPigzKS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMyMiIgaHJlZj0iI1RPQzEiPkFVVEhPUjwvYT48YnI+Cis8UD4KK1BoaWxpcCBIYXplbAorPGJyPgorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorPGJyPgorQ2FtYnJpZGdlLCBFbmdsYW5kLgorPGJyPgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzIzIiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgorPFA+CitMYXN0IHVwZGF0ZWQ6IDE2IE9jdG9iZXIgMjAxNQorPGJyPgorQ29weXJpZ2h0ICZjb3B5OyAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCis8YnI+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMmNhbGxvdXQuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyY2FsbG91dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlODVjOWEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmNhbGxvdXQuaHRtbApAQCAtMCwwICsxLDQwOCBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMmNhbGxvdXQgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyY2FsbG91dCBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPHVsPgorPGxpPjxhIG5hbWU9IlRPQzEiIGhyZWY9IiNTRUMxIj5TWU5PUFNJUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MyIiBocmVmPSIjU0VDMiI+REVTQ1JJUFRJT048L2E+Cis8bGk+PGEgbmFtZT0iVE9DMyIgaHJlZj0iI1NFQzMiPk1JU1NJTkcgQ0FMTE9VVFM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNCIgaHJlZj0iI1NFQzQiPlRIRSBDQUxMT1VUIElOVEVSRkFDRTwvYT4KKzxsaT48YSBuYW1lPSJUT0M1IiBocmVmPSIjU0VDNSI+UkVUVVJOIFZBTFVFUyBGUk9NIENBTExPVVRTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzYiIGhyZWY9IiNTRUM2Ij5DQUxMT1VUIEVOVU1FUkFUSU9OPC9hPgorPGxpPjxhIG5hbWU9IlRPQzciIGhyZWY9IiNTRUM3Ij5BVVRIT1I8L2E+Cis8bGk+PGEgbmFtZT0iVE9DOCIgaHJlZj0iI1NFQzgiPlJFVklTSU9OPC9hPgorPC91bD4KKzxicj48YSBuYW1lPSJTRUMxIiBocmVmPSIjVE9DMSI+U1lOT1BTSVM8L2E+PGJyPgorPFA+Cis8Yj4jaW5jbHVkZSAmIzYwO3BjcmUyLmgmIzYyOzwvYj4KKzwvUD4KKzxQPgorPGI+aW50ICgqcGNyZTJfY2FsbG91dCkocGNyZTJfY2FsbG91dF9ibG9jayAqLCB2b2lkICopOzwvYj4KKzxicj4KKzxicj4KKzxiPmludCBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZShjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiw8L2I+Cis8Yj4gIGludCAoKjxpPmNhbGxiYWNrPC9pPikocGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2sgKiwgdm9pZCAqKSw8L2I+Cis8Yj4gIHZvaWQgKjxpPnVzZXJfZGF0YTwvaT4pOzwvYj4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMyIiBocmVmPSIjVE9DMSI+REVTQ1JJUFRJT048L2E+PGJyPgorPFA+CitQQ1JFMiBwcm92aWRlcyBhIGZlYXR1cmUgY2FsbGVkICJjYWxsb3V0Iiwgd2hpY2ggaXMgYSBtZWFucyBvZiB0ZW1wb3JhcmlseQorcGFzc2luZyBjb250cm9sIHRvIHRoZSBjYWxsZXIgb2YgUENSRTIgaW4gdGhlIG1pZGRsZSBvZiBwYXR0ZXJuIG1hdGNoaW5nLiBUaGUKK2NhbGxlciBvZiBQQ1JFMiBwcm92aWRlcyBhbiBleHRlcm5hbCBmdW5jdGlvbiBieSBwdXR0aW5nIGl0cyBlbnRyeSBwb2ludCBpbgorYSBtYXRjaCBjb250ZXh0IChzZWUgPGI+cGNyZTJfc2V0X2NhbGxvdXQoKTwvYj4gaW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+Citkb2N1bWVudGF0aW9uKS4KKzwvUD4KKzxQPgorV2l0aGluIGEgcmVndWxhciBleHByZXNzaW9uLCAoP0MmIzYwO2FyZyYjNjI7KSBpbmRpY2F0ZXMgYSBwb2ludCBhdCB3aGljaCB0aGUgZXh0ZXJuYWwKK2Z1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZC4gRGlmZmVyZW50IGNhbGxvdXQgcG9pbnRzIGNhbiBiZSBpZGVudGlmaWVkIGJ5IHB1dHRpbmcKK2EgbnVtYmVyIGxlc3MgdGhhbiAyNTYgYWZ0ZXIgdGhlIGxldHRlciBDLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB6ZXJvLgorQWx0ZXJuYXRpdmVseSwgdGhlIGFyZ3VtZW50IG1heSBiZSBhIGRlbGltaXRlZCBzdHJpbmcuIFRoZSBzdGFydGluZyBkZWxpbWl0ZXIKK211c3QgYmUgb25lIG9mIGAgJyAiIF4gJSAjICQgeyBhbmQgdGhlIGVuZGluZyBkZWxpbWl0ZXIgaXMgdGhlIHNhbWUgYXMgdGhlCitzdGFydCwgZXhjZXB0IGZvciB7LCB3aGVyZSB0aGUgZW5kaW5nIGRlbGltaXRlciBpcyB9LiBJZiB0aGUgZW5kaW5nIGRlbGltaXRlcgoraXMgbmVlZGVkIHdpdGhpbiB0aGUgc3RyaW5nLCBpdCBtdXN0IGJlIGRvdWJsZWQuIEZvciBleGFtcGxlLCB0aGlzIHBhdHRlcm4gaGFzCit0d28gY2FsbG91dCBwb2ludHM6Cis8cHJlPgorICAoP0MxKWFiYyg/QyJzb21lICIiYXJiaXRyYXJ5IiIgdGV4dCIpZGVmCis8L3ByZT4KK0lmIHRoZSBQQ1JFMl9BVVRPX0NBTExPVVQgb3B0aW9uIGJpdCBpcyBzZXQgd2hlbiBhIHBhdHRlcm4gaXMgY29tcGlsZWQsIFBDUkUyCithdXRvbWF0aWNhbGx5IGluc2VydHMgY2FsbG91dHMsIGFsbCB3aXRoIG51bWJlciAyNTUsIGJlZm9yZSBlYWNoIGl0ZW0gaW4gdGhlCitwYXR0ZXJuLiBGb3IgZXhhbXBsZSwgaWYgUENSRTJfQVVUT19DQUxMT1VUIGlzIHVzZWQgd2l0aCB0aGUgcGF0dGVybgorPHByZT4KKyAgQShcZHsyfXwtLSkKKzwvcHJlPgoraXQgaXMgcHJvY2Vzc2VkIGFzIGlmIGl0IHdlcmUKKzxicj4KKzxicj4KKyg/QzI1NSlBKD9DMjU1KSgoP0MyNTUpXGR7Mn0oP0MyNTUpfCg/QzI1NSktKD9DMjU1KS0oP0MyNTUpKSg/QzI1NSkKKzxicj4KKzxicj4KK05vdGljZSB0aGF0IHRoZXJlIGlzIGEgY2FsbG91dCBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggcGFyZW50aGVzaXMgYW5kCithbHRlcm5hdGlvbiBiYXIuIElmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIGEgY29uZGl0aW9uYWwgZ3JvdXAgd2hvc2UgY29uZGl0aW9uIGlzCithbiBhc3NlcnRpb24sIGFuIGF1dG9tYXRpYyBjYWxsb3V0IGlzIGluc2VydGVkIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUKK2NvbmRpdGlvbi4gU3VjaCBhIGNhbGxvdXQgbWF5IGFsc28gYmUgaW5zZXJ0ZWQgZXhwbGljaXRseSwgZm9yIGV4YW1wbGU6Cis8cHJlPgorICAoPyg/QzkpKD89YSlhYnxkZSkgICg/KD9DJXRleHQlKSg/IT1kKWFifGRlKQorPC9wcmU+CitUaGlzIGFwcGxpZXMgb25seSB0byBhc3NlcnRpb24gY29uZGl0aW9ucyAoYmVjYXVzZSB0aGV5IGFyZSB0aGVtc2VsdmVzCitpbmRlcGVuZGVudCBncm91cHMpLgorPC9QPgorPFA+CitDYWxsb3V0cyBjYW4gYmUgdXNlZnVsIGZvciB0cmFja2luZyB0aGUgcHJvZ3Jlc3Mgb2YgcGF0dGVybiBtYXRjaGluZy4gVGhlCis8YSBocmVmPSJwY3JlMnRlc3QuaHRtbCI+PGI+cGNyZTJ0ZXN0PC9iPjwvYT4KK3Byb2dyYW0gaGFzIGEgcGF0dGVybiBxdWFsaWZpZXIgKC9hdXRvX2NhbGxvdXQpIHRoYXQgc2V0cyBhdXRvbWF0aWMgY2FsbG91dHMuCitXaGVuIGFueSBjYWxsb3V0cyBhcmUgcHJlc2VudCwgdGhlIG91dHB1dCBmcm9tIDxiPnBjcmUydGVzdDwvYj4gaW5kaWNhdGVzIGhvdwordGhlIHBhdHRlcm4gaXMgYmVpbmcgbWF0Y2hlZC4gVGhpcyBpcyB1c2VmdWwgaW5mb3JtYXRpb24gd2hlbiB5b3UgYXJlIHRyeWluZyB0bworb3B0aW1pemUgdGhlIHBlcmZvcm1hbmNlIG9mIGEgcGFydGljdWxhciBwYXR0ZXJuLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzMiIGhyZWY9IiNUT0MxIj5NSVNTSU5HIENBTExPVVRTPC9hPjxicj4KKzxQPgorWW91IHNob3VsZCBiZSBhd2FyZSB0aGF0LCBiZWNhdXNlIG9mIG9wdGltaXphdGlvbnMgaW4gdGhlIHdheSBQQ1JFMiBjb21waWxlcworYW5kIG1hdGNoZXMgcGF0dGVybnMsIGNhbGxvdXRzIHNvbWV0aW1lcyBkbyBub3QgaGFwcGVuIGV4YWN0bHkgYXMgeW91IG1pZ2h0CitleHBlY3QuCis8L1A+Cis8YnI+PGI+CitBdXRvLXBvc3Nlc3NpZmljYXRpb24KKzwvYj48YnI+Cis8UD4KK0F0IGNvbXBpbGUgdGltZSwgUENSRTIgImF1dG8tcG9zc2Vzc2lmaWVzIiByZXBlYXRlZCBpdGVtcyB3aGVuIGl0IGtub3dzIHRoYXQKK3doYXQgZm9sbG93cyBjYW5ub3QgYmUgcGFydCBvZiB0aGUgcmVwZWF0LiBGb3IgZXhhbXBsZSwgYStbYmNdIGlzIGNvbXBpbGVkIGFzCitpZiBpdCB3ZXJlIGErK1tiY10uIFRoZSA8Yj5wY3JlMnRlc3Q8L2I+IG91dHB1dCB3aGVuIHRoaXMgcGF0dGVybiBpcyBjb21waWxlZAord2l0aCBQQ1JFMl9BTkNIT1JFRCBhbmQgUENSRTJfQVVUT19DQUxMT1VUIGFuZCB0aGVuIGFwcGxpZWQgdG8gdGhlIHN0cmluZworImFhYWEiIGlzOgorPHByZT4KKyAgLS0tJiM2MjthYWFhCisgICArMCBeICAgICAgICBhKworICAgKzIgXiAgIF4gICAgW2JjXQorICBObyBtYXRjaAorPC9wcmU+CitUaGlzIGluZGljYXRlcyB0aGF0IHdoZW4gbWF0Y2hpbmcgW2JjXSBmYWlscywgdGhlcmUgaXMgbm8gYmFja3RyYWNraW5nIGludG8gYSsKK2FuZCB0aGVyZWZvcmUgdGhlIGNhbGxvdXRzIHRoYXQgd291bGQgYmUgdGFrZW4gZm9yIHRoZSBiYWNrdHJhY2tzIGRvIG5vdCBvY2N1ci4KK1lvdSBjYW4gZGlzYWJsZSB0aGUgYXV0by1wb3NzZXNzaWZ5IGZlYXR1cmUgYnkgcGFzc2luZyBQQ1JFMl9OT19BVVRPX1BPU1NFU1MgdG8KKzxiPnBjcmUyX2NvbXBpbGUoKTwvYj4sIG9yIHN0YXJ0aW5nIHRoZSBwYXR0ZXJuIHdpdGggKCpOT19BVVRPX1BPU1NFU1MpLiBJbiB0aGlzCitjYXNlLCB0aGUgb3V0cHV0IGNoYW5nZXMgdG8gdGhpczoKKzxwcmU+CisgIC0tLSYjNjI7YWFhYQorICAgKzAgXiAgICAgICAgYSsKKyAgICsyIF4gICBeICAgIFtiY10KKyAgICsyIF4gIF4gICAgIFtiY10KKyAgICsyIF4gXiAgICAgIFtiY10KKyAgICsyIF5eICAgICAgIFtiY10KKyAgTm8gbWF0Y2gKKzwvcHJlPgorVGhpcyB0aW1lLCB3aGVuIG1hdGNoaW5nIFtiY10gZmFpbHMsIHRoZSBtYXRjaGVyIGJhY2t0cmFja3MgaW50byBhKyBhbmQgdHJpZXMKK2FnYWluLCByZXBlYXRlZGx5LCB1bnRpbCBhKyBpdHNlbGYgZmFpbHMuCis8L1A+Cis8YnI+PGI+CitBdXRvbWF0aWMgLiogYW5jaG9yaW5nCis8L2I+PGJyPgorPFA+CitCeSBkZWZhdWx0LCBhbiBvcHRpbWl6YXRpb24gaXMgYXBwbGllZCB3aGVuIC4qIGlzIHRoZSBmaXJzdCBzaWduaWZpY2FudCBpdGVtIGluCithIHBhdHRlcm4uIElmIFBDUkUyX0RPVEFMTCBpcyBzZXQsIHNvIHRoYXQgdGhlIGRvdCBjYW4gbWF0Y2ggYW55IGNoYXJhY3RlciwgdGhlCitwYXR0ZXJuIGlzIGF1dG9tYXRpY2FsbHkgYW5jaG9yZWQuIElmIFBDUkUyX0RPVEFMTCBpcyBub3Qgc2V0LCBhIG1hdGNoIGNhbgorc3RhcnQgb25seSBhZnRlciBhbiBpbnRlcm5hbCBuZXdsaW5lIG9yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN1YmplY3QsIGFuZAorPGI+cGNyZTJfY29tcGlsZSgpPC9iPiByZW1lbWJlcnMgdGhpcy4gVGhpcyBvcHRpbWl6YXRpb24gaXMgZGlzYWJsZWQsIGhvd2V2ZXIsCitpZiAuKiBpcyBpbiBhbiBhdG9taWMgZ3JvdXAgb3IgaWYgdGhlcmUgaXMgYSBiYWNrIHJlZmVyZW5jZSB0byB0aGUgY2FwdHVyaW5nCitncm91cCBpbiB3aGljaCBpdCBhcHBlYXJzLiBJdCBpcyBhbHNvIGRpc2FibGVkIGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zICgqUFJVTkUpCitvciAoKlNLSVApLiBIb3dldmVyLCB0aGUgcHJlc2VuY2Ugb2YgY2FsbG91dHMgZG9lcyBub3QgYWZmZWN0IGl0LgorPC9QPgorPFA+CitGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4gLipcZCBpcyBjb21waWxlZCB3aXRoIFBDUkUyX0FVVE9fQ0FMTE9VVCBhbmQKK2FwcGxpZWQgdG8gdGhlIHN0cmluZyAiYWEiLCB0aGUgPGI+cGNyZTJ0ZXN0PC9iPiBvdXRwdXQgaXM6Cis8cHJlPgorICAtLS0mIzYyO2FhCisgICArMCBeICAgICAgLioKKyAgICsyIF4gXiAgICBcZAorICAgKzIgXl4gICAgIFxkCisgICArMiBeICAgICAgXGQKKyAgTm8gbWF0Y2gKKzwvcHJlPgorVGhpcyBzaG93cyB0aGF0IGFsbCBtYXRjaCBhdHRlbXB0cyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJqZWN0LiBJbgorb3RoZXIgd29yZHMsIHRoZSBwYXR0ZXJuIGlzIGFuY2hvcmVkLiBZb3UgY2FuIGRpc2FibGUgdGhpcyBvcHRpbWl6YXRpb24gYnkKK3Bhc3NpbmcgUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IgdG8gPGI+cGNyZTJfY29tcGlsZSgpPC9iPiwgb3Igc3RhcnRpbmcgdGhlCitwYXR0ZXJuIHdpdGggKCpOT19ET1RTVEFSX0FOQ0hPUikuIEluIHRoaXMgY2FzZSwgdGhlIG91dHB1dCBjaGFuZ2VzIHRvOgorPHByZT4KKyAgLS0tJiM2MjthYQorICAgKzAgXiAgICAgIC4qCisgICArMiBeIF4gICAgXGQKKyAgICsyIF5eICAgICBcZAorICAgKzIgXiAgICAgIFxkCisgICArMCAgXiAgICAgLioKKyAgICsyICBeXiAgICBcZAorICAgKzIgIF4gICAgIFxkCisgIE5vIG1hdGNoCis8L3ByZT4KK1RoaXMgc2hvd3MgbW9yZSBtYXRjaCBhdHRlbXB0cywgc3RhcnRpbmcgYXQgdGhlIHNlY29uZCBzdWJqZWN0IGNoYXJhY3Rlci4KK0Fub3RoZXIgb3B0aW1pemF0aW9uLCBkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbiwgbWVhbnMgdGhhdCB0aGVyZSBpcyBubworc3Vic2VxdWVudCBhdHRlbXB0IHRvIG1hdGNoIHdpdGggYW4gZW1wdHkgc3ViamVjdC4KKzwvUD4KKzxQPgorSWYgYSBwYXR0ZXJuIGhhcyBtb3JlIHRoYW4gb25lIHRvcC1sZXZlbCBicmFuY2gsIGF1dG9tYXRpYyBhbmNob3Jpbmcgb2NjdXJzIGlmCithbGwgYnJhbmNoZXMgYXJlIGFuY2hvcmFibGUuCis8L1A+Cis8YnI+PGI+CitPdGhlciBvcHRpbWl6YXRpb25zCis8L2I+PGJyPgorPFA+CitPdGhlciBvcHRpbWl6YXRpb25zIHRoYXQgcHJvdmlkZSBmYXN0ICJubyBtYXRjaCIgcmVzdWx0cyBhbHNvIGFmZmVjdCBjYWxsb3V0cy4KK0ZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiBpcworPHByZT4KKyAgYWIoP0M0KWNkCis8L3ByZT4KK1BDUkUyIGtub3dzIHRoYXQgYW55IG1hdGNoaW5nIHN0cmluZyBtdXN0IGNvbnRhaW4gdGhlIGxldHRlciAiZCIuIElmIHRoZQorc3ViamVjdCBzdHJpbmcgaXMgImFieXoiLCB0aGUgbGFjayBvZiAiZCIgbWVhbnMgdGhhdCBtYXRjaGluZyBkb2Vzbid0IGV2ZXIKK3N0YXJ0LCBhbmQgdGhlIGNhbGxvdXQgaXMgbmV2ZXIgcmVhY2hlZC4gSG93ZXZlciwgd2l0aCAiYWJ5ZCIsIHRob3VnaCB0aGUKK3Jlc3VsdCBpcyBzdGlsbCBubyBtYXRjaCwgdGhlIGNhbGxvdXQgaXMgb2JleWVkLgorPC9QPgorPFA+CitQQ1JFMiBhbHNvIGtub3dzIHRoZSBtaW5pbXVtIGxlbmd0aCBvZiBhIG1hdGNoaW5nIHN0cmluZywgYW5kIHdpbGwgaW1tZWRpYXRlbHkKK2dpdmUgYSAibm8gbWF0Y2giIHJldHVybiB3aXRob3V0IGFjdHVhbGx5IHJ1bm5pbmcgYSBtYXRjaCBpZiB0aGUgc3ViamVjdCBpcyBub3QKK2xvbmcgZW5vdWdoLCBvciwgZm9yIHVuYW5jaG9yZWQgcGF0dGVybnMsIGlmIGl0IGhhcyBiZWVuIHNjYW5uZWQgZmFyIGVub3VnaC4KKzwvUD4KKzxQPgorWW91IGNhbiBkaXNhYmxlIHRoZXNlIG9wdGltaXphdGlvbnMgYnkgcGFzc2luZyB0aGUgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUKK29wdGlvbiB0byA8Yj5wY3JlMl9jb21waWxlKCk8L2I+LCBvciBieSBzdGFydGluZyB0aGUgcGF0dGVybiB3aXRoCisoKk5PX1NUQVJUX09QVCkuIFRoaXMgc2xvd3MgZG93biB0aGUgbWF0Y2hpbmcgcHJvY2VzcywgYnV0IGRvZXMgZW5zdXJlIHRoYXQKK2NhbGxvdXRzIHN1Y2ggYXMgdGhlIGV4YW1wbGUgYWJvdmUgYXJlIG9iZXllZC4KKzxhIG5hbWU9ImNhbGxvdXRpbnRlcmZhY2UiPjwvYT48L1A+Cis8YnI+PGEgbmFtZT0iU0VDNCIgaHJlZj0iI1RPQzEiPlRIRSBDQUxMT1VUIElOVEVSRkFDRTwvYT48YnI+Cis8UD4KK0R1cmluZyBtYXRjaGluZywgd2hlbiBQQ1JFMiByZWFjaGVzIGEgY2FsbG91dCBwb2ludCwgaWYgYW4gZXh0ZXJuYWwgZnVuY3Rpb24gaXMKK3NldCBpbiB0aGUgbWF0Y2ggY29udGV4dCwgaXQgaXMgY2FsbGVkLiBUaGlzIGFwcGxpZXMgdG8gYm90aCBub3JtYWwgYW5kIERGQQorbWF0Y2hpbmcuIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY2FsbG91dCBmdW5jdGlvbiBpcyBhIHBvaW50ZXIgdG8gYQorPGI+cGNyZTJfY2FsbG91dDwvYj4gYmxvY2suIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHZvaWQgKiBjYWxsb3V0IGRhdGEgdGhhdAord2FzIHN1cHBsaWVkIHdoZW4gdGhlIGNhbGxvdXQgd2FzIHNldCB1cCBieSBjYWxsaW5nIDxiPnBjcmUyX3NldF9jYWxsb3V0KCk8L2I+Cisoc2VlIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorZG9jdW1lbnRhdGlvbikuIFRoZSBjYWxsb3V0IGJsb2NrIHN0cnVjdHVyZSBjb250YWlucyB0aGUgZm9sbG93aW5nIGZpZWxkczoKKzxwcmU+CisgIHVpbnQzMl90ICAgICAgPGk+dmVyc2lvbjwvaT47CisgIHVpbnQzMl90ICAgICAgPGk+Y2FsbG91dF9udW1iZXI8L2k+OworICB1aW50MzJfdCAgICAgIDxpPmNhcHR1cmVfdG9wPC9pPjsKKyAgdWludDMyX3QgICAgICA8aT5jYXB0dXJlX2xhc3Q8L2k+OworICBQQ1JFMl9TSVpFICAgKjxpPm9mZnNldF92ZWN0b3I8L2k+OworICBQQ1JFMl9TUFRSICAgIDxpPm1hcms8L2k+OworICBQQ1JFMl9TUFRSICAgIDxpPnN1YmplY3Q8L2k+OworICBQQ1JFMl9TSVpFICAgIDxpPnN1YmplY3RfbGVuZ3RoPC9pPjsKKyAgUENSRTJfU0laRSAgICA8aT5zdGFydF9tYXRjaDwvaT47CisgIFBDUkUyX1NJWkUgICAgPGk+Y3VycmVudF9wb3NpdGlvbjwvaT47CisgIFBDUkUyX1NJWkUgICAgPGk+cGF0dGVybl9wb3NpdGlvbjwvaT47CisgIFBDUkUyX1NJWkUgICAgPGk+bmV4dF9pdGVtX2xlbmd0aDwvaT47CisgIFBDUkUyX1NJWkUgICAgPGk+Y2FsbG91dF9zdHJpbmdfb2Zmc2V0PC9pPjsKKyAgUENSRTJfU0laRSAgICA8aT5jYWxsb3V0X3N0cmluZ19sZW5ndGg8L2k+OworICBQQ1JFMl9TUFRSICAgIDxpPmNhbGxvdXRfc3RyaW5nPC9pPjsKKzwvcHJlPgorVGhlIDxpPnZlcnNpb248L2k+IGZpZWxkIGNvbnRhaW5zIHRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgYmxvY2sgZm9ybWF0LiBUaGUKK2N1cnJlbnQgdmVyc2lvbiBpcyAxOyB0aGUgdGhyZWUgY2FsbG91dCBzdHJpbmcgZmllbGRzIHdlcmUgYWRkZWQgZm9yIHRoaXMKK3ZlcnNpb24uIElmIHlvdSBhcmUgd3JpdGluZyBhbiBhcHBsaWNhdGlvbiB0aGF0IG1pZ2h0IHVzZSBhbiBlYXJsaWVyIHJlbGVhc2Ugb2YKK1BDUkUyLCB5b3Ugc2hvdWxkIGNoZWNrIHRoZSB2ZXJzaW9uIG51bWJlciBiZWZvcmUgYWNjZXNzaW5nIGFueSBvZiB0aGVzZQorZmllbGRzLiBUaGUgdmVyc2lvbiBudW1iZXIgd2lsbCBpbmNyZWFzZSBpbiBmdXR1cmUgaWYgbW9yZSBmaWVsZHMgYXJlIGFkZGVkLAorYnV0IHRoZSBpbnRlbnRpb24gaXMgbmV2ZXIgdG8gcmVtb3ZlIGFueSBvZiB0aGUgZXhpc3RpbmcgZmllbGRzLgorPC9QPgorPGJyPjxiPgorRmllbGRzIGZvciBudW1lcmljYWwgY2FsbG91dHMKKzwvYj48YnI+Cis8UD4KK0ZvciBhIG51bWVyaWNhbCBjYWxsb3V0LCA8aT5jYWxsb3V0X3N0cmluZzwvaT4gaXMgTlVMTCwgYW5kIDxpPmNhbGxvdXRfbnVtYmVyPC9pPgorY29udGFpbnMgdGhlIG51bWJlciBvZiB0aGUgY2FsbG91dCwgaW4gdGhlIHJhbmdlIDAtMjU1LiBUaGlzIGlzIHRoZSBudW1iZXIKK3RoYXQgZm9sbG93cyAoP0MgZm9yIG1hbnVhbCBjYWxsb3V0czsgaXQgaXMgMjU1IGZvciBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZAorY2FsbG91dHMuCis8L1A+Cis8YnI+PGI+CitGaWVsZHMgZm9yIHN0cmluZyBjYWxsb3V0cworPC9iPjxicj4KKzxQPgorRm9yIGNhbGxvdXRzIHdpdGggc3RyaW5nIGFyZ3VtZW50cywgPGk+Y2FsbG91dF9udW1iZXI8L2k+IGlzIGFsd2F5cyB6ZXJvLCBhbmQKKzxpPmNhbGxvdXRfc3RyaW5nPC9pPiBwb2ludHMgdG8gdGhlIHN0cmluZyB0aGF0IGlzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGNvbXBpbGVkCitwYXR0ZXJuLiBJdHMgbGVuZ3RoIGlzIGdpdmVuIGJ5IDxpPmNhbGxvdXRfc3RyaW5nX2xlbmd0aDwvaT4uIER1cGxpY2F0ZWQgZW5kaW5nCitkZWxpbWl0ZXJzIHRoYXQgd2VyZSBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCBwYXR0ZXJuIHN0cmluZyBoYXZlIGJlZW4gdHVybmVkCitpbnRvIHNpbmdsZSBjaGFyYWN0ZXJzLCBidXQgdGhlcmUgaXMgbm8gb3RoZXIgcHJvY2Vzc2luZyBvZiB0aGUgY2FsbG91dCBzdHJpbmcKK2FyZ3VtZW50LiBBbiBhZGRpdGlvbmFsIGNvZGUgdW5pdCBjb250YWluaW5nIGJpbmFyeSB6ZXJvIGlzIHByZXNlbnQgYWZ0ZXIgdGhlCitzdHJpbmcsIGJ1dCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGxlbmd0aC4gVGhlIGRlbGltaXRlciB0aGF0IHdhcyB1c2VkIHRvIHN0YXJ0Cit0aGUgc3RyaW5nIGlzIGFsc28gc3RvcmVkIHdpdGhpbiB0aGUgcGF0dGVybiwgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBzdHJpbmcKK2l0c2VsZi4gWW91IGNhbiBhY2Nlc3MgdGhpcyBkZWxpbWl0ZXIgYXMgPGk+Y2FsbG91dF9zdHJpbmc8L2k+Wy0xXSBpZiB5b3UgbmVlZAoraXQuCis8L1A+Cis8UD4KK1RoZSA8aT5jYWxsb3V0X3N0cmluZ19vZmZzZXQ8L2k+IGZpZWxkIGlzIHRoZSBjb2RlIHVuaXQgb2Zmc2V0IHRvIHRoZSBzdGFydCBvZgordGhlIGNhbGxvdXQgYXJndW1lbnQgc3RyaW5nIHdpdGhpbiB0aGUgb3JpZ2luYWwgcGF0dGVybiBzdHJpbmcuIFRoaXMgaXMKK3Byb3ZpZGVkIGZvciB0aGUgYmVuZWZpdCBvZiBhcHBsaWNhdGlvbnMgc3VjaCBhcyBzY3JpcHQgbGFuZ3VhZ2VzIHRoYXQgbWlnaHQKK25lZWQgdG8gcmVwb3J0IGVycm9ycyBpbiB0aGUgY2FsbG91dCBzdHJpbmcgd2l0aGluIHRoZSBwYXR0ZXJuLgorPC9QPgorPGJyPjxiPgorRmllbGRzIGZvciBhbGwgY2FsbG91dHMKKzwvYj48YnI+Cis8UD4KK1RoZSByZW1haW5pbmcgZmllbGRzIGluIHRoZSBjYWxsb3V0IGJsb2NrIGFyZSB0aGUgc2FtZSBmb3IgYm90aCBraW5kcyBvZgorY2FsbG91dC4KKzwvUD4KKzxQPgorVGhlIDxpPm9mZnNldF92ZWN0b3I8L2k+IGZpZWxkIGlzIGEgcG9pbnRlciB0byB0aGUgdmVjdG9yIG9mIGNhcHR1cmluZyBvZmZzZXRzCisodGhlICJvdmVjdG9yIikgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSBtYXRjaGluZyBmdW5jdGlvbiBpbiB0aGUgbWF0Y2ggZGF0YQorYmxvY2suIFdoZW4gPGI+cGNyZTJfbWF0Y2goKTwvYj4gaXMgdXNlZCwgdGhlIGNvbnRlbnRzIGNhbiBiZSBpbnNwZWN0ZWQgaW4KK29yZGVyIHRvIGV4dHJhY3Qgc3Vic3RyaW5ncyB0aGF0IGhhdmUgYmVlbiBtYXRjaGVkIHNvIGZhciwgaW4gdGhlIHNhbWUgd2F5IGFzCitmb3IgZXh0cmFjdGluZyBzdWJzdHJpbmdzIGFmdGVyIGEgbWF0Y2ggaGFzIGNvbXBsZXRlZC4gRm9yIHRoZSBERkEgbWF0Y2hpbmcKK2Z1bmN0aW9uLCB0aGlzIGZpZWxkIGlzIG5vdCB1c2VmdWwuCis8L1A+Cis8UD4KK1RoZSA8aT5zdWJqZWN0PC9pPiBhbmQgPGk+c3ViamVjdF9sZW5ndGg8L2k+IGZpZWxkcyBjb250YWluIGNvcGllcyBvZiB0aGUgdmFsdWVzCit0aGF0IHdlcmUgcGFzc2VkIHRvIHRoZSBtYXRjaGluZyBmdW5jdGlvbi4KKzwvUD4KKzxQPgorVGhlIDxpPnN0YXJ0X21hdGNoPC9pPiBmaWVsZCBub3JtYWxseSBjb250YWlucyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgc3ViamVjdCBhdAord2hpY2ggdGhlIGN1cnJlbnQgbWF0Y2ggYXR0ZW1wdCBzdGFydGVkLiBIb3dldmVyLCBpZiB0aGUgZXNjYXBlIHNlcXVlbmNlIFxLCitoYXMgYmVlbiBlbmNvdW50ZXJlZCwgdGhpcyB2YWx1ZSBpcyBjaGFuZ2VkIHRvIHJlZmxlY3QgdGhlIG1vZGlmaWVkIHN0YXJ0aW5nCitwb2ludC4gSWYgdGhlIHBhdHRlcm4gaXMgbm90IGFuY2hvcmVkLCB0aGUgY2FsbG91dCBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkCitzZXZlcmFsIHRpbWVzIGZyb20gdGhlIHNhbWUgcG9pbnQgaW4gdGhlIHBhdHRlcm4gZm9yIGRpZmZlcmVudCBzdGFydGluZyBwb2ludHMKK2luIHRoZSBzdWJqZWN0LgorPC9QPgorPFA+CitUaGUgPGk+Y3VycmVudF9wb3NpdGlvbjwvaT4gZmllbGQgY29udGFpbnMgdGhlIG9mZnNldCB3aXRoaW4gdGhlIHN1YmplY3Qgb2YgdGhlCitjdXJyZW50IG1hdGNoIHBvaW50ZXIuCis8L1A+Cis8UD4KK1doZW4gdGhlIDxiPnBjcmUyX21hdGNoKCk8L2I+IGlzIHVzZWQsIHRoZSA8aT5jYXB0dXJlX3RvcDwvaT4gZmllbGQgY29udGFpbnMgb25lCittb3JlIHRoYW4gdGhlIG51bWJlciBvZiB0aGUgaGlnaGVzdCBudW1iZXJlZCBjYXB0dXJlZCBzdWJzdHJpbmcgc28gZmFyLiBJZiBubworc3Vic3RyaW5ncyBoYXZlIGJlZW4gY2FwdHVyZWQsIHRoZSB2YWx1ZSBvZiA8aT5jYXB0dXJlX3RvcDwvaT4gaXMgb25lLiBUaGlzIGlzCithbHdheXMgdGhlIGNhc2Ugd2hlbiB0aGUgREZBIGZ1bmN0aW9ucyBhcmUgdXNlZCwgYmVjYXVzZSB0aGV5IGRvIG5vdCBzdXBwb3J0CitjYXB0dXJlZCBzdWJzdHJpbmdzLgorPC9QPgorPFA+CitUaGUgPGk+Y2FwdHVyZV9sYXN0PC9pPiBmaWVsZCBjb250YWlucyB0aGUgbnVtYmVyIG9mIHRoZSBtb3N0IHJlY2VudGx5IGNhcHR1cmVkCitzdWJzdHJpbmcuIEhvd2V2ZXIsIHdoZW4gYSByZWN1cnNpb24gZXhpdHMsIHRoZSB2YWx1ZSByZXZlcnRzIHRvIHdoYXQgaXQgd2FzCitvdXRzaWRlIHRoZSByZWN1cnNpb24sIGFzIGRvIHRoZSB2YWx1ZXMgb2YgYWxsIGNhcHR1cmVkIHN1YnN0cmluZ3MuIElmIG5vCitzdWJzdHJpbmdzIGhhdmUgYmVlbiBjYXB0dXJlZCwgdGhlIHZhbHVlIG9mIDxpPmNhcHR1cmVfbGFzdDwvaT4gaXMgMC4gVGhpcyBpcworYWx3YXlzIHRoZSBjYXNlIGZvciB0aGUgREZBIG1hdGNoaW5nIGZ1bmN0aW9ucy4KKzwvUD4KKzxQPgorVGhlIDxpPnBhdHRlcm5fcG9zaXRpb248L2k+IGZpZWxkIGNvbnRhaW5zIHRoZSBvZmZzZXQgaW4gdGhlIHBhdHRlcm4gc3RyaW5nIHRvCit0aGUgbmV4dCBpdGVtIHRvIGJlIG1hdGNoZWQuCis8L1A+Cis8UD4KK1RoZSA8aT5uZXh0X2l0ZW1fbGVuZ3RoPC9pPiBmaWVsZCBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBuZXh0IGl0ZW0gdG8gYmUKK21hdGNoZWQgaW4gdGhlIHBhdHRlcm4gc3RyaW5nLiBXaGVuIHRoZSBjYWxsb3V0IGltbWVkaWF0ZWx5IHByZWNlZGVzIGFuCithbHRlcm5hdGlvbiBiYXIsIGEgY2xvc2luZyBwYXJlbnRoZXNpcywgb3IgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgdGhlIGxlbmd0aAoraXMgemVyby4gV2hlbiB0aGUgY2FsbG91dCBwcmVjZWRlcyBhbiBvcGVuaW5nIHBhcmVudGhlc2lzLCB0aGUgbGVuZ3RoIGlzIHRoYXQKK29mIHRoZSBlbnRpcmUgc3VicGF0dGVybi4KKzwvUD4KKzxQPgorVGhlIDxpPnBhdHRlcm5fcG9zaXRpb248L2k+IGFuZCA8aT5uZXh0X2l0ZW1fbGVuZ3RoPC9pPiBmaWVsZHMgYXJlIGludGVuZGVkIHRvCitoZWxwIGluIGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gZGlmZmVyZW50IGF1dG9tYXRpYyBjYWxsb3V0cywgd2hpY2ggYWxsIGhhdmUgdGhlCitzYW1lIGNhbGxvdXQgbnVtYmVyLiBIb3dldmVyLCB0aGV5IGFyZSBzZXQgZm9yIGFsbCBjYWxsb3V0cywgYW5kIGFyZSB1c2VkIGJ5Cis8Yj5wY3JlMnRlc3Q8L2I+IHRvIHNob3cgdGhlIG5leHQgaXRlbSB0byBiZSBtYXRjaGVkIHdoZW4gZGlzcGxheWluZyBjYWxsb3V0CitpbmZvcm1hdGlvbi4KKzwvUD4KKzxQPgorSW4gY2FsbG91dHMgZnJvbSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiB0aGUgPGk+bWFyazwvaT4gZmllbGQgY29udGFpbnMgYSBwb2ludGVyIHRvCit0aGUgemVyby10ZXJtaW5hdGVkIG5hbWUgb2YgdGhlIG1vc3QgcmVjZW50bHkgcGFzc2VkICgqTUFSSyksICgqUFJVTkUpLCBvcgorKCpUSEVOKSBpdGVtIGluIHRoZSBtYXRjaCwgb3IgTlVMTCBpZiBubyBzdWNoIGl0ZW1zIGhhdmUgYmVlbiBwYXNzZWQuIEluc3RhbmNlcworb2YgKCpQUlVORSkgb3IgKCpUSEVOKSB3aXRob3V0IGEgbmFtZSBkbyBub3Qgb2JsaXRlcmF0ZSBhIHByZXZpb3VzICgqTUFSSykuIEluCitjYWxsb3V0cyBmcm9tIHRoZSBERkEgbWF0Y2hpbmcgZnVuY3Rpb24gdGhpcyBmaWVsZCBhbHdheXMgY29udGFpbnMgTlVMTC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM1IiBocmVmPSIjVE9DMSI+UkVUVVJOIFZBTFVFUyBGUk9NIENBTExPVVRTPC9hPjxicj4KKzxQPgorVGhlIGV4dGVybmFsIGNhbGxvdXQgZnVuY3Rpb24gcmV0dXJucyBhbiBpbnRlZ2VyIHRvIFBDUkUyLiBJZiB0aGUgdmFsdWUgaXMKK3plcm8sIG1hdGNoaW5nIHByb2NlZWRzIGFzIG5vcm1hbC4gSWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCBtYXRjaGluZworZmFpbHMgYXQgdGhlIGN1cnJlbnQgcG9pbnQsIGJ1dCB0aGUgdGVzdGluZyBvZiBvdGhlciBtYXRjaGluZyBwb3NzaWJpbGl0aWVzCitnb2VzIGFoZWFkLCBqdXN0IGFzIGlmIGEgbG9va2FoZWFkIGFzc2VydGlvbiBoYWQgZmFpbGVkLiBJZiB0aGUgdmFsdWUgaXMgbGVzcwordGhhbiB6ZXJvLCB0aGUgbWF0Y2ggaXMgYWJhbmRvbmVkLCBhbmQgdGhlIG1hdGNoaW5nIGZ1bmN0aW9uIHJldHVybnMgdGhlCituZWdhdGl2ZSB2YWx1ZS4KKzwvUD4KKzxQPgorTmVnYXRpdmUgdmFsdWVzIHNob3VsZCBub3JtYWxseSBiZSBjaG9zZW4gZnJvbSB0aGUgc2V0IG9mIFBDUkUyX0VSUk9SX3h4eAordmFsdWVzLiBJbiBwYXJ0aWN1bGFyLCBQQ1JFMl9FUlJPUl9OT01BVENIIGZvcmNlcyBhIHN0YW5kYXJkICJubyBtYXRjaCIKK2ZhaWx1cmUuIFRoZSBlcnJvciBudW1iZXIgUENSRTJfRVJST1JfQ0FMTE9VVCBpcyByZXNlcnZlZCBmb3IgdXNlIGJ5IGNhbGxvdXQKK2Z1bmN0aW9uczsgaXQgd2lsbCBuZXZlciBiZSB1c2VkIGJ5IFBDUkUyIGl0c2VsZi4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM2IiBocmVmPSIjVE9DMSI+Q0FMTE9VVCBFTlVNRVJBVElPTjwvYT48YnI+Cis8UD4KKzxiPmludCBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZShjb25zdCBwY3JlMl9jb2RlICo8aT5jb2RlPC9pPiw8L2I+Cis8Yj4gIGludCAoKjxpPmNhbGxiYWNrPC9pPikocGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2sgKiwgdm9pZCAqKSw8L2I+Cis8Yj4gIHZvaWQgKjxpPnVzZXJfZGF0YTwvaT4pOzwvYj4KKzxicj4KKzxicj4KK0Egc2NyaXB0IGxhbmd1YWdlIHRoYXQgc3VwcG9ydHMgdGhlIHVzZSBvZiBzdHJpbmcgYXJndW1lbnRzIGluIGNhbGxvdXRzIG1pZ2h0CitsaWtlIHRvIHNjYW4gYWxsIHRoZSBjYWxsb3V0cyBpbiBhIHBhdHRlcm4gYmVmb3JlIHJ1bm5pbmcgdGhlIG1hdGNoLiBUaGlzIGNhbgorYmUgZG9uZSBieSBjYWxsaW5nIDxiPnBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKCk8L2I+LiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYQorcG9pbnRlciB0byBhIGNvbXBpbGVkIHBhdHRlcm4sIHRoZSBzZWNvbmQgcG9pbnRzIHRvIGEgY2FsbGJhY2sgZnVuY3Rpb24sIGFuZAordGhlIHRoaXJkIGlzIGFyYml0cmFyeSB1c2VyIGRhdGEuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGV2ZXJ5CitjYWxsb3V0IGluIHRoZSBwYXR0ZXJuIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhci4gSXRzIGZpcnN0IGFyZ3VtZW50IGlzCithIHBvaW50ZXIgdG8gYSBjYWxsb3V0IGVudW1lcmF0aW9uIGJsb2NrLCBhbmQgaXRzIHNlY29uZCBhcmd1bWVudCBpcyB0aGUKKzxpPnVzZXJfZGF0YTwvaT4gdmFsdWUgdGhhdCB3YXMgcGFzc2VkIHRvIDxiPnBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKCk8L2I+LiBUaGUKK2RhdGEgYmxvY2sgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmaWVsZHM6Cis8cHJlPgorICA8aT52ZXJzaW9uPC9pPiAgICAgICAgICAgICAgICBCbG9jayB2ZXJzaW9uIG51bWJlcgorICA8aT5wYXR0ZXJuX3Bvc2l0aW9uPC9pPiAgICAgICBPZmZzZXQgdG8gbmV4dCBpdGVtIGluIHBhdHRlcm4KKyAgPGk+bmV4dF9pdGVtX2xlbmd0aDwvaT4gICAgICAgTGVuZ3RoIG9mIG5leHQgaXRlbSBpbiBwYXR0ZXJuCisgIDxpPmNhbGxvdXRfbnVtYmVyPC9pPiAgICAgICAgIE51bWJlciBmb3IgbnVtYmVyZWQgY2FsbG91dHMKKyAgPGk+Y2FsbG91dF9zdHJpbmdfb2Zmc2V0PC9pPiAgT2Zmc2V0IHRvIHN0cmluZyB3aXRoaW4gcGF0dGVybgorICA8aT5jYWxsb3V0X3N0cmluZ19sZW5ndGg8L2k+ICBMZW5ndGggb2YgY2FsbG91dCBzdHJpbmcKKyAgPGk+Y2FsbG91dF9zdHJpbmc8L2k+ICAgICAgICAgUG9pbnRzIHRvIGNhbGxvdXQgc3RyaW5nIG9yIGlzIE5VTEwKKzwvcHJlPgorVGhlIHZlcnNpb24gbnVtYmVyIGlzIGN1cnJlbnRseSAwLiBJdCB3aWxsIGluY3JlYXNlIGlmIG5ldyBmaWVsZHMgYXJlIGV2ZXIKK2FkZGVkIHRvIHRoZSBibG9jay4gVGhlIHJlbWFpbmluZyBmaWVsZHMgYXJlIHRoZSBzYW1lIGFzIHRoZWlyIG5hbWVzYWtlcyBpbiB0aGUKKzxiPnBjcmUyX2NhbGxvdXQ8L2I+IGJsb2NrIHRoYXQgaXMgdXNlZCBmb3IgY2FsbG91dHMgZHVyaW5nIG1hdGNoaW5nLCBhcworZGVzY3JpYmVkCis8YSBocmVmPSIjY2FsbG91dGludGVyZmFjZSI+YWJvdmUuPC9hPgorPC9QPgorPFA+CitOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIDxpPnBhdHRlcm5fcG9zaXRpb248L2k+IGlzIHVuaXF1ZSBmb3IgZWFjaCBjYWxsb3V0LgorSG93ZXZlciwgaWYgYSBjYWxsb3V0IG9jY3VycyBpbnNpZGUgYSBncm91cCB0aGF0IGlzIHF1YW50aWZpZWQgd2l0aCBhIG5vbi16ZXJvCittaW5pbXVtIG9yIGEgZml4ZWQgbWF4aW11bSwgdGhlIGdyb3VwIGlzIHJlcGxpY2F0ZWQgaW5zaWRlIHRoZSBjb21waWxlZAorcGF0dGVybi4gRm9yIGV4YW1wbGUsIGEgcGF0dGVybiBzdWNoIGFzIC8oYSl7Mn0vIGlzIGNvbXBpbGVkIGFzIGlmIGl0IHdlcmUKKy8oYSkoYSkvLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGNhbGxvdXQgd2lsbCBiZSBlbnVtZXJhdGVkIG1vcmUgdGhhbiBvbmNlLCBidXQKK3dpdGggdGhlIHNhbWUgdmFsdWUgZm9yIDxpPnBhdHRlcm5fcG9zaXRpb248L2k+IGluIGVhY2ggY2FzZS4KKzwvUD4KKzxQPgorVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBub3JtYWxseSByZXR1cm4gemVyby4gSWYgaXQgcmV0dXJucyBhIG5vbi16ZXJvCit2YWx1ZSwgc2Nhbm5pbmcgdGhlIHBhdHRlcm4gc3RvcHMsIGFuZCB0aGF0IHZhbHVlIGlzIHJldHVybmVkIGZyb20KKzxiPnBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKCk8L2I+LgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzciIGhyZWY9IiNUT0MxIj5BVVRIT1I8L2E+PGJyPgorPFA+CitQaGlsaXAgSGF6ZWwKKzxicj4KK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKzxicj4KK0NhbWJyaWRnZSwgRW5nbGFuZC4KKzxicj4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM4IiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgorPFA+CitMYXN0IHVwZGF0ZWQ6IDIzIE1hcmNoIDIwMTUKKzxicj4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorPGJyPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJjb21wYXQuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyY29tcGF0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IyOWU2ZgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyY29tcGF0Lmh0bWwKQEAgLTAsMCArMSwyMjMgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJjb21wYXQgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyY29tcGF0IG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitESUZGRVJFTkNFUyBCRVRXRUVOIFBDUkUyIEFORCBQRVJMCis8L2I+PGJyPgorPFA+CitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIHdheXMgdGhhdCBQQ1JFMiBhbmQgUGVybCBoYW5kbGUKK3JlZ3VsYXIgZXhwcmVzc2lvbnMuIFRoZSBkaWZmZXJlbmNlcyBkZXNjcmliZWQgaGVyZSBhcmUgd2l0aCByZXNwZWN0IHRvIFBlcmwKK3ZlcnNpb25zIDUuMTAgYW5kIGFib3ZlLgorPC9QPgorPFA+CisxLiBQQ1JFMiBoYXMgb25seSBhIHN1YnNldCBvZiBQZXJsJ3MgVW5pY29kZSBzdXBwb3J0LiBEZXRhaWxzIG9mIHdoYXQgaXQgZG9lcworaGF2ZSBhcmUgZ2l2ZW4gaW4gdGhlCis8YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCI+PGI+cGNyZTJ1bmljb2RlPC9iPjwvYT4KK3BhZ2UuCis8L1A+Cis8UD4KKzIuIFBDUkUyIGFsbG93cyByZXBlYXQgcXVhbnRpZmllcnMgb25seSBvbiBwYXJlbnRoZXNpemVkIGFzc2VydGlvbnMsIGJ1dCB0aGV5CitkbyBub3QgbWVhbiB3aGF0IHlvdSBtaWdodCB0aGluay4gRm9yIGV4YW1wbGUsICg/IWEpezN9IGRvZXMgbm90IGFzc2VydCB0aGF0Cit0aGUgbmV4dCB0aHJlZSBjaGFyYWN0ZXJzIGFyZSBub3QgImEiLiBJdCBqdXN0IGFzc2VydHMgdGhhdCB0aGUgbmV4dCBjaGFyYWN0ZXIKK2lzIG5vdCAiYSIgdGhyZWUgdGltZXMgKGluIHByaW5jaXBsZTogUENSRTIgb3B0aW1pemVzIHRoaXMgdG8gcnVuIHRoZSBhc3NlcnRpb24KK2p1c3Qgb25jZSkuIFBlcmwgYWxsb3dzIHJlcGVhdCBxdWFudGlmaWVycyBvbiBvdGhlciBhc3NlcnRpb25zIHN1Y2ggYXMgXGIsIGJ1dAordGhlc2UgZG8gbm90IHNlZW0gdG8gaGF2ZSBhbnkgdXNlLgorPC9QPgorPFA+CiszLiBDYXB0dXJpbmcgc3VicGF0dGVybnMgdGhhdCBvY2N1ciBpbnNpZGUgbmVnYXRpdmUgbG9va2FoZWFkIGFzc2VydGlvbnMgYXJlCitjb3VudGVkLCBidXQgdGhlaXIgZW50cmllcyBpbiB0aGUgb2Zmc2V0cyB2ZWN0b3IgYXJlIG5ldmVyIHNldC4gUGVybCBzb21ldGltZXMKKyhidXQgbm90IGFsd2F5cykgc2V0cyBpdHMgbnVtZXJpY2FsIHZhcmlhYmxlcyBmcm9tIGluc2lkZSBuZWdhdGl2ZSBhc3NlcnRpb25zLgorPC9QPgorPFA+Cis0LiBUaGUgZm9sbG93aW5nIFBlcmwgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbm90IHN1cHBvcnRlZDogXGwsIFx1LCBcTCwKK1xVLCBhbmQgXE4gd2hlbiBmb2xsb3dlZCBieSBhIGNoYXJhY3RlciBuYW1lIG9yIFVuaWNvZGUgdmFsdWUuIChcTiBvbiBpdHMKK293biwgbWF0Y2hpbmcgYSBub24tbmV3bGluZSBjaGFyYWN0ZXIsIGlzIHN1cHBvcnRlZC4pIEluIGZhY3QgdGhlc2UgYXJlCitpbXBsZW1lbnRlZCBieSBQZXJsJ3MgZ2VuZXJhbCBzdHJpbmctaGFuZGxpbmcgYW5kIGFyZSBub3QgcGFydCBvZiBpdHMgcGF0dGVybgorbWF0Y2hpbmcgZW5naW5lLiBJZiBhbnkgb2YgdGhlc2UgYXJlIGVuY291bnRlcmVkIGJ5IFBDUkUyLCBhbiBlcnJvciBpcworZ2VuZXJhdGVkIGJ5IGRlZmF1bHQuIEhvd2V2ZXIsIGlmIHRoZSBQQ1JFMl9BTFRfQlNVWCBvcHRpb24gaXMgc2V0LAorXFUgYW5kIFx1IGFyZSBpbnRlcnByZXRlZCBhcyBFQ01BU2NyaXB0IGludGVycHJldHMgdGhlbS4KKzwvUD4KKzxQPgorNS4gVGhlIFBlcmwgZXNjYXBlIHNlcXVlbmNlcyBccCwgXFAsIGFuZCBcWCBhcmUgc3VwcG9ydGVkIG9ubHkgaWYgUENSRTIgaXMKK2J1aWx0IHdpdGggVW5pY29kZSBzdXBwb3J0LiBUaGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSB0ZXN0ZWQgd2l0aCBccCBhbmQgXFAKK2FyZSBsaW1pdGVkIHRvIHRoZSBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnRpZXMgc3VjaCBhcyBMdSBhbmQgTmQsIHNjcmlwdCBuYW1lcworc3VjaCBhcyBHcmVlayBvciBIYW4sIGFuZCB0aGUgZGVyaXZlZCBwcm9wZXJ0aWVzIEFueSBhbmQgTCYuIFBDUkUyIGRvZXMgc3VwcG9ydAordGhlIENzIChzdXJyb2dhdGUpIHByb3BlcnR5LCB3aGljaCBQZXJsIGRvZXMgbm90OyB0aGUgUGVybCBkb2N1bWVudGF0aW9uIHNheXMKKyJCZWNhdXNlIFBlcmwgaGlkZXMgdGhlIG5lZWQgZm9yIHRoZSB1c2VyIHRvIHVuZGVyc3RhbmQgdGhlIGludGVybmFsCityZXByZXNlbnRhdGlvbiBvZiBVbmljb2RlIGNoYXJhY3RlcnMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW1wbGVtZW50IHRoZQorc29tZXdoYXQgbWVzc3kgY29uY2VwdCBvZiBzdXJyb2dhdGVzLiIKKzwvUD4KKzxQPgorNi4gUENSRTIgZG9lcyBzdXBwb3J0IHRoZSBcUS4uLlxFIGVzY2FwZSBmb3IgcXVvdGluZyBzdWJzdHJpbmdzLiBDaGFyYWN0ZXJzCitpbiBiZXR3ZWVuIGFyZSB0cmVhdGVkIGFzIGxpdGVyYWxzLiBUaGlzIGlzIHNsaWdodGx5IGRpZmZlcmVudCBmcm9tIFBlcmwgaW4KK3RoYXQgJCBhbmQgQCBhcmUgYWxzbyBoYW5kbGVkIGFzIGxpdGVyYWxzIGluc2lkZSB0aGUgcXVvdGVzLiBJbiBQZXJsLCB0aGV5CitjYXVzZSB2YXJpYWJsZSBpbnRlcnBvbGF0aW9uIChidXQgb2YgY291cnNlIFBDUkUyIGRvZXMgbm90IGhhdmUgdmFyaWFibGVzKS4KK05vdGUgdGhlIGZvbGxvd2luZyBleGFtcGxlczoKKzxwcmU+CisgICAgUGF0dGVybiAgICAgICAgICAgIFBDUkUyIG1hdGNoZXMgICAgICBQZXJsIG1hdGNoZXMKKworICAgIFxRYWJjJHh5elxFICAgICAgICBhYmMkeHl6ICAgICAgICAgICBhYmMgZm9sbG93ZWQgYnkgdGhlIGNvbnRlbnRzIG9mICR4eXoKKyAgICBcUWFiY1wkeHl6XEUgICAgICAgYWJjXCR4eXogICAgICAgICAgYWJjXCR4eXoKKyAgICBcUWFiY1xFXCRcUXh5elxFICAgYWJjJHh5eiAgICAgICAgICAgYWJjJHh5egorPC9wcmU+CitUaGUgXFEuLi5cRSBzZXF1ZW5jZSBpcyByZWNvZ25pemVkIGJvdGggaW5zaWRlIGFuZCBvdXRzaWRlIGNoYXJhY3RlciBjbGFzc2VzLgorPC9QPgorPFA+Cis3LiBGYWlybHkgb2J2aW91c2x5LCBQQ1JFMiBkb2VzIG5vdCBzdXBwb3J0IHRoZSAoP3tjb2RlfSkgYW5kICg/P3tjb2RlfSkKK2NvbnN0cnVjdGlvbnMuIEhvd2V2ZXIsIHRoZXJlIGlzIHN1cHBvcnQgZm9yIHJlY3Vyc2l2ZSBwYXR0ZXJucy4gVGhpcyBpcyBub3QKK2F2YWlsYWJsZSBpbiBQZXJsIDUuOCwgYnV0IGl0IGlzIGluIFBlcmwgNS4xMC4gQWxzbywgdGhlIFBDUkUyICJjYWxsb3V0IgorZmVhdHVyZSBhbGxvd3MgYW4gZXh0ZXJuYWwgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGR1cmluZyBwYXR0ZXJuIG1hdGNoaW5nLiBTZWUKK3RoZQorPGEgaHJlZj0icGNyZTJjYWxsb3V0Lmh0bWwiPjxiPnBjcmUyY2FsbG91dDwvYj48L2E+Citkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorPC9QPgorPFA+Cis4LiBTdWJyb3V0aW5lIGNhbGxzICh3aGV0aGVyIHJlY3Vyc2l2ZSBvciBub3QpIGFyZSB0cmVhdGVkIGFzIGF0b21pYyBncm91cHMuCitBdG9taWMgcmVjdXJzaW9uIGlzIGxpa2UgUHl0aG9uLCBidXQgdW5saWtlIFBlcmwuIENhcHR1cmVkIHZhbHVlcyB0aGF0IGFyZSBzZXQKK291dHNpZGUgYSBzdWJyb3V0aW5lIGNhbGwgY2FuIGJlIHJlZmVyZW5jZWQgZnJvbSBpbnNpZGUgaW4gUENSRTIsIGJ1dCBub3QgaW4KK1BlcmwuIFRoZXJlIGlzIGEgZGlzY3Vzc2lvbiB0aGF0IGV4cGxhaW5zIHRoZXNlIGRpZmZlcmVuY2VzIGluIG1vcmUgZGV0YWlsIGluCit0aGUKKzxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sI3JlY3Vyc2lvbmRpZmZlcmVuY2UiPnNlY3Rpb24gb24gcmVjdXJzaW9uIGRpZmZlcmVuY2VzIGZyb20gUGVybDwvYT4KK2luIHRoZQorPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwiPjxiPnBjcmUycGF0dGVybjwvYj48L2E+CitwYWdlLgorPC9QPgorPFA+Cis5LiBJZiBhbnkgb2YgdGhlIGJhY2t0cmFja2luZyBjb250cm9sIHZlcmJzIGFyZSB1c2VkIGluIGEgc3VicGF0dGVybiB0aGF0IGlzCitjYWxsZWQgYXMgYSBzdWJyb3V0aW5lICh3aGV0aGVyIG9yIG5vdCByZWN1cnNpdmVseSksIHRoZWlyIGVmZmVjdCBpcyBjb25maW5lZAordG8gdGhhdCBzdWJwYXR0ZXJuOyBpdCBkb2VzIG5vdCBleHRlbmQgdG8gdGhlIHN1cnJvdW5kaW5nIHBhdHRlcm4uIFRoaXMgaXMgbm90CithbHdheXMgdGhlIGNhc2UgaW4gUGVybC4gSW4gcGFydGljdWxhciwgaWYgKCpUSEVOKSBpcyBwcmVzZW50IGluIGEgZ3JvdXAgdGhhdAoraXMgY2FsbGVkIGFzIGEgc3Vicm91dGluZSwgaXRzIGFjdGlvbiBpcyBsaW1pdGVkIHRvIHRoYXQgZ3JvdXAsIGV2ZW4gaWYgdGhlCitncm91cCBkb2VzIG5vdCBjb250YWluIGFueSB8IGNoYXJhY3RlcnMuIE5vdGUgdGhhdCBzdWNoIHN1YnBhdHRlcm5zIGFyZQorcHJvY2Vzc2VkIGFzIGFuY2hvcmVkIGF0IHRoZSBwb2ludCB3aGVyZSB0aGV5IGFyZSB0ZXN0ZWQuCis8L1A+Cis8UD4KKzEwLiBJZiBhIHBhdHRlcm4gY29udGFpbnMgbW9yZSB0aGFuIG9uZSBiYWNrdHJhY2tpbmcgY29udHJvbCB2ZXJiLCB0aGUgZmlyc3QKK29uZSB0aGF0IGlzIGJhY2t0cmFja2VkIG9udG8gYWN0cy4gRm9yIGV4YW1wbGUsIGluIHRoZSBwYXR0ZXJuCitBKCpDT01NSVQpQigqUFJVTkUpQyBhIGZhaWx1cmUgaW4gQiB0cmlnZ2VycyAoKkNPTU1JVCksIGJ1dCBhIGZhaWx1cmUgaW4gQwordHJpZ2dlcnMgKCpQUlVORSkuIFBlcmwncyBiZWhhdmlvdXIgaXMgbW9yZSBjb21wbGV4OyBpbiBtYW55IGNhc2VzIGl0IGlzIHRoZQorc2FtZSBhcyBQQ1JFMiwgYnV0IHRoZXJlIGFyZSBleGFtcGxlcyB3aGVyZSBpdCBkaWZmZXJzLgorPC9QPgorPFA+CisxMS4gTW9zdCBiYWNrdHJhY2tpbmcgdmVyYnMgaW4gYXNzZXJ0aW9ucyBoYXZlIHRoZWlyIG5vcm1hbCBhY3Rpb25zLiBUaGV5IGFyZQorbm90IGNvbmZpbmVkIHRvIHRoZSBhc3NlcnRpb24uCis8L1A+Cis8UD4KKzEyLiBUaGVyZSBhcmUgc29tZSBkaWZmZXJlbmNlcyB0aGF0IGFyZSBjb25jZXJuZWQgd2l0aCB0aGUgc2V0dGluZ3Mgb2YgY2FwdHVyZWQKK3N0cmluZ3Mgd2hlbiBwYXJ0IG9mIGEgcGF0dGVybiBpcyByZXBlYXRlZC4gRm9yIGV4YW1wbGUsIG1hdGNoaW5nICJhYmEiIGFnYWluc3QKK3RoZSBwYXR0ZXJuIC9eKGEoYik/KSskLyBpbiBQZXJsIGxlYXZlcyAkMiB1bnNldCwgYnV0IGluIFBDUkUyIGl0IGlzIHNldCB0bworImIiLgorPC9QPgorPFA+CisxMy4gUENSRTIncyBoYW5kbGluZyBvZiBkdXBsaWNhdGUgc3VicGF0dGVybiBudW1iZXJzIGFuZCBkdXBsaWNhdGUgc3VicGF0dGVybgorbmFtZXMgaXMgbm90IGFzIGdlbmVyYWwgYXMgUGVybCdzLiBUaGlzIGlzIGEgY29uc2VxdWVuY2Ugb2YgdGhlIGZhY3QgdGhlIFBDUkUyCit3b3JrcyBpbnRlcm5hbGx5IGp1c3Qgd2l0aCBudW1iZXJzLCB1c2luZyBhbiBleHRlcm5hbCB0YWJsZSB0byB0cmFuc2xhdGUKK2JldHdlZW4gbnVtYmVycyBhbmQgbmFtZXMuIEluIHBhcnRpY3VsYXIsIGEgcGF0dGVybiBzdWNoIGFzICg/fCg/JiM2MDthJiM2MjtBKXwoPyYjNjA7YilCKSwKK3doZXJlIHRoZSB0d28gY2FwdHVyaW5nIHBhcmVudGhlc2VzIGhhdmUgdGhlIHNhbWUgbnVtYmVyIGJ1dCBkaWZmZXJlbnQgbmFtZXMsCitpcyBub3Qgc3VwcG9ydGVkLCBhbmQgY2F1c2VzIGFuIGVycm9yIGF0IGNvbXBpbGUgdGltZS4gSWYgaXQgd2VyZSBhbGxvd2VkLCBpdAord291bGQgbm90IGJlIHBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoIHdoaWNoIHBhcmVudGhlc2VzIG1hdGNoZWQsIGJlY2F1c2UgYm90aAorbmFtZXMgbWFwIHRvIGNhcHR1cmluZyBzdWJwYXR0ZXJuIG51bWJlciAxLiBUbyBhdm9pZCB0aGlzIGNvbmZ1c2luZyBzaXR1YXRpb24sCithbiBlcnJvciBpcyBnaXZlbiBhdCBjb21waWxlIHRpbWUuCis8L1A+Cis8UD4KKzE0LiBQZXJsIHJlY29nbml6ZXMgY29tbWVudHMgaW4gc29tZSBwbGFjZXMgdGhhdCBQQ1JFMiBkb2VzIG5vdCwgZm9yIGV4YW1wbGUsCitiZXR3ZWVuIHRoZSAoIGFuZCA/IGF0IHRoZSBzdGFydCBvZiBhIHN1YnBhdHRlcm4uIElmIHRoZSAveCBtb2RpZmllciBpcyBzZXQsCitQZXJsIGFsbG93cyB3aGl0ZSBzcGFjZSBiZXR3ZWVuICggYW5kID8gKHRob3VnaCBjdXJyZW50IFBlcmxzIHdhcm4gdGhhdCB0aGlzIGlzCitkZXByZWNhdGVkKSBidXQgUENSRTIgbmV2ZXIgZG9lcywgZXZlbiBpZiB0aGUgUENSRTJfRVhURU5ERUQgb3B0aW9uIGlzIHNldC4KKzwvUD4KKzxQPgorMTUuIFBlcmwsIHdoZW4gaW4gd2FybmluZyBtb2RlLCBnaXZlcyB3YXJuaW5ncyBmb3IgY2hhcmFjdGVyIGNsYXNzZXMgc3VjaCBhcworW0EtXGRdIG9yIFthLVs6ZGlnaXQ6XV0uIEl0IHRoZW4gdHJlYXRzIHRoZSBoeXBoZW5zIGFzIGxpdGVyYWxzLiBQQ1JFMiBoYXMgbm8KK3dhcm5pbmcgZmVhdHVyZXMsIHNvIGl0IGdpdmVzIGFuIGVycm9yIGluIHRoZXNlIGNhc2VzIGJlY2F1c2UgdGhleSBhcmUgYWxtb3N0CitjZXJ0YWlubHkgdXNlciBtaXN0YWtlcy4KKzwvUD4KKzxQPgorMTYuIEluIFBDUkUyLCB0aGUgdXBwZXIvbG93ZXIgY2FzZSBjaGFyYWN0ZXIgcHJvcGVydGllcyBMdSBhbmQgTGwgYXJlIG5vdAorYWZmZWN0ZWQgd2hlbiBjYXNlLWluZGVwZW5kZW50IG1hdGNoaW5nIGlzIHNwZWNpZmllZC4gRm9yIGV4YW1wbGUsIFxwe0x1fQorYWx3YXlzIG1hdGNoZXMgYW4gdXBwZXIgY2FzZSBsZXR0ZXIuIEkgdGhpbmsgUGVybCBoYXMgY2hhbmdlZCBpbiB0aGlzIHJlc3BlY3Q7CitpbiB0aGUgcmVsZWFzZSBhdCB0aGUgdGltZSBvZiB3cml0aW5nICg1LjE2KSwgXHB7THV9IGFuZCBccHtMbH0gbWF0Y2ggYWxsCitsZXR0ZXJzLCByZWdhcmRsZXNzIG9mIGNhc2UsIHdoZW4gY2FzZSBpbmRlcGVuZGVuY2UgaXMgc3BlY2lmaWVkLgorPC9QPgorPFA+CisxNy4gUENSRTIgcHJvdmlkZXMgc29tZSBleHRlbnNpb25zIHRvIHRoZSBQZXJsIHJlZ3VsYXIgZXhwcmVzc2lvbiBmYWNpbGl0aWVzLgorUGVybCA1LjEwIGluY2x1ZGVzIG5ldyBmZWF0dXJlcyB0aGF0IGFyZSBub3QgaW4gZWFybGllciB2ZXJzaW9ucyBvZiBQZXJsLCBzb21lCitvZiB3aGljaCAoc3VjaCBhcyBuYW1lZCBwYXJlbnRoZXNlcykgaGF2ZSBiZWVuIGluIFBDUkUyIGZvciBzb21lIHRpbWUuIFRoaXMKK2xpc3QgaXMgd2l0aCByZXNwZWN0IHRvIFBlcmwgNS4xMDoKKzxicj4KKzxicj4KKyhhKSBBbHRob3VnaCBsb29rYmVoaW5kIGFzc2VydGlvbnMgaW4gUENSRTIgbXVzdCBtYXRjaCBmaXhlZCBsZW5ndGggc3RyaW5ncywKK2VhY2ggYWx0ZXJuYXRpdmUgYnJhbmNoIG9mIGEgbG9va2JlaGluZCBhc3NlcnRpb24gY2FuIG1hdGNoIGEgZGlmZmVyZW50IGxlbmd0aAorb2Ygc3RyaW5nLiBQZXJsIHJlcXVpcmVzIHRoZW0gYWxsIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgorPGJyPgorPGJyPgorKGIpIElmIFBDUkUyX0RPTExBUl9FTkRPTkxZIGlzIHNldCBhbmQgUENSRTJfTVVMVElMSU5FIGlzIG5vdCBzZXQsIHRoZSAkCittZXRhLWNoYXJhY3RlciBtYXRjaGVzIG9ubHkgYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBzdHJpbmcuCis8YnI+Cis8YnI+CisoYykgQSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBsZXR0ZXIgd2l0aCBubyBzcGVjaWFsIG1lYW5pbmcgaXMgZmF1bHRlZC4gKFBlcmwKK2NhbiBiZSBtYWRlIHRvIGlzc3VlIGEgd2FybmluZy4pCis8YnI+Cis8YnI+CisoZCkgSWYgUENSRTJfVU5HUkVFRFkgaXMgc2V0LCB0aGUgZ3JlZWRpbmVzcyBvZiB0aGUgcmVwZXRpdGlvbiBxdWFudGlmaWVycyBpcworaW52ZXJ0ZWQsIHRoYXQgaXMsIGJ5IGRlZmF1bHQgdGhleSBhcmUgbm90IGdyZWVkeSwgYnV0IGlmIGZvbGxvd2VkIGJ5IGEKK3F1ZXN0aW9uIG1hcmsgdGhleSBhcmUuCis8YnI+Cis8YnI+CisoZSkgUENSRTJfQU5DSE9SRUQgY2FuIGJlIHVzZWQgYXQgbWF0Y2hpbmcgdGltZSB0byBmb3JjZSBhIHBhdHRlcm4gdG8gYmUgdHJpZWQKK29ubHkgYXQgdGhlIGZpcnN0IG1hdGNoaW5nIHBvc2l0aW9uIGluIHRoZSBzdWJqZWN0IHN0cmluZy4KKzxicj4KKzxicj4KKyhmKSBUaGUgUENSRTJfTk9UQk9MLCBQQ1JFMl9OT1RFT0wsIFBDUkUyX05PVEVNUFRZLCBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJULCBhbmQKK1BDUkUyX05PX0FVVE9fQ0FQVFVSRSBvcHRpb25zIGhhdmUgbm8gUGVybCBlcXVpdmFsZW50cy4KKzxicj4KKzxicj4KKyhnKSBUaGUgXFIgZXNjYXBlIHNlcXVlbmNlIGNhbiBiZSByZXN0cmljdGVkIHRvIG1hdGNoIG9ubHkgQ1IsIExGLCBvciBDUkxGCitieSB0aGUgUENSRTJfQlNSX0FOWUNSTEYgb3B0aW9uLgorPGJyPgorPGJyPgorKGgpIFRoZSBjYWxsb3V0IGZhY2lsaXR5IGlzIFBDUkUyLXNwZWNpZmljLgorPGJyPgorPGJyPgorKGkpIFRoZSBwYXJ0aWFsIG1hdGNoaW5nIGZhY2lsaXR5IGlzIFBDUkUyLXNwZWNpZmljLgorPGJyPgorPGJyPgorKGopIFRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbiAoPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IG1hdGNoZXMgaW4gYQorZGlmZmVyZW50IHdheSBhbmQgaXMgbm90IFBlcmwtY29tcGF0aWJsZS4KKzxicj4KKzxicj4KKyhrKSBQQ1JFMiByZWNvZ25pemVzIHNvbWUgc3BlY2lhbCBzZXF1ZW5jZXMgc3VjaCBhcyAoKkNSKSBhdCB0aGUgc3RhcnQgb2YKK2EgcGF0dGVybiB0aGF0IHNldCBvdmVyYWxsIG9wdGlvbnMgdGhhdCBjYW5ub3QgYmUgY2hhbmdlZCB3aXRoaW4gdGhlIHBhdHRlcm4uCis8L1A+Cis8YnI+PGI+CitBVVRIT1IKKzwvYj48YnI+Cis8UD4KK1BoaWxpcCBIYXplbAorPGJyPgorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorPGJyPgorQ2FtYnJpZGdlLCBFbmdsYW5kLgorPGJyPgorPC9QPgorPGJyPjxiPgorUkVWSVNJT04KKzwvYj48YnI+Cis8UD4KK0xhc3QgdXBkYXRlZDogMTUgTWFyY2ggMjAxNQorPGJyPgorQ29weXJpZ2h0ICZjb3B5OyAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCis8YnI+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMmRlbW8uaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyZGVtby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MTkxMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmRlbW8uaHRtbApAQCAtMCwwICsxLDQ0MyBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMmRlbW8gc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyZGVtbyBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPHVsPgorPC91bD4KKzxQUkU+CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgUENSRTIgREVNT05TVFJBVElPTiBQUk9HUkFNICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgaXMgYSBkZW1vbnN0cmF0aW9uIHByb2dyYW0gdG8gaWxsdXN0cmF0ZSBhIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgb2YKK2NhbGxpbmcgdGhlIFBDUkUyIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJ5IGZyb20gYSBDIHByb2dyYW0uIFNlZSB0aGUKK3BjcmUyc2FtcGxlIGRvY3VtZW50YXRpb24gZm9yIGEgc2hvcnQgZGlzY3Vzc2lvbiAoIm1hbiBwY3JlMnNhbXBsZSIgaWYgeW91IGhhdmUKK3RoZSBQQ1JFMiBtYW4gcGFnZXMgaW5zdGFsbGVkKS4gUENSRTIgaXMgYSByZXZpc2VkIEFQSSBmb3IgdGhlIGxpYnJhcnksIGFuZCBpcworaW5jb21wYXRpYmxlIHdpdGggdGhlIG9yaWdpbmFsIFBDUkUgQVBJLgorCitUaGVyZSBhcmUgYWN0dWFsbHkgdGhyZWUgbGlicmFyaWVzLCBlYWNoIHN1cHBvcnRpbmcgYSBkaWZmZXJlbnQgY29kZSB1bml0Cit3aWR0aC4gVGhpcyBkZW1vbnN0cmF0aW9uIHByb2dyYW0gdXNlcyB0aGUgOC1iaXQgbGlicmFyeS4KKworSW4gVW5peC1saWtlIGVudmlyb25tZW50cywgaWYgUENSRTIgaXMgaW5zdGFsbGVkIGluIHlvdXIgc3RhbmRhcmQgc3lzdGVtCitsaWJyYXJpZXMsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBjb21waWxlIHRoaXMgcHJvZ3JhbSB1c2luZyB0aGlzIGNvbW1hbmQ6CisKK2djYyAtV2FsbCBwY3JlMmRlbW8uYyAtbHBjcmUyLTggLW8gcGNyZTJkZW1vCisKK0lmIFBDUkUyIGlzIG5vdCBpbnN0YWxsZWQgaW4gYSBzdGFuZGFyZCBwbGFjZSwgaXQgaXMgbGlrZWx5IHRvIGJlIGluc3RhbGxlZAord2l0aCBzdXBwb3J0IGZvciB0aGUgcGtnLWNvbmZpZyBtZWNoYW5pc20uIElmIHlvdSBoYXZlIHBrZy1jb25maWcsIHlvdSBjYW4KK2NvbXBpbGUgdGhpcyBwcm9ncmFtIHVzaW5nIHRoaXMgY29tbWFuZDoKKworZ2NjIC1XYWxsIHBjcmUyZGVtby5jIGBwa2ctY29uZmlnIC0tY2ZsYWdzIC0tbGlicyBsaWJwY3JlMi04YCAtbyBwY3JlMmRlbW8KKworSWYgeW91IGRvIG5vdCBoYXZlIHBrZy1jb25maWcsIHlvdSBtYXkgaGF2ZSB0byB1c2UgdGhpczoKKworZ2NjIC1XYWxsIHBjcmUyZGVtby5jIC1JL3Vzci9sb2NhbC9pbmNsdWRlIC1ML3Vzci9sb2NhbC9saWIgXAorICAtUi91c3IvbG9jYWwvbGliIC1scGNyZTItOCAtbyBwY3JlMmRlbW8KKworUmVwbGFjZSAiL3Vzci9sb2NhbC9pbmNsdWRlIiBhbmQgIi91c3IvbG9jYWwvbGliIiB3aXRoIHdoZXJldmVyIHRoZSBpbmNsdWRlIGFuZAorbGlicmFyeSBmaWxlcyBmb3IgUENSRTIgYXJlIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbS4gT25seSBzb21lIG9wZXJhdGluZworc3lzdGVtcyAoU29sYXJpcyBpcyBvbmUpIHVzZSB0aGUgLVIgb3B0aW9uLgorCitCdWlsZGluZyB1bmRlciBXaW5kb3dzOgorCitJZiB5b3Ugd2FudCB0byBzdGF0aWNhbGx5IGxpbmsgdGhpcyBwcm9ncmFtIGFnYWluc3QgYSBub24tZGxsIC5hIGZpbGUsIHlvdSBtdXN0CitkZWZpbmUgUENSRTJfU1RBVElDIGJlZm9yZSBpbmNsdWRpbmcgcGNyZTIuaCwgc28gaW4gdGhpcyBlbnZpcm9ubWVudCwgdW5jb21tZW50Cit0aGUgZm9sbG93aW5nIGxpbmUuICovCisKKy8qICNkZWZpbmUgUENSRTJfU1RBVElDICovCisKKy8qIFRoaXMgbWFjcm8gbXVzdCBiZSBkZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgcGNyZTIuaC4gRm9yIGEgcHJvZ3JhbSB0aGF0IHVzZXMKK29ubHkgb25lIGNvZGUgdW5pdCB3aWR0aCwgaXQgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGdlbmVyaWMgZnVuY3Rpb24gbmFtZXMKK3N1Y2ggYXMgcGNyZTJfY29tcGlsZSgpLiAqLworCisjZGVmaW5lIFBDUkUyX0NPREVfVU5JVF9XSURUSCA4CisKKyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OworI2luY2x1ZGUgJmx0O3N0cmluZy5oJmd0OworI2luY2x1ZGUgJmx0O3BjcmUyLmgmZ3Q7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEhlcmUgaXMgdGhlIHByb2dyYW0uIFRoZSBBUEkgaW5jbHVkZXMgdGhlIGNvbmNlcHQgb2YgImNvbnRleHRzIiBmb3IgICAgICoKKyogc2V0dGluZyB1cCB1bnVzdWFsIGludGVyZmFjZSByZXF1aXJlbWVudHMgZm9yIGNvbXBpbGluZyBhbmQgbWF0Y2hpbmcsICAgKgorKiBzdWNoIGFzIGN1c3RvbSBtZW1vcnkgbWFuYWdlcnMgYW5kIG5vbi1zdGFuZGFyZCBuZXdsaW5lIGRlZmluaXRpb25zLiAgICAqCisqIFRoaXMgcHJvZ3JhbSBkb2VzIG5vdCBkbyBhbnkgb2YgdGhpcywgc28gaXQgbWFrZXMgbm8gdXNlIG9mIGNvbnRleHRzLCAgICoKKyogYWx3YXlzIHBhc3NpbmcgTlVMTCB3aGVyZSBhIGNvbnRleHQgY291bGQgYmUgZ2l2ZW4uICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKK3BjcmUyX2NvZGUgKnJlOworUENSRTJfU1BUUiBwYXR0ZXJuOyAgICAgLyogUENSRTJfU1BUUiBpcyBhIHBvaW50ZXIgdG8gdW5zaWduZWQgY29kZSB1bml0cyBvZiAqLworUENSRTJfU1BUUiBzdWJqZWN0OyAgICAgLyogdGhlIGFwcHJvcHJpYXRlIHdpZHRoICg4LCAxNiwgb3IgMzIgYml0cykuICovCitQQ1JFMl9TUFRSIG5hbWVfdGFibGU7CisKK2ludCBjcmxmX2lzX25ld2xpbmU7CitpbnQgZXJyb3JudW1iZXI7CitpbnQgZmluZF9hbGw7CitpbnQgaTsKK2ludCBuYW1lY291bnQ7CitpbnQgbmFtZV9lbnRyeV9zaXplOworaW50IHJjOworaW50IHV0Zjg7CisKK3VpbnQzMl90IG9wdGlvbl9iaXRzOwordWludDMyX3QgbmV3bGluZTsKKworUENSRTJfU0laRSBlcnJvcm9mZnNldDsKK1BDUkUyX1NJWkUgKm92ZWN0b3I7CisKK3NpemVfdCBzdWJqZWN0X2xlbmd0aDsKK3BjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGE7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRmlyc3QsIHNvcnQgb3V0IHRoZSBjb21tYW5kIGxpbmUuIFRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIG9wdGlvbiBhdCAgKgorKiB0aGUgbW9tZW50LCAiLWciIHRvIHJlcXVlc3QgcmVwZWF0ZWQgbWF0Y2hpbmcgdG8gZmluZCBhbGwgb2NjdXJyZW5jZXMsICAqCisqIGxpa2UgUGVybCdzIC9nIG9wdGlvbi4gV2Ugc2V0IHRoZSB2YXJpYWJsZSBmaW5kX2FsbCB0byBhIG5vbi16ZXJvIHZhbHVlICoKKyogaWYgdGhlIC1nIG9wdGlvbiBpcyBwcmVzZW50LiBBcGFydCBmcm9tIHRoYXQsIHRoZXJlIG11c3QgYmUgZXhhY3RseSB0d28gKgorKiBhcmd1bWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZmluZF9hbGwgPSAwOworZm9yIChpID0gMTsgaSAmbHQ7IGFyZ2M7IGkrKykKKyAgeworICBpZiAoc3RyY21wKGFyZ3ZbaV0sICItZyIpID09IDApIGZpbmRfYWxsID0gMTsKKyAgICBlbHNlIGJyZWFrOworICB9CisKKy8qIEFmdGVyIHRoZSBvcHRpb25zLCB3ZSByZXF1aXJlIGV4YWN0bHkgdHdvIGFyZ3VtZW50cywgd2hpY2ggYXJlIHRoZSBwYXR0ZXJuLAorYW5kIHRoZSBzdWJqZWN0IHN0cmluZy4gKi8KKworaWYgKGFyZ2MgLSBpICE9IDIpCisgIHsKKyAgcHJpbnRmKCJUd28gYXJndW1lbnRzIHJlcXVpcmVkOiBhIHJlZ2V4IGFuZCBhIHN1YmplY3Qgc3RyaW5nXG4iKTsKKyAgcmV0dXJuIDE7CisgIH0KKworLyogQXMgcGF0dGVybiBhbmQgc3ViamVjdCBhcmUgY2hhciBhcmd1bWVudHMsIHRoZXkgY2FuIGJlIHN0cmFpZ2h0Zm9yd2FyZGx5CitjYXN0IHRvIFBDUkUyX1NQVFIgYXMgd2UgYXJlIHdvcmtpbmcgaW4gOC1iaXQgY29kZSB1bml0cy4gKi8KKworcGF0dGVybiA9IChQQ1JFMl9TUFRSKWFyZ3ZbaV07CitzdWJqZWN0ID0gKFBDUkUyX1NQVFIpYXJndltpKzFdOworc3ViamVjdF9sZW5ndGggPSBzdHJsZW4oKGNoYXIgKilzdWJqZWN0KTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBOb3cgd2UgYXJlIGdvaW5nIHRvIGNvbXBpbGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLCBhbmQgaGFuZGxlICoKKyogYW55IGVycm9ycyB0aGF0IGFyZSBkZXRlY3RlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCityZSA9IHBjcmUyX2NvbXBpbGUoCisgIHBhdHRlcm4sICAgICAgICAgICAgICAgLyogdGhlIHBhdHRlcm4gKi8KKyAgUENSRTJfWkVST19URVJNSU5BVEVELCAvKiBpbmRpY2F0ZXMgcGF0dGVybiBpcyB6ZXJvLXRlcm1pbmF0ZWQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IG9wdGlvbnMgKi8KKyAgJmFtcDtlcnJvcm51bWJlciwgICAgICAgICAgLyogZm9yIGVycm9yIG51bWJlciAqLworICAmYW1wO2Vycm9yb2Zmc2V0LCAgICAgICAgICAvKiBmb3IgZXJyb3Igb2Zmc2V0ICovCisgIE5VTEwpOyAgICAgICAgICAgICAgICAgLyogdXNlIGRlZmF1bHQgY29tcGlsZSBjb250ZXh0ICovCisKKy8qIENvbXBpbGF0aW9uIGZhaWxlZDogcHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQuICovCisKK2lmIChyZSA9PSBOVUxMKQorICB7CisgIFBDUkUyX1VDSEFSIGJ1ZmZlclsyNTZdOworICBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZShlcnJvcm51bWJlciwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgIHByaW50ZigiUENSRTIgY29tcGlsYXRpb24gZmFpbGVkIGF0IG9mZnNldCAlZDogJXNcbiIsIChpbnQpZXJyb3JvZmZzZXQsCisgICAgYnVmZmVyKTsKKyAgcmV0dXJuIDE7CisgIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBJZiB0aGUgY29tcGlsYXRpb24gc3VjY2VlZGVkLCB3ZSBjYWxsIFBDUkUgYWdhaW4sIGluIG9yZGVyIHRvIGRvIGEgICAgICoKKyogcGF0dGVybiBtYXRjaCBhZ2FpbnN0IHRoZSBzdWJqZWN0IHN0cmluZy4gVGhpcyBkb2VzIGp1c3QgT05FIG1hdGNoLiBJZiAqCisqIGZ1cnRoZXIgbWF0Y2hpbmcgaXMgbmVlZGVkLCBpdCB3aWxsIGJlIGRvbmUgYmVsb3cuIEJlZm9yZSBydW5uaW5nIHRoZSAgKgorKiBtYXRjaCB3ZSBtdXN0IHNldCB1cCBhIG1hdGNoX2RhdGEgYmxvY2sgZm9yIGhvbGRpbmcgdGhlIHJlc3VsdC4gICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFVzaW5nIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBibG9jayBpcyBleGFjdGx5IHRoZSByaWdodCBzaXplIGZvcgordGhlIG51bWJlciBvZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgaW4gdGhlIHBhdHRlcm4uICovCisKK21hdGNoX2RhdGEgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4ocmUsIE5VTEwpOworCityYyA9IHBjcmUyX21hdGNoKAorICByZSwgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbXBpbGVkIHBhdHRlcm4gKi8KKyAgc3ViamVjdCwgICAgICAgICAgICAgIC8qIHRoZSBzdWJqZWN0IHN0cmluZyAqLworICBzdWJqZWN0X2xlbmd0aCwgICAgICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgLyogc3RhcnQgYXQgb2Zmc2V0IDAgaW4gdGhlIHN1YmplY3QgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgb3B0aW9ucyAqLworICBtYXRjaF9kYXRhLCAgICAgICAgICAgLyogYmxvY2sgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCAqLworICBOVUxMKTsgICAgICAgICAgICAgICAgLyogdXNlIGRlZmF1bHQgbWF0Y2ggY29udGV4dCAqLworCisvKiBNYXRjaGluZyBmYWlsZWQ6IGhhbmRsZSBlcnJvciBjYXNlcyAqLworCitpZiAocmMgJmx0OyAwKQorICB7CisgIHN3aXRjaChyYykKKyAgICB7CisgICAgY2FzZSBQQ1JFMl9FUlJPUl9OT01BVENIOiBwcmludGYoIk5vIG1hdGNoXG4iKTsgYnJlYWs7CisgICAgLyoKKyAgICBIYW5kbGUgb3RoZXIgc3BlY2lhbCBjYXNlcyBpZiB5b3UgbGlrZQorICAgICovCisgICAgZGVmYXVsdDogcHJpbnRmKCJNYXRjaGluZyBlcnJvciAlZFxuIiwgcmMpOyBicmVhazsKKyAgICB9CisgIHBjcmUyX21hdGNoX2RhdGFfZnJlZShtYXRjaF9kYXRhKTsgICAvKiBSZWxlYXNlIG1lbW9yeSB1c2VkIGZvciB0aGUgbWF0Y2ggKi8KKyAgcGNyZTJfY29kZV9mcmVlKHJlKTsgICAgICAgICAgICAgICAgIC8qIGRhdGEgYW5kIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAqLworICByZXR1cm4gMTsKKyAgfQorCisvKiBNYXRjaCBzdWNjZWRlZC4gR2V0IGEgcG9pbnRlciB0byB0aGUgb3V0cHV0IHZlY3Rvciwgd2hlcmUgc3RyaW5nIG9mZnNldHMgYXJlCitzdG9yZWQuICovCisKK292ZWN0b3IgPSBwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyKG1hdGNoX2RhdGEpOworcHJpbnRmKCJcbk1hdGNoIHN1Y2NlZWRlZCBhdCBvZmZzZXQgJWRcbiIsIChpbnQpb3ZlY3RvclswXSk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogV2UgaGF2ZSBmb3VuZCB0aGUgZmlyc3QgbWF0Y2ggd2l0aGluIHRoZSBzdWJqZWN0IHN0cmluZy4gSWYgdGhlIG91dHB1dCAqCisqIHZlY3RvciB3YXNuJ3QgYmlnIGVub3VnaCwgc2F5IHNvLiBUaGVuIG91dHB1dCBhbnkgc3Vic3RyaW5ncyB0aGF0IHdlcmUgKgorKiBjYXB0dXJlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBvdXRwdXQgdmVjdG9yIHdhc24ndCBiaWcgZW5vdWdoLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBiZWNhdXNlIHdlIHVzZWQKK3BjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybigpIGFib3ZlLiAqLworCitpZiAocmMgPT0gMCkKKyAgcHJpbnRmKCJvdmVjdG9yIHdhcyBub3QgYmlnIGVub3VnaCBmb3IgYWxsIHRoZSBjYXB0dXJlZCBzdWJzdHJpbmdzXG4iKTsKKworLyogU2hvdyBzdWJzdHJpbmdzIHN0b3JlZCBpbiB0aGUgb3V0cHV0IHZlY3RvciBieSBudW1iZXIuIE9idmlvdXNseSwgaW4gYSByZWFsCithcHBsaWNhdGlvbiB5b3UgbWlnaHQgd2FudCB0byBkbyB0aGluZ3Mgb3RoZXIgdGhhbiBwcmludCB0aGVtLiAqLworCitmb3IgKGkgPSAwOyBpICZsdDsgcmM7IGkrKykKKyAgeworICBQQ1JFMl9TUFRSIHN1YnN0cmluZ19zdGFydCA9IHN1YmplY3QgKyBvdmVjdG9yWzIqaV07CisgIHNpemVfdCBzdWJzdHJpbmdfbGVuZ3RoID0gb3ZlY3RvclsyKmkrMV0gLSBvdmVjdG9yWzIqaV07CisgIHByaW50ZigiJTJkOiAlLipzXG4iLCBpLCAoaW50KXN1YnN0cmluZ19sZW5ndGgsIChjaGFyICopc3Vic3RyaW5nX3N0YXJ0KTsKKyAgfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBUaGF0IGNvbmNsdWRlcyB0aGUgYmFzaWMgcGFydCBvZiB0aGlzIGRlbW9uc3RyYXRpb24gcHJvZ3JhbS4gV2UgaGF2ZSAgICAqCisqIGNvbXBpbGVkIGEgcGF0dGVybiwgYW5kIHBlcmZvcm1lZCBhIHNpbmdsZSBtYXRjaC4gVGhlIGNvZGUgdGhhdCBmb2xsb3dzICoKKyogc2hvd3MgZmlyc3QgaG93IHRvIGFjY2VzcyBuYW1lZCBzdWJzdHJpbmdzLCBhbmQgdGhlbiBob3cgdG8gY29kZSBmb3IgICAgKgorKiByZXBlYXRlZCBtYXRjaGVzIG9uIHRoZSBzYW1lIHN1YmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgbmFtZWQgc3Vic3RyaW5ncywgYW5kIGlmIHNvLCBzaG93IHRoZW0gYnkgbmFtZS4gRmlyc3QKK3dlIGhhdmUgdG8gZXh0cmFjdCB0aGUgY291bnQgb2YgbmFtZWQgcGFyZW50aGVzZXMgZnJvbSB0aGUgcGF0dGVybi4gKi8KKworKHZvaWQpcGNyZTJfcGF0dGVybl9pbmZvKAorICByZSwgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbXBpbGVkIHBhdHRlcm4gKi8KKyAgUENSRTJfSU5GT19OQU1FQ09VTlQsIC8qIGdldCB0aGUgbnVtYmVyIG9mIG5hbWVkIHN1YnN0cmluZ3MgKi8KKyAgJmFtcDtuYW1lY291bnQpOyAgICAgICAgICAvKiB3aGVyZSB0byBwdXQgdGhlIGFuc3dlciAqLworCitpZiAobmFtZWNvdW50ICZsdDs9IDApIHByaW50ZigiTm8gbmFtZWQgc3Vic3RyaW5nc1xuIik7IGVsc2UKKyAgeworICBQQ1JFMl9TUFRSIHRhYnB0cjsKKyAgcHJpbnRmKCJOYW1lZCBzdWJzdHJpbmdzXG4iKTsKKworICAvKiBCZWZvcmUgd2UgY2FuIGFjY2VzcyB0aGUgc3Vic3RyaW5ncywgd2UgbXVzdCBleHRyYWN0IHRoZSB0YWJsZSBmb3IKKyAgdHJhbnNsYXRpbmcgbmFtZXMgdG8gbnVtYmVycywgYW5kIHRoZSBzaXplIG9mIGVhY2ggZW50cnkgaW4gdGhlIHRhYmxlLiAqLworCisgICh2b2lkKXBjcmUyX3BhdHRlcm5faW5mbygKKyAgICByZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBjb21waWxlZCBwYXR0ZXJuICovCisgICAgUENSRTJfSU5GT19OQU1FVEFCTEUsICAgICAvKiBhZGRyZXNzIG9mIHRoZSB0YWJsZSAqLworICAgICZhbXA7bmFtZV90YWJsZSk7ICAgICAgICAgICAgIC8qIHdoZXJlIHRvIHB1dCB0aGUgYW5zd2VyICovCisKKyAgKHZvaWQpcGNyZTJfcGF0dGVybl9pbmZvKAorICAgIHJlLCAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbXBpbGVkIHBhdHRlcm4gKi8KKyAgICBQQ1JFMl9JTkZPX05BTUVFTlRSWVNJWkUsIC8qIHNpemUgb2YgZWFjaCBlbnRyeSBpbiB0aGUgdGFibGUgKi8KKyAgICAmYW1wO25hbWVfZW50cnlfc2l6ZSk7ICAgICAgICAvKiB3aGVyZSB0byBwdXQgdGhlIGFuc3dlciAqLworCisgIC8qIE5vdyB3ZSBjYW4gc2NhbiB0aGUgdGFibGUgYW5kLCBmb3IgZWFjaCBlbnRyeSwgcHJpbnQgdGhlIG51bWJlciwgdGhlIG5hbWUsCisgIGFuZCB0aGUgc3Vic3RyaW5nIGl0c2VsZi4gSW4gdGhlIDgtYml0IGxpYnJhcnkgdGhlIG51bWJlciBpcyBoZWxkIGluIHR3bworICBieXRlcywgbW9zdCBzaWduaWZpY2FudCBmaXJzdC4gKi8KKworICB0YWJwdHIgPSBuYW1lX3RhYmxlOworICBmb3IgKGkgPSAwOyBpICZsdDsgbmFtZWNvdW50OyBpKyspCisgICAgeworICAgIGludCBuID0gKHRhYnB0clswXSAmbHQ7Jmx0OyA4KSB8IHRhYnB0clsxXTsKKyAgICBwcmludGYoIiglZCkgJSpzOiAlLipzXG4iLCBuLCBuYW1lX2VudHJ5X3NpemUgLSAzLCB0YWJwdHIgKyAyLAorICAgICAgKGludCkob3ZlY3RvclsyKm4rMV0gLSBvdmVjdG9yWzIqbl0pLCBzdWJqZWN0ICsgb3ZlY3RvclsyKm5dKTsKKyAgICB0YWJwdHIgKz0gbmFtZV9lbnRyeV9zaXplOworICAgIH0KKyAgfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIElmIHRoZSAiLWciIG9wdGlvbiB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgd2Ugd2FudCB0byBjb250aW51ZSAgKgorKiB0byBzZWFyY2ggZm9yIGFkZGl0aW9uYWwgbWF0Y2hlcyBpbiB0aGUgc3ViamVjdCBzdHJpbmcsIGluIGEgc2ltaWxhciAgICoKKyogd2F5IHRvIHRoZSAvZyBvcHRpb24gaW4gUGVybC4gVGhpcyB0dXJucyBvdXQgdG8gYmUgdHJpY2tpZXIgdGhhbiB5b3UgICAqCisqIG1pZ2h0IHRoaW5rIGJlY2F1c2Ugb2YgdGhlIHBvc3NpYmlsaXR5IG9mIG1hdGNoaW5nIGFuIGVtcHR5IHN0cmluZy4gICAgKgorKiBXaGF0IGhhcHBlbnMgaXMgYXMgZm9sbG93czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIElmIHRoZSBwcmV2aW91cyBtYXRjaCB3YXMgTk9UIGZvciBhbiBlbXB0eSBzdHJpbmcsIHdlIGNhbiBqdXN0IHN0YXJ0ICAgKgorKiB0aGUgbmV4dCBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIElmIHRoZSBwcmV2aW91cyBtYXRjaCBXQVMgZm9yIGFuIGVtcHR5IHN0cmluZywgd2UgY2FuJ3QgZG8gdGhhdCwgYXMgaXQgKgorKiB3b3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuIEluc3RlYWQsIGEgY2FsbCBvZiBwY3JlMl9tYXRjaCgpIGlzICAgICoKKyogbWFkZSB3aXRoIHRoZSBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIGFuZCBQQ1JFMl9BTkNIT1JFRCBmbGFncyBzZXQuIFRoZSAqCisqIGZpcnN0IG9mIHRoZXNlIHRlbGxzIFBDUkUyIHRoYXQgYW4gZW1wdHkgc3RyaW5nIGF0IHRoZSBzdGFydCBvZiB0aGUgICAgKgorKiBzdWJqZWN0IGlzIG5vdCBhIHZhbGlkIG1hdGNoOyBvdGhlciBwb3NzaWJpbGl0aWVzIG11c3QgYmUgdHJpZWQuIFRoZSAgICoKKyogc2Vjb25kIGZsYWcgcmVzdHJpY3RzIFBDUkUyIHRvIG9uZSBtYXRjaCBhdHRlbXB0IGF0IHRoZSBpbml0aWFsIHN0cmluZyAqCisqIHBvc2l0aW9uLiBJZiB0aGlzIG1hdGNoIHN1Y2NlZWRzLCBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgZW1wdHkgc3RyaW5nICAgKgorKiBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgYW5kIHdlIGNhbiBwcmludCBpdCBhbmQgcHJvY2VlZCByb3VuZCB0aGUgbG9vcCwgICoKKyogYWR2YW5jaW5nIGJ5IHRoZSBsZW5ndGggb2Ygd2hhdGV2ZXIgd2FzIGZvdW5kLiBJZiB0aGlzIG1hdGNoIGRvZXMgbm90ICAqCisqIHN1Y2NlZWQsIHdlIHN0aWxsIHN0YXkgaW4gdGhlIGxvb3AsIGFkdmFuY2luZyBieSBqdXN0IG9uZSBjaGFyYWN0ZXIuICAgKgorKiBJbiBVVEYtOCBtb2RlLCB3aGljaCBjYW4gYmUgc2V0IGJ5ICgqVVRGKSBpbiB0aGUgcGF0dGVybiwgdGhpcyBtYXkgYmUgICoKKyogbW9yZSB0aGFuIG9uZSBieXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBIb3dldmVyLCB0aGVyZSBpcyBhIGNvbXBsaWNhdGlvbiBjb25jZXJuZWQgd2l0aCBuZXdsaW5lcy4gV2hlbiB0aGUgICAgICoKKyogbmV3bGluZSBjb252ZW50aW9uIGlzIHN1Y2ggdGhhdCBDUkxGIGlzIGEgdmFsaWQgbmV3bGluZSwgd2UgbXVzdCAgICAgICAqCisqIGFkdmFuY2UgYnkgdHdvIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gb25lLiBUaGUgbmV3bGluZSBjb252ZW50aW9uIGNhbiAgKgorKiBiZSBzZXQgaW4gdGhlIHJlZ2V4IGJ5ICgqQ1IpLCBldGMuOyBpZiBub3QsIHdlIG11c3QgZmluZCB0aGUgZGVmYXVsdC4gICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2lmICghZmluZF9hbGwpICAgICAvKiBDaGVjayBmb3IgLWcgKi8KKyAgeworICBwY3JlMl9tYXRjaF9kYXRhX2ZyZWUobWF0Y2hfZGF0YSk7ICAvKiBSZWxlYXNlIHRoZSBtZW1vcnkgdGhhdCB3YXMgdXNlZCAqLworICBwY3JlMl9jb2RlX2ZyZWUocmUpOyAgICAgICAgICAgICAgICAvKiBmb3IgdGhlIG1hdGNoIGRhdGEgYW5kIHRoZSBwYXR0ZXJuLiAqLworICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeGl0IHRoZSBwcm9ncmFtLiAqLworICB9CisKKy8qIEJlZm9yZSBydW5uaW5nIHRoZSBsb29wLCBjaGVjayBmb3IgVVRGLTggYW5kIHdoZXRoZXIgQ1JMRiBpcyBhIHZhbGlkIG5ld2xpbmUKK3NlcXVlbmNlLiBGaXJzdCwgZmluZCB0aGUgb3B0aW9ucyB3aXRoIHdoaWNoIHRoZSByZWdleCB3YXMgY29tcGlsZWQgYW5kIGV4dHJhY3QKK3RoZSBVVEYgc3RhdGUuICovCisKKyh2b2lkKXBjcmUyX3BhdHRlcm5faW5mbyhyZSwgUENSRTJfSU5GT19BTExPUFRJT05TLCAmYW1wO29wdGlvbl9iaXRzKTsKK3V0ZjggPSAob3B0aW9uX2JpdHMgJmFtcDsgUENSRTJfVVRGKSAhPSAwOworCisvKiBOb3cgZmluZCB0aGUgbmV3bGluZSBjb252ZW50aW9uIGFuZCBzZWUgd2hldGhlciBDUkxGIGlzIGEgdmFsaWQgbmV3bGluZQorc2VxdWVuY2UuICovCisKKyh2b2lkKXBjcmUyX3BhdHRlcm5faW5mbyhyZSwgUENSRTJfSU5GT19ORVdMSU5FLCAmYW1wO25ld2xpbmUpOworY3JsZl9pc19uZXdsaW5lID0gbmV3bGluZSA9PSBQQ1JFMl9ORVdMSU5FX0FOWSB8fAorICAgICAgICAgICAgICAgICAgbmV3bGluZSA9PSBQQ1JFMl9ORVdMSU5FX0NSTEYgfHwKKyAgICAgICAgICAgICAgICAgIG5ld2xpbmUgPT0gUENSRTJfTkVXTElORV9BTllDUkxGOworCisvKiBMb29wIGZvciBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgbWF0Y2hlcyAqLworCitmb3IgKDs7KQorICB7CisgIHVpbnQzMl90IG9wdGlvbnMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogTm9ybWFsbHkgbm8gb3B0aW9ucyAqLworICBQQ1JFMl9TSVpFIHN0YXJ0X29mZnNldCA9IG92ZWN0b3JbMV07ICAvKiBTdGFydCBhdCBlbmQgb2YgcHJldmlvdXMgbWF0Y2ggKi8KKworICAvKiBJZiB0aGUgcHJldmlvdXMgbWF0Y2ggd2FzIGZvciBhbiBlbXB0eSBzdHJpbmcsIHdlIGFyZSBmaW5pc2hlZCBpZiB3ZSBhcmUKKyAgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdC4gT3RoZXJ3aXNlLCBhcnJhbmdlIHRvIHJ1biBhbm90aGVyIG1hdGNoIGF0IHRoZQorICBzYW1lIHBvaW50IHRvIHNlZSBpZiBhIG5vbi1lbXB0eSBtYXRjaCBjYW4gYmUgZm91bmQuICovCisKKyAgaWYgKG92ZWN0b3JbMF0gPT0gb3ZlY3RvclsxXSkKKyAgICB7CisgICAgaWYgKG92ZWN0b3JbMF0gPT0gc3ViamVjdF9sZW5ndGgpIGJyZWFrOworICAgIG9wdGlvbnMgPSBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIHwgUENSRTJfQU5DSE9SRUQ7CisgICAgfQorCisgIC8qIFJ1biB0aGUgbmV4dCBtYXRjaGluZyBvcGVyYXRpb24gKi8KKworICByYyA9IHBjcmUyX21hdGNoKAorICAgIHJlLCAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tcGlsZWQgcGF0dGVybiAqLworICAgIHN1YmplY3QsICAgICAgICAgICAgICAvKiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgICBzdWJqZWN0X2xlbmd0aCwgICAgICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCAqLworICAgIHN0YXJ0X29mZnNldCwgICAgICAgICAvKiBzdGFydGluZyBvZmZzZXQgaW4gdGhlIHN1YmplY3QgKi8KKyAgICBvcHRpb25zLCAgICAgICAgICAgICAgLyogb3B0aW9ucyAqLworICAgIG1hdGNoX2RhdGEsICAgICAgICAgICAvKiBibG9jayBmb3Igc3RvcmluZyB0aGUgcmVzdWx0ICovCisgICAgTlVMTCk7ICAgICAgICAgICAgICAgIC8qIHVzZSBkZWZhdWx0IG1hdGNoIGNvbnRleHQgKi8KKworICAvKiBUaGlzIHRpbWUsIGEgcmVzdWx0IG9mIE5PTUFUQ0ggaXNuJ3QgYW4gZXJyb3IuIElmIHRoZSB2YWx1ZSBpbiAib3B0aW9ucyIKKyAgaXMgemVybywgaXQganVzdCBtZWFucyB3ZSBoYXZlIGZvdW5kIGFsbCBwb3NzaWJsZSBtYXRjaGVzLCBzbyB0aGUgbG9vcCBlbmRzLgorICBPdGhlcndpc2UsIGl0IG1lYW5zIHdlIGhhdmUgZmFpbGVkIHRvIGZpbmQgYSBub24tZW1wdHktc3RyaW5nIG1hdGNoIGF0IGEKKyAgcG9pbnQgd2hlcmUgdGhlcmUgd2FzIGEgcHJldmlvdXMgZW1wdHktc3RyaW5nIG1hdGNoLiBJbiB0aGlzIGNhc2UsIHdlIGRvIHdoYXQKKyAgUGVybCBkb2VzOiBhZHZhbmNlIHRoZSBtYXRjaGluZyBwb3NpdGlvbiBieSBvbmUgY2hhcmFjdGVyLCBhbmQgY29udGludWUuIFdlCisgIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgImVuZCBvZiBwcmV2aW91cyBtYXRjaCIgb2Zmc2V0LCBiZWNhdXNlIHRoYXQgaXMgcGlja2VkCisgIHVwIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AgYXMgdGhlIHBvaW50IGF0IHdoaWNoIHRvIHN0YXJ0IGFnYWluLgorCisgIFRoZXJlIGFyZSB0d28gY29tcGxpY2F0aW9uczogKGEpIFdoZW4gQ1JMRiBpcyBhIHZhbGlkIG5ld2xpbmUgc2VxdWVuY2UsIGFuZAorICB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBqdXN0IGJlZm9yZSBpdCwgYWR2YW5jZSBieSBhbiBleHRyYSBieXRlLiAoYikKKyAgT3RoZXJ3aXNlIHdlIG11c3QgZW5zdXJlIHRoYXQgd2Ugc2tpcCBhbiBlbnRpcmUgVVRGIGNoYXJhY3RlciBpZiB3ZSBhcmUgaW4KKyAgVVRGIG1vZGUuICovCisKKyAgaWYgKHJjID09IFBDUkUyX0VSUk9SX05PTUFUQ0gpCisgICAgeworICAgIGlmIChvcHRpb25zID09IDApIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogQWxsIG1hdGNoZXMgZm91bmQgKi8KKyAgICBvdmVjdG9yWzFdID0gc3RhcnRfb2Zmc2V0ICsgMTsgICAgICAgICAgICAgIC8qIEFkdmFuY2Ugb25lIGNvZGUgdW5pdCAqLworICAgIGlmIChjcmxmX2lzX25ld2xpbmUgJmFtcDsmYW1wOyAgICAgICAgICAgICAgICAgICAgICAvKiBJZiBDUkxGIGlzIG5ld2xpbmUgJmFtcDsgKi8KKyAgICAgICAgc3RhcnRfb2Zmc2V0ICZsdDsgc3ViamVjdF9sZW5ndGggLSAxICZhbXA7JmFtcDsgICAgLyogd2UgYXJlIGF0IENSTEYsICovCisgICAgICAgIHN1YmplY3Rbc3RhcnRfb2Zmc2V0XSA9PSAnXHInICZhbXA7JmFtcDsKKyAgICAgICAgc3ViamVjdFtzdGFydF9vZmZzZXQgKyAxXSA9PSAnXG4nKQorICAgICAgb3ZlY3RvclsxXSArPSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWR2YW5jZSBieSBvbmUgbW9yZS4gKi8KKyAgICBlbHNlIGlmICh1dGY4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgZW5zdXJlIHdlICovCisgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIGEgd2hvbGUgVVRGLTggKi8KKyAgICAgIHdoaWxlIChvdmVjdG9yWzFdICZsdDsgc3ViamVjdF9sZW5ndGgpICAgICAgIC8qIGNoYXJhY3Rlci4gKi8KKyAgICAgICAgeworICAgICAgICBpZiAoKHN1YmplY3Rbb3ZlY3RvclsxXV0gJmFtcDsgMHhjMCkgIT0gMHg4MCkgYnJlYWs7CisgICAgICAgIG92ZWN0b3JbMV0gKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIGNvbnRpbnVlOyAgICAvKiBHbyByb3VuZCB0aGUgbG9vcCBhZ2FpbiAqLworICAgIH0KKworICAvKiBPdGhlciBtYXRjaGluZyBlcnJvcnMgYXJlIG5vdCByZWNvdmVyYWJsZS4gKi8KKworICBpZiAocmMgJmx0OyAwKQorICAgIHsKKyAgICBwcmludGYoIk1hdGNoaW5nIGVycm9yICVkXG4iLCByYyk7CisgICAgcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKG1hdGNoX2RhdGEpOworICAgIHBjcmUyX2NvZGVfZnJlZShyZSk7CisgICAgcmV0dXJuIDE7CisgICAgfQorCisgIC8qIE1hdGNoIHN1Y2NlZGVkICovCisKKyAgcHJpbnRmKCJcbk1hdGNoIHN1Y2NlZWRlZCBhZ2FpbiBhdCBvZmZzZXQgJWRcbiIsIChpbnQpb3ZlY3RvclswXSk7CisKKyAgLyogVGhlIG1hdGNoIHN1Y2NlZWRlZCwgYnV0IHRoZSBvdXRwdXQgdmVjdG9yIHdhc24ndCBiaWcgZW5vdWdoLiBUaGlzCisgIHNob3VsZCBub3QgaGFwcGVuLiAqLworCisgIGlmIChyYyA9PSAwKQorICAgIHByaW50Zigib3ZlY3RvciB3YXMgbm90IGJpZyBlbm91Z2ggZm9yIGFsbCB0aGUgY2FwdHVyZWQgc3Vic3RyaW5nc1xuIik7CisKKyAgLyogQXMgYmVmb3JlLCBzaG93IHN1YnN0cmluZ3Mgc3RvcmVkIGluIHRoZSBvdXRwdXQgdmVjdG9yIGJ5IG51bWJlciwgYW5kIHRoZW4KKyAgYWxzbyBhbnkgbmFtZWQgc3Vic3RyaW5ncy4gKi8KKworICBmb3IgKGkgPSAwOyBpICZsdDsgcmM7IGkrKykKKyAgICB7CisgICAgUENSRTJfU1BUUiBzdWJzdHJpbmdfc3RhcnQgPSBzdWJqZWN0ICsgb3ZlY3RvclsyKmldOworICAgIHNpemVfdCBzdWJzdHJpbmdfbGVuZ3RoID0gb3ZlY3RvclsyKmkrMV0gLSBvdmVjdG9yWzIqaV07CisgICAgcHJpbnRmKCIlMmQ6ICUuKnNcbiIsIGksIChpbnQpc3Vic3RyaW5nX2xlbmd0aCwgKGNoYXIgKilzdWJzdHJpbmdfc3RhcnQpOworICAgIH0KKworICBpZiAobmFtZWNvdW50ICZsdDs9IDApIHByaW50ZigiTm8gbmFtZWQgc3Vic3RyaW5nc1xuIik7IGVsc2UKKyAgICB7CisgICAgUENSRTJfU1BUUiB0YWJwdHIgPSBuYW1lX3RhYmxlOworICAgIHByaW50ZigiTmFtZWQgc3Vic3RyaW5nc1xuIik7CisgICAgZm9yIChpID0gMDsgaSAmbHQ7IG5hbWVjb3VudDsgaSsrKQorICAgICAgeworICAgICAgaW50IG4gPSAodGFicHRyWzBdICZsdDsmbHQ7IDgpIHwgdGFicHRyWzFdOworICAgICAgcHJpbnRmKCIoJWQpICUqczogJS4qc1xuIiwgbiwgbmFtZV9lbnRyeV9zaXplIC0gMywgdGFicHRyICsgMiwKKyAgICAgICAgKGludCkob3ZlY3RvclsyKm4rMV0gLSBvdmVjdG9yWzIqbl0pLCBzdWJqZWN0ICsgb3ZlY3RvclsyKm5dKTsKKyAgICAgIHRhYnB0ciArPSBuYW1lX2VudHJ5X3NpemU7CisgICAgICB9CisgICAgfQorICB9ICAgICAgLyogRW5kIG9mIGxvb3AgdG8gZmluZCBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgbWF0Y2hlcyAqLworCitwcmludGYoIlxuIik7CitwY3JlMl9tYXRjaF9kYXRhX2ZyZWUobWF0Y2hfZGF0YSk7CitwY3JlMl9jb2RlX2ZyZWUocmUpOworcmV0dXJuIDA7Cit9CisKKy8qIEVuZCBvZiBwY3JlMmRlbW8uYyAqLworPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJncmVwLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMmdyZXAuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2ZiOTZmCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJncmVwLmh0bWwKQEAgLTAsMCArMSw3ODMgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJncmVwIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMmdyZXAgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzx1bD4KKzxsaT48YSBuYW1lPSJUT0MxIiBocmVmPSIjU0VDMSI+U1lOT1BTSVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMiIgaHJlZj0iI1NFQzIiPkRFU0NSSVBUSU9OPC9hPgorPGxpPjxhIG5hbWU9IlRPQzMiIGhyZWY9IiNTRUMzIj5TVVBQT1JUIEZPUiBDT01QUkVTU0VEIEZJTEVTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzQiIGhyZWY9IiNTRUM0Ij5CSU5BUlkgRklMRVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNSIgaHJlZj0iI1NFQzUiPk9QVElPTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNiIgaHJlZj0iI1NFQzYiPkVOVklST05NRU5UIFZBUklBQkxFUzwvYT4KKzxsaT48YSBuYW1lPSJUT0M3IiBocmVmPSIjU0VDNyI+TkVXTElORVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DOCIgaHJlZj0iI1NFQzgiPk9QVElPTlMgQ09NUEFUSUJJTElUWTwvYT4KKzxsaT48YSBuYW1lPSJUT0M5IiBocmVmPSIjU0VDOSI+T1BUSU9OUyBXSVRIIERBVEE8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTAiIGhyZWY9IiNTRUMxMCI+TUFUQ0hJTkcgRVJST1JTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzExIiBocmVmPSIjU0VDMTEiPkRJQUdOT1NUSUNTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzEyIiBocmVmPSIjU0VDMTIiPlNFRSBBTFNPPC9hPgorPGxpPjxhIG5hbWU9IlRPQzEzIiBocmVmPSIjU0VDMTMiPkFVVEhPUjwvYT4KKzxsaT48YSBuYW1lPSJUT0MxNCIgaHJlZj0iI1NFQzE0Ij5SRVZJU0lPTjwvYT4KKzwvdWw+Cis8YnI+PGEgbmFtZT0iU0VDMSIgaHJlZj0iI1RPQzEiPlNZTk9QU0lTPC9hPjxicj4KKzxQPgorPGI+cGNyZTJncmVwIFtvcHRpb25zXSBbbG9uZyBvcHRpb25zXSBbcGF0dGVybl0gW3BhdGgxIHBhdGgyIC4uLl08L2I+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMiIgaHJlZj0iI1RPQzEiPkRFU0NSSVBUSU9OPC9hPjxicj4KKzxQPgorPGI+cGNyZTJncmVwPC9iPiBzZWFyY2hlcyBmaWxlcyBmb3IgY2hhcmFjdGVyIHBhdHRlcm5zLCBpbiB0aGUgc2FtZSB3YXkgYXMgb3RoZXIKK2dyZXAgY29tbWFuZHMgZG8sIGJ1dCBpdCB1c2VzIHRoZSBQQ1JFMiByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeSB0byBzdXBwb3J0CitwYXR0ZXJucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgb2YgUGVybCA1LiBTZWUKKzxhIGhyZWY9InBjcmUyc3ludGF4Lmh0bWwiPjxiPnBjcmUyc3ludGF4PC9iPigzKTwvYT4KK2ZvciBhIHF1aWNrLXJlZmVyZW5jZSBzdW1tYXJ5IG9mIHBhdHRlcm4gc3ludGF4LCBvcgorPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwiPjxiPnBjcmUycGF0dGVybjwvYj4oMyk8L2E+Citmb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZSBzeW50YXggYW5kIHNlbWFudGljcyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9ucwordGhhdCBQQ1JFMiBzdXBwb3J0cy4KKzwvUD4KKzxQPgorUGF0dGVybnMsIHdoZXRoZXIgc3VwcGxpZWQgb24gdGhlIGNvbW1hbmQgbGluZSBvciBpbiBhIHNlcGFyYXRlIGZpbGUsIGFyZSBnaXZlbgord2l0aG91dCBkZWxpbWl0ZXJzLiBGb3IgZXhhbXBsZToKKzxwcmU+CisgIHBjcmUyZ3JlcCBUaHVyc2RheSAvZXRjL21vdGQKKzwvcHJlPgorSWYgeW91IGF0dGVtcHQgdG8gdXNlIGRlbGltaXRlcnMgKGZvciBleGFtcGxlLCBieSBzdXJyb3VuZGluZyBhIHBhdHRlcm4gd2l0aAorc2xhc2hlcywgYXMgaXMgY29tbW9uIGluIFBlcmwgc2NyaXB0cyksIHRoZXkgYXJlIGludGVycHJldGVkIGFzIHBhcnQgb2YgdGhlCitwYXR0ZXJuLiBRdW90ZXMgY2FuIG9mIGNvdXJzZSBiZSB1c2VkIHRvIGRlbGltaXQgcGF0dGVybnMgb24gdGhlIGNvbW1hbmQgbGluZQorYmVjYXVzZSB0aGV5IGFyZSBpbnRlcnByZXRlZCBieSB0aGUgc2hlbGwsIGFuZCBpbmRlZWQgcXVvdGVzIGFyZSByZXF1aXJlZCBpZiBhCitwYXR0ZXJuIGNvbnRhaW5zIHdoaXRlIHNwYWNlIG9yIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorPC9QPgorPFA+CitUaGUgZmlyc3QgYXJndW1lbnQgdGhhdCBmb2xsb3dzIGFueSBvcHRpb24gc2V0dGluZ3MgaXMgdHJlYXRlZCBhcyB0aGUgc2luZ2xlCitwYXR0ZXJuIHRvIGJlIG1hdGNoZWQgd2hlbiBuZWl0aGVyIDxiPi1lPC9iPiBub3IgPGI+LWY8L2I+IGlzIHByZXNlbnQuCitDb252ZXJzZWx5LCB3aGVuIG9uZSBvciBib3RoIG9mIHRoZXNlIG9wdGlvbnMgYXJlIHVzZWQgdG8gc3BlY2lmeSBwYXR0ZXJucywgYWxsCithcmd1bWVudHMgYXJlIHRyZWF0ZWQgYXMgcGF0aCBuYW1lcy4gQXQgbGVhc3Qgb25lIG9mIDxiPi1lPC9iPiwgPGI+LWY8L2I+LCBvciBhbgorYXJndW1lbnQgcGF0dGVybiBtdXN0IGJlIHByb3ZpZGVkLgorPC9QPgorPFA+CitJZiBubyBmaWxlcyBhcmUgc3BlY2lmaWVkLCA8Yj5wY3JlMmdyZXA8L2I+IHJlYWRzIHRoZSBzdGFuZGFyZCBpbnB1dC4gVGhlCitzdGFuZGFyZCBpbnB1dCBjYW4gYWxzbyBiZSByZWZlcmVuY2VkIGJ5IGEgbmFtZSBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGh5cGhlbi4KK0ZvciBleGFtcGxlOgorPHByZT4KKyAgcGNyZTJncmVwIHNvbWUtcGF0dGVybiBmaWxlMSAtIGZpbGUzCis8L3ByZT4KK0lucHV0IGZpbGVzIGFyZSBzZWFyY2hlZCBsaW5lIGJ5IGxpbmUuIEJ5IGRlZmF1bHQsIGVhY2ggbGluZSB0aGF0IG1hdGNoZXMgYQorcGF0dGVybiBpcyBjb3BpZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCwgYW5kIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZmlsZSwKK3RoZSBmaWxlIG5hbWUgaXMgb3V0cHV0IGF0IHRoZSBzdGFydCBvZiBlYWNoIGxpbmUsIGZvbGxvd2VkIGJ5IGEgY29sb24uCitIb3dldmVyLCB0aGVyZSBhcmUgb3B0aW9ucyB0aGF0IGNhbiBjaGFuZ2UgaG93IDxiPnBjcmUyZ3JlcDwvYj4gYmVoYXZlcy4gSW4KK3BhcnRpY3VsYXIsIHRoZSA8Yj4tTTwvYj4gb3B0aW9uIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHNlYXJjaCBmb3Igc3RyaW5ncyB0aGF0CitzcGFuIGxpbmUgYm91bmRhcmllcy4gV2hhdCBkZWZpbmVzIGEgbGluZSBib3VuZGFyeSBpcyBjb250cm9sbGVkIGJ5IHRoZQorPGI+LU48L2I+ICg8Yj4tLW5ld2xpbmU8L2I+KSBvcHRpb24uCis8L1A+Cis8UD4KK1RoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIGJ1ZmZlcmluZyBmaWxlcyB0aGF0IGFyZSBiZWluZyBzY2FubmVkIGlzCitjb250cm9sbGVkIGJ5IGEgcGFyYW1ldGVyIHRoYXQgY2FuIGJlIHNldCBieSB0aGUgPGI+LS1idWZmZXItc2l6ZTwvYj4gb3B0aW9uLgorVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCB3aGVuIDxiPnBjcmUyZ3JlcDwvYj4gaXMKK2J1aWx0LCB3aXRoIHRoZSBkZWZhdWx0IGRlZmF1bHQgYmVpbmcgMjBLLiBBIGJsb2NrIG9mIG1lbW9yeSB0aHJlZSB0aW1lcyB0aGlzCitzaXplIGlzIHVzZWQgKHRvIGFsbG93IGZvciBidWZmZXJpbmcgImJlZm9yZSIgYW5kICJhZnRlciIgbGluZXMpLiBBbiBlcnJvcgorb2NjdXJzIGlmIGEgbGluZSBvdmVyZmxvd3MgdGhlIGJ1ZmZlci4KKzwvUD4KKzxQPgorUGF0dGVybnMgY2FuIGJlIG5vIGxvbmdlciB0aGFuIDhLIG9yIEJVRlNJWiBieXRlcywgd2hpY2hldmVyIGlzIHRoZSBncmVhdGVyLgorQlVGU0laIGlzIGRlZmluZWQgaW4gPGI+JiM2MDtzdGRpby5oJiM2Mjs8L2I+LiBXaGVuIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGF0dGVybgorKHNwZWNpZmllZCBieSB0aGUgdXNlIG9mIDxiPi1lPC9iPiBhbmQvb3IgPGI+LWY8L2I+KSwgZWFjaCBwYXR0ZXJuIGlzIGFwcGxpZWQgdG8KK2VhY2ggbGluZSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgZGVmaW5lZCwgZXhjZXB0IHRoYXQgYWxsIHRoZSA8Yj4tZTwvYj4KK3BhdHRlcm5zIGFyZSB0cmllZCBiZWZvcmUgdGhlIDxiPi1mPC9iPiBwYXR0ZXJucy4KKzwvUD4KKzxQPgorQnkgZGVmYXVsdCwgYXMgc29vbiBhcyBvbmUgcGF0dGVybiBtYXRjaGVzIGEgbGluZSwgbm8gZnVydGhlciBwYXR0ZXJucyBhcmUKK2NvbnNpZGVyZWQuIEhvd2V2ZXIsIGlmIDxiPi0tY29sb3VyPC9iPiAob3IgPGI+LS1jb2xvcjwvYj4pIGlzIHVzZWQgdG8gY29sb3VyIHRoZQorbWF0Y2hpbmcgc3Vic3RyaW5ncywgb3IgaWYgPGI+LS1vbmx5LW1hdGNoaW5nPC9iPiwgPGI+LS1maWxlLW9mZnNldHM8L2I+LCBvcgorPGI+LS1saW5lLW9mZnNldHM8L2I+IGlzIHVzZWQgdG8gb3V0cHV0IG9ubHkgdGhlIHBhcnQgb2YgdGhlIGxpbmUgdGhhdCBtYXRjaGVkCisoZWl0aGVyIHNob3duIGxpdGVyYWxseSwgb3IgYXMgYW4gb2Zmc2V0KSwgc2Nhbm5pbmcgcmVzdW1lcyBpbW1lZGlhdGVseQorZm9sbG93aW5nIHRoZSBtYXRjaCwgc28gdGhhdCBmdXJ0aGVyIG1hdGNoZXMgb24gdGhlIHNhbWUgbGluZSBjYW4gYmUgZm91bmQuIElmCit0aGVyZSBhcmUgbXVsdGlwbGUgcGF0dGVybnMsIHRoZXkgYXJlIGFsbCB0cmllZCBvbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lLAorYnV0IHBhdHRlcm5zIHRoYXQgZm9sbG93IHRoZSBvbmUgdGhhdCBtYXRjaGVkIGFyZSBub3QgdHJpZWQgb24gdGhlIGVhcmxpZXIgcGFydAorb2YgdGhlIGxpbmUuCis8L1A+Cis8UD4KK1RoaXMgYmVoYXZpb3VyIG1lYW5zIHRoYXQgdGhlIG9yZGVyIGluIHdoaWNoIG11bHRpcGxlIHBhdHRlcm5zIGFyZSBzcGVjaWZpZWQKK2NhbiBhZmZlY3QgdGhlIG91dHB1dCB3aGVuIG9uZSBvZiB0aGUgYWJvdmUgb3B0aW9ucyBpcyB1c2VkLiBUaGlzIGlzIG5vIGxvbmdlcgordGhlIHNhbWUgYmVoYXZpb3VyIGFzIEdOVSBncmVwLCB3aGljaCBub3cgbWFuYWdlcyB0byBkaXNwbGF5IGVhcmxpZXIgbWF0Y2hlcworZm9yIGxhdGVyIHBhdHRlcm5zIChhcyBsb25nIGFzIHRoZXJlIGlzIG5vIG92ZXJsYXApLgorPC9QPgorPFA+CitQYXR0ZXJucyB0aGF0IGNhbiBtYXRjaCBhbiBlbXB0eSBzdHJpbmcgYXJlIGFjY2VwdGVkLCBidXQgZW1wdHkgc3RyaW5nCittYXRjaGVzIGFyZSBuZXZlciByZWNvZ25pemVkLiBBbiBleGFtcGxlIGlzIHRoZSBwYXR0ZXJuICIoc3VwZXIpPyhtYW4pPyIsIGluCit3aGljaCBhbGwgY29tcG9uZW50cyBhcmUgb3B0aW9uYWwuIFRoaXMgcGF0dGVybiBmaW5kcyBhbGwgb2NjdXJyZW5jZXMgb2YgYm90aAorInN1cGVyIiBhbmQgIm1hbiI7IHRoZSBvdXRwdXQgZGlmZmVycyBmcm9tIG1hdGNoaW5nIHdpdGggInN1cGVyfG1hbiIgd2hlbiBvbmx5Cit0aGUgbWF0Y2hpbmcgc3Vic3RyaW5ncyBhcmUgYmVpbmcgc2hvd24uCis8L1A+Cis8UD4KK0lmIHRoZSA8Yj5MQ19BTEw8L2I+IG9yIDxiPkxDX0NUWVBFPC9iPiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQsCis8Yj5wY3JlMmdyZXA8L2I+IHVzZXMgdGhlIHZhbHVlIHRvIHNldCBhIGxvY2FsZSB3aGVuIGNhbGxpbmcgdGhlIFBDUkUyIGxpYnJhcnkuCitUaGUgPGI+LS1sb2NhbGU8L2I+IG9wdGlvbiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGlzLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzMiIGhyZWY9IiNUT0MxIj5TVVBQT1JUIEZPUiBDT01QUkVTU0VEIEZJTEVTPC9hPjxicj4KKzxQPgorSXQgaXMgcG9zc2libGUgdG8gY29tcGlsZSA8Yj5wY3JlMmdyZXA8L2I+IHNvIHRoYXQgaXQgdXNlcyA8Yj5saWJ6PC9iPiBvcgorPGI+bGliYnoyPC9iPiB0byByZWFkIGZpbGVzIHdob3NlIG5hbWVzIGVuZCBpbiA8Yj4uZ3o8L2I+IG9yIDxiPi5iejI8L2I+LAorcmVzcGVjdGl2ZWx5LiBZb3UgY2FuIGZpbmQgb3V0IHdoZXRoZXIgeW91ciBiaW5hcnkgaGFzIHN1cHBvcnQgZm9yIG9uZSBvciBib3RoCitvZiB0aGVzZSBmaWxlIHR5cGVzIGJ5IHJ1bm5pbmcgaXQgd2l0aCB0aGUgPGI+LS1oZWxwPC9iPiBvcHRpb24uIElmIHRoZQorYXBwcm9wcmlhdGUgc3VwcG9ydCBpcyBub3QgcHJlc2VudCwgZmlsZXMgYXJlIHRyZWF0ZWQgYXMgcGxhaW4gdGV4dC4gVGhlCitzdGFuZGFyZCBpbnB1dCBpcyBhbHdheXMgc28gdHJlYXRlZC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM0IiBocmVmPSIjVE9DMSI+QklOQVJZIEZJTEVTPC9hPjxicj4KKzxQPgorQnkgZGVmYXVsdCwgYSBmaWxlIHRoYXQgY29udGFpbnMgYSBiaW5hcnkgemVybyBieXRlIHdpdGhpbiB0aGUgZmlyc3QgMTAyNCBieXRlcworaXMgaWRlbnRpZmllZCBhcyBhIGJpbmFyeSBmaWxlLCBhbmQgaXMgcHJvY2Vzc2VkIHNwZWNpYWxseS4gKEdOVSBncmVwIGFsc28KK2lkZW50aWZpZXMgYmluYXJ5IGZpbGVzIGluIHRoaXMgbWFubmVyLikgU2VlIHRoZSA8Yj4tLWJpbmFyeS1maWxlczwvYj4gb3B0aW9uCitmb3IgYSBtZWFucyBvZiBjaGFuZ2luZyB0aGUgd2F5IGJpbmFyeSBmaWxlcyBhcmUgaGFuZGxlZC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM1IiBocmVmPSIjVE9DMSI+T1BUSU9OUzwvYT48YnI+Cis8UD4KK1RoZSBvcmRlciBpbiB3aGljaCBzb21lIG9mIHRoZSBvcHRpb25zIGFwcGVhciBjYW4gYWZmZWN0IHRoZSBvdXRwdXQuIEZvcgorZXhhbXBsZSwgYm90aCB0aGUgPGI+LWg8L2I+IGFuZCA8Yj4tbDwvYj4gb3B0aW9ucyBhZmZlY3QgdGhlIHByaW50aW5nIG9mIGZpbGUKK25hbWVzLiBXaGljaGV2ZXIgY29tZXMgbGF0ZXIgaW4gdGhlIGNvbW1hbmQgbGluZSB3aWxsIGJlIHRoZSBvbmUgdGhhdCB0YWtlcworZWZmZWN0LiBTaW1pbGFybHksIGV4Y2VwdCB3aGVyZSBub3RlZCBiZWxvdywgaWYgYW4gb3B0aW9uIGlzIGdpdmVuIHR3aWNlLCB0aGUKK2xhdGVyIHNldHRpbmcgaXMgdXNlZC4gTnVtZXJpY2FsIHZhbHVlcyBmb3Igb3B0aW9ucyBtYXkgYmUgZm9sbG93ZWQgYnkgSyBvciBNLAordG8gc2lnbmlmeSBtdWx0aXBsaWNhdGlvbiBieSAxMDI0IG9yIDEwMjQqMTAyNCByZXNwZWN0aXZlbHkuCis8L1A+Cis8UD4KKzxiPi0tPC9iPgorVGhpcyB0ZXJtaW5hdGVzIHRoZSBsaXN0IG9mIG9wdGlvbnMuIEl0IGlzIHVzZWZ1bCBpZiB0aGUgbmV4dCBpdGVtIG9uIHRoZQorY29tbWFuZCBsaW5lIHN0YXJ0cyB3aXRoIGEgaHlwaGVuIGJ1dCBpcyBub3QgYW4gb3B0aW9uLiBUaGlzIGFsbG93cyBmb3IgdGhlCitwcm9jZXNzaW5nIG9mIHBhdHRlcm5zIGFuZCBmaWxlIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBoeXBoZW5zLgorPC9QPgorPFA+Cis8Yj4tQTwvYj4gPGk+bnVtYmVyPC9pPiwgPGI+LS1hZnRlci1jb250ZXh0PTwvYj48aT5udW1iZXI8L2k+CitPdXRwdXQgPGk+bnVtYmVyPC9pPiBsaW5lcyBvZiBjb250ZXh0IGFmdGVyIGVhY2ggbWF0Y2hpbmcgbGluZS4gSWYgZmlsZSBuYW1lcworYW5kL29yIGxpbmUgbnVtYmVycyBhcmUgYmVpbmcgb3V0cHV0LCBhIGh5cGhlbiBzZXBhcmF0b3IgaXMgdXNlZCBpbnN0ZWFkIG9mIGEKK2NvbG9uIGZvciB0aGUgY29udGV4dCBsaW5lcy4gQSBsaW5lIGNvbnRhaW5pbmcgIi0tIiBpcyBvdXRwdXQgYmV0d2VlbiBlYWNoCitncm91cCBvZiBsaW5lcywgdW5sZXNzIHRoZXkgYXJlIGluIGZhY3QgY29udGlndW91cyBpbiB0aGUgaW5wdXQgZmlsZS4gVGhlIHZhbHVlCitvZiA8aT5udW1iZXI8L2k+IGlzIGV4cGVjdGVkIHRvIGJlIHJlbGF0aXZlbHkgc21hbGwuIEhvd2V2ZXIsIDxiPnBjcmUyZ3JlcDwvYj4KK2d1YXJhbnRlZXMgdG8gaGF2ZSB1cCB0byA4SyBvZiBmb2xsb3dpbmcgdGV4dCBhdmFpbGFibGUgZm9yIGNvbnRleHQgb3V0cHV0LgorPC9QPgorPFA+Cis8Yj4tYTwvYj4sIDxiPi0tdGV4dDwvYj4KK1RyZWF0IGJpbmFyeSBmaWxlcyBhcyB0ZXh0LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKzxiPi0tYmluYXJ5LWZpbGVzPC9iPj08aT50ZXh0PC9pPi4KKzwvUD4KKzxQPgorPGI+LUI8L2I+IDxpPm51bWJlcjwvaT4sIDxiPi0tYmVmb3JlLWNvbnRleHQ9PC9iPjxpPm51bWJlcjwvaT4KK091dHB1dCA8aT5udW1iZXI8L2k+IGxpbmVzIG9mIGNvbnRleHQgYmVmb3JlIGVhY2ggbWF0Y2hpbmcgbGluZS4gSWYgZmlsZSBuYW1lcworYW5kL29yIGxpbmUgbnVtYmVycyBhcmUgYmVpbmcgb3V0cHV0LCBhIGh5cGhlbiBzZXBhcmF0b3IgaXMgdXNlZCBpbnN0ZWFkIG9mIGEKK2NvbG9uIGZvciB0aGUgY29udGV4dCBsaW5lcy4gQSBsaW5lIGNvbnRhaW5pbmcgIi0tIiBpcyBvdXRwdXQgYmV0d2VlbiBlYWNoCitncm91cCBvZiBsaW5lcywgdW5sZXNzIHRoZXkgYXJlIGluIGZhY3QgY29udGlndW91cyBpbiB0aGUgaW5wdXQgZmlsZS4gVGhlIHZhbHVlCitvZiA8aT5udW1iZXI8L2k+IGlzIGV4cGVjdGVkIHRvIGJlIHJlbGF0aXZlbHkgc21hbGwuIEhvd2V2ZXIsIDxiPnBjcmUyZ3JlcDwvYj4KK2d1YXJhbnRlZXMgdG8gaGF2ZSB1cCB0byA4SyBvZiBwcmVjZWRpbmcgdGV4dCBhdmFpbGFibGUgZm9yIGNvbnRleHQgb3V0cHV0LgorPC9QPgorPFA+Cis8Yj4tLWJpbmFyeS1maWxlcz08L2I+PGk+d29yZDwvaT4KK1NwZWNpZnkgaG93IGJpbmFyeSBmaWxlcyBhcmUgdG8gYmUgcHJvY2Vzc2VkLiBJZiB0aGUgd29yZCBpcyAiYmluYXJ5IiAodGhlCitkZWZhdWx0KSwgcGF0dGVybiBtYXRjaGluZyBpcyBwZXJmb3JtZWQgb24gYmluYXJ5IGZpbGVzLCBidXQgdGhlIG9ubHkgb3V0cHV0IGlzCisiQmluYXJ5IGZpbGUgJiM2MDtuYW1lJiM2MjsgbWF0Y2hlcyIgd2hlbiBhIG1hdGNoIHN1Y2NlZWRzLiBJZiB0aGUgd29yZCBpcyAidGV4dCIsCit3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSA8Yj4tYTwvYj4gb3IgPGI+LS10ZXh0PC9iPiBvcHRpb24sIGJpbmFyeSBmaWxlcyBhcmUKK3Byb2Nlc3NlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYW55IG90aGVyIGZpbGUuIEluIHRoaXMgY2FzZSwgd2hlbiBhIG1hdGNoCitzdWNjZWVkcywgdGhlIG91dHB1dCBtYXkgYmUgYmluYXJ5IGdhcmJhZ2UsIHdoaWNoIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMgaWYKK3NlbnQgdG8gYSB0ZXJtaW5hbC4gSWYgdGhlIHdvcmQgaXMgIndpdGhvdXQtbWF0Y2giLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZQorPGI+LUk8L2I+IG9wdGlvbiwgYmluYXJ5IGZpbGVzIGFyZSBub3QgcHJvY2Vzc2VkIGF0IGFsbDsgdGhleSBhcmUgYXNzdW1lZCBub3QgdG8KK2JlIG9mIGludGVyZXN0IGFuZCBhcmUgc2tpcHBlZCB3aXRob3V0IGNhdXNpbmcgYW55IG91dHB1dCBvciBhZmZlY3RpbmcgdGhlCityZXR1cm4gY29kZS4KKzwvUD4KKzxQPgorPGI+LS1idWZmZXItc2l6ZT08L2I+PGk+bnVtYmVyPC9pPgorU2V0IHRoZSBwYXJhbWV0ZXIgdGhhdCBjb250cm9scyBob3cgbXVjaCBtZW1vcnkgaXMgdXNlZCBmb3IgYnVmZmVyaW5nIGZpbGVzCit0aGF0IGFyZSBiZWluZyBzY2FubmVkLgorPC9QPgorPFA+Cis8Yj4tQzwvYj4gPGk+bnVtYmVyPC9pPiwgPGI+LS1jb250ZXh0PTwvYj48aT5udW1iZXI8L2k+CitPdXRwdXQgPGk+bnVtYmVyPC9pPiBsaW5lcyBvZiBjb250ZXh0IGJvdGggYmVmb3JlIGFuZCBhZnRlciBlYWNoIG1hdGNoaW5nIGxpbmUuCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gc2V0dGluZyBib3RoIDxiPi1BPC9iPiBhbmQgPGI+LUI8L2I+IHRvIHRoZSBzYW1lIHZhbHVlLgorPC9QPgorPFA+Cis8Yj4tYzwvYj4sIDxiPi0tY291bnQ8L2I+CitEbyBub3Qgb3V0cHV0IGxpbmVzIGZyb20gdGhlIGZpbGVzIHRoYXQgYXJlIGJlaW5nIHNjYW5uZWQ7IGluc3RlYWQgb3V0cHV0IHRoZQorbnVtYmVyIG9mIG1hdGNoZXMgKG9yIG5vbi1tYXRjaGVzIGlmIDxiPi12PC9iPiBpcyB1c2VkKSB0aGF0IHdvdWxkIG90aGVyd2lzZQoraGF2ZSBjYXVzZWQgbGluZXMgdG8gYmUgc2hvd24uIEJ5IGRlZmF1bHQsIHRoaXMgY291bnQgaXMgdGhlIHNhbWUgYXMgdGhlIG51bWJlcgorb2Ygc3VwcHJlc3NlZCBsaW5lcywgYnV0IGlmIHRoZSA8Yj4tTTwvYj4gKG11bHRpbGluZSkgb3B0aW9uIGlzIHVzZWQgKHdpdGhvdXQKKzxiPi12PC9iPiksIHRoZXJlIG1heSBiZSBtb3JlIHN1cHByZXNzZWQgbGluZXMgdGhhbiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMuCis8YnI+Cis8YnI+CitJZiBubyBsaW5lcyBhcmUgc2VsZWN0ZWQsIHRoZSBudW1iZXIgemVybyBpcyBvdXRwdXQuIElmIHNldmVyYWwgZmlsZXMgYXJlIGFyZQorYmVpbmcgc2Nhbm5lZCwgYSBjb3VudCBpcyBvdXRwdXQgZm9yIGVhY2ggb2YgdGhlbS4gSG93ZXZlciwgaWYgdGhlCis8Yj4tLWZpbGVzLXdpdGgtbWF0Y2hlczwvYj4gb3B0aW9uIGlzIGFsc28gdXNlZCwgb25seSB0aG9zZSBmaWxlcyB3aG9zZSBjb3VudHMKK2FyZSBncmVhdGVyIHRoYW4gemVybyBhcmUgbGlzdGVkLiBXaGVuIDxiPi1jPC9iPiBpcyB1c2VkLCB0aGUgPGI+LUE8L2I+LAorPGI+LUI8L2I+LCBhbmQgPGI+LUM8L2I+IG9wdGlvbnMgYXJlIGlnbm9yZWQuCis8L1A+Cis8UD4KKzxiPi0tY29sb3VyPC9iPiwgPGI+LS1jb2xvcjwvYj4KK0lmIHRoaXMgb3B0aW9uIGlzIGdpdmVuIHdpdGhvdXQgYW55IGRhdGEsIGl0IGlzIGVxdWl2YWxlbnQgdG8gIi0tY29sb3VyPWF1dG8iLgorSWYgZGF0YSBpcyByZXF1aXJlZCwgaXQgbXVzdCBiZSBnaXZlbiBpbiB0aGUgc2FtZSBzaGVsbCBpdGVtLCBzZXBhcmF0ZWQgYnkgYW4KK2VxdWFscyBzaWduLgorPC9QPgorPFA+Cis8Yj4tLWNvbG91cj08L2I+PGk+dmFsdWU8L2k+LCA8Yj4tLWNvbG9yPTwvYj48aT52YWx1ZTwvaT4KK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlIHBhcnRzIG9mIGEgbGluZSB0aGF0IG1hdGNoZWQKK2EgcGF0dGVybiBzaG91bGQgYmUgY29sb3VyZWQgaW4gdGhlIG91dHB1dC4gQnkgZGVmYXVsdCwgdGhlIG91dHB1dCBpcyBub3QKK2NvbG91cmVkLiBUaGUgdmFsdWUgKHdoaWNoIGlzIG9wdGlvbmFsLCBzZWUgYWJvdmUpIG1heSBiZSAibmV2ZXIiLCAiYWx3YXlzIiwgb3IKKyJhdXRvIi4gSW4gdGhlIGxhdHRlciBjYXNlLCBjb2xvdXJpbmcgaGFwcGVucyBvbmx5IGlmIHRoZSBzdGFuZGFyZCBvdXRwdXQgaXMKK2Nvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiBNb3JlIHJlc291cmNlcyBhcmUgdXNlZCB3aGVuIGNvbG91cmluZyBpcyBlbmFibGVkLAorYmVjYXVzZSA8Yj5wY3JlMmdyZXA8L2I+IGhhcyB0byBzZWFyY2ggZm9yIGFsbCBwb3NzaWJsZSBtYXRjaGVzIGluIGEgbGluZSwgbm90CitqdXN0IG9uZSwgaW4gb3JkZXIgdG8gY29sb3VyIHRoZW0gYWxsLgorPGJyPgorPGJyPgorVGhlIGNvbG91ciB0aGF0IGlzIHVzZWQgY2FuIGJlIHNwZWNpZmllZCBieSBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorUENSRTJHUkVQX0NPTE9VUiBvciBQQ1JFMkdSRVBfQ09MT1IuIFRoZSB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIHNob3VsZCBiZSBhCitzdHJpbmcgb2YgdHdvIG51bWJlcnMsIHNlcGFyYXRlZCBieSBhIHNlbWljb2xvbi4gVGhleSBhcmUgY29waWVkIGRpcmVjdGx5IGludG8KK3RoZSBjb250cm9sIHN0cmluZyBmb3Igc2V0dGluZyBjb2xvdXIgb24gYSB0ZXJtaW5hbCwgc28gaXQgaXMgeW91cgorcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhleSBtYWtlIHNlbnNlLiBJZiBuZWl0aGVyIG9mIHRoZSBlbnZpcm9ubWVudAordmFyaWFibGVzIGlzIHNldCwgdGhlIGRlZmF1bHQgaXMgIjE7MzEiLCB3aGljaCBnaXZlcyByZWQuCis8L1A+Cis8UD4KKzxiPi1EPC9iPiA8aT5hY3Rpb248L2k+LCA8Yj4tLWRldmljZXM9PC9iPjxpPmFjdGlvbjwvaT4KK0lmIGFuIGlucHV0IHBhdGggaXMgbm90IGEgcmVndWxhciBmaWxlIG9yIGEgZGlyZWN0b3J5LCAiYWN0aW9uIiBzcGVjaWZpZXMgaG93CitpdCBpcyB0byBiZSBwcm9jZXNzZWQuIFZhbGlkIHZhbHVlcyBhcmUgInJlYWQiICh0aGUgZGVmYXVsdCkgb3IgInNraXAiCisoc2lsZW50bHkgc2tpcCB0aGUgcGF0aCkuCis8L1A+Cis8UD4KKzxiPi1kPC9iPiA8aT5hY3Rpb248L2k+LCA8Yj4tLWRpcmVjdG9yaWVzPTwvYj48aT5hY3Rpb248L2k+CitJZiBhbiBpbnB1dCBwYXRoIGlzIGEgZGlyZWN0b3J5LCAiYWN0aW9uIiBzcGVjaWZpZXMgaG93IGl0IGlzIHRvIGJlIHByb2Nlc3NlZC4KK1ZhbGlkIHZhbHVlcyBhcmUgInJlYWQiICh0aGUgZGVmYXVsdCBpbiBub24tV2luZG93cyBlbnZpcm9ubWVudHMsIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIEdOVSBncmVwKSwgInJlY3Vyc2UiIChlcXVpdmFsZW50IHRvIHRoZSA8Yj4tcjwvYj4gb3B0aW9uKSwgb3IKKyJza2lwIiAoc2lsZW50bHkgc2tpcCB0aGUgcGF0aCwgdGhlIGRlZmF1bHQgaW4gV2luZG93cyBlbnZpcm9ubWVudHMpLiBJbiB0aGUKKyJyZWFkIiBjYXNlLCBkaXJlY3RvcmllcyBhcmUgcmVhZCBhcyBpZiB0aGV5IHdlcmUgb3JkaW5hcnkgZmlsZXMuIEluIHNvbWUKK29wZXJhdGluZyBzeXN0ZW1zIHRoZSBlZmZlY3Qgb2YgcmVhZGluZyBhIGRpcmVjdG9yeSBsaWtlIHRoaXMgaXMgYW4gaW1tZWRpYXRlCitlbmQtb2YtZmlsZTsgaW4gb3RoZXJzIGl0IG1heSBwcm92b2tlIGFuIGVycm9yLgorPC9QPgorPFA+Cis8Yj4tZTwvYj4gPGk+cGF0dGVybjwvaT4sIDxiPi0tcmVnZXg9PC9iPjxpPnBhdHRlcm48L2k+LCA8Yj4tLXJlZ2V4cD08L2I+PGk+cGF0dGVybjwvaT4KK1NwZWNpZnkgYSBwYXR0ZXJuIHRvIGJlIG1hdGNoZWQuIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzIGluCitvcmRlciB0byBzcGVjaWZ5IHNldmVyYWwgcGF0dGVybnMuIEl0IGNhbiBhbHNvIGJlIHVzZWQgYXMgYSB3YXkgb2Ygc3BlY2lmeWluZyBhCitzaW5nbGUgcGF0dGVybiB0aGF0IHN0YXJ0cyB3aXRoIGEgaHlwaGVuLiBXaGVuIDxiPi1lPC9iPiBpcyB1c2VkLCBubyBhcmd1bWVudAorcGF0dGVybiBpcyB0YWtlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBhcmd1bWVudHMgYXJlIHRyZWF0ZWQgYXMgZmlsZQorbmFtZXMuIFRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgcGF0dGVybnMuIFRoZXkgYXJlIGFwcGxpZWQgdG8gZWFjaAorbGluZSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgZGVmaW5lZCB1bnRpbCBvbmUgbWF0Y2hlcy4KKzxicj4KKzxicj4KK0lmIDxiPi1mPC9iPiBpcyB1c2VkIHdpdGggPGI+LWU8L2I+LCB0aGUgY29tbWFuZCBsaW5lIHBhdHRlcm5zIGFyZSBtYXRjaGVkIGZpcnN0LAorZm9sbG93ZWQgYnkgdGhlIHBhdHRlcm5zIGZyb20gdGhlIGZpbGUocyksIGluZGVwZW5kZW50IG9mIHRoZSBvcmRlciBpbiB3aGljaAordGhlc2Ugb3B0aW9ucyBhcmUgc3BlY2lmaWVkLiBOb3RlIHRoYXQgbXVsdGlwbGUgdXNlIG9mIDxiPi1lPC9iPiBpcyBub3QgdGhlIHNhbWUKK2FzIGEgc2luZ2xlIHBhdHRlcm4gd2l0aCBhbHRlcm5hdGl2ZXMuIEZvciBleGFtcGxlLCBYfFkgZmluZHMgdGhlIGZpcnN0CitjaGFyYWN0ZXIgaW4gYSBsaW5lIHRoYXQgaXMgWCBvciBZLCB3aGVyZWFzIGlmIHRoZSB0d28gcGF0dGVybnMgYXJlIGdpdmVuCitzZXBhcmF0ZWx5LCB3aXRoIFggZmlyc3QsIDxiPnBjcmUyZ3JlcDwvYj4gZmluZHMgWCBpZiBpdCBpcyBwcmVzZW50LCBldmVuIGlmIGl0Citmb2xsb3dzIFkgaW4gdGhlIGxpbmUuIEl0IGZpbmRzIFkgb25seSBpZiB0aGVyZSBpcyBubyBYIGluIHRoZSBsaW5lLiBUaGlzCittYXR0ZXJzIG9ubHkgaWYgeW91IGFyZSB1c2luZyA8Yj4tbzwvYj4gb3IgPGI+LS1jb2xvKHUpcjwvYj4gdG8gc2hvdyB0aGUgcGFydChzKQorb2YgdGhlIGxpbmUgdGhhdCBtYXRjaGVkLgorPC9QPgorPFA+Cis8Yj4tLWV4Y2x1ZGU8L2I+PTxpPnBhdHRlcm48L2k+CitGaWxlcyAoYnV0IG5vdCBkaXJlY3Rvcmllcykgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4gYXJlIHNraXBwZWQgd2l0aG91dAorYmVpbmcgcHJvY2Vzc2VkLiBUaGlzIGFwcGxpZXMgdG8gYWxsIGZpbGVzLCB3aGV0aGVyIGxpc3RlZCBvbiB0aGUgY29tbWFuZCBsaW5lLAorb2J0YWluZWQgZnJvbSA8Yj4tLWZpbGUtbGlzdDwvYj4sIG9yIGJ5IHNjYW5uaW5nIGEgZGlyZWN0b3J5LiBUaGUgcGF0dGVybiBpcyBhCitQQ1JFMiByZWd1bGFyIGV4cHJlc3Npb24sIGFuZCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGZpbmFsIGNvbXBvbmVudCBvZiB0aGUKK2ZpbGUgbmFtZSwgbm90IHRoZSBlbnRpcmUgcGF0aC4gVGhlIDxiPi1GPC9iPiwgPGI+LXc8L2I+LCBhbmQgPGI+LXg8L2I+IG9wdGlvbnMgZG8KK25vdCBhcHBseSB0byB0aGlzIHBhdHRlcm4uIFRoZSBvcHRpb24gbWF5IGJlIGdpdmVuIGFueSBudW1iZXIgb2YgdGltZXMgaW4gb3JkZXIKK3RvIHNwZWNpZnkgbXVsdGlwbGUgcGF0dGVybnMuIElmIGEgZmlsZSBuYW1lIG1hdGNoZXMgYm90aCBhbiA8Yj4tLWluY2x1ZGU8L2I+CithbmQgYW4gPGI+LS1leGNsdWRlPC9iPiBwYXR0ZXJuLCBpdCBpcyBleGNsdWRlZC4gVGhlcmUgaXMgbm8gc2hvcnQgZm9ybSBmb3IgdGhpcworb3B0aW9uLgorPC9QPgorPFA+Cis8Yj4tLWV4Y2x1ZGUtZnJvbT08L2I+PGk+ZmlsZW5hbWU8L2k+CitUcmVhdCBlYWNoIG5vbi1lbXB0eSBsaW5lIG9mIHRoZSBmaWxlIGFzIHRoZSBkYXRhIGZvciBhbiA8Yj4tLWV4Y2x1ZGU8L2I+CitvcHRpb24uIFdoYXQgY29uc3RpdHV0ZXMgYSBuZXdsaW5lIHdoZW4gcmVhZGluZyB0aGUgZmlsZSBpcyB0aGUgb3BlcmF0aW5nCitzeXN0ZW0ncyBkZWZhdWx0LiBUaGUgPGI+LS1uZXdsaW5lPC9iPiBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGlzIG9wdGlvbi4gVGhpcworb3B0aW9uIG1heSBiZSBnaXZlbiBtb3JlIHRoYW4gb25jZSBpbiBvcmRlciB0byBzcGVjaWZ5IGEgbnVtYmVyIG9mIGZpbGVzIHRvCityZWFkLgorPC9QPgorPFA+Cis8Yj4tLWV4Y2x1ZGUtZGlyPC9iPj08aT5wYXR0ZXJuPC9pPgorRGlyZWN0b3JpZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4gYXJlIHNraXBwZWQgd2l0aG91dCBiZWluZyBwcm9jZXNzZWQsCit3aGF0ZXZlciB0aGUgc2V0dGluZyBvZiB0aGUgPGI+LS1yZWN1cnNpdmU8L2I+IG9wdGlvbi4gVGhpcyBhcHBsaWVzIHRvIGFsbAorZGlyZWN0b3JpZXMsIHdoZXRoZXIgbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIG9idGFpbmVkIGZyb20KKzxiPi0tZmlsZS1saXN0PC9iPiwgb3IgYnkgc2Nhbm5pbmcgYSBwYXJlbnQgZGlyZWN0b3J5LiBUaGUgcGF0dGVybiBpcyBhIFBDUkUyCityZWd1bGFyIGV4cHJlc3Npb24sIGFuZCBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIGZpbmFsIGNvbXBvbmVudCBvZiB0aGUgZGlyZWN0b3J5CituYW1lLCBub3QgdGhlIGVudGlyZSBwYXRoLiBUaGUgPGI+LUY8L2I+LCA8Yj4tdzwvYj4sIGFuZCA8Yj4teDwvYj4gb3B0aW9ucyBkbyBub3QKK2FwcGx5IHRvIHRoaXMgcGF0dGVybi4gVGhlIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gYW55IG51bWJlciBvZiB0aW1lcyBpbiBvcmRlciB0bworc3BlY2lmeSBtb3JlIHRoYW4gb25lIHBhdHRlcm4uIElmIGEgZGlyZWN0b3J5IG1hdGNoZXMgYm90aCA8Yj4tLWluY2x1ZGUtZGlyPC9iPgorYW5kIDxiPi0tZXhjbHVkZS1kaXI8L2I+LCBpdCBpcyBleGNsdWRlZC4gVGhlcmUgaXMgbm8gc2hvcnQgZm9ybSBmb3IgdGhpcworb3B0aW9uLgorPC9QPgorPFA+Cis8Yj4tRjwvYj4sIDxiPi0tZml4ZWQtc3RyaW5nczwvYj4KK0ludGVycHJldCBlYWNoIGRhdGEtbWF0Y2hpbmcgcGF0dGVybiBhcyBhIGxpc3Qgb2YgZml4ZWQgc3RyaW5ncywgc2VwYXJhdGVkIGJ5CituZXdsaW5lcywgaW5zdGVhZCBvZiBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gV2hhdCBjb25zdGl0dXRlcyBhIG5ld2xpbmUgZm9yCit0aGlzIHB1cnBvc2UgaXMgY29udHJvbGxlZCBieSB0aGUgPGI+LS1uZXdsaW5lPC9iPiBvcHRpb24uIFRoZSA8Yj4tdzwvYj4gKG1hdGNoCithcyBhIHdvcmQpIGFuZCA8Yj4teDwvYj4gKG1hdGNoIHdob2xlIGxpbmUpIG9wdGlvbnMgY2FuIGJlIHVzZWQgd2l0aCA8Yj4tRjwvYj4uCitUaGV5IGFwcGx5IHRvIGVhY2ggb2YgdGhlIGZpeGVkIHN0cmluZ3MuIEEgbGluZSBpcyBzZWxlY3RlZCBpZiBhbnkgb2YgdGhlIGZpeGVkCitzdHJpbmdzIGFyZSBmb3VuZCBpbiBpdCAoc3ViamVjdCB0byA8Yj4tdzwvYj4gb3IgPGI+LXg8L2I+LCBpZiBwcmVzZW50KS4gVGhpcworb3B0aW9uIGFwcGxpZXMgb25seSB0byB0aGUgcGF0dGVybnMgdGhhdCBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBjb250ZW50cyBvZgorZmlsZXM7IGl0IGRvZXMgbm90IGFwcGx5IHRvIHBhdHRlcm5zIHNwZWNpZmllZCBieSBhbnkgb2YgdGhlIDxiPi0taW5jbHVkZTwvYj4gb3IKKzxiPi0tZXhjbHVkZTwvYj4gb3B0aW9ucy4KKzwvUD4KKzxQPgorPGI+LWY8L2I+IDxpPmZpbGVuYW1lPC9pPiwgPGI+LS1maWxlPTwvYj48aT5maWxlbmFtZTwvaT4KK1JlYWQgcGF0dGVybnMgZnJvbSB0aGUgZmlsZSwgb25lIHBlciBsaW5lLCBhbmQgbWF0Y2ggdGhlbSBhZ2FpbnN0CitlYWNoIGxpbmUgb2YgaW5wdXQuIFdoYXQgY29uc3RpdHV0ZXMgYSBuZXdsaW5lIHdoZW4gcmVhZGluZyB0aGUgZmlsZSBpcyB0aGUKK29wZXJhdGluZyBzeXN0ZW0ncyBkZWZhdWx0LiBUaGUgPGI+LS1uZXdsaW5lPC9iPiBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGlzCitvcHRpb24uIFRyYWlsaW5nIHdoaXRlIHNwYWNlIGlzIHJlbW92ZWQgZnJvbSBlYWNoIGxpbmUsIGFuZCBibGFuayBsaW5lcyBhcmUKK2lnbm9yZWQuIEFuIGVtcHR5IGZpbGUgY29udGFpbnMgbm8gcGF0dGVybnMgYW5kIHRoZXJlZm9yZSBtYXRjaGVzIG5vdGhpbmcuIFNlZQorYWxzbyB0aGUgY29tbWVudHMgYWJvdXQgbXVsdGlwbGUgcGF0dGVybnMgdmVyc3VzIGEgc2luZ2xlIHBhdHRlcm4gd2l0aAorYWx0ZXJuYXRpdmVzIGluIHRoZSBkZXNjcmlwdGlvbiBvZiA8Yj4tZTwvYj4gYWJvdmUuCis8YnI+Cis8YnI+CitJZiB0aGlzIG9wdGlvbiBpcyBnaXZlbiBtb3JlIHRoYW4gb25jZSwgYWxsIHRoZSBzcGVjaWZpZWQgZmlsZXMgYXJlCityZWFkLiBBIGRhdGEgbGluZSBpcyBvdXRwdXQgaWYgYW55IG9mIHRoZSBwYXR0ZXJucyBtYXRjaCBpdC4gQSBmaWxlIG5hbWUgY2FuCitiZSBnaXZlbiBhcyAiLSIgdG8gcmVmZXIgdG8gdGhlIHN0YW5kYXJkIGlucHV0LiBXaGVuIDxiPi1mPC9iPiBpcyB1c2VkLCBwYXR0ZXJucworc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgdXNpbmcgPGI+LWU8L2I+IG1heSBhbHNvIGJlIHByZXNlbnQ7IHRoZXkgYXJlCit0ZXN0ZWQgYmVmb3JlIHRoZSBmaWxlJ3MgcGF0dGVybnMuIEhvd2V2ZXIsIG5vIG90aGVyIHBhdHRlcm4gaXMgdGFrZW4gZnJvbSB0aGUKK2NvbW1hbmQgbGluZTsgYWxsIGFyZ3VtZW50cyBhcmUgdHJlYXRlZCBhcyB0aGUgbmFtZXMgb2YgcGF0aHMgdG8gYmUgc2VhcmNoZWQuCis8L1A+Cis8UD4KKzxiPi0tZmlsZS1saXN0PC9iPj08aT5maWxlbmFtZTwvaT4KK1JlYWQgYSBsaXN0IG9mIGZpbGVzIGFuZC9vciBkaXJlY3RvcmllcyB0aGF0IGFyZSB0byBiZSBzY2FubmVkIGZyb20gdGhlIGdpdmVuCitmaWxlLCBvbmUgcGVyIGxpbmUuIFRyYWlsaW5nIHdoaXRlIHNwYWNlIGlzIHJlbW92ZWQgZnJvbSBlYWNoIGxpbmUsIGFuZCBibGFuaworbGluZXMgYXJlIGlnbm9yZWQuIFRoZXNlIHBhdGhzIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGFueSB0aGF0IGFyZSBsaXN0ZWQgb24gdGhlCitjb21tYW5kIGxpbmUuIFRoZSBmaWxlIG5hbWUgY2FuIGJlIGdpdmVuIGFzICItIiB0byByZWZlciB0byB0aGUgc3RhbmRhcmQgaW5wdXQuCitJZiA8Yj4tLWZpbGU8L2I+IGFuZCA8Yj4tLWZpbGUtbGlzdDwvYj4gYXJlIGJvdGggc3BlY2lmaWVkIGFzICItIiwgcGF0dGVybnMgYXJlCityZWFkIGZpcnN0LiBUaGlzIGlzIHVzZWZ1bCBvbmx5IHdoZW4gdGhlIHN0YW5kYXJkIGlucHV0IGlzIGEgdGVybWluYWwsIGZyb20KK3doaWNoIGZ1cnRoZXIgbGluZXMgKHRoZSBsaXN0IG9mIGZpbGVzKSBjYW4gYmUgcmVhZCBhZnRlciBhbiBlbmQtb2YtZmlsZQoraW5kaWNhdGlvbi4gSWYgdGhpcyBvcHRpb24gaXMgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UsIGFsbCB0aGUgc3BlY2lmaWVkIGZpbGVzIGFyZQorcmVhZC4KKzwvUD4KKzxQPgorPGI+LS1maWxlLW9mZnNldHM8L2I+CitJbnN0ZWFkIG9mIHNob3dpbmcgbGluZXMgb3IgcGFydHMgb2YgbGluZXMgdGhhdCBtYXRjaCwgc2hvdyBlYWNoIG1hdGNoIGFzIGFuCitvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGZpbGUgYW5kIGEgbGVuZ3RoLCBzZXBhcmF0ZWQgYnkgYSBjb21tYS4gSW4gdGhpcworbW9kZSwgbm8gY29udGV4dCBpcyBzaG93bi4gVGhhdCBpcywgdGhlIDxiPi1BPC9iPiwgPGI+LUI8L2I+LCBhbmQgPGI+LUM8L2I+CitvcHRpb25zIGFyZSBpZ25vcmVkLiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIG1hdGNoIGluIGEgbGluZSwgZWFjaCBvZiB0aGVtIGlzCitzaG93biBzZXBhcmF0ZWx5LiBUaGlzIG9wdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCA8Yj4tLWxpbmUtb2Zmc2V0czwvYj4KK2FuZCA8Yj4tLW9ubHktbWF0Y2hpbmc8L2I+LgorPC9QPgorPFA+Cis8Yj4tSDwvYj4sIDxiPi0td2l0aC1maWxlbmFtZTwvYj4KK0ZvcmNlIHRoZSBpbmNsdXNpb24gb2YgdGhlIGZpbGUgbmFtZSBhdCB0aGUgc3RhcnQgb2Ygb3V0cHV0IGxpbmVzIHdoZW4KK3NlYXJjaGluZyBhIHNpbmdsZSBmaWxlLiBCeSBkZWZhdWx0LCB0aGUgZmlsZSBuYW1lIGlzIG5vdCBzaG93biBpbiB0aGlzIGNhc2UuCitGb3IgbWF0Y2hpbmcgbGluZXMsIHRoZSBmaWxlIG5hbWUgaXMgZm9sbG93ZWQgYnkgYSBjb2xvbjsgZm9yIGNvbnRleHQgbGluZXMsIGEKK2h5cGhlbiBzZXBhcmF0b3IgaXMgdXNlZC4gSWYgYSBsaW5lIG51bWJlciBpcyBhbHNvIGJlaW5nIG91dHB1dCwgaXQgZm9sbG93cyB0aGUKK2ZpbGUgbmFtZS4gV2hlbiB0aGUgPGI+LU08L2I+IG9wdGlvbiBjYXVzZXMgYSBwYXR0ZXJuIHRvIG1hdGNoIG1vcmUgdGhhbiBvbmUKK2xpbmUsIG9ubHkgdGhlIGZpcnN0IGlzIHByZWNlZGVkIGJ5IHRoZSBmaWxlIG5hbWUuCis8L1A+Cis8UD4KKzxiPi1oPC9iPiwgPGI+LS1uby1maWxlbmFtZTwvYj4KK1N1cHByZXNzIHRoZSBvdXRwdXQgZmlsZSBuYW1lcyB3aGVuIHNlYXJjaGluZyBtdWx0aXBsZSBmaWxlcy4gQnkgZGVmYXVsdCwKK2ZpbGUgbmFtZXMgYXJlIHNob3duIHdoZW4gbXVsdGlwbGUgZmlsZXMgYXJlIHNlYXJjaGVkLiBGb3IgbWF0Y2hpbmcgbGluZXMsIHRoZQorZmlsZSBuYW1lIGlzIGZvbGxvd2VkIGJ5IGEgY29sb247IGZvciBjb250ZXh0IGxpbmVzLCBhIGh5cGhlbiBzZXBhcmF0b3IgaXMgdXNlZC4KK0lmIGEgbGluZSBudW1iZXIgaXMgYWxzbyBiZWluZyBvdXRwdXQsIGl0IGZvbGxvd3MgdGhlIGZpbGUgbmFtZS4KKzwvUD4KKzxQPgorPGI+LS1oZWxwPC9iPgorT3V0cHV0IGEgaGVscCBtZXNzYWdlLCBnaXZpbmcgYnJpZWYgZGV0YWlscyBvZiB0aGUgY29tbWFuZCBvcHRpb25zIGFuZCBmaWxlCit0eXBlIHN1cHBvcnQsIGFuZCB0aGVuIGV4aXQuIEFueXRoaW5nIGVsc2Ugb24gdGhlIGNvbW1hbmQgbGluZSBpcworaWdub3JlZC4KKzwvUD4KKzxQPgorPGI+LUk8L2I+CitJZ25vcmUgYmluYXJ5IGZpbGVzLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKzxiPi0tYmluYXJ5LWZpbGVzPC9iPj08aT53aXRob3V0LW1hdGNoPC9pPi4KKzwvUD4KKzxQPgorPGI+LWk8L2I+LCA8Yj4tLWlnbm9yZS1jYXNlPC9iPgorSWdub3JlIHVwcGVyL2xvd2VyIGNhc2UgZGlzdGluY3Rpb25zIGR1cmluZyBjb21wYXJpc29ucy4KKzwvUD4KKzxQPgorPGI+LS1pbmNsdWRlPC9iPj08aT5wYXR0ZXJuPC9pPgorSWYgYW55IDxiPi0taW5jbHVkZTwvYj4gcGF0dGVybnMgYXJlIHNwZWNpZmllZCwgdGhlIG9ubHkgZmlsZXMgdGhhdCBhcmUKK3Byb2Nlc3NlZCBhcmUgdGhvc2UgdGhhdCBtYXRjaCBvbmUgb2YgdGhlIHBhdHRlcm5zIChhbmQgZG8gbm90IG1hdGNoIGFuCis8Yj4tLWV4Y2x1ZGU8L2I+IHBhdHRlcm4pLiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgZGlyZWN0b3JpZXMsIGJ1dCBpdAorYXBwbGllcyB0byBhbGwgZmlsZXMsIHdoZXRoZXIgbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIG9idGFpbmVkIGZyb20KKzxiPi0tZmlsZS1saXN0PC9iPiwgb3IgYnkgc2Nhbm5pbmcgYSBkaXJlY3RvcnkuIFRoZSBwYXR0ZXJuIGlzIGEgUENSRTIgcmVndWxhcgorZXhwcmVzc2lvbiwgYW5kIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmluYWwgY29tcG9uZW50IG9mIHRoZSBmaWxlIG5hbWUsIG5vdAordGhlIGVudGlyZSBwYXRoLiBUaGUgPGI+LUY8L2I+LCA8Yj4tdzwvYj4sIGFuZCA8Yj4teDwvYj4gb3B0aW9ucyBkbyBub3QgYXBwbHkgdG8KK3RoaXMgcGF0dGVybi4gVGhlIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gYW55IG51bWJlciBvZiB0aW1lcy4gSWYgYSBmaWxlIG5hbWUKK21hdGNoZXMgYm90aCBhbiA8Yj4tLWluY2x1ZGU8L2I+IGFuZCBhbiA8Yj4tLWV4Y2x1ZGU8L2I+IHBhdHRlcm4sIGl0IGlzIGV4Y2x1ZGVkLgorVGhlcmUgaXMgbm8gc2hvcnQgZm9ybSBmb3IgdGhpcyBvcHRpb24uCis8L1A+Cis8UD4KKzxiPi0taW5jbHVkZS1mcm9tPTwvYj48aT5maWxlbmFtZTwvaT4KK1RyZWF0IGVhY2ggbm9uLWVtcHR5IGxpbmUgb2YgdGhlIGZpbGUgYXMgdGhlIGRhdGEgZm9yIGFuIDxiPi0taW5jbHVkZTwvYj4KK29wdGlvbi4gV2hhdCBjb25zdGl0dXRlcyBhIG5ld2xpbmUgZm9yIHRoaXMgcHVycG9zZSBpcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzCitkZWZhdWx0LiBUaGUgPGI+LS1uZXdsaW5lPC9iPiBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGlzIG9wdGlvbi4gVGhpcyBvcHRpb24KK21heSBiZSBnaXZlbiBhbnkgbnVtYmVyIG9mIHRpbWVzOyBhbGwgdGhlIGZpbGVzIGFyZSByZWFkLgorPC9QPgorPFA+Cis8Yj4tLWluY2x1ZGUtZGlyPC9iPj08aT5wYXR0ZXJuPC9pPgorSWYgYW55IDxiPi0taW5jbHVkZS1kaXI8L2I+IHBhdHRlcm5zIGFyZSBzcGVjaWZpZWQsIHRoZSBvbmx5IGRpcmVjdG9yaWVzIHRoYXQKK2FyZSBwcm9jZXNzZWQgYXJlIHRob3NlIHRoYXQgbWF0Y2ggb25lIG9mIHRoZSBwYXR0ZXJucyAoYW5kIGRvIG5vdCBtYXRjaCBhbgorPGI+LS1leGNsdWRlLWRpcjwvYj4gcGF0dGVybikuIFRoaXMgYXBwbGllcyB0byBhbGwgZGlyZWN0b3JpZXMsIHdoZXRoZXIgbGlzdGVkCitvbiB0aGUgY29tbWFuZCBsaW5lLCBvYnRhaW5lZCBmcm9tIDxiPi0tZmlsZS1saXN0PC9iPiwgb3IgYnkgc2Nhbm5pbmcgYSBwYXJlbnQKK2RpcmVjdG9yeS4gVGhlIHBhdHRlcm4gaXMgYSBQQ1JFMiByZWd1bGFyIGV4cHJlc3Npb24sIGFuZCBpcyBtYXRjaGVkIGFnYWluc3QKK3RoZSBmaW5hbCBjb21wb25lbnQgb2YgdGhlIGRpcmVjdG9yeSBuYW1lLCBub3QgdGhlIGVudGlyZSBwYXRoLiBUaGUgPGI+LUY8L2I+LAorPGI+LXc8L2I+LCBhbmQgPGI+LXg8L2I+IG9wdGlvbnMgZG8gbm90IGFwcGx5IHRvIHRoaXMgcGF0dGVybi4gVGhlIG9wdGlvbiBtYXkgYmUKK2dpdmVuIGFueSBudW1iZXIgb2YgdGltZXMuIElmIGEgZGlyZWN0b3J5IG1hdGNoZXMgYm90aCA8Yj4tLWluY2x1ZGUtZGlyPC9iPiBhbmQKKzxiPi0tZXhjbHVkZS1kaXI8L2I+LCBpdCBpcyBleGNsdWRlZC4gVGhlcmUgaXMgbm8gc2hvcnQgZm9ybSBmb3IgdGhpcyBvcHRpb24uCis8L1A+Cis8UD4KKzxiPi1MPC9iPiwgPGI+LS1maWxlcy13aXRob3V0LW1hdGNoPC9iPgorSW5zdGVhZCBvZiBvdXRwdXR0aW5nIGxpbmVzIGZyb20gdGhlIGZpbGVzLCBqdXN0IG91dHB1dCB0aGUgbmFtZXMgb2YgdGhlIGZpbGVzCit0aGF0IGRvIG5vdCBjb250YWluIGFueSBsaW5lcyB0aGF0IHdvdWxkIGhhdmUgYmVlbiBvdXRwdXQuIEVhY2ggZmlsZSBuYW1lIGlzCitvdXRwdXQgb25jZSwgb24gYSBzZXBhcmF0ZSBsaW5lLgorPC9QPgorPFA+Cis8Yj4tbDwvYj4sIDxiPi0tZmlsZXMtd2l0aC1tYXRjaGVzPC9iPgorSW5zdGVhZCBvZiBvdXRwdXR0aW5nIGxpbmVzIGZyb20gdGhlIGZpbGVzLCBqdXN0IG91dHB1dCB0aGUgbmFtZXMgb2YgdGhlIGZpbGVzCitjb250YWluaW5nIGxpbmVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIG91dHB1dC4gRWFjaCBmaWxlIG5hbWUgaXMgb3V0cHV0CitvbmNlLCBvbiBhIHNlcGFyYXRlIGxpbmUuIFNlYXJjaGluZyBub3JtYWxseSBzdG9wcyBhcyBzb29uIGFzIGEgbWF0Y2hpbmcgbGluZQoraXMgZm91bmQgaW4gYSBmaWxlLiBIb3dldmVyLCBpZiB0aGUgPGI+LWM8L2I+IChjb3VudCkgb3B0aW9uIGlzIGFsc28gdXNlZCwKK21hdGNoaW5nIGNvbnRpbnVlcyBpbiBvcmRlciB0byBvYnRhaW4gdGhlIGNvcnJlY3QgY291bnQsIGFuZCB0aG9zZSBmaWxlcyB0aGF0CitoYXZlIGF0IGxlYXN0IG9uZSBtYXRjaCBhcmUgbGlzdGVkIGFsb25nIHdpdGggdGhlaXIgY291bnRzLiBVc2luZyB0aGlzIG9wdGlvbgord2l0aCA8Yj4tYzwvYj4gaXMgYSB3YXkgb2Ygc3VwcHJlc3NpbmcgdGhlIGxpc3Rpbmcgb2YgZmlsZXMgd2l0aCBubyBtYXRjaGVzLgorPC9QPgorPFA+Cis8Yj4tLWxhYmVsPC9iPj08aT5uYW1lPC9pPgorVGhpcyBvcHRpb24gc3VwcGxpZXMgYSBuYW1lIHRvIGJlIHVzZWQgZm9yIHRoZSBzdGFuZGFyZCBpbnB1dCB3aGVuIGZpbGUgbmFtZXMKK2FyZSBiZWluZyBvdXRwdXQuIElmIG5vdCBzdXBwbGllZCwgIihzdGFuZGFyZCBpbnB1dCkiIGlzIHVzZWQuIFRoZXJlIGlzIG5vCitzaG9ydCBmb3JtIGZvciB0aGlzIG9wdGlvbi4KKzwvUD4KKzxQPgorPGI+LS1saW5lLWJ1ZmZlcmVkPC9iPgorV2hlbiB0aGlzIG9wdGlvbiBpcyBnaXZlbiwgaW5wdXQgaXMgcmVhZCBhbmQgcHJvY2Vzc2VkIGxpbmUgYnkgbGluZSwgYW5kIHRoZQorb3V0cHV0IGlzIGZsdXNoZWQgYWZ0ZXIgZWFjaCB3cml0ZS4gQnkgZGVmYXVsdCwgaW5wdXQgaXMgcmVhZCBpbiBsYXJnZSBjaHVua3MsCit1bmxlc3MgPGI+cGNyZTJncmVwPC9iPiBjYW4gZGV0ZXJtaW5lIHRoYXQgaXQgaXMgcmVhZGluZyBmcm9tIGEgdGVybWluYWwgKHdoaWNoCitpcyBjdXJyZW50bHkgcG9zc2libGUgb25seSBpbiBVbml4LWxpa2UgZW52aXJvbm1lbnRzKS4gT3V0cHV0IHRvIHRlcm1pbmFsIGlzCitub3JtYWxseSBhdXRvbWF0aWNhbGx5IGZsdXNoZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFRoaXMgb3B0aW9uIGNhbiBiZQordXNlZnVsIHdoZW4gdGhlIGlucHV0IG9yIG91dHB1dCBpcyBhdHRhY2hlZCB0byBhIHBpcGUgYW5kIHlvdSBkbyBub3Qgd2FudAorPGI+cGNyZTJncmVwPC9iPiB0byBidWZmZXIgdXAgbGFyZ2UgYW1vdW50cyBvZiBkYXRhLiBIb3dldmVyLCBpdHMgdXNlIHdpbGwKK2FmZmVjdCBwZXJmb3JtYW5jZSwgYW5kIHRoZSA8Yj4tTTwvYj4gKG11bHRpbGluZSkgb3B0aW9uIGNlYXNlcyB0byB3b3JrLgorPC9QPgorPFA+Cis8Yj4tLWxpbmUtb2Zmc2V0czwvYj4KK0luc3RlYWQgb2Ygc2hvd2luZyBsaW5lcyBvciBwYXJ0cyBvZiBsaW5lcyB0aGF0IG1hdGNoLCBzaG93IGVhY2ggbWF0Y2ggYXMgYQorbGluZSBudW1iZXIsIHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGxpbmUsIGFuZCBhIGxlbmd0aC4gVGhlIGxpbmUKK251bWJlciBpcyB0ZXJtaW5hdGVkIGJ5IGEgY29sb24gKGFzIHVzdWFsOyBzZWUgdGhlIDxiPi1uPC9iPiBvcHRpb24pLCBhbmQgdGhlCitvZmZzZXQgYW5kIGxlbmd0aCBhcmUgc2VwYXJhdGVkIGJ5IGEgY29tbWEuIEluIHRoaXMgbW9kZSwgbm8gY29udGV4dCBpcyBzaG93bi4KK1RoYXQgaXMsIHRoZSA8Yj4tQTwvYj4sIDxiPi1CPC9iPiwgYW5kIDxiPi1DPC9iPiBvcHRpb25zIGFyZSBpZ25vcmVkLiBJZiB0aGVyZSBpcworbW9yZSB0aGFuIG9uZSBtYXRjaCBpbiBhIGxpbmUsIGVhY2ggb2YgdGhlbSBpcyBzaG93biBzZXBhcmF0ZWx5LiBUaGlzIG9wdGlvbiBpcworbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggPGI+LS1maWxlLW9mZnNldHM8L2I+IGFuZCA8Yj4tLW9ubHktbWF0Y2hpbmc8L2I+LgorPC9QPgorPFA+Cis8Yj4tLWxvY2FsZTwvYj49PGk+bG9jYWxlLW5hbWU8L2k+CitUaGlzIG9wdGlvbiBzcGVjaWZpZXMgYSBsb2NhbGUgdG8gYmUgdXNlZCBmb3IgcGF0dGVybiBtYXRjaGluZy4gSXQgb3ZlcnJpZGVzCit0aGUgdmFsdWUgaW4gdGhlIDxiPkxDX0FMTDwvYj4gb3IgPGI+TENfQ1RZUEU8L2I+IGVudmlyb25tZW50IHZhcmlhYmxlcy4gSWYgbm8KK2xvY2FsZSBpcyBzcGVjaWZpZWQsIHRoZSBQQ1JFMiBsaWJyYXJ5J3MgZGVmYXVsdCAodXN1YWxseSB0aGUgIkMiIGxvY2FsZSkgaXMKK3VzZWQuIFRoZXJlIGlzIG5vIHNob3J0IGZvcm0gZm9yIHRoaXMgb3B0aW9uLgorPC9QPgorPFA+Cis8Yj4tLW1hdGNoLWxpbWl0PC9iPj08aT5udW1iZXI8L2k+CitQcm9jZXNzaW5nIHNvbWUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5zIGNhbiByZXF1aXJlIGEgdmVyeSBsYXJnZSBhbW91bnQgb2YKK21lbW9yeSwgbGVhZGluZyBpbiBzb21lIGNhc2VzIHRvIGEgcHJvZ3JhbSBjcmFzaCBpZiBub3QgZW5vdWdoIGlzIGF2YWlsYWJsZS4KK090aGVyIHBhdHRlcm5zIG1heSB0YWtlIGEgdmVyeSBsb25nIHRpbWUgdG8gc2VhcmNoIGZvciBhbGwgcG9zc2libGUgbWF0Y2hpbmcKK3N0cmluZ3MuIFRoZSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBieSA8Yj5wY3JlMmdyZXA8L2I+IHRvCitkbyB0aGUgbWF0Y2hpbmcgaGFzIHR3byBwYXJhbWV0ZXJzIHRoYXQgY2FuIGxpbWl0IHRoZSByZXNvdXJjZXMgdGhhdCBpdCB1c2VzLgorPGJyPgorPGJyPgorVGhlIDxiPi0tbWF0Y2gtbGltaXQ8L2I+IG9wdGlvbiBwcm92aWRlcyBhIG1lYW5zIG9mIGxpbWl0aW5nIHJlc291cmNlIHVzYWdlCit3aGVuIHByb2Nlc3NpbmcgcGF0dGVybnMgdGhhdCBhcmUgbm90IGdvaW5nIHRvIG1hdGNoLCBidXQgd2hpY2ggaGF2ZSBhIHZlcnkKK2xhcmdlIG51bWJlciBvZiBwb3NzaWJpbGl0aWVzIGluIHRoZWlyIHNlYXJjaCB0cmVlcy4gVGhlIGNsYXNzaWMgZXhhbXBsZSBpcyBhCitwYXR0ZXJuIHRoYXQgdXNlcyBuZXN0ZWQgdW5saW1pdGVkIHJlcGVhdHMuIEludGVybmFsbHksIFBDUkUyIHVzZXMgYSBmdW5jdGlvbgorY2FsbGVkIDxiPm1hdGNoKCk8L2I+IHdoaWNoIGl0IGNhbGxzIHJlcGVhdGVkbHkgKHNvbWV0aW1lcyByZWN1cnNpdmVseSkuIFRoZQorbGltaXQgc2V0IGJ5IDxiPi0tbWF0Y2gtbGltaXQ8L2I+IGlzIGltcG9zZWQgb24gdGhlIG51bWJlciBvZiB0aW1lcyB0aGlzCitmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGEgbWF0Y2gsIHdoaWNoIGhhcyB0aGUgZWZmZWN0IG9mIGxpbWl0aW5nIHRoZSBhbW91bnQKK29mIGJhY2t0cmFja2luZyB0aGF0IGNhbiB0YWtlIHBsYWNlLgorPGJyPgorPGJyPgorVGhlIDxiPi0tcmVjdXJzaW9uLWxpbWl0PC9iPiBvcHRpb24gaXMgc2ltaWxhciB0byA8Yj4tLW1hdGNoLWxpbWl0PC9iPiwgYnV0CitpbnN0ZWFkIG9mIGxpbWl0aW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgdGltZXMgdGhhdCA8Yj5tYXRjaCgpPC9iPiBpcyBjYWxsZWQsIGl0CitsaW1pdHMgdGhlIGRlcHRoIG9mIHJlY3Vyc2l2ZSBjYWxscywgd2hpY2ggaW4gdHVybiBsaW1pdHMgdGhlIGFtb3VudCBvZiBtZW1vcnkKK3RoYXQgY2FuIGJlIHVzZWQuIFRoZSByZWN1cnNpb24gZGVwdGggaXMgYSBzbWFsbGVyIG51bWJlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIKK29mIGNhbGxzLCBiZWNhdXNlIG5vdCBhbGwgY2FsbHMgdG8gPGI+bWF0Y2goKTwvYj4gYXJlIHJlY3Vyc2l2ZS4gVGhpcyBsaW1pdCBpcworb2YgdXNlIG9ubHkgaWYgaXQgaXMgc2V0IHNtYWxsZXIgdGhhbiA8Yj4tLW1hdGNoLWxpbWl0PC9iPi4KKzxicj4KKzxicj4KK1RoZXJlIGFyZSBubyBzaG9ydCBmb3JtcyBmb3IgdGhlc2Ugb3B0aW9ucy4gVGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIHNwZWNpZmllZAord2hlbiB0aGUgUENSRTIgbGlicmFyeSBpcyBjb21waWxlZCwgd2l0aCB0aGUgZGVmYXVsdCBkZWZhdWx0IGJlaW5nIDEwIG1pbGxpb24uCis8L1A+Cis8UD4KKzxiPi1NPC9iPiwgPGI+LS1tdWx0aWxpbmU8L2I+CitBbGxvdyBwYXR0ZXJucyB0byBtYXRjaCBtb3JlIHRoYW4gb25lIGxpbmUuIFdoZW4gdGhpcyBvcHRpb24gaXMgZ2l2ZW4sIHBhdHRlcm5zCittYXkgdXNlZnVsbHkgY29udGFpbiBsaXRlcmFsIG5ld2xpbmUgY2hhcmFjdGVycyBhbmQgaW50ZXJuYWwgb2NjdXJyZW5jZXMgb2YgXgorYW5kICQgY2hhcmFjdGVycy4gVGhlIG91dHB1dCBmb3IgYSBzdWNjZXNzZnVsIG1hdGNoIG1heSBjb25zaXN0IG9mIG1vcmUgdGhhbgorb25lIGxpbmUuIFRoZSBmaXJzdCBpcyB0aGUgbGluZSBpbiB3aGljaCB0aGUgbWF0Y2ggc3RhcnRlZCwgYW5kIHRoZSBsYXN0IGlzIHRoZQorbGluZSBpbiB3aGljaCB0aGUgbWF0Y2ggZW5kZWQuIElmIHRoZSBtYXRjaGVkIHN0cmluZyBlbmRzIHdpdGggYSBuZXdsaW5lCitzZXF1ZW5jZSB0aGUgb3V0cHV0IGVuZHMgYXQgdGhlIGVuZCBvZiB0aGF0IGxpbmUuCis8YnI+Cis8YnI+CitXaGVuIHRoaXMgb3B0aW9uIGlzIHNldCwgdGhlIFBDUkUyIGxpYnJhcnkgaXMgY2FsbGVkIGluICJtdWx0aWxpbmUiIG1vZGUuCitIb3dldmVyLCA8Yj5wY3JlMmdyZXA8L2I+IHN0aWxsIHByb2Nlc3NlcyB0aGUgaW5wdXQgbGluZSBieSBsaW5lLiBUaGUgZGlmZmVyZW5jZQoraXMgdGhhdCBhIG1hdGNoZWQgc3RyaW5nIG1heSBleHRlbmQgcGFzdCB0aGUgZW5kIG9mIGEgbGluZSBhbmQgY29udGludWUgb24KK29uZSBvciBtb3JlIHN1YnNlcXVlbnQgbGluZXMuIFRoZSBuZXdsaW5lIHNlcXVlbmNlIG11c3QgYmUgbWF0Y2hlZCBhcyBwYXJ0IG9mCit0aGUgcGF0dGVybi4gRm9yIGV4YW1wbGUsIHRvIGZpbmQgdGhlIHBocmFzZSAicmVndWxhciBleHByZXNzaW9uIiBpbiBhIGZpbGUKK3doZXJlICJyZWd1bGFyIiBtaWdodCBiZSBhdCB0aGUgZW5kIG9mIGEgbGluZSBhbmQgImV4cHJlc3Npb24iIGF0IHRoZSBzdGFydCBvZgordGhlIG5leHQgbGluZSwgeW91IGNvdWxkIHVzZSB0aGlzIGNvbW1hbmQ6Cis8cHJlPgorICBwY3JlMmdyZXAgLU0gJ3JlZ3VsYXJccytleHByZXNzaW9uJyAmIzYwO2ZpbGUmIzYyOworPC9wcmU+CitUaGUgXHMgZXNjYXBlIHNlcXVlbmNlIG1hdGNoZXMgYW55IHdoaXRlIHNwYWNlIGNoYXJhY3RlciwgaW5jbHVkaW5nIG5ld2xpbmVzLAorYW5kIGlzIGZvbGxvd2VkIGJ5ICsgc28gYXMgdG8gbWF0Y2ggdHJhaWxpbmcgd2hpdGUgc3BhY2Ugb24gdGhlIGZpcnN0IGxpbmUgYXMKK3dlbGwgYXMgcG9zc2libHkgaGFuZGxpbmcgYSB0d28tY2hhcmFjdGVyIG5ld2xpbmUgc2VxdWVuY2UuCis8YnI+Cis8YnI+CitUaGVyZSBpcyBhIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgbGluZXMgdGhhdCBjYW4gYmUgbWF0Y2hlZCwgaW1wb3NlZCBieSB0aGUgd2F5Cit0aGF0IDxiPnBjcmUyZ3JlcDwvYj4gYnVmZmVycyB0aGUgaW5wdXQgZmlsZSBhcyBpdCBzY2FucyBpdC4gSG93ZXZlciwKKzxiPnBjcmUyZ3JlcDwvYj4gZW5zdXJlcyB0aGF0IGF0IGxlYXN0IDhLIGNoYXJhY3RlcnMgb3IgdGhlIHJlc3Qgb2YgdGhlIGZpbGUKKyh3aGljaGV2ZXIgaXMgdGhlIHNob3J0ZXIpIGFyZSBhdmFpbGFibGUgZm9yIGZvcndhcmQgbWF0Y2hpbmcsIGFuZCBzaW1pbGFybHkKK3RoZSBwcmV2aW91cyA4SyBjaGFyYWN0ZXJzIChvciBhbGwgdGhlIHByZXZpb3VzIGNoYXJhY3RlcnMsIGlmIGZld2VyIHRoYW4gOEspCithcmUgZ3VhcmFudGVlZCB0byBiZSBhdmFpbGFibGUgZm9yIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucy4gVGhlIDxiPi1NPC9iPiBvcHRpb24KK2RvZXMgbm90IHdvcmsgd2hlbiBpbnB1dCBpcyByZWFkIGxpbmUgYnkgbGluZSAoc2VlIFxmUC0tbGluZS1idWZmZXJlZFxmUC4pCis8L1A+Cis8UD4KKzxiPi1OPC9iPiA8aT5uZXdsaW5lLXR5cGU8L2k+LCA8Yj4tLW5ld2xpbmU8L2I+PTxpPm5ld2xpbmUtdHlwZTwvaT4KK1RoZSBQQ1JFMiBsaWJyYXJ5IHN1cHBvcnRzIGZpdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIGZvciBpbmRpY2F0aW5nCit0aGUgZW5kcyBvZiBsaW5lcy4gVGhleSBhcmUgdGhlIHNpbmdsZS1jaGFyYWN0ZXIgc2VxdWVuY2VzIENSIChjYXJyaWFnZSByZXR1cm4pCithbmQgTEYgKGxpbmVmZWVkKSwgdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiwgYW4gImFueWNybGYiIGNvbnZlbnRpb24sCit3aGljaCByZWNvZ25pemVzIGFueSBvZiB0aGUgcHJlY2VkaW5nIHRocmVlIHR5cGVzLCBhbmQgYW4gImFueSIgY29udmVudGlvbiwgaW4KK3doaWNoIGFueSBVbmljb2RlIGxpbmUgZW5kaW5nIHNlcXVlbmNlIGlzIGFzc3VtZWQgdG8gZW5kIGEgbGluZS4gVGhlIFVuaWNvZGUKK3NlcXVlbmNlcyBhcmUgdGhlIHRocmVlIGp1c3QgbWVudGlvbmVkLCBwbHVzIFZUICh2ZXJ0aWNhbCB0YWIsIFUrMDAwQiksIEZGCisoZm9ybSBmZWVkLCBVKzAwMEMpLCBORUwgKG5leHQgbGluZSwgVSswMDg1KSwgTFMgKGxpbmUgc2VwYXJhdG9yLCBVKzIwMjgpLCBhbmQKK1BTIChwYXJhZ3JhcGggc2VwYXJhdG9yLCBVKzIwMjkpLgorPGJyPgorPGJyPgorV2hlbiB0aGUgUENSRTIgbGlicmFyeSBpcyBidWlsdCwgYSBkZWZhdWx0IGxpbmUtZW5kaW5nIHNlcXVlbmNlIGlzIHNwZWNpZmllZC4KK1RoaXMgaXMgbm9ybWFsbHkgdGhlIHN0YW5kYXJkIHNlcXVlbmNlIGZvciB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gVW5sZXNzCitvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRoaXMgb3B0aW9uLCA8Yj5wY3JlMmdyZXA8L2I+IHVzZXMgdGhlIGxpYnJhcnkncyBkZWZhdWx0LgorVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhpcyBvcHRpb24gYXJlIENSLCBMRiwgQ1JMRiwgQU5ZQ1JMRiwgb3IgQU5ZLiBUaGlzCittYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgPGI+cGNyZTJncmVwPC9iPiB0byBzY2FuIGZpbGVzIHRoYXQgaGF2ZSBjb21lIGZyb20KK290aGVyIGVudmlyb25tZW50cyB3aXRob3V0IGhhdmluZyB0byBtb2RpZnkgdGhlaXIgbGluZSBlbmRpbmdzLiBJZiB0aGUgZGF0YQordGhhdCBpcyBiZWluZyBzY2FubmVkIGRvZXMgbm90IGFncmVlIHdpdGggdGhlIGNvbnZlbnRpb24gc2V0IGJ5IHRoaXMgb3B0aW9uLAorPGI+cGNyZTJncmVwPC9iPiBtYXkgYmVoYXZlIGluIHN0cmFuZ2Ugd2F5cy4gTm90ZSB0aGF0IHRoaXMgb3B0aW9uIGRvZXMgbm90CithcHBseSB0byBmaWxlcyBzcGVjaWZpZWQgYnkgdGhlIDxiPi1mPC9iPiwgPGI+LS1leGNsdWRlLWZyb208L2I+LCBvcgorPGI+LS1pbmNsdWRlLWZyb208L2I+IG9wdGlvbnMsIHdoaWNoIGFyZSBleHBlY3RlZCB0byB1c2UgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncworc3RhbmRhcmQgbmV3bGluZSBzZXF1ZW5jZS4KKzwvUD4KKzxQPgorPGI+LW48L2I+LCA8Yj4tLWxpbmUtbnVtYmVyPC9iPgorUHJlY2VkZSBlYWNoIG91dHB1dCBsaW5lIGJ5IGl0cyBsaW5lIG51bWJlciBpbiB0aGUgZmlsZSwgZm9sbG93ZWQgYnkgYSBjb2xvbgorZm9yIG1hdGNoaW5nIGxpbmVzIG9yIGEgaHlwaGVuIGZvciBjb250ZXh0IGxpbmVzLiBJZiB0aGUgZmlsZSBuYW1lIGlzIGFsc28KK2JlaW5nIG91dHB1dCwgaXQgcHJlY2VkZXMgdGhlIGxpbmUgbnVtYmVyLiBXaGVuIHRoZSA8Yj4tTTwvYj4gb3B0aW9uIGNhdXNlcyBhCitwYXR0ZXJuIHRvIG1hdGNoIG1vcmUgdGhhbiBvbmUgbGluZSwgb25seSB0aGUgZmlyc3QgaXMgcHJlY2VkZWQgYnkgaXRzIGxpbmUKK251bWJlci4gVGhpcyBvcHRpb24gaXMgZm9yY2VkIGlmIDxiPi0tbGluZS1vZmZzZXRzPC9iPiBpcyB1c2VkLgorPC9QPgorPFA+Cis8Yj4tLW5vLWppdDwvYj4KK0lmIHRoZSBQQ1JFMiBsaWJyYXJ5IGlzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IganVzdC1pbi10aW1lIGNvbXBpbGluZyAod2hpY2gKK3NwZWVkcyB1cCBtYXRjaGluZyksIDxiPnBjcmUyZ3JlcDwvYj4gYXV0b21hdGljYWxseSBtYWtlcyB1c2Ugb2YgdGhpcywgdW5sZXNzIGl0Cit3YXMgZXhwbGljaXRseSBkaXNhYmxlZCBhdCBidWlsZCB0aW1lLiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBkaXNhYmxlIHRoZQordXNlIG9mIEpJVCBhdCBydW4gdGltZS4gSXQgaXMgcHJvdmlkZWQgZm9yIHRlc3RpbmcgYW5kIHdvcmtpbmcgcm91bmQgcHJvYmxlbXMuCitJdCBzaG91bGQgbmV2ZXIgYmUgbmVlZGVkIGluIG5vcm1hbCB1c2UuCis8L1A+Cis8UD4KKzxiPi1vPC9iPiwgPGI+LS1vbmx5LW1hdGNoaW5nPC9iPgorU2hvdyBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBsaW5lIHRoYXQgbWF0Y2hlZCBhIHBhdHRlcm4gaW5zdGVhZCBvZiB0aGUgd2hvbGUKK2xpbmUuIEluIHRoaXMgbW9kZSwgbm8gY29udGV4dCBpcyBzaG93bi4gVGhhdCBpcywgdGhlIDxiPi1BPC9iPiwgPGI+LUI8L2I+LCBhbmQKKzxiPi1DPC9iPiBvcHRpb25zIGFyZSBpZ25vcmVkLiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIG1hdGNoIGluIGEgbGluZSwgZWFjaAorb2YgdGhlbSBpcyBzaG93biBzZXBhcmF0ZWx5LiBJZiA8Yj4tbzwvYj4gaXMgY29tYmluZWQgd2l0aCA8Yj4tdjwvYj4gKGludmVydCB0aGUKK3NlbnNlIG9mIHRoZSBtYXRjaCB0byBmaW5kIG5vbi1tYXRjaGluZyBsaW5lcyksIG5vIG91dHB1dCBpcyBnZW5lcmF0ZWQsIGJ1dCB0aGUKK3JldHVybiBjb2RlIGlzIHNldCBhcHByb3ByaWF0ZWx5LiBJZiB0aGUgbWF0Y2hlZCBwb3J0aW9uIG9mIHRoZSBsaW5lIGlzIGVtcHR5LAorbm90aGluZyBpcyBvdXRwdXQgdW5sZXNzIHRoZSBmaWxlIG5hbWUgb3IgbGluZSBudW1iZXIgYXJlIGJlaW5nIHByaW50ZWQsIGluCit3aGljaCBjYXNlIHRoZXkgYXJlIHNob3duIG9uIGFuIG90aGVyd2lzZSBlbXB0eSBsaW5lLiBUaGlzIG9wdGlvbiBpcyBtdXR1YWxseQorZXhjbHVzaXZlIHdpdGggPGI+LS1maWxlLW9mZnNldHM8L2I+IGFuZCA8Yj4tLWxpbmUtb2Zmc2V0czwvYj4uCis8L1A+Cis8UD4KKzxiPi1vPC9iPjxpPm51bWJlcjwvaT4sIDxiPi0tb25seS1tYXRjaGluZzwvYj49PGk+bnVtYmVyPC9pPgorU2hvdyBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBsaW5lIHRoYXQgbWF0Y2hlZCB0aGUgY2FwdHVyaW5nIHBhcmVudGhlc2VzIG9mIHRoZQorZ2l2ZW4gbnVtYmVyLiBVcCB0byAzMiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgYXJlIHN1cHBvcnRlZCwgYW5kIC1vMCBpcworZXF1aXZhbGVudCB0byA8Yj4tbzwvYj4gd2l0aG91dCBhIG51bWJlci4gQmVjYXVzZSB0aGVzZSBvcHRpb25zIGNhbiBiZSBnaXZlbgord2l0aG91dCBhbiBhcmd1bWVudCAoc2VlIGFib3ZlKSwgaWYgYW4gYXJndW1lbnQgaXMgcHJlc2VudCwgaXQgbXVzdCBiZSBnaXZlbiBpbgordGhlIHNhbWUgc2hlbGwgaXRlbSwgZm9yIGV4YW1wbGUsIC1vMyBvciAtLW9ubHktbWF0Y2hpbmc9Mi4gVGhlIGNvbW1lbnRzIGdpdmVuCitmb3IgdGhlIG5vbi1hcmd1bWVudCBjYXNlIGFib3ZlIGFsc28gYXBwbHkgdG8gdGhpcyBjYXNlLiBJZiB0aGUgc3BlY2lmaWVkCitjYXB0dXJpbmcgcGFyZW50aGVzZXMgZG8gbm90IGV4aXN0IGluIHRoZSBwYXR0ZXJuLCBvciB3ZXJlIG5vdCBzZXQgaW4gdGhlCittYXRjaCwgbm90aGluZyBpcyBvdXRwdXQgdW5sZXNzIHRoZSBmaWxlIG5hbWUgb3IgbGluZSBudW1iZXIgYXJlIGJlaW5nIG91dHB1dC4KKzxicj4KKzxicj4KK0lmIHRoaXMgb3B0aW9uIGlzIGdpdmVuIG11bHRpcGxlIHRpbWVzLCBtdWx0aXBsZSBzdWJzdHJpbmdzIGFyZSBvdXRwdXQsIGluIHRoZQorb3JkZXIgdGhlIG9wdGlvbnMgYXJlIGdpdmVuLiBGb3IgZXhhbXBsZSwgLW8zIC1vMSAtbzMgY2F1c2VzIHRoZSBzdWJzdHJpbmdzCittYXRjaGVkIGJ5IGNhcHR1cmluZyBwYXJlbnRoZXNlcyAzIGFuZCAxIGFuZCB0aGVuIDMgYWdhaW4gdG8gYmUgb3V0cHV0LiBCeQorZGVmYXVsdCwgdGhlcmUgaXMgbm8gc2VwYXJhdG9yIChidXQgc2VlIHRoZSBuZXh0IG9wdGlvbikuCis8L1A+Cis8UD4KKzxiPi0tb20tc2VwYXJhdG9yPC9iPj08aT50ZXh0PC9pPgorU3BlY2lmeSBhIHNlcGFyYXRpbmcgc3RyaW5nIGZvciBtdWx0aXBsZSBvY2N1cnJlbmNlcyBvZiA8Yj4tbzwvYj4uIFRoZSBkZWZhdWx0CitpcyBhbiBlbXB0eSBzdHJpbmcuIFNlcGFyYXRpbmcgc3RyaW5ncyBhcmUgbmV2ZXIgY29sb3VyZWQuCis8L1A+Cis8UD4KKzxiPi1xPC9iPiwgPGI+LS1xdWlldDwvYj4KK1dvcmsgcXVpZXRseSwgdGhhdCBpcywgZGlzcGxheSBub3RoaW5nIGV4Y2VwdCBlcnJvciBtZXNzYWdlcy4gVGhlIGV4aXQKK3N0YXR1cyBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYW55IG1hdGNoZXMgd2VyZSBmb3VuZC4KKzwvUD4KKzxQPgorPGI+LXI8L2I+LCA8Yj4tLXJlY3Vyc2l2ZTwvYj4KK0lmIGFueSBnaXZlbiBwYXRoIGlzIGEgZGlyZWN0b3J5LCByZWN1cnNpdmVseSBzY2FuIHRoZSBmaWxlcyBpdCBjb250YWlucywKK3Rha2luZyBub3RlIG9mIGFueSA8Yj4tLWluY2x1ZGU8L2I+IGFuZCA8Yj4tLWV4Y2x1ZGU8L2I+IHNldHRpbmdzLiBCeSBkZWZhdWx0LCBhCitkaXJlY3RvcnkgaXMgcmVhZCBhcyBhIG5vcm1hbCBmaWxlOyBpbiBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIHRoaXMgZ2l2ZXMgYW4KK2ltbWVkaWF0ZSBlbmQtb2YtZmlsZS4gVGhpcyBvcHRpb24gaXMgYSBzaG9ydGhhbmQgZm9yIHNldHRpbmcgdGhlIDxiPi1kPC9iPgorb3B0aW9uIHRvICJyZWN1cnNlIi4KKzwvUD4KKzxQPgorPGI+LS1yZWN1cnNpb24tbGltaXQ8L2I+PTxpPm51bWJlcjwvaT4KK1NlZSA8Yj4tLW1hdGNoLWxpbWl0PC9iPiBhYm92ZS4KKzwvUD4KKzxQPgorPGI+LXM8L2I+LCA8Yj4tLW5vLW1lc3NhZ2VzPC9iPgorU3VwcHJlc3MgZXJyb3IgbWVzc2FnZXMgYWJvdXQgbm9uLWV4aXN0ZW50IG9yIHVucmVhZGFibGUgZmlsZXMuIFN1Y2ggZmlsZXMgYXJlCitxdWlldGx5IHNraXBwZWQuIEhvd2V2ZXIsIHRoZSByZXR1cm4gY29kZSBpcyBzdGlsbCAyLCBldmVuIGlmIG1hdGNoZXMgd2VyZQorZm91bmQgaW4gb3RoZXIgZmlsZXMuCis8L1A+Cis8UD4KKzxiPi11PC9iPiwgPGI+LS11dGYtODwvYj4KK09wZXJhdGUgaW4gVVRGLTggbW9kZS4gVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIG9ubHkgaWYgUENSRTIgaGFzIGJlZW4gY29tcGlsZWQKK3dpdGggVVRGLTggc3VwcG9ydC4gQWxsIHBhdHRlcm5zIChpbmNsdWRpbmcgdGhvc2UgZm9yIGFueSA8Yj4tLWV4Y2x1ZGU8L2I+IGFuZAorPGI+LS1pbmNsdWRlPC9iPiBvcHRpb25zKSBhbmQgYWxsIHN1YmplY3QgbGluZXMgdGhhdCBhcmUgc2Nhbm5lZCBtdXN0IGJlIHZhbGlkCitzdHJpbmdzIG9mIFVURi04IGNoYXJhY3RlcnMuCis8L1A+Cis8UD4KKzxiPi1WPC9iPiwgPGI+LS12ZXJzaW9uPC9iPgorV3JpdGUgdGhlIHZlcnNpb24gbnVtYmVycyBvZiA8Yj5wY3JlMmdyZXA8L2I+IGFuZCB0aGUgUENSRTIgbGlicmFyeSB0byB0aGUKK3N0YW5kYXJkIG91dHB1dCBhbmQgdGhlbiBleGl0LiBBbnl0aGluZyBlbHNlIG9uIHRoZSBjb21tYW5kIGxpbmUgaXMKK2lnbm9yZWQuCis8L1A+Cis8UD4KKzxiPi12PC9iPiwgPGI+LS1pbnZlcnQtbWF0Y2g8L2I+CitJbnZlcnQgdGhlIHNlbnNlIG9mIHRoZSBtYXRjaCwgc28gdGhhdCBsaW5lcyB3aGljaCBkbyA8aT5ub3Q8L2k+IG1hdGNoIGFueSBvZgordGhlIHBhdHRlcm5zIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBmb3VuZC4KKzwvUD4KKzxQPgorPGI+LXc8L2I+LCA8Yj4tLXdvcmQtcmVnZXg8L2I+LCA8Yj4tLXdvcmQtcmVnZXhwPC9iPgorRm9yY2UgdGhlIHBhdHRlcm5zIHRvIG1hdGNoIG9ubHkgd2hvbGUgd29yZHMuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBoYXZpbmcgXGIKK2F0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBwYXR0ZXJuLiBUaGlzIG9wdGlvbiBhcHBsaWVzIG9ubHkgdG8gdGhlIHBhdHRlcm5zCit0aGF0IGFyZSBtYXRjaGVkIGFnYWluc3QgdGhlIGNvbnRlbnRzIG9mIGZpbGVzOyBpdCBkb2VzIG5vdCBhcHBseSB0byBwYXR0ZXJucworc3BlY2lmaWVkIGJ5IGFueSBvZiB0aGUgPGI+LS1pbmNsdWRlPC9iPiBvciA8Yj4tLWV4Y2x1ZGU8L2I+IG9wdGlvbnMuCis8L1A+Cis8UD4KKzxiPi14PC9iPiwgPGI+LS1saW5lLXJlZ2V4PC9iPiwgPGI+LS1saW5lLXJlZ2V4cDwvYj4KK0ZvcmNlIHRoZSBwYXR0ZXJucyB0byBiZSBhbmNob3JlZCAoZWFjaCBtdXN0IHN0YXJ0IG1hdGNoaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YKK2EgbGluZSkgYW5kIGluIGFkZGl0aW9uLCByZXF1aXJlIHRoZW0gdG8gbWF0Y2ggZW50aXJlIGxpbmVzLiBUaGlzIGlzIGVxdWl2YWxlbnQKK3RvIGhhdmluZyBeIGFuZCAkIGNoYXJhY3RlcnMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgZWFjaCBhbHRlcm5hdGl2ZSB0b3AtbGV2ZWwKK2JyYW5jaCBpbiBldmVyeSBwYXR0ZXJuLiBUaGlzIG9wdGlvbiBhcHBsaWVzIG9ubHkgdG8gdGhlIHBhdHRlcm5zIHRoYXQgYXJlCittYXRjaGVkIGFnYWluc3QgdGhlIGNvbnRlbnRzIG9mIGZpbGVzOyBpdCBkb2VzIG5vdCBhcHBseSB0byBwYXR0ZXJucyBzcGVjaWZpZWQKK2J5IGFueSBvZiB0aGUgPGI+LS1pbmNsdWRlPC9iPiBvciA8Yj4tLWV4Y2x1ZGU8L2I+IG9wdGlvbnMuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNiIgaHJlZj0iI1RPQzEiPkVOVklST05NRU5UIFZBUklBQkxFUzwvYT48YnI+Cis8UD4KK1RoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgPGI+TENfQUxMPC9iPiBhbmQgPGI+TENfQ1RZUEU8L2I+IGFyZSBleGFtaW5lZCwgaW4gdGhhdAorb3JkZXIsIGZvciBhIGxvY2FsZS4gVGhlIGZpcnN0IG9uZSB0aGF0IGlzIHNldCBpcyB1c2VkLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuCitieSB0aGUgPGI+LS1sb2NhbGU8L2I+IG9wdGlvbi4gSWYgbm8gbG9jYWxlIGlzIHNldCwgdGhlIFBDUkUyIGxpYnJhcnkncyBkZWZhdWx0CisodXN1YWxseSB0aGUgIkMiIGxvY2FsZSkgaXMgdXNlZC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM3IiBocmVmPSIjVE9DMSI+TkVXTElORVM8L2E+PGJyPgorPFA+CitUaGUgPGI+LU48L2I+ICg8Yj4tLW5ld2xpbmU8L2I+KSBvcHRpb24gYWxsb3dzIDxiPnBjcmUyZ3JlcDwvYj4gdG8gc2NhbiBmaWxlcyB3aXRoCitkaWZmZXJlbnQgbmV3bGluZSBjb252ZW50aW9ucyBmcm9tIHRoZSBkZWZhdWx0LiBBbnkgcGFydHMgb2YgdGhlIGlucHV0IGZpbGVzCit0aGF0IGFyZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgYXJlIGNvcGllZCBpZGVudGljYWxseSwgd2l0aCB3aGF0ZXZlcgorbmV3bGluZSBzZXF1ZW5jZXMgdGhleSBoYXZlIGluIHRoZSBpbnB1dC4gSG93ZXZlciwgdGhlIHNldHRpbmcgb2YgdGhpcyBvcHRpb24KK2RvZXMgbm90IGFmZmVjdCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgZmlsZXMgc3BlY2lmaWVkIGJ5IHRoZSA8Yj4tZjwvYj4sCis8Yj4tLWV4Y2x1ZGUtZnJvbTwvYj4sIG9yIDxiPi0taW5jbHVkZS1mcm9tPC9iPiBvcHRpb25zLCB3aGljaCBhcmUgYXNzdW1lZCB0byB1c2UKK3RoZSBvcGVyYXRpbmcgc3lzdGVtJ3Mgc3RhbmRhcmQgbmV3bGluZSBzZXF1ZW5jZSwgbm9yIGRvZXMgaXQgYWZmZWN0IHRoZSB3YXkgaW4KK3doaWNoIDxiPnBjcmUyZ3JlcDwvYj4gd3JpdGVzIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdG8gdGhlIHN0YW5kYXJkIGVycm9yIGFuZAorb3V0cHV0IHN0cmVhbXMuIEZvciB0aGVzZSBpdCB1c2VzIHRoZSBzdHJpbmcgIlxuIiB0byBpbmRpY2F0ZSBuZXdsaW5lcywKK3JlbHlpbmcgb24gdGhlIEMgSS9PIGxpYnJhcnkgdG8gY29udmVydCB0aGlzIHRvIGFuIGFwcHJvcHJpYXRlIHNlcXVlbmNlLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzgiIGhyZWY9IiNUT0MxIj5PUFRJT05TIENPTVBBVElCSUxJVFk8L2E+PGJyPgorPFA+CitNYW55IG9mIHRoZSBzaG9ydCBhbmQgbG9uZyBmb3JtcyBvZiA8Yj5wY3JlMmdyZXA8L2I+J3Mgb3B0aW9ucyBhcmUgdGhlIHNhbWUKK2FzIGluIHRoZSBHTlUgPGI+Z3JlcDwvYj4gcHJvZ3JhbS4gQW55IGxvbmcgb3B0aW9uIG9mIHRoZSBmb3JtCis8Yj4tLXh4eC1yZWdleHA8L2I+IChHTlUgdGVybWlub2xvZ3kpIGlzIGFsc28gYXZhaWxhYmxlIGFzIDxiPi0teHh4LXJlZ2V4PC9iPgorKFBDUkUyIHRlcm1pbm9sb2d5KS4gSG93ZXZlciwgdGhlIDxiPi0tZmlsZS1saXN0PC9iPiwgPGI+LS1maWxlLW9mZnNldHM8L2I+LAorPGI+LS1pbmNsdWRlLWRpcjwvYj4sIDxiPi0tbGluZS1vZmZzZXRzPC9iPiwgPGI+LS1sb2NhbGU8L2I+LCA8Yj4tLW1hdGNoLWxpbWl0PC9iPiwKKzxiPi1NPC9iPiwgPGI+LS1tdWx0aWxpbmU8L2I+LCA8Yj4tTjwvYj4sIDxiPi0tbmV3bGluZTwvYj4sIDxiPi0tb20tc2VwYXJhdG9yPC9iPiwKKzxiPi0tcmVjdXJzaW9uLWxpbWl0PC9iPiwgPGI+LXU8L2I+LCBhbmQgPGI+LS11dGYtODwvYj4gb3B0aW9ucyBhcmUgc3BlY2lmaWMgdG8KKzxiPnBjcmUyZ3JlcDwvYj4sIGFzIGlzIHRoZSB1c2Ugb2YgdGhlIDxiPi0tb25seS1tYXRjaGluZzwvYj4gb3B0aW9uIHdpdGggYQorY2FwdHVyaW5nIHBhcmVudGhlc2VzIG51bWJlci4KKzwvUD4KKzxQPgorQWx0aG91Z2ggbW9zdCBvZiB0aGUgY29tbW9uIG9wdGlvbnMgd29yayB0aGUgc2FtZSB3YXksIGEgZmV3IGFyZSBkaWZmZXJlbnQgaW4KKzxiPnBjcmUyZ3JlcDwvYj4uIEZvciBleGFtcGxlLCB0aGUgPGI+LS1pbmNsdWRlPC9iPiBvcHRpb24ncyBhcmd1bWVudCBpcyBhIGdsb2IKK2ZvciBHTlUgPGI+Z3JlcDwvYj4sIGJ1dCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgPGI+cGNyZTJncmVwPC9iPi4gSWYgYm90aCB0aGUKKzxiPi1jPC9iPiBhbmQgPGI+LWw8L2I+IG9wdGlvbnMgYXJlIGdpdmVuLCBHTlUgZ3JlcCBsaXN0cyBvbmx5IGZpbGUgbmFtZXMsCit3aXRob3V0IGNvdW50cywgYnV0IDxiPnBjcmUyZ3JlcDwvYj4gZ2l2ZXMgdGhlIGNvdW50cyBhcyB3ZWxsLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzkiIGhyZWY9IiNUT0MxIj5PUFRJT05TIFdJVEggREFUQTwvYT48YnI+Cis8UD4KK1RoZXJlIGFyZSBmb3VyIGRpZmZlcmVudCB3YXlzIGluIHdoaWNoIGFuIG9wdGlvbiB3aXRoIGRhdGEgY2FuIGJlIHNwZWNpZmllZC4KK0lmIGEgc2hvcnQgZm9ybSBvcHRpb24gaXMgdXNlZCwgdGhlIGRhdGEgbWF5IGZvbGxvdyBpbW1lZGlhdGVseSwgb3IgKHdpdGggb25lCitleGNlcHRpb24pIGluIHRoZSBuZXh0IGNvbW1hbmQgbGluZSBpdGVtLiBGb3IgZXhhbXBsZToKKzxwcmU+CisgIC1mL3NvbWUvZmlsZQorICAtZiAvc29tZS9maWxlCis8L3ByZT4KK1RoZSBleGNlcHRpb24gaXMgdGhlIDxiPi1vPC9iPiBvcHRpb24sIHdoaWNoIG1heSBhcHBlYXIgd2l0aCBvciB3aXRob3V0IGRhdGEuCitCZWNhdXNlIG9mIHRoaXMsIGlmIGRhdGEgaXMgcHJlc2VudCwgaXQgbXVzdCBmb2xsb3cgaW1tZWRpYXRlbHkgaW4gdGhlIHNhbWUKK2l0ZW0sIGZvciBleGFtcGxlIC1vMy4KKzwvUD4KKzxQPgorSWYgYSBsb25nIGZvcm0gb3B0aW9uIGlzIHVzZWQsIHRoZSBkYXRhIG1heSBhcHBlYXIgaW4gdGhlIHNhbWUgY29tbWFuZCBsaW5lCitpdGVtLCBzZXBhcmF0ZWQgYnkgYW4gZXF1YWxzIGNoYXJhY3Rlciwgb3IgKHdpdGggdHdvIGV4Y2VwdGlvbnMpIGl0IG1heSBhcHBlYXIKK2luIHRoZSBuZXh0IGNvbW1hbmQgbGluZSBpdGVtLiBGb3IgZXhhbXBsZToKKzxwcmU+CisgIC0tZmlsZT0vc29tZS9maWxlCisgIC0tZmlsZSAvc29tZS9maWxlCis8L3ByZT4KK05vdGUsIGhvd2V2ZXIsIHRoYXQgaWYgeW91IHdhbnQgdG8gc3VwcGx5IGEgZmlsZSBuYW1lIGJlZ2lubmluZyB3aXRoIH4gYXMgZGF0YQoraW4gYSBzaGVsbCBjb21tYW5kLCBhbmQgaGF2ZSB0aGUgc2hlbGwgZXhwYW5kIH4gdG8gYSBob21lIGRpcmVjdG9yeSwgeW91IG11c3QKK3NlcGFyYXRlIHRoZSBmaWxlIG5hbWUgZnJvbSB0aGUgb3B0aW9uLCBiZWNhdXNlIHRoZSBzaGVsbCBkb2VzIG5vdCB0cmVhdCB+CitzcGVjaWFsbHkgdW5sZXNzIGl0IGlzIGF0IHRoZSBzdGFydCBvZiBhbiBpdGVtLgorPC9QPgorPFA+CitUaGUgZXhjZXB0aW9ucyB0byB0aGUgYWJvdmUgYXJlIHRoZSA8Yj4tLWNvbG91cjwvYj4gKG9yIDxiPi0tY29sb3I8L2I+KSBhbmQKKzxiPi0tb25seS1tYXRjaGluZzwvYj4gb3B0aW9ucywgZm9yIHdoaWNoIHRoZSBkYXRhIGlzIG9wdGlvbmFsLiBJZiBvbmUgb2YgdGhlc2UKK29wdGlvbnMgZG9lcyBoYXZlIGRhdGEsIGl0IG11c3QgYmUgZ2l2ZW4gaW4gdGhlIGZpcnN0IGZvcm0sIHVzaW5nIGFuIGVxdWFscworY2hhcmFjdGVyLiBPdGhlcndpc2UgPGI+cGNyZTJncmVwPC9iPiB3aWxsIGFzc3VtZSB0aGF0IGl0IGhhcyBubyBkYXRhLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzEwIiBocmVmPSIjVE9DMSI+TUFUQ0hJTkcgRVJST1JTPC9hPjxicj4KKzxQPgorSXQgaXMgcG9zc2libGUgdG8gc3VwcGx5IGEgcmVndWxhciBleHByZXNzaW9uIHRoYXQgdGFrZXMgYSB2ZXJ5IGxvbmcgdGltZSB0bworZmFpbCB0byBtYXRjaCBjZXJ0YWluIGxpbmVzLiBTdWNoIHBhdHRlcm5zIG5vcm1hbGx5IGludm9sdmUgbmVzdGVkIGluZGVmaW5pdGUKK3JlcGVhdHMsIGZvciBleGFtcGxlOiAoYSspKlxkIHdoZW4gbWF0Y2hlZCBhZ2FpbnN0IGEgbGluZSBvZiBhJ3Mgd2l0aCBubyBmaW5hbAorZGlnaXQuIFRoZSBQQ1JFMiBtYXRjaGluZyBmdW5jdGlvbiBoYXMgYSByZXNvdXJjZSBsaW1pdCB0aGF0IGNhdXNlcyBpdCB0byBhYm9ydAoraW4gdGhlc2UgY2lyY3Vtc3RhbmNlcy4gSWYgdGhpcyBoYXBwZW5zLCA8Yj5wY3JlMmdyZXA8L2I+IG91dHB1dHMgYW4gZXJyb3IKK21lc3NhZ2UgYW5kIHRoZSBsaW5lIHRoYXQgY2F1c2VkIHRoZSBwcm9ibGVtIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBzdHJlYW0uIElmCit0aGVyZSBhcmUgbW9yZSB0aGFuIDIwIHN1Y2ggZXJyb3JzLCA8Yj5wY3JlMmdyZXA8L2I+IGdpdmVzIHVwLgorPC9QPgorPFA+CitUaGUgPGI+LS1tYXRjaC1saW1pdDwvYj4gb3B0aW9uIG9mIDxiPnBjcmUyZ3JlcDwvYj4gY2FuIGJlIHVzZWQgdG8gc2V0IHRoZQorb3ZlcmFsbCByZXNvdXJjZSBsaW1pdDsgdGhlcmUgaXMgYSBzZWNvbmQgb3B0aW9uIGNhbGxlZCA8Yj4tLXJlY3Vyc2lvbi1saW1pdDwvYj4KK3RoYXQgc2V0cyBhIGxpbWl0IG9uIHRoZSBhbW91bnQgb2YgbWVtb3J5ICh1c3VhbGx5IHN0YWNrKSB0aGF0IGlzIHVzZWQgKHNlZSB0aGUKK2Rpc2N1c3Npb24gb2YgdGhlc2Ugb3B0aW9ucyBhYm92ZSkuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTEiIGhyZWY9IiNUT0MxIj5ESUFHTk9TVElDUzwvYT48YnI+Cis8UD4KK0V4aXQgc3RhdHVzIGlzIDAgaWYgYW55IG1hdGNoZXMgd2VyZSBmb3VuZCwgMSBpZiBubyBtYXRjaGVzIHdlcmUgZm91bmQsIGFuZCAyCitmb3Igc3ludGF4IGVycm9ycywgb3ZlcmxvbmcgbGluZXMsIG5vbi1leGlzdGVudCBvciBpbmFjY2Vzc2libGUgZmlsZXMgKGV2ZW4gaWYKK21hdGNoZXMgd2VyZSBmb3VuZCBpbiBvdGhlciBmaWxlcykgb3IgdG9vIG1hbnkgbWF0Y2hpbmcgZXJyb3JzLiBVc2luZyB0aGUKKzxiPi1zPC9iPiBvcHRpb24gdG8gc3VwcHJlc3MgZXJyb3IgbWVzc2FnZXMgYWJvdXQgaW5hY2Nlc3NpYmxlIGZpbGVzIGRvZXMgbm90CithZmZlY3QgdGhlIHJldHVybiBjb2RlLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzEyIiBocmVmPSIjVE9DMSI+U0VFIEFMU088L2E+PGJyPgorPFA+Cis8Yj5wY3JlMnBhdHRlcm48L2I+KDMpLCA8Yj5wY3JlMnN5bnRheDwvYj4oMykuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTMiIGhyZWY9IiNUT0MxIj5BVVRIT1I8L2E+PGJyPgorPFA+CitQaGlsaXAgSGF6ZWwKKzxicj4KK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKzxicj4KK0NhbWJyaWRnZSwgRW5nbGFuZC4KKzxicj4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxNCIgaHJlZj0iI1RPQzEiPlJFVklTSU9OPC9hPjxicj4KKzxQPgorTGFzdCB1cGRhdGVkOiAwMyBKYW51YXJ5IDIwMTUKKzxicj4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorPGJyPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJqaXQuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyaml0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhlZTEyMgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyaml0Lmh0bWwKQEAgLTAsMCArMSw0NDEgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJqaXQgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyaml0IG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8dWw+Cis8bGk+PGEgbmFtZT0iVE9DMSIgaHJlZj0iI1NFQzEiPlBDUkUyIEpVU1QtSU4tVElNRSBDT01QSUxFUiBTVVBQT1JUPC9hPgorPGxpPjxhIG5hbWU9IlRPQzIiIGhyZWY9IiNTRUMyIj5BVkFJTEFCSUxJVFkgT0YgSklUIFNVUFBPUlQ8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMyIgaHJlZj0iI1NFQzMiPlNJTVBMRSBVU0UgT0YgSklUPC9hPgorPGxpPjxhIG5hbWU9IlRPQzQiIGhyZWY9IiNTRUM0Ij5VTlNVUFBPUlRFRCBPUFRJT05TIEFORCBQQVRURVJOIElURU1TPC9hPgorPGxpPjxhIG5hbWU9IlRPQzUiIGhyZWY9IiNTRUM1Ij5SRVRVUk4gVkFMVUVTIEZST00gSklUIE1BVENISU5HPC9hPgorPGxpPjxhIG5hbWU9IlRPQzYiIGhyZWY9IiNTRUM2Ij5DT05UUk9MTElORyBUSEUgSklUIFNUQUNLPC9hPgorPGxpPjxhIG5hbWU9IlRPQzciIGhyZWY9IiNTRUM3Ij5KSVQgU1RBQ0sgRkFRPC9hPgorPGxpPjxhIG5hbWU9IlRPQzgiIGhyZWY9IiNTRUM4Ij5GUkVFSU5HIEpJVCBTUEVDVUxBVElWRSBNRU1PUlk8L2E+Cis8bGk+PGEgbmFtZT0iVE9DOSIgaHJlZj0iI1NFQzkiPkVYQU1QTEUgQ09ERTwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMCIgaHJlZj0iI1NFQzEwIj5KSVQgRkFTVCBQQVRIIEFQSTwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMSIgaHJlZj0iI1NFQzExIj5TRUUgQUxTTzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMiIgaHJlZj0iI1NFQzEyIj5BVVRIT1I8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTMiIGhyZWY9IiNTRUMxMyI+UkVWSVNJT048L2E+Cis8L3VsPgorPGJyPjxhIG5hbWU9IlNFQzEiIGhyZWY9IiNUT0MxIj5QQ1JFMiBKVVNULUlOLVRJTUUgQ09NUElMRVIgU1VQUE9SVDwvYT48YnI+Cis8UD4KK0p1c3QtaW4tdGltZSBjb21waWxpbmcgaXMgYSBoZWF2eXdlaWdodCBvcHRpbWl6YXRpb24gdGhhdCBjYW4gZ3JlYXRseSBzcGVlZCB1cAorcGF0dGVybiBtYXRjaGluZy4gSG93ZXZlciwgaXQgY29tZXMgYXQgdGhlIGNvc3Qgb2YgZXh0cmEgcHJvY2Vzc2luZyBiZWZvcmUgdGhlCittYXRjaCBpcyBwZXJmb3JtZWQsIHNvIGl0IGlzIG9mIG1vc3QgYmVuZWZpdCB3aGVuIHRoZSBzYW1lIHBhdHRlcm4gaXMgZ29pbmcgdG8KK2JlIG1hdGNoZWQgbWFueSB0aW1lcy4gVGhpcyBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIG1hbnkgY2FsbHMgb2YgYSBtYXRjaGluZworZnVuY3Rpb247IGlmIHRoZSBwYXR0ZXJuIGlzIG5vdCBhbmNob3JlZCwgbWF0Y2hpbmcgYXR0ZW1wdHMgbWF5IHRha2UgcGxhY2UgbWFueQordGltZXMgYXQgdmFyaW91cyBwb3NpdGlvbnMgaW4gdGhlIHN1YmplY3QsIGV2ZW4gZm9yIGEgc2luZ2xlIGNhbGwuIFRoZXJlZm9yZSwKK2lmIHRoZSBzdWJqZWN0IHN0cmluZyBpcyB2ZXJ5IGxvbmcsIGl0IG1heSBzdGlsbCBwYXkgdG8gdXNlIEpJVCBldmVuIGZvcgorb25lLW9mZiBtYXRjaGVzLiBKSVQgc3VwcG9ydCBpcyBhdmFpbGFibGUgZm9yIGFsbCBvZiB0aGUgOC1iaXQsIDE2LWJpdCBhbmQKKzMyLWJpdCBQQ1JFMiBsaWJyYXJpZXMuCis8L1A+Cis8UD4KK0pJVCBzdXBwb3J0IGFwcGxpZXMgb25seSB0byB0aGUgdHJhZGl0aW9uYWwgUGVybC1jb21wYXRpYmxlIG1hdGNoaW5nIGZ1bmN0aW9uLgorSXQgZG9lcyBub3QgYXBwbHkgd2hlbiB0aGUgREZBIG1hdGNoaW5nIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQuIFRoZSBjb2RlIGZvcgordGhpcyBzdXBwb3J0IHdhcyB3cml0dGVuIGJ5IFpvbHRhbiBIZXJjemVnLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzIiIGhyZWY9IiNUT0MxIj5BVkFJTEFCSUxJVFkgT0YgSklUIFNVUFBPUlQ8L2E+PGJyPgorPFA+CitKSVQgc3VwcG9ydCBpcyBhbiBvcHRpb25hbCBmZWF0dXJlIG9mIFBDUkUyLiBUaGUgImNvbmZpZ3VyZSIgb3B0aW9uCistLWVuYWJsZS1qaXQgKG9yIGVxdWl2YWxlbnQgQ01ha2Ugb3B0aW9uKSBtdXN0IGJlIHNldCB3aGVuIFBDUkUyIGlzIGJ1aWx0IGlmCit5b3Ugd2FudCB0byB1c2UgSklULiBUaGUgc3VwcG9ydCBpcyBsaW1pdGVkIHRvIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmUKK3BsYXRmb3JtczoKKzxwcmU+CisgIEFSTSAzMi1iaXQgKHY1LCB2NywgYW5kIFRodW1iMikKKyAgQVJNIDY0LWJpdAorICBJbnRlbCB4ODYgMzItYml0IGFuZCA2NC1iaXQKKyAgTUlQUyAzMi1iaXQgYW5kIDY0LWJpdAorICBQb3dlciBQQyAzMi1iaXQgYW5kIDY0LWJpdAorICBTUEFSQyAzMi1iaXQKKzwvcHJlPgorSWYgLS1lbmFibGUtaml0IGlzIHNldCBvbiBhbiB1bnN1cHBvcnRlZCBwbGF0Zm9ybSwgY29tcGlsYXRpb24gZmFpbHMuCis8L1A+Cis8UD4KK0EgcHJvZ3JhbSBjYW4gdGVsbCBpZiBKSVQgc3VwcG9ydCBpcyBhdmFpbGFibGUgYnkgY2FsbGluZyA8Yj5wY3JlMl9jb25maWcoKTwvYj4KK3dpdGggdGhlIFBDUkUyX0NPTkZJR19KSVQgb3B0aW9uLiBUaGUgcmVzdWx0IGlzIDEgd2hlbiBKSVQgaXMgYXZhaWxhYmxlLCBhbmQgMAorb3RoZXJ3aXNlLiBIb3dldmVyLCBhIHNpbXBsZSBwcm9ncmFtIGRvZXMgbm90IG5lZWQgdG8gY2hlY2sgdGhpcyBpbiBvcmRlciB0bwordXNlIEpJVC4gVGhlIEFQSSBpcyBpbXBsZW1lbnRlZCBpbiBhIHdheSB0aGF0IGZhbGxzIGJhY2sgdG8gdGhlIGludGVycHJldGl2ZQorY29kZSBpZiBKSVQgaXMgbm90IGF2YWlsYWJsZS4gRm9yIHByb2dyYW1zIHRoYXQgbmVlZCB0aGUgYmVzdCBwb3NzaWJsZQorcGVyZm9ybWFuY2UsIHRoZXJlIGlzIGFsc28gYSAiZmFzdCBwYXRoIiBBUEkgdGhhdCBpcyBKSVQtc3BlY2lmaWMuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMyIgaHJlZj0iI1RPQzEiPlNJTVBMRSBVU0UgT0YgSklUPC9hPjxicj4KKzxQPgorVG8gbWFrZSB1c2Ugb2YgdGhlIEpJVCBzdXBwb3J0IGluIHRoZSBzaW1wbGVzdCB3YXksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyB0bworY2FsbCA8Yj5wY3JlMl9qaXRfY29tcGlsZSgpPC9iPiBhZnRlciBzdWNjZXNzZnVsbHkgY29tcGlsaW5nIGEgcGF0dGVybiB3aXRoCis8Yj5wY3JlMl9jb21waWxlKCk8L2I+LiBUaGlzIGZ1bmN0aW9uIGhhcyB0d28gYXJndW1lbnRzOiB0aGUgZmlyc3QgaXMgdGhlCitjb21waWxlZCBwYXR0ZXJuIHBvaW50ZXIgdGhhdCB3YXMgcmV0dXJuZWQgYnkgPGI+cGNyZTJfY29tcGlsZSgpPC9iPiwgYW5kIHRoZQorc2Vjb25kIGlzIHplcm8gb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbiBiaXRzOiBQQ1JFMl9KSVRfQ09NUExFVEUsCitQQ1JFMl9KSVRfUEFSVElBTF9IQVJELCBvciBQQ1JFMl9KSVRfUEFSVElBTF9TT0ZULgorPC9QPgorPFA+CitJZiBKSVQgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLCBhIGNhbGwgdG8gPGI+cGNyZTJfaml0X2NvbXBpbGUoKTwvYj4gZG9lcworbm90aGluZyBhbmQgcmV0dXJucyBQQ1JFMl9FUlJPUl9KSVRfQkFET1BUSU9OLiBPdGhlcndpc2UsIHRoZSBjb21waWxlZCBwYXR0ZXJuCitpcyBwYXNzZWQgdG8gdGhlIEpJVCBjb21waWxlciwgd2hpY2ggdHVybnMgaXQgaW50byBtYWNoaW5lIGNvZGUgdGhhdCBleGVjdXRlcworbXVjaCBmYXN0ZXIgdGhhbiB0aGUgbm9ybWFsIGludGVycHJldGl2ZSBjb2RlLCBidXQgeWllbGRzIGV4YWN0bHkgdGhlIHNhbWUKK3Jlc3VsdHMuIFRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIDxiPnBjcmUyX2ppdF9jb21waWxlKCk8L2I+IGlzIHplcm8gb24gc3VjY2VzcywKK29yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBsaW1pdCB0byB0aGUgc2l6ZSBvZiBwYXR0ZXJuIHRoYXQgSklUIHN1cHBvcnRzLCBpbXBvc2VkIGJ5IHRoZSBzaXplCitvZiBtYWNoaW5lIHN0YWNrIHRoYXQgaXQgdXNlcy4gVGhlIGV4YWN0IHJ1bGVzIGFyZSBub3QgZG9jdW1lbnRlZCBiZWNhdXNlIHRoZXkKK21heSBjaGFuZ2UgYXQgYW55IHRpbWUsIGluIHBhcnRpY3VsYXIsIHdoZW4gbmV3IG9wdGltaXphdGlvbnMgYXJlIGludHJvZHVjZWQuCitJZiBhIHBhdHRlcm4gaXMgdG9vIGJpZywgYSBjYWxsIHRvIFxmQnBjcmUyX2ppdF9jb21waWxlKClcZkIgcmV0dXJucworUENSRTJfRVJST1JfTk9NRU1PUlkuCis8L1A+Cis8UD4KK1BDUkUyX0pJVF9DT01QTEVURSByZXF1ZXN0cyB0aGUgSklUIGNvbXBpbGVyIHRvIGdlbmVyYXRlIGNvZGUgZm9yIGNvbXBsZXRlCittYXRjaGVzLiBJZiB5b3Ugd2FudCB0byBydW4gcGFydGlhbCBtYXRjaGVzIHVzaW5nIHRoZSBQQ1JFMl9QQVJUSUFMX0hBUkQgb3IKK1BDUkUyX1BBUlRJQUxfU09GVCBvcHRpb25zIG9mIDxiPnBjcmUyX21hdGNoKCk8L2I+LCB5b3Ugc2hvdWxkIHNldCBvbmUgb3IgYm90aAorb2YgdGhlIG90aGVyIG9wdGlvbnMgYXMgd2VsbCBhcywgb3IgaW5zdGVhZCBvZiBQQ1JFMl9KSVRfQ09NUExFVEUuIFRoZSBKSVQKK2NvbXBpbGVyIGdlbmVyYXRlcyBkaWZmZXJlbnQgb3B0aW1pemVkIGNvZGUgZm9yIGVhY2ggb2YgdGhlIHRocmVlIG1vZGVzCisobm9ybWFsLCBzb2Z0IHBhcnRpYWwsIGhhcmQgcGFydGlhbCkuIFdoZW4gPGI+cGNyZTJfbWF0Y2goKTwvYj4gaXMgY2FsbGVkLCB0aGUKK2FwcHJvcHJpYXRlIGNvZGUgaXMgcnVuIGlmIGl0IGlzIGF2YWlsYWJsZS4gT3RoZXJ3aXNlLCB0aGUgcGF0dGVybiBpcyBtYXRjaGVkCit1c2luZyBpbnRlcnByZXRpdmUgY29kZS4KKzwvUD4KKzxQPgorWW91IGNhbiBjYWxsIDxiPnBjcmUyX2ppdF9jb21waWxlKCk8L2I+IG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZSBjb21waWxlZAorcGF0dGVybi4gSXQgZG9lcyBub3RoaW5nIGlmIGl0IGhhcyBwcmV2aW91c2x5IGNvbXBpbGVkIGNvZGUgZm9yIGFueSBvZiB0aGUKK29wdGlvbiBiaXRzLiBGb3IgZXhhbXBsZSwgeW91IGNhbiBjYWxsIGl0IG9uY2Ugd2l0aCBQQ1JFMl9KSVRfQ09NUExFVEUgYW5kCisocGVyaGFwcyBsYXRlciwgd2hlbiB5b3UgZmluZCB5b3UgbmVlZCBwYXJ0aWFsIG1hdGNoaW5nKSBhZ2FpbiB3aXRoCitQQ1JFMl9KSVRfQ09NUExFVEUgYW5kIFBDUkUyX0pJVF9QQVJUSUFMX0hBUkQuIFRoaXMgdGltZSBpdCB3aWxsIGlnbm9yZQorUENSRTJfSklUX0NPTVBMRVRFIGFuZCBqdXN0IGNvbXBpbGUgY29kZSBmb3IgcGFydGlhbCBtYXRjaGluZy4gSWYKKzxiPnBjcmUyX2ppdF9jb21waWxlKCk8L2I+IGlzIGNhbGxlZCB3aXRoIG5vIG9wdGlvbiBiaXRzIHNldCwgaXQgaW1tZWRpYXRlbHkKK3JldHVybnMgemVyby4gVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSB3YXkgb2YgdGVzdGluZyB3aGV0aGVyIEpJVCBpcyBhdmFpbGFibGUuCis8L1A+Cis8UD4KK0F0IHByZXNlbnQsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBmcmVlIEpJVCBjb21waWxlZCBjb2RlIGV4Y2VwdCB3aGVuIHRoZSBlbnRpcmUKK2NvbXBpbGVkIHBhdHRlcm4gaXMgZnJlZWQgYnkgY2FsbGluZyA8Yj5wY3JlMl9jb2RlX2ZyZWUoKTwvYj4uCis8L1A+Cis8UD4KK0luIHNvbWUgY2lyY3Vtc3RhbmNlcyB5b3UgbWF5IG5lZWQgdG8gY2FsbCBhZGRpdGlvbmFsIGZ1bmN0aW9ucy4gVGhlc2UgYXJlCitkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKKzxhIGhyZWY9IiNzdGFja2NvbnRyb2wiPiJDb250cm9sbGluZyB0aGUgSklUIHN0YWNrIjwvYT4KK2JlbG93LgorPC9QPgorPFA+CitUaGVyZSBhcmUgc29tZSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBvcHRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgSklULCBhbmQKK3RoZXJlIGFyZSBhbHNvIHNvbWUgcGF0dGVybiBpdGVtcyB0aGF0IEpJVCBjYW5ub3QgaGFuZGxlLiBEZXRhaWxzIGFyZSBnaXZlbgorYmVsb3cuIEluIGJvdGggY2FzZXMsIG1hdGNoaW5nIGF1dG9tYXRpY2FsbHkgZmFsbHMgYmFjayB0byB0aGUgaW50ZXJwcmV0aXZlCitjb2RlLiBJZiB5b3Ugd2FudCB0byBrbm93IHdoZXRoZXIgSklUIHdhcyBhY3R1YWxseSB1c2VkIGZvciBhIHBhcnRpY3VsYXIgbWF0Y2gsCit5b3Ugc2hvdWxkIGFycmFuZ2UgZm9yIGEgSklUIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIHNldCB1cCBhcyBkZXNjcmliZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkCis8YSBocmVmPSIjc3RhY2tjb250cm9sIj4iQ29udHJvbGxpbmcgdGhlIEpJVCBzdGFjayI8L2E+CitiZWxvdywgZXZlbiBpZiB5b3UgZG8gbm90IG5lZWQgdG8gc3VwcGx5IGEgbm9uLWRlZmF1bHQgSklUIHN0YWNrLiBTdWNoIGEKK2NhbGxiYWNrIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBKSVQgY29kZSBpcyBhYm91dCB0byBiZSBvYmV5ZWQuIElmIHRoZQorbWF0Y2gtdGltZSBvcHRpb25zIGFyZSBub3QgcmlnaHQgZm9yIEpJVCBleGVjdXRpb24sIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcworbm90IG9iZXllZC4KKzwvUD4KKzxQPgorSWYgdGhlIEpJVCBjb21waWxlciBmaW5kcyBhbiB1bnN1cHBvcnRlZCBpdGVtLCBubyBKSVQgZGF0YSBpcyBnZW5lcmF0ZWQuIFlvdQorY2FuIGZpbmQgb3V0IGlmIEpJVCBtYXRjaGluZyBpcyBhdmFpbGFibGUgYWZ0ZXIgY29tcGlsaW5nIGEgcGF0dGVybiBieSBjYWxsaW5nCis8Yj5wY3JlMl9wYXR0ZXJuX2luZm8oKTwvYj4gd2l0aCB0aGUgUENSRTJfSU5GT19KSVRTSVpFIG9wdGlvbi4gQSBub24temVybworcmVzdWx0IG1lYW5zIHRoYXQgSklUIGNvbXBpbGF0aW9uIHdhcyBzdWNjZXNzZnVsLiBBIHJlc3VsdCBvZiAwIG1lYW5zIHRoYXQgSklUCitzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUsIG9yIHRoZSBwYXR0ZXJuIHdhcyBub3QgcHJvY2Vzc2VkIGJ5Cis8Yj5wY3JlMl9qaXRfY29tcGlsZSgpPC9iPiwgb3IgdGhlIEpJVCBjb21waWxlciB3YXMgbm90IGFibGUgdG8gaGFuZGxlIHRoZQorcGF0dGVybi4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM0IiBocmVmPSIjVE9DMSI+VU5TVVBQT1JURUQgT1BUSU9OUyBBTkQgUEFUVEVSTiBJVEVNUzwvYT48YnI+Cis8UD4KK1RoZSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBvcHRpb25zIHRoYXQgYXJlIHN1cHBvcnRlZCBmb3IgSklUIG1hdGNoaW5nIGFyZQorUENSRTJfTk9UQk9MLCBQQ1JFMl9OT1RFT0wsIFBDUkUyX05PVEVNUFRZLCBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJULAorUENSRTJfTk9fVVRGX0NIRUNLLCBQQ1JFMl9QQVJUSUFMX0hBUkQsIGFuZCBQQ1JFMl9QQVJUSUFMX1NPRlQuIFRoZQorUENSRTJfQU5DSE9SRUQgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYXQgbWF0Y2ggdGltZS4KKzwvUD4KKzxQPgorVGhlIG9ubHkgdW5zdXBwb3J0ZWQgcGF0dGVybiBpdGVtcyBhcmUgXEMgKG1hdGNoIGEgc2luZ2xlIGRhdGEgdW5pdCkgd2hlbgorcnVubmluZyBpbiBhIFVURiBtb2RlLCBhbmQgYSBjYWxsb3V0IGltbWVkaWF0ZWx5IGJlZm9yZSBhbiBhc3NlcnRpb24gY29uZGl0aW9uCitpbiBhIGNvbmRpdGlvbmFsIGdyb3VwLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzUiIGhyZWY9IiNUT0MxIj5SRVRVUk4gVkFMVUVTIEZST00gSklUIE1BVENISU5HPC9hPjxicj4KKzxQPgorV2hlbiBhIHBhdHRlcm4gaXMgbWF0Y2hlZCB1c2luZyBKSVQgbWF0Y2hpbmcsIHRoZSByZXR1cm4gdmFsdWVzIGFyZSB0aGUgc2FtZQorYXMgdGhvc2UgZ2l2ZW4gYnkgdGhlIGludGVycHJldGl2ZSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBjb2RlLCB3aXRoIHRoZSBhZGRpdGlvbgorb2Ygb25lIG5ldyBlcnJvciBjb2RlOiBQQ1JFMl9FUlJPUl9KSVRfU1RBQ0tMSU1JVC4gVGhpcyBtZWFucyB0aGF0IHRoZSBtZW1vcnkKK3VzZWQgZm9yIHRoZSBKSVQgc3RhY2sgd2FzIGluc3VmZmljaWVudC4gU2VlCis8YSBocmVmPSIjc3RhY2tjb250cm9sIj4iQ29udHJvbGxpbmcgdGhlIEpJVCBzdGFjayI8L2E+CitiZWxvdyBmb3IgYSBkaXNjdXNzaW9uIG9mIEpJVCBzdGFjayB1c2FnZS4KKzwvUD4KKzxQPgorVGhlIGVycm9yIGNvZGUgUENSRTJfRVJST1JfTUFUQ0hMSU1JVCBpcyByZXR1cm5lZCBieSB0aGUgSklUIGNvZGUgaWYgc2VhcmNoaW5nCithIHZlcnkgbGFyZ2UgcGF0dGVybiB0cmVlIGdvZXMgb24gZm9yIHRvbyBsb25nLCBhcyBpdCBpcyBpbiB0aGUgc2FtZQorY2lyY3Vtc3RhbmNlIHdoZW4gSklUIGlzIG5vdCB1c2VkLCBidXQgdGhlIGRldGFpbHMgb2YgZXhhY3RseSB3aGF0IGlzIGNvdW50ZWQKK2FyZSBub3QgdGhlIHNhbWUuIFRoZSBQQ1JFMl9FUlJPUl9SRUNVUlNJT05MSU1JVCBlcnJvciBjb2RlIGlzIG5ldmVyIHJldHVybmVkCit3aGVuIEpJVCBtYXRjaGluZyBpcyB1c2VkLgorPGEgbmFtZT0ic3RhY2tjb250cm9sIj48L2E+PC9QPgorPGJyPjxhIG5hbWU9IlNFQzYiIGhyZWY9IiNUT0MxIj5DT05UUk9MTElORyBUSEUgSklUIFNUQUNLPC9hPjxicj4KKzxQPgorV2hlbiB0aGUgY29tcGlsZWQgSklUIGNvZGUgcnVucywgaXQgbmVlZHMgYSBibG9jayBvZiBtZW1vcnkgdG8gdXNlIGFzIGEgc3RhY2suCitCeSBkZWZhdWx0LCBpdCB1c2VzIDMySyBvbiB0aGUgbWFjaGluZSBzdGFjay4gSG93ZXZlciwgc29tZSBsYXJnZSBvcgorY29tcGxpY2F0ZWQgcGF0dGVybnMgbmVlZCBtb3JlIHRoYW4gdGhpcy4gVGhlIGVycm9yIFBDUkUyX0VSUk9SX0pJVF9TVEFDS0xJTUlUCitpcyBnaXZlbiB3aGVuIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3RhY2suIFRocmVlIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yCittYW5hZ2luZyBibG9ja3Mgb2YgbWVtb3J5IGZvciB1c2UgYXMgSklUIHN0YWNrcy4gVGhlcmUgaXMgZnVydGhlciBkaXNjdXNzaW9uCithYm91dCB0aGUgdXNlIG9mIEpJVCBzdGFja3MgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKKzxhIGhyZWY9IiNzdGFja2ZhcSI+IkpJVCBzdGFjayBGQVEiPC9hPgorYmVsb3cuCis8L1A+Cis8UD4KK1RoZSA8Yj5wY3JlMl9qaXRfc3RhY2tfY3JlYXRlKCk8L2I+IGZ1bmN0aW9uIGNyZWF0ZXMgYSBKSVQgc3RhY2suIEl0cyBhcmd1bWVudHMKK2FyZSBhIHN0YXJ0aW5nIHNpemUsIGEgbWF4aW11bSBzaXplLCBhbmQgYSBnZW5lcmFsIGNvbnRleHQgKGZvciBtZW1vcnkKK2FsbG9jYXRpb24gZnVuY3Rpb25zLCBvciBOVUxMIGZvciBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbikuIEl0IHJldHVybnMgYQorcG9pbnRlciB0byBhbiBvcGFxdWUgc3RydWN0dXJlIG9mIHR5cGUgPGI+cGNyZTJfaml0X3N0YWNrPC9iPiwgb3IgTlVMTCBpZiB0aGVyZQoraXMgYW4gZXJyb3IuIFRoZSA8Yj5wY3JlMl9qaXRfc3RhY2tfZnJlZSgpPC9iPiBmdW5jdGlvbiBpcyB1c2VkIHRvIGZyZWUgYSBzdGFjawordGhhdCBpcyBubyBsb25nZXIgbmVlZGVkLiAoRm9yIHRoZSB0ZWNobmljYWxseSBtaW5kZWQ6IHRoZSBhZGRyZXNzIHNwYWNlIGlzCithbGxvY2F0ZWQgYnkgbW1hcCBvciBWaXJ0dWFsQWxsb2MuKQorPC9QPgorPFA+CitKSVQgdXNlcyBmYXIgbGVzcyBtZW1vcnkgZm9yIHJlY3Vyc2lvbiB0aGFuIHRoZSBpbnRlcnByZXRpdmUgY29kZSwKK2FuZCBhIG1heGltdW0gc3RhY2sgc2l6ZSBvZiA1MTJLIHRvIDFNIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoIGZvciBhbnkKK3BhdHRlcm4uCis8L1A+Cis8UD4KK1RoZSA8Yj5wY3JlMl9qaXRfc3RhY2tfYXNzaWduKCk8L2I+IGZ1bmN0aW9uIHNwZWNpZmllcyB3aGljaCBzdGFjayBKSVQgY29kZQorc2hvdWxkIHVzZS4gSXRzIGFyZ3VtZW50cyBhcmUgYXMgZm9sbG93czoKKzxwcmU+CisgIHBjcmUyX21hdGNoX2NvbnRleHQgICptY29udGV4dAorICBwY3JlMl9qaXRfY2FsbGJhY2sgICAgY2FsbGJhY2sKKyAgdm9pZCAgICAgICAgICAgICAgICAgKmRhdGEKKzwvcHJlPgorVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhIG1hdGNoIGNvbnRleHQuIFdoZW4gdGhpcyBpcyBzdWJzZXF1ZW50bHkKK3Bhc3NlZCB0byBhIG1hdGNoaW5nIGZ1bmN0aW9uLCBpdHMgaW5mb3JtYXRpb24gZGV0ZXJtaW5lcyB3aGljaCBKSVQgc3RhY2sgaXMKK3VzZWQuIFRoZXJlIGFyZSB0aHJlZSBjYXNlcyBmb3IgdGhlIHZhbHVlcyBvZiB0aGUgb3RoZXIgdHdvIG9wdGlvbnM6Cis8cHJlPgorICAoMSkgSWYgPGk+Y2FsbGJhY2s8L2k+IGlzIE5VTEwgYW5kIDxpPmRhdGE8L2k+IGlzIE5VTEwsIGFuIGludGVybmFsIDMySyBibG9jaworICAgICAgb24gdGhlIG1hY2hpbmUgc3RhY2sgaXMgdXNlZC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB3aGVuIGEgbWF0Y2gKKyAgICAgIGNvbnRleHQgaXMgY3JlYXRlZC4KKworICAoMikgSWYgPGk+Y2FsbGJhY2s8L2k+IGlzIE5VTEwgYW5kIDxpPmRhdGE8L2k+IGlzIG5vdCBOVUxMLCA8aT5kYXRhPC9pPiBtdXN0IGJlCisgICAgICBhIHBvaW50ZXIgdG8gYSB2YWxpZCBKSVQgc3RhY2ssIHRoZSByZXN1bHQgb2YgY2FsbGluZworICAgICAgPGI+cGNyZTJfaml0X3N0YWNrX2NyZWF0ZSgpPC9iPi4KKworICAoMykgSWYgPGk+Y2FsbGJhY2s8L2k+IGlzIG5vdCBOVUxMLCBpdCBtdXN0IHBvaW50IHRvIGEgZnVuY3Rpb24gdGhhdCBpcworICAgICAgY2FsbGVkIHdpdGggPGk+ZGF0YTwvaT4gYXMgYW4gYXJndW1lbnQgYXQgdGhlIHN0YXJ0IG9mIG1hdGNoaW5nLCBpbgorICAgICAgb3JkZXIgdG8gc2V0IHVwIGEgSklUIHN0YWNrLiBJZiB0aGUgcmV0dXJuIGZyb20gdGhlIGNhbGxiYWNrCisgICAgICBmdW5jdGlvbiBpcyBOVUxMLCB0aGUgaW50ZXJuYWwgMzJLIHN0YWNrIGlzIHVzZWQ7IG90aGVyd2lzZSB0aGUKKyAgICAgIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSklUIHN0YWNrLCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcKKyAgICAgIDxiPnBjcmUyX2ppdF9zdGFja19jcmVhdGUoKTwvYj4uCis8L3ByZT4KK0EgY2FsbGJhY2sgZnVuY3Rpb24gaXMgb2JleWVkIHdoZW5ldmVyIEpJVCBjb2RlIGlzIGFib3V0IHRvIGJlIHJ1bjsgaXQgaXMgbm90CitvYmV5ZWQgd2hlbiA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBpcyBjYWxsZWQgd2l0aCBvcHRpb25zIHRoYXQgYXJlIGluY29tcGF0aWJsZQorZm9yIEpJVCBtYXRjaGluZy4gQSBjYWxsYmFjayBmdW5jdGlvbiBjYW4gdGhlcmVmb3JlIGJlIHVzZWQgdG8gZGV0ZXJtaW5lCit3aGV0aGVyIGEgbWF0Y2ggb3BlcmF0aW9uIHdhcyBleGVjdXRlZCBieSBKSVQgb3IgYnkgdGhlIGludGVycHJldGVyLgorPC9QPgorPFA+CitZb3UgbWF5IHNhZmVseSB1c2UgdGhlIHNhbWUgSklUIHN0YWNrIGZvciBtb3JlIHRoYW4gb25lIHBhdHRlcm4gKGVpdGhlciBieQorYXNzaWduaW5nIGRpcmVjdGx5IG9yIGJ5IGNhbGxiYWNrKSwgYXMgbG9uZyBhcyB0aGUgcGF0dGVybnMgYXJlIG1hdGNoZWQKK3NlcXVlbnRpYWxseSBpbiB0aGUgc2FtZSB0aHJlYWQuIEN1cnJlbnRseSwgdGhlIG9ubHkgd2F5IHRvIHNldCB1cAorbm9uLXNlcXVlbnRpYWwgbWF0Y2hlcyBpbiBvbmUgdGhyZWFkIGlzIHRvIHVzZSBjYWxsb3V0czogaWYgYSBjYWxsb3V0IGZ1bmN0aW9uCitzdGFydHMgYW5vdGhlciBtYXRjaCwgdGhhdCBtYXRjaCBtdXN0IHVzZSBhIGRpZmZlcmVudCBKSVQgc3RhY2sgdG8gdGhlIG9uZSB1c2VkCitmb3IgY3VycmVudGx5IHN1c3BlbmRlZCBtYXRjaChlcykuCis8L1A+Cis8UD4KK0luIGEgbXVsdGl0aHJlYWQgYXBwbGljYXRpb24sIGlmIHlvdSBkbyBub3QKK3NwZWNpZnkgYSBKSVQgc3RhY2ssIG9yIGlmIHlvdSBhc3NpZ24gb3IgcGFzcyBiYWNrIE5VTEwgZnJvbSBhIGNhbGxiYWNrLCB0aGF0CitpcyB0aHJlYWQtc2FmZSwgYmVjYXVzZSBlYWNoIHRocmVhZCBoYXMgaXRzIG93biBtYWNoaW5lIHN0YWNrLiBIb3dldmVyLCBpZiB5b3UKK2Fzc2lnbiBvciBwYXNzIGJhY2sgYSBub24tTlVMTCBKSVQgc3RhY2ssIHRoaXMgbXVzdCBiZSBhIGRpZmZlcmVudCBzdGFjayBmb3IKK2VhY2ggdGhyZWFkIHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGlzIHRocmVhZC1zYWZlLgorPC9QPgorPFA+CitTdHJpY3RseSBzcGVha2luZywgZXZlbiBtb3JlIGlzIGFsbG93ZWQuIFlvdSBjYW4gYXNzaWduIHRoZSBzYW1lIG5vbi1OVUxMIHN0YWNrCit0byBhIG1hdGNoIGNvbnRleHQgdGhhdCBpcyB1c2VkIGJ5IGFueSBudW1iZXIgb2YgcGF0dGVybnMsIGFzIGxvbmcgYXMgdGhleSBhcmUKK25vdCB1c2VkIGZvciBtYXRjaGluZyBieSBtdWx0aXBsZSB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUuIEZvciBleGFtcGxlLCB5b3UKK2NvdWxkIHVzZSB0aGUgc2FtZSBzdGFjayBpbiBhbGwgY29tcGlsZWQgcGF0dGVybnMsIHdpdGggYSBnbG9iYWwgbXV0ZXggaW4gdGhlCitjYWxsYmFjayB0byB3YWl0IHVudGlsIHRoZSBzdGFjayBpcyBhdmFpbGFibGUgZm9yIHVzZS4gSG93ZXZlciwgdGhpcyBpcyBhbgoraW5lZmZpY2llbnQgc29sdXRpb24sIGFuZCBub3QgcmVjb21tZW5kZWQuCis8L1A+Cis8UD4KK1RoaXMgaXMgYSBzdWdnZXN0aW9uIGZvciBob3cgYSBtdWx0aXRocmVhZGVkIHByb2dyYW0gdGhhdCBuZWVkcyB0byBzZXQgdXAKK25vbi1kZWZhdWx0IEpJVCBzdGFja3MgbWlnaHQgb3BlcmF0ZToKKzxwcmU+CisgIER1cmluZyB0aHJlYWQgaW5pdGFsaXphdGlvbgorICAgIHRocmVhZF9sb2NhbF92YXIgPSBwY3JlMl9qaXRfc3RhY2tfY3JlYXRlKC4uLikKKworICBEdXJpbmcgdGhyZWFkIGV4aXQKKyAgICBwY3JlMl9qaXRfc3RhY2tfZnJlZSh0aHJlYWRfbG9jYWxfdmFyKQorCisgIFVzZSBhIG9uZS1saW5lIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgcmV0dXJuIHRocmVhZF9sb2NhbF92YXIKKzwvcHJlPgorQWxsIHRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbiBkbyBub3RoaW5nIGlmIEpJVCBpcyBub3QgYXZhaWxhYmxlLgorPGEgbmFtZT0ic3RhY2tmYXEiPjwvYT48L1A+Cis8YnI+PGEgbmFtZT0iU0VDNyIgaHJlZj0iI1RPQzEiPkpJVCBTVEFDSyBGQVE8L2E+PGJyPgorPFA+CisoMSkgV2h5IGRvIHdlIG5lZWQgSklUIHN0YWNrcz8KKzxicj4KKzxicj4KK1BDUkUyIChhbmQgSklUKSBpcyBhIHJlY3Vyc2l2ZSwgZGVwdGgtZmlyc3QgZW5naW5lLCBzbyBpdCBuZWVkcyBhIHN0YWNrIHdoZXJlCit0aGUgbG9jYWwgZGF0YSBvZiB0aGUgY3VycmVudCBub2RlIGlzIHB1c2hlZCBiZWZvcmUgY2hlY2tpbmcgaXRzIGNoaWxkIG5vZGVzLgorQWxsb2NhdGluZyByZWFsIG1hY2hpbmUgc3RhY2sgb24gc29tZSBwbGF0Zm9ybXMgaXMgZGlmZmljdWx0LiBGb3IgZXhhbXBsZSwgdGhlCitzdGFjayBjaGFpbiBuZWVkcyB0byBiZSB1cGRhdGVkIGV2ZXJ5IHRpbWUgaWYgd2UgZXh0ZW5kIHRoZSBzdGFjayBvbiBQb3dlclBDLgorQWx0aG91Z2ggaXQgaXMgcG9zc2libGUsIGl0cyB1cGRhdGluZyB0aW1lIG92ZXJoZWFkIGRlY3JlYXNlcyBwZXJmb3JtYW5jZS4gU28KK3dlIGRvIHRoZSByZWN1cnNpb24gaW4gbWVtb3J5LgorPC9QPgorPFA+CisoMikgV2h5IGRvbid0IHdlIHNpbXBseSBhbGxvY2F0ZSBibG9ja3Mgb2YgbWVtb3J5IHdpdGggPGI+bWFsbG9jKCk8L2I+PworPGJyPgorPGJyPgorTW9kZXJuIG9wZXJhdGluZyBzeXN0ZW1zIGhhdmUgYSBuaWNlIGZlYXR1cmU6IHRoZXkgY2FuIHJlc2VydmUgYW4gYWRkcmVzcyBzcGFjZQoraW5zdGVhZCBvZiBhbGxvY2F0aW5nIG1lbW9yeS4gV2UgY2FuIHNhZmVseSBhbGxvY2F0ZSBtZW1vcnkgcGFnZXMgaW5zaWRlIHRoaXMKK2FkZHJlc3Mgc3BhY2UsIHNvIHRoZSBzdGFjayBjb3VsZCBncm93IHdpdGhvdXQgbW92aW5nIG1lbW9yeSBkYXRhICh0aGlzIGlzCitpbXBvcnRhbnQgYmVjYXVzZSBvZiBwb2ludGVycykuIFRodXMgd2UgY2FuIGFsbG9jYXRlIDFNIGFkZHJlc3Mgc3BhY2UsIGFuZCB1c2UKK29ubHkgYSBzaW5nbGUgbWVtb3J5IHBhZ2UgKHVzdWFsbHkgNEspIGlmIHRoYXQgaXMgZW5vdWdoLiBIb3dldmVyLCB3ZSBjYW4gc3RpbGwKK2dyb3cgdXAgdG8gMU0gYW55dGltZSBpZiBuZWVkZWQuCis8L1A+Cis8UD4KKygzKSBXaG8gIm93bnMiIGEgSklUIHN0YWNrPworPGJyPgorPGJyPgorVGhlIG93bmVyIG9mIHRoZSBzdGFjayBpcyB0aGUgdXNlciBwcm9ncmFtLCBub3QgdGhlIEpJVCBzdHVkaWVkIHBhdHRlcm4gb3IKK2FueXRoaW5nIGVsc2UuIFRoZSB1c2VyIHByb2dyYW0gbXVzdCBlbnN1cmUgdGhhdCBpZiBhIHN0YWNrIGlzIGJlaW5nIHVzZWQgYnkKKzxiPnBjcmUyX21hdGNoKCk8L2I+LCAodGhhdCBpcywgaXQgaXMgYXNzaWduZWQgdG8gYSBtYXRjaCBjb250ZXh0IHRoYXQgaXMgcGFzc2VkCit0byB0aGUgcGF0dGVybiBjdXJyZW50bHkgcnVubmluZyksIHRoYXQgc3RhY2sgbXVzdCBub3QgYmUgdXNlZCBieSBhbnkgb3RoZXIKK3RocmVhZHMgKHRvIGF2b2lkIG92ZXJ3cml0aW5nIHRoZSBzYW1lIG1lbW9yeSBhcmVhKS4gVGhlIGJlc3QgcHJhY3RpY2UgZm9yCittdWx0aXRocmVhZGVkIHByb2dyYW1zIGlzIHRvIGFsbG9jYXRlIGEgc3RhY2sgZm9yIGVhY2ggdGhyZWFkLCBhbmQgcmV0dXJuIHRoaXMKK3N0YWNrIHRocm91Z2ggdGhlIEpJVCBjYWxsYmFjayBmdW5jdGlvbi4KKzwvUD4KKzxQPgorKDQpIFdoZW4gc2hvdWxkIGEgSklUIHN0YWNrIGJlIGZyZWVkPworPGJyPgorPGJyPgorWW91IGNhbiBmcmVlIGEgSklUIHN0YWNrIGF0IGFueSB0aW1lLCBhcyBsb25nIGFzIGl0IHdpbGwgbm90IGJlIHVzZWQgYnkKKzxiPnBjcmUyX21hdGNoKCk8L2I+IGFnYWluLiBXaGVuIHlvdSBhc3NpZ24gdGhlIHN0YWNrIHRvIGEgbWF0Y2ggY29udGV4dCwgb25seSBhCitwb2ludGVyIGlzIHNldC4gVGhlcmUgaXMgbm8gcmVmZXJlbmNlIGNvdW50aW5nIG9yIGFueSBvdGhlciBtYWdpYy4gWW91IGNhbiBmcmVlCitjb21waWxlZCBwYXR0ZXJucywgY29udGV4dHMsIGFuZCBzdGFja3MgaW4gYW55IG9yZGVyLCBhbnl0aW1lLiBKdXN0IFxmSWRvCitub3RcZlAgY2FsbCA8Yj5wY3JlMl9tYXRjaCgpPC9iPiB3aXRoIGEgbWF0Y2ggY29udGV4dCBwb2ludGluZyB0byBhbiBhbHJlYWR5CitmcmVlZCBzdGFjaywgYXMgdGhhdCB3aWxsIGNhdXNlIFNFR0ZBVUxULiAoQWxzbywgZG8gbm90IGZyZWUgYSBzdGFjayBjdXJyZW50bHkKK3VzZWQgYnkgPGI+cGNyZTJfbWF0Y2goKTwvYj4gaW4gYW5vdGhlciB0aHJlYWQpLiBZb3UgY2FuIGFsc28gcmVwbGFjZSB0aGUgc3RhY2sKK2luIGEgY29udGV4dCBhdCBhbnkgdGltZSB3aGVuIGl0IGlzIG5vdCBpbiB1c2UuIFlvdSBzaG91bGQgZnJlZSB0aGUgcHJldmlvdXMKK3N0YWNrIGJlZm9yZSBhc3NpZ25pbmcgYSByZXBsYWNlbWVudC4KKzwvUD4KKzxQPgorKDUpIFNob3VsZCBJIGFsbG9jYXRlL2ZyZWUgYSBzdGFjayBldmVyeSB0aW1lIGJlZm9yZS9hZnRlciBjYWxsaW5nCis8Yj5wY3JlMl9tYXRjaCgpPC9iPj8KKzxicj4KKzxicj4KK05vLCBiZWNhdXNlIHRoaXMgaXMgdG9vIGNvc3RseSBpbiB0ZXJtcyBvZiByZXNvdXJjZXMuIEhvd2V2ZXIsIHlvdSBjb3VsZAoraW1wbGVtZW50IHNvbWUgY2xldmVyIGlkZWEgd2hpY2ggcmVsZWFzZSB0aGUgc3RhY2sgaWYgaXQgaXMgbm90IHVzZWQgaW4gbGV0J3MKK3NheSB0d28gbWludXRlcy4gVGhlIEpJVCBjYWxsYmFjayBjYW4gaGVscCB0byBhY2hpZXZlIHRoaXMgd2l0aG91dCBrZWVwaW5nIGEKK2xpc3Qgb2YgcGF0dGVybnMuCis8L1A+Cis8UD4KKyg2KSBPSywgdGhlIHN0YWNrIGlzIGZvciBsb25nIHRlcm0gbWVtb3J5IGFsbG9jYXRpb24uIEJ1dCB3aGF0IGhhcHBlbnMgaWYgYQorcGF0dGVybiBjYXVzZXMgc3RhY2sgb3ZlcmZsb3cgd2l0aCBhIHN0YWNrIG9mIDFNPyBJcyB0aGF0IDFNIGtlcHQgdW50aWwgdGhlCitzdGFjayBpcyBmcmVlZD8KKzxicj4KKzxicj4KK0VzcGVjaWFsbHkgb24gZW1iZWRkZWQgc3l0ZW1zLCBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYSB0byByZWxlYXNlIG1lbW9yeQorc29tZXRpbWVzIHdpdGhvdXQgZnJlZWluZyB0aGUgc3RhY2suIFRoZXJlIGlzIG5vIEFQSSBmb3IgdGhpcyBhdCB0aGUgbW9tZW50LgorUHJvYmFibHkgYSBmdW5jdGlvbiBjYWxsIHdoaWNoIHJldHVybnMgd2l0aCB0aGUgY3VycmVudGx5IGFsbG9jYXRlZCBtZW1vcnkgZm9yCithbnkgc3RhY2sgYW5kIGFub3RoZXIgd2hpY2ggYWxsb3dzIHJlbGVhc2luZyBtZW1vcnkgKHNocmlua2luZyB0aGUgc3RhY2spIHdvdWxkCitiZSBhIGdvb2QgaWRlYSBpZiBzb21lb25lIG5lZWRzIHRoaXMuCis8L1A+Cis8UD4KKyg3KSBUaGlzIGlzIHRvbyBtdWNoIG9mIGEgaGVhZGFjaGUuIElzbid0IHRoZXJlIGFueSBiZXR0ZXIgc29sdXRpb24gZm9yIEpJVAorc3RhY2sgaGFuZGxpbmc/Cis8YnI+Cis8YnI+CitObywgdGhhbmtzIHRvIFdpbmRvd3MuIElmIFBPU0lYIHRocmVhZHMgd2VyZSB1c2VkIGV2ZXJ5d2hlcmUsIHdlIGNvdWxkIHRocm93CitvdXQgdGhpcyBjb21wbGljYXRlZCBBUEkuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDOCIgaHJlZj0iI1RPQzEiPkZSRUVJTkcgSklUIFNQRUNVTEFUSVZFIE1FTU9SWTwvYT48YnI+Cis8UD4KKzxiPnZvaWQgcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeShwY3JlMl9nZW5lcmFsX2NvbnRleHQgKjxpPmdjb250ZXh0PC9pPik7PC9iPgorPC9QPgorPFA+CitUaGUgSklUIGV4ZWN1dGFibGUgYWxsb2NhdG9yIGRvZXMgbm90IGZyZWUgYWxsIG1lbW9yeSB3aGVuIGl0IGlzIHBvc3NpYmxlLgorSXQgZXhwZWN0cyBuZXcgYWxsb2NhdGlvbnMsIGFuZCBrZWVwcyBzb21lIGZyZWUgbWVtb3J5IGFyb3VuZCB0byBpbXByb3ZlCithbGxvY2F0aW9uIHNwZWVkLiBIb3dldmVyLCBpbiBsb3cgbWVtb3J5IGNvbmRpdGlvbnMsIGl0IG1pZ2h0IGJlIGJldHRlciB0byBmcmVlCithbGwgcG9zc2libGUgbWVtb3J5LiBZb3UgY2FuIGNhdXNlIHRoaXMgdG8gaGFwcGVuIGJ5IGNhbGxpbmcKK3BjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkoKS4gSXRzIGFyZ3VtZW50IGlzIGEgZ2VuZXJhbCBjb250ZXh0LCBmb3IgY3VzdG9tCittZW1vcnkgbWFuYWdlbWVudCwgb3IgTlVMTCBmb3Igc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDOSIgaHJlZj0iI1RPQzEiPkVYQU1QTEUgQ09ERTwvYT48YnI+Cis8UD4KK1RoaXMgaXMgYSBzaW5nbGUtdGhyZWFkZWQgZXhhbXBsZSB0aGF0IHNwZWNpZmllcyBhIEpJVCBzdGFjayB3aXRob3V0IHVzaW5nIGEKK2NhbGxiYWNrLiBBIHJlYWwgcHJvZ3JhbSBzaG91bGQgaW5jbHVkZSBlcnJvciBjaGVja2luZyBhZnRlciBhbGwgdGhlIGZ1bmN0aW9uCitjYWxscy4KKzxwcmU+CisgIGludCByYzsKKyAgcGNyZTJfY29kZSAqcmU7CisgIHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGE7CisgIHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0OworICBwY3JlMl9qaXRfc3RhY2sgKmppdF9zdGFjazsKKworICByZSA9IHBjcmUyX2NvbXBpbGUocGF0dGVybiwgUENSRTJfWkVST19URVJNSU5BVEVELCAwLAorICAgICZlcnJvcm51bWJlciwgJmVycm9mZnNldCwgTlVMTCk7CisgIHJjID0gcGNyZTJfaml0X2NvbXBpbGUocmUsIFBDUkUyX0pJVF9DT01QTEVURSk7CisgIG1jb250ZXh0ID0gcGNyZTJfbWF0Y2hfY29udGV4dF9jcmVhdGUoTlVMTCk7CisgIGppdF9zdGFjayA9IHBjcmUyX2ppdF9zdGFja19jcmVhdGUoMzIqMTAyNCwgNTEyKjEwMjQsIE5VTEwpOworICBwY3JlMl9qaXRfc3RhY2tfYXNzaWduKG1jb250ZXh0LCBOVUxMLCBqaXRfc3RhY2spOworICBtYXRjaF9kYXRhID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUocmUsIDEwKTsKKyAgcmMgPSBwY3JlMl9tYXRjaChyZSwgc3ViamVjdCwgbGVuZ3RoLCAwLCAwLCBtYXRjaF9kYXRhLCBtY29udGV4dCk7CisgIC8qIFByb2Nlc3MgcmVzdWx0ICovCisKKyAgcGNyZTJfY29kZV9mcmVlKHJlKTsKKyAgcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKG1hdGNoX2RhdGEpOworICBwY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWUobWNvbnRleHQpOworICBwY3JlMl9qaXRfc3RhY2tfZnJlZShqaXRfc3RhY2spOworCis8L1BSRT4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxMCIgaHJlZj0iI1RPQzEiPkpJVCBGQVNUIFBBVEggQVBJPC9hPjxicj4KKzxQPgorQmVjYXVzZSB0aGUgQVBJIGRlc2NyaWJlZCBhYm92ZSBmYWxscyBiYWNrIHRvIGludGVycHJldGVkIG1hdGNoaW5nIHdoZW4gSklUIGlzCitub3QgYXZhaWxhYmxlLCBpdCBpcyBjb252ZW5pZW50IGZvciBwcm9ncmFtcyB0aGF0IGFyZSB3cml0dGVuIGZvciBnZW5lcmFsIHVzZQoraW4gbWFueSBlbnZpcm9ubWVudHMuIEhvd2V2ZXIsIGNhbGxpbmcgSklUIHZpYSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBkb2VzIGhhdmUgYQorcGVyZm9ybWFuY2UgaW1wYWN0LiBQcm9ncmFtcyB0aGF0IGFyZSB3cml0dGVuIGZvciB1c2Ugd2hlcmUgSklUIGlzIGtub3duIHRvIGJlCithdmFpbGFibGUsIGFuZCB3aGljaCBuZWVkIHRoZSBiZXN0IHBvc3NpYmxlIHBlcmZvcm1hbmNlLCBjYW4gaW5zdGVhZCB1c2UgYQorImZhc3QgcGF0aCIgQVBJIHRvIGNhbGwgSklUIG1hdGNoaW5nIGRpcmVjdGx5IGluc3RlYWQgb2YgY2FsbGluZworPGI+cGNyZTJfbWF0Y2goKTwvYj4gKG9idmlvdXNseSBvbmx5IGZvciBwYXR0ZXJucyB0aGF0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkKK3Byb2Nlc3NlZCBieSA8Yj5wY3JlMl9qaXRfY29tcGlsZSgpPC9iPikuCis8L1A+Cis8UD4KK1RoZSBmYXN0IHBhdGggZnVuY3Rpb24gaXMgY2FsbGVkIDxiPnBjcmUyX2ppdF9tYXRjaCgpPC9iPiwgYW5kIGl0IHRha2VzIGV4YWN0bHkKK3RoZSBzYW1lIGFyZ3VtZW50cyBhcyA8Yj5wY3JlMl9tYXRjaCgpPC9iPi4gVGhlIHJldHVybiB2YWx1ZXMgYXJlIGFsc28gdGhlIHNhbWUsCitwbHVzIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04gaWYgYSBtYXRjaGluZyBtb2RlIChwYXJ0aWFsIG9yIGNvbXBsZXRlKSBpcworcmVxdWVzdGVkIHRoYXQgd2FzIG5vdCBjb21waWxlZC4gVW5zdXBwb3J0ZWQgb3B0aW9uIGJpdHMgKGZvciBleGFtcGxlLAorUENSRTJfQU5DSE9SRUQpIGFyZSBpZ25vcmVkLgorPC9QPgorPFA+CitXaGVuIHlvdSBjYWxsIDxiPnBjcmUyX21hdGNoKCk8L2I+LCBhcyB3ZWxsIGFzIHRlc3RpbmcgZm9yIGludmFsaWQgb3B0aW9ucywgYQorbnVtYmVyIG9mIG90aGVyIHNhbml0eSBjaGVja3MgYXJlIHBlcmZvcm1lZCBvbiB0aGUgYXJndW1lbnRzLiBGb3IgZXhhbXBsZSwgaWYKK3RoZSBzdWJqZWN0IHBvaW50ZXIgaXMgTlVMTCwgYW4gaW1tZWRpYXRlIGVycm9yIGlzIGdpdmVuLiBBbHNvLCB1bmxlc3MKK1BDUkUyX05PX1VURl9DSEVDSyBpcyBzZXQsIGEgVVRGIHN1YmplY3Qgc3RyaW5nIGlzIHRlc3RlZCBmb3IgdmFsaWRpdHkuIEluIHRoZQoraW50ZXJlc3RzIG9mIHNwZWVkLCB0aGVzZSBjaGVja3MgZG8gbm90IGhhcHBlbiBvbiB0aGUgSklUIGZhc3QgcGF0aCwgYW5kIGlmCitpbnZhbGlkIGRhdGEgaXMgcGFzc2VkLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4KKzwvUD4KKzxQPgorQnlwYXNzaW5nIHRoZSBzYW5pdHkgY2hlY2tzIGFuZCB0aGUgPGI+cGNyZTJfbWF0Y2goKTwvYj4gd3JhcHBpbmcgY2FuIGdpdmUKK3NwZWVkdXBzIG9mIG1vcmUgdGhhbiAxMCUuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTEiIGhyZWY9IiNUT0MxIj5TRUUgQUxTTzwvYT48YnI+Cis8UD4KKzxiPnBjcmUyYXBpPC9iPigzKQorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzEyIiBocmVmPSIjVE9DMSI+QVVUSE9SPC9hPjxicj4KKzxQPgorUGhpbGlwIEhhemVsIChGQVEgYnkgWm9sdGFuIEhlcmN6ZWcpCis8YnI+CitVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCis8YnI+CitDYW1icmlkZ2UsIEVuZ2xhbmQuCis8YnI+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTMiIGhyZWY9IiNUT0MxIj5SRVZJU0lPTjwvYT48YnI+Cis8UD4KK0xhc3QgdXBkYXRlZDogMTQgTm92ZW1iZXIgMjAxNQorPGJyPgorQ29weXJpZ2h0ICZjb3B5OyAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCis8YnI+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMmxpbWl0cy5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJsaW1pdHMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjI3YTMwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJsaW1pdHMuaHRtbApAQCAtMCwwICsxLDEwMiBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMmxpbWl0cyBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJsaW1pdHMgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1NJWkUgQU5EIE9USEVSIExJTUlUQVRJT05TCis8L2I+PGJyPgorPFA+CitUaGVyZSBhcmUgc29tZSBzaXplIGxpbWl0YXRpb25zIGluIFBDUkUyIGJ1dCBpdCBpcyBob3BlZCB0aGF0IHRoZXkgd2lsbCBuZXZlcgoraW4gcHJhY3RpY2UgYmUgcmVsZXZhbnQuCis8L1A+Cis8UD4KK1RoZSBtYXhpbXVtIHNpemUgb2YgYSBjb21waWxlZCBwYXR0ZXJuIGlzIGFwcHJveGltYXRlbHkgNjRLIGNvZGUgdW5pdHMgZm9yIHRoZQorOC1iaXQgYW5kIDE2LWJpdCBsaWJyYXJpZXMgaWYgUENSRTIgaXMgY29tcGlsZWQgd2l0aCB0aGUgZGVmYXVsdCBpbnRlcm5hbAorbGlua2FnZSBzaXplLCB3aGljaCBpcyAyIGJ5dGVzIGZvciB0aGVzZSBsaWJyYXJpZXMuIElmIHlvdSB3YW50IHRvIHByb2Nlc3MKK3JlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBhcmUgdHJ1bHkgZW5vcm1vdXMsIHlvdSBjYW4gY29tcGlsZSBQQ1JFMiB3aXRoIGFuCitpbnRlcm5hbCBsaW5rYWdlIHNpemUgb2YgMyBvciA0ICh3aGVuIGJ1aWxkaW5nIHRoZSAxNi1iaXQgbGlicmFyeSwgMyBpcyByb3VuZGVkCit1cCB0byA0KS4gU2VlIHRoZSA8Yj5SRUFETUU8L2I+IGZpbGUgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gYW5kIHRoZQorPGEgaHJlZj0icGNyZTJidWlsZC5odG1sIj48Yj5wY3JlMmJ1aWxkPC9iPjwvYT4KK2RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIEluIHRoZXNlIGNhc2VzIHRoZSBsaW1pdCBpcyBzdWJzdGFudGlhbGx5IGxhcmdlci4KK0hvd2V2ZXIsIHRoZSBzcGVlZCBvZiBleGVjdXRpb24gaXMgc2xvd2VyLiBJbiB0aGUgMzItYml0IGxpYnJhcnksIHRoZSBpbnRlcm5hbAorbGlua2FnZSBzaXplIGlzIGFsd2F5cyA0LgorPC9QPgorPFA+CitUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBzb3VyY2UgcGF0dGVybiBzdHJpbmcgaXMgZXNzZW50aWFsbHkgdW5saW1pdGVkOyBpdCBpcwordGhlIGxhcmdlc3QgbnVtYmVyIGEgUENSRTJfU0laRSB2YXJpYWJsZSBjYW4gaG9sZC4gSG93ZXZlciwgdGhlIHByb2dyYW0gdGhhdAorY2FsbHMgPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBjYW4gc3BlY2lmeSBhIHNtYWxsZXIgbGltaXQuCis8L1A+Cis8UD4KK1RoZSBtYXhpbXVtIGxlbmd0aCAoaW4gY29kZSB1bml0cykgb2YgYSBzdWJqZWN0IHN0cmluZyBpcyBvbmUgbGVzcyB0aGFuIHRoZQorbGFyZ2VzdCBudW1iZXIgYSBQQ1JFMl9TSVpFIHZhcmlhYmxlIGNhbiBob2xkLiBQQ1JFMl9TSVpFIGlzIGFuIHVuc2lnbmVkCitpbnRlZ2VyIHR5cGUsIHVzdWFsbHkgZGVmaW5lZCBhcyBzaXplX3QuIEl0cyBtYXhpbXVtIHZhbHVlICh0aGF0IGlzCit+KFBDUkUyX1NJWkUpMCkgaXMgcmVzZXJ2ZWQgYXMgYSBzcGVjaWFsIGluZGljYXRvciBmb3IgemVyby10ZXJtaW5hdGVkIHN0cmluZ3MKK2FuZCB1bnNldCBvZmZzZXRzLgorPC9QPgorPFA+CitOb3RlIHRoYXQgd2hlbiB1c2luZyB0aGUgdHJhZGl0aW9uYWwgbWF0Y2hpbmcgZnVuY3Rpb24sIFBDUkUyIHVzZXMgcmVjdXJzaW9uIHRvCitoYW5kbGUgc3VicGF0dGVybnMgYW5kIGluZGVmaW5pdGUgcmVwZXRpdGlvbi4gVGhpcyBtZWFucyB0aGF0IHRoZSBhdmFpbGFibGUKK3N0YWNrIHNwYWNlIG1heSBsaW1pdCB0aGUgc2l6ZSBvZiBhIHN1YmplY3Qgc3RyaW5nIHRoYXQgY2FuIGJlIHByb2Nlc3NlZCBieQorY2VydGFpbiBwYXR0ZXJucy4gRm9yIGEgZGlzY3Vzc2lvbiBvZiBzdGFjayBpc3N1ZXMsIHNlZSB0aGUKKzxhIGhyZWY9InBjcmUyc3RhY2suaHRtbCI+PGI+cGNyZTJzdGFjazwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPC9QPgorPFA+CitBbGwgdmFsdWVzIGluIHJlcGVhdGluZyBxdWFudGlmaWVycyBtdXN0IGJlIGxlc3MgdGhhbiA2NTUzNi4KKzwvUD4KKzxQPgorVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgbG9va2JlaGluZCBhc3NlcnRpb24gaXMgNjU1MzUgY2hhcmFjdGVycy4KKzwvUD4KKzxQPgorVGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIG51bWJlciBvZiBwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm5zLCBidXQgdGhlcmUgY2FuIGJlCitubyBtb3JlIHRoYW4gNjU1MzUgY2FwdHVyaW5nIHN1YnBhdHRlcm5zLiBUaGVyZSBpcywgaG93ZXZlciwgYSBsaW1pdCB0byB0aGUKK2RlcHRoIG9mIG5lc3Rpbmcgb2YgcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJucyBvZiBhbGwga2luZHMuIFRoaXMgaXMgaW1wb3NlZCBpbgorb3JkZXIgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBzeXN0ZW0gc3RhY2sgdXNlZCBhdCBjb21waWxlIHRpbWUuIFRoZSBsaW1pdCBjYW4KK2JlIHNwZWNpZmllZCB3aGVuIFBDUkUyIGlzIGJ1aWx0OyB0aGUgZGVmYXVsdCBpcyAyNTAuCis8L1A+Cis8UD4KK1RoZXJlIGlzIGEgbGltaXQgdG8gdGhlIG51bWJlciBvZiBmb3J3YXJkIHJlZmVyZW5jZXMgdG8gc3Vic2VxdWVudCBzdWJwYXR0ZXJucworb2YgYXJvdW5kIDIwMCwwMDAuIFJlcGVhdGVkIGZvcndhcmQgcmVmZXJlbmNlcyB3aXRoIGZpeGVkIHVwcGVyIGxpbWl0cywgZm9yCitleGFtcGxlLCAoPzIpezAsMTAwfSB3aGVuIHN1YnBhdHRlcm4gbnVtYmVyIDIgaXMgdG8gdGhlIHJpZ2h0LCBhcmUgaW5jbHVkZWQgaW4KK3RoZSBjb3VudC4gVGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIG51bWJlciBvZiBiYWNrd2FyZCByZWZlcmVuY2VzLgorPC9QPgorPFA+CitUaGUgbWF4aW11bSBsZW5ndGggb2YgbmFtZSBmb3IgYSBuYW1lZCBzdWJwYXR0ZXJuIGlzIDMyIGNvZGUgdW5pdHMsIGFuZCB0aGUKK21heGltdW0gbnVtYmVyIG9mIG5hbWVkIHN1YnBhdHRlcm5zIGlzIDEwMDAwLgorPC9QPgorPFA+CitUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBuYW1lIGluIGEgKCpNQVJLKSwgKCpQUlVORSksICgqU0tJUCksIG9yICgqVEhFTikgdmVyYgoraXMgMjU1IGZvciB0aGUgOC1iaXQgbGlicmFyeSBhbmQgNjU1MzUgZm9yIHRoZSAxNi1iaXQgYW5kIDMyLWJpdCBsaWJyYXJpZXMuCis8L1A+Cis8YnI+PGI+CitBVVRIT1IKKzwvYj48YnI+Cis8UD4KK1BoaWxpcCBIYXplbAorPGJyPgorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorPGJyPgorQ2FtYnJpZGdlLCBFbmdsYW5kLgorPGJyPgorPC9QPgorPGJyPjxiPgorUkVWSVNJT04KKzwvYj48YnI+Cis8UD4KK0xhc3QgdXBkYXRlZDogMDUgTm92ZW1iZXIgMjAxNQorPGJyPgorQ29weXJpZ2h0ICZjb3B5OyAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCis8YnI+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMm1hdGNoaW5nLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMm1hdGNoaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU5YmJiMwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUybWF0Y2hpbmcuaHRtbApAQCAtMCwwICsxLDI0MSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMm1hdGNoaW5nIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMm1hdGNoaW5nIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8dWw+Cis8bGk+PGEgbmFtZT0iVE9DMSIgaHJlZj0iI1NFQzEiPlBDUkUyIE1BVENISU5HIEFMR09SSVRITVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMiIgaHJlZj0iI1NFQzIiPlJFR1VMQVIgRVhQUkVTU0lPTlMgQVMgVFJFRVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMyIgaHJlZj0iI1NFQzMiPlRIRSBTVEFOREFSRCBNQVRDSElORyBBTEdPUklUSE08L2E+Cis8bGk+PGEgbmFtZT0iVE9DNCIgaHJlZj0iI1NFQzQiPlRIRSBBTFRFUk5BVElWRSBNQVRDSElORyBBTEdPUklUSE08L2E+Cis8bGk+PGEgbmFtZT0iVE9DNSIgaHJlZj0iI1NFQzUiPkFEVkFOVEFHRVMgT0YgVEhFIEFMVEVSTkFUSVZFIEFMR09SSVRITTwvYT4KKzxsaT48YSBuYW1lPSJUT0M2IiBocmVmPSIjU0VDNiI+RElTQURWQU5UQUdFUyBPRiBUSEUgQUxURVJOQVRJVkUgQUxHT1JJVEhNPC9hPgorPGxpPjxhIG5hbWU9IlRPQzciIGhyZWY9IiNTRUM3Ij5BVVRIT1I8L2E+Cis8bGk+PGEgbmFtZT0iVE9DOCIgaHJlZj0iI1NFQzgiPlJFVklTSU9OPC9hPgorPC91bD4KKzxicj48YSBuYW1lPSJTRUMxIiBocmVmPSIjVE9DMSI+UENSRTIgTUFUQ0hJTkcgQUxHT1JJVEhNUzwvYT48YnI+Cis8UD4KK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB0d28gZGlmZmVyZW50IGFsZ29yaXRobXMgdGhhdCBhcmUgYXZhaWxhYmxlIGluCitQQ1JFMiBmb3IgbWF0Y2hpbmcgYSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gYWdhaW5zdCBhIGdpdmVuIHN1YmplY3QKK3N0cmluZy4gVGhlICJzdGFuZGFyZCIgYWxnb3JpdGhtIGlzIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIDxiPnBjcmUyX21hdGNoKCk8L2I+CitmdW5jdGlvbi4gVGhpcyB3b3JrcyBpbiB0aGUgc2FtZSBhcyBhcyBQZXJsJ3MgbWF0Y2hpbmcgZnVuY3Rpb24sIGFuZCBwcm92aWRlIGEKK1BlcmwtY29tcGF0aWJsZSBtYXRjaGluZyBvcGVyYXRpb24uIFRoZSBqdXN0LWluLXRpbWUgKEpJVCkgb3B0aW1pemF0aW9uIHRoYXQgaXMKK2Rlc2NyaWJlZCBpbiB0aGUKKzxhIGhyZWY9InBjcmUyaml0Lmh0bWwiPjxiPnBjcmUyaml0PC9iPjwvYT4KK2RvY3VtZW50YXRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgZnVuY3Rpb24uCis8L1A+Cis8UD4KK0FuIGFsdGVybmF0aXZlIGFsZ29yaXRobSBpcyBwcm92aWRlZCBieSB0aGUgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IGZ1bmN0aW9uOworaXQgb3BlcmF0ZXMgaW4gYSBkaWZmZXJlbnQgd2F5LCBhbmQgaXMgbm90IFBlcmwtY29tcGF0aWJsZS4gVGhpcyBhbHRlcm5hdGl2ZQoraGFzIGFkdmFudGFnZXMgYW5kIGRpc2FkdmFudGFnZXMgY29tcGFyZWQgd2l0aCB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtLCBhbmQKK3RoZXNlIGFyZSBkZXNjcmliZWQgYmVsb3cuCis8L1A+Cis8UD4KK1doZW4gdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgd2F5IGluIHdoaWNoIGEgZ2l2ZW4gc3ViamVjdCBzdHJpbmcgY2FuIG1hdGNoIGEKK3BhdHRlcm4sIHRoZSB0d28gYWxnb3JpdGhtcyBnaXZlIHRoZSBzYW1lIGFuc3dlci4gQSBkaWZmZXJlbmNlIGFyaXNlcywgaG93ZXZlciwKK3doZW4gdGhlcmUgYXJlIG11bHRpcGxlIHBvc3NpYmlsaXRpZXMuIEZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybgorPHByZT4KKyAgXiYjNjA7LiomIzYyOworPC9wcmU+CitpcyBtYXRjaGVkIGFnYWluc3QgdGhlIHN0cmluZworPHByZT4KKyAgJiM2MDtzb21ldGhpbmcmIzYyOyAmIzYwO3NvbWV0aGluZyBlbHNlJiM2MjsgJiM2MDtzb21ldGhpbmcgZnVydGhlciYjNjI7Cis8L3ByZT4KK3RoZXJlIGFyZSB0aHJlZSBwb3NzaWJsZSBhbnN3ZXJzLiBUaGUgc3RhbmRhcmQgYWxnb3JpdGhtIGZpbmRzIG9ubHkgb25lIG9mCit0aGVtLCB3aGVyZWFzIHRoZSBhbHRlcm5hdGl2ZSBhbGdvcml0aG0gZmluZHMgYWxsIHRocmVlLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzIiIGhyZWY9IiNUT0MxIj5SRUdVTEFSIEVYUFJFU1NJT05TIEFTIFRSRUVTPC9hPjxicj4KKzxQPgorVGhlIHNldCBvZiBzdHJpbmdzIHRoYXQgYXJlIG1hdGNoZWQgYnkgYSByZWd1bGFyIGV4cHJlc3Npb24gY2FuIGJlIHJlcHJlc2VudGVkCithcyBhIHRyZWUgc3RydWN0dXJlLiBBbiB1bmxpbWl0ZWQgcmVwZXRpdGlvbiBpbiB0aGUgcGF0dGVybiBtYWtlcyB0aGUgdHJlZSBvZgoraW5maW5pdGUgc2l6ZSwgYnV0IGl0IGlzIHN0aWxsIGEgdHJlZS4gTWF0Y2hpbmcgdGhlIHBhdHRlcm4gdG8gYSBnaXZlbiBzdWJqZWN0CitzdHJpbmcgKGZyb20gYSBnaXZlbiBzdGFydGluZyBwb2ludCkgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSBzZWFyY2ggb2YgdGhlIHRyZWUuCitUaGVyZSBhcmUgdHdvIHdheXMgdG8gc2VhcmNoIGEgdHJlZTogZGVwdGgtZmlyc3QgYW5kIGJyZWFkdGgtZmlyc3QsIGFuZCB0aGVzZQorY29ycmVzcG9uZCB0byB0aGUgdHdvIG1hdGNoaW5nIGFsZ29yaXRobXMgcHJvdmlkZWQgYnkgUENSRTIuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMyIgaHJlZj0iI1RPQzEiPlRIRSBTVEFOREFSRCBNQVRDSElORyBBTEdPUklUSE08L2E+PGJyPgorPFA+CitJbiB0aGUgdGVybWlub2xvZ3kgb2YgSmVmZnJleSBGcmllZGwncyBib29rICJNYXN0ZXJpbmcgUmVndWxhciBFeHByZXNzaW9ucyIsCit0aGUgc3RhbmRhcmQgYWxnb3JpdGhtIGlzIGFuICJORkEgYWxnb3JpdGhtIi4gSXQgY29uZHVjdHMgYSBkZXB0aC1maXJzdCBzZWFyY2gKK29mIHRoZSBwYXR0ZXJuIHRyZWUuIFRoYXQgaXMsIGl0IHByb2NlZWRzIGFsb25nIGEgc2luZ2xlIHBhdGggdGhyb3VnaCB0aGUgdHJlZSwKK2NoZWNraW5nIHRoYXQgdGhlIHN1YmplY3QgbWF0Y2hlcyB3aGF0IGlzIHJlcXVpcmVkLiBXaGVuIHRoZXJlIGlzIGEgbWlzbWF0Y2gsCit0aGUgYWxnb3JpdGhtIHRyaWVzIGFueSBhbHRlcm5hdGl2ZXMgYXQgdGhlIGN1cnJlbnQgcG9pbnQsIGFuZCBpZiB0aGV5IGFsbAorZmFpbCwgaXQgYmFja3MgdXAgdG8gdGhlIHByZXZpb3VzIGJyYW5jaCBwb2ludCBpbiB0aGUgdHJlZSwgYW5kIHRyaWVzIHRoZSBuZXh0CithbHRlcm5hdGl2ZSBicmFuY2ggYXQgdGhhdCBsZXZlbC4gVGhpcyBvZnRlbiBpbnZvbHZlcyBiYWNraW5nIHVwIChtb3ZpbmcgdG8gdGhlCitsZWZ0KSBpbiB0aGUgc3ViamVjdCBzdHJpbmcgYXMgd2VsbC4gVGhlIG9yZGVyIGluIHdoaWNoIHJlcGV0aXRpb24gYnJhbmNoZXMgYXJlCit0cmllZCBpcyBjb250cm9sbGVkIGJ5IHRoZSBncmVlZHkgb3IgdW5ncmVlZHkgbmF0dXJlIG9mIHRoZSBxdWFudGlmaWVyLgorPC9QPgorPFA+CitJZiBhIGxlYWYgbm9kZSBpcyByZWFjaGVkLCBhIG1hdGNoaW5nIHN0cmluZyBoYXMgYmVlbiBmb3VuZCwgYW5kIGF0IHRoYXQgcG9pbnQKK3RoZSBhbGdvcml0aG0gc3RvcHMuIFRodXMsIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcG9zc2libGUgbWF0Y2gsIHRoaXMKK2FsZ29yaXRobSByZXR1cm5zIHRoZSBmaXJzdCBvbmUgdGhhdCBpdCBmaW5kcy4gV2hldGhlciB0aGlzIGlzIHRoZSBzaG9ydGVzdCwKK3RoZSBsb25nZXN0LCBvciBzb21lIGludGVybWVkaWF0ZSBsZW5ndGggZGVwZW5kcyBvbiB0aGUgd2F5IHRoZSBncmVlZHkgYW5kCit1bmdyZWVkeSByZXBldGl0aW9uIHF1YW50aWZpZXJzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIHBhdHRlcm4uCis8L1A+Cis8UD4KK0JlY2F1c2UgaXQgZW5kcyB1cCB3aXRoIGEgc2luZ2xlIHBhdGggdGhyb3VnaCB0aGUgdHJlZSwgaXQgaXMgcmVsYXRpdmVseQorc3RyYWlnaHRmb3J3YXJkIGZvciB0aGlzIGFsZ29yaXRobSB0byBrZWVwIHRyYWNrIG9mIHRoZSBzdWJzdHJpbmdzIHRoYXQgYXJlCittYXRjaGVkIGJ5IHBvcnRpb25zIG9mIHRoZSBwYXR0ZXJuIGluIHBhcmVudGhlc2VzLiBUaGlzIHByb3ZpZGVzIHN1cHBvcnQgZm9yCitjYXB0dXJpbmcgcGFyZW50aGVzZXMgYW5kIGJhY2sgcmVmZXJlbmNlcy4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM0IiBocmVmPSIjVE9DMSI+VEhFIEFMVEVSTkFUSVZFIE1BVENISU5HIEFMR09SSVRITTwvYT48YnI+Cis8UD4KK1RoaXMgYWxnb3JpdGhtIGNvbmR1Y3RzIGEgYnJlYWR0aC1maXJzdCBzZWFyY2ggb2YgdGhlIHRyZWUuIFN0YXJ0aW5nIGZyb20gdGhlCitmaXJzdCBtYXRjaGluZyBwb2ludCBpbiB0aGUgc3ViamVjdCwgaXQgc2NhbnMgdGhlIHN1YmplY3Qgc3RyaW5nIGZyb20gbGVmdCB0bworcmlnaHQsIG9uY2UsIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIsIGFuZCBhcyBpdCBkb2VzIHRoaXMsIGl0IHJlbWVtYmVycyBhbGwgdGhlCitwYXRocyB0aHJvdWdoIHRoZSB0cmVlIHRoYXQgcmVwcmVzZW50IHZhbGlkIG1hdGNoZXMuIEluIEZyaWVkbCdzIHRlcm1pbm9sb2d5LAordGhpcyBpcyBhIGtpbmQgb2YgIkRGQSBhbGdvcml0aG0iLCB0aG91Z2ggaXQgaXMgbm90IGltcGxlbWVudGVkIGFzIGEKK3RyYWRpdGlvbmFsIGZpbml0ZSBzdGF0ZSBtYWNoaW5lIChpdCBrZWVwcyBtdWx0aXBsZSBzdGF0ZXMgYWN0aXZlCitzaW11bHRhbmVvdXNseSkuCis8L1A+Cis8UD4KK0FsdGhvdWdoIHRoZSBnZW5lcmFsIHByaW5jaXBsZSBvZiB0aGlzIG1hdGNoaW5nIGFsZ29yaXRobSBpcyB0aGF0IGl0IHNjYW5zIHRoZQorc3ViamVjdCBzdHJpbmcgb25seSBvbmNlLCB3aXRob3V0IGJhY2t0cmFja2luZywgdGhlcmUgaXMgb25lIGV4Y2VwdGlvbjogd2hlbiBhCitsb29rYXJvdW5kIGFzc2VydGlvbiBpcyBlbmNvdW50ZXJlZCwgdGhlIGNoYXJhY3RlcnMgZm9sbG93aW5nIG9yIHByZWNlZGluZyB0aGUKK2N1cnJlbnQgcG9pbnQgaGF2ZSB0byBiZSBpbmRlcGVuZGVudGx5IGluc3BlY3RlZC4KKzwvUD4KKzxQPgorVGhlIHNjYW4gY29udGludWVzIHVudGlsIGVpdGhlciB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IGlzIHJlYWNoZWQsIG9yIHRoZXJlIGFyZQorbm8gbW9yZSB1bnRlcm1pbmF0ZWQgcGF0aHMuIEF0IHRoaXMgcG9pbnQsIHRlcm1pbmF0ZWQgcGF0aHMgcmVwcmVzZW50IHRoZQorZGlmZmVyZW50IG1hdGNoaW5nIHBvc3NpYmlsaXRpZXMgKGlmIHRoZXJlIGFyZSBub25lLCB0aGUgbWF0Y2ggaGFzIGZhaWxlZCkuCitUaHVzLCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBvc3NpYmxlIG1hdGNoLCB0aGlzIGFsZ29yaXRobSBmaW5kcyBhbGwgb2YKK3RoZW0sIGFuZCBpbiBwYXJ0aWN1bGFyLCBpdCBmaW5kcyB0aGUgbG9uZ2VzdC4gVGhlIG1hdGNoZXMgYXJlIHJldHVybmVkIGluCitkZWNyZWFzaW5nIG9yZGVyIG9mIGxlbmd0aC4gVGhlcmUgaXMgYW4gb3B0aW9uIHRvIHN0b3AgdGhlIGFsZ29yaXRobSBhZnRlciB0aGUKK2ZpcnN0IG1hdGNoICh3aGljaCBpcyBuZWNlc3NhcmlseSB0aGUgc2hvcnRlc3QpIGlzIGZvdW5kLgorPC9QPgorPFA+CitOb3RlIHRoYXQgYWxsIHRoZSBtYXRjaGVzIHRoYXQgYXJlIGZvdW5kIHN0YXJ0IGF0IHRoZSBzYW1lIHBvaW50IGluIHRoZQorc3ViamVjdC4gSWYgdGhlIHBhdHRlcm4KKzxwcmU+CisgIGNhdChlcihwaWxsYXIpPyk/Cis8L3ByZT4KK2lzIG1hdGNoZWQgYWdhaW5zdCB0aGUgc3RyaW5nICJ0aGUgY2F0ZXJwaWxsYXIgY2F0Y2htZW50IiwgdGhlIHJlc3VsdCBpcyB0aGUKK3RocmVlIHN0cmluZ3MgImNhdGVycGlsbGFyIiwgImNhdGVyIiwgYW5kICJjYXQiIHRoYXQgc3RhcnQgYXQgdGhlIGZpZnRoCitjaGFyYWN0ZXIgb2YgdGhlIHN1YmplY3QuIFRoZSBhbGdvcml0aG0gZG9lcyBub3QgYXV0b21hdGljYWxseSBtb3ZlIG9uIHRvIGZpbmQKK21hdGNoZXMgdGhhdCBzdGFydCBhdCBsYXRlciBwb3NpdGlvbnMuCis8L1A+Cis8UD4KK1BDUkUyJ3MgImF1dG8tcG9zc2Vzc2lmaWNhdGlvbiIgb3B0aW1pemF0aW9uIHVzdWFsbHkgYXBwbGllcyB0byBjaGFyYWN0ZXIKK3JlcGVhdHMgYXQgdGhlIGVuZCBvZiBhIHBhdHRlcm4gKGFzIHdlbGwgYXMgaW50ZXJuYWxseSkuIEZvciBleGFtcGxlLCB0aGUKK3BhdHRlcm4gImFcZCsiIGlzIGNvbXBpbGVkIGFzIGlmIGl0IHdlcmUgImFcZCsrIiBiZWNhdXNlIHRoZXJlIGlzIG5vIHBvaW50CitldmVuIGNvbnNpZGVyaW5nIHRoZSBwb3NzaWJpbGl0eSBvZiBiYWNrdHJhY2tpbmcgaW50byB0aGUgcmVwZWF0ZWQgZGlnaXRzLiBGb3IKK0RGQSBtYXRjaGluZywgdGhpcyBtZWFucyB0aGF0IG9ubHkgb25lIHBvc3NpYmxlIG1hdGNoIGlzIGZvdW5kLiBJZiB5b3UgcmVhbGx5CitkbyB3YW50IG11bHRpcGxlIG1hdGNoZXMgaW4gc3VjaCBjYXNlcywgZWl0aGVyIHVzZSBhbiB1bmdyZWVkeSByZXBlYXQKKygiYVxkKz8iKSBvciBzZXQgdGhlIFBDUkUyX05PX0FVVE9fUE9TU0VTUyBvcHRpb24gd2hlbiBjb21waWxpbmcuCis8L1A+Cis8UD4KK1RoZXJlIGFyZSBhIG51bWJlciBvZiBmZWF0dXJlcyBvZiBQQ1JFMiByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgYXJlIG5vdAorc3VwcG9ydGVkIGJ5IHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBhbGdvcml0aG0uIFRoZXkgYXJlIGFzIGZvbGxvd3M6Cis8L1A+Cis8UD4KKzEuIEJlY2F1c2UgdGhlIGFsZ29yaXRobSBmaW5kcyBhbGwgcG9zc2libGUgbWF0Y2hlcywgdGhlIGdyZWVkeSBvciB1bmdyZWVkeQorbmF0dXJlIG9mIHJlcGV0aXRpb24gcXVhbnRpZmllcnMgaXMgbm90IHJlbGV2YW50ICh0aG91Z2ggaXQgbWF5IGFmZmVjdAorYXV0by1wb3NzZXNzaWZpY2F0aW9uLCBhcyBqdXN0IGRlc2NyaWJlZCkuIER1cmluZyBtYXRjaGluZywgZ3JlZWR5IGFuZCB1bmdyZWVkeQorcXVhbnRpZmllcnMgYXJlIHRyZWF0ZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkuIEhvd2V2ZXIsIHBvc3Nlc3NpdmUKK3F1YW50aWZpZXJzIGNhbiBtYWtlIGEgZGlmZmVyZW5jZSB3aGVuIHdoYXQgZm9sbG93cyBjb3VsZCBhbHNvIG1hdGNoIHdoYXQgaXMKK3F1YW50aWZpZWQsIGZvciBleGFtcGxlIGluIGEgcGF0dGVybiBsaWtlIHRoaXM6Cis8cHJlPgorICBeYSsrXHchCis8L3ByZT4KK1RoaXMgcGF0dGVybiBtYXRjaGVzICJhYWFiISIgYnV0IG5vdCAiYWFhISIsIHdoaWNoIHdvdWxkIGJlIG1hdGNoZWQgYnkgYQorbm9uLXBvc3Nlc3NpdmUgcXVhbnRpZmllci4gU2ltaWxhcmx5LCBpZiBhbiBhdG9taWMgZ3JvdXAgaXMgcHJlc2VudCwgaXQgaXMKK21hdGNoZWQgYXMgaWYgaXQgd2VyZSBhIHN0YW5kYWxvbmUgcGF0dGVybiBhdCB0aGUgY3VycmVudCBwb2ludCwgYW5kIHRoZQorbG9uZ2VzdCBtYXRjaCBpcyB0aGVuICJsb2NrZWQgaW4iIGZvciB0aGUgcmVzdCBvZiB0aGUgb3ZlcmFsbCBwYXR0ZXJuLgorPC9QPgorPFA+CisyLiBXaGVuIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBwYXRocyB0aHJvdWdoIHRoZSB0cmVlIHNpbXVsdGFuZW91c2x5LCBpdCBpcyBub3QKK3N0cmFpZ2h0Zm9yd2FyZCB0byBrZWVwIHRyYWNrIG9mIGNhcHR1cmVkIHN1YnN0cmluZ3MgZm9yIHRoZSBkaWZmZXJlbnQgbWF0Y2hpbmcKK3Bvc3NpYmlsaXRpZXMsIGFuZCBQQ1JFMidzIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgYWxnb3JpdGhtIGRvZXMgbm90IGF0dGVtcHQgdG8KK2RvIHRoaXMuIFRoaXMgbWVhbnMgdGhhdCBubyBjYXB0dXJlZCBzdWJzdHJpbmdzIGFyZSBhdmFpbGFibGUuCis8L1A+Cis8UD4KKzMuIEJlY2F1c2Ugbm8gc3Vic3RyaW5ncyBhcmUgY2FwdHVyZWQsIGJhY2sgcmVmZXJlbmNlcyB3aXRoaW4gdGhlIHBhdHRlcm4gYXJlCitub3Qgc3VwcG9ydGVkLCBhbmQgY2F1c2UgZXJyb3JzIGlmIGVuY291bnRlcmVkLgorPC9QPgorPFA+Cis0LiBGb3IgdGhlIHNhbWUgcmVhc29uLCBjb25kaXRpb25hbCBleHByZXNzaW9ucyB0aGF0IHVzZSBhIGJhY2tyZWZlcmVuY2UgYXMgdGhlCitjb25kaXRpb24gb3IgdGVzdCBmb3IgYSBzcGVjaWZpYyBncm91cCByZWN1cnNpb24gYXJlIG5vdCBzdXBwb3J0ZWQuCis8L1A+Cis8UD4KKzUuIEJlY2F1c2UgbWFueSBwYXRocyB0aHJvdWdoIHRoZSB0cmVlIG1heSBiZSBhY3RpdmUsIHRoZSBcSyBlc2NhcGUgc2VxdWVuY2UsCit3aGljaCByZXNldHMgdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaCB3aGVuIGVuY291bnRlcmVkIChidXQgbWF5IGJlIG9uIHNvbWUgcGF0aHMKK2FuZCBub3Qgb24gb3RoZXJzKSwgaXMgbm90IHN1cHBvcnRlZC4gSXQgY2F1c2VzIGFuIGVycm9yIGlmIGVuY291bnRlcmVkLgorPC9QPgorPFA+Cis2LiBDYWxsb3V0cyBhcmUgc3VwcG9ydGVkLCBidXQgdGhlIHZhbHVlIG9mIHRoZSA8aT5jYXB0dXJlX3RvcDwvaT4gZmllbGQgaXMKK2Fsd2F5cyAxLCBhbmQgdGhlIHZhbHVlIG9mIHRoZSA8aT5jYXB0dXJlX2xhc3Q8L2k+IGZpZWxkIGlzIGFsd2F5cyAwLgorPC9QPgorPFA+Cis3LiBUaGUgXEMgZXNjYXBlIHNlcXVlbmNlLCB3aGljaCAoaW4gdGhlIHN0YW5kYXJkIGFsZ29yaXRobSkgYWx3YXlzIG1hdGNoZXMgYQorc2luZ2xlIGNvZGUgdW5pdCwgZXZlbiBpbiBhIFVURiBtb2RlLCBpcyBub3Qgc3VwcG9ydGVkIGluIHRoZXNlIG1vZGVzLCBiZWNhdXNlCit0aGUgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtIG1vdmVzIHRocm91Z2ggdGhlIHN1YmplY3Qgc3RyaW5nIG9uZSBjaGFyYWN0ZXIgKG5vdAorY29kZSB1bml0KSBhdCBhIHRpbWUsIGZvciBhbGwgYWN0aXZlIHBhdGhzIHRocm91Z2ggdGhlIHRyZWUuCis8L1A+Cis8UD4KKzguIEV4Y2VwdCBmb3IgKCpGQUlMKSwgdGhlIGJhY2t0cmFja2luZyBjb250cm9sIHZlcmJzIHN1Y2ggYXMgKCpQUlVORSkgYXJlIG5vdAorc3VwcG9ydGVkLiAoKkZBSUwpIGlzIHN1cHBvcnRlZCwgYW5kIGJlaGF2ZXMgbGlrZSBhIGZhaWxpbmcgbmVnYXRpdmUgYXNzZXJ0aW9uLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzUiIGhyZWY9IiNUT0MxIj5BRFZBTlRBR0VTIE9GIFRIRSBBTFRFUk5BVElWRSBBTEdPUklUSE08L2E+PGJyPgorPFA+CitVc2luZyB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgYWxnb3JpdGhtIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgYWR2YW50YWdlczoKKzwvUD4KKzxQPgorMS4gQWxsIHBvc3NpYmxlIG1hdGNoZXMgKGF0IGEgc2luZ2xlIHBvaW50IGluIHRoZSBzdWJqZWN0KSBhcmUgYXV0b21hdGljYWxseQorZm91bmQsIGFuZCBpbiBwYXJ0aWN1bGFyLCB0aGUgbG9uZ2VzdCBtYXRjaCBpcyBmb3VuZC4gVG8gZmluZCBtb3JlIHRoYW4gb25lCittYXRjaCB1c2luZyB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtLCB5b3UgaGF2ZSB0byBkbyBrbHVkZ3kgdGhpbmdzIHdpdGgKK2NhbGxvdXRzLgorPC9QPgorPFA+CisyLiBCZWNhdXNlIHRoZSBhbHRlcm5hdGl2ZSBhbGdvcml0aG0gc2NhbnMgdGhlIHN1YmplY3Qgc3RyaW5nIGp1c3Qgb25jZSwgYW5kCituZXZlciBuZWVkcyB0byBiYWNrdHJhY2sgKGV4Y2VwdCBmb3IgbG9va2JlaGluZHMpLCBpdCBpcyBwb3NzaWJsZSB0byBwYXNzIHZlcnkKK2xvbmcgc3ViamVjdCBzdHJpbmdzIHRvIHRoZSBtYXRjaGluZyBmdW5jdGlvbiBpbiBzZXZlcmFsIHBpZWNlcywgY2hlY2tpbmcgZm9yCitwYXJ0aWFsIG1hdGNoaW5nIGVhY2ggdGltZS4gQWx0aG91Z2ggaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkbyBtdWx0aS1zZWdtZW50CittYXRjaGluZyB1c2luZyB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtLCBieSByZXRhaW5pbmcgcGFydGlhbGx5IG1hdGNoZWQKK3N1YnN0cmluZ3MsIGl0IGlzIG1vcmUgY29tcGxpY2F0ZWQuIFRoZQorPGEgaHJlZj0icGNyZTJwYXJ0aWFsLmh0bWwiPjxiPnBjcmUycGFydGlhbDwvYj48L2E+Citkb2N1bWVudGF0aW9uIGdpdmVzIGRldGFpbHMgb2YgcGFydGlhbCBtYXRjaGluZyBhbmQgZGlzY3Vzc2VzIG11bHRpLXNlZ21lbnQKK21hdGNoaW5nLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzYiIGhyZWY9IiNUT0MxIj5ESVNBRFZBTlRBR0VTIE9GIFRIRSBBTFRFUk5BVElWRSBBTEdPUklUSE08L2E+PGJyPgorPFA+CitUaGUgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtIHN1ZmZlcnMgZnJvbSBhIG51bWJlciBvZiBkaXNhZHZhbnRhZ2VzOgorPC9QPgorPFA+CisxLiBJdCBpcyBzdWJzdGFudGlhbGx5IHNsb3dlciB0aGFuIHRoZSBzdGFuZGFyZCBhbGdvcml0aG0uIFRoaXMgaXMgcGFydGx5CitiZWNhdXNlIGl0IGhhcyB0byBzZWFyY2ggZm9yIGFsbCBwb3NzaWJsZSBtYXRjaGVzLCBidXQgaXMgYWxzbyBiZWNhdXNlIGl0IGlzCitsZXNzIHN1c2NlcHRpYmxlIHRvIG9wdGltaXphdGlvbi4KKzwvUD4KKzxQPgorMi4gQ2FwdHVyaW5nIHBhcmVudGhlc2VzIGFuZCBiYWNrIHJlZmVyZW5jZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCis8L1A+Cis8UD4KKzMuIEFsdGhvdWdoIGF0b21pYyBncm91cHMgYXJlIHN1cHBvcnRlZCwgdGhlaXIgdXNlIGRvZXMgbm90IHByb3ZpZGUgdGhlCitwZXJmb3JtYW5jZSBhZHZhbnRhZ2UgdGhhdCBpdCBkb2VzIGZvciB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzciIGhyZWY9IiNUT0MxIj5BVVRIT1I8L2E+PGJyPgorPFA+CitQaGlsaXAgSGF6ZWwKKzxicj4KK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKzxicj4KK0NhbWJyaWRnZSwgRW5nbGFuZC4KKzxicj4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM4IiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgorPFA+CitMYXN0IHVwZGF0ZWQ6IDI5IFNlcHRlbWJlciAyMDE0Cis8YnI+CitDb3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKzxicj4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUycGFydGlhbC5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJwYXJ0aWFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUxNTZiOAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUycGFydGlhbC5odG1sCkBAIC0wLDAgKzEsNDY1IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUycGFydGlhbCBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJwYXJ0aWFsIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8dWw+Cis8bGk+PGEgbmFtZT0iVE9DMSIgaHJlZj0iI1NFQzEiPlBBUlRJQUwgTUFUQ0hJTkcgSU4gUENSRTI8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMiIgaHJlZj0iI1NFQzIiPlBBUlRJQUwgTUFUQ0hJTkcgVVNJTkcgcGNyZTJfbWF0Y2goKTwvYT4KKzxsaT48YSBuYW1lPSJUT0MzIiBocmVmPSIjU0VDMyI+UEFSVElBTCBNQVRDSElORyBVU0lORyBwY3JlMl9kZmFfbWF0Y2goKTwvYT4KKzxsaT48YSBuYW1lPSJUT0M0IiBocmVmPSIjU0VDNCI+UEFSVElBTCBNQVRDSElORyBBTkQgV09SRCBCT1VOREFSSUVTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzUiIGhyZWY9IiNTRUM1Ij5FWEFNUExFIE9GIFBBUlRJQUwgTUFUQ0hJTkcgVVNJTkcgUENSRTJURVNUPC9hPgorPGxpPjxhIG5hbWU9IlRPQzYiIGhyZWY9IiNTRUM2Ij5NVUxUSS1TRUdNRU5UIE1BVENISU5HIFdJVEggcGNyZTJfZGZhX21hdGNoKCk8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNyIgaHJlZj0iI1NFQzciPk1VTFRJLVNFR01FTlQgTUFUQ0hJTkcgV0lUSCBwY3JlMl9tYXRjaCgpPC9hPgorPGxpPjxhIG5hbWU9IlRPQzgiIGhyZWY9IiNTRUM4Ij5JU1NVRVMgV0lUSCBNVUxUSS1TRUdNRU5UIE1BVENISU5HPC9hPgorPGxpPjxhIG5hbWU9IlRPQzkiIGhyZWY9IiNTRUM5Ij5BVVRIT1I8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTAiIGhyZWY9IiNTRUMxMCI+UkVWSVNJT048L2E+Cis8L3VsPgorPGJyPjxhIG5hbWU9IlNFQzEiIGhyZWY9IiNUT0MxIj5QQVJUSUFMIE1BVENISU5HIElOIFBDUkUyPC9hPjxicj4KKzxQPgorSW4gbm9ybWFsIHVzZSBvZiBQQ1JFMiwgaWYgdGhlIHN1YmplY3Qgc3RyaW5nIHRoYXQgaXMgcGFzc2VkIHRvIGEgbWF0Y2hpbmcKK2Z1bmN0aW9uIG1hdGNoZXMgYXMgZmFyIGFzIGl0IGdvZXMsIGJ1dCBpcyB0b28gc2hvcnQgdG8gbWF0Y2ggdGhlIGVudGlyZQorcGF0dGVybiwgUENSRTJfRVJST1JfTk9NQVRDSCBpcyByZXR1cm5lZC4gVGhlcmUgYXJlIGNpcmN1bXN0YW5jZXMgd2hlcmUgaXQKK21pZ2h0IGJlIGhlbHBmdWwgdG8gZGlzdGluZ3Vpc2ggdGhpcyBjYXNlIGZyb20gb3RoZXIgY2FzZXMgaW4gd2hpY2ggdGhlcmUgaXMgbm8KK21hdGNoLgorPC9QPgorPFA+CitDb25zaWRlciwgZm9yIGV4YW1wbGUsIGFuIGFwcGxpY2F0aW9uIHdoZXJlIGEgaHVtYW4gaXMgcmVxdWlyZWQgdG8gdHlwZSBpbiBkYXRhCitmb3IgYSBmaWVsZCB3aXRoIHNwZWNpZmljIGZvcm1hdHRpbmcgcmVxdWlyZW1lbnRzLiBBbiBleGFtcGxlIG1pZ2h0IGJlIGEgZGF0ZQoraW4gdGhlIGZvcm0gPGk+ZGRtbW15eTwvaT4sIGRlZmluZWQgYnkgdGhpcyBwYXR0ZXJuOgorPHByZT4KKyAgXlxkP1xkKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKVxkXGQkCis8L3ByZT4KK0lmIHRoZSBhcHBsaWNhdGlvbiBzZWVzIHRoZSB1c2VyJ3Mga2V5c3Ryb2tlcyBvbmUgYnkgb25lLCBhbmQgY2FuIGNoZWNrIHRoYXQKK3doYXQgaGFzIGJlZW4gdHlwZWQgc28gZmFyIGlzIHBvdGVudGlhbGx5IHZhbGlkLCBpdCBpcyBhYmxlIHRvIHJhaXNlIGFuIGVycm9yCithcyBzb29uIGFzIGEgbWlzdGFrZSBpcyBtYWRlLCBieSBiZWVwaW5nIGFuZCBub3QgcmVmbGVjdGluZyB0aGUgY2hhcmFjdGVyIHRoYXQKK2hhcyBiZWVuIHR5cGVkLCBmb3IgZXhhbXBsZS4gVGhpcyBpbW1lZGlhdGUgZmVlZGJhY2sgaXMgbGlrZWx5IHRvIGJlIGEgYmV0dGVyCit1c2VyIGludGVyZmFjZSB0aGFuIGEgY2hlY2sgdGhhdCBpcyBkZWxheWVkIHVudGlsIHRoZSBlbnRpcmUgc3RyaW5nIGhhcyBiZWVuCitlbnRlcmVkLiBQYXJ0aWFsIG1hdGNoaW5nIGNhbiBhbHNvIGJlIHVzZWZ1bCB3aGVuIHRoZSBzdWJqZWN0IHN0cmluZyBpcyB2ZXJ5Citsb25nIGFuZCBpcyBub3QgYWxsIGF2YWlsYWJsZSBhdCBvbmNlLgorPC9QPgorPFA+CitQQ1JFMiBzdXBwb3J0cyBwYXJ0aWFsIG1hdGNoaW5nIGJ5IG1lYW5zIG9mIHRoZSBQQ1JFMl9QQVJUSUFMX1NPRlQgYW5kCitQQ1JFMl9QQVJUSUFMX0hBUkQgb3B0aW9ucywgd2hpY2ggY2FuIGJlIHNldCB3aGVuIGNhbGxpbmcgYSBtYXRjaGluZyBmdW5jdGlvbi4KK1RoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBvcHRpb25zIGlzIHdoZXRoZXIgb3Igbm90IGEgcGFydGlhbCBtYXRjaCBpcworcHJlZmVycmVkIHRvIGFuIGFsdGVybmF0aXZlIGNvbXBsZXRlIG1hdGNoLCB0aG91Z2ggdGhlIGRldGFpbHMgZGlmZmVyIGJldHdlZW4KK3RoZSB0d28gdHlwZXMgb2YgbWF0Y2hpbmcgZnVuY3Rpb24uIElmIGJvdGggb3B0aW9ucyBhcmUgc2V0LCBQQ1JFMl9QQVJUSUFMX0hBUkQKK3Rha2VzIHByZWNlZGVuY2UuCis8L1A+Cis8UD4KK0lmIHlvdSB3YW50IHRvIHVzZSBwYXJ0aWFsIG1hdGNoaW5nIHdpdGgganVzdC1pbi10aW1lIG9wdGltaXplZCBjb2RlLCB5b3UgbXVzdAorY2FsbCA8Yj5wY3JlMl9qaXRfY29tcGlsZSgpPC9iPiB3aXRoIG9uZSBvciBib3RoIG9mIHRoZXNlIG9wdGlvbnM6Cis8cHJlPgorICBQQ1JFMl9KSVRfUEFSVElBTF9TT0ZUCisgIFBDUkUyX0pJVF9QQVJUSUFMX0hBUkQKKzwvcHJlPgorUENSRTJfSklUX0NPTVBMRVRFIHNob3VsZCBhbHNvIGJlIHNldCBpZiB5b3UgYXJlIGdvaW5nIHRvIHJ1biBub24tcGFydGlhbAorbWF0Y2hlcyBvbiB0aGUgc2FtZSBwYXR0ZXJuLiBJZiB0aGUgYXBwcm9wcmlhdGUgSklUIG1vZGUgaGFzIG5vdCBiZWVuIGNvbXBpbGVkLAoraW50ZXJwcmV0aXZlIG1hdGNoaW5nIGNvZGUgaXMgdXNlZC4KKzwvUD4KKzxQPgorU2V0dGluZyBhIHBhcnRpYWwgbWF0Y2hpbmcgb3B0aW9uIGRpc2FibGVzIHR3byBvZiBQQ1JFMidzIHN0YW5kYXJkCitvcHRpbWl6YXRpb25zLiBQQ1JFMiByZW1lbWJlcnMgdGhlIGxhc3QgbGl0ZXJhbCBjb2RlIHVuaXQgaW4gYSBwYXR0ZXJuLCBhbmQKK2FiYW5kb25zIG1hdGNoaW5nIGltbWVkaWF0ZWx5IGlmIGl0IGlzIG5vdCBwcmVzZW50IGluIHRoZSBzdWJqZWN0IHN0cmluZy4gVGhpcworb3B0aW1pemF0aW9uIGNhbm5vdCBiZSB1c2VkIGZvciBhIHN1YmplY3Qgc3RyaW5nIHRoYXQgbWlnaHQgbWF0Y2ggb25seQorcGFydGlhbGx5LiBQQ1JFMiBhbHNvIGtub3dzIHRoZSBtaW5pbXVtIGxlbmd0aCBvZiBhIG1hdGNoaW5nIHN0cmluZywgYW5kIGRvZXMKK25vdCBib3RoZXIgdG8gcnVuIHRoZSBtYXRjaGluZyBmdW5jdGlvbiBvbiBzaG9ydGVyIHN0cmluZ3MuIFRoaXMgb3B0aW1pemF0aW9uCitpcyBhbHNvIGRpc2FibGVkIGZvciBwYXJ0aWFsIG1hdGNoaW5nLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzIiIGhyZWY9IiNUT0MxIj5QQVJUSUFMIE1BVENISU5HIFVTSU5HIHBjcmUyX21hdGNoKCk8L2E+PGJyPgorPFA+CitBIHBhcnRpYWwgbWF0Y2ggb2NjdXJzIGR1cmluZyBhIGNhbGwgdG8gPGI+cGNyZTJfbWF0Y2goKTwvYj4gd2hlbiB0aGUgZW5kIG9mIHRoZQorc3ViamVjdCBzdHJpbmcgaXMgcmVhY2hlZCBzdWNjZXNzZnVsbHksIGJ1dCBtYXRjaGluZyBjYW5ub3QgY29udGludWUgYmVjYXVzZQorbW9yZSBjaGFyYWN0ZXJzIGFyZSBuZWVkZWQuIEhvd2V2ZXIsIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgaW4gdGhlIHN1YmplY3QgbXVzdAoraGF2ZSBiZWVuIGluc3BlY3RlZC4gVGhpcyBjaGFyYWN0ZXIgbmVlZCBub3QgZm9ybSBwYXJ0IG9mIHRoZSBmaW5hbCBtYXRjaGVkCitzdHJpbmc7IGxvb2tiZWhpbmQgYXNzZXJ0aW9ucyBhbmQgdGhlIFxLIGVzY2FwZSBzZXF1ZW5jZSBwcm92aWRlIHdheXMgb2YKK2luc3BlY3RpbmcgY2hhcmFjdGVycyBiZWZvcmUgdGhlIHN0YXJ0IG9mIGEgbWF0Y2hlZCBzdHJpbmcuIFRoZSByZXF1aXJlbWVudCBmb3IKK2luc3BlY3RpbmcgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBleGlzdHMgYmVjYXVzZSBhbiBlbXB0eSBzdHJpbmcgY2FuIGFsd2F5cyBiZQorbWF0Y2hlZDsgd2l0aG91dCBzdWNoIGEgcmVzdHJpY3Rpb24gdGhlcmUgd291bGQgYWx3YXlzIGJlIGEgcGFydGlhbCBtYXRjaCBvZiBhbgorZW1wdHkgc3RyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3QuCis8L1A+Cis8UD4KK1doZW4gYSBwYXJ0aWFsIG1hdGNoIGlzIHJldHVybmVkLCB0aGUgZmlyc3QgdHdvIGVsZW1lbnRzIGluIHRoZSBvdmVjdG9yIHBvaW50Cit0byB0aGUgcG9ydGlvbiBvZiB0aGUgc3ViamVjdCB0aGF0IHdhcyBtYXRjaGVkLCBidXQgdGhlIHZhbHVlcyBpbiB0aGUgcmVzdCBvZgordGhlIG92ZWN0b3IgYXJlIHVuZGVmaW5lZC4gVGhlIGFwcGVhcmFuY2Ugb2YgXEsgaW4gdGhlIHBhdHRlcm4gaGFzIG5vIGVmZmVjdAorZm9yIGEgcGFydGlhbCBtYXRjaC4gQ29uc2lkZXIgdGhpcyBwYXR0ZXJuOgorPHByZT4KKyAgL2FiY1xLMTIzLworPC9wcmU+CitJZiBpdCBpcyBtYXRjaGVkIGFnYWluc3QgIjQ1NmFiYzEyM3h5eiIgdGhlIHJlc3VsdCBpcyBhIGNvbXBsZXRlIG1hdGNoLCBhbmQgdGhlCitvdmVjdG9yIGRlZmluZXMgdGhlIG1hdGNoZWQgc3RyaW5nIGFzICIxMjMiLCBiZWNhdXNlIFxLIHJlc2V0cyB0aGUgInN0YXJ0IG9mCittYXRjaCIgcG9pbnQuIEhvd2V2ZXIsIGlmIGEgcGFydGlhbCBtYXRjaCBpcyByZXF1ZXN0ZWQgYW5kIHRoZSBzdWJqZWN0IHN0cmluZworaXMgIjQ1NmFiYzEyIiwgYSBwYXJ0aWFsIG1hdGNoIGlzIGZvdW5kIGZvciB0aGUgc3RyaW5nICJhYmMxMiIsIGJlY2F1c2UgYWxsCit0aGVzZSBjaGFyYWN0ZXJzIGFyZSBuZWVkZWQgZm9yIGEgc3Vic2VxdWVudCByZS1tYXRjaCB3aXRoIGFkZGl0aW9uYWwKK2NoYXJhY3RlcnMuCis8L1A+Cis8UD4KK1doYXQgaGFwcGVucyB3aGVuIGEgcGFydGlhbCBtYXRjaCBpcyBpZGVudGlmaWVkIGRlcGVuZHMgb24gd2hpY2ggb2YgdGhlIHR3bworcGFydGlhbCBtYXRjaGluZyBvcHRpb25zIGFyZSBzZXQuCis8L1A+Cis8YnI+PGI+CitQQ1JFMl9QQVJUSUFMX1NPRlQgV0lUSCBwY3JlMl9tYXRjaCgpCis8L2I+PGJyPgorPFA+CitJZiBQQ1JFMl9QQVJUSUFMX1NPRlQgaXMgc2V0IHdoZW4gPGI+cGNyZTJfbWF0Y2goKTwvYj4gaWRlbnRpZmllcyBhIHBhcnRpYWwKK21hdGNoLCB0aGUgcGFydGlhbCBtYXRjaCBpcyByZW1lbWJlcmVkLCBidXQgbWF0Y2hpbmcgY29udGludWVzIGFzIG5vcm1hbCwgYW5kCitvdGhlciBhbHRlcm5hdGl2ZXMgaW4gdGhlIHBhdHRlcm4gYXJlIHRyaWVkLiBJZiBubyBjb21wbGV0ZSBtYXRjaCBjYW4gYmUgZm91bmQsCitQQ1JFMl9FUlJPUl9QQVJUSUFMIGlzIHJldHVybmVkIGluc3RlYWQgb2YgUENSRTJfRVJST1JfTk9NQVRDSC4KKzwvUD4KKzxQPgorVGhpcyBvcHRpb24gaXMgInNvZnQiIGJlY2F1c2UgaXQgcHJlZmVycyBhIGNvbXBsZXRlIG1hdGNoIG92ZXIgYSBwYXJ0aWFsIG1hdGNoLgorQWxsIHRoZSB2YXJpb3VzIG1hdGNoaW5nIGl0ZW1zIGluIGEgcGF0dGVybiBiZWhhdmUgYXMgaWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzCitwb3RlbnRpYWxseSBjb21wbGV0ZS4gRm9yIGV4YW1wbGUsIFx6LCBcWiwgYW5kICQgbWF0Y2ggYXQgdGhlIGVuZCBvZiB0aGUKK3N1YmplY3QsIGFzIG5vcm1hbCwgYW5kIGZvciBcYiBhbmQgXEIgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCBpcyB0cmVhdGVkIGFzIGEKK25vbi1hbHBoYW51bWVyaWMuCis8L1A+Cis8UD4KK0lmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFydGlhbCBtYXRjaCwgdGhlIGZpcnN0IG9uZSB0aGF0IHdhcyBmb3VuZCBwcm92aWRlcwordGhlIGRhdGEgdGhhdCBpcyByZXR1cm5lZC4gQ29uc2lkZXIgdGhpcyBwYXR0ZXJuOgorPHByZT4KKyAgLzEyM1x3K1h8ZG9nWS8KKzwvcHJlPgorSWYgdGhpcyBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIHN1YmplY3Qgc3RyaW5nICJhYmMxMjNkb2ciLCBib3RoCithbHRlcm5hdGl2ZXMgZmFpbCB0byBtYXRjaCwgYnV0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3QgaXMgcmVhY2hlZCBkdXJpbmcKK21hdGNoaW5nLCBzbyBQQ1JFMl9FUlJPUl9QQVJUSUFMIGlzIHJldHVybmVkLiBUaGUgb2Zmc2V0cyBhcmUgc2V0IHRvIDMgYW5kIDksCitpZGVudGlmeWluZyAiMTIzZG9nIiBhcyB0aGUgZmlyc3QgcGFydGlhbCBtYXRjaCB0aGF0IHdhcyBmb3VuZC4gKEluIHRoaXMKK2V4YW1wbGUsIHRoZXJlIGFyZSB0d28gcGFydGlhbCBtYXRjaGVzLCBiZWNhdXNlICJkb2ciIG9uIGl0cyBvd24gcGFydGlhbGx5CittYXRjaGVzIHRoZSBzZWNvbmQgYWx0ZXJuYXRpdmUuKQorPC9QPgorPGJyPjxiPgorUENSRTJfUEFSVElBTF9IQVJEIFdJVEggcGNyZTJfbWF0Y2goKQorPC9iPjxicj4KKzxQPgorSWYgUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldCBmb3IgPGI+cGNyZTJfbWF0Y2goKTwvYj4sIFBDUkUyX0VSUk9SX1BBUlRJQUwgaXMKK3JldHVybmVkIGFzIHNvb24gYXMgYSBwYXJ0aWFsIG1hdGNoIGlzIGZvdW5kLCB3aXRob3V0IGNvbnRpbnVpbmcgdG8gc2VhcmNoIGZvcgorcG9zc2libGUgY29tcGxldGUgbWF0Y2hlcy4gVGhpcyBvcHRpb24gaXMgImhhcmQiIGJlY2F1c2UgaXQgcHJlZmVycyBhbiBlYXJsaWVyCitwYXJ0aWFsIG1hdGNoIG92ZXIgYSBsYXRlciBjb21wbGV0ZSBtYXRjaC4gRm9yIHRoaXMgcmVhc29uLCB0aGUgYXNzdW1wdGlvbiBpcworbWFkZSB0aGF0IHRoZSBlbmQgb2YgdGhlIHN1cHBsaWVkIHN1YmplY3Qgc3RyaW5nIG1heSBub3QgYmUgdGhlIHRydWUgZW5kIG9mIHRoZQorYXZhaWxhYmxlIGRhdGEsIGFuZCBzbywgaWYgXHosIFxaLCBcYiwgXEIsIG9yICQgYXJlIGVuY291bnRlcmVkIGF0IHRoZSBlbmQKK29mIHRoZSBzdWJqZWN0LCB0aGUgcmVzdWx0IGlzIFBDUkUyX0VSUk9SX1BBUlRJQUwsIHByb3ZpZGVkIHRoYXQgYXQgbGVhc3Qgb25lCitjaGFyYWN0ZXIgaW4gdGhlIHN1YmplY3QgaGFzIGJlZW4gaW5zcGVjdGVkLgorPC9QPgorPGJyPjxiPgorQ29tcGFyaW5nIGhhcmQgYW5kIHNvZnQgcGFydGlhbCBtYXRjaGluZworPC9iPjxicj4KKzxQPgorVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgdHdvIHBhcnRpYWwgbWF0Y2hpbmcgb3B0aW9ucyBjYW4gYmUgaWxsdXN0cmF0ZWQgYnkgYQorcGF0dGVybiBzdWNoIGFzOgorPHByZT4KKyAgL2RvZyhzYm9keSk/LworPC9wcmU+CitUaGlzIG1hdGNoZXMgZWl0aGVyICJkb2ciIG9yICJkb2dzYm9keSIsIGdyZWVkaWx5ICh0aGF0IGlzLCBpdCBwcmVmZXJzIHRoZQorbG9uZ2VyIHN0cmluZyBpZiBwb3NzaWJsZSkuIElmIGl0IGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgc3RyaW5nICJkb2ciIHdpdGgKK1BDUkUyX1BBUlRJQUxfU09GVCwgaXQgeWllbGRzIGEgY29tcGxldGUgbWF0Y2ggZm9yICJkb2ciLiBIb3dldmVyLCBpZgorUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldCwgdGhlIHJlc3VsdCBpcyBQQ1JFMl9FUlJPUl9QQVJUSUFMLiBPbiB0aGUgb3RoZXIKK2hhbmQsIGlmIHRoZSBwYXR0ZXJuIGlzIG1hZGUgdW5ncmVlZHkgdGhlIHJlc3VsdCBpcyBkaWZmZXJlbnQ6Cis8cHJlPgorICAvZG9nKHNib2R5KT8/LworPC9wcmU+CitJbiB0aGlzIGNhc2UgdGhlIHJlc3VsdCBpcyBhbHdheXMgYSBjb21wbGV0ZSBtYXRjaCBiZWNhdXNlIHRoYXQgaXMgZm91bmQgZmlyc3QsCithbmQgbWF0Y2hpbmcgbmV2ZXIgY29udGludWVzIGFmdGVyIGZpbmRpbmcgYSBjb21wbGV0ZSBtYXRjaC4gSXQgbWlnaHQgYmUgZWFzaWVyCit0byBmb2xsb3cgdGhpcyBleHBsYW5hdGlvbiBieSB0aGlua2luZyBvZiB0aGUgdHdvIHBhdHRlcm5zIGxpa2UgdGhpczoKKzxwcmU+CisgIC9kb2coc2JvZHkpPy8gICAgaXMgdGhlIHNhbWUgYXMgIC9kb2dzYm9keXxkb2cvCisgIC9kb2coc2JvZHkpPz8vICAgaXMgdGhlIHNhbWUgYXMgIC9kb2d8ZG9nc2JvZHkvCis8L3ByZT4KK1RoZSBzZWNvbmQgcGF0dGVybiB3aWxsIG5ldmVyIG1hdGNoICJkb2dzYm9keSIsIGJlY2F1c2UgaXQgd2lsbCBhbHdheXMgZmluZCB0aGUKK3Nob3J0ZXIgbWF0Y2ggZmlyc3QuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMyIgaHJlZj0iI1RPQzEiPlBBUlRJQUwgTUFUQ0hJTkcgVVNJTkcgcGNyZTJfZGZhX21hdGNoKCk8L2E+PGJyPgorPFA+CitUaGUgREZBIGZ1bmN0aW9ucyBtb3ZlIGFsb25nIHRoZSBzdWJqZWN0IHN0cmluZyBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLCB3aXRob3V0CitiYWNrdHJhY2tpbmcsIHNlYXJjaGluZyBmb3IgYWxsIHBvc3NpYmxlIG1hdGNoZXMgc2ltdWx0YW5lb3VzbHkuIElmIHRoZSBlbmQgb2YKK3RoZSBzdWJqZWN0IGlzIHJlYWNoZWQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIHRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eQorb2YgYSBwYXJ0aWFsIG1hdGNoLCBhZ2FpbiBwcm92aWRlZCB0aGF0IGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgaGFzIGJlZW4KK2luc3BlY3RlZC4KKzwvUD4KKzxQPgorV2hlbiBQQ1JFMl9QQVJUSUFMX1NPRlQgaXMgc2V0LCBQQ1JFMl9FUlJPUl9QQVJUSUFMIGlzIHJldHVybmVkIG9ubHkgaWYgdGhlcmUKK2hhdmUgYmVlbiBubyBjb21wbGV0ZSBtYXRjaGVzLiBPdGhlcndpc2UsIHRoZSBjb21wbGV0ZSBtYXRjaGVzIGFyZSByZXR1cm5lZC4KK0hvd2V2ZXIsIGlmIFBDUkUyX1BBUlRJQUxfSEFSRCBpcyBzZXQsIGEgcGFydGlhbCBtYXRjaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIKK2FueSBjb21wbGV0ZSBtYXRjaGVzLiBUaGUgcG9ydGlvbiBvZiB0aGUgc3RyaW5nIHRoYXQgd2FzIG1hdGNoZWQgd2hlbiB0aGUKK2xvbmdlc3QgcGFydGlhbCBtYXRjaCB3YXMgZm91bmQgaXMgc2V0IGFzIHRoZSBmaXJzdCBtYXRjaGluZyBzdHJpbmcuCis8L1A+Cis8UD4KK0JlY2F1c2UgdGhlIERGQSBmdW5jdGlvbnMgYWx3YXlzIHNlYXJjaCBmb3IgYWxsIHBvc3NpYmxlIG1hdGNoZXMsIGFuZCB0aGVyZSBpcworbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGdyZWVkeSBhbmQgdW5ncmVlZHkgcmVwZXRpdGlvbiwgdGhlaXIgYmVoYXZpb3VyIGlzCitkaWZmZXJlbnQgZnJvbSB0aGUgc3RhbmRhcmQgZnVuY3Rpb25zIHdoZW4gUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldC4gQ29uc2lkZXIKK3RoZSBzdHJpbmcgImRvZyIgbWF0Y2hlZCBhZ2FpbnN0IHRoZSB1bmdyZWVkeSBwYXR0ZXJuIHNob3duIGFib3ZlOgorPHByZT4KKyAgL2RvZyhzYm9keSk/Py8KKzwvcHJlPgorV2hlcmVhcyB0aGUgc3RhbmRhcmQgZnVuY3Rpb24gc3RvcHMgYXMgc29vbiBhcyBpdCBmaW5kcyB0aGUgY29tcGxldGUgbWF0Y2ggZm9yCisiZG9nIiwgdGhlIERGQSBmdW5jdGlvbiBhbHNvIGZpbmRzIHRoZSBwYXJ0aWFsIG1hdGNoIGZvciAiZG9nc2JvZHkiLCBhbmQgc28KK3JldHVybnMgdGhhdCB3aGVuIFBDUkUyX1BBUlRJQUxfSEFSRCBpcyBzZXQuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNCIgaHJlZj0iI1RPQzEiPlBBUlRJQUwgTUFUQ0hJTkcgQU5EIFdPUkQgQk9VTkRBUklFUzwvYT48YnI+Cis8UD4KK0lmIGEgcGF0dGVybiBlbmRzIHdpdGggb25lIG9mIHNlcXVlbmNlcyBcYiBvciBcQiwgd2hpY2ggdGVzdCBmb3Igd29yZAorYm91bmRhcmllcywgcGFydGlhbCBtYXRjaGluZyB3aXRoIFBDUkUyX1BBUlRJQUxfU09GVCBjYW4gZ2l2ZSBjb3VudGVyLWludHVpdGl2ZQorcmVzdWx0cy4gQ29uc2lkZXIgdGhpcyBwYXR0ZXJuOgorPHByZT4KKyAgL1xiY2F0XGIvCis8L3ByZT4KK1RoaXMgbWF0Y2hlcyAiY2F0IiwgcHJvdmlkZWQgdGhlcmUgaXMgYSB3b3JkIGJvdW5kYXJ5IGF0IGVpdGhlciBlbmQuIElmIHRoZQorc3ViamVjdCBzdHJpbmcgaXMgInRoZSBjYXQiLCB0aGUgY29tcGFyaXNvbiBvZiB0aGUgZmluYWwgInQiIHdpdGggYSBmb2xsb3dpbmcKK2NoYXJhY3RlciBjYW5ub3QgdGFrZSBwbGFjZSwgc28gYSBwYXJ0aWFsIG1hdGNoIGlzIGZvdW5kLiBIb3dldmVyLCBub3JtYWwKK21hdGNoaW5nIGNhcnJpZXMgb24sIGFuZCBcYiBtYXRjaGVzIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3Qgd2hlbiB0aGUgbGFzdAorY2hhcmFjdGVyIGlzIGEgbGV0dGVyLCBzbyBhIGNvbXBsZXRlIG1hdGNoIGlzIGZvdW5kLiBUaGUgcmVzdWx0LCB0aGVyZWZvcmUsIGlzCis8aT5ub3Q8L2k+IFBDUkUyX0VSUk9SX1BBUlRJQUwuIFVzaW5nIFBDUkUyX1BBUlRJQUxfSEFSRCBpbiB0aGlzIGNhc2UgZG9lcyB5aWVsZAorUENSRTJfRVJST1JfUEFSVElBTCwgYmVjYXVzZSB0aGVuIHRoZSBwYXJ0aWFsIG1hdGNoIHRha2VzIHByZWNlZGVuY2UuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNSIgaHJlZj0iI1RPQzEiPkVYQU1QTEUgT0YgUEFSVElBTCBNQVRDSElORyBVU0lORyBQQ1JFMlRFU1Q8L2E+PGJyPgorPFA+CitJZiB0aGUgPGI+cGFydGlhbF9zb2Z0PC9iPiAob3IgPGI+cHM8L2I+KSBtb2RpZmllciBpcyBwcmVzZW50IG9uIGEKKzxiPnBjcmUydGVzdDwvYj4gZGF0YSBsaW5lLCB0aGUgUENSRTJfUEFSVElBTF9TT0ZUIG9wdGlvbiBpcyB1c2VkIGZvciB0aGUgbWF0Y2guCitIZXJlIGlzIGEgcnVuIG9mIDxiPnBjcmUydGVzdDwvYj4gdGhhdCB1c2VzIHRoZSBkYXRlIGV4YW1wbGUgcXVvdGVkIGFib3ZlOgorPHByZT4KKyAgICByZSYjNjI7IC9eXGQ/XGQoamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpXGRcZCQvCisgIGRhdGEmIzYyOyAyNWp1bjA0XD1wcworICAgMDogMjVqdW4wNAorICAgMToganVuCisgIGRhdGEmIzYyOyAyNWRlYzNcPXBzCisgIFBhcnRpYWwgbWF0Y2g6IDIzZGVjMworICBkYXRhJiM2MjsgM2p1XD1wcworICBQYXJ0aWFsIG1hdGNoOiAzanUKKyAgZGF0YSYjNjI7IDNqdWpcPXBzCisgIE5vIG1hdGNoCisgIGRhdGEmIzYyOyBqXD1wcworICBObyBtYXRjaAorPC9wcmU+CitUaGUgZmlyc3QgZGF0YSBzdHJpbmcgaXMgbWF0Y2hlZCBjb21wbGV0ZWx5LCBzbyA8Yj5wY3JlMnRlc3Q8L2I+IHNob3dzIHRoZQorbWF0Y2hlZCBzdWJzdHJpbmdzLiBUaGUgcmVtYWluaW5nIGZvdXIgc3RyaW5ncyBkbyBub3QgbWF0Y2ggdGhlIGNvbXBsZXRlCitwYXR0ZXJuLCBidXQgdGhlIGZpcnN0IHR3byBhcmUgcGFydGlhbCBtYXRjaGVzLiBTaW1pbGFyIG91dHB1dCBpcyBvYnRhaW5lZAoraWYgREZBIG1hdGNoaW5nIGlzIHVzZWQuCis8L1A+Cis8UD4KK0lmIHRoZSA8Yj5wYXJ0aWFsX2hhcmQ8L2I+IChvciA8Yj5waDwvYj4pIG1vZGlmaWVyIGlzIHByZXNlbnQgb24gYQorPGI+cGNyZTJ0ZXN0PC9iPiBkYXRhIGxpbmUsIHRoZSBQQ1JFMl9QQVJUSUFMX0hBUkQgb3B0aW9uIGlzIHNldCBmb3IgdGhlIG1hdGNoLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzYiIGhyZWY9IiNUT0MxIj5NVUxUSS1TRUdNRU5UIE1BVENISU5HIFdJVEggcGNyZTJfZGZhX21hdGNoKCk8L2E+PGJyPgorPFA+CitXaGVuIGEgcGFydGlhbCBtYXRjaCBoYXMgYmVlbiBmb3VuZCB1c2luZyBhIERGQSBtYXRjaGluZyBmdW5jdGlvbiwgaXQgaXMKK3Bvc3NpYmxlIHRvIGNvbnRpbnVlIHRoZSBtYXRjaCBieSBwcm92aWRpbmcgYWRkaXRpb25hbCBzdWJqZWN0IGRhdGEgYW5kIGNhbGxpbmcKK3RoZSBmdW5jdGlvbiBhZ2FpbiB3aXRoIHRoZSBzYW1lIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiwgdGhpcyB0aW1lIHNldHRpbmcKK3RoZSBQQ1JFMl9ERkFfUkVTVEFSVCBvcHRpb24uIFlvdSBtdXN0IHBhc3MgdGhlIHNhbWUgd29ya2luZyBzcGFjZSBhcyBiZWZvcmUsCitiZWNhdXNlIHRoaXMgaXMgd2hlcmUgZGV0YWlscyBvZiB0aGUgcHJldmlvdXMgcGFydGlhbCBtYXRjaCBhcmUgc3RvcmVkLiBIZXJlIGlzCithbiBleGFtcGxlIHVzaW5nIDxiPnBjcmUydGVzdDwvYj46Cis8cHJlPgorICAgIHJlJiM2MjsgL15cZD9cZChqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYylcZFxkJC8KKyAgZGF0YSYjNjI7IDIzamFcPWRmYSxwcworICBQYXJ0aWFsIG1hdGNoOiAyM2phCisgIGRhdGEmIzYyOyBuMDVcPWRmYSxkZmFfcmVzdGFydAorICAgMDogbjA1Cis8L3ByZT4KK1RoZSBmaXJzdCBjYWxsIGhhcyAiMjNqYSIgYXMgdGhlIHN1YmplY3QsIGFuZCByZXF1ZXN0cyBwYXJ0aWFsIG1hdGNoaW5nOyB0aGUKK3NlY29uZCBjYWxsIGhhcyAibjA1IiBhcyB0aGUgc3ViamVjdCBmb3IgdGhlIGNvbnRpbnVlZCAocmVzdGFydGVkKSBtYXRjaC4KK05vdGljZSB0aGF0IHdoZW4gdGhlIG1hdGNoIGlzIGNvbXBsZXRlLCBvbmx5IHRoZSBsYXN0IHBhcnQgaXMgc2hvd247IFBDUkUyIGRvZXMKK25vdCByZXRhaW4gdGhlIHByZXZpb3VzbHkgcGFydGlhbGx5LW1hdGNoZWQgc3RyaW5nLiBJdCBpcyB1cCB0byB0aGUgY2FsbGluZworcHJvZ3JhbSB0byBkbyB0aGF0IGlmIGl0IG5lZWRzIHRvLgorPC9QPgorPFA+CitUaGF0IG1lYW5zIHRoYXQsIGZvciBhbiB1bmFuY2hvcmVkIHBhdHRlcm4sIGlmIGEgY29udGludWVkIG1hdGNoIGZhaWxzLCBpdCBpcworbm90IHBvc3NpYmxlIHRvIHRyeSBhZ2FpbiBhdCBhIG5ldyBzdGFydGluZyBwb2ludC4gQWxsIHRoaXMgZmFjaWxpdHkgaXMgY2FwYWJsZQorb2YgZG9pbmcgaXMgY29udGludWluZyB3aXRoIHRoZSBwcmV2aW91cyBtYXRjaCBhdHRlbXB0LiBJbiB0aGUgcHJldmlvdXMKK2V4YW1wbGUsIGlmIHRoZSBzZWNvbmQgc2V0IG9mIGRhdGEgaXMgInVnMjMiIHRoZSByZXN1bHQgaXMgbm8gbWF0Y2gsIGV2ZW4KK3Rob3VnaCB0aGVyZSB3b3VsZCBiZSBhIG1hdGNoIGZvciAiYXVnMjMiIGlmIHRoZSBlbnRpcmUgc3RyaW5nIHdlcmUgZ2l2ZW4gYXQKK29uY2UuIERlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24sIHRoaXMgbWF5IG9yIG1heSBub3QgYmUgd2hhdCB5b3Ugd2FudC4KK1RoZSBvbmx5IHdheSB0byBhbGxvdyBmb3Igc3RhcnRpbmcgYWdhaW4gYXQgdGhlIG5leHQgY2hhcmFjdGVyIGlzIHRvIHJldGFpbiB0aGUKK21hdGNoZWQgcGFydCBvZiB0aGUgc3ViamVjdCBhbmQgdHJ5IGEgbmV3IGNvbXBsZXRlIG1hdGNoLgorPC9QPgorPFA+CitZb3UgY2FuIHNldCB0aGUgUENSRTJfUEFSVElBTF9TT0ZUIG9yIFBDUkUyX1BBUlRJQUxfSEFSRCBvcHRpb25zIHdpdGgKK1BDUkUyX0RGQV9SRVNUQVJUIHRvIGNvbnRpbnVlIHBhcnRpYWwgbWF0Y2hpbmcgb3ZlciBtdWx0aXBsZSBzZWdtZW50cy4gVGhpcworZmFjaWxpdHkgY2FuIGJlIHVzZWQgdG8gcGFzcyB2ZXJ5IGxvbmcgc3ViamVjdCBzdHJpbmdzIHRvIHRoZSBERkEgbWF0Y2hpbmcKK2Z1bmN0aW9ucy4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM3IiBocmVmPSIjVE9DMSI+TVVMVEktU0VHTUVOVCBNQVRDSElORyBXSVRIIHBjcmUyX21hdGNoKCk8L2E+PGJyPgorPFA+CitVbmxpa2UgdGhlIERGQSBmdW5jdGlvbiwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlc3RhcnQgdGhlIHByZXZpb3VzIG1hdGNoIHdpdGgKK2EgbmV3IHNlZ21lbnQgb2YgZGF0YSB3aGVuIHVzaW5nIDxiPnBjcmUyX21hdGNoKCk8L2I+LiBJbnN0ZWFkLCBuZXcgZGF0YSBtdXN0IGJlCithZGRlZCB0byB0aGUgcHJldmlvdXMgc3ViamVjdCBzdHJpbmcsIGFuZCB0aGUgZW50aXJlIG1hdGNoIHJlLXJ1biwgc3RhcnRpbmcKK2Zyb20gdGhlIHBvaW50IHdoZXJlIHRoZSBwYXJ0aWFsIG1hdGNoIG9jY3VycmVkLiBFYXJsaWVyIGRhdGEgY2FuIGJlIGRpc2NhcmRlZC4KKzwvUD4KKzxQPgorSXQgaXMgYmVzdCB0byB1c2UgUENSRTJfUEFSVElBTF9IQVJEIGluIHRoaXMgc2l0dWF0aW9uLCBiZWNhdXNlIGl0IGRvZXMgbm90Cit0cmVhdCB0aGUgZW5kIG9mIGEgc2VnbWVudCBhcyB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IHdoZW4gbWF0Y2hpbmcgXHosIFxaLAorXGIsIFxCLCBhbmQgJC4gQ29uc2lkZXIgYW4gdW5hbmNob3JlZCBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBkYXRlczoKKzxwcmU+CisgICAgcmUmIzYyOyAvXGQ/XGQoamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpXGRcZC8KKyAgZGF0YSYjNjI7IFRoZSBkYXRlIGlzIDIzamFcPXBoCisgIFBhcnRpYWwgbWF0Y2g6IDIzamEKKzwvcHJlPgorQXQgdGhpcyBzdGFnZSwgYW4gYXBwbGljYXRpb24gY291bGQgZGlzY2FyZCB0aGUgdGV4dCBwcmVjZWRpbmcgIjIzamEiLCBhZGQgb24KK3RleHQgZnJvbSB0aGUgbmV4dCBzZWdtZW50LCBhbmQgY2FsbCB0aGUgbWF0Y2hpbmcgZnVuY3Rpb24gYWdhaW4uIFVubGlrZSB0aGUKK0RGQSBtYXRjaGluZyBmdW5jdGlvbiwgdGhlIGVudGlyZSBtYXRjaGluZyBzdHJpbmcgbXVzdCBhbHdheXMgYmUgYXZhaWxhYmxlLAorYW5kIHRoZSBjb21wbGV0ZSBtYXRjaGluZyBwcm9jZXNzIG9jY3VycyBmb3IgZWFjaCBjYWxsLCBzbyBtb3JlIG1lbW9yeSBhbmQgbW9yZQorcHJvY2Vzc2luZyB0aW1lIGlzIG5lZWRlZC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM4IiBocmVmPSIjVE9DMSI+SVNTVUVTIFdJVEggTVVMVEktU0VHTUVOVCBNQVRDSElORzwvYT48YnI+Cis8UD4KK0NlcnRhaW4gdHlwZXMgb2YgcGF0dGVybiBtYXkgZ2l2ZSBwcm9ibGVtcyB3aXRoIG11bHRpLXNlZ21lbnQgbWF0Y2hpbmcsCit3aGljaGV2ZXIgbWF0Y2hpbmcgZnVuY3Rpb24gaXMgdXNlZC4KKzwvUD4KKzxQPgorMS4gSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgYSB0ZXN0IGZvciB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSwgeW91IG5lZWQgdG8gcGFzcwordGhlIFBDUkUyX05PVEJPTCBvcHRpb24gd2hlbiB0aGUgc3ViamVjdCBzdHJpbmcgZm9yIGFueSBjYWxsIGRvZXMgc3RhcnQgYXQgdGhlCitiZWdpbm5pbmcgb2YgYSBsaW5lLiBUaGVyZSBpcyBhbHNvIGEgUENSRTJfTk9URU9MIG9wdGlvbiwgYnV0IGluIHByYWN0aWNlIHdoZW4KK2RvaW5nIG11bHRpLXNlZ21lbnQgbWF0Y2hpbmcgeW91IHNob3VsZCBiZSB1c2luZyBQQ1JFMl9QQVJUSUFMX0hBUkQsIHdoaWNoCitpbmNsdWRlcyB0aGUgZWZmZWN0IG9mIFBDUkUyX05PVEVPTC4KKzwvUD4KKzxQPgorMi4gSWYgYSBwYXR0ZXJuIGNvbnRhaW5zIGEgbG9va2JlaGluZCBhc3NlcnRpb24sIGNoYXJhY3RlcnMgdGhhdCBwcmVjZWRlIHRoZQorc3RhcnQgb2YgdGhlIHBhcnRpYWwgbWF0Y2ggbWF5IGhhdmUgYmVlbiBpbnNwZWN0ZWQgZHVyaW5nIHRoZSBtYXRjaGluZyBwcm9jZXNzLgorV2hlbiB1c2luZyA8Yj5wY3JlMl9tYXRjaCgpPC9iPiwgc3VmZmljaWVudCBjaGFyYWN0ZXJzIG11c3QgYmUgcmV0YWluZWQgZm9yIHRoZQorbmV4dCBtYXRjaCBhdHRlbXB0LiBZb3UgY2FuIGVuc3VyZSB0aGF0IGVub3VnaCBjaGFyYWN0ZXJzIGFyZSByZXRhaW5lZCBieSBkb2luZwordGhlIGZvbGxvd2luZzoKKzwvUD4KKzxQPgorQmVmb3JlIGRvaW5nIGFueSBtYXRjaGluZywgZmluZCB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IGxvb2tiZWhpbmQgaW4gdGhlCitwYXR0ZXJuIGJ5IGNhbGxpbmcgPGI+cGNyZTJfcGF0dGVybl9pbmZvKCk8L2I+IHdpdGggdGhlIFBDUkUyX0lORk9fTUFYTE9PS0JFSElORAorb3B0aW9uLiBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyBjb3VudCBpcyBpbiBjaGFyYWN0ZXJzLCBub3QgY29kZSB1bml0cy4gQWZ0ZXIgYQorcGFydGlhbCBtYXRjaCwgbW92aW5nIGJhY2sgZnJvbSB0aGUgb3ZlY3RvclswXSBvZmZzZXQgaW4gdGhlIHN1YmplY3QgYnkgdGhlCitudW1iZXIgb2YgY2hhcmFjdGVycyBnaXZlbiBmb3IgdGhlIG1heGltdW0gbG9va2JlaGluZCBnZXRzIHlvdSB0byB0aGUgZWFybGllc3QKK2NoYXJhY3RlciB0aGF0IG11c3QgYmUgcmV0YWluZWQuIEluIGEgbm9uLVVURiBvciBhIDMyLWJpdCBzaXR1YXRpb24sIG1vdmluZworYmFjayBpcyBqdXN0IGEgc3VidHJhY3Rpb24sIGJ1dCBpbiBVVEYtOCBvciBVVEYtMTYgeW91IGhhdmUgdG8gY291bnQgY2hhcmFjdGVycword2hpbGUgbW92aW5nIGJhY2sgdGhyb3VnaCB0aGUgY29kZSB1bml0cy4KKzwvUD4KKzxQPgorQ2hhcmFjdGVycyBiZWZvcmUgdGhlIHBvaW50IHlvdSBoYXZlIG5vdyByZWFjaGVkIGNhbiBiZSBkaXNjYXJkZWQsIGFuZCBhZnRlcgordGhlIG5leHQgc2VnbWVudCBoYXMgYmVlbiBhZGRlZCB0byB3aGF0IGlzIHJldGFpbmVkLCB5b3Ugc2hvdWxkIHJ1biB0aGUgbmV4dAorbWF0Y2ggd2l0aCB0aGUgPGI+c3RhcnRvZmZzZXQ8L2I+IGFyZ3VtZW50IHNldCBzbyB0aGF0IHRoZSBtYXRjaCBiZWdpbnMgYXQgdGhlCitzYW1lIHBvaW50IGFzIGJlZm9yZS4KKzwvUD4KKzxQPgorRm9yIGV4YW1wbGUsIGlmIHRoZSBwYXR0ZXJuICIoPyYjNjA7PTEyMylhYmMiIGlzIHBhcnRpYWxseSBtYXRjaGVkIGFnYWluc3QgdGhlCitzdHJpbmcgInh4MTIzYWIiLCB0aGUgb3ZlY3RvciBvZmZzZXRzIGFyZSA1IGFuZCA3ICgiYWIiKS4gVGhlIG1heGltdW0KK2xvb2tiZWhpbmQgY291bnQgaXMgMywgc28gYWxsIGNoYXJhY3RlcnMgYmVmb3JlIG9mZnNldCAyIGNhbiBiZSBkaXNjYXJkZWQuIFRoZQordmFsdWUgb2YgPGI+c3RhcnRvZmZzZXQ8L2I+IGZvciB0aGUgbmV4dCBtYXRjaCBzaG91bGQgYmUgMy4gV2hlbiA8Yj5wY3JlMnRlc3Q8L2I+CitkaXNwbGF5cyBhIHBhcnRpYWwgbWF0Y2gsIGl0IGluZGljYXRlcyB0aGUgbG9va2JlaGluZCBjaGFyYWN0ZXJzIHdpdGggJyYjNjA7JworY2hhcmFjdGVyczoKKzxwcmU+CisgICAgcmUmIzYyOyAiKD8mIzYwOz0xMjMpYWJjIgorICBkYXRhJiM2MjsgeHgxMjNhYlw9cGgKKyAgUGFydGlhbCBtYXRjaDogMTIzYWIKKyAgICAgICAgICAgICAgICAgJiM2MDsmIzYwOyYjNjA7Cis8L1BSRT4KKzwvUD4KKzxQPgorMy4gQmVjYXVzZSBhIHBhcnRpYWwgbWF0Y2ggbXVzdCBhbHdheXMgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCB3aGF0CittaWdodCBiZSBjb25zaWRlcmVkIGEgcGFydGlhbCBtYXRjaCBvZiBhbiBlbXB0eSBzdHJpbmcgYWN0dWFsbHkgZ2l2ZXMgYSAibm8KK21hdGNoIiByZXN1bHQuIEZvciBleGFtcGxlOgorPHByZT4KKyAgICByZSYjNjI7IC9jKD8mIzYwOz1hYmMpeC8KKyAgZGF0YSYjNjI7IGFiXD1wcworICBObyBtYXRjaAorPC9wcmU+CitJZiB0aGUgbmV4dCBzZWdtZW50IGJlZ2lucyAiY3giLCBhIG1hdGNoIHNob3VsZCBiZSBmb3VuZCwgYnV0IHRoaXMgd2lsbCBvbmx5CitoYXBwZW4gaWYgY2hhcmFjdGVycyBmcm9tIHRoZSBwcmV2aW91cyBzZWdtZW50IGFyZSByZXRhaW5lZC4gRm9yIHRoaXMgcmVhc29uLCBhCisibm8gbWF0Y2giIHJlc3VsdCBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgYXMgInBhcnRpYWwgbWF0Y2ggb2YgYW4gZW1wdHkgc3RyaW5nIgord2hlbiB0aGUgcGF0dGVybiBjb250YWlucyBsb29rYmVoaW5kcy4KKzwvUD4KKzxQPgorNC4gTWF0Y2hpbmcgYSBzdWJqZWN0IHN0cmluZyB0aGF0IGlzIHNwbGl0IGludG8gbXVsdGlwbGUgc2VnbWVudHMgbWF5IG5vdAorYWx3YXlzIHByb2R1Y2UgZXhhY3RseSB0aGUgc2FtZSByZXN1bHQgYXMgbWF0Y2hpbmcgb3ZlciBvbmUgc2luZ2xlIGxvbmcgc3RyaW5nLAorZXNwZWNpYWxseSB3aGVuIFBDUkUyX1BBUlRJQUxfU09GVCBpcyB1c2VkLiBUaGUgc2VjdGlvbiAiUGFydGlhbCBNYXRjaGluZyBhbmQKK1dvcmQgQm91bmRhcmllcyIgYWJvdmUgZGVzY3JpYmVzIGFuIGlzc3VlIHRoYXQgYXJpc2VzIGlmIHRoZSBwYXR0ZXJuIGVuZHMgd2l0aAorXGIgb3IgXEIuIEFub3RoZXIga2luZCBvZiBkaWZmZXJlbmNlIG1heSBvY2N1ciB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZQorbWF0Y2hpbmcgcG9zc2liaWxpdGllcywgYmVjYXVzZSAoZm9yIFBDUkUyX1BBUlRJQUxfU09GVCkgYSBwYXJ0aWFsIG1hdGNoIHJlc3VsdAoraXMgZ2l2ZW4gb25seSB3aGVuIHRoZXJlIGFyZSBubyBjb21wbGV0ZWQgbWF0Y2hlcy4gVGhpcyBtZWFucyB0aGF0IGFzIHNvb24gYXMKK3RoZSBzaG9ydGVzdCBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgY29udGludWF0aW9uIHRvIGEgbmV3IHN1YmplY3Qgc2VnbWVudCBpcyBubworbG9uZ2VyIHBvc3NpYmxlLiBDb25zaWRlciB0aGlzIDxiPnBjcmUydGVzdDwvYj4gZXhhbXBsZToKKzxwcmU+CisgICAgcmUmIzYyOyAvZG9nKHNib2R5KT8vCisgIGRhdGEmIzYyOyBkb2dzYlw9cHMKKyAgIDA6IGRvZworICBkYXRhJiM2MjsgZG9cPXBzLGRmYQorICBQYXJ0aWFsIG1hdGNoOiBkbworICBkYXRhJiM2MjsgZ3NiXD1wcyxkZmEsZGZhX3Jlc3RhcnQKKyAgIDA6IGcKKyAgZGF0YSYjNjI7IGRvZ3Nib2R5XD1kZmEKKyAgIDA6IGRvZ3Nib2R5CisgICAxOiBkb2cKKzwvcHJlPgorVGhlIGZpcnN0IGRhdGEgbGluZSBwYXNzZXMgdGhlIHN0cmluZyAiZG9nc2IiIHRvIGEgc3RhbmRhcmQgbWF0Y2hpbmcgZnVuY3Rpb24sCitzZXR0aW5nIHRoZSBQQ1JFMl9QQVJUSUFMX1NPRlQgb3B0aW9uLiBBbHRob3VnaCB0aGUgc3RyaW5nIGlzIGEgcGFydGlhbCBtYXRjaAorZm9yICJkb2dzYm9keSIsIHRoZSByZXN1bHQgaXMgbm90IFBDUkUyX0VSUk9SX1BBUlRJQUwsIGJlY2F1c2UgdGhlIHNob3J0ZXIKK3N0cmluZyAiZG9nIiBpcyBhIGNvbXBsZXRlIG1hdGNoLiBTaW1pbGFybHksIHdoZW4gdGhlIHN1YmplY3QgaXMgcHJlc2VudGVkIHRvCithIERGQSBtYXRjaGluZyBmdW5jdGlvbiBpbiBzZXZlcmFsIHBhcnRzICgiZG8iIGFuZCAiZ3NiIiBiZWluZyB0aGUgZmlyc3QgdHdvKQordGhlIG1hdGNoIHN0b3BzIHdoZW4gImRvZyIgaGFzIGJlZW4gZm91bmQsIGFuZCBpdCBpcyBub3QgcG9zc2libGUgdG8gY29udGludWUuCitPbiB0aGUgb3RoZXIgaGFuZCwgaWYgImRvZ3Nib2R5IiBpcyBwcmVzZW50ZWQgYXMgYSBzaW5nbGUgc3RyaW5nLCBhIERGQQorbWF0Y2hpbmcgZnVuY3Rpb24gZmluZHMgYm90aCBtYXRjaGVzLgorPC9QPgorPFA+CitCZWNhdXNlIG9mIHRoZXNlIHByb2JsZW1zLCBpdCBpcyBiZXN0IHRvIHVzZSBQQ1JFMl9QQVJUSUFMX0hBUkQgd2hlbiBtYXRjaGluZworbXVsdGktc2VnbWVudCBkYXRhLiBUaGUgZXhhbXBsZSBhYm92ZSB0aGVuIGJlaGF2ZXMgZGlmZmVyZW50bHk6Cis8cHJlPgorICAgIHJlJiM2MjsgL2RvZyhzYm9keSk/LworICBkYXRhJiM2MjsgZG9nc2JcPXBoCisgIFBhcnRpYWwgbWF0Y2g6IGRvZ3NiCisgIGRhdGEmIzYyOyBkb1w9cHMsZGZhCisgIFBhcnRpYWwgbWF0Y2g6IGRvCisgIGRhdGEmIzYyOyBnc2JcPXBoLGRmYSxkZmFfcmVzdGFydAorICBQYXJ0aWFsIG1hdGNoOiBnc2IKKzwvcHJlPgorNS4gUGF0dGVybnMgdGhhdCBjb250YWluIGFsdGVybmF0aXZlcyBhdCB0aGUgdG9wIGxldmVsIHdoaWNoIGRvIG5vdCBhbGwgc3RhcnQKK3dpdGggdGhlIHNhbWUgcGF0dGVybiBpdGVtIG1heSBub3Qgd29yayBhcyBleHBlY3RlZCB3aGVuIFBDUkUyX0RGQV9SRVNUQVJUIGlzCit1c2VkLiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBwYXR0ZXJuOgorPHByZT4KKyAgMTIzNHwzNzg5Cis8L3ByZT4KK0lmIHRoZSBmaXJzdCBwYXJ0IG9mIHRoZSBzdWJqZWN0IGlzICJBQkMxMjMiLCBhIHBhcnRpYWwgbWF0Y2ggb2YgdGhlIGZpcnN0CithbHRlcm5hdGl2ZSBpcyBmb3VuZCBhdCBvZmZzZXQgMy4gVGhlcmUgaXMgbm8gcGFydGlhbCBtYXRjaCBmb3IgdGhlIHNlY29uZAorYWx0ZXJuYXRpdmUsIGJlY2F1c2Ugc3VjaCBhIG1hdGNoIGRvZXMgbm90IHN0YXJ0IGF0IHRoZSBzYW1lIHBvaW50IGluIHRoZQorc3ViamVjdCBzdHJpbmcuIEF0dGVtcHRpbmcgdG8gY29udGludWUgd2l0aCB0aGUgc3RyaW5nICI3ODkwIiBkb2VzIG5vdCB5aWVsZCBhCittYXRjaCBiZWNhdXNlIG9ubHkgdGhvc2UgYWx0ZXJuYXRpdmVzIHRoYXQgbWF0Y2ggYXQgb25lIHBvaW50IGluIHRoZSBzdWJqZWN0CithcmUgcmVtZW1iZXJlZC4gVGhlIHByb2JsZW0gYXJpc2VzIGJlY2F1c2UgdGhlIHN0YXJ0IG9mIHRoZSBzZWNvbmQgYWx0ZXJuYXRpdmUKK21hdGNoZXMgd2l0aGluIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZS4gVGhlcmUgaXMgbm8gcHJvYmxlbSB3aXRoIGFuY2hvcmVkCitwYXR0ZXJucyBvciBwYXR0ZXJucyBzdWNoIGFzOgorPHByZT4KKyAgMTIzNHxBQkNECis8L3ByZT4KK3doZXJlIG5vIHN0cmluZyBjYW4gYmUgYSBwYXJ0aWFsIG1hdGNoIGZvciBib3RoIGFsdGVybmF0aXZlcy4gVGhpcyBpcyBub3QgYQorcHJvYmxlbSBpZiBhIHN0YW5kYXJkIG1hdGNoaW5nIGZ1bmN0aW9uIGlzIHVzZWQsIGJlY2F1c2UgdGhlIGVudGlyZSBtYXRjaCBoYXMKK3RvIGJlIHJlcnVuIGVhY2ggdGltZToKKzxwcmU+CisgICAgcmUmIzYyOyAvMTIzNHwzNzg5LworICBkYXRhJiM2MjsgQUJDMTIzXD1waAorICBQYXJ0aWFsIG1hdGNoOiAxMjMKKyAgZGF0YSYjNjI7IDEyMzc4OTAKKyAgIDA6IDM3ODkKKzwvcHJlPgorT2YgY291cnNlLCBpbnN0ZWFkIG9mIHVzaW5nIFBDUkUyX0RGQV9SRVNUQVJULCB0aGUgc2FtZSB0ZWNobmlxdWUgb2YgcmUtcnVubmluZwordGhlIGVudGlyZSBtYXRjaCBjYW4gYWxzbyBiZSB1c2VkIHdpdGggdGhlIERGQSBtYXRjaGluZyBmdW5jdGlvbi4gQW5vdGhlcgorcG9zc2liaWxpdHkgaXMgdG8gd29yayB3aXRoIHR3byBidWZmZXJzLiBJZiBhIHBhcnRpYWwgbWF0Y2ggYXQgb2Zmc2V0IDxpPm48L2k+CitpbiB0aGUgZmlyc3QgYnVmZmVyIGlzIGZvbGxvd2VkIGJ5ICJubyBtYXRjaCIgd2hlbiBQQ1JFMl9ERkFfUkVTVEFSVCBpcyB1c2VkIG9uCit0aGUgc2Vjb25kIGJ1ZmZlciwgeW91IGNhbiB0aGVuIHRyeSBhIG5ldyBtYXRjaCBzdGFydGluZyBhdCBvZmZzZXQgPGk+bisxPC9pPiBpbgordGhlIGZpcnN0IGJ1ZmZlci4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM5IiBocmVmPSIjVE9DMSI+QVVUSE9SPC9hPjxicj4KKzxQPgorUGhpbGlwIEhhemVsCis8YnI+CitVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCis8YnI+CitDYW1icmlkZ2UsIEVuZ2xhbmQuCis8YnI+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTAiIGhyZWY9IiNUT0MxIj5SRVZJU0lPTjwvYT48YnI+Cis8UD4KK0xhc3QgdXBkYXRlZDogMjIgRGVjZW1iZXIgMjAxNAorPGJyPgorQ29weXJpZ2h0ICZjb3B5OyAxOTk3LTIwMTQgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCis8YnI+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMnBhdHRlcm4uaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUycGF0dGVybi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4OGU5MzEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnBhdHRlcm4uaHRtbApAQCAtMCwwICsxLDMzOTcgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJwYXR0ZXJuIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMnBhdHRlcm4gbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzx1bD4KKzxsaT48YSBuYW1lPSJUT0MxIiBocmVmPSIjU0VDMSI+UENSRTIgUkVHVUxBUiBFWFBSRVNTSU9OIERFVEFJTFM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMiIgaHJlZj0iI1NFQzIiPlNQRUNJQUwgU1RBUlQtT0YtUEFUVEVSTiBJVEVNUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MzIiBocmVmPSIjU0VDMyI+RUJDRElDIENIQVJBQ1RFUiBDT0RFUzwvYT4KKzxsaT48YSBuYW1lPSJUT0M0IiBocmVmPSIjU0VDNCI+Q0hBUkFDVEVSUyBBTkQgTUVUQUNIQVJBQ1RFUlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNSIgaHJlZj0iI1NFQzUiPkJBQ0tTTEFTSDwvYT4KKzxsaT48YSBuYW1lPSJUT0M2IiBocmVmPSIjU0VDNiI+Q0lSQ1VNRkxFWCBBTkQgRE9MTEFSPC9hPgorPGxpPjxhIG5hbWU9IlRPQzciIGhyZWY9IiNTRUM3Ij5GVUxMIFNUT1AgKFBFUklPRCwgRE9UKSBBTkQgXE48L2E+Cis8bGk+PGEgbmFtZT0iVE9DOCIgaHJlZj0iI1NFQzgiPk1BVENISU5HIEEgU0lOR0xFIENPREUgVU5JVDwvYT4KKzxsaT48YSBuYW1lPSJUT0M5IiBocmVmPSIjU0VDOSI+U1FVQVJFIEJSQUNLRVRTIEFORCBDSEFSQUNURVIgQ0xBU1NFUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMCIgaHJlZj0iI1NFQzEwIj5QT1NJWCBDSEFSQUNURVIgQ0xBU1NFUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMSIgaHJlZj0iI1NFQzExIj5DT01QQVRJQklMSVRZIEZFQVRVUkUgRk9SIFdPUkQgQk9VTkRBUklFUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMiIgaHJlZj0iI1NFQzEyIj5WRVJUSUNBTCBCQVI8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTMiIGhyZWY9IiNTRUMxMyI+SU5URVJOQUwgT1BUSU9OIFNFVFRJTkc8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTQiIGhyZWY9IiNTRUMxNCI+U1VCUEFUVEVSTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTUiIGhyZWY9IiNTRUMxNSI+RFVQTElDQVRFIFNVQlBBVFRFUk4gTlVNQkVSUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxNiIgaHJlZj0iI1NFQzE2Ij5OQU1FRCBTVUJQQVRURVJOUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxNyIgaHJlZj0iI1NFQzE3Ij5SRVBFVElUSU9OPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE4IiBocmVmPSIjU0VDMTgiPkFUT01JQyBHUk9VUElORyBBTkQgUE9TU0VTU0lWRSBRVUFOVElGSUVSUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxOSIgaHJlZj0iI1NFQzE5Ij5CQUNLIFJFRkVSRU5DRVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjAiIGhyZWY9IiNTRUMyMCI+QVNTRVJUSU9OUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MyMSIgaHJlZj0iI1NFQzIxIj5DT05ESVRJT05BTCBTVUJQQVRURVJOUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MyMiIgaHJlZj0iI1NFQzIyIj5DT01NRU5UUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MyMyIgaHJlZj0iI1NFQzIzIj5SRUNVUlNJVkUgUEFUVEVSTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjQiIGhyZWY9IiNTRUMyNCI+U1VCUEFUVEVSTlMgQVMgU1VCUk9VVElORVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjUiIGhyZWY9IiNTRUMyNSI+T05JR1VSVU1BIFNVQlJPVVRJTkUgU1lOVEFYPC9hPgorPGxpPjxhIG5hbWU9IlRPQzI2IiBocmVmPSIjU0VDMjYiPkNBTExPVVRTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzI3IiBocmVmPSIjU0VDMjciPkJBQ0tUUkFDS0lORyBDT05UUk9MPC9hPgorPGxpPjxhIG5hbWU9IlRPQzI4IiBocmVmPSIjU0VDMjgiPlNFRSBBTFNPPC9hPgorPGxpPjxhIG5hbWU9IlRPQzI5IiBocmVmPSIjU0VDMjkiPkFVVEhPUjwvYT4KKzxsaT48YSBuYW1lPSJUT0MzMCIgaHJlZj0iI1NFQzMwIj5SRVZJU0lPTjwvYT4KKzwvdWw+Cis8YnI+PGEgbmFtZT0iU0VDMSIgaHJlZj0iI1RPQzEiPlBDUkUyIFJFR1VMQVIgRVhQUkVTU0lPTiBERVRBSUxTPC9hPjxicj4KKzxQPgorVGhlIHN5bnRheCBhbmQgc2VtYW50aWNzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBQQ1JFMgorYXJlIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuIFRoZXJlIGlzIGEgcXVpY2stcmVmZXJlbmNlIHN5bnRheCBzdW1tYXJ5IGluIHRoZQorPGEgaHJlZj0icGNyZTJzeW50YXguaHRtbCI+PGI+cGNyZTJzeW50YXg8L2I+PC9hPgorcGFnZS4gUENSRTIgdHJpZXMgdG8gbWF0Y2ggUGVybCBzeW50YXggYW5kIHNlbWFudGljcyBhcyBjbG9zZWx5IGFzIGl0IGNhbi4KK1BDUkUyIGFsc28gc3VwcG9ydHMgc29tZSBhbHRlcm5hdGl2ZSByZWd1bGFyIGV4cHJlc3Npb24gc3ludGF4ICh3aGljaCBkb2VzIG5vdAorY29uZmxpY3Qgd2l0aCB0aGUgUGVybCBzeW50YXgpIGluIG9yZGVyIHRvIHByb3ZpZGUgc29tZSBjb21wYXRpYmlsaXR5IHdpdGgKK3JlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gUHl0aG9uLCAuTkVULCBhbmQgT25pZ3VydW1hLgorPC9QPgorPFA+CitQZXJsJ3MgcmVndWxhciBleHByZXNzaW9ucyBhcmUgZGVzY3JpYmVkIGluIGl0cyBvd24gZG9jdW1lbnRhdGlvbiwgYW5kIHJlZ3VsYXIKK2V4cHJlc3Npb25zIGluIGdlbmVyYWwgYXJlIGNvdmVyZWQgaW4gYSBudW1iZXIgb2YgYm9va3MsIHNvbWUgb2Ygd2hpY2ggaGF2ZQorY29waW91cyBleGFtcGxlcy4gSmVmZnJleSBGcmllZGwncyAiTWFzdGVyaW5nIFJlZ3VsYXIgRXhwcmVzc2lvbnMiLCBwdWJsaXNoZWQKK2J5IE8nUmVpbGx5LCBjb3ZlcnMgcmVndWxhciBleHByZXNzaW9ucyBpbiBncmVhdCBkZXRhaWwuIFRoaXMgZGVzY3JpcHRpb24gb2YKK1BDUkUyJ3MgcmVndWxhciBleHByZXNzaW9ucyBpcyBpbnRlbmRlZCBhcyByZWZlcmVuY2UgbWF0ZXJpYWwuCis8L1A+Cis8UD4KK1RoaXMgZG9jdW1lbnQgZGlzY3Vzc2VzIHRoZSBwYXR0ZXJucyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgUENSRTIgd2hlbiBpdHMgbWFpbgorbWF0Y2hpbmcgZnVuY3Rpb24sIDxiPnBjcmUyX21hdGNoKCk8L2I+LCBpcyB1c2VkLiBQQ1JFMiBhbHNvIGhhcyBhbiBhbHRlcm5hdGl2ZQorbWF0Y2hpbmcgZnVuY3Rpb24sIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiwgd2hpY2ggbWF0Y2hlcyB1c2luZyBhIGRpZmZlcmVudAorYWxnb3JpdGhtIHRoYXQgaXMgbm90IFBlcmwtY29tcGF0aWJsZS4gU29tZSBvZiB0aGUgZmVhdHVyZXMgZGlzY3Vzc2VkIGJlbG93IGFyZQorbm90IGF2YWlsYWJsZSB3aGVuIERGQSBtYXRjaGluZyBpcyB1c2VkLiBUaGUgYWR2YW50YWdlcyBhbmQgZGlzYWR2YW50YWdlcyBvZgordGhlIGFsdGVybmF0aXZlIGZ1bmN0aW9uLCBhbmQgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgbm9ybWFsIGZ1bmN0aW9uLCBhcmUKK2Rpc2N1c3NlZCBpbiB0aGUKKzxhIGhyZWY9InBjcmUybWF0Y2hpbmcuaHRtbCI+PGI+cGNyZTJtYXRjaGluZzwvYj48L2E+CitwYWdlLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzIiIGhyZWY9IiNUT0MxIj5TUEVDSUFMIFNUQVJULU9GLVBBVFRFUk4gSVRFTVM8L2E+PGJyPgorPFA+CitBIG51bWJlciBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byA8Yj5wY3JlMl9jb21waWxlKCk8L2I+IGNhbiBhbHNvIGJlIHNldAorYnkgc3BlY2lhbCBpdGVtcyBhdCB0aGUgc3RhcnQgb2YgYSBwYXR0ZXJuLiBUaGVzZSBhcmUgbm90IFBlcmwtY29tcGF0aWJsZSwgYnV0CithcmUgcHJvdmlkZWQgdG8gbWFrZSB0aGVzZSBvcHRpb25zIGFjY2Vzc2libGUgdG8gcGF0dGVybiB3cml0ZXJzIHdobyBhcmUgbm90CithYmxlIHRvIGNoYW5nZSB0aGUgcHJvZ3JhbSB0aGF0IHByb2Nlc3NlcyB0aGUgcGF0dGVybi4gQW55IG51bWJlciBvZiB0aGVzZQoraXRlbXMgbWF5IGFwcGVhciwgYnV0IHRoZXkgbXVzdCBhbGwgYmUgdG9nZXRoZXIgcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIHRoZQorcGF0dGVybiBzdHJpbmcsIGFuZCB0aGUgbGV0dGVycyBtdXN0IGJlIGluIHVwcGVyIGNhc2UuCis8L1A+Cis8YnI+PGI+CitVVEYgc3VwcG9ydAorPC9iPjxicj4KKzxQPgorSW4gdGhlIDgtYml0IGFuZCAxNi1iaXQgUENSRTIgbGlicmFyaWVzLCBjaGFyYWN0ZXJzIG1heSBiZSBjb2RlZCBlaXRoZXIgYXMKK3NpbmdsZSBjb2RlIHVuaXRzLCBvciBhcyBtdWx0aXBsZSBVVEYtOCBvciBVVEYtMTYgY29kZSB1bml0cy4gVVRGLTMyIGNhbiBiZQorc3BlY2lmaWVkIGZvciB0aGUgMzItYml0IGxpYnJhcnksIGluIHdoaWNoIGNhc2UgaXQgY29uc3RyYWlucyB0aGUgY2hhcmFjdGVyCit2YWx1ZXMgdG8gdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50cy4gVG8gcHJvY2VzcyBVVEYgc3RyaW5ncywgUENSRTIgbXVzdCBiZQorYnVpbHQgdG8gaW5jbHVkZSBVbmljb2RlIHN1cHBvcnQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KS4gV2hlbiB1c2luZyBVVEYgc3RyaW5ncworeW91IG11c3QgZWl0aGVyIGNhbGwgdGhlIGNvbXBpbGluZyBmdW5jdGlvbiB3aXRoIHRoZSBQQ1JFMl9VVEYgb3B0aW9uLCBvciB0aGUKK3BhdHRlcm4gbXVzdCBzdGFydCB3aXRoIHRoZSBzcGVjaWFsIHNlcXVlbmNlICgqVVRGKSwgd2hpY2ggaXMgZXF1aXZhbGVudCB0bworc2V0dGluZyB0aGUgcmVsZXZhbnQgb3B0aW9uLiBIb3cgc2V0dGluZyBhIFVURiBtb2RlIGFmZmVjdHMgcGF0dGVybiBtYXRjaGluZyBpcworbWVudGlvbmVkIGluIHNldmVyYWwgcGxhY2VzIGJlbG93LiBUaGVyZSBpcyBhbHNvIGEgc3VtbWFyeSBvZiBmZWF0dXJlcyBpbiB0aGUKKzxhIGhyZWY9InBjcmUydW5pY29kZS5odG1sIj48Yj5wY3JlMnVuaWNvZGU8L2I+PC9hPgorcGFnZS4KKzwvUD4KKzxQPgorU29tZSBhcHBsaWNhdGlvbnMgdGhhdCBhbGxvdyB0aGVpciB1c2VycyB0byBzdXBwbHkgcGF0dGVybnMgbWF5IHdpc2ggdG8KK3Jlc3RyaWN0IHRoZW0gdG8gbm9uLVVURiBkYXRhIGZvciBzZWN1cml0eSByZWFzb25zLiBJZiB0aGUgUENSRTJfTkVWRVJfVVRGCitvcHRpb24gaXMgcGFzc2VkIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4sICgqVVRGKSBpcyBub3QgYWxsb3dlZCwgYW5kIGl0cworYXBwZWFyYW5jZSBpbiBhIHBhdHRlcm4gY2F1c2VzIGFuIGVycm9yLgorPC9QPgorPGJyPjxiPgorVW5pY29kZSBwcm9wZXJ0eSBzdXBwb3J0Cis8L2I+PGJyPgorPFA+CitBbm90aGVyIHNwZWNpYWwgc2VxdWVuY2UgdGhhdCBtYXkgYXBwZWFyIGF0IHRoZSBzdGFydCBvZiBhIHBhdHRlcm4gaXMgKCpVQ1ApLgorVGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHNldHRpbmcgdGhlIFBDUkUyX1VDUCBvcHRpb246IGl0IGNhdXNlcyBzZXF1ZW5jZXMKK3N1Y2ggYXMgXGQgYW5kIFx3IHRvIHVzZSBVbmljb2RlIHByb3BlcnRpZXMgdG8gZGV0ZXJtaW5lIGNoYXJhY3RlciB0eXBlcywKK2luc3RlYWQgb2YgcmVjb2duaXppbmcgb25seSBjaGFyYWN0ZXJzIHdpdGggY29kZXMgbGVzcyB0aGFuIDI1NiB2aWEgYSBsb29rdXAKK3RhYmxlLgorPC9QPgorPFA+CitTb21lIGFwcGxpY2F0aW9ucyB0aGF0IGFsbG93IHRoZWlyIHVzZXJzIHRvIHN1cHBseSBwYXR0ZXJucyBtYXkgd2lzaCB0bworcmVzdHJpY3QgdGhlbSBmb3Igc2VjdXJpdHkgcmVhc29ucy4gSWYgdGhlIFBDUkUyX05FVkVSX1VDUCBvcHRpb24gaXMgcGFzc2VkIHRvCis8Yj5wY3JlMl9jb21waWxlKCk8L2I+LCAoKlVDUCkgaXMgbm90IGFsbG93ZWQsIGFuZCBpdHMgYXBwZWFyYW5jZSBpbiBhIHBhdHRlcm4KK2NhdXNlcyBhbiBlcnJvci4KKzwvUD4KKzxicj48Yj4KK0xvY2tpbmcgb3V0IGVtcHR5IHN0cmluZyBtYXRjaGluZworPC9iPjxicj4KKzxQPgorU3RhcnRpbmcgYSBwYXR0ZXJuIHdpdGggKCpOT1RFTVBUWSkgb3IgKCpOT1RFTVBUWV9BVFNUQVJUKSBoYXMgdGhlIHNhbWUgZWZmZWN0CithcyBwYXNzaW5nIHRoZSBQQ1JFMl9OT1RFTVBUWSBvciBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIG9wdGlvbiB0byB3aGljaGV2ZXIKK21hdGNoaW5nIGZ1bmN0aW9uIGlzIHN1YnNlcXVlbnRseSBjYWxsZWQgdG8gbWF0Y2ggdGhlIHBhdHRlcm4uIFRoZXNlIG9wdGlvbnMKK2xvY2sgb3V0IHRoZSBtYXRjaGluZyBvZiBlbXB0eSBzdHJpbmdzLCBlaXRoZXIgZW50aXJlbHksIG9yIG9ubHkgYXQgdGhlIHN0YXJ0CitvZiB0aGUgc3ViamVjdC4KKzwvUD4KKzxicj48Yj4KK0Rpc2FibGluZyBhdXRvLXBvc3Nlc3NpZmljYXRpb24KKzwvYj48YnI+Cis8UD4KK0lmIGEgcGF0dGVybiBzdGFydHMgd2l0aCAoKk5PX0FVVE9fUE9TU0VTUyksIGl0IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgc2V0dGluZwordGhlIFBDUkUyX05PX0FVVE9fUE9TU0VTUyBvcHRpb24uIFRoaXMgc3RvcHMgUENSRTIgZnJvbSBtYWtpbmcgcXVhbnRpZmllcnMKK3Bvc3Nlc3NpdmUgd2hlbiB3aGF0IGZvbGxvd3MgY2Fubm90IG1hdGNoIHRoZSByZXBlYXRlZCBpdGVtLiBGb3IgZXhhbXBsZSwgYnkKK2RlZmF1bHQgYStiIGlzIHRyZWF0ZWQgYXMgYSsrYi4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4KKzwvUD4KKzxicj48Yj4KK0Rpc2FibGluZyBzdGFydC11cCBvcHRpbWl6YXRpb25zCis8L2I+PGJyPgorPFA+CitJZiBhIHBhdHRlcm4gc3RhcnRzIHdpdGggKCpOT19TVEFSVF9PUFQpLCBpdCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHNldHRpbmcgdGhlCitQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSBvcHRpb24uIFRoaXMgZGlzYWJsZXMgc2V2ZXJhbCBvcHRpbWl6YXRpb25zIGZvciBxdWlja2x5CityZWFjaGluZyAibm8gbWF0Y2giIHJlc3VsdHMuIEZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK2RvY3VtZW50YXRpb24uCis8L1A+Cis8YnI+PGI+CitEaXNhYmxpbmcgYXV0b21hdGljIGFuY2hvcmluZworPC9iPjxicj4KKzxQPgorSWYgYSBwYXR0ZXJuIHN0YXJ0cyB3aXRoICgqTk9fRE9UU1RBUl9BTkNIT1IpLCBpdCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzCitzZXR0aW5nIHRoZSBQQ1JFMl9OT19ET1RTVEFSX0FOQ0hPUiBvcHRpb24uIFRoaXMgZGlzYWJsZXMgb3B0aW1pemF0aW9ucyB0aGF0CithcHBseSB0byBwYXR0ZXJucyB3aG9zZSB0b3AtbGV2ZWwgYnJhbmNoZXMgYWxsIHN0YXJ0IHdpdGggLiogKG1hdGNoIGFueSBudW1iZXIKK29mIGFyYml0cmFyeSBjaGFyYWN0ZXJzKS4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4KKzwvUD4KKzxicj48Yj4KK0Rpc2FibGluZyBKSVQgY29tcGlsYXRpb24KKzwvYj48YnI+Cis8UD4KK0lmIGEgcGF0dGVybiB0aGF0IHN0YXJ0cyB3aXRoICgqTk9fSklUKSBpcyBzdWNjZXNzZnVsbHkgY29tcGlsZWQsIGFuIGF0dGVtcHQgYnkKK3RoZSBhcHBsaWNhdGlvbiB0byBhcHBseSB0aGUgSklUIG9wdGltaXphdGlvbiBieSBjYWxsaW5nCis8Yj5wY3JlMl9qaXRfY29tcGlsZSgpPC9iPiBpcyBpZ25vcmVkLgorPC9QPgorPGJyPjxiPgorU2V0dGluZyBtYXRjaCBhbmQgcmVjdXJzaW9uIGxpbWl0cworPC9iPjxicj4KKzxQPgorVGhlIGNhbGxlciBvZiA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBjYW4gc2V0IGEgbGltaXQgb24gdGhlIG51bWJlciBvZiB0aW1lcyB0aGUKK2ludGVybmFsIDxiPm1hdGNoKCk8L2I+IGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgb24gdGhlIG1heGltdW0gZGVwdGggb2YKK3JlY3Vyc2l2ZSBjYWxscy4gVGhlc2UgZmFjaWxpdGllcyBhcmUgcHJvdmlkZWQgdG8gY2F0Y2ggcnVuYXdheSBtYXRjaGVzIHRoYXQKK2FyZSBwcm92b2tlZCBieSBwYXR0ZXJucyB3aXRoIGh1Z2UgbWF0Y2hpbmcgdHJlZXMgKGEgdHlwaWNhbCBleGFtcGxlIGlzIGEKK3BhdHRlcm4gd2l0aCBuZXN0ZWQgdW5saW1pdGVkIHJlcGVhdHMpIGFuZCB0byBhdm9pZCBydW5uaW5nIG91dCBvZiBzeXN0ZW0gc3RhY2sKK2J5IHRvbyBtdWNoIHJlY3Vyc2lvbi4gV2hlbiBvbmUgb2YgdGhlc2UgbGltaXRzIGlzIHJlYWNoZWQsIDxiPnBjcmUyX21hdGNoKCk8L2I+CitnaXZlcyBhbiBlcnJvciByZXR1cm4uIFRoZSBsaW1pdHMgY2FuIGFsc28gYmUgc2V0IGJ5IGl0ZW1zIGF0IHRoZSBzdGFydCBvZiB0aGUKK3BhdHRlcm4gb2YgdGhlIGZvcm0KKzxwcmU+CisgICgqTElNSVRfTUFUQ0g9ZCkKKyAgKCpMSU1JVF9SRUNVUlNJT049ZCkKKzwvcHJlPgord2hlcmUgZCBpcyBhbnkgbnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzLiBIb3dldmVyLCB0aGUgdmFsdWUgb2YgdGhlIHNldHRpbmcgbXVzdAorYmUgbGVzcyB0aGFuIHRoZSB2YWx1ZSBzZXQgKG9yIGRlZmF1bHRlZCkgYnkgdGhlIGNhbGxlciBvZiA8Yj5wY3JlMl9tYXRjaCgpPC9iPgorZm9yIGl0IHRvIGhhdmUgYW55IGVmZmVjdC4gSW4gb3RoZXIgd29yZHMsIHRoZSBwYXR0ZXJuIHdyaXRlciBjYW4gbG93ZXIgdGhlCitsaW1pdHMgc2V0IGJ5IHRoZSBwcm9ncmFtbWVyLCBidXQgbm90IHJhaXNlIHRoZW0uIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUKK3NldHRpbmcgb2Ygb25lIG9mIHRoZXNlIGxpbWl0cywgdGhlIGxvd2VyIHZhbHVlIGlzIHVzZWQuCis8YSBuYW1lPSJuZXdsaW5lcyI+PC9hPjwvUD4KKzxicj48Yj4KK05ld2xpbmUgY29udmVudGlvbnMKKzwvYj48YnI+Cis8UD4KK1BDUkUyIHN1cHBvcnRzIGZpdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIGZvciBpbmRpY2F0aW5nIGxpbmUgYnJlYWtzIGluCitzdHJpbmdzOiBhIHNpbmdsZSBDUiAoY2FycmlhZ2UgcmV0dXJuKSBjaGFyYWN0ZXIsIGEgc2luZ2xlIExGIChsaW5lZmVlZCkKK2NoYXJhY3RlciwgdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiwgYW55IG9mIHRoZSB0aHJlZSBwcmVjZWRpbmcsIG9yIGFueQorVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlLiBUaGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UgaGFzCis8YSBocmVmPSJwY3JlMmFwaS5odG1sI25ld2xpbmVzIj5mdXJ0aGVyIGRpc2N1c3Npb248L2E+CithYm91dCBuZXdsaW5lcywgYW5kIHNob3dzIGhvdyB0byBzZXQgdGhlIG5ld2xpbmUgY29udmVudGlvbiB3aGVuIGNhbGxpbmcKKzxiPnBjcmUyX2NvbXBpbGUoKTwvYj4uCis8L1A+Cis8UD4KK0l0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBhIG5ld2xpbmUgY29udmVudGlvbiBieSBzdGFydGluZyBhIHBhdHRlcm4KK3N0cmluZyB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nIGZpdmUgc2VxdWVuY2VzOgorPHByZT4KKyAgKCpDUikgICAgICAgIGNhcnJpYWdlIHJldHVybgorICAoKkxGKSAgICAgICAgbGluZWZlZWQKKyAgKCpDUkxGKSAgICAgIGNhcnJpYWdlIHJldHVybiwgZm9sbG93ZWQgYnkgbGluZWZlZWQKKyAgKCpBTllDUkxGKSAgIGFueSBvZiB0aGUgdGhyZWUgYWJvdmUKKyAgKCpBTlkpICAgICAgIGFsbCBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2VzCis8L3ByZT4KK1RoZXNlIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGFuZCB0aGUgb3B0aW9ucyBnaXZlbiB0byB0aGUgY29tcGlsaW5nIGZ1bmN0aW9uLiBGb3IKK2V4YW1wbGUsIG9uIGEgVW5peCBzeXN0ZW0gd2hlcmUgTEYgaXMgdGhlIGRlZmF1bHQgbmV3bGluZSBzZXF1ZW5jZSwgdGhlIHBhdHRlcm4KKzxwcmU+CisgICgqQ1IpYS5iCis8L3ByZT4KK2NoYW5nZXMgdGhlIGNvbnZlbnRpb24gdG8gQ1IuIFRoYXQgcGF0dGVybiBtYXRjaGVzICJhXG5iIiBiZWNhdXNlIExGIGlzIG5vCitsb25nZXIgYSBuZXdsaW5lLiBJZiBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIHNldHRpbmdzIGlzIHByZXNlbnQsIHRoZSBsYXN0IG9uZQoraXMgdXNlZC4KKzwvUD4KKzxQPgorVGhlIG5ld2xpbmUgY29udmVudGlvbiBhZmZlY3RzIHdoZXJlIHRoZSBjaXJjdW1mbGV4IGFuZCBkb2xsYXIgYXNzZXJ0aW9ucyBhcmUKK3RydWUuIEl0IGFsc28gYWZmZWN0cyB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIGRvdCBtZXRhY2hhcmFjdGVyIHdoZW4KK1BDUkUyX0RPVEFMTCBpcyBub3Qgc2V0LCBhbmQgdGhlIGJlaGF2aW91ciBvZiBcTi4gSG93ZXZlciwgaXQgZG9lcyBub3QgYWZmZWN0Cit3aGF0IHRoZSBcUiBlc2NhcGUgc2VxdWVuY2UgbWF0Y2hlcy4gQnkgZGVmYXVsdCwgdGhpcyBpcyBhbnkgVW5pY29kZSBuZXdsaW5lCitzZXF1ZW5jZSwgZm9yIFBlcmwgY29tcGF0aWJpbGl0eS4gSG93ZXZlciwgdGhpcyBjYW4gYmUgY2hhbmdlZDsgc2VlIHRoZQorZGVzY3JpcHRpb24gb2YgXFIgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKKzxhIGhyZWY9IiNuZXdsaW5lc2VxIj4iTmV3bGluZSBzZXF1ZW5jZXMiPC9hPgorYmVsb3cuIEEgY2hhbmdlIG9mIFxSIHNldHRpbmcgY2FuIGJlIGNvbWJpbmVkIHdpdGggYSBjaGFuZ2Ugb2YgbmV3bGluZQorY29udmVudGlvbi4KKzwvUD4KKzxicj48Yj4KK1NwZWNpZnlpbmcgd2hhdCBcUiBtYXRjaGVzCis8L2I+PGJyPgorPFA+CitJdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCBcUiB0byBtYXRjaCBvbmx5IENSLCBMRiwgb3IgQ1JMRiAoaW5zdGVhZCBvZiB0aGUKK2NvbXBsZXRlIHNldCBvZiBVbmljb2RlIGxpbmUgZW5kaW5ncykgYnkgc2V0dGluZyB0aGUgb3B0aW9uIFBDUkUyX0JTUl9BTllDUkxGCithdCBjb21waWxlIHRpbWUuIFRoaXMgZWZmZWN0IGNhbiBhbHNvIGJlIGFjaGlldmVkIGJ5IHN0YXJ0aW5nIGEgcGF0dGVybiB3aXRoCisoKkJTUl9BTllDUkxGKS4gRm9yIGNvbXBsZXRlbmVzcywgKCpCU1JfVU5JQ09ERSkgaXMgYWxzbyByZWNvZ25pemVkLAorY29ycmVzcG9uZGluZyB0byBQQ1JFMl9CU1JfVU5JQ09ERS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMzIiBocmVmPSIjVE9DMSI+RUJDRElDIENIQVJBQ1RFUiBDT0RFUzwvYT48YnI+Cis8UD4KK1BDUkUyIGNhbiBiZSBjb21waWxlZCB0byBydW4gaW4gYW4gZW52aXJvbm1lbnQgdGhhdCB1c2VzIEVCQ0RJQyBhcyBpdHMKK2NoYXJhY3RlciBjb2RlIHJhdGhlciB0aGFuIEFTQ0lJIG9yIFVuaWNvZGUgKHR5cGljYWxseSBhIG1haW5mcmFtZSBzeXN0ZW0pLiBJbgordGhlIHNlY3Rpb25zIGJlbG93LCBjaGFyYWN0ZXIgY29kZSB2YWx1ZXMgYXJlIEFTQ0lJIG9yIFVuaWNvZGU7IGluIGFuIEVCQ0RJQworZW52aXJvbm1lbnQgdGhlc2UgY2hhcmFjdGVycyBtYXkgaGF2ZSBkaWZmZXJlbnQgY29kZSB2YWx1ZXMsIGFuZCB0aGVyZSBhcmUgbm8KK2NvZGUgcG9pbnRzIGdyZWF0ZXIgdGhhbiAyNTUuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNCIgaHJlZj0iI1RPQzEiPkNIQVJBQ1RFUlMgQU5EIE1FVEFDSEFSQUNURVJTPC9hPjxicj4KKzxQPgorQSByZWd1bGFyIGV4cHJlc3Npb24gaXMgYSBwYXR0ZXJuIHRoYXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IGEgc3ViamVjdCBzdHJpbmcgZnJvbQorbGVmdCB0byByaWdodC4gTW9zdCBjaGFyYWN0ZXJzIHN0YW5kIGZvciB0aGVtc2VsdmVzIGluIGEgcGF0dGVybiwgYW5kIG1hdGNoIHRoZQorY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzIGluIHRoZSBzdWJqZWN0LiBBcyBhIHRyaXZpYWwgZXhhbXBsZSwgdGhlIHBhdHRlcm4KKzxwcmU+CisgIFRoZSBxdWljayBicm93biBmb3gKKzwvcHJlPgorbWF0Y2hlcyBhIHBvcnRpb24gb2YgYSBzdWJqZWN0IHN0cmluZyB0aGF0IGlzIGlkZW50aWNhbCB0byBpdHNlbGYuIFdoZW4KK2Nhc2VsZXNzIG1hdGNoaW5nIGlzIHNwZWNpZmllZCAodGhlIFBDUkUyX0NBU0VMRVNTIG9wdGlvbiksIGxldHRlcnMgYXJlIG1hdGNoZWQKK2luZGVwZW5kZW50bHkgb2YgY2FzZS4KKzwvUD4KKzxQPgorVGhlIHBvd2VyIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgY29tZXMgZnJvbSB0aGUgYWJpbGl0eSB0byBpbmNsdWRlIGFsdGVybmF0aXZlcworYW5kIHJlcGV0aXRpb25zIGluIHRoZSBwYXR0ZXJuLiBUaGVzZSBhcmUgZW5jb2RlZCBpbiB0aGUgcGF0dGVybiBieSB0aGUgdXNlIG9mCis8aT5tZXRhY2hhcmFjdGVyczwvaT4sIHdoaWNoIGRvIG5vdCBzdGFuZCBmb3IgdGhlbXNlbHZlcyBidXQgaW5zdGVhZCBhcmUKK2ludGVycHJldGVkIGluIHNvbWUgc3BlY2lhbCB3YXkuCis8L1A+Cis8UD4KK1RoZXJlIGFyZSB0d28gZGlmZmVyZW50IHNldHMgb2YgbWV0YWNoYXJhY3RlcnM6IHRob3NlIHRoYXQgYXJlIHJlY29nbml6ZWQKK2FueXdoZXJlIGluIHRoZSBwYXR0ZXJuIGV4Y2VwdCB3aXRoaW4gc3F1YXJlIGJyYWNrZXRzLCBhbmQgdGhvc2UgdGhhdCBhcmUKK3JlY29nbml6ZWQgd2l0aGluIHNxdWFyZSBicmFja2V0cy4gT3V0c2lkZSBzcXVhcmUgYnJhY2tldHMsIHRoZSBtZXRhY2hhcmFjdGVycworYXJlIGFzIGZvbGxvd3M6Cis8cHJlPgorICBcICAgICAgZ2VuZXJhbCBlc2NhcGUgY2hhcmFjdGVyIHdpdGggc2V2ZXJhbCB1c2VzCisgIF4gICAgICBhc3NlcnQgc3RhcnQgb2Ygc3RyaW5nIChvciBsaW5lLCBpbiBtdWx0aWxpbmUgbW9kZSkKKyAgJCAgICAgIGFzc2VydCBlbmQgb2Ygc3RyaW5nIChvciBsaW5lLCBpbiBtdWx0aWxpbmUgbW9kZSkKKyAgLiAgICAgIG1hdGNoIGFueSBjaGFyYWN0ZXIgZXhjZXB0IG5ld2xpbmUgKGJ5IGRlZmF1bHQpCisgIFsgICAgICBzdGFydCBjaGFyYWN0ZXIgY2xhc3MgZGVmaW5pdGlvbgorICB8ICAgICAgc3RhcnQgb2YgYWx0ZXJuYXRpdmUgYnJhbmNoCisgICggICAgICBzdGFydCBzdWJwYXR0ZXJuCisgICkgICAgICBlbmQgc3VicGF0dGVybgorICA/ICAgICAgZXh0ZW5kcyB0aGUgbWVhbmluZyBvZiAoCisgICAgICAgICBhbHNvIDAgb3IgMSBxdWFudGlmaWVyCisgICAgICAgICBhbHNvIHF1YW50aWZpZXIgbWluaW1pemVyCisgICogICAgICAwIG9yIG1vcmUgcXVhbnRpZmllcgorICArICAgICAgMSBvciBtb3JlIHF1YW50aWZpZXIKKyAgICAgICAgIGFsc28gInBvc3Nlc3NpdmUgcXVhbnRpZmllciIKKyAgeyAgICAgIHN0YXJ0IG1pbi9tYXggcXVhbnRpZmllcgorPC9wcmU+CitQYXJ0IG9mIGEgcGF0dGVybiB0aGF0IGlzIGluIHNxdWFyZSBicmFja2V0cyBpcyBjYWxsZWQgYSAiY2hhcmFjdGVyIGNsYXNzIi4gSW4KK2EgY2hhcmFjdGVyIGNsYXNzIHRoZSBvbmx5IG1ldGFjaGFyYWN0ZXJzIGFyZToKKzxwcmU+CisgIFwgICAgICBnZW5lcmFsIGVzY2FwZSBjaGFyYWN0ZXIKKyAgXiAgICAgIG5lZ2F0ZSB0aGUgY2xhc3MsIGJ1dCBvbmx5IGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIKKyAgLSAgICAgIGluZGljYXRlcyBjaGFyYWN0ZXIgcmFuZ2UKKyAgWyAgICAgIFBPU0lYIGNoYXJhY3RlciBjbGFzcyAob25seSBpZiBmb2xsb3dlZCBieSBQT1NJWCBzeW50YXgpCisgIF0gICAgICB0ZXJtaW5hdGVzIHRoZSBjaGFyYWN0ZXIgY2xhc3MKKzwvcHJlPgorVGhlIGZvbGxvd2luZyBzZWN0aW9ucyBkZXNjcmliZSB0aGUgdXNlIG9mIGVhY2ggb2YgdGhlIG1ldGFjaGFyYWN0ZXJzLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzUiIGhyZWY9IiNUT0MxIj5CQUNLU0xBU0g8L2E+PGJyPgorPFA+CitUaGUgYmFja3NsYXNoIGNoYXJhY3RlciBoYXMgc2V2ZXJhbCB1c2VzLiBGaXJzdGx5LCBpZiBpdCBpcyBmb2xsb3dlZCBieSBhCitjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSBudW1iZXIgb3IgYSBsZXR0ZXIsIGl0IHRha2VzIGF3YXkgYW55IHNwZWNpYWwgbWVhbmluZwordGhhdCBjaGFyYWN0ZXIgbWF5IGhhdmUuIFRoaXMgdXNlIG9mIGJhY2tzbGFzaCBhcyBhbiBlc2NhcGUgY2hhcmFjdGVyIGFwcGxpZXMKK2JvdGggaW5zaWRlIGFuZCBvdXRzaWRlIGNoYXJhY3RlciBjbGFzc2VzLgorPC9QPgorPFA+CitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gbWF0Y2ggYSAqIGNoYXJhY3RlciwgeW91IHdyaXRlIFwqIGluIHRoZSBwYXR0ZXJuLgorVGhpcyBlc2NhcGluZyBhY3Rpb24gYXBwbGllcyB3aGV0aGVyIG9yIG5vdCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlciB3b3VsZAorb3RoZXJ3aXNlIGJlIGludGVycHJldGVkIGFzIGEgbWV0YWNoYXJhY3Rlciwgc28gaXQgaXMgYWx3YXlzIHNhZmUgdG8gcHJlY2VkZSBhCitub24tYWxwaGFudW1lcmljIHdpdGggYmFja3NsYXNoIHRvIHNwZWNpZnkgdGhhdCBpdCBzdGFuZHMgZm9yIGl0c2VsZi4gSW4KK3BhcnRpY3VsYXIsIGlmIHlvdSB3YW50IHRvIG1hdGNoIGEgYmFja3NsYXNoLCB5b3Ugd3JpdGUgXFwuCis8L1A+Cis8UD4KK0luIGEgVVRGIG1vZGUsIG9ubHkgQVNDSUkgbnVtYmVycyBhbmQgbGV0dGVycyBoYXZlIGFueSBzcGVjaWFsIG1lYW5pbmcgYWZ0ZXIgYQorYmFja3NsYXNoLiBBbGwgb3RoZXIgY2hhcmFjdGVycyAoaW4gcGFydGljdWxhciwgdGhvc2Ugd2hvc2UgY29kZXBvaW50cyBhcmUKK2dyZWF0ZXIgdGhhbiAxMjcpIGFyZSB0cmVhdGVkIGFzIGxpdGVyYWxzLgorPC9QPgorPFA+CitJZiBhIHBhdHRlcm4gaXMgY29tcGlsZWQgd2l0aCB0aGUgUENSRTJfRVhURU5ERUQgb3B0aW9uLCBtb3N0IHdoaXRlIHNwYWNlIGluCit0aGUgcGF0dGVybiAob3RoZXIgdGhhbiBpbiBhIGNoYXJhY3RlciBjbGFzcyksIGFuZCBjaGFyYWN0ZXJzIGJldHdlZW4gYSAjCitvdXRzaWRlIGEgY2hhcmFjdGVyIGNsYXNzIGFuZCB0aGUgbmV4dCBuZXdsaW5lLCBpbmNsdXNpdmUsIGFyZSBpZ25vcmVkLiBBbgorZXNjYXBpbmcgYmFja3NsYXNoIGNhbiBiZSB1c2VkIHRvIGluY2x1ZGUgYSB3aGl0ZSBzcGFjZSBvciAjIGNoYXJhY3RlciBhcyBwYXJ0CitvZiB0aGUgcGF0dGVybi4KKzwvUD4KKzxQPgorSWYgeW91IHdhbnQgdG8gcmVtb3ZlIHRoZSBzcGVjaWFsIG1lYW5pbmcgZnJvbSBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMsIHlvdQorY2FuIGRvIHNvIGJ5IHB1dHRpbmcgdGhlbSBiZXR3ZWVuIFxRIGFuZCBcRS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBQZXJsIGluCit0aGF0ICQgYW5kIEAgYXJlIGhhbmRsZWQgYXMgbGl0ZXJhbHMgaW4gXFEuLi5cRSBzZXF1ZW5jZXMgaW4gUENSRTIsIHdoZXJlYXMKK2luIFBlcmwsICQgYW5kIEAgY2F1c2UgdmFyaWFibGUgaW50ZXJwb2xhdGlvbi4gTm90ZSB0aGUgZm9sbG93aW5nIGV4YW1wbGVzOgorPHByZT4KKyAgUGF0dGVybiAgICAgICAgICAgIFBDUkUyIG1hdGNoZXMgICBQZXJsIG1hdGNoZXMKKworICBcUWFiYyR4eXpcRSAgICAgICAgYWJjJHh5eiAgICAgICAgYWJjIGZvbGxvd2VkIGJ5IHRoZSBjb250ZW50cyBvZiAkeHl6CisgIFxRYWJjXCR4eXpcRSAgICAgICBhYmNcJHh5eiAgICAgICBhYmNcJHh5egorICBcUWFiY1xFXCRcUXh5elxFICAgYWJjJHh5eiAgICAgICAgYWJjJHh5egorPC9wcmU+CitUaGUgXFEuLi5cRSBzZXF1ZW5jZSBpcyByZWNvZ25pemVkIGJvdGggaW5zaWRlIGFuZCBvdXRzaWRlIGNoYXJhY3RlciBjbGFzc2VzLgorQW4gaXNvbGF0ZWQgXEUgdGhhdCBpcyBub3QgcHJlY2VkZWQgYnkgXFEgaXMgaWdub3JlZC4gSWYgXFEgaXMgbm90IGZvbGxvd2VkCitieSBcRSBsYXRlciBpbiB0aGUgcGF0dGVybiwgdGhlIGxpdGVyYWwgaW50ZXJwcmV0YXRpb24gY29udGludWVzIHRvIHRoZSBlbmQgb2YKK3RoZSBwYXR0ZXJuICh0aGF0IGlzLCBcRSBpcyBhc3N1bWVkIGF0IHRoZSBlbmQpLiBJZiB0aGUgaXNvbGF0ZWQgXFEgaXMgaW5zaWRlCithIGNoYXJhY3RlciBjbGFzcywgdGhpcyBjYXVzZXMgYW4gZXJyb3IsIGJlY2F1c2UgdGhlIGNoYXJhY3RlciBjbGFzcyBpcyBub3QKK3Rlcm1pbmF0ZWQuCis8YSBuYW1lPSJkaWdpdHNhZnRlcmJhY2tzbGFzaCI+PC9hPjwvUD4KKzxicj48Yj4KK05vbi1wcmludGluZyBjaGFyYWN0ZXJzCis8L2I+PGJyPgorPFA+CitBIHNlY29uZCB1c2Ugb2YgYmFja3NsYXNoIHByb3ZpZGVzIGEgd2F5IG9mIGVuY29kaW5nIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzCitpbiBwYXR0ZXJucyBpbiBhIHZpc2libGUgbWFubmVyLiBUaGVyZSBpcyBubyByZXN0cmljdGlvbiBvbiB0aGUgYXBwZWFyYW5jZSBvZgorbm9uLXByaW50aW5nIGNoYXJhY3RlcnMgaW4gYSBwYXR0ZXJuLCBidXQgd2hlbiBhIHBhdHRlcm4gaXMgYmVpbmcgcHJlcGFyZWQgYnkKK3RleHQgZWRpdGluZywgaXQgaXMgb2Z0ZW4gZWFzaWVyIHRvIHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBlc2NhcGUgc2VxdWVuY2VzCit0aGFuIHRoZSBiaW5hcnkgY2hhcmFjdGVyIGl0IHJlcHJlc2VudHMuIEluIGFuIEFTQ0lJIG9yIFVuaWNvZGUgZW52aXJvbm1lbnQsCit0aGVzZSBlc2NhcGVzIGFyZSBhcyBmb2xsb3dzOgorPHByZT4KKyAgXGEgICAgICAgIGFsYXJtLCB0aGF0IGlzLCB0aGUgQkVMIGNoYXJhY3RlciAoaGV4IDA3KQorICBcY3ggICAgICAgImNvbnRyb2wteCIsIHdoZXJlIHggaXMgYW55IHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXIKKyAgXGUgICAgICAgIGVzY2FwZSAoaGV4IDFCKQorICBcZiAgICAgICAgZm9ybSBmZWVkIChoZXggMEMpCisgIFxuICAgICAgICBsaW5lZmVlZCAoaGV4IDBBKQorICBcciAgICAgICAgY2FycmlhZ2UgcmV0dXJuIChoZXggMEQpCisgIFx0ICAgICAgICB0YWIgKGhleCAwOSkKKyAgXDBkZCAgICAgIGNoYXJhY3RlciB3aXRoIG9jdGFsIGNvZGUgMGRkCisgIFxkZGQgICAgICBjaGFyYWN0ZXIgd2l0aCBvY3RhbCBjb2RlIGRkZCwgb3IgYmFjayByZWZlcmVuY2UKKyAgXG97ZGRkLi59IGNoYXJhY3RlciB3aXRoIG9jdGFsIGNvZGUgZGRkLi4KKyAgXHhoaCAgICAgIGNoYXJhY3RlciB3aXRoIGhleCBjb2RlIGhoCisgIFx4e2hoaC4ufSBjaGFyYWN0ZXIgd2l0aCBoZXggY29kZSBoaGguLiAoZGVmYXVsdCBtb2RlKQorICBcdWhoaGggICAgY2hhcmFjdGVyIHdpdGggaGV4IGNvZGUgaGhoaCAod2hlbiBQQ1JFMl9BTFRfQlNVWCBpcyBzZXQpCis8L3ByZT4KK1RoZSBwcmVjaXNlIGVmZmVjdCBvZiBcY3ggb24gQVNDSUkgY2hhcmFjdGVycyBpcyBhcyBmb2xsb3dzOiBpZiB4IGlzIGEgbG93ZXIKK2Nhc2UgbGV0dGVyLCBpdCBpcyBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZS4gVGhlbiBiaXQgNiBvZiB0aGUgY2hhcmFjdGVyIChoZXgKKzQwKSBpcyBpbnZlcnRlZC4gVGh1cyBcY0EgdG8gXGNaIGJlY29tZSBoZXggMDEgdG8gaGV4IDFBIChBIGlzIDQxLCBaIGlzIDVBKSwKK2J1dCBcY3sgYmVjb21lcyBoZXggM0IgKHsgaXMgN0IpLCBhbmQgXGM7IGJlY29tZXMgaGV4IDdCICg7IGlzIDNCKS4gSWYgdGhlCitjb2RlIHVuaXQgZm9sbG93aW5nIFxjIGhhcyBhIHZhbHVlIGxlc3MgdGhhbiAzMiBvciBncmVhdGVyIHRoYW4gMTI2LCBhCitjb21waWxlLXRpbWUgZXJyb3Igb2NjdXJzLiBUaGlzIGxvY2tzIG91dCBub24tcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMgaW4gYWxsCittb2Rlcy4KKzwvUD4KKzxQPgorV2hlbiBQQ1JFMiBpcyBjb21waWxlZCBpbiBFQkNESUMgbW9kZSwgXGEsIFxlLCBcZiwgXG4sIFxyLCBhbmQgXHQKK2dlbmVyYXRlIHRoZSBhcHByb3ByaWF0ZSBFQkNESUMgY29kZSB2YWx1ZXMuIFRoZSBcYyBlc2NhcGUgaXMgcHJvY2Vzc2VkCithcyBzcGVjaWZpZWQgZm9yIFBlcmwgaW4gdGhlIDxiPnBlcmxlYmNkaWM8L2I+IGRvY3VtZW50LiBUaGUgb25seSBjaGFyYWN0ZXJzCit0aGF0IGFyZSBhbGxvd2VkIGFmdGVyIFxjIGFyZSBBLVosIGEteiwgb3Igb25lIG9mIEAsIFssIFwsIF0sIF4sIF8sIG9yID8uIEFueQorb3RoZXIgY2hhcmFjdGVyIHByb3Zva2VzIGEgY29tcGlsZS10aW1lIGVycm9yLiBUaGUgc2VxdWVuY2UgXEAgZW5jb2RlcworY2hhcmFjdGVyIGNvZGUgMDsgdGhlIGxldHRlcnMgKGluIGVpdGhlciBjYXNlKSBlbmNvZGUgY2hhcmFjdGVycyAxLTI2IChoZXggMDEKK3RvIGhleCAxQSk7IFssIFwsIF0sIF4sIGFuZCBfIGVuY29kZSBjaGFyYWN0ZXJzIDI3LTMxIChoZXggMUIgdG8gaGV4IDFGKSwgYW5kCitcPyBiZWNvbWVzIGVpdGhlciAyNTUgKGhleCBGRikgb3IgOTUgKGhleCA1RikuCis8L1A+Cis8UD4KK1RodXMsIGFwYXJ0IGZyb20gXD8sIHRoZXNlIGVzY2FwZXMgZ2VuZXJhdGUgdGhlIHNhbWUgY2hhcmFjdGVyIGNvZGUgdmFsdWVzIGFzCit0aGV5IGRvIGluIGFuIEFTQ0lJIGVudmlyb25tZW50LCB0aG91Z2ggdGhlIG1lYW5pbmdzIG9mIHRoZSB2YWx1ZXMgbW9zdGx5CitkaWZmZXIuIEZvciBleGFtcGxlLCBcRyBhbHdheXMgZ2VuZXJhdGVzIGNvZGUgdmFsdWUgNywgd2hpY2ggaXMgQkVMIGluIEFTQ0lJCitidXQgREVMIGluIEVCQ0RJQy4KKzwvUD4KKzxQPgorVGhlIHNlcXVlbmNlIFw/IGdlbmVyYXRlcyBERUwgKDEyNywgaGV4IDdGKSBpbiBhbiBBU0NJSSBlbnZpcm9ubWVudCwgYnV0CitiZWNhdXNlIDEyNyBpcyBub3QgYSBjb250cm9sIGNoYXJhY3RlciBpbiBFQkNESUMsIFBlcmwgbWFrZXMgaXQgZ2VuZXJhdGUgdGhlCitBUEMgY2hhcmFjdGVyLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgc2V2ZXJhbCB2YXJpYW50cyBvZiBFQkNESUMuIEluIG1vc3Qgb2YKK3RoZW0gdGhlIEFQQyBjaGFyYWN0ZXIgaGFzIHRoZSB2YWx1ZSAyNTUgKGhleCBGRiksIGJ1dCBpbiB0aGUgb25lIFBlcmwgY2FsbHMKK1BPU0lYLUJDIGl0cyB2YWx1ZSBpcyA5NSAoaGV4IDVGKS4gSWYgY2VydGFpbiBvdGhlciBjaGFyYWN0ZXJzIGhhdmUgUE9TSVgtQkMKK3ZhbHVlcywgUENSRTIgbWFrZXMgXD8gZ2VuZXJhdGUgOTU7IG90aGVyd2lzZSBpdCBnZW5lcmF0ZXMgMjU1LgorPC9QPgorPFA+CitBZnRlciBcMCB1cCB0byB0d28gZnVydGhlciBvY3RhbCBkaWdpdHMgYXJlIHJlYWQuIElmIHRoZXJlIGFyZSBmZXdlciB0aGFuIHR3bworZGlnaXRzLCBqdXN0IHRob3NlIHRoYXQgYXJlIHByZXNlbnQgYXJlIHVzZWQuIFRodXMgdGhlIHNlcXVlbmNlIFwwXHhcMDE1CitzcGVjaWZpZXMgdHdvIGJpbmFyeSB6ZXJvcyBmb2xsb3dlZCBieSBhIENSIGNoYXJhY3RlciAoY29kZSB2YWx1ZSAxMykuIE1ha2UKK3N1cmUgeW91IHN1cHBseSB0d28gZGlnaXRzIGFmdGVyIHRoZSBpbml0aWFsIHplcm8gaWYgdGhlIHBhdHRlcm4gY2hhcmFjdGVyIHRoYXQKK2ZvbGxvd3MgaXMgaXRzZWxmIGFuIG9jdGFsIGRpZ2l0LgorPC9QPgorPFA+CitUaGUgZXNjYXBlIFxvIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBzZXF1ZW5jZSBvZiBvY3RhbCBkaWdpdHMsIGVuY2xvc2VkIGluCiticmFjZXMuIEFuIGVycm9yIG9jY3VycyBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZS4gVGhpcyBlc2NhcGUgaXMgYSByZWNlbnQKK2FkZGl0aW9uIHRvIFBlcmw7IGl0IHByb3ZpZGVzIHdheSBvZiBzcGVjaWZ5aW5nIGNoYXJhY3RlciBjb2RlIHBvaW50cyBhcyBvY3RhbAorbnVtYmVycyBncmVhdGVyIHRoYW4gMDc3NywgYW5kIGl0IGFsc28gYWxsb3dzIG9jdGFsIG51bWJlcnMgYW5kIGJhY2sgcmVmZXJlbmNlcwordG8gYmUgdW5hbWJpZ3VvdXNseSBzcGVjaWZpZWQuCis8L1A+Cis8UD4KK0ZvciBncmVhdGVyIGNsYXJpdHkgYW5kIHVuYW1iaWd1aXR5LCBpdCBpcyBiZXN0IHRvIGF2b2lkIGZvbGxvd2luZyBcIGJ5IGEKK2RpZ2l0IGdyZWF0ZXIgdGhhbiB6ZXJvLiBJbnN0ZWFkLCB1c2UgXG97fSBvciBceHt9IHRvIHNwZWNpZnkgY2hhcmFjdGVyCitudW1iZXJzLCBhbmQgXGd7fSB0byBzcGVjaWZ5IGJhY2sgcmVmZXJlbmNlcy4gVGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhzCitkZXNjcmliZSB0aGUgb2xkLCBhbWJpZ3VvdXMgc3ludGF4LgorPC9QPgorPFA+CitUaGUgaGFuZGxpbmcgb2YgYSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBkaWdpdCBvdGhlciB0aGFuIDAgaXMgY29tcGxpY2F0ZWQsCithbmQgUGVybCBoYXMgY2hhbmdlZCBvdmVyIHRpbWUsIGNhdXNpbmcgUENSRTIgYWxzbyB0byBjaGFuZ2UuCis8L1A+Cis8UD4KK091dHNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIFBDUkUyIHJlYWRzIHRoZSBkaWdpdCBhbmQgYW55IGZvbGxvd2luZyBkaWdpdHMgYXMgYQorZGVjaW1hbCBudW1iZXIuIElmIHRoZSBudW1iZXIgaXMgbGVzcyB0aGFuIDEwLCBiZWdpbnMgd2l0aCB0aGUgZGlnaXQgOCBvciA5LCBvcgoraWYgdGhlcmUgYXJlIGF0IGxlYXN0IHRoYXQgbWFueSBwcmV2aW91cyBjYXB0dXJpbmcgbGVmdCBwYXJlbnRoZXNlcyBpbiB0aGUKK2V4cHJlc3Npb24sIHRoZSBlbnRpcmUgc2VxdWVuY2UgaXMgdGFrZW4gYXMgYSA8aT5iYWNrIHJlZmVyZW5jZTwvaT4uIEEKK2Rlc2NyaXB0aW9uIG9mIGhvdyB0aGlzIHdvcmtzIGlzIGdpdmVuCis8YSBocmVmPSIjYmFja3JlZmVyZW5jZXMiPmxhdGVyLDwvYT4KK2ZvbGxvd2luZyB0aGUgZGlzY3Vzc2lvbiBvZgorPGEgaHJlZj0iI3N1YnBhdHRlcm4iPnBhcmVudGhlc2l6ZWQgc3VicGF0dGVybnMuPC9hPgorT3RoZXJ3aXNlLCB1cCB0byB0aHJlZSBvY3RhbCBkaWdpdHMgYXJlIHJlYWQgdG8gZm9ybSBhIGNoYXJhY3RlciBjb2RlLgorPC9QPgorPFA+CitJbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIFBDUkUyIGhhbmRsZXMgXDggYW5kIFw5IGFzIHRoZSBsaXRlcmFsIGNoYXJhY3RlcnMKKyI4IiBhbmQgIjkiLCBhbmQgb3RoZXJ3aXNlIHJlYWRzIHVwIHRvIHRocmVlIG9jdGFsIGRpZ2l0cyBmb2xsb3dpbmcgdGhlCitiYWNrc2xhc2gsIHVzaW5nIHRoZW0gdG8gZ2VuZXJhdGUgYSBkYXRhIGNoYXJhY3Rlci4gQW55IHN1YnNlcXVlbnQgZGlnaXRzIHN0YW5kCitmb3IgdGhlbXNlbHZlcy4gRm9yIGV4YW1wbGUsIG91dHNpZGUgYSBjaGFyYWN0ZXIgY2xhc3M6Cis8cHJlPgorICBcMDQwICAgaXMgYW5vdGhlciB3YXkgb2Ygd3JpdGluZyBhbiBBU0NJSSBzcGFjZQorICBcNDAgICAgaXMgdGhlIHNhbWUsIHByb3ZpZGVkIHRoZXJlIGFyZSBmZXdlciB0aGFuIDQwIHByZXZpb3VzIGNhcHR1cmluZyBzdWJwYXR0ZXJucworICBcNyAgICAgaXMgYWx3YXlzIGEgYmFjayByZWZlcmVuY2UKKyAgXDExICAgIG1pZ2h0IGJlIGEgYmFjayByZWZlcmVuY2UsIG9yIGFub3RoZXIgd2F5IG9mIHdyaXRpbmcgYSB0YWIKKyAgXDAxMSAgIGlzIGFsd2F5cyBhIHRhYgorICBcMDExMyAgaXMgYSB0YWIgZm9sbG93ZWQgYnkgdGhlIGNoYXJhY3RlciAiMyIKKyAgXDExMyAgIG1pZ2h0IGJlIGEgYmFjayByZWZlcmVuY2UsIG90aGVyd2lzZSB0aGUgY2hhcmFjdGVyIHdpdGggb2N0YWwgY29kZSAxMTMKKyAgXDM3NyAgIG1pZ2h0IGJlIGEgYmFjayByZWZlcmVuY2UsIG90aGVyd2lzZSB0aGUgdmFsdWUgMjU1IChkZWNpbWFsKQorICBcODEgICAgaXMgYWx3YXlzIGEgYmFjayByZWZlcmVuY2UgLnNwCis8L3ByZT4KK05vdGUgdGhhdCBvY3RhbCB2YWx1ZXMgb2YgMTAwIG9yIGdyZWF0ZXIgdGhhdCBhcmUgc3BlY2lmaWVkIHVzaW5nIHRoaXMgc3ludGF4CittdXN0IG5vdCBiZSBpbnRyb2R1Y2VkIGJ5IGEgbGVhZGluZyB6ZXJvLCBiZWNhdXNlIG5vIG1vcmUgdGhhbiB0aHJlZSBvY3RhbAorZGlnaXRzIGFyZSBldmVyIHJlYWQuCis8L1A+Cis8UD4KK0J5IGRlZmF1bHQsIGFmdGVyIFx4IHRoYXQgaXMgbm90IGZvbGxvd2VkIGJ5IHssIGZyb20gemVybyB0byB0d28gaGV4YWRlY2ltYWwKK2RpZ2l0cyBhcmUgcmVhZCAobGV0dGVycyBjYW4gYmUgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSkuIEFueSBudW1iZXIgb2YKK2hleGFkZWNpbWFsIGRpZ2l0cyBtYXkgYXBwZWFyIGJldHdlZW4gXHh7IGFuZCB9LiBJZiBhIGNoYXJhY3RlciBvdGhlciB0aGFuCithIGhleGFkZWNpbWFsIGRpZ2l0IGFwcGVhcnMgYmV0d2VlbiBceHsgYW5kIH0sIG9yIGlmIHRoZXJlIGlzIG5vIHRlcm1pbmF0aW5nCit9LCBhbiBlcnJvciBvY2N1cnMuCis8L1A+Cis8UD4KK0lmIHRoZSBQQ1JFMl9BTFRfQlNVWCBvcHRpb24gaXMgc2V0LCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgXHggaXMgYXMganVzdAorZGVzY3JpYmVkIG9ubHkgd2hlbiBpdCBpcyBmb2xsb3dlZCBieSB0d28gaGV4YWRlY2ltYWwgZGlnaXRzLiBPdGhlcndpc2UsIGl0CittYXRjaGVzIGEgbGl0ZXJhbCAieCIgY2hhcmFjdGVyLiBJbiB0aGlzIG1vZGUgbW9kZSwgc3VwcG9ydCBmb3IgY29kZSBwb2ludHMKK2dyZWF0ZXIgdGhhbiAyNTYgaXMgcHJvdmlkZWQgYnkgXHUsIHdoaWNoIG11c3QgYmUgZm9sbG93ZWQgYnkgZm91ciBoZXhhZGVjaW1hbAorZGlnaXRzOyBvdGhlcndpc2UgaXQgbWF0Y2hlcyBhIGxpdGVyYWwgInUiIGNoYXJhY3Rlci4KKzwvUD4KKzxQPgorQ2hhcmFjdGVycyB3aG9zZSB2YWx1ZSBpcyBsZXNzIHRoYW4gMjU2IGNhbiBiZSBkZWZpbmVkIGJ5IGVpdGhlciBvZiB0aGUgdHdvCitzeW50YXhlcyBmb3IgXHggKG9yIGJ5IFx1IGluIFBDUkUyX0FMVF9CU1VYIG1vZGUpLiBUaGVyZSBpcyBubyBkaWZmZXJlbmNlIGluCit0aGUgd2F5IHRoZXkgYXJlIGhhbmRsZWQuIEZvciBleGFtcGxlLCBceGRjIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgXHh7ZGN9IChvcgorXHUwMGRjIGluIFBDUkUyX0FMVF9CU1VYIG1vZGUpLgorPC9QPgorPGJyPjxiPgorQ29uc3RyYWludHMgb24gY2hhcmFjdGVyIHZhbHVlcworPC9iPjxicj4KKzxQPgorQ2hhcmFjdGVycyB0aGF0IGFyZSBzcGVjaWZpZWQgdXNpbmcgb2N0YWwgb3IgaGV4YWRlY2ltYWwgbnVtYmVycyBhcmUKK2xpbWl0ZWQgdG8gY2VydGFpbiB2YWx1ZXMsIGFzIGZvbGxvd3M6Cis8cHJlPgorICA4LWJpdCBub24tVVRGIG1vZGUgICAgbGVzcyB0aGFuIDB4MTAwCisgIDgtYml0IFVURi04IG1vZGUgICAgICBsZXNzIHRoYW4gMHgxMGZmZmYgYW5kIGEgdmFsaWQgY29kZXBvaW50CisgIDE2LWJpdCBub24tVVRGIG1vZGUgICBsZXNzIHRoYW4gMHgxMDAwMAorICAxNi1iaXQgVVRGLTE2IG1vZGUgICAgbGVzcyB0aGFuIDB4MTBmZmZmIGFuZCBhIHZhbGlkIGNvZGVwb2ludAorICAzMi1iaXQgbm9uLVVURiBtb2RlICAgbGVzcyB0aGFuIDB4MTAwMDAwMDAwCisgIDMyLWJpdCBVVEYtMzIgbW9kZSAgICBsZXNzIHRoYW4gMHgxMGZmZmYgYW5kIGEgdmFsaWQgY29kZXBvaW50Cis8L3ByZT4KK0ludmFsaWQgVW5pY29kZSBjb2RlcG9pbnRzIGFyZSB0aGUgcmFuZ2UgMHhkODAwIHRvIDB4ZGZmZiAodGhlIHNvLWNhbGxlZAorInN1cnJvZ2F0ZSIgY29kZXBvaW50cyksIGFuZCAweGZmZWYuCis8L1A+Cis8YnI+PGI+CitFc2NhcGUgc2VxdWVuY2VzIGluIGNoYXJhY3RlciBjbGFzc2VzCis8L2I+PGJyPgorPFA+CitBbGwgdGhlIHNlcXVlbmNlcyB0aGF0IGRlZmluZSBhIHNpbmdsZSBjaGFyYWN0ZXIgdmFsdWUgY2FuIGJlIHVzZWQgYm90aCBpbnNpZGUKK2FuZCBvdXRzaWRlIGNoYXJhY3RlciBjbGFzc2VzLiBJbiBhZGRpdGlvbiwgaW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLCBcYiBpcworaW50ZXJwcmV0ZWQgYXMgdGhlIGJhY2tzcGFjZSBjaGFyYWN0ZXIgKGhleCAwOCkuCis8L1A+Cis8UD4KK1xOIGlzIG5vdCBhbGxvd2VkIGluIGEgY2hhcmFjdGVyIGNsYXNzLiBcQiwgXFIsIGFuZCBcWCBhcmUgbm90IHNwZWNpYWwKK2luc2lkZSBhIGNoYXJhY3RlciBjbGFzcy4gTGlrZSBvdGhlciB1bnJlY29nbml6ZWQgYWxwaGFiZXRpYyBlc2NhcGUgc2VxdWVuY2VzLAordGhleSBjYXVzZSBhbiBlcnJvci4gT3V0c2lkZSBhIGNoYXJhY3RlciBjbGFzcywgdGhlc2Ugc2VxdWVuY2VzIGhhdmUgZGlmZmVyZW50CittZWFuaW5ncy4KKzwvUD4KKzxicj48Yj4KK1Vuc3VwcG9ydGVkIGVzY2FwZSBzZXF1ZW5jZXMKKzwvYj48YnI+Cis8UD4KK0luIFBlcmwsIHRoZSBzZXF1ZW5jZXMgXGwsIFxMLCBcdSwgYW5kIFxVIGFyZSByZWNvZ25pemVkIGJ5IGl0cyBzdHJpbmcKK2hhbmRsZXIgYW5kIHVzZWQgdG8gbW9kaWZ5IHRoZSBjYXNlIG9mIGZvbGxvd2luZyBjaGFyYWN0ZXJzLiBCeSBkZWZhdWx0LCBQQ1JFMgorZG9lcyBub3Qgc3VwcG9ydCB0aGVzZSBlc2NhcGUgc2VxdWVuY2VzLiBIb3dldmVyLCBpZiB0aGUgUENSRTJfQUxUX0JTVVggb3B0aW9uCitpcyBzZXQsIFxVIG1hdGNoZXMgYSAiVSIgY2hhcmFjdGVyLCBhbmQgXHUgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGEgY2hhcmFjdGVyCitieSBjb2RlIHBvaW50LCBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uCis8L1A+Cis8YnI+PGI+CitBYnNvbHV0ZSBhbmQgcmVsYXRpdmUgYmFjayByZWZlcmVuY2VzCis8L2I+PGJyPgorPFA+CitUaGUgc2VxdWVuY2UgXGcgZm9sbG93ZWQgYnkgYW4gdW5zaWduZWQgb3IgYSBuZWdhdGl2ZSBudW1iZXIsIG9wdGlvbmFsbHkKK2VuY2xvc2VkIGluIGJyYWNlcywgaXMgYW4gYWJzb2x1dGUgb3IgcmVsYXRpdmUgYmFjayByZWZlcmVuY2UuIEEgbmFtZWQgYmFjaworcmVmZXJlbmNlIGNhbiBiZSBjb2RlZCBhcyBcZ3tuYW1lfS4gQmFjayByZWZlcmVuY2VzIGFyZSBkaXNjdXNzZWQKKzxhIGhyZWY9IiNiYWNrcmVmZXJlbmNlcyI+bGF0ZXIsPC9hPgorZm9sbG93aW5nIHRoZSBkaXNjdXNzaW9uIG9mCis8YSBocmVmPSIjc3VicGF0dGVybiI+cGFyZW50aGVzaXplZCBzdWJwYXR0ZXJucy48L2E+Cis8L1A+Cis8YnI+PGI+CitBYnNvbHV0ZSBhbmQgcmVsYXRpdmUgc3Vicm91dGluZSBjYWxscworPC9iPjxicj4KKzxQPgorRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBPbmlndXJ1bWEsIHRoZSBub24tUGVybCBzeW50YXggXGcgZm9sbG93ZWQgYnkgYSBuYW1lIG9yCithIG51bWJlciBlbmNsb3NlZCBlaXRoZXIgaW4gYW5nbGUgYnJhY2tldHMgb3Igc2luZ2xlIHF1b3RlcywgaXMgYW4gYWx0ZXJuYXRpdmUKK3N5bnRheCBmb3IgcmVmZXJlbmNpbmcgYSBzdWJwYXR0ZXJuIGFzIGEgInN1YnJvdXRpbmUiLiBEZXRhaWxzIGFyZSBkaXNjdXNzZWQKKzxhIGhyZWY9IiNvbmlndXJ1bWFzdWJyb3V0aW5lcyI+bGF0ZXIuPC9hPgorTm90ZSB0aGF0IFxney4uLn0gKFBlcmwgc3ludGF4KSBhbmQgXGcmIzYwOy4uLiYjNjI7IChPbmlndXJ1bWEgc3ludGF4KSBhcmUgPGk+bm90PC9pPgorc3lub255bW91cy4gVGhlIGZvcm1lciBpcyBhIGJhY2sgcmVmZXJlbmNlOyB0aGUgbGF0dGVyIGlzIGEKKzxhIGhyZWY9IiNzdWJwYXR0ZXJuc2Fzc3Vicm91dGluZXMiPnN1YnJvdXRpbmU8L2E+CitjYWxsLgorPGEgbmFtZT0iZ2VuZXJpY2NoYXJ0eXBlcyI+PC9hPjwvUD4KKzxicj48Yj4KK0dlbmVyaWMgY2hhcmFjdGVyIHR5cGVzCis8L2I+PGJyPgorPFA+CitBbm90aGVyIHVzZSBvZiBiYWNrc2xhc2ggaXMgZm9yIHNwZWNpZnlpbmcgZ2VuZXJpYyBjaGFyYWN0ZXIgdHlwZXM6Cis8cHJlPgorICBcZCAgICAgYW55IGRlY2ltYWwgZGlnaXQKKyAgXEQgICAgIGFueSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSBkZWNpbWFsIGRpZ2l0CisgIFxoICAgICBhbnkgaG9yaXpvbnRhbCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIKKyAgXEggICAgIGFueSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSBob3Jpem9udGFsIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBccyAgICAgYW55IHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcUyAgICAgYW55IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcdiAgICAgYW55IHZlcnRpY2FsIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcViAgICAgYW55IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIHZlcnRpY2FsIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcdyAgICAgYW55ICJ3b3JkIiBjaGFyYWN0ZXIKKyAgXFcgICAgIGFueSAibm9uLXdvcmQiIGNoYXJhY3RlcgorPC9wcmU+CitUaGVyZSBpcyBhbHNvIHRoZSBzaW5nbGUgc2VxdWVuY2UgXE4sIHdoaWNoIG1hdGNoZXMgYSBub24tbmV3bGluZSBjaGFyYWN0ZXIuCitUaGlzIGlzIHRoZSBzYW1lIGFzCis8YSBocmVmPSIjZnVsbHN0b3Bkb3QiPnRoZSAiLiIgbWV0YWNoYXJhY3RlcjwvYT4KK3doZW4gUENSRTJfRE9UQUxMIGlzIG5vdCBzZXQuIFBlcmwgYWxzbyB1c2VzIFxOIHRvIG1hdGNoIGNoYXJhY3RlcnMgYnkgbmFtZTsKK1BDUkUyIGRvZXMgbm90IHN1cHBvcnQgdGhpcy4KKzwvUD4KKzxQPgorRWFjaCBwYWlyIG9mIGxvd2VyIGFuZCB1cHBlciBjYXNlIGVzY2FwZSBzZXF1ZW5jZXMgcGFydGl0aW9ucyB0aGUgY29tcGxldGUgc2V0CitvZiBjaGFyYWN0ZXJzIGludG8gdHdvIGRpc2pvaW50IHNldHMuIEFueSBnaXZlbiBjaGFyYWN0ZXIgbWF0Y2hlcyBvbmUsIGFuZCBvbmx5CitvbmUsIG9mIGVhY2ggcGFpci4gVGhlIHNlcXVlbmNlcyBjYW4gYXBwZWFyIGJvdGggaW5zaWRlIGFuZCBvdXRzaWRlIGNoYXJhY3RlcgorY2xhc3Nlcy4gVGhleSBlYWNoIG1hdGNoIG9uZSBjaGFyYWN0ZXIgb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuIElmIHRoZSBjdXJyZW50CittYXRjaGluZyBwb2ludCBpcyBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IHN0cmluZywgYWxsIG9mIHRoZW0gZmFpbCwgYmVjYXVzZQordGhlcmUgaXMgbm8gY2hhcmFjdGVyIHRvIG1hdGNoLgorPC9QPgorPFA+CitUaGUgZGVmYXVsdCBccyBjaGFyYWN0ZXJzIGFyZSBIVCAoOSksIExGICgxMCksIFZUICgxMSksIEZGICgxMiksIENSICgxMyksIGFuZAorc3BhY2UgKDMyKSwgd2hpY2ggYXJlIGRlZmluZWQgYXMgd2hpdGUgc3BhY2UgaW4gdGhlICJDIiBsb2NhbGUuIFRoaXMgbGlzdCBtYXkKK3ZhcnkgaWYgbG9jYWxlLXNwZWNpZmljIG1hdGNoaW5nIGlzIHRha2luZyBwbGFjZS4gRm9yIGV4YW1wbGUsIGluIHNvbWUgbG9jYWxlcwordGhlICJub24tYnJlYWtpbmcgc3BhY2UiIGNoYXJhY3RlciAoXHhBMCkgaXMgcmVjb2duaXplZCBhcyB3aGl0ZSBzcGFjZSwgYW5kIGluCitvdGhlcnMgdGhlIFZUIGNoYXJhY3RlciBpcyBub3QuCis8L1A+Cis8UD4KK0EgIndvcmQiIGNoYXJhY3RlciBpcyBhbiB1bmRlcnNjb3JlIG9yIGFueSBjaGFyYWN0ZXIgdGhhdCBpcyBhIGxldHRlciBvciBkaWdpdC4KK0J5IGRlZmF1bHQsIHRoZSBkZWZpbml0aW9uIG9mIGxldHRlcnMgYW5kIGRpZ2l0cyBpcyBjb250cm9sbGVkIGJ5IFBDUkUyJ3MKK2xvdy12YWx1ZWQgY2hhcmFjdGVyIHRhYmxlcywgYW5kIG1heSB2YXJ5IGlmIGxvY2FsZS1zcGVjaWZpYyBtYXRjaGluZyBpcyB0YWtpbmcKK3BsYWNlIChzZWUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwjbG9jYWxlc3VwcG9ydCI+IkxvY2FsZSBzdXBwb3J0IjwvYT4KK2luIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorcGFnZSkuIEZvciBleGFtcGxlLCBpbiBhIEZyZW5jaCBsb2NhbGUgc3VjaCBhcyAiZnJfRlIiIGluIFVuaXgtbGlrZSBzeXN0ZW1zLAorb3IgImZyZW5jaCIgaW4gV2luZG93cywgc29tZSBjaGFyYWN0ZXIgY29kZXMgZ3JlYXRlciB0aGFuIDEyNyBhcmUgdXNlZCBmb3IKK2FjY2VudGVkIGxldHRlcnMsIGFuZCB0aGVzZSBhcmUgdGhlbiBtYXRjaGVkIGJ5IFx3LiBUaGUgdXNlIG9mIGxvY2FsZXMgd2l0aAorVW5pY29kZSBpcyBkaXNjb3VyYWdlZC4KKzwvUD4KKzxQPgorQnkgZGVmYXVsdCwgY2hhcmFjdGVycyB3aG9zZSBjb2RlIHBvaW50cyBhcmUgZ3JlYXRlciB0aGFuIDEyNyBuZXZlciBtYXRjaCBcZCwKK1xzLCBvciBcdywgYW5kIGFsd2F5cyBtYXRjaCBcRCwgXFMsIGFuZCBcVywgYWx0aG91Z2ggdGhpcyBtYXkgYmUgZGlmZmVyZW50Citmb3IgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgMTI4LTI1NSB3aGVuIGxvY2FsZS1zcGVjaWZpYyBtYXRjaGluZyBpcyBoYXBwZW5pbmcuCitUaGVzZSBlc2NhcGUgc2VxdWVuY2VzIHJldGFpbiB0aGVpciBvcmlnaW5hbCBtZWFuaW5ncyBmcm9tIGJlZm9yZSBVbmljb2RlCitzdXBwb3J0IHdhcyBhdmFpbGFibGUsIG1haW5seSBmb3IgZWZmaWNpZW5jeSByZWFzb25zLiBJZiB0aGUgUENSRTJfVUNQIG9wdGlvbgoraXMgc2V0LCB0aGUgYmVoYXZpb3VyIGlzIGNoYW5nZWQgc28gdGhhdCBVbmljb2RlIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8KK2RldGVybWluZSBjaGFyYWN0ZXIgdHlwZXMsIGFzIGZvbGxvd3M6Cis8cHJlPgorICBcZCAgYW55IGNoYXJhY3RlciB0aGF0IG1hdGNoZXMgXHB7TmR9IChkZWNpbWFsIGRpZ2l0KQorICBccyAgYW55IGNoYXJhY3RlciB0aGF0IG1hdGNoZXMgXHB7Wn0gb3IgXGggb3IgXHYKKyAgXHcgIGFueSBjaGFyYWN0ZXIgdGhhdCBtYXRjaGVzIFxwe0x9IG9yIFxwe059LCBwbHVzIHVuZGVyc2NvcmUKKzwvcHJlPgorVGhlIHVwcGVyIGNhc2UgZXNjYXBlcyBtYXRjaCB0aGUgaW52ZXJzZSBzZXRzIG9mIGNoYXJhY3RlcnMuIE5vdGUgdGhhdCBcZAorbWF0Y2hlcyBvbmx5IGRlY2ltYWwgZGlnaXRzLCB3aGVyZWFzIFx3IG1hdGNoZXMgYW55IFVuaWNvZGUgZGlnaXQsIGFzIHdlbGwgYXMKK2FueSBVbmljb2RlIGxldHRlciwgYW5kIHVuZGVyc2NvcmUuIE5vdGUgYWxzbyB0aGF0IFBDUkUyX1VDUCBhZmZlY3RzIFxiLCBhbmQKK1xCIGJlY2F1c2UgdGhleSBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiBcdyBhbmQgXFcuIE1hdGNoaW5nIHRoZXNlIHNlcXVlbmNlcworaXMgbm90aWNlYWJseSBzbG93ZXIgd2hlbiBQQ1JFMl9VQ1AgaXMgc2V0LgorPC9QPgorPFA+CitUaGUgc2VxdWVuY2VzIFxoLCBcSCwgXHYsIGFuZCBcViwgaW4gY29udHJhc3QgdG8gdGhlIG90aGVyIHNlcXVlbmNlcywgd2hpY2gKK21hdGNoIG9ubHkgQVNDSUkgY2hhcmFjdGVycyBieSBkZWZhdWx0LCBhbHdheXMgbWF0Y2ggYSBzcGVjaWZpYyBsaXN0IG9mIGNvZGUKK3BvaW50cywgd2hldGhlciBvciBub3QgUENSRTJfVUNQIGlzIHNldC4gVGhlIGhvcml6b250YWwgc3BhY2UgY2hhcmFjdGVycyBhcmU6Cis8cHJlPgorICBVKzAwMDkgICAgIEhvcml6b250YWwgdGFiIChIVCkKKyAgVSswMDIwICAgICBTcGFjZQorICBVKzAwQTAgICAgIE5vbi1icmVhayBzcGFjZQorICBVKzE2ODAgICAgIE9naGFtIHNwYWNlIG1hcmsKKyAgVSsxODBFICAgICBNb25nb2xpYW4gdm93ZWwgc2VwYXJhdG9yCisgIFUrMjAwMCAgICAgRW4gcXVhZAorICBVKzIwMDEgICAgIEVtIHF1YWQKKyAgVSsyMDAyICAgICBFbiBzcGFjZQorICBVKzIwMDMgICAgIEVtIHNwYWNlCisgIFUrMjAwNCAgICAgVGhyZWUtcGVyLWVtIHNwYWNlCisgIFUrMjAwNSAgICAgRm91ci1wZXItZW0gc3BhY2UKKyAgVSsyMDA2ICAgICBTaXgtcGVyLWVtIHNwYWNlCisgIFUrMjAwNyAgICAgRmlndXJlIHNwYWNlCisgIFUrMjAwOCAgICAgUHVuY3R1YXRpb24gc3BhY2UKKyAgVSsyMDA5ICAgICBUaGluIHNwYWNlCisgIFUrMjAwQSAgICAgSGFpciBzcGFjZQorICBVKzIwMkYgICAgIE5hcnJvdyBuby1icmVhayBzcGFjZQorICBVKzIwNUYgICAgIE1lZGl1bSBtYXRoZW1hdGljYWwgc3BhY2UKKyAgVSszMDAwICAgICBJZGVvZ3JhcGhpYyBzcGFjZQorPC9wcmU+CitUaGUgdmVydGljYWwgc3BhY2UgY2hhcmFjdGVycyBhcmU6Cis8cHJlPgorICBVKzAwMEEgICAgIExpbmVmZWVkIChMRikKKyAgVSswMDBCICAgICBWZXJ0aWNhbCB0YWIgKFZUKQorICBVKzAwMEMgICAgIEZvcm0gZmVlZCAoRkYpCisgIFUrMDAwRCAgICAgQ2FycmlhZ2UgcmV0dXJuIChDUikKKyAgVSswMDg1ICAgICBOZXh0IGxpbmUgKE5FTCkKKyAgVSsyMDI4ICAgICBMaW5lIHNlcGFyYXRvcgorICBVKzIwMjkgICAgIFBhcmFncmFwaCBzZXBhcmF0b3IKKzwvcHJlPgorSW4gOC1iaXQsIG5vbi1VVEYtOCBtb2RlLCBvbmx5IHRoZSBjaGFyYWN0ZXJzIHdpdGggY29kZSBwb2ludHMgbGVzcyB0aGFuIDI1NgorYXJlIHJlbGV2YW50LgorPGEgbmFtZT0ibmV3bGluZXNlcSI+PC9hPjwvUD4KKzxicj48Yj4KK05ld2xpbmUgc2VxdWVuY2VzCis8L2I+PGJyPgorPFA+CitPdXRzaWRlIGEgY2hhcmFjdGVyIGNsYXNzLCBieSBkZWZhdWx0LCB0aGUgZXNjYXBlIHNlcXVlbmNlIFxSIG1hdGNoZXMgYW55CitVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UuIEluIDgtYml0IG5vbi1VVEYtOCBtb2RlIFxSIGlzIGVxdWl2YWxlbnQgdG8gdGhlCitmb2xsb3dpbmc6Cis8cHJlPgorICAoPyYjNjI7XHJcbnxcbnxceDBifFxmfFxyfFx4ODUpCis8L3ByZT4KK1RoaXMgaXMgYW4gZXhhbXBsZSBvZiBhbiAiYXRvbWljIGdyb3VwIiwgZGV0YWlscyBvZiB3aGljaCBhcmUgZ2l2ZW4KKzxhIGhyZWY9IiNhdG9taWNncm91cCI+YmVsb3cuPC9hPgorVGhpcyBwYXJ0aWN1bGFyIGdyb3VwIG1hdGNoZXMgZWl0aGVyIHRoZSB0d28tY2hhcmFjdGVyIHNlcXVlbmNlIENSIGZvbGxvd2VkIGJ5CitMRiwgb3Igb25lIG9mIHRoZSBzaW5nbGUgY2hhcmFjdGVycyBMRiAobGluZWZlZWQsIFUrMDAwQSksIFZUICh2ZXJ0aWNhbCB0YWIsCitVKzAwMEIpLCBGRiAoZm9ybSBmZWVkLCBVKzAwMEMpLCBDUiAoY2FycmlhZ2UgcmV0dXJuLCBVKzAwMEQpLCBvciBORUwgKG5leHQKK2xpbmUsIFUrMDA4NSkuIEJlY2F1c2UgdGhpcyBpcyBhbiBhdG9taWMgZ3JvdXAsIHRoZSB0d28tY2hhcmFjdGVyIHNlcXVlbmNlIGlzCit0cmVhdGVkIGFzIGEgc2luZ2xlIHVuaXQgdGhhdCBjYW5ub3QgYmUgc3BsaXQuCis8L1A+Cis8UD4KK0luIG90aGVyIG1vZGVzLCB0d28gYWRkaXRpb25hbCBjaGFyYWN0ZXJzIHdob3NlIGNvZGVwb2ludHMgYXJlIGdyZWF0ZXIgdGhhbiAyNTUKK2FyZSBhZGRlZDogTFMgKGxpbmUgc2VwYXJhdG9yLCBVKzIwMjgpIGFuZCBQUyAocGFyYWdyYXBoIHNlcGFyYXRvciwgVSsyMDI5KS4KK1VuaWNvZGUgc3VwcG9ydCBpcyBub3QgbmVlZGVkIGZvciB0aGVzZSBjaGFyYWN0ZXJzIHRvIGJlIHJlY29nbml6ZWQuCis8L1A+Cis8UD4KK0l0IGlzIHBvc3NpYmxlIHRvIHJlc3RyaWN0IFxSIHRvIG1hdGNoIG9ubHkgQ1IsIExGLCBvciBDUkxGIChpbnN0ZWFkIG9mIHRoZQorY29tcGxldGUgc2V0IG9mIFVuaWNvZGUgbGluZSBlbmRpbmdzKSBieSBzZXR0aW5nIHRoZSBvcHRpb24gUENSRTJfQlNSX0FOWUNSTEYKK2F0IGNvbXBpbGUgdGltZS4gKEJTUiBpcyBhbiBhYmJyZXZhdGlvbiBmb3IgImJhY2tzbGFzaCBSIi4pIFRoaXMgY2FuIGJlIG1hZGUKK3RoZSBkZWZhdWx0IHdoZW4gUENSRTIgaXMgYnVpbHQ7IGlmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZSBvdGhlciBiZWhhdmlvdXIgY2FuCitiZSByZXF1ZXN0ZWQgdmlhIHRoZSBQQ1JFMl9CU1JfVU5JQ09ERSBvcHRpb24uIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeQordGhlc2Ugc2V0dGluZ3MgYnkgc3RhcnRpbmcgYSBwYXR0ZXJuIHN0cmluZyB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nCitzZXF1ZW5jZXM6Cis8cHJlPgorICAoKkJTUl9BTllDUkxGKSAgIENSLCBMRiwgb3IgQ1JMRiBvbmx5CisgICgqQlNSX1VOSUNPREUpICAgYW55IFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZQorPC9wcmU+CitUaGVzZSBvdmVycmlkZSB0aGUgZGVmYXVsdCBhbmQgdGhlIG9wdGlvbnMgZ2l2ZW4gdG8gdGhlIGNvbXBpbGluZyBmdW5jdGlvbi4KK05vdGUgdGhhdCB0aGVzZSBzcGVjaWFsIHNldHRpbmdzLCB3aGljaCBhcmUgbm90IFBlcmwtY29tcGF0aWJsZSwgYXJlIHJlY29nbml6ZWQKK29ubHkgYXQgdGhlIHZlcnkgc3RhcnQgb2YgYSBwYXR0ZXJuLCBhbmQgdGhhdCB0aGV5IG11c3QgYmUgaW4gdXBwZXIgY2FzZS4gSWYKK21vcmUgdGhhbiBvbmUgb2YgdGhlbSBpcyBwcmVzZW50LCB0aGUgbGFzdCBvbmUgaXMgdXNlZC4gVGhleSBjYW4gYmUgY29tYmluZWQKK3dpdGggYSBjaGFuZ2Ugb2YgbmV3bGluZSBjb252ZW50aW9uOyBmb3IgZXhhbXBsZSwgYSBwYXR0ZXJuIGNhbiBzdGFydCB3aXRoOgorPHByZT4KKyAgKCpBTlkpKCpCU1JfQU5ZQ1JMRikKKzwvcHJlPgorVGhleSBjYW4gYWxzbyBiZSBjb21iaW5lZCB3aXRoIHRoZSAoKlVURikgb3IgKCpVQ1ApIHNwZWNpYWwgc2VxdWVuY2VzLiBJbnNpZGUgYQorY2hhcmFjdGVyIGNsYXNzLCBcUiBpcyB0cmVhdGVkIGFzIGFuIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2UsIGFuZCBjYXVzZXMKK2FuIGVycm9yLgorPGEgbmFtZT0idW5pZXh0c2VxIj48L2E+PC9QPgorPGJyPjxiPgorVW5pY29kZSBjaGFyYWN0ZXIgcHJvcGVydGllcworPC9iPjxicj4KKzxQPgorV2hlbiBQQ1JFMiBpcyBidWlsdCB3aXRoIFVuaWNvZGUgc3VwcG9ydCAodGhlIGRlZmF1bHQpLCB0aHJlZSBhZGRpdGlvbmFsIGVzY2FwZQorc2VxdWVuY2VzIHRoYXQgbWF0Y2ggY2hhcmFjdGVycyB3aXRoIHNwZWNpZmljIHByb3BlcnRpZXMgYXJlIGF2YWlsYWJsZS4gSW4KKzgtYml0IG5vbi1VVEYtOCBtb2RlLCB0aGVzZSBzZXF1ZW5jZXMgYXJlIG9mIGNvdXJzZSBsaW1pdGVkIHRvIHRlc3RpbmcKK2NoYXJhY3RlcnMgd2hvc2UgY29kZXBvaW50cyBhcmUgbGVzcyB0aGFuIDI1NiwgYnV0IHRoZXkgZG8gd29yayBpbiB0aGlzIG1vZGUuCitUaGUgZXh0cmEgZXNjYXBlIHNlcXVlbmNlcyBhcmU6Cis8cHJlPgorICBccHs8aT54eDwvaT59ICAgYSBjaGFyYWN0ZXIgd2l0aCB0aGUgPGk+eHg8L2k+IHByb3BlcnR5CisgIFxQezxpPnh4PC9pPn0gICBhIGNoYXJhY3RlciB3aXRob3V0IHRoZSA8aT54eDwvaT4gcHJvcGVydHkKKyAgXFggICAgICAgYSBVbmljb2RlIGV4dGVuZGVkIGdyYXBoZW1lIGNsdXN0ZXIKKzwvcHJlPgorVGhlIHByb3BlcnR5IG5hbWVzIHJlcHJlc2VudGVkIGJ5IDxpPnh4PC9pPiBhYm92ZSBhcmUgbGltaXRlZCB0byB0aGUgVW5pY29kZQorc2NyaXB0IG5hbWVzLCB0aGUgZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0aWVzLCAiQW55Iiwgd2hpY2ggbWF0Y2hlcyBhbnkKK2NoYXJhY3RlciAoaW5jbHVkaW5nIG5ld2xpbmUpLCBhbmQgc29tZSBzcGVjaWFsIFBDUkUyIHByb3BlcnRpZXMgKGRlc2NyaWJlZAoraW4gdGhlCis8YSBocmVmPSIjZXh0cmFwcm9wcyI+bmV4dCBzZWN0aW9uKS48L2E+CitPdGhlciBQZXJsIHByb3BlcnRpZXMgc3VjaCBhcyAiSW5NdXNpY2FsU3ltYm9scyIgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgUENSRTIuCitOb3RlIHRoYXQgXFB7QW55fSBkb2VzIG5vdCBtYXRjaCBhbnkgY2hhcmFjdGVycywgc28gYWx3YXlzIGNhdXNlcyBhIG1hdGNoCitmYWlsdXJlLgorPC9QPgorPFA+CitTZXRzIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgZGVmaW5lZCBhcyBiZWxvbmdpbmcgdG8gY2VydGFpbiBzY3JpcHRzLiBBCitjaGFyYWN0ZXIgZnJvbSBvbmUgb2YgdGhlc2Ugc2V0cyBjYW4gYmUgbWF0Y2hlZCB1c2luZyBhIHNjcmlwdCBuYW1lLiBGb3IKK2V4YW1wbGU6Cis8cHJlPgorICBccHtHcmVla30KKyAgXFB7SGFufQorPC9wcmU+CitUaG9zZSB0aGF0IGFyZSBub3QgcGFydCBvZiBhbiBpZGVudGlmaWVkIHNjcmlwdCBhcmUgbHVtcGVkIHRvZ2V0aGVyIGFzCisiQ29tbW9uIi4gVGhlIGN1cnJlbnQgbGlzdCBvZiBzY3JpcHRzIGlzOgorPC9QPgorPFA+CitBaG9tLAorQW5hdG9saWFuX0hpZXJvZ2x5cGhzLAorQXJhYmljLAorQXJtZW5pYW4sCitBdmVzdGFuLAorQmFsaW5lc2UsCitCYW11bSwKK0Jhc3NhX1ZhaCwKK0JhdGFrLAorQmVuZ2FsaSwKK0JvcG9tb2ZvLAorQnJhaG1pLAorQnJhaWxsZSwKK0J1Z2luZXNlLAorQnVoaWQsCitDYW5hZGlhbl9BYm9yaWdpbmFsLAorQ2FyaWFuLAorQ2F1Y2FzaWFuX0FsYmFuaWFuLAorQ2hha21hLAorQ2hhbSwKK0NoZXJva2VlLAorQ29tbW9uLAorQ29wdGljLAorQ3VuZWlmb3JtLAorQ3lwcmlvdCwKK0N5cmlsbGljLAorRGVzZXJldCwKK0RldmFuYWdhcmksCitEdXBsb3lhbiwKK0VneXB0aWFuX0hpZXJvZ2x5cGhzLAorRWxiYXNhbiwKK0V0aGlvcGljLAorR2VvcmdpYW4sCitHbGFnb2xpdGljLAorR290aGljLAorR3JhbnRoYSwKK0dyZWVrLAorR3VqYXJhdGksCitHdXJtdWtoaSwKK0hhbiwKK0hhbmd1bCwKK0hhbnVub28sCitIYXRyYW4sCitIZWJyZXcsCitIaXJhZ2FuYSwKK0ltcGVyaWFsX0FyYW1haWMsCitJbmhlcml0ZWQsCitJbnNjcmlwdGlvbmFsX1BhaGxhdmksCitJbnNjcmlwdGlvbmFsX1BhcnRoaWFuLAorSmF2YW5lc2UsCitLYWl0aGksCitLYW5uYWRhLAorS2F0YWthbmEsCitLYXlhaF9MaSwKK0toYXJvc2h0aGksCitLaG1lciwKK0tob2praSwKK0todWRhd2FkaSwKK0xhbywKK0xhdGluLAorTGVwY2hhLAorTGltYnUsCitMaW5lYXJfQSwKK0xpbmVhcl9CLAorTGlzdSwKK0x5Y2lhbiwKK0x5ZGlhbiwKK01haGFqYW5pLAorTWFsYXlhbGFtLAorTWFuZGFpYywKK01hbmljaGFlYW4sCitNZWV0ZWlfTWF5ZWssCitNZW5kZV9LaWtha3VpLAorTWVyb2l0aWNfQ3Vyc2l2ZSwKK01lcm9pdGljX0hpZXJvZ2x5cGhzLAorTWlhbywKK01vZGksCitNb25nb2xpYW4sCitNcm8sCitNdWx0YW5pLAorTXlhbm1hciwKK05hYmF0YWVhbiwKK05ld19UYWlfTHVlLAorTmtvLAorT2doYW0sCitPbF9DaGlraSwKK09sZF9IdW5nYXJpYW4sCitPbGRfSXRhbGljLAorT2xkX05vcnRoX0FyYWJpYW4sCitPbGRfUGVybWljLAorT2xkX1BlcnNpYW4sCitPbGRfU291dGhfQXJhYmlhbiwKK09sZF9UdXJraWMsCitPcml5YSwKK09zbWFueWEsCitQYWhhd2hfSG1vbmcsCitQYWxteXJlbmUsCitQYXVfQ2luX0hhdSwKK1BoYWdzX1BhLAorUGhvZW5pY2lhbiwKK1BzYWx0ZXJfUGFobGF2aSwKK1JlamFuZywKK1J1bmljLAorU2FtYXJpdGFuLAorU2F1cmFzaHRyYSwKK1NoYXJhZGEsCitTaGF2aWFuLAorU2lkZGhhbSwKK1NpZ25Xcml0aW5nLAorU2luaGFsYSwKK1NvcmFfU29tcGVuZywKK1N1bmRhbmVzZSwKK1N5bG90aV9OYWdyaSwKK1N5cmlhYywKK1RhZ2Fsb2csCitUYWdiYW53YSwKK1RhaV9MZSwKK1RhaV9UaGFtLAorVGFpX1ZpZXQsCitUYWtyaSwKK1RhbWlsLAorVGVsdWd1LAorVGhhYW5hLAorVGhhaSwKK1RpYmV0YW4sCitUaWZpbmFnaCwKK1Rpcmh1dGEsCitVZ2FyaXRpYywKK1ZhaSwKK1dhcmFuZ19DaXRpLAorWWkuCis8L1A+Cis8UD4KK0VhY2ggY2hhcmFjdGVyIGhhcyBleGFjdGx5IG9uZSBVbmljb2RlIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHksIHNwZWNpZmllZCBieQorYSB0d28tbGV0dGVyIGFiYnJldmlhdGlvbi4gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLCBuZWdhdGlvbiBjYW4gYmUKK3NwZWNpZmllZCBieSBpbmNsdWRpbmcgYSBjaXJjdW1mbGV4IGJldHdlZW4gdGhlIG9wZW5pbmcgYnJhY2UgYW5kIHRoZSBwcm9wZXJ0eQorbmFtZS4gRm9yIGV4YW1wbGUsIFxwe15MdX0gaXMgdGhlIHNhbWUgYXMgXFB7THV9LgorPC9QPgorPFA+CitJZiBvbmx5IG9uZSBsZXR0ZXIgaXMgc3BlY2lmaWVkIHdpdGggXHAgb3IgXFAsIGl0IGluY2x1ZGVzIGFsbCB0aGUgZ2VuZXJhbAorY2F0ZWdvcnkgcHJvcGVydGllcyB0aGF0IHN0YXJ0IHdpdGggdGhhdCBsZXR0ZXIuIEluIHRoaXMgY2FzZSwgaW4gdGhlIGFic2VuY2UKK29mIG5lZ2F0aW9uLCB0aGUgY3VybHkgYnJhY2tldHMgaW4gdGhlIGVzY2FwZSBzZXF1ZW5jZSBhcmUgb3B0aW9uYWw7IHRoZXNlIHR3bworZXhhbXBsZXMgaGF2ZSB0aGUgc2FtZSBlZmZlY3Q6Cis8cHJlPgorICBccHtMfQorICBccEwKKzwvcHJlPgorVGhlIGZvbGxvd2luZyBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5IGNvZGVzIGFyZSBzdXBwb3J0ZWQ6Cis8cHJlPgorICBDICAgICBPdGhlcgorICBDYyAgICBDb250cm9sCisgIENmICAgIEZvcm1hdAorICBDbiAgICBVbmFzc2lnbmVkCisgIENvICAgIFByaXZhdGUgdXNlCisgIENzICAgIFN1cnJvZ2F0ZQorCisgIEwgICAgIExldHRlcgorICBMbCAgICBMb3dlciBjYXNlIGxldHRlcgorICBMbSAgICBNb2RpZmllciBsZXR0ZXIKKyAgTG8gICAgT3RoZXIgbGV0dGVyCisgIEx0ICAgIFRpdGxlIGNhc2UgbGV0dGVyCisgIEx1ICAgIFVwcGVyIGNhc2UgbGV0dGVyCisKKyAgTSAgICAgTWFyaworICBNYyAgICBTcGFjaW5nIG1hcmsKKyAgTWUgICAgRW5jbG9zaW5nIG1hcmsKKyAgTW4gICAgTm9uLXNwYWNpbmcgbWFyaworCisgIE4gICAgIE51bWJlcgorICBOZCAgICBEZWNpbWFsIG51bWJlcgorICBObCAgICBMZXR0ZXIgbnVtYmVyCisgIE5vICAgIE90aGVyIG51bWJlcgorCisgIFAgICAgIFB1bmN0dWF0aW9uCisgIFBjICAgIENvbm5lY3RvciBwdW5jdHVhdGlvbgorICBQZCAgICBEYXNoIHB1bmN0dWF0aW9uCisgIFBlICAgIENsb3NlIHB1bmN0dWF0aW9uCisgIFBmICAgIEZpbmFsIHB1bmN0dWF0aW9uCisgIFBpICAgIEluaXRpYWwgcHVuY3R1YXRpb24KKyAgUG8gICAgT3RoZXIgcHVuY3R1YXRpb24KKyAgUHMgICAgT3BlbiBwdW5jdHVhdGlvbgorCisgIFMgICAgIFN5bWJvbAorICBTYyAgICBDdXJyZW5jeSBzeW1ib2wKKyAgU2sgICAgTW9kaWZpZXIgc3ltYm9sCisgIFNtICAgIE1hdGhlbWF0aWNhbCBzeW1ib2wKKyAgU28gICAgT3RoZXIgc3ltYm9sCisKKyAgWiAgICAgU2VwYXJhdG9yCisgIFpsICAgIExpbmUgc2VwYXJhdG9yCisgIFpwICAgIFBhcmFncmFwaCBzZXBhcmF0b3IKKyAgWnMgICAgU3BhY2Ugc2VwYXJhdG9yCis8L3ByZT4KK1RoZSBzcGVjaWFsIHByb3BlcnR5IEwmIGlzIGFsc28gc3VwcG9ydGVkOiBpdCBtYXRjaGVzIGEgY2hhcmFjdGVyIHRoYXQgaGFzCit0aGUgTHUsIExsLCBvciBMdCBwcm9wZXJ0eSwgaW4gb3RoZXIgd29yZHMsIGEgbGV0dGVyIHRoYXQgaXMgbm90IGNsYXNzaWZpZWQgYXMKK2EgbW9kaWZpZXIgb3IgIm90aGVyIi4KKzwvUD4KKzxQPgorVGhlIENzIChTdXJyb2dhdGUpIHByb3BlcnR5IGFwcGxpZXMgb25seSB0byBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSBVK0Q4MDAgdG8KK1UrREZGRi4gU3VjaCBjaGFyYWN0ZXJzIGFyZSBub3QgdmFsaWQgaW4gVW5pY29kZSBzdHJpbmdzIGFuZCBzbworY2Fubm90IGJlIHRlc3RlZCBieSBQQ1JFMiwgdW5sZXNzIFVURiB2YWxpZGl0eSBjaGVja2luZyBoYXMgYmVlbiB0dXJuZWQgb2ZmCisoc2VlIHRoZSBkaXNjdXNzaW9uIG9mIFBDUkUyX05PX1VURl9DSEVDSyBpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK3BhZ2UpLiBQZXJsIGRvZXMgbm90IHN1cHBvcnQgdGhlIENzIHByb3BlcnR5LgorPC9QPgorPFA+CitUaGUgbG9uZyBzeW5vbnltcyBmb3IgcHJvcGVydHkgbmFtZXMgdGhhdCBQZXJsIHN1cHBvcnRzIChzdWNoIGFzIFxwe0xldHRlcn0pCithcmUgbm90IHN1cHBvcnRlZCBieSBQQ1JFMiwgbm9yIGlzIGl0IHBlcm1pdHRlZCB0byBwcmVmaXggYW55IG9mIHRoZXNlCitwcm9wZXJ0aWVzIHdpdGggIklzIi4KKzwvUD4KKzxQPgorTm8gY2hhcmFjdGVyIHRoYXQgaXMgaW4gdGhlIFVuaWNvZGUgdGFibGUgaGFzIHRoZSBDbiAodW5hc3NpZ25lZCkgcHJvcGVydHkuCitJbnN0ZWFkLCB0aGlzIHByb3BlcnR5IGlzIGFzc3VtZWQgZm9yIGFueSBjb2RlIHBvaW50IHRoYXQgaXMgbm90IGluIHRoZQorVW5pY29kZSB0YWJsZS4KKzwvUD4KKzxQPgorU3BlY2lmeWluZyBjYXNlbGVzcyBtYXRjaGluZyBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgZXNjYXBlIHNlcXVlbmNlcy4gRm9yCitleGFtcGxlLCBccHtMdX0gYWx3YXlzIG1hdGNoZXMgb25seSB1cHBlciBjYXNlIGxldHRlcnMuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20KK3RoZSBiZWhhdmlvdXIgb2YgY3VycmVudCB2ZXJzaW9ucyBvZiBQZXJsLgorPC9QPgorPFA+CitNYXRjaGluZyBjaGFyYWN0ZXJzIGJ5IFVuaWNvZGUgcHJvcGVydHkgaXMgbm90IGZhc3QsIGJlY2F1c2UgUENSRTIgaGFzIHRvIGRvIGEKK211bHRpc3RhZ2UgdGFibGUgbG9va3VwIGluIG9yZGVyIHRvIGZpbmQgYSBjaGFyYWN0ZXIncyBwcm9wZXJ0eS4gVGhhdCBpcyB3aHkKK3RoZSB0cmFkaXRpb25hbCBlc2NhcGUgc2VxdWVuY2VzIHN1Y2ggYXMgXGQgYW5kIFx3IGRvIG5vdCB1c2UgVW5pY29kZQorcHJvcGVydGllcyBpbiBQQ1JFMiBieSBkZWZhdWx0LCB0aG91Z2ggeW91IGNhbiBtYWtlIHRoZW0gZG8gc28gYnkgc2V0dGluZyB0aGUKK1BDUkUyX1VDUCBvcHRpb24gb3IgYnkgc3RhcnRpbmcgdGhlIHBhdHRlcm4gd2l0aCAoKlVDUCkuCis8L1A+Cis8YnI+PGI+CitFeHRlbmRlZCBncmFwaGVtZSBjbHVzdGVycworPC9iPjxicj4KKzxQPgorVGhlIFxYIGVzY2FwZSBtYXRjaGVzIGFueSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIHRoYXQgZm9ybSBhbiAiZXh0ZW5kZWQKK2dyYXBoZW1lIGNsdXN0ZXIiLCBhbmQgdHJlYXRzIHRoZSBzZXF1ZW5jZSBhcyBhbiBhdG9taWMgZ3JvdXAKKzxhIGhyZWY9IiNhdG9taWNncm91cCI+KHNlZSBiZWxvdykuPC9hPgorVW5pY29kZSBzdXBwb3J0cyB2YXJpb3VzIGtpbmRzIG9mIGNvbXBvc2l0ZSBjaGFyYWN0ZXIgYnkgZ2l2aW5nIGVhY2ggY2hhcmFjdGVyCithIGdyYXBoZW1lIGJyZWFraW5nIHByb3BlcnR5LCBhbmQgaGF2aW5nIHJ1bGVzIHRoYXQgdXNlIHRoZXNlIHByb3BlcnRpZXMgdG8KK2RlZmluZSB0aGUgYm91bmRhcmllcyBvZiBleHRlbmRlZCBncmFwaGVtZSBjbHVzdGVycy4gXFggYWx3YXlzIG1hdGNoZXMgYXQKK2xlYXN0IG9uZSBjaGFyYWN0ZXIuIFRoZW4gaXQgZGVjaWRlcyB3aGV0aGVyIHRvIGFkZCBhZGRpdGlvbmFsIGNoYXJhY3RlcnMKK2FjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHJ1bGVzIGZvciBlbmRpbmcgYSBjbHVzdGVyOgorPC9QPgorPFA+CisxLiBFbmQgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCBzdHJpbmcuCis8L1A+Cis8UD4KKzIuIERvIG5vdCBlbmQgYmV0d2VlbiBDUiBhbmQgTEY7IG90aGVyd2lzZSBlbmQgYWZ0ZXIgYW55IGNvbnRyb2wgY2hhcmFjdGVyLgorPC9QPgorPFA+CiszLiBEbyBub3QgYnJlYWsgSGFuZ3VsIChhIEtvcmVhbiBzY3JpcHQpIHN5bGxhYmxlIHNlcXVlbmNlcy4gSGFuZ3VsIGNoYXJhY3RlcnMKK2FyZSBvZiBmaXZlIHR5cGVzOiBMLCBWLCBULCBMViwgYW5kIExWVC4gQW4gTCBjaGFyYWN0ZXIgbWF5IGJlIGZvbGxvd2VkIGJ5IGFuCitMLCBWLCBMViwgb3IgTFZUIGNoYXJhY3RlcjsgYW4gTFYgb3IgViBjaGFyYWN0ZXIgbWF5IGJlIGZvbGxvd2VkIGJ5IGEgViBvciBUCitjaGFyYWN0ZXI7IGFuIExWVCBvciBUIGNoYXJhY3RlciBtYXkgYmUgZm9sbHdlZCBvbmx5IGJ5IGEgVCBjaGFyYWN0ZXIuCis8L1A+Cis8UD4KKzQuIERvIG5vdCBlbmQgYmVmb3JlIGV4dGVuZGluZyBjaGFyYWN0ZXJzIG9yIHNwYWNpbmcgbWFya3MuIENoYXJhY3RlcnMgd2l0aAordGhlICJtYXJrIiBwcm9wZXJ0eSBhbHdheXMgaGF2ZSB0aGUgImV4dGVuZCIgZ3JhcGhlbWUgYnJlYWtpbmcgcHJvcGVydHkuCis8L1A+Cis8UD4KKzUuIERvIG5vdCBlbmQgYWZ0ZXIgcHJlcGVuZCBjaGFyYWN0ZXJzLgorPC9QPgorPFA+Cis2LiBPdGhlcndpc2UsIGVuZCB0aGUgY2x1c3Rlci4KKzxhIG5hbWU9ImV4dHJhcHJvcHMiPjwvYT48L1A+Cis8YnI+PGI+CitQQ1JFMidzIGFkZGl0aW9uYWwgcHJvcGVydGllcworPC9iPjxicj4KKzxQPgorQXMgd2VsbCBhcyB0aGUgc3RhbmRhcmQgVW5pY29kZSBwcm9wZXJ0aWVzIGRlc2NyaWJlZCBhYm92ZSwgUENSRTIgc3VwcG9ydHMgZm91cgorbW9yZSB0aGF0IG1ha2UgaXQgcG9zc2libGUgdG8gY29udmVydCB0cmFkaXRpb25hbCBlc2NhcGUgc2VxdWVuY2VzIHN1Y2ggYXMgXHcKK2FuZCBccyB0byB1c2UgVW5pY29kZSBwcm9wZXJ0aWVzLiBQQ1JFMiB1c2VzIHRoZXNlIG5vbi1zdGFuZGFyZCwgbm9uLVBlcmwKK3Byb3BlcnRpZXMgaW50ZXJuYWxseSB3aGVuIFBDUkUyX1VDUCBpcyBzZXQuIEhvd2V2ZXIsIHRoZXkgbWF5IGFsc28gYmUgdXNlZAorZXhwbGljaXRseS4gVGhlc2UgcHJvcGVydGllcyBhcmU6Cis8cHJlPgorICBYYW4gICBBbnkgYWxwaGFudW1lcmljIGNoYXJhY3RlcgorICBYcHMgICBBbnkgUE9TSVggc3BhY2UgY2hhcmFjdGVyCisgIFhzcCAgIEFueSBQZXJsIHNwYWNlIGNoYXJhY3RlcgorICBYd2QgICBBbnkgUGVybCAid29yZCIgY2hhcmFjdGVyCis8L3ByZT4KK1hhbiBtYXRjaGVzIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGVpdGhlciB0aGUgTCAobGV0dGVyKSBvciB0aGUgTiAobnVtYmVyKQorcHJvcGVydHkuIFhwcyBtYXRjaGVzIHRoZSBjaGFyYWN0ZXJzIHRhYiwgbGluZWZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBvcgorY2FycmlhZ2UgcmV0dXJuLCBhbmQgYW55IG90aGVyIGNoYXJhY3RlciB0aGF0IGhhcyB0aGUgWiAoc2VwYXJhdG9yKSBwcm9wZXJ0eS4KK1hzcCBpcyB0aGUgc2FtZSBhcyBYcHM7IGluIFBDUkUxIGl0IHVzZWQgdG8gZXhjbHVkZSB2ZXJ0aWNhbCB0YWIsIGZvciBQZXJsCitjb21wYXRpYmlsaXR5LCBidXQgUGVybCBjaGFuZ2VkLiBYd2QgbWF0Y2hlcyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIFhhbiwgcGx1cwordW5kZXJzY29yZS4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYW5vdGhlciBub24tc3RhbmRhcmQgcHJvcGVydHksIFh1Yywgd2hpY2ggbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIHRoYXQKK2NhbiBiZSByZXByZXNlbnRlZCBieSBhIFVuaXZlcnNhbCBDaGFyYWN0ZXIgTmFtZSBpbiBDKysgYW5kIG90aGVyIHByb2dyYW1taW5nCitsYW5ndWFnZXMuIFRoZXNlIGFyZSB0aGUgY2hhcmFjdGVycyAkLCBALCBgIChncmF2ZSBhY2NlbnQpLCBhbmQgYWxsIGNoYXJhY3RlcnMKK3dpdGggVW5pY29kZSBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gVSswMEEwLCBleGNlcHQgZm9yIHRoZQorc3Vycm9nYXRlcyBVK0Q4MDAgdG8gVStERkZGLiBOb3RlIHRoYXQgbW9zdCBiYXNlIChBU0NJSSkgY2hhcmFjdGVycyBhcmUKK2V4Y2x1ZGVkLiAoVW5pdmVyc2FsIENoYXJhY3RlciBOYW1lcyBhcmUgb2YgdGhlIGZvcm0gXHVISEhIIG9yIFxVSEhISEhISEgKK3doZXJlIEggaXMgYSBoZXhhZGVjaW1hbCBkaWdpdC4gTm90ZSB0aGF0IHRoZSBYdWMgcHJvcGVydHkgZG9lcyBub3QgbWF0Y2ggdGhlc2UKK3NlcXVlbmNlcyBidXQgdGhlIGNoYXJhY3RlcnMgdGhhdCB0aGV5IHJlcHJlc2VudC4pCis8YSBuYW1lPSJyZXNldG1hdGNoc3RhcnQiPjwvYT48L1A+Cis8YnI+PGI+CitSZXNldHRpbmcgdGhlIG1hdGNoIHN0YXJ0Cis8L2I+PGJyPgorPFA+CitUaGUgZXNjYXBlIHNlcXVlbmNlIFxLIGNhdXNlcyBhbnkgcHJldmlvdXNseSBtYXRjaGVkIGNoYXJhY3RlcnMgbm90IHRvIGJlCitpbmNsdWRlZCBpbiB0aGUgZmluYWwgbWF0Y2hlZCBzZXF1ZW5jZS4gRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuOgorPHByZT4KKyAgZm9vXEtiYXIKKzwvcHJlPgorbWF0Y2hlcyAiZm9vYmFyIiwgYnV0IHJlcG9ydHMgdGhhdCBpdCBoYXMgbWF0Y2hlZCAiYmFyIi4gVGhpcyBmZWF0dXJlIGlzCitzaW1pbGFyIHRvIGEgbG9va2JlaGluZCBhc3NlcnRpb24KKzxhIGhyZWY9IiNsb29rYmVoaW5kIj4oZGVzY3JpYmVkIGJlbG93KS48L2E+CitIb3dldmVyLCBpbiB0aGlzIGNhc2UsIHRoZSBwYXJ0IG9mIHRoZSBzdWJqZWN0IGJlZm9yZSB0aGUgcmVhbCBtYXRjaCBkb2VzIG5vdAoraGF2ZSB0byBiZSBvZiBmaXhlZCBsZW5ndGgsIGFzIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucyBkby4gVGhlIHVzZSBvZiBcSyBkb2VzCitub3QgaW50ZXJmZXJlIHdpdGggdGhlIHNldHRpbmcgb2YKKzxhIGhyZWY9IiNzdWJwYXR0ZXJuIj5jYXB0dXJlZCBzdWJzdHJpbmdzLjwvYT4KK0ZvciBleGFtcGxlLCB3aGVuIHRoZSBwYXR0ZXJuCis8cHJlPgorICAoZm9vKVxLYmFyCis8L3ByZT4KK21hdGNoZXMgImZvb2JhciIsIHRoZSBmaXJzdCBzdWJzdHJpbmcgaXMgc3RpbGwgc2V0IHRvICJmb28iLgorPC9QPgorPFA+CitQZXJsIGRvY3VtZW50cyB0aGF0IHRoZSB1c2Ugb2YgXEsgd2l0aGluIGFzc2VydGlvbnMgaXMgIm5vdCB3ZWxsIGRlZmluZWQiLiBJbgorUENSRTIsIFxLIGlzIGFjdGVkIHVwb24gd2hlbiBpdCBvY2N1cnMgaW5zaWRlIHBvc2l0aXZlIGFzc2VydGlvbnMsIGJ1dCBpcworaWdub3JlZCBpbiBuZWdhdGl2ZSBhc3NlcnRpb25zLiBOb3RlIHRoYXQgd2hlbiBhIHBhdHRlcm4gc3VjaCBhcyAoPz1hYlxLKQorbWF0Y2hlcywgdGhlIHJlcG9ydGVkIHN0YXJ0IG9mIHRoZSBtYXRjaCBjYW4gYmUgZ3JlYXRlciB0aGFuIHRoZSBlbmQgb2YgdGhlCittYXRjaC4KKzxhIG5hbWU9InNtYWxsYXNzZXJ0aW9ucyI+PC9hPjwvUD4KKzxicj48Yj4KK1NpbXBsZSBhc3NlcnRpb25zCis8L2I+PGJyPgorPFA+CitUaGUgZmluYWwgdXNlIG9mIGJhY2tzbGFzaCBpcyBmb3IgY2VydGFpbiBzaW1wbGUgYXNzZXJ0aW9ucy4gQW4gYXNzZXJ0aW9uCitzcGVjaWZpZXMgYSBjb25kaXRpb24gdGhhdCBoYXMgdG8gYmUgbWV0IGF0IGEgcGFydGljdWxhciBwb2ludCBpbiBhIG1hdGNoLAord2l0aG91dCBjb25zdW1pbmcgYW55IGNoYXJhY3RlcnMgZnJvbSB0aGUgc3ViamVjdCBzdHJpbmcuIFRoZSB1c2Ugb2YKK3N1YnBhdHRlcm5zIGZvciBtb3JlIGNvbXBsaWNhdGVkIGFzc2VydGlvbnMgaXMgZGVzY3JpYmVkCis8YSBocmVmPSIjYmlnYXNzZXJ0aW9ucyI+YmVsb3cuPC9hPgorVGhlIGJhY2tzbGFzaGVkIGFzc2VydGlvbnMgYXJlOgorPHByZT4KKyAgXGIgICAgIG1hdGNoZXMgYXQgYSB3b3JkIGJvdW5kYXJ5CisgIFxCICAgICBtYXRjaGVzIHdoZW4gbm90IGF0IGEgd29yZCBib3VuZGFyeQorICBcQSAgICAgbWF0Y2hlcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3QKKyAgXFogICAgIG1hdGNoZXMgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdAorICAgICAgICAgIGFsc28gbWF0Y2hlcyBiZWZvcmUgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3QKKyAgXHogICAgIG1hdGNoZXMgb25seSBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0CisgIFxHICAgICBtYXRjaGVzIGF0IHRoZSBmaXJzdCBtYXRjaGluZyBwb3NpdGlvbiBpbiB0aGUgc3ViamVjdAorPC9wcmU+CitJbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIFxiIGhhcyBhIGRpZmZlcmVudCBtZWFuaW5nOyBpdCBtYXRjaGVzIHRoZSBiYWNrc3BhY2UKK2NoYXJhY3Rlci4gSWYgYW55IG90aGVyIG9mIHRoZXNlIGFzc2VydGlvbnMgYXBwZWFycyBpbiBhIGNoYXJhY3RlciBjbGFzcywgYW4KKyJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSIgZXJyb3IgaXMgZ2VuZXJhdGVkLgorPC9QPgorPFA+CitBIHdvcmQgYm91bmRhcnkgaXMgYSBwb3NpdGlvbiBpbiB0aGUgc3ViamVjdCBzdHJpbmcgd2hlcmUgdGhlIGN1cnJlbnQgY2hhcmFjdGVyCithbmQgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBkbyBub3QgYm90aCBtYXRjaCBcdyBvciBcVyAoaS5lLiBvbmUgbWF0Y2hlcworXHcgYW5kIHRoZSBvdGhlciBtYXRjaGVzIFxXKSwgb3IgdGhlIHN0YXJ0IG9yIGVuZCBvZiB0aGUgc3RyaW5nIGlmIHRoZQorZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIgbWF0Y2hlcyBcdywgcmVzcGVjdGl2ZWx5LiBJbiBhIFVURiBtb2RlLCB0aGUgbWVhbmluZ3MKK29mIFx3IGFuZCBcVyBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIHRoZSBQQ1JFMl9VQ1Agb3B0aW9uLiBXaGVuIHRoaXMgaXMKK2RvbmUsIGl0IGFsc28gYWZmZWN0cyBcYiBhbmQgXEIuIE5laXRoZXIgUENSRTIgbm9yIFBlcmwgaGFzIGEgc2VwYXJhdGUgInN0YXJ0CitvZiB3b3JkIiBvciAiZW5kIG9mIHdvcmQiIG1ldGFzZXF1ZW5jZS4gSG93ZXZlciwgd2hhdGV2ZXIgZm9sbG93cyBcYiBub3JtYWxseQorZGV0ZXJtaW5lcyB3aGljaCBpdCBpcy4gRm9yIGV4YW1wbGUsIHRoZSBmcmFnbWVudCBcYmEgbWF0Y2hlcyAiYSIgYXQgdGhlIHN0YXJ0CitvZiBhIHdvcmQuCis8L1A+Cis8UD4KK1RoZSBcQSwgXFosIGFuZCBceiBhc3NlcnRpb25zIGRpZmZlciBmcm9tIHRoZSB0cmFkaXRpb25hbCBjaXJjdW1mbGV4IGFuZAorZG9sbGFyIChkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbikgaW4gdGhhdCB0aGV5IG9ubHkgZXZlciBtYXRjaCBhdCB0aGUgdmVyeQorc3RhcnQgYW5kIGVuZCBvZiB0aGUgc3ViamVjdCBzdHJpbmcsIHdoYXRldmVyIG9wdGlvbnMgYXJlIHNldC4gVGh1cywgdGhleSBhcmUKK2luZGVwZW5kZW50IG9mIG11bHRpbGluZSBtb2RlLiBUaGVzZSB0aHJlZSBhc3NlcnRpb25zIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhlCitQQ1JFMl9OT1RCT0wgb3IgUENSRTJfTk9URU9MIG9wdGlvbnMsIHdoaWNoIGFmZmVjdCBvbmx5IHRoZSBiZWhhdmlvdXIgb2YgdGhlCitjaXJjdW1mbGV4IGFuZCBkb2xsYXIgbWV0YWNoYXJhY3RlcnMuIEhvd2V2ZXIsIGlmIHRoZSA8aT5zdGFydG9mZnNldDwvaT4KK2FyZ3VtZW50IG9mIDxiPnBjcmUyX21hdGNoKCk8L2I+IGlzIG5vbi16ZXJvLCBpbmRpY2F0aW5nIHRoYXQgbWF0Y2hpbmcgaXMgdG8KK3N0YXJ0IGF0IGEgcG9pbnQgb3RoZXIgdGhhbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJqZWN0LCBcQSBjYW4gbmV2ZXIgbWF0Y2guCitUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFxaIGFuZCBceiBpcyB0aGF0IFxaIG1hdGNoZXMgYmVmb3JlIGEgbmV3bGluZSBhdCB0aGUKK2VuZCBvZiB0aGUgc3RyaW5nIGFzIHdlbGwgYXMgYXQgdGhlIHZlcnkgZW5kLCB3aGVyZWFzIFx6IG1hdGNoZXMgb25seSBhdCB0aGUKK2VuZC4KKzwvUD4KKzxQPgorVGhlIFxHIGFzc2VydGlvbiBpcyB0cnVlIG9ubHkgd2hlbiB0aGUgY3VycmVudCBtYXRjaGluZyBwb3NpdGlvbiBpcyBhdCB0aGUKK3N0YXJ0IHBvaW50IG9mIHRoZSBtYXRjaCwgYXMgc3BlY2lmaWVkIGJ5IHRoZSA8aT5zdGFydG9mZnNldDwvaT4gYXJndW1lbnQgb2YKKzxiPnBjcmUyX21hdGNoKCk8L2I+LiBJdCBkaWZmZXJzIGZyb20gXEEgd2hlbiB0aGUgdmFsdWUgb2YgPGk+c3RhcnRvZmZzZXQ8L2k+IGlzCitub24temVyby4gQnkgY2FsbGluZyA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBtdWx0aXBsZSB0aW1lcyB3aXRoIGFwcHJvcHJpYXRlCithcmd1bWVudHMsIHlvdSBjYW4gbWltaWMgUGVybCdzIC9nIG9wdGlvbiwgYW5kIGl0IGlzIGluIHRoaXMga2luZCBvZgoraW1wbGVtZW50YXRpb24gd2hlcmUgXEcgY2FuIGJlIHVzZWZ1bC4KKzwvUD4KKzxQPgorTm90ZSwgaG93ZXZlciwgdGhhdCBQQ1JFMidzIGludGVycHJldGF0aW9uIG9mIFxHLCBhcyB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQKK21hdGNoLCBpcyBzdWJ0bHkgZGlmZmVyZW50IGZyb20gUGVybCdzLCB3aGljaCBkZWZpbmVzIGl0IGFzIHRoZSBlbmQgb2YgdGhlCitwcmV2aW91cyBtYXRjaC4gSW4gUGVybCwgdGhlc2UgY2FuIGJlIGRpZmZlcmVudCB3aGVuIHRoZSBwcmV2aW91c2x5IG1hdGNoZWQKK3N0cmluZyB3YXMgZW1wdHkuIEJlY2F1c2UgUENSRTIgZG9lcyBqdXN0IG9uZSBtYXRjaCBhdCBhIHRpbWUsIGl0IGNhbm5vdAorcmVwcm9kdWNlIHRoaXMgYmVoYXZpb3VyLgorPC9QPgorPFA+CitJZiBhbGwgdGhlIGFsdGVybmF0aXZlcyBvZiBhIHBhdHRlcm4gYmVnaW4gd2l0aCBcRywgdGhlIGV4cHJlc3Npb24gaXMgYW5jaG9yZWQKK3RvIHRoZSBzdGFydGluZyBtYXRjaCBwb3NpdGlvbiwgYW5kIHRoZSAiYW5jaG9yZWQiIGZsYWcgaXMgc2V0IGluIHRoZSBjb21waWxlZAorcmVndWxhciBleHByZXNzaW9uLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzYiIGhyZWY9IiNUT0MxIj5DSVJDVU1GTEVYIEFORCBET0xMQVI8L2E+PGJyPgorPFA+CitUaGUgY2lyY3VtZmxleCBhbmQgZG9sbGFyIG1ldGFjaGFyYWN0ZXJzIGFyZSB6ZXJvLXdpZHRoIGFzc2VydGlvbnMuIFRoYXQgaXMsCit0aGV5IHRlc3QgZm9yIGEgcGFydGljdWxhciBjb25kaXRpb24gYmVpbmcgdHJ1ZSB3aXRob3V0IGNvbnN1bWluZyBhbnkKK2NoYXJhY3RlcnMgZnJvbSB0aGUgc3ViamVjdCBzdHJpbmcuIFRoZXNlIHR3byBtZXRhY2hhcmFjdGVycyBhcmUgY29uY2VybmVkIHdpdGgKK21hdGNoaW5nIHRoZSBzdGFydHMgYW5kIGVuZHMgb2YgbGluZXMuIElmIHRoZSBuZXdsaW5lIGNvbnZlbnRpb24gaXMgc2V0IHNvIHRoYXQKK29ubHkgdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiBpcyByZWNvZ25pemVkIGFzIGEgbmV3bGluZSwgaXNvbGF0ZWQgQ1IKK2FuZCBMRiBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIG9yZGluYXJ5IGRhdGEgY2hhcmFjdGVycywgYW5kIGFyZSBub3QKK3JlY29nbml6ZWQgYXMgbmV3bGluZXMuCis8L1A+Cis8UD4KK091dHNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIGluIHRoZSBkZWZhdWx0IG1hdGNoaW5nIG1vZGUsIHRoZSBjaXJjdW1mbGV4CitjaGFyYWN0ZXIgaXMgYW4gYXNzZXJ0aW9uIHRoYXQgaXMgdHJ1ZSBvbmx5IGlmIHRoZSBjdXJyZW50IG1hdGNoaW5nIHBvaW50IGlzIGF0Cit0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLiBJZiB0aGUgPGk+c3RhcnRvZmZzZXQ8L2k+IGFyZ3VtZW50IG9mCis8Yj5wY3JlMl9tYXRjaCgpPC9iPiBpcyBub24temVybywgb3IgaWYgUENSRTJfTk9UQk9MIGlzIHNldCwgY2lyY3VtZmxleCBjYW4KK25ldmVyIG1hdGNoIGlmIHRoZSBQQ1JFMl9NVUxUSUxJTkUgb3B0aW9uIGlzIHVuc2V0LiBJbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsCitjaXJjdW1mbGV4IGhhcyBhbiBlbnRpcmVseSBkaWZmZXJlbnQgbWVhbmluZworPGEgaHJlZj0iI2NoYXJhY3RlcmNsYXNzIj4oc2VlIGJlbG93KS48L2E+Cis8L1A+Cis8UD4KK0NpcmN1bWZsZXggbmVlZCBub3QgYmUgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgcGF0dGVybiBpZiBhIG51bWJlciBvZgorYWx0ZXJuYXRpdmVzIGFyZSBpbnZvbHZlZCwgYnV0IGl0IHNob3VsZCBiZSB0aGUgZmlyc3QgdGhpbmcgaW4gZWFjaCBhbHRlcm5hdGl2ZQoraW4gd2hpY2ggaXQgYXBwZWFycyBpZiB0aGUgcGF0dGVybiBpcyBldmVyIHRvIG1hdGNoIHRoYXQgYnJhbmNoLiBJZiBhbGwKK3Bvc3NpYmxlIGFsdGVybmF0aXZlcyBzdGFydCB3aXRoIGEgY2lyY3VtZmxleCwgdGhhdCBpcywgaWYgdGhlIHBhdHRlcm4gaXMKK2NvbnN0cmFpbmVkIHRvIG1hdGNoIG9ubHkgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0LCBpdCBpcyBzYWlkIHRvIGJlIGFuCisiYW5jaG9yZWQiIHBhdHRlcm4uIChUaGVyZSBhcmUgYWxzbyBvdGhlciBjb25zdHJ1Y3RzIHRoYXQgY2FuIGNhdXNlIGEgcGF0dGVybgordG8gYmUgYW5jaG9yZWQuKQorPC9QPgorPFA+CitUaGUgZG9sbGFyIGNoYXJhY3RlciBpcyBhbiBhc3NlcnRpb24gdGhhdCBpcyB0cnVlIG9ubHkgaWYgdGhlIGN1cnJlbnQgbWF0Y2hpbmcKK3BvaW50IGlzIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLCBvciBpbW1lZGlhdGVseSBiZWZvcmUgYSBuZXdsaW5lIGF0Cit0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKGJ5IGRlZmF1bHQpLCB1bmxlc3MgUENSRTJfTk9URU9MIGlzIHNldC4gTm90ZSwgaG93ZXZlciwKK3RoYXQgaXQgZG9lcyBub3QgYWN0dWFsbHkgbWF0Y2ggdGhlIG5ld2xpbmUuIERvbGxhciBuZWVkIG5vdCBiZSB0aGUgbGFzdAorY2hhcmFjdGVyIG9mIHRoZSBwYXR0ZXJuIGlmIGEgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBhcmUgaW52b2x2ZWQsIGJ1dCBpdAorc2hvdWxkIGJlIHRoZSBsYXN0IGl0ZW0gaW4gYW55IGJyYW5jaCBpbiB3aGljaCBpdCBhcHBlYXJzLiBEb2xsYXIgaGFzIG5vCitzcGVjaWFsIG1lYW5pbmcgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuCis8L1A+Cis8UD4KK1RoZSBtZWFuaW5nIG9mIGRvbGxhciBjYW4gYmUgY2hhbmdlZCBzbyB0aGF0IGl0IG1hdGNoZXMgb25seSBhdCB0aGUgdmVyeSBlbmQgb2YKK3RoZSBzdHJpbmcsIGJ5IHNldHRpbmcgdGhlIFBDUkUyX0RPTExBUl9FTkRPTkxZIG9wdGlvbiBhdCBjb21waWxlIHRpbWUuIFRoaXMKK2RvZXMgbm90IGFmZmVjdCB0aGUgXFogYXNzZXJ0aW9uLgorPC9QPgorPFA+CitUaGUgbWVhbmluZ3Mgb2YgdGhlIGNpcmN1bWZsZXggYW5kIGRvbGxhciBtZXRhY2hhcmFjdGVycyBhcmUgY2hhbmdlZCBpZiB0aGUKK1BDUkUyX01VTFRJTElORSBvcHRpb24gaXMgc2V0LiBXaGVuIHRoaXMgaXMgdGhlIGNhc2UsIGEgZG9sbGFyIGNoYXJhY3RlcgorbWF0Y2hlcyBiZWZvcmUgYW55IG5ld2xpbmVzIGluIHRoZSBzdHJpbmcsIGFzIHdlbGwgYXMgYXQgdGhlIHZlcnkgZW5kLCBhbmQgYQorY2lyY3VtZmxleCBtYXRjaGVzIGltbWVkaWF0ZWx5IGFmdGVyIGludGVybmFsIG5ld2xpbmVzIGFzIHdlbGwgYXMgYXQgdGhlIHN0YXJ0CitvZiB0aGUgc3ViamVjdCBzdHJpbmcuIEl0IGRvZXMgbm90IG1hdGNoIGFmdGVyIGEgbmV3bGluZSB0aGF0IGVuZHMgdGhlIHN0cmluZywKK2ZvciBjb21wYXRpYmlsaXR5IHdpdGggUGVybC4gSG93ZXZlciwgdGhpcyBjYW4gYmUgY2hhbmdlZCBieSBzZXR0aW5nIHRoZQorUENSRTJfQUxUX0NJUkNVTUZMRVggb3B0aW9uLgorPC9QPgorPFA+CitGb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm4gL15hYmMkLyBtYXRjaGVzIHRoZSBzdWJqZWN0IHN0cmluZyAiZGVmXG5hYmMiICh3aGVyZQorXG4gcmVwcmVzZW50cyBhIG5ld2xpbmUpIGluIG11bHRpbGluZSBtb2RlLCBidXQgbm90IG90aGVyd2lzZS4gQ29uc2VxdWVudGx5LAorcGF0dGVybnMgdGhhdCBhcmUgYW5jaG9yZWQgaW4gc2luZ2xlIGxpbmUgbW9kZSBiZWNhdXNlIGFsbCBicmFuY2hlcyBzdGFydCB3aXRoCiteIGFyZSBub3QgYW5jaG9yZWQgaW4gbXVsdGlsaW5lIG1vZGUsIGFuZCBhIG1hdGNoIGZvciBjaXJjdW1mbGV4IGlzIHBvc3NpYmxlCit3aGVuIHRoZSA8aT5zdGFydG9mZnNldDwvaT4gYXJndW1lbnQgb2YgPGI+cGNyZTJfbWF0Y2goKTwvYj4gaXMgbm9uLXplcm8uIFRoZQorUENSRTJfRE9MTEFSX0VORE9OTFkgb3B0aW9uIGlzIGlnbm9yZWQgaWYgUENSRTJfTVVMVElMSU5FIGlzIHNldC4KKzwvUD4KKzxQPgorV2hlbiB0aGUgbmV3bGluZSBjb252ZW50aW9uIChzZWUKKzxhIGhyZWY9IiNuZXdsaW5lcyI+Ik5ld2xpbmUgY29udmVudGlvbnMiPC9hPgorYmVsb3cpIHJlY29nbml6ZXMgdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiBhcyBhIG5ld2xpbmUsIHRoaXMgaXMKK3ByZWZlcnJlZCwgZXZlbiBpZiB0aGUgc2luZ2xlIGNoYXJhY3RlcnMgQ1IgYW5kIExGIGFyZSBhbHNvIHJlY29nbml6ZWQgYXMKK25ld2xpbmVzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIG5ld2xpbmUgY29udmVudGlvbiBpcyAiYW55IiwgYSBtdWx0aWxpbmUgbW9kZQorY2lyY3VtZmxleCBtYXRjaGVzIGJlZm9yZSAieHl6IiBpbiB0aGUgc3RyaW5nICJhYmNcclxueHl6IiByYXRoZXIgdGhhbiBhZnRlcgorQ1IsIGV2ZW4gdGhvdWdoIENSIG9uIGl0cyBvd24gaXMgYSB2YWxpZCBuZXdsaW5lLiAoSXQgYWxzbyBtYXRjaGVzIGF0IHRoZSB2ZXJ5CitzdGFydCBvZiB0aGUgc3RyaW5nLCBvZiBjb3Vyc2UuKQorPC9QPgorPFA+CitOb3RlIHRoYXQgdGhlIHNlcXVlbmNlcyBcQSwgXFosIGFuZCBceiBjYW4gYmUgdXNlZCB0byBtYXRjaCB0aGUgc3RhcnQgYW5kCitlbmQgb2YgdGhlIHN1YmplY3QgaW4gYm90aCBtb2RlcywgYW5kIGlmIGFsbCBicmFuY2hlcyBvZiBhIHBhdHRlcm4gc3RhcnQgd2l0aAorXEEgaXQgaXMgYWx3YXlzIGFuY2hvcmVkLCB3aGV0aGVyIG9yIG5vdCBQQ1JFMl9NVUxUSUxJTkUgaXMgc2V0LgorPGEgbmFtZT0iZnVsbHN0b3Bkb3QiPjwvYT48L1A+Cis8YnI+PGEgbmFtZT0iU0VDNyIgaHJlZj0iI1RPQzEiPkZVTEwgU1RPUCAoUEVSSU9ELCBET1QpIEFORCBcTjwvYT48YnI+Cis8UD4KK091dHNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIGEgZG90IGluIHRoZSBwYXR0ZXJuIG1hdGNoZXMgYW55IG9uZSBjaGFyYWN0ZXIgaW4KK3RoZSBzdWJqZWN0IHN0cmluZyBleGNlcHQgKGJ5IGRlZmF1bHQpIGEgY2hhcmFjdGVyIHRoYXQgc2lnbmlmaWVzIHRoZSBlbmQgb2YgYQorbGluZS4KKzwvUD4KKzxQPgorV2hlbiBhIGxpbmUgZW5kaW5nIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgY2hhcmFjdGVyLCBkb3QgbmV2ZXIgbWF0Y2hlcyB0aGF0CitjaGFyYWN0ZXI7IHdoZW4gdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiBpcyB1c2VkLCBkb3QgZG9lcyBub3QgbWF0Y2ggQ1IKK2lmIGl0IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IExGLCBidXQgb3RoZXJ3aXNlIGl0IG1hdGNoZXMgYWxsIGNoYXJhY3RlcnMKKyhpbmNsdWRpbmcgaXNvbGF0ZWQgQ1JzIGFuZCBMRnMpLiBXaGVuIGFueSBVbmljb2RlIGxpbmUgZW5kaW5ncyBhcmUgYmVpbmcKK3JlY29nbml6ZWQsIGRvdCBkb2VzIG5vdCBtYXRjaCBDUiBvciBMRiBvciBhbnkgb2YgdGhlIG90aGVyIGxpbmUgZW5kaW5nCitjaGFyYWN0ZXJzLgorPC9QPgorPFA+CitUaGUgYmVoYXZpb3VyIG9mIGRvdCB3aXRoIHJlZ2FyZCB0byBuZXdsaW5lcyBjYW4gYmUgY2hhbmdlZC4gSWYgdGhlCitQQ1JFMl9ET1RBTEwgb3B0aW9uIGlzIHNldCwgYSBkb3QgbWF0Y2hlcyBhbnkgb25lIGNoYXJhY3Rlciwgd2l0aG91dCBleGNlcHRpb24uCitJZiB0aGUgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSBDUkxGIGlzIHByZXNlbnQgaW4gdGhlIHN1YmplY3Qgc3RyaW5nLCBpdCB0YWtlcwordHdvIGRvdHMgdG8gbWF0Y2ggaXQuCis8L1A+Cis8UD4KK1RoZSBoYW5kbGluZyBvZiBkb3QgaXMgZW50aXJlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIGhhbmRsaW5nIG9mIGNpcmN1bWZsZXggYW5kCitkb2xsYXIsIHRoZSBvbmx5IHJlbGF0aW9uc2hpcCBiZWluZyB0aGF0IHRoZXkgYm90aCBpbnZvbHZlIG5ld2xpbmVzLiBEb3QgaGFzIG5vCitzcGVjaWFsIG1lYW5pbmcgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuCis8L1A+Cis8UD4KK1RoZSBlc2NhcGUgc2VxdWVuY2UgXE4gYmVoYXZlcyBsaWtlIGEgZG90LCBleGNlcHQgdGhhdCBpdCBpcyBub3QgYWZmZWN0ZWQgYnkKK3RoZSBQQ1JFMl9ET1RBTEwgb3B0aW9uLiBJbiBvdGhlciB3b3JkcywgaXQgbWF0Y2hlcyBhbnkgY2hhcmFjdGVyIGV4Y2VwdCBvbmUKK3RoYXQgc2lnbmlmaWVzIHRoZSBlbmQgb2YgYSBsaW5lLiBQZXJsIGFsc28gdXNlcyBcTiB0byBtYXRjaCBjaGFyYWN0ZXJzIGJ5CituYW1lOyBQQ1JFMiBkb2VzIG5vdCBzdXBwb3J0IHRoaXMuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDOCIgaHJlZj0iI1RPQzEiPk1BVENISU5HIEEgU0lOR0xFIENPREUgVU5JVDwvYT48YnI+Cis8UD4KK091dHNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIHRoZSBlc2NhcGUgc2VxdWVuY2UgXEMgbWF0Y2hlcyBhbnkgb25lIGNvZGUgdW5pdCwKK3doZXRoZXIgb3Igbm90IGEgVVRGIG1vZGUgaXMgc2V0LiBJbiB0aGUgOC1iaXQgbGlicmFyeSwgb25lIGNvZGUgdW5pdCBpcyBvbmUKK2J5dGU7IGluIHRoZSAxNi1iaXQgbGlicmFyeSBpdCBpcyBhIDE2LWJpdCB1bml0OyBpbiB0aGUgMzItYml0IGxpYnJhcnkgaXQgaXMgYQorMzItYml0IHVuaXQuIFVubGlrZSBhIGRvdCwgXEMgYWx3YXlzIG1hdGNoZXMgbGluZS1lbmRpbmcgY2hhcmFjdGVycy4gVGhlCitmZWF0dXJlIGlzIHByb3ZpZGVkIGluIFBlcmwgaW4gb3JkZXIgdG8gbWF0Y2ggaW5kaXZpZHVhbCBieXRlcyBpbiBVVEYtOCBtb2RlLAorYnV0IGl0IGlzIHVuY2xlYXIgaG93IGl0IGNhbiB1c2VmdWxseSBiZSB1c2VkLgorPC9QPgorPFA+CitCZWNhdXNlIFxDIGJyZWFrcyB1cCBjaGFyYWN0ZXJzIGludG8gaW5kaXZpZHVhbCBjb2RlIHVuaXRzLCBtYXRjaGluZyBvbmUgdW5pdAord2l0aCBcQyBpbiBVVEYtOCBvciBVVEYtMTYgbW9kZSBtZWFucyB0aGF0IHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgbWF5IHN0YXJ0Cit3aXRoIGEgbWFsZm9ybWVkIFVURiBjaGFyYWN0ZXIuIFRoaXMgaGFzIHVuZGVmaW5lZCByZXN1bHRzLCBiZWNhdXNlIFBDUkUyCithc3N1bWVzIHRoYXQgaXQgaXMgbWF0Y2hpbmcgY2hhcmFjdGVyIGJ5IGNoYXJhY3RlciBpbiBhIHZhbGlkIFVURiBzdHJpbmcgKGJ5CitkZWZhdWx0IGl0IGNoZWNrcyB0aGUgc3ViamVjdCBzdHJpbmcncyB2YWxpZGl0eSBhdCB0aGUgc3RhcnQgb2YgcHJvY2Vzc2luZwordW5sZXNzIHRoZSBQQ1JFMl9OT19VVEZfQ0hFQ0sgb3B0aW9uIGlzIHVzZWQpLgorPC9QPgorPFA+CitBbiBhcHBsaWNhdGlvbiBjYW4gbG9jayBvdXQgdGhlIHVzZSBvZiBcQyBieSBzZXR0aW5nIHRoZQorUENSRTJfTkVWRVJfQkFDS1NMQVNIX0Mgb3B0aW9uIHdoZW4gY29tcGlsaW5nIGEgcGF0dGVybi4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0bworYnVpbGQgUENSRTIgd2l0aCB0aGUgdXNlIG9mIFxDIHBlcm1hbmVudGx5IGRpc2FibGVkLgorPC9QPgorPFA+CitQQ1JFMiBkb2VzIG5vdCBhbGxvdyBcQyB0byBhcHBlYXIgaW4gbG9va2JlaGluZCBhc3NlcnRpb25zCis8YSBocmVmPSIjbG9va2JlaGluZCI+KGRlc2NyaWJlZCBiZWxvdyk8L2E+CitpbiBhIFVURiBtb2RlLCBiZWNhdXNlIHRoaXMgd291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mCit0aGUgbG9va2JlaGluZC4gTmVpdGhlciB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24KKzxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiBub3QgdGhlIEpJVCBvcHRpbWl6ZXIgc3VwcG9ydCBcQyBpbiBhIFVURiBtb2RlLiBUaGUKK2Zvcm1lciBnaXZlcyBhIG1hdGNoLXRpbWUgZXJyb3I7IHRoZSBsYXR0ZXIgZmFpbHMgdG8gb3B0aW1pemUgYW5kIHNvIHRoZSBtYXRjaAoraXMgYWx3YXlzIHJ1biB1c2luZyB0aGUgaW50ZXJwcmV0ZXIuCis8L1A+Cis8UD4KK0luIGdlbmVyYWwsIHRoZSBcQyBlc2NhcGUgc2VxdWVuY2UgaXMgYmVzdCBhdm9pZGVkLiBIb3dldmVyLCBvbmUgd2F5IG9mIHVzaW5nCitpdCB0aGF0IGF2b2lkcyB0aGUgcHJvYmxlbSBvZiBtYWxmb3JtZWQgVVRGIGNoYXJhY3RlcnMgaXMgdG8gdXNlIGEgbG9va2FoZWFkIHRvCitjaGVjayB0aGUgbGVuZ3RoIG9mIHRoZSBuZXh0IGNoYXJhY3RlciwgYXMgaW4gdGhpcyBwYXR0ZXJuLCB3aGljaCBjb3VsZCBiZSB1c2VkCit3aXRoIGEgVVRGLTggc3RyaW5nIChpZ25vcmUgd2hpdGUgc3BhY2UgYW5kIGxpbmUgYnJlYWtzKToKKzxwcmU+CisgICg/fCAoPz1bXHgwMC1ceDdmXSkoXEMpIHwKKyAgICAgICg/PVtceDgwLVx4ezdmZn1dKShcQykoXEMpIHwKKyAgICAgICg/PVtceHs4MDB9LVx4e2ZmZmZ9XSkoXEMpKFxDKShcQykgfAorICAgICAgKD89W1x4ezEwMDAwfS1ceHsxZmZmZmZ9XSkoXEMpKFxDKShcQykoXEMpKQorPC9wcmU+CitJbiB0aGlzIGV4YW1wbGUsIGEgZ3JvdXAgdGhhdCBzdGFydHMgd2l0aCAoP3wgcmVzZXRzIHRoZSBjYXB0dXJpbmcgcGFyZW50aGVzZXMKK251bWJlcnMgaW4gZWFjaCBhbHRlcm5hdGl2ZSAoc2VlCis8YSBocmVmPSIjZHVwc3VicGF0dGVybm51bWJlciI+IkR1cGxpY2F0ZSBTdWJwYXR0ZXJuIE51bWJlcnMiPC9hPgorYmVsb3cpLiBUaGUgYXNzZXJ0aW9ucyBhdCB0aGUgc3RhcnQgb2YgZWFjaCBicmFuY2ggY2hlY2sgdGhlIG5leHQgVVRGLTgKK2NoYXJhY3RlciBmb3IgdmFsdWVzIHdob3NlIGVuY29kaW5nIHVzZXMgMSwgMiwgMywgb3IgNCBieXRlcywgcmVzcGVjdGl2ZWx5LiBUaGUKK2NoYXJhY3RlcidzIGluZGl2aWR1YWwgYnl0ZXMgYXJlIHRoZW4gY2FwdHVyZWQgYnkgdGhlIGFwcHJvcHJpYXRlIG51bWJlciBvZgorXEMgZ3JvdXBzLgorPGEgbmFtZT0iY2hhcmFjdGVyY2xhc3MiPjwvYT48L1A+Cis8YnI+PGEgbmFtZT0iU0VDOSIgaHJlZj0iI1RPQzEiPlNRVUFSRSBCUkFDS0VUUyBBTkQgQ0hBUkFDVEVSIENMQVNTRVM8L2E+PGJyPgorPFA+CitBbiBvcGVuaW5nIHNxdWFyZSBicmFja2V0IGludHJvZHVjZXMgYSBjaGFyYWN0ZXIgY2xhc3MsIHRlcm1pbmF0ZWQgYnkgYSBjbG9zaW5nCitzcXVhcmUgYnJhY2tldC4gQSBjbG9zaW5nIHNxdWFyZSBicmFja2V0IG9uIGl0cyBvd24gaXMgbm90IHNwZWNpYWwgYnkgZGVmYXVsdC4KK0lmIGEgY2xvc2luZyBzcXVhcmUgYnJhY2tldCBpcyByZXF1aXJlZCBhcyBhIG1lbWJlciBvZiB0aGUgY2xhc3MsIGl0IHNob3VsZCBiZQordGhlIGZpcnN0IGRhdGEgY2hhcmFjdGVyIGluIHRoZSBjbGFzcyAoYWZ0ZXIgYW4gaW5pdGlhbCBjaXJjdW1mbGV4LCBpZiBwcmVzZW50KQorb3IgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLiBUaGlzIG1lYW5zIHRoYXQsIGJ5IGRlZmF1bHQsIGFuIGVtcHR5IGNsYXNzIGNhbm5vdAorYmUgZGVmaW5lZC4gSG93ZXZlciwgaWYgdGhlIFBDUkUyX0FMTE9XX0VNUFRZX0NMQVNTIG9wdGlvbiBpcyBzZXQsIGEgY2xvc2luZworc3F1YXJlIGJyYWNrZXQgYXQgdGhlIHN0YXJ0IGRvZXMgZW5kIHRoZSAoZW1wdHkpIGNsYXNzLgorPC9QPgorPFA+CitBIGNoYXJhY3RlciBjbGFzcyBtYXRjaGVzIGEgc2luZ2xlIGNoYXJhY3RlciBpbiB0aGUgc3ViamVjdC4gQSBtYXRjaGVkCitjaGFyYWN0ZXIgbXVzdCBiZSBpbiB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgZGVmaW5lZCBieSB0aGUgY2xhc3MsIHVubGVzcyB0aGUKK2ZpcnN0IGNoYXJhY3RlciBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBpcyBhIGNpcmN1bWZsZXgsIGluIHdoaWNoIGNhc2UgdGhlCitzdWJqZWN0IGNoYXJhY3RlciBtdXN0IG5vdCBiZSBpbiB0aGUgc2V0IGRlZmluZWQgYnkgdGhlIGNsYXNzLiBJZiBhIGNpcmN1bWZsZXgKK2lzIGFjdHVhbGx5IHJlcXVpcmVkIGFzIGEgbWVtYmVyIG9mIHRoZSBjbGFzcywgZW5zdXJlIGl0IGlzIG5vdCB0aGUgZmlyc3QKK2NoYXJhY3Rlciwgb3IgZXNjYXBlIGl0IHdpdGggYSBiYWNrc2xhc2guCis8L1A+Cis8UD4KK0ZvciBleGFtcGxlLCB0aGUgY2hhcmFjdGVyIGNsYXNzIFthZWlvdV0gbWF0Y2hlcyBhbnkgbG93ZXIgY2FzZSB2b3dlbCwgd2hpbGUKK1teYWVpb3VdIG1hdGNoZXMgYW55IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIGxvd2VyIGNhc2Ugdm93ZWwuIE5vdGUgdGhhdCBhCitjaXJjdW1mbGV4IGlzIGp1c3QgYSBjb252ZW5pZW50IG5vdGF0aW9uIGZvciBzcGVjaWZ5aW5nIHRoZSBjaGFyYWN0ZXJzIHRoYXQKK2FyZSBpbiB0aGUgY2xhc3MgYnkgZW51bWVyYXRpbmcgdGhvc2UgdGhhdCBhcmUgbm90LiBBIGNsYXNzIHRoYXQgc3RhcnRzIHdpdGggYQorY2lyY3VtZmxleCBpcyBub3QgYW4gYXNzZXJ0aW9uOyBpdCBzdGlsbCBjb25zdW1lcyBhIGNoYXJhY3RlciBmcm9tIHRoZSBzdWJqZWN0CitzdHJpbmcsIGFuZCB0aGVyZWZvcmUgaXQgZmFpbHMgaWYgdGhlIGN1cnJlbnQgcG9pbnRlciBpcyBhdCB0aGUgZW5kIG9mIHRoZQorc3RyaW5nLgorPC9QPgorPFA+CitXaGVuIGNhc2VsZXNzIG1hdGNoaW5nIGlzIHNldCwgYW55IGxldHRlcnMgaW4gYSBjbGFzcyByZXByZXNlbnQgYm90aCB0aGVpcgordXBwZXIgY2FzZSBhbmQgbG93ZXIgY2FzZSB2ZXJzaW9ucywgc28gZm9yIGV4YW1wbGUsIGEgY2FzZWxlc3MgW2FlaW91XSBtYXRjaGVzCisiQSIgYXMgd2VsbCBhcyAiYSIsIGFuZCBhIGNhc2VsZXNzIFteYWVpb3VdIGRvZXMgbm90IG1hdGNoICJBIiwgd2hlcmVhcyBhCitjYXNlZnVsIHZlcnNpb24gd291bGQuCis8L1A+Cis8UD4KK0NoYXJhY3RlcnMgdGhhdCBtaWdodCBpbmRpY2F0ZSBsaW5lIGJyZWFrcyBhcmUgbmV2ZXIgdHJlYXRlZCBpbiBhbnkgc3BlY2lhbCB3YXkKK3doZW4gbWF0Y2hpbmcgY2hhcmFjdGVyIGNsYXNzZXMsIHdoYXRldmVyIGxpbmUtZW5kaW5nIHNlcXVlbmNlIGlzIGluIHVzZSwgYW5kCit3aGF0ZXZlciBzZXR0aW5nIG9mIHRoZSBQQ1JFMl9ET1RBTEwgYW5kIFBDUkUyX01VTFRJTElORSBvcHRpb25zIGlzIHVzZWQuIEEKK2NsYXNzIHN1Y2ggYXMgW15hXSBhbHdheXMgbWF0Y2hlcyBvbmUgb2YgdGhlc2UgY2hhcmFjdGVycy4KKzwvUD4KKzxQPgorVGhlIG1pbnVzIChoeXBoZW4pIGNoYXJhY3RlciBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiBhCitjaGFyYWN0ZXIgY2xhc3MuIEZvciBleGFtcGxlLCBbZC1tXSBtYXRjaGVzIGFueSBsZXR0ZXIgYmV0d2VlbiBkIGFuZCBtLAoraW5jbHVzaXZlLiBJZiBhIG1pbnVzIGNoYXJhY3RlciBpcyByZXF1aXJlZCBpbiBhIGNsYXNzLCBpdCBtdXN0IGJlIGVzY2FwZWQgd2l0aAorYSBiYWNrc2xhc2ggb3IgYXBwZWFyIGluIGEgcG9zaXRpb24gd2hlcmUgaXQgY2Fubm90IGJlIGludGVycHJldGVkIGFzCitpbmRpY2F0aW5nIGEgcmFuZ2UsIHR5cGljYWxseSBhcyB0aGUgZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGNsYXNzLCBvcgoraW1tZWRpYXRlbHkgYWZ0ZXIgYSByYW5nZS4gRm9yIGV4YW1wbGUsIFtiLWQtel0gbWF0Y2hlcyBsZXR0ZXJzIGluIHRoZSByYW5nZSBiCit0byBkLCBhIGh5cGhlbiBjaGFyYWN0ZXIsIG9yIHouCis8L1A+Cis8UD4KK0l0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIHRoZSBsaXRlcmFsIGNoYXJhY3RlciAiXSIgYXMgdGhlIGVuZCBjaGFyYWN0ZXIgb2YgYQorcmFuZ2UuIEEgcGF0dGVybiBzdWNoIGFzIFtXLV00Nl0gaXMgaW50ZXJwcmV0ZWQgYXMgYSBjbGFzcyBvZiB0d28gY2hhcmFjdGVycworKCJXIiBhbmQgIi0iKSBmb2xsb3dlZCBieSBhIGxpdGVyYWwgc3RyaW5nICI0Nl0iLCBzbyBpdCB3b3VsZCBtYXRjaCAiVzQ2XSIgb3IKKyItNDZdIi4gSG93ZXZlciwgaWYgdGhlICJdIiBpcyBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2ggaXQgaXMgaW50ZXJwcmV0ZWQgYXMKK3RoZSBlbmQgb2YgcmFuZ2UsIHNvIFtXLVxdNDZdIGlzIGludGVycHJldGVkIGFzIGEgY2xhc3MgY29udGFpbmluZyBhIHJhbmdlCitmb2xsb3dlZCBieSB0d28gb3RoZXIgY2hhcmFjdGVycy4gVGhlIG9jdGFsIG9yIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mCisiXSIgY2FuIGFsc28gYmUgdXNlZCB0byBlbmQgYSByYW5nZS4KKzwvUD4KKzxQPgorQW4gZXJyb3IgaXMgZ2VuZXJhdGVkIGlmIGEgUE9TSVggY2hhcmFjdGVyIGNsYXNzIChzZWUgYmVsb3cpIG9yIGFuIGVzY2FwZQorc2VxdWVuY2Ugb3RoZXIgdGhhbiBvbmUgdGhhdCBkZWZpbmVzIGEgc2luZ2xlIGNoYXJhY3RlciBhcHBlYXJzIGF0IGEgcG9pbnQKK3doZXJlIGEgcmFuZ2UgZW5kaW5nIGNoYXJhY3RlciBpcyBleHBlY3RlZC4gRm9yIGV4YW1wbGUsIFt6LVx4ZmZdIGlzIHZhbGlkLAorYnV0IFtBLVxkXSBhbmQgW0EtWzpkaWdpdDpdXSBhcmUgbm90LgorPC9QPgorPFA+CitSYW5nZXMgbm9ybWFsbHkgaW5jbHVkZSBhbGwgY29kZSBwb2ludHMgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBjaGFyYWN0ZXJzLAoraW5jbHVzaXZlLiBUaGV5IGNhbiBhbHNvIGJlIHVzZWQgZm9yIGNvZGUgcG9pbnRzIHNwZWNpZmllZCBudW1lcmljYWxseSwgZm9yCitleGFtcGxlIFtcMDAwLVwwMzddLiBSYW5nZXMgY2FuIGluY2x1ZGUgYW55IGNoYXJhY3RlcnMgdGhhdCBhcmUgdmFsaWQgZm9yIHRoZQorY3VycmVudCBtb2RlLgorPC9QPgorPFA+CitUaGVyZSBpcyBhIHNwZWNpYWwgY2FzZSBpbiBFQkNESUMgZW52aXJvbm1lbnRzIGZvciByYW5nZXMgd2hvc2UgZW5kIHBvaW50cyBhcmUKK2JvdGggc3BlY2lmaWVkIGFzIGxpdGVyYWwgbGV0dGVycyBpbiB0aGUgc2FtZSBjYXNlLiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoCitQZXJsLCBFQkNESUMgY29kZSBwb2ludHMgd2l0aGluIHRoZSByYW5nZSB0aGF0IGFyZSBub3QgbGV0dGVycyBhcmUgb21pdHRlZC4gRm9yCitleGFtcGxlLCBbaC1rXSBtYXRjaGVzIG9ubHkgZm91ciBjaGFyYWN0ZXJzLCBldmVuIHRob3VnaCB0aGUgY29kZXMgZm9yIGggYW5kIGsKK2FyZSAweDg4IGFuZCAweDkyLCBhIHJhbmdlIG9mIDExIGNvZGUgcG9pbnRzLiBIb3dldmVyLCBpZiB0aGUgcmFuZ2UgaXMKK3NwZWNpZmllZCBudW1lcmljYWxseSwgZm9yIGV4YW1wbGUsIFtceDg4LVx4OTJdIG9yIFtoLVx4OTJdLCBhbGwgY29kZSBwb2ludHMKK2FyZSBpbmNsdWRlZC4KKzwvUD4KKzxQPgorSWYgYSByYW5nZSB0aGF0IGluY2x1ZGVzIGxldHRlcnMgaXMgdXNlZCB3aGVuIGNhc2VsZXNzIG1hdGNoaW5nIGlzIHNldCwgaXQKK21hdGNoZXMgdGhlIGxldHRlcnMgaW4gZWl0aGVyIGNhc2UuIEZvciBleGFtcGxlLCBbVy1jXSBpcyBlcXVpdmFsZW50IHRvCitbXVtcXF5fYHd4eXphYmNdLCBtYXRjaGVkIGNhc2VsZXNzbHksIGFuZCBpbiBhIG5vbi1VVEYgbW9kZSwgaWYgY2hhcmFjdGVyCit0YWJsZXMgZm9yIGEgRnJlbmNoIGxvY2FsZSBhcmUgaW4gdXNlLCBbXHhjOC1ceGNiXSBtYXRjaGVzIGFjY2VudGVkIEUKK2NoYXJhY3RlcnMgaW4gYm90aCBjYXNlcy4KKzwvUD4KKzxQPgorVGhlIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2VzIFxkLCBcRCwgXGgsIFxILCBccCwgXFAsIFxzLCBcUywgXHYsCitcViwgXHcsIGFuZCBcVyBtYXkgYXBwZWFyIGluIGEgY2hhcmFjdGVyIGNsYXNzLCBhbmQgYWRkIHRoZSBjaGFyYWN0ZXJzIHRoYXQKK3RoZXkgbWF0Y2ggdG8gdGhlIGNsYXNzLiBGb3IgZXhhbXBsZSwgW1xkQUJDREVGXSBtYXRjaGVzIGFueSBoZXhhZGVjaW1hbAorZGlnaXQuIEluIFVURiBtb2RlcywgdGhlIFBDUkUyX1VDUCBvcHRpb24gYWZmZWN0cyB0aGUgbWVhbmluZ3Mgb2YgXGQsIFxzLCBcdworYW5kIHRoZWlyIHVwcGVyIGNhc2UgcGFydG5lcnMsIGp1c3QgYXMgaXQgZG9lcyB3aGVuIHRoZXkgYXBwZWFyIG91dHNpZGUgYQorY2hhcmFjdGVyIGNsYXNzLCBhcyBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKKzxhIGhyZWY9IiNnZW5lcmljY2hhcnR5cGVzIj4iR2VuZXJpYyBjaGFyYWN0ZXIgdHlwZXMiPC9hPgorYWJvdmUuIFRoZSBlc2NhcGUgc2VxdWVuY2UgXGIgaGFzIGEgZGlmZmVyZW50IG1lYW5pbmcgaW5zaWRlIGEgY2hhcmFjdGVyCitjbGFzczsgaXQgbWF0Y2hlcyB0aGUgYmFja3NwYWNlIGNoYXJhY3Rlci4gVGhlIHNlcXVlbmNlcyBcQiwgXE4sIFxSLCBhbmQgXFgKK2FyZSBub3Qgc3BlY2lhbCBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MuIExpa2UgYW55IG90aGVyIHVucmVjb2duaXplZCBlc2NhcGUKK3NlcXVlbmNlcywgdGhleSBjYXVzZSBhbiBlcnJvci4KKzwvUD4KKzxQPgorQSBjaXJjdW1mbGV4IGNhbiBjb252ZW5pZW50bHkgYmUgdXNlZCB3aXRoIHRoZSB1cHBlciBjYXNlIGNoYXJhY3RlciB0eXBlcyB0bworc3BlY2lmeSBhIG1vcmUgcmVzdHJpY3RlZCBzZXQgb2YgY2hhcmFjdGVycyB0aGFuIHRoZSBtYXRjaGluZyBsb3dlciBjYXNlIHR5cGUuCitGb3IgZXhhbXBsZSwgdGhlIGNsYXNzIFteXFdfXSBtYXRjaGVzIGFueSBsZXR0ZXIgb3IgZGlnaXQsIGJ1dCBub3QgdW5kZXJzY29yZSwKK3doZXJlYXMgW1x3XSBpbmNsdWRlcyB1bmRlcnNjb3JlLiBBIHBvc2l0aXZlIGNoYXJhY3RlciBjbGFzcyBzaG91bGQgYmUgcmVhZCBhcworInNvbWV0aGluZyBPUiBzb21ldGhpbmcgT1IgLi4uIiBhbmQgYSBuZWdhdGl2ZSBjbGFzcyBhcyAiTk9UIHNvbWV0aGluZyBBTkQgTk9UCitzb21ldGhpbmcgQU5EIE5PVCAuLi4iLgorPC9QPgorPFA+CitUaGUgb25seSBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSByZWNvZ25pemVkIGluIGNoYXJhY3RlciBjbGFzc2VzIGFyZSBiYWNrc2xhc2gsCitoeXBoZW4gKG9ubHkgd2hlcmUgaXQgY2FuIGJlIGludGVycHJldGVkIGFzIHNwZWNpZnlpbmcgYSByYW5nZSksIGNpcmN1bWZsZXgKKyhvbmx5IGF0IHRoZSBzdGFydCksIG9wZW5pbmcgc3F1YXJlIGJyYWNrZXQgKG9ubHkgd2hlbiBpdCBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMKK2ludHJvZHVjaW5nIGEgUE9TSVggY2xhc3MgbmFtZSwgb3IgZm9yIGEgc3BlY2lhbCBjb21wYXRpYmlsaXR5IGZlYXR1cmUgLSBzZWUKK3RoZSBuZXh0IHR3byBzZWN0aW9ucyksIGFuZCB0aGUgdGVybWluYXRpbmcgY2xvc2luZyBzcXVhcmUgYnJhY2tldC4gSG93ZXZlciwKK2VzY2FwaW5nIG90aGVyIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBkb2VzIG5vIGhhcm0uCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTAiIGhyZWY9IiNUT0MxIj5QT1NJWCBDSEFSQUNURVIgQ0xBU1NFUzwvYT48YnI+Cis8UD4KK1Blcmwgc3VwcG9ydHMgdGhlIFBPU0lYIG5vdGF0aW9uIGZvciBjaGFyYWN0ZXIgY2xhc3Nlcy4gVGhpcyB1c2VzIG5hbWVzCitlbmNsb3NlZCBieSBbOiBhbmQgOl0gd2l0aGluIHRoZSBlbmNsb3Npbmcgc3F1YXJlIGJyYWNrZXRzLiBQQ1JFMiBhbHNvIHN1cHBvcnRzCit0aGlzIG5vdGF0aW9uLiBGb3IgZXhhbXBsZSwKKzxwcmU+CisgIFswMVs6YWxwaGE6XSVdCis8L3ByZT4KK21hdGNoZXMgIjAiLCAiMSIsIGFueSBhbHBoYWJldGljIGNoYXJhY3Rlciwgb3IgIiUiLiBUaGUgc3VwcG9ydGVkIGNsYXNzIG5hbWVzCithcmU6Cis8cHJlPgorICBhbG51bSAgICBsZXR0ZXJzIGFuZCBkaWdpdHMKKyAgYWxwaGEgICAgbGV0dGVycworICBhc2NpaSAgICBjaGFyYWN0ZXIgY29kZXMgMCAtIDEyNworICBibGFuayAgICBzcGFjZSBvciB0YWIgb25seQorICBjbnRybCAgICBjb250cm9sIGNoYXJhY3RlcnMKKyAgZGlnaXQgICAgZGVjaW1hbCBkaWdpdHMgKHNhbWUgYXMgXGQpCisgIGdyYXBoICAgIHByaW50aW5nIGNoYXJhY3RlcnMsIGV4Y2x1ZGluZyBzcGFjZQorICBsb3dlciAgICBsb3dlciBjYXNlIGxldHRlcnMKKyAgcHJpbnQgICAgcHJpbnRpbmcgY2hhcmFjdGVycywgaW5jbHVkaW5nIHNwYWNlCisgIHB1bmN0ICAgIHByaW50aW5nIGNoYXJhY3RlcnMsIGV4Y2x1ZGluZyBsZXR0ZXJzIGFuZCBkaWdpdHMgYW5kIHNwYWNlCisgIHNwYWNlICAgIHdoaXRlIHNwYWNlICh0aGUgc2FtZSBhcyBccyBmcm9tIFBDUkUyIDguMzQpCisgIHVwcGVyICAgIHVwcGVyIGNhc2UgbGV0dGVycworICB3b3JkICAgICAid29yZCIgY2hhcmFjdGVycyAoc2FtZSBhcyBcdykKKyAgeGRpZ2l0ICAgaGV4YWRlY2ltYWwgZGlnaXRzCis8L3ByZT4KK1RoZSBkZWZhdWx0ICJzcGFjZSIgY2hhcmFjdGVycyBhcmUgSFQgKDkpLCBMRiAoMTApLCBWVCAoMTEpLCBGRiAoMTIpLCBDUiAoMTMpLAorYW5kIHNwYWNlICgzMikuIElmIGxvY2FsZS1zcGVjaWZpYyBtYXRjaGluZyBpcyB0YWtpbmcgcGxhY2UsIHRoZSBsaXN0IG9mIHNwYWNlCitjaGFyYWN0ZXJzIG1heSBiZSBkaWZmZXJlbnQ7IHRoZXJlIG1heSBiZSBmZXdlciBvciBtb3JlIG9mIHRoZW0uICJTcGFjZSIgYW5kCitccyBtYXRjaCB0aGUgc2FtZSBzZXQgb2YgY2hhcmFjdGVycy4KKzwvUD4KKzxQPgorVGhlIG5hbWUgIndvcmQiIGlzIGEgUGVybCBleHRlbnNpb24sIGFuZCAiYmxhbmsiIGlzIGEgR05VIGV4dGVuc2lvbiBmcm9tIFBlcmwKKzUuOC4gQW5vdGhlciBQZXJsIGV4dGVuc2lvbiBpcyBuZWdhdGlvbiwgd2hpY2ggaXMgaW5kaWNhdGVkIGJ5IGEgXiBjaGFyYWN0ZXIKK2FmdGVyIHRoZSBjb2xvbi4gRm9yIGV4YW1wbGUsCis8cHJlPgorICBbMTJbOl5kaWdpdDpdXQorPC9wcmU+CittYXRjaGVzICIxIiwgIjIiLCBvciBhbnkgbm9uLWRpZ2l0LiBQQ1JFMiAoYW5kIFBlcmwpIGFsc28gcmVjb2duaXplIHRoZSBQT1NJWAorc3ludGF4IFsuY2guXSBhbmQgWz1jaD1dIHdoZXJlICJjaCIgaXMgYSAiY29sbGF0aW5nIGVsZW1lbnQiLCBidXQgdGhlc2UgYXJlIG5vdAorc3VwcG9ydGVkLCBhbmQgYW4gZXJyb3IgaXMgZ2l2ZW4gaWYgdGhleSBhcmUgZW5jb3VudGVyZWQuCis8L1A+Cis8UD4KK0J5IGRlZmF1bHQsIGNoYXJhY3RlcnMgd2l0aCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEyNyBkbyBub3QgbWF0Y2ggYW55IG9mIHRoZQorUE9TSVggY2hhcmFjdGVyIGNsYXNzZXMsIGFsdGhvdWdoIHRoaXMgbWF5IGJlIGRpZmZlcmVudCBmb3IgY2hhcmFjdGVycyBpbiB0aGUKK3JhbmdlIDEyOC0yNTUgd2hlbiBsb2NhbGUtc3BlY2lmaWMgbWF0Y2hpbmcgaXMgaGFwcGVuaW5nLiBIb3dldmVyLCBpZiB0aGUKK1BDUkUyX1VDUCBvcHRpb24gaXMgcGFzc2VkIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4sIHNvbWUgb2YgdGhlIGNsYXNzZXMgYXJlCitjaGFuZ2VkIHNvIHRoYXQgVW5pY29kZSBjaGFyYWN0ZXIgcHJvcGVydGllcyBhcmUgdXNlZC4gVGhpcyBpcyBhY2hpZXZlZCBieQorcmVwbGFjaW5nIGNlcnRhaW4gUE9TSVggY2xhc3NlcyB3aXRoIG90aGVyIHNlcXVlbmNlcywgYXMgZm9sbG93czoKKzxwcmU+CisgIFs6YWxudW06XSAgYmVjb21lcyAgXHB7WGFufQorICBbOmFscGhhOl0gIGJlY29tZXMgIFxwe0x9CisgIFs6Ymxhbms6XSAgYmVjb21lcyAgXGgKKyAgWzpjbnRybDpdICBiZWNvbWVzICBccHtDY30KKyAgWzpkaWdpdDpdICBiZWNvbWVzICBccHtOZH0KKyAgWzpsb3dlcjpdICBiZWNvbWVzICBccHtMbH0KKyAgWzpzcGFjZTpdICBiZWNvbWVzICBccHtYcHN9CisgIFs6dXBwZXI6XSAgYmVjb21lcyAgXHB7THV9CisgIFs6d29yZDpdICAgYmVjb21lcyAgXHB7WHdkfQorPC9wcmU+CitOZWdhdGVkIHZlcnNpb25zLCBzdWNoIGFzIFs6XmFscGhhOl0gdXNlIFxQIGluc3RlYWQgb2YgXHAuIFRocmVlIG90aGVyIFBPU0lYCitjbGFzc2VzIGFyZSBoYW5kbGVkIHNwZWNpYWxseSBpbiBVQ1AgbW9kZToKKzwvUD4KKzxQPgorWzpncmFwaDpdCitUaGlzIG1hdGNoZXMgY2hhcmFjdGVycyB0aGF0IGhhdmUgZ2x5cGhzIHRoYXQgbWFyayB0aGUgcGFnZSB3aGVuIHByaW50ZWQuIEluCitVbmljb2RlIHByb3BlcnR5IHRlcm1zLCBpdCBtYXRjaGVzIGFsbCBjaGFyYWN0ZXJzIHdpdGggdGhlIEwsIE0sIE4sIFAsIFMsIG9yIENmCitwcm9wZXJ0aWVzLCBleGNlcHQgZm9yOgorPHByZT4KKyAgVSswNjFDICAgICAgICAgICBBcmFiaWMgTGV0dGVyIE1hcmsKKyAgVSsxODBFICAgICAgICAgICBNb25nb2xpYW4gVm93ZWwgU2VwYXJhdG9yCisgIFUrMjA2NiAtIFUrMjA2OSAgVmFyaW91cyAiaXNvbGF0ZSJzCisKKzwvUFJFPgorPC9QPgorPFA+CitbOnByaW50Ol0KK1RoaXMgbWF0Y2hlcyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIFs6Z3JhcGg6XSBwbHVzIHNwYWNlIGNoYXJhY3RlcnMgdGhhdCBhcmUKK25vdCBjb250cm9scywgdGhhdCBpcywgY2hhcmFjdGVycyB3aXRoIHRoZSBacyBwcm9wZXJ0eS4KKzwvUD4KKzxQPgorWzpwdW5jdDpdCitUaGlzIG1hdGNoZXMgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlIHRoZSBVbmljb2RlIFAgKHB1bmN0dWF0aW9uKSBwcm9wZXJ0eSwKK3BsdXMgdGhvc2UgY2hhcmFjdGVycyB3aXRoIGNvZGUgcG9pbnRzIGxlc3MgdGhhbiAyNTYgdGhhdCBoYXZlIHRoZSBTIChTeW1ib2wpCitwcm9wZXJ0eS4KKzwvUD4KKzxQPgorVGhlIG90aGVyIFBPU0lYIGNsYXNzZXMgYXJlIHVuY2hhbmdlZCwgYW5kIG1hdGNoIG9ubHkgY2hhcmFjdGVycyB3aXRoIGNvZGUKK3BvaW50cyBsZXNzIHRoYW4gMjU2LgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzExIiBocmVmPSIjVE9DMSI+Q09NUEFUSUJJTElUWSBGRUFUVVJFIEZPUiBXT1JEIEJPVU5EQVJJRVM8L2E+PGJyPgorPFA+CitJbiB0aGUgUE9TSVguMiBjb21wbGlhbnQgbGlicmFyeSB0aGF0IHdhcyBpbmNsdWRlZCBpbiA0LjRCU0QgVW5peCwgdGhlIHVnbHkKK3N5bnRheCBbWzomIzYwOzpdXSBhbmQgW1s6JiM2Mjs6XV0gaXMgdXNlZCBmb3IgbWF0Y2hpbmcgInN0YXJ0IG9mIHdvcmQiIGFuZCAiZW5kIG9mCit3b3JkIi4gUENSRTIgdHJlYXRzIHRoZXNlIGl0ZW1zIGFzIGZvbGxvd3M6Cis8cHJlPgorICBbWzomIzYwOzpdXSAgaXMgY29udmVydGVkIHRvICBcYig/PVx3KQorICBbWzomIzYyOzpdXSAgaXMgY29udmVydGVkIHRvICBcYig/JiM2MDs9XHcpCis8L3ByZT4KK09ubHkgdGhlc2UgZXhhY3QgY2hhcmFjdGVyIHNlcXVlbmNlcyBhcmUgcmVjb2duaXplZC4gQSBzZXF1ZW5jZSBzdWNoIGFzCitbYVs6JiM2MDs6XWJdIHByb3Zva2VzIGVycm9yIGZvciBhbiB1bnJlY29nbml6ZWQgUE9TSVggY2xhc3MgbmFtZS4gVGhpcyBzdXBwb3J0IGlzCitub3QgY29tcGF0aWJsZSB3aXRoIFBlcmwuIEl0IGlzIHByb3ZpZGVkIHRvIGhlbHAgbWlncmF0aW9ucyBmcm9tIG90aGVyCitlbnZpcm9ubWVudHMsIGFuZCBpcyBiZXN0IG5vdCB1c2VkIGluIGFueSBuZXcgcGF0dGVybnMuIE5vdGUgdGhhdCBcYiBtYXRjaGVzCithdCB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgb2YgYSB3b3JkIChzZWUKKzxhIGhyZWY9IiNzbWFsbGFzc2VydGlvbnMiPiJTaW1wbGUgYXNzZXJ0aW9ucyI8L2E+CithYm92ZSksIGFuZCBpbiBhIFBlcmwtc3R5bGUgcGF0dGVybiB0aGUgcHJlY2VkaW5nIG9yIGZvbGxvd2luZyBjaGFyYWN0ZXIKK25vcm1hbGx5IHNob3dzIHdoaWNoIGlzIHdhbnRlZCwgd2l0aG91dCB0aGUgbmVlZCBmb3IgdGhlIGFzc2VydGlvbnMgdGhhdCBhcmUKK3VzZWQgYWJvdmUgaW4gb3JkZXIgdG8gZ2l2ZSBleGFjdGx5IHRoZSBQT1NJWCBiZWhhdmlvdXIuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTIiIGhyZWY9IiNUT0MxIj5WRVJUSUNBTCBCQVI8L2E+PGJyPgorPFA+CitWZXJ0aWNhbCBiYXIgY2hhcmFjdGVycyBhcmUgdXNlZCB0byBzZXBhcmF0ZSBhbHRlcm5hdGl2ZSBwYXR0ZXJucy4gRm9yIGV4YW1wbGUsCit0aGUgcGF0dGVybgorPHByZT4KKyAgZ2lsYmVydHxzdWxsaXZhbgorPC9wcmU+CittYXRjaGVzIGVpdGhlciAiZ2lsYmVydCIgb3IgInN1bGxpdmFuIi4gQW55IG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgbWF5IGFwcGVhciwKK2FuZCBhbiBlbXB0eSBhbHRlcm5hdGl2ZSBpcyBwZXJtaXR0ZWQgKG1hdGNoaW5nIHRoZSBlbXB0eSBzdHJpbmcpLiBUaGUgbWF0Y2hpbmcKK3Byb2Nlc3MgdHJpZXMgZWFjaCBhbHRlcm5hdGl2ZSBpbiB0dXJuLCBmcm9tIGxlZnQgdG8gcmlnaHQsIGFuZCB0aGUgZmlyc3Qgb25lCit0aGF0IHN1Y2NlZWRzIGlzIHVzZWQuIElmIHRoZSBhbHRlcm5hdGl2ZXMgYXJlIHdpdGhpbiBhIHN1YnBhdHRlcm4KKzxhIGhyZWY9IiNzdWJwYXR0ZXJuIj4oZGVmaW5lZCBiZWxvdyksPC9hPgorInN1Y2NlZWRzIiBtZWFucyBtYXRjaGluZyB0aGUgcmVzdCBvZiB0aGUgbWFpbiBwYXR0ZXJuIGFzIHdlbGwgYXMgdGhlCithbHRlcm5hdGl2ZSBpbiB0aGUgc3VicGF0dGVybi4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxMyIgaHJlZj0iI1RPQzEiPklOVEVSTkFMIE9QVElPTiBTRVRUSU5HPC9hPjxicj4KKzxQPgorVGhlIHNldHRpbmdzIG9mIHRoZSBQQ1JFMl9DQVNFTEVTUywgUENSRTJfTVVMVElMSU5FLCBQQ1JFMl9ET1RBTEwsIGFuZAorUENSRTJfRVhURU5ERUQgb3B0aW9ucyAod2hpY2ggYXJlIFBlcmwtY29tcGF0aWJsZSkgY2FuIGJlIGNoYW5nZWQgZnJvbSB3aXRoaW4KK3RoZSBwYXR0ZXJuIGJ5IGEgc2VxdWVuY2Ugb2YgUGVybCBvcHRpb24gbGV0dGVycyBlbmNsb3NlZCBiZXR3ZWVuICIoPyIgYW5kICIpIi4KK1RoZSBvcHRpb24gbGV0dGVycyBhcmUKKzxwcmU+CisgIGkgIGZvciBQQ1JFMl9DQVNFTEVTUworICBtICBmb3IgUENSRTJfTVVMVElMSU5FCisgIHMgIGZvciBQQ1JFMl9ET1RBTEwKKyAgeCAgZm9yIFBDUkUyX0VYVEVOREVECis8L3ByZT4KK0ZvciBleGFtcGxlLCAoP2ltKSBzZXRzIGNhc2VsZXNzLCBtdWx0aWxpbmUgbWF0Y2hpbmcuIEl0IGlzIGFsc28gcG9zc2libGUgdG8KK3Vuc2V0IHRoZXNlIG9wdGlvbnMgYnkgcHJlY2VkaW5nIHRoZSBsZXR0ZXIgd2l0aCBhIGh5cGhlbiwgYW5kIGEgY29tYmluZWQKK3NldHRpbmcgYW5kIHVuc2V0dGluZyBzdWNoIGFzICg/aW0tc3gpLCB3aGljaCBzZXRzIFBDUkUyX0NBU0VMRVNTIGFuZAorUENSRTJfTVVMVElMSU5FIHdoaWxlIHVuc2V0dGluZyBQQ1JFMl9ET1RBTEwgYW5kIFBDUkUyX0VYVEVOREVELCBpcyBhbHNvCitwZXJtaXR0ZWQuIElmIGEgbGV0dGVyIGFwcGVhcnMgYm90aCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBoeXBoZW4sIHRoZSBvcHRpb24gaXMKK3Vuc2V0LiBBbiBlbXB0eSBvcHRpb25zIHNldHRpbmcgIig/KSIgaXMgYWxsb3dlZC4gTmVlZGxlc3MgdG8gc2F5LCBpdCBoYXMgbm8KK2VmZmVjdC4KKzwvUD4KKzxQPgorVGhlIFBDUkUyLXNwZWNpZmljIG9wdGlvbnMgUENSRTJfRFVQTkFNRVMgYW5kIFBDUkUyX1VOR1JFRURZIGNhbiBiZSBjaGFuZ2VkIGluCit0aGUgc2FtZSB3YXkgYXMgdGhlIFBlcmwtY29tcGF0aWJsZSBvcHRpb25zIGJ5IHVzaW5nIHRoZSBjaGFyYWN0ZXJzIEogYW5kIFUKK3Jlc3BlY3RpdmVseS4KKzwvUD4KKzxQPgorV2hlbiBvbmUgb2YgdGhlc2Ugb3B0aW9uIGNoYW5nZXMgb2NjdXJzIGF0IHRvcCBsZXZlbCAodGhhdCBpcywgbm90IGluc2lkZQorc3VicGF0dGVybiBwYXJlbnRoZXNlcyksIHRoZSBjaGFuZ2UgYXBwbGllcyB0byB0aGUgcmVtYWluZGVyIG9mIHRoZSBwYXR0ZXJuCit0aGF0IGZvbGxvd3MuIElmIHRoZSBjaGFuZ2UgaXMgcGxhY2VkIHJpZ2h0IGF0IHRoZSBzdGFydCBvZiBhIHBhdHRlcm4sIFBDUkUyCitleHRyYWN0cyBpdCBpbnRvIHRoZSBnbG9iYWwgb3B0aW9ucyAoYW5kIGl0IHdpbGwgdGhlcmVmb3JlIHNob3cgdXAgaW4gZGF0YQorZXh0cmFjdGVkIGJ5IHRoZSA8Yj5wY3JlMl9wYXR0ZXJuX2luZm8oKTwvYj4gZnVuY3Rpb24pLgorPC9QPgorPFA+CitBbiBvcHRpb24gY2hhbmdlIHdpdGhpbiBhIHN1YnBhdHRlcm4gKHNlZSBiZWxvdyBmb3IgYSBkZXNjcmlwdGlvbiBvZgorc3VicGF0dGVybnMpIGFmZmVjdHMgb25seSB0aGF0IHBhcnQgb2YgdGhlIHN1YnBhdHRlcm4gdGhhdCBmb2xsb3dzIGl0LCBzbworPHByZT4KKyAgKGEoP2kpYiljCis8L3ByZT4KK21hdGNoZXMgYWJjIGFuZCBhQmMgYW5kIG5vIG90aGVyIHN0cmluZ3MgKGFzc3VtaW5nIFBDUkUyX0NBU0VMRVNTIGlzIG5vdCB1c2VkKS4KK0J5IHRoaXMgbWVhbnMsIG9wdGlvbnMgY2FuIGJlIG1hZGUgdG8gaGF2ZSBkaWZmZXJlbnQgc2V0dGluZ3MgaW4gZGlmZmVyZW50CitwYXJ0cyBvZiB0aGUgcGF0dGVybi4gQW55IGNoYW5nZXMgbWFkZSBpbiBvbmUgYWx0ZXJuYXRpdmUgZG8gY2Fycnkgb24KK2ludG8gc3Vic2VxdWVudCBicmFuY2hlcyB3aXRoaW4gdGhlIHNhbWUgc3VicGF0dGVybi4gRm9yIGV4YW1wbGUsCis8cHJlPgorICAoYSg/aSlifGMpCis8L3ByZT4KK21hdGNoZXMgImFiIiwgImFCIiwgImMiLCBhbmQgIkMiLCBldmVuIHRob3VnaCB3aGVuIG1hdGNoaW5nICJDIiB0aGUgZmlyc3QKK2JyYW5jaCBpcyBhYmFuZG9uZWQgYmVmb3JlIHRoZSBvcHRpb24gc2V0dGluZy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBlZmZlY3RzIG9mCitvcHRpb24gc2V0dGluZ3MgaGFwcGVuIGF0IGNvbXBpbGUgdGltZS4gVGhlcmUgd291bGQgYmUgc29tZSB2ZXJ5IHdlaXJkCitiZWhhdmlvdXIgb3RoZXJ3aXNlLgorPC9QPgorPFA+CitBcyBhIGNvbnZlbmllbnQgc2hvcnRoYW5kLCBpZiBhbnkgb3B0aW9uIHNldHRpbmdzIGFyZSByZXF1aXJlZCBhdCB0aGUgc3RhcnQgb2YKK2Egbm9uLWNhcHR1cmluZyBzdWJwYXR0ZXJuIChzZWUgdGhlIG5leHQgc2VjdGlvbiksIHRoZSBvcHRpb24gbGV0dGVycyBtYXkKK2FwcGVhciBiZXR3ZWVuIHRoZSAiPyIgYW5kIHRoZSAiOiIuIFRodXMgdGhlIHR3byBwYXR0ZXJucworPHByZT4KKyAgKD9pOnNhdHVyZGF5fHN1bmRheSkKKyAgKD86KD9pKXNhdHVyZGF5fHN1bmRheSkKKzwvcHJlPgorbWF0Y2ggZXhhY3RseSB0aGUgc2FtZSBzZXQgb2Ygc3RyaW5ncy4KKzwvUD4KKzxQPgorPGI+Tm90ZTo8L2I+IFRoZXJlIGFyZSBvdGhlciBQQ1JFMi1zcGVjaWZpYyBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCBieSB0aGUKK2FwcGxpY2F0aW9uIHdoZW4gdGhlIGNvbXBpbGluZyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSBwYXR0ZXJuIGNhbiBjb250YWluCitzcGVjaWFsIGxlYWRpbmcgc2VxdWVuY2VzIHN1Y2ggYXMgKCpDUkxGKSB0byBvdmVycmlkZSB3aGF0IHRoZSBhcHBsaWNhdGlvbiBoYXMKK3NldCBvciB3aGF0IGhhcyBiZWVuIGRlZmF1bHRlZC4gRGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKKzxhIGhyZWY9IiNuZXdsaW5lc2VxIj4iTmV3bGluZSBzZXF1ZW5jZXMiPC9hPgorYWJvdmUuIFRoZXJlIGFyZSBhbHNvIHRoZSAoKlVURikgYW5kICgqVUNQKSBsZWFkaW5nIHNlcXVlbmNlcyB0aGF0IGNhbiBiZSB1c2VkCit0byBzZXQgVVRGIGFuZCBVbmljb2RlIHByb3BlcnR5IG1vZGVzOyB0aGV5IGFyZSBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlCitQQ1JFMl9VVEYgYW5kIFBDUkUyX1VDUCBvcHRpb25zLCByZXNwZWN0aXZlbHkuIEhvd2V2ZXIsIHRoZSBhcHBsaWNhdGlvbiBjYW4gc2V0Cit0aGUgUENSRTJfTkVWRVJfVVRGIGFuZCBQQ1JFMl9ORVZFUl9VQ1Agb3B0aW9ucywgd2hpY2ggbG9jayBvdXQgdGhlIHVzZSBvZiB0aGUKKygqVVRGKSBhbmQgKCpVQ1ApIHNlcXVlbmNlcy4KKzxhIG5hbWU9InN1YnBhdHRlcm4iPjwvYT48L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTQiIGhyZWY9IiNUT0MxIj5TVUJQQVRURVJOUzwvYT48YnI+Cis8UD4KK1N1YnBhdHRlcm5zIGFyZSBkZWxpbWl0ZWQgYnkgcGFyZW50aGVzZXMgKHJvdW5kIGJyYWNrZXRzKSwgd2hpY2ggY2FuIGJlIG5lc3RlZC4KK1R1cm5pbmcgcGFydCBvZiBhIHBhdHRlcm4gaW50byBhIHN1YnBhdHRlcm4gZG9lcyB0d28gdGhpbmdzOgorPGJyPgorPGJyPgorMS4gSXQgbG9jYWxpemVzIGEgc2V0IG9mIGFsdGVybmF0aXZlcy4gRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuCis8cHJlPgorICBjYXQoYXJhY3R8ZXJwaWxsYXJ8KQorPC9wcmU+CittYXRjaGVzICJjYXRhcmFjdCIsICJjYXRlcnBpbGxhciIsIG9yICJjYXQiLiBXaXRob3V0IHRoZSBwYXJlbnRoZXNlcywgaXQgd291bGQKK21hdGNoICJjYXRhcmFjdCIsICJlcnBpbGxhciIgb3IgYW4gZW1wdHkgc3RyaW5nLgorPGJyPgorPGJyPgorMi4gSXQgc2V0cyB1cCB0aGUgc3VicGF0dGVybiBhcyBhIGNhcHR1cmluZyBzdWJwYXR0ZXJuLiBUaGlzIG1lYW5zIHRoYXQsIHdoZW4KK3RoZSB3aG9sZSBwYXR0ZXJuIG1hdGNoZXMsIHRoZSBwb3J0aW9uIG9mIHRoZSBzdWJqZWN0IHN0cmluZyB0aGF0IG1hdGNoZWQgdGhlCitzdWJwYXR0ZXJuIGlzIHBhc3NlZCBiYWNrIHRvIHRoZSBjYWxsZXIsIHNlcGFyYXRlbHkgZnJvbSB0aGUgcG9ydGlvbiB0aGF0CittYXRjaGVkIHRoZSB3aG9sZSBwYXR0ZXJuLiAoVGhpcyBhcHBsaWVzIG9ubHkgdG8gdGhlIHRyYWRpdGlvbmFsIG1hdGNoaW5nCitmdW5jdGlvbjsgdGhlIERGQSBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNhcHR1cmluZy4pCis8L1A+Cis8UD4KK09wZW5pbmcgcGFyZW50aGVzZXMgYXJlIGNvdW50ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IChzdGFydGluZyBmcm9tIDEpIHRvIG9idGFpbgorbnVtYmVycyBmb3IgdGhlIGNhcHR1cmluZyBzdWJwYXR0ZXJucy4gRm9yIGV4YW1wbGUsIGlmIHRoZSBzdHJpbmcgInRoZSByZWQKK2tpbmciIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgcGF0dGVybgorPHByZT4KKyAgdGhlICgocmVkfHdoaXRlKSAoa2luZ3xxdWVlbikpCis8L3ByZT4KK3RoZSBjYXB0dXJlZCBzdWJzdHJpbmdzIGFyZSAicmVkIGtpbmciLCAicmVkIiwgYW5kICJraW5nIiwgYW5kIGFyZSBudW1iZXJlZCAxLAorMiwgYW5kIDMsIHJlc3BlY3RpdmVseS4KKzwvUD4KKzxQPgorVGhlIGZhY3QgdGhhdCBwbGFpbiBwYXJlbnRoZXNlcyBmdWxmaWwgdHdvIGZ1bmN0aW9ucyBpcyBub3QgYWx3YXlzIGhlbHBmdWwuCitUaGVyZSBhcmUgb2Z0ZW4gdGltZXMgd2hlbiBhIGdyb3VwaW5nIHN1YnBhdHRlcm4gaXMgcmVxdWlyZWQgd2l0aG91dCBhCitjYXB0dXJpbmcgcmVxdWlyZW1lbnQuIElmIGFuIG9wZW5pbmcgcGFyZW50aGVzaXMgaXMgZm9sbG93ZWQgYnkgYSBxdWVzdGlvbiBtYXJrCithbmQgYSBjb2xvbiwgdGhlIHN1YnBhdHRlcm4gZG9lcyBub3QgZG8gYW55IGNhcHR1cmluZywgYW5kIGlzIG5vdCBjb3VudGVkIHdoZW4KK2NvbXB1dGluZyB0aGUgbnVtYmVyIG9mIGFueSBzdWJzZXF1ZW50IGNhcHR1cmluZyBzdWJwYXR0ZXJucy4gRm9yIGV4YW1wbGUsIGlmCit0aGUgc3RyaW5nICJ0aGUgd2hpdGUgcXVlZW4iIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgcGF0dGVybgorPHByZT4KKyAgdGhlICgoPzpyZWR8d2hpdGUpIChraW5nfHF1ZWVuKSkKKzwvcHJlPgordGhlIGNhcHR1cmVkIHN1YnN0cmluZ3MgYXJlICJ3aGl0ZSBxdWVlbiIgYW5kICJxdWVlbiIsIGFuZCBhcmUgbnVtYmVyZWQgMSBhbmQKKzIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjYXB0dXJpbmcgc3VicGF0dGVybnMgaXMgNjU1MzUuCis8L1A+Cis8UD4KK0FzIGEgY29udmVuaWVudCBzaG9ydGhhbmQsIGlmIGFueSBvcHRpb24gc2V0dGluZ3MgYXJlIHJlcXVpcmVkIGF0IHRoZSBzdGFydCBvZgorYSBub24tY2FwdHVyaW5nIHN1YnBhdHRlcm4sIHRoZSBvcHRpb24gbGV0dGVycyBtYXkgYXBwZWFyIGJldHdlZW4gdGhlICI/IiBhbmQKK3RoZSAiOiIuIFRodXMgdGhlIHR3byBwYXR0ZXJucworPHByZT4KKyAgKD9pOnNhdHVyZGF5fHN1bmRheSkKKyAgKD86KD9pKXNhdHVyZGF5fHN1bmRheSkKKzwvcHJlPgorbWF0Y2ggZXhhY3RseSB0aGUgc2FtZSBzZXQgb2Ygc3RyaW5ncy4gQmVjYXVzZSBhbHRlcm5hdGl2ZSBicmFuY2hlcyBhcmUgdHJpZWQKK2Zyb20gbGVmdCB0byByaWdodCwgYW5kIG9wdGlvbnMgYXJlIG5vdCByZXNldCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdWJwYXR0ZXJuCitpcyByZWFjaGVkLCBhbiBvcHRpb24gc2V0dGluZyBpbiBvbmUgYnJhbmNoIGRvZXMgYWZmZWN0IHN1YnNlcXVlbnQgYnJhbmNoZXMsIHNvCit0aGUgYWJvdmUgcGF0dGVybnMgbWF0Y2ggIlNVTkRBWSIgYXMgd2VsbCBhcyAiU2F0dXJkYXkiLgorPGEgbmFtZT0iZHVwc3VicGF0dGVybm51bWJlciI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMxNSIgaHJlZj0iI1RPQzEiPkRVUExJQ0FURSBTVUJQQVRURVJOIE5VTUJFUlM8L2E+PGJyPgorPFA+CitQZXJsIDUuMTAgaW50cm9kdWNlZCBhIGZlYXR1cmUgd2hlcmVieSBlYWNoIGFsdGVybmF0aXZlIGluIGEgc3VicGF0dGVybiB1c2VzCit0aGUgc2FtZSBudW1iZXJzIGZvciBpdHMgY2FwdHVyaW5nIHBhcmVudGhlc2VzLiBTdWNoIGEgc3VicGF0dGVybiBzdGFydHMgd2l0aAorKD98IGFuZCBpcyBpdHNlbGYgYSBub24tY2FwdHVyaW5nIHN1YnBhdHRlcm4uIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGlzCitwYXR0ZXJuOgorPHByZT4KKyAgKD98KFNhdCl1cnwoU3VuKSlkYXkKKzwvcHJlPgorQmVjYXVzZSB0aGUgdHdvIGFsdGVybmF0aXZlcyBhcmUgaW5zaWRlIGEgKD98IGdyb3VwLCBib3RoIHNldHMgb2YgY2FwdHVyaW5nCitwYXJlbnRoZXNlcyBhcmUgbnVtYmVyZWQgb25lLiBUaHVzLCB3aGVuIHRoZSBwYXR0ZXJuIG1hdGNoZXMsIHlvdSBjYW4gbG9vaworYXQgY2FwdHVyZWQgc3Vic3RyaW5nIG51bWJlciBvbmUsIHdoaWNoZXZlciBhbHRlcm5hdGl2ZSBtYXRjaGVkLiBUaGlzIGNvbnN0cnVjdAoraXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gY2FwdHVyZSBwYXJ0LCBidXQgbm90IGFsbCwgb2Ygb25lIG9mIGEgbnVtYmVyIG9mCithbHRlcm5hdGl2ZXMuIEluc2lkZSBhICg/fCBncm91cCwgcGFyZW50aGVzZXMgYXJlIG51bWJlcmVkIGFzIHVzdWFsLCBidXQgdGhlCitudW1iZXIgaXMgcmVzZXQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggYnJhbmNoLiBUaGUgbnVtYmVycyBvZiBhbnkgY2FwdHVyaW5nCitwYXJlbnRoZXNlcyB0aGF0IGZvbGxvdyB0aGUgc3VicGF0dGVybiBzdGFydCBhZnRlciB0aGUgaGlnaGVzdCBudW1iZXIgdXNlZCBpbgorYW55IGJyYW5jaC4gVGhlIGZvbGxvd2luZyBleGFtcGxlIGlzIHRha2VuIGZyb20gdGhlIFBlcmwgZG9jdW1lbnRhdGlvbi4gVGhlCitudW1iZXJzIHVuZGVybmVhdGggc2hvdyBpbiB3aGljaCBidWZmZXIgdGhlIGNhcHR1cmVkIGNvbnRlbnQgd2lsbCBiZSBzdG9yZWQuCis8cHJlPgorICAjIGJlZm9yZSAgLS0tLS0tLS0tLS0tLS0tYnJhbmNoLXJlc2V0LS0tLS0tLS0tLS0gYWZ0ZXIKKyAgLyAoIGEgKSAgKD98IHggKCB5ICkgeiB8IChwIChxKSByKSB8ICh0KSB1ICh2KSApICggeiApIC94CisgICMgMSAgICAgICAgICAgIDIgICAgICAgICAyICAzICAgICAgICAyICAgICAzICAgICA0Cis8L3ByZT4KK0EgYmFjayByZWZlcmVuY2UgdG8gYSBudW1iZXJlZCBzdWJwYXR0ZXJuIHVzZXMgdGhlIG1vc3QgcmVjZW50IHZhbHVlIHRoYXQgaXMKK3NldCBmb3IgdGhhdCBudW1iZXIgYnkgYW55IHN1YnBhdHRlcm4uIFRoZSBmb2xsb3dpbmcgcGF0dGVybiBtYXRjaGVzICJhYmNhYmMiCitvciAiZGVmZGVmIjoKKzxwcmU+CisgIC8oP3woYWJjKXwoZGVmKSlcMS8KKzwvcHJlPgorSW4gY29udHJhc3QsIGEgc3Vicm91dGluZSBjYWxsIHRvIGEgbnVtYmVyZWQgc3VicGF0dGVybiBhbHdheXMgcmVmZXJzIHRvIHRoZQorZmlyc3Qgb25lIGluIHRoZSBwYXR0ZXJuIHdpdGggdGhlIGdpdmVuIG51bWJlci4gVGhlIGZvbGxvd2luZyBwYXR0ZXJuIG1hdGNoZXMKKyJhYmNhYmMiIG9yICJkZWZhYmMiOgorPHByZT4KKyAgLyg/fChhYmMpfChkZWYpKSg/MSkvCis8L3ByZT4KK0EgcmVsYXRpdmUgcmVmZXJlbmNlIHN1Y2ggYXMgKD8tMSkgaXMgbm8gZGlmZmVyZW50OiBpdCBpcyBqdXN0IGEgY29udmVuaWVudCB3YXkKK29mIGNvbXB1dGluZyBhbiBhYnNvbHV0ZSBncm91cCBudW1iZXIuCis8L1A+Cis8UD4KK0lmIGEKKzxhIGhyZWY9IiNjb25kaXRpb25zIj5jb25kaXRpb24gdGVzdDwvYT4KK2ZvciBhIHN1YnBhdHRlcm4ncyBoYXZpbmcgbWF0Y2hlZCByZWZlcnMgdG8gYSBub24tdW5pcXVlIG51bWJlciwgdGhlIHRlc3QgaXMKK3RydWUgaWYgYW55IG9mIHRoZSBzdWJwYXR0ZXJucyBvZiB0aGF0IG51bWJlciBoYXZlIG1hdGNoZWQuCis8L1A+Cis8UD4KK0FuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIHVzaW5nIHRoaXMgImJyYW5jaCByZXNldCIgZmVhdHVyZSBpcyB0byB1c2UKK2R1cGxpY2F0ZSBuYW1lZCBzdWJwYXR0ZXJucywgYXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTYiIGhyZWY9IiNUT0MxIj5OQU1FRCBTVUJQQVRURVJOUzwvYT48YnI+Cis8UD4KK0lkZW50aWZ5aW5nIGNhcHR1cmluZyBwYXJlbnRoZXNlcyBieSBudW1iZXIgaXMgc2ltcGxlLCBidXQgaXQgY2FuIGJlIHZlcnkgaGFyZAordG8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVycyBpbiBjb21wbGljYXRlZCByZWd1bGFyIGV4cHJlc3Npb25zLiBGdXJ0aGVybW9yZSwKK2lmIGFuIGV4cHJlc3Npb24gaXMgbW9kaWZpZWQsIHRoZSBudW1iZXJzIG1heSBjaGFuZ2UuIFRvIGhlbHAgd2l0aCB0aGlzCitkaWZmaWN1bHR5LCBQQ1JFMiBzdXBwb3J0cyB0aGUgbmFtaW5nIG9mIHN1YnBhdHRlcm5zLiBUaGlzIGZlYXR1cmUgd2FzIG5vdAorYWRkZWQgdG8gUGVybCB1bnRpbCByZWxlYXNlIDUuMTAuIFB5dGhvbiBoYWQgdGhlIGZlYXR1cmUgZWFybGllciwgYW5kIFBDUkUxCitpbnRyb2R1Y2VkIGl0IGF0IHJlbGVhc2UgNC4wLCB1c2luZyB0aGUgUHl0aG9uIHN5bnRheC4gUENSRTIgc3VwcG9ydHMgYm90aCB0aGUKK1BlcmwgYW5kIHRoZSBQeXRob24gc3ludGF4LiBQZXJsIGFsbG93cyBpZGVudGljYWxseSBudW1iZXJlZCBzdWJwYXR0ZXJucyB0bworaGF2ZSBkaWZmZXJlbnQgbmFtZXMsIGJ1dCBQQ1JFMiBkb2VzIG5vdC4KKzwvUD4KKzxQPgorSW4gUENSRTIsIGEgc3VicGF0dGVybiBjYW4gYmUgbmFtZWQgaW4gb25lIG9mIHRocmVlIHdheXM6ICg/JiM2MDtuYW1lJiM2MjsuLi4pIG9yCisoPyduYW1lJy4uLikgYXMgaW4gUGVybCwgb3IgKD9QJiM2MDtuYW1lJiM2MjsuLi4pIGFzIGluIFB5dGhvbi4gUmVmZXJlbmNlcyB0byBjYXB0dXJpbmcKK3BhcmVudGhlc2VzIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIHBhdHRlcm4sIHN1Y2ggYXMKKzxhIGhyZWY9IiNiYWNrcmVmZXJlbmNlcyI+YmFjayByZWZlcmVuY2VzLDwvYT4KKzxhIGhyZWY9IiNyZWN1cnNpb24iPnJlY3Vyc2lvbiw8L2E+CithbmQKKzxhIGhyZWY9IiNjb25kaXRpb25zIj5jb25kaXRpb25zLDwvYT4KK2NhbiBiZSBtYWRlIGJ5IG5hbWUgYXMgd2VsbCBhcyBieSBudW1iZXIuCis8L1A+Cis8UD4KK05hbWVzIGNvbnNpc3Qgb2YgdXAgdG8gMzIgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHVuZGVyc2NvcmVzLCBidXQgbXVzdAorc3RhcnQgd2l0aCBhIG5vbi1kaWdpdC4gTmFtZWQgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGFyZSBzdGlsbCBhbGxvY2F0ZWQgbnVtYmVycworYXMgd2VsbCBhcyBuYW1lcywgZXhhY3RseSBhcyBpZiB0aGUgbmFtZXMgd2VyZSBub3QgcHJlc2VudC4gVGhlIFBDUkUyIEFQSQorcHJvdmlkZXMgZnVuY3Rpb24gY2FsbHMgZm9yIGV4dHJhY3RpbmcgdGhlIG5hbWUtdG8tbnVtYmVyIHRyYW5zbGF0aW9uIHRhYmxlCitmcm9tIGEgY29tcGlsZWQgcGF0dGVybi4gVGhlcmUgYXJlIGFsc28gY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBleHRyYWN0aW5nIGEKK2NhcHR1cmVkIHN1YnN0cmluZyBieSBuYW1lLgorPC9QPgorPFA+CitCeSBkZWZhdWx0LCBhIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgcGF0dGVybiwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIHJlbGF4Cit0aGlzIGNvbnN0cmFpbnQgYnkgc2V0dGluZyB0aGUgUENSRTJfRFVQTkFNRVMgb3B0aW9uIGF0IGNvbXBpbGUgdGltZS4KKyhEdXBsaWNhdGUgbmFtZXMgYXJlIGFsc28gYWx3YXlzIHBlcm1pdHRlZCBmb3Igc3VicGF0dGVybnMgd2l0aCB0aGUgc2FtZQorbnVtYmVyLCBzZXQgdXAgYXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLikgRHVwbGljYXRlIG5hbWVzIGNhbiBiZQordXNlZnVsIGZvciBwYXR0ZXJucyB3aGVyZSBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgbmFtZWQgcGFyZW50aGVzZXMgY2FuIG1hdGNoLgorU3VwcG9zZSB5b3Ugd2FudCB0byBtYXRjaCB0aGUgbmFtZSBvZiBhIHdlZWtkYXksIGVpdGhlciBhcyBhIDMtbGV0dGVyCithYmJyZXZpYXRpb24gb3IgYXMgdGhlIGZ1bGwgbmFtZSwgYW5kIGluIGJvdGggY2FzZXMgeW91IHdhbnQgdG8gZXh0cmFjdCB0aGUKK2FiYnJldmlhdGlvbi4gVGhpcyBwYXR0ZXJuIChpZ25vcmluZyB0aGUgbGluZSBicmVha3MpIGRvZXMgdGhlIGpvYjoKKzxwcmU+CisgICg/JiM2MDtETiYjNjI7TW9ufEZyaXxTdW4pKD86ZGF5KT98CisgICg/JiM2MDtETiYjNjI7VHVlKSg/OnNkYXkpP3wKKyAgKD8mIzYwO0ROJiM2MjtXZWQpKD86bmVzZGF5KT98CisgICg/JiM2MDtETiYjNjI7VGh1KSg/OnJzZGF5KT98CisgICg/JiM2MDtETiYjNjI7U2F0KSg/OnVyZGF5KT8KKzwvcHJlPgorVGhlcmUgYXJlIGZpdmUgY2FwdHVyaW5nIHN1YnN0cmluZ3MsIGJ1dCBvbmx5IG9uZSBpcyBldmVyIHNldCBhZnRlciBhIG1hdGNoLgorKEFuIGFsdGVybmF0aXZlIHdheSBvZiBzb2x2aW5nIHRoaXMgcHJvYmxlbSBpcyB0byB1c2UgYSAiYnJhbmNoIHJlc2V0Igorc3VicGF0dGVybiwgYXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLikKKzwvUD4KKzxQPgorVGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBmb3IgZXh0cmFjdGluZyB0aGUgZGF0YSBieSBuYW1lIHJldHVybnMgdGhlIHN1YnN0cmluZworZm9yIHRoZSBmaXJzdCAoYW5kIGluIHRoaXMgZXhhbXBsZSwgdGhlIG9ubHkpIHN1YnBhdHRlcm4gb2YgdGhhdCBuYW1lIHRoYXQKK21hdGNoZWQuIFRoaXMgc2F2ZXMgc2VhcmNoaW5nIHRvIGZpbmQgd2hpY2ggbnVtYmVyZWQgc3VicGF0dGVybiBpdCB3YXMuCis8L1A+Cis8UD4KK0lmIHlvdSBtYWtlIGEgYmFjayByZWZlcmVuY2UgdG8gYSBub24tdW5pcXVlIG5hbWVkIHN1YnBhdHRlcm4gZnJvbSBlbHNld2hlcmUgaW4KK3RoZSBwYXR0ZXJuLCB0aGUgc3VicGF0dGVybnMgdG8gd2hpY2ggdGhlIG5hbWUgcmVmZXJzIGFyZSBjaGVja2VkIGluIHRoZSBvcmRlcgoraW4gd2hpY2ggdGhleSBhcHBlYXIgaW4gdGhlIG92ZXJhbGwgcGF0dGVybi4gVGhlIGZpcnN0IG9uZSB0aGF0IGlzIHNldCBpcyB1c2VkCitmb3IgdGhlIHJlZmVyZW5jZS4gRm9yIGV4YW1wbGUsIHRoaXMgcGF0dGVybiBtYXRjaGVzIGJvdGggImZvb2ZvbyIgYW5kCisiYmFyYmFyIiBidXQgbm90ICJmb29iYXIiIG9yICJiYXJmb28iOgorPHByZT4KKyAgKD86KD8mIzYwO24mIzYyO2Zvbyl8KD8mIzYwO24mIzYyO2JhcikpXGsmIzYwO24mIzYyOworCis8L1BSRT4KKzwvUD4KKzxQPgorSWYgeW91IG1ha2UgYSBzdWJyb3V0aW5lIGNhbGwgdG8gYSBub24tdW5pcXVlIG5hbWVkIHN1YnBhdHRlcm4sIHRoZSBvbmUgdGhhdAorY29ycmVzcG9uZHMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIG5hbWUgaXMgdXNlZC4gSW4gdGhlIGFic2VuY2Ugb2YKK2R1cGxpY2F0ZSBudW1iZXJzIChzZWUgdGhlIHByZXZpb3VzIHNlY3Rpb24pIHRoaXMgaXMgdGhlIG9uZSB3aXRoIHRoZSBsb3dlc3QKK251bWJlci4KKzwvUD4KKzxQPgorSWYgeW91IHVzZSBhIG5hbWVkIHJlZmVyZW5jZSBpbiBhIGNvbmRpdGlvbgordGVzdCAoc2VlIHRoZQorPGEgaHJlZj0iI2NvbmRpdGlvbnMiPnNlY3Rpb24gYWJvdXQgY29uZGl0aW9uczwvYT4KK2JlbG93KSwgZWl0aGVyIHRvIGNoZWNrIHdoZXRoZXIgYSBzdWJwYXR0ZXJuIGhhcyBtYXRjaGVkLCBvciB0byBjaGVjayBmb3IKK3JlY3Vyc2lvbiwgYWxsIHN1YnBhdHRlcm5zIHdpdGggdGhlIHNhbWUgbmFtZSBhcmUgdGVzdGVkLiBJZiB0aGUgY29uZGl0aW9uIGlzCit0cnVlIGZvciBhbnkgb25lIG9mIHRoZW0sIHRoZSBvdmVyYWxsIGNvbmRpdGlvbiBpcyB0cnVlLiBUaGlzIGlzIHRoZSBzYW1lCitiZWhhdmlvdXIgYXMgdGVzdGluZyBieSBudW1iZXIuIEZvciBmdXJ0aGVyIGRldGFpbHMgb2YgdGhlIGludGVyZmFjZXMgZm9yCitoYW5kbGluZyBuYW1lZCBzdWJwYXR0ZXJucywgc2VlIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4KKzwvUD4KKzxQPgorPGI+V2FybmluZzo8L2I+IFlvdSBjYW5ub3QgdXNlIGRpZmZlcmVudCBuYW1lcyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHR3bworc3VicGF0dGVybnMgd2l0aCB0aGUgc2FtZSBudW1iZXIgYmVjYXVzZSBQQ1JFMiB1c2VzIG9ubHkgdGhlIG51bWJlcnMgd2hlbgorbWF0Y2hpbmcuIEZvciB0aGlzIHJlYXNvbiwgYW4gZXJyb3IgaXMgZ2l2ZW4gYXQgY29tcGlsZSB0aW1lIGlmIGRpZmZlcmVudCBuYW1lcworYXJlIGdpdmVuIHRvIHN1YnBhdHRlcm5zIHdpdGggdGhlIHNhbWUgbnVtYmVyLiBIb3dldmVyLCB5b3UgY2FuIGFsd2F5cyBnaXZlIHRoZQorc2FtZSBuYW1lIHRvIHN1YnBhdHRlcm5zIHdpdGggdGhlIHNhbWUgbnVtYmVyLCBldmVuIHdoZW4gUENSRTJfRFVQTkFNRVMgaXMgbm90CitzZXQuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTciIGhyZWY9IiNUT0MxIj5SRVBFVElUSU9OPC9hPjxicj4KKzxQPgorUmVwZXRpdGlvbiBpcyBzcGVjaWZpZWQgYnkgcXVhbnRpZmllcnMsIHdoaWNoIGNhbiBmb2xsb3cgYW55IG9mIHRoZSBmb2xsb3dpbmcKK2l0ZW1zOgorPHByZT4KKyAgYSBsaXRlcmFsIGRhdGEgY2hhcmFjdGVyCisgIHRoZSBkb3QgbWV0YWNoYXJhY3RlcgorICB0aGUgXEMgZXNjYXBlIHNlcXVlbmNlCisgIHRoZSBcWCBlc2NhcGUgc2VxdWVuY2UKKyAgdGhlIFxSIGVzY2FwZSBzZXF1ZW5jZQorICBhbiBlc2NhcGUgc3VjaCBhcyBcZCBvciBccEwgdGhhdCBtYXRjaGVzIGEgc2luZ2xlIGNoYXJhY3RlcgorICBhIGNoYXJhY3RlciBjbGFzcworICBhIGJhY2sgcmVmZXJlbmNlCisgIGEgcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJuIChpbmNsdWRpbmcgbW9zdCBhc3NlcnRpb25zKQorICBhIHN1YnJvdXRpbmUgY2FsbCB0byBhIHN1YnBhdHRlcm4gKHJlY3Vyc2l2ZSBvciBvdGhlcndpc2UpCis8L3ByZT4KK1RoZSBnZW5lcmFsIHJlcGV0aXRpb24gcXVhbnRpZmllciBzcGVjaWZpZXMgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bWJlciBvZgorcGVybWl0dGVkIG1hdGNoZXMsIGJ5IGdpdmluZyB0aGUgdHdvIG51bWJlcnMgaW4gY3VybHkgYnJhY2tldHMgKGJyYWNlcyksCitzZXBhcmF0ZWQgYnkgYSBjb21tYS4gVGhlIG51bWJlcnMgbXVzdCBiZSBsZXNzIHRoYW4gNjU1MzYsIGFuZCB0aGUgZmlyc3QgbXVzdAorYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzZWNvbmQuIEZvciBleGFtcGxlOgorPHByZT4KKyAgensyLDR9Cis8L3ByZT4KK21hdGNoZXMgInp6IiwgInp6eiIsIG9yICJ6enp6Ii4gQSBjbG9zaW5nIGJyYWNlIG9uIGl0cyBvd24gaXMgbm90IGEgc3BlY2lhbAorY2hhcmFjdGVyLiBJZiB0aGUgc2Vjb25kIG51bWJlciBpcyBvbWl0dGVkLCBidXQgdGhlIGNvbW1hIGlzIHByZXNlbnQsIHRoZXJlIGlzCitubyB1cHBlciBsaW1pdDsgaWYgdGhlIHNlY29uZCBudW1iZXIgYW5kIHRoZSBjb21tYSBhcmUgYm90aCBvbWl0dGVkLCB0aGUKK3F1YW50aWZpZXIgc3BlY2lmaWVzIGFuIGV4YWN0IG51bWJlciBvZiByZXF1aXJlZCBtYXRjaGVzLiBUaHVzCis8cHJlPgorICBbYWVpb3VdezMsfQorPC9wcmU+CittYXRjaGVzIGF0IGxlYXN0IDMgc3VjY2Vzc2l2ZSB2b3dlbHMsIGJ1dCBtYXkgbWF0Y2ggbWFueSBtb3JlLCB3aGVyZWFzCis8cHJlPgorICBcZHs4fQorPC9wcmU+CittYXRjaGVzIGV4YWN0bHkgOCBkaWdpdHMuIEFuIG9wZW5pbmcgY3VybHkgYnJhY2tldCB0aGF0IGFwcGVhcnMgaW4gYSBwb3NpdGlvbgord2hlcmUgYSBxdWFudGlmaWVyIGlzIG5vdCBhbGxvd2VkLCBvciBvbmUgdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgc3ludGF4IG9mIGEKK3F1YW50aWZpZXIsIGlzIHRha2VuIGFzIGEgbGl0ZXJhbCBjaGFyYWN0ZXIuIEZvciBleGFtcGxlLCB7LDZ9IGlzIG5vdCBhCitxdWFudGlmaWVyLCBidXQgYSBsaXRlcmFsIHN0cmluZyBvZiBmb3VyIGNoYXJhY3RlcnMuCis8L1A+Cis8UD4KK0luIFVURiBtb2RlcywgcXVhbnRpZmllcnMgYXBwbHkgdG8gY2hhcmFjdGVycyByYXRoZXIgdGhhbiB0byBpbmRpdmlkdWFsIGNvZGUKK3VuaXRzLiBUaHVzLCBmb3IgZXhhbXBsZSwgXHh7MTAwfXsyfSBtYXRjaGVzIHR3byBjaGFyYWN0ZXJzLCBlYWNoIG9mCit3aGljaCBpcyByZXByZXNlbnRlZCBieSBhIHR3by1ieXRlIHNlcXVlbmNlIGluIGEgVVRGLTggc3RyaW5nLiBTaW1pbGFybHksCitcWHszfSBtYXRjaGVzIHRocmVlIFVuaWNvZGUgZXh0ZW5kZWQgZ3JhcGhlbWUgY2x1c3RlcnMsIGVhY2ggb2Ygd2hpY2ggbWF5IGJlCitzZXZlcmFsIGNvZGUgdW5pdHMgbG9uZyAoYW5kIHRoZXkgbWF5IGJlIG9mIGRpZmZlcmVudCBsZW5ndGhzKS4KKzwvUD4KKzxQPgorVGhlIHF1YW50aWZpZXIgezB9IGlzIHBlcm1pdHRlZCwgY2F1c2luZyB0aGUgZXhwcmVzc2lvbiB0byBiZWhhdmUgYXMgaWYgdGhlCitwcmV2aW91cyBpdGVtIGFuZCB0aGUgcXVhbnRpZmllciB3ZXJlIG5vdCBwcmVzZW50LiBUaGlzIG1heSBiZSB1c2VmdWwgZm9yCitzdWJwYXR0ZXJucyB0aGF0IGFyZSByZWZlcmVuY2VkIGFzCis8YSBocmVmPSIjc3VicGF0dGVybnNhc3N1YnJvdXRpbmVzIj5zdWJyb3V0aW5lczwvYT4KK2Zyb20gZWxzZXdoZXJlIGluIHRoZSBwYXR0ZXJuIChidXQgc2VlIGFsc28gdGhlIHNlY3Rpb24gZW50aXRsZWQKKzxhIGhyZWY9IiNzdWJkZWZpbmUiPiJEZWZpbmluZyBzdWJwYXR0ZXJucyBmb3IgdXNlIGJ5IHJlZmVyZW5jZSBvbmx5IjwvYT4KK2JlbG93KS4gSXRlbXMgb3RoZXIgdGhhbiBzdWJwYXR0ZXJucyB0aGF0IGhhdmUgYSB7MH0gcXVhbnRpZmllciBhcmUgb21pdHRlZAorZnJvbSB0aGUgY29tcGlsZWQgcGF0dGVybi4KKzwvUD4KKzxQPgorRm9yIGNvbnZlbmllbmNlLCB0aGUgdGhyZWUgbW9zdCBjb21tb24gcXVhbnRpZmllcnMgaGF2ZSBzaW5nbGUtY2hhcmFjdGVyCithYmJyZXZpYXRpb25zOgorPHByZT4KKyAgKiAgICBpcyBlcXVpdmFsZW50IHRvIHswLH0KKyAgKyAgICBpcyBlcXVpdmFsZW50IHRvIHsxLH0KKyAgPyAgICBpcyBlcXVpdmFsZW50IHRvIHswLDF9Cis8L3ByZT4KK0l0IGlzIHBvc3NpYmxlIHRvIGNvbnN0cnVjdCBpbmZpbml0ZSBsb29wcyBieSBmb2xsb3dpbmcgYSBzdWJwYXR0ZXJuIHRoYXQgY2FuCittYXRjaCBubyBjaGFyYWN0ZXJzIHdpdGggYSBxdWFudGlmaWVyIHRoYXQgaGFzIG5vIHVwcGVyIGxpbWl0LCBmb3IgZXhhbXBsZToKKzxwcmU+CisgIChhPykqCis8L3ByZT4KK0VhcmxpZXIgdmVyc2lvbnMgb2YgUGVybCBhbmQgUENSRTEgdXNlZCB0byBnaXZlIGFuIGVycm9yIGF0IGNvbXBpbGUgdGltZSBmb3IKK3N1Y2ggcGF0dGVybnMuIEhvd2V2ZXIsIGJlY2F1c2UgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoaXMgY2FuIGJlIHVzZWZ1bCwgc3VjaAorcGF0dGVybnMgYXJlIG5vdyBhY2NlcHRlZCwgYnV0IGlmIGFueSByZXBldGl0aW9uIG9mIHRoZSBzdWJwYXR0ZXJuIGRvZXMgaW4gZmFjdAorbWF0Y2ggbm8gY2hhcmFjdGVycywgdGhlIGxvb3AgaXMgZm9yY2libHkgYnJva2VuLgorPC9QPgorPFA+CitCeSBkZWZhdWx0LCB0aGUgcXVhbnRpZmllcnMgYXJlICJncmVlZHkiLCB0aGF0IGlzLCB0aGV5IG1hdGNoIGFzIG11Y2ggYXMKK3Bvc3NpYmxlICh1cCB0byB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGVybWl0dGVkIHRpbWVzKSwgd2l0aG91dCBjYXVzaW5nIHRoZQorcmVzdCBvZiB0aGUgcGF0dGVybiB0byBmYWlsLiBUaGUgY2xhc3NpYyBleGFtcGxlIG9mIHdoZXJlIHRoaXMgZ2l2ZXMgcHJvYmxlbXMKK2lzIGluIHRyeWluZyB0byBtYXRjaCBjb21tZW50cyBpbiBDIHByb2dyYW1zLiBUaGVzZSBhcHBlYXIgYmV0d2VlbiAvKiBhbmQgKi8KK2FuZCB3aXRoaW4gdGhlIGNvbW1lbnQsIGluZGl2aWR1YWwgKiBhbmQgLyBjaGFyYWN0ZXJzIG1heSBhcHBlYXIuIEFuIGF0dGVtcHQgdG8KK21hdGNoIEMgY29tbWVudHMgYnkgYXBwbHlpbmcgdGhlIHBhdHRlcm4KKzxwcmU+CisgIC9cKi4qXCovCis8L3ByZT4KK3RvIHRoZSBzdHJpbmcKKzxwcmU+CisgIC8qIGZpcnN0IGNvbW1lbnQgKi8gIG5vdCBjb21tZW50ICAvKiBzZWNvbmQgY29tbWVudCAqLworPC9wcmU+CitmYWlscywgYmVjYXVzZSBpdCBtYXRjaGVzIHRoZSBlbnRpcmUgc3RyaW5nIG93aW5nIHRvIHRoZSBncmVlZGluZXNzIG9mIHRoZSAuKgoraXRlbS4KKzwvUD4KKzxQPgorSWYgYSBxdWFudGlmaWVyIGlzIGZvbGxvd2VkIGJ5IGEgcXVlc3Rpb24gbWFyaywgaXQgY2Vhc2VzIHRvIGJlIGdyZWVkeSwgYW5kCitpbnN0ZWFkIG1hdGNoZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHRpbWVzIHBvc3NpYmxlLCBzbyB0aGUgcGF0dGVybgorPHByZT4KKyAgL1wqLio/XCovCis8L3ByZT4KK2RvZXMgdGhlIHJpZ2h0IHRoaW5nIHdpdGggdGhlIEMgY29tbWVudHMuIFRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzCitxdWFudGlmaWVycyBpcyBub3Qgb3RoZXJ3aXNlIGNoYW5nZWQsIGp1c3QgdGhlIHByZWZlcnJlZCBudW1iZXIgb2YgbWF0Y2hlcy4KK0RvIG5vdCBjb25mdXNlIHRoaXMgdXNlIG9mIHF1ZXN0aW9uIG1hcmsgd2l0aCBpdHMgdXNlIGFzIGEgcXVhbnRpZmllciBpbiBpdHMKK293biByaWdodC4gQmVjYXVzZSBpdCBoYXMgdHdvIHVzZXMsIGl0IGNhbiBzb21ldGltZXMgYXBwZWFyIGRvdWJsZWQsIGFzIGluCis8cHJlPgorICBcZD8/XGQKKzwvcHJlPgord2hpY2ggbWF0Y2hlcyBvbmUgZGlnaXQgYnkgcHJlZmVyZW5jZSwgYnV0IGNhbiBtYXRjaCB0d28gaWYgdGhhdCBpcyB0aGUgb25seQord2F5IHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIG1hdGNoZXMuCis8L1A+Cis8UD4KK0lmIHRoZSBQQ1JFMl9VTkdSRUVEWSBvcHRpb24gaXMgc2V0IChhbiBvcHRpb24gdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIFBlcmwpLAordGhlIHF1YW50aWZpZXJzIGFyZSBub3QgZ3JlZWR5IGJ5IGRlZmF1bHQsIGJ1dCBpbmRpdmlkdWFsIG9uZXMgY2FuIGJlIG1hZGUKK2dyZWVkeSBieSBmb2xsb3dpbmcgdGhlbSB3aXRoIGEgcXVlc3Rpb24gbWFyay4gSW4gb3RoZXIgd29yZHMsIGl0IGludmVydHMgdGhlCitkZWZhdWx0IGJlaGF2aW91ci4KKzwvUD4KKzxQPgorV2hlbiBhIHBhcmVudGhlc2l6ZWQgc3VicGF0dGVybiBpcyBxdWFudGlmaWVkIHdpdGggYSBtaW5pbXVtIHJlcGVhdCBjb3VudCB0aGF0CitpcyBncmVhdGVyIHRoYW4gMSBvciB3aXRoIGEgbGltaXRlZCBtYXhpbXVtLCBtb3JlIG1lbW9yeSBpcyByZXF1aXJlZCBmb3IgdGhlCitjb21waWxlZCBwYXR0ZXJuLCBpbiBwcm9wb3J0aW9uIHRvIHRoZSBzaXplIG9mIHRoZSBtaW5pbXVtIG9yIG1heGltdW0uCis8L1A+Cis8UD4KK0lmIGEgcGF0dGVybiBzdGFydHMgd2l0aCAuKiBvciAuezAsfSBhbmQgdGhlIFBDUkUyX0RPVEFMTCBvcHRpb24gKGVxdWl2YWxlbnQKK3RvIFBlcmwncyAvcykgaXMgc2V0LCB0aHVzIGFsbG93aW5nIHRoZSBkb3QgdG8gbWF0Y2ggbmV3bGluZXMsIHRoZSBwYXR0ZXJuIGlzCitpbXBsaWNpdGx5IGFuY2hvcmVkLCBiZWNhdXNlIHdoYXRldmVyIGZvbGxvd3Mgd2lsbCBiZSB0cmllZCBhZ2FpbnN0IGV2ZXJ5CitjaGFyYWN0ZXIgcG9zaXRpb24gaW4gdGhlIHN1YmplY3Qgc3RyaW5nLCBzbyB0aGVyZSBpcyBubyBwb2ludCBpbiByZXRyeWluZyB0aGUKK292ZXJhbGwgbWF0Y2ggYXQgYW55IHBvc2l0aW9uIGFmdGVyIHRoZSBmaXJzdC4gUENSRTIgbm9ybWFsbHkgdHJlYXRzIHN1Y2ggYQorcGF0dGVybiBhcyB0aG91Z2ggaXQgd2VyZSBwcmVjZWRlZCBieSBcQS4KKzwvUD4KKzxQPgorSW4gY2FzZXMgd2hlcmUgaXQgaXMga25vd24gdGhhdCB0aGUgc3ViamVjdCBzdHJpbmcgY29udGFpbnMgbm8gbmV3bGluZXMsIGl0IGlzCit3b3J0aCBzZXR0aW5nIFBDUkUyX0RPVEFMTCBpbiBvcmRlciB0byBvYnRhaW4gdGhpcyBvcHRpbWl6YXRpb24sIG9yCithbHRlcm5hdGl2ZWx5LCB1c2luZyBeIHRvIGluZGljYXRlIGFuY2hvcmluZyBleHBsaWNpdGx5LgorPC9QPgorPFA+CitIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB0aGUgb3B0aW1pemF0aW9uIGNhbm5vdCBiZSB1c2VkLiBXaGVuIC4qCitpcyBpbnNpZGUgY2FwdHVyaW5nIHBhcmVudGhlc2VzIHRoYXQgYXJlIHRoZSBzdWJqZWN0IG9mIGEgYmFjayByZWZlcmVuY2UKK2Vsc2V3aGVyZSBpbiB0aGUgcGF0dGVybiwgYSBtYXRjaCBhdCB0aGUgc3RhcnQgbWF5IGZhaWwgd2hlcmUgYSBsYXRlciBvbmUKK3N1Y2NlZWRzLiBDb25zaWRlciwgZm9yIGV4YW1wbGU6Cis8cHJlPgorICAoLiopYWJjXDEKKzwvcHJlPgorSWYgdGhlIHN1YmplY3QgaXMgInh5ejEyM2FiYzEyMyIgdGhlIG1hdGNoIHBvaW50IGlzIHRoZSBmb3VydGggY2hhcmFjdGVyLiBGb3IKK3RoaXMgcmVhc29uLCBzdWNoIGEgcGF0dGVybiBpcyBub3QgaW1wbGljaXRseSBhbmNob3JlZC4KKzwvUD4KKzxQPgorQW5vdGhlciBjYXNlIHdoZXJlIGltcGxpY2l0IGFuY2hvcmluZyBpcyBub3QgYXBwbGllZCBpcyB3aGVuIHRoZSBsZWFkaW5nIC4qIGlzCitpbnNpZGUgYW4gYXRvbWljIGdyb3VwLiBPbmNlIGFnYWluLCBhIG1hdGNoIGF0IHRoZSBzdGFydCBtYXkgZmFpbCB3aGVyZSBhIGxhdGVyCitvbmUgc3VjY2VlZHMuIENvbnNpZGVyIHRoaXMgcGF0dGVybjoKKzxwcmU+CisgICg/JiM2MjsuKj9hKWIKKzwvcHJlPgorSXQgbWF0Y2hlcyAiYWIiIGluIHRoZSBzdWJqZWN0ICJhYWIiLiBUaGUgdXNlIG9mIHRoZSBiYWNrdHJhY2tpbmcgY29udHJvbCB2ZXJicworKCpQUlVORSkgYW5kICgqU0tJUCkgYWxzbyBkaXNhYmxlIHRoaXMgb3B0aW1pemF0aW9uLCBhbmQgdGhlcmUgaXMgYW4gb3B0aW9uLAorUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IsIHRvIGRvIHNvIGV4cGxpY2l0bHkuCis8L1A+Cis8UD4KK1doZW4gYSBjYXB0dXJpbmcgc3VicGF0dGVybiBpcyByZXBlYXRlZCwgdGhlIHZhbHVlIGNhcHR1cmVkIGlzIHRoZSBzdWJzdHJpbmcKK3RoYXQgbWF0Y2hlZCB0aGUgZmluYWwgaXRlcmF0aW9uLiBGb3IgZXhhbXBsZSwgYWZ0ZXIKKzxwcmU+CisgICh0d2VlZGxlW2R1bWVdezN9XHMqKSsKKzwvcHJlPgoraGFzIG1hdGNoZWQgInR3ZWVkbGVkdW0gdHdlZWRsZWRlZSIgdGhlIHZhbHVlIG9mIHRoZSBjYXB0dXJlZCBzdWJzdHJpbmcgaXMKKyJ0d2VlZGxlZGVlIi4gSG93ZXZlciwgaWYgdGhlcmUgYXJlIG5lc3RlZCBjYXB0dXJpbmcgc3VicGF0dGVybnMsIHRoZQorY29ycmVzcG9uZGluZyBjYXB0dXJlZCB2YWx1ZXMgbWF5IGhhdmUgYmVlbiBzZXQgaW4gcHJldmlvdXMgaXRlcmF0aW9ucy4gRm9yCitleGFtcGxlLCBhZnRlcgorPHByZT4KKyAgKGF8KGIpKSsKKzwvcHJlPgorbWF0Y2hlcyAiYWJhIiB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBjYXB0dXJlZCBzdWJzdHJpbmcgaXMgImIiLgorPGEgbmFtZT0iYXRvbWljZ3JvdXAiPjwvYT48L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTgiIGhyZWY9IiNUT0MxIj5BVE9NSUMgR1JPVVBJTkcgQU5EIFBPU1NFU1NJVkUgUVVBTlRJRklFUlM8L2E+PGJyPgorPFA+CitXaXRoIGJvdGggbWF4aW1pemluZyAoImdyZWVkeSIpIGFuZCBtaW5pbWl6aW5nICgidW5ncmVlZHkiIG9yICJsYXp5IikKK3JlcGV0aXRpb24sIGZhaWx1cmUgb2Ygd2hhdCBmb2xsb3dzIG5vcm1hbGx5IGNhdXNlcyB0aGUgcmVwZWF0ZWQgaXRlbSB0byBiZQorcmUtZXZhbHVhdGVkIHRvIHNlZSBpZiBhIGRpZmZlcmVudCBudW1iZXIgb2YgcmVwZWF0cyBhbGxvd3MgdGhlIHJlc3Qgb2YgdGhlCitwYXR0ZXJuIHRvIG1hdGNoLiBTb21ldGltZXMgaXQgaXMgdXNlZnVsIHRvIHByZXZlbnQgdGhpcywgZWl0aGVyIHRvIGNoYW5nZSB0aGUKK25hdHVyZSBvZiB0aGUgbWF0Y2gsIG9yIHRvIGNhdXNlIGl0IGZhaWwgZWFybGllciB0aGFuIGl0IG90aGVyd2lzZSBtaWdodCwgd2hlbgordGhlIGF1dGhvciBvZiB0aGUgcGF0dGVybiBrbm93cyB0aGVyZSBpcyBubyBwb2ludCBpbiBjYXJyeWluZyBvbi4KKzwvUD4KKzxQPgorQ29uc2lkZXIsIGZvciBleGFtcGxlLCB0aGUgcGF0dGVybiBcZCtmb28gd2hlbiBhcHBsaWVkIHRvIHRoZSBzdWJqZWN0IGxpbmUKKzxwcmU+CisgIDEyMzQ1NmJhcgorPC9wcmU+CitBZnRlciBtYXRjaGluZyBhbGwgNiBkaWdpdHMgYW5kIHRoZW4gZmFpbGluZyB0byBtYXRjaCAiZm9vIiwgdGhlIG5vcm1hbAorYWN0aW9uIG9mIHRoZSBtYXRjaGVyIGlzIHRvIHRyeSBhZ2FpbiB3aXRoIG9ubHkgNSBkaWdpdHMgbWF0Y2hpbmcgdGhlIFxkKworaXRlbSwgYW5kIHRoZW4gd2l0aCA0LCBhbmQgc28gb24sIGJlZm9yZSB1bHRpbWF0ZWx5IGZhaWxpbmcuICJBdG9taWMgZ3JvdXBpbmciCisoYSB0ZXJtIHRha2VuIGZyb20gSmVmZnJleSBGcmllZGwncyBib29rKSBwcm92aWRlcyB0aGUgbWVhbnMgZm9yIHNwZWNpZnlpbmcKK3RoYXQgb25jZSBhIHN1YnBhdHRlcm4gaGFzIG1hdGNoZWQsIGl0IGlzIG5vdCB0byBiZSByZS1ldmFsdWF0ZWQgaW4gdGhpcyB3YXkuCis8L1A+Cis8UD4KK0lmIHdlIHVzZSBhdG9taWMgZ3JvdXBpbmcgZm9yIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUgbWF0Y2hlciBnaXZlcyB1cAoraW1tZWRpYXRlbHkgb24gZmFpbGluZyB0byBtYXRjaCAiZm9vIiB0aGUgZmlyc3QgdGltZS4gVGhlIG5vdGF0aW9uIGlzIGEga2luZCBvZgorc3BlY2lhbCBwYXJlbnRoZXNpcywgc3RhcnRpbmcgd2l0aCAoPyYjNjI7IGFzIGluIHRoaXMgZXhhbXBsZToKKzxwcmU+CisgICg/JiM2MjtcZCspZm9vCis8L3ByZT4KK1RoaXMga2luZCBvZiBwYXJlbnRoZXNpcyAibG9ja3MgdXAiIHRoZSAgcGFydCBvZiB0aGUgcGF0dGVybiBpdCBjb250YWlucyBvbmNlCitpdCBoYXMgbWF0Y2hlZCwgYW5kIGEgZmFpbHVyZSBmdXJ0aGVyIGludG8gdGhlIHBhdHRlcm4gaXMgcHJldmVudGVkIGZyb20KK2JhY2t0cmFja2luZyBpbnRvIGl0LiBCYWNrdHJhY2tpbmcgcGFzdCBpdCB0byBwcmV2aW91cyBpdGVtcywgaG93ZXZlciwgd29ya3MgYXMKK25vcm1hbC4KKzwvUD4KKzxQPgorQW4gYWx0ZXJuYXRpdmUgZGVzY3JpcHRpb24gaXMgdGhhdCBhIHN1YnBhdHRlcm4gb2YgdGhpcyB0eXBlIG1hdGNoZXMgZXhhY3RseQordGhlIHN0cmluZyBvZiBjaGFyYWN0ZXJzIHRoYXQgYW4gaWRlbnRpY2FsIHN0YW5kYWxvbmUgcGF0dGVybiB3b3VsZCBtYXRjaCwgaWYKK2FuY2hvcmVkIGF0IHRoZSBjdXJyZW50IHBvaW50IGluIHRoZSBzdWJqZWN0IHN0cmluZy4KKzwvUD4KKzxQPgorQXRvbWljIGdyb3VwaW5nIHN1YnBhdHRlcm5zIGFyZSBub3QgY2FwdHVyaW5nIHN1YnBhdHRlcm5zLiBTaW1wbGUgY2FzZXMgc3VjaCBhcwordGhlIGFib3ZlIGV4YW1wbGUgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSBtYXhpbWl6aW5nIHJlcGVhdCB0aGF0IG11c3Qgc3dhbGxvdworZXZlcnl0aGluZyBpdCBjYW4uIFNvLCB3aGlsZSBib3RoIFxkKyBhbmQgXGQrPyBhcmUgcHJlcGFyZWQgdG8gYWRqdXN0IHRoZQorbnVtYmVyIG9mIGRpZ2l0cyB0aGV5IG1hdGNoIGluIG9yZGVyIHRvIG1ha2UgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gbWF0Y2gsCisoPyYjNjI7XGQrKSBjYW4gb25seSBtYXRjaCBhbiBlbnRpcmUgc2VxdWVuY2Ugb2YgZGlnaXRzLgorPC9QPgorPFA+CitBdG9taWMgZ3JvdXBzIGluIGdlbmVyYWwgY2FuIG9mIGNvdXJzZSBjb250YWluIGFyYml0cmFyaWx5IGNvbXBsaWNhdGVkCitzdWJwYXR0ZXJucywgYW5kIGNhbiBiZSBuZXN0ZWQuIEhvd2V2ZXIsIHdoZW4gdGhlIHN1YnBhdHRlcm4gZm9yIGFuIGF0b21pYworZ3JvdXAgaXMganVzdCBhIHNpbmdsZSByZXBlYXRlZCBpdGVtLCBhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgYSBzaW1wbGVyCitub3RhdGlvbiwgY2FsbGVkIGEgInBvc3Nlc3NpdmUgcXVhbnRpZmllciIgY2FuIGJlIHVzZWQuIFRoaXMgY29uc2lzdHMgb2YgYW4KK2FkZGl0aW9uYWwgKyBjaGFyYWN0ZXIgZm9sbG93aW5nIGEgcXVhbnRpZmllci4gVXNpbmcgdGhpcyBub3RhdGlvbiwgdGhlCitwcmV2aW91cyBleGFtcGxlIGNhbiBiZSByZXdyaXR0ZW4gYXMKKzxwcmU+CisgIFxkKytmb28KKzwvcHJlPgorTm90ZSB0aGF0IGEgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyIGNhbiBiZSB1c2VkIHdpdGggYW4gZW50aXJlIGdyb3VwLCBmb3IKK2V4YW1wbGU6Cis8cHJlPgorICAoYWJjfHh5eil7MiwzfSsKKzwvcHJlPgorUG9zc2Vzc2l2ZSBxdWFudGlmaWVycyBhcmUgYWx3YXlzIGdyZWVkeTsgdGhlIHNldHRpbmcgb2YgdGhlIFBDUkUyX1VOR1JFRURZCitvcHRpb24gaXMgaWdub3JlZC4gVGhleSBhcmUgYSBjb252ZW5pZW50IG5vdGF0aW9uIGZvciB0aGUgc2ltcGxlciBmb3JtcyBvZgorYXRvbWljIGdyb3VwLiBIb3dldmVyLCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGluIHRoZSBtZWFuaW5nIG9mIGEgcG9zc2Vzc2l2ZQorcXVhbnRpZmllciBhbmQgdGhlIGVxdWl2YWxlbnQgYXRvbWljIGdyb3VwLCB0aG91Z2ggdGhlcmUgbWF5IGJlIGEgcGVyZm9ybWFuY2UKK2RpZmZlcmVuY2U7IHBvc3Nlc3NpdmUgcXVhbnRpZmllcnMgc2hvdWxkIGJlIHNsaWdodGx5IGZhc3Rlci4KKzwvUD4KKzxQPgorVGhlIHBvc3Nlc3NpdmUgcXVhbnRpZmllciBzeW50YXggaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBQZXJsIDUuOCBzeW50YXguCitKZWZmcmV5IEZyaWVkbCBvcmlnaW5hdGVkIHRoZSBpZGVhIChhbmQgdGhlIG5hbWUpIGluIHRoZSBmaXJzdCBlZGl0aW9uIG9mIGhpcworYm9vay4gTWlrZSBNY0Nsb3NrZXkgbGlrZWQgaXQsIHNvIGltcGxlbWVudGVkIGl0IHdoZW4gaGUgYnVpbHQgU3VuJ3MgSmF2YQorcGFja2FnZSwgYW5kIFBDUkUxIGNvcGllZCBpdCBmcm9tIHRoZXJlLiBJdCB1bHRpbWF0ZWx5IGZvdW5kIGl0cyB3YXkgaW50byBQZXJsCithdCByZWxlYXNlIDUuMTAuCis8L1A+Cis8UD4KK1BDUkUyIGhhcyBhbiBvcHRpbWl6YXRpb24gdGhhdCBhdXRvbWF0aWNhbGx5ICJwb3NzZXNzaWZpZXMiIGNlcnRhaW4gc2ltcGxlCitwYXR0ZXJuIGNvbnN0cnVjdHMuIEZvciBleGFtcGxlLCB0aGUgc2VxdWVuY2UgQStCIGlzIHRyZWF0ZWQgYXMgQSsrQiBiZWNhdXNlCit0aGVyZSBpcyBubyBwb2ludCBpbiBiYWNrdHJhY2tpbmcgaW50byBhIHNlcXVlbmNlIG9mIEEncyB3aGVuIEIgbXVzdCBmb2xsb3cuCitUaGlzIGZlYXR1cmUgY2FuIGJlIGRpc2FibGVkIGJ5IHRoZSBQQ1JFMl9OT19BVVRPUE9TU0VTUyBvcHRpb24sIG9yIHN0YXJ0aW5nCit0aGUgcGF0dGVybiB3aXRoICgqTk9fQVVUT19QT1NTRVNTKS4KKzwvUD4KKzxQPgorV2hlbiBhIHBhdHRlcm4gY29udGFpbnMgYW4gdW5saW1pdGVkIHJlcGVhdCBpbnNpZGUgYSBzdWJwYXR0ZXJuIHRoYXQgY2FuIGl0c2VsZgorYmUgcmVwZWF0ZWQgYW4gdW5saW1pdGVkIG51bWJlciBvZiB0aW1lcywgdGhlIHVzZSBvZiBhbiBhdG9taWMgZ3JvdXAgaXMgdGhlCitvbmx5IHdheSB0byBhdm9pZCBzb21lIGZhaWxpbmcgbWF0Y2hlcyB0YWtpbmcgYSB2ZXJ5IGxvbmcgdGltZSBpbmRlZWQuIFRoZQorcGF0dGVybgorPHByZT4KKyAgKFxEK3wmIzYwO1xkKyYjNjI7KSpbIT9dCis8L3ByZT4KK21hdGNoZXMgYW4gdW5saW1pdGVkIG51bWJlciBvZiBzdWJzdHJpbmdzIHRoYXQgZWl0aGVyIGNvbnNpc3Qgb2Ygbm9uLWRpZ2l0cywgb3IKK2RpZ2l0cyBlbmNsb3NlZCBpbiAmIzYwOyYjNjI7LCBmb2xsb3dlZCBieSBlaXRoZXIgISBvciA/LiBXaGVuIGl0IG1hdGNoZXMsIGl0IHJ1bnMKK3F1aWNrbHkuIEhvd2V2ZXIsIGlmIGl0IGlzIGFwcGxpZWQgdG8KKzxwcmU+CisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzwvcHJlPgoraXQgdGFrZXMgYSBsb25nIHRpbWUgYmVmb3JlIHJlcG9ydGluZyBmYWlsdXJlLiBUaGlzIGlzIGJlY2F1c2UgdGhlIHN0cmluZyBjYW4KK2JlIGRpdmlkZWQgYmV0d2VlbiB0aGUgaW50ZXJuYWwgXEQrIHJlcGVhdCBhbmQgdGhlIGV4dGVybmFsICogcmVwZWF0IGluIGEKK2xhcmdlIG51bWJlciBvZiB3YXlzLCBhbmQgYWxsIGhhdmUgdG8gYmUgdHJpZWQuIChUaGUgZXhhbXBsZSB1c2VzIFshP10gcmF0aGVyCit0aGFuIGEgc2luZ2xlIGNoYXJhY3RlciBhdCB0aGUgZW5kLCBiZWNhdXNlIGJvdGggUENSRTIgYW5kIFBlcmwgaGF2ZSBhbgorb3B0aW1pemF0aW9uIHRoYXQgYWxsb3dzIGZvciBmYXN0IGZhaWx1cmUgd2hlbiBhIHNpbmdsZSBjaGFyYWN0ZXIgaXMgdXNlZC4gVGhleQorcmVtZW1iZXIgdGhlIGxhc3Qgc2luZ2xlIGNoYXJhY3RlciB0aGF0IGlzIHJlcXVpcmVkIGZvciBhIG1hdGNoLCBhbmQgZmFpbCBlYXJseQoraWYgaXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIHN0cmluZy4pIElmIHRoZSBwYXR0ZXJuIGlzIGNoYW5nZWQgc28gdGhhdCBpdCB1c2VzCithbiBhdG9taWMgZ3JvdXAsIGxpa2UgdGhpczoKKzxwcmU+CisgICgoPyYjNjI7XEQrKXwmIzYwO1xkKyYjNjI7KSpbIT9dCis8L3ByZT4KK3NlcXVlbmNlcyBvZiBub24tZGlnaXRzIGNhbm5vdCBiZSBicm9rZW4sIGFuZCBmYWlsdXJlIGhhcHBlbnMgcXVpY2tseS4KKzxhIG5hbWU9ImJhY2tyZWZlcmVuY2VzIj48L2E+PC9QPgorPGJyPjxhIG5hbWU9IlNFQzE5IiBocmVmPSIjVE9DMSI+QkFDSyBSRUZFUkVOQ0VTPC9hPjxicj4KKzxQPgorT3V0c2lkZSBhIGNoYXJhY3RlciBjbGFzcywgYSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBkaWdpdCBncmVhdGVyIHRoYW4gMCAoYW5kCitwb3NzaWJseSBmdXJ0aGVyIGRpZ2l0cykgaXMgYSBiYWNrIHJlZmVyZW5jZSB0byBhIGNhcHR1cmluZyBzdWJwYXR0ZXJuIGVhcmxpZXIKKyh0aGF0IGlzLCB0byBpdHMgbGVmdCkgaW4gdGhlIHBhdHRlcm4sIHByb3ZpZGVkIHRoZXJlIGhhdmUgYmVlbiB0aGF0IG1hbnkKK3ByZXZpb3VzIGNhcHR1cmluZyBsZWZ0IHBhcmVudGhlc2VzLgorPC9QPgorPFA+CitIb3dldmVyLCBpZiB0aGUgZGVjaW1hbCBudW1iZXIgZm9sbG93aW5nIHRoZSBiYWNrc2xhc2ggaXMgbGVzcyB0aGFuIDgsIGl0IGlzCithbHdheXMgdGFrZW4gYXMgYSBiYWNrIHJlZmVyZW5jZSwgYW5kIGNhdXNlcyBhbiBlcnJvciBvbmx5IGlmIHRoZXJlIGFyZSBub3QKK3RoYXQgbWFueSBjYXB0dXJpbmcgbGVmdCBwYXJlbnRoZXNlcyBpbiB0aGUgZW50aXJlIHBhdHRlcm4uIEluIG90aGVyIHdvcmRzLCB0aGUKK3BhcmVudGhlc2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQgbmVlZCBub3QgYmUgdG8gdGhlIGxlZnQgb2YgdGhlIHJlZmVyZW5jZSBmb3IKK251bWJlcnMgbGVzcyB0aGFuIDguIEEgImZvcndhcmQgYmFjayByZWZlcmVuY2UiIG9mIHRoaXMgdHlwZSBjYW4gbWFrZSBzZW5zZQord2hlbiBhIHJlcGV0aXRpb24gaXMgaW52b2x2ZWQgYW5kIHRoZSBzdWJwYXR0ZXJuIHRvIHRoZSByaWdodCBoYXMgcGFydGljaXBhdGVkCitpbiBhbiBlYXJsaWVyIGl0ZXJhdGlvbi4KKzwvUD4KKzxQPgorSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYSBudW1lcmljYWwgImZvcndhcmQgYmFjayByZWZlcmVuY2UiIHRvIGEgc3VicGF0dGVybgord2hvc2UgbnVtYmVyIGlzIDggb3IgbW9yZSB1c2luZyB0aGlzIHN5bnRheCBiZWNhdXNlIGEgc2VxdWVuY2Ugc3VjaCBhcyBcNTAgaXMKK2ludGVycHJldGVkIGFzIGEgY2hhcmFjdGVyIGRlZmluZWQgaW4gb2N0YWwuIFNlZSB0aGUgc3Vic2VjdGlvbiBlbnRpdGxlZAorIk5vbi1wcmludGluZyBjaGFyYWN0ZXJzIgorPGEgaHJlZj0iI2RpZ2l0c2FmdGVyYmFja3NsYXNoIj5hYm92ZTwvYT4KK2ZvciBmdXJ0aGVyIGRldGFpbHMgb2YgdGhlIGhhbmRsaW5nIG9mIGRpZ2l0cyBmb2xsb3dpbmcgYSBiYWNrc2xhc2guIFRoZXJlIGlzCitubyBzdWNoIHByb2JsZW0gd2hlbiBuYW1lZCBwYXJlbnRoZXNlcyBhcmUgdXNlZC4gQSBiYWNrIHJlZmVyZW5jZSB0byBhbnkKK3N1YnBhdHRlcm4gaXMgcG9zc2libGUgdXNpbmcgbmFtZWQgcGFyZW50aGVzZXMgKHNlZSBiZWxvdykuCis8L1A+Cis8UD4KK0Fub3RoZXIgd2F5IG9mIGF2b2lkaW5nIHRoZSBhbWJpZ3VpdHkgaW5oZXJlbnQgaW4gdGhlIHVzZSBvZiBkaWdpdHMgZm9sbG93aW5nIGEKK2JhY2tzbGFzaCBpcyB0byB1c2UgdGhlIFxnIGVzY2FwZSBzZXF1ZW5jZS4gVGhpcyBlc2NhcGUgbXVzdCBiZSBmb2xsb3dlZCBieSBhbgordW5zaWduZWQgbnVtYmVyIG9yIGEgbmVnYXRpdmUgbnVtYmVyLCBvcHRpb25hbGx5IGVuY2xvc2VkIGluIGJyYWNlcy4gVGhlc2UKK2V4YW1wbGVzIGFyZSBhbGwgaWRlbnRpY2FsOgorPHByZT4KKyAgKHJpbmcpLCBcMQorICAocmluZyksIFxnMQorICAocmluZyksIFxnezF9Cis8L3ByZT4KK0FuIHVuc2lnbmVkIG51bWJlciBzcGVjaWZpZXMgYW4gYWJzb2x1dGUgcmVmZXJlbmNlIHdpdGhvdXQgdGhlIGFtYmlndWl0eSB0aGF0CitpcyBwcmVzZW50IGluIHRoZSBvbGRlciBzeW50YXguIEl0IGlzIGFsc28gdXNlZnVsIHdoZW4gbGl0ZXJhbCBkaWdpdHMgZm9sbG93Cit0aGUgcmVmZXJlbmNlLiBBIG5lZ2F0aXZlIG51bWJlciBpcyBhIHJlbGF0aXZlIHJlZmVyZW5jZS4gQ29uc2lkZXIgdGhpcworZXhhbXBsZToKKzxwcmU+CisgIChhYmMoZGVmKWdoaSlcZ3stMX0KKzwvcHJlPgorVGhlIHNlcXVlbmNlIFxney0xfSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgbW9zdCByZWNlbnRseSBzdGFydGVkIGNhcHR1cmluZworc3VicGF0dGVybiBiZWZvcmUgXGcsIHRoYXQgaXMsIGlzIGl0IGVxdWl2YWxlbnQgdG8gXDIgaW4gdGhpcyBleGFtcGxlLgorU2ltaWxhcmx5LCBcZ3stMn0gd291bGQgYmUgZXF1aXZhbGVudCB0byBcMS4gVGhlIHVzZSBvZiByZWxhdGl2ZSByZWZlcmVuY2VzCitjYW4gYmUgaGVscGZ1bCBpbiBsb25nIHBhdHRlcm5zLCBhbmQgYWxzbyBpbiBwYXR0ZXJucyB0aGF0IGFyZSBjcmVhdGVkIGJ5Citqb2luaW5nIHRvZ2V0aGVyIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gcmVmZXJlbmNlcyB3aXRoaW4gdGhlbXNlbHZlcy4KKzwvUD4KKzxQPgorQSBiYWNrIHJlZmVyZW5jZSBtYXRjaGVzIHdoYXRldmVyIGFjdHVhbGx5IG1hdGNoZWQgdGhlIGNhcHR1cmluZyBzdWJwYXR0ZXJuIGluCit0aGUgY3VycmVudCBzdWJqZWN0IHN0cmluZywgcmF0aGVyIHRoYW4gYW55dGhpbmcgbWF0Y2hpbmcgdGhlIHN1YnBhdHRlcm4KK2l0c2VsZiAoc2VlCis8YSBocmVmPSIjc3VicGF0dGVybnNhc3N1YnJvdXRpbmVzIj4iU3VicGF0dGVybnMgYXMgc3Vicm91dGluZXMiPC9hPgorYmVsb3cgZm9yIGEgd2F5IG9mIGRvaW5nIHRoYXQpLiBTbyB0aGUgcGF0dGVybgorPHByZT4KKyAgKHNlbnN8cmVzcG9ucyllIGFuZCBcMWliaWxpdHkKKzwvcHJlPgorbWF0Y2hlcyAic2Vuc2UgYW5kIHNlbnNpYmlsaXR5IiBhbmQgInJlc3BvbnNlIGFuZCByZXNwb25zaWJpbGl0eSIsIGJ1dCBub3QKKyJzZW5zZSBhbmQgcmVzcG9uc2liaWxpdHkiLiBJZiBjYXNlZnVsIG1hdGNoaW5nIGlzIGluIGZvcmNlIGF0IHRoZSB0aW1lIG9mIHRoZQorYmFjayByZWZlcmVuY2UsIHRoZSBjYXNlIG9mIGxldHRlcnMgaXMgcmVsZXZhbnQuIEZvciBleGFtcGxlLAorPHByZT4KKyAgKCg/aSlyYWgpXHMrXDEKKzwvcHJlPgorbWF0Y2hlcyAicmFoIHJhaCIgYW5kICJSQUggUkFIIiwgYnV0IG5vdCAiUkFIIHJhaCIsIGV2ZW4gdGhvdWdoIHRoZSBvcmlnaW5hbAorY2FwdHVyaW5nIHN1YnBhdHRlcm4gaXMgbWF0Y2hlZCBjYXNlbGVzc2x5LgorPC9QPgorPFA+CitUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgd2F5cyBvZiB3cml0aW5nIGJhY2sgcmVmZXJlbmNlcyB0byBuYW1lZAorc3VicGF0dGVybnMuIFRoZSAuTkVUIHN5bnRheCBca3tuYW1lfSBhbmQgdGhlIFBlcmwgc3ludGF4IFxrJiM2MDtuYW1lJiM2Mjsgb3IKK1xrJ25hbWUnIGFyZSBzdXBwb3J0ZWQsIGFzIGlzIHRoZSBQeXRob24gc3ludGF4ICg/UD1uYW1lKS4gUGVybCA1LjEwJ3MgdW5pZmllZAorYmFjayByZWZlcmVuY2Ugc3ludGF4LCBpbiB3aGljaCBcZyBjYW4gYmUgdXNlZCBmb3IgYm90aCBudW1lcmljIGFuZCBuYW1lZAorcmVmZXJlbmNlcywgaXMgYWxzbyBzdXBwb3J0ZWQuIFdlIGNvdWxkIHJld3JpdGUgdGhlIGFib3ZlIGV4YW1wbGUgaW4gYW55IG9mCit0aGUgZm9sbG93aW5nIHdheXM6Cis8cHJlPgorICAoPyYjNjA7cDEmIzYyOyg/aSlyYWgpXHMrXGsmIzYwO3AxJiM2MjsKKyAgKD8ncDEnKD9pKXJhaClccytca3twMX0KKyAgKD9QJiM2MDtwMSYjNjI7KD9pKXJhaClccysoP1A9cDEpCisgICg/JiM2MDtwMSYjNjI7KD9pKXJhaClccytcZ3twMX0KKzwvcHJlPgorQSBzdWJwYXR0ZXJuIHRoYXQgaXMgcmVmZXJlbmNlZCBieSBuYW1lIG1heSBhcHBlYXIgaW4gdGhlIHBhdHRlcm4gYmVmb3JlIG9yCithZnRlciB0aGUgcmVmZXJlbmNlLgorPC9QPgorPFA+CitUaGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBiYWNrIHJlZmVyZW5jZSB0byB0aGUgc2FtZSBzdWJwYXR0ZXJuLiBJZiBhCitzdWJwYXR0ZXJuIGhhcyBub3QgYWN0dWFsbHkgYmVlbiB1c2VkIGluIGEgcGFydGljdWxhciBtYXRjaCwgYW55IGJhY2sKK3JlZmVyZW5jZXMgdG8gaXQgYWx3YXlzIGZhaWwgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuCis8cHJlPgorICAoYXwoYmMpKVwyCis8L3ByZT4KK2Fsd2F5cyBmYWlscyBpZiBpdCBzdGFydHMgdG8gbWF0Y2ggImEiIHJhdGhlciB0aGFuICJiYyIuIEhvd2V2ZXIsIGlmIHRoZQorUENSRTJfTUFUQ0hfVU5TRVRfQkFDS1JFRiBvcHRpb24gaXMgc2V0IGF0IGNvbXBpbGUgdGltZSwgYSBiYWNrIHJlZmVyZW5jZSB0byBhbgordW5zZXQgdmFsdWUgbWF0Y2hlcyBhbiBlbXB0eSBzdHJpbmcuCis8L1A+Cis8UD4KK0JlY2F1c2UgdGhlcmUgbWF5IGJlIG1hbnkgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGluIGEgcGF0dGVybiwgYWxsIGRpZ2l0cworZm9sbG93aW5nIGEgYmFja3NsYXNoIGFyZSB0YWtlbiBhcyBwYXJ0IG9mIGEgcG90ZW50aWFsIGJhY2sgcmVmZXJlbmNlIG51bWJlci4KK0lmIHRoZSBwYXR0ZXJuIGNvbnRpbnVlcyB3aXRoIGEgZGlnaXQgY2hhcmFjdGVyLCBzb21lIGRlbGltaXRlciBtdXN0IGJlIHVzZWQgdG8KK3Rlcm1pbmF0ZSB0aGUgYmFjayByZWZlcmVuY2UuIElmIHRoZSBQQ1JFMl9FWFRFTkRFRCBvcHRpb24gaXMgc2V0LCB0aGlzIGNhbiBiZQord2hpdGUgc3BhY2UuIE90aGVyd2lzZSwgdGhlIFxneyBzeW50YXggb3IgYW4gZW1wdHkgY29tbWVudCAoc2VlCis8YSBocmVmPSIjY29tbWVudHMiPiJDb21tZW50cyI8L2E+CitiZWxvdykgY2FuIGJlIHVzZWQuCis8L1A+Cis8YnI+PGI+CitSZWN1cnNpdmUgYmFjayByZWZlcmVuY2VzCis8L2I+PGJyPgorPFA+CitBIGJhY2sgcmVmZXJlbmNlIHRoYXQgb2NjdXJzIGluc2lkZSB0aGUgcGFyZW50aGVzZXMgdG8gd2hpY2ggaXQgcmVmZXJzIGZhaWxzCit3aGVuIHRoZSBzdWJwYXR0ZXJuIGlzIGZpcnN0IHVzZWQsIHNvLCBmb3IgZXhhbXBsZSwgKGFcMSkgbmV2ZXIgbWF0Y2hlcy4KK0hvd2V2ZXIsIHN1Y2ggcmVmZXJlbmNlcyBjYW4gYmUgdXNlZnVsIGluc2lkZSByZXBlYXRlZCBzdWJwYXR0ZXJucy4gRm9yCitleGFtcGxlLCB0aGUgcGF0dGVybgorPHByZT4KKyAgKGF8YlwxKSsKKzwvcHJlPgorbWF0Y2hlcyBhbnkgbnVtYmVyIG9mICJhInMgYW5kIGFsc28gImFiYSIsICJhYmFiYmFhIiBldGMuIEF0IGVhY2ggaXRlcmF0aW9uIG9mCit0aGUgc3VicGF0dGVybiwgdGhlIGJhY2sgcmVmZXJlbmNlIG1hdGNoZXMgdGhlIGNoYXJhY3RlciBzdHJpbmcgY29ycmVzcG9uZGluZwordG8gdGhlIHByZXZpb3VzIGl0ZXJhdGlvbi4gSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgdGhlIHBhdHRlcm4gbXVzdCBiZSBzdWNoCit0aGF0IHRoZSBmaXJzdCBpdGVyYXRpb24gZG9lcyBub3QgbmVlZCB0byBtYXRjaCB0aGUgYmFjayByZWZlcmVuY2UuIFRoaXMgY2FuIGJlCitkb25lIHVzaW5nIGFsdGVybmF0aW9uLCBhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSwgb3IgYnkgYSBxdWFudGlmaWVyIHdpdGggYQorbWluaW11bSBvZiB6ZXJvLgorPC9QPgorPFA+CitCYWNrIHJlZmVyZW5jZXMgb2YgdGhpcyB0eXBlIGNhdXNlIHRoZSBncm91cCB0aGF0IHRoZXkgcmVmZXJlbmNlIHRvIGJlIHRyZWF0ZWQKK2FzIGFuCis8YSBocmVmPSIjYXRvbWljZ3JvdXAiPmF0b21pYyBncm91cC48L2E+CitPbmNlIHRoZSB3aG9sZSBncm91cCBoYXMgYmVlbiBtYXRjaGVkLCBhIHN1YnNlcXVlbnQgbWF0Y2hpbmcgZmFpbHVyZSBjYW5ub3QKK2NhdXNlIGJhY2t0cmFja2luZyBpbnRvIHRoZSBtaWRkbGUgb2YgdGhlIGdyb3VwLgorPGEgbmFtZT0iYmlnYXNzZXJ0aW9ucyI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMyMCIgaHJlZj0iI1RPQzEiPkFTU0VSVElPTlM8L2E+PGJyPgorPFA+CitBbiBhc3NlcnRpb24gaXMgYSB0ZXN0IG9uIHRoZSBjaGFyYWN0ZXJzIGZvbGxvd2luZyBvciBwcmVjZWRpbmcgdGhlIGN1cnJlbnQKK21hdGNoaW5nIHBvaW50IHRoYXQgZG9lcyBub3QgY29uc3VtZSBhbnkgY2hhcmFjdGVycy4gVGhlIHNpbXBsZSBhc3NlcnRpb25zCitjb2RlZCBhcyBcYiwgXEIsIFxBLCBcRywgXFosIFx6LCBeIGFuZCAkIGFyZSBkZXNjcmliZWQKKzxhIGhyZWY9IiNzbWFsbGFzc2VydGlvbnMiPmFib3ZlLjwvYT4KKzwvUD4KKzxQPgorTW9yZSBjb21wbGljYXRlZCBhc3NlcnRpb25zIGFyZSBjb2RlZCBhcyBzdWJwYXR0ZXJucy4gVGhlcmUgYXJlIHR3byBraW5kczoKK3Rob3NlIHRoYXQgbG9vayBhaGVhZCBvZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3ViamVjdCBzdHJpbmcsIGFuZCB0aG9zZQordGhhdCBsb29rIGJlaGluZCBpdC4gQW4gYXNzZXJ0aW9uIHN1YnBhdHRlcm4gaXMgbWF0Y2hlZCBpbiB0aGUgbm9ybWFsIHdheSwKK2V4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IGNhdXNlIHRoZSBjdXJyZW50IG1hdGNoaW5nIHBvc2l0aW9uIHRvIGJlIGNoYW5nZWQuCis8L1A+Cis8UD4KK0Fzc2VydGlvbiBzdWJwYXR0ZXJucyBhcmUgbm90IGNhcHR1cmluZyBzdWJwYXR0ZXJucy4gSWYgc3VjaCBhbiBhc3NlcnRpb24KK2NvbnRhaW5zIGNhcHR1cmluZyBzdWJwYXR0ZXJucyB3aXRoaW4gaXQsIHRoZXNlIGFyZSBjb3VudGVkIGZvciB0aGUgcHVycG9zZXMgb2YKK251bWJlcmluZyB0aGUgY2FwdHVyaW5nIHN1YnBhdHRlcm5zIGluIHRoZSB3aG9sZSBwYXR0ZXJuLiBIb3dldmVyLCBzdWJzdHJpbmcKK2NhcHR1cmluZyBpcyBjYXJyaWVkIG91dCBvbmx5IGZvciBwb3NpdGl2ZSBhc3NlcnRpb25zLiAoUGVybCBzb21ldGltZXMsIGJ1dCBub3QKK2Fsd2F5cywgZG9lcyBkbyBjYXB0dXJpbmcgaW4gbmVnYXRpdmUgYXNzZXJ0aW9ucy4pCis8L1A+Cis8UD4KK0ZvciBjb21wYXRpYmlsaXR5IHdpdGggUGVybCwgbW9zdCBhc3NlcnRpb24gc3VicGF0dGVybnMgbWF5IGJlIHJlcGVhdGVkOyB0aG91Z2gKK2l0IG1ha2VzIG5vIHNlbnNlIHRvIGFzc2VydCB0aGUgc2FtZSB0aGluZyBzZXZlcmFsIHRpbWVzLCB0aGUgc2lkZSBlZmZlY3Qgb2YKK2NhcHR1cmluZyBwYXJlbnRoZXNlcyBtYXkgb2NjYXNpb25hbGx5IGJlIHVzZWZ1bC4gSG93ZXZlciwgYW4gYXNzZXJ0aW9uIHRoYXQKK2Zvcm1zIHRoZSBjb25kaXRpb24gZm9yIGEgY29uZGl0aW9uYWwgc3VicGF0dGVybiBtYXkgbm90IGJlIHF1YW50aWZpZWQuIEluCitwcmFjdGljZSwgZm9yIG90aGVyIGFzc2VydGlvbnMsIHRoZXJlIG9ubHkgdGhyZWUgY2FzZXM6Cis8YnI+Cis8YnI+CisoMSkgSWYgdGhlIHF1YW50aWZpZXIgaXMgezB9LCB0aGUgYXNzZXJ0aW9uIGlzIG5ldmVyIG9iZXllZCBkdXJpbmcgbWF0Y2hpbmcuCitIb3dldmVyLCBpdCBtYXkgY29udGFpbiBpbnRlcm5hbCBjYXB0dXJpbmcgcGFyZW50aGVzaXplZCBncm91cHMgdGhhdCBhcmUgY2FsbGVkCitmcm9tIGVsc2V3aGVyZSB2aWEgdGhlCis8YSBocmVmPSIjc3VicGF0dGVybnNhc3N1YnJvdXRpbmVzIj5zdWJyb3V0aW5lIG1lY2hhbmlzbS48L2E+Cis8YnI+Cis8YnI+CisoMikgSWYgcXVhbnRpZmllciBpcyB7MCxufSB3aGVyZSBuIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCBpdCBpcyB0cmVhdGVkIGFzIGlmIGl0Cit3ZXJlIHswLDF9LiBBdCBydW4gdGltZSwgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gbWF0Y2ggaXMgdHJpZWQgd2l0aCBhbmQKK3dpdGhvdXQgdGhlIGFzc2VydGlvbiwgdGhlIG9yZGVyIGRlcGVuZGluZyBvbiB0aGUgZ3JlZWRpbmVzcyBvZiB0aGUgcXVhbnRpZmllci4KKzxicj4KKzxicj4KKygzKSBJZiB0aGUgbWluaW11bSByZXBldGl0aW9uIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB0aGUgcXVhbnRpZmllciBpcyBpZ25vcmVkLgorVGhlIGFzc2VydGlvbiBpcyBvYmV5ZWQganVzdCBvbmNlIHdoZW4gZW5jb3VudGVyZWQgZHVyaW5nIG1hdGNoaW5nLgorPC9QPgorPGJyPjxiPgorTG9va2FoZWFkIGFzc2VydGlvbnMKKzwvYj48YnI+Cis8UD4KK0xvb2thaGVhZCBhc3NlcnRpb25zIHN0YXJ0IHdpdGggKD89IGZvciBwb3NpdGl2ZSBhc3NlcnRpb25zIGFuZCAoPyEgZm9yCituZWdhdGl2ZSBhc3NlcnRpb25zLiBGb3IgZXhhbXBsZSwKKzxwcmU+CisgIFx3Kyg/PTspCis8L3ByZT4KK21hdGNoZXMgYSB3b3JkIGZvbGxvd2VkIGJ5IGEgc2VtaWNvbG9uLCBidXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgc2VtaWNvbG9uIGluCit0aGUgbWF0Y2gsIGFuZAorPHByZT4KKyAgZm9vKD8hYmFyKQorPC9wcmU+CittYXRjaGVzIGFueSBvY2N1cnJlbmNlIG9mICJmb28iIHRoYXQgaXMgbm90IGZvbGxvd2VkIGJ5ICJiYXIiLiBOb3RlIHRoYXQgdGhlCithcHBhcmVudGx5IHNpbWlsYXIgcGF0dGVybgorPHByZT4KKyAgKD8hZm9vKWJhcgorPC9wcmU+Citkb2VzIG5vdCBmaW5kIGFuIG9jY3VycmVuY2Ugb2YgImJhciIgdGhhdCBpcyBwcmVjZWRlZCBieSBzb21ldGhpbmcgb3RoZXIgdGhhbgorImZvbyI7IGl0IGZpbmRzIGFueSBvY2N1cnJlbmNlIG9mICJiYXIiIHdoYXRzb2V2ZXIsIGJlY2F1c2UgdGhlIGFzc2VydGlvbgorKD8hZm9vKSBpcyBhbHdheXMgdHJ1ZSB3aGVuIHRoZSBuZXh0IHRocmVlIGNoYXJhY3RlcnMgYXJlICJiYXIiLiBBCitsb29rYmVoaW5kIGFzc2VydGlvbiBpcyBuZWVkZWQgdG8gYWNoaWV2ZSB0aGUgb3RoZXIgZWZmZWN0LgorPC9QPgorPFA+CitJZiB5b3Ugd2FudCB0byBmb3JjZSBhIG1hdGNoaW5nIGZhaWx1cmUgYXQgc29tZSBwb2ludCBpbiBhIHBhdHRlcm4sIHRoZSBtb3N0Citjb252ZW5pZW50IHdheSB0byBkbyBpdCBpcyB3aXRoICg/ISkgYmVjYXVzZSBhbiBlbXB0eSBzdHJpbmcgYWx3YXlzIG1hdGNoZXMsIHNvCithbiBhc3NlcnRpb24gdGhhdCByZXF1aXJlcyB0aGVyZSBub3QgdG8gYmUgYW4gZW1wdHkgc3RyaW5nIG11c3QgYWx3YXlzIGZhaWwuCitUaGUgYmFja3RyYWNraW5nIGNvbnRyb2wgdmVyYiAoKkZBSUwpIG9yICgqRikgaXMgYSBzeW5vbnltIGZvciAoPyEpLgorPGEgbmFtZT0ibG9va2JlaGluZCI+PC9hPjwvUD4KKzxicj48Yj4KK0xvb2tiZWhpbmQgYXNzZXJ0aW9ucworPC9iPjxicj4KKzxQPgorTG9va2JlaGluZCBhc3NlcnRpb25zIHN0YXJ0IHdpdGggKD8mIzYwOz0gZm9yIHBvc2l0aXZlIGFzc2VydGlvbnMgYW5kICg/JiM2MDshIGZvcgorbmVnYXRpdmUgYXNzZXJ0aW9ucy4gRm9yIGV4YW1wbGUsCis8cHJlPgorICAoPyYjNjA7IWZvbyliYXIKKzwvcHJlPgorZG9lcyBmaW5kIGFuIG9jY3VycmVuY2Ugb2YgImJhciIgdGhhdCBpcyBub3QgcHJlY2VkZWQgYnkgImZvbyIuIFRoZSBjb250ZW50cyBvZgorYSBsb29rYmVoaW5kIGFzc2VydGlvbiBhcmUgcmVzdHJpY3RlZCBzdWNoIHRoYXQgYWxsIHRoZSBzdHJpbmdzIGl0IG1hdGNoZXMgbXVzdAoraGF2ZSBhIGZpeGVkIGxlbmd0aC4gSG93ZXZlciwgaWYgdGhlcmUgYXJlIHNldmVyYWwgdG9wLWxldmVsIGFsdGVybmF0aXZlcywgdGhleQorZG8gbm90IGFsbCBoYXZlIHRvIGhhdmUgdGhlIHNhbWUgZml4ZWQgbGVuZ3RoLiBUaHVzCis8cHJlPgorICAoPyYjNjA7PWJ1bGxvY2t8ZG9ua2V5KQorPC9wcmU+CitpcyBwZXJtaXR0ZWQsIGJ1dAorPHByZT4KKyAgKD8mIzYwOyFkb2dzP3xjYXRzPykKKzwvcHJlPgorY2F1c2VzIGFuIGVycm9yIGF0IGNvbXBpbGUgdGltZS4gQnJhbmNoZXMgdGhhdCBtYXRjaCBkaWZmZXJlbnQgbGVuZ3RoIHN0cmluZ3MKK2FyZSBwZXJtaXR0ZWQgb25seSBhdCB0aGUgdG9wIGxldmVsIG9mIGEgbG9va2JlaGluZCBhc3NlcnRpb24uIFRoaXMgaXMgYW4KK2V4dGVuc2lvbiBjb21wYXJlZCB3aXRoIFBlcmwsIHdoaWNoIHJlcXVpcmVzIGFsbCBicmFuY2hlcyB0byBtYXRjaCB0aGUgc2FtZQorbGVuZ3RoIG9mIHN0cmluZy4gQW4gYXNzZXJ0aW9uIHN1Y2ggYXMKKzxwcmU+CisgICg/JiM2MDs9YWIoY3xkZSkpCis8L3ByZT4KK2lzIG5vdCBwZXJtaXR0ZWQsIGJlY2F1c2UgaXRzIHNpbmdsZSB0b3AtbGV2ZWwgYnJhbmNoIGNhbiBtYXRjaCB0d28gZGlmZmVyZW50CitsZW5ndGhzLCBidXQgaXQgaXMgYWNjZXB0YWJsZSB0byBQQ1JFMiBpZiByZXdyaXR0ZW4gdG8gdXNlIHR3byB0b3AtbGV2ZWwKK2JyYW5jaGVzOgorPHByZT4KKyAgKD8mIzYwOz1hYmN8YWJkZSkKKzwvcHJlPgorSW4gc29tZSBjYXNlcywgdGhlIGVzY2FwZSBzZXF1ZW5jZSBcSworPGEgaHJlZj0iI3Jlc2V0bWF0Y2hzdGFydCI+KHNlZSBhYm92ZSk8L2E+CitjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgbG9va2JlaGluZCBhc3NlcnRpb24gdG8gZ2V0IHJvdW5kIHRoZSBmaXhlZC1sZW5ndGgKK3Jlc3RyaWN0aW9uLgorPC9QPgorPFA+CitUaGUgaW1wbGVtZW50YXRpb24gb2YgbG9va2JlaGluZCBhc3NlcnRpb25zIGlzLCBmb3IgZWFjaCBhbHRlcm5hdGl2ZSwgdG8KK3RlbXBvcmFyaWx5IG1vdmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gYmFjayBieSB0aGUgZml4ZWQgbGVuZ3RoIGFuZCB0aGVuIHRyeSB0bworbWF0Y2guIElmIHRoZXJlIGFyZSBpbnN1ZmZpY2llbnQgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24sIHRoZQorYXNzZXJ0aW9uIGZhaWxzLgorPC9QPgorPFA+CitJbiBhIFVURiBtb2RlLCBQQ1JFMiBkb2VzIG5vdCBhbGxvdyB0aGUgXEMgZXNjYXBlICh3aGljaCBtYXRjaGVzIGEgc2luZ2xlIGNvZGUKK3VuaXQgZXZlbiBpbiBhIFVURiBtb2RlKSB0byBhcHBlYXIgaW4gbG9va2JlaGluZCBhc3NlcnRpb25zLCBiZWNhdXNlIGl0IG1ha2VzCitpdCBpbXBvc3NpYmxlIHRvIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBsb29rYmVoaW5kLiBUaGUgXFggYW5kIFxSCitlc2NhcGVzLCB3aGljaCBjYW4gbWF0Y2ggZGlmZmVyZW50IG51bWJlcnMgb2YgY29kZSB1bml0cywgYXJlIGFsc28gbm90CitwZXJtaXR0ZWQuCis8L1A+Cis8UD4KKzxhIGhyZWY9IiNzdWJwYXR0ZXJuc2Fzc3Vicm91dGluZXMiPiJTdWJyb3V0aW5lIjwvYT4KK2NhbGxzIChzZWUgYmVsb3cpIHN1Y2ggYXMgKD8yKSBvciAoPyZYKSBhcmUgcGVybWl0dGVkIGluIGxvb2tiZWhpbmRzLCBhcyBsb25nCithcyB0aGUgc3VicGF0dGVybiBtYXRjaGVzIGEgZml4ZWQtbGVuZ3RoIHN0cmluZy4KKzxhIGhyZWY9IiNyZWN1cnNpb24iPlJlY3Vyc2lvbiw8L2E+Citob3dldmVyLCBpcyBub3Qgc3VwcG9ydGVkLgorPC9QPgorPFA+CitQb3NzZXNzaXZlIHF1YW50aWZpZXJzIGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggbG9va2JlaGluZCBhc3NlcnRpb25zIHRvCitzcGVjaWZ5IGVmZmljaWVudCBtYXRjaGluZyBvZiBmaXhlZC1sZW5ndGggc3RyaW5ncyBhdCB0aGUgZW5kIG9mIHN1YmplY3QKK3N0cmluZ3MuIENvbnNpZGVyIGEgc2ltcGxlIHBhdHRlcm4gc3VjaCBhcworPHByZT4KKyAgYWJjZCQKKzwvcHJlPgord2hlbiBhcHBsaWVkIHRvIGEgbG9uZyBzdHJpbmcgdGhhdCBkb2VzIG5vdCBtYXRjaC4gQmVjYXVzZSBtYXRjaGluZyBwcm9jZWVkcworZnJvbSBsZWZ0IHRvIHJpZ2h0LCBQQ1JFMiB3aWxsIGxvb2sgZm9yIGVhY2ggImEiIGluIHRoZSBzdWJqZWN0IGFuZCB0aGVuIHNlZSBpZgord2hhdCBmb2xsb3dzIG1hdGNoZXMgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4uIElmIHRoZSBwYXR0ZXJuIGlzIHNwZWNpZmllZCBhcworPHByZT4KKyAgXi4qYWJjZCQKKzwvcHJlPgordGhlIGluaXRpYWwgLiogbWF0Y2hlcyB0aGUgZW50aXJlIHN0cmluZyBhdCBmaXJzdCwgYnV0IHdoZW4gdGhpcyBmYWlscyAoYmVjYXVzZQordGhlcmUgaXMgbm8gZm9sbG93aW5nICJhIiksIGl0IGJhY2t0cmFja3MgdG8gbWF0Y2ggYWxsIGJ1dCB0aGUgbGFzdCBjaGFyYWN0ZXIsCit0aGVuIGFsbCBidXQgdGhlIGxhc3QgdHdvIGNoYXJhY3RlcnMsIGFuZCBzbyBvbi4gT25jZSBhZ2FpbiB0aGUgc2VhcmNoIGZvciAiYSIKK2NvdmVycyB0aGUgZW50aXJlIHN0cmluZywgZnJvbSByaWdodCB0byBsZWZ0LCBzbyB3ZSBhcmUgbm8gYmV0dGVyIG9mZi4gSG93ZXZlciwKK2lmIHRoZSBwYXR0ZXJuIGlzIHdyaXR0ZW4gYXMKKzxwcmU+CisgIF4uKisoPyYjNjA7PWFiY2QpCis8L3ByZT4KK3RoZXJlIGNhbiBiZSBubyBiYWNrdHJhY2tpbmcgZm9yIHRoZSAuKisgaXRlbSBiZWNhdXNlIG9mIHRoZSBwb3NzZXNzaXZlCitxdWFudGlmaWVyOyBpdCBjYW4gbWF0Y2ggb25seSB0aGUgZW50aXJlIHN0cmluZy4gVGhlIHN1YnNlcXVlbnQgbG9va2JlaGluZAorYXNzZXJ0aW9uIGRvZXMgYSBzaW5nbGUgdGVzdCBvbiB0aGUgbGFzdCBmb3VyIGNoYXJhY3RlcnMuIElmIGl0IGZhaWxzLCB0aGUKK21hdGNoIGZhaWxzIGltbWVkaWF0ZWx5LiBGb3IgbG9uZyBzdHJpbmdzLCB0aGlzIGFwcHJvYWNoIG1ha2VzIGEgc2lnbmlmaWNhbnQKK2RpZmZlcmVuY2UgdG8gdGhlIHByb2Nlc3NpbmcgdGltZS4KKzwvUD4KKzxicj48Yj4KK1VzaW5nIG11bHRpcGxlIGFzc2VydGlvbnMKKzwvYj48YnI+Cis8UD4KK1NldmVyYWwgYXNzZXJ0aW9ucyAob2YgYW55IHNvcnQpIG1heSBvY2N1ciBpbiBzdWNjZXNzaW9uLiBGb3IgZXhhbXBsZSwKKzxwcmU+CisgICg/JiM2MDs9XGR7M30pKD8mIzYwOyE5OTkpZm9vCis8L3ByZT4KK21hdGNoZXMgImZvbyIgcHJlY2VkZWQgYnkgdGhyZWUgZGlnaXRzIHRoYXQgYXJlIG5vdCAiOTk5Ii4gTm90aWNlIHRoYXQgZWFjaCBvZgordGhlIGFzc2VydGlvbnMgaXMgYXBwbGllZCBpbmRlcGVuZGVudGx5IGF0IHRoZSBzYW1lIHBvaW50IGluIHRoZSBzdWJqZWN0CitzdHJpbmcuIEZpcnN0IHRoZXJlIGlzIGEgY2hlY2sgdGhhdCB0aGUgcHJldmlvdXMgdGhyZWUgY2hhcmFjdGVycyBhcmUgYWxsCitkaWdpdHMsIGFuZCB0aGVuIHRoZXJlIGlzIGEgY2hlY2sgdGhhdCB0aGUgc2FtZSB0aHJlZSBjaGFyYWN0ZXJzIGFyZSBub3QgIjk5OSIuCitUaGlzIHBhdHRlcm4gZG9lcyA8aT5ub3Q8L2k+IG1hdGNoICJmb28iIHByZWNlZGVkIGJ5IHNpeCBjaGFyYWN0ZXJzLCB0aGUgZmlyc3QKK29mIHdoaWNoIGFyZSBkaWdpdHMgYW5kIHRoZSBsYXN0IHRocmVlIG9mIHdoaWNoIGFyZSBub3QgIjk5OSIuIEZvciBleGFtcGxlLCBpdAorZG9lc24ndCBtYXRjaCAiMTIzYWJjZm9vIi4gQSBwYXR0ZXJuIHRvIGRvIHRoYXQgaXMKKzxwcmU+CisgICg/JiM2MDs9XGR7M30uLi4pKD8mIzYwOyE5OTkpZm9vCis8L3ByZT4KK1RoaXMgdGltZSB0aGUgZmlyc3QgYXNzZXJ0aW9uIGxvb2tzIGF0IHRoZSBwcmVjZWRpbmcgc2l4IGNoYXJhY3RlcnMsIGNoZWNraW5nCit0aGF0IHRoZSBmaXJzdCB0aHJlZSBhcmUgZGlnaXRzLCBhbmQgdGhlbiB0aGUgc2Vjb25kIGFzc2VydGlvbiBjaGVja3MgdGhhdCB0aGUKK3ByZWNlZGluZyB0aHJlZSBjaGFyYWN0ZXJzIGFyZSBub3QgIjk5OSIuCis8L1A+Cis8UD4KK0Fzc2VydGlvbnMgY2FuIGJlIG5lc3RlZCBpbiBhbnkgY29tYmluYXRpb24uIEZvciBleGFtcGxlLAorPHByZT4KKyAgKD8mIzYwOz0oPyYjNjA7IWZvbyliYXIpYmF6Cis8L3ByZT4KK21hdGNoZXMgYW4gb2NjdXJyZW5jZSBvZiAiYmF6IiB0aGF0IGlzIHByZWNlZGVkIGJ5ICJiYXIiIHdoaWNoIGluIHR1cm4gaXMgbm90CitwcmVjZWRlZCBieSAiZm9vIiwgd2hpbGUKKzxwcmU+CisgICg/JiM2MDs9XGR7M30oPyE5OTkpLi4uKWZvbworPC9wcmU+CitpcyBhbm90aGVyIHBhdHRlcm4gdGhhdCBtYXRjaGVzICJmb28iIHByZWNlZGVkIGJ5IHRocmVlIGRpZ2l0cyBhbmQgYW55IHRocmVlCitjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCAiOTk5Ii4KKzxhIG5hbWU9ImNvbmRpdGlvbnMiPjwvYT48L1A+Cis8YnI+PGEgbmFtZT0iU0VDMjEiIGhyZWY9IiNUT0MxIj5DT05ESVRJT05BTCBTVUJQQVRURVJOUzwvYT48YnI+Cis8UD4KK0l0IGlzIHBvc3NpYmxlIHRvIGNhdXNlIHRoZSBtYXRjaGluZyBwcm9jZXNzIHRvIG9iZXkgYSBzdWJwYXR0ZXJuCitjb25kaXRpb25hbGx5IG9yIHRvIGNob29zZSBiZXR3ZWVuIHR3byBhbHRlcm5hdGl2ZSBzdWJwYXR0ZXJucywgZGVwZW5kaW5nIG9uCit0aGUgcmVzdWx0IG9mIGFuIGFzc2VydGlvbiwgb3Igd2hldGhlciBhIHNwZWNpZmljIGNhcHR1cmluZyBzdWJwYXR0ZXJuIGhhcworYWxyZWFkeSBiZWVuIG1hdGNoZWQuIFRoZSB0d28gcG9zc2libGUgZm9ybXMgb2YgY29uZGl0aW9uYWwgc3VicGF0dGVybiBhcmU6Cis8cHJlPgorICAoPyhjb25kaXRpb24peWVzLXBhdHRlcm4pCisgICg/KGNvbmRpdGlvbil5ZXMtcGF0dGVybnxuby1wYXR0ZXJuKQorPC9wcmU+CitJZiB0aGUgY29uZGl0aW9uIGlzIHNhdGlzZmllZCwgdGhlIHllcy1wYXR0ZXJuIGlzIHVzZWQ7IG90aGVyd2lzZSB0aGUKK25vLXBhdHRlcm4gKGlmIHByZXNlbnQpIGlzIHVzZWQuIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gdHdvIGFsdGVybmF0aXZlcyBpbiB0aGUKK3N1YnBhdHRlcm4sIGEgY29tcGlsZS10aW1lIGVycm9yIG9jY3Vycy4gRWFjaCBvZiB0aGUgdHdvIGFsdGVybmF0aXZlcyBtYXkKK2l0c2VsZiBjb250YWluIG5lc3RlZCBzdWJwYXR0ZXJucyBvZiBhbnkgZm9ybSwgaW5jbHVkaW5nIGNvbmRpdGlvbmFsCitzdWJwYXR0ZXJuczsgdGhlIHJlc3RyaWN0aW9uIHRvIHR3byBhbHRlcm5hdGl2ZXMgYXBwbGllcyBvbmx5IGF0IHRoZSBsZXZlbCBvZgordGhlIGNvbmRpdGlvbi4gVGhpcyBwYXR0ZXJuIGZyYWdtZW50IGlzIGFuIGV4YW1wbGUgd2hlcmUgdGhlIGFsdGVybmF0aXZlcyBhcmUKK2NvbXBsZXg6Cis8cHJlPgorICAoPygxKSAoQXxCfEMpIHwgKEQgfCAoPygyKUV8RikgfCBFKSApCisKKzwvUFJFPgorPC9QPgorPFA+CitUaGVyZSBhcmUgZml2ZSBraW5kcyBvZiBjb25kaXRpb246IHJlZmVyZW5jZXMgdG8gc3VicGF0dGVybnMsIHJlZmVyZW5jZXMgdG8KK3JlY3Vyc2lvbiwgdHdvIHBzZXVkby1jb25kaXRpb25zIGNhbGxlZCBERUZJTkUgYW5kIFZFUlNJT04sIGFuZCBhc3NlcnRpb25zLgorPC9QPgorPGJyPjxiPgorQ2hlY2tpbmcgZm9yIGEgdXNlZCBzdWJwYXR0ZXJuIGJ5IG51bWJlcgorPC9iPjxicj4KKzxQPgorSWYgdGhlIHRleHQgYmV0d2VlbiB0aGUgcGFyZW50aGVzZXMgY29uc2lzdHMgb2YgYSBzZXF1ZW5jZSBvZiBkaWdpdHMsIHRoZQorY29uZGl0aW9uIGlzIHRydWUgaWYgYSBjYXB0dXJpbmcgc3VicGF0dGVybiBvZiB0aGF0IG51bWJlciBoYXMgcHJldmlvdXNseQorbWF0Y2hlZC4gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjYXB0dXJpbmcgc3VicGF0dGVybiB3aXRoIHRoZSBzYW1lIG51bWJlcgorKHNlZSB0aGUgZWFybGllcgorPGEgaHJlZj0iI3JlY3Vyc2lvbiI+c2VjdGlvbiBhYm91dCBkdXBsaWNhdGUgc3VicGF0dGVybiBudW1iZXJzKSw8L2E+Cit0aGUgY29uZGl0aW9uIGlzIHRydWUgaWYgYW55IG9mIHRoZW0gaGF2ZSBtYXRjaGVkLiBBbiBhbHRlcm5hdGl2ZSBub3RhdGlvbiBpcwordG8gcHJlY2VkZSB0aGUgZGlnaXRzIHdpdGggYSBwbHVzIG9yIG1pbnVzIHNpZ24uIEluIHRoaXMgY2FzZSwgdGhlIHN1YnBhdHRlcm4KK251bWJlciBpcyByZWxhdGl2ZSByYXRoZXIgdGhhbiBhYnNvbHV0ZS4gVGhlIG1vc3QgcmVjZW50bHkgb3BlbmVkIHBhcmVudGhlc2VzCitjYW4gYmUgcmVmZXJlbmNlZCBieSAoPygtMSksIHRoZSBuZXh0IG1vc3QgcmVjZW50IGJ5ICg/KC0yKSwgYW5kIHNvIG9uLiBJbnNpZGUKK2xvb3BzIGl0IGNhbiBhbHNvIG1ha2Ugc2Vuc2UgdG8gcmVmZXIgdG8gc3Vic2VxdWVudCBncm91cHMuIFRoZSBuZXh0CitwYXJlbnRoZXNlcyB0byBiZSBvcGVuZWQgY2FuIGJlIHJlZmVyZW5jZWQgYXMgKD8oKzEpLCBhbmQgc28gb24uIChUaGUgdmFsdWUKK3plcm8gaW4gYW55IG9mIHRoZXNlIGZvcm1zIGlzIG5vdCB1c2VkOyBpdCBwcm92b2tlcyBhIGNvbXBpbGUtdGltZSBlcnJvci4pCis8L1A+Cis8UD4KK0NvbnNpZGVyIHRoZSBmb2xsb3dpbmcgcGF0dGVybiwgd2hpY2ggY29udGFpbnMgbm9uLXNpZ25pZmljYW50IHdoaXRlIHNwYWNlIHRvCittYWtlIGl0IG1vcmUgcmVhZGFibGUgKGFzc3VtZSB0aGUgUENSRTJfRVhURU5ERUQgb3B0aW9uKSBhbmQgdG8gZGl2aWRlIGl0IGludG8KK3RocmVlIHBhcnRzIGZvciBlYXNlIG9mIGRpc2N1c3Npb246Cis8cHJlPgorICAoIFwoICk/ICAgIFteKCldKyAgICAoPygxKSBcKSApCis8L3ByZT4KK1RoZSBmaXJzdCBwYXJ0IG1hdGNoZXMgYW4gb3B0aW9uYWwgb3BlbmluZyBwYXJlbnRoZXNpcywgYW5kIGlmIHRoYXQKK2NoYXJhY3RlciBpcyBwcmVzZW50LCBzZXRzIGl0IGFzIHRoZSBmaXJzdCBjYXB0dXJlZCBzdWJzdHJpbmcuIFRoZSBzZWNvbmQgcGFydAorbWF0Y2hlcyBvbmUgb3IgbW9yZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBwYXJlbnRoZXNlcy4gVGhlIHRoaXJkIHBhcnQgaXMgYQorY29uZGl0aW9uYWwgc3VicGF0dGVybiB0aGF0IHRlc3RzIHdoZXRoZXIgb3Igbm90IHRoZSBmaXJzdCBzZXQgb2YgcGFyZW50aGVzZXMKK21hdGNoZWQuIElmIHRoZXkgZGlkLCB0aGF0IGlzLCBpZiBzdWJqZWN0IHN0YXJ0ZWQgd2l0aCBhbiBvcGVuaW5nIHBhcmVudGhlc2lzLAordGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBhbmQgc28gdGhlIHllcy1wYXR0ZXJuIGlzIGV4ZWN1dGVkIGFuZCBhIGNsb3NpbmcKK3BhcmVudGhlc2lzIGlzIHJlcXVpcmVkLiBPdGhlcndpc2UsIHNpbmNlIG5vLXBhdHRlcm4gaXMgbm90IHByZXNlbnQsIHRoZQorc3VicGF0dGVybiBtYXRjaGVzIG5vdGhpbmcuIEluIG90aGVyIHdvcmRzLCB0aGlzIHBhdHRlcm4gbWF0Y2hlcyBhIHNlcXVlbmNlIG9mCitub24tcGFyZW50aGVzZXMsIG9wdGlvbmFsbHkgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMuCis8L1A+Cis8UD4KK0lmIHlvdSB3ZXJlIGVtYmVkZGluZyB0aGlzIHBhdHRlcm4gaW4gYSBsYXJnZXIgb25lLCB5b3UgY291bGQgdXNlIGEgcmVsYXRpdmUKK3JlZmVyZW5jZToKKzxwcmU+CisgIC4uLm90aGVyIHN0dWZmLi4uICggXCggKT8gICAgW14oKV0rICAgICg/KC0xKSBcKSApIC4uLgorPC9wcmU+CitUaGlzIG1ha2VzIHRoZSBmcmFnbWVudCBpbmRlcGVuZGVudCBvZiB0aGUgcGFyZW50aGVzZXMgaW4gdGhlIGxhcmdlciBwYXR0ZXJuLgorPC9QPgorPGJyPjxiPgorQ2hlY2tpbmcgZm9yIGEgdXNlZCBzdWJwYXR0ZXJuIGJ5IG5hbWUKKzwvYj48YnI+Cis8UD4KK1BlcmwgdXNlcyB0aGUgc3ludGF4ICg/KCYjNjA7bmFtZSYjNjI7KS4uLikgb3IgKD8oJ25hbWUnKS4uLikgdG8gdGVzdCBmb3IgYSB1c2VkCitzdWJwYXR0ZXJuIGJ5IG5hbWUuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBQQ1JFMSwgd2hpY2ggaGFkCit0aGlzIGZhY2lsaXR5IGJlZm9yZSBQZXJsLCB0aGUgc3ludGF4ICg/KG5hbWUpLi4uKSBpcyBhbHNvIHJlY29nbml6ZWQuCis8L1A+Cis8UD4KK1Jld3JpdGluZyB0aGUgYWJvdmUgZXhhbXBsZSB0byB1c2UgYSBuYW1lZCBzdWJwYXR0ZXJuIGdpdmVzIHRoaXM6Cis8cHJlPgorICAoPyYjNjA7T1BFTiYjNjI7IFwoICk/ICAgIFteKCldKyAgICAoPygmIzYwO09QRU4mIzYyOykgXCkgKQorPC9wcmU+CitJZiB0aGUgbmFtZSB1c2VkIGluIGEgY29uZGl0aW9uIG9mIHRoaXMga2luZCBpcyBhIGR1cGxpY2F0ZSwgdGhlIHRlc3QgaXMKK2FwcGxpZWQgdG8gYWxsIHN1YnBhdHRlcm5zIG9mIHRoZSBzYW1lIG5hbWUsIGFuZCBpcyB0cnVlIGlmIGFueSBvbmUgb2YgdGhlbSBoYXMKK21hdGNoZWQuCis8L1A+Cis8YnI+PGI+CitDaGVja2luZyBmb3IgcGF0dGVybiByZWN1cnNpb24KKzwvYj48YnI+Cis8UD4KK0lmIHRoZSBjb25kaXRpb24gaXMgdGhlIHN0cmluZyAoUiksIGFuZCB0aGVyZSBpcyBubyBzdWJwYXR0ZXJuIHdpdGggdGhlIG5hbWUgUiwKK3RoZSBjb25kaXRpb24gaXMgdHJ1ZSBpZiBhIHJlY3Vyc2l2ZSBjYWxsIHRvIHRoZSB3aG9sZSBwYXR0ZXJuIG9yIGFueQorc3VicGF0dGVybiBoYXMgYmVlbiBtYWRlLiBJZiBkaWdpdHMgb3IgYSBuYW1lIHByZWNlZGVkIGJ5IGFtcGVyc2FuZCBmb2xsb3cgdGhlCitsZXR0ZXIgUiwgZm9yIGV4YW1wbGU6Cis8cHJlPgorICAoPyhSMykuLi4pIG9yICg/KFImbmFtZSkuLi4pCis8L3ByZT4KK3RoZSBjb25kaXRpb24gaXMgdHJ1ZSBpZiB0aGUgbW9zdCByZWNlbnQgcmVjdXJzaW9uIGlzIGludG8gYSBzdWJwYXR0ZXJuIHdob3NlCitudW1iZXIgb3IgbmFtZSBpcyBnaXZlbi4gVGhpcyBjb25kaXRpb24gZG9lcyBub3QgY2hlY2sgdGhlIGVudGlyZSByZWN1cnNpb24KK3N0YWNrLiBJZiB0aGUgbmFtZSB1c2VkIGluIGEgY29uZGl0aW9uIG9mIHRoaXMga2luZCBpcyBhIGR1cGxpY2F0ZSwgdGhlIHRlc3QgaXMKK2FwcGxpZWQgdG8gYWxsIHN1YnBhdHRlcm5zIG9mIHRoZSBzYW1lIG5hbWUsIGFuZCBpcyB0cnVlIGlmIGFueSBvbmUgb2YgdGhlbSBpcwordGhlIG1vc3QgcmVjZW50IHJlY3Vyc2lvbi4KKzwvUD4KKzxQPgorQXQgInRvcCBsZXZlbCIsIGFsbCB0aGVzZSByZWN1cnNpb24gdGVzdCBjb25kaXRpb25zIGFyZSBmYWxzZS4KKzxhIGhyZWY9IiNyZWN1cnNpb24iPlRoZSBzeW50YXggZm9yIHJlY3Vyc2l2ZSBwYXR0ZXJuczwvYT4KK2lzIGRlc2NyaWJlZCBiZWxvdy4KKzxhIG5hbWU9InN1YmRlZmluZSI+PC9hPjwvUD4KKzxicj48Yj4KK0RlZmluaW5nIHN1YnBhdHRlcm5zIGZvciB1c2UgYnkgcmVmZXJlbmNlIG9ubHkKKzwvYj48YnI+Cis8UD4KK0lmIHRoZSBjb25kaXRpb24gaXMgdGhlIHN0cmluZyAoREVGSU5FKSwgYW5kIHRoZXJlIGlzIG5vIHN1YnBhdHRlcm4gd2l0aCB0aGUKK25hbWUgREVGSU5FLCB0aGUgY29uZGl0aW9uIGlzIGFsd2F5cyBmYWxzZS4gSW4gdGhpcyBjYXNlLCB0aGVyZSBtYXkgYmUgb25seSBvbmUKK2FsdGVybmF0aXZlIGluIHRoZSBzdWJwYXR0ZXJuLiBJdCBpcyBhbHdheXMgc2tpcHBlZCBpZiBjb250cm9sIHJlYWNoZXMgdGhpcworcG9pbnQgaW4gdGhlIHBhdHRlcm47IHRoZSBpZGVhIG9mIERFRklORSBpcyB0aGF0IGl0IGNhbiBiZSB1c2VkIHRvIGRlZmluZQorc3Vicm91dGluZXMgdGhhdCBjYW4gYmUgcmVmZXJlbmNlZCBmcm9tIGVsc2V3aGVyZS4gKFRoZSB1c2Ugb2YKKzxhIGhyZWY9IiNzdWJwYXR0ZXJuc2Fzc3Vicm91dGluZXMiPnN1YnJvdXRpbmVzPC9hPgoraXMgZGVzY3JpYmVkIGJlbG93LikgRm9yIGV4YW1wbGUsIGEgcGF0dGVybiB0byBtYXRjaCBhbiBJUHY0IGFkZHJlc3Mgc3VjaCBhcworIjE5Mi4xNjguMjMuMjQ1IiBjb3VsZCBiZSB3cml0dGVuIGxpa2UgdGhpcyAoaWdub3JlIHdoaXRlIHNwYWNlIGFuZCBsaW5lCiticmVha3MpOgorPHByZT4KKyAgKD8oREVGSU5FKSAoPyYjNjA7Ynl0ZSYjNjI7IDJbMC00XVxkIHwgMjVbMC01XSB8IDFcZFxkIHwgWzEtOV0/XGQpICkKKyAgXGIgKD8mYnl0ZSkgKFwuKD8mYnl0ZSkpezN9IFxiCis8L3ByZT4KK1RoZSBmaXJzdCBwYXJ0IG9mIHRoZSBwYXR0ZXJuIGlzIGEgREVGSU5FIGdyb3VwIGluc2lkZSB3aGljaCBhIGFub3RoZXIgZ3JvdXAKK25hbWVkICJieXRlIiBpcyBkZWZpbmVkLiBUaGlzIG1hdGNoZXMgYW4gaW5kaXZpZHVhbCBjb21wb25lbnQgb2YgYW4gSVB2NAorYWRkcmVzcyAoYSBudW1iZXIgbGVzcyB0aGFuIDI1NikuIFdoZW4gbWF0Y2hpbmcgdGFrZXMgcGxhY2UsIHRoaXMgcGFydCBvZiB0aGUKK3BhdHRlcm4gaXMgc2tpcHBlZCBiZWNhdXNlIERFRklORSBhY3RzIGxpa2UgYSBmYWxzZSBjb25kaXRpb24uIFRoZSByZXN0IG9mIHRoZQorcGF0dGVybiB1c2VzIHJlZmVyZW5jZXMgdG8gdGhlIG5hbWVkIGdyb3VwIHRvIG1hdGNoIHRoZSBmb3VyIGRvdC1zZXBhcmF0ZWQKK2NvbXBvbmVudHMgb2YgYW4gSVB2NCBhZGRyZXNzLCBpbnNpc3Rpbmcgb24gYSB3b3JkIGJvdW5kYXJ5IGF0IGVhY2ggZW5kLgorPC9QPgorPGJyPjxiPgorQ2hlY2tpbmcgdGhlIFBDUkUyIHZlcnNpb24KKzwvYj48YnI+Cis8UD4KK1Byb2dyYW1zIHRoYXQgbGluayB3aXRoIGEgUENSRTIgbGlicmFyeSBjYW4gY2hlY2sgdGhlIHZlcnNpb24gYnkgY2FsbGluZworPGI+cGNyZTJfY29uZmlnKCk8L2I+IHdpdGggYXBwcm9wcmlhdGUgYXJndW1lbnRzLiBVc2VycyBvZiBhcHBsaWNhdGlvbnMgdGhhdCBkbworbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIGNvZGUgY2Fubm90IGRvIHRoaXMuIEEgc3BlY2lhbCAiY29uZGl0aW9uIgorY2FsbGVkIFZFUlNJT04gZXhpc3RzIHRvIGFsbG93IHN1Y2ggdXNlcnMgdG8gZGlzY292ZXIgd2hpY2ggdmVyc2lvbiBvZiBQQ1JFMgordGhleSBhcmUgZGVhbGluZyB3aXRoIGJ5IHVzaW5nIHRoaXMgY29uZGl0aW9uIHRvIG1hdGNoIGEgc3RyaW5nIHN1Y2ggYXMKKyJ5ZXNubyIuIFZFUlNJT04gbXVzdCBiZSBmb2xsb3dlZCBlaXRoZXIgYnkgIj0iIG9yICImIzYyOz0iIGFuZCBhIHZlcnNpb24gbnVtYmVyLgorRm9yIGV4YW1wbGU6Cis8cHJlPgorICAoPyhWRVJTSU9OJiM2Mjs9MTAuNCl5ZXN8bm8pCis8L3ByZT4KK1RoaXMgcGF0dGVybiBtYXRjaGVzICJ5ZXMiIGlmIHRoZSBQQ1JFMiB2ZXJzaW9uIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMTAuNCwgb3IKKyJubyIgb3RoZXJ3aXNlLiBUaGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSB2ZXJzaW9uIG51bWJlciBtYXkgbm90IGNvbnRhaW4gbW9yZQordGhhbiB0d28gZGlnaXRzLgorPC9QPgorPGJyPjxiPgorQXNzZXJ0aW9uIGNvbmRpdGlvbnMKKzwvYj48YnI+Cis8UD4KK0lmIHRoZSBjb25kaXRpb24gaXMgbm90IGluIGFueSBvZiB0aGUgYWJvdmUgZm9ybWF0cywgaXQgbXVzdCBiZSBhbiBhc3NlcnRpb24uCitUaGlzIG1heSBiZSBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGxvb2thaGVhZCBvciBsb29rYmVoaW5kIGFzc2VydGlvbi4gQ29uc2lkZXIKK3RoaXMgcGF0dGVybiwgYWdhaW4gY29udGFpbmluZyBub24tc2lnbmlmaWNhbnQgd2hpdGUgc3BhY2UsIGFuZCB3aXRoIHRoZSB0d28KK2FsdGVybmF0aXZlcyBvbiB0aGUgc2Vjb25kIGxpbmU6Cis8cHJlPgorICAoPyg/PVteYS16XSpbYS16XSkKKyAgXGR7Mn0tW2Etel17M30tXGR7Mn0gIHwgIFxkezJ9LVxkezJ9LVxkezJ9ICkKKzwvcHJlPgorVGhlIGNvbmRpdGlvbiBpcyBhIHBvc2l0aXZlIGxvb2thaGVhZCBhc3NlcnRpb24gdGhhdCBtYXRjaGVzIGFuIG9wdGlvbmFsCitzZXF1ZW5jZSBvZiBub24tbGV0dGVycyBmb2xsb3dlZCBieSBhIGxldHRlci4gSW4gb3RoZXIgd29yZHMsIGl0IHRlc3RzIGZvciB0aGUKK3ByZXNlbmNlIG9mIGF0IGxlYXN0IG9uZSBsZXR0ZXIgaW4gdGhlIHN1YmplY3QuIElmIGEgbGV0dGVyIGlzIGZvdW5kLCB0aGUKK3N1YmplY3QgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBmaXJzdCBhbHRlcm5hdGl2ZTsgb3RoZXJ3aXNlIGl0IGlzIG1hdGNoZWQKK2FnYWluc3QgdGhlIHNlY29uZC4gVGhpcyBwYXR0ZXJuIG1hdGNoZXMgc3RyaW5ncyBpbiBvbmUgb2YgdGhlIHR3byBmb3JtcworZGQtYWFhLWRkIG9yIGRkLWRkLWRkLCB3aGVyZSBhYWEgYXJlIGxldHRlcnMgYW5kIGRkIGFyZSBkaWdpdHMuCis8YSBuYW1lPSJjb21tZW50cyI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMyMiIgaHJlZj0iI1RPQzEiPkNPTU1FTlRTPC9hPjxicj4KKzxQPgorVGhlcmUgYXJlIHR3byB3YXlzIG9mIGluY2x1ZGluZyBjb21tZW50cyBpbiBwYXR0ZXJucyB0aGF0IGFyZSBwcm9jZXNzZWQgYnkKK1BDUkUyLiBJbiBib3RoIGNhc2VzLCB0aGUgc3RhcnQgb2YgdGhlIGNvbW1lbnQgbXVzdCBub3QgYmUgaW4gYSBjaGFyYWN0ZXIKK2NsYXNzLCBub3IgaW4gdGhlIG1pZGRsZSBvZiBhbnkgb3RoZXIgc2VxdWVuY2Ugb2YgcmVsYXRlZCBjaGFyYWN0ZXJzIHN1Y2ggYXMKKyg/OiBvciBhIHN1YnBhdHRlcm4gbmFtZSBvciBudW1iZXIuIFRoZSBjaGFyYWN0ZXJzIHRoYXQgbWFrZSB1cCBhIGNvbW1lbnQgcGxheQorbm8gcGFydCBpbiB0aGUgcGF0dGVybiBtYXRjaGluZy4KKzwvUD4KKzxQPgorVGhlIHNlcXVlbmNlICg/IyBtYXJrcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50IHRoYXQgY29udGludWVzIHVwIHRvIHRoZSBuZXh0CitjbG9zaW5nIHBhcmVudGhlc2lzLiBOZXN0ZWQgcGFyZW50aGVzZXMgYXJlIG5vdCBwZXJtaXR0ZWQuIElmIHRoZQorUENSRTJfRVhURU5ERUQgb3B0aW9uIGlzIHNldCwgYW4gdW5lc2NhcGVkICMgY2hhcmFjdGVyIGFsc28gaW50cm9kdWNlcyBhCitjb21tZW50LCB3aGljaCBpbiB0aGlzIGNhc2UgY29udGludWVzIHRvIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBuZXh0IG5ld2xpbmUKK2NoYXJhY3RlciBvciBjaGFyYWN0ZXIgc2VxdWVuY2UgaW4gdGhlIHBhdHRlcm4uIFdoaWNoIGNoYXJhY3RlcnMgYXJlCitpbnRlcnByZXRlZCBhcyBuZXdsaW5lcyBpcyBjb250cm9sbGVkIGJ5IGFuIG9wdGlvbiBwYXNzZWQgdG8gdGhlIGNvbXBpbGluZworZnVuY3Rpb24gb3IgYnkgYSBzcGVjaWFsIHNlcXVlbmNlIGF0IHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiwgYXMgZGVzY3JpYmVkIGluCit0aGUgc2VjdGlvbiBlbnRpdGxlZAorPGEgaHJlZj0iI25ld2xpbmVzIj4iTmV3bGluZSBjb252ZW50aW9ucyI8L2E+CithYm92ZS4gTm90ZSB0aGF0IHRoZSBlbmQgb2YgdGhpcyB0eXBlIG9mIGNvbW1lbnQgaXMgYSBsaXRlcmFsIG5ld2xpbmUgc2VxdWVuY2UKK2luIHRoZSBwYXR0ZXJuOyBlc2NhcGUgc2VxdWVuY2VzIHRoYXQgaGFwcGVuIHRvIHJlcHJlc2VudCBhIG5ld2xpbmUgZG8gbm90Citjb3VudC4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoaXMgcGF0dGVybiB3aGVuIFBDUkUyX0VYVEVOREVEIGlzIHNldCwgYW5kIHRoZQorZGVmYXVsdCBuZXdsaW5lIGNvbnZlbnRpb24gKGEgc2luZ2xlIGxpbmVmZWVkIGNoYXJhY3RlcikgaXMgaW4gZm9yY2U6Cis8cHJlPgorICBhYmMgI2NvbW1lbnQgXG4gc3RpbGwgY29tbWVudAorPC9wcmU+CitPbiBlbmNvdW50ZXJpbmcgdGhlICMgY2hhcmFjdGVyLCA8Yj5wY3JlMl9jb21waWxlKCk8L2I+IHNraXBzIGFsb25nLCBsb29raW5nIGZvcgorYSBuZXdsaW5lIGluIHRoZSBwYXR0ZXJuLiBUaGUgc2VxdWVuY2UgXG4gaXMgc3RpbGwgbGl0ZXJhbCBhdCB0aGlzIHN0YWdlLCBzbworaXQgZG9lcyBub3QgdGVybWluYXRlIHRoZSBjb21tZW50LiBPbmx5IGFuIGFjdHVhbCBjaGFyYWN0ZXIgd2l0aCB0aGUgY29kZSB2YWx1ZQorMHgwYSAodGhlIGRlZmF1bHQgbmV3bGluZSkgZG9lcyBzby4KKzxhIG5hbWU9InJlY3Vyc2lvbiI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMyMyIgaHJlZj0iI1RPQzEiPlJFQ1VSU0lWRSBQQVRURVJOUzwvYT48YnI+Cis8UD4KK0NvbnNpZGVyIHRoZSBwcm9ibGVtIG9mIG1hdGNoaW5nIGEgc3RyaW5nIGluIHBhcmVudGhlc2VzLCBhbGxvd2luZyBmb3IKK3VubGltaXRlZCBuZXN0ZWQgcGFyZW50aGVzZXMuIFdpdGhvdXQgdGhlIHVzZSBvZiByZWN1cnNpb24sIHRoZSBiZXN0IHRoYXQgY2FuCitiZSBkb25lIGlzIHRvIHVzZSBhIHBhdHRlcm4gdGhhdCBtYXRjaGVzIHVwIHRvIHNvbWUgZml4ZWQgZGVwdGggb2YgbmVzdGluZy4gSXQKK2lzIG5vdCBwb3NzaWJsZSB0byBoYW5kbGUgYW4gYXJiaXRyYXJ5IG5lc3RpbmcgZGVwdGguCis8L1A+Cis8UD4KK0ZvciBzb21lIHRpbWUsIFBlcmwgaGFzIHByb3ZpZGVkIGEgZmFjaWxpdHkgdGhhdCBhbGxvd3MgcmVndWxhciBleHByZXNzaW9ucyB0bworcmVjdXJzZSAoYW1vbmdzdCBvdGhlciB0aGluZ3MpLiBJdCBkb2VzIHRoaXMgYnkgaW50ZXJwb2xhdGluZyBQZXJsIGNvZGUgaW4gdGhlCitleHByZXNzaW9uIGF0IHJ1biB0aW1lLCBhbmQgdGhlIGNvZGUgY2FuIHJlZmVyIHRvIHRoZSBleHByZXNzaW9uIGl0c2VsZi4gQSBQZXJsCitwYXR0ZXJuIHVzaW5nIGNvZGUgaW50ZXJwb2xhdGlvbiB0byBzb2x2ZSB0aGUgcGFyZW50aGVzZXMgcHJvYmxlbSBjYW4gYmUKK2NyZWF0ZWQgbGlrZSB0aGlzOgorPHByZT4KKyAgJHJlID0gcXJ7XCggKD86ICg/JiM2MjtbXigpXSspIHwgKD9weyRyZX0pICkqIFwpfXg7Cis8L3ByZT4KK1RoZSAoP3B7Li4ufSkgaXRlbSBpbnRlcnBvbGF0ZXMgUGVybCBjb2RlIGF0IHJ1biB0aW1lLCBhbmQgaW4gdGhpcyBjYXNlIHJlZmVycworcmVjdXJzaXZlbHkgdG8gdGhlIHBhdHRlcm4gaW4gd2hpY2ggaXQgYXBwZWFycy4KKzwvUD4KKzxQPgorT2J2aW91c2x5LCBQQ1JFMiBjYW5ub3Qgc3VwcG9ydCB0aGUgaW50ZXJwb2xhdGlvbiBvZiBQZXJsIGNvZGUuIEluc3RlYWQsIGl0CitzdXBwb3J0cyBzcGVjaWFsIHN5bnRheCBmb3IgcmVjdXJzaW9uIG9mIHRoZSBlbnRpcmUgcGF0dGVybiwgYW5kIGFsc28gZm9yCitpbmRpdmlkdWFsIHN1YnBhdHRlcm4gcmVjdXJzaW9uLiBBZnRlciBpdHMgaW50cm9kdWN0aW9uIGluIFBDUkUxIGFuZCBQeXRob24sCit0aGlzIGtpbmQgb2YgcmVjdXJzaW9uIHdhcyBzdWJzZXF1ZW50bHkgaW50cm9kdWNlZCBpbnRvIFBlcmwgYXQgcmVsZWFzZSA1LjEwLgorPC9QPgorPFA+CitBIHNwZWNpYWwgaXRlbSB0aGF0IGNvbnNpc3RzIG9mICg/IGZvbGxvd2VkIGJ5IGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBhCitjbG9zaW5nIHBhcmVudGhlc2lzIGlzIGEgcmVjdXJzaXZlIHN1YnJvdXRpbmUgY2FsbCBvZiB0aGUgc3VicGF0dGVybiBvZiB0aGUKK2dpdmVuIG51bWJlciwgcHJvdmlkZWQgdGhhdCBpdCBvY2N1cnMgaW5zaWRlIHRoYXQgc3VicGF0dGVybi4gKElmIG5vdCwgaXQgaXMgYQorPGEgaHJlZj0iI3N1YnBhdHRlcm5zYXNzdWJyb3V0aW5lcyI+bm9uLXJlY3Vyc2l2ZSBzdWJyb3V0aW5lPC9hPgorY2FsbCwgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uKSBUaGUgc3BlY2lhbCBpdGVtICg/Uikgb3IgKD8wKSBpcworYSByZWN1cnNpdmUgY2FsbCBvZiB0aGUgZW50aXJlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKzwvUD4KKzxQPgorVGhpcyBQQ1JFMiBwYXR0ZXJuIHNvbHZlcyB0aGUgbmVzdGVkIHBhcmVudGhlc2VzIHByb2JsZW0gKGFzc3VtZSB0aGUKK1BDUkUyX0VYVEVOREVEIG9wdGlvbiBpcyBzZXQgc28gdGhhdCB3aGl0ZSBzcGFjZSBpcyBpZ25vcmVkKToKKzxwcmU+CisgIFwoICggW14oKV0rKyB8ICg/UikgKSogXCkKKzwvcHJlPgorRmlyc3QgaXQgbWF0Y2hlcyBhbiBvcGVuaW5nIHBhcmVudGhlc2lzLiBUaGVuIGl0IG1hdGNoZXMgYW55IG51bWJlciBvZgorc3Vic3RyaW5ncyB3aGljaCBjYW4gZWl0aGVyIGJlIGEgc2VxdWVuY2Ugb2Ygbm9uLXBhcmVudGhlc2VzLCBvciBhIHJlY3Vyc2l2ZQorbWF0Y2ggb2YgdGhlIHBhdHRlcm4gaXRzZWxmICh0aGF0IGlzLCBhIGNvcnJlY3RseSBwYXJlbnRoZXNpemVkIHN1YnN0cmluZykuCitGaW5hbGx5IHRoZXJlIGlzIGEgY2xvc2luZyBwYXJlbnRoZXNpcy4gTm90ZSB0aGUgdXNlIG9mIGEgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyCit0byBhdm9pZCBiYWNrdHJhY2tpbmcgaW50byBzZXF1ZW5jZXMgb2Ygbm9uLXBhcmVudGhlc2VzLgorPC9QPgorPFA+CitJZiB0aGlzIHdlcmUgcGFydCBvZiBhIGxhcmdlciBwYXR0ZXJuLCB5b3Ugd291bGQgbm90IHdhbnQgdG8gcmVjdXJzZSB0aGUgZW50aXJlCitwYXR0ZXJuLCBzbyBpbnN0ZWFkIHlvdSBjb3VsZCB1c2UgdGhpczoKKzxwcmU+CisgICggXCggKCBbXigpXSsrIHwgKD8xKSApKiBcKSApCis8L3ByZT4KK1dlIGhhdmUgcHV0IHRoZSBwYXR0ZXJuIGludG8gcGFyZW50aGVzZXMsIGFuZCBjYXVzZWQgdGhlIHJlY3Vyc2lvbiB0byByZWZlciB0bwordGhlbSBpbnN0ZWFkIG9mIHRoZSB3aG9sZSBwYXR0ZXJuLgorPC9QPgorPFA+CitJbiBhIGxhcmdlciBwYXR0ZXJuLCBrZWVwaW5nIHRyYWNrIG9mIHBhcmVudGhlc2lzIG51bWJlcnMgY2FuIGJlIHRyaWNreS4gVGhpcworaXMgbWFkZSBlYXNpZXIgYnkgdGhlIHVzZSBvZiByZWxhdGl2ZSByZWZlcmVuY2VzLiBJbnN0ZWFkIG9mICg/MSkgaW4gdGhlCitwYXR0ZXJuIGFib3ZlIHlvdSBjYW4gd3JpdGUgKD8tMikgdG8gcmVmZXIgdG8gdGhlIHNlY29uZCBtb3N0IHJlY2VudGx5IG9wZW5lZAorcGFyZW50aGVzZXMgcHJlY2VkaW5nIHRoZSByZWN1cnNpb24uIEluIG90aGVyIHdvcmRzLCBhIG5lZ2F0aXZlIG51bWJlciBjb3VudHMKK2NhcHR1cmluZyBwYXJlbnRoZXNlcyBsZWZ0d2FyZHMgZnJvbSB0aGUgcG9pbnQgYXQgd2hpY2ggaXQgaXMgZW5jb3VudGVyZWQuCis8L1A+Cis8UD4KK0JlIGF3YXJlIGhvd2V2ZXIsIHRoYXQgaWYKKzxhIGhyZWY9IiNkdXBzdWJwYXR0ZXJubnVtYmVyIj5kdXBsaWNhdGUgc3VicGF0dGVybiBudW1iZXJzPC9hPgorYXJlIGluIHVzZSwgcmVsYXRpdmUgcmVmZXJlbmNlcyByZWZlciB0byB0aGUgZWFybGllc3Qgc3VicGF0dGVybiB3aXRoIHRoZQorYXBwcm9wcmlhdGUgbnVtYmVyLiBDb25zaWRlciwgZm9yIGV4YW1wbGU6Cis8cHJlPgorICAoP3woYSl8KGIpKSAoYykgKD8tMikKKzwvcHJlPgorVGhlIGZpcnN0IHR3byBjYXB0dXJpbmcgZ3JvdXBzIChhKSBhbmQgKGIpIGFyZSBib3RoIG51bWJlcmVkIDEsIGFuZCBncm91cCAoYykKK2lzIG51bWJlciAyLiBXaGVuIHRoZSByZWZlcmVuY2UgKD8tMikgaXMgZW5jb3VudGVyZWQsIHRoZSBzZWNvbmQgbW9zdCByZWNlbnRseQorb3BlbmVkIHBhcmVudGhlc2VzIGhhcyB0aGUgbnVtYmVyIDEsIGJ1dCBpdCBpcyB0aGUgZmlyc3Qgc3VjaCBncm91cCAodGhlIChhKQorZ3JvdXApIHRvIHdoaWNoIHRoZSByZWN1cnNpb24gcmVmZXJzLiBUaGlzIHdvdWxkIGJlIHRoZSBzYW1lIGlmIGFuIGFic29sdXRlCityZWZlcmVuY2UgKD8xKSB3YXMgdXNlZC4gSW4gb3RoZXIgd29yZHMsIHJlbGF0aXZlIHJlZmVyZW5jZXMgYXJlIGp1c3QgYQorc2hvcnRoYW5kIGZvciBjb21wdXRpbmcgYSBncm91cCBudW1iZXIuCis8L1A+Cis8UD4KK0l0IGlzIGFsc28gcG9zc2libGUgdG8gcmVmZXIgdG8gc3Vic2VxdWVudGx5IG9wZW5lZCBwYXJlbnRoZXNlcywgYnkgd3JpdGluZworcmVmZXJlbmNlcyBzdWNoIGFzICg/KzIpLiBIb3dldmVyLCB0aGVzZSBjYW5ub3QgYmUgcmVjdXJzaXZlIGJlY2F1c2UgdGhlCityZWZlcmVuY2UgaXMgbm90IGluc2lkZSB0aGUgcGFyZW50aGVzZXMgdGhhdCBhcmUgcmVmZXJlbmNlZC4gVGhleSBhcmUgYWx3YXlzCis8YSBocmVmPSIjc3VicGF0dGVybnNhc3N1YnJvdXRpbmVzIj5ub24tcmVjdXJzaXZlIHN1YnJvdXRpbmU8L2E+CitjYWxscywgYXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCis8L1A+Cis8UD4KK0FuIGFsdGVybmF0aXZlIGFwcHJvYWNoIGlzIHRvIHVzZSBuYW1lZCBwYXJlbnRoZXNlcy4gVGhlIFBlcmwgc3ludGF4IGZvciB0aGlzCitpcyAoPyZuYW1lKTsgUENSRTEncyBlYXJsaWVyIHN5bnRheCAoP1AmIzYyO25hbWUpIGlzIGFsc28gc3VwcG9ydGVkLiBXZSBjb3VsZAorcmV3cml0ZSB0aGUgYWJvdmUgZXhhbXBsZSBhcyBmb2xsb3dzOgorPHByZT4KKyAgKD8mIzYwO3BuJiM2MjsgXCggKCBbXigpXSsrIHwgKD8mcG4pICkqIFwpICkKKzwvcHJlPgorSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBzdWJwYXR0ZXJuIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlIGVhcmxpZXN0IG9uZSBpcwordXNlZC4KKzwvUD4KKzxQPgorVGhlIGV4YW1wbGUgcGF0dGVybiB0aGF0IHdlIGhhdmUgYmVlbiBsb29raW5nIGF0IGNvbnRhaW5zIG5lc3RlZCB1bmxpbWl0ZWQKK3JlcGVhdHMsIGFuZCBzbyB0aGUgdXNlIG9mIGEgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyIGZvciBtYXRjaGluZyBzdHJpbmdzIG9mCitub24tcGFyZW50aGVzZXMgaXMgaW1wb3J0YW50IHdoZW4gYXBwbHlpbmcgdGhlIHBhdHRlcm4gdG8gc3RyaW5ncyB0aGF0IGRvIG5vdAorbWF0Y2guIEZvciBleGFtcGxlLCB3aGVuIHRoaXMgcGF0dGVybiBpcyBhcHBsaWVkIHRvCis8cHJlPgorICAoYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEoKQorPC9wcmU+CitpdCB5aWVsZHMgIm5vIG1hdGNoIiBxdWlja2x5LiBIb3dldmVyLCBpZiBhIHBvc3Nlc3NpdmUgcXVhbnRpZmllciBpcyBub3QgdXNlZCwKK3RoZSBtYXRjaCBydW5zIGZvciBhIHZlcnkgbG9uZyB0aW1lIGluZGVlZCBiZWNhdXNlIHRoZXJlIGFyZSBzbyBtYW55IGRpZmZlcmVudAord2F5cyB0aGUgKyBhbmQgKiByZXBlYXRzIGNhbiBjYXJ2ZSB1cCB0aGUgc3ViamVjdCwgYW5kIGFsbCBoYXZlIHRvIGJlIHRlc3RlZAorYmVmb3JlIGZhaWx1cmUgY2FuIGJlIHJlcG9ydGVkLgorPC9QPgorPFA+CitBdCB0aGUgZW5kIG9mIGEgbWF0Y2gsIHRoZSB2YWx1ZXMgb2YgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGFyZSB0aG9zZSBmcm9tCit0aGUgb3V0ZXJtb3N0IGxldmVsLiBJZiB5b3Ugd2FudCB0byBvYnRhaW4gaW50ZXJtZWRpYXRlIHZhbHVlcywgYSBjYWxsb3V0CitmdW5jdGlvbiBjYW4gYmUgdXNlZCAoc2VlIGJlbG93IGFuZCB0aGUKKzxhIGhyZWY9InBjcmUyY2FsbG91dC5odG1sIj48Yj5wY3JlMmNhbGxvdXQ8L2I+PC9hPgorZG9jdW1lbnRhdGlvbikuIElmIHRoZSBwYXR0ZXJuIGFib3ZlIGlzIG1hdGNoZWQgYWdhaW5zdAorPHByZT4KKyAgKGFiKGNkKWVmKQorPC9wcmU+Cit0aGUgdmFsdWUgZm9yIHRoZSBpbm5lciBjYXB0dXJpbmcgcGFyZW50aGVzZXMgKG51bWJlcmVkIDIpIGlzICJlZiIsIHdoaWNoIGlzCit0aGUgbGFzdCB2YWx1ZSB0YWtlbiBvbiBhdCB0aGUgdG9wIGxldmVsLiBJZiBhIGNhcHR1cmluZyBzdWJwYXR0ZXJuIGlzIG5vdAorbWF0Y2hlZCBhdCB0aGUgdG9wIGxldmVsLCBpdHMgZmluYWwgY2FwdHVyZWQgdmFsdWUgaXMgdW5zZXQsIGV2ZW4gaWYgaXQgd2FzCisodGVtcG9yYXJpbHkpIHNldCBhdCBhIGRlZXBlciBsZXZlbCBkdXJpbmcgdGhlIG1hdGNoaW5nIHByb2Nlc3MuCis8L1A+Cis8UD4KK0lmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMTUgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGluIGEgcGF0dGVybiwgUENSRTIgaGFzIHRvCitvYnRhaW4gZXh0cmEgbWVtb3J5IGZyb20gdGhlIGhlYXAgdG8gc3RvcmUgZGF0YSBkdXJpbmcgYSByZWN1cnNpb24uIElmIG5vCittZW1vcnkgY2FuIGJlIG9idGFpbmVkLCB0aGUgbWF0Y2ggZmFpbHMgd2l0aCB0aGUgUENSRTJfRVJST1JfTk9NRU1PUlkgZXJyb3IuCis8L1A+Cis8UD4KK0RvIG5vdCBjb25mdXNlIHRoZSAoP1IpIGl0ZW0gd2l0aCB0aGUgY29uZGl0aW9uIChSKSwgd2hpY2ggdGVzdHMgZm9yIHJlY3Vyc2lvbi4KK0NvbnNpZGVyIHRoaXMgcGF0dGVybiwgd2hpY2ggbWF0Y2hlcyB0ZXh0IGluIGFuZ2xlIGJyYWNrZXRzLCBhbGxvd2luZyBmb3IKK2FyYml0cmFyeSBuZXN0aW5nLiBPbmx5IGRpZ2l0cyBhcmUgYWxsb3dlZCBpbiBuZXN0ZWQgYnJhY2tldHMgKHRoYXQgaXMsIHdoZW4KK3JlY3Vyc2luZyksIHdoZXJlYXMgYW55IGNoYXJhY3RlcnMgYXJlIHBlcm1pdHRlZCBhdCB0aGUgb3V0ZXIgbGV2ZWwuCis8cHJlPgorICAmIzYwOyAoPzogKD8oUikgXGQrKyAgfCBbXiYjNjA7JiM2MjtdKispIHwgKD9SKSkgKiAmIzYyOworPC9wcmU+CitJbiB0aGlzIHBhdHRlcm4sICg/KFIpIGlzIHRoZSBzdGFydCBvZiBhIGNvbmRpdGlvbmFsIHN1YnBhdHRlcm4sIHdpdGggdHdvCitkaWZmZXJlbnQgYWx0ZXJuYXRpdmVzIGZvciB0aGUgcmVjdXJzaXZlIGFuZCBub24tcmVjdXJzaXZlIGNhc2VzLiBUaGUgKD9SKSBpdGVtCitpcyB0aGUgYWN0dWFsIHJlY3Vyc2l2ZSBjYWxsLgorPGEgbmFtZT0icmVjdXJzaW9uZGlmZmVyZW5jZSI+PC9hPjwvUD4KKzxicj48Yj4KK0RpZmZlcmVuY2VzIGluIHJlY3Vyc2lvbiBwcm9jZXNzaW5nIGJldHdlZW4gUENSRTIgYW5kIFBlcmwKKzwvYj48YnI+Cis8UD4KK1JlY3Vyc2lvbiBwcm9jZXNzaW5nIGluIFBDUkUyIGRpZmZlcnMgZnJvbSBQZXJsIGluIHR3byBpbXBvcnRhbnQgd2F5cy4gSW4gUENSRTIKKyhsaWtlIFB5dGhvbiwgYnV0IHVubGlrZSBQZXJsKSwgYSByZWN1cnNpdmUgc3VicGF0dGVybiBjYWxsIGlzIGFsd2F5cyB0cmVhdGVkCithcyBhbiBhdG9taWMgZ3JvdXAuIFRoYXQgaXMsIG9uY2UgaXQgaGFzIG1hdGNoZWQgc29tZSBvZiB0aGUgc3ViamVjdCBzdHJpbmcsIGl0CitpcyBuZXZlciByZS1lbnRlcmVkLCBldmVuIGlmIGl0IGNvbnRhaW5zIHVudHJpZWQgYWx0ZXJuYXRpdmVzIGFuZCB0aGVyZSBpcyBhCitzdWJzZXF1ZW50IG1hdGNoaW5nIGZhaWx1cmUuIFRoaXMgY2FuIGJlIGlsbHVzdHJhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcGF0dGVybiwKK3doaWNoIHB1cnBvcnRzIHRvIG1hdGNoIGEgcGFsaW5kcm9taWMgc3RyaW5nIHRoYXQgY29udGFpbnMgYW4gb2RkIG51bWJlciBvZgorY2hhcmFjdGVycyAoZm9yIGV4YW1wbGUsICJhIiwgImFiYSIsICJhYmNiYSIsICJhYmNkY2JhIik6Cis8cHJlPgorICBeKC58KC4pKD8xKVwyKSQKKzwvcHJlPgorVGhlIGlkZWEgaXMgdGhhdCBpdCBlaXRoZXIgbWF0Y2hlcyBhIHNpbmdsZSBjaGFyYWN0ZXIsIG9yIHR3byBpZGVudGljYWwKK2NoYXJhY3RlcnMgc3Vycm91bmRpbmcgYSBzdWItcGFsaW5kcm9tZS4gSW4gUGVybCwgdGhpcyBwYXR0ZXJuIHdvcmtzOyBpbiBQQ1JFMgoraXQgZG9lcyBub3QgaWYgdGhlIHBhdHRlcm4gaXMgbG9uZ2VyIHRoYW4gdGhyZWUgY2hhcmFjdGVycy4gQ29uc2lkZXIgdGhlCitzdWJqZWN0IHN0cmluZyAiYWJjYmEiOgorPC9QPgorPFA+CitBdCB0aGUgdG9wIGxldmVsLCB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIG1hdGNoZWQsIGJ1dCBhcyBpdCBpcyBub3QgYXQgdGhlIGVuZAorb2YgdGhlIHN0cmluZywgdGhlIGZpcnN0IGFsdGVybmF0aXZlIGZhaWxzOyB0aGUgc2Vjb25kIGFsdGVybmF0aXZlIGlzIHRha2VuCithbmQgdGhlIHJlY3Vyc2lvbiBraWNrcyBpbi4gVGhlIHJlY3Vyc2l2ZSBjYWxsIHRvIHN1YnBhdHRlcm4gMSBzdWNjZXNzZnVsbHkKK21hdGNoZXMgdGhlIG5leHQgY2hhcmFjdGVyICgiYiIpLiAoTm90ZSB0aGF0IHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBsaW5lCit0ZXN0cyBhcmUgbm90IHBhcnQgb2YgdGhlIHJlY3Vyc2lvbikuCis8L1A+Cis8UD4KK0JhY2sgYXQgdGhlIHRvcCBsZXZlbCwgdGhlIG5leHQgY2hhcmFjdGVyICgiYyIpIGlzIGNvbXBhcmVkIHdpdGggd2hhdAorc3VicGF0dGVybiAyIG1hdGNoZWQsIHdoaWNoIHdhcyAiYSIuIFRoaXMgZmFpbHMuIEJlY2F1c2UgdGhlIHJlY3Vyc2lvbiBpcwordHJlYXRlZCBhcyBhbiBhdG9taWMgZ3JvdXAsIHRoZXJlIGFyZSBub3cgbm8gYmFja3RyYWNraW5nIHBvaW50cywgYW5kIHNvIHRoZQorZW50aXJlIG1hdGNoIGZhaWxzLiAoUGVybCBpcyBhYmxlLCBhdCB0aGlzIHBvaW50LCB0byByZS1lbnRlciB0aGUgcmVjdXJzaW9uIGFuZAordHJ5IHRoZSBzZWNvbmQgYWx0ZXJuYXRpdmUuKSBIb3dldmVyLCBpZiB0aGUgcGF0dGVybiBpcyB3cml0dGVuIHdpdGggdGhlCithbHRlcm5hdGl2ZXMgaW4gdGhlIG90aGVyIG9yZGVyLCB0aGluZ3MgYXJlIGRpZmZlcmVudDoKKzxwcmU+CisgIF4oKC4pKD8xKVwyfC4pJAorPC9wcmU+CitUaGlzIHRpbWUsIHRoZSByZWN1cnNpbmcgYWx0ZXJuYXRpdmUgaXMgdHJpZWQgZmlyc3QsIGFuZCBjb250aW51ZXMgdG8gcmVjdXJzZQordW50aWwgaXQgcnVucyBvdXQgb2YgY2hhcmFjdGVycywgYXQgd2hpY2ggcG9pbnQgdGhlIHJlY3Vyc2lvbiBmYWlscy4gQnV0IHRoaXMKK3RpbWUgd2UgZG8gaGF2ZSBhbm90aGVyIGFsdGVybmF0aXZlIHRvIHRyeSBhdCB0aGUgaGlnaGVyIGxldmVsLiBUaGF0IGlzIHRoZSBiaWcKK2RpZmZlcmVuY2U6IGluIHRoZSBwcmV2aW91cyBjYXNlIHRoZSByZW1haW5pbmcgYWx0ZXJuYXRpdmUgaXMgYXQgYSBkZWVwZXIKK3JlY3Vyc2lvbiBsZXZlbCwgd2hpY2ggUENSRTIgY2Fubm90IHVzZS4KKzwvUD4KKzxQPgorVG8gY2hhbmdlIHRoZSBwYXR0ZXJuIHNvIHRoYXQgaXQgbWF0Y2hlcyBhbGwgcGFsaW5kcm9taWMgc3RyaW5ncywgbm90IGp1c3QKK3Rob3NlIHdpdGggYW4gb2RkIG51bWJlciBvZiBjaGFyYWN0ZXJzLCBpdCBpcyB0ZW1wdGluZyB0byBjaGFuZ2UgdGhlIHBhdHRlcm4gdG8KK3RoaXM6Cis8cHJlPgorICBeKCguKSg/MSlcMnwuPykkCis8L3ByZT4KK0FnYWluLCB0aGlzIHdvcmtzIGluIFBlcmwsIGJ1dCBub3QgaW4gUENSRTIsIGFuZCBmb3IgdGhlIHNhbWUgcmVhc29uLiBXaGVuIGEKK2RlZXBlciByZWN1cnNpb24gaGFzIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCBpdCBjYW5ub3QgYmUgZW50ZXJlZCBhZ2FpbiBpbgorb3JkZXIgdG8gbWF0Y2ggYW4gZW1wdHkgc3RyaW5nLiBUaGUgc29sdXRpb24gaXMgdG8gc2VwYXJhdGUgdGhlIHR3byBjYXNlcywgYW5kCit3cml0ZSBvdXQgdGhlIG9kZCBhbmQgZXZlbiBjYXNlcyBhcyBhbHRlcm5hdGl2ZXMgYXQgdGhlIGhpZ2hlciBsZXZlbDoKKzxwcmU+CisgIF4oPzooKC4pKD8xKVwyfCl8KCguKSg/MylcNHwuKSkKKzwvcHJlPgorSWYgeW91IHdhbnQgdG8gbWF0Y2ggdHlwaWNhbCBwYWxpbmRyb21pYyBwaHJhc2VzLCB0aGUgcGF0dGVybiBoYXMgdG8gaWdub3JlIGFsbAorbm9uLXdvcmQgY2hhcmFjdGVycywgd2hpY2ggY2FuIGJlIGRvbmUgbGlrZSB0aGlzOgorPHByZT4KKyAgXlxXKisoPzooKC4pXFcqKyg/MSlcVyorXDJ8KXwoKC4pXFcqKyg/MylcVyorXDR8XFcqKy5cVyorKSlcVyorJAorPC9wcmU+CitJZiBydW4gd2l0aCB0aGUgUENSRTJfQ0FTRUxFU1Mgb3B0aW9uLCB0aGlzIHBhdHRlcm4gbWF0Y2hlcyBwaHJhc2VzIHN1Y2ggYXMgIkEKK21hbiwgYSBwbGFuLCBhIGNhbmFsOiBQYW5hbWEhIiBhbmQgaXQgd29ya3MgaW4gYm90aCBQQ1JFMiBhbmQgUGVybC4gTm90ZSB0aGUKK3VzZSBvZiB0aGUgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyICorIHRvIGF2b2lkIGJhY2t0cmFja2luZyBpbnRvIHNlcXVlbmNlcyBvZgorbm9uLXdvcmQgY2hhcmFjdGVycy4gV2l0aG91dCB0aGlzLCBQQ1JFMiB0YWtlcyBhIGdyZWF0IGRlYWwgbG9uZ2VyICh0ZW4gdGltZXMKK29yIG1vcmUpIHRvIG1hdGNoIHR5cGljYWwgcGhyYXNlcywgYW5kIFBlcmwgdGFrZXMgc28gbG9uZyB0aGF0IHlvdSB0aGluayBpdCBoYXMKK2dvbmUgaW50byBhIGxvb3AuCis8L1A+Cis8UD4KKzxiPldBUk5JTkc8L2I+OiBUaGUgcGFsaW5kcm9tZS1tYXRjaGluZyBwYXR0ZXJucyBhYm92ZSB3b3JrIG9ubHkgaWYgdGhlIHN1YmplY3QKK3N0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIGEgcGFsaW5kcm9tZSB0aGF0IGlzIHNob3J0ZXIgdGhhbiB0aGUgZW50aXJlIHN0cmluZy4KK0ZvciBleGFtcGxlLCBhbHRob3VnaCAiYWJjYmEiIGlzIGNvcnJlY3RseSBtYXRjaGVkLCBpZiB0aGUgc3ViamVjdCBpcyAiYWJhYmEiLAorUENSRTIgZmluZHMgdGhlIHBhbGluZHJvbWUgImFiYSIgYXQgdGhlIHN0YXJ0LCB0aGVuIGZhaWxzIGF0IHRvcCBsZXZlbCBiZWNhdXNlCit0aGUgZW5kIG9mIHRoZSBzdHJpbmcgZG9lcyBub3QgZm9sbG93LiBPbmNlIGFnYWluLCBpdCBjYW5ub3QganVtcCBiYWNrIGludG8gdGhlCityZWN1cnNpb24gdG8gdHJ5IG90aGVyIGFsdGVybmF0aXZlcywgc28gdGhlIGVudGlyZSBtYXRjaCBmYWlscy4KKzwvUD4KKzxQPgorVGhlIHNlY29uZCB3YXkgaW4gd2hpY2ggUENSRTIgYW5kIFBlcmwgZGlmZmVyIGluIHRoZWlyIHJlY3Vyc2lvbiBwcm9jZXNzaW5nIGlzCitpbiB0aGUgaGFuZGxpbmcgb2YgY2FwdHVyZWQgdmFsdWVzLiBJbiBQZXJsLCB3aGVuIGEgc3VicGF0dGVybiBpcyBjYWxsZWQKK3JlY3Vyc2l2ZWx5IG9yIGFzIGEgc3VicGF0dGVybiAoc2VlIHRoZSBuZXh0IHNlY3Rpb24pLCBpdCBoYXMgbm8gYWNjZXNzIHRvIGFueQordmFsdWVzIHRoYXQgd2VyZSBjYXB0dXJlZCBvdXRzaWRlIHRoZSByZWN1cnNpb24sIHdoZXJlYXMgaW4gUENSRTIgdGhlc2UgdmFsdWVzCitjYW4gYmUgcmVmZXJlbmNlZC4gQ29uc2lkZXIgdGhpcyBwYXR0ZXJuOgorPHByZT4KKyAgXiguKShcMXxhKD8yKSkKKzwvcHJlPgorSW4gUENSRTIsIHRoaXMgcGF0dGVybiBtYXRjaGVzICJiYWIiLiBUaGUgZmlyc3QgY2FwdHVyaW5nIHBhcmVudGhlc2VzIG1hdGNoICJiIiwKK3RoZW4gaW4gdGhlIHNlY29uZCBncm91cCwgd2hlbiB0aGUgYmFjayByZWZlcmVuY2UgXDEgZmFpbHMgdG8gbWF0Y2ggImIiLCB0aGUKK3NlY29uZCBhbHRlcm5hdGl2ZSBtYXRjaGVzICJhIiBhbmQgdGhlbiByZWN1cnNlcy4gSW4gdGhlIHJlY3Vyc2lvbiwgXDEgZG9lcworbm93IG1hdGNoICJiIiBhbmQgc28gdGhlIHdob2xlIG1hdGNoIHN1Y2NlZWRzLiBJbiBQZXJsLCB0aGUgcGF0dGVybiBmYWlscyB0bworbWF0Y2ggYmVjYXVzZSBpbnNpZGUgdGhlIHJlY3Vyc2l2ZSBjYWxsIFwxIGNhbm5vdCBhY2Nlc3MgdGhlIGV4dGVybmFsbHkgc2V0Cit2YWx1ZS4KKzxhIG5hbWU9InN1YnBhdHRlcm5zYXNzdWJyb3V0aW5lcyI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMyNCIgaHJlZj0iI1RPQzEiPlNVQlBBVFRFUk5TIEFTIFNVQlJPVVRJTkVTPC9hPjxicj4KKzxQPgorSWYgdGhlIHN5bnRheCBmb3IgYSByZWN1cnNpdmUgc3VicGF0dGVybiBjYWxsIChlaXRoZXIgYnkgbnVtYmVyIG9yIGJ5CituYW1lKSBpcyB1c2VkIG91dHNpZGUgdGhlIHBhcmVudGhlc2VzIHRvIHdoaWNoIGl0IHJlZmVycywgaXQgb3BlcmF0ZXMgbGlrZSBhCitzdWJyb3V0aW5lIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuIFRoZSBjYWxsZWQgc3VicGF0dGVybiBtYXkgYmUgZGVmaW5lZAorYmVmb3JlIG9yIGFmdGVyIHRoZSByZWZlcmVuY2UuIEEgbnVtYmVyZWQgcmVmZXJlbmNlIGNhbiBiZSBhYnNvbHV0ZSBvcgorcmVsYXRpdmUsIGFzIGluIHRoZXNlIGV4YW1wbGVzOgorPHByZT4KKyAgKC4uLihhYnNvbHV0ZSkuLi4pLi4uKD8yKS4uLgorICAoLi4uKHJlbGF0aXZlKS4uLikuLi4oPy0xKS4uLgorICAoLi4uKD8rMSkuLi4ocmVsYXRpdmUpLi4uCis8L3ByZT4KK0FuIGVhcmxpZXIgZXhhbXBsZSBwb2ludGVkIG91dCB0aGF0IHRoZSBwYXR0ZXJuCis8cHJlPgorICAoc2Vuc3xyZXNwb25zKWUgYW5kIFwxaWJpbGl0eQorPC9wcmU+CittYXRjaGVzICJzZW5zZSBhbmQgc2Vuc2liaWxpdHkiIGFuZCAicmVzcG9uc2UgYW5kIHJlc3BvbnNpYmlsaXR5IiwgYnV0IG5vdAorInNlbnNlIGFuZCByZXNwb25zaWJpbGl0eSIuIElmIGluc3RlYWQgdGhlIHBhdHRlcm4KKzxwcmU+CisgIChzZW5zfHJlc3BvbnMpZSBhbmQgKD8xKWliaWxpdHkKKzwvcHJlPgoraXMgdXNlZCwgaXQgZG9lcyBtYXRjaCAic2Vuc2UgYW5kIHJlc3BvbnNpYmlsaXR5IiBhcyB3ZWxsIGFzIHRoZSBvdGhlciB0d28KK3N0cmluZ3MuIEFub3RoZXIgZXhhbXBsZSBpcyBnaXZlbiBpbiB0aGUgZGlzY3Vzc2lvbiBvZiBERUZJTkUgYWJvdmUuCis8L1A+Cis8UD4KK0FsbCBzdWJyb3V0aW5lIGNhbGxzLCB3aGV0aGVyIHJlY3Vyc2l2ZSBvciBub3QsIGFyZSBhbHdheXMgdHJlYXRlZCBhcyBhdG9taWMKK2dyb3Vwcy4gVGhhdCBpcywgb25jZSBhIHN1YnJvdXRpbmUgaGFzIG1hdGNoZWQgc29tZSBvZiB0aGUgc3ViamVjdCBzdHJpbmcsIGl0CitpcyBuZXZlciByZS1lbnRlcmVkLCBldmVuIGlmIGl0IGNvbnRhaW5zIHVudHJpZWQgYWx0ZXJuYXRpdmVzIGFuZCB0aGVyZSBpcyBhCitzdWJzZXF1ZW50IG1hdGNoaW5nIGZhaWx1cmUuIEFueSBjYXB0dXJpbmcgcGFyZW50aGVzZXMgdGhhdCBhcmUgc2V0IGR1cmluZyB0aGUKK3N1YnJvdXRpbmUgY2FsbCByZXZlcnQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIGFmdGVyd2FyZHMuCis8L1A+Cis8UD4KK1Byb2Nlc3Npbmcgb3B0aW9ucyBzdWNoIGFzIGNhc2UtaW5kZXBlbmRlbmNlIGFyZSBmaXhlZCB3aGVuIGEgc3VicGF0dGVybiBpcworZGVmaW5lZCwgc28gaWYgaXQgaXMgdXNlZCBhcyBhIHN1YnJvdXRpbmUsIHN1Y2ggb3B0aW9ucyBjYW5ub3QgYmUgY2hhbmdlZCBmb3IKK2RpZmZlcmVudCBjYWxscy4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoaXMgcGF0dGVybjoKKzxwcmU+CisgIChhYmMpKD9pOig/LTEpKQorPC9wcmU+CitJdCBtYXRjaGVzICJhYmNhYmMiLiBJdCBkb2VzIG5vdCBtYXRjaCAiYWJjQUJDIiBiZWNhdXNlIHRoZSBjaGFuZ2Ugb2YKK3Byb2Nlc3Npbmcgb3B0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgY2FsbGVkIHN1YnBhdHRlcm4uCis8YSBuYW1lPSJvbmlndXJ1bWFzdWJyb3V0aW5lcyI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMyNSIgaHJlZj0iI1RPQzEiPk9OSUdVUlVNQSBTVUJST1VUSU5FIFNZTlRBWDwvYT48YnI+Cis8UD4KK0ZvciBjb21wYXRpYmlsaXR5IHdpdGggT25pZ3VydW1hLCB0aGUgbm9uLVBlcmwgc3ludGF4IFxnIGZvbGxvd2VkIGJ5IGEgbmFtZSBvcgorYSBudW1iZXIgZW5jbG9zZWQgZWl0aGVyIGluIGFuZ2xlIGJyYWNrZXRzIG9yIHNpbmdsZSBxdW90ZXMsIGlzIGFuIGFsdGVybmF0aXZlCitzeW50YXggZm9yIHJlZmVyZW5jaW5nIGEgc3VicGF0dGVybiBhcyBhIHN1YnJvdXRpbmUsIHBvc3NpYmx5IHJlY3Vyc2l2ZWx5LiBIZXJlCithcmUgdHdvIG9mIHRoZSBleGFtcGxlcyB1c2VkIGFib3ZlLCByZXdyaXR0ZW4gdXNpbmcgdGhpcyBzeW50YXg6Cis8cHJlPgorICAoPyYjNjA7cG4mIzYyOyBcKCAoICg/JiM2MjtbXigpXSspIHwgXGcmIzYwO3BuJiM2MjsgKSogXCkgKQorICAoc2Vuc3xyZXNwb25zKWUgYW5kIFxnJzEnaWJpbGl0eQorPC9wcmU+CitQQ1JFMiBzdXBwb3J0cyBhbiBleHRlbnNpb24gdG8gT25pZ3VydW1hOiBpZiBhIG51bWJlciBpcyBwcmVjZWRlZCBieSBhCitwbHVzIG9yIGEgbWludXMgc2lnbiBpdCBpcyB0YWtlbiBhcyBhIHJlbGF0aXZlIHJlZmVyZW5jZS4gRm9yIGV4YW1wbGU6Cis8cHJlPgorICAoYWJjKSg/aTpcZyYjNjA7LTEmIzYyOykKKzwvcHJlPgorTm90ZSB0aGF0IFxney4uLn0gKFBlcmwgc3ludGF4KSBhbmQgXGcmIzYwOy4uLiYjNjI7IChPbmlndXJ1bWEgc3ludGF4KSBhcmUgPGk+bm90PC9pPgorc3lub255bW91cy4gVGhlIGZvcm1lciBpcyBhIGJhY2sgcmVmZXJlbmNlOyB0aGUgbGF0dGVyIGlzIGEgc3Vicm91dGluZSBjYWxsLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzI2IiBocmVmPSIjVE9DMSI+Q0FMTE9VVFM8L2E+PGJyPgorPFA+CitQZXJsIGhhcyBhIGZlYXR1cmUgd2hlcmVieSB1c2luZyB0aGUgc2VxdWVuY2UgKD97Li4ufSkgY2F1c2VzIGFyYml0cmFyeSBQZXJsCitjb2RlIHRvIGJlIG9iZXllZCBpbiB0aGUgbWlkZGxlIG9mIG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uLiBUaGlzIG1ha2VzIGl0Citwb3NzaWJsZSwgYW1vbmdzdCBvdGhlciB0aGluZ3MsIHRvIGV4dHJhY3QgZGlmZmVyZW50IHN1YnN0cmluZ3MgdGhhdCBtYXRjaCB0aGUKK3NhbWUgcGFpciBvZiBwYXJlbnRoZXNlcyB3aGVuIHRoZXJlIGlzIGEgcmVwZXRpdGlvbi4KKzwvUD4KKzxQPgorUENSRTIgcHJvdmlkZXMgYSBzaW1pbGFyIGZlYXR1cmUsIGJ1dCBvZiBjb3Vyc2UgaXQgY2Fubm90IG9iZXkgYXJiaXRyYXJ5IFBlcmwKK2NvZGUuIFRoZSBmZWF0dXJlIGlzIGNhbGxlZCAiY2FsbG91dCIuIFRoZSBjYWxsZXIgb2YgUENSRTIgcHJvdmlkZXMgYW4gZXh0ZXJuYWwKK2Z1bmN0aW9uIGJ5IHB1dHRpbmcgaXRzIGVudHJ5IHBvaW50IGluIGEgbWF0Y2ggY29udGV4dCB1c2luZyB0aGUgZnVuY3Rpb24KKzxiPnBjcmUyX3NldF9jYWxsb3V0KCk8L2I+LCBhbmQgdGhlbiBwYXNzaW5nIHRoYXQgY29udGV4dCB0byA8Yj5wY3JlMl9tYXRjaCgpPC9iPgorb3IgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+LiBJZiBubyBtYXRjaCBjb250ZXh0IGlzIHBhc3NlZCwgb3IgaWYgdGhlIGNhbGxvdXQKK2VudHJ5IHBvaW50IGlzIHNldCB0byBOVUxMLCBjYWxsb3V0cyBhcmUgZGlzYWJsZWQuCis8L1A+Cis8UD4KK1dpdGhpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwgKD9DJiM2MDthcmcmIzYyOykgaW5kaWNhdGVzIGEgcG9pbnQgYXQgd2hpY2ggdGhlIGV4dGVybmFsCitmdW5jdGlvbiBpcyB0byBiZSBjYWxsZWQuIFRoZXJlIGFyZSB0d28ga2luZHMgb2YgY2FsbG91dDogdGhvc2Ugd2l0aCBhCitudW1lcmljYWwgYXJndW1lbnQgYW5kIHRob3NlIHdpdGggYSBzdHJpbmcgYXJndW1lbnQuICg/Qykgb24gaXRzIG93biB3aXRoIG5vCithcmd1bWVudCBpcyB0cmVhdGVkIGFzICg/QzApLiBBIG51bWVyaWNhbCBhcmd1bWVudCBhbGxvd3MgdGhlIGFwcGxpY2F0aW9uIHRvCitkaXN0aW5ndWlzaCBiZXR3ZWVuIGRpZmZlcmVudCBjYWxsb3V0cy4gU3RyaW5nIGFyZ3VtZW50cyB3ZXJlIGFkZGVkIGZvciByZWxlYXNlCisxMC4yMCB0byBtYWtlIGl0IHBvc3NpYmxlIGZvciBzY3JpcHQgbGFuZ3VhZ2VzIHRoYXQgdXNlIFBDUkUyIHRvIGVtYmVkIHNob3J0CitzY3JpcHRzIHdpdGhpbiBwYXR0ZXJucyBpbiBhIHNpbWlsYXIgd2F5IHRvIFBlcmwuCis8L1A+Cis8UD4KK0R1cmluZyBtYXRjaGluZywgd2hlbiBQQ1JFMiByZWFjaGVzIGEgY2FsbG91dCBwb2ludCwgdGhlIGV4dGVybmFsIGZ1bmN0aW9uIGlzCitjYWxsZWQuIEl0IGlzIHByb3ZpZGVkIHdpdGggdGhlIG51bWJlciBvciBzdHJpbmcgYXJndW1lbnQgb2YgdGhlIGNhbGxvdXQsIHRoZQorcG9zaXRpb24gaW4gdGhlIHBhdHRlcm4sIGFuZCBvbmUgaXRlbSBvZiBkYXRhIHRoYXQgaXMgYWxzbyBzZXQgaW4gdGhlIG1hdGNoCitibG9jay4gVGhlIGNhbGxvdXQgZnVuY3Rpb24gbWF5IGNhdXNlIG1hdGNoaW5nIHRvIHByb2NlZWQsIHRvIGJhY2t0cmFjaywgb3IgdG8KK2ZhaWwuCis8L1A+Cis8UD4KK0J5IGRlZmF1bHQsIFBDUkUyIGltcGxlbWVudHMgYSBudW1iZXIgb2Ygb3B0aW1pemF0aW9ucyBhdCBtYXRjaGluZyB0aW1lLCBhbmQKK29uZSBzaWRlLWVmZmVjdCBpcyB0aGF0IHNvbWV0aW1lcyBjYWxsb3V0cyBhcmUgc2tpcHBlZC4gSWYgeW91IG5lZWQgYWxsCitwb3NzaWJsZSBjYWxsb3V0cyB0byBoYXBwZW4sIHlvdSBuZWVkIHRvIHNldCBvcHRpb25zIHRoYXQgZGlzYWJsZSB0aGUgcmVsZXZhbnQKK29wdGltaXphdGlvbnMuIE1vcmUgZGV0YWlscywgaW5jbHVkaW5nIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlCitwcm9ncmFtbWluZyBpbnRlcmZhY2UgdG8gdGhlIGNhbGxvdXQgZnVuY3Rpb24sIGFyZSBnaXZlbiBpbiB0aGUKKzxhIGhyZWY9InBjcmUyY2FsbG91dC5odG1sIj48Yj5wY3JlMmNhbGxvdXQ8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4KKzwvUD4KKzxicj48Yj4KK0NhbGxvdXRzIHdpdGggbnVtZXJpY2FsIGFyZ3VtZW50cworPC9iPjxicj4KKzxQPgorSWYgeW91IGp1c3Qgd2FudCB0byBoYXZlIGEgbWVhbnMgb2YgaWRlbnRpZnlpbmcgZGlmZmVyZW50IGNhbGxvdXQgcG9pbnRzLCBwdXQgYQorbnVtYmVyIGxlc3MgdGhhbiAyNTYgYWZ0ZXIgdGhlIGxldHRlciBDLiBGb3IgZXhhbXBsZSwgdGhpcyBwYXR0ZXJuIGhhcyB0d28KK2NhbGxvdXQgcG9pbnRzOgorPHByZT4KKyAgKD9DMSlhYmMoP0MyKWRlZgorPC9wcmU+CitJZiB0aGUgUENSRTJfQVVUT19DQUxMT1VUIGZsYWcgaXMgcGFzc2VkIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4sIG51bWVyaWNhbAorY2FsbG91dHMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGJlZm9yZSBlYWNoIGl0ZW0gaW4gdGhlIHBhdHRlcm4uIFRoZXkgYXJlCithbGwgbnVtYmVyZWQgMjU1LiBJZiB0aGVyZSBpcyBhIGNvbmRpdGlvbmFsIGdyb3VwIGluIHRoZSBwYXR0ZXJuIHdob3NlCitjb25kaXRpb24gaXMgYW4gYXNzZXJ0aW9uLCBhbiBhZGRpdGlvbmFsIGNhbGxvdXQgaXMgaW5zZXJ0ZWQganVzdCBiZWZvcmUgdGhlCitjb25kaXRpb24uIEFuIGV4cGxpY2l0IGNhbGxvdXQgbWF5IGFsc28gYmUgc2V0IGF0IHRoaXMgcG9zaXRpb24sIGFzIGluIHRoaXMKK2V4YW1wbGU6Cis8cHJlPgorICAoPyg/QzkpKD89YSlhYmN8ZGVmKQorPC9wcmU+CitOb3RlIHRoYXQgdGhpcyBhcHBsaWVzIG9ubHkgdG8gYXNzZXJ0aW9uIGNvbmRpdGlvbnMsIG5vdCB0byBvdGhlciB0eXBlcyBvZgorY29uZGl0aW9uLgorPC9QPgorPGJyPjxiPgorQ2FsbG91dHMgd2l0aCBzdHJpbmcgYXJndW1lbnRzCis8L2I+PGJyPgorPFA+CitBIGRlbGltaXRlZCBzdHJpbmcgbWF5IGJlIHVzZWQgaW5zdGVhZCBvZiBhIG51bWJlciBhcyBhIGNhbGxvdXQgYXJndW1lbnQuIFRoZQorc3RhcnRpbmcgZGVsaW1pdGVyIG11c3QgYmUgb25lIG9mIGAgJyAiIF4gJSAjICQgeyBhbmQgdGhlIGVuZGluZyBkZWxpbWl0ZXIgaXMKK3RoZSBzYW1lIGFzIHRoZSBzdGFydCwgZXhjZXB0IGZvciB7LCB3aGVyZSB0aGUgZW5kaW5nIGRlbGltaXRlciBpcyB9LiBJZiB0aGUKK2VuZGluZyBkZWxpbWl0ZXIgaXMgbmVlZGVkIHdpdGhpbiB0aGUgc3RyaW5nLCBpdCBtdXN0IGJlIGRvdWJsZWQuIEZvcgorZXhhbXBsZToKKzxwcmU+CisgICg/QydhYiAnJ2MnJyBkJyl4eXooP0N7YW55IHRleHR9KXBxcgorPC9wcmU+CitUaGUgZG91YmxpbmcgaXMgcmVtb3ZlZCBiZWZvcmUgdGhlIHN0cmluZyBpcyBwYXNzZWQgdG8gdGhlIGNhbGxvdXQgZnVuY3Rpb24uCis8YSBuYW1lPSJiYWNrdHJhY2tjb250cm9sIj48L2E+PC9QPgorPGJyPjxhIG5hbWU9IlNFQzI3IiBocmVmPSIjVE9DMSI+QkFDS1RSQUNLSU5HIENPTlRST0w8L2E+PGJyPgorPFA+CitQZXJsIDUuMTAgaW50cm9kdWNlZCBhIG51bWJlciBvZiAiU3BlY2lhbCBCYWNrdHJhY2tpbmcgQ29udHJvbCBWZXJicyIsIHdoaWNoCithcmUgc3RpbGwgZGVzY3JpYmVkIGluIHRoZSBQZXJsIGRvY3VtZW50YXRpb24gYXMgImV4cGVyaW1lbnRhbCBhbmQgc3ViamVjdCB0bworY2hhbmdlIG9yIHJlbW92YWwgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBQZXJsIi4gSXQgZ29lcyBvbiB0byBzYXk6ICJUaGVpciB1c2FnZQoraW4gcHJvZHVjdGlvbiBjb2RlIHNob3VsZCBiZSBub3RlZCB0byBhdm9pZCBwcm9ibGVtcyBkdXJpbmcgdXBncmFkZXMuIiBUaGUgc2FtZQorcmVtYXJrcyBhcHBseSB0byB0aGUgUENSRTIgZmVhdHVyZXMgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbi4KKzwvUD4KKzxQPgorVGhlIG5ldyB2ZXJicyBtYWtlIHVzZSBvZiB3aGF0IHdhcyBwcmV2aW91c2x5IGludmFsaWQgc3ludGF4OiBhbiBvcGVuaW5nCitwYXJlbnRoZXNpcyBmb2xsb3dlZCBieSBhbiBhc3Rlcmlzay4gVGhleSBhcmUgZ2VuZXJhbGx5IG9mIHRoZSBmb3JtICgqVkVSQikgb3IKKygqVkVSQjpOQU1FKS4gU29tZSB2ZXJicyB0YWtlIGVpdGhlciBmb3JtLCBwb3NzaWJseSBiZWhhdmluZyBkaWZmZXJlbnRseQorZGVwZW5kaW5nIG9uIHdoZXRoZXIgb3Igbm90IGEgbmFtZSBpcyBwcmVzZW50LgorPC9QPgorPFA+CitCeSBkZWZhdWx0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwsIGEgbmFtZSBpcyBhbnkgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycwordGhhdCBkb2VzIG5vdCBpbmNsdWRlIGEgY2xvc2luZyBwYXJlbnRoZXNpcy4gVGhlIG5hbWUgaXMgbm90IHByb2Nlc3NlZCBpbgorYW55IHdheSwgYW5kIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBpbmNsdWRlIGEgY2xvc2luZyBwYXJlbnRoZXNpcyBpbiB0aGUgbmFtZS4KK0hvd2V2ZXIsIGlmIHRoZSBQQ1JFMl9BTFRfVkVSQk5BTUVTIG9wdGlvbiBpcyBzZXQsIG5vcm1hbCBiYWNrc2xhc2ggcHJvY2Vzc2luZworaXMgYXBwbGllZCB0byB2ZXJiIG5hbWVzIGFuZCBvbmx5IGFuIHVuZXNjYXBlZCBjbG9zaW5nIHBhcmVudGhlc2lzIHRlcm1pbmF0ZXMKK3RoZSBuYW1lLiBBIGNsb3NpbmcgcGFyZW50aGVzaXMgY2FuIGJlIGluY2x1ZGVkIGluIGEgbmFtZSBlaXRoZXIgYXMgXCkgb3IKK2JldHdlZW4gXFEgYW5kIFxFLiBJZiB0aGUgUENSRTJfRVhURU5ERUQgb3B0aW9uIGlzIHNldCwgdW5lc2NhcGVkIHdoaXRlc3BhY2UKK2luIHZlcmIgbmFtZXMgaXMgc2tpcHBlZCBhbmQgIy1jb21tZW50cyBhcmUgcmVjb2duaXplZCwgZXhhY3RseSBhcyBpbiB0aGUgcmVzdAorb2YgdGhlIHBhdHRlcm4uCis8L1A+Cis8UD4KK1RoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIG5hbWUgaXMgMjU1IGluIHRoZSA4LWJpdCBsaWJyYXJ5IGFuZCA2NTUzNSBpbiB0aGUKKzE2LWJpdCBhbmQgMzItYml0IGxpYnJhcmllcy4gSWYgdGhlIG5hbWUgaXMgZW1wdHksIHRoYXQgaXMsIGlmIHRoZSBjbG9zaW5nCitwYXJlbnRoZXNpcyBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBjb2xvbiwgdGhlIGVmZmVjdCBpcyBhcyBpZiB0aGUgY29sb24gd2VyZQorbm90IHRoZXJlLiBBbnkgbnVtYmVyIG9mIHRoZXNlIHZlcmJzIG1heSBvY2N1ciBpbiBhIHBhdHRlcm4uCis8L1A+Cis8UD4KK1NpbmNlIHRoZXNlIHZlcmJzIGFyZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBiYWNrdHJhY2tpbmcsIG1vc3Qgb2YgdGhlbSBjYW4gYmUKK3VzZWQgb25seSB3aGVuIHRoZSBwYXR0ZXJuIGlzIHRvIGJlIG1hdGNoZWQgdXNpbmcgdGhlIHRyYWRpdGlvbmFsIG1hdGNoaW5nCitmdW5jdGlvbiwgYmVjYXVzZSB0aGVzZSB1c2UgYSBiYWNrdHJhY2tpbmcgYWxnb3JpdGhtLiBXaXRoIHRoZSBleGNlcHRpb24gb2YKKygqRkFJTCksIHdoaWNoIGJlaGF2ZXMgbGlrZSBhIGZhaWxpbmcgbmVnYXRpdmUgYXNzZXJ0aW9uLCB0aGUgYmFja3RyYWNraW5nCitjb250cm9sIHZlcmJzIGNhdXNlIGFuIGVycm9yIGlmIGVuY291bnRlcmVkIGJ5IHRoZSBERkEgbWF0Y2hpbmcgZnVuY3Rpb24uCis8L1A+Cis8UD4KK1RoZSBiZWhhdmlvdXIgb2YgdGhlc2UgdmVyYnMgaW4KKzxhIGhyZWY9IiNidHJlcGVhdCI+cmVwZWF0ZWQgZ3JvdXBzLDwvYT4KKzxhIGhyZWY9IiNidGFzc2VydCI+YXNzZXJ0aW9ucyw8L2E+CithbmQgaW4KKzxhIGhyZWY9IiNidHN1YiI+c3VicGF0dGVybnMgY2FsbGVkIGFzIHN1YnJvdXRpbmVzPC9hPgorKHdoZXRoZXIgb3Igbm90IHJlY3Vyc2l2ZWx5KSBpcyBkb2N1bWVudGVkIGJlbG93LgorPGEgbmFtZT0ibm9vcHRpbWl6ZSI+PC9hPjwvUD4KKzxicj48Yj4KK09wdGltaXphdGlvbnMgdGhhdCBhZmZlY3QgYmFja3RyYWNraW5nIHZlcmJzCis8L2I+PGJyPgorPFA+CitQQ1JFMiBjb250YWlucyBzb21lIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgdXNlZCB0byBzcGVlZCB1cCBtYXRjaGluZyBieSBydW5uaW5nCitzb21lIGNoZWNrcyBhdCB0aGUgc3RhcnQgb2YgZWFjaCBtYXRjaCBhdHRlbXB0LiBGb3IgZXhhbXBsZSwgaXQgbWF5IGtub3cgdGhlCittaW5pbXVtIGxlbmd0aCBvZiBtYXRjaGluZyBzdWJqZWN0LCBvciB0aGF0IGEgcGFydGljdWxhciBjaGFyYWN0ZXIgbXVzdCBiZQorcHJlc2VudC4gV2hlbiBvbmUgb2YgdGhlc2Ugb3B0aW1pemF0aW9ucyBieXBhc3NlcyB0aGUgcnVubmluZyBvZiBhIG1hdGNoLCBhbnkKK2luY2x1ZGVkIGJhY2t0cmFja2luZyB2ZXJicyB3aWxsIG5vdCwgb2YgY291cnNlLCBiZSBwcm9jZXNzZWQuIFlvdSBjYW4gc3VwcHJlc3MKK3RoZSBzdGFydC1vZi1tYXRjaCBvcHRpbWl6YXRpb25zIGJ5IHNldHRpbmcgdGhlIFBDUkUyX05PX1NUQVJUX09QVElNSVpFIG9wdGlvbgord2hlbiBjYWxsaW5nIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4sIG9yIGJ5IHN0YXJ0aW5nIHRoZSBwYXR0ZXJuIHdpdGgKKygqTk9fU1RBUlRfT1BUKS4gVGhlcmUgaXMgbW9yZSBkaXNjdXNzaW9uIG9mIHRoaXMgb3B0aW9uIGluIHRoZSBzZWN0aW9uCitlbnRpdGxlZAorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCNjb21waWxpbmciPiJDb21waWxpbmcgYSBwYXR0ZXJuIjwvYT4KK2luIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4KKzwvUD4KKzxQPgorRXhwZXJpbWVudHMgd2l0aCBQZXJsIHN1Z2dlc3QgdGhhdCBpdCB0b28gaGFzIHNpbWlsYXIgb3B0aW1pemF0aW9ucywgc29tZXRpbWVzCitsZWFkaW5nIHRvIGFub21hbG91cyByZXN1bHRzLgorPC9QPgorPGJyPjxiPgorVmVyYnMgdGhhdCBhY3QgaW1tZWRpYXRlbHkKKzwvYj48YnI+Cis8UD4KK1RoZSBmb2xsb3dpbmcgdmVyYnMgYWN0IGFzIHNvb24gYXMgdGhleSBhcmUgZW5jb3VudGVyZWQuIFRoZXkgbWF5IG5vdCBiZQorZm9sbG93ZWQgYnkgYSBuYW1lLgorPHByZT4KKyAgICgqQUNDRVBUKQorPC9wcmU+CitUaGlzIHZlcmIgY2F1c2VzIHRoZSBtYXRjaCB0byBlbmQgc3VjY2Vzc2Z1bGx5LCBza2lwcGluZyB0aGUgcmVtYWluZGVyIG9mIHRoZQorcGF0dGVybi4gSG93ZXZlciwgd2hlbiBpdCBpcyBpbnNpZGUgYSBzdWJwYXR0ZXJuIHRoYXQgaXMgY2FsbGVkIGFzIGEKK3N1YnJvdXRpbmUsIG9ubHkgdGhhdCBzdWJwYXR0ZXJuIGlzIGVuZGVkIHN1Y2Nlc3NmdWxseS4gTWF0Y2hpbmcgdGhlbiBjb250aW51ZXMKK2F0IHRoZSBvdXRlciBsZXZlbC4gSWYgKCpBQ0NFUFQpIGluIHRyaWdnZXJlZCBpbiBhIHBvc2l0aXZlIGFzc2VydGlvbiwgdGhlCithc3NlcnRpb24gc3VjY2VlZHM7IGluIGEgbmVnYXRpdmUgYXNzZXJ0aW9uLCB0aGUgYXNzZXJ0aW9uIGZhaWxzLgorPC9QPgorPFA+CitJZiAoKkFDQ0VQVCkgaXMgaW5zaWRlIGNhcHR1cmluZyBwYXJlbnRoZXNlcywgdGhlIGRhdGEgc28gZmFyIGlzIGNhcHR1cmVkLiBGb3IKK2V4YW1wbGU6Cis8cHJlPgorICBBKCg/OkF8QigqQUNDRVBUKXxDKUQpCis8L3ByZT4KK1RoaXMgbWF0Y2hlcyAiQUIiLCAiQUFEIiwgb3IgIkFDRCI7IHdoZW4gaXQgbWF0Y2hlcyAiQUIiLCAiQiIgaXMgY2FwdHVyZWQgYnkKK3RoZSBvdXRlciBwYXJlbnRoZXNlcy4KKzxwcmU+CisgICgqRkFJTCkgb3IgKCpGKQorPC9wcmU+CitUaGlzIHZlcmIgY2F1c2VzIGEgbWF0Y2hpbmcgZmFpbHVyZSwgZm9yY2luZyBiYWNrdHJhY2tpbmcgdG8gb2NjdXIuIEl0IGlzCitlcXVpdmFsZW50IHRvICg/ISkgYnV0IGVhc2llciB0byByZWFkLiBUaGUgUGVybCBkb2N1bWVudGF0aW9uIG5vdGVzIHRoYXQgaXQgaXMKK3Byb2JhYmx5IHVzZWZ1bCBvbmx5IHdoZW4gY29tYmluZWQgd2l0aCAoP3t9KSBvciAoPz97fSkuIFRob3NlIGFyZSwgb2YgY291cnNlLAorUGVybCBmZWF0dXJlcyB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiBQQ1JFMi4gVGhlIG5lYXJlc3QgZXF1aXZhbGVudCBpcyB0aGUKK2NhbGxvdXQgZmVhdHVyZSwgYXMgZm9yIGV4YW1wbGUgaW4gdGhpcyBwYXR0ZXJuOgorPHByZT4KKyAgYSsoP0MpKCpGQUlMKQorPC9wcmU+CitBIG1hdGNoIHdpdGggdGhlIHN0cmluZyAiYWFhYSIgYWx3YXlzIGZhaWxzLCBidXQgdGhlIGNhbGxvdXQgaXMgdGFrZW4gYmVmb3JlCitlYWNoIGJhY2t0cmFjayBoYXBwZW5zIChpbiB0aGlzIGV4YW1wbGUsIDEwIHRpbWVzKS4KKzwvUD4KKzxicj48Yj4KK1JlY29yZGluZyB3aGljaCBwYXRoIHdhcyB0YWtlbgorPC9iPjxicj4KKzxQPgorVGhlcmUgaXMgb25lIHZlcmIgd2hvc2UgbWFpbiBwdXJwb3NlIGlzIHRvIHRyYWNrIGhvdyBhIG1hdGNoIHdhcyBhcnJpdmVkIGF0LAordGhvdWdoIGl0IGFsc28gaGFzIGEgc2Vjb25kYXJ5IHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIGFkdmFuY2luZyB0aGUgbWF0Y2gKK3N0YXJ0aW5nIHBvaW50IChzZWUgKCpTS0lQKSBiZWxvdykuCis8cHJlPgorICAoKk1BUks6TkFNRSkgb3IgKCo6TkFNRSkKKzwvcHJlPgorQSBuYW1lIGlzIGFsd2F5cyByZXF1aXJlZCB3aXRoIHRoaXMgdmVyYi4gVGhlcmUgbWF5IGJlIGFzIG1hbnkgaW5zdGFuY2VzIG9mCisoKk1BUkspIGFzIHlvdSBsaWtlIGluIGEgcGF0dGVybiwgYW5kIHRoZWlyIG5hbWVzIGRvIG5vdCBoYXZlIHRvIGJlIHVuaXF1ZS4KKzwvUD4KKzxQPgorV2hlbiBhIG1hdGNoIHN1Y2NlZWRzLCB0aGUgbmFtZSBvZiB0aGUgbGFzdC1lbmNvdW50ZXJlZCAoKk1BUks6TkFNRSksCisoKlBSVU5FOk5BTUUpLCBvciAoKlRIRU46TkFNRSkgb24gdGhlIG1hdGNoaW5nIHBhdGggaXMgcGFzc2VkIGJhY2sgdG8gdGhlCitjYWxsZXIgYXMgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCis8YSBocmVmPSJwY3JlMmFwaS5odG1sI21hdGNob3RoZXJkYXRhIj4iT3RoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hdGNoIjwvYT4KK2luIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4gSGVyZSBpcyBhbiBleGFtcGxlIG9mIDxiPnBjcmUydGVzdDwvYj4gb3V0cHV0LCB3aGVyZSB0aGUgIm1hcmsiCittb2RpZmllciByZXF1ZXN0cyB0aGUgcmV0cmlldmFsIGFuZCBvdXRwdXR0aW5nIG9mICgqTUFSSykgZGF0YToKKzxwcmU+CisgICAgcmUmIzYyOyAvWCgqTUFSSzpBKVl8WCgqTUFSSzpCKVovbWFyaworICBkYXRhJiM2MjsgWFkKKyAgIDA6IFhZCisgIE1LOiBBCisgIFhaCisgICAwOiBYWgorICBNSzogQgorPC9wcmU+CitUaGUgKCpNQVJLKSBuYW1lIGlzIHRhZ2dlZCB3aXRoICJNSzoiIGluIHRoaXMgb3V0cHV0LCBhbmQgaW4gdGhpcyBleGFtcGxlIGl0CitpbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIHR3byBhbHRlcm5hdGl2ZXMgbWF0Y2hlZC4gVGhpcyBpcyBhIG1vcmUgZWZmaWNpZW50IHdheQorb2Ygb2J0YWluaW5nIHRoaXMgaW5mb3JtYXRpb24gdGhhbiBwdXR0aW5nIGVhY2ggYWx0ZXJuYXRpdmUgaW4gaXRzIG93bgorY2FwdHVyaW5nIHBhcmVudGhlc2VzLgorPC9QPgorPFA+CitJZiBhIHZlcmIgd2l0aCBhIG5hbWUgaXMgZW5jb3VudGVyZWQgaW4gYSBwb3NpdGl2ZSBhc3NlcnRpb24gdGhhdCBpcyB0cnVlLCB0aGUKK25hbWUgaXMgcmVjb3JkZWQgYW5kIHBhc3NlZCBiYWNrIGlmIGl0IGlzIHRoZSBsYXN0LWVuY291bnRlcmVkLiBUaGlzIGRvZXMgbm90CitoYXBwZW4gZm9yIG5lZ2F0aXZlIGFzc2VydGlvbnMgb3IgZmFpbGluZyBwb3NpdGl2ZSBhc3NlcnRpb25zLgorPC9QPgorPFA+CitBZnRlciBhIHBhcnRpYWwgbWF0Y2ggb3IgYSBmYWlsZWQgbWF0Y2gsIHRoZSBsYXN0IGVuY291bnRlcmVkIG5hbWUgaW4gdGhlCitlbnRpcmUgbWF0Y2ggcHJvY2VzcyBpcyByZXR1cm5lZC4gRm9yIGV4YW1wbGU6Cis8cHJlPgorICAgIHJlJiM2MjsgL1goKk1BUks6QSlZfFgoKk1BUks6QilaL21hcmsKKyAgZGF0YSYjNjI7IFhQCisgIE5vIG1hdGNoLCBtYXJrID0gQgorPC9wcmU+CitOb3RlIHRoYXQgaW4gdGhpcyB1bmFuY2hvcmVkIGV4YW1wbGUgdGhlIG1hcmsgaXMgcmV0YWluZWQgZnJvbSB0aGUgbWF0Y2gKK2F0dGVtcHQgdGhhdCBzdGFydGVkIGF0IHRoZSBsZXR0ZXIgIlgiIGluIHRoZSBzdWJqZWN0LiBTdWJzZXF1ZW50IG1hdGNoCithdHRlbXB0cyBzdGFydGluZyBhdCAiUCIgYW5kIHRoZW4gd2l0aCBhbiBlbXB0eSBzdHJpbmcgZG8gbm90IGdldCBhcyBmYXIgYXMgdGhlCisoKk1BUkspIGl0ZW0sIGJ1dCBuZXZlcnRoZWxlc3MgZG8gbm90IHJlc2V0IGl0LgorPC9QPgorPFA+CitJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gKCpNQVJLKSB2YWx1ZXMgYWZ0ZXIgZmFpbGVkIG1hdGNoZXMsIHlvdSBzaG91bGQKK3Byb2JhYmx5IHNldCB0aGUgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUgb3B0aW9uCis8YSBocmVmPSIjbm9vcHRpbWl6ZSI+KHNlZSBhYm92ZSk8L2E+Cit0byBlbnN1cmUgdGhhdCB0aGUgbWF0Y2ggaXMgYWx3YXlzIGF0dGVtcHRlZC4KKzwvUD4KKzxicj48Yj4KK1ZlcmJzIHRoYXQgYWN0IGFmdGVyIGJhY2t0cmFja2luZworPC9iPjxicj4KKzxQPgorVGhlIGZvbGxvd2luZyB2ZXJicyBkbyBub3RoaW5nIHdoZW4gdGhleSBhcmUgZW5jb3VudGVyZWQuIE1hdGNoaW5nIGNvbnRpbnVlcword2l0aCB3aGF0IGZvbGxvd3MsIGJ1dCBpZiB0aGVyZSBpcyBubyBzdWJzZXF1ZW50IG1hdGNoLCBjYXVzaW5nIGEgYmFja3RyYWNrIHRvCit0aGUgdmVyYiwgYSBmYWlsdXJlIGlzIGZvcmNlZC4gVGhhdCBpcywgYmFja3RyYWNraW5nIGNhbm5vdCBwYXNzIHRvIHRoZSBsZWZ0IG9mCit0aGUgdmVyYi4gSG93ZXZlciwgd2hlbiBvbmUgb2YgdGhlc2UgdmVyYnMgYXBwZWFycyBpbnNpZGUgYW4gYXRvbWljIGdyb3VwCisod2hpY2ggaW5jbHVkZXMgYW55IGdyb3VwIHRoYXQgaXMgY2FsbGVkIGFzIGEgc3Vicm91dGluZSkgb3IgaW4gYW4gYXNzZXJ0aW9uCit0aGF0IGlzIHRydWUsIGl0cyBlZmZlY3QgaXMgY29uZmluZWQgdG8gdGhhdCBncm91cCwgYmVjYXVzZSBvbmNlIHRoZSBncm91cCBoYXMKK2JlZW4gbWF0Y2hlZCwgdGhlcmUgaXMgbmV2ZXIgYW55IGJhY2t0cmFja2luZyBpbnRvIGl0LiBJbiB0aGlzIHNpdHVhdGlvbiwKK2JhY2t0cmFja2luZyBoYXMgdG8ganVtcCB0byB0aGUgbGVmdCBvZiB0aGUgZW50aXJlIGF0b21pYyBncm91cCBvciBhc3NlcnRpb24uCis8L1A+Cis8UD4KK1RoZXNlIHZlcmJzIGRpZmZlciBpbiBleGFjdGx5IHdoYXQga2luZCBvZiBmYWlsdXJlIG9jY3VycyB3aGVuIGJhY2t0cmFja2luZworcmVhY2hlcyB0aGVtLiBUaGUgYmVoYXZpb3VyIGRlc2NyaWJlZCBiZWxvdyBpcyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgdmVyYiBpcworbm90IGluIGEgc3Vicm91dGluZSBvciBhbiBhc3NlcnRpb24uIFN1YnNlcXVlbnQgc2VjdGlvbnMgY292ZXIgdGhlc2Ugc3BlY2lhbAorY2FzZXMuCis8cHJlPgorICAoKkNPTU1JVCkKKzwvcHJlPgorVGhpcyB2ZXJiLCB3aGljaCBtYXkgbm90IGJlIGZvbGxvd2VkIGJ5IGEgbmFtZSwgY2F1c2VzIHRoZSB3aG9sZSBtYXRjaCB0byBmYWlsCitvdXRyaWdodCBpZiB0aGVyZSBpcyBhIGxhdGVyIG1hdGNoaW5nIGZhaWx1cmUgdGhhdCBjYXVzZXMgYmFja3RyYWNraW5nIHRvIHJlYWNoCitpdC4gRXZlbiBpZiB0aGUgcGF0dGVybiBpcyB1bmFuY2hvcmVkLCBubyBmdXJ0aGVyIGF0dGVtcHRzIHRvIGZpbmQgYSBtYXRjaCBieQorYWR2YW5jaW5nIHRoZSBzdGFydGluZyBwb2ludCB0YWtlIHBsYWNlLiBJZiAoKkNPTU1JVCkgaXMgdGhlIG9ubHkgYmFja3RyYWNraW5nCit2ZXJiIHRoYXQgaXMgZW5jb3VudGVyZWQsIG9uY2UgaXQgaGFzIGJlZW4gcGFzc2VkIDxiPnBjcmUyX21hdGNoKCk8L2I+IGlzCitjb21taXR0ZWQgdG8gZmluZGluZyBhIG1hdGNoIGF0IHRoZSBjdXJyZW50IHN0YXJ0aW5nIHBvaW50LCBvciBub3QgYXQgYWxsLiBGb3IKK2V4YW1wbGU6Cis8cHJlPgorICBhKygqQ09NTUlUKWIKKzwvcHJlPgorVGhpcyBtYXRjaGVzICJ4eGFhYiIgYnV0IG5vdCAiYWFjYWFiIi4gSXQgY2FuIGJlIHRob3VnaHQgb2YgYXMgYSBraW5kIG9mCitkeW5hbWljIGFuY2hvciwgb3IgIkkndmUgc3RhcnRlZCwgc28gSSBtdXN0IGZpbmlzaC4iIFRoZSBuYW1lIG9mIHRoZSBtb3N0CityZWNlbnRseSBwYXNzZWQgKCpNQVJLKSBpbiB0aGUgcGF0aCBpcyBwYXNzZWQgYmFjayB3aGVuICgqQ09NTUlUKSBmb3JjZXMgYQorbWF0Y2ggZmFpbHVyZS4KKzwvUD4KKzxQPgorSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBiYWNrdHJhY2tpbmcgdmVyYiBpbiBhIHBhdHRlcm4sIGEgZGlmZmVyZW50IG9uZSB0aGF0Citmb2xsb3dzICgqQ09NTUlUKSBtYXkgYmUgdHJpZ2dlcmVkIGZpcnN0LCBzbyBtZXJlbHkgcGFzc2luZyAoKkNPTU1JVCkgZHVyaW5nIGEKK21hdGNoIGRvZXMgbm90IGFsd2F5cyBndWFyYW50ZWUgdGhhdCBhIG1hdGNoIG11c3QgYmUgYXQgdGhpcyBzdGFydGluZyBwb2ludC4KKzwvUD4KKzxQPgorTm90ZSB0aGF0ICgqQ09NTUlUKSBhdCB0aGUgc3RhcnQgb2YgYSBwYXR0ZXJuIGlzIG5vdCB0aGUgc2FtZSBhcyBhbiBhbmNob3IsCit1bmxlc3MgUENSRTIncyBzdGFydC1vZi1tYXRjaCBvcHRpbWl6YXRpb25zIGFyZSB0dXJuZWQgb2ZmLCBhcyBzaG93biBpbiB0aGlzCitvdXRwdXQgZnJvbSA8Yj5wY3JlMnRlc3Q8L2I+OgorPHByZT4KKyAgICByZSYjNjI7IC8oKkNPTU1JVClhYmMvCisgIGRhdGEmIzYyOyB4eXphYmMKKyAgIDA6IGFiYworICBkYXRhJiM2MjsKKyAgcmUmIzYyOyAvKCpDT01NSVQpYWJjL25vX3N0YXJ0X29wdGltaXplCisgIGRhdGEmIzYyOyB4eXphYmMKKyAgTm8gbWF0Y2gKKzwvcHJlPgorRm9yIHRoZSBmaXJzdCBwYXR0ZXJuLCBQQ1JFMiBrbm93cyB0aGF0IGFueSBtYXRjaCBtdXN0IHN0YXJ0IHdpdGggImEiLCBzbyB0aGUKK29wdGltaXphdGlvbiBza2lwcyBhbG9uZyB0aGUgc3ViamVjdCB0byAiYSIgYmVmb3JlIGFwcGx5aW5nIHRoZSBwYXR0ZXJuIHRvIHRoZQorZmlyc3Qgc2V0IG9mIGRhdGEuIFRoZSBtYXRjaCBhdHRlbXB0IHRoZW4gc3VjY2VlZHMuIFRoZSBzZWNvbmQgcGF0dGVybiBkaXNhYmxlcwordGhlIG9wdGltaXphdGlvbiB0aGF0IHNraXBzIGFsb25nIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIFRoZSBwYXR0ZXJuIGlzIG5vdworYXBwbGllZCBzdGFydGluZyBhdCAieCIsIGFuZCBzbyB0aGUgKCpDT01NSVQpIGNhdXNlcyB0aGUgbWF0Y2ggdG8gZmFpbCB3aXRob3V0Cit0cnlpbmcgYW55IG90aGVyIHN0YXJ0aW5nIHBvaW50cy4KKzxwcmU+CisgICgqUFJVTkUpIG9yICgqUFJVTkU6TkFNRSkKKzwvcHJlPgorVGhpcyB2ZXJiIGNhdXNlcyB0aGUgbWF0Y2ggdG8gZmFpbCBhdCB0aGUgY3VycmVudCBzdGFydGluZyBwb3NpdGlvbiBpbiB0aGUKK3N1YmplY3QgaWYgdGhlcmUgaXMgYSBsYXRlciBtYXRjaGluZyBmYWlsdXJlIHRoYXQgY2F1c2VzIGJhY2t0cmFja2luZyB0byByZWFjaAoraXQuIElmIHRoZSBwYXR0ZXJuIGlzIHVuYW5jaG9yZWQsIHRoZSBub3JtYWwgImJ1bXBhbG9uZyIgYWR2YW5jZSB0byB0aGUgbmV4dAorc3RhcnRpbmcgY2hhcmFjdGVyIHRoZW4gaGFwcGVucy4gQmFja3RyYWNraW5nIGNhbiBvY2N1ciBhcyB1c3VhbCB0byB0aGUgbGVmdCBvZgorKCpQUlVORSksIGJlZm9yZSBpdCBpcyByZWFjaGVkLCBvciB3aGVuIG1hdGNoaW5nIHRvIHRoZSByaWdodCBvZiAoKlBSVU5FKSwgYnV0CitpZiB0aGVyZSBpcyBubyBtYXRjaCB0byB0aGUgcmlnaHQsIGJhY2t0cmFja2luZyBjYW5ub3QgY3Jvc3MgKCpQUlVORSkuIEluCitzaW1wbGUgY2FzZXMsIHRoZSB1c2Ugb2YgKCpQUlVORSkgaXMganVzdCBhbiBhbHRlcm5hdGl2ZSB0byBhbiBhdG9taWMgZ3JvdXAgb3IKK3Bvc3Nlc3NpdmUgcXVhbnRpZmllciwgYnV0IHRoZXJlIGFyZSBzb21lIHVzZXMgb2YgKCpQUlVORSkgdGhhdCBjYW5ub3QgYmUKK2V4cHJlc3NlZCBpbiBhbnkgb3RoZXIgd2F5LiBJbiBhbiBhbmNob3JlZCBwYXR0ZXJuICgqUFJVTkUpIGhhcyB0aGUgc2FtZSBlZmZlY3QKK2FzICgqQ09NTUlUKS4KKzwvUD4KKzxQPgorVGhlIGJlaGF2aW91ciBvZiAoKlBSVU5FOk5BTUUpIGlzIHRoZSBub3QgdGhlIHNhbWUgYXMgKCpNQVJLOk5BTUUpKCpQUlVORSkuCitJdCBpcyBsaWtlICgqTUFSSzpOQU1FKSBpbiB0aGF0IHRoZSBuYW1lIGlzIHJlbWVtYmVyZWQgZm9yIHBhc3NpbmcgYmFjayB0byB0aGUKK2NhbGxlci4gSG93ZXZlciwgKCpTS0lQOk5BTUUpIHNlYXJjaGVzIG9ubHkgZm9yIG5hbWVzIHNldCB3aXRoICgqTUFSSyksCitpZ25vcmluZyB0aG9zZSBzZXQgYnkgKCpQUlVORSkgb3IgKCpUSEVOKS4KKzxwcmU+CisgICgqU0tJUCkKKzwvcHJlPgorVGhpcyB2ZXJiLCB3aGVuIGdpdmVuIHdpdGhvdXQgYSBuYW1lLCBpcyBsaWtlICgqUFJVTkUpLCBleGNlcHQgdGhhdCBpZiB0aGUKK3BhdHRlcm4gaXMgdW5hbmNob3JlZCwgdGhlICJidW1wYWxvbmciIGFkdmFuY2UgaXMgbm90IHRvIHRoZSBuZXh0IGNoYXJhY3RlciwKK2J1dCB0byB0aGUgcG9zaXRpb24gaW4gdGhlIHN1YmplY3Qgd2hlcmUgKCpTS0lQKSB3YXMgZW5jb3VudGVyZWQuICgqU0tJUCkKK3NpZ25pZmllcyB0aGF0IHdoYXRldmVyIHRleHQgd2FzIG1hdGNoZWQgbGVhZGluZyB1cCB0byBpdCBjYW5ub3QgYmUgcGFydCBvZiBhCitzdWNjZXNzZnVsIG1hdGNoLiBDb25zaWRlcjoKKzxwcmU+CisgIGErKCpTS0lQKWIKKzwvcHJlPgorSWYgdGhlIHN1YmplY3QgaXMgImFhYWFjLi4uIiwgYWZ0ZXIgdGhlIGZpcnN0IG1hdGNoIGF0dGVtcHQgZmFpbHMgKHN0YXJ0aW5nIGF0Cit0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcpLCB0aGUgc3RhcnRpbmcgcG9pbnQgc2tpcHMgb24gdG8gc3RhcnQgdGhlCituZXh0IGF0dGVtcHQgYXQgImMiLiBOb3RlIHRoYXQgYSBwb3NzZXNzaXZlIHF1YW50aWZlciBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lCitlZmZlY3QgYXMgdGhpcyBleGFtcGxlOyBhbHRob3VnaCBpdCB3b3VsZCBzdXBwcmVzcyBiYWNrdHJhY2tpbmcgZHVyaW5nIHRoZQorZmlyc3QgbWF0Y2ggYXR0ZW1wdCwgdGhlIHNlY29uZCBhdHRlbXB0IHdvdWxkIHN0YXJ0IGF0IHRoZSBzZWNvbmQgY2hhcmFjdGVyCitpbnN0ZWFkIG9mIHNraXBwaW5nIG9uIHRvICJjIi4KKzxwcmU+CisgICgqU0tJUDpOQU1FKQorPC9wcmU+CitXaGVuICgqU0tJUCkgaGFzIGFuIGFzc29jaWF0ZWQgbmFtZSwgaXRzIGJlaGF2aW91ciBpcyBtb2RpZmllZC4gV2hlbiBpdCBpcwordHJpZ2dlcmVkLCB0aGUgcHJldmlvdXMgcGF0aCB0aHJvdWdoIHRoZSBwYXR0ZXJuIGlzIHNlYXJjaGVkIGZvciB0aGUgbW9zdAorcmVjZW50ICgqTUFSSykgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZS4gSWYgb25lIGlzIGZvdW5kLCB0aGUgImJ1bXBhbG9uZyIgYWR2YW5jZQoraXMgdG8gdGhlIHN1YmplY3QgcG9zaXRpb24gdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0ICgqTUFSSykgaW5zdGVhZCBvZiB0byB3aGVyZQorKCpTS0lQKSB3YXMgZW5jb3VudGVyZWQuIElmIG5vICgqTUFSSykgd2l0aCBhIG1hdGNoaW5nIG5hbWUgaXMgZm91bmQsIHRoZQorKCpTS0lQKSBpcyBpZ25vcmVkLgorPC9QPgorPFA+CitOb3RlIHRoYXQgKCpTS0lQOk5BTUUpIHNlYXJjaGVzIG9ubHkgZm9yIG5hbWVzIHNldCBieSAoKk1BUks6TkFNRSkuIEl0IGlnbm9yZXMKK25hbWVzIHRoYXQgYXJlIHNldCBieSAoKlBSVU5FOk5BTUUpIG9yICgqVEhFTjpOQU1FKS4KKzxwcmU+CisgICgqVEhFTikgb3IgKCpUSEVOOk5BTUUpCis8L3ByZT4KK1RoaXMgdmVyYiBjYXVzZXMgYSBza2lwIHRvIHRoZSBuZXh0IGlubmVybW9zdCBhbHRlcm5hdGl2ZSB3aGVuIGJhY2t0cmFja2luZworcmVhY2hlcyBpdC4gVGhhdCBpcywgaXQgY2FuY2VscyBhbnkgZnVydGhlciBiYWNrdHJhY2tpbmcgd2l0aGluIHRoZSBjdXJyZW50CithbHRlcm5hdGl2ZS4gSXRzIG5hbWUgY29tZXMgZnJvbSB0aGUgb2JzZXJ2YXRpb24gdGhhdCBpdCBjYW4gYmUgdXNlZCBmb3IgYQorcGF0dGVybi1iYXNlZCBpZi10aGVuLWVsc2UgYmxvY2s6Cis8cHJlPgorICAoIENPTkQxICgqVEhFTikgRk9PIHwgQ09ORDIgKCpUSEVOKSBCQVIgfCBDT05EMyAoKlRIRU4pIEJBWiApIC4uLgorPC9wcmU+CitJZiB0aGUgQ09ORDEgcGF0dGVybiBtYXRjaGVzLCBGT08gaXMgdHJpZWQgKGFuZCBwb3NzaWJseSBmdXJ0aGVyIGl0ZW1zIGFmdGVyCit0aGUgZW5kIG9mIHRoZSBncm91cCBpZiBGT08gc3VjY2VlZHMpOyBvbiBmYWlsdXJlLCB0aGUgbWF0Y2hlciBza2lwcyB0byB0aGUKK3NlY29uZCBhbHRlcm5hdGl2ZSBhbmQgdHJpZXMgQ09ORDIsIHdpdGhvdXQgYmFja3RyYWNraW5nIGludG8gQ09ORDEuIElmIHRoYXQKK3N1Y2NlZWRzIGFuZCBCQVIgZmFpbHMsIENPTkQzIGlzIHRyaWVkLiBJZiBzdWJzZXF1ZW50bHkgQkFaIGZhaWxzLCB0aGVyZSBhcmUgbm8KK21vcmUgYWx0ZXJuYXRpdmVzLCBzbyB0aGVyZSBpcyBhIGJhY2t0cmFjayB0byB3aGF0ZXZlciBjYW1lIGJlZm9yZSB0aGUgZW50aXJlCitncm91cC4gSWYgKCpUSEVOKSBpcyBub3QgaW5zaWRlIGFuIGFsdGVybmF0aW9uLCBpdCBhY3RzIGxpa2UgKCpQUlVORSkuCis8L1A+Cis8UD4KK1RoZSBiZWhhdmlvdXIgb2YgKCpUSEVOOk5BTUUpIGlzIHRoZSBub3QgdGhlIHNhbWUgYXMgKCpNQVJLOk5BTUUpKCpUSEVOKS4KK0l0IGlzIGxpa2UgKCpNQVJLOk5BTUUpIGluIHRoYXQgdGhlIG5hbWUgaXMgcmVtZW1iZXJlZCBmb3IgcGFzc2luZyBiYWNrIHRvIHRoZQorY2FsbGVyLiBIb3dldmVyLCAoKlNLSVA6TkFNRSkgc2VhcmNoZXMgb25seSBmb3IgbmFtZXMgc2V0IHdpdGggKCpNQVJLKSwKK2lnbm9yaW5nIHRob3NlIHNldCBieSAoKlBSVU5FKSBhbmQgKCpUSEVOKS4KKzwvUD4KKzxQPgorQSBzdWJwYXR0ZXJuIHRoYXQgZG9lcyBub3QgY29udGFpbiBhIHwgY2hhcmFjdGVyIGlzIGp1c3QgYSBwYXJ0IG9mIHRoZQorZW5jbG9zaW5nIGFsdGVybmF0aXZlOyBpdCBpcyBub3QgYSBuZXN0ZWQgYWx0ZXJuYXRpb24gd2l0aCBvbmx5IG9uZQorYWx0ZXJuYXRpdmUuIFRoZSBlZmZlY3Qgb2YgKCpUSEVOKSBleHRlbmRzIGJleW9uZCBzdWNoIGEgc3VicGF0dGVybiB0byB0aGUKK2VuY2xvc2luZyBhbHRlcm5hdGl2ZS4gQ29uc2lkZXIgdGhpcyBwYXR0ZXJuLCB3aGVyZSBBLCBCLCBldGMuIGFyZSBjb21wbGV4CitwYXR0ZXJuIGZyYWdtZW50cyB0aGF0IGRvIG5vdCBjb250YWluIGFueSB8IGNoYXJhY3RlcnMgYXQgdGhpcyBsZXZlbDoKKzxwcmU+CisgIEEgKEIoKlRIRU4pQykgfCBECis8L3ByZT4KK0lmIEEgYW5kIEIgYXJlIG1hdGNoZWQsIGJ1dCB0aGVyZSBpcyBhIGZhaWx1cmUgaW4gQywgbWF0Y2hpbmcgZG9lcyBub3QKK2JhY2t0cmFjayBpbnRvIEE7IGluc3RlYWQgaXQgbW92ZXMgdG8gdGhlIG5leHQgYWx0ZXJuYXRpdmUsIHRoYXQgaXMsIEQuCitIb3dldmVyLCBpZiB0aGUgc3VicGF0dGVybiBjb250YWluaW5nICgqVEhFTikgaXMgZ2l2ZW4gYW4gYWx0ZXJuYXRpdmUsIGl0CitiZWhhdmVzIGRpZmZlcmVudGx5OgorPHByZT4KKyAgQSAoQigqVEhFTilDIHwgKCpGQUlMKSkgfCBECis8L3ByZT4KK1RoZSBlZmZlY3Qgb2YgKCpUSEVOKSBpcyBub3cgY29uZmluZWQgdG8gdGhlIGlubmVyIHN1YnBhdHRlcm4uIEFmdGVyIGEgZmFpbHVyZQoraW4gQywgbWF0Y2hpbmcgbW92ZXMgdG8gKCpGQUlMKSwgd2hpY2ggY2F1c2VzIHRoZSB3aG9sZSBzdWJwYXR0ZXJuIHRvIGZhaWwKK2JlY2F1c2UgdGhlcmUgYXJlIG5vIG1vcmUgYWx0ZXJuYXRpdmVzIHRvIHRyeS4gSW4gdGhpcyBjYXNlLCBtYXRjaGluZyBkb2VzIG5vdworYmFja3RyYWNrIGludG8gQS4KKzwvUD4KKzxQPgorTm90ZSB0aGF0IGEgY29uZGl0aW9uYWwgc3VicGF0dGVybiBpcyBub3QgY29uc2lkZXJlZCBhcyBoYXZpbmcgdHdvCithbHRlcm5hdGl2ZXMsIGJlY2F1c2Ugb25seSBvbmUgaXMgZXZlciB1c2VkLiBJbiBvdGhlciB3b3JkcywgdGhlIHwgY2hhcmFjdGVyIGluCithIGNvbmRpdGlvbmFsIHN1YnBhdHRlcm4gaGFzIGEgZGlmZmVyZW50IG1lYW5pbmcuIElnbm9yaW5nIHdoaXRlIHNwYWNlLAorY29uc2lkZXI6Cis8cHJlPgorICBeLio/ICg/KD89YSkgYSB8IGIoKlRIRU4pYyApCis8L3ByZT4KK0lmIHRoZSBzdWJqZWN0IGlzICJiYSIsIHRoaXMgcGF0dGVybiBkb2VzIG5vdCBtYXRjaC4gQmVjYXVzZSAuKj8gaXMgdW5ncmVlZHksCitpdCBpbml0aWFsbHkgbWF0Y2hlcyB6ZXJvIGNoYXJhY3RlcnMuIFRoZSBjb25kaXRpb24gKD89YSkgdGhlbiBmYWlscywgdGhlCitjaGFyYWN0ZXIgImIiIGlzIG1hdGNoZWQsIGJ1dCAiYyIgaXMgbm90LiBBdCB0aGlzIHBvaW50LCBtYXRjaGluZyBkb2VzIG5vdAorYmFja3RyYWNrIHRvIC4qPyBhcyBtaWdodCBwZXJoYXBzIGJlIGV4cGVjdGVkIGZyb20gdGhlIHByZXNlbmNlIG9mIHRoZSB8CitjaGFyYWN0ZXIuIFRoZSBjb25kaXRpb25hbCBzdWJwYXR0ZXJuIGlzIHBhcnQgb2YgdGhlIHNpbmdsZSBhbHRlcm5hdGl2ZSB0aGF0Citjb21wcmlzZXMgdGhlIHdob2xlIHBhdHRlcm4sIGFuZCBzbyB0aGUgbWF0Y2ggZmFpbHMuIChJZiB0aGVyZSB3YXMgYSBiYWNrdHJhY2sKK2ludG8gLio/LCBhbGxvd2luZyBpdCB0byBtYXRjaCAiYiIsIHRoZSBtYXRjaCB3b3VsZCBzdWNjZWVkLikKKzwvUD4KKzxQPgorVGhlIHZlcmJzIGp1c3QgZGVzY3JpYmVkIHByb3ZpZGUgZm91ciBkaWZmZXJlbnQgInN0cmVuZ3RocyIgb2YgY29udHJvbCB3aGVuCitzdWJzZXF1ZW50IG1hdGNoaW5nIGZhaWxzLiAoKlRIRU4pIGlzIHRoZSB3ZWFrZXN0LCBjYXJyeWluZyBvbiB0aGUgbWF0Y2ggYXQgdGhlCituZXh0IGFsdGVybmF0aXZlLiAoKlBSVU5FKSBjb21lcyBuZXh0LCBmYWlsaW5nIHRoZSBtYXRjaCBhdCB0aGUgY3VycmVudAorc3RhcnRpbmcgcG9zaXRpb24sIGJ1dCBhbGxvd2luZyBhbiBhZHZhbmNlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciAoZm9yIGFuCit1bmFuY2hvcmVkIHBhdHRlcm4pLiAoKlNLSVApIGlzIHNpbWlsYXIsIGV4Y2VwdCB0aGF0IHRoZSBhZHZhbmNlIG1heSBiZSBtb3JlCit0aGFuIG9uZSBjaGFyYWN0ZXIuICgqQ09NTUlUKSBpcyB0aGUgc3Ryb25nZXN0LCBjYXVzaW5nIHRoZSBlbnRpcmUgbWF0Y2ggdG8KK2ZhaWwuCis8L1A+Cis8YnI+PGI+CitNb3JlIHRoYW4gb25lIGJhY2t0cmFja2luZyB2ZXJiCis8L2I+PGJyPgorPFA+CitJZiBtb3JlIHRoYW4gb25lIGJhY2t0cmFja2luZyB2ZXJiIGlzIHByZXNlbnQgaW4gYSBwYXR0ZXJuLCB0aGUgb25lIHRoYXQgaXMKK2JhY2t0cmFja2VkIG9udG8gZmlyc3QgYWN0cy4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoaXMgcGF0dGVybiwgd2hlcmUgQSwgQiwKK2V0Yy4gYXJlIGNvbXBsZXggcGF0dGVybiBmcmFnbWVudHM6Cis8cHJlPgorICAoQSgqQ09NTUlUKUIoKlRIRU4pQ3xBQkQpCis8L3ByZT4KK0lmIEEgbWF0Y2hlcyBidXQgQiBmYWlscywgdGhlIGJhY2t0cmFjayB0byAoKkNPTU1JVCkgY2F1c2VzIHRoZSBlbnRpcmUgbWF0Y2ggdG8KK2ZhaWwuIEhvd2V2ZXIsIGlmIEEgYW5kIEIgbWF0Y2gsIGJ1dCBDIGZhaWxzLCB0aGUgYmFja3RyYWNrIHRvICgqVEhFTikgY2F1c2VzCit0aGUgbmV4dCBhbHRlcm5hdGl2ZSAoQUJEKSB0byBiZSB0cmllZC4gVGhpcyBiZWhhdmlvdXIgaXMgY29uc2lzdGVudCwgYnV0IGlzCitub3QgYWx3YXlzIHRoZSBzYW1lIGFzIFBlcmwncy4gSXQgbWVhbnMgdGhhdCBpZiB0d28gb3IgbW9yZSBiYWNrdHJhY2tpbmcgdmVyYnMKK2FwcGVhciBpbiBzdWNjZXNzaW9uLCBhbGwgdGhlIHRoZSBsYXN0IG9mIHRoZW0gaGFzIG5vIGVmZmVjdC4gQ29uc2lkZXIgdGhpcworZXhhbXBsZToKKzxwcmU+CisgIC4uLigqQ09NTUlUKSgqUFJVTkUpLi4uCis8L3ByZT4KK0lmIHRoZXJlIGlzIGEgbWF0Y2hpbmcgZmFpbHVyZSB0byB0aGUgcmlnaHQsIGJhY2t0cmFja2luZyBvbnRvICgqUFJVTkUpIGNhdXNlcworaXQgdG8gYmUgdHJpZ2dlcmVkLCBhbmQgaXRzIGFjdGlvbiBpcyB0YWtlbi4gVGhlcmUgY2FuIG5ldmVyIGJlIGEgYmFja3RyYWNrCitvbnRvICgqQ09NTUlUKS4KKzxhIG5hbWU9ImJ0cmVwZWF0Ij48L2E+PC9QPgorPGJyPjxiPgorQmFja3RyYWNraW5nIHZlcmJzIGluIHJlcGVhdGVkIGdyb3VwcworPC9iPjxicj4KKzxQPgorUENSRTIgZGlmZmVycyBmcm9tIFBlcmwgaW4gaXRzIGhhbmRsaW5nIG9mIGJhY2t0cmFja2luZyB2ZXJicyBpbiByZXBlYXRlZAorZ3JvdXBzLiBGb3IgZXhhbXBsZSwgY29uc2lkZXI6Cis8cHJlPgorICAvKGEoKkNPTU1JVCliKSthYy8KKzwvcHJlPgorSWYgdGhlIHN1YmplY3QgaXMgImFiYWMiLCBQZXJsIG1hdGNoZXMsIGJ1dCBQQ1JFMiBmYWlscyBiZWNhdXNlIHRoZSAoKkNPTU1JVCkKK2luIHRoZSBzZWNvbmQgcmVwZWF0IG9mIHRoZSBncm91cCBhY3RzLgorPGEgbmFtZT0iYnRhc3NlcnQiPjwvYT48L1A+Cis8YnI+PGI+CitCYWNrdHJhY2tpbmcgdmVyYnMgaW4gYXNzZXJ0aW9ucworPC9iPjxicj4KKzxQPgorKCpGQUlMKSBpbiBhbiBhc3NlcnRpb24gaGFzIGl0cyBub3JtYWwgZWZmZWN0OiBpdCBmb3JjZXMgYW4gaW1tZWRpYXRlCitiYWNrdHJhY2suCis8L1A+Cis8UD4KKygqQUNDRVBUKSBpbiBhIHBvc2l0aXZlIGFzc2VydGlvbiBjYXVzZXMgdGhlIGFzc2VydGlvbiB0byBzdWNjZWVkIHdpdGhvdXQgYW55CitmdXJ0aGVyIHByb2Nlc3NpbmcuIEluIGEgbmVnYXRpdmUgYXNzZXJ0aW9uLCAoKkFDQ0VQVCkgY2F1c2VzIHRoZSBhc3NlcnRpb24gdG8KK2ZhaWwgd2l0aG91dCBhbnkgZnVydGhlciBwcm9jZXNzaW5nLgorPC9QPgorPFA+CitUaGUgb3RoZXIgYmFja3RyYWNraW5nIHZlcmJzIGFyZSBub3QgdHJlYXRlZCBzcGVjaWFsbHkgaWYgdGhleSBhcHBlYXIgaW4gYQorcG9zaXRpdmUgYXNzZXJ0aW9uLiBJbiBwYXJ0aWN1bGFyLCAoKlRIRU4pIHNraXBzIHRvIHRoZSBuZXh0IGFsdGVybmF0aXZlIGluIHRoZQoraW5uZXJtb3N0IGVuY2xvc2luZyBncm91cCB0aGF0IGhhcyBhbHRlcm5hdGlvbnMsIHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgd2l0aGluCit0aGUgYXNzZXJ0aW9uLgorPC9QPgorPFA+CitOZWdhdGl2ZSBhc3NlcnRpb25zIGFyZSwgaG93ZXZlciwgZGlmZmVyZW50LCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBjaGFuZ2luZyBhCitwb3NpdGl2ZSBhc3NlcnRpb24gaW50byBhIG5lZ2F0aXZlIGFzc2VydGlvbiBjaGFuZ2VzIGl0cyByZXN1bHQuIEJhY2t0cmFja2luZworaW50byAoKkNPTU1JVCksICgqU0tJUCksIG9yICgqUFJVTkUpIGNhdXNlcyBhIG5lZ2F0aXZlIGFzc2VydGlvbiB0byBiZSB0cnVlLAord2l0aG91dCBjb25zaWRlcmluZyBhbnkgZnVydGhlciBhbHRlcm5hdGl2ZSBicmFuY2hlcyBpbiB0aGUgYXNzZXJ0aW9uLgorQmFja3RyYWNraW5nIGludG8gKCpUSEVOKSBjYXVzZXMgaXQgdG8gc2tpcCB0byB0aGUgbmV4dCBlbmNsb3NpbmcgYWx0ZXJuYXRpdmUKK3dpdGhpbiB0aGUgYXNzZXJ0aW9uICh0aGUgbm9ybWFsIGJlaGF2aW91ciksIGJ1dCBpZiB0aGUgYXNzZXJ0aW9uIGRvZXMgbm90IGhhdmUKK3N1Y2ggYW4gYWx0ZXJuYXRpdmUsICgqVEhFTikgYmVoYXZlcyBsaWtlICgqUFJVTkUpLgorPGEgbmFtZT0iYnRzdWIiPjwvYT48L1A+Cis8YnI+PGI+CitCYWNrdHJhY2tpbmcgdmVyYnMgaW4gc3Vicm91dGluZXMKKzwvYj48YnI+Cis8UD4KK1RoZXNlIGJlaGF2aW91cnMgb2NjdXIgd2hldGhlciBvciBub3QgdGhlIHN1YnBhdHRlcm4gaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5LgorUGVybCdzIHRyZWF0bWVudCBvZiBzdWJyb3V0aW5lcyBpcyBkaWZmZXJlbnQgaW4gc29tZSBjYXNlcy4KKzwvUD4KKzxQPgorKCpGQUlMKSBpbiBhIHN1YnBhdHRlcm4gY2FsbGVkIGFzIGEgc3Vicm91dGluZSBoYXMgaXRzIG5vcm1hbCBlZmZlY3Q6IGl0IGZvcmNlcworYW4gaW1tZWRpYXRlIGJhY2t0cmFjay4KKzwvUD4KKzxQPgorKCpBQ0NFUFQpIGluIGEgc3VicGF0dGVybiBjYWxsZWQgYXMgYSBzdWJyb3V0aW5lIGNhdXNlcyB0aGUgc3Vicm91dGluZSBtYXRjaCB0bworc3VjY2VlZCB3aXRob3V0IGFueSBmdXJ0aGVyIHByb2Nlc3NpbmcuIE1hdGNoaW5nIHRoZW4gY29udGludWVzIGFmdGVyIHRoZQorc3Vicm91dGluZSBjYWxsLgorPC9QPgorPFA+CisoKkNPTU1JVCksICgqU0tJUCksIGFuZCAoKlBSVU5FKSBpbiBhIHN1YnBhdHRlcm4gY2FsbGVkIGFzIGEgc3Vicm91dGluZSBjYXVzZQordGhlIHN1YnJvdXRpbmUgbWF0Y2ggdG8gZmFpbC4KKzwvUD4KKzxQPgorKCpUSEVOKSBza2lwcyB0byB0aGUgbmV4dCBhbHRlcm5hdGl2ZSBpbiB0aGUgaW5uZXJtb3N0IGVuY2xvc2luZyBncm91cCB3aXRoaW4KK3RoZSBzdWJwYXR0ZXJuIHRoYXQgaGFzIGFsdGVybmF0aXZlcy4gSWYgdGhlcmUgaXMgbm8gc3VjaCBncm91cCB3aXRoaW4gdGhlCitzdWJwYXR0ZXJuLCAoKlRIRU4pIGNhdXNlcyB0aGUgc3Vicm91dGluZSBtYXRjaCB0byBmYWlsLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzI4IiBocmVmPSIjVE9DMSI+U0VFIEFMU088L2E+PGJyPgorPFA+Cis8Yj5wY3JlMmFwaTwvYj4oMyksIDxiPnBjcmUyY2FsbG91dDwvYj4oMyksIDxiPnBjcmUybWF0Y2hpbmc8L2I+KDMpLAorPGI+cGNyZTJzeW50YXg8L2I+KDMpLCA8Yj5wY3JlMjwvYj4oMykuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMjkiIGhyZWY9IiNUT0MxIj5BVVRIT1I8L2E+PGJyPgorPFA+CitQaGlsaXAgSGF6ZWwKKzxicj4KK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKzxicj4KK0NhbWJyaWRnZSwgRW5nbGFuZC4KKzxicj4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMzMCIgaHJlZj0iI1RPQzEiPlJFVklTSU9OPC9hPjxicj4KKzxQPgorTGFzdCB1cGRhdGVkOiAxMyBOb3ZlbWJlciAyMDE1Cis8YnI+CitDb3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKzxicj4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUycGVyZm9ybS5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJwZXJmb3JtLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM5ZDIzYwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUycGVyZm9ybS5odG1sCkBAIC0wLDAgKzEsMTk3IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUycGVyZm9ybSBzcGVjaWZpY2F0aW9uPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5IGJnY29sb3I9IiNGRkZGRkYiIHRleHQ9IiMwMDAwNUEiIGxpbms9IiMwMDY2RkYiIGFsaW5rPSIjMzM5OUZGIiB2bGluaz0iIzIyMjJCQiI+Cis8aDE+cGNyZTJwZXJmb3JtIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8dWw+Cis8bGk+PGEgbmFtZT0iVE9DMSIgaHJlZj0iI1NFQzEiPlBDUkUyIFBFUkZPUk1BTkNFPC9hPgorPGxpPjxhIG5hbWU9IlRPQzIiIGhyZWY9IiNTRUMyIj5DT01QSUxFRCBQQVRURVJOIE1FTU9SWSBVU0FHRTwvYT4KKzxsaT48YSBuYW1lPSJUT0MzIiBocmVmPSIjU0VDMyI+U1RBQ0sgVVNBR0UgQVQgUlVOIFRJTUU8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNCIgaHJlZj0iI1NFQzQiPlBST0NFU1NJTkcgVElNRTwvYT4KKzxsaT48YSBuYW1lPSJUT0M1IiBocmVmPSIjU0VDNSI+QVVUSE9SPC9hPgorPGxpPjxhIG5hbWU9IlRPQzYiIGhyZWY9IiNTRUM2Ij5SRVZJU0lPTjwvYT4KKzwvdWw+Cis8YnI+PGEgbmFtZT0iU0VDMSIgaHJlZj0iI1RPQzEiPlBDUkUyIFBFUkZPUk1BTkNFPC9hPjxicj4KKzxQPgorVHdvIGFzcGVjdHMgb2YgcGVyZm9ybWFuY2UgYXJlIGRpc2N1c3NlZCBiZWxvdzogbWVtb3J5IHVzYWdlIGFuZCBwcm9jZXNzaW5nCit0aW1lLiBUaGUgd2F5IHlvdSBleHByZXNzIHlvdXIgcGF0dGVybiBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYW4gYWZmZWN0IGJvdGgKK29mIHRoZW0uCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMiIgaHJlZj0iI1RPQzEiPkNPTVBJTEVEIFBBVFRFUk4gTUVNT1JZIFVTQUdFPC9hPjxicj4KKzxQPgorUGF0dGVybnMgYXJlIGNvbXBpbGVkIGJ5IFBDUkUyIGludG8gYSByZWFzb25hYmx5IGVmZmljaWVudCBpbnRlcnByZXRpdmUgY29kZSwKK3NvIHRoYXQgbW9zdCBzaW1wbGUgcGF0dGVybnMgZG8gbm90IHVzZSBtdWNoIG1lbW9yeS4gSG93ZXZlciwgdGhlcmUgaXMgb25lIGNhc2UKK3doZXJlIHRoZSBtZW1vcnkgdXNhZ2Ugb2YgYSBjb21waWxlZCBwYXR0ZXJuIGNhbiBiZSB1bmV4cGVjdGVkbHkgbGFyZ2UuIElmIGEKK3BhcmVudGhlc2l6ZWQgc3VicGF0dGVybiBoYXMgYSBxdWFudGlmaWVyIHdpdGggYSBtaW5pbXVtIGdyZWF0ZXIgdGhhbiAxIGFuZC9vcgorYSBsaW1pdGVkIG1heGltdW0sIHRoZSB3aG9sZSBzdWJwYXR0ZXJuIGlzIHJlcGVhdGVkIGluIHRoZSBjb21waWxlZCBjb2RlLiBGb3IKK2V4YW1wbGUsIHRoZSBwYXR0ZXJuCis8cHJlPgorICAoYWJjfGRlZil7Miw0fQorPC9wcmU+CitpcyBjb21waWxlZCBhcyBpZiBpdCB3ZXJlCis8cHJlPgorICAoYWJjfGRlZikoYWJjfGRlZikoKGFiY3xkZWYpKGFiY3xkZWYpPyk/Cis8L3ByZT4KKyhUZWNobmljYWwgYXNpZGU6IEl0IGlzIGRvbmUgdGhpcyB3YXkgc28gdGhhdCBiYWNrdHJhY2sgcG9pbnRzIHdpdGhpbiBlYWNoIG9mCit0aGUgcmVwZXRpdGlvbnMgY2FuIGJlIGluZGVwZW5kZW50bHkgbWFpbnRhaW5lZC4pCis8L1A+Cis8UD4KK0ZvciByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHF1YW50aWZpZXJzIHVzZSBvbmx5IHNtYWxsIG51bWJlcnMsIHRoaXMgaXMgbm90Cit1c3VhbGx5IGEgcHJvYmxlbS4gSG93ZXZlciwgaWYgdGhlIG51bWJlcnMgYXJlIGxhcmdlLCBhbmQgcGFydGljdWxhcmx5IGlmIHN1Y2gKK3JlcGV0aXRpb25zIGFyZSBuZXN0ZWQsIHRoZSBtZW1vcnkgdXNhZ2UgY2FuIGJlY29tZSBhbiBlbWJhcnJhc3NtZW50LiBGb3IKK2V4YW1wbGUsIHRoZSB2ZXJ5IHNpbXBsZSBwYXR0ZXJuCis8cHJlPgorICAoKGFiKXsxLDEwMDB9Yyl7MSwzfQorPC9wcmU+Cit1c2VzIDUxSyBieXRlcyB3aGVuIGNvbXBpbGVkIHVzaW5nIHRoZSA4LWJpdCBsaWJyYXJ5LiBXaGVuIFBDUkUyIGlzIGNvbXBpbGVkCit3aXRoIGl0cyBkZWZhdWx0IGludGVybmFsIHBvaW50ZXIgc2l6ZSBvZiB0d28gYnl0ZXMsIHRoZSBzaXplIGxpbWl0IG9uIGEKK2NvbXBpbGVkIHBhdHRlcm4gaXMgNjRLIGNvZGUgdW5pdHMgaW4gdGhlIDgtYml0IGFuZCAxNi1iaXQgbGlicmFyaWVzLCBhbmQgdGhpcworaXMgcmVhY2hlZCB3aXRoIHRoZSBhYm92ZSBwYXR0ZXJuIGlmIHRoZSBvdXRlciByZXBldGl0aW9uIGlzIGluY3JlYXNlZCBmcm9tIDMKK3RvIDQuIFBDUkUyIGNhbiBiZSBjb21waWxlZCB0byB1c2UgbGFyZ2VyIGludGVybmFsIHBvaW50ZXJzIGFuZCB0aHVzIGhhbmRsZQorbGFyZ2VyIGNvbXBpbGVkIHBhdHRlcm5zLCBidXQgaXQgaXMgYmV0dGVyIHRvIHRyeSB0byByZXdyaXRlIHlvdXIgcGF0dGVybiB0bwordXNlIGxlc3MgbWVtb3J5IGlmIHlvdSBjYW4uCis8L1A+Cis8UD4KK09uZSB3YXkgb2YgcmVkdWNpbmcgdGhlIG1lbW9yeSB1c2FnZSBmb3Igc3VjaCBwYXR0ZXJucyBpcyB0byBtYWtlIHVzZSBvZgorUENSRTIncworPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwjc3VicGF0dGVybnNhc3N1YnJvdXRpbmVzIj4ic3Vicm91dGluZSI8L2E+CitmYWNpbGl0eS4gUmUtd3JpdGluZyB0aGUgYWJvdmUgcGF0dGVybiBhcworPHByZT4KKyAgKChhYikoPzIpezAsOTk5fWMpKD8xKXswLDJ9Cis8L3ByZT4KK3JlZHVjZXMgdGhlIG1lbW9yeSByZXF1aXJlbWVudHMgdG8gMThLLCBhbmQgaW5kZWVkIGl0IHJlbWFpbnMgdW5kZXIgMjBLIGV2ZW4KK3dpdGggdGhlIG91dGVyIHJlcGV0aXRpb24gaW5jcmVhc2VkIHRvIDEwMC4gSG93ZXZlciwgdGhpcyBwYXR0ZXJuIGlzIG5vdAorZXhhY3RseSBlcXVpdmFsZW50LCBiZWNhdXNlIHRoZSAic3Vicm91dGluZSIgY2FsbHMgYXJlIHRyZWF0ZWQgYXMKKzxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sI2F0b21pY2dyb3VwIj5hdG9taWMgZ3JvdXBzPC9hPgoraW50byB3aGljaCB0aGVyZSBjYW4gYmUgbm8gYmFja3RyYWNraW5nIGlmIHRoZXJlIGlzIGEgc3Vic2VxdWVudCBtYXRjaGluZworZmFpbHVyZS4gVGhlcmVmb3JlLCBQQ1JFMiBjYW5ub3QgZG8gdGhpcyBraW5kIG9mIHJld3JpdGluZyBhdXRvbWF0aWNhbGx5LgorRnVydGhlcm1vcmUsIHRoZXJlIGlzIGEgbm90aWNlYWJsZSBsb3NzIG9mIHNwZWVkIHdoZW4gZXhlY3V0aW5nIHRoZSBtb2RpZmllZAorcGF0dGVybi4gTmV2ZXJ0aGVsZXNzLCBpZiB0aGUgYXRvbWljIGdyb3VwaW5nIGlzIG5vdCBhIHByb2JsZW0gYW5kIHRoZSBsb3NzIG9mCitzcGVlZCBpcyBhY2NlcHRhYmxlLCB0aGlzIGtpbmQgb2YgcmV3cml0aW5nIHdpbGwgYWxsb3cgeW91IHRvIHByb2Nlc3MgcGF0dGVybnMKK3RoYXQgUENSRTIgY2Fubm90IG90aGVyd2lzZSBoYW5kbGUuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMyIgaHJlZj0iI1RPQzEiPlNUQUNLIFVTQUdFIEFUIFJVTiBUSU1FPC9hPjxicj4KKzxQPgorV2hlbiA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBpcyB1c2VkIGZvciBtYXRjaGluZywgY2VydGFpbiBraW5kcyBvZiBwYXR0ZXJuIGNhbgorY2F1c2UgaXQgdG8gdXNlIGxhcmdlIGFtb3VudHMgb2YgdGhlIHByb2Nlc3Mgc3RhY2suIEluIHNvbWUgZW52aXJvbm1lbnRzIHRoZQorZGVmYXVsdCBwcm9jZXNzIHN0YWNrIGlzIHF1aXRlIHNtYWxsLCBhbmQgaWYgaXQgcnVucyBvdXQgdGhlIHJlc3VsdCBpcyBvZnRlbgorU0lHU0VHVi4gUmV3cml0aW5nIHlvdXIgcGF0dGVybiBjYW4gb2Z0ZW4gaGVscC4gVGhlCis8YSBocmVmPSJwY3JlMnN0YWNrLmh0bWwiPjxiPnBjcmUyc3RhY2s8L2I+PC9hPgorZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhpcyBpc3N1ZSBpbiBkZXRhaWwuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNCIgaHJlZj0iI1RPQzEiPlBST0NFU1NJTkcgVElNRTwvYT48YnI+Cis8UD4KK0NlcnRhaW4gaXRlbXMgaW4gcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5zIGFyZSBwcm9jZXNzZWQgbW9yZSBlZmZpY2llbnRseQordGhhbiBvdGhlcnMuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHVzZSBhIGNoYXJhY3RlciBjbGFzcyBsaWtlIFthZWlvdV0gdGhhbiBhCitzZXQgb2Ygc2luZ2xlLWNoYXJhY3RlciBhbHRlcm5hdGl2ZXMgc3VjaCBhcyAoYXxlfGl8b3x1KS4gSW4gZ2VuZXJhbCwgdGhlCitzaW1wbGVzdCBjb25zdHJ1Y3Rpb24gdGhhdCBwcm92aWRlcyB0aGUgcmVxdWlyZWQgYmVoYXZpb3VyIGlzIHVzdWFsbHkgdGhlIG1vc3QKK2VmZmljaWVudC4gSmVmZnJleSBGcmllZGwncyBib29rIGNvbnRhaW5zIGEgbG90IG9mIHVzZWZ1bCBnZW5lcmFsIGRpc2N1c3Npb24KK2Fib3V0IG9wdGltaXppbmcgcmVndWxhciBleHByZXNzaW9ucyBmb3IgZWZmaWNpZW50IHBlcmZvcm1hbmNlLiBUaGlzIGRvY3VtZW50Citjb250YWlucyBhIGZldyBvYnNlcnZhdGlvbnMgYWJvdXQgUENSRTIuCis8L1A+Cis8UD4KK1VzaW5nIFVuaWNvZGUgY2hhcmFjdGVyIHByb3BlcnRpZXMgKHRoZSBccCwgXFAsIGFuZCBcWCBlc2NhcGVzKSBpcyBzbG93LAorYmVjYXVzZSBQQ1JFMiBoYXMgdG8gdXNlIGEgbXVsdGktc3RhZ2UgdGFibGUgbG9va3VwIHdoZW5ldmVyIGl0IG5lZWRzIGEKK2NoYXJhY3RlcidzIHByb3BlcnR5LiBJZiB5b3UgY2FuIGZpbmQgYW4gYWx0ZXJuYXRpdmUgcGF0dGVybiB0aGF0IGRvZXMgbm90IHVzZQorY2hhcmFjdGVyIHByb3BlcnRpZXMsIGl0IHdpbGwgcHJvYmFibHkgYmUgZmFzdGVyLgorPC9QPgorPFA+CitCeSBkZWZhdWx0LCB0aGUgZXNjYXBlIHNlcXVlbmNlcyBcYiwgXGQsIFxzLCBhbmQgXHcsIGFuZCB0aGUgUE9TSVgKK2NoYXJhY3RlciBjbGFzc2VzIHN1Y2ggYXMgWzphbHBoYTpdIGRvIG5vdCB1c2UgVW5pY29kZSBwcm9wZXJ0aWVzLCBwYXJ0bHkgZm9yCitiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYW5kIHBhcnRseSBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gSG93ZXZlciwgeW91IGNhbgorc2V0IHRoZSBQQ1JFMl9VQ1Agb3B0aW9uIG9yIHN0YXJ0IHRoZSBwYXR0ZXJuIHdpdGggKCpVQ1ApIGlmIHlvdSB3YW50IFVuaWNvZGUKK2NoYXJhY3RlciBwcm9wZXJ0aWVzIHRvIGJlIHVzZWQuIFRoaXMgY2FuIGRvdWJsZSB0aGUgbWF0Y2hpbmcgdGltZSBmb3IgaXRlbXMKK3N1Y2ggYXMgXGQsIHdoZW4gbWF0Y2hlZCB3aXRoIDxiPnBjcmUyX21hdGNoKCk8L2I+OyB0aGUgcGVyZm9ybWFuY2UgbG9zcyBpcworbGVzcyB3aXRoIGEgREZBIG1hdGNoaW5nIGZ1bmN0aW9uLCBhbmQgaW4gYm90aCBjYXNlcyB0aGVyZSBpcyBub3QgbXVjaAorZGlmZmVyZW5jZSBmb3IgXGIuCis8L1A+Cis8UD4KK1doZW4gYSBwYXR0ZXJuIGJlZ2lucyB3aXRoIC4qIG5vdCBpbiBhdG9taWMgcGFyZW50aGVzZXMsIG5vciBpbiBwYXJlbnRoZXNlcwordGhhdCBhcmUgdGhlIHN1YmplY3Qgb2YgYSBiYWNrcmVmZXJlbmNlLCBhbmQgdGhlIFBDUkUyX0RPVEFMTCBvcHRpb24gaXMgc2V0LAordGhlIHBhdHRlcm4gaXMgaW1wbGljaXRseSBhbmNob3JlZCBieSBQQ1JFMiwgc2luY2UgaXQgY2FuIG1hdGNoIG9ubHkgYXQgdGhlCitzdGFydCBvZiBhIHN1YmplY3Qgc3RyaW5nLiBJZiB0aGUgcGF0dGVybiBoYXMgbXVsdGlwbGUgdG9wLWxldmVsIGJyYW5jaGVzLCB0aGV5CittdXN0IGFsbCBiZSBhbmNob3JhYmxlLiBUaGUgb3B0aW1pemF0aW9uIGNhbiBiZSBkaXNhYmxlZCBieSB0aGUKK1BDUkUyX05PX0RPVFNUQVJfQU5DSE9SIG9wdGlvbiwgYW5kIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgaWYgdGhlIHBhdHRlcm4KK2NvbnRhaW5zICgqUFJVTkUpIG9yICgqU0tJUCkuCis8L1A+Cis8UD4KK0lmIFBDUkUyX0RPVEFMTCBpcyBub3Qgc2V0LCBQQ1JFMiBjYW5ub3QgbWFrZSB0aGlzIG9wdGltaXphdGlvbiwgYmVjYXVzZSB0aGUKK2RvdCBtZXRhY2hhcmFjdGVyIGRvZXMgbm90IHRoZW4gbWF0Y2ggYSBuZXdsaW5lLCBhbmQgaWYgdGhlIHN1YmplY3Qgc3RyaW5nCitjb250YWlucyBuZXdsaW5lcywgdGhlIHBhdHRlcm4gbWF5IG1hdGNoIGZyb20gdGhlIGNoYXJhY3RlciBpbW1lZGlhdGVseQorZm9sbG93aW5nIG9uZSBvZiB0aGVtIGluc3RlYWQgb2YgZnJvbSB0aGUgdmVyeSBzdGFydC4gRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuCis8cHJlPgorICAuKnNlY29uZAorPC9wcmU+CittYXRjaGVzIHRoZSBzdWJqZWN0ICJmaXJzdFxuYW5kIHNlY29uZCIgKHdoZXJlIFxuIHN0YW5kcyBmb3IgYSBuZXdsaW5lCitjaGFyYWN0ZXIpLCB3aXRoIHRoZSBtYXRjaCBzdGFydGluZyBhdCB0aGUgc2V2ZW50aCBjaGFyYWN0ZXIuIEluIG9yZGVyIHRvIGRvCit0aGlzLCBQQ1JFMiBoYXMgdG8gcmV0cnkgdGhlIG1hdGNoIHN0YXJ0aW5nIGFmdGVyIGV2ZXJ5IG5ld2xpbmUgaW4gdGhlIHN1YmplY3QuCis8L1A+Cis8UD4KK0lmIHlvdSBhcmUgdXNpbmcgc3VjaCBhIHBhdHRlcm4gd2l0aCBzdWJqZWN0IHN0cmluZ3MgdGhhdCBkbyBub3QgY29udGFpbgorbmV3bGluZXMsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGlzIG9idGFpbmVkIGJ5IHNldHRpbmcgUENSRTJfRE9UQUxMLCBvciBzdGFydGluZwordGhlIHBhdHRlcm4gd2l0aCBeLiogb3IgXi4qPyB0byBpbmRpY2F0ZSBleHBsaWNpdCBhbmNob3JpbmcuIFRoYXQgc2F2ZXMgUENSRTIKK2Zyb20gaGF2aW5nIHRvIHNjYW4gYWxvbmcgdGhlIHN1YmplY3QgbG9va2luZyBmb3IgYSBuZXdsaW5lIHRvIHJlc3RhcnQgYXQuCis8L1A+Cis8UD4KK0Jld2FyZSBvZiBwYXR0ZXJucyB0aGF0IGNvbnRhaW4gbmVzdGVkIGluZGVmaW5pdGUgcmVwZWF0cy4gVGhlc2UgY2FuIHRha2UgYQorbG9uZyB0aW1lIHRvIHJ1biB3aGVuIGFwcGxpZWQgdG8gYSBzdHJpbmcgdGhhdCBkb2VzIG5vdCBtYXRjaC4gQ29uc2lkZXIgdGhlCitwYXR0ZXJuIGZyYWdtZW50Cis8cHJlPgorICBeKGErKSoKKzwvcHJlPgorVGhpcyBjYW4gbWF0Y2ggImFhYWEiIGluIDE2IGRpZmZlcmVudCB3YXlzLCBhbmQgdGhpcyBudW1iZXIgaW5jcmVhc2VzIHZlcnkKK3JhcGlkbHkgYXMgdGhlIHN0cmluZyBnZXRzIGxvbmdlci4gKFRoZSAqIHJlcGVhdCBjYW4gbWF0Y2ggMCwgMSwgMiwgMywgb3IgNAordGltZXMsIGFuZCBmb3IgZWFjaCBvZiB0aG9zZSBjYXNlcyBvdGhlciB0aGFuIDAgb3IgNCwgdGhlICsgcmVwZWF0cyBjYW4gbWF0Y2gKK2RpZmZlcmVudCBudW1iZXJzIG9mIHRpbWVzLikgV2hlbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBwYXR0ZXJuIGlzIHN1Y2ggdGhhdCB0aGUKK2VudGlyZSBtYXRjaCBpcyBnb2luZyB0byBmYWlsLCBQQ1JFMiBoYXMgaW4gcHJpbmNpcGxlIHRvIHRyeSBldmVyeSBwb3NzaWJsZQordmFyaWF0aW9uLCBhbmQgdGhpcyBjYW4gdGFrZSBhbiBleHRyZW1lbHkgbG9uZyB0aW1lLCBldmVuIGZvciByZWxhdGl2ZWx5IHNob3J0CitzdHJpbmdzLgorPC9QPgorPFA+CitBbiBvcHRpbWl6YXRpb24gY2F0Y2hlcyBzb21lIG9mIHRoZSBtb3JlIHNpbXBsZSBjYXNlcyBzdWNoIGFzCis8cHJlPgorICAoYSspKmIKKzwvcHJlPgord2hlcmUgYSBsaXRlcmFsIGNoYXJhY3RlciBmb2xsb3dzLiBCZWZvcmUgZW1iYXJraW5nIG9uIHRoZSBzdGFuZGFyZCBtYXRjaGluZworcHJvY2VkdXJlLCBQQ1JFMiBjaGVja3MgdGhhdCB0aGVyZSBpcyBhICJiIiBsYXRlciBpbiB0aGUgc3ViamVjdCBzdHJpbmcsIGFuZCBpZgordGhlcmUgaXMgbm90LCBpdCBmYWlscyB0aGUgbWF0Y2ggaW1tZWRpYXRlbHkuIEhvd2V2ZXIsIHdoZW4gdGhlcmUgaXMgbm8KK2ZvbGxvd2luZyBsaXRlcmFsIHRoaXMgb3B0aW1pemF0aW9uIGNhbm5vdCBiZSB1c2VkLiBZb3UgY2FuIHNlZSB0aGUgZGlmZmVyZW5jZQorYnkgY29tcGFyaW5nIHRoZSBiZWhhdmlvdXIgb2YKKzxwcmU+CisgIChhKykqXGQKKzwvcHJlPgord2l0aCB0aGUgcGF0dGVybiBhYm92ZS4gVGhlIGZvcm1lciBnaXZlcyBhIGZhaWx1cmUgYWxtb3N0IGluc3RhbnRseSB3aGVuCithcHBsaWVkIHRvIGEgd2hvbGUgbGluZSBvZiAiYSIgY2hhcmFjdGVycywgd2hlcmVhcyB0aGUgbGF0dGVyIHRha2VzIGFuCithcHByZWNpYWJsZSB0aW1lIHdpdGggc3RyaW5ncyBsb25nZXIgdGhhbiBhYm91dCAyMCBjaGFyYWN0ZXJzLgorPC9QPgorPFA+CitJbiBtYW55IGNhc2VzLCB0aGUgc29sdXRpb24gdG8gdGhpcyBraW5kIG9mIHBlcmZvcm1hbmNlIGlzc3VlIGlzIHRvIHVzZSBhbgorYXRvbWljIGdyb3VwIG9yIGEgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzUiIGhyZWY9IiNUT0MxIj5BVVRIT1I8L2E+PGJyPgorPFA+CitQaGlsaXAgSGF6ZWwKKzxicj4KK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKzxicj4KK0NhbWJyaWRnZSwgRW5nbGFuZC4KKzxicj4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM2IiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgorPFA+CitMYXN0IHVwZGF0ZWQ6IDAyIEphbnVhcnkgMjAxNQorPGJyPgorQ29weXJpZ2h0ICZjb3B5OyAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCis8YnI+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMnBvc2l4Lmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnBvc2l4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE2YTRjMwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUycG9zaXguaHRtbApAQCAtMCwwICsxLDI5OSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMnBvc2l4IHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMnBvc2l4IG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8dWw+Cis8bGk+PGEgbmFtZT0iVE9DMSIgaHJlZj0iI1NFQzEiPlNZTk9QU0lTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzIiIGhyZWY9IiNTRUMyIj5ERVNDUklQVElPTjwvYT4KKzxsaT48YSBuYW1lPSJUT0MzIiBocmVmPSIjU0VDMyI+Q09NUElMSU5HIEEgUEFUVEVSTjwvYT4KKzxsaT48YSBuYW1lPSJUT0M0IiBocmVmPSIjU0VDNCI+TUFUQ0hJTkcgTkVXTElORSBDSEFSQUNURVJTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzUiIGhyZWY9IiNTRUM1Ij5NQVRDSElORyBBIFBBVFRFUk48L2E+Cis8bGk+PGEgbmFtZT0iVE9DNiIgaHJlZj0iI1NFQzYiPkVSUk9SIE1FU1NBR0VTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzciIGhyZWY9IiNTRUM3Ij5NRU1PUlkgVVNBR0U8L2E+Cis8bGk+PGEgbmFtZT0iVE9DOCIgaHJlZj0iI1NFQzgiPkFVVEhPUjwvYT4KKzxsaT48YSBuYW1lPSJUT0M5IiBocmVmPSIjU0VDOSI+UkVWSVNJT048L2E+Cis8L3VsPgorPGJyPjxhIG5hbWU9IlNFQzEiIGhyZWY9IiNUT0MxIj5TWU5PUFNJUzwvYT48YnI+Cis8UD4KKzxiPiNpbmNsdWRlICYjNjA7cGNyZTJwb3NpeC5oJiM2Mjs8L2I+Cis8L1A+Cis8UD4KKzxiPmludCByZWdjb21wKHJlZ2V4X3QgKjxpPnByZWc8L2k+LCBjb25zdCBjaGFyICo8aT5wYXR0ZXJuPC9pPiw8L2I+Cis8Yj4gICAgIGludCA8aT5jZmxhZ3M8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQgcmVnZXhlYyhjb25zdCByZWdleF90ICo8aT5wcmVnPC9pPiwgY29uc3QgY2hhciAqPGk+c3RyaW5nPC9pPiw8L2I+Cis8Yj4gICAgIHNpemVfdCA8aT5ubWF0Y2g8L2k+LCByZWdtYXRjaF90IDxpPnBtYXRjaDwvaT5bXSwgaW50IDxpPmVmbGFnczwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnNpemVfdCByZWdlcnJvcihpbnQgPGk+ZXJyY29kZTwvaT4sIGNvbnN0IHJlZ2V4X3QgKjxpPnByZWc8L2k+LDwvYj4KKzxiPiAgICAgY2hhciAqPGk+ZXJyYnVmPC9pPiwgc2l6ZV90IDxpPmVycmJ1Zl9zaXplPC9pPik7PC9iPgorPGJyPgorPGJyPgorPGI+dm9pZCByZWdmcmVlKHJlZ2V4X3QgKjxpPnByZWc8L2k+KTs8L2I+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMiIgaHJlZj0iI1RPQzEiPkRFU0NSSVBUSU9OPC9hPjxicj4KKzxQPgorVGhpcyBzZXQgb2YgZnVuY3Rpb25zIHByb3ZpZGVzIGEgUE9TSVgtc3R5bGUgQVBJIGZvciB0aGUgUENSRTIgcmVndWxhcgorZXhwcmVzc2lvbiA4LWJpdCBsaWJyYXJ5LiBTZWUgdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+Citkb2N1bWVudGF0aW9uIGZvciBhIGRlc2NyaXB0aW9uIG9mIFBDUkUyJ3MgbmF0aXZlIEFQSSwgd2hpY2ggY29udGFpbnMgbXVjaAorYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LiBUaGVyZSBpcyBubyBQT1NJWC1zdHlsZSB3cmFwcGVyIGZvciBQQ1JFMidzIDE2LWJpdAorYW5kIDMyLWJpdCBsaWJyYXJpZXMuCis8L1A+Cis8UD4KK1RoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGhlcmUgYXJlIGp1c3Qgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCB1bHRpbWF0ZWx5IGNhbGwKK3RoZSBQQ1JFMiBuYXRpdmUgQVBJLiBUaGVpciBwcm90b3R5cGVzIGFyZSBkZWZpbmVkIGluIHRoZSA8Yj5wY3JlMnBvc2l4Lmg8L2I+CitoZWFkZXIgZmlsZSwgYW5kIG9uIFVuaXggc3lzdGVtcyB0aGUgbGlicmFyeSBpdHNlbGYgaXMgY2FsbGVkCis8Yj5saWJwY3JlMi1wb3NpeC5hPC9iPiwgc28gY2FuIGJlIGFjY2Vzc2VkIGJ5IGFkZGluZyA8Yj4tbHBjcmUyLXBvc2l4PC9iPiB0byB0aGUKK2NvbW1hbmQgZm9yIGxpbmtpbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZW0uIEJlY2F1c2UgdGhlIFBPU0lYIGZ1bmN0aW9ucworY2FsbCB0aGUgbmF0aXZlIG9uZXMsIGl0IGlzIGFsc28gbmVjZXNzYXJ5IHRvIGFkZCA8Yj4tbHBjcmUyLTg8L2I+LgorPC9QPgorPFA+CitUaG9zZSBQT1NJWCBvcHRpb24gYml0cyB0aGF0IGNhbiByZWFzb25hYmx5IGJlIG1hcHBlZCB0byBQQ1JFMiBuYXRpdmUgb3B0aW9ucworaGF2ZSBiZWVuIGltcGxlbWVudGVkLiBJbiBhZGRpdGlvbiwgdGhlIG9wdGlvbiBSRUdfRVhURU5ERUQgaXMgZGVmaW5lZCB3aXRoIHRoZQordmFsdWUgemVyby4gVGhpcyBoYXMgbm8gZWZmZWN0LCBidXQgc2luY2UgcHJvZ3JhbXMgdGhhdCBhcmUgd3JpdHRlbiB0byB0aGUKK1BPU0lYIGludGVyZmFjZSBvZnRlbiB1c2UgaXQsIHRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHNsb3QgaW4gUENSRTIgYXMgYQorcmVwbGFjZW1lbnQgbGlicmFyeS4gT3RoZXIgUE9TSVggb3B0aW9ucyBhcmUgbm90IGV2ZW4gZGVmaW5lZC4KKzwvUD4KKzxQPgorVGhlcmUgYXJlIGFsc28gc29tZSBvdGhlciBvcHRpb25zIHRoYXQgYXJlIG5vdCBkZWZpbmVkIGJ5IFBPU0lYLiBUaGVzZSBoYXZlCitiZWVuIGFkZGVkIGF0IHRoZSByZXF1ZXN0IG9mIHVzZXJzIHdobyB3YW50IHRvIG1ha2UgdXNlIG9mIGNlcnRhaW4KK1BDUkUyLXNwZWNpZmljIGZlYXR1cmVzIHZpYSB0aGUgUE9TSVggY2FsbGluZyBpbnRlcmZhY2UuCis8L1A+Cis8UD4KK1doZW4gUENSRTIgaXMgY2FsbGVkIHZpYSB0aGVzZSBmdW5jdGlvbnMsIGl0IGlzIG9ubHkgdGhlIEFQSSB0aGF0IGlzIFBPU0lYLWxpa2UKK2luIHN0eWxlLiBUaGUgc3ludGF4IGFuZCBzZW1hbnRpY3Mgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhlbXNlbHZlcyBhcmUKK3N0aWxsIHRob3NlIG9mIFBlcmwsIHN1YmplY3QgdG8gdGhlIHNldHRpbmcgb2YgdmFyaW91cyBQQ1JFMiBvcHRpb25zLCBhcworZGVzY3JpYmVkIGJlbG93LiAiUE9TSVgtbGlrZSBpbiBzdHlsZSIgbWVhbnMgdGhhdCB0aGUgQVBJIGFwcHJveGltYXRlcyB0byB0aGUKK1BPU0lYIGRlZmluaXRpb247IGl0IGlzIG5vdCBmdWxseSBQT1NJWC1jb21wYXRpYmxlLCBhbmQgaW4gbXVsdGktdW5pdCBlbmNvZGluZworZG9tYWlucyBpdCBpcyBwcm9iYWJseSBldmVuIGxlc3MgY29tcGF0aWJsZS4KKzwvUD4KKzxQPgorVGhlIGhlYWRlciBmb3IgdGhlc2UgZnVuY3Rpb25zIGlzIHN1cHBsaWVkIGFzIDxiPnBjcmUycG9zaXguaDwvYj4gdG8gYXZvaWQgYW55Citwb3RlbnRpYWwgY2xhc2ggd2l0aCBvdGhlciBQT1NJWCBsaWJyYXJpZXMuIEl0IGNhbiwgb2YgY291cnNlLCBiZSByZW5hbWVkIG9yCithbGlhc2VkIGFzIDxiPnJlZ2V4Lmg8L2I+LCB3aGljaCBpcyB0aGUgImNvcnJlY3QiIG5hbWUuIEl0IHByb3ZpZGVzIHR3bworc3RydWN0dXJlIHR5cGVzLCA8aT5yZWdleF90PC9pPiBmb3IgY29tcGlsZWQgaW50ZXJuYWwgZm9ybXMsIGFuZAorPGk+cmVnbWF0Y2hfdDwvaT4gZm9yIHJldHVybmluZyBjYXB0dXJlZCBzdWJzdHJpbmdzLiBJdCBhbHNvIGRlZmluZXMgc29tZQorY29uc3RhbnRzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggIlJFR18iOyB0aGVzZSBhcmUgdXNlZCBmb3Igc2V0dGluZyBvcHRpb25zIGFuZAoraWRlbnRpZnlpbmcgZXJyb3IgY29kZXMuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMyIgaHJlZj0iI1RPQzEiPkNPTVBJTElORyBBIFBBVFRFUk48L2E+PGJyPgorPFA+CitUaGUgZnVuY3Rpb24gPGI+cmVnY29tcCgpPC9iPiBpcyBjYWxsZWQgdG8gY29tcGlsZSBhIHBhdHRlcm4gaW50byBhbgoraW50ZXJuYWwgZm9ybS4gVGhlIHBhdHRlcm4gaXMgYSBDIHN0cmluZyB0ZXJtaW5hdGVkIGJ5IGEgYmluYXJ5IHplcm8sIGFuZAoraXMgcGFzc2VkIGluIHRoZSBhcmd1bWVudCA8aT5wYXR0ZXJuPC9pPi4gVGhlIDxpPnByZWc8L2k+IGFyZ3VtZW50IGlzIGEgcG9pbnRlcgordG8gYSA8Yj5yZWdleF90PC9iPiBzdHJ1Y3R1cmUgdGhhdCBpcyB1c2VkIGFzIGEgYmFzZSBmb3Igc3RvcmluZyBpbmZvcm1hdGlvbgorYWJvdXQgdGhlIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKzwvUD4KKzxQPgorVGhlIGFyZ3VtZW50IDxpPmNmbGFnczwvaT4gaXMgZWl0aGVyIHplcm8sIG9yIGNvbnRhaW5zIG9uZSBvciBtb3JlIG9mIHRoZSBiaXRzCitkZWZpbmVkIGJ5IHRoZSBmb2xsb3dpbmcgbWFjcm9zOgorPHByZT4KKyAgUkVHX0RPVEFMTAorPC9wcmU+CitUaGUgUENSRTJfRE9UQUxMIG9wdGlvbiBpcyBzZXQgd2hlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIHBhc3NlZCBmb3IKK2NvbXBpbGF0aW9uIHRvIHRoZSBuYXRpdmUgZnVuY3Rpb24uIE5vdGUgdGhhdCBSRUdfRE9UQUxMIGlzIG5vdCBwYXJ0IG9mIHRoZQorUE9TSVggc3RhbmRhcmQuCis8cHJlPgorICBSRUdfSUNBU0UKKzwvcHJlPgorVGhlIFBDUkUyX0NBU0VMRVNTIG9wdGlvbiBpcyBzZXQgd2hlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIHBhc3NlZCBmb3IKK2NvbXBpbGF0aW9uIHRvIHRoZSBuYXRpdmUgZnVuY3Rpb24uCis8cHJlPgorICBSRUdfTkVXTElORQorPC9wcmU+CitUaGUgUENSRTJfTVVMVElMSU5FIG9wdGlvbiBpcyBzZXQgd2hlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIHBhc3NlZCBmb3IKK2NvbXBpbGF0aW9uIHRvIHRoZSBuYXRpdmUgZnVuY3Rpb24uIE5vdGUgdGhhdCB0aGlzIGRvZXMgPGk+bm90PC9pPiBtaW1pYyB0aGUKK2RlZmluZWQgUE9TSVggYmVoYXZpb3VyIGZvciBSRUdfTkVXTElORSAoc2VlIHRoZSBmb2xsb3dpbmcgc2VjdGlvbikuCis8cHJlPgorICBSRUdfTk9TVUIKKzwvcHJlPgorVGhlIFBDUkUyX05PX0FVVE9fQ0FQVFVSRSBvcHRpb24gaXMgc2V0IHdoZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBwYXNzZWQKK2ZvciBjb21waWxhdGlvbiB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBJbiBhZGRpdGlvbiwgd2hlbiBhIHBhdHRlcm4gdGhhdCBpcworY29tcGlsZWQgd2l0aCB0aGlzIGZsYWcgaXMgcGFzc2VkIHRvIDxiPnJlZ2V4ZWMoKTwvYj4gZm9yIG1hdGNoaW5nLCB0aGUKKzxpPm5tYXRjaDwvaT4gYW5kIDxpPnBtYXRjaDwvaT4gYXJndW1lbnRzIGFyZSBpZ25vcmVkLCBhbmQgbm8gY2FwdHVyZWQgc3RyaW5ncworYXJlIHJldHVybmVkLgorPHByZT4KKyAgUkVHX1VDUAorPC9wcmU+CitUaGUgUENSRTJfVUNQIG9wdGlvbiBpcyBzZXQgd2hlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIHBhc3NlZCBmb3IKK2NvbXBpbGF0aW9uIHRvIHRoZSBuYXRpdmUgZnVuY3Rpb24uIFRoaXMgY2F1c2VzIFBDUkUyIHRvIHVzZSBVbmljb2RlIHByb3BlcnRpZXMKK3doZW4gbWF0Y2hpbmUgXGQsIFx3LCBldGMuLCBpbnN0ZWFkIG9mIGp1c3QgcmVjb2duaXppbmcgQVNDSUkgdmFsdWVzLiBOb3RlCit0aGF0IFJFR19VQ1AgaXMgbm90IHBhcnQgb2YgdGhlIFBPU0lYIHN0YW5kYXJkLgorPHByZT4KKyAgUkVHX1VOR1JFRURZCis8L3ByZT4KK1RoZSBQQ1JFMl9VTkdSRUVEWSBvcHRpb24gaXMgc2V0IHdoZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBwYXNzZWQgZm9yCitjb21waWxhdGlvbiB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBOb3RlIHRoYXQgUkVHX1VOR1JFRURZIGlzIG5vdCBwYXJ0IG9mIHRoZQorUE9TSVggc3RhbmRhcmQuCis8cHJlPgorICBSRUdfVVRGCis8L3ByZT4KK1RoZSBQQ1JFMl9VVEYgb3B0aW9uIGlzIHNldCB3aGVuIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgcGFzc2VkIGZvcgorY29tcGlsYXRpb24gdG8gdGhlIG5hdGl2ZSBmdW5jdGlvbi4gVGhpcyBjYXVzZXMgdGhlIHBhdHRlcm4gaXRzZWxmIGFuZCBhbGwgZGF0YQorc3RyaW5ncyB1c2VkIGZvciBtYXRjaGluZyBpdCB0byBiZSB0cmVhdGVkIGFzIFVURi04IHN0cmluZ3MuIE5vdGUgdGhhdCBSRUdfVVRGCitpcyBub3QgcGFydCBvZiB0aGUgUE9TSVggc3RhbmRhcmQuCis8L1A+Cis8UD4KK0luIHRoZSBhYnNlbmNlIG9mIHRoZXNlIGZsYWdzLCBubyBvcHRpb25zIGFyZSBwYXNzZWQgdG8gdGhlIG5hdGl2ZSBmdW5jdGlvbi4KK1RoaXMgbWVhbnMgdGhlIHRoZSByZWdleCBpcyBjb21waWxlZCB3aXRoIFBDUkUyIGRlZmF1bHQgc2VtYW50aWNzLiBJbgorcGFydGljdWxhciwgdGhlIHdheSBpdCBoYW5kbGVzIG5ld2xpbmUgY2hhcmFjdGVycyBpbiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgdGhlCitQZXJsIHdheSwgbm90IHRoZSBQT1NJWCB3YXkuIE5vdGUgdGhhdCBzZXR0aW5nIFBDUkUyX01VTFRJTElORSBoYXMgb25seQorPGk+c29tZTwvaT4gb2YgdGhlIGVmZmVjdHMgc3BlY2lmaWVkIGZvciBSRUdfTkVXTElORS4gSXQgZG9lcyBub3QgYWZmZWN0IHRoZSB3YXkKK25ld2xpbmVzIGFyZSBtYXRjaGVkIGJ5IHRoZSBkb3QgbWV0YWNoYXJhY3RlciAodGhleSBhcmUgbm90KSBvciBieSBhIG5lZ2F0aXZlCitjbGFzcyBzdWNoIGFzIFteYV0gKHRoZXkgYXJlKS4KKzwvUD4KKzxQPgorVGhlIHlpZWxkIG9mIDxiPnJlZ2NvbXAoKTwvYj4gaXMgemVybyBvbiBzdWNjZXNzLCBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLiBUaGUKKzxpPnByZWc8L2k+IHN0cnVjdHVyZSBpcyBmaWxsZWQgaW4gb24gc3VjY2VzcywgYW5kIG9uZSBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZQoraXMgcHVibGljOiA8aT5yZV9uc3ViPC9pPiBjb250YWlucyB0aGUgbnVtYmVyIG9mIGNhcHR1cmluZyBzdWJwYXR0ZXJucyBpbgordGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4gVmFyaW91cyBlcnJvciBjb2RlcyBhcmUgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUuCis8L1A+Cis8UD4KK05PVEU6IElmIHRoZSB5aWVsZCBvZiA8Yj5yZWdjb21wKCk8L2I+IGlzIG5vbi16ZXJvLCB5b3UgbXVzdCBub3QgYXR0ZW1wdCB0bwordXNlIHRoZSBjb250ZW50cyBvZiB0aGUgPGk+cHJlZzwvaT4gc3RydWN0dXJlLiBJZiwgZm9yIGV4YW1wbGUsIHlvdSBwYXNzIGl0IHRvCis8Yj5yZWdleGVjKCk8L2I+LCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBhbmQgeW91ciBwcm9ncmFtIGlzIGxpa2VseSB0byBjcmFzaC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM0IiBocmVmPSIjVE9DMSI+TUFUQ0hJTkcgTkVXTElORSBDSEFSQUNURVJTPC9hPjxicj4KKzxQPgorVGhpcyBhcmVhIGlzIG5vdCBzaW1wbGUsIGJlY2F1c2UgUE9TSVggYW5kIFBlcmwgdGFrZSBkaWZmZXJlbnQgdmlld3Mgb2YgdGhpbmdzLgorSXQgaXMgbm90IHBvc3NpYmxlIHRvIGdldCBQQ1JFMiB0byBvYmV5IFBPU0lYIHNlbWFudGljcywgYnV0IHRoZW4gUENSRTIgd2FzCituZXZlciBpbnRlbmRlZCB0byBiZSBhIFBPU0lYIGVuZ2luZS4gVGhlIGZvbGxvd2luZyB0YWJsZSBsaXN0cyB0aGUgZGlmZmVyZW50Citwb3NzaWJpbGl0aWVzIGZvciBtYXRjaGluZyBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gUGVybCBhbmQgUENSRTI6Cis8cHJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0ICAgQ2hhbmdlIHdpdGgKKworICAuIG1hdGNoZXMgbmV3bGluZSAgICAgICAgICBubyAgICAgUENSRTJfRE9UQUxMCisgIG5ld2xpbmUgbWF0Y2hlcyBbXmFdICAgICAgIHllcyAgICBub3QgY2hhbmdlYWJsZQorICAkIG1hdGNoZXMgXG4gYXQgZW5kICAgICAgICB5ZXMgICAgUENSRTJfRE9MTEFSX0VORE9OTFkKKyAgJCBtYXRjaGVzIFxuIGluIG1pZGRsZSAgICAgbm8gICAgIFBDUkUyX01VTFRJTElORQorICBeIG1hdGNoZXMgXG4gaW4gbWlkZGxlICAgICBubyAgICAgUENSRTJfTVVMVElMSU5FCis8L3ByZT4KK1RoaXMgaXMgdGhlIGVxdWl2YWxlbnQgdGFibGUgZm9yIGEgUE9TSVgtY29tcGF0aWJsZSBwYXR0ZXJuIG1hdGNoZXI6Cis8cHJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0ICAgQ2hhbmdlIHdpdGgKKworICAuIG1hdGNoZXMgbmV3bGluZSAgICAgICAgICB5ZXMgICAgUkVHX05FV0xJTkUKKyAgbmV3bGluZSBtYXRjaGVzIFteYV0gICAgICAgeWVzICAgIFJFR19ORVdMSU5FCisgICQgbWF0Y2hlcyBcbiBhdCBlbmQgICAgICAgIG5vICAgICBSRUdfTkVXTElORQorICAkIG1hdGNoZXMgXG4gaW4gbWlkZGxlICAgICBubyAgICAgUkVHX05FV0xJTkUKKyAgXiBtYXRjaGVzIFxuIGluIG1pZGRsZSAgICAgbm8gICAgIFJFR19ORVdMSU5FCis8L3ByZT4KK1RoaXMgYmVoYXZpb3VyIGlzIG5vdCB3aGF0IGhhcHBlbnMgd2hlbiBQQ1JFMiBpcyBjYWxsZWQgdmlhIGl0cyBQT1NJWAorQVBJLiBCeSBkZWZhdWx0LCBQQ1JFMidzIGJlaGF2aW91ciBpcyB0aGUgc2FtZSBhcyBQZXJsJ3MsIGV4Y2VwdCB0aGF0IHRoZXJlIGlzCitubyBlcXVpdmFsZW50IGZvciBQQ1JFMl9ET0xMQVJfRU5ET05MWSBpbiBQZXJsLiBJbiBib3RoIFBDUkUyIGFuZCBQZXJsLCB0aGVyZQoraXMgbm8gd2F5IHRvIHN0b3AgbmV3bGluZSBmcm9tIG1hdGNoaW5nIFteYV0uCis8L1A+Cis8UD4KK0RlZmF1bHQgUE9TSVggbmV3bGluZSBoYW5kbGluZyBjYW4gYmUgb2J0YWluZWQgYnkgc2V0dGluZyBQQ1JFMl9ET1RBTEwgYW5kCitQQ1JFMl9ET0xMQVJfRU5ET05MWSB3aGVuIGNhbGxpbmcgPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBkaXJlY3RseSwgYnV0IHRoZXJlIGlzCitubyB3YXkgdG8gbWFrZSBQQ1JFMiBiZWhhdmUgZXhhY3RseSBhcyBmb3IgdGhlIFJFR19ORVdMSU5FIGFjdGlvbi4gV2hlbiB1c2luZwordGhlIFBPU0lYIEFQSSwgcGFzc2luZyBSRUdfTkVXTElORSB0byBQQ1JFMidzIDxiPnJlZ2NvbXAoKTwvYj4gZnVuY3Rpb24KK2NhdXNlcyBQQ1JFMl9NVUxUSUxJTkUgdG8gYmUgcGFzc2VkIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4sIGFuZCBSRUdfRE9UQUxMCitwYXNzZXMgUENSRTJfRE9UQUxMLiBUaGVyZSBpcyBubyB3YXkgdG8gcGFzcyBQQ1JFMl9ET0xMQVJfRU5ET05MWS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM1IiBocmVmPSIjVE9DMSI+TUFUQ0hJTkcgQSBQQVRURVJOPC9hPjxicj4KKzxQPgorVGhlIGZ1bmN0aW9uIDxiPnJlZ2V4ZWMoKTwvYj4gaXMgY2FsbGVkIHRvIG1hdGNoIGEgY29tcGlsZWQgcGF0dGVybiA8aT5wcmVnPC9pPgorYWdhaW5zdCBhIGdpdmVuIDxpPnN0cmluZzwvaT4sIHdoaWNoIGlzIGJ5IGRlZmF1bHQgdGVybWluYXRlZCBieSBhIHplcm8gYnl0ZQorKGJ1dCBzZWUgUkVHX1NUQVJURU5EIGJlbG93KSwgc3ViamVjdCB0byB0aGUgb3B0aW9ucyBpbiA8aT5lZmxhZ3M8L2k+LiBUaGVzZSBjYW4KK2JlOgorPHByZT4KKyAgUkVHX05PVEJPTAorPC9wcmU+CitUaGUgUENSRTJfTk9UQk9MIG9wdGlvbiBpcyBzZXQgd2hlbiBjYWxsaW5nIHRoZSB1bmRlcmx5aW5nIFBDUkUyIG1hdGNoaW5nCitmdW5jdGlvbi4KKzxwcmU+CisgIFJFR19OT1RFTVBUWQorPC9wcmU+CitUaGUgUENSRTJfTk9URU1QVFkgb3B0aW9uIGlzIHNldCB3aGVuIGNhbGxpbmcgdGhlIHVuZGVybHlpbmcgUENSRTIgbWF0Y2hpbmcKK2Z1bmN0aW9uLiBOb3RlIHRoYXQgUkVHX05PVEVNUFRZIGlzIG5vdCBwYXJ0IG9mIHRoZSBQT1NJWCBzdGFuZGFyZC4gSG93ZXZlciwKK3NldHRpbmcgdGhpcyBvcHRpb24gY2FuIGdpdmUgbW9yZSBQT1NJWC1saWtlIGJlaGF2aW91ciBpbiBzb21lIHNpdHVhdGlvbnMuCis8cHJlPgorICBSRUdfTk9URU9MCis8L3ByZT4KK1RoZSBQQ1JFMl9OT1RFT0wgb3B0aW9uIGlzIHNldCB3aGVuIGNhbGxpbmcgdGhlIHVuZGVybHlpbmcgUENSRTIgbWF0Y2hpbmcKK2Z1bmN0aW9uLgorPHByZT4KKyAgUkVHX1NUQVJURU5ECis8L3ByZT4KK1RoZSBzdHJpbmcgaXMgY29uc2lkZXJlZCB0byBzdGFydCBhdCA8aT5zdHJpbmc8L2k+ICsgPGk+cG1hdGNoWzBdLnJtX3NvPC9pPiBhbmQKK3RvIGhhdmUgYSB0ZXJtaW5hdGluZyBOVUwgbG9jYXRlZCBhdCA8aT5zdHJpbmc8L2k+ICsgPGk+cG1hdGNoWzBdLnJtX2VvPC9pPgorKHRoZXJlIG5lZWQgbm90IGFjdHVhbGx5IGJlIGEgTlVMIGF0IHRoYXQgbG9jYXRpb24pLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZgorPGk+bm1hdGNoPC9pPi4gVGhpcyBpcyBhIEJTRCBleHRlbnNpb24sIGNvbXBhdGlibGUgd2l0aCBidXQgbm90IHNwZWNpZmllZCBieQorSUVFRSBTdGFuZGFyZCAxMDAzLjIgKFBPU0lYLjIpLCBhbmQgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uIGluIHNvZnR3YXJlCitpbnRlbmRlZCB0byBiZSBwb3J0YWJsZSB0byBvdGhlciBzeXN0ZW1zLiBOb3RlIHRoYXQgYSBub24temVybyA8aT5ybV9zbzwvaT4gZG9lcworbm90IGltcGx5IFJFR19OT1RCT0w7IFJFR19TVEFSVEVORCBhZmZlY3RzIG9ubHkgdGhlIGxvY2F0aW9uIG9mIHRoZSBzdHJpbmcsIG5vdAoraG93IGl0IGlzIG1hdGNoZWQuIFNldHRpbmcgUkVHX1NUQVJURU5EIGFuZCBwYXNzaW5nIDxpPnBtYXRjaDwvaT4gYXMgTlVMTCBhcmUKK211dHVhbGx5IGV4Y2x1c2l2ZTsgdGhlIGVycm9yIFJFR19JTlZBUkcgaXMgcmV0dXJuZWQuCis8L1A+Cis8UD4KK0lmIHRoZSBwYXR0ZXJuIHdhcyBjb21waWxlZCB3aXRoIHRoZSBSRUdfTk9TVUIgZmxhZywgbm8gZGF0YSBhYm91dCBhbnkgbWF0Y2hlZAorc3RyaW5ncyBpcyByZXR1cm5lZC4gVGhlIDxpPm5tYXRjaDwvaT4gYW5kIDxpPnBtYXRjaDwvaT4gYXJndW1lbnRzIG9mCis8Yj5yZWdleGVjKCk8L2I+IGFyZSBpZ25vcmVkLgorPC9QPgorPFA+CitJZiB0aGUgdmFsdWUgb2YgPGk+bm1hdGNoPC9pPiBpcyB6ZXJvLCBvciBpZiB0aGUgdmFsdWUgPGk+cG1hdGNoPC9pPiBpcyBOVUxMLAorbm8gZGF0YSBhYm91dCBhbnkgbWF0Y2hlZCBzdHJpbmdzIGlzIHJldHVybmVkLgorPC9QPgorPFA+CitPdGhlcndpc2UsdGhlIHBvcnRpb24gb2YgdGhlIHN0cmluZyB0aGF0IHdhcyBtYXRjaGVkLCBhbmQgYWxzbyBhbnkgY2FwdHVyZWQKK3N1YnN0cmluZ3MsIGFyZSByZXR1cm5lZCB2aWEgdGhlIDxpPnBtYXRjaDwvaT4gYXJndW1lbnQsIHdoaWNoIHBvaW50cyB0byBhbgorYXJyYXkgb2YgPGk+bm1hdGNoPC9pPiBzdHJ1Y3R1cmVzIG9mIHR5cGUgPGk+cmVnbWF0Y2hfdDwvaT4sIGNvbnRhaW5pbmcgdGhlCittZW1iZXJzIDxpPnJtX3NvPC9pPiBhbmQgPGk+cm1fZW88L2k+LiBUaGVzZSBjb250YWluIHRoZSBieXRlIG9mZnNldCB0byB0aGUgZmlyc3QKK2NoYXJhY3RlciBvZiBlYWNoIHN1YnN0cmluZyBhbmQgdGhlIG9mZnNldCB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRoZSBlbmQKK29mIGVhY2ggc3Vic3RyaW5nLCByZXNwZWN0aXZlbHkuIFRoZSAwdGggZWxlbWVudCBvZiB0aGUgdmVjdG9yIHJlbGF0ZXMgdG8gdGhlCitlbnRpcmUgcG9ydGlvbiBvZiA8aT5zdHJpbmc8L2k+IHRoYXQgd2FzIG1hdGNoZWQ7IHN1YnNlcXVlbnQgZWxlbWVudHMgcmVsYXRlIHRvCit0aGUgY2FwdHVyaW5nIHN1YnBhdHRlcm5zIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uIFVudXNlZCBlbnRyaWVzIGluIHRoZQorYXJyYXkgaGF2ZSBib3RoIHN0cnVjdHVyZSBtZW1iZXJzIHNldCB0byAtMS4KKzwvUD4KKzxQPgorQSBzdWNjZXNzZnVsIG1hdGNoIHlpZWxkcyBhIHplcm8gcmV0dXJuOyB2YXJpb3VzIGVycm9yIGNvZGVzIGFyZSBkZWZpbmVkIGluIHRoZQoraGVhZGVyIGZpbGUsIG9mIHdoaWNoIFJFR19OT01BVENIIGlzIHRoZSAiZXhwZWN0ZWQiIGZhaWx1cmUgY29kZS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM2IiBocmVmPSIjVE9DMSI+RVJST1IgTUVTU0FHRVM8L2E+PGJyPgorPFA+CitUaGUgPGI+cmVnZXJyb3IoKTwvYj4gZnVuY3Rpb24gbWFwcyBhIG5vbi16ZXJvIGVycm9yY29kZSBmcm9tIGVpdGhlcgorPGI+cmVnY29tcCgpPC9iPiBvciA8Yj5yZWdleGVjKCk8L2I+IHRvIGEgcHJpbnRhYmxlIG1lc3NhZ2UuIElmIDxpPnByZWc8L2k+IGlzIG5vdAorTlVMTCwgdGhlIGVycm9yIHNob3VsZCBoYXZlIGFyaXNlbiBmcm9tIHRoZSB1c2Ugb2YgdGhhdCBzdHJ1Y3R1cmUuIEEgbWVzc2FnZQordGVybWluYXRlZCBieSBhIGJpbmFyeSB6ZXJvIGlzIHBsYWNlZCBpbiA8aT5lcnJidWY8L2k+LiBJZiB0aGUgYnVmZmVyIGlzIHRvbworc2hvcnQsIG9ubHkgdGhlIGZpcnN0IDxpPmVycmJ1Zl9zaXplPC9pPiAtIDEgY2hhcmFjdGVycyBvZiB0aGUgZXJyb3IgbWVzc2FnZSBhcmUKK3VzZWQuIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgdGhlIHNpemUgb2YgYnVmZmVyIG5lZWRlZCB0byBob2xkIHRoZSB3aG9sZQorbWVzc2FnZSwgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyB6ZXJvLiBUaGlzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbgorPGk+ZXJyYnVmX3NpemU8L2k+IGlmIHRoZSBtZXNzYWdlIHdhcyB0cnVuY2F0ZWQuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNyIgaHJlZj0iI1RPQzEiPk1FTU9SWSBVU0FHRTwvYT48YnI+Cis8UD4KK0NvbXBpbGluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYXVzZXMgbWVtb3J5IHRvIGJlIGFsbG9jYXRlZCBhbmQgYXNzb2NpYXRlZAord2l0aCB0aGUgPGk+cHJlZzwvaT4gc3RydWN0dXJlLiBUaGUgZnVuY3Rpb24gPGI+cmVnZnJlZSgpPC9iPiBmcmVlcyBhbGwgc3VjaAorbWVtb3J5LCBhZnRlciB3aGljaCA8aT5wcmVnPC9pPiBtYXkgbm8gbG9uZ2VyIGJlIHVzZWQgYXMgYSBjb21waWxlZCBleHByZXNzaW9uLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzgiIGhyZWY9IiNUT0MxIj5BVVRIT1I8L2E+PGJyPgorPFA+CitQaGlsaXAgSGF6ZWwKKzxicj4KK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKzxicj4KK0NhbWJyaWRnZSwgRW5nbGFuZC4KKzxicj4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM5IiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgorPFA+CitMYXN0IHVwZGF0ZWQ6IDI5IE5vdmVtYmVyIDIwMTUKKzxicj4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorPGJyPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJzYW1wbGUuaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyc2FtcGxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBhOTI4YgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyc2FtcGxlLmh0bWwKQEAgLTAsMCArMSwxMDYgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJzYW1wbGUgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyc2FtcGxlIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitQQ1JFMiBTQU1QTEUgUFJPR1JBTQorPC9iPjxicj4KKzxQPgorQSBzaW1wbGUsIGNvbXBsZXRlIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB0byBnZXQgeW91IHN0YXJ0ZWQgd2l0aCB1c2luZyBQQ1JFMiBpcworc3VwcGxpZWQgaW4gdGhlIGZpbGUgPGk+cGNyZTJkZW1vLmM8L2k+IGluIHRoZSA8Yj5zcmM8L2I+IGRpcmVjdG9yeSBpbiB0aGUgUENSRTIKK2Rpc3RyaWJ1dGlvbi4gQSBsaXN0aW5nIG9mIHRoaXMgcHJvZ3JhbSBpcyBnaXZlbiBpbiB0aGUKKzxhIGhyZWY9InBjcmUyZGVtby5odG1sIj48Yj5wY3JlMmRlbW88L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4gSWYgeW91IGRvIG5vdCBoYXZlIGEgY29weSBvZiB0aGUgUENSRTIgZGlzdHJpYnV0aW9uLCB5b3UgY2FuCitzYXZlIHRoaXMgbGlzdGluZyB0byByZS1jcmVhdGUgdGhlIGNvbnRlbnRzIG9mIDxpPnBjcmUyZGVtby5jPC9pPi4KKzwvUD4KKzxQPgorVGhlIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSwgd2hpY2ggdXNlcyB0aGUgUENSRTIgOC1iaXQgbGlicmFyeSwgY29tcGlsZXMgdGhlCityZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBpcyBpdHMgZmlyc3QgYXJndW1lbnQsIGFuZCBtYXRjaGVzIGl0IGFnYWluc3QgdGhlCitzdWJqZWN0IHN0cmluZyBpbiBpdHMgc2Vjb25kIGFyZ3VtZW50LiBObyBQQ1JFMiBvcHRpb25zIGFyZSBzZXQsIGFuZCBkZWZhdWx0CitjaGFyYWN0ZXIgdGFibGVzIGFyZSB1c2VkLiBJZiBtYXRjaGluZyBzdWNjZWVkcywgdGhlIHByb2dyYW0gb3V0cHV0cyB0aGUKK3BvcnRpb24gb2YgdGhlIHN1YmplY3QgdGhhdCBtYXRjaGVkLCB0b2dldGhlciB3aXRoIHRoZSBjb250ZW50cyBvZiBhbnkgY2FwdHVyZWQKK3N1YnN0cmluZ3MuCis8L1A+Cis8UD4KK0lmIHRoZSAtZyBvcHRpb24gaXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgdGhlIHByb2dyYW0gdGhlbiBnb2VzIG9uIHRvCitjaGVjayBmb3IgZnVydGhlciBtYXRjaGVzIG9mIHRoZSBzYW1lIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiB0aGUgc2FtZSBzdWJqZWN0CitzdHJpbmcuIFRoZSBsb2dpYyBpcyBhIGxpdHRsZSBiaXQgdHJpY2t5IGJlY2F1c2Ugb2YgdGhlIHBvc3NpYmlsaXR5IG9mIG1hdGNoaW5nCithbiBlbXB0eSBzdHJpbmcuIENvbW1lbnRzIGluIHRoZSBjb2RlIGV4cGxhaW4gd2hhdCBpcyBnb2luZyBvbi4KKzwvUD4KKzxQPgorSWYgUENSRTIgaXMgaW5zdGFsbGVkIGluIHRoZSBzdGFuZGFyZCBpbmNsdWRlIGFuZCBsaWJyYXJ5IGRpcmVjdG9yaWVzIGZvciB5b3VyCitvcGVyYXRpbmcgc3lzdGVtLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGUgZGVtb25zdHJhdGlvbiBwcm9ncmFtIHVzaW5nCit0aGlzIGNvbW1hbmQ6Cis8cHJlPgorICBnY2MgLW8gcGNyZTJkZW1vIHBjcmUyZGVtby5jIC1scGNyZTItOAorPC9wcmU+CitJZiBQQ1JFMiBpcyBpbnN0YWxsZWQgZWxzZXdoZXJlLCB5b3UgbWF5IG5lZWQgdG8gYWRkIGFkZGl0aW9uYWwgb3B0aW9ucyB0byB0aGUKK2NvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGUsIG9uIGEgVW5peC1saWtlIHN5c3RlbSB0aGF0IGhhcyBQQ1JFMiBpbnN0YWxsZWQgaW4KKzxpPi91c3IvbG9jYWw8L2k+LCB5b3UgY2FuIGNvbXBpbGUgdGhlIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB1c2luZyBhIGNvbW1hbmQKK2xpa2UgdGhpczoKKzxwcmU+CisgIGdjYyAtbyBwY3JlMmRlbW8gLUkvdXNyL2xvY2FsL2luY2x1ZGUgcGNyZTJkZW1vLmMgLUwvdXNyL2xvY2FsL2xpYiAtbHBjcmUyLTgKKworPC9QUkU+Cis8L1A+Cis8UD4KK09uY2UgeW91IGhhdmUgY29tcGlsZWQgYW5kIGxpbmtlZCB0aGUgZGVtb25zdHJhdGlvbiBwcm9ncmFtLCB5b3UgY2FuIHJ1biBzaW1wbGUKK3Rlc3RzIGxpa2UgdGhpczoKKzxwcmU+CisgIC4vcGNyZTJkZW1vICdjYXR8ZG9nJyAndGhlIGNhdCBzYXQgb24gdGhlIG1hdCcKKyAgLi9wY3JlMmRlbW8gLWcgJ2NhdHxkb2cnICd0aGUgZG9nIHNhdCBvbiB0aGUgY2F0JworPC9wcmU+CitOb3RlIHRoYXQgdGhlcmUgaXMgYSBtdWNoIG1vcmUgY29tcHJlaGVuc2l2ZSB0ZXN0IHByb2dyYW0sIGNhbGxlZAorPGEgaHJlZj0icGNyZTJ0ZXN0Lmh0bWwiPjxiPnBjcmUydGVzdDwvYj4sPC9hPgord2hpY2ggc3VwcG9ydHMgbWFueSBtb3JlIGZhY2lsaXRpZXMgZm9yIHRlc3RpbmcgcmVndWxhciBleHByZXNzaW9ucyB1c2luZyB0aGUKK1BDUkUyIGxpYnJhcmllcy4gVGhlCis8YSBocmVmPSJwY3JlMmRlbW8uaHRtbCI+PGI+cGNyZTJkZW1vPC9iPjwvYT4KK3Byb2dyYW0gaXMgcHJvdmlkZWQgYXMgYSBzaW1wbGUgY29kaW5nIGV4YW1wbGUuCis8L1A+Cis8UD4KK0lmIHlvdSB0cnkgdG8gcnVuCis8YSBocmVmPSJwY3JlMmRlbW8uaHRtbCI+PGI+cGNyZTJkZW1vPC9iPjwvYT4KK3doZW4gUENSRTIgaXMgbm90IGluc3RhbGxlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBkaXJlY3RvcnksIHlvdSBtYXkgZ2V0IGFuCitlcnJvciBsaWtlIHRoaXMgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoZS5nLiBTb2xhcmlzKToKKzxwcmU+CisgIGxkLnNvLjE6IGEub3V0OiBmYXRhbDogbGlicGNyZTIuc28uMDogb3BlbiBmYWlsZWQ6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKzwvcHJlPgorVGhpcyBpcyBjYXVzZWQgYnkgdGhlIHdheSBzaGFyZWQgbGlicmFyeSBzdXBwb3J0IHdvcmtzIG9uIHRob3NlIHN5c3RlbXMuIFlvdQorbmVlZCB0byBhZGQKKzxwcmU+CisgIC1SL3Vzci9sb2NhbC9saWIKKzwvcHJlPgorKGZvciBleGFtcGxlKSB0byB0aGUgY29tcGlsZSBjb21tYW5kIHRvIGdldCByb3VuZCB0aGlzIHByb2JsZW0uCis8L1A+Cis8YnI+PGI+CitBVVRIT1IKKzwvYj48YnI+Cis8UD4KK1BoaWxpcCBIYXplbAorPGJyPgorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorPGJyPgorQ2FtYnJpZGdlLCBFbmdsYW5kLgorPGJyPgorPC9QPgorPGJyPjxiPgorUkVWSVNJT04KKzwvYj48YnI+Cis8UD4KK0xhc3QgdXBkYXRlZDogMjAgT2N0b2JlciAyMDE0Cis8YnI+CitDb3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKzxicj4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUyc2VyaWFsaXplLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnNlcmlhbGl6ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NDdjMGEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnNlcmlhbGl6ZS5odG1sCkBAIC0wLDAgKzEsMTg5IEBACis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPnBjcmUyc2VyaWFsaXplIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMnNlcmlhbGl6ZSBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPHVsPgorPGxpPjxhIG5hbWU9IlRPQzEiIGhyZWY9IiNTRUMxIj5TQVZJTkcgQU5EIFJFLVVTSU5HIFBSRUNPTVBJTEVEIFBDUkUyIFBBVFRFUk5TPC9hPgorPGxpPjxhIG5hbWU9IlRPQzIiIGhyZWY9IiNTRUMyIj5TQVZJTkcgQ09NUElMRUQgUEFUVEVSTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMyIgaHJlZj0iI1NFQzMiPlJFLVVTSU5HIFBSRUNPTVBJTEVEIFBBVFRFUk5TPC9hPgorPGxpPjxhIG5hbWU9IlRPQzQiIGhyZWY9IiNTRUM0Ij5BVVRIT1I8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNSIgaHJlZj0iI1NFQzUiPlJFVklTSU9OPC9hPgorPC91bD4KKzxicj48YSBuYW1lPSJTRUMxIiBocmVmPSIjVE9DMSI+U0FWSU5HIEFORCBSRS1VU0lORyBQUkVDT01QSUxFRCBQQ1JFMiBQQVRURVJOUzwvYT48YnI+Cis8UD4KKzxiPmludDMyX3QgcGNyZTJfc2VyaWFsaXplX2RlY29kZShwY3JlMl9jb2RlICoqPGk+Y29kZXM8L2k+LDwvYj4KKzxiPiAgaW50MzJfdCA8aT5udW1iZXJfb2ZfY29kZXM8L2k+LCBjb25zdCB1aW50MzJfdCAqPGk+Ynl0ZXM8L2k+LDwvYj4KKzxiPiAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICo8aT5nY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPmludDMyX3QgcGNyZTJfc2VyaWFsaXplX2VuY29kZShwY3JlMl9jb2RlICoqPGk+Y29kZXM8L2k+LDwvYj4KKzxiPiAgaW50MzJfdCA8aT5udW1iZXJfb2ZfY29kZXM8L2k+LCB1aW50MzJfdCAqKjxpPnNlcmlhbGl6ZWRfYnl0ZXM8L2k+LDwvYj4KKzxiPiAgUENSRTJfU0laRSAqPGk+c2VyaWFsaXplZF9zaXplPC9pPiwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICo8aT5nY29udGV4dDwvaT4pOzwvYj4KKzxicj4KKzxicj4KKzxiPnZvaWQgcGNyZTJfc2VyaWFsaXplX2ZyZWUodWludDhfdCAqPGk+Ynl0ZXM8L2k+KTs8L2I+Cis8YnI+Cis8YnI+Cis8Yj5pbnQzMl90IHBjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzKGNvbnN0IHVpbnQ4X3QgKjxpPmJ5dGVzPC9pPik7PC9iPgorPGJyPgorPGJyPgorSWYgeW91IGFyZSBydW5uaW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyBhIGxhcmdlIG51bWJlciBvZiByZWd1bGFyCitleHByZXNzaW9uIHBhdHRlcm5zLCBpdCBtYXkgYmUgdXNlZnVsIHRvIHN0b3JlIHRoZW0gaW4gYSBwcmVjb21waWxlZCBmb3JtCitpbnN0ZWFkIG9mIGhhdmluZyB0byBjb21waWxlIHRoZW0gZXZlcnkgdGltZSB0aGUgYXBwbGljYXRpb24gaXMgcnVuLiBIb3dldmVyLAoraWYgeW91IGFyZSB1c2luZyB0aGUganVzdC1pbi10aW1lIG9wdGltaXphdGlvbiBmZWF0dXJlLCBpdCBpcyBub3QgcG9zc2libGUgdG8KK3NhdmUgYW5kIHJlbG9hZCB0aGUgSklUIGRhdGEsIGJlY2F1c2UgaXQgaXMgcG9zaXRpb24tZGVwZW5kZW50LiBUaGUgaG9zdCBvbgord2hpY2ggdGhlIHBhdHRlcm5zIGFyZSByZWxvYWRlZCBtdXN0IGJlIHJ1bm5pbmcgdGhlIHNhbWUgdmVyc2lvbiBvZiBQQ1JFMiwgd2l0aAordGhlIHNhbWUgY29kZSB1bml0IHdpZHRoLCBhbmQgbXVzdCBhbHNvIGhhdmUgdGhlIHNhbWUgZW5kaWFubmVzcywgcG9pbnRlciB3aWR0aAorYW5kIFBDUkUyX1NJWkUgdHlwZS4gRm9yIGV4YW1wbGUsIHBhdHRlcm5zIGNvbXBpbGVkIG9uIGEgMzItYml0IHN5c3RlbSB1c2luZworUENSRTIncyAxNi1iaXQgbGlicmFyeSBjYW5ub3QgYmUgcmVsb2FkZWQgb24gYSA2NC1iaXQgc3lzdGVtLCBub3IgY2FuIHRoZXkgYmUKK3JlbG9hZGVkIHVzaW5nIHRoZSA4LWJpdCBsaWJyYXJ5LgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzIiIGhyZWY9IiNUT0MxIj5TQVZJTkcgQ09NUElMRUQgUEFUVEVSTlM8L2E+PGJyPgorPFA+CitCZWZvcmUgY29tcGlsZWQgcGF0dGVybnMgY2FuIGJlIHNhdmVkIHRoZXkgbXVzdCBiZSBzZXJpYWxpemVkLCB0aGF0IGlzLAorY29udmVydGVkIHRvIGEgc3RyZWFtIG9mIGJ5dGVzLiBBIHNpbmdsZSBieXRlIHN0cmVhbSBtYXkgY29udGFpbiBhbnkgbnVtYmVyIG9mCitjb21waWxlZCBwYXR0ZXJucywgYnV0IHRoZXkgbXVzdCBhbGwgdXNlIHRoZSBzYW1lIGNoYXJhY3RlciB0YWJsZXMuIEEgc2luZ2xlCitjb3B5IG9mIHRoZSB0YWJsZXMgaXMgaW5jbHVkZWQgaW4gdGhlIGJ5dGUgc3RyZWFtIChpdHMgc2l6ZSBpcyAxMDg4IGJ5dGVzKS4gRm9yCittb3JlIGRldGFpbHMgb2YgY2hhcmFjdGVyIHRhYmxlcywgc2VlIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCNsb2NhbGVzdXBwb3J0Ij5zZWN0aW9uIG9uIGxvY2FsZSBzdXBwb3J0PC9hPgoraW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPC9QPgorPFA+CitUaGUgZnVuY3Rpb24gPGI+cGNyZTJfc2VyaWFsaXplX2VuY29kZSgpPC9iPiBjcmVhdGVzIGEgc2VyaWFsaXplZCBieXRlIHN0cmVhbQorZnJvbSBhIGxpc3Qgb2YgY29tcGlsZWQgcGF0dGVybnMuIEl0cyBmaXJzdCB0d28gYXJndW1lbnRzIHNwZWNpZnkgdGhlIGxpc3QsCitiZWluZyBhIHBvaW50ZXIgdG8gYSB2ZWN0b3Igb2YgcG9pbnRlcnMgdG8gY29tcGlsZWQgcGF0dGVybnMsIGFuZCB0aGUgbGVuZ3RoIG9mCit0aGUgdmVjdG9yLiBUaGUgdGhpcmQgYW5kIGZvdXJ0aCBhcmd1bWVudHMgcG9pbnQgdG8gdmFyaWFibGVzIHdoaWNoIGFyZSBzZXQgdG8KK3BvaW50IHRvIHRoZSBjcmVhdGVkIGJ5dGUgc3RyZWFtIGFuZCBpdHMgbGVuZ3RoLCByZXNwZWN0aXZlbHkuIFRoZSBmaW5hbAorYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIGEgZ2VuZXJhbCBjb250ZXh0LCB3aGljaCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGN1c3RvbQorbWVtb3J5IG1hbmdhZ2VtZW50IGZ1bmN0aW9ucy4gSWYgdGhpcyBhcmd1bWVudCBpcyBOVUxMLCA8Yj5tYWxsb2MoKTwvYj4gaXMgdXNlZAordG8gb2J0YWluIG1lbW9yeSBmb3IgdGhlIGJ5dGUgc3RyZWFtLiBUaGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIHRoZSBudW1iZXIKK29mIHNlcmlhbGl6ZWQgcGF0dGVybnMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorPHByZT4KKyAgUENSRTJfRVJST1JfQkFEREFUQSAgICAgIHRoZSBudW1iZXIgb2YgcGF0dGVybnMgaXMgemVybyBvciBsZXNzCisgIFBDUkUyX0VSUk9SX0JBRE1BR0lDICAgICBtaXNtYXRjaCBvZiBpZCBieXRlcyBpbiBvbmUgb2YgdGhlIHBhdHRlcm5zCisgIFBDUkUyX0VSUk9SX01FTU9SWSAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAgUENSRTJfRVJST1JfTUlYRURUQUJMRVMgIHRoZSBwYXR0ZXJucyBkbyBub3QgYWxsIHVzZSB0aGUgc2FtZSB0YWJsZXMKKyAgUENSRTJfRVJST1JfTlVMTCAgICAgICAgIHRoZSAxc3QsIDNyZCwgb3IgNHRoIGFyZ3VtZW50IGlzIE5VTEwKKzwvcHJlPgorUENSRTJfRVJST1JfQkFETUFHSUMgbWVhbnMgZWl0aGVyIHRoYXQgYSBwYXR0ZXJuJ3MgY29kZSBoYXMgYmVlbiBjb3JydXB0ZWQsIG9yCit0aGF0IGEgc2xvdCBpbiB0aGUgdmVjdG9yIGRvZXMgbm90IHBvaW50IHRvIGEgY29tcGlsZWQgcGF0dGVybi4KKzwvUD4KKzxQPgorT25jZSBhIHNldCBvZiBwYXR0ZXJucyBoYXMgYmVlbiBzZXJpYWxpemVkIHlvdSBjYW4gc2F2ZSB0aGUgZGF0YSBpbiBhbnkKK2FwcHJvcHJpYXRlIG1hbm5lci4gSGVyZSBpcyBzYW1wbGUgY29kZSB0aGF0IGNvbXBpbGVzIHR3byBwYXR0ZXJucyBhbmQgd3JpdGVzCit0aGVtIHRvIGEgZmlsZS4gSXQgYXNzdW1lcyB0aGF0IHRoZSB2YXJpYWJsZSA8aT5mZDwvaT4gcmVmZXJzIHRvIGEgZmlsZSB0aGF0IGlzCitvcGVuIGZvciBvdXRwdXQuIFRoZSBlcnJvciBjaGVja2luZyB0aGF0IHNob3VsZCBiZSBwcmVzZW50IGluIGEgcmVhbAorYXBwbGljYXRpb24gaGFzIGJlZW4gb21pdHRlZCBmb3Igc2ltcGxpY2l0eS4KKzxwcmU+CisgIGludCBlcnJvcmNvZGU7CisgIHVpbnQ4X3QgKmJ5dGVzOworICBQQ1JFMl9TSVpFIGVycm9yb2Zmc2V0OworICBQQ1JFMl9TSVpFIGJ5dGVzY291bnQ7CisgIHBjcmUyX2NvZGUgKmxpc3Rfb2ZfY29kZXNbMl07CisgIGxpc3Rfb2ZfY29kZXNbMF0gPSBwY3JlMl9jb21waWxlKCJmaXJzdCBwYXR0ZXJuIiwKKyAgICBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsIDAsICZlcnJvcmNvZGUsICZlcnJvcm9mZnNldCwgTlVMTCk7CisgIGxpc3Rfb2ZfY29kZXNbMV0gPSBwY3JlMl9jb21waWxlKCJzZWNvbmQgcGF0dGVybiIsCisgICAgUENSRTJfWkVST19URVJNSU5BVEVELCAwLCAmZXJyb3Jjb2RlLCAmZXJyb3JvZmZzZXQsIE5VTEwpOworICBlcnJvcmNvZGUgPSBwY3JlMl9zZXJpYWxpemVfZW5jb2RlKGxpc3Rfb2ZfY29kZXMsIDIsICZieXRlcywKKyAgICAmYnl0ZXNjb3VudCwgTlVMTCk7CisgIGVycm9yY29kZSA9IGZ3cml0ZShieXRlcywgMSwgYnl0ZXNjb3VudCwgZmQpOworPC9wcmU+CitOb3RlIHRoYXQgdGhlIHNlcmlhbGl6ZWQgZGF0YSBpcyBiaW5hcnkgZGF0YSB0aGF0IG1heSBjb250YWluIGFueSBvZiB0aGUgMjU2Citwb3NzaWJsZSBieXRlIHZhbHVlcy4gT24gc3lzdGVtcyB0aGF0IG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGJpbmFyeSBhbmQKK25vbi1iaW5hcnkgZGF0YSwgYmUgc3VyZSB0aGF0IHRoZSBmaWxlIGlzIG9wZW5lZCBmb3IgYmluYXJ5IG91dHB1dC4KKzwvUD4KKzxQPgorU2VyaWFsaXppbmcgYSBzZXQgb2YgcGF0dGVybnMgbGVhdmVzIHRoZSBvcmlnaW5hbCBkYXRhIHVudG91Y2hlZCwgc28gdGhleSBjYW4KK3N0aWxsIGJlIHVzZWQgZm9yIG1hdGNoaW5nLiBUaGVpciBtZW1vcnkgbXVzdCBldmVudHVhbGx5IGJlIGZyZWVkIGluIHRoZSB1c3VhbAord2F5IGJ5IGNhbGxpbmcgPGI+cGNyZTJfY29kZV9mcmVlKCk8L2I+LiBXaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHdpdGggdGhlIGJ5dGUKK3N0cmVhbSwgaXQgdG9vIG11c3QgYmUgZnJlZWQgYnkgY2FsbGluZyA8Yj5wY3JlMl9zZXJpYWxpemVfZnJlZSgpPC9iPi4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMzIiBocmVmPSIjVE9DMSI+UkUtVVNJTkcgUFJFQ09NUElMRUQgUEFUVEVSTlM8L2E+PGJyPgorPFA+CitJbiBvcmRlciB0byByZS11c2UgYSBzZXQgb2Ygc2F2ZWQgcGF0dGVybnMgeW91IG11c3QgZmlyc3QgbWFrZSB0aGUgc2VyaWFsaXplZAorYnl0ZSBzdHJlYW0gYXZhaWxhYmxlIGluIG1haW4gbWVtb3J5IChmb3IgZXhhbXBsZSwgYnkgcmVhZGluZyBmcm9tIGEgZmlsZSkuIFRoZQorbWFuYWdlbWVudCBvZiB0aGlzIG1lbW9yeSBibG9jayBpcyB1cCB0byB0aGUgYXBwbGljYXRpb24uIFlvdSBjYW4gdXNlIHRoZQorPGI+cGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXMoKTwvYj4gZnVuY3Rpb24gdG8gZmluZCBvdXQgaG93IG1hbnkKK2NvbXBpbGVkIHBhdHRlcm5zIGFyZSBpbiB0aGUgc2VyaWFsaXplZCBkYXRhIHdpdGhvdXQgYWN0dWFsbHkgZGVjb2RpbmcgdGhlCitwYXR0ZXJuczoKKzxwcmU+CisgIHVpbnQ4X3QgKmJ5dGVzID0gJiM2MDtzZXJpYWxpemVkIGRhdGEmIzYyOzsKKyAgaW50MzJfdCBudW1iZXJfb2ZfY29kZXMgPSBwY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2RlcyhieXRlcyk7Cis8L3ByZT4KK1RoZSA8Yj5wY3JlMl9zZXJpYWxpemVfZGVjb2RlKCk8L2I+IGZ1bmN0aW9uIHJlYWRzIGEgYnl0ZSBzdHJlYW0gYW5kIHJlY3JlYXRlcwordGhlIGNvbXBpbGVkIHBhdHRlcm5zIGluIG5ldyBtZW1vcnkgYmxvY2tzLCBzZXR0aW5nIHBvaW50ZXJzIHRvIHRoZW0gaW4gYQordmVjdG9yLiBUaGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBhcmUgYSBwb2ludGVyIHRvIGEgc3VpdGFibGUgdmVjdG9yIGFuZCBpdHMKK2xlbmd0aCwgYW5kIHRoZSB0aGlyZCBhcmd1bWVudCBwb2ludHMgdG8gYSBieXRlIHN0cmVhbS4gVGhlIGZpbmFsIGFyZ3VtZW50IGlzIGEKK3BvaW50ZXIgdG8gYSBnZW5lcmFsIGNvbnRleHQsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgY3VzdG9tIG1lbW9yeQorbWFuZ2FnZW1lbnQgZnVuY3Rpb25zIGZvciB0aGUgZGVjb2RlZCBwYXR0ZXJucy4gSWYgdGhpcyBhcmd1bWVudCBpcyBOVUxMLAorPGI+bWFsbG9jKCk8L2I+IGFuZCA8Yj5mcmVlKCk8L2I+IGFyZSB1c2VkLiBBZnRlciBkZXNlcmlhbGl6YXRpb24sIHRoZSBieXRlCitzdHJlYW0gaXMgbm8gbG9uZ2VyIG5lZWRlZCBhbmQgY2FuIGJlIGRpc2NhcmRlZC4KKzxwcmU+CisgIGludDMyX3QgbnVtYmVyX29mX2NvZGVzOworICBwY3JlMl9jb2RlICpsaXN0X29mX2NvZGVzWzJdOworICB1aW50OF90ICpieXRlcyA9ICYjNjA7c2VyaWFsaXplZCBkYXRhJiM2Mjs7CisgIGludDMyX3QgbnVtYmVyX29mX2NvZGVzID0KKyAgICBwY3JlMl9zZXJpYWxpemVfZGVjb2RlKGxpc3Rfb2ZfY29kZXMsIDIsIGJ5dGVzLCBOVUxMKTsKKzwvcHJlPgorSWYgdGhlIHZlY3RvciBpcyBub3QgbGFyZ2UgZW5vdWdoIGZvciBhbGwgdGhlIHBhdHRlcm5zIGluIHRoZSBieXRlIHN0cmVhbSwgaXQKK2lzIGZpbGxlZCB3aXRoIHRob3NlIHRoYXQgZml0LCBhbmQgdGhlIHJlbWFpbmRlciBhcmUgaWdub3JlZC4gVGhlIHlpZWxkIG9mIHRoZQorZnVuY3Rpb24gaXMgdGhlIG51bWJlciBvZiBkZWNvZGVkIHBhdHRlcm5zLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZQorZXJyb3IgY29kZXM6Cis8cHJlPgorICBQQ1JFMl9FUlJPUl9CQUREQVRBICAgc2Vjb25kIGFyZ3VtZW50IGlzIHplcm8gb3IgbGVzcworICBQQ1JFMl9FUlJPUl9CQURNQUdJQyAgbWlzbWF0Y2ggb2YgaWQgYnl0ZXMgaW4gdGhlIGRhdGEKKyAgUENSRTJfRVJST1JfQkFETU9ERSAgIG1pc21hdGNoIG9mIHZhcmlhYmxlIHVuaXQgc2l6ZSBvciBQQ1JFMiB2ZXJzaW9uCisgIFBDUkUyX0VSUk9SX01FTU9SWSAgICBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAgUENSRTJfRVJST1JfTlVMTCAgICAgIGZpcnN0IG9yIHRoaXJkIGFyZ3VtZW50IGlzIE5VTEwKKzwvcHJlPgorUENSRTJfRVJST1JfQkFETUFHSUMgbWF5IG1lYW4gdGhhdCB0aGUgZGF0YSBpcyBjb3JydXB0LCBvciB0aGF0IGl0IHdhcyBjb21waWxlZAorb24gYSBzeXN0ZW0gd2l0aCBkaWZmZXJlbnQgZW5kaWFubmVzcy4KKzwvUD4KKzxQPgorRGVjb2RlZCBwYXR0ZXJucyBjYW4gYmUgdXNlZCBmb3IgbWF0Y2hpbmcgaW4gdGhlIHVzdWFsIHdheSwgYW5kIG11c3QgYmUgZnJlZWQKK2J5IGNhbGxpbmcgPGI+cGNyZTJfY29kZV9mcmVlKCk8L2I+LiBIb3dldmVyLCBiZSBhd2FyZSB0aGF0IHRoZXJlIGlzIGEgcG90ZW50aWFsCityYWNlIGlzc3VlIGlmIHlvdSBhcmUgdXNpbmcgbXVsdGlwbGUgcGF0dGVybnMgdGhhdCB3ZXJlIGRlY29kZWQgZnJvbSBhIHNpbmdsZQorYnl0ZSBzdHJlYW0gaW4gYSBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9uLiBBIHNpbmdsZSBjb3B5IG9mIHRoZSBjaGFyYWN0ZXIKK3RhYmxlcyBpcyB1c2VkIGJ5IGFsbCB0aGUgZGVjb2RlZCBwYXR0ZXJucyBhbmQgYSByZWZlcmVuY2UgY291bnQgaXMgdXNlZCB0bworYXJyYW5nZSBmb3IgaXRzIG1lbW9yeSB0byBiZSBhdXRvbWF0aWNhbGx5IGZyZWVkIHdoZW4gdGhlIGxhc3QgcGF0dGVybiBpcworZnJlZWQsIGJ1dCB0aGVyZSBpcyBubyBsb2NraW5nIG9uIHRoaXMgcmVmZXJlbmNlIGNvdW50LiBUaGVyZWZvcmUsIGlmIHlvdSB3YW50Cit0byBjYWxsIDxiPnBjcmUyX2NvZGVfZnJlZSgpPC9iPiBmb3IgdGhlc2UgcGF0dGVybnMgaW4gZGlmZmVyZW50IHRocmVhZHMsIHlvdQorbXVzdCBhcnJhbmdlIHlvdXIgb3duIGxvY2tpbmcsIGFuZCBlbnN1cmUgdGhhdCA8Yj5wY3JlMl9jb2RlX2ZyZWUoKTwvYj4gY2Fubm90CitiZSBjYWxsZWQgYnkgdHdvIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZS4KKzwvUD4KKzxQPgorSWYgYSBwYXR0ZXJuIHdhcyBwcm9jZXNzZWQgYnkgPGI+cGNyZTJfaml0X2NvbXBpbGUoKTwvYj4gYmVmb3JlIGJlaW5nCitzZXJpYWxpemVkLCB0aGUgSklUIGRhdGEgaXMgZGlzY2FyZGVkIGFuZCBzbyBpcyBubyBsb25nZXIgYXZhaWxhYmxlIGFmdGVyIGEKK3NhdmUvcmVzdG9yZSBjeWNsZS4gWW91IGNhbiwgaG93ZXZlciwgcHJvY2VzcyBhIHJlc3RvcmVkIHBhdHRlcm4gd2l0aAorPGI+cGNyZTJfaml0X2NvbXBpbGUoKTwvYj4gaWYgeW91IHdpc2guCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNCIgaHJlZj0iI1RPQzEiPkFVVEhPUjwvYT48YnI+Cis8UD4KK1BoaWxpcCBIYXplbAorPGJyPgorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorPGJyPgorQ2FtYnJpZGdlLCBFbmdsYW5kLgorPGJyPgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzUiIGhyZWY9IiNUT0MxIj5SRVZJU0lPTjwvYT48YnI+Cis8UD4KK0xhc3QgdXBkYXRlZDogMDMgTm92ZW1iZXIgMjAxNQorPGJyPgorQ29weXJpZ2h0ICZjb3B5OyAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCis8YnI+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+CmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvaHRtbC9wY3JlMnN0YWNrLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnN0YWNrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk0MmM3YQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyc3RhY2suaHRtbApAQCAtMCwwICsxLDIwNyBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMnN0YWNrIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMnN0YWNrIG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8YnI+PGI+CitQQ1JFMiBESVNDVVNTSU9OIE9GIFNUQUNLIFVTQUdFCis8L2I+PGJyPgorPFA+CitXaGVuIHlvdSBjYWxsIDxiPnBjcmUyX21hdGNoKCk8L2I+LCBpdCBtYWtlcyB1c2Ugb2YgYW4gaW50ZXJuYWwgZnVuY3Rpb24gY2FsbGVkCis8Yj5tYXRjaCgpPC9iPi4gVGhpcyBjYWxscyBpdHNlbGYgcmVjdXJzaXZlbHkgYXQgYnJhbmNoIHBvaW50cyBpbiB0aGUgcGF0dGVybiwKK2luIG9yZGVyIHRvIHJlbWVtYmVyIHRoZSBzdGF0ZSBvZiB0aGUgbWF0Y2ggc28gdGhhdCBpdCBjYW4gYmFjayB1cCBhbmQgdHJ5IGEKK2RpZmZlcmVudCBhbHRlcm5hdGl2ZSBhZnRlciBhIGZhaWx1cmUuIEFzIG1hdGNoaW5nIHByb2NlZWRzIGRlZXBlciBhbmQgZGVlcGVyCitpbnRvIHRoZSB0cmVlIG9mIHBvc3NpYmlsaXRpZXMsIHRoZSByZWN1cnNpb24gZGVwdGggaW5jcmVhc2VzLiBUaGUKKzxiPm1hdGNoKCk8L2I+IGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGluIG90aGVyIGNpcmN1bXN0YW5jZXMsIGZvciBleGFtcGxlLAord2hlbmV2ZXIgYSBwYXJlbnRoZXNpemVkIHN1Yi1wYXR0ZXJuIGlzIGVudGVyZWQsIGFuZCBpbiBjZXJ0YWluIGNhc2VzIG9mCityZXBldGl0aW9uLgorPC9QPgorPFA+CitOb3QgYWxsIGNhbGxzIG9mIDxiPm1hdGNoKCk8L2I+IGluY3JlYXNlIHRoZSByZWN1cnNpb24gZGVwdGg7IGZvciBhbiBpdGVtIHN1Y2gKK2FzIGEqIGl0IG1heSBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBhdCB0aGUgc2FtZSBsZXZlbCwgYWZ0ZXIgbWF0Y2hpbmcKK2RpZmZlcmVudCBudW1iZXJzIG9mIGEncy4gRnVydGhlcm1vcmUsIGluIGEgbnVtYmVyIG9mIGNhc2VzIHdoZXJlIHRoZSByZXN1bHQgb2YKK3RoZSByZWN1cnNpdmUgY2FsbCB3b3VsZCBpbW1lZGlhdGVseSBiZSBwYXNzZWQgYmFjayBhcyB0aGUgcmVzdWx0IG9mIHRoZQorY3VycmVudCBjYWxsIChhICJ0YWlsIHJlY3Vyc2lvbiIpLCB0aGUgZnVuY3Rpb24gaXMganVzdCByZXN0YXJ0ZWQgaW5zdGVhZC4KKzwvUD4KKzxQPgorRWFjaCB0aW1lIHRoZSBpbnRlcm5hbCA8Yj5tYXRjaCgpPC9iPiBmdW5jdGlvbiBpcyBjYWxsZWQgcmVjdXJzaXZlbHksIGl0IHVzZXMKK21lbW9yeSBmcm9tIHRoZSBwcm9jZXNzIHN0YWNrLiBGb3IgY2VydGFpbiBraW5kcyBvZiBwYXR0ZXJuIGFuZCBkYXRhLCB2ZXJ5CitsYXJnZSBhbW91bnRzIG9mIHN0YWNrIG1heSBiZSBuZWVkZWQsIGRlc3BpdGUgdGhlIHJlY29nbml0aW9uIG9mICJ0YWlsCityZWN1cnNpb24iLiBOb3RlIHRoYXQgaWYgUENSRTIgaXMgY29tcGlsZWQgd2l0aCB0aGUgLWZzYW5pdGl6ZT1hZGRyZXNzIG9wdGlvbgorb2YgdGhlIEdDQyBjb21waWxlciwgdGhlIHN0YWNrIHJlcXVpcmVtZW50cyBhcmUgZ3JlYXRseSBpbmNyZWFzZWQuCis8L1A+Cis8UD4KK1RoZSBhYm92ZSBjb21tZW50cyBhcHBseSB3aGVuIDxiPnBjcmUyX21hdGNoKCk8L2I+IGlzIHJ1biBpbiBpdHMgbm9ybWFsCitpbnRlcnByZXRpdmUgbWFubmVyLiBJZiB0aGUgY29tcGlsZWQgcGF0dGVybiB3YXMgcHJvY2Vzc2VkIGJ5Cis8Yj5wY3JlMl9qaXRfY29tcGlsZSgpPC9iPiwgYW5kIGp1c3QtaW4tdGltZSBjb21waWxpbmcgd2FzIHN1Y2Nlc3NmdWwsIGFuZCB0aGUKK29wdGlvbnMgcGFzc2VkIHRvIDxiPnBjcmUyX21hdGNoKCk8L2I+IHdlcmUgbm90IGluY29tcGF0aWJsZSwgdGhlIG1hdGNoaW5nCitwcm9jZXNzIHVzZXMgdGhlIEpJVC1jb21waWxlZCBjb2RlIGluc3RlYWQgb2YgdGhlIDxiPm1hdGNoKCk8L2I+IGZ1bmN0aW9uLiBJbgordGhpcyBjYXNlLCB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBhcmUgaGFuZGxlZCBlbnRpcmVseSBkaWZmZXJlbnRseS4gU2VlIHRoZQorPGEgaHJlZj0icGNyZTJqaXQuaHRtbCI+PGI+cGNyZTJqaXQ8L2I+PC9hPgorZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKzwvUD4KKzxQPgorVGhlIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiBmdW5jdGlvbiBvcGVyYXRlcyBpbiBhIGRpZmZlcmVudCB3YXkgdG8KKzxiPnBjcmUyX21hdGNoKCk8L2I+LCBhbmQgdXNlcyByZWN1cnNpb24gb25seSB3aGVuIHRoZXJlIGlzIGEgcmVndWxhciBleHByZXNzaW9uCityZWN1cnNpb24gb3Igc3Vicm91dGluZSBjYWxsIGluIHRoZSBwYXR0ZXJuLiBUaGlzIGluY2x1ZGVzIHRoZSBwcm9jZXNzaW5nIG9mCithc3NlcnRpb24gYW5kICJvbmNlLW9ubHkiIHN1YnBhdHRlcm5zLCB3aGljaCBhcmUgaGFuZGxlZCBsaWtlIHN1YnJvdXRpbmUgY2FsbHMuCitOb3JtYWxseSwgdGhlc2UgYXJlIG5ldmVyIHZlcnkgZGVlcCwgYW5kIHRoZSBsaW1pdCBvbiB0aGUgY29tcGxleGl0eSBvZgorPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IGlzIGNvbnRyb2xsZWQgYnkgdGhlIGFtb3VudCBvZiB3b3Jrc3BhY2UgaXQgaXMgZ2l2ZW4uCitIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0byB3cml0ZSBwYXR0ZXJucyB3aXRoIHJ1bmF3YXkgaW5maW5pdGUgcmVjdXJzaW9uczsKK3N1Y2ggcGF0dGVybnMgd2lsbCBjYXVzZSA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4gdG8gcnVuIG91dCBvZiBzdGFjay4gQXQKK3ByZXNlbnQsIHRoZXJlIGlzIG5vIHByb3RlY3Rpb24gYWdhaW5zdCB0aGlzLgorPC9QPgorPFA+CitUaGUgY29tbWVudHMgdGhhdCBmb2xsb3cgZG8gTk9UIGFwcGx5IHRvIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPjsgdGhleSBhcmUKK3JlbGV2YW50IG9ubHkgZm9yIDxiPnBjcmUyX21hdGNoKCk8L2I+IHdpdGhvdXQgdGhlIEpJVCBvcHRpbWl6YXRpb24uCis8L1A+Cis8YnI+PGI+CitSZWR1Y2luZyA8Yj5wY3JlMl9tYXRjaCgpPC9iPidzIHN0YWNrIHVzYWdlCis8L2I+PGJyPgorPFA+CitZb3UgY2FuIG9mdGVuIHJlZHVjZSB0aGUgYW1vdW50IG9mIHJlY3Vyc2lvbiwgYW5kIHRoZXJlZm9yZSB0aGUKK2Ftb3VudCBvZiBzdGFjayB1c2VkLCBieSBtb2RpZnlpbmcgdGhlIHBhdHRlcm4gdGhhdCBpcyBiZWluZyBtYXRjaGVkLiBDb25zaWRlciwKK2ZvciBleGFtcGxlLCB0aGlzIHBhdHRlcm46Cis8cHJlPgorICAoW14mIzYwO118JiM2MDsoPyFpbmV0KSkrCis8L3ByZT4KK0l0IG1hdGNoZXMgZnJvbSB3aGVyZXZlciBpdCBzdGFydHMgdW50aWwgaXQgZW5jb3VudGVycyAiJiM2MDtpbmV0IiBvciB0aGUgZW5kIG9mCit0aGUgZGF0YSwgYW5kIGlzIHRoZSBraW5kIG9mIHBhdHRlcm4gdGhhdCBtaWdodCBiZSB1c2VkIHdoZW4gcHJvY2Vzc2luZyBhbiBYTUwKK2ZpbGUuIEVhY2ggaXRlcmF0aW9uIG9mIHRoZSBvdXRlciBwYXJlbnRoZXNlcyBtYXRjaGVzIGVpdGhlciBvbmUgY2hhcmFjdGVyIHRoYXQKK2lzIG5vdCAiJiM2MDsiIG9yIGEgIiYjNjA7IiB0aGF0IGlzIG5vdCBmb2xsb3dlZCBieSAiaW5ldCIuIEhvd2V2ZXIsIGVhY2ggdGltZSBhCitwYXJlbnRoZXNpcyBpcyBwcm9jZXNzZWQsIGEgcmVjdXJzaW9uIG9jY3Vycywgc28gdGhpcyBmb3JtdWxhdGlvbiB1c2VzIGEgc3RhY2sKK2ZyYW1lIGZvciBlYWNoIG1hdGNoZWQgY2hhcmFjdGVyLiBGb3IgYSBsb25nIHN0cmluZywgYSBsb3Qgb2Ygc3RhY2sgaXMKK3JlcXVpcmVkLiBDb25zaWRlciBub3cgdGhpcyByZXdyaXR0ZW4gcGF0dGVybiwgd2hpY2ggbWF0Y2hlcyBleGFjdGx5IHRoZSBzYW1lCitzdHJpbmdzOgorPHByZT4KKyAgKFteJiM2MDtdKyt8JiM2MDsoPyFpbmV0KSkrCis8L3ByZT4KK1RoaXMgdXNlcyB2ZXJ5IG11Y2ggbGVzcyBzdGFjaywgYmVjYXVzZSBydW5zIG9mIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QgY29udGFpbgorIiYjNjA7IiBhcmUgInN3YWxsb3dlZCIgaW4gb25lIGl0ZW0gaW5zaWRlIHRoZSBwYXJlbnRoZXNlcy4gUmVjdXJzaW9uIGhhcHBlbnMgb25seQord2hlbiBhICImIzYwOyIgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGZvbGxvd2VkIGJ5ICJpbmV0IiBpcyBlbmNvdW50ZXJlZCAoYW5kIHdlCithc3N1bWUgdGhpcyBpcyByZWxhdGl2ZWx5IHJhcmUpLiBBIHBvc3Nlc3NpdmUgcXVhbnRpZmllciBpcyB1c2VkIHRvIHN0b3AgYW55CitiYWNrdHJhY2tpbmcgaW50byB0aGUgcnVucyBvZiBub24tIiYjNjA7IiBjaGFyYWN0ZXJzLCBidXQgdGhhdCBpcyBub3QgcmVsYXRlZCB0bworc3RhY2sgdXNhZ2UuCis8L1A+Cis8UD4KK1RoaXMgZXhhbXBsZSBzaG93cyB0aGF0IG9uZSB3YXkgb2YgYXZvaWRpbmcgc3RhY2sgcHJvYmxlbXMgd2hlbiBtYXRjaGluZyBsb25nCitzdWJqZWN0IHN0cmluZ3MgaXMgdG8gd3JpdGUgcmVwZWF0ZWQgcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJucyB0byBtYXRjaCBtb3JlCit0aGFuIG9uZSBjaGFyYWN0ZXIgd2hlbmV2ZXIgcG9zc2libGUuCis8L1A+Cis8YnI+PGI+CitDb21waWxpbmcgUENSRTIgdG8gdXNlIGhlYXAgaW5zdGVhZCBvZiBzdGFjayBmb3IgPGI+cGNyZTJfbWF0Y2goKTwvYj4KKzwvYj48YnI+Cis8UD4KK0luIGVudmlyb25tZW50cyB3aGVyZSBzdGFjayBtZW1vcnkgaXMgY29uc3RyYWluZWQsIHlvdSBtaWdodCB3YW50IHRvIGNvbXBpbGUKK1BDUkUyIHRvIHVzZSBoZWFwIG1lbW9yeSBpbnN0ZWFkIG9mIHN0YWNrIGZvciByZW1lbWJlcmluZyBiYWNrLXVwIHBvaW50cyB3aGVuCis8Yj5wY3JlMl9tYXRjaCgpPC9iPiBpcyBydW5uaW5nLiBUaGlzIG1ha2VzIGl0IHJ1biBtb3JlIHNsb3dseSwgaG93ZXZlci4gRGV0YWlscworb2YgaG93IHRvIGRvIHRoaXMgYXJlIGdpdmVuIGluIHRoZQorPGEgaHJlZj0icGNyZTJidWlsZC5odG1sIj48Yj5wY3JlMmJ1aWxkPC9iPjwvYT4KK2RvY3VtZW50YXRpb24uIFdoZW4gYnVpbHQgaW4gdGhpcyB3YXksIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YWNrLCBQQ1JFMgorZ2V0cyBtZW1vcnkgZm9yIHJlbWVtYmVyaW5nIGJhY2t1cCBwb2ludHMgZnJvbSB0aGUgaGVhcC4gQnkgZGVmYXVsdCwgdGhlIG1lbW9yeQoraXMgb2J0YWluZWQgYnkgY2FsbGluZyB0aGUgc3lzdGVtIDxiPm1hbGxvYygpPC9iPiBmdW5jdGlvbiwgYnV0IHlvdSBjYW4gYXJyYW5nZQordG8gc3VwcGx5IHlvdXIgb3duIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLiBGb3IgZGV0YWlscywgc2VlIHRoZSBzZWN0aW9uCitlbnRpdGxlZAorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCNtYXRjaGNvbnRleHQiPiJUaGUgbWF0Y2ggY29udGV4dCI8L2E+CitpbiB0aGUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK2RvY3VtZW50YXRpb24uIFNpbmNlIHRoZSBibG9jayBzaXplcyBhcmUgYWx3YXlzIHRoZSBzYW1lLCBpdCBtYXkgYmUgcG9zc2libGUgdG8KK2ltcGxlbWVudCBjdXN0b21pemVkIGEgbWVtb3J5IGhhbmRsZXIgdGhhdCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBzdGFuZGFyZAorZnVuY3Rpb24uIFRoZSBtZW1vcnkgYmxvY2tzIG9idGFpbmVkIGZvciB0aGlzIHB1cnBvc2UgYXJlIHJldGFpbmVkIGFuZCByZS11c2VkCitpZiBwb3NzaWJsZSB3aGlsZSA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBpcyBydW5uaW5nLiBUaGV5IGFyZSBhbGwgZnJlZWQganVzdAorYmVmb3JlIGl0IGV4aXRzLgorPC9QPgorPGJyPjxiPgorTGltaXRpbmcgPGI+cGNyZTJfbWF0Y2goKTwvYj4ncyBzdGFjayB1c2FnZQorPC9iPjxicj4KKzxQPgorWW91IGNhbiBzZXQgbGltaXRzIG9uIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGludGVybmFsIDxiPm1hdGNoKCk8L2I+IGZ1bmN0aW9uCitpcyBjYWxsZWQsIGJvdGggaW4gdG90YWwgYW5kIHJlY3Vyc2l2ZWx5LiBJZiBhIGxpbWl0IGlzIGV4Y2VlZGVkLAorPGI+cGNyZTJfbWF0Y2goKTwvYj4gcmV0dXJucyBhbiBlcnJvciBjb2RlLiBTZXR0aW5nIHN1aXRhYmxlIGxpbWl0cyBzaG91bGQKK3ByZXZlbnQgaXQgZnJvbSBydW5uaW5nIG91dCBvZiBzdGFjay4gVGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSBsaW1pdHMgYXJlIHZlcnkKK2xhcmdlLCBhbmQgdW5saWtlbHkgZXZlciB0byBvcGVyYXRlLiBUaGV5IGNhbiBiZSBjaGFuZ2VkIHdoZW4gUENSRTIgaXMgYnVpbHQsCithbmQgdGhleSBjYW4gYWxzbyBiZSBzZXQgd2hlbiA8Yj5wY3JlMl9tYXRjaCgpPC9iPiBpcyBjYWxsZWQuIEZvciBkZXRhaWxzIG9mCit0aGVzZSBpbnRlcmZhY2VzLCBzZWUgdGhlCis8YSBocmVmPSJwY3JlMmJ1aWxkLmh0bWwiPjxiPnBjcmUyYnVpbGQ8L2I+PC9hPgorZG9jdW1lbnRhdGlvbiBhbmQgdGhlIHNlY3Rpb24gZW50aXRsZWQKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwjbWF0Y2hjb250ZXh0Ij4iVGhlIG1hdGNoIGNvbnRleHQiPC9hPgoraW4gdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPC9QPgorPFA+CitBcyBhIHZlcnkgcm91Z2ggcnVsZSBvZiB0aHVtYiwgeW91IHNob3VsZCByZWNrb24gb24gYWJvdXQgNTAwIGJ5dGVzIHBlcgorcmVjdXJzaW9uLiBUaHVzLCBpZiB5b3Ugd2FudCB0byBsaW1pdCB5b3VyIHN0YWNrIHVzYWdlIHRvIDhNYiwgeW91IHNob3VsZCBzZXQKK3RoZSBsaW1pdCBhdCAxNjAwMCByZWN1cnNpb25zLiBBIDY0TWIgc3RhY2ssIG9uIHRoZSBvdGhlciBoYW5kLCBjYW4gc3VwcG9ydAorYXJvdW5kIDEyODAwMCByZWN1cnNpb25zLgorPC9QPgorPFA+CitUaGUgPGI+cGNyZTJ0ZXN0PC9iPiB0ZXN0IHByb2dyYW0gaGFzIGEgbW9kaWZpZXIgY2FsbGVkICJmaW5kX2xpbWl0cyIgd2hpY2gsIGlmCithcHBsaWVkIHRvIGEgc3ViamVjdCBsaW5lLCBjYXVzZXMgaXQgdG8gZmluZCB0aGUgc21hbGxlc3QgbGltaXRzIHRoYXQgYWxsb3cgYSBhCitwYXR0ZXJuIHRvIG1hdGNoLiBUaGlzIGlzIGRvbmUgYnkgY2FsbGluZyA8Yj5wY3JlMl9tYXRjaCgpPC9iPiByZXBlYXRlZGx5IHdpdGgKK2RpZmZlcmVudCBsaW1pdHMuCis8L1A+Cis8YnI+PGI+CitDaGFuZ2luZyBzdGFjayBzaXplIGluIFVuaXgtbGlrZSBzeXN0ZW1zCis8L2I+PGJyPgorPFA+CitJbiBVbml4LWxpa2UgZW52aXJvbm1lbnRzLCB0aGVyZSBpcyBub3Qgb2Z0ZW4gYSBwcm9ibGVtIHdpdGggdGhlIHN0YWNrIHVubGVzcwordmVyeSBsb25nIHN0cmluZ3MgYXJlIGludm9sdmVkLCB0aG91Z2ggdGhlIGRlZmF1bHQgbGltaXQgb24gc3RhY2sgc2l6ZSB2YXJpZXMKK2Zyb20gc3lzdGVtIHRvIHN5c3RlbS4gVmFsdWVzIGZyb20gOE1iIHRvIDY0TWIgYXJlIGNvbW1vbi4gWW91IGNhbiBmaW5kIHlvdXIKK2RlZmF1bHQgbGltaXQgYnkgcnVubmluZyB0aGUgY29tbWFuZDoKKzxwcmU+CisgIHVsaW1pdCAtcworPC9wcmU+CitVbmZvcnR1bmF0ZWx5LCB0aGUgZWZmZWN0IG9mIHJ1bm5pbmcgb3V0IG9mIHN0YWNrIGlzIG9mdGVuIFNJR1NFR1YsIHRob3VnaAorc29tZXRpbWVzIGEgbW9yZSBleHBsaWNpdCBlcnJvciBtZXNzYWdlIGlzIGdpdmVuLiBZb3UgY2FuIG5vcm1hbGx5IGluY3JlYXNlIHRoZQorbGltaXQgb24gc3RhY2sgc2l6ZSBieSBjb2RlIHN1Y2ggYXMgdGhpczoKKzxwcmU+CisgIHN0cnVjdCBybGltaXQgcmxpbTsKKyAgZ2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJnJsaW0pOworICBybGltLnJsaW1fY3VyID0gMTAwKjEwMjQqMTAyNDsKKyAgc2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJnJsaW0pOworPC9wcmU+CitUaGlzIHJlYWRzIHRoZSBjdXJyZW50IGxpbWl0cyAoc29mdCBhbmQgaGFyZCkgdXNpbmcgPGI+Z2V0cmxpbWl0KCk8L2I+LCB0aGVuCithdHRlbXB0cyB0byBpbmNyZWFzZSB0aGUgc29mdCBsaW1pdCB0byAxMDBNYiB1c2luZyA8Yj5zZXRybGltaXQoKTwvYj4uIFlvdSBtdXN0CitkbyB0aGlzIGJlZm9yZSBjYWxsaW5nIDxiPnBjcmUyX21hdGNoKCk8L2I+LgorPC9QPgorPGJyPjxiPgorQ2hhbmdpbmcgc3RhY2sgc2l6ZSBpbiBNYWMgT1MgWAorPC9iPjxicj4KKzxQPgorVXNpbmcgPGI+c2V0cmxpbWl0KCk8L2I+LCBhcyBkZXNjcmliZWQgYWJvdmUsIHNob3VsZCBhbHNvIHdvcmsgb24gTWFjIE9TIFguIEl0CitpcyBhbHNvIHBvc3NpYmxlIHRvIHNldCBhIHN0YWNrIHNpemUgd2hlbiBsaW5raW5nIGEgcHJvZ3JhbS4gVGhlcmUgaXMgYQorZGlzY3Vzc2lvbiBhYm91dCBzdGFjayBzaXplcyBpbiBNYWMgT1MgWCBhdCB0aGlzIHdlYiBzaXRlOgorPGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vcWEvcWEyMDA1L3FhMTQxOS5odG1sIj5odHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9xYS9xYTIwMDUvcWExNDE5Lmh0bWwuPC9hPgorPC9QPgorPGJyPjxiPgorQVVUSE9SCis8L2I+PGJyPgorPFA+CitQaGlsaXAgSGF6ZWwKKzxicj4KK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKzxicj4KK0NhbWJyaWRnZSwgRW5nbGFuZC4KKzxicj4KKzwvUD4KKzxicj48Yj4KK1JFVklTSU9OCis8L2I+PGJyPgorPFA+CitMYXN0IHVwZGF0ZWQ6IDIxIE5vdmVtYmVyIDIwMTQKKzxicj4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE0IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorPGJyPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJzeW50YXguaHRtbCBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyc3ludGF4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZkYzBkYwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUyc3ludGF4Lmh0bWwKQEAgLTAsMCArMSw1OTggQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJzeW50YXggc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUyc3ludGF4IG1hbiBwYWdlPC9oMT4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KKzxwPgorVGhpcyBwYWdlIGlzIHBhcnQgb2YgdGhlIFBDUkUyIEhUTUwgZG9jdW1lbnRhdGlvbi4gSXQgd2FzIGdlbmVyYXRlZAorYXV0b21hdGljYWxseSBmcm9tIHRoZSBvcmlnaW5hbCBtYW4gcGFnZS4gSWYgdGhlcmUgaXMgYW55IG5vbnNlbnNlIGluIGl0LAorcGxlYXNlIGNvbnN1bHQgdGhlIG1hbiBwYWdlLCBpbiBjYXNlIHRoZSBjb252ZXJzaW9uIHdlbnQgd3JvbmcuCis8YnI+Cis8dWw+Cis8bGk+PGEgbmFtZT0iVE9DMSIgaHJlZj0iI1NFQzEiPlBDUkUyIFJFR1VMQVIgRVhQUkVTU0lPTiBTWU5UQVggU1VNTUFSWTwvYT4KKzxsaT48YSBuYW1lPSJUT0MyIiBocmVmPSIjU0VDMiI+UVVPVElORzwvYT4KKzxsaT48YSBuYW1lPSJUT0MzIiBocmVmPSIjU0VDMyI+RVNDQVBFRCBDSEFSQUNURVJTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzQiIGhyZWY9IiNTRUM0Ij5DSEFSQUNURVIgVFlQRVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNSIgaHJlZj0iI1NFQzUiPkdFTkVSQUwgQ0FURUdPUlkgUFJPUEVSVElFUyBGT1IgXHAgYW5kIFxQPC9hPgorPGxpPjxhIG5hbWU9IlRPQzYiIGhyZWY9IiNTRUM2Ij5QQ1JFMiBTUEVDSUFMIENBVEVHT1JZIFBST1BFUlRJRVMgRk9SIFxwIGFuZCBcUDwvYT4KKzxsaT48YSBuYW1lPSJUT0M3IiBocmVmPSIjU0VDNyI+U0NSSVBUIE5BTUVTIEZPUiBccCBBTkQgXFA8L2E+Cis8bGk+PGEgbmFtZT0iVE9DOCIgaHJlZj0iI1NFQzgiPkNIQVJBQ1RFUiBDTEFTU0VTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzkiIGhyZWY9IiNTRUM5Ij5RVUFOVElGSUVSUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMCIgaHJlZj0iI1NFQzEwIj5BTkNIT1JTIEFORCBTSU1QTEUgQVNTRVJUSU9OUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMSIgaHJlZj0iI1NFQzExIj5NQVRDSCBQT0lOVCBSRVNFVDwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMiIgaHJlZj0iI1NFQzEyIj5BTFRFUk5BVElPTjwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMyIgaHJlZj0iI1NFQzEzIj5DQVBUVVJJTkc8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTQiIGhyZWY9IiNTRUMxNCI+QVRPTUlDIEdST1VQUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MxNSIgaHJlZj0iI1NFQzE1Ij5DT01NRU5UPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE2IiBocmVmPSIjU0VDMTYiPk9QVElPTiBTRVRUSU5HPC9hPgorPGxpPjxhIG5hbWU9IlRPQzE3IiBocmVmPSIjU0VDMTciPk5FV0xJTkUgQ09OVkVOVElPTjwvYT4KKzxsaT48YSBuYW1lPSJUT0MxOCIgaHJlZj0iI1NFQzE4Ij5XSEFUIFxSIE1BVENIRVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTkiIGhyZWY9IiNTRUMxOSI+TE9PS0FIRUFEIEFORCBMT09LQkVISU5EIEFTU0VSVElPTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjAiIGhyZWY9IiNTRUMyMCI+QkFDS1JFRkVSRU5DRVM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjEiIGhyZWY9IiNTRUMyMSI+U1VCUk9VVElORSBSRUZFUkVOQ0VTIChQT1NTSUJMWSBSRUNVUlNJVkUpPC9hPgorPGxpPjxhIG5hbWU9IlRPQzIyIiBocmVmPSIjU0VDMjIiPkNPTkRJVElPTkFMIFBBVFRFUk5TPC9hPgorPGxpPjxhIG5hbWU9IlRPQzIzIiBocmVmPSIjU0VDMjMiPkJBQ0tUUkFDS0lORyBDT05UUk9MPC9hPgorPGxpPjxhIG5hbWU9IlRPQzI0IiBocmVmPSIjU0VDMjQiPkNBTExPVVRTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzI1IiBocmVmPSIjU0VDMjUiPlNFRSBBTFNPPC9hPgorPGxpPjxhIG5hbWU9IlRPQzI2IiBocmVmPSIjU0VDMjYiPkFVVEhPUjwvYT4KKzxsaT48YSBuYW1lPSJUT0MyNyIgaHJlZj0iI1NFQzI3Ij5SRVZJU0lPTjwvYT4KKzwvdWw+Cis8YnI+PGEgbmFtZT0iU0VDMSIgaHJlZj0iI1RPQzEiPlBDUkUyIFJFR1VMQVIgRVhQUkVTU0lPTiBTWU5UQVggU1VNTUFSWTwvYT48YnI+Cis8UD4KK1RoZSBmdWxsIHN5bnRheCBhbmQgc2VtYW50aWNzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgYXJlIHN1cHBvcnRlZCBieQorUENSRTIgYXJlIGRlc2NyaWJlZCBpbiB0aGUKKzxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sIj48Yj5wY3JlMnBhdHRlcm48L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4gVGhpcyBkb2N1bWVudCBjb250YWlucyBhIHF1aWNrLXJlZmVyZW5jZSBzdW1tYXJ5IG9mIHRoZSBzeW50YXguCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMiIgaHJlZj0iI1RPQzEiPlFVT1RJTkc8L2E+PGJyPgorPFA+Cis8cHJlPgorICBceCAgICAgICAgIHdoZXJlIHggaXMgbm9uLWFscGhhbnVtZXJpYyBpcyBhIGxpdGVyYWwgeAorICBcUS4uLlxFICAgIHRyZWF0IGVuY2xvc2VkIGNoYXJhY3RlcnMgYXMgbGl0ZXJhbAorPC9QUkU+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMyIgaHJlZj0iI1RPQzEiPkVTQ0FQRUQgQ0hBUkFDVEVSUzwvYT48YnI+Cis8UD4KK1RoaXMgdGFibGUgYXBwbGllcyB0byBBU0NJSSBhbmQgVW5pY29kZSBlbnZpcm9ubWVudHMuCis8cHJlPgorICBcYSAgICAgICAgIGFsYXJtLCB0aGF0IGlzLCB0aGUgQkVMIGNoYXJhY3RlciAoaGV4IDA3KQorICBcY3ggICAgICAgICJjb250cm9sLXgiLCB3aGVyZSB4IGlzIGFueSBBU0NJSSBwcmludGluZyBjaGFyYWN0ZXIKKyAgXGUgICAgICAgICBlc2NhcGUgKGhleCAxQikKKyAgXGYgICAgICAgICBmb3JtIGZlZWQgKGhleCAwQykKKyAgXG4gICAgICAgICBuZXdsaW5lIChoZXggMEEpCisgIFxyICAgICAgICAgY2FycmlhZ2UgcmV0dXJuIChoZXggMEQpCisgIFx0ICAgICAgICAgdGFiIChoZXggMDkpCisgIFwwZGQgICAgICAgY2hhcmFjdGVyIHdpdGggb2N0YWwgY29kZSAwZGQKKyAgXGRkZCAgICAgICBjaGFyYWN0ZXIgd2l0aCBvY3RhbCBjb2RlIGRkZCwgb3IgYmFja3JlZmVyZW5jZQorICBcb3tkZGQuLn0gIGNoYXJhY3RlciB3aXRoIG9jdGFsIGNvZGUgZGRkLi4KKyAgXFUgICAgICAgICAiVSIgaWYgUENSRTJfQUxUX0JTVVggaXMgc2V0IChvdGhlcndpc2UgaXMgYW4gZXJyb3IpCisgIFx1aGhoaCAgICAgY2hhcmFjdGVyIHdpdGggaGV4IGNvZGUgaGhoaCAoaWYgUENSRTJfQUxUX0JTVVggaXMgc2V0KQorICBceGhoICAgICAgIGNoYXJhY3RlciB3aXRoIGhleCBjb2RlIGhoCisgIFx4e2hoaC4ufSAgY2hhcmFjdGVyIHdpdGggaGV4IGNvZGUgaGhoLi4KKzwvcHJlPgorTm90ZSB0aGF0IFwwZGQgaXMgYWx3YXlzIGFuIG9jdGFsIGNvZGUuIFRoZSB0cmVhdG1lbnQgb2YgYmFja3NsYXNoIGZvbGxvd2VkIGJ5CithIG5vbi16ZXJvIGRpZ2l0IGlzIGNvbXBsaWNhdGVkOyBmb3IgZGV0YWlscyBzZWUgdGhlIHNlY3Rpb24KKzxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sI2RpZ2l0c2FmdGVyYmFja3NsYXNoIj4iTm9uLXByaW50aW5nIGNoYXJhY3RlcnMiPC9hPgoraW4gdGhlCis8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCI+PGI+cGNyZTJwYXR0ZXJuPC9iPjwvYT4KK2RvY3VtZW50YXRpb24sIHdoZXJlIGRldGFpbHMgb2YgZXNjYXBlIHByb2Nlc3NpbmcgaW4gRUJDRElDIGVudmlyb25tZW50cyBhcmUKK2Fsc28gZ2l2ZW4uCis8L1A+Cis8UD4KK1doZW4gXHggaXMgbm90IGZvbGxvd2VkIGJ5IHssIGZyb20gemVybyB0byB0d28gaGV4YWRlY2ltYWwgZGlnaXRzIGFyZSByZWFkLAorYnV0IGlmIFBDUkUyX0FMVF9CU1VYIGlzIHNldCwgXHggbXVzdCBiZSBmb2xsb3dlZCBieSB0d28gaGV4YWRlY2ltYWwgZGlnaXRzIHRvCitiZSByZWNvZ25pemVkIGFzIGEgaGV4YWRlY2ltYWwgZXNjYXBlOyBvdGhlcndpc2UgaXQgbWF0Y2hlcyBhIGxpdGVyYWwgIngiLgorTGlrZXdpc2UsIGlmIFx1IChpbiBBTFRfQlNVWCBtb2RlKSBpcyBub3QgZm9sbG93ZWQgYnkgZm91ciBoZXhhZGVjaW1hbCBkaWdpdHMsCitpdCBtYXRjaGVzIGEgbGl0ZXJhbCAidSIuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNCIgaHJlZj0iI1RPQzEiPkNIQVJBQ1RFUiBUWVBFUzwvYT48YnI+Cis8UD4KKzxwcmU+CisgIC4gICAgICAgICAgYW55IGNoYXJhY3RlciBleGNlcHQgbmV3bGluZTsKKyAgICAgICAgICAgICAgIGluIGRvdGFsbCBtb2RlLCBhbnkgY2hhcmFjdGVyIHdoYXRzb2V2ZXIKKyAgXEMgICAgICAgICBvbmUgY29kZSB1bml0LCBldmVuIGluIFVURiBtb2RlIChiZXN0IGF2b2lkZWQpCisgIFxkICAgICAgICAgYSBkZWNpbWFsIGRpZ2l0CisgIFxEICAgICAgICAgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSBkZWNpbWFsIGRpZ2l0CisgIFxoICAgICAgICAgYSBob3Jpem9udGFsIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcSCAgICAgICAgIGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGEgaG9yaXpvbnRhbCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIKKyAgXE4gICAgICAgICBhIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIG5ld2xpbmUKKyAgXHB7PGk+eHg8L2k+fSAgICAgYSBjaGFyYWN0ZXIgd2l0aCB0aGUgPGk+eHg8L2k+IHByb3BlcnR5CisgIFxQezxpPnh4PC9pPn0gICAgIGEgY2hhcmFjdGVyIHdpdGhvdXQgdGhlIDxpPnh4PC9pPiBwcm9wZXJ0eQorICBcUiAgICAgICAgIGEgbmV3bGluZSBzZXF1ZW5jZQorICBccyAgICAgICAgIGEgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgIFxTICAgICAgICAgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIKKyAgXHYgICAgICAgICBhIHZlcnRpY2FsIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcViAgICAgICAgIGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGEgdmVydGljYWwgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgIFx3ICAgICAgICAgYSAid29yZCIgY2hhcmFjdGVyCisgIFxXICAgICAgICAgYSAibm9uLXdvcmQiIGNoYXJhY3RlcgorICBcWCAgICAgICAgIGEgVW5pY29kZSBleHRlbmRlZCBncmFwaGVtZSBjbHVzdGVyCis8L3ByZT4KK1xDIGlzIGRhbmdlcm91cyBiZWNhdXNlIGl0IG1heSBsZWF2ZSB0aGUgY3VycmVudCBtYXRjaGluZyBwb2ludCBpbiB0aGUgbWlkZGxlCitvZiBhIFVURi04IG9yIFVURi0xNiBjaGFyYWN0ZXIuIFRoZSBhcHBsaWNhdGlvbiBjYW4gbG9jayBvdXQgdGhlIHVzZSBvZiBcQyBieQorc2V0dGluZyB0aGUgUENSRTJfTkVWRVJfQkFDS1NMQVNIX0Mgb3B0aW9uLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGJ1aWxkIFBDUkUyCit3aXRoIHRoZSB1c2Ugb2YgXEMgcGVybWFuZW50bHkgZGlzYWJsZWQuCis8L1A+Cis8UD4KK0J5IGRlZmF1bHQsIFxkLCBccywgYW5kIFx3IG1hdGNoIG9ubHkgQVNDSUkgY2hhcmFjdGVycywgZXZlbiBpbiBVVEYtOCBtb2RlCitvciBpbiB0aGUgMTYtYml0IGFuZCAzMi1iaXQgbGlicmFyaWVzLiBIb3dldmVyLCBpZiBsb2NhbGUtc3BlY2lmaWMgbWF0Y2hpbmcgaXMKK2hhcHBlbmluZywgXHMgYW5kIFx3IG1heSBhbHNvIG1hdGNoIGNoYXJhY3RlcnMgd2l0aCBjb2RlIHBvaW50cyBpbiB0aGUgcmFuZ2UKKzEyOC0yNTUuIElmIHRoZSBQQ1JFMl9VQ1Agb3B0aW9uIGlzIHNldCwgdGhlIGJlaGF2aW91ciBvZiB0aGVzZSBlc2NhcGUKK3NlcXVlbmNlcyBpcyBjaGFuZ2VkIHRvIHVzZSBVbmljb2RlIHByb3BlcnRpZXMgYW5kIHRoZXkgbWF0Y2ggbWFueSBtb3JlCitjaGFyYWN0ZXJzLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzUiIGhyZWY9IiNUT0MxIj5HRU5FUkFMIENBVEVHT1JZIFBST1BFUlRJRVMgRk9SIFxwIGFuZCBcUDwvYT48YnI+Cis8UD4KKzxwcmU+CisgIEMgICAgICAgICAgT3RoZXIKKyAgQ2MgICAgICAgICBDb250cm9sCisgIENmICAgICAgICAgRm9ybWF0CisgIENuICAgICAgICAgVW5hc3NpZ25lZAorICBDbyAgICAgICAgIFByaXZhdGUgdXNlCisgIENzICAgICAgICAgU3Vycm9nYXRlCisKKyAgTCAgICAgICAgICBMZXR0ZXIKKyAgTGwgICAgICAgICBMb3dlciBjYXNlIGxldHRlcgorICBMbSAgICAgICAgIE1vZGlmaWVyIGxldHRlcgorICBMbyAgICAgICAgIE90aGVyIGxldHRlcgorICBMdCAgICAgICAgIFRpdGxlIGNhc2UgbGV0dGVyCisgIEx1ICAgICAgICAgVXBwZXIgY2FzZSBsZXR0ZXIKKyAgTCYgICAgICAgICBMbCwgTHUsIG9yIEx0CisKKyAgTSAgICAgICAgICBNYXJrCisgIE1jICAgICAgICAgU3BhY2luZyBtYXJrCisgIE1lICAgICAgICAgRW5jbG9zaW5nIG1hcmsKKyAgTW4gICAgICAgICBOb24tc3BhY2luZyBtYXJrCisKKyAgTiAgICAgICAgICBOdW1iZXIKKyAgTmQgICAgICAgICBEZWNpbWFsIG51bWJlcgorICBObCAgICAgICAgIExldHRlciBudW1iZXIKKyAgTm8gICAgICAgICBPdGhlciBudW1iZXIKKworICBQICAgICAgICAgIFB1bmN0dWF0aW9uCisgIFBjICAgICAgICAgQ29ubmVjdG9yIHB1bmN0dWF0aW9uCisgIFBkICAgICAgICAgRGFzaCBwdW5jdHVhdGlvbgorICBQZSAgICAgICAgIENsb3NlIHB1bmN0dWF0aW9uCisgIFBmICAgICAgICAgRmluYWwgcHVuY3R1YXRpb24KKyAgUGkgICAgICAgICBJbml0aWFsIHB1bmN0dWF0aW9uCisgIFBvICAgICAgICAgT3RoZXIgcHVuY3R1YXRpb24KKyAgUHMgICAgICAgICBPcGVuIHB1bmN0dWF0aW9uCisKKyAgUyAgICAgICAgICBTeW1ib2wKKyAgU2MgICAgICAgICBDdXJyZW5jeSBzeW1ib2wKKyAgU2sgICAgICAgICBNb2RpZmllciBzeW1ib2wKKyAgU20gICAgICAgICBNYXRoZW1hdGljYWwgc3ltYm9sCisgIFNvICAgICAgICAgT3RoZXIgc3ltYm9sCisKKyAgWiAgICAgICAgICBTZXBhcmF0b3IKKyAgWmwgICAgICAgICBMaW5lIHNlcGFyYXRvcgorICBacCAgICAgICAgIFBhcmFncmFwaCBzZXBhcmF0b3IKKyAgWnMgICAgICAgICBTcGFjZSBzZXBhcmF0b3IKKzwvUFJFPgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzYiIGhyZWY9IiNUT0MxIj5QQ1JFMiBTUEVDSUFMIENBVEVHT1JZIFBST1BFUlRJRVMgRk9SIFxwIGFuZCBcUDwvYT48YnI+Cis8UD4KKzxwcmU+CisgIFhhbiAgICAgICAgQWxwaGFudW1lcmljOiB1bmlvbiBvZiBwcm9wZXJ0aWVzIEwgYW5kIE4KKyAgWHBzICAgICAgICBQT1NJWCBzcGFjZTogcHJvcGVydHkgWiBvciB0YWIsIE5MLCBWVCwgRkYsIENSCisgIFhzcCAgICAgICAgUGVybCBzcGFjZTogcHJvcGVydHkgWiBvciB0YWIsIE5MLCBWVCwgRkYsIENSCisgIFh1YyAgICAgICAgVW5pdmVyYWxseS1uYW1lZCBjaGFyYWN0ZXI6IG9uZSB0aGF0IGNhbiBiZQorICAgICAgICAgICAgICAgcmVwcmVzZW50ZWQgYnkgYSBVbml2ZXJzYWwgQ2hhcmFjdGVyIE5hbWUKKyAgWHdkICAgICAgICBQZXJsIHdvcmQ6IHByb3BlcnR5IFhhbiBvciB1bmRlcnNjb3JlCis8L3ByZT4KK1BlcmwgYW5kIFBPU0lYIHNwYWNlIGFyZSBub3cgdGhlIHNhbWUuIFBlcmwgYWRkZWQgVlQgdG8gaXRzIHNwYWNlIGNoYXJhY3RlciBzZXQKK2F0IHJlbGVhc2UgNS4xOC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM3IiBocmVmPSIjVE9DMSI+U0NSSVBUIE5BTUVTIEZPUiBccCBBTkQgXFA8L2E+PGJyPgorPFA+CitBaG9tLAorQW5hdG9saWFuX0hpZXJvZ2x5cGhzLAorQXJhYmljLAorQXJtZW5pYW4sCitBdmVzdGFuLAorQmFsaW5lc2UsCitCYW11bSwKK0Jhc3NhX1ZhaCwKK0JhdGFrLAorQmVuZ2FsaSwKK0JvcG9tb2ZvLAorQnJhaG1pLAorQnJhaWxsZSwKK0J1Z2luZXNlLAorQnVoaWQsCitDYW5hZGlhbl9BYm9yaWdpbmFsLAorQ2FyaWFuLAorQ2F1Y2FzaWFuX0FsYmFuaWFuLAorQ2hha21hLAorQ2hhbSwKK0NoZXJva2VlLAorQ29tbW9uLAorQ29wdGljLAorQ3VuZWlmb3JtLAorQ3lwcmlvdCwKK0N5cmlsbGljLAorRGVzZXJldCwKK0RldmFuYWdhcmksCitEdXBsb3lhbiwKK0VneXB0aWFuX0hpZXJvZ2x5cGhzLAorRWxiYXNhbiwKK0V0aGlvcGljLAorR2VvcmdpYW4sCitHbGFnb2xpdGljLAorR290aGljLAorR3JhbnRoYSwKK0dyZWVrLAorR3VqYXJhdGksCitHdXJtdWtoaSwKK0hhbiwKK0hhbmd1bCwKK0hhbnVub28sCitIYXRyYW4sCitIZWJyZXcsCitIaXJhZ2FuYSwKK0ltcGVyaWFsX0FyYW1haWMsCitJbmhlcml0ZWQsCitJbnNjcmlwdGlvbmFsX1BhaGxhdmksCitJbnNjcmlwdGlvbmFsX1BhcnRoaWFuLAorSmF2YW5lc2UsCitLYWl0aGksCitLYW5uYWRhLAorS2F0YWthbmEsCitLYXlhaF9MaSwKK0toYXJvc2h0aGksCitLaG1lciwKK0tob2praSwKK0todWRhd2FkaSwKK0xhbywKK0xhdGluLAorTGVwY2hhLAorTGltYnUsCitMaW5lYXJfQSwKK0xpbmVhcl9CLAorTGlzdSwKK0x5Y2lhbiwKK0x5ZGlhbiwKK01haGFqYW5pLAorTWFsYXlhbGFtLAorTWFuZGFpYywKK01hbmljaGFlYW4sCitNZWV0ZWlfTWF5ZWssCitNZW5kZV9LaWtha3VpLAorTWVyb2l0aWNfQ3Vyc2l2ZSwKK01lcm9pdGljX0hpZXJvZ2x5cGhzLAorTWlhbywKK01vZGksCitNb25nb2xpYW4sCitNcm8sCitNdWx0YW5pLAorTXlhbm1hciwKK05hYmF0YWVhbiwKK05ld19UYWlfTHVlLAorTmtvLAorT2doYW0sCitPbF9DaGlraSwKK09sZF9IdW5nYXJpYW4sCitPbGRfSXRhbGljLAorT2xkX05vcnRoX0FyYWJpYW4sCitPbGRfUGVybWljLAorT2xkX1BlcnNpYW4sCitPbGRfU291dGhfQXJhYmlhbiwKK09sZF9UdXJraWMsCitPcml5YSwKK09zbWFueWEsCitQYWhhd2hfSG1vbmcsCitQYWxteXJlbmUsCitQYXVfQ2luX0hhdSwKK1BoYWdzX1BhLAorUGhvZW5pY2lhbiwKK1BzYWx0ZXJfUGFobGF2aSwKK1JlamFuZywKK1J1bmljLAorU2FtYXJpdGFuLAorU2F1cmFzaHRyYSwKK1NoYXJhZGEsCitTaGF2aWFuLAorU2lkZGhhbSwKK1NpZ25Xcml0aW5nLAorU2luaGFsYSwKK1NvcmFfU29tcGVuZywKK1N1bmRhbmVzZSwKK1N5bG90aV9OYWdyaSwKK1N5cmlhYywKK1RhZ2Fsb2csCitUYWdiYW53YSwKK1RhaV9MZSwKK1RhaV9UaGFtLAorVGFpX1ZpZXQsCitUYWtyaSwKK1RhbWlsLAorVGVsdWd1LAorVGhhYW5hLAorVGhhaSwKK1RpYmV0YW4sCitUaWZpbmFnaCwKK1Rpcmh1dGEsCitVZ2FyaXRpYywKK1ZhaSwKK1dhcmFuZ19DaXRpLAorWWkuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDOCIgaHJlZj0iI1RPQzEiPkNIQVJBQ1RFUiBDTEFTU0VTPC9hPjxicj4KKzxQPgorPHByZT4KKyAgWy4uLl0gICAgICAgcG9zaXRpdmUgY2hhcmFjdGVyIGNsYXNzCisgIFteLi4uXSAgICAgIG5lZ2F0aXZlIGNoYXJhY3RlciBjbGFzcworICBbeC15XSAgICAgICByYW5nZSAoY2FuIGJlIHVzZWQgZm9yIGhleCBjaGFyYWN0ZXJzKQorICBbWzp4eHg6XV0gICBwb3NpdGl2ZSBQT1NJWCBuYW1lZCBzZXQKKyAgW1s6Xnh4eDpdXSAgbmVnYXRpdmUgUE9TSVggbmFtZWQgc2V0CisKKyAgYWxudW0gICAgICAgYWxwaGFudW1lcmljCisgIGFscGhhICAgICAgIGFscGhhYmV0aWMKKyAgYXNjaWkgICAgICAgMC0xMjcKKyAgYmxhbmsgICAgICAgc3BhY2Ugb3IgdGFiCisgIGNudHJsICAgICAgIGNvbnRyb2wgY2hhcmFjdGVyCisgIGRpZ2l0ICAgICAgIGRlY2ltYWwgZGlnaXQKKyAgZ3JhcGggICAgICAgcHJpbnRpbmcsIGV4Y2x1ZGluZyBzcGFjZQorICBsb3dlciAgICAgICBsb3dlciBjYXNlIGxldHRlcgorICBwcmludCAgICAgICBwcmludGluZywgaW5jbHVkaW5nIHNwYWNlCisgIHB1bmN0ICAgICAgIHByaW50aW5nLCBleGNsdWRpbmcgYWxwaGFudW1lcmljCisgIHNwYWNlICAgICAgIHdoaXRlIHNwYWNlCisgIHVwcGVyICAgICAgIHVwcGVyIGNhc2UgbGV0dGVyCisgIHdvcmQgICAgICAgIHNhbWUgYXMgXHcKKyAgeGRpZ2l0ICAgICAgaGV4YWRlY2ltYWwgZGlnaXQKKzwvcHJlPgorSW4gUENSRTIsIFBPU0lYIGNoYXJhY3RlciBzZXQgbmFtZXMgcmVjb2duaXplIG9ubHkgQVNDSUkgY2hhcmFjdGVycyBieSBkZWZhdWx0LAorYnV0IHNvbWUgb2YgdGhlbSB1c2UgVW5pY29kZSBwcm9wZXJ0aWVzIGlmIFBDUkUyX1VDUCBpcyBzZXQuIFlvdSBjYW4gdXNlCitcUS4uLlxFIGluc2lkZSBhIGNoYXJhY3RlciBjbGFzcy4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM5IiBocmVmPSIjVE9DMSI+UVVBTlRJRklFUlM8L2E+PGJyPgorPFA+Cis8cHJlPgorICA/ICAgICAgICAgICAwIG9yIDEsIGdyZWVkeQorICA/KyAgICAgICAgICAwIG9yIDEsIHBvc3Nlc3NpdmUKKyAgPz8gICAgICAgICAgMCBvciAxLCBsYXp5CisgICogICAgICAgICAgIDAgb3IgbW9yZSwgZ3JlZWR5CisgICorICAgICAgICAgIDAgb3IgbW9yZSwgcG9zc2Vzc2l2ZQorICAqPyAgICAgICAgICAwIG9yIG1vcmUsIGxhenkKKyAgKyAgICAgICAgICAgMSBvciBtb3JlLCBncmVlZHkKKyAgKysgICAgICAgICAgMSBvciBtb3JlLCBwb3NzZXNzaXZlCisgICs/ICAgICAgICAgIDEgb3IgbW9yZSwgbGF6eQorICB7bn0gICAgICAgICBleGFjdGx5IG4KKyAge24sbX0gICAgICAgYXQgbGVhc3Qgbiwgbm8gbW9yZSB0aGFuIG0sIGdyZWVkeQorICB7bixtfSsgICAgICBhdCBsZWFzdCBuLCBubyBtb3JlIHRoYW4gbSwgcG9zc2Vzc2l2ZQorICB7bixtfT8gICAgICBhdCBsZWFzdCBuLCBubyBtb3JlIHRoYW4gbSwgbGF6eQorICB7bix9ICAgICAgICBuIG9yIG1vcmUsIGdyZWVkeQorICB7bix9KyAgICAgICBuIG9yIG1vcmUsIHBvc3Nlc3NpdmUKKyAge24sfT8gICAgICAgbiBvciBtb3JlLCBsYXp5Cis8L1BSRT4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxMCIgaHJlZj0iI1RPQzEiPkFOQ0hPUlMgQU5EIFNJTVBMRSBBU1NFUlRJT05TPC9hPjxicj4KKzxQPgorPHByZT4KKyAgXGIgICAgICAgICAgd29yZCBib3VuZGFyeQorICBcQiAgICAgICAgICBub3QgYSB3b3JkIGJvdW5kYXJ5CisgIF4gICAgICAgICAgIHN0YXJ0IG9mIHN1YmplY3QKKyAgICAgICAgICAgICAgICBhbHNvIGFmdGVyIGFuIGludGVybmFsIG5ld2xpbmUgaW4gbXVsdGlsaW5lIG1vZGUKKyAgICAgICAgICAgICAgICAoYWZ0ZXIgYW55IG5ld2xpbmUgaWYgUENSRTJfQUxUX0NJUkNVTUZMRVggaXMgc2V0KQorICBcQSAgICAgICAgICBzdGFydCBvZiBzdWJqZWN0CisgICQgICAgICAgICAgIGVuZCBvZiBzdWJqZWN0CisgICAgICAgICAgICAgICAgYWxzbyBiZWZvcmUgbmV3bGluZSBhdCBlbmQgb2Ygc3ViamVjdAorICAgICAgICAgICAgICAgIGFsc28gYmVmb3JlIGludGVybmFsIG5ld2xpbmUgaW4gbXVsdGlsaW5lIG1vZGUKKyAgXFogICAgICAgICAgZW5kIG9mIHN1YmplY3QKKyAgICAgICAgICAgICAgICBhbHNvIGJlZm9yZSBuZXdsaW5lIGF0IGVuZCBvZiBzdWJqZWN0CisgIFx6ICAgICAgICAgIGVuZCBvZiBzdWJqZWN0CisgIFxHICAgICAgICAgIGZpcnN0IG1hdGNoaW5nIHBvc2l0aW9uIGluIHN1YmplY3QKKzwvUFJFPgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzExIiBocmVmPSIjVE9DMSI+TUFUQ0ggUE9JTlQgUkVTRVQ8L2E+PGJyPgorPFA+Cis8cHJlPgorICBcSyAgICAgICAgICByZXNldCBzdGFydCBvZiBtYXRjaAorPC9wcmU+CitcSyBpcyBob25vdXJlZCBpbiBwb3NpdGl2ZSBhc3NlcnRpb25zLCBidXQgaWdub3JlZCBpbiBuZWdhdGl2ZSBvbmVzLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzEyIiBocmVmPSIjVE9DMSI+QUxURVJOQVRJT048L2E+PGJyPgorPFA+Cis8cHJlPgorICBleHByfGV4cHJ8ZXhwci4uLgorPC9QUkU+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTMiIGhyZWY9IiNUT0MxIj5DQVBUVVJJTkc8L2E+PGJyPgorPFA+Cis8cHJlPgorICAoLi4uKSAgICAgICAgICAgY2FwdHVyaW5nIGdyb3VwCisgICg/JiM2MDtuYW1lJiM2MjsuLi4pICAgIG5hbWVkIGNhcHR1cmluZyBncm91cCAoUGVybCkKKyAgKD8nbmFtZScuLi4pICAgIG5hbWVkIGNhcHR1cmluZyBncm91cCAoUGVybCkKKyAgKD9QJiM2MDtuYW1lJiM2MjsuLi4pICAgbmFtZWQgY2FwdHVyaW5nIGdyb3VwIChQeXRob24pCisgICg/Oi4uLikgICAgICAgICBub24tY2FwdHVyaW5nIGdyb3VwCisgICg/fC4uLikgICAgICAgICBub24tY2FwdHVyaW5nIGdyb3VwOyByZXNldCBncm91cCBudW1iZXJzIGZvcgorICAgICAgICAgICAgICAgICAgIGNhcHR1cmluZyBncm91cHMgaW4gZWFjaCBhbHRlcm5hdGl2ZQorPC9QUkU+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTQiIGhyZWY9IiNUT0MxIj5BVE9NSUMgR1JPVVBTPC9hPjxicj4KKzxQPgorPHByZT4KKyAgKD8mIzYyOy4uLikgICAgICAgICBhdG9taWMsIG5vbi1jYXB0dXJpbmcgZ3JvdXAKKzwvUFJFPgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzE1IiBocmVmPSIjVE9DMSI+Q09NTUVOVDwvYT48YnI+Cis8UD4KKzxwcmU+CisgICg/Iy4uLi4pICAgICAgICBjb21tZW50IChub3QgbmVzdGFibGUpCis8L1BSRT4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxNiIgaHJlZj0iI1RPQzEiPk9QVElPTiBTRVRUSU5HPC9hPjxicj4KKzxQPgorPHByZT4KKyAgKD9pKSAgICAgICAgICAgIGNhc2VsZXNzCisgICg/SikgICAgICAgICAgICBhbGxvdyBkdXBsaWNhdGUgbmFtZXMKKyAgKD9tKSAgICAgICAgICAgIG11bHRpbGluZQorICAoP3MpICAgICAgICAgICAgc2luZ2xlIGxpbmUgKGRvdGFsbCkKKyAgKD9VKSAgICAgICAgICAgIGRlZmF1bHQgdW5ncmVlZHkgKGxhenkpCisgICg/eCkgICAgICAgICAgICBleHRlbmRlZCAoaWdub3JlIHdoaXRlIHNwYWNlKQorICAoPy0uLi4pICAgICAgICAgdW5zZXQgb3B0aW9uKHMpCis8L3ByZT4KK1RoZSBmb2xsb3dpbmcgYXJlIHJlY29nbml6ZWQgb25seSBhdCB0aGUgdmVyeSBzdGFydCBvZiBhIHBhdHRlcm4gb3IgYWZ0ZXIgb25lCitvZiB0aGUgbmV3bGluZSBvciBcUiBvcHRpb25zIHdpdGggc2ltaWxhciBzeW50YXguIE1vcmUgdGhhbiBvbmUgb2YgdGhlbSBtYXkKK2FwcGVhci4KKzxwcmU+CisgICgqTElNSVRfTUFUQ0g9ZCkgc2V0IHRoZSBtYXRjaCBsaW1pdCB0byBkIChkZWNpbWFsIG51bWJlcikKKyAgKCpMSU1JVF9SRUNVUlNJT049ZCkgc2V0IHRoZSByZWN1cnNpb24gbGltaXQgdG8gZCAoZGVjaW1hbCBudW1iZXIpCisgICgqTk9URU1QVFkpICAgICBzZXQgUENSRTJfTk9URU1QVFkgd2hlbiBtYXRjaGluZworICAoKk5PVEVNUFRZX0FUU1RBUlQpIHNldCBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIHdoZW4gbWF0Y2hpbmcKKyAgKCpOT19BVVRPX1BPU1NFU1MpIG5vIGF1dG8tcG9zc2Vzc2lmaWNhdGlvbiAoUENSRTJfTk9fQVVUT19QT1NTRVNTKQorICAoKk5PX0RPVFNUQVJfQU5DSE9SKSBubyAuKiBhbmNob3JpbmcgKFBDUkUyX05PX0RPVFNUQVJfQU5DSE9SKQorICAoKk5PX0pJVCkgICAgICAgZGlzYWJsZSBKSVQgb3B0aW1pemF0aW9uCisgICgqTk9fU1RBUlRfT1BUKSBubyBzdGFydC1tYXRjaCBvcHRpbWl6YXRpb24gKFBDUkUyX05PX1NUQVJUX09QVElNSVpFKQorICAoKlVURikgICAgICAgICAgc2V0IGFwcHJvcHJpYXRlIFVURiBtb2RlIGZvciB0aGUgbGlicmFyeSBpbiB1c2UKKyAgKCpVQ1ApICAgICAgICAgIHNldCBQQ1JFMl9VQ1AgKHVzZSBVbmljb2RlIHByb3BlcnRpZXMgZm9yIFxkIGV0YykKKzwvcHJlPgorTm90ZSB0aGF0IExJTUlUX01BVENIIGFuZCBMSU1JVF9SRUNVUlNJT04gY2FuIG9ubHkgcmVkdWNlIHRoZSB2YWx1ZSBvZiB0aGUKK2xpbWl0cyBzZXQgYnkgdGhlIGNhbGxlciBvZiBwY3JlMl9tYXRjaCgpLCBub3QgaW5jcmVhc2UgdGhlbS4gVGhlIGFwcGxpY2F0aW9uCitjYW4gbG9jayBvdXQgdGhlIHVzZSBvZiAoKlVURikgYW5kICgqVUNQKSBieSBzZXR0aW5nIHRoZSBQQ1JFMl9ORVZFUl9VVEYgb3IKK1BDUkUyX05FVkVSX1VDUCBvcHRpb25zLCByZXNwZWN0aXZlbHksIGF0IGNvbXBpbGUgdGltZS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxNyIgaHJlZj0iI1RPQzEiPk5FV0xJTkUgQ09OVkVOVElPTjwvYT48YnI+Cis8UD4KK1RoZXNlIGFyZSByZWNvZ25pemVkIG9ubHkgYXQgdGhlIHZlcnkgc3RhcnQgb2YgdGhlIHBhdHRlcm4gb3IgYWZ0ZXIgb3B0aW9uCitzZXR0aW5ncyB3aXRoIGEgc2ltaWxhciBzeW50YXguCis8cHJlPgorICAoKkNSKSAgICAgICAgICAgY2FycmlhZ2UgcmV0dXJuIG9ubHkKKyAgKCpMRikgICAgICAgICAgIGxpbmVmZWVkIG9ubHkKKyAgKCpDUkxGKSAgICAgICAgIGNhcnJpYWdlIHJldHVybiBmb2xsb3dlZCBieSBsaW5lZmVlZAorICAoKkFOWUNSTEYpICAgICAgYWxsIHRocmVlIG9mIHRoZSBhYm92ZQorICAoKkFOWSkgICAgICAgICAgYW55IFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZQorPC9QUkU+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTgiIGhyZWY9IiNUT0MxIj5XSEFUIFxSIE1BVENIRVM8L2E+PGJyPgorPFA+CitUaGVzZSBhcmUgcmVjb2duaXplZCBvbmx5IGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIG9yIGFmdGVyIG9wdGlvbgorc2V0dGluZyB3aXRoIGEgc2ltaWxhciBzeW50YXguCis8cHJlPgorICAoKkJTUl9BTllDUkxGKSAgQ1IsIExGLCBvciBDUkxGCisgICgqQlNSX1VOSUNPREUpICBhbnkgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlCis8L1BSRT4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxOSIgaHJlZj0iI1RPQzEiPkxPT0tBSEVBRCBBTkQgTE9PS0JFSElORCBBU1NFUlRJT05TPC9hPjxicj4KKzxQPgorPHByZT4KKyAgKD89Li4uKSAgICAgICAgIHBvc2l0aXZlIGxvb2sgYWhlYWQKKyAgKD8hLi4uKSAgICAgICAgIG5lZ2F0aXZlIGxvb2sgYWhlYWQKKyAgKD8mIzYwOz0uLi4pICAgICAgICBwb3NpdGl2ZSBsb29rIGJlaGluZAorICAoPyYjNjA7IS4uLikgICAgICAgIG5lZ2F0aXZlIGxvb2sgYmVoaW5kCis8L3ByZT4KK0VhY2ggdG9wLWxldmVsIGJyYW5jaCBvZiBhIGxvb2sgYmVoaW5kIG11c3QgYmUgb2YgYSBmaXhlZCBsZW5ndGguCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMjAiIGhyZWY9IiNUT0MxIj5CQUNLUkVGRVJFTkNFUzwvYT48YnI+Cis8UD4KKzxwcmU+CisgIFxuICAgICAgICAgICAgICByZWZlcmVuY2UgYnkgbnVtYmVyIChjYW4gYmUgYW1iaWd1b3VzKQorICBcZ24gICAgICAgICAgICAgcmVmZXJlbmNlIGJ5IG51bWJlcgorICBcZ3tufSAgICAgICAgICAgcmVmZXJlbmNlIGJ5IG51bWJlcgorICBcZ3stbn0gICAgICAgICAgcmVsYXRpdmUgcmVmZXJlbmNlIGJ5IG51bWJlcgorICBcayYjNjA7bmFtZSYjNjI7ICAgICAgICByZWZlcmVuY2UgYnkgbmFtZSAoUGVybCkKKyAgXGsnbmFtZScgICAgICAgIHJlZmVyZW5jZSBieSBuYW1lIChQZXJsKQorICBcZ3tuYW1lfSAgICAgICAgcmVmZXJlbmNlIGJ5IG5hbWUgKFBlcmwpCisgIFxre25hbWV9ICAgICAgICByZWZlcmVuY2UgYnkgbmFtZSAoLk5FVCkKKyAgKD9QPW5hbWUpICAgICAgIHJlZmVyZW5jZSBieSBuYW1lIChQeXRob24pCis8L1BSRT4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMyMSIgaHJlZj0iI1RPQzEiPlNVQlJPVVRJTkUgUkVGRVJFTkNFUyAoUE9TU0lCTFkgUkVDVVJTSVZFKTwvYT48YnI+Cis8UD4KKzxwcmU+CisgICg/UikgICAgICAgICAgICByZWN1cnNlIHdob2xlIHBhdHRlcm4KKyAgKD9uKSAgICAgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSBhYnNvbHV0ZSBudW1iZXIKKyAgKD8rbikgICAgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSByZWxhdGl2ZSBudW1iZXIKKyAgKD8tbikgICAgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSByZWxhdGl2ZSBudW1iZXIKKyAgKD8mbmFtZSkgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSBuYW1lIChQZXJsKQorICAoP1AmIzYyO25hbWUpICAgICAgIGNhbGwgc3VicGF0dGVybiBieSBuYW1lIChQeXRob24pCisgIFxnJiM2MDtuYW1lJiM2MjsgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSBuYW1lIChPbmlndXJ1bWEpCisgIFxnJ25hbWUnICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgbmFtZSAoT25pZ3VydW1hKQorICBcZyYjNjA7biYjNjI7ICAgICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgYWJzb2x1dGUgbnVtYmVyIChPbmlndXJ1bWEpCisgIFxnJ24nICAgICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgYWJzb2x1dGUgbnVtYmVyIChPbmlndXJ1bWEpCisgIFxnJiM2MDsrbiYjNjI7ICAgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSByZWxhdGl2ZSBudW1iZXIgKFBDUkUyIGV4dGVuc2lvbikKKyAgXGcnK24nICAgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSByZWxhdGl2ZSBudW1iZXIgKFBDUkUyIGV4dGVuc2lvbikKKyAgXGcmIzYwOy1uJiM2MjsgICAgICAgICAgY2FsbCBzdWJwYXR0ZXJuIGJ5IHJlbGF0aXZlIG51bWJlciAoUENSRTIgZXh0ZW5zaW9uKQorICBcZyctbicgICAgICAgICAgY2FsbCBzdWJwYXR0ZXJuIGJ5IHJlbGF0aXZlIG51bWJlciAoUENSRTIgZXh0ZW5zaW9uKQorPC9QUkU+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMjIiIGhyZWY9IiNUT0MxIj5DT05ESVRJT05BTCBQQVRURVJOUzwvYT48YnI+Cis8UD4KKzxwcmU+CisgICg/KGNvbmRpdGlvbil5ZXMtcGF0dGVybikKKyAgKD8oY29uZGl0aW9uKXllcy1wYXR0ZXJufG5vLXBhdHRlcm4pCisKKyAgKD8obikgICAgICAgICAgICAgICBhYnNvbHV0ZSByZWZlcmVuY2UgY29uZGl0aW9uCisgICg/KCtuKSAgICAgICAgICAgICAgcmVsYXRpdmUgcmVmZXJlbmNlIGNvbmRpdGlvbgorICAoPygtbikgICAgICAgICAgICAgIHJlbGF0aXZlIHJlZmVyZW5jZSBjb25kaXRpb24KKyAgKD8oJiM2MDtuYW1lJiM2MjspICAgICAgICAgIG5hbWVkIHJlZmVyZW5jZSBjb25kaXRpb24gKFBlcmwpCisgICg/KCduYW1lJykgICAgICAgICAgbmFtZWQgcmVmZXJlbmNlIGNvbmRpdGlvbiAoUGVybCkKKyAgKD8obmFtZSkgICAgICAgICAgICBuYW1lZCByZWZlcmVuY2UgY29uZGl0aW9uIChQQ1JFMikKKyAgKD8oUikgICAgICAgICAgICAgICBvdmVyYWxsIHJlY3Vyc2lvbiBjb25kaXRpb24KKyAgKD8oUm4pICAgICAgICAgICAgICBzcGVjaWZpYyBncm91cCByZWN1cnNpb24gY29uZGl0aW9uCisgICg/KFImbmFtZSkgICAgICAgICAgc3BlY2lmaWMgcmVjdXJzaW9uIGNvbmRpdGlvbgorICAoPyhERUZJTkUpICAgICAgICAgIGRlZmluZSBzdWJwYXR0ZXJuIGZvciByZWZlcmVuY2UKKyAgKD8oVkVSU0lPTlsmIzYyO109bi5tKSAgdGVzdCBQQ1JFMiB2ZXJzaW9uCisgICg/KGFzc2VydCkgICAgICAgICAgYXNzZXJ0aW9uIGNvbmRpdGlvbgorPC9QUkU+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMjMiIGhyZWY9IiNUT0MxIj5CQUNLVFJBQ0tJTkcgQ09OVFJPTDwvYT48YnI+Cis8UD4KK1RoZSBmb2xsb3dpbmcgYWN0IGltbWVkaWF0ZWx5IHRoZXkgYXJlIHJlYWNoZWQ6Cis8cHJlPgorICAoKkFDQ0VQVCkgICAgICAgZm9yY2Ugc3VjY2Vzc2Z1bCBtYXRjaAorICAoKkZBSUwpICAgICAgICAgZm9yY2UgYmFja3RyYWNrOyBzeW5vbnltICgqRikKKyAgKCpNQVJLOk5BTUUpICAgIHNldCBuYW1lIHRvIGJlIHBhc3NlZCBiYWNrOyBzeW5vbnltICgqOk5BTUUpCis8L3ByZT4KK1RoZSBmb2xsb3dpbmcgYWN0IG9ubHkgd2hlbiBhIHN1YnNlcXVlbnQgbWF0Y2ggZmFpbHVyZSBjYXVzZXMgYSBiYWNrdHJhY2sgdG8KK3JlYWNoIHRoZW0uIFRoZXkgYWxsIGZvcmNlIGEgbWF0Y2ggZmFpbHVyZSwgYnV0IHRoZXkgZGlmZmVyIGluIHdoYXQgaGFwcGVucworYWZ0ZXJ3YXJkcy4gVGhvc2UgdGhhdCBhZHZhbmNlIHRoZSBzdGFydC1vZi1tYXRjaCBwb2ludCBkbyBzbyBvbmx5IGlmIHRoZQorcGF0dGVybiBpcyBub3QgYW5jaG9yZWQuCis8cHJlPgorICAoKkNPTU1JVCkgICAgICAgb3ZlcmFsbCBmYWlsdXJlLCBubyBhZHZhbmNlIG9mIHN0YXJ0aW5nIHBvaW50CisgICgqUFJVTkUpICAgICAgICBhZHZhbmNlIHRvIG5leHQgc3RhcnRpbmcgY2hhcmFjdGVyCisgICgqUFJVTkU6TkFNRSkgICBlcXVpdmFsZW50IHRvICgqTUFSSzpOQU1FKSgqUFJVTkUpCisgICgqU0tJUCkgICAgICAgICBhZHZhbmNlIHRvIGN1cnJlbnQgbWF0Y2hpbmcgcG9zaXRpb24KKyAgKCpTS0lQOk5BTUUpICAgIGFkdmFuY2UgdG8gcG9zaXRpb24gY29ycmVzcG9uZGluZyB0byBhbiBlYXJsaWVyCisgICAgICAgICAgICAgICAgICAoKk1BUks6TkFNRSk7IGlmIG5vdCBmb3VuZCwgdGhlICgqU0tJUCkgaXMgaWdub3JlZAorICAoKlRIRU4pICAgICAgICAgbG9jYWwgZmFpbHVyZSwgYmFja3RyYWNrIHRvIG5leHQgYWx0ZXJuYXRpb24KKyAgKCpUSEVOOk5BTUUpICAgIGVxdWl2YWxlbnQgdG8gKCpNQVJLOk5BTUUpKCpUSEVOKQorPC9QUkU+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMjQiIGhyZWY9IiNUT0MxIj5DQUxMT1VUUzwvYT48YnI+Cis8UD4KKzxwcmU+CisgICg/QykgICAgICAgICAgICBjYWxsb3V0IChhc3N1bWVkIG51bWJlciAwKQorICAoP0NuKSAgICAgICAgICAgY2FsbG91dCB3aXRoIG51bWVyaWNhbCBkYXRhIG4KKyAgKD9DInRleHQiKSAgICAgIGNhbGxvdXQgd2l0aCBzdHJpbmcgZGF0YQorPC9wcmU+CitUaGUgYWxsb3dlZCBzdHJpbmcgZGVsaW1pdGVycyBhcmUgYCAnICIgXiAlICMgJCAod2hpY2ggYXJlIHRoZSBzYW1lIGZvciB0aGUKK3N0YXJ0IGFuZCB0aGUgZW5kKSwgYW5kIHRoZSBzdGFydGluZyBkZWxpbWl0ZXIgeyBtYXRjaGVkIHdpdGggdGhlIGVuZGluZworZGVsaW1pdGVyIH0uIFRvIGVuY29kZSB0aGUgZW5kaW5nIGRlbGltaXRlciB3aXRoaW4gdGhlIHN0cmluZywgZG91YmxlIGl0LgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzI1IiBocmVmPSIjVE9DMSI+U0VFIEFMU088L2E+PGJyPgorPFA+Cis8Yj5wY3JlMnBhdHRlcm48L2I+KDMpLCA8Yj5wY3JlMmFwaTwvYj4oMyksIDxiPnBjcmUyY2FsbG91dDwvYj4oMyksCis8Yj5wY3JlMm1hdGNoaW5nPC9iPigzKSwgPGI+cGNyZTI8L2I+KDMpLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzI2IiBocmVmPSIjVE9DMSI+QVVUSE9SPC9hPjxicj4KKzxQPgorUGhpbGlwIEhhemVsCis8YnI+CitVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCis8YnI+CitDYW1icmlkZ2UsIEVuZ2xhbmQuCis8YnI+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMjciIGhyZWY9IiNUT0MxIj5SRVZJU0lPTjwvYT48YnI+Cis8UD4KK0xhc3QgdXBkYXRlZDogMTYgT2N0b2JlciAyMDE1Cis8YnI+CitDb3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKzxicj4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9odG1sL3BjcmUydGVzdC5odG1sIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJ0ZXN0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3OTg1ZAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9odG1sL3BjcmUydGVzdC5odG1sCkBAIC0wLDAgKzEsMTY2OSBAQAorPGh0bWw+Cis8aGVhZD4KKzx0aXRsZT5wY3JlMnRlc3Qgc3BlY2lmaWNhdGlvbjwvdGl0bGU+Cis8L2hlYWQ+Cis8Ym9keSBiZ2NvbG9yPSIjRkZGRkZGIiB0ZXh0PSIjMDAwMDVBIiBsaW5rPSIjMDA2NkZGIiBhbGluaz0iIzMzOTlGRiIgdmxpbms9IiMyMjIyQkIiPgorPGgxPnBjcmUydGVzdCBtYW4gcGFnZTwvaDE+Cis8cD4KK1JldHVybiB0byB0aGUgPGEgaHJlZj0iaW5kZXguaHRtbCI+UENSRTIgaW5kZXggcGFnZTwvYT4uCis8L3A+Cis8cD4KK1RoaXMgcGFnZSBpcyBwYXJ0IG9mIHRoZSBQQ1JFMiBIVE1MIGRvY3VtZW50YXRpb24uIEl0IHdhcyBnZW5lcmF0ZWQKK2F1dG9tYXRpY2FsbHkgZnJvbSB0aGUgb3JpZ2luYWwgbWFuIHBhZ2UuIElmIHRoZXJlIGlzIGFueSBub25zZW5zZSBpbiBpdCwKK3BsZWFzZSBjb25zdWx0IHRoZSBtYW4gcGFnZSwgaW4gY2FzZSB0aGUgY29udmVyc2lvbiB3ZW50IHdyb25nLgorPGJyPgorPHVsPgorPGxpPjxhIG5hbWU9IlRPQzEiIGhyZWY9IiNTRUMxIj5TWU5PUFNJUzwvYT4KKzxsaT48YSBuYW1lPSJUT0MyIiBocmVmPSIjU0VDMiI+UENSRTIncyA4LUJJVCwgMTYtQklUIEFORCAzMi1CSVQgTElCUkFSSUVTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzMiIGhyZWY9IiNTRUMzIj5JTlBVVCBFTkNPRElORzwvYT4KKzxsaT48YSBuYW1lPSJUT0M0IiBocmVmPSIjU0VDNCI+Q09NTUFORCBMSU5FIE9QVElPTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DNSIgaHJlZj0iI1NFQzUiPkRFU0NSSVBUSU9OPC9hPgorPGxpPjxhIG5hbWU9IlRPQzYiIGhyZWY9IiNTRUM2Ij5DT01NQU5EIExJTkVTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzciIGhyZWY9IiNTRUM3Ij5NT0RJRklFUiBTWU5UQVg8L2E+Cis8bGk+PGEgbmFtZT0iVE9DOCIgaHJlZj0iI1NFQzgiPlBBVFRFUk4gU1lOVEFYPC9hPgorPGxpPjxhIG5hbWU9IlRPQzkiIGhyZWY9IiNTRUM5Ij5TVUJKRUNUIExJTkUgU1lOVEFYPC9hPgorPGxpPjxhIG5hbWU9IlRPQzEwIiBocmVmPSIjU0VDMTAiPlBBVFRFUk4gTU9ESUZJRVJTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzExIiBocmVmPSIjU0VDMTEiPlNVQkpFQ1QgTU9ESUZJRVJTPC9hPgorPGxpPjxhIG5hbWU9IlRPQzEyIiBocmVmPSIjU0VDMTIiPlRIRSBBTFRFUk5BVElWRSBNQVRDSElORyBGVU5DVElPTjwvYT4KKzxsaT48YSBuYW1lPSJUT0MxMyIgaHJlZj0iI1NFQzEzIj5ERUZBVUxUIE9VVFBVVCBGUk9NIHBjcmUydGVzdDwvYT4KKzxsaT48YSBuYW1lPSJUT0MxNCIgaHJlZj0iI1NFQzE0Ij5PVVRQVVQgRlJPTSBUSEUgQUxURVJOQVRJVkUgTUFUQ0hJTkcgRlVOQ1RJT048L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTUiIGhyZWY9IiNTRUMxNSI+UkVTVEFSVElORyBBRlRFUiBBIFBBUlRJQUwgTUFUQ0g8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTYiIGhyZWY9IiNTRUMxNiI+Q0FMTE9VVFM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTciIGhyZWY9IiNTRUMxNyI+Tk9OLVBSSU5USU5HIENIQVJBQ1RFUlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTgiIGhyZWY9IiNTRUMxOCI+U0FWSU5HIEFORCBSRVNUT1JJTkcgQ09NUElMRUQgUEFUVEVSTlM8L2E+Cis8bGk+PGEgbmFtZT0iVE9DMTkiIGhyZWY9IiNTRUMxOSI+U0VFIEFMU088L2E+Cis8bGk+PGEgbmFtZT0iVE9DMjAiIGhyZWY9IiNTRUMyMCI+QVVUSE9SPC9hPgorPGxpPjxhIG5hbWU9IlRPQzIxIiBocmVmPSIjU0VDMjEiPlJFVklTSU9OPC9hPgorPC91bD4KKzxicj48YSBuYW1lPSJTRUMxIiBocmVmPSIjVE9DMSI+U1lOT1BTSVM8L2E+PGJyPgorPFA+Cis8Yj5wY3JlMnRlc3QgW29wdGlvbnNdIFtpbnB1dCBmaWxlIFtvdXRwdXQgZmlsZV1dPC9iPgorPGJyPgorPGJyPgorPGI+cGNyZTJ0ZXN0PC9iPiBpcyBhIHRlc3QgcHJvZ3JhbSBmb3IgdGhlIFBDUkUyIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJpZXMsCitidXQgaXQgY2FuIGFsc28gYmUgdXNlZCBmb3IgZXhwZXJpbWVudGluZyB3aXRoIHJlZ3VsYXIgZXhwcmVzc2lvbnMuIFRoaXMKK2RvY3VtZW50IGRlc2NyaWJlcyB0aGUgZmVhdHVyZXMgb2YgdGhlIHRlc3QgcHJvZ3JhbTsgZm9yIGRldGFpbHMgb2YgdGhlIHJlZ3VsYXIKK2V4cHJlc3Npb25zIHRoZW1zZWx2ZXMsIHNlZSB0aGUKKzxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sIj48Yj5wY3JlMnBhdHRlcm48L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4gRm9yIGRldGFpbHMgb2YgdGhlIFBDUkUyIGxpYnJhcnkgZnVuY3Rpb24gY2FsbHMgYW5kIHRoZWlyCitvcHRpb25zLCBzZWUgdGhlCis8YSBocmVmPSJwY3JlMmFwaS5odG1sIj48Yj5wY3JlMmFwaTwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPC9QPgorPFA+CitUaGUgaW5wdXQgZm9yIDxiPnBjcmUydGVzdDwvYj4gaXMgYSBzZXF1ZW5jZSBvZiByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybnMgYW5kCitzdWJqZWN0IHN0cmluZ3MgdG8gYmUgbWF0Y2hlZC4gVGhlcmUgYXJlIGFsc28gY29tbWFuZCBsaW5lcyBmb3Igc2V0dGluZworZGVmYXVsdHMgYW5kIGNvbnRyb2xsaW5nIHNvbWUgc3BlY2lhbCBhY3Rpb25zLiBUaGUgb3V0cHV0IHNob3dzIHRoZSByZXN1bHQgb2YKK2VhY2ggbWF0Y2ggYXR0ZW1wdC4gTW9kaWZpZXJzIG9uIGV4dGVybmFsIG9yIGludGVybmFsIGNvbW1hbmQgbGluZXMsIHRoZQorcGF0dGVybnMsIGFuZCB0aGUgc3ViamVjdCBsaW5lcyBzcGVjaWZ5IFBDUkUyIGZ1bmN0aW9uIG9wdGlvbnMsIGNvbnRyb2wgaG93IHRoZQorc3ViamVjdCBpcyBwcm9jZXNzZWQsIGFuZCB3aGF0IG91dHB1dCBpcyBwcm9kdWNlZC4KKzwvUD4KKzxQPgorQXMgdGhlIG9yaWdpbmFsIGZhaXJseSBzaW1wbGUgUENSRSBsaWJyYXJ5IGV2b2x2ZWQsIGl0IGFjcXVpcmVkIG1hbnkgZGlmZmVyZW50CitmZWF0dXJlcywgYW5kIGFzIGEgcmVzdWx0LCB0aGUgb3JpZ2luYWwgPGI+cGNyZXRlc3Q8L2I+IHByb2dyYW0gZW5kZWQgdXAgd2l0aCBhCitsb3Qgb2Ygb3B0aW9ucyBpbiBhIG1lc3N5LCBhcmNhbmUgc3ludGF4LCBmb3IgdGVzdGluZyBhbGwgdGhlIGZlYXR1cmVzLiBUaGUKK21vdmUgdG8gdGhlIG5ldyBQQ1JFMiBBUEkgcHJvdmlkZWQgYW4gb3Bwb3J0dW5pdHkgdG8gcmUtaW1wbGVtZW50IHRoZSB0ZXN0Citwcm9ncmFtIGFzIDxiPnBjcmUydGVzdDwvYj4sIHdpdGggYSBjbGVhbmVyIG1vZGlmaWVyIHN5bnRheC4gTmV2ZXJ0aGVsZXNzLCB0aGVyZQorYXJlIHN0aWxsIG1hbnkgb2JzY3VyZSBtb2RpZmllcnMsIHNvbWUgb2Ygd2hpY2ggYXJlIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IKK3VzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB0ZXN0IHNjcmlwdCBhbmQgZGF0YSBmaWxlcyB0aGF0IGFyZSBkaXN0cmlidXRlZCBhcworcGFydCBvZiBQQ1JFMi4gQWxsIHRoZSBtb2RpZmllcnMgYXJlIGRvY3VtZW50ZWQgaGVyZSwgc29tZSB3aXRob3V0IG11Y2gKK2p1c3RpZmljYXRpb24sIGJ1dCBtYW55IG9mIHRoZW0gYXJlIHVubGlrZWx5IHRvIGJlIG9mIHVzZSBleGNlcHQgd2hlbiB0ZXN0aW5nCit0aGUgbGlicmFyaWVzLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzIiIGhyZWY9IiNUT0MxIj5QQ1JFMidzIDgtQklULCAxNi1CSVQgQU5EIDMyLUJJVCBMSUJSQVJJRVM8L2E+PGJyPgorPFA+CitEaWZmZXJlbnQgdmVyc2lvbnMgb2YgdGhlIFBDUkUyIGxpYnJhcnkgY2FuIGJlIGJ1aWx0IHRvIHN1cHBvcnQgY2hhcmFjdGVyCitzdHJpbmdzIHRoYXQgYXJlIGVuY29kZWQgaW4gOC1iaXQsIDE2LWJpdCwgb3IgMzItYml0IGNvZGUgdW5pdHMuIE9uZSwgdHdvLCBvcgorYWxsIHRocmVlIG9mIHRoZXNlIGxpYnJhcmllcyBtYXkgYmUgc2ltdWx0YW5lb3VzbHkgaW5zdGFsbGVkLiBUaGUKKzxiPnBjcmUydGVzdDwvYj4gcHJvZ3JhbSBjYW4gYmUgdXNlZCB0byB0ZXN0IGFsbCB0aGUgbGlicmFyaWVzLiBIb3dldmVyLCBpdHMgb3duCitpbnB1dCBhbmQgb3V0cHV0IGFyZSBhbHdheXMgaW4gOC1iaXQgZm9ybWF0LiBXaGVuIHRlc3RpbmcgdGhlIDE2LWJpdCBvciAzMi1iaXQKK2xpYnJhcmllcywgcGF0dGVybnMgYW5kIHN1YmplY3Qgc3RyaW5ncyBhcmUgY29udmVydGVkIHRvIDE2LSBvciAzMi1iaXQgZm9ybWF0CitiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucy4gUmVzdWx0cyBhcmUgY29udmVydGVkIGJhY2sgdG8KKzgtYml0IGNvZGUgdW5pdHMgZm9yIG91dHB1dC4KKzwvUD4KKzxQPgorSW4gdGhlIHJlc3Qgb2YgdGhpcyBkb2N1bWVudCwgdGhlIG5hbWVzIG9mIGxpYnJhcnkgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzCithcmUgZ2l2ZW4gaW4gZ2VuZXJpYyBmb3JtLCBmb3IgZXhhbXBsZSwgPGI+cGNyZV9jb21waWxlKCk8L2I+LiBUaGUgYWN0dWFsCituYW1lcyB1c2VkIGluIHRoZSBsaWJyYXJpZXMgaGF2ZSBhIHN1ZmZpeCBfOCwgXzE2LCBvciBfMzIsIGFzIGFwcHJvcHJpYXRlLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzMiIGhyZWY9IiNUT0MxIj5JTlBVVCBFTkNPRElORzwvYT48YnI+Cis8UD4KK0lucHV0IHRvIDxiPnBjcmUydGVzdDwvYj4gaXMgcHJvY2Vzc2VkIGxpbmUgYnkgbGluZSwgZWl0aGVyIGJ5IGNhbGxpbmcgdGhlIEMKK2xpYnJhcnkncyA8Yj5mZ2V0cygpPC9iPiBmdW5jdGlvbiwgb3IgdmlhIHRoZSA8Yj5saWJyZWFkbGluZTwvYj4gbGlicmFyeSAoc2VlCitiZWxvdykuIFRoZSBpbnB1dCBpcyBwcm9jZXNzZWQgdXNpbmcgdXNpbmcgQydzIHN0cmluZyBmdW5jdGlvbnMsIHNvIG11c3Qgbm90Citjb250YWluIGJpbmFyeSB6ZXJvZXMsIGV2ZW4gdGhvdWdoIGluIFVuaXgtbGlrZSBlbnZpcm9ubWVudHMsIDxiPmZnZXRzKCk8L2I+Cit0cmVhdHMgYW55IGJ5dGVzIG90aGVyIHRoYW4gbmV3bGluZSBhcyBkYXRhIGNoYXJhY3RlcnMuIEluIHNvbWUgV2luZG93cworZW52aXJvbm1lbnRzIGNoYXJhY3RlciAyNiAoaGV4IDFBKSBjYXVzZXMgYW4gaW1tZWRpYXRlIGVuZCBvZiBmaWxlLCBhbmQgbm8KK2Z1cnRoZXIgZGF0YSBpcyByZWFkLgorPC9QPgorPFA+CitGb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgdGhlcmVmb3JlLCBpdCBpcyBzYWZlc3QgdG8gYXZvaWQgbm9uLXByaW50aW5nCitjaGFyYWN0ZXJzIGluIDxiPnBjcmUydGVzdDwvYj4gaW5wdXQgZmlsZXMuIFRoZXJlIGlzIGEgZmFjaWxpdHkgZm9yIHNwZWNpZnlpbmcgYQorcGF0dGVybidzIGNoYXJhY3RlcnMgYXMgaGV4YWRlY2ltYWwgcGFpcnMsIHRodXMgbWFraW5nIGl0IHBvc3NpYmxlIHRvIGluY2x1ZGUKK2JpbmFyeSB6ZXJvZXMgaW4gYSBwYXR0ZXJuIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiBTdWJqZWN0IGxpbmVzIGFyZSBwcm9jZXNzZWQKK2ZvciBiYWNrc2xhc2ggZXNjYXBlcywgd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gaW5jbHVkZSBhbnkgZGF0YSB2YWx1ZS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM0IiBocmVmPSIjVE9DMSI+Q09NTUFORCBMSU5FIE9QVElPTlM8L2E+PGJyPgorPFA+Cis8Yj4tODwvYj4KK0lmIHRoZSA4LWJpdCBsaWJyYXJ5IGhhcyBiZWVuIGJ1aWx0LCB0aGlzIG9wdGlvbiBjYXVzZXMgaXQgdG8gYmUgdXNlZCAodGhpcyBpcwordGhlIGRlZmF1bHQpLiBJZiB0aGUgOC1iaXQgbGlicmFyeSBoYXMgbm90IGJlZW4gYnVpbHQsIHRoaXMgb3B0aW9uIGNhdXNlcyBhbgorZXJyb3IuCis8L1A+Cis8UD4KKzxiPi0xNjwvYj4KK0lmIHRoZSAxNi1iaXQgbGlicmFyeSBoYXMgYmVlbiBidWlsdCwgdGhpcyBvcHRpb24gY2F1c2VzIGl0IHRvIGJlIHVzZWQuIElmIG9ubHkKK3RoZSAxNi1iaXQgbGlicmFyeSBoYXMgYmVlbiBidWlsdCwgdGhpcyBpcyB0aGUgZGVmYXVsdC4gSWYgdGhlIDE2LWJpdCBsaWJyYXJ5CitoYXMgbm90IGJlZW4gYnVpbHQsIHRoaXMgb3B0aW9uIGNhdXNlcyBhbiBlcnJvci4KKzwvUD4KKzxQPgorPGI+LTMyPC9iPgorSWYgdGhlIDMyLWJpdCBsaWJyYXJ5IGhhcyBiZWVuIGJ1aWx0LCB0aGlzIG9wdGlvbiBjYXVzZXMgaXQgdG8gYmUgdXNlZC4gSWYgb25seQordGhlIDMyLWJpdCBsaWJyYXJ5IGhhcyBiZWVuIGJ1aWx0LCB0aGlzIGlzIHRoZSBkZWZhdWx0LiBJZiB0aGUgMzItYml0IGxpYnJhcnkKK2hhcyBub3QgYmVlbiBidWlsdCwgdGhpcyBvcHRpb24gY2F1c2VzIGFuIGVycm9yLgorPC9QPgorPFA+Cis8Yj4tYjwvYj4KK0JlaGF2ZSBhcyBpZiBlYWNoIHBhdHRlcm4gaGFzIHRoZSA8Yj4vZnVsbGJpbmNvZGU8L2I+IG1vZGlmaWVyOyB0aGUgZnVsbAoraW50ZXJuYWwgYmluYXJ5IGZvcm0gb2YgdGhlIHBhdHRlcm4gaXMgb3V0cHV0IGFmdGVyIGNvbXBpbGF0aW9uLgorPC9QPgorPFA+Cis8Yj4tQzwvYj4KK091dHB1dCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIFBDUkUyIGxpYnJhcnksIGFuZCBhbGwgYXZhaWxhYmxlIGluZm9ybWF0aW9uCithYm91dCB0aGUgb3B0aW9uYWwgZmVhdHVyZXMgdGhhdCBhcmUgaW5jbHVkZWQsIGFuZCB0aGVuIGV4aXQgd2l0aCB6ZXJvIGV4aXQKK2NvZGUuIEFsbCBvdGhlciBvcHRpb25zIGFyZSBpZ25vcmVkLgorPC9QPgorPFA+Cis8Yj4tQzwvYj4gPGk+b3B0aW9uPC9pPgorT3V0cHV0IGluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgYnVpbGQtdGltZSBvcHRpb24sIHRoZW4gZXhpdC4gVGhpcworZnVuY3Rpb25hbGl0eSBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIHNjcmlwdHMgc3VjaCBhcyA8Yj5SdW5UZXN0PC9iPi4gVGhlCitmb2xsb3dpbmcgb3B0aW9ucyBvdXRwdXQgdGhlIHZhbHVlIGFuZCBzZXQgdGhlIGV4aXQgY29kZSBhcyBpbmRpY2F0ZWQ6Cis8cHJlPgorICBlYmNkaWMtbmwgIHRoZSBjb2RlIGZvciBMRiAoPSBOTCkgaW4gYW4gRUJDRElDIGVudmlyb25tZW50OgorICAgICAgICAgICAgICAgMHgxNSBvciAweDI1CisgICAgICAgICAgICAgICAwIGlmIHVzZWQgaW4gYW4gQVNDSUkgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgIGV4aXQgY29kZSBpcyBhbHdheXMgMAorICBsaW5rc2l6ZSAgIHRoZSBjb25maWd1cmVkIGludGVybmFsIGxpbmsgc2l6ZSAoMiwgMywgb3IgNCkKKyAgICAgICAgICAgICAgIGV4aXQgY29kZSBpcyBzZXQgdG8gdGhlIGxpbmsgc2l6ZQorICBuZXdsaW5lICAgIHRoZSBkZWZhdWx0IG5ld2xpbmUgc2V0dGluZzoKKyAgICAgICAgICAgICAgIENSLCBMRiwgQ1JMRiwgQU5ZQ1JMRiwgb3IgQU5ZCisgICAgICAgICAgICAgICBleGl0IGNvZGUgaXMgYWx3YXlzIDAKKyAgYnNyICAgICAgICB0aGUgZGVmYXVsdCBzZXR0aW5nIGZvciB3aGF0IFxSIG1hdGNoZXM6CisgICAgICAgICAgICAgICBBTllDUkxGIG9yIEFOWQorICAgICAgICAgICAgICAgZXhpdCBjb2RlIGlzIGFsd2F5cyAwCis8L3ByZT4KK1RoZSBmb2xsb3dpbmcgb3B0aW9ucyBvdXRwdXQgMSBmb3IgdHJ1ZSBvciAwIGZvciBmYWxzZSwgYW5kIHNldCB0aGUgZXhpdCBjb2RlCit0byB0aGUgc2FtZSB2YWx1ZToKKzxwcmU+CisgIGJhY2tzbGFzaC1DICBcQyBpcyBzdXBwb3J0ZWQgKG5vdCBsb2NrZWQgb3V0KQorICBlYmNkaWMgICAgICAgY29tcGlsZWQgZm9yIGFuIEVCQ0RJQyBlbnZpcm9ubWVudAorICBqaXQgICAgICAgICAganVzdC1pbi10aW1lIHN1cHBvcnQgaXMgYXZhaWxhYmxlCisgIHBjcmUyLTE2ICAgICB0aGUgMTYtYml0IGxpYnJhcnkgd2FzIGJ1aWx0CisgIHBjcmUyLTMyICAgICB0aGUgMzItYml0IGxpYnJhcnkgd2FzIGJ1aWx0CisgIHBjcmUyLTggICAgICB0aGUgOC1iaXQgbGlicmFyeSB3YXMgYnVpbHQKKyAgdW5pY29kZSAgICAgIFVuaWNvZGUgc3VwcG9ydCBpcyBhdmFpbGFibGUKKzwvcHJlPgorSWYgYW4gdW5rbm93biBvcHRpb24gaXMgZ2l2ZW4sIGFuIGVycm9yIG1lc3NhZ2UgaXMgb3V0cHV0OyB0aGUgZXhpdCBjb2RlIGlzIDAuCis8L1A+Cis8UD4KKzxiPi1kPC9iPgorQmVoYXZlIGFzIGlmIGVhY2ggcGF0dGVybiBoYXMgdGhlIDxiPmRlYnVnPC9iPiBtb2RpZmllcjsgdGhlIGludGVybmFsCitmb3JtIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZWQgcGF0dGVybiBpcyBvdXRwdXQgYWZ0ZXIgY29tcGlsYXRpb247Cis8Yj4tZDwvYj4gaXMgZXF1aXZhbGVudCB0byA8Yj4tYiAtaTwvYj4uCis8L1A+Cis8UD4KKzxiPi1kZmE8L2I+CitCZWhhdmUgYXMgaWYgZWFjaCBzdWJqZWN0IGxpbmUgaGFzIHRoZSA8Yj5kZmE8L2I+IG1vZGlmaWVyOyBtYXRjaGluZyBpcyBkb25lCit1c2luZyB0aGUgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKKzxiPnBjcmUyX21hdGNoKCk8L2I+LgorPC9QPgorPFA+Cis8Yj4taGVscDwvYj4KK091dHB1dCBhIGJyaWVmIHN1bW1hcnkgdGhlc2Ugb3B0aW9ucyBhbmQgdGhlbiBleGl0LgorPC9QPgorPFA+Cis8Yj4taTwvYj4KK0JlaGF2ZSBhcyBpZiBlYWNoIHBhdHRlcm4gaGFzIHRoZSA8Yj4vaW5mbzwvYj4gbW9kaWZpZXI7IGluZm9ybWF0aW9uIGFib3V0IHRoZQorY29tcGlsZWQgcGF0dGVybiBpcyBnaXZlbiBhZnRlciBjb21waWxhdGlvbi4KKzwvUD4KKzxQPgorPGI+LWppdDwvYj4KK0JlaGF2ZSBhcyBpZiBlYWNoIHBhdHRlcm4gbGluZSBoYXMgdGhlIDxiPmppdDwvYj4gbW9kaWZpZXI7IGFmdGVyIHN1Y2Nlc3NmdWwKK2NvbXBpbGF0aW9uLCBlYWNoIHBhdHRlcm4gaXMgcGFzc2VkIHRvIHRoZSBqdXN0LWluLXRpbWUgY29tcGlsZXIsIGlmIGF2YWlsYWJsZS4KKzwvUD4KKzxQPgorXGZCLXBhdHRlcm5cZkIgPGk+bW9kaWZpZXItbGlzdDwvaT4KK0JlaGF2ZSBhcyBpZiBlYWNoIHBhdHRlcm4gbGluZSBjb250YWlucyB0aGUgZ2l2ZW4gbW9kaWZpZXJzLgorPC9QPgorPFA+Cis8Yj4tcTwvYj4KK0RvIG5vdCBvdXRwdXQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIDxiPnBjcmUydGVzdDwvYj4gYXQgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbi4KKzwvUD4KKzxQPgorPGI+LVM8L2I+IDxpPnNpemU8L2k+CitPbiBVbml4LWxpa2Ugc3lzdGVtcywgc2V0IHRoZSBzaXplIG9mIHRoZSBydW4tdGltZSBzdGFjayB0byA8aT5zaXplPC9pPgorbWVnYWJ5dGVzLgorPC9QPgorPFA+Cis8Yj4tc3ViamVjdDwvYj4gPGk+bW9kaWZpZXItbGlzdDwvaT4KK0JlaGF2ZSBhcyBpZiBlYWNoIHN1YmplY3QgbGluZSBjb250YWlucyB0aGUgZ2l2ZW4gbW9kaWZpZXJzLgorPC9QPgorPFA+Cis8Yj4tdDwvYj4KK1J1biBlYWNoIGNvbXBpbGUgYW5kIG1hdGNoIG1hbnkgdGltZXMgd2l0aCBhIHRpbWVyLCBhbmQgb3V0cHV0IHRoZSByZXN1bHRpbmcKK3RpbWVzIHBlciBjb21waWxlIG9yIG1hdGNoLiBXaGVuIEpJVCBpcyB1c2VkLCBzZXBhcmF0ZSB0aW1lcyBhcmUgZ2l2ZW4gZm9yIHRoZQoraW5pdGlhbCBjb21waWxlIGFuZCB0aGUgSklUIGNvbXBpbGUuIFlvdSBjYW4gY29udHJvbCB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKK3RoYXQgYXJlIHVzZWQgZm9yIHRpbWluZyBieSBmb2xsb3dpbmcgPGI+LXQ8L2I+IHdpdGggYSBudW1iZXIgKGFzIGEgc2VwYXJhdGUKK2l0ZW0gb24gdGhlIGNvbW1hbmQgbGluZSkuIEZvciBleGFtcGxlLCAiLXQgMTAwMCIgaXRlcmF0ZXMgMTAwMCB0aW1lcy4gVGhlCitkZWZhdWx0IGlzIHRvIGl0ZXJhdGUgNTAwLDAwMCB0aW1lcy4KKzwvUD4KKzxQPgorPGI+LXRtPC9iPgorVGhpcyBpcyBsaWtlIDxiPi10PC9iPiBleGNlcHQgdGhhdCBpdCB0aW1lcyBvbmx5IHRoZSBtYXRjaGluZyBwaGFzZSwgbm90IHRoZQorY29tcGlsZSBwaGFzZS4KKzwvUD4KKzxQPgorPGI+LVQ8L2I+IDxiPi1UTTwvYj4KK1RoZXNlIGJlaGF2ZSBsaWtlIDxiPi10PC9iPiBhbmQgPGI+LXRtPC9iPiwgYnV0IGluIGFkZGl0aW9uLCBhdCB0aGUgZW5kIG9mIGEgcnVuLAordGhlIHRvdGFsIHRpbWVzIGZvciBhbGwgY29tcGlsZXMgYW5kIG1hdGNoZXMgYXJlIG91dHB1dC4KKzwvUD4KKzxQPgorPGI+LXZlcnNpb248L2I+CitPdXRwdXQgdGhlIFBDUkUyIHZlcnNpb24gbnVtYmVyIGFuZCB0aGVuIGV4aXQuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDNSIgaHJlZj0iI1RPQzEiPkRFU0NSSVBUSU9OPC9hPjxicj4KKzxQPgorSWYgPGI+cGNyZTJ0ZXN0PC9iPiBpcyBnaXZlbiB0d28gZmlsZW5hbWUgYXJndW1lbnRzLCBpdCByZWFkcyBmcm9tIHRoZSBmaXJzdCBhbmQKK3dyaXRlcyB0byB0aGUgc2Vjb25kLiBJZiB0aGUgZmlyc3QgbmFtZSBpcyAiLSIsIGlucHV0IGlzIHRha2VuIGZyb20gdGhlCitzdGFuZGFyZCBpbnB1dC4gSWYgPGI+cGNyZTJ0ZXN0PC9iPiBpcyBnaXZlbiBvbmx5IG9uZSBhcmd1bWVudCwgaXQgcmVhZHMgZnJvbQordGhhdCBmaWxlIGFuZCB3cml0ZXMgdG8gc3Rkb3V0LiBPdGhlcndpc2UsIGl0IHJlYWRzIGZyb20gc3RkaW4gYW5kIHdyaXRlcyB0bworc3Rkb3V0LgorPC9QPgorPFA+CitXaGVuIDxiPnBjcmUydGVzdDwvYj4gaXMgYnVpbHQsIGEgY29uZmlndXJhdGlvbiBvcHRpb24gY2FuIHNwZWNpZnkgdGhhdCBpdAorc2hvdWxkIGJlIGxpbmtlZCB3aXRoIHRoZSA8Yj5saWJyZWFkbGluZTwvYj4gb3IgPGI+bGliZWRpdDwvYj4gbGlicmFyeS4gV2hlbiB0aGlzCitpcyBkb25lLCBpZiB0aGUgaW5wdXQgaXMgZnJvbSBhIHRlcm1pbmFsLCBpdCBpcyByZWFkIHVzaW5nIHRoZSA8Yj5yZWFkbGluZSgpPC9iPgorZnVuY3Rpb24uIFRoaXMgcHJvdmlkZXMgbGluZS1lZGl0aW5nIGFuZCBoaXN0b3J5IGZhY2lsaXRpZXMuIFRoZSBvdXRwdXQgZnJvbQordGhlIDxiPi1oZWxwPC9iPiBvcHRpb24gc3RhdGVzIHdoZXRoZXIgb3Igbm90IDxiPnJlYWRsaW5lKCk8L2I+IHdpbGwgYmUgdXNlZC4KKzwvUD4KKzxQPgorVGhlIHByb2dyYW0gaGFuZGxlcyBhbnkgbnVtYmVyIG9mIHRlc3RzLCBlYWNoIG9mIHdoaWNoIGNvbnNpc3RzIG9mIGEgc2V0IG9mCitpbnB1dCBsaW5lcy4gRWFjaCBzZXQgc3RhcnRzIHdpdGggYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiwgZm9sbG93ZWQgYnkgYW55CitudW1iZXIgb2Ygc3ViamVjdCBsaW5lcyB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhhdCBwYXR0ZXJuLiBJbiBiZXR3ZWVuIHNldHMgb2YKK3Rlc3QgZGF0YSwgY29tbWFuZCBsaW5lcyB0aGF0IGJlZ2luIHdpdGggIyBtYXkgYXBwZWFyLiBUaGlzIGZpbGUgZm9ybWF0LCB3aXRoCitzb21lIHJlc3RyaWN0aW9ucywgY2FuIGFsc28gYmUgcHJvY2Vzc2VkIGJ5IHRoZSA8Yj5wZXJsdGVzdC5zaDwvYj4gc2NyaXB0IHRoYXQKK2lzIGRpc3RyaWJ1dGVkIHdpdGggUENSRTIgYXMgYSBtZWFucyBvZiBjaGVja2luZyB0aGF0IHRoZSBiZWhhdmlvdXIgb2YgUENSRTIKK2FuZCBQZXJsIGlzIHRoZSBzYW1lLgorPC9QPgorPFA+CitXaGVuIHRoZSBpbnB1dCBpcyBhIHRlcm1pbmFsLCA8Yj5wY3JlMnRlc3Q8L2I+IHByb21wdHMgZm9yIGVhY2ggbGluZSBvZiBpbnB1dCwKK3VzaW5nICJyZSYjNjI7IiB0byBwcm9tcHQgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJucywgYW5kICJkYXRhJiM2MjsiIHRvIHByb21wdAorZm9yIHN1YmplY3QgbGluZXMuIENvbW1hbmQgbGluZXMgc3RhcnRpbmcgd2l0aCAjIGNhbiBiZSBlbnRlcmVkIG9ubHkgaW4KK3Jlc3BvbnNlIHRvIHRoZSAicmUmIzYyOyIgcHJvbXB0LgorPC9QPgorPFA+CitFYWNoIHN1YmplY3QgbGluZSBpcyBtYXRjaGVkIHNlcGFyYXRlbHkgYW5kIGluZGVwZW5kZW50bHkuIElmIHlvdSB3YW50IHRvIGRvCittdWx0aS1saW5lIG1hdGNoZXMsIHlvdSBoYXZlIHRvIHVzZSB0aGUgXG4gZXNjYXBlIHNlcXVlbmNlIChvciBcciBvciBcclxuLAorZXRjLiwgZGVwZW5kaW5nIG9uIHRoZSBuZXdsaW5lIHNldHRpbmcpIGluIGEgc2luZ2xlIGxpbmUgb2YgaW5wdXQgdG8gZW5jb2RlIHRoZQorbmV3bGluZSBzZXF1ZW5jZXMuIFRoZXJlIGlzIG5vIGxpbWl0IG9uIHRoZSBsZW5ndGggb2Ygc3ViamVjdCBsaW5lczsgdGhlIGlucHV0CitidWZmZXIgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCBpZiBpdCBpcyB0b28gc21hbGwuIFRoZXJlIGFyZSByZXBsaWNhdGlvbgorZmVhdHVyZXMgdGhhdCBtYWtlcyBpdCBwb3NzaWJsZSB0byBnZW5lcmF0ZSBsb25nIHJlcGV0aXRpdmUgcGF0dGVybiBvciBzdWJqZWN0CitsaW5lcyB3aXRob3V0IGhhdmluZyB0byBzdXBwbHkgdGhlbSBleHBsaWNpdGx5LgorPC9QPgorPFA+CitBbiBlbXB0eSBsaW5lIG9yIHRoZSBlbmQgb2YgdGhlIGZpbGUgc2lnbmFscyB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IGxpbmVzIGZvciBhCit0ZXN0LCBhdCB3aGljaCBwb2ludCBhIG5ldyBwYXR0ZXJuIG9yIGNvbW1hbmQgbGluZSBpcyBleHBlY3RlZCBpZiB0aGVyZSBpcworc3RpbGwgaW5wdXQgdG8gYmUgcmVhZC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM2IiBocmVmPSIjVE9DMSI+Q09NTUFORCBMSU5FUzwvYT48YnI+Cis8UD4KK0luIGJldHdlZW4gc2V0cyBvZiB0ZXN0IGRhdGEsIGEgbGluZSB0aGF0IGJlZ2lucyB3aXRoICMgaXMgaW50ZXJwcmV0ZWQgYXMgYQorY29tbWFuZCBsaW5lLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIGZvbGxvd2VkIGJ5IHdoaXRlIHNwYWNlIG9yIGFuCitleGNsYW1hdGlvbiBtYXJrLCB0aGUgbGluZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCwgYW5kIGlnbm9yZWQuIE90aGVyd2lzZSwgdGhlCitmb2xsb3dpbmcgY29tbWFuZHMgYXJlIHJlY29nbml6ZWQ6Cis8cHJlPgorICAjZm9yYmlkX3V0ZgorPC9wcmU+CitTdWJzZXF1ZW50IHBhdHRlcm5zIGF1dG9tYXRpY2FsbHkgaGF2ZSB0aGUgUENSRTJfTkVWRVJfVVRGIGFuZCBQQ1JFMl9ORVZFUl9VQ1AKK29wdGlvbnMgc2V0LCB3aGljaCBsb2NrcyBvdXQgdGhlIHVzZSBvZiB0aGUgUENSRTJfVVRGIGFuZCBQQ1JFMl9VQ1Agb3B0aW9ucyBhbmQKK3RoZSB1c2Ugb2YgKCpVVEYpIGFuZCAoKlVDUCkgYXQgdGhlIHN0YXJ0IG9mIHBhdHRlcm5zLiBUaGlzIGNvbW1hbmQgYWxzbyBmb3JjZXMKK2FuIGVycm9yIGlmIGEgc3Vic2VxdWVudCBwYXR0ZXJuIGNvbnRhaW5zIGFueSBvY2N1cnJlbmNlcyBvZiBcUCwgXHAsIG9yIFxYLAord2hpY2ggYXJlIHN0aWxsIHN1cHBvcnRlZCB3aGVuIFBDUkUyX1VURiBpcyBub3Qgc2V0LCBidXQgd2hpY2ggcmVxdWlyZSBVbmljb2RlCitwcm9wZXJ0eSBzdXBwb3J0IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5LgorPC9QPgorPFA+CitUaGlzIGlzIGEgdHJpZ2dlciBndWFyZCB0aGF0IGlzIHVzZWQgaW4gdGVzdCBmaWxlcyB0byBlbnN1cmUgdGhhdCBVVEYgb3IKK1VuaWNvZGUgcHJvcGVydHkgdGVzdHMgYXJlIG5vdCBhY2NpZGVudGFsbHkgYWRkZWQgdG8gZmlsZXMgdGhhdCBhcmUgdXNlZCB3aGVuCitVbmljb2RlIHN1cHBvcnQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5LiBTZXR0aW5nIFBDUkUyX05FVkVSX1VURiBhbmQKK1BDUkUyX05FVkVSX1VDUCBhcyBhIGRlZmF1bHQgY2FuIGFsc28gYmUgb2J0YWluZWQgYnkgdGhlIHVzZSBvZiA8Yj4jcGF0dGVybjwvYj47Cit0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IDxiPiNmb3JiaWRfdXRmPC9iPiBjYW5ub3QgYmUgdW5zZXQsIGFuZCB0aGUgYXV0b21hdGljCitvcHRpb25zIGFyZSBub3QgZGlzcGxheWVkIGluIHBhdHRlcm4gaW5mb3JtYXRpb24sIHRvIGF2b2lkIGNsdXR0ZXJpbmcgdXAgdGVzdAorb3V0cHV0LgorPHByZT4KKyAgI2xvYWQgJiM2MDtmaWxlbmFtZSYjNjI7Cis8L3ByZT4KK1RoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGxvYWQgYSBzZXQgb2YgcHJlY29tcGlsZWQgcGF0dGVybnMgZnJvbSBhIGZpbGUsIGFzCitkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIlNhdmluZyBhbmQgcmVzdG9yaW5nIGNvbXBpbGVkIHBhdHRlcm5zIgorPGEgaHJlZj0iI3NhdmVyZXN0b3JlIj5iZWxvdy48L2E+Cis8cHJlPgorICAjbmV3bGluZV9kZWZhdWx0IFsmIzYwO25ld2xpbmUtbGlzdCYjNjI7XQorPC9wcmU+CitXaGVuIFBDUkUyIGlzIGJ1aWx0LCBhIGRlZmF1bHQgbmV3bGluZSBjb252ZW50aW9uIGNhbiBiZSBzcGVjaWZpZWQuIFRoaXMKK2RldGVybWluZXMgd2hpY2ggY2hhcmFjdGVycyBhbmQvb3IgY2hhcmFjdGVyIHBhaXJzIGFyZSByZWNvZ25pemVkIGFzIGluZGljYXRpbmcKK2EgbmV3bGluZSBpbiBhIHBhdHRlcm4gb3Igc3ViamVjdCBzdHJpbmcuIFRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIHdoZW4gYQorcGF0dGVybiBpcyBjb21waWxlZC4gVGhlIHN0YW5kYXJkIHRlc3QgZmlsZXMgY29udGFpbiB0ZXN0cyBvZiB2YXJpb3VzIG5ld2xpbmUKK2NvbnZlbnRpb25zLCBidXQgdGhlIG1ham9yaXR5IG9mIHRoZSB0ZXN0cyBleHBlY3QgYSBzaW5nbGUgbGluZWZlZWQgdG8gYmUKK3JlY29nbml6ZWQgYXMgYSBuZXdsaW5lIGJ5IGRlZmF1bHQuIFdpdGhvdXQgc3BlY2lhbCBhY3Rpb24gdGhlIHRlc3RzIHdvdWxkIGZhaWwKK3doZW4gUENSRTIgaXMgY29tcGlsZWQgd2l0aCBlaXRoZXIgQ1Igb3IgQ1JMRiBhcyB0aGUgZGVmYXVsdCBuZXdsaW5lLgorPC9QPgorPFA+CitUaGUgI25ld2xpbmVfZGVmYXVsdCBjb21tYW5kIHNwZWNpZmllcyBhIGxpc3Qgb2YgbmV3bGluZSB0eXBlcyB0aGF0IGFyZQorYWNjZXB0YWJsZSBhcyB0aGUgZGVmYXVsdC4gVGhlIHR5cGVzIG11c3QgYmUgb25lIG9mIENSLCBMRiwgQ1JMRiwgQU5ZQ1JMRiwgb3IKK0FOWSAoaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSksIGZvciBleGFtcGxlOgorPHByZT4KKyAgI25ld2xpbmVfZGVmYXVsdCBMRiBBbnkgYW55Q1JMRgorPC9wcmU+CitJZiB0aGUgZGVmYXVsdCBuZXdsaW5lIGlzIGluIHRoZSBsaXN0LCB0aGlzIGNvbW1hbmQgaGFzIG5vIGVmZmVjdC4gT3RoZXJ3aXNlLAorZXhjZXB0IHdoZW4gdGVzdGluZyB0aGUgUE9TSVggQVBJLCBhIDxiPm5ld2xpbmU8L2I+IG1vZGlmaWVyIHRoYXQgc3BlY2lmaWVzIHRoZQorZmlyc3QgbmV3bGluZSBjb252ZW50aW9uIGluIHRoZSBsaXN0IChMRiBpbiB0aGUgYWJvdmUgZXhhbXBsZSkgaXMgYWRkZWQgdG8gYW55CitwYXR0ZXJuIHRoYXQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgPGI+bmV3bGluZTwvYj4gbW9kaWZpZXIuIElmIHRoZSBuZXdsaW5lCitsaXN0IGlzIGVtcHR5LCB0aGUgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmLiBUaGlzIGNvbW1hbmQgaXMgcHJlc2VudCBpbiBhIG51bWJlcgorb2YgdGhlIHN0YW5kYXJkIHRlc3QgaW5wdXQgZmlsZXMuCis8L1A+Cis8UD4KK1doZW4gdGhlIFBPU0lYIEFQSSBpcyBiZWluZyB0ZXN0ZWQgdGhlcmUgaXMgbm8gd2F5IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0CituZXdsaW5lIGNvbnZlbnRpb24sIHRob3VnaCBpdCBpcyBwb3NzaWJsZSB0byBzZXQgdGhlIG5ld2xpbmUgY29udmVudGlvbiBmcm9tCit3aXRoaW4gdGhlIHBhdHRlcm4uIEEgd2FybmluZyBpcyBnaXZlbiBpZiB0aGUgPGI+cG9zaXg8L2I+IG1vZGlmaWVyIGlzIHVzZWQgd2hlbgorPGI+I25ld2xpbmVfZGVmYXVsdDwvYj4gd291bGQgc2V0IGEgZGVmYXVsdCBmb3IgdGhlIG5vbi1QT1NJWCBBUEkuCis8cHJlPgorICAjcGF0dGVybiAmIzYwO21vZGlmaWVyLWxpc3QmIzYyOworPC9wcmU+CitUaGlzIGNvbW1hbmQgc2V0cyBhIGRlZmF1bHQgbW9kaWZpZXIgbGlzdCB0aGF0IGFwcGxpZXMgdG8gYWxsIHN1YnNlcXVlbnQKK3BhdHRlcm5zLiBNb2RpZmllcnMgb24gYSBwYXR0ZXJuIGNhbiBjaGFuZ2UgdGhlc2Ugc2V0dGluZ3MuCis8cHJlPgorICAjcGVybHRlc3QKKzwvcHJlPgorVGhlIGFwcGVhcmFuY2Ugb2YgdGhpcyBsaW5lIGNhdXNlcyBhbGwgc3Vic2VxdWVudCBtb2RpZmllciBzZXR0aW5ncyB0byBiZQorY2hlY2tlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSA8Yj5wZXJsdGVzdC5zaDwvYj4gc2NyaXB0LCB3aGljaCBpcyB1c2VkIHRvCitjb25maXJtIHRoYXQgUGVybCBnaXZlcyB0aGUgc2FtZSByZXN1bHRzIGFzIFBDUkUyLiBBbHNvLCBhcGFydCBmcm9tIGNvbW1lbnQKK2xpbmVzLCBub25lIG9mIHRoZSBvdGhlciBjb21tYW5kIGxpbmVzIGFyZSBwZXJtaXR0ZWQsIGJlY2F1c2UgdGhleSBhbmQgbWFueQorb2YgdGhlIG1vZGlmaWVycyBhcmUgc3BlY2lmaWMgdG8gPGI+cGNyZTJ0ZXN0PC9iPiwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbgordGVzdCBmaWxlcyB0aGF0IGFyZSBhbHNvIHByb2Nlc3NlZCBieSA8Yj5wZXJsdGVzdC5zaDwvYj4uIFRoZSA8Yj4jcGVybHRlc3Q8L2I+Citjb21tYW5kIGhlbHBzIGRldGVjdCB0ZXN0cyB0aGF0IGFyZSBhY2NpZGVudGFsbHkgcHV0IGluIHRoZSB3cm9uZyBmaWxlLgorPHByZT4KKyAgI3BvcCBbJiM2MDttb2RpZmllcnMmIzYyO10KKzwvcHJlPgorVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgc3RhY2sgb2YgY29tcGlsZWQgcGF0dGVybnMsIGFzIGRlc2NyaWJlZAoraW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIlNhdmluZyBhbmQgcmVzdG9yaW5nIGNvbXBpbGVkIHBhdHRlcm5zIgorPGEgaHJlZj0iI3NhdmVyZXN0b3JlIj5iZWxvdy48L2E+Cis8cHJlPgorICAjc2F2ZSAmIzYwO2ZpbGVuYW1lJiM2MjsKKzwvcHJlPgorVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gc2F2ZSBhIHNldCBvZiBjb21waWxlZCBwYXR0ZXJucyB0byBhIGZpbGUsIGFzIGRlc2NyaWJlZAoraW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIlNhdmluZyBhbmQgcmVzdG9yaW5nIGNvbXBpbGVkIHBhdHRlcm5zIgorPGEgaHJlZj0iI3NhdmVyZXN0b3JlIj5iZWxvdy48L2E+Cis8cHJlPgorICAjc3ViamVjdCAmIzYwO21vZGlmaWVyLWxpc3QmIzYyOworPC9wcmU+CitUaGlzIGNvbW1hbmQgc2V0cyBhIGRlZmF1bHQgbW9kaWZpZXIgbGlzdCB0aGF0IGFwcGxpZXMgdG8gYWxsIHN1YnNlcXVlbnQKK3N1YmplY3QgbGluZXMuIE1vZGlmaWVycyBvbiBhIHN1YmplY3QgbGluZSBjYW4gY2hhbmdlIHRoZXNlIHNldHRpbmdzLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzciIGhyZWY9IiNUT0MxIj5NT0RJRklFUiBTWU5UQVg8L2E+PGJyPgorPFA+CitNb2RpZmllciBsaXN0cyBhcmUgdXNlZCB3aXRoIGJvdGggcGF0dGVybiBhbmQgc3ViamVjdCBsaW5lcy4gSXRlbXMgaW4gYSBsaXN0CithcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcyBmb2xsb3dlZCBieSBvcHRpb25hbCB3aGl0ZSBzcGFjZS4gVHJhaWxpbmcgd2hpdGVzcGFjZQoraW4gYSBtb2RpZmllciBsaXN0IGlzIGlnbm9yZWQuIFNvbWUgbW9kaWZpZXJzIG1heSBiZSBnaXZlbiBmb3IgYm90aCBwYXR0ZXJucworYW5kIHN1YmplY3QgbGluZXMsIHdoZXJlYXMgb3RoZXJzIGFyZSB2YWxpZCBvbmx5IGZvciBvbmUgb3IgdGhlIG90aGVyLiBFYWNoCittb2RpZmllciBoYXMgYSBsb25nIG5hbWUsIGZvciBleGFtcGxlICJhbmNob3JlZCIsIGFuZCBzb21lIG9mIHRoZW0gbXVzdCBiZQorZm9sbG93ZWQgYnkgYW4gZXF1YWxzIHNpZ24gYW5kIGEgdmFsdWUsIGZvciBleGFtcGxlLCAib2Zmc2V0PTEyIi4gVmFsdWVzIGNhbm5vdAorY29udGFpbiBjb21tYSBjaGFyYWN0ZXJzLCBidXQgbWF5IGNvbnRhaW4gc3BhY2VzLiBNb2RpZmllcnMgdGhhdCBkbyBub3QgdGFrZQordmFsdWVzIG1heSBiZSBwcmVjZWRlZCBieSBhIG1pbnVzIHNpZ24gdG8gdHVybiBvZmYgYSBwcmV2aW91cyBzZXR0aW5nLgorPC9QPgorPFA+CitBIGZldyBvZiB0aGUgbW9yZSBjb21tb24gbW9kaWZpZXJzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBhcyBzaW5nbGUgbGV0dGVycywgZm9yCitleGFtcGxlICJpIiBmb3IgImNhc2VsZXNzIi4gSW4gZG9jdW1lbnRhdGlvbiwgZm9sbG93aW5nIHRoZSBQZXJsIGNvbnZlbnRpb24sCit0aGVzZSBhcmUgd3JpdHRlbiB3aXRoIGEgc2xhc2ggKCJ0aGUgL2kgbW9kaWZpZXIiKSBmb3IgY2xhcml0eS4gQWJicmV2aWF0ZWQKK21vZGlmaWVycyBtdXN0IGFsbCBiZSBjb25jYXRlbmF0ZWQgaW4gdGhlIGZpcnN0IGl0ZW0gb2YgYSBtb2RpZmllciBsaXN0LiBJZiB0aGUKK2ZpcnN0IGl0ZW0gaXMgbm90IHJlY29nbml6ZWQgYXMgYSBsb25nIG1vZGlmaWVyIG5hbWUsIGl0IGlzIGludGVycHJldGVkIGFzIGEKK3NlcXVlbmNlIG9mIHRoZXNlIGFiYnJldmlhdGlvbnMuIEZvciBleGFtcGxlOgorPHByZT4KKyAgL2FiYy9pZyxuZXdsaW5lPWNyLGppdD0zCis8L3ByZT4KK1RoaXMgaXMgYSBwYXR0ZXJuIGxpbmUgd2hvc2UgbW9kaWZpZXIgbGlzdCBzdGFydHMgd2l0aCB0d28gb25lLWxldHRlciBtb2RpZmllcnMKKygvaSBhbmQgL2cpLiBUaGUgbG93ZXItY2FzZSBhYmJyZXZpYXRlZCBtb2RpZmllcnMgYXJlIHRoZSBzYW1lIGFzIHVzZWQgaW4gUGVybC4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM4IiBocmVmPSIjVE9DMSI+UEFUVEVSTiBTWU5UQVg8L2E+PGJyPgorPFA+CitBIHBhdHRlcm4gbGluZSBtdXN0IHN0YXJ0IHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyAoY29tbW9uIHN5bWJvbHMsCitleGNsdWRpbmcgcGF0dGVybiBtZXRhLWNoYXJhY3RlcnMpOgorPHByZT4KKyAgLyAhICIgJyBgIC0gPSBfIDogOyAsICUgJiBAIH4KKzwvcHJlPgorVGhpcyBpcyBpbnRlcnByZXRlZCBhcyB0aGUgcGF0dGVybidzIGRlbGltaXRlci4gQSByZWd1bGFyIGV4cHJlc3Npb24gbWF5IGJlCitjb250aW51ZWQgb3ZlciBzZXZlcmFsIGlucHV0IGxpbmVzLCBpbiB3aGljaCBjYXNlIHRoZSBuZXdsaW5lIGNoYXJhY3RlcnMgYXJlCitpbmNsdWRlZCB3aXRoaW4gaXQuIEl0IGlzIHBvc3NpYmxlIHRvIGluY2x1ZGUgdGhlIGRlbGltaXRlciB3aXRoaW4gdGhlIHBhdHRlcm4KK2J5IGVzY2FwaW5nIGl0IHdpdGggYSBiYWNrc2xhc2gsIGZvciBleGFtcGxlCis8cHJlPgorICAvYWJjXC9kZWYvCis8L3ByZT4KK0lmIHlvdSBkbyB0aGlzLCB0aGUgZXNjYXBlIGFuZCB0aGUgZGVsaW1pdGVyIGZvcm0gcGFydCBvZiB0aGUgcGF0dGVybiwgYnV0CitzaW5jZSB0aGUgZGVsaW1pdGVycyBhcmUgYWxsIG5vbi1hbHBoYW51bWVyaWMsIHRoaXMgZG9lcyBub3QgYWZmZWN0IGl0cworaW50ZXJwcmV0YXRpb24uIElmIHRoZSB0ZXJtaW5hdGluZyBkZWxpbWl0ZXIgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYQorYmFja3NsYXNoLCBmb3IgZXhhbXBsZSwKKzxwcmU+CisgIC9hYmMvXAorPC9wcmU+Cit0aGVuIGEgYmFja3NsYXNoIGlzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uIFRoaXMgaXMgZG9uZSB0byBwcm92aWRlIGEKK3dheSBvZiB0ZXN0aW5nIHRoZSBlcnJvciBjb25kaXRpb24gdGhhdCBhcmlzZXMgaWYgYSBwYXR0ZXJuIGZpbmlzaGVzIHdpdGggYQorYmFja3NsYXNoLCBiZWNhdXNlCis8cHJlPgorICAvYWJjXC8KKzwvcHJlPgoraXMgaW50ZXJwcmV0ZWQgYXMgdGhlIGZpcnN0IGxpbmUgb2YgYSBwYXR0ZXJuIHRoYXQgc3RhcnRzIHdpdGggImFiYy8iLCBjYXVzaW5nCitwY3JlMnRlc3QgdG8gcmVhZCB0aGUgbmV4dCBsaW5lIGFzIGEgY29udGludWF0aW9uIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uCis8L1A+Cis8UD4KK0EgcGF0dGVybiBjYW4gYmUgZm9sbG93ZWQgYnkgYSBtb2RpZmllciBsaXN0IChkZXRhaWxzIGJlbG93KS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUM5IiBocmVmPSIjVE9DMSI+U1VCSkVDVCBMSU5FIFNZTlRBWDwvYT48YnI+Cis8UD4KK0JlZm9yZSBlYWNoIHN1YmplY3QgbGluZSBpcyBwYXNzZWQgdG8gPGI+cGNyZTJfbWF0Y2goKTwvYj4gb3IKKzxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiwgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UgaXMgcmVtb3ZlZCwgYW5kIHRoZQorbGluZSBpcyBzY2FubmVkIGZvciBiYWNrc2xhc2ggZXNjYXBlcy4gVGhlIGZvbGxvd2luZyBwcm92aWRlIGEgbWVhbnMgb2YKK2VuY29kaW5nIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzIGluIGEgdmlzaWJsZSB3YXk6Cis8cHJlPgorICBcYSAgICAgICAgIGFsYXJtIChCRUwsIFx4MDcpCisgIFxiICAgICAgICAgYmFja3NwYWNlIChceDA4KQorICBcZSAgICAgICAgIGVzY2FwZSAoXHgyNykKKyAgXGYgICAgICAgICBmb3JtIGZlZWQgKFx4MGMpCisgIFxuICAgICAgICAgbmV3bGluZSAoXHgwYSkKKyAgXHIgICAgICAgICBjYXJyaWFnZSByZXR1cm4gKFx4MGQpCisgIFx0ICAgICAgICAgdGFiIChceDA5KQorICBcdiAgICAgICAgIHZlcnRpY2FsIHRhYiAoXHgwYikKKyAgXG5ubiAgICAgICBvY3RhbCBjaGFyYWN0ZXIgKHVwIHRvIDMgb2N0YWwgZGlnaXRzKTsgYWx3YXlzCisgICAgICAgICAgICAgICBhIGJ5dGUgdW5sZXNzICYjNjI7IDI1NSBpbiBVVEYtOCBvciAxNi1iaXQgb3IgMzItYml0IG1vZGUKKyAgXG97ZGQuLi59ICBvY3RhbCBjaGFyYWN0ZXIgKGFueSBudW1iZXIgb2Ygb2N0YWwgZGlnaXRzfQorICBceGhoICAgICAgIGhleGFkZWNpbWFsIGJ5dGUgKHVwIHRvIDIgaGV4IGRpZ2l0cykKKyAgXHh7aGguLi59ICBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIgKGFueSBudW1iZXIgb2YgaGV4IGRpZ2l0cykKKzwvcHJlPgorVGhlIHVzZSBvZiBceHtoaC4uLn0gaXMgbm90IGRlcGVuZGVudCBvbiB0aGUgdXNlIG9mIHRoZSA8Yj51dGY8L2I+IG1vZGlmaWVyIG9uCit0aGUgcGF0dGVybi4gSXQgaXMgcmVjb2duaXplZCBhbHdheXMuIFRoZXJlIG1heSBiZSBhbnkgbnVtYmVyIG9mIGhleGFkZWNpbWFsCitkaWdpdHMgaW5zaWRlIHRoZSBicmFjZXM7IGludmFsaWQgdmFsdWVzIHByb3Zva2UgZXJyb3IgbWVzc2FnZXMuCis8L1A+Cis8UD4KK05vdGUgdGhhdCBceGhoIHNwZWNpZmllcyBvbmUgYnl0ZSByYXRoZXIgdGhhbiBvbmUgY2hhcmFjdGVyIGluIFVURi04IG1vZGU7Cit0aGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbnN0cnVjdCBpbnZhbGlkIFVURi04IHNlcXVlbmNlcyBmb3IgdGVzdGluZworcHVycG9zZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBceHtoaH0gaXMgaW50ZXJwcmV0ZWQgYXMgYSBVVEYtOCBjaGFyYWN0ZXIgaW4KK1VURi04IG1vZGUsIGdlbmVyYXRpbmcgbW9yZSB0aGFuIG9uZSBieXRlIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gMTI3LgorV2hlbiB0ZXN0aW5nIHRoZSA4LWJpdCBsaWJyYXJ5IG5vdCBpbiBVVEYtOCBtb2RlLCBceHtoaH0gZ2VuZXJhdGVzIG9uZSBieXRlCitmb3IgdmFsdWVzIGxlc3MgdGhhbiAyNTYsIGFuZCBjYXVzZXMgYW4gZXJyb3IgZm9yIGdyZWF0ZXIgdmFsdWVzLgorPC9QPgorPFA+CitJbiBVVEYtMTYgbW9kZSwgYWxsIDQtZGlnaXQgXHh7aGhoaH0gdmFsdWVzIGFyZSBhY2NlcHRlZC4gVGhpcyBtYWtlcyBpdAorcG9zc2libGUgdG8gY29uc3RydWN0IGludmFsaWQgVVRGLTE2IHNlcXVlbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKzwvUD4KKzxQPgorSW4gVVRGLTMyIG1vZGUsIGFsbCA0LSB0byA4LWRpZ2l0IFx4ey4uLn0gdmFsdWVzIGFyZSBhY2NlcHRlZC4gVGhpcyBtYWtlcyBpdAorcG9zc2libGUgdG8gY29uc3RydWN0IGludmFsaWQgVVRGLTMyIHNlcXVlbmNlcyBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKzwvUD4KKzxQPgorVGhlcmUgaXMgYSBzcGVjaWFsIGJhY2tzbGFzaCBzZXF1ZW5jZSB0aGF0IHNwZWNpZmllcyByZXBsaWNhdGlvbiBvZiBvbmUgb3IgbW9yZQorY2hhcmFjdGVyczoKKzxwcmU+CisgIFxbJiM2MDtjaGFyYWN0ZXJzJiM2MjtdeyYjNjA7Y291bnQmIzYyO30KKzwvcHJlPgorVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB0ZXN0IGxvbmcgc3RyaW5ncyB3aXRob3V0IGhhdmluZyB0byBwcm92aWRlIHRoZW0gYXMKK3BhcnQgb2YgdGhlIGZpbGUuIEZvciBleGFtcGxlOgorPHByZT4KKyAgXFthYmNdezR9Cis8L3ByZT4KK2lzIGNvbnZlcnRlZCB0byAiYWJjYWJjYWJjYWJjIi4gVGhpcyBmZWF0dXJlIGRvZXMgbm90IHN1cHBvcnQgbmVzdGluZy4gVG8KK2luY2x1ZGUgYSBjbG9zaW5nIHNxdWFyZSBicmFja2V0IGluIHRoZSBjaGFyYWN0ZXJzLCBjb2RlIGl0IGFzIFx4NUQuCis8L1A+Cis8UD4KK0EgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGFuIGVxdWFscyBzaWduIG1hcmtzIHRoZSBlbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nIGFuZAordGhlIHN0YXJ0IG9mIGEgbW9kaWZpZXIgbGlzdC4gRm9yIGV4YW1wbGU6Cis8cHJlPgorICBhYmNcPW5vdGJvbCxub3RlbXB0eQorPC9wcmU+CitJZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgZW1wdHkgYW5kIFw9IGlzIGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UsIHRoZSBsaW5lIGlzCit0cmVhdGVkIGFzIGEgY29tbWVudCBsaW5lLCBhbmQgaXMgbm90IHVzZWQgZm9yIG1hdGNoaW5nLiBGb3IgZXhhbXBsZToKKzxwcmU+CisgIFw9IFRoaXMgaXMgYSBjb21tZW50LgorICBhYmNcPSBUaGlzIGlzIGFuIGludmFsaWQgbW9kaWZpZXIgbGlzdC4KKzwvcHJlPgorQSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYW55IG90aGVyIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVyIGp1c3QgZXNjYXBlcyB0aGF0CitjaGFyYWN0ZXIuIEEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGFueXRoaW5nIGVsc2UgY2F1c2VzIGFuIGVycm9yLiBIb3dldmVyLCBpZgordGhlIHZlcnkgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGxpbmUgaXMgYSBiYWNrc2xhc2ggKGFuZCB0aGVyZSBpcyBubyBtb2RpZmllcgorbGlzdCksIGl0IGlzIGlnbm9yZWQuIFRoaXMgZ2l2ZXMgYSB3YXkgb2YgcGFzc2luZyBhbiBlbXB0eSBsaW5lIGFzIGRhdGEsIHNpbmNlCithIHJlYWwgZW1wdHkgbGluZSB0ZXJtaW5hdGVzIHRoZSBkYXRhIGlucHV0LgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzEwIiBocmVmPSIjVE9DMSI+UEFUVEVSTiBNT0RJRklFUlM8L2E+PGJyPgorPFA+CitUaGVyZSBhcmUgc2V2ZXJhbCB0eXBlcyBvZiBtb2RpZmllciB0aGF0IGNhbiBhcHBlYXIgaW4gcGF0dGVybiBsaW5lcy4gRXhjZXB0Cit3aGVyZSBub3RlZCBiZWxvdywgdGhleSBtYXkgYWxzbyBiZSB1c2VkIGluIDxiPiNwYXR0ZXJuPC9iPiBjb21tYW5kcy4gQQorcGF0dGVybidzIG1vZGlmaWVyIGxpc3QgY2FuIGFkZCB0byBvciBvdmVycmlkZSBkZWZhdWx0IG1vZGlmaWVycyB0aGF0IHdlcmUgc2V0CitieSBhIHByZXZpb3VzIDxiPiNwYXR0ZXJuPC9iPiBjb21tYW5kLgorPGEgbmFtZT0ib3B0aW9ubW9kaWZpZXJzIj48L2E+PC9QPgorPGJyPjxiPgorU2V0dGluZyBjb21waWxhdGlvbiBvcHRpb25zCis8L2I+PGJyPgorPFA+CitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBzZXQgb3B0aW9ucyBmb3IgPGI+cGNyZTJfY29tcGlsZSgpPC9iPi4gVGhlIG1vc3QgY29tbW9uCitvbmVzIGhhdmUgc2luZ2xlLWxldHRlciBhYmJyZXZpYXRpb25zLiBTZWUKKzxhIGhyZWY9InBjcmUyYXBpLmh0bWwiPjxiPnBjcmUyYXBpPC9iPjwvYT4KK2ZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZWlyIGVmZmVjdHMuCis8cHJlPgorICAgICAgYWxsb3dfZW1wdHlfY2xhc3MgICAgICAgICBzZXQgUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1MKKyAgICAgIGFsdF9ic3V4ICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX0FMVF9CU1VYCisgICAgICBhbHRfY2lyY3VtZmxleCAgICAgICAgICAgIHNldCBQQ1JFMl9BTFRfQ0lSQ1VNRkxFWAorICAgICAgYWx0X3ZlcmJuYW1lcyAgICAgICAgICAgICBzZXQgUENSRTJfQUxUX1ZFUkJOQU1FUworICAgICAgYW5jaG9yZWQgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfQU5DSE9SRUQKKyAgICAgIGF1dG9fY2FsbG91dCAgICAgICAgICAgICAgc2V0IFBDUkUyX0FVVE9fQ0FMTE9VVAorICAvaSAgY2FzZWxlc3MgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfQ0FTRUxFU1MKKyAgICAgIGRvbGxhcl9lbmRvbmx5ICAgICAgICAgICAgc2V0IFBDUkUyX0RPTExBUl9FTkRPTkxZCisgIC9zICBkb3RhbGwgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9ET1RBTEwKKyAgICAgIGR1cG5hbWVzICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX0RVUE5BTUVTCisgIC94ICBleHRlbmRlZCAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9FWFRFTkRFRAorICAgICAgZmlyc3RsaW5lICAgICAgICAgICAgICAgICBzZXQgUENSRTJfRklSU1RMSU5FCisgICAgICBtYXRjaF91bnNldF9iYWNrcmVmICAgICAgIHNldCBQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGCisgIC9tICBtdWx0aWxpbmUgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9NVUxUSUxJTkUKKyAgICAgIG5ldmVyX2JhY2tzbGFzaF9jICAgICAgICAgc2V0IFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DCisgICAgICBuZXZlcl91Y3AgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9ORVZFUl9VQ1AKKyAgICAgIG5ldmVyX3V0ZiAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX05FVkVSX1VURgorICAgICAgbm9fYXV0b19jYXB0dXJlICAgICAgICAgICBzZXQgUENSRTJfTk9fQVVUT19DQVBUVVJFCisgICAgICBub19hdXRvX3Bvc3Nlc3MgICAgICAgICAgIHNldCBQQ1JFMl9OT19BVVRPX1BPU1NFU1MKKyAgICAgIG5vX2RvdHN0YXJfYW5jaG9yICAgICAgICAgc2V0IFBDUkUyX05PX0RPVFNUQVJfQU5DSE9SCisgICAgICBub19zdGFydF9vcHRpbWl6ZSAgICAgICAgIHNldCBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRQorICAgICAgbm9fdXRmX2NoZWNrICAgICAgICAgICAgICBzZXQgUENSRTJfTk9fVVRGX0NIRUNLCisgICAgICB1Y3AgICAgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9VQ1AKKyAgICAgIHVuZ3JlZWR5ICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX1VOR1JFRURZCisgICAgICB1c2Vfb2Zmc2V0X2xpbWl0ICAgICAgICAgIHNldCBQQ1JFMl9VU0VfT0ZGU0VUX0xJTUlUCisgICAgICB1dGYgICAgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9VVEYKKzwvcHJlPgorQXMgd2VsbCBhcyB0dXJuaW5nIG9uIHRoZSBQQ1JFMl9VVEYgb3B0aW9uLCB0aGUgPGI+dXRmPC9iPiBtb2RpZmllciBjYXVzZXMgYWxsCitub24tcHJpbnRpbmcgY2hhcmFjdGVycyBpbiBvdXRwdXQgc3RyaW5ncyB0byBiZSBwcmludGVkIHVzaW5nIHRoZSBceHtoaC4uLn0KK25vdGF0aW9uLiBPdGhlcndpc2UsIHRob3NlIGxlc3MgdGhhbiAweDEwMCBhcmUgb3V0cHV0IGluIGhleCB3aXRob3V0IHRoZSBjdXJseQorYnJhY2tldHMuCis8YSBuYW1lPSJjb250cm9sbW9kaWZpZXJzIj48L2E+PC9QPgorPGJyPjxiPgorU2V0dGluZyBjb21waWxhdGlvbiBjb250cm9scworPC9iPjxicj4KKzxQPgorVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgYWZmZWN0IHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIG9yIHJlcXVlc3QgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBwYXR0ZXJuOgorPHByZT4KKyAgICAgIGJzcj1bYW55Y3JsZnx1bmljb2RlXSAgICAgc3BlY2lmeSBcUiBoYW5kbGluZworICAvQiAgYmluY29kZSAgICAgICAgICAgICAgICAgICBzaG93IGJpbmFyeSBjb2RlIHdpdGhvdXQgbGVuZ3RocworICAgICAgY2FsbG91dF9pbmZvICAgICAgICAgICAgICBzaG93IGNhbGxvdXQgaW5mb3JtYXRpb24KKyAgICAgIGRlYnVnICAgICAgICAgICAgICAgICAgICAgc2FtZSBhcyBpbmZvLGZ1bGxiaW5jb2RlCisgICAgICBmdWxsYmluY29kZSAgICAgICAgICAgICAgIHNob3cgYmluYXJ5IGNvZGUgd2l0aCBsZW5ndGhzCisgIC9JICBpbmZvICAgICAgICAgICAgICAgICAgICAgIHNob3cgaW5mbyBhYm91dCBjb21waWxlZCBwYXR0ZXJuCisgICAgICBoZXggICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gaXMgY29kZWQgaW4gaGV4YWRlY2ltYWwKKyAgICAgIGppdFs9JiM2MDtudW1iZXImIzYyO10gICAgICAgICAgICB1c2UgSklUCisgICAgICBqaXRmYXN0ICAgICAgICAgICAgICAgICAgIHVzZSBKSVQgZmFzdCBwYXRoCisgICAgICBqaXR2ZXJpZnkgICAgICAgICAgICAgICAgIHZlcmlmeSBKSVQgdXNlCisgICAgICBsb2NhbGU9JiM2MDtuYW1lJiM2MjsgICAgICAgICAgICAgdXNlIHRoaXMgbG9jYWxlCisgICAgICBtYXhfcGF0dGVybl9sZW5ndGg9JiM2MDtuJiM2MjsgICAgc2V0IHRoZSBtYXhpbXVtIHBhdHRlcm4gbGVuZ3RoCisgICAgICBtZW1vcnkgICAgICAgICAgICAgICAgICAgIHNob3cgbWVtb3J5IHVzZWQKKyAgICAgIG5ld2xpbmU9JiM2MDt0eXBlJiM2MjsgICAgICAgICAgICBzZXQgbmV3bGluZSB0eXBlCisgICAgICBudWxsX2NvbnRleHQgICAgICAgICAgICAgIGNvbXBpbGUgd2l0aCBhIE5VTEwgY29udGV4dAorICAgICAgcGFyZW5zX25lc3RfbGltaXQ9JiM2MDtuJiM2MjsgICAgIHNldCBtYXhpbXVtIHBhcmVudGhlc2VzIGRlcHRoCisgICAgICBwb3NpeCAgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgUE9TSVggQVBJCisgICAgICBwdXNoICAgICAgICAgICAgICAgICAgICAgIHB1c2ggY29tcGlsZWQgcGF0dGVybiBvbnRvIHRoZSBzdGFjaworICAgICAgc3RhY2tndWFyZD0mIzYwO251bWJlciYjNjI7ICAgICAgIHRlc3QgdGhlIHN0YWNrZ3VhcmQgZmVhdHVyZQorICAgICAgdGFibGVzPVswfDF8Ml0gICAgICAgICAgICBzZWxlY3QgaW50ZXJuYWwgdGFibGVzCis8L3ByZT4KK1RoZSBlZmZlY3RzIG9mIHRoZXNlIG1vZGlmaWVycyBhcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCis8L1A+Cis8YnI+PGI+CitOZXdsaW5lIGFuZCBcUiBoYW5kbGluZworPC9iPjxicj4KKzxQPgorVGhlIDxiPmJzcjwvYj4gbW9kaWZpZXIgc3BlY2lmaWVzIHdoYXQgXFIgaW4gYSBwYXR0ZXJuIHNob3VsZCBtYXRjaC4gSWYgaXQgaXMKK3NldCB0byAiYW55Y3JsZiIsIFxSIG1hdGNoZXMgQ1IsIExGLCBvciBDUkxGIG9ubHkuIElmIGl0IGlzIHNldCB0byAidW5pY29kZSIsCitcUiBtYXRjaGVzIGFueSBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UuIFRoZSBkZWZhdWx0IGlzIHNwZWNpZmllZCB3aGVuIFBDUkUyCitpcyBidWlsdCwgd2l0aCB0aGUgZGVmYXVsdCBkZWZhdWx0IGJlaW5nIFVuaWNvZGUuCis8L1A+Cis8UD4KK1RoZSA8Yj5uZXdsaW5lPC9iPiBtb2RpZmllciBzcGVjaWZpZXMgd2hpY2ggY2hhcmFjdGVycyBhcmUgdG8gYmUgaW50ZXJwcmV0ZWQgYXMKK25ld2xpbmVzLCBib3RoIGluIHRoZSBwYXR0ZXJuIGFuZCBpbiBzdWJqZWN0IGxpbmVzLiBUaGUgdHlwZSBtdXN0IGJlIG9uZSBvZiBDUiwKK0xGLCBDUkxGLCBBTllDUkxGLCBvciBBTlkgKGluIHVwcGVyIG9yIGxvd2VyIGNhc2UpLgorPC9QPgorPGJyPjxiPgorSW5mb3JtYXRpb24gYWJvdXQgYSBwYXR0ZXJuCis8L2I+PGJyPgorPFA+CitUaGUgPGI+ZGVidWc8L2I+IG1vZGlmaWVyIGlzIGEgc2hvcnRoYW5kIGZvciA8Yj5pbmZvLGZ1bGxiaW5jb2RlPC9iPiwgcmVxdWVzdGluZworYWxsIGF2YWlsYWJsZSBpbmZvcm1hdGlvbi4KKzwvUD4KKzxQPgorVGhlIDxiPmJpbmNvZGU8L2I+IG1vZGlmaWVyIGNhdXNlcyBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21waWxlZCBjb2RlIHRvIGJlCitvdXRwdXQgYWZ0ZXIgY29tcGlsYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gZG9lcyBub3QgY29udGFpbiBsZW5ndGggYW5kIG9mZnNldAordmFsdWVzLCB3aGljaCBlbnN1cmVzIHRoYXQgdGhlIHNhbWUgb3V0cHV0IGlzIGdlbmVyYXRlZCBmb3IgZGlmZmVyZW50IGludGVybmFsCitsaW5rIHNpemVzIGFuZCBkaWZmZXJlbnQgY29kZSB1bml0IHdpZHRocy4gQnkgdXNpbmcgPGI+YmluY29kZTwvYj4sIHRoZSBzYW1lCityZWdyZXNzaW9uIHRlc3RzIGNhbiBiZSB1c2VkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuCis8L1A+Cis8UD4KK1RoZSA8Yj5mdWxsYmluY29kZTwvYj4gbW9kaWZpZXIsIGJ5IGNvbnRyYXN0LCA8aT5kb2VzPC9pPiBpbmNsdWRlIGxlbmd0aCBhbmQKK29mZnNldCB2YWx1ZXMuIFRoaXMgaXMgdXNlZCBpbiBhIGZldyBzcGVjaWFsIHRlc3RzIHRoYXQgcnVuIG9ubHkgZm9yIHNwZWNpZmljCitjb2RlIHVuaXQgd2lkdGhzIGFuZCBsaW5rIHNpemVzLCBhbmQgaXMgYWxzbyB1c2VmdWwgZm9yIG9uZS1vZmYgdGVzdHMuCis8L1A+Cis8UD4KK1RoZSA8Yj5pbmZvPC9iPiBtb2RpZmllciByZXF1ZXN0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZWQgcGF0dGVybgorKHdoZXRoZXIgaXQgaXMgYW5jaG9yZWQsIGhhcyBhIGZpeGVkIGZpcnN0IGNoYXJhY3RlciwgYW5kIHNvIG9uKS4gVGhlCitpbmZvcm1hdGlvbiBpcyBvYnRhaW5lZCBmcm9tIHRoZSA8Yj5wY3JlMl9wYXR0ZXJuX2luZm8oKTwvYj4gZnVuY3Rpb24uIEhlcmUgYXJlCitzb21lIHR5cGljYWwgZXhhbXBsZXM6Cis8cHJlPgorICAgIHJlJiM2MjsgLyg/aSkoXmF8XmIpL20saW5mbworICBDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKKyAgQ29tcGlsZSBvcHRpb25zOiBtdWx0aWxpbmUKKyAgT3ZlcmFsbCBvcHRpb25zOiBjYXNlbGVzcyBtdWx0aWxpbmUKKyAgRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorICBTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworICAgIHJlJiM2MjsgLyg/aSlhYmMvaW5mbworICBDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKKyAgQ29tcGlsZSBvcHRpb25zOiAmIzYwO25vbmUmIzYyOworICBPdmVyYWxsIG9wdGlvbnM6IGNhc2VsZXNzCisgIEZpcnN0IGNvZGUgdW5pdCA9ICdhJyAoY2FzZWxlc3MpCisgIExhc3QgY29kZSB1bml0ID0gJ2MnIChjYXNlbGVzcykKKyAgU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCis8L3ByZT4KKyJDb21waWxlIG9wdGlvbnMiIGFyZSB0aG9zZSBzcGVjaWZpZWQgYnkgbW9kaWZpZXJzOyAib3ZlcmFsbCBvcHRpb25zIiBoYXZlCithZGRlZCBvcHRpb25zIHRoYXQgYXJlIHRha2VuIG9yIGRlZHVjZWQgZnJvbSB0aGUgcGF0dGVybi4gSWYgYm90aCBzZXRzIG9mCitvcHRpb25zIGFyZSB0aGUgc2FtZSwganVzdCBhIHNpbmdsZSAib3B0aW9ucyIgbGluZSBpcyBvdXRwdXQ7IGlmIHRoZXJlIGFyZSBubworb3B0aW9ucywgdGhlIGxpbmUgaXMgb21pdHRlZC4gIkZpcnN0IGNvZGUgdW5pdCIgaXMgd2hlcmUgYW55IG1hdGNoIG11c3Qgc3RhcnQ7CitpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHRoZXkgYXJlIGxpc3RlZCBhcyAic3RhcnRpbmcgY29kZSB1bml0cyIuICJMYXN0IGNvZGUKK3VuaXQiIGlzIHRoZSBsYXN0IGxpdGVyYWwgY29kZSB1bml0IHRoYXQgbXVzdCBiZSBwcmVzZW50IGluIGFueSBtYXRjaC4gVGhpcyBpcworbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IGNoYXJhY3Rlci4gVGhlc2UgbGluZXMgYXJlIG9taXR0ZWQgaWYgbm8gc3RhcnRpbmcgb3IKK2VuZGluZyBjb2RlIHVuaXRzIGFyZSByZWNvcmRlZC4KKzwvUD4KKzxQPgorVGhlIDxiPmNhbGxvdXRfaW5mbzwvYj4gbW9kaWZpZXIgcmVxdWVzdHMgaW5mb3JtYXRpb24gYWJvdXQgYWxsIHRoZSBjYWxsb3V0cyBpbgordGhlIHBhdHRlcm4uIEEgbGlzdCBvZiB0aGVtIGlzIG91dHB1dCBhdCB0aGUgZW5kIG9mIGFueSBvdGhlciBpbmZvcm1hdGlvbiB0aGF0CitpcyByZXF1ZXN0ZWQuIEZvciBlYWNoIGNhbGxvdXQsIGVpdGhlciBpdHMgbnVtYmVyIG9yIHN0cmluZyBpcyBnaXZlbiwgZm9sbG93ZWQKK2J5IHRoZSBpdGVtIHRoYXQgZm9sbG93cyBpdCBpbiB0aGUgcGF0dGVybi4KKzwvUD4KKzxicj48Yj4KK1Bhc3NpbmcgYSBOVUxMIGNvbnRleHQKKzwvYj48YnI+Cis8UD4KK05vcm1hbGx5LCA8Yj5wY3JlMnRlc3Q8L2I+IHBhc3NlcyBhIGNvbnRleHQgYmxvY2sgdG8gPGI+cGNyZTJfY29tcGlsZSgpPC9iPi4gSWYKK3RoZSA8Yj5udWxsX2NvbnRleHQ8L2I+IG1vZGlmaWVyIGlzIHNldCwgaG93ZXZlciwgTlVMTCBpcyBwYXNzZWQuIFRoaXMgaXMgZm9yCit0ZXN0aW5nIHRoYXQgPGI+cGNyZTJfY29tcGlsZSgpPC9iPiBiZWhhdmVzIGNvcnJlY3RseSBpbiB0aGlzIGNhc2UgKGl0IHVzZXMKK2RlZmF1bHQgdmFsdWVzKS4KKzwvUD4KKzxicj48Yj4KK1NwZWNpZnlpbmcgYSBwYXR0ZXJuIGluIGhleAorPC9iPjxicj4KKzxQPgorVGhlIDxiPmhleDwvYj4gbW9kaWZpZXIgc3BlY2lmaWVzIHRoYXQgdGhlIGNoYXJhY3RlcnMgb2YgdGhlIHBhdHRlcm4gYXJlIHRvIGJlCitpbnRlcnByZXRlZCBhcyBwYWlycyBvZiBoZXhhZGVjaW1hbCBkaWdpdHMuIFdoaXRlIHNwYWNlIGlzIHBlcm1pdHRlZCBiZXR3ZWVuCitwYWlycy4gRm9yIGV4YW1wbGU6Cis8cHJlPgorICAvYWIgMzIgNTkvaGV4Cis8L3ByZT4KK1RoaXMgZmVhdHVyZSBpcyBwcm92aWRlZCBhcyBhIHdheSBvZiBjcmVhdGluZyBwYXR0ZXJucyB0aGF0IGNvbnRhaW4gYmluYXJ5IHplcm8KK2FuZCBvdGhlciBub24tcHJpbnRpbmcgY2hhcmFjdGVycy4gQnkgZGVmYXVsdCwgPGI+cGNyZTJ0ZXN0PC9iPiBwYXNzZXMgcGF0dGVybnMKK2FzIHplcm8tdGVybWluYXRlZCBzdHJpbmdzIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4sIGdpdmluZyB0aGUgbGVuZ3RoIGFzCitQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIEhvd2V2ZXIsIGZvciBwYXR0ZXJucyBzcGVjaWZpZWQgaW4gaGV4YWRlY2ltYWwsIHRoZQorYWN0dWFsIGxlbmd0aCBvZiB0aGUgcGF0dGVybiBpcyBwYXNzZWQuCis8L1A+Cis8YnI+PGI+CitHZW5lcmF0aW5nIGxvbmcgcmVwZXRpdGl2ZSBwYXR0ZXJucworPC9iPjxicj4KKzxQPgorU29tZSB0ZXN0cyB1c2UgbG9uZyBwYXR0ZXJucyB0aGF0IGFyZSB2ZXJ5IHJlcGV0aXRpdmUuIEluc3RlYWQgb2YgY3JlYXRpbmcgYQordmVyeSBsb25nIGlucHV0IGxpbmUgZm9yIHN1Y2ggYSBwYXR0ZXJuLCB5b3UgY2FuIHVzZSBhIHNwZWNpYWwgcmVwZXRpdGlvbgorZmVhdHVyZSwgc2ltaWxhciB0byB0aGUgb25lIGRlc2NyaWJlZCBmb3Igc3ViamVjdCBsaW5lcyBhYm92ZS4gSWYgdGhlCis8Yj5leHBhbmQ8L2I+IG1vZGlmaWVyIGlzIHByZXNlbnQgb24gYSBwYXR0ZXJuLCBwYXJ0cyBvZiB0aGUgcGF0dGVybiB0aGF0IGhhdmUKK3RoZSBmb3JtCis8cHJlPgorICBcWyYjNjA7Y2hhcmFjdGVycyYjNjI7XXsmIzYwO2NvdW50JiM2Mjt9Cis8L3ByZT4KK2FyZSBleHBhbmRlZCBiZWZvcmUgdGhlIHBhdHRlcm4gaXMgcGFzc2VkIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4uIEZvcgorZXhhbXBsZSwgXFtBQl17NjAwMH0gaXMgZXhwYW5kZWQgdG8gIkFCQUIuLi4iIDYwMDAgdGltZXMuIFRoaXMgY29uc3RydWN0aW9uCitjYW5ub3QgYmUgbmVzdGVkLiBBbiBpbml0aWFsICJcWyIgc2VxdWVuY2UgaXMgcmVjb2duaXplZCBvbmx5IGlmICJdeyIgZm9sbG93ZWQKK2J5IGRlY2ltYWwgZGlnaXRzIGFuZCAifSIgaXMgZm91bmQgbGF0ZXIgaW4gdGhlIHBhdHRlcm4uIElmIG5vdCwgdGhlIGNoYXJhY3RlcnMKK3JlbWFpbiBpbiB0aGUgcGF0dGVybiB1bmFsdGVyZWQuCis8L1A+Cis8UD4KK0lmIHBhcnQgb2YgYW4gZXhwYW5kZWQgcGF0dGVybiBsb29rcyBsaWtlIGFuIGV4cGFuc2lvbiwgYnV0IGlzIHJlYWxseSBwYXJ0IG9mCit0aGUgYWN0dWFsIHBhdHRlcm4sIHVud2FudGVkIGV4cGFuc2lvbiBjYW4gYmUgYXZvaWRlZCBieSBnaXZpbmcgdHdvIHZhbHVlcyBpbgordGhlIHF1YW50aWZpZXIuIEZvciBleGFtcGxlLCBcW0FCXXs2MDAwLDYwMDB9IGlzIG5vdCByZWNvZ25pemVkIGFzIGFuCitleHBhbnNpb24gaXRlbS4KKzwvUD4KKzxQPgorSWYgdGhlIDxiPmluZm88L2I+IG1vZGlmaWVyIGlzIHNldCBvbiBhbiBleHBhbmRlZCBwYXR0ZXJuLCB0aGUgcmVzdWx0IG9mIHRoZQorZXhwYW5zaW9uIGlzIGluY2x1ZGVkIGluIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG91dHB1dC4KKzwvUD4KKzxicj48Yj4KK0pJVCBjb21waWxhdGlvbgorPC9iPjxicj4KKzxQPgorSnVzdC1pbi10aW1lIChKSVQpIGNvbXBpbGluZyBpcyBhIGhlYXZ5d2VpZ2h0IG9wdGltaXphdGlvbiB0aGF0IGNhbiBncmVhdGx5CitzcGVlZCB1cCBwYXR0ZXJuIG1hdGNoaW5nLiBTZWUgdGhlCis8YSBocmVmPSJwY3JlMmppdC5odG1sIj48Yj5wY3JlMmppdDwvYj48L2E+Citkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLiBKSVQgY29tcGlsaW5nIGhhcHBlbnMsIG9wdGlvbmFsbHksIGFmdGVyIGEgcGF0dGVybgoraGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkIGludG8gYW4gaW50ZXJuYWwgZm9ybS4gVGhlIEpJVCBjb21waWxlciBjb252ZXJ0cwordGhpcyB0byBvcHRpbWl6ZWQgbWFjaGluZSBjb2RlLiBJdCBuZWVkcyB0byBrbm93IHdoZXRoZXIgdGhlIG1hdGNoLXRpbWUgb3B0aW9ucworUENSRTJfUEFSVElBTF9IQVJEIGFuZCBQQ1JFMl9QQVJUSUFMX1NPRlQgYXJlIGdvaW5nIHRvIGJlIHVzZWQsIGJlY2F1c2UKK2RpZmZlcmVudCBjb2RlIGlzIGdlbmVyYXRlZCBmb3IgdGhlIGRpZmZlcmVudCBjYXNlcy4gU2VlIHRoZSA8Yj5wYXJ0aWFsPC9iPgorbW9kaWZpZXIgaW4gIlN1YmplY3QgTW9kaWZpZXJzIgorPGEgaHJlZj0iI3N1YmplY3Rtb2RpZmllcnMiPmJlbG93PC9hPgorZm9yIGRldGFpbHMgb2YgaG93IHRoZXNlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBmb3IgZWFjaCBtYXRjaCBhdHRlbXB0LgorPC9QPgorPFA+CitKSVQgY29tcGlsYXRpb24gaXMgcmVxdWVzdGVkIGJ5IHRoZSA8Yj4vaml0PC9iPiBwYXR0ZXJuIG1vZGlmaWVyLCB3aGljaCBtYXkKK29wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgYW4gZXF1YWxzIHNpZ24gYW5kIGEgbnVtYmVyIGluIHRoZSByYW5nZSAwIHRvIDcuCitUaGUgdGhyZWUgYml0cyB0aGF0IG1ha2UgdXAgdGhlIG51bWJlciBzcGVjaWZ5IHdoaWNoIG9mIHRoZSB0aHJlZSBKSVQgb3BlcmF0aW5nCittb2RlcyBhcmUgdG8gYmUgY29tcGlsZWQ6Cis8cHJlPgorICAxICBjb21waWxlIEpJVCBjb2RlIGZvciBub24tcGFydGlhbCBtYXRjaGluZworICAyICBjb21waWxlIEpJVCBjb2RlIGZvciBzb2Z0IHBhcnRpYWwgbWF0Y2hpbmcKKyAgNCAgY29tcGlsZSBKSVQgY29kZSBmb3IgaGFyZCBwYXJ0aWFsIG1hdGNoaW5nCis8L3ByZT4KK1RoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSA8Yj4vaml0PC9iPiBtb2RpZmllciBhcmUgdGhlcmVmb3JlOgorPHByZT4KKyAgMCAgZGlzYWJsZSBKSVQKKyAgMSAgbm9ybWFsIG1hdGNoaW5nIG9ubHkKKyAgMiAgc29mdCBwYXJ0aWFsIG1hdGNoaW5nIG9ubHkKKyAgMyAgbm9ybWFsIGFuZCBzb2Z0IHBhcnRpYWwgbWF0Y2hpbmcKKyAgNCAgaGFyZCBwYXJ0aWFsIG1hdGNoaW5nIG9ubHkKKyAgNiAgc29mdCBhbmQgaGFyZCBwYXJ0aWFsIG1hdGNoaW5nIG9ubHkKKyAgNyAgYWxsIHRocmVlIG1vZGVzCis8L3ByZT4KK0lmIG5vIG51bWJlciBpcyBnaXZlbiwgNyBpcyBhc3N1bWVkLiBUaGUgcGhyYXNlICJwYXJ0aWFsIG1hdGNoaW5nIiBtZWFucyBhIGNhbGwKK3RvIDxiPnBjcmUyX21hdGNoKCk8L2I+IHdpdGggZWl0aGVyIHRoZSBQQ1JFMl9QQVJUSUFMX1NPRlQgb3IgdGhlCitQQ1JFMl9QQVJUSUFMX0hBUkQgb3B0aW9uIHNldC4gTm90ZSB0aGF0IHN1Y2ggYSBjYWxsIG1heSByZXR1cm4gYSBjb21wbGV0ZQorbWF0Y2g7IHRoZSBvcHRpb25zIGVuYWJsZSB0aGUgcG9zc2liaWxpdHkgb2YgYSBwYXJ0aWFsIG1hdGNoLCBidXQgZG8gbm90CityZXF1aXJlIGl0LiBOb3RlIGFsc28gdGhhdCBpZiB5b3UgcmVxdWVzdCBKSVQgY29tcGlsYXRpb24gb25seSBmb3IgcGFydGlhbAorbWF0Y2hpbmcgKGZvciBleGFtcGxlLCAvaml0PTIpIGJ1dCBkbyBub3Qgc2V0IHRoZSA8Yj5wYXJ0aWFsPC9iPiBtb2RpZmllciBvbiBhCitzdWJqZWN0IGxpbmUsIHRoYXQgbWF0Y2ggd2lsbCBub3QgdXNlIEpJVCBjb2RlIGJlY2F1c2Ugbm9uZSB3YXMgY29tcGlsZWQgZm9yCitub24tcGFydGlhbCBtYXRjaGluZy4KKzwvUD4KKzxQPgorSWYgSklUIGNvbXBpbGF0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoZSBjb21waWxlZCBKSVQgY29kZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUKK3VzZWQgd2hlbiBhbiBhcHByb3ByaWF0ZSB0eXBlIG9mIG1hdGNoIGlzIHJ1biwgZXhjZXB0IHdoZW4gaW5jb21wYXRpYmxlCitydW4tdGltZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQuIEZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUKKzxhIGhyZWY9InBjcmUyaml0Lmh0bWwiPjxiPnBjcmUyaml0PC9iPjwvYT4KK2RvY3VtZW50YXRpb24uIFNlZSBhbHNvIHRoZSA8Yj5qaXRzdGFjazwvYj4gbW9kaWZpZXIgYmVsb3cgZm9yIGEgd2F5IG9mCitzZXR0aW5nIHRoZSBzaXplIG9mIHRoZSBKSVQgc3RhY2suCis8L1A+Cis8UD4KK0lmIHRoZSA8Yj5qaXRmYXN0PC9iPiBtb2RpZmllciBpcyBzcGVjaWZpZWQsIG1hdGNoaW5nIGlzIGRvbmUgdXNpbmcgdGhlIEpJVAorImZhc3QgcGF0aCIgaW50ZXJmYWNlLCA8Yj5wY3JlMl9qaXRfbWF0Y2goKTwvYj4sIHdoaWNoIHNraXBzIHNvbWUgb2YgdGhlIHNhbml0eQorY2hlY2tzIHRoYXQgYXJlIGRvbmUgYnkgPGI+cGNyZTJfbWF0Y2goKTwvYj4sIGFuZCBvZiBjb3Vyc2UgZG9lcyBub3Qgd29yayB3aGVuCitKSVQgaXMgbm90IHN1cHBvcnRlZC4gSWYgPGI+aml0ZmFzdDwvYj4gaXMgc3BlY2lmaWVkIHdpdGhvdXQgPGI+aml0PC9iPiwgaml0PTcgaXMKK2Fzc3VtZWQuCis8L1A+Cis8UD4KK0lmIHRoZSA8Yj5qaXR2ZXJpZnk8L2I+IG1vZGlmaWVyIGlzIHNwZWNpZmllZCwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVkCitwYXR0ZXJuIHNob3dzIHdoZXRoZXIgSklUIGNvbXBpbGF0aW9uIHdhcyBvciB3YXMgbm90IHN1Y2Nlc3NmdWwuIElmCis8Yj5qaXR2ZXJpZnk8L2I+IGlzIHNwZWNpZmllZCB3aXRob3V0IDxiPmppdDwvYj4sIGppdD03IGlzIGFzc3VtZWQuIElmIEpJVAorY29tcGlsYXRpb24gaXMgc3VjY2Vzc2Z1bCB3aGVuIDxiPmppdHZlcmlmeTwvYj4gaXMgc2V0LCB0aGUgdGV4dCAiKEpJVCkiIGlzCithZGRlZCB0byB0aGUgZmlyc3Qgb3V0cHV0IGxpbmUgYWZ0ZXIgYSBtYXRjaCBvciBub24gbWF0Y2ggd2hlbiBKSVQtY29tcGlsZWQKK2NvZGUgd2FzIGFjdHVhbGx5IHVzZWQgaW4gdGhlIG1hdGNoLgorPC9QPgorPGJyPjxiPgorU2V0dGluZyBhIGxvY2FsZQorPC9iPjxicj4KKzxQPgorVGhlIDxiPi9sb2NhbGU8L2I+IG1vZGlmaWVyIG11c3Qgc3BlY2lmeSB0aGUgbmFtZSBvZiBhIGxvY2FsZSwgZm9yIGV4YW1wbGU6Cis8cHJlPgorICAvcGF0dGVybi9sb2NhbGU9ZnJfRlIKKzwvcHJlPgorVGhlIGdpdmVuIGxvY2FsZSBpcyBzZXQsIDxiPnBjcmUyX21ha2V0YWJsZXMoKTwvYj4gaXMgY2FsbGVkIHRvIGJ1aWxkIGEgc2V0IG9mCitjaGFyYWN0ZXIgdGFibGVzIGZvciB0aGUgbG9jYWxlLCBhbmQgdGhpcyBpcyB0aGVuIHBhc3NlZCB0bworPGI+cGNyZTJfY29tcGlsZSgpPC9iPiB3aGVuIGNvbXBpbGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uLiBUaGUgc2FtZSB0YWJsZXMKK2FyZSB1c2VkIHdoZW4gbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBzdWJqZWN0IGxpbmVzLiBUaGUgPGI+L2xvY2FsZTwvYj4gbW9kaWZpZXIKK2FwcGxpZXMgb25seSB0byB0aGUgcGF0dGVybiBvbiB3aGljaCBpdCBhcHBlYXJzLCBidXQgY2FuIGJlIGdpdmVuIGluIGEKKzxiPiNwYXR0ZXJuPC9iPiBjb21tYW5kIGlmIGEgZGVmYXVsdCBpcyBuZWVkZWQuIFNldHRpbmcgYSBsb2NhbGUgYW5kIGFsdGVybmF0ZQorY2hhcmFjdGVyIHRhYmxlcyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgorPC9QPgorPGJyPjxiPgorU2hvd2luZyBwYXR0ZXJuIG1lbW9yeQorPC9iPjxicj4KKzxQPgorVGhlIDxiPi9tZW1vcnk8L2I+IG1vZGlmaWVyIGNhdXNlcyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgbWVtb3J5IHVzZWQgdG8gaG9sZAordGhlIGNvbXBpbGVkIHBhdHRlcm4gdG8gYmUgb3V0cHV0LiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIHNpemUgb2YgdGhlCis8Yj5wY3JlMl9jb2RlPC9iPiBibG9jazsgaXQgaXMganVzdCB0aGUgYWN0dWFsIGNvbXBpbGVkIGRhdGEuIElmIHRoZSBwYXR0ZXJuIGlzCitzdWJzZXF1ZW50bHkgcGFzc2VkIHRvIHRoZSBKSVQgY29tcGlsZXIsIHRoZSBzaXplIG9mIHRoZSBKSVQgY29tcGlsZWQgY29kZSBpcworYWxzbyBvdXRwdXQuIEhlcmUgaXMgYW4gZXhhbXBsZToKKzxwcmU+CisgICAgcmUmIzYyOyAvYShiKWMvaml0LG1lbW9yeQorICBNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDIxCisgIE1lbW9yeSBhbGxvY2F0aW9uIChKSVQgY29kZSk6IDE5MTAKKworPC9QUkU+Cis8L1A+Cis8YnI+PGI+CitMaW1pdGluZyBuZXN0ZWQgcGFyZW50aGVzZXMKKzwvYj48YnI+Cis8UD4KK1RoZSA8Yj5wYXJlbnNfbmVzdF9saW1pdDwvYj4gbW9kaWZpZXIgc2V0cyBhIGxpbWl0IG9uIHRoZSBkZXB0aCBvZiBuZXN0ZWQKK3BhcmVudGhlc2VzIGluIGEgcGF0dGVybi4gQnJlYWNoaW5nIHRoZSBsaW1pdCBjYXVzZXMgYSBjb21waWxhdGlvbiBlcnJvci4KK1RoZSBkZWZhdWx0IGZvciB0aGUgbGlicmFyeSBpcyBzZXQgd2hlbiBQQ1JFMiBpcyBidWlsdCwgYnV0IDxiPnBjcmUydGVzdDwvYj4KK3NldHMgaXRzIG93biBkZWZhdWx0IG9mIDIyMCwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIHJ1bm5pbmcgdGhlIHN0YW5kYXJkIHRlc3QKK3N1aXRlLgorPC9QPgorPGJyPjxiPgorTGltaXRpbmcgdGhlIHBhdHRlcm4gbGVuZ3RoCis8L2I+PGJyPgorPFA+CitUaGUgPGI+bWF4X3BhdHRlcm5fbGVuZ3RoPC9iPiBtb2RpZmllciBzZXRzIGEgbGltaXQsIGluIGNvZGUgdW5pdHMsIHRvIHRoZQorbGVuZ3RoIG9mIHBhdHRlcm4gdGhhdCA8Yj5wY3JlMl9jb21waWxlKCk8L2I+IHdpbGwgYWNjZXB0LiBCcmVhY2hpbmcgdGhlIGxpbWl0CitjYXVzZXMgYSBjb21waWxhdGlvbiBlcnJvci4gVGhlIGRlZmF1bHQgaXMgdGhlIGxhcmdlc3QgbnVtYmVyIGEgUENSRTJfU0laRQordmFyaWFibGUgY2FuIGhvbGQgKGVzc2VudGlhbGx5IHVubGltaXRlZCkuCis8L1A+Cis8YnI+PGI+CitVc2luZyB0aGUgUE9TSVggd3JhcHBlciBBUEkKKzwvYj48YnI+Cis8UD4KK1RoZSA8Yj4vcG9zaXg8L2I+IG1vZGlmaWVyIGNhdXNlcyA8Yj5wY3JlMnRlc3Q8L2I+IHRvIGNhbGwgUENSRTIgdmlhIHRoZSBQT1NJWAord3JhcHBlciBBUEkgcmF0aGVyIHRoYW4gaXRzIG5hdGl2ZSBBUEkuIFRoaXMgc3VwcG9ydHMgb25seSB0aGUgOC1iaXQgbGlicmFyeS4KK05vdGUgdGhhdCBpdCBkb2VzIG5vdCBpbXBseSBQT1NJWCBtYXRjaGluZyBzZW1hbnRpY3M7IGZvciBtb3JlIGRldGFpbCBzZWUgdGhlCis8YSBocmVmPSJwY3JlMnBvc2l4Lmh0bWwiPjxiPnBjcmUycG9zaXg8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4gV2hlbiB0aGUgUE9TSVggQVBJIGlzIGJlaW5nIHVzZWQsIHRoZSBmb2xsb3dpbmcgcGF0dGVybgorbW9kaWZpZXJzIHNldCBvcHRpb25zIGZvciB0aGUgPGI+cmVnY29tcCgpPC9iPiBmdW5jdGlvbjoKKzxwcmU+CisgIGNhc2VsZXNzICAgICAgICAgICBSRUdfSUNBU0UKKyAgbXVsdGlsaW5lICAgICAgICAgIFJFR19ORVdMSU5FCisgIG5vX2F1dG9fY2FwdHVyZSAgICBSRUdfTk9TVUIKKyAgZG90YWxsICAgICAgICAgICAgIFJFR19ET1RBTEwgICAgICkKKyAgdW5ncmVlZHkgICAgICAgICAgIFJFR19VTkdSRUVEWSAgICkgVGhlc2Ugb3B0aW9ucyBhcmUgbm90IHBhcnQgb2YKKyAgdWNwICAgICAgICAgICAgICAgIFJFR19VQ1AgICAgICAgICkgICB0aGUgUE9TSVggc3RhbmRhcmQKKyAgdXRmICAgICAgICAgICAgICAgIFJFR19VVEY4ICAgICAgICkKKzwvcHJlPgorVGhlIDxiPnJlZ2Vycm9yX2J1ZmZzaXplPC9iPiBtb2RpZmllciBzcGVjaWZpZXMgYSBzaXplIGZvciB0aGUgZXJyb3IgYnVmZmVyIHRoYXQKK2lzIHBhc3NlZCB0byA8Yj5yZWdlcnJvcigpPC9iPiBpbiB0aGUgZXZlbnQgb2YgYSBjb21waWxhdGlvbiBlcnJvci4gRm9yIGV4YW1wbGU6Cis8cHJlPgorICAvYWJjL3Bvc2l4LHJlZ2Vycm9yX2J1ZmZzaXplPTIwCis8L3ByZT4KK1RoaXMgcHJvdmlkZXMgYSBtZWFucyBvZiB0ZXN0aW5nIHRoZSBiZWhhdmlvdXIgb2YgPGI+cmVnZXJyb3IoKTwvYj4gd2hlbiB0aGUKK2J1ZmZlciBpcyB0b28gc21hbGwgZm9yIHRoZSBlcnJvciBtZXNzYWdlLiBJZiB0aGlzIG1vZGlmaWVyIGhhcyBub3QgYmVlbiBzZXQsIGEKK2xhcmdlIGJ1ZmZlciBpcyB1c2VkLgorPC9QPgorPFA+CitUaGUgPGI+YWZ0ZXJ0ZXh0PC9iPiBhbmQgPGI+YWxsYWZ0ZXJ0ZXh0PC9iPiBzdWJqZWN0IG1vZGlmaWVycyB3b3JrIGFzIGRlc2NyaWJlZAorYmVsb3cuIEFsbCBvdGhlciBtb2RpZmllcnMgY2F1c2UgYW4gZXJyb3IuCis8L1A+Cis8YnI+PGI+CitUZXN0aW5nIHRoZSBzdGFjayBndWFyZCBmZWF0dXJlCis8L2I+PGJyPgorPFA+CitUaGUgPGI+L3N0YWNrZ3VhcmQ8L2I+IG1vZGlmaWVyIGlzIHVzZWQgdG8gdGVzdCB0aGUgdXNlIG9mCis8Yj5wY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQoKTwvYj4sIGEgZnVuY3Rpb24gdGhhdCBpcyBwcm92aWRlZCB0bworZW5hYmxlIHN0YWNrIGF2YWlsYWJpbGl0eSB0byBiZSBjaGVja2VkIGR1cmluZyBjb21waWxhdGlvbiAoc2VlIHRoZQorPGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+PGI+cGNyZTJhcGk8L2I+PC9hPgorZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscykuIElmIHRoZSBudW1iZXIgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllciBpcyBncmVhdGVyCit0aGFuIHplcm8sIDxiPnBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZCgpPC9iPiBpcyBjYWxsZWQgdG8gc2V0IHVwCitjYWxsYmFjayBmcm9tIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4gdG8gYSBsb2NhbCBmdW5jdGlvbi4gVGhlIGFyZ3VtZW50IGl0CityZWNlaXZlcyBpcyB0aGUgY3VycmVudCBuZXN0aW5nIHBhcmVudGhlc2lzIGRlcHRoOyBpZiB0aGlzIGlzIGdyZWF0ZXIgdGhhbiB0aGUKK3ZhbHVlIGdpdmVuIGJ5IHRoZSBtb2RpZmllciwgbm9uLXplcm8gaXMgcmV0dXJuZWQsIGNhdXNpbmcgdGhlIGNvbXBpbGF0aW9uIHRvCitiZSBhYm9ydGVkLgorPC9QPgorPGJyPjxiPgorVXNpbmcgYWx0ZXJuYXRpdmUgY2hhcmFjdGVyIHRhYmxlcworPC9iPjxicj4KKzxQPgorVGhlIHZhbHVlIHNwZWNpZmllZCBmb3IgdGhlIDxiPi90YWJsZXM8L2I+IG1vZGlmaWVyIG11c3QgYmUgb25lIG9mIHRoZSBkaWdpdHMgMCwKKzEsIG9yIDIuIEl0IGNhdXNlcyBhIHNwZWNpZmljIHNldCBvZiBidWlsdC1pbiBjaGFyYWN0ZXIgdGFibGVzIHRvIGJlIHBhc3NlZCB0bworPGI+cGNyZTJfY29tcGlsZSgpPC9iPi4gVGhpcyBpcyB1c2VkIGluIHRoZSBQQ1JFMiB0ZXN0cyB0byBjaGVjayBiZWhhdmlvdXIgd2l0aAorZGlmZmVyZW50IGNoYXJhY3RlciB0YWJsZXMuIFRoZSBkaWdpdCBzcGVjaWZpZXMgdGhlIHRhYmxlcyBhcyBmb2xsb3dzOgorPHByZT4KKyAgMCAgIGRvIG5vdCBwYXNzIGFueSBzcGVjaWFsIGNoYXJhY3RlciB0YWJsZXMKKyAgMSAgIHRoZSBkZWZhdWx0IEFTQ0lJIHRhYmxlcywgYXMgZGlzdHJpYnV0ZWQgaW4KKyAgICAgICAgcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QKKyAgMiAgIGEgc2V0IG9mIHRhYmxlcyBkZWZpbmluZyBJU08gODg1OSBjaGFyYWN0ZXJzCis8L3ByZT4KK0luIHRhYmxlIDIsIHNvbWUgY2hhcmFjdGVycyB3aG9zZSBjb2RlcyBhcmUgZ3JlYXRlciB0aGFuIDEyOCBhcmUgaWRlbnRpZmllZCBhcworbGV0dGVycywgZGlnaXRzLCBzcGFjZXMsIGV0Yy4gU2V0dGluZyBhbHRlcm5hdGUgY2hhcmFjdGVyIHRhYmxlcyBhbmQgYSBsb2NhbGUKK2FyZSBtdXR1YWxseSBleGNsdXNpdmUuCis8L1A+Cis8YnI+PGI+CitTZXR0aW5nIGNlcnRhaW4gbWF0Y2ggY29udHJvbHMKKzwvYj48YnI+Cis8UD4KK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIGFyZSByZWFsbHkgc3ViamVjdCBtb2RpZmllcnMsIGFuZCBhcmUgZGVzY3JpYmVkIGJlbG93LgorSG93ZXZlciwgdGhleSBtYXkgYmUgaW5jbHVkZWQgaW4gYSBwYXR0ZXJuJ3MgbW9kaWZpZXIgbGlzdCwgaW4gd2hpY2ggY2FzZSB0aGV5CithcmUgYXBwbGllZCB0byBldmVyeSBzdWJqZWN0IGxpbmUgdGhhdCBpcyBwcm9jZXNzZWQgd2l0aCB0aGF0IHBhdHRlcm4uIFRoZXkgbWF5Citub3QgYXBwZWFyIGluIDxiPiNwYXR0ZXJuPC9iPiBjb21tYW5kcy4gVGhlc2UgbW9kaWZpZXJzIGRvIG5vdCBhZmZlY3QgdGhlCitjb21waWxhdGlvbiBwcm9jZXNzLgorPHByZT4KKyAgICAgIGFmdGVydGV4dCAgICAgICAgICAgICAgICAgIHNob3cgdGV4dCBhZnRlciBtYXRjaAorICAgICAgYWxsYWZ0ZXJ0ZXh0ICAgICAgICAgICAgICAgc2hvdyB0ZXh0IGFmdGVyIGNhcHR1cmVzCisgICAgICBhbGxjYXB0dXJlcyAgICAgICAgICAgICAgICBzaG93IGFsbCBjYXB0dXJlcworICAgICAgYWxsdXNlZHRleHQgICAgICAgICAgICAgICAgc2hvdyBhbGwgY29uc3VsdGVkIHRleHQKKyAgL2cgIGdsb2JhbCAgICAgICAgICAgICAgICAgICAgIGdsb2JhbCBtYXRjaGluZworICAgICAgbWFyayAgICAgICAgICAgICAgICAgICAgICAgc2hvdyBtYXJrIHZhbHVlcworICAgICAgcmVwbGFjZT0mIzYwO3N0cmluZyYjNjI7ICAgICAgICAgICBzcGVjaWZ5IGEgcmVwbGFjZW1lbnQgc3RyaW5nCisgICAgICBzdGFydGNoYXIgICAgICAgICAgICAgICAgICBzaG93IHN0YXJ0aW5nIGNoYXJhY3RlciB3aGVuIHJlbGV2YW50CisgICAgICBzdWJzdGl0dXRlX2V4dGVuZGVkICAgICAgICB1c2UgUENSRTJfU1VCU1RJVFVURV9FWFRFTkRFRAorICAgICAgc3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGggdXNlIFBDUkUyX1NVQlNUSVRVVEVfT1ZFUkZMT1dfTEVOR1RICisgICAgICBzdWJzdGl0dXRlX3Vua25vd25fdW5zZXQgICB1c2UgUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUCisgICAgICBzdWJzdGl0dXRlX3Vuc2V0X2VtcHR5ICAgICB1c2UgUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWQorPC9wcmU+CitUaGVzZSBtb2RpZmllcnMgbWF5IG5vdCBhcHBlYXIgaW4gYSA8Yj4jcGF0dGVybjwvYj4gY29tbWFuZC4gSWYgeW91IHdhbnQgdGhlbSBhcworZGVmYXVsdHMsIHNldCB0aGVtIGluIGEgPGI+I3N1YmplY3Q8L2I+IGNvbW1hbmQuCis8L1A+Cis8YnI+PGI+CitTYXZpbmcgYSBjb21waWxlZCBwYXR0ZXJuCis8L2I+PGJyPgorPFA+CitXaGVuIGEgcGF0dGVybiB3aXRoIHRoZSA8Yj5wdXNoPC9iPiBtb2RpZmllciBpcyBzdWNjZXNzZnVsbHkgY29tcGlsZWQsIGl0IGlzCitwdXNoZWQgb250byBhIHN0YWNrIG9mIGNvbXBpbGVkIHBhdHRlcm5zLCBhbmQgPGI+cGNyZTJ0ZXN0PC9iPiBleHBlY3RzIHRoZSBuZXh0CitsaW5lIHRvIGNvbnRhaW4gYSBuZXcgcGF0dGVybiAob3IgYSBjb21tYW5kKSBpbnN0ZWFkIG9mIGEgc3ViamVjdCBsaW5lLiBUaGlzCitmYWNpbGl0eSBpcyB1c2VkIHdoZW4gc2F2aW5nIGNvbXBpbGVkIHBhdHRlcm5zIHRvIGEgZmlsZSwgYXMgZGVzY3JpYmVkIGluIHRoZQorc2VjdGlvbiBlbnRpdGxlZCAiU2F2aW5nIGFuZCByZXN0b3JpbmcgY29tcGlsZWQgcGF0dGVybnMiCis8YSBocmVmPSIjc2F2ZXJlc3RvcmUiPmJlbG93LjwvYT4KK1RoZSA8Yj5wdXNoPC9iPiBtb2RpZmllciBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb21waWxhdGlvbiBtb2RpZmllcnMgc3VjaCBhcworPGI+Z2xvYmFsPC9iPiB0aGF0IGFjdCBhdCBtYXRjaCB0aW1lLiBBbnkgdGhhdCBhcmUgc3BlY2lmaWVkIGFyZSBpZ25vcmVkLCB3aXRoIGEKK3dhcm5pbmcgbWVzc2FnZSwgZXhjZXB0IGZvciA8Yj5yZXBsYWNlPC9iPiwgd2hpY2ggY2F1c2VzIGFuIGVycm9yLiBOb3RlIHRoYXQsCis8Yj5qaXR2ZXJpZnk8L2I+LCB3aGljaCBpcyBhbGxvd2VkLCBkb2VzIG5vdCBjYXJyeSB0aHJvdWdoIHRvIGFueSBzdWJzZXF1ZW50CittYXRjaGluZyB0aGF0IHVzZXMgdGhpcyBwYXR0ZXJuLgorPGEgbmFtZT0ic3ViamVjdG1vZGlmaWVycyI+PC9hPjwvUD4KKzxicj48YSBuYW1lPSJTRUMxMSIgaHJlZj0iI1RPQzEiPlNVQkpFQ1QgTU9ESUZJRVJTPC9hPjxicj4KKzxQPgorVGhlIG1vZGlmaWVycyB0aGF0IGNhbiBhcHBlYXIgaW4gc3ViamVjdCBsaW5lcyBhbmQgdGhlIDxiPiNzdWJqZWN0PC9iPgorY29tbWFuZCBhcmUgb2YgdHdvIHR5cGVzLgorPC9QPgorPGJyPjxiPgorU2V0dGluZyBtYXRjaCBvcHRpb25zCis8L2I+PGJyPgorPFA+CitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBzZXQgb3B0aW9ucyBmb3IgPGI+cGNyZTJfbWF0Y2goKTwvYj4gb3IKKzxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPi4gU2VlCis8YSBocmVmPSJwY3JlYXBpLmh0bWwiPjxiPnBjcmVhcGk8L2I+PC9hPgorZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlaXIgZWZmZWN0cy4KKzxwcmU+CisgICAgICBhbmNob3JlZCAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9BTkNIT1JFRAorICAgICAgZGZhX3Jlc3RhcnQgICAgICAgICAgICAgICBzZXQgUENSRTJfREZBX1JFU1RBUlQKKyAgICAgIGRmYV9zaG9ydGVzdCAgICAgICAgICAgICAgc2V0IFBDUkUyX0RGQV9TSE9SVEVTVAorICAgICAgbm9fdXRmX2NoZWNrICAgICAgICAgICAgICBzZXQgUENSRTJfTk9fVVRGX0NIRUNLCisgICAgICBub3Rib2wgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT1RCT0wKKyAgICAgIG5vdGVtcHR5ICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX05PVEVNUFRZCisgICAgICBub3RlbXB0eV9hdHN0YXJ0ICAgICAgICAgIHNldCBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUCisgICAgICBub3Rlb2wgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT1RFT0wKKyAgICAgIHBhcnRpYWxfaGFyZCAob3IgcGgpICAgICAgc2V0IFBDUkUyX1BBUlRJQUxfSEFSRAorICAgICAgcGFydGlhbF9zb2Z0IChvciBwcykgICAgICBzZXQgUENSRTJfUEFSVElBTF9TT0ZUCis8L3ByZT4KK1RoZSBwYXJ0aWFsIG1hdGNoaW5nIG1vZGlmaWVycyBhcmUgcHJvdmlkZWQgd2l0aCBhYmJyZXZpYXRpb25zIGJlY2F1c2UgdGhleQorYXBwZWFyIGZyZXF1ZW50bHkgaW4gdGVzdHMuCis8L1A+Cis8UD4KK0lmIHRoZSA8Yj4vcG9zaXg8L2I+IG1vZGlmaWVyIHdhcyBwcmVzZW50IG9uIHRoZSBwYXR0ZXJuLCBjYXVzaW5nIHRoZSBQT1NJWAord3JhcHBlciBBUEkgdG8gYmUgdXNlZCwgdGhlIG9ubHkgb3B0aW9uLXNldHRpbmcgbW9kaWZpZXJzIHRoYXQgaGF2ZSBhbnkgZWZmZWN0CithcmUgPGI+bm90Ym9sPC9iPiwgPGI+bm90ZW1wdHk8L2I+LCBhbmQgPGI+bm90ZW9sPC9iPiwgY2F1c2luZyBSRUdfTk9UQk9MLAorUkVHX05PVEVNUFRZLCBhbmQgUkVHX05PVEVPTCwgcmVzcGVjdGl2ZWx5LCB0byBiZSBwYXNzZWQgdG8gPGI+cmVnZXhlYygpPC9iPi4KK0FueSBvdGhlciBtb2RpZmllcnMgY2F1c2UgYW4gZXJyb3IuCis8L1A+Cis8YnI+PGI+CitTZXR0aW5nIG1hdGNoIGNvbnRyb2xzCis8L2I+PGJyPgorPFA+CitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBhZmZlY3QgdGhlIG1hdGNoaW5nIHByb2Nlc3Mgb3IgcmVxdWVzdCBhZGRpdGlvbmFsCitpbmZvcm1hdGlvbi4gU29tZSBvZiB0aGVtIG1heSBhbHNvIGJlIHNwZWNpZmllZCBvbiBhIHBhdHRlcm4gbGluZSAoc2VlIGFib3ZlKSwKK2luIHdoaWNoIGNhc2UgdGhleSBhcHBseSB0byBldmVyeSBzdWJqZWN0IGxpbmUgdGhhdCBpcyBtYXRjaGVkIGFnYWluc3QgdGhhdAorcGF0dGVybi4KKzxwcmU+CisgICAgICBhZnRlcnRleHQgICAgICAgICAgICAgICAgICBzaG93IHRleHQgYWZ0ZXIgbWF0Y2gKKyAgICAgIGFsbGFmdGVydGV4dCAgICAgICAgICAgICAgIHNob3cgdGV4dCBhZnRlciBjYXB0dXJlcworICAgICAgYWxsY2FwdHVyZXMgICAgICAgICAgICAgICAgc2hvdyBhbGwgY2FwdHVyZXMKKyAgICAgIGFsbHVzZWR0ZXh0ICAgICAgICAgICAgICAgIHNob3cgYWxsIGNvbnN1bHRlZCB0ZXh0IChub24tSklUIG9ubHkpCisgICAgICBhbHRnbG9iYWwgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZSBnbG9iYWwgbWF0Y2hpbmcKKyAgICAgIGNhbGxvdXRfY2FwdHVyZSAgICAgICAgICAgIHNob3cgY2FwdHVyZXMgYXQgY2FsbG91dCB0aW1lCisgICAgICBjYWxsb3V0X2RhdGE9JiM2MDtuJiM2MjsgICAgICAgICAgIHNldCBhIHZhbHVlIHRvIHBhc3MgdmlhIGNhbGxvdXRzCisgICAgICBjYWxsb3V0X2ZhaWw9JiM2MDtuJiM2MjtbOiYjNjA7bSYjNjI7XSAgICAgY29udHJvbCBjYWxsb3V0IGZhaWx1cmUKKyAgICAgIGNhbGxvdXRfbm9uZSAgICAgICAgICAgICAgIGRvIG5vdCBzdXBwbHkgYSBjYWxsb3V0IGZ1bmN0aW9uCisgICAgICBjb3B5PSYjNjA7bnVtYmVyIG9yIG5hbWUmIzYyOyAgICAgIGNvcHkgY2FwdHVyZWQgc3Vic3RyaW5nCisgICAgICBkZmEgICAgICAgICAgICAgICAgICAgICAgICB1c2UgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+CisgICAgICBmaW5kX2xpbWl0cyAgICAgICAgICAgICAgICBmaW5kIG1hdGNoIGFuZCByZWN1cnNpb24gbGltaXRzCisgICAgICBnZXQ9JiM2MDtudW1iZXIgb3IgbmFtZSYjNjI7ICAgICAgIGV4dHJhY3QgY2FwdHVyZWQgc3Vic3RyaW5nCisgICAgICBnZXRhbGwgICAgICAgICAgICAgICAgICAgICBleHRyYWN0IGFsbCBjYXB0dXJlZCBzdWJzdHJpbmdzCisgIC9nICBnbG9iYWwgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgbWF0Y2hpbmcKKyAgICAgIGppdHN0YWNrPSYjNjA7biYjNjI7ICAgICAgICAgICAgICAgc2V0IHNpemUgb2YgSklUIHN0YWNrCisgICAgICBtYXJrICAgICAgICAgICAgICAgICAgICAgICBzaG93IG1hcmsgdmFsdWVzCisgICAgICBtYXRjaF9saW1pdD0mIzYwO24mIzYyOyAgICAgICAgICAgIHNldCBhIG1hdGNoIGxpbWl0CisgICAgICBtZW1vcnkgICAgICAgICAgICAgICAgICAgICBzaG93IG1lbW9yeSB1c2FnZQorICAgICAgbnVsbF9jb250ZXh0ICAgICAgICAgICAgICAgbWF0Y2ggd2l0aCBhIE5VTEwgY29udGV4dAorICAgICAgb2Zmc2V0PSYjNjA7biYjNjI7ICAgICAgICAgICAgICAgICBzZXQgc3RhcnRpbmcgb2Zmc2V0CisgICAgICBvZmZzZXRfbGltaXQ9JiM2MDtuJiM2MjsgICAgICAgICAgIHNldCBvZmZzZXQgbGltaXQKKyAgICAgIG92ZWN0b3I9JiM2MDtuJiM2MjsgICAgICAgICAgICAgICAgc2V0IHNpemUgb2Ygb3V0cHV0IHZlY3RvcgorICAgICAgcmVjdXJzaW9uX2xpbWl0PSYjNjA7biYjNjI7ICAgICAgICBzZXQgYSByZWN1cnNpb24gbGltaXQKKyAgICAgIHJlcGxhY2U9JiM2MDtzdHJpbmcmIzYyOyAgICAgICAgICAgc3BlY2lmeSBhIHJlcGxhY2VtZW50IHN0cmluZworICAgICAgc3RhcnRjaGFyICAgICAgICAgICAgICAgICAgc2hvdyBzdGFydGNoYXIgd2hlbiByZWxldmFudAorICAgICAgc3RhcnRvZmZzZXQ9JiM2MDtuJiM2MjsgICAgICAgICAgICBzYW1lIGFzIG9mZnNldD0mIzYwO24mIzYyOworICAgICAgc3Vic3RpdHV0ZV9leHRlZGRlZCAgICAgICAgdXNlIFBDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUQKKyAgICAgIHN1YnN0aXR1dGVfb3ZlcmZsb3dfbGVuZ3RoIHVzZSBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSAorICAgICAgc3Vic3RpdHV0ZV91bmtub3duX3Vuc2V0ICAgdXNlIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVAorICAgICAgc3Vic3RpdHV0ZV91bnNldF9lbXB0eSAgICAgdXNlIFBDUkUyX1NVQlNUSVRVVEVfVU5TRVRfRU1QVFkKKyAgICAgIHplcm9fdGVybWluYXRlICAgICAgICAgICAgIHBhc3MgdGhlIHN1YmplY3QgYXMgemVyby10ZXJtaW5hdGVkCis8L3ByZT4KK1RoZSBlZmZlY3RzIG9mIHRoZXNlIG1vZGlmaWVycyBhcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMuCis8L1A+Cis8YnI+PGI+CitTaG93aW5nIG1vcmUgdGV4dAorPC9iPjxicj4KKzxQPgorVGhlIDxiPmFmdGVydGV4dDwvYj4gbW9kaWZpZXIgcmVxdWVzdHMgdGhhdCBhcyB3ZWxsIGFzIG91dHB1dHRpbmcgdGhlIHBhcnQgb2YKK3RoZSBzdWJqZWN0IHN0cmluZyB0aGF0IG1hdGNoZWQgdGhlIGVudGlyZSBwYXR0ZXJuLCA8Yj5wY3JlMnRlc3Q8L2I+IHNob3VsZCBpbgorYWRkaXRpb24gb3V0cHV0IHRoZSByZW1haW5kZXIgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLiBUaGlzIGlzIHVzZWZ1bCBmb3IgdGVzdHMKK3doZXJlIHRoZSBzdWJqZWN0IGNvbnRhaW5zIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2FtZSBzdWJzdHJpbmcuIFRoZQorPGI+YWxsYWZ0ZXJ0ZXh0PC9iPiBtb2RpZmllciByZXF1ZXN0cyB0aGUgc2FtZSBhY3Rpb24gZm9yIGNhcHR1cmVkIHN1YnN0cmluZ3MgYXMKK3dlbGwgYXMgdGhlIG1haW4gbWF0Y2hlZCBzdWJzdHJpbmcuIEluIGVhY2ggY2FzZSB0aGUgcmVtYWluZGVyIGlzIG91dHB1dCBvbiB0aGUKK2ZvbGxvd2luZyBsaW5lIHdpdGggYSBwbHVzIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGNhcHR1cmUgbnVtYmVyLgorPC9QPgorPFA+CitUaGUgPGI+YWxsdXNlZHRleHQ8L2I+IG1vZGlmaWVyIHJlcXVlc3RzIHRoYXQgYWxsIHRoZSB0ZXh0IHRoYXQgd2FzIGNvbnN1bHRlZAorZHVyaW5nIGEgc3VjY2Vzc2Z1bCBwYXR0ZXJuIG1hdGNoIGJ5IHRoZSBpbnRlcnByZXRlciBzaG91bGQgYmUgc2hvd24uIFRoaXMKK2ZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBmb3IgSklUIG1hdGNoaW5nLCBhbmQgaWYgcmVxdWVzdGVkIHdpdGggSklUIGl0IGlzCitpZ25vcmVkICh3aXRoIGEgd2FybmluZyBtZXNzYWdlKS4gU2V0dGluZyB0aGlzIG1vZGlmaWVyIGFmZmVjdHMgdGhlIG91dHB1dCBpZgordGhlcmUgaXMgYSBsb29rYmVoaW5kIGF0IHRoZSBzdGFydCBvZiBhIG1hdGNoLCBvciBhIGxvb2thaGVhZCBhdCB0aGUgZW5kLCBvciBpZgorXEsgaXMgdXNlZCBpbiB0aGUgcGF0dGVybi4gQ2hhcmFjdGVycyB0aGF0IHByZWNlZGUgb3IgZm9sbG93IHRoZSBzdGFydCBhbmQgZW5kCitvZiB0aGUgYWN0dWFsIG1hdGNoIGFyZSBpbmRpY2F0ZWQgaW4gdGhlIG91dHB1dCBieSAnJiM2MDsnIG9yICcmIzYyOycgY2hhcmFjdGVycwordW5kZXJuZWF0aCB0aGVtLiBIZXJlIGlzIGFuIGV4YW1wbGU6Cis8cHJlPgorICAgIHJlJiM2MjsgLyg/JiM2MDs9cHFyKWFiYyg/PXh5eikvCisgIGRhdGEmIzYyOyAxMjNwcXJhYmN4eXo0NTZcPWFsbHVzZWR0ZXh0CisgICAwOiBwcXJhYmN4eXoKKyAgICAgICYjNjA7JiM2MDsmIzYwOyAgICYjNjI7JiM2MjsmIzYyOworPC9wcmU+CitUaGlzIHNob3dzIHRoYXQgdGhlIG1hdGNoZWQgc3RyaW5nIGlzICJhYmMiLCB3aXRoIHRoZSBwcmVjZWRpbmcgYW5kIGZvbGxvd2luZworc3RyaW5ncyAicHFyIiBhbmQgInh5eiIgaGF2aW5nIGJlZW4gY29uc3VsdGVkIGR1cmluZyB0aGUgbWF0Y2ggKHdoZW4gcHJvY2Vzc2luZwordGhlIGFzc2VydGlvbnMpLgorPC9QPgorPFA+CitUaGUgPGI+c3RhcnRjaGFyPC9iPiBtb2RpZmllciByZXF1ZXN0cyB0aGF0IHRoZSBzdGFydGluZyBjaGFyYWN0ZXIgZm9yIHRoZSBtYXRjaAorYmUgaW5kaWNhdGVkLCBpZiBpdCBpcyBkaWZmZXJlbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaGVkIHN0cmluZy4gVGhlIG9ubHkKK3RpbWUgd2hlbiB0aGlzIG9jY3VycyBpcyB3aGVuIFxLIGhhcyBiZWVuIHByb2Nlc3NlZCBhcyBwYXJ0IG9mIHRoZSBtYXRjaC4gSW4KK3RoaXMgc2l0dWF0aW9uLCB0aGUgb3V0cHV0IGZvciB0aGUgbWF0Y2hlZCBzdHJpbmcgaXMgZGlzcGxheWVkIGZyb20gdGhlCitzdGFydGluZyBjaGFyYWN0ZXIgaW5zdGVhZCBvZiBmcm9tIHRoZSBtYXRjaCBwb2ludCwgd2l0aCBjaXJjdW1mbGV4IGNoYXJhY3RlcnMKK3VuZGVyIHRoZSBlYXJsaWVyIGNoYXJhY3RlcnMuIEZvciBleGFtcGxlOgorPHByZT4KKyAgICByZSYjNjI7IC9hYmNcS3h5ei8KKyAgZGF0YSYjNjI7IGFiY3h5elw9c3RhcnRjaGFyCisgICAwOiBhYmN4eXoKKyAgICAgIF5eXgorPC9wcmU+CitVbmxpa2UgPGI+YWxsdXNlZHRleHQ8L2I+LCB0aGUgPGI+c3RhcnRjaGFyPC9iPiBtb2RpZmllciBjYW4gYmUgdXNlZCB3aXRoIEpJVC4KK0hvd2V2ZXIsIHRoZXNlIHR3byBtb2RpZmllcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKzwvUD4KKzxicj48Yj4KK1Nob3dpbmcgdGhlIHZhbHVlIG9mIGFsbCBjYXB0dXJlIGdyb3VwcworPC9iPjxicj4KKzxQPgorVGhlIDxiPmFsbGNhcHR1cmVzPC9iPiBtb2RpZmllciByZXF1ZXN0cyB0aGF0IHRoZSB2YWx1ZXMgb2YgYWxsIHBvdGVudGlhbAorY2FwdHVyZWQgcGFyZW50aGVzZXMgYmUgb3V0cHV0IGFmdGVyIGEgbWF0Y2guIEJ5IGRlZmF1bHQsIG9ubHkgdGhvc2UgdXAgdG8gdGhlCitoaWdoZXN0IG9uZSBhY3R1YWxseSB1c2VkIGluIHRoZSBtYXRjaCBhcmUgb3V0cHV0IChjb3JyZXNwb25kaW5nIHRvIHRoZSByZXR1cm4KK2NvZGUgZnJvbSA8Yj5wY3JlMl9tYXRjaCgpPC9iPikuIEdyb3VwcyB0aGF0IGRpZCBub3QgdGFrZSBwYXJ0IGluIHRoZSBtYXRjaAorYXJlIG91dHB1dCBhcyAiJiM2MDt1bnNldCYjNjI7Ii4KKzwvUD4KKzxicj48Yj4KK1Rlc3RpbmcgY2FsbG91dHMKKzwvYj48YnI+Cis8UD4KK0EgY2FsbG91dCBmdW5jdGlvbiBpcyBzdXBwbGllZCB3aGVuIDxiPnBjcmUydGVzdDwvYj4gY2FsbHMgdGhlIGxpYnJhcnkgbWF0Y2hpbmcKK2Z1bmN0aW9ucywgdW5sZXNzIDxiPmNhbGxvdXRfbm9uZTwvYj4gaXMgc3BlY2lmaWVkLiBJZiA8Yj5jYWxsb3V0X2NhcHR1cmU8L2I+IGlzCitzZXQsIHRoZSBjdXJyZW50IGNhcHR1cmVkIGdyb3VwcyBhcmUgb3V0cHV0IHdoZW4gYSBjYWxsb3V0IG9jY3Vycy4KKzwvUD4KKzxQPgorVGhlIDxiPmNhbGxvdXRfZmFpbDwvYj4gbW9kaWZpZXIgY2FuIGJlIGdpdmVuIG9uZSBvciB0d28gbnVtYmVycy4gSWYgdGhlcmUgaXMKK29ubHkgb25lIG51bWJlciwgMSBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIDAgd2hlbiBhIGNhbGxvdXQgb2YgdGhhdCBudW1iZXIgaXMKK3JlYWNoZWQuIElmIHR3byBudW1iZXJzIGFyZSBnaXZlbiwgMSBpcyByZXR1cm5lZCB3aGVuIGNhbGxvdXQgJiM2MDtuJiM2MjsgaXMgcmVhY2hlZAorZm9yIHRoZSAmIzYwO20mIzYyO3RoIHRpbWUuIE5vdGUgdGhhdCBjYWxsb3V0cyB3aXRoIHN0cmluZyBhcmd1bWVudHMgYXJlIGFsd2F5cyBnaXZlbgordGhlIG51bWJlciB6ZXJvLiBTZWUgIkNhbGxvdXRzIiBiZWxvdyBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3V0cHV0IHdoZW4gYQorY2FsbG91dCBpdCB0YWtlbi4KKzwvUD4KKzxQPgorVGhlIDxiPmNhbGxvdXRfZGF0YTwvYj4gbW9kaWZpZXIgY2FuIGJlIGdpdmVuIGFuIHVuc2lnbmVkIG9yIGEgbmVnYXRpdmUgbnVtYmVyLgorVGhpcyBpcyBzZXQgYXMgdGhlICJ1c2VyIGRhdGEiIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSBtYXRjaGluZyBmdW5jdGlvbiwgYW5kCitwYXNzZWQgYmFjayB3aGVuIHRoZSBjYWxsb3V0IGZ1bmN0aW9uIGlzIGludm9rZWQuIEFueSB2YWx1ZSBvdGhlciB0aGFuIHplcm8gaXMKK3VzZWQgYXMgYSByZXR1cm4gZnJvbSA8Yj5wY3JlMnRlc3Q8L2I+J3MgY2FsbG91dCBmdW5jdGlvbi4KKzwvUD4KKzxicj48Yj4KK0ZpbmRpbmcgYWxsIG1hdGNoZXMgaW4gYSBzdHJpbmcKKzwvYj48YnI+Cis8UD4KK1NlYXJjaGluZyBmb3IgYWxsIHBvc3NpYmxlIG1hdGNoZXMgd2l0aGluIGEgc3ViamVjdCBjYW4gYmUgcmVxdWVzdGVkIGJ5IHRoZQorPGI+Z2xvYmFsPC9iPiBvciA8Yj4vYWx0Z2xvYmFsPC9iPiBtb2RpZmllci4gQWZ0ZXIgZmluZGluZyBhIG1hdGNoLCB0aGUgbWF0Y2hpbmcKK2Z1bmN0aW9uIGlzIGNhbGxlZCBhZ2FpbiB0byBzZWFyY2ggdGhlIHJlbWFpbmRlciBvZiB0aGUgc3ViamVjdC4gVGhlIGRpZmZlcmVuY2UKK2JldHdlZW4gPGI+Z2xvYmFsPC9iPiBhbmQgPGI+YWx0Z2xvYmFsPC9iPiBpcyB0aGF0IHRoZSBmb3JtZXIgdXNlcyB0aGUKKzxpPnN0YXJ0X29mZnNldDwvaT4gYXJndW1lbnQgdG8gPGI+cGNyZTJfbWF0Y2goKTwvYj4gb3IgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+Cit0byBzdGFydCBzZWFyY2hpbmcgYXQgYSBuZXcgcG9pbnQgd2l0aGluIHRoZSBlbnRpcmUgc3RyaW5nICh3aGljaCBpcyB3aGF0IFBlcmwKK2RvZXMpLCB3aGVyZWFzIHRoZSBsYXR0ZXIgcGFzc2VzIG92ZXIgYSBzaG9ydGVuZWQgc3ViamVjdC4gVGhpcyBtYWtlcyBhCitkaWZmZXJlbmNlIHRvIHRoZSBtYXRjaGluZyBwcm9jZXNzIGlmIHRoZSBwYXR0ZXJuIGJlZ2lucyB3aXRoIGEgbG9va2JlaGluZAorYXNzZXJ0aW9uIChpbmNsdWRpbmcgXGIgb3IgXEIpLgorPC9QPgorPFA+CitJZiBhbiBlbXB0eSBzdHJpbmcgaXMgbWF0Y2hlZCwgdGhlIG5leHQgbWF0Y2ggaXMgZG9uZSB3aXRoIHRoZQorUENSRTJfTk9URU1QVFlfQVRTVEFSVCBhbmQgUENSRTJfQU5DSE9SRUQgZmxhZ3Mgc2V0LCBpbiBvcmRlciB0byBzZWFyY2ggZm9yCithbm90aGVyLCBub24tZW1wdHksIG1hdGNoIGF0IHRoZSBzYW1lIHBvaW50IGluIHRoZSBzdWJqZWN0LiBJZiB0aGlzIG1hdGNoCitmYWlscywgdGhlIHN0YXJ0IG9mZnNldCBpcyBhZHZhbmNlZCwgYW5kIHRoZSBub3JtYWwgbWF0Y2ggaXMgcmV0cmllZC4gVGhpcworaW1pdGF0ZXMgdGhlIHdheSBQZXJsIGhhbmRsZXMgc3VjaCBjYXNlcyB3aGVuIHVzaW5nIHRoZSA8Yj4vZzwvYj4gbW9kaWZpZXIgb3IKK3RoZSA8Yj5zcGxpdCgpPC9iPiBmdW5jdGlvbi4gTm9ybWFsbHksIHRoZSBzdGFydCBvZmZzZXQgaXMgYWR2YW5jZWQgYnkgb25lCitjaGFyYWN0ZXIsIGJ1dCBpZiB0aGUgbmV3bGluZSBjb252ZW50aW9uIHJlY29nbml6ZXMgQ1JMRiBhcyBhIG5ld2xpbmUsIGFuZCB0aGUKK2N1cnJlbnQgY2hhcmFjdGVyIGlzIENSIGZvbGxvd2VkIGJ5IExGLCBhbiBhZHZhbmNlIG9mIHR3byBjaGFyYWN0ZXJzIG9jY3Vycy4KKzwvUD4KKzxicj48Yj4KK1Rlc3Rpbmcgc3Vic3RyaW5nIGV4dHJhY3Rpb24gZnVuY3Rpb25zCis8L2I+PGJyPgorPFA+CitUaGUgPGI+Y29weTwvYj4gYW5kIDxiPmdldDwvYj4gbW9kaWZpZXJzIGNhbiBiZSB1c2VkIHRvIHRlc3QgdGhlCis8Yj5wY3JlMl9zdWJzdHJpbmdfY29weV94eHgoKTwvYj4gYW5kIDxiPnBjcmUyX3N1YnN0cmluZ19nZXRfeHh4KCk8L2I+IGZ1bmN0aW9ucy4KK1RoZXkgY2FuIGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLCBhbmQgZWFjaCBjYW4gc3BlY2lmeSBhIGdyb3VwIG5hbWUgb3IgbnVtYmVyLAorZm9yIGV4YW1wbGU6Cis8cHJlPgorICAgYWJjZFw9Y29weT0xLGNvcHk9MyxnZXQ9RzEKKzwvcHJlPgorSWYgdGhlIDxiPiNzdWJqZWN0PC9iPiBjb21tYW5kIGlzIHVzZWQgdG8gc2V0IGRlZmF1bHQgY29weSBhbmQvb3IgZ2V0IGxpc3RzLAordGhlc2UgY2FuIGJlIHVuc2V0IGJ5IHNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBudW1iZXIgdG8gY2FuY2VsIGFsbCBudW1iZXJlZAorZ3JvdXBzIGFuZCBhbiBlbXB0eSBuYW1lIHRvIGNhbmNlbCBhbGwgbmFtZWQgZ3JvdXBzLgorPC9QPgorPFA+CitUaGUgPGI+Z2V0YWxsPC9iPiBtb2RpZmllciB0ZXN0cyA8Yj5wY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQoKTwvYj4sIHdoaWNoCitleHRyYWN0cyBhbGwgY2FwdHVyZWQgc3Vic3RyaW5ncy4KKzwvUD4KKzxQPgorSWYgdGhlIHN1YmplY3QgbGluZSBpcyBzdWNjZXNzZnVsbHkgbWF0Y2hlZCwgdGhlIHN1YnN0cmluZ3MgZXh0cmFjdGVkIGJ5IHRoZQorY29udmVuaWVuY2UgZnVuY3Rpb25zIGFyZSBvdXRwdXQgd2l0aCBDLCBHLCBvciBMIGFmdGVyIHRoZSBzdHJpbmcgbnVtYmVyCitpbnN0ZWFkIG9mIGEgY29sb24uIFRoaXMgaXMgaW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCBmdWxsIGxpc3QuIFRoZSBzdHJpbmcKK2xlbmd0aCAodGhhdCBpcywgdGhlIHJldHVybiBmcm9tIHRoZSBleHRyYWN0aW9uIGZ1bmN0aW9uKSBpcyBnaXZlbiBpbgorcGFyZW50aGVzZXMgYWZ0ZXIgZWFjaCBzdWJzdHJpbmcsIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIHdoZW4gdGhlIGV4dHJhY3Rpb24gd2FzCitieSBuYW1lLgorPC9QPgorPGJyPjxiPgorVGVzdGluZyB0aGUgc3Vic3RpdHV0aW9uIGZ1bmN0aW9uCis8L2I+PGJyPgorPFA+CitJZiB0aGUgPGI+cmVwbGFjZTwvYj4gbW9kaWZpZXIgaXMgc2V0LCB0aGUgPGI+cGNyZTJfc3Vic3RpdHV0ZSgpPC9iPiBmdW5jdGlvbiBpcworY2FsbGVkIGluc3RlYWQgb2Ygb25lIG9mIHRoZSBtYXRjaGluZyBmdW5jdGlvbnMuIE5vdGUgdGhhdCByZXBsYWNlbWVudCBzdHJpbmdzCitjYW5ub3QgY29udGFpbiBjb21tYXMsIGJlY2F1c2UgYSBjb21tYSBzaWduaWZpZXMgdGhlIGVuZCBvZiBhIG1vZGlmaWVyLiBUaGlzIGlzCitub3QgdGhvdWdodCB0byBiZSBhbiBpc3N1ZSBpbiBhIHRlc3QgcHJvZ3JhbS4KKzwvUD4KKzxQPgorVW5saWtlIHN1YmplY3Qgc3RyaW5ncywgPGI+cGNyZTJ0ZXN0PC9iPiBkb2VzIG5vdCBwcm9jZXNzIHJlcGxhY2VtZW50IHN0cmluZ3MKK2ZvciBlc2NhcGUgc2VxdWVuY2VzLiBJbiBVVEYgbW9kZSwgYSByZXBsYWNlbWVudCBzdHJpbmcgaXMgY2hlY2tlZCB0byBzZWUgaWYgaXQKK2lzIGEgdmFsaWQgVVRGLTggc3RyaW5nLiBJZiBzbywgaXQgaXMgY29ycmVjdGx5IGNvbnZlcnRlZCB0byBhIFVURiBzdHJpbmcgb2YKK3RoZSBhcHByb3ByaWF0ZSBjb2RlIHVuaXQgd2lkdGguIElmIGl0IGlzIG5vdCBhIHZhbGlkIFVURi04IHN0cmluZywgdGhlCitpbmRpdmlkdWFsIGNvZGUgdW5pdHMgYXJlIGNvcGllZCBkaXJlY3RseS4gVGhpcyBwcm92aWRlcyBhIG1lYW5zIG9mIHBhc3NpbmcgYW4KK2ludmFsaWQgVVRGLTggc3RyaW5nIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorPC9QPgorPFA+CitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBzZXQgb3B0aW9ucyAoaW4gYWRkaXRpb25hbCB0byB0aGUgbm9ybWFsIG1hdGNoIG9wdGlvbnMpCitmb3IgPGI+cGNyZTJfc3Vic3RpdHV0ZSgpPC9iPjoKKzxwcmU+CisgIGdsb2JhbCAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUJTVElUVVRFX0dMT0JBTAorICBzdWJzdGl0dXRlX2V4dGVuZGVkICAgICAgICAgUENSRTJfU1VCU1RJVFVURV9FWFRFTkRFRAorICBzdWJzdGl0dXRlX292ZXJmbG93X2xlbmd0aCAgUENSRTJfU1VCU1RJVFVURV9PVkVSRkxPV19MRU5HVEgKKyAgc3Vic3RpdHV0ZV91bmtub3duX3Vuc2V0ICAgIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVAorICBzdWJzdGl0dXRlX3Vuc2V0X2VtcHR5ICAgICAgUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWQorCis8L1BSRT4KKzwvUD4KKzxQPgorQWZ0ZXIgYSBzdWNjZXNzZnVsIHN1YnN0aXR1dGlvbiwgdGhlIG1vZGlmaWVkIHN0cmluZyBpcyBvdXRwdXQsIHByZWNlZGVkIGJ5IHRoZQorbnVtYmVyIG9mIHJlcGxhY2VtZW50cy4gVGhpcyBtYXkgYmUgemVybyBpZiB0aGVyZSB3ZXJlIG5vIG1hdGNoZXMuIEhlcmUgaXMgYQorc2ltcGxlIGV4YW1wbGUgb2YgYSBzdWJzdGl0dXRpb24gdGVzdDoKKzxwcmU+CisgIC9hYmMvcmVwbGFjZT14eHgKKyAgICAgID1hYmM9YWJjPQorICAgMTogPXh4eD1hYmM9CisgICAgICA9YWJjPWFiYz1cPWdsb2JhbAorICAgMjogPXh4eD14eHg9Cis8L3ByZT4KK1N1YmplY3QgYW5kIHJlcGxhY2VtZW50IHN0cmluZ3Mgc2hvdWxkIGJlIGtlcHQgcmVsYXRpdmVseSBzaG9ydCAoZmV3ZXIgdGhhbiAyNTYKK2NoYXJhY3RlcnMpIGZvciBzdWJzdGl0dXRpb24gdGVzdHMsIGFzIGZpeGVkLXNpemUgYnVmZmVycyBhcmUgdXNlZC4gVG8gbWFrZSBpdAorZWFzeSB0byB0ZXN0IGZvciBidWZmZXIgb3ZlcmZsb3csIGlmIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgc3RhcnRzIHdpdGggYQorbnVtYmVyIGluIHNxdWFyZSBicmFja2V0cywgdGhhdCBudW1iZXIgaXMgcGFzc2VkIHRvIDxiPnBjcmUyX3N1YnN0aXR1dGUoKTwvYj4gYXMKK3RoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLCB3aXRoIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgc3RhcnRpbmcgYXQgdGhlIG5leHQKK2NoYXJhY3Rlci4gSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdGVzdHMgdGhlIGVkZ2UgY2FzZToKKzxwcmU+CisgIC9hYmMvCisgICAgICAxMjNhYmMxMjNcPXJlcGxhY2U9WzEwXVhZWgorICAgMTogMTIzWFlaMTIzCisgICAgICAxMjNhYmMxMjNcPXJlcGxhY2U9WzldWFlaCisgIEZhaWxlZDogZXJyb3IgLTQ3OiBubyBtb3JlIG1lbW9yeQorPC9wcmU+CitUaGUgZGVmYXVsdCBhY3Rpb24gb2YgPGI+cGNyZTJfc3Vic3RpdHV0ZSgpPC9iPiBpcyB0byByZXR1cm4KK1BDUkUyX0VSUk9SX05PTUVNT1JZIHdoZW4gdGhlIG91dHB1dCBidWZmZXIgaXMgdG9vIHNtYWxsLiBIb3dldmVyLCBpZiB0aGUKK1BDUkUyX1NVQlNUSVRVVEVfT1ZFUkZMT1dfTEVOR1RIIG9wdGlvbiBpcyBzZXQgKGJ5IHVzaW5nIHRoZQorPGI+c3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGg8L2I+IG1vZGlmaWVyKSwgPGI+cGNyZTJfc3Vic3RpdHV0ZSgpPC9iPiBjb250aW51ZXMKK3RvIGdvIHRocm91Z2ggdGhlIG1vdGlvbnMgb2YgbWF0Y2hpbmcgYW5kIHN1YnN0aXR1dGluZywgaW4gb3JkZXIgdG8gY29tcHV0ZSB0aGUKK3NpemUgb2YgYnVmZmVyIHRoYXQgaXMgcmVxdWlyZWQuIFdoZW4gdGhpcyBoYXBwZW5zLCA8Yj5wY3JlMnRlc3Q8L2I+IHNob3dzIHRoZQorcmVxdWlyZWQgYnVmZmVyIGxlbmd0aCAod2hpY2ggaW5jbHVkZXMgc3BhY2UgZm9yIHRoZSB0cmFpbGluZyB6ZXJvKSBhcyBwYXJ0IG9mCit0aGUgZXJyb3IgbWVzc2FnZS4gRm9yIGV4YW1wbGU6Cis8cHJlPgorICAvYWJjL3N1YnN0aXR1dGVfb3ZlcmZsb3dfbGVuZ3RoCisgICAgICAxMjNhYmMxMjNcPXJlcGxhY2U9WzldWFlaCisgIEZhaWxlZDogZXJyb3IgLTQ3OiBubyBtb3JlIG1lbW9yeTogMTAgY29kZSB1bml0cyBhcmUgbmVlZGVkCis8L3ByZT4KK0EgcmVwbGFjZW1lbnQgc3RyaW5nIGlzIGlnbm9yZWQgd2l0aCBQT1NJWCBhbmQgREZBIG1hdGNoaW5nLiBTcGVjaWZ5aW5nIHBhcnRpYWwKK21hdGNoaW5nIHByb3Zva2VzIGFuIGVycm9yIHJldHVybiAoImJhZCBvcHRpb24gdmFsdWUiKSBmcm9tCis8Yj5wY3JlMl9zdWJzdGl0dXRlKCk8L2I+LgorPC9QPgorPGJyPjxiPgorU2V0dGluZyB0aGUgSklUIHN0YWNrIHNpemUKKzwvYj48YnI+Cis8UD4KK1RoZSA8Yj5qaXRzdGFjazwvYj4gbW9kaWZpZXIgcHJvdmlkZXMgYSB3YXkgb2Ygc2V0dGluZyB0aGUgbWF4aW11bSBzdGFjayBzaXplCit0aGF0IGlzIHVzZWQgYnkgdGhlIGp1c3QtaW4tdGltZSBvcHRpbWl6YXRpb24gY29kZS4gSXQgaXMgaWdub3JlZCBpZiBKSVQKK29wdGltaXphdGlvbiBpcyBub3QgYmVpbmcgdXNlZC4gVGhlIHZhbHVlIGlzIGEgbnVtYmVyIG9mIGtpbG9ieXRlcy4gUHJvdmlkaW5nIGEKK3N0YWNrIHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQgMzJLIGlzIG5lY2Vzc2FyeSBvbmx5IGZvciB2ZXJ5Citjb21wbGljYXRlZCBwYXR0ZXJucy4KKzwvUD4KKzxicj48Yj4KK1NldHRpbmcgbWF0Y2ggYW5kIHJlY3Vyc2lvbiBsaW1pdHMKKzwvYj48YnI+Cis8UD4KK1RoZSA8Yj5tYXRjaF9saW1pdDwvYj4gYW5kIDxiPnJlY3Vyc2lvbl9saW1pdDwvYj4gbW9kaWZpZXJzIHNldCB0aGUgYXBwcm9wcmlhdGUKK2xpbWl0cyBpbiB0aGUgbWF0Y2ggY29udGV4dC4gVGhlc2UgdmFsdWVzIGFyZSBpZ25vcmVkIHdoZW4gdGhlCis8Yj5maW5kX2xpbWl0czwvYj4gbW9kaWZpZXIgaXMgc3BlY2lmaWVkLgorPC9QPgorPGJyPjxiPgorRmluZGluZyBtaW5pbXVtIGxpbWl0cworPC9iPjxicj4KKzxQPgorSWYgdGhlIDxiPmZpbmRfbGltaXRzPC9iPiBtb2RpZmllciBpcyBwcmVzZW50LCA8Yj5wY3JlMnRlc3Q8L2I+IGNhbGxzCis8Yj5wY3JlMl9tYXRjaCgpPC9iPiBzZXZlcmFsIHRpbWVzLCBzZXR0aW5nIGRpZmZlcmVudCB2YWx1ZXMgaW4gdGhlIG1hdGNoCitjb250ZXh0IHZpYSA8Yj5wY3JlMl9zZXRfbWF0Y2hfbGltaXQoKTwvYj4gYW5kIDxiPnBjcmUyX3NldF9yZWN1cnNpb25fbGltaXQoKTwvYj4KK3VudGlsIGl0IGZpbmRzIHRoZSBtaW5pbXVtIHZhbHVlcyBmb3IgZWFjaCBwYXJhbWV0ZXIgdGhhdCBhbGxvdworPGI+cGNyZTJfbWF0Y2goKTwvYj4gdG8gY29tcGxldGUgd2l0aG91dCBlcnJvci4KKzwvUD4KKzxQPgorSWYgSklUIGlzIGJlaW5nIHVzZWQsIG9ubHkgdGhlIG1hdGNoIGxpbWl0IGlzIHJlbGV2YW50LiBJZiBERkEgbWF0Y2hpbmcgaXMKK2JlaW5nIHVzZWQsIG5laXRoZXIgbGltaXQgaXMgcmVsZXZhbnQsIGFuZCB0aGlzIG1vZGlmaWVyIGlzIGlnbm9yZWQgKHdpdGggYQord2FybmluZyBtZXNzYWdlKS4KKzwvUD4KKzxQPgorVGhlIDxpPm1hdGNoX2xpbWl0PC9pPiBudW1iZXIgaXMgYSBtZWFzdXJlIG9mIHRoZSBhbW91bnQgb2YgYmFja3RyYWNraW5nCit0aGF0IHRha2VzIHBsYWNlLCBhbmQgbGVhcm5pbmcgdGhlIG1pbmltdW0gdmFsdWUgY2FuIGJlIGluc3RydWN0aXZlLiBGb3IgbW9zdAorc2ltcGxlIG1hdGNoZXMsIHRoZSBudW1iZXIgaXMgcXVpdGUgc21hbGwsIGJ1dCBmb3IgcGF0dGVybnMgd2l0aCB2ZXJ5IGxhcmdlCitudW1iZXJzIG9mIG1hdGNoaW5nIHBvc3NpYmlsaXRpZXMsIGl0IGNhbiBiZWNvbWUgbGFyZ2UgdmVyeSBxdWlja2x5IHdpdGgKK2luY3JlYXNpbmcgbGVuZ3RoIG9mIHN1YmplY3Qgc3RyaW5nLiBUaGUgPGk+bWF0Y2hfbGltaXRfcmVjdXJzaW9uPC9pPiBudW1iZXIgaXMKK2EgbWVhc3VyZSBvZiBob3cgbXVjaCBzdGFjayAob3IsIGlmIFBDUkUyIGlzIGNvbXBpbGVkIHdpdGggTk9fUkVDVVJTRSwgaG93IG11Y2gKK2hlYXApIG1lbW9yeSBpcyBuZWVkZWQgdG8gY29tcGxldGUgdGhlIG1hdGNoIGF0dGVtcHQuCis8L1A+Cis8YnI+PGI+CitTaG93aW5nIE1BUksgbmFtZXMKKzwvYj48YnI+Cis8UD4KK1RoZSA8Yj5tYXJrPC9iPiBtb2RpZmllciBjYXVzZXMgdGhlIG5hbWVzIGZyb20gYmFja3RyYWNraW5nIGNvbnRyb2wgdmVyYnMgdGhhdAorYXJlIHJldHVybmVkIGZyb20gY2FsbHMgdG8gPGI+cGNyZTJfbWF0Y2goKTwvYj4gdG8gYmUgZGlzcGxheWVkLiBJZiBhIG1hcmsgaXMKK3JldHVybmVkIGZvciBhIG1hdGNoLCBub24tbWF0Y2gsIG9yIHBhcnRpYWwgbWF0Y2gsIDxiPnBjcmUydGVzdDwvYj4gc2hvd3MgaXQuCitGb3IgYSBtYXRjaCwgaXQgaXMgb24gYSBsaW5lIGJ5IGl0c2VsZiwgdGFnZ2VkIHdpdGggIk1LOiIuIE90aGVyd2lzZSwgaXQKK2lzIGFkZGVkIHRvIHRoZSBub24tbWF0Y2ggbWVzc2FnZS4KKzwvUD4KKzxicj48Yj4KK1Nob3dpbmcgbWVtb3J5IHVzYWdlCis8L2I+PGJyPgorPFA+CitUaGUgPGI+bWVtb3J5PC9iPiBtb2RpZmllciBjYXVzZXMgPGI+cGNyZTJ0ZXN0PC9iPiB0byBsb2cgYWxsIG1lbW9yeSBhbGxvY2F0aW9uCithbmQgZnJlZWluZyBjYWxscyB0aGF0IG9jY3VyIGR1cmluZyBhIG1hdGNoIG9wZXJhdGlvbi4KKzwvUD4KKzxicj48Yj4KK1NldHRpbmcgYSBzdGFydGluZyBvZmZzZXQKKzwvYj48YnI+Cis8UD4KK1RoZSA8Yj5vZmZzZXQ8L2I+IG1vZGlmaWVyIHNldHMgYW4gb2Zmc2V0IGluIHRoZSBzdWJqZWN0IHN0cmluZyBhdCB3aGljaAorbWF0Y2hpbmcgc3RhcnRzLiBJdHMgdmFsdWUgaXMgYSBudW1iZXIgb2YgY29kZSB1bml0cywgbm90IGNoYXJhY3RlcnMuCis8L1A+Cis8YnI+PGI+CitTZXR0aW5nIGFuIG9mZnNldCBsaW1pdAorPC9iPjxicj4KKzxQPgorVGhlIDxiPm9mZnNldF9saW1pdDwvYj4gbW9kaWZpZXIgc2V0cyBhIGxpbWl0IGZvciB1bmFuY2hvcmVkIG1hdGNoZXMuIElmIGEgbWF0Y2gKK2Nhbm5vdCBiZSBmb3VuZCBzdGFydGluZyBhdCBvciBiZWZvcmUgdGhpcyBvZmZzZXQgaW4gdGhlIHN1YmplY3QsIGEgIm5vIG1hdGNoIgorcmV0dXJuIGlzIGdpdmVuLiBUaGUgZGF0YSB2YWx1ZSBpcyBhIG51bWJlciBvZiBjb2RlIHVuaXRzLCBub3QgY2hhcmFjdGVycy4gV2hlbgordGhpcyBtb2RpZmllciBpcyB1c2VkLCB0aGUgPGI+dXNlX29mZnNldF9saW1pdDwvYj4gbW9kaWZpZXIgbXVzdCBoYXZlIGJlZW4gc2V0Citmb3IgdGhlIHBhdHRlcm47IGlmIG5vdCwgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLgorPC9QPgorPGJyPjxiPgorU2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IHZlY3RvcgorPC9iPjxicj4KKzxQPgorVGhlIDxiPm92ZWN0b3I8L2I+IG1vZGlmaWVyIGFwcGxpZXMgb25seSB0byB0aGUgc3ViamVjdCBsaW5lIGluIHdoaWNoIGl0CithcHBlYXJzLCB0aG91Z2ggb2YgY291cnNlIGl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gc2V0IGEgZGVmYXVsdCBpbiBhCis8Yj4jc3ViamVjdDwvYj4gY29tbWFuZC4gSXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcGFpcnMgb2Ygb2Zmc2V0cyB0aGF0IGFyZQorYXZhaWxhYmxlIGZvciBzdG9yaW5nIG1hdGNoaW5nIGluZm9ybWF0aW9uLiBUaGUgZGVmYXVsdCBpcyAxNS4KKzwvUD4KKzxQPgorQSB2YWx1ZSBvZiB6ZXJvIGlzIHVzZWZ1bCB3aGVuIHRlc3RpbmcgdGhlIFBPU0lYIEFQSSBiZWNhdXNlIGl0IGNhdXNlcworPGI+cmVnZXhlYygpPC9iPiB0byBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgY2FwdHVyZSB2ZWN0b3IuIFdoZW4gbm90IHRlc3RpbmcgdGhlCitQT1NJWCBBUEksIGEgdmFsdWUgb2YgemVybyBpcyB1c2VkIHRvIGNhdXNlCis8Yj5wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4oKTwvYj4gdG8gYmUgY2FsbGVkLCBpbiBvcmRlciB0byBjcmVhdGUgYQorbWF0Y2ggYmxvY2sgb2YgZXhhY3RseSB0aGUgcmlnaHQgc2l6ZSBmb3IgdGhlIHBhdHRlcm4uIChJdCBpcyBub3QgcG9zc2libGUgdG8KK2NyZWF0ZSBhIG1hdGNoIGJsb2NrIHdpdGggYSB6ZXJvLWxlbmd0aCBvdmVjdG9yOyB0aGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lCitwYWlyIG9mIG9mZnNldHMuKQorPC9QPgorPGJyPjxiPgorUGFzc2luZyB0aGUgc3ViamVjdCBhcyB6ZXJvLXRlcm1pbmF0ZWQKKzwvYj48YnI+Cis8UD4KK0J5IGRlZmF1bHQsIHRoZSBzdWJqZWN0IHN0cmluZyBpcyBwYXNzZWQgdG8gYSBuYXRpdmUgQVBJIG1hdGNoaW5nIGZ1bmN0aW9uIHdpdGgKK2l0cyBjb3JyZWN0IGxlbmd0aC4gSW4gb3JkZXIgdG8gdGVzdCB0aGUgZmFjaWxpdHkgZm9yIHBhc3NpbmcgYSB6ZXJvLXRlcm1pbmF0ZWQKK3N0cmluZywgdGhlIDxiPnplcm9fdGVybWluYXRlPC9iPiBtb2RpZmllciBpcyBwcm92aWRlZC4gSXQgY2F1c2VzIHRoZSBsZW5ndGggdG8KK2JlIHBhc3NlZCBhcyBQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIChXaGVuIG1hdGNoaW5nIHZpYSB0aGUgUE9TSVggaW50ZXJmYWNlLAordGhpcyBtb2RpZmllciBoYXMgbm8gZWZmZWN0LCBhcyB0aGVyZSBpcyBubyBmYWNpbGl0eSBmb3IgcGFzc2luZyBhIGxlbmd0aC4pCis8L1A+Cis8UD4KK1doZW4gdGVzdGluZyA8Yj5wY3JlMl9zdWJzdGl0dXRlKCk8L2I+LCB0aGlzIG1vZGlmaWVyIGFsc28gaGFzIHRoZSBlZmZlY3Qgb2YKK3Bhc3NpbmcgdGhlIHJlcGxhY2VtZW50IHN0cmluZyBhcyB6ZXJvLXRlcm1pbmF0ZWQuCis8L1A+Cis8YnI+PGI+CitQYXNzaW5nIGEgTlVMTCBjb250ZXh0Cis8L2I+PGJyPgorPFA+CitOb3JtYWxseSwgPGI+cGNyZTJ0ZXN0PC9iPiBwYXNzZXMgYSBjb250ZXh0IGJsb2NrIHRvIDxiPnBjcmUyX21hdGNoKCk8L2I+LAorPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+IG9yIDxiPnBjcmUyX2ppdF9tYXRjaCgpPC9iPi4gSWYgdGhlIDxiPm51bGxfY29udGV4dDwvYj4KK21vZGlmaWVyIGlzIHNldCwgaG93ZXZlciwgTlVMTCBpcyBwYXNzZWQuIFRoaXMgaXMgZm9yIHRlc3RpbmcgdGhhdCB0aGUgbWF0Y2hpbmcKK2Z1bmN0aW9ucyBiZWhhdmUgY29ycmVjdGx5IGluIHRoaXMgY2FzZSAodGhleSB1c2UgZGVmYXVsdCB2YWx1ZXMpLiBUaGlzCittb2RpZmllciBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSA8Yj5maW5kX2xpbWl0czwvYj4gbW9kaWZpZXIgb3Igd2hlbiB0ZXN0aW5nIHRoZQorc3Vic3RpdHV0aW9uIGZ1bmN0aW9uLgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzEyIiBocmVmPSIjVE9DMSI+VEhFIEFMVEVSTkFUSVZFIE1BVENISU5HIEZVTkNUSU9OPC9hPjxicj4KKzxQPgorQnkgZGVmYXVsdCwgPGI+cGNyZTJ0ZXN0PC9iPiB1c2VzIHRoZSBzdGFuZGFyZCBQQ1JFMiBtYXRjaGluZyBmdW5jdGlvbiwKKzxiPnBjcmUyX21hdGNoKCk8L2I+IHRvIG1hdGNoIGVhY2ggc3ViamVjdCBsaW5lLiBQQ1JFMiBhbHNvIHN1cHBvcnRzIGFuCithbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbiwgPGI+cGNyZTJfZGZhX21hdGNoKCk8L2I+LCB3aGljaCBvcGVyYXRlcyBpbiBhCitkaWZmZXJlbnQgd2F5LCBhbmQgaGFzIHNvbWUgcmVzdHJpY3Rpb25zLiBUaGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvCitmdW5jdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiB0aGUKKzxhIGhyZWY9InBjcmUybWF0Y2hpbmcuaHRtbCI+PGI+cGNyZTJtYXRjaGluZzwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPC9QPgorPFA+CitJZiB0aGUgPGI+ZGZhPC9iPiBtb2RpZmllciBpcyBzZXQsIHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbiBpcyB1c2VkLgorVGhpcyBmdW5jdGlvbiBmaW5kcyBhbGwgcG9zc2libGUgbWF0Y2hlcyBhdCBhIGdpdmVuIHBvaW50IGluIHRoZSBzdWJqZWN0LiBJZiwKK2hvd2V2ZXIsIHRoZSA8Yj5kZmFfc2hvcnRlc3Q8L2I+IG1vZGlmaWVyIGlzIHNldCwgcHJvY2Vzc2luZyBzdG9wcyBhZnRlciB0aGUKK2ZpcnN0IG1hdGNoIGlzIGZvdW5kLiBUaGlzIGlzIGFsd2F5cyB0aGUgc2hvcnRlc3QgcG9zc2libGUgbWF0Y2guCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTMiIGhyZWY9IiNUT0MxIj5ERUZBVUxUIE9VVFBVVCBGUk9NIHBjcmUydGVzdDwvYT48YnI+Cis8UD4KK1RoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIG91dHB1dCB3aGVuIHRoZSBub3JtYWwgbWF0Y2hpbmcgZnVuY3Rpb24sCis8Yj5wY3JlMl9tYXRjaCgpPC9iPiwgaXMgYmVpbmcgdXNlZC4KKzwvUD4KKzxQPgorV2hlbiBhIG1hdGNoIHN1Y2NlZWRzLCA8Yj5wY3JlMnRlc3Q8L2I+IG91dHB1dHMgdGhlIGxpc3Qgb2YgY2FwdHVyZWQgc3Vic3RyaW5ncywKK3N0YXJ0aW5nIHdpdGggbnVtYmVyIDAgZm9yIHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVkIHRoZSB3aG9sZSBwYXR0ZXJuLgorT3RoZXJ3aXNlLCBpdCBvdXRwdXRzICJObyBtYXRjaCIgd2hlbiB0aGUgcmV0dXJuIGlzIFBDUkUyX0VSUk9SX05PTUFUQ0gsIG9yCisiUGFydGlhbCBtYXRjaDoiIGZvbGxvd2VkIGJ5IHRoZSBwYXJ0aWFsbHkgbWF0Y2hpbmcgc3Vic3RyaW5nIHdoZW4gdGhlCityZXR1cm4gaXMgUENSRTJfRVJST1JfUEFSVElBTC4gKE5vdGUgdGhhdCB0aGlzIGlzIHRoZQorZW50aXJlIHN1YnN0cmluZyB0aGF0IHdhcyBpbnNwZWN0ZWQgZHVyaW5nIHRoZSBwYXJ0aWFsIG1hdGNoOyBpdCBtYXkgaW5jbHVkZQorY2hhcmFjdGVycyBiZWZvcmUgdGhlIGFjdHVhbCBtYXRjaCBzdGFydCBpZiBhIGxvb2tiZWhpbmQgYXNzZXJ0aW9uLCBcSywgXGIsCitvciBcQiB3YXMgaW52b2x2ZWQuKQorPC9QPgorPFA+CitGb3IgYW55IG90aGVyIHJldHVybiwgPGI+cGNyZTJ0ZXN0PC9iPiBvdXRwdXRzIHRoZSBQQ1JFMiBuZWdhdGl2ZSBlcnJvciBudW1iZXIKK2FuZCBhIHNob3J0IGRlc2NyaXB0aXZlIHBocmFzZS4gSWYgdGhlIGVycm9yIGlzIGEgZmFpbGVkIFVURiBzdHJpbmcgY2hlY2ssIHRoZQorY29kZSB1bml0IG9mZnNldCBvZiB0aGUgc3RhcnQgb2YgdGhlIGZhaWxpbmcgY2hhcmFjdGVyIGlzIGFsc28gb3V0cHV0LiBIZXJlIGlzCithbiBleGFtcGxlIG9mIGFuIGludGVyYWN0aXZlIDxiPnBjcmUydGVzdDwvYj4gcnVuLgorPHByZT4KKyAgJCBwY3JlMnRlc3QKKyAgUENSRTIgdmVyc2lvbiA5LjAwIDIwMTQtMDUtMTAKKworICAgIHJlJiM2MjsgL15hYmMoXGQrKS8KKyAgZGF0YSYjNjI7IGFiYzEyMworICAgMDogYWJjMTIzCisgICAxOiAxMjMKKyAgZGF0YSYjNjI7IHh5egorICBObyBtYXRjaAorPC9wcmU+CitVbnNldCBjYXB0dXJpbmcgc3Vic3RyaW5ncyB0aGF0IGFyZSBub3QgZm9sbG93ZWQgYnkgb25lIHRoYXQgaXMgc2V0IGFyZSBub3QKK3Nob3duIGJ5IDxiPnBjcmUydGVzdDwvYj4gdW5sZXNzIHRoZSA8Yj5hbGxjYXB0dXJlczwvYj4gbW9kaWZpZXIgaXMgc3BlY2lmaWVkLiBJbgordGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGVyZSBhcmUgdHdvIGNhcHR1cmluZyBzdWJzdHJpbmdzLCBidXQgd2hlbiB0aGUgZmlyc3QKK2RhdGEgbGluZSBpcyBtYXRjaGVkLCB0aGUgc2Vjb25kLCB1bnNldCBzdWJzdHJpbmcgaXMgbm90IHNob3duLiBBbiAiaW50ZXJuYWwiCit1bnNldCBzdWJzdHJpbmcgaXMgc2hvd24gYXMgIiYjNjA7dW5zZXQmIzYyOyIsIGFzIGZvciB0aGUgc2Vjb25kIGRhdGEgbGluZS4KKzxwcmU+CisgICAgcmUmIzYyOyAvKGEpfChiKS8KKyAgZGF0YSYjNjI7IGEKKyAgIDA6IGEKKyAgIDE6IGEKKyAgZGF0YSYjNjI7IGIKKyAgIDA6IGIKKyAgIDE6ICYjNjA7dW5zZXQmIzYyOworICAgMjogYgorPC9wcmU+CitJZiB0aGUgc3RyaW5ncyBjb250YWluIGFueSBub24tcHJpbnRpbmcgY2hhcmFjdGVycywgdGhleSBhcmUgb3V0cHV0IGFzIFx4aGgKK2VzY2FwZXMgaWYgdGhlIHZhbHVlIGlzIGxlc3MgdGhhbiAyNTYgYW5kIFVURiBtb2RlIGlzIG5vdCBzZXQuIE90aGVyd2lzZSB0aGV5CithcmUgb3V0cHV0IGFzIFx4e2hoLi4ufSBlc2NhcGVzLiBTZWUgYmVsb3cgZm9yIHRoZSBkZWZpbml0aW9uIG9mIG5vbi1wcmludGluZworY2hhcmFjdGVycy4gSWYgdGhlIDxiPi9hZnRlcnRleHQ8L2I+IG1vZGlmaWVyIGlzIHNldCwgdGhlIG91dHB1dCBmb3Igc3Vic3RyaW5nCiswIGlzIGZvbGxvd2VkIGJ5IHRoZSB0aGUgcmVzdCBvZiB0aGUgc3ViamVjdCBzdHJpbmcsIGlkZW50aWZpZWQgYnkgIjArIiBsaWtlCit0aGlzOgorPHByZT4KKyAgICByZSYjNjI7IC9jYXQvYWZ0ZXJ0ZXh0CisgIGRhdGEmIzYyOyBjYXRhcmFjdAorICAgMDogY2F0CisgICAwKyBhcmFjdAorPC9wcmU+CitJZiBnbG9iYWwgbWF0Y2hpbmcgaXMgcmVxdWVzdGVkLCB0aGUgcmVzdWx0cyBvZiBzdWNjZXNzaXZlIG1hdGNoaW5nIGF0dGVtcHRzCithcmUgb3V0cHV0IGluIHNlcXVlbmNlLCBsaWtlIHRoaXM6Cis8cHJlPgorICAgIHJlJiM2MjsgL1xCaShcd1x3KS9nCisgIGRhdGEmIzYyOyBNaXNzaXNzaXBwaQorICAgMDogaXNzCisgICAxOiBzcworICAgMDogaXNzCisgICAxOiBzcworICAgMDogaXBwCisgICAxOiBwcAorPC9wcmU+CisiTm8gbWF0Y2giIGlzIG91dHB1dCBvbmx5IGlmIHRoZSBmaXJzdCBtYXRjaCBhdHRlbXB0IGZhaWxzLiBIZXJlIGlzIGFuIGV4YW1wbGUKK29mIGEgZmFpbHVyZSBtZXNzYWdlICh0aGUgb2Zmc2V0IDQgdGhhdCBpcyBzcGVjaWZpZWQgYnkgdGhlIDxiPm9mZnNldDwvYj4KK21vZGlmaWVyIGlzIHBhc3QgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCBzdHJpbmcpOgorPHByZT4KKyAgICByZSYjNjI7IC94eXovCisgIGRhdGEmIzYyOyB4eXpcPW9mZnNldD00CisgIEVycm9yIC0yNCAoYmFkIG9mZnNldCB2YWx1ZSkKKzwvUFJFPgorPC9QPgorPFA+CitOb3RlIHRoYXQgd2hlcmVhcyBwYXR0ZXJucyBjYW4gYmUgY29udGludWVkIG92ZXIgc2V2ZXJhbCBsaW5lcyAoYSBwbGFpbiAiJiM2MjsiCitwcm9tcHQgaXMgdXNlZCBmb3IgY29udGludWF0aW9ucyksIHN1YmplY3QgbGluZXMgbWF5IG5vdC4gSG93ZXZlciBuZXdsaW5lcyBjYW4KK2JlIGluY2x1ZGVkIGluIGEgc3ViamVjdCBieSBtZWFucyBvZiB0aGUgXG4gZXNjYXBlIChvciBcciwgXHJcbiwgZXRjLiwKK2RlcGVuZGluZyBvbiB0aGUgbmV3bGluZSBzZXF1ZW5jZSBzZXR0aW5nKS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxNCIgaHJlZj0iI1RPQzEiPk9VVFBVVCBGUk9NIFRIRSBBTFRFUk5BVElWRSBNQVRDSElORyBGVU5DVElPTjwvYT48YnI+Cis8UD4KK1doZW4gdGhlIGFsdGVybmF0aXZlIG1hdGNoaW5nIGZ1bmN0aW9uLCA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4sIGlzIHVzZWQsIHRoZQorb3V0cHV0IGNvbnNpc3RzIG9mIGEgbGlzdCBvZiBhbGwgdGhlIG1hdGNoZXMgdGhhdCBzdGFydCBhdCB0aGUgZmlyc3QgcG9pbnQgaW4KK3RoZSBzdWJqZWN0IHdoZXJlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBtYXRjaC4gRm9yIGV4YW1wbGU6Cis8cHJlPgorICAgIHJlJiM2MjsgLyh0YW5nfHRhbmdlcmluZXx0YW4pLworICBkYXRhJiM2MjsgeWVsbG93IHRhbmdlcmluZVw9ZGZhCisgICAwOiB0YW5nZXJpbmUKKyAgIDE6IHRhbmcKKyAgIDI6IHRhbgorPC9wcmU+CitVc2luZyB0aGUgbm9ybWFsIG1hdGNoaW5nIGZ1bmN0aW9uIG9uIHRoaXMgZGF0YSBmaW5kcyBvbmx5ICJ0YW5nIi4gVGhlCitsb25nZXN0IG1hdGNoaW5nIHN0cmluZyBpcyBhbHdheXMgZ2l2ZW4gZmlyc3QgKGFuZCBudW1iZXJlZCB6ZXJvKS4gQWZ0ZXIgYQorUENSRTJfRVJST1JfUEFSVElBTCByZXR1cm4sIHRoZSBvdXRwdXQgaXMgIlBhcnRpYWwgbWF0Y2g6IiwgZm9sbG93ZWQgYnkgdGhlCitwYXJ0aWFsbHkgbWF0Y2hpbmcgc3Vic3RyaW5nLiBOb3RlIHRoYXQgdGhpcyBpcyB0aGUgZW50aXJlIHN1YnN0cmluZyB0aGF0IHdhcworaW5zcGVjdGVkIGR1cmluZyB0aGUgcGFydGlhbCBtYXRjaDsgaXQgbWF5IGluY2x1ZGUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGFjdHVhbAorbWF0Y2ggc3RhcnQgaWYgYSBsb29rYmVoaW5kIGFzc2VydGlvbiwgXGIsIG9yIFxCIHdhcyBpbnZvbHZlZC4gKFxLIGlzIG5vdAorc3VwcG9ydGVkIGZvciBERkEgbWF0Y2hpbmcuKQorPC9QPgorPFA+CitJZiBnbG9iYWwgbWF0Y2hpbmcgaXMgcmVxdWVzdGVkLCB0aGUgc2VhcmNoIGZvciBmdXJ0aGVyIG1hdGNoZXMgcmVzdW1lcworYXQgdGhlIGVuZCBvZiB0aGUgbG9uZ2VzdCBtYXRjaC4gRm9yIGV4YW1wbGU6Cis8cHJlPgorICAgIHJlJiM2MjsgLyh0YW5nfHRhbmdlcmluZXx0YW4pL2cKKyAgZGF0YSYjNjI7IHllbGxvdyB0YW5nZXJpbmUgYW5kIHRhbmd5IHN1bHRhbmFcPWRmYQorICAgMDogdGFuZ2VyaW5lCisgICAxOiB0YW5nCisgICAyOiB0YW4KKyAgIDA6IHRhbmcKKyAgIDE6IHRhbgorICAgMDogdGFuCis8L3ByZT4KK1RoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHN1YnN0cmluZyBjYXB0dXJlLCBzbyB0aGUKK21vZGlmaWVycyB0aGF0IGFyZSBjb25jZXJuZWQgd2l0aCBjYXB0dXJlZCBzdWJzdHJpbmdzIGFyZSBub3QgcmVsZXZhbnQuCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTUiIGhyZWY9IiNUT0MxIj5SRVNUQVJUSU5HIEFGVEVSIEEgUEFSVElBTCBNQVRDSDwvYT48YnI+Cis8UD4KK1doZW4gdGhlIGFsdGVybmF0aXZlIG1hdGNoaW5nIGZ1bmN0aW9uIGhhcyBnaXZlbiB0aGUgUENSRTJfRVJST1JfUEFSVElBTAorcmV0dXJuLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHN1YmplY3QgcGFydGlhbGx5IG1hdGNoZWQgdGhlIHBhdHRlcm4sIHlvdSBjYW4KK3Jlc3RhcnQgdGhlIG1hdGNoIHdpdGggYWRkaXRpb25hbCBzdWJqZWN0IGRhdGEgYnkgbWVhbnMgb2YgdGhlCis8Yj5kZmFfcmVzdGFydDwvYj4gbW9kaWZpZXIuIEZvciBleGFtcGxlOgorPHByZT4KKyAgICByZSYjNjI7IC9eXGQ/XGQoamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpXGRcZCQvCisgIGRhdGEmIzYyOyAyM2phXD1QLGRmYQorICBQYXJ0aWFsIG1hdGNoOiAyM2phCisgIGRhdGEmIzYyOyBuMDVcPWRmYSxkZmFfcmVzdGFydAorICAgMDogbjA1Cis8L3ByZT4KK0ZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IHBhcnRpYWwgbWF0Y2hpbmcsIHNlZSB0aGUKKzxhIGhyZWY9InBjcmUycGFydGlhbC5odG1sIj48Yj5wY3JlMnBhcnRpYWw8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMxNiIgaHJlZj0iI1RPQzEiPkNBTExPVVRTPC9hPjxicj4KKzxQPgorSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgYW55IGNhbGxvdXQgcmVxdWVzdHMsIDxiPnBjcmUydGVzdDwvYj4ncyBjYWxsb3V0CitmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIG1hdGNoaW5nIHVubGVzcyA8Yj5jYWxsb3V0X25vbmU8L2I+IGlzIHNwZWNpZmllZC4KK1RoaXMgd29ya3Mgd2l0aCBib3RoIG1hdGNoaW5nIGZ1bmN0aW9ucy4KKzwvUD4KKzxQPgorVGhlIGNhbGxvdXQgZnVuY3Rpb24gaW4gPGI+cGNyZTJ0ZXN0PC9iPiByZXR1cm5zIHplcm8gKGNhcnJ5IG9uIG1hdGNoaW5nKSBieQorZGVmYXVsdCwgYnV0IHlvdSBjYW4gdXNlIGEgPGI+Y2FsbG91dF9mYWlsPC9iPiBtb2RpZmllciBpbiBhIHN1YmplY3QgbGluZSAoYXMKK2Rlc2NyaWJlZCBhYm92ZSkgdG8gY2hhbmdlIHRoaXMgYW5kIG90aGVyIHBhcmFtZXRlcnMgb2YgdGhlIGNhbGxvdXQuCis8L1A+Cis8UD4KK0luc2VydGluZyBjYWxsb3V0cyBjYW4gYmUgaGVscGZ1bCB3aGVuIHVzaW5nIDxiPnBjcmUydGVzdDwvYj4gdG8gY2hlY2sKK2NvbXBsaWNhdGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IGNhbGxvdXRzLCBzZWUKK3RoZQorPGEgaHJlZj0icGNyZTJjYWxsb3V0Lmh0bWwiPjxiPnBjcmUyY2FsbG91dDwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPC9QPgorPFA+CitUaGUgb3V0cHV0IGZvciBjYWxsb3V0cyB3aXRoIG51bWVyaWNhbCBhcmd1bWVudHMgYW5kIHRob3NlIHdpdGggc3RyaW5nCithcmd1bWVudHMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50LgorPC9QPgorPGJyPjxiPgorQ2FsbG91dHMgd2l0aCBudW1lcmljYWwgYXJndW1lbnRzCis8L2I+PGJyPgorPFA+CitCeSBkZWZhdWx0LCB0aGUgY2FsbG91dCBmdW5jdGlvbiBkaXNwbGF5cyB0aGUgY2FsbG91dCBudW1iZXIsIHRoZSBzdGFydCBhbmQKK2N1cnJlbnQgcG9zaXRpb25zIGluIHRoZSBzdWJqZWN0IHRleHQgYXQgdGhlIGNhbGxvdXQgdGltZSwgYW5kIHRoZSBuZXh0IHBhdHRlcm4KK2l0ZW0gdG8gYmUgdGVzdGVkLiBGb3IgZXhhbXBsZToKKzxwcmU+CisgIC0tLSYjNjI7cHFyYWJjZGVmCisgICAgMCAgICBeICBeICAgICBcZAorPC9wcmU+CitUaGlzIG91dHB1dCBpbmRpY2F0ZXMgdGhhdCBjYWxsb3V0IG51bWJlciAwIG9jY3VycmVkIGZvciBhIG1hdGNoIGF0dGVtcHQKK3N0YXJ0aW5nIGF0IHRoZSBmb3VydGggY2hhcmFjdGVyIG9mIHRoZSBzdWJqZWN0IHN0cmluZywgd2hlbiB0aGUgcG9pbnRlciB3YXMgYXQKK3RoZSBzZXZlbnRoIGNoYXJhY3RlciwgYW5kIHdoZW4gdGhlIG5leHQgcGF0dGVybiBpdGVtIHdhcyBcZC4gSnVzdAorb25lIGNpcmN1bWZsZXggaXMgb3V0cHV0IGlmIHRoZSBzdGFydCBhbmQgY3VycmVudCBwb3NpdGlvbnMgYXJlIHRoZSBzYW1lLgorPC9QPgorPFA+CitDYWxsb3V0cyBudW1iZXJlZCAyNTUgYXJlIGFzc3VtZWQgdG8gYmUgYXV0b21hdGljIGNhbGxvdXRzLCBpbnNlcnRlZCBhcyBhCityZXN1bHQgb2YgdGhlIDxiPi9hdXRvX2NhbGxvdXQ8L2I+IHBhdHRlcm4gbW9kaWZpZXIuIEluIHRoaXMgY2FzZSwgaW5zdGVhZCBvZgorc2hvd2luZyB0aGUgY2FsbG91dCBudW1iZXIsIHRoZSBvZmZzZXQgaW4gdGhlIHBhdHRlcm4sIHByZWNlZGVkIGJ5IGEgcGx1cywgaXMKK291dHB1dC4gRm9yIGV4YW1wbGU6Cis8cHJlPgorICAgIHJlJiM2MjsgL1xkP1tBLUVdXCovYXV0b19jYWxsb3V0CisgIGRhdGEmIzYyOyBFKgorICAtLS0mIzYyO0UqCisgICArMCBeICAgICAgXGQ/CisgICArMyBeICAgICAgW0EtRV0KKyAgICs4IF5eICAgICBcKgorICArMTAgXiBeCisgICAwOiBFKgorPC9wcmU+CitJZiBhIHBhdHRlcm4gY29udGFpbnMgKCpNQVJLKSBpdGVtcywgYW4gYWRkaXRpb25hbCBsaW5lIGlzIG91dHB1dCB3aGVuZXZlcgorYSBjaGFuZ2Ugb2YgbGF0ZXN0IG1hcmsgaXMgcGFzc2VkIHRvIHRoZSBjYWxsb3V0IGZ1bmN0aW9uLiBGb3IgZXhhbXBsZToKKzxwcmU+CisgICAgcmUmIzYyOyAvYSgqTUFSSzpYKWJjL2F1dG9fY2FsbG91dAorICBkYXRhJiM2MjsgYWJjCisgIC0tLSYjNjI7YWJjCisgICArMCBeICAgICAgIGEKKyAgICsxIF5eICAgICAgKCpNQVJLOlgpCisgICsxMCBeXiAgICAgIGIKKyAgTGF0ZXN0IE1hcms6IFgKKyAgKzExIF4gXiAgICAgYworICArMTIgXiAgXgorICAgMDogYWJjCis8L3ByZT4KK1RoZSBtYXJrIGNoYW5nZXMgYmV0d2VlbiBtYXRjaGluZyAiYSIgYW5kICJiIiwgYnV0IHN0YXlzIHRoZSBzYW1lIGZvciB0aGUgcmVzdAorb2YgdGhlIG1hdGNoLCBzbyBub3RoaW5nIG1vcmUgaXMgb3V0cHV0LiBJZiwgYXMgYSByZXN1bHQgb2YgYmFja3RyYWNraW5nLCB0aGUKK21hcmsgcmV2ZXJ0cyB0byBiZWluZyB1bnNldCwgdGhlIHRleHQgIiYjNjA7dW5zZXQmIzYyOyIgaXMgb3V0cHV0LgorPC9QPgorPGJyPjxiPgorQ2FsbG91dHMgd2l0aCBzdHJpbmcgYXJndW1lbnRzCis8L2I+PGJyPgorPFA+CitUaGUgb3V0cHV0IGZvciBhIGNhbGxvdXQgd2l0aCBhIHN0cmluZyBhcmd1bWVudCBpcyBzaW1pbGFyLCBleGNlcHQgdGhhdCBpbnN0ZWFkCitvZiBvdXRwdXR0aW5nIGEgY2FsbG91dCBudW1iZXIgYmVmb3JlIHRoZSBwb3NpdGlvbiBpbmRpY2F0b3JzLCB0aGUgY2FsbG91dAorc3RyaW5nIGFuZCBpdHMgb2Zmc2V0IGluIHRoZSBwYXR0ZXJuIHN0cmluZyBhcmUgb3V0cHV0IGJlZm9yZSB0aGUgcmVmbGVjdGlvbiBvZgordGhlIHN1YmplY3Qgc3RyaW5nLCBhbmQgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIHJlZmxlY3RlZCBmb3IgZWFjaCBjYWxsb3V0LiBGb3IKK2V4YW1wbGU6Cis8cHJlPgorICAgIHJlJiM2MjsgL15hYig/QydmaXJzdCcpY2QoP0Mic2Vjb25kIillZi8KKyAgZGF0YSYjNjI7IGFiY2RlZmcKKyAgQ2FsbG91dCAoNyk6ICdmaXJzdCcKKyAgLS0tJiM2MjthYmNkZWZnCisgICAgICBeIF4gICAgICAgICBjCisgIENhbGxvdXQgKDIwKTogInNlY29uZCIKKyAgLS0tJiM2MjthYmNkZWZnCisgICAgICBeICAgXiAgICAgICBlCisgICAwOiBhYmNkZWYKKworPC9QUkU+Cis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTciIGhyZWY9IiNUT0MxIj5OT04tUFJJTlRJTkcgQ0hBUkFDVEVSUzwvYT48YnI+Cis8UD4KK1doZW4gPGI+cGNyZTJ0ZXN0PC9iPiBpcyBvdXRwdXR0aW5nIHRleHQgaW4gdGhlIGNvbXBpbGVkIHZlcnNpb24gb2YgYSBwYXR0ZXJuLAorYnl0ZXMgb3RoZXIgdGhhbiAzMi0xMjYgYXJlIGFsd2F5cyB0cmVhdGVkIGFzIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzIGFuZCBhcmUKK3RoZXJlZm9yZSBzaG93biBhcyBoZXggZXNjYXBlcy4KKzwvUD4KKzxQPgorV2hlbiA8Yj5wY3JlMnRlc3Q8L2I+IGlzIG91dHB1dHRpbmcgdGV4dCB0aGF0IGlzIGEgbWF0Y2hlZCBwYXJ0IG9mIGEgc3ViamVjdAorc3RyaW5nLCBpdCBiZWhhdmVzIGluIHRoZSBzYW1lIHdheSwgdW5sZXNzIGEgZGlmZmVyZW50IGxvY2FsZSBoYXMgYmVlbiBzZXQgZm9yCit0aGUgcGF0dGVybiAodXNpbmcgdGhlIDxiPi9sb2NhbGU8L2I+IG1vZGlmaWVyKS4gSW4gdGhpcyBjYXNlLCB0aGUKKzxiPmlzcHJpbnQoKTwvYj4gZnVuY3Rpb24gaXMgdXNlZCB0byBkaXN0aW5ndWlzaCBwcmludGluZyBhbmQgbm9uLXByaW50aW5nCitjaGFyYWN0ZXJzLgorPGEgbmFtZT0ic2F2ZXJlc3RvcmUiPjwvYT48L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTgiIGhyZWY9IiNUT0MxIj5TQVZJTkcgQU5EIFJFU1RPUklORyBDT01QSUxFRCBQQVRURVJOUzwvYT48YnI+Cis8UD4KK0l0IGlzIHBvc3NpYmxlIHRvIHNhdmUgY29tcGlsZWQgcGF0dGVybnMgb24gZGlzYyBvciBlbHNld2hlcmUsIGFuZCByZWxvYWQgdGhlbQorbGF0ZXIsIHN1YmplY3QgdG8gYSBudW1iZXIgb2YgcmVzdHJpY3Rpb25zLiBKSVQgZGF0YSBjYW5ub3QgYmUgc2F2ZWQuIFRoZSBob3N0CitvbiB3aGljaCB0aGUgcGF0dGVybnMgYXJlIHJlbG9hZGVkIG11c3QgYmUgcnVubmluZyB0aGUgc2FtZSB2ZXJzaW9uIG9mIFBDUkUyLAord2l0aCB0aGUgc2FtZSBjb2RlIHVuaXQgd2lkdGgsIGFuZCBtdXN0IGFsc28gaGF2ZSB0aGUgc2FtZSBlbmRpYW5uZXNzLCBwb2ludGVyCit3aWR0aCBhbmQgUENSRTJfU0laRSB0eXBlLiBCZWZvcmUgY29tcGlsZWQgcGF0dGVybnMgY2FuIGJlIHNhdmVkIHRoZXkgbXVzdCBiZQorc2VyaWFsaXplZCwgdGhhdCBpcywgY29udmVydGVkIHRvIGEgc3RyZWFtIG9mIGJ5dGVzLiBBIHNpbmdsZSBieXRlIHN0cmVhbSBtYXkKK2NvbnRhaW4gYW55IG51bWJlciBvZiBjb21waWxlZCBwYXR0ZXJucywgYnV0IHRoZXkgbXVzdCBhbGwgdXNlIHRoZSBzYW1lCitjaGFyYWN0ZXIgdGFibGVzLiBBIHNpbmdsZSBjb3B5IG9mIHRoZSB0YWJsZXMgaXMgaW5jbHVkZWQgaW4gdGhlIGJ5dGUgc3RyZWFtCisoaXRzIHNpemUgaXMgMTA4OCBieXRlcykuCis8L1A+Cis8UD4KK1RoZSBmdW5jdGlvbnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCA8Yj5wY3JlMl9zZXJpYWxpemVfPC9iPiBhcmUgdXNlZAorZm9yIHNlcmlhbGl6aW5nIGFuZCBkZS1zZXJpYWxpemluZy4gVGhleSBhcmUgZGVzY3JpYmVkIGluIHRoZQorPGEgaHJlZj0icGNyZTJzZXJpYWxpemUuaHRtbCI+PGI+cGNyZTJzZXJpYWxpemU8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4gSW4gdGhpcyBzZWN0aW9uIHdlIGRlc2NyaWJlIHRoZSBmZWF0dXJlcyBvZiA8Yj5wY3JlMnRlc3Q8L2I+IHRoYXQKK2NhbiBiZSB1c2VkIHRvIHRlc3QgdGhlc2UgZnVuY3Rpb25zLgorPC9QPgorPFA+CitXaGVuIGEgcGF0dGVybiB3aXRoIDxiPnB1c2g8L2I+IG1vZGlmaWVyIGlzIHN1Y2Nlc3NmdWxseSBjb21waWxlZCwgaXQgaXMgcHVzaGVkCitvbnRvIGEgc3RhY2sgb2YgY29tcGlsZWQgcGF0dGVybnMsIGFuZCA8Yj5wY3JlMnRlc3Q8L2I+IGV4cGVjdHMgdGhlIG5leHQgbGluZSB0bworY29udGFpbiBhIG5ldyBwYXR0ZXJuIChvciBjb21tYW5kKSBpbnN0ZWFkIG9mIGEgc3ViamVjdCBsaW5lLiBCeSB0aGlzIG1lYW5zLCBhCitudW1iZXIgb2YgcGF0dGVybnMgY2FuIGJlIGNvbXBpbGVkIGFuZCByZXRhaW5lZC4gVGhlIDxiPnB1c2g8L2I+IG1vZGlmaWVyIGlzCitpbmNvbXBhdGlibGUgd2l0aCA8Yj5wb3NpeDwvYj4sIGFuZCBjb250cm9sIG1vZGlmaWVycyB0aGF0IGFjdCBhdCBtYXRjaCB0aW1lIGFyZQoraWdub3JlZCAod2l0aCBhIG1lc3NhZ2UpLiBUaGUgPGI+aml0dmVyaWZ5PC9iPiBtb2RpZmllciBhcHBsaWVzIG9ubHkgYXQgY29tcGlsZQordGltZS4gVGhlIGNvbW1hbmQKKzxwcmU+CisgICNzYXZlICYjNjA7ZmlsZW5hbWUmIzYyOworPC9wcmU+CitjYXVzZXMgYWxsIHRoZSBzdGFja2VkIHBhdHRlcm5zIHRvIGJlIHNlcmlhbGl6ZWQgYW5kIHRoZSByZXN1bHQgd3JpdHRlbiB0byB0aGUKK25hbWVkIGZpbGUuIEFmdGVyd2FyZHMsIGFsbCB0aGUgc3RhY2tlZCBwYXR0ZXJucyBhcmUgZnJlZWQuIFRoZSBjb21tYW5kCis8cHJlPgorICAjbG9hZCAmIzYwO2ZpbGVuYW1lJiM2MjsKKzwvcHJlPgorcmVhZHMgdGhlIGRhdGEgaW4gdGhlIGZpbGUsIGFuZCB0aGVuIGFycmFuZ2VzIGZvciBpdCB0byBiZSBkZS1zZXJpYWxpemVkLCB3aXRoCit0aGUgcmVzdWx0aW5nIGNvbXBpbGVkIHBhdHRlcm5zIGFkZGVkIHRvIHRoZSBwYXR0ZXJuIHN0YWNrLiBUaGUgcGF0dGVybiBvbiB0aGUKK3RvcCBvZiB0aGUgc3RhY2sgY2FuIGJlIHJldHJpZXZlZCBieSB0aGUgI3BvcCBjb21tYW5kLCB3aGljaCBtdXN0IGJlIGZvbGxvd2VkCitieSBsaW5lcyBvZiBzdWJqZWN0cyB0aGF0IGFyZSB0byBiZSBtYXRjaGVkIHdpdGggdGhlIHBhdHRlcm4sIHRlcm1pbmF0ZWQgYXMKK3VzdWFsIGJ5IGFuIGVtcHR5IGxpbmUgb3IgZW5kIG9mIGZpbGUuIFRoaXMgY29tbWFuZCBtYXkgYmUgZm9sbG93ZWQgYnkgYQorbW9kaWZpZXIgbGlzdCBjb250YWluaW5nIG9ubHkKKzxhIGhyZWY9IiNjb250cm9sbW9kaWZpZXJzIj5jb250cm9sIG1vZGlmaWVyczwvYT4KK3RoYXQgYWN0IGFmdGVyIGEgcGF0dGVybiBoYXMgYmVlbiBjb21waWxlZC4gSW4gcGFydGljdWxhciwgPGI+aGV4PC9iPiwKKzxiPnBvc2l4PC9iPiwgYW5kIDxiPnB1c2g8L2I+IGFyZSBub3QgYWxsb3dlZCwgbm9yIGFyZSBhbnkKKzxhIGhyZWY9IiNvcHRpb25tb2RpZmllcnMiPm9wdGlvbi1zZXR0aW5nIG1vZGlmaWVycy48L2E+CitUaGUgSklUIG1vZGlmaWVycyBhcmUsIGhvd2V2ZXIgcGVybWl0dGVkLiBIZXJlIGlzIGFuIGV4YW1wbGUgdGhhdCBzYXZlcyBhbmQKK3JlbG9hZHMgdHdvIHBhdHRlcm5zLgorPHByZT4KKyAgL2FiYy9wdXNoCisgIC94eXovcHVzaAorICAjc2F2ZSB0ZW1wZmlsZQorICAjbG9hZCB0ZW1wZmlsZQorICAjcG9wIGluZm8KKyAgeHl6CisKKyAgI3BvcCBqaXQsYmluY29kZQorICBhYmMKKzwvcHJlPgorSWYgPGI+aml0dmVyaWZ5PC9iPiBpcyB1c2VkIHdpdGggI3BvcCwgaXQgZG9lcyBub3QgYXV0b21hdGljYWxseSBpbXBseQorPGI+aml0PC9iPiwgd2hpY2ggaXMgZGlmZmVyZW50IGJlaGF2aW91ciBmcm9tIHdoZW4gaXQgaXMgdXNlZCBvbiBhIHBhdHRlcm4uCis8L1A+Cis8YnI+PGEgbmFtZT0iU0VDMTkiIGhyZWY9IiNUT0MxIj5TRUUgQUxTTzwvYT48YnI+Cis8UD4KKzxiPnBjcmUyPC9iPigzKSwgPGI+cGNyZTJhcGk8L2I+KDMpLCA8Yj5wY3JlMmNhbGxvdXQ8L2I+KDMpLAorPGI+cGNyZTJqaXQ8L2I+LCA8Yj5wY3JlMm1hdGNoaW5nPC9iPigzKSwgPGI+cGNyZTJwYXJ0aWFsPC9iPihkKSwKKzxiPnBjcmUycGF0dGVybjwvYj4oMyksIDxiPnBjcmUyc2VyaWFsaXplPC9iPigzKS4KKzwvUD4KKzxicj48YSBuYW1lPSJTRUMyMCIgaHJlZj0iI1RPQzEiPkFVVEhPUjwvYT48YnI+Cis8UD4KK1BoaWxpcCBIYXplbAorPGJyPgorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorPGJyPgorQ2FtYnJpZGdlLCBFbmdsYW5kLgorPGJyPgorPC9QPgorPGJyPjxhIG5hbWU9IlNFQzIxIiBocmVmPSIjVE9DMSI+UkVWSVNJT048L2E+PGJyPgorPFA+CitMYXN0IHVwZGF0ZWQ6IDEyIERlY2VtYmVyIDIwMTUKKzxicj4KK0NvcHlyaWdodCAmY29weTsgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorPGJyPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL2h0bWwvcGNyZTJ1bmljb2RlLmh0bWwgYi9kaXN0Mi9kb2MvaHRtbC9wY3JlMnVuaWNvZGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWY1NWMzCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2h0bWwvcGNyZTJ1bmljb2RlLmh0bWwKQEAgLTAsMCArMSwyODUgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+cGNyZTJ1bmljb2RlIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5wY3JlMnVuaWNvZGUgbWFuIHBhZ2U8L2gxPgorPHA+CitSZXR1cm4gdG8gdGhlIDxhIGhyZWY9ImluZGV4Lmh0bWwiPlBDUkUyIGluZGV4IHBhZ2U8L2E+LgorPC9wPgorPHA+CitUaGlzIHBhZ2UgaXMgcGFydCBvZiB0aGUgUENSRTIgSFRNTCBkb2N1bWVudGF0aW9uLiBJdCB3YXMgZ2VuZXJhdGVkCithdXRvbWF0aWNhbGx5IGZyb20gdGhlIG9yaWdpbmFsIG1hbiBwYWdlLiBJZiB0aGVyZSBpcyBhbnkgbm9uc2Vuc2UgaW4gaXQsCitwbGVhc2UgY29uc3VsdCB0aGUgbWFuIHBhZ2UsIGluIGNhc2UgdGhlIGNvbnZlcnNpb24gd2VudCB3cm9uZy4KKzxicj4KKzxicj48Yj4KK1VOSUNPREUgQU5EIFVURiBTVVBQT1JUCis8L2I+PGJyPgorPFA+CitXaGVuIFBDUkUyIGlzIGJ1aWx0IHdpdGggVW5pY29kZSBzdXBwb3J0ICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIGl0IGhhcwora25vd2xlZGdlIG9mIFVuaWNvZGUgY2hhcmFjdGVyIHByb3BlcnRpZXMgYW5kIGNhbiBwcm9jZXNzIHRleHQgc3RyaW5ncyBpbgorVVRGLTgsIFVURi0xNiwgb3IgVVRGLTMyIGZvcm1hdCAoZGVwZW5kaW5nIG9uIHRoZSBjb2RlIHVuaXQgd2lkdGgpLiBIb3dldmVyLCBieQorZGVmYXVsdCwgUENSRTIgYXNzdW1lcyB0aGF0IG9uZSBjb2RlIHVuaXQgaXMgb25lIGNoYXJhY3Rlci4gVG8gcHJvY2VzcyBhCitwYXR0ZXJuIGFzIGEgVVRGIHN0cmluZywgd2hlcmUgYSBjaGFyYWN0ZXIgbWF5IHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBjb2RlIHVuaXQsCit5b3UgbXVzdCBjYWxsCis8YSBocmVmPSJwY3JlMl9jb21waWxlLmh0bWwiPjxiPnBjcmUyX2NvbXBpbGUoKTwvYj48L2E+Cit3aXRoIHRoZSBQQ1JFMl9VVEYgb3B0aW9uIGZsYWcsIG9yIHRoZSBwYXR0ZXJuIG11c3Qgc3RhcnQgd2l0aCB0aGUgc2VxdWVuY2UKKygqVVRGKS4gV2hlbiBlaXRoZXIgb2YgdGhlc2UgaXMgdGhlIGNhc2UsIGJvdGggdGhlIHBhdHRlcm4gYW5kIGFueSBzdWJqZWN0CitzdHJpbmdzIHRoYXQgYXJlIG1hdGNoZWQgYWdhaW5zdCBpdCBhcmUgdHJlYXRlZCBhcyBVVEYgc3RyaW5ncyBpbnN0ZWFkIG9mCitzdHJpbmdzIG9mIGluZGl2aWR1YWwgb25lLWNvZGUtdW5pdCBjaGFyYWN0ZXJzLgorPC9QPgorPFA+CitJZiB5b3UgZG8gbm90IG5lZWQgVW5pY29kZSBzdXBwb3J0IHlvdSBjYW4gYnVpbGQgUENSRTIgd2l0aG91dCBpdCwgaW4gd2hpY2gKK2Nhc2UgdGhlIGxpYnJhcnkgd2lsbCBiZSBzbWFsbGVyLgorPC9QPgorPGJyPjxiPgorVU5JQ09ERSBQUk9QRVJUWSBTVVBQT1JUCis8L2I+PGJyPgorPFA+CitXaGVuIFBDUkUyIGlzIGJ1aWx0IHdpdGggVW5pY29kZSBzdXBwb3J0LCB0aGUgZXNjYXBlIHNlcXVlbmNlcyBccHsuLn0sCitcUHsuLn0sIGFuZCBcWCBjYW4gYmUgdXNlZC4gVGhlIFVuaWNvZGUgcHJvcGVydGllcyB0aGF0IGNhbiBiZSB0ZXN0ZWQgYXJlCitsaW1pdGVkIHRvIHRoZSBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnRpZXMgc3VjaCBhcyBMdSBmb3IgYW4gdXBwZXIgY2FzZSBsZXR0ZXIKK29yIE5kIGZvciBhIGRlY2ltYWwgbnVtYmVyLCB0aGUgVW5pY29kZSBzY3JpcHQgbmFtZXMgc3VjaCBhcyBBcmFiaWMgb3IgSGFuLCBhbmQKK3RoZSBkZXJpdmVkIHByb3BlcnRpZXMgQW55IGFuZCBMJi4gRnVsbCBsaXN0cyBhcmUgZ2l2ZW4gaW4gdGhlCis8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCI+PGI+cGNyZTJwYXR0ZXJuPC9iPjwvYT4KK2FuZAorPGEgaHJlZj0icGNyZTJzeW50YXguaHRtbCI+PGI+cGNyZTJzeW50YXg8L2I+PC9hPgorZG9jdW1lbnRhdGlvbi4gT25seSB0aGUgc2hvcnQgbmFtZXMgZm9yIHByb3BlcnRpZXMgYXJlIHN1cHBvcnRlZC4gRm9yIGV4YW1wbGUsCitccHtMfSBtYXRjaGVzIGEgbGV0dGVyLiBJdHMgUGVybCBzeW5vbnltLCBccHtMZXR0ZXJ9LCBpcyBub3Qgc3VwcG9ydGVkLgorRnVydGhlcm1vcmUsIGluIFBlcmwsIG1hbnkgcHJvcGVydGllcyBtYXkgb3B0aW9uYWxseSBiZSBwcmVmaXhlZCBieSAiSXMiLCBmb3IKK2NvbXBhdGliaWxpdHkgd2l0aCBQZXJsIDUuNi4gUENSRSBkb2VzIG5vdCBzdXBwb3J0IHRoaXMuCis8L1A+Cis8YnI+PGI+CitXSURFIENIQVJBQ1RFUlMgQU5EIFVURiBNT0RFUworPC9iPjxicj4KKzxQPgorQ29kZXBvaW50cyBsZXNzIHRoYW4gMjU2IGNhbiBiZSBzcGVjaWZpZWQgaW4gcGF0dGVybnMgYnkgZWl0aGVyIGJyYWNlZCBvcgordW5icmFjZWQgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlcyAoZm9yIGV4YW1wbGUsIFx4e2IzfSBvciBceGIzKS4gTGFyZ2VyCit2YWx1ZXMgaGF2ZSB0byB1c2UgYnJhY2VkIHNlcXVlbmNlcy4gVW5icmFjZWQgb2N0YWwgY29kZSBwb2ludHMgdXAgdG8gXDc3NyBhcmUKK2Fsc28gcmVjb2duaXplZDsgbGFyZ2VyIG9uZXMgY2FuIGJlIGNvZGVkIHVzaW5nIFxvey4uLn0uCis8L1A+Cis8UD4KK0luIFVURiBtb2RlcywgcmVwZWF0IHF1YW50aWZpZXJzIGFwcGx5IHRvIGNvbXBsZXRlIFVURiBjaGFyYWN0ZXJzLCBub3QgdG8KK2luZGl2aWR1YWwgY29kZSB1bml0cy4KKzwvUD4KKzxQPgorSW4gVVRGIG1vZGVzLCB0aGUgZG90IG1ldGFjaGFyYWN0ZXIgbWF0Y2hlcyBvbmUgVVRGIGNoYXJhY3RlciBpbnN0ZWFkIG9mIGEKK3NpbmdsZSBjb2RlIHVuaXQuCis8L1A+Cis8UD4KK1RoZSBlc2NhcGUgc2VxdWVuY2UgXEMgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggYSBzaW5nbGUgY29kZSB1bml0LCBpbiBhIFVURiBtb2RlLAorYnV0IGl0cyB1c2UgY2FuIGxlYWQgdG8gc29tZSBzdHJhbmdlIGVmZmVjdHMgYmVjYXVzZSBpdCBicmVha3MgdXAgbXVsdGktdW5pdAorY2hhcmFjdGVycyAoc2VlIHRoZSBkZXNjcmlwdGlvbiBvZiBcQyBpbiB0aGUKKzxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sIj48Yj5wY3JlMnBhdHRlcm48L2I+PC9hPgorZG9jdW1lbnRhdGlvbikuIFRoZSB1c2Ugb2YgXEMgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcKK2Z1bmN0aW9uIDxiPnBjcmUyX2RmYV9tYXRjaCgpPC9iPiB3aGVuIGluIFVURiBtb2RlLiBJdHMgdXNlIHByb3Zva2VzIGEKK21hdGNoLXRpbWUgZXJyb3IuIFRoZSBKSVQgb3B0aW1pemF0aW9uIGFsc28gZG9lcyBub3Qgc3VwcG9ydCBcQyBpbiBVVEYgbW9kZS4KK0lmIEpJVCBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIGZvciBhIFVURiBwYXR0ZXJuIHRoYXQgY29udGFpbnMgXEMsIGl0IHdpbGwKK25vdCBzdWNjZWVkLCBhbmQgc28gdGhlIG1hdGNoaW5nIHdpbGwgYmUgY2FycmllZCBvdXQgYnkgdGhlIG5vcm1hbCBpbnRlcnByZXRpdmUKK2Z1bmN0aW9uLgorPC9QPgorPFA+CitUaGUgY2hhcmFjdGVyIGVzY2FwZXMgXGIsIFxCLCBcZCwgXEQsIFxzLCBcUywgXHcsIGFuZCBcVyBjb3JyZWN0bHkgdGVzdAorY2hhcmFjdGVycyBvZiBhbnkgY29kZSB2YWx1ZSwgYnV0LCBieSBkZWZhdWx0LCB0aGUgY2hhcmFjdGVycyB0aGF0IFBDUkUyCityZWNvZ25pemVzIGFzIGRpZ2l0cywgc3BhY2VzLCBvciB3b3JkIGNoYXJhY3RlcnMgcmVtYWluIHRoZSBzYW1lIHNldCBhcyBpbgorbm9uLVVURiBtb2RlLCBhbGwgd2l0aCBjb2RlIHBvaW50cyBsZXNzIHRoYW4gMjU2LiBUaGlzIHJlbWFpbnMgdHJ1ZSBldmVuIHdoZW4KK1BDUkUyIGlzIGJ1aWx0IHRvIGluY2x1ZGUgVW5pY29kZSBzdXBwb3J0LCBiZWNhdXNlIHRvIGRvIG90aGVyd2lzZSB3b3VsZCBzbG93Citkb3duIG1hdGNoaW5nIGluIG1hbnkgY29tbW9uIGNhc2VzLiBOb3RlIHRoYXQgdGhpcyBhbHNvIGFwcGxpZXMgdG8gXGIKK2FuZCBcQiwgYmVjYXVzZSB0aGV5IGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIFx3IGFuZCBcVy4gSWYgeW91IHdhbnQKK3RvIHRlc3QgZm9yIGEgd2lkZXIgc2Vuc2Ugb2YsIHNheSwgImRpZ2l0IiwgeW91IGNhbiB1c2UgZXhwbGljaXQgVW5pY29kZQorcHJvcGVydHkgdGVzdHMgc3VjaCBhcyBccHtOZH0uIEFsdGVybmF0aXZlbHksIGlmIHlvdSBzZXQgdGhlIFBDUkUyX1VDUCBvcHRpb24sCit0aGUgd2F5IHRoYXQgdGhlIGNoYXJhY3RlciBlc2NhcGVzIHdvcmsgaXMgY2hhbmdlZCBzbyB0aGF0IFVuaWNvZGUgcHJvcGVydGllcworYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGNoYXJhY3RlcnMgbWF0Y2guIFRoZXJlIGFyZSBtb3JlIGRldGFpbHMgaW4gdGhlCitzZWN0aW9uIG9uCis8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCNnZW5lcmljY2hhcnR5cGVzIj5nZW5lcmljIGNoYXJhY3RlciB0eXBlczwvYT4KK2luIHRoZQorPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwiPjxiPnBjcmUycGF0dGVybjwvYj48L2E+Citkb2N1bWVudGF0aW9uLgorPC9QPgorPFA+CitTaW1pbGFybHksIGNoYXJhY3RlcnMgdGhhdCBtYXRjaCB0aGUgUE9TSVggbmFtZWQgY2hhcmFjdGVyIGNsYXNzZXMgYXJlIGFsbAorbG93LXZhbHVlZCBjaGFyYWN0ZXJzLCB1bmxlc3MgdGhlIFBDUkUyX1VDUCBvcHRpb24gaXMgc2V0LgorPC9QPgorPFA+CitIb3dldmVyLCB0aGUgc3BlY2lhbCBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCB3aGl0ZSBzcGFjZSBtYXRjaGluZyBlc2NhcGVzIChcaCwKK1xILCBcdiwgYW5kIFxWKSBkbyBtYXRjaCBhbGwgdGhlIGFwcHJvcHJpYXRlIFVuaWNvZGUgY2hhcmFjdGVycywgd2hldGhlciBvcgorbm90IFBDUkUyX1VDUCBpcyBzZXQuCis8L1A+Cis8UD4KK0Nhc2UtaW5zZW5zaXRpdmUgbWF0Y2hpbmcgaW4gVVRGIG1vZGUgbWFrZXMgdXNlIG9mIFVuaWNvZGUgcHJvcGVydGllcy4gQSBmZXcKK1VuaWNvZGUgY2hhcmFjdGVycyBzdWNoIGFzIEdyZWVrIHNpZ21hIGhhdmUgbW9yZSB0aGFuIHR3byBjb2RlcG9pbnRzIHRoYXQgYXJlCitjYXNlLWVxdWl2YWxlbnQsIGFuZCB0aGVzZSBhcmUgdHJlYXRlZCBhcyBzdWNoLgorPC9QPgorPGJyPjxiPgorVkFMSURJVFkgT0YgVVRGIFNUUklOR1MKKzwvYj48YnI+Cis8UD4KK1doZW4gdGhlIFBDUkUyX1VURiBvcHRpb24gaXMgc2V0LCB0aGUgc3RyaW5ncyBwYXNzZWQgYXMgcGF0dGVybnMgYW5kIHN1YmplY3RzCithcmUgKGJ5IGRlZmF1bHQpIGNoZWNrZWQgZm9yIHZhbGlkaXR5IG9uIGVudHJ5IHRvIHRoZSByZWxldmFudCBmdW5jdGlvbnMuCitJZiBhbiBpbnZhbGlkIFVURiBzdHJpbmcgaXMgcGFzc2VkLCBhbiBuZWdhdGl2ZSBlcnJvciBjb2RlIGlzIHJldHVybmVkLiBUaGUKK2NvZGUgdW5pdCBvZmZzZXQgdG8gdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXIgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBtYXRjaAorZGF0YSBibG9jayBieSBjYWxsaW5nIDxiPnBjcmUyX2dldF9zdGFydGNoYXIoKTwvYj4sIHdoaWNoIGlzIHVzZWQgZm9yIHRoaXMKK3B1cnBvc2UgYWZ0ZXIgYSBVVEYgZXJyb3IuCis8L1A+Cis8UD4KK1VURi0xNiBhbmQgVVRGLTMyIHN0cmluZ3MgY2FuIGluZGljYXRlIHRoZWlyIGVuZGlhbm5lc3MgYnkgc3BlY2lhbCBjb2RlIGtub3dzCithcyBhIGJ5dGUtb3JkZXIgbWFyayAoQk9NKS4gVGhlIFBDUkUyIGZ1bmN0aW9ucyBkbyBub3QgaGFuZGxlIHRoaXMsIGV4cGVjdGluZworc3RyaW5ncyB0byBiZSBpbiBob3N0IGJ5dGUgb3JkZXIuCis8L1A+Cis8UD4KK0EgVVRGIHN0cmluZyBpcyBjaGVja2VkIGJlZm9yZSBhbnkgb3RoZXIgcHJvY2Vzc2luZyB0YWtlcyBwbGFjZS4gSW4gdGhlIGNhc2Ugb2YKKzxiPnBjcmUyX21hdGNoKCk8L2I+IGFuZCA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4gY2FsbHMgd2l0aCBhIG5vbi16ZXJvIHN0YXJ0aW5nCitvZmZzZXQsIHRoZSBjaGVjayBpcyBhcHBsaWVkIG9ubHkgdG8gdGhhdCBwYXJ0IG9mIHRoZSBzdWJqZWN0IHRoYXQgY291bGQgYmUKK2luc3BlY3RlZCBkdXJpbmcgbWF0Y2hpbmcsIGFuZCB0aGVyZSBpcyBhIGNoZWNrIHRoYXQgdGhlIHN0YXJ0aW5nIG9mZnNldCBwb2ludHMKK3RvIHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgYSBjaGFyYWN0ZXIgb3IgdG8gdGhlIGVuZCBvZiB0aGUgc3ViamVjdC4gSWYgdGhlcmUKK2FyZSBubyBsb29rYmVoaW5kIGFzc2VydGlvbnMgaW4gdGhlIHBhdHRlcm4sIHRoZSBjaGVjayBzdGFydHMgYXQgdGhlIHN0YXJ0aW5nCitvZmZzZXQuIE90aGVyd2lzZSwgaXQgc3RhcnRzIGF0IHRoZSBsZW5ndGggb2YgdGhlIGxvbmdlc3QgbG9va2JlaGluZCBiZWZvcmUgdGhlCitzdGFydGluZyBvZmZzZXQsIG9yIGF0IHRoZSBzdGFydCBvZiB0aGUgc3ViamVjdCBpZiB0aGVyZSBhcmUgbm90IHRoYXQgbWFueQorY2hhcmFjdGVycyBiZWZvcmUgdGhlIHN0YXJ0aW5nIG9mZnNldC4gTm90ZSB0aGF0IHRoZSBzZXF1ZW5jZXMgXGIgYW5kIFxCIGFyZQorb25lLWNoYXJhY3RlciBsb29rYmVoaW5kcy4KKzwvUD4KKzxQPgorSW4gYWRkaXRpb24gdG8gY2hlY2tpbmcgdGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nLCB0aGVyZSBpcyBhIGNoZWNrIHRvIGVuc3VyZQordGhhdCBhbGwgY29kZSBwb2ludHMgbGllIGluIHRoZSByYW5nZSBVKzAgdG8gVSsxMEZGRkYsIGV4Y2x1ZGluZyB0aGUgc3Vycm9nYXRlCithcmVhLiBUaGUgc28tY2FsbGVkICJub24tY2hhcmFjdGVyIiBjb2RlIHBvaW50cyBhcmUgbm90IGV4Y2x1ZGVkIGJlY2F1c2UKK1VuaWNvZGUgY29ycmlnZW5kdW0gIzkgbWFrZXMgaXQgY2xlYXIgdGhhdCB0aGV5IHNob3VsZCBub3QgYmUuCis8L1A+Cis8UD4KK0NoYXJhY3RlcnMgaW4gdGhlICJTdXJyb2dhdGUgQXJlYSIgb2YgVW5pY29kZSBhcmUgcmVzZXJ2ZWQgZm9yIHVzZSBieSBVVEYtMTYsCit3aGVyZSB0aGV5IGFyZSB1c2VkIGluIHBhaXJzIHRvIGVuY29kZSBjb2RlIHBvaW50cyB3aXRoIHZhbHVlcyBncmVhdGVyIHRoYW4KKzB4RkZGRi4gVGhlIGNvZGUgcG9pbnRzIHRoYXQgYXJlIGVuY29kZWQgYnkgVVRGLTE2IHBhaXJzIGFyZSBhdmFpbGFibGUKK2luZGVwZW5kZW50bHkgaW4gdGhlIFVURi04IGFuZCBVVEYtMzIgZW5jb2RpbmdzLiAoSW4gb3RoZXIgd29yZHMsIHRoZSB3aG9sZQorc3Vycm9nYXRlIHRoaW5nIGlzIGEgZnVkZ2UgZm9yIFVURi0xNiB3aGljaCB1bmZvcnR1bmF0ZWx5IG1lc3NlcyB1cCBVVEYtOCBhbmQKK1VURi0zMi4pCis8L1A+Cis8UD4KK0luIHNvbWUgc2l0dWF0aW9ucywgeW91IG1heSBhbHJlYWR5IGtub3cgdGhhdCB5b3VyIHN0cmluZ3MgYXJlIHZhbGlkLCBhbmQKK3RoZXJlZm9yZSB3YW50IHRvIHNraXAgdGhlc2UgY2hlY2tzIGluIG9yZGVyIHRvIGltcHJvdmUgcGVyZm9ybWFuY2UsIGZvcgorZXhhbXBsZSBpbiB0aGUgY2FzZSBvZiBhIGxvbmcgc3ViamVjdCBzdHJpbmcgdGhhdCBpcyBiZWluZyBzY2FubmVkIHJlcGVhdGVkbHkuCitJZiB5b3Ugc2V0IHRoZSBQQ1JFMl9OT19VVEZfQ0hFQ0sgb3B0aW9uIGF0IGNvbXBpbGUgdGltZSBvciBhdCBtYXRjaCB0aW1lLAorUENSRTIgYXNzdW1lcyB0aGF0IHRoZSBwYXR0ZXJuIG9yIHN1YmplY3QgaXQgaXMgZ2l2ZW4gKHJlc3BlY3RpdmVseSkgY29udGFpbnMKK29ubHkgdmFsaWQgVVRGIGNvZGUgdW5pdCBzZXF1ZW5jZXMuCis8L1A+Cis8UD4KK1Bhc3NpbmcgUENSRTJfTk9fVVRGX0NIRUNLIHRvIDxiPnBjcmUyX2NvbXBpbGUoKTwvYj4ganVzdCBkaXNhYmxlcyB0aGUgY2hlY2sgZm9yCit0aGUgcGF0dGVybjsgaXQgZG9lcyBub3QgYWxzbyBhcHBseSB0byBzdWJqZWN0IHN0cmluZ3MuIElmIHlvdSB3YW50IHRvIGRpc2FibGUKK3RoZSBjaGVjayBmb3IgYSBzdWJqZWN0IHN0cmluZyB5b3UgbXVzdCBwYXNzIHRoaXMgb3B0aW9uIHRvIDxiPnBjcmUyX21hdGNoKCk8L2I+CitvciA8Yj5wY3JlMl9kZmFfbWF0Y2goKTwvYj4uCis8L1A+Cis8UD4KK0lmIHlvdSBwYXNzIGFuIGludmFsaWQgVVRGIHN0cmluZyB3aGVuIFBDUkUyX05PX1VURl9DSEVDSyBpcyBzZXQsIHRoZSByZXN1bHQKK2lzIHVuZGVmaW5lZCBhbmQgeW91ciBwcm9ncmFtIG1heSBjcmFzaCBvciBsb29wIGluZGVmaW5pdGVseS4KKzxhIG5hbWU9InV0ZjhzdHJpbmdzIj48L2E+PC9QPgorPGJyPjxiPgorRXJyb3JzIGluIFVURi04IHN0cmluZ3MKKzwvYj48YnI+Cis8UD4KK1RoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIGdpdmVuIGZvciBpbnZhbGlkIFVURi04IHN0cmluZ3M6Cis8cHJlPgorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjEKKyAgUENSRTJfRVJST1JfVVRGOF9FUlIyCisgIFBDUkUyX0VSUk9SX1VURjhfRVJSMworICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjQKKyAgUENSRTJfRVJST1JfVVRGOF9FUlI1Cis8L3ByZT4KK1RoZSBzdHJpbmcgZW5kcyB3aXRoIGEgdHJ1bmNhdGVkIFVURi04IGNoYXJhY3RlcjsgdGhlIGNvZGUgc3BlY2lmaWVzIGhvdyBtYW55CitieXRlcyBhcmUgbWlzc2luZyAoMSB0byA1KS4gQWx0aG91Z2ggUkZDIDM2MjkgcmVzdHJpY3RzIFVURi04IGNoYXJhY3RlcnMgdG8gYmUKK25vIGxvbmdlciB0aGFuIDQgYnl0ZXMsIHRoZSBlbmNvZGluZyBzY2hlbWUgKG9yaWdpbmFsbHkgZGVmaW5lZCBieSBSRkMgMjI3OSkKK2FsbG93cyBmb3IgdXAgdG8gNiBieXRlcywgYW5kIHRoaXMgaXMgY2hlY2tlZCBmaXJzdDsgaGVuY2UgdGhlIHBvc3NpYmlsaXR5IG9mCis0IG9yIDUgbWlzc2luZyBieXRlcy4KKzxwcmU+CisgIFBDUkUyX0VSUk9SX1VURjhfRVJSNgorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjcKKyAgUENSRTJfRVJST1JfVVRGOF9FUlI4CisgIFBDUkUyX0VSUk9SX1VURjhfRVJSOQorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjEwCis8L3ByZT4KK1RoZSB0d28gbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSAybmQsIDNyZCwgNHRoLCA1dGgsIG9yIDZ0aCBieXRlIG9mIHRoZQorY2hhcmFjdGVyIGRvIG5vdCBoYXZlIHRoZSBiaW5hcnkgdmFsdWUgMGIxMCAodGhhdCBpcywgZWl0aGVyIHRoZSBtb3N0CitzaWduaWZpY2FudCBiaXQgaXMgMCwgb3IgdGhlIG5leHQgYml0IGlzIDEpLgorPHByZT4KKyAgUENSRTJfRVJST1JfVVRGOF9FUlIxMQorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjEyCis8L3ByZT4KK0EgY2hhcmFjdGVyIHRoYXQgaXMgdmFsaWQgYnkgdGhlIFJGQyAyMjc5IHJ1bGVzIGlzIGVpdGhlciA1IG9yIDYgYnl0ZXMgbG9uZzsKK3RoZXNlIGNvZGUgcG9pbnRzIGFyZSBleGNsdWRlZCBieSBSRkMgMzYyOS4KKzxwcmU+CisgIFBDUkUyX0VSUk9SX1VURjhfRVJSMTMKKzwvcHJlPgorQSA0LWJ5dGUgY2hhcmFjdGVyIGhhcyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAweDEwZmZmOyB0aGVzZSBjb2RlIHBvaW50cyBhcmUKK2V4Y2x1ZGVkIGJ5IFJGQyAzNjI5LgorPHByZT4KKyAgUENSRTJfRVJST1JfVVRGOF9FUlIxNAorPC9wcmU+CitBIDMtYnl0ZSBjaGFyYWN0ZXIgaGFzIGEgdmFsdWUgaW4gdGhlIHJhbmdlIDB4ZDgwMCB0byAweGRmZmY7IHRoaXMgcmFuZ2Ugb2YKK2NvZGUgcG9pbnRzIGFyZSByZXNlcnZlZCBieSBSRkMgMzYyOSBmb3IgdXNlIHdpdGggVVRGLTE2LCBhbmQgc28gYXJlIGV4Y2x1ZGVkCitmcm9tIFVURi04LgorPHByZT4KKyAgUENSRTJfRVJST1JfVVRGOF9FUlIxNQorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE2CisgIFBDUkUyX0VSUk9SX1VURjhfRVJSMTcKKyAgUENSRTJfRVJST1JfVVRGOF9FUlIxOAorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE5Cis8L3ByZT4KK0EgMi0sIDMtLCA0LSwgNS0sIG9yIDYtYnl0ZSBjaGFyYWN0ZXIgaXMgIm92ZXJsb25nIiwgdGhhdCBpcywgaXQgY29kZXMgZm9yIGEKK3ZhbHVlIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGZld2VyIGJ5dGVzLCB3aGljaCBpcyBpbnZhbGlkLiBGb3IgZXhhbXBsZSwKK3RoZSB0d28gYnl0ZXMgMHhjMCwgMHhhZSBnaXZlIHRoZSB2YWx1ZSAweDJlLCB3aG9zZSBjb3JyZWN0IGNvZGluZyB1c2VzIGp1c3QKK29uZSBieXRlLgorPHByZT4KKyAgUENSRTJfRVJST1JfVVRGOF9FUlIyMAorPC9wcmU+CitUaGUgdHdvIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgZmlyc3QgYnl0ZSBvZiBhIGNoYXJhY3RlciBoYXZlIHRoZSBiaW5hcnkKK3ZhbHVlIDBiMTAgKHRoYXQgaXMsIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBpcyAxIGFuZCB0aGUgc2Vjb25kIGlzIDApLiBTdWNoIGEKK2J5dGUgY2FuIG9ubHkgdmFsaWRseSBvY2N1ciBhcyB0aGUgc2Vjb25kIG9yIHN1YnNlcXVlbnQgYnl0ZSBvZiBhIG11bHRpLWJ5dGUKK2NoYXJhY3Rlci4KKzxwcmU+CisgIFBDUkUyX0VSUk9SX1VURjhfRVJSMjEKKzwvcHJlPgorVGhlIGZpcnN0IGJ5dGUgb2YgYSBjaGFyYWN0ZXIgaGFzIHRoZSB2YWx1ZSAweGZlIG9yIDB4ZmYuIFRoZXNlIHZhbHVlcyBjYW4KK25ldmVyIG9jY3VyIGluIGEgdmFsaWQgVVRGLTggc3RyaW5nLgorPGEgbmFtZT0idXRmMTZzdHJpbmdzIj48L2E+PC9QPgorPGJyPjxiPgorRXJyb3JzIGluIFVURi0xNiBzdHJpbmdzCis8L2I+PGJyPgorPFA+CitUaGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGFyZSBnaXZlbiBmb3IgaW52YWxpZCBVVEYtMTYgc3RyaW5nczoKKzxwcmU+CisgIFBDUkVfVVRGMTZfRVJSMSAgTWlzc2luZyBsb3cgc3Vycm9nYXRlIGF0IGVuZCBvZiBzdHJpbmcKKyAgUENSRV9VVEYxNl9FUlIyICBJbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9sbG93cyBoaWdoIHN1cnJvZ2F0ZQorICBQQ1JFX1VURjE2X0VSUjMgIElzb2xhdGVkIGxvdyBzdXJyb2dhdGUKKworPGEgbmFtZT0idXRmMzJzdHJpbmdzIj48L2E+PC9QUkU+Cis8L1A+Cis8YnI+PGI+CitFcnJvcnMgaW4gVVRGLTMyIHN0cmluZ3MKKzwvYj48YnI+Cis8UD4KK1RoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIGdpdmVuIGZvciBpbnZhbGlkIFVURi0zMiBzdHJpbmdzOgorPHByZT4KKyAgUENSRV9VVEYzMl9FUlIxICBTdXJyb2dhdGUgY2hhcmFjdGVyIChyYW5nZSBmcm9tIDB4ZDgwMCB0byAweGRmZmYpCisgIFBDUkVfVVRGMzJfRVJSMiAgQ29kZSBwb2ludCBpcyBncmVhdGVyIHRoYW4gMHgxMGZmZmYKKworPC9QUkU+Cis8L1A+Cis8YnI+PGI+CitBVVRIT1IKKzwvYj48YnI+Cis8UD4KK1BoaWxpcCBIYXplbAorPGJyPgorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorPGJyPgorQ2FtYnJpZGdlLCBFbmdsYW5kLgorPGJyPgorPC9QPgorPGJyPjxiPgorUkVWSVNJT04KKzwvYj48YnI+Cis8UD4KK0xhc3QgdXBkYXRlZDogMTYgT2N0b2JlciAyMDE1Cis8YnI+CitDb3B5cmlnaHQgJmNvcHk7IDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKzxicj4KKzxwPgorUmV0dXJuIHRvIHRoZSA8YSBocmVmPSJpbmRleC5odG1sIj5QQ1JFMiBpbmRleCBwYWdlPC9hPi4KKzwvcD4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9pbmRleC5odG1sLnNyYyBiL2Rpc3QyL2RvYy9pbmRleC5odG1sLnNyYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDU5NjU3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL2luZGV4Lmh0bWwuc3JjCkBAIC0wLDAgKzEsMjcwIEBACis8aHRtbD4KKzwhLS0gVGhpcyBpcyBhIG1hbnVhbGx5IG1haW50YWluZWQgZmlsZSB0aGF0IGlzIHRoZSByb290IG9mIHRoZSBIVE1MIHZlcnNpb24gb2YKKyAgICAgdGhlIFBDUkUyIGRvY3VtZW50YXRpb24uIFdoZW4gdGhlIEhUTUwgZG9jdW1lbnRzIGFyZSBidWlsdCBmcm9tIHRoZSBtYW4KKyAgICAgcGFnZSB2ZXJzaW9ucywgdGhlIGVudGlyZSBkb2MvaHRtbCBkaXJlY3RvcnkgaXMgZW1wdGllZCwgdGhpcyBmaWxlIGlzIHRoZW4KKyAgICAgY29waWVkIGludG8gZG9jL2h0bWwvaW5kZXguaHRtbCwgYW5kIHRoZSByZW1haW5pbmcgZmlsZXMgdGhlcmVpbiBhcmUKKyAgICAgY3JlYXRlZCBieSB0aGUgMTMyaHRtbCBzY3JpcHQuCistLT4KKzxoZWFkPgorPHRpdGxlPlBDUkUyIHNwZWNpZmljYXRpb248L3RpdGxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0iI0ZGRkZGRiIgdGV4dD0iIzAwMDA1QSIgbGluaz0iIzAwNjZGRiIgYWxpbms9IiMzMzk5RkYiIHZsaW5rPSIjMjIyMkJCIj4KKzxoMT5QZXJsLWNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAocmV2aXNlZCBBUEk6IFBDUkUyKTwvaDE+Cis8cD4KK1RoZSBIVE1MIGRvY3VtZW50YXRpb24gZm9yIFBDUkUyIGNvbnNpc3RzIG9mIGEgbnVtYmVyIG9mIHBhZ2VzIHRoYXQgYXJlIGxpc3RlZAorYmVsb3cgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLiBJZiB5b3UgYXJlIG5ldyB0byBQQ1JFMiwgcGxlYXNlIHJlYWQgdGhlIGZpcnN0IG9uZQorZmlyc3QuCis8L3A+CisKKzx0YWJsZT4KKzx0cj48dGQ+PGEgaHJlZj0icGNyZTIuaHRtbCI+cGNyZTI8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7SW50cm9kdWN0b3J5IHBhZ2U8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTItY29uZmlnLmh0bWwiPnBjcmUyLWNvbmZpZzwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtJbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5zdGFsbGF0aW9uIGNvbmZpZ3VyYXRpb248L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJhcGkuaHRtbCI+cGNyZTJhcGk8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7UENSRTIncyBuYXRpdmUgQVBJPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyYnVpbGQuaHRtbCI+cGNyZTJidWlsZDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtCdWlsZGluZyBQQ1JFMjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMmNhbGxvdXQuaHRtbCI+cGNyZTJjYWxsb3V0PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1RoZSA8aT5jYWxsb3V0PC9pPiBmYWNpbGl0eTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMmNvbXBhdC5odG1sIj5wY3JlMmNvbXBhdDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtDb21wYWJpbGl0eSB3aXRoIFBlcmw8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJkZW1vLmh0bWwiPnBjcmUyZGVtbzwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtBIGRlbW9uc3RyYXRpb24gQyBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgUENSRTIgbGlicmFyeTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMmdyZXAuaHRtbCI+cGNyZTJncmVwPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1RoZSA8Yj5wY3JlMmdyZXA8L2I+IGNvbW1hbmQ8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJqaXQuaHRtbCI+cGNyZTJqaXQ8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RGlzY3Vzc2lvbiBvZiB0aGUganVzdC1pbi10aW1lIG9wdGltaXphdGlvbiBzdXBwb3J0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUybGltaXRzLmh0bWwiPnBjcmUybGltaXRzPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0RldGFpbHMgb2Ygc2l6ZSBhbmQgb3RoZXIgbGltaXRzPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUybWF0Y2hpbmcuaHRtbCI+cGNyZTJtYXRjaGluZzwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtEaXNjdXNzaW9uIG9mIHRoZSB0d28gbWF0Y2hpbmcgYWxnb3JpdGhtczwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMnBhcnRpYWwuaHRtbCI+cGNyZTJwYXJ0aWFsPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1VzaW5nIFBDUkUyIGZvciBwYXJ0aWFsIG1hdGNoaW5nPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sIj5wY3JlMnBhdHRlcm48L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7U3BlY2lmaWNhdGlvbiBvZiB0aGUgcmVndWxhciBleHByZXNzaW9ucyBzdXBwb3J0ZWQgYnkgUENSRTI8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJwZXJmb3JtLmh0bWwiPnBjcmUycGVyZm9ybTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTb21lIGNvbW1lbnRzIG9uIHBlcmZvcm1hbmNlPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUycG9zaXguaHRtbCI+cGNyZTJwb3NpeDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtUaGUgUE9TSVggQVBJIHRvIHRoZSBQQ1JFMiA4LWJpdCBsaWJyYXJ5PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyc2FtcGxlLmh0bWwiPnBjcmUyc2FtcGxlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0Rpc2N1c3Npb24gb2YgdGhlIHBjcmUyZGVtbyBwcm9ncmFtPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyc2VyaWFsaXplLmh0bWwiPnBjcmUyc2VyaWFsaXplPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1NlcmlhbGl6aW5nIGZ1bmN0aW9ucyBmb3Igc2F2aW5nIHByZWNvbXBpbGVkIHBhdHRlcm5zPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyc3RhY2suaHRtbCI+cGNyZTJzdGFjazwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtEaXNjdXNzaW9uIG9mIFBDUkUyJ3Mgc3RhY2sgdXNhZ2U8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJzeW50YXguaHRtbCI+cGNyZTJzeW50YXg8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7U3ludGF4IHF1aWNrLXJlZmVyZW5jZSBzdW1tYXJ5PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUydGVzdC5odG1sIj5wY3JlMnRlc3Q8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7VGhlIDxiPnBjcmUydGVzdDwvYj4gY29tbWFuZCBmb3IgdGVzdGluZyBQQ1JFMjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCI+cGNyZTJ1bmljb2RlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0Rpc2N1c3Npb24gb2YgVW5pY29kZSBhbmQgVVRGLTgvVVRGLTE2L1VURi0zMiBzdXBwb3J0PC90ZD48L3RyPgorPC90YWJsZT4KKworPHA+CitUaGVyZSBhcmUgYWxzbyBpbmRpdmlkdWFsIHBhZ2VzIHRoYXQgc3VtbWFyaXplIHRoZSBpbnRlcmZhY2UgZm9yIGVhY2ggZnVuY3Rpb24KK2luIHRoZSBsaWJyYXJ5LgorPC9wPgorCis8dGFibGU+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfY2FsbG91dF9lbnVtZXJhdGUuaHRtbCI+cGNyZTJfY2FsbG91dF9lbnVtZXJhdGU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RW51bWVyYXRlIGNhbGxvdXRzIGluIGEgY29tcGlsZWQgcGF0dGVybjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9jb2RlX2ZyZWUuaHRtbCI+cGNyZTJfY29kZV9mcmVlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0ZyZWUgYSBjb21waWxlZCBwYXR0ZXJuPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2NvbXBpbGUuaHRtbCI+cGNyZTJfY29tcGlsZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtDb21waWxlIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm48L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfY29tcGlsZV9jb250ZXh0X2NvcHkuaHRtbCI+cGNyZTJfY29tcGlsZV9jb250ZXh0X2NvcHk8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7Q29weSBhIGNvbXBpbGUgY29udGV4dDwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlLmh0bWwiPnBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7Q3JlYXRlIGEgY29tcGlsZSBjb250ZXh0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlLmh0bWwiPnBjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0ZyZWUgYSBjb21waWxlIGNvbnRleHQ8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfY29uZmlnLmh0bWwiPnBjcmUyX2NvbmZpZzwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTaG93IGJ1aWxkLXRpbWUgY29uZmlndXJhdGlvbiBvcHRpb25zPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2RmYV9tYXRjaC5odG1sIj5wY3JlMl9kZmFfbWF0Y2g8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7TWF0Y2ggYSBjb21waWxlZCBwYXR0ZXJuIHRvIGEgc3ViamVjdCBzdHJpbmcKKyAgICAoREZBIGFsZ29yaXRobTsgPGk+bm90PC9pPiBQZXJsIGNvbXBhdGlibGUpPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2dlbmVyYWxfY29udGV4dF9jb3B5Lmh0bWwiPnBjcmUyX2dlbmVyYWxfY29udGV4dF9jb3B5PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0NvcHkgYSBnZW5lcmFsIGNvbnRleHQ8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZS5odG1sIj5wY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0NyZWF0ZSBhIGdlbmVyYWwgY29udGV4dDwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9nZW5lcmFsX2NvbnRleHRfZnJlZS5odG1sIj5wY3JlMl9nZW5lcmFsX2NvbnRleHRfZnJlZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtGcmVlIGEgZ2VuZXJhbCBjb250ZXh0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2dldF9lcnJvcl9tZXNzYWdlLmh0bWwiPnBjcmUyX2dldF9lcnJvcl9tZXNzYWdlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0ZyZWUgc3R1ZHkgZGF0YTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9nZXRfbWFyay5odG1sIj5wY3JlMl9nZXRfbWFyazwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtHZXQgYSAoKk1BUkspIG5hbWU8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfZ2V0X292ZWN0b3JfY291bnQuaHRtbCI+cGNyZTJfZ2V0X292ZWN0b3JfY291bnQ8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7R2V0IHRoZSBvdmVjdG9yIGNvdW50PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIuaHRtbCI+cGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcjwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtHZXQgYSBwb2ludGVyIHRvIHRoZSBvdmVjdG9yPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2dldF9zdGFydGNoYXIuaHRtbCI+cGNyZTJfZ2V0X3N0YXJ0Y2hhcjwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtHZXQgdGhlIHN0YXJ0aW5nIGNoYXJhY3RlciBvZmZzZXQ8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfaml0X2NvbXBpbGUuaHRtbCI+cGNyZTJfaml0X2NvbXBpbGU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7UHJvY2VzcyBhIGNvbXBpbGVkIHBhdHRlcm4gd2l0aCB0aGUgSklUIGNvbXBpbGVyPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkuaHRtbCI+cGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtGcmVlIHVudXNlZCBKSVQgbWVtb3J5PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2ppdF9tYXRjaC5odG1sIj5wY3JlMl9qaXRfbWF0Y2g8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RmFzdCBwYXRoIGludGVyZmFjZSB0byBKSVQgbWF0Y2hpbmc8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfaml0X3N0YWNrX2Fzc2lnbi5odG1sIj5wY3JlMl9qaXRfc3RhY2tfYXNzaWduPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0Fzc2lnbiBzdGFjayBmb3IgSklUIG1hdGNoaW5nPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2ppdF9zdGFja19jcmVhdGUuaHRtbCI+cGNyZTJfaml0X3N0YWNrX2NyZWF0ZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtDcmVhdGUgYSBzdGFjayBmb3IgSklUIG1hdGNoaW5nPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX2ppdF9zdGFja19mcmVlLmh0bWwiPnBjcmUyX2ppdF9zdGFja19mcmVlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0ZyZWUgYSBKSVQgbWF0Y2hpbmcgc3RhY2s8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfbWFrZXRhYmxlcy5odG1sIj5wY3JlMl9tYWtldGFibGVzPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0J1aWxkIGNoYXJhY3RlciB0YWJsZXMgaW4gY3VycmVudCBsb2NhbGU8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfbWF0Y2guaHRtbCI+cGNyZTJfbWF0Y2g8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7TWF0Y2ggYSBjb21waWxlZCBwYXR0ZXJuIHRvIGEgc3ViamVjdCBzdHJpbmcKKyAgICAoUGVybCBjb21wYXRpYmxlKTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9tYXRjaF9jb250ZXh0X2NvcHkuaHRtbCI+cGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0NvcHkgYSBtYXRjaCBjb250ZXh0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX21hdGNoX2NvbnRleHRfY3JlYXRlLmh0bWwiPnBjcmUyX21hdGNoX2NvbnRleHRfY3JlYXRlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0NyZWF0ZSBhIG1hdGNoIGNvbnRleHQ8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlLmh0bWwiPnBjcmUyX21hdGNoX2NvbnRleHRfZnJlZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtGcmVlIGEgbWF0Y2ggY29udGV4dDwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZS5odG1sIj5wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtDcmVhdGUgYSBtYXRjaCBkYXRhIGJsb2NrPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybi5odG1sIj5wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm48L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7Q3JlYXRlIGEgbWF0Y2ggZGF0YSBibG9jayBnZXR0aW5nIHNpemUgZnJvbSBwYXR0ZXJuPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX21hdGNoX2RhdGFfZnJlZS5odG1sIj5wY3JlMl9tYXRjaF9kYXRhX2ZyZWU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RnJlZSBhIG1hdGNoIGRhdGEgYmxvY2s8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfcGF0dGVybl9pbmZvLmh0bWwiPnBjcmUyX3BhdHRlcm5faW5mbzwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtFeHRyYWN0IGluZm9ybWF0aW9uIGFib3V0IGEgcGF0dGVybjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zZXJpYWxpemVfZGVjb2RlLmh0bWwiPnBjcmUyX3NlcmlhbGl6ZV9kZWNvZGU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RGVjb2RlIHNlcmlhbGl6ZWQgY29tcGlsZWQgcGF0dGVybnM8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2VyaWFsaXplX2VuY29kZS5odG1sIj5wY3JlMl9zZXJpYWxpemVfZW5jb2RlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1NlcmlhbGl6ZSBjb21waWxlZCBwYXR0ZXJucyBmb3Igc2F2ZS9yZXN0b3JlPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3NlcmlhbGl6ZV9mcmVlLmh0bWwiPnBjcmUyX3NlcmlhbGl6ZV9mcmVlPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0ZyZWUgc2VyaWFsaXplZCBjb21waWxlZCBwYXR0ZXJuczwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlcy5odG1sIj5wY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2RlczwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtHZXQgbnVtYmVyIG9mIHNlcmlhbGl6ZWQgY29tcGlsZWQgcGF0dGVybnM8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2V0X2Jzci5odG1sIj5wY3JlMl9zZXRfYnNyPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1NldCBcUiBjb252ZW50aW9uPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3NldF9jYWxsb3V0Lmh0bWwiPnBjcmUyX3NldF9jYWxsb3V0PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1NldCB1cCBhIGNhbGxvdXQgZnVuY3Rpb248L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXMuaHRtbCI+cGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXM8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7U2V0IGNoYXJhY3RlciB0YWJsZXM8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkLmh0bWwiPnBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTZXQgdXAgYSBjb21waWxlIHJlY3Vyc2lvbiBndWFyZCBmdW5jdGlvbjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zZXRfbWF0Y2hfbGltaXQuaHRtbCI+cGNyZTJfc2V0X21hdGNoX2xpbWl0PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1NldCB0aGUgbWF0Y2ggbGltaXQ8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aC5odG1sIj5wY3JlMl9zZXRfbWF4X3BhdHRlcm5fbGVuZ3RoPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1NldCB0aGUgbWF4aW11bSBsZW5ndGggb2YgcGF0dGVybjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zZXRfbmV3bGluZS5odG1sIj5wY3JlMl9zZXRfbmV3bGluZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTZXQgdGhlIG5ld2xpbmUgY29udmVudGlvbjwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0Lmh0bWwiPnBjcmUyX3NldF9vZmZzZXRfbGltaXQ8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7U2V0IHRoZSBvZmZzZXQgbGltaXQ8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0Lmh0bWwiPnBjcmUyX3NldF9wYXJlbnNfbmVzdF9saW1pdDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTZXQgdGhlIHBhcmVudGhlc2VzIG5lc3RpbmcgbGltaXQ8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdC5odG1sIj5wY3JlMl9zZXRfcmVjdXJzaW9uX2xpbWl0PC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO1NldCB0aGUgbWF0Y2ggcmVjdXJzaW9uIGxpbWl0PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3NldF9yZWN1cnNpb25fbWVtb3J5X21hbmFnZW1lbnQuaHRtbCI+cGNyZTJfc2V0X3JlY3Vyc2lvbl9tZW1vcnlfbWFuYWdlbWVudDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtTZXQgbWF0Y2ggcmVjdXJzaW9uIG1lbW9yeSBtYW5hZ2VtZW50PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3N1YnN0aXR1dGUuaHRtbCI+cGNyZTJfc3Vic3RpdHV0ZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtNYXRjaCBhIGNvbXBpbGVkIHBhdHRlcm4gdG8gYSBzdWJqZWN0IHN0cmluZyBhbmQgZG8KKyAgICBzdWJzdGl0dXRpb25zPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZS5odG1sIj5wY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RXh0cmFjdCBuYW1lZCBzdWJzdHJpbmcgaW50byBnaXZlbiBidWZmZXI8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIuaHRtbCI+cGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXI8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RXh0cmFjdCBudW1iZXJlZCBzdWJzdHJpbmcgaW50byBnaXZlbiBidWZmZXI8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc3Vic3RyaW5nX2ZyZWUuaHRtbCI+cGNyZTJfc3Vic3RyaW5nX2ZyZWU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RnJlZSBleHRyYWN0ZWQgc3Vic3RyaW5nPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lLmh0bWwiPnBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0V4dHJhY3QgbmFtZWQgc3Vic3RyaW5nIGludG8gbmV3IG1lbW9yeTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyLmh0bWwiPnBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXI8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RXh0cmFjdCBudW1iZXJlZCBzdWJzdHJpbmcgaW50byBuZXcgbWVtb3J5PC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lLmh0bWwiPnBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0ZpbmQgbGVuZ3RoIG9mIG5hbWVkIHN1YnN0cmluZzwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyLmh0bWwiPnBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXI8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7RmluZCBsZW5ndGggb2YgbnVtYmVyZWQgc3Vic3RyaW5nPC90ZD48L3RyPgorCis8dHI+PHRkPjxhIGhyZWY9InBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUuaHRtbCI+cGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZTwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtGcmVlIGxpc3Qgb2YgZXh0cmFjdGVkIHN1YnN0cmluZ3M8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0Lmh0bWwiPnBjcmUyX3N1YnN0cmluZ19saXN0X2dldDwvYT48L3RkPgorICAgIDx0ZD4mbmJzcDsmbmJzcDtFeHRyYWN0IGFsbCBzdWJzdHJpbmdzIGludG8gbmV3IG1lbW9yeTwvdGQ+PC90cj4KKworPHRyPjx0ZD48YSBocmVmPSJwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4uaHRtbCI+cGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuPC9hPjwvdGQ+CisgICAgPHRkPiZuYnNwOyZuYnNwO0ZpbmQgdGFibGUgZW50cmllcyBmb3IgZ2l2ZW4gc3RyaW5nIG5hbWU8L3RkPjwvdHI+CisKKzx0cj48dGQ+PGEgaHJlZj0icGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUuaHRtbCI+cGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWU8L2E+PC90ZD4KKyAgICA8dGQ+Jm5ic3A7Jm5ic3A7Q29udmVydCBjYXB0dXJlZCBzdHJpbmcgbmFtZSB0byBudW1iZXI8L3RkPjwvdHI+Cis8L3RhYmxlPgorCis8L2h0bWw+CisKZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMi1jb25maWcuMSBiL2Rpc3QyL2RvYy9wY3JlMi1jb25maWcuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmEwYTA5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyLWNvbmZpZy4xCkBAIC0wLDAgKzEsODYgQEAKKy5USCBQQ1JFMi1DT05GSUcgMSAiMjggU2VwdGVtYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitwY3JlMi1jb25maWcgLSBwcm9ncmFtIHRvIHJldHVybiBQQ1JFMiBjb25maWd1cmF0aW9uCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisubmYKKy5CIHBjcmUyLWNvbmZpZyAgWy0tcHJlZml4XSBbLS1leGVjLXByZWZpeF0gWy0tdmVyc2lvbl0KKy5CICIgICAgICAgICAgICAgWy0tbGliczhdIFstLWxpYnMxNl0gWy0tbGliczMyXSBbLS1saWJzLXBvc2l4XSIKKy5CICIgICAgICAgICAgICAgWy0tY2ZsYWdzXSBbLS1jZmxhZ3MtcG9zaXhdIgorLmZpCisuCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitcZkJwY3JlMi1jb25maWdcZlAgcmV0dXJucyB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgaW5zdGFsbGVkIFBDUkUyIGxpYnJhcmllcworYW5kIHRoZSBvcHRpb25zIHJlcXVpcmVkIHRvIGNvbXBpbGUgYSBwcm9ncmFtIHRvIHVzZSB0aGVtLiBTb21lIG9mIHRoZSBvcHRpb25zCithcHBseSBvbmx5IHRvIHRoZSA4LWJpdCwgb3IgMTYtYml0LCBvciAzMi1iaXQgbGlicmFyaWVzLCByZXNwZWN0aXZlbHksIGFuZCBhcmUKK25vdCBhdmFpbGFibGUgZm9yIGxpYnJhcmllcyB0aGF0IGhhdmUgbm90IGJlZW4gYnVpbHQuIElmIGFuIHVuYXZhaWxhYmxlIG9wdGlvbgoraXMgZW5jb3VudGVyZWQsIHRoZSAidXNhZ2UiIGluZm9ybWF0aW9uIGlzIG91dHB1dC4KKy4KKy4KKy5TSCBPUFRJT05TCisucnMKKy5UUCAxMAorXGZCLS1wcmVmaXhcZlAKK1dyaXRlcyB0aGUgZGlyZWN0b3J5IHByZWZpeCB1c2VkIGluIHRoZSBQQ1JFMiBpbnN0YWxsYXRpb24gZm9yIGFyY2hpdGVjdHVyZQoraW5kZXBlbmRlbnQgZmlsZXMgKFxmSS91c3JcZlAgb24gbWFueSBzeXN0ZW1zLCBcZkkvdXNyL2xvY2FsXGZQIG9uIHNvbWUKK3N5c3RlbXMpIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisuVFAgMTAKK1xmQi0tZXhlYy1wcmVmaXhcZlAKK1dyaXRlcyB0aGUgZGlyZWN0b3J5IHByZWZpeCB1c2VkIGluIHRoZSBQQ1JFMiBpbnN0YWxsYXRpb24gZm9yIGFyY2hpdGVjdHVyZQorZGVwZW5kZW50IGZpbGVzIChub3JtYWxseSB0aGUgc2FtZSBhcyBcZkItLXByZWZpeFxmUCkgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KKy5UUCAxMAorXGZCLS12ZXJzaW9uXGZQCitXcml0ZXMgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBpbnN0YWxsZWQgUENSRTIgbGlicmFyaWVzIHRvIHRoZSBzdGFuZGFyZAorb3V0cHV0LgorLlRQIDEwCitcZkItLWxpYnM4XGZQCitXcml0ZXMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgcmVxdWlyZWQgdG8gbGluaword2l0aCB0aGUgOC1iaXQgUENSRTIgbGlicmFyeSAoXGZCLWxwY3JlMi04XGZQIG9uIG1hbnkgc3lzdGVtcykuCisuVFAgMTAKK1xmQi0tbGliczE2XGZQCitXcml0ZXMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgcmVxdWlyZWQgdG8gbGluaword2l0aCB0aGUgMTYtYml0IFBDUkUyIGxpYnJhcnkgKFxmQi1scGNyZTItMTZcZlAgb24gbWFueSBzeXN0ZW1zKS4KKy5UUCAxMAorXGZCLS1saWJzMzJcZlAKK1dyaXRlcyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyByZXF1aXJlZCB0byBsaW5rCit3aXRoIHRoZSAzMi1iaXQgUENSRTIgbGlicmFyeSAoXGZCLWxwY3JlMi0zMlxmUCBvbiBtYW55IHN5c3RlbXMpLgorLlRQIDEwCitcZkItLWxpYnMtcG9zaXhcZlAKK1dyaXRlcyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyByZXF1aXJlZCB0byBsaW5rIHdpdGgKK1BDUkUyJ3MgUE9TSVggQVBJIHdyYXBwZXIgbGlicmFyeSAoXGZCLWxwY3JlMi1wb3NpeFxmUCBcZkItbHBjcmUyLThcZlAgb24gbWFueQorc3lzdGVtcykuCisuVFAgMTAKK1xmQi0tY2ZsYWdzXGZQCitXcml0ZXMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgcmVxdWlyZWQgdG8gY29tcGlsZQorZmlsZXMgdGhhdCB1c2UgUENSRTIgKHRoaXMgbWF5IGluY2x1ZGUgc29tZSBcZkItSVxmUCBvcHRpb25zLCBidXQgaXMgYmxhbmsgb24KK21hbnkgc3lzdGVtcykuCisuVFAgMTAKK1xmQi0tY2ZsYWdzLXBvc2l4XGZQCitXcml0ZXMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCB0aGUgY29tbWFuZCBsaW5lIG9wdGlvbnMgcmVxdWlyZWQgdG8gY29tcGlsZQorZmlsZXMgdGhhdCB1c2UgUENSRTIncyBQT1NJWCBBUEkgd3JhcHBlciBsaWJyYXJ5ICh0aGlzIG1heSBpbmNsdWRlIHNvbWUKK1xmQi1JXGZQIG9wdGlvbnMsIGJ1dCBpcyBibGFuayBvbiBtYW55IHN5c3RlbXMpLgorLgorLgorLlNIICJTRUUgQUxTTyIKKy5ycworLnNwCitcZkJwY3JlMigzKVxmUAorLgorLgorLlNIIEFVVEhPUgorLnJzCisuc3AKK1RoaXMgbWFudWFsIHBhZ2Ugd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBNYXJrIEJha2VyIGZvciB0aGUgRGViaWFuIEdOVS9MaW51eAorc3lzdGVtLiBJdCBoYXMgYmVlbiBzdWJzZXF1ZW50bHkgcmV2aXNlZCBhcyBhIGdlbmVyaWMgUENSRTIgbWFuIHBhZ2UuCisuCisuCisuU0ggUkVWSVNJT04KKy5ycworLnNwCisubmYKK0xhc3QgdXBkYXRlZDogMjggU2VwdGVtYmVyIDIwMTQKKy5maQpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyLWNvbmZpZy50eHQgYi9kaXN0Mi9kb2MvcGNyZTItY29uZmlnLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGRlYTJhCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyLWNvbmZpZy50eHQKQEAgLTAsMCArMSw4MSBAQAorUENSRTItQ09ORklHKDEpICAgICAgICAgICAgIEdlbmVyYWwgQ29tbWFuZHMgTWFudWFsICAgICAgICAgICAgUENSRTItQ09ORklHKDEpCisKKworCitOQU1FCisgICAgICAgcGNyZTItY29uZmlnIC0gcHJvZ3JhbSB0byByZXR1cm4gUENSRTIgY29uZmlndXJhdGlvbgorCitTWU5PUFNJUworCisgICAgICAgcGNyZTItY29uZmlnIFstLXByZWZpeF0gWy0tZXhlYy1wcmVmaXhdIFstLXZlcnNpb25dCisgICAgICAgICAgICAgICAgICAgIFstLWxpYnM4XSBbLS1saWJzMTZdIFstLWxpYnMzMl0gWy0tbGlicy1wb3NpeF0KKyAgICAgICAgICAgICAgICAgICAgWy0tY2ZsYWdzXSBbLS1jZmxhZ3MtcG9zaXhdCisKKworREVTQ1JJUFRJT04KKworICAgICAgIHBjcmUyLWNvbmZpZyByZXR1cm5zIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBpbnN0YWxsZWQgUENSRTIgbGlicmFyaWVzCisgICAgICAgYW5kIHRoZSBvcHRpb25zIHJlcXVpcmVkIHRvIGNvbXBpbGUgYSBwcm9ncmFtIHRvIHVzZSB0aGVtLiBTb21lIG9mICB0aGUKKyAgICAgICBvcHRpb25zICBhcHBseSAgb25seSAgdG8gIHRoZSAgOC1iaXQsICBvciAgMTYtYml0LCBvciAzMi1iaXQgbGlicmFyaWVzLAorICAgICAgIHJlc3BlY3RpdmVseSwgYW5kIGFyZSBub3QgYXZhaWxhYmxlIGZvciBsaWJyYXJpZXMgdGhhdCAgaGF2ZSAgbm90ICBiZWVuCisgICAgICAgYnVpbHQuIElmIGFuIHVuYXZhaWxhYmxlIG9wdGlvbiBpcyBlbmNvdW50ZXJlZCwgdGhlICJ1c2FnZSIgaW5mb3JtYXRpb24KKyAgICAgICBpcyBvdXRwdXQuCisKKworT1BUSU9OUworCisgICAgICAgLS1wcmVmaXggIFdyaXRlcyB0aGUgZGlyZWN0b3J5IHByZWZpeCB1c2VkIGluICB0aGUgIFBDUkUyICBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgICAgICAgZm9yICBhcmNoaXRlY3R1cmUgIGluZGVwZW5kZW50ICBmaWxlcyAgKC91c3Igb24gbWFueSBzeXN0ZW1zLAorICAgICAgICAgICAgICAgICAvdXNyL2xvY2FsIG9uIHNvbWUgc3lzdGVtcykgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KKworICAgICAgIC0tZXhlYy1wcmVmaXgKKyAgICAgICAgICAgICAgICAgV3JpdGVzIHRoZSBkaXJlY3RvcnkgcHJlZml4IHVzZWQgaW4gIHRoZSAgUENSRTIgIGluc3RhbGxhdGlvbgorICAgICAgICAgICAgICAgICBmb3IgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBmaWxlcyAobm9ybWFsbHkgdGhlIHNhbWUgYXMgLS1wcmUtCisgICAgICAgICAgICAgICAgIGZpeCkgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4KKworICAgICAgIC0tdmVyc2lvbiBXcml0ZXMgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBpbnN0YWxsZWQgUENSRTIgbGlicmFyaWVzIHRvCisgICAgICAgICAgICAgICAgIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisKKyAgICAgICAtLWxpYnM4ICAgV3JpdGVzICB0byAgdGhlICBzdGFuZGFyZCAgb3V0cHV0ICB0aGUgIGNvbW1hbmQgIGxpbmUgb3B0aW9ucworICAgICAgICAgICAgICAgICByZXF1aXJlZCB0byBsaW5rIHdpdGggdGhlIDgtYml0IFBDUkUyIGxpYnJhcnkgICgtbHBjcmUyLTggIG9uCisgICAgICAgICAgICAgICAgIG1hbnkgc3lzdGVtcykuCisKKyAgICAgICAtLWxpYnMxNiAgV3JpdGVzICB0byAgdGhlICBzdGFuZGFyZCAgb3V0cHV0ICB0aGUgIGNvbW1hbmQgIGxpbmUgb3B0aW9ucworICAgICAgICAgICAgICAgICByZXF1aXJlZCB0byBsaW5rIHdpdGggdGhlIDE2LWJpdCBQQ1JFMiBsaWJyYXJ5ICgtbHBjcmUyLTE2IG9uCisgICAgICAgICAgICAgICAgIG1hbnkgc3lzdGVtcykuCisKKyAgICAgICAtLWxpYnMzMiAgV3JpdGVzICB0byAgdGhlICBzdGFuZGFyZCAgb3V0cHV0ICB0aGUgIGNvbW1hbmQgIGxpbmUgb3B0aW9ucworICAgICAgICAgICAgICAgICByZXF1aXJlZCB0byBsaW5rIHdpdGggdGhlIDMyLWJpdCBQQ1JFMiBsaWJyYXJ5ICgtbHBjcmUyLTMyIG9uCisgICAgICAgICAgICAgICAgIG1hbnkgc3lzdGVtcykuCisKKyAgICAgICAtLWxpYnMtcG9zaXgKKyAgICAgICAgICAgICAgICAgV3JpdGVzICB0byAgdGhlICBzdGFuZGFyZCAgb3V0cHV0ICB0aGUgIGNvbW1hbmQgIGxpbmUgb3B0aW9ucworICAgICAgICAgICAgICAgICByZXF1aXJlZCB0byBsaW5rICB3aXRoICBQQ1JFMidzICBQT1NJWCAgQVBJICB3cmFwcGVyICBsaWJyYXJ5CisgICAgICAgICAgICAgICAgICgtbHBjcmUyLXBvc2l4IC1scGNyZTItOCBvbiBtYW55IHN5c3RlbXMpLgorCisgICAgICAgLS1jZmxhZ3MgIFdyaXRlcyAgdG8gIHRoZSAgc3RhbmRhcmQgIG91dHB1dCAgdGhlICBjb21tYW5kICBsaW5lIG9wdGlvbnMKKyAgICAgICAgICAgICAgICAgcmVxdWlyZWQgdG8gY29tcGlsZSBmaWxlcyB0aGF0IHVzZSBQQ1JFMiAgKHRoaXMgIG1heSAgaW5jbHVkZQorICAgICAgICAgICAgICAgICBzb21lIC1JIG9wdGlvbnMsIGJ1dCBpcyBibGFuayBvbiBtYW55IHN5c3RlbXMpLgorCisgICAgICAgLS1jZmxhZ3MtcG9zaXgKKyAgICAgICAgICAgICAgICAgV3JpdGVzICB0byAgdGhlICBzdGFuZGFyZCAgb3V0cHV0ICB0aGUgIGNvbW1hbmQgIGxpbmUgb3B0aW9ucworICAgICAgICAgICAgICAgICByZXF1aXJlZCB0byBjb21waWxlIGZpbGVzIHRoYXQgdXNlIFBDUkUyJ3MgUE9TSVggQVBJICB3cmFwcGVyCisgICAgICAgICAgICAgICAgIGxpYnJhcnkgICh0aGlzICBtYXkgIGluY2x1ZGUgc29tZSAtSSBvcHRpb25zLCBidXQgaXMgYmxhbmsgb24KKyAgICAgICAgICAgICAgICAgbWFueSBzeXN0ZW1zKS4KKworCitTRUUgQUxTTworCisgICAgICAgcGNyZTIoMykKKworCitBVVRIT1IKKworICAgICAgIFRoaXMgbWFudWFsIHBhZ2Ugd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBNYXJrIEJha2VyICBmb3IgIHRoZSAgRGViaWFuCisgICAgICAgR05VL0xpbnV4ICBzeXN0ZW0uICBJdCBoYXMgYmVlbiBzdWJzZXF1ZW50bHkgcmV2aXNlZCBhcyBhIGdlbmVyaWMgUENSRTIKKyAgICAgICBtYW4gcGFnZS4KKworCitSRVZJU0lPTgorCisgICAgICAgTGFzdCB1cGRhdGVkOiAyOCBTZXB0ZW1iZXIgMjAxNApkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyLjMgYi9kaXN0Mi9kb2MvcGNyZTIuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTg0Y2UzCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyLjMKQEAgLTAsMCArMSwxOTQgQEAKKy5USCBQQ1JFMiAzICIxNiBPY3RvYmVyIDIwMTUiICJQQ1JFMiAxMC4yMSIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBJTlRST0RVQ1RJT04KKy5ycworLnNwCitQQ1JFMiBpcyB0aGUgbmFtZSB1c2VkIGZvciBhIHJldmlzZWQgQVBJIGZvciB0aGUgUENSRSBsaWJyYXJ5LCB3aGljaCBpcyBhIHNldAorb2YgZnVuY3Rpb25zLCB3cml0dGVuIGluIEMsIHRoYXQgaW1wbGVtZW50IHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nCit1c2luZyB0aGUgc2FtZSBzeW50YXggYW5kIHNlbWFudGljcyBhcyBQZXJsLCB3aXRoIGp1c3QgYSBmZXcgZGlmZmVyZW5jZXMuIFNvbWUKK2ZlYXR1cmVzIHRoYXQgYXBwZWFyZWQgaW4gUHl0aG9uIGFuZCB0aGUgb3JpZ2luYWwgUENSRSBiZWZvcmUgdGhleSBhcHBlYXJlZCBpbgorUGVybCBhcmUgYWxzbyBhdmFpbGFibGUgdXNpbmcgdGhlIFB5dGhvbiBzeW50YXguIFRoZXJlIGlzIGFsc28gc29tZSBzdXBwb3J0IGZvcgorb25lIG9yIHR3byAuTkVUIGFuZCBPbmlndXJ1bWEgc3ludGF4IGl0ZW1zLCBhbmQgdGhlcmUgYXJlIG9wdGlvbnMgZm9yCityZXF1ZXN0aW5nIHNvbWUgbWlub3IgY2hhbmdlcyB0aGF0IGdpdmUgYmV0dGVyIEVDTUFTY3JpcHQgKGFrYSBKYXZhU2NyaXB0KQorY29tcGF0aWJpbGl0eS4KKy5QCitUaGUgc291cmNlIGNvZGUgZm9yIFBDUkUyIGNhbiBiZSBjb21waWxlZCB0byBzdXBwb3J0IDgtYml0LCAxNi1iaXQsIG9yIDMyLWJpdAorY29kZSB1bml0cywgd2hpY2ggbWVhbnMgdGhhdCB1cCB0byB0aHJlZSBzZXBhcmF0ZSBsaWJyYXJpZXMgbWF5IGJlIGluc3RhbGxlZC4KK1RoZSBvcmlnaW5hbCB3b3JrIHRvIGV4dGVuZCBQQ1JFIHRvIDE2LWJpdCBhbmQgMzItYml0IGNvZGUgdW5pdHMgd2FzIGRvbmUgYnkKK1pvbHRhbiBIZXJjemVnIGFuZCBDaHJpc3RpYW4gUGVyc2NoLCByZXNwZWN0aXZlbHkuIEluIGFsbCB0aHJlZSBjYXNlcywgc3RyaW5ncworY2FuIGJlIGludGVycHJldGVkIGVpdGhlciBhcyBvbmUgY2hhcmFjdGVyIHBlciBjb2RlIHVuaXQsIG9yIGFzIFVURi1lbmNvZGVkCitVbmljb2RlLCB3aXRoIHN1cHBvcnQgZm9yIFVuaWNvZGUgZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0aWVzLiBVbmljb2RlIHN1cHBvcnQKK2lzIG9wdGlvbmFsIGF0IGJ1aWxkIHRpbWUgKGJ1dCBpcyB0aGUgZGVmYXVsdCkuIEhvd2V2ZXIsIHByb2Nlc3Npbmcgc3RyaW5ncyBhcworVVRGIGNvZGUgdW5pdHMgbXVzdCBiZSBlbmFibGVkIGV4cGxpY2l0bHkgYXQgcnVuIHRpbWUuIFRoZSB2ZXJzaW9uIG9mIFVuaWNvZGUKK2luIHVzZSBjYW4gYmUgZGlzY292ZXJlZCBieSBydW5uaW5nCisuc3AKKyAgcGNyZTJ0ZXN0IC1DCisuUAorVGhlIHRocmVlIGxpYnJhcmllcyBjb250YWluIGlkZW50aWNhbCBzZXRzIG9mIGZ1bmN0aW9ucywgd2l0aCBuYW1lcyBlbmRpbmcgaW4KK184LCBfMTYsIG9yIF8zMiwgcmVzcGVjdGl2ZWx5IChmb3IgZXhhbXBsZSwgXGZCcGNyZTJfY29tcGlsZV84KClcZlApLiBIb3dldmVyLAorYnkgZGVmaW5pbmcgUENSRTJfQ09ERV9VTklUX1dJRFRIIHRvIGJlIDgsIDE2LCBvciAzMiwgYSBwcm9ncmFtIHRoYXQgdXNlcyBqdXN0CitvbmUgY29kZSB1bml0IHdpZHRoIGNhbiBiZSB3cml0dGVuIHVzaW5nIGdlbmVyaWMgbmFtZXMgc3VjaCBhcworXGZCcGNyZTJfY29tcGlsZSgpXGZQLCBhbmQgdGhlIGRvY3VtZW50YXRpb24gaXMgd3JpdHRlbiBhc3N1bWluZyB0aGF0IHRoaXMgaXMKK3RoZSBjYXNlLgorLlAKK0luIGFkZGl0aW9uIHRvIHRoZSBQZXJsLWNvbXBhdGlibGUgbWF0Y2hpbmcgZnVuY3Rpb24sIFBDUkUyIGNvbnRhaW5zIGFuCithbHRlcm5hdGl2ZSBmdW5jdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHNhbWUgY29tcGlsZWQgcGF0dGVybnMgaW4gYSBkaWZmZXJlbnQKK3dheS4gSW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzLCB0aGUgYWx0ZXJuYXRpdmUgZnVuY3Rpb24gaGFzIHNvbWUgYWR2YW50YWdlcy4KK0ZvciBhIGRpc2N1c3Npb24gb2YgdGhlIHR3byBtYXRjaGluZyBhbGdvcml0aG1zLCBzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJtYXRjaGluZ1xmUAorLlwiCitwYWdlLgorLlAKK0RldGFpbHMgb2YgZXhhY3RseSB3aGljaCBQZXJsIHJlZ3VsYXIgZXhwcmVzc2lvbiBmZWF0dXJlcyBhcmUgYW5kIGFyZSBub3QKK3N1cHBvcnRlZCBieSBQQ1JFMiBhcmUgZ2l2ZW4gaW4gc2VwYXJhdGUgZG9jdW1lbnRzLiBTZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwYXR0ZXJuXGZQCisuXCIKK2FuZAorLlwiIEhSRUYKK1xmQnBjcmUyY29tcGF0XGZQCisuXCIKK3BhZ2VzLiBUaGVyZSBpcyBhIHN5bnRheCBzdW1tYXJ5IGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyc3ludGF4XGZQCisuXCIKK3BhZ2UuCisuUAorU29tZSBmZWF0dXJlcyBvZiBQQ1JFMiBjYW4gYmUgaW5jbHVkZWQsIGV4Y2x1ZGVkLCBvciBjaGFuZ2VkIHdoZW4gdGhlIGxpYnJhcnkKK2lzIGJ1aWx0LiBUaGUKKy5cIiBIUkVGCitcZkJwY3JlMl9jb25maWcoKVxmUAorLlwiCitmdW5jdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYSBjbGllbnQgdG8gZGlzY292ZXIgd2hpY2ggZmVhdHVyZXMgYXJlCithdmFpbGFibGUuIFRoZSBmZWF0dXJlcyB0aGVtc2VsdmVzIGFyZSBkZXNjcmliZWQgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJidWlsZFxmUAorLlwiCitwYWdlLiBEb2N1bWVudGF0aW9uIGFib3V0IGJ1aWxkaW5nIFBDUkUyIGZvciB2YXJpb3VzIG9wZXJhdGluZyBzeXN0ZW1zIGNhbiBiZQorZm91bmQgaW4gdGhlCisuXCIgSFRNTCA8YSBocmVmPSJSRUFETUUudHh0Ij4KKy5cIiA8L2E+CitcZkJSRUFETUVcZlAKKy5cIgorYW5kCisuXCIgSFRNTCA8YSBocmVmPSJOT04tQVVUT1RPT0xTLUJVSUxELnR4dCI+CisuXCIgPC9hPgorXGZCTk9OLUFVVE9UT09MU19CVUlMRFxmUAorLlwiCitmaWxlcyBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4KKy5QCitUaGUgbGlicmFyaWVzIGNvbnRhaW5zIGEgbnVtYmVyIG9mIHVuZG9jdW1lbnRlZCBpbnRlcm5hbCBmdW5jdGlvbnMgYW5kIGRhdGEKK3RhYmxlcyB0aGF0IGFyZSB1c2VkIGJ5IG1vcmUgdGhhbiBvbmUgb2YgdGhlIGV4cG9ydGVkIGV4dGVybmFsIGZ1bmN0aW9ucywgYnV0Cit3aGljaCBhcmUgbm90IGludGVuZGVkIGZvciB1c2UgYnkgZXh0ZXJuYWwgY2FsbGVycy4gVGhlaXIgbmFtZXMgYWxsIGJlZ2luIHdpdGgKKyJfcGNyZTIiLCB3aGljaCBob3BlZnVsbHkgd2lsbCBub3QgcHJvdm9rZSBhbnkgbmFtZSBjbGFzaGVzLiBJbiBzb21lCitlbnZpcm9ubWVudHMsIGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgd2hpY2ggZXh0ZXJuYWwgc3ltYm9scyBhcmUgZXhwb3J0ZWQKK3doZW4gYSBzaGFyZWQgbGlicmFyeSBpcyBidWlsdCwgYW5kIGluIHRoZXNlIGNhc2VzIHRoZSB1bmRvY3VtZW50ZWQgc3ltYm9scyBhcmUKK25vdCBleHBvcnRlZC4KKy4KKy4KKy5TSCAiU0VDVVJJVFkgQ09OU0lERVJBVElPTlMiCisucnMKKy5zcAorSWYgeW91IGFyZSB1c2luZyBQQ1JFMiBpbiBhIG5vbi1VVEYgYXBwbGljYXRpb24gdGhhdCBwZXJtaXRzIHVzZXJzIHRvIHN1cHBseQorYXJiaXRyYXJ5IHBhdHRlcm5zIGZvciBjb21waWxhdGlvbiwgeW91IHNob3VsZCBiZSBhd2FyZSBvZiBhIGZlYXR1cmUgdGhhdAorYWxsb3dzIHVzZXJzIHRvIHR1cm4gb24gVVRGIHN1cHBvcnQgZnJvbSB3aXRoaW4gYSBwYXR0ZXJuLiBGb3IgZXhhbXBsZSwgYW4KKzgtYml0IHBhdHRlcm4gdGhhdCBiZWdpbnMgd2l0aCAiKCpVVEYpIiB0dXJucyBvbiBVVEYtOCBtb2RlLCB3aGljaCBpbnRlcnByZXRzCitwYXR0ZXJucyBhbmQgc3ViamVjdHMgYXMgc3RyaW5ncyBvZiBVVEYtOCBjb2RlIHVuaXRzIGluc3RlYWQgb2YgaW5kaXZpZHVhbAorOC1iaXQgY2hhcmFjdGVycy4gVGhpcyBjYXVzZXMgYm90aCB0aGUgcGF0dGVybiBhbmQgYW55IGRhdGEgYWdhaW5zdCB3aGljaCBpdCBpcworbWF0Y2hlZCB0byBiZSBjaGVja2VkIGZvciBVVEYtOCB2YWxpZGl0eS4gSWYgdGhlIGRhdGEgc3RyaW5nIGlzIHZlcnkgbG9uZywgc3VjaAorYSBjaGVjayBtaWdodCB1c2Ugc3VmZmljaWVudGx5IG1hbnkgcmVzb3VyY2VzIGFzIHRvIGNhdXNlIHlvdXIgYXBwbGljYXRpb24gdG8KK2xvc2UgcGVyZm9ybWFuY2UuCisuUAorT25lIHdheSBvZiBndWFyZGluZyBhZ2FpbnN0IHRoaXMgcG9zc2liaWxpdHkgaXMgdG8gdXNlIHRoZQorXGZCcGNyZTJfcGF0dGVybl9pbmZvKClcZlAgZnVuY3Rpb24gdG8gY2hlY2sgdGhlIGNvbXBpbGVkIHBhdHRlcm4ncyBvcHRpb25zIGZvcgorUENSRTJfVVRGLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHNldCB0aGUgUENSRTJfTkVWRVJfVVRGIG9wdGlvbiB3aGVuIGNhbGxpbmcKK1xmQnBjcmUyX2NvbXBpbGUoKVxmUC4gVGhpcyBjYXVzZXMgYW4gY29tcGlsZSB0aW1lIGVycm9yIGlmIGEgcGF0dGVybiBjb250YWlucworYSBVVEYtc2V0dGluZyBzZXF1ZW5jZS4KKy5QCitUaGUgdXNlIG9mIFVuaWNvZGUgcHJvcGVydGllcyBmb3IgY2hhcmFjdGVyIHR5cGVzIHN1Y2ggYXMgXGVkIGNhbiBhbHNvIGJlCitlbmFibGVkIGZyb20gd2l0aGluIHRoZSBwYXR0ZXJuLCBieSBzcGVjaWZ5aW5nICIoKlVDUCkiLiBUaGlzIGZlYXR1cmUgY2FuIGJlCitkaXNhbGxvd2VkIGJ5IHNldHRpbmcgdGhlIFBDUkUyX05FVkVSX1VDUCBvcHRpb24uCisuUAorSWYgeW91ciBhcHBsaWNhdGlvbiBpcyBvbmUgdGhhdCBzdXBwb3J0cyBVVEYsIGJlIGF3YXJlIHRoYXQgdmFsaWRpdHkgY2hlY2tpbmcKK2NhbiB0YWtlIHRpbWUuIElmIHRoZSBzYW1lIGRhdGEgc3RyaW5nIGlzIHRvIGJlIG1hdGNoZWQgbWFueSB0aW1lcywgeW91IGNhbiB1c2UKK3RoZSBQQ1JFMl9OT19VVEZfQ0hFQ0sgb3B0aW9uIGZvciB0aGUgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IG1hdGNoZXMgdG8gYXZvaWQKK3J1bm5pbmcgcmVkdW5kYW50IGNoZWNrcy4KKy5QCitUaGUgdXNlIG9mIHRoZSBcZUMgZXNjYXBlIHNlcXVlbmNlIGluIGEgVVRGLTggb3IgVVRGLTE2IHBhdHRlcm4gY2FuIGxlYWQgdG8KK3Byb2JsZW1zLCBiZWNhdXNlIGl0IG1heSBsZWF2ZSB0aGUgY3VycmVudCBtYXRjaGluZyBwb2ludCBpbiB0aGUgbWlkZGxlIG9mIGEKK211bHRpLWNvZGUtdW5pdCBjaGFyYWN0ZXIuIFRoZSBQQ1JFMl9ORVZFUl9CQUNLU0xBU0hfQyBvcHRpb24gY2FuIGJlIHVzZWQgYnkgYW4KK2FwcGxpY2F0aW9uIHRvIGxvY2sgb3V0IHRoZSB1c2Ugb2YgXGVDLCBjYXVzaW5nIGEgY29tcGlsZS10aW1lIGVycm9yIGlmIGl0IGlzCitlbmNvdW50ZXJlZC4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBidWlsZCBQQ1JFMiB3aXRoIHRoZSB1c2Ugb2YgXGVDIHBlcm1hbmVudGx5CitkaXNhYmxlZC4KKy5QCitBbm90aGVyIHdheSB0aGF0IHBlcmZvcm1hbmNlIGNhbiBiZSBoaXQgaXMgYnkgcnVubmluZyBhIHBhdHRlcm4gdGhhdCBoYXMgYSB2ZXJ5CitsYXJnZSBzZWFyY2ggdHJlZSBhZ2FpbnN0IGEgc3RyaW5nIHRoYXQgd2lsbCBuZXZlciBtYXRjaC4gTmVzdGVkIHVubGltaXRlZAorcmVwZWF0cyBpbiBhIHBhdHRlcm4gYXJlIGEgY29tbW9uIGV4YW1wbGUuIFBDUkUyIHByb3ZpZGVzIHNvbWUgcHJvdGVjdGlvbgorYWdhaW5zdCB0aGlzOiBzZWUgdGhlIFxmQnBjcmUyX3NldF9tYXRjaF9saW1pdCgpXGZQIGZ1bmN0aW9uIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UuCisuCisuCisuU0ggIlVTRVIgRE9DVU1FTlRBVElPTiIKKy5ycworLnNwCitUaGUgdXNlciBkb2N1bWVudGF0aW9uIGZvciBQQ1JFMiBjb21wcmlzZXMgYSBudW1iZXIgb2YgZGlmZmVyZW50IHNlY3Rpb25zLiBJbgordGhlICJtYW4iIGZvcm1hdCwgZWFjaCBvZiB0aGVzZSBpcyBhIHNlcGFyYXRlICJtYW4gcGFnZSIuIEluIHRoZSBIVE1MIGZvcm1hdCwKK2VhY2ggaXMgYSBzZXBhcmF0ZSBwYWdlLCBsaW5rZWQgZnJvbSB0aGUgaW5kZXggcGFnZS4gSW4gdGhlIHBsYWluIHRleHQgZm9ybWF0LAordGhlIGRlc2NyaXB0aW9ucyBvZiB0aGUgXGZCcGNyZTJncmVwXGZQIGFuZCBcZkJwY3JlMnRlc3RcZlAgcHJvZ3JhbXMgYXJlIGluCitmaWxlcyBjYWxsZWQgXGZCcGNyZTJncmVwLnR4dFxmUCBhbmQgXGZCcGNyZTJ0ZXN0LnR4dFxmUCwgcmVzcGVjdGl2ZWx5LiBUaGUKK3JlbWFpbmluZyBzZWN0aW9ucywgZXhjZXB0IGZvciB0aGUgXGZCcGNyZTJkZW1vXGZQIHNlY3Rpb24gKHdoaWNoIGlzIGEgcHJvZ3JhbQorbGlzdGluZyksIGFuZCB0aGUgc2hvcnQgcGFnZXMgZm9yIGluZGl2aWR1YWwgZnVuY3Rpb25zLCBhcmUgY29uY2F0ZW5hdGVkIGluCitcZkJwY3JlMi50eHRcZlAsIGZvciBlYXNlIG9mIHNlYXJjaGluZy4gVGhlIHNlY3Rpb25zIGFyZSBhcyBmb2xsb3dzOgorLnNwCisgIHBjcmUyICAgICAgICAgICAgICB0aGlzIGRvY3VtZW50CisgIHBjcmUyLWNvbmZpZyAgICAgICBzaG93IFBDUkUyIGluc3RhbGxhdGlvbiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCisgIHBjcmUyYXBpICAgICAgICAgICBkZXRhaWxzIG9mIFBDUkUyJ3MgbmF0aXZlIEMgQVBJCisgIHBjcmUyYnVpbGQgICAgICAgICBidWlsZGluZyBQQ1JFMgorICBwY3JlMmNhbGxvdXQgICAgICAgZGV0YWlscyBvZiB0aGUgY2FsbG91dCBmZWF0dXJlCisgIHBjcmUyY29tcGF0ICAgICAgICBkaXNjdXNzaW9uIG9mIFBlcmwgY29tcGF0aWJpbGl0eQorICBwY3JlMmRlbW8gICAgICAgICAgYSBkZW1vbnN0cmF0aW9uIEMgcHJvZ3JhbSB0aGF0IHVzZXMgUENSRTIKKyAgcGNyZTJncmVwICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBcZkJwY3JlMmdyZXBcZlAgY29tbWFuZCAoOC1iaXQgb25seSkKKyAgcGNyZTJqaXQgICAgICAgICAgIGRpc2N1c3Npb24gb2YganVzdC1pbi10aW1lIG9wdGltaXphdGlvbiBzdXBwb3J0CisgIHBjcmUybGltaXRzICAgICAgICBkZXRhaWxzIG9mIHNpemUgYW5kIG90aGVyIGxpbWl0cworICBwY3JlMm1hdGNoaW5nICAgICAgZGlzY3Vzc2lvbiBvZiB0aGUgdHdvIG1hdGNoaW5nIGFsZ29yaXRobXMKKyAgcGNyZTJwYXJ0aWFsICAgICAgIGRldGFpbHMgb2YgdGhlIHBhcnRpYWwgbWF0Y2hpbmcgZmFjaWxpdHkKKy5cIiBKT0lOCisgIHBjcmUycGF0dGVybiAgICAgICBzeW50YXggYW5kIHNlbWFudGljcyBvZiBzdXBwb3J0ZWQgcmVndWxhcgorICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uIHBhdHRlcm5zCisgIHBjcmUycGVyZm9ybSAgICAgICBkaXNjdXNzaW9uIG9mIHBlcmZvcm1hbmNlIGlzc3VlcworICBwY3JlMnBvc2l4ICAgICAgICAgdGhlIFBPU0lYLWNvbXBhdGlibGUgQyBBUEkgZm9yIHRoZSA4LWJpdCBsaWJyYXJ5CisgIHBjcmUyc2FtcGxlICAgICAgICBkaXNjdXNzaW9uIG9mIHRoZSBwY3JlMmRlbW8gcHJvZ3JhbQorICBwY3JlMnN0YWNrICAgICAgICAgZGlzY3Vzc2lvbiBvZiBzdGFjayB1c2FnZQorICBwY3JlMnN5bnRheCAgICAgICAgcXVpY2sgc3ludGF4IHJlZmVyZW5jZQorICBwY3JlMnRlc3QgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIFxmQnBjcmUydGVzdFxmUCBjb21tYW5kCisgIHBjcmUydW5pY29kZSAgICAgICBkaXNjdXNzaW9uIG9mIFVuaWNvZGUgYW5kIFVURiBzdXBwb3J0Cisuc3AKK0luIHRoZSAibWFuIiBhbmQgSFRNTCBmb3JtYXRzLCB0aGVyZSBpcyBhbHNvIGEgc2hvcnQgcGFnZSBmb3IgZWFjaCBDIGxpYnJhcnkKK2Z1bmN0aW9uLCBsaXN0aW5nIGl0cyBhcmd1bWVudHMgYW5kIHJlc3VsdHMuCisuCisuCisuU0ggQVVUSE9SCisucnMKKy5zcAorLm5mCitQaGlsaXAgSGF6ZWwKK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKK0NhbWJyaWRnZSwgRW5nbGFuZC4KKy5maQorLlAKK1B1dHRpbmcgYW4gYWN0dWFsIGVtYWlsIGFkZHJlc3MgaGVyZSBpcyBhIHNwYW0gbWFnbmV0LiBJZiB5b3Ugd2FudCB0byBlbWFpbCBtZSwKK3VzZSBteSB0d28gaW5pdGlhbHMsIGZvbGxvd2VkIGJ5IHRoZSB0d28gZGlnaXRzIDEwLCBhdCB0aGUgZG9tYWluIGNhbS5hYy51ay4KKy4KKy4KKy5TSCBSRVZJU0lPTgorLnJzCisuc3AKKy5uZgorTGFzdCB1cGRhdGVkOiAxNiBPY3RvYmVyIDIwMTUKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTIudHh0IGIvZGlzdDIvZG9jL3BjcmUyLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGYyZDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyLnR4dApAQCAtMCwwICsxLDk3OTkgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGZpbGUgY29udGFpbnMgYSBjb25jYXRlbmF0aW9uIG9mIHRoZSBQQ1JFMiBtYW4gcGFnZXMsIGNvbnZlcnRlZCB0byBwbGFpbgordGV4dCBmb3JtYXQgZm9yIGVhc2Ugb2Ygc2VhcmNoaW5nIHdpdGggYSB0ZXh0IGVkaXRvciwgb3IgZm9yIHVzZSBvbiBzeXN0ZW1zCit0aGF0IGRvIG5vdCBoYXZlIGEgbWFuIHBhZ2UgcHJvY2Vzc29yLiBUaGUgc21hbGwgaW5kaXZpZHVhbCBmaWxlcyB0aGF0IGdpdmUKK3N5bm9wc2VzIG9mIGVhY2ggZnVuY3Rpb24gaW4gdGhlIGxpYnJhcnkgaGF2ZSBub3QgYmVlbiBpbmNsdWRlZC4gTmVpdGhlciBoYXMKK3RoZSBwY3JlMmRlbW8gcHJvZ3JhbS4gVGhlcmUgYXJlIHNlcGFyYXRlIHRleHQgZmlsZXMgZm9yIHRoZSBwY3JlMmdyZXAgYW5kCitwY3JlMnRlc3QgY29tbWFuZHMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1BDUkUyKDMpICAgICAgICAgICAgICAgICAgIExpYnJhcnkgRnVuY3Rpb25zIE1hbnVhbCAgICAgICAgICAgICAgICAgICBQQ1JFMigzKQorCisKKworTkFNRQorICAgICAgIFBDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorCitJTlRST0RVQ1RJT04KKworICAgICAgIFBDUkUyIGlzIHRoZSBuYW1lIHVzZWQgZm9yIGEgcmV2aXNlZCBBUEkgZm9yIHRoZSBQQ1JFIGxpYnJhcnksIHdoaWNoIGlzCisgICAgICAgYSBzZXQgb2YgZnVuY3Rpb25zLCB3cml0dGVuIGluIEMsICB0aGF0ICBpbXBsZW1lbnQgIHJlZ3VsYXIgIGV4cHJlc3Npb24KKyAgICAgICBwYXR0ZXJuIG1hdGNoaW5nIHVzaW5nIHRoZSBzYW1lIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzIFBlcmwsIHdpdGgganVzdAorICAgICAgIGEgZmV3IGRpZmZlcmVuY2VzLiBTb21lIGZlYXR1cmVzIHRoYXQgYXBwZWFyZWQgaW4gUHl0aG9uIGFuZCB0aGUgb3JpZ2ktCisgICAgICAgbmFsICBQQ1JFICBiZWZvcmUgIHRoZXkgIGFwcGVhcmVkICBpbiBQZXJsIGFyZSBhbHNvIGF2YWlsYWJsZSB1c2luZyB0aGUKKyAgICAgICBQeXRob24gc3ludGF4LiBUaGVyZSBpcyBhbHNvIHNvbWUgc3VwcG9ydCBmb3Igb25lIG9yIHR3byAuTkVUIGFuZCBPbmlnLQorICAgICAgIHVydW1hICBzeW50YXggIGl0ZW1zLCAgYW5kICB0aGVyZSBhcmUgb3B0aW9ucyBmb3IgcmVxdWVzdGluZyBzb21lIG1pbm9yCisgICAgICAgY2hhbmdlcyB0aGF0IGdpdmUgYmV0dGVyIEVDTUFTY3JpcHQgKGFrYSBKYXZhU2NyaXB0KSBjb21wYXRpYmlsaXR5LgorCisgICAgICAgVGhlIHNvdXJjZSBjb2RlIGZvciBQQ1JFMiBjYW4gYmUgY29tcGlsZWQgdG8gc3VwcG9ydCA4LWJpdCwgMTYtYml0LCAgb3IKKyAgICAgICAzMi1iaXQgIGNvZGUgdW5pdHMsIHdoaWNoIG1lYW5zIHRoYXQgdXAgdG8gdGhyZWUgc2VwYXJhdGUgbGlicmFyaWVzIG1heQorICAgICAgIGJlIGluc3RhbGxlZC4gIFRoZSBvcmlnaW5hbCB3b3JrIHRvIGV4dGVuZCBQQ1JFIHRvICAxNi1iaXQgIGFuZCAgMzItYml0CisgICAgICAgY29kZSAgdW5pdHMgIHdhcyAgZG9uZSAgYnkgWm9sdGFuIEhlcmN6ZWcgYW5kIENocmlzdGlhbiBQZXJzY2gsIHJlc3BlYy0KKyAgICAgICB0aXZlbHkuIEluIGFsbCB0aHJlZSBjYXNlcywgc3RyaW5ncyBjYW4gYmUgaW50ZXJwcmV0ZWQgIGVpdGhlciAgYXMgIG9uZQorICAgICAgIGNoYXJhY3RlciAgcGVyICBjb2RlICB1bml0LCBvciBhcyBVVEYtZW5jb2RlZCBVbmljb2RlLCB3aXRoIHN1cHBvcnQgZm9yCisgICAgICAgVW5pY29kZSBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnRpZXMuIFVuaWNvZGUgIHN1cHBvcnQgIGlzICBvcHRpb25hbCAgYXQKKyAgICAgICBidWlsZCAgdGltZSAgKGJ1dCAgaXMgIHRoZSBkZWZhdWx0KS4gSG93ZXZlciwgcHJvY2Vzc2luZyBzdHJpbmdzIGFzIFVURgorICAgICAgIGNvZGUgdW5pdHMgbXVzdCBiZSBlbmFibGVkIGV4cGxpY2l0bHkgYXQgcnVuIHRpbWUuIFRoZSB2ZXJzaW9uIG9mICBVbmktCisgICAgICAgY29kZSBpbiB1c2UgY2FuIGJlIGRpc2NvdmVyZWQgYnkgcnVubmluZworCisgICAgICAgICBwY3JlMnRlc3QgLUMKKworICAgICAgIFRoZSAgdGhyZWUgIGxpYnJhcmllcyAgY29udGFpbiAgaWRlbnRpY2FsIHNldHMgb2YgZnVuY3Rpb25zLCB3aXRoIG5hbWVzCisgICAgICAgZW5kaW5nIGluIF84LCAgXzE2LCAgb3IgIF8zMiwgIHJlc3BlY3RpdmVseSAgKGZvciAgZXhhbXBsZSwgIHBjcmUyX2NvbS0KKyAgICAgICBwaWxlXzgoKSkuICBIb3dldmVyLCAgYnkgZGVmaW5pbmcgUENSRTJfQ09ERV9VTklUX1dJRFRIIHRvIGJlIDgsIDE2LCBvcgorICAgICAgIDMyLCBhIHByb2dyYW0gdGhhdCB1c2VzIGp1c3Qgb25lIGNvZGUgdW5pdCB3aWR0aCBjYW4gYmUgIHdyaXR0ZW4gIHVzaW5nCisgICAgICAgZ2VuZXJpYyBuYW1lcyBzdWNoIGFzIHBjcmUyX2NvbXBpbGUoKSwgYW5kIHRoZSBkb2N1bWVudGF0aW9uIGlzIHdyaXR0ZW4KKyAgICAgICBhc3N1bWluZyB0aGF0IHRoaXMgaXMgdGhlIGNhc2UuCisKKyAgICAgICBJbiBhZGRpdGlvbiB0byB0aGUgUGVybC1jb21wYXRpYmxlIG1hdGNoaW5nIGZ1bmN0aW9uLCBQQ1JFMiBjb250YWlucyBhbgorICAgICAgIGFsdGVybmF0aXZlICBmdW5jdGlvbiB0aGF0IG1hdGNoZXMgdGhlIHNhbWUgY29tcGlsZWQgcGF0dGVybnMgaW4gYSBkaWYtCisgICAgICAgZmVyZW50IHdheS4gSW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzLCB0aGUgYWx0ZXJuYXRpdmUgZnVuY3Rpb24gaGFzIHNvbWUKKyAgICAgICBhZHZhbnRhZ2VzLiAgIEZvciAgYSBkaXNjdXNzaW9uIG9mIHRoZSB0d28gbWF0Y2hpbmcgYWxnb3JpdGhtcywgc2VlIHRoZQorICAgICAgIHBjcmUybWF0Y2hpbmcgcGFnZS4KKworICAgICAgIERldGFpbHMgb2YgZXhhY3RseSB3aGljaCBQZXJsIHJlZ3VsYXIgZXhwcmVzc2lvbiBmZWF0dXJlcyBhcmUgIGFuZCAgYXJlCisgICAgICAgbm90ICBzdXBwb3J0ZWQgIGJ5ICBQQ1JFMiAgYXJlICBnaXZlbiAgaW4gIHNlcGFyYXRlICBkb2N1bWVudHMuIFNlZSB0aGUKKyAgICAgICBwY3JlMnBhdHRlcm4gYW5kIHBjcmUyY29tcGF0IHBhZ2VzLiBUaGVyZSBpcyBhIHN5bnRheCAgc3VtbWFyeSAgaW4gIHRoZQorICAgICAgIHBjcmUyc3ludGF4IHBhZ2UuCisKKyAgICAgICBTb21lICBmZWF0dXJlcyAgb2YgUENSRTIgY2FuIGJlIGluY2x1ZGVkLCBleGNsdWRlZCwgb3IgY2hhbmdlZCB3aGVuIHRoZQorICAgICAgIGxpYnJhcnkgaXMgYnVpbHQuIFRoZSBwY3JlMl9jb25maWcoKSBmdW5jdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSAgZm9yICBhCisgICAgICAgY2xpZW50ICB0byAgZGlzY292ZXIgIHdoaWNoICBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLiBUaGUgZmVhdHVyZXMgdGhlbS0KKyAgICAgICBzZWx2ZXMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgcGNyZTJidWlsZCBwYWdlLiBEb2N1bWVudGF0aW9uIGFib3V0IGJ1aWxkLQorICAgICAgIGluZyAgUENSRTIgZm9yIHZhcmlvdXMgb3BlcmF0aW5nIHN5c3RlbXMgY2FuIGJlIGZvdW5kIGluIHRoZSBSRUFETUUgYW5kCisgICAgICAgTk9OLUFVVE9UT09MU19CVUlMRCBmaWxlcyBpbiB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworICAgICAgIFRoZSBsaWJyYXJpZXMgY29udGFpbnMgYSBudW1iZXIgb2YgdW5kb2N1bWVudGVkIGludGVybmFsIGZ1bmN0aW9ucyAgYW5kCisgICAgICAgZGF0YSAgdGFibGVzICB0aGF0ICBhcmUgIHVzZWQgYnkgbW9yZSB0aGFuIG9uZSBvZiB0aGUgZXhwb3J0ZWQgZXh0ZXJuYWwKKyAgICAgICBmdW5jdGlvbnMsIGJ1dCB3aGljaCBhcmUgbm90IGludGVuZGVkICBmb3IgIHVzZSAgYnkgIGV4dGVybmFsICBjYWxsZXJzLgorICAgICAgIFRoZWlyICBuYW1lcyAgYWxsIGJlZ2luIHdpdGggIl9wY3JlMiIsIHdoaWNoIGhvcGVmdWxseSB3aWxsIG5vdCBwcm92b2tlCisgICAgICAgYW55IG5hbWUgY2xhc2hlcy4gSW4gc29tZSBlbnZpcm9ubWVudHMsIGl0IGlzIHBvc3NpYmxlIHRvIGNvbnRyb2wgd2hpY2gKKyAgICAgICBleHRlcm5hbCAgc3ltYm9scyAgYXJlICBleHBvcnRlZCB3aGVuIGEgc2hhcmVkIGxpYnJhcnkgaXMgYnVpbHQsIGFuZCBpbgorICAgICAgIHRoZXNlIGNhc2VzIHRoZSB1bmRvY3VtZW50ZWQgc3ltYm9scyBhcmUgbm90IGV4cG9ydGVkLgorCisKK1NFQ1VSSVRZIENPTlNJREVSQVRJT05TCisKKyAgICAgICBJZiB5b3UgYXJlIHVzaW5nIFBDUkUyIGluIGEgbm9uLVVURiBhcHBsaWNhdGlvbiB0aGF0IHBlcm1pdHMgIHVzZXJzICB0bworICAgICAgIHN1cHBseSAgYXJiaXRyYXJ5ICBwYXR0ZXJucyAgZm9yICBjb21waWxhdGlvbiwgeW91IHNob3VsZCBiZSBhd2FyZSBvZiBhCisgICAgICAgZmVhdHVyZSB0aGF0IGFsbG93cyB1c2VycyB0byB0dXJuIG9uIFVURiBzdXBwb3J0IGZyb20gd2l0aGluIGEgcGF0dGVybi4KKyAgICAgICBGb3IgIGV4YW1wbGUsIGFuIDgtYml0IHBhdHRlcm4gdGhhdCBiZWdpbnMgd2l0aCAiKCpVVEYpIiB0dXJucyBvbiBVVEYtOAorICAgICAgIG1vZGUsIHdoaWNoIGludGVycHJldHMgcGF0dGVybnMgYW5kIHN1YmplY3RzIGFzIHN0cmluZ3Mgb2YgIFVURi04ICBjb2RlCisgICAgICAgdW5pdHMgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIDgtYml0IGNoYXJhY3RlcnMuIFRoaXMgY2F1c2VzIGJvdGggdGhlIHBhdC0KKyAgICAgICB0ZXJuIGFuZCBhbnkgZGF0YSBhZ2FpbnN0IHdoaWNoIGl0IGlzIG1hdGNoZWQgdG8gYmUgY2hlY2tlZCAgZm9yICBVVEYtOAorICAgICAgIHZhbGlkaXR5LiAgSWYgdGhlIGRhdGEgc3RyaW5nIGlzIHZlcnkgbG9uZywgc3VjaCBhIGNoZWNrIG1pZ2h0IHVzZSBzdWYtCisgICAgICAgZmljaWVudGx5IG1hbnkgcmVzb3VyY2VzIGFzIHRvIGNhdXNlIHlvdXIgYXBwbGljYXRpb24gdG8gIGxvc2UgIHBlcmZvci0KKyAgICAgICBtYW5jZS4KKworICAgICAgIE9uZSAgd2F5ICBvZiBndWFyZGluZyBhZ2FpbnN0IHRoaXMgcG9zc2liaWxpdHkgaXMgdG8gdXNlIHRoZSBwY3JlMl9wYXQtCisgICAgICAgdGVybl9pbmZvKCkgZnVuY3Rpb24gIHRvICBjaGVjayAgdGhlICBjb21waWxlZCAgcGF0dGVybidzICBvcHRpb25zICBmb3IKKyAgICAgICBQQ1JFMl9VVEYuICBBbHRlcm5hdGl2ZWx5LCAgeW91IGNhbiBzZXQgdGhlIFBDUkUyX05FVkVSX1VURiBvcHRpb24gd2hlbgorICAgICAgIGNhbGxpbmcgcGNyZTJfY29tcGlsZSgpLiBUaGlzIGNhdXNlcyBhbiBjb21waWxlIHRpbWUgZXJyb3IgaWYgYSBwYXR0ZXJuCisgICAgICAgY29udGFpbnMgYSBVVEYtc2V0dGluZyBzZXF1ZW5jZS4KKworICAgICAgIFRoZSAgdXNlICBvZiBVbmljb2RlIHByb3BlcnRpZXMgZm9yIGNoYXJhY3RlciB0eXBlcyBzdWNoIGFzIFxkIGNhbiBhbHNvCisgICAgICAgYmUgZW5hYmxlZCBmcm9tIHdpdGhpbiB0aGUgcGF0dGVybiwgYnkgc3BlY2lmeWluZyAiKCpVQ1ApIi4gIFRoaXMgIGZlYS0KKyAgICAgICB0dXJlIGNhbiBiZSBkaXNhbGxvd2VkIGJ5IHNldHRpbmcgdGhlIFBDUkUyX05FVkVSX1VDUCBvcHRpb24uCisKKyAgICAgICBJZiAgeW91ciAgYXBwbGljYXRpb24gIGlzIG9uZSB0aGF0IHN1cHBvcnRzIFVURiwgYmUgYXdhcmUgdGhhdCB2YWxpZGl0eQorICAgICAgIGNoZWNraW5nIGNhbiB0YWtlIHRpbWUuIElmIHRoZSBzYW1lIGRhdGEgc3RyaW5nIGlzIHRvIGJlICBtYXRjaGVkICBtYW55CisgICAgICAgdGltZXMsICB5b3UgIGNhbiAgdXNlICB0aGUgUENSRTJfTk9fVVRGX0NIRUNLIG9wdGlvbiBmb3IgdGhlIHNlY29uZCBhbmQKKyAgICAgICBzdWJzZXF1ZW50IG1hdGNoZXMgdG8gYXZvaWQgcnVubmluZyByZWR1bmRhbnQgY2hlY2tzLgorCisgICAgICAgVGhlIHVzZSBvZiB0aGUgXEMgZXNjYXBlIHNlcXVlbmNlIGluIGEgVVRGLTggb3IgVVRGLTE2IHBhdHRlcm4gY2FuIGxlYWQKKyAgICAgICB0byAgcHJvYmxlbXMsICBiZWNhdXNlICBpdCAgbWF5IGxlYXZlIHRoZSBjdXJyZW50IG1hdGNoaW5nIHBvaW50IGluIHRoZQorICAgICAgIG1pZGRsZSBvZiAgYSAgbXVsdGktY29kZS11bml0ICBjaGFyYWN0ZXIuICBUaGUgIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DCisgICAgICAgb3B0aW9uIGNhbiBiZSB1c2VkIGJ5IGFuIGFwcGxpY2F0aW9uIHRvIGxvY2sgb3V0IHRoZSB1c2Ugb2YgXEMsIGNhdXNpbmcKKyAgICAgICBhIGNvbXBpbGUtdGltZSBlcnJvciBpZiBpdCBpcyBlbmNvdW50ZXJlZC4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBidWlsZAorICAgICAgIFBDUkUyIHdpdGggdGhlIHVzZSBvZiBcQyBwZXJtYW5lbnRseSBkaXNhYmxlZC4KKworICAgICAgIEFub3RoZXIgIHdheSAgdGhhdCAgcGVyZm9ybWFuY2UgY2FuIGJlIGhpdCBpcyBieSBydW5uaW5nIGEgcGF0dGVybiB0aGF0CisgICAgICAgaGFzIGEgdmVyeSBsYXJnZSBzZWFyY2ggdHJlZSBhZ2FpbnN0IGEgc3RyaW5nIHRoYXQgIHdpbGwgIG5ldmVyICBtYXRjaC4KKyAgICAgICBOZXN0ZWQgIHVubGltaXRlZCByZXBlYXRzIGluIGEgcGF0dGVybiBhcmUgYSBjb21tb24gZXhhbXBsZS4gUENSRTIgcHJvLQorICAgICAgIHZpZGVzIHNvbWUgcHJvdGVjdGlvbiBhZ2FpbnN0ICB0aGlzOiAgc2VlICB0aGUgIHBjcmUyX3NldF9tYXRjaF9saW1pdCgpCisgICAgICAgZnVuY3Rpb24gaW4gdGhlIHBjcmUyYXBpIHBhZ2UuCisKKworVVNFUiBET0NVTUVOVEFUSU9OCisKKyAgICAgICBUaGUgIHVzZXIgIGRvY3VtZW50YXRpb24gZm9yIFBDUkUyIGNvbXByaXNlcyBhIG51bWJlciBvZiBkaWZmZXJlbnQgc2VjLQorICAgICAgIHRpb25zLiBJbiB0aGUgIm1hbiIgZm9ybWF0LCBlYWNoIG9mIHRoZXNlIGlzIGEgc2VwYXJhdGUgIm1hbiBwYWdlIi4gIEluCisgICAgICAgdGhlICBIVE1MICBmb3JtYXQsIGVhY2ggaXMgYSBzZXBhcmF0ZSBwYWdlLCBsaW5rZWQgZnJvbSB0aGUgaW5kZXggcGFnZS4KKyAgICAgICBJbiB0aGUgcGxhaW4gIHRleHQgIGZvcm1hdCwgIHRoZSAgZGVzY3JpcHRpb25zICBvZiAgdGhlICBwY3JlMmdyZXAgIGFuZAorICAgICAgIHBjcmUydGVzdCBwcm9ncmFtcyBhcmUgaW4gZmlsZXMgY2FsbGVkIHBjcmUyZ3JlcC50eHQgYW5kIHBjcmUydGVzdC50eHQsCisgICAgICAgcmVzcGVjdGl2ZWx5LiBUaGUgcmVtYWluaW5nIHNlY3Rpb25zLCBleGNlcHQgZm9yIHRoZSBwY3JlMmRlbW8gIHNlY3Rpb24KKyAgICAgICAod2hpY2ggIGlzIGEgcHJvZ3JhbSBsaXN0aW5nKSwgYW5kIHRoZSBzaG9ydCBwYWdlcyBmb3IgaW5kaXZpZHVhbCBmdW5jLQorICAgICAgIHRpb25zLCBhcmUgY29uY2F0ZW5hdGVkIGluIHBjcmUyLnR4dCwgZm9yIGVhc2Ugb2Ygc2VhcmNoaW5nLiAgVGhlICBzZWMtCisgICAgICAgdGlvbnMgYXJlIGFzIGZvbGxvd3M6CisKKyAgICAgICAgIHBjcmUyICAgICAgICAgICAgICB0aGlzIGRvY3VtZW50CisgICAgICAgICBwY3JlMi1jb25maWcgICAgICAgc2hvdyBQQ1JFMiBpbnN0YWxsYXRpb24gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbgorICAgICAgICAgcGNyZTJhcGkgICAgICAgICAgIGRldGFpbHMgb2YgUENSRTIncyBuYXRpdmUgQyBBUEkKKyAgICAgICAgIHBjcmUyYnVpbGQgICAgICAgICBidWlsZGluZyBQQ1JFMgorICAgICAgICAgcGNyZTJjYWxsb3V0ICAgICAgIGRldGFpbHMgb2YgdGhlIGNhbGxvdXQgZmVhdHVyZQorICAgICAgICAgcGNyZTJjb21wYXQgICAgICAgIGRpc2N1c3Npb24gb2YgUGVybCBjb21wYXRpYmlsaXR5CisgICAgICAgICBwY3JlMmRlbW8gICAgICAgICAgYSBkZW1vbnN0cmF0aW9uIEMgcHJvZ3JhbSB0aGF0IHVzZXMgUENSRTIKKyAgICAgICAgIHBjcmUyZ3JlcCAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgcGNyZTJncmVwIGNvbW1hbmQgKDgtYml0IG9ubHkpCisgICAgICAgICBwY3JlMmppdCAgICAgICAgICAgZGlzY3Vzc2lvbiBvZiBqdXN0LWluLXRpbWUgb3B0aW1pemF0aW9uIHN1cHBvcnQKKyAgICAgICAgIHBjcmUybGltaXRzICAgICAgICBkZXRhaWxzIG9mIHNpemUgYW5kIG90aGVyIGxpbWl0cworICAgICAgICAgcGNyZTJtYXRjaGluZyAgICAgIGRpc2N1c3Npb24gb2YgdGhlIHR3byBtYXRjaGluZyBhbGdvcml0aG1zCisgICAgICAgICBwY3JlMnBhcnRpYWwgICAgICAgZGV0YWlscyBvZiB0aGUgcGFydGlhbCBtYXRjaGluZyBmYWNpbGl0eQorICAgICAgICAgcGNyZTJwYXR0ZXJuICAgICAgIHN5bnRheCBhbmQgc2VtYW50aWNzIG9mIHN1cHBvcnRlZCByZWd1bGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByZXNzaW9uIHBhdHRlcm5zCisgICAgICAgICBwY3JlMnBlcmZvcm0gICAgICAgZGlzY3Vzc2lvbiBvZiBwZXJmb3JtYW5jZSBpc3N1ZXMKKyAgICAgICAgIHBjcmUycG9zaXggICAgICAgICB0aGUgUE9TSVgtY29tcGF0aWJsZSBDIEFQSSBmb3IgdGhlIDgtYml0IGxpYnJhcnkKKyAgICAgICAgIHBjcmUyc2FtcGxlICAgICAgICBkaXNjdXNzaW9uIG9mIHRoZSBwY3JlMmRlbW8gcHJvZ3JhbQorICAgICAgICAgcGNyZTJzdGFjayAgICAgICAgIGRpc2N1c3Npb24gb2Ygc3RhY2sgdXNhZ2UKKyAgICAgICAgIHBjcmUyc3ludGF4ICAgICAgICBxdWljayBzeW50YXggcmVmZXJlbmNlCisgICAgICAgICBwY3JlMnRlc3QgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIHBjcmUydGVzdCBjb21tYW5kCisgICAgICAgICBwY3JlMnVuaWNvZGUgICAgICAgZGlzY3Vzc2lvbiBvZiBVbmljb2RlIGFuZCBVVEYgc3VwcG9ydAorCisgICAgICAgSW4gIHRoZSAgIm1hbiIgIGFuZCBIVE1MIGZvcm1hdHMsIHRoZXJlIGlzIGFsc28gYSBzaG9ydCBwYWdlIGZvciBlYWNoIEMKKyAgICAgICBsaWJyYXJ5IGZ1bmN0aW9uLCBsaXN0aW5nIGl0cyBhcmd1bWVudHMgYW5kIHJlc3VsdHMuCisKKworQVVUSE9SCisKKyAgICAgICBQaGlsaXAgSGF6ZWwKKyAgICAgICBVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCisgICAgICAgQ2FtYnJpZGdlLCBFbmdsYW5kLgorCisgICAgICAgUHV0dGluZyBhbiBhY3R1YWwgZW1haWwgYWRkcmVzcyBoZXJlIGlzIGEgc3BhbSBtYWduZXQuIElmIHlvdSAgd2FudCAgdG8KKyAgICAgICBlbWFpbCAgbWUsICB1c2UgIG15IHR3byBpbml0aWFscywgZm9sbG93ZWQgYnkgdGhlIHR3byBkaWdpdHMgMTAsIGF0IHRoZQorICAgICAgIGRvbWFpbiBjYW0uYWMudWsuCisKKworUkVWSVNJT04KKworICAgICAgIExhc3QgdXBkYXRlZDogMTYgT2N0b2JlciAyMDE1CisgICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitQQ1JFMkFQSSgzKSAgICAgICAgICAgICAgICBMaWJyYXJ5IEZ1bmN0aW9ucyBNYW51YWwgICAgICAgICAgICAgICAgUENSRTJBUEkoMykKKworCisKK05BTUUKKyAgICAgICBQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKworICAgICAgICNpbmNsdWRlIDxwY3JlMi5oPgorCisgICAgICAgUENSRTIgIGlzICBhICBuZXcgQVBJIGZvciBQQ1JFLiBUaGlzIGRvY3VtZW50IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YKKyAgICAgICBhbGwgaXRzIGZ1bmN0aW9ucy4gU2VlIHRoZSBwY3JlMiBkb2N1bWVudCBmb3IgYW4gb3ZlcnZpZXcgIG9mICBhbGwgIHRoZQorICAgICAgIFBDUkUyIGRvY3VtZW50YXRpb24uCisKKworUENSRTIgTkFUSVZFIEFQSSBCQVNJQyBGVU5DVElPTlMKKworICAgICAgIHBjcmUyX2NvZGUgKnBjcmUyX2NvbXBpbGUoUENSRTJfU1BUUiBwYXR0ZXJuLCBQQ1JFMl9TSVpFIGxlbmd0aCwKKyAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMsIGludCAqZXJyb3Jjb2RlLCBQQ1JFMl9TSVpFICplcnJvcm9mZnNldCwKKyAgICAgICAgIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqY2NvbnRleHQpOworCisgICAgICAgdm9pZCBwY3JlMl9jb2RlX2ZyZWUocGNyZTJfY29kZSAqY29kZSk7CisKKyAgICAgICBwY3JlMl9tYXRjaF9kYXRhICpwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSh1aW50MzJfdCBvdmVjc2l6ZSwKKyAgICAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpOworCisgICAgICAgcGNyZTJfbWF0Y2hfZGF0YSAqcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuKAorICAgICAgICAgY29uc3QgcGNyZTJfY29kZSAqY29kZSwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCk7CisKKyAgICAgICBpbnQgcGNyZTJfbWF0Y2goY29uc3QgcGNyZTJfY29kZSAqY29kZSwgUENSRTJfU1BUUiBzdWJqZWN0LAorICAgICAgICAgUENSRTJfU0laRSBsZW5ndGgsIFBDUkUyX1NJWkUgc3RhcnRvZmZzZXQsCisgICAgICAgICB1aW50MzJfdCBvcHRpb25zLCBwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLAorICAgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQpOworCisgICAgICAgaW50IHBjcmUyX2RmYV9tYXRjaChjb25zdCBwY3JlMl9jb2RlICpjb2RlLCBQQ1JFMl9TUFRSIHN1YmplY3QsCisgICAgICAgICBQQ1JFMl9TSVpFIGxlbmd0aCwgUENSRTJfU0laRSBzdGFydG9mZnNldCwKKyAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMsIHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEsCisgICAgICAgICBwY3JlMl9tYXRjaF9jb250ZXh0ICptY29udGV4dCwKKyAgICAgICAgIGludCAqd29ya3NwYWNlLCBQQ1JFMl9TSVpFIHdzY291bnQpOworCisgICAgICAgdm9pZCBwY3JlMl9tYXRjaF9kYXRhX2ZyZWUocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSk7CisKKworUENSRTIgTkFUSVZFIEFQSSBBVVhJTElBUlkgTUFUQ0ggRlVOQ1RJT05TCisKKyAgICAgICBQQ1JFMl9TUFRSIHBjcmUyX2dldF9tYXJrKHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEpOworCisgICAgICAgdWludDMyX3QgcGNyZTJfZ2V0X292ZWN0b3JfY291bnQocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSk7CisKKyAgICAgICBQQ1JFMl9TSVpFICpwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyKHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEpOworCisgICAgICAgUENSRTJfU0laRSBwY3JlMl9nZXRfc3RhcnRjaGFyKHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEpOworCisKK1BDUkUyIE5BVElWRSBBUEkgR0VORVJBTCBDT05URVhUIEZVTkNUSU9OUworCisgICAgICAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpwY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlKAorICAgICAgICAgdm9pZCAqKCpwcml2YXRlX21hbGxvYykoUENSRTJfU0laRSwgdm9pZCAqKSwKKyAgICAgICAgIHZvaWQgKCpwcml2YXRlX2ZyZWUpKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqbWVtb3J5X2RhdGEpOworCisgICAgICAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpwY3JlMl9nZW5lcmFsX2NvbnRleHRfY29weSgKKyAgICAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpOworCisgICAgICAgdm9pZCBwY3JlMl9nZW5lcmFsX2NvbnRleHRfZnJlZShwY3JlMl9nZW5lcmFsX2NvbnRleHQgKmdjb250ZXh0KTsKKworCitQQ1JFMiBOQVRJVkUgQVBJIENPTVBJTEUgQ09OVEVYVCBGVU5DVElPTlMKKworICAgICAgIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZSgKKyAgICAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpOworCisgICAgICAgcGNyZTJfY29tcGlsZV9jb250ZXh0ICpwY3JlMl9jb21waWxlX2NvbnRleHRfY29weSgKKyAgICAgICAgIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqY2NvbnRleHQpOworCisgICAgICAgdm9pZCBwY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZShwY3JlMl9jb21waWxlX2NvbnRleHQgKmNjb250ZXh0KTsKKworICAgICAgIGludCBwY3JlMl9zZXRfYnNyKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqY2NvbnRleHQsCisgICAgICAgICB1aW50MzJfdCB2YWx1ZSk7CisKKyAgICAgICBpbnQgcGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXMocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwKKyAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhYmxlcyk7CisKKyAgICAgICBpbnQgcGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aChwY3JlMl9jb21waWxlX2NvbnRleHQgKmNjb250ZXh0LAorICAgICAgICAgUENSRTJfU0laRSB2YWx1ZSk7CisKKyAgICAgICBpbnQgcGNyZTJfc2V0X25ld2xpbmUocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwKKyAgICAgICAgIHVpbnQzMl90IHZhbHVlKTsKKworICAgICAgIGludCBwY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwKKyAgICAgICAgIHVpbnQzMl90IHZhbHVlKTsKKworICAgICAgIGludCBwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwKKyAgICAgICAgIGludCAoKmd1YXJkX2Z1bmN0aW9uKSh1aW50MzJfdCwgdm9pZCAqKSwgdm9pZCAqdXNlcl9kYXRhKTsKKworCitQQ1JFMiBOQVRJVkUgQVBJIE1BVENIIENPTlRFWFQgRlVOQ1RJT05TCisKKyAgICAgICBwY3JlMl9tYXRjaF9jb250ZXh0ICpwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZSgKKyAgICAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpOworCisgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAqcGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5KAorICAgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQpOworCisgICAgICAgdm9pZCBwY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWUocGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQpOworCisgICAgICAgaW50IHBjcmUyX3NldF9jYWxsb3V0KHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0LAorICAgICAgICAgaW50ICgqY2FsbG91dF9mdW5jdGlvbikocGNyZTJfY2FsbG91dF9ibG9jayAqLCB2b2lkICopLAorICAgICAgICAgdm9pZCAqY2FsbG91dF9kYXRhKTsKKworICAgICAgIGludCBwY3JlMl9zZXRfbWF0Y2hfbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsCisgICAgICAgICB1aW50MzJfdCB2YWx1ZSk7CisKKyAgICAgICBpbnQgcGNyZTJfc2V0X29mZnNldF9saW1pdChwY3JlMl9tYXRjaF9jb250ZXh0ICptY29udGV4dCwKKyAgICAgICAgIFBDUkUyX1NJWkUgdmFsdWUpOworCisgICAgICAgaW50IHBjcmUyX3NldF9yZWN1cnNpb25fbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsCisgICAgICAgICB1aW50MzJfdCB2YWx1ZSk7CisKKyAgICAgICBpbnQgcGNyZTJfc2V0X3JlY3Vyc2lvbl9tZW1vcnlfbWFuYWdlbWVudCgKKyAgICAgICAgIHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0LAorICAgICAgICAgdm9pZCAqKCpwcml2YXRlX21hbGxvYykoUENSRTJfU0laRSwgdm9pZCAqKSwKKyAgICAgICAgIHZvaWQgKCpwcml2YXRlX2ZyZWUpKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqbWVtb3J5X2RhdGEpOworCisKK1BDUkUyIE5BVElWRSBBUEkgU1RSSU5HIEVYVFJBQ1RJT04gRlVOQ1RJT05TCisKKyAgICAgICBpbnQgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEsCisgICAgICAgICBQQ1JFMl9TUFRSIG5hbWUsIFBDUkUyX1VDSEFSICpidWZmZXIsIFBDUkUyX1NJWkUgKmJ1ZmZsZW4pOworCisgICAgICAgaW50IHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEsCisgICAgICAgICB1aW50MzJfdCBudW1iZXIsIFBDUkUyX1VDSEFSICpidWZmZXIsCisgICAgICAgICBQQ1JFMl9TSVpFICpidWZmbGVuKTsKKworICAgICAgIHZvaWQgcGNyZTJfc3Vic3RyaW5nX2ZyZWUoUENSRTJfVUNIQVIgKmJ1ZmZlcik7CisKKyAgICAgICBpbnQgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgICAgICAgIFBDUkUyX1NQVFIgbmFtZSwgUENSRTJfVUNIQVIgKipidWZmZXJwdHIsIFBDUkUyX1NJWkUgKmJ1ZmZsZW4pOworCisgICAgICAgaW50IHBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgICAgICAgIHVpbnQzMl90IG51bWJlciwgUENSRTJfVUNIQVIgKipidWZmZXJwdHIsCisgICAgICAgICBQQ1JFMl9TSVpFICpidWZmbGVuKTsKKworICAgICAgIGludCBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZShwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLAorICAgICAgICAgUENSRTJfU1BUUiBuYW1lLCBQQ1JFMl9TSVpFICpsZW5ndGgpOworCisgICAgICAgaW50IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgICAgICAgIHVpbnQzMl90IG51bWJlciwgUENSRTJfU0laRSAqbGVuZ3RoKTsKKworICAgICAgIGludCBwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4oY29uc3QgcGNyZTJfY29kZSAqY29kZSwKKyAgICAgICAgIFBDUkUyX1NQVFIgbmFtZSwgUENSRTJfU1BUUiAqZmlyc3QsIFBDUkUyX1NQVFIgKmxhc3QpOworCisgICAgICAgaW50IHBjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lKGNvbnN0IHBjcmUyX2NvZGUgKmNvZGUsCisgICAgICAgICBQQ1JFMl9TUFRSIG5hbWUpOworCisgICAgICAgdm9pZCBwY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlKFBDUkUyX1NQVFIgKmxpc3QpOworCisgICAgICAgaW50IHBjcmUyX3N1YnN0cmluZ19saXN0X2dldChwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLAorICAgICAgICAgUENSRTJfVUNIQVIgKioqbGlzdHB0ciwgUENSRTJfU0laRSAqKmxlbmd0aHNwdHIpOworCisKK1BDUkUyIE5BVElWRSBBUEkgU1RSSU5HIFNVQlNUSVRVVElPTiBGVU5DVElPTgorCisgICAgICAgaW50IHBjcmUyX3N1YnN0aXR1dGUoY29uc3QgcGNyZTJfY29kZSAqY29kZSwgUENSRTJfU1BUUiBzdWJqZWN0LAorICAgICAgICAgUENSRTJfU0laRSBsZW5ndGgsIFBDUkUyX1NJWkUgc3RhcnRvZmZzZXQsCisgICAgICAgICB1aW50MzJfdCBvcHRpb25zLCBwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLAorICAgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsIFBDUkUyX1NQVFIgcmVwbGFjZW1lbnR6ZlAsCisgICAgICAgICBQQ1JFMl9TSVpFIHJsZW5ndGgsIFBDUkUyX1VDSEFSICpvdXRwdXRidWZmZXIsCisgICAgICAgICBQQ1JFMl9TSVpFICpvdXRsZW5ndGhwdHIpOworCisKK1BDUkUyIE5BVElWRSBBUEkgSklUIEZVTkNUSU9OUworCisgICAgICAgaW50IHBjcmUyX2ppdF9jb21waWxlKHBjcmUyX2NvZGUgKmNvZGUsIHVpbnQzMl90IG9wdGlvbnMpOworCisgICAgICAgaW50IHBjcmUyX2ppdF9tYXRjaChjb25zdCBwY3JlMl9jb2RlICpjb2RlLCBQQ1JFMl9TUFRSIHN1YmplY3QsCisgICAgICAgICBQQ1JFMl9TSVpFIGxlbmd0aCwgUENSRTJfU0laRSBzdGFydG9mZnNldCwKKyAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMsIHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEsCisgICAgICAgICBwY3JlMl9tYXRjaF9jb250ZXh0ICptY29udGV4dCk7CisKKyAgICAgICB2b2lkIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCk7CisKKyAgICAgICBwY3JlMl9qaXRfc3RhY2sgKnBjcmUyX2ppdF9zdGFja19jcmVhdGUoUENSRTJfU0laRSBzdGFydHNpemUsCisgICAgICAgICBQQ1JFMl9TSVpFIG1heHNpemUsIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpOworCisgICAgICAgdm9pZCBwY3JlMl9qaXRfc3RhY2tfYXNzaWduKHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0LAorICAgICAgICAgcGNyZTJfaml0X2NhbGxiYWNrIGNhbGxiYWNrX2Z1bmN0aW9uLCB2b2lkICpjYWxsYmFja19kYXRhKTsKKworICAgICAgIHZvaWQgcGNyZTJfaml0X3N0YWNrX2ZyZWUocGNyZTJfaml0X3N0YWNrICpqaXRfc3RhY2spOworCisKK1BDUkUyIE5BVElWRSBBUEkgU0VSSUFMSVpBVElPTiBGVU5DVElPTlMKKworICAgICAgIGludDMyX3QgcGNyZTJfc2VyaWFsaXplX2RlY29kZShwY3JlMl9jb2RlICoqY29kZXMsCisgICAgICAgICBpbnQzMl90IG51bWJlcl9vZl9jb2RlcywgY29uc3QgdWludDhfdCAqYnl0ZXMsCisgICAgICAgICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKmdjb250ZXh0KTsKKworICAgICAgIGludDMyX3QgcGNyZTJfc2VyaWFsaXplX2VuY29kZShjb25zdCBwY3JlMl9jb2RlICoqY29kZXMsCisgICAgICAgICBpbnQzMl90IG51bWJlcl9vZl9jb2RlcywgdWludDhfdCAqKnNlcmlhbGl6ZWRfYnl0ZXMsCisgICAgICAgICBQQ1JFMl9TSVpFICpzZXJpYWxpemVkX3NpemUsIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpOworCisgICAgICAgdm9pZCBwY3JlMl9zZXJpYWxpemVfZnJlZSh1aW50OF90ICpieXRlcyk7CisKKyAgICAgICBpbnQzMl90IHBjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzKGNvbnN0IHVpbnQ4X3QgKmJ5dGVzKTsKKworCitQQ1JFMiBOQVRJVkUgQVBJIEFVWElMSUFSWSBGVU5DVElPTlMKKworICAgICAgIGludCBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZShpbnQgZXJyb3Jjb2RlLCBQQ1JFMl9VQ0hBUiAqYnVmZmVyLAorICAgICAgICAgUENSRTJfU0laRSBidWZmbGVuKTsKKworICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBjcmUyX21ha2V0YWJsZXMocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCk7CisKKyAgICAgICBpbnQgcGNyZTJfcGF0dGVybl9pbmZvKGNvbnN0IHBjcmUyICpjb2RlLCB1aW50MzJfdCB3aGF0LCB2b2lkICp3aGVyZSk7CisKKyAgICAgICBpbnQgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUoY29uc3QgcGNyZTJfY29kZSAqY29kZSwKKyAgICAgICAgIGludCAoKmNhbGxiYWNrKShwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9jayAqLCB2b2lkICopLAorICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworICAgICAgIGludCBwY3JlMl9jb25maWcodWludDMyX3Qgd2hhdCwgdm9pZCAqd2hlcmUpOworCisKK1BDUkUyIDgtQklULCAxNi1CSVQsIEFORCAzMi1CSVQgTElCUkFSSUVTCisKKyAgICAgICBUaGVyZSAgYXJlICB0aHJlZSBQQ1JFMiBsaWJyYXJpZXMsIHN1cHBvcnRpbmcgOC1iaXQsIDE2LWJpdCwgYW5kIDMyLWJpdAorICAgICAgIGNvZGUgdW5pdHMsIHJlc3BlY3RpdmVseS4gSG93ZXZlciwgIHRoZXJlICBpcyAganVzdCAgb25lICBoZWFkZXIgIGZpbGUsCisgICAgICAgcGNyZTIuaC4gICBUaGlzICBjb250YWlucyB0aGUgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgb3RoZXIgZGVmaW5pdGlvbnMKKyAgICAgICBmb3IgYWxsIHRocmVlIGxpYnJhcmllcy4gT25lLCB0d28sIG9yIGFsbCB0aHJlZSBjYW4gYmUgaW5zdGFsbGVkIHNpbXVsLQorICAgICAgIHRhbmVvdXNseS4gIE9uICBVbml4LWxpa2UgIHN5c3RlbXMgdGhlIGxpYnJhcmllcyBhcmUgY2FsbGVkIGxpYnBjcmUyLTgsCisgICAgICAgbGlicGNyZTItMTYsIGFuZCBsaWJwY3JlMi0zMiwgYW5kIHRoZXkgY2FuIGFsc28gY28tZXhpc3Qgd2l0aCB0aGUgb3JpZy0KKyAgICAgICBpbmFsIFBDUkUgbGlicmFyaWVzLgorCisgICAgICAgQ2hhcmFjdGVyICBzdHJpbmdzIGFyZSBwYXNzZWQgdG8gYW5kIGZyb20gYSBQQ1JFMiBsaWJyYXJ5IGFzIGEgc2VxdWVuY2UKKyAgICAgICBvZiB1bnNpZ25lZCBpbnRlZ2VycyBpbiBjb2RlIHVuaXRzICBvZiAgdGhlICBhcHByb3ByaWF0ZSAgd2lkdGguICBFdmVyeQorICAgICAgIFBDUkUyICBmdW5jdGlvbiAgY29tZXMgIGluIHRocmVlIGRpZmZlcmVudCBmb3Jtcywgb25lIGZvciBlYWNoIGxpYnJhcnksCisgICAgICAgZm9yIGV4YW1wbGU6CisKKyAgICAgICAgIHBjcmUyX2NvbXBpbGVfOCgpCisgICAgICAgICBwY3JlMl9jb21waWxlXzE2KCkKKyAgICAgICAgIHBjcmUyX2NvbXBpbGVfMzIoKQorCisgICAgICAgVGhlcmUgYXJlIGFsc28gdGhyZWUgZGlmZmVyZW50IHNldHMgb2YgZGF0YSB0eXBlczoKKworICAgICAgICAgUENSRTJfVUNIQVI4LCBQQ1JFMl9VQ0hBUjE2LCBQQ1JFMl9VQ0hBUjMyCisgICAgICAgICBQQ1JFMl9TUFRSOCwgIFBDUkUyX1NQVFIxNiwgIFBDUkUyX1NQVFIzMgorCisgICAgICAgVGhlIFVDSEFSIHR5cGVzIGRlZmluZSB1bnNpZ25lZCBjb2RlIHVuaXRzIG9mIHRoZSAgYXBwcm9wcmlhdGUgIHdpZHRocy4KKyAgICAgICBGb3IgIGV4YW1wbGUsICBQQ1JFMl9VQ0hBUjE2IGlzIHVzdWFsbHkgZGVmaW5lZCBhcyBgdWludDE2X3QnLiBUaGUgU1BUUgorICAgICAgIHR5cGVzIGFyZSBjb25zdGFudCBwb2ludGVycyB0byB0aGUgZXF1aXZhbGVudCAgVUNIQVIgIHR5cGVzLCAgdGhhdCAgaXMsCisgICAgICAgdGhleSBhcmUgcG9pbnRlcnMgdG8gdmVjdG9ycyBvZiB1bnNpZ25lZCBjb2RlIHVuaXRzLgorCisgICAgICAgTWFueSAgYXBwbGljYXRpb25zIHVzZSBvbmx5IG9uZSBjb2RlIHVuaXQgd2lkdGguIEZvciB0aGVpciBjb252ZW5pZW5jZSwKKyAgICAgICBtYWNyb3MgYXJlIGRlZmluZWQgd2hvc2UgbmFtZXMgYXJlIHRoZSBnZW5lcmljIGZvcm1zIHN1Y2ggYXMgcGNyZTJfY29tLQorICAgICAgIHBpbGUoKSAgYW5kICBQQ1JFMl9TUFRSLiAgVGhlc2UgIG1hY3JvcyAgdXNlICB0aGUgIHZhbHVlICBvZiAgdGhlIG1hY3JvCisgICAgICAgUENSRTJfQ09ERV9VTklUX1dJRFRIIHRvIGdlbmVyYXRlIHRoZSBhcHByb3ByaWF0ZSB3aWR0aC1zcGVjaWZpYyAgZnVuYy0KKyAgICAgICB0aW9uIGFuZCBtYWNybyBuYW1lcy4gIFBDUkUyX0NPREVfVU5JVF9XSURUSCBpcyBub3QgZGVmaW5lZCBieSBkZWZhdWx0LgorICAgICAgIEFuIGFwcGxpY2F0aW9uIG11c3QgZGVmaW5lIGl0IHRvIGJlICA4LCAgMTYsICBvciAgMzIgIGJlZm9yZSAgaW5jbHVkaW5nCisgICAgICAgcGNyZTIuaCBpbiBvcmRlciB0byBtYWtlIHVzZSBvZiB0aGUgZ2VuZXJpYyBuYW1lcy4KKworICAgICAgIEFwcGxpY2F0aW9ucyAgdGhhdCB1c2UgbW9yZSB0aGFuIG9uZSBjb2RlIHVuaXQgd2lkdGggY2FuIGJlIGxpbmtlZCB3aXRoCisgICAgICAgbW9yZSB0aGFuIG9uZSBQQ1JFMiBsaWJyYXJ5LCBidXQgbXVzdCBkZWZpbmUgIFBDUkUyX0NPREVfVU5JVF9XSURUSCAgdG8KKyAgICAgICBiZSAgMCAgYmVmb3JlICBpbmNsdWRpbmcgcGNyZTIuaCwgYW5kIHRoZW4gdXNlIHRoZSByZWFsIGZ1bmN0aW9uIG5hbWVzLgorICAgICAgIEFueSBjb2RlIHRoYXQgaXMgdG8gYmUgaW5jbHVkZWQgaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgIHRoZSAgdmFsdWUgIG9mCisgICAgICAgUENSRTJfQ09ERV9VTklUX1dJRFRIICBpcyAgdW5rbm93biAgc2hvdWxkICBhbHNvICB1c2UgdGhlIHJlYWwgZnVuY3Rpb24KKyAgICAgICBuYW1lcy4gKFVuZm9ydHVuYXRlbHksIGl0IGlzIG5vdCBwb3NzaWJsZSBpbiBDIGNvZGUgdG8gc2F2ZSBhbmQgcmVzdG9yZQorICAgICAgIHRoZSB2YWx1ZSBvZiBhIG1hY3JvLikKKworICAgICAgIElmICBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIGlzICBub3QgIGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyBwY3JlMi5oLCBhCisgICAgICAgY29tcGlsZXIgZXJyb3Igb2NjdXJzLgorCisgICAgICAgV2hlbiB1c2luZyBtdWx0aXBsZSBsaWJyYXJpZXMgaW4gYW4gYXBwbGljYXRpb24sICB5b3UgIG11c3QgIHRha2UgIGNhcmUKKyAgICAgICB3aGVuICBwcm9jZXNzaW5nICBhbnkgIHBhcnRpY3VsYXIgIHBhdHRlcm4gdG8gdXNlIG9ubHkgZnVuY3Rpb25zIGZyb20gYQorICAgICAgIHNpbmdsZSBsaWJyYXJ5LiAgRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIHJ1biBhIG1hdGNoIHVzaW5nICBhICBwYXQtCisgICAgICAgdGVybiAgdGhhdCAgd2FzICBjb21waWxlZCAgd2l0aCBwY3JlMl9jb21waWxlXzE2KCksIHlvdSBtdXN0IGRvIHNvIHdpdGgKKyAgICAgICBwY3JlMl9tYXRjaF8xNigpLCBub3QgcGNyZTJfbWF0Y2hfOCgpLgorCisgICAgICAgSW4gdGhlIGZ1bmN0aW9uIHN1bW1hcmllcyBhYm92ZSwgYW5kIGluIHRoZSByZXN0IG9mIHRoaXMgIGRvY3VtZW50ICBhbmQKKyAgICAgICBvdGhlciAgUENSRTIgIGRvY3VtZW50cywgIGZ1bmN0aW9ucyAgYW5kIGRhdGEgdHlwZXMgYXJlIGRlc2NyaWJlZCB1c2luZworICAgICAgIHRoZWlyIGdlbmVyaWMgbmFtZXMsIHdpdGhvdXQgdGhlIDgsIDE2LCBvciAzMiBzdWZmaXguCisKKworUENSRTIgQVBJIE9WRVJWSUVXCisKKyAgICAgICBQQ1JFMiBoYXMgaXRzIG93biBuYXRpdmUgQVBJLCB3aGljaCAgaXMgIGRlc2NyaWJlZCAgaW4gIHRoaXMgIGRvY3VtZW50LgorICAgICAgIFRoZXJlIGFyZSBhbHNvIHNvbWUgd3JhcHBlciBmdW5jdGlvbnMgZm9yIHRoZSA4LWJpdCBsaWJyYXJ5IHRoYXQgY29ycmUtCisgICAgICAgc3BvbmQgdG8gdGhlIFBPU0lYIHJlZ3VsYXIgZXhwcmVzc2lvbiBBUEksIGJ1dCB0aGV5IGRvIG5vdCBnaXZlICBhY2Nlc3MKKyAgICAgICB0byBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkuIFRoZXkgYXJlIGRlc2NyaWJlZCBpbiB0aGUgcGNyZTJwb3NpeCBkb2N1bWVuLQorICAgICAgIHRhdGlvbi4gQm90aCB0aGVzZSBBUElzIGRlZmluZSBhIHNldCBvZiBDIGZ1bmN0aW9uIGNhbGxzLgorCisgICAgICAgVGhlIG5hdGl2ZSBBUEkgQyBkYXRhIHR5cGVzLCBmdW5jdGlvbiBwcm90b3R5cGVzLCAgb3B0aW9uICB2YWx1ZXMsICBhbmQKKyAgICAgICBlcnJvciBjb2RlcyBhcmUgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUgcGNyZTIuaCwgd2hpY2ggY29udGFpbnMgZGVmLQorICAgICAgIGluaXRpb25zIG9mIFBDUkUyX01BSk9SIGFuZCBQQ1JFMl9NSU5PUiwgdGhlIG1ham9yICBhbmQgIG1pbm9yICByZWxlYXNlCisgICAgICAgbnVtYmVycyAgZm9yIHRoZSBsaWJyYXJ5LiBBcHBsaWNhdGlvbnMgY2FuIHVzZSB0aGVzZSB0byBpbmNsdWRlIHN1cHBvcnQKKyAgICAgICBmb3IgZGlmZmVyZW50IHJlbGVhc2VzIG9mIFBDUkUyLgorCisgICAgICAgSW4gYSBXaW5kb3dzIGVudmlyb25tZW50LCBpZiB5b3Ugd2FudCB0byBzdGF0aWNhbGx5IGxpbmsgYW4gYXBwbGljYXRpb24KKyAgICAgICBwcm9ncmFtICBhZ2FpbnN0ICBhIG5vbi1kbGwgUENSRTIgbGlicmFyeSwgeW91IG11c3QgZGVmaW5lIFBDUkUyX1NUQVRJQworICAgICAgIGJlZm9yZSBpbmNsdWRpbmcgcGNyZTIuaC4KKworICAgICAgIFRoZSBmdW5jdGlvbnMgcGNyZTJfY29tcGlsZSgpLCBhbmQgcGNyZTJfbWF0Y2goKSBhcmUgdXNlZCBmb3IgY29tcGlsaW5nCisgICAgICAgYW5kICBtYXRjaGluZyByZWd1bGFyIGV4cHJlc3Npb25zIGluIGEgUGVybC1jb21wYXRpYmxlIG1hbm5lci4gQSBzYW1wbGUKKyAgICAgICBwcm9ncmFtIHRoYXQgZGVtb25zdHJhdGVzIHRoZSBzaW1wbGVzdCB3YXkgb2YgdXNpbmcgdGhlbSBpcyBwcm92aWRlZCBpbgorICAgICAgIHRoZSBmaWxlIGNhbGxlZCBwY3JlMmRlbW8uYyBpbiB0aGUgUENSRTIgc291cmNlIGRpc3RyaWJ1dGlvbi4gQSBsaXN0aW5nCisgICAgICAgb2YgdGhpcyBwcm9ncmFtIGlzICBnaXZlbiAgaW4gIHRoZSAgcGNyZTJkZW1vICBkb2N1bWVudGF0aW9uLCAgYW5kICB0aGUKKyAgICAgICBwY3JlMnNhbXBsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyBob3cgdG8gY29tcGlsZSBhbmQgcnVuIGl0LgorCisgICAgICAgSnVzdC1pbi10aW1lICBjb21waWxlciBzdXBwb3J0IGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUgb2YgUENSRTIgdGhhdCBjYW4KKyAgICAgICBiZSBidWlsdCBpbiBhcHByb3ByaWF0ZSBoYXJkd2FyZSBlbnZpcm9ubWVudHMuIEl0IGdyZWF0bHkgc3BlZWRzIHVwIHRoZQorICAgICAgIG1hdGNoaW5nICBwZXJmb3JtYW5jZSBvZiBtYW55IHBhdHRlcm5zLiBQcm9ncmFtcyBjYW4gcmVxdWVzdCB0aGF0IGl0IGJlCisgICAgICAgdXNlZCBpZiBhdmFpbGFibGUsIGJ5IGNhbGxpbmcgcGNyZTJfaml0X2NvbXBpbGUoKSBhZnRlciBhICBwYXR0ZXJuICBoYXMKKyAgICAgICBiZWVuIHN1Y2Nlc3NmdWxseSBjb21waWxlZCBieSBwY3JlMl9jb21waWxlKCkuIFRoaXMgZG9lcyBub3RoaW5nIGlmIEpJVAorICAgICAgIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4KKworICAgICAgIE1vcmUgY29tcGxpY2F0ZWQgcHJvZ3JhbXMgbWlnaHQgbmVlZCB0byAgbWFrZSAgdXNlICBvZiAgdGhlICBzcGVjaWFsaXN0CisgICAgICAgZnVuY3Rpb25zICAgIHBjcmUyX2ppdF9zdGFja19jcmVhdGUoKSwgICAgcGNyZTJfaml0X3N0YWNrX2ZyZWUoKSwgICBhbmQKKyAgICAgICBwY3JlMl9qaXRfc3RhY2tfYXNzaWduKCkgaW4gb3JkZXIgdG8gIGNvbnRyb2wgIHRoZSAgSklUICBjb2RlJ3MgIG1lbW9yeQorICAgICAgIHVzYWdlLgorCisgICAgICAgSklUIG1hdGNoaW5nIGlzIGF1dG9tYXRpY2FsbHkgdXNlZCBieSBwY3JlMl9tYXRjaCgpIGlmIGl0IGlzIGF2YWlsYWJsZS4KKyAgICAgICBUaGVyZSBpcyBhbHNvIGEgZGlyZWN0IGludGVyZmFjZSBmb3IgSklUIG1hdGNoaW5nLCB3aGljaCBnaXZlcyBpbXByb3ZlZAorICAgICAgIHBlcmZvcm1hbmNlLiAgVGhlICBKSVQtc3BlY2lmaWMgZnVuY3Rpb25zIGFyZSBkaXNjdXNzZWQgaW4gdGhlIHBjcmUyaml0CisgICAgICAgZG9jdW1lbnRhdGlvbi4KKworICAgICAgIEEgc2Vjb25kIG1hdGNoaW5nIGZ1bmN0aW9uLCBwY3JlMl9kZmFfbWF0Y2goKSwgd2hpY2ggaXMgIG5vdCAgUGVybC1jb20tCisgICAgICAgcGF0aWJsZSwgIGlzICBhbHNvICBwcm92aWRlZC4gIFRoaXMgIHVzZXMgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIGZvciB0aGUKKyAgICAgICBtYXRjaGluZy4gVGhlIGFsdGVybmF0aXZlIGFsZ29yaXRobSBmaW5kcyBhbGwgcG9zc2libGUgIG1hdGNoZXMgIChhdCAgYQorICAgICAgIGdpdmVuICBwb2ludCAgaW4gIHRoZSBzdWJqZWN0KSwgYW5kIHNjYW5zIHRoZSBzdWJqZWN0IGp1c3Qgb25jZSAodW5sZXNzCisgICAgICAgdGhlcmUgYXJlIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucykuICBIb3dldmVyLCAgdGhpcyAgYWxnb3JpdGhtICBkb2VzICBub3QKKyAgICAgICByZXR1cm4gIGNhcHR1cmVkICBzdWJzdHJpbmdzLiAgQSAgZGVzY3JpcHRpb24gb2YgdGhlIHR3byBtYXRjaGluZyBhbGdvLQorICAgICAgIHJpdGhtcyAgYW5kICB0aGVpciAgYWR2YW50YWdlcyAgYW5kICBkaXNhZHZhbnRhZ2VzICBpcyAgZ2l2ZW4gIGluICAgdGhlCisgICAgICAgcGNyZTJtYXRjaGluZyAgICBkb2N1bWVudGF0aW9uLiAgIFRoZXJlICAgaXMgICBubyAgIEpJVCAgIHN1cHBvcnQgICBmb3IKKyAgICAgICBwY3JlMl9kZmFfbWF0Y2goKS4KKworICAgICAgIEluIGFkZGl0aW9uIHRvIHRoZSBtYWluIGNvbXBpbGluZyBhbmQgIG1hdGNoaW5nICBmdW5jdGlvbnMsICB0aGVyZSAgYXJlCisgICAgICAgY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBleHRyYWN0aW5nIGNhcHR1cmVkIHN1YnN0cmluZ3MgZnJvbSBhIHN1YmplY3QKKyAgICAgICBzdHJpbmcgdGhhdCBoYXMgYmVlbiBtYXRjaGVkIGJ5IHBjcmUyX21hdGNoKCkuIFRoZXkgYXJlOgorCisgICAgICAgICBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUoKQorICAgICAgICAgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIoKQorICAgICAgICAgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUoKQorICAgICAgICAgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcigpCisgICAgICAgICBwY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQoKQorICAgICAgICAgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUoKQorICAgICAgICAgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlcigpCisgICAgICAgICBwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4oKQorICAgICAgICAgcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUoKQorCisgICAgICAgcGNyZTJfc3Vic3RyaW5nX2ZyZWUoKSBhbmQgcGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZSgpICBhcmUgIGFsc28gIHByby0KKyAgICAgICB2aWRlZCwgdG8gZnJlZSB0aGUgbWVtb3J5IHVzZWQgZm9yIGV4dHJhY3RlZCBzdHJpbmdzLgorCisgICAgICAgVGhlICBmdW5jdGlvbiAgcGNyZTJfc3Vic3RpdHV0ZSgpICBjYW4gYmUgY2FsbGVkIHRvIG1hdGNoIGEgcGF0dGVybiBhbmQKKyAgICAgICByZXR1cm4gYSBjb3B5IG9mIHRoZSBzdWJqZWN0IHN0cmluZyB3aXRoIHN1YnN0aXR1dGlvbnMgZm9yICBwYXJ0cyAgdGhhdAorICAgICAgIHdlcmUgbWF0Y2hlZC4KKworICAgICAgIEZpbmFsbHksICB0aGVyZSAgYXJlIGZ1bmN0aW9ucyBmb3IgZmluZGluZyBvdXQgaW5mb3JtYXRpb24gYWJvdXQgYSBjb20tCisgICAgICAgcGlsZWQgcGF0dGVybiAocGNyZTJfcGF0dGVybl9pbmZvKCkpIGFuZCBhYm91dCB0aGUgIGNvbmZpZ3VyYXRpb24gIHdpdGgKKyAgICAgICB3aGljaCBQQ1JFMiB3YXMgYnVpbHQgKHBjcmUyX2NvbmZpZygpKS4KKworCitTVFJJTkcgTEVOR1RIUyBBTkQgT0ZGU0VUUworCisgICAgICAgVGhlICBQQ1JFMiAgQVBJICB1c2VzICBzdHJpbmcgIGxlbmd0aHMgYW5kIG9mZnNldHMgaW50byBzdHJpbmdzIG9mIGNvZGUKKyAgICAgICB1bml0cyBpbiBzZXZlcmFsIHBsYWNlcy4gVGhlc2UgdmFsdWVzIGFyZSBhbHdheXMgIG9mICB0eXBlICBQQ1JFMl9TSVpFLAorICAgICAgIHdoaWNoICBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUsIGN1cnJlbnRseSBhbHdheXMgZGVmaW5lZCBhcyBzaXplX3QuCisgICAgICAgVGhlIGxhcmdlc3QgIHZhbHVlICB0aGF0ICBjYW4gIGJlICBzdG9yZWQgIGluICBzdWNoICBhICB0eXBlICAodGhhdCAgaXMKKyAgICAgICB+KFBDUkUyX1NJWkUpMCkgIGlzIHJlc2VydmVkIGFzIGEgc3BlY2lhbCBpbmRpY2F0b3IgZm9yIHplcm8tdGVybWluYXRlZAorICAgICAgIHN0cmluZ3MgYW5kIHVuc2V0IG9mZnNldHMuICBUaGVyZWZvcmUsIHRoZSBsb25nZXN0IHN0cmluZyB0aGF0ICBjYW4gIGJlCisgICAgICAgaGFuZGxlZCBpcyBvbmUgbGVzcyB0aGFuIHRoaXMgbWF4aW11bS4KKworCitORVdMSU5FUworCisgICAgICAgUENSRTIgc3VwcG9ydHMgZml2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgZm9yIGluZGljYXRpbmcgbGluZSBicmVha3MgaW4KKyAgICAgICBzdHJpbmdzOiBhIHNpbmdsZSBDUiAoY2FycmlhZ2UgcmV0dXJuKSBjaGFyYWN0ZXIsIGEgIHNpbmdsZSAgTEYgIChsaW5lLQorICAgICAgIGZlZWQpIGNoYXJhY3RlciwgdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiwgYW55IG9mIHRoZSB0aHJlZSBwcmUtCisgICAgICAgY2VkaW5nLCBvciBhbnkgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlLiBUaGUgVW5pY29kZSBuZXdsaW5lICBzZXF1ZW5jZXMKKyAgICAgICBhcmUgIHRoZSAgdGhyZWUganVzdCBtZW50aW9uZWQsIHBsdXMgdGhlIHNpbmdsZSBjaGFyYWN0ZXJzIFZUICh2ZXJ0aWNhbAorICAgICAgIHRhYiwgVSswMDBCKSwgRkYgKGZvcm0gZmVlZCwgVSswMDBDKSwgTkVMIChuZXh0IGxpbmUsIFUrMDA4NSksIExTIChsaW5lCisgICAgICAgc2VwYXJhdG9yLCBVKzIwMjgpLCBhbmQgUFMgKHBhcmFncmFwaCBzZXBhcmF0b3IsIFUrMjAyOSkuCisKKyAgICAgICBFYWNoICBvZiAgdGhlIGZpcnN0IHRocmVlIGNvbnZlbnRpb25zIGlzIHVzZWQgYnkgYXQgbGVhc3Qgb25lIG9wZXJhdGluZworICAgICAgIHN5c3RlbSBhcyBpdHMgc3RhbmRhcmQgbmV3bGluZSBzZXF1ZW5jZS4gV2hlbiBQQ1JFMiBpcyBidWlsdCwgYSBkZWZhdWx0CisgICAgICAgY2FuICBiZSAgc3BlY2lmaWVkLiAgVGhlIGRlZmF1bHQgZGVmYXVsdCBpcyBMRiwgd2hpY2ggaXMgdGhlIFVuaXggc3Rhbi0KKyAgICAgICBkYXJkLiBIb3dldmVyLCB0aGUgbmV3bGluZSBjb252ZW50aW9uIGNhbiBiZSBjaGFuZ2VkIGJ5IGFuICBhcHBsaWNhdGlvbgorICAgICAgIHdoZW4gY2FsbGluZyBwY3JlMl9jb21waWxlKCksIG9yIGl0IGNhbiBiZSBzcGVjaWZpZWQgYnkgc3BlY2lhbCB0ZXh0IGF0CisgICAgICAgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIGl0c2VsZjsgdGhpcyBvdmVycmlkZXMgYW55IG90aGVyIHNldHRpbmdzLiBTZWUKKyAgICAgICB0aGUgcGNyZTJwYXR0ZXJuIHBhZ2UgZm9yIGRldGFpbHMgb2YgdGhlIHNwZWNpYWwgY2hhcmFjdGVyIHNlcXVlbmNlcy4KKworICAgICAgIEluICB0aGUgIFBDUkUyICBkb2N1bWVudGF0aW9uICB0aGUgIHdvcmQgIm5ld2xpbmUiIGlzIHVzZWQgdG8gbWVhbiAidGhlCisgICAgICAgY2hhcmFjdGVyIG9yIHBhaXIgb2YgY2hhcmFjdGVycyB0aGF0IGluZGljYXRlIGEgbGluZSBicmVhayIuIFRoZSBjaG9pY2UKKyAgICAgICBvZiAgbmV3bGluZSBjb252ZW50aW9uIGFmZmVjdHMgdGhlIGhhbmRsaW5nIG9mIHRoZSBkb3QsIGNpcmN1bWZsZXgsIGFuZAorICAgICAgIGRvbGxhciBtZXRhY2hhcmFjdGVycywgdGhlIGhhbmRsaW5nIG9mICMtY29tbWVudHMgaW4gL3ggbW9kZSwgYW5kLCB3aGVuCisgICAgICAgQ1JMRiAgaXMgYSByZWNvZ25pemVkIGxpbmUgZW5kaW5nIHNlcXVlbmNlLCB0aGUgbWF0Y2ggcG9zaXRpb24gYWR2YW5jZS0KKyAgICAgICBtZW50IGZvciBhIG5vbi1hbmNob3JlZCBwYXR0ZXJuLiBUaGVyZSBpcyBtb3JlIGRldGFpbCBhYm91dCB0aGlzIGluIHRoZQorICAgICAgIHNlY3Rpb24gb24gcGNyZTJfbWF0Y2goKSBvcHRpb25zIGJlbG93LgorCisgICAgICAgVGhlICBjaG9pY2Ugb2YgbmV3bGluZSBjb252ZW50aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgaW50ZXJwcmV0YXRpb24gb2YKKyAgICAgICB0aGUgXG4gb3IgXHIgZXNjYXBlIHNlcXVlbmNlcywgbm9yIGRvZXMgaXQgYWZmZWN0IHdoYXQgXFIgbWF0Y2hlczsgdGhpcworICAgICAgIGhhcyBpdHMgb3duIHNlcGFyYXRlIGNvbnZlbnRpb24uCisKKworTVVMVElUSFJFQURJTkcKKworICAgICAgIEluICBhIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb24gaXQgaXMgaW1wb3J0YW50IHRvIGtlZXAgdGhyZWFkLXNwZWNpZmljCisgICAgICAgZGF0YSBzZXBhcmF0ZSBmcm9tIGRhdGEgdGhhdCBjYW4gYmUgc2hhcmVkIGJldHdlZW4gdGhyZWFkcy4gIFRoZSAgUENSRTIKKyAgICAgICBsaWJyYXJ5ICBjb2RlICBpdHNlbGYgIGlzICB0aHJlYWQtc2FmZTogaXQgY29udGFpbnMgbm8gc3RhdGljIG9yIGdsb2JhbAorICAgICAgIHZhcmlhYmxlcy4gVGhlIEFQSSBpcyBkZXNpZ25lZCB0byBiZSAgZmFpcmx5ICBzaW1wbGUgIGZvciAgbm9uLXRocmVhZGVkCisgICAgICAgYXBwbGljYXRpb25zICB3aGlsZSBhdCB0aGUgc2FtZSB0aW1lIGVuc3VyaW5nIHRoYXQgbXVsdGl0aHJlYWRlZCBhcHBsaS0KKyAgICAgICBjYXRpb25zIGNhbiB1c2UgaXQuCisKKyAgICAgICBUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgYmxvY2tzIG9mIGRhdGEgdGhhdCBhcmUgdXNlZCB0byBwYXNzIGluZm9yLQorICAgICAgIG1hdGlvbiBiZXR3ZWVuIHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIFBDUkUyIGxpYnJhcmllcy4KKworICAgICAgICgxKSBBIHBvaW50ZXIgdG8gdGhlIGNvbXBpbGVkIGZvcm0gb2YgYSBwYXR0ZXJuIGlzIHJldHVybmVkIHRvIHRoZSB1c2VyCisgICAgICAgd2hlbiBwY3JlMl9jb21waWxlKCkgaXMgc3VjY2Vzc2Z1bC4gVGhlIGRhdGEgaW4gdGhlIGNvbXBpbGVkIHBhdHRlcm4gaXMKKyAgICAgICBmaXhlZCwgIGFuZCAgZG9lcyBub3QgY2hhbmdlIHdoZW4gdGhlIHBhdHRlcm4gaXMgbWF0Y2hlZC4gVGhlcmVmb3JlLCBpdAorICAgICAgIGlzIHRocmVhZC1zYWZlLCB0aGF0IGlzLCB0aGUgc2FtZSBjb21waWxlZCBwYXR0ZXJuIGNhbiBiZSB1c2VkIGJ5ICBtb3JlCisgICAgICAgdGhhbiBvbmUgdGhyZWFkIHNpbXVsdGFuZW91c2x5LiBBbiBhcHBsaWNhdGlvbiBjYW4gY29tcGlsZSBhbGwgaXRzIHBhdC0KKyAgICAgICB0ZXJucyBhdCB0aGUgc3RhcnQsIGJlZm9yZSBmb3JraW5nIG9mZiBtdWx0aXBsZSB0aHJlYWRzIHRoYXQgdXNlICB0aGVtLgorICAgICAgIEhvd2V2ZXIsICBpZiAgdGhlICBqdXN0LWluLXRpbWUgIG9wdGltaXphdGlvbiBmZWF0dXJlIGlzIGJlaW5nIHVzZWQsIGl0CisgICAgICAgbmVlZHMgc2VwYXJhdGUgbWVtb3J5IHN0YWNrIGFyZWFzIGZvciBlYWNoICB0aHJlYWQuICBTZWUgIHRoZSAgcGNyZTJqaXQKKyAgICAgICBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgICAoMikgIFRoZSAgbmV4dCBzZWN0aW9uIGJlbG93IGludHJvZHVjZXMgdGhlIGlkZWEgb2YgImNvbnRleHRzIiBpbiB3aGljaAorICAgICAgIFBDUkUyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBBIGNvbnRleHQgaXMgbm90aGluZyBtb3JlIHRoYW4gYSBjb2xsZWN0aW9uCisgICAgICAgb2YgcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgdGhlIHdheSBQQ1JFMiBvcGVyYXRlcy4gR3JvdXBpbmcgYSBudW1iZXIgb2YKKyAgICAgICBwYXJhbWV0ZXJzIHRvZ2V0aGVyIGluIGEgY29udGV4dCBpcyBhIGNvbnZlbmllbnQgd2F5IG9mIHBhc3NpbmcgdGhlbSB0bworICAgICAgIGEgIFBDUkUyICBmdW5jdGlvbiB3aXRob3V0IHVzaW5nIGxvdHMgb2YgYXJndW1lbnRzLiBUaGUgcGFyYW1ldGVycyB0aGF0CisgICAgICAgYXJlIHN0b3JlZCBpbiBjb250ZXh0cyBhcmUgaW4gc29tZSBzZW5zZSAgImFkdmFuY2VkICBmZWF0dXJlcyIgIG9mICB0aGUKKyAgICAgICBBUEkuIE1hbnkgc3RyYWlnaHRmb3J3YXJkIGFwcGxpY2F0aW9ucyB3aWxsIG5vdCBuZWVkIHRvIHVzZSBjb250ZXh0cy4KKworICAgICAgIEluIGEgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbiwgaWYgdGhlIHBhcmFtZXRlcnMgaW4gYSBjb250ZXh0IGFyZSB2YWwtCisgICAgICAgdWVzIHRoYXQgYXJlIG5ldmVyIGNoYW5nZWQsIHRoZSBzYW1lIGNvbnRleHQgY2FuIGJlICB1c2VkICBieSAgYWxsICB0aGUKKyAgICAgICB0aHJlYWRzLiBIb3dldmVyLCBpZiBhbnkgdGhyZWFkIG5lZWRzIHRvIGNoYW5nZSBhbnkgdmFsdWUgaW4gYSBjb250ZXh0LAorICAgICAgIGl0IG11c3QgbWFrZSBpdHMgb3duIHRocmVhZC1zcGVjaWZpYyBjb3B5LgorCisgICAgICAgKDMpIFRoZSBtYXRjaGluZyBmdW5jdGlvbnMgbmVlZCBhIGJsb2NrIG9mIG1lbW9yeSBmb3Igd29ya2luZyBzcGFjZSBhbmQKKyAgICAgICBmb3IgIHN0b3JpbmcgIHRoZSByZXN1bHRzIG9mIGEgbWF0Y2guIFRoaXMgaW5jbHVkZXMgZGV0YWlscyBvZiB3aGF0IHdhcworICAgICAgIG1hdGNoZWQsIGFzIHdlbGwgYXMgYWRkaXRpb25hbCAgaW5mb3JtYXRpb24gIHN1Y2ggIGFzICB0aGUgIG5hbWUgIG9mICBhCisgICAgICAgKCpNQVJLKSAgc2V0dGluZy4gRWFjaCB0aHJlYWQgbXVzdCBwcm92aWRlIGl0cyBvd24gdmVyc2lvbiBvZiB0aGlzIG1lbS0KKyAgICAgICBvcnkuCisKKworUENSRTIgQ09OVEVYVFMKKworICAgICAgIFNvbWUgUENSRTIgZnVuY3Rpb25zIGhhdmUgYSBsb3Qgb2YgcGFyYW1ldGVycywgbWFueSBvZiB3aGljaCAgYXJlICB1c2VkCisgICAgICAgb25seSAgYnkgIHNwZWNpYWxpc3QgIGFwcGxpY2F0aW9ucywgIGZvciBleGFtcGxlLCB0aG9zZSB0aGF0IHVzZSBjdXN0b20KKyAgICAgICBtZW1vcnkgbWFuYWdlbWVudCBvciBub24tc3RhbmRhcmQgY2hhcmFjdGVyIHRhYmxlcy4gIFRvICBrZWVwICBmdW5jdGlvbgorICAgICAgIGFyZ3VtZW50ICBsaXN0cyAgYXQgYSByZWFzb25hYmxlIHNpemUsIGFuZCBhdCB0aGUgc2FtZSB0aW1lIHRvIGtlZXAgdGhlCisgICAgICAgQVBJIGV4dGVuc2libGUsICJ1bmNvbW1vbiIgcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvICBjZXJ0YWluICBmdW5jdGlvbnMKKyAgICAgICBpbiAgYSAgY29udGV4dCBpbnN0ZWFkIG9mIGRpcmVjdGx5LiBBIGNvbnRleHQgaXMganVzdCBhIGJsb2NrIG9mIG1lbW9yeQorICAgICAgIHRoYXQgaG9sZHMgdGhlIHBhcmFtZXRlciB2YWx1ZXMuICBBcHBsaWNhdGlvbnMgIHRoYXQgIGRvICBub3QgIG5lZWQgIHRvCisgICAgICAgYWRqdXN0ICBhbnkgIG9mICB0aGUgIGNvbnRleHQgIHBhcmFtZXRlcnMgIGNhbiBwYXNzIE5VTEwgd2hlbiBhIGNvbnRleHQKKyAgICAgICBwb2ludGVyIGlzIHJlcXVpcmVkLgorCisgICAgICAgVGhlcmUgYXJlIHRocmVlIGRpZmZlcmVudCB0eXBlcyBvZiBjb250ZXh0OiBhIGdlbmVyYWwgY29udGV4dCAgdGhhdCAgaXMKKyAgICAgICByZWxldmFudCAgZm9yICBzZXZlcmFsICBQQ1JFMiBvcGVyYXRpb25zLCBhIGNvbXBpbGUtdGltZSBjb250ZXh0LCBhbmQgYQorICAgICAgIG1hdGNoLXRpbWUgY29udGV4dC4KKworICAgVGhlIGdlbmVyYWwgY29udGV4dAorCisgICAgICAgQXQgcHJlc2VudCwgdGhpcyBjb250ZXh0IGp1c3QgIGNvbnRhaW5zICBwb2ludGVycyAgdG8gIChhbmQgIGRhdGEgIGZvcikKKyAgICAgICBleHRlcm5hbCAgbWVtb3J5ICBtYW5hZ2VtZW50ICBmdW5jdGlvbnMgIHRoYXQgIGFyZSAgY2FsbGVkIGZyb20gc2V2ZXJhbAorICAgICAgIHBsYWNlcyBpbiB0aGUgUENSRTIgbGlicmFyeS4gVGhlIGNvbnRleHQgaXMgbmFtZWQgYGdlbmVyYWwnIHJhdGhlciB0aGFuCisgICAgICAgc3BlY2lmaWNhbGx5ICBgbWVtb3J5JyAgYmVjYXVzZSBpbiBmdXR1cmUgb3RoZXIgZmllbGRzIG1heSBiZSBhZGRlZC4gSWYKKyAgICAgICB5b3UgZG8gbm90IHdhbnQgdG8gc3VwcGx5IHlvdXIgb3duIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCAgZnVuY3Rpb25zLAorICAgICAgIHlvdSAgZG8gbm90IG5lZWQgdG8gYm90aGVyIHdpdGggYSBnZW5lcmFsIGNvbnRleHQuIEEgZ2VuZXJhbCBjb250ZXh0IGlzCisgICAgICAgY3JlYXRlZCBieToKKworICAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZSgKKyAgICAgICAgIHZvaWQgKigqcHJpdmF0ZV9tYWxsb2MpKFBDUkUyX1NJWkUsIHZvaWQgKiksCisgICAgICAgICB2b2lkICgqcHJpdmF0ZV9mcmVlKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKm1lbW9yeV9kYXRhKTsKKworICAgICAgIFRoZSB0d28gZnVuY3Rpb24gcG9pbnRlcnMgc3BlY2lmeSBjdXN0b20gbWVtb3J5ICBtYW5hZ2VtZW50ICBmdW5jdGlvbnMsCisgICAgICAgd2hvc2UgcHJvdG90eXBlcyBhcmU6CisKKyAgICAgICAgIHZvaWQgKnByaXZhdGVfbWFsbG9jKFBDUkUyX1NJWkUsIHZvaWQgKik7CisgICAgICAgICB2b2lkICBwcml2YXRlX2ZyZWUodm9pZCAqLCB2b2lkICopOworCisgICAgICAgV2hlbmV2ZXIgY29kZSBpbiBQQ1JFMiBjYWxscyB0aGVzZSBmdW5jdGlvbnMsIHRoZSBmaW5hbCBhcmd1bWVudCBpcyB0aGUKKyAgICAgICB2YWx1ZSBvZiBtZW1vcnlfZGF0YS4gRWl0aGVyIG9mIHRoZSBmaXJzdCB0d28gYXJndW1lbnRzIG9mIHRoZSBjcmVhdGlvbgorICAgICAgIGZ1bmN0aW9uICBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSB0aGUgc3lzdGVtIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmMtCisgICAgICAgdGlvbnMgbWFsbG9jKCkgYW5kIGZyZWUoKSBhcmUgdXNlZC4gKFRoaXMgaXMgbm90IGN1cnJlbnRseSAgdXNlZnVsLCAgYXMKKyAgICAgICB0aGVyZSAgYXJlICBubyAgb3RoZXIgIGZpZWxkcyBpbiBhIGdlbmVyYWwgY29udGV4dCwgYnV0IGluIGZ1dHVyZSB0aGVyZQorICAgICAgIG1pZ2h0IGJlLikgIFRoZSBwcml2YXRlX21hbGxvYygpIGZ1bmN0aW9uICBpcyAgdXNlZCAgKGlmICBzdXBwbGllZCkgIHRvCisgICAgICAgb2J0YWluICBtZW1vcnkgIGZvciBzdG9yaW5nIHRoZSBjb250ZXh0LCBhbmQgYWxsIHRocmVlIHZhbHVlcyBhcmUgc2F2ZWQKKyAgICAgICBhcyBwYXJ0IG9mIHRoZSBjb250ZXh0LgorCisgICAgICAgV2hlbmV2ZXIgUENSRTIgY3JlYXRlcyBhIGRhdGEgYmxvY2sgb2YgYW55IGtpbmQsIHRoZSBibG9jayAgY29udGFpbnMgIGEKKyAgICAgICBwb2ludGVyICB0byB0aGUgZnJlZSgpIGZ1bmN0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgbWFsbG9jKCkgZnVuY3Rpb24gdGhhdAorICAgICAgIHdhcyB1c2VkLiBXaGVuIHRoZSB0aW1lIGNvbWVzIHRvICBmcmVlICB0aGUgIGJsb2NrLCAgdGhpcyAgZnVuY3Rpb24gIGlzCisgICAgICAgY2FsbGVkLgorCisgICAgICAgQSBnZW5lcmFsIGNvbnRleHQgY2FuIGJlIGNvcGllZCBieSBjYWxsaW5nOgorCisgICAgICAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpwY3JlMl9nZW5lcmFsX2NvbnRleHRfY29weSgKKyAgICAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpOworCisgICAgICAgVGhlIG1lbW9yeSB1c2VkIGZvciBhIGdlbmVyYWwgY29udGV4dCBzaG91bGQgYmUgZnJlZWQgYnkgY2FsbGluZzoKKworICAgICAgIHZvaWQgcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCk7CisKKworICAgVGhlIGNvbXBpbGUgY29udGV4dAorCisgICAgICAgQSAgY29tcGlsZSBjb250ZXh0IGlzIHJlcXVpcmVkIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgZGVmYXVsdCB2YWx1ZXMKKyAgICAgICBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBjb21waWxlLXRpbWUgcGFyYW1ldGVyczoKKworICAgICAgICAgV2hhdCBcUiBtYXRjaGVzIChVbmljb2RlIG5ld2xpbmVzIG9yIENSLCBMRiwgQ1JMRiBvbmx5KQorICAgICAgICAgUENSRTIncyBjaGFyYWN0ZXIgdGFibGVzCisgICAgICAgICBUaGUgbmV3bGluZSBjaGFyYWN0ZXIgc2VxdWVuY2UKKyAgICAgICAgIFRoZSBjb21waWxlIHRpbWUgbmVzdGVkIHBhcmVudGhlc2VzIGxpbWl0CisgICAgICAgICBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIHBhdHRlcm4gc3RyaW5nCisgICAgICAgICBBbiBleHRlcm5hbCBmdW5jdGlvbiBmb3Igc3RhY2sgY2hlY2tpbmcKKworICAgICAgIEEgY29tcGlsZSBjb250ZXh0IGlzIGFsc28gcmVxdWlyZWQgaWYgeW91IGFyZSB1c2luZyBjdXN0b20gbWVtb3J5ICBtYW4tCisgICAgICAgYWdlbWVudC4gICBJZiAgbm9uZSBvZiB0aGVzZSBhcHBseSwganVzdCBwYXNzIE5VTEwgYXMgdGhlIGNvbnRleHQgYXJndS0KKyAgICAgICBtZW50IG9mIHBjcmUyX2NvbXBpbGUoKS4KKworICAgICAgIEEgY29tcGlsZSBjb250ZXh0IGlzIGNyZWF0ZWQsIGNvcGllZCwgYW5kIGZyZWVkIGJ5IHRoZSBmb2xsb3dpbmcgIGZ1bmMtCisgICAgICAgdGlvbnM6CisKKyAgICAgICBwY3JlMl9jb21waWxlX2NvbnRleHQgKnBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUoCisgICAgICAgICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKmdjb250ZXh0KTsKKworICAgICAgIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqcGNyZTJfY29tcGlsZV9jb250ZXh0X2NvcHkoCisgICAgICAgICBwY3JlMl9jb21waWxlX2NvbnRleHQgKmNjb250ZXh0KTsKKworICAgICAgIHZvaWQgcGNyZTJfY29tcGlsZV9jb250ZXh0X2ZyZWUocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCk7CisKKyAgICAgICBBICBjb21waWxlICBjb250ZXh0ICBpcyBjcmVhdGVkIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGl0cyBwYXJhbWV0ZXJzLgorICAgICAgIFRoZXNlIGNhbiBiZSBjaGFuZ2VkIGJ5IGNhbGxpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMsIHdoaWNoIHJldHVybiAwCisgICAgICAgb24gc3VjY2Vzcywgb3IgUENSRTJfRVJST1JfQkFEREFUQSBpZiBpbnZhbGlkIGRhdGEgaXMgZGV0ZWN0ZWQuCisKKyAgICAgICBpbnQgcGNyZTJfc2V0X2JzcihwY3JlMl9jb21waWxlX2NvbnRleHQgKmNjb250ZXh0LAorICAgICAgICAgdWludDMyX3QgdmFsdWUpOworCisgICAgICAgVGhlICB2YWx1ZSAgbXVzdCAgYmUgUENSRTJfQlNSX0FOWUNSTEYsIHRvIHNwZWNpZnkgdGhhdCBcUiBtYXRjaGVzIG9ubHkKKyAgICAgICBDUiwgTEYsIG9yIENSTEYsIG9yIFBDUkUyX0JTUl9VTklDT0RFLCB0byBzcGVjaWZ5IHRoYXQgXFIgIG1hdGNoZXMgIGFueQorICAgICAgIFVuaWNvZGUgbGluZSBlbmRpbmcgc2VxdWVuY2UuIFRoZSB2YWx1ZSBpcyB1c2VkIGJ5IHRoZSBKSVQgY29tcGlsZXIgYW5kCisgICAgICAgYnkgIHRoZSAgdHdvICBpbnRlcnByZXRlZCAgIG1hdGNoaW5nICAgZnVuY3Rpb25zLCAgIHBjcmUyX21hdGNoKCkgICBhbmQKKyAgICAgICBwY3JlMl9kZmFfbWF0Y2goKS4KKworICAgICAgIGludCBwY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcyhwY3JlMl9jb21waWxlX2NvbnRleHQgKmNjb250ZXh0LAorICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqdGFibGVzKTsKKworICAgICAgIFRoZSAgdmFsdWUgIG11c3QgIGJlICB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0byBwY3JlMl9tYWtldGFibGVzKCksIHdob3NlCisgICAgICAgb25seSBhcmd1bWVudCBpcyBhIGdlbmVyYWwgY29udGV4dC4gVGhpcyBmdW5jdGlvbiBidWlsZHMgYSBzZXQgb2YgY2hhci0KKyAgICAgICBhY3RlciB0YWJsZXMgaW4gdGhlIGN1cnJlbnQgbG9jYWxlLgorCisgICAgICAgaW50IHBjcmUyX3NldF9tYXhfcGF0dGVybl9sZW5ndGgocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwKKyAgICAgICAgIFBDUkUyX1NJWkUgdmFsdWUpOworCisgICAgICAgVGhpcyAgc2V0cyBhIG1heGltdW0gbGVuZ3RoLCBpbiBjb2RlIHVuaXRzLCBmb3IgdGhlIHBhdHRlcm4gc3RyaW5nIHRoYXQKKyAgICAgICBpcyB0byBiZSBjb21waWxlZC4gSWYgdGhlIHBhdHRlcm4gaXMgbG9uZ2VyLCAgYW4gIGVycm9yICBpcyAgZ2VuZXJhdGVkLgorICAgICAgIFRoaXMgIGZhY2lsaXR5ICBpcyAgcHJvdmlkZWQgIHNvIHRoYXQgYXBwbGljYXRpb25zIHRoYXQgYWNjZXB0IHBhdHRlcm5zCisgICAgICAgZnJvbSBleHRlcm5hbCBzb3VyY2VzIGNhbiBsaW1pdCB0aGVpciBzaXplLiBUaGUgZGVmYXVsdCBpcyB0aGUgIGxhcmdlc3QKKyAgICAgICBudW1iZXIgdGhhdCBhIFBDUkUyX1NJWkUgdmFyaWFibGUgY2FuIGhvbGQsIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHVubGltLQorICAgICAgIGl0ZWQuCisKKyAgICAgICBpbnQgcGNyZTJfc2V0X25ld2xpbmUocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwKKyAgICAgICAgIHVpbnQzMl90IHZhbHVlKTsKKworICAgICAgIFRoaXMgc3BlY2lmaWVzIHdoaWNoIGNoYXJhY3RlcnMgb3IgY2hhcmFjdGVyIHNlcXVlbmNlcyBhcmUgdG8gYmUgcmVjb2ctCisgICAgICAgbml6ZWQgIGFzIG5ld2xpbmVzLiBUaGUgdmFsdWUgbXVzdCBiZSBvbmUgb2YgUENSRTJfTkVXTElORV9DUiAoY2FycmlhZ2UKKyAgICAgICByZXR1cm4gb25seSksIFBDUkUyX05FV0xJTkVfTEYgKGxpbmVmZWVkIG9ubHkpLCBQQ1JFMl9ORVdMSU5FX0NSTEYgKHRoZQorICAgICAgIHR3by1jaGFyYWN0ZXIgIHNlcXVlbmNlICBDUiBmb2xsb3dlZCBieSBMRiksIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRiAoYW55CisgICAgICAgb2YgdGhlIGFib3ZlKSwgb3IgUENSRTJfTkVXTElORV9BTlkgKGFueSBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UpLgorCisgICAgICAgV2hlbiBhIHBhdHRlcm4gaXMgY29tcGlsZWQgd2l0aCB0aGUgUENSRTJfRVhURU5ERUQgb3B0aW9uLCB0aGUgdmFsdWUgb2YKKyAgICAgICB0aGlzICBwYXJhbWV0ZXIgIGFmZmVjdHMgIHRoZSByZWNvZ25pdGlvbiBvZiB3aGl0ZSBzcGFjZSBhbmQgdGhlIGVuZCBvZgorICAgICAgIGludGVybmFsIGNvbW1lbnRzIHN0YXJ0aW5nIHdpdGggIy4gVGhlIHZhbHVlIGlzIHNhdmVkIHdpdGggdGhlIGNvbXBpbGVkCisgICAgICAgcGF0dGVybiAgZm9yICBzdWJzZXF1ZW50ICB1c2UgYnkgdGhlIEpJVCBjb21waWxlciBhbmQgYnkgdGhlIHR3byBpbnRlci0KKyAgICAgICBwcmV0ZWQgbWF0Y2hpbmcgZnVuY3Rpb25zLCBwY3JlMl9tYXRjaCgpIGFuZCBwY3JlMl9kZmFfbWF0Y2goKS4KKworICAgICAgIGludCBwY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwKKyAgICAgICAgIHVpbnQzMl90IHZhbHVlKTsKKworICAgICAgIFRoaXMgcGFyYW1ldGVyIGFqdXN0cyB0aGUgbGltaXQsIHNldCB3aGVuIFBDUkUyIGlzIGJ1aWx0IChkZWZhdWx0IDI1MCksCisgICAgICAgb24gIHRoZSAgZGVwdGggIG9mICBwYXJlbnRoZXNpcyAgbmVzdGluZyBpbiBhIHBhdHRlcm4uIFRoaXMgbGltaXQgc3RvcHMKKyAgICAgICByb2d1ZSBwYXR0ZXJucyB1c2luZyB1cCB0b28gbXVjaCBzeXN0ZW0gc3RhY2sgd2hlbiBiZWluZyBjb21waWxlZC4KKworICAgICAgIGludCBwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwKKyAgICAgICAgIGludCAoKmd1YXJkX2Z1bmN0aW9uKSh1aW50MzJfdCwgdm9pZCAqKSwgdm9pZCAqdXNlcl9kYXRhKTsKKworICAgICAgIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgUENSRTIgaW4gdGhyZWFkcyB3aXRoICB2ZXJ5CisgICAgICAgbGltaXRlZCAgc3lzdGVtICBzdGFjaywgIHdoZXJlIHJ1bm5pbmcgb3V0IG9mIHN0YWNrIGlzIHRvIGJlIGF2b2lkZWQgYXQKKyAgICAgICBhbGwgY29zdHMuIFRoZSBwYXJlbnRoZXNpcyBsaW1pdCBhYm92ZSBjYW5ub3QgdGFrZSBhY2NvdW50IG9mIGhvdyAgbXVjaAorICAgICAgIHN0YWNrICBpcyAgYWN0dWFsbHkgIGF2YWlsYWJsZS4gIEZvciAgYSBmaW5lciBjb250cm9sLCB5b3UgY2FuIHN1cHBseSBhCisgICAgICAgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbmV2ZXIgcGNyZTJfY29tcGlsZSgpIHN0YXJ0cyAgdG8gIGNvbXBpbGUgIGEKKyAgICAgICBwYXJlbnRoZXNpemVkICBwYXJ0ICBvZiAgYSAgcGF0dGVybi4gVGhpcyBmdW5jdGlvbiBjYW4gY2hlY2sgdGhlIGFjdHVhbAorICAgICAgIHN0YWNrIHNpemUgKG9yIGFueXRoaW5nIGVsc2UgdGhhdCBpdCB3YW50cyB0bywgb2YgY291cnNlKS4KKworICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgY2FsbG91dCBmdW5jdGlvbiBnaXZlcyB0aGUgY3VycmVudCAgZGVwdGggIG9mCisgICAgICAgbmVzdGluZywgIGFuZCAgdGhlIHNlY29uZCBpcyB1c2VyIGRhdGEgdGhhdCBpcyBzZXQgdXAgYnkgdGhlIGxhc3QgYXJndS0KKyAgICAgICBtZW50ICBvZiAgcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKCkuICBUaGUgIGNhbGxvdXQgICBmdW5jdGlvbgorICAgICAgIHNob3VsZCByZXR1cm4gemVybyBpZiBhbGwgaXMgd2VsbCwgb3Igbm9uLXplcm8gdG8gZm9yY2UgYW4gZXJyb3IuCisKKyAgIFRoZSBtYXRjaCBjb250ZXh0CisKKyAgICAgICBBIG1hdGNoIGNvbnRleHQgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlcyBvZgorICAgICAgIGFueSBvZiB0aGUgZm9sbG93aW5nIG1hdGNoLXRpbWUgcGFyYW1ldGVyczoKKworICAgICAgICAgQSBjYWxsb3V0IGZ1bmN0aW9uCisgICAgICAgICBUaGUgb2Zmc2V0IGxpbWl0IGZvciBtYXRjaGluZyBhbiB1bmFuY2hvcmVkIHBhdHRlcm4KKyAgICAgICAgIFRoZSBsaW1pdCBmb3IgY2FsbGluZyBtYXRjaCgpIChzZWUgYmVsb3cpCisgICAgICAgICBUaGUgbGltaXQgZm9yIGNhbGxpbmcgbWF0Y2goKSByZWN1cnNpdmVseQorCisgICAgICAgQSBtYXRjaCBjb250ZXh0IGlzIGFsc28gcmVxdWlyZWQgaWYgeW91IGFyZSB1c2luZyBjdXN0b20gbWVtb3J5IG1hbmFnZS0KKyAgICAgICBtZW50LiAgIElmICBub25lIG9mIHRoZXNlIGFwcGx5LCBqdXN0IHBhc3MgTlVMTCBhcyB0aGUgY29udGV4dCBhcmd1bWVudAorICAgICAgIG9mIHBjcmUyX21hdGNoKCksIHBjcmUyX2RmYV9tYXRjaCgpLCBvciBwY3JlMl9qaXRfbWF0Y2goKS4KKworICAgICAgIEEgbWF0Y2ggY29udGV4dCBpcyBjcmVhdGVkLCBjb3BpZWQsIGFuZCBmcmVlZCBieSAgdGhlICBmb2xsb3dpbmcgIGZ1bmMtCisgICAgICAgdGlvbnM6CisKKyAgICAgICBwY3JlMl9tYXRjaF9jb250ZXh0ICpwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZSgKKyAgICAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpOworCisgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAqcGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5KAorICAgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQpOworCisgICAgICAgdm9pZCBwY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWUocGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQpOworCisgICAgICAgQSAgbWF0Y2ggIGNvbnRleHQgIGlzICBjcmVhdGVkICB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBpdHMgcGFyYW1ldGVycy4KKyAgICAgICBUaGVzZSBjYW4gYmUgY2hhbmdlZCBieSBjYWxsaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zLCB3aGljaCByZXR1cm4gMAorICAgICAgIG9uIHN1Y2Nlc3MsIG9yIFBDUkUyX0VSUk9SX0JBRERBVEEgaWYgaW52YWxpZCBkYXRhIGlzIGRldGVjdGVkLgorCisgICAgICAgaW50IHBjcmUyX3NldF9jYWxsb3V0KHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0LAorICAgICAgICAgaW50ICgqY2FsbG91dF9mdW5jdGlvbikocGNyZTJfY2FsbG91dF9ibG9jayAqLCB2b2lkICopLAorICAgICAgICAgdm9pZCAqY2FsbG91dF9kYXRhKTsKKworICAgICAgIFRoaXMgIHNldHMgIHVwIGEgImNhbGxvdXQiIGZ1bmN0aW9uLCB3aGljaCBQQ1JFMiB3aWxsIGNhbGwgYXQgc3BlY2lmaWVkCisgICAgICAgcG9pbnRzIGR1cmluZyBhIG1hdGNoaW5nIG9wZXJhdGlvbi4gRGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlIHBjcmUyY2FsbC0KKyAgICAgICBvdXQgZG9jdW1lbnRhdGlvbi4KKworICAgICAgIGludCBwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0LAorICAgICAgICAgUENSRTJfU0laRSB2YWx1ZSk7CisKKyAgICAgICBUaGUgIG9mZnNldF9saW1pdCAgcGFyYW1ldGVyICBsaW1pdHMgIGhvdyAgZmFyIGFuIHVuYW5jaG9yZWQgc2VhcmNoIGNhbgorICAgICAgIGFkdmFuY2UgaW4gdGhlIHN1YmplY3Qgc3RyaW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSAgaXMgIFBDUkUyX1VOU0VULiAgVGhlCisgICAgICAgcGNyZTJfbWF0Y2goKSAgICAgIGFuZCAgICAgIHBjcmUyX2RmYV9tYXRjaCgpICAgICAgZnVuY3Rpb25zICAgICByZXR1cm4KKyAgICAgICBQQ1JFMl9FUlJPUl9OT01BVENIIGlmIGEgbWF0Y2ggd2l0aCBhIHN0YXJ0aW5nIHBvaW50IGJlZm9yZSBvciAgYXQgIHRoZQorICAgICAgIGdpdmVuIG9mZnNldCBpcyBub3QgZm91bmQuIEZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiAvYWJjLyBpcyBtYXRjaGVkCisgICAgICAgYWdhaW5zdCAiMTIzYWJjIiB3aXRoIGFuIG9mZnNldCAgbGltaXQgIGxlc3MgIHRoYW4gIDMsICB0aGUgIHJlc3VsdCAgaXMKKyAgICAgICBQQ1JFMl9FUlJPUl9OT19NQVRDSC4gICBBICBtYXRjaCAgY2FuIG5ldmVyIGJlIGZvdW5kIGlmIHRoZSBzdGFydG9mZnNldAorICAgICAgIGFyZ3VtZW50IG9mIHBjcmUyX21hdGNoKCkgb3IgcGNyZTJfZGZhX21hdGNoKCkgaXMgZ3JlYXRlciB0aGFuIHRoZSBvZmYtCisgICAgICAgc2V0IGxpbWl0LgorCisgICAgICAgV2hlbiAgdXNpbmcgIHRoaXMgIGZhY2lsaXR5LCAgeW91ICBtdXN0IHNldCBQQ1JFMl9VU0VfT0ZGU0VUX0xJTUlUIHdoZW4KKyAgICAgICBjYWxsaW5nIHBjcmUyX2NvbXBpbGUoKSBzbyB0aGF0IHdoZW4gSklUIGlzIGluIHVzZSwgZGlmZmVyZW50IGNvZGUgIGNhbgorICAgICAgIGJlICBjb21waWxlZC4gSWYgYSBtYXRjaCBpcyBzdGFydGVkIHdpdGggYSBub24tZGVmYXVsdCBtYXRjaCBsaW1pdCB3aGVuCisgICAgICAgUENSRTJfVVNFX09GRlNFVF9MSU1JVCBpcyBub3Qgc2V0LCBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuCisKKyAgICAgICBUaGUgb2Zmc2V0IGxpbWl0IGZhY2lsaXR5IGNhbiBiZSB1c2VkIHRvIHRyYWNrIHByb2dyZXNzIHdoZW4gIHNlYXJjaGluZworICAgICAgIGxhcmdlICBzdWJqZWN0ICBzdHJpbmdzLiAgU2VlICBhbHNvICB0aGUgIFBDUkUyX0ZJUlNUTElORSBvcHRpb24sIHdoaWNoCisgICAgICAgcmVxdWlyZXMgYSBtYXRjaCB0byBzdGFydCB3aXRoaW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHN1YmplY3QuIElmIHRoaXMKKyAgICAgICBpcyAgc2V0ICB3aXRoIGFuIG9mZnNldCBsaW1pdCwgYSBtYXRjaCBtdXN0IG9jY3VyIGluIHRoZSBmaXJzdCBsaW5lIGFuZAorICAgICAgIGFsc28gd2l0aGluIHRoZSBvZmZzZXQgbGltaXQuICBJbiBvdGhlciB3b3JkcywgIHdoaWNoZXZlciAgbGltaXQgIGNvbWVzCisgICAgICAgZmlyc3QgaXMgdXNlZC4KKworICAgICAgIGludCBwY3JlMl9zZXRfbWF0Y2hfbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsCisgICAgICAgICB1aW50MzJfdCB2YWx1ZSk7CisKKyAgICAgICBUaGUgIG1hdGNoX2xpbWl0ICBwYXJhbWV0ZXIgIHByb3ZpZGVzICBhIG1lYW5zIG9mIHByZXZlbnRpbmcgUENSRTIgZnJvbQorICAgICAgIHVzaW5nIHVwIHRvbyBtYW55IHJlc291cmNlcyB3aGVuIHByb2Nlc3NpbmcgcGF0dGVybnMgdGhhdCBhcmUgbm90IGdvaW5nCisgICAgICAgdG8gIG1hdGNoLCBidXQgd2hpY2ggaGF2ZSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIHBvc3NpYmlsaXRpZXMgaW4gdGhlaXIKKyAgICAgICBzZWFyY2ggdHJlZXMuIFRoZSBjbGFzc2ljIGV4YW1wbGUgaXMgYSBwYXR0ZXJuIHRoYXQgdXNlcyBuZXN0ZWQgIHVubGltLQorICAgICAgIGl0ZWQgcmVwZWF0cy4KKworICAgICAgIEludGVybmFsbHksICBwY3JlMl9tYXRjaCgpICB1c2VzICBhICBmdW5jdGlvbiAgY2FsbGVkIG1hdGNoKCksIHdoaWNoIGl0CisgICAgICAgY2FsbHMgcmVwZWF0ZWRseSAoc29tZXRpbWVzIHJlY3Vyc2l2ZWx5KS4gVGhlIGxpbWl0IHNldCBieSAgbWF0Y2hfbGltaXQKKyAgICAgICBpcyAgaW1wb3NlZCAgb24gIHRoZSAgbnVtYmVyICBvZiB0aW1lcyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgYQorICAgICAgIG1hdGNoLCB3aGljaCBoYXMgdGhlIGVmZmVjdCBvZiBsaW1pdGluZyB0aGUgYW1vdW50IG9mIGJhY2t0cmFja2luZyB0aGF0CisgICAgICAgY2FuICB0YWtlIHBsYWNlLiBGb3IgcGF0dGVybnMgdGhhdCBhcmUgbm90IGFuY2hvcmVkLCB0aGUgY291bnQgcmVzdGFydHMKKyAgICAgICBmcm9tIHplcm8gZm9yIGVhY2ggcG9zaXRpb24gaW4gdGhlIHN1YmplY3Qgc3RyaW5nLiBUaGlzICBsaW1pdCAgaXMgIG5vdAorICAgICAgIHJlbGV2YW50IHRvIHBjcmUyX2RmYV9tYXRjaCgpLCB3aGljaCBpZ25vcmVzIGl0LgorCisgICAgICAgV2hlbiAgcGNyZTJfbWF0Y2goKSBpcyBjYWxsZWQgd2l0aCBhIHBhdHRlcm4gdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5IHByby0KKyAgICAgICBjZXNzZWQgYnkgcGNyZTJfaml0X2NvbXBpbGUoKSwgdGhlIHdheSBpbiB3aGljaCBtYXRjaGluZyBpcyBleGVjdXRlZCBpcworICAgICAgIGVudGlyZWx5ICBkaWZmZXJlbnQuIEhvd2V2ZXIsIHRoZXJlIGlzIHN0aWxsIHRoZSBwb3NzaWJpbGl0eSBvZiBydW5hd2F5CisgICAgICAgbWF0Y2hpbmcgdGhhdCBnb2VzIG9uIGZvciBhIHZlcnkgbG9uZyAgdGltZSwgIGFuZCAgc28gIHRoZSAgbWF0Y2hfbGltaXQKKyAgICAgICB2YWx1ZSAgaXMgIGFsc28gdXNlZCBpbiB0aGlzIGNhc2UgKGJ1dCBpbiBhIGRpZmZlcmVudCB3YXkpIHRvIGxpbWl0IGhvdworICAgICAgIGxvbmcgdGhlIG1hdGNoaW5nIGNhbiBjb250aW51ZS4KKworICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgbGltaXQgY2FuIGJlIHNldCB3aGVuICBQQ1JFMiAgaXMgIGJ1aWx0OyAgdGhlCisgICAgICAgZGVmYXVsdCAgZGVmYXVsdCAgaXMgMTAgbWlsbGlvbiwgd2hpY2ggaGFuZGxlcyBhbGwgYnV0IHRoZSBtb3N0IGV4dHJlbWUKKyAgICAgICBjYXNlcy4gICBJZiAgIHRoZSAgIGxpbWl0ICAgaXMgICAgZXhjZWVkZWQsICAgIHBjcmUyX21hdGNoKCkgICAgcmV0dXJucworICAgICAgIFBDUkUyX0VSUk9SX01BVENITElNSVQuICBBICB2YWx1ZSAgZm9yIHRoZSBtYXRjaCBsaW1pdCBtYXkgYWxzbyBiZSBzdXAtCisgICAgICAgcGxpZWQgYnkgYW4gaXRlbSBhdCB0aGUgc3RhcnQgb2YgYSBwYXR0ZXJuIG9mIHRoZSBmb3JtCisKKyAgICAgICAgICgqTElNSVRfTUFUQ0g9ZGRkKQorCisgICAgICAgd2hlcmUgZGRkIGlzIGEgZGVjaW1hbCBudW1iZXIuICBIb3dldmVyLCAgc3VjaCAgYSAgc2V0dGluZyAgaXMgIGlnbm9yZWQKKyAgICAgICB1bmxlc3MgIGRkZCAgaXMgIGxlc3MgdGhhbiB0aGUgbGltaXQgc2V0IGJ5IHRoZSBjYWxsZXIgb2YgcGNyZTJfbWF0Y2goKQorICAgICAgIG9yLCBpZiBubyBzdWNoIGxpbWl0IGlzIHNldCwgbGVzcyB0aGFuIHRoZSBkZWZhdWx0LgorCisgICAgICAgaW50IHBjcmUyX3NldF9yZWN1cnNpb25fbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsCisgICAgICAgICB1aW50MzJfdCB2YWx1ZSk7CisKKyAgICAgICBUaGUgcmVjdXJzaW9uX2xpbWl0IHBhcmFtZXRlciBpcyBzaW1pbGFyIHRvIG1hdGNoX2xpbWl0LCBidXQgaW5zdGVhZCBvZgorICAgICAgIGxpbWl0aW5nICB0aGUgIHRvdGFsICBudW1iZXIgb2YgdGltZXMgdGhhdCBtYXRjaCgpIGlzIGNhbGxlZCwgaXQgbGltaXRzCisgICAgICAgdGhlIGRlcHRoIG9mIHJlY3Vyc2lvbi4gVGhlIHJlY3Vyc2lvbiBkZXB0aCBpcyBhICBzbWFsbGVyICBudW1iZXIgIHRoYW4KKyAgICAgICB0aGUgIHRvdGFsIG51bWJlciBvZiBjYWxscywgYmVjYXVzZSBub3QgYWxsIGNhbGxzIHRvIG1hdGNoKCkgYXJlIHJlY3VyLQorICAgICAgIHNpdmUuICBUaGlzIGxpbWl0IGlzIG9mIHVzZSBvbmx5IGlmIGl0IGlzIHNldCBzbWFsbGVyIHRoYW4gbWF0Y2hfbGltaXQuCisKKyAgICAgICBMaW1pdGluZyB0aGUgcmVjdXJzaW9uIGRlcHRoIGxpbWl0cyB0aGUgYW1vdW50IG9mIHN5c3RlbSBzdGFjayB0aGF0IGNhbgorICAgICAgIGJlICB1c2VkLCAgb3IsICB3aGVuICBQQ1JFMiBoYXMgYmVlbiBjb21waWxlZCB0byB1c2UgbWVtb3J5IG9uIHRoZSBoZWFwCisgICAgICAgaW5zdGVhZCBvZiB0aGUgc3RhY2ssIHRoZSBhbW91bnQgb2YgaGVhcCBtZW1vcnkgdGhhdCBjYW4gYmUgdXNlZC4gIFRoaXMKKyAgICAgICBsaW1pdCAgaXMgbm90IHJlbGV2YW50LCBhbmQgaXMgaWdub3JlZCwgd2hlbiBtYXRjaGluZyBpcyBkb25lIHVzaW5nIEpJVAorICAgICAgIGNvbXBpbGVkIGNvZGUgb3IgYnkgdGhlIHBjcmUyX2RmYV9tYXRjaCgpIGZ1bmN0aW9uLgorCisgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHJlY3Vyc2lvbl9saW1pdCBjYW4gYmUgc2V0IHdoZW4gUENSRTIgIGlzICBidWlsdDsKKyAgICAgICB0aGUgIGRlZmF1bHQgIGRlZmF1bHQgaXMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGRlZmF1bHQgZm9yIG1hdGNoX2xpbWl0LgorICAgICAgIElmIHRoZSBsaW1pdCBpcyBleGNlZWRlZCwgcGNyZTJfbWF0Y2goKSByZXR1cm5zICBQQ1JFMl9FUlJPUl9SRUNVUlNJT04tCisgICAgICAgTElNSVQuICBBIHZhbHVlIGZvciB0aGUgcmVjdXJzaW9uIGxpbWl0IG1heSBhbHNvIGJlIHN1cHBsaWVkIGJ5IGFuIGl0ZW0KKyAgICAgICBhdCB0aGUgc3RhcnQgb2YgYSBwYXR0ZXJuIG9mIHRoZSBmb3JtCisKKyAgICAgICAgICgqTElNSVRfUkVDVVJTSU9OPWRkZCkKKworICAgICAgIHdoZXJlIGRkZCBpcyBhIGRlY2ltYWwgbnVtYmVyLiAgSG93ZXZlciwgIHN1Y2ggIGEgIHNldHRpbmcgIGlzICBpZ25vcmVkCisgICAgICAgdW5sZXNzICBkZGQgIGlzICBsZXNzIHRoYW4gdGhlIGxpbWl0IHNldCBieSB0aGUgY2FsbGVyIG9mIHBjcmUyX21hdGNoKCkKKyAgICAgICBvciwgaWYgbm8gc3VjaCBsaW1pdCBpcyBzZXQsIGxlc3MgdGhhbiB0aGUgZGVmYXVsdC4KKworICAgICAgIGludCBwY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50KAorICAgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsCisgICAgICAgICB2b2lkICooKnByaXZhdGVfbWFsbG9jKShQQ1JFMl9TSVpFLCB2b2lkICopLAorICAgICAgICAgdm9pZCAoKnByaXZhdGVfZnJlZSkodm9pZCAqLCB2b2lkICopLCB2b2lkICptZW1vcnlfZGF0YSk7CisKKyAgICAgICBUaGlzIGZ1bmN0aW9uIHNldHMgdXAgdHdvIGFkZGl0aW9uYWwgY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICAgICAgIGZvciAgdXNlICBieSAgcGNyZTJfbWF0Y2goKSAgd2hlbiBQQ1JFMiBpcyBjb21waWxlZCB0byB1c2UgdGhlIGhlYXAgZm9yCisgICAgICAgcmVtZW1iZXJpbmcgYmFja3RyYWNraW5nIGRhdGEsIGluc3RlYWQgb2YgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIHRoYXQKKyAgICAgICB1c2UgIHRoZSAgc3lzdGVtIHN0YWNrLiBUaGVyZSBpcyBhIGRpc2N1c3Npb24gYWJvdXQgUENSRTIncyBzdGFjayB1c2FnZQorICAgICAgIGluIHRoZSBwY3JlMnN0YWNrIGRvY3VtZW50YXRpb24uIFNlZSB0aGUgcGNyZTJidWlsZCAgZG9jdW1lbnRhdGlvbiAgZm9yCisgICAgICAgZGV0YWlscyBvZiBob3cgdG8gYnVpbGQgUENSRTIuCisKKyAgICAgICBVc2luZyAgdGhlICBoZWFwIGZvciByZWN1cnNpb24gaXMgYSBub24tc3RhbmRhcmQgd2F5IG9mIGJ1aWxkaW5nIFBDUkUyLAorICAgICAgIGZvciB1c2UgaW4gZW52aXJvbm1lbnRzICB0aGF0ICBoYXZlICBsaW1pdGVkICBzdGFja3MuICBCZWNhdXNlICBvZiAgdGhlCisgICAgICAgZ3JlYXRlciB1c2Ugb2YgbWVtb3J5IG1hbmFnZW1lbnQsIHBjcmUyX21hdGNoKCkgcnVucyBtb3JlIHNsb3dseS4gRnVuYy0KKyAgICAgICB0aW9ucyB0aGF0IGFyZSBkaWZmZXJlbnQgdG8gdGhlIGdlbmVyYWwgIGN1c3RvbSAgbWVtb3J5ICBmdW5jdGlvbnMgIGFyZQorICAgICAgIHByb3ZpZGVkICBzbyAgdGhhdCAgc3BlY2lhbC1wdXJwb3NlICBleHRlcm5hbCBjb2RlIGNhbiBiZSB1c2VkIGZvciB0aGlzCisgICAgICAgY2FzZSwgYmVjYXVzZSB0aGUgbWVtb3J5IGJsb2NrcyBhcmUgYWxsIHRoZSBzYW1lIHNpemUuIFRoZSAgYmxvY2tzICBhcmUKKyAgICAgICByZXRhaW5lZCBieSBwY3JlMl9tYXRjaCgpIHVudGlsIGl0IGlzIGFib3V0IHRvIGV4aXQgc28gdGhhdCB0aGV5IGNhbiBiZQorICAgICAgIHJlLXVzZWQgd2hlbiBwb3NzaWJsZSBkdXJpbmcgdGhlIG1hdGNoLiBJbiB0aGUgYWJzZW5jZSBvZiAgdGhlc2UgIGZ1bmMtCisgICAgICAgdGlvbnMsICB0aGUgbm9ybWFsIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgYXJlIHVzZWQsIGlmIHN1cC0KKyAgICAgICBwbGllZCwgb3RoZXJ3aXNlIHRoZSBzeXN0ZW0gZnVuY3Rpb25zLgorCisKK0NIRUNLSU5HIEJVSUxELVRJTUUgT1BUSU9OUworCisgICAgICAgaW50IHBjcmUyX2NvbmZpZyh1aW50MzJfdCB3aGF0LCB2b2lkICp3aGVyZSk7CisKKyAgICAgICBUaGUgZnVuY3Rpb24gcGNyZTJfY29uZmlnKCkgbWFrZXMgaXQgcG9zc2libGUgZm9yICBhICBQQ1JFMiAgY2xpZW50ICB0bworICAgICAgIGRpc2NvdmVyICB3aGljaCAgb3B0aW9uYWwgIGZlYXR1cmVzICBoYXZlICBiZWVuIGNvbXBpbGVkIGludG8gdGhlIFBDUkUyCisgICAgICAgbGlicmFyeS4gVGhlIHBjcmUyYnVpbGQgZG9jdW1lbnRhdGlvbiAgaGFzICBtb3JlICBkZXRhaWxzICBhYm91dCAgdGhlc2UKKyAgICAgICBvcHRpb25hbCBmZWF0dXJlcy4KKworICAgICAgIFRoZSAgZmlyc3QgIGFyZ3VtZW50ICBmb3IgcGNyZTJfY29uZmlnKCkgc3BlY2lmaWVzIHdoaWNoIGluZm9ybWF0aW9uIGlzCisgICAgICAgcmVxdWlyZWQuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvICBtZW1vcnkgIGludG8gIHdoaWNoICB0aGUKKyAgICAgICBpbmZvcm1hdGlvbiAgaXMgIHBsYWNlZC4gIElmICBOVUxMICBpcyBwYXNzZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZQorICAgICAgIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBpcyBuZWVkZWQgIGZvciAgdGhlICByZXF1ZXN0ZWQgIGluZm9ybWF0aW9uLiAgRm9yCisgICAgICAgY2FsbHMgIHRoYXQgIHJldHVybiAgbnVtZXJpY2FsICB2YWx1ZXMsICB0aGUgIHZhbHVlICBpcyAgaW4gYnl0ZXM7IHdoZW4KKyAgICAgICByZXF1ZXN0aW5nIHRoZXNlIHZhbHVlcywgd2hlcmUgc2hvdWxkIHBvaW50ICB0byAgYXBwcm9wcmlhdGVseSAgYWxpZ25lZAorICAgICAgIG1lbW9yeS4gIEZvciBjYWxscyB0aGF0IHJldHVybiBzdHJpbmdzLCB0aGUgcmVxdWlyZWQgbGVuZ3RoIGlzIGdpdmVuIGluCisgICAgICAgY29kZSB1bml0cywgbm90IGNvdW50aW5nIHRoZSB0ZXJtaW5hdGluZyB6ZXJvLgorCisgICAgICAgV2hlbiByZXF1ZXN0aW5nIGluZm9ybWF0aW9uLCB0aGUgcmV0dXJuZWQgdmFsdWUgZnJvbSBwY3JlMl9jb25maWcoKSAgaXMKKyAgICAgICBub24tbmVnYXRpdmUgIG9uIHN1Y2Nlc3MsIG9yIHRoZSBuZWdhdGl2ZSBlcnJvciBjb2RlIFBDUkUyX0VSUk9SX0JBRE9QLQorICAgICAgIFRJT04gaWYgdGhlIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgcmVjb2duaXplZC4gVGhlICBmb2xsb3ctCisgICAgICAgaW5nIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZToKKworICAgICAgICAgUENSRTJfQ09ORklHX0JTUgorCisgICAgICAgVGhlICBvdXRwdXQgIGlzIGEgdWludDMyX3QgaW50ZWdlciB3aG9zZSB2YWx1ZSBpbmRpY2F0ZXMgd2hhdCBjaGFyYWN0ZXIKKyAgICAgICBzZXF1ZW5jZXMgdGhlIFxSICBlc2NhcGUgIHNlcXVlbmNlICBtYXRjaGVzICBieSAgZGVmYXVsdC4gIEEgIHZhbHVlICBvZgorICAgICAgIFBDUkUyX0JTUl9VTklDT0RFICBtZWFucyAgdGhhdCAgXFIgIG1hdGNoZXMgIGFueSAgVW5pY29kZSAgbGluZSAgZW5kaW5nCisgICAgICAgc2VxdWVuY2U7IGEgdmFsdWUgb2YgUENSRTJfQlNSX0FOWUNSTEYgbWVhbnMgdGhhdCBcUiBtYXRjaGVzICBvbmx5ICBDUiwKKyAgICAgICBMRiwgb3IgQ1JMRi4gVGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gd2hlbiBhIHBhdHRlcm4gaXMgY29tcGlsZWQuCisKKyAgICAgICAgIFBDUkUyX0NPTkZJR19KSVQKKworICAgICAgIFRoZSAgb3V0cHV0ICBpcyAgYSAgdWludDMyX3QgIGludGVnZXIgdGhhdCBpcyBzZXQgdG8gb25lIGlmIHN1cHBvcnQgZm9yCisgICAgICAganVzdC1pbi10aW1lIGNvbXBpbGluZyBpcyBhdmFpbGFibGU7IG90aGVyd2lzZSBpdCBpcyBzZXQgdG8gemVyby4KKworICAgICAgICAgUENSRTJfQ09ORklHX0pJVFRBUkdFVAorCisgICAgICAgVGhlIHdoZXJlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIGJ1ZmZlciB0aGF0IGlzIGF0ICBsZWFzdCAgNDggIGNvZGUKKyAgICAgICB1bml0cyAgbG9uZy4gIChUaGUgIGV4YWN0ICBsZW5ndGggIHJlcXVpcmVkICBjYW4gIGJlICBmb3VuZCAgYnkgY2FsbGluZworICAgICAgIHBjcmUyX2NvbmZpZygpIHdpdGggd2hlcmUgc2V0IHRvIE5VTEwuKSBUaGUgYnVmZmVyICBpcyAgZmlsbGVkICB3aXRoICBhCisgICAgICAgc3RyaW5nICB0aGF0ICBjb250YWlucyAgdGhlICBuYW1lIG9mIHRoZSBhcmNoaXRlY3R1cmUgZm9yIHdoaWNoIHRoZSBKSVQKKyAgICAgICBjb21waWxlciBpcyAgY29uZmlndXJlZCwgIGZvciAgZXhhbXBsZSAgIng4NiAgMzJiaXQgIChsaXR0bGUgIGVuZGlhbiAgKworICAgICAgIHVuYWxpZ25lZCkiLiAgSWYgSklUIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSwgUENSRTJfRVJST1JfQkFET1BUSU9OIGlzCisgICAgICAgcmV0dXJuZWQsIG90aGVyd2lzZSB0aGUgbnVtYmVyIG9mIGNvZGUgdW5pdHMgdXNlZCBpcyByZXR1cm5lZC4gVGhpcyAgaXMKKyAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcsIHBsdXMgb25lIHVuaXQgZm9yIHRoZSB0ZXJtaW5hdGluZyB6ZXJvLgorCisgICAgICAgICBQQ1JFMl9DT05GSUdfTElOS1NJWkUKKworICAgICAgIFRoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgY29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyB1c2VkCisgICAgICAgZm9yIGludGVybmFsIGxpbmthZ2UgaW4gY29tcGlsZWQgcmVndWxhciAgZXhwcmVzc2lvbnMuICBXaGVuICBQQ1JFMiAgaXMKKyAgICAgICBjb25maWd1cmVkLCAgdGhlIHZhbHVlIGNhbiBiZSBzZXQgdG8gMiwgMywgb3IgNCwgd2l0aCB0aGUgZGVmYXVsdCBiZWluZworICAgICAgIDIuIFRoaXMgaXMgdGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgYnkgcGNyZTJfY29uZmlnKCkuIEhvd2V2ZXIsICB3aGVuCisgICAgICAgdGhlICAxNi1iaXQgIGxpYnJhcnkgIGlzIGNvbXBpbGVkLCBhIHZhbHVlIG9mIDMgaXMgcm91bmRlZCB1cCB0byA0LCBhbmQKKyAgICAgICB3aGVuIHRoZSAzMi1iaXQgbGlicmFyeSBpcyBjb21waWxlZCwgaW50ZXJuYWwgIGxpbmthZ2VzICBhbHdheXMgIHVzZSAgNAorICAgICAgIGJ5dGVzLCBzbyB0aGUgY29uZmlndXJlZCB2YWx1ZSBpcyBub3QgcmVsZXZhbnQuCisKKyAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBvZiAyIGZvciB0aGUgOC1iaXQgYW5kIDE2LWJpdCBsaWJyYXJpZXMgaXMgc3VmZmljaWVudAorICAgICAgIGZvciBhbGwgYnV0IHRoZSBtb3N0IG1hc3NpdmUgcGF0dGVybnMsIHNpbmNlIGl0IGFsbG93cyB0aGUgc2l6ZSBvZiAgdGhlCisgICAgICAgY29tcGlsZWQgcGF0dGVybiB0byBiZSB1cCB0byA2NEsgY29kZSB1bml0cy4gTGFyZ2VyIHZhbHVlcyBhbGxvdyBsYXJnZXIKKyAgICAgICByZWd1bGFyIGV4cHJlc3Npb25zIHRvIGJlIGNvbXBpbGVkIGJ5IHRob3NlIHR3byBsaWJyYXJpZXMsIGJ1dCAgYXQgIHRoZQorICAgICAgIGV4cGVuc2Ugb2Ygc2xvd2VyIG1hdGNoaW5nLgorCisgICAgICAgICBQQ1JFMl9DT05GSUdfTUFUQ0hMSU1JVAorCisgICAgICAgVGhlICBvdXRwdXQgIGlzIGEgdWludDMyX3QgaW50ZWdlciB0aGF0IGdpdmVzIHRoZSBkZWZhdWx0IGxpbWl0IGZvciB0aGUKKyAgICAgICBudW1iZXIgb2YgaW50ZXJuYWwgbWF0Y2hpbmcgZnVuY3Rpb24gY2FsbHMgaW4gIGEgIHBjcmUyX21hdGNoKCkgIGV4ZWN1LQorICAgICAgIHRpb24uIEZ1cnRoZXIgZGV0YWlscyBhcmUgZ2l2ZW4gd2l0aCBwY3JlMl9tYXRjaCgpIGJlbG93LgorCisgICAgICAgICBQQ1JFMl9DT05GSUdfTkVXTElORQorCisgICAgICAgVGhlICBvdXRwdXQgIGlzICBhICB1aW50MzJfdCAgaW50ZWdlciB3aG9zZSB2YWx1ZSBzcGVjaWZpZXMgdGhlIGRlZmF1bHQKKyAgICAgICBjaGFyYWN0ZXIgc2VxdWVuY2UgdGhhdCBpcyByZWNvZ25pemVkIGFzIG1lYW5pbmcgIm5ld2xpbmUiLiBUaGUgIHZhbHVlcworICAgICAgIGFyZToKKworICAgICAgICAgUENSRTJfTkVXTElORV9DUiAgICAgICBDYXJyaWFnZSByZXR1cm4gKENSKQorICAgICAgICAgUENSRTJfTkVXTElORV9MRiAgICAgICBMaW5lZmVlZCAoTEYpCisgICAgICAgICBQQ1JFMl9ORVdMSU5FX0NSTEYgICAgIENhcnJpYWdlIHJldHVybiwgbGluZWZlZWQgKENSTEYpCisgICAgICAgICBQQ1JFMl9ORVdMSU5FX0FOWSAgICAgIEFueSBVbmljb2RlIGxpbmUgZW5kaW5nCisgICAgICAgICBQQ1JFMl9ORVdMSU5FX0FOWUNSTEYgIEFueSBvZiBDUiwgTEYsIG9yIENSTEYKKworICAgICAgIFRoZSAgZGVmYXVsdCAgc2hvdWxkICBub3JtYWxseSAgY29ycmVzcG9uZCB0byB0aGUgc3RhbmRhcmQgc2VxdWVuY2UgZm9yCisgICAgICAgeW91ciBvcGVyYXRpbmcgc3lzdGVtLgorCisgICAgICAgICBQQ1JFMl9DT05GSUdfUEFSRU5TTElNSVQKKworICAgICAgIFRoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgZ2l2ZXMgdGhlIG1heGltdW0gZGVwdGggb2YgIG5lc3QtCisgICAgICAgaW5nIG9mIHBhcmVudGhlc2VzIChvZiBhbnkga2luZCkgaW4gYSBwYXR0ZXJuLiBUaGlzIGxpbWl0IGlzIGltcG9zZWQgdG8KKyAgICAgICBjYXAgdGhlIGFtb3VudCBvZiBzeXN0ZW0gc3RhY2sgdXNlZCB3aGVuIGEgcGF0dGVybiBpcyBjb21waWxlZC4gIEl0ICBpcworICAgICAgIHNwZWNpZmllZCAgd2hlbiBQQ1JFMiBpcyBidWlsdDsgdGhlIGRlZmF1bHQgaXMgMjUwLiBUaGlzIGxpbWl0IGRvZXMgbm90CisgICAgICAgdGFrZSBpbnRvIGFjY291bnQgdGhlIHN0YWNrIHRoYXQgbWF5IGFscmVhZHkgYmUgIHVzZWQgIGJ5ICB0aGUgIGNhbGxpbmcKKyAgICAgICBhcHBsaWNhdGlvbi4gIEZvciAgZmluZXIgIGNvbnRyb2wgIG92ZXIgIGNvbXBpbGF0aW9uICBzdGFjayAgdXNhZ2UsIHNlZQorICAgICAgIHBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZCgpLgorCisgICAgICAgICBQQ1JFMl9DT05GSUdfUkVDVVJTSU9OTElNSVQKKworICAgICAgIFRoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgZ2l2ZXMgdGhlIGRlZmF1bHQgbGltaXQgIGZvciAgdGhlCisgICAgICAgZGVwdGggIG9mICByZWN1cnNpb24gIHdoZW4gIGNhbGxpbmcgdGhlIGludGVybmFsIG1hdGNoaW5nIGZ1bmN0aW9uIGluIGEKKyAgICAgICBwY3JlMl9tYXRjaCgpIGV4ZWN1dGlvbi4gRnVydGhlciBkZXRhaWxzIGFyZSBnaXZlbiAgd2l0aCAgcGNyZTJfbWF0Y2goKQorICAgICAgIGJlbG93LgorCisgICAgICAgICBQQ1JFMl9DT05GSUdfU1RBQ0tSRUNVUlNFCisKKyAgICAgICBUaGUgIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgdGhhdCBpcyBzZXQgdG8gb25lIGlmIGludGVybmFsIHJlY3VyLQorICAgICAgIHNpb24gd2hlbiBydW5uaW5nIHBjcmUyX21hdGNoKCkgaXMgaW1wbGVtZW50ZWQgIGJ5ICByZWN1cnNpdmUgIGZ1bmN0aW9uCisgICAgICAgY2FsbHMgIHRoYXQgIHVzZSAgdGhlIHN5c3RlbSBzdGFjayB0byByZW1lbWJlciB0aGVpciBzdGF0ZS4gVGhpcyBpcyB0aGUKKyAgICAgICB1c3VhbCB3YXkgdGhhdCBQQ1JFMiBpcyBjb21waWxlZC4gVGhlIG91dHB1dCBpcyB6ZXJvIGlmIFBDUkUyIHdhcyAgY29tLQorICAgICAgIHBpbGVkICB0byAgdXNlIGJsb2NrcyBvZiBkYXRhIG9uIHRoZSBoZWFwIGluc3RlYWQgb2YgcmVjdXJzaXZlIGZ1bmN0aW9uCisgICAgICAgY2FsbHMuCisKKyAgICAgICAgIFBDUkUyX0NPTkZJR19VTklDT0RFX1ZFUlNJT04KKworICAgICAgIFRoZSB3aGVyZSBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSBidWZmZXIgdGhhdCBpcyBhdCAgbGVhc3QgIDI0ICBjb2RlCisgICAgICAgdW5pdHMgIGxvbmcuICAoVGhlICBleGFjdCAgbGVuZ3RoICByZXF1aXJlZCAgY2FuICBiZSAgZm91bmQgIGJ5IGNhbGxpbmcKKyAgICAgICBwY3JlMl9jb25maWcoKSB3aXRoIHdoZXJlIHNldCB0byBOVUxMLikgIElmICBQQ1JFMiAgaGFzICBiZWVuICBjb21waWxlZAorICAgICAgIHdpdGhvdXQgIFVuaWNvZGUgIHN1cHBvcnQsICB0aGUgYnVmZmVyIGlzIGZpbGxlZCB3aXRoIHRoZSB0ZXh0ICJVbmljb2RlCisgICAgICAgbm90IHN1cHBvcnRlZCIuIE90aGVyd2lzZSwgdGhlIFVuaWNvZGUgIHZlcnNpb24gIHN0cmluZyAgKGZvciAgZXhhbXBsZSwKKyAgICAgICAiOC4wLjAiKSAgaXMgIGluc2VydGVkLiBUaGUgbnVtYmVyIG9mIGNvZGUgdW5pdHMgdXNlZCBpcyByZXR1cm5lZC4gVGhpcworICAgICAgIGlzIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBwbHVzIG9uZSB1bml0IGZvciB0aGUgdGVybWluYXRpbmcgemVyby4KKworICAgICAgICAgUENSRTJfQ09ORklHX1VOSUNPREUKKworICAgICAgIFRoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgaXMgc2V0IHRvIG9uZSBpZiBVbmljb2RlICBzdXBwb3J0CisgICAgICAgaXMgIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIGl0IGlzIHNldCB0byB6ZXJvLiBVbmljb2RlIHN1cHBvcnQgaW1wbGllcyBVVEYKKyAgICAgICBzdXBwb3J0LgorCisgICAgICAgICBQQ1JFMl9DT05GSUdfVkVSU0lPTgorCisgICAgICAgVGhlIHdoZXJlIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIGJ1ZmZlciB0aGF0IGlzIGF0ICBsZWFzdCAgMTIgIGNvZGUKKyAgICAgICB1bml0cyAgbG9uZy4gIChUaGUgIGV4YWN0ICBsZW5ndGggIHJlcXVpcmVkICBjYW4gIGJlICBmb3VuZCAgYnkgY2FsbGluZworICAgICAgIHBjcmUyX2NvbmZpZygpIHdpdGggd2hlcmUgc2V0IHRvIE5VTEwuKSBUaGUgYnVmZmVyIGlzIGZpbGxlZCAgd2l0aCAgdGhlCisgICAgICAgUENSRTIgdmVyc2lvbiBzdHJpbmcsIHplcm8tdGVybWluYXRlZC4gVGhlIG51bWJlciBvZiBjb2RlIHVuaXRzIHVzZWQgaXMKKyAgICAgICByZXR1cm5lZC4gVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgcGx1cyBvbmUgdW5pdCBmb3IgdGhlIHRlcm1pLQorICAgICAgIG5hdGluZyB6ZXJvLgorCisKK0NPTVBJTElORyBBIFBBVFRFUk4KKworICAgICAgIHBjcmUyX2NvZGUgKnBjcmUyX2NvbXBpbGUoUENSRTJfU1BUUiBwYXR0ZXJuLCBQQ1JFMl9TSVpFIGxlbmd0aCwKKyAgICAgICAgIHVpbnQzMl90IG9wdGlvbnMsIGludCAqZXJyb3Jjb2RlLCBQQ1JFMl9TSVpFICplcnJvcm9mZnNldCwKKyAgICAgICAgIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqY2NvbnRleHQpOworCisgICAgICAgdm9pZCBwY3JlMl9jb2RlX2ZyZWUocGNyZTJfY29kZSAqY29kZSk7CisKKyAgICAgICBUaGUgIHBjcmUyX2NvbXBpbGUoKSBmdW5jdGlvbiBjb21waWxlcyBhIHBhdHRlcm4gaW50byBhbiBpbnRlcm5hbCBmb3JtLgorICAgICAgIFRoZSBwYXR0ZXJuIGlzIGRlZmluZWQgYnkgYSBwb2ludGVyIHRvIGEgc3RyaW5nIG9mICBjb2RlICB1bml0cyAgYW5kICBhCisgICAgICAgbGVuZ3RoLCAgSWYgdGhlIHBhdHRlcm4gaXMgemVyby10ZXJtaW5hdGVkLCB0aGUgbGVuZ3RoIGNhbiBiZSBzcGVjaWZpZWQKKyAgICAgICBhcyBQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhIGJsb2NrICBvZgorICAgICAgIG1lbW9yeSAgdGhhdCBjb250YWlucyB0aGUgY29tcGlsZWQgcGF0dGVybiBhbmQgcmVsYXRlZCBkYXRhLiBUaGUgY2FsbGVyCisgICAgICAgbXVzdCBmcmVlIHRoZSBtZW1vcnkgYnkgY2FsbGluZyBwY3JlMl9jb2RlX2ZyZWUoKSB3aGVuIGl0IGlzIG5vICBsb25nZXIKKyAgICAgICBuZWVkZWQuCisKKyAgICAgICBOT1RFOiAgV2hlbiAgb25lICBvZiAgdGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyBpcyBjYWxsZWQsIHBvaW50ZXJzIHRvIHRoZQorICAgICAgIGNvbXBpbGVkIHBhdHRlcm4gYW5kIHRoZSBzdWJqZWN0IHN0cmluZyBhcmUgc2V0IGluIHRoZSBtYXRjaCBkYXRhIGJsb2NrCisgICAgICAgc28gIHRoYXQgdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUgZXh0cmFjdGlvbiBmdW5jdGlvbnMuIEFmdGVyIHJ1bi0KKyAgICAgICBuaW5nIGEgbWF0Y2gsIHlvdSBtdXN0IG5vdCAgZnJlZSAgYSAgY29tcGlsZWQgIHBhdHRlcm4gIChvciAgYSAgc3ViamVjdAorICAgICAgIHN0cmluZykgIHVudGlsICBhZnRlciBhbGwgb3BlcmF0aW9ucyBvbiB0aGUgbWF0Y2ggZGF0YSBibG9jayBoYXZlIHRha2VuCisgICAgICAgcGxhY2UuCisKKyAgICAgICBJZiB0aGUgY29tcGlsZSBjb250ZXh0IGFyZ3VtZW50IGNjb250ZXh0IGlzIE5VTEwsIG1lbW9yeSBmb3IgIHRoZSAgY29tLQorICAgICAgIHBpbGVkICBwYXR0ZXJuICBpcyAgb2J0YWluZWQgIGJ5ICBjYWxsaW5nICBtYWxsb2MoKS4gIE90aGVyd2lzZSwgIGl0IGlzCisgICAgICAgb2J0YWluZWQgZnJvbSB0aGUgc2FtZSBtZW1vcnkgZnVuY3Rpb24gdGhhdCB3YXMgdXNlZCAgZm9yICB0aGUgIGNvbXBpbGUKKyAgICAgICBjb250ZXh0LgorCisgICAgICAgVGhlIG9wdGlvbnMgYXJndW1lbnQgY29udGFpbnMgdmFyaW91cyBiaXQgc2V0dGluZ3MgdGhhdCBhZmZlY3QgdGhlIGNvbS0KKyAgICAgICBwaWxhdGlvbi4gSXQgc2hvdWxkIGJlIHplcm8gaWYgbm8gb3B0aW9ucyBhcmUgcmVxdWlyZWQuICBUaGUgIGF2YWlsYWJsZQorICAgICAgIG9wdGlvbnMgIGFyZSAgZGVzY3JpYmVkICBiZWxvdy4gU29tZSBvZiB0aGVtIChpbiBwYXJ0aWN1bGFyLCB0aG9zZSB0aGF0CisgICAgICAgYXJlIGNvbXBhdGlibGUgd2l0aCBQZXJsLCBidXQgc29tZSBvdGhlcnMgYXMgd2VsbCkgY2FuIGFsc28gYmUgc2V0ICBhbmQKKyAgICAgICB1bnNldCAgZnJvbSAgd2l0aGluICB0aGUgIHBhdHRlcm4gIChzZWUgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGluIHRoZQorICAgICAgIHBjcmUycGF0dGVybiBkb2N1bWVudGF0aW9uKS4KKworICAgICAgIEZvciB0aG9zZSBvcHRpb25zIHRoYXQgY2FuIGJlIGRpZmZlcmVudCBpbiBkaWZmZXJlbnQgcGFydHMgb2YgdGhlICBwYXQtCisgICAgICAgdGVybiwgIHRoZSBjb250ZW50cyBvZiB0aGUgb3B0aW9ucyBhcmd1bWVudCBzcGVjaWZpZXMgdGhlaXIgc2V0dGluZ3MgYXQKKyAgICAgICB0aGUgc3RhcnQgb2YgY29tcGlsYXRpb24uICBUaGUgIFBDUkUyX0FOQ0hPUkVEICBhbmQgIFBDUkUyX05PX1VURl9DSEVDSworICAgICAgIG9wdGlvbnMgY2FuIGJlIHNldCBhdCB0aGUgdGltZSBvZiBtYXRjaGluZyBhcyB3ZWxsIGFzIGF0IGNvbXBpbGUgdGltZS4KKworICAgICAgIE90aGVyLCAgbGVzcyAgZnJlcXVlbnRseSByZXF1aXJlZCBjb21waWxlLXRpbWUgcGFyYW1ldGVycyAoZm9yIGV4YW1wbGUsCisgICAgICAgdGhlIG5ld2xpbmUgc2V0dGluZykgY2FuIGJlIHByb3ZpZGVkIGluIGEgY29tcGlsZSBjb250ZXh0IChhcyBkZXNjcmliZWQKKyAgICAgICBhYm92ZSkuCisKKyAgICAgICBJZiBlcnJvcmNvZGUgb3IgZXJyb3JvZmZzZXQgaXMgTlVMTCwgcGNyZTJfY29tcGlsZSgpIHJldHVybnMgTlVMTCBpbW1lLQorICAgICAgIGRpYXRlbHkuIE90aGVyd2lzZSwgaWYgY29tcGlsYXRpb24gb2YgYSBwYXR0ZXJuIGZhaWxzLCAgcGNyZTJfY29tcGlsZSgpCisgICAgICAgcmV0dXJucyBOVUxMLCBoYXZpbmcgc2V0IHRoZXNlIHZhcmlhYmxlcyB0byBhbiBlcnJvciBjb2RlIGFuZCBhbiBvZmZzZXQKKyAgICAgICAobnVtYmVyICBvZiAgY29kZSAgdW5pdHMpICB3aXRoaW4gIHRoZSAgIHBhdHRlcm4sICAgcmVzcGVjdGl2ZWx5LiAgIFRoZQorICAgICAgIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCkgIGZ1bmN0aW9uIHByb3ZpZGVzIGEgdGV4dHVhbCBtZXNzYWdlIGZvciBlYWNoCisgICAgICAgZXJyb3IgY29kZS4gQ29tcGlsYXRpb24gZXJyb3JzIGFyZSBwb3NpdGl2ZSBudW1iZXJzLCBidXQgVVRGIGZvcm1hdHRpbmcKKyAgICAgICBlcnJvcnMgYXJlIG5lZ2F0aXZlIG51bWJlcnMuIEZvciBhbiBpbnZhbGlkIFVURi04IG9yIFVURi0xNiBzdHJpbmcsIHRoZQorICAgICAgIG9mZnNldCBpcyB0aGF0IG9mIHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgdGhlIGZhaWxpbmcgY2hhcmFjdGVyLgorCisgICAgICAgU29tZSBlcnJvcnMgYXJlIG5vdCBkZXRlY3RlZCB1bnRpbCB0aGUgd2hvbGUgcGF0dGVybiBoYXMgYmVlbiAgc2Nhbm5lZDsKKyAgICAgICBpbiAgdGhlc2UgIGNhc2VzLCAgdGhlIG9mZnNldCBwYXNzZWQgYmFjayBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuLgorICAgICAgIE5vdGUgdGhhdCB0aGUgb2Zmc2V0IGlzIGluIGNvZGUgdW5pdHMsIG5vdCBjaGFyYWN0ZXJzLCBldmVuICBpbiAgYSAgVVRGCisgICAgICAgbW9kZS4gSXQgbWF5IHNvbWV0aW1lcyBwb2ludCBpbnRvIHRoZSBtaWRkbGUgb2YgYSBVVEYtOCBvciBVVEYtMTYgY2hhci0KKyAgICAgICBhY3Rlci4KKworICAgICAgIFRoaXMgY29kZSBmcmFnbWVudCBzaG93cyBhIHR5cGljYWwgc3RyYWlnaHRmb3J3YXJkIGNhbGwgIHRvICBwY3JlMl9jb20tCisgICAgICAgcGlsZSgpOgorCisgICAgICAgICBwY3JlMl9jb2RlICpyZTsKKyAgICAgICAgIFBDUkUyX1NJWkUgZXJyb2Zmc2V0OworICAgICAgICAgaW50IGVycm9yY29kZTsKKyAgICAgICAgIHJlID0gcGNyZTJfY29tcGlsZSgKKyAgICAgICAgICAgIl5BLipaIiwgICAgICAgICAgICAgICAgLyogdGhlIHBhdHRlcm4gKi8KKyAgICAgICAgICAgUENSRTJfWkVST19URVJNSU5BVEVELCAgLyogdGhlIHBhdHRlcm4gaXMgemVyby10ZXJtaW5hdGVkICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgb3B0aW9ucyAqLworICAgICAgICAgICAmZXJyb3Jjb2RlLCAgICAgICAgICAgICAvKiBmb3IgZXJyb3IgY29kZSAqLworICAgICAgICAgICAmZXJyb2Zmc2V0LCAgICAgICAgICAgICAvKiBmb3IgZXJyb3Igb2Zmc2V0ICovCisgICAgICAgICAgIE5VTEwpOyAgICAgICAgICAgICAgICAgIC8qIG5vIGNvbXBpbGUgY29udGV4dCAqLworCisgICAgICAgVGhlICBmb2xsb3dpbmcgIG5hbWVzIGZvciBvcHRpb24gYml0cyBhcmUgZGVmaW5lZCBpbiB0aGUgcGNyZTIuaCBoZWFkZXIKKyAgICAgICBmaWxlOgorCisgICAgICAgICBQQ1JFMl9BTkNIT1JFRAorCisgICAgICAgSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGUgcGF0dGVybiBpcyBmb3JjZWQgdG8gYmUgImFuY2hvcmVkIiwgdGhhdCBpcywgaXQKKyAgICAgICBpcyAgY29uc3RyYWluZWQgdG8gbWF0Y2ggb25seSBhdCB0aGUgZmlyc3QgbWF0Y2hpbmcgcG9pbnQgaW4gdGhlIHN0cmluZworICAgICAgIHRoYXQgaXMgYmVpbmcgc2VhcmNoZWQgKHRoZSAic3ViamVjdCBzdHJpbmciKS4gVGhpcyBlZmZlY3QgY2FuIGFsc28gIGJlCisgICAgICAgYWNoaWV2ZWQgIGJ5IGFwcHJvcHJpYXRlIGNvbnN0cnVjdHMgaW4gdGhlIHBhdHRlcm4gaXRzZWxmLCB3aGljaCBpcyB0aGUKKyAgICAgICBvbmx5IHdheSB0byBkbyBpdCBpbiBQZXJsLgorCisgICAgICAgICBQQ1JFMl9BTExPV19FTVBUWV9DTEFTUworCisgICAgICAgQnkgZGVmYXVsdCwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLCBhIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgIHRoYXQKKyAgICAgICBpbW1lZGlhdGVseSAgZm9sbG93cyAgYW4gb3BlbmluZyBvbmUgaXMgdHJlYXRlZCBhcyBhIGRhdGEgY2hhcmFjdGVyIGZvcgorICAgICAgIHRoZSBjbGFzcy4gV2hlbiAgUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1MgIGlzICBzZXQsICBpdCAgdGVybWluYXRlcyAgdGhlCisgICAgICAgY2xhc3MsIHdoaWNoIHRoZXJlZm9yZSBjb250YWlucyBubyBjaGFyYWN0ZXJzIGFuZCBzbyBjYW4gbmV2ZXIgbWF0Y2guCisKKyAgICAgICAgIFBDUkUyX0FMVF9CU1VYCisKKyAgICAgICBUaGlzICBvcHRpb24gIHJlcXVlc3QgIGFsdGVybmF0aXZlICBoYW5kbGluZyBvZiB0aHJlZSBlc2NhcGUgc2VxdWVuY2VzLAorICAgICAgIHdoaWNoIG1ha2VzIFBDUkUyJ3MgYmVoYXZpb3VyIG1vcmUgbGlrZSAgRUNNQXNjcmlwdCAgKGFrYSAgSmF2YVNjcmlwdCkuCisgICAgICAgV2hlbiBpdCBpcyBzZXQ6CisKKyAgICAgICAoMSkgXFUgbWF0Y2hlcyBhbiB1cHBlciBjYXNlICJVIiBjaGFyYWN0ZXI7IGJ5IGRlZmF1bHQgXFUgY2F1c2VzIGEgY29tLQorICAgICAgIHBpbGUgdGltZSBlcnJvciAoUGVybCB1c2VzIFxVIHRvIHVwcGVyIGNhc2Ugc3Vic2VxdWVudCBjaGFyYWN0ZXJzKS4KKworICAgICAgICgyKSBcdSBtYXRjaGVzIGEgbG93ZXIgY2FzZSAidSIgY2hhcmFjdGVyIHVubGVzcyBpdCBpcyBmb2xsb3dlZCBieSBmb3VyCisgICAgICAgaGV4YWRlY2ltYWwgIGRpZ2l0cywgIGluICB3aGljaCBjYXNlIHRoZSBoZXhhZGVjaW1hbCBudW1iZXIgZGVmaW5lcyB0aGUKKyAgICAgICBjb2RlIHBvaW50IHRvIG1hdGNoLiBCeSBkZWZhdWx0LCBcdSBjYXVzZXMgYSBjb21waWxlIHRpbWUgIGVycm9yICAoUGVybAorICAgICAgIHVzZXMgaXQgdG8gdXBwZXIgY2FzZSB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcikuCisKKyAgICAgICAoMykgIFx4IG1hdGNoZXMgYSBsb3dlciBjYXNlICJ4IiBjaGFyYWN0ZXIgdW5sZXNzIGl0IGlzIGZvbGxvd2VkIGJ5IHR3bworICAgICAgIGhleGFkZWNpbWFsIGRpZ2l0cywgaW4gd2hpY2ggY2FzZSB0aGUgaGV4YWRlY2ltYWwgIG51bWJlciAgZGVmaW5lcyAgdGhlCisgICAgICAgY29kZSAgcG9pbnQgIHRvICBtYXRjaC4gQnkgZGVmYXVsdCwgYXMgaW4gUGVybCwgYSBoZXhhZGVjaW1hbCBudW1iZXIgaXMKKyAgICAgICBhbHdheXMgZXhwZWN0ZWQgYWZ0ZXIgXHgsIGJ1dCBpdCBtYXkgaGF2ZSB6ZXJvLCBvbmUsIG9yIHR3byBkaWdpdHMgKHNvLAorICAgICAgIGZvciBleGFtcGxlLCBceHogbWF0Y2hlcyBhIGJpbmFyeSB6ZXJvIGNoYXJhY3RlciBmb2xsb3dlZCBieSB6KS4KKworICAgICAgICAgUENSRTJfQUxUX0NJUkNVTUZMRVgKKworICAgICAgIEluICBtdWx0aWxpbmUgIG1vZGUgICh3aGVuICBQQ1JFMl9NVUxUSUxJTkUgIGlzICBzZXQpLCAgdGhlICBjaXJjdW1mbGV4CisgICAgICAgbWV0YWNoYXJhY3RlciBtYXRjaGVzIGF0IHRoZSBzdGFydCBvZiB0aGUgc3ViamVjdCAodW5sZXNzICBQQ1JFMl9OT1RCT0wKKyAgICAgICBpcyAgc2V0KSwgIGFuZCAgYWxzbyAgYWZ0ZXIgIGFueSBpbnRlcm5hbCBuZXdsaW5lLiBIb3dldmVyLCBpdCBkb2VzIG5vdAorICAgICAgIG1hdGNoIGFmdGVyIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCisgICAgICAgUGVybC4gIElmICB5b3Ugd2FudCBhIG11bHRpbGluZSBjaXJjdW1mbGV4IGFsc28gdG8gbWF0Y2ggYWZ0ZXIgYSB0ZXJtaS0KKyAgICAgICBuYXRpbmcgbmV3bGluZSwgeW91IG11c3Qgc2V0IFBDUkUyX0FMVF9DSVJDVU1GTEVYLgorCisgICAgICAgICBQQ1JFMl9BTFRfVkVSQk5BTUVTCisKKyAgICAgICBCeSBkZWZhdWx0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwsIHRoZSBuYW1lIGluIGFueSB2ZXJiICBzZXF1ZW5jZQorICAgICAgIHN1Y2ggIGFzICAoKk1BUks6TkFNRSkgIGlzICBhbnkgIHNlcXVlbmNlICBvZiAgY2hhcmFjdGVycyB0aGF0IGRvZXMgbm90CisgICAgICAgaW5jbHVkZSBhIGNsb3NpbmcgcGFyZW50aGVzaXMuIFRoZSBuYW1lIGlzIG5vdCBwcm9jZXNzZWQgIGluICBhbnkgIHdheSwKKyAgICAgICBhbmQgIGl0ICBpcyAgbm90IHBvc3NpYmxlIHRvIGluY2x1ZGUgYSBjbG9zaW5nIHBhcmVudGhlc2lzIGluIHRoZSBuYW1lLgorICAgICAgIEhvd2V2ZXIsIGlmIHRoZSBQQ1JFMl9BTFRfVkVSQk5BTUVTIG9wdGlvbiAgaXMgIHNldCwgIG5vcm1hbCAgYmFja3NsYXNoCisgICAgICAgcHJvY2Vzc2luZyAgaXMgIGFwcGxpZWQgIHRvICB2ZXJiICBuYW1lcyAgYW5kIG9ubHkgYW4gdW5lc2NhcGVkIGNsb3NpbmcKKyAgICAgICBwYXJlbnRoZXNpcyB0ZXJtaW5hdGVzIHRoZSBuYW1lLiBBIGNsb3NpbmcgcGFyZW50aGVzaXMgY2FuIGJlICBpbmNsdWRlZAorICAgICAgIGluICBhICBuYW1lICBlaXRoZXIgIGFzICBcKSBvciBiZXR3ZWVuIFxRIGFuZCBcRS4gSWYgdGhlIFBDUkUyX0VYVEVOREVECisgICAgICAgb3B0aW9uIGlzIHNldCwgdW5lc2NhcGVkIHdoaXRlc3BhY2UgaW4gdmVyYiBuYW1lcyBpcyBza2lwcGVkIGFuZCAjLWNvbS0KKyAgICAgICBtZW50cyBhcmUgcmVjb2duaXplZCwgZXhhY3RseSBhcyBpbiB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybi4KKworICAgICAgICAgUENSRTJfQVVUT19DQUxMT1VUCisKKyAgICAgICBJZiAgdGhpcyAgYml0ICBpcyAgc2V0LCAgcGNyZTJfY29tcGlsZSgpICBhdXRvbWF0aWNhbGx5IGluc2VydHMgY2FsbG91dAorICAgICAgIGl0ZW1zLCBhbGwgd2l0aCBudW1iZXIgMjU1LCBiZWZvcmUgZWFjaCBwYXR0ZXJuIGl0ZW0uIEZvciBkaXNjdXNzaW9uIG9mCisgICAgICAgdGhlIGNhbGxvdXQgZmFjaWxpdHksIHNlZSB0aGUgcGNyZTJjYWxsb3V0IGRvY3VtZW50YXRpb24uCisKKyAgICAgICAgIFBDUkUyX0NBU0VMRVNTCisKKyAgICAgICBJZiAgdGhpcyAgYml0IGlzIHNldCwgbGV0dGVycyBpbiB0aGUgcGF0dGVybiBtYXRjaCBib3RoIHVwcGVyIGFuZCBsb3dlcgorICAgICAgIGNhc2UgbGV0dGVycyBpbiB0aGUgc3ViamVjdC4gSXQgaXMgZXF1aXZhbGVudCB0byBQZXJsJ3MgL2kgb3B0aW9uLCAgYW5kCisgICAgICAgaXQgY2FuIGJlIGNoYW5nZWQgd2l0aGluIGEgcGF0dGVybiBieSBhICg/aSkgb3B0aW9uIHNldHRpbmcuCisKKyAgICAgICAgIFBDUkUyX0RPTExBUl9FTkRPTkxZCisKKyAgICAgICBJZiAgdGhpcyBiaXQgaXMgc2V0LCBhIGRvbGxhciBtZXRhY2hhcmFjdGVyIGluIHRoZSBwYXR0ZXJuIG1hdGNoZXMgb25seQorICAgICAgIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLiBXaXRob3V0IHRoaXMgb3B0aW9uLCAgYSAgZG9sbGFyICBhbHNvCisgICAgICAgbWF0Y2hlcyAgaW1tZWRpYXRlbHkgYmVmb3JlIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKGJ1dCBub3QKKyAgICAgICBiZWZvcmUgYW55IG90aGVyIG5ld2xpbmVzKS4gVGhlIFBDUkUyX0RPTExBUl9FTkRPTkxZIG9wdGlvbiBpcyAgaWdub3JlZAorICAgICAgIGlmICBQQ1JFMl9NVUxUSUxJTkUgIGlzICBzZXQuICBUaGVyZSBpcyBubyBlcXVpdmFsZW50IHRvIHRoaXMgb3B0aW9uIGluCisgICAgICAgUGVybCwgYW5kIG5vIHdheSB0byBzZXQgaXQgd2l0aGluIGEgcGF0dGVybi4KKworICAgICAgICAgUENSRTJfRE9UQUxMCisKKyAgICAgICBJZiB0aGlzIGJpdCBpcyBzZXQsIGEgZG90IG1ldGFjaGFyYWN0ZXIgIGluICB0aGUgIHBhdHRlcm4gIG1hdGNoZXMgIGFueQorICAgICAgIGNoYXJhY3RlciwgIGluY2x1ZGluZyAgb25lICB0aGF0ICBpbmRpY2F0ZXMgYSBuZXdsaW5lLiBIb3dldmVyLCBpdCBvbmx5CisgICAgICAgZXZlciBtYXRjaGVzIG9uZSBjaGFyYWN0ZXIsIGV2ZW4gaWYgbmV3bGluZXMgYXJlIGNvZGVkIGFzIENSTEYuIFdpdGhvdXQKKyAgICAgICB0aGlzIG9wdGlvbiwgYSBkb3QgZG9lcyBub3QgbWF0Y2ggd2hlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3ViLQorICAgICAgIGplY3QgaXMgYXQgYSBuZXdsaW5lLiBUaGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvICBQZXJsJ3MgIC9zICBvcHRpb24sCisgICAgICAgYW5kIGl0IGNhbiBiZSBjaGFuZ2VkIHdpdGhpbiBhIHBhdHRlcm4gYnkgYSAoP3MpIG9wdGlvbiBzZXR0aW5nLiBBIG5lZy0KKyAgICAgICBhdGl2ZSBjbGFzcyBzdWNoIGFzIFteYV0gYWx3YXlzIG1hdGNoZXMgbmV3bGluZSBjaGFyYWN0ZXJzLCBpbmRlcGVuZGVudAorICAgICAgIG9mIHRoZSBzZXR0aW5nIG9mIHRoaXMgb3B0aW9uLgorCisgICAgICAgICBQQ1JFMl9EVVBOQU1FUworCisgICAgICAgSWYgIHRoaXMgIGJpdCBpcyBzZXQsIG5hbWVzIHVzZWQgdG8gaWRlbnRpZnkgY2FwdHVyaW5nIHN1YnBhdHRlcm5zIG5lZWQKKyAgICAgICBub3QgYmUgdW5pcXVlLiBUaGlzIGNhbiBiZSBoZWxwZnVsIGZvciBjZXJ0YWluIHR5cGVzIG9mIHBhdHRlcm4gd2hlbiBpdAorICAgICAgIGlzICBrbm93biAgdGhhdCAgb25seSAgb25lIGluc3RhbmNlIG9mIHRoZSBuYW1lZCBzdWJwYXR0ZXJuIGNhbiBldmVyIGJlCisgICAgICAgbWF0Y2hlZC4gVGhlcmUgYXJlIG1vcmUgZGV0YWlscyBvZiBuYW1lZCBzdWJwYXR0ZXJucyAgYmVsb3c7ICBzZWUgIGFsc28KKyAgICAgICB0aGUgcGNyZTJwYXR0ZXJuIGRvY3VtZW50YXRpb24uCisKKyAgICAgICAgIFBDUkUyX0VYVEVOREVECisKKyAgICAgICBJZiAgdGhpcyAgYml0ICBpcyAgc2V0LCAgbW9zdCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuIGFyZQorICAgICAgIHRvdGFsbHkgaWdub3JlZCBleGNlcHQgd2hlbiBlc2NhcGVkIG9yIGluc2lkZSBhIGNoYXJhY3RlciAgY2xhc3MuICBIb3ctCisgICAgICAgZXZlciwgIHdoaXRlICBzcGFjZSAgaXMgIG5vdCAgYWxsb3dlZCB3aXRoaW4gc2VxdWVuY2VzIHN1Y2ggYXMgKD8+IHRoYXQKKyAgICAgICBpbnRyb2R1Y2UgdmFyaW91cyBwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm5zLCBub3Igd2l0aGluIG51bWVyaWNhbCBxdWFuLQorICAgICAgIHRpZmllcnMgIHN1Y2ggIGFzIHsxLDN9LiAgSWdub3JhYmxlIHdoaXRlIHNwYWNlIGlzIHBlcm1pdHRlZCBiZXR3ZWVuIGFuCisgICAgICAgaXRlbSBhbmQgYSBmb2xsb3dpbmcgcXVhbnRpZmllciBhbmQgYmV0d2VlbiBhIHF1YW50aWZpZXIgYW5kIGEgIGZvbGxvdy0KKyAgICAgICBpbmcgKyB0aGF0IGluZGljYXRlcyBwb3NzZXNzaXZlbmVzcy4KKworICAgICAgIFBDUkUyX0VYVEVOREVEICBhbHNvIGNhdXNlcyBjaGFyYWN0ZXJzIGJldHdlZW4gYW4gdW5lc2NhcGVkICMgb3V0c2lkZSBhCisgICAgICAgY2hhcmFjdGVyIGNsYXNzIGFuZCB0aGUgbmV4dCBuZXdsaW5lLCBpbmNsdXNpdmUsIHRvIGJlICBpZ25vcmVkLCAgd2hpY2gKKyAgICAgICBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbmNsdWRlIGNvbW1lbnRzIGluc2lkZSBjb21wbGljYXRlZCBwYXR0ZXJucy4gTm90ZQorICAgICAgIHRoYXQgdGhlIGVuZCBvZiB0aGlzIHR5cGUgb2YgY29tbWVudCBpcyBhIGxpdGVyYWwgbmV3bGluZSAgc2VxdWVuY2UgIGluCisgICAgICAgdGhlIHBhdHRlcm47IGVzY2FwZSBzZXF1ZW5jZXMgdGhhdCBoYXBwZW4gdG8gcmVwcmVzZW50IGEgbmV3bGluZSBkbyBub3QKKyAgICAgICBjb3VudC4gUENSRTJfRVhURU5ERUQgaXMgZXF1aXZhbGVudCB0byBQZXJsJ3MgL3ggb3B0aW9uLCBhbmQgaXQgY2FuICBiZQorICAgICAgIGNoYW5nZWQgd2l0aGluIGEgcGF0dGVybiBieSBhICg/eCkgb3B0aW9uIHNldHRpbmcuCisKKyAgICAgICBXaGljaCBjaGFyYWN0ZXJzIGFyZSBpbnRlcnByZXRlZCBhcyBuZXdsaW5lcyBjYW4gYmUgc3BlY2lmaWVkIGJ5IGEgc2V0LQorICAgICAgIHRpbmcgaW4gdGhlIGNvbXBpbGUgY29udGV4dCB0aGF0IGlzIHBhc3NlZCB0byBwY3JlMl9jb21waWxlKCkgb3IgIGJ5ICBhCisgICAgICAgc3BlY2lhbCAgc2VxdWVuY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuLCBhcyBkZXNjcmliZWQgaW4gdGhlIHNlYy0KKyAgICAgICB0aW9uIGVudGl0bGVkICJOZXdsaW5lIGNvbnZlbnRpb25zIiBpbiB0aGUgcGNyZTJwYXR0ZXJuICBkb2N1bWVudGF0aW9uLgorICAgICAgIEEgZGVmYXVsdCBpcyBkZWZpbmVkIHdoZW4gUENSRTIgaXMgYnVpbHQuCisKKyAgICAgICAgIFBDUkUyX0ZJUlNUTElORQorCisgICAgICAgSWYgIHRoaXMgIG9wdGlvbiAgaXMgIHNldCwgIGFuICB1bmFuY2hvcmVkIHBhdHRlcm4gaXMgcmVxdWlyZWQgdG8gbWF0Y2gKKyAgICAgICBiZWZvcmUgb3IgYXQgdGhlIGZpcnN0ICBuZXdsaW5lICBpbiAgdGhlICBzdWJqZWN0ICBzdHJpbmcsICB0aG91Z2ggIHRoZQorICAgICAgIG1hdGNoZWQgIHRleHQgIG1heSAgY29udGludWUgIG92ZXIgdGhlIG5ld2xpbmUuIFNlZSBhbHNvIFBDUkUyX1VTRV9PRkYtCisgICAgICAgU0VUX0xJTUlULCAgd2hpY2ggIHByb3ZpZGVzICBhICBtb3JlICBnZW5lcmFsICBsaW1pdGluZyAgZmFjaWxpdHkuICAgSWYKKyAgICAgICBQQ1JFMl9GSVJTVExJTkUgIGlzIHNldCB3aXRoIGFuIG9mZnNldCBsaW1pdCwgYSBtYXRjaCBtdXN0IG9jY3VyIGluIHRoZQorICAgICAgIGZpcnN0IGxpbmUgYW5kIGFsc28gd2l0aGluIHRoZSBvZmZzZXQgbGltaXQuIEluIG90aGVyIHdvcmRzLCAgd2hpY2hldmVyCisgICAgICAgbGltaXQgY29tZXMgZmlyc3QgaXMgdXNlZC4KKworICAgICAgICAgUENSRTJfTUFUQ0hfVU5TRVRfQkFDS1JFRgorCisgICAgICAgSWYgIHRoaXMgIG9wdGlvbiAgaXMgc2V0LCBhIGJhY2sgcmVmZXJlbmNlIHRvIGFuIHVuc2V0IHN1YnBhdHRlcm4gZ3JvdXAKKyAgICAgICBtYXRjaGVzIGFuIGVtcHR5IHN0cmluZyAoYnkgZGVmYXVsdCB0aGlzIGNhdXNlcyAgdGhlICBjdXJyZW50ICBtYXRjaGluZworICAgICAgIGFsdGVybmF0aXZlICB0byAgZmFpbCkuICAgQSAgcGF0dGVybiBzdWNoIGFzIChcMSkoYSkgc3VjY2VlZHMgd2hlbiB0aGlzCisgICAgICAgb3B0aW9uIGlzIHNldCAoYXNzdW1pbmcgaXQgY2FuIGZpbmQgYW4gImEiIGluIHRoZSBzdWJqZWN0KSwgd2hlcmVhcyAgaXQKKyAgICAgICBmYWlscyAgYnkgIGRlZmF1bHQsICBmb3IgIFBlcmwgY29tcGF0aWJpbGl0eS4gU2V0dGluZyB0aGlzIG9wdGlvbiBtYWtlcworICAgICAgIFBDUkUyIGJlaGF2ZSBtb3JlIGxpa2UgRUNNQXNjcmlwdCAoYWthIEphdmFTY3JpcHQpLgorCisgICAgICAgICBQQ1JFMl9NVUxUSUxJTkUKKworICAgICAgIEJ5IGRlZmF1bHQsIGZvciB0aGUgcHVycG9zZXMgb2YgbWF0Y2hpbmcgInN0YXJ0IG9mIGxpbmUiICBhbmQgICJlbmQgIG9mCisgICAgICAgbGluZSIsICBQQ1JFMiAgdHJlYXRzIHRoZSBzdWJqZWN0IHN0cmluZyBhcyBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGxpbmUKKyAgICAgICBvZiBjaGFyYWN0ZXJzLCBldmVuIGlmIGl0IGFjdHVhbGx5IGNvbnRhaW5zICBuZXdsaW5lcy4gIFRoZSAgInN0YXJ0ICBvZgorICAgICAgIGxpbmUiICBtZXRhY2hhcmFjdGVyICAoXikgIG1hdGNoZXMgb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZywgYW5kCisgICAgICAgdGhlICJlbmQgb2YgbGluZSIgbWV0YWNoYXJhY3RlciAoJCkgbWF0Y2hlcyBvbmx5ICBhdCAgdGhlICBlbmQgIG9mICB0aGUKKyAgICAgICBzdHJpbmcsICBvciAgYmVmb3JlICBhICB0ZXJtaW5hdGluZyAgbmV3bGluZSAgKGV4Y2VwdCAgd2hlbiAgUENSRTJfRE9MLQorICAgICAgIExBUl9FTkRPTkxZIGlzIHNldCkuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgdW5sZXNzICBQQ1JFMl9ET1RBTEwgIGlzICBzZXQsCisgICAgICAgdGhlICJhbnkgY2hhcmFjdGVyIiBtZXRhY2hhcmFjdGVyICguKSBkb2VzIG5vdCBtYXRjaCBhdCBhIG5ld2xpbmUuIFRoaXMKKyAgICAgICBiZWhhdmlvdXIgKGZvciBeLCAkLCBhbmQgZG90KSBpcyB0aGUgc2FtZSBhcyBQZXJsLgorCisgICAgICAgV2hlbiBQQ1JFMl9NVUxUSUxJTkUgaXQgaXMgc2V0LCB0aGUgInN0YXJ0IG9mIGxpbmUiIGFuZCAiZW5kICBvZiAgbGluZSIKKyAgICAgICBjb25zdHJ1Y3RzICBtYXRjaCAgaW1tZWRpYXRlbHkgZm9sbG93aW5nIG9yIGltbWVkaWF0ZWx5IGJlZm9yZSBpbnRlcm5hbAorICAgICAgIG5ld2xpbmVzIGluIHRoZSBzdWJqZWN0IHN0cmluZywgcmVzcGVjdGl2ZWx5LCBhcyB3ZWxsIGFzICBhdCAgdGhlICB2ZXJ5CisgICAgICAgc3RhcnQgIGFuZCAgZW5kLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIFBlcmwncyAvbSBvcHRpb24sIGFuZCBpdCBjYW4gYmUKKyAgICAgICBjaGFuZ2VkIHdpdGhpbiBhIHBhdHRlcm4gYnkgYSAoP20pIG9wdGlvbiBzZXR0aW5nLiBOb3RlIHRoYXQgdGhlICJzdGFydAorICAgICAgIG9mIGxpbmUiIG1ldGFjaGFyYWN0ZXIgZG9lcyBub3QgbWF0Y2ggYWZ0ZXIgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgc3ViamVjdCwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLiAgSG93ZXZlciwgeW91IGNhbiBjaGFuZ2UgdGhpcyAgYnkKKyAgICAgICBzZXR0aW5nICB0aGUgUENSRTJfQUxUX0NJUkNVTUZMRVggb3B0aW9uLiBJZiB0aGVyZSBhcmUgbm8gbmV3bGluZXMgaW4gYQorICAgICAgIHN1YmplY3Qgc3RyaW5nLCBvciBubyBvY2N1cnJlbmNlcyBvZiBeICBvciAgJCAgaW4gIGEgIHBhdHRlcm4sICBzZXR0aW5nCisgICAgICAgUENSRTJfTVVMVElMSU5FIGhhcyBubyBlZmZlY3QuCisKKyAgICAgICAgIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DCisKKyAgICAgICBUaGlzICBvcHRpb24gIGxvY2tzIG91dCB0aGUgdXNlIG9mIFxDIGluIHRoZSBwYXR0ZXJuIHRoYXQgaXMgYmVpbmcgY29tLQorICAgICAgIHBpbGVkLiAgVGhpcyBlc2NhcGUgY2FuICBjYXVzZSAgdW5wcmVkaWN0YWJsZSAgYmVoYXZpb3VyICBpbiAgVVRGLTggIG9yCisgICAgICAgVVRGLTE2ICBtb2RlcywgIGJlY2F1c2UgIGl0IG1heSBsZWF2ZSB0aGUgY3VycmVudCBtYXRjaGluZyBwb2ludCBpbiB0aGUKKyAgICAgICBtaWRkbGUgb2YgYSBtdWx0aS1jb2RlLXVuaXQgY2hhcmFjdGVyLiBUaGlzIG9wdGlvbiAgbWF5ICBiZSAgdXNlZnVsICBpbgorICAgICAgIGFwcGxpY2F0aW9ucyAgdGhhdCAgcHJvY2VzcyAgcGF0dGVybnMgIGZyb20gZXh0ZXJuYWwgc291cmNlcy4gTm90ZSB0aGF0CisgICAgICAgdGhlcmUgaXMgYWxzbyBhIGJ1aWxkLXRpbWUgb3B0aW9uIHRoYXQgcGVybWFuZW50bHkgbG9ja3Mgb3V0IHRoZSB1c2Ugb2YKKyAgICAgICBcQy4KKworICAgICAgICAgUENSRTJfTkVWRVJfVUNQCisKKyAgICAgICBUaGlzICBvcHRpb24gIGxvY2tzICBvdXQgdGhlIHVzZSBvZiBVbmljb2RlIHByb3BlcnRpZXMgZm9yIGhhbmRsaW5nIFxCLAorICAgICAgIFxiLCBcRCwgXGQsIFxTLCBccywgXFcsIFx3LCBhbmQgc29tZSBvZiB0aGUgUE9TSVggY2hhcmFjdGVyIGNsYXNzZXMsIGFzCisgICAgICAgZGVzY3JpYmVkICBmb3IgIHRoZSAgUENSRTJfVUNQIG9wdGlvbiBiZWxvdy4gSW4gcGFydGljdWxhciwgaXQgcHJldmVudHMKKyAgICAgICB0aGUgY3JlYXRvciBvZiB0aGUgcGF0dGVybiBmcm9tIGVuYWJsaW5nIHRoaXMgZmFjaWxpdHkgYnkgc3RhcnRpbmcgIHRoZQorICAgICAgIHBhdHRlcm4gIHdpdGggICgqVUNQKS4gIFRoaXMgIG9wdGlvbiBtYXkgYmUgdXNlZnVsIGluIGFwcGxpY2F0aW9ucyB0aGF0CisgICAgICAgcHJvY2VzcyBwYXR0ZXJucyBmcm9tIGV4dGVybmFsIHNvdXJjZXMuIFRoZSBvcHRpb24gY29tYmluYXRpb24gUENSRV9VQ1AKKyAgICAgICBhbmQgUENSRV9ORVZFUl9VQ1AgY2F1c2VzIGFuIGVycm9yLgorCisgICAgICAgICBQQ1JFMl9ORVZFUl9VVEYKKworICAgICAgIFRoaXMgIG9wdGlvbiAgbG9ja3Mgb3V0IGludGVycHJldGF0aW9uIG9mIHRoZSBwYXR0ZXJuIGFzIFVURi04LCBVVEYtMTYsCisgICAgICAgb3IgVVRGLTMyLCBkZXBlbmRpbmcgb24gd2hpY2ggbGlicmFyeSBpcyBpbiB1c2UuIEluIHBhcnRpY3VsYXIsIGl0IHByZS0KKyAgICAgICB2ZW50cyAgdGhlICBjcmVhdG9yIG9mIHRoZSBwYXR0ZXJuIGZyb20gc3dpdGNoaW5nIHRvIFVURiBpbnRlcnByZXRhdGlvbgorICAgICAgIGJ5IHN0YXJ0aW5nIHRoZSBwYXR0ZXJuIHdpdGggKCpVVEYpLiAgVGhpcyAgb3B0aW9uICBtYXkgIGJlICB1c2VmdWwgIGluCisgICAgICAgYXBwbGljYXRpb25zICB0aGF0IHByb2Nlc3MgcGF0dGVybnMgZnJvbSBleHRlcm5hbCBzb3VyY2VzLiBUaGUgY29tYmluYS0KKyAgICAgICB0aW9uIG9mIFBDUkUyX1VURiBhbmQgUENSRTJfTkVWRVJfVVRGIGNhdXNlcyBhbiBlcnJvci4KKworICAgICAgICAgUENSRTJfTk9fQVVUT19DQVBUVVJFCisKKyAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGl0IGRpc2FibGVzIHRoZSB1c2Ugb2YgbnVtYmVyZWQgY2FwdHVyaW5nIHBhcmVuLQorICAgICAgIHRoZXNlcyAgaW4gdGhlIHBhdHRlcm4uIEFueSBvcGVuaW5nIHBhcmVudGhlc2lzIHRoYXQgaXMgbm90IGZvbGxvd2VkIGJ5CisgICAgICAgPyBiZWhhdmVzIGFzIGlmIGl0IHdlcmUgZm9sbG93ZWQgYnkgPzogYnV0IG5hbWVkIHBhcmVudGhlc2VzIGNhbiAgc3RpbGwKKyAgICAgICBiZSAgdXNlZCAgZm9yICBjYXB0dXJpbmcgIChhbmQgIHRoZXkgYWNxdWlyZSBudW1iZXJzIGluIHRoZSB1c3VhbCB3YXkpLgorICAgICAgIFRoZXJlIGlzIG5vIGVxdWl2YWxlbnQgb2YgdGhpcyBvcHRpb24gaW4gUGVybC4KKworICAgICAgICAgUENSRTJfTk9fQVVUT19QT1NTRVNTCisKKyAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGl0IGRpc2FibGVzICJhdXRvLXBvc3Nlc3NpZmljYXRpb24iLCB3aGljaCBpcyBhbgorICAgICAgIG9wdGltaXphdGlvbiAgdGhhdCwgIGZvciBleGFtcGxlLCB0dXJucyBhK2IgaW50byBhKytiIGluIG9yZGVyIHRvIGF2b2lkCisgICAgICAgYmFja3RyYWNrcyBpbnRvIGErIHRoYXQgY2FuIG5ldmVyIGJlIHN1Y2Nlc3NmdWwuIEhvd2V2ZXIsICBpZiAgY2FsbG91dHMKKyAgICAgICBhcmUgIGluICB1c2UsICBhdXRvLXBvc3Nlc3NpZmljYXRpb24gbWVhbnMgdGhhdCBzb21lIGNhbGxvdXRzIGFyZSBuZXZlcgorICAgICAgIHRha2VuLiBZb3UgY2FuIHNldCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0aGUgbWF0Y2hpbmcgZnVuY3Rpb25zIHRvIGRvCisgICAgICAgYSAgZnVsbCAgdW5vcHRpbWl6ZWQgIHNlYXJjaCBhbmQgcnVuIGFsbCB0aGUgY2FsbG91dHMsIGJ1dCBpdCBpcyBtYWlubHkKKyAgICAgICBwcm92aWRlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKworICAgICAgICAgUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IKKworICAgICAgIElmIHRoaXMgb3B0aW9uIGlzIHNldCwgaXQgZGlzYWJsZXMgYW4gb3B0aW1pemF0aW9uIHRoYXQgaXMgYXBwbGllZCB3aGVuCisgICAgICAgLiogIGlzICB0aGUgIGZpcnN0IHNpZ25pZmljYW50IGl0ZW0gaW4gYSB0b3AtbGV2ZWwgYnJhbmNoIG9mIGEgcGF0dGVybiwKKyAgICAgICBhbmQgYWxsIHRoZSBvdGhlciBicmFuY2hlcyBhbHNvIHN0YXJ0IHdpdGggLiogb3Igd2l0aCBcQSBvciAgXEcgIG9yICBeLgorICAgICAgIFRoZSAgb3B0aW1pemF0aW9uICBpcyAgYXV0b21hdGljYWxseSBkaXNhYmxlZCBmb3IgLiogaWYgaXQgaXMgaW5zaWRlIGFuCisgICAgICAgYXRvbWljIGdyb3VwIG9yIGEgY2FwdHVyaW5nIGdyb3VwIHRoYXQgaXMgdGhlIHN1YmplY3Qgb2YgYSBiYWNrICByZWZlci0KKyAgICAgICBlbmNlLCAgb3IgIGlmICB0aGUgcGF0dGVybiBjb250YWlucyAoKlBSVU5FKSBvciAoKlNLSVApLiBXaGVuIHRoZSBvcHRpLQorICAgICAgIG1pemF0aW9uIGlzIG5vdCBkaXNhYmxlZCwgc3VjaCBhIHBhdHRlcm4gaXMgYXV0b21hdGljYWxseSAgYW5jaG9yZWQgIGlmCisgICAgICAgUENSRTJfRE9UQUxMIGlzIHNldCBmb3IgYWxsIHRoZSAuKiBpdGVtcyBhbmQgUENSRTJfTVVMVElMSU5FIGlzIG5vdCBzZXQKKyAgICAgICBmb3IgYW55IF4gaXRlbXMuIE90aGVyd2lzZSwgdGhlIGZhY3QgdGhhdCBhbnkgbWF0Y2ggbXVzdCAgc3RhcnQgIGVpdGhlcgorICAgICAgIGF0ICB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3Qgb3IgZm9sbG93aW5nIGEgbmV3bGluZSBpcyByZW1lbWJlcmVkLiBMaWtlCisgICAgICAgb3RoZXIgb3B0aW1pemF0aW9ucywgdGhpcyBjYW4gY2F1c2UgY2FsbG91dHMgdG8gYmUgc2tpcHBlZC4KKworICAgICAgICAgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUKKworICAgICAgIFRoaXMgaXMgYW4gb3B0aW9uIHdob3NlIG1haW4gZWZmZWN0IGlzIGF0IG1hdGNoaW5nIHRpbWUuICBJdCAgZG9lcyAgbm90CisgICAgICAgY2hhbmdlIHdoYXQgcGNyZTJfY29tcGlsZSgpIGdlbmVyYXRlcywgYnV0IGl0IGRvZXMgYWZmZWN0IHRoZSBvdXRwdXQgb2YKKyAgICAgICB0aGUgSklUIGNvbXBpbGVyLgorCisgICAgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG9wdGltaXphdGlvbnMgdGhhdCBtYXkgb2NjdXIgYXQgdGhlICBzdGFydCAgb2YgIGEKKyAgICAgICBtYXRjaCwgIGluICBvcmRlciAgdG8gc3BlZWQgdXAgdGhlIHByb2Nlc3MuIEZvciBleGFtcGxlLCBpZiBpdCBpcyBrbm93bgorICAgICAgIHRoYXQgYW4gdW5hbmNob3JlZCBtYXRjaCBtdXN0IHN0YXJ0ICB3aXRoICBhICBzcGVjaWZpYyAgY2hhcmFjdGVyLCAgdGhlCisgICAgICAgbWF0Y2hpbmcgIGNvZGUgc2VhcmNoZXMgdGhlIHN1YmplY3QgZm9yIHRoYXQgY2hhcmFjdGVyLCBhbmQgZmFpbHMgaW1tZS0KKyAgICAgICBkaWF0ZWx5IGlmIGl0IGNhbm5vdCBmaW5kIGl0LCB3aXRob3V0IGFjdHVhbGx5IHJ1bm5pbmcgdGhlIG1haW4gIG1hdGNoLQorICAgICAgIGluZyAgZnVuY3Rpb24uICBUaGlzIG1lYW5zIHRoYXQgYSBzcGVjaWFsIGl0ZW0gc3VjaCBhcyAoKkNPTU1JVCkgYXQgdGhlCisgICAgICAgc3RhcnQgb2YgYSBwYXR0ZXJuIGlzIG5vdCBjb25zaWRlcmVkIHVudGlsIGFmdGVyICBhICBzdWl0YWJsZSAgc3RhcnRpbmcKKyAgICAgICBwb2ludCAgZm9yICB0aGUgIG1hdGNoICBoYXMgIGJlZW4gZm91bmQuIEFsc28sIHdoZW4gY2FsbG91dHMgb3IgKCpNQVJLKQorICAgICAgIGl0ZW1zIGFyZSBpbiB1c2UsIHRoZXNlICJzdGFydC11cCIgb3B0aW1pemF0aW9ucyBjYW4gY2F1c2UgdGhlbSAgdG8gIGJlCisgICAgICAgc2tpcHBlZCAgaWYgIHRoZSBwYXR0ZXJuIGlzIG5ldmVyIGFjdHVhbGx5IHVzZWQuIFRoZSBzdGFydC11cCBvcHRpbWl6YS0KKyAgICAgICB0aW9ucyBhcmUgaW4gZWZmZWN0IGEgcHJlLXNjYW4gb2YgdGhlIHN1YmplY3QgdGhhdCB0YWtlcyAgcGxhY2UgIGJlZm9yZQorICAgICAgIHRoZSBwYXR0ZXJuIGlzIHJ1bi4KKworICAgICAgIFRoZSBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSBvcHRpb24gZGlzYWJsZXMgdGhlIHN0YXJ0LXVwIG9wdGltaXphdGlvbnMsCisgICAgICAgcG9zc2libHkgY2F1c2luZyBwZXJmb3JtYW5jZSB0byBzdWZmZXIsICBidXQgIGVuc3VyaW5nICB0aGF0ICBpbiAgY2FzZXMKKyAgICAgICB3aGVyZSAgdGhlICByZXN1bHQgaXMgIm5vIG1hdGNoIiwgdGhlIGNhbGxvdXRzIGRvIG9jY3VyLCBhbmQgdGhhdCBpdGVtcworICAgICAgIHN1Y2ggYXMgKCpDT01NSVQpIGFuZCAoKk1BUkspIGFyZSBjb25zaWRlcmVkIGF0IGV2ZXJ5IHBvc3NpYmxlIHN0YXJ0aW5nCisgICAgICAgcG9zaXRpb24gaW4gdGhlIHN1YmplY3Qgc3RyaW5nLgorCisgICAgICAgU2V0dGluZyAgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUgIG1heSAgY2hhbmdlIHRoZSBvdXRjb21lIG9mIGEgbWF0Y2hpbmcKKyAgICAgICBvcGVyYXRpb24uICBDb25zaWRlciB0aGUgcGF0dGVybgorCisgICAgICAgICAoKkNPTU1JVClBQkMKKworICAgICAgIFdoZW4gdGhpcyBpcyBjb21waWxlZCwgUENSRTIgcmVjb3JkcyB0aGUgZmFjdCB0aGF0IGEgbWF0Y2ggIG11c3QgIHN0YXJ0CisgICAgICAgd2l0aCAgdGhlICBjaGFyYWN0ZXIgICJBIi4gIFN1cHBvc2UgdGhlIHN1YmplY3Qgc3RyaW5nIGlzICJERUZBQkMiLiBUaGUKKyAgICAgICBzdGFydC11cCBvcHRpbWl6YXRpb24gc2NhbnMgYWxvbmcgdGhlIHN1YmplY3QsIGZpbmRzICJBIiBhbmQgIHJ1bnMgIHRoZQorICAgICAgIGZpcnN0ICBtYXRjaCBhdHRlbXB0IGZyb20gdGhlcmUuIFRoZSAoKkNPTU1JVCkgaXRlbSBtZWFucyB0aGF0IHRoZSBwYXQtCisgICAgICAgdGVybiBtdXN0IG1hdGNoIHRoZSBjdXJyZW50IHN0YXJ0aW5nIHBvc2l0aW9uLCB3aGljaCBpbiB0aGlzICBjYXNlLCAgaXQKKyAgICAgICBkb2VzLiAgSG93ZXZlciwgIGlmICB0aGUgc2FtZSBtYXRjaCBpcyBydW4gd2l0aCBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRQorICAgICAgIHNldCwgdGhlIGluaXRpYWwgc2NhbiBhbG9uZyB0aGUgc3ViamVjdCBzdHJpbmcgIGRvZXMgIG5vdCAgaGFwcGVuLiAgVGhlCisgICAgICAgZmlyc3QgIG1hdGNoICBhdHRlbXB0ICBpcyAgcnVuICBzdGFydGluZyAgZnJvbSAiRCIgYW5kIHdoZW4gdGhpcyBmYWlscywKKyAgICAgICAoKkNPTU1JVCkgcHJldmVudHMgYW55IGZ1cnRoZXIgbWF0Y2hlcyAgYmVpbmcgIHRyaWVkLCAgc28gIHRoZSAgb3ZlcmFsbAorICAgICAgIHJlc3VsdCBpcyAibm8gbWF0Y2giLiBUaGVyZSBhcmUgYWxzbyBvdGhlciBzdGFydC11cCBvcHRpbWl6YXRpb25zLiAgRm9yCisgICAgICAgZXhhbXBsZSwgYSBtaW5pbXVtIGxlbmd0aCBmb3IgdGhlIHN1YmplY3QgbWF5IGJlIHJlY29yZGVkLiBDb25zaWRlciB0aGUKKyAgICAgICBwYXR0ZXJuCisKKyAgICAgICAgICgqTUFSSzpBKShYfFkpCisKKyAgICAgICBUaGUgIG1pbmltdW0gIGxlbmd0aCAgZm9yICBhICBtYXRjaCBpcyBvbmUgY2hhcmFjdGVyLiBJZiB0aGUgc3ViamVjdCBpcworICAgICAgICJBQkMiLCB0aGVyZSB3aWxsIGJlIGF0dGVtcHRzIHRvIG1hdGNoICJBQkMiLCAiQkMiLCBhbmQgIkMiLiBBbiBhdHRlbXB0CisgICAgICAgdG8gbWF0Y2ggYW4gZW1wdHkgc3RyaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3QgZG9lcyBub3QgdGFrZSBwbGFjZSwKKyAgICAgICBiZWNhdXNlIFBDUkUyIGtub3dzIHRoYXQgdGhlIHN1YmplY3QgaXMgIG5vdyAgdG9vICBzaG9ydCwgIGFuZCAgc28gIHRoZQorICAgICAgICgqTUFSSykgIGlzICBuZXZlciBlbmNvdW50ZXJlZC4gSW4gdGhpcyBjYXNlLCB0aGUgb3B0aW1pemF0aW9uIGRvZXMgbm90CisgICAgICAgYWZmZWN0IHRoZSBvdmVyYWxsIG1hdGNoIHJlc3VsdCwgd2hpY2ggaXMgc3RpbGwgIm5vIG1hdGNoIiwgYnV0IGl0IGRvZXMKKyAgICAgICBhZmZlY3QgdGhlIGF1eGlsaWFyeSBpbmZvcm1hdGlvbiB0aGF0IGlzIHJldHVybmVkLgorCisgICAgICAgICBQQ1JFMl9OT19VVEZfQ0hFQ0sKKworICAgICAgIFdoZW4gIFBDUkUyX1VURiAgaXMgc2V0LCB0aGUgdmFsaWRpdHkgb2YgdGhlIHBhdHRlcm4gYXMgYSBVVEYgc3RyaW5nIGlzCisgICAgICAgYXV0b21hdGljYWxseSBjaGVja2VkLiBUaGVyZSBhcmUgIGRpc2N1c3Npb25zICBhYm91dCAgdGhlICB2YWxpZGl0eSAgb2YKKyAgICAgICBVVEYtOCAgc3RyaW5ncywgIFVURi0xNiBzdHJpbmdzLCBhbmQgVVRGLTMyIHN0cmluZ3MgaW4gdGhlIHBjcmUydW5pY29kZQorICAgICAgIGRvY3VtZW50LiAgSWYgYW4gaW52YWxpZCBVVEYgc2VxdWVuY2UgaXMgZm91bmQsIHBjcmUyX2NvbXBpbGUoKSByZXR1cm5zCisgICAgICAgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorCisgICAgICAgSWYgeW91IGtub3cgdGhhdCB5b3VyIHBhdHRlcm4gaXMgdmFsaWQsIGFuZCB5b3Ugd2FudCB0byBza2lwIHRoaXMgY2hlY2sKKyAgICAgICBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgeW91IGNhbiAgc2V0ICB0aGUgIFBDUkUyX05PX1VURl9DSEVDSyAgb3B0aW9uLgorICAgICAgIFdoZW4gIGl0ICBpcyBzZXQsIHRoZSBlZmZlY3Qgb2YgcGFzc2luZyBhbiBpbnZhbGlkIFVURiBzdHJpbmcgYXMgYSBwYXQtCisgICAgICAgdGVybiBpcyB1bmRlZmluZWQuIEl0IG1heSBjYXVzZSB5b3VyIHByb2dyYW0gdG8gIGNyYXNoICBvciAgbG9vcC4gIE5vdGUKKyAgICAgICB0aGF0ICAgdGhpcyAgIG9wdGlvbiAgIGNhbiAgIGFsc28gICBiZSAgIHBhc3NlZCAgdG8gIHBjcmUyX21hdGNoKCkgIGFuZAorICAgICAgIHBjcmVfZGZhX21hdGNoKCksIHRvIHN1cHByZXNzIHZhbGlkaXR5IGNoZWNraW5nIG9mIHRoZSBzdWJqZWN0IHN0cmluZy4KKworICAgICAgICAgUENSRTJfVUNQCisKKyAgICAgICBUaGlzIG9wdGlvbiBjaGFuZ2VzIHRoZSB3YXkgUENSRTIgcHJvY2Vzc2VzIFxCLCBcYiwgXEQsIFxkLCBcUywgXHMsIFxXLAorICAgICAgIFx3LCAgYW5kICBzb21lICBvZiAgdGhlIFBPU0lYIGNoYXJhY3RlciBjbGFzc2VzLiBCeSBkZWZhdWx0LCBvbmx5IEFTQ0lJCisgICAgICAgY2hhcmFjdGVycyBhcmUgcmVjb2duaXplZCwgYnV0IGlmIFBDUkUyX1VDUCBpcyBzZXQsIFVuaWNvZGUgIHByb3BlcnRpZXMKKyAgICAgICBhcmUgIHVzZWQgaW5zdGVhZCB0byBjbGFzc2lmeSBjaGFyYWN0ZXJzLiBNb3JlIGRldGFpbHMgYXJlIGdpdmVuIGluIHRoZQorICAgICAgIHNlY3Rpb24gb24gZ2VuZXJpYyBjaGFyYWN0ZXIgdHlwZXMgaW4gdGhlIHBjcmUycGF0dGVybiBwYWdlLiBJZiB5b3Ugc2V0CisgICAgICAgUENSRTJfVUNQLCAgbWF0Y2hpbmcgb25lIG9mIHRoZSBpdGVtcyBpdCBhZmZlY3RzIHRha2VzIG11Y2ggbG9uZ2VyLiBUaGUKKyAgICAgICBvcHRpb24gaXMgYXZhaWxhYmxlIG9ubHkgaWYgUENSRTIgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCAgVW5pY29kZSAgc3VwLQorICAgICAgIHBvcnQuCisKKyAgICAgICAgIFBDUkUyX1VOR1JFRURZCisKKyAgICAgICBUaGlzICBvcHRpb24gIGludmVydHMgIHRoZSAiZ3JlZWRpbmVzcyIgb2YgdGhlIHF1YW50aWZpZXJzIHNvIHRoYXQgdGhleQorICAgICAgIGFyZSBub3QgZ3JlZWR5IGJ5IGRlZmF1bHQsIGJ1dCBiZWNvbWUgZ3JlZWR5IGlmIGZvbGxvd2VkIGJ5ICI/Ii4gSXQgIGlzCisgICAgICAgbm90ICBjb21wYXRpYmxlICB3aXRoIFBlcmwuIEl0IGNhbiBhbHNvIGJlIHNldCBieSBhICg/VSkgb3B0aW9uIHNldHRpbmcKKyAgICAgICB3aXRoaW4gdGhlIHBhdHRlcm4uCisKKyAgICAgICAgIFBDUkUyX1VTRV9PRkZTRVRfTElNSVQKKworICAgICAgIFRoaXMgb3B0aW9uIG11c3QgYmUgc2V0IGZvciBwY3JlMl9jb21waWxlKCkgaWYgcGNyZTJfc2V0X29mZnNldF9saW1pdCgpCisgICAgICAgaXMgIGdvaW5nICB0byBiZSB1c2VkIHRvIHNldCBhIG5vbi1kZWZhdWx0IG9mZnNldCBsaW1pdCBpbiBhIG1hdGNoIGNvbi0KKyAgICAgICB0ZXh0IGZvciBtYXRjaGVzIHRoYXQgdXNlIHRoaXMgcGF0dGVybi4gQW4gZXJyb3IgIGlzICBnZW5lcmF0ZWQgIGlmICBhbgorICAgICAgIG9mZnNldCAgbGltaXQgIGlzICBzZXQgIHdpdGhvdXQgIHRoaXMgb3B0aW9uLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlCisgICAgICAgZGVzY3JpcHRpb24gb2YgcGNyZTJfc2V0X29mZnNldF9saW1pdCgpIGluIHRoZSBzZWN0aW9uICB0aGF0ICBkZXNjcmliZXMKKyAgICAgICBtYXRjaCBjb250ZXh0cy4gU2VlIGFsc28gdGhlIFBDUkUyX0ZJUlNUTElORSBvcHRpb24gYWJvdmUuCisKKyAgICAgICAgIFBDUkUyX1VURgorCisgICAgICAgVGhpcyAgb3B0aW9uICBjYXVzZXMgIFBDUkUyICB0byByZWdhcmQgYm90aCB0aGUgcGF0dGVybiBhbmQgdGhlIHN1YmplY3QKKyAgICAgICBzdHJpbmdzIHRoYXQgYXJlIHN1YnNlcXVlbnRseSBwcm9jZXNzZWQgYXMgc3RyaW5ncyAgb2YgIFVURiAgY2hhcmFjdGVycworICAgICAgIGluc3RlYWQgIG9mICBzaW5nbGUtY29kZS11bml0ICBzdHJpbmdzLiAgSXQgIGlzIGF2YWlsYWJsZSB3aGVuIFBDUkUyIGlzCisgICAgICAgYnVpbHQgdG8gaW5jbHVkZSBVbmljb2RlIHN1cHBvcnQgKHdoaWNoIGlzICB0aGUgIGRlZmF1bHQpLiAgSWYgIFVuaWNvZGUKKyAgICAgICBzdXBwb3J0ICBpcyAgbm90ICBhdmFpbGFibGUsICB0aGUgdXNlIG9mIHRoaXMgb3B0aW9uIHByb3Zva2VzIGFuIGVycm9yLgorICAgICAgIERldGFpbHMgb2YgaG93IHRoaXMgb3B0aW9uIGNoYW5nZXMgdGhlIGJlaGF2aW91ciBvZiBQQ1JFMiBhcmUgZ2l2ZW4gIGluCisgICAgICAgdGhlIHBjcmUydW5pY29kZSBwYWdlLgorCisKK0NPTVBJTEFUSU9OIEVSUk9SIENPREVTCisKKyAgICAgICBUaGVyZSAgYXJlIG92ZXIgODAgcG9zaXRpdmUgZXJyb3IgY29kZXMgdGhhdCBwY3JlMl9jb21waWxlKCkgbWF5IHJldHVybgorICAgICAgIGlmIGl0IGZpbmRzIGFuIGVycm9yIGluIHRoZSBwYXR0ZXJuLiBUaGVyZSBhcmUgYWxzbyBzb21lIG5lZ2F0aXZlIGVycm9yCisgICAgICAgY29kZXMgIHRoYXQgIGFyZSAgdXNlZCAgZm9yICBpbnZhbGlkIFVURiBzdHJpbmdzLiBUaGVzZSBhcmUgdGhlIHNhbWUgYXMKKyAgICAgICBnaXZlbiBieSBwY3JlMl9tYXRjaCgpIGFuZCBwY3JlMl9kZmFfbWF0Y2goKSwgYW5kIGFyZSBkZXNjcmliZWQgaW4gIHRoZQorICAgICAgIHBjcmUydW5pY29kZSBwYWdlLiBUaGUgcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKSBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCisgICAgICAgdG8gb2J0YWluIGEgdGV4dHVhbCBlcnJvciBtZXNzYWdlIGZyb20gYW55IGVycm9yIGNvZGUuCisKKworSlVTVC1JTi1USU1FIChKSVQpIENPTVBJTEFUSU9OCisKKyAgICAgICBpbnQgcGNyZTJfaml0X2NvbXBpbGUocGNyZTJfY29kZSAqY29kZSwgdWludDMyX3Qgb3B0aW9ucyk7CisKKyAgICAgICBpbnQgcGNyZTJfaml0X21hdGNoKGNvbnN0IHBjcmUyX2NvZGUgKmNvZGUsIFBDUkUyX1NQVFIgc3ViamVjdCwKKyAgICAgICAgIFBDUkUyX1NJWkUgbGVuZ3RoLCBQQ1JFMl9TSVpFIHN0YXJ0b2Zmc2V0LAorICAgICAgICAgdWludDMyX3Qgb3B0aW9ucywgcGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgICAgICAgIHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0KTsKKworICAgICAgIHZvaWQgcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeShwY3JlMl9nZW5lcmFsX2NvbnRleHQgKmdjb250ZXh0KTsKKworICAgICAgIHBjcmUyX2ppdF9zdGFjayAqcGNyZTJfaml0X3N0YWNrX2NyZWF0ZShQQ1JFMl9TSVpFIHN0YXJ0c2l6ZSwKKyAgICAgICAgIFBDUkUyX1NJWkUgbWF4c2l6ZSwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCk7CisKKyAgICAgICB2b2lkIHBjcmUyX2ppdF9zdGFja19hc3NpZ24ocGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsCisgICAgICAgICBwY3JlMl9qaXRfY2FsbGJhY2sgY2FsbGJhY2tfZnVuY3Rpb24sIHZvaWQgKmNhbGxiYWNrX2RhdGEpOworCisgICAgICAgdm9pZCBwY3JlMl9qaXRfc3RhY2tfZnJlZShwY3JlMl9qaXRfc3RhY2sgKmppdF9zdGFjayk7CisKKyAgICAgICBUaGVzZSBmdW5jdGlvbnMgcHJvdmlkZSBzdXBwb3J0IGZvciAgSklUICBjb21waWxhdGlvbiwgIHdoaWNoLCAgaWYgIHRoZQorICAgICAgIGp1c3QtaW4tdGltZSAgY29tcGlsZXIgIGlzIGF2YWlsYWJsZSwgZnVydGhlciBwcm9jZXNzZXMgYSBjb21waWxlZCBwYXQtCisgICAgICAgdGVybiBpbnRvIG1hY2hpbmUgY29kZSB0aGF0IGV4ZWN1dGVzIG11Y2ggZmFzdGVyIHRoYW4gdGhlIHBjcmUyX21hdGNoKCkKKyAgICAgICBpbnRlcnByZXRpdmUgIG1hdGNoaW5nIGZ1bmN0aW9uLiBGdWxsIGRldGFpbHMgYXJlIGdpdmVuIGluIHRoZSBwY3JlMmppdAorICAgICAgIGRvY3VtZW50YXRpb24uCisKKyAgICAgICBKSVQgY29tcGlsYXRpb24gaXMgYSBoZWF2eXdlaWdodCBvcHRpbWl6YXRpb24uIEl0IGNhbiAgdGFrZSAgc29tZSAgdGltZQorICAgICAgIGZvciAgcGF0dGVybnMgIHRvICBiZSBhbmFseXplZCwgYW5kIGZvciBvbmUtb2ZmIG1hdGNoZXMgYW5kIHNpbXBsZSBwYXQtCisgICAgICAgdGVybnMgdGhlIGJlbmVmaXQgb2YgZmFzdGVyIGV4ZWN1dGlvbiBtaWdodCBiZSBvZmZzZXQgYnkgYSBtdWNoICBzbG93ZXIKKyAgICAgICBjb21waWxhdGlvbiAgdGltZS4gICBNb3N0LCBidXQgbm90IGFsbCBwYXR0ZXJucyBjYW4gYmUgb3B0aW1pemVkIGJ5IHRoZQorICAgICAgIEpJVCBjb21waWxlci4KKworCitMT0NBTEUgU1VQUE9SVAorCisgICAgICAgUENSRTIgaGFuZGxlcyBjYXNlbGVzcyBtYXRjaGluZywgYW5kIGRldGVybWluZXMgd2hldGhlciBjaGFyYWN0ZXJzICBhcmUKKyAgICAgICBsZXR0ZXJzLCAgZGlnaXRzLCBvciB3aGF0ZXZlciwgYnkgcmVmZXJlbmNlIHRvIGEgc2V0IG9mIHRhYmxlcywgaW5kZXhlZAorICAgICAgIGJ5IGNoYXJhY3RlciBjb2RlIHBvaW50LiBUaGlzIGFwcGxpZXMgb25seSAgdG8gIGNoYXJhY3RlcnMgIHdob3NlICBjb2RlCisgICAgICAgcG9pbnRzICBhcmUgIGxlc3MgdGhhbiAyNTYuIEJ5IGRlZmF1bHQsIGhpZ2hlci12YWx1ZWQgY29kZSBwb2ludHMgbmV2ZXIKKyAgICAgICBtYXRjaCBlc2NhcGVzIHN1Y2ggYXMgXHcgb3IgXGQuICBIb3dldmVyLCBpZiBQQ1JFMiBpcyAgYnVpbHQgIHdpdGggIFVURgorICAgICAgIHN1cHBvcnQsICBhbGwgIGNoYXJhY3RlcnMgIGNhbiAgYmUgIHRlc3RlZCB3aXRoIFxwIGFuZCBcUCwgb3IsIGFsdGVybmEtCisgICAgICAgdGl2ZWx5LCB0aGUgUENSRTJfVUNQIG9wdGlvbiBjYW4gYmUgc2V0IHdoZW4gIGEgIHBhdHRlcm4gIGlzICBjb21waWxlZDsKKyAgICAgICB0aGlzICBjYXVzZXMgIFx3IGFuZCBmcmllbmRzIHRvIHVzZSBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQgaW5zdGVhZCBvZgorICAgICAgIHRoZSBidWlsdC1pbiB0YWJsZXMuCisKKyAgICAgICBUaGUgdXNlIG9mIGxvY2FsZXMgd2l0aCBVbmljb2RlIGlzIGRpc2NvdXJhZ2VkLiAgSWYgIHlvdSAgYXJlICBoYW5kbGluZworICAgICAgIGNoYXJhY3RlcnMgIHdpdGggIGNvZGUgIHBvaW50cyAgZ3JlYXRlciB0aGFuIDEyOCwgeW91IHNob3VsZCBlaXRoZXIgdXNlCisgICAgICAgVW5pY29kZSBzdXBwb3J0LCBvciB1c2UgbG9jYWxlcywgYnV0IG5vdCB0cnkgdG8gbWl4IHRoZSB0d28uCisKKyAgICAgICBQQ1JFMiBjb250YWlucyBhbiBpbnRlcm5hbCBzZXQgb2YgY2hhcmFjdGVyIHRhYmxlcyAgdGhhdCAgYXJlICB1c2VkICBieQorICAgICAgIGRlZmF1bHQuICAgVGhlc2UgIGFyZSAgc3VmZmljaWVudCAgZm9yIG1hbnkgYXBwbGljYXRpb25zLiBOb3JtYWxseSwgdGhlCisgICAgICAgaW50ZXJuYWwgdGFibGVzIHJlY29nbml6ZSBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMuIEhvd2V2ZXIsIHdoZW4gUENSRTIgaXMKKyAgICAgICBidWlsdCwgaXQgaXMgcG9zc2libGUgdG8gY2F1c2UgdGhlIGludGVybmFsIHRhYmxlcyB0byBiZSByZWJ1aWx0IGluIHRoZQorICAgICAgIGRlZmF1bHQgIkMiIGxvY2FsZSBvZiB0aGUgbG9jYWwgc3lzdGVtLCB3aGljaCBtYXkgY2F1c2UgdGhlbSB0byBiZSBkaWYtCisgICAgICAgZmVyZW50LgorCisgICAgICAgVGhlICBpbnRlcm5hbCB0YWJsZXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGFibGVzIHN1cHBsaWVkIGJ5IHRoZSBhcHBsaS0KKyAgICAgICBjYXRpb24gdGhhdCBjYWxscyBQQ1JFMi4gVGhlc2UgbWF5IGJlIGNyZWF0ZWQgIGluICBhICBkaWZmZXJlbnQgIGxvY2FsZQorICAgICAgIGZyb20gIHRoZSAgZGVmYXVsdC4gIEFzIG1vcmUgYW5kIG1vcmUgYXBwbGljYXRpb25zIGNoYW5nZSB0byB1c2luZyBVbmktCisgICAgICAgY29kZSwgdGhlIG5lZWQgZm9yIHRoaXMgbG9jYWxlIHN1cHBvcnQgaXMgZXhwZWN0ZWQgdG8gZGllIGF3YXkuCisKKyAgICAgICBFeHRlcm5hbCB0YWJsZXMgYXJlIGJ1aWx0IGJ5IGNhbGxpbmcgdGhlICBwY3JlMl9tYWtldGFibGVzKCkgIGZ1bmN0aW9uLAorICAgICAgIGluICB0aGUgcmVsZXZhbnQgbG9jYWxlLiBUaGUgcmVzdWx0IGNhbiBiZSBwYXNzZWQgdG8gcGNyZTJfY29tcGlsZSgpIGFzCisgICAgICAgb2Z0ZW4gIGFzICBuZWNlc3NhcnksICBieSAgY3JlYXRpbmcgIGEgIGNvbXBpbGUgIGNvbnRleHQgIGFuZCAgIGNhbGxpbmcKKyAgICAgICBwY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcygpICB0byAgc2V0ICB0aGUgIHRhYmxlcyBwb2ludGVyIHRoZXJlaW4uIEZvcgorICAgICAgIGV4YW1wbGUsIHRvIGJ1aWxkIGFuZCB1c2UgdGFibGVzIHRoYXQgYXJlIGFwcHJvcHJpYXRlICBmb3IgIHRoZSAgRnJlbmNoCisgICAgICAgbG9jYWxlICAod2hlcmUgIGFjY2VudGVkICBjaGFyYWN0ZXJzICB3aXRoICB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEyOCBhcmUKKyAgICAgICB0cmVhdGVkIGFzIGxldHRlcnMpLCB0aGUgZm9sbG93aW5nIGNvZGUgY291bGQgYmUgdXNlZDoKKworICAgICAgICAgc2V0bG9jYWxlKExDX0NUWVBFLCAiZnJfRlIiKTsKKyAgICAgICAgIHRhYmxlcyA9IHBjcmUyX21ha2V0YWJsZXMoTlVMTCk7CisgICAgICAgICBjY29udGV4dCA9IHBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUoTlVMTCk7CisgICAgICAgICBwY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcyhjY29udGV4dCwgdGFibGVzKTsKKyAgICAgICAgIHJlID0gcGNyZTJfY29tcGlsZSguLi4sIGNjb250ZXh0KTsKKworICAgICAgIFRoZSBsb2NhbGUgbmFtZSAiZnJfRlIiIGlzIHVzZWQgb24gTGludXggYW5kIG90aGVyICBVbml4LWxpa2UgIHN5c3RlbXM7CisgICAgICAgaWYgIHlvdSAgYXJlIHVzaW5nIFdpbmRvd3MsIHRoZSBuYW1lIGZvciB0aGUgRnJlbmNoIGxvY2FsZSBpcyAiZnJlbmNoIi4KKyAgICAgICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlIG1lbW9yeSAgY29udGFpbmluZworICAgICAgIHRoZSB0YWJsZXMgcmVtYWlucyBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgaXQgaXMgbmVlZGVkLgorCisgICAgICAgVGhlIHBvaW50ZXIgdGhhdCBpcyBwYXNzZWQgKHZpYSB0aGUgY29tcGlsZSBjb250ZXh0KSB0byBwY3JlMl9jb21waWxlKCkKKyAgICAgICBpcyBzYXZlZCB3aXRoIHRoZSBjb21waWxlZCBwYXR0ZXJuLCBhbmQgdGhlIHNhbWUgIHRhYmxlcyAgYXJlICB1c2VkICBieQorICAgICAgIHBjcmUyX21hdGNoKCkgIGFuZCBwY3JlX2RmYV9tYXRjaCgpLiBUaHVzLCBmb3IgYW55IHNpbmdsZSBwYXR0ZXJuLCBjb20tCisgICAgICAgcGlsYXRpb24sIGFuZCBtYXRjaGluZyBhbGwgaGFwcGVuIGluIHRoZSAgc2FtZSAgbG9jYWxlLCAgYnV0ICBkaWZmZXJlbnQKKyAgICAgICBwYXR0ZXJucyBjYW4gYmUgcHJvY2Vzc2VkIGluIGRpZmZlcmVudCBsb2NhbGVzLgorCisKK0lORk9STUFUSU9OIEFCT1VUIEEgQ09NUElMRUQgUEFUVEVSTgorCisgICAgICAgaW50IHBjcmUyX3BhdHRlcm5faW5mbyhjb25zdCBwY3JlMiAqY29kZSwgdWludDMyX3Qgd2hhdCwgdm9pZCAqd2hlcmUpOworCisgICAgICAgVGhlICBwY3JlMl9wYXR0ZXJuX2luZm8oKSAgZnVuY3Rpb24gcmV0dXJucyBnZW5lcmFsIGluZm9ybWF0aW9uIGFib3V0IGEKKyAgICAgICBjb21waWxlZCBwYXR0ZXJuLiBGb3IgaW5mb3JtYXRpb24gYWJvdXQgY2FsbG91dHMsIHNlZSB0aGUgbmV4dCBzZWN0aW9uLgorICAgICAgIFRoZSAgZmlyc3QgIGFyZ3VtZW50ICBmb3IgcGNyZTJfcGF0dGVybl9pbmZvKCkgaXMgYSBwb2ludGVyIHRvIHRoZSBjb20tCisgICAgICAgcGlsZWQgcGF0dGVybi4gVGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgd2hpY2ggcGllY2Ugb2YgaW5mb3JtYXRpb24KKyAgICAgICBpcyAgcmVxdWlyZWQsICBhbmQgIHRoZSAgdGhpcmQgIGFyZ3VtZW50ICBpcyBhIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0bworICAgICAgIHJlY2VpdmUgdGhlIGRhdGEuIElmIHRoZSB0aGlyZCBhcmd1bWVudCBpcyBOVUxMLCB0aGUgZmlyc3QgYXJndW1lbnQgIGlzCisgICAgICAgaWdub3JlZCwgIGFuZCAgdGhlICBmdW5jdGlvbiAgcmV0dXJucyB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgdmFyaWFibGUKKyAgICAgICB0aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkLiBPdGhlcndpc2UsIFRoZSB5aWVsZCBvZgorICAgICAgIHRoZSBmdW5jdGlvbiBpcyB6ZXJvIGZvciBzdWNjZXNzLCBvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBudW0tCisgICAgICAgYmVyczoKKworICAgICAgICAgUENSRTJfRVJST1JfTlVMTCAgICAgICAgICAgdGhlIGFyZ3VtZW50IGNvZGUgd2FzIE5VTEwKKyAgICAgICAgIFBDUkUyX0VSUk9SX0JBRE1BR0lDICAgICAgIHRoZSAibWFnaWMgbnVtYmVyIiB3YXMgbm90IGZvdW5kCisgICAgICAgICBQQ1JFMl9FUlJPUl9CQURPUFRJT04gICAgICB0aGUgdmFsdWUgb2Ygd2hhdCB3YXMgaW52YWxpZAorICAgICAgICAgUENSRTJfRVJST1JfVU5TRVQgICAgICAgICAgdGhlIHJlcXVlc3RlZCBmaWVsZCBpcyBub3Qgc2V0CisKKyAgICAgICBUaGUgIm1hZ2ljIG51bWJlciIgaXMgcGxhY2VkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNvbXBpbGVkICBwYXR0ZXJuICBhcworICAgICAgIGFuICBzaW1wbGUgY2hlY2sgYWdhaW5zdCBwYXNzaW5nIGFuIGFyYml0cmFyeSBtZW1vcnkgcG9pbnRlci4gSGVyZSBpcyBhCisgICAgICAgdHlwaWNhbCBjYWxsIG9mIHBjcmUyX3BhdHRlcm5faW5mbygpLCB0byBvYnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUgIGNvbS0KKyAgICAgICBwaWxlZCBwYXR0ZXJuOgorCisgICAgICAgICBpbnQgcmM7CisgICAgICAgICBzaXplX3QgbGVuZ3RoOworICAgICAgICAgcmMgPSBwY3JlMl9wYXR0ZXJuX2luZm8oCisgICAgICAgICAgIHJlLCAgICAgICAgICAgICAgIC8qIHJlc3VsdCBvZiBwY3JlMl9jb21waWxlKCkgKi8KKyAgICAgICAgICAgUENSRTJfSU5GT19TSVpFLCAgLyogd2hhdCBpcyByZXF1aXJlZCAqLworICAgICAgICAgICAmbGVuZ3RoKTsgICAgICAgICAvKiB3aGVyZSB0byBwdXQgdGhlIGRhdGEgKi8KKworICAgICAgIFRoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgYXJlIGRlZmluZWQgaW4gcGNyZTIuaCwgYW5kCisgICAgICAgYXJlIGFzIGZvbGxvd3M6CisKKyAgICAgICAgIFBDUkUyX0lORk9fQUxMT1BUSU9OUworICAgICAgICAgUENSRTJfSU5GT19BUkdPUFRJT05TCisKKyAgICAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBwYXR0ZXJuJ3Mgb3B0aW9ucy4gVGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBwb2ludAorICAgICAgIHRvICBhICB1aW50MzJfdCAgdmFyaWFibGUuICBQQ1JFMl9JTkZPX0FSR09QVElPTlMgIHJldHVybnMgIGV4YWN0bHkgdGhlCisgICAgICAgb3B0aW9ucyB0aGF0IHdlcmUgcGFzc2VkIHRvIHBjcmUyX2NvbXBpbGUoKSwgd2hlcmVhcyAgUENSRTJfSU5GT19BTExPUC0KKyAgICAgICBUSU9OUyAgcmV0dXJucyAgdGhlIGNvbXBpbGUgb3B0aW9ucyBhcyBtb2RpZmllZCBieSBhbnkgdG9wLWxldmVsIG9wdGlvbgorICAgICAgIHNldHRpbmdzIHN1Y2ggYXMgKCpVVEYpIGF0IHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiBpdHNlbGYuICBGb3IgIGV4YW0tCisgICAgICAgcGxlLCAgaWYgIHRoZSAgcGF0dGVybiAgLygqVVRGKWFiYy8gaXMgY29tcGlsZWQgd2l0aCB0aGUgUENSRTJfRVhURU5ERUQKKyAgICAgICBvcHRpb24sIHRoZSByZXN1bHQgaXMgUENSRTJfRVhURU5ERUQgYW5kIFBDUkUyX1VURi4KKworICAgICAgIEEgcGF0dGVybiBjb21waWxlZCB3aXRob3V0IFBDUkUyX0FOQ0hPUkVEIGlzIGF1dG9tYXRpY2FsbHkgYW5jaG9yZWQgIGJ5CisgICAgICAgUENSRTIgaWYgdGhlIGZpcnN0IHNpZ25pZmljYW50IGl0ZW0gaW4gZXZlcnkgdG9wLWxldmVsIGJyYW5jaCBpcyBvbmUgb2YKKyAgICAgICB0aGUgZm9sbG93aW5nOgorCisgICAgICAgICBeICAgICB1bmxlc3MgUENSRTJfTVVMVElMSU5FIGlzIHNldAorICAgICAgICAgXEEgICAgYWx3YXlzCisgICAgICAgICBcRyAgICBhbHdheXMKKyAgICAgICAgIC4qICAgIHNvbWV0aW1lcyAtIHNlZSBiZWxvdworCisgICAgICAgV2hlbiAuKiBpcyB0aGUgZmlyc3Qgc2lnbmlmaWNhbnQgaXRlbSwgYW5jaG9yaW5nIGlzIHBvc3NpYmxlIG9ubHkgIHdoZW4KKyAgICAgICBhbGwgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKworICAgICAgICAgLiogaXMgbm90IGluIGFuIGF0b21pYyBncm91cAorICAgICAgICAgLiogaXMgbm90IGluIGEgY2FwdHVyaW5nIGdyb3VwIHRoYXQgaXMgdGhlIHN1YmplY3QKKyAgICAgICAgICAgICAgb2YgYSBiYWNrIHJlZmVyZW5jZQorICAgICAgICAgUENSRTJfRE9UQUxMIGlzIGluIGZvcmNlIGZvciAuKgorICAgICAgICAgTmVpdGhlciAoKlBSVU5FKSBub3IgKCpTS0lQKSBhcHBlYXJzIGluIHRoZSBwYXR0ZXJuLgorICAgICAgICAgUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IgaXMgbm90IHNldC4KKworICAgICAgIEZvciAgcGF0dGVybnMgIHRoYXQgYXJlIGF1dG8tYW5jaG9yZWQsIHRoZSBQQ1JFMl9BTkNIT1JFRCBiaXQgaXMgc2V0IGluCisgICAgICAgdGhlIG9wdGlvbnMgcmV0dXJuZWQgZm9yIFBDUkUyX0lORk9fQUxMT1BUSU9OUy4KKworICAgICAgICAgUENSRTJfSU5GT19CQUNLUkVGTUFYCisKKyAgICAgICBSZXR1cm4gdGhlIG51bWJlciBvZiB0aGUgaGlnaGVzdCBiYWNrIHJlZmVyZW5jZSAgaW4gIHRoZSAgcGF0dGVybi4gIFRoZQorICAgICAgIHRoaXJkICBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gdWludDMyX3QgdmFyaWFibGUuIE5hbWVkIHN1YnBhdHRlcm5zCisgICAgICAgYWNxdWlyZSBudW1iZXJzIGFzIHdlbGwgYXMgbmFtZXMsIGFuZCB0aGVzZSBjb3VudCB0b3dhcmRzICB0aGUgIGhpZ2hlc3QKKyAgICAgICBiYWNrICByZWZlcmVuY2UuICAgQmFjayAgcmVmZXJlbmNlcyBzdWNoIGFzIFw0IG9yIFxnezEyfSBtYXRjaCB0aGUgY2FwLQorICAgICAgIHR1cmVkIGNoYXJhY3RlcnMgb2YgdGhlIGdpdmVuIGdyb3VwLCBidXQgaW4gYWRkaXRpb24sIHRoZSBjaGVjayB0aGF0ICBhCisgICAgICAgY2FwdHVyaW5nIGdyb3VwIGlzIHNldCBpbiBhIGNvbmRpdGlvbmFsIHN1YnBhdHRlcm4gc3VjaCBhcyAoPygzKWF8YikgaXMKKyAgICAgICBhbHNvIGEgYmFjayByZWZlcmVuY2UuIFplcm8gaXMgcmV0dXJuZWQgaWYgdGhlcmUgIGFyZSAgbm8gIGJhY2sgIHJlZmVyLQorICAgICAgIGVuY2VzLgorCisgICAgICAgICBQQ1JFMl9JTkZPX0JTUgorCisgICAgICAgVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IHdob3NlIHZhbHVlIGluZGljYXRlcyB3aGF0IGNoYXJhY3RlciBzZXF1ZW5jZXMKKyAgICAgICB0aGUgXFIgZXNjYXBlIHNlcXVlbmNlIG1hdGNoZXMuIEEgdmFsdWUgb2YgUENSRTJfQlNSX1VOSUNPREUgbWVhbnMgdGhhdAorICAgICAgIFxSICBtYXRjaGVzIGFueSBVbmljb2RlIGxpbmUgZW5kaW5nIHNlcXVlbmNlOyBhIHZhbHVlIG9mIFBDUkUyX0JTUl9BTlktCisgICAgICAgQ1JMRiBtZWFucyB0aGF0IFxSIG1hdGNoZXMgb25seSBDUiwgTEYsIG9yIENSTEYuCisKKyAgICAgICAgIFBDUkUyX0lORk9fQ0FQVFVSRUNPVU5UCisKKyAgICAgICBSZXR1cm4gdGhlIGhpZ2hlc3QgY2FwdHVyaW5nIHN1YnBhdHRlcm4gbnVtYmVyIGluIHRoZSBwYXR0ZXJuLiBJbiAgcGF0LQorICAgICAgIHRlcm5zIHdoZXJlICg/fCBpcyBub3QgdXNlZCwgdGhpcyBpcyBhbHNvIHRoZSB0b3RhbCBudW1iZXIgb2YgY2FwdHVyaW5nCisgICAgICAgc3VicGF0dGVybnMuICBUaGUgdGhpcmQgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIHVpbnQzMl90IHZhcmlhYmxlLgorCisgICAgICAgICBQQ1JFMl9JTkZPX0ZJUlNUQklUTUFQCisKKyAgICAgICBJbiB0aGUgYWJzZW5jZSBvZiBhIHNpbmdsZSBmaXJzdCBjb2RlIHVuaXQgZm9yIGEgbm9uLWFuY2hvcmVkICBwYXR0ZXJuLAorICAgICAgIHBjcmUyX2NvbXBpbGUoKSAgbWF5IGNvbnN0cnVjdCBhIDI1Ni1iaXQgdGFibGUgdGhhdCBkZWZpbmVzIGEgZml4ZWQgc2V0CisgICAgICAgb2YgdmFsdWVzIGZvciB0aGUgZmlyc3QgY29kZSB1bml0IGluIGFueSBtYXRjaC4gRm9yIGV4YW1wbGUsIGEgIHBhdHRlcm4KKyAgICAgICB0aGF0ICBzdGFydHMgIHdpdGggIFthYmNdICByZXN1bHRzIGluIGEgdGFibGUgd2l0aCB0aHJlZSBiaXRzIHNldC4gV2hlbgorICAgICAgIGNvZGUgdW5pdCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDI1NSBhcmUgc3VwcG9ydGVkLCB0aGUgZmxhZyBiaXQgIGZvciAgMjU1CisgICAgICAgbWVhbnMgICJhbnkgIGNvZGUgdW5pdCBvZiB2YWx1ZSAyNTUgb3IgYWJvdmUiLiBJZiBzdWNoIGEgdGFibGUgd2FzIGNvbi0KKyAgICAgICBzdHJ1Y3RlZCwgYSBwb2ludGVyIHRvIGl0IGlzIHJldHVybmVkLiBPdGhlcndpc2UgTlVMTCBpcyByZXR1cm5lZC4gIFRoZQorICAgICAgIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBjb25zdCB1aW50OF90ICogdmFyaWFibGUuCisKKyAgICAgICAgIFBDUkUyX0lORk9fRklSU1RDT0RFVFlQRQorCisgICAgICAgUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgYW55IG1hdGNoZWQgc3RyaW5nLCBmb3IKKyAgICAgICBhIG5vbi1hbmNob3JlZCBwYXR0ZXJuLiBUaGUgdGhpcmQgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuICB1aW50MzJfdAorICAgICAgIHZhcmlhYmxlLiAgSWYgdGhlcmUgaXMgYSBmaXhlZCBmaXJzdCB2YWx1ZSwgZm9yIGV4YW1wbGUsIHRoZSBsZXR0ZXIgImMiCisgICAgICAgZnJvbSBhIHBhdHRlcm4gc3VjaCBhcyAoY2F0fGNvd3xjb3lvdGUpLCAxIGlzIHJldHVybmVkLCBhbmQgdGhlIGNoYXJhYy0KKyAgICAgICB0ZXIgIHZhbHVlIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgUENSRTJfSU5GT19GSVJTVENPREVVTklULiBJZiB0aGVyZSBpcworICAgICAgIG5vIGZpeGVkIGZpcnN0IHZhbHVlLCBidXQgaXQgaXMga25vd24gdGhhdCBhIG1hdGNoIGNhbiAgb2NjdXIgIG9ubHkgIGF0CisgICAgICAgdGhlICBzdGFydCAgb2YgIHRoZSBzdWJqZWN0IG9yIGZvbGxvd2luZyBhIG5ld2xpbmUgaW4gdGhlIHN1YmplY3QsIDIgaXMKKyAgICAgICByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhbmQgZm9yIGFuY2hvcmVkIHBhdHRlcm5zLCAwIGlzIHJldHVybmVkLgorCisgICAgICAgICBQQ1JFMl9JTkZPX0ZJUlNUQ09ERVVOSVQKKworICAgICAgIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGNvZGUgdW5pdCBvZiBhbnkgbWF0Y2hlZCAgc3RyaW5nICBpbiAgdGhlCisgICAgICAgc2l0dWF0aW9uIHdoZXJlIFBDUkUyX0lORk9fRklSU1RDT0RFVFlQRSByZXR1cm5zIDE7IG90aGVyd2lzZSByZXR1cm4gMC4KKyAgICAgICBUaGUgdGhpcmQgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIHVpbnQzMl90IHZhcmlhYmxlLiBJbiAgdGhlICA4LWJpdAorICAgICAgIGxpYnJhcnksICB0aGUgIHZhbHVlIGlzIGFsd2F5cyBsZXNzIHRoYW4gMjU2LiBJbiB0aGUgMTYtYml0IGxpYnJhcnkgdGhlCisgICAgICAgdmFsdWUgY2FuIGJlIHVwIHRvIDB4ZmZmZi4gSW4gdGhlIDMyLWJpdCBsaWJyYXJ5ICBpbiAgVVRGLTMyICBtb2RlICB0aGUKKyAgICAgICB2YWx1ZSBjYW4gYmUgdXAgdG8gMHgxMGZmZmYsIGFuZCB1cCB0byAweGZmZmZmZmZmIHdoZW4gbm90IHVzaW5nIFVURi0zMgorICAgICAgIG1vZGUuCisKKyAgICAgICAgIFBDUkUyX0lORk9fSEFTQkFDS1NMQVNIQworCisgICAgICAgUmV0dXJuIDEgaWYgdGhlIHBhdHRlcm4gY29udGFpbnMgYW55IGluc3RhbmNlcyBvZiBcQywgb3RoZXJ3aXNlIDAuICBUaGUKKyAgICAgICB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gdWludDMyX3QgdmFyaWFibGUuCisKKyAgICAgICAgIFBDUkUyX0lORk9fSEFTQ1JPUkxGCisKKyAgICAgICBSZXR1cm4gIDEgIGlmICB0aGUgIHBhdHRlcm4gIGNvbnRhaW5zIGFueSBleHBsaWNpdCBtYXRjaGVzIGZvciBDUiBvciBMRgorICAgICAgIGNoYXJhY3RlcnMsIG90aGVyd2lzZSAwLiBUaGUgdGhpcmQgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIHVpbnQzMl90CisgICAgICAgdmFyaWFibGUuICBBbiBleHBsaWNpdCBtYXRjaCBpcyBlaXRoZXIgYSBsaXRlcmFsIENSIG9yIExGIGNoYXJhY3Rlciwgb3IKKyAgICAgICBcciBvciBcbi4KKworICAgICAgICAgUENSRTJfSU5GT19KQ0hBTkdFRAorCisgICAgICAgUmV0dXJuIDEgaWYgdGhlICg/Sikgb3IgKD8tSikgb3B0aW9uIHNldHRpbmcgaXMgdXNlZCAgaW4gIHRoZSAgcGF0dGVybiwKKyAgICAgICBvdGhlcndpc2UgIDAuICBUaGUgdGhpcmQgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIHVpbnQzMl90IHZhcmlhYmxlLgorICAgICAgICg/SikgYW5kICg/LUopIHNldCBhbmQgdW5zZXQgdGhlIGxvY2FsIFBDUkUyX0RVUE5BTUVTICBvcHRpb24sICByZXNwZWMtCisgICAgICAgdGl2ZWx5LgorCisgICAgICAgICBQQ1JFMl9JTkZPX0pJVFNJWkUKKworICAgICAgIElmICB0aGUgIGNvbXBpbGVkICBwYXR0ZXJuIHdhcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGJ5IHBjcmUyX2ppdF9jb20tCisgICAgICAgcGlsZSgpLCByZXR1cm4gdGhlIHNpemUgb2YgdGhlICBKSVQgIGNvbXBpbGVkICBjb2RlLCAgb3RoZXJ3aXNlICByZXR1cm4KKyAgICAgICB6ZXJvLiBUaGUgdGhpcmQgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGEgc2l6ZV90IHZhcmlhYmxlLgorCisgICAgICAgICBQQ1JFMl9JTkZPX0xBU1RDT0RFVFlQRQorCisgICAgICAgUmV0dXJucyAgMSBpZiB0aGVyZSBpcyBhIHJpZ2h0bW9zdCBsaXRlcmFsIGNvZGUgdW5pdCB0aGF0IG11c3QgZXhpc3QgaW4KKyAgICAgICBhbnkgbWF0Y2hlZCBzdHJpbmcsIG90aGVyIHRoYW4gYXQgaXRzIHN0YXJ0LiBUaGUgdGhpcmQgYXJndW1lbnQgIHNob3VsZAorICAgICAgIHBvaW50ICB0byAgYW4gIHVpbnQzMl90ICB2YXJpYWJsZS4gIElmICB0aGVyZSAgaXMgIG5vICBzdWNoIHZhbHVlLCAwIGlzCisgICAgICAgcmV0dXJuZWQuIFdoZW4gMSBpcyAgcmV0dXJuZWQsICB0aGUgIGNvZGUgIHVuaXQgIHZhbHVlICBpdHNlbGYgIGNhbiAgYmUKKyAgICAgICByZXRyaWV2ZWQgIHVzaW5nIFBDUkUyX0lORk9fTEFTVENPREVVTklULiBGb3IgYW5jaG9yZWQgcGF0dGVybnMsIGEgbGFzdAorICAgICAgIGxpdGVyYWwgdmFsdWUgaXMgcmVjb3JkZWQgb25seSBpZiAgaXQgIGZvbGxvd3MgIHNvbWV0aGluZyAgb2YgIHZhcmlhYmxlCisgICAgICAgbGVuZ3RoLiAgRm9yIGV4YW1wbGUsIGZvciB0aGUgcGF0dGVybiAvXmFcZCt6XGQrLyB0aGUgcmV0dXJuZWQgdmFsdWUgaXMKKyAgICAgICAxICh3aXRoICJ6IiByZXR1cm5lZCBmcm9tIFBDUkUyX0lORk9fTEFTVENPREVVTklUKSwgYnV0ICBmb3IgIC9eYVxkelxkLworICAgICAgIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyAwLgorCisgICAgICAgICBQQ1JFMl9JTkZPX0xBU1RDT0RFVU5JVAorCisgICAgICAgUmV0dXJuICB0aGUgdmFsdWUgb2YgdGhlIHJpZ2h0bW9zdCBsaXRlcmFsIGRhdGEgdW5pdCB0aGF0IG11c3QgZXhpc3QgaW4KKyAgICAgICBhbnkgbWF0Y2hlZCBzdHJpbmcsIG90aGVyIHRoYW4gYXQgaXRzIHN0YXJ0LCBpZiBzdWNoIGEgdmFsdWUgIGhhcyAgYmVlbgorICAgICAgIHJlY29yZGVkLiAgVGhlICB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gdWludDMyX3QgdmFyaWFibGUuIElmCisgICAgICAgdGhlcmUgaXMgbm8gc3VjaCB2YWx1ZSwgMCBpcyByZXR1cm5lZC4KKworICAgICAgICAgUENSRTJfSU5GT19NQVRDSEVNUFRZCisKKyAgICAgICBSZXR1cm4gMSBpZiB0aGUgcGF0dGVybiBtaWdodCBtYXRjaCBhbiBlbXB0eSBzdHJpbmcsIG90aGVyd2lzZSAgMC4gIFRoZQorICAgICAgIHRoaXJkICBhcmd1bWVudCAgc2hvdWxkICBwb2ludCAgdG8gYW4gdWludDMyX3QgdmFyaWFibGUuIFdoZW4gYSBwYXR0ZXJuCisgICAgICAgY29udGFpbnMgcmVjdXJzaXZlIHN1YnJvdXRpbmUgY2FsbHMgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBkZXRlci0KKyAgICAgICBtaW5lICB3aGV0aGVyICBvciAgbm90IGl0IGNhbiBtYXRjaCBhbiBlbXB0eSBzdHJpbmcuIFBDUkUyIHRha2VzIGEgY2F1LQorICAgICAgIHRpb3VzIGFwcHJvYWNoIGFuZCByZXR1cm5zIDEgaW4gc3VjaCBjYXNlcy4KKworICAgICAgICAgUENSRTJfSU5GT19NQVRDSExJTUlUCisKKyAgICAgICBJZiB0aGUgcGF0dGVybiBzZXQgYSBtYXRjaCBsaW1pdCBieSAgaW5jbHVkaW5nICBhbiAgaXRlbSAgb2YgIHRoZSAgZm9ybQorICAgICAgICgqTElNSVRfTUFUQ0g9bm5ubikgIGF0ICB0aGUgIHN0YXJ0LCAgdGhlICB2YWx1ZSBpcyByZXR1cm5lZC4gVGhlIHRoaXJkCisgICAgICAgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLiBJZiBubyAgc3VjaCAgdmFsdWUKKyAgICAgICBoYXMgIGJlZW4gIHNldCwgIHRoZSAgY2FsbCAgdG8gIHBjcmUyX3BhdHRlcm5faW5mbygpICByZXR1cm5zIHRoZSBlcnJvcgorICAgICAgIFBDUkUyX0VSUk9SX1VOU0VULgorCisgICAgICAgICBQQ1JFMl9JTkZPX01BWExPT0tCRUhJTkQKKworICAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKG5vdCBjb2RlIHVuaXRzKSBpbiB0aGUgbG9uZ2VzdCBsb29rYmUtCisgICAgICAgaGluZCAgYXNzZXJ0aW9uICBpbiAgdGhlIHBhdHRlcm4uIFRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4KKyAgICAgICB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlci4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VmdWwgd2hlbiAgZG9pbmcgIG11bHRpLQorICAgICAgIHNlZ21lbnQgIG1hdGNoaW5nICB1c2luZyB0aGUgcGFydGlhbCBtYXRjaGluZyBmYWNpbGl0aWVzLiBOb3RlIHRoYXQgdGhlCisgICAgICAgc2ltcGxlIGFzc2VydGlvbnMgXGIgYW5kIFxCIHJlcXVpcmUgYSBvbmUtY2hhcmFjdGVyIGxvb2tiZWhpbmQuIFxBIGFsc28KKyAgICAgICByZWdpc3RlcnMgIGEgIG9uZS1jaGFyYWN0ZXIgIGxvb2tiZWhpbmQsICB0aG91Z2ggIGl0ICBkb2VzIG5vdCBhY3R1YWxseQorICAgICAgIGluc3BlY3QgdGhlIHByZXZpb3VzIGNoYXJhY3Rlci4gVGhpcyBpcyB0byBlbnN1cmUgIHRoYXQgIGF0ICBsZWFzdCAgb25lCisgICAgICAgY2hhcmFjdGVyICBmcm9tICB0aGUgb2xkIHNlZ21lbnQgaXMgcmV0YWluZWQgd2hlbiBhIG5ldyBzZWdtZW50IGlzIHByby0KKyAgICAgICBjZXNzZWQuIE90aGVyd2lzZSwgaWYgdGhlcmUgYXJlIG5vIGxvb2tiZWhpbmRzIGluIHRoZSBwYXR0ZXJuLCBcQSBtaWdodAorICAgICAgIG1hdGNoIGluY29ycmVjdGx5IGF0IHRoZSBzdGFydCBvZiBhIG5ldyBzZWdtZW50LgorCisgICAgICAgICBQQ1JFMl9JTkZPX01JTkxFTkdUSAorCisgICAgICAgSWYgIGEgIG1pbmltdW0gIGxlbmd0aCAgZm9yICBtYXRjaGluZyBzdWJqZWN0IHN0cmluZ3Mgd2FzIGNvbXB1dGVkLCBpdHMKKyAgICAgICB2YWx1ZSBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyAwLiBUaGUgIHZhbHVlICBpcyAgYQorICAgICAgIG51bWJlciAgb2YgY2hhcmFjdGVycywgd2hpY2ggaW4gVVRGIG1vZGUgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBudW0tCisgICAgICAgYmVyIG9mIGNvZGUgdW5pdHMuICBUaGUgdGhpcmQgYXJndW1lbnQgIHNob3VsZCAgcG9pbnQgIHRvICBhbiAgdWludDMyX3QKKyAgICAgICB2YXJpYWJsZS4gIFRoZSAgdmFsdWUgIGlzICBhICBsb3dlciBib3VuZCB0byB0aGUgbGVuZ3RoIG9mIGFueSBtYXRjaGluZworICAgICAgIHN0cmluZy4gVGhlcmUgbWF5IG5vdCBiZSBhbnkgc3RyaW5ncyBvZiB0aGF0IGxlbmd0aCAgdGhhdCAgZG8gIGFjdHVhbGx5CisgICAgICAgbWF0Y2gsIGJ1dCBldmVyeSBzdHJpbmcgdGhhdCBkb2VzIG1hdGNoIGlzIGF0IGxlYXN0IHRoYXQgbG9uZy4KKworICAgICAgICAgUENSRTJfSU5GT19OQU1FQ09VTlQKKyAgICAgICAgIFBDUkUyX0lORk9fTkFNRUVOVFJZU0laRQorICAgICAgICAgUENSRTJfSU5GT19OQU1FVEFCTEUKKworICAgICAgIFBDUkUyIHN1cHBvcnRzIHRoZSB1c2Ugb2YgbmFtZWQgYXMgd2VsbCBhcyBudW1iZXJlZCBjYXB0dXJpbmcgcGFyZW50aGUtCisgICAgICAgc2VzLiBUaGUgbmFtZXMgYXJlIGp1c3QgYW4gYWRkaXRpb25hbCB3YXkgb2YgaWRlbnRpZnlpbmcgdGhlICBwYXJlbnRoZS0KKyAgICAgICBzZXMsIHdoaWNoIHN0aWxsIGFjcXVpcmUgbnVtYmVycy4gU2V2ZXJhbCBjb252ZW5pZW5jZSBmdW5jdGlvbnMgc3VjaCBhcworICAgICAgIHBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lKCkgYXJlIHByb3ZpZGVkIGZvciBleHRyYWN0aW5nIGNhcHR1cmVkICBzdWItCisgICAgICAgc3RyaW5ncyAgYnkgIG5hbWUuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gZXh0cmFjdCB0aGUgZGF0YSBkaXJlY3RseSwgYnkKKyAgICAgICBmaXJzdCBjb252ZXJ0aW5nIHRoZSBuYW1lIHRvIGEgbnVtYmVyIGluIG9yZGVyIHRvICBhY2Nlc3MgIHRoZSAgY29ycmVjdAorICAgICAgIHBvaW50ZXJzICBpbiB0aGUgb3V0cHV0IHZlY3RvciAoZGVzY3JpYmVkIHdpdGggcGNyZTJfbWF0Y2goKSBiZWxvdykuIFRvCisgICAgICAgZG8gdGhlIGNvbnZlcnNpb24sIHlvdSBuZWVkIHRvIHVzZSB0aGUgIG5hbWUtdG8tbnVtYmVyICBtYXAsICB3aGljaCAgaXMKKyAgICAgICBkZXNjcmliZWQgYnkgdGhlc2UgdGhyZWUgdmFsdWVzLgorCisgICAgICAgVGhlICBtYXAgIGNvbnNpc3RzICBvZiBhIG51bWJlciBvZiBmaXhlZC1zaXplIGVudHJpZXMuIFBDUkUyX0lORk9fTkFNRS0KKyAgICAgICBDT1VOVCBnaXZlcyB0aGUgbnVtYmVyIG9mIGVudHJpZXMsIGFuZCAgUENSRTJfSU5GT19OQU1FRU5UUllTSVpFICBnaXZlcworICAgICAgIHRoZSAgc2l6ZSAgb2YgZWFjaCBlbnRyeSBpbiBjb2RlIHVuaXRzOyBib3RoIG9mIHRoZXNlIHJldHVybiBhIHVpbnQzMl90CisgICAgICAgdmFsdWUuIFRoZSBlbnRyeSBzaXplIGRlcGVuZHMgb24gdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBuYW1lLgorCisgICAgICAgUENSRTJfSU5GT19OQU1FVEFCTEUgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSB0YWJsZS4KKyAgICAgICBUaGlzICBpcyAgYSAgUENSRTJfU1BUUiAgcG9pbnRlciB0byBhIGJsb2NrIG9mIGNvZGUgdW5pdHMuIEluIHRoZSA4LWJpdAorICAgICAgIGxpYnJhcnksIHRoZSBmaXJzdCB0d28gYnl0ZXMgb2YgZWFjaCBlbnRyeSBhcmUgdGhlIG51bWJlciBvZiAgdGhlICBjYXAtCisgICAgICAgdHVyaW5nIHBhcmVudGhlc2lzLCBtb3N0IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QuIEluIHRoZSAxNi1iaXQgbGlicmFyeSwKKyAgICAgICB0aGUgcG9pbnRlciBwb2ludHMgdG8gMTYtYml0IGNvZGUgdW5pdHMsIHRoZSBmaXJzdCAgb2YgIHdoaWNoICBjb250YWlucworICAgICAgIHRoZSAgcGFyZW50aGVzaXMgIG51bWJlci4gIEluIHRoZSAzMi1iaXQgbGlicmFyeSwgdGhlIHBvaW50ZXIgcG9pbnRzIHRvCisgICAgICAgMzItYml0IGNvZGUgdW5pdHMsIHRoZSBmaXJzdCBvZiB3aGljaCBjb250YWlucyB0aGUgcGFyZW50aGVzaXMgIG51bWJlci4KKyAgICAgICBUaGUgcmVzdCBvZiB0aGUgZW50cnkgaXMgdGhlIGNvcnJlc3BvbmRpbmcgbmFtZSwgemVybyB0ZXJtaW5hdGVkLgorCisgICAgICAgVGhlICBuYW1lcyBhcmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLiBJZiAoP3wgaXMgdXNlZCB0byBjcmVhdGUgbXVsdGlwbGUKKyAgICAgICBncm91cHMgd2l0aCB0aGUgc2FtZSBudW1iZXIsIGFzIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiAgb24gIGR1cGxpY2F0ZQorICAgICAgIHN1YnBhdHRlcm4gIG51bWJlcnMgIGluICB0aGUgcGNyZTJwYXR0ZXJuIHBhZ2UsIHRoZSBncm91cHMgbWF5IGJlIGdpdmVuCisgICAgICAgdGhlIHNhbWUgbmFtZSwgYnV0IHRoZXJlIGlzIG9ubHkgb25lICBlbnRyeSAgaW4gIHRoZSAgdGFibGUuICBEaWZmZXJlbnQKKyAgICAgICBuYW1lcyBmb3IgZ3JvdXBzIG9mIHRoZSBzYW1lIG51bWJlciBhcmUgbm90IHBlcm1pdHRlZC4KKworICAgICAgIER1cGxpY2F0ZSAgbmFtZXMgIGZvciBzdWJwYXR0ZXJucyB3aXRoIGRpZmZlcmVudCBudW1iZXJzIGFyZSBwZXJtaXR0ZWQsCisgICAgICAgYnV0IG9ubHkgaWYgUENSRTJfRFVQTkFNRVMgaXMgc2V0LiBUaGV5IGFwcGVhciAgaW4gIHRoZSAgdGFibGUgIGluICB0aGUKKyAgICAgICBvcmRlciAgaW4gIHdoaWNoICB0aGV5IHdlcmUgZm91bmQgaW4gdGhlIHBhdHRlcm4uIEluIHRoZSBhYnNlbmNlIG9mICg/fAorICAgICAgIHRoaXMgaXMgdGhlIG9yZGVyIG9mIGluY3JlYXNpbmcgbnVtYmVyOyB3aGVuICg/fCBpcyB1c2VkICB0aGlzICBpcyAgbm90CisgICAgICAgbmVjZXNzYXJpbHkgdGhlIGNhc2UgYmVjYXVzZSBsYXRlciBzdWJwYXR0ZXJucyBtYXkgaGF2ZSBsb3dlciBudW1iZXJzLgorCisgICAgICAgQXMgIGEgIHNpbXBsZSAgZXhhbXBsZSBvZiB0aGUgbmFtZS9udW1iZXIgdGFibGUsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcKKyAgICAgICBwYXR0ZXJuIGFmdGVyIGNvbXBpbGF0aW9uIGJ5IHRoZSA4LWJpdCBsaWJyYXJ5ICAoYXNzdW1lICBQQ1JFMl9FWFRFTkRFRAorICAgICAgIGlzIHNldCwgc28gd2hpdGUgc3BhY2UgLSBpbmNsdWRpbmcgbmV3bGluZXMgLSBpcyBpZ25vcmVkKToKKworICAgICAgICAgKD88ZGF0ZT4gKD88eWVhcj4oXGRcZCk/XGRcZCkgLQorICAgICAgICAgKD88bW9udGg+XGRcZCkgLSAoPzxkYXk+XGRcZCkgKQorCisgICAgICAgVGhlcmUgIGFyZSAgZm91ciAgbmFtZWQgc3VicGF0dGVybnMsIHNvIHRoZSB0YWJsZSBoYXMgZm91ciBlbnRyaWVzLCBhbmQKKyAgICAgICBlYWNoIGVudHJ5IGluIHRoZSB0YWJsZSBpcyBlaWdodCBieXRlcyBsb25nLiBUaGUgdGFibGUgaXMgIGFzICBmb2xsb3dzLAorICAgICAgIHdpdGggbm9uLXByaW50aW5nIGJ5dGVzIHNob3dzIGluIGhleGFkZWNpbWFsLCBhbmQgdW5kZWZpbmVkIGJ5dGVzIHNob3duCisgICAgICAgYXMgPz86CisKKyAgICAgICAgIDAwIDAxIGQgIGEgIHQgIGUgIDAwID8/CisgICAgICAgICAwMCAwNSBkICBhICB5ICAwMCA/PyA/PworICAgICAgICAgMDAgMDQgbSAgbyAgbiAgdCAgaCAgMDAKKyAgICAgICAgIDAwIDAyIHkgIGUgIGEgIHIgIDAwID8/CisKKyAgICAgICBXaGVuIHdyaXRpbmcgY29kZSB0byBleHRyYWN0IGRhdGEgIGZyb20gIG5hbWVkICBzdWJwYXR0ZXJucyAgdXNpbmcgIHRoZQorICAgICAgIG5hbWUtdG8tbnVtYmVyICBtYXAsICByZW1lbWJlciB0aGF0IHRoZSBsZW5ndGggb2YgdGhlIGVudHJpZXMgaXMgbGlrZWx5CisgICAgICAgdG8gYmUgZGlmZmVyZW50IGZvciBlYWNoIGNvbXBpbGVkIHBhdHRlcm4uCisKKyAgICAgICAgIFBDUkUyX0lORk9fTkVXTElORQorCisgICAgICAgVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgICAgICAgICBQQ1JFMl9ORVdMSU5FX0NSICAgICAgIENhcnJpYWdlIHJldHVybiAoQ1IpCisgICAgICAgICBQQ1JFMl9ORVdMSU5FX0xGICAgICAgIExpbmVmZWVkIChMRikKKyAgICAgICAgIFBDUkUyX05FV0xJTkVfQ1JMRiAgICAgQ2FycmlhZ2UgcmV0dXJuLCBsaW5lZmVlZCAoQ1JMRikKKyAgICAgICAgIFBDUkUyX05FV0xJTkVfQU5ZICAgICAgQW55IFVuaWNvZGUgbGluZSBlbmRpbmcKKyAgICAgICAgIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRiAgQW55IG9mIENSLCBMRiwgb3IgQ1JMRgorCisgICAgICAgVGhpcyBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgY2hhcmFjdGVyIHNlcXVlbmNlIHRoYXQgd2lsbCAgYmUgIHJlY29nbml6ZWQKKyAgICAgICBhcyBtZWFuaW5nICJuZXdsaW5lIiB3aGlsZSBtYXRjaGluZy4KKworICAgICAgICAgUENSRTJfSU5GT19SRUNVUlNJT05MSU1JVAorCisgICAgICAgSWYgIHRoZSAgcGF0dGVybiBzZXQgYSByZWN1cnNpb24gbGltaXQgYnkgaW5jbHVkaW5nIGFuIGl0ZW0gb2YgdGhlIGZvcm0KKyAgICAgICAoKkxJTUlUX1JFQ1VSU0lPTj1ubm5uKSBhdCB0aGUgc3RhcnQsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZC4gVGhlICB0aGlyZAorICAgICAgIGFyZ3VtZW50ICBzaG91bGQgIHBvaW50IHRvIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlCisgICAgICAgaGFzIGJlZW4gc2V0LCAgdGhlICBjYWxsICB0byAgcGNyZTJfcGF0dGVybl9pbmZvKCkgIHJldHVybnMgIHRoZSAgZXJyb3IKKyAgICAgICBQQ1JFMl9FUlJPUl9VTlNFVC4KKworICAgICAgICAgUENSRTJfSU5GT19TSVpFCisKKyAgICAgICBSZXR1cm4gIHRoZSAgc2l6ZSAgb2YgIHRoZSAgY29tcGlsZWQgIHBhdHRlcm4gIGluICBieXRlcyAoZm9yIGFsbCB0aHJlZQorICAgICAgIGxpYnJhcmllcykuIFRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSBzaXplX3QgdmFyaWFibGUuICBUaGlzCisgICAgICAgdmFsdWUgIGluY2x1ZGVzICB0aGUgIHNpemUgIG9mIHRoZSBnZW5lcmFsIGRhdGEgYmxvY2sgdGhhdCBwcmVjZWRlcyB0aGUKKyAgICAgICBjb2RlIHVuaXRzIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuIGl0c2VsZi4gVGhlIHZhbHVlIHRoYXQgaXMgdXNlZCAgd2hlbgorICAgICAgIHBjcmUyX2NvbXBpbGUoKSAgaXMgIGdldHRpbmcgbWVtb3J5IGluIHdoaWNoIHRvIHBsYWNlIHRoZSBjb21waWxlZCBwYXQtCisgICAgICAgdGVybiBtYXkgYmUgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlIHZhbHVlICByZXR1cm5lZCAgYnkgIHRoaXMgIG9wdGlvbiwKKyAgICAgICBiZWNhdXNlICB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIGNvZGUgdGhhdCBjYWxjdWxhdGVzIHRoZSBzaXplIGhhcyB0bworICAgICAgIG92ZXItZXN0aW1hdGUuIFByb2Nlc3NpbmcgYSBwYXR0ZXJuIHdpdGggIHRoZSAgSklUICBjb21waWxlciAgZG9lcyAgbm90CisgICAgICAgYWx0ZXIgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgb3B0aW9uLgorCisKK0lORk9STUFUSU9OIEFCT1VUIEEgUEFUVEVSTidTIENBTExPVVRTCisKKyAgICAgICBpbnQgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUoY29uc3QgcGNyZTJfY29kZSAqY29kZSwKKyAgICAgICAgIGludCAoKmNhbGxiYWNrKShwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9jayAqLCB2b2lkICopLAorICAgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworICAgICAgIEEgc2NyaXB0IGxhbmd1YWdlIHRoYXQgc3VwcG9ydHMgdGhlIHVzZSBvZiBzdHJpbmcgYXJndW1lbnRzIGluIGNhbGxvdXRzCisgICAgICAgbWlnaHQgbGlrZSB0byBzY2FuIGFsbCB0aGUgY2FsbG91dHMgaW4gYSAgcGF0dGVybiAgYmVmb3JlICBydW5uaW5nICB0aGUKKyAgICAgICBtYXRjaC4gVGhpcyBjYW4gYmUgZG9uZSBieSBjYWxsaW5nIHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKCkuIFRoZSBmaXJzdAorICAgICAgIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhIGNvbXBpbGVkIHBhdHRlcm4sIHRoZSAgc2Vjb25kICBwb2ludHMgIHRvICBhCisgICAgICAgY2FsbGJhY2sgIGZ1bmN0aW9uLCAgYW5kIHRoZSB0aGlyZCBpcyBhcmJpdHJhcnkgdXNlciBkYXRhLiBUaGUgY2FsbGJhY2sKKyAgICAgICBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGV2ZXJ5IGNhbGxvdXQgaW4gdGhlIHBhdHRlcm4gIGluICB0aGUgIG9yZGVyICBpbgorICAgICAgIHdoaWNoIHRoZXkgYXBwZWFyLiBJdHMgZmlyc3QgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIGEgY2FsbG91dCBlbnVtZXItCisgICAgICAgYXRpb24gYmxvY2ssIGFuZCBpdHMgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSB1c2VyX2RhdGEgIHZhbHVlICB0aGF0ICB3YXMKKyAgICAgICBwYXNzZWQgIHRvICBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSgpLiBUaGUgY29udGVudHMgb2YgdGhlIGNhbGxvdXQgZW51LQorICAgICAgIG1lcmF0aW9uIGJsb2NrIGFyZSBkZXNjcmliZWQgaW4gdGhlIHBjcmUyY2FsbG91dCAgZG9jdW1lbnRhdGlvbiwgIHdoaWNoCisgICAgICAgYWxzbyBnaXZlcyBmdXJ0aGVyIGRldGFpbHMgYWJvdXQgY2FsbG91dHMuCisKKworU0VSSUFMSVpBVElPTiBBTkQgUFJFQ09NUElMSU5HCisKKyAgICAgICBJdCAgaXMgIHBvc3NpYmxlICB0byAgc2F2ZSAgY29tcGlsZWQgcGF0dGVybnMgb24gZGlzYyBvciBlbHNld2hlcmUsIGFuZAorICAgICAgIHJlbG9hZCB0aGVtIGxhdGVyLCBzdWJqZWN0IHRvIGEgbnVtYmVyIG9mIHJlc3RyaWN0aW9ucy4gIFRoZSAgZnVuY3Rpb25zCisgICAgICAgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCBwY3JlMl9zZXJpYWxpemVfIGFyZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIFRoZXkKKyAgICAgICBhcmUgZGVzY3JpYmVkIGluIHRoZSBwY3JlMnNlcmlhbGl6ZSBkb2N1bWVudGF0aW9uLgorCisKK1RIRSBNQVRDSCBEQVRBIEJMT0NLCisKKyAgICAgICBwY3JlMl9tYXRjaF9kYXRhICpwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSh1aW50MzJfdCBvdmVjc2l6ZSwKKyAgICAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpOworCisgICAgICAgcGNyZTJfbWF0Y2hfZGF0YSAqcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuKAorICAgICAgICAgY29uc3QgcGNyZTJfY29kZSAqY29kZSwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCk7CisKKyAgICAgICB2b2lkIHBjcmUyX21hdGNoX2RhdGFfZnJlZShwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhKTsKKworICAgICAgIEluZm9ybWF0aW9uIGFib3V0IGEgc3VjY2Vzc2Z1bCBvciB1bnN1Y2Nlc3NmdWwgbWF0Y2ggIGlzICBwbGFjZWQgIGluICBhCisgICAgICAgbWF0Y2ggIGRhdGEgIGJsb2NrLCAgd2hpY2ggIGlzICBhbiBvcGFxdWUgc3RydWN0dXJlIHRoYXQgaXMgYWNjZXNzZWQgYnkKKyAgICAgICBmdW5jdGlvbiBjYWxscy4gSW4gcGFydGljdWxhciwgdGhlIG1hdGNoIGRhdGEgYmxvY2sgY29udGFpbnMgIGEgIHZlY3RvcgorICAgICAgIG9mICBvZmZzZXRzIGludG8gdGhlIHN1YmplY3Qgc3RyaW5nIHRoYXQgZGVmaW5lIHRoZSBtYXRjaGVkIHBhcnQgb2YgdGhlCisgICAgICAgc3ViamVjdCBhbmQgYW55IHN1YnN0cmluZ3MgdGhhdCB3ZXJlIGNhcHR1cmVkLiAgVGhpcyAgaXMgIGtub3cgIGFzICB0aGUKKyAgICAgICBvdmVjdG9yLgorCisgICAgICAgQmVmb3JlICBjYWxsaW5nICBwY3JlMl9tYXRjaCgpLCBwY3JlMl9kZmFfbWF0Y2goKSwgb3IgcGNyZTJfaml0X21hdGNoKCkKKyAgICAgICB5b3UgbXVzdCBjcmVhdGUgYSBtYXRjaCBkYXRhIGJsb2NrIGJ5IGNhbGxpbmcgb25lIG9mIHRoZSBjcmVhdGlvbiBmdW5jLQorICAgICAgIHRpb25zICBhYm92ZS4gIEZvciBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSgpLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlCisgICAgICAgbnVtYmVyIG9mIHBhaXJzIG9mIG9mZnNldHMgaW4gdGhlICBvdmVjdG9yLiAgT25lICBwYWlyICBvZiAgb2Zmc2V0cyAgaXMKKyAgICAgICByZXF1aXJlZCAgdG8gIGlkZW50aWZ5ICB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlZCB0aGUgd2hvbGUgcGF0dGVybiwgd2l0aAorICAgICAgIGFub3RoZXIgcGFpciBmb3IgZWFjaCBjYXB0dXJlZCBzdWJzdHJpbmcuIEZvciBleGFtcGxlLCAgYSAgdmFsdWUgIG9mICA0CisgICAgICAgY3JlYXRlcyAgZW5vdWdoIHNwYWNlIHRvIHJlY29yZCB0aGUgbWF0Y2hlZCBwb3J0aW9uIG9mIHRoZSBzdWJqZWN0IHBsdXMKKyAgICAgICB0aHJlZSBjYXB0dXJlZCBzdWJzdHJpbmdzLiBBIG1pbmltdW0gb2YgYXQgbGVhc3QgMSBwYWlyIGlzICBpbXBvc2VkICBieQorICAgICAgIHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKCksIHNvIGl0IGlzIGFsd2F5cyBwb3NzaWJsZSB0byByZXR1cm4gdGhlIG92ZXItCisgICAgICAgYWxsIG1hdGNoZWQgc3RyaW5nLgorCisgICAgICAgVGhlIHNlY29uZCBhcmd1bWVudCBvZiBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSgpIGlzIGEgcG9pbnRlciB0byBhIGdlbi0KKyAgICAgICBlcmFsICBjb250ZXh0LCB3aGljaCBjYW4gc3BlY2lmeSBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgZm9yIG9idGFpbmluZworICAgICAgIHRoZSBtZW1vcnkgZm9yIHRoZSBtYXRjaCBkYXRhIGJsb2NrLiBJZiB5b3UgYXJlIG5vdCB1c2luZyBjdXN0b20gbWVtb3J5CisgICAgICAgbWFuYWdlbWVudCwgcGFzcyBOVUxMLCB3aGljaCBjYXVzZXMgbWFsbG9jKCkgdG8gYmUgdXNlZC4KKworICAgICAgIEZvciAgcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuKCksICB0aGUgIGZpcnN0ICBhcmd1bWVudCBpcyBhCisgICAgICAgcG9pbnRlciB0byBhIGNvbXBpbGVkIHBhdHRlcm4uIFRoZSBvdmVjdG9yIGlzIGNyZWF0ZWQgdG8gYmUgZXhhY3RseSB0aGUKKyAgICAgICByaWdodCBzaXplIHRvIGhvbGQgYWxsIHRoZSBzdWJzdHJpbmdzIGEgcGF0dGVybiBtaWdodCBjYXB0dXJlLiBUaGUgc2VjLQorICAgICAgIG9uZCBhcmd1bWVudCBpcyBhZ2FpbiBhIHBvaW50ZXIgdG8gYSBnZW5lcmFsIGNvbnRleHQsIGJ1dCBpbiB0aGlzICBjYXNlCisgICAgICAgaWYgTlVMTCBpcyBwYXNzZWQsIHRoZSBtZW1vcnkgaXMgb2J0YWluZWQgdXNpbmcgdGhlIHNhbWUgYWxsb2NhdG9yIHRoYXQKKyAgICAgICB3YXMgdXNlZCBmb3IgdGhlIGNvbXBpbGVkIHBhdHRlcm4gKGN1c3RvbSBvciBkZWZhdWx0KS4KKworICAgICAgIEEgbWF0Y2ggZGF0YSBibG9jayBjYW4gYmUgdXNlZCBtYW55IHRpbWVzLCB3aXRoIHRoZSBzYW1lICBvciAgZGlmZmVyZW50CisgICAgICAgY29tcGlsZWQgIHBhdHRlcm5zLiBZb3UgY2FuIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSBhIG1hdGNoIGRhdGEgYmxvY2sKKyAgICAgICBhZnRlciAgYSAgbWF0Y2ggIG9wZXJhdGlvbiAgaGFzICBmaW5pc2hlZCwgIHVzaW5nICBmdW5jdGlvbnMgIHRoYXQgIGFyZQorICAgICAgIGRlc2NyaWJlZCAgaW4gIHRoZSAgc2VjdGlvbnMgIG9uICBtYXRjaGVkICBzdHJpbmdzIGFuZCBvdGhlciBtYXRjaCBkYXRhCisgICAgICAgYmVsb3cuCisKKyAgICAgICBXaGVuIGEgY2FsbCBvZiBwY3JlMl9tYXRjaCgpIGZhaWxzLCB2YWxpZCAgZGF0YSAgaXMgIGF2YWlsYWJsZSAgaW4gIHRoZQorICAgICAgIG1hdGNoICAgIGJsb2NrICAgIG9ubHkgICB3aGVuICAgdGhlICAgZXJyb3IgICBpcyAgIFBDUkUyX0VSUk9SX05PTUFUQ0gsCisgICAgICAgUENSRTJfRVJST1JfUEFSVElBTCwgb3Igb25lIG9mIHRoZSAgZXJyb3IgIGNvZGVzICBmb3IgIGFuICBpbnZhbGlkICBVVEYKKyAgICAgICBzdHJpbmcuIEV4YWN0bHkgd2hhdCBpcyBhdmFpbGFibGUgZGVwZW5kcyBvbiB0aGUgZXJyb3IsIGFuZCBpcyBkZXRhaWxlZAorICAgICAgIGJlbG93LgorCisgICAgICAgV2hlbiBvbmUgb2YgdGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyBpcyBjYWxsZWQsIHBvaW50ZXJzIHRvIHRoZSAgY29tcGlsZWQKKyAgICAgICBwYXR0ZXJuICBhbmQgdGhlIHN1YmplY3Qgc3RyaW5nIGFyZSBzZXQgaW4gdGhlIG1hdGNoIGRhdGEgYmxvY2sgc28gdGhhdAorICAgICAgIHRoZXkgY2FuIGJlIHJlZmVyZW5jZWQgYnkgdGhlIGV4dHJhY3Rpb24gIGZ1bmN0aW9ucy4gIEFmdGVyICBydW5uaW5nICBhCisgICAgICAgbWF0Y2gsICB5b3UgIG11c3Qgbm90IGZyZWUgYSBjb21waWxlZCBwYXR0ZXJuIG9yIGEgc3ViamVjdCBzdHJpbmcgdW50aWwKKyAgICAgICBhZnRlciBhbGwgb3BlcmF0aW9ucyBvbiB0aGUgbWF0Y2ggZGF0YSAgYmxvY2sgIChmb3IgIHRoYXQgIG1hdGNoKSAgaGF2ZQorICAgICAgIHRha2VuIHBsYWNlLgorCisgICAgICAgV2hlbiAgYSBtYXRjaCBkYXRhIGJsb2NrIGl0c2VsZiBpcyBubyBsb25nZXIgbmVlZGVkLCBpdCBzaG91bGQgYmUgZnJlZWQKKyAgICAgICBieSBjYWxsaW5nIHBjcmUyX21hdGNoX2RhdGFfZnJlZSgpLgorCisKK01BVENISU5HIEEgUEFUVEVSTjogVEhFIFRSQURJVElPTkFMIEZVTkNUSU9OCisKKyAgICAgICBpbnQgcGNyZTJfbWF0Y2goY29uc3QgcGNyZTJfY29kZSAqY29kZSwgUENSRTJfU1BUUiBzdWJqZWN0LAorICAgICAgICAgUENSRTJfU0laRSBsZW5ndGgsIFBDUkUyX1NJWkUgc3RhcnRvZmZzZXQsCisgICAgICAgICB1aW50MzJfdCBvcHRpb25zLCBwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLAorICAgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQpOworCisgICAgICAgVGhlIGZ1bmN0aW9uIHBjcmUyX21hdGNoKCkgaXMgY2FsbGVkIHRvIG1hdGNoIGEgc3ViamVjdCBzdHJpbmcgIGFnYWluc3QKKyAgICAgICBhICBjb21waWxlZCBwYXR0ZXJuLCB3aGljaCBpcyBwYXNzZWQgaW4gdGhlIGNvZGUgYXJndW1lbnQuIFlvdSBjYW4gY2FsbAorICAgICAgIHBjcmUyX21hdGNoKCkgd2l0aCB0aGUgc2FtZSBjb2RlIGFyZ3VtZW50IGFzIG1hbnkgdGltZXMgYXMgeW91IGxpa2UsIGluCisgICAgICAgb3JkZXIgIHRvICBmaW5kIG11bHRpcGxlIG1hdGNoZXMgaW4gdGhlIHN1YmplY3Qgc3RyaW5nIG9yIHRvIG1hdGNoIGRpZi0KKyAgICAgICBmZXJlbnQgc3ViamVjdCBzdHJpbmdzIHdpdGggdGhlIHNhbWUgcGF0dGVybi4KKworICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdGhlIG1haW4gbWF0Y2hpbmcgZmFjaWxpdHkgIG9mICB0aGUgIGxpYnJhcnksICBhbmQgIGl0CisgICAgICAgb3BlcmF0ZXMgIGluICBhICBQZXJsLWxpa2UgIG1hbm5lci4gRm9yIHNwZWNpYWxpc3QgdXNlIHRoZXJlIGlzIGFsc28gYW4KKyAgICAgICBhbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbiwgd2hpY2ggaXMgZGVzY3JpYmVkIGJlbG93IGluIHRoZSAgc2VjdGlvbgorICAgICAgIGFib3V0IHRoZSBwY3JlMl9kZmFfbWF0Y2goKSBmdW5jdGlvbi4KKworICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjYWxsIHRvIHBjcmUyX21hdGNoKCk6CisKKyAgICAgICAgIHBjcmUyX21hdGNoX2RhdGEgKm1kID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUoNCwgTlVMTCk7CisgICAgICAgICBpbnQgcmMgPSBwY3JlMl9tYXRjaCgKKyAgICAgICAgICAgcmUsICAgICAgICAgICAgIC8qIHJlc3VsdCBvZiBwY3JlMl9jb21waWxlKCkgKi8KKyAgICAgICAgICAgInNvbWUgc3RyaW5nIiwgIC8qIHRoZSBzdWJqZWN0IHN0cmluZyAqLworICAgICAgICAgICAxMSwgICAgICAgICAgICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgICAgICAgICAgMCwgICAgICAgICAgICAgIC8qIHN0YXJ0IGF0IG9mZnNldCAwIGluIHRoZSBzdWJqZWN0ICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAvKiBkZWZhdWx0IG9wdGlvbnMgKi8KKyAgICAgICAgICAgbWF0Y2hfZGF0YSwgICAgIC8qIHRoZSBtYXRjaCBkYXRhIGJsb2NrICovCisgICAgICAgICAgIE5VTEwpOyAgICAgICAgICAvKiBhIG1hdGNoIGNvbnRleHQ7IE5VTEwgbWVhbnMgdXNlIGRlZmF1bHRzICovCisKKyAgICAgICBJZiAgdGhlICBzdWJqZWN0ICBzdHJpbmcgaXMgemVyby10ZXJtaW5hdGVkLCB0aGUgbGVuZ3RoIGNhbiBiZSBnaXZlbiBhcworICAgICAgIFBDUkUyX1pFUk9fVEVSTUlOQVRFRC4gQSBtYXRjaCBjb250ZXh0IG11c3QgYmUgcHJvdmlkZWQgaWYgY2VydGFpbiBsZXNzCisgICAgICAgY29tbW9uIG1hdGNoaW5nIHBhcmFtZXRlcnMgYXJlIHRvIGJlIGNoYW5nZWQuIEZvciBkZXRhaWxzLCBzZWUgdGhlIHNlYy0KKyAgICAgICB0aW9uIG9uIHRoZSBtYXRjaCBjb250ZXh0IGFib3ZlLgorCisgICBUaGUgc3RyaW5nIHRvIGJlIG1hdGNoZWQgYnkgcGNyZTJfbWF0Y2goKQorCisgICAgICAgVGhlIHN1YmplY3Qgc3RyaW5nIGlzIHBhc3NlZCB0byBwY3JlMl9tYXRjaCgpIGFzIGEgcG9pbnRlciBpbiAgc3ViamVjdCwKKyAgICAgICBhICBsZW5ndGggIGluICBsZW5ndGgsIGFuZCBhIHN0YXJ0aW5nIG9mZnNldCBpbiBzdGFydG9mZnNldC4gVGhlIGxlbmd0aAorICAgICAgIGFuZCBvZmZzZXQgYXJlIGluIGNvZGUgdW5pdHMsIG5vdCBjaGFyYWN0ZXJzLiAgVGhhdCAgaXMsICB0aGV5ICBhcmUgIGluCisgICAgICAgYnl0ZXMgIGZvciB0aGUgOC1iaXQgbGlicmFyeSwgMTYtYml0IGNvZGUgdW5pdHMgZm9yIHRoZSAxNi1iaXQgbGlicmFyeSwKKyAgICAgICBhbmQgMzItYml0IGNvZGUgdW5pdHMgZm9yIHRoZSAzMi1iaXQgbGlicmFyeSwgd2hldGhlciBvciBub3QgIFVURiAgcHJvLQorICAgICAgIGNlc3NpbmcgaXMgZW5hYmxlZC4KKworICAgICAgIElmIHN0YXJ0b2Zmc2V0IGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJqZWN0LCBwY3JlMl9tYXRjaCgpCisgICAgICAgcmV0dXJucyBQQ1JFMl9FUlJPUl9CQURPRkZTRVQuIFdoZW4gdGhlIHN0YXJ0aW5nIG9mZnNldCAgaXMgIHplcm8sICB0aGUKKyAgICAgICBzZWFyY2ggIGZvciBhIG1hdGNoIHN0YXJ0cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJqZWN0LCBhbmQgdGhpcyBpcworICAgICAgIGJ5IGZhciB0aGUgbW9zdCBjb21tb24gY2FzZS4gSW4gVVRGLTggb3IgVVRGLTE2IG1vZGUsIHRoZSBzdGFydGluZyBvZmYtCisgICAgICAgc2V0ICBtdXN0ICBwb2ludCB0byB0aGUgc3RhcnQgb2YgYSBjaGFyYWN0ZXIsIG9yIHRvIHRoZSBlbmQgb2YgdGhlIHN1Yi0KKyAgICAgICBqZWN0IChpbiBVVEYtMzIgbW9kZSwgb25lIGNvZGUgdW5pdCBlcXVhbHMgb25lIGNoYXJhY3Rlciwgc28gIGFsbCAgb2ZmLQorICAgICAgIHNldHMgIGFyZSAgdmFsaWQpLiAgTGlrZSAgdGhlICBwYXR0ZXJuICBzdHJpbmcsIHRoZSBzdWJqZWN0IG1heSBjb250YWluCisgICAgICAgYmluYXJ5IHplcm9lcy4KKworICAgICAgIEEgbm9uLXplcm8gc3RhcnRpbmcgb2Zmc2V0IGlzIHVzZWZ1bCB3aGVuIHNlYXJjaGluZyBmb3IgIGFub3RoZXIgIG1hdGNoCisgICAgICAgaW4gIHRoZSAgc2FtZSAgc3ViamVjdCAgYnkgY2FsbGluZyBwY3JlMl9tYXRjaCgpIGFnYWluIGFmdGVyIGEgcHJldmlvdXMKKyAgICAgICBzdWNjZXNzLiAgU2V0dGluZyBzdGFydG9mZnNldCBkaWZmZXJzIGZyb20gIHBhc3NpbmcgIG92ZXIgIGEgIHNob3J0ZW5lZAorICAgICAgIHN0cmluZyAgYW5kICBzZXR0aW5nICBQQ1JFMl9OT1RCT0wgaW4gdGhlIGNhc2Ugb2YgYSBwYXR0ZXJuIHRoYXQgYmVnaW5zCisgICAgICAgd2l0aCBhbnkga2luZCBvZiBsb29rYmVoaW5kLiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhlIHBhdHRlcm4KKworICAgICAgICAgXEJpc3NcQgorCisgICAgICAgd2hpY2ggZmluZHMgb2NjdXJyZW5jZXMgb2YgImlzcyIgaW4gdGhlIG1pZGRsZSBvZiAgd29yZHMuICAoXEIgIG1hdGNoZXMKKyAgICAgICBvbmx5ICBpZiAgdGhlICBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSBzdWJqZWN0IGlzIG5vdCBhIHdvcmQgYm91bmRhcnkuKQorICAgICAgIFdoZW4gYXBwbGllZCB0byB0aGUgc3RyaW5nICJNaXNzaXNzaXBpIiB0aGUgZmlyc3QgY2FsbCB0byBwY3JlMl9tYXRjaCgpCisgICAgICAgZmluZHMgIHRoZSBmaXJzdCBvY2N1cnJlbmNlLiBJZiBwY3JlMl9tYXRjaCgpIGlzIGNhbGxlZCBhZ2FpbiB3aXRoIGp1c3QKKyAgICAgICB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdWJqZWN0LCAgbmFtZWx5ICAiaXNzaXBpIiwgIGl0ICBkb2VzICBub3QgIG1hdGNoLAorICAgICAgIGJlY2F1c2UgXEIgaXMgYWx3YXlzIGZhbHNlIGF0IHRoZSBzdGFydCBvZiB0aGUgc3ViamVjdCwgd2hpY2ggaXMgZGVlbWVkCisgICAgICAgdG8gYmUgYSB3b3JkIGJvdW5kYXJ5LiBIb3dldmVyLCBpZiBwY3JlMl9tYXRjaCgpIGlzIHBhc3NlZCAgdGhlICBlbnRpcmUKKyAgICAgICBzdHJpbmcgYWdhaW4sIGJ1dCB3aXRoIHN0YXJ0b2Zmc2V0IHNldCB0byA0LCBpdCBmaW5kcyB0aGUgc2Vjb25kIG9jY3VyLQorICAgICAgIHJlbmNlIG9mICJpc3MiIGJlY2F1c2UgaXQgaXMgYWJsZSB0byBsb29rIGJlaGluZCB0aGUgc3RhcnRpbmcgcG9pbnQgIHRvCisgICAgICAgZGlzY292ZXIgdGhhdCBpdCBpcyBwcmVjZWRlZCBieSBhIGxldHRlci4KKworICAgICAgIEZpbmRpbmcgIGFsbCAgdGhlICBtYXRjaGVzICBpbiBhIHN1YmplY3QgaXMgdHJpY2t5IHdoZW4gdGhlIHBhdHRlcm4gY2FuCisgICAgICAgbWF0Y2ggYW4gZW1wdHkgc3RyaW5nLiBJdCBpcyBwb3NzaWJsZSB0byBlbXVsYXRlIFBlcmwncyAvZyBiZWhhdmlvdXIgYnkKKyAgICAgICBmaXJzdCAgIHRyeWluZyAgIHRoZSAgIG1hdGNoICAgYWdhaW4gIGF0ICB0aGUgIHNhbWUgIG9mZnNldCwgIHdpdGggIHRoZQorICAgICAgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQgYW5kIFBDUkUyX0FOQ0hPUkVEIG9wdGlvbnMsICBhbmQgIHRoZW4gIGlmICB0aGF0CisgICAgICAgZmFpbHMsICBhZHZhbmNpbmcgIHRoZSAgc3RhcnRpbmcgIG9mZnNldCAgYW5kICB0cnlpbmcgYW4gb3JkaW5hcnkgbWF0Y2gKKyAgICAgICBhZ2Fpbi4gVGhlcmUgaXMgc29tZSBjb2RlIHRoYXQgZGVtb25zdHJhdGVzICBob3cgIHRvICBkbyAgdGhpcyAgaW4gIHRoZQorICAgICAgIHBjcmUyZGVtbyAgc2FtcGxlICBwcm9ncmFtLiBJbiB0aGUgbW9zdCBnZW5lcmFsIGNhc2UsIHlvdSBoYXZlIHRvIGNoZWNrCisgICAgICAgdG8gc2VlIGlmIHRoZSBuZXdsaW5lIGNvbnZlbnRpb24gcmVjb2duaXplcyBDUkxGIGFzIGEgbmV3bGluZSwgIGFuZCAgaWYKKyAgICAgICBzbywgIGFuZCB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgQ1IgZm9sbG93ZWQgYnkgTEYsIGFkdmFuY2UgdGhlIHN0YXJ0LQorICAgICAgIGluZyBvZmZzZXQgYnkgdHdvIGNoYXJhY3RlcnMgaW5zdGVhZCBvZiBvbmUuCisKKyAgICAgICBJZiBhIG5vbi16ZXJvIHN0YXJ0aW5nIG9mZnNldCBpcyBwYXNzZWQgd2hlbiB0aGUgcGF0dGVybiAgaXMgIGFuY2hvcmVkLAorICAgICAgIG9uZSBhdHRlbXB0IHRvIG1hdGNoIGF0IHRoZSBnaXZlbiBvZmZzZXQgaXMgbWFkZS4gVGhpcyBjYW4gb25seSBzdWNjZWVkCisgICAgICAgaWYgdGhlIHBhdHRlcm4gZG9lcyBub3QgcmVxdWlyZSB0aGUgbWF0Y2ggdG8gYmUgYXQgIHRoZSAgc3RhcnQgIG9mICB0aGUKKyAgICAgICBzdWJqZWN0LgorCisgICBPcHRpb24gYml0cyBmb3IgcGNyZTJfbWF0Y2goKQorCisgICAgICAgVGhlIHVudXNlZCBiaXRzIG9mIHRoZSBvcHRpb25zIGFyZ3VtZW50IGZvciBwY3JlMl9tYXRjaCgpIG11c3QgYmUgemVyby4KKyAgICAgICBUaGUgb25seSAgYml0cyAgdGhhdCAgbWF5ICBiZSAgc2V0ICBhcmUgIFBDUkUyX0FOQ0hPUkVELCAgUENSRTJfTk9UQk9MLAorICAgICAgIFBDUkUyX05PVEVPTCwgICAgICAgICAgUENSRTJfTk9URU1QVFksICAgICAgICAgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQsCisgICAgICAgUENSRTJfTk9fVVRGX0NIRUNLLCBQQ1JFMl9QQVJUSUFMX0hBUkQsIGFuZCAgUENSRTJfUEFSVElBTF9TT0ZULiAgVGhlaXIKKyAgICAgICBhY3Rpb24gaXMgZGVzY3JpYmVkIGJlbG93LgorCisgICAgICAgU2V0dGluZyAgUENSRTJfQU5DSE9SRUQgIGF0IG1hdGNoIHRpbWUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUganVzdC1pbi0KKyAgICAgICB0aW1lIChKSVQpIGNvbXBpbGVyLiBJZiBpdCBpcyBzZXQsIEpJVCBtYXRjaGluZyAgaXMgIGRpc2FibGVkICBhbmQgIHRoZQorICAgICAgIG5vcm1hbCBpbnRlcnByZXRpdmUgY29kZSBpbiBwY3JlMl9tYXRjaCgpIGlzIHJ1bi4gVGhlIHJlbWFpbmluZyBvcHRpb25zCisgICAgICAgYXJlIHN1cHBvcnRlZCBmb3IgSklUIG1hdGNoaW5nLgorCisgICAgICAgICBQQ1JFMl9BTkNIT1JFRAorCisgICAgICAgVGhlIFBDUkUyX0FOQ0hPUkVEIG9wdGlvbiBsaW1pdHMgcGNyZTJfbWF0Y2goKSB0byBtYXRjaGluZyBhdCB0aGUgZmlyc3QKKyAgICAgICBtYXRjaGluZyAgcG9zaXRpb24uICBJZiAgYSBwYXR0ZXJuIHdhcyBjb21waWxlZCB3aXRoIFBDUkUyX0FOQ0hPUkVELCBvcgorICAgICAgIHR1cm5lZCBvdXQgdG8gYmUgYW5jaG9yZWQgYnkgdmlydHVlIG9mIGl0cyBjb250ZW50cywgaXQgY2Fubm90IGJlICBtYWRlCisgICAgICAgdW5hY2hvcmVkICBhdCBtYXRjaGluZyB0aW1lLiBOb3RlIHRoYXQgc2V0dGluZyB0aGUgb3B0aW9uIGF0IG1hdGNoIHRpbWUKKyAgICAgICBkaXNhYmxlcyBKSVQgbWF0Y2hpbmcuCisKKyAgICAgICAgIFBDUkUyX05PVEJPTAorCisgICAgICAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoYXQgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdWJqZWN0IHN0cmluZyBpcyBub3QKKyAgICAgICB0aGUgIGJlZ2lubmluZyAgb2YgIGEgIGxpbmUsIHNvIHRoZSBjaXJjdW1mbGV4IG1ldGFjaGFyYWN0ZXIgc2hvdWxkIG5vdAorICAgICAgIG1hdGNoIGJlZm9yZSBpdC4gU2V0dGluZyB0aGlzIHdpdGhvdXQgIGhhdmluZyAgc2V0ICBQQ1JFMl9NVUxUSUxJTkUgIGF0CisgICAgICAgY29tcGlsZSB0aW1lIGNhdXNlcyBjaXJjdW1mbGV4IG5ldmVyIHRvIG1hdGNoLiBUaGlzIG9wdGlvbiBhZmZlY3RzIG9ubHkKKyAgICAgICB0aGUgYmVoYXZpb3VyIG9mIHRoZSBjaXJjdW1mbGV4IG1ldGFjaGFyYWN0ZXIuIEl0IGRvZXMgbm90IGFmZmVjdCBcQS4KKworICAgICAgICAgUENSRTJfTk9URU9MCisKKyAgICAgICBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IHN0cmluZyBpcyBub3QgdGhlIGVuZAorICAgICAgIG9mICBhIGxpbmUsIHNvIHRoZSBkb2xsYXIgbWV0YWNoYXJhY3RlciBzaG91bGQgbm90IG1hdGNoIGl0IG5vciAoZXhjZXB0CisgICAgICAgaW4gbXVsdGlsaW5lIG1vZGUpIGEgbmV3bGluZSBpbW1lZGlhdGVseSBiZWZvcmUgaXQuIFNldHRpbmcgdGhpcyAgd2l0aC0KKyAgICAgICBvdXQgIGhhdmluZyAgc2V0IFBDUkUyX01VTFRJTElORSBhdCBjb21waWxlIHRpbWUgY2F1c2VzIGRvbGxhciBuZXZlciB0bworICAgICAgIG1hdGNoLiBUaGlzIG9wdGlvbiBhZmZlY3RzIG9ubHkgdGhlIGJlaGF2aW91ciBvZiB0aGUgZG9sbGFyIG1ldGFjaGFyYWMtCisgICAgICAgdGVyLiBJdCBkb2VzIG5vdCBhZmZlY3QgXFogb3IgXHouCisKKyAgICAgICAgIFBDUkUyX05PVEVNUFRZCisKKyAgICAgICBBbiBlbXB0eSBzdHJpbmcgaXMgbm90IGNvbnNpZGVyZWQgdG8gYmUgYSB2YWxpZCBtYXRjaCBpZiB0aGlzIG9wdGlvbiBpcworICAgICAgIHNldC4gSWYgdGhlcmUgYXJlIGFsdGVybmF0aXZlcyBpbiB0aGUgcGF0dGVybiwgdGhleSBhcmUgdHJpZWQuICBJZiAgYWxsCisgICAgICAgdGhlICBhbHRlcm5hdGl2ZXMgIG1hdGNoICB0aGUgZW1wdHkgc3RyaW5nLCB0aGUgZW50aXJlIG1hdGNoIGZhaWxzLiBGb3IKKyAgICAgICBleGFtcGxlLCBpZiB0aGUgcGF0dGVybgorCisgICAgICAgICBhP2I/CisKKyAgICAgICBpcyBhcHBsaWVkIHRvIGEgc3RyaW5nIG5vdCBiZWdpbm5pbmcgd2l0aCAiYSIgb3IgICJiIiwgIGl0ICBtYXRjaGVzICBhbgorICAgICAgIGVtcHR5IHN0cmluZyBhdCB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3QuIFdpdGggUENSRTJfTk9URU1QVFkgc2V0LCB0aGlzCisgICAgICAgbWF0Y2ggaXMgbm90IHZhbGlkLCBzbyBwY3JlMl9tYXRjaCgpIHNlYXJjaGVzIGZ1cnRoZXIgaW50byAgdGhlICBzdHJpbmcKKyAgICAgICBmb3Igb2NjdXJyZW5jZXMgb2YgImEiIG9yICJiIi4KKworICAgICAgICAgUENSRTJfTk9URU1QVFlfQVRTVEFSVAorCisgICAgICAgVGhpcyAgaXMgIGxpa2UgUENSRTJfTk9URU1QVFksIGV4Y2VwdCB0aGF0IGl0IGxvY2tzIG91dCBhbiBlbXB0eSBzdHJpbmcKKyAgICAgICBtYXRjaCBvbmx5IGF0IHRoZSBmaXJzdCBtYXRjaGluZyBwb3NpdGlvbiwgdGhhdCBpcywgYXQgdGhlIHN0YXJ0IG9mIHRoZQorICAgICAgIHN1YmplY3QgIHBsdXMgIHRoZSAgc3RhcnRpbmcgb2Zmc2V0LiBBbiBlbXB0eSBzdHJpbmcgbWF0Y2ggbGF0ZXIgaW4gdGhlCisgICAgICAgc3ViamVjdCBpcyBwZXJtaXR0ZWQuICBJZiB0aGUgcGF0dGVybiBpcyBhbmNob3JlZCwgIHN1Y2ggIGEgIG1hdGNoICBjYW4KKyAgICAgICBvY2N1ciBvbmx5IGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIFxLLgorCisgICAgICAgICBQQ1JFMl9OT19VVEZfQ0hFQ0sKKworICAgICAgIFdoZW4gUENSRTJfVVRGIGlzIHNldCBhdCBjb21waWxlIHRpbWUsIHRoZSB2YWxpZGl0eSBvZiB0aGUgc3ViamVjdCBhcyBhCisgICAgICAgVVRGIHN0cmluZyBpcyBjaGVja2VkIGJ5IGRlZmF1bHQgIHdoZW4gIHBjcmUyX21hdGNoKCkgIGlzICBzdWJzZXF1ZW50bHkKKyAgICAgICBjYWxsZWQuICAgSWYgIGEgbm9uLXplcm8gc3RhcnRpbmcgb2Zmc2V0IGlzIGdpdmVuLCB0aGUgY2hlY2sgaXMgYXBwbGllZAorICAgICAgIG9ubHkgdG8gdGhhdCBwYXJ0IG9mIHRoZSBzdWJqZWN0IHRoYXQgY291bGQgYmUgaW5zcGVjdGVkIGR1cmluZyAgbWF0Y2gtCisgICAgICAgaW5nLCAgYW5kIHRoZXJlIGlzIGEgY2hlY2sgdGhhdCB0aGUgc3RhcnRpbmcgb2Zmc2V0IHBvaW50cyB0byB0aGUgZmlyc3QKKyAgICAgICBjb2RlIHVuaXQgb2YgYSBjaGFyYWN0ZXIgb3IgdG8gdGhlIGVuZCBvZiB0aGUgc3ViamVjdC4gSWYgdGhlcmUgYXJlICBubworICAgICAgIGxvb2tiZWhpbmQgIGFzc2VydGlvbnMgaW4gdGhlIHBhdHRlcm4sIHRoZSBjaGVjayBzdGFydHMgYXQgdGhlIHN0YXJ0aW5nCisgICAgICAgb2Zmc2V0LiBPdGhlcndpc2UsIGl0IHN0YXJ0cyBhdCB0aGUgbGVuZ3RoIG9mICB0aGUgIGxvbmdlc3QgIGxvb2tiZWhpbmQKKyAgICAgICBiZWZvcmUgdGhlIHN0YXJ0aW5nIG9mZnNldCwgb3IgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0IGlmIHRoZXJlIGFyZQorICAgICAgIG5vdCB0aGF0IG1hbnkgY2hhcmFjdGVycyBiZWZvcmUgdGhlICBzdGFydGluZyAgb2Zmc2V0LiAgTm90ZSAgdGhhdCAgdGhlCisgICAgICAgc2VxdWVuY2VzIFxiIGFuZCBcQiBhcmUgb25lLWNoYXJhY3RlciBsb29rYmVoaW5kcy4KKworICAgICAgIFRoZSBjaGVjayBpcyBjYXJyaWVkIG91dCBiZWZvcmUgYW55IG90aGVyIHByb2Nlc3NpbmcgdGFrZXMgcGxhY2UsIGFuZCBhCisgICAgICAgbmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpZiB0aGUgY2hlY2sgZmFpbHMuIFRoZXJlICBhcmUgIHNldmVyYWwKKyAgICAgICBVVEYgIGVycm9yICBjb2RlcyAgZm9yIGVhY2ggY29kZSB1bml0IHdpZHRoLCBjb3JyZXNwb25kaW5nIHRvIGRpZmZlcmVudAorICAgICAgIHByb2JsZW1zIHdpdGggdGhlIGNvZGUgdW5pdCBzZXF1ZW5jZS4gVGhlcmUgYXJlIGRpc2N1c3Npb25zICBhYm91dCAgdGhlCisgICAgICAgdmFsaWRpdHkgIG9mICBVVEYtOCAgc3RyaW5ncywgVVRGLTE2IHN0cmluZ3MsIGFuZCBVVEYtMzIgc3RyaW5ncyBpbiB0aGUKKyAgICAgICBwY3JlMnVuaWNvZGUgcGFnZS4KKworICAgICAgIElmIHlvdSBrbm93IHRoYXQgeW91ciBzdWJqZWN0IGlzIHZhbGlkLCBhbmQgIHlvdSAgd2FudCAgdG8gIHNraXAgIHRoZXNlCisgICAgICAgY2hlY2tzICBmb3IgIHBlcmZvcm1hbmNlICByZWFzb25zLCAgeW91ICBjYW4gc2V0IHRoZSBQQ1JFMl9OT19VVEZfQ0hFQ0sKKyAgICAgICBvcHRpb24gd2hlbiBjYWxsaW5nIHBjcmUyX21hdGNoKCkuIFlvdSBtaWdodCB3YW50IHRvIGRvICB0aGlzICBmb3IgIHRoZQorICAgICAgIHNlY29uZCBhbmQgc3Vic2VxdWVudCBjYWxscyB0byBwY3JlMl9tYXRjaCgpIGlmIHlvdSBhcmUgbWFraW5nIHJlcGVhdGVkCisgICAgICAgY2FsbHMgdG8gZmluZCBhbGwgdGhlIG1hdGNoZXMgaW4gYSBzaW5nbGUgc3ViamVjdCBzdHJpbmcuCisKKyAgICAgICBOT1RFOiBXaGVuIFBDUkUyX05PX1VURl9DSEVDSyBpcyBzZXQsIHRoZSBlZmZlY3Qgb2YgcGFzc2luZyBhbiAgaW52YWxpZAorICAgICAgIHN0cmluZyAgYXMgYSBzdWJqZWN0LCBvciBhbiBpbnZhbGlkIHZhbHVlIG9mIHN0YXJ0b2Zmc2V0LCBpcyB1bmRlZmluZWQuCisgICAgICAgWW91ciBwcm9ncmFtIG1heSBjcmFzaCBvciBsb29wIGluZGVmaW5pdGVseS4KKworICAgICAgICAgUENSRTJfUEFSVElBTF9IQVJECisgICAgICAgICBQQ1JFMl9QQVJUSUFMX1NPRlQKKworICAgICAgIFRoZXNlIG9wdGlvbnMgdHVybiBvbiB0aGUgcGFydGlhbCBtYXRjaGluZyAgZmVhdHVyZS4gIEEgIHBhcnRpYWwgIG1hdGNoCisgICAgICAgb2NjdXJzICBpZiAgdGhlICBlbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIHJlYWNoZWQgc3VjY2Vzc2Z1bGx5LCBidXQKKyAgICAgICB0aGVyZSBhcmUgbm90IGVub3VnaCBzdWJqZWN0IGNoYXJhY3RlcnMgdG8gY29tcGxldGUgdGhlIG1hdGNoLiBJZiAgdGhpcworICAgICAgIGhhcHBlbnMgIHdoZW4gIFBDUkUyX1BBUlRJQUxfU09GVCAgKGJ1dCBub3QgUENSRTJfUEFSVElBTF9IQVJEKSBpcyBzZXQsCisgICAgICAgbWF0Y2hpbmcgY29udGludWVzIGJ5IHRlc3RpbmcgYW55IHJlbWFpbmluZyBhbHRlcm5hdGl2ZXMuICBPbmx5ICBpZiAgbm8KKyAgICAgICBjb21wbGV0ZSAgbWF0Y2ggY2FuIGJlIGZvdW5kIGlzIFBDUkUyX0VSUk9SX1BBUlRJQUwgcmV0dXJuZWQgaW5zdGVhZCBvZgorICAgICAgIFBDUkUyX0VSUk9SX05PTUFUQ0guIEluIG90aGVyIHdvcmRzLCBQQ1JFMl9QQVJUSUFMX1NPRlQgc3BlY2lmaWVzICB0aGF0CisgICAgICAgdGhlICBjYWxsZXIgIGlzIHByZXBhcmVkIHRvIGhhbmRsZSBhIHBhcnRpYWwgbWF0Y2gsIGJ1dCBvbmx5IGlmIG5vIGNvbS0KKyAgICAgICBwbGV0ZSBtYXRjaCBjYW4gYmUgZm91bmQuCisKKyAgICAgICBJZiBQQ1JFMl9QQVJUSUFMX0hBUkQgaXMgc2V0LCBpdCBvdmVycmlkZXMgUENSRTJfUEFSVElBTF9TT0ZULiBJbiAgdGhpcworICAgICAgIGNhc2UsICBpZiAgYSAgcGFydGlhbCBtYXRjaCBpcyBmb3VuZCwgcGNyZTJfbWF0Y2goKSBpbW1lZGlhdGVseSByZXR1cm5zCisgICAgICAgUENSRTJfRVJST1JfUEFSVElBTCwgd2l0aG91dCBjb25zaWRlcmluZyAgYW55ICBvdGhlciAgYWx0ZXJuYXRpdmVzLiAgSW4KKyAgICAgICBvdGhlciB3b3Jkcywgd2hlbiBQQ1JFMl9QQVJUSUFMX0hBUkQgaXMgc2V0LCBhIHBhcnRpYWwgbWF0Y2ggaXMgY29uc2lkLQorICAgICAgIGVyZWQgdG8gYmUgbW9yZSBpbXBvcnRhbnQgdGhhdCBhbiBhbHRlcm5hdGl2ZSBjb21wbGV0ZSBtYXRjaC4KKworICAgICAgIFRoZXJlIGlzIGEgbW9yZSBkZXRhaWxlZCBkaXNjdXNzaW9uIG9mIHBhcnRpYWwgYW5kIG11bHRpLXNlZ21lbnQgbWF0Y2gtCisgICAgICAgaW5nLCB3aXRoIGV4YW1wbGVzLCBpbiB0aGUgcGNyZTJwYXJ0aWFsIGRvY3VtZW50YXRpb24uCisKKworTkVXTElORSBIQU5ETElORyBXSEVOIE1BVENISU5HCisKKyAgICAgICBXaGVuICBQQ1JFMiBpcyBidWlsdCwgYSBkZWZhdWx0IG5ld2xpbmUgY29udmVudGlvbiBpcyBzZXQ7IHRoaXMgaXMgdXN1LQorICAgICAgIGFsbHkgdGhlIHN0YW5kYXJkIGNvbnZlbnRpb24gZm9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBUaGUgZGVmYXVsdCAgY2FuCisgICAgICAgYmUgIG92ZXJyaWRkZW4gIGluIGEgY29tcGlsZSBjb250ZXh0IGJ5IGNhbGxpbmcgcGNyZTJfc2V0X25ld2xpbmUoKS4gSXQKKyAgICAgICBjYW4gYWxzbyBiZSBvdmVycmlkZGVuIGJ5IHN0YXJ0aW5nIGEgcGF0dGVybiBzdHJpbmcgd2l0aCwgZm9yICBleGFtcGxlLAorICAgICAgICgqQ1JMRiksICBhcyAgZGVzY3JpYmVkICBpbiAgdGhlICBzZWN0aW9uIG9uIG5ld2xpbmUgY29udmVudGlvbnMgaW4gdGhlCisgICAgICAgcGNyZTJwYXR0ZXJuIHBhZ2UuIER1cmluZyBtYXRjaGluZywgdGhlIG5ld2xpbmUgY2hvaWNlIGFmZmVjdHMgdGhlICBiZS0KKyAgICAgICBoYXZpb3VyICBvZiB0aGUgZG90LCBjaXJjdW1mbGV4LCBhbmQgZG9sbGFyIG1ldGFjaGFyYWN0ZXJzLiBJdCBtYXkgYWxzbworICAgICAgIGFsdGVyIHRoZSB3YXkgdGhlIG1hdGNoIHN0YXJ0aW5nIHBvc2l0aW9uIGlzICBhZHZhbmNlZCAgYWZ0ZXIgIGEgIG1hdGNoCisgICAgICAgZmFpbHVyZSBmb3IgYW4gdW5hbmNob3JlZCBwYXR0ZXJuLgorCisgICAgICAgV2hlbiBQQ1JFMl9ORVdMSU5FX0NSTEYsIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRiwgb3IgUENSRTJfTkVXTElORV9BTlkgaXMKKyAgICAgICBzZXQgYXMgdGhlIG5ld2xpbmUgY29udmVudGlvbiwgYW5kIGEgbWF0Y2ggYXR0ZW1wdCAgZm9yICBhbiAgdW5hbmNob3JlZAorICAgICAgIHBhdHRlcm4gZmFpbHMgd2hlbiB0aGUgY3VycmVudCBzdGFydGluZyBwb3NpdGlvbiBpcyBhdCBhIENSTEYgc2VxdWVuY2UsCisgICAgICAgYW5kIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIG5vIGV4cGxpY2l0IG1hdGNoZXMgZm9yIENSIG9yICBMRiAgY2hhcmFjdGVycywKKyAgICAgICB0aGUgIG1hdGNoICBwb3NpdGlvbiAgaXMgIGFkdmFuY2VkIGJ5IHR3byBjaGFyYWN0ZXJzIGluc3RlYWQgb2Ygb25lLCBpbgorICAgICAgIG90aGVyIHdvcmRzLCB0byBhZnRlciB0aGUgQ1JMRi4KKworICAgICAgIFRoZSBhYm92ZSBydWxlIGlzIGEgY29tcHJvbWlzZSB0aGF0IG1ha2VzIHRoZSBtb3N0IGNvbW1vbiBjYXNlcyB3b3JrIGFzCisgICAgICAgZXhwZWN0ZWQuICBGb3IgIGV4YW1wbGUsICBpZiAgdGhlICBwYXR0ZXJuIGlzIC4rQSAoYW5kIHRoZSBQQ1JFMl9ET1RBTEwKKyAgICAgICBvcHRpb24gaXMgbm90IHNldCksIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBzdHJpbmcgIlxyXG5BIiBiZWNhdXNlLCBhZnRlcgorICAgICAgIGZhaWxpbmcgIGF0IHRoZSBzdGFydCwgaXQgc2tpcHMgYm90aCB0aGUgQ1IgYW5kIHRoZSBMRiBiZWZvcmUgcmV0cnlpbmcuCisgICAgICAgSG93ZXZlciwgdGhlIHBhdHRlcm4gW1xyXG5dQSBkb2VzIG1hdGNoIHRoYXQgc3RyaW5nLCAgYmVjYXVzZSAgaXQgIGNvbi0KKyAgICAgICB0YWlucyBhbiBleHBsaWNpdCBDUiBvciBMRiByZWZlcmVuY2UsIGFuZCBzbyBhZHZhbmNlcyBvbmx5IGJ5IG9uZSBjaGFyLQorICAgICAgIGFjdGVyIGFmdGVyIHRoZSBmaXJzdCBmYWlsdXJlLgorCisgICAgICAgQW4gZXhwbGljaXQgbWF0Y2ggZm9yIENSIG9mIExGIGlzIGVpdGhlciBhIGxpdGVyYWwgYXBwZWFyYW5jZSBvZiBvbmUgb2YKKyAgICAgICB0aG9zZSAgY2hhcmFjdGVycyAgaW4gIHRoZSAgcGF0dGVybiwgIG9yICBvbmUgIG9mICB0aGUgIFxyIG9yIFxuIGVzY2FwZQorICAgICAgIHNlcXVlbmNlcy4gSW1wbGljaXQgbWF0Y2hlcyBzdWNoIGFzIFteWF0gZG8gbm90ICBjb3VudCwgIG5vciAgZG9lcyAgXHMsCisgICAgICAgZXZlbiB0aG91Z2ggaXQgaW5jbHVkZXMgQ1IgYW5kIExGIGluIHRoZSBjaGFyYWN0ZXJzIHRoYXQgaXQgbWF0Y2hlcy4KKworICAgICAgIE5vdHdpdGhzdGFuZGluZyAgdGhlIGFib3ZlLCBhbm9tYWxvdXMgZWZmZWN0cyBtYXkgc3RpbGwgb2NjdXIgd2hlbiBDUkxGCisgICAgICAgaXMgYSB2YWxpZCBuZXdsaW5lIHNlcXVlbmNlIGFuZCBleHBsaWNpdCBcciBvciBcbiBlc2NhcGVzIGFwcGVhciBpbiB0aGUKKyAgICAgICBwYXR0ZXJuLgorCisKK0hPVyBQQ1JFMl9NQVRDSCgpIFJFVFVSTlMgQSBTVFJJTkcgQU5EIENBUFRVUkVEIFNVQlNUUklOR1MKKworICAgICAgIHVpbnQzMl90IHBjcmUyX2dldF9vdmVjdG9yX2NvdW50KHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEpOworCisgICAgICAgUENSRTJfU0laRSAqcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcihwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhKTsKKworICAgICAgIEluICBnZW5lcmFsLCBhIHBhdHRlcm4gbWF0Y2hlcyBhIGNlcnRhaW4gcG9ydGlvbiBvZiB0aGUgc3ViamVjdCwgYW5kIGluCisgICAgICAgYWRkaXRpb24sIGZ1cnRoZXIgc3Vic3RyaW5ncyBmcm9tIHRoZSBzdWJqZWN0ICBtYXkgIGJlICBwaWNrZWQgIG91dCAgYnkKKyAgICAgICBwYXJlbnRoZXNpemVkICBwYXJ0cyAgb2YgIHRoZSAgcGF0dGVybi4gIEZvbGxvd2luZyB0aGUgdXNhZ2UgaW4gSmVmZnJleQorICAgICAgIEZyaWVkbCdzIGJvb2ssIHRoaXMgaXMgY2FsbGVkICJjYXB0dXJpbmciICBpbiAgd2hhdCAgZm9sbG93cywgIGFuZCAgdGhlCisgICAgICAgcGhyYXNlICAiY2FwdHVyaW5nIHN1YnBhdHRlcm4iIG9yICJjYXB0dXJpbmcgZ3JvdXAiIGlzIHVzZWQgZm9yIGEgZnJhZy0KKyAgICAgICBtZW50IG9mIGEgcGF0dGVybiB0aGF0IHBpY2tzIG91dCBhIHN1YnN0cmluZy4gIFBDUkUyICBzdXBwb3J0cyAgc2V2ZXJhbAorICAgICAgIG90aGVyIGtpbmRzIG9mIHBhcmVudGhlc2l6ZWQgc3VicGF0dGVybiB0aGF0IGRvIG5vdCBjYXVzZSBzdWJzdHJpbmdzIHRvCisgICAgICAgYmUgY2FwdHVyZWQuIFRoZSBwY3JlMl9wYXR0ZXJuX2luZm8oKSBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBmaW5kICBvdXQKKyAgICAgICBob3cgbWFueSBjYXB0dXJpbmcgc3VicGF0dGVybnMgdGhlcmUgYXJlIGluIGEgY29tcGlsZWQgcGF0dGVybi4KKworICAgICAgIFlvdSAgY2FuICB1c2UgIGF1eGlsaWFyeSBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyBjYXB0dXJlZCBzdWJzdHJpbmdzIGJ5CisgICAgICAgbnVtYmVyIG9yIGJ5IG5hbWUsIGFzIGRlc2NyaWJlZCBpbiBzZWN0aW9ucyBiZWxvdy4KKworICAgICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gbWFrZSBkaXJlY3QgdXNlIG9mIHRoZSB2ZWN0b3Igb2YgUENSRTJfU0laRSB2YWwtCisgICAgICAgdWVzLCAgY2FsbGVkICB0aGUgIG92ZWN0b3IsICB3aGljaCAgY29udGFpbnMgIHRoZSAgb2Zmc2V0cyAgb2YgY2FwdHVyZWQKKyAgICAgICBzdHJpbmdzLiAgSXQgIGlzICBwYXJ0ICBvZiAgdGhlICBtYXRjaCAgZGF0YSAgIGJsb2NrLiAgICBUaGUgICBmdW5jdGlvbgorICAgICAgIHBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIoKSAgcmV0dXJucyAgdGhlICBhZGRyZXNzICBvZiB0aGUgb3ZlY3RvciwgYW5kCisgICAgICAgcGNyZTJfZ2V0X292ZWN0b3JfY291bnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgcGFpcnMgb2YgdmFsdWVzIGl0IGNvbi0KKyAgICAgICB0YWlucy4KKworICAgICAgIFdpdGhpbiB0aGUgb3ZlY3RvciwgdGhlIGZpcnN0IGluIGVhY2ggcGFpciBvZiB2YWx1ZXMgaXMgc2V0IHRvIHRoZSBvZmYtCisgICAgICAgc2V0IG9mIHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgYSBzdWJzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGlzIHNldCB0byB0aGUKKyAgICAgICBvZmZzZXQgIG9mIHRoZSBmaXJzdCBjb2RlIHVuaXQgYWZ0ZXIgdGhlIGVuZCBvZiBhIHN1YnN0cmluZy4gVGhlc2UgdmFsLQorICAgICAgIHVlcyBhcmUgYWx3YXlzIGNvZGUgdW5pdCBvZmZzZXRzLCBub3QgY2hhcmFjdGVyIG9mZnNldHMuIFRoYXQgaXMsICB0aGV5CisgICAgICAgYXJlICBieXRlICBvZmZzZXRzICBpbiAgdGhlIDgtYml0IGxpYnJhcnksIDE2LWJpdCBvZmZzZXRzIGluIHRoZSAxNi1iaXQKKyAgICAgICBsaWJyYXJ5LCBhbmQgMzItYml0IG9mZnNldHMgaW4gdGhlIDMyLWJpdCBsaWJyYXJ5LgorCisgICAgICAgQWZ0ZXIgYSBwYXJ0aWFsIG1hdGNoICAoZXJyb3IgIHJldHVybiAgUENSRTJfRVJST1JfUEFSVElBTCksICBvbmx5ICB0aGUKKyAgICAgICBmaXJzdCAgcGFpciAgb2YgIG9mZnNldHMgICh0aGF0IGlzLCBvdmVjdG9yWzBdIGFuZCBvdmVjdG9yWzFdKSBhcmUgc2V0LgorICAgICAgIFRoZXkgaWRlbnRpZnkgdGhlIHBhcnQgb2YgdGhlIHN1YmplY3QgdGhhdCB3YXMgcGFydGlhbGx5ICBtYXRjaGVkLiAgU2VlCisgICAgICAgdGhlIHBjcmUycGFydGlhbCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzIG9mIHBhcnRpYWwgbWF0Y2hpbmcuCisKKyAgICAgICBBZnRlciBhIHN1Y2Nlc3NmdWwgbWF0Y2gsIHRoZSBmaXJzdCBwYWlyIG9mIG9mZnNldHMgaWRlbnRpZmllcyB0aGUgcG9yLQorICAgICAgIHRpb24gb2YgdGhlIHN1YmplY3Qgc3RyaW5nIHRoYXQgd2FzIG1hdGNoZWQgYnkgdGhlIGVudGlyZSBwYXR0ZXJuLiAgVGhlCisgICAgICAgbmV4dCAgcGFpciAgaXMgIHVzZWQgZm9yIHRoZSBmaXJzdCBjYXB0dXJpbmcgc3VicGF0dGVybiwgYW5kIHNvIG9uLiBUaGUKKyAgICAgICB2YWx1ZSByZXR1cm5lZCBieSBwY3JlMl9tYXRjaCgpIGlzIG9uZSBtb3JlIHRoYW4gdGhlICBoaWdoZXN0ICBudW1iZXJlZAorICAgICAgIHBhaXIgIHRoYXQgIGhhcyBiZWVuIHNldC4gRm9yIGV4YW1wbGUsIGlmIHR3byBzdWJzdHJpbmdzIGhhdmUgYmVlbiBjYXAtCisgICAgICAgdHVyZWQsIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyAzLiBJZiB0aGVyZSBhcmUgbm8gY2FwdHVyaW5nICBzdWJwYXR0ZXJucywKKyAgICAgICB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYSBzdWNjZXNzZnVsIG1hdGNoIGlzIDEsIGluZGljYXRpbmcgdGhhdCBqdXN0IHRoZQorICAgICAgIGZpcnN0IHBhaXIgb2Ygb2Zmc2V0cyBoYXMgYmVlbiBzZXQuCisKKyAgICAgICBJZiBhIHBhdHRlcm4gdXNlcyB0aGUgXEsgZXNjYXBlIHNlcXVlbmNlIHdpdGhpbiBhICBwb3NpdGl2ZSAgYXNzZXJ0aW9uLAorICAgICAgIHRoZSByZXBvcnRlZCBzdGFydCBvZiBhIHN1Y2Nlc3NmdWwgbWF0Y2ggY2FuIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZW5kIG9mCisgICAgICAgdGhlIG1hdGNoLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBwYXR0ZXJuICAoPz1hYlxLKSAgaXMgIG1hdGNoZWQgIGFnYWluc3QKKyAgICAgICAiYWIiLCB0aGUgc3RhcnQgYW5kIGVuZCBvZmZzZXQgdmFsdWVzIGZvciB0aGUgbWF0Y2ggYXJlIDIgYW5kIDAuCisKKyAgICAgICBJZiAgYSAgY2FwdHVyaW5nIHN1YnBhdHRlcm4gZ3JvdXAgaXMgbWF0Y2hlZCByZXBlYXRlZGx5IHdpdGhpbiBhIHNpbmdsZQorICAgICAgIG1hdGNoIG9wZXJhdGlvbiwgaXQgaXMgdGhlIGxhc3QgcG9ydGlvbiBvZiB0aGUgc3ViamVjdCB0aGF0IGl0ICBtYXRjaGVkCisgICAgICAgdGhhdCBpcyByZXR1cm5lZC4KKworICAgICAgIElmIHRoZSBvdmVjdG9yIGlzIHRvbyBzbWFsbCB0byBob2xkIGFsbCB0aGUgY2FwdHVyZWQgc3Vic3RyaW5nIG9mZnNldHMsCisgICAgICAgYXMgbXVjaCBhcyBwb3NzaWJsZSBpcyBmaWxsZWQgaW4sIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBhICB2YWx1ZSAgb2YKKyAgICAgICB6ZXJvLiAgSWYgY2FwdHVyZWQgc3Vic3RyaW5ncyBhcmUgbm90IG9mIGludGVyZXN0LCBwY3JlMl9tYXRjaCgpIG1heSBiZQorICAgICAgIGNhbGxlZCB3aXRoIGEgbWF0Y2ggZGF0YSBibG9jayB3aG9zZSBvdmVjdG9yIGlzIG9mIG1pbmltdW0gbGVuZ3RoICh0aGF0CisgICAgICAgaXMsIG9uZSBwYWlyKS4gSG93ZXZlciwgaWYgdGhlIHBhdHRlcm4gY29udGFpbnMgYmFjayByZWZlcmVuY2VzIGFuZCB0aGUKKyAgICAgICBvdmVjdG9yIGlzIG5vdCBiaWcgZW5vdWdoIHRvIHJlbWVtYmVyIHRoZSByZWxhdGVkIHN1YnN0cmluZ3MsIFBDUkUyIGhhcworICAgICAgIHRvICBnZXQgIGFkZGl0aW9uYWwgIG1lbW9yeSBmb3IgdXNlIGR1cmluZyBtYXRjaGluZy4gVGh1cyBpdCBpcyB1c3VhbGx5CisgICAgICAgYWR2aXNhYmxlIHRvIHNldCB1cCBhIG1hdGNoIGRhdGEgYmxvY2sgY29udGFpbmluZyBhbiBvdmVjdG9yIG9mIHJlYXNvbi0KKyAgICAgICBhYmxlIHNpemUuCisKKyAgICAgICBJdCAgaXMgIHBvc3NpYmxlIGZvciBjYXB0dXJpbmcgc3VicGF0dGVybiBudW1iZXIgbisxIHRvIG1hdGNoIHNvbWUgcGFydAorICAgICAgIG9mIHRoZSBzdWJqZWN0IHdoZW4gc3VicGF0dGVybiBuIGhhcyBub3QgYmVlbiB1c2VkIGF0IGFsbC4gRm9yIGV4YW1wbGUsCisgICAgICAgaWYgIHRoZSAgc3RyaW5nICAiYWJjIiAgaXMgIG1hdGNoZWQgYWdhaW5zdCB0aGUgcGF0dGVybiAoYXwoeikpKGJjKSB0aGUKKyAgICAgICByZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24gaXMgNCwgYW5kIHN1YnBhdHRlcm5zIDEgYW5kIDMgYXJlIG1hdGNoZWQsIGJ1dAorICAgICAgIDIgIGlzICBub3QuICBXaGVuICB0aGlzIGhhcHBlbnMsIGJvdGggdmFsdWVzIGluIHRoZSBvZmZzZXQgcGFpcnMgY29ycmUtCisgICAgICAgc3BvbmRpbmcgdG8gdW51c2VkIHN1YnBhdHRlcm5zIGFyZSBzZXQgdG8gUENSRTJfVU5TRVQuCisKKyAgICAgICBPZmZzZXQgdmFsdWVzIHRoYXQgY29ycmVzcG9uZCB0byB1bnVzZWQgc3VicGF0dGVybnMgYXQgdGhlIGVuZCAgb2YgIHRoZQorICAgICAgIGV4cHJlc3Npb24gIGFyZSAgYWxzbyAgc2V0ICB0byAgUENSRTJfVU5TRVQuIEZvciBleGFtcGxlLCBpZiB0aGUgc3RyaW5nCisgICAgICAgImFiYyIgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBwYXR0ZXJuIChhYmMpKHgoeXopPyk/IHN1YnBhdHRlcm5zIDIgYW5kIDMKKyAgICAgICBhcmUgIG5vdCBtYXRjaGVkLiAgVGhlIHJldHVybiBmcm9tIHRoZSBmdW5jdGlvbiBpcyAyLCBiZWNhdXNlIHRoZSBoaWdoLQorICAgICAgIGVzdCB1c2VkIGNhcHR1cmluZyBzdWJwYXR0ZXJuIG51bWJlciBpcyAxLiBUaGUgb2Zmc2V0cyBmb3IgZm9yIHRoZSBzZWMtCisgICAgICAgb25kICBhbmQgIHRoaXJkICBjYXB0dXJpbmcgIHN1YnBhdHRlcm5zICAoYXNzdW1pbmcgIHRoZSB2ZWN0b3IgaXMgbGFyZ2UKKyAgICAgICBlbm91Z2gsIG9mIGNvdXJzZSkgYXJlIHNldCB0byBQQ1JFMl9VTlNFVC4KKworICAgICAgIEVsZW1lbnRzIGluIHRoZSBvdmVjdG9yIHRoYXQgZG8gbm90IGNvcnJlc3BvbmQgdG8gY2FwdHVyaW5nIHBhcmVudGhlc2VzCisgICAgICAgaW4gdGhlIHBhdHRlcm4gYXJlIG5ldmVyIGNoYW5nZWQuIFRoYXQgaXMsIGlmIGEgcGF0dGVybiBjb250YWlucyBuIGNhcC0KKyAgICAgICB0dXJpbmcgcGFyZW50aGVzZXMsIG5vIG1vcmUgdGhhbiBvdmVjdG9yWzBdIHRvIG92ZWN0b3JbMm4rMV0gYXJlIHNldCBieQorICAgICAgIHBjcmUyX21hdGNoKCkuICBUaGUgIG90aGVyICBlbGVtZW50cyByZXRhaW4gd2hhdGV2ZXIgdmFsdWVzIHRoZXkgcHJldmktCisgICAgICAgb3VzbHkgaGFkLgorCisKK09USEVSIElORk9STUFUSU9OIEFCT1VUIEEgTUFUQ0gKKworICAgICAgIFBDUkUyX1NQVFIgcGNyZTJfZ2V0X21hcmsocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSk7CisKKyAgICAgICBQQ1JFMl9TSVpFIHBjcmUyX2dldF9zdGFydGNoYXIocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSk7CisKKyAgICAgICBBcyB3ZWxsIGFzIHRoZSBvZmZzZXRzIGluIHRoZSBvdmVjdG9yLCBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCBhICBtYXRjaAorICAgICAgIGlzICByZXRhaW5lZCAgaW4gdGhlIG1hdGNoIGRhdGEgYmxvY2sgYW5kIGNhbiBiZSByZXRyaWV2ZWQgYnkgdGhlIGFib3ZlCisgICAgICAgZnVuY3Rpb25zIGluIGFwcHJvcHJpYXRlIGNpcmN1bXN0YW5jZXMuIElmIHRoZXkgIGFyZSAgY2FsbGVkICBhdCAgb3RoZXIKKyAgICAgICB0aW1lcywgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCisKKyAgICAgICBBZnRlciAgYSAgc3VjY2Vzc2Z1bCBtYXRjaCwgYSBwYXJ0aWFsIG1hdGNoIChQQ1JFMl9FUlJPUl9QQVJUSUFMKSwgb3IgYQorICAgICAgIGZhaWx1cmUgdG8gbWF0Y2ggKFBDUkUyX0VSUk9SX05PTUFUQ0gpLCBhICgqTUFSSykgbmFtZSAgbWF5ICBiZSAgYXZhaWwtCisgICAgICAgYWJsZSwgIGFuZCAgcGNyZTJfZ2V0X21hcmsoKSBjYW4gYmUgY2FsbGVkLiBJdCByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKKyAgICAgICB6ZXJvLXRlcm1pbmF0ZWQgbmFtZSwgd2hpY2ggaXMgd2l0aGluIHRoZSBjb21waWxlZCAgcGF0dGVybi4gIE90aGVyd2lzZQorICAgICAgIE5VTEwgIGlzIHJldHVybmVkLiBUaGUgbGVuZ3RoIG9mIHRoZSAoKk1BUkspIG5hbWUgKGV4Y2x1ZGluZyB0aGUgdGVybWktCisgICAgICAgbmF0aW5nIHplcm8pIGlzIHN0b3JlZCBpbiB0aGUgY29kZSB1bml0IHRoYXQgIHByZWNlZWRzICB0aGUgIG5hbWUuICBZb3UKKyAgICAgICBzaG91bGQgIHVzZSAgdGhpcyAgaW5zdGVhZCAgb2YgIHJlbHlpbmcgIG9uIHRoZSB0ZXJtaW5hdGluZyB6ZXJvIGlmIHRoZQorICAgICAgICgqTUFSSykgbmFtZSBtaWdodCBjb250YWluIGEgYmluYXJ5IHplcm8uCisKKyAgICAgICBBZnRlciBhIHN1Y2Nlc3NmdWwgbWF0Y2gsIHRoZSAoKk1BUkspIG5hbWUgdGhhdCBpcyByZXR1cm5lZCBpcyB0aGUgbGFzdAorICAgICAgIG9uZSAgZW5jb3VudGVyZWQgIG9uIHRoZSBtYXRjaGluZyBwYXRoIHRocm91Z2ggdGhlIHBhdHRlcm4uIEFmdGVyIGEgIm5vCisgICAgICAgbWF0Y2giIG9yIGEgIHBhcnRpYWwgIG1hdGNoLCAgdGhlICBsYXN0ICBlbmNvdW50ZXJlZCAgKCpNQVJLKSAgbmFtZSAgaXMKKyAgICAgICByZXR1cm5lZC4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoaXMgcGF0dGVybjoKKworICAgICAgICAgXigqTUFSSzpBKSgoKk1BUks6QilhfGIpYworCisgICAgICAgV2hlbiAgaXQgIG1hdGNoZXMgImJjIiwgdGhlIHJldHVybmVkIG1hcmsgaXMgQS4gVGhlIEIgbWFyayBpcyAic2VlbiIgaW4KKyAgICAgICB0aGUgZmlyc3QgYnJhbmNoIG9mIHRoZSBncm91cCwgYnV0IGl0IGlzIG5vdCBvbiB0aGUgbWF0Y2hpbmcgIHBhdGguICBPbgorICAgICAgIHRoZSAgb3RoZXIgIGhhbmQsICB3aGVuICB0aGlzIHBhdHRlcm4gZmFpbHMgdG8gbWF0Y2ggImJ4IiwgdGhlIHJldHVybmVkCisgICAgICAgbWFyayBpcyBCLgorCisgICAgICAgQWZ0ZXIgYSBzdWNjZXNzZnVsIG1hdGNoLCBhIHBhcnRpYWwgbWF0Y2gsIG9yIG9uZSBvZiAgdGhlICBpbnZhbGlkICBVVEYKKyAgICAgICBlcnJvcnMgIChmb3IgZXhhbXBsZSwgUENSRTJfRVJST1JfVVRGOF9FUlI1KSwgcGNyZTJfZ2V0X3N0YXJ0Y2hhcigpIGNhbgorICAgICAgIGJlIGNhbGxlZC4gQWZ0ZXIgYSBzdWNjZXNzZnVsIG9yIHBhcnRpYWwgbWF0Y2ggaXQgcmV0dXJucyB0aGUgY29kZSB1bml0CisgICAgICAgb2Zmc2V0ICBvZiAgdGhlIGNoYXJhY3RlciBhdCB3aGljaCB0aGUgbWF0Y2ggc3RhcnRlZC4gRm9yIGEgbm9uLXBhcnRpYWwKKyAgICAgICBtYXRjaCwgdGhpcyBjYW4gYmUgZGlmZmVyZW50IHRvIHRoZSB2YWx1ZSBvZiBvdmVjdG9yWzBdIGlmIHRoZSAgcGF0dGVybgorICAgICAgIGNvbnRhaW5zICB0aGUgIFxLIGVzY2FwZSBzZXF1ZW5jZS4gQWZ0ZXIgYSBwYXJ0aWFsIG1hdGNoLCBob3dldmVyLCB0aGlzCisgICAgICAgdmFsdWUgaXMgYWx3YXlzIHRoZSBzYW1lIGFzIG92ZWN0b3JbMF0gYmVjYXVzZSBcSyBkb2VzIG5vdCAgYWZmZWN0ICB0aGUKKyAgICAgICByZXN1bHQgb2YgYSBwYXJ0aWFsIG1hdGNoLgorCisgICAgICAgQWZ0ZXIgIGEgVVRGIGNoZWNrIGZhaWx1cmUsIHBjcmUyX2dldF9zdGFydGNoYXIoKSBjYW4gYmUgdXNlZCB0byBvYnRhaW4KKyAgICAgICB0aGUgY29kZSB1bml0IG9mZnNldCBvZiB0aGUgaW52YWxpZCBVVEYgY2hhcmFjdGVyLiBEZXRhaWxzIGFyZSBnaXZlbiBpbgorICAgICAgIHRoZSBwY3JlMnVuaWNvZGUgcGFnZS4KKworCitFUlJPUiBSRVRVUk5TIEZST00gcGNyZTJfbWF0Y2goKQorCisgICAgICAgSWYgIHBjcmUyX21hdGNoKCkgZmFpbHMsIGl0IHJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIuIFRoaXMgY2FuIGJlIGNvbi0KKyAgICAgICB2ZXJ0ZWQgdG8gYSB0ZXh0IHN0cmluZyBieSBjYWxsaW5nIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKCkuICBOZWdhdGl2ZQorICAgICAgIGVycm9yICBjb2RlcyAgYXJlICBhbHNvIHJldHVybmVkIGJ5IG90aGVyIGZ1bmN0aW9ucywgYW5kIGFyZSBkb2N1bWVudGVkCisgICAgICAgd2l0aCB0aGVtLiAgVGhlIGNvZGVzIGFyZSBnaXZlbiBuYW1lcyBpbiB0aGUgaGVhZGVyIGZpbGUuIElmIFVURiBjaGVjay0KKyAgICAgICBpbmcgaXMgaW4gZm9yY2UgYW5kIGFuIGludmFsaWQgVVRGIHN1YmplY3Qgc3RyaW5nIGlzIGRldGVjdGVkLCBvbmUgb2YgYQorICAgICAgIG51bWJlciBvZiBVVEYtc3BlY2lmaWMgbmVnYXRpdmUgZXJyb3IgY29kZXMgaXMgIHJldHVybmVkLiAgRGV0YWlscyAgYXJlCisgICAgICAgZ2l2ZW4gaW4gdGhlIHBjcmUydW5pY29kZSBwYWdlLiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgb3RoZXIgZXJyb3JzIHRoYXQKKyAgICAgICBtYXkgYmUgcmV0dXJuZWQgYnkgcGNyZTJfbWF0Y2goKToKKworICAgICAgICAgUENSRTJfRVJST1JfTk9NQVRDSAorCisgICAgICAgVGhlIHN1YmplY3Qgc3RyaW5nIGRpZCBub3QgbWF0Y2ggdGhlIHBhdHRlcm4uCisKKyAgICAgICAgIFBDUkUyX0VSUk9SX1BBUlRJQUwKKworICAgICAgIFRoZSBzdWJqZWN0IHN0cmluZyBkaWQgbm90IG1hdGNoLCBidXQgaXQgZGlkIG1hdGNoIHBhcnRpYWxseS4gIFNlZSAgdGhlCisgICAgICAgcGNyZTJwYXJ0aWFsIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgb2YgcGFydGlhbCBtYXRjaGluZy4KKworICAgICAgICAgUENSRTJfRVJST1JfQkFETUFHSUMKKworICAgICAgIFBDUkUyIHN0b3JlcyBhIDQtYnl0ZSAibWFnaWMgbnVtYmVyIiBhdCB0aGUgc3RhcnQgb2YgdGhlIGNvbXBpbGVkIGNvZGUsCisgICAgICAgdG8gY2F0Y2ggdGhlIGNhc2Ugd2hlbiBpdCBpcyBwYXNzZWQgYSBqdW5rIHBvaW50ZXIuIFRoaXMgaXMgIHRoZSAgZXJyb3IKKyAgICAgICB0aGF0IGlzIHJldHVybmVkIHdoZW4gdGhlIG1hZ2ljIG51bWJlciBpcyBub3QgcHJlc2VudC4KKworICAgICAgICAgUENSRTJfRVJST1JfQkFETU9ERQorCisgICAgICAgVGhpcyAgZXJyb3IgIGlzICBnaXZlbiAgd2hlbiAgYSAgcGF0dGVybiB0aGF0IHdhcyBjb21waWxlZCBieSB0aGUgOC1iaXQKKyAgICAgICBsaWJyYXJ5IGlzIHBhc3NlZCB0byBhIDE2LWJpdCAgb3IgIDMyLWJpdCAgbGlicmFyeSAgZnVuY3Rpb24sICBvciAgdmljZQorICAgICAgIHZlcnNhLgorCisgICAgICAgICBQQ1JFMl9FUlJPUl9CQURPRkZTRVQKKworICAgICAgIFRoZSB2YWx1ZSBvZiBzdGFydG9mZnNldCB3YXMgZ3JlYXRlciB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHN1YmplY3QuCisKKyAgICAgICAgIFBDUkUyX0VSUk9SX0JBRE9QVElPTgorCisgICAgICAgQW4gdW5yZWNvZ25pemVkIGJpdCB3YXMgc2V0IGluIHRoZSBvcHRpb25zIGFyZ3VtZW50LgorCisgICAgICAgICBQQ1JFMl9FUlJPUl9CQURVVEZPRkZTRVQKKworICAgICAgIFRoZSBVVEYgY29kZSB1bml0IHNlcXVlbmNlIHRoYXQgd2FzIHBhc3NlZCBhcyBhIHN1YmplY3Qgd2FzIGNoZWNrZWQgYW5kCisgICAgICAgZm91bmQgdG8gYmUgdmFsaWQgKHRoZSBQQ1JFMl9OT19VVEZfQ0hFQ0sgb3B0aW9uIHdhcyBub3Qgc2V0KSwgYnV0ICB0aGUKKyAgICAgICB2YWx1ZSAgb2Ygc3RhcnRvZmZzZXQgZGlkIG5vdCBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIGEgVVRGIGNoYXJhY3RlcgorICAgICAgIG9yIHRoZSBlbmQgb2YgdGhlIHN1YmplY3QuCisKKyAgICAgICAgIFBDUkUyX0VSUk9SX0NBTExPVVQKKworICAgICAgIFRoaXMgZXJyb3IgaXMgbmV2ZXIgZ2VuZXJhdGVkIGJ5IHBjcmUyX21hdGNoKCkgaXRzZWxmLiBJdCAgaXMgIHByb3ZpZGVkCisgICAgICAgZm9yICB1c2UgIGJ5ICBjYWxsb3V0ICBmdW5jdGlvbnMgIHRoYXQgIHdhbnQgIHRvIGNhdXNlIHBjcmUyX21hdGNoKCkgb3IKKyAgICAgICBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSgpIHRvIHJldHVybiBhIGRpc3RpbmN0aXZlIGVycm9yIGNvZGUuICBTZWUgIHRoZQorICAgICAgIHBjcmUyY2FsbG91dCBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorCisgICAgICAgICBQQ1JFMl9FUlJPUl9JTlRFUk5BTAorCisgICAgICAgQW4gIHVuZXhwZWN0ZWQgIGludGVybmFsIGVycm9yIGhhcyBvY2N1cnJlZC4gVGhpcyBlcnJvciBjb3VsZCBiZSBjYXVzZWQKKyAgICAgICBieSBhIGJ1ZyBpbiBQQ1JFMiBvciBieSBvdmVyd3JpdGluZyBvZiB0aGUgY29tcGlsZWQgcGF0dGVybi4KKworICAgICAgICAgUENSRTJfRVJST1JfSklUX0JBRE9QVElPTgorCisgICAgICAgVGhpcyBlcnJvciBpcyByZXR1cm5lZCB3aGVuIGEgcGF0dGVybiAgdGhhdCAgd2FzICBzdWNjZXNzZnVsbHkgIHN0dWRpZWQKKyAgICAgICB1c2luZyAgSklUIGlzIGJlaW5nIG1hdGNoZWQsIGJ1dCB0aGUgbWF0Y2hpbmcgbW9kZSAocGFydGlhbCBvciBjb21wbGV0ZQorICAgICAgIG1hdGNoKSBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSBKSVQgY29tcGlsYXRpb24gbW9kZS4gIFdoZW4gIHRoZSAgSklUCisgICAgICAgZmFzdCAgcGF0aCAgZnVuY3Rpb24gIGlzIHVzZWQsIHRoaXMgZXJyb3IgbWF5IGJlIGFsc28gZ2l2ZW4gZm9yIGludmFsaWQKKyAgICAgICBvcHRpb25zLiBTZWUgdGhlIHBjcmUyaml0IGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICAgUENSRTJfRVJST1JfSklUX1NUQUNLTElNSVQKKworICAgICAgIFRoaXMgZXJyb3IgaXMgcmV0dXJuZWQgd2hlbiBhIHBhdHRlcm4gIHRoYXQgIHdhcyAgc3VjY2Vzc2Z1bGx5ICBzdHVkaWVkCisgICAgICAgdXNpbmcgIEpJVCAgaXMgYmVpbmcgbWF0Y2hlZCwgYnV0IHRoZSBtZW1vcnkgYXZhaWxhYmxlIGZvciB0aGUganVzdC1pbi0KKyAgICAgICB0aW1lIHByb2Nlc3Npbmcgc3RhY2sgaXMgbm90IGxhcmdlIGVub3VnaC4gU2VlIHRoZSBwY3JlMmppdCAgZG9jdW1lbnRhLQorICAgICAgIHRpb24gZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICAgUENSRTJfRVJST1JfTUFUQ0hMSU1JVAorCisgICAgICAgVGhlIGJhY2t0cmFja2luZyBsaW1pdCB3YXMgcmVhY2hlZC4KKworICAgICAgICAgUENSRTJfRVJST1JfTk9NRU1PUlkKKworICAgICAgIElmICBhICBwYXR0ZXJuICBjb250YWlucyAgYmFjayAgcmVmZXJlbmNlcywgIGJ1dCB0aGUgb3ZlY3RvciBpcyBub3QgYmlnCisgICAgICAgZW5vdWdoIHRvIHJlbWVtYmVyIHRoZSByZWZlcmVuY2VkIHN1YnN0cmluZ3MsIFBDUkUyICBnZXRzICBhICBibG9jayAgb2YKKyAgICAgICBtZW1vcnkgYXQgdGhlIHN0YXJ0IG9mIG1hdGNoaW5nIHRvIHVzZSBmb3IgdGhpcyBwdXJwb3NlLiBUaGVyZSBhcmUgc29tZQorICAgICAgIG90aGVyIHNwZWNpYWwgY2FzZXMgd2hlcmUgZXh0cmEgbWVtb3J5IGlzIG5lZWRlZCBkdXJpbmcgbWF0Y2hpbmcuICBUaGlzCisgICAgICAgZXJyb3IgaXMgZ2l2ZW4gd2hlbiBtZW1vcnkgY2Fubm90IGJlIG9idGFpbmVkLgorCisgICAgICAgICBQQ1JFMl9FUlJPUl9OVUxMCisKKyAgICAgICBFaXRoZXIgdGhlIGNvZGUsIHN1YmplY3QsIG9yIG1hdGNoX2RhdGEgYXJndW1lbnQgd2FzIHBhc3NlZCBhcyBOVUxMLgorCisgICAgICAgICBQQ1JFMl9FUlJPUl9SRUNVUlNFTE9PUAorCisgICAgICAgVGhpcyAgZXJyb3IgIGlzICByZXR1cm5lZCAgd2hlbiAgcGNyZTJfbWF0Y2goKSBkZXRlY3RzIGEgcmVjdXJzaW9uIGxvb3AKKyAgICAgICB3aXRoaW4gdGhlIHBhdHRlcm4uIFNwZWNpZmljYWxseSwgaXQgbWVhbnMgdGhhdCBlaXRoZXIgdGhlICB3aG9sZSAgcGF0LQorICAgICAgIHRlcm4gb3IgYSBzdWJwYXR0ZXJuIGhhcyBiZWVuIGNhbGxlZCByZWN1cnNpdmVseSBmb3IgdGhlIHNlY29uZCB0aW1lIGF0CisgICAgICAgdGhlIHNhbWUgcG9zaXRpb24gaW4gdGhlIHN1YmplY3QgIHN0cmluZy4gIFNvbWUgIHNpbXBsZSAgcGF0dGVybnMgIHRoYXQKKyAgICAgICBtaWdodCAgZG8gIHRoaXMgYXJlIGRldGVjdGVkIGFuZCBmYXVsdGVkIGF0IGNvbXBpbGUgdGltZSwgYnV0IG1vcmUgY29tLQorICAgICAgIHBsaWNhdGVkIGNhc2VzLCBpbiBwYXJ0aWN1bGFyIG11dHVhbCByZWN1cnNpb25zIGJldHdlZW4gIHR3byAgZGlmZmVyZW50CisgICAgICAgc3VicGF0dGVybnMsIGNhbm5vdCBiZSBkZXRlY3RlZCB1bnRpbCBtYXRjaGluZyBpcyBhdHRlbXB0ZWQuCisKKyAgICAgICAgIFBDUkUyX0VSUk9SX1JFQ1VSU0lPTkxJTUlUCisKKyAgICAgICBUaGUgaW50ZXJuYWwgcmVjdXJzaW9uIGxpbWl0IHdhcyByZWFjaGVkLgorCisKK0VYVFJBQ1RJTkcgQ0FQVFVSRUQgU1VCU1RSSU5HUyBCWSBOVU1CRVIKKworICAgICAgIGludCBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEsCisgICAgICAgICB1aW50MzJfdCBudW1iZXIsIFBDUkUyX1NJWkUgKmxlbmd0aCk7CisKKyAgICAgICBpbnQgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgICAgICAgIHVpbnQzMl90IG51bWJlciwgUENSRTJfVUNIQVIgKmJ1ZmZlciwKKyAgICAgICAgIFBDUkUyX1NJWkUgKmJ1ZmZsZW4pOworCisgICAgICAgaW50IHBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgICAgICAgIHVpbnQzMl90IG51bWJlciwgUENSRTJfVUNIQVIgKipidWZmZXJwdHIsCisgICAgICAgICBQQ1JFMl9TSVpFICpidWZmbGVuKTsKKworICAgICAgIHZvaWQgcGNyZTJfc3Vic3RyaW5nX2ZyZWUoUENSRTJfVUNIQVIgKmJ1ZmZlcik7CisKKyAgICAgICBDYXB0dXJlZCAgc3Vic3RyaW5ncyAgY2FuICBiZSBhY2Nlc3NlZCBkaXJlY3RseSBieSB1c2luZyB0aGUgb3ZlY3RvciBhcworICAgICAgIGRlc2NyaWJlZCBhYm92ZS4gIEZvciBjb252ZW5pZW5jZSwgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yCisgICAgICAgZXh0cmFjdGluZyAgIGNhcHR1cmVkICBzdWJzdHJpbmdzICBhcyAgbmV3LCAgc2VwYXJhdGUsICB6ZXJvLXRlcm1pbmF0ZWQKKyAgICAgICBzdHJpbmdzLiBBIHN1YnN0cmluZyB0aGF0IGNvbnRhaW5zIGEgYmluYXJ5IHplcm8gaXMgY29ycmVjdGx5IGV4dHJhY3RlZAorICAgICAgIGFuZCAgaGFzICBhICBmdXJ0aGVyICB6ZXJvICBhZGRlZCBvbiB0aGUgZW5kLCBidXQgdGhlIHJlc3VsdCBpcyBub3QsIG9mCisgICAgICAgY291cnNlLCBhIEMgc3RyaW5nLgorCisgICAgICAgVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIHNlY3Rpb24gaWRlbnRpZnkgc3Vic3RyaW5ncyBieSBudW1iZXIuIFRoZSBudW1iZXIKKyAgICAgICB6ZXJvIHJlZmVycyB0byB0aGUgZW50aXJlIG1hdGNoZWQgc3Vic3RyaW5nLCB3aXRoIGhpZ2hlciBudW1iZXJzIHJlZmVyLQorICAgICAgIHJpbmcgdG8gc3Vic3RyaW5ncyBjYXB0dXJlZCBieSBwYXJlbnRoZXNpemVkIGdyb3Vwcy4gIEFmdGVyICBhICBwYXJ0aWFsCisgICAgICAgbWF0Y2gsICBvbmx5ICBzdWJzdHJpbmcgIHplcm8gIGlzICBhdmFpbGFibGUuIEFuIGF0dGVtcHQgdG8gZXh0cmFjdCBhbnkKKyAgICAgICBvdGhlciBzdWJzdHJpbmcgZ2l2ZXMgdGhlIGVycm9yIFBDUkUyX0VSUk9SX1BBUlRJQUwuIFRoZSAgbmV4dCAgc2VjdGlvbgorICAgICAgIGRlc2NyaWJlcyBzaW1pbGFyIGZ1bmN0aW9ucyBmb3IgZXh0cmFjdGluZyBjYXB0dXJlZCBzdWJzdHJpbmdzIGJ5IG5hbWUuCisKKyAgICAgICBJZiAgYSAgcGF0dGVybiB1c2VzIHRoZSBcSyBlc2NhcGUgc2VxdWVuY2Ugd2l0aGluIGEgcG9zaXRpdmUgYXNzZXJ0aW9uLAorICAgICAgIHRoZSByZXBvcnRlZCBzdGFydCBvZiBhIHN1Y2Nlc3NmdWwgbWF0Y2ggY2FuIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZW5kIG9mCisgICAgICAgdGhlICBtYXRjaC4gICBGb3IgIGV4YW1wbGUsICBpZiB0aGUgcGF0dGVybiAoPz1hYlxLKSBpcyBtYXRjaGVkIGFnYWluc3QKKyAgICAgICAiYWIiLCB0aGUgc3RhcnQgYW5kIGVuZCBvZmZzZXQgdmFsdWVzIGZvciB0aGUgbWF0Y2ggYXJlICAyICBhbmQgIDAuICBJbgorICAgICAgIHRoaXMgIHNpdHVhdGlvbiwgIGNhbGxpbmcgIHRoZXNlIGZ1bmN0aW9ucyB3aXRoIGEgemVybyBzdWJzdHJpbmcgbnVtYmVyCisgICAgICAgZXh0cmFjdHMgYSB6ZXJvLWxlbmd0aCBlbXB0eSBzdHJpbmcuCisKKyAgICAgICBZb3UgY2FuIGZpbmQgdGhlIGxlbmd0aCBpbiBjb2RlIHVuaXRzIG9mIGEgY2FwdHVyZWQgIHN1YnN0cmluZyAgd2l0aG91dAorICAgICAgIGV4dHJhY3RpbmcgIGl0ICBieSBjYWxsaW5nIHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIoKS4gVGhlIGZpcnN0CisgICAgICAgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIHRoZSBtYXRjaCBkYXRhIGJsb2NrLCB0aGUgc2Vjb25kIGlzIHRoZSAgZ3JvdXAKKyAgICAgICBudW1iZXIsICBhbmQgdGhlIHRoaXJkIGlzIGEgcG9pbnRlciB0byBhIHZhcmlhYmxlIGludG8gd2hpY2ggdGhlIGxlbmd0aAorICAgICAgIGlzIHBsYWNlZC4gSWYgeW91IGp1c3Qgd2FudCB0byBrbm93IHdoZXRoZXIgb3Igbm90ICB0aGUgIHN1YnN0cmluZyAgaGFzCisgICAgICAgYmVlbiBjYXB0dXJlZCwgeW91IGNhbiBwYXNzIHRoZSB0aGlyZCBhcmd1bWVudCBhcyBOVUxMLgorCisgICAgICAgVGhlICBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcigpICBmdW5jdGlvbiAgY29waWVzICBhIGNhcHR1cmVkIHN1Yi0KKyAgICAgICBzdHJpbmcgaW50byBhIHN1cHBsaWVkIGJ1ZmZlciwgIHdoZXJlYXMgIHBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIoKQorICAgICAgIGNvcGllcyAgaXQgIGludG8gIG5ldyBtZW1vcnksIG9idGFpbmVkIHVzaW5nIHRoZSBzYW1lIG1lbW9yeSBhbGxvY2F0aW9uCisgICAgICAgZnVuY3Rpb24gdGhhdCB3YXMgdXNlZCBmb3IgdGhlIG1hdGNoIGRhdGEgYmxvY2suIFRoZSAgZmlyc3QgIHR3byAgYXJndS0KKyAgICAgICBtZW50cyAgb2YgIHRoZXNlICBmdW5jdGlvbnMgYXJlIGEgcG9pbnRlciB0byB0aGUgbWF0Y2ggZGF0YSBibG9jayBhbmQgYQorICAgICAgIGNhcHR1cmluZyBncm91cCBudW1iZXIuCisKKyAgICAgICBUaGUgZmluYWwgYXJndW1lbnRzIG9mIHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyKCkgYXJlIGEgcG9pbnRlciB0bworICAgICAgIHRoZSBidWZmZXIgYW5kIGEgcG9pbnRlciB0byBhIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgaXRzIGxlbmd0aCBpbiBjb2RlCisgICAgICAgdW5pdHMuICBUaGlzIGlzIHVwZGF0ZWQgdG8gY29udGFpbiB0aGUgYWN0dWFsIG51bWJlciBvZiBjb2RlIHVuaXRzIHVzZWQKKyAgICAgICBmb3IgdGhlIGV4dHJhY3RlZCBzdWJzdHJpbmcsIGV4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgemVyby4KKworICAgICAgIEZvciBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyKCkgdGhlIHRoaXJkIGFuZCBmb3VydGggYXJndW1lbnRzIHBvaW50CisgICAgICAgdG8gdmFyaWFibGVzIHRoYXQgYXJlIHVwZGF0ZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIG5ldyBtZW1vcnkgYW5kICB0aGUKKyAgICAgICBudW1iZXIgIG9mICBjb2RlIHVuaXRzIHRoYXQgY29tcHJpc2UgdGhlIHN1YnN0cmluZywgYWdhaW4gZXhjbHVkaW5nIHRoZQorICAgICAgIHRlcm1pbmF0aW5nIHplcm8uIFdoZW4gdGhlIHN1YnN0cmluZyBpcyBubyBsb25nZXIgIG5lZWRlZCwgIHRoZSAgbWVtb3J5CisgICAgICAgc2hvdWxkIGJlIGZyZWVkIGJ5IGNhbGxpbmcgcGNyZTJfc3Vic3RyaW5nX2ZyZWUoKS4KKworICAgICAgIFRoZSAgcmV0dXJuICB2YWx1ZSAgZnJvbSAgYWxsIHRoZXNlIGZ1bmN0aW9ucyBpcyB6ZXJvIGZvciBzdWNjZXNzLCBvciBhCisgICAgICAgbmVnYXRpdmUgZXJyb3IgY29kZS4gSWYgdGhlIHBhdHRlcm4gbWF0Y2ggIGZhaWxlZCwgIHRoZSAgbWF0Y2ggIGZhaWx1cmUKKyAgICAgICBjb2RlICBpcyAgcmV0dXJuZWQuICAgSWYgIGEgIHN1YnN0cmluZyBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8gaXMgdXNlZAorICAgICAgIGFmdGVyIGEgcGFydGlhbCBtYXRjaCwgUENSRTJfRVJST1JfUEFSVElBTCBpcyByZXR1cm5lZC4gT3RoZXIgIHBvc3NpYmxlCisgICAgICAgZXJyb3IgY29kZXMgYXJlOgorCisgICAgICAgICBQQ1JFMl9FUlJPUl9OT01FTU9SWQorCisgICAgICAgVGhlICBidWZmZXIgIHdhcyAgdG9vIHNtYWxsIGZvciBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcigpLCBvciB0aGUKKyAgICAgICBhdHRlbXB0IHRvIGdldCBtZW1vcnkgZmFpbGVkIGZvciBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyKCkuCisKKyAgICAgICAgIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HCisKKyAgICAgICBUaGVyZSBpcyBubyBzdWJzdHJpbmcgd2l0aCB0aGF0IG51bWJlciBpbiB0aGUgIHBhdHRlcm4sICB0aGF0ICBpcywgIHRoZQorICAgICAgIG51bWJlciBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMuCisKKyAgICAgICAgIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFCisKKyAgICAgICBUaGUgc3Vic3RyaW5nIG51bWJlciwgdGhvdWdoIG5vdCBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBjYXB0dXJlcyBpbgorICAgICAgIHRoZSBwYXR0ZXJuLCBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBzbG90cyBpbiB0aGUgb3ZlY3Rvciwgc28gdGhlCisgICAgICAgc3Vic3RyaW5nIGNvdWxkIG5vdCBiZSBjYXB0dXJlZC4KKworICAgICAgICAgUENSRTJfRVJST1JfVU5TRVQKKworICAgICAgIFRoZSAgc3Vic3RyaW5nICBkaWQgIG5vdCAgcGFydGljaXBhdGUgaW4gdGhlIG1hdGNoLiBGb3IgZXhhbXBsZSwgaWYgdGhlCisgICAgICAgcGF0dGVybiBpcyAoYWJjKXwoZGVmKSBhbmQgdGhlIHN1YmplY3QgaXMgImRlZiIsIGFuZCB0aGUgIG92ZWN0b3IgIGNvbi0KKyAgICAgICB0YWlucyBhdCBsZWFzdCB0d28gY2FwdHVyaW5nIHNsb3RzLCBzdWJzdHJpbmcgbnVtYmVyIDEgaXMgdW5zZXQuCisKKworRVhUUkFDVElORyBBIExJU1QgT0YgQUxMIENBUFRVUkVEIFNVQlNUUklOR1MKKworICAgICAgIGludCBwY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgICAgICAgIFBDUkUyX1VDSEFSICoqKmxpc3RwdHIsIFBDUkUyX1NJWkUgKipsZW5ndGhzcHRyKTsKKworICAgICAgIHZvaWQgcGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZShQQ1JFMl9TUFRSICpsaXN0KTsKKworICAgICAgIFRoZSAgcGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0KCkgIGZ1bmN0aW9uICBleHRyYWN0cyAgYWxsIGF2YWlsYWJsZSBzdWItCisgICAgICAgc3RyaW5ncyBhbmQgYnVpbGRzIGEgbGlzdCBvZiBwb2ludGVycyB0byAgdGhlbS4gIEl0ICBhbHNvICAob3B0aW9uYWxseSkKKyAgICAgICBidWlsZHMgIGEgIHNlY29uZCAgbGlzdCAgdGhhdCAgY29udGFpbnMgIHRoZWlyIGxlbmd0aHMgKGluIGNvZGUgdW5pdHMpLAorICAgICAgIGV4Y2x1ZGluZyBhIHRlcm1pbmF0aW5nIHplcm8gdGhhdCBpcyBhZGRlZCB0byBlYWNoIG9mIHRoZW0uIEFsbCB0aGlzIGlzCisgICAgICAgZG9uZSBpbiBhIHNpbmdsZSBibG9jayBvZiBtZW1vcnkgdGhhdCBpcyBvYnRhaW5lZCB1c2luZyB0aGUgc2FtZSBtZW1vcnkKKyAgICAgICBhbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQgd2FzIHVzZWQgdG8gZ2V0IHRoZSBtYXRjaCBkYXRhIGJsb2NrLgorCisgICAgICAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBvbmx5IGFmdGVyIGEgc3VjY2Vzc2Z1bCBtYXRjaC4gIElmICBjYWxsZWQKKyAgICAgICBhZnRlciBhIHBhcnRpYWwgbWF0Y2gsIHRoZSBlcnJvciBjb2RlIFBDUkUyX0VSUk9SX1BBUlRJQUwgaXMgcmV0dXJuZWQuCisKKyAgICAgICBUaGUgIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBibG9jayBpcyByZXR1cm5lZCB2aWEgbGlzdHB0ciwgd2hpY2ggaXMgYWxzbworICAgICAgIHRoZSBzdGFydCBvZiB0aGUgbGlzdCBvZiBzdHJpbmcgcG9pbnRlcnMuIFRoZSBlbmQgb2YgdGhlIGxpc3QgaXMgbWFya2VkCisgICAgICAgYnkgIGEgIE5VTEwgcG9pbnRlci4gVGhlIGFkZHJlc3Mgb2YgdGhlIGxpc3Qgb2YgbGVuZ3RocyBpcyByZXR1cm5lZCB2aWEKKyAgICAgICBsZW5ndGhzcHRyLiBJZiB5b3VyIHN0cmluZ3MgZG8gbm90IGNvbnRhaW4gYmluYXJ5IHplcm9zIGFuZCB5b3UgZG8gIG5vdAorICAgICAgIHRoZXJlZm9yZSBuZWVkIHRoZSBsZW5ndGhzLCB5b3UgbWF5IHN1cHBseSBOVUxMIGFzIHRoZSBsZW5ndGhzcHRyIGFyZ3UtCisgICAgICAgbWVudCB0byBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiBhIGxpc3Qgb2YgbGVuZ3Rocy4gIFRoZSAgeWllbGQgIG9mICB0aGUKKyAgICAgICBmdW5jdGlvbiAgaXMgemVybyBpZiBhbGwgd2VudCB3ZWxsLCBvciBQQ1JFMl9FUlJPUl9OT01FTU9SWSBpZiB0aGUgbWVtLQorICAgICAgIG9yeSBibG9jayBjb3VsZCBub3QgYmUgb2J0YWluZWQuIFdoZW4gdGhlIGxpc3QgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgIGl0CisgICAgICAgc2hvdWxkIGJlIGZyZWVkIGJ5IGNhbGxpbmcgcGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZSgpLgorCisgICAgICAgSWYgdGhpcyBmdW5jdGlvbiBlbmNvdW50ZXJzIGEgc3Vic3RyaW5nIHRoYXQgaXMgdW5zZXQsIHdoaWNoIGNhbiBoYXBwZW4KKyAgICAgICB3aGVuIGNhcHR1cmluZyBzdWJwYXR0ZXJuIG51bWJlciBuKzEgbWF0Y2hlcyBzb21lIHBhcnQgb2YgdGhlICBzdWJqZWN0LAorICAgICAgIGJ1dCAgc3VicGF0dGVybiBuIGhhcyBub3QgYmVlbiB1c2VkIGF0IGFsbCwgaXQgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAgVGhpcyBjYW4gYmUgZGlzdGluZ3Vpc2hlZCAgZnJvbSAgYSAgZ2VudWluZSAgemVyby1sZW5ndGggIHN1YnN0cmluZyAgYnkKKyAgICAgICBpbnNwZWN0aW5nICB0aGUgIGFwcHJvcHJpYXRlICBvZmZzZXQgIGluICB0aGUgIG92ZWN0b3IsICB3aGljaCAgY29udGFpbgorICAgICAgIFBDUkUyX1VOU0VUICBmb3IgICB1bnNldCAgIHN1YnN0cmluZ3MsICAgb3IgICBieSAgIGNhbGxpbmcgICBwY3JlMl9zdWItCisgICAgICAgc3RyaW5nX2xlbmd0aF9ieW51bWJlcigpLgorCisKK0VYVFJBQ1RJTkcgQ0FQVFVSRUQgU1VCU1RSSU5HUyBCWSBOQU1FCisKKyAgICAgICBpbnQgcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUoY29uc3QgcGNyZTJfY29kZSAqY29kZSwKKyAgICAgICAgIFBDUkUyX1NQVFIgbmFtZSk7CisKKyAgICAgICBpbnQgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgICAgICAgIFBDUkUyX1NQVFIgbmFtZSwgUENSRTJfU0laRSAqbGVuZ3RoKTsKKworICAgICAgIGludCBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgICAgICAgIFBDUkUyX1NQVFIgbmFtZSwgUENSRTJfVUNIQVIgKmJ1ZmZlciwgUENSRTJfU0laRSAqYnVmZmxlbik7CisKKyAgICAgICBpbnQgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgICAgICAgIFBDUkUyX1NQVFIgbmFtZSwgUENSRTJfVUNIQVIgKipidWZmZXJwdHIsIFBDUkUyX1NJWkUgKmJ1ZmZsZW4pOworCisgICAgICAgdm9pZCBwY3JlMl9zdWJzdHJpbmdfZnJlZShQQ1JFMl9VQ0hBUiAqYnVmZmVyKTsKKworICAgICAgIFRvICBleHRyYWN0IGEgc3Vic3RyaW5nIGJ5IG5hbWUsIHlvdSBmaXJzdCBoYXZlIHRvIGZpbmQgYXNzb2NpYXRlZCBudW0tCisgICAgICAgYmVyLiAgRm9yIGV4YW1wbGUsIGZvciB0aGlzIHBhdHRlcm46CisKKyAgICAgICAgIChhKyliKD88eHh4PlxkKykuLi4KKworICAgICAgIHRoZSBudW1iZXIgb2YgdGhlIHN1YnBhdHRlcm4gY2FsbGVkICJ4eHgiIGlzIDIuIElmIHRoZSBuYW1lIGlzIGtub3duIHRvCisgICAgICAgYmUgIHVuaXF1ZSAgKFBDUkUyX0RVUE5BTUVTICB3YXMgbm90IHNldCksIHlvdSBjYW4gZmluZCB0aGUgbnVtYmVyIGZyb20KKyAgICAgICB0aGUgbmFtZSBieSBjYWxsaW5nIHBjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lKCkuIFRoZSBmaXJzdCBhcmd1LQorICAgICAgIG1lbnQgIGlzIHRoZSBjb21waWxlZCBwYXR0ZXJuLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgbmFtZS4gVGhlIHlpZWxkIG9mCisgICAgICAgdGhlIGZ1bmN0aW9uIGlzIHRoZSBzdWJwYXR0ZXJuIG51bWJlciwgUENSRTJfRVJST1JfTk9TVUJTVFJJTkcgaWYgdGhlcmUKKyAgICAgICBpcyAgbm8gIHN1YnBhdHRlcm4gIG9mICB0aGF0ICBuYW1lLCBvciBQQ1JFMl9FUlJPUl9OT1VOSVFVRVNVQlNUUklORyBpZgorICAgICAgIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgc3VicGF0dGVybiBvZiB0aGF0IG5hbWUuIEdpdmVuIHRoZSAgbnVtYmVyLCAgeW91CisgICAgICAgY2FuICBleHRyYWN0ICB0aGUgIHN1YnN0cmluZyAgZGlyZWN0bHksICBvciAgdXNlICBvbmUgIG9mIHRoZSBmdW5jdGlvbnMKKyAgICAgICBkZXNjcmliZWQgYWJvdmUuCisKKyAgICAgICBGb3IgY29udmVuaWVuY2UsIHRoZXJlIGFyZSBhbHNvICJieW5hbWUiIGZ1bmN0aW9ucyB0aGF0ICBjb3JyZXNwb25kICB0bworICAgICAgIHRoZSAgImJ5bnVtYmVyIiAgZnVuY3Rpb25zLCAgdGhlICBvbmx5IGRpZmZlcmVuY2UgYmVpbmcgdGhhdCB0aGUgc2Vjb25kCisgICAgICAgYXJndW1lbnQgaXMgYSBuYW1lIGluc3RlYWQgb2YgYSBudW1iZXIuIElmIFBDUkUyX0RVUE5BTUVTICBpcyAgc2V0ICBhbmQKKyAgICAgICB0aGVyZSBhcmUgZHVwbGljYXRlIG5hbWVzLCB0aGVzZSBmdW5jdGlvbnMgc2NhbiBhbGwgdGhlIGdyb3VwcyB3aXRoIHRoZQorICAgICAgIGdpdmVuIG5hbWUsIGFuZCByZXR1cm4gdGhlIGZpcnN0IG5hbWVkIHN0cmluZyB0aGF0IGlzIHNldC4KKworICAgICAgIElmIHRoZXJlIGFyZSBubyBncm91cHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgUENSRTJfRVJST1JfTk9TVUJTVFJJTkcgIGlzCisgICAgICAgcmV0dXJuZWQuICBJZiAgYWxsICBncm91cHMgIHdpdGggdGhlIG5hbWUgaGF2ZSBudW1iZXJzIHRoYXQgYXJlIGdyZWF0ZXIKKyAgICAgICB0aGFuIHRoZSBudW1iZXIgb2Ygc2xvdHMgaW4gIHRoZSAgb3ZlY3RvciwgIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFICBpcworICAgICAgIHJldHVybmVkLiAgSWYgIHRoZXJlICBpcyBhdCBsZWFzdCBvbmUgZ3JvdXAgd2l0aCBhIHNsb3QgaW4gdGhlIG92ZWN0b3IsCisgICAgICAgYnV0IG5vIGdyb3VwIGlzIGZvdW5kIHRvIGJlIHNldCwgUENSRTJfRVJST1JfVU5TRVQgaXMgcmV0dXJuZWQuCisKKyAgICAgICBXYXJuaW5nOiBJZiB0aGUgcGF0dGVybiB1c2VzIHRoZSAoP3wgZmVhdHVyZSB0byBzZXQgdXAgbXVsdGlwbGUgc3VicGF0LQorICAgICAgIHRlcm5zICB3aXRoICB0aGUgIHNhbWUgbnVtYmVyLCBhcyBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gb24gZHVwbGljYXRlCisgICAgICAgc3VicGF0dGVybiBudW1iZXJzIGluIHRoZSBwY3JlMnBhdHRlcm4gcGFnZSwgeW91IGNhbm5vdCAgdXNlICBuYW1lcyAgdG8KKyAgICAgICBkaXN0aW5ndWlzaCAgdGhlICBkaWZmZXJlbnQgc3VicGF0dGVybnMsIGJlY2F1c2UgbmFtZXMgYXJlIG5vdCBpbmNsdWRlZAorICAgICAgIGluIHRoZSBjb21waWxlZCBjb2RlLiBUaGUgbWF0Y2hpbmcgcHJvY2VzcyB1c2VzIG9ubHkgbnVtYmVycy4gRm9yICB0aGlzCisgICAgICAgcmVhc29uLCAgdGhlICB1c2Ugb2YgZGlmZmVyZW50IG5hbWVzIGZvciBzdWJwYXR0ZXJucyBvZiB0aGUgc2FtZSBudW1iZXIKKyAgICAgICBjYXVzZXMgYW4gZXJyb3IgYXQgY29tcGlsZSB0aW1lLgorCisKK0NSRUFUSU5HIEEgTkVXIFNUUklORyBXSVRIIFNVQlNUSVRVVElPTlMKKworICAgICAgIGludCBwY3JlMl9zdWJzdGl0dXRlKGNvbnN0IHBjcmUyX2NvZGUgKmNvZGUsIFBDUkUyX1NQVFIgc3ViamVjdCwKKyAgICAgICAgIFBDUkUyX1NJWkUgbGVuZ3RoLCBQQ1JFMl9TSVpFIHN0YXJ0b2Zmc2V0LAorICAgICAgICAgdWludDMyX3Qgb3B0aW9ucywgcGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgICAgICAgIHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0LCBQQ1JFMl9TUFRSIHJlcGxhY2VtZW50LAorICAgICAgICAgUENSRTJfU0laRSBybGVuZ3RoLCBQQ1JFMl9VQ0hBUiAqb3V0cHV0YnVmZmVyUCwKKyAgICAgICAgIFBDUkUyX1NJWkUgKm91dGxlbmd0aHB0cik7CisKKyAgICAgICBUaGlzIGZ1bmN0aW9uIGNhbGxzIHBjcmUyX21hdGNoKCkgYW5kIHRoZW4gbWFrZXMgYSBjb3B5IG9mIHRoZSAgc3ViamVjdAorICAgICAgIHN0cmluZyAgaW4gIG91dHB1dGJ1ZmZlciwgIHJlcGxhY2luZyB0aGUgcGFydCB0aGF0IHdhcyBtYXRjaGVkIHdpdGggdGhlCisgICAgICAgcmVwbGFjZW1lbnQgc3RyaW5nLCB3aG9zZSBsZW5ndGggaXMgc3VwcGxpZWQgaW4gcmxlbmd0aC4gIFRoaXMgIGNhbiAgYmUKKyAgICAgICBnaXZlbiBhcyBQQ1JFMl9aRVJPX1RFUk1JTkFURUQgZm9yIGEgemVyby10ZXJtaW5hdGVkIHN0cmluZy4gTWF0Y2hlcyBpbgorICAgICAgIHdoaWNoIGEgXEsgaXRlbSBpbiBhIGxvb2thaGVhZCBpbiB0aGUgcGF0dGVybiBjYXVzZXMgdGhlIG1hdGNoICB0byAgZW5kCisgICAgICAgYmVmb3JlIGl0IHN0YXJ0cyBhcmUgbm90IHN1cHBvcnRlZCwgYW5kIGdpdmUgcmlzZSB0byBhbiBlcnJvciByZXR1cm4uCisKKyAgICAgICBUaGUgIGZpcnN0ICBzZXZlbiAgYXJndW1lbnRzICBvZiBwY3JlMl9zdWJzdGl0dXRlKCkgYXJlIHRoZSBzYW1lIGFzIGZvcgorICAgICAgIHBjcmUyX21hdGNoKCksIGV4Y2VwdCB0aGF0IHRoZSBwYXJ0aWFsIG1hdGNoaW5nIG9wdGlvbnMgYXJlIG5vdCBwZXJtaXQtCisgICAgICAgdGVkLCAgYW5kICBtYXRjaF9kYXRhIG1heSBiZSBwYXNzZWQgYXMgTlVMTCwgaW4gd2hpY2ggY2FzZSBhIG1hdGNoIGRhdGEKKyAgICAgICBibG9jayBpcyBvYnRhaW5lZCBhbmQgZnJlZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHVzaW5nIG1lbW9yeSAgbWFuYWdlLQorICAgICAgIG1lbnQgIGZ1bmN0aW9ucyBmcm9tIHRoZSBtYXRjaCBjb250ZXh0LCBpZiBwcm92aWRlZCwgb3IgZWxzZSB0aG9zZSB0aGF0CisgICAgICAgd2VyZSB1c2VkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGNvbXBpbGVkIGNvZGUuCisKKyAgICAgICBUaGUgb3V0bGVuZ3RocHRyIGFyZ3VtZW50IG11c3QgcG9pbnQgdG8gYSB2YXJpYWJsZSAgdGhhdCAgY29udGFpbnMgIHRoZQorICAgICAgIGxlbmd0aCwgIGluICBjb2RlICB1bml0cywgb2YgdGhlIG91dHB1dCBidWZmZXIuIElmIHRoZSBmdW5jdGlvbiBpcyBzdWMtCisgICAgICAgY2Vzc2Z1bCwgdGhlIHZhbHVlIGlzIHVwZGF0ZWQgdG8gY29udGFpbiB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgIHN0cmluZywKKyAgICAgICBleGNsdWRpbmcgdGhlIHRyYWlsaW5nIHplcm8gdGhhdCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkLgorCisgICAgICAgSWYgIHRoZSAgZnVuY3Rpb24gIGlzICBub3QgIHN1Y2Nlc3NmdWwsICB0aGUgdmFsdWUgc2V0IHZpYSBvdXRsZW5ndGhwdHIKKyAgICAgICBkZXBlbmRzIG9uIHRoZSB0eXBlIG9mIGVycm9yLiBGb3IgIHN5bnRheCAgZXJyb3JzICBpbiAgdGhlICByZXBsYWNlbWVudAorICAgICAgIHN0cmluZywgIHRoZSAgdmFsdWUgIGlzICB0aGUgb2Zmc2V0IGluIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgd2hlcmUgdGhlCisgICAgICAgZXJyb3Igd2FzIGRldGVjdGVkLiBGb3Igb3RoZXIgIGVycm9ycywgIHRoZSAgdmFsdWUgIGlzICBQQ1JFMl9VTlNFVCAgYnkKKyAgICAgICBkZWZhdWx0LiAgVGhpcyAgaW5jbHVkZXMgdGhlIGNhc2Ugb2YgdGhlIG91dHB1dCBidWZmZXIgYmVpbmcgdG9vIHNtYWxsLAorICAgICAgIHVubGVzcyBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCBpcyBzZXQgKHNlZSAgYmVsb3cpLCAgaW4gIHdoaWNoCisgICAgICAgY2FzZSAgdGhlICB2YWx1ZSAgaXMgdGhlIG1pbmltdW0gbGVuZ3RoIG5lZWRlZCwgaW5jbHVkaW5nIHNwYWNlIGZvciB0aGUKKyAgICAgICB0cmFpbGluZyB6ZXJvLiBOb3RlIHRoYXQgaW4gIG9yZGVyICB0byAgY29tcHV0ZSAgdGhlICByZXF1aXJlZCAgbGVuZ3RoLAorICAgICAgIHBjcmUyX3N1YnN0aXR1dGUoKSAgaGFzICB0byAgc2ltdWxhdGUgIGFsbCAgdGhlICBtYXRjaGluZyAgYW5kIGNvcHlpbmcsCisgICAgICAgaW5zdGVhZCBvZiBnaXZpbmcgYW4gZXJyb3IgcmV0dXJuIGFzIHNvb24gYXMgdGhlIGJ1ZmZlciBvdmVyZmxvd3MuIE5vdGUKKyAgICAgICBhbHNvIHRoYXQgdGhlIGxlbmd0aCBpcyBpbiBjb2RlIHVuaXRzLCBub3QgYnl0ZXMuCisKKyAgICAgICBJbiAgdGhlIHJlcGxhY2VtZW50IHN0cmluZywgd2hpY2ggaXMgaW50ZXJwcmV0ZWQgYXMgYSBVVEYgc3RyaW5nIGluIFVURgorICAgICAgIG1vZGUsIGFuZCBpcyBjaGVja2VkIGZvciBVVEYgIHZhbGlkaXR5ICB1bmxlc3MgIHRoZSAgUENSRTJfTk9fVVRGX0NIRUNLCisgICAgICAgb3B0aW9uIGlzIHNldCwgYSBkb2xsYXIgY2hhcmFjdGVyIGlzIGFuIGVzY2FwZSBjaGFyYWN0ZXIgdGhhdCBjYW4gc3BlYy0KKyAgICAgICBpZnkgdGhlIGluc2VydGlvbiBvZiBjaGFyYWN0ZXJzIGZyb20gY2FwdHVyaW5nIGdyb3VwcyBvciAoKk1BUkspICBpdGVtcworICAgICAgIGluIHRoZSBwYXR0ZXJuLiBUaGUgZm9sbG93aW5nIGZvcm1zIGFyZSBhbHdheXMgcmVjb2duaXplZDoKKworICAgICAgICAgJCQgICAgICAgICAgICAgICAgICBpbnNlcnQgYSBkb2xsYXIgY2hhcmFjdGVyCisgICAgICAgICAkPG4+IG9yICR7PG4+fSAgICAgIGluc2VydCB0aGUgY29udGVudHMgb2YgZ3JvdXAgPG4+CisgICAgICAgICAkKk1BUksgb3IgJHsqTUFSS30gIGluc2VydCB0aGUgbmFtZSBvZiB0aGUgbGFzdCAoKk1BUkspIGVuY291bnRlcmVkCisKKyAgICAgICBFaXRoZXIgIGEgIGdyb3VwICBudW1iZXIgIG9yICBhICBncm91cCBuYW1lIGNhbiBiZSBnaXZlbiBmb3IgPG4+LiBDdXJseQorICAgICAgIGJyYWNrZXRzIGFyZSByZXF1aXJlZCBvbmx5IGlmIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIHdvdWxkICBiZSAgaW50ZXItCisgICAgICAgcHJldGVkIGFzIHBhcnQgb2YgdGhlIG51bWJlciBvciBuYW1lLiBUaGUgbnVtYmVyIG1heSBiZSB6ZXJvIHRvIGluY2x1ZGUKKyAgICAgICB0aGUgZW50aXJlIG1hdGNoZWQgc3RyaW5nLiAgIEZvciAgZXhhbXBsZSwgIGlmICB0aGUgIHBhdHRlcm4gIGEoYiljICBpcworICAgICAgIG1hdGNoZWQgIHdpdGggIj1hYmM9IiBhbmQgdGhlIHJlcGxhY2VtZW50IHN0cmluZyAiKyQxJDAkMSsiLCB0aGUgcmVzdWx0CisgICAgICAgaXMgIj0rYmFiY2IrPSIuCisKKyAgICAgICBUaGUgZmFjaWxpdHkgZm9yIGluc2VydGluZyBhICgqTUFSSykgbmFtZSBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHNpbXBsZQorICAgICAgIHNpbXVsdGFuZW91cyBzdWJzdGl0dXRpb25zLCBhcyB0aGlzIHBjcmUydGVzdCBleGFtcGxlIHNob3dzOgorCisgICAgICAgICAvKCo6cGVhcilhcHBsZXwoKjpvcmFuZ2UpbGVtb24vZyxyZXBsYWNlPSR7Kk1BUkt9CisgICAgICAgICAgICAgYXBwbGUgbGVtb24KKyAgICAgICAgICAyOiBwZWFyIG9yYW5nZQorCisgICAgICAgQXMgIHdlbGwgYXMgdGhlIHVzdWFsIG9wdGlvbnMgZm9yIHBjcmUyX21hdGNoKCksIGEgbnVtYmVyIG9mIGFkZGl0aW9uYWwKKyAgICAgICBvcHRpb25zIGNhbiBiZSBzZXQgaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQuCisKKyAgICAgICBQQ1JFMl9TVUJTVElUVVRFX0dMT0JBTCBjYXVzZXMgdGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciB0aGUgc3ViamVjdAorICAgICAgIHN0cmluZywgIHJlcGxhY2luZyAgZXZlcnkgIG1hdGNoaW5nIHN1YnN0cmluZy4gSWYgdGhpcyBpcyBub3Qgc2V0LCBvbmx5CisgICAgICAgdGhlIGZpcnN0IG1hdGNoaW5nIHN1YnN0cmluZyBpcyByZXBsYWNlZC4gSWYgYW55IG1hdGNoZWQgc3Vic3RyaW5nICBoYXMKKyAgICAgICB6ZXJvICBsZW5ndGgsIGFmdGVyIHRoZSBzdWJzdGl0dXRpb24gaGFzIGhhcHBlbmVkLCBhbiBhdHRlbXB0IHRvIGZpbmQgYQorICAgICAgIG5vbi1lbXB0eSBtYXRjaCBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpcyBwZXJmb3JtZWQuIElmIHRoaXMgaXMgbm90ICBzdWMtCisgICAgICAgY2Vzc2Z1bCwgIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGFkdmFuY2VkIGJ5IG9uZSBjaGFyYWN0ZXIgZXhjZXB0IHdoZW4KKyAgICAgICBDUkxGIGlzIGEgdmFsaWQgbmV3bGluZSBzZXF1ZW5jZSBhbmQgdGhlIG5leHQgdHdvICBjaGFyYWN0ZXJzICBhcmUgIENSLAorICAgICAgIExGLiBJbiB0aGlzIGNhc2UsIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzIGFkdmFuY2VkIGJ5IHR3byBjaGFyYWN0ZXJzLgorCisgICAgICAgUENSRTJfU1VCU1RJVFVURV9PVkVSRkxPV19MRU5HVEggIGNoYW5nZXMgIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBvdXRwdXQKKyAgICAgICBidWZmZXIgaXMgdG9vIHNtYWxsLiBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gcmV0dXJuIFBDUkUyX0VSUk9SX05PTUVNLQorICAgICAgIE9SWSAgaW1tZWRpYXRlbHkuICBJZiAgdGhpcyAgb3B0aW9uIGlzIHNldCwgaG93ZXZlciwgcGNyZTJfc3Vic3RpdHV0ZSgpCisgICAgICAgY29udGludWVzIHRvIGdvIHRocm91Z2ggdGhlIG1vdGlvbnMgb2YgbWF0Y2hpbmcgYW5kIHN1YnN0aXR1dGluZyAod2l0aC0KKyAgICAgICBvdXQsICBvZiBjb3Vyc2UsIHdyaXRpbmcgYW55dGhpbmcpIGluIG9yZGVyIHRvIGNvbXB1dGUgdGhlIHNpemUgb2YgYnVmLQorICAgICAgIGZlciB0aGF0IGlzIG5lZWRlZC4gVGhpcyB2YWx1ZSBpcyAgcGFzc2VkICBiYWNrICB2aWEgIHRoZSAgb3V0bGVuZ3RocHRyCisgICAgICAgdmFyaWFibGUsICAgIHdpdGggICAgdGhlICAgcmVzdWx0ICAgb2YgICB0aGUgICBmdW5jdGlvbiAgIHN0aWxsICAgYmVpbmcKKyAgICAgICBQQ1JFMl9FUlJPUl9OT01FTU9SWS4KKworICAgICAgIFBhc3NpbmcgYSBidWZmZXIgc2l6ZSBvZiB6ZXJvIGlzIGEgcGVybWl0dGVkIHdheSAgb2YgIGZpbmRpbmcgIG91dCAgaG93CisgICAgICAgbXVjaCAgbWVtb3J5ICBpcyBuZWVkZWQgZm9yIGdpdmVuIHN1YnN0aXR1dGlvbi4gSG93ZXZlciwgdGhpcyBkb2VzIG1lYW4KKyAgICAgICB0aGF0IHRoZSBlbnRpcmUgb3BlcmF0aW9uIGlzIGNhcnJpZWQgb3V0IHR3aWNlLiBEZXBlbmRpbmcgb24gdGhlIGFwcGxpLQorICAgICAgIGNhdGlvbiwgIGl0ICBtYXkgIGJlIG1vcmUgZWZmaWNpZW50IHRvIGFsbG9jYXRlIGEgbGFyZ2UgYnVmZmVyIGFuZCBmcmVlCisgICAgICAgdGhlICBleGNlc3MgIGFmdGVyd2FyZHMsICBpbnN0ZWFkICAgb2YgICB1c2luZyAgIFBDUkUyX1NVQlNUSVRVVEVfT1ZFUi0KKyAgICAgICBGTE9XX0xFTkdUSC4KKworICAgICAgIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCAgY2F1c2VzICByZWZlcmVuY2VzICB0byBjYXB0dXJpbmcgZ3JvdXBzCisgICAgICAgdGhhdCBkbyBub3QgYXBwZWFyIGluIHRoZSBwYXR0ZXJuIHRvIGJlIHRyZWF0ZWQgYXMgdW5zZXQgIGdyb3Vwcy4gIFRoaXMKKyAgICAgICBvcHRpb24gIHNob3VsZCAgYmUgIHVzZWQgIHdpdGggIGNhcmUsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBhIHR5cG8gaW4gYQorICAgICAgIGdyb3VwIG5hbWUgb3IgIG51bWJlciAgbm8gIGxvbmdlciAgY2F1c2VzICB0aGUgIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HCisgICAgICAgZXJyb3IuCisKKyAgICAgICBQQ1JFMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZICBjYXVzZXMgIHVuc2V0IGNhcHR1cmluZyBncm91cHMgKGluY2x1ZGluZworICAgICAgIHVua25vd24gIGdyb3VwcyAgd2hlbiAgUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUICBpcyAgc2V0KSAgdG8gIGJlCisgICAgICAgdHJlYXRlZCAgYXMgIGVtcHR5ICBzdHJpbmdzICB3aGVuICBpbnNlcnRlZCBhcyBkZXNjcmliZWQgYWJvdmUuIElmIHRoaXMKKyAgICAgICBvcHRpb24gaXMgbm90IHNldCwgYW4gYXR0ZW1wdCB0byAgaW5zZXJ0ICBhbiAgdW5zZXQgIGdyb3VwICBjYXVzZXMgIHRoZQorICAgICAgIFBDUkUyX0VSUk9SX1VOU0VUICBlcnJvci4gIFRoaXMgIG9wdGlvbiBkb2VzIG5vdCBpbmZsdWVuY2UgdGhlIGV4dGVuZGVkCisgICAgICAgc3Vic3RpdHV0aW9uIHN5bnRheCBkZXNjcmliZWQgYmVsb3cuCisKKyAgICAgICBQQ1JFMl9TVUJTVElUVVRFX0VYVEVOREVEIGNhdXNlcyBleHRyYSBwcm9jZXNzaW5nIHRvIGJlIGFwcGxpZWQgdG8gIHRoZQorICAgICAgIHJlcGxhY2VtZW50ICBzdHJpbmcuICBXaXRob3V0IHRoaXMgb3B0aW9uLCBvbmx5IHRoZSBkb2xsYXIgY2hhcmFjdGVyIGlzCisgICAgICAgc3BlY2lhbCwgYW5kIG9ubHkgdGhlIGdyb3VwIGluc2VydGlvbiBmb3JtcyAgbGlzdGVkICBhYm92ZSAgYXJlICB2YWxpZC4KKyAgICAgICBXaGVuIFBDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUQgaXMgc2V0LCB0d28gdGhpbmdzIGNoYW5nZToKKworICAgICAgIEZpcnN0bHksICBiYWNrc2xhc2ggaW4gYSByZXBsYWNlbWVudCBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gZXNjYXBlCisgICAgICAgY2hhcmFjdGVyLiBUaGUgdXN1YWwgZm9ybXMgc3VjaCBhcyBcbiBvciBceHtkZGR9IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKKyAgICAgICBwYXJ0aWN1bGFyICBjaGFyYWN0ZXIgY29kZXMsIGFuZCBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYW55IG5vbi1hbHBoYW51LQorICAgICAgIG1lcmljIGNoYXJhY3RlciBxdW90ZXMgdGhhdCBjaGFyYWN0ZXIuIEV4dGVuZGVkIHF1b3RpbmcgIGNhbiAgYmUgIGNvZGVkCisgICAgICAgdXNpbmcgXFEuLi5cRSwgZXhhY3RseSBhcyBpbiBwYXR0ZXJuIHN0cmluZ3MuCisKKyAgICAgICBUaGVyZSAgYXJlICBhbHNvIGZvdXIgZXNjYXBlIHNlcXVlbmNlcyBmb3IgZm9yY2luZyB0aGUgY2FzZSBvZiBpbnNlcnRlZAorICAgICAgIGxldHRlcnMuICBUaGUgaW5zZXJ0aW9uIG1lY2hhbmlzbSBoYXMgdGhyZWUgc3RhdGVzOiAgbm8gIGNhc2UgIGZvcmNpbmcsCisgICAgICAgZm9yY2UgdXBwZXIgY2FzZSwgYW5kIGZvcmNlIGxvd2VyIGNhc2UuIFRoZSBlc2NhcGUgc2VxdWVuY2VzIGNoYW5nZSB0aGUKKyAgICAgICBjdXJyZW50IHN0YXRlOiBcVSBhbmQgXEwgY2hhbmdlIHRvIHVwcGVyIG9yIGxvd2VyIGNhc2UgZm9yY2luZywgcmVzcGVjLQorICAgICAgIHRpdmVseSwgIGFuZCAgXEUgKHdoZW4gbm90IHRlcm1pbmF0aW5nIGEgXFEgcXVvdGVkIHNlcXVlbmNlKSByZXZlcnRzIHRvCisgICAgICAgbm8gY2FzZSBmb3JjaW5nLiBUaGUgc2VxdWVuY2VzIFx1IGFuZCBcbCBmb3JjZSB0aGUgbmV4dCAgY2hhcmFjdGVyICAoaWYKKyAgICAgICBpdCAgaXMgIGEgIGxldHRlcikgIHRvICB1cHBlciBvciBsb3dlciBjYXNlLCByZXNwZWN0aXZlbHksIGFuZCB0aGVuIHRoZQorICAgICAgIHN0YXRlIGF1dG9tYXRpY2FsbHkgcmV2ZXJ0cyB0byBubyBjYXNlIGZvcmNpbmcuIENhc2UgZm9yY2luZyBhcHBsaWVzIHRvCisgICAgICAgYWxsIGluc2VydGVkICBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgdGhvc2UgZnJvbSBjYXB0dXJlZCBncm91cHMgYW5kIGxldC0KKyAgICAgICB0ZXJzIHdpdGhpbiBcUS4uLlxFIHF1b3RlZCBzZXF1ZW5jZXMuCisKKyAgICAgICBOb3RlIHRoYXQgY2FzZSBmb3JjaW5nIHNlcXVlbmNlcyBzdWNoIGFzIFxVLi4uXEUgZG8gbm90IG5lc3QuIEZvciBleGFtLQorICAgICAgIHBsZSwgIHRoZSAgcmVzdWx0IG9mIHByb2Nlc3NpbmcgIlxVYWFcTEJCXEVjY1xFIiBpcyAiQUFiYmNjIjsgdGhlIGZpbmFsCisgICAgICAgXEUgaGFzIG5vIGVmZmVjdC4KKworICAgICAgIFRoZSBzZWNvbmQgZWZmZWN0IG9mIHNldHRpbmcgUENSRTJfU1VCU1RJVFVURV9FWFRFTkRFRCBpcyB0byAgYWRkICBtb3JlCisgICAgICAgZmxleGliaWxpdHkgIHRvICBncm91cCBzdWJzdGl0dXRpb24uIFRoZSBzeW50YXggaXMgc2ltaWxhciB0byB0aGF0IHVzZWQKKyAgICAgICBieSBCYXNoOgorCisgICAgICAgICAkezxuPjotPHN0cmluZz59CisgICAgICAgICAkezxuPjorPHN0cmluZzE+OjxzdHJpbmcyPn0KKworICAgICAgIEFzIGJlZm9yZSwgPG4+IG1heSBiZSBhIGdyb3VwIG51bWJlciBvciBhIG5hbWUuIFRoZSBmaXJzdCAgZm9ybSAgc3BlY2ktCisgICAgICAgZmllcyAgYSAgZGVmYXVsdCAgdmFsdWUuIElmIGdyb3VwIDxuPiBpcyBzZXQsIGl0cyB2YWx1ZSBpcyBpbnNlcnRlZDsgaWYKKyAgICAgICBub3QsIDxzdHJpbmc+IGlzIGV4cGFuZGVkIGFuZCB0aGUgIHJlc3VsdCAgaW5zZXJ0ZWQuICBUaGUgIHNlY29uZCAgZm9ybQorICAgICAgIHNwZWNpZmllcyAgc3RyaW5ncyB0aGF0IGFyZSBleHBhbmRlZCBhbmQgaW5zZXJ0ZWQgd2hlbiBncm91cCA8bj4gaXMgc2V0CisgICAgICAgb3IgdW5zZXQsIHJlc3BlY3RpdmVseS4gVGhlIGZpcnN0IGZvcm0gaXMganVzdCBhICBjb252ZW5pZW50ICBzaG9ydGhhbmQKKyAgICAgICBmb3IKKworICAgICAgICAgJHs8bj46KyR7PG4+fTo8c3RyaW5nPn0KKworICAgICAgIEJhY2tzbGFzaCAgY2FuICBiZSAgdXNlZCB0byBlc2NhcGUgY29sb25zIGFuZCBjbG9zaW5nIGN1cmx5IGJyYWNrZXRzIGluCisgICAgICAgdGhlIHJlcGxhY2VtZW50IHN0cmluZ3MuIEEgY2hhbmdlIG9mIHRoZSBjYXNlIGZvcmNpbmcgIHN0YXRlICB3aXRoaW4gIGEKKyAgICAgICByZXBsYWNlbWVudCAgc3RyaW5nICByZW1haW5zICBpbiAgZm9yY2UgIGFmdGVyd2FyZHMsICBhcyAgc2hvd24gaW4gdGhpcworICAgICAgIHBjcmUydGVzdCBleGFtcGxlOgorCisgICAgICAgICAvKHNvbWUpPyhib2R5KS9zdWJzdGl0dXRlX2V4dGVuZGVkLHJlcGxhY2U9JHsxOitcVTpcTH1IZUxMbworICAgICAgICAgICAgIGJvZHkKKyAgICAgICAgICAxOiBoZWxsbworICAgICAgICAgICAgIHNvbWVib2R5CisgICAgICAgICAgMTogSEVMTE8KKworICAgICAgIFRoZSBQQ1JFMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlc2UgIGV4dGVuZGVkCisgICAgICAgc3Vic3RpdHV0aW9ucy4gICBIb3dldmVyLCAgIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCAgZG9lcyAgY2F1c2UKKyAgICAgICB1bmtub3duIGdyb3VwcyBpbiB0aGUgZXh0ZW5kZWQgc3ludGF4IGZvcm1zIHRvIGJlIHRyZWF0ZWQgYXMgdW5zZXQuCisKKyAgICAgICBJZiBzdWNjZXNzZnVsLCBwY3JlMl9zdWJzdGl0dXRlKCkgcmV0dXJucyB0aGUgIG51bWJlciAgb2YgIHJlcGxhY2VtZW50cworICAgICAgIHRoYXQgd2VyZSBtYWRlLiBUaGlzIG1heSBiZSB6ZXJvIGlmIG5vIG1hdGNoZXMgd2VyZSBmb3VuZCwgYW5kIGlzIG5ldmVyCisgICAgICAgZ3JlYXRlciB0aGFuIDEgdW5sZXNzIFBDUkUyX1NVQlNUSVRVVEVfR0xPQkFMIGlzIHNldC4KKworICAgICAgIEluIHRoZSBldmVudCBvZiBhbiBlcnJvciwgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlzIHJldHVybmVkLiBFeGNlcHQgZm9yCisgICAgICAgUENSRTJfRVJST1JfTk9NQVRDSCAgICAod2hpY2ggICBpcyAgIG5ldmVyICAgcmV0dXJuZWQpLCAgIGVycm9ycyAgIGZyb20KKyAgICAgICBwY3JlMl9tYXRjaCgpIGFyZSBwYXNzZWQgc3RyYWlnaHQgYmFjay4KKworICAgICAgIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HIGlzIHJldHVybmVkIGZvciBhIG5vbi1leGlzdGVudCBzdWJzdHJpbmcgaW5zZXItCisgICAgICAgdGlvbiwgdW5sZXNzIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCBpcyBzZXQuCisKKyAgICAgICBQQ1JFMl9FUlJPUl9VTlNFVCBpcyByZXR1cm5lZCBmb3IgYW4gdW5zZXQgc3Vic3RyaW5nIGluc2VydGlvbiAoaW5jbHVkLQorICAgICAgIGluZyBhbiB1bmtub3duIHN1YnN0cmluZyB3aGVuICBQQ1JFMl9TVUJTVElUVVRFX1VOS05PV05fVU5TRVQgIGlzICBzZXQpCisgICAgICAgd2hlbiAgdGhlICBzaW1wbGUgIChub24tZXh0ZW5kZWQpICBzeW50YXggIGlzICB1c2VkICBhbmQgIFBDUkUyX1NVQlNUSS0KKyAgICAgICBUVVRFX1VOU0VUX0VNUFRZIGlzIG5vdCBzZXQuCisKKyAgICAgICBQQ1JFMl9FUlJPUl9OT01FTU9SWSBpcyByZXR1cm5lZCAgaWYgIHRoZSAgb3V0cHV0ICBidWZmZXIgIGlzICBub3QgIGJpZworICAgICAgIGVub3VnaC4gSWYgdGhlIFBDUkUyX1NVQlNUSVRVVEVfT1ZFUkZMT1dfTEVOR1RIIG9wdGlvbiBpcyBzZXQsIHRoZSBzaXplCisgICAgICAgb2YgYnVmZmVyIHRoYXQgaXMgbmVlZGVkIGlzIHJldHVybmVkIHZpYSBvdXRsZW5ndGhwdHIuIE5vdGUgIHRoYXQgIHRoaXMKKyAgICAgICBkb2VzIG5vdCBoYXBwZW4gYnkgZGVmYXVsdC4KKworICAgICAgIFBDUkUyX0VSUk9SX0JBRFJFUExBQ0VNRU5UICBpcyAgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBzeW50YXggZXJyb3JzIGluCisgICAgICAgdGhlICAgcmVwbGFjZW1lbnQgICBzdHJpbmcsICAgd2l0aCAgIG1vcmUgICBwYXJ0aWN1bGFyICAgZXJyb3JzICAgYmVpbmcKKyAgICAgICBQQ1JFMl9FUlJPUl9CQURSRVBFU0NBUEUgIChpbnZhbGlkICBlc2NhcGUgIHNlcXVlbmNlKSwgUENSRTJfRVJST1JfUkVQLQorICAgICAgIE1JU1NJTkdfQlJBQ0UgKGNsb3NpbmcgY3VybHkgYnJhY2tldCBub3QgZm91bmQpLCAgUENSRTJfQkFEU1VCU1RJVFVUSU9OCisgICAgICAgKHN5bnRheCAgZXJyb3IgaW4gZXh0ZW5kZWQgZ3JvdXAgc3Vic3RpdHV0aW9uKSwgYW5kIFBDUkUyX0JBRFNVQlBBVFRFUk4KKyAgICAgICAodGhlIHBhdHRlcm4gbWF0Y2ggZW5kZWQgYmVmb3JlIGl0IHN0YXJ0ZWQsIHdoaWNoIGNhbiBoYXBwZW4gaWYgIFxLICBpcworICAgICAgIHVzZWQgaW4gYW4gYXNzZXJ0aW9uKS4KKworICAgICAgIEFzIGZvciBhbGwgUENSRTIgZXJyb3JzLCBhIHRleHQgbWVzc2FnZSB0aGF0IGRlc2NyaWJlcyB0aGUgZXJyb3IgY2FuIGJlCisgICAgICAgb2J0YWluZWQgYnkgY2FsbGluZyBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZSgpLgorCisKK0RVUExJQ0FURSBTVUJQQVRURVJOIE5BTUVTCisKKyAgICAgICBpbnQgcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuKGNvbnN0IHBjcmUyX2NvZGUgKmNvZGUsCisgICAgICAgICBQQ1JFMl9TUFRSIG5hbWUsIFBDUkUyX1NQVFIgKmZpcnN0LCBQQ1JFMl9TUFRSICpsYXN0KTsKKworICAgICAgIFdoZW4gYSBwYXR0ZXJuIGlzIGNvbXBpbGVkIHdpdGggdGhlIFBDUkUyX0RVUE5BTUVTICBvcHRpb24sICBuYW1lcyAgZm9yCisgICAgICAgc3VicGF0dGVybnMgIGFyZSAgbm90IHJlcXVpcmVkIHRvIGJlIHVuaXF1ZS4gRHVwbGljYXRlIG5hbWVzIGFyZSBhbHdheXMKKyAgICAgICBhbGxvd2VkIGZvciBzdWJwYXR0ZXJucyB3aXRoIHRoZSBzYW1lIG51bWJlciwgY3JlYXRlZCBieSB1c2luZyB0aGUgICg/fAorICAgICAgIGZlYXR1cmUuICBJbmRlZWQsICBpZiAgc3VjaCBzdWJwYXR0ZXJucyBhcmUgbmFtZWQsIHRoZXkgYXJlIHJlcXVpcmVkIHRvCisgICAgICAgdXNlIHRoZSBzYW1lIG5hbWVzLgorCisgICAgICAgTm9ybWFsbHksIHBhdHRlcm5zIHdpdGggZHVwbGljYXRlIG5hbWVzIGFyZSBzdWNoIHRoYXQgaW4gYW55IG9uZSBtYXRjaCwKKyAgICAgICBvbmx5ICBvbmUgb2YgdGhlIG5hbWVkIHN1YnBhdHRlcm5zIHBhcnRpY2lwYXRlcy4gQW4gZXhhbXBsZSBpcyBzaG93biBpbgorICAgICAgIHRoZSBwY3JlMnBhdHRlcm4gZG9jdW1lbnRhdGlvbi4KKworICAgICAgIFdoZW4gIGR1cGxpY2F0ZXMgICBhcmUgICBwcmVzZW50LCAgIHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZSgpICAgYW5kCisgICAgICAgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUoKSAgcmV0dXJuICB0aGUgZmlyc3Qgc3Vic3RyaW5nIGNvcnJlc3BvbmRpbmcKKyAgICAgICB0byAgdGhlICBnaXZlbiAgbmFtZSAgdGhhdCAgaXMgIHNldC4gIE9ubHkgICBpZiAgIG5vbmUgICBhcmUgICBzZXQgICBpcworICAgICAgIFBDUkUyX0VSUk9SX1VOU0VUICBpcyAgcmV0dXJuZWQuIFRoZSBwY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZSgpCisgICAgICAgZnVuY3Rpb24gcmV0dXJucyB0aGUgZXJyb3IgUENSRTJfRVJST1JfTk9VTklRVUVTVUJTVFJJTkcgd2hlbiB0aGVyZSBhcmUKKyAgICAgICBkdXBsaWNhdGUgbmFtZXMuCisKKyAgICAgICBJZiAgeW91IHdhbnQgdG8gZ2V0IGZ1bGwgZGV0YWlscyBvZiBhbGwgY2FwdHVyZWQgc3Vic3RyaW5ncyBmb3IgYSBnaXZlbgorICAgICAgIG5hbWUsIHlvdSBtdXN0IHVzZSB0aGUgcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuKCkgIGZ1bmN0aW9uLiAgVGhlCisgICAgICAgZmlyc3QgIGFyZ3VtZW50IGlzIHRoZSBjb21waWxlZCBwYXR0ZXJuLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgbmFtZS4gSWYKKyAgICAgICB0aGUgdGhpcmQgYW5kIGZvdXJ0aCBhcmd1bWVudHMgYXJlIE5VTEwsIHRoZSBmdW5jdGlvbiByZXR1cm5zICBhICBncm91cAorICAgICAgIG51bWJlciBmb3IgYSB1bmlxdWUgbmFtZSwgb3IgUENSRTJfRVJST1JfTk9VTklRVUVTVUJTVFJJTkcgb3RoZXJ3aXNlLgorCisgICAgICAgV2hlbiB0aGUgdGhpcmQgYW5kIGZvdXJ0aCBhcmd1bWVudHMgYXJlIG5vdCBOVUxMLCB0aGV5IG11c3QgYmUgcG9pbnRlcnMKKyAgICAgICB0byB2YXJpYWJsZXMgdGhhdCBhcmUgdXBkYXRlZCBieSB0aGUgZnVuY3Rpb24uIEFmdGVyIGl0IGhhcyAgcnVuLCAgdGhleQorICAgICAgIHBvaW50IHRvIHRoZSBmaXJzdCBhbmQgbGFzdCBlbnRyaWVzIGluIHRoZSBuYW1lLXRvLW51bWJlciB0YWJsZSBmb3IgdGhlCisgICAgICAgZ2l2ZW4gbmFtZSwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgZWFjaCBlbnRyeSAgaW4gIGNvZGUKKyAgICAgICB1bml0cy4gIEluIGJvdGggY2FzZXMsIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HIGlzIHJldHVybmVkIGlmIHRoZXJlIGFyZQorICAgICAgIG5vIGVudHJpZXMgZm9yIHRoZSBnaXZlbiBuYW1lLgorCisgICAgICAgVGhlIGZvcm1hdCBvZiB0aGUgbmFtZSB0YWJsZSBpcyBkZXNjcmliZWQgYWJvdmUgaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKKyAgICAgICBJbmZvcm1hdGlvbiAgYWJvdXQgIGEgIHBhdHRlcm4uICBHaXZlbiBhbGwgdGhlIHJlbGV2YW50IGVudHJpZXMgZm9yIHRoZQorICAgICAgIG5hbWUsIHlvdSBjYW4gZXh0cmFjdCBlYWNoIG9mIHRoZWlyIG51bWJlcnMsICBhbmQgIGhlbmNlICB0aGUgIGNhcHR1cmVkCisgICAgICAgZGF0YS4KKworCitGSU5ESU5HIEFMTCBQT1NTSUJMRSBNQVRDSEVTIEFUIE9ORSBQT1NJVElPTgorCisgICAgICAgVGhlICB0cmFkaXRpb25hbCAgbWF0Y2hpbmcgIGZ1bmN0aW9uICB1c2VzIGEgc2ltaWxhciBhbGdvcml0aG0gdG8gUGVybCwKKyAgICAgICB3aGljaCBzdG9wcyB3aGVuIGl0IGZpbmRzIHRoZSBmaXJzdCBtYXRjaCBhdCBhIGdpdmVuIHBvaW50IGluIHRoZSAgc3ViLQorICAgICAgIGplY3QuIElmIHlvdSB3YW50IHRvIGZpbmQgYWxsIHBvc3NpYmxlIG1hdGNoZXMsIG9yIHRoZSBsb25nZXN0IHBvc3NpYmxlCisgICAgICAgbWF0Y2ggYXQgYSBnaXZlbiBwb3NpdGlvbiwgIGNvbnNpZGVyICB1c2luZyAgdGhlICBhbHRlcm5hdGl2ZSAgbWF0Y2hpbmcKKyAgICAgICBmdW5jdGlvbiAgKHNlZSAgYmVsb3cpIGluc3RlYWQuIElmIHlvdSBjYW5ub3QgdXNlIHRoZSBhbHRlcm5hdGl2ZSBmdW5jLQorICAgICAgIHRpb24sIHlvdSBjYW4ga2x1ZGdlIGl0IHVwIGJ5IG1ha2luZyB1c2Ugb2YgdGhlIGNhbGxvdXQgZmFjaWxpdHksIHdoaWNoCisgICAgICAgaXMgZGVzY3JpYmVkIGluIHRoZSBwY3JlMmNhbGxvdXQgZG9jdW1lbnRhdGlvbi4KKworICAgICAgIFdoYXQgeW91IGhhdmUgdG8gZG8gaXMgdG8gaW5zZXJ0IGEgY2FsbG91dCByaWdodCBhdCB0aGUgZW5kIG9mIHRoZSBwYXQtCisgICAgICAgdGVybi4gIFdoZW4geW91ciBjYWxsb3V0IGZ1bmN0aW9uIGlzIGNhbGxlZCwgZXh0cmFjdCBhbmQgc2F2ZSB0aGUgIGN1ci0KKyAgICAgICByZW50ICBtYXRjaGVkICBzdWJzdHJpbmcuICBUaGVuIHJldHVybiAxLCB3aGljaCBmb3JjZXMgcGNyZTJfbWF0Y2goKSB0bworICAgICAgIGJhY2t0cmFjayBhbmQgdHJ5IG90aGVyIGFsdGVybmF0aXZlcy4gVWx0aW1hdGVseSwgd2hlbiBpdCBydW5zICBvdXQgIG9mCisgICAgICAgbWF0Y2hlcywgcGNyZTJfbWF0Y2goKSB3aWxsIHlpZWxkIFBDUkUyX0VSUk9SX05PTUFUQ0guCisKKworTUFUQ0hJTkcgQSBQQVRURVJOOiBUSEUgQUxURVJOQVRJVkUgRlVOQ1RJT04KKworICAgICAgIGludCBwY3JlMl9kZmFfbWF0Y2goY29uc3QgcGNyZTJfY29kZSAqY29kZSwgUENSRTJfU1BUUiBzdWJqZWN0LAorICAgICAgICAgUENSRTJfU0laRSBsZW5ndGgsIFBDUkUyX1NJWkUgc3RhcnRvZmZzZXQsCisgICAgICAgICB1aW50MzJfdCBvcHRpb25zLCBwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLAorICAgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsCisgICAgICAgICBpbnQgKndvcmtzcGFjZSwgUENSRTJfU0laRSB3c2NvdW50KTsKKworICAgICAgIFRoZSAgZnVuY3Rpb24gIHBjcmUyX2RmYV9tYXRjaCgpICBpcyAgY2FsbGVkICB0byBtYXRjaCBhIHN1YmplY3Qgc3RyaW5nCisgICAgICAgYWdhaW5zdCBhIGNvbXBpbGVkIHBhdHRlcm4sIHVzaW5nIGEgbWF0Y2hpbmcgYWxnb3JpdGhtIHRoYXQgIHNjYW5zICB0aGUKKyAgICAgICBzdWJqZWN0ICBzdHJpbmcgIGp1c3QgIG9uY2UsIGFuZCBkb2VzIG5vdCBiYWNrdHJhY2suIFRoaXMgaGFzIGRpZmZlcmVudAorICAgICAgIGNoYXJhY3RlcmlzdGljcyB0byB0aGUgbm9ybWFsIGFsZ29yaXRobSwgYW5kICBpcyAgbm90ICBjb21wYXRpYmxlICB3aXRoCisgICAgICAgUGVybC4gIFNvbWUgb2YgdGhlIGZlYXR1cmVzIG9mIFBDUkUyIHBhdHRlcm5zIGFyZSBub3Qgc3VwcG9ydGVkLiBOZXZlci0KKyAgICAgICB0aGVsZXNzLCB0aGVyZSBhcmUgdGltZXMgd2hlbiB0aGlzIGtpbmQgb2YgbWF0Y2hpbmcgY2FuIGJlIHVzZWZ1bC4gIEZvcgorICAgICAgIGEgIGRpc2N1c3Npb24gIG9mICB0aGUgIHR3byBtYXRjaGluZyBhbGdvcml0aG1zLCBhbmQgYSBsaXN0IG9mIGZlYXR1cmVzCisgICAgICAgdGhhdCBwY3JlMl9kZmFfbWF0Y2goKSBkb2VzIG5vdCBzdXBwb3J0LCBzZWUgdGhlIHBjcmUybWF0Y2hpbmcgZG9jdW1lbi0KKyAgICAgICB0YXRpb24uCisKKyAgICAgICBUaGUgIGFyZ3VtZW50cyAgZm9yICB0aGUgcGNyZTJfZGZhX21hdGNoKCkgZnVuY3Rpb24gYXJlIHRoZSBzYW1lIGFzIGZvcgorICAgICAgIHBjcmUyX21hdGNoKCksIHBsdXMgdHdvIGV4dHJhcy4gVGhlIG92ZWN0b3Igd2l0aGluIHRoZSBtYXRjaCBkYXRhIGJsb2NrCisgICAgICAgaXMgdXNlZCBpbiBhIGRpZmZlcmVudCB3YXksIGFuZCB0aGlzIGlzIGRlc2NyaWJlZCBiZWxvdy4gVGhlIG90aGVyIGNvbS0KKyAgICAgICBtb24gYXJndW1lbnRzIGFyZSB1c2VkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgcGNyZTJfbWF0Y2goKSwgIHNvICB0aGVpcgorICAgICAgIGRlc2NyaXB0aW9uIGlzIG5vdCByZXBlYXRlZCBoZXJlLgorCisgICAgICAgVGhlICB0d28gIGFkZGl0aW9uYWwgIGFyZ3VtZW50cyBwcm92aWRlIHdvcmtzcGFjZSBmb3IgdGhlIGZ1bmN0aW9uLiBUaGUKKyAgICAgICB3b3Jrc3BhY2UgdmVjdG9yIHNob3VsZCBjb250YWluIGF0IGxlYXN0IDIwIGVsZW1lbnRzLiBJdCAgaXMgIHVzZWQgIGZvcgorICAgICAgIGtlZXBpbmcgIHRyYWNrICBvZiAgbXVsdGlwbGUgIHBhdGhzICB0aHJvdWdoICB0aGUgIHBhdHRlcm4gIHRyZWUuICBNb3JlCisgICAgICAgd29ya3NwYWNlIGlzIG5lZWRlZCBmb3IgcGF0dGVybnMgYW5kIHN1YmplY3RzIHdoZXJlIHRoZXJlIGFyZSBhIGxvdCAgb2YKKyAgICAgICBwb3RlbnRpYWwgbWF0Y2hlcy4KKworICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBjYWxsIHRvIHBjcmUyX2RmYV9tYXRjaCgpOgorCisgICAgICAgICBpbnQgd3NwYWNlWzIwXTsKKyAgICAgICAgIHBjcmUyX21hdGNoX2RhdGEgKm1kID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUoNCwgTlVMTCk7CisgICAgICAgICBpbnQgcmMgPSBwY3JlMl9kZmFfbWF0Y2goCisgICAgICAgICAgIHJlLCAgICAgICAgICAgICAvKiByZXN1bHQgb2YgcGNyZTJfY29tcGlsZSgpICovCisgICAgICAgICAgICJzb21lIHN0cmluZyIsICAvKiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgICAgICAgICAgMTEsICAgICAgICAgICAgIC8qIHRoZSBsZW5ndGggb2YgdGhlIHN1YmplY3Qgc3RyaW5nICovCisgICAgICAgICAgIDAsICAgICAgICAgICAgICAvKiBzdGFydCBhdCBvZmZzZXQgMCBpbiB0aGUgc3ViamVjdCAqLworICAgICAgICAgICAwLCAgICAgICAgICAgICAgLyogZGVmYXVsdCBvcHRpb25zICovCisgICAgICAgICAgIG1hdGNoX2RhdGEsICAgICAvKiB0aGUgbWF0Y2ggZGF0YSBibG9jayAqLworICAgICAgICAgICBOVUxMLCAgICAgICAgICAgLyogYSBtYXRjaCBjb250ZXh0OyBOVUxMIG1lYW5zIHVzZSBkZWZhdWx0cyAqLworICAgICAgICAgICB3c3BhY2UsICAgICAgICAgLyogd29ya2luZyBzcGFjZSB2ZWN0b3IgKi8KKyAgICAgICAgICAgMjApOyAgICAgICAgICAgIC8qIG51bWJlciBvZiBlbGVtZW50cyAoTk9UIHNpemUgaW4gYnl0ZXMpICovCisKKyAgIE9wdGlvbiBiaXRzIGZvciBwY3JlX2RmYV9tYXRjaCgpCisKKyAgICAgICBUaGUgIHVudXNlZCAgYml0cyBvZiB0aGUgb3B0aW9ucyBhcmd1bWVudCBmb3IgcGNyZTJfZGZhX21hdGNoKCkgbXVzdCBiZQorICAgICAgIHplcm8uIFRoZSBvbmx5IGJpdHMgdGhhdCBtYXkgYmUgc2V0IGFyZSAgUENSRTJfQU5DSE9SRUQsICBQQ1JFMl9OT1RCT0wsCisgICAgICAgUENSRTJfTk9URU9MLCAgICAgICAgICBQQ1JFMl9OT1RFTVBUWSwgICAgICAgICAgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwKKyAgICAgICBQQ1JFMl9OT19VVEZfQ0hFQ0ssICAgICAgIFBDUkUyX1BBUlRJQUxfSEFSRCwgICAgICAgUENSRTJfUEFSVElBTF9TT0ZULAorICAgICAgIFBDUkUyX0RGQV9TSE9SVEVTVCwgIGFuZCAgUENSRTJfREZBX1JFU1RBUlQuICBBbGwgIGJ1dCB0aGUgbGFzdCBmb3VyIG9mCisgICAgICAgdGhlc2UgYXJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgZm9yIHBjcmUyX21hdGNoKCksIHNvICB0aGVpciAgZGVzY3JpcHRpb24KKyAgICAgICBpcyBub3QgcmVwZWF0ZWQgaGVyZS4KKworICAgICAgICAgUENSRTJfUEFSVElBTF9IQVJECisgICAgICAgICBQQ1JFMl9QQVJUSUFMX1NPRlQKKworICAgICAgIFRoZXNlICBoYXZlICB0aGUgIHNhbWUgZ2VuZXJhbCBlZmZlY3QgYXMgdGhleSBkbyBmb3IgcGNyZTJfbWF0Y2goKSwgYnV0CisgICAgICAgdGhlIGRldGFpbHMgYXJlIHNsaWdodGx5IGRpZmZlcmVudC4gV2hlbiBQQ1JFMl9QQVJUSUFMX0hBUkQgaXMgc2V0ICBmb3IKKyAgICAgICBwY3JlMl9kZmFfbWF0Y2goKSwgIGl0ICByZXR1cm5zICBQQ1JFMl9FUlJPUl9QQVJUSUFMICBpZiB0aGUgZW5kIG9mIHRoZQorICAgICAgIHN1YmplY3QgaXMgcmVhY2hlZCBhbmQgdGhlcmUgaXMgc3RpbGwgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHBvc3NpYmlsaXR5CisgICAgICAgdGhhdCByZXF1aXJlcyBhZGRpdGlvbmFsIGNoYXJhY3RlcnMuIFRoaXMgaGFwcGVucyBldmVuIGlmIHNvbWUgY29tcGxldGUKKyAgICAgICBtYXRjaGVzIGhhdmUgYWxyZWFkeSBiZWVuIGZvdW5kLiBXaGVuIFBDUkUyX1BBUlRJQUxfU09GVCAgaXMgIHNldCwgIHRoZQorICAgICAgIHJldHVybiAgY29kZSAgUENSRTJfRVJST1JfTk9NQVRDSCBpcyBjb252ZXJ0ZWQgaW50byBQQ1JFMl9FUlJPUl9QQVJUSUFMCisgICAgICAgaWYgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCBpcyAgcmVhY2hlZCwgIHRoZXJlICBoYXZlICBiZWVuICBubyAgY29tcGxldGUKKyAgICAgICBtYXRjaGVzLCBidXQgdGhlcmUgaXMgc3RpbGwgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHBvc3NpYmlsaXR5LiBUaGUgcG9yLQorICAgICAgIHRpb24gb2YgdGhlIHN0cmluZyB0aGF0IHdhcyBpbnNwZWN0ZWQgd2hlbiB0aGUgIGxvbmdlc3QgIHBhcnRpYWwgIG1hdGNoCisgICAgICAgd2FzIGZvdW5kIGlzIHNldCBhcyB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RyaW5nIGluIGJvdGggY2FzZXMuIFRoZXJlIGlzIGEKKyAgICAgICBtb3JlIGRldGFpbGVkIGRpc2N1c3Npb24gb2YgcGFydGlhbCBhbmQgIG11bHRpLXNlZ21lbnQgIG1hdGNoaW5nLCAgd2l0aAorICAgICAgIGV4YW1wbGVzLCBpbiB0aGUgcGNyZTJwYXJ0aWFsIGRvY3VtZW50YXRpb24uCisKKyAgICAgICAgIFBDUkUyX0RGQV9TSE9SVEVTVAorCisgICAgICAgU2V0dGluZyAgdGhlIFBDUkUyX0RGQV9TSE9SVEVTVCBvcHRpb24gY2F1c2VzIHRoZSBtYXRjaGluZyBhbGdvcml0aG0gdG8KKyAgICAgICBzdG9wIGFzIHNvb24gYXMgaXQgaGFzIGZvdW5kIG9uZSBtYXRjaC4gQmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBhbHRlcm5hLQorICAgICAgIHRpdmUgIGFsZ29yaXRobSAgd29ya3MsIHRoaXMgaXMgbmVjZXNzYXJpbHkgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIG1hdGNoCisgICAgICAgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG1hdGNoaW5nIHBvaW50IGluIHRoZSBzdWJqZWN0IHN0cmluZy4KKworICAgICAgICAgUENSRTJfREZBX1JFU1RBUlQKKworICAgICAgIFdoZW4gcGNyZTJfZGZhX21hdGNoKCkgcmV0dXJucyBhIHBhcnRpYWwgbWF0Y2gsIGl0IGlzIHBvc3NpYmxlIHRvICBjYWxsCisgICAgICAgaXQgYWdhaW4sIHdpdGggYWRkaXRpb25hbCBzdWJqZWN0IGNoYXJhY3RlcnMsIGFuZCBoYXZlIGl0IGNvbnRpbnVlIHdpdGgKKyAgICAgICB0aGUgc2FtZSBtYXRjaC4gVGhlIFBDUkUyX0RGQV9SRVNUQVJUIG9wdGlvbiByZXF1ZXN0cyB0aGlzIGFjdGlvbjsgd2hlbgorICAgICAgIGl0ICBpcyAgc2V0LCAgdGhlIHdvcmtzcGFjZSBhbmQgd3Njb3VudCBvcHRpb25zIG11c3QgcmVmZXJlbmNlIHRoZSBzYW1lCisgICAgICAgdmVjdG9yIGFzIGJlZm9yZSBiZWNhdXNlIGRhdGEgYWJvdXQgdGhlIG1hdGNoIHNvIGZhciBpcyAgbGVmdCAgaW4gIHRoZW0KKyAgICAgICBhZnRlciBhIHBhcnRpYWwgbWF0Y2guIFRoZXJlIGlzIG1vcmUgZGlzY3Vzc2lvbiBvZiB0aGlzIGZhY2lsaXR5IGluIHRoZQorICAgICAgIHBjcmUycGFydGlhbCBkb2N1bWVudGF0aW9uLgorCisgICBTdWNjZXNzZnVsIHJldHVybnMgZnJvbSBwY3JlMl9kZmFfbWF0Y2goKQorCisgICAgICAgV2hlbiBwY3JlMl9kZmFfbWF0Y2goKSBzdWNjZWVkcywgaXQgbWF5IGhhdmUgbWF0Y2hlZCBtb3JlIHRoYW4gb25lIHN1Yi0KKyAgICAgICBzdHJpbmcgaW4gdGhlIHN1YmplY3QuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgYWxsIHRoZSBtYXRjaGVzIGZyb20gb25lIHJ1bgorICAgICAgIG9mIHRoZSBmdW5jdGlvbiBzdGFydCBhdCB0aGUgc2FtZSBwb2ludCBpbiAgdGhlICBzdWJqZWN0LiAgVGhlICBzaG9ydGVyCisgICAgICAgbWF0Y2hlcyAgYXJlIGFsbCBpbml0aWFsIHN1YnN0cmluZ3Mgb2YgdGhlIGxvbmdlciBtYXRjaGVzLiBGb3IgZXhhbXBsZSwKKyAgICAgICBpZiB0aGUgcGF0dGVybgorCisgICAgICAgICA8Lio+CisKKyAgICAgICBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIHN0cmluZworCisgICAgICAgICBUaGlzIGlzIDxzb21ldGhpbmc+IDxzb21ldGhpbmcgZWxzZT4gPHNvbWV0aGluZyBmdXJ0aGVyPiBubyBtb3JlCisKKyAgICAgICB0aGUgdGhyZWUgbWF0Y2hlZCBzdHJpbmdzIGFyZQorCisgICAgICAgICA8c29tZXRoaW5nPiA8c29tZXRoaW5nIGVsc2U+IDxzb21ldGhpbmcgZnVydGhlcj4KKyAgICAgICAgIDxzb21ldGhpbmc+IDxzb21ldGhpbmcgZWxzZT4KKyAgICAgICAgIDxzb21ldGhpbmc+CisKKyAgICAgICBPbiBzdWNjZXNzLCB0aGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIGEgbnVtYmVyICBncmVhdGVyICB0aGFuICB6ZXJvLAorICAgICAgIHdoaWNoICBpcyAgdGhlICBudW1iZXIgIG9mICBtYXRjaGVkIHN1YnN0cmluZ3MuIFRoZSBvZmZzZXRzIG9mIHRoZSBzdWItCisgICAgICAgc3RyaW5ncyBhcmUgcmV0dXJuZWQgaW4gdGhlIG92ZWN0b3IsIGFuZCBjYW4gYmUgZXh0cmFjdGVkIGJ5IG51bWJlciAgaW4KKyAgICAgICB0aGUgIHNhbWUgd2F5IGFzIGZvciBwY3JlMl9tYXRjaCgpLCBidXQgdGhlIG51bWJlcnMgYmVhciBubyByZWxhdGlvbiB0bworICAgICAgIGFueSBjYXB0dXJpbmcgZ3JvdXBzIHRoYXQgbWF5IGV4aXN0IGluIHRoZSBwYXR0ZXJuLCBiZWNhdXNlIERGQSAgbWF0Y2gtCisgICAgICAgaW5nIGRvZXMgbm90IHN1cHBvcnQgZ3JvdXAgY2FwdHVyZS4KKworICAgICAgIENhbGxzICB0byAgdGhlICBjb252ZW5pZW5jZSAgZnVuY3Rpb25zICB0aGF0IGV4dHJhY3Qgc3Vic3RyaW5ncyBieSBuYW1lCisgICAgICAgcmV0dXJuIHRoZSBlcnJvciBQQ1JFMl9FUlJPUl9ERkFfVUZVTkMgKHVuc3VwcG9ydGVkIGZ1bmN0aW9uKSAgaWYgIHVzZWQKKyAgICAgICBhZnRlciBhIERGQSBtYXRjaC4gVGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGV4dHJhY3Qgc3Vic3RyaW5ncyBieQorICAgICAgIG51bWJlciBuZXZlciByZXR1cm4gUENSRTJfRVJST1JfTk9TVUJTVFJJTkcsIGFuZCB0aGUgbWVhbmluZ3MgIG9mICBzb21lCisgICAgICAgb3RoZXIgZXJyb3JzIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQ6CisKKyAgICAgICAgIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFCisKKyAgICAgICBUaGUgb3ZlY3RvciBpcyBub3QgYmlnIGVub3VnaCB0byBpbmNsdWRlIGEgc2xvdCBmb3IgdGhlIGdpdmVuIHN1YnN0cmluZworICAgICAgIG51bWJlci4KKworICAgICAgICAgUENSRTJfRVJST1JfVU5TRVQKKworICAgICAgIFRoZXJlIGlzIGEgc2xvdCBpbiB0aGUgb3ZlY3RvciAgZm9yICB0aGlzICBzdWJzdHJpbmcsICBidXQgIHRoZXJlICB3ZXJlCisgICAgICAgaW5zdWZmaWNpZW50IG1hdGNoZXMgdG8gZmlsbCBpdC4KKworICAgICAgIFRoZSAgbWF0Y2hlZCAgc3RyaW5ncyAgYXJlICBzdG9yZWQgIGluICB0aGUgb3ZlY3RvciBpbiByZXZlcnNlIG9yZGVyIG9mCisgICAgICAgbGVuZ3RoOyB0aGF0IGlzLCB0aGUgbG9uZ2VzdCBtYXRjaGluZyBzdHJpbmcgaXMgZmlyc3QuICBJZiAgdGhlcmUgIHdlcmUKKyAgICAgICB0b28gIG1hbnkgbWF0Y2hlcyB0byBmaXQgaW50byB0aGUgb3ZlY3RvciwgdGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcworICAgICAgIHplcm8sIGFuZCB0aGUgdmVjdG9yIGlzIGZpbGxlZCB3aXRoIHRoZSBsb25nZXN0IG1hdGNoZXMuCisKKyAgICAgICBOT1RFOiBQQ1JFMidzICJhdXRvLXBvc3Nlc3NpZmljYXRpb24iIG9wdGltaXphdGlvbiB1c3VhbGx5ICBhcHBsaWVzICB0bworICAgICAgIGNoYXJhY3RlciAgcmVwZWF0cyBhdCB0aGUgZW5kIG9mIGEgcGF0dGVybiAoYXMgd2VsbCBhcyBpbnRlcm5hbGx5KS4gRm9yCisgICAgICAgZXhhbXBsZSwgdGhlIHBhdHRlcm4gImFcZCsiIGlzIGNvbXBpbGVkIGFzIGlmIGl0IHdlcmUgImFcZCsrIi4gRm9yICBERkEKKyAgICAgICBtYXRjaGluZywgIHRoaXMgIG1lYW5zICB0aGF0ICBvbmx5ICBvbmUgcG9zc2libGUgbWF0Y2ggaXMgZm91bmQuIElmIHlvdQorICAgICAgIHJlYWxseSBkbyB3YW50IG11bHRpcGxlIG1hdGNoZXMgaW4gc3VjaCBjYXNlcywgZWl0aGVyIHVzZSAgYW4gIHVuZ3JlZWR5CisgICAgICAgcmVwZWF0ICBhdWNoICBhcyAgImFcZCs/IiAgb3Igc2V0IHRoZSBQQ1JFMl9OT19BVVRPX1BPU1NFU1Mgb3B0aW9uIHdoZW4KKyAgICAgICBjb21waWxpbmcuCisKKyAgIEVycm9yIHJldHVybnMgZnJvbSBwY3JlMl9kZmFfbWF0Y2goKQorCisgICAgICAgVGhlIHBjcmUyX2RmYV9tYXRjaCgpIGZ1bmN0aW9uIHJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIgd2hlbiBpdCBmYWlscy4KKyAgICAgICBNYW55ICBvZiAgdGhlICBlcnJvcnMgIGFyZSAgdGhlIHNhbWUgYXMgZm9yIHBjcmUyX21hdGNoKCksIGFzIGRlc2NyaWJlZAorICAgICAgIGFib3ZlLiAgVGhlcmUgYXJlIGluIGFkZGl0aW9uIHRoZSBmb2xsb3dpbmcgZXJyb3JzIHRoYXQgYXJlIHNwZWNpZmljIHRvCisgICAgICAgcGNyZTJfZGZhX21hdGNoKCk6CisKKyAgICAgICAgIFBDUkUyX0VSUk9SX0RGQV9VSVRFTQorCisgICAgICAgVGhpcyAgcmV0dXJuICBpcyAgZ2l2ZW4gIGlmIHBjcmUyX2RmYV9tYXRjaCgpIGVuY291bnRlcnMgYW4gaXRlbSBpbiB0aGUKKyAgICAgICBwYXR0ZXJuIHRoYXQgaXQgZG9lcyBub3Qgc3VwcG9ydCwgZm9yIGluc3RhbmNlLCB0aGUgdXNlIG9mIFxDIGluIGEgIFVURgorICAgICAgIG1vZGUgb3IgYSBiYWNrIHJlZmVyZW5jZS4KKworICAgICAgICAgUENSRTJfRVJST1JfREZBX1VDT05ECisKKyAgICAgICBUaGlzICByZXR1cm4gIGlzIGdpdmVuIGlmIHBjcmUyX2RmYV9tYXRjaCgpIGVuY291bnRlcnMgYSBjb25kaXRpb24gaXRlbQorICAgICAgIHRoYXQgdXNlcyBhIGJhY2sgcmVmZXJlbmNlIGZvciB0aGUgY29uZGl0aW9uLCBvciBhIHRlc3QgIGZvciAgcmVjdXJzaW9uCisgICAgICAgaW4gYSBzcGVjaWZpYyBncm91cC4gVGhlc2UgYXJlIG5vdCBzdXBwb3J0ZWQuCisKKyAgICAgICAgIFBDUkUyX0VSUk9SX0RGQV9XU1NJWkUKKworICAgICAgIFRoaXMgIHJldHVybiAgaXMgIGdpdmVuICBpZiAgcGNyZTJfZGZhX21hdGNoKCkgcnVucyBvdXQgb2Ygc3BhY2UgaW4gdGhlCisgICAgICAgd29ya3NwYWNlIHZlY3Rvci4KKworICAgICAgICAgUENSRTJfRVJST1JfREZBX1JFQ1VSU0UKKworICAgICAgIFdoZW4gYSByZWN1cnNpdmUgc3VicGF0dGVybiBpcyBwcm9jZXNzZWQsIHRoZSBtYXRjaGluZyAgZnVuY3Rpb24gIGNhbGxzCisgICAgICAgaXRzZWxmIHJlY3Vyc2l2ZWx5LCB1c2luZyBwcml2YXRlIG1lbW9yeSBmb3IgdGhlIG92ZWN0b3IgYW5kIHdvcmtzcGFjZS4KKyAgICAgICBUaGlzIGVycm9yIGlzIGdpdmVuIGlmIHRoZSBpbnRlcm5hbCBvdmVjdG9yIGlzIG5vdCBsYXJnZSAgZW5vdWdoLiAgVGhpcworICAgICAgIHNob3VsZCBiZSBleHRyZW1lbHkgcmFyZSwgYXMgYSB2ZWN0b3Igb2Ygc2l6ZSAxMDAwIGlzIHVzZWQuCisKKyAgICAgICAgIFBDUkUyX0VSUk9SX0RGQV9CQURSRVNUQVJUCisKKyAgICAgICBXaGVuICBwY3JlMl9kZmFfbWF0Y2goKSAgaXMgIGNhbGxlZCAgd2l0aCB0aGUgUENSRTJfREZBX1JFU1RBUlQgb3B0aW9uLAorICAgICAgIHNvbWUgcGxhdXNpYmlsaXR5IGNoZWNrcyBhcmUgbWFkZSBvbiB0aGUgIGNvbnRlbnRzICBvZiAgdGhlICB3b3Jrc3BhY2UsCisgICAgICAgd2hpY2ggIHNob3VsZCAgY29udGFpbiBkYXRhIGFib3V0IHRoZSBwcmV2aW91cyBwYXJ0aWFsIG1hdGNoLiBJZiBhbnkgb2YKKyAgICAgICB0aGVzZSBjaGVja3MgZmFpbCwgdGhpcyBlcnJvciBpcyBnaXZlbi4KKworCitTRUUgQUxTTworCisgICAgICAgcGNyZTJidWlsZCgzKSwgICBwY3JlMmNhbGxvdXQoMyksICAgIHBjcmUyZGVtbygzKSwgICAgcGNyZTJtYXRjaGluZygzKSwKKyAgICAgICBwY3JlMnBhcnRpYWwoMyksICAgIHBjcmUycG9zaXgoMyksICAgIHBjcmUyc2FtcGxlKDMpLCAgICBwY3JlMnN0YWNrKDMpLAorICAgICAgIHBjcmUydW5pY29kZSgzKS4KKworCitBVVRIT1IKKworICAgICAgIFBoaWxpcCBIYXplbAorICAgICAgIFVuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKyAgICAgICBDYW1icmlkZ2UsIEVuZ2xhbmQuCisKKworUkVWSVNJT04KKworICAgICAgIExhc3QgdXBkYXRlZDogMTYgRGVjZW1iZXIgMjAxNQorICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworUENSRTJCVUlMRCgzKSAgICAgICAgICAgICAgTGlicmFyeSBGdW5jdGlvbnMgTWFudWFsICAgICAgICAgICAgICBQQ1JFMkJVSUxEKDMpCisKKworCitOQU1FCisgICAgICAgUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisKK0JVSUxESU5HIFBDUkUyCisKKyAgICAgICBQQ1JFMiAgaXMgZGlzdHJpYnV0ZWQgd2l0aCBhIGNvbmZpZ3VyZSBzY3JpcHQgdGhhdCBjYW4gYmUgdXNlZCB0byBidWlsZAorICAgICAgIHRoZSBsaWJyYXJ5IGluIFVuaXgtbGlrZSBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGFwcGxpY2F0aW9ucyAga25vd24gIGFzCisgICAgICAgQXV0b3Rvb2xzLiBBbHNvIGluIHRoZSBkaXN0cmlidXRpb24gYXJlIGZpbGVzIHRvIHN1cHBvcnQgYnVpbGRpbmcgdXNpbmcKKyAgICAgICBDTWFrZSBpbnN0ZWFkIG9mIGNvbmZpZ3VyZS4gIFRoZSAgdGV4dCAgZmlsZSAgUkVBRE1FICBjb250YWlucyAgZ2VuZXJhbAorICAgICAgIGluZm9ybWF0aW9uICBhYm91dCAgYnVpbGRpbmcgIHdpdGggQXV0b3Rvb2xzIChzb21lIG9mIHdoaWNoIGlzIHJlcGVhdGVkCisgICAgICAgYmVsb3cpLCBhbmQgYWxzbyBoYXMgc29tZSBjb21tZW50cyBhYm91dCBidWlsZGluZyBvbiB2YXJpb3VzICBvcGVyYXRpbmcKKyAgICAgICBzeXN0ZW1zLiAgVGhlcmUgIGlzIGEgbG90IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYnVpbGRpbmcgUENSRTIgd2l0aG91dAorICAgICAgIHVzaW5nIEF1dG90b29scyAoaW5jbHVkaW5nIGluZm9ybWF0aW9uIGFib3V0IHVzaW5nIENNYWtlICBhbmQgIGJ1aWxkaW5nCisgICAgICAgImJ5ICBoYW5kIikgIGluICB0aGUgIHRleHQgZmlsZSBjYWxsZWQgTk9OLUFVVE9UT09MUy1CVUlMRC4gIFlvdSBzaG91bGQKKyAgICAgICBjb25zdWx0IHRoaXMgZmlsZSBhcyB3ZWxsIGFzIHRoZSBSRUFETUUgZmlsZSBpZiB5b3UgYXJlIGJ1aWxkaW5nICBpbiAgYQorICAgICAgIG5vbi1Vbml4LWxpa2UgZW52aXJvbm1lbnQuCisKKworUENSRTIgQlVJTEQtVElNRSBPUFRJT05TCisKKyAgICAgICBUaGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgb3B0aW9uYWwgZmVhdHVyZXMgb2YgUENSRTIgdGhhdAorICAgICAgIGNhbiBiZSBzZWxlY3RlZCB3aGVuIHRoZSBsaWJyYXJ5IGlzIGNvbXBpbGVkLiBJdCAgYXNzdW1lcyAgdXNlICBvZiAgdGhlCisgICAgICAgY29uZmlndXJlICBzY3JpcHQsICB3aGVyZSAgdGhlICBvcHRpb25hbCBmZWF0dXJlcyBhcmUgc2VsZWN0ZWQgb3IgZGVzZS0KKyAgICAgICBsZWN0ZWQgYnkgcHJvdmlkaW5nIG9wdGlvbnMgdG8gY29uZmlndXJlIGJlZm9yZSBydW5uaW5nIHRoZSAgbWFrZSAgY29tLQorICAgICAgIG1hbmQuICBIb3dldmVyLCAgdGhlIHNhbWUgb3B0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgaW4gYm90aCBVbml4LWxpa2UgYW5kCisgICAgICAgbm9uLVVuaXgtbGlrZSBlbnZpcm9ubWVudHMgaWYgeW91IGFyZSB1c2luZyBDTWFrZSBpbnN0ZWFkIG9mICBjb25maWd1cmUKKyAgICAgICB0byBidWlsZCBQQ1JFMi4KKworICAgICAgIElmICB5b3UgIGFyZSBub3QgdXNpbmcgQXV0b3Rvb2xzIG9yIENNYWtlLCBvcHRpb24gc2VsZWN0aW9uIGNhbiBiZSBkb25lCisgICAgICAgYnkgZWRpdGluZyB0aGUgY29uZmlnLmggZmlsZSwgb3IgYnkgcGFzc2luZyBwYXJhbWV0ZXIgc2V0dGluZ3MgIHRvICB0aGUKKyAgICAgICBjb21waWxlciwgYXMgZGVzY3JpYmVkIGluIE5PTi1BVVRPVE9PTFMtQlVJTEQuCisKKyAgICAgICBUaGUgY29tcGxldGUgbGlzdCBvZiBvcHRpb25zIGZvciBjb25maWd1cmUgKHdoaWNoIGluY2x1ZGVzIHRoZSBzdGFuZGFyZAorICAgICAgIG9uZXMgc3VjaCBhcyB0aGUgIHNlbGVjdGlvbiAgb2YgIHRoZSAgaW5zdGFsbGF0aW9uICBkaXJlY3RvcnkpICBjYW4gIGJlCisgICAgICAgb2J0YWluZWQgYnkgcnVubmluZworCisgICAgICAgICAuL2NvbmZpZ3VyZSAtLWhlbHAKKworICAgICAgIFRoZSAgZm9sbG93aW5nICBzZWN0aW9ucyAgaW5jbHVkZSAgZGVzY3JpcHRpb25zICBvZiBvcHRpb25zIHdob3NlIG5hbWVzCisgICAgICAgYmVnaW4gd2l0aCAtLWVuYWJsZSBvciAtLWRpc2FibGUuIFRoZXNlIHNldHRpbmdzIHNwZWNpZnkgY2hhbmdlcyB0byB0aGUKKyAgICAgICBkZWZhdWx0cyAgZm9yICB0aGUgY29uZmlndXJlIGNvbW1hbmQuIEJlY2F1c2Ugb2YgdGhlIHdheSB0aGF0IGNvbmZpZ3VyZQorICAgICAgIHdvcmtzLCAtLWVuYWJsZSBhbmQgLS1kaXNhYmxlIGFsd2F5cyBjb21lIGluIHBhaXJzLCBzbyAgdGhlICBjb21wbGVtZW4tCisgICAgICAgdGFyeSAgb3B0aW9uIGFsd2F5cyBleGlzdHMgYXMgd2VsbCwgYnV0IGFzIGl0IHNwZWNpZmllcyB0aGUgZGVmYXVsdCwgaXQKKyAgICAgICBpcyBub3QgZGVzY3JpYmVkLgorCisKK0JVSUxESU5HIDgtQklULCAxNi1CSVQgQU5EIDMyLUJJVCBMSUJSQVJJRVMKKworICAgICAgIEJ5IGRlZmF1bHQsIGEgbGlicmFyeSBjYWxsZWQgbGlicGNyZTItOCBpcyBidWlsdCwgY29udGFpbmluZyAgZnVuY3Rpb25zCisgICAgICAgdGhhdCAgdGFrZSAgc3RyaW5nIGFyZ3VtZW50cyBjb250YWluZWQgaW4gdmVjdG9ycyBvZiBieXRlcywgaW50ZXJwcmV0ZWQKKyAgICAgICBlaXRoZXIgYXMgc2luZ2xlLWJ5dGUgY2hhcmFjdGVycywgb3IgVVRGLTggc3RyaW5ncy4gWW91IGNhbiBhbHNvICBidWlsZAorICAgICAgIHR3byAgb3RoZXIgbGlicmFyaWVzLCBjYWxsZWQgbGlicGNyZTItMTYgYW5kIGxpYnBjcmUyLTMyLCB3aGljaCBwcm9jZXNzCisgICAgICAgc3RyaW5ncyB0aGF0IGFyZSBjb250YWluZWQgaW4gdmVjdG9ycyBvZiAxNi1iaXQgYW5kIDMyLWJpdCBjb2RlICB1bml0cywKKyAgICAgICByZXNwZWN0aXZlbHkuIFRoZXNlIGNhbiBiZSBpbnRlcnByZXRlZCBlaXRoZXIgYXMgc2luZ2xlLXVuaXQgY2hhcmFjdGVycworICAgICAgIG9yIFVURi0xNi9VVEYtMzIgc3RyaW5ncy4gVG8gYnVpbGQgdGhlc2UgYWRkaXRpb25hbCBsaWJyYXJpZXMsIGFkZCAgb25lCisgICAgICAgb3IgYm90aCBvZiB0aGUgZm9sbG93aW5nIHRvIHRoZSBjb25maWd1cmUgY29tbWFuZDoKKworICAgICAgICAgLS1lbmFibGUtcGNyZTItMTYKKyAgICAgICAgIC0tZW5hYmxlLXBjcmUyLTMyCisKKyAgICAgICBJZiB5b3UgZG8gbm90IHdhbnQgdGhlIDgtYml0IGxpYnJhcnksIGFkZAorCisgICAgICAgICAtLWRpc2FibGUtcGNyZTItOAorCisgICAgICAgYXMgIHdlbGwuICBBdCBsZWFzdCBvbmUgb2YgdGhlIHRocmVlIGxpYnJhcmllcyBtdXN0IGJlIGJ1aWx0LiBOb3RlIHRoYXQKKyAgICAgICB0aGUgUE9TSVggd3JhcHBlciBpcyBmb3IgdGhlIDgtYml0IGxpYnJhcnkgb25seSwgYW5kIHRoYXQgcGNyZTJncmVwICBpcworICAgICAgIGFuICA4LWJpdCAgcHJvZ3JhbS4gIE5laXRoZXIgIG9mIHRoZXNlIGFyZSBidWlsdCBpZiB5b3Ugc2VsZWN0IG9ubHkgdGhlCisgICAgICAgMTYtYml0IG9yIDMyLWJpdCBsaWJyYXJpZXMuCisKKworQlVJTERJTkcgU0hBUkVEIEFORCBTVEFUSUMgTElCUkFSSUVTCisKKyAgICAgICBUaGUgQXV0b3Rvb2xzIFBDUkUyIGJ1aWxkaW5nIHByb2Nlc3MgdXNlcyBsaWJ0b29sIHRvIGJ1aWxkIGJvdGggIHNoYXJlZAorICAgICAgIGFuZCAgc3RhdGljICBsaWJyYXJpZXMgYnkgZGVmYXVsdC4gWW91IGNhbiBzdXBwcmVzcyBhbiB1bndhbnRlZCBsaWJyYXJ5CisgICAgICAgYnkgYWRkaW5nIG9uZSBvZgorCisgICAgICAgICAtLWRpc2FibGUtc2hhcmVkCisgICAgICAgICAtLWRpc2FibGUtc3RhdGljCisKKyAgICAgICB0byB0aGUgY29uZmlndXJlIGNvbW1hbmQuCisKKworVU5JQ09ERSBBTkQgVVRGIFNVUFBPUlQKKworICAgICAgIEJ5IGRlZmF1bHQsIFBDUkUyIGlzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgVW5pY29kZSBhbmQgIFVURiAgY2hhcmFjdGVyCisgICAgICAgc3RyaW5ncy4gIFRvIGJ1aWxkIGl0IHdpdGhvdXQgVW5pY29kZSBzdXBwb3J0LCBhZGQKKworICAgICAgICAgLS1kaXNhYmxlLXVuaWNvZGUKKworICAgICAgIHRvICB0aGUgY29uZmlndXJlIGNvbW1hbmQuIFRoaXMgc2V0dGluZyBhcHBsaWVzIHRvIGFsbCB0aHJlZSBsaWJyYXJpZXMuCisgICAgICAgSXQgaXMgbm90IHBvc3NpYmxlIHRvIGJ1aWxkICBvbmUgIGxpYnJhcnkgIHdpdGggIFVuaWNvZGUgIHN1cHBvcnQsICBhbmQKKyAgICAgICBhbm90aGVyIHdpdGhvdXQsIGluIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICBPZiAgaXRzZWxmLCBVbmljb2RlIHN1cHBvcnQgZG9lcyBub3QgbWFrZSBQQ1JFMiB0cmVhdCBzdHJpbmdzIGFzIFVURi04LAorICAgICAgIFVURi0xNiBvciBVVEYtMzIuIFRvIGRvIHRoYXQsIGFwcGxpY2F0aW9ucyB0aGF0IHVzZSB0aGUgbGlicmFyeSBjYW4gc2V0CisgICAgICAgdGhlICBQQ1JFMl9VVEYgIG9wdGlvbiB3aGVuIHRoZXkgY2FsbCBwY3JlMl9jb21waWxlKCkgdG8gY29tcGlsZSBhIHBhdC0KKyAgICAgICB0ZXJuLiAgQWx0ZXJuYXRpdmVseSwgcGF0dGVybnMgbWF5IGJlIHN0YXJ0ZWQgd2l0aCAgKCpVVEYpICB1bmxlc3MgIHRoZQorICAgICAgIGFwcGxpY2F0aW9uIGhhcyBsb2NrZWQgdGhpcyBvdXQgYnkgc2V0dGluZyBQQ1JFMl9ORVZFUl9VVEYuCisKKyAgICAgICBVVEYgc3VwcG9ydCBhbGxvd3MgdGhlIGxpYnJhcmllcyB0byBwcm9jZXNzIGNoYXJhY3RlciBjb2RlIHBvaW50cyB1cCB0bworICAgICAgIDB4MTBmZmZmIGluIHRoZSBzdHJpbmdzIHRoYXQgdGhleSBoYW5kbGUuIEl0IGFsc28gcHJvdmlkZXMgc3VwcG9ydCAgZm9yCisgICAgICAgYWNjZXNzaW5nICB0aGUgIFVuaWNvZGUgIHByb3BlcnRpZXMgIG9mICBzdWNoIGNoYXJhY3RlcnMsIHVzaW5nIHBhdHRlcm4KKyAgICAgICBlc2NhcGVzIHN1Y2ggYXMgXFAsIFxwLCBhbmQgXFguIE9ubHkgdGhlICBnZW5lcmFsICBjYXRlZ29yeSAgcHJvcGVydGllcworICAgICAgIHN1Y2ggIGFzIEx1IGFuZCBOZCBhcmUgc3VwcG9ydGVkLiBEZXRhaWxzIGFyZSBnaXZlbiBpbiB0aGUgcGNyZTJwYXR0ZXJuCisgICAgICAgZG9jdW1lbnRhdGlvbi4KKworICAgICAgIFBhdHRlcm4gZXNjYXBlcyBzdWNoIGFzIFxkIGFuZCBcdyBkbyBub3QgYnkgZGVmYXVsdCBtYWtlIHVzZSBvZiBVbmljb2RlCisgICAgICAgcHJvcGVydGllcy4gIFRoZSAgYXBwbGljYXRpb24gIGNhbiAgcmVxdWVzdCB0aGF0IHRoZXkgZG8gYnkgc2V0dGluZyB0aGUKKyAgICAgICBQQ1JFMl9VQ1Agb3B0aW9uLiBVbmxlc3MgdGhlIGFwcGxpY2F0aW9uICBoYXMgIHNldCAgUENSRTJfTkVWRVJfVUNQLCAgYQorICAgICAgIHBhdHRlcm4gbWF5IGFsc28gcmVxdWVzdCB0aGlzIGJ5IHN0YXJ0aW5nIHdpdGggKCpVQ1ApLgorCisKK0RJU0FCTElORyBUSEUgVVNFIE9GIFxDCisKKyAgICAgICBUaGUgXEMgZXNjYXBlIHNlcXVlbmNlLCB3aGljaCBtYXRjaGVzIGEgc2luZ2xlIGNvZGUgdW5pdCwgZXZlbiBpbiBhIFVURgorICAgICAgIG1vZGUsIGNhbiBjYXVzZSB1bnByZWRpY3RhYmxlIGJlaGF2aW91ciBiZWNhdXNlIGl0IG1heSBsZWF2ZSAgdGhlICBjdXItCisgICAgICAgcmVudCAgbWF0Y2hpbmcgIHBvaW50IGluIHRoZSBtaWRkbGUgb2YgYSBtdWx0aS1jb2RlLXVuaXQgY2hhcmFjdGVyLiBUaGUKKyAgICAgICBhcHBsaWNhdGlvbiBjYW4gbG9jayBpdCAgb3V0ICBieSAgc2V0dGluZyAgdGhlICBQQ1JFMl9ORVZFUl9CQUNLU0xBU0hfQworICAgICAgIG9wdGlvbiB3aGVuIGNhbGxpbmcgcGNyZTJfY29tcGlsZSgpLiBUaGVyZSBpcyBhbHNvIGEgYnVpbGQtdGltZSBvcHRpb24KKworICAgICAgICAgLS1lbmFibGUtbmV2ZXItYmFja3NsYXNoLUMKKworICAgICAgIChub3RlIHRoZSB1cHBlciBjYXNlIEMpIHdoaWNoIGxvY2tzIG91dCB0aGUgdXNlIG9mIFxDIGVudGlyZWx5LgorCisKK0pVU1QtSU4tVElNRSBDT01QSUxFUiBTVVBQT1JUCisKKyAgICAgICBKdXN0LWluLXRpbWUgY29tcGlsZXIgc3VwcG9ydCBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgYnkgc3BlY2lmeWluZworCisgICAgICAgICAtLWVuYWJsZS1qaXQKKworICAgICAgIFRoaXMgIHN1cHBvcnQgIGlzIGF2YWlsYWJsZSBvbmx5IGZvciBjZXJ0YWluIGhhcmR3YXJlIGFyY2hpdGVjdHVyZXMuIElmCisgICAgICAgdGhpcyBvcHRpb24gaXMgc2V0IGZvciBhbiB1bnN1cHBvcnRlZCBhcmNoaXRlY3R1cmUsICBhICBidWlsZGluZyAgZXJyb3IKKyAgICAgICBvY2N1cnMuICAgU2VlIHRoZSBwY3JlMmppdCBkb2N1bWVudGF0aW9uIGZvciBhIGRpc2N1c3Npb24gb2YgSklUIHVzYWdlLgorICAgICAgIFdoZW4gSklUIHN1cHBvcnQgaXMgZW5hYmxlZCwgcGNyZTJncmVwIGF1dG9tYXRpY2FsbHkgbWFrZXMgdXNlICBvZiAgaXQsCisgICAgICAgdW5sZXNzIHlvdSBhZGQKKworICAgICAgICAgLS1kaXNhYmxlLXBjcmUyZ3JlcC1qaXQKKworICAgICAgIHRvIHRoZSAiY29uZmlndXJlIiBjb21tYW5kLgorCisKK05FV0xJTkUgUkVDT0dOSVRJT04KKworICAgICAgIEJ5ICBkZWZhdWx0LCBQQ1JFMiBpbnRlcnByZXRzIHRoZSBsaW5lZmVlZCAoTEYpIGNoYXJhY3RlciBhcyBpbmRpY2F0aW5nCisgICAgICAgdGhlIGVuZCBvZiBhIGxpbmUuIFRoaXMgaXMgdGhlIG5vcm1hbCBuZXdsaW5lICBjaGFyYWN0ZXIgIG9uICBVbml4LWxpa2UKKyAgICAgICBzeXN0ZW1zLiAgWW91IGNhbiBjb21waWxlIFBDUkUyIHRvIHVzZSBjYXJyaWFnZSByZXR1cm4gKENSKSBpbnN0ZWFkLCBieQorICAgICAgIGFkZGluZworCisgICAgICAgICAtLWVuYWJsZS1uZXdsaW5lLWlzLWNyCisKKyAgICAgICB0byB0aGUgY29uZmlndXJlICBjb21tYW5kLiAgVGhlcmUgIGlzICBhbHNvICBhbiAgLS1lbmFibGUtbmV3bGluZS1pcy1sZgorICAgICAgIG9wdGlvbiwgd2hpY2ggZXhwbGljaXRseSBzcGVjaWZpZXMgbGluZWZlZWQgYXMgdGhlIG5ld2xpbmUgY2hhcmFjdGVyLgorCisgICAgICAgQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzcGVjaWZ5IHRoYXQgbGluZSBlbmRpbmdzIGFyZSB0byBiZSBpbmRpY2F0ZWQgYnkKKyAgICAgICB0aGUgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSBDUkxGIChDUiBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBMRikuIElmIHlvdQorICAgICAgIHdhbnQgdGhpcywgYWRkCisKKyAgICAgICAgIC0tZW5hYmxlLW5ld2xpbmUtaXMtY3JsZgorCisgICAgICAgdG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kLiBUaGVyZSBpcyBhIGZvdXJ0aCBvcHRpb24sIHNwZWNpZmllZCBieQorCisgICAgICAgICAtLWVuYWJsZS1uZXdsaW5lLWlzLWFueWNybGYKKworICAgICAgIHdoaWNoICBjYXVzZXMgIFBDUkUyIHRvIHJlY29nbml6ZSBhbnkgb2YgdGhlIHRocmVlIHNlcXVlbmNlcyBDUiwgTEYsIG9yCisgICAgICAgQ1JMRiBhcyBpbmRpY2F0aW5nIGEgbGluZSBlbmRpbmcuIEZpbmFsbHksIGEgZmlmdGggb3B0aW9uLCBzcGVjaWZpZWQgYnkKKworICAgICAgICAgLS1lbmFibGUtbmV3bGluZS1pcy1hbnkKKworICAgICAgIGNhdXNlcyBQQ1JFMiB0byByZWNvZ25pemUgYW55IFVuaWNvZGUgIG5ld2xpbmUgIHNlcXVlbmNlLiAgVGhlICBVbmljb2RlCisgICAgICAgbmV3bGluZSBzZXF1ZW5jZXMgYXJlIHRoZSB0aHJlZSBqdXN0IG1lbnRpb25lZCwgcGx1cyB0aGUgc2luZ2xlIGNoYXJhYy0KKyAgICAgICB0ZXJzIFZUICh2ZXJ0aWNhbCB0YWIsIFUrMDAwQiksIEZGIChmb3JtIGZlZWQsIFUrMDAwQyksIE5FTCAobmV4dCBsaW5lLAorICAgICAgIFUrMDA4NSksICBMUyAgKGxpbmUgIHNlcGFyYXRvciwgIFUrMjAyOCksICBhbmQgUFMgKHBhcmFncmFwaCBzZXBhcmF0b3IsCisgICAgICAgVSsyMDI5KS4KKworICAgICAgIFdoYXRldmVyIGRlZmF1bHQgbGluZSBlbmRpbmcgY29udmVudGlvbiBpcyBzZWxlY3RlZCB3aGVuIFBDUkUyIGlzIGJ1aWx0CisgICAgICAgY2FuICBiZSAgb3ZlcnJpZGRlbiBieSBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGhlIGxpYnJhcnkuIEF0IGJ1aWxkIHRpbWUKKyAgICAgICBpdCBpcyBjb252ZW50aW9uYWwgdG8gdXNlIHRoZSBzdGFuZGFyZCBmb3IgeW91ciBvcGVyYXRpbmcgc3lzdGVtLgorCisKK1dIQVQgXFIgTUFUQ0hFUworCisgICAgICAgQnkgZGVmYXVsdCwgdGhlIHNlcXVlbmNlIFxSIGluIGEgcGF0dGVybiBtYXRjaGVzICBhbnkgIFVuaWNvZGUgIG5ld2xpbmUKKyAgICAgICBzZXF1ZW5jZSwgIGluZGVwZW5kZW50bHkgIG9mICB3aGF0IGhhcyBiZWVuIHNlbGVjdGVkIGFzIHRoZSBsaW5lIGVuZGluZworICAgICAgIHNlcXVlbmNlLiBJZiB5b3Ugc3BlY2lmeQorCisgICAgICAgICAtLWVuYWJsZS1ic3ItYW55Y3JsZgorCisgICAgICAgdGhlIGRlZmF1bHQgaXMgY2hhbmdlZCBzbyB0aGF0IFxSIG1hdGNoZXMgb25seSBDUiwgTEYsIG9yICBDUkxGLiAgV2hhdC0KKyAgICAgICBldmVyICBpcyBzZWxlY3RlZCB3aGVuIFBDUkUyIGlzIGJ1aWx0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFwcGxpY2F0aW9ucworICAgICAgIHRoYXQgdXNlIHRoZSBjYWxsZWQuCisKKworSEFORExJTkcgVkVSWSBMQVJHRSBQQVRURVJOUworCisgICAgICAgV2l0aGluIGEgY29tcGlsZWQgcGF0dGVybiwgb2Zmc2V0IHZhbHVlcyBhcmUgdXNlZCAgdG8gIHBvaW50ICBmcm9tICBvbmUKKyAgICAgICBwYXJ0ICB0byBhbm90aGVyIChmb3IgZXhhbXBsZSwgZnJvbSBhbiBvcGVuaW5nIHBhcmVudGhlc2lzIHRvIGFuIGFsdGVyLQorICAgICAgIG5hdGlvbiBtZXRhY2hhcmFjdGVyKS4gQnkgZGVmYXVsdCwgaW4gdGhlIDgtYml0IGFuZCAgMTYtYml0ICBsaWJyYXJpZXMsCisgICAgICAgdHdvLWJ5dGUgIHZhbHVlcyAgYXJlIHVzZWQgZm9yIHRoZXNlIG9mZnNldHMsIGxlYWRpbmcgdG8gYSBtYXhpbXVtIHNpemUKKyAgICAgICBmb3IgYSBjb21waWxlZCBwYXR0ZXJuIG9mIGFyb3VuZCA2NEsgY29kZSB1bml0cy4gVGhpcyBpcyBzdWZmaWNpZW50ICB0bworICAgICAgIGhhbmRsZSBhbGwgYnV0IHRoZSBtb3N0IGdpZ2FudGljIHBhdHRlcm5zLiBOZXZlcnRoZWxlc3MsIHNvbWUgcGVvcGxlIGRvCisgICAgICAgd2FudCB0byBwcm9jZXNzIHRydWx5IGVub3Jtb3VzIHBhdHRlcm5zLCBzbyBpdCBpcyBwb3NzaWJsZSAgdG8gIGNvbXBpbGUKKyAgICAgICBQQ1JFMiAgdG8gIHVzZSB0aHJlZS1ieXRlIG9yIGZvdXItYnl0ZSBvZmZzZXRzIGJ5IGFkZGluZyBhIHNldHRpbmcgc3VjaAorICAgICAgIGFzCisKKyAgICAgICAgIC0td2l0aC1saW5rLXNpemU9MworCisgICAgICAgdG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kLiBUaGUgdmFsdWUgZ2l2ZW4gbXVzdCBiZSAyLCAzLCBvciA0LiAgRm9yICB0aGUKKyAgICAgICAxNi1iaXQgIGxpYnJhcnksICBhICB2YWx1ZSBvZiAzIGlzIHJvdW5kZWQgdXAgdG8gNC4gSW4gdGhlc2UgbGlicmFyaWVzLAorICAgICAgIHVzaW5nIGxvbmdlciBvZmZzZXRzIHNsb3dzIGRvd24gdGhlIG9wZXJhdGlvbiBvZiBQQ1JFMiBiZWNhdXNlICBpdCAgaGFzCisgICAgICAgdG8gIGxvYWQgYWRkaXRpb25hbCBkYXRhIHdoZW4gaGFuZGxpbmcgdGhlbS4gRm9yIHRoZSAzMi1iaXQgbGlicmFyeSB0aGUKKyAgICAgICB2YWx1ZSBpcyBhbHdheXMgNCBhbmQgY2Fubm90IGJlIG92ZXJyaWRkZW47IHRoZSB2YWx1ZSAgb2YgIC0td2l0aC1saW5rLQorICAgICAgIHNpemUgaXMgaWdub3JlZC4KKworCitBVk9JRElORyBFWENFU1NJVkUgU1RBQ0sgVVNBR0UKKworICAgICAgIFdoZW4gIG1hdGNoaW5nICB3aXRoIHRoZSBwY3JlMl9tYXRjaCgpIGZ1bmN0aW9uLCBQQ1JFMiBpbXBsZW1lbnRzIGJhY2stCisgICAgICAgdHJhY2tpbmcgYnkgbWFraW5nIHJlY3Vyc2l2ZSAgY2FsbHMgIHRvICBhbiAgaW50ZXJuYWwgIGZ1bmN0aW9uICBjYWxsZWQKKyAgICAgICBtYXRjaCgpLiAgSW4gIGVudmlyb25tZW50cyB3aGVyZSB0aGUgc2l6ZSBvZiB0aGUgc3RhY2sgaXMgbGltaXRlZCwgdGhpcworICAgICAgIGNhbiBzZXZlcmVseSBsaW1pdCBQQ1JFMidzIG9wZXJhdGlvbi4gKFRoZSBVbml4ICBlbnZpcm9ubWVudCAgZG9lcyAgbm90CisgICAgICAgdXN1YWxseSAgc3VmZmVyIGZyb20gdGhpcyBwcm9ibGVtLCBidXQgaXQgbWF5IHNvbWV0aW1lcyBiZSBuZWNlc3NhcnkgdG8KKyAgICAgICBpbmNyZWFzZSAgdGhlICBtYXhpbXVtICBzdGFjayAgc2l6ZS4gIFRoZXJlICBpcyAgYSAgZGlzY3Vzc2lvbiAgaW4gIHRoZQorICAgICAgIHBjcmUyc3RhY2sgIGRvY3VtZW50YXRpb24uKSAgQW4gIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIHJlY3Vyc2lvbiB0aGF0CisgICAgICAgdXNlcyBtZW1vcnkgZnJvbSB0aGUgaGVhcCB0byByZW1lbWJlciBkYXRhLCBpbnN0ZWFkIG9mIHVzaW5nICByZWN1cnNpdmUKKyAgICAgICBmdW5jdGlvbiAgY2FsbHMsIGhhcyBiZWVuIGltcGxlbWVudGVkIHRvIHdvcmsgcm91bmQgdGhlIHByb2JsZW0gb2YgbGltLQorICAgICAgIGl0ZWQgc3RhY2sgc2l6ZS4gSWYgeW91IHdhbnQgdG8gYnVpbGQgYSB2ZXJzaW9uICBvZiAgUENSRTIgIHRoYXQgIHdvcmtzCisgICAgICAgdGhpcyB3YXksIGFkZAorCisgICAgICAgICAtLWRpc2FibGUtc3RhY2stZm9yLXJlY3Vyc2lvbgorCisgICAgICAgdG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kLiBCeSBkZWZhdWx0LCB0aGUgc3lzdGVtIGZ1bmN0aW9ucyBtYWxsb2MoKSBhbmQKKyAgICAgICBmcmVlKCkgYXJlIGNhbGxlZCB0byBtYW5hZ2UgdGhlIGhlYXAgbWVtb3J5IHRoYXQgaXMgcmVxdWlyZWQsIGJ1dCAgY3VzLQorICAgICAgIHRvbSAgbWVtb3J5ICBtYW5hZ2VtZW50ICBmdW5jdGlvbnMgIGNhbiAgYmUgIGNhbGxlZCBpbnN0ZWFkLiBQQ1JFMiBydW5zCisgICAgICAgbm90aWNlYWJseSBtb3JlIHNsb3dseSB3aGVuIGJ1aWx0IGluIHRoaXMgd2F5LiBUaGlzIG9wdGlvbiBhZmZlY3RzIG9ubHkKKyAgICAgICB0aGUgcGNyZTJfbWF0Y2goKSBmdW5jdGlvbjsgaXQgaXMgbm90IHJlbGV2YW50IGZvciBwY3JlMl9kZmFfbWF0Y2goKS4KKworCitMSU1JVElORyBQQ1JFMiBSRVNPVVJDRSBVU0FHRQorCisgICAgICAgSW50ZXJuYWxseSwgUENSRTIgaGFzIGEgZnVuY3Rpb24gY2FsbGVkIG1hdGNoKCksIHdoaWNoIGl0IGNhbGxzIHJlcGVhdC0KKyAgICAgICBlZGx5ICAoc29tZXRpbWVzICByZWN1cnNpdmVseSkgIHdoZW4gIG1hdGNoaW5nICBhICBwYXR0ZXJuICAgd2l0aCAgIHRoZQorICAgICAgIHBjcmUyX21hdGNoKCkgZnVuY3Rpb24uIEJ5IGNvbnRyb2xsaW5nIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aW1lcyB0aGlzCisgICAgICAgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBkdXJpbmcgYSBzaW5nbGUgbWF0Y2hpbmcgb3BlcmF0aW9uLCBhIGxpbWl0ICBjYW4KKyAgICAgICBiZSAgcGxhY2VkIG9uIHRoZSByZXNvdXJjZXMgdXNlZCBieSBhIHNpbmdsZSBjYWxsIHRvIHBjcmUyX21hdGNoKCkuIFRoZQorICAgICAgIGxpbWl0IGNhbiBiZSBjaGFuZ2VkIGF0IHJ1biB0aW1lLCBhcyBkZXNjcmliZWQgaW4gdGhlIHBjcmUyYXBpIGRvY3VtZW4tCisgICAgICAgdGF0aW9uLiAgVGhlIGRlZmF1bHQgaXMgMTAgbWlsbGlvbiwgYnV0IHRoaXMgY2FuIGJlIGNoYW5nZWQgYnkgYWRkaW5nIGEKKyAgICAgICBzZXR0aW5nIHN1Y2ggYXMKKworICAgICAgICAgLS13aXRoLW1hdGNoLWxpbWl0PTUwMDAwMAorCisgICAgICAgdG8gIHRoZSAgY29uZmlndXJlICBjb21tYW5kLiAgVGhpcyAgc2V0dGluZyAgaGFzICBubyAgZWZmZWN0ICAgb24gICB0aGUKKyAgICAgICBwY3JlMl9kZmFfbWF0Y2goKSBtYXRjaGluZyBmdW5jdGlvbi4KKworICAgICAgIEluICBzb21lICBlbnZpcm9ubWVudHMgIGl0IGlzIGRlc2lyYWJsZSB0byBsaW1pdCB0aGUgZGVwdGggb2YgcmVjdXJzaXZlCisgICAgICAgY2FsbHMgb2YgbWF0Y2goKSBtb3JlIHN0cmljdGx5IHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjYWxscywgaW4gb3JkZXIKKyAgICAgICB0byAgcmVzdHJpY3QgIHRoZSBtYXhpbXVtIGFtb3VudCBvZiBzdGFjayAob3IgaGVhcCwgaWYgLS1kaXNhYmxlLXN0YWNrLQorICAgICAgIGZvci1yZWN1cnNpb24gaXMgc3BlY2lmaWVkKSB0aGF0IGlzIHVzZWQuIEEgc2Vjb25kIGxpbWl0IGNvbnRyb2xzIHRoaXM7CisgICAgICAgaXQgIGRlZmF1bHRzICB0byAgdGhlICB2YWx1ZSAgdGhhdCBpcyBzZXQgZm9yIC0td2l0aC1tYXRjaC1saW1pdCwgd2hpY2gKKyAgICAgICBpbXBvc2VzIG5vIGFkZGl0aW9uYWwgY29uc3RyYWludHMuIEhvd2V2ZXIsIHlvdSBjYW4gc2V0IGEgIGxvd2VyICBsaW1pdAorICAgICAgIGJ5IGFkZGluZywgZm9yIGV4YW1wbGUsCisKKyAgICAgICAgIC0td2l0aC1tYXRjaC1saW1pdC1yZWN1cnNpb249MTAwMDAKKworICAgICAgIHRvICB0aGUgIGNvbmZpZ3VyZSAgY29tbWFuZC4gIFRoaXMgIHZhbHVlIGNhbiBhbHNvIGJlIG92ZXJyaWRkZW4gYXQgcnVuCisgICAgICAgdGltZS4KKworCitDUkVBVElORyBDSEFSQUNURVIgVEFCTEVTIEFUIEJVSUxEIFRJTUUKKworICAgICAgIFBDUkUyIHVzZXMgZml4ZWQgdGFibGVzIGZvciBwcm9jZXNzaW5nIGNoYXJhY3RlcnMgd2hvc2UgY29kZSBwb2ludHMgYXJlCisgICAgICAgbGVzcyB0aGFuIDI1Ni4gQnkgZGVmYXVsdCwgUENSRTIgaXMgYnVpbHQgd2l0aCBhIHNldCBvZiB0YWJsZXMgdGhhdCBhcmUKKyAgICAgICBkaXN0cmlidXRlZCBpbiB0aGUgZmlsZSBzcmMvcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QuIFRoZXNlICB0YWJsZXMgIGFyZQorICAgICAgIGZvciBBU0NJSSBjb2RlcyBvbmx5LiBJZiB5b3UgYWRkCisKKyAgICAgICAgIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcworCisgICAgICAgdG8gIHRoZSAgY29uZmlndXJlICBjb21tYW5kLCB0aGUgZGlzdHJpYnV0ZWQgdGFibGVzIGFyZSBubyBsb25nZXIgdXNlZC4KKyAgICAgICBJbnN0ZWFkLCBhIHByb2dyYW0gY2FsbGVkIGRmdGFibGVzIGlzIGNvbXBpbGVkIGFuZCAgcnVuLiAgVGhpcyAgb3V0cHV0cworICAgICAgIHRoZSBzb3VyY2UgZm9yIG5ldyBzZXQgb2YgdGFibGVzLCBjcmVhdGVkIGluIHRoZSBkZWZhdWx0IGxvY2FsZSBvZiB5b3VyCisgICAgICAgQyBydW4tdGltZSBzeXN0ZW0uIChUaGlzIG1ldGhvZCBvZiByZXBsYWNpbmcgdGhlIHRhYmxlcyBkb2VzICBub3QgIHdvcmsKKyAgICAgICBpZiAgeW91IGFyZSBjcm9zcyBjb21waWxpbmcsIGJlY2F1c2UgZGZ0YWJsZXMgaXMgcnVuIG9uIHRoZSBsb2NhbCBob3N0LgorICAgICAgIElmIHlvdSBuZWVkIHRvIGNyZWF0ZSBhbHRlcm5hdGl2ZSB0YWJsZXMgd2hlbiBjcm9zcyBjb21waWxpbmcsIHlvdSB3aWxsCisgICAgICAgaGF2ZSB0byBkbyBzbyAiYnkgaGFuZCIuKQorCisKK1VTSU5HIEVCQ0RJQyBDT0RFCisKKyAgICAgICBQQ1JFMiAgYXNzdW1lcyAgYnkgZGVmYXVsdCB0aGF0IGl0IHdpbGwgcnVuIGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZQorICAgICAgIGNoYXJhY3RlciBjb2RlIGlzIEFTQ0lJIG9yIFVuaWNvZGUsIHdoaWNoIGlzIGEgc3VwZXJzZXQgb2YgQVNDSUkuICBUaGlzCisgICAgICAgaXMgdGhlIGNhc2UgZm9yIG1vc3QgY29tcHV0ZXIgb3BlcmF0aW5nIHN5c3RlbXMuIFBDUkUyIGNhbiwgaG93ZXZlciwgYmUKKyAgICAgICBjb21waWxlZCB0byBydW4gaW4gYW4gOC1iaXQgRUJDRElDIGVudmlyb25tZW50IGJ5IGFkZGluZworCisgICAgICAgICAtLWVuYWJsZS1lYmNkaWMgLS1kaXNhYmxlLXVuaWNvZGUKKworICAgICAgIHRvIHRoZSBjb25maWd1cmUgY29tbWFuZC4gVGhpcyBzZXR0aW5nIGltcGxpZXMgLS1lbmFibGUtcmVidWlsZC1jaGFydGEtCisgICAgICAgYmxlcy4gIFlvdSAgc2hvdWxkICBvbmx5ICB1c2UgIGl0IGlmIHlvdSBrbm93IHRoYXQgeW91IGFyZSBpbiBhbiBFQkNESUMKKyAgICAgICBlbnZpcm9ubWVudCAoZm9yIGV4YW1wbGUsIGFuIElCTSBtYWluZnJhbWUgb3BlcmF0aW5nIHN5c3RlbSkuCisKKyAgICAgICBJdCBpcyBub3QgcG9zc2libGUgdG8gc3VwcG9ydCBib3RoIEVCQ0RJQyBhbmQgVVRGLTggY29kZXMgaW4gIHRoZSAgc2FtZQorICAgICAgIHZlcnNpb24gIG9mICB0aGUgIGxpYnJhcnkuIENvbnNlcXVlbnRseSwgLS1lbmFibGUtdW5pY29kZSBhbmQgLS1lbmFibGUtCisgICAgICAgZWJjZGljIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisKKyAgICAgICBUaGUgRUJDRElDIGNoYXJhY3RlciB0aGF0IGNvcnJlc3BvbmRzIHRvIGFuIEFTQ0lJIExGIGlzIGFzc3VtZWQgdG8gaGF2ZQorICAgICAgIHRoZSAgdmFsdWUgIDB4MTUgYnkgZGVmYXVsdC4gSG93ZXZlciwgaW4gc29tZSBFQkNESUMgZW52aXJvbm1lbnRzLCAweDI1CisgICAgICAgaXMgdXNlZC4gSW4gc3VjaCBhbiBlbnZpcm9ubWVudCB5b3Ugc2hvdWxkIHVzZQorCisgICAgICAgICAtLWVuYWJsZS1lYmNkaWMtbmwyNQorCisgICAgICAgYXMgd2VsbCBhcywgb3IgaW5zdGVhZCBvZiwgLS1lbmFibGUtZWJjZGljLiBUaGUgRUJDRElDIGNoYXJhY3RlciBmb3IgQ1IKKyAgICAgICBoYXMgIHRoZSAgc2FtZSAgdmFsdWUgIGFzIGluIEFTQ0lJLCBuYW1lbHksIDB4MGQuIFdoaWNoZXZlciBvZiAweDE1IGFuZAorICAgICAgIDB4MjUgaXMgbm90IGNob3NlbiBhcyBMRiBpcyBtYWRlIHRvIGNvcnJlc3BvbmQgdG8gdGhlIFVuaWNvZGUgTkVMIGNoYXItCisgICAgICAgYWN0ZXIgKHdoaWNoLCBpbiBVbmljb2RlLCBpcyAweDg1KS4KKworICAgICAgIFRoZSBvcHRpb25zIHRoYXQgc2VsZWN0IG5ld2xpbmUgYmVoYXZpb3VyLCBzdWNoIGFzIC0tZW5hYmxlLW5ld2xpbmUtaXMtCisgICAgICAgY3IsIGFuZCBlcXVpdmFsZW50IHJ1bi10aW1lIG9wdGlvbnMsIHJlZmVyIHRvIHRoZXNlIGNoYXJhY3RlciB2YWx1ZXMgaW4KKyAgICAgICBhbiBFQkNESUMgZW52aXJvbm1lbnQuCisKKworUENSRTJHUkVQIE9QVElPTlMgRk9SIENPTVBSRVNTRUQgRklMRSBTVVBQT1JUCisKKyAgICAgICBCeSAgZGVmYXVsdCwgIHBjcmUyZ3JlcCByZWFkcyBhbGwgZmlsZXMgYXMgcGxhaW4gdGV4dC4gWW91IGNhbiBidWlsZCBpdAorICAgICAgIHNvIHRoYXQgaXQgcmVjb2duaXplcyBmaWxlcyB3aG9zZSBuYW1lcyBlbmQgaW4gLmd6IG9yIC5iejIsICBhbmQgIHJlYWRzCisgICAgICAgdGhlbSB3aXRoIGxpYnogb3IgbGliYnoyLCByZXNwZWN0aXZlbHksIGJ5IGFkZGluZyBvbmUgb3IgYm90aCBvZgorCisgICAgICAgICAtLWVuYWJsZS1wY3JlMmdyZXAtbGliegorICAgICAgICAgLS1lbmFibGUtcGNyZTJncmVwLWxpYmJ6MgorCisgICAgICAgdG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kLiBUaGVzZSBvcHRpb25zIG5hdHVyYWxseSByZXF1aXJlIHRoYXQgdGhlIHJlbC0KKyAgICAgICBldmFudCBsaWJyYXJpZXMgYXJlIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbS4gQ29uZmlndXJhdGlvbiAgd2lsbCAgZmFpbAorICAgICAgIGlmIHRoZXkgYXJlIG5vdC4KKworCitQQ1JFMkdSRVAgQlVGRkVSIFNJWkUKKworICAgICAgIHBjcmUyZ3JlcCAgdXNlcyBhbiBpbnRlcm5hbCBidWZmZXIgdG8gaG9sZCBhICJ3aW5kb3ciIG9uIHRoZSBmaWxlIGl0IGlzCisgICAgICAgc2Nhbm5pbmcsIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gb3V0cHV0ICJiZWZvcmUiIGFuZCAiYWZ0ZXIiIGxpbmVzIHdoZW4KKyAgICAgICBpdCAgZmluZHMgIGEgbWF0Y2guIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgaXMgY29udHJvbGxlZCBieSBhIHBhcmFtZXRlcgorICAgICAgIHdob3NlIGRlZmF1bHQgdmFsdWUgaXMgMjBLLiBUaGUgYnVmZmVyIGl0c2VsZiBpcyB0aHJlZSB0aW1lcyB0aGlzIHNpemUsCisgICAgICAgYnV0IGJlY2F1c2Ugb2YgdGhlIHdheSBpdCBpcyB1c2VkIGZvciBob2xkaW5nICJiZWZvcmUiIGxpbmVzLCB0aGUgbG9uZy0KKyAgICAgICBlc3QgbGluZSB0aGF0IGlzIGd1YXJhbnRlZWQgdG8gYmUgcHJvY2Vzc2FibGUgaXMgIHRoZSAgcGFyYW1ldGVyICBzaXplLgorICAgICAgIFlvdSBjYW4gY2hhbmdlIHRoZSBkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZSBieSBhZGRpbmcsIGZvciBleGFtcGxlLAorCisgICAgICAgICAtLXdpdGgtcGNyZTJncmVwLWJ1ZnNpemU9NTBLCisKKyAgICAgICB0byAgdGhlICBjb25maWd1cmUgIGNvbW1hbmQuICBUaGUgY2FsbGVyIG9mIHBjcmUyZ3JlcCBjYW4gb3ZlcnJpZGUgdGhpcworICAgICAgIHZhbHVlIGJ5IHVzaW5nIC0tYnVmZmVyLXNpemUgb24gdGhlIGNvbW1hbmQgbGluZS4uCisKKworUENSRTJURVNUIE9QVElPTiBGT1IgTElCUkVBRExJTkUgU1VQUE9SVAorCisgICAgICAgSWYgeW91IGFkZCBvbmUgb2YKKworICAgICAgICAgLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYnJlYWRsaW5lCisgICAgICAgICAtLWVuYWJsZS1wY3JlMnRlc3QtbGliZWRpdAorCisgICAgICAgdG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kLCBwY3JlMnRlc3QgIGlzICBsaW5rZWQgIHdpdGggIHRoZSAgbGlicmVhZGxpbmUKKyAgICAgICBvcmxpYmVkaXQgbGlicmFyeSwgcmVzcGVjdGl2ZWx5LCBhbmQgd2hlbiBpdHMgaW5wdXQgaXMgZnJvbSBhIHRlcm1pbmFsLAorICAgICAgIGl0IHJlYWRzIGl0IHVzaW5nIHRoZSByZWFkbGluZSgpIGZ1bmN0aW9uLiBUaGlzICBwcm92aWRlcyAgbGluZS1lZGl0aW5nCisgICAgICAgYW5kICBoaXN0b3J5ICBmYWNpbGl0aWVzLiAgTm90ZSB0aGF0IGxpYnJlYWRsaW5lIGlzIEdQTC1saWNlbnNlZCwgc28gaWYKKyAgICAgICB5b3UgZGlzdHJpYnV0ZSBhIGJpbmFyeSBvZiBwY3JlMnRlc3QgbGlua2VkIGluIHRoaXMgd2F5LCB0aGVyZSAgbWF5ICBiZQorICAgICAgIGxpY2Vuc2luZyBpc3N1ZXMuIFRoZXNlIGNhbiBiZSBhdm9pZGVkIGJ5IGxpbmtpbmcgaW5zdGVhZCB3aXRoIGxpYmVkaXQsCisgICAgICAgd2hpY2ggaGFzIGEgQlNEIGxpY2VuY2UuCisKKyAgICAgICBTZXR0aW5nIC0tZW5hYmxlLXBjcmUydGVzdC1saWJyZWFkbGluZSBjYXVzZXMgdGhlIC1scmVhZGxpbmUgb3B0aW9uICB0bworICAgICAgIGJlICBhZGRlZCB0byB0aGUgcGNyZTJ0ZXN0IGJ1aWxkLiBJbiBtYW55IG9wZXJhdGluZyBlbnZpcm9ubWVudHMgd2l0aCBhCisgICAgICAgc3l0ZW0taW5zdGFsbGVkIHJlYWRsaW5lIGxpYnJhcnkgdGhpcyBpcyBzdWZmaWNpZW50LiBIb3dldmVyLCAgaW4gIHNvbWUKKyAgICAgICBlbnZpcm9ubWVudHMgKGUuZy4gaWYgYW4gdW5tb2RpZmllZCBkaXN0cmlidXRpb24gdmVyc2lvbiBvZiByZWFkbGluZSBpcworICAgICAgIGluIHVzZSksIHNvbWUgZXh0cmEgY29uZmlndXJhdGlvbiBtYXkgYmUgbmVjZXNzYXJ5LiAgVGhlICBJTlNUQUxMICBmaWxlCisgICAgICAgZm9yIGxpYnJlYWRsaW5lIHNheXMgdGhpczoKKworICAgICAgICAgIlJlYWRsaW5lIHVzZXMgdGhlIHRlcm1jYXAgZnVuY3Rpb25zLCBidXQgZG9lcyBub3QgbGluayB3aXRoCisgICAgICAgICB0aGUgdGVybWNhcCBvciBjdXJzZXMgbGlicmFyeSBpdHNlbGYsIGFsbG93aW5nIGFwcGxpY2F0aW9ucworICAgICAgICAgd2hpY2ggbGluayB3aXRoIHJlYWRsaW5lIHRoZSB0byBjaG9vc2UgYW4gYXBwcm9wcmlhdGUgbGlicmFyeS4iCisKKyAgICAgICBJZiAgeW91ciBlbnZpcm9ubWVudCBoYXMgbm90IGJlZW4gc2V0IHVwIHNvIHRoYXQgYW4gYXBwcm9wcmlhdGUgbGlicmFyeQorICAgICAgIGlzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQsIHlvdSBtYXkgbmVlZCB0byBhZGQgc29tZXRoaW5nIGxpa2UKKworICAgICAgICAgTElCUz0iLW5jdXJzZXMiCisKKyAgICAgICBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGNvbmZpZ3VyZSBjb21tYW5kLgorCisKK0lOQ0xVRElORyBERUJVR0dJTkcgQ09ERQorCisgICAgICAgSWYgeW91IGFkZAorCisgICAgICAgICAtLWVuYWJsZS1kZWJ1ZworCisgICAgICAgdG8gdGhlIGNvbmZpZ3VyZSBjb21tYW5kLCBhZGRpdGlvbmFsIGRlYnVnZ2luZyBjb2RlIGlzIGluY2x1ZGVkIGluICB0aGUKKyAgICAgICBidWlsZC4gVGhpcyBmZWF0dXJlIGlzIGludGVuZGVkIGZvciB1c2UgYnkgdGhlIFBDUkUyIG1haW50YWluZXJzLgorCisKK0RFQlVHR0lORyBXSVRIIFZBTEdSSU5EIFNVUFBPUlQKKworICAgICAgIElmIHlvdSBhZGQKKworICAgICAgICAgLS1lbmFibGUtdmFsZ3JpbmQKKworICAgICAgIHRvICB0aGUgIGNvbmZpZ3VyZSBjb21tYW5kLCBQQ1JFMiB3aWxsIHVzZSB2YWxncmluZCBhbm5vdGF0aW9ucyB0byBtYXJrCisgICAgICAgY2VydGFpbiBtZW1vcnkgcmVnaW9ucyBhcyAgdW5hZGRyZXNzYWJsZS4gIFRoaXMgIGFsbG93cyAgaXQgIHRvICBkZXRlY3QKKyAgICAgICBpbnZhbGlkICBtZW1vcnkgIGFjY2Vzc2VzLCAgYW5kICBpcyAgbW9zdGx5ICB1c2VmdWwgZm9yIGRlYnVnZ2luZyBQQ1JFMgorICAgICAgIGl0c2VsZi4KKworCitDT0RFIENPVkVSQUdFIFJFUE9SVElORworCisgICAgICAgSWYgeW91ciBDIGNvbXBpbGVyIGlzIGdjYywgeW91IGNhbiBidWlsZCBhIHZlcnNpb24gb2YgIFBDUkUyICB0aGF0ICBjYW4KKyAgICAgICBnZW5lcmF0ZSBhIGNvZGUgY292ZXJhZ2UgcmVwb3J0IGZvciBpdHMgdGVzdCBzdWl0ZS4gVG8gZW5hYmxlIHRoaXMsIHlvdQorICAgICAgIG11c3QgaW5zdGFsbCBsY292IHZlcnNpb24gMS42IG9yIGFib3ZlLiBUaGVuIHNwZWNpZnkKKworICAgICAgICAgLS1lbmFibGUtY292ZXJhZ2UKKworICAgICAgIHRvIHRoZSBjb25maWd1cmUgY29tbWFuZCBhbmQgYnVpbGQgUENSRTIgaW4gdGhlIHVzdWFsIHdheS4KKworICAgICAgIE5vdGUgdGhhdCB1c2luZyBjY2FjaGUgKGEgY2FjaGluZyBDIGNvbXBpbGVyKSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb2RlCisgICAgICAgY292ZXJhZ2UgIHJlcG9ydGluZy4gSWYgeW91IGhhdmUgY29uZmlndXJlZCBjY2FjaGUgdG8gcnVuIGF1dG9tYXRpY2FsbHkKKyAgICAgICBvbiB5b3VyIHN5c3RlbSwgeW91IG11c3Qgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorCisgICAgICAgICBDQ0FDSEVfRElTQUJMRT0xCisKKyAgICAgICBiZWZvcmUgcnVubmluZyBtYWtlIHRvIGJ1aWxkIFBDUkUyLCBzbyB0aGF0IGNjYWNoZSBpcyBub3QgdXNlZC4KKworICAgICAgIFdoZW4gLS1lbmFibGUtY292ZXJhZ2UgaXMgdXNlZCwgIHRoZSAgZm9sbG93aW5nICBhZGRpdGlvbiAgdGFyZ2V0cyAgYXJlCisgICAgICAgYWRkZWQgdG8gdGhlIE1ha2VmaWxlOgorCisgICAgICAgICBtYWtlIGNvdmVyYWdlCisKKyAgICAgICBUaGlzICBjcmVhdGVzICBhICBmcmVzaCBjb3ZlcmFnZSByZXBvcnQgZm9yIHRoZSBQQ1JFMiB0ZXN0IHN1aXRlLiBJdCBpcworICAgICAgIGVxdWl2YWxlbnQgdG8gcnVubmluZyAibWFrZSBjb3ZlcmFnZS1yZXNldCIsICJtYWtlICBjb3ZlcmFnZS1iYXNlbGluZSIsCisgICAgICAgIm1ha2UgY2hlY2siLCBhbmQgdGhlbiAibWFrZSBjb3ZlcmFnZS1yZXBvcnQiLgorCisgICAgICAgICBtYWtlIGNvdmVyYWdlLXJlc2V0CisKKyAgICAgICBUaGlzIHplcm9lcyB0aGUgY292ZXJhZ2UgY291bnRlcnMsIGJ1dCBkb2VzIG5vdGhpbmcgZWxzZS4KKworICAgICAgICAgbWFrZSBjb3ZlcmFnZS1iYXNlbGluZQorCisgICAgICAgVGhpcyBjYXB0dXJlcyBiYXNlbGluZSBjb3ZlcmFnZSBpbmZvcm1hdGlvbi4KKworICAgICAgICAgbWFrZSBjb3ZlcmFnZS1yZXBvcnQKKworICAgICAgIFRoaXMgY3JlYXRlcyB0aGUgY292ZXJhZ2UgcmVwb3J0LgorCisgICAgICAgICBtYWtlIGNvdmVyYWdlLWNsZWFuLXJlcG9ydAorCisgICAgICAgVGhpcyAgcmVtb3ZlcyB0aGUgZ2VuZXJhdGVkIGNvdmVyYWdlIHJlcG9ydCB3aXRob3V0IGNsZWFuaW5nIHRoZSBjb3Zlci0KKyAgICAgICBhZ2UgZGF0YSBpdHNlbGYuCisKKyAgICAgICAgIG1ha2UgY292ZXJhZ2UtY2xlYW4tZGF0YQorCisgICAgICAgVGhpcyByZW1vdmVzIHRoZSBjYXB0dXJlZCBjb3ZlcmFnZSBkYXRhIHdpdGhvdXQgcmVtb3ZpbmcgIHRoZSAgY292ZXJhZ2UKKyAgICAgICBmaWxlcyBjcmVhdGVkIGF0IGNvbXBpbGUgdGltZSAoKi5nY25vKS4KKworICAgICAgICAgbWFrZSBjb3ZlcmFnZS1jbGVhbgorCisgICAgICAgVGhpcyAgY2xlYW5zIGFsbCBjb3ZlcmFnZSBkYXRhIGluY2x1ZGluZyB0aGUgZ2VuZXJhdGVkIGNvdmVyYWdlIHJlcG9ydC4KKyAgICAgICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjb2RlIGNvdmVyYWdlLCBzZWUgdGhlIGdjb3YgYW5kICBsY292ICBkb2N1LQorICAgICAgIG1lbnRhdGlvbi4KKworCitTRUUgQUxTTworCisgICAgICAgcGNyZTJhcGkoMyksIHBjcmUyLWNvbmZpZygzKS4KKworCitBVVRIT1IKKworICAgICAgIFBoaWxpcCBIYXplbAorICAgICAgIFVuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKyAgICAgICBDYW1icmlkZ2UsIEVuZ2xhbmQuCisKKworUkVWSVNJT04KKworICAgICAgIExhc3QgdXBkYXRlZDogMTYgT2N0b2JlciAyMDE1CisgICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitQQ1JFMkNBTExPVVQoMykgICAgICAgICAgICBMaWJyYXJ5IEZ1bmN0aW9ucyBNYW51YWwgICAgICAgICAgICBQQ1JFMkNBTExPVVQoMykKKworCisKK05BTUUKKyAgICAgICBQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKworU1lOT1BTSVMKKworICAgICAgICNpbmNsdWRlIDxwY3JlMi5oPgorCisgICAgICAgaW50ICgqcGNyZTJfY2FsbG91dCkocGNyZTJfY2FsbG91dF9ibG9jayAqLCB2b2lkICopOworCisgICAgICAgaW50IHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKGNvbnN0IHBjcmUyX2NvZGUgKmNvZGUsCisgICAgICAgICBpbnQgKCpjYWxsYmFjaykocGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2sgKiwgdm9pZCAqKSwKKyAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7CisKKworREVTQ1JJUFRJT04KKworICAgICAgIFBDUkUyICBwcm92aWRlcyAgYSBmZWF0dXJlIGNhbGxlZCAiY2FsbG91dCIsIHdoaWNoIGlzIGEgbWVhbnMgb2YgdGVtcG8tCisgICAgICAgcmFyaWx5IHBhc3NpbmcgY29udHJvbCB0byB0aGUgY2FsbGVyIG9mIFBDUkUyIGluIHRoZSBtaWRkbGUgb2YgIHBhdHRlcm4KKyAgICAgICBtYXRjaGluZy4gIFRoZSBjYWxsZXIgb2YgUENSRTIgcHJvdmlkZXMgYW4gZXh0ZXJuYWwgZnVuY3Rpb24gYnkgcHV0dGluZworICAgICAgIGl0cyBlbnRyeSBwb2ludCBpbiBhIG1hdGNoICBjb250ZXh0ICAoc2VlICBwY3JlMl9zZXRfY2FsbG91dCgpICBpbiAgdGhlCisgICAgICAgcGNyZTJhcGkgZG9jdW1lbnRhdGlvbikuCisKKyAgICAgICBXaXRoaW4gIGEgIHJlZ3VsYXIgZXhwcmVzc2lvbiwgKD9DPGFyZz4pIGluZGljYXRlcyBhIHBvaW50IGF0IHdoaWNoIHRoZQorICAgICAgIGV4dGVybmFsIGZ1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZC4gIERpZmZlcmVudCAgY2FsbG91dCAgcG9pbnRzICBjYW4gIGJlCisgICAgICAgaWRlbnRpZmllZCAgYnkgIHB1dHRpbmcgIGEgbnVtYmVyIGxlc3MgdGhhbiAyNTYgYWZ0ZXIgdGhlIGxldHRlciBDLiBUaGUKKyAgICAgICBkZWZhdWx0IHZhbHVlIGlzIHplcm8uICBBbHRlcm5hdGl2ZWx5LCB0aGUgYXJndW1lbnQgbWF5IGJlIGEgIGRlbGltaXRlZAorICAgICAgIHN0cmluZy4gIFRoZSAgc3RhcnRpbmcgZGVsaW1pdGVyIG11c3QgYmUgb25lIG9mIGAgJyAiIF4gJSAjICQgeyBhbmQgdGhlCisgICAgICAgZW5kaW5nIGRlbGltaXRlciBpcyB0aGUgc2FtZSBhcyB0aGUgc3RhcnQsIGV4Y2VwdCBmb3Igeywgd2hlcmUgdGhlIGVuZC0KKyAgICAgICBpbmcgIGRlbGltaXRlciAgaXMgIH0uICBJZiAgdGhlICBlbmRpbmcgIGRlbGltaXRlciBpcyBuZWVkZWQgd2l0aGluIHRoZQorICAgICAgIHN0cmluZywgaXQgbXVzdCBiZSBkb3VibGVkLiBGb3IgZXhhbXBsZSwgdGhpcyBwYXR0ZXJuIGhhcyAgdHdvICBjYWxsb3V0CisgICAgICAgcG9pbnRzOgorCisgICAgICAgICAoP0MxKWFiYyg/QyJzb21lICIiYXJiaXRyYXJ5IiIgdGV4dCIpZGVmCisKKyAgICAgICBJZiB0aGUgUENSRTJfQVVUT19DQUxMT1VUIG9wdGlvbiBiaXQgaXMgc2V0IHdoZW4gYSBwYXR0ZXJuIGlzIGNvbXBpbGVkLAorICAgICAgIFBDUkUyIGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBjYWxsb3V0cywgYWxsIHdpdGggbnVtYmVyIDI1NSwgYmVmb3JlICBlYWNoCisgICAgICAgaXRlbSAgaW4gIHRoZSAgcGF0dGVybi4gRm9yIGV4YW1wbGUsIGlmIFBDUkUyX0FVVE9fQ0FMTE9VVCBpcyB1c2VkIHdpdGgKKyAgICAgICB0aGUgcGF0dGVybgorCisgICAgICAgICBBKFxkezJ9fC0tKQorCisgICAgICAgaXQgaXMgcHJvY2Vzc2VkIGFzIGlmIGl0IHdlcmUKKworICAgICAgICg/QzI1NSlBKD9DMjU1KSgoP0MyNTUpXGR7Mn0oP0MyNTUpfCg/QzI1NSktKD9DMjU1KS0oP0MyNTUpKSg/QzI1NSkKKworICAgICAgIE5vdGljZSB0aGF0IHRoZXJlIGlzIGEgY2FsbG91dCBiZWZvcmUgYW5kIGFmdGVyICBlYWNoICBwYXJlbnRoZXNpcyAgYW5kCisgICAgICAgYWx0ZXJuYXRpb24gYmFyLiBJZiB0aGUgcGF0dGVybiBjb250YWlucyBhIGNvbmRpdGlvbmFsIGdyb3VwIHdob3NlIGNvbi0KKyAgICAgICBkaXRpb24gaXMgYW4gYXNzZXJ0aW9uLCBhbiBhdXRvbWF0aWMgY2FsbG91dCAgaXMgIGluc2VydGVkICBpbW1lZGlhdGVseQorICAgICAgIGJlZm9yZSAgdGhlICBjb25kaXRpb24uIFN1Y2ggYSBjYWxsb3V0IG1heSBhbHNvIGJlIGluc2VydGVkIGV4cGxpY2l0bHksCisgICAgICAgZm9yIGV4YW1wbGU6CisKKyAgICAgICAgICg/KD9DOSkoPz1hKWFifGRlKSAgKD8oP0MldGV4dCUpKD8hPWQpYWJ8ZGUpCisKKyAgICAgICBUaGlzIGFwcGxpZXMgb25seSB0byBhc3NlcnRpb24gY29uZGl0aW9ucyAoYmVjYXVzZSB0aGV5IGFyZSAgdGhlbXNlbHZlcworICAgICAgIGluZGVwZW5kZW50IGdyb3VwcykuCisKKyAgICAgICBDYWxsb3V0cyAgY2FuICBiZSB1c2VmdWwgZm9yIHRyYWNraW5nIHRoZSBwcm9ncmVzcyBvZiBwYXR0ZXJuIG1hdGNoaW5nLgorICAgICAgIFRoZSBwY3JlMnRlc3QgcHJvZ3JhbSBoYXMgYSBwYXR0ZXJuIHF1YWxpZmllciAoL2F1dG9fY2FsbG91dCkgdGhhdCBzZXRzCisgICAgICAgYXV0b21hdGljICBjYWxsb3V0cy4gICBXaGVuICBhbnkgIGNhbGxvdXRzIGFyZSBwcmVzZW50LCB0aGUgb3V0cHV0IGZyb20KKyAgICAgICBwY3JlMnRlc3QgaW5kaWNhdGVzIGhvdyB0aGUgcGF0dGVybiBpcyBiZWluZyBtYXRjaGVkLiAgVGhpcyAgaXMgIHVzZWZ1bAorICAgICAgIGluZm9ybWF0aW9uICB3aGVuICB5b3UgYXJlIHRyeWluZyB0byBvcHRpbWl6ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgYSBwYXItCisgICAgICAgdGljdWxhciBwYXR0ZXJuLgorCisKK01JU1NJTkcgQ0FMTE9VVFMKKworICAgICAgIFlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCwgYmVjYXVzZSBvZiBvcHRpbWl6YXRpb25zICBpbiAgdGhlICB3YXkgIFBDUkUyCisgICAgICAgY29tcGlsZXMgYW5kIG1hdGNoZXMgcGF0dGVybnMsIGNhbGxvdXRzIHNvbWV0aW1lcyBkbyBub3QgaGFwcGVuIGV4YWN0bHkKKyAgICAgICBhcyB5b3UgbWlnaHQgZXhwZWN0LgorCisgICBBdXRvLXBvc3Nlc3NpZmljYXRpb24KKworICAgICAgIEF0IGNvbXBpbGUgdGltZSwgUENSRTIgImF1dG8tcG9zc2Vzc2lmaWVzIiByZXBlYXRlZCBpdGVtcyB3aGVuIGl0IGtub3dzCisgICAgICAgdGhhdCAgd2hhdCBmb2xsb3dzIGNhbm5vdCBiZSBwYXJ0IG9mIHRoZSByZXBlYXQuIEZvciBleGFtcGxlLCBhK1tiY10gaXMKKyAgICAgICBjb21waWxlZCBhcyBpZiBpdCB3ZXJlIGErK1tiY10uIFRoZSBwY3JlMnRlc3Qgb3V0cHV0IHdoZW4gdGhpcyAgcGF0dGVybgorICAgICAgIGlzIGNvbXBpbGVkIHdpdGggUENSRTJfQU5DSE9SRUQgYW5kIFBDUkUyX0FVVE9fQ0FMTE9VVCBhbmQgdGhlbiBhcHBsaWVkCisgICAgICAgdG8gdGhlIHN0cmluZyAiYWFhYSIgaXM6CisKKyAgICAgICAgIC0tLT5hYWFhCisgICAgICAgICAgKzAgXiAgICAgICAgYSsKKyAgICAgICAgICArMiBeICAgXiAgICBbYmNdCisgICAgICAgICBObyBtYXRjaAorCisgICAgICAgVGhpcyBpbmRpY2F0ZXMgdGhhdCB3aGVuIG1hdGNoaW5nIFtiY10gZmFpbHMsIHRoZXJlIGlzIG5vICBiYWNrdHJhY2tpbmcKKyAgICAgICBpbnRvICBhKyAgYW5kICB0aGVyZWZvcmUgdGhlIGNhbGxvdXRzIHRoYXQgd291bGQgYmUgdGFrZW4gZm9yIHRoZSBiYWNrLQorICAgICAgIHRyYWNrcyBkbyBub3Qgb2NjdXIuICBZb3UgY2FuIGRpc2FibGUgdGhlICBhdXRvLXBvc3Nlc3NpZnkgIGZlYXR1cmUgIGJ5CisgICAgICAgcGFzc2luZyAgUENSRTJfTk9fQVVUT19QT1NTRVNTIHRvIHBjcmUyX2NvbXBpbGUoKSwgb3Igc3RhcnRpbmcgdGhlIHBhdC0KKyAgICAgICB0ZXJuIHdpdGggKCpOT19BVVRPX1BPU1NFU1MpLiBJbiB0aGlzIGNhc2UsIHRoZSBvdXRwdXQgY2hhbmdlcyB0byB0aGlzOgorCisgICAgICAgICAtLS0+YWFhYQorICAgICAgICAgICswIF4gICAgICAgIGErCisgICAgICAgICAgKzIgXiAgIF4gICAgW2JjXQorICAgICAgICAgICsyIF4gIF4gICAgIFtiY10KKyAgICAgICAgICArMiBeIF4gICAgICBbYmNdCisgICAgICAgICAgKzIgXl4gICAgICAgW2JjXQorICAgICAgICAgTm8gbWF0Y2gKKworICAgICAgIFRoaXMgdGltZSwgd2hlbiBtYXRjaGluZyBbYmNdIGZhaWxzLCB0aGUgbWF0Y2hlciBiYWNrdHJhY2tzIGludG8gYSsgYW5kCisgICAgICAgdHJpZXMgYWdhaW4sIHJlcGVhdGVkbHksIHVudGlsIGErIGl0c2VsZiBmYWlscy4KKworICAgQXV0b21hdGljIC4qIGFuY2hvcmluZworCisgICAgICAgQnkgZGVmYXVsdCwgYW4gb3B0aW1pemF0aW9uIGlzIGFwcGxpZWQgd2hlbiAuKiBpcyB0aGUgZmlyc3Qgc2lnbmlmaWNhbnQKKyAgICAgICBpdGVtIGluIGEgcGF0dGVybi4gSWYgUENSRTJfRE9UQUxMIGlzIHNldCwgc28gdGhhdCB0aGUgIGRvdCAgY2FuICBtYXRjaAorICAgICAgIGFueSAgY2hhcmFjdGVyLCAgdGhlIHBhdHRlcm4gaXMgYXV0b21hdGljYWxseSBhbmNob3JlZC4gSWYgUENSRTJfRE9UQUxMCisgICAgICAgaXMgbm90IHNldCwgYSBtYXRjaCBjYW4gc3RhcnQgb25seSBhZnRlciBhbiBpbnRlcm5hbCBuZXdsaW5lIG9yIGF0ICB0aGUKKyAgICAgICBiZWdpbm5pbmcgIG9mICB0aGUgIHN1YmplY3QsICBhbmQgIHBjcmUyX2NvbXBpbGUoKSByZW1lbWJlcnMgdGhpcy4gVGhpcworICAgICAgIG9wdGltaXphdGlvbiBpcyBkaXNhYmxlZCwgaG93ZXZlciwgaWYgLiogaXMgaW4gYW4gYXRvbWljICBncm91cCAgb3IgIGlmCisgICAgICAgdGhlcmUgIGlzICBhIGJhY2sgcmVmZXJlbmNlIHRvIHRoZSBjYXB0dXJpbmcgZ3JvdXAgaW4gd2hpY2ggaXQgYXBwZWFycy4KKyAgICAgICBJdCBpcyBhbHNvIGRpc2FibGVkIGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zICgqUFJVTkUpIG9yICAoKlNLSVApLiAgSG93LQorICAgICAgIGV2ZXIsIHRoZSBwcmVzZW5jZSBvZiBjYWxsb3V0cyBkb2VzIG5vdCBhZmZlY3QgaXQuCisKKyAgICAgICBGb3IgIGV4YW1wbGUsICBpZiAgdGhlIHBhdHRlcm4gLipcZCBpcyBjb21waWxlZCB3aXRoIFBDUkUyX0FVVE9fQ0FMTE9VVAorICAgICAgIGFuZCBhcHBsaWVkIHRvIHRoZSBzdHJpbmcgImFhIiwgdGhlIHBjcmUydGVzdCBvdXRwdXQgaXM6CisKKyAgICAgICAgIC0tLT5hYQorICAgICAgICAgICswIF4gICAgICAuKgorICAgICAgICAgICsyIF4gXiAgICBcZAorICAgICAgICAgICsyIF5eICAgICBcZAorICAgICAgICAgICsyIF4gICAgICBcZAorICAgICAgICAgTm8gbWF0Y2gKKworICAgICAgIFRoaXMgc2hvd3MgdGhhdCBhbGwgbWF0Y2ggYXR0ZW1wdHMgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiAgdGhlICBzdWItCisgICAgICAgamVjdC4gIEluICBvdGhlciAgd29yZHMsICB0aGUgcGF0dGVybiBpcyBhbmNob3JlZC4gWW91IGNhbiBkaXNhYmxlIHRoaXMKKyAgICAgICBvcHRpbWl6YXRpb24gYnkgcGFzc2luZyBQQ1JFMl9OT19ET1RTVEFSX0FOQ0hPUiB0byBwY3JlMl9jb21waWxlKCksICBvcgorICAgICAgIHN0YXJ0aW5nICB0aGUgcGF0dGVybiB3aXRoICgqTk9fRE9UU1RBUl9BTkNIT1IpLiBJbiB0aGlzIGNhc2UsIHRoZSBvdXQtCisgICAgICAgcHV0IGNoYW5nZXMgdG86CisKKyAgICAgICAgIC0tLT5hYQorICAgICAgICAgICswIF4gICAgICAuKgorICAgICAgICAgICsyIF4gXiAgICBcZAorICAgICAgICAgICsyIF5eICAgICBcZAorICAgICAgICAgICsyIF4gICAgICBcZAorICAgICAgICAgICswICBeICAgICAuKgorICAgICAgICAgICsyICBeXiAgICBcZAorICAgICAgICAgICsyICBeICAgICBcZAorICAgICAgICAgTm8gbWF0Y2gKKworICAgICAgIFRoaXMgc2hvd3MgbW9yZSBtYXRjaCBhdHRlbXB0cywgc3RhcnRpbmcgYXQgdGhlIHNlY29uZCBzdWJqZWN0ICBjaGFyYWMtCisgICAgICAgdGVyLiAgIEFub3RoZXIgIG9wdGltaXphdGlvbiwgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24sIG1lYW5zIHRoYXQKKyAgICAgICB0aGVyZSBpcyBubyBzdWJzZXF1ZW50IGF0dGVtcHQgdG8gbWF0Y2ggd2l0aCBhbiBlbXB0eSBzdWJqZWN0LgorCisgICAgICAgSWYgYSBwYXR0ZXJuIGhhcyBtb3JlIHRoYW4gb25lIHRvcC1sZXZlbCAgYnJhbmNoLCAgYXV0b21hdGljICBhbmNob3JpbmcKKyAgICAgICBvY2N1cnMgaWYgYWxsIGJyYW5jaGVzIGFyZSBhbmNob3JhYmxlLgorCisgICBPdGhlciBvcHRpbWl6YXRpb25zCisKKyAgICAgICBPdGhlciAgb3B0aW1pemF0aW9ucyAgdGhhdCAgcHJvdmlkZSBmYXN0ICJubyBtYXRjaCIgcmVzdWx0cyBhbHNvIGFmZmVjdAorICAgICAgIGNhbGxvdXRzLiAgRm9yIGV4YW1wbGUsIGlmIHRoZSBwYXR0ZXJuIGlzCisKKyAgICAgICAgIGFiKD9DNCljZAorCisgICAgICAgUENSRTIga25vd3MgdGhhdCBhbnkgbWF0Y2hpbmcgc3RyaW5nIG11c3QgY29udGFpbiB0aGUgIGxldHRlciAgImQiLiAgSWYKKyAgICAgICB0aGUgIHN1YmplY3QgIHN0cmluZyAgaXMgICJhYnl6IiwgIHRoZSAgbGFjayBvZiAiZCIgbWVhbnMgdGhhdCBtYXRjaGluZworICAgICAgIGRvZXNuJ3QgZXZlciBzdGFydCwgYW5kIHRoZSBjYWxsb3V0IGlzICBuZXZlciAgcmVhY2hlZC4gIEhvd2V2ZXIsICB3aXRoCisgICAgICAgImFieWQiLCB0aG91Z2ggdGhlIHJlc3VsdCBpcyBzdGlsbCBubyBtYXRjaCwgdGhlIGNhbGxvdXQgaXMgb2JleWVkLgorCisgICAgICAgUENSRTIgIGFsc28gIGtub3dzICB0aGUgIG1pbmltdW0gIGxlbmd0aCBvZiBhIG1hdGNoaW5nIHN0cmluZywgYW5kIHdpbGwKKyAgICAgICBpbW1lZGlhdGVseSBnaXZlIGEgIm5vIG1hdGNoIiByZXR1cm4gd2l0aG91dCBhY3R1YWxseSBydW5uaW5nICBhICBtYXRjaAorICAgICAgIGlmICB0aGUgIHN1YmplY3QgaXMgbm90IGxvbmcgZW5vdWdoLCBvciwgZm9yIHVuYW5jaG9yZWQgcGF0dGVybnMsIGlmIGl0CisgICAgICAgaGFzIGJlZW4gc2Nhbm5lZCBmYXIgZW5vdWdoLgorCisgICAgICAgWW91IGNhbiBkaXNhYmxlIHRoZXNlIG9wdGltaXphdGlvbnMgYnkgcGFzc2luZyB0aGUgUENSRTJfTk9fU1RBUlRfT1BUSS0KKyAgICAgICBNSVpFICBvcHRpb24gIHRvICBwY3JlMl9jb21waWxlKCksICBvciAgYnkgIHN0YXJ0aW5nICB0aGUgIHBhdHRlcm4gd2l0aAorICAgICAgICgqTk9fU1RBUlRfT1BUKS4gVGhpcyBzbG93cyBkb3duIHRoZSBtYXRjaGluZyBwcm9jZXNzLCBidXQgZG9lcyAgZW5zdXJlCisgICAgICAgdGhhdCBjYWxsb3V0cyBzdWNoIGFzIHRoZSBleGFtcGxlIGFib3ZlIGFyZSBvYmV5ZWQuCisKKworVEhFIENBTExPVVQgSU5URVJGQUNFCisKKyAgICAgICBEdXJpbmcgIG1hdGNoaW5nLCAgd2hlbiAgUENSRTIgIHJlYWNoZXMgYSBjYWxsb3V0IHBvaW50LCBpZiBhbiBleHRlcm5hbAorICAgICAgIGZ1bmN0aW9uIGlzIHNldCBpbiB0aGUgbWF0Y2ggY29udGV4dCwgaXQgaXMgIGNhbGxlZC4gIFRoaXMgIGFwcGxpZXMgIHRvCisgICAgICAgYm90aCAgbm9ybWFsICBhbmQgREZBIG1hdGNoaW5nLiBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGNhbGxvdXQgZnVuYy0KKyAgICAgICB0aW9uIGlzIGEgcG9pbnRlciB0byBhIHBjcmUyX2NhbGxvdXQgYmxvY2suIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgIHRoZQorICAgICAgIHZvaWQgICogIGNhbGxvdXQgIGRhdGEgdGhhdCB3YXMgc3VwcGxpZWQgd2hlbiB0aGUgY2FsbG91dCB3YXMgc2V0IHVwIGJ5CisgICAgICAgY2FsbGluZyBwY3JlMl9zZXRfY2FsbG91dCgpIChzZWUgdGhlIHBjcmUyYXBpIGRvY3VtZW50YXRpb24pLiBUaGUgY2FsbC0KKyAgICAgICBvdXQgYmxvY2sgc3RydWN0dXJlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorCisgICAgICAgICB1aW50MzJfdCAgICAgIHZlcnNpb247CisgICAgICAgICB1aW50MzJfdCAgICAgIGNhbGxvdXRfbnVtYmVyOworICAgICAgICAgdWludDMyX3QgICAgICBjYXB0dXJlX3RvcDsKKyAgICAgICAgIHVpbnQzMl90ICAgICAgY2FwdHVyZV9sYXN0OworICAgICAgICAgUENSRTJfU0laRSAgICpvZmZzZXRfdmVjdG9yOworICAgICAgICAgUENSRTJfU1BUUiAgICBtYXJrOworICAgICAgICAgUENSRTJfU1BUUiAgICBzdWJqZWN0OworICAgICAgICAgUENSRTJfU0laRSAgICBzdWJqZWN0X2xlbmd0aDsKKyAgICAgICAgIFBDUkUyX1NJWkUgICAgc3RhcnRfbWF0Y2g7CisgICAgICAgICBQQ1JFMl9TSVpFICAgIGN1cnJlbnRfcG9zaXRpb247CisgICAgICAgICBQQ1JFMl9TSVpFICAgIHBhdHRlcm5fcG9zaXRpb247CisgICAgICAgICBQQ1JFMl9TSVpFICAgIG5leHRfaXRlbV9sZW5ndGg7CisgICAgICAgICBQQ1JFMl9TSVpFICAgIGNhbGxvdXRfc3RyaW5nX29mZnNldDsKKyAgICAgICAgIFBDUkUyX1NJWkUgICAgY2FsbG91dF9zdHJpbmdfbGVuZ3RoOworICAgICAgICAgUENSRTJfU1BUUiAgICBjYWxsb3V0X3N0cmluZzsKKworICAgICAgIFRoZSAgdmVyc2lvbiBmaWVsZCBjb250YWlucyB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGJsb2NrIGZvcm1hdC4gVGhlCisgICAgICAgY3VycmVudCB2ZXJzaW9uIGlzIDE7IHRoZSB0aHJlZSBjYWxsb3V0IHN0cmluZyBmaWVsZHMgIHdlcmUgIGFkZGVkICBmb3IKKyAgICAgICB0aGlzICB2ZXJzaW9uLiBJZiB5b3UgYXJlIHdyaXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCBtaWdodCB1c2UgYW4gZWFyLQorICAgICAgIGxpZXIgcmVsZWFzZSBvZiBQQ1JFMiwgeW91ICBzaG91bGQgIGNoZWNrICB0aGUgIHZlcnNpb24gIG51bWJlciAgYmVmb3JlCisgICAgICAgYWNjZXNzaW5nICBhbnkgIG9mICB0aGVzZSAgZmllbGRzLiAgVGhlIHZlcnNpb24gbnVtYmVyIHdpbGwgaW5jcmVhc2UgaW4KKyAgICAgICBmdXR1cmUgaWYgbW9yZSBmaWVsZHMgYXJlIGFkZGVkLCBidXQgdGhlIGludGVudGlvbiBpcyBuZXZlciAgdG8gIHJlbW92ZQorICAgICAgIGFueSBvZiB0aGUgZXhpc3RpbmcgZmllbGRzLgorCisgICBGaWVsZHMgZm9yIG51bWVyaWNhbCBjYWxsb3V0cworCisgICAgICAgRm9yICBhICBudW1lcmljYWwgIGNhbGxvdXQsICBjYWxsb3V0X3N0cmluZyBpcyBOVUxMLCBhbmQgY2FsbG91dF9udW1iZXIKKyAgICAgICBjb250YWlucyB0aGUgbnVtYmVyIG9mIHRoZSBjYWxsb3V0LCBpbiB0aGUgcmFuZ2UgIDAtMjU1LiAgVGhpcyAgaXMgIHRoZQorICAgICAgIG51bWJlciAgdGhhdCAgZm9sbG93cyAgKD9DIGZvciBtYW51YWwgY2FsbG91dHM7IGl0IGlzIDI1NSBmb3IgYXV0b21hdGktCisgICAgICAgY2FsbHkgZ2VuZXJhdGVkIGNhbGxvdXRzLgorCisgICBGaWVsZHMgZm9yIHN0cmluZyBjYWxsb3V0cworCisgICAgICAgRm9yIGNhbGxvdXRzIHdpdGggc3RyaW5nIGFyZ3VtZW50cywgY2FsbG91dF9udW1iZXIgaXMgYWx3YXlzIHplcm8sICBhbmQKKyAgICAgICBjYWxsb3V0X3N0cmluZyAgcG9pbnRzICB0byB0aGUgc3RyaW5nIHRoYXQgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgY29tLQorICAgICAgIHBpbGVkIHBhdHRlcm4uIEl0cyBsZW5ndGggaXMgZ2l2ZW4gYnkgY2FsbG91dF9zdHJpbmdfbGVuZ3RoLiBEdXBsaWNhdGVkCisgICAgICAgZW5kaW5nIGRlbGltaXRlcnMgdGhhdCB3ZXJlIHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsIHBhdHRlcm4gc3RyaW5nIGhhdmUKKyAgICAgICBiZWVuIHR1cm5lZCBpbnRvIHNpbmdsZSBjaGFyYWN0ZXJzLCBidXQgdGhlcmUgaXMgbm8gb3RoZXIgcHJvY2Vzc2luZyBvZgorICAgICAgIHRoZSAgY2FsbG91dCBzdHJpbmcgYXJndW1lbnQuIEFuIGFkZGl0aW9uYWwgY29kZSB1bml0IGNvbnRhaW5pbmcgYmluYXJ5CisgICAgICAgemVybyBpcyBwcmVzZW50IGFmdGVyIHRoZSBzdHJpbmcsIGJ1dCBpcyBub3QgaW5jbHVkZWQgIGluICB0aGUgIGxlbmd0aC4KKyAgICAgICBUaGUgIGRlbGltaXRlciAgdGhhdCB3YXMgdXNlZCB0byBzdGFydCB0aGUgc3RyaW5nIGlzIGFsc28gc3RvcmVkIHdpdGhpbgorICAgICAgIHRoZSBwYXR0ZXJuLCBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIHN0cmluZyBpdHNlbGYuIFlvdSBjYW4gYWNjZXNzICB0aGlzCisgICAgICAgZGVsaW1pdGVyIGFzIGNhbGxvdXRfc3RyaW5nWy0xXSBpZiB5b3UgbmVlZCBpdC4KKworICAgICAgIFRoZSBjYWxsb3V0X3N0cmluZ19vZmZzZXQgZmllbGQgaXMgdGhlIGNvZGUgdW5pdCBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mCisgICAgICAgdGhlIGNhbGxvdXQgYXJndW1lbnQgc3RyaW5nIHdpdGhpbiB0aGUgb3JpZ2luYWwgcGF0dGVybiBzdHJpbmcuIFRoaXMgaXMKKyAgICAgICBwcm92aWRlZCAgZm9yIHRoZSBiZW5lZml0IG9mIGFwcGxpY2F0aW9ucyBzdWNoIGFzIHNjcmlwdCBsYW5ndWFnZXMgdGhhdAorICAgICAgIG1pZ2h0IG5lZWQgdG8gcmVwb3J0IGVycm9ycyBpbiB0aGUgY2FsbG91dCBzdHJpbmcgd2l0aGluIHRoZSBwYXR0ZXJuLgorCisgICBGaWVsZHMgZm9yIGFsbCBjYWxsb3V0cworCisgICAgICAgVGhlIHJlbWFpbmluZyBmaWVsZHMgaW4gdGhlIGNhbGxvdXQgYmxvY2sgYXJlIHRoZSBzYW1lIGZvciAgYm90aCAga2luZHMKKyAgICAgICBvZiBjYWxsb3V0LgorCisgICAgICAgVGhlIG9mZnNldF92ZWN0b3IgZmllbGQgaXMgYSBwb2ludGVyIHRvIHRoZSB2ZWN0b3Igb2YgY2FwdHVyaW5nIG9mZnNldHMKKyAgICAgICAodGhlICJvdmVjdG9yIikgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSBtYXRjaGluZyBmdW5jdGlvbiBpbiAgdGhlICBtYXRjaAorICAgICAgIGRhdGEgIGJsb2NrLiAgV2hlbiBwY3JlMl9tYXRjaCgpIGlzIHVzZWQsIHRoZSBjb250ZW50cyBjYW4gYmUgaW5zcGVjdGVkCisgICAgICAgaW4gb3JkZXIgdG8gZXh0cmFjdCBzdWJzdHJpbmdzIHRoYXQgaGF2ZSBiZWVuIG1hdGNoZWQgc28gIGZhciwgIGluICB0aGUKKyAgICAgICBzYW1lICB3YXkgYXMgZm9yIGV4dHJhY3Rpbmcgc3Vic3RyaW5ncyBhZnRlciBhIG1hdGNoIGhhcyBjb21wbGV0ZWQuIEZvcgorICAgICAgIHRoZSBERkEgbWF0Y2hpbmcgZnVuY3Rpb24sIHRoaXMgZmllbGQgaXMgbm90IHVzZWZ1bC4KKworICAgICAgIFRoZSBzdWJqZWN0IGFuZCBzdWJqZWN0X2xlbmd0aCBmaWVsZHMgY29udGFpbiBjb3BpZXMgb2YgdGhlIHZhbHVlcyB0aGF0CisgICAgICAgd2VyZSBwYXNzZWQgdG8gdGhlIG1hdGNoaW5nIGZ1bmN0aW9uLgorCisgICAgICAgVGhlICBzdGFydF9tYXRjaCAgZmllbGQgbm9ybWFsbHkgY29udGFpbnMgdGhlIG9mZnNldCB3aXRoaW4gdGhlIHN1YmplY3QKKyAgICAgICBhdCB3aGljaCB0aGUgY3VycmVudCBtYXRjaCBhdHRlbXB0ICBzdGFydGVkLiAgSG93ZXZlciwgIGlmICB0aGUgIGVzY2FwZQorICAgICAgIHNlcXVlbmNlICBcSyBoYXMgYmVlbiBlbmNvdW50ZXJlZCwgdGhpcyB2YWx1ZSBpcyBjaGFuZ2VkIHRvIHJlZmxlY3QgdGhlCisgICAgICAgbW9kaWZpZWQgc3RhcnRpbmcgcG9pbnQuIElmIHRoZSBwYXR0ZXJuIGlzIG5vdCAgYW5jaG9yZWQsICB0aGUgIGNhbGxvdXQKKyAgICAgICBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgZnJvbSB0aGUgc2FtZSBwb2ludCBpbiB0aGUgcGF0dGVybgorICAgICAgIGZvciBkaWZmZXJlbnQgc3RhcnRpbmcgcG9pbnRzIGluIHRoZSBzdWJqZWN0LgorCisgICAgICAgVGhlIGN1cnJlbnRfcG9zaXRpb24gZmllbGQgY29udGFpbnMgdGhlIG9mZnNldCB3aXRoaW4gIHRoZSAgc3ViamVjdCAgb2YKKyAgICAgICB0aGUgY3VycmVudCBtYXRjaCBwb2ludGVyLgorCisgICAgICAgV2hlbiB0aGUgcGNyZTJfbWF0Y2goKSBpcyB1c2VkLCB0aGUgY2FwdHVyZV90b3AgZmllbGQgY29udGFpbnMgb25lIG1vcmUKKyAgICAgICB0aGFuIHRoZSBudW1iZXIgb2YgdGhlIGhpZ2hlc3QgbnVtYmVyZWQgY2FwdHVyZWQgc3Vic3RyaW5nIHNvICBmYXIuICBJZgorICAgICAgIG5vIHN1YnN0cmluZ3MgaGF2ZSBiZWVuIGNhcHR1cmVkLCB0aGUgdmFsdWUgb2YgY2FwdHVyZV90b3AgaXMgb25lLiBUaGlzCisgICAgICAgaXMgYWx3YXlzIHRoZSBjYXNlIHdoZW4gdGhlIERGQSBmdW5jdGlvbnMgYXJlIHVzZWQsIGJlY2F1c2UgdGhleSBkbyBub3QKKyAgICAgICBzdXBwb3J0IGNhcHR1cmVkIHN1YnN0cmluZ3MuCisKKyAgICAgICBUaGUgIGNhcHR1cmVfbGFzdCAgZmllbGQgIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50bHkgY2FwLQorICAgICAgIHR1cmVkIHN1YnN0cmluZy4gSG93ZXZlciwgd2hlbiBhIHJlY3Vyc2lvbiBleGl0cywgdGhlIHZhbHVlIHJldmVydHMgIHRvCisgICAgICAgd2hhdCAgaXQgIHdhcyAgb3V0c2lkZSAgdGhlIHJlY3Vyc2lvbiwgYXMgZG8gdGhlIHZhbHVlcyBvZiBhbGwgY2FwdHVyZWQKKyAgICAgICBzdWJzdHJpbmdzLiBJZiBubyBzdWJzdHJpbmdzIGhhdmUgYmVlbiAgY2FwdHVyZWQsICB0aGUgIHZhbHVlICBvZiAgY2FwLQorICAgICAgIHR1cmVfbGFzdCBpcyAwLiBUaGlzIGlzIGFsd2F5cyB0aGUgY2FzZSBmb3IgdGhlIERGQSBtYXRjaGluZyBmdW5jdGlvbnMuCisKKyAgICAgICBUaGUgcGF0dGVybl9wb3NpdGlvbiBmaWVsZCBjb250YWlucyB0aGUgb2Zmc2V0IGluIHRoZSBwYXR0ZXJuIHN0cmluZyB0bworICAgICAgIHRoZSBuZXh0IGl0ZW0gdG8gYmUgbWF0Y2hlZC4KKworICAgICAgIFRoZSBuZXh0X2l0ZW1fbGVuZ3RoIGZpZWxkIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgaXRlbSAgdG8gIGJlCisgICAgICAgbWF0Y2hlZCBpbiB0aGUgcGF0dGVybiBzdHJpbmcuIFdoZW4gdGhlIGNhbGxvdXQgaW1tZWRpYXRlbHkgcHJlY2VkZXMgYW4KKyAgICAgICBhbHRlcm5hdGlvbiBiYXIsIGEgY2xvc2luZyBwYXJlbnRoZXNpcywgb3IgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgIHRoZQorICAgICAgIGxlbmd0aCAgaXMgIHplcm8uIFdoZW4gdGhlIGNhbGxvdXQgcHJlY2VkZXMgYW4gb3BlbmluZyBwYXJlbnRoZXNpcywgdGhlCisgICAgICAgbGVuZ3RoIGlzIHRoYXQgb2YgdGhlIGVudGlyZSBzdWJwYXR0ZXJuLgorCisgICAgICAgVGhlIHBhdHRlcm5fcG9zaXRpb24gYW5kIG5leHRfaXRlbV9sZW5ndGggZmllbGRzIGFyZSBpbnRlbmRlZCAgdG8gIGhlbHAKKyAgICAgICBpbiAgZGlzdGluZ3Vpc2hpbmcgYmV0d2VlbiBkaWZmZXJlbnQgYXV0b21hdGljIGNhbGxvdXRzLCB3aGljaCBhbGwgaGF2ZQorICAgICAgIHRoZSBzYW1lIGNhbGxvdXQgbnVtYmVyLiBIb3dldmVyLCB0aGV5IGFyZSBzZXQgZm9yICBhbGwgIGNhbGxvdXRzLCAgYW5kCisgICAgICAgYXJlIHVzZWQgYnkgcGNyZTJ0ZXN0IHRvIHNob3cgdGhlIG5leHQgaXRlbSB0byBiZSBtYXRjaGVkIHdoZW4gZGlzcGxheS0KKyAgICAgICBpbmcgY2FsbG91dCBpbmZvcm1hdGlvbi4KKworICAgICAgIEluIGNhbGxvdXRzIGZyb20gcGNyZTJfbWF0Y2goKSB0aGUgbWFyayBmaWVsZCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlCisgICAgICAgemVyby10ZXJtaW5hdGVkICBuYW1lIG9mIHRoZSBtb3N0IHJlY2VudGx5IHBhc3NlZCAoKk1BUkspLCAoKlBSVU5FKSwgb3IKKyAgICAgICAoKlRIRU4pIGl0ZW0gaW4gdGhlIG1hdGNoLCBvciBOVUxMIGlmIG5vIHN1Y2ggaXRlbXMgaGF2ZSAgYmVlbiAgcGFzc2VkLgorICAgICAgIEluc3RhbmNlcyAgb2YgICgqUFJVTkUpICBvciAgKCpUSEVOKSB3aXRob3V0IGEgbmFtZSBkbyBub3Qgb2JsaXRlcmF0ZSBhCisgICAgICAgcHJldmlvdXMgKCpNQVJLKS4gSW4gY2FsbG91dHMgZnJvbSB0aGUgREZBIG1hdGNoaW5nIGZ1bmN0aW9uIHRoaXMgZmllbGQKKyAgICAgICBhbHdheXMgY29udGFpbnMgTlVMTC4KKworCitSRVRVUk4gVkFMVUVTIEZST00gQ0FMTE9VVFMKKworICAgICAgIFRoZSBleHRlcm5hbCBjYWxsb3V0IGZ1bmN0aW9uIHJldHVybnMgYW4gaW50ZWdlciB0byBQQ1JFMi4gSWYgdGhlIHZhbHVlCisgICAgICAgaXMgemVybywgbWF0Y2hpbmcgcHJvY2VlZHMgYXMgbm9ybWFsLiBJZiAgdGhlICB2YWx1ZSAgaXMgIGdyZWF0ZXIgIHRoYW4KKyAgICAgICB6ZXJvLCAgbWF0Y2hpbmcgIGZhaWxzICBhdCAgdGhlIGN1cnJlbnQgcG9pbnQsIGJ1dCB0aGUgdGVzdGluZyBvZiBvdGhlcgorICAgICAgIG1hdGNoaW5nIHBvc3NpYmlsaXRpZXMgZ29lcyBhaGVhZCwganVzdCBhcyBpZiBhIGxvb2thaGVhZCBhc3NlcnRpb24gaGFkCisgICAgICAgZmFpbGVkLiBJZiB0aGUgdmFsdWUgaXMgbGVzcyB0aGFuIHplcm8sIHRoZSBtYXRjaCBpcyBhYmFuZG9uZWQsIGFuZCB0aGUKKyAgICAgICBtYXRjaGluZyBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZWdhdGl2ZSB2YWx1ZS4KKworICAgICAgIE5lZ2F0aXZlICB2YWx1ZXMgIHNob3VsZCAgbm9ybWFsbHkgIGJlICAgY2hvc2VuICAgZnJvbSAgIHRoZSAgIHNldCAgIG9mCisgICAgICAgUENSRTJfRVJST1JfeHh4ICB2YWx1ZXMuICBJbiAgcGFydGljdWxhciwgIFBDUkUyX0VSUk9SX05PTUFUQ0ggZm9yY2VzIGEKKyAgICAgICBzdGFuZGFyZCAibm8gbWF0Y2giIGZhaWx1cmUuIFRoZSBlcnJvciAgbnVtYmVyICBQQ1JFMl9FUlJPUl9DQUxMT1VUICBpcworICAgICAgIHJlc2VydmVkICBmb3IgIHVzZSBieSBjYWxsb3V0IGZ1bmN0aW9uczsgaXQgd2lsbCBuZXZlciBiZSB1c2VkIGJ5IFBDUkUyCisgICAgICAgaXRzZWxmLgorCisKK0NBTExPVVQgRU5VTUVSQVRJT04KKworICAgICAgIGludCBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZShjb25zdCBwY3JlMl9jb2RlICpjb2RlLAorICAgICAgICAgaW50ICgqY2FsbGJhY2spKHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrICosIHZvaWQgKiksCisgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCisgICAgICAgQSBzY3JpcHQgbGFuZ3VhZ2UgdGhhdCBzdXBwb3J0cyB0aGUgdXNlIG9mIHN0cmluZyBhcmd1bWVudHMgaW4gY2FsbG91dHMKKyAgICAgICBtaWdodCAgbGlrZSAgdG8gIHNjYW4gIGFsbCB0aGUgY2FsbG91dHMgaW4gYSBwYXR0ZXJuIGJlZm9yZSBydW5uaW5nIHRoZQorICAgICAgIG1hdGNoLiBUaGlzIGNhbiBiZSBkb25lIGJ5IGNhbGxpbmcgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUoKS4gVGhlIGZpcnN0CisgICAgICAgYXJndW1lbnQgIGlzICBhICBwb2ludGVyICB0byBhIGNvbXBpbGVkIHBhdHRlcm4sIHRoZSBzZWNvbmQgcG9pbnRzIHRvIGEKKyAgICAgICBjYWxsYmFjayBmdW5jdGlvbiwgYW5kIHRoZSB0aGlyZCBpcyBhcmJpdHJhcnkgdXNlciBkYXRhLiAgVGhlICBjYWxsYmFjaworICAgICAgIGZ1bmN0aW9uICBpcyAgY2FsbGVkICBmb3IgIGV2ZXJ5IGNhbGxvdXQgaW4gdGhlIHBhdHRlcm4gaW4gdGhlIG9yZGVyIGluCisgICAgICAgd2hpY2ggdGhleSBhcHBlYXIuIEl0cyBmaXJzdCBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gYSBjYWxsb3V0IGVudW1lci0KKyAgICAgICBhdGlvbiAgYmxvY2ssICBhbmQgIGl0cyBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHVzZXJfZGF0YSB2YWx1ZSB0aGF0IHdhcworICAgICAgIHBhc3NlZCB0byBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSgpLiBUaGUgZGF0YSBibG9jayBjb250YWlucyAgdGhlICBmb2wtCisgICAgICAgbG93aW5nIGZpZWxkczoKKworICAgICAgICAgdmVyc2lvbiAgICAgICAgICAgICAgICBCbG9jayB2ZXJzaW9uIG51bWJlcgorICAgICAgICAgcGF0dGVybl9wb3NpdGlvbiAgICAgICBPZmZzZXQgdG8gbmV4dCBpdGVtIGluIHBhdHRlcm4KKyAgICAgICAgIG5leHRfaXRlbV9sZW5ndGggICAgICAgTGVuZ3RoIG9mIG5leHQgaXRlbSBpbiBwYXR0ZXJuCisgICAgICAgICBjYWxsb3V0X251bWJlciAgICAgICAgIE51bWJlciBmb3IgbnVtYmVyZWQgY2FsbG91dHMKKyAgICAgICAgIGNhbGxvdXRfc3RyaW5nX29mZnNldCAgT2Zmc2V0IHRvIHN0cmluZyB3aXRoaW4gcGF0dGVybgorICAgICAgICAgY2FsbG91dF9zdHJpbmdfbGVuZ3RoICBMZW5ndGggb2YgY2FsbG91dCBzdHJpbmcKKyAgICAgICAgIGNhbGxvdXRfc3RyaW5nICAgICAgICAgUG9pbnRzIHRvIGNhbGxvdXQgc3RyaW5nIG9yIGlzIE5VTEwKKworICAgICAgIFRoZSAgdmVyc2lvbiAgbnVtYmVyIGlzIGN1cnJlbnRseSAwLiBJdCB3aWxsIGluY3JlYXNlIGlmIG5ldyBmaWVsZHMgYXJlCisgICAgICAgZXZlciBhZGRlZCB0byB0aGUgYmxvY2suIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZSAgdGhlICBzYW1lICBhcyAgdGhlaXIKKyAgICAgICBuYW1lc2FrZXMgIGluICB0aGUgcGNyZTJfY2FsbG91dCBibG9jayB0aGF0IGlzIHVzZWQgZm9yIGNhbGxvdXRzIGR1cmluZworICAgICAgIG1hdGNoaW5nLCBhcyBkZXNjcmliZWQgYWJvdmUuCisKKyAgICAgICBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIHBhdHRlcm5fcG9zaXRpb24gaXMgIHVuaXF1ZSAgZm9yICBlYWNoICBjYWxsb3V0LgorICAgICAgIEhvd2V2ZXIsICBpZiAgYSBjYWxsb3V0IG9jY3VycyBpbnNpZGUgYSBncm91cCB0aGF0IGlzIHF1YW50aWZpZWQgd2l0aCBhCisgICAgICAgbm9uLXplcm8gbWluaW11bSBvciBhIGZpeGVkIG1heGltdW0sIHRoZSBncm91cCBpcyByZXBsaWNhdGVkIGluc2lkZSB0aGUKKyAgICAgICBjb21waWxlZCAgcGF0dGVybi4gIEZvciBleGFtcGxlLCBhIHBhdHRlcm4gc3VjaCBhcyAvKGEpezJ9LyBpcyBjb21waWxlZAorICAgICAgIGFzIGlmIGl0IHdlcmUgLyhhKShhKS8uIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2FsbG91dCB3aWxsIGJlICBlbnVtZXJhdGVkCisgICAgICAgbW9yZSAgdGhhbiAgb25jZSwgIGJ1dCB3aXRoIHRoZSBzYW1lIHZhbHVlIGZvciBwYXR0ZXJuX3Bvc2l0aW9uIGluIGVhY2gKKyAgICAgICBjYXNlLgorCisgICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBub3JtYWxseSByZXR1cm4gemVyby4gSWYgaXQgcmV0dXJucyBhIG5vbi0KKyAgICAgICB6ZXJvIHZhbHVlLCBzY2FubmluZyB0aGUgcGF0dGVybiBzdG9wcywgYW5kIHRoYXQgdmFsdWUgaXMgcmV0dXJuZWQgZnJvbQorICAgICAgIHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKCkuCisKKworQVVUSE9SCisKKyAgICAgICBQaGlsaXAgSGF6ZWwKKyAgICAgICBVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCisgICAgICAgQ2FtYnJpZGdlLCBFbmdsYW5kLgorCisKK1JFVklTSU9OCisKKyAgICAgICBMYXN0IHVwZGF0ZWQ6IDIzIE1hcmNoIDIwMTUKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1BDUkUyQ09NUEFUKDMpICAgICAgICAgICAgIExpYnJhcnkgRnVuY3Rpb25zIE1hbnVhbCAgICAgICAgICAgICBQQ1JFMkNPTVBBVCgzKQorCisKKworTkFNRQorICAgICAgIFBDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorCitESUZGRVJFTkNFUyBCRVRXRUVOIFBDUkUyIEFORCBQRVJMCisKKyAgICAgICBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIHdheXMgdGhhdCBQQ1JFMiBhbmQgUGVybAorICAgICAgIGhhbmRsZSByZWd1bGFyIGV4cHJlc3Npb25zLiBUaGUgZGlmZmVyZW5jZXMgIGRlc2NyaWJlZCAgaGVyZSAgYXJlICB3aXRoCisgICAgICAgcmVzcGVjdCB0byBQZXJsIHZlcnNpb25zIDUuMTAgYW5kIGFib3ZlLgorCisgICAgICAgMS4gIFBDUkUyICBoYXMgb25seSBhIHN1YnNldCBvZiBQZXJsJ3MgVW5pY29kZSBzdXBwb3J0LiBEZXRhaWxzIG9mIHdoYXQKKyAgICAgICBpdCBkb2VzIGhhdmUgYXJlIGdpdmVuIGluIHRoZSBwY3JlMnVuaWNvZGUgcGFnZS4KKworICAgICAgIDIuIFBDUkUyIGFsbG93cyByZXBlYXQgcXVhbnRpZmllcnMgb25seSAgb24gIHBhcmVudGhlc2l6ZWQgIGFzc2VydGlvbnMsCisgICAgICAgYnV0ICB0aGV5ICBkbyBub3QgbWVhbiB3aGF0IHlvdSBtaWdodCB0aGluay4gRm9yIGV4YW1wbGUsICg/IWEpezN9IGRvZXMKKyAgICAgICBub3QgYXNzZXJ0IHRoYXQgdGhlIG5leHQgdGhyZWUgY2hhcmFjdGVycyBhcmUgbm90ICJhIi4gSXQganVzdCAgYXNzZXJ0cworICAgICAgIHRoYXQgIHRoZSAgbmV4dCAgY2hhcmFjdGVyICBpcyBub3QgImEiIHRocmVlIHRpbWVzIChpbiBwcmluY2lwbGU6IFBDUkUyCisgICAgICAgb3B0aW1pemVzIHRoaXMgdG8gcnVuIHRoZSBhc3NlcnRpb24gIGp1c3QgIG9uY2UpLiAgUGVybCAgYWxsb3dzICByZXBlYXQKKyAgICAgICBxdWFudGlmaWVycyAgb24gIG90aGVyICBhc3NlcnRpb25zIHN1Y2ggYXMgXGIsIGJ1dCB0aGVzZSBkbyBub3Qgc2VlbSB0bworICAgICAgIGhhdmUgYW55IHVzZS4KKworICAgICAgIDMuIENhcHR1cmluZyBzdWJwYXR0ZXJucyB0aGF0IG9jY3VyIGluc2lkZSAgbmVnYXRpdmUgIGxvb2thaGVhZCAgYXNzZXItCisgICAgICAgdGlvbnMgIGFyZSAgY291bnRlZCwgIGJ1dCB0aGVpciBlbnRyaWVzIGluIHRoZSBvZmZzZXRzIHZlY3RvciBhcmUgbmV2ZXIKKyAgICAgICBzZXQuIFBlcmwgc29tZXRpbWVzIChidXQgbm90IGFsd2F5cykgc2V0cyBpdHMgbnVtZXJpY2FsIHZhcmlhYmxlcyAgZnJvbQorICAgICAgIGluc2lkZSBuZWdhdGl2ZSBhc3NlcnRpb25zLgorCisgICAgICAgNC4gIFRoZSAgZm9sbG93aW5nIFBlcmwgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbm90IHN1cHBvcnRlZDogXGwsIFx1LCBcTCwKKyAgICAgICBcVSwgYW5kIFxOIHdoZW4gZm9sbG93ZWQgYnkgYSBjaGFyYWN0ZXIgbmFtZSBvciBVbmljb2RlIHZhbHVlLiAgKFxOICBvbgorICAgICAgIGl0cyBvd24sIG1hdGNoaW5nIGEgbm9uLW5ld2xpbmUgY2hhcmFjdGVyLCBpcyBzdXBwb3J0ZWQuKSBJbiBmYWN0IHRoZXNlCisgICAgICAgYXJlIGltcGxlbWVudGVkIGJ5IFBlcmwncyBnZW5lcmFsIHN0cmluZy1oYW5kbGluZyBhbmQgYXJlIG5vdCAgcGFydCAgb2YKKyAgICAgICBpdHMgIHBhdHRlcm4gbWF0Y2hpbmcgZW5naW5lLiBJZiBhbnkgb2YgdGhlc2UgYXJlIGVuY291bnRlcmVkIGJ5IFBDUkUyLAorICAgICAgIGFuIGVycm9yIGlzIGdlbmVyYXRlZCBieSBkZWZhdWx0LiBIb3dldmVyLCBpZiB0aGUgUENSRTJfQUxUX0JTVVggb3B0aW9uCisgICAgICAgaXMgc2V0LCBcVSBhbmQgXHUgYXJlIGludGVycHJldGVkIGFzIEVDTUFTY3JpcHQgaW50ZXJwcmV0cyB0aGVtLgorCisgICAgICAgNS4gVGhlIFBlcmwgZXNjYXBlIHNlcXVlbmNlcyBccCwgXFAsIGFuZCBcWCBhcmUgc3VwcG9ydGVkIG9ubHkgaWYgUENSRTIKKyAgICAgICBpcyBidWlsdCB3aXRoIFVuaWNvZGUgc3VwcG9ydC4gVGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgIHRlc3RlZCAgd2l0aAorICAgICAgIFxwIGFuZCBcUCBhcmUgbGltaXRlZCB0byB0aGUgZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0aWVzIHN1Y2ggYXMgTHUgYW5kCisgICAgICAgTmQsIHNjcmlwdCBuYW1lcyBzdWNoIGFzIEdyZWVrIG9yIEhhbiwgYW5kIHRoZSBkZXJpdmVkICBwcm9wZXJ0aWVzICBBbnkKKyAgICAgICBhbmQgTCYuIFBDUkUyIGRvZXMgc3VwcG9ydCB0aGUgQ3MgKHN1cnJvZ2F0ZSkgcHJvcGVydHksIHdoaWNoIFBlcmwgZG9lcworICAgICAgIG5vdDsgdGhlIFBlcmwgZG9jdW1lbnRhdGlvbiBzYXlzICJCZWNhdXNlIFBlcmwgaGlkZXMgdGhlIG5lZWQgIGZvciAgdGhlCisgICAgICAgdXNlciAgdG8gIHVuZGVyc3RhbmQgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIFVuaWNvZGUgY2hhcmFjdGVycywKKyAgICAgICB0aGVyZSBpcyBubyBuZWVkIHRvIGltcGxlbWVudCB0aGUgIHNvbWV3aGF0ICBtZXNzeSAgY29uY2VwdCAgb2YgIHN1cnJvLQorICAgICAgIGdhdGVzLiIKKworICAgICAgIDYuICBQQ1JFMiBkb2VzIHN1cHBvcnQgdGhlIFxRLi4uXEUgZXNjYXBlIGZvciBxdW90aW5nIHN1YnN0cmluZ3MuIENoYXItCisgICAgICAgYWN0ZXJzIGluIGJldHdlZW4gYXJlIHRyZWF0ZWQgYXMgbGl0ZXJhbHMuIFRoaXMgaXMgIHNsaWdodGx5ICBkaWZmZXJlbnQKKyAgICAgICBmcm9tICBQZXJsICBpbiAgdGhhdCAgJCAgYW5kICBAIGFyZSBhbHNvIGhhbmRsZWQgYXMgbGl0ZXJhbHMgaW5zaWRlIHRoZQorICAgICAgIHF1b3Rlcy4gSW4gUGVybCwgdGhleSBjYXVzZSB2YXJpYWJsZSBpbnRlcnBvbGF0aW9uIChidXQgb2YgY291cnNlIFBDUkUyCisgICAgICAgZG9lcyBub3QgaGF2ZSB2YXJpYWJsZXMpLiAgTm90ZSB0aGUgZm9sbG93aW5nIGV4YW1wbGVzOgorCisgICAgICAgICAgIFBhdHRlcm4gICAgICAgICAgICBQQ1JFMiBtYXRjaGVzICAgICAgUGVybCBtYXRjaGVzCisKKyAgICAgICAgICAgXFFhYmMkeHl6XEUgICAgICAgIGFiYyR4eXogICAgICAgICAgIGFiYyBmb2xsb3dlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudHMgb2YgJHh5egorICAgICAgICAgICBcUWFiY1wkeHl6XEUgICAgICAgYWJjXCR4eXogICAgICAgICAgYWJjXCR4eXoKKyAgICAgICAgICAgXFFhYmNcRVwkXFF4eXpcRSAgIGFiYyR4eXogICAgICAgICAgIGFiYyR4eXoKKworICAgICAgIFRoZSAgXFEuLi5cRSAgc2VxdWVuY2UgIGlzIHJlY29nbml6ZWQgYm90aCBpbnNpZGUgYW5kIG91dHNpZGUgY2hhcmFjdGVyCisgICAgICAgY2xhc3Nlcy4KKworICAgICAgIDcuICBGYWlybHkgIG9idmlvdXNseSwgIFBDUkUyICBkb2VzICBub3QgIHN1cHBvcnQgIHRoZSAgKD97Y29kZX0pICAgYW5kCisgICAgICAgKD8/e2NvZGV9KSAgY29uc3RydWN0aW9ucy4gSG93ZXZlciwgdGhlcmUgaXMgc3VwcG9ydCBmb3IgcmVjdXJzaXZlIHBhdC0KKyAgICAgICB0ZXJucy4gVGhpcyBpcyBub3QgYXZhaWxhYmxlIGluIFBlcmwgNS44LCBidXQgaXQgaXMgaW4gUGVybCA1LjEwLiBBbHNvLAorICAgICAgIHRoZSAgUENSRTIgICJjYWxsb3V0IiAgZmVhdHVyZSBhbGxvd3MgYW4gZXh0ZXJuYWwgZnVuY3Rpb24gdG8gYmUgY2FsbGVkCisgICAgICAgZHVyaW5nICBwYXR0ZXJuICBtYXRjaGluZy4gIFNlZSAgdGhlICBwY3JlMmNhbGxvdXQgIGRvY3VtZW50YXRpb24gICBmb3IKKyAgICAgICBkZXRhaWxzLgorCisgICAgICAgOC4gIFN1YnJvdXRpbmUgIGNhbGxzICAod2hldGhlciByZWN1cnNpdmUgb3Igbm90KSBhcmUgdHJlYXRlZCBhcyBhdG9taWMKKyAgICAgICBncm91cHMuICBBdG9taWMgcmVjdXJzaW9uIGlzIGxpa2UgUHl0aG9uLCAgYnV0ICB1bmxpa2UgIFBlcmwuICBDYXB0dXJlZAorICAgICAgIHZhbHVlcyAgdGhhdCAgYXJlICBzZXQgb3V0c2lkZSBhIHN1YnJvdXRpbmUgY2FsbCBjYW4gYmUgcmVmZXJlbmNlZCBmcm9tCisgICAgICAgaW5zaWRlIGluIFBDUkUyLCBidXQgbm90IGluIFBlcmwuIFRoZXJlIGlzIGEgZGlzY3Vzc2lvbiAgdGhhdCAgZXhwbGFpbnMKKyAgICAgICB0aGVzZSAgZGlmZmVyZW5jZXMgIGluICBtb3JlIGRldGFpbCBpbiB0aGUgc2VjdGlvbiBvbiByZWN1cnNpb24gZGlmZmVyLQorICAgICAgIGVuY2VzIGZyb20gUGVybCBpbiB0aGUgcGNyZTJwYXR0ZXJuIHBhZ2UuCisKKyAgICAgICA5LiBJZiBhbnkgb2YgdGhlIGJhY2t0cmFja2luZyBjb250cm9sIHZlcmJzIGFyZSB1c2VkICBpbiAgYSAgc3VicGF0dGVybgorICAgICAgIHRoYXQgIGlzICBjYWxsZWQgIGFzICBhICBzdWJyb3V0aW5lICh3aGV0aGVyIG9yIG5vdCByZWN1cnNpdmVseSksIHRoZWlyCisgICAgICAgZWZmZWN0IGlzIGNvbmZpbmVkIHRvIHRoYXQgc3VicGF0dGVybjsgaXQgZG9lcyBub3QgZXh0ZW5kIHRvICB0aGUgIHN1ci0KKyAgICAgICByb3VuZGluZyAgcGF0dGVybi4gIFRoaXMgaXMgbm90IGFsd2F5cyB0aGUgY2FzZSBpbiBQZXJsLiBJbiBwYXJ0aWN1bGFyLAorICAgICAgIGlmICgqVEhFTikgaXMgcHJlc2VudCBpbiBhIGdyb3VwIHRoYXQgaXMgY2FsbGVkIGFzICBhICBzdWJyb3V0aW5lLCAgaXRzCisgICAgICAgYWN0aW9uIGlzIGxpbWl0ZWQgdG8gdGhhdCBncm91cCwgZXZlbiBpZiB0aGUgZ3JvdXAgZG9lcyBub3QgY29udGFpbiBhbnkKKyAgICAgICB8IGNoYXJhY3RlcnMuIE5vdGUgdGhhdCBzdWNoIHN1YnBhdHRlcm5zIGFyZSBwcm9jZXNzZWQgYXMgIGFuY2hvcmVkICBhdAorICAgICAgIHRoZSBwb2ludCB3aGVyZSB0aGV5IGFyZSB0ZXN0ZWQuCisKKyAgICAgICAxMC4gIElmIGEgcGF0dGVybiBjb250YWlucyBtb3JlIHRoYW4gb25lIGJhY2t0cmFja2luZyBjb250cm9sIHZlcmIsIHRoZQorICAgICAgIGZpcnN0IG9uZSB0aGF0IGlzIGJhY2t0cmFja2VkIG9udG8gYWN0cy4gRm9yIGV4YW1wbGUsICBpbiAgdGhlICBwYXR0ZXJuCisgICAgICAgQSgqQ09NTUlUKUIoKlBSVU5FKUMgIGEgIGZhaWx1cmUgaW4gQiB0cmlnZ2VycyAoKkNPTU1JVCksIGJ1dCBhIGZhaWx1cmUKKyAgICAgICBpbiBDIHRyaWdnZXJzICgqUFJVTkUpLiBQZXJsJ3MgYmVoYXZpb3VyIGlzIG1vcmUgY29tcGxleDsgaW4gbWFueSBjYXNlcworICAgICAgIGl0IGlzIHRoZSBzYW1lIGFzIFBDUkUyLCBidXQgdGhlcmUgYXJlIGV4YW1wbGVzIHdoZXJlIGl0IGRpZmZlcnMuCisKKyAgICAgICAxMS4gIE1vc3QgIGJhY2t0cmFja2luZyAgdmVyYnMgaW4gYXNzZXJ0aW9ucyBoYXZlIHRoZWlyIG5vcm1hbCBhY3Rpb25zLgorICAgICAgIFRoZXkgYXJlIG5vdCBjb25maW5lZCB0byB0aGUgYXNzZXJ0aW9uLgorCisgICAgICAgMTIuIFRoZXJlIGFyZSBzb21lIGRpZmZlcmVuY2VzIHRoYXQgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSBzZXR0aW5ncyAgb2YKKyAgICAgICBjYXB0dXJlZCAgc3RyaW5ncyAgd2hlbiAgcGFydCAgb2YgIGEgIHBhdHRlcm4gaXMgcmVwZWF0ZWQuIEZvciBleGFtcGxlLAorICAgICAgIG1hdGNoaW5nICJhYmEiIGFnYWluc3QgdGhlICBwYXR0ZXJuICAvXihhKGIpPykrJC8gIGluICBQZXJsICBsZWF2ZXMgICQyCisgICAgICAgdW5zZXQsIGJ1dCBpbiBQQ1JFMiBpdCBpcyBzZXQgdG8gImIiLgorCisgICAgICAgMTMuIFBDUkUyJ3MgaGFuZGxpbmcgb2YgZHVwbGljYXRlIHN1YnBhdHRlcm4gbnVtYmVycyBhbmQgZHVwbGljYXRlIHN1Yi0KKyAgICAgICBwYXR0ZXJuIG5hbWVzIGlzIG5vdCBhcyBnZW5lcmFsIGFzIFBlcmwncy4gVGhpcyBpcyBhIGNvbnNlcXVlbmNlIG9mIHRoZQorICAgICAgIGZhY3QgIHRoZSAgUENSRTIgIHdvcmtzIGludGVybmFsbHkganVzdCB3aXRoIG51bWJlcnMsIHVzaW5nIGFuIGV4dGVybmFsCisgICAgICAgdGFibGUgdG8gdHJhbnNsYXRlIGJldHdlZW4gbnVtYmVycyBhbmQgbmFtZXMuIEluIHBhcnRpY3VsYXIsIGEgIHBhdHRlcm4KKyAgICAgICBzdWNoICBhcyAgKD98KD88YT5BKXwoPzxiKUIpLCAgd2hlcmUgdGhlIHR3byBjYXB0dXJpbmcgcGFyZW50aGVzZXMgaGF2ZQorICAgICAgIHRoZSBzYW1lIG51bWJlciBidXQgZGlmZmVyZW50IG5hbWVzLCBpcyBub3Qgc3VwcG9ydGVkLCAgYW5kICBjYXVzZXMgIGFuCisgICAgICAgZXJyb3IgIGF0IGNvbXBpbGUgdGltZS4gSWYgaXQgd2VyZSBhbGxvd2VkLCBpdCB3b3VsZCBub3QgYmUgcG9zc2libGUgdG8KKyAgICAgICBkaXN0aW5ndWlzaCB3aGljaCBwYXJlbnRoZXNlcyBtYXRjaGVkLCBiZWNhdXNlIGJvdGggbmFtZXMgbWFwICB0byAgY2FwLQorICAgICAgIHR1cmluZyBzdWJwYXR0ZXJuIG51bWJlciAxLiBUbyBhdm9pZCB0aGlzIGNvbmZ1c2luZyBzaXR1YXRpb24sIGFuIGVycm9yCisgICAgICAgaXMgZ2l2ZW4gYXQgY29tcGlsZSB0aW1lLgorCisgICAgICAgMTQuIFBlcmwgcmVjb2duaXplcyBjb21tZW50cyBpbiBzb21lIHBsYWNlcyB0aGF0IFBDUkUyICBkb2VzICBub3QsICBmb3IKKyAgICAgICBleGFtcGxlLCAgYmV0d2VlbiAgdGhlICAoIGFuZCA/IGF0IHRoZSBzdGFydCBvZiBhIHN1YnBhdHRlcm4uIElmIHRoZSAveAorICAgICAgIG1vZGlmaWVyIGlzIHNldCwgUGVybCBhbGxvd3Mgd2hpdGUgc3BhY2UgYmV0d2VlbiAoIGFuZCA/ICAodGhvdWdoICBjdXItCisgICAgICAgcmVudCAgUGVybHMgd2FybiB0aGF0IHRoaXMgaXMgZGVwcmVjYXRlZCkgYnV0IFBDUkUyIG5ldmVyIGRvZXMsIGV2ZW4gaWYKKyAgICAgICB0aGUgUENSRTJfRVhURU5ERUQgb3B0aW9uIGlzIHNldC4KKworICAgICAgIDE1LiBQZXJsLCB3aGVuIGluIHdhcm5pbmcgbW9kZSwgZ2l2ZXMgd2FybmluZ3MgIGZvciAgY2hhcmFjdGVyICBjbGFzc2VzCisgICAgICAgc3VjaCAgYXMgIFtBLVxkXSBvciBbYS1bOmRpZ2l0Ol1dLiBJdCB0aGVuIHRyZWF0cyB0aGUgaHlwaGVucyBhcyBsaXRlci0KKyAgICAgICBhbHMuIFBDUkUyIGhhcyBubyB3YXJuaW5nIGZlYXR1cmVzLCBzbyBpdCBnaXZlcyBhbiBlcnJvciBpbiB0aGVzZSBjYXNlcworICAgICAgIGJlY2F1c2UgdGhleSBhcmUgYWxtb3N0IGNlcnRhaW5seSB1c2VyIG1pc3Rha2VzLgorCisgICAgICAgMTYuICBJbiAgUENSRTIsIHRoZSB1cHBlci9sb3dlciBjYXNlIGNoYXJhY3RlciBwcm9wZXJ0aWVzIEx1IGFuZCBMbCBhcmUKKyAgICAgICBub3QgYWZmZWN0ZWQgd2hlbiBjYXNlLWluZGVwZW5kZW50IG1hdGNoaW5nIGlzIHNwZWNpZmllZC4gRm9yICBleGFtcGxlLAorICAgICAgIFxwe0x1fSBhbHdheXMgbWF0Y2hlcyBhbiB1cHBlciBjYXNlIGxldHRlci4gSSB0aGluayBQZXJsIGhhcyBjaGFuZ2VkIGluCisgICAgICAgdGhpcyByZXNwZWN0OyBpbiB0aGUgcmVsZWFzZSBhdCB0aGUgdGltZSBvZiB3cml0aW5nICg1LjE2KSwgXHB7THV9ICBhbmQKKyAgICAgICBccHtMbH0gbWF0Y2ggYWxsIGxldHRlcnMsIHJlZ2FyZGxlc3Mgb2YgY2FzZSwgd2hlbiBjYXNlIGluZGVwZW5kZW5jZSBpcworICAgICAgIHNwZWNpZmllZC4KKworICAgICAgIDE3LiBQQ1JFMiBwcm92aWRlcyBzb21lICBleHRlbnNpb25zICB0byAgdGhlICBQZXJsICByZWd1bGFyICBleHByZXNzaW9uCisgICAgICAgZmFjaWxpdGllcy4gICBQZXJsICA1LjEwICBpbmNsdWRlcyBuZXcgZmVhdHVyZXMgdGhhdCBhcmUgbm90IGluIGVhcmxpZXIKKyAgICAgICB2ZXJzaW9ucyBvZiBQZXJsLCBzb21lIG9mIHdoaWNoIChzdWNoIGFzIG5hbWVkIHBhcmVudGhlc2VzKSAgaGF2ZSAgYmVlbgorICAgICAgIGluIFBDUkUyIGZvciBzb21lIHRpbWUuIFRoaXMgbGlzdCBpcyB3aXRoIHJlc3BlY3QgdG8gUGVybCA1LjEwOgorCisgICAgICAgKGEpICBBbHRob3VnaCAgbG9va2JlaGluZCAgYXNzZXJ0aW9ucyAgaW4gUENSRTIgbXVzdCBtYXRjaCBmaXhlZCBsZW5ndGgKKyAgICAgICBzdHJpbmdzLCBlYWNoIGFsdGVybmF0aXZlIGJyYW5jaCBvZiBhIGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGNhbiBtYXRjaCAgYQorICAgICAgIGRpZmZlcmVudCAgbGVuZ3RoICBvZiAgc3RyaW5nLiAgUGVybCByZXF1aXJlcyB0aGVtIGFsbCB0byBoYXZlIHRoZSBzYW1lCisgICAgICAgbGVuZ3RoLgorCisgICAgICAgKGIpIElmIFBDUkUyX0RPTExBUl9FTkRPTkxZIGlzIHNldCBhbmQgUENSRTJfTVVMVElMSU5FIGlzIG5vdCBzZXQsICB0aGUKKyAgICAgICAkIG1ldGEtY2hhcmFjdGVyIG1hdGNoZXMgb25seSBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIHN0cmluZy4KKworICAgICAgIChjKSAgQSAgYmFja3NsYXNoICBmb2xsb3dlZCAgYnkgIGEgIGxldHRlciAgd2l0aCAgbm8gc3BlY2lhbCBtZWFuaW5nIGlzCisgICAgICAgZmF1bHRlZC4gKFBlcmwgY2FuIGJlIG1hZGUgdG8gaXNzdWUgYSB3YXJuaW5nLikKKworICAgICAgIChkKSBJZiBQQ1JFMl9VTkdSRUVEWSBpcyBzZXQsIHRoZSBncmVlZGluZXNzIG9mIHRoZSByZXBldGl0aW9uICBxdWFudGktCisgICAgICAgZmllcnMgaXMgaW52ZXJ0ZWQsIHRoYXQgaXMsIGJ5IGRlZmF1bHQgdGhleSBhcmUgbm90IGdyZWVkeSwgYnV0IGlmIGZvbC0KKyAgICAgICBsb3dlZCBieSBhIHF1ZXN0aW9uIG1hcmsgdGhleSBhcmUuCisKKyAgICAgICAoZSkgUENSRTJfQU5DSE9SRUQgY2FuIGJlIHVzZWQgYXQgbWF0Y2hpbmcgdGltZSB0byBmb3JjZSBhICBwYXR0ZXJuICB0bworICAgICAgIGJlIHRyaWVkIG9ubHkgYXQgdGhlIGZpcnN0IG1hdGNoaW5nIHBvc2l0aW9uIGluIHRoZSBzdWJqZWN0IHN0cmluZy4KKworICAgICAgIChmKSAgICAgIFRoZSAgICAgIFBDUkUyX05PVEJPTCwgICAgICBQQ1JFMl9OT1RFT0wsICAgICAgUENSRTJfTk9URU1QVFksCisgICAgICAgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwgYW5kIFBDUkUyX05PX0FVVE9fQ0FQVFVSRSBvcHRpb25zIGhhdmUgbm8gIFBlcmwKKyAgICAgICBlcXVpdmFsZW50cy4KKworICAgICAgIChnKSAgVGhlICBcUiBlc2NhcGUgc2VxdWVuY2UgY2FuIGJlIHJlc3RyaWN0ZWQgdG8gbWF0Y2ggb25seSBDUiwgTEYsIG9yCisgICAgICAgQ1JMRiBieSB0aGUgUENSRTJfQlNSX0FOWUNSTEYgb3B0aW9uLgorCisgICAgICAgKGgpIFRoZSBjYWxsb3V0IGZhY2lsaXR5IGlzIFBDUkUyLXNwZWNpZmljLgorCisgICAgICAgKGkpIFRoZSBwYXJ0aWFsIG1hdGNoaW5nIGZhY2lsaXR5IGlzIFBDUkUyLXNwZWNpZmljLgorCisgICAgICAgKGopIFRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbiAocGNyZTJfZGZhX21hdGNoKCkgbWF0Y2hlcyAgaW4gIGEKKyAgICAgICBkaWZmZXJlbnQgd2F5IGFuZCBpcyBub3QgUGVybC1jb21wYXRpYmxlLgorCisgICAgICAgKGspICBQQ1JFMiByZWNvZ25pemVzIHNvbWUgc3BlY2lhbCBzZXF1ZW5jZXMgc3VjaCBhcyAoKkNSKSBhdCB0aGUgc3RhcnQKKyAgICAgICBvZiBhIHBhdHRlcm4gdGhhdCBzZXQgb3ZlcmFsbCBvcHRpb25zIHRoYXQgY2Fubm90IGJlIGNoYW5nZWQgd2l0aGluIHRoZQorICAgICAgIHBhdHRlcm4uCisKKworQVVUSE9SCisKKyAgICAgICBQaGlsaXAgSGF6ZWwKKyAgICAgICBVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCisgICAgICAgQ2FtYnJpZGdlLCBFbmdsYW5kLgorCisKK1JFVklTSU9OCisKKyAgICAgICBMYXN0IHVwZGF0ZWQ6IDE1IE1hcmNoIDIwMTUKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1BDUkUySklUKDMpICAgICAgICAgICAgICAgIExpYnJhcnkgRnVuY3Rpb25zIE1hbnVhbCAgICAgICAgICAgICAgICBQQ1JFMkpJVCgzKQorCisKKworTkFNRQorICAgICAgIFBDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorCitQQ1JFMiBKVVNULUlOLVRJTUUgQ09NUElMRVIgU1VQUE9SVAorCisgICAgICAgSnVzdC1pbi10aW1lICBjb21waWxpbmcgIGlzIGEgaGVhdnl3ZWlnaHQgb3B0aW1pemF0aW9uIHRoYXQgY2FuIGdyZWF0bHkKKyAgICAgICBzcGVlZCB1cCBwYXR0ZXJuIG1hdGNoaW5nLiBIb3dldmVyLCBpdCBjb21lcyBhdCB0aGUgY29zdCBvZiBleHRyYSAgcHJvLQorICAgICAgIGNlc3NpbmcgIGJlZm9yZSAgdGhlICBtYXRjaCBpcyBwZXJmb3JtZWQsIHNvIGl0IGlzIG9mIG1vc3QgYmVuZWZpdCB3aGVuCisgICAgICAgdGhlIHNhbWUgcGF0dGVybiBpcyBnb2luZyB0byBiZSBtYXRjaGVkIG1hbnkgdGltZXMuIFRoaXMgZG9lcyBub3QgIG5lYy0KKyAgICAgICBlc3NhcmlseSAgbWVhbiBtYW55IGNhbGxzIG9mIGEgbWF0Y2hpbmcgZnVuY3Rpb247IGlmIHRoZSBwYXR0ZXJuIGlzIG5vdAorICAgICAgIGFuY2hvcmVkLCBtYXRjaGluZyBhdHRlbXB0cyBtYXkgdGFrZSBwbGFjZSBtYW55IHRpbWVzIGF0IHZhcmlvdXMgIHBvc2ktCisgICAgICAgdGlvbnMgaW4gdGhlIHN1YmplY3QsIGV2ZW4gZm9yIGEgc2luZ2xlIGNhbGwuIFRoZXJlZm9yZSwgaWYgdGhlIHN1YmplY3QKKyAgICAgICBzdHJpbmcgaXMgdmVyeSBsb25nLCBpdCBtYXkgc3RpbGwgcGF5ICB0byAgdXNlICBKSVQgIGV2ZW4gIGZvciAgb25lLW9mZgorICAgICAgIG1hdGNoZXMuICBKSVQgIHN1cHBvcnQgIGlzICBhdmFpbGFibGUgIGZvciBhbGwgb2YgdGhlIDgtYml0LCAxNi1iaXQgYW5kCisgICAgICAgMzItYml0IFBDUkUyIGxpYnJhcmllcy4KKworICAgICAgIEpJVCBzdXBwb3J0IGFwcGxpZXMgb25seSB0byB0aGUgIHRyYWRpdGlvbmFsICBQZXJsLWNvbXBhdGlibGUgIG1hdGNoaW5nCisgICAgICAgZnVuY3Rpb24uICAgSXQgIGRvZXMgIG5vdCBhcHBseSB3aGVuIHRoZSBERkEgbWF0Y2hpbmcgZnVuY3Rpb24gaXMgYmVpbmcKKyAgICAgICB1c2VkLiBUaGUgY29kZSBmb3IgdGhpcyBzdXBwb3J0IHdhcyB3cml0dGVuIGJ5IFpvbHRhbiBIZXJjemVnLgorCisKK0FWQUlMQUJJTElUWSBPRiBKSVQgU1VQUE9SVAorCisgICAgICAgSklUIHN1cHBvcnQgaXMgYW4gb3B0aW9uYWwgZmVhdHVyZSBvZiAgUENSRTIuICBUaGUgICJjb25maWd1cmUiICBvcHRpb24KKyAgICAgICAtLWVuYWJsZS1qaXQgIChvciAgZXF1aXZhbGVudCAgQ01ha2UgIG9wdGlvbikgbXVzdCBiZSBzZXQgd2hlbiBQQ1JFMiBpcworICAgICAgIGJ1aWx0IGlmIHlvdSB3YW50IHRvIHVzZSBKSVQuIFRoZSBzdXBwb3J0IGlzIGxpbWl0ZWQgdG8gIHRoZSAgZm9sbG93aW5nCisgICAgICAgaGFyZHdhcmUgcGxhdGZvcm1zOgorCisgICAgICAgICBBUk0gMzItYml0ICh2NSwgdjcsIGFuZCBUaHVtYjIpCisgICAgICAgICBBUk0gNjQtYml0CisgICAgICAgICBJbnRlbCB4ODYgMzItYml0IGFuZCA2NC1iaXQKKyAgICAgICAgIE1JUFMgMzItYml0IGFuZCA2NC1iaXQKKyAgICAgICAgIFBvd2VyIFBDIDMyLWJpdCBhbmQgNjQtYml0CisgICAgICAgICBTUEFSQyAzMi1iaXQKKworICAgICAgIElmIC0tZW5hYmxlLWppdCBpcyBzZXQgb24gYW4gdW5zdXBwb3J0ZWQgcGxhdGZvcm0sIGNvbXBpbGF0aW9uIGZhaWxzLgorCisgICAgICAgQSAgcHJvZ3JhbSAgY2FuICB0ZWxsIGlmIEpJVCBzdXBwb3J0IGlzIGF2YWlsYWJsZSBieSBjYWxsaW5nIHBjcmUyX2Nvbi0KKyAgICAgICBmaWcoKSB3aXRoIHRoZSBQQ1JFMl9DT05GSUdfSklUIG9wdGlvbi4gVGhlIHJlc3VsdCBpcyAgMSAgd2hlbiAgSklUICBpcworICAgICAgIGF2YWlsYWJsZSwgIGFuZCAwIG90aGVyd2lzZS4gSG93ZXZlciwgYSBzaW1wbGUgcHJvZ3JhbSBkb2VzIG5vdCBuZWVkIHRvCisgICAgICAgY2hlY2sgdGhpcyBpbiBvcmRlciB0byB1c2UgSklULiBUaGUgQVBJIGlzIGltcGxlbWVudGVkIGluICBhICB3YXkgIHRoYXQKKyAgICAgICBmYWxscyAgYmFjayAgdG8gdGhlIGludGVycHJldGl2ZSBjb2RlIGlmIEpJVCBpcyBub3QgYXZhaWxhYmxlLiBGb3IgcHJvLQorICAgICAgIGdyYW1zIHRoYXQgbmVlZCB0aGUgYmVzdCBwb3NzaWJsZSBwZXJmb3JtYW5jZSwgdGhlcmUgaXMgIGFsc28gIGEgICJmYXN0CisgICAgICAgcGF0aCIgQVBJIHRoYXQgaXMgSklULXNwZWNpZmljLgorCisKK1NJTVBMRSBVU0UgT0YgSklUCisKKyAgICAgICBUbyAgbWFrZSB1c2Ugb2YgdGhlIEpJVCBzdXBwb3J0IGluIHRoZSBzaW1wbGVzdCB3YXksIGFsbCB5b3UgaGF2ZSB0byBkbworICAgICAgIGlzIHRvIGNhbGwgcGNyZTJfaml0X2NvbXBpbGUoKSBhZnRlciBzdWNjZXNzZnVsbHkgY29tcGlsaW5nICBhICBwYXR0ZXJuCisgICAgICAgd2l0aCBwY3JlMl9jb21waWxlKCkuIFRoaXMgZnVuY3Rpb24gaGFzIHR3byBhcmd1bWVudHM6IHRoZSBmaXJzdCBpcyB0aGUKKyAgICAgICBjb21waWxlZCBwYXR0ZXJuIHBvaW50ZXIgdGhhdCB3YXMgcmV0dXJuZWQgYnkgcGNyZTJfY29tcGlsZSgpLCBhbmQgIHRoZQorICAgICAgIHNlY29uZCAgaXMgIHplcm8gIG9yICBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uIGJpdHM6IFBDUkUyX0pJVF9DT00tCisgICAgICAgUExFVEUsIFBDUkUyX0pJVF9QQVJUSUFMX0hBUkQsIG9yIFBDUkUyX0pJVF9QQVJUSUFMX1NPRlQuCisKKyAgICAgICBJZiBKSVQgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLCBhICBjYWxsICB0byAgcGNyZTJfaml0X2NvbXBpbGUoKSAgZG9lcworICAgICAgIG5vdGhpbmcgIGFuZCByZXR1cm5zIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04uIE90aGVyd2lzZSwgdGhlIGNvbXBpbGVkCisgICAgICAgcGF0dGVybiBpcyBwYXNzZWQgdG8gdGhlIEpJVCBjb21waWxlciwgd2hpY2ggdHVybnMgaXQgaW50byBtYWNoaW5lIGNvZGUKKyAgICAgICB0aGF0IGV4ZWN1dGVzIG11Y2ggZmFzdGVyIHRoYW4gdGhlIG5vcm1hbCBpbnRlcnByZXRpdmUgY29kZSwgYnV0IHlpZWxkcworICAgICAgIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0cy4gVGhlIHJldHVybmVkIHZhbHVlICBmcm9tICBwY3JlMl9qaXRfY29tcGlsZSgpCisgICAgICAgaXMgemVybyBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisKKyAgICAgICBUaGVyZSAgaXMgIGEgbGltaXQgdG8gdGhlIHNpemUgb2YgcGF0dGVybiB0aGF0IEpJVCBzdXBwb3J0cywgaW1wb3NlZCBieQorICAgICAgIHRoZSBzaXplIG9mIG1hY2hpbmUgc3RhY2sgdGhhdCBpdCB1c2VzLiBUaGUgZXhhY3QgcnVsZXMgYXJlICBub3QgIGRvY3UtCisgICAgICAgbWVudGVkICBiZWNhdXNlICB0aGV5ICBtYXkgIGNoYW5nZSBhdCBhbnkgdGltZSwgaW4gcGFydGljdWxhciwgd2hlbiBuZXcKKyAgICAgICBvcHRpbWl6YXRpb25zIGFyZSBpbnRyb2R1Y2VkLiAgSWYgYSBwYXR0ZXJuICBpcyAgdG9vICBiaWcsICBhICBjYWxsICB0bworICAgICAgIHBjcmUyX2ppdF9jb21waWxlKCkgcmV0dXJucyBQQ1JFMl9FUlJPUl9OT01FTU9SWS4KKworICAgICAgIFBDUkUyX0pJVF9DT01QTEVURSAgcmVxdWVzdHMgdGhlIEpJVCBjb21waWxlciB0byBnZW5lcmF0ZSBjb2RlIGZvciBjb20tCisgICAgICAgcGxldGUgbWF0Y2hlcy4gSWYgeW91IHdhbnQgdG8gcnVuIHBhcnRpYWwgbWF0Y2hlcyB1c2luZyB0aGUgIFBDUkUyX1BBUi0KKyAgICAgICBUSUFMX0hBUkQgIG9yICBQQ1JFMl9QQVJUSUFMX1NPRlQgIG9wdGlvbnMgb2YgcGNyZTJfbWF0Y2goKSwgeW91IHNob3VsZAorICAgICAgIHNldCBvbmUgb3IgYm90aCBvZiAgdGhlICBvdGhlciAgb3B0aW9ucyAgYXMgIHdlbGwgIGFzLCAgb3IgIGluc3RlYWQgIG9mCisgICAgICAgUENSRTJfSklUX0NPTVBMRVRFLiBUaGUgSklUIGNvbXBpbGVyIGdlbmVyYXRlcyBkaWZmZXJlbnQgb3B0aW1pemVkIGNvZGUKKyAgICAgICBmb3IgZWFjaCBvZiB0aGUgdGhyZWUgbW9kZXMgKG5vcm1hbCwgc29mdCBwYXJ0aWFsLCBoYXJkIHBhcnRpYWwpLiAgV2hlbgorICAgICAgIHBjcmUyX21hdGNoKCkgIGlzICBjYWxsZWQsICB0aGUgYXBwcm9wcmlhdGUgY29kZSBpcyBydW4gaWYgaXQgaXMgYXZhaWwtCisgICAgICAgYWJsZS4gT3RoZXJ3aXNlLCB0aGUgcGF0dGVybiBpcyBtYXRjaGVkIHVzaW5nIGludGVycHJldGl2ZSBjb2RlLgorCisgICAgICAgWW91IGNhbiBjYWxsIHBjcmUyX2ppdF9jb21waWxlKCkgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSAgc2FtZSAgY29tcGlsZWQKKyAgICAgICBwYXR0ZXJuLiAgSXQgZG9lcyBub3RoaW5nIGlmIGl0IGhhcyBwcmV2aW91c2x5IGNvbXBpbGVkIGNvZGUgZm9yIGFueSBvZgorICAgICAgIHRoZSBvcHRpb24gYml0cy4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2FsbCBpdCBvbmNlIHdpdGggIFBDUkUyX0pJVF9DT00tCisgICAgICAgUExFVEUgIGFuZCAgKHBlcmhhcHMgIGxhdGVyLCAgd2hlbiAgeW91IGZpbmQgeW91IG5lZWQgcGFydGlhbCBtYXRjaGluZykKKyAgICAgICBhZ2FpbiB3aXRoIFBDUkUyX0pJVF9DT01QTEVURSBhbmQgUENSRTJfSklUX1BBUlRJQUxfSEFSRC4gVGhpcyB0aW1lICBpdAorICAgICAgIHdpbGwgaWdub3JlIFBDUkUyX0pJVF9DT01QTEVURSBhbmQganVzdCBjb21waWxlIGNvZGUgZm9yIHBhcnRpYWwgbWF0Y2gtCisgICAgICAgaW5nLiBJZiBwY3JlMl9qaXRfY29tcGlsZSgpIGlzIGNhbGxlZCB3aXRoIG5vIG9wdGlvbiBiaXRzIHNldCwgaXQgaW1tZS0KKyAgICAgICBkaWF0ZWx5IHJldHVybnMgemVyby4gVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSB3YXkgb2YgdGVzdGluZyB3aGV0aGVyIEpJVAorICAgICAgIGlzIGF2YWlsYWJsZS4KKworICAgICAgIEF0IHByZXNlbnQsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBmcmVlIEpJVCBjb21waWxlZCAgY29kZSAgZXhjZXB0ICB3aGVuCisgICAgICAgdGhlIGVudGlyZSBjb21waWxlZCBwYXR0ZXJuIGlzIGZyZWVkIGJ5IGNhbGxpbmcgcGNyZTJfY29kZV9mcmVlKCkuCisKKyAgICAgICBJbiAgc29tZSBjaXJjdW1zdGFuY2VzIHlvdSBtYXkgbmVlZCB0byBjYWxsIGFkZGl0aW9uYWwgZnVuY3Rpb25zLiBUaGVzZQorICAgICAgIGFyZSBkZXNjcmliZWQgaW4gdGhlICBzZWN0aW9uICBlbnRpdGxlZCAgIkNvbnRyb2xsaW5nICB0aGUgIEpJVCAgc3RhY2siCisgICAgICAgYmVsb3cuCisKKyAgICAgICBUaGVyZSBhcmUgc29tZSBwY3JlMl9tYXRjaCgpIG9wdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSBKSVQsIGFuZAorICAgICAgIHRoZXJlIGFyZSBhbHNvIHNvbWUgcGF0dGVybiBpdGVtcyB0aGF0IEpJVCBjYW5ub3QgaGFuZGxlLiAgRGV0YWlscyAgYXJlCisgICAgICAgZ2l2ZW4gIGJlbG93LiAgSW4gIGJvdGggY2FzZXMsIG1hdGNoaW5nIGF1dG9tYXRpY2FsbHkgZmFsbHMgYmFjayB0byB0aGUKKyAgICAgICBpbnRlcnByZXRpdmUgY29kZS4gSWYgeW91IHdhbnQgdG8ga25vdyB3aGV0aGVyIEpJVCAgd2FzICBhY3R1YWxseSAgdXNlZAorICAgICAgIGZvciAgYSBwYXJ0aWN1bGFyIG1hdGNoLCB5b3Ugc2hvdWxkIGFycmFuZ2UgZm9yIGEgSklUIGNhbGxiYWNrIGZ1bmN0aW9uCisgICAgICAgdG8gYmUgc2V0IHVwIGFzIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiQ29udHJvbGxpbmcgdGhlICBKSVQKKyAgICAgICBzdGFjayIgIGJlbG93LCAgZXZlbiAgaWYgIHlvdSAgZG8gIG5vdCBuZWVkIHRvIHN1cHBseSBhIG5vbi1kZWZhdWx0IEpJVAorICAgICAgIHN0YWNrLiBTdWNoIGEgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIEpJVCBjb2RlIGlzIGFib3V0IHRvCisgICAgICAgYmUgIG9iZXllZC4gIElmIHRoZSBtYXRjaC10aW1lIG9wdGlvbnMgYXJlIG5vdCByaWdodCBmb3IgSklUIGV4ZWN1dGlvbiwKKyAgICAgICB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgbm90IG9iZXllZC4KKworICAgICAgIElmIHRoZSBKSVQgY29tcGlsZXIgZmluZHMgYW4gdW5zdXBwb3J0ZWQgaXRlbSwgbm8gSklUICBkYXRhICBpcyAgZ2VuZXItCisgICAgICAgYXRlZC4gIFlvdSAgY2FuIGZpbmQgb3V0IGlmIEpJVCBtYXRjaGluZyBpcyBhdmFpbGFibGUgYWZ0ZXIgY29tcGlsaW5nIGEKKyAgICAgICBwYXR0ZXJuIGJ5IGNhbGxpbmcgIHBjcmUyX3BhdHRlcm5faW5mbygpICB3aXRoICB0aGUgIFBDUkUyX0lORk9fSklUU0laRQorICAgICAgIG9wdGlvbi4gIEEgbm9uLXplcm8gcmVzdWx0IG1lYW5zIHRoYXQgSklUIGNvbXBpbGF0aW9uIHdhcyBzdWNjZXNzZnVsLiBBCisgICAgICAgcmVzdWx0IG9mIDAgbWVhbnMgdGhhdCBKSVQgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLCBvciB0aGUgcGF0dGVybiB3YXMKKyAgICAgICBub3QgIHByb2Nlc3NlZCBieSBwY3JlMl9qaXRfY29tcGlsZSgpLCBvciB0aGUgSklUIGNvbXBpbGVyIHdhcyBub3QgYWJsZQorICAgICAgIHRvIGhhbmRsZSB0aGUgcGF0dGVybi4KKworCitVTlNVUFBPUlRFRCBPUFRJT05TIEFORCBQQVRURVJOIElURU1TCisKKyAgICAgICBUaGUgcGNyZTJfbWF0Y2goKSBvcHRpb25zIHRoYXQgIGFyZSAgc3VwcG9ydGVkICBmb3IgIEpJVCAgbWF0Y2hpbmcgIGFyZQorICAgICAgIFBDUkUyX05PVEJPTCwgICBQQ1JFMl9OT1RFT0wsICBQQ1JFMl9OT1RFTVBUWSwgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQsCisgICAgICAgUENSRTJfTk9fVVRGX0NIRUNLLCAgUENSRTJfUEFSVElBTF9IQVJELCAgYW5kICBQQ1JFMl9QQVJUSUFMX1NPRlQuICBUaGUKKyAgICAgICBQQ1JFMl9BTkNIT1JFRCBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCBhdCBtYXRjaCB0aW1lLgorCisgICAgICAgVGhlICBvbmx5ICB1bnN1cHBvcnRlZCAgcGF0dGVybiBpdGVtcyBhcmUgXEMgKG1hdGNoIGEgc2luZ2xlIGRhdGEgdW5pdCkKKyAgICAgICB3aGVuIHJ1bm5pbmcgaW4gYSBVVEYgbW9kZSwgYW5kIGEgY2FsbG91dCBpbW1lZGlhdGVseSBiZWZvcmUgYW4gIGFzc2VyLQorICAgICAgIHRpb24gY29uZGl0aW9uIGluIGEgY29uZGl0aW9uYWwgZ3JvdXAuCisKKworUkVUVVJOIFZBTFVFUyBGUk9NIEpJVCBNQVRDSElORworCisgICAgICAgV2hlbiBhIHBhdHRlcm4gaXMgbWF0Y2hlZCB1c2luZyBKSVQgbWF0Y2hpbmcsIHRoZSByZXR1cm4gdmFsdWVzIGFyZSB0aGUKKyAgICAgICBzYW1lIGFzIHRob3NlIGdpdmVuIGJ5IHRoZSBpbnRlcnByZXRpdmUgcGNyZTJfbWF0Y2goKSAgY29kZSwgIHdpdGggIHRoZQorICAgICAgIGFkZGl0aW9uICBvZiBvbmUgbmV3IGVycm9yIGNvZGU6IFBDUkUyX0VSUk9SX0pJVF9TVEFDS0xJTUlULiBUaGlzIG1lYW5zCisgICAgICAgdGhhdCB0aGUgbWVtb3J5IHVzZWQgZm9yIHRoZSBKSVQgc3RhY2sgd2FzIGluc3VmZmljaWVudC4gU2VlICAiQ29udHJvbC0KKyAgICAgICBsaW5nIHRoZSBKSVQgc3RhY2siIGJlbG93IGZvciBhIGRpc2N1c3Npb24gb2YgSklUIHN0YWNrIHVzYWdlLgorCisgICAgICAgVGhlICBlcnJvciAgY29kZSAgUENSRTJfRVJST1JfTUFUQ0hMSU1JVCBpcyByZXR1cm5lZCBieSB0aGUgSklUIGNvZGUgaWYKKyAgICAgICBzZWFyY2hpbmcgYSB2ZXJ5IGxhcmdlIHBhdHRlcm4gdHJlZSBnb2VzIG9uIGZvciB0b28gbG9uZywgYXMgaXQgIGlzICBpbgorICAgICAgIHRoZSAgc2FtZSBjaXJjdW1zdGFuY2Ugd2hlbiBKSVQgaXMgbm90IHVzZWQsIGJ1dCB0aGUgZGV0YWlscyBvZiBleGFjdGx5CisgICAgICAgd2hhdCBpcyBjb3VudGVkIGFyZSBub3QgdGhlIHNhbWUuIFRoZSBQQ1JFMl9FUlJPUl9SRUNVUlNJT05MSU1JVCAgZXJyb3IKKyAgICAgICBjb2RlIGlzIG5ldmVyIHJldHVybmVkIHdoZW4gSklUIG1hdGNoaW5nIGlzIHVzZWQuCisKKworQ09OVFJPTExJTkcgVEhFIEpJVCBTVEFDSworCisgICAgICAgV2hlbiB0aGUgY29tcGlsZWQgSklUIGNvZGUgcnVucywgaXQgbmVlZHMgYSBibG9jayBvZiBtZW1vcnkgdG8gdXNlIGFzIGEKKyAgICAgICBzdGFjay4gIEJ5IGRlZmF1bHQsIGl0IHVzZXMgMzJLIG9uIHRoZSAgbWFjaGluZSAgc3RhY2suICBIb3dldmVyLCAgc29tZQorICAgICAgIGxhcmdlICAgb3IgICBjb21wbGljYXRlZCAgcGF0dGVybnMgIG5lZWQgIG1vcmUgIHRoYW4gIHRoaXMuICBUaGUgIGVycm9yCisgICAgICAgUENSRTJfRVJST1JfSklUX1NUQUNLTElNSVQgaXMgZ2l2ZW4gd2hlbiB0aGVyZSAgaXMgIG5vdCAgZW5vdWdoICBzdGFjay4KKyAgICAgICBUaHJlZSAgZnVuY3Rpb25zICBhcmUgcHJvdmlkZWQgZm9yIG1hbmFnaW5nIGJsb2NrcyBvZiBtZW1vcnkgZm9yIHVzZSBhcworICAgICAgIEpJVCBzdGFja3MuIFRoZXJlIGlzIGZ1cnRoZXIgZGlzY3Vzc2lvbiBhYm91dCB0aGUgdXNlIG9mIEpJVCBzdGFja3MgIGluCisgICAgICAgdGhlIHNlY3Rpb24gZW50aXRsZWQgIkpJVCBzdGFjayBGQVEiIGJlbG93LgorCisgICAgICAgVGhlICBwY3JlMl9qaXRfc3RhY2tfY3JlYXRlKCkgIGZ1bmN0aW9uICBjcmVhdGVzIGEgSklUIHN0YWNrLiBJdHMgYXJndS0KKyAgICAgICBtZW50cyBhcmUgYSBzdGFydGluZyBzaXplLCBhIG1heGltdW0gc2l6ZSwgYW5kIGEgZ2VuZXJhbCAgY29udGV4dCAgKGZvcgorICAgICAgIG1lbW9yeSAgYWxsb2NhdGlvbiAgZnVuY3Rpb25zLCBvciBOVUxMIGZvciBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbikuCisgICAgICAgSXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYW4gb3BhcXVlIHN0cnVjdHVyZSBvZiB0eXBlIHBjcmUyX2ppdF9zdGFjaywgb3IKKyAgICAgICBOVUxMICBpZiB0aGVyZSBpcyBhbiBlcnJvci4gVGhlIHBjcmUyX2ppdF9zdGFja19mcmVlKCkgZnVuY3Rpb24gaXMgdXNlZAorICAgICAgIHRvIGZyZWUgYSBzdGFjayB0aGF0IGlzIG5vIGxvbmdlciBuZWVkZWQuIChGb3IgdGhlIHRlY2huaWNhbGx5ICBtaW5kZWQ6CisgICAgICAgdGhlIGFkZHJlc3Mgc3BhY2UgaXMgYWxsb2NhdGVkIGJ5IG1tYXAgb3IgVmlydHVhbEFsbG9jLikKKworICAgICAgIEpJVCAgdXNlcyBmYXIgbGVzcyBtZW1vcnkgZm9yIHJlY3Vyc2lvbiB0aGFuIHRoZSBpbnRlcnByZXRpdmUgY29kZSwgYW5kCisgICAgICAgYSBtYXhpbXVtIHN0YWNrIHNpemUgb2YgNTEySyB0byAxTSBzaG91bGQgYmUgbW9yZSB0aGFuIGVub3VnaCAgZm9yICBhbnkKKyAgICAgICBwYXR0ZXJuLgorCisgICAgICAgVGhlICBwY3JlMl9qaXRfc3RhY2tfYXNzaWduKCkgIGZ1bmN0aW9uICBzcGVjaWZpZXMgd2hpY2ggc3RhY2sgSklUIGNvZGUKKyAgICAgICBzaG91bGQgdXNlLiBJdHMgYXJndW1lbnRzIGFyZSBhcyBmb2xsb3dzOgorCisgICAgICAgICBwY3JlMl9tYXRjaF9jb250ZXh0ICAqbWNvbnRleHQKKyAgICAgICAgIHBjcmUyX2ppdF9jYWxsYmFjayAgICBjYWxsYmFjaworICAgICAgICAgdm9pZCAgICAgICAgICAgICAgICAgKmRhdGEKKworICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gYSBtYXRjaCBjb250ZXh0LiBXaGVuIHRoaXMgaXMgc3Vic2UtCisgICAgICAgcXVlbnRseSBwYXNzZWQgdG8gYSBtYXRjaGluZyBmdW5jdGlvbiwgaXRzIGluZm9ybWF0aW9uIGRldGVybWluZXMgd2hpY2gKKyAgICAgICBKSVQgc3RhY2sgaXMgdXNlZC4gVGhlcmUgYXJlIHRocmVlIGNhc2VzIGZvciB0aGUgdmFsdWVzICBvZiAgdGhlICBvdGhlcgorICAgICAgIHR3byBvcHRpb25zOgorCisgICAgICAgICAoMSkgSWYgY2FsbGJhY2sgaXMgTlVMTCBhbmQgZGF0YSBpcyBOVUxMLCBhbiBpbnRlcm5hbCAzMksgYmxvY2sKKyAgICAgICAgICAgICBvbiB0aGUgbWFjaGluZSBzdGFjayBpcyB1c2VkLiBUaGlzIGlzIHRoZSBkZWZhdWx0IHdoZW4gYSBtYXRjaAorICAgICAgICAgICAgIGNvbnRleHQgaXMgY3JlYXRlZC4KKworICAgICAgICAgKDIpIElmIGNhbGxiYWNrIGlzIE5VTEwgYW5kIGRhdGEgaXMgbm90IE5VTEwsIGRhdGEgbXVzdCBiZQorICAgICAgICAgICAgIGEgcG9pbnRlciB0byBhIHZhbGlkIEpJVCBzdGFjaywgdGhlIHJlc3VsdCBvZiBjYWxsaW5nCisgICAgICAgICAgICAgcGNyZTJfaml0X3N0YWNrX2NyZWF0ZSgpLgorCisgICAgICAgICAoMykgSWYgY2FsbGJhY2sgaXMgbm90IE5VTEwsIGl0IG11c3QgcG9pbnQgdG8gYSBmdW5jdGlvbiB0aGF0IGlzCisgICAgICAgICAgICAgY2FsbGVkIHdpdGggZGF0YSBhcyBhbiBhcmd1bWVudCBhdCB0aGUgc3RhcnQgb2YgbWF0Y2hpbmcsIGluCisgICAgICAgICAgICAgb3JkZXIgdG8gc2V0IHVwIGEgSklUIHN0YWNrLiBJZiB0aGUgcmV0dXJuIGZyb20gdGhlIGNhbGxiYWNrCisgICAgICAgICAgICAgZnVuY3Rpb24gaXMgTlVMTCwgdGhlIGludGVybmFsIDMySyBzdGFjayBpcyB1c2VkOyBvdGhlcndpc2UgdGhlCisgICAgICAgICAgICAgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBKSVQgc3RhY2ssIHRoZSByZXN1bHQgb2YgY2FsbGluZworICAgICAgICAgICAgIHBjcmUyX2ppdF9zdGFja19jcmVhdGUoKS4KKworICAgICAgIEEgIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIG9iZXllZCB3aGVuZXZlciBKSVQgY29kZSBpcyBhYm91dCB0byBiZSBydW47IGl0CisgICAgICAgaXMgbm90IG9iZXllZCB3aGVuIHBjcmUyX21hdGNoKCkgaXMgY2FsbGVkIHdpdGggb3B0aW9ucyB0aGF0IGFyZSBpbmNvbS0KKyAgICAgICBwYXRpYmxlICBmb3IgSklUIG1hdGNoaW5nLiBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiB0aGVyZWZvcmUgYmUgdXNlZCB0bworICAgICAgIGRldGVybWluZSB3aGV0aGVyIGEgbWF0Y2ggb3BlcmF0aW9uIHdhcyAgZXhlY3V0ZWQgIGJ5ICBKSVQgIG9yICBieSAgdGhlCisgICAgICAgaW50ZXJwcmV0ZXIuCisKKyAgICAgICBZb3UgbWF5IHNhZmVseSB1c2UgdGhlIHNhbWUgSklUIHN0YWNrIGZvciBtb3JlIHRoYW4gb25lIHBhdHRlcm4gKGVpdGhlcgorICAgICAgIGJ5IGFzc2lnbmluZyBkaXJlY3RseSBvciBieSBjYWxsYmFjayksIGFzICBsb25nICBhcyAgdGhlICBwYXR0ZXJucyAgYXJlCisgICAgICAgbWF0Y2hlZCBzZXF1ZW50aWFsbHkgaW4gdGhlIHNhbWUgdGhyZWFkLiBDdXJyZW50bHksIHRoZSBvbmx5IHdheSB0byBzZXQKKyAgICAgICB1cCBub24tc2VxdWVudGlhbCBtYXRjaGVzIGluIG9uZSB0aHJlYWQgaXMgdG8gdXNlIGNhbGxvdXRzOiBpZiBhICBjYWxsLQorICAgICAgIG91dCAgZnVuY3Rpb24gc3RhcnRzIGFub3RoZXIgbWF0Y2gsIHRoYXQgbWF0Y2ggbXVzdCB1c2UgYSBkaWZmZXJlbnQgSklUCisgICAgICAgc3RhY2sgdG8gdGhlIG9uZSB1c2VkIGZvciBjdXJyZW50bHkgc3VzcGVuZGVkIG1hdGNoKGVzKS4KKworICAgICAgIEluIGEgbXVsdGl0aHJlYWQgYXBwbGljYXRpb24sIGlmIHlvdSBkbyBub3Qgc3BlY2lmeSBhIEpJVCBzdGFjaywgb3IgIGlmCisgICAgICAgeW91ICBhc3NpZ24gIG9yICBwYXNzICBiYWNrICBOVUxMIGZyb20gYSBjYWxsYmFjaywgdGhhdCBpcyB0aHJlYWQtc2FmZSwKKyAgICAgICBiZWNhdXNlIGVhY2ggdGhyZWFkIGhhcyBpdHMgb3duIG1hY2hpbmUgc3RhY2suIEhvd2V2ZXIsIGlmICB5b3UgIGFzc2lnbgorICAgICAgIG9yICBwYXNzICBiYWNrIGEgbm9uLU5VTEwgSklUIHN0YWNrLCB0aGlzIG11c3QgYmUgYSBkaWZmZXJlbnQgc3RhY2sgZm9yCisgICAgICAgZWFjaCB0aHJlYWQgc28gdGhhdCB0aGUgYXBwbGljYXRpb24gaXMgdGhyZWFkLXNhZmUuCisKKyAgICAgICBTdHJpY3RseSBzcGVha2luZywgZXZlbiBtb3JlIGlzIGFsbG93ZWQuIFlvdSBjYW4gYXNzaWduIHRoZSAgc2FtZSAgbm9uLQorICAgICAgIE5VTEwgIHN0YWNrICB0byBhIG1hdGNoIGNvbnRleHQgdGhhdCBpcyB1c2VkIGJ5IGFueSBudW1iZXIgb2YgcGF0dGVybnMsCisgICAgICAgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3QgdXNlZCBmb3IgbWF0Y2hpbmcgYnkgbXVsdGlwbGUgIHRocmVhZHMgIGF0ICB0aGUKKyAgICAgICBzYW1lICB0aW1lLiAgRm9yICBleGFtcGxlLCB5b3UgY291bGQgdXNlIHRoZSBzYW1lIHN0YWNrIGluIGFsbCBjb21waWxlZAorICAgICAgIHBhdHRlcm5zLCB3aXRoIGEgZ2xvYmFsIG11dGV4IGluIHRoZSBjYWxsYmFjayB0byB3YWl0IHVudGlsICB0aGUgIHN0YWNrCisgICAgICAgaXMgYXZhaWxhYmxlIGZvciB1c2UuIEhvd2V2ZXIsIHRoaXMgaXMgYW4gaW5lZmZpY2llbnQgc29sdXRpb24sIGFuZCBub3QKKyAgICAgICByZWNvbW1lbmRlZC4KKworICAgICAgIFRoaXMgaXMgYSBzdWdnZXN0aW9uIGZvciBob3cgYSBtdWx0aXRocmVhZGVkIHByb2dyYW0gdGhhdCBuZWVkcyB0byAgc2V0CisgICAgICAgdXAgbm9uLWRlZmF1bHQgSklUIHN0YWNrcyBtaWdodCBvcGVyYXRlOgorCisgICAgICAgICBEdXJpbmcgdGhyZWFkIGluaXRhbGl6YXRpb24KKyAgICAgICAgICAgdGhyZWFkX2xvY2FsX3ZhciA9IHBjcmUyX2ppdF9zdGFja19jcmVhdGUoLi4uKQorCisgICAgICAgICBEdXJpbmcgdGhyZWFkIGV4aXQKKyAgICAgICAgICAgcGNyZTJfaml0X3N0YWNrX2ZyZWUodGhyZWFkX2xvY2FsX3ZhcikKKworICAgICAgICAgVXNlIGEgb25lLWxpbmUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICAgICAgICAgcmV0dXJuIHRocmVhZF9sb2NhbF92YXIKKworICAgICAgIEFsbCAgdGhlICBmdW5jdGlvbnMgIGRlc2NyaWJlZCBpbiB0aGlzIHNlY3Rpb24gZG8gbm90aGluZyBpZiBKSVQgaXMgbm90CisgICAgICAgYXZhaWxhYmxlLgorCisKK0pJVCBTVEFDSyBGQVEKKworICAgICAgICgxKSBXaHkgZG8gd2UgbmVlZCBKSVQgc3RhY2tzPworCisgICAgICAgUENSRTIgKGFuZCBKSVQpIGlzIGEgcmVjdXJzaXZlLCBkZXB0aC1maXJzdCBlbmdpbmUsIHNvIGl0IG5lZWRzIGEgc3RhY2sKKyAgICAgICB3aGVyZSAgdGhlIGxvY2FsIGRhdGEgb2YgdGhlIGN1cnJlbnQgbm9kZSBpcyBwdXNoZWQgYmVmb3JlIGNoZWNraW5nIGl0cworICAgICAgIGNoaWxkIG5vZGVzLiAgQWxsb2NhdGluZyByZWFsIG1hY2hpbmUgc3RhY2sgb24gc29tZSBwbGF0Zm9ybXMgaXMgZGlmZmktCisgICAgICAgY3VsdC4gRm9yIGV4YW1wbGUsIHRoZSBzdGFjayBjaGFpbiBuZWVkcyB0byBiZSB1cGRhdGVkIGV2ZXJ5IHRpbWUgaWYgd2UKKyAgICAgICBleHRlbmQgdGhlIHN0YWNrIG9uIFBvd2VyUEMuICBBbHRob3VnaCBpdCAgaXMgIHBvc3NpYmxlLCAgaXRzICB1cGRhdGluZworICAgICAgIHRpbWUgb3ZlcmhlYWQgZGVjcmVhc2VzIHBlcmZvcm1hbmNlLiBTbyB3ZSBkbyB0aGUgcmVjdXJzaW9uIGluIG1lbW9yeS4KKworICAgICAgICgyKSBXaHkgZG9uJ3Qgd2Ugc2ltcGx5IGFsbG9jYXRlIGJsb2NrcyBvZiBtZW1vcnkgd2l0aCBtYWxsb2MoKT8KKworICAgICAgIE1vZGVybiAgb3BlcmF0aW5nICBzeXN0ZW1zICBoYXZlICBhICBuaWNlICBmZWF0dXJlOiB0aGV5IGNhbiByZXNlcnZlIGFuCisgICAgICAgYWRkcmVzcyBzcGFjZSBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgbWVtb3J5LiBXZSBjYW4gc2FmZWx5IGFsbG9jYXRlIG1lbS0KKyAgICAgICBvcnkgIHBhZ2VzICBpbnNpZGUgIHRoaXMgYWRkcmVzcyBzcGFjZSwgc28gdGhlIHN0YWNrIGNvdWxkIGdyb3cgd2l0aG91dAorICAgICAgIG1vdmluZyBtZW1vcnkgZGF0YSAodGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBvZiBwb2ludGVycykuIFRodXMgd2UgY2FuCisgICAgICAgYWxsb2NhdGUgIDFNICBhZGRyZXNzIHNwYWNlLCBhbmQgdXNlIG9ubHkgYSBzaW5nbGUgbWVtb3J5IHBhZ2UgKHVzdWFsbHkKKyAgICAgICA0SykgaWYgdGhhdCBpcyBlbm91Z2guIEhvd2V2ZXIsIHdlIGNhbiBzdGlsbCBncm93IHVwIHRvIDFNICBhbnl0aW1lICBpZgorICAgICAgIG5lZWRlZC4KKworICAgICAgICgzKSBXaG8gIm93bnMiIGEgSklUIHN0YWNrPworCisgICAgICAgVGhlIG93bmVyIG9mIHRoZSBzdGFjayBpcyB0aGUgdXNlciBwcm9ncmFtLCBub3QgdGhlIEpJVCBzdHVkaWVkIHBhdHRlcm4KKyAgICAgICBvciBhbnl0aGluZyBlbHNlLiBUaGUgdXNlciBwcm9ncmFtIG11c3QgZW5zdXJlIHRoYXQgaWYgYSBzdGFjayBpcyBiZWluZworICAgICAgIHVzZWQgYnkgcGNyZTJfbWF0Y2goKSwgKHRoYXQgaXMsIGl0IGlzIGFzc2lnbmVkIHRvIGEgbWF0Y2ggY29udGV4dCB0aGF0CisgICAgICAgaXMgcGFzc2VkIHRvIHRoZSBwYXR0ZXJuIGN1cnJlbnRseSBydW5uaW5nKSwgdGhhdCAgc3RhY2sgIG11c3QgIG5vdCAgYmUKKyAgICAgICB1c2VkICBieSBhbnkgb3RoZXIgdGhyZWFkcyAodG8gYXZvaWQgb3ZlcndyaXRpbmcgdGhlIHNhbWUgbWVtb3J5IGFyZWEpLgorICAgICAgIFRoZSBiZXN0IHByYWN0aWNlIGZvciBtdWx0aXRocmVhZGVkIHByb2dyYW1zIGlzIHRvIGFsbG9jYXRlIGEgc3RhY2sgZm9yCisgICAgICAgZWFjaCB0aHJlYWQsIGFuZCByZXR1cm4gdGhpcyBzdGFjayB0aHJvdWdoIHRoZSBKSVQgY2FsbGJhY2sgZnVuY3Rpb24uCisKKyAgICAgICAoNCkgV2hlbiBzaG91bGQgYSBKSVQgc3RhY2sgYmUgZnJlZWQ/CisKKyAgICAgICBZb3UgY2FuIGZyZWUgYSBKSVQgc3RhY2sgYXQgYW55IHRpbWUsIGFzIGxvbmcgYXMgaXQgd2lsbCBub3QgYmUgdXNlZCBieQorICAgICAgIHBjcmUyX21hdGNoKCkgYWdhaW4uIFdoZW4geW91IGFzc2lnbiB0aGUgc3RhY2sgdG8gYSBtYXRjaCBjb250ZXh0LCBvbmx5CisgICAgICAgYSAgcG9pbnRlciAgaXMgIHNldC4gVGhlcmUgaXMgbm8gcmVmZXJlbmNlIGNvdW50aW5nIG9yIGFueSBvdGhlciBtYWdpYy4KKyAgICAgICBZb3UgY2FuIGZyZWUgY29tcGlsZWQgcGF0dGVybnMsIGNvbnRleHRzLCBhbmQgc3RhY2tzIGluIGFueSBvcmRlciwgYW55LQorICAgICAgIHRpbWUuICBKdXN0ICBkbyBub3QgY2FsbCBwY3JlMl9tYXRjaCgpIHdpdGggYSBtYXRjaCBjb250ZXh0IHBvaW50aW5nIHRvCisgICAgICAgYW4gYWxyZWFkeSBmcmVlZCBzdGFjaywgYXMgdGhhdCB3aWxsIGNhdXNlIFNFR0ZBVUxULiAoQWxzbywgZG8gbm90IGZyZWUKKyAgICAgICBhICBzdGFjayAgY3VycmVudGx5ICB1c2VkICBieSBwY3JlMl9tYXRjaCgpIGluIGFub3RoZXIgdGhyZWFkKS4gWW91IGNhbgorICAgICAgIGFsc28gcmVwbGFjZSB0aGUgc3RhY2sgaW4gYSBjb250ZXh0IGF0IGFueSB0aW1lIHdoZW4gaXQgaXMgbm90IGluICB1c2UuCisgICAgICAgWW91IHNob3VsZCBmcmVlIHRoZSBwcmV2aW91cyBzdGFjayBiZWZvcmUgYXNzaWduaW5nIGEgcmVwbGFjZW1lbnQuCisKKyAgICAgICAoNSkgIFNob3VsZCAgSSAgYWxsb2NhdGUvZnJlZSAgYSAgc3RhY2sgZXZlcnkgdGltZSBiZWZvcmUvYWZ0ZXIgY2FsbGluZworICAgICAgIHBjcmUyX21hdGNoKCk/CisKKyAgICAgICBObywgYmVjYXVzZSB0aGlzIGlzIHRvbyBjb3N0bHkgaW4gIHRlcm1zICBvZiAgcmVzb3VyY2VzLiAgSG93ZXZlciwgIHlvdQorICAgICAgIGNvdWxkICBpbXBsZW1lbnQgIHNvbWUgY2xldmVyIGlkZWEgd2hpY2ggcmVsZWFzZSB0aGUgc3RhY2sgaWYgaXQgaXMgbm90CisgICAgICAgdXNlZCBpbiBsZXQncyBzYXkgdHdvIG1pbnV0ZXMuIFRoZSBKSVQgY2FsbGJhY2sgIGNhbiAgaGVscCAgdG8gIGFjaGlldmUKKyAgICAgICB0aGlzIHdpdGhvdXQga2VlcGluZyBhIGxpc3Qgb2YgcGF0dGVybnMuCisKKyAgICAgICAoNikgIE9LLCB0aGUgc3RhY2sgaXMgZm9yIGxvbmcgdGVybSBtZW1vcnkgYWxsb2NhdGlvbi4gQnV0IHdoYXQgaGFwcGVucworICAgICAgIGlmIGEgcGF0dGVybiBjYXVzZXMgc3RhY2sgb3ZlcmZsb3cgd2l0aCBhIHN0YWNrIG9mIDFNPyBJcyB0aGF0IDFNICBrZXB0CisgICAgICAgdW50aWwgdGhlIHN0YWNrIGlzIGZyZWVkPworCisgICAgICAgRXNwZWNpYWxseSAgb24gZW1iZWRkZWQgc3l0ZW1zLCBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYSB0byByZWxlYXNlIG1lbS0KKyAgICAgICBvcnkgc29tZXRpbWVzIHdpdGhvdXQgZnJlZWluZyB0aGUgc3RhY2suIFRoZXJlIGlzIG5vIEFQSSAgZm9yICB0aGlzICBhdAorICAgICAgIHRoZSAgbW9tZW50LiAgUHJvYmFibHkgYSBmdW5jdGlvbiBjYWxsIHdoaWNoIHJldHVybnMgd2l0aCB0aGUgY3VycmVudGx5CisgICAgICAgYWxsb2NhdGVkIG1lbW9yeSBmb3IgYW55IHN0YWNrIGFuZCBhbm90aGVyIHdoaWNoIGFsbG93cyByZWxlYXNpbmcgIG1lbS0KKyAgICAgICBvcnkgKHNocmlua2luZyB0aGUgc3RhY2spIHdvdWxkIGJlIGEgZ29vZCBpZGVhIGlmIHNvbWVvbmUgbmVlZHMgdGhpcy4KKworICAgICAgICg3KSBUaGlzIGlzIHRvbyBtdWNoIG9mIGEgaGVhZGFjaGUuIElzbid0IHRoZXJlIGFueSBiZXR0ZXIgc29sdXRpb24gZm9yCisgICAgICAgSklUIHN0YWNrIGhhbmRsaW5nPworCisgICAgICAgTm8sIHRoYW5rcyB0byBXaW5kb3dzLiBJZiBQT1NJWCB0aHJlYWRzIHdlcmUgdXNlZCBldmVyeXdoZXJlLCB3ZSAgY291bGQKKyAgICAgICB0aHJvdyBvdXQgdGhpcyBjb21wbGljYXRlZCBBUEkuCisKKworRlJFRUlORyBKSVQgU1BFQ1VMQVRJVkUgTUVNT1JZCisKKyAgICAgICB2b2lkIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCk7CisKKyAgICAgICBUaGUgSklUIGV4ZWN1dGFibGUgYWxsb2NhdG9yIGRvZXMgbm90IGZyZWUgYWxsIG1lbW9yeSB3aGVuIGl0IGlzIHBvc3NpLQorICAgICAgIGJsZS4gIEl0IGV4cGVjdHMgbmV3IGFsbG9jYXRpb25zLCBhbmQga2VlcHMgc29tZSBmcmVlIG1lbW9yeSBhcm91bmQgIHRvCisgICAgICAgaW1wcm92ZSAgYWxsb2NhdGlvbiAgc3BlZWQuIEhvd2V2ZXIsIGluIGxvdyBtZW1vcnkgY29uZGl0aW9ucywgaXQgbWlnaHQKKyAgICAgICBiZSBiZXR0ZXIgdG8gZnJlZSBhbGwgcG9zc2libGUgbWVtb3J5LiBZb3UgY2FuIGNhdXNlIHRoaXMgdG8gaGFwcGVuICBieQorICAgICAgIGNhbGxpbmcgIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkoKS4gSXRzIGFyZ3VtZW50IGlzIGEgZ2VuZXJhbCBjb24tCisgICAgICAgdGV4dCwgZm9yIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCwgb3IgTlVMTCBmb3Igc3RhbmRhcmQgbWVtb3J5IG1hbmFnZS0KKyAgICAgICBtZW50LgorCisKK0VYQU1QTEUgQ09ERQorCisgICAgICAgVGhpcyAgaXMgIGEgIHNpbmdsZS10aHJlYWRlZCBleGFtcGxlIHRoYXQgc3BlY2lmaWVzIGEgSklUIHN0YWNrIHdpdGhvdXQKKyAgICAgICB1c2luZyBhIGNhbGxiYWNrLiBBIHJlYWwgcHJvZ3JhbSBzaG91bGQgaW5jbHVkZSAgZXJyb3IgIGNoZWNraW5nICBhZnRlcgorICAgICAgIGFsbCB0aGUgZnVuY3Rpb24gY2FsbHMuCisKKyAgICAgICAgIGludCByYzsKKyAgICAgICAgIHBjcmUyX2NvZGUgKnJlOworICAgICAgICAgcGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YTsKKyAgICAgICAgIHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0OworICAgICAgICAgcGNyZTJfaml0X3N0YWNrICpqaXRfc3RhY2s7CisKKyAgICAgICAgIHJlID0gcGNyZTJfY29tcGlsZShwYXR0ZXJuLCBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsIDAsCisgICAgICAgICAgICZlcnJvcm51bWJlciwgJmVycm9mZnNldCwgTlVMTCk7CisgICAgICAgICByYyA9IHBjcmUyX2ppdF9jb21waWxlKHJlLCBQQ1JFMl9KSVRfQ09NUExFVEUpOworICAgICAgICAgbWNvbnRleHQgPSBwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZShOVUxMKTsKKyAgICAgICAgIGppdF9zdGFjayA9IHBjcmUyX2ppdF9zdGFja19jcmVhdGUoMzIqMTAyNCwgNTEyKjEwMjQsIE5VTEwpOworICAgICAgICAgcGNyZTJfaml0X3N0YWNrX2Fzc2lnbihtY29udGV4dCwgTlVMTCwgaml0X3N0YWNrKTsKKyAgICAgICAgIG1hdGNoX2RhdGEgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZShyZSwgMTApOworICAgICAgICAgcmMgPSBwY3JlMl9tYXRjaChyZSwgc3ViamVjdCwgbGVuZ3RoLCAwLCAwLCBtYXRjaF9kYXRhLCBtY29udGV4dCk7CisgICAgICAgICAvKiBQcm9jZXNzIHJlc3VsdCAqLworCisgICAgICAgICBwY3JlMl9jb2RlX2ZyZWUocmUpOworICAgICAgICAgcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKG1hdGNoX2RhdGEpOworICAgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlKG1jb250ZXh0KTsKKyAgICAgICAgIHBjcmUyX2ppdF9zdGFja19mcmVlKGppdF9zdGFjayk7CisKKworSklUIEZBU1QgUEFUSCBBUEkKKworICAgICAgIEJlY2F1c2UgdGhlIEFQSSBkZXNjcmliZWQgYWJvdmUgZmFsbHMgYmFjayB0byBpbnRlcnByZXRlZCBtYXRjaGluZyB3aGVuCisgICAgICAgSklUIGlzIG5vdCBhdmFpbGFibGUsIGl0IGlzIGNvbnZlbmllbnQgZm9yIHByb2dyYW1zICB0aGF0ICBhcmUgIHdyaXR0ZW4KKyAgICAgICBmb3IgIGdlbmVyYWwgIHVzZSAgaW4gIG1hbnkgIGVudmlyb25tZW50cy4gIEhvd2V2ZXIsICBjYWxsaW5nICBKSVQgIHZpYQorICAgICAgIHBjcmUyX21hdGNoKCkgZG9lcyBoYXZlIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBQcm9ncmFtcyB0aGF0IGFyZSB3cml0dGVuCisgICAgICAgZm9yICB1c2UgIHdoZXJlICBKSVQgIGlzIGtub3duIHRvIGJlIGF2YWlsYWJsZSwgYW5kIHdoaWNoIG5lZWQgdGhlIGJlc3QKKyAgICAgICBwb3NzaWJsZSBwZXJmb3JtYW5jZSwgY2FuIGluc3RlYWQgdXNlIGEgImZhc3QgcGF0aCIgIEFQSSAgdG8gIGNhbGwgIEpJVAorICAgICAgIG1hdGNoaW5nICBkaXJlY3RseSBpbnN0ZWFkIG9mIGNhbGxpbmcgcGNyZTJfbWF0Y2goKSAob2J2aW91c2x5IG9ubHkgZm9yCisgICAgICAgcGF0dGVybnMgdGhhdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBieSBwY3JlMl9qaXRfY29tcGlsZSgpKS4KKworICAgICAgIFRoZSBmYXN0IHBhdGggIGZ1bmN0aW9uICBpcyAgY2FsbGVkICBwY3JlMl9qaXRfbWF0Y2goKSwgIGFuZCAgaXQgIHRha2VzCisgICAgICAgZXhhY3RseSB0aGUgc2FtZSBhcmd1bWVudHMgYXMgcGNyZTJfbWF0Y2goKS4gVGhlIHJldHVybiB2YWx1ZXMgYXJlIGFsc28KKyAgICAgICB0aGUgc2FtZSwgcGx1cyBQQ1JFMl9FUlJPUl9KSVRfQkFET1BUSU9OIGlmIGEgbWF0Y2hpbmcgbW9kZSAocGFydGlhbCBvcgorICAgICAgIGNvbXBsZXRlKSAgaXMgIHJlcXVlc3RlZCB0aGF0IHdhcyBub3QgY29tcGlsZWQuIFVuc3VwcG9ydGVkIG9wdGlvbiBiaXRzCisgICAgICAgKGZvciBleGFtcGxlLCBQQ1JFMl9BTkNIT1JFRCkgYXJlIGlnbm9yZWQuCisKKyAgICAgICBXaGVuIHlvdSBjYWxsIHBjcmUyX21hdGNoKCksIGFzIHdlbGwgYXMgdGVzdGluZyBmb3IgaW52YWxpZCBvcHRpb25zLCAgYQorICAgICAgIG51bWJlciBvZiBvdGhlciBzYW5pdHkgY2hlY2tzIGFyZSBwZXJmb3JtZWQgb24gdGhlIGFyZ3VtZW50cy4gRm9yIGV4YW0tCisgICAgICAgcGxlLCBpZiB0aGUgc3ViamVjdCBwb2ludGVyIGlzIE5VTEwsIGFuIGltbWVkaWF0ZSBlcnJvciBpcyBnaXZlbi4gQWxzbywKKyAgICAgICB1bmxlc3MgIFBDUkUyX05PX1VURl9DSEVDSyAgaXMgIHNldCwgYSBVVEYgc3ViamVjdCBzdHJpbmcgaXMgdGVzdGVkIGZvcgorICAgICAgIHZhbGlkaXR5LiBJbiB0aGUgaW50ZXJlc3RzIG9mIHNwZWVkLCB0aGVzZSBjaGVja3MgZG8gbm90IGhhcHBlbiBvbiAgdGhlCisgICAgICAgSklUIGZhc3QgcGF0aCwgYW5kIGlmIGludmFsaWQgZGF0YSBpcyBwYXNzZWQsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLgorCisgICAgICAgQnlwYXNzaW5nICB0aGUgIHNhbml0eSAgY2hlY2tzICBhbmQgdGhlIHBjcmUyX21hdGNoKCkgd3JhcHBpbmcgY2FuIGdpdmUKKyAgICAgICBzcGVlZHVwcyBvZiBtb3JlIHRoYW4gMTAlLgorCisKK1NFRSBBTFNPCisKKyAgICAgICBwY3JlMmFwaSgzKQorCisKK0FVVEhPUgorCisgICAgICAgUGhpbGlwIEhhemVsIChGQVEgYnkgWm9sdGFuIEhlcmN6ZWcpCisgICAgICAgVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorICAgICAgIENhbWJyaWRnZSwgRW5nbGFuZC4KKworCitSRVZJU0lPTgorCisgICAgICAgTGFzdCB1cGRhdGVkOiAxNCBOb3ZlbWJlciAyMDE1CisgICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitQQ1JFMkxJTUlUUygzKSAgICAgICAgICAgICBMaWJyYXJ5IEZ1bmN0aW9ucyBNYW51YWwgICAgICAgICAgICAgUENSRTJMSU1JVFMoMykKKworCisKK05BTUUKKyAgICAgICBQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKworU0laRSBBTkQgT1RIRVIgTElNSVRBVElPTlMKKworICAgICAgIFRoZXJlIGFyZSBzb21lIHNpemUgbGltaXRhdGlvbnMgaW4gUENSRTIgYnV0IGl0IGlzIGhvcGVkIHRoYXQgdGhleSB3aWxsCisgICAgICAgbmV2ZXIgaW4gcHJhY3RpY2UgYmUgcmVsZXZhbnQuCisKKyAgICAgICBUaGUgbWF4aW11bSBzaXplIG9mIGEgY29tcGlsZWQgcGF0dGVybiBpcyBhcHByb3hpbWF0ZWx5IDY0SyBjb2RlICB1bml0cworICAgICAgIGZvciAgdGhlICA4LWJpdCAgYW5kICAxNi1iaXQgIGxpYnJhcmllcyAgaWYgIFBDUkUyIGlzIGNvbXBpbGVkIHdpdGggdGhlCisgICAgICAgZGVmYXVsdCBpbnRlcm5hbCBsaW5rYWdlIHNpemUsIHdoaWNoIGlzIDIgYnl0ZXMgZm9yIHRoZXNlIGxpYnJhcmllcy4gSWYKKyAgICAgICB5b3UgIHdhbnQgIHRvICBwcm9jZXNzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBhcmUgdHJ1bHkgZW5vcm1vdXMsIHlvdQorICAgICAgIGNhbiBjb21waWxlIFBDUkUyIHdpdGggYW4gaW50ZXJuYWwgbGlua2FnZSBzaXplIG9mIDMgb3IgNCAod2hlbiAgYnVpbGQtCisgICAgICAgaW5nICB0aGUgIDE2LWJpdCBsaWJyYXJ5LCAzIGlzIHJvdW5kZWQgdXAgdG8gNCkuIFNlZSB0aGUgUkVBRE1FIGZpbGUgaW4KKyAgICAgICB0aGUgc291cmNlIGRpc3RyaWJ1dGlvbiBhbmQgdGhlIHBjcmUyYnVpbGQgZG9jdW1lbnRhdGlvbiAgZm9yICBkZXRhaWxzLgorICAgICAgIEluICB0aGVzZSAgY2FzZXMgdGhlIGxpbWl0IGlzIHN1YnN0YW50aWFsbHkgbGFyZ2VyLiAgSG93ZXZlciwgdGhlIHNwZWVkCisgICAgICAgb2YgZXhlY3V0aW9uIGlzIHNsb3dlci4gSW4gdGhlIDMyLWJpdCAgbGlicmFyeSwgIHRoZSAgaW50ZXJuYWwgIGxpbmthZ2UKKyAgICAgICBzaXplIGlzIGFsd2F5cyA0LgorCisgICAgICAgVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgc291cmNlIHBhdHRlcm4gc3RyaW5nIGlzIGVzc2VudGlhbGx5IHVubGltaXRlZDsKKyAgICAgICBpdCBpcyB0aGUgbGFyZ2VzdCBudW1iZXIgYSBQQ1JFMl9TSVpFIHZhcmlhYmxlIGNhbiBob2xkLiAgSG93ZXZlciwgIHRoZQorICAgICAgIHByb2dyYW0gdGhhdCBjYWxscyBwY3JlMl9jb21waWxlKCkgY2FuIHNwZWNpZnkgYSBzbWFsbGVyIGxpbWl0LgorCisgICAgICAgVGhlIG1heGltdW0gbGVuZ3RoIChpbiBjb2RlIHVuaXRzKSBvZiBhIHN1YmplY3Qgc3RyaW5nIGlzIG9uZSBsZXNzIHRoYW4KKyAgICAgICB0aGUgbGFyZ2VzdCBudW1iZXIgYSBQQ1JFMl9TSVpFIHZhcmlhYmxlIGNhbiAgaG9sZC4gIFBDUkUyX1NJWkUgIGlzICBhbgorICAgICAgIHVuc2lnbmVkICBpbnRlZ2VyICB0eXBlLCAgdXN1YWxseSAgZGVmaW5lZCBhcyBzaXplX3QuIEl0cyBtYXhpbXVtIHZhbHVlCisgICAgICAgKHRoYXQgaXMgfihQQ1JFMl9TSVpFKTApIGlzIHJlc2VydmVkIGFzIGEgc3BlY2lhbCBpbmRpY2F0b3IgIGZvciAgemVyby0KKyAgICAgICB0ZXJtaW5hdGVkIHN0cmluZ3MgYW5kIHVuc2V0IG9mZnNldHMuCisKKyAgICAgICBOb3RlICB0aGF0ICB3aGVuICB1c2luZyAgdGhlICB0cmFkaXRpb25hbCBtYXRjaGluZyBmdW5jdGlvbiwgUENSRTIgdXNlcworICAgICAgIHJlY3Vyc2lvbiB0byBoYW5kbGUgc3VicGF0dGVybnMgYW5kIGluZGVmaW5pdGUgcmVwZXRpdGlvbi4gIFRoaXMgIG1lYW5zCisgICAgICAgdGhhdCAgdGhlICBhdmFpbGFibGUgc3RhY2sgc3BhY2UgbWF5IGxpbWl0IHRoZSBzaXplIG9mIGEgc3ViamVjdCBzdHJpbmcKKyAgICAgICB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgYnkgY2VydGFpbiBwYXR0ZXJucy4gRm9yIGEgIGRpc2N1c3Npb24gIG9mICBzdGFjaworICAgICAgIGlzc3Vlcywgc2VlIHRoZSBwY3JlMnN0YWNrIGRvY3VtZW50YXRpb24uCisKKyAgICAgICBBbGwgdmFsdWVzIGluIHJlcGVhdGluZyBxdWFudGlmaWVycyBtdXN0IGJlIGxlc3MgdGhhbiA2NTUzNi4KKworICAgICAgIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIDY1NTM1IGNoYXJhY3RlcnMuCisKKyAgICAgICBUaGVyZSBpcyBubyBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIHBhcmVudGhlc2l6ZWQgc3VicGF0dGVybnMsIGJ1dCB0aGVyZQorICAgICAgIGNhbiBiZSBubyBtb3JlIHRoYW4gNjU1MzUgY2FwdHVyaW5nIHN1YnBhdHRlcm5zLiBUaGVyZSBpcywgIGhvd2V2ZXIsICBhCisgICAgICAgbGltaXQgIHRvICB0aGUgIGRlcHRoICBvZiAgbmVzdGluZyAgb2YgcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJucyBvZiBhbGwKKyAgICAgICBraW5kcy4gVGhpcyBpcyBpbXBvc2VkIGluIG9yZGVyIHRvIGxpbWl0IHRoZSAgYW1vdW50ICBvZiAgc3lzdGVtICBzdGFjaworICAgICAgIHVzZWQgIGF0ICBjb21waWxlIHRpbWUuIFRoZSBsaW1pdCBjYW4gYmUgc3BlY2lmaWVkIHdoZW4gUENSRTIgaXMgYnVpbHQ7CisgICAgICAgdGhlIGRlZmF1bHQgaXMgMjUwLgorCisgICAgICAgVGhlcmUgaXMgYSBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGZvcndhcmQgcmVmZXJlbmNlcyB0byBzdWJzZXF1ZW50IHN1Yi0KKyAgICAgICBwYXR0ZXJucyAgb2YgIGFyb3VuZCAgMjAwLDAwMC4gIFJlcGVhdGVkICBmb3J3YXJkIHJlZmVyZW5jZXMgd2l0aCBmaXhlZAorICAgICAgIHVwcGVyIGxpbWl0cywgZm9yIGV4YW1wbGUsICg/Mil7MCwxMDB9IHdoZW4gc3VicGF0dGVybiBudW1iZXIgMiAgaXMgIHRvCisgICAgICAgdGhlICByaWdodCwgIGFyZSBpbmNsdWRlZCBpbiB0aGUgY291bnQuIFRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSBudW1iZXIKKyAgICAgICBvZiBiYWNrd2FyZCByZWZlcmVuY2VzLgorCisgICAgICAgVGhlIG1heGltdW0gbGVuZ3RoIG9mIG5hbWUgZm9yIGEgbmFtZWQgc3VicGF0dGVybiBpcyAzMiBjb2RlIHVuaXRzLCBhbmQKKyAgICAgICB0aGUgbWF4aW11bSBudW1iZXIgb2YgbmFtZWQgc3VicGF0dGVybnMgaXMgMTAwMDAuCisKKyAgICAgICBUaGUgIG1heGltdW0gIGxlbmd0aCAgb2YgIGEgIG5hbWUgIGluICBhICgqTUFSSyksICgqUFJVTkUpLCAoKlNLSVApLCBvcgorICAgICAgICgqVEhFTikgdmVyYiBpcyAyNTUgZm9yIHRoZSA4LWJpdCBsaWJyYXJ5IGFuZCA2NTUzNSBmb3IgdGhlIDE2LWJpdCAgYW5kCisgICAgICAgMzItYml0IGxpYnJhcmllcy4KKworCitBVVRIT1IKKworICAgICAgIFBoaWxpcCBIYXplbAorICAgICAgIFVuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKyAgICAgICBDYW1icmlkZ2UsIEVuZ2xhbmQuCisKKworUkVWSVNJT04KKworICAgICAgIExhc3QgdXBkYXRlZDogMDUgTm92ZW1iZXIgMjAxNQorICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworUENSRTJNQVRDSElORygzKSAgICAgICAgICAgTGlicmFyeSBGdW5jdGlvbnMgTWFudWFsICAgICAgICAgICBQQ1JFMk1BVENISU5HKDMpCisKKworCitOQU1FCisgICAgICAgUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisKK1BDUkUyIE1BVENISU5HIEFMR09SSVRITVMKKworICAgICAgIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB0d28gZGlmZmVyZW50IGFsZ29yaXRobXMgdGhhdCBhcmUgYXZhaWxhYmxlCisgICAgICAgaW4gUENSRTIgZm9yIG1hdGNoaW5nIGEgY29tcGlsZWQgcmVndWxhciAgZXhwcmVzc2lvbiAgYWdhaW5zdCAgYSAgZ2l2ZW4KKyAgICAgICBzdWJqZWN0ICBzdHJpbmcuICBUaGUgICJzdGFuZGFyZCIgIGFsZ29yaXRobSBpcyB0aGUgb25lIHByb3ZpZGVkIGJ5IHRoZQorICAgICAgIHBjcmUyX21hdGNoKCkgZnVuY3Rpb24uIFRoaXMgd29ya3MgaW4gdGhlIHNhbWUgYXMgIGFzICBQZXJsJ3MgIG1hdGNoaW5nCisgICAgICAgZnVuY3Rpb24sICBhbmQgIHByb3ZpZGUgYSBQZXJsLWNvbXBhdGlibGUgbWF0Y2hpbmcgb3BlcmF0aW9uLiBUaGUganVzdC0KKyAgICAgICBpbi10aW1lIChKSVQpIG9wdGltaXphdGlvbiB0aGF0IGlzIGRlc2NyaWJlZCBpbiB0aGUgcGNyZTJqaXQgZG9jdW1lbnRhLQorICAgICAgIHRpb24gaXMgY29tcGF0aWJsZSB3aXRoIHRoaXMgZnVuY3Rpb24uCisKKyAgICAgICBBbiBhbHRlcm5hdGl2ZSBhbGdvcml0aG0gaXMgcHJvdmlkZWQgYnkgdGhlIHBjcmUyX2RmYV9tYXRjaCgpIGZ1bmN0aW9uOworICAgICAgIGl0IG9wZXJhdGVzIGluIGEgZGlmZmVyZW50IHdheSwgYW5kIGlzIG5vdCBQZXJsLWNvbXBhdGlibGUuIFRoaXMgYWx0ZXItCisgICAgICAgbmF0aXZlICBoYXMgIGFkdmFudGFnZXMgIGFuZCAgZGlzYWR2YW50YWdlcyAgY29tcGFyZWQgd2l0aCB0aGUgc3RhbmRhcmQKKyAgICAgICBhbGdvcml0aG0sIGFuZCB0aGVzZSBhcmUgZGVzY3JpYmVkIGJlbG93LgorCisgICAgICAgV2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSB3YXkgaW4gd2hpY2ggYSBnaXZlbiBzdWJqZWN0IHN0cmluZyBjYW4KKyAgICAgICBtYXRjaCAgYSBwYXR0ZXJuLCB0aGUgdHdvIGFsZ29yaXRobXMgZ2l2ZSB0aGUgc2FtZSBhbnN3ZXIuIEEgZGlmZmVyZW5jZQorICAgICAgIGFyaXNlcywgaG93ZXZlciwgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgcG9zc2liaWxpdGllcy4gRm9yIGV4YW1wbGUsIGlmCisgICAgICAgdGhlIHBhdHRlcm4KKworICAgICAgICAgXjwuKj4KKworICAgICAgIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgc3RyaW5nCisKKyAgICAgICAgIDxzb21ldGhpbmc+IDxzb21ldGhpbmcgZWxzZT4gPHNvbWV0aGluZyBmdXJ0aGVyPgorCisgICAgICAgdGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIGFuc3dlcnMuIFRoZSBzdGFuZGFyZCBhbGdvcml0aG0gZmluZHMgb25seSBvbmUKKyAgICAgICBvZiB0aGVtLCB3aGVyZWFzIHRoZSBhbHRlcm5hdGl2ZSBhbGdvcml0aG0gZmluZHMgYWxsIHRocmVlLgorCisKK1JFR1VMQVIgRVhQUkVTU0lPTlMgQVMgVFJFRVMKKworICAgICAgIFRoZSBzZXQgb2Ygc3RyaW5ncyB0aGF0IGFyZSBtYXRjaGVkIGJ5IGEgcmVndWxhciBleHByZXNzaW9uIGNhbiBiZSByZXAtCisgICAgICAgcmVzZW50ZWQgIGFzICBhICB0cmVlIHN0cnVjdHVyZS4gQW4gdW5saW1pdGVkIHJlcGV0aXRpb24gaW4gdGhlIHBhdHRlcm4KKyAgICAgICBtYWtlcyB0aGUgdHJlZSBvZiBpbmZpbml0ZSBzaXplLCBidXQgaXQgaXMgc3RpbGwgYSB0cmVlLiAgTWF0Y2hpbmcgIHRoZQorICAgICAgIHBhdHRlcm4gIHRvIGEgZ2l2ZW4gc3ViamVjdCBzdHJpbmcgKGZyb20gYSBnaXZlbiBzdGFydGluZyBwb2ludCkgY2FuIGJlCisgICAgICAgdGhvdWdodCBvZiBhcyBhIHNlYXJjaCBvZiB0aGUgdHJlZS4gIFRoZXJlIGFyZSB0d28gIHdheXMgIHRvICBzZWFyY2ggIGEKKyAgICAgICB0cmVlOiAgZGVwdGgtZmlyc3QgIGFuZCAgYnJlYWR0aC1maXJzdCwgYW5kIHRoZXNlIGNvcnJlc3BvbmQgdG8gdGhlIHR3bworICAgICAgIG1hdGNoaW5nIGFsZ29yaXRobXMgcHJvdmlkZWQgYnkgUENSRTIuCisKKworVEhFIFNUQU5EQVJEIE1BVENISU5HIEFMR09SSVRITQorCisgICAgICAgSW4gdGhlIHRlcm1pbm9sb2d5IG9mIEplZmZyZXkgRnJpZWRsJ3MgYm9vayAiTWFzdGVyaW5nIFJlZ3VsYXIgIEV4cHJlcy0KKyAgICAgICBzaW9ucyIsICB0aGUgIHN0YW5kYXJkICBhbGdvcml0aG0gIGlzIGFuICJORkEgYWxnb3JpdGhtIi4gSXQgY29uZHVjdHMgYQorICAgICAgIGRlcHRoLWZpcnN0IHNlYXJjaCBvZiB0aGUgcGF0dGVybiB0cmVlLiBUaGF0IGlzLCBpdCAgcHJvY2VlZHMgIGFsb25nICBhCisgICAgICAgc2luZ2xlIHBhdGggdGhyb3VnaCB0aGUgdHJlZSwgY2hlY2tpbmcgdGhhdCB0aGUgc3ViamVjdCBtYXRjaGVzIHdoYXQgaXMKKyAgICAgICByZXF1aXJlZC4gV2hlbiB0aGVyZSBpcyBhIG1pc21hdGNoLCB0aGUgYWxnb3JpdGhtICB0cmllcyAgYW55ICBhbHRlcm5hLQorICAgICAgIHRpdmVzICBhdCAgdGhlICBjdXJyZW50IHBvaW50LCBhbmQgaWYgdGhleSBhbGwgZmFpbCwgaXQgYmFja3MgdXAgdG8gdGhlCisgICAgICAgcHJldmlvdXMgYnJhbmNoIHBvaW50IGluIHRoZSAgdHJlZSwgIGFuZCAgdHJpZXMgIHRoZSAgbmV4dCAgYWx0ZXJuYXRpdmUKKyAgICAgICBicmFuY2ggIGF0ICB0aGF0ICBsZXZlbC4gIFRoaXMgb2Z0ZW4gaW52b2x2ZXMgYmFja2luZyB1cCAobW92aW5nIHRvIHRoZQorICAgICAgIGxlZnQpIGluIHRoZSBzdWJqZWN0IHN0cmluZyBhcyB3ZWxsLiAgVGhlICBvcmRlciAgaW4gIHdoaWNoICByZXBldGl0aW9uCisgICAgICAgYnJhbmNoZXMgIGFyZSAgdHJpZWQgIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGdyZWVkeSBvciB1bmdyZWVkeSBuYXR1cmUgb2YKKyAgICAgICB0aGUgcXVhbnRpZmllci4KKworICAgICAgIElmIGEgbGVhZiBub2RlIGlzIHJlYWNoZWQsIGEgbWF0Y2hpbmcgc3RyaW5nIGhhcyAgYmVlbiAgZm91bmQsICBhbmQgIGF0CisgICAgICAgdGhhdCAgcG9pbnQgdGhlIGFsZ29yaXRobSBzdG9wcy4gVGh1cywgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwb3NzaS0KKyAgICAgICBibGUgbWF0Y2gsIHRoaXMgYWxnb3JpdGhtIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGl0IGZpbmRzLiAgV2hldGhlcgorICAgICAgIHRoaXMgIGlzIHRoZSBzaG9ydGVzdCwgdGhlIGxvbmdlc3QsIG9yIHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aCBkZXBlbmRzCisgICAgICAgb24gdGhlIHdheSB0aGUgZ3JlZWR5IGFuZCB1bmdyZWVkeSByZXBldGl0aW9uIHF1YW50aWZpZXJzIGFyZSBzcGVjaWZpZWQKKyAgICAgICBpbiB0aGUgcGF0dGVybi4KKworICAgICAgIEJlY2F1c2UgIGl0ICBlbmRzICB1cCAgd2l0aCBhIHNpbmdsZSBwYXRoIHRocm91Z2ggdGhlIHRyZWUsIGl0IGlzIHJlbGEtCisgICAgICAgdGl2ZWx5IHN0cmFpZ2h0Zm9yd2FyZCBmb3IgdGhpcyBhbGdvcml0aG0gdG8ga2VlcCAgdHJhY2sgIG9mICB0aGUgIHN1Yi0KKyAgICAgICBzdHJpbmdzICB0aGF0ICBhcmUgIG1hdGNoZWQgIGJ5IHBvcnRpb25zIG9mIHRoZSBwYXR0ZXJuIGluIHBhcmVudGhlc2VzLgorICAgICAgIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGFuZCBiYWNrIHJlZmVyZW5jZXMuCisKKworVEhFIEFMVEVSTkFUSVZFIE1BVENISU5HIEFMR09SSVRITQorCisgICAgICAgVGhpcyBhbGdvcml0aG0gY29uZHVjdHMgYSBicmVhZHRoLWZpcnN0IHNlYXJjaCBvZiAgdGhlICB0cmVlLiAgU3RhcnRpbmcKKyAgICAgICBmcm9tICB0aGUgIGZpcnN0ICBtYXRjaGluZyAgcG9pbnQgIGluIHRoZSBzdWJqZWN0LCBpdCBzY2FucyB0aGUgc3ViamVjdAorICAgICAgIHN0cmluZyBmcm9tIGxlZnQgdG8gcmlnaHQsIG9uY2UsIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIsIGFuZCBhcyBpdCBkb2VzCisgICAgICAgdGhpcywgIGl0IHJlbWVtYmVycyBhbGwgdGhlIHBhdGhzIHRocm91Z2ggdGhlIHRyZWUgdGhhdCByZXByZXNlbnQgdmFsaWQKKyAgICAgICBtYXRjaGVzLiBJbiBGcmllZGwncyB0ZXJtaW5vbG9neSwgdGhpcyBpcyBhIGtpbmQgIG9mICAiREZBICBhbGdvcml0aG0iLAorICAgICAgIHRob3VnaCAgaXQgaXMgbm90IGltcGxlbWVudGVkIGFzIGEgdHJhZGl0aW9uYWwgZmluaXRlIHN0YXRlIG1hY2hpbmUgKGl0CisgICAgICAga2VlcHMgbXVsdGlwbGUgc3RhdGVzIGFjdGl2ZSBzaW11bHRhbmVvdXNseSkuCisKKyAgICAgICBBbHRob3VnaCB0aGUgZ2VuZXJhbCBwcmluY2lwbGUgb2YgdGhpcyBtYXRjaGluZyBhbGdvcml0aG0gIGlzICB0aGF0ICBpdAorICAgICAgIHNjYW5zICB0aGUgc3ViamVjdCBzdHJpbmcgb25seSBvbmNlLCB3aXRob3V0IGJhY2t0cmFja2luZywgdGhlcmUgaXMgb25lCisgICAgICAgZXhjZXB0aW9uOiB3aGVuIGEgbG9va2Fyb3VuZCBhc3NlcnRpb24gaXMgZW5jb3VudGVyZWQsICB0aGUgIGNoYXJhY3RlcnMKKyAgICAgICBmb2xsb3dpbmcgIG9yICBwcmVjZWRpbmcgIHRoZSAgY3VycmVudCAgcG9pbnQgIGhhdmUgdG8gYmUgaW5kZXBlbmRlbnRseQorICAgICAgIGluc3BlY3RlZC4KKworICAgICAgIFRoZSBzY2FuIGNvbnRpbnVlcyB1bnRpbCBlaXRoZXIgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCBpcyAgcmVhY2hlZCwgIG9yCisgICAgICAgdGhlcmUgIGFyZSAgbm8gbW9yZSB1bnRlcm1pbmF0ZWQgcGF0aHMuIEF0IHRoaXMgcG9pbnQsIHRlcm1pbmF0ZWQgcGF0aHMKKyAgICAgICByZXByZXNlbnQgdGhlIGRpZmZlcmVudCBtYXRjaGluZyBwb3NzaWJpbGl0aWVzIChpZiB0aGVyZSBhcmUgbm9uZSwgIHRoZQorICAgICAgIG1hdGNoICBoYXMgIGZhaWxlZCkuICAgVGh1cywgIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcG9zc2libGUgbWF0Y2gsCisgICAgICAgdGhpcyBhbGdvcml0aG0gZmluZHMgYWxsIG9mIHRoZW0sIGFuZCBpbiBwYXJ0aWN1bGFyLCBpdCBmaW5kcyB0aGUgbG9uZy0KKyAgICAgICBlc3QuICBUaGUgIG1hdGNoZXMgYXJlIHJldHVybmVkIGluIGRlY3JlYXNpbmcgb3JkZXIgb2YgbGVuZ3RoLiBUaGVyZSBpcworICAgICAgIGFuIG9wdGlvbiB0byBzdG9wIHRoZSBhbGdvcml0aG0gYWZ0ZXIgdGhlIGZpcnN0IG1hdGNoICh3aGljaCBpcyAgbmVjZXMtCisgICAgICAgc2FyaWx5IHRoZSBzaG9ydGVzdCkgaXMgZm91bmQuCisKKyAgICAgICBOb3RlIHRoYXQgYWxsIHRoZSBtYXRjaGVzIHRoYXQgYXJlIGZvdW5kIHN0YXJ0IGF0IHRoZSBzYW1lIHBvaW50IGluIHRoZQorICAgICAgIHN1YmplY3QuIElmIHRoZSBwYXR0ZXJuCisKKyAgICAgICAgIGNhdChlcihwaWxsYXIpPyk/CisKKyAgICAgICBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIHN0cmluZyAidGhlIGNhdGVycGlsbGFyIGNhdGNobWVudCIsICB0aGUgIHJlc3VsdAorICAgICAgIGlzICB0aGUgIHRocmVlICBzdHJpbmdzICJjYXRlcnBpbGxhciIsICJjYXRlciIsIGFuZCAiY2F0IiB0aGF0IHN0YXJ0IGF0CisgICAgICAgdGhlIGZpZnRoIGNoYXJhY3RlciBvZiB0aGUgc3ViamVjdC4gVGhlIGFsZ29yaXRobSAgZG9lcyAgbm90ICBhdXRvbWF0aS0KKyAgICAgICBjYWxseSBtb3ZlIG9uIHRvIGZpbmQgbWF0Y2hlcyB0aGF0IHN0YXJ0IGF0IGxhdGVyIHBvc2l0aW9ucy4KKworICAgICAgIFBDUkUyJ3MgImF1dG8tcG9zc2Vzc2lmaWNhdGlvbiIgb3B0aW1pemF0aW9uIHVzdWFsbHkgYXBwbGllcyB0byBjaGFyYWMtCisgICAgICAgdGVyIHJlcGVhdHMgYXQgdGhlIGVuZCBvZiBhIHBhdHRlcm4gKGFzIHdlbGwgYXMgaW50ZXJuYWxseSkuIEZvciAgZXhhbS0KKyAgICAgICBwbGUsIHRoZSBwYXR0ZXJuICJhXGQrIiBpcyBjb21waWxlZCBhcyBpZiBpdCB3ZXJlICJhXGQrKyIgYmVjYXVzZSB0aGVyZQorICAgICAgIGlzIG5vIHBvaW50IGV2ZW4gY29uc2lkZXJpbmcgdGhlIHBvc3NpYmlsaXR5IG9mIGJhY2t0cmFja2luZyAgaW50byAgdGhlCisgICAgICAgcmVwZWF0ZWQgIGRpZ2l0cy4gIEZvciAgREZBIG1hdGNoaW5nLCB0aGlzIG1lYW5zIHRoYXQgb25seSBvbmUgcG9zc2libGUKKyAgICAgICBtYXRjaCBpcyBmb3VuZC4gSWYgeW91IHJlYWxseSBkbyB3YW50IG11bHRpcGxlIG1hdGNoZXMgaW4gIHN1Y2ggIGNhc2VzLAorICAgICAgIGVpdGhlciAgdXNlICBhbiB1bmdyZWVkeSByZXBlYXQgKCJhXGQrPyIpIG9yIHNldCB0aGUgUENSRTJfTk9fQVVUT19QT1MtCisgICAgICAgU0VTUyBvcHRpb24gd2hlbiBjb21waWxpbmcuCisKKyAgICAgICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgZmVhdHVyZXMgb2YgUENSRTIgcmVndWxhciAgZXhwcmVzc2lvbnMgIHRoYXQgIGFyZQorICAgICAgIG5vdCAgc3VwcG9ydGVkICBieSB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgYWxnb3JpdGhtLiBUaGV5IGFyZSBhcyBmb2wtCisgICAgICAgbG93czoKKworICAgICAgIDEuIEJlY2F1c2UgdGhlIGFsZ29yaXRobSBmaW5kcyBhbGwgIHBvc3NpYmxlICBtYXRjaGVzLCAgdGhlICBncmVlZHkgIG9yCisgICAgICAgdW5ncmVlZHkgIG5hdHVyZSAgb2YgIHJlcGV0aXRpb24gcXVhbnRpZmllcnMgaXMgbm90IHJlbGV2YW50ICh0aG91Z2ggaXQKKyAgICAgICBtYXkgYWZmZWN0IGF1dG8tcG9zc2Vzc2lmaWNhdGlvbiwgYXMganVzdCBkZXNjcmliZWQpLiBEdXJpbmcgIG1hdGNoaW5nLAorICAgICAgIGdyZWVkeSAgYW5kICB1bmdyZWVkeSAgcXVhbnRpZmllcnMgYXJlIHRyZWF0ZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkuCisgICAgICAgSG93ZXZlciwgcG9zc2Vzc2l2ZSBxdWFudGlmaWVycyBjYW4gbWFrZSBhIGRpZmZlcmVuY2Ugd2hlbiB3aGF0IGZvbGxvd3MKKyAgICAgICBjb3VsZCAgYWxzbyAgbWF0Y2ggIHdoYXQgIGlzICBxdWFudGlmaWVkLCBmb3IgZXhhbXBsZSBpbiBhIHBhdHRlcm4gbGlrZQorICAgICAgIHRoaXM6CisKKyAgICAgICAgIF5hKytcdyEKKworICAgICAgIFRoaXMgcGF0dGVybiBtYXRjaGVzICJhYWFiISIgYnV0IG5vdCAiYWFhISIsIHdoaWNoIHdvdWxkIGJlIG1hdGNoZWQgIGJ5CisgICAgICAgYSAgbm9uLXBvc3Nlc3NpdmUgcXVhbnRpZmllci4gU2ltaWxhcmx5LCBpZiBhbiBhdG9taWMgZ3JvdXAgaXMgcHJlc2VudCwKKyAgICAgICBpdCBpcyBtYXRjaGVkIGFzIGlmIGl0IHdlcmUgYSBzdGFuZGFsb25lIHBhdHRlcm4gYXQgdGhlIGN1cnJlbnQgIHBvaW50LAorICAgICAgIGFuZCAgdGhlICBsb25nZXN0IG1hdGNoIGlzIHRoZW4gImxvY2tlZCBpbiIgZm9yIHRoZSByZXN0IG9mIHRoZSBvdmVyYWxsCisgICAgICAgcGF0dGVybi4KKworICAgICAgIDIuIFdoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxlIHBhdGhzIHRocm91Z2ggdGhlIHRyZWUgc2ltdWx0YW5lb3VzbHksIGl0CisgICAgICAgaXMgIG5vdCAgc3RyYWlnaHRmb3J3YXJkICB0byAga2VlcCB0cmFjayBvZiBjYXB0dXJlZCBzdWJzdHJpbmdzIGZvciB0aGUKKyAgICAgICBkaWZmZXJlbnQgbWF0Y2hpbmcgcG9zc2liaWxpdGllcywgYW5kIFBDUkUyJ3MgIGltcGxlbWVudGF0aW9uICBvZiAgdGhpcworICAgICAgIGFsZ29yaXRobSBkb2VzIG5vdCBhdHRlbXB0IHRvIGRvIHRoaXMuIFRoaXMgbWVhbnMgdGhhdCBubyBjYXB0dXJlZCBzdWItCisgICAgICAgc3RyaW5ncyBhcmUgYXZhaWxhYmxlLgorCisgICAgICAgMy4gQmVjYXVzZSBubyBzdWJzdHJpbmdzIGFyZSBjYXB0dXJlZCwgYmFjayByZWZlcmVuY2VzIHdpdGhpbiB0aGUgIHBhdC0KKyAgICAgICB0ZXJuIGFyZSBub3Qgc3VwcG9ydGVkLCBhbmQgY2F1c2UgZXJyb3JzIGlmIGVuY291bnRlcmVkLgorCisgICAgICAgNC4gIEZvciAgdGhlIHNhbWUgcmVhc29uLCBjb25kaXRpb25hbCBleHByZXNzaW9ucyB0aGF0IHVzZSBhIGJhY2tyZWZlci0KKyAgICAgICBlbmNlIGFzIHRoZSBjb25kaXRpb24gb3IgdGVzdCBmb3IgYSBzcGVjaWZpYyBncm91cCAgcmVjdXJzaW9uICBhcmUgIG5vdAorICAgICAgIHN1cHBvcnRlZC4KKworICAgICAgIDUuICBCZWNhdXNlICBtYW55ICBwYXRocyAgdGhyb3VnaCB0aGUgdHJlZSBtYXkgYmUgYWN0aXZlLCB0aGUgXEsgZXNjYXBlCisgICAgICAgc2VxdWVuY2UsIHdoaWNoIHJlc2V0cyB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoIHdoZW4gZW5jb3VudGVyZWQgKGJ1dCBtYXkKKyAgICAgICBiZSAgb24gIHNvbWUgIHBhdGhzICBhbmQgbm90IG9uIG90aGVycyksIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhdXNlcyBhbgorICAgICAgIGVycm9yIGlmIGVuY291bnRlcmVkLgorCisgICAgICAgNi4gQ2FsbG91dHMgYXJlIHN1cHBvcnRlZCwgYnV0IHRoZSB2YWx1ZSBvZiB0aGUgIGNhcHR1cmVfdG9wICBmaWVsZCAgaXMKKyAgICAgICBhbHdheXMgMSwgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgY2FwdHVyZV9sYXN0IGZpZWxkIGlzIGFsd2F5cyAwLgorCisgICAgICAgNy4gIFRoZSAgXEMgIGVzY2FwZSAgc2VxdWVuY2UsIHdoaWNoIChpbiB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtKSBhbHdheXMKKyAgICAgICBtYXRjaGVzIGEgc2luZ2xlIGNvZGUgdW5pdCwgZXZlbiBpbiBhIFVURiBtb2RlLCAgaXMgIG5vdCAgc3VwcG9ydGVkICBpbgorICAgICAgIHRoZXNlICBtb2RlcywgIGJlY2F1c2UgdGhlIGFsdGVybmF0aXZlIGFsZ29yaXRobSBtb3ZlcyB0aHJvdWdoIHRoZSBzdWItCisgICAgICAgamVjdCBzdHJpbmcgb25lIGNoYXJhY3RlciAobm90IGNvZGUgdW5pdCkgYXQgYSAgdGltZSwgIGZvciAgYWxsICBhY3RpdmUKKyAgICAgICBwYXRocyB0aHJvdWdoIHRoZSB0cmVlLgorCisgICAgICAgOC4gIEV4Y2VwdCBmb3IgKCpGQUlMKSwgdGhlIGJhY2t0cmFja2luZyBjb250cm9sIHZlcmJzIHN1Y2ggYXMgKCpQUlVORSkKKyAgICAgICBhcmUgbm90IHN1cHBvcnRlZC4gKCpGQUlMKSBpcyBzdXBwb3J0ZWQsIGFuZCAgYmVoYXZlcyAgbGlrZSAgYSAgZmFpbGluZworICAgICAgIG5lZ2F0aXZlIGFzc2VydGlvbi4KKworCitBRFZBTlRBR0VTIE9GIFRIRSBBTFRFUk5BVElWRSBBTEdPUklUSE0KKworICAgICAgIFVzaW5nICB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgYWxnb3JpdGhtIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgYWR2YW4tCisgICAgICAgdGFnZXM6CisKKyAgICAgICAxLiBBbGwgcG9zc2libGUgbWF0Y2hlcyAoYXQgYSBzaW5nbGUgcG9pbnQgaW4gdGhlIHN1YmplY3QpIGFyZSBhdXRvbWF0LQorICAgICAgIGljYWxseSAgZm91bmQsICBhbmQgIGluIHBhcnRpY3VsYXIsIHRoZSBsb25nZXN0IG1hdGNoIGlzIGZvdW5kLiBUbyBmaW5kCisgICAgICAgbW9yZSB0aGFuIG9uZSBtYXRjaCB1c2luZyB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtLCB5b3UgaGF2ZSB0byBkbyBrbHVkZ3kKKyAgICAgICB0aGluZ3Mgd2l0aCBjYWxsb3V0cy4KKworICAgICAgIDIuICBCZWNhdXNlICB0aGUgIGFsdGVybmF0aXZlICBhbGdvcml0aG0gIHNjYW5zIHRoZSBzdWJqZWN0IHN0cmluZyBqdXN0CisgICAgICAgb25jZSwgYW5kIG5ldmVyIG5lZWRzIHRvIGJhY2t0cmFjayAoZXhjZXB0IGZvciBsb29rYmVoaW5kcyksIGl0IGlzIHBvcy0KKyAgICAgICBzaWJsZSAgdG8gIHBhc3MgIHZlcnkgIGxvbmcgc3ViamVjdCBzdHJpbmdzIHRvIHRoZSBtYXRjaGluZyBmdW5jdGlvbiBpbgorICAgICAgIHNldmVyYWwgcGllY2VzLCBjaGVja2luZyBmb3IgcGFydGlhbCBtYXRjaGluZyBlYWNoIHRpbWUuIEFsdGhvdWdoIGl0IGlzCisgICAgICAgYWxzbyAgcG9zc2libGUgIHRvICBkbyAgbXVsdGktc2VnbWVudCBtYXRjaGluZyB1c2luZyB0aGUgc3RhbmRhcmQgYWxnby0KKyAgICAgICByaXRobSwgYnkgcmV0YWluaW5nIHBhcnRpYWxseSBtYXRjaGVkIHN1YnN0cmluZ3MsIGl0ICBpcyAgbW9yZSAgY29tcGxpLQorICAgICAgIGNhdGVkLiBUaGUgcGNyZTJwYXJ0aWFsIGRvY3VtZW50YXRpb24gZ2l2ZXMgZGV0YWlscyBvZiBwYXJ0aWFsIG1hdGNoaW5nCisgICAgICAgYW5kIGRpc2N1c3NlcyBtdWx0aS1zZWdtZW50IG1hdGNoaW5nLgorCisKK0RJU0FEVkFOVEFHRVMgT0YgVEhFIEFMVEVSTkFUSVZFIEFMR09SSVRITQorCisgICAgICAgVGhlIGFsdGVybmF0aXZlIGFsZ29yaXRobSBzdWZmZXJzIGZyb20gYSBudW1iZXIgb2YgZGlzYWR2YW50YWdlczoKKworICAgICAgIDEuIEl0IGlzIHN1YnN0YW50aWFsbHkgc2xvd2VyIHRoYW4gIHRoZSAgc3RhbmRhcmQgIGFsZ29yaXRobS4gIFRoaXMgIGlzCisgICAgICAgcGFydGx5ICBiZWNhdXNlICBpdCBoYXMgdG8gc2VhcmNoIGZvciBhbGwgcG9zc2libGUgbWF0Y2hlcywgYnV0IGlzIGFsc28KKyAgICAgICBiZWNhdXNlIGl0IGlzIGxlc3Mgc3VzY2VwdGlibGUgdG8gb3B0aW1pemF0aW9uLgorCisgICAgICAgMi4gQ2FwdHVyaW5nIHBhcmVudGhlc2VzIGFuZCBiYWNrIHJlZmVyZW5jZXMgYXJlIG5vdCBzdXBwb3J0ZWQuCisKKyAgICAgICAzLiBBbHRob3VnaCBhdG9taWMgZ3JvdXBzIGFyZSBzdXBwb3J0ZWQsIHRoZWlyIHVzZSBkb2VzIG5vdCBwcm92aWRlIHRoZQorICAgICAgIHBlcmZvcm1hbmNlIGFkdmFudGFnZSB0aGF0IGl0IGRvZXMgZm9yIHRoZSBzdGFuZGFyZCBhbGdvcml0aG0uCisKKworQVVUSE9SCisKKyAgICAgICBQaGlsaXAgSGF6ZWwKKyAgICAgICBVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCisgICAgICAgQ2FtYnJpZGdlLCBFbmdsYW5kLgorCisKK1JFVklTSU9OCisKKyAgICAgICBMYXN0IHVwZGF0ZWQ6IDI5IFNlcHRlbWJlciAyMDE0CisgICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTQgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitQQ1JFMlBBUlRJQUwoMykgICAgICAgICAgICBMaWJyYXJ5IEZ1bmN0aW9ucyBNYW51YWwgICAgICAgICAgICBQQ1JFMlBBUlRJQUwoMykKKworCisKK05BTUUKKyAgICAgICBQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zCisKK1BBUlRJQUwgTUFUQ0hJTkcgSU4gUENSRTIKKworICAgICAgIEluICBub3JtYWwgIHVzZSAgb2YgIFBDUkUyLCAgaWYgIHRoZSBzdWJqZWN0IHN0cmluZyB0aGF0IGlzIHBhc3NlZCB0byBhCisgICAgICAgbWF0Y2hpbmcgZnVuY3Rpb24gbWF0Y2hlcyBhcyBmYXIgYXMgaXQgZ29lcywgYnV0IGlzIHRvbyBzaG9ydCB0byAgbWF0Y2gKKyAgICAgICB0aGUgIGVudGlyZSBwYXR0ZXJuLCBQQ1JFMl9FUlJPUl9OT01BVENIIGlzIHJldHVybmVkLiBUaGVyZSBhcmUgY2lyY3VtLQorICAgICAgIHN0YW5jZXMgd2hlcmUgaXQgbWlnaHQgYmUgaGVscGZ1bCB0byBkaXN0aW5ndWlzaCB0aGlzIGNhc2UgIGZyb20gIG90aGVyCisgICAgICAgY2FzZXMgaW4gd2hpY2ggdGhlcmUgaXMgbm8gbWF0Y2guCisKKyAgICAgICBDb25zaWRlciwgZm9yIGV4YW1wbGUsIGFuIGFwcGxpY2F0aW9uIHdoZXJlIGEgaHVtYW4gaXMgcmVxdWlyZWQgdG8gdHlwZQorICAgICAgIGluIGRhdGEgZm9yIGEgZmllbGQgd2l0aCBzcGVjaWZpYyBmb3JtYXR0aW5nIHJlcXVpcmVtZW50cy4gIEFuICBleGFtcGxlCisgICAgICAgbWlnaHQgYmUgYSBkYXRlIGluIHRoZSBmb3JtIGRkbW1teXksIGRlZmluZWQgYnkgdGhpcyBwYXR0ZXJuOgorCisgICAgICAgICBeXGQ/XGQoamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpXGRcZCQKKworICAgICAgIElmIHRoZSBhcHBsaWNhdGlvbiBzZWVzIHRoZSB1c2VyJ3Mga2V5c3Ryb2tlcyBvbmUgYnkgb25lLCBhbmQgY2FuIGNoZWNrCisgICAgICAgdGhhdCB3aGF0IGhhcyBiZWVuIHR5cGVkIHNvIGZhciBpcyBwb3RlbnRpYWxseSB2YWxpZCwgIGl0ICBpcyAgYWJsZSAgdG8KKyAgICAgICByYWlzZSAgYW4gIGVycm9yICBhcyAgc29vbiAgYXMgIGEgIG1pc3Rha2UgIGlzIG1hZGUsIGJ5IGJlZXBpbmcgYW5kIG5vdAorICAgICAgIHJlZmxlY3RpbmcgdGhlIGNoYXJhY3RlciB0aGF0IGhhcyBiZWVuIHR5cGVkLCBmb3IgZXhhbXBsZS4gVGhpcyBpbW1lZGktCisgICAgICAgYXRlICBmZWVkYmFjayBpcyBsaWtlbHkgdG8gYmUgYSBiZXR0ZXIgdXNlciBpbnRlcmZhY2UgdGhhbiBhIGNoZWNrIHRoYXQKKyAgICAgICBpcyBkZWxheWVkIHVudGlsIHRoZSBlbnRpcmUgc3RyaW5nIGhhcyBiZWVuIGVudGVyZWQuICBQYXJ0aWFsICBtYXRjaGluZworICAgICAgIGNhbiAgYWxzbyBiZSB1c2VmdWwgd2hlbiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgdmVyeSBsb25nIGFuZCBpcyBub3QgYWxsCisgICAgICAgYXZhaWxhYmxlIGF0IG9uY2UuCisKKyAgICAgICBQQ1JFMiBzdXBwb3J0cyBwYXJ0aWFsIG1hdGNoaW5nIGJ5IG1lYW5zIG9mIHRoZSBQQ1JFMl9QQVJUSUFMX1NPRlQgIGFuZAorICAgICAgIFBDUkUyX1BBUlRJQUxfSEFSRCAgb3B0aW9ucywgIHdoaWNoICBjYW4gYmUgc2V0IHdoZW4gY2FsbGluZyBhIG1hdGNoaW5nCisgICAgICAgZnVuY3Rpb24uICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gb3B0aW9ucyBpcyB3aGV0aGVyIG9yICBub3QgIGEKKyAgICAgICBwYXJ0aWFsIG1hdGNoIGlzIHByZWZlcnJlZCB0byBhbiBhbHRlcm5hdGl2ZSBjb21wbGV0ZSBtYXRjaCwgdGhvdWdoIHRoZQorICAgICAgIGRldGFpbHMgZGlmZmVyIGJldHdlZW4gdGhlIHR3byB0eXBlcyAgb2YgIG1hdGNoaW5nICBmdW5jdGlvbi4gIElmICBib3RoCisgICAgICAgb3B0aW9ucyBhcmUgc2V0LCBQQ1JFMl9QQVJUSUFMX0hBUkQgdGFrZXMgcHJlY2VkZW5jZS4KKworICAgICAgIElmICB5b3UgIHdhbnQgdG8gdXNlIHBhcnRpYWwgbWF0Y2hpbmcgd2l0aCBqdXN0LWluLXRpbWUgb3B0aW1pemVkIGNvZGUsCisgICAgICAgeW91IG11c3QgY2FsbCBwY3JlMl9qaXRfY29tcGlsZSgpIHdpdGggb25lIG9yIGJvdGggb2YgdGhlc2Ugb3B0aW9uczoKKworICAgICAgICAgUENSRTJfSklUX1BBUlRJQUxfU09GVAorICAgICAgICAgUENSRTJfSklUX1BBUlRJQUxfSEFSRAorCisgICAgICAgUENSRTJfSklUX0NPTVBMRVRFIHNob3VsZCBhbHNvIGJlIHNldCBpZiB5b3UgYXJlIGdvaW5nIHRvIHJ1biAgbm9uLXBhci0KKyAgICAgICB0aWFsICBtYXRjaGVzICBvbiB0aGUgc2FtZSBwYXR0ZXJuLiBJZiB0aGUgYXBwcm9wcmlhdGUgSklUIG1vZGUgaGFzIG5vdAorICAgICAgIGJlZW4gY29tcGlsZWQsIGludGVycHJldGl2ZSBtYXRjaGluZyBjb2RlIGlzIHVzZWQuCisKKyAgICAgICBTZXR0aW5nIGEgcGFydGlhbCBtYXRjaGluZyBvcHRpb24gIGRpc2FibGVzICB0d28gIG9mICBQQ1JFMidzICBzdGFuZGFyZAorICAgICAgIG9wdGltaXphdGlvbnMuIFBDUkUyIHJlbWVtYmVycyB0aGUgbGFzdCBsaXRlcmFsIGNvZGUgdW5pdCBpbiBhIHBhdHRlcm4sCisgICAgICAgYW5kIGFiYW5kb25zIG1hdGNoaW5nIGltbWVkaWF0ZWx5IGlmIGl0IGlzIG5vdCBwcmVzZW50IGluICB0aGUgIHN1YmplY3QKKyAgICAgICBzdHJpbmcuICBUaGlzICBvcHRpbWl6YXRpb24gIGNhbm5vdCAgYmUgIHVzZWQgZm9yIGEgc3ViamVjdCBzdHJpbmcgdGhhdAorICAgICAgIG1pZ2h0IG1hdGNoIG9ubHkgcGFydGlhbGx5LiBQQ1JFMiBhbHNvIGtub3dzIHRoZSBtaW5pbXVtICBsZW5ndGggIG9mICBhCisgICAgICAgbWF0Y2hpbmcgIHN0cmluZywgIGFuZCAgZG9lcyBub3QgYm90aGVyIHRvIHJ1biB0aGUgbWF0Y2hpbmcgZnVuY3Rpb24gb24KKyAgICAgICBzaG9ydGVyIHN0cmluZ3MuIFRoaXMgb3B0aW1pemF0aW9uIGlzIGFsc28gZGlzYWJsZWQgZm9yIHBhcnRpYWwgIG1hdGNoLQorICAgICAgIGluZy4KKworCitQQVJUSUFMIE1BVENISU5HIFVTSU5HIHBjcmUyX21hdGNoKCkKKworICAgICAgIEEgIHBhcnRpYWwgIG1hdGNoIG9jY3VycyBkdXJpbmcgYSBjYWxsIHRvIHBjcmUyX21hdGNoKCkgd2hlbiB0aGUgZW5kIG9mCisgICAgICAgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIHJlYWNoZWQgc3VjY2Vzc2Z1bGx5LCBidXQgIG1hdGNoaW5nICBjYW5ub3QgIGNvbi0KKyAgICAgICB0aW51ZSBiZWNhdXNlIG1vcmUgY2hhcmFjdGVycyBhcmUgbmVlZGVkLiBIb3dldmVyLCBhdCBsZWFzdCBvbmUgY2hhcmFjLQorICAgICAgIHRlciBpbiB0aGUgc3ViamVjdCBtdXN0IGhhdmUgYmVlbiBpbnNwZWN0ZWQuIFRoaXMgIGNoYXJhY3RlciAgbmVlZCAgbm90CisgICAgICAgZm9ybSBwYXJ0IG9mIHRoZSBmaW5hbCBtYXRjaGVkIHN0cmluZzsgbG9va2JlaGluZCBhc3NlcnRpb25zIGFuZCB0aGUgXEsKKyAgICAgICBlc2NhcGUgc2VxdWVuY2UgcHJvdmlkZSB3YXlzIG9mIGluc3BlY3RpbmcgY2hhcmFjdGVycyBiZWZvcmUgdGhlICBzdGFydAorICAgICAgIG9mICBhIG1hdGNoZWQgc3RyaW5nLiBUaGUgcmVxdWlyZW1lbnQgZm9yIGluc3BlY3RpbmcgYXQgbGVhc3Qgb25lIGNoYXItCisgICAgICAgYWN0ZXIgZXhpc3RzIGJlY2F1c2UgYW4gZW1wdHkgc3RyaW5nIGNhbiAgYWx3YXlzICBiZSAgbWF0Y2hlZDsgIHdpdGhvdXQKKyAgICAgICBzdWNoICBhICByZXN0cmljdGlvbiAgdGhlcmUgd291bGQgYWx3YXlzIGJlIGEgcGFydGlhbCBtYXRjaCBvZiBhbiBlbXB0eQorICAgICAgIHN0cmluZyBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0LgorCisgICAgICAgV2hlbiBhIHBhcnRpYWwgbWF0Y2ggaXMgcmV0dXJuZWQsIHRoZSBmaXJzdCB0d28gZWxlbWVudHMgaW4gdGhlIG92ZWN0b3IKKyAgICAgICBwb2ludCB0byB0aGUgcG9ydGlvbiBvZiB0aGUgc3ViamVjdCB0aGF0IHdhcyBtYXRjaGVkLCBidXQgdGhlIHZhbHVlcyBpbgorICAgICAgIHRoZSByZXN0IG9mIHRoZSBvdmVjdG9yIGFyZSB1bmRlZmluZWQuIFRoZSBhcHBlYXJhbmNlIG9mIFxLIGluIHRoZSBwYXQtCisgICAgICAgdGVybiBoYXMgbm8gZWZmZWN0IGZvciBhIHBhcnRpYWwgbWF0Y2guIENvbnNpZGVyIHRoaXMgcGF0dGVybjoKKworICAgICAgICAgL2FiY1xLMTIzLworCisgICAgICAgSWYgaXQgaXMgbWF0Y2hlZCBhZ2FpbnN0ICI0NTZhYmMxMjN4eXoiIHRoZSByZXN1bHQgaXMgYSBjb21wbGV0ZSBtYXRjaCwKKyAgICAgICBhbmQgdGhlIG92ZWN0b3IgZGVmaW5lcyB0aGUgbWF0Y2hlZCBzdHJpbmcgYXMgIjEyMyIsIGJlY2F1c2UgXEsgIHJlc2V0cworICAgICAgIHRoZSAgInN0YXJ0ICBvZiAgbWF0Y2giIHBvaW50LiBIb3dldmVyLCBpZiBhIHBhcnRpYWwgbWF0Y2ggaXMgcmVxdWVzdGVkCisgICAgICAgYW5kIHRoZSBzdWJqZWN0IHN0cmluZyBpcyAiNDU2YWJjMTIiLCBhIHBhcnRpYWwgbWF0Y2ggaXMgZm91bmQgZm9yICB0aGUKKyAgICAgICBzdHJpbmcgICJhYmMxMiIsICBiZWNhdXNlICBhbGwgdGhlc2UgY2hhcmFjdGVycyBhcmUgbmVlZGVkIGZvciBhIHN1YnNlLQorICAgICAgIHF1ZW50IHJlLW1hdGNoIHdpdGggYWRkaXRpb25hbCBjaGFyYWN0ZXJzLgorCisgICAgICAgV2hhdCBoYXBwZW5zIHdoZW4gYSBwYXJ0aWFsIG1hdGNoIGlzIGlkZW50aWZpZWQgZGVwZW5kcyBvbiB3aGljaCBvZiB0aGUKKyAgICAgICB0d28gcGFydGlhbCBtYXRjaGluZyBvcHRpb25zIGFyZSBzZXQuCisKKyAgIFBDUkUyX1BBUlRJQUxfU09GVCBXSVRIIHBjcmUyX21hdGNoKCkKKworICAgICAgIElmICBQQ1JFMl9QQVJUSUFMX1NPRlQgIGlzICBzZXQgd2hlbiBwY3JlMl9tYXRjaCgpIGlkZW50aWZpZXMgYSBwYXJ0aWFsCisgICAgICAgbWF0Y2gsIHRoZSBwYXJ0aWFsIG1hdGNoIGlzIHJlbWVtYmVyZWQsIGJ1dCBtYXRjaGluZyBjb250aW51ZXMgYXMgIG5vci0KKyAgICAgICBtYWwsICBhbmQgIG90aGVyICBhbHRlcm5hdGl2ZXMgaW4gdGhlIHBhdHRlcm4gYXJlIHRyaWVkLiBJZiBubyBjb21wbGV0ZQorICAgICAgIG1hdGNoICBjYW4gIGJlICBmb3VuZCwgIFBDUkUyX0VSUk9SX1BBUlRJQUwgIGlzICByZXR1cm5lZCAgaW5zdGVhZCAgIG9mCisgICAgICAgUENSRTJfRVJST1JfTk9NQVRDSC4KKworICAgICAgIFRoaXMgIG9wdGlvbiAgaXMgInNvZnQiIGJlY2F1c2UgaXQgcHJlZmVycyBhIGNvbXBsZXRlIG1hdGNoIG92ZXIgYSBwYXItCisgICAgICAgdGlhbCBtYXRjaC4gIEFsbCB0aGUgdmFyaW91cyBtYXRjaGluZyBpdGVtcyBpbiBhIHBhdHRlcm4gYmVoYXZlICBhcyAgaWYKKyAgICAgICB0aGUgIHN1YmplY3Qgc3RyaW5nIGlzIHBvdGVudGlhbGx5IGNvbXBsZXRlLiBGb3IgZXhhbXBsZSwgXHosIFxaLCBhbmQgJAorICAgICAgIG1hdGNoIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3QsIGFzIG5vcm1hbCwgYW5kIGZvciBcYiBhbmQgXEIgIHRoZSAgZW5kCisgICAgICAgb2YgdGhlIHN1YmplY3QgaXMgdHJlYXRlZCBhcyBhIG5vbi1hbHBoYW51bWVyaWMuCisKKyAgICAgICBJZiAgdGhlcmUgIGlzIG1vcmUgdGhhbiBvbmUgcGFydGlhbCBtYXRjaCwgdGhlIGZpcnN0IG9uZSB0aGF0IHdhcyBmb3VuZAorICAgICAgIHByb3ZpZGVzIHRoZSBkYXRhIHRoYXQgaXMgcmV0dXJuZWQuIENvbnNpZGVyIHRoaXMgcGF0dGVybjoKKworICAgICAgICAgLzEyM1x3K1h8ZG9nWS8KKworICAgICAgIElmIHRoaXMgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdWJqZWN0IHN0cmluZyAiYWJjMTIzZG9nIiwgYm90aCAgYWx0ZXItCisgICAgICAgbmF0aXZlcyAgZmFpbCAgdG8gIG1hdGNoLCAgYnV0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3QgaXMgcmVhY2hlZCBkdXJpbmcKKyAgICAgICBtYXRjaGluZywgc28gUENSRTJfRVJST1JfUEFSVElBTCBpcyByZXR1cm5lZC4gVGhlIG9mZnNldHMgYXJlIHNldCB0byAgMworICAgICAgIGFuZCAgOSwgaWRlbnRpZnlpbmcgIjEyM2RvZyIgYXMgdGhlIGZpcnN0IHBhcnRpYWwgbWF0Y2ggdGhhdCB3YXMgZm91bmQuCisgICAgICAgKEluIHRoaXMgZXhhbXBsZSwgdGhlcmUgYXJlIHR3byBwYXJ0aWFsIG1hdGNoZXMsIGJlY2F1c2UgImRvZyIgIG9uICBpdHMKKyAgICAgICBvd24gcGFydGlhbGx5IG1hdGNoZXMgdGhlIHNlY29uZCBhbHRlcm5hdGl2ZS4pCisKKyAgIFBDUkUyX1BBUlRJQUxfSEFSRCBXSVRIIHBjcmUyX21hdGNoKCkKKworICAgICAgIElmICBQQ1JFMl9QQVJUSUFMX0hBUkQgaXMgc2V0IGZvciBwY3JlMl9tYXRjaCgpLCBQQ1JFMl9FUlJPUl9QQVJUSUFMIGlzCisgICAgICAgcmV0dXJuZWQgYXMgc29vbiBhcyBhIHBhcnRpYWwgbWF0Y2ggaXMgIGZvdW5kLCAgd2l0aG91dCAgY29udGludWluZyAgdG8KKyAgICAgICBzZWFyY2ggIGZvciBwb3NzaWJsZSBjb21wbGV0ZSBtYXRjaGVzLiBUaGlzIG9wdGlvbiBpcyAiaGFyZCIgYmVjYXVzZSBpdAorICAgICAgIHByZWZlcnMgYW4gZWFybGllciBwYXJ0aWFsIG1hdGNoIG92ZXIgYSBsYXRlciBjb21wbGV0ZSBtYXRjaC4gRm9yICB0aGlzCisgICAgICAgcmVhc29uLCAgdGhlICBhc3N1bXB0aW9uICBpcyAgbWFkZSB0aGF0IHRoZSBlbmQgb2YgdGhlIHN1cHBsaWVkIHN1YmplY3QKKyAgICAgICBzdHJpbmcgbWF5IG5vdCBiZSB0aGUgdHJ1ZSBlbmQgb2YgdGhlIGF2YWlsYWJsZSBkYXRhLCBhbmQgIHNvLCAgaWYgIFx6LAorICAgICAgIFxaLCAgXGIsIFxCLCBvciAkIGFyZSBlbmNvdW50ZXJlZCBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0LCB0aGUgcmVzdWx0CisgICAgICAgaXMgUENSRTJfRVJST1JfUEFSVElBTCwgcHJvdmlkZWQgdGhhdCBhdCBsZWFzdCAgb25lICBjaGFyYWN0ZXIgIGluICB0aGUKKyAgICAgICBzdWJqZWN0IGhhcyBiZWVuIGluc3BlY3RlZC4KKworICAgQ29tcGFyaW5nIGhhcmQgYW5kIHNvZnQgcGFydGlhbCBtYXRjaGluZworCisgICAgICAgVGhlICBkaWZmZXJlbmNlICBiZXR3ZWVuIHRoZSB0d28gcGFydGlhbCBtYXRjaGluZyBvcHRpb25zIGNhbiBiZSBpbGx1cy0KKyAgICAgICB0cmF0ZWQgYnkgYSBwYXR0ZXJuIHN1Y2ggYXM6CisKKyAgICAgICAgIC9kb2coc2JvZHkpPy8KKworICAgICAgIFRoaXMgbWF0Y2hlcyBlaXRoZXIgImRvZyIgb3IgImRvZ3Nib2R5IiwgZ3JlZWRpbHkgKHRoYXQgaXMsIGl0ICBwcmVmZXJzCisgICAgICAgdGhlICBsb25nZXIgIHN0cmluZyAgaWYgIHBvc3NpYmxlKS4gSWYgaXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdHJpbmcKKyAgICAgICAiZG9nIiB3aXRoIFBDUkUyX1BBUlRJQUxfU09GVCwgaXQgeWllbGRzIGEgY29tcGxldGUgIG1hdGNoICBmb3IgICJkb2ciLgorICAgICAgIEhvd2V2ZXIsICBpZiAgUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldCwgdGhlIHJlc3VsdCBpcyBQQ1JFMl9FUlJPUl9QQVItCisgICAgICAgVElBTC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZSBwYXR0ZXJuIGlzIG1hZGUgdW5ncmVlZHkgdGhlIHJlc3VsdCAgaXMKKyAgICAgICBkaWZmZXJlbnQ6CisKKyAgICAgICAgIC9kb2coc2JvZHkpPz8vCisKKyAgICAgICBJbiAgdGhpcyAgY2FzZSAgdGhlICByZXN1bHQgIGlzIGFsd2F5cyBhIGNvbXBsZXRlIG1hdGNoIGJlY2F1c2UgdGhhdCBpcworICAgICAgIGZvdW5kIGZpcnN0LCBhbmQgbWF0Y2hpbmcgbmV2ZXIgIGNvbnRpbnVlcyAgYWZ0ZXIgIGZpbmRpbmcgIGEgIGNvbXBsZXRlCisgICAgICAgbWF0Y2guIEl0IG1pZ2h0IGJlIGVhc2llciB0byBmb2xsb3cgdGhpcyBleHBsYW5hdGlvbiBieSB0aGlua2luZyBvZiB0aGUKKyAgICAgICB0d28gcGF0dGVybnMgbGlrZSB0aGlzOgorCisgICAgICAgICAvZG9nKHNib2R5KT8vICAgIGlzIHRoZSBzYW1lIGFzICAvZG9nc2JvZHl8ZG9nLworICAgICAgICAgL2RvZyhzYm9keSk/Py8gICBpcyB0aGUgc2FtZSBhcyAgL2RvZ3xkb2dzYm9keS8KKworICAgICAgIFRoZSBzZWNvbmQgcGF0dGVybiB3aWxsIG5ldmVyIG1hdGNoICJkb2dzYm9keSIsIGJlY2F1c2UgaXQgd2lsbCAgYWx3YXlzCisgICAgICAgZmluZCB0aGUgc2hvcnRlciBtYXRjaCBmaXJzdC4KKworCitQQVJUSUFMIE1BVENISU5HIFVTSU5HIHBjcmUyX2RmYV9tYXRjaCgpCisKKyAgICAgICBUaGUgREZBIGZ1bmN0aW9ucyBtb3ZlIGFsb25nIHRoZSBzdWJqZWN0IHN0cmluZyBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLAorICAgICAgIHdpdGhvdXQgYmFja3RyYWNraW5nLCBzZWFyY2hpbmcgZm9yICBhbGwgIHBvc3NpYmxlICBtYXRjaGVzICBzaW11bHRhbmUtCisgICAgICAgb3VzbHkuICBJZiB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IGlzIHJlYWNoZWQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIHBhdC0KKyAgICAgICB0ZXJuLCB0aGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgYSBwYXJ0aWFsIG1hdGNoLCBhZ2FpbiBwcm92aWRlZCAgdGhhdAorICAgICAgIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgaGFzIGJlZW4gaW5zcGVjdGVkLgorCisgICAgICAgV2hlbiBQQ1JFMl9QQVJUSUFMX1NPRlQgaXMgc2V0LCBQQ1JFMl9FUlJPUl9QQVJUSUFMIGlzIHJldHVybmVkIG9ubHkgaWYKKyAgICAgICB0aGVyZSBoYXZlIGJlZW4gbm8gY29tcGxldGUgbWF0Y2hlcy4gT3RoZXJ3aXNlLCAgdGhlICBjb21wbGV0ZSAgbWF0Y2hlcworICAgICAgIGFyZSAgcmV0dXJuZWQuICAgSG93ZXZlciwgaWYgUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldCwgYSBwYXJ0aWFsIG1hdGNoCisgICAgICAgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGFueSBjb21wbGV0ZSBtYXRjaGVzLiBUaGUgcG9ydGlvbiBvZiAgdGhlICBzdHJpbmcKKyAgICAgICB0aGF0IHdhcyBtYXRjaGVkIHdoZW4gdGhlIGxvbmdlc3QgcGFydGlhbCBtYXRjaCB3YXMgZm91bmQgaXMgc2V0IGFzIHRoZQorICAgICAgIGZpcnN0IG1hdGNoaW5nIHN0cmluZy4KKworICAgICAgIEJlY2F1c2UgdGhlIERGQSBmdW5jdGlvbnMgYWx3YXlzIHNlYXJjaCBmb3IgYWxsIHBvc3NpYmxlICBtYXRjaGVzLCAgYW5kCisgICAgICAgdGhlcmUgIGlzICBubyAgZGlmZmVyZW5jZSBiZXR3ZWVuIGdyZWVkeSBhbmQgdW5ncmVlZHkgcmVwZXRpdGlvbiwgdGhlaXIKKyAgICAgICBiZWhhdmlvdXIgaXMgZGlmZmVyZW50IGZyb20gIHRoZSAgc3RhbmRhcmQgIGZ1bmN0aW9ucyAgd2hlbiAgUENSRTJfUEFSLQorICAgICAgIFRJQUxfSEFSRCAgaXMgIHNldC4gIENvbnNpZGVyICB0aGUgIHN0cmluZyAgImRvZyIgIG1hdGNoZWQgIGFnYWluc3QgdGhlCisgICAgICAgdW5ncmVlZHkgcGF0dGVybiBzaG93biBhYm92ZToKKworICAgICAgICAgL2RvZyhzYm9keSk/Py8KKworICAgICAgIFdoZXJlYXMgdGhlIHN0YW5kYXJkIGZ1bmN0aW9uIHN0b3BzIGFzIHNvb24gYXMgaXQgIGZpbmRzICB0aGUgIGNvbXBsZXRlCisgICAgICAgbWF0Y2ggIGZvciAgImRvZyIsICB0aGUgIERGQSAgZnVuY3Rpb24gYWxzbyBmaW5kcyB0aGUgcGFydGlhbCBtYXRjaCBmb3IKKyAgICAgICAiZG9nc2JvZHkiLCBhbmQgc28gcmV0dXJucyB0aGF0IHdoZW4gUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldC4KKworCitQQVJUSUFMIE1BVENISU5HIEFORCBXT1JEIEJPVU5EQVJJRVMKKworICAgICAgIElmIGEgcGF0dGVybiBlbmRzIHdpdGggb25lIG9mIHNlcXVlbmNlcyBcYiBvciBcQiwgd2hpY2ggdGVzdCAgZm9yICB3b3JkCisgICAgICAgYm91bmRhcmllcywgIHBhcnRpYWwgbWF0Y2hpbmcgd2l0aCBQQ1JFMl9QQVJUSUFMX1NPRlQgY2FuIGdpdmUgY291bnRlci0KKyAgICAgICBpbnR1aXRpdmUgcmVzdWx0cy4gQ29uc2lkZXIgdGhpcyBwYXR0ZXJuOgorCisgICAgICAgICAvXGJjYXRcYi8KKworICAgICAgIFRoaXMgbWF0Y2hlcyAiY2F0IiwgcHJvdmlkZWQgdGhlcmUgaXMgYSB3b3JkIGJvdW5kYXJ5IGF0IGVpdGhlciBlbmQuIElmCisgICAgICAgdGhlIHN1YmplY3Qgc3RyaW5nIGlzICJ0aGUgY2F0IiwgdGhlIGNvbXBhcmlzb24gb2YgdGhlIGZpbmFsICJ0IiB3aXRoIGEKKyAgICAgICBmb2xsb3dpbmcgY2hhcmFjdGVyIGNhbm5vdCB0YWtlIHBsYWNlLCBzbyBhICBwYXJ0aWFsICBtYXRjaCAgaXMgIGZvdW5kLgorICAgICAgIEhvd2V2ZXIsICBub3JtYWwgIG1hdGNoaW5nIGNhcnJpZXMgb24sIGFuZCBcYiBtYXRjaGVzIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICAgc3ViamVjdCB3aGVuIHRoZSBsYXN0IGNoYXJhY3RlciBpcyBhIGxldHRlciwgc28gIGEgIGNvbXBsZXRlICBtYXRjaCAgaXMKKyAgICAgICBmb3VuZC4gICBUaGUgIHJlc3VsdCwgIHRoZXJlZm9yZSwgIGlzICBub3QgIFBDUkUyX0VSUk9SX1BBUlRJQUwuICBVc2luZworICAgICAgIFBDUkUyX1BBUlRJQUxfSEFSRCBpbiB0aGlzIGNhc2UgZG9lcyB5aWVsZCBQQ1JFMl9FUlJPUl9QQVJUSUFMLCBiZWNhdXNlCisgICAgICAgdGhlbiB0aGUgcGFydGlhbCBtYXRjaCB0YWtlcyBwcmVjZWRlbmNlLgorCisKK0VYQU1QTEUgT0YgUEFSVElBTCBNQVRDSElORyBVU0lORyBQQ1JFMlRFU1QKKworICAgICAgIElmICB0aGUgIHBhcnRpYWxfc29mdCAgKG9yICBwcykgbW9kaWZpZXIgaXMgcHJlc2VudCBvbiBhIHBjcmUydGVzdCBkYXRhCisgICAgICAgbGluZSwgdGhlIFBDUkUyX1BBUlRJQUxfU09GVCBvcHRpb24gaXMgdXNlZCBmb3IgdGhlIG1hdGNoLiAgSGVyZSAgaXMgIGEKKyAgICAgICBydW4gb2YgcGNyZTJ0ZXN0IHRoYXQgdXNlcyB0aGUgZGF0ZSBleGFtcGxlIHF1b3RlZCBhYm92ZToKKworICAgICAgICAgICByZT4gL15cZD9cZChqYW58ZmVifG1hcnxhcHJ8bWF5fGp1bnxqdWx8YXVnfHNlcHxvY3R8bm92fGRlYylcZFxkJC8KKyAgICAgICAgIGRhdGE+IDI1anVuMDRcPXBzCisgICAgICAgICAgMDogMjVqdW4wNAorICAgICAgICAgIDE6IGp1bgorICAgICAgICAgZGF0YT4gMjVkZWMzXD1wcworICAgICAgICAgUGFydGlhbCBtYXRjaDogMjNkZWMzCisgICAgICAgICBkYXRhPiAzanVcPXBzCisgICAgICAgICBQYXJ0aWFsIG1hdGNoOiAzanUKKyAgICAgICAgIGRhdGE+IDNqdWpcPXBzCisgICAgICAgICBObyBtYXRjaAorICAgICAgICAgZGF0YT4galw9cHMKKyAgICAgICAgIE5vIG1hdGNoCisKKyAgICAgICBUaGUgIGZpcnN0ICBkYXRhICBzdHJpbmcgIGlzIG1hdGNoZWQgY29tcGxldGVseSwgc28gcGNyZTJ0ZXN0IHNob3dzIHRoZQorICAgICAgIG1hdGNoZWQgc3Vic3RyaW5ncy4gVGhlIHJlbWFpbmluZyBmb3VyIHN0cmluZ3MgZG8gbm90ICBtYXRjaCAgdGhlICBjb20tCisgICAgICAgcGxldGUgcGF0dGVybiwgYnV0IHRoZSBmaXJzdCB0d28gYXJlIHBhcnRpYWwgbWF0Y2hlcy4gU2ltaWxhciBvdXRwdXQgaXMKKyAgICAgICBvYnRhaW5lZCBpZiBERkEgbWF0Y2hpbmcgaXMgdXNlZC4KKworICAgICAgIElmIHRoZSBwYXJ0aWFsX2hhcmQgKG9yIHBoKSBtb2RpZmllciBpcyBwcmVzZW50ICBvbiAgYSAgcGNyZTJ0ZXN0ICBkYXRhCisgICAgICAgbGluZSwgdGhlIFBDUkUyX1BBUlRJQUxfSEFSRCBvcHRpb24gaXMgc2V0IGZvciB0aGUgbWF0Y2guCisKKworTVVMVEktU0VHTUVOVCBNQVRDSElORyBXSVRIIHBjcmUyX2RmYV9tYXRjaCgpCisKKyAgICAgICBXaGVuICBhICBwYXJ0aWFsIG1hdGNoIGhhcyBiZWVuIGZvdW5kIHVzaW5nIGEgREZBIG1hdGNoaW5nIGZ1bmN0aW9uLCBpdAorICAgICAgIGlzIHBvc3NpYmxlIHRvIGNvbnRpbnVlIHRoZSBtYXRjaCBieSBwcm92aWRpbmcgYWRkaXRpb25hbCBzdWJqZWN0ICBkYXRhCisgICAgICAgYW5kICBjYWxsaW5nICB0aGUgZnVuY3Rpb24gYWdhaW4gd2l0aCB0aGUgc2FtZSBjb21waWxlZCByZWd1bGFyIGV4cHJlcy0KKyAgICAgICBzaW9uLCB0aGlzIHRpbWUgc2V0dGluZyB0aGUgUENSRTJfREZBX1JFU1RBUlQgb3B0aW9uLiBZb3UgbXVzdCBwYXNzIHRoZQorICAgICAgIHNhbWUgd29ya2luZyBzcGFjZSBhcyBiZWZvcmUsIGJlY2F1c2UgdGhpcyBpcyB3aGVyZSBkZXRhaWxzIG9mIHRoZSBwcmUtCisgICAgICAgdmlvdXMgcGFydGlhbCBtYXRjaCBhcmUgc3RvcmVkLiBIZXJlIGlzIGFuIGV4YW1wbGUgdXNpbmcgcGNyZTJ0ZXN0OgorCisgICAgICAgICAgIHJlPiAvXlxkP1xkKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKVxkXGQkLworICAgICAgICAgZGF0YT4gMjNqYVw9ZGZhLHBzCisgICAgICAgICBQYXJ0aWFsIG1hdGNoOiAyM2phCisgICAgICAgICBkYXRhPiBuMDVcPWRmYSxkZmFfcmVzdGFydAorICAgICAgICAgIDA6IG4wNQorCisgICAgICAgVGhlIGZpcnN0IGNhbGwgaGFzICIyM2phIiBhcyB0aGUgc3ViamVjdCwgYW5kIHJlcXVlc3RzICBwYXJ0aWFsICBtYXRjaC0KKyAgICAgICBpbmc7ICB0aGUgIHNlY29uZCAgY2FsbCAgaGFzICAibjA1IiAgYXMgIHRoZSAgc3ViamVjdCBmb3IgdGhlIGNvbnRpbnVlZAorICAgICAgIChyZXN0YXJ0ZWQpIG1hdGNoLiAgTm90aWNlIHRoYXQgd2hlbiB0aGUgbWF0Y2ggaXMgIGNvbXBsZXRlLCAgb25seSAgdGhlCisgICAgICAgbGFzdCAgcGFydCAgaXMgIHNob3duOyAgUENSRTIgZG9lcyBub3QgcmV0YWluIHRoZSBwcmV2aW91c2x5IHBhcnRpYWxseS0KKyAgICAgICBtYXRjaGVkIHN0cmluZy4gSXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcgcHJvZ3JhbSB0byBkbyB0aGF0IGlmIGl0ICBuZWVkcworICAgICAgIHRvLgorCisgICAgICAgVGhhdCBtZWFucyB0aGF0LCBmb3IgYW4gdW5hbmNob3JlZCBwYXR0ZXJuLCBpZiBhIGNvbnRpbnVlZCBtYXRjaCBmYWlscywKKyAgICAgICBpdCBpcyBub3QgcG9zc2libGUgdG8gdHJ5IGFnYWluIGF0ICBhICBuZXcgIHN0YXJ0aW5nICBwb2ludC4gIEFsbCAgdGhpcworICAgICAgIGZhY2lsaXR5ICBpcyAgY2FwYWJsZSAgb2YgIGRvaW5nICBpcyBjb250aW51aW5nIHdpdGggdGhlIHByZXZpb3VzIG1hdGNoCisgICAgICAgYXR0ZW1wdC4gSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIGlmIHRoZSBzZWNvbmQgc2V0IG9mIGRhdGEgIGlzICAidWcyMyIKKyAgICAgICB0aGUgIHJlc3VsdCBpcyBubyBtYXRjaCwgZXZlbiB0aG91Z2ggdGhlcmUgd291bGQgYmUgYSBtYXRjaCBmb3IgImF1ZzIzIgorICAgICAgIGlmIHRoZSBlbnRpcmUgc3RyaW5nIHdlcmUgZ2l2ZW4gYXQgb25jZS4gRGVwZW5kaW5nIG9uIHRoZSAgYXBwbGljYXRpb24sCisgICAgICAgdGhpcyBtYXkgb3IgbWF5IG5vdCBiZSB3aGF0IHlvdSB3YW50LiAgVGhlIG9ubHkgd2F5IHRvIGFsbG93IGZvciBzdGFydC0KKyAgICAgICBpbmcgYWdhaW4gYXQgdGhlIG5leHQgY2hhcmFjdGVyIGlzIHRvIHJldGFpbiB0aGUgbWF0Y2hlZCAgcGFydCAgb2YgIHRoZQorICAgICAgIHN1YmplY3QgYW5kIHRyeSBhIG5ldyBjb21wbGV0ZSBtYXRjaC4KKworICAgICAgIFlvdSAgY2FuICBzZXQgdGhlIFBDUkUyX1BBUlRJQUxfU09GVCBvciBQQ1JFMl9QQVJUSUFMX0hBUkQgb3B0aW9ucyB3aXRoCisgICAgICAgUENSRTJfREZBX1JFU1RBUlQgdG8gY29udGludWUgcGFydGlhbCBtYXRjaGluZyBvdmVyIG11bHRpcGxlICBzZWdtZW50cy4KKyAgICAgICBUaGlzICBmYWNpbGl0eSBjYW4gYmUgdXNlZCB0byBwYXNzIHZlcnkgbG9uZyBzdWJqZWN0IHN0cmluZ3MgdG8gdGhlIERGQQorICAgICAgIG1hdGNoaW5nIGZ1bmN0aW9ucy4KKworCitNVUxUSS1TRUdNRU5UIE1BVENISU5HIFdJVEggcGNyZTJfbWF0Y2goKQorCisgICAgICAgVW5saWtlIHRoZSBERkEgZnVuY3Rpb24sIGl0IGlzIG5vdCBwb3NzaWJsZSAgdG8gIHJlc3RhcnQgIHRoZSAgcHJldmlvdXMKKyAgICAgICBtYXRjaCB3aXRoIGEgbmV3IHNlZ21lbnQgb2YgZGF0YSB3aGVuIHVzaW5nIHBjcmUyX21hdGNoKCkuIEluc3RlYWQsIG5ldworICAgICAgIGRhdGEgbXVzdCBiZSBhZGRlZCB0byB0aGUgcHJldmlvdXMgc3ViamVjdCBzdHJpbmcsIGFuZCB0aGUgZW50aXJlIG1hdGNoCisgICAgICAgcmUtcnVuLCAgc3RhcnRpbmcgZnJvbSB0aGUgcG9pbnQgd2hlcmUgdGhlIHBhcnRpYWwgbWF0Y2ggb2NjdXJyZWQuIEVhci0KKyAgICAgICBsaWVyIGRhdGEgY2FuIGJlIGRpc2NhcmRlZC4KKworICAgICAgIEl0IGlzIGJlc3QgdG8gdXNlIFBDUkUyX1BBUlRJQUxfSEFSRCBpbiB0aGlzIHNpdHVhdGlvbiwgYmVjYXVzZSBpdCBkb2VzCisgICAgICAgbm90ICB0cmVhdCB0aGUgZW5kIG9mIGEgc2VnbWVudCBhcyB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IHdoZW4gbWF0Y2hpbmcKKyAgICAgICBceiwgXFosIFxiLCBcQiwgYW5kICQuIENvbnNpZGVyICBhbiAgdW5hbmNob3JlZCAgcGF0dGVybiAgdGhhdCAgbWF0Y2hlcworICAgICAgIGRhdGVzOgorCisgICAgICAgICAgIHJlPiAvXGQ/XGQoamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpXGRcZC8KKyAgICAgICAgIGRhdGE+IFRoZSBkYXRlIGlzIDIzamFcPXBoCisgICAgICAgICBQYXJ0aWFsIG1hdGNoOiAyM2phCisKKyAgICAgICBBdCAgdGhpcyBzdGFnZSwgYW4gYXBwbGljYXRpb24gY291bGQgZGlzY2FyZCB0aGUgdGV4dCBwcmVjZWRpbmcgIjIzamEiLAorICAgICAgIGFkZCBvbiB0ZXh0IGZyb20gdGhlIG5leHQgIHNlZ21lbnQsICBhbmQgIGNhbGwgIHRoZSAgbWF0Y2hpbmcgIGZ1bmN0aW9uCisgICAgICAgYWdhaW4uICBVbmxpa2UgIHRoZSAgREZBICBtYXRjaGluZyBmdW5jdGlvbiwgdGhlIGVudGlyZSBtYXRjaGluZyBzdHJpbmcKKyAgICAgICBtdXN0IGFsd2F5cyBiZSBhdmFpbGFibGUsIGFuZCB0aGUgY29tcGxldGUgbWF0Y2hpbmcgcHJvY2VzcyBvY2N1cnMgIGZvcgorICAgICAgIGVhY2ggY2FsbCwgc28gbW9yZSBtZW1vcnkgYW5kIG1vcmUgcHJvY2Vzc2luZyB0aW1lIGlzIG5lZWRlZC4KKworCitJU1NVRVMgV0lUSCBNVUxUSS1TRUdNRU5UIE1BVENISU5HCisKKyAgICAgICBDZXJ0YWluIHR5cGVzIG9mIHBhdHRlcm4gbWF5IGdpdmUgcHJvYmxlbXMgd2l0aCBtdWx0aS1zZWdtZW50IG1hdGNoaW5nLAorICAgICAgIHdoaWNoZXZlciBtYXRjaGluZyBmdW5jdGlvbiBpcyB1c2VkLgorCisgICAgICAgMS4gSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgYSB0ZXN0IGZvciB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSwgeW91IG5lZWQKKyAgICAgICB0byAgcGFzcyAgdGhlICBQQ1JFMl9OT1RCT0wgb3B0aW9uIHdoZW4gdGhlIHN1YmplY3Qgc3RyaW5nIGZvciBhbnkgY2FsbAorICAgICAgIGRvZXMgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuIFRoZXJlICBpcyAgYWxzbyAgYSAgUENSRTJfTk9URU9MCisgICAgICAgb3B0aW9uLCBidXQgaW4gcHJhY3RpY2Ugd2hlbiBkb2luZyBtdWx0aS1zZWdtZW50IG1hdGNoaW5nIHlvdSBzaG91bGQgYmUKKyAgICAgICB1c2luZyBQQ1JFMl9QQVJUSUFMX0hBUkQsIHdoaWNoIGluY2x1ZGVzIHRoZSBlZmZlY3Qgb2YgUENSRTJfTk9URU9MLgorCisgICAgICAgMi4gSWYgYSBwYXR0ZXJuIGNvbnRhaW5zIGEgbG9va2JlaGluZCBhc3NlcnRpb24sIGNoYXJhY3RlcnMgIHRoYXQgIHByZS0KKyAgICAgICBjZWRlICB0aGUgc3RhcnQgb2YgdGhlIHBhcnRpYWwgbWF0Y2ggbWF5IGhhdmUgYmVlbiBpbnNwZWN0ZWQgZHVyaW5nIHRoZQorICAgICAgIG1hdGNoaW5nIHByb2Nlc3MuICBXaGVuIHVzaW5nIHBjcmUyX21hdGNoKCksIHN1ZmZpY2llbnQgY2hhcmFjdGVycyBtdXN0CisgICAgICAgYmUgIHJldGFpbmVkICBmb3IgIHRoZSAgbmV4dCAgbWF0Y2ggYXR0ZW1wdC4gWW91IGNhbiBlbnN1cmUgdGhhdCBlbm91Z2gKKyAgICAgICBjaGFyYWN0ZXJzIGFyZSByZXRhaW5lZCBieSBkb2luZyB0aGUgZm9sbG93aW5nOgorCisgICAgICAgQmVmb3JlIGRvaW5nIGFueSBtYXRjaGluZywgZmluZCB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IGxvb2tiZWhpbmQgaW4KKyAgICAgICB0aGUgICAgIHBhdHRlcm4gICAgYnkgICAgY2FsbGluZyAgICBwY3JlMl9wYXR0ZXJuX2luZm8oKSAgICB3aXRoICAgIHRoZQorICAgICAgIFBDUkUyX0lORk9fTUFYTE9PS0JFSElORCBvcHRpb24uIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nICBjb3VudCAgaXMgIGluCisgICAgICAgY2hhcmFjdGVycywgbm90IGNvZGUgdW5pdHMuIEFmdGVyIGEgcGFydGlhbCBtYXRjaCwgbW92aW5nIGJhY2sgZnJvbSB0aGUKKyAgICAgICBvdmVjdG9yWzBdIG9mZnNldCBpbiB0aGUgc3ViamVjdCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZ2l2ZW4gIGZvcgorICAgICAgIHRoZSAgbWF4aW11bSBsb29rYmVoaW5kIGdldHMgeW91IHRvIHRoZSBlYXJsaWVzdCBjaGFyYWN0ZXIgdGhhdCBtdXN0IGJlCisgICAgICAgcmV0YWluZWQuIEluIGEgbm9uLVVURiBvciBhIDMyLWJpdCBzaXR1YXRpb24sIG1vdmluZyAgYmFjayAgaXMgIGp1c3QgIGEKKyAgICAgICBzdWJ0cmFjdGlvbiwgIGJ1dCBpbiBVVEYtOCBvciBVVEYtMTYgeW91IGhhdmUgdG8gY291bnQgY2hhcmFjdGVycyB3aGlsZQorICAgICAgIG1vdmluZyBiYWNrIHRocm91Z2ggdGhlIGNvZGUgdW5pdHMuCisKKyAgICAgICBDaGFyYWN0ZXJzIGJlZm9yZSB0aGUgcG9pbnQgeW91IGhhdmUgbm93IHJlYWNoZWQgY2FuIGJlIGRpc2NhcmRlZCwgIGFuZAorICAgICAgIGFmdGVyICB0aGUgIG5leHQgc2VnbWVudCBoYXMgYmVlbiBhZGRlZCB0byB3aGF0IGlzIHJldGFpbmVkLCB5b3Ugc2hvdWxkCisgICAgICAgcnVuIHRoZSBuZXh0IG1hdGNoIHdpdGggdGhlIHN0YXJ0b2Zmc2V0IGFyZ3VtZW50IHNldCBzbyB0aGF0IHRoZSAgbWF0Y2gKKyAgICAgICBiZWdpbnMgYXQgdGhlIHNhbWUgcG9pbnQgYXMgYmVmb3JlLgorCisgICAgICAgRm9yICBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiAiKD88PTEyMylhYmMiIGlzIHBhcnRpYWxseSBtYXRjaGVkIGFnYWluc3QKKyAgICAgICB0aGUgc3RyaW5nICJ4eDEyM2FiIiwgdGhlIG92ZWN0b3Igb2Zmc2V0cyBhcmUgNSBhbmQgNyAoImFiIikuIFRoZSBtYXhpLQorICAgICAgIG11bSAgbG9va2JlaGluZCAgY291bnQgIGlzICAzLCBzbyBhbGwgY2hhcmFjdGVycyBiZWZvcmUgb2Zmc2V0IDIgY2FuIGJlCisgICAgICAgZGlzY2FyZGVkLiBUaGUgdmFsdWUgb2Ygc3RhcnRvZmZzZXQgZm9yIHRoZSBuZXh0ICBtYXRjaCAgc2hvdWxkICBiZSAgMy4KKyAgICAgICBXaGVuICBwY3JlMnRlc3QgIGRpc3BsYXlzICBhIHBhcnRpYWwgbWF0Y2gsIGl0IGluZGljYXRlcyB0aGUgbG9va2JlaGluZAorICAgICAgIGNoYXJhY3RlcnMgd2l0aCAnPCcgY2hhcmFjdGVyczoKKworICAgICAgICAgICByZT4gIig/PD0xMjMpYWJjIgorICAgICAgICAgZGF0YT4geHgxMjNhYlw9cGgKKyAgICAgICAgIFBhcnRpYWwgbWF0Y2g6IDEyM2FiCisgICAgICAgICAgICAgICAgICAgICAgICA8PDwKKworICAgICAgIDMuIEJlY2F1c2UgYSBwYXJ0aWFsIG1hdGNoIG11c3QgYWx3YXlzIGNvbnRhaW4gYXQgbGVhc3Qgb25lICBjaGFyYWN0ZXIsCisgICAgICAgd2hhdCAgbWlnaHQgIGJlICBjb25zaWRlcmVkIGEgcGFydGlhbCBtYXRjaCBvZiBhbiBlbXB0eSBzdHJpbmcgYWN0dWFsbHkKKyAgICAgICBnaXZlcyBhICJubyBtYXRjaCIgcmVzdWx0LiBGb3IgZXhhbXBsZToKKworICAgICAgICAgICByZT4gL2MoPzw9YWJjKXgvCisgICAgICAgICBkYXRhPiBhYlw9cHMKKyAgICAgICAgIE5vIG1hdGNoCisKKyAgICAgICBJZiB0aGUgbmV4dCBzZWdtZW50IGJlZ2lucyAiY3giLCBhIG1hdGNoIHNob3VsZCBiZSBmb3VuZCwgYnV0IHRoaXMgd2lsbAorICAgICAgIG9ubHkgIGhhcHBlbiAgaWYgY2hhcmFjdGVycyBmcm9tIHRoZSBwcmV2aW91cyBzZWdtZW50IGFyZSByZXRhaW5lZC4gRm9yCisgICAgICAgdGhpcyByZWFzb24sIGEgIm5vIG1hdGNoIiByZXN1bHQgIHNob3VsZCAgYmUgIGludGVycHJldGVkICBhcyAgInBhcnRpYWwKKyAgICAgICBtYXRjaCBvZiBhbiBlbXB0eSBzdHJpbmciIHdoZW4gdGhlIHBhdHRlcm4gY29udGFpbnMgbG9va2JlaGluZHMuCisKKyAgICAgICA0LiAgTWF0Y2hpbmcgIGEgc3ViamVjdCBzdHJpbmcgdGhhdCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIHNlZ21lbnRzIG1heQorICAgICAgIG5vdCBhbHdheXMgcHJvZHVjZSBleGFjdGx5IHRoZSBzYW1lIHJlc3VsdCBhcyBtYXRjaGluZyBvdmVyIG9uZSAgc2luZ2xlCisgICAgICAgbG9uZyAgc3RyaW5nLCAgZXNwZWNpYWxseSAgd2hlbiBQQ1JFMl9QQVJUSUFMX1NPRlQgaXMgdXNlZC4gVGhlIHNlY3Rpb24KKyAgICAgICAiUGFydGlhbCBNYXRjaGluZyBhbmQgV29yZCBCb3VuZGFyaWVzIiBhYm92ZSBkZXNjcmliZXMgIGFuICBpc3N1ZSAgdGhhdAorICAgICAgIGFyaXNlcyAgaWYgIHRoZSAgcGF0dGVybiBlbmRzIHdpdGggXGIgb3IgXEIuIEFub3RoZXIga2luZCBvZiBkaWZmZXJlbmNlCisgICAgICAgbWF5IG9jY3VyIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIG1hdGNoaW5nIHBvc3NpYmlsaXRpZXMsIGJlY2F1c2UgIChmb3IKKyAgICAgICBQQ1JFMl9QQVJUSUFMX1NPRlQpIGEgcGFydGlhbCBtYXRjaCByZXN1bHQgaXMgZ2l2ZW4gb25seSB3aGVuIHRoZXJlIGFyZQorICAgICAgIG5vIGNvbXBsZXRlZCBtYXRjaGVzLiBUaGlzIG1lYW5zIHRoYXQgYXMgc29vbiBhcyB0aGUgc2hvcnRlc3QgbWF0Y2ggaGFzCisgICAgICAgYmVlbiAgZm91bmQsICBjb250aW51YXRpb24gdG8gYSBuZXcgc3ViamVjdCBzZWdtZW50IGlzIG5vIGxvbmdlciBwb3NzaS0KKyAgICAgICBibGUuIENvbnNpZGVyIHRoaXMgcGNyZTJ0ZXN0IGV4YW1wbGU6CisKKyAgICAgICAgICAgcmU+IC9kb2coc2JvZHkpPy8KKyAgICAgICAgIGRhdGE+IGRvZ3NiXD1wcworICAgICAgICAgIDA6IGRvZworICAgICAgICAgZGF0YT4gZG9cPXBzLGRmYQorICAgICAgICAgUGFydGlhbCBtYXRjaDogZG8KKyAgICAgICAgIGRhdGE+IGdzYlw9cHMsZGZhLGRmYV9yZXN0YXJ0CisgICAgICAgICAgMDogZworICAgICAgICAgZGF0YT4gZG9nc2JvZHlcPWRmYQorICAgICAgICAgIDA6IGRvZ3Nib2R5CisgICAgICAgICAgMTogZG9nCisKKyAgICAgICBUaGUgZmlyc3QgZGF0YSBsaW5lIHBhc3NlcyB0aGUgc3RyaW5nICJkb2dzYiIgdG8gIGEgIHN0YW5kYXJkICBtYXRjaGluZworICAgICAgIGZ1bmN0aW9uLCBzZXR0aW5nIHRoZSBQQ1JFMl9QQVJUSUFMX1NPRlQgb3B0aW9uLiBBbHRob3VnaCB0aGUgc3RyaW5nIGlzCisgICAgICAgYSBwYXJ0aWFsIG1hdGNoIGZvciAiZG9nc2JvZHkiLCB0aGUgcmVzdWx0IGlzIG5vdCAgUENSRTJfRVJST1JfUEFSVElBTCwKKyAgICAgICBiZWNhdXNlICB0aGUgIHNob3J0ZXIgc3RyaW5nICJkb2ciIGlzIGEgY29tcGxldGUgbWF0Y2guIFNpbWlsYXJseSwgd2hlbgorICAgICAgIHRoZSBzdWJqZWN0IGlzIHByZXNlbnRlZCB0byBhIERGQSBtYXRjaGluZyBmdW5jdGlvbiAgaW4gIHNldmVyYWwgIHBhcnRzCisgICAgICAgKCJkbyIgIGFuZCAgImdzYiIgIGJlaW5nICB0aGUgZmlyc3QgdHdvKSB0aGUgbWF0Y2ggc3RvcHMgd2hlbiAiZG9nIiBoYXMKKyAgICAgICBiZWVuIGZvdW5kLCBhbmQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNvbnRpbnVlLiAgT24gdGhlIG90aGVyIGhhbmQsICBpZgorICAgICAgICJkb2dzYm9keSIgIGlzICBwcmVzZW50ZWQgIGFzICBhIHNpbmdsZSBzdHJpbmcsIGEgREZBIG1hdGNoaW5nIGZ1bmN0aW9uCisgICAgICAgZmluZHMgYm90aCBtYXRjaGVzLgorCisgICAgICAgQmVjYXVzZSBvZiB0aGVzZSBwcm9ibGVtcywgaXQgaXMgYmVzdCB0byAgdXNlICBQQ1JFMl9QQVJUSUFMX0hBUkQgIHdoZW4KKyAgICAgICBtYXRjaGluZyAgbXVsdGktc2VnbWVudCAgZGF0YS4gIFRoZSAgZXhhbXBsZSBhYm92ZSB0aGVuIGJlaGF2ZXMgZGlmZmVyLQorICAgICAgIGVudGx5OgorCisgICAgICAgICAgIHJlPiAvZG9nKHNib2R5KT8vCisgICAgICAgICBkYXRhPiBkb2dzYlw9cGgKKyAgICAgICAgIFBhcnRpYWwgbWF0Y2g6IGRvZ3NiCisgICAgICAgICBkYXRhPiBkb1w9cHMsZGZhCisgICAgICAgICBQYXJ0aWFsIG1hdGNoOiBkbworICAgICAgICAgZGF0YT4gZ3NiXD1waCxkZmEsZGZhX3Jlc3RhcnQKKyAgICAgICAgIFBhcnRpYWwgbWF0Y2g6IGdzYgorCisgICAgICAgNS4gUGF0dGVybnMgdGhhdCBjb250YWluIGFsdGVybmF0aXZlcyBhdCB0aGUgdG9wIGxldmVsIHdoaWNoIGRvIG5vdCBhbGwKKyAgICAgICBzdGFydCAgd2l0aCAgdGhlICBzYW1lICBwYXR0ZXJuICBpdGVtICBtYXkgIG5vdCAgd29yayAgYXMgZXhwZWN0ZWQgd2hlbgorICAgICAgIFBDUkUyX0RGQV9SRVNUQVJUIGlzIHVzZWQuIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGlzIHBhdHRlcm46CisKKyAgICAgICAgIDEyMzR8Mzc4OQorCisgICAgICAgSWYgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHN1YmplY3QgaXMgIkFCQzEyMyIsIGEgcGFydGlhbCAgbWF0Y2ggIG9mICB0aGUKKyAgICAgICBmaXJzdCAgYWx0ZXJuYXRpdmUgIGlzIGZvdW5kIGF0IG9mZnNldCAzLiBUaGVyZSBpcyBubyBwYXJ0aWFsIG1hdGNoIGZvcgorICAgICAgIHRoZSBzZWNvbmQgYWx0ZXJuYXRpdmUsIGJlY2F1c2Ugc3VjaCBhIG1hdGNoIGRvZXMgbm90IHN0YXJ0IGF0IHRoZSBzYW1lCisgICAgICAgcG9pbnQgIGluICB0aGUgIHN1YmplY3QgIHN0cmluZy4gQXR0ZW1wdGluZyB0byBjb250aW51ZSB3aXRoIHRoZSBzdHJpbmcKKyAgICAgICAiNzg5MCIgZG9lcyBub3QgeWllbGQgYSBtYXRjaCAgYmVjYXVzZSAgb25seSAgdGhvc2UgIGFsdGVybmF0aXZlcyAgdGhhdAorICAgICAgIG1hdGNoICBhdCAgb25lICBwb2ludCBpbiB0aGUgc3ViamVjdCBhcmUgcmVtZW1iZXJlZC4gVGhlIHByb2JsZW0gYXJpc2VzCisgICAgICAgYmVjYXVzZSB0aGUgc3RhcnQgb2YgdGhlIHNlY29uZCBhbHRlcm5hdGl2ZSBtYXRjaGVzICB3aXRoaW4gIHRoZSAgZmlyc3QKKyAgICAgICBhbHRlcm5hdGl2ZS4gIFRoZXJlICBpcyAgbm8gIHByb2JsZW0gd2l0aCBhbmNob3JlZCBwYXR0ZXJucyBvciBwYXR0ZXJucworICAgICAgIHN1Y2ggYXM6CisKKyAgICAgICAgIDEyMzR8QUJDRAorCisgICAgICAgd2hlcmUgbm8gc3RyaW5nIGNhbiBiZSBhIHBhcnRpYWwgbWF0Y2ggZm9yIGJvdGggYWx0ZXJuYXRpdmVzLiAgVGhpcyAgaXMKKyAgICAgICBub3QgIGEgIHByb2JsZW0gIGlmICBhICBzdGFuZGFyZCBtYXRjaGluZyBmdW5jdGlvbiBpcyB1c2VkLCBiZWNhdXNlIHRoZQorICAgICAgIGVudGlyZSBtYXRjaCBoYXMgdG8gYmUgcmVydW4gZWFjaCB0aW1lOgorCisgICAgICAgICAgIHJlPiAvMTIzNHwzNzg5LworICAgICAgICAgZGF0YT4gQUJDMTIzXD1waAorICAgICAgICAgUGFydGlhbCBtYXRjaDogMTIzCisgICAgICAgICBkYXRhPiAxMjM3ODkwCisgICAgICAgICAgMDogMzc4OQorCisgICAgICAgT2YgY291cnNlLCBpbnN0ZWFkIG9mIHVzaW5nIFBDUkUyX0RGQV9SRVNUQVJULCB0aGUgIHNhbWUgIHRlY2huaXF1ZSAgb2YKKyAgICAgICByZS1ydW5uaW5nICB0aGUgIGVudGlyZSAgbWF0Y2ggIGNhbiAgYWxzbyBiZSB1c2VkIHdpdGggdGhlIERGQSBtYXRjaGluZworICAgICAgIGZ1bmN0aW9uLiBBbm90aGVyIHBvc3NpYmlsaXR5IGlzIHRvIHdvcmsgd2l0aCB0d28gYnVmZmVycy4gSWYgYSBwYXJ0aWFsCisgICAgICAgbWF0Y2ggIGF0ICBvZmZzZXQgIG4gaW4gdGhlIGZpcnN0IGJ1ZmZlciBpcyBmb2xsb3dlZCBieSAibm8gbWF0Y2giIHdoZW4KKyAgICAgICBQQ1JFMl9ERkFfUkVTVEFSVCBpcyB1c2VkIG9uIHRoZSBzZWNvbmQgYnVmZmVyLCB5b3UgY2FuIHRoZW4gdHJ5IGEgIG5ldworICAgICAgIG1hdGNoIHN0YXJ0aW5nIGF0IG9mZnNldCBuKzEgaW4gdGhlIGZpcnN0IGJ1ZmZlci4KKworCitBVVRIT1IKKworICAgICAgIFBoaWxpcCBIYXplbAorICAgICAgIFVuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKyAgICAgICBDYW1icmlkZ2UsIEVuZ2xhbmQuCisKKworUkVWSVNJT04KKworICAgICAgIExhc3QgdXBkYXRlZDogMjIgRGVjZW1iZXIgMjAxNAorICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDE0IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworUENSRTJQQVRURVJOKDMpICAgICAgICAgICAgTGlicmFyeSBGdW5jdGlvbnMgTWFudWFsICAgICAgICAgICAgUENSRTJQQVRURVJOKDMpCisKKworCitOQU1FCisgICAgICAgUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisKK1BDUkUyIFJFR1VMQVIgRVhQUkVTU0lPTiBERVRBSUxTCisKKyAgICAgICBUaGUgIHN5bnRheCBhbmQgc2VtYW50aWNzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgYXJlIHN1cHBvcnRlZAorICAgICAgIGJ5IFBDUkUyIGFyZSBkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93LiBUaGVyZSBpcyBhIHF1aWNrLXJlZmVyZW5jZSBzeW4tCisgICAgICAgdGF4ICBzdW1tYXJ5ICBpbiB0aGUgcGNyZTJzeW50YXggcGFnZS4gUENSRTIgdHJpZXMgdG8gbWF0Y2ggUGVybCBzeW50YXgKKyAgICAgICBhbmQgc2VtYW50aWNzIGFzIGNsb3NlbHkgYXMgaXQgY2FuLiAgUENSRTIgYWxzbyBzdXBwb3J0cyBzb21lICBhbHRlcm5hLQorICAgICAgIHRpdmUgIHJlZ3VsYXIgIGV4cHJlc3Npb24gc3ludGF4ICh3aGljaCBkb2VzIG5vdCBjb25mbGljdCB3aXRoIHRoZSBQZXJsCisgICAgICAgc3ludGF4KSBpbiBvcmRlciB0byBwcm92aWRlIHNvbWUgY29tcGF0aWJpbGl0eSB3aXRoIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAgICAgICBpbiBQeXRob24sIC5ORVQsIGFuZCBPbmlndXJ1bWEuCisKKyAgICAgICBQZXJsJ3MgIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGRlc2NyaWJlZCBpbiBpdHMgb3duIGRvY3VtZW50YXRpb24sIGFuZAorICAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gZ2VuZXJhbCBhcmUgY292ZXJlZCBpbiBhIG51bWJlciBvZiAgYm9va3MsICBzb21lCisgICAgICAgb2YgIHdoaWNoICBoYXZlICBjb3Bpb3VzICBleGFtcGxlcy4gSmVmZnJleSBGcmllZGwncyAiTWFzdGVyaW5nIFJlZ3VsYXIKKyAgICAgICBFeHByZXNzaW9ucyIsIHB1Ymxpc2hlZCBieSAgTydSZWlsbHksICBjb3ZlcnMgIHJlZ3VsYXIgIGV4cHJlc3Npb25zICBpbgorICAgICAgIGdyZWF0ICBkZXRhaWwuICBUaGlzICBkZXNjcmlwdGlvbiAgb2YgIFBDUkUyJ3MgIHJlZ3VsYXIgIGV4cHJlc3Npb25zIGlzCisgICAgICAgaW50ZW5kZWQgYXMgcmVmZXJlbmNlIG1hdGVyaWFsLgorCisgICAgICAgVGhpcyBkb2N1bWVudCBkaXNjdXNzZXMgdGhlIHBhdHRlcm5zIHRoYXQgYXJlIHN1cHBvcnRlZCBieSAgUENSRTIgIHdoZW4KKyAgICAgICBpdHMgIG1haW4gIG1hdGNoaW5nIGZ1bmN0aW9uLCBwY3JlMl9tYXRjaCgpLCBpcyB1c2VkLiBQQ1JFMiBhbHNvIGhhcyBhbgorICAgICAgIGFsdGVybmF0aXZlIG1hdGNoaW5nIGZ1bmN0aW9uLCBwY3JlMl9kZmFfbWF0Y2goKSwgd2hpY2ggbWF0Y2hlcyB1c2luZyBhCisgICAgICAgZGlmZmVyZW50ICBhbGdvcml0aG0gIHRoYXQgaXMgbm90IFBlcmwtY29tcGF0aWJsZS4gU29tZSBvZiB0aGUgZmVhdHVyZXMKKyAgICAgICBkaXNjdXNzZWQgYmVsb3cgYXJlIG5vdCBhdmFpbGFibGUgd2hlbiBERkEgbWF0Y2hpbmcgaXMgdXNlZC4gVGhlIGFkdmFuLQorICAgICAgIHRhZ2VzIGFuZCBkaXNhZHZhbnRhZ2VzIG9mIHRoZSBhbHRlcm5hdGl2ZSBmdW5jdGlvbiwgYW5kIGhvdyBpdCBkaWZmZXJzCisgICAgICAgZnJvbSB0aGUgbm9ybWFsIGZ1bmN0aW9uLCBhcmUgZGlzY3Vzc2VkIGluIHRoZSBwY3JlMm1hdGNoaW5nIHBhZ2UuCisKKworU1BFQ0lBTCBTVEFSVC1PRi1QQVRURVJOIElURU1TCisKKyAgICAgICBBIG51bWJlciBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBwY3JlMl9jb21waWxlKCkgY2FuICBhbHNvICBiZQorICAgICAgIHNldCBieSBzcGVjaWFsIGl0ZW1zIGF0IHRoZSBzdGFydCBvZiBhIHBhdHRlcm4uIFRoZXNlIGFyZSBub3QgUGVybC1jb20tCisgICAgICAgcGF0aWJsZSwgYnV0IGFyZSBwcm92aWRlZCB0byBtYWtlIHRoZXNlIG9wdGlvbnMgYWNjZXNzaWJsZSAgdG8gIHBhdHRlcm4KKyAgICAgICB3cml0ZXJzICB3aG8gYXJlIG5vdCBhYmxlIHRvIGNoYW5nZSB0aGUgcHJvZ3JhbSB0aGF0IHByb2Nlc3NlcyB0aGUgcGF0LQorICAgICAgIHRlcm4uIEFueSBudW1iZXIgb2YgdGhlc2UgaXRlbXMgIG1heSAgYXBwZWFyLCAgYnV0ICB0aGV5ICBtdXN0ICBhbGwgIGJlCisgICAgICAgdG9nZXRoZXIgcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIHN0cmluZywgYW5kIHRoZSBsZXR0ZXJzIG11c3QKKyAgICAgICBiZSBpbiB1cHBlciBjYXNlLgorCisgICBVVEYgc3VwcG9ydAorCisgICAgICAgSW4gdGhlIDgtYml0IGFuZCAxNi1iaXQgUENSRTIgbGlicmFyaWVzLCBjaGFyYWN0ZXJzIG1heSBiZSBjb2RlZCBlaXRoZXIKKyAgICAgICBhcyBzaW5nbGUgY29kZSB1bml0cywgb3IgYXMgbXVsdGlwbGUgVVRGLTggb3IgVVRGLTE2IGNvZGUgdW5pdHMuIFVURi0zMgorICAgICAgIGNhbiBiZSBzcGVjaWZpZWQgZm9yIHRoZSAzMi1iaXQgbGlicmFyeSwgaW4gd2hpY2ggIGNhc2UgIGl0ICBjb25zdHJhaW5zCisgICAgICAgdGhlICBjaGFyYWN0ZXIgIHZhbHVlcyAgdG8gIHZhbGlkICBVbmljb2RlICBjb2RlIHBvaW50cy4gVG8gcHJvY2VzcyBVVEYKKyAgICAgICBzdHJpbmdzLCBQQ1JFMiBtdXN0IGJlIGJ1aWx0IHRvIGluY2x1ZGUgVW5pY29kZSBzdXBwb3J0ICh3aGljaCAgaXMgIHRoZQorICAgICAgIGRlZmF1bHQpLiAgV2hlbiAgdXNpbmcgIFVURiAgc3RyaW5ncyB5b3UgbXVzdCBlaXRoZXIgY2FsbCB0aGUgY29tcGlsaW5nCisgICAgICAgZnVuY3Rpb24gd2l0aCB0aGUgUENSRTJfVVRGIG9wdGlvbiwgb3IgdGhlIHBhdHRlcm4gbXVzdCBzdGFydCB3aXRoICB0aGUKKyAgICAgICBzcGVjaWFsICBzZXF1ZW5jZSAgKCpVVEYpLCAgd2hpY2ggaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIHRoZSByZWxldmFudAorICAgICAgIG9wdGlvbi4gSG93IHNldHRpbmcgYSBVVEYgbW9kZSBhZmZlY3RzIHBhdHRlcm4gbWF0Y2hpbmcgaXMgbWVudGlvbmVkIGluCisgICAgICAgc2V2ZXJhbCAgcGxhY2VzICBiZWxvdy4gIFRoZXJlICBpcyAgYWxzbyAgYSAgc3VtbWFyeSBvZiBmZWF0dXJlcyBpbiB0aGUKKyAgICAgICBwY3JlMnVuaWNvZGUgcGFnZS4KKworICAgICAgIFNvbWUgYXBwbGljYXRpb25zIHRoYXQgYWxsb3cgdGhlaXIgdXNlcnMgdG8gc3VwcGx5IHBhdHRlcm5zIG1heSB3aXNoIHRvCisgICAgICAgcmVzdHJpY3QgICB0aGVtICAgdG8gICBub24tVVRGICAgZGF0YSAgZm9yICBzZWN1cml0eSAgcmVhc29ucy4gIElmICB0aGUKKyAgICAgICBQQ1JFMl9ORVZFUl9VVEYgb3B0aW9uIGlzIHBhc3NlZCAgdG8gIHBjcmUyX2NvbXBpbGUoKSwgICgqVVRGKSAgaXMgIG5vdAorICAgICAgIGFsbG93ZWQsIGFuZCBpdHMgYXBwZWFyYW5jZSBpbiBhIHBhdHRlcm4gY2F1c2VzIGFuIGVycm9yLgorCisgICBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQKKworICAgICAgIEFub3RoZXIgIHNwZWNpYWwgIHNlcXVlbmNlIHRoYXQgbWF5IGFwcGVhciBhdCB0aGUgc3RhcnQgb2YgYSBwYXR0ZXJuIGlzCisgICAgICAgKCpVQ1ApLiAgVGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHNldHRpbmcgdGhlIFBDUkUyX1VDUCAgb3B0aW9uOiAgaXQKKyAgICAgICBjYXVzZXMgIHNlcXVlbmNlcyBzdWNoIGFzIFxkIGFuZCBcdyB0byB1c2UgVW5pY29kZSBwcm9wZXJ0aWVzIHRvIGRldGVyLQorICAgICAgIG1pbmUgY2hhcmFjdGVyIHR5cGVzLCBpbnN0ZWFkIG9mIHJlY29nbml6aW5nIG9ubHkgY2hhcmFjdGVycyB3aXRoIGNvZGVzCisgICAgICAgbGVzcyB0aGFuIDI1NiB2aWEgYSBsb29rdXAgdGFibGUuCisKKyAgICAgICBTb21lIGFwcGxpY2F0aW9ucyB0aGF0IGFsbG93IHRoZWlyIHVzZXJzIHRvIHN1cHBseSBwYXR0ZXJucyBtYXkgd2lzaCB0bworICAgICAgIHJlc3RyaWN0IHRoZW0gZm9yIHNlY3VyaXR5IHJlYXNvbnMuIElmIHRoZSAgUENSRTJfTkVWRVJfVUNQICBvcHRpb24gIGlzCisgICAgICAgcGFzc2VkIHRvIHBjcmUyX2NvbXBpbGUoKSwgKCpVQ1ApIGlzIG5vdCBhbGxvd2VkLCBhbmQgaXRzIGFwcGVhcmFuY2UgaW4KKyAgICAgICBhIHBhdHRlcm4gY2F1c2VzIGFuIGVycm9yLgorCisgICBMb2NraW5nIG91dCBlbXB0eSBzdHJpbmcgbWF0Y2hpbmcKKworICAgICAgIFN0YXJ0aW5nIGEgcGF0dGVybiB3aXRoICgqTk9URU1QVFkpIG9yICgqTk9URU1QVFlfQVRTVEFSVCkgaGFzIHRoZSBzYW1lCisgICAgICAgZWZmZWN0ICBhcyAgcGFzc2luZyB0aGUgUENSRTJfTk9URU1QVFkgb3IgUENSRTJfTk9URU1QVFlfQVRTVEFSVCBvcHRpb24KKyAgICAgICB0byB3aGljaGV2ZXIgbWF0Y2hpbmcgZnVuY3Rpb24gaXMgc3Vic2VxdWVudGx5IGNhbGxlZCB0byBtYXRjaCB0aGUgcGF0LQorICAgICAgIHRlcm4uICBUaGVzZSAgb3B0aW9ucyAgbG9jayAgb3V0ICB0aGUgbWF0Y2hpbmcgb2YgZW1wdHkgc3RyaW5ncywgZWl0aGVyCisgICAgICAgZW50aXJlbHksIG9yIG9ubHkgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0LgorCisgICBEaXNhYmxpbmcgYXV0by1wb3NzZXNzaWZpY2F0aW9uCisKKyAgICAgICBJZiBhIHBhdHRlcm4gc3RhcnRzIHdpdGggKCpOT19BVVRPX1BPU1NFU1MpLCBpdCBoYXMgdGhlIHNhbWUgZWZmZWN0ICBhcworICAgICAgIHNldHRpbmcgIHRoZSBQQ1JFMl9OT19BVVRPX1BPU1NFU1Mgb3B0aW9uLiBUaGlzIHN0b3BzIFBDUkUyIGZyb20gbWFraW5nCisgICAgICAgcXVhbnRpZmllcnMgcG9zc2Vzc2l2ZSB3aGVuIHdoYXQgIGZvbGxvd3MgIGNhbm5vdCAgbWF0Y2ggIHRoZSAgcmVwZWF0ZWQKKyAgICAgICBpdGVtLiBGb3IgZXhhbXBsZSwgYnkgZGVmYXVsdCBhK2IgaXMgdHJlYXRlZCBhcyBhKytiLiBGb3IgbW9yZSBkZXRhaWxzLAorICAgICAgIHNlZSB0aGUgcGNyZTJhcGkgZG9jdW1lbnRhdGlvbi4KKworICAgRGlzYWJsaW5nIHN0YXJ0LXVwIG9wdGltaXphdGlvbnMKKworICAgICAgIElmIGEgcGF0dGVybiBzdGFydHMgd2l0aCAoKk5PX1NUQVJUX09QVCksIGl0IGhhcyAgdGhlICBzYW1lICBlZmZlY3QgIGFzCisgICAgICAgc2V0dGluZyB0aGUgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUgb3B0aW9uLiBUaGlzIGRpc2FibGVzIHNldmVyYWwgb3B0aS0KKyAgICAgICBtaXphdGlvbnMgZm9yIHF1aWNrbHkgcmVhY2hpbmcgIm5vIG1hdGNoIiByZXN1bHRzLiAgRm9yICBtb3JlICBkZXRhaWxzLAorICAgICAgIHNlZSB0aGUgcGNyZTJhcGkgZG9jdW1lbnRhdGlvbi4KKworICAgRGlzYWJsaW5nIGF1dG9tYXRpYyBhbmNob3JpbmcKKworICAgICAgIElmICBhICBwYXR0ZXJuIHN0YXJ0cyB3aXRoICgqTk9fRE9UU1RBUl9BTkNIT1IpLCBpdCBoYXMgdGhlIHNhbWUgZWZmZWN0CisgICAgICAgYXMgc2V0dGluZyB0aGUgUENSRTJfTk9fRE9UU1RBUl9BTkNIT1Igb3B0aW9uLiBUaGlzIGRpc2FibGVzICBvcHRpbWl6YS0KKyAgICAgICB0aW9ucyB0aGF0IGFwcGx5IHRvIHBhdHRlcm5zIHdob3NlIHRvcC1sZXZlbCBicmFuY2hlcyBhbGwgc3RhcnQgd2l0aCAuKgorICAgICAgIChtYXRjaCBhbnkgbnVtYmVyIG9mIGFyYml0cmFyeSBjaGFyYWN0ZXJzKS4gRm9yIG1vcmUgZGV0YWlscywgIHNlZSAgdGhlCisgICAgICAgcGNyZTJhcGkgZG9jdW1lbnRhdGlvbi4KKworICAgRGlzYWJsaW5nIEpJVCBjb21waWxhdGlvbgorCisgICAgICAgSWYgIGEgIHBhdHRlcm4gIHRoYXQgc3RhcnRzIHdpdGggKCpOT19KSVQpIGlzIHN1Y2Nlc3NmdWxseSBjb21waWxlZCwgYW4KKyAgICAgICBhdHRlbXB0IGJ5IHRoZSBhcHBsaWNhdGlvbiB0byBhcHBseSB0aGUgIEpJVCAgb3B0aW1pemF0aW9uICBieSAgY2FsbGluZworICAgICAgIHBjcmUyX2ppdF9jb21waWxlKCkgaXMgaWdub3JlZC4KKworICAgU2V0dGluZyBtYXRjaCBhbmQgcmVjdXJzaW9uIGxpbWl0cworCisgICAgICAgVGhlICBjYWxsZXIgb2YgcGNyZTJfbWF0Y2goKSBjYW4gc2V0IGEgbGltaXQgb24gdGhlIG51bWJlciBvZiB0aW1lcyB0aGUKKyAgICAgICBpbnRlcm5hbCBtYXRjaCgpIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgb24gdGhlIG1heGltdW0gZGVwdGggb2YgIHJlY3VyLQorICAgICAgIHNpdmUgY2FsbHMuIFRoZXNlIGZhY2lsaXRpZXMgYXJlIHByb3ZpZGVkIHRvIGNhdGNoIHJ1bmF3YXkgbWF0Y2hlcyB0aGF0CisgICAgICAgYXJlIHByb3Zva2VkIGJ5IHBhdHRlcm5zIHdpdGggaHVnZSBtYXRjaGluZyB0cmVlcyAoYSB0eXBpY2FsIGV4YW1wbGUgaXMKKyAgICAgICBhICBwYXR0ZXJuICB3aXRoICBuZXN0ZWQgdW5saW1pdGVkIHJlcGVhdHMpIGFuZCB0byBhdm9pZCBydW5uaW5nIG91dCBvZgorICAgICAgIHN5c3RlbSBzdGFjayBieSB0b28gIG11Y2ggIHJlY3Vyc2lvbi4gIFdoZW4gIG9uZSAgb2YgIHRoZXNlICBsaW1pdHMgIGlzCisgICAgICAgcmVhY2hlZCwgIHBjcmUyX21hdGNoKCkgIGdpdmVzICBhbiBlcnJvciByZXR1cm4uIFRoZSBsaW1pdHMgY2FuIGFsc28gYmUKKyAgICAgICBzZXQgYnkgaXRlbXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIG9mIHRoZSBmb3JtCisKKyAgICAgICAgICgqTElNSVRfTUFUQ0g9ZCkKKyAgICAgICAgICgqTElNSVRfUkVDVVJTSU9OPWQpCisKKyAgICAgICB3aGVyZSBkIGlzIGFueSBudW1iZXIgb2YgZGVjaW1hbCBkaWdpdHMuIEhvd2V2ZXIsIHRoZSB2YWx1ZSBvZiB0aGUgc2V0LQorICAgICAgIHRpbmcgIG11c3QgIGJlICBsZXNzIHRoYW4gdGhlIHZhbHVlIHNldCAob3IgZGVmYXVsdGVkKSBieSB0aGUgY2FsbGVyIG9mCisgICAgICAgcGNyZTJfbWF0Y2goKSBmb3IgaXQgdG8gaGF2ZSBhbnkgZWZmZWN0LiBJbiBvdGhlciAgd29yZHMsICB0aGUgIHBhdHRlcm4KKyAgICAgICB3cml0ZXIgIGNhbiBsb3dlciB0aGUgbGltaXRzIHNldCBieSB0aGUgcHJvZ3JhbW1lciwgYnV0IG5vdCByYWlzZSB0aGVtLgorICAgICAgIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgc2V0dGluZyBvZiBvbmUgb2YgIHRoZXNlICBsaW1pdHMsICB0aGUgIGxvd2VyCisgICAgICAgdmFsdWUgaXMgdXNlZC4KKworICAgTmV3bGluZSBjb252ZW50aW9ucworCisgICAgICAgUENSRTIgc3VwcG9ydHMgZml2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgZm9yIGluZGljYXRpbmcgbGluZSBicmVha3MgaW4KKyAgICAgICBzdHJpbmdzOiBhIHNpbmdsZSBDUiAoY2FycmlhZ2UgcmV0dXJuKSBjaGFyYWN0ZXIsIGEgIHNpbmdsZSAgTEYgIChsaW5lLQorICAgICAgIGZlZWQpIGNoYXJhY3RlciwgdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiwgYW55IG9mIHRoZSB0aHJlZSBwcmUtCisgICAgICAgY2VkaW5nLCBvciBhbnkgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlLiBUaGUgcGNyZTJhcGkgcGFnZSBoYXMgIGZ1cnRoZXIKKyAgICAgICBkaXNjdXNzaW9uICBhYm91dCBuZXdsaW5lcywgYW5kIHNob3dzIGhvdyB0byBzZXQgdGhlIG5ld2xpbmUgY29udmVudGlvbgorICAgICAgIHdoZW4gY2FsbGluZyBwY3JlMl9jb21waWxlKCkuCisKKyAgICAgICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgYSBuZXdsaW5lIGNvbnZlbnRpb24gYnkgc3RhcnRpbmcgYSAgcGF0LQorICAgICAgIHRlcm4gc3RyaW5nIHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgZml2ZSBzZXF1ZW5jZXM6CisKKyAgICAgICAgICgqQ1IpICAgICAgICBjYXJyaWFnZSByZXR1cm4KKyAgICAgICAgICgqTEYpICAgICAgICBsaW5lZmVlZAorICAgICAgICAgKCpDUkxGKSAgICAgIGNhcnJpYWdlIHJldHVybiwgZm9sbG93ZWQgYnkgbGluZWZlZWQKKyAgICAgICAgICgqQU5ZQ1JMRikgICBhbnkgb2YgdGhlIHRocmVlIGFib3ZlCisgICAgICAgICAoKkFOWSkgICAgICAgYWxsIFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZXMKKworICAgICAgIFRoZXNlIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGFuZCB0aGUgb3B0aW9ucyBnaXZlbiB0byB0aGUgY29tcGlsaW5nIGZ1bmMtCisgICAgICAgdGlvbi4gRm9yIGV4YW1wbGUsIG9uIGEgVW5peCBzeXN0ZW0gd2hlcmUgTEYgIGlzICB0aGUgIGRlZmF1bHQgIG5ld2xpbmUKKyAgICAgICBzZXF1ZW5jZSwgdGhlIHBhdHRlcm4KKworICAgICAgICAgKCpDUilhLmIKKworICAgICAgIGNoYW5nZXMgdGhlIGNvbnZlbnRpb24gdG8gQ1IuIFRoYXQgcGF0dGVybiBtYXRjaGVzICJhXG5iIiBiZWNhdXNlIExGIGlzCisgICAgICAgbm8gbG9uZ2VyIGEgbmV3bGluZS4gSWYgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBzZXR0aW5ncyBpcyBwcmVzZW50LCB0aGUKKyAgICAgICBsYXN0IG9uZSBpcyB1c2VkLgorCisgICAgICAgVGhlICBuZXdsaW5lICBjb252ZW50aW9uIGFmZmVjdHMgd2hlcmUgdGhlIGNpcmN1bWZsZXggYW5kIGRvbGxhciBhc3Nlci0KKyAgICAgICB0aW9ucyBhcmUgdHJ1ZS4gSXQgYWxzbyBhZmZlY3RzIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgZG90IG1ldGFjaGFyLQorICAgICAgIGFjdGVyICB3aGVuICBQQ1JFMl9ET1RBTEwgaXMgbm90IHNldCwgYW5kIHRoZSBiZWhhdmlvdXIgb2YgXE4uIEhvd2V2ZXIsCisgICAgICAgaXQgZG9lcyBub3QgYWZmZWN0IHdoYXQgdGhlIFxSIGVzY2FwZSAgc2VxdWVuY2UgIG1hdGNoZXMuICBCeSAgZGVmYXVsdCwKKyAgICAgICB0aGlzICBpcyBhbnkgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlLCBmb3IgUGVybCBjb21wYXRpYmlsaXR5LiBIb3dldmVyLAorICAgICAgIHRoaXMgY2FuIGJlIGNoYW5nZWQ7IHNlZSB0aGUgZGVzY3JpcHRpb24gb2YgXFIgaW4gdGhlIHNlY3Rpb24gIGVudGl0bGVkCisgICAgICAgIk5ld2xpbmUgIHNlcXVlbmNlcyIgYmVsb3cuIEEgY2hhbmdlIG9mIFxSIHNldHRpbmcgY2FuIGJlIGNvbWJpbmVkIHdpdGgKKyAgICAgICBhIGNoYW5nZSBvZiBuZXdsaW5lIGNvbnZlbnRpb24uCisKKyAgIFNwZWNpZnlpbmcgd2hhdCBcUiBtYXRjaGVzCisKKyAgICAgICBJdCBpcyBwb3NzaWJsZSB0byByZXN0cmljdCBcUiB0byBtYXRjaCBvbmx5IENSLCBMRiwgb3IgQ1JMRiAoaW5zdGVhZCBvZgorICAgICAgIHRoZSAgY29tcGxldGUgIHNldCAgb2YgIFVuaWNvZGUgIGxpbmUgIGVuZGluZ3MpICBieSAgc2V0dGluZyB0aGUgb3B0aW9uCisgICAgICAgUENSRTJfQlNSX0FOWUNSTEYgYXQgY29tcGlsZSB0aW1lLiBUaGlzIGVmZmVjdCBjYW4gYWxzbyBiZSBhY2hpZXZlZCAgYnkKKyAgICAgICBzdGFydGluZyAgYSAgcGF0dGVybiAgd2l0aCAoKkJTUl9BTllDUkxGKS4gRm9yIGNvbXBsZXRlbmVzcywgKCpCU1JfVU5JLQorICAgICAgIENPREUpIGlzIGFsc28gcmVjb2duaXplZCwgY29ycmVzcG9uZGluZyB0byBQQ1JFMl9CU1JfVU5JQ09ERS4KKworCitFQkNESUMgQ0hBUkFDVEVSIENPREVTCisKKyAgICAgICBQQ1JFMiBjYW4gYmUgY29tcGlsZWQgdG8gcnVuIGluIGFuIGVudmlyb25tZW50IHRoYXQgdXNlcyBFQkNESUMgYXMgIGl0cworICAgICAgIGNoYXJhY3RlciBjb2RlIHJhdGhlciB0aGFuIEFTQ0lJIG9yIFVuaWNvZGUgKHR5cGljYWxseSBhIG1haW5mcmFtZSBzeXMtCisgICAgICAgdGVtKS4gSW4gdGhlIHNlY3Rpb25zIGJlbG93LCBjaGFyYWN0ZXIgY29kZSB2YWx1ZXMgYXJlICBBU0NJSSAgb3IgIFVuaS0KKyAgICAgICBjb2RlOyBpbiBhbiBFQkNESUMgZW52aXJvbm1lbnQgdGhlc2UgY2hhcmFjdGVycyBtYXkgaGF2ZSBkaWZmZXJlbnQgY29kZQorICAgICAgIHZhbHVlcywgYW5kIHRoZXJlIGFyZSBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gMjU1LgorCisKK0NIQVJBQ1RFUlMgQU5EIE1FVEFDSEFSQUNURVJTCisKKyAgICAgICBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBhIHBhdHRlcm4gdGhhdCBpcyAgbWF0Y2hlZCAgYWdhaW5zdCAgYSAgc3ViamVjdAorICAgICAgIHN0cmluZyAgZnJvbSAgbGVmdCAgdG8gcmlnaHQuIE1vc3QgY2hhcmFjdGVycyBzdGFuZCBmb3IgdGhlbXNlbHZlcyBpbiBhCisgICAgICAgcGF0dGVybiwgYW5kIG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMgaW4gdGhlICBzdWJqZWN0LiAgQXMgIGEKKyAgICAgICB0cml2aWFsIGV4YW1wbGUsIHRoZSBwYXR0ZXJuCisKKyAgICAgICAgIFRoZSBxdWljayBicm93biBmb3gKKworICAgICAgIG1hdGNoZXMgYSBwb3J0aW9uIG9mIGEgc3ViamVjdCBzdHJpbmcgdGhhdCBpcyBpZGVudGljYWwgdG8gaXRzZWxmLiBXaGVuCisgICAgICAgY2FzZWxlc3MgbWF0Y2hpbmcgaXMgc3BlY2lmaWVkICh0aGUgUENSRTJfQ0FTRUxFU1Mgb3B0aW9uKSwgbGV0dGVycyBhcmUKKyAgICAgICBtYXRjaGVkIGluZGVwZW5kZW50bHkgb2YgY2FzZS4KKworICAgICAgIFRoZSAgcG93ZXIgIG9mICByZWd1bGFyICBleHByZXNzaW9ucyAgY29tZXMgZnJvbSB0aGUgYWJpbGl0eSB0byBpbmNsdWRlCisgICAgICAgYWx0ZXJuYXRpdmVzIGFuZCByZXBldGl0aW9ucyBpbiB0aGUgcGF0dGVybi4gVGhlc2UgYXJlIGVuY29kZWQgIGluICB0aGUKKyAgICAgICBwYXR0ZXJuIGJ5IHRoZSB1c2Ugb2YgbWV0YWNoYXJhY3RlcnMsIHdoaWNoIGRvIG5vdCBzdGFuZCBmb3IgdGhlbXNlbHZlcworICAgICAgIGJ1dCBpbnN0ZWFkIGFyZSBpbnRlcnByZXRlZCBpbiBzb21lIHNwZWNpYWwgd2F5LgorCisgICAgICAgVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQgc2V0cyBvZiBtZXRhY2hhcmFjdGVyczogdGhvc2UgdGhhdCAgYXJlICByZWNvZy0KKyAgICAgICBuaXplZCAgYW55d2hlcmUgaW4gdGhlIHBhdHRlcm4gZXhjZXB0IHdpdGhpbiBzcXVhcmUgYnJhY2tldHMsIGFuZCB0aG9zZQorICAgICAgIHRoYXQgYXJlIHJlY29nbml6ZWQgd2l0aGluIHNxdWFyZSBicmFja2V0cy4gIE91dHNpZGUgIHNxdWFyZSAgYnJhY2tldHMsCisgICAgICAgdGhlIG1ldGFjaGFyYWN0ZXJzIGFyZSBhcyBmb2xsb3dzOgorCisgICAgICAgICBcICAgICAgZ2VuZXJhbCBlc2NhcGUgY2hhcmFjdGVyIHdpdGggc2V2ZXJhbCB1c2VzCisgICAgICAgICBeICAgICAgYXNzZXJ0IHN0YXJ0IG9mIHN0cmluZyAob3IgbGluZSwgaW4gbXVsdGlsaW5lIG1vZGUpCisgICAgICAgICAkICAgICAgYXNzZXJ0IGVuZCBvZiBzdHJpbmcgKG9yIGxpbmUsIGluIG11bHRpbGluZSBtb2RlKQorICAgICAgICAgLiAgICAgIG1hdGNoIGFueSBjaGFyYWN0ZXIgZXhjZXB0IG5ld2xpbmUgKGJ5IGRlZmF1bHQpCisgICAgICAgICBbICAgICAgc3RhcnQgY2hhcmFjdGVyIGNsYXNzIGRlZmluaXRpb24KKyAgICAgICAgIHwgICAgICBzdGFydCBvZiBhbHRlcm5hdGl2ZSBicmFuY2gKKyAgICAgICAgICggICAgICBzdGFydCBzdWJwYXR0ZXJuCisgICAgICAgICApICAgICAgZW5kIHN1YnBhdHRlcm4KKyAgICAgICAgID8gICAgICBleHRlbmRzIHRoZSBtZWFuaW5nIG9mICgKKyAgICAgICAgICAgICAgICBhbHNvIDAgb3IgMSBxdWFudGlmaWVyCisgICAgICAgICAgICAgICAgYWxzbyBxdWFudGlmaWVyIG1pbmltaXplcgorICAgICAgICAgKiAgICAgIDAgb3IgbW9yZSBxdWFudGlmaWVyCisgICAgICAgICArICAgICAgMSBvciBtb3JlIHF1YW50aWZpZXIKKyAgICAgICAgICAgICAgICBhbHNvICJwb3NzZXNzaXZlIHF1YW50aWZpZXIiCisgICAgICAgICB7ICAgICAgc3RhcnQgbWluL21heCBxdWFudGlmaWVyCisKKyAgICAgICBQYXJ0ICBvZiAgYSAgcGF0dGVybiAgdGhhdCBpcyBpbiBzcXVhcmUgYnJhY2tldHMgaXMgY2FsbGVkIGEgImNoYXJhY3RlcgorICAgICAgIGNsYXNzIi4gSW4gYSBjaGFyYWN0ZXIgY2xhc3MgdGhlIG9ubHkgbWV0YWNoYXJhY3RlcnMgYXJlOgorCisgICAgICAgICBcICAgICAgZ2VuZXJhbCBlc2NhcGUgY2hhcmFjdGVyCisgICAgICAgICBeICAgICAgbmVnYXRlIHRoZSBjbGFzcywgYnV0IG9ubHkgaWYgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgICAgICAgLSAgICAgIGluZGljYXRlcyBjaGFyYWN0ZXIgcmFuZ2UKKyAgICAgICAgIFsgICAgICBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MgKG9ubHkgaWYgZm9sbG93ZWQgYnkgUE9TSVgKKyAgICAgICAgICAgICAgICAgIHN5bnRheCkKKyAgICAgICAgIF0gICAgICB0ZXJtaW5hdGVzIHRoZSBjaGFyYWN0ZXIgY2xhc3MKKworICAgICAgIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIHVzZSBvZiBlYWNoIG9mIHRoZSBtZXRhY2hhcmFjdGVycy4KKworCitCQUNLU0xBU0gKKworICAgICAgIFRoZSBiYWNrc2xhc2ggY2hhcmFjdGVyIGhhcyBzZXZlcmFsIHVzZXMuIEZpcnN0bHksIGlmIGl0IGlzIGZvbGxvd2VkIGJ5CisgICAgICAgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSBudW1iZXIgb3IgYSBsZXR0ZXIsIGl0IHRha2VzIGF3YXkgYW55IHNwZWNpYWwKKyAgICAgICBtZWFuaW5nIHRoYXQgY2hhcmFjdGVyIG1heSBoYXZlLiBUaGlzIHVzZSBvZiAgYmFja3NsYXNoICBhcyAgYW4gIGVzY2FwZQorICAgICAgIGNoYXJhY3RlciBhcHBsaWVzIGJvdGggaW5zaWRlIGFuZCBvdXRzaWRlIGNoYXJhY3RlciBjbGFzc2VzLgorCisgICAgICAgRm9yICBleGFtcGxlLCAgaWYgIHlvdSB3YW50IHRvIG1hdGNoIGEgKiBjaGFyYWN0ZXIsIHlvdSB3cml0ZSBcKiBpbiB0aGUKKyAgICAgICBwYXR0ZXJuLiAgVGhpcyBlc2NhcGluZyBhY3Rpb24gYXBwbGllcyB3aGV0aGVyICBvciAgbm90ICB0aGUgIGZvbGxvd2luZworICAgICAgIGNoYXJhY3RlciAgd291bGQgIG90aGVyd2lzZSBiZSBpbnRlcnByZXRlZCBhcyBhIG1ldGFjaGFyYWN0ZXIsIHNvIGl0IGlzCisgICAgICAgYWx3YXlzIHNhZmUgdG8gcHJlY2VkZSBhIG5vbi1hbHBoYW51bWVyaWMgIHdpdGggIGJhY2tzbGFzaCAgdG8gIHNwZWNpZnkKKyAgICAgICB0aGF0ICBpdCBzdGFuZHMgZm9yIGl0c2VsZi4gSW4gcGFydGljdWxhciwgaWYgeW91IHdhbnQgdG8gbWF0Y2ggYSBiYWNrLQorICAgICAgIHNsYXNoLCB5b3Ugd3JpdGUgXFwuCisKKyAgICAgICBJbiBhIFVURiBtb2RlLCBvbmx5IEFTQ0lJIG51bWJlcnMgYW5kIGxldHRlcnMgaGF2ZSBhbnkgc3BlY2lhbCAgbWVhbmluZworICAgICAgIGFmdGVyICBhICBiYWNrc2xhc2guICBBbGwgIG90aGVyIGNoYXJhY3RlcnMgKGluIHBhcnRpY3VsYXIsIHRob3NlIHdob3NlCisgICAgICAgY29kZXBvaW50cyBhcmUgZ3JlYXRlciB0aGFuIDEyNykgYXJlIHRyZWF0ZWQgYXMgbGl0ZXJhbHMuCisKKyAgICAgICBJZiBhIHBhdHRlcm4gaXMgY29tcGlsZWQgd2l0aCB0aGUgIFBDUkUyX0VYVEVOREVEICBvcHRpb24sICBtb3N0ICB3aGl0ZQorICAgICAgIHNwYWNlICBpbiB0aGUgcGF0dGVybiAob3RoZXIgdGhhbiBpbiBhIGNoYXJhY3RlciBjbGFzcyksIGFuZCBjaGFyYWN0ZXJzCisgICAgICAgYmV0d2VlbiBhICMgb3V0c2lkZSBhIGNoYXJhY3RlciBjbGFzcyBhbmQgdGhlIG5leHQgbmV3bGluZSwgIGluY2x1c2l2ZSwKKyAgICAgICBhcmUgaWdub3JlZC4gQW4gZXNjYXBpbmcgYmFja3NsYXNoIGNhbiBiZSB1c2VkIHRvIGluY2x1ZGUgYSB3aGl0ZSBzcGFjZQorICAgICAgIG9yICMgY2hhcmFjdGVyIGFzIHBhcnQgb2YgdGhlIHBhdHRlcm4uCisKKyAgICAgICBJZiB5b3Ugd2FudCB0byByZW1vdmUgdGhlIHNwZWNpYWwgbWVhbmluZyBmcm9tIGEgIHNlcXVlbmNlICBvZiAgY2hhcmFjLQorICAgICAgIHRlcnMsICB5b3UgY2FuIGRvIHNvIGJ5IHB1dHRpbmcgdGhlbSBiZXR3ZWVuIFxRIGFuZCBcRS4gVGhpcyBpcyBkaWZmZXItCisgICAgICAgZW50IGZyb20gUGVybCBpbiB0aGF0ICQgYW5kICBAICBhcmUgIGhhbmRsZWQgIGFzICBsaXRlcmFscyAgaW4gIFxRLi4uXEUKKyAgICAgICBzZXF1ZW5jZXMgIGluIFBDUkUyLCB3aGVyZWFzIGluIFBlcmwsICQgYW5kIEAgY2F1c2UgdmFyaWFibGUgaW50ZXJwb2xhLQorICAgICAgIHRpb24uIE5vdGUgdGhlIGZvbGxvd2luZyBleGFtcGxlczoKKworICAgICAgICAgUGF0dGVybiAgICAgICAgICAgIFBDUkUyIG1hdGNoZXMgICBQZXJsIG1hdGNoZXMKKworICAgICAgICAgXFFhYmMkeHl6XEUgICAgICAgIGFiYyR4eXogICAgICAgIGFiYyBmb2xsb3dlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIG9mICR4eXoKKyAgICAgICAgIFxRYWJjXCR4eXpcRSAgICAgICBhYmNcJHh5eiAgICAgICBhYmNcJHh5egorICAgICAgICAgXFFhYmNcRVwkXFF4eXpcRSAgIGFiYyR4eXogICAgICAgIGFiYyR4eXoKKworICAgICAgIFRoZSBcUS4uLlxFIHNlcXVlbmNlIGlzIHJlY29nbml6ZWQgYm90aCBpbnNpZGUgIGFuZCAgb3V0c2lkZSAgY2hhcmFjdGVyCisgICAgICAgY2xhc3Nlcy4gICBBbiAgaXNvbGF0ZWQgXEUgdGhhdCBpcyBub3QgcHJlY2VkZWQgYnkgXFEgaXMgaWdub3JlZC4gSWYgXFEKKyAgICAgICBpcyBub3QgZm9sbG93ZWQgYnkgXEUgbGF0ZXIgaW4gdGhlIHBhdHRlcm4sIHRoZSBsaXRlcmFsICBpbnRlcnByZXRhdGlvbgorICAgICAgIGNvbnRpbnVlcyAgdG8gIHRoZSAgZW5kICBvZiAgdGhlIHBhdHRlcm4gKHRoYXQgaXMsIFxFIGlzIGFzc3VtZWQgYXQgdGhlCisgICAgICAgZW5kKS4gSWYgdGhlIGlzb2xhdGVkIFxRIGlzIGluc2lkZSBhIGNoYXJhY3RlciBjbGFzcywgIHRoaXMgIGNhdXNlcyAgYW4KKyAgICAgICBlcnJvciwgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGNsYXNzIGlzIG5vdCB0ZXJtaW5hdGVkLgorCisgICBOb24tcHJpbnRpbmcgY2hhcmFjdGVycworCisgICAgICAgQSBzZWNvbmQgdXNlIG9mIGJhY2tzbGFzaCBwcm92aWRlcyBhIHdheSBvZiBlbmNvZGluZyBub24tcHJpbnRpbmcgY2hhci0KKyAgICAgICBhY3RlcnMgaW4gcGF0dGVybnMgaW4gYSB2aXNpYmxlIG1hbm5lci4gVGhlcmUgaXMgbm8gcmVzdHJpY3Rpb24gb24gIHRoZQorICAgICAgIGFwcGVhcmFuY2UgIG9mIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzIGluIGEgcGF0dGVybiwgYnV0IHdoZW4gYSBwYXR0ZXJuCisgICAgICAgaXMgYmVpbmcgcHJlcGFyZWQgYnkgdGV4dCBlZGl0aW5nLCBpdCBpcyBvZnRlbiBlYXNpZXIgdG8gdXNlIG9uZSBvZiB0aGUKKyAgICAgICBmb2xsb3dpbmcgIGVzY2FwZSBzZXF1ZW5jZXMgdGhhbiB0aGUgYmluYXJ5IGNoYXJhY3RlciBpdCByZXByZXNlbnRzLiBJbgorICAgICAgIGFuIEFTQ0lJIG9yIFVuaWNvZGUgZW52aXJvbm1lbnQsIHRoZXNlIGVzY2FwZXMgYXJlIGFzIGZvbGxvd3M6CisKKyAgICAgICAgIFxhICAgICAgICBhbGFybSwgdGhhdCBpcywgdGhlIEJFTCBjaGFyYWN0ZXIgKGhleCAwNykKKyAgICAgICAgIFxjeCAgICAgICAiY29udHJvbC14Iiwgd2hlcmUgeCBpcyBhbnkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcgorICAgICAgICAgXGUgICAgICAgIGVzY2FwZSAoaGV4IDFCKQorICAgICAgICAgXGYgICAgICAgIGZvcm0gZmVlZCAoaGV4IDBDKQorICAgICAgICAgXG4gICAgICAgIGxpbmVmZWVkIChoZXggMEEpCisgICAgICAgICBcciAgICAgICAgY2FycmlhZ2UgcmV0dXJuIChoZXggMEQpCisgICAgICAgICBcdCAgICAgICAgdGFiIChoZXggMDkpCisgICAgICAgICBcMGRkICAgICAgY2hhcmFjdGVyIHdpdGggb2N0YWwgY29kZSAwZGQKKyAgICAgICAgIFxkZGQgICAgICBjaGFyYWN0ZXIgd2l0aCBvY3RhbCBjb2RlIGRkZCwgb3IgYmFjayByZWZlcmVuY2UKKyAgICAgICAgIFxve2RkZC4ufSBjaGFyYWN0ZXIgd2l0aCBvY3RhbCBjb2RlIGRkZC4uCisgICAgICAgICBceGhoICAgICAgY2hhcmFjdGVyIHdpdGggaGV4IGNvZGUgaGgKKyAgICAgICAgIFx4e2hoaC4ufSBjaGFyYWN0ZXIgd2l0aCBoZXggY29kZSBoaGguLiAoZGVmYXVsdCBtb2RlKQorICAgICAgICAgXHVoaGhoICAgIGNoYXJhY3RlciB3aXRoIGhleCBjb2RlIGhoaGggKHdoZW4gUENSRTJfQUxUX0JTVVggaXMgc2V0KQorCisgICAgICAgVGhlIHByZWNpc2UgZWZmZWN0IG9mIFxjeCBvbiBBU0NJSSBjaGFyYWN0ZXJzIGlzIGFzIGZvbGxvd3M6IGlmIHggaXMgIGEKKyAgICAgICBsb3dlciAgY2FzZSAgbGV0dGVyLCAgaXQgIGlzIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlLiBUaGVuIGJpdCA2IG9mIHRoZQorICAgICAgIGNoYXJhY3RlciAoaGV4IDQwKSBpcyBpbnZlcnRlZC4gVGh1cyBcY0EgdG8gXGNaIGJlY29tZSBoZXggMDEgdG8gaGV4IDFBCisgICAgICAgKEEgIGlzICA0MSwgWiBpcyA1QSksIGJ1dCBcY3sgYmVjb21lcyBoZXggM0IgKHsgaXMgN0IpLCBhbmQgXGM7IGJlY29tZXMKKyAgICAgICBoZXggN0IgKDsgaXMgM0IpLiBJZiB0aGUgY29kZSB1bml0IGZvbGxvd2luZyBcYyBoYXMgYSB2YWx1ZSAgbGVzcyAgdGhhbgorICAgICAgIDMyICBvciAgZ3JlYXRlciAgdGhhbiAgMTI2LCBhIGNvbXBpbGUtdGltZSBlcnJvciBvY2N1cnMuIFRoaXMgbG9ja3Mgb3V0CisgICAgICAgbm9uLXByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzIGluIGFsbCBtb2Rlcy4KKworICAgICAgIFdoZW4gUENSRTIgaXMgY29tcGlsZWQgaW4gRUJDRElDIG1vZGUsIFxhLCBcZSwgXGYsIFxuLCBcciwgYW5kIFx0ICBnZW4tCisgICAgICAgZXJhdGUgdGhlIGFwcHJvcHJpYXRlIEVCQ0RJQyBjb2RlIHZhbHVlcy4gVGhlIFxjIGVzY2FwZSBpcyBwcm9jZXNzZWQgYXMKKyAgICAgICBzcGVjaWZpZWQgZm9yIFBlcmwgaW4gdGhlIHBlcmxlYmNkaWMgZG9jdW1lbnQuIFRoZSBvbmx5IGNoYXJhY3RlcnMgdGhhdAorICAgICAgIGFyZSAgYWxsb3dlZCAgYWZ0ZXIgIFxjIGFyZSBBLVosIGEteiwgb3Igb25lIG9mIEAsIFssIFwsIF0sIF4sIF8sIG9yID8uCisgICAgICAgQW55IG90aGVyIGNoYXJhY3RlciBwcm92b2tlcyBhICBjb21waWxlLXRpbWUgIGVycm9yLiAgVGhlICBzZXF1ZW5jZSAgXEAKKyAgICAgICBlbmNvZGVzICBjaGFyYWN0ZXIgIGNvZGUgMDsgdGhlIGxldHRlcnMgKGluIGVpdGhlciBjYXNlKSBlbmNvZGUgY2hhcmFjLQorICAgICAgIHRlcnMgMS0yNiAoaGV4IDAxIHRvIGhleCAxQSk7IFssIFwsIF0sIF4sIGFuZCBfIGVuY29kZSBjaGFyYWN0ZXJzIDI3LTMxCisgICAgICAgKGhleCAxQiB0byBoZXggMUYpLCBhbmQgXD8gYmVjb21lcyBlaXRoZXIgMjU1IChoZXggRkYpIG9yIDk1IChoZXggNUYpLgorCisgICAgICAgVGh1cywgIGFwYXJ0ICBmcm9tICBcPywgIHRoZXNlIGVzY2FwZXMgZ2VuZXJhdGUgdGhlIHNhbWUgY2hhcmFjdGVyIGNvZGUKKyAgICAgICB2YWx1ZXMgYXMgdGhleSBkbyBpbiBhbiBBU0NJSSBlbnZpcm9ubWVudCwgdGhvdWdoIHRoZSBtZWFuaW5ncyAgb2YgIHRoZQorICAgICAgIHZhbHVlcyAgbW9zdGx5ICBkaWZmZXIuICBGb3IgZXhhbXBsZSwgXEcgYWx3YXlzIGdlbmVyYXRlcyBjb2RlIHZhbHVlIDcsCisgICAgICAgd2hpY2ggaXMgQkVMIGluIEFTQ0lJIGJ1dCBERUwgaW4gRUJDRElDLgorCisgICAgICAgVGhlIHNlcXVlbmNlIFw/IGdlbmVyYXRlcyBERUwgKDEyNywgaGV4IDdGKSBpbiAgYW4gIEFTQ0lJICBlbnZpcm9ubWVudCwKKyAgICAgICBidXQgIGJlY2F1c2UgIDEyNyAgaXMgIG5vdCBhIGNvbnRyb2wgY2hhcmFjdGVyIGluIEVCQ0RJQywgUGVybCBtYWtlcyBpdAorICAgICAgIGdlbmVyYXRlIHRoZSBBUEMgY2hhcmFjdGVyLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgIHNldmVyYWwgIHZhcmlhbnRzCisgICAgICAgb2YgIEVCQ0RJQy4gIEluICBtb3N0ICBvZiB0aGVtIHRoZSBBUEMgY2hhcmFjdGVyIGhhcyB0aGUgdmFsdWUgMjU1IChoZXgKKyAgICAgICBGRiksIGJ1dCBpbiB0aGUgb25lIFBlcmwgY2FsbHMgUE9TSVgtQkMgaXRzIHZhbHVlIGlzIDk1ICAoaGV4ICA1RikuICBJZgorICAgICAgIGNlcnRhaW4gIG90aGVyIGNoYXJhY3RlcnMgaGF2ZSBQT1NJWC1CQyB2YWx1ZXMsIFBDUkUyIG1ha2VzIFw/IGdlbmVyYXRlCisgICAgICAgOTU7IG90aGVyd2lzZSBpdCBnZW5lcmF0ZXMgMjU1LgorCisgICAgICAgQWZ0ZXIgXDAgdXAgdG8gdHdvIGZ1cnRoZXIgb2N0YWwgZGlnaXRzIGFyZSByZWFkLiBJZiAgdGhlcmUgIGFyZSAgZmV3ZXIKKyAgICAgICB0aGFuICB0d28gIGRpZ2l0cywgIGp1c3QgIHRob3NlICB0aGF0ICBhcmUgIHByZXNlbnQgIGFyZSB1c2VkLiBUaHVzIHRoZQorICAgICAgIHNlcXVlbmNlIFwwXHhcMDE1IHNwZWNpZmllcyB0d28gYmluYXJ5IHplcm9zIGZvbGxvd2VkIGJ5IGEgQ1IgY2hhcmFjdGVyCisgICAgICAgKGNvZGUgdmFsdWUgMTMpLiBNYWtlIHN1cmUgeW91IHN1cHBseSB0d28gZGlnaXRzIGFmdGVyIHRoZSBpbml0aWFsIHplcm8KKyAgICAgICBpZiB0aGUgcGF0dGVybiBjaGFyYWN0ZXIgdGhhdCBmb2xsb3dzIGlzIGl0c2VsZiBhbiBvY3RhbCBkaWdpdC4KKworICAgICAgIFRoZSBlc2NhcGUgXG8gbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNlcXVlbmNlIG9mIG9jdGFsIGRpZ2l0cywgIGVuY2xvc2VkCisgICAgICAgaW4gIGJyYWNlcy4gIEFuICBlcnJvciBvY2N1cnMgaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuIFRoaXMgZXNjYXBlIGlzIGEKKyAgICAgICByZWNlbnQgYWRkaXRpb24gdG8gUGVybDsgaXQgcHJvdmlkZXMgd2F5IG9mIHNwZWNpZnlpbmcgIGNoYXJhY3RlciAgY29kZQorICAgICAgIHBvaW50cyAgYXMgIG9jdGFsICBudW1iZXJzICBncmVhdGVyIHRoYW4gMDc3NywgYW5kIGl0IGFsc28gYWxsb3dzIG9jdGFsCisgICAgICAgbnVtYmVycyBhbmQgYmFjayByZWZlcmVuY2VzIHRvIGJlIHVuYW1iaWd1b3VzbHkgc3BlY2lmaWVkLgorCisgICAgICAgRm9yIGdyZWF0ZXIgY2xhcml0eSBhbmQgdW5hbWJpZ3VpdHksIGl0IGlzIGJlc3QgdG8gYXZvaWQgZm9sbG93aW5nIFwgYnkKKyAgICAgICBhIGRpZ2l0IGdyZWF0ZXIgdGhhbiB6ZXJvLiBJbnN0ZWFkLCB1c2UgXG97fSBvciBceHt9IHRvIHNwZWNpZnkgY2hhcmFjLQorICAgICAgIHRlciBudW1iZXJzLCBhbmQgXGd7fSB0byBzcGVjaWZ5IGJhY2sgcmVmZXJlbmNlcy4gVGhlICBmb2xsb3dpbmcgIHBhcmEtCisgICAgICAgZ3JhcGhzIGRlc2NyaWJlIHRoZSBvbGQsIGFtYmlndW91cyBzeW50YXguCisKKyAgICAgICBUaGUgaGFuZGxpbmcgb2YgYSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBkaWdpdCBvdGhlciB0aGFuIDAgaXMgY29tcGxpLQorICAgICAgIGNhdGVkLCBhbmQgUGVybCBoYXMgY2hhbmdlZCBvdmVyIHRpbWUsIGNhdXNpbmcgUENSRTIgYWxzbyB0byBjaGFuZ2UuCisKKyAgICAgICBPdXRzaWRlIGEgY2hhcmFjdGVyIGNsYXNzLCBQQ1JFMiByZWFkcyB0aGUgZGlnaXQgYW5kIGFueSBmb2xsb3dpbmcgZGlnLQorICAgICAgIGl0cyBhcyBhIGRlY2ltYWwgbnVtYmVyLiBJZiB0aGUgbnVtYmVyIGlzIGxlc3MgdGhhbiAxMCwgYmVnaW5zIHdpdGggdGhlCisgICAgICAgZGlnaXQgOCBvciA5LCBvciBpZiB0aGVyZSBhcmUgYXQgbGVhc3QgIHRoYXQgIG1hbnkgIHByZXZpb3VzICBjYXB0dXJpbmcKKyAgICAgICBsZWZ0ICBwYXJlbnRoZXNlcyAgaW4gdGhlIGV4cHJlc3Npb24sIHRoZSBlbnRpcmUgc2VxdWVuY2UgaXMgdGFrZW4gYXMgYQorICAgICAgIGJhY2sgcmVmZXJlbmNlLiBBIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGlzIHdvcmtzIGlzIGdpdmVuIGxhdGVyLCBmb2xsb3ctCisgICAgICAgaW5nICB0aGUgIGRpc2N1c3Npb24gIG9mICBwYXJlbnRoZXNpemVkICBzdWJwYXR0ZXJucy4gIE90aGVyd2lzZSwgdXAgdG8KKyAgICAgICB0aHJlZSBvY3RhbCBkaWdpdHMgYXJlIHJlYWQgdG8gZm9ybSBhIGNoYXJhY3RlciBjb2RlLgorCisgICAgICAgSW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLCBQQ1JFMiBoYW5kbGVzIFw4IGFuZCBcOSBhcyB0aGUgbGl0ZXJhbCAgY2hhci0KKyAgICAgICBhY3RlcnMgICI4IiAgYW5kICI5IiwgYW5kIG90aGVyd2lzZSByZWFkcyB1cCB0byB0aHJlZSBvY3RhbCBkaWdpdHMgZm9sLQorICAgICAgIGxvd2luZyB0aGUgYmFja3NsYXNoLCB1c2luZyB0aGVtIHRvIGdlbmVyYXRlIGEgZGF0YSBjaGFyYWN0ZXIuIEFueSBzdWItCisgICAgICAgc2VxdWVudCAgZGlnaXRzICBzdGFuZCBmb3IgdGhlbXNlbHZlcy4gRm9yIGV4YW1wbGUsIG91dHNpZGUgYSBjaGFyYWN0ZXIKKyAgICAgICBjbGFzczoKKworICAgICAgICAgXDA0MCAgIGlzIGFub3RoZXIgd2F5IG9mIHdyaXRpbmcgYW4gQVNDSUkgc3BhY2UKKyAgICAgICAgIFw0MCAgICBpcyB0aGUgc2FtZSwgcHJvdmlkZWQgdGhlcmUgYXJlIGZld2VyIHRoYW4gNDAKKyAgICAgICAgICAgICAgICAgICBwcmV2aW91cyBjYXB0dXJpbmcgc3VicGF0dGVybnMKKyAgICAgICAgIFw3ICAgICBpcyBhbHdheXMgYSBiYWNrIHJlZmVyZW5jZQorICAgICAgICAgXDExICAgIG1pZ2h0IGJlIGEgYmFjayByZWZlcmVuY2UsIG9yIGFub3RoZXIgd2F5IG9mCisgICAgICAgICAgICAgICAgICAgd3JpdGluZyBhIHRhYgorICAgICAgICAgXDAxMSAgIGlzIGFsd2F5cyBhIHRhYgorICAgICAgICAgXDAxMTMgIGlzIGEgdGFiIGZvbGxvd2VkIGJ5IHRoZSBjaGFyYWN0ZXIgIjMiCisgICAgICAgICBcMTEzICAgbWlnaHQgYmUgYSBiYWNrIHJlZmVyZW5jZSwgb3RoZXJ3aXNlIHRoZQorICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciB3aXRoIG9jdGFsIGNvZGUgMTEzCisgICAgICAgICBcMzc3ICAgbWlnaHQgYmUgYSBiYWNrIHJlZmVyZW5jZSwgb3RoZXJ3aXNlCisgICAgICAgICAgICAgICAgICAgdGhlIHZhbHVlIDI1NSAoZGVjaW1hbCkKKyAgICAgICAgIFw4MSAgICBpcyBhbHdheXMgYSBiYWNrIHJlZmVyZW5jZQorCisgICAgICAgTm90ZSB0aGF0IG9jdGFsIHZhbHVlcyBvZiAxMDAgb3IgZ3JlYXRlciB0aGF0IGFyZSBzcGVjaWZpZWQgdXNpbmcgIHRoaXMKKyAgICAgICBzeW50YXggIG11c3QgIG5vdCBiZSBpbnRyb2R1Y2VkIGJ5IGEgbGVhZGluZyB6ZXJvLCBiZWNhdXNlIG5vIG1vcmUgdGhhbgorICAgICAgIHRocmVlIG9jdGFsIGRpZ2l0cyBhcmUgZXZlciByZWFkLgorCisgICAgICAgQnkgZGVmYXVsdCwgYWZ0ZXIgXHggdGhhdCBpcyBub3QgZm9sbG93ZWQgYnkgeywgZnJvbSB6ZXJvIHRvIHR3byAgaGV4YS0KKyAgICAgICBkZWNpbWFsICBkaWdpdHMgIGFyZSAgcmVhZCAobGV0dGVycyBjYW4gYmUgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSkuIEFueQorICAgICAgIG51bWJlciBvZiBoZXhhZGVjaW1hbCBkaWdpdHMgbWF5IGFwcGVhciBiZXR3ZWVuIFx4eyBhbmQgfS4gSWYgYSBjaGFyYWMtCisgICAgICAgdGVyICBvdGhlciAgdGhhbiAgYSAgaGV4YWRlY2ltYWwgZGlnaXQgYXBwZWFycyBiZXR3ZWVuIFx4eyBhbmQgfSwgb3IgaWYKKyAgICAgICB0aGVyZSBpcyBubyB0ZXJtaW5hdGluZyB9LCBhbiBlcnJvciBvY2N1cnMuCisKKyAgICAgICBJZiB0aGUgUENSRTJfQUxUX0JTVVggb3B0aW9uIGlzIHNldCwgdGhlIGludGVycHJldGF0aW9uICBvZiAgXHggIGlzICBhcworICAgICAgIGp1c3QgZGVzY3JpYmVkIG9ubHkgd2hlbiBpdCBpcyBmb2xsb3dlZCBieSB0d28gaGV4YWRlY2ltYWwgZGlnaXRzLiBPdGgtCisgICAgICAgZXJ3aXNlLCBpdCBtYXRjaGVzIGEgbGl0ZXJhbCAieCIgY2hhcmFjdGVyLiBJbiB0aGlzIG1vZGUgbW9kZSwgIHN1cHBvcnQKKyAgICAgICBmb3IgIGNvZGUgcG9pbnRzIGdyZWF0ZXIgdGhhbiAyNTYgaXMgcHJvdmlkZWQgYnkgXHUsIHdoaWNoIG11c3QgYmUgZm9sLQorICAgICAgIGxvd2VkIGJ5IGZvdXIgaGV4YWRlY2ltYWwgZGlnaXRzOyBvdGhlcndpc2UgaXQgbWF0Y2hlcyAgYSAgbGl0ZXJhbCAgInUiCisgICAgICAgY2hhcmFjdGVyLgorCisgICAgICAgQ2hhcmFjdGVycyB3aG9zZSB2YWx1ZSBpcyBsZXNzIHRoYW4gMjU2IGNhbiBiZSBkZWZpbmVkIGJ5IGVpdGhlciBvZiB0aGUKKyAgICAgICB0d28gc3ludGF4ZXMgZm9yIFx4IChvciBieSBcdSBpbiBQQ1JFMl9BTFRfQlNVWCBtb2RlKS4gVGhlcmUgaXMgbm8gZGlmLQorICAgICAgIGZlcmVuY2UgIGluICB0aGUgd2F5IHRoZXkgYXJlIGhhbmRsZWQuIEZvciBleGFtcGxlLCBceGRjIGlzIGV4YWN0bHkgdGhlCisgICAgICAgc2FtZSBhcyBceHtkY30gKG9yIFx1MDBkYyBpbiBQQ1JFMl9BTFRfQlNVWCBtb2RlKS4KKworICAgQ29uc3RyYWludHMgb24gY2hhcmFjdGVyIHZhbHVlcworCisgICAgICAgQ2hhcmFjdGVycyB0aGF0IGFyZSBzcGVjaWZpZWQgdXNpbmcgb2N0YWwgb3IgIGhleGFkZWNpbWFsICBudW1iZXJzICBhcmUKKyAgICAgICBsaW1pdGVkIHRvIGNlcnRhaW4gdmFsdWVzLCBhcyBmb2xsb3dzOgorCisgICAgICAgICA4LWJpdCBub24tVVRGIG1vZGUgICAgbGVzcyB0aGFuIDB4MTAwCisgICAgICAgICA4LWJpdCBVVEYtOCBtb2RlICAgICAgbGVzcyB0aGFuIDB4MTBmZmZmIGFuZCBhIHZhbGlkIGNvZGVwb2ludAorICAgICAgICAgMTYtYml0IG5vbi1VVEYgbW9kZSAgIGxlc3MgdGhhbiAweDEwMDAwCisgICAgICAgICAxNi1iaXQgVVRGLTE2IG1vZGUgICAgbGVzcyB0aGFuIDB4MTBmZmZmIGFuZCBhIHZhbGlkIGNvZGVwb2ludAorICAgICAgICAgMzItYml0IG5vbi1VVEYgbW9kZSAgIGxlc3MgdGhhbiAweDEwMDAwMDAwMAorICAgICAgICAgMzItYml0IFVURi0zMiBtb2RlICAgIGxlc3MgdGhhbiAweDEwZmZmZiBhbmQgYSB2YWxpZCBjb2RlcG9pbnQKKworICAgICAgIEludmFsaWQgIFVuaWNvZGUgIGNvZGVwb2ludHMgIGFyZSAgdGhlICByYW5nZSAweGQ4MDAgdG8gMHhkZmZmICh0aGUgc28tCisgICAgICAgY2FsbGVkICJzdXJyb2dhdGUiIGNvZGVwb2ludHMpLCBhbmQgMHhmZmVmLgorCisgICBFc2NhcGUgc2VxdWVuY2VzIGluIGNoYXJhY3RlciBjbGFzc2VzCisKKyAgICAgICBBbGwgdGhlIHNlcXVlbmNlcyB0aGF0IGRlZmluZSBhIHNpbmdsZSBjaGFyYWN0ZXIgdmFsdWUgY2FuIGJlIHVzZWQgYm90aAorICAgICAgIGluc2lkZSAgYW5kICBvdXRzaWRlIGNoYXJhY3RlciBjbGFzc2VzLiBJbiBhZGRpdGlvbiwgaW5zaWRlIGEgY2hhcmFjdGVyCisgICAgICAgY2xhc3MsIFxiIGlzIGludGVycHJldGVkIGFzIHRoZSBiYWNrc3BhY2UgY2hhcmFjdGVyIChoZXggMDgpLgorCisgICAgICAgXE4gaXMgbm90IGFsbG93ZWQgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuIFxCLCBcUiwgYW5kIFxYIGFyZSBub3QgIHNwZWNpYWwKKyAgICAgICBpbnNpZGUgIGEgIGNoYXJhY3RlciAgY2xhc3MuICBMaWtlIG90aGVyIHVucmVjb2duaXplZCBhbHBoYWJldGljIGVzY2FwZQorICAgICAgIHNlcXVlbmNlcywgdGhleSBjYXVzZSAgYW4gIGVycm9yLiAgT3V0c2lkZSAgYSAgY2hhcmFjdGVyICBjbGFzcywgIHRoZXNlCisgICAgICAgc2VxdWVuY2VzIGhhdmUgZGlmZmVyZW50IG1lYW5pbmdzLgorCisgICBVbnN1cHBvcnRlZCBlc2NhcGUgc2VxdWVuY2VzCisKKyAgICAgICBJbiAgUGVybCwgdGhlIHNlcXVlbmNlcyBcbCwgXEwsIFx1LCBhbmQgXFUgYXJlIHJlY29nbml6ZWQgYnkgaXRzIHN0cmluZworICAgICAgIGhhbmRsZXIgYW5kIHVzZWQgIHRvICBtb2RpZnkgIHRoZSAgY2FzZSAgb2YgIGZvbGxvd2luZyAgY2hhcmFjdGVycy4gIEJ5CisgICAgICAgZGVmYXVsdCwgUENSRTIgZG9lcyBub3Qgc3VwcG9ydCB0aGVzZSBlc2NhcGUgc2VxdWVuY2VzLiBIb3dldmVyLCBpZiB0aGUKKyAgICAgICBQQ1JFMl9BTFRfQlNVWCBvcHRpb24gaXMgc2V0LCBcVSBtYXRjaGVzIGEgIlUiIGNoYXJhY3RlciwgYW5kIFx1IGNhbiBiZQorICAgICAgIHVzZWQgIHRvIGRlZmluZSBhIGNoYXJhY3RlciBieSBjb2RlIHBvaW50LCBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzCisgICAgICAgc2VjdGlvbi4KKworICAgQWJzb2x1dGUgYW5kIHJlbGF0aXZlIGJhY2sgcmVmZXJlbmNlcworCisgICAgICAgVGhlIHNlcXVlbmNlIFxnIGZvbGxvd2VkIGJ5IGFuIHVuc2lnbmVkIG9yIGEgbmVnYXRpdmUgIG51bWJlciwgIG9wdGlvbi0KKyAgICAgICBhbGx5ICBlbmNsb3NlZCAgaW4gYnJhY2VzLCBpcyBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBiYWNrIHJlZmVyZW5jZS4gQQorICAgICAgIG5hbWVkIGJhY2sgcmVmZXJlbmNlIGNhbiBiZSBjb2RlZCBhcyBcZ3tuYW1lfS4gQmFjayByZWZlcmVuY2VzIGFyZSBkaXMtCisgICAgICAgY3Vzc2VkIGxhdGVyLCBmb2xsb3dpbmcgdGhlIGRpc2N1c3Npb24gb2YgcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJucy4KKworICAgQWJzb2x1dGUgYW5kIHJlbGF0aXZlIHN1YnJvdXRpbmUgY2FsbHMKKworICAgICAgIEZvciAgY29tcGF0aWJpbGl0eSB3aXRoIE9uaWd1cnVtYSwgdGhlIG5vbi1QZXJsIHN5bnRheCBcZyBmb2xsb3dlZCBieSBhCisgICAgICAgbmFtZSBvciBhIG51bWJlciBlbmNsb3NlZCBlaXRoZXIgaW4gYW5nbGUgYnJhY2tldHMgb3Igc2luZ2xlIHF1b3RlcywgaXMKKyAgICAgICBhbiAgYWx0ZXJuYXRpdmUgIHN5bnRheCBmb3IgcmVmZXJlbmNpbmcgYSBzdWJwYXR0ZXJuIGFzIGEgInN1YnJvdXRpbmUiLgorICAgICAgIERldGFpbHMgYXJlIGRpc2N1c3NlZCBsYXRlci4gICBOb3RlICB0aGF0ICBcZ3suLi59ICAoUGVybCAgc3ludGF4KSAgYW5kCisgICAgICAgXGc8Li4uPiAgKE9uaWd1cnVtYSAgc3ludGF4KSAgYXJlICBub3Qgc3lub255bW91cy4gVGhlIGZvcm1lciBpcyBhIGJhY2sKKyAgICAgICByZWZlcmVuY2U7IHRoZSBsYXR0ZXIgaXMgYSBzdWJyb3V0aW5lIGNhbGwuCisKKyAgIEdlbmVyaWMgY2hhcmFjdGVyIHR5cGVzCisKKyAgICAgICBBbm90aGVyIHVzZSBvZiBiYWNrc2xhc2ggaXMgZm9yIHNwZWNpZnlpbmcgZ2VuZXJpYyBjaGFyYWN0ZXIgdHlwZXM6CisKKyAgICAgICAgIFxkICAgICBhbnkgZGVjaW1hbCBkaWdpdAorICAgICAgICAgXEQgICAgIGFueSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSBkZWNpbWFsIGRpZ2l0CisgICAgICAgICBcaCAgICAgYW55IGhvcml6b250YWwgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICBcSCAgICAgYW55IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIGhvcml6b250YWwgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICBccyAgICAgYW55IHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICAgICAgICAgXFMgICAgIGFueSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIKKyAgICAgICAgIFx2ICAgICBhbnkgdmVydGljYWwgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICBcViAgICAgYW55IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIHZlcnRpY2FsIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICAgICAgICAgXHcgICAgIGFueSAid29yZCIgY2hhcmFjdGVyCisgICAgICAgICBcVyAgICAgYW55ICJub24td29yZCIgY2hhcmFjdGVyCisKKyAgICAgICBUaGVyZSBpcyBhbHNvIHRoZSBzaW5nbGUgc2VxdWVuY2UgXE4sIHdoaWNoIG1hdGNoZXMgYSBub24tbmV3bGluZSBjaGFyLQorICAgICAgIGFjdGVyLiAgIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlICIuIiBtZXRhY2hhcmFjdGVyIHdoZW4gUENSRTJfRE9UQUxMIGlzCisgICAgICAgbm90IHNldC4gUGVybCBhbHNvIHVzZXMgXE4gdG8gbWF0Y2ggY2hhcmFjdGVycyBieSBuYW1lOyBQQ1JFMiBkb2VzICBub3QKKyAgICAgICBzdXBwb3J0IHRoaXMuCisKKyAgICAgICBFYWNoICBwYWlyIG9mIGxvd2VyIGFuZCB1cHBlciBjYXNlIGVzY2FwZSBzZXF1ZW5jZXMgcGFydGl0aW9ucyB0aGUgY29tLQorICAgICAgIHBsZXRlIHNldCBvZiBjaGFyYWN0ZXJzIGludG8gdHdvIGRpc2pvaW50ICBzZXRzLiAgQW55ICBnaXZlbiAgY2hhcmFjdGVyCisgICAgICAgbWF0Y2hlcyAgb25lLCBhbmQgb25seSBvbmUsIG9mIGVhY2ggcGFpci4gVGhlIHNlcXVlbmNlcyBjYW4gYXBwZWFyIGJvdGgKKyAgICAgICBpbnNpZGUgYW5kIG91dHNpZGUgY2hhcmFjdGVyIGNsYXNzZXMuIFRoZXkgZWFjaCBtYXRjaCBvbmUgY2hhcmFjdGVyICBvZgorICAgICAgIHRoZSAgYXBwcm9wcmlhdGUgIHR5cGUuICBJZiB0aGUgY3VycmVudCBtYXRjaGluZyBwb2ludCBpcyBhdCB0aGUgZW5kIG9mCisgICAgICAgdGhlIHN1YmplY3Qgc3RyaW5nLCBhbGwgb2YgdGhlbSBmYWlsLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGNoYXJhY3RlciAgdG8KKyAgICAgICBtYXRjaC4KKworICAgICAgIFRoZSAgZGVmYXVsdCAgXHMgIGNoYXJhY3RlcnMgIGFyZSBIVCAoOSksIExGICgxMCksIFZUICgxMSksIEZGICgxMiksIENSCisgICAgICAgKDEzKSwgYW5kIHNwYWNlICgzMiksIHdoaWNoIGFyZSBkZWZpbmVkICBhcyAgd2hpdGUgIHNwYWNlICBpbiAgdGhlICAiQyIKKyAgICAgICBsb2NhbGUuIFRoaXMgbGlzdCBtYXkgdmFyeSBpZiBsb2NhbGUtc3BlY2lmaWMgbWF0Y2hpbmcgaXMgdGFraW5nIHBsYWNlLgorICAgICAgIEZvciBleGFtcGxlLCBpbiBzb21lIGxvY2FsZXMgdGhlICJub24tYnJlYWtpbmcgc3BhY2UiIGNoYXJhY3RlciAgKFx4QTApCisgICAgICAgaXMgcmVjb2duaXplZCBhcyB3aGl0ZSBzcGFjZSwgYW5kIGluIG90aGVycyB0aGUgVlQgY2hhcmFjdGVyIGlzIG5vdC4KKworICAgICAgIEEgICJ3b3JkIiAgY2hhcmFjdGVyIGlzIGFuIHVuZGVyc2NvcmUgb3IgYW55IGNoYXJhY3RlciB0aGF0IGlzIGEgbGV0dGVyCisgICAgICAgb3IgZGlnaXQuICBCeSBkZWZhdWx0LCB0aGUgZGVmaW5pdGlvbiBvZiBsZXR0ZXJzICBhbmQgIGRpZ2l0cyAgaXMgIGNvbi0KKyAgICAgICB0cm9sbGVkIGJ5IFBDUkUyJ3MgbG93LXZhbHVlZCBjaGFyYWN0ZXIgdGFibGVzLCBhbmQgbWF5IHZhcnkgaWYgbG9jYWxlLQorICAgICAgIHNwZWNpZmljIG1hdGNoaW5nIGlzIHRha2luZyBwbGFjZSAoc2VlICJMb2NhbGUgc3VwcG9ydCIgaW4gdGhlIHBjcmUyYXBpCisgICAgICAgcGFnZSkuICBGb3IgIGV4YW1wbGUsICBpbiAgYSBGcmVuY2ggbG9jYWxlIHN1Y2ggYXMgImZyX0ZSIiBpbiBVbml4LWxpa2UKKyAgICAgICBzeXN0ZW1zLCBvciAiZnJlbmNoIiBpbiBXaW5kb3dzLCBzb21lIGNoYXJhY3RlciBjb2RlcyBncmVhdGVyIHRoYW4gIDEyNworICAgICAgIGFyZSAgdXNlZCAgZm9yICBhY2NlbnRlZCBsZXR0ZXJzLCBhbmQgdGhlc2UgYXJlIHRoZW4gbWF0Y2hlZCBieSBcdy4gVGhlCisgICAgICAgdXNlIG9mIGxvY2FsZXMgd2l0aCBVbmljb2RlIGlzIGRpc2NvdXJhZ2VkLgorCisgICAgICAgQnkgZGVmYXVsdCwgY2hhcmFjdGVycyB3aG9zZSBjb2RlIHBvaW50cyBhcmUgIGdyZWF0ZXIgIHRoYW4gIDEyNyAgbmV2ZXIKKyAgICAgICBtYXRjaCBcZCwgXHMsIG9yIFx3LCBhbmQgYWx3YXlzIG1hdGNoIFxELCBcUywgYW5kIFxXLCBhbHRob3VnaCB0aGlzIG1heQorICAgICAgIGJlIGRpZmZlcmVudCBmb3IgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgMTI4LTI1NSAgd2hlbiAgbG9jYWxlLXNwZWNpZmljCisgICAgICAgbWF0Y2hpbmcgIGlzICBoYXBwZW5pbmcuICAgVGhlc2UgZXNjYXBlIHNlcXVlbmNlcyByZXRhaW4gdGhlaXIgb3JpZ2luYWwKKyAgICAgICBtZWFuaW5ncyBmcm9tIGJlZm9yZSBVbmljb2RlIHN1cHBvcnQgd2FzIGF2YWlsYWJsZSwgIG1haW5seSAgZm9yICBlZmZpLQorICAgICAgIGNpZW5jeSAgcmVhc29ucy4gIElmICB0aGUgIFBDUkUyX1VDUCAgb3B0aW9uICBpcyAgc2V0LCB0aGUgYmVoYXZpb3VyIGlzCisgICAgICAgY2hhbmdlZCBzbyB0aGF0IFVuaWNvZGUgcHJvcGVydGllcyAgYXJlICB1c2VkICB0byAgZGV0ZXJtaW5lICBjaGFyYWN0ZXIKKyAgICAgICB0eXBlcywgYXMgZm9sbG93czoKKworICAgICAgICAgXGQgIGFueSBjaGFyYWN0ZXIgdGhhdCBtYXRjaGVzIFxwe05kfSAoZGVjaW1hbCBkaWdpdCkKKyAgICAgICAgIFxzICBhbnkgY2hhcmFjdGVyIHRoYXQgbWF0Y2hlcyBccHtafSBvciBcaCBvciBcdgorICAgICAgICAgXHcgIGFueSBjaGFyYWN0ZXIgdGhhdCBtYXRjaGVzIFxwe0x9IG9yIFxwe059LCBwbHVzIHVuZGVyc2NvcmUKKworICAgICAgIFRoZSAgdXBwZXIgY2FzZSBlc2NhcGVzIG1hdGNoIHRoZSBpbnZlcnNlIHNldHMgb2YgY2hhcmFjdGVycy4gTm90ZSB0aGF0CisgICAgICAgXGQgbWF0Y2hlcyBvbmx5IGRlY2ltYWwgZGlnaXRzLCB3aGVyZWFzIFx3IG1hdGNoZXMgYW55ICBVbmljb2RlICBkaWdpdCwKKyAgICAgICBhcyB3ZWxsIGFzIGFueSBVbmljb2RlIGxldHRlciwgYW5kIHVuZGVyc2NvcmUuIE5vdGUgYWxzbyB0aGF0IFBDUkUyX1VDUAorICAgICAgIGFmZmVjdHMgXGIsIGFuZCBcQiBiZWNhdXNlIHRoZXkgYXJlIGRlZmluZWQgaW4gIHRlcm1zICBvZiAgXHcgIGFuZCAgXFcuCisgICAgICAgTWF0Y2hpbmcgdGhlc2Ugc2VxdWVuY2VzIGlzIG5vdGljZWFibHkgc2xvd2VyIHdoZW4gUENSRTJfVUNQIGlzIHNldC4KKworICAgICAgIFRoZSAgc2VxdWVuY2VzICBcaCwgXEgsIFx2LCBhbmQgXFYsIGluIGNvbnRyYXN0IHRvIHRoZSBvdGhlciBzZXF1ZW5jZXMsCisgICAgICAgd2hpY2ggbWF0Y2ggb25seSBBU0NJSSBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQsIGFsd2F5cyBtYXRjaCAgYSAgc3BlY2lmaWMKKyAgICAgICBsaXN0ICBvZiAgY29kZSAgcG9pbnRzLCB3aGV0aGVyIG9yIG5vdCBQQ1JFMl9VQ1AgaXMgc2V0LiBUaGUgaG9yaXpvbnRhbAorICAgICAgIHNwYWNlIGNoYXJhY3RlcnMgYXJlOgorCisgICAgICAgICBVKzAwMDkgICAgIEhvcml6b250YWwgdGFiIChIVCkKKyAgICAgICAgIFUrMDAyMCAgICAgU3BhY2UKKyAgICAgICAgIFUrMDBBMCAgICAgTm9uLWJyZWFrIHNwYWNlCisgICAgICAgICBVKzE2ODAgICAgIE9naGFtIHNwYWNlIG1hcmsKKyAgICAgICAgIFUrMTgwRSAgICAgTW9uZ29saWFuIHZvd2VsIHNlcGFyYXRvcgorICAgICAgICAgVSsyMDAwICAgICBFbiBxdWFkCisgICAgICAgICBVKzIwMDEgICAgIEVtIHF1YWQKKyAgICAgICAgIFUrMjAwMiAgICAgRW4gc3BhY2UKKyAgICAgICAgIFUrMjAwMyAgICAgRW0gc3BhY2UKKyAgICAgICAgIFUrMjAwNCAgICAgVGhyZWUtcGVyLWVtIHNwYWNlCisgICAgICAgICBVKzIwMDUgICAgIEZvdXItcGVyLWVtIHNwYWNlCisgICAgICAgICBVKzIwMDYgICAgIFNpeC1wZXItZW0gc3BhY2UKKyAgICAgICAgIFUrMjAwNyAgICAgRmlndXJlIHNwYWNlCisgICAgICAgICBVKzIwMDggICAgIFB1bmN0dWF0aW9uIHNwYWNlCisgICAgICAgICBVKzIwMDkgICAgIFRoaW4gc3BhY2UKKyAgICAgICAgIFUrMjAwQSAgICAgSGFpciBzcGFjZQorICAgICAgICAgVSsyMDJGICAgICBOYXJyb3cgbm8tYnJlYWsgc3BhY2UKKyAgICAgICAgIFUrMjA1RiAgICAgTWVkaXVtIG1hdGhlbWF0aWNhbCBzcGFjZQorICAgICAgICAgVSszMDAwICAgICBJZGVvZ3JhcGhpYyBzcGFjZQorCisgICAgICAgVGhlIHZlcnRpY2FsIHNwYWNlIGNoYXJhY3RlcnMgYXJlOgorCisgICAgICAgICBVKzAwMEEgICAgIExpbmVmZWVkIChMRikKKyAgICAgICAgIFUrMDAwQiAgICAgVmVydGljYWwgdGFiIChWVCkKKyAgICAgICAgIFUrMDAwQyAgICAgRm9ybSBmZWVkIChGRikKKyAgICAgICAgIFUrMDAwRCAgICAgQ2FycmlhZ2UgcmV0dXJuIChDUikKKyAgICAgICAgIFUrMDA4NSAgICAgTmV4dCBsaW5lIChORUwpCisgICAgICAgICBVKzIwMjggICAgIExpbmUgc2VwYXJhdG9yCisgICAgICAgICBVKzIwMjkgICAgIFBhcmFncmFwaCBzZXBhcmF0b3IKKworICAgICAgIEluIDgtYml0LCBub24tVVRGLTggbW9kZSwgb25seSB0aGUgY2hhcmFjdGVycyAgd2l0aCAgY29kZSAgcG9pbnRzICBsZXNzCisgICAgICAgdGhhbiAyNTYgYXJlIHJlbGV2YW50LgorCisgICBOZXdsaW5lIHNlcXVlbmNlcworCisgICAgICAgT3V0c2lkZSAgYSAgY2hhcmFjdGVyIGNsYXNzLCBieSBkZWZhdWx0LCB0aGUgZXNjYXBlIHNlcXVlbmNlIFxSIG1hdGNoZXMKKyAgICAgICBhbnkgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlLiBJbiA4LWJpdCBub24tVVRGLTggbW9kZSBcUiBpcyAgZXF1aXZhbGVudAorICAgICAgIHRvIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgICg/PlxyXG58XG58XHgwYnxcZnxccnxceDg1KQorCisgICAgICAgVGhpcyAgaXMgIGFuICBleGFtcGxlICBvZiBhbiAiYXRvbWljIGdyb3VwIiwgZGV0YWlscyBvZiB3aGljaCBhcmUgZ2l2ZW4KKyAgICAgICBiZWxvdy4gIFRoaXMgcGFydGljdWxhciBncm91cCBtYXRjaGVzIGVpdGhlciB0aGUgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZQorICAgICAgIENSICBmb2xsb3dlZCAgYnkgIExGLCAgb3IgIG9uZSAgb2YgIHRoZSBzaW5nbGUgY2hhcmFjdGVycyBMRiAobGluZWZlZWQsCisgICAgICAgVSswMDBBKSwgVlQgKHZlcnRpY2FsIHRhYiwgVSswMDBCKSwgRkYgKGZvcm0gZmVlZCwgIFUrMDAwQyksICBDUiAgKGNhci0KKyAgICAgICByaWFnZSAgcmV0dXJuLCAgVSswMDBEKSwgb3IgTkVMIChuZXh0IGxpbmUsIFUrMDA4NSkuIEJlY2F1c2UgdGhpcyBpcyBhbgorICAgICAgIGF0b21pYyBncm91cCwgdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgaXMgdHJlYXRlZCBhcyAgYSAgc2luZ2xlICB1bml0CisgICAgICAgdGhhdCBjYW5ub3QgYmUgc3BsaXQuCisKKyAgICAgICBJbiAgb3RoZXIgbW9kZXMsIHR3byBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgd2hvc2UgY29kZXBvaW50cyBhcmUgZ3JlYXRlcgorICAgICAgIHRoYW4gMjU1IGFyZSBhZGRlZDogTFMgKGxpbmUgc2VwYXJhdG9yLCBVKzIwMjgpIGFuZCBQUyAocGFyYWdyYXBoIHNlcGEtCisgICAgICAgcmF0b3IsICBVKzIwMjkpLiAgVW5pY29kZSBzdXBwb3J0IGlzIG5vdCBuZWVkZWQgZm9yIHRoZXNlIGNoYXJhY3RlcnMgdG8KKyAgICAgICBiZSByZWNvZ25pemVkLgorCisgICAgICAgSXQgaXMgcG9zc2libGUgdG8gcmVzdHJpY3QgXFIgdG8gbWF0Y2ggb25seSBDUiwgTEYsIG9yIENSTEYgKGluc3RlYWQgb2YKKyAgICAgICB0aGUgIGNvbXBsZXRlICBzZXQgIG9mICBVbmljb2RlICBsaW5lICBlbmRpbmdzKSAgYnkgIHNldHRpbmcgdGhlIG9wdGlvbgorICAgICAgIFBDUkUyX0JTUl9BTllDUkxGIGF0IGNvbXBpbGUgdGltZS4gKEJTUiBpcyBhbiAgYWJicmV2YXRpb24gIGZvciAgImJhY2stCisgICAgICAgc2xhc2ggUiIuKSBUaGlzIGNhbiBiZSBtYWRlIHRoZSBkZWZhdWx0IHdoZW4gUENSRTIgaXMgYnVpbHQ7IGlmIHRoaXMgaXMKKyAgICAgICB0aGUgY2FzZSwgdGhlIG90aGVyIGJlaGF2aW91ciBjYW4gYmUgcmVxdWVzdGVkIHZpYSAgdGhlICBQQ1JFMl9CU1JfVU5JLQorICAgICAgIENPREUgIG9wdGlvbi4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoZXNlIHNldHRpbmdzIGJ5IHN0YXJ0aW5nCisgICAgICAgYSBwYXR0ZXJuIHN0cmluZyB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nIHNlcXVlbmNlczoKKworICAgICAgICAgKCpCU1JfQU5ZQ1JMRikgICBDUiwgTEYsIG9yIENSTEYgb25seQorICAgICAgICAgKCpCU1JfVU5JQ09ERSkgICBhbnkgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlCisKKyAgICAgICBUaGVzZSBvdmVycmlkZSB0aGUgZGVmYXVsdCBhbmQgdGhlIG9wdGlvbnMgZ2l2ZW4gdG8gdGhlIGNvbXBpbGluZyBmdW5jLQorICAgICAgIHRpb24uICBOb3RlIHRoYXQgdGhlc2Ugc3BlY2lhbCBzZXR0aW5ncywgd2hpY2ggYXJlIG5vdCBQZXJsLWNvbXBhdGlibGUsCisgICAgICAgYXJlIHJlY29nbml6ZWQgb25seSBhdCB0aGUgdmVyeSBzdGFydCBvZiBhIHBhdHRlcm4sIGFuZCB0aGF0IHRoZXkgIG11c3QKKyAgICAgICBiZSAgaW4gdXBwZXIgY2FzZS4gSWYgbW9yZSB0aGFuIG9uZSBvZiB0aGVtIGlzIHByZXNlbnQsIHRoZSBsYXN0IG9uZSBpcworICAgICAgIHVzZWQuIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHdpdGggYSBjaGFuZ2UgIG9mICBuZXdsaW5lICBjb252ZW50aW9uOyAgZm9yCisgICAgICAgZXhhbXBsZSwgYSBwYXR0ZXJuIGNhbiBzdGFydCB3aXRoOgorCisgICAgICAgICAoKkFOWSkoKkJTUl9BTllDUkxGKQorCisgICAgICAgVGhleSAgY2FuIGFsc28gYmUgY29tYmluZWQgd2l0aCB0aGUgKCpVVEYpIG9yICgqVUNQKSBzcGVjaWFsIHNlcXVlbmNlcy4KKyAgICAgICBJbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIFxSICBpcyAgdHJlYXRlZCAgYXMgIGFuICB1bnJlY29nbml6ZWQgIGVzY2FwZQorICAgICAgIHNlcXVlbmNlLCBhbmQgY2F1c2VzIGFuIGVycm9yLgorCisgICBVbmljb2RlIGNoYXJhY3RlciBwcm9wZXJ0aWVzCisKKyAgICAgICBXaGVuICBQQ1JFMiAgaXMgIGJ1aWx0ICB3aXRoIFVuaWNvZGUgc3VwcG9ydCAodGhlIGRlZmF1bHQpLCB0aHJlZSBhZGRpLQorICAgICAgIHRpb25hbCBlc2NhcGUgc2VxdWVuY2VzIHRoYXQgbWF0Y2ggY2hhcmFjdGVycyB3aXRoIHNwZWNpZmljICBwcm9wZXJ0aWVzCisgICAgICAgYXJlICBhdmFpbGFibGUuICBJbiA4LWJpdCBub24tVVRGLTggbW9kZSwgdGhlc2Ugc2VxdWVuY2VzIGFyZSBvZiBjb3Vyc2UKKyAgICAgICBsaW1pdGVkIHRvIHRlc3RpbmcgY2hhcmFjdGVycyB3aG9zZSBjb2RlcG9pbnRzIGFyZSBsZXNzIHRoYW4gIDI1NiwgIGJ1dAorICAgICAgIHRoZXkgZG8gd29yayBpbiB0aGlzIG1vZGUuICBUaGUgZXh0cmEgZXNjYXBlIHNlcXVlbmNlcyBhcmU6CisKKyAgICAgICAgIFxwe3h4fSAgIGEgY2hhcmFjdGVyIHdpdGggdGhlIHh4IHByb3BlcnR5CisgICAgICAgICBcUHt4eH0gICBhIGNoYXJhY3RlciB3aXRob3V0IHRoZSB4eCBwcm9wZXJ0eQorICAgICAgICAgXFggICAgICAgYSBVbmljb2RlIGV4dGVuZGVkIGdyYXBoZW1lIGNsdXN0ZXIKKworICAgICAgIFRoZSAgcHJvcGVydHkgIG5hbWVzIHJlcHJlc2VudGVkIGJ5IHh4IGFib3ZlIGFyZSBsaW1pdGVkIHRvIHRoZSBVbmljb2RlCisgICAgICAgc2NyaXB0IG5hbWVzLCB0aGUgZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0aWVzLCAiQW55Iiwgd2hpY2ggbWF0Y2hlcyBhbnkKKyAgICAgICBjaGFyYWN0ZXIgIChpbmNsdWRpbmcgIG5ld2xpbmUpLCAgYW5kICBzb21lICBzcGVjaWFsICBQQ1JFMiAgcHJvcGVydGllcworICAgICAgIChkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbikuICBPdGhlciBQZXJsIHByb3BlcnRpZXMgc3VjaCBhcyAgIkluTXUtCisgICAgICAgc2ljYWxTeW1ib2xzIiAgYXJlICBub3Qgc3VwcG9ydGVkIGJ5IFBDUkUyLiAgTm90ZSB0aGF0IFxQe0FueX0gZG9lcyBub3QKKyAgICAgICBtYXRjaCBhbnkgY2hhcmFjdGVycywgc28gYWx3YXlzIGNhdXNlcyBhIG1hdGNoIGZhaWx1cmUuCisKKyAgICAgICBTZXRzIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBhcmUgZGVmaW5lZCBhcyBiZWxvbmdpbmcgdG8gY2VydGFpbiBzY3JpcHRzLgorICAgICAgIEEgIGNoYXJhY3RlciBmcm9tIG9uZSBvZiB0aGVzZSBzZXRzIGNhbiBiZSBtYXRjaGVkIHVzaW5nIGEgc2NyaXB0IG5hbWUuCisgICAgICAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgIFxwe0dyZWVrfQorICAgICAgICAgXFB7SGFufQorCisgICAgICAgVGhvc2UgdGhhdCBhcmUgbm90IHBhcnQgb2YgYW4gaWRlbnRpZmllZCBzY3JpcHQgYXJlIGx1bXBlZCB0b2dldGhlciAgYXMKKyAgICAgICAiQ29tbW9uIi4gVGhlIGN1cnJlbnQgbGlzdCBvZiBzY3JpcHRzIGlzOgorCisgICAgICAgQWhvbSwgICBBbmF0b2xpYW5fSGllcm9nbHlwaHMsICBBcmFiaWMsICBBcm1lbmlhbiwgIEF2ZXN0YW4sICBCYWxpbmVzZSwKKyAgICAgICBCYW11bSwgQmFzc2FfVmFoLCBCYXRhaywgQmVuZ2FsaSwgQm9wb21vZm8sIEJyYWhtaSwgQnJhaWxsZSwgIEJ1Z2luZXNlLAorICAgICAgIEJ1aGlkLCAgQ2FuYWRpYW5fQWJvcmlnaW5hbCwgIENhcmlhbiwgQ2F1Y2FzaWFuX0FsYmFuaWFuLCBDaGFrbWEsIENoYW0sCisgICAgICAgQ2hlcm9rZWUsICBDb21tb24sICBDb3B0aWMsICBDdW5laWZvcm0sICBDeXByaW90LCAgQ3lyaWxsaWMsICAgRGVzZXJldCwKKyAgICAgICBEZXZhbmFnYXJpLCAgRHVwbG95YW4sICBFZ3lwdGlhbl9IaWVyb2dseXBocywgIEVsYmFzYW4sIEV0aGlvcGljLCBHZW9yLQorICAgICAgIGdpYW4sIEdsYWdvbGl0aWMsIEdvdGhpYywgIEdyYW50aGEsICBHcmVlaywgIEd1amFyYXRpLCAgR3VybXVraGksICBIYW4sCisgICAgICAgSGFuZ3VsLCBIYW51bm9vLCBIYXRyYW4sIEhlYnJldywgSGlyYWdhbmEsIEltcGVyaWFsX0FyYW1haWMsIEluaGVyaXRlZCwKKyAgICAgICBJbnNjcmlwdGlvbmFsX1BhaGxhdmksIEluc2NyaXB0aW9uYWxfUGFydGhpYW4sIEphdmFuZXNlLCAgS2FpdGhpLCAgS2FuLQorICAgICAgIG5hZGEsICBLYXRha2FuYSwgIEtheWFoX0xpLCAgS2hhcm9zaHRoaSwgS2htZXIsIEtob2praSwgS2h1ZGF3YWRpLCBMYW8sCisgICAgICAgTGF0aW4sIExlcGNoYSwgTGltYnUsIExpbmVhcl9BLCBMaW5lYXJfQiwgTGlzdSwgTHljaWFuLCAgTHlkaWFuLCAgTWFoYS0KKyAgICAgICBqYW5pLCAgTWFsYXlhbGFtLCAgTWFuZGFpYywgIE1hbmljaGFlYW4sICBNZWV0ZWlfTWF5ZWssICBNZW5kZV9LaWtha3VpLAorICAgICAgIE1lcm9pdGljX0N1cnNpdmUsIE1lcm9pdGljX0hpZXJvZ2x5cGhzLCAgTWlhbywgIE1vZGksICBNb25nb2xpYW4sICBNcm8sCisgICAgICAgTXVsdGFuaSwgICBNeWFubWFyLCAgIE5hYmF0YWVhbiwgIE5ld19UYWlfTHVlLCAgTmtvLCAgT2doYW0sICBPbF9DaGlraSwKKyAgICAgICBPbGRfSHVuZ2FyaWFuLCBPbGRfSXRhbGljLCBPbGRfTm9ydGhfQXJhYmlhbiwgT2xkX1Blcm1pYywgIE9sZF9QZXJzaWFuLAorICAgICAgIE9sZF9Tb3V0aF9BcmFiaWFuLCBPbGRfVHVya2ljLCBPcml5YSwgT3NtYW55YSwgUGFoYXdoX0htb25nLCBQYWxteXJlbmUsCisgICAgICAgUGF1X0Npbl9IYXUsICBQaGFnc19QYSwgIFBob2VuaWNpYW4sICBQc2FsdGVyX1BhaGxhdmksICBSZWphbmcsICBSdW5pYywKKyAgICAgICBTYW1hcml0YW4sIFNhdXJhc2h0cmEsIFNoYXJhZGEsIFNoYXZpYW4sIFNpZGRoYW0sIFNpZ25Xcml0aW5nLCBTaW5oYWxhLAorICAgICAgIFNvcmFfU29tcGVuZywgIFN1bmRhbmVzZSwgIFN5bG90aV9OYWdyaSwgIFN5cmlhYywgIFRhZ2Fsb2csICAgVGFnYmFud2EsCisgICAgICAgVGFpX0xlLCAgIFRhaV9UaGFtLCAgVGFpX1ZpZXQsICBUYWtyaSwgIFRhbWlsLCAgVGVsdWd1LCAgVGhhYW5hLCAgVGhhaSwKKyAgICAgICBUaWJldGFuLCBUaWZpbmFnaCwgVGlyaHV0YSwgVWdhcml0aWMsIFZhaSwgV2FyYW5nX0NpdGksIFlpLgorCisgICAgICAgRWFjaCBjaGFyYWN0ZXIgaGFzIGV4YWN0bHkgb25lIFVuaWNvZGUgZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eSwgc3BlYy0KKyAgICAgICBpZmllZCAgYnkgYSB0d28tbGV0dGVyIGFiYnJldmlhdGlvbi4gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLCBuZWdhLQorICAgICAgIHRpb24gY2FuIGJlIHNwZWNpZmllZCBieSBpbmNsdWRpbmcgYSAgY2lyY3VtZmxleCAgYmV0d2VlbiAgdGhlICBvcGVuaW5nCisgICAgICAgYnJhY2UgIGFuZCAgdGhlICBwcm9wZXJ0eSAgbmFtZS4gIEZvciAgZXhhbXBsZSwgIFxwe15MdX0gaXMgdGhlIHNhbWUgYXMKKyAgICAgICBcUHtMdX0uCisKKyAgICAgICBJZiBvbmx5IG9uZSBsZXR0ZXIgaXMgc3BlY2lmaWVkIHdpdGggXHAgb3IgXFAsIGl0IGluY2x1ZGVzIGFsbCB0aGUgZ2VuLQorICAgICAgIGVyYWwgIGNhdGVnb3J5IHByb3BlcnRpZXMgdGhhdCBzdGFydCB3aXRoIHRoYXQgbGV0dGVyLiBJbiB0aGlzIGNhc2UsIGluCisgICAgICAgdGhlIGFic2VuY2Ugb2YgbmVnYXRpb24sIHRoZSBjdXJseSBicmFja2V0cyBpbiB0aGUgZXNjYXBlIHNlcXVlbmNlICBhcmUKKyAgICAgICBvcHRpb25hbDsgdGhlc2UgdHdvIGV4YW1wbGVzIGhhdmUgdGhlIHNhbWUgZWZmZWN0OgorCisgICAgICAgICBccHtMfQorICAgICAgICAgXHBMCisKKyAgICAgICBUaGUgZm9sbG93aW5nIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHkgY29kZXMgYXJlIHN1cHBvcnRlZDoKKworICAgICAgICAgQyAgICAgT3RoZXIKKyAgICAgICAgIENjICAgIENvbnRyb2wKKyAgICAgICAgIENmICAgIEZvcm1hdAorICAgICAgICAgQ24gICAgVW5hc3NpZ25lZAorICAgICAgICAgQ28gICAgUHJpdmF0ZSB1c2UKKyAgICAgICAgIENzICAgIFN1cnJvZ2F0ZQorCisgICAgICAgICBMICAgICBMZXR0ZXIKKyAgICAgICAgIExsICAgIExvd2VyIGNhc2UgbGV0dGVyCisgICAgICAgICBMbSAgICBNb2RpZmllciBsZXR0ZXIKKyAgICAgICAgIExvICAgIE90aGVyIGxldHRlcgorICAgICAgICAgTHQgICAgVGl0bGUgY2FzZSBsZXR0ZXIKKyAgICAgICAgIEx1ICAgIFVwcGVyIGNhc2UgbGV0dGVyCisKKyAgICAgICAgIE0gICAgIE1hcmsKKyAgICAgICAgIE1jICAgIFNwYWNpbmcgbWFyaworICAgICAgICAgTWUgICAgRW5jbG9zaW5nIG1hcmsKKyAgICAgICAgIE1uICAgIE5vbi1zcGFjaW5nIG1hcmsKKworICAgICAgICAgTiAgICAgTnVtYmVyCisgICAgICAgICBOZCAgICBEZWNpbWFsIG51bWJlcgorICAgICAgICAgTmwgICAgTGV0dGVyIG51bWJlcgorICAgICAgICAgTm8gICAgT3RoZXIgbnVtYmVyCisKKyAgICAgICAgIFAgICAgIFB1bmN0dWF0aW9uCisgICAgICAgICBQYyAgICBDb25uZWN0b3IgcHVuY3R1YXRpb24KKyAgICAgICAgIFBkICAgIERhc2ggcHVuY3R1YXRpb24KKyAgICAgICAgIFBlICAgIENsb3NlIHB1bmN0dWF0aW9uCisgICAgICAgICBQZiAgICBGaW5hbCBwdW5jdHVhdGlvbgorICAgICAgICAgUGkgICAgSW5pdGlhbCBwdW5jdHVhdGlvbgorICAgICAgICAgUG8gICAgT3RoZXIgcHVuY3R1YXRpb24KKyAgICAgICAgIFBzICAgIE9wZW4gcHVuY3R1YXRpb24KKworICAgICAgICAgUyAgICAgU3ltYm9sCisgICAgICAgICBTYyAgICBDdXJyZW5jeSBzeW1ib2wKKyAgICAgICAgIFNrICAgIE1vZGlmaWVyIHN5bWJvbAorICAgICAgICAgU20gICAgTWF0aGVtYXRpY2FsIHN5bWJvbAorICAgICAgICAgU28gICAgT3RoZXIgc3ltYm9sCisKKyAgICAgICAgIFogICAgIFNlcGFyYXRvcgorICAgICAgICAgWmwgICAgTGluZSBzZXBhcmF0b3IKKyAgICAgICAgIFpwICAgIFBhcmFncmFwaCBzZXBhcmF0b3IKKyAgICAgICAgIFpzICAgIFNwYWNlIHNlcGFyYXRvcgorCisgICAgICAgVGhlICBzcGVjaWFsIHByb3BlcnR5IEwmIGlzIGFsc28gc3VwcG9ydGVkOiBpdCBtYXRjaGVzIGEgY2hhcmFjdGVyIHRoYXQKKyAgICAgICBoYXMgdGhlIEx1LCBMbCwgb3IgTHQgcHJvcGVydHksIGluIG90aGVyIHdvcmRzLCBhIGxldHRlciAgdGhhdCAgaXMgIG5vdAorICAgICAgIGNsYXNzaWZpZWQgYXMgYSBtb2RpZmllciBvciAib3RoZXIiLgorCisgICAgICAgVGhlICBDcyAgKFN1cnJvZ2F0ZSkgIHByb3BlcnR5ICBhcHBsaWVzIG9ubHkgdG8gY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UKKyAgICAgICBVK0Q4MDAgdG8gVStERkZGLiBTdWNoIGNoYXJhY3RlcnMgYXJlIG5vdCB2YWxpZCBpbiBVbmljb2RlIHN0cmluZ3MgIGFuZAorICAgICAgIHNvICBjYW5ub3QgIGJlICB0ZXN0ZWQgIGJ5IFBDUkUyLCB1bmxlc3MgVVRGIHZhbGlkaXR5IGNoZWNraW5nIGhhcyBiZWVuCisgICAgICAgdHVybmVkIG9mZiAoc2VlIHRoZSBkaXNjdXNzaW9uIG9mIFBDUkUyX05PX1VURl9DSEVDSyAgaW4gIHRoZSAgcGNyZTJhcGkKKyAgICAgICBwYWdlKS4gUGVybCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBDcyBwcm9wZXJ0eS4KKworICAgICAgIFRoZSAgbG9uZyAgc3lub255bXMgIGZvciAgcHJvcGVydHkgIG5hbWVzICB0aGF0ICBQZXJsIHN1cHBvcnRzIChzdWNoIGFzCisgICAgICAgXHB7TGV0dGVyfSkgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgUENSRTIsIG5vciBpcyBpdCBwZXJtaXR0ZWQgIHRvICBwcmVmaXgKKyAgICAgICBhbnkgb2YgdGhlc2UgcHJvcGVydGllcyB3aXRoICJJcyIuCisKKyAgICAgICBObyBjaGFyYWN0ZXIgdGhhdCBpcyBpbiB0aGUgVW5pY29kZSB0YWJsZSBoYXMgdGhlIENuICh1bmFzc2lnbmVkKSBwcm9wLQorICAgICAgIGVydHkuICBJbnN0ZWFkLCB0aGlzIHByb3BlcnR5IGlzIGFzc3VtZWQgZm9yIGFueSBjb2RlIHBvaW50IHRoYXQgaXMgbm90CisgICAgICAgaW4gdGhlIFVuaWNvZGUgdGFibGUuCisKKyAgICAgICBTcGVjaWZ5aW5nICBjYXNlbGVzcyAgbWF0Y2hpbmcgIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBlc2NhcGUgc2VxdWVuY2VzLgorICAgICAgIEZvciBleGFtcGxlLCBccHtMdX0gYWx3YXlzIG1hdGNoZXMgb25seSB1cHBlciAgY2FzZSAgbGV0dGVycy4gIFRoaXMgIGlzCisgICAgICAgZGlmZmVyZW50IGZyb20gdGhlIGJlaGF2aW91ciBvZiBjdXJyZW50IHZlcnNpb25zIG9mIFBlcmwuCisKKyAgICAgICBNYXRjaGluZyAgY2hhcmFjdGVycyBieSBVbmljb2RlIHByb3BlcnR5IGlzIG5vdCBmYXN0LCBiZWNhdXNlIFBDUkUyIGhhcworICAgICAgIHRvIGRvIGEgbXVsdGlzdGFnZSB0YWJsZSBsb29rdXAgaW4gb3JkZXIgdG8gZmluZCAgYSAgY2hhcmFjdGVyJ3MgIHByb3AtCisgICAgICAgZXJ0eS4gVGhhdCBpcyB3aHkgdGhlIHRyYWRpdGlvbmFsIGVzY2FwZSBzZXF1ZW5jZXMgc3VjaCBhcyBcZCBhbmQgXHcgZG8KKyAgICAgICBub3QgdXNlIFVuaWNvZGUgcHJvcGVydGllcyBpbiBQQ1JFMiBieSBkZWZhdWx0LCAgdGhvdWdoICB5b3UgIGNhbiAgbWFrZQorICAgICAgIHRoZW0gIGRvICBzbyBieSBzZXR0aW5nIHRoZSBQQ1JFMl9VQ1Agb3B0aW9uIG9yIGJ5IHN0YXJ0aW5nIHRoZSBwYXR0ZXJuCisgICAgICAgd2l0aCAoKlVDUCkuCisKKyAgIEV4dGVuZGVkIGdyYXBoZW1lIGNsdXN0ZXJzCisKKyAgICAgICBUaGUgXFggZXNjYXBlIG1hdGNoZXMgYW55IG51bWJlciBvZiBVbmljb2RlICBjaGFyYWN0ZXJzICB0aGF0ICBmb3JtICBhbgorICAgICAgICJleHRlbmRlZCBncmFwaGVtZSBjbHVzdGVyIiwgYW5kIHRyZWF0cyB0aGUgc2VxdWVuY2UgYXMgYW4gYXRvbWljIGdyb3VwCisgICAgICAgKHNlZSBiZWxvdykuICBVbmljb2RlIHN1cHBvcnRzIHZhcmlvdXMga2luZHMgb2YgY29tcG9zaXRlIGNoYXJhY3RlciAgYnkKKyAgICAgICBnaXZpbmcgIGVhY2ggIGNoYXJhY3RlciAgYSBncmFwaGVtZSBicmVha2luZyBwcm9wZXJ0eSwgYW5kIGhhdmluZyBydWxlcworICAgICAgIHRoYXQgdXNlIHRoZXNlIHByb3BlcnRpZXMgdG8gZGVmaW5lIHRoZSBib3VuZGFyaWVzIG9mIGV4dGVuZGVkIGdyYXBoZW1lCisgICAgICAgY2x1c3RlcnMuICBcWCAgYWx3YXlzICBtYXRjaGVzICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLiBUaGVuIGl0IGRlY2lkZXMKKyAgICAgICB3aGV0aGVyIHRvIGFkZCBhZGRpdGlvbmFsIGNoYXJhY3RlcnMgYWNjb3JkaW5nIHRvIHRoZSAgZm9sbG93aW5nICBydWxlcworICAgICAgIGZvciBlbmRpbmcgYSBjbHVzdGVyOgorCisgICAgICAgMS4gRW5kIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLgorCisgICAgICAgMi4gIERvIG5vdCBlbmQgYmV0d2VlbiBDUiBhbmQgTEY7IG90aGVyd2lzZSBlbmQgYWZ0ZXIgYW55IGNvbnRyb2wgY2hhci0KKyAgICAgICBhY3Rlci4KKworICAgICAgIDMuIERvIG5vdCBicmVhayBIYW5ndWwgKGEgS29yZWFuICBzY3JpcHQpICBzeWxsYWJsZSAgc2VxdWVuY2VzLiAgSGFuZ3VsCisgICAgICAgY2hhcmFjdGVycyAgYXJlIG9mIGZpdmUgdHlwZXM6IEwsIFYsIFQsIExWLCBhbmQgTFZULiBBbiBMIGNoYXJhY3RlciBtYXkKKyAgICAgICBiZSBmb2xsb3dlZCBieSBhbiBMLCBWLCBMViwgb3IgTFZUIGNoYXJhY3RlcjsgYW4gTFYgb3IgViBjaGFyYWN0ZXIgIG1heQorICAgICAgIGJlIGZvbGxvd2VkIGJ5IGEgViBvciBUIGNoYXJhY3RlcjsgYW4gTFZUIG9yIFQgY2hhcmFjdGVyIG1heSBiZSBmb2xsd2VkCisgICAgICAgb25seSBieSBhIFQgY2hhcmFjdGVyLgorCisgICAgICAgNC4gRG8gbm90IGVuZCBiZWZvcmUgZXh0ZW5kaW5nIGNoYXJhY3RlcnMgb3Igc3BhY2luZyBtYXJrcy4gIENoYXJhY3RlcnMKKyAgICAgICB3aXRoICB0aGUgICJtYXJrIiAgcHJvcGVydHkgIGFsd2F5cyBoYXZlIHRoZSAiZXh0ZW5kIiBncmFwaGVtZSBicmVha2luZworICAgICAgIHByb3BlcnR5LgorCisgICAgICAgNS4gRG8gbm90IGVuZCBhZnRlciBwcmVwZW5kIGNoYXJhY3RlcnMuCisKKyAgICAgICA2LiBPdGhlcndpc2UsIGVuZCB0aGUgY2x1c3Rlci4KKworICAgUENSRTIncyBhZGRpdGlvbmFsIHByb3BlcnRpZXMKKworICAgICAgIEFzIHdlbGwgYXMgdGhlIHN0YW5kYXJkIFVuaWNvZGUgcHJvcGVydGllcyBkZXNjcmliZWQgYWJvdmUsIFBDUkUyICBzdXAtCisgICAgICAgcG9ydHMgIGZvdXIgIG1vcmUgIHRoYXQgIG1ha2UgaXQgcG9zc2libGUgdG8gY29udmVydCB0cmFkaXRpb25hbCBlc2NhcGUKKyAgICAgICBzZXF1ZW5jZXMgc3VjaCBhcyBcdyBhbmQgXHMgdG8gdXNlIFVuaWNvZGUgcHJvcGVydGllcy4gUENSRTIgdXNlcyB0aGVzZQorICAgICAgIG5vbi1zdGFuZGFyZCwgIG5vbi1QZXJsICBwcm9wZXJ0aWVzICBpbnRlcm5hbGx5ICB3aGVuIFBDUkUyX1VDUCBpcyBzZXQuCisgICAgICAgSG93ZXZlciwgdGhleSBtYXkgYWxzbyBiZSB1c2VkIGV4cGxpY2l0bHkuIFRoZXNlIHByb3BlcnRpZXMgYXJlOgorCisgICAgICAgICBYYW4gICBBbnkgYWxwaGFudW1lcmljIGNoYXJhY3RlcgorICAgICAgICAgWHBzICAgQW55IFBPU0lYIHNwYWNlIGNoYXJhY3RlcgorICAgICAgICAgWHNwICAgQW55IFBlcmwgc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICBYd2QgICBBbnkgUGVybCAid29yZCIgY2hhcmFjdGVyCisKKyAgICAgICBYYW4gbWF0Y2hlcyBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBlaXRoZXIgdGhlIEwgKGxldHRlcikgb3IgdGhlICBOICAobnVtLQorICAgICAgIGJlcikgIHByb3BlcnR5LiBYcHMgbWF0Y2hlcyB0aGUgY2hhcmFjdGVycyB0YWIsIGxpbmVmZWVkLCB2ZXJ0aWNhbCB0YWIsCisgICAgICAgZm9ybSBmZWVkLCBvciBjYXJyaWFnZSByZXR1cm4sIGFuZCBhbnkgb3RoZXIgY2hhcmFjdGVyIHRoYXQgaGFzICB0aGUgIFoKKyAgICAgICAoc2VwYXJhdG9yKSAgcHJvcGVydHkuICAgWHNwICBpcyAgdGhlICBzYW1lIGFzIFhwczsgaW4gUENSRTEgaXQgdXNlZCB0bworICAgICAgIGV4Y2x1ZGUgdmVydGljYWwgdGFiLCBmb3IgUGVybCBjb21wYXRpYmlsaXR5LCAgYnV0ICBQZXJsICBjaGFuZ2VkLiAgWHdkCisgICAgICAgbWF0Y2hlcyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIFhhbiwgcGx1cyB1bmRlcnNjb3JlLgorCisgICAgICAgVGhlcmUgIGlzIGFub3RoZXIgbm9uLXN0YW5kYXJkIHByb3BlcnR5LCBYdWMsIHdoaWNoIG1hdGNoZXMgYW55IGNoYXJhYy0KKyAgICAgICB0ZXIgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgYSBVbml2ZXJzYWwgQ2hhcmFjdGVyIE5hbWUgIGluICBDKysgIGFuZAorICAgICAgIG90aGVyICBwcm9ncmFtbWluZyAgbGFuZ3VhZ2VzLiAgVGhlc2UgYXJlIHRoZSBjaGFyYWN0ZXJzICQsIEAsIGAgKGdyYXZlCisgICAgICAgYWNjZW50KSwgYW5kIGFsbCBjaGFyYWN0ZXJzIHdpdGggVW5pY29kZSBjb2RlIHBvaW50cyAgZ3JlYXRlciAgdGhhbiAgb3IKKyAgICAgICBlcXVhbCAgdG8gVSswMEEwLCBleGNlcHQgZm9yIHRoZSBzdXJyb2dhdGVzIFUrRDgwMCB0byBVK0RGRkYuIE5vdGUgdGhhdAorICAgICAgIG1vc3QgYmFzZSAoQVNDSUkpIGNoYXJhY3RlcnMgYXJlIGV4Y2x1ZGVkLiAoVW5pdmVyc2FsICBDaGFyYWN0ZXIgIE5hbWVzCisgICAgICAgYXJlICBvZiAgdGhlICBmb3JtIFx1SEhISCBvciBcVUhISEhISEhIIHdoZXJlIEggaXMgYSBoZXhhZGVjaW1hbCBkaWdpdC4KKyAgICAgICBOb3RlIHRoYXQgdGhlIFh1YyBwcm9wZXJ0eSBkb2VzIG5vdCBtYXRjaCB0aGVzZSBzZXF1ZW5jZXMgYnV0IHRoZSBjaGFyLQorICAgICAgIGFjdGVycyB0aGF0IHRoZXkgcmVwcmVzZW50LikKKworICAgUmVzZXR0aW5nIHRoZSBtYXRjaCBzdGFydAorCisgICAgICAgVGhlICBlc2NhcGUgc2VxdWVuY2UgXEsgY2F1c2VzIGFueSBwcmV2aW91c2x5IG1hdGNoZWQgY2hhcmFjdGVycyBub3QgdG8KKyAgICAgICBiZSBpbmNsdWRlZCBpbiB0aGUgZmluYWwgbWF0Y2hlZCBzZXF1ZW5jZS4gRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuOgorCisgICAgICAgICBmb29cS2JhcgorCisgICAgICAgbWF0Y2hlcyAiZm9vYmFyIiwgYnV0IHJlcG9ydHMgdGhhdCBpdCBoYXMgbWF0Y2hlZCAiYmFyIi4gIFRoaXMgIGZlYXR1cmUKKyAgICAgICBpcyAgc2ltaWxhciAgdG8gIGEgbG9va2JlaGluZCBhc3NlcnRpb24gKGRlc2NyaWJlZCBiZWxvdykuICBIb3dldmVyLCBpbgorICAgICAgIHRoaXMgY2FzZSwgdGhlIHBhcnQgb2YgdGhlIHN1YmplY3QgYmVmb3JlIHRoZSByZWFsIG1hdGNoIGRvZXMgbm90ICBoYXZlCisgICAgICAgdG8gIGJlIG9mIGZpeGVkIGxlbmd0aCwgYXMgbG9va2JlaGluZCBhc3NlcnRpb25zIGRvLiBUaGUgdXNlIG9mIFxLIGRvZXMKKyAgICAgICBub3QgaW50ZXJmZXJlIHdpdGggdGhlIHNldHRpbmcgb2YgY2FwdHVyZWQgIHN1YnN0cmluZ3MuICAgRm9yICBleGFtcGxlLAorICAgICAgIHdoZW4gdGhlIHBhdHRlcm4KKworICAgICAgICAgKGZvbylcS2JhcgorCisgICAgICAgbWF0Y2hlcyAiZm9vYmFyIiwgdGhlIGZpcnN0IHN1YnN0cmluZyBpcyBzdGlsbCBzZXQgdG8gImZvbyIuCisKKyAgICAgICBQZXJsICBkb2N1bWVudHMgIHRoYXQgIHRoZSAgdXNlICBvZiAgXEsgIHdpdGhpbiBhc3NlcnRpb25zIGlzICJub3Qgd2VsbAorICAgICAgIGRlZmluZWQiLiBJbiBQQ1JFMiwgXEsgaXMgYWN0ZWQgdXBvbiB3aGVuICBpdCAgb2NjdXJzICBpbnNpZGUgIHBvc2l0aXZlCisgICAgICAgYXNzZXJ0aW9ucywgIGJ1dCAgaXMgIGlnbm9yZWQgIGluIG5lZ2F0aXZlIGFzc2VydGlvbnMuIE5vdGUgdGhhdCB3aGVuIGEKKyAgICAgICBwYXR0ZXJuIHN1Y2ggYXMgKD89YWJcSykgbWF0Y2hlcywgdGhlIHJlcG9ydGVkIHN0YXJ0IG9mIHRoZSAgbWF0Y2ggIGNhbgorICAgICAgIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZW5kIG9mIHRoZSBtYXRjaC4KKworICAgU2ltcGxlIGFzc2VydGlvbnMKKworICAgICAgIFRoZSAgZmluYWwgdXNlIG9mIGJhY2tzbGFzaCBpcyBmb3IgY2VydGFpbiBzaW1wbGUgYXNzZXJ0aW9ucy4gQW4gYXNzZXItCisgICAgICAgdGlvbiBzcGVjaWZpZXMgYSBjb25kaXRpb24gdGhhdCBoYXMgdG8gYmUgbWV0IGF0IGEgcGFydGljdWxhciBwb2ludCAgaW4KKyAgICAgICBhICBtYXRjaCwgd2l0aG91dCBjb25zdW1pbmcgYW55IGNoYXJhY3RlcnMgZnJvbSB0aGUgc3ViamVjdCBzdHJpbmcuIFRoZQorICAgICAgIHVzZSBvZiBzdWJwYXR0ZXJucyBmb3IgbW9yZSBjb21wbGljYXRlZCBhc3NlcnRpb25zIGlzIGRlc2NyaWJlZCAgYmVsb3cuCisgICAgICAgVGhlIGJhY2tzbGFzaGVkIGFzc2VydGlvbnMgYXJlOgorCisgICAgICAgICBcYiAgICAgbWF0Y2hlcyBhdCBhIHdvcmQgYm91bmRhcnkKKyAgICAgICAgIFxCICAgICBtYXRjaGVzIHdoZW4gbm90IGF0IGEgd29yZCBib3VuZGFyeQorICAgICAgICAgXEEgICAgIG1hdGNoZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0CisgICAgICAgICBcWiAgICAgbWF0Y2hlcyBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0CisgICAgICAgICAgICAgICAgIGFsc28gbWF0Y2hlcyBiZWZvcmUgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3QKKyAgICAgICAgIFx6ICAgICBtYXRjaGVzIG9ubHkgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdAorICAgICAgICAgXEcgICAgIG1hdGNoZXMgYXQgdGhlIGZpcnN0IG1hdGNoaW5nIHBvc2l0aW9uIGluIHRoZSBzdWJqZWN0CisKKyAgICAgICBJbnNpZGUgIGEgIGNoYXJhY3RlciAgY2xhc3MsIFxiIGhhcyBhIGRpZmZlcmVudCBtZWFuaW5nOyBpdCBtYXRjaGVzIHRoZQorICAgICAgIGJhY2tzcGFjZSBjaGFyYWN0ZXIuIElmIGFueSBvdGhlciBvZiAgdGhlc2UgIGFzc2VydGlvbnMgIGFwcGVhcnMgIGluICBhCisgICAgICAgY2hhcmFjdGVyIGNsYXNzLCBhbiAiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2UiIGVycm9yIGlzIGdlbmVyYXRlZC4KKworICAgICAgIEEgIHdvcmQgIGJvdW5kYXJ5IGlzIGEgcG9zaXRpb24gaW4gdGhlIHN1YmplY3Qgc3RyaW5nIHdoZXJlIHRoZSBjdXJyZW50CisgICAgICAgY2hhcmFjdGVyIGFuZCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIGRvIG5vdCBib3RoIG1hdGNoIFx3IG9yICBcVyAgKGkuZS4KKyAgICAgICBvbmUgIG1hdGNoZXMgIFx3ICBhbmQgdGhlIG90aGVyIG1hdGNoZXMgXFcpLCBvciB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZQorICAgICAgIHN0cmluZyBpZiB0aGUgZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIgbWF0Y2hlcyBcdywgIHJlc3BlY3RpdmVseS4gIEluICBhCisgICAgICAgVVRGICBtb2RlLCAgdGhlICBtZWFuaW5ncyAgb2YgIFx3ICBhbmQgXFcgY2FuIGJlIGNoYW5nZWQgYnkgc2V0dGluZyB0aGUKKyAgICAgICBQQ1JFMl9VQ1Agb3B0aW9uLiBXaGVuIHRoaXMgaXMgZG9uZSwgaXQgYWxzbyBhZmZlY3RzIFxiIGFuZCBcQi4gTmVpdGhlcgorICAgICAgIFBDUkUyICBub3IgUGVybCBoYXMgYSBzZXBhcmF0ZSAic3RhcnQgb2Ygd29yZCIgb3IgImVuZCBvZiB3b3JkIiBtZXRhc2UtCisgICAgICAgcXVlbmNlLiBIb3dldmVyLCB3aGF0ZXZlciBmb2xsb3dzIFxiIG5vcm1hbGx5IGRldGVybWluZXMgd2hpY2ggIGl0ICBpcy4KKyAgICAgICBGb3IgZXhhbXBsZSwgdGhlIGZyYWdtZW50IFxiYSBtYXRjaGVzICJhIiBhdCB0aGUgc3RhcnQgb2YgYSB3b3JkLgorCisgICAgICAgVGhlICBcQSwgIFxaLCAgYW5kIFx6IGFzc2VydGlvbnMgZGlmZmVyIGZyb20gdGhlIHRyYWRpdGlvbmFsIGNpcmN1bWZsZXgKKyAgICAgICBhbmQgZG9sbGFyIChkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbikgaW4gdGhhdCB0aGV5IG9ubHkgZXZlciBtYXRjaAorICAgICAgIGF0ICB0aGUgIHZlcnkgc3RhcnQgYW5kIGVuZCBvZiB0aGUgc3ViamVjdCBzdHJpbmcsIHdoYXRldmVyIG9wdGlvbnMgYXJlCisgICAgICAgc2V0LiBUaHVzLCB0aGV5IGFyZSBpbmRlcGVuZGVudCBvZiBtdWx0aWxpbmUgbW9kZS4gVGhlc2UgIHRocmVlICBhc3Nlci0KKyAgICAgICB0aW9ucyAgYXJlICBub3QgIGFmZmVjdGVkICBieSB0aGUgUENSRTJfTk9UQk9MIG9yIFBDUkUyX05PVEVPTCBvcHRpb25zLAorICAgICAgIHdoaWNoIGFmZmVjdCBvbmx5IHRoZSBiZWhhdmlvdXIgb2YgdGhlIGNpcmN1bWZsZXggYW5kIGRvbGxhciAgbWV0YWNoYXItCisgICAgICAgYWN0ZXJzLiAgSG93ZXZlciwgIGlmIHRoZSBzdGFydG9mZnNldCBhcmd1bWVudCBvZiBwY3JlMl9tYXRjaCgpIGlzIG5vbi0KKyAgICAgICB6ZXJvLCBpbmRpY2F0aW5nIHRoYXQgbWF0Y2hpbmcgaXMgdG8gc3RhcnQgYXQgYSBwb2ludCAgb3RoZXIgIHRoYW4gIHRoZQorICAgICAgIGJlZ2lubmluZyAgb2YgIHRoZSBzdWJqZWN0LCBcQSBjYW4gbmV2ZXIgbWF0Y2guICBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuCisgICAgICAgXFogYW5kIFx6IGlzIHRoYXQgXFogbWF0Y2hlcyBiZWZvcmUgYSBuZXdsaW5lIGF0IHRoZSBlbmQgb2YgdGhlICBzdHJpbmcKKyAgICAgICBhcyB3ZWxsIGFzIGF0IHRoZSB2ZXJ5IGVuZCwgd2hlcmVhcyBceiBtYXRjaGVzIG9ubHkgYXQgdGhlIGVuZC4KKworICAgICAgIFRoZSAgXEcgYXNzZXJ0aW9uIGlzIHRydWUgb25seSB3aGVuIHRoZSBjdXJyZW50IG1hdGNoaW5nIHBvc2l0aW9uIGlzIGF0CisgICAgICAgdGhlIHN0YXJ0IHBvaW50IG9mIHRoZSBtYXRjaCwgYXMgc3BlY2lmaWVkIGJ5IHRoZSBzdGFydG9mZnNldCAgYXJndW1lbnQKKyAgICAgICBvZiAgcGNyZTJfbWF0Y2goKS4gIEl0IGRpZmZlcnMgZnJvbSBcQSB3aGVuIHRoZSB2YWx1ZSBvZiBzdGFydG9mZnNldCBpcworICAgICAgIG5vbi16ZXJvLiBCeSBjYWxsaW5nICBwY3JlMl9tYXRjaCgpICBtdWx0aXBsZSAgdGltZXMgIHdpdGggIGFwcHJvcHJpYXRlCisgICAgICAgYXJndW1lbnRzLCAgeW91ICBjYW4gIG1pbWljIFBlcmwncyAvZyBvcHRpb24sIGFuZCBpdCBpcyBpbiB0aGlzIGtpbmQgb2YKKyAgICAgICBpbXBsZW1lbnRhdGlvbiB3aGVyZSBcRyBjYW4gYmUgdXNlZnVsLgorCisgICAgICAgTm90ZSwgaG93ZXZlciwgdGhhdCBQQ1JFMidzIGludGVycHJldGF0aW9uIG9mIFxHLCBhcyB0aGUgc3RhcnQgIG9mICB0aGUKKyAgICAgICBjdXJyZW50IG1hdGNoLCBpcyBzdWJ0bHkgZGlmZmVyZW50IGZyb20gUGVybCdzLCB3aGljaCBkZWZpbmVzIGl0IGFzIHRoZQorICAgICAgIGVuZCBvZiB0aGUgcHJldmlvdXMgbWF0Y2guIEluIFBlcmwsIHRoZXNlIGNhbiAgYmUgIGRpZmZlcmVudCAgd2hlbiAgdGhlCisgICAgICAgcHJldmlvdXNseSAgbWF0Y2hlZCBzdHJpbmcgd2FzIGVtcHR5LiBCZWNhdXNlIFBDUkUyIGRvZXMganVzdCBvbmUgbWF0Y2gKKyAgICAgICBhdCBhIHRpbWUsIGl0IGNhbm5vdCByZXByb2R1Y2UgdGhpcyBiZWhhdmlvdXIuCisKKyAgICAgICBJZiBhbGwgdGhlIGFsdGVybmF0aXZlcyBvZiBhIHBhdHRlcm4gYmVnaW4gd2l0aCBcRywgdGhlICBleHByZXNzaW9uICBpcworICAgICAgIGFuY2hvcmVkIHRvIHRoZSBzdGFydGluZyBtYXRjaCBwb3NpdGlvbiwgYW5kIHRoZSAiYW5jaG9yZWQiIGZsYWcgaXMgc2V0CisgICAgICAgaW4gdGhlIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKworCitDSVJDVU1GTEVYIEFORCBET0xMQVIKKworICAgICAgIFRoZSBjaXJjdW1mbGV4IGFuZCBkb2xsYXIgIG1ldGFjaGFyYWN0ZXJzICBhcmUgIHplcm8td2lkdGggIGFzc2VydGlvbnMuCisgICAgICAgVGhhdCAgaXMsICB0aGV5IHRlc3QgZm9yIGEgcGFydGljdWxhciBjb25kaXRpb24gYmVpbmcgdHJ1ZSB3aXRob3V0IGNvbi0KKyAgICAgICBzdW1pbmcgYW55IGNoYXJhY3RlcnMgZnJvbSB0aGUgc3ViamVjdCBzdHJpbmcuIFRoZXNlIHR3byBtZXRhY2hhcmFjdGVycworICAgICAgIGFyZSAgY29uY2VybmVkICB3aXRoIG1hdGNoaW5nIHRoZSBzdGFydHMgYW5kIGVuZHMgb2YgbGluZXMuIElmIHRoZSBuZXctCisgICAgICAgbGluZSBjb252ZW50aW9uIGlzIHNldCBzbyB0aGF0IG9ubHkgdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiAgaXMKKyAgICAgICByZWNvZ25pemVkICBhcyAgYSBuZXdsaW5lLCBpc29sYXRlZCBDUiBhbmQgTEYgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBhcworICAgICAgIG9yZGluYXJ5IGRhdGEgY2hhcmFjdGVycywgYW5kIGFyZSBub3QgcmVjb2duaXplZCBhcyBuZXdsaW5lcy4KKworICAgICAgIE91dHNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIGluIHRoZSBkZWZhdWx0IG1hdGNoaW5nIG1vZGUsIHRoZSBjaXJjdW1mbGV4CisgICAgICAgY2hhcmFjdGVyICBpcyAgYW4gIGFzc2VydGlvbiAgdGhhdCBpcyB0cnVlIG9ubHkgaWYgdGhlIGN1cnJlbnQgbWF0Y2hpbmcKKyAgICAgICBwb2ludCBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLiBJZiB0aGUgIHN0YXJ0b2Zmc2V0ICBhcmd1LQorICAgICAgIG1lbnQgIG9mICBwY3JlMl9tYXRjaCgpIGlzIG5vbi16ZXJvLCBvciBpZiBQQ1JFMl9OT1RCT0wgaXMgc2V0LCBjaXJjdW0tCisgICAgICAgZmxleCBjYW4gbmV2ZXIgbWF0Y2ggaWYgdGhlIFBDUkUyX01VTFRJTElORSBvcHRpb24gaXMgdW5zZXQuICBJbnNpZGUgIGEKKyAgICAgICBjaGFyYWN0ZXIgIGNsYXNzLCAgY2lyY3VtZmxleCAgaGFzICBhbiAgZW50aXJlbHkgZGlmZmVyZW50IG1lYW5pbmcgKHNlZQorICAgICAgIGJlbG93KS4KKworICAgICAgIENpcmN1bWZsZXggbmVlZCBub3QgYmUgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgcGF0dGVybiBpZiAgYSAgbnVtYmVyCisgICAgICAgb2YgIGFsdGVybmF0aXZlcyBhcmUgaW52b2x2ZWQsIGJ1dCBpdCBzaG91bGQgYmUgdGhlIGZpcnN0IHRoaW5nIGluIGVhY2gKKyAgICAgICBhbHRlcm5hdGl2ZSBpbiB3aGljaCBpdCBhcHBlYXJzIGlmIHRoZSBwYXR0ZXJuIGlzIGV2ZXIgIHRvICBtYXRjaCAgdGhhdAorICAgICAgIGJyYW5jaC4gIElmIGFsbCBwb3NzaWJsZSBhbHRlcm5hdGl2ZXMgc3RhcnQgd2l0aCBhIGNpcmN1bWZsZXgsIHRoYXQgaXMsCisgICAgICAgaWYgdGhlIHBhdHRlcm4gaXMgY29uc3RyYWluZWQgdG8gbWF0Y2ggb25seSBhdCB0aGUgc3RhcnQgIG9mICB0aGUgIHN1Yi0KKyAgICAgICBqZWN0LCAgaXQgIGlzICBzYWlkICB0byBiZSBhbiAiYW5jaG9yZWQiIHBhdHRlcm4uIChUaGVyZSBhcmUgYWxzbyBvdGhlcgorICAgICAgIGNvbnN0cnVjdHMgdGhhdCBjYW4gY2F1c2UgYSBwYXR0ZXJuIHRvIGJlIGFuY2hvcmVkLikKKworICAgICAgIFRoZSBkb2xsYXIgY2hhcmFjdGVyIGlzIGFuIGFzc2VydGlvbiB0aGF0IGlzIHRydWUgb25seSBpZiAgdGhlICBjdXJyZW50CisgICAgICAgbWF0Y2hpbmcgIHBvaW50ICBpcyAgYXQgIHRoZSAgZW5kIG9mIHRoZSBzdWJqZWN0IHN0cmluZywgb3IgaW1tZWRpYXRlbHkKKyAgICAgICBiZWZvcmUgYSBuZXdsaW5lICBhdCAgdGhlICBlbmQgIG9mICB0aGUgIHN0cmluZyAgKGJ5ICBkZWZhdWx0KSwgIHVubGVzcworICAgICAgIFBDUkUyX05PVEVPTCBpcyBzZXQuIE5vdGUsIGhvd2V2ZXIsIHRoYXQgaXQgZG9lcyBub3QgYWN0dWFsbHkgbWF0Y2ggdGhlCisgICAgICAgbmV3bGluZS4gRG9sbGFyIG5lZWQgbm90IGJlIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgcGF0dGVybiBpZiBhIG51bS0KKyAgICAgICBiZXIgb2YgYWx0ZXJuYXRpdmVzIGFyZSBpbnZvbHZlZCwgYnV0IGl0IHNob3VsZCBiZSB0aGUgbGFzdCBpdGVtIGluIGFueQorICAgICAgIGJyYW5jaCBpbiB3aGljaCBpdCBhcHBlYXJzLiBEb2xsYXIgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBpbiBhICBjaGFyYWMtCisgICAgICAgdGVyIGNsYXNzLgorCisgICAgICAgVGhlICBtZWFuaW5nICBvZiAgZG9sbGFyICBjYW4gYmUgY2hhbmdlZCBzbyB0aGF0IGl0IG1hdGNoZXMgb25seSBhdCB0aGUKKyAgICAgICB2ZXJ5IGVuZCBvZiB0aGUgc3RyaW5nLCBieSBzZXR0aW5nIHRoZSBQQ1JFMl9ET0xMQVJfRU5ET05MWSAgb3B0aW9uICBhdAorICAgICAgIGNvbXBpbGUgdGltZS4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgdGhlIFxaIGFzc2VydGlvbi4KKworICAgICAgIFRoZSBtZWFuaW5ncyBvZiB0aGUgY2lyY3VtZmxleCBhbmQgZG9sbGFyIG1ldGFjaGFyYWN0ZXJzIGFyZSBjaGFuZ2VkIGlmCisgICAgICAgdGhlIFBDUkUyX01VTFRJTElORSBvcHRpb24gaXMgc2V0LiBXaGVuIHRoaXMgIGlzICB0aGUgIGNhc2UsICBhICBkb2xsYXIKKyAgICAgICBjaGFyYWN0ZXIgIG1hdGNoZXMgYmVmb3JlIGFueSBuZXdsaW5lcyBpbiB0aGUgc3RyaW5nLCBhcyB3ZWxsIGFzIGF0IHRoZQorICAgICAgIHZlcnkgZW5kLCBhbmQgYSBjaXJjdW1mbGV4IG1hdGNoZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgaW50ZXJuYWwgIG5ld2xpbmVzCisgICAgICAgYXMgIHdlbGwgYXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0IHN0cmluZy4gSXQgZG9lcyBub3QgbWF0Y2ggYWZ0ZXIKKyAgICAgICBhIG5ld2xpbmUgdGhhdCBlbmRzIHRoZSBzdHJpbmcsIGZvciBjb21wYXRpYmlsaXR5IHdpdGggIFBlcmwuICBIb3dldmVyLAorICAgICAgIHRoaXMgY2FuIGJlIGNoYW5nZWQgYnkgc2V0dGluZyB0aGUgUENSRTJfQUxUX0NJUkNVTUZMRVggb3B0aW9uLgorCisgICAgICAgRm9yICBleGFtcGxlLCB0aGUgcGF0dGVybiAvXmFiYyQvIG1hdGNoZXMgdGhlIHN1YmplY3Qgc3RyaW5nICJkZWZcbmFiYyIKKyAgICAgICAod2hlcmUgXG4gcmVwcmVzZW50cyBhIG5ld2xpbmUpIGluIG11bHRpbGluZSBtb2RlLCBidXQgIG5vdCAgb3RoZXJ3aXNlLgorICAgICAgIENvbnNlcXVlbnRseSwgIHBhdHRlcm5zICB0aGF0ICBhcmUgYW5jaG9yZWQgaW4gc2luZ2xlIGxpbmUgbW9kZSBiZWNhdXNlCisgICAgICAgYWxsIGJyYW5jaGVzIHN0YXJ0IHdpdGggXiBhcmUgbm90IGFuY2hvcmVkIGluICBtdWx0aWxpbmUgIG1vZGUsICBhbmQgIGEKKyAgICAgICBtYXRjaCAgZm9yICBjaXJjdW1mbGV4ICBpcyAgcG9zc2libGUgIHdoZW4gIHRoZSBzdGFydG9mZnNldCBhcmd1bWVudCBvZgorICAgICAgIHBjcmUyX21hdGNoKCkgaXMgbm9uLXplcm8uIFRoZSBQQ1JFMl9ET0xMQVJfRU5ET05MWSBvcHRpb24gIGlzICBpZ25vcmVkCisgICAgICAgaWYgUENSRTJfTVVMVElMSU5FIGlzIHNldC4KKworICAgICAgIFdoZW4gIHRoZSAgbmV3bGluZSAgY29udmVudGlvbiAoc2VlICJOZXdsaW5lIGNvbnZlbnRpb25zIiBiZWxvdykgcmVjb2ctCisgICAgICAgbml6ZXMgdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiBhcyBhIG5ld2xpbmUsIHRoaXMgaXMgIHByZWZlcnJlZCwKKyAgICAgICBldmVuICBpZiAgdGhlICBzaW5nbGUgIGNoYXJhY3RlcnMgQ1IgYW5kIExGIGFyZSBhbHNvIHJlY29nbml6ZWQgYXMgbmV3LQorICAgICAgIGxpbmVzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIG5ld2xpbmUgY29udmVudGlvbiAgaXMgICJhbnkiLCAgYSAgbXVsdGlsaW5lCisgICAgICAgbW9kZSAgY2lyY3VtZmxleCBtYXRjaGVzIGJlZm9yZSAieHl6IiBpbiB0aGUgc3RyaW5nICJhYmNcclxueHl6IiByYXRoZXIKKyAgICAgICB0aGFuIGFmdGVyIENSLCBldmVuIHRob3VnaCBDUiBvbiBpdHMgb3duIGlzIGEgdmFsaWQgbmV3bGluZS4gIChJdCAgYWxzbworICAgICAgIG1hdGNoZXMgYXQgdGhlIHZlcnkgc3RhcnQgb2YgdGhlIHN0cmluZywgb2YgY291cnNlLikKKworICAgICAgIE5vdGUgIHRoYXQgIHRoZSBzZXF1ZW5jZXMgXEEsIFxaLCBhbmQgXHogY2FuIGJlIHVzZWQgdG8gbWF0Y2ggdGhlIHN0YXJ0CisgICAgICAgYW5kIGVuZCBvZiB0aGUgc3ViamVjdCBpbiBib3RoIG1vZGVzLCBhbmQgaWYgYWxsIGJyYW5jaGVzIG9mIGEgIHBhdHRlcm4KKyAgICAgICBzdGFydCAgd2l0aCBcQSBpdCBpcyBhbHdheXMgYW5jaG9yZWQsIHdoZXRoZXIgb3Igbm90IFBDUkUyX01VTFRJTElORSBpcworICAgICAgIHNldC4KKworCitGVUxMIFNUT1AgKFBFUklPRCwgRE9UKSBBTkQgXE4KKworICAgICAgIE91dHNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIGEgZG90IGluIHRoZSBwYXR0ZXJuIG1hdGNoZXMgYW55IG9uZSBjaGFyYWMtCisgICAgICAgdGVyICBpbiAgdGhlIHN1YmplY3Qgc3RyaW5nIGV4Y2VwdCAoYnkgZGVmYXVsdCkgYSBjaGFyYWN0ZXIgdGhhdCBzaWduaS0KKyAgICAgICBmaWVzIHRoZSBlbmQgb2YgYSBsaW5lLgorCisgICAgICAgV2hlbiBhIGxpbmUgZW5kaW5nIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgY2hhcmFjdGVyLCBkb3QgbmV2ZXIgIG1hdGNoZXMKKyAgICAgICB0aGF0ICBjaGFyYWN0ZXI7IHdoZW4gdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiBpcyB1c2VkLCBkb3QgZG9lcworICAgICAgIG5vdCBtYXRjaCBDUiBpZiBpdCBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCAgYnkgIExGLCAgYnV0ICBvdGhlcndpc2UgIGl0CisgICAgICAgbWF0Y2hlcyAgYWxsIGNoYXJhY3RlcnMgKGluY2x1ZGluZyBpc29sYXRlZCBDUnMgYW5kIExGcykuIFdoZW4gYW55IFVuaS0KKyAgICAgICBjb2RlIGxpbmUgZW5kaW5ncyBhcmUgYmVpbmcgcmVjb2duaXplZCwgZG90IGRvZXMgbm90IG1hdGNoIENSIG9yIExGICBvcgorICAgICAgIGFueSBvZiB0aGUgb3RoZXIgbGluZSBlbmRpbmcgY2hhcmFjdGVycy4KKworICAgICAgIFRoZSAgYmVoYXZpb3VyICBvZiAgZG90ICB3aXRoIHJlZ2FyZCB0byBuZXdsaW5lcyBjYW4gYmUgY2hhbmdlZC4gSWYgdGhlCisgICAgICAgUENSRTJfRE9UQUxMIG9wdGlvbiBpcyBzZXQsIGEgZG90IG1hdGNoZXMgYW55ICBvbmUgIGNoYXJhY3RlciwgIHdpdGhvdXQKKyAgICAgICBleGNlcHRpb24uICAgSWYgIHRoZSB0d28tY2hhcmFjdGVyIHNlcXVlbmNlIENSTEYgaXMgcHJlc2VudCBpbiB0aGUgc3ViLQorICAgICAgIGplY3Qgc3RyaW5nLCBpdCB0YWtlcyB0d28gZG90cyB0byBtYXRjaCBpdC4KKworICAgICAgIFRoZSBoYW5kbGluZyBvZiBkb3QgaXMgZW50aXJlbHkgaW5kZXBlbmRlbnQgb2YgdGhlIGhhbmRsaW5nIG9mICBjaXJjdW0tCisgICAgICAgZmxleCAgYW5kICBkb2xsYXIsICB0aGUgIG9ubHkgcmVsYXRpb25zaGlwIGJlaW5nIHRoYXQgdGhleSBib3RoIGludm9sdmUKKyAgICAgICBuZXdsaW5lcy4gRG90IGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuCisKKyAgICAgICBUaGUgZXNjYXBlIHNlcXVlbmNlIFxOIGJlaGF2ZXMgbGlrZSAgYSAgZG90LCAgZXhjZXB0ICB0aGF0ICBpdCAgaXMgIG5vdAorICAgICAgIGFmZmVjdGVkICBieSAgdGhlICBQQ1JFMl9ET1RBTEwgIG9wdGlvbi4gSW4gb3RoZXIgd29yZHMsIGl0IG1hdGNoZXMgYW55CisgICAgICAgY2hhcmFjdGVyIGV4Y2VwdCBvbmUgdGhhdCBzaWduaWZpZXMgdGhlIGVuZCBvZiBhIGxpbmUuIFBlcmwgIGFsc28gIHVzZXMKKyAgICAgICBcTiB0byBtYXRjaCBjaGFyYWN0ZXJzIGJ5IG5hbWU7IFBDUkUyIGRvZXMgbm90IHN1cHBvcnQgdGhpcy4KKworCitNQVRDSElORyBBIFNJTkdMRSBDT0RFIFVOSVQKKworICAgICAgIE91dHNpZGUgIGEgY2hhcmFjdGVyIGNsYXNzLCB0aGUgZXNjYXBlIHNlcXVlbmNlIFxDIG1hdGNoZXMgYW55IG9uZSBjb2RlCisgICAgICAgdW5pdCwgd2hldGhlciBvciBub3QgYSBVVEYgbW9kZSBpcyBzZXQuIEluIHRoZSA4LWJpdCBsaWJyYXJ5LCBvbmUgIGNvZGUKKyAgICAgICB1bml0ICBpcyAgb25lICBieXRlOyAgaW4gdGhlIDE2LWJpdCBsaWJyYXJ5IGl0IGlzIGEgMTYtYml0IHVuaXQ7IGluIHRoZQorICAgICAgIDMyLWJpdCBsaWJyYXJ5IGl0IGlzIGEgMzItYml0IHVuaXQuIFVubGlrZSBhICBkb3QsICBcQyAgYWx3YXlzICBtYXRjaGVzCisgICAgICAgbGluZS1lbmRpbmcgIGNoYXJhY3RlcnMuICBUaGUgIGZlYXR1cmUgIGlzIHByb3ZpZGVkIGluIFBlcmwgaW4gb3JkZXIgdG8KKyAgICAgICBtYXRjaCBpbmRpdmlkdWFsIGJ5dGVzIGluIFVURi04IG1vZGUsIGJ1dCBpdCBpcyB1bmNsZWFyIGhvdyBpdCBjYW4gdXNlLQorICAgICAgIGZ1bGx5IGJlIHVzZWQuCisKKyAgICAgICBCZWNhdXNlICBcQyAgYnJlYWtzICB1cCBjaGFyYWN0ZXJzIGludG8gaW5kaXZpZHVhbCBjb2RlIHVuaXRzLCBtYXRjaGluZworICAgICAgIG9uZSB1bml0IHdpdGggXEMgaW4gVVRGLTggb3IgVVRGLTE2IG1vZGUgbWVhbnMgdGhhdCAgdGhlICByZXN0ICBvZiAgdGhlCisgICAgICAgc3RyaW5nICBtYXkgIHN0YXJ0ICB3aXRoICBhIG1hbGZvcm1lZCBVVEYgY2hhcmFjdGVyLiBUaGlzIGhhcyB1bmRlZmluZWQKKyAgICAgICByZXN1bHRzLCBiZWNhdXNlIFBDUkUyIGFzc3VtZXMgdGhhdCBpdCBpcyBtYXRjaGluZyBjaGFyYWN0ZXIgYnkgY2hhcmFjLQorICAgICAgIHRlciAgaW4gIGEgIHZhbGlkIFVURiBzdHJpbmcgKGJ5IGRlZmF1bHQgaXQgY2hlY2tzIHRoZSBzdWJqZWN0IHN0cmluZydzCisgICAgICAgdmFsaWRpdHkgYXQgdGhlICBzdGFydCAgb2YgIHByb2Nlc3NpbmcgIHVubGVzcyAgdGhlICBQQ1JFMl9OT19VVEZfQ0hFQ0sKKyAgICAgICBvcHRpb24gaXMgdXNlZCkuCisKKyAgICAgICBBbiAgIGFwcGxpY2F0aW9uICAgY2FuICAgbG9jayAgIG91dCAgdGhlICB1c2UgIG9mICBcQyAgYnkgIHNldHRpbmcgIHRoZQorICAgICAgIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DIG9wdGlvbiB3aGVuIGNvbXBpbGluZyBhICBwYXR0ZXJuLiAgSXQgIGlzICBhbHNvCisgICAgICAgcG9zc2libGUgdG8gYnVpbGQgUENSRTIgd2l0aCB0aGUgdXNlIG9mIFxDIHBlcm1hbmVudGx5IGRpc2FibGVkLgorCisgICAgICAgUENSRTIgIGRvZXMgIG5vdCBhbGxvdyBcQyB0byBhcHBlYXIgaW4gbG9va2JlaGluZCBhc3NlcnRpb25zIChkZXNjcmliZWQKKyAgICAgICBiZWxvdykgaW4gYSBVVEYgbW9kZSwgYmVjYXVzZSB0aGlzIHdvdWxkIG1ha2UgaXQgaW1wb3NzaWJsZSAgdG8gIGNhbGN1LQorICAgICAgIGxhdGUgIHRoZSAgbGVuZ3RoICBvZiAgdGhlIGxvb2tiZWhpbmQuIE5laXRoZXIgdGhlIGFsdGVybmF0aXZlIG1hdGNoaW5nCisgICAgICAgZnVuY3Rpb24gcGNyZTJfZGZhX21hdGNoKCkgbm90IHRoZSBKSVQgb3B0aW1pemVyIHN1cHBvcnQgXEMgIGluICBhICBVVEYKKyAgICAgICBtb2RlLiBUaGUgZm9ybWVyIGdpdmVzIGEgbWF0Y2gtdGltZSBlcnJvcjsgdGhlIGxhdHRlciBmYWlscyB0byBvcHRpbWl6ZQorICAgICAgIGFuZCBzbyB0aGUgbWF0Y2ggaXMgYWx3YXlzIHJ1biB1c2luZyB0aGUgaW50ZXJwcmV0ZXIuCisKKyAgICAgICBJbiBnZW5lcmFsLCB0aGUgXEMgZXNjYXBlIHNlcXVlbmNlIGlzIGJlc3QgYXZvaWRlZC4gSG93ZXZlciwgb25lIHdheSBvZgorICAgICAgIHVzaW5nICBpdCB0aGF0IGF2b2lkcyB0aGUgcHJvYmxlbSBvZiBtYWxmb3JtZWQgVVRGIGNoYXJhY3RlcnMgaXMgdG8gdXNlCisgICAgICAgYSBsb29rYWhlYWQgdG8gY2hlY2sgdGhlIGxlbmd0aCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIsIGFzIGluIHRoaXMgIHBhdC0KKyAgICAgICB0ZXJuLCAgd2hpY2ggIGNvdWxkIGJlIHVzZWQgd2l0aCBhIFVURi04IHN0cmluZyAoaWdub3JlIHdoaXRlIHNwYWNlIGFuZAorICAgICAgIGxpbmUgYnJlYWtzKToKKworICAgICAgICAgKD98ICg/PVtceDAwLVx4N2ZdKShcQykgfAorICAgICAgICAgICAgICg/PVtceDgwLVx4ezdmZn1dKShcQykoXEMpIHwKKyAgICAgICAgICAgICAoPz1bXHh7ODAwfS1ceHtmZmZmfV0pKFxDKShcQykoXEMpIHwKKyAgICAgICAgICAgICAoPz1bXHh7MTAwMDB9LVx4ezFmZmZmZn1dKShcQykoXEMpKFxDKShcQykpCisKKyAgICAgICBJbiB0aGlzIGV4YW1wbGUsIGEgZ3JvdXAgdGhhdCBzdGFydHMgIHdpdGggICg/fCAgcmVzZXRzICB0aGUgIGNhcHR1cmluZworICAgICAgIHBhcmVudGhlc2VzIG51bWJlcnMgaW4gZWFjaCBhbHRlcm5hdGl2ZSAoc2VlICJEdXBsaWNhdGUgU3VicGF0dGVybiBOdW0tCisgICAgICAgYmVycyIgYmVsb3cpLiBUaGUgYXNzZXJ0aW9ucyBhdCB0aGUgc3RhcnQgb2YgZWFjaCBicmFuY2ggY2hlY2sgdGhlIG5leHQKKyAgICAgICBVVEYtOCAgY2hhcmFjdGVyICBmb3IgIHZhbHVlcyAgd2hvc2UgZW5jb2RpbmcgdXNlcyAxLCAyLCAzLCBvciA0IGJ5dGVzLAorICAgICAgIHJlc3BlY3RpdmVseS4gVGhlIGNoYXJhY3RlcidzIGluZGl2aWR1YWwgYnl0ZXMgYXJlIHRoZW4gY2FwdHVyZWQgYnkgdGhlCisgICAgICAgYXBwcm9wcmlhdGUgbnVtYmVyIG9mIFxDIGdyb3Vwcy4KKworCitTUVVBUkUgQlJBQ0tFVFMgQU5EIENIQVJBQ1RFUiBDTEFTU0VTCisKKyAgICAgICBBbiBvcGVuaW5nIHNxdWFyZSBicmFja2V0IGludHJvZHVjZXMgYSBjaGFyYWN0ZXIgY2xhc3MsIHRlcm1pbmF0ZWQgYnkgYQorICAgICAgIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQuIEEgY2xvc2luZyBzcXVhcmUgYnJhY2tldCBvbiBpdHMgb3duIGlzIG5vdCBzcGUtCisgICAgICAgY2lhbCAgYnkgIGRlZmF1bHQuICBJZiBhIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgaXMgcmVxdWlyZWQgYXMgYSBtZW1iZXIKKyAgICAgICBvZiB0aGUgY2xhc3MsIGl0IHNob3VsZCBiZSB0aGUgZmlyc3QgZGF0YSBjaGFyYWN0ZXIgaW4gdGhlIGNsYXNzIChhZnRlcgorICAgICAgIGFuICBpbml0aWFsICBjaXJjdW1mbGV4LCAgaWYgcHJlc2VudCkgb3IgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLiBUaGlzCisgICAgICAgbWVhbnMgdGhhdCwgYnkgZGVmYXVsdCwgYW4gZW1wdHkgY2xhc3MgY2Fubm90IGJlIGRlZmluZWQuICBIb3dldmVyLCAgaWYKKyAgICAgICB0aGUgIFBDUkUyX0FMTE9XX0VNUFRZX0NMQVNTIG9wdGlvbiBpcyBzZXQsIGEgY2xvc2luZyBzcXVhcmUgYnJhY2tldCBhdAorICAgICAgIHRoZSBzdGFydCBkb2VzIGVuZCB0aGUgKGVtcHR5KSBjbGFzcy4KKworICAgICAgIEEgY2hhcmFjdGVyIGNsYXNzIG1hdGNoZXMgYSBzaW5nbGUgY2hhcmFjdGVyIGluIHRoZSBzdWJqZWN0LiBBICBtYXRjaGVkCisgICAgICAgY2hhcmFjdGVyIG11c3QgYmUgaW4gdGhlIHNldCBvZiBjaGFyYWN0ZXJzIGRlZmluZWQgYnkgdGhlIGNsYXNzLCB1bmxlc3MKKyAgICAgICB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIGlzIGEgY2lyY3VtZmxleCwgIGluICB3aGljaAorICAgICAgIGNhc2UgdGhlIHN1YmplY3QgY2hhcmFjdGVyIG11c3Qgbm90IGJlIGluIHRoZSBzZXQgZGVmaW5lZCBieSB0aGUgY2xhc3MuCisgICAgICAgSWYgYSBjaXJjdW1mbGV4IGlzIGFjdHVhbGx5IHJlcXVpcmVkIGFzIGEgbWVtYmVyIG9mIHRoZSAgY2xhc3MsICBlbnN1cmUKKyAgICAgICBpdCBpcyBub3QgdGhlIGZpcnN0IGNoYXJhY3Rlciwgb3IgZXNjYXBlIGl0IHdpdGggYSBiYWNrc2xhc2guCisKKyAgICAgICBGb3IgIGV4YW1wbGUsIHRoZSBjaGFyYWN0ZXIgY2xhc3MgW2FlaW91XSBtYXRjaGVzIGFueSBsb3dlciBjYXNlIHZvd2VsLAorICAgICAgIHdoaWxlIFteYWVpb3VdIG1hdGNoZXMgYW55IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhICBsb3dlciAgY2FzZSAgdm93ZWwuCisgICAgICAgTm90ZSB0aGF0IGEgY2lyY3VtZmxleCBpcyBqdXN0IGEgY29udmVuaWVudCBub3RhdGlvbiBmb3Igc3BlY2lmeWluZyB0aGUKKyAgICAgICBjaGFyYWN0ZXJzIHRoYXQgYXJlIGluIHRoZSBjbGFzcyBieSBlbnVtZXJhdGluZyB0aG9zZSB0aGF0IGFyZSAgbm90LiAgQQorICAgICAgIGNsYXNzICB0aGF0IHN0YXJ0cyB3aXRoIGEgY2lyY3VtZmxleCBpcyBub3QgYW4gYXNzZXJ0aW9uOyBpdCBzdGlsbCBjb24tCisgICAgICAgc3VtZXMgYSBjaGFyYWN0ZXIgZnJvbSB0aGUgc3ViamVjdCBzdHJpbmcsIGFuZCB0aGVyZWZvcmUgIGl0ICBmYWlscyAgaWYKKyAgICAgICB0aGUgY3VycmVudCBwb2ludGVyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KKworICAgICAgIFdoZW4gIGNhc2VsZXNzICBtYXRjaGluZyAgaXMgc2V0LCBhbnkgbGV0dGVycyBpbiBhIGNsYXNzIHJlcHJlc2VudCBib3RoCisgICAgICAgdGhlaXIgdXBwZXIgY2FzZSBhbmQgbG93ZXIgY2FzZSB2ZXJzaW9ucywgc28gZm9yICBleGFtcGxlLCAgYSAgY2FzZWxlc3MKKyAgICAgICBbYWVpb3VdICBtYXRjaGVzICAiQSIgIGFzIHdlbGwgYXMgImEiLCBhbmQgYSBjYXNlbGVzcyBbXmFlaW91XSBkb2VzIG5vdAorICAgICAgIG1hdGNoICJBIiwgd2hlcmVhcyBhIGNhc2VmdWwgdmVyc2lvbiB3b3VsZC4KKworICAgICAgIENoYXJhY3RlcnMgdGhhdCBtaWdodCBpbmRpY2F0ZSBsaW5lIGJyZWFrcyBhcmUgIG5ldmVyICB0cmVhdGVkICBpbiAgYW55CisgICAgICAgc3BlY2lhbCAgd2F5ICB3aGVuICBtYXRjaGluZyAgY2hhcmFjdGVyICBjbGFzc2VzLCAgd2hhdGV2ZXIgbGluZS1lbmRpbmcKKyAgICAgICBzZXF1ZW5jZSBpcyBpbiB1c2UsICBhbmQgIHdoYXRldmVyICBzZXR0aW5nICBvZiAgdGhlICBQQ1JFMl9ET1RBTEwgIGFuZAorICAgICAgIFBDUkUyX01VTFRJTElORSAgb3B0aW9ucyAgaXMgIHVzZWQuIEEgY2xhc3Mgc3VjaCBhcyBbXmFdIGFsd2F5cyBtYXRjaGVzCisgICAgICAgb25lIG9mIHRoZXNlIGNoYXJhY3RlcnMuCisKKyAgICAgICBUaGUgbWludXMgKGh5cGhlbikgY2hhcmFjdGVyIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYSByYW5nZSBvZiAgY2hhcmFjLQorICAgICAgIHRlcnMgIGluICBhICBjaGFyYWN0ZXIgIGNsYXNzLiAgRm9yICBleGFtcGxlLCAgW2QtbV0gbWF0Y2hlcyBhbnkgbGV0dGVyCisgICAgICAgYmV0d2VlbiBkIGFuZCBtLCBpbmNsdXNpdmUuIElmIGEgIG1pbnVzICBjaGFyYWN0ZXIgIGlzICByZXF1aXJlZCAgaW4gIGEKKyAgICAgICBjbGFzcywgIGl0ICBtdXN0ICBiZSAgZXNjYXBlZCAgd2l0aCBhIGJhY2tzbGFzaCBvciBhcHBlYXIgaW4gYSBwb3NpdGlvbgorICAgICAgIHdoZXJlIGl0IGNhbm5vdCBiZSBpbnRlcnByZXRlZCBhcyBpbmRpY2F0aW5nIGEgcmFuZ2UsIHR5cGljYWxseSBhcyAgdGhlCisgICAgICAgZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGNsYXNzLCBvciBpbW1lZGlhdGVseSBhZnRlciBhIHJhbmdlLiBGb3IKKyAgICAgICBleGFtcGxlLCBbYi1kLXpdIG1hdGNoZXMgbGV0dGVycyBpbiB0aGUgcmFuZ2UgYiB0byBkLCBhIGh5cGhlbiAgY2hhcmFjLQorICAgICAgIHRlciwgb3Igei4KKworICAgICAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIHRoZSBsaXRlcmFsIGNoYXJhY3RlciAiXSIgYXMgdGhlIGVuZCBjaGFyYWMtCisgICAgICAgdGVyIG9mIGEgcmFuZ2UuIEEgcGF0dGVybiBzdWNoIGFzIFtXLV00Nl0gaXMgaW50ZXJwcmV0ZWQgYXMgYSBjbGFzcyAgb2YKKyAgICAgICB0d28gIGNoYXJhY3RlcnMgKCJXIiBhbmQgIi0iKSBmb2xsb3dlZCBieSBhIGxpdGVyYWwgc3RyaW5nICI0Nl0iLCBzbyBpdAorICAgICAgIHdvdWxkIG1hdGNoICJXNDZdIiBvciAiLTQ2XSIuIEhvd2V2ZXIsIGlmIHRoZSAiXSIgIGlzICBlc2NhcGVkICB3aXRoICBhCisgICAgICAgYmFja3NsYXNoICBpdCBpcyBpbnRlcnByZXRlZCBhcyB0aGUgZW5kIG9mIHJhbmdlLCBzbyBbVy1cXTQ2XSBpcyBpbnRlci0KKyAgICAgICBwcmV0ZWQgYXMgYSBjbGFzcyBjb250YWluaW5nIGEgcmFuZ2UgZm9sbG93ZWQgYnkgdHdvIG90aGVyICBjaGFyYWN0ZXJzLgorICAgICAgIFRoZSAgb2N0YWwgb3IgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgIl0iIGNhbiBhbHNvIGJlIHVzZWQgdG8gZW5kCisgICAgICAgYSByYW5nZS4KKworICAgICAgIEFuIGVycm9yIGlzIGdlbmVyYXRlZCBpZiBhIFBPU0lYIGNoYXJhY3RlciAgY2xhc3MgIChzZWUgIGJlbG93KSAgb3IgIGFuCisgICAgICAgZXNjYXBlICBzZXF1ZW5jZSBvdGhlciB0aGFuIG9uZSB0aGF0IGRlZmluZXMgYSBzaW5nbGUgY2hhcmFjdGVyIGFwcGVhcnMKKyAgICAgICBhdCBhIHBvaW50IHdoZXJlIGEgcmFuZ2UgZW5kaW5nIGNoYXJhY3RlciAgaXMgIGV4cGVjdGVkLiAgRm9yICBleGFtcGxlLAorICAgICAgIFt6LVx4ZmZdIGlzIHZhbGlkLCBidXQgW0EtXGRdIGFuZCBbQS1bOmRpZ2l0Ol1dIGFyZSBub3QuCisKKyAgICAgICBSYW5nZXMgbm9ybWFsbHkgaW5jbHVkZSBhbGwgY29kZSBwb2ludHMgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBjaGFyLQorICAgICAgIGFjdGVycywgaW5jbHVzaXZlLiBUaGV5IGNhbiBhbHNvIGJlICB1c2VkICBmb3IgIGNvZGUgIHBvaW50cyAgc3BlY2lmaWVkCisgICAgICAgbnVtZXJpY2FsbHksIGZvciBleGFtcGxlIFtcMDAwLVwwMzddLiBSYW5nZXMgY2FuIGluY2x1ZGUgYW55IGNoYXJhY3RlcnMKKyAgICAgICB0aGF0IGFyZSB2YWxpZCBmb3IgdGhlIGN1cnJlbnQgbW9kZS4KKworICAgICAgIFRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlIGluIEVCQ0RJQyBlbnZpcm9ubWVudHMgIGZvciAgcmFuZ2VzICB3aG9zZSAgZW5kCisgICAgICAgcG9pbnRzIGFyZSBib3RoIHNwZWNpZmllZCBhcyBsaXRlcmFsIGxldHRlcnMgaW4gdGhlIHNhbWUgY2FzZS4gRm9yIGNvbS0KKyAgICAgICBwYXRpYmlsaXR5IHdpdGggUGVybCwgRUJDRElDIGNvZGUgcG9pbnRzIHdpdGhpbiB0aGUgcmFuZ2UgdGhhdCBhcmUgIG5vdAorICAgICAgIGxldHRlcnMgIGFyZSAgb21pdHRlZC4gRm9yIGV4YW1wbGUsIFtoLWtdIG1hdGNoZXMgb25seSBmb3VyIGNoYXJhY3RlcnMsCisgICAgICAgZXZlbiB0aG91Z2ggdGhlIGNvZGVzIGZvciBoIGFuZCBrIGFyZSAweDg4IGFuZCAweDkyLCBhIHJhbmdlIG9mIDExIGNvZGUKKyAgICAgICBwb2ludHMuICBIb3dldmVyLCAgaWYgIHRoZSByYW5nZSBpcyBzcGVjaWZpZWQgbnVtZXJpY2FsbHksIGZvciBleGFtcGxlLAorICAgICAgIFtceDg4LVx4OTJdIG9yIFtoLVx4OTJdLCBhbGwgY29kZSBwb2ludHMgYXJlIGluY2x1ZGVkLgorCisgICAgICAgSWYgYSByYW5nZSB0aGF0IGluY2x1ZGVzIGxldHRlcnMgaXMgdXNlZCB3aGVuIGNhc2VsZXNzIG1hdGNoaW5nIGlzIHNldCwKKyAgICAgICBpdCBtYXRjaGVzIHRoZSBsZXR0ZXJzIGluIGVpdGhlciBjYXNlLiBGb3IgZXhhbXBsZSwgW1ctY10gaXMgZXF1aXZhbGVudAorICAgICAgIHRvIFtdW1xcXl9gd3h5emFiY10sIG1hdGNoZWQgY2FzZWxlc3NseSwgYW5kICBpbiAgYSAgbm9uLVVURiAgbW9kZSwgIGlmCisgICAgICAgY2hhcmFjdGVyICB0YWJsZXMgIGZvciAgYSBGcmVuY2ggbG9jYWxlIGFyZSBpbiB1c2UsIFtceGM4LVx4Y2JdIG1hdGNoZXMKKyAgICAgICBhY2NlbnRlZCBFIGNoYXJhY3RlcnMgaW4gYm90aCBjYXNlcy4KKworICAgICAgIFRoZSBjaGFyYWN0ZXIgZXNjYXBlIHNlcXVlbmNlcyBcZCwgXEQsIFxoLCBcSCwgXHAsIFxQLCBccywgXFMsIFx2LCAgXFYsCisgICAgICAgXHcsIGFuZCBcVyBtYXkgYXBwZWFyIGluIGEgY2hhcmFjdGVyIGNsYXNzLCBhbmQgYWRkIHRoZSBjaGFyYWN0ZXJzIHRoYXQKKyAgICAgICB0aGV5IG1hdGNoIHRvIHRoZSBjbGFzcy4gRm9yIGV4YW1wbGUsIFtcZEFCQ0RFRl0gbWF0Y2hlcyBhbnkgIGhleGFkZWNpLQorICAgICAgIG1hbCAgZGlnaXQuICBJbiBVVEYgbW9kZXMsIHRoZSBQQ1JFMl9VQ1Agb3B0aW9uIGFmZmVjdHMgdGhlIG1lYW5pbmdzIG9mCisgICAgICAgXGQsIFxzLCBcdyBhbmQgdGhlaXIgdXBwZXIgY2FzZSBwYXJ0bmVycywganVzdCBhcyAgaXQgIGRvZXMgIHdoZW4gIHRoZXkKKyAgICAgICBhcHBlYXIgIG91dHNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIGFzIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZAorICAgICAgICJHZW5lcmljIGNoYXJhY3RlciB0eXBlcyIgYWJvdmUuIFRoZSBlc2NhcGUgc2VxdWVuY2UgXGIgaGFzIGEgZGlmZmVyZW50CisgICAgICAgbWVhbmluZyAgaW5zaWRlICBhIGNoYXJhY3RlciBjbGFzczsgaXQgbWF0Y2hlcyB0aGUgYmFja3NwYWNlIGNoYXJhY3Rlci4KKyAgICAgICBUaGUgc2VxdWVuY2VzIFxCLCBcTiwgXFIsIGFuZCBcWCBhcmUgbm90ICBzcGVjaWFsICBpbnNpZGUgIGEgIGNoYXJhY3RlcgorICAgICAgIGNsYXNzLiAgTGlrZSAgYW55ICBvdGhlciAgdW5yZWNvZ25pemVkICBlc2NhcGUgc2VxdWVuY2VzLCB0aGV5IGNhdXNlIGFuCisgICAgICAgZXJyb3IuCisKKyAgICAgICBBIGNpcmN1bWZsZXggY2FuIGNvbnZlbmllbnRseSBiZSB1c2VkIHdpdGggIHRoZSAgdXBwZXIgIGNhc2UgIGNoYXJhY3RlcgorICAgICAgIHR5cGVzICB0byBzcGVjaWZ5IGEgbW9yZSByZXN0cmljdGVkIHNldCBvZiBjaGFyYWN0ZXJzIHRoYW4gdGhlIG1hdGNoaW5nCisgICAgICAgbG93ZXIgY2FzZSB0eXBlLiAgRm9yIGV4YW1wbGUsIHRoZSBjbGFzcyBbXlxXX10gbWF0Y2hlcyBhbnkgIGxldHRlciAgb3IKKyAgICAgICBkaWdpdCwgYnV0IG5vdCB1bmRlcnNjb3JlLCB3aGVyZWFzIFtcd10gaW5jbHVkZXMgdW5kZXJzY29yZS4gQSBwb3NpdGl2ZQorICAgICAgIGNoYXJhY3RlciBjbGFzcyBzaG91bGQgYmUgcmVhZCBhcyAic29tZXRoaW5nIE9SIHNvbWV0aGluZyBPUiAuLi4iIGFuZCBhCisgICAgICAgbmVnYXRpdmUgY2xhc3MgYXMgIk5PVCBzb21ldGhpbmcgQU5EIE5PVCBzb21ldGhpbmcgQU5EIE5PVCAuLi4iLgorCisgICAgICAgVGhlICBvbmx5ICBtZXRhY2hhcmFjdGVycyAgdGhhdCBhcmUgcmVjb2duaXplZCBpbiBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUKKyAgICAgICBiYWNrc2xhc2gsIGh5cGhlbiAob25seSB3aGVyZSBpdCBjYW4gYmUgIGludGVycHJldGVkICBhcyAgc3BlY2lmeWluZyAgYQorICAgICAgIHJhbmdlKSwgIGNpcmN1bWZsZXggIChvbmx5ICBhdCB0aGUgc3RhcnQpLCBvcGVuaW5nIHNxdWFyZSBicmFja2V0IChvbmx5CisgICAgICAgd2hlbiBpdCBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgaW50cm9kdWNpbmcgYSBQT1NJWCBjbGFzcyBuYW1lLCBvciBmb3IgIGEKKyAgICAgICBzcGVjaWFsICBjb21wYXRpYmlsaXR5ICBmZWF0dXJlICAtICBzZWUgdGhlIG5leHQgdHdvIHNlY3Rpb25zKSwgYW5kIHRoZQorICAgICAgIHRlcm1pbmF0aW5nICBjbG9zaW5nICBzcXVhcmUgIGJyYWNrZXQuICBIb3dldmVyLCAgZXNjYXBpbmcgIG90aGVyICBub24tCisgICAgICAgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgZG9lcyBubyBoYXJtLgorCisKK1BPU0lYIENIQVJBQ1RFUiBDTEFTU0VTCisKKyAgICAgICBQZXJsIHN1cHBvcnRzIHRoZSBQT1NJWCBub3RhdGlvbiBmb3IgY2hhcmFjdGVyIGNsYXNzZXMuIFRoaXMgdXNlcyBuYW1lcworICAgICAgIGVuY2xvc2VkIGJ5IFs6IGFuZCA6XSB3aXRoaW4gdGhlIGVuY2xvc2luZyBzcXVhcmUgYnJhY2tldHMuIFBDUkUyICBhbHNvCisgICAgICAgc3VwcG9ydHMgdGhpcyBub3RhdGlvbi4gRm9yIGV4YW1wbGUsCisKKyAgICAgICAgIFswMVs6YWxwaGE6XSVdCisKKyAgICAgICBtYXRjaGVzICIwIiwgIjEiLCBhbnkgYWxwaGFiZXRpYyBjaGFyYWN0ZXIsIG9yICIlIi4gVGhlIHN1cHBvcnRlZCBjbGFzcworICAgICAgIG5hbWVzIGFyZToKKworICAgICAgICAgYWxudW0gICAgbGV0dGVycyBhbmQgZGlnaXRzCisgICAgICAgICBhbHBoYSAgICBsZXR0ZXJzCisgICAgICAgICBhc2NpaSAgICBjaGFyYWN0ZXIgY29kZXMgMCAtIDEyNworICAgICAgICAgYmxhbmsgICAgc3BhY2Ugb3IgdGFiIG9ubHkKKyAgICAgICAgIGNudHJsICAgIGNvbnRyb2wgY2hhcmFjdGVycworICAgICAgICAgZGlnaXQgICAgZGVjaW1hbCBkaWdpdHMgKHNhbWUgYXMgXGQpCisgICAgICAgICBncmFwaCAgICBwcmludGluZyBjaGFyYWN0ZXJzLCBleGNsdWRpbmcgc3BhY2UKKyAgICAgICAgIGxvd2VyICAgIGxvd2VyIGNhc2UgbGV0dGVycworICAgICAgICAgcHJpbnQgICAgcHJpbnRpbmcgY2hhcmFjdGVycywgaW5jbHVkaW5nIHNwYWNlCisgICAgICAgICBwdW5jdCAgICBwcmludGluZyBjaGFyYWN0ZXJzLCBleGNsdWRpbmcgbGV0dGVycyBhbmQgZGlnaXRzIGFuZCBzcGFjZQorICAgICAgICAgc3BhY2UgICAgd2hpdGUgc3BhY2UgKHRoZSBzYW1lIGFzIFxzIGZyb20gUENSRTIgOC4zNCkKKyAgICAgICAgIHVwcGVyICAgIHVwcGVyIGNhc2UgbGV0dGVycworICAgICAgICAgd29yZCAgICAgIndvcmQiIGNoYXJhY3RlcnMgKHNhbWUgYXMgXHcpCisgICAgICAgICB4ZGlnaXQgICBoZXhhZGVjaW1hbCBkaWdpdHMKKworICAgICAgIFRoZSBkZWZhdWx0ICJzcGFjZSIgY2hhcmFjdGVycyBhcmUgSFQgKDkpLCBMRiAoMTApLCBWVCAoMTEpLCAgRkYgICgxMiksCisgICAgICAgQ1IgICgxMyksICBhbmQgc3BhY2UgKDMyKS4gSWYgbG9jYWxlLXNwZWNpZmljIG1hdGNoaW5nIGlzIHRha2luZyBwbGFjZSwKKyAgICAgICB0aGUgbGlzdCBvZiBzcGFjZSBjaGFyYWN0ZXJzIG1heSBiZSBkaWZmZXJlbnQ7IHRoZXJlIG1heSAgYmUgIGZld2VyICBvcgorICAgICAgIG1vcmUgb2YgdGhlbS4gIlNwYWNlIiBhbmQgXHMgbWF0Y2ggdGhlIHNhbWUgc2V0IG9mIGNoYXJhY3RlcnMuCisKKyAgICAgICBUaGUgIG5hbWUgICJ3b3JkIiAgaXMgIGEgUGVybCBleHRlbnNpb24sIGFuZCAiYmxhbmsiIGlzIGEgR05VIGV4dGVuc2lvbgorICAgICAgIGZyb20gUGVybCA1LjguIEFub3RoZXIgUGVybCBleHRlbnNpb24gaXMgbmVnYXRpb24sIHdoaWNoICBpcyAgaW5kaWNhdGVkCisgICAgICAgYnkgYSBeIGNoYXJhY3RlciBhZnRlciB0aGUgY29sb24uIEZvciBleGFtcGxlLAorCisgICAgICAgICBbMTJbOl5kaWdpdDpdXQorCisgICAgICAgbWF0Y2hlcyAiMSIsICIyIiwgb3IgYW55IG5vbi1kaWdpdC4gUENSRTIgKGFuZCBQZXJsKSBhbHNvIHJlY29nbml6ZSB0aGUKKyAgICAgICBQT1NJWCBzeW50YXggWy5jaC5dIGFuZCBbPWNoPV0gd2hlcmUgImNoIiBpcyBhICJjb2xsYXRpbmcgZWxlbWVudCIsIGJ1dAorICAgICAgIHRoZXNlIGFyZSBub3Qgc3VwcG9ydGVkLCBhbmQgYW4gZXJyb3IgaXMgZ2l2ZW4gaWYgdGhleSBhcmUgZW5jb3VudGVyZWQuCisKKyAgICAgICBCeSBkZWZhdWx0LCBjaGFyYWN0ZXJzIHdpdGggdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMjcgZG8gbm90IG1hdGNoIGFueSBvZgorICAgICAgIHRoZSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3NlcywgYWx0aG91Z2ggdGhpcyBtYXkgYmUgZGlmZmVyZW50IGZvciBjaGFyYWMtCisgICAgICAgdGVycyAgaW4gIHRoZSByYW5nZSAxMjgtMjU1IHdoZW4gbG9jYWxlLXNwZWNpZmljIG1hdGNoaW5nIGlzIGhhcHBlbmluZy4KKyAgICAgICBIb3dldmVyLCBpZiB0aGUgUENSRTJfVUNQIG9wdGlvbiBpcyBwYXNzZWQgdG8gcGNyZTJfY29tcGlsZSgpLCBzb21lICBvZgorICAgICAgIHRoZSAgY2xhc3NlcyBhcmUgY2hhbmdlZCBzbyB0aGF0IFVuaWNvZGUgY2hhcmFjdGVyIHByb3BlcnRpZXMgYXJlIHVzZWQuCisgICAgICAgVGhpcyAgaXMgIGFjaGlldmVkICBieSAgcmVwbGFjaW5nICBjZXJ0YWluICBQT1NJWCAgY2xhc3NlcyAgd2l0aCAgb3RoZXIKKyAgICAgICBzZXF1ZW5jZXMsIGFzIGZvbGxvd3M6CisKKyAgICAgICAgIFs6YWxudW06XSAgYmVjb21lcyAgXHB7WGFufQorICAgICAgICAgWzphbHBoYTpdICBiZWNvbWVzICBccHtMfQorICAgICAgICAgWzpibGFuazpdICBiZWNvbWVzICBcaAorICAgICAgICAgWzpjbnRybDpdICBiZWNvbWVzICBccHtDY30KKyAgICAgICAgIFs6ZGlnaXQ6XSAgYmVjb21lcyAgXHB7TmR9CisgICAgICAgICBbOmxvd2VyOl0gIGJlY29tZXMgIFxwe0xsfQorICAgICAgICAgWzpzcGFjZTpdICBiZWNvbWVzICBccHtYcHN9CisgICAgICAgICBbOnVwcGVyOl0gIGJlY29tZXMgIFxwe0x1fQorICAgICAgICAgWzp3b3JkOl0gICBiZWNvbWVzICBccHtYd2R9CisKKyAgICAgICBOZWdhdGVkICB2ZXJzaW9ucywgc3VjaCBhcyBbOl5hbHBoYTpdIHVzZSBcUCBpbnN0ZWFkIG9mIFxwLiBUaHJlZSBvdGhlcgorICAgICAgIFBPU0lYIGNsYXNzZXMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGluIFVDUCBtb2RlOgorCisgICAgICAgWzpncmFwaDpdIFRoaXMgbWF0Y2hlcyBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBnbHlwaHMgdGhhdCBtYXJrICB0aGUgIHBhZ2UKKyAgICAgICAgICAgICAgICAgd2hlbiBwcmludGVkLiBJbiBVbmljb2RlIHByb3BlcnR5IHRlcm1zLCBpdCBtYXRjaGVzIGFsbCBjaGFyLQorICAgICAgICAgICAgICAgICBhY3RlcnMgd2l0aCB0aGUgTCwgTSwgTiwgUCwgUywgb3IgQ2YgcHJvcGVydGllcywgZXhjZXB0IGZvcjoKKworICAgICAgICAgICAgICAgICAgIFUrMDYxQyAgICAgICAgICAgQXJhYmljIExldHRlciBNYXJrCisgICAgICAgICAgICAgICAgICAgVSsxODBFICAgICAgICAgICBNb25nb2xpYW4gVm93ZWwgU2VwYXJhdG9yCisgICAgICAgICAgICAgICAgICAgVSsyMDY2IC0gVSsyMDY5ICBWYXJpb3VzICJpc29sYXRlInMKKworCisgICAgICAgWzpwcmludDpdIFRoaXMgbWF0Y2hlcyB0aGUgc2FtZSAgY2hhcmFjdGVycyAgYXMgIFs6Z3JhcGg6XSAgcGx1cyAgc3BhY2UKKyAgICAgICAgICAgICAgICAgY2hhcmFjdGVycyAgdGhhdCAgYXJlICBub3QgY29udHJvbHMsIHRoYXQgaXMsIGNoYXJhY3RlcnMgd2l0aAorICAgICAgICAgICAgICAgICB0aGUgWnMgcHJvcGVydHkuCisKKyAgICAgICBbOnB1bmN0Ol0gVGhpcyBtYXRjaGVzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSB0aGUgVW5pY29kZSBQIChwdW5jdHVhLQorICAgICAgICAgICAgICAgICB0aW9uKSAgcHJvcGVydHksICBwbHVzIHRob3NlIGNoYXJhY3RlcnMgd2l0aCBjb2RlIHBvaW50cyBsZXNzCisgICAgICAgICAgICAgICAgIHRoYW4gMjU2IHRoYXQgaGF2ZSB0aGUgUyAoU3ltYm9sKSBwcm9wZXJ0eS4KKworICAgICAgIFRoZSBvdGhlciBQT1NJWCBjbGFzc2VzIGFyZSB1bmNoYW5nZWQsIGFuZCBtYXRjaCBvbmx5ICBjaGFyYWN0ZXJzICB3aXRoCisgICAgICAgY29kZSBwb2ludHMgbGVzcyB0aGFuIDI1Ni4KKworCitDT01QQVRJQklMSVRZIEZFQVRVUkUgRk9SIFdPUkQgQk9VTkRBUklFUworCisgICAgICAgSW4gIHRoZSBQT1NJWC4yIGNvbXBsaWFudCBsaWJyYXJ5IHRoYXQgd2FzIGluY2x1ZGVkIGluIDQuNEJTRCBVbml4LCB0aGUKKyAgICAgICB1Z2x5IHN5bnRheCBbWzo8Ol1dIGFuZCBbWzo+Ol1dIGlzIHVzZWQgZm9yIG1hdGNoaW5nICAic3RhcnQgIG9mICB3b3JkIgorICAgICAgIGFuZCAiZW5kIG9mIHdvcmQiLiBQQ1JFMiB0cmVhdHMgdGhlc2UgaXRlbXMgYXMgZm9sbG93czoKKworICAgICAgICAgW1s6PDpdXSAgaXMgY29udmVydGVkIHRvICBcYig/PVx3KQorICAgICAgICAgW1s6PjpdXSAgaXMgY29udmVydGVkIHRvICBcYig/PD1cdykKKworICAgICAgIE9ubHkgdGhlc2UgZXhhY3QgY2hhcmFjdGVyIHNlcXVlbmNlcyBhcmUgcmVjb2duaXplZC4gQSBzZXF1ZW5jZSBzdWNoIGFzCisgICAgICAgW2FbOjw6XWJdIHByb3Zva2VzIGVycm9yIGZvciBhbiB1bnJlY29nbml6ZWQgIFBPU0lYICBjbGFzcyAgbmFtZS4gIFRoaXMKKyAgICAgICBzdXBwb3J0ICBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFBlcmwuIEl0IGlzIHByb3ZpZGVkIHRvIGhlbHAgbWlncmF0aW9ucworICAgICAgIGZyb20gb3RoZXIgZW52aXJvbm1lbnRzLCBhbmQgaXMgYmVzdCBub3QgdXNlZCBpbiBhbnkgbmV3IHBhdHRlcm5zLiBOb3RlCisgICAgICAgdGhhdCAgXGIgbWF0Y2hlcyBhdCB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgb2YgYSB3b3JkIChzZWUgIlNpbXBsZSBhc3Nlci0KKyAgICAgICB0aW9ucyIgYWJvdmUpLCBhbmQgaW4gYSBQZXJsLXN0eWxlIHBhdHRlcm4gdGhlIHByZWNlZGluZyAgb3IgIGZvbGxvd2luZworICAgICAgIGNoYXJhY3RlciAgbm9ybWFsbHkgIHNob3dzICB3aGljaCAgaXMgIHdhbnRlZCwgd2l0aG91dCB0aGUgbmVlZCBmb3IgdGhlCisgICAgICAgYXNzZXJ0aW9ucyB0aGF0IGFyZSB1c2VkIGFib3ZlIGluIG9yZGVyIHRvIGdpdmUgZXhhY3RseSB0aGUgIFBPU0lYICBiZS0KKyAgICAgICBoYXZpb3VyLgorCisKK1ZFUlRJQ0FMIEJBUgorCisgICAgICAgVmVydGljYWwgIGJhciBjaGFyYWN0ZXJzIGFyZSB1c2VkIHRvIHNlcGFyYXRlIGFsdGVybmF0aXZlIHBhdHRlcm5zLiBGb3IKKyAgICAgICBleGFtcGxlLCB0aGUgcGF0dGVybgorCisgICAgICAgICBnaWxiZXJ0fHN1bGxpdmFuCisKKyAgICAgICBtYXRjaGVzIGVpdGhlciAiZ2lsYmVydCIgb3IgInN1bGxpdmFuIi4gQW55IG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgIG1heQorICAgICAgIGFwcGVhciwgIGFuZCAgYW4gIGVtcHR5ICBhbHRlcm5hdGl2ZSAgaXMgIHBlcm1pdHRlZCAobWF0Y2hpbmcgdGhlIGVtcHR5CisgICAgICAgc3RyaW5nKS4gVGhlIG1hdGNoaW5nIHByb2Nlc3MgdHJpZXMgZWFjaCBhbHRlcm5hdGl2ZSBpbiB0dXJuLCBmcm9tIGxlZnQKKyAgICAgICB0byAgcmlnaHQsIGFuZCB0aGUgZmlyc3Qgb25lIHRoYXQgc3VjY2VlZHMgaXMgdXNlZC4gSWYgdGhlIGFsdGVybmF0aXZlcworICAgICAgIGFyZSB3aXRoaW4gYSBzdWJwYXR0ZXJuIChkZWZpbmVkIGJlbG93KSwgInN1Y2NlZWRzIiBtZWFucyBtYXRjaGluZyAgdGhlCisgICAgICAgcmVzdCBvZiB0aGUgbWFpbiBwYXR0ZXJuIGFzIHdlbGwgYXMgdGhlIGFsdGVybmF0aXZlIGluIHRoZSBzdWJwYXR0ZXJuLgorCisKK0lOVEVSTkFMIE9QVElPTiBTRVRUSU5HCisKKyAgICAgICBUaGUgIHNldHRpbmdzIG9mIHRoZSBQQ1JFMl9DQVNFTEVTUywgUENSRTJfTVVMVElMSU5FLCBQQ1JFMl9ET1RBTEwsIGFuZAorICAgICAgIFBDUkUyX0VYVEVOREVEIG9wdGlvbnMgKHdoaWNoIGFyZSBQZXJsLWNvbXBhdGlibGUpIGNhbiBiZSBjaGFuZ2VkICBmcm9tCisgICAgICAgd2l0aGluICB0aGUgIHBhdHRlcm4gIGJ5ICBhICBzZXF1ZW5jZSAgb2YgIFBlcmwgb3B0aW9uIGxldHRlcnMgZW5jbG9zZWQKKyAgICAgICBiZXR3ZWVuICIoPyIgYW5kICIpIi4gIFRoZSBvcHRpb24gbGV0dGVycyBhcmUKKworICAgICAgICAgaSAgZm9yIFBDUkUyX0NBU0VMRVNTCisgICAgICAgICBtICBmb3IgUENSRTJfTVVMVElMSU5FCisgICAgICAgICBzICBmb3IgUENSRTJfRE9UQUxMCisgICAgICAgICB4ICBmb3IgUENSRTJfRVhURU5ERUQKKworICAgICAgIEZvciBleGFtcGxlLCAoP2ltKSBzZXRzIGNhc2VsZXNzLCBtdWx0aWxpbmUgbWF0Y2hpbmcuIEl0IGlzIGFsc28gcG9zc2ktCisgICAgICAgYmxlIHRvIHVuc2V0IHRoZXNlIG9wdGlvbnMgYnkgcHJlY2VkaW5nIHRoZSBsZXR0ZXIgd2l0aCBhIGh5cGhlbiwgYW5kIGEKKyAgICAgICBjb21iaW5lZCBzZXR0aW5nIGFuZCB1bnNldHRpbmcgc3VjaCBhcyAoP2ltLXN4KSwgd2hpY2ggc2V0cyBQQ1JFMl9DQVNFLQorICAgICAgIExFU1MgICAgYW5kICAgIFBDUkUyX01VTFRJTElORSAgIHdoaWxlICAgdW5zZXR0aW5nICAgUENSRTJfRE9UQUxMICAgYW5kCisgICAgICAgUENSRTJfRVhURU5ERUQsIGlzIGFsc28gcGVybWl0dGVkLiBJZiBhIGxldHRlciBhcHBlYXJzIGJvdGggYmVmb3JlICBhbmQKKyAgICAgICBhZnRlciAgdGhlICBoeXBoZW4sIHRoZSBvcHRpb24gaXMgdW5zZXQuIEFuIGVtcHR5IG9wdGlvbnMgc2V0dGluZyAiKD8pIgorICAgICAgIGlzIGFsbG93ZWQuIE5lZWRsZXNzIHRvIHNheSwgaXQgaGFzIG5vIGVmZmVjdC4KKworICAgICAgIFRoZSBQQ1JFMi1zcGVjaWZpYyBvcHRpb25zIFBDUkUyX0RVUE5BTUVTICBhbmQgIFBDUkUyX1VOR1JFRURZICBjYW4gIGJlCisgICAgICAgY2hhbmdlZCAgaW4gIHRoZSAgc2FtZSAgd2F5IGFzIHRoZSBQZXJsLWNvbXBhdGlibGUgb3B0aW9ucyBieSB1c2luZyB0aGUKKyAgICAgICBjaGFyYWN0ZXJzIEogYW5kIFUgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgV2hlbiBvbmUgb2YgdGhlc2Ugb3B0aW9uIGNoYW5nZXMgb2NjdXJzIGF0ICB0b3AgIGxldmVsICAodGhhdCAgaXMsICBub3QKKyAgICAgICBpbnNpZGUgIHN1YnBhdHRlcm4gcGFyZW50aGVzZXMpLCB0aGUgY2hhbmdlIGFwcGxpZXMgdG8gdGhlIHJlbWFpbmRlciBvZgorICAgICAgIHRoZSBwYXR0ZXJuIHRoYXQgZm9sbG93cy4gSWYgdGhlIGNoYW5nZSBpcyBwbGFjZWQgcmlnaHQgYXQgdGhlIHN0YXJ0IG9mCisgICAgICAgYSAgcGF0dGVybiwgIFBDUkUyICBleHRyYWN0cyAgaXQgIGludG8gIHRoZSBnbG9iYWwgb3B0aW9ucyAoYW5kIGl0IHdpbGwKKyAgICAgICB0aGVyZWZvcmUgc2hvdyB1cCBpbiBkYXRhIGV4dHJhY3RlZCBieSB0aGUgIHBjcmUyX3BhdHRlcm5faW5mbygpICBmdW5jLQorICAgICAgIHRpb24pLgorCisgICAgICAgQW4gIG9wdGlvbiAgY2hhbmdlICB3aXRoaW4gYSBzdWJwYXR0ZXJuIChzZWUgYmVsb3cgZm9yIGEgZGVzY3JpcHRpb24gb2YKKyAgICAgICBzdWJwYXR0ZXJucykgYWZmZWN0cyBvbmx5IHRoYXQgcGFydCBvZiB0aGUgc3VicGF0dGVybiB0aGF0IGZvbGxvd3MgIGl0LAorICAgICAgIHNvCisKKyAgICAgICAgIChhKD9pKWIpYworCisgICAgICAgbWF0Y2hlcyAgYWJjICBhbmQgIGFCYyBhbmQgbm8gb3RoZXIgc3RyaW5ncyAoYXNzdW1pbmcgUENSRTJfQ0FTRUxFU1MgaXMKKyAgICAgICBub3QgdXNlZCkuICBCeSB0aGlzIG1lYW5zLCBvcHRpb25zIGNhbiBiZSBtYWRlIHRvIGhhdmUgIGRpZmZlcmVudCAgc2V0LQorICAgICAgIHRpbmdzIGluIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgcGF0dGVybi4gQW55IGNoYW5nZXMgbWFkZSBpbiBvbmUgYWx0ZXItCisgICAgICAgbmF0aXZlIGRvIGNhcnJ5IG9uIGludG8gc3Vic2VxdWVudCBicmFuY2hlcyB3aXRoaW4gdGhlIHNhbWUgc3VicGF0dGVybi4KKyAgICAgICBGb3IgZXhhbXBsZSwKKworICAgICAgICAgKGEoP2kpYnxjKQorCisgICAgICAgbWF0Y2hlcyAgImFiIiwgICJhQiIsICAiYyIsICBhbmQgIkMiLCBldmVuIHRob3VnaCB3aGVuIG1hdGNoaW5nICJDIiB0aGUKKyAgICAgICBmaXJzdCBicmFuY2ggaXMgYWJhbmRvbmVkIGJlZm9yZSB0aGUgb3B0aW9uIHNldHRpbmcuICBUaGlzICBpcyAgYmVjYXVzZQorICAgICAgIHRoZSAgZWZmZWN0cyAgb2Ygb3B0aW9uIHNldHRpbmdzIGhhcHBlbiBhdCBjb21waWxlIHRpbWUuIFRoZXJlIHdvdWxkIGJlCisgICAgICAgc29tZSB2ZXJ5IHdlaXJkIGJlaGF2aW91ciBvdGhlcndpc2UuCisKKyAgICAgICBBcyBhIGNvbnZlbmllbnQgc2hvcnRoYW5kLCBpZiBhbnkgb3B0aW9uIHNldHRpbmdzIGFyZSByZXF1aXJlZCAgYXQgIHRoZQorICAgICAgIHN0YXJ0ICBvZiBhIG5vbi1jYXB0dXJpbmcgc3VicGF0dGVybiAoc2VlIHRoZSBuZXh0IHNlY3Rpb24pLCB0aGUgb3B0aW9uCisgICAgICAgbGV0dGVycyBtYXkgYXBwZWFyIGJldHdlZW4gdGhlICI/IiBhbmQgdGhlICI6Ii4gVGh1cyB0aGUgdHdvIHBhdHRlcm5zCisKKyAgICAgICAgICg/aTpzYXR1cmRheXxzdW5kYXkpCisgICAgICAgICAoPzooP2kpc2F0dXJkYXl8c3VuZGF5KQorCisgICAgICAgbWF0Y2ggZXhhY3RseSB0aGUgc2FtZSBzZXQgb2Ygc3RyaW5ncy4KKworICAgICAgIE5vdGU6IFRoZXJlIGFyZSBvdGhlciBQQ1JFMi1zcGVjaWZpYyBvcHRpb25zIHRoYXQgY2FuICBiZSAgc2V0ICBieSAgdGhlCisgICAgICAgYXBwbGljYXRpb24gd2hlbiB0aGUgY29tcGlsaW5nIGZ1bmN0aW9uIGlzIGNhbGxlZC4gVGhlIHBhdHRlcm4gY2FuIGNvbi0KKyAgICAgICB0YWluIHNwZWNpYWwgbGVhZGluZyBzZXF1ZW5jZXMgc3VjaCBhcyAoKkNSTEYpICB0byAgb3ZlcnJpZGUgIHdoYXQgIHRoZQorICAgICAgIGFwcGxpY2F0aW9uICBoYXMgIHNldCAgb3Igd2hhdCBoYXMgYmVlbiBkZWZhdWx0ZWQuIERldGFpbHMgYXJlIGdpdmVuIGluCisgICAgICAgdGhlIHNlY3Rpb24gZW50aXRsZWQgIk5ld2xpbmUgc2VxdWVuY2VzIiAgYWJvdmUuICBUaGVyZSAgYXJlICBhbHNvICB0aGUKKyAgICAgICAoKlVURikgIGFuZCAgKCpVQ1ApICBsZWFkaW5nICBzZXF1ZW5jZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBzZXQgVVRGIGFuZAorICAgICAgIFVuaWNvZGUgcHJvcGVydHkgbW9kZXM7IHRoZXkgYXJlIGVxdWl2YWxlbnQgdG8gIHNldHRpbmcgIHRoZSAgUENSRTJfVVRGCisgICAgICAgYW5kICBQQ1JFMl9VQ1AgIG9wdGlvbnMsIHJlc3BlY3RpdmVseS4gSG93ZXZlciwgdGhlIGFwcGxpY2F0aW9uIGNhbiBzZXQKKyAgICAgICB0aGUgUENSRTJfTkVWRVJfVVRGIGFuZCBQQ1JFMl9ORVZFUl9VQ1Agb3B0aW9ucywgd2hpY2ggbG9jayBvdXQgdGhlIHVzZQorICAgICAgIG9mIHRoZSAoKlVURikgYW5kICgqVUNQKSBzZXF1ZW5jZXMuCisKKworU1VCUEFUVEVSTlMKKworICAgICAgIFN1YnBhdHRlcm5zIGFyZSBkZWxpbWl0ZWQgYnkgcGFyZW50aGVzZXMgKHJvdW5kIGJyYWNrZXRzKSwgd2hpY2ggY2FuIGJlCisgICAgICAgbmVzdGVkLiAgVHVybmluZyBwYXJ0IG9mIGEgcGF0dGVybiBpbnRvIGEgc3VicGF0dGVybiBkb2VzIHR3byB0aGluZ3M6CisKKyAgICAgICAxLiBJdCBsb2NhbGl6ZXMgYSBzZXQgb2YgYWx0ZXJuYXRpdmVzLiBGb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm4KKworICAgICAgICAgY2F0KGFyYWN0fGVycGlsbGFyfCkKKworICAgICAgIG1hdGNoZXMgImNhdGFyYWN0IiwgImNhdGVycGlsbGFyIiwgb3IgImNhdCIuIFdpdGhvdXQgIHRoZSAgcGFyZW50aGVzZXMsCisgICAgICAgaXQgd291bGQgbWF0Y2ggImNhdGFyYWN0IiwgImVycGlsbGFyIiBvciBhbiBlbXB0eSBzdHJpbmcuCisKKyAgICAgICAyLiAgSXQgIHNldHMgIHVwICB0aGUgIHN1YnBhdHRlcm4gYXMgYSBjYXB0dXJpbmcgc3VicGF0dGVybi4gVGhpcyBtZWFucworICAgICAgIHRoYXQsIHdoZW4gdGhlIHdob2xlIHBhdHRlcm4gbWF0Y2hlcywgdGhlIHBvcnRpb24gb2YgdGhlIHN1YmplY3Qgc3RyaW5nCisgICAgICAgdGhhdCAgbWF0Y2hlZCAgdGhlICBzdWJwYXR0ZXJuIGlzIHBhc3NlZCBiYWNrIHRvIHRoZSBjYWxsZXIsIHNlcGFyYXRlbHkKKyAgICAgICBmcm9tIHRoZSBwb3J0aW9uIHRoYXQgbWF0Y2hlZCB0aGUgd2hvbGUgcGF0dGVybi4gKFRoaXMgYXBwbGllcyBvbmx5ICB0bworICAgICAgIHRoZSAgdHJhZGl0aW9uYWwgIG1hdGNoaW5nIGZ1bmN0aW9uOyB0aGUgREZBIG1hdGNoaW5nIGZ1bmN0aW9uIGRvZXMgbm90CisgICAgICAgc3VwcG9ydCBjYXB0dXJpbmcuKQorCisgICAgICAgT3BlbmluZyBwYXJlbnRoZXNlcyBhcmUgY291bnRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgKHN0YXJ0aW5nIGZyb20gMSkgdG8KKyAgICAgICBvYnRhaW4gIG51bWJlcnMgIGZvciAgdGhlICBjYXB0dXJpbmcgIHN1YnBhdHRlcm5zLiAgRm9yIGV4YW1wbGUsIGlmIHRoZQorICAgICAgIHN0cmluZyAidGhlIHJlZCBraW5nIiBpcyBtYXRjaGVkIGFnYWluc3QgdGhlIHBhdHRlcm4KKworICAgICAgICAgdGhlICgocmVkfHdoaXRlKSAoa2luZ3xxdWVlbikpCisKKyAgICAgICB0aGUgY2FwdHVyZWQgc3Vic3RyaW5ncyBhcmUgInJlZCBraW5nIiwgInJlZCIsIGFuZCAia2luZyIsIGFuZCBhcmUgbnVtLQorICAgICAgIGJlcmVkIDEsIDIsIGFuZCAzLCByZXNwZWN0aXZlbHkuCisKKyAgICAgICBUaGUgIGZhY3QgIHRoYXQgIHBsYWluICBwYXJlbnRoZXNlcyAgZnVsZmlsIHR3byBmdW5jdGlvbnMgaXMgbm90IGFsd2F5cworICAgICAgIGhlbHBmdWwuICBUaGVyZSBhcmUgb2Z0ZW4gdGltZXMgd2hlbiBhIGdyb3VwaW5nIHN1YnBhdHRlcm4gaXMgIHJlcXVpcmVkCisgICAgICAgd2l0aG91dCAgYSBjYXB0dXJpbmcgcmVxdWlyZW1lbnQuIElmIGFuIG9wZW5pbmcgcGFyZW50aGVzaXMgaXMgZm9sbG93ZWQKKyAgICAgICBieSBhIHF1ZXN0aW9uIG1hcmsgYW5kIGEgY29sb24sIHRoZSBzdWJwYXR0ZXJuIGRvZXMgbm90IGRvIGFueSAgY2FwdHVyLQorICAgICAgIGluZywgIGFuZCAgaXMgIG5vdCAgY291bnRlZCB3aGVuIGNvbXB1dGluZyB0aGUgbnVtYmVyIG9mIGFueSBzdWJzZXF1ZW50CisgICAgICAgY2FwdHVyaW5nIHN1YnBhdHRlcm5zLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cmluZyAidGhlIHdoaXRlIHF1ZWVuIiAgaXMKKyAgICAgICBtYXRjaGVkIGFnYWluc3QgdGhlIHBhdHRlcm4KKworICAgICAgICAgdGhlICgoPzpyZWR8d2hpdGUpIChraW5nfHF1ZWVuKSkKKworICAgICAgIHRoZSBjYXB0dXJlZCBzdWJzdHJpbmdzIGFyZSAid2hpdGUgcXVlZW4iIGFuZCAicXVlZW4iLCBhbmQgYXJlIG51bWJlcmVkCisgICAgICAgMSBhbmQgMi4gVGhlIG1heGltdW0gbnVtYmVyIG9mIGNhcHR1cmluZyBzdWJwYXR0ZXJucyBpcyA2NTUzNS4KKworICAgICAgIEFzIGEgY29udmVuaWVudCBzaG9ydGhhbmQsIGlmIGFueSBvcHRpb24gc2V0dGluZ3MgYXJlIHJlcXVpcmVkICBhdCAgdGhlCisgICAgICAgc3RhcnQgIG9mICBhICBub24tY2FwdHVyaW5nICBzdWJwYXR0ZXJuLCAgdGhlIG9wdGlvbiBsZXR0ZXJzIG1heSBhcHBlYXIKKyAgICAgICBiZXR3ZWVuIHRoZSAiPyIgYW5kIHRoZSAiOiIuIFRodXMgdGhlIHR3byBwYXR0ZXJucworCisgICAgICAgICAoP2k6c2F0dXJkYXl8c3VuZGF5KQorICAgICAgICAgKD86KD9pKXNhdHVyZGF5fHN1bmRheSkKKworICAgICAgIG1hdGNoIGV4YWN0bHkgdGhlIHNhbWUgc2V0IG9mIHN0cmluZ3MuIEJlY2F1c2UgYWx0ZXJuYXRpdmUgYnJhbmNoZXMgYXJlCisgICAgICAgdHJpZWQgIGZyb20gIGxlZnQgIHRvIHJpZ2h0LCBhbmQgb3B0aW9ucyBhcmUgbm90IHJlc2V0IHVudGlsIHRoZSBlbmQgb2YKKyAgICAgICB0aGUgc3VicGF0dGVybiBpcyByZWFjaGVkLCBhbiBvcHRpb24gc2V0dGluZyBpbiBvbmUgYnJhbmNoIGRvZXMgIGFmZmVjdAorICAgICAgIHN1YnNlcXVlbnQgIGJyYW5jaGVzLCAgc28gIHRoZSBhYm92ZSBwYXR0ZXJucyBtYXRjaCAiU1VOREFZIiBhcyB3ZWxsIGFzCisgICAgICAgIlNhdHVyZGF5Ii4KKworCitEVVBMSUNBVEUgU1VCUEFUVEVSTiBOVU1CRVJTCisKKyAgICAgICBQZXJsIDUuMTAgaW50cm9kdWNlZCBhIGZlYXR1cmUgd2hlcmVieSBlYWNoIGFsdGVybmF0aXZlIGluIGEgc3VicGF0dGVybgorICAgICAgIHVzZXMgIHRoZSBzYW1lIG51bWJlcnMgZm9yIGl0cyBjYXB0dXJpbmcgcGFyZW50aGVzZXMuIFN1Y2ggYSBzdWJwYXR0ZXJuCisgICAgICAgc3RhcnRzIHdpdGggKD98IGFuZCBpcyBpdHNlbGYgYSBub24tY2FwdHVyaW5nIHN1YnBhdHRlcm4uIEZvciAgZXhhbXBsZSwKKyAgICAgICBjb25zaWRlciB0aGlzIHBhdHRlcm46CisKKyAgICAgICAgICg/fChTYXQpdXJ8KFN1bikpZGF5CisKKyAgICAgICBCZWNhdXNlICB0aGUgdHdvIGFsdGVybmF0aXZlcyBhcmUgaW5zaWRlIGEgKD98IGdyb3VwLCBib3RoIHNldHMgb2YgY2FwLQorICAgICAgIHR1cmluZyBwYXJlbnRoZXNlcyBhcmUgbnVtYmVyZWQgb25lLiBUaHVzLCB3aGVuICB0aGUgIHBhdHRlcm4gIG1hdGNoZXMsCisgICAgICAgeW91ICBjYW4gIGxvb2sgIGF0IGNhcHR1cmVkIHN1YnN0cmluZyBudW1iZXIgb25lLCB3aGljaGV2ZXIgYWx0ZXJuYXRpdmUKKyAgICAgICBtYXRjaGVkLiBUaGlzIGNvbnN0cnVjdCBpcyB1c2VmdWwgd2hlbiB5b3Ugd2FudCB0byAgY2FwdHVyZSAgcGFydCwgIGJ1dAorICAgICAgIG5vdCBhbGwsIG9mIG9uZSBvZiBhIG51bWJlciBvZiBhbHRlcm5hdGl2ZXMuIEluc2lkZSBhICg/fCBncm91cCwgcGFyZW4tCisgICAgICAgdGhlc2VzIGFyZSBudW1iZXJlZCBhcyB1c3VhbCwgYnV0IHRoZSBudW1iZXIgaXMgcmVzZXQgYXQgdGhlICBzdGFydCAgb2YKKyAgICAgICBlYWNoICBicmFuY2guICBUaGUgbnVtYmVycyBvZiBhbnkgY2FwdHVyaW5nIHBhcmVudGhlc2VzIHRoYXQgZm9sbG93IHRoZQorICAgICAgIHN1YnBhdHRlcm4gc3RhcnQgYWZ0ZXIgdGhlIGhpZ2hlc3QgbnVtYmVyIHVzZWQgaW4gYW55IGJyYW5jaC4gVGhlICBmb2wtCisgICAgICAgbG93aW5nIGV4YW1wbGUgaXMgdGFrZW4gZnJvbSB0aGUgUGVybCBkb2N1bWVudGF0aW9uLiBUaGUgbnVtYmVycyB1bmRlci0KKyAgICAgICBuZWF0aCBzaG93IGluIHdoaWNoIGJ1ZmZlciB0aGUgY2FwdHVyZWQgY29udGVudCB3aWxsIGJlIHN0b3JlZC4KKworICAgICAgICAgIyBiZWZvcmUgIC0tLS0tLS0tLS0tLS0tLWJyYW5jaC1yZXNldC0tLS0tLS0tLS0tIGFmdGVyCisgICAgICAgICAvICggYSApICAoP3wgeCAoIHkgKSB6IHwgKHAgKHEpIHIpIHwgKHQpIHUgKHYpICkgKCB6ICkgL3gKKyAgICAgICAgICMgMSAgICAgICAgICAgIDIgICAgICAgICAyICAzICAgICAgICAyICAgICAzICAgICA0CisKKyAgICAgICBBIGJhY2sgcmVmZXJlbmNlIHRvIGEgbnVtYmVyZWQgc3VicGF0dGVybiB1c2VzIHRoZSAgbW9zdCAgcmVjZW50ICB2YWx1ZQorICAgICAgIHRoYXQgIGlzICBzZXQgIGZvciB0aGF0IG51bWJlciBieSBhbnkgc3VicGF0dGVybi4gVGhlIGZvbGxvd2luZyBwYXR0ZXJuCisgICAgICAgbWF0Y2hlcyAiYWJjYWJjIiBvciAiZGVmZGVmIjoKKworICAgICAgICAgLyg/fChhYmMpfChkZWYpKVwxLworCisgICAgICAgSW4gY29udHJhc3QsIGEgc3Vicm91dGluZSBjYWxsIHRvIGEgbnVtYmVyZWQgc3VicGF0dGVybiAgYWx3YXlzICByZWZlcnMKKyAgICAgICB0byAgdGhlICBmaXJzdCAgb25lIGluIHRoZSBwYXR0ZXJuIHdpdGggdGhlIGdpdmVuIG51bWJlci4gVGhlIGZvbGxvd2luZworICAgICAgIHBhdHRlcm4gbWF0Y2hlcyAiYWJjYWJjIiBvciAiZGVmYWJjIjoKKworICAgICAgICAgLyg/fChhYmMpfChkZWYpKSg/MSkvCisKKyAgICAgICBBIHJlbGF0aXZlIHJlZmVyZW5jZSBzdWNoIGFzICg/LTEpIGlzIG5vIGRpZmZlcmVudDogaXQgaXMganVzdCBhIGNvbnZlLQorICAgICAgIG5pZW50IHdheSBvZiBjb21wdXRpbmcgYW4gYWJzb2x1dGUgZ3JvdXAgbnVtYmVyLgorCisgICAgICAgSWYgIGEgY29uZGl0aW9uIHRlc3QgZm9yIGEgc3VicGF0dGVybidzIGhhdmluZyBtYXRjaGVkIHJlZmVycyB0byBhIG5vbi0KKyAgICAgICB1bmlxdWUgbnVtYmVyLCB0aGUgdGVzdCBpcyB0cnVlIGlmIGFueSBvZiB0aGUgc3VicGF0dGVybnMgb2YgdGhhdCAgbnVtLQorICAgICAgIGJlciBoYXZlIG1hdGNoZWQuCisKKyAgICAgICBBbiAgYWx0ZXJuYXRpdmUgYXBwcm9hY2ggdG8gdXNpbmcgdGhpcyAiYnJhbmNoIHJlc2V0IiBmZWF0dXJlIGlzIHRvIHVzZQorICAgICAgIGR1cGxpY2F0ZSBuYW1lZCBzdWJwYXR0ZXJucywgYXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCisKKworTkFNRUQgU1VCUEFUVEVSTlMKKworICAgICAgIElkZW50aWZ5aW5nIGNhcHR1cmluZyBwYXJlbnRoZXNlcyBieSBudW1iZXIgaXMgc2ltcGxlLCBidXQgIGl0ICBjYW4gIGJlCisgICAgICAgdmVyeSAgaGFyZCAgdG8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVycyBpbiBjb21wbGljYXRlZCByZWd1bGFyIGV4cHJlcy0KKyAgICAgICBzaW9ucy4gRnVydGhlcm1vcmUsIGlmIGFuICBleHByZXNzaW9uICBpcyAgbW9kaWZpZWQsICB0aGUgIG51bWJlcnMgIG1heQorICAgICAgIGNoYW5nZS4gVG8gaGVscCB3aXRoIHRoaXMgZGlmZmljdWx0eSwgUENSRTIgc3VwcG9ydHMgdGhlIG5hbWluZyBvZiBzdWItCisgICAgICAgcGF0dGVybnMuIFRoaXMgZmVhdHVyZSB3YXMgbm90IGFkZGVkIHRvIFBlcmwgdW50aWwgcmVsZWFzZSA1LjEwLiBQeXRob24KKyAgICAgICBoYWQgIHRoZSBmZWF0dXJlIGVhcmxpZXIsIGFuZCBQQ1JFMSBpbnRyb2R1Y2VkIGl0IGF0IHJlbGVhc2UgNC4wLCB1c2luZworICAgICAgIHRoZSBQeXRob24gc3ludGF4LiBQQ1JFMiBzdXBwb3J0cyBib3RoIHRoZSBQZXJsIGFuZCB0aGUgUHl0aG9uICBzeW50YXguCisgICAgICAgUGVybCAgYWxsb3dzICBpZGVudGljYWxseSBudW1iZXJlZCBzdWJwYXR0ZXJucyB0byBoYXZlIGRpZmZlcmVudCBuYW1lcywKKyAgICAgICBidXQgUENSRTIgZG9lcyBub3QuCisKKyAgICAgICBJbiBQQ1JFMiwgYSBzdWJwYXR0ZXJuIGNhbiBiZSBuYW1lZCBpbiBvbmUgb2YgdGhyZWUgd2F5czogICg/PG5hbWU+Li4uKQorICAgICAgIG9yICAoPyduYW1lJy4uLikgIGFzIGluIFBlcmwsIG9yICg/UDxuYW1lPi4uLikgYXMgaW4gUHl0aG9uLiBSZWZlcmVuY2VzCisgICAgICAgdG8gY2FwdHVyaW5nIHBhcmVudGhlc2VzIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIHBhdHRlcm4sIHN1Y2ggYXMgIGJhY2sKKyAgICAgICByZWZlcmVuY2VzLCAgcmVjdXJzaW9uLCAgYW5kIGNvbmRpdGlvbnMsIGNhbiBiZSBtYWRlIGJ5IG5hbWUgYXMgd2VsbCBhcworICAgICAgIGJ5IG51bWJlci4KKworICAgICAgIE5hbWVzIGNvbnNpc3Qgb2YgdXAgdG8gMzIgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHVuZGVyc2NvcmVzLCAgYnV0CisgICAgICAgbXVzdCAgc3RhcnQgIHdpdGggIGEgIG5vbi1kaWdpdC4gIE5hbWVkIGNhcHR1cmluZyBwYXJlbnRoZXNlcyBhcmUgc3RpbGwKKyAgICAgICBhbGxvY2F0ZWQgbnVtYmVycyBhcyB3ZWxsIGFzIG5hbWVzLCBleGFjdGx5IGFzIGlmIHRoZSAgbmFtZXMgIHdlcmUgIG5vdAorICAgICAgIHByZXNlbnQuIFRoZSBQQ1JFMiBBUEkgcHJvdmlkZXMgZnVuY3Rpb24gY2FsbHMgZm9yIGV4dHJhY3RpbmcgdGhlIG5hbWUtCisgICAgICAgdG8tbnVtYmVyIHRyYW5zbGF0aW9uIHRhYmxlIGZyb20gYSBjb21waWxlZCAgcGF0dGVybi4gIFRoZXJlICBhcmUgIGFsc28KKyAgICAgICBjb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGV4dHJhY3RpbmcgYSBjYXB0dXJlZCBzdWJzdHJpbmcgYnkgbmFtZS4KKworICAgICAgIEJ5ICBkZWZhdWx0LCBhIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluIGEgcGF0dGVybiwgYnV0IGl0IGlzIHBvc3NpYmxlCisgICAgICAgdG8gcmVsYXggdGhpcyBjb25zdHJhaW50IGJ5IHNldHRpbmcgdGhlIFBDUkUyX0RVUE5BTUVTIG9wdGlvbiAgYXQgIGNvbS0KKyAgICAgICBwaWxlICB0aW1lLiAgKER1cGxpY2F0ZSBuYW1lcyBhcmUgYWxzbyBhbHdheXMgcGVybWl0dGVkIGZvciBzdWJwYXR0ZXJucworICAgICAgIHdpdGggdGhlIHNhbWUgbnVtYmVyLCBzZXQgdXAgYXMgZGVzY3JpYmVkICBpbiAgdGhlICBwcmV2aW91cyAgc2VjdGlvbi4pCisgICAgICAgRHVwbGljYXRlICBuYW1lcyAgY2FuIGJlIHVzZWZ1bCBmb3IgcGF0dGVybnMgd2hlcmUgb25seSBvbmUgaW5zdGFuY2Ugb2YKKyAgICAgICB0aGUgbmFtZWQgcGFyZW50aGVzZXMgY2FuIG1hdGNoLiAgU3VwcG9zZSB5b3Ugd2FudCB0byBtYXRjaCB0aGUgbmFtZSBvZgorICAgICAgIGEgIHdlZWtkYXksICBlaXRoZXIgYXMgYSAzLWxldHRlciBhYmJyZXZpYXRpb24gb3IgYXMgdGhlIGZ1bGwgbmFtZSwgYW5kCisgICAgICAgaW4gYm90aCBjYXNlcyB5b3UgIHdhbnQgIHRvICBleHRyYWN0ICB0aGUgIGFiYnJldmlhdGlvbi4gIFRoaXMgIHBhdHRlcm4KKyAgICAgICAoaWdub3JpbmcgdGhlIGxpbmUgYnJlYWtzKSBkb2VzIHRoZSBqb2I6CisKKyAgICAgICAgICg/PEROPk1vbnxGcml8U3VuKSg/OmRheSk/fAorICAgICAgICAgKD88RE4+VHVlKSg/OnNkYXkpP3wKKyAgICAgICAgICg/PEROPldlZCkoPzpuZXNkYXkpP3wKKyAgICAgICAgICg/PEROPlRodSkoPzpyc2RheSk/fAorICAgICAgICAgKD88RE4+U2F0KSg/OnVyZGF5KT8KKworICAgICAgIFRoZXJlICBhcmUgIGZpdmUgY2FwdHVyaW5nIHN1YnN0cmluZ3MsIGJ1dCBvbmx5IG9uZSBpcyBldmVyIHNldCBhZnRlciBhCisgICAgICAgbWF0Y2guICAoQW4gYWx0ZXJuYXRpdmUgd2F5IG9mIHNvbHZpbmcgdGhpcyBwcm9ibGVtIGlzIHRvIHVzZSBhICJicmFuY2gKKyAgICAgICByZXNldCIgc3VicGF0dGVybiwgYXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLikKKworICAgICAgIFRoZSAgY29udmVuaWVuY2UgIGZ1bmN0aW9ucyBmb3IgZXh0cmFjdGluZyB0aGUgZGF0YSBieSBuYW1lIHJldHVybnMgdGhlCisgICAgICAgc3Vic3RyaW5nIGZvciB0aGUgZmlyc3QgKGFuZCBpbiB0aGlzIGV4YW1wbGUsIHRoZSBvbmx5KSAgc3VicGF0dGVybiAgb2YKKyAgICAgICB0aGF0ICBuYW1lICB0aGF0ICBtYXRjaGVkLiAgVGhpcyBzYXZlcyBzZWFyY2hpbmcgdG8gZmluZCB3aGljaCBudW1iZXJlZAorICAgICAgIHN1YnBhdHRlcm4gaXQgd2FzLgorCisgICAgICAgSWYgeW91IG1ha2UgYSBiYWNrIHJlZmVyZW5jZSB0byAgYSAgbm9uLXVuaXF1ZSAgbmFtZWQgIHN1YnBhdHRlcm4gIGZyb20KKyAgICAgICBlbHNld2hlcmUgIGluIHRoZSBwYXR0ZXJuLCB0aGUgc3VicGF0dGVybnMgdG8gd2hpY2ggdGhlIG5hbWUgcmVmZXJzIGFyZQorICAgICAgIGNoZWNrZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgYXBwZWFyIGluIHRoZSBvdmVyYWxsICBwYXR0ZXJuLiAgVGhlCisgICAgICAgZmlyc3Qgb25lIHRoYXQgaXMgc2V0IGlzIHVzZWQgZm9yIHRoZSByZWZlcmVuY2UuIEZvciBleGFtcGxlLCB0aGlzIHBhdC0KKyAgICAgICB0ZXJuIG1hdGNoZXMgYm90aCAiZm9vZm9vIiBhbmQgImJhcmJhciIgYnV0IG5vdCAiZm9vYmFyIiBvciAiYmFyZm9vIjoKKworICAgICAgICAgKD86KD88bj5mb28pfCg/PG4+YmFyKSlcazxuPgorCisKKyAgICAgICBJZiB5b3UgbWFrZSBhIHN1YnJvdXRpbmUgY2FsbCB0byBhIG5vbi11bmlxdWUgbmFtZWQgc3VicGF0dGVybiwgdGhlIG9uZQorICAgICAgIHRoYXQgIGNvcnJlc3BvbmRzICB0byAgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIG5hbWUgaXMgdXNlZC4gSW4gdGhlCisgICAgICAgYWJzZW5jZSBvZiBkdXBsaWNhdGUgbnVtYmVycyAoc2VlIHRoZSBwcmV2aW91cyBzZWN0aW9uKSB0aGlzIGlzIHRoZSBvbmUKKyAgICAgICB3aXRoIHRoZSBsb3dlc3QgbnVtYmVyLgorCisgICAgICAgSWYgeW91IHVzZSBhIG5hbWVkIHJlZmVyZW5jZSBpbiBhIGNvbmRpdGlvbiB0ZXN0IChzZWUgdGhlIHNlY3Rpb24gYWJvdXQKKyAgICAgICBjb25kaXRpb25zIGJlbG93KSwgZWl0aGVyIHRvIGNoZWNrIHdoZXRoZXIgYSBzdWJwYXR0ZXJuIGhhcyBtYXRjaGVkLCBvcgorICAgICAgIHRvICBjaGVjayBmb3IgcmVjdXJzaW9uLCBhbGwgc3VicGF0dGVybnMgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSB0ZXN0ZWQuCisgICAgICAgSWYgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIGZvciBhbnkgb25lIG9mIHRoZW0sIHRoZSBvdmVyYWxsIGNvbmRpdGlvbiAgaXMKKyAgICAgICB0cnVlLiAgVGhpcyAgaXMgIHRoZSAgc2FtZSAgYmVoYXZpb3VyIGFzIHRlc3RpbmcgYnkgbnVtYmVyLiBGb3IgZnVydGhlcgorICAgICAgIGRldGFpbHMgb2YgdGhlIGludGVyZmFjZXMgIGZvciAgaGFuZGxpbmcgIG5hbWVkICBzdWJwYXR0ZXJucywgIHNlZSAgdGhlCisgICAgICAgcGNyZTJhcGkgZG9jdW1lbnRhdGlvbi4KKworICAgICAgIFdhcm5pbmc6IFlvdSBjYW5ub3QgdXNlIGRpZmZlcmVudCBuYW1lcyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHR3byBzdWItCisgICAgICAgcGF0dGVybnMgd2l0aCB0aGUgc2FtZSBudW1iZXIgYmVjYXVzZSBQQ1JFMiB1c2VzIG9ubHkgdGhlIG51bWJlcnMgIHdoZW4KKyAgICAgICBtYXRjaGluZy4gRm9yIHRoaXMgcmVhc29uLCBhbiBlcnJvciBpcyBnaXZlbiBhdCBjb21waWxlIHRpbWUgaWYgZGlmZmVyLQorICAgICAgIGVudCBuYW1lcyBhcmUgZ2l2ZW4gdG8gc3VicGF0dGVybnMgd2l0aCB0aGUgc2FtZSBudW1iZXIuICBIb3dldmVyLCAgeW91CisgICAgICAgY2FuIGFsd2F5cyBnaXZlIHRoZSBzYW1lIG5hbWUgdG8gc3VicGF0dGVybnMgd2l0aCB0aGUgc2FtZSBudW1iZXIsIGV2ZW4KKyAgICAgICB3aGVuIFBDUkUyX0RVUE5BTUVTIGlzIG5vdCBzZXQuCisKKworUkVQRVRJVElPTgorCisgICAgICAgUmVwZXRpdGlvbiBpcyBzcGVjaWZpZWQgYnkgcXVhbnRpZmllcnMsIHdoaWNoIGNhbiAgZm9sbG93ICBhbnkgIG9mICB0aGUKKyAgICAgICBmb2xsb3dpbmcgaXRlbXM6CisKKyAgICAgICAgIGEgbGl0ZXJhbCBkYXRhIGNoYXJhY3RlcgorICAgICAgICAgdGhlIGRvdCBtZXRhY2hhcmFjdGVyCisgICAgICAgICB0aGUgXEMgZXNjYXBlIHNlcXVlbmNlCisgICAgICAgICB0aGUgXFggZXNjYXBlIHNlcXVlbmNlCisgICAgICAgICB0aGUgXFIgZXNjYXBlIHNlcXVlbmNlCisgICAgICAgICBhbiBlc2NhcGUgc3VjaCBhcyBcZCBvciBccEwgdGhhdCBtYXRjaGVzIGEgc2luZ2xlIGNoYXJhY3RlcgorICAgICAgICAgYSBjaGFyYWN0ZXIgY2xhc3MKKyAgICAgICAgIGEgYmFjayByZWZlcmVuY2UKKyAgICAgICAgIGEgcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJuIChpbmNsdWRpbmcgbW9zdCBhc3NlcnRpb25zKQorICAgICAgICAgYSBzdWJyb3V0aW5lIGNhbGwgdG8gYSBzdWJwYXR0ZXJuIChyZWN1cnNpdmUgb3Igb3RoZXJ3aXNlKQorCisgICAgICAgVGhlICBnZW5lcmFsIHJlcGV0aXRpb24gcXVhbnRpZmllciBzcGVjaWZpZXMgYSBtaW5pbXVtIGFuZCBtYXhpbXVtIG51bS0KKyAgICAgICBiZXIgb2YgcGVybWl0dGVkIG1hdGNoZXMsIGJ5IGdpdmluZyB0aGUgdHdvIG51bWJlcnMgaW4gIGN1cmx5ICBicmFja2V0cworICAgICAgIChicmFjZXMpLCAgc2VwYXJhdGVkICBieSAgYSBjb21tYS4gVGhlIG51bWJlcnMgbXVzdCBiZSBsZXNzIHRoYW4gNjU1MzYsCisgICAgICAgYW5kIHRoZSBmaXJzdCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc2Vjb25kLiBGb3IgZXhhbXBsZToKKworICAgICAgICAgensyLDR9CisKKyAgICAgICBtYXRjaGVzICJ6eiIsICJ6enoiLCBvciAienp6eiIuIEEgY2xvc2luZyBicmFjZSBvbiBpdHMgIG93biAgaXMgIG5vdCAgYQorICAgICAgIHNwZWNpYWwgIGNoYXJhY3Rlci4gIElmICB0aGUgc2Vjb25kIG51bWJlciBpcyBvbWl0dGVkLCBidXQgdGhlIGNvbW1hIGlzCisgICAgICAgcHJlc2VudCwgdGhlcmUgaXMgbm8gdXBwZXIgbGltaXQ7IGlmIHRoZSBzZWNvbmQgbnVtYmVyICBhbmQgIHRoZSAgY29tbWEKKyAgICAgICBhcmUgIGJvdGggb21pdHRlZCwgdGhlIHF1YW50aWZpZXIgc3BlY2lmaWVzIGFuIGV4YWN0IG51bWJlciBvZiByZXF1aXJlZAorICAgICAgIG1hdGNoZXMuIFRodXMKKworICAgICAgICAgW2FlaW91XXszLH0KKworICAgICAgIG1hdGNoZXMgYXQgbGVhc3QgMyBzdWNjZXNzaXZlIHZvd2VscywgYnV0IG1heSBtYXRjaCBtYW55IG1vcmUsIHdoZXJlYXMKKworICAgICAgICAgXGR7OH0KKworICAgICAgIG1hdGNoZXMgZXhhY3RseSA4IGRpZ2l0cy4gQW4gb3BlbmluZyBjdXJseSBicmFja2V0IHRoYXQgIGFwcGVhcnMgIGluICBhCisgICAgICAgcG9zaXRpb24gIHdoZXJlIGEgcXVhbnRpZmllciBpcyBub3QgYWxsb3dlZCwgb3Igb25lIHRoYXQgZG9lcyBub3QgbWF0Y2gKKyAgICAgICB0aGUgc3ludGF4IG9mIGEgcXVhbnRpZmllciwgaXMgdGFrZW4gYXMgYSBsaXRlcmFsIGNoYXJhY3Rlci4gRm9yICBleGFtLQorICAgICAgIHBsZSwgeyw2fSBpcyBub3QgYSBxdWFudGlmaWVyLCBidXQgYSBsaXRlcmFsIHN0cmluZyBvZiBmb3VyIGNoYXJhY3RlcnMuCisKKyAgICAgICBJbiBVVEYgbW9kZXMsIHF1YW50aWZpZXJzIGFwcGx5IHRvIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gdG8gaW5kaXZpZHVhbAorICAgICAgIGNvZGUgdW5pdHMuIFRodXMsIGZvciBleGFtcGxlLCBceHsxMDB9ezJ9IG1hdGNoZXMgdHdvIGNoYXJhY3RlcnMsICBlYWNoCisgICAgICAgb2Ygd2hpY2ggaXMgcmVwcmVzZW50ZWQgYnkgYSB0d28tYnl0ZSBzZXF1ZW5jZSBpbiBhIFVURi04IHN0cmluZy4gU2ltaS0KKyAgICAgICBsYXJseSwgXFh7M30gbWF0Y2hlcyB0aHJlZSBVbmljb2RlIGV4dGVuZGVkIGdyYXBoZW1lIGNsdXN0ZXJzLCBlYWNoICBvZgorICAgICAgIHdoaWNoICBtYXkgIGJlICBzZXZlcmFsICBjb2RlICB1bml0cyBsb25nIChhbmQgdGhleSBtYXkgYmUgb2YgZGlmZmVyZW50CisgICAgICAgbGVuZ3RocykuCisKKyAgICAgICBUaGUgcXVhbnRpZmllciB7MH0gaXMgcGVybWl0dGVkLCBjYXVzaW5nIHRoZSBleHByZXNzaW9uIHRvIGJlaGF2ZSBhcyBpZgorICAgICAgIHRoZSBwcmV2aW91cyBpdGVtIGFuZCB0aGUgcXVhbnRpZmllciB3ZXJlIG5vdCBwcmVzZW50LiBUaGlzIG1heSBiZSB1c2UtCisgICAgICAgZnVsIGZvciBzdWJwYXR0ZXJucyB0aGF0IGFyZSByZWZlcmVuY2VkIGFzIHN1YnJvdXRpbmVzICBmcm9tICBlbHNld2hlcmUKKyAgICAgICBpbiB0aGUgcGF0dGVybiAoYnV0IHNlZSBhbHNvIHRoZSBzZWN0aW9uIGVudGl0bGVkICJEZWZpbmluZyBzdWJwYXR0ZXJucworICAgICAgIGZvciB1c2UgYnkgcmVmZXJlbmNlIG9ubHkiIGJlbG93KS4gSXRlbXMgb3RoZXIgIHRoYW4gIHN1YnBhdHRlcm5zICB0aGF0CisgICAgICAgaGF2ZSBhIHswfSBxdWFudGlmaWVyIGFyZSBvbWl0dGVkIGZyb20gdGhlIGNvbXBpbGVkIHBhdHRlcm4uCisKKyAgICAgICBGb3IgIGNvbnZlbmllbmNlLCB0aGUgdGhyZWUgbW9zdCBjb21tb24gcXVhbnRpZmllcnMgaGF2ZSBzaW5nbGUtY2hhcmFjLQorICAgICAgIHRlciBhYmJyZXZpYXRpb25zOgorCisgICAgICAgICAqICAgIGlzIGVxdWl2YWxlbnQgdG8gezAsfQorICAgICAgICAgKyAgICBpcyBlcXVpdmFsZW50IHRvIHsxLH0KKyAgICAgICAgID8gICAgaXMgZXF1aXZhbGVudCB0byB7MCwxfQorCisgICAgICAgSXQgaXMgcG9zc2libGUgdG8gY29uc3RydWN0IGluZmluaXRlIGxvb3BzIGJ5ICBmb2xsb3dpbmcgIGEgIHN1YnBhdHRlcm4KKyAgICAgICB0aGF0IGNhbiBtYXRjaCBubyBjaGFyYWN0ZXJzIHdpdGggYSBxdWFudGlmaWVyIHRoYXQgaGFzIG5vIHVwcGVyIGxpbWl0LAorICAgICAgIGZvciBleGFtcGxlOgorCisgICAgICAgICAoYT8pKgorCisgICAgICAgRWFybGllciB2ZXJzaW9ucyBvZiBQZXJsIGFuZCBQQ1JFMSB1c2VkIHRvIGdpdmUgIGFuICBlcnJvciAgYXQgIGNvbXBpbGUKKyAgICAgICB0aW1lIGZvciBzdWNoIHBhdHRlcm5zLiBIb3dldmVyLCBiZWNhdXNlIHRoZXJlIGFyZSBjYXNlcyB3aGVyZSB0aGlzIGNhbgorICAgICAgIGJlIHVzZWZ1bCwgc3VjaCBwYXR0ZXJucyBhcmUgbm93IGFjY2VwdGVkLCBidXQgaWYgYW55IHJlcGV0aXRpb24gb2YgdGhlCisgICAgICAgc3VicGF0dGVybiAgZG9lcyBpbiBmYWN0IG1hdGNoIG5vIGNoYXJhY3RlcnMsIHRoZSBsb29wIGlzIGZvcmNpYmx5IGJyby0KKyAgICAgICBrZW4uCisKKyAgICAgICBCeSBkZWZhdWx0LCB0aGUgcXVhbnRpZmllcnMgYXJlICJncmVlZHkiLCB0aGF0IGlzLCB0aGV5IG1hdGNoICBhcyAgbXVjaAorICAgICAgIGFzICBwb3NzaWJsZSAgKHVwICB0byAgdGhlICBtYXhpbXVtIG51bWJlciBvZiBwZXJtaXR0ZWQgdGltZXMpLCB3aXRob3V0CisgICAgICAgY2F1c2luZyB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiB0byBmYWlsLiBUaGUgY2xhc3NpYyBleGFtcGxlICBvZiAgd2hlcmUKKyAgICAgICB0aGlzIGdpdmVzIHByb2JsZW1zIGlzIGluIHRyeWluZyB0byBtYXRjaCBjb21tZW50cyBpbiBDIHByb2dyYW1zLiBUaGVzZQorICAgICAgIGFwcGVhciBiZXR3ZWVuIC8qIGFuZCAqLyBhbmQgd2l0aGluIHRoZSBjb21tZW50LCAgaW5kaXZpZHVhbCAgKiAgYW5kICAvCisgICAgICAgY2hhcmFjdGVycyAgbWF5ICBhcHBlYXIuIEFuIGF0dGVtcHQgdG8gbWF0Y2ggQyBjb21tZW50cyBieSBhcHBseWluZyB0aGUKKyAgICAgICBwYXR0ZXJuCisKKyAgICAgICAgIC9cKi4qXCovCisKKyAgICAgICB0byB0aGUgc3RyaW5nCisKKyAgICAgICAgIC8qIGZpcnN0IGNvbW1lbnQgKi8gIG5vdCBjb21tZW50ICAvKiBzZWNvbmQgY29tbWVudCAqLworCisgICAgICAgZmFpbHMsIGJlY2F1c2UgaXQgbWF0Y2hlcyB0aGUgZW50aXJlIHN0cmluZyBvd2luZyB0byB0aGUgZ3JlZWRpbmVzcyAgb2YKKyAgICAgICB0aGUgLiogIGl0ZW0uCisKKyAgICAgICBJZiBhIHF1YW50aWZpZXIgaXMgZm9sbG93ZWQgYnkgYSBxdWVzdGlvbiBtYXJrLCBpdCBjZWFzZXMgdG8gYmUgZ3JlZWR5LAorICAgICAgIGFuZCBpbnN0ZWFkIG1hdGNoZXMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIHRpbWVzIHBvc3NpYmxlLCBzbyAgdGhlICBwYXQtCisgICAgICAgdGVybgorCisgICAgICAgICAvXCouKj9cKi8KKworICAgICAgIGRvZXMgIHRoZSAgcmlnaHQgIHRoaW5nIHdpdGggdGhlIEMgY29tbWVudHMuIFRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzCisgICAgICAgcXVhbnRpZmllcnMgaXMgbm90IG90aGVyd2lzZSBjaGFuZ2VkLCAganVzdCAgdGhlICBwcmVmZXJyZWQgIG51bWJlciAgb2YKKyAgICAgICBtYXRjaGVzLiAgIERvICBub3QgIGNvbmZ1c2UgdGhpcyB1c2Ugb2YgcXVlc3Rpb24gbWFyayB3aXRoIGl0cyB1c2UgYXMgYQorICAgICAgIHF1YW50aWZpZXIgaW4gaXRzIG93biByaWdodC4gQmVjYXVzZSBpdCBoYXMgdHdvIHVzZXMsIGl0IGNhbiAgc29tZXRpbWVzCisgICAgICAgYXBwZWFyIGRvdWJsZWQsIGFzIGluCisKKyAgICAgICAgIFxkPz9cZAorCisgICAgICAgd2hpY2ggbWF0Y2hlcyBvbmUgZGlnaXQgYnkgcHJlZmVyZW5jZSwgYnV0IGNhbiBtYXRjaCB0d28gaWYgdGhhdCBpcyB0aGUKKyAgICAgICBvbmx5IHdheSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBtYXRjaGVzLgorCisgICAgICAgSWYgdGhlIFBDUkUyX1VOR1JFRURZIG9wdGlvbiBpcyBzZXQgKGFuIG9wdGlvbiB0aGF0IGlzIG5vdCBhdmFpbGFibGUgaW4KKyAgICAgICBQZXJsKSwgIHRoZSAgcXVhbnRpZmllcnMgYXJlIG5vdCBncmVlZHkgYnkgZGVmYXVsdCwgYnV0IGluZGl2aWR1YWwgb25lcworICAgICAgIGNhbiBiZSBtYWRlIGdyZWVkeSBieSBmb2xsb3dpbmcgdGhlbSB3aXRoIGEgIHF1ZXN0aW9uICBtYXJrLiAgSW4gIG90aGVyCisgICAgICAgd29yZHMsIGl0IGludmVydHMgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgorCisgICAgICAgV2hlbiAgYSAgcGFyZW50aGVzaXplZCAgc3VicGF0dGVybiAgaXMgcXVhbnRpZmllZCB3aXRoIGEgbWluaW11bSByZXBlYXQKKyAgICAgICBjb3VudCB0aGF0IGlzIGdyZWF0ZXIgdGhhbiAxIG9yIHdpdGggYSBsaW1pdGVkIG1heGltdW0sIG1vcmUgbWVtb3J5ICBpcworICAgICAgIHJlcXVpcmVkICBmb3IgIHRoZSAgY29tcGlsZWQgIHBhdHRlcm4sIGluIHByb3BvcnRpb24gdG8gdGhlIHNpemUgb2YgdGhlCisgICAgICAgbWluaW11bSBvciBtYXhpbXVtLgorCisgICAgICAgSWYgYSBwYXR0ZXJuIHN0YXJ0cyB3aXRoICAuKiAgb3IgIC57MCx9ICBhbmQgIHRoZSAgUENSRTJfRE9UQUxMICBvcHRpb24KKyAgICAgICAoZXF1aXZhbGVudCAgdG8gIFBlcmwncyAvcykgaXMgc2V0LCB0aHVzIGFsbG93aW5nIHRoZSBkb3QgdG8gbWF0Y2ggbmV3LQorICAgICAgIGxpbmVzLCB0aGUgcGF0dGVybiBpcyBpbXBsaWNpdGx5ICBhbmNob3JlZCwgIGJlY2F1c2UgIHdoYXRldmVyICBmb2xsb3dzCisgICAgICAgd2lsbCAgYmUgIHRyaWVkIGFnYWluc3QgZXZlcnkgY2hhcmFjdGVyIHBvc2l0aW9uIGluIHRoZSBzdWJqZWN0IHN0cmluZywKKyAgICAgICBzbyB0aGVyZSBpcyBubyBwb2ludCBpbiByZXRyeWluZyB0aGUgIG92ZXJhbGwgIG1hdGNoICBhdCAgYW55ICBwb3NpdGlvbgorICAgICAgIGFmdGVyIHRoZSBmaXJzdC4gUENSRTIgbm9ybWFsbHkgdHJlYXRzIHN1Y2ggYSBwYXR0ZXJuIGFzIHRob3VnaCBpdCB3ZXJlCisgICAgICAgcHJlY2VkZWQgYnkgXEEuCisKKyAgICAgICBJbiBjYXNlcyB3aGVyZSBpdCBpcyBrbm93biB0aGF0IHRoZSBzdWJqZWN0ICBzdHJpbmcgIGNvbnRhaW5zICBubyAgbmV3LQorICAgICAgIGxpbmVzLCAgaXQgIGlzIHdvcnRoIHNldHRpbmcgUENSRTJfRE9UQUxMIGluIG9yZGVyIHRvIG9idGFpbiB0aGlzIG9wdGktCisgICAgICAgbWl6YXRpb24sIG9yIGFsdGVybmF0aXZlbHksIHVzaW5nIF4gdG8gaW5kaWNhdGUgYW5jaG9yaW5nIGV4cGxpY2l0bHkuCisKKyAgICAgICBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB0aGUgb3B0aW1pemF0aW9uICBjYW5ub3QgIGJlICB1c2VkLgorICAgICAgIFdoZW4gLiogIGlzIGluc2lkZSBjYXB0dXJpbmcgcGFyZW50aGVzZXMgdGhhdCBhcmUgdGhlIHN1YmplY3Qgb2YgYSBiYWNrCisgICAgICAgcmVmZXJlbmNlIGVsc2V3aGVyZSBpbiB0aGUgcGF0dGVybiwgYSBtYXRjaCBhdCB0aGUgc3RhcnQgbWF5IGZhaWwgd2hlcmUKKyAgICAgICBhIGxhdGVyIG9uZSBzdWNjZWVkcy4gQ29uc2lkZXIsIGZvciBleGFtcGxlOgorCisgICAgICAgICAoLiopYWJjXDEKKworICAgICAgIElmICB0aGUgc3ViamVjdCBpcyAieHl6MTIzYWJjMTIzIiB0aGUgbWF0Y2ggcG9pbnQgaXMgdGhlIGZvdXJ0aCBjaGFyYWMtCisgICAgICAgdGVyLiBGb3IgdGhpcyByZWFzb24sIHN1Y2ggYSBwYXR0ZXJuIGlzIG5vdCBpbXBsaWNpdGx5IGFuY2hvcmVkLgorCisgICAgICAgQW5vdGhlciBjYXNlIHdoZXJlIGltcGxpY2l0IGFuY2hvcmluZyBpcyBub3QgYXBwbGllZCBpcyB3aGVuIHRoZSAgbGVhZC0KKyAgICAgICBpbmcgIC4qIGlzIGluc2lkZSBhbiBhdG9taWMgZ3JvdXAuIE9uY2UgYWdhaW4sIGEgbWF0Y2ggYXQgdGhlIHN0YXJ0IG1heQorICAgICAgIGZhaWwgd2hlcmUgYSBsYXRlciBvbmUgc3VjY2VlZHMuIENvbnNpZGVyIHRoaXMgcGF0dGVybjoKKworICAgICAgICAgKD8+Lio/YSliCisKKyAgICAgICBJdCBtYXRjaGVzICJhYiIgaW4gdGhlIHN1YmplY3QgImFhYiIuIFRoZSB1c2Ugb2YgdGhlIGJhY2t0cmFja2luZyAgY29uLQorICAgICAgIHRyb2wgIHZlcmJzICAoKlBSVU5FKSAgYW5kICAoKlNLSVApIGFsc28gZGlzYWJsZSB0aGlzIG9wdGltaXphdGlvbiwgYW5kCisgICAgICAgdGhlcmUgaXMgYW4gb3B0aW9uLCBQQ1JFMl9OT19ET1RTVEFSX0FOQ0hPUiwgdG8gZG8gc28gZXhwbGljaXRseS4KKworICAgICAgIFdoZW4gYSBjYXB0dXJpbmcgc3VicGF0dGVybiBpcyByZXBlYXRlZCwgdGhlIHZhbHVlIGNhcHR1cmVkIGlzIHRoZSBzdWItCisgICAgICAgc3RyaW5nIHRoYXQgbWF0Y2hlZCB0aGUgZmluYWwgaXRlcmF0aW9uLiBGb3IgZXhhbXBsZSwgYWZ0ZXIKKworICAgICAgICAgKHR3ZWVkbGVbZHVtZV17M31ccyopKworCisgICAgICAgaGFzIG1hdGNoZWQgInR3ZWVkbGVkdW0gdHdlZWRsZWRlZSIgdGhlIHZhbHVlIG9mIHRoZSBjYXB0dXJlZCBzdWJzdHJpbmcKKyAgICAgICBpcyAidHdlZWRsZWRlZSIuIEhvd2V2ZXIsIGlmIHRoZXJlIGFyZSAgbmVzdGVkICBjYXB0dXJpbmcgIHN1YnBhdHRlcm5zLAorICAgICAgIHRoZSAgY29ycmVzcG9uZGluZyBjYXB0dXJlZCB2YWx1ZXMgbWF5IGhhdmUgYmVlbiBzZXQgaW4gcHJldmlvdXMgaXRlcmEtCisgICAgICAgdGlvbnMuIEZvciBleGFtcGxlLCBhZnRlcgorCisgICAgICAgICAoYXwoYikpKworCisgICAgICAgbWF0Y2hlcyAiYWJhIiB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBjYXB0dXJlZCBzdWJzdHJpbmcgaXMgImIiLgorCisKK0FUT01JQyBHUk9VUElORyBBTkQgUE9TU0VTU0lWRSBRVUFOVElGSUVSUworCisgICAgICAgV2l0aCBib3RoIG1heGltaXppbmcgKCJncmVlZHkiKSBhbmQgbWluaW1pemluZyAoInVuZ3JlZWR5IiAgb3IgICJsYXp5IikKKyAgICAgICByZXBldGl0aW9uLCAgZmFpbHVyZSAgb2Ygd2hhdCBmb2xsb3dzIG5vcm1hbGx5IGNhdXNlcyB0aGUgcmVwZWF0ZWQgaXRlbQorICAgICAgIHRvIGJlIHJlLWV2YWx1YXRlZCB0byBzZWUgaWYgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIHJlcGVhdHMgIGFsbG93cyAgdGhlCisgICAgICAgcmVzdCAgb2YgIHRoZSBwYXR0ZXJuIHRvIG1hdGNoLiBTb21ldGltZXMgaXQgaXMgdXNlZnVsIHRvIHByZXZlbnQgdGhpcywKKyAgICAgICBlaXRoZXIgdG8gY2hhbmdlIHRoZSBuYXR1cmUgb2YgdGhlIG1hdGNoLCBvciB0byBjYXVzZSBpdCAgZmFpbCAgZWFybGllcgorICAgICAgIHRoYW4gIGl0IG90aGVyd2lzZSBtaWdodCwgd2hlbiB0aGUgYXV0aG9yIG9mIHRoZSBwYXR0ZXJuIGtub3dzIHRoZXJlIGlzCisgICAgICAgbm8gcG9pbnQgaW4gY2Fycnlpbmcgb24uCisKKyAgICAgICBDb25zaWRlciwgZm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuIFxkK2ZvbyB3aGVuIGFwcGxpZWQgdG8gIHRoZSAgc3ViamVjdAorICAgICAgIGxpbmUKKworICAgICAgICAgMTIzNDU2YmFyCisKKyAgICAgICBBZnRlciBtYXRjaGluZyBhbGwgNiBkaWdpdHMgYW5kIHRoZW4gZmFpbGluZyB0byBtYXRjaCAiZm9vIiwgdGhlIG5vcm1hbAorICAgICAgIGFjdGlvbiBvZiB0aGUgbWF0Y2hlciBpcyB0byB0cnkgYWdhaW4gd2l0aCBvbmx5IDUgZGlnaXRzICBtYXRjaGluZyAgdGhlCisgICAgICAgXGQrICBpdGVtLCAgYW5kICB0aGVuICB3aXRoICA0LCAgYW5kICBzbyBvbiwgYmVmb3JlIHVsdGltYXRlbHkgZmFpbGluZy4KKyAgICAgICAiQXRvbWljIGdyb3VwaW5nIiAoYSB0ZXJtIHRha2VuIGZyb20gSmVmZnJleSAgRnJpZWRsJ3MgIGJvb2spICBwcm92aWRlcworICAgICAgIHRoZSAgbWVhbnMgZm9yIHNwZWNpZnlpbmcgdGhhdCBvbmNlIGEgc3VicGF0dGVybiBoYXMgbWF0Y2hlZCwgaXQgaXMgbm90CisgICAgICAgdG8gYmUgcmUtZXZhbHVhdGVkIGluIHRoaXMgd2F5LgorCisgICAgICAgSWYgd2UgdXNlIGF0b21pYyBncm91cGluZyBmb3IgdGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoZSAgbWF0Y2hlciAgZ2l2ZXMKKyAgICAgICB1cCAgaW1tZWRpYXRlbHkgIG9uIGZhaWxpbmcgdG8gbWF0Y2ggImZvbyIgdGhlIGZpcnN0IHRpbWUuIFRoZSBub3RhdGlvbgorICAgICAgIGlzIGEga2luZCBvZiBzcGVjaWFsIHBhcmVudGhlc2lzLCBzdGFydGluZyB3aXRoICg/PiBhcyBpbiB0aGlzIGV4YW1wbGU6CisKKyAgICAgICAgICg/PlxkKylmb28KKworICAgICAgIFRoaXMga2luZCBvZiBwYXJlbnRoZXNpcyAibG9ja3MgdXAiIHRoZSAgcGFydCBvZiB0aGUgIHBhdHRlcm4gIGl0ICBjb24tCisgICAgICAgdGFpbnMgIG9uY2UgIGl0ICBoYXMgbWF0Y2hlZCwgYW5kIGEgZmFpbHVyZSBmdXJ0aGVyIGludG8gdGhlIHBhdHRlcm4gaXMKKyAgICAgICBwcmV2ZW50ZWQgZnJvbSBiYWNrdHJhY2tpbmcgaW50byBpdC4gQmFja3RyYWNraW5nIHBhc3QgaXQgIHRvICBwcmV2aW91cworICAgICAgIGl0ZW1zLCBob3dldmVyLCB3b3JrcyBhcyBub3JtYWwuCisKKyAgICAgICBBbiAgYWx0ZXJuYXRpdmUgIGRlc2NyaXB0aW9uICBpcyB0aGF0IGEgc3VicGF0dGVybiBvZiB0aGlzIHR5cGUgbWF0Y2hlcworICAgICAgIGV4YWN0bHkgdGhlIHN0cmluZyBvZiBjaGFyYWN0ZXJzIHRoYXQgYW4gaWRlbnRpY2FsICBzdGFuZGFsb25lICBwYXR0ZXJuCisgICAgICAgd291bGQgbWF0Y2gsIGlmIGFuY2hvcmVkIGF0IHRoZSBjdXJyZW50IHBvaW50IGluIHRoZSBzdWJqZWN0IHN0cmluZy4KKworICAgICAgIEF0b21pYyBncm91cGluZyBzdWJwYXR0ZXJucyBhcmUgbm90IGNhcHR1cmluZyBzdWJwYXR0ZXJucy4gU2ltcGxlIGNhc2VzCisgICAgICAgc3VjaCBhcyB0aGUgYWJvdmUgZXhhbXBsZSBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIG1heGltaXppbmcgcmVwZWF0IHRoYXQKKyAgICAgICBtdXN0ICBzd2FsbG93ICBldmVyeXRoaW5nICBpdCBjYW4uIFNvLCB3aGlsZSBib3RoIFxkKyBhbmQgXGQrPyBhcmUgcHJlLQorICAgICAgIHBhcmVkIHRvIGFkanVzdCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyB0aGV5IG1hdGNoIGluIG9yZGVyICB0byAgbWFrZSAgdGhlCisgICAgICAgcmVzdCBvZiB0aGUgcGF0dGVybiBtYXRjaCwgKD8+XGQrKSBjYW4gb25seSBtYXRjaCBhbiBlbnRpcmUgc2VxdWVuY2Ugb2YKKyAgICAgICBkaWdpdHMuCisKKyAgICAgICBBdG9taWMgZ3JvdXBzIGluIGdlbmVyYWwgY2FuIG9mIGNvdXJzZSBjb250YWluIGFyYml0cmFyaWx5ICBjb21wbGljYXRlZAorICAgICAgIHN1YnBhdHRlcm5zLCAgYW5kICBjYW4gIGJlICBuZXN0ZWQuIEhvd2V2ZXIsIHdoZW4gdGhlIHN1YnBhdHRlcm4gZm9yIGFuCisgICAgICAgYXRvbWljIGdyb3VwIGlzIGp1c3QgYSBzaW5nbGUgcmVwZWF0ZWQgaXRlbSwgYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIGEKKyAgICAgICBzaW1wbGVyICBub3RhdGlvbiwgIGNhbGxlZCAgYSAicG9zc2Vzc2l2ZSBxdWFudGlmaWVyIiBjYW4gYmUgdXNlZC4gVGhpcworICAgICAgIGNvbnNpc3RzIG9mIGFuIGFkZGl0aW9uYWwgKyBjaGFyYWN0ZXIgIGZvbGxvd2luZyAgYSAgcXVhbnRpZmllci4gIFVzaW5nCisgICAgICAgdGhpcyBub3RhdGlvbiwgdGhlIHByZXZpb3VzIGV4YW1wbGUgY2FuIGJlIHJld3JpdHRlbiBhcworCisgICAgICAgICBcZCsrZm9vCisKKyAgICAgICBOb3RlIHRoYXQgYSBwb3NzZXNzaXZlIHF1YW50aWZpZXIgY2FuIGJlIHVzZWQgd2l0aCBhbiBlbnRpcmUgZ3JvdXAsIGZvcgorICAgICAgIGV4YW1wbGU6CisKKyAgICAgICAgIChhYmN8eHl6KXsyLDN9KworCisgICAgICAgUG9zc2Vzc2l2ZSAgcXVhbnRpZmllcnMgIGFyZSAgYWx3YXlzICBncmVlZHk7ICB0aGUgICBzZXR0aW5nICAgb2YgICB0aGUKKyAgICAgICBQQ1JFMl9VTkdSRUVEWSAgb3B0aW9uICBpcyAgaWdub3JlZC4gVGhleSBhcmUgYSBjb252ZW5pZW50IG5vdGF0aW9uIGZvcgorICAgICAgIHRoZSBzaW1wbGVyIGZvcm1zIG9mIGF0b21pYyBncm91cC4gSG93ZXZlciwgdGhlcmUgaXMgbm8gIGRpZmZlcmVuY2UgIGluCisgICAgICAgdGhlIG1lYW5pbmcgb2YgYSBwb3NzZXNzaXZlIHF1YW50aWZpZXIgYW5kIHRoZSBlcXVpdmFsZW50IGF0b21pYyBncm91cCwKKyAgICAgICB0aG91Z2ggdGhlcmUgbWF5IGJlIGEgcGVyZm9ybWFuY2UgIGRpZmZlcmVuY2U7ICBwb3NzZXNzaXZlICBxdWFudGlmaWVycworICAgICAgIHNob3VsZCBiZSBzbGlnaHRseSBmYXN0ZXIuCisKKyAgICAgICBUaGUgIHBvc3Nlc3NpdmUgIHF1YW50aWZpZXIgc3ludGF4IGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgUGVybCA1Ljggc3luLQorICAgICAgIHRheC4gIEplZmZyZXkgRnJpZWRsIG9yaWdpbmF0ZWQgdGhlIGlkZWEgKGFuZCB0aGUgbmFtZSkgIGluICB0aGUgIGZpcnN0CisgICAgICAgZWRpdGlvbiBvZiBoaXMgYm9vay4gTWlrZSBNY0Nsb3NrZXkgbGlrZWQgaXQsIHNvIGltcGxlbWVudGVkIGl0IHdoZW4gaGUKKyAgICAgICBidWlsdCBTdW4ncyBKYXZhIHBhY2thZ2UsIGFuZCBQQ1JFMSBjb3BpZWQgaXQgZnJvbSB0aGVyZS4gSXQgdWx0aW1hdGVseQorICAgICAgIGZvdW5kIGl0cyB3YXkgaW50byBQZXJsIGF0IHJlbGVhc2UgNS4xMC4KKworICAgICAgIFBDUkUyICBoYXMgIGFuICBvcHRpbWl6YXRpb24gIHRoYXQgYXV0b21hdGljYWxseSAicG9zc2Vzc2lmaWVzIiBjZXJ0YWluCisgICAgICAgc2ltcGxlIHBhdHRlcm4gY29uc3RydWN0cy4gRm9yIGV4YW1wbGUsIHRoZSBzZXF1ZW5jZSBBK0IgaXMgdHJlYXRlZCAgYXMKKyAgICAgICBBKytCICBiZWNhdXNlICB0aGVyZSBpcyBubyBwb2ludCBpbiBiYWNrdHJhY2tpbmcgaW50byBhIHNlcXVlbmNlIG9mIEEncworICAgICAgIHdoZW4gQiBtdXN0IGZvbGxvdy4gIFRoaXMgZmVhdHVyZSBjYW4gYmUgZGlzYWJsZWQgYnkgdGhlIFBDUkUyX05PX0FVVE8tCisgICAgICAgUE9TU0VTUyBvcHRpb24sIG9yIHN0YXJ0aW5nIHRoZSBwYXR0ZXJuIHdpdGggKCpOT19BVVRPX1BPU1NFU1MpLgorCisgICAgICAgV2hlbiAgYSAgcGF0dGVybiAgY29udGFpbnMgYW4gdW5saW1pdGVkIHJlcGVhdCBpbnNpZGUgYSBzdWJwYXR0ZXJuIHRoYXQKKyAgICAgICBjYW4gaXRzZWxmIGJlIHJlcGVhdGVkIGFuIHVubGltaXRlZCBudW1iZXIgb2YgIHRpbWVzLCAgdGhlICB1c2UgIG9mICBhbgorICAgICAgIGF0b21pYyAgZ3JvdXAgIGlzICB0aGUgIG9ubHkgd2F5IHRvIGF2b2lkIHNvbWUgZmFpbGluZyBtYXRjaGVzIHRha2luZyBhCisgICAgICAgdmVyeSBsb25nIHRpbWUgaW5kZWVkLiBUaGUgcGF0dGVybgorCisgICAgICAgICAoXEQrfDxcZCs+KSpbIT9dCisKKyAgICAgICBtYXRjaGVzIGFuIHVubGltaXRlZCBudW1iZXIgb2Ygc3Vic3RyaW5ncyB0aGF0IGVpdGhlciBjb25zaXN0ICBvZiAgbm9uLQorICAgICAgIGRpZ2l0cywgIG9yICBkaWdpdHMgIGVuY2xvc2VkIGluIDw+LCBmb2xsb3dlZCBieSBlaXRoZXIgISBvciA/LiBXaGVuIGl0CisgICAgICAgbWF0Y2hlcywgaXQgcnVucyBxdWlja2x5LiBIb3dldmVyLCBpZiBpdCBpcyBhcHBsaWVkIHRvCisKKyAgICAgICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKworICAgICAgIGl0IHRha2VzIGEgbG9uZyB0aW1lIGJlZm9yZSByZXBvcnRpbmcgIGZhaWx1cmUuICBUaGlzICBpcyAgYmVjYXVzZSAgdGhlCisgICAgICAgc3RyaW5nICBjYW4gYmUgZGl2aWRlZCBiZXR3ZWVuIHRoZSBpbnRlcm5hbCBcRCsgcmVwZWF0IGFuZCB0aGUgZXh0ZXJuYWwKKyAgICAgICAqIHJlcGVhdCBpbiBhIGxhcmdlIG51bWJlciBvZiB3YXlzLCBhbmQgYWxsICBoYXZlICB0byAgYmUgIHRyaWVkLiAgKFRoZQorICAgICAgIGV4YW1wbGUgIHVzZXMgIFshP10gIHJhdGhlciB0aGFuIGEgc2luZ2xlIGNoYXJhY3RlciBhdCB0aGUgZW5kLCBiZWNhdXNlCisgICAgICAgYm90aCBQQ1JFMiBhbmQgUGVybCBoYXZlIGFuIG9wdGltaXphdGlvbiB0aGF0IGFsbG93cyBmb3IgIGZhc3QgIGZhaWx1cmUKKyAgICAgICB3aGVuICBhIHNpbmdsZSBjaGFyYWN0ZXIgaXMgdXNlZC4gVGhleSByZW1lbWJlciB0aGUgbGFzdCBzaW5nbGUgY2hhcmFjLQorICAgICAgIHRlciB0aGF0IGlzIHJlcXVpcmVkIGZvciBhIG1hdGNoLCBhbmQgZmFpbCBlYXJseSBpZiBpdCBpcyAgbm90ICBwcmVzZW50CisgICAgICAgaW4gIHRoZSAgc3RyaW5nLikgIElmICB0aGUgcGF0dGVybiBpcyBjaGFuZ2VkIHNvIHRoYXQgaXQgdXNlcyBhbiBhdG9taWMKKyAgICAgICBncm91cCwgbGlrZSB0aGlzOgorCisgICAgICAgICAoKD8+XEQrKXw8XGQrPikqWyE/XQorCisgICAgICAgc2VxdWVuY2VzIG9mIG5vbi1kaWdpdHMgY2Fubm90IGJlIGJyb2tlbiwgYW5kIGZhaWx1cmUgaGFwcGVucyBxdWlja2x5LgorCisKK0JBQ0sgUkVGRVJFTkNFUworCisgICAgICAgT3V0c2lkZSBhIGNoYXJhY3RlciBjbGFzcywgYSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBkaWdpdCBncmVhdGVyIHRoYW4KKyAgICAgICAwIChhbmQgcG9zc2libHkgZnVydGhlciBkaWdpdHMpIGlzIGEgYmFjayByZWZlcmVuY2UgdG8gYSBjYXB0dXJpbmcgc3ViLQorICAgICAgIHBhdHRlcm4gZWFybGllciAodGhhdCBpcywgdG8gaXRzIGxlZnQpIGluIHRoZSBwYXR0ZXJuLCAgcHJvdmlkZWQgIHRoZXJlCisgICAgICAgaGF2ZSBiZWVuIHRoYXQgbWFueSBwcmV2aW91cyBjYXB0dXJpbmcgbGVmdCBwYXJlbnRoZXNlcy4KKworICAgICAgIEhvd2V2ZXIsICBpZiB0aGUgZGVjaW1hbCBudW1iZXIgZm9sbG93aW5nIHRoZSBiYWNrc2xhc2ggaXMgbGVzcyB0aGFuIDgsCisgICAgICAgaXQgaXMgYWx3YXlzIHRha2VuIGFzIGEgYmFjayByZWZlcmVuY2UsIGFuZCBjYXVzZXMgIGFuICBlcnJvciAgb25seSAgaWYKKyAgICAgICB0aGVyZSAgYXJlICBub3QgdGhhdCBtYW55IGNhcHR1cmluZyBsZWZ0IHBhcmVudGhlc2VzIGluIHRoZSBlbnRpcmUgcGF0LQorICAgICAgIHRlcm4uIEluIG90aGVyIHdvcmRzLCB0aGUgcGFyZW50aGVzZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBuZWVkICBub3QgIGJlCisgICAgICAgdG8gIHRoZSAgbGVmdCBvZiB0aGUgcmVmZXJlbmNlIGZvciBudW1iZXJzIGxlc3MgdGhhbiA4LiBBICJmb3J3YXJkIGJhY2sKKyAgICAgICByZWZlcmVuY2UiIG9mIHRoaXMgdHlwZSBjYW4gbWFrZSBzZW5zZSB3aGVuIGEgIHJlcGV0aXRpb24gIGlzICBpbnZvbHZlZAorICAgICAgIGFuZCAgdGhlICBzdWJwYXR0ZXJuIHRvIHRoZSByaWdodCBoYXMgcGFydGljaXBhdGVkIGluIGFuIGVhcmxpZXIgaXRlcmEtCisgICAgICAgdGlvbi4KKworICAgICAgIEl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIGEgbnVtZXJpY2FsICJmb3J3YXJkIGJhY2sgIHJlZmVyZW5jZSIgIHRvICBhCisgICAgICAgc3VicGF0dGVybiAgd2hvc2UgIG51bWJlciAgaXMgIDggIG9yICBtb3JlICB1c2luZyB0aGlzIHN5bnRheCBiZWNhdXNlIGEKKyAgICAgICBzZXF1ZW5jZSBzdWNoIGFzIFw1MCBpcyBpbnRlcnByZXRlZCBhcyBhIGNoYXJhY3RlciAgZGVmaW5lZCAgaW4gIG9jdGFsLgorICAgICAgIFNlZSB0aGUgc3Vic2VjdGlvbiBlbnRpdGxlZCAiTm9uLXByaW50aW5nIGNoYXJhY3RlcnMiIGFib3ZlIGZvciBmdXJ0aGVyCisgICAgICAgZGV0YWlscyBvZiB0aGUgaGFuZGxpbmcgb2YgZGlnaXRzIGZvbGxvd2luZyBhIGJhY2tzbGFzaC4gIFRoZXJlICBpcyAgbm8KKyAgICAgICBzdWNoICBwcm9ibGVtICB3aGVuIG5hbWVkIHBhcmVudGhlc2VzIGFyZSB1c2VkLiBBIGJhY2sgcmVmZXJlbmNlIHRvIGFueQorICAgICAgIHN1YnBhdHRlcm4gaXMgcG9zc2libGUgdXNpbmcgbmFtZWQgcGFyZW50aGVzZXMgKHNlZSBiZWxvdykuCisKKyAgICAgICBBbm90aGVyIHdheSBvZiBhdm9pZGluZyB0aGUgYW1iaWd1aXR5IGluaGVyZW50IGluICB0aGUgIHVzZSAgb2YgIGRpZ2l0cworICAgICAgIGZvbGxvd2luZyAgYSAgYmFja3NsYXNoICBpcyAgdG8gdXNlIHRoZSBcZyBlc2NhcGUgc2VxdWVuY2UuIFRoaXMgZXNjYXBlCisgICAgICAgbXVzdCBiZSBmb2xsb3dlZCBieSBhbiB1bnNpZ25lZCBudW1iZXIgb3IgYSBuZWdhdGl2ZSBudW1iZXIsIG9wdGlvbmFsbHkKKyAgICAgICBlbmNsb3NlZCBpbiBicmFjZXMuIFRoZXNlIGV4YW1wbGVzIGFyZSBhbGwgaWRlbnRpY2FsOgorCisgICAgICAgICAocmluZyksIFwxCisgICAgICAgICAocmluZyksIFxnMQorICAgICAgICAgKHJpbmcpLCBcZ3sxfQorCisgICAgICAgQW4gIHVuc2lnbmVkIG51bWJlciBzcGVjaWZpZXMgYW4gYWJzb2x1dGUgcmVmZXJlbmNlIHdpdGhvdXQgdGhlIGFtYmlndS0KKyAgICAgICBpdHkgdGhhdCBpcyBwcmVzZW50IGluIHRoZSBvbGRlciBzeW50YXguIEl0IGlzIGFsc28gdXNlZnVsIHdoZW4gbGl0ZXJhbAorICAgICAgIGRpZ2l0cyBmb2xsb3cgdGhlIHJlZmVyZW5jZS4gQSBuZWdhdGl2ZSBudW1iZXIgaXMgYSByZWxhdGl2ZSByZWZlcmVuY2UuCisgICAgICAgQ29uc2lkZXIgdGhpcyBleGFtcGxlOgorCisgICAgICAgICAoYWJjKGRlZilnaGkpXGd7LTF9CisKKyAgICAgICBUaGUgc2VxdWVuY2UgXGd7LTF9IGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBtb3N0IHJlY2VudGx5IHN0YXJ0ZWQgY2FwdHVyLQorICAgICAgIGluZyBzdWJwYXR0ZXJuIGJlZm9yZSBcZywgdGhhdCBpcywgaXMgaXQgZXF1aXZhbGVudCB0byBcMiBpbiB0aGlzIGV4YW0tCisgICAgICAgcGxlLiAgU2ltaWxhcmx5LCBcZ3stMn0gd291bGQgYmUgZXF1aXZhbGVudCB0byBcMS4gVGhlIHVzZSBvZiAgcmVsYXRpdmUKKyAgICAgICByZWZlcmVuY2VzICBjYW4gIGJlIGhlbHBmdWwgaW4gbG9uZyBwYXR0ZXJucywgYW5kIGFsc28gaW4gcGF0dGVybnMgdGhhdAorICAgICAgIGFyZSBjcmVhdGVkIGJ5ICBqb2luaW5nICB0b2dldGhlciAgZnJhZ21lbnRzICB0aGF0ICBjb250YWluICByZWZlcmVuY2VzCisgICAgICAgd2l0aGluIHRoZW1zZWx2ZXMuCisKKyAgICAgICBBICBiYWNrICByZWZlcmVuY2UgbWF0Y2hlcyB3aGF0ZXZlciBhY3R1YWxseSBtYXRjaGVkIHRoZSBjYXB0dXJpbmcgc3ViLQorICAgICAgIHBhdHRlcm4gaW4gdGhlIGN1cnJlbnQgc3ViamVjdCBzdHJpbmcsIHJhdGhlciAgdGhhbiAgYW55dGhpbmcgIG1hdGNoaW5nCisgICAgICAgdGhlIHN1YnBhdHRlcm4gaXRzZWxmIChzZWUgIlN1YnBhdHRlcm5zIGFzIHN1YnJvdXRpbmVzIiBiZWxvdyBmb3IgYSB3YXkKKyAgICAgICBvZiBkb2luZyB0aGF0KS4gU28gdGhlIHBhdHRlcm4KKworICAgICAgICAgKHNlbnN8cmVzcG9ucyllIGFuZCBcMWliaWxpdHkKKworICAgICAgIG1hdGNoZXMgInNlbnNlIGFuZCBzZW5zaWJpbGl0eSIgYW5kICJyZXNwb25zZSBhbmQgcmVzcG9uc2liaWxpdHkiLCAgYnV0CisgICAgICAgbm90ICAic2Vuc2UgYW5kIHJlc3BvbnNpYmlsaXR5Ii4gSWYgY2FzZWZ1bCBtYXRjaGluZyBpcyBpbiBmb3JjZSBhdCB0aGUKKyAgICAgICB0aW1lIG9mIHRoZSBiYWNrIHJlZmVyZW5jZSwgdGhlIGNhc2Ugb2YgbGV0dGVycyBpcyByZWxldmFudC4gRm9yICBleGFtLQorICAgICAgIHBsZSwKKworICAgICAgICAgKCg/aSlyYWgpXHMrXDEKKworICAgICAgIG1hdGNoZXMgICJyYWggIHJhaCIgIGFuZCAgIlJBSCBSQUgiLCBidXQgbm90ICJSQUggcmFoIiwgZXZlbiB0aG91Z2ggdGhlCisgICAgICAgb3JpZ2luYWwgY2FwdHVyaW5nIHN1YnBhdHRlcm4gaXMgbWF0Y2hlZCBjYXNlbGVzc2x5LgorCisgICAgICAgVGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IHdheXMgb2Ygd3JpdGluZyBiYWNrICByZWZlcmVuY2VzICB0byAgbmFtZWQKKyAgICAgICBzdWJwYXR0ZXJucy4gIFRoZSAgLk5FVCBzeW50YXggXGt7bmFtZX0gYW5kIHRoZSBQZXJsIHN5bnRheCBcazxuYW1lPiBvcgorICAgICAgIFxrJ25hbWUnIGFyZSBzdXBwb3J0ZWQsIGFzIGlzIHRoZSBQeXRob24gc3ludGF4ICg/UD1uYW1lKS4gUGVybCAgNS4xMCdzCisgICAgICAgdW5pZmllZCBiYWNrIHJlZmVyZW5jZSBzeW50YXgsIGluIHdoaWNoIFxnIGNhbiBiZSB1c2VkIGZvciBib3RoIG51bWVyaWMKKyAgICAgICBhbmQgbmFtZWQgcmVmZXJlbmNlcywgaXMgYWxzbyBzdXBwb3J0ZWQuIFdlICBjb3VsZCAgcmV3cml0ZSAgdGhlICBhYm92ZQorICAgICAgIGV4YW1wbGUgaW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgd2F5czoKKworICAgICAgICAgKD88cDE+KD9pKXJhaClccytcazxwMT4KKyAgICAgICAgICg/J3AxJyg/aSlyYWgpXHMrXGt7cDF9CisgICAgICAgICAoP1A8cDE+KD9pKXJhaClccysoP1A9cDEpCisgICAgICAgICAoPzxwMT4oP2kpcmFoKVxzK1xne3AxfQorCisgICAgICAgQSAgc3VicGF0dGVybiAgdGhhdCAgaXMgIHJlZmVyZW5jZWQgIGJ5ICBuYW1lIG1heSBhcHBlYXIgaW4gdGhlIHBhdHRlcm4KKyAgICAgICBiZWZvcmUgb3IgYWZ0ZXIgdGhlIHJlZmVyZW5jZS4KKworICAgICAgIFRoZXJlIG1heSBiZSBtb3JlIHRoYW4gb25lIGJhY2sgcmVmZXJlbmNlIHRvIHRoZSBzYW1lIHN1YnBhdHRlcm4uIElmICBhCisgICAgICAgc3VicGF0dGVybiAgaGFzICBub3QgYWN0dWFsbHkgYmVlbiB1c2VkIGluIGEgcGFydGljdWxhciBtYXRjaCwgYW55IGJhY2sKKyAgICAgICByZWZlcmVuY2VzIHRvIGl0IGFsd2F5cyBmYWlsIGJ5IGRlZmF1bHQuIEZvciBleGFtcGxlLCB0aGUgcGF0dGVybgorCisgICAgICAgICAoYXwoYmMpKVwyCisKKyAgICAgICBhbHdheXMgZmFpbHMgaWYgaXQgc3RhcnRzIHRvIG1hdGNoICJhIiByYXRoZXIgdGhhbiAgImJjIi4gIEhvd2V2ZXIsICBpZgorICAgICAgIHRoZSAgUENSRTJfTUFUQ0hfVU5TRVRfQkFDS1JFRiAgb3B0aW9uICBpcyAgc2V0IGF0IGNvbXBpbGUgdGltZSwgYSBiYWNrCisgICAgICAgcmVmZXJlbmNlIHRvIGFuIHVuc2V0IHZhbHVlIG1hdGNoZXMgYW4gZW1wdHkgc3RyaW5nLgorCisgICAgICAgQmVjYXVzZSB0aGVyZSBtYXkgYmUgbWFueSBjYXB0dXJpbmcgcGFyZW50aGVzZXMgaW4gYSBwYXR0ZXJuLCBhbGwgIGRpZy0KKyAgICAgICBpdHMgIGZvbGxvd2luZyBhIGJhY2tzbGFzaCBhcmUgdGFrZW4gYXMgcGFydCBvZiBhIHBvdGVudGlhbCBiYWNrIHJlZmVyLQorICAgICAgIGVuY2UgbnVtYmVyLiAgSWYgdGhlIHBhdHRlcm4gY29udGludWVzIHdpdGggIGEgIGRpZ2l0ICBjaGFyYWN0ZXIsICBzb21lCisgICAgICAgZGVsaW1pdGVyICBtdXN0ICBiZSAgdXNlZCAgdG8gIHRlcm1pbmF0ZSAgdGhlICBiYWNrICByZWZlcmVuY2UuICBJZiB0aGUKKyAgICAgICBQQ1JFMl9FWFRFTkRFRCBvcHRpb24gaXMgc2V0LCB0aGlzIGNhbiBiZSB3aGl0ZSBzcGFjZS4gIE90aGVyd2lzZSwgIHRoZQorICAgICAgIFxneyBzeW50YXggb3IgYW4gZW1wdHkgY29tbWVudCAoc2VlICJDb21tZW50cyIgYmVsb3cpIGNhbiBiZSB1c2VkLgorCisgICBSZWN1cnNpdmUgYmFjayByZWZlcmVuY2VzCisKKyAgICAgICBBICBiYWNrIHJlZmVyZW5jZSB0aGF0IG9jY3VycyBpbnNpZGUgdGhlIHBhcmVudGhlc2VzIHRvIHdoaWNoIGl0IHJlZmVycworICAgICAgIGZhaWxzIHdoZW4gdGhlIHN1YnBhdHRlcm4gaXMgZmlyc3QgdXNlZCwgc28sIGZvciBleGFtcGxlLCAgKGFcMSkgIG5ldmVyCisgICAgICAgbWF0Y2hlcy4gICBIb3dldmVyLCAgc3VjaCByZWZlcmVuY2VzIGNhbiBiZSB1c2VmdWwgaW5zaWRlIHJlcGVhdGVkIHN1Yi0KKyAgICAgICBwYXR0ZXJucy4gRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuCisKKyAgICAgICAgIChhfGJcMSkrCisKKyAgICAgICBtYXRjaGVzIGFueSBudW1iZXIgb2YgImEicyBhbmQgYWxzbyAiYWJhIiwgImFiYWJiYWEiIGV0Yy4gQXQgZWFjaCBpdGVyLQorICAgICAgIGF0aW9uICBvZiAgdGhlICBzdWJwYXR0ZXJuLCAgdGhlICBiYWNrICByZWZlcmVuY2UgbWF0Y2hlcyB0aGUgY2hhcmFjdGVyCisgICAgICAgc3RyaW5nIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByZXZpb3VzIGl0ZXJhdGlvbi4gSW4gb3JkZXIgIGZvciAgdGhpcyAgdG8KKyAgICAgICB3b3JrLCAgdGhlICBwYXR0ZXJuIG11c3QgYmUgc3VjaCB0aGF0IHRoZSBmaXJzdCBpdGVyYXRpb24gZG9lcyBub3QgbmVlZAorICAgICAgIHRvIG1hdGNoIHRoZSBiYWNrIHJlZmVyZW5jZS4gVGhpcyBjYW4gYmUgZG9uZSB1c2luZyBhbHRlcm5hdGlvbiwgYXMgIGluCisgICAgICAgdGhlIGV4YW1wbGUgYWJvdmUsIG9yIGJ5IGEgcXVhbnRpZmllciB3aXRoIGEgbWluaW11bSBvZiB6ZXJvLgorCisgICAgICAgQmFjayAgcmVmZXJlbmNlcyBvZiB0aGlzIHR5cGUgY2F1c2UgdGhlIGdyb3VwIHRoYXQgdGhleSByZWZlcmVuY2UgdG8gYmUKKyAgICAgICB0cmVhdGVkIGFzIGFuIGF0b21pYyBncm91cC4gIE9uY2UgdGhlIHdob2xlIGdyb3VwIGhhcyBiZWVuICBtYXRjaGVkLCAgYQorICAgICAgIHN1YnNlcXVlbnQgIG1hdGNoaW5nICBmYWlsdXJlIGNhbm5vdCBjYXVzZSBiYWNrdHJhY2tpbmcgaW50byB0aGUgbWlkZGxlCisgICAgICAgb2YgdGhlIGdyb3VwLgorCisKK0FTU0VSVElPTlMKKworICAgICAgIEFuIGFzc2VydGlvbiBpcyBhIHRlc3Qgb24gdGhlIGNoYXJhY3RlcnMgIGZvbGxvd2luZyAgb3IgIHByZWNlZGluZyAgdGhlCisgICAgICAgY3VycmVudCBtYXRjaGluZyBwb2ludCB0aGF0IGRvZXMgbm90IGNvbnN1bWUgYW55IGNoYXJhY3RlcnMuIFRoZSBzaW1wbGUKKyAgICAgICBhc3NlcnRpb25zIGNvZGVkIGFzIFxiLCBcQiwgXEEsIFxHLCBcWiwgIFx6LCAgXiAgYW5kICAkICBhcmUgIGRlc2NyaWJlZAorICAgICAgIGFib3ZlLgorCisgICAgICAgTW9yZSAgY29tcGxpY2F0ZWQgIGFzc2VydGlvbnMgIGFyZSAgY29kZWQgYXMgc3VicGF0dGVybnMuIFRoZXJlIGFyZSB0d28KKyAgICAgICBraW5kczogdGhvc2UgdGhhdCBsb29rIGFoZWFkIG9mIHRoZSBjdXJyZW50ICBwb3NpdGlvbiAgaW4gIHRoZSAgc3ViamVjdAorICAgICAgIHN0cmluZywgIGFuZCAgdGhvc2UgIHRoYXQgIGxvb2sgIGJlaGluZCAgaXQuIEFuIGFzc2VydGlvbiBzdWJwYXR0ZXJuIGlzCisgICAgICAgbWF0Y2hlZCBpbiB0aGUgbm9ybWFsIHdheSwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgIGNhdXNlICB0aGUgIGN1cnJlbnQKKyAgICAgICBtYXRjaGluZyBwb3NpdGlvbiB0byBiZSBjaGFuZ2VkLgorCisgICAgICAgQXNzZXJ0aW9uICBzdWJwYXR0ZXJucyBhcmUgbm90IGNhcHR1cmluZyBzdWJwYXR0ZXJucy4gSWYgc3VjaCBhbiBhc3Nlci0KKyAgICAgICB0aW9uIGNvbnRhaW5zIGNhcHR1cmluZyBzdWJwYXR0ZXJucyB3aXRoaW4gaXQsIHRoZXNlICBhcmUgIGNvdW50ZWQgIGZvcgorICAgICAgIHRoZSAgcHVycG9zZXMgIG9mIG51bWJlcmluZyB0aGUgY2FwdHVyaW5nIHN1YnBhdHRlcm5zIGluIHRoZSB3aG9sZSBwYXQtCisgICAgICAgdGVybi4gSG93ZXZlciwgc3Vic3RyaW5nIGNhcHR1cmluZyBpcyBjYXJyaWVkICBvdXQgIG9ubHkgIGZvciAgcG9zaXRpdmUKKyAgICAgICBhc3NlcnRpb25zLiAoUGVybCBzb21ldGltZXMsIGJ1dCBub3QgYWx3YXlzLCBkb2VzIGRvIGNhcHR1cmluZyBpbiBuZWdhLQorICAgICAgIHRpdmUgYXNzZXJ0aW9ucy4pCisKKyAgICAgICBGb3IgIGNvbXBhdGliaWxpdHkgIHdpdGggIFBlcmwsICBtb3N0ICBhc3NlcnRpb24gIHN1YnBhdHRlcm5zICBtYXkgICBiZQorICAgICAgIHJlcGVhdGVkOyAgdGhvdWdoICBpdCAgbWFrZXMgIG5vIHNlbnNlIHRvIGFzc2VydCB0aGUgc2FtZSB0aGluZyBzZXZlcmFsCisgICAgICAgdGltZXMsIHRoZSBzaWRlIGVmZmVjdCBvZiBjYXB0dXJpbmcgIHBhcmVudGhlc2VzICBtYXkgIG9jY2FzaW9uYWxseSAgYmUKKyAgICAgICB1c2VmdWwuICBIb3dldmVyLCAgYW4gIGFzc2VydGlvbiAgdGhhdCBmb3JtcyB0aGUgY29uZGl0aW9uIGZvciBhIGNvbmRpLQorICAgICAgIHRpb25hbCBzdWJwYXR0ZXJuIG1heSBub3QgYmUgcXVhbnRpZmllZC4gSW4gcHJhY3RpY2UsIGZvciBvdGhlciAgYXNzZXItCisgICAgICAgdGlvbnMsIHRoZXJlIG9ubHkgdGhyZWUgY2FzZXM6CisKKyAgICAgICAoMSkgIElmICB0aGUgIHF1YW50aWZpZXIgIGlzICB7MH0sIHRoZSBhc3NlcnRpb24gaXMgbmV2ZXIgb2JleWVkIGR1cmluZworICAgICAgIG1hdGNoaW5nLiAgSG93ZXZlciwgaXQgbWF5ICBjb250YWluICBpbnRlcm5hbCAgY2FwdHVyaW5nICBwYXJlbnRoZXNpemVkCisgICAgICAgZ3JvdXBzIHRoYXQgYXJlIGNhbGxlZCBmcm9tIGVsc2V3aGVyZSB2aWEgdGhlIHN1YnJvdXRpbmUgbWVjaGFuaXNtLgorCisgICAgICAgKDIpICBJZiBxdWFudGlmaWVyIGlzIHswLG59IHdoZXJlIG4gaXMgZ3JlYXRlciB0aGFuIHplcm8sIGl0IGlzIHRyZWF0ZWQKKyAgICAgICBhcyBpZiBpdCB3ZXJlIHswLDF9LiBBdCBydW4gdGltZSwgdGhlIHJlc3QgIG9mICB0aGUgIHBhdHRlcm4gIG1hdGNoICBpcworICAgICAgIHRyaWVkIHdpdGggYW5kIHdpdGhvdXQgdGhlIGFzc2VydGlvbiwgdGhlIG9yZGVyIGRlcGVuZGluZyBvbiB0aGUgZ3JlZWQtCisgICAgICAgaW5lc3Mgb2YgdGhlIHF1YW50aWZpZXIuCisKKyAgICAgICAoMykgSWYgdGhlIG1pbmltdW0gcmVwZXRpdGlvbiBpcyBncmVhdGVyIHRoYW4gemVybywgdGhlICBxdWFudGlmaWVyICBpcworICAgICAgIGlnbm9yZWQuICAgVGhlICBhc3NlcnRpb24gIGlzICBvYmV5ZWQganVzdCBvbmNlIHdoZW4gZW5jb3VudGVyZWQgZHVyaW5nCisgICAgICAgbWF0Y2hpbmcuCisKKyAgIExvb2thaGVhZCBhc3NlcnRpb25zCisKKyAgICAgICBMb29rYWhlYWQgYXNzZXJ0aW9ucyBzdGFydCB3aXRoICg/PSBmb3IgcG9zaXRpdmUgYXNzZXJ0aW9ucyBhbmQgKD8hIGZvcgorICAgICAgIG5lZ2F0aXZlIGFzc2VydGlvbnMuIEZvciBleGFtcGxlLAorCisgICAgICAgICBcdysoPz07KQorCisgICAgICAgbWF0Y2hlcyAgYSB3b3JkIGZvbGxvd2VkIGJ5IGEgc2VtaWNvbG9uLCBidXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgc2VtaS0KKyAgICAgICBjb2xvbiBpbiB0aGUgbWF0Y2gsIGFuZAorCisgICAgICAgICBmb28oPyFiYXIpCisKKyAgICAgICBtYXRjaGVzIGFueSBvY2N1cnJlbmNlIG9mICJmb28iIHRoYXQgaXMgbm90ICBmb2xsb3dlZCAgYnkgICJiYXIiLiAgTm90ZQorICAgICAgIHRoYXQgdGhlIGFwcGFyZW50bHkgc2ltaWxhciBwYXR0ZXJuCisKKyAgICAgICAgICg/IWZvbyliYXIKKworICAgICAgIGRvZXMgIG5vdCAgZmluZCAgYW4gIG9jY3VycmVuY2UgIG9mICJiYXIiIHRoYXQgaXMgcHJlY2VkZWQgYnkgc29tZXRoaW5nCisgICAgICAgb3RoZXIgdGhhbiAiZm9vIjsgaXQgZmluZHMgYW55IG9jY3VycmVuY2Ugb2YgImJhciIgd2hhdHNvZXZlciwgIGJlY2F1c2UKKyAgICAgICB0aGUgYXNzZXJ0aW9uICg/IWZvbykgaXMgYWx3YXlzIHRydWUgd2hlbiB0aGUgbmV4dCB0aHJlZSBjaGFyYWN0ZXJzIGFyZQorICAgICAgICJiYXIiLiBBIGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIG5lZWRlZCB0byBhY2hpZXZlIHRoZSBvdGhlciBlZmZlY3QuCisKKyAgICAgICBJZiB5b3Ugd2FudCB0byBmb3JjZSBhIG1hdGNoaW5nIGZhaWx1cmUgYXQgc29tZSBwb2ludCBpbiBhIHBhdHRlcm4sIHRoZQorICAgICAgIG1vc3QgIGNvbnZlbmllbnQgIHdheSAgdG8gIGRvICBpdCAgaXMgd2l0aCAoPyEpIGJlY2F1c2UgYW4gZW1wdHkgc3RyaW5nCisgICAgICAgYWx3YXlzIG1hdGNoZXMsIHNvIGFuIGFzc2VydGlvbiB0aGF0IHJlcXVpcmVzIHRoZXJlIG5vdCB0byBiZSBhbiAgZW1wdHkKKyAgICAgICBzdHJpbmcgbXVzdCBhbHdheXMgZmFpbC4gIFRoZSBiYWNrdHJhY2tpbmcgY29udHJvbCB2ZXJiICgqRkFJTCkgb3IgKCpGKQorICAgICAgIGlzIGEgc3lub255bSBmb3IgKD8hKS4KKworICAgTG9va2JlaGluZCBhc3NlcnRpb25zCisKKyAgICAgICBMb29rYmVoaW5kIGFzc2VydGlvbnMgc3RhcnQgd2l0aCAoPzw9IGZvciBwb3NpdGl2ZSBhc3NlcnRpb25zIGFuZCAgKD88IQorICAgICAgIGZvciBuZWdhdGl2ZSBhc3NlcnRpb25zLiBGb3IgZXhhbXBsZSwKKworICAgICAgICAgKD88IWZvbyliYXIKKworICAgICAgIGRvZXMgIGZpbmQgIGFuICBvY2N1cnJlbmNlICBvZiAiYmFyIiB0aGF0IGlzIG5vdCBwcmVjZWRlZCBieSAiZm9vIi4gVGhlCisgICAgICAgY29udGVudHMgb2YgYSBsb29rYmVoaW5kIGFzc2VydGlvbiBhcmUgcmVzdHJpY3RlZCAgc3VjaCAgdGhhdCAgYWxsICB0aGUKKyAgICAgICBzdHJpbmdzIGl0IG1hdGNoZXMgbXVzdCBoYXZlIGEgZml4ZWQgbGVuZ3RoLiBIb3dldmVyLCBpZiB0aGVyZSBhcmUgc2V2LQorICAgICAgIGVyYWwgdG9wLWxldmVsIGFsdGVybmF0aXZlcywgdGhleSBkbyBub3QgYWxsICBoYXZlICB0byAgaGF2ZSAgdGhlICBzYW1lCisgICAgICAgZml4ZWQgbGVuZ3RoLiBUaHVzCisKKyAgICAgICAgICg/PD1idWxsb2NrfGRvbmtleSkKKworICAgICAgIGlzIHBlcm1pdHRlZCwgYnV0CisKKyAgICAgICAgICg/PCFkb2dzP3xjYXRzPykKKworICAgICAgIGNhdXNlcyAgYW4gIGVycm9yIGF0IGNvbXBpbGUgdGltZS4gQnJhbmNoZXMgdGhhdCBtYXRjaCBkaWZmZXJlbnQgbGVuZ3RoCisgICAgICAgc3RyaW5ncyBhcmUgcGVybWl0dGVkIG9ubHkgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIGxvb2tiZWhpbmQgIGFzc2VydGlvbi4KKyAgICAgICBUaGlzIGlzIGFuIGV4dGVuc2lvbiBjb21wYXJlZCB3aXRoIFBlcmwsIHdoaWNoIHJlcXVpcmVzIGFsbCBicmFuY2hlcyB0bworICAgICAgIG1hdGNoIHRoZSBzYW1lIGxlbmd0aCBvZiBzdHJpbmcuIEFuIGFzc2VydGlvbiBzdWNoIGFzCisKKyAgICAgICAgICg/PD1hYihjfGRlKSkKKworICAgICAgIGlzIG5vdCBwZXJtaXR0ZWQsIGJlY2F1c2UgaXRzIHNpbmdsZSB0b3AtbGV2ZWwgIGJyYW5jaCAgY2FuICBtYXRjaCAgdHdvCisgICAgICAgZGlmZmVyZW50ICBsZW5ndGhzLCAgYnV0ICBpdCBpcyBhY2NlcHRhYmxlIHRvIFBDUkUyIGlmIHJld3JpdHRlbiB0byB1c2UKKyAgICAgICB0d28gdG9wLWxldmVsIGJyYW5jaGVzOgorCisgICAgICAgICAoPzw9YWJjfGFiZGUpCisKKyAgICAgICBJbiBzb21lIGNhc2VzLCB0aGUgZXNjYXBlIHNlcXVlbmNlIFxLIChzZWUgYWJvdmUpIGNhbiBiZSAgdXNlZCAgaW5zdGVhZAorICAgICAgIG9mIGEgbG9va2JlaGluZCBhc3NlcnRpb24gdG8gZ2V0IHJvdW5kIHRoZSBmaXhlZC1sZW5ndGggcmVzdHJpY3Rpb24uCisKKyAgICAgICBUaGUgIGltcGxlbWVudGF0aW9uICBvZiBsb29rYmVoaW5kIGFzc2VydGlvbnMgaXMsIGZvciBlYWNoIGFsdGVybmF0aXZlLAorICAgICAgIHRvIHRlbXBvcmFyaWx5IG1vdmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gYmFjayBieSB0aGUgZml4ZWQgIGxlbmd0aCAgYW5kCisgICAgICAgdGhlbiB0cnkgdG8gbWF0Y2guIElmIHRoZXJlIGFyZSBpbnN1ZmZpY2llbnQgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1ci0KKyAgICAgICByZW50IHBvc2l0aW9uLCB0aGUgYXNzZXJ0aW9uIGZhaWxzLgorCisgICAgICAgSW4gYSBVVEYgbW9kZSwgUENSRTIgZG9lcyBub3QgYWxsb3cgdGhlIFxDIGVzY2FwZSAod2hpY2ggbWF0Y2hlcyBhIHNpbi0KKyAgICAgICBnbGUgIGNvZGUgIHVuaXQgZXZlbiBpbiBhIFVURiBtb2RlKSB0byBhcHBlYXIgaW4gbG9va2JlaGluZCBhc3NlcnRpb25zLAorICAgICAgIGJlY2F1c2UgaXQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBjYWxjdWxhdGUgdGhlIGxlbmd0aCBvZiAgdGhlICBsb29rYmUtCisgICAgICAgaGluZC4gIFRoZSBcWCBhbmQgXFIgZXNjYXBlcywgd2hpY2ggY2FuIG1hdGNoIGRpZmZlcmVudCBudW1iZXJzIG9mIGNvZGUKKyAgICAgICB1bml0cywgYXJlIGFsc28gbm90IHBlcm1pdHRlZC4KKworICAgICAgICJTdWJyb3V0aW5lIiBjYWxscyAoc2VlIGJlbG93KSBzdWNoIGFzICg/Mikgb3IgKD8mWCkgYXJlICBwZXJtaXR0ZWQgIGluCisgICAgICAgbG9va2JlaGluZHMsICBhcyAgbG9uZyBhcyB0aGUgc3VicGF0dGVybiBtYXRjaGVzIGEgZml4ZWQtbGVuZ3RoIHN0cmluZy4KKyAgICAgICBSZWN1cnNpb24sIGhvd2V2ZXIsIGlzIG5vdCBzdXBwb3J0ZWQuCisKKyAgICAgICBQb3NzZXNzaXZlIHF1YW50aWZpZXJzIGNhbiAgYmUgIHVzZWQgIGluICBjb25qdW5jdGlvbiAgd2l0aCAgbG9va2JlaGluZAorICAgICAgIGFzc2VydGlvbnMgdG8gc3BlY2lmeSBlZmZpY2llbnQgbWF0Y2hpbmcgb2YgZml4ZWQtbGVuZ3RoIHN0cmluZ3MgYXQgdGhlCisgICAgICAgZW5kIG9mIHN1YmplY3Qgc3RyaW5ncy4gQ29uc2lkZXIgYSBzaW1wbGUgcGF0dGVybiBzdWNoIGFzCisKKyAgICAgICAgIGFiY2QkCisKKyAgICAgICB3aGVuIGFwcGxpZWQgdG8gYSBsb25nIHN0cmluZyB0aGF0IGRvZXMgIG5vdCAgbWF0Y2guICBCZWNhdXNlICBtYXRjaGluZworICAgICAgIHByb2NlZWRzICBmcm9tICBsZWZ0IHRvIHJpZ2h0LCBQQ1JFMiB3aWxsIGxvb2sgZm9yIGVhY2ggImEiIGluIHRoZSBzdWItCisgICAgICAgamVjdCBhbmQgdGhlbiBzZWUgaWYgd2hhdCBmb2xsb3dzIG1hdGNoZXMgdGhlIHJlc3Qgb2YgdGhlICBwYXR0ZXJuLiAgSWYKKyAgICAgICB0aGUgcGF0dGVybiBpcyBzcGVjaWZpZWQgYXMKKworICAgICAgICAgXi4qYWJjZCQKKworICAgICAgIHRoZSAgaW5pdGlhbCAuKiBtYXRjaGVzIHRoZSBlbnRpcmUgc3RyaW5nIGF0IGZpcnN0LCBidXQgd2hlbiB0aGlzIGZhaWxzCisgICAgICAgKGJlY2F1c2UgdGhlcmUgaXMgbm8gZm9sbG93aW5nICJhIiksIGl0IGJhY2t0cmFja3MgdG8gbWF0Y2ggYWxsIGJ1dCB0aGUKKyAgICAgICBsYXN0ICBjaGFyYWN0ZXIsICB0aGVuIGFsbCBidXQgdGhlIGxhc3QgdHdvIGNoYXJhY3RlcnMsIGFuZCBzbyBvbi4gT25jZQorICAgICAgIGFnYWluIHRoZSBzZWFyY2ggZm9yICJhIiBjb3ZlcnMgdGhlIGVudGlyZSBzdHJpbmcsIGZyb20gcmlnaHQgdG8gIGxlZnQsCisgICAgICAgc28gd2UgYXJlIG5vIGJldHRlciBvZmYuIEhvd2V2ZXIsIGlmIHRoZSBwYXR0ZXJuIGlzIHdyaXR0ZW4gYXMKKworICAgICAgICAgXi4qKyg/PD1hYmNkKQorCisgICAgICAgdGhlcmUgY2FuIGJlIG5vIGJhY2t0cmFja2luZyBmb3IgdGhlIC4qKyBpdGVtIGJlY2F1c2Ugb2YgdGhlIHBvc3Nlc3NpdmUKKyAgICAgICBxdWFudGlmaWVyOyBpdCBjYW4gbWF0Y2ggb25seSB0aGUgZW50aXJlIHN0cmluZy4gVGhlIHN1YnNlcXVlbnQgbG9va2JlLQorICAgICAgIGhpbmQgIGFzc2VydGlvbiAgZG9lcyAgYSBzaW5nbGUgdGVzdCBvbiB0aGUgbGFzdCBmb3VyIGNoYXJhY3RlcnMuIElmIGl0CisgICAgICAgZmFpbHMsIHRoZSBtYXRjaCBmYWlscyBpbW1lZGlhdGVseS4gRm9yICBsb25nICBzdHJpbmdzLCAgdGhpcyAgYXBwcm9hY2gKKyAgICAgICBtYWtlcyBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgdG8gdGhlIHByb2Nlc3NpbmcgdGltZS4KKworICAgVXNpbmcgbXVsdGlwbGUgYXNzZXJ0aW9ucworCisgICAgICAgU2V2ZXJhbCBhc3NlcnRpb25zIChvZiBhbnkgc29ydCkgbWF5IG9jY3VyIGluIHN1Y2Nlc3Npb24uIEZvciBleGFtcGxlLAorCisgICAgICAgICAoPzw9XGR7M30pKD88ITk5OSlmb28KKworICAgICAgIG1hdGNoZXMgICJmb28iIHByZWNlZGVkIGJ5IHRocmVlIGRpZ2l0cyB0aGF0IGFyZSBub3QgIjk5OSIuIE5vdGljZSB0aGF0CisgICAgICAgZWFjaCBvZiB0aGUgYXNzZXJ0aW9ucyBpcyBhcHBsaWVkIGluZGVwZW5kZW50bHkgYXQgdGhlICBzYW1lICBwb2ludCAgaW4KKyAgICAgICB0aGUgIHN1YmplY3QgIHN0cmluZy4gIEZpcnN0ICB0aGVyZSAgaXMgYSBjaGVjayB0aGF0IHRoZSBwcmV2aW91cyB0aHJlZQorICAgICAgIGNoYXJhY3RlcnMgYXJlIGFsbCBkaWdpdHMsIGFuZCB0aGVuIHRoZXJlIGlzICBhICBjaGVjayAgdGhhdCAgdGhlICBzYW1lCisgICAgICAgdGhyZWUgY2hhcmFjdGVycyBhcmUgbm90ICI5OTkiLiAgVGhpcyBwYXR0ZXJuIGRvZXMgbm90IG1hdGNoICJmb28iIHByZS0KKyAgICAgICBjZWRlZCBieSBzaXggY2hhcmFjdGVycywgdGhlIGZpcnN0IG9mIHdoaWNoIGFyZSAgZGlnaXRzICBhbmQgIHRoZSAgbGFzdAorICAgICAgIHRocmVlICBvZiAgd2hpY2ggIGFyZSBub3QgIjk5OSIuIEZvciBleGFtcGxlLCBpdCBkb2Vzbid0IG1hdGNoICIxMjNhYmMtCisgICAgICAgZm9vIi4gQSBwYXR0ZXJuIHRvIGRvIHRoYXQgaXMKKworICAgICAgICAgKD88PVxkezN9Li4uKSg/PCE5OTkpZm9vCisKKyAgICAgICBUaGlzIHRpbWUgdGhlIGZpcnN0IGFzc2VydGlvbiBsb29rcyBhdCB0aGUgIHByZWNlZGluZyAgc2l4ICBjaGFyYWN0ZXJzLAorICAgICAgIGNoZWNraW5nIHRoYXQgdGhlIGZpcnN0IHRocmVlIGFyZSBkaWdpdHMsIGFuZCB0aGVuIHRoZSBzZWNvbmQgYXNzZXJ0aW9uCisgICAgICAgY2hlY2tzIHRoYXQgdGhlIHByZWNlZGluZyB0aHJlZSBjaGFyYWN0ZXJzIGFyZSBub3QgIjk5OSIuCisKKyAgICAgICBBc3NlcnRpb25zIGNhbiBiZSBuZXN0ZWQgaW4gYW55IGNvbWJpbmF0aW9uLiBGb3IgZXhhbXBsZSwKKworICAgICAgICAgKD88PSg/PCFmb28pYmFyKWJhegorCisgICAgICAgbWF0Y2hlcyBhbiBvY2N1cnJlbmNlIG9mICJiYXoiIHRoYXQgaXMgcHJlY2VkZWQgYnkgImJhciIgd2hpY2ggaW4gIHR1cm4KKyAgICAgICBpcyBub3QgcHJlY2VkZWQgYnkgImZvbyIsIHdoaWxlCisKKyAgICAgICAgICg/PD1cZHszfSg/ITk5OSkuLi4pZm9vCisKKyAgICAgICBpcyAgYW5vdGhlciBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyAiZm9vIiBwcmVjZWRlZCBieSB0aHJlZSBkaWdpdHMgYW5kIGFueQorICAgICAgIHRocmVlIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90ICI5OTkiLgorCisKK0NPTkRJVElPTkFMIFNVQlBBVFRFUk5TCisKKyAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBjYXVzZSB0aGUgbWF0Y2hpbmcgcHJvY2VzcyB0byBvYmV5IGEgc3VicGF0dGVybiAgY29uLQorICAgICAgIGRpdGlvbmFsbHkgIG9yIHRvIGNob29zZSBiZXR3ZWVuIHR3byBhbHRlcm5hdGl2ZSBzdWJwYXR0ZXJucywgZGVwZW5kaW5nCisgICAgICAgb24gdGhlIHJlc3VsdCBvZiBhbiBhc3NlcnRpb24sIG9yIHdoZXRoZXIgYSBzcGVjaWZpYyBjYXB0dXJpbmcgIHN1YnBhdC0KKyAgICAgICB0ZXJuICBoYXMgIGFscmVhZHkgIGJlZW4gbWF0Y2hlZC4gVGhlIHR3byBwb3NzaWJsZSBmb3JtcyBvZiBjb25kaXRpb25hbAorICAgICAgIHN1YnBhdHRlcm4gYXJlOgorCisgICAgICAgICAoPyhjb25kaXRpb24peWVzLXBhdHRlcm4pCisgICAgICAgICAoPyhjb25kaXRpb24peWVzLXBhdHRlcm58bm8tcGF0dGVybikKKworICAgICAgIElmIHRoZSBjb25kaXRpb24gaXMgc2F0aXNmaWVkLCB0aGUgeWVzLXBhdHRlcm4gaXMgdXNlZDsgIG90aGVyd2lzZSAgdGhlCisgICAgICAgbm8tcGF0dGVybiAgKGlmICBwcmVzZW50KSAgaXMgdXNlZC4gSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiB0d28gYWx0ZXJuYS0KKyAgICAgICB0aXZlcyBpbiB0aGUgc3VicGF0dGVybiwgYSBjb21waWxlLXRpbWUgZXJyb3Igb2NjdXJzLiBFYWNoIG9mICB0aGUgIHR3bworICAgICAgIGFsdGVybmF0aXZlcyBtYXkgaXRzZWxmIGNvbnRhaW4gbmVzdGVkIHN1YnBhdHRlcm5zIG9mIGFueSBmb3JtLCBpbmNsdWQtCisgICAgICAgaW5nICBjb25kaXRpb25hbCAgc3VicGF0dGVybnM7ICB0aGUgIHJlc3RyaWN0aW9uICB0byAgdHdvICBhbHRlcm5hdGl2ZXMKKyAgICAgICBhcHBsaWVzIG9ubHkgYXQgdGhlIGxldmVsIG9mIHRoZSBjb25kaXRpb24uIFRoaXMgcGF0dGVybiBmcmFnbWVudCBpcyBhbgorICAgICAgIGV4YW1wbGUgd2hlcmUgdGhlIGFsdGVybmF0aXZlcyBhcmUgY29tcGxleDoKKworICAgICAgICAgKD8oMSkgKEF8QnxDKSB8IChEIHwgKD8oMilFfEYpIHwgRSkgKQorCisKKyAgICAgICBUaGVyZSBhcmUgZml2ZSBraW5kcyBvZiBjb25kaXRpb246IHJlZmVyZW5jZXMgIHRvICBzdWJwYXR0ZXJucywgIHJlZmVyLQorICAgICAgIGVuY2VzICB0byAgcmVjdXJzaW9uLCAgdHdvIHBzZXVkby1jb25kaXRpb25zIGNhbGxlZCBERUZJTkUgYW5kIFZFUlNJT04sCisgICAgICAgYW5kIGFzc2VydGlvbnMuCisKKyAgIENoZWNraW5nIGZvciBhIHVzZWQgc3VicGF0dGVybiBieSBudW1iZXIKKworICAgICAgIElmIHRoZSB0ZXh0IGJldHdlZW4gdGhlIHBhcmVudGhlc2VzIGNvbnNpc3RzIG9mIGEgc2VxdWVuY2UgIG9mICBkaWdpdHMsCisgICAgICAgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIGlmIGEgY2FwdHVyaW5nIHN1YnBhdHRlcm4gb2YgdGhhdCBudW1iZXIgaGFzIHByZS0KKyAgICAgICB2aW91c2x5IG1hdGNoZWQuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgIGNhcHR1cmluZyAgc3VicGF0dGVybiAgd2l0aAorICAgICAgIHRoZSAgc2FtZSAgbnVtYmVyICAoc2VlICB0aGUgZWFybGllciBzZWN0aW9uIGFib3V0IGR1cGxpY2F0ZSBzdWJwYXR0ZXJuCisgICAgICAgbnVtYmVycyksIHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBpZiBhbnkgb2YgdGhlbSBoYXZlIG1hdGNoZWQuIEFuICBhbHRlci0KKyAgICAgICBuYXRpdmUgIG5vdGF0aW9uIGlzIHRvIHByZWNlZGUgdGhlIGRpZ2l0cyB3aXRoIGEgcGx1cyBvciBtaW51cyBzaWduLiBJbgorICAgICAgIHRoaXMgY2FzZSwgdGhlIHN1YnBhdHRlcm4gbnVtYmVyIGlzIHJlbGF0aXZlIHJhdGhlciB0aGFuIGFic29sdXRlLiAgVGhlCisgICAgICAgbW9zdCAgcmVjZW50bHkgb3BlbmVkIHBhcmVudGhlc2VzIGNhbiBiZSByZWZlcmVuY2VkIGJ5ICg/KC0xKSwgdGhlIG5leHQKKyAgICAgICBtb3N0IHJlY2VudCBieSAoPygtMiksIGFuZCBzbyBvbi4gSW5zaWRlIGxvb3BzIGl0IGNhbiBhbHNvICBtYWtlICBzZW5zZQorICAgICAgIHRvIHJlZmVyIHRvIHN1YnNlcXVlbnQgZ3JvdXBzLiBUaGUgbmV4dCBwYXJlbnRoZXNlcyB0byBiZSBvcGVuZWQgY2FuIGJlCisgICAgICAgcmVmZXJlbmNlZCBhcyAoPygrMSksIGFuZCBzbyBvbi4gKFRoZSB2YWx1ZSB6ZXJvIGluIGFueSBvZiB0aGVzZSAgZm9ybXMKKyAgICAgICBpcyBub3QgdXNlZDsgaXQgcHJvdm9rZXMgYSBjb21waWxlLXRpbWUgZXJyb3IuKQorCisgICAgICAgQ29uc2lkZXIgIHRoZSAgZm9sbG93aW5nICBwYXR0ZXJuLCB3aGljaCBjb250YWlucyBub24tc2lnbmlmaWNhbnQgd2hpdGUKKyAgICAgICBzcGFjZSB0byBtYWtlIGl0IG1vcmUgcmVhZGFibGUgKGFzc3VtZSB0aGUgUENSRTJfRVhURU5ERUQgIG9wdGlvbikgIGFuZAorICAgICAgIHRvIGRpdmlkZSBpdCBpbnRvIHRocmVlIHBhcnRzIGZvciBlYXNlIG9mIGRpc2N1c3Npb246CisKKyAgICAgICAgICggXCggKT8gICAgW14oKV0rICAgICg/KDEpIFwpICkKKworICAgICAgIFRoZSAgZmlyc3QgIHBhcnQgIG1hdGNoZXMgIGFuIG9wdGlvbmFsIG9wZW5pbmcgcGFyZW50aGVzaXMsIGFuZCBpZiB0aGF0CisgICAgICAgY2hhcmFjdGVyIGlzIHByZXNlbnQsIHNldHMgaXQgYXMgdGhlIGZpcnN0IGNhcHR1cmVkIHN1YnN0cmluZy4gVGhlIHNlYy0KKyAgICAgICBvbmQgIHBhcnQgIG1hdGNoZXMgb25lIG9yIG1vcmUgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgcGFyZW50aGVzZXMuIFRoZQorICAgICAgIHRoaXJkIHBhcnQgaXMgYSBjb25kaXRpb25hbCBzdWJwYXR0ZXJuIHRoYXQgdGVzdHMgd2hldGhlciAgb3IgIG5vdCAgdGhlCisgICAgICAgZmlyc3QgIHNldCAgb2YgIHBhcmVudGhlc2VzICBtYXRjaGVkLiAgSWYgdGhleSBkaWQsIHRoYXQgaXMsIGlmIHN1YmplY3QKKyAgICAgICBzdGFydGVkIHdpdGggYW4gb3BlbmluZyBwYXJlbnRoZXNpcywgdGhlIGNvbmRpdGlvbiBpcyB0cnVlLCBhbmQgc28gIHRoZQorICAgICAgIHllcy1wYXR0ZXJuICBpcyAgZXhlY3V0ZWQgYW5kIGEgY2xvc2luZyBwYXJlbnRoZXNpcyBpcyByZXF1aXJlZC4gT3RoZXItCisgICAgICAgd2lzZSwgc2luY2Ugbm8tcGF0dGVybiBpcyBub3QgcHJlc2VudCwgdGhlIHN1YnBhdHRlcm4gbWF0Y2hlcyAgbm90aGluZy4KKyAgICAgICBJbiAgb3RoZXIgIHdvcmRzLCAgdGhpcyAgcGF0dGVybiBtYXRjaGVzIGEgc2VxdWVuY2Ugb2Ygbm9uLXBhcmVudGhlc2VzLAorICAgICAgIG9wdGlvbmFsbHkgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMuCisKKyAgICAgICBJZiB5b3Ugd2VyZSBlbWJlZGRpbmcgdGhpcyBwYXR0ZXJuIGluIGEgbGFyZ2VyIG9uZSwgIHlvdSAgY291bGQgIHVzZSAgYQorICAgICAgIHJlbGF0aXZlIHJlZmVyZW5jZToKKworICAgICAgICAgLi4ub3RoZXIgc3R1ZmYuLi4gKCBcKCApPyAgICBbXigpXSsgICAgKD8oLTEpIFwpICkgLi4uCisKKyAgICAgICBUaGlzICBtYWtlcyAgdGhlICBmcmFnbWVudCBpbmRlcGVuZGVudCBvZiB0aGUgcGFyZW50aGVzZXMgaW4gdGhlIGxhcmdlcgorICAgICAgIHBhdHRlcm4uCisKKyAgIENoZWNraW5nIGZvciBhIHVzZWQgc3VicGF0dGVybiBieSBuYW1lCisKKyAgICAgICBQZXJsIHVzZXMgdGhlIHN5bnRheCAoPyg8bmFtZT4pLi4uKSBvciAoPygnbmFtZScpLi4uKSAgdG8gIHRlc3QgIGZvciAgYQorICAgICAgIHVzZWQgIHN1YnBhdHRlcm4gIGJ5ICBuYW1lLiAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mCisgICAgICAgUENSRTEsIHdoaWNoIGhhZCB0aGlzIGZhY2lsaXR5IGJlZm9yZSBQZXJsLCB0aGUgc3ludGF4ICg/KG5hbWUpLi4uKSAgaXMKKyAgICAgICBhbHNvIHJlY29nbml6ZWQuCisKKyAgICAgICBSZXdyaXRpbmcgdGhlIGFib3ZlIGV4YW1wbGUgdG8gdXNlIGEgbmFtZWQgc3VicGF0dGVybiBnaXZlcyB0aGlzOgorCisgICAgICAgICAoPzxPUEVOPiBcKCApPyAgICBbXigpXSsgICAgKD8oPE9QRU4+KSBcKSApCisKKyAgICAgICBJZiAgdGhlICBuYW1lIHVzZWQgaW4gYSBjb25kaXRpb24gb2YgdGhpcyBraW5kIGlzIGEgZHVwbGljYXRlLCB0aGUgdGVzdAorICAgICAgIGlzIGFwcGxpZWQgdG8gYWxsIHN1YnBhdHRlcm5zIG9mIHRoZSBzYW1lIG5hbWUsIGFuZCBpcyB0cnVlIGlmIGFueSAgb25lCisgICAgICAgb2YgdGhlbSBoYXMgbWF0Y2hlZC4KKworICAgQ2hlY2tpbmcgZm9yIHBhdHRlcm4gcmVjdXJzaW9uCisKKyAgICAgICBJZiB0aGUgY29uZGl0aW9uIGlzIHRoZSBzdHJpbmcgKFIpLCBhbmQgdGhlcmUgaXMgbm8gc3VicGF0dGVybiB3aXRoIHRoZQorICAgICAgIG5hbWUgUiwgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIGlmIGEgcmVjdXJzaXZlIGNhbGwgdG8gdGhlIHdob2xlICBwYXR0ZXJuCisgICAgICAgb3IgYW55IHN1YnBhdHRlcm4gaGFzIGJlZW4gbWFkZS4gSWYgZGlnaXRzIG9yIGEgbmFtZSBwcmVjZWRlZCBieSBhbXBlci0KKyAgICAgICBzYW5kIGZvbGxvdyB0aGUgbGV0dGVyIFIsIGZvciBleGFtcGxlOgorCisgICAgICAgICAoPyhSMykuLi4pIG9yICg/KFImbmFtZSkuLi4pCisKKyAgICAgICB0aGUgY29uZGl0aW9uIGlzIHRydWUgaWYgdGhlIG1vc3QgcmVjZW50IHJlY3Vyc2lvbiBpcyBpbnRvIGEgc3VicGF0dGVybgorICAgICAgIHdob3NlIG51bWJlciBvciBuYW1lIGlzIGdpdmVuLiBUaGlzIGNvbmRpdGlvbiBkb2VzIG5vdCBjaGVjayB0aGUgZW50aXJlCisgICAgICAgcmVjdXJzaW9uIHN0YWNrLiBJZiB0aGUgbmFtZSB1c2VkIGluIGEgY29uZGl0aW9uICBvZiAgdGhpcyAga2luZCAgaXMgIGEKKyAgICAgICBkdXBsaWNhdGUsIHRoZSB0ZXN0IGlzIGFwcGxpZWQgdG8gYWxsIHN1YnBhdHRlcm5zIG9mIHRoZSBzYW1lIG5hbWUsIGFuZAorICAgICAgIGlzIHRydWUgaWYgYW55IG9uZSBvZiB0aGVtIGlzIHRoZSBtb3N0IHJlY2VudCByZWN1cnNpb24uCisKKyAgICAgICBBdCAidG9wIGxldmVsIiwgYWxsIHRoZXNlIHJlY3Vyc2lvbiB0ZXN0ICBjb25kaXRpb25zICBhcmUgIGZhbHNlLiAgIFRoZQorICAgICAgIHN5bnRheCBmb3IgcmVjdXJzaXZlIHBhdHRlcm5zIGlzIGRlc2NyaWJlZCBiZWxvdy4KKworICAgRGVmaW5pbmcgc3VicGF0dGVybnMgZm9yIHVzZSBieSByZWZlcmVuY2Ugb25seQorCisgICAgICAgSWYgIHRoZSAgY29uZGl0aW9uICBpcyAgdGhlIHN0cmluZyAoREVGSU5FKSwgYW5kIHRoZXJlIGlzIG5vIHN1YnBhdHRlcm4KKyAgICAgICB3aXRoIHRoZSBuYW1lIERFRklORSwgdGhlIGNvbmRpdGlvbiBpcyAgYWx3YXlzICBmYWxzZS4gIEluICB0aGlzICBjYXNlLAorICAgICAgIHRoZXJlICBtYXkgIGJlICBvbmx5ICBvbmUgIGFsdGVybmF0aXZlICBpbiB0aGUgc3VicGF0dGVybi4gSXQgaXMgYWx3YXlzCisgICAgICAgc2tpcHBlZCBpZiBjb250cm9sIHJlYWNoZXMgdGhpcyBwb2ludCAgaW4gIHRoZSAgcGF0dGVybjsgIHRoZSAgaWRlYSAgb2YKKyAgICAgICBERUZJTkUgIGlzIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHN1YnJvdXRpbmVzIHRoYXQgY2FuIGJlIHJlZmVyLQorICAgICAgIGVuY2VkIGZyb20gZWxzZXdoZXJlLiAoVGhlIHVzZSBvZiBzdWJyb3V0aW5lcyBpcyBkZXNjcmliZWQgYmVsb3cuKSAgRm9yCisgICAgICAgZXhhbXBsZSwgIGEgIHBhdHRlcm4gIHRvIG1hdGNoIGFuIElQdjQgYWRkcmVzcyBzdWNoIGFzICIxOTIuMTY4LjIzLjI0NSIKKyAgICAgICBjb3VsZCBiZSB3cml0dGVuIGxpa2UgdGhpcyAoaWdub3JlIHdoaXRlIHNwYWNlIGFuZCBsaW5lIGJyZWFrcyk6CisKKyAgICAgICAgICg/KERFRklORSkgKD88Ynl0ZT4gMlswLTRdXGQgfCAyNVswLTVdIHwgMVxkXGQgfCBbMS05XT9cZCkgKQorICAgICAgICAgXGIgKD8mYnl0ZSkgKFwuKD8mYnl0ZSkpezN9IFxiCisKKyAgICAgICBUaGUgZmlyc3QgcGFydCBvZiB0aGUgcGF0dGVybiBpcyBhIERFRklORSBncm91cCBpbnNpZGUgd2hpY2ggYSAgYW5vdGhlcgorICAgICAgIGdyb3VwICBuYW1lZCAiYnl0ZSIgaXMgZGVmaW5lZC4gVGhpcyBtYXRjaGVzIGFuIGluZGl2aWR1YWwgY29tcG9uZW50IG9mCisgICAgICAgYW4gSVB2NCBhZGRyZXNzIChhIG51bWJlciBsZXNzIHRoYW4gMjU2KS4gV2hlbiAgbWF0Y2hpbmcgIHRha2VzICBwbGFjZSwKKyAgICAgICB0aGlzICBwYXJ0ICBvZiAgdGhlIHBhdHRlcm4gaXMgc2tpcHBlZCBiZWNhdXNlIERFRklORSBhY3RzIGxpa2UgYSBmYWxzZQorICAgICAgIGNvbmRpdGlvbi4gVGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gdXNlcyByZWZlcmVuY2VzIHRvIHRoZSAgbmFtZWQgIGdyb3VwCisgICAgICAgdG8gIG1hdGNoIHRoZSBmb3VyIGRvdC1zZXBhcmF0ZWQgY29tcG9uZW50cyBvZiBhbiBJUHY0IGFkZHJlc3MsIGluc2lzdC0KKyAgICAgICBpbmcgb24gYSB3b3JkIGJvdW5kYXJ5IGF0IGVhY2ggZW5kLgorCisgICBDaGVja2luZyB0aGUgUENSRTIgdmVyc2lvbgorCisgICAgICAgUHJvZ3JhbXMgdGhhdCBsaW5rIHdpdGggYSBQQ1JFMiBsaWJyYXJ5IGNhbiBjaGVjayB0aGUgdmVyc2lvbiBieSAgY2FsbC0KKyAgICAgICBpbmcgIHBjcmUyX2NvbmZpZygpICB3aXRoICBhcHByb3ByaWF0ZSBhcmd1bWVudHMuIFVzZXJzIG9mIGFwcGxpY2F0aW9ucworICAgICAgIHRoYXQgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIGNvZGUgY2Fubm90IGRvIHRoaXMuICBBICBzcGUtCisgICAgICAgY2lhbCAgImNvbmRpdGlvbiIgY2FsbGVkIFZFUlNJT04gZXhpc3RzIHRvIGFsbG93IHN1Y2ggdXNlcnMgdG8gZGlzY292ZXIKKyAgICAgICB3aGljaCB2ZXJzaW9uIG9mIFBDUkUyIHRoZXkgYXJlIGRlYWxpbmcgd2l0aCBieSB1c2luZyB0aGlzIGNvbmRpdGlvbiB0bworICAgICAgIG1hdGNoICBhIHN0cmluZyBzdWNoIGFzICJ5ZXNubyIuIFZFUlNJT04gbXVzdCBiZSBmb2xsb3dlZCBlaXRoZXIgYnkgIj0iCisgICAgICAgb3IgIj49IiBhbmQgYSB2ZXJzaW9uIG51bWJlci4gIEZvciBleGFtcGxlOgorCisgICAgICAgICAoPyhWRVJTSU9OPj0xMC40KXllc3xubykKKworICAgICAgIFRoaXMgcGF0dGVybiBtYXRjaGVzICJ5ZXMiIGlmIHRoZSBQQ1JFMiB2ZXJzaW9uIGlzIGdyZWF0ZXIgb3IgZXF1YWwgIHRvCisgICAgICAgMTAuNCwgIG9yICJubyIgb3RoZXJ3aXNlLiBUaGUgZnJhY3Rpb25hbCBwYXJ0IG9mIHRoZSB2ZXJzaW9uIG51bWJlciBtYXkKKyAgICAgICBub3QgY29udGFpbiBtb3JlIHRoYW4gdHdvIGRpZ2l0cy4KKworICAgQXNzZXJ0aW9uIGNvbmRpdGlvbnMKKworICAgICAgIElmIHRoZSBjb25kaXRpb24gaXMgbm90IGluIGFueSBvZiB0aGUgYWJvdmUgIGZvcm1hdHMsICBpdCAgbXVzdCAgYmUgIGFuCisgICAgICAgYXNzZXJ0aW9uLiAgIFRoaXMgbWF5IGJlIGEgcG9zaXRpdmUgb3IgbmVnYXRpdmUgbG9va2FoZWFkIG9yIGxvb2tiZWhpbmQKKyAgICAgICBhc3NlcnRpb24uIENvbnNpZGVyICB0aGlzICBwYXR0ZXJuLCAgYWdhaW4gIGNvbnRhaW5pbmcgIG5vbi1zaWduaWZpY2FudAorICAgICAgIHdoaXRlIHNwYWNlLCBhbmQgd2l0aCB0aGUgdHdvIGFsdGVybmF0aXZlcyBvbiB0aGUgc2Vjb25kIGxpbmU6CisKKyAgICAgICAgICg/KD89W15hLXpdKlthLXpdKQorICAgICAgICAgXGR7Mn0tW2Etel17M30tXGR7Mn0gIHwgIFxkezJ9LVxkezJ9LVxkezJ9ICkKKworICAgICAgIFRoZSAgY29uZGl0aW9uICBpcyAgYSAgcG9zaXRpdmUgIGxvb2thaGVhZCAgYXNzZXJ0aW9uICB0aGF0ICBtYXRjaGVzIGFuCisgICAgICAgb3B0aW9uYWwgc2VxdWVuY2Ugb2Ygbm9uLWxldHRlcnMgZm9sbG93ZWQgYnkgYSBsZXR0ZXIuIEluIG90aGVyICB3b3JkcywKKyAgICAgICBpdCAgdGVzdHMgIGZvciB0aGUgcHJlc2VuY2Ugb2YgYXQgbGVhc3Qgb25lIGxldHRlciBpbiB0aGUgc3ViamVjdC4gSWYgYQorICAgICAgIGxldHRlciBpcyBmb3VuZCwgdGhlIHN1YmplY3QgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBmaXJzdCAgYWx0ZXJuYXRpdmU7CisgICAgICAgb3RoZXJ3aXNlICBpdCAgaXMgIG1hdGNoZWQgIGFnYWluc3QgIHRoZSAgc2Vjb25kLiAgVGhpcyBwYXR0ZXJuIG1hdGNoZXMKKyAgICAgICBzdHJpbmdzIGluIG9uZSBvZiB0aGUgdHdvIGZvcm1zIGRkLWFhYS1kZCBvciBkZC1kZC1kZCwgIHdoZXJlICBhYWEgIGFyZQorICAgICAgIGxldHRlcnMgYW5kIGRkIGFyZSBkaWdpdHMuCisKKworQ09NTUVOVFMKKworICAgICAgIFRoZXJlIGFyZSB0d28gd2F5cyBvZiBpbmNsdWRpbmcgY29tbWVudHMgaW4gcGF0dGVybnMgdGhhdCBhcmUgcHJvY2Vzc2VkCisgICAgICAgYnkgUENSRTIuIEluIGJvdGggY2FzZXMsIHRoZSBzdGFydCBvZiB0aGUgY29tbWVudCAgbXVzdCAgbm90ICBiZSAgaW4gIGEKKyAgICAgICBjaGFyYWN0ZXIgIGNsYXNzLCAgbm9yICBpbiAgdGhlIG1pZGRsZSBvZiBhbnkgb3RoZXIgc2VxdWVuY2Ugb2YgcmVsYXRlZAorICAgICAgIGNoYXJhY3RlcnMgc3VjaCBhcyAoPzogb3IgYSBzdWJwYXR0ZXJuIG5hbWUgb3IgbnVtYmVyLiAgVGhlICBjaGFyYWN0ZXJzCisgICAgICAgdGhhdCBtYWtlIHVwIGEgY29tbWVudCBwbGF5IG5vIHBhcnQgaW4gdGhlIHBhdHRlcm4gbWF0Y2hpbmcuCisKKyAgICAgICBUaGUgIHNlcXVlbmNlICg/IyBtYXJrcyB0aGUgc3RhcnQgb2YgYSBjb21tZW50IHRoYXQgY29udGludWVzIHVwIHRvIHRoZQorICAgICAgIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpcy4gTmVzdGVkIHBhcmVudGhlc2VzIGFyZSBub3QgcGVybWl0dGVkLiBJZiAgdGhlCisgICAgICAgUENSRTJfRVhURU5ERUQgIG9wdGlvbiBpcyBzZXQsIGFuIHVuZXNjYXBlZCAjIGNoYXJhY3RlciBhbHNvIGludHJvZHVjZXMKKyAgICAgICBhIGNvbW1lbnQsIHdoaWNoIGluIHRoaXMgY2FzZSBjb250aW51ZXMgdG8gaW1tZWRpYXRlbHkgYWZ0ZXIgIHRoZSAgbmV4dAorICAgICAgIG5ld2xpbmUgIGNoYXJhY3RlciAgb3IgY2hhcmFjdGVyIHNlcXVlbmNlIGluIHRoZSBwYXR0ZXJuLiBXaGljaCBjaGFyYWMtCisgICAgICAgdGVycyBhcmUgaW50ZXJwcmV0ZWQgYXMgbmV3bGluZXMgaXMgY29udHJvbGxlZCBieSBhbiBvcHRpb24gIHBhc3NlZCAgdG8KKyAgICAgICB0aGUgIGNvbXBpbGluZyAgZnVuY3Rpb24gIG9yICBieSBhIHNwZWNpYWwgc2VxdWVuY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZQorICAgICAgIHBhdHRlcm4sIGFzIGRlc2NyaWJlZCBpbiB0aGUgIHNlY3Rpb24gIGVudGl0bGVkICAiTmV3bGluZSAgY29udmVudGlvbnMiCisgICAgICAgYWJvdmUuICBOb3RlICB0aGF0IHRoZSBlbmQgb2YgdGhpcyB0eXBlIG9mIGNvbW1lbnQgaXMgYSBsaXRlcmFsIG5ld2xpbmUKKyAgICAgICBzZXF1ZW5jZSBpbiB0aGUgcGF0dGVybjsgZXNjYXBlIHNlcXVlbmNlcyB0aGF0IGhhcHBlbiAgdG8gIHJlcHJlc2VudCAgYQorICAgICAgIG5ld2xpbmUgICBkbyAgbm90ICBjb3VudC4gIEZvciAgZXhhbXBsZSwgIGNvbnNpZGVyICB0aGlzICBwYXR0ZXJuICB3aGVuCisgICAgICAgUENSRTJfRVhURU5ERUQgaXMgc2V0LCBhbmQgdGhlIGRlZmF1bHQgIG5ld2xpbmUgIGNvbnZlbnRpb24gIChhICBzaW5nbGUKKyAgICAgICBsaW5lZmVlZCBjaGFyYWN0ZXIpIGlzIGluIGZvcmNlOgorCisgICAgICAgICBhYmMgI2NvbW1lbnQgXG4gc3RpbGwgY29tbWVudAorCisgICAgICAgT24gIGVuY291bnRlcmluZyAgdGhlICMgY2hhcmFjdGVyLCBwY3JlMl9jb21waWxlKCkgc2tpcHMgYWxvbmcsIGxvb2tpbmcKKyAgICAgICBmb3IgYSBuZXdsaW5lIGluIHRoZSBwYXR0ZXJuLiBUaGUgc2VxdWVuY2UgXG4gaXMgc3RpbGwgbGl0ZXJhbCBhdCAgdGhpcworICAgICAgIHN0YWdlLCAgc28gIGl0IGRvZXMgbm90IHRlcm1pbmF0ZSB0aGUgY29tbWVudC4gT25seSBhbiBhY3R1YWwgY2hhcmFjdGVyCisgICAgICAgd2l0aCB0aGUgY29kZSB2YWx1ZSAweDBhICh0aGUgZGVmYXVsdCBuZXdsaW5lKSBkb2VzIHNvLgorCisKK1JFQ1VSU0lWRSBQQVRURVJOUworCisgICAgICAgQ29uc2lkZXIgdGhlIHByb2JsZW0gb2YgbWF0Y2hpbmcgYSBzdHJpbmcgaW4gcGFyZW50aGVzZXMsIGFsbG93aW5nICBmb3IKKyAgICAgICB1bmxpbWl0ZWQgIG5lc3RlZCAgcGFyZW50aGVzZXMuICBXaXRob3V0IHRoZSB1c2Ugb2YgcmVjdXJzaW9uLCB0aGUgYmVzdAorICAgICAgIHRoYXQgY2FuIGJlIGRvbmUgaXMgdG8gdXNlIGEgcGF0dGVybiB0aGF0ICBtYXRjaGVzICB1cCAgdG8gIHNvbWUgIGZpeGVkCisgICAgICAgZGVwdGggIG9mICBuZXN0aW5nLiAgSXQgIGlzIG5vdCBwb3NzaWJsZSB0byBoYW5kbGUgYW4gYXJiaXRyYXJ5IG5lc3RpbmcKKyAgICAgICBkZXB0aC4KKworICAgICAgIEZvciBzb21lIHRpbWUsIFBlcmwgaGFzIHByb3ZpZGVkIGEgZmFjaWxpdHkgdGhhdCBhbGxvd3MgcmVndWxhciBleHByZXMtCisgICAgICAgc2lvbnMgIHRvIHJlY3Vyc2UgKGFtb25nc3Qgb3RoZXIgdGhpbmdzKS4gSXQgZG9lcyB0aGlzIGJ5IGludGVycG9sYXRpbmcKKyAgICAgICBQZXJsIGNvZGUgaW4gdGhlIGV4cHJlc3Npb24gYXQgcnVuIHRpbWUsIGFuZCB0aGUgY29kZSBjYW4gcmVmZXIgdG8gIHRoZQorICAgICAgIGV4cHJlc3Npb24gaXRzZWxmLiBBIFBlcmwgcGF0dGVybiB1c2luZyBjb2RlIGludGVycG9sYXRpb24gdG8gc29sdmUgdGhlCisgICAgICAgcGFyZW50aGVzZXMgcHJvYmxlbSBjYW4gYmUgY3JlYXRlZCBsaWtlIHRoaXM6CisKKyAgICAgICAgICRyZSA9IHFye1woICg/OiAoPz5bXigpXSspIHwgKD9weyRyZX0pICkqIFwpfXg7CisKKyAgICAgICBUaGUgKD9wey4uLn0pIGl0ZW0gaW50ZXJwb2xhdGVzIFBlcmwgY29kZSBhdCBydW4gdGltZSwgYW5kIGluIHRoaXMgY2FzZQorICAgICAgIHJlZmVycyByZWN1cnNpdmVseSB0byB0aGUgcGF0dGVybiBpbiB3aGljaCBpdCBhcHBlYXJzLgorCisgICAgICAgT2J2aW91c2x5LCAgUENSRTIgIGNhbm5vdCAgc3VwcG9ydCAgdGhlICBpbnRlcnBvbGF0aW9uICBvZiAgUGVybCAgY29kZS4KKyAgICAgICBJbnN0ZWFkLCBpdCBzdXBwb3J0cyBzcGVjaWFsIHN5bnRheCBmb3IgcmVjdXJzaW9uIG9mICB0aGUgIGVudGlyZSAgcGF0LQorICAgICAgIHRlcm4sIGFuZCBhbHNvIGZvciBpbmRpdmlkdWFsIHN1YnBhdHRlcm4gcmVjdXJzaW9uLiBBZnRlciBpdHMgaW50cm9kdWMtCisgICAgICAgdGlvbiBpbiBQQ1JFMSBhbmQgUHl0aG9uLCAgdGhpcyAga2luZCAgb2YgIHJlY3Vyc2lvbiAgd2FzICBzdWJzZXF1ZW50bHkKKyAgICAgICBpbnRyb2R1Y2VkIGludG8gUGVybCBhdCByZWxlYXNlIDUuMTAuCisKKyAgICAgICBBICBzcGVjaWFsICBpdGVtICB0aGF0IGNvbnNpc3RzIG9mICg/IGZvbGxvd2VkIGJ5IGEgbnVtYmVyIGdyZWF0ZXIgdGhhbgorICAgICAgIHplcm8gYW5kIGEgY2xvc2luZyBwYXJlbnRoZXNpcyBpcyBhIHJlY3Vyc2l2ZSBzdWJyb3V0aW5lICBjYWxsICBvZiAgdGhlCisgICAgICAgc3VicGF0dGVybiAgb2YgIHRoZSAgZ2l2ZW4gIG51bWJlciwgcHJvdmlkZWQgdGhhdCBpdCBvY2N1cnMgaW5zaWRlIHRoYXQKKyAgICAgICBzdWJwYXR0ZXJuLiAoSWYgbm90LCBpdCBpcyBhIG5vbi1yZWN1cnNpdmUgc3Vicm91dGluZSAgY2FsbCwgIHdoaWNoICBpcworICAgICAgIGRlc2NyaWJlZCAgaW4gIHRoZSAgbmV4dCAgc2VjdGlvbi4pICBUaGUgc3BlY2lhbCBpdGVtICg/Uikgb3IgKD8wKSBpcyBhCisgICAgICAgcmVjdXJzaXZlIGNhbGwgb2YgdGhlIGVudGlyZSByZWd1bGFyIGV4cHJlc3Npb24uCisKKyAgICAgICBUaGlzIFBDUkUyIHBhdHRlcm4gc29sdmVzIHRoZSBuZXN0ZWQgcGFyZW50aGVzZXMgIHByb2JsZW0gIChhc3N1bWUgIHRoZQorICAgICAgIFBDUkUyX0VYVEVOREVEIG9wdGlvbiBpcyBzZXQgc28gdGhhdCB3aGl0ZSBzcGFjZSBpcyBpZ25vcmVkKToKKworICAgICAgICAgXCggKCBbXigpXSsrIHwgKD9SKSApKiBcKQorCisgICAgICAgRmlyc3QgIGl0IG1hdGNoZXMgYW4gb3BlbmluZyBwYXJlbnRoZXNpcy4gVGhlbiBpdCBtYXRjaGVzIGFueSBudW1iZXIgb2YKKyAgICAgICBzdWJzdHJpbmdzIHdoaWNoIGNhbiBlaXRoZXIgYmUgYSAgc2VxdWVuY2UgIG9mICBub24tcGFyZW50aGVzZXMsICBvciAgYQorICAgICAgIHJlY3Vyc2l2ZSAgbWF0Y2ggIG9mIHRoZSBwYXR0ZXJuIGl0c2VsZiAodGhhdCBpcywgYSBjb3JyZWN0bHkgcGFyZW50aGUtCisgICAgICAgc2l6ZWQgc3Vic3RyaW5nKS4gIEZpbmFsbHkgdGhlcmUgaXMgYSBjbG9zaW5nIHBhcmVudGhlc2lzLiBOb3RlIHRoZSB1c2UKKyAgICAgICBvZiBhIHBvc3Nlc3NpdmUgcXVhbnRpZmllciB0byBhdm9pZCBiYWNrdHJhY2tpbmcgaW50byBzZXF1ZW5jZXMgb2Ygbm9uLQorICAgICAgIHBhcmVudGhlc2VzLgorCisgICAgICAgSWYgdGhpcyB3ZXJlIHBhcnQgb2YgYSBsYXJnZXIgcGF0dGVybiwgeW91IHdvdWxkIG5vdCAgd2FudCAgdG8gIHJlY3Vyc2UKKyAgICAgICB0aGUgZW50aXJlIHBhdHRlcm4sIHNvIGluc3RlYWQgeW91IGNvdWxkIHVzZSB0aGlzOgorCisgICAgICAgICAoIFwoICggW14oKV0rKyB8ICg/MSkgKSogXCkgKQorCisgICAgICAgV2UgIGhhdmUgIHB1dCB0aGUgcGF0dGVybiBpbnRvIHBhcmVudGhlc2VzLCBhbmQgY2F1c2VkIHRoZSByZWN1cnNpb24gdG8KKyAgICAgICByZWZlciB0byB0aGVtIGluc3RlYWQgb2YgdGhlIHdob2xlIHBhdHRlcm4uCisKKyAgICAgICBJbiBhIGxhcmdlciBwYXR0ZXJuLCAga2VlcGluZyAgdHJhY2sgIG9mICBwYXJlbnRoZXNpcyAgbnVtYmVycyAgY2FuICBiZQorICAgICAgIHRyaWNreS4gIFRoaXMgaXMgbWFkZSBlYXNpZXIgYnkgdGhlIHVzZSBvZiByZWxhdGl2ZSByZWZlcmVuY2VzLiBJbnN0ZWFkCisgICAgICAgb2YgKD8xKSBpbiB0aGUgcGF0dGVybiBhYm92ZSB5b3UgY2FuIHdyaXRlICg/LTIpIHRvIHJlZmVyIHRvIHRoZSBzZWNvbmQKKyAgICAgICBtb3N0ICByZWNlbnRseSAgb3BlbmVkICBwYXJlbnRoZXNlcyAgcHJlY2VkaW5nICB0aGUgcmVjdXJzaW9uLiBJbiBvdGhlcgorICAgICAgIHdvcmRzLCBhIG5lZ2F0aXZlIG51bWJlciBjb3VudHMgY2FwdHVyaW5nICBwYXJlbnRoZXNlcyAgbGVmdHdhcmRzICBmcm9tCisgICAgICAgdGhlIHBvaW50IGF0IHdoaWNoIGl0IGlzIGVuY291bnRlcmVkLgorCisgICAgICAgQmUgYXdhcmUgaG93ZXZlciwgdGhhdCBpZiBkdXBsaWNhdGUgc3VicGF0dGVybiBudW1iZXJzIGFyZSBpbiB1c2UsIHJlbC0KKyAgICAgICBhdGl2ZSByZWZlcmVuY2VzIHJlZmVyIHRvIHRoZSBlYXJsaWVzdCBzdWJwYXR0ZXJuIHdpdGggdGhlICBhcHByb3ByaWF0ZQorICAgICAgIG51bWJlci4gQ29uc2lkZXIsIGZvciBleGFtcGxlOgorCisgICAgICAgICAoP3woYSl8KGIpKSAoYykgKD8tMikKKworICAgICAgIFRoZSAgZmlyc3QgIHR3byAgY2FwdHVyaW5nICBncm91cHMgKGEpIGFuZCAoYikgYXJlIGJvdGggbnVtYmVyZWQgMSwgYW5kCisgICAgICAgZ3JvdXAgKGMpIGlzIG51bWJlciAyLiBXaGVuIHRoZSByZWZlcmVuY2UgICg/LTIpICBpcyAgZW5jb3VudGVyZWQsICB0aGUKKyAgICAgICBzZWNvbmQgbW9zdCByZWNlbnRseSBvcGVuZWQgcGFyZW50aGVzZXMgaGFzIHRoZSBudW1iZXIgMSwgYnV0IGl0IGlzIHRoZQorICAgICAgIGZpcnN0IHN1Y2ggZ3JvdXAgKHRoZSAoYSkgZ3JvdXApIHRvIHdoaWNoIHRoZSAgcmVjdXJzaW9uICByZWZlcnMuICBUaGlzCisgICAgICAgd291bGQgIGJlICB0aGUgIHNhbWUgIGlmICBhbiBhYnNvbHV0ZSByZWZlcmVuY2UgKD8xKSB3YXMgdXNlZC4gSW4gb3RoZXIKKyAgICAgICB3b3JkcywgcmVsYXRpdmUgcmVmZXJlbmNlcyBhcmUganVzdCBhIHNob3J0aGFuZCBmb3IgY29tcHV0aW5nICBhICBncm91cAorICAgICAgIG51bWJlci4KKworICAgICAgIEl0ICBpcyAgYWxzbyAgcG9zc2libGUgIHRvIHJlZmVyIHRvIHN1YnNlcXVlbnRseSBvcGVuZWQgcGFyZW50aGVzZXMsIGJ5CisgICAgICAgd3JpdGluZyByZWZlcmVuY2VzIHN1Y2ggYXMgKD8rMikuIEhvd2V2ZXIsIHRoZXNlICBjYW5ub3QgIGJlICByZWN1cnNpdmUKKyAgICAgICBiZWNhdXNlICB0aGUgIHJlZmVyZW5jZSAgaXMgIG5vdCBpbnNpZGUgdGhlIHBhcmVudGhlc2VzIHRoYXQgYXJlIHJlZmVyLQorICAgICAgIGVuY2VkLiBUaGV5IGFyZSBhbHdheXMgbm9uLXJlY3Vyc2l2ZSBzdWJyb3V0aW5lIGNhbGxzLCBhcyBkZXNjcmliZWQgIGluCisgICAgICAgdGhlIG5leHQgc2VjdGlvbi4KKworICAgICAgIEFuICBhbHRlcm5hdGl2ZSAgYXBwcm9hY2ggIGlzIHRvIHVzZSBuYW1lZCBwYXJlbnRoZXNlcy4gVGhlIFBlcmwgc3ludGF4CisgICAgICAgZm9yIHRoaXMgaXMgKD8mbmFtZSk7IFBDUkUxJ3MgZWFybGllciBzeW50YXggICg/UD5uYW1lKSAgaXMgIGFsc28gIHN1cC0KKyAgICAgICBwb3J0ZWQuIFdlIGNvdWxkIHJld3JpdGUgdGhlIGFib3ZlIGV4YW1wbGUgYXMgZm9sbG93czoKKworICAgICAgICAgKD88cG4+IFwoICggW14oKV0rKyB8ICg/JnBuKSApKiBcKSApCisKKyAgICAgICBJZiAgdGhlcmUgIGlzIG1vcmUgdGhhbiBvbmUgc3VicGF0dGVybiB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZSBlYXJsaWVzdAorICAgICAgIG9uZSBpcyB1c2VkLgorCisgICAgICAgVGhlIGV4YW1wbGUgcGF0dGVybiB0aGF0IHdlIGhhdmUgYmVlbiBsb29raW5nIGF0IGNvbnRhaW5zIG5lc3RlZCB1bmxpbS0KKyAgICAgICBpdGVkICByZXBlYXRzLCAgYW5kICBzbyB0aGUgdXNlIG9mIGEgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyIGZvciBtYXRjaGluZworICAgICAgIHN0cmluZ3Mgb2Ygbm9uLXBhcmVudGhlc2VzIGlzIGltcG9ydGFudCB3aGVuIGFwcGx5aW5nICB0aGUgIHBhdHRlcm4gIHRvCisgICAgICAgc3RyaW5ncyB0aGF0IGRvIG5vdCBtYXRjaC4gRm9yIGV4YW1wbGUsIHdoZW4gdGhpcyBwYXR0ZXJuIGlzIGFwcGxpZWQgdG8KKworICAgICAgICAgKGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhKCkKKworICAgICAgIGl0ICB5aWVsZHMgICJubyAgbWF0Y2giIHF1aWNrbHkuIEhvd2V2ZXIsIGlmIGEgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyIGlzCisgICAgICAgbm90IHVzZWQsIHRoZSBtYXRjaCBydW5zIGZvciBhIHZlcnkgbG9uZyB0aW1lIGluZGVlZCBiZWNhdXNlIHRoZXJlICBhcmUKKyAgICAgICBzbyAgbWFueSAgZGlmZmVyZW50ICB3YXlzIHRoZSArIGFuZCAqIHJlcGVhdHMgY2FuIGNhcnZlIHVwIHRoZSBzdWJqZWN0LAorICAgICAgIGFuZCBhbGwgaGF2ZSB0byBiZSB0ZXN0ZWQgYmVmb3JlIGZhaWx1cmUgY2FuIGJlIHJlcG9ydGVkLgorCisgICAgICAgQXQgdGhlIGVuZCBvZiBhIG1hdGNoLCB0aGUgdmFsdWVzIG9mIGNhcHR1cmluZyAgcGFyZW50aGVzZXMgIGFyZSAgdGhvc2UKKyAgICAgICBmcm9tICB0aGUgb3V0ZXJtb3N0IGxldmVsLiBJZiB5b3Ugd2FudCB0byBvYnRhaW4gaW50ZXJtZWRpYXRlIHZhbHVlcywgYQorICAgICAgIGNhbGxvdXQgZnVuY3Rpb24gY2FuIGJlIHVzZWQgKHNlZSBiZWxvdyBhbmQgdGhlIHBjcmUyY2FsbG91dCBkb2N1bWVudGEtCisgICAgICAgdGlvbikuIElmIHRoZSBwYXR0ZXJuIGFib3ZlIGlzIG1hdGNoZWQgYWdhaW5zdAorCisgICAgICAgICAoYWIoY2QpZWYpCisKKyAgICAgICB0aGUgIHZhbHVlICBmb3IgIHRoZSAgaW5uZXIgY2FwdHVyaW5nIHBhcmVudGhlc2VzIChudW1iZXJlZCAyKSBpcyAiZWYiLAorICAgICAgIHdoaWNoIGlzIHRoZSBsYXN0IHZhbHVlIHRha2VuIG9uIGF0IHRoZSB0b3AgbGV2ZWwuIElmIGEgY2FwdHVyaW5nICBzdWItCisgICAgICAgcGF0dGVybiAgaXMgIG5vdCAgbWF0Y2hlZCBhdCB0aGUgdG9wIGxldmVsLCBpdHMgZmluYWwgY2FwdHVyZWQgdmFsdWUgaXMKKyAgICAgICB1bnNldCwgZXZlbiBpZiBpdCB3YXMgKHRlbXBvcmFyaWx5KSBzZXQgYXQgYSBkZWVwZXIgIGxldmVsICBkdXJpbmcgIHRoZQorICAgICAgIG1hdGNoaW5nIHByb2Nlc3MuCisKKyAgICAgICBJZiB0aGVyZSBhcmUgbW9yZSB0aGFuIDE1IGNhcHR1cmluZyBwYXJlbnRoZXNlcyBpbiBhIHBhdHRlcm4sIFBDUkUyIGhhcworICAgICAgIHRvIG9idGFpbiBleHRyYSBtZW1vcnkgZnJvbSB0aGUgaGVhcCB0byBzdG9yZSBkYXRhIGR1cmluZyBhICByZWN1cnNpb24uCisgICAgICAgSWYgICBubyAgIG1lbW9yeSAgIGNhbiAgIGJlICAgb2J0YWluZWQsICAgdGhlICAgbWF0Y2ggIGZhaWxzICB3aXRoICB0aGUKKyAgICAgICBQQ1JFMl9FUlJPUl9OT01FTU9SWSBlcnJvci4KKworICAgICAgIERvIG5vdCBjb25mdXNlIHRoZSAoP1IpIGl0ZW0gd2l0aCB0aGUgY29uZGl0aW9uIChSKSwgIHdoaWNoICB0ZXN0cyAgZm9yCisgICAgICAgcmVjdXJzaW9uLiAgIENvbnNpZGVyICB0aGlzIHBhdHRlcm4sIHdoaWNoIG1hdGNoZXMgdGV4dCBpbiBhbmdsZSBicmFjay0KKyAgICAgICBldHMsIGFsbG93aW5nIGZvciBhcmJpdHJhcnkgbmVzdGluZy4gT25seSBkaWdpdHMgYXJlIGFsbG93ZWQgaW4gIG5lc3RlZAorICAgICAgIGJyYWNrZXRzICAodGhhdCBpcywgd2hlbiByZWN1cnNpbmcpLCB3aGVyZWFzIGFueSBjaGFyYWN0ZXJzIGFyZSBwZXJtaXQtCisgICAgICAgdGVkIGF0IHRoZSBvdXRlciBsZXZlbC4KKworICAgICAgICAgPCAoPzogKD8oUikgXGQrKyAgfCBbXjw+XSorKSB8ICg/UikpICogPgorCisgICAgICAgSW4gdGhpcyBwYXR0ZXJuLCAoPyhSKSBpcyB0aGUgc3RhcnQgb2YgYSBjb25kaXRpb25hbCAgc3VicGF0dGVybiwgIHdpdGgKKyAgICAgICB0d28gIGRpZmZlcmVudCAgYWx0ZXJuYXRpdmVzIGZvciB0aGUgcmVjdXJzaXZlIGFuZCBub24tcmVjdXJzaXZlIGNhc2VzLgorICAgICAgIFRoZSAoP1IpIGl0ZW0gaXMgdGhlIGFjdHVhbCByZWN1cnNpdmUgY2FsbC4KKworICAgRGlmZmVyZW5jZXMgaW4gcmVjdXJzaW9uIHByb2Nlc3NpbmcgYmV0d2VlbiBQQ1JFMiBhbmQgUGVybAorCisgICAgICAgUmVjdXJzaW9uIHByb2Nlc3NpbmcgaW4gUENSRTIgZGlmZmVycyBmcm9tIFBlcmwgaW4gdHdvIGltcG9ydGFudCAgd2F5cy4KKyAgICAgICBJbiBQQ1JFMiAobGlrZSBQeXRob24sIGJ1dCB1bmxpa2UgUGVybCksIGEgcmVjdXJzaXZlIHN1YnBhdHRlcm4gY2FsbCBpcworICAgICAgIGFsd2F5cyB0cmVhdGVkIGFzIGFuIGF0b21pYyBncm91cC4gVGhhdCBpcywgb25jZSBpdCBoYXMgbWF0Y2hlZCBzb21lIG9mCisgICAgICAgdGhlIHN1YmplY3Qgc3RyaW5nLCBpdCBpcyBuZXZlciByZS1lbnRlcmVkLCBldmVuIGlmIGl0IGNvbnRhaW5zIHVudHJpZWQKKyAgICAgICBhbHRlcm5hdGl2ZXMgYW5kIHRoZXJlIGlzIGEgc3Vic2VxdWVudCBtYXRjaGluZyBmYWlsdXJlLiAgVGhpcyAgY2FuICBiZQorICAgICAgIGlsbHVzdHJhdGVkICBieSB0aGUgZm9sbG93aW5nIHBhdHRlcm4sIHdoaWNoIHB1cnBvcnRzIHRvIG1hdGNoIGEgcGFsaW4tCisgICAgICAgZHJvbWljIHN0cmluZyB0aGF0IGNvbnRhaW5zIGFuIG9kZCBudW1iZXIgb2YgY2hhcmFjdGVycyAgKGZvciAgZXhhbXBsZSwKKyAgICAgICAiYSIsICJhYmEiLCAiYWJjYmEiLCAiYWJjZGNiYSIpOgorCisgICAgICAgICBeKC58KC4pKD8xKVwyKSQKKworICAgICAgIFRoZSBpZGVhIGlzIHRoYXQgaXQgZWl0aGVyIG1hdGNoZXMgYSBzaW5nbGUgY2hhcmFjdGVyLCBvciB0d28gaWRlbnRpY2FsCisgICAgICAgY2hhcmFjdGVycyBzdXJyb3VuZGluZyBhIHN1Yi1wYWxpbmRyb21lLiBJbiBQZXJsLCB0aGlzICBwYXR0ZXJuICB3b3JrczsKKyAgICAgICBpbiAgUENSRTIgIGl0ICBkb2VzIG5vdCBpZiB0aGUgcGF0dGVybiBpcyBsb25nZXIgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLgorICAgICAgIENvbnNpZGVyIHRoZSBzdWJqZWN0IHN0cmluZyAiYWJjYmEiOgorCisgICAgICAgQXQgdGhlIHRvcCBsZXZlbCwgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyBtYXRjaGVkLCBidXQgYXMgaXQgaXMgIG5vdCAgYXQKKyAgICAgICB0aGUgZW5kIG9mIHRoZSBzdHJpbmcsIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZSBmYWlsczsgdGhlIHNlY29uZCBhbHRlcm5hLQorICAgICAgIHRpdmUgaXMgdGFrZW4gYW5kIHRoZSByZWN1cnNpb24ga2lja3MgaW4uIFRoZSByZWN1cnNpdmUgY2FsbCB0byBzdWJwYXQtCisgICAgICAgdGVybiAgMSAgc3VjY2Vzc2Z1bGx5ICBtYXRjaGVzIHRoZSBuZXh0IGNoYXJhY3RlciAoImIiKS4gKE5vdGUgdGhhdCB0aGUKKyAgICAgICBiZWdpbm5pbmcgYW5kIGVuZCBvZiBsaW5lIHRlc3RzIGFyZSBub3QgcGFydCBvZiB0aGUgcmVjdXJzaW9uKS4KKworICAgICAgIEJhY2sgYXQgdGhlIHRvcCBsZXZlbCwgdGhlIG5leHQgY2hhcmFjdGVyICgiYyIpIGlzIGNvbXBhcmVkICB3aXRoICB3aGF0CisgICAgICAgc3VicGF0dGVybiAgMiBtYXRjaGVkLCB3aGljaCB3YXMgImEiLiBUaGlzIGZhaWxzLiBCZWNhdXNlIHRoZSByZWN1cnNpb24KKyAgICAgICBpcyB0cmVhdGVkIGFzIGFuIGF0b21pYyBncm91cCwgdGhlcmUgYXJlIG5vdyAgbm8gIGJhY2t0cmFja2luZyAgcG9pbnRzLAorICAgICAgIGFuZCAgc28gIHRoZSAgZW50aXJlICBtYXRjaCBmYWlscy4gKFBlcmwgaXMgYWJsZSwgYXQgdGhpcyBwb2ludCwgdG8gcmUtCisgICAgICAgZW50ZXIgdGhlIHJlY3Vyc2lvbiBhbmQgdHJ5IHRoZSBzZWNvbmQgYWx0ZXJuYXRpdmUuKSAgSG93ZXZlciwgIGlmICB0aGUKKyAgICAgICBwYXR0ZXJuIGlzIHdyaXR0ZW4gd2l0aCB0aGUgYWx0ZXJuYXRpdmVzIGluIHRoZSBvdGhlciBvcmRlciwgdGhpbmdzIGFyZQorICAgICAgIGRpZmZlcmVudDoKKworICAgICAgICAgXigoLikoPzEpXDJ8LikkCisKKyAgICAgICBUaGlzIHRpbWUsIHRoZSByZWN1cnNpbmcgYWx0ZXJuYXRpdmUgaXMgdHJpZWQgZmlyc3QsIGFuZCAgY29udGludWVzICB0bworICAgICAgIHJlY3Vyc2UgIHVudGlsICBpdCBydW5zIG91dCBvZiBjaGFyYWN0ZXJzLCBhdCB3aGljaCBwb2ludCB0aGUgcmVjdXJzaW9uCisgICAgICAgZmFpbHMuIEJ1dCB0aGlzIHRpbWUgd2UgZG8gaGF2ZSAgYW5vdGhlciAgYWx0ZXJuYXRpdmUgIHRvICB0cnkgIGF0ICB0aGUKKyAgICAgICBoaWdoZXIgIGxldmVsLiAgVGhhdCAgaXMgIHRoZSAgYmlnIGRpZmZlcmVuY2U6IGluIHRoZSBwcmV2aW91cyBjYXNlIHRoZQorICAgICAgIHJlbWFpbmluZyBhbHRlcm5hdGl2ZSBpcyBhdCBhIGRlZXBlciByZWN1cnNpb24gbGV2ZWwsIHdoaWNoIFBDUkUyICBjYW4tCisgICAgICAgbm90IHVzZS4KKworICAgICAgIFRvICBjaGFuZ2UgIHRoZSBwYXR0ZXJuIHNvIHRoYXQgaXQgbWF0Y2hlcyBhbGwgcGFsaW5kcm9taWMgc3RyaW5ncywgbm90CisgICAgICAganVzdCB0aG9zZSB3aXRoIGFuIG9kZCBudW1iZXIgb2YgY2hhcmFjdGVycywgaXQgaXMgdGVtcHRpbmcgIHRvICBjaGFuZ2UKKyAgICAgICB0aGUgcGF0dGVybiB0byB0aGlzOgorCisgICAgICAgICBeKCguKSg/MSlcMnwuPykkCisKKyAgICAgICBBZ2FpbiwgIHRoaXMgIHdvcmtzIGluIFBlcmwsIGJ1dCBub3QgaW4gUENSRTIsIGFuZCBmb3IgdGhlIHNhbWUgcmVhc29uLgorICAgICAgIFdoZW4gYSBkZWVwZXIgcmVjdXJzaW9uIGhhcyBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgIGl0ICBjYW5ub3QgIGJlCisgICAgICAgZW50ZXJlZCAgYWdhaW4gIGluICBvcmRlciAgdG8gbWF0Y2ggYW4gZW1wdHkgc3RyaW5nLiBUaGUgc29sdXRpb24gaXMgdG8KKyAgICAgICBzZXBhcmF0ZSB0aGUgdHdvIGNhc2VzLCBhbmQgd3JpdGUgb3V0IHRoZSBvZGQgYW5kIGV2ZW4gY2FzZXMgYXMgIGFsdGVyLQorICAgICAgIG5hdGl2ZXMgYXQgdGhlIGhpZ2hlciBsZXZlbDoKKworICAgICAgICAgXig/OigoLikoPzEpXDJ8KXwoKC4pKD8zKVw0fC4pKQorCisgICAgICAgSWYgIHlvdSAgd2FudCAgdG8gbWF0Y2ggdHlwaWNhbCBwYWxpbmRyb21pYyBwaHJhc2VzLCB0aGUgcGF0dGVybiBoYXMgdG8KKyAgICAgICBpZ25vcmUgYWxsIG5vbi13b3JkIGNoYXJhY3RlcnMsIHdoaWNoIGNhbiBiZSBkb25lIGxpa2UgdGhpczoKKworICAgICAgICAgXlxXKisoPzooKC4pXFcqKyg/MSlcVyorXDJ8KXwoKC4pXFcqKyg/MylcVyorXDR8XFcqKy5cVyorKSlcVyorJAorCisgICAgICAgSWYgcnVuIHdpdGggdGhlIFBDUkUyX0NBU0VMRVNTIG9wdGlvbiwgIHRoaXMgIHBhdHRlcm4gIG1hdGNoZXMgIHBocmFzZXMKKyAgICAgICBzdWNoICBhcyAgIkEgIG1hbiwgYSBwbGFuLCBhIGNhbmFsOiBQYW5hbWEhIiBhbmQgaXQgd29ya3MgaW4gYm90aCBQQ1JFMgorICAgICAgIGFuZCBQZXJsLiBOb3RlIHRoZSB1c2Ugb2YgdGhlIHBvc3Nlc3NpdmUgcXVhbnRpZmllciAqKyB0byAgYXZvaWQgIGJhY2stCisgICAgICAgdHJhY2tpbmcgIGludG8gIHNlcXVlbmNlcyAgb2YgIG5vbi13b3JkIGNoYXJhY3RlcnMuIFdpdGhvdXQgdGhpcywgUENSRTIKKyAgICAgICB0YWtlcyBhIGdyZWF0IGRlYWwgbG9uZ2VyICh0ZW4gdGltZXMgb3IgbW9yZSkgdG8gbWF0Y2ggdHlwaWNhbCBwaHJhc2VzLAorICAgICAgIGFuZCBQZXJsIHRha2VzIHNvIGxvbmcgdGhhdCB5b3UgdGhpbmsgaXQgaGFzIGdvbmUgaW50byBhIGxvb3AuCisKKyAgICAgICBXQVJOSU5HOiAgVGhlICBwYWxpbmRyb21lLW1hdGNoaW5nIHBhdHRlcm5zIGFib3ZlIHdvcmsgb25seSBpZiB0aGUgc3ViLQorICAgICAgIGplY3Qgc3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggYSBwYWxpbmRyb21lIHRoYXQgaXMgc2hvcnRlciAgdGhhbiAgdGhlCisgICAgICAgZW50aXJlICBzdHJpbmcuICBGb3IgZXhhbXBsZSwgYWx0aG91Z2ggImFiY2JhIiBpcyBjb3JyZWN0bHkgbWF0Y2hlZCwgaWYKKyAgICAgICB0aGUgc3ViamVjdCBpcyAiYWJhYmEiLCBQQ1JFMiBmaW5kcyB0aGUgcGFsaW5kcm9tZSAiYWJhIiBhdCB0aGUgIHN0YXJ0LAorICAgICAgIHRoZW4gIGZhaWxzIGF0IHRvcCBsZXZlbCBiZWNhdXNlIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBkb2VzIG5vdCBmb2xsb3cuCisgICAgICAgT25jZSBhZ2FpbiwgaXQgY2Fubm90IGp1bXAgYmFjayBpbnRvIHRoZSByZWN1cnNpb24gdG8gdHJ5IG90aGVyICBhbHRlci0KKyAgICAgICBuYXRpdmVzLCBzbyB0aGUgZW50aXJlIG1hdGNoIGZhaWxzLgorCisgICAgICAgVGhlICBzZWNvbmQgIHdheSBpbiB3aGljaCBQQ1JFMiBhbmQgUGVybCBkaWZmZXIgaW4gdGhlaXIgcmVjdXJzaW9uIHByby0KKyAgICAgICBjZXNzaW5nIGlzIGluIHRoZSBoYW5kbGluZyBvZiBjYXB0dXJlZCB2YWx1ZXMuIEluIFBlcmwsIHdoZW4gYSAgc3VicGF0LQorICAgICAgIHRlcm4gIGlzICBjYWxsZWQgcmVjdXJzaXZlbHkgb3IgYXMgYSBzdWJwYXR0ZXJuIChzZWUgdGhlIG5leHQgc2VjdGlvbiksCisgICAgICAgaXQgaGFzIG5vIGFjY2VzcyB0byBhbnkgdmFsdWVzIHRoYXQgd2VyZSBjYXB0dXJlZCAgb3V0c2lkZSAgdGhlICByZWN1ci0KKyAgICAgICBzaW9uLCAgd2hlcmVhcyAgaW4gIFBDUkUyIHRoZXNlIHZhbHVlcyBjYW4gYmUgcmVmZXJlbmNlZC4gQ29uc2lkZXIgdGhpcworICAgICAgIHBhdHRlcm46CisKKyAgICAgICAgIF4oLikoXDF8YSg/MikpCisKKyAgICAgICBJbiBQQ1JFMiwgdGhpcyBwYXR0ZXJuIG1hdGNoZXMgImJhYiIuIFRoZSBmaXJzdCAgY2FwdHVyaW5nICBwYXJlbnRoZXNlcworICAgICAgIG1hdGNoICAiYiIsICB0aGVuIGluIHRoZSBzZWNvbmQgZ3JvdXAsIHdoZW4gdGhlIGJhY2sgcmVmZXJlbmNlIFwxIGZhaWxzCisgICAgICAgdG8gbWF0Y2ggImIiLCB0aGUgc2Vjb25kIGFsdGVybmF0aXZlIG1hdGNoZXMgImEiIGFuZCB0aGVuIHJlY3Vyc2VzLiAgSW4KKyAgICAgICB0aGUgIHJlY3Vyc2lvbiwgIFwxIGRvZXMgbm93IG1hdGNoICJiIiBhbmQgc28gdGhlIHdob2xlIG1hdGNoIHN1Y2NlZWRzLgorICAgICAgIEluIFBlcmwsIHRoZSBwYXR0ZXJuIGZhaWxzIHRvIG1hdGNoIGJlY2F1c2UgaW5zaWRlIHRoZSAgcmVjdXJzaXZlICBjYWxsCisgICAgICAgXDEgY2Fubm90IGFjY2VzcyB0aGUgZXh0ZXJuYWxseSBzZXQgdmFsdWUuCisKKworU1VCUEFUVEVSTlMgQVMgU1VCUk9VVElORVMKKworICAgICAgIElmICB0aGUgIHN5bnRheCBmb3IgYSByZWN1cnNpdmUgc3VicGF0dGVybiBjYWxsIChlaXRoZXIgYnkgbnVtYmVyIG9yIGJ5CisgICAgICAgbmFtZSkgaXMgdXNlZCBvdXRzaWRlIHRoZSBwYXJlbnRoZXNlcyB0byB3aGljaCBpdCByZWZlcnMsICBpdCAgb3BlcmF0ZXMKKyAgICAgICBsaWtlICBhIHN1YnJvdXRpbmUgaW4gYSBwcm9ncmFtbWluZyBsYW5ndWFnZS4gVGhlIGNhbGxlZCBzdWJwYXR0ZXJuIG1heQorICAgICAgIGJlIGRlZmluZWQgYmVmb3JlIG9yIGFmdGVyIHRoZSByZWZlcmVuY2UuIEEgbnVtYmVyZWQgcmVmZXJlbmNlICBjYW4gIGJlCisgICAgICAgYWJzb2x1dGUgb3IgcmVsYXRpdmUsIGFzIGluIHRoZXNlIGV4YW1wbGVzOgorCisgICAgICAgICAoLi4uKGFic29sdXRlKS4uLikuLi4oPzIpLi4uCisgICAgICAgICAoLi4uKHJlbGF0aXZlKS4uLikuLi4oPy0xKS4uLgorICAgICAgICAgKC4uLig/KzEpLi4uKHJlbGF0aXZlKS4uLgorCisgICAgICAgQW4gZWFybGllciBleGFtcGxlIHBvaW50ZWQgb3V0IHRoYXQgdGhlIHBhdHRlcm4KKworICAgICAgICAgKHNlbnN8cmVzcG9ucyllIGFuZCBcMWliaWxpdHkKKworICAgICAgIG1hdGNoZXMgICJzZW5zZSBhbmQgc2Vuc2liaWxpdHkiIGFuZCAicmVzcG9uc2UgYW5kIHJlc3BvbnNpYmlsaXR5IiwgYnV0CisgICAgICAgbm90ICJzZW5zZSBhbmQgcmVzcG9uc2liaWxpdHkiLiBJZiBpbnN0ZWFkIHRoZSBwYXR0ZXJuCisKKyAgICAgICAgIChzZW5zfHJlc3BvbnMpZSBhbmQgKD8xKWliaWxpdHkKKworICAgICAgIGlzIHVzZWQsIGl0IGRvZXMgbWF0Y2ggInNlbnNlIGFuZCByZXNwb25zaWJpbGl0eSIgYXMgd2VsbCBhcyB0aGUgIG90aGVyCisgICAgICAgdHdvICBzdHJpbmdzLiAgQW5vdGhlciAgZXhhbXBsZSAgaXMgIGdpdmVuICBpbiB0aGUgZGlzY3Vzc2lvbiBvZiBERUZJTkUKKyAgICAgICBhYm92ZS4KKworICAgICAgIEFsbCBzdWJyb3V0aW5lIGNhbGxzLCB3aGV0aGVyIHJlY3Vyc2l2ZSBvciBub3QsIGFyZSBhbHdheXMgIHRyZWF0ZWQgIGFzCisgICAgICAgYXRvbWljICBncm91cHMuIFRoYXQgaXMsIG9uY2UgYSBzdWJyb3V0aW5lIGhhcyBtYXRjaGVkIHNvbWUgb2YgdGhlIHN1Yi0KKyAgICAgICBqZWN0IHN0cmluZywgaXQgaXMgbmV2ZXIgcmUtZW50ZXJlZCwgZXZlbiBpZiBpdCBjb250YWlucyB1bnRyaWVkIGFsdGVyLQorICAgICAgIG5hdGl2ZXMgIGFuZCAgdGhlcmUgIGlzICBhICBzdWJzZXF1ZW50ICBtYXRjaGluZyBmYWlsdXJlLiBBbnkgY2FwdHVyaW5nCisgICAgICAgcGFyZW50aGVzZXMgdGhhdCBhcmUgc2V0IGR1cmluZyB0aGUgc3Vicm91dGluZSAgY2FsbCAgcmV2ZXJ0ICB0byAgdGhlaXIKKyAgICAgICBwcmV2aW91cyB2YWx1ZXMgYWZ0ZXJ3YXJkcy4KKworICAgICAgIFByb2Nlc3NpbmcgIG9wdGlvbnMgIHN1Y2ggYXMgY2FzZS1pbmRlcGVuZGVuY2UgYXJlIGZpeGVkIHdoZW4gYSBzdWJwYXQtCisgICAgICAgdGVybiBpcyBkZWZpbmVkLCBzbyBpZiBpdCBpcyB1c2VkIGFzIGEgc3Vicm91dGluZSwgc3VjaCBvcHRpb25zICBjYW5ub3QKKyAgICAgICBiZSBjaGFuZ2VkIGZvciBkaWZmZXJlbnQgY2FsbHMuIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGlzIHBhdHRlcm46CisKKyAgICAgICAgIChhYmMpKD9pOig/LTEpKQorCisgICAgICAgSXQgIG1hdGNoZXMgICJhYmNhYmMiLiBJdCBkb2VzIG5vdCBtYXRjaCAiYWJjQUJDIiBiZWNhdXNlIHRoZSBjaGFuZ2Ugb2YKKyAgICAgICBwcm9jZXNzaW5nIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIGNhbGxlZCBzdWJwYXR0ZXJuLgorCisKK09OSUdVUlVNQSBTVUJST1VUSU5FIFNZTlRBWAorCisgICAgICAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBPbmlndXJ1bWEsIHRoZSBub24tUGVybCBzeW50YXggXGcgZm9sbG93ZWQgYnkgIGEKKyAgICAgICBuYW1lIG9yIGEgbnVtYmVyIGVuY2xvc2VkIGVpdGhlciBpbiBhbmdsZSBicmFja2V0cyBvciBzaW5nbGUgcXVvdGVzLCBpcworICAgICAgIGFuIGFsdGVybmF0aXZlIHN5bnRheCBmb3IgcmVmZXJlbmNpbmcgYSAgc3VicGF0dGVybiAgYXMgIGEgIHN1YnJvdXRpbmUsCisgICAgICAgcG9zc2libHkgIHJlY3Vyc2l2ZWx5LiBIZXJlIGFyZSB0d28gb2YgdGhlIGV4YW1wbGVzIHVzZWQgYWJvdmUsIHJld3JpdC0KKyAgICAgICB0ZW4gdXNpbmcgdGhpcyBzeW50YXg6CisKKyAgICAgICAgICg/PHBuPiBcKCAoICg/PlteKCldKykgfCBcZzxwbj4gKSogXCkgKQorICAgICAgICAgKHNlbnN8cmVzcG9ucyllIGFuZCBcZycxJ2liaWxpdHkKKworICAgICAgIFBDUkUyIHN1cHBvcnRzIGFuIGV4dGVuc2lvbiB0byBPbmlndXJ1bWE6IGlmIGEgbnVtYmVyIGlzIHByZWNlZGVkIGJ5ICBhCisgICAgICAgcGx1cyBvciBhIG1pbnVzIHNpZ24gaXQgaXMgdGFrZW4gYXMgYSByZWxhdGl2ZSByZWZlcmVuY2UuIEZvciBleGFtcGxlOgorCisgICAgICAgICAoYWJjKSg/aTpcZzwtMT4pCisKKyAgICAgICBOb3RlICB0aGF0IFxney4uLn0gKFBlcmwgc3ludGF4KSBhbmQgXGc8Li4uPiAoT25pZ3VydW1hIHN5bnRheCkgYXJlIG5vdAorICAgICAgIHN5bm9ueW1vdXMuIFRoZSBmb3JtZXIgaXMgYSBiYWNrIHJlZmVyZW5jZTsgdGhlIGxhdHRlciBpcyBhICBzdWJyb3V0aW5lCisgICAgICAgY2FsbC4KKworCitDQUxMT1VUUworCisgICAgICAgUGVybCBoYXMgYSBmZWF0dXJlIHdoZXJlYnkgdXNpbmcgdGhlIHNlcXVlbmNlICg/ey4uLn0pIGNhdXNlcyBhcmJpdHJhcnkKKyAgICAgICBQZXJsIGNvZGUgdG8gYmUgb2JleWVkIGluIHRoZSBtaWRkbGUgb2YgbWF0Y2hpbmcgYSByZWd1bGFyICBleHByZXNzaW9uLgorICAgICAgIFRoaXMgbWFrZXMgaXQgcG9zc2libGUsIGFtb25nc3Qgb3RoZXIgdGhpbmdzLCB0byBleHRyYWN0IGRpZmZlcmVudCBzdWItCisgICAgICAgc3RyaW5ncyB0aGF0IG1hdGNoIHRoZSBzYW1lIHBhaXIgb2YgcGFyZW50aGVzZXMgd2hlbiB0aGVyZSBpcyBhIHJlcGV0aS0KKyAgICAgICB0aW9uLgorCisgICAgICAgUENSRTIgIHByb3ZpZGVzICBhICBzaW1pbGFyIGZlYXR1cmUsIGJ1dCBvZiBjb3Vyc2UgaXQgY2Fubm90IG9iZXkgYXJiaS0KKyAgICAgICB0cmFyeSBQZXJsIGNvZGUuIFRoZSBmZWF0dXJlIGlzIGNhbGxlZCAiY2FsbG91dCIuIFRoZSBjYWxsZXIgIG9mICBQQ1JFMgorICAgICAgIHByb3ZpZGVzICBhbiAgZXh0ZXJuYWwgIGZ1bmN0aW9uICBieSBwdXR0aW5nIGl0cyBlbnRyeSBwb2ludCBpbiBhIG1hdGNoCisgICAgICAgY29udGV4dCB1c2luZyB0aGUgZnVuY3Rpb24gcGNyZTJfc2V0X2NhbGxvdXQoKSwgYW5kIHRoZW4gIHBhc3NpbmcgIHRoYXQKKyAgICAgICBjb250ZXh0ICB0byAgcGNyZTJfbWF0Y2goKSBvciBwY3JlMl9kZmFfbWF0Y2goKS4gSWYgbm8gbWF0Y2ggY29udGV4dCBpcworICAgICAgIHBhc3NlZCwgb3IgaWYgdGhlIGNhbGxvdXQgZW50cnkgcG9pbnQgaXMgc2V0IHRvIE5VTEwsIGNhbGxvdXRzIGFyZSBkaXMtCisgICAgICAgYWJsZWQuCisKKyAgICAgICBXaXRoaW4gIGEgIHJlZ3VsYXIgZXhwcmVzc2lvbiwgKD9DPGFyZz4pIGluZGljYXRlcyBhIHBvaW50IGF0IHdoaWNoIHRoZQorICAgICAgIGV4dGVybmFsIGZ1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZC4gVGhlcmUgIGFyZSAgdHdvICBraW5kcyAgb2YgIGNhbGxvdXQ6CisgICAgICAgdGhvc2UgIHdpdGggYSBudW1lcmljYWwgYXJndW1lbnQgYW5kIHRob3NlIHdpdGggYSBzdHJpbmcgYXJndW1lbnQuICg/QykKKyAgICAgICBvbiBpdHMgb3duIHdpdGggbm8gYXJndW1lbnQgaXMgdHJlYXRlZCBhcyAoP0MwKS4gQSAgbnVtZXJpY2FsICBhcmd1bWVudAorICAgICAgIGFsbG93cyAgdGhlICBhcHBsaWNhdGlvbiAgdG8gIGRpc3Rpbmd1aXNoICBiZXR3ZWVuICBkaWZmZXJlbnQgY2FsbG91dHMuCisgICAgICAgU3RyaW5nIGFyZ3VtZW50cyB3ZXJlIGFkZGVkIGZvciByZWxlYXNlIDEwLjIwIHRvIG1ha2UgaXQgIHBvc3NpYmxlICBmb3IKKyAgICAgICBzY3JpcHQgIGxhbmd1YWdlcyB0aGF0IHVzZSBQQ1JFMiB0byBlbWJlZCBzaG9ydCBzY3JpcHRzIHdpdGhpbiBwYXR0ZXJucworICAgICAgIGluIGEgc2ltaWxhciB3YXkgdG8gUGVybC4KKworICAgICAgIER1cmluZyBtYXRjaGluZywgd2hlbiBQQ1JFMiByZWFjaGVzIGEgY2FsbG91dCBwb2ludCwgdGhlIGV4dGVybmFsIGZ1bmMtCisgICAgICAgdGlvbiAgaXMgIGNhbGxlZC4gIEl0IGlzIHByb3ZpZGVkIHdpdGggdGhlIG51bWJlciBvciBzdHJpbmcgYXJndW1lbnQgb2YKKyAgICAgICB0aGUgY2FsbG91dCwgdGhlIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLCBhbmQgb25lIGl0ZW0gb2YgZGF0YSB0aGF0ICBpcworICAgICAgIGFsc28gc2V0IGluIHRoZSBtYXRjaCBibG9jay4gVGhlIGNhbGxvdXQgZnVuY3Rpb24gbWF5IGNhdXNlIG1hdGNoaW5nIHRvCisgICAgICAgcHJvY2VlZCwgdG8gYmFja3RyYWNrLCBvciB0byBmYWlsLgorCisgICAgICAgQnkgZGVmYXVsdCwgUENSRTIgaW1wbGVtZW50cyBhICBudW1iZXIgIG9mICBvcHRpbWl6YXRpb25zICBhdCAgbWF0Y2hpbmcKKyAgICAgICB0aW1lLCAgYW5kICBvbmUgIHNpZGUtZWZmZWN0IGlzIHRoYXQgc29tZXRpbWVzIGNhbGxvdXRzIGFyZSBza2lwcGVkLiBJZgorICAgICAgIHlvdSBuZWVkIGFsbCBwb3NzaWJsZSBjYWxsb3V0cyB0byBoYXBwZW4sIHlvdSBuZWVkIHRvIHNldCBvcHRpb25zICB0aGF0CisgICAgICAgZGlzYWJsZSAgdGhlIHJlbGV2YW50IG9wdGltaXphdGlvbnMuIE1vcmUgZGV0YWlscywgaW5jbHVkaW5nIGEgY29tcGxldGUKKyAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIHRvIHRoZSBjYWxsb3V0ICBmdW5jdGlvbiwgIGFyZQorICAgICAgIGdpdmVuIGluIHRoZSBwY3JlMmNhbGxvdXQgZG9jdW1lbnRhdGlvbi4KKworICAgQ2FsbG91dHMgd2l0aCBudW1lcmljYWwgYXJndW1lbnRzCisKKyAgICAgICBJZiAgeW91ICBqdXN0ICB3YW50ICB0byAgaGF2ZSAgYSBtZWFucyBvZiBpZGVudGlmeWluZyBkaWZmZXJlbnQgY2FsbG91dAorICAgICAgIHBvaW50cywgcHV0IGEgbnVtYmVyIGxlc3MgdGhhbiAyNTYgYWZ0ZXIgdGhlICBsZXR0ZXIgIEMuICBGb3IgIGV4YW1wbGUsCisgICAgICAgdGhpcyBwYXR0ZXJuIGhhcyB0d28gY2FsbG91dCBwb2ludHM6CisKKyAgICAgICAgICg/QzEpYWJjKD9DMilkZWYKKworICAgICAgIElmICB0aGUgUENSRTJfQVVUT19DQUxMT1VUIGZsYWcgaXMgcGFzc2VkIHRvIHBjcmUyX2NvbXBpbGUoKSwgbnVtZXJpY2FsCisgICAgICAgY2FsbG91dHMgYXJlIGF1dG9tYXRpY2FsbHkgaW5zdGFsbGVkIGJlZm9yZSBlYWNoIGl0ZW0gaW4gIHRoZSAgcGF0dGVybi4KKyAgICAgICBUaGV5ICBhcmUgYWxsIG51bWJlcmVkIDI1NS4gSWYgdGhlcmUgaXMgYSBjb25kaXRpb25hbCBncm91cCBpbiB0aGUgcGF0LQorICAgICAgIHRlcm4gd2hvc2UgY29uZGl0aW9uIGlzIGFuIGFzc2VydGlvbiwgYW4gYWRkaXRpb25hbCBjYWxsb3V0IGlzIGluc2VydGVkCisgICAgICAganVzdCAgYmVmb3JlIHRoZSBjb25kaXRpb24uIEFuIGV4cGxpY2l0IGNhbGxvdXQgbWF5IGFsc28gYmUgc2V0IGF0IHRoaXMKKyAgICAgICBwb3NpdGlvbiwgYXMgaW4gdGhpcyBleGFtcGxlOgorCisgICAgICAgICAoPyg/QzkpKD89YSlhYmN8ZGVmKQorCisgICAgICAgTm90ZSB0aGF0IHRoaXMgYXBwbGllcyBvbmx5IHRvIGFzc2VydGlvbiBjb25kaXRpb25zLCBub3QgdG8gb3RoZXIgdHlwZXMKKyAgICAgICBvZiBjb25kaXRpb24uCisKKyAgIENhbGxvdXRzIHdpdGggc3RyaW5nIGFyZ3VtZW50cworCisgICAgICAgQSAgZGVsaW1pdGVkICBzdHJpbmcgbWF5IGJlIHVzZWQgaW5zdGVhZCBvZiBhIG51bWJlciBhcyBhIGNhbGxvdXQgYXJndS0KKyAgICAgICBtZW50LiBUaGUgc3RhcnRpbmcgZGVsaW1pdGVyIG11c3QgYmUgb25lIG9mIGAgJyAiIF4gJSAjICAkICB7ICBhbmQgIHRoZQorICAgICAgIGVuZGluZyBkZWxpbWl0ZXIgaXMgdGhlIHNhbWUgYXMgdGhlIHN0YXJ0LCBleGNlcHQgZm9yIHssIHdoZXJlIHRoZSBlbmQtCisgICAgICAgaW5nIGRlbGltaXRlciBpcyB9LiBJZiAgdGhlICBlbmRpbmcgIGRlbGltaXRlciAgaXMgIG5lZWRlZCAgd2l0aGluICB0aGUKKyAgICAgICBzdHJpbmcsIGl0IG11c3QgYmUgZG91YmxlZC4gRm9yIGV4YW1wbGU6CisKKyAgICAgICAgICg/QydhYiAnJ2MnJyBkJyl4eXooP0N7YW55IHRleHR9KXBxcgorCisgICAgICAgVGhlICBkb3VibGluZyAgaXMgIHJlbW92ZWQgIGJlZm9yZSAgdGhlIHN0cmluZyBpcyBwYXNzZWQgdG8gdGhlIGNhbGxvdXQKKyAgICAgICBmdW5jdGlvbi4KKworCitCQUNLVFJBQ0tJTkcgQ09OVFJPTAorCisgICAgICAgUGVybCA1LjEwIGludHJvZHVjZWQgYSBudW1iZXIgb2YgIlNwZWNpYWwgQmFja3RyYWNraW5nIENvbnRyb2wgIFZlcmJzIiwKKyAgICAgICB3aGljaCAgYXJlICBzdGlsbCAgZGVzY3JpYmVkIGluIHRoZSBQZXJsIGRvY3VtZW50YXRpb24gYXMgImV4cGVyaW1lbnRhbAorICAgICAgIGFuZCBzdWJqZWN0IHRvIGNoYW5nZSBvciByZW1vdmFsIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUGVybCIuIEl0ICBnb2VzCisgICAgICAgb24gIHRvICBzYXk6ICAiVGhlaXIgIHVzYWdlIGluIHByb2R1Y3Rpb24gY29kZSBzaG91bGQgYmUgbm90ZWQgdG8gYXZvaWQKKyAgICAgICBwcm9ibGVtcyBkdXJpbmcgdXBncmFkZXMuIiBUaGUgc2FtZSByZW1hcmtzIGFwcGx5IHRvIHRoZSBQQ1JFMiBmZWF0dXJlcworICAgICAgIGRlc2NyaWJlZCBpbiB0aGlzIHNlY3Rpb24uCisKKyAgICAgICBUaGUgIG5ldyB2ZXJicyBtYWtlIHVzZSBvZiB3aGF0IHdhcyBwcmV2aW91c2x5IGludmFsaWQgc3ludGF4OiBhbiBvcGVuLQorICAgICAgIGluZyBwYXJlbnRoZXNpcyBmb2xsb3dlZCBieSBhbiBhc3Rlcmlzay4gVGhleSBhcmUgZ2VuZXJhbGx5IG9mIHRoZSBmb3JtCisgICAgICAgKCpWRVJCKSBvciAoKlZFUkI6TkFNRSkuIFNvbWUgdmVyYnMgdGFrZSBlaXRoZXIgZm9ybSwgcG9zc2libHkgYmVoYXZpbmcKKyAgICAgICBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgYSBuYW1lIGlzIHByZXNlbnQuCisKKyAgICAgICBCeSBkZWZhdWx0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwsIGEgIG5hbWUgIGlzICBhbnkgIHNlcXVlbmNlICBvZgorICAgICAgIGNoYXJhY3RlcnMgdGhhdCBkb2VzIG5vdCBpbmNsdWRlIGEgY2xvc2luZyBwYXJlbnRoZXNpcy4gVGhlIG5hbWUgaXMgbm90CisgICAgICAgcHJvY2Vzc2VkIGluIGFueSB3YXksIGFuZCBpdCBpcyAgbm90ICBwb3NzaWJsZSAgdG8gIGluY2x1ZGUgIGEgIGNsb3NpbmcKKyAgICAgICBwYXJlbnRoZXNpcyBpbiB0aGUgbmFtZS4gIEhvd2V2ZXIsIGlmIHRoZSBQQ1JFMl9BTFRfVkVSQk5BTUVTIG9wdGlvbiBpcworICAgICAgIHNldCwgbm9ybWFsIGJhY2tzbGFzaCBwcm9jZXNzaW5nIGlzIGFwcGxpZWQgdG8gdmVyYiBuYW1lcyBhbmQgIG9ubHkgIGFuCisgICAgICAgdW5lc2NhcGVkICBjbG9zaW5nIHBhcmVudGhlc2lzIHRlcm1pbmF0ZXMgdGhlIG5hbWUuIEEgY2xvc2luZyBwYXJlbnRoZS0KKyAgICAgICBzaXMgY2FuIGJlIGluY2x1ZGVkIGluIGEgbmFtZSBlaXRoZXIgYXMgXCkgb3IgYmV0d2VlbiBcUSBhbmQgXEUuIElmIHRoZQorICAgICAgIFBDUkUyX0VYVEVOREVEICBvcHRpb24gIGlzICBzZXQsICB1bmVzY2FwZWQgd2hpdGVzcGFjZSBpbiB2ZXJiIG5hbWVzIGlzCisgICAgICAgc2tpcHBlZCBhbmQgIy1jb21tZW50cyBhcmUgcmVjb2duaXplZCwgZXhhY3RseSBhcyBpbiB0aGUgIHJlc3QgIG9mICB0aGUKKyAgICAgICBwYXR0ZXJuLgorCisgICAgICAgVGhlICBtYXhpbXVtICBsZW5ndGggb2YgYSBuYW1lIGlzIDI1NSBpbiB0aGUgOC1iaXQgbGlicmFyeSBhbmQgNjU1MzUgaW4KKyAgICAgICB0aGUgMTYtYml0IGFuZCAzMi1iaXQgbGlicmFyaWVzLiBJZiB0aGUgbmFtZSBpcyBlbXB0eSwgdGhhdCBpcywgaWYgIHRoZQorICAgICAgIGNsb3NpbmcgIHBhcmVudGhlc2lzIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGNvbG9uLCB0aGUgZWZmZWN0IGlzIGFzIGlmCisgICAgICAgdGhlIGNvbG9uIHdlcmUgbm90IHRoZXJlLiBBbnkgbnVtYmVyIG9mIHRoZXNlIHZlcmJzIG1heSBvY2N1ciBpbiBhIHBhdC0KKyAgICAgICB0ZXJuLgorCisgICAgICAgU2luY2UgIHRoZXNlICB2ZXJicyAgYXJlICBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBiYWNrdHJhY2tpbmcsIG1vc3Qgb2YKKyAgICAgICB0aGVtIGNhbiBiZSB1c2VkIG9ubHkgd2hlbiB0aGUgcGF0dGVybiBpcyB0byBiZSBtYXRjaGVkIHVzaW5nIHRoZSAgdHJhLQorICAgICAgIGRpdGlvbmFsIG1hdGNoaW5nIGZ1bmN0aW9uLCBiZWNhdXNlIHRoZXNlIHVzZSBhIGJhY2t0cmFja2luZyBhbGdvcml0aG0uCisgICAgICAgV2l0aCB0aGUgZXhjZXB0aW9uIG9mICgqRkFJTCksIHdoaWNoIGJlaGF2ZXMgbGlrZSAgYSAgZmFpbGluZyAgbmVnYXRpdmUKKyAgICAgICBhc3NlcnRpb24sIHRoZSBiYWNrdHJhY2tpbmcgY29udHJvbCB2ZXJicyBjYXVzZSBhbiBlcnJvciBpZiBlbmNvdW50ZXJlZAorICAgICAgIGJ5IHRoZSBERkEgbWF0Y2hpbmcgZnVuY3Rpb24uCisKKyAgICAgICBUaGUgYmVoYXZpb3VyIG9mIHRoZXNlIHZlcmJzIGluIHJlcGVhdGVkICBncm91cHMsICBhc3NlcnRpb25zLCAgYW5kICBpbgorICAgICAgIHN1YnBhdHRlcm5zIGNhbGxlZCBhcyBzdWJyb3V0aW5lcyAod2hldGhlciBvciBub3QgcmVjdXJzaXZlbHkpIGlzIGRvY3UtCisgICAgICAgbWVudGVkIGJlbG93LgorCisgICBPcHRpbWl6YXRpb25zIHRoYXQgYWZmZWN0IGJhY2t0cmFja2luZyB2ZXJicworCisgICAgICAgUENSRTIgY29udGFpbnMgc29tZSBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIHVzZWQgdG8gc3BlZWQgdXAgbWF0Y2hpbmcgYnkKKyAgICAgICBydW5uaW5nIHNvbWUgY2hlY2tzIGF0IHRoZSBzdGFydCBvZiBlYWNoIG1hdGNoIGF0dGVtcHQuIEZvciBleGFtcGxlLCBpdAorICAgICAgIG1heSBrbm93IHRoZSBtaW5pbXVtIGxlbmd0aCBvZiBtYXRjaGluZyBzdWJqZWN0LCBvciB0aGF0ICBhICBwYXJ0aWN1bGFyCisgICAgICAgY2hhcmFjdGVyIG11c3QgYmUgcHJlc2VudC4gV2hlbiBvbmUgb2YgdGhlc2Ugb3B0aW1pemF0aW9ucyBieXBhc3NlcyB0aGUKKyAgICAgICBydW5uaW5nIG9mIGEgbWF0Y2gsICBhbnkgIGluY2x1ZGVkICBiYWNrdHJhY2tpbmcgIHZlcmJzICB3aWxsICBub3QsICBvZgorICAgICAgIGNvdXJzZSwgYmUgcHJvY2Vzc2VkLiBZb3UgY2FuIHN1cHByZXNzIHRoZSBzdGFydC1vZi1tYXRjaCBvcHRpbWl6YXRpb25zCisgICAgICAgYnkgc2V0dGluZyB0aGUgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUgb3B0aW9uIHdoZW4gIGNhbGxpbmcgIHBjcmUyX2NvbS0KKyAgICAgICBwaWxlKCksICBvciBieSBzdGFydGluZyB0aGUgcGF0dGVybiB3aXRoICgqTk9fU1RBUlRfT1BUKS4gVGhlcmUgaXMgbW9yZQorICAgICAgIGRpc2N1c3Npb24gb2YgdGhpcyBvcHRpb24gaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIkNvbXBpbGluZyBhIHBhdHRlcm4iCisgICAgICAgaW4gdGhlIHBjcmUyYXBpIGRvY3VtZW50YXRpb24uCisKKyAgICAgICBFeHBlcmltZW50cyAgd2l0aCAgUGVybCAgc3VnZ2VzdCB0aGF0IGl0IHRvbyBoYXMgc2ltaWxhciBvcHRpbWl6YXRpb25zLAorICAgICAgIHNvbWV0aW1lcyBsZWFkaW5nIHRvIGFub21hbG91cyByZXN1bHRzLgorCisgICBWZXJicyB0aGF0IGFjdCBpbW1lZGlhdGVseQorCisgICAgICAgVGhlIGZvbGxvd2luZyB2ZXJicyBhY3QgYXMgc29vbiBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZC4gVGhleSAgbWF5ICBub3QKKyAgICAgICBiZSBmb2xsb3dlZCBieSBhIG5hbWUuCisKKyAgICAgICAgICAoKkFDQ0VQVCkKKworICAgICAgIFRoaXMgIHZlcmIgY2F1c2VzIHRoZSBtYXRjaCB0byBlbmQgc3VjY2Vzc2Z1bGx5LCBza2lwcGluZyB0aGUgcmVtYWluZGVyCisgICAgICAgb2YgdGhlIHBhdHRlcm4uIEhvd2V2ZXIsIHdoZW4gaXQgaXMgaW5zaWRlIGEgc3VicGF0dGVybiB0aGF0IGlzICBjYWxsZWQKKyAgICAgICBhcyAgYSAgc3Vicm91dGluZSwgb25seSB0aGF0IHN1YnBhdHRlcm4gaXMgZW5kZWQgc3VjY2Vzc2Z1bGx5LiBNYXRjaGluZworICAgICAgIHRoZW4gY29udGludWVzIGF0IHRoZSBvdXRlciBsZXZlbC4gSWYgKCpBQ0NFUFQpIGluIHRyaWdnZXJlZCBpbiBhIHBvc2ktCisgICAgICAgdGl2ZSAgYXNzZXJ0aW9uLCAgdGhlICBhc3NlcnRpb24gc3VjY2VlZHM7IGluIGEgbmVnYXRpdmUgYXNzZXJ0aW9uLCB0aGUKKyAgICAgICBhc3NlcnRpb24gZmFpbHMuCisKKyAgICAgICBJZiAoKkFDQ0VQVCkgaXMgaW5zaWRlIGNhcHR1cmluZyBwYXJlbnRoZXNlcywgdGhlIGRhdGEgc28gZmFyICBpcyAgY2FwLQorICAgICAgIHR1cmVkLiBGb3IgZXhhbXBsZToKKworICAgICAgICAgQSgoPzpBfEIoKkFDQ0VQVCl8QylEKQorCisgICAgICAgVGhpcyAgbWF0Y2hlcyAgIkFCIiwgIkFBRCIsIG9yICJBQ0QiOyB3aGVuIGl0IG1hdGNoZXMgIkFCIiwgIkIiIGlzIGNhcC0KKyAgICAgICB0dXJlZCBieSB0aGUgb3V0ZXIgcGFyZW50aGVzZXMuCisKKyAgICAgICAgICgqRkFJTCkgb3IgKCpGKQorCisgICAgICAgVGhpcyB2ZXJiIGNhdXNlcyBhIG1hdGNoaW5nIGZhaWx1cmUsIGZvcmNpbmcgYmFja3RyYWNraW5nIHRvIG9jY3VyLiAgSXQKKyAgICAgICBpcyAgZXF1aXZhbGVudCB0byAoPyEpIGJ1dCBlYXNpZXIgdG8gcmVhZC4gVGhlIFBlcmwgZG9jdW1lbnRhdGlvbiBub3RlcworICAgICAgIHRoYXQgaXQgaXMgcHJvYmFibHkgdXNlZnVsIG9ubHkgd2hlbiBjb21iaW5lZCAgd2l0aCAgKD97fSkgIG9yICAoPz97fSkuCisgICAgICAgVGhvc2UgIGFyZSwgb2YgY291cnNlLCBQZXJsIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIFBDUkUyLiBUaGUKKyAgICAgICBuZWFyZXN0IGVxdWl2YWxlbnQgaXMgdGhlIGNhbGxvdXQgZmVhdHVyZSwgYXMgZm9yIGV4YW1wbGUgaW4gdGhpcyAgcGF0LQorICAgICAgIHRlcm46CisKKyAgICAgICAgIGErKD9DKSgqRkFJTCkKKworICAgICAgIEEgIG1hdGNoICB3aXRoIHRoZSBzdHJpbmcgImFhYWEiIGFsd2F5cyBmYWlscywgYnV0IHRoZSBjYWxsb3V0IGlzIHRha2VuCisgICAgICAgYmVmb3JlIGVhY2ggYmFja3RyYWNrIGhhcHBlbnMgKGluIHRoaXMgZXhhbXBsZSwgMTAgdGltZXMpLgorCisgICBSZWNvcmRpbmcgd2hpY2ggcGF0aCB3YXMgdGFrZW4KKworICAgICAgIFRoZXJlIGlzIG9uZSB2ZXJiIHdob3NlIG1haW4gcHVycG9zZSAgaXMgIHRvICB0cmFjayAgaG93ICBhICBtYXRjaCAgd2FzCisgICAgICAgYXJyaXZlZCAgYXQsICB0aG91Z2ggIGl0ICBhbHNvICBoYXMgYSBzZWNvbmRhcnkgdXNlIGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgICAgICBhZHZhbmNpbmcgdGhlIG1hdGNoIHN0YXJ0aW5nIHBvaW50IChzZWUgKCpTS0lQKSBiZWxvdykuCisKKyAgICAgICAgICgqTUFSSzpOQU1FKSBvciAoKjpOQU1FKQorCisgICAgICAgQSBuYW1lIGlzIGFsd2F5cyAgcmVxdWlyZWQgIHdpdGggIHRoaXMgIHZlcmIuICBUaGVyZSAgbWF5ICBiZSAgYXMgIG1hbnkKKyAgICAgICBpbnN0YW5jZXMgIG9mICAoKk1BUkspIGFzIHlvdSBsaWtlIGluIGEgcGF0dGVybiwgYW5kIHRoZWlyIG5hbWVzIGRvIG5vdAorICAgICAgIGhhdmUgdG8gYmUgdW5pcXVlLgorCisgICAgICAgV2hlbiBhIG1hdGNoIHN1Y2NlZWRzLCB0aGUgbmFtZSBvZiB0aGUgIGxhc3QtZW5jb3VudGVyZWQgICgqTUFSSzpOQU1FKSwKKyAgICAgICAoKlBSVU5FOk5BTUUpLCAgb3IgICgqVEhFTjpOQU1FKSBvbiB0aGUgbWF0Y2hpbmcgcGF0aCBpcyBwYXNzZWQgYmFjayB0bworICAgICAgIHRoZSBjYWxsZXIgYXMgZGVzY3JpYmVkIGluICB0aGUgIHNlY3Rpb24gIGVudGl0bGVkICAiT3RoZXIgIGluZm9ybWF0aW9uCisgICAgICAgYWJvdXQgIHRoZSAgbWF0Y2giIGluIHRoZSBwY3JlMmFwaSBkb2N1bWVudGF0aW9uLiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YKKyAgICAgICBwY3JlMnRlc3Qgb3V0cHV0LCB3aGVyZSB0aGUgIm1hcmsiIG1vZGlmaWVyIHJlcXVlc3RzIHRoZSByZXRyaWV2YWwgIGFuZAorICAgICAgIG91dHB1dHRpbmcgb2YgKCpNQVJLKSBkYXRhOgorCisgICAgICAgICAgIHJlPiAvWCgqTUFSSzpBKVl8WCgqTUFSSzpCKVovbWFyaworICAgICAgICAgZGF0YT4gWFkKKyAgICAgICAgICAwOiBYWQorICAgICAgICAgTUs6IEEKKyAgICAgICAgIFhaCisgICAgICAgICAgMDogWFoKKyAgICAgICAgIE1LOiBCCisKKyAgICAgICBUaGUgKCpNQVJLKSBuYW1lIGlzIHRhZ2dlZCB3aXRoICJNSzoiIGluIHRoaXMgb3V0cHV0LCBhbmQgaW4gdGhpcyBleGFtLQorICAgICAgIHBsZSBpdCBpbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIHR3byBhbHRlcm5hdGl2ZXMgbWF0Y2hlZC4gVGhpcyBpcyBhICBtb3JlCisgICAgICAgZWZmaWNpZW50ICB3YXkgb2Ygb2J0YWluaW5nIHRoaXMgaW5mb3JtYXRpb24gdGhhbiBwdXR0aW5nIGVhY2ggYWx0ZXJuYS0KKyAgICAgICB0aXZlIGluIGl0cyBvd24gY2FwdHVyaW5nIHBhcmVudGhlc2VzLgorCisgICAgICAgSWYgYSB2ZXJiIHdpdGggYSBuYW1lIGlzIGVuY291bnRlcmVkIGluIGEgcG9zaXRpdmUgIGFzc2VydGlvbiAgdGhhdCAgaXMKKyAgICAgICB0cnVlLCAgdGhlICBuYW1lICBpcyByZWNvcmRlZCBhbmQgcGFzc2VkIGJhY2sgaWYgaXQgaXMgdGhlIGxhc3QtZW5jb3VuLQorICAgICAgIHRlcmVkLiBUaGlzIGRvZXMgbm90IGhhcHBlbiBmb3IgbmVnYXRpdmUgYXNzZXJ0aW9ucyBvciBmYWlsaW5nIHBvc2l0aXZlCisgICAgICAgYXNzZXJ0aW9ucy4KKworICAgICAgIEFmdGVyICBhICBwYXJ0aWFsIG1hdGNoIG9yIGEgZmFpbGVkIG1hdGNoLCB0aGUgbGFzdCBlbmNvdW50ZXJlZCBuYW1lIGluCisgICAgICAgdGhlIGVudGlyZSBtYXRjaCBwcm9jZXNzIGlzIHJldHVybmVkLiBGb3IgZXhhbXBsZToKKworICAgICAgICAgICByZT4gL1goKk1BUks6QSlZfFgoKk1BUks6QilaL21hcmsKKyAgICAgICAgIGRhdGE+IFhQCisgICAgICAgICBObyBtYXRjaCwgbWFyayA9IEIKKworICAgICAgIE5vdGUgdGhhdCBpbiB0aGlzIHVuYW5jaG9yZWQgZXhhbXBsZSB0aGUgIG1hcmsgIGlzICByZXRhaW5lZCAgZnJvbSAgdGhlCisgICAgICAgbWF0Y2ggYXR0ZW1wdCB0aGF0IHN0YXJ0ZWQgYXQgdGhlIGxldHRlciAiWCIgaW4gdGhlIHN1YmplY3QuIFN1YnNlcXVlbnQKKyAgICAgICBtYXRjaCBhdHRlbXB0cyBzdGFydGluZyBhdCAiUCIgYW5kIHRoZW4gd2l0aCBhbiBlbXB0eSBzdHJpbmcgZG8gbm90IGdldAorICAgICAgIGFzIGZhciBhcyB0aGUgKCpNQVJLKSBpdGVtLCBidXQgbmV2ZXJ0aGVsZXNzIGRvIG5vdCByZXNldCBpdC4KKworICAgICAgIElmICB5b3UgIGFyZSAgaW50ZXJlc3RlZCAgaW4gICgqTUFSSykgIHZhbHVlcyBhZnRlciBmYWlsZWQgbWF0Y2hlcywgeW91CisgICAgICAgc2hvdWxkIHByb2JhYmx5IHNldCB0aGUgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUgb3B0aW9uIChzZWUgIGFib3ZlKSAgdG8KKyAgICAgICBlbnN1cmUgdGhhdCB0aGUgbWF0Y2ggaXMgYWx3YXlzIGF0dGVtcHRlZC4KKworICAgVmVyYnMgdGhhdCBhY3QgYWZ0ZXIgYmFja3RyYWNraW5nCisKKyAgICAgICBUaGUgZm9sbG93aW5nIHZlcmJzIGRvIG5vdGhpbmcgd2hlbiB0aGV5IGFyZSBlbmNvdW50ZXJlZC4gTWF0Y2hpbmcgY29uLQorICAgICAgIHRpbnVlcyB3aXRoIHdoYXQgZm9sbG93cywgYnV0IGlmIHRoZXJlIGlzIG5vIHN1YnNlcXVlbnQgbWF0Y2gsICBjYXVzaW5nCisgICAgICAgYSAgYmFja3RyYWNrICB0byAgdGhlICB2ZXJiLCBhIGZhaWx1cmUgaXMgZm9yY2VkLiBUaGF0IGlzLCBiYWNrdHJhY2tpbmcKKyAgICAgICBjYW5ub3QgcGFzcyB0byB0aGUgbGVmdCBvZiB0aGUgdmVyYi4gSG93ZXZlciwgd2hlbiBvbmUgb2YgIHRoZXNlICB2ZXJicworICAgICAgIGFwcGVhcnMgaW5zaWRlIGFuIGF0b21pYyBncm91cCAod2hpY2ggaW5jbHVkZXMgYW55IGdyb3VwIHRoYXQgaXMgY2FsbGVkCisgICAgICAgYXMgYSBzdWJyb3V0aW5lKSBvciBpbiBhbiBhc3NlcnRpb24gdGhhdCBpcyB0cnVlLCBpdHMgIGVmZmVjdCAgaXMgIGNvbi0KKyAgICAgICBmaW5lZCAgdG8gdGhhdCBncm91cCwgYmVjYXVzZSBvbmNlIHRoZSBncm91cCBoYXMgYmVlbiBtYXRjaGVkLCB0aGVyZSBpcworICAgICAgIG5ldmVyIGFueSBiYWNrdHJhY2tpbmcgaW50byBpdC4gSW4gdGhpcyBzaXR1YXRpb24sIGJhY2t0cmFja2luZyBoYXMgIHRvCisgICAgICAganVtcCB0byB0aGUgbGVmdCBvZiB0aGUgZW50aXJlIGF0b21pYyBncm91cCBvciBhc3NlcnRpb24uCisKKyAgICAgICBUaGVzZSAgdmVyYnMgIGRpZmZlciAgaW4gZXhhY3RseSB3aGF0IGtpbmQgb2YgZmFpbHVyZSBvY2N1cnMgd2hlbiBiYWNrLQorICAgICAgIHRyYWNraW5nIHJlYWNoZXMgdGhlbS4gVGhlIGJlaGF2aW91ciBkZXNjcmliZWQgYmVsb3cgIGlzICB3aGF0ICBoYXBwZW5zCisgICAgICAgd2hlbiAgdGhlICB2ZXJiIGlzIG5vdCBpbiBhIHN1YnJvdXRpbmUgb3IgYW4gYXNzZXJ0aW9uLiBTdWJzZXF1ZW50IHNlYy0KKyAgICAgICB0aW9ucyBjb3ZlciB0aGVzZSBzcGVjaWFsIGNhc2VzLgorCisgICAgICAgICAoKkNPTU1JVCkKKworICAgICAgIFRoaXMgdmVyYiwgd2hpY2ggbWF5IG5vdCBiZSBmb2xsb3dlZCBieSBhIG5hbWUsIGNhdXNlcyB0aGUgd2hvbGUgIG1hdGNoCisgICAgICAgdG8gZmFpbCBvdXRyaWdodCBpZiB0aGVyZSBpcyBhIGxhdGVyIG1hdGNoaW5nIGZhaWx1cmUgdGhhdCBjYXVzZXMgYmFjay0KKyAgICAgICB0cmFja2luZyB0byByZWFjaCBpdC4gRXZlbiBpZiB0aGUgcGF0dGVybiAgaXMgIHVuYW5jaG9yZWQsICBubyAgZnVydGhlcgorICAgICAgIGF0dGVtcHRzIHRvIGZpbmQgYSBtYXRjaCBieSBhZHZhbmNpbmcgdGhlIHN0YXJ0aW5nIHBvaW50IHRha2UgcGxhY2UuIElmCisgICAgICAgKCpDT01NSVQpIGlzIHRoZSBvbmx5IGJhY2t0cmFja2luZyB2ZXJiIHRoYXQgaXMgIGVuY291bnRlcmVkLCAgb25jZSAgaXQKKyAgICAgICBoYXMgIGJlZW4gIHBhc3NlZCAgcGNyZTJfbWF0Y2goKSBpcyBjb21taXR0ZWQgdG8gZmluZGluZyBhIG1hdGNoIGF0IHRoZQorICAgICAgIGN1cnJlbnQgc3RhcnRpbmcgcG9pbnQsIG9yIG5vdCBhdCBhbGwuIEZvciBleGFtcGxlOgorCisgICAgICAgICBhKygqQ09NTUlUKWIKKworICAgICAgIFRoaXMgbWF0Y2hlcyAieHhhYWIiIGJ1dCBub3QgImFhY2FhYiIuIEl0IGNhbiBiZSB0aG91Z2h0IG9mIGFzICBhICBraW5kCisgICAgICAgb2YgZHluYW1pYyBhbmNob3IsIG9yICJJJ3ZlIHN0YXJ0ZWQsIHNvIEkgbXVzdCBmaW5pc2guIiBUaGUgbmFtZSBvZiB0aGUKKyAgICAgICBtb3N0IHJlY2VudGx5IHBhc3NlZCAoKk1BUkspIGluIHRoZSBwYXRoIGlzIHBhc3NlZCBiYWNrIHdoZW4gICgqQ09NTUlUKQorICAgICAgIGZvcmNlcyBhIG1hdGNoIGZhaWx1cmUuCisKKyAgICAgICBJZiAgdGhlcmUgIGlzIG1vcmUgdGhhbiBvbmUgYmFja3RyYWNraW5nIHZlcmIgaW4gYSBwYXR0ZXJuLCBhIGRpZmZlcmVudAorICAgICAgIG9uZSB0aGF0IGZvbGxvd3MgKCpDT01NSVQpIG1heSBiZSB0cmlnZ2VyZWQgZmlyc3QsICBzbyAgbWVyZWx5ICBwYXNzaW5nCisgICAgICAgKCpDT01NSVQpIGR1cmluZyBhIG1hdGNoIGRvZXMgbm90IGFsd2F5cyBndWFyYW50ZWUgdGhhdCBhIG1hdGNoIG11c3QgYmUKKyAgICAgICBhdCB0aGlzIHN0YXJ0aW5nIHBvaW50LgorCisgICAgICAgTm90ZSB0aGF0ICgqQ09NTUlUKSBhdCB0aGUgc3RhcnQgb2YgYSBwYXR0ZXJuIGlzIG5vdCAgdGhlICBzYW1lICBhcyAgYW4KKyAgICAgICBhbmNob3IsICB1bmxlc3MgUENSRTIncyBzdGFydC1vZi1tYXRjaCBvcHRpbWl6YXRpb25zIGFyZSB0dXJuZWQgb2ZmLCBhcworICAgICAgIHNob3duIGluIHRoaXMgb3V0cHV0IGZyb20gcGNyZTJ0ZXN0OgorCisgICAgICAgICAgIHJlPiAvKCpDT01NSVQpYWJjLworICAgICAgICAgZGF0YT4geHl6YWJjCisgICAgICAgICAgMDogYWJjCisgICAgICAgICBkYXRhPgorICAgICAgICAgcmU+IC8oKkNPTU1JVClhYmMvbm9fc3RhcnRfb3B0aW1pemUKKyAgICAgICAgIGRhdGE+IHh5emFiYworICAgICAgICAgTm8gbWF0Y2gKKworICAgICAgIEZvciB0aGUgZmlyc3QgcGF0dGVybiwgUENSRTIga25vd3MgdGhhdCBhbnkgbWF0Y2ggbXVzdCBzdGFydCB3aXRoICAiYSIsCisgICAgICAgc28gIHRoZSBvcHRpbWl6YXRpb24gc2tpcHMgYWxvbmcgdGhlIHN1YmplY3QgdG8gImEiIGJlZm9yZSBhcHBseWluZyB0aGUKKyAgICAgICBwYXR0ZXJuIHRvIHRoZSBmaXJzdCBzZXQgb2YgZGF0YS4gVGhlIG1hdGNoIGF0dGVtcHQgdGhlbiBzdWNjZWVkcy4gIFRoZQorICAgICAgIHNlY29uZCAgcGF0dGVybiBkaXNhYmxlcyB0aGUgb3B0aW1pemF0aW9uIHRoYXQgc2tpcHMgYWxvbmcgdG8gdGhlIGZpcnN0CisgICAgICAgY2hhcmFjdGVyLiBUaGUgcGF0dGVybiBpcyBub3cgYXBwbGllZCAgc3RhcnRpbmcgIGF0ICAieCIsICBhbmQgIHNvICB0aGUKKyAgICAgICAoKkNPTU1JVCkgIGNhdXNlcyAgdGhlICBtYXRjaCB0byBmYWlsIHdpdGhvdXQgdHJ5aW5nIGFueSBvdGhlciBzdGFydGluZworICAgICAgIHBvaW50cy4KKworICAgICAgICAgKCpQUlVORSkgb3IgKCpQUlVORTpOQU1FKQorCisgICAgICAgVGhpcyB2ZXJiIGNhdXNlcyB0aGUgbWF0Y2ggdG8gZmFpbCBhdCB0aGUgY3VycmVudCBzdGFydGluZyBwb3NpdGlvbiAgaW4KKyAgICAgICB0aGUgc3ViamVjdCBpZiB0aGVyZSBpcyBhIGxhdGVyIG1hdGNoaW5nIGZhaWx1cmUgdGhhdCBjYXVzZXMgYmFja3RyYWNrLQorICAgICAgIGluZyB0byByZWFjaCBpdC4gSWYgdGhlIHBhdHRlcm4gaXMgdW5hbmNob3JlZCwgdGhlICBub3JtYWwgICJidW1wYWxvbmciCisgICAgICAgYWR2YW5jZSAgdG8gIHRoZSBuZXh0IHN0YXJ0aW5nIGNoYXJhY3RlciB0aGVuIGhhcHBlbnMuIEJhY2t0cmFja2luZyBjYW4KKyAgICAgICBvY2N1ciBhcyB1c3VhbCB0byB0aGUgbGVmdCBvZiAoKlBSVU5FKSwgYmVmb3JlIGl0IGlzIHJlYWNoZWQsICBvciAgd2hlbgorICAgICAgIG1hdGNoaW5nICB0byAgdGhlICByaWdodCAgb2YgICgqUFJVTkUpLCBidXQgaWYgdGhlcmUgaXMgbm8gbWF0Y2ggdG8gdGhlCisgICAgICAgcmlnaHQsIGJhY2t0cmFja2luZyBjYW5ub3QgY3Jvc3MgKCpQUlVORSkuIEluIHNpbXBsZSBjYXNlcywgdGhlIHVzZSAgb2YKKyAgICAgICAoKlBSVU5FKSAgaXMganVzdCBhbiBhbHRlcm5hdGl2ZSB0byBhbiBhdG9taWMgZ3JvdXAgb3IgcG9zc2Vzc2l2ZSBxdWFuLQorICAgICAgIHRpZmllciwgYnV0IHRoZXJlIGFyZSBzb21lIHVzZXMgb2YgKCpQUlVORSkgdGhhdCBjYW5ub3QgYmUgZXhwcmVzc2VkIGluCisgICAgICAgYW55ICBvdGhlciAgd2F5LiBJbiBhbiBhbmNob3JlZCBwYXR0ZXJuICgqUFJVTkUpIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMKKyAgICAgICAoKkNPTU1JVCkuCisKKyAgICAgICBUaGUgICBiZWhhdmlvdXIgICBvZiAgICgqUFJVTkU6TkFNRSkgICBpcyAgIHRoZSAgIG5vdCAgIHRoZSAgIHNhbWUgICBhcworICAgICAgICgqTUFSSzpOQU1FKSgqUFJVTkUpLiAgIEl0ICBpcyAgbGlrZSAgKCpNQVJLOk5BTUUpICBpbiB0aGF0IHRoZSBuYW1lIGlzCisgICAgICAgcmVtZW1iZXJlZCBmb3IgIHBhc3NpbmcgIGJhY2sgIHRvICB0aGUgIGNhbGxlci4gIEhvd2V2ZXIsICAoKlNLSVA6TkFNRSkKKyAgICAgICBzZWFyY2hlcyAgb25seSAgZm9yICBuYW1lcyAgc2V0ICB3aXRoICAoKk1BUkspLCAgaWdub3JpbmcgIHRob3NlIHNldCBieQorICAgICAgICgqUFJVTkUpIG9yICgqVEhFTikuCisKKyAgICAgICAgICgqU0tJUCkKKworICAgICAgIFRoaXMgdmVyYiwgd2hlbiBnaXZlbiB3aXRob3V0IGEgbmFtZSwgaXMgbGlrZSAoKlBSVU5FKSwgZXhjZXB0IHRoYXQgIGlmCisgICAgICAgdGhlICBwYXR0ZXJuICBpcyB1bmFuY2hvcmVkLCB0aGUgImJ1bXBhbG9uZyIgYWR2YW5jZSBpcyBub3QgdG8gdGhlIG5leHQKKyAgICAgICBjaGFyYWN0ZXIsIGJ1dCB0byB0aGUgcG9zaXRpb24gaW4gdGhlIHN1YmplY3Qgd2hlcmUgKCpTS0lQKSB3YXMgZW5jb3VuLQorICAgICAgIHRlcmVkLiAgKCpTS0lQKSAgc2lnbmlmaWVzIHRoYXQgd2hhdGV2ZXIgdGV4dCB3YXMgbWF0Y2hlZCBsZWFkaW5nIHVwIHRvCisgICAgICAgaXQgY2Fubm90IGJlIHBhcnQgb2YgYSBzdWNjZXNzZnVsIG1hdGNoLiBDb25zaWRlcjoKKworICAgICAgICAgYSsoKlNLSVApYgorCisgICAgICAgSWYgdGhlIHN1YmplY3QgaXMgImFhYWFjLi4uIiwgIGFmdGVyICB0aGUgIGZpcnN0ICBtYXRjaCAgYXR0ZW1wdCAgZmFpbHMKKyAgICAgICAoc3RhcnRpbmcgIGF0ICB0aGUgIGZpcnN0ICBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZyksIHRoZSBzdGFydGluZyBwb2ludAorICAgICAgIHNraXBzIG9uIHRvIHN0YXJ0IHRoZSBuZXh0IGF0dGVtcHQgYXQgImMiLiBOb3RlIHRoYXQgYSBwb3NzZXNzaXZlIHF1YW4tCisgICAgICAgdGlmZXIgIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzIHRoaXMgZXhhbXBsZTsgYWx0aG91Z2ggaXQgd291bGQKKyAgICAgICBzdXBwcmVzcyBiYWNrdHJhY2tpbmcgIGR1cmluZyAgdGhlICBmaXJzdCAgbWF0Y2ggIGF0dGVtcHQsICB0aGUgIHNlY29uZAorICAgICAgIGF0dGVtcHQgIHdvdWxkICBzdGFydCBhdCB0aGUgc2Vjb25kIGNoYXJhY3RlciBpbnN0ZWFkIG9mIHNraXBwaW5nIG9uIHRvCisgICAgICAgImMiLgorCisgICAgICAgICAoKlNLSVA6TkFNRSkKKworICAgICAgIFdoZW4gKCpTS0lQKSBoYXMgYW4gYXNzb2NpYXRlZCBuYW1lLCBpdHMgYmVoYXZpb3VyIGlzIG1vZGlmaWVkLiBXaGVuIGl0CisgICAgICAgaXMgdHJpZ2dlcmVkLCB0aGUgcHJldmlvdXMgcGF0aCB0aHJvdWdoIHRoZSBwYXR0ZXJuIGlzIHNlYXJjaGVkIGZvciB0aGUKKyAgICAgICBtb3N0IHJlY2VudCAoKk1BUkspIHRoYXQgaGFzIHRoZSAgc2FtZSAgbmFtZS4gIElmICBvbmUgIGlzICBmb3VuZCwgIHRoZQorICAgICAgICJidW1wYWxvbmciIGFkdmFuY2UgaXMgdG8gdGhlIHN1YmplY3QgcG9zaXRpb24gdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0CisgICAgICAgKCpNQVJLKSBpbnN0ZWFkIG9mIHRvIHdoZXJlICgqU0tJUCkgd2FzIGVuY291bnRlcmVkLiBJZiBubyAoKk1BUkspIHdpdGgKKyAgICAgICBhIG1hdGNoaW5nIG5hbWUgaXMgZm91bmQsIHRoZSAoKlNLSVApIGlzIGlnbm9yZWQuCisKKyAgICAgICBOb3RlICB0aGF0ICgqU0tJUDpOQU1FKSBzZWFyY2hlcyBvbmx5IGZvciBuYW1lcyBzZXQgYnkgKCpNQVJLOk5BTUUpLiBJdAorICAgICAgIGlnbm9yZXMgbmFtZXMgdGhhdCBhcmUgc2V0IGJ5ICgqUFJVTkU6TkFNRSkgb3IgKCpUSEVOOk5BTUUpLgorCisgICAgICAgICAoKlRIRU4pIG9yICgqVEhFTjpOQU1FKQorCisgICAgICAgVGhpcyB2ZXJiIGNhdXNlcyBhIHNraXAgdG8gdGhlIG5leHQgaW5uZXJtb3N0ICBhbHRlcm5hdGl2ZSAgd2hlbiAgYmFjay0KKyAgICAgICB0cmFja2luZyAgcmVhY2hlcyAgaXQuICBUaGF0ICBpcywgIGl0ICBjYW5jZWxzIGFueSBmdXJ0aGVyIGJhY2t0cmFja2luZworICAgICAgIHdpdGhpbiB0aGUgY3VycmVudCBhbHRlcm5hdGl2ZS4gSXRzIG5hbWUgIGNvbWVzICBmcm9tICB0aGUgIG9ic2VydmF0aW9uCisgICAgICAgdGhhdCBpdCBjYW4gYmUgdXNlZCBmb3IgYSBwYXR0ZXJuLWJhc2VkIGlmLXRoZW4tZWxzZSBibG9jazoKKworICAgICAgICAgKCBDT05EMSAoKlRIRU4pIEZPTyB8IENPTkQyICgqVEhFTikgQkFSIHwgQ09ORDMgKCpUSEVOKSBCQVogKSAuLi4KKworICAgICAgIElmICB0aGUgQ09ORDEgcGF0dGVybiBtYXRjaGVzLCBGT08gaXMgdHJpZWQgKGFuZCBwb3NzaWJseSBmdXJ0aGVyIGl0ZW1zCisgICAgICAgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgZ3JvdXAgaWYgRk9PIHN1Y2NlZWRzKTsgb24gIGZhaWx1cmUsICB0aGUgIG1hdGNoZXIKKyAgICAgICBza2lwcyAgdG8gIHRoZSBzZWNvbmQgYWx0ZXJuYXRpdmUgYW5kIHRyaWVzIENPTkQyLCB3aXRob3V0IGJhY2t0cmFja2luZworICAgICAgIGludG8gQ09ORDEuIElmIHRoYXQgc3VjY2VlZHMgYW5kIEJBUiBmYWlscywgQ09ORDMgaXMgdHJpZWQuICBJZiAgc3Vic2UtCisgICAgICAgcXVlbnRseSAgQkFaIGZhaWxzLCB0aGVyZSBhcmUgbm8gbW9yZSBhbHRlcm5hdGl2ZXMsIHNvIHRoZXJlIGlzIGEgYmFjay0KKyAgICAgICB0cmFjayB0byB3aGF0ZXZlciBjYW1lIGJlZm9yZSB0aGUgIGVudGlyZSAgZ3JvdXAuICBJZiAgKCpUSEVOKSAgaXMgIG5vdAorICAgICAgIGluc2lkZSBhbiBhbHRlcm5hdGlvbiwgaXQgYWN0cyBsaWtlICgqUFJVTkUpLgorCisgICAgICAgVGhlICAgIGJlaGF2aW91ciAgIG9mICAgKCpUSEVOOk5BTUUpICAgaXMgICB0aGUgICBub3QgICB0aGUgICBzYW1lICAgYXMKKyAgICAgICAoKk1BUks6TkFNRSkoKlRIRU4pLiAgSXQgaXMgbGlrZSAgKCpNQVJLOk5BTUUpICBpbiAgdGhhdCAgdGhlICBuYW1lICBpcworICAgICAgIHJlbWVtYmVyZWQgIGZvciAgcGFzc2luZyAgYmFjayAgdG8gIHRoZSAgY2FsbGVyLiAgSG93ZXZlciwgKCpTS0lQOk5BTUUpCisgICAgICAgc2VhcmNoZXMgb25seSBmb3IgIG5hbWVzICBzZXQgIHdpdGggICgqTUFSSyksICBpZ25vcmluZyAgdGhvc2UgIHNldCAgYnkKKyAgICAgICAoKlBSVU5FKSBhbmQgKCpUSEVOKS4KKworICAgICAgIEEgIHN1YnBhdHRlcm4gdGhhdCBkb2VzIG5vdCBjb250YWluIGEgfCBjaGFyYWN0ZXIgaXMganVzdCBhIHBhcnQgb2YgdGhlCisgICAgICAgZW5jbG9zaW5nIGFsdGVybmF0aXZlOyBpdCBpcyBub3QgYSBuZXN0ZWQgIGFsdGVybmF0aW9uICB3aXRoICBvbmx5ICBvbmUKKyAgICAgICBhbHRlcm5hdGl2ZS4gIFRoZSBlZmZlY3Qgb2YgKCpUSEVOKSBleHRlbmRzIGJleW9uZCBzdWNoIGEgc3VicGF0dGVybiB0bworICAgICAgIHRoZSBlbmNsb3NpbmcgYWx0ZXJuYXRpdmUuIENvbnNpZGVyIHRoaXMgcGF0dGVybiwgd2hlcmUgQSwgQiwgZXRjLiAgYXJlCisgICAgICAgY29tcGxleCAgcGF0dGVybiBmcmFnbWVudHMgdGhhdCBkbyBub3QgY29udGFpbiBhbnkgfCBjaGFyYWN0ZXJzIGF0IHRoaXMKKyAgICAgICBsZXZlbDoKKworICAgICAgICAgQSAoQigqVEhFTilDKSB8IEQKKworICAgICAgIElmIEEgYW5kIEIgYXJlIG1hdGNoZWQsIGJ1dCB0aGVyZSBpcyBhIGZhaWx1cmUgaW4gQywgbWF0Y2hpbmcgZG9lcyAgbm90CisgICAgICAgYmFja3RyYWNrIGludG8gQTsgaW5zdGVhZCBpdCBtb3ZlcyB0byB0aGUgbmV4dCBhbHRlcm5hdGl2ZSwgdGhhdCBpcywgRC4KKyAgICAgICBIb3dldmVyLCBpZiB0aGUgc3VicGF0dGVybiBjb250YWluaW5nICgqVEhFTikgaXMgZ2l2ZW4gYW4gIGFsdGVybmF0aXZlLAorICAgICAgIGl0IGJlaGF2ZXMgZGlmZmVyZW50bHk6CisKKyAgICAgICAgIEEgKEIoKlRIRU4pQyB8ICgqRkFJTCkpIHwgRAorCisgICAgICAgVGhlICBlZmZlY3Qgb2YgKCpUSEVOKSBpcyBub3cgY29uZmluZWQgdG8gdGhlIGlubmVyIHN1YnBhdHRlcm4uIEFmdGVyIGEKKyAgICAgICBmYWlsdXJlIGluIEMsIG1hdGNoaW5nIG1vdmVzIHRvICgqRkFJTCksIHdoaWNoIGNhdXNlcyB0aGUgd2hvbGUgc3VicGF0LQorICAgICAgIHRlcm4gIHRvICBmYWlsICBiZWNhdXNlICB0aGVyZSBhcmUgbm8gbW9yZSBhbHRlcm5hdGl2ZXMgdG8gdHJ5LiBJbiB0aGlzCisgICAgICAgY2FzZSwgbWF0Y2hpbmcgZG9lcyBub3cgYmFja3RyYWNrIGludG8gQS4KKworICAgICAgIE5vdGUgdGhhdCBhIGNvbmRpdGlvbmFsIHN1YnBhdHRlcm4gaXMgIG5vdCAgY29uc2lkZXJlZCAgYXMgIGhhdmluZyAgdHdvCisgICAgICAgYWx0ZXJuYXRpdmVzLCAgYmVjYXVzZSAgb25seSAgb25lICBpcyAgZXZlciB1c2VkLiBJbiBvdGhlciB3b3JkcywgdGhlIHwKKyAgICAgICBjaGFyYWN0ZXIgaW4gYSBjb25kaXRpb25hbCBzdWJwYXR0ZXJuIGhhcyBhIGRpZmZlcmVudCBtZWFuaW5nLiBJZ25vcmluZworICAgICAgIHdoaXRlIHNwYWNlLCBjb25zaWRlcjoKKworICAgICAgICAgXi4qPyAoPyg/PWEpIGEgfCBiKCpUSEVOKWMgKQorCisgICAgICAgSWYgIHRoZSAgc3ViamVjdCAgaXMgICJiYSIsIHRoaXMgcGF0dGVybiBkb2VzIG5vdCBtYXRjaC4gQmVjYXVzZSAuKj8gaXMKKyAgICAgICB1bmdyZWVkeSwgaXQgaW5pdGlhbGx5IG1hdGNoZXMgemVybyAgY2hhcmFjdGVycy4gIFRoZSAgY29uZGl0aW9uICAoPz1hKQorICAgICAgIHRoZW4gIGZhaWxzLCAgdGhlICBjaGFyYWN0ZXIgICJiIiAgaXMgIG1hdGNoZWQsIGJ1dCAiYyIgaXMgbm90LiBBdCB0aGlzCisgICAgICAgcG9pbnQsIG1hdGNoaW5nIGRvZXMgbm90IGJhY2t0cmFjayB0byAuKj8gYXMgbWlnaHQgcGVyaGFwcyBiZSAgZXhwZWN0ZWQKKyAgICAgICBmcm9tICB0aGUgIHByZXNlbmNlICBvZiAgdGhlIHwgY2hhcmFjdGVyLiBUaGUgY29uZGl0aW9uYWwgc3VicGF0dGVybiBpcworICAgICAgIHBhcnQgb2YgdGhlIHNpbmdsZSBhbHRlcm5hdGl2ZSB0aGF0IGNvbXByaXNlcyB0aGUgd2hvbGUgcGF0dGVybiwgYW5kIHNvCisgICAgICAgdGhlICBtYXRjaCAgZmFpbHMuICAoSWYgIHRoZXJlIHdhcyBhIGJhY2t0cmFjayBpbnRvIC4qPywgYWxsb3dpbmcgaXQgdG8KKyAgICAgICBtYXRjaCAiYiIsIHRoZSBtYXRjaCB3b3VsZCBzdWNjZWVkLikKKworICAgICAgIFRoZSB2ZXJicyBqdXN0IGRlc2NyaWJlZCBwcm92aWRlIGZvdXIgZGlmZmVyZW50ICJzdHJlbmd0aHMiIG9mICBjb250cm9sCisgICAgICAgd2hlbiBzdWJzZXF1ZW50IG1hdGNoaW5nIGZhaWxzLiAoKlRIRU4pIGlzIHRoZSB3ZWFrZXN0LCBjYXJyeWluZyBvbiB0aGUKKyAgICAgICBtYXRjaCBhdCB0aGUgbmV4dCBhbHRlcm5hdGl2ZS4gKCpQUlVORSkgY29tZXMgbmV4dCwgZmFpbGluZyAgdGhlICBtYXRjaAorICAgICAgIGF0ICB0aGUgIGN1cnJlbnQgc3RhcnRpbmcgcG9zaXRpb24sIGJ1dCBhbGxvd2luZyBhbiBhZHZhbmNlIHRvIHRoZSBuZXh0CisgICAgICAgY2hhcmFjdGVyIChmb3IgYW4gdW5hbmNob3JlZCBwYXR0ZXJuKS4gKCpTS0lQKSBpcyBzaW1pbGFyLCBleGNlcHQgIHRoYXQKKyAgICAgICB0aGUgYWR2YW5jZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIuICgqQ09NTUlUKSBpcyB0aGUgc3Ryb25nZXN0LAorICAgICAgIGNhdXNpbmcgdGhlIGVudGlyZSBtYXRjaCB0byBmYWlsLgorCisgICBNb3JlIHRoYW4gb25lIGJhY2t0cmFja2luZyB2ZXJiCisKKyAgICAgICBJZiBtb3JlIHRoYW4gb25lIGJhY2t0cmFja2luZyB2ZXJiIGlzIHByZXNlbnQgaW4gIGEgIHBhdHRlcm4sICB0aGUgIG9uZQorICAgICAgIHRoYXQgIGlzICBiYWNrdHJhY2tlZCAgb250byBmaXJzdCBhY3RzLiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBwYXQtCisgICAgICAgdGVybiwgd2hlcmUgQSwgQiwgZXRjLiBhcmUgY29tcGxleCBwYXR0ZXJuIGZyYWdtZW50czoKKworICAgICAgICAgKEEoKkNPTU1JVClCKCpUSEVOKUN8QUJEKQorCisgICAgICAgSWYgQSBtYXRjaGVzIGJ1dCBCIGZhaWxzLCB0aGUgYmFja3RyYWNrIHRvICgqQ09NTUlUKSBjYXVzZXMgdGhlICBlbnRpcmUKKyAgICAgICBtYXRjaCB0byBmYWlsLiBIb3dldmVyLCBpZiBBIGFuZCBCIG1hdGNoLCBidXQgQyBmYWlscywgdGhlIGJhY2t0cmFjayB0bworICAgICAgICgqVEhFTikgY2F1c2VzIHRoZSBuZXh0IGFsdGVybmF0aXZlIChBQkQpIHRvIGJlIHRyaWVkLiAgVGhpcyAgYmVoYXZpb3VyCisgICAgICAgaXMgIGNvbnNpc3RlbnQsICBidXQgaXMgbm90IGFsd2F5cyB0aGUgc2FtZSBhcyBQZXJsJ3MuIEl0IG1lYW5zIHRoYXQgaWYKKyAgICAgICB0d28gb3IgbW9yZSBiYWNrdHJhY2tpbmcgdmVyYnMgYXBwZWFyIGluIHN1Y2Nlc3Npb24sIGFsbCB0aGUgIHRoZSAgbGFzdAorICAgICAgIG9mIHRoZW0gaGFzIG5vIGVmZmVjdC4gQ29uc2lkZXIgdGhpcyBleGFtcGxlOgorCisgICAgICAgICAuLi4oKkNPTU1JVCkoKlBSVU5FKS4uLgorCisgICAgICAgSWYgdGhlcmUgaXMgYSBtYXRjaGluZyBmYWlsdXJlIHRvIHRoZSByaWdodCwgYmFja3RyYWNraW5nIG9udG8gKCpQUlVORSkKKyAgICAgICBjYXVzZXMgaXQgdG8gYmUgdHJpZ2dlcmVkLCBhbmQgaXRzIGFjdGlvbiBpcyB0YWtlbi4gVGhlcmUgY2FuIG5ldmVyICBiZQorICAgICAgIGEgYmFja3RyYWNrIG9udG8gKCpDT01NSVQpLgorCisgICBCYWNrdHJhY2tpbmcgdmVyYnMgaW4gcmVwZWF0ZWQgZ3JvdXBzCisKKyAgICAgICBQQ1JFMiAgZGlmZmVycyAgZnJvbSAgUGVybCAgaW4gIGl0cyAgaGFuZGxpbmcgIG9mIGJhY2t0cmFja2luZyB2ZXJicyBpbgorICAgICAgIHJlcGVhdGVkIGdyb3Vwcy4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyOgorCisgICAgICAgICAvKGEoKkNPTU1JVCliKSthYy8KKworICAgICAgIElmIHRoZSBzdWJqZWN0IGlzICJhYmFjIiwgUGVybCBtYXRjaGVzLCBidXQgIFBDUkUyICBmYWlscyAgYmVjYXVzZSAgdGhlCisgICAgICAgKCpDT01NSVQpIGluIHRoZSBzZWNvbmQgcmVwZWF0IG9mIHRoZSBncm91cCBhY3RzLgorCisgICBCYWNrdHJhY2tpbmcgdmVyYnMgaW4gYXNzZXJ0aW9ucworCisgICAgICAgKCpGQUlMKSAgaW4gIGFuIGFzc2VydGlvbiBoYXMgaXRzIG5vcm1hbCBlZmZlY3Q6IGl0IGZvcmNlcyBhbiBpbW1lZGlhdGUKKyAgICAgICBiYWNrdHJhY2suCisKKyAgICAgICAoKkFDQ0VQVCkgaW4gYSBwb3NpdGl2ZSBhc3NlcnRpb24gY2F1c2VzIHRoZSBhc3NlcnRpb24gdG8gc3VjY2VlZCB3aXRoLQorICAgICAgIG91dCAgYW55ICBmdXJ0aGVyIHByb2Nlc3NpbmcuIEluIGEgbmVnYXRpdmUgYXNzZXJ0aW9uLCAoKkFDQ0VQVCkgY2F1c2VzCisgICAgICAgdGhlIGFzc2VydGlvbiB0byBmYWlsIHdpdGhvdXQgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZy4KKworICAgICAgIFRoZSBvdGhlciBiYWNrdHJhY2tpbmcgdmVyYnMgYXJlIG5vdCB0cmVhdGVkIHNwZWNpYWxseSBpZiAgdGhleSAgYXBwZWFyCisgICAgICAgaW4gIGEgIHBvc2l0aXZlICBhc3NlcnRpb24uICBJbiAgcGFydGljdWxhciwgICgqVEhFTikgc2tpcHMgdG8gdGhlIG5leHQKKyAgICAgICBhbHRlcm5hdGl2ZSBpbiB0aGUgaW5uZXJtb3N0IGVuY2xvc2luZyAgZ3JvdXAgIHRoYXQgIGhhcyAgYWx0ZXJuYXRpb25zLAorICAgICAgIHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgd2l0aGluIHRoZSBhc3NlcnRpb24uCisKKyAgICAgICBOZWdhdGl2ZSAgYXNzZXJ0aW9ucyAgYXJlLCAgaG93ZXZlciwgZGlmZmVyZW50LCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdAorICAgICAgIGNoYW5naW5nIGEgcG9zaXRpdmUgYXNzZXJ0aW9uIGludG8gYSAgbmVnYXRpdmUgIGFzc2VydGlvbiAgY2hhbmdlcyAgaXRzCisgICAgICAgcmVzdWx0LiBCYWNrdHJhY2tpbmcgaW50byAoKkNPTU1JVCksICgqU0tJUCksIG9yICgqUFJVTkUpIGNhdXNlcyBhIG5lZy0KKyAgICAgICBhdGl2ZSBhc3NlcnRpb24gdG8gYmUgdHJ1ZSwgd2l0aG91dCBjb25zaWRlcmluZyBhbnkgZnVydGhlciBhbHRlcm5hdGl2ZQorICAgICAgIGJyYW5jaGVzIGluIHRoZSBhc3NlcnRpb24uICBCYWNrdHJhY2tpbmcgaW50byAoKlRIRU4pIGNhdXNlcyBpdCB0byBza2lwCisgICAgICAgdG8gdGhlIG5leHQgZW5jbG9zaW5nIGFsdGVybmF0aXZlIHdpdGhpbiB0aGUgYXNzZXJ0aW9uICh0aGUgbm9ybWFsICBiZS0KKyAgICAgICBoYXZpb3VyKSwgIGJ1dCAgaWYgIHRoZSAgYXNzZXJ0aW9uICBkb2VzICBub3QgaGF2ZSBzdWNoIGFuIGFsdGVybmF0aXZlLAorICAgICAgICgqVEhFTikgYmVoYXZlcyBsaWtlICgqUFJVTkUpLgorCisgICBCYWNrdHJhY2tpbmcgdmVyYnMgaW4gc3Vicm91dGluZXMKKworICAgICAgIFRoZXNlIGJlaGF2aW91cnMgb2NjdXIgd2hldGhlciBvciBub3QgdGhlIHN1YnBhdHRlcm4gaXMgIGNhbGxlZCAgcmVjdXItCisgICAgICAgc2l2ZWx5LiAgUGVybCdzIHRyZWF0bWVudCBvZiBzdWJyb3V0aW5lcyBpcyBkaWZmZXJlbnQgaW4gc29tZSBjYXNlcy4KKworICAgICAgICgqRkFJTCkgIGluICBhIHN1YnBhdHRlcm4gY2FsbGVkIGFzIGEgc3Vicm91dGluZSBoYXMgaXRzIG5vcm1hbCBlZmZlY3Q6CisgICAgICAgaXQgZm9yY2VzIGFuIGltbWVkaWF0ZSBiYWNrdHJhY2suCisKKyAgICAgICAoKkFDQ0VQVCkgaW4gYSBzdWJwYXR0ZXJuIGNhbGxlZCBhcyBhIHN1YnJvdXRpbmUgY2F1c2VzIHRoZSAgc3Vicm91dGluZQorICAgICAgIG1hdGNoICB0byBzdWNjZWVkIHdpdGhvdXQgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZy4gTWF0Y2hpbmcgdGhlbiBjb250aW4tCisgICAgICAgdWVzIGFmdGVyIHRoZSBzdWJyb3V0aW5lIGNhbGwuCisKKyAgICAgICAoKkNPTU1JVCksICgqU0tJUCksIGFuZCAoKlBSVU5FKSBpbiBhIHN1YnBhdHRlcm4gY2FsbGVkIGFzIGEgc3Vicm91dGluZQorICAgICAgIGNhdXNlIHRoZSBzdWJyb3V0aW5lIG1hdGNoIHRvIGZhaWwuCisKKyAgICAgICAoKlRIRU4pICBza2lwcyB0byB0aGUgbmV4dCBhbHRlcm5hdGl2ZSBpbiB0aGUgaW5uZXJtb3N0IGVuY2xvc2luZyBncm91cAorICAgICAgIHdpdGhpbiB0aGUgc3VicGF0dGVybiB0aGF0IGhhcyBhbHRlcm5hdGl2ZXMuIElmIHRoZXJlIGlzIG5vIHN1Y2ggIGdyb3VwCisgICAgICAgd2l0aGluIHRoZSBzdWJwYXR0ZXJuLCAoKlRIRU4pIGNhdXNlcyB0aGUgc3Vicm91dGluZSBtYXRjaCB0byBmYWlsLgorCisKK1NFRSBBTFNPCisKKyAgICAgICBwY3JlMmFwaSgzKSwgICAgcGNyZTJjYWxsb3V0KDMpLCAgICBwY3JlMm1hdGNoaW5nKDMpLCAgIHBjcmUyc3ludGF4KDMpLAorICAgICAgIHBjcmUyKDMpLgorCisKK0FVVEhPUgorCisgICAgICAgUGhpbGlwIEhhemVsCisgICAgICAgVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorICAgICAgIENhbWJyaWRnZSwgRW5nbGFuZC4KKworCitSRVZJU0lPTgorCisgICAgICAgTGFzdCB1cGRhdGVkOiAxMyBOb3ZlbWJlciAyMDE1CisgICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCitQQ1JFMlBFUkZPUk0oMykgICAgICAgICAgICBMaWJyYXJ5IEZ1bmN0aW9ucyBNYW51YWwgICAgICAgICAgICBQQ1JFMlBFUkZPUk0oMykKKworCisKK05BTUUKKyAgICAgICBQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKworUENSRTIgUEVSRk9STUFOQ0UKKworICAgICAgIFR3byAgYXNwZWN0cyAgb2YgcGVyZm9ybWFuY2UgYXJlIGRpc2N1c3NlZCBiZWxvdzogbWVtb3J5IHVzYWdlIGFuZCBwcm8tCisgICAgICAgY2Vzc2luZyB0aW1lLiBUaGUgd2F5IHlvdSBleHByZXNzIHlvdXIgcGF0dGVybiBhcyBhIHJlZ3VsYXIgIGV4cHJlc3Npb24KKyAgICAgICBjYW4gYWZmZWN0IGJvdGggb2YgdGhlbS4KKworCitDT01QSUxFRCBQQVRURVJOIE1FTU9SWSBVU0FHRQorCisgICAgICAgUGF0dGVybnMgYXJlIGNvbXBpbGVkIGJ5IFBDUkUyIGludG8gYSByZWFzb25hYmx5IGVmZmljaWVudCBpbnRlcnByZXRpdmUKKyAgICAgICBjb2RlLCBzbyB0aGF0IG1vc3Qgc2ltcGxlIHBhdHRlcm5zIGRvIG5vdCAgdXNlICBtdWNoICBtZW1vcnkuICBIb3dldmVyLAorICAgICAgIHRoZXJlICBpcyAgb25lIGNhc2Ugd2hlcmUgdGhlIG1lbW9yeSB1c2FnZSBvZiBhIGNvbXBpbGVkIHBhdHRlcm4gY2FuIGJlCisgICAgICAgdW5leHBlY3RlZGx5IGxhcmdlLiBJZiBhIHBhcmVudGhlc2l6ZWQgc3VicGF0dGVybiBoYXMgYSBxdWFudGlmaWVyIHdpdGgKKyAgICAgICBhIG1pbmltdW0gZ3JlYXRlciB0aGFuIDEgYW5kL29yIGEgbGltaXRlZCBtYXhpbXVtLCB0aGUgd2hvbGUgc3VicGF0dGVybgorICAgICAgIGlzIHJlcGVhdGVkIGluIHRoZSBjb21waWxlZCBjb2RlLiBGb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm4KKworICAgICAgICAgKGFiY3xkZWYpezIsNH0KKworICAgICAgIGlzIGNvbXBpbGVkIGFzIGlmIGl0IHdlcmUKKworICAgICAgICAgKGFiY3xkZWYpKGFiY3xkZWYpKChhYmN8ZGVmKShhYmN8ZGVmKT8pPworCisgICAgICAgKFRlY2huaWNhbCBhc2lkZTogSXQgaXMgZG9uZSB0aGlzIHdheSBzbyB0aGF0IGJhY2t0cmFjayAgcG9pbnRzICB3aXRoaW4KKyAgICAgICBlYWNoIG9mIHRoZSByZXBldGl0aW9ucyBjYW4gYmUgaW5kZXBlbmRlbnRseSBtYWludGFpbmVkLikKKworICAgICAgIEZvciAgcmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBxdWFudGlmaWVycyB1c2Ugb25seSBzbWFsbCBudW1iZXJzLCB0aGlzCisgICAgICAgaXMgbm90IHVzdWFsbHkgYSBwcm9ibGVtLiBIb3dldmVyLCBpZiB0aGUgbnVtYmVycyBhcmUgbGFyZ2UsICBhbmQgIHBhci0KKyAgICAgICB0aWN1bGFybHkgIGlmICBzdWNoIHJlcGV0aXRpb25zIGFyZSBuZXN0ZWQsIHRoZSBtZW1vcnkgdXNhZ2UgY2FuIGJlY29tZQorICAgICAgIGFuIGVtYmFycmFzc21lbnQuIEZvciBleGFtcGxlLCB0aGUgdmVyeSBzaW1wbGUgcGF0dGVybgorCisgICAgICAgICAoKGFiKXsxLDEwMDB9Yyl7MSwzfQorCisgICAgICAgdXNlcyA1MUsgYnl0ZXMgd2hlbiBjb21waWxlZCB1c2luZyB0aGUgOC1iaXQgIGxpYnJhcnkuICBXaGVuICBQQ1JFMiAgaXMKKyAgICAgICBjb21waWxlZCAgd2l0aCBpdHMgZGVmYXVsdCBpbnRlcm5hbCBwb2ludGVyIHNpemUgb2YgdHdvIGJ5dGVzLCB0aGUgc2l6ZQorICAgICAgIGxpbWl0IG9uIGEgY29tcGlsZWQgcGF0dGVybiBpcyA2NEsgY29kZSB1bml0cyBpbiB0aGUgOC1iaXQgIGFuZCAgMTYtYml0CisgICAgICAgbGlicmFyaWVzLCBhbmQgdGhpcyBpcyByZWFjaGVkIHdpdGggdGhlIGFib3ZlIHBhdHRlcm4gaWYgdGhlIG91dGVyIHJlcC0KKyAgICAgICBldGl0aW9uIGlzIGluY3JlYXNlZCBmcm9tIDMgdG8gNC4gUENSRTIgY2FuIGJlIGNvbXBpbGVkIHRvICB1c2UgIGxhcmdlcgorICAgICAgIGludGVybmFsICBwb2ludGVycyAgYW5kIHRodXMgaGFuZGxlIGxhcmdlciBjb21waWxlZCBwYXR0ZXJucywgYnV0IGl0IGlzCisgICAgICAgYmV0dGVyIHRvIHRyeSB0byByZXdyaXRlIHlvdXIgcGF0dGVybiB0byB1c2UgbGVzcyBtZW1vcnkgaWYgeW91IGNhbi4KKworICAgICAgIE9uZSB3YXkgb2YgcmVkdWNpbmcgdGhlIG1lbW9yeSB1c2FnZSBmb3Igc3VjaCBwYXR0ZXJucyBpcyB0byAgbWFrZSAgdXNlCisgICAgICAgb2YgUENSRTIncyAic3Vicm91dGluZSIgZmFjaWxpdHkuIFJlLXdyaXRpbmcgdGhlIGFib3ZlIHBhdHRlcm4gYXMKKworICAgICAgICAgKChhYikoPzIpezAsOTk5fWMpKD8xKXswLDJ9CisKKyAgICAgICByZWR1Y2VzIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIHRvIDE4SywgYW5kIGluZGVlZCBpdCByZW1haW5zIHVuZGVyIDIwSworICAgICAgIGV2ZW4gd2l0aCB0aGUgb3V0ZXIgcmVwZXRpdGlvbiBpbmNyZWFzZWQgdG8gMTAwLiBIb3dldmVyLCB0aGlzICBwYXR0ZXJuCisgICAgICAgaXMgIG5vdCAgZXhhY3RseSBlcXVpdmFsZW50LCBiZWNhdXNlIHRoZSAic3Vicm91dGluZSIgY2FsbHMgYXJlIHRyZWF0ZWQKKyAgICAgICBhcyBhdG9taWMgZ3JvdXBzIGludG8gd2hpY2ggdGhlcmUgY2FuIGJlIG5vIGJhY2t0cmFja2luZyBpZiB0aGVyZSBpcyAgYQorICAgICAgIHN1YnNlcXVlbnQgIG1hdGNoaW5nICBmYWlsdXJlLiAgVGhlcmVmb3JlLCBQQ1JFMiBjYW5ub3QgZG8gdGhpcyBraW5kIG9mCisgICAgICAgcmV3cml0aW5nIGF1dG9tYXRpY2FsbHkuICBGdXJ0aGVybW9yZSwgdGhlcmUgaXMgYSAgbm90aWNlYWJsZSAgbG9zcyAgb2YKKyAgICAgICBzcGVlZCAgd2hlbiBleGVjdXRpbmcgdGhlIG1vZGlmaWVkIHBhdHRlcm4uIE5ldmVydGhlbGVzcywgaWYgdGhlIGF0b21pYworICAgICAgIGdyb3VwaW5nIGlzIG5vdCBhIHByb2JsZW0gYW5kIHRoZSBsb3NzIG9mICBzcGVlZCAgaXMgIGFjY2VwdGFibGUsICB0aGlzCisgICAgICAga2luZCAgb2YgcmV3cml0aW5nIHdpbGwgYWxsb3cgeW91IHRvIHByb2Nlc3MgcGF0dGVybnMgdGhhdCBQQ1JFMiBjYW5ub3QKKyAgICAgICBvdGhlcndpc2UgaGFuZGxlLgorCisKK1NUQUNLIFVTQUdFIEFUIFJVTiBUSU1FCisKKyAgICAgICBXaGVuIHBjcmUyX21hdGNoKCkgaXMgdXNlZCBmb3IgbWF0Y2hpbmcsIGNlcnRhaW4ga2luZHMgb2YgIHBhdHRlcm4gIGNhbgorICAgICAgIGNhdXNlICBpdCAgdG8gIHVzZSBsYXJnZSBhbW91bnRzIG9mIHRoZSBwcm9jZXNzIHN0YWNrLiBJbiBzb21lIGVudmlyb24tCisgICAgICAgbWVudHMgdGhlIGRlZmF1bHQgcHJvY2VzcyBzdGFjayBpcyBxdWl0ZSBzbWFsbCwgYW5kIGlmIGl0IHJ1bnMgb3V0ICB0aGUKKyAgICAgICByZXN1bHQgIGlzICBvZnRlbiAgU0lHU0VHVi4gIFJld3JpdGluZyB5b3VyIHBhdHRlcm4gY2FuIG9mdGVuIGhlbHAuIFRoZQorICAgICAgIHBjcmUyc3RhY2sgZG9jdW1lbnRhdGlvbiBkaXNjdXNzZXMgdGhpcyBpc3N1ZSBpbiBkZXRhaWwuCisKKworUFJPQ0VTU0lORyBUSU1FCisKKyAgICAgICBDZXJ0YWluIGl0ZW1zIGluIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJucyBhcmUgcHJvY2Vzc2VkICBtb3JlICBlZmZpLQorICAgICAgIGNpZW50bHkgdGhhbiBvdGhlcnMuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHVzZSBhIGNoYXJhY3RlciBjbGFzcyBsaWtlCisgICAgICAgW2FlaW91XSAgdGhhbiAgYSAgc2V0ICBvZiAgIHNpbmdsZS1jaGFyYWN0ZXIgICBhbHRlcm5hdGl2ZXMgICBzdWNoICAgYXMKKyAgICAgICAoYXxlfGl8b3x1KS4gIEluICBnZW5lcmFsLCAgdGhlIHNpbXBsZXN0IGNvbnN0cnVjdGlvbiB0aGF0IHByb3ZpZGVzIHRoZQorICAgICAgIHJlcXVpcmVkIGJlaGF2aW91ciBpcyB1c3VhbGx5IHRoZSBtb3N0IGVmZmljaWVudC4gSmVmZnJleSBGcmllZGwncyBib29rCisgICAgICAgY29udGFpbnMgIGEgIGxvdCAgb2YgdXNlZnVsIGdlbmVyYWwgZGlzY3Vzc2lvbiBhYm91dCBvcHRpbWl6aW5nIHJlZ3VsYXIKKyAgICAgICBleHByZXNzaW9ucyBmb3IgZWZmaWNpZW50IHBlcmZvcm1hbmNlLiBUaGlzICBkb2N1bWVudCAgY29udGFpbnMgIGEgIGZldworICAgICAgIG9ic2VydmF0aW9ucyBhYm91dCBQQ1JFMi4KKworICAgICAgIFVzaW5nICBVbmljb2RlICBjaGFyYWN0ZXIgIHByb3BlcnRpZXMgICh0aGUgIFxwLCBcUCwgYW5kIFxYIGVzY2FwZXMpIGlzCisgICAgICAgc2xvdywgYmVjYXVzZSBQQ1JFMiBoYXMgdG8gdXNlIGEgbXVsdGktc3RhZ2UgdGFibGUgbG9va3VwICB3aGVuZXZlciAgaXQKKyAgICAgICBuZWVkcyAgYSAgY2hhcmFjdGVyJ3MgIHByb3BlcnR5LiBJZiB5b3UgY2FuIGZpbmQgYW4gYWx0ZXJuYXRpdmUgcGF0dGVybgorICAgICAgIHRoYXQgZG9lcyBub3QgdXNlIGNoYXJhY3RlciBwcm9wZXJ0aWVzLCBpdCB3aWxsIHByb2JhYmx5IGJlIGZhc3Rlci4KKworICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBlc2NhcGUgc2VxdWVuY2VzIFxiLCBcZCwgXHMsICBhbmQgIFx3LCAgYW5kICB0aGUgIFBPU0lYCisgICAgICAgY2hhcmFjdGVyICBjbGFzc2VzICBzdWNoICBhcyAgWzphbHBoYTpdICBkbyBub3QgdXNlIFVuaWNvZGUgcHJvcGVydGllcywKKyAgICAgICBwYXJ0bHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBhbmQgcGFydGx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorICAgICAgIEhvd2V2ZXIsICB5b3UgIGNhbiAgc2V0ICB0aGUgUENSRTJfVUNQIG9wdGlvbiBvciBzdGFydCB0aGUgcGF0dGVybiB3aXRoCisgICAgICAgKCpVQ1ApIGlmIHlvdSB3YW50IFVuaWNvZGUgY2hhcmFjdGVyIHByb3BlcnRpZXMgdG8gYmUgIHVzZWQuICBUaGlzICBjYW4KKyAgICAgICBkb3VibGUgIHRoZSAgbWF0Y2hpbmcgIHRpbWUgIGZvciAgaXRlbXMgIHN1Y2ggIGFzIFxkLCB3aGVuIG1hdGNoZWQgd2l0aAorICAgICAgIHBjcmUyX21hdGNoKCk7IHRoZSBwZXJmb3JtYW5jZSBsb3NzIGlzIGxlc3Mgd2l0aCBhIERGQSAgbWF0Y2hpbmcgIGZ1bmMtCisgICAgICAgdGlvbiwgYW5kIGluIGJvdGggY2FzZXMgdGhlcmUgaXMgbm90IG11Y2ggZGlmZmVyZW5jZSBmb3IgXGIuCisKKyAgICAgICBXaGVuICBhIHBhdHRlcm4gYmVnaW5zIHdpdGggLiogbm90IGluIGF0b21pYyBwYXJlbnRoZXNlcywgbm9yIGluIHBhcmVuLQorICAgICAgIHRoZXNlcyB0aGF0IGFyZSB0aGUgc3ViamVjdCBvZiBhIGJhY2tyZWZlcmVuY2UsICBhbmQgIHRoZSAgUENSRTJfRE9UQUxMCisgICAgICAgb3B0aW9uICBpcyAgc2V0LCAgdGhlIHBhdHRlcm4gaXMgaW1wbGljaXRseSBhbmNob3JlZCBieSBQQ1JFMiwgc2luY2UgaXQKKyAgICAgICBjYW4gbWF0Y2ggb25seSBhdCB0aGUgc3RhcnQgb2YgYSBzdWJqZWN0IHN0cmluZy4gIElmICB0aGUgIHBhdHRlcm4gIGhhcworICAgICAgIG11bHRpcGxlIHRvcC1sZXZlbCBicmFuY2hlcywgdGhleSBtdXN0IGFsbCBiZSBhbmNob3JhYmxlLiBUaGUgb3B0aW1pemEtCisgICAgICAgdGlvbiBjYW4gYmUgZGlzYWJsZWQgYnkgIHRoZSAgUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IgIG9wdGlvbiwgIGFuZCAgaXMKKyAgICAgICBhdXRvbWF0aWNhbGx5IGRpc2FibGVkIGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zICgqUFJVTkUpIG9yICgqU0tJUCkuCisKKyAgICAgICBJZiAgUENSRTJfRE9UQUxMICBpcyAgbm90ICBzZXQsICBQQ1JFMiAgY2Fubm90ICBtYWtlIHRoaXMgb3B0aW1pemF0aW9uLAorICAgICAgIGJlY2F1c2UgdGhlIGRvdCBtZXRhY2hhcmFjdGVyIGRvZXMgbm90IHRoZW4gbWF0Y2ggYSBuZXdsaW5lLCBhbmQgaWYgdGhlCisgICAgICAgc3ViamVjdCAgc3RyaW5nIGNvbnRhaW5zIG5ld2xpbmVzLCB0aGUgcGF0dGVybiBtYXkgbWF0Y2ggZnJvbSB0aGUgY2hhci0KKyAgICAgICBhY3RlciBpbW1lZGlhdGVseSBmb2xsb3dpbmcgb25lIG9mIHRoZW0gaW5zdGVhZCBvZiBmcm9tIHRoZSB2ZXJ5IHN0YXJ0LgorICAgICAgIEZvciBleGFtcGxlLCB0aGUgcGF0dGVybgorCisgICAgICAgICAuKnNlY29uZAorCisgICAgICAgbWF0Y2hlcyAgdGhlIHN1YmplY3QgImZpcnN0XG5hbmQgc2Vjb25kIiAod2hlcmUgXG4gc3RhbmRzIGZvciBhIG5ld2xpbmUKKyAgICAgICBjaGFyYWN0ZXIpLCB3aXRoIHRoZSBtYXRjaCBzdGFydGluZyBhdCB0aGUgc2V2ZW50aCBjaGFyYWN0ZXIuIEluICBvcmRlcgorICAgICAgIHRvICBkbyAgdGhpcywgUENSRTIgaGFzIHRvIHJldHJ5IHRoZSBtYXRjaCBzdGFydGluZyBhZnRlciBldmVyeSBuZXdsaW5lCisgICAgICAgaW4gdGhlIHN1YmplY3QuCisKKyAgICAgICBJZiB5b3UgYXJlIHVzaW5nIHN1Y2ggYSBwYXR0ZXJuIHdpdGggc3ViamVjdCBzdHJpbmdzIHRoYXQgZG8gIG5vdCAgY29uLQorICAgICAgIHRhaW4gICBuZXdsaW5lcywgICB0aGUgICBiZXN0ICAgcGVyZm9ybWFuY2UgICBpcyAgb2J0YWluZWQgIGJ5ICBzZXR0aW5nCisgICAgICAgUENSRTJfRE9UQUxMLCBvciBzdGFydGluZyB0aGUgcGF0dGVybiB3aXRoICBeLiogIG9yICBeLio/ICB0byAgaW5kaWNhdGUKKyAgICAgICBleHBsaWNpdCBhbmNob3JpbmcuIFRoYXQgc2F2ZXMgUENSRTIgZnJvbSBoYXZpbmcgdG8gc2NhbiBhbG9uZyB0aGUgc3ViLQorICAgICAgIGplY3QgbG9va2luZyBmb3IgYSBuZXdsaW5lIHRvIHJlc3RhcnQgYXQuCisKKyAgICAgICBCZXdhcmUgb2YgcGF0dGVybnMgdGhhdCBjb250YWluIG5lc3RlZCBpbmRlZmluaXRlICByZXBlYXRzLiAgVGhlc2UgIGNhbgorICAgICAgIHRha2UgIGEgIGxvbmcgdGltZSB0byBydW4gd2hlbiBhcHBsaWVkIHRvIGEgc3RyaW5nIHRoYXQgZG9lcyBub3QgbWF0Y2guCisgICAgICAgQ29uc2lkZXIgdGhlIHBhdHRlcm4gZnJhZ21lbnQKKworICAgICAgICAgXihhKykqCisKKyAgICAgICBUaGlzIGNhbiBtYXRjaCAiYWFhYSIgaW4gMTYgZGlmZmVyZW50IHdheXMsIGFuZCB0aGlzICBudW1iZXIgIGluY3JlYXNlcworICAgICAgIHZlcnkgIHJhcGlkbHkgIGFzIHRoZSBzdHJpbmcgZ2V0cyBsb25nZXIuIChUaGUgKiByZXBlYXQgY2FuIG1hdGNoIDAsIDEsCisgICAgICAgMiwgMywgb3IgNCB0aW1lcywgYW5kIGZvciBlYWNoIG9mIHRob3NlIGNhc2VzIG90aGVyIHRoYW4gMCBvciA0LCB0aGUgICsKKyAgICAgICByZXBlYXRzICBjYW4gIG1hdGNoICBkaWZmZXJlbnQgbnVtYmVycyBvZiB0aW1lcy4pIFdoZW4gdGhlIHJlbWFpbmRlciBvZgorICAgICAgIHRoZSBwYXR0ZXJuIGlzIHN1Y2ggdGhhdCB0aGUgZW50aXJlIG1hdGNoIGlzIGdvaW5nIHRvIGZhaWwsICBQQ1JFMiAgaGFzCisgICAgICAgaW4gIHByaW5jaXBsZSAgdG8gIHRyeSAgZXZlcnkgIHBvc3NpYmxlIHZhcmlhdGlvbiwgYW5kIHRoaXMgY2FuIHRha2UgYW4KKyAgICAgICBleHRyZW1lbHkgbG9uZyB0aW1lLCBldmVuIGZvciByZWxhdGl2ZWx5IHNob3J0IHN0cmluZ3MuCisKKyAgICAgICBBbiBvcHRpbWl6YXRpb24gY2F0Y2hlcyBzb21lIG9mIHRoZSBtb3JlIHNpbXBsZSBjYXNlcyBzdWNoIGFzCisKKyAgICAgICAgIChhKykqYgorCisgICAgICAgd2hlcmUgYSBsaXRlcmFsIGNoYXJhY3RlciBmb2xsb3dzLiBCZWZvcmUgIGVtYmFya2luZyAgb24gIHRoZSAgc3RhbmRhcmQKKyAgICAgICBtYXRjaGluZyAgcHJvY2VkdXJlLCBQQ1JFMiBjaGVja3MgdGhhdCB0aGVyZSBpcyBhICJiIiBsYXRlciBpbiB0aGUgc3ViLQorICAgICAgIGplY3Qgc3RyaW5nLCBhbmQgaWYgdGhlcmUgaXMgbm90LCBpdCBmYWlscyB0aGUgbWF0Y2ggaW1tZWRpYXRlbHkuICBIb3ctCisgICAgICAgZXZlciwgIHdoZW4gIHRoZXJlICBpcyBubyBmb2xsb3dpbmcgbGl0ZXJhbCB0aGlzIG9wdGltaXphdGlvbiBjYW5ub3QgYmUKKyAgICAgICB1c2VkLiBZb3UgY2FuIHNlZSB0aGUgZGlmZmVyZW5jZSBieSBjb21wYXJpbmcgdGhlIGJlaGF2aW91ciBvZgorCisgICAgICAgICAoYSspKlxkCisKKyAgICAgICB3aXRoIHRoZSBwYXR0ZXJuIGFib3ZlLiBUaGUgZm9ybWVyIGdpdmVzICBhICBmYWlsdXJlICBhbG1vc3QgIGluc3RhbnRseQorICAgICAgIHdoZW4gIGFwcGxpZWQgIHRvICBhICB3aG9sZSAgbGluZSBvZiAiYSIgY2hhcmFjdGVycywgd2hlcmVhcyB0aGUgbGF0dGVyCisgICAgICAgdGFrZXMgYW4gYXBwcmVjaWFibGUgdGltZSB3aXRoIHN0cmluZ3MgbG9uZ2VyIHRoYW4gYWJvdXQgMjAgY2hhcmFjdGVycy4KKworICAgICAgIEluIG1hbnkgY2FzZXMsIHRoZSBzb2x1dGlvbiB0byB0aGlzIGtpbmQgb2YgcGVyZm9ybWFuY2UgaXNzdWUgaXMgdG8gdXNlCisgICAgICAgYW4gYXRvbWljIGdyb3VwIG9yIGEgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyLgorCisKK0FVVEhPUgorCisgICAgICAgUGhpbGlwIEhhemVsCisgICAgICAgVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorICAgICAgIENhbWJyaWRnZSwgRW5nbGFuZC4KKworCitSRVZJU0lPTgorCisgICAgICAgTGFzdCB1cGRhdGVkOiAwMiBKYW51YXJ5IDIwMTUKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1BDUkUyUE9TSVgoMykgICAgICAgICAgICAgIExpYnJhcnkgRnVuY3Rpb25zIE1hbnVhbCAgICAgICAgICAgICAgUENSRTJQT1NJWCgzKQorCisKKworTkFNRQorICAgICAgIFBDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorCitTWU5PUFNJUworCisgICAgICAgI2luY2x1ZGUgPHBjcmUycG9zaXguaD4KKworICAgICAgIGludCByZWdjb21wKHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKnBhdHRlcm4sCisgICAgICAgICAgICBpbnQgY2ZsYWdzKTsKKworICAgICAgIGludCByZWdleGVjKGNvbnN0IHJlZ2V4X3QgKnByZWcsIGNvbnN0IGNoYXIgKnN0cmluZywKKyAgICAgICAgICAgIHNpemVfdCBubWF0Y2gsIHJlZ21hdGNoX3QgcG1hdGNoW10sIGludCBlZmxhZ3MpOworCisgICAgICAgc2l6ZV90IHJlZ2Vycm9yKGludCBlcnJjb2RlLCBjb25zdCByZWdleF90ICpwcmVnLAorICAgICAgICAgICAgY2hhciAqZXJyYnVmLCBzaXplX3QgZXJyYnVmX3NpemUpOworCisgICAgICAgdm9pZCByZWdmcmVlKHJlZ2V4X3QgKnByZWcpOworCisKK0RFU0NSSVBUSU9OCisKKyAgICAgICBUaGlzICBzZXQgb2YgZnVuY3Rpb25zIHByb3ZpZGVzIGEgUE9TSVgtc3R5bGUgQVBJIGZvciB0aGUgUENSRTIgcmVndWxhcgorICAgICAgIGV4cHJlc3Npb24gOC1iaXQgbGlicmFyeS4gU2VlIHRoZSBwY3JlMmFwaSBkb2N1bWVudGF0aW9uIGZvciBhIGRlc2NyaXAtCisgICAgICAgdGlvbiAgb2YgUENSRTIncyBuYXRpdmUgQVBJLCB3aGljaCBjb250YWlucyBtdWNoIGFkZGl0aW9uYWwgZnVuY3Rpb25hbC0KKyAgICAgICBpdHkuIFRoZXJlIGlzIG5vIFBPU0lYLXN0eWxlIHdyYXBwZXIgIGZvciAgUENSRTIncyAgMTYtYml0ICBhbmQgIDMyLWJpdAorICAgICAgIGxpYnJhcmllcy4KKworICAgICAgIFRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGhlcmUgYXJlIGp1c3Qgd3JhcHBlciBmdW5jdGlvbnMgdGhhdCB1bHRpbWF0ZWx5CisgICAgICAgY2FsbCB0aGUgIFBDUkUyICBuYXRpdmUgIEFQSS4gIFRoZWlyICBwcm90b3R5cGVzICBhcmUgIGRlZmluZWQgIGluICB0aGUKKyAgICAgICBwY3JlMnBvc2l4LmggIGhlYWRlciAgZmlsZSwgIGFuZCAgb24gVW5peCBzeXN0ZW1zIHRoZSBsaWJyYXJ5IGl0c2VsZiBpcworICAgICAgIGNhbGxlZCBsaWJwY3JlMi1wb3NpeC5hLCBzbyBjYW4gYmUgYWNjZXNzZWQgYnkgYWRkaW5nIC1scGNyZTItcG9zaXggIHRvCisgICAgICAgdGhlICBjb21tYW5kICBmb3IgIGxpbmtpbmcgIGFuICBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlbS4gQmVjYXVzZSB0aGUKKyAgICAgICBQT1NJWCBmdW5jdGlvbnMgY2FsbCB0aGUgbmF0aXZlIG9uZXMsICBpdCAgaXMgIGFsc28gIG5lY2Vzc2FyeSAgdG8gIGFkZAorICAgICAgIC1scGNyZTItOC4KKworICAgICAgIFRob3NlICBQT1NJWCAgb3B0aW9uIGJpdHMgdGhhdCBjYW4gcmVhc29uYWJseSBiZSBtYXBwZWQgdG8gUENSRTIgbmF0aXZlCisgICAgICAgb3B0aW9ucyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQuIEluIGFkZGl0aW9uLCB0aGUgb3B0aW9uIFJFR19FWFRFTkRFRCAgaXMKKyAgICAgICBkZWZpbmVkICB3aXRoICB0aGUgIHZhbHVlICB6ZXJvLiBUaGlzIGhhcyBubyBlZmZlY3QsIGJ1dCBzaW5jZSBwcm9ncmFtcworICAgICAgIHRoYXQgYXJlIHdyaXR0ZW4gdG8gdGhlIFBPU0lYIGludGVyZmFjZSBvZnRlbiB1c2UgIGl0LCAgdGhpcyAgbWFrZXMgIGl0CisgICAgICAgZWFzaWVyICB0byAgc2xvdCBpbiBQQ1JFMiBhcyBhIHJlcGxhY2VtZW50IGxpYnJhcnkuIE90aGVyIFBPU0lYIG9wdGlvbnMKKyAgICAgICBhcmUgbm90IGV2ZW4gZGVmaW5lZC4KKworICAgICAgIFRoZXJlIGFyZSBhbHNvIHNvbWUgb3RoZXIgb3B0aW9ucyB0aGF0IGFyZSBub3QgZGVmaW5lZCBieSBQT1NJWC4gIFRoZXNlCisgICAgICAgaGF2ZSBiZWVuIGFkZGVkIGF0IHRoZSByZXF1ZXN0IG9mIHVzZXJzIHdobyB3YW50IHRvIG1ha2UgdXNlIG9mIGNlcnRhaW4KKyAgICAgICBQQ1JFMi1zcGVjaWZpYyBmZWF0dXJlcyB2aWEgdGhlIFBPU0lYIGNhbGxpbmcgaW50ZXJmYWNlLgorCisgICAgICAgV2hlbiBQQ1JFMiBpcyBjYWxsZWQgdmlhIHRoZXNlIGZ1bmN0aW9ucywgaXQgaXMgb25seSB0aGUgIEFQSSAgdGhhdCAgaXMKKyAgICAgICBQT1NJWC1saWtlICBpbiAgc3R5bGUuICBUaGUgc3ludGF4IGFuZCBzZW1hbnRpY3Mgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzLQorICAgICAgIHNpb25zIHRoZW1zZWx2ZXMgYXJlIHN0aWxsIHRob3NlIG9mIFBlcmwsIHN1YmplY3QgIHRvICB0aGUgIHNldHRpbmcgIG9mCisgICAgICAgdmFyaW91cyAgUENSRTIgb3B0aW9ucywgYXMgZGVzY3JpYmVkIGJlbG93LiAiUE9TSVgtbGlrZSBpbiBzdHlsZSIgbWVhbnMKKyAgICAgICB0aGF0IHRoZSBBUEkgYXBwcm94aW1hdGVzIHRvIHRoZSBQT1NJWCAgZGVmaW5pdGlvbjsgIGl0ICBpcyAgbm90ICBmdWxseQorICAgICAgIFBPU0lYLWNvbXBhdGlibGUsICBhbmQgIGluICBtdWx0aS11bml0ICBlbmNvZGluZyBkb21haW5zIGl0IGlzIHByb2JhYmx5CisgICAgICAgZXZlbiBsZXNzIGNvbXBhdGlibGUuCisKKyAgICAgICBUaGUgaGVhZGVyIGZvciB0aGVzZSBmdW5jdGlvbnMgaXMgc3VwcGxpZWQgYXMgcGNyZTJwb3NpeC5oIHRvIGF2b2lkIGFueQorICAgICAgIHBvdGVudGlhbCAgY2xhc2ggIHdpdGggIG90aGVyICBQT1NJWCAgbGlicmFyaWVzLiAgSXQgY2FuLCBvZiBjb3Vyc2UsIGJlCisgICAgICAgcmVuYW1lZCBvciBhbGlhc2VkIGFzIHJlZ2V4LmgsIHdoaWNoIGlzIHRoZSAiY29ycmVjdCIgbmFtZS4gSXQgcHJvdmlkZXMKKyAgICAgICB0d28gIHN0cnVjdHVyZSAgdHlwZXMsICByZWdleF90ICBmb3IgIGNvbXBpbGVkIGludGVybmFsIGZvcm1zLCBhbmQgcmVnLQorICAgICAgIG1hdGNoX3QgZm9yIHJldHVybmluZyBjYXB0dXJlZCBzdWJzdHJpbmdzLiBJdCBhbHNvICBkZWZpbmVzICBzb21lICBjb24tCisgICAgICAgc3RhbnRzICB3aG9zZSAgbmFtZXMgIHN0YXJ0ICB3aXRoICAiUkVHXyI7ICB0aGVzZSAgYXJlIHVzZWQgZm9yIHNldHRpbmcKKyAgICAgICBvcHRpb25zIGFuZCBpZGVudGlmeWluZyBlcnJvciBjb2Rlcy4KKworCitDT01QSUxJTkcgQSBQQVRURVJOCisKKyAgICAgICBUaGUgZnVuY3Rpb24gcmVnY29tcCgpIGlzIGNhbGxlZCB0byBjb21waWxlIGEgcGF0dGVybiBpbnRvIGFuICBpbnRlcm5hbAorICAgICAgIGZvcm0uICBUaGUgIHBhdHRlcm4gIGlzICBhIEMgc3RyaW5nIHRlcm1pbmF0ZWQgYnkgYSBiaW5hcnkgemVybywgYW5kIGlzCisgICAgICAgcGFzc2VkIGluIHRoZSBhcmd1bWVudCBwYXR0ZXJuLiBUaGUgcHJlZyBhcmd1bWVudCBpcyAgYSAgcG9pbnRlciAgdG8gIGEKKyAgICAgICByZWdleF90ICBzdHJ1Y3R1cmUgdGhhdCBpcyB1c2VkIGFzIGEgYmFzZSBmb3Igc3RvcmluZyBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgIHRoZSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24uCisKKyAgICAgICBUaGUgYXJndW1lbnQgY2ZsYWdzIGlzIGVpdGhlciB6ZXJvLCBvciBjb250YWlucyBvbmUgb3IgbW9yZSBvZiB0aGUgYml0cworICAgICAgIGRlZmluZWQgYnkgdGhlIGZvbGxvd2luZyBtYWNyb3M6CisKKyAgICAgICAgIFJFR19ET1RBTEwKKworICAgICAgIFRoZSAgUENSRTJfRE9UQUxMICBvcHRpb24gIGlzIHNldCB3aGVuIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgcGFzc2VkCisgICAgICAgZm9yIGNvbXBpbGF0aW9uIHRvIHRoZSBuYXRpdmUgZnVuY3Rpb24uIE5vdGUgIHRoYXQgIFJFR19ET1RBTEwgIGlzICBub3QKKyAgICAgICBwYXJ0IG9mIHRoZSBQT1NJWCBzdGFuZGFyZC4KKworICAgICAgICAgUkVHX0lDQVNFCisKKyAgICAgICBUaGUgIFBDUkUyX0NBU0VMRVNTIG9wdGlvbiBpcyBzZXQgd2hlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIHBhc3NlZAorICAgICAgIGZvciBjb21waWxhdGlvbiB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLgorCisgICAgICAgICBSRUdfTkVXTElORQorCisgICAgICAgVGhlIFBDUkUyX01VTFRJTElORSBvcHRpb24gaXMgc2V0IHdoZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBwYXNzZWQKKyAgICAgICBmb3IgIGNvbXBpbGF0aW9uICB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBtaW1pYworICAgICAgIHRoZSBkZWZpbmVkIFBPU0lYIGJlaGF2aW91ciBmb3IgUkVHX05FV0xJTkUgIChzZWUgIHRoZSAgZm9sbG93aW5nICBzZWMtCisgICAgICAgdGlvbikuCisKKyAgICAgICAgIFJFR19OT1NVQgorCisgICAgICAgVGhlICBQQ1JFMl9OT19BVVRPX0NBUFRVUkUgb3B0aW9uIGlzIHNldCB3aGVuIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMKKyAgICAgICBwYXNzZWQgZm9yIGNvbXBpbGF0aW9uIHRvIHRoZSBuYXRpdmUgZnVuY3Rpb24uIEluIGFkZGl0aW9uLCB3aGVuIGEgcGF0LQorICAgICAgIHRlcm4gIHRoYXQgaXMgY29tcGlsZWQgd2l0aCB0aGlzIGZsYWcgaXMgcGFzc2VkIHRvIHJlZ2V4ZWMoKSBmb3IgbWF0Y2gtCisgICAgICAgaW5nLCB0aGUgbm1hdGNoIGFuZCBwbWF0Y2ggIGFyZ3VtZW50cyAgYXJlICBpZ25vcmVkLCAgYW5kICBubyAgY2FwdHVyZWQKKyAgICAgICBzdHJpbmdzIGFyZSByZXR1cm5lZC4KKworICAgICAgICAgUkVHX1VDUAorCisgICAgICAgVGhlICBQQ1JFMl9VQ1AgIG9wdGlvbiBpcyBzZXQgd2hlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIHBhc3NlZCBmb3IKKyAgICAgICBjb21waWxhdGlvbiB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBUaGlzIGNhdXNlcyBQQ1JFMiAgdG8gIHVzZSAgVW5pY29kZQorICAgICAgIHByb3BlcnRpZXMgIHdoZW4gIG1hdGNoaW5lICBcZCwgIFx3LCAgZXRjLiwgaW5zdGVhZCBvZiBqdXN0IHJlY29nbml6aW5nCisgICAgICAgQVNDSUkgdmFsdWVzLiBOb3RlIHRoYXQgUkVHX1VDUCBpcyBub3QgcGFydCBvZiB0aGUgUE9TSVggc3RhbmRhcmQuCisKKyAgICAgICAgIFJFR19VTkdSRUVEWQorCisgICAgICAgVGhlIFBDUkUyX1VOR1JFRURZIG9wdGlvbiBpcyBzZXQgd2hlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzICBwYXNzZWQKKyAgICAgICBmb3IgIGNvbXBpbGF0aW9uICB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBOb3RlIHRoYXQgUkVHX1VOR1JFRURZIGlzIG5vdAorICAgICAgIHBhcnQgb2YgdGhlIFBPU0lYIHN0YW5kYXJkLgorCisgICAgICAgICBSRUdfVVRGCisKKyAgICAgICBUaGUgUENSRTJfVVRGIG9wdGlvbiBpcyBzZXQgd2hlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzICBwYXNzZWQgIGZvcgorICAgICAgIGNvbXBpbGF0aW9uICB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBUaGlzIGNhdXNlcyB0aGUgcGF0dGVybiBpdHNlbGYgYW5kCisgICAgICAgYWxsIGRhdGEgc3RyaW5ncyB1c2VkIGZvciBtYXRjaGluZyBpdCB0byBiZSB0cmVhdGVkIGFzICBVVEYtOCAgc3RyaW5ncy4KKyAgICAgICBOb3RlIHRoYXQgUkVHX1VURiBpcyBub3QgcGFydCBvZiB0aGUgUE9TSVggc3RhbmRhcmQuCisKKyAgICAgICBJbiAgdGhlICBhYnNlbmNlICBvZiAgdGhlc2UgIGZsYWdzLCBubyBvcHRpb25zIGFyZSBwYXNzZWQgdG8gdGhlIG5hdGl2ZQorICAgICAgIGZ1bmN0aW9uLiAgVGhpcyBtZWFucyB0aGUgdGhlIHJlZ2V4ICBpcyAgY29tcGlsZWQgIHdpdGggIFBDUkUyICBkZWZhdWx0CisgICAgICAgc2VtYW50aWNzLiAgSW4gcGFydGljdWxhciwgdGhlIHdheSBpdCBoYW5kbGVzIG5ld2xpbmUgY2hhcmFjdGVycyBpbiB0aGUKKyAgICAgICBzdWJqZWN0IHN0cmluZyBpcyB0aGUgUGVybCB3YXksIG5vdCB0aGUgUE9TSVggd2F5LiAgTm90ZSAgdGhhdCAgc2V0dGluZworICAgICAgIFBDUkUyX01VTFRJTElORSBoYXMgb25seSBzb21lIG9mIHRoZSBlZmZlY3RzIHNwZWNpZmllZCBmb3IgUkVHX05FV0xJTkUuCisgICAgICAgSXQgZG9lcyBub3QgYWZmZWN0IHRoZSB3YXkgbmV3bGluZXMgYXJlIG1hdGNoZWQgYnkgdGhlIGRvdCAgbWV0YWNoYXJhYy0KKyAgICAgICB0ZXIgKHRoZXkgYXJlIG5vdCkgb3IgYnkgYSBuZWdhdGl2ZSBjbGFzcyBzdWNoIGFzIFteYV0gKHRoZXkgYXJlKS4KKworICAgICAgIFRoZSAgeWllbGQgb2YgcmVnY29tcCgpIGlzIHplcm8gb24gc3VjY2VzcywgYW5kIG5vbi16ZXJvIG90aGVyd2lzZS4gVGhlCisgICAgICAgcHJlZyBzdHJ1Y3R1cmUgaXMgZmlsbGVkIGluIG9uIHN1Y2Nlc3MsIGFuZCBvbmUgbWVtYmVyIG9mIHRoZSBzdHJ1Y3R1cmUKKyAgICAgICBpcyAgcHVibGljOiByZV9uc3ViIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgY2FwdHVyaW5nIHN1YnBhdHRlcm5zIGluIHRoZQorICAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbi4gVmFyaW91cyBlcnJvciBjb2RlcyBhcmUgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUuCisKKyAgICAgICBOT1RFOiBJZiB0aGUgeWllbGQgb2YgcmVnY29tcCgpIGlzIG5vbi16ZXJvLCB5b3UgbXVzdCAgbm90ICBhdHRlbXB0ICB0bworICAgICAgIHVzZSB0aGUgY29udGVudHMgb2YgdGhlIHByZWcgc3RydWN0dXJlLiBJZiwgZm9yIGV4YW1wbGUsIHlvdSBwYXNzIGl0IHRvCisgICAgICAgcmVnZXhlYygpLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZCBhbmQgeW91ciBwcm9ncmFtIGlzIGxpa2VseSB0byBjcmFzaC4KKworCitNQVRDSElORyBORVdMSU5FIENIQVJBQ1RFUlMKKworICAgICAgIFRoaXMgYXJlYSBpcyBub3Qgc2ltcGxlLCBiZWNhdXNlIFBPU0lYIGFuZCBQZXJsIHRha2UgZGlmZmVyZW50IHZpZXdzIG9mCisgICAgICAgdGhpbmdzLiAgIEl0ICBpcyBub3QgcG9zc2libGUgdG8gZ2V0IFBDUkUyIHRvIG9iZXkgUE9TSVggc2VtYW50aWNzLCBidXQKKyAgICAgICB0aGVuIFBDUkUyIHdhcyBuZXZlciBpbnRlbmRlZCB0byBiZSBhIFBPU0lYIGVuZ2luZS4gVGhlIGZvbGxvd2luZyB0YWJsZQorICAgICAgIGxpc3RzICB0aGUgIGRpZmZlcmVudCAgcG9zc2liaWxpdGllcyBmb3IgbWF0Y2hpbmcgbmV3bGluZSBjaGFyYWN0ZXJzIGluCisgICAgICAgUGVybCBhbmQgUENSRTI6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgICBDaGFuZ2Ugd2l0aAorCisgICAgICAgICAuIG1hdGNoZXMgbmV3bGluZSAgICAgICAgICBubyAgICAgUENSRTJfRE9UQUxMCisgICAgICAgICBuZXdsaW5lIG1hdGNoZXMgW15hXSAgICAgICB5ZXMgICAgbm90IGNoYW5nZWFibGUKKyAgICAgICAgICQgbWF0Y2hlcyBcbiBhdCBlbmQgICAgICAgIHllcyAgICBQQ1JFMl9ET0xMQVJfRU5ET05MWQorICAgICAgICAgJCBtYXRjaGVzIFxuIGluIG1pZGRsZSAgICAgbm8gICAgIFBDUkUyX01VTFRJTElORQorICAgICAgICAgXiBtYXRjaGVzIFxuIGluIG1pZGRsZSAgICAgbm8gICAgIFBDUkUyX01VTFRJTElORQorCisgICAgICAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCB0YWJsZSBmb3IgYSBQT1NJWC1jb21wYXRpYmxlIHBhdHRlcm4gbWF0Y2hlcjoKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCAgIENoYW5nZSB3aXRoCisKKyAgICAgICAgIC4gbWF0Y2hlcyBuZXdsaW5lICAgICAgICAgIHllcyAgICBSRUdfTkVXTElORQorICAgICAgICAgbmV3bGluZSBtYXRjaGVzIFteYV0gICAgICAgeWVzICAgIFJFR19ORVdMSU5FCisgICAgICAgICAkIG1hdGNoZXMgXG4gYXQgZW5kICAgICAgICBubyAgICAgUkVHX05FV0xJTkUKKyAgICAgICAgICQgbWF0Y2hlcyBcbiBpbiBtaWRkbGUgICAgIG5vICAgICBSRUdfTkVXTElORQorICAgICAgICAgXiBtYXRjaGVzIFxuIGluIG1pZGRsZSAgICAgbm8gICAgIFJFR19ORVdMSU5FCisKKyAgICAgICBUaGlzIGJlaGF2aW91ciBpcyBub3Qgd2hhdCBoYXBwZW5zIHdoZW4gUENSRTIgaXMgY2FsbGVkIHZpYSAgaXRzICBQT1NJWAorICAgICAgIEFQSS4gIEJ5ICBkZWZhdWx0LCBQQ1JFMidzIGJlaGF2aW91ciBpcyB0aGUgc2FtZSBhcyBQZXJsJ3MsIGV4Y2VwdCB0aGF0CisgICAgICAgdGhlcmUgaXMgbm8gZXF1aXZhbGVudCBmb3IgUENSRTJfRE9MTEFSX0VORE9OTFkgaW4gUGVybC4gSW4gYm90aCAgUENSRTIKKyAgICAgICBhbmQgUGVybCwgdGhlcmUgaXMgbm8gd2F5IHRvIHN0b3AgbmV3bGluZSBmcm9tIG1hdGNoaW5nIFteYV0uCisKKyAgICAgICBEZWZhdWx0ICBQT1NJWCBuZXdsaW5lIGhhbmRsaW5nIGNhbiBiZSBvYnRhaW5lZCBieSBzZXR0aW5nIFBDUkUyX0RPVEFMTAorICAgICAgIGFuZCBQQ1JFMl9ET0xMQVJfRU5ET05MWSB3aGVuICBjYWxsaW5nICBwY3JlMl9jb21waWxlKCkgIGRpcmVjdGx5LCAgYnV0CisgICAgICAgdGhlcmUgIGlzICBubyAgd2F5ICB0byBtYWtlIFBDUkUyIGJlaGF2ZSBleGFjdGx5IGFzIGZvciB0aGUgUkVHX05FV0xJTkUKKyAgICAgICBhY3Rpb24uIFdoZW4gdXNpbmcgdGhlIFBPU0lYIEFQSSwgcGFzc2luZyBSRUdfTkVXTElORSB0byAgUENSRTIncyAgcmVnLQorICAgICAgIGNvbXAoKSBmdW5jdGlvbiBjYXVzZXMgUENSRTJfTVVMVElMSU5FIHRvIGJlIHBhc3NlZCB0byBwY3JlMl9jb21waWxlKCksCisgICAgICAgYW5kIFJFR19ET1RBTEwgcGFzc2VzIFBDUkUyX0RPVEFMTC4gVGhlcmUgaXMgbm8gd2F5IHRvIHBhc3MgIFBDUkUyX0RPTC0KKyAgICAgICBMQVJfRU5ET05MWS4KKworCitNQVRDSElORyBBIFBBVFRFUk4KKworICAgICAgIFRoZSAgZnVuY3Rpb24gIHJlZ2V4ZWMoKSAgaXMgIGNhbGxlZCAgdG8gIG1hdGNoIGEgY29tcGlsZWQgcGF0dGVybiBwcmVnCisgICAgICAgYWdhaW5zdCBhIGdpdmVuIHN0cmluZywgd2hpY2ggaXMgYnkgZGVmYXVsdCB0ZXJtaW5hdGVkIGJ5IGEgIHplcm8gIGJ5dGUKKyAgICAgICAoYnV0ICBzZWUgIFJFR19TVEFSVEVORCBiZWxvdyksIHN1YmplY3QgdG8gdGhlIG9wdGlvbnMgaW4gZWZsYWdzLiBUaGVzZQorICAgICAgIGNhbiBiZToKKworICAgICAgICAgUkVHX05PVEJPTAorCisgICAgICAgVGhlIFBDUkUyX05PVEJPTCBvcHRpb24gaXMgc2V0IHdoZW4gY2FsbGluZyB0aGUgdW5kZXJseWluZyBQQ1JFMiBtYXRjaC0KKyAgICAgICBpbmcgZnVuY3Rpb24uCisKKyAgICAgICAgIFJFR19OT1RFTVBUWQorCisgICAgICAgVGhlICBQQ1JFMl9OT1RFTVBUWSAgb3B0aW9uICBpcyAgc2V0ICB3aGVuIGNhbGxpbmcgdGhlIHVuZGVybHlpbmcgUENSRTIKKyAgICAgICBtYXRjaGluZyBmdW5jdGlvbi4gTm90ZSB0aGF0IFJFR19OT1RFTVBUWSBpcyAgbm90ICBwYXJ0ICBvZiAgdGhlICBQT1NJWAorICAgICAgIHN0YW5kYXJkLiAgSG93ZXZlciwgc2V0dGluZyB0aGlzIG9wdGlvbiBjYW4gZ2l2ZSBtb3JlIFBPU0lYLWxpa2UgYmVoYXYtCisgICAgICAgaW91ciBpbiBzb21lIHNpdHVhdGlvbnMuCisKKyAgICAgICAgIFJFR19OT1RFT0wKKworICAgICAgIFRoZSBQQ1JFMl9OT1RFT0wgb3B0aW9uIGlzIHNldCB3aGVuIGNhbGxpbmcgdGhlIHVuZGVybHlpbmcgUENSRTIgbWF0Y2gtCisgICAgICAgaW5nIGZ1bmN0aW9uLgorCisgICAgICAgICBSRUdfU1RBUlRFTkQKKworICAgICAgIFRoZSAgc3RyaW5nICBpcyAgY29uc2lkZXJlZCB0byBzdGFydCBhdCBzdHJpbmcgKyBwbWF0Y2hbMF0ucm1fc28gYW5kIHRvCisgICAgICAgaGF2ZSBhIHRlcm1pbmF0aW5nIE5VTCBsb2NhdGVkIGF0IHN0cmluZyArIHBtYXRjaFswXS5ybV9lbyAodGhlcmUgIG5lZWQKKyAgICAgICBub3QgIGFjdHVhbGx5ICBiZSAgYSAgTlVMIGF0IHRoYXQgbG9jYXRpb24pLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZgorICAgICAgIG5tYXRjaC4gVGhpcyBpcyBhIEJTRCBleHRlbnNpb24sIGNvbXBhdGlibGUgd2l0aCBidXQgbm90ICBzcGVjaWZpZWQgIGJ5CisgICAgICAgSUVFRSAgU3RhbmRhcmQgIDEwMDMuMiAgKFBPU0lYLjIpLCAgYW5kICBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24gaW4KKyAgICAgICBzb2Z0d2FyZSBpbnRlbmRlZCB0byBiZSBwb3J0YWJsZSB0byBvdGhlciBzeXN0ZW1zLiBOb3RlIHRoYXQgYSBub24temVybworICAgICAgIHJtX3NvIGRvZXMgbm90IGltcGx5IFJFR19OT1RCT0w7IFJFR19TVEFSVEVORCBhZmZlY3RzIG9ubHkgdGhlIGxvY2F0aW9uCisgICAgICAgb2YgdGhlIHN0cmluZywgbm90IGhvdyBpdCBpcyBtYXRjaGVkLiBTZXR0aW5nIFJFR19TVEFSVEVORCBhbmQgIHBhc3NpbmcKKyAgICAgICBwbWF0Y2ggIGFzICBOVUxMICBhcmUgIG11dHVhbGx5ICBleGNsdXNpdmU7ICB0aGUgIGVycm9yICBSRUdfSU5WQVJHICBpcworICAgICAgIHJldHVybmVkLgorCisgICAgICAgSWYgdGhlIHBhdHRlcm4gd2FzIGNvbXBpbGVkIHdpdGggdGhlIFJFR19OT1NVQiBmbGFnLCBubyBkYXRhIGFib3V0ICBhbnkKKyAgICAgICBtYXRjaGVkICBzdHJpbmdzICBpcyAgcmV0dXJuZWQuICBUaGUgIG5tYXRjaCAgYW5kICBwbWF0Y2ggIGFyZ3VtZW50cyBvZgorICAgICAgIHJlZ2V4ZWMoKSBhcmUgaWdub3JlZC4KKworICAgICAgIElmIHRoZSB2YWx1ZSBvZiBubWF0Y2ggaXMgemVybywgb3IgaWYgdGhlIHZhbHVlIHBtYXRjaCBpcyBOVUxMLCBubyBkYXRhCisgICAgICAgYWJvdXQgYW55IG1hdGNoZWQgc3RyaW5ncyBpcyByZXR1cm5lZC4KKworICAgICAgIE90aGVyd2lzZSx0aGUgcG9ydGlvbiBvZiB0aGUgc3RyaW5nIHRoYXQgd2FzIG1hdGNoZWQsIGFuZCBhbHNvIGFueSBjYXAtCisgICAgICAgdHVyZWQgc3Vic3RyaW5ncywgYXJlIHJldHVybmVkIHZpYSB0aGUgcG1hdGNoIGFyZ3VtZW50LCB3aGljaCBwb2ludHMgdG8KKyAgICAgICBhbiAgYXJyYXkgIG9mIG5tYXRjaCBzdHJ1Y3R1cmVzIG9mIHR5cGUgcmVnbWF0Y2hfdCwgY29udGFpbmluZyB0aGUgbWVtLQorICAgICAgIGJlcnMgcm1fc28gYW5kIHJtX2VvLiBUaGVzZSBjb250YWluIHRoZSBieXRlIG9mZnNldCB0byB0aGUgZmlyc3QgIGNoYXItCisgICAgICAgYWN0ZXIgb2YgZWFjaCBzdWJzdHJpbmcgYW5kIHRoZSBvZmZzZXQgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUKKyAgICAgICBlbmQgb2YgZWFjaCBzdWJzdHJpbmcsIHJlc3BlY3RpdmVseS4gVGhlICAwdGggIGVsZW1lbnQgIG9mICB0aGUgIHZlY3RvcgorICAgICAgIHJlbGF0ZXMgIHRvICB0aGUgIGVudGlyZSBwb3J0aW9uIG9mIHN0cmluZyB0aGF0IHdhcyBtYXRjaGVkOyBzdWJzZXF1ZW50CisgICAgICAgZWxlbWVudHMgcmVsYXRlIHRvIHRoZSBjYXB0dXJpbmcgc3VicGF0dGVybnMgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4KKyAgICAgICBVbnVzZWQgZW50cmllcyBpbiB0aGUgYXJyYXkgaGF2ZSBib3RoIHN0cnVjdHVyZSBtZW1iZXJzIHNldCB0byAtMS4KKworICAgICAgIEEgIHN1Y2Nlc3NmdWwgIG1hdGNoICB5aWVsZHMgIGEgIHplcm8gIHJldHVybjsgIHZhcmlvdXMgZXJyb3IgY29kZXMgYXJlCisgICAgICAgZGVmaW5lZCBpbiB0aGUgaGVhZGVyIGZpbGUsIG9mICB3aGljaCAgUkVHX05PTUFUQ0ggIGlzICB0aGUgICJleHBlY3RlZCIKKyAgICAgICBmYWlsdXJlIGNvZGUuCisKKworRVJST1IgTUVTU0FHRVMKKworICAgICAgIFRoZSByZWdlcnJvcigpIGZ1bmN0aW9uIG1hcHMgYSBub24temVybyBlcnJvcmNvZGUgZnJvbSBlaXRoZXIgcmVnY29tcCgpCisgICAgICAgb3IgcmVnZXhlYygpIHRvIGEgcHJpbnRhYmxlIG1lc3NhZ2UuIElmIHByZWcgaXMgIG5vdCAgTlVMTCwgIHRoZSAgZXJyb3IKKyAgICAgICBzaG91bGQgaGF2ZSBhcmlzZW4gZnJvbSB0aGUgdXNlIG9mIHRoYXQgc3RydWN0dXJlLiBBIG1lc3NhZ2UgdGVybWluYXRlZAorICAgICAgIGJ5IGEgYmluYXJ5IHplcm8gaXMgcGxhY2VkIGluIGVycmJ1Zi4gSWYgdGhlIGJ1ZmZlciBpcyB0b28gc2hvcnQsICBvbmx5CisgICAgICAgdGhlIGZpcnN0IGVycmJ1Zl9zaXplIC0gMSBjaGFyYWN0ZXJzIG9mIHRoZSBlcnJvciBtZXNzYWdlIGFyZSB1c2VkLiBUaGUKKyAgICAgICB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgdGhlIHNpemUgb2YgYnVmZmVyIG5lZWRlZCB0byAgaG9sZCAgdGhlICB3aG9sZQorICAgICAgIG1lc3NhZ2UsICBpbmNsdWRpbmcgIHRoZSAgdGVybWluYXRpbmcgIHplcm8uIFRoaXMgdmFsdWUgaXMgZ3JlYXRlciB0aGFuCisgICAgICAgZXJyYnVmX3NpemUgaWYgdGhlIG1lc3NhZ2Ugd2FzIHRydW5jYXRlZC4KKworCitNRU1PUlkgVVNBR0UKKworICAgICAgIENvbXBpbGluZyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYXVzZXMgbWVtb3J5IHRvIGJlIGFsbG9jYXRlZCBhbmQgIGFzc28tCisgICAgICAgY2lhdGVkICB3aXRoICB0aGUgcHJlZyBzdHJ1Y3R1cmUuIFRoZSBmdW5jdGlvbiByZWdmcmVlKCkgZnJlZXMgYWxsIHN1Y2gKKyAgICAgICBtZW1vcnksIGFmdGVyIHdoaWNoIHByZWcgbWF5IG5vIGxvbmdlciBiZSB1c2VkIGFzICBhICBjb21waWxlZCAgZXhwcmVzLQorICAgICAgIHNpb24uCisKKworQVVUSE9SCisKKyAgICAgICBQaGlsaXAgSGF6ZWwKKyAgICAgICBVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCisgICAgICAgQ2FtYnJpZGdlLCBFbmdsYW5kLgorCisKK1JFVklTSU9OCisKKyAgICAgICBMYXN0IHVwZGF0ZWQ6IDI5IE5vdmVtYmVyIDIwMTUKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1BDUkUyU0FNUExFKDMpICAgICAgICAgICAgIExpYnJhcnkgRnVuY3Rpb25zIE1hbnVhbCAgICAgICAgICAgICBQQ1JFMlNBTVBMRSgzKQorCisKKworTkFNRQorICAgICAgIFBDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorCitQQ1JFMiBTQU1QTEUgUFJPR1JBTQorCisgICAgICAgQSAgc2ltcGxlLCBjb21wbGV0ZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0gdG8gZ2V0IHlvdSBzdGFydGVkIHdpdGggdXNpbmcKKyAgICAgICBQQ1JFMiBpcyBzdXBwbGllZCBpbiB0aGUgZmlsZSBwY3JlMmRlbW8uYyBpbiB0aGUgc3JjIGRpcmVjdG9yeSAgaW4gIHRoZQorICAgICAgIFBDUkUyIGRpc3RyaWJ1dGlvbi4gQSBsaXN0aW5nIG9mIHRoaXMgcHJvZ3JhbSBpcyBnaXZlbiBpbiB0aGUgcGNyZTJkZW1vCisgICAgICAgZG9jdW1lbnRhdGlvbi4gSWYgeW91IGRvIG5vdCBoYXZlIGEgY29weSBvZiB0aGUgUENSRTIgZGlzdHJpYnV0aW9uLCB5b3UKKyAgICAgICBjYW4gc2F2ZSB0aGlzIGxpc3RpbmcgdG8gcmUtY3JlYXRlIHRoZSBjb250ZW50cyBvZiBwY3JlMmRlbW8uYy4KKworICAgICAgIFRoZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0sIHdoaWNoIHVzZXMgdGhlIFBDUkUyIDgtYml0IGxpYnJhcnksIGNvbXBpbGVzCisgICAgICAgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IGlzICBpdHMgIGZpcnN0ICBhcmd1bWVudCwgIGFuZCAgbWF0Y2hlcyAgaXQKKyAgICAgICBhZ2FpbnN0IHRoZSBzdWJqZWN0IHN0cmluZyBpbiBpdHMgc2Vjb25kIGFyZ3VtZW50LiBObyBQQ1JFMiBvcHRpb25zIGFyZQorICAgICAgIHNldCwgYW5kIGRlZmF1bHQgY2hhcmFjdGVyIHRhYmxlcyBhcmUgdXNlZC4gSWYgbWF0Y2hpbmcgIHN1Y2NlZWRzLCAgdGhlCisgICAgICAgcHJvZ3JhbSAgb3V0cHV0cyB0aGUgcG9ydGlvbiBvZiB0aGUgc3ViamVjdCB0aGF0IG1hdGNoZWQsIHRvZ2V0aGVyIHdpdGgKKyAgICAgICB0aGUgY29udGVudHMgb2YgYW55IGNhcHR1cmVkIHN1YnN0cmluZ3MuCisKKyAgICAgICBJZiB0aGUgLWcgb3B0aW9uIGlzIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBwcm9ncmFtIHRoZW4gZ29lcyBvbgorICAgICAgIHRvIGNoZWNrIGZvciBmdXJ0aGVyIG1hdGNoZXMgb2YgdGhlIHNhbWUgcmVndWxhciBleHByZXNzaW9uIGluIHRoZSBzYW1lCisgICAgICAgc3ViamVjdCBzdHJpbmcuIFRoZSBsb2dpYyBpcyBhIGxpdHRsZSBiaXQgdHJpY2t5IGJlY2F1c2Ugb2YgdGhlICBwb3NzaS0KKyAgICAgICBiaWxpdHkgIG9mICBtYXRjaGluZyBhbiBlbXB0eSBzdHJpbmcuIENvbW1lbnRzIGluIHRoZSBjb2RlIGV4cGxhaW4gd2hhdAorICAgICAgIGlzIGdvaW5nIG9uLgorCisgICAgICAgSWYgUENSRTIgaXMgaW5zdGFsbGVkIGluIHRoZSBzdGFuZGFyZCBpbmNsdWRlIGFuZCAgbGlicmFyeSAgZGlyZWN0b3JpZXMKKyAgICAgICBmb3IgeW91ciBvcGVyYXRpbmcgc3lzdGVtLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gY29tcGlsZSB0aGUgZGVtb25zdHJhLQorICAgICAgIHRpb24gcHJvZ3JhbSB1c2luZyB0aGlzIGNvbW1hbmQ6CisKKyAgICAgICAgIGdjYyAtbyBwY3JlMmRlbW8gcGNyZTJkZW1vLmMgLWxwY3JlMi04CisKKyAgICAgICBJZiBQQ1JFMiBpcyBpbnN0YWxsZWQgZWxzZXdoZXJlLCB5b3UgbWF5IG5lZWQgdG8gYWRkIGFkZGl0aW9uYWwgb3B0aW9ucworICAgICAgIHRvICB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZSwgb24gYSBVbml4LWxpa2Ugc3lzdGVtIHRoYXQgaGFzIFBDUkUyCisgICAgICAgaW5zdGFsbGVkIGluIC91c3IvbG9jYWwsIHlvdSAgY2FuICBjb21waWxlICB0aGUgIGRlbW9uc3RyYXRpb24gIHByb2dyYW0KKyAgICAgICB1c2luZyBhIGNvbW1hbmQgbGlrZSB0aGlzOgorCisgICAgICAgICBnY2MgLW8gcGNyZTJkZW1vIC1JL3Vzci9sb2NhbC9pbmNsdWRlIHBjcmUyZGVtby5jIFwKKyAgICAgICAgICAgICAtTC91c3IvbG9jYWwvbGliIC1scGNyZTItOAorCisKKyAgICAgICBPbmNlICB5b3UgIGhhdmUgIGNvbXBpbGVkIGFuZCBsaW5rZWQgdGhlIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSwgeW91IGNhbgorICAgICAgIHJ1biBzaW1wbGUgdGVzdHMgbGlrZSB0aGlzOgorCisgICAgICAgICAuL3BjcmUyZGVtbyAnY2F0fGRvZycgJ3RoZSBjYXQgc2F0IG9uIHRoZSBtYXQnCisgICAgICAgICAuL3BjcmUyZGVtbyAtZyAnY2F0fGRvZycgJ3RoZSBkb2cgc2F0IG9uIHRoZSBjYXQnCisKKyAgICAgICBOb3RlIHRoYXQgdGhlcmUgaXMgYSAgbXVjaCAgbW9yZSAgY29tcHJlaGVuc2l2ZSAgdGVzdCAgcHJvZ3JhbSwgIGNhbGxlZAorICAgICAgIHBjcmUydGVzdCwgIHdoaWNoICBzdXBwb3J0cyAgbWFueSAgbW9yZSAgZmFjaWxpdGllcyBmb3IgdGVzdGluZyByZWd1bGFyCisgICAgICAgZXhwcmVzc2lvbnMgdXNpbmcgdGhlIFBDUkUyIGxpYnJhcmllcy4gVGhlIHBjcmUyZGVtbyAgcHJvZ3JhbSAgaXMgIHByby0KKyAgICAgICB2aWRlZCBhcyBhIHNpbXBsZSBjb2RpbmcgZXhhbXBsZS4KKworICAgICAgIElmIHlvdSB0cnkgdG8gcnVuIHBjcmUyZGVtbyB3aGVuIFBDUkUyIGlzIG5vdCBpbnN0YWxsZWQgaW4gdGhlIHN0YW5kYXJkCisgICAgICAgbGlicmFyeSBkaXJlY3RvcnksIHlvdSBtYXkgZ2V0IGFuIGVycm9yIGxpa2UgIHRoaXMgIG9uICBzb21lICBvcGVyYXRpbmcKKyAgICAgICBzeXN0ZW1zIChlLmcuIFNvbGFyaXMpOgorCisgICAgICAgICBsZC5zby4xOiAgYS5vdXQ6ICBmYXRhbDogIGxpYnBjcmUyLnNvLjA6IG9wZW4gZmFpbGVkOiBObyBzdWNoIGZpbGUgb3IKKyAgICAgICBkaXJlY3RvcnkKKworICAgICAgIFRoaXMgaXMgY2F1c2VkIGJ5IHRoZSB3YXkgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCB3b3JrcyAgb24gIHRob3NlICBzeXMtCisgICAgICAgdGVtcy4gWW91IG5lZWQgdG8gYWRkCisKKyAgICAgICAgIC1SL3Vzci9sb2NhbC9saWIKKworICAgICAgIChmb3IgZXhhbXBsZSkgdG8gdGhlIGNvbXBpbGUgY29tbWFuZCB0byBnZXQgcm91bmQgdGhpcyBwcm9ibGVtLgorCisKK0FVVEhPUgorCisgICAgICAgUGhpbGlwIEhhemVsCisgICAgICAgVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorICAgICAgIENhbWJyaWRnZSwgRW5nbGFuZC4KKworCitSRVZJU0lPTgorCisgICAgICAgTGFzdCB1cGRhdGVkOiAyMCBPY3RvYmVyIDIwMTQKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUENSRTJTRVJJQUxJWkUoMykgICAgICAgICAgTGlicmFyeSBGdW5jdGlvbnMgTWFudWFsICAgICAgICAgIFBDUkUyU0VSSUFMSVpFKDMpCisKKworCitOQU1FCisgICAgICAgUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisKK1NBVklORyBBTkQgUkUtVVNJTkcgUFJFQ09NUElMRUQgUENSRTIgUEFUVEVSTlMKKworICAgICAgIGludDMyX3QgcGNyZTJfc2VyaWFsaXplX2RlY29kZShwY3JlMl9jb2RlICoqY29kZXMsCisgICAgICAgICBpbnQzMl90IG51bWJlcl9vZl9jb2RlcywgY29uc3QgdWludDMyX3QgKmJ5dGVzLAorICAgICAgICAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCk7CisKKyAgICAgICBpbnQzMl90IHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUocGNyZTJfY29kZSAqKmNvZGVzLAorICAgICAgICAgaW50MzJfdCBudW1iZXJfb2ZfY29kZXMsIHVpbnQzMl90ICoqc2VyaWFsaXplZF9ieXRlcywKKyAgICAgICAgIFBDUkUyX1NJWkUgKnNlcmlhbGl6ZWRfc2l6ZSwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCk7CisKKyAgICAgICB2b2lkIHBjcmUyX3NlcmlhbGl6ZV9mcmVlKHVpbnQ4X3QgKmJ5dGVzKTsKKworICAgICAgIGludDMyX3QgcGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXMoY29uc3QgdWludDhfdCAqYnl0ZXMpOworCisgICAgICAgSWYgIHlvdSAgYXJlIHJ1bm5pbmcgYW4gYXBwbGljYXRpb24gdGhhdCB1c2VzIGEgbGFyZ2UgbnVtYmVyIG9mIHJlZ3VsYXIKKyAgICAgICBleHByZXNzaW9uIHBhdHRlcm5zLCBpdCBtYXkgYmUgdXNlZnVsIHRvIHN0b3JlIHRoZW0gIGluICBhICBwcmVjb21waWxlZAorICAgICAgIGZvcm0gIGluc3RlYWQgIG9mICBoYXZpbmcgdG8gY29tcGlsZSB0aGVtIGV2ZXJ5IHRpbWUgdGhlIGFwcGxpY2F0aW9uIGlzCisgICAgICAgcnVuLiBIb3dldmVyLCBpZiB5b3UgYXJlIHVzaW5nIHRoZSBqdXN0LWluLXRpbWUgIG9wdGltaXphdGlvbiAgZmVhdHVyZSwKKyAgICAgICBpdCBpcyBub3QgcG9zc2libGUgdG8gc2F2ZSBhbmQgcmVsb2FkIHRoZSBKSVQgZGF0YSwgYmVjYXVzZSBpdCBpcyBwb3NpLQorICAgICAgIHRpb24tZGVwZW5kZW50LiBUaGUgaG9zdCBvbiB3aGljaCB0aGUgcGF0dGVybnMgIGFyZSAgcmVsb2FkZWQgIG11c3QgIGJlCisgICAgICAgcnVubmluZyAgdGhlICBzYW1lIHZlcnNpb24gb2YgUENSRTIsIHdpdGggdGhlIHNhbWUgY29kZSB1bml0IHdpZHRoLCBhbmQKKyAgICAgICBtdXN0IGFsc28gaGF2ZSB0aGUgc2FtZSBlbmRpYW5uZXNzLCBwb2ludGVyIHdpZHRoIGFuZCBQQ1JFMl9TSVpFICB0eXBlLgorICAgICAgIEZvciAgZXhhbXBsZSwgcGF0dGVybnMgY29tcGlsZWQgb24gYSAzMi1iaXQgc3lzdGVtIHVzaW5nIFBDUkUyJ3MgMTYtYml0CisgICAgICAgbGlicmFyeSBjYW5ub3QgYmUgcmVsb2FkZWQgb24gYSA2NC1iaXQgc3lzdGVtLCBub3IgY2FuIHRoZXkgYmUgcmVsb2FkZWQKKyAgICAgICB1c2luZyB0aGUgOC1iaXQgbGlicmFyeS4KKworCitTQVZJTkcgQ09NUElMRUQgUEFUVEVSTlMKKworICAgICAgIEJlZm9yZSBjb21waWxlZCBwYXR0ZXJucyBjYW4gYmUgc2F2ZWQgdGhleSBtdXN0IGJlIHNlcmlhbGl6ZWQsIHRoYXQgaXMsCisgICAgICAgY29udmVydGVkIHRvIGEgc3RyZWFtIG9mIGJ5dGVzLiBBIHNpbmdsZSBieXRlIHN0cmVhbSAgbWF5ICBjb250YWluICBhbnkKKyAgICAgICBudW1iZXIgIG9mICBjb21waWxlZCBwYXR0ZXJucywgYnV0IHRoZXkgbXVzdCBhbGwgdXNlIHRoZSBzYW1lIGNoYXJhY3RlcgorICAgICAgIHRhYmxlcy4gQSBzaW5nbGUgY29weSBvZiB0aGUgdGFibGVzIGlzIGluY2x1ZGVkIGluIHRoZSBieXRlIHN0cmVhbSAoaXRzCisgICAgICAgc2l6ZSBpcyAxMDg4IGJ5dGVzKS4gRm9yIG1vcmUgZGV0YWlscyBvZiBjaGFyYWN0ZXIgdGFibGVzLCBzZWUgdGhlIHNlYy0KKyAgICAgICB0aW9uIG9uIGxvY2FsZSBzdXBwb3J0IGluIHRoZSBwY3JlMmFwaSBkb2N1bWVudGF0aW9uLgorCisgICAgICAgVGhlIGZ1bmN0aW9uIHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUoKSBjcmVhdGVzIGEgc2VyaWFsaXplZCBieXRlICBzdHJlYW0KKyAgICAgICBmcm9tICBhICBsaXN0IG9mIGNvbXBpbGVkIHBhdHRlcm5zLiBJdHMgZmlyc3QgdHdvIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZQorICAgICAgIGxpc3QsIGJlaW5nIGEgcG9pbnRlciB0byBhIHZlY3RvciBvZiBwb2ludGVycyB0byBjb21waWxlZCBwYXR0ZXJucywgYW5kCisgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgdmVjdG9yLiBUaGUgdGhpcmQgYW5kIGZvdXJ0aCBhcmd1bWVudHMgcG9pbnQgdG8gdmFyaS0KKyAgICAgICBhYmxlcyB3aGljaCBhcmUgc2V0IHRvIHBvaW50IHRvIHRoZSBjcmVhdGVkIGJ5dGUgc3RyZWFtIGFuZCBpdHMgbGVuZ3RoLAorICAgICAgIHJlc3BlY3RpdmVseS4gIFRoZSAgZmluYWwgIGFyZ3VtZW50ICBpcyBhIHBvaW50ZXIgdG8gYSBnZW5lcmFsIGNvbnRleHQsCisgICAgICAgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBjdXN0b20gbWVtb3J5ICBtYW5nYWdlbWVudCAgZnVuY3Rpb25zLiAgSWYKKyAgICAgICB0aGlzICBhcmd1bWVudCAgaXMgTlVMTCwgbWFsbG9jKCkgaXMgdXNlZCB0byBvYnRhaW4gbWVtb3J5IGZvciB0aGUgYnl0ZQorICAgICAgIHN0cmVhbS4gVGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyB0aGUgbnVtYmVyIG9mIHNlcmlhbGl6ZWQgcGF0dGVybnMsCisgICAgICAgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisKKyAgICAgICAgIFBDUkUyX0VSUk9SX0JBRERBVEEgICAgICB0aGUgbnVtYmVyIG9mIHBhdHRlcm5zIGlzIHplcm8gb3IgbGVzcworICAgICAgICAgUENSRTJfRVJST1JfQkFETUFHSUMgICAgIG1pc21hdGNoIG9mIGlkIGJ5dGVzIGluIG9uZSBvZiB0aGUgcGF0dGVybnMKKyAgICAgICAgIFBDUkUyX0VSUk9SX01FTU9SWSAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAgICAgICAgIFBDUkUyX0VSUk9SX01JWEVEVEFCTEVTICB0aGUgcGF0dGVybnMgZG8gbm90IGFsbCB1c2UgdGhlIHNhbWUgdGFibGVzCisgICAgICAgICBQQ1JFMl9FUlJPUl9OVUxMICAgICAgICAgdGhlIDFzdCwgM3JkLCBvciA0dGggYXJndW1lbnQgaXMgTlVMTAorCisgICAgICAgUENSRTJfRVJST1JfQkFETUFHSUMgIG1lYW5zICBlaXRoZXIgdGhhdCBhIHBhdHRlcm4ncyBjb2RlIGhhcyBiZWVuIGNvci0KKyAgICAgICBydXB0ZWQsIG9yIHRoYXQgYSBzbG90IGluIHRoZSB2ZWN0b3IgZG9lcyBub3QgcG9pbnQgdG8gYSBjb21waWxlZCAgcGF0LQorICAgICAgIHRlcm4uCisKKyAgICAgICBPbmNlIGEgc2V0IG9mIHBhdHRlcm5zIGhhcyBiZWVuIHNlcmlhbGl6ZWQgeW91IGNhbiBzYXZlIHRoZSBkYXRhIGluIGFueQorICAgICAgIGFwcHJvcHJpYXRlIG1hbm5lci4gSGVyZSBpcyBzYW1wbGUgY29kZSB0aGF0IGNvbXBpbGVzIHR3byBwYXR0ZXJucyAgYW5kCisgICAgICAgd3JpdGVzIHRoZW0gdG8gYSBmaWxlLiBJdCBhc3N1bWVzIHRoYXQgdGhlIHZhcmlhYmxlIGZkIHJlZmVycyB0byBhIGZpbGUKKyAgICAgICB0aGF0IGlzIG9wZW4gZm9yIG91dHB1dC4gVGhlIGVycm9yIGNoZWNraW5nIHRoYXQgc2hvdWxkIGJlIHByZXNlbnQgaW4gYQorICAgICAgIHJlYWwgYXBwbGljYXRpb24gaGFzIGJlZW4gb21pdHRlZCBmb3Igc2ltcGxpY2l0eS4KKworICAgICAgICAgaW50IGVycm9yY29kZTsKKyAgICAgICAgIHVpbnQ4X3QgKmJ5dGVzOworICAgICAgICAgUENSRTJfU0laRSBlcnJvcm9mZnNldDsKKyAgICAgICAgIFBDUkUyX1NJWkUgYnl0ZXNjb3VudDsKKyAgICAgICAgIHBjcmUyX2NvZGUgKmxpc3Rfb2ZfY29kZXNbMl07CisgICAgICAgICBsaXN0X29mX2NvZGVzWzBdID0gcGNyZTJfY29tcGlsZSgiZmlyc3QgcGF0dGVybiIsCisgICAgICAgICAgIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCwgMCwgJmVycm9yY29kZSwgJmVycm9yb2Zmc2V0LCBOVUxMKTsKKyAgICAgICAgIGxpc3Rfb2ZfY29kZXNbMV0gPSBwY3JlMl9jb21waWxlKCJzZWNvbmQgcGF0dGVybiIsCisgICAgICAgICAgIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCwgMCwgJmVycm9yY29kZSwgJmVycm9yb2Zmc2V0LCBOVUxMKTsKKyAgICAgICAgIGVycm9yY29kZSA9IHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUobGlzdF9vZl9jb2RlcywgMiwgJmJ5dGVzLAorICAgICAgICAgICAmYnl0ZXNjb3VudCwgTlVMTCk7CisgICAgICAgICBlcnJvcmNvZGUgPSBmd3JpdGUoYnl0ZXMsIDEsIGJ5dGVzY291bnQsIGZkKTsKKworICAgICAgIE5vdGUgIHRoYXQgIHRoZSAgc2VyaWFsaXplZCBkYXRhIGlzIGJpbmFyeSBkYXRhIHRoYXQgbWF5IGNvbnRhaW4gYW55IG9mCisgICAgICAgdGhlIDI1NiBwb3NzaWJsZSBieXRlICB2YWx1ZXMuICBPbiAgc3lzdGVtcyAgdGhhdCAgbWFrZSAgYSAgZGlzdGluY3Rpb24KKyAgICAgICBiZXR3ZWVuIGJpbmFyeSBhbmQgbm9uLWJpbmFyeSBkYXRhLCBiZSBzdXJlIHRoYXQgdGhlIGZpbGUgaXMgb3BlbmVkIGZvcgorICAgICAgIGJpbmFyeSBvdXRwdXQuCisKKyAgICAgICBTZXJpYWxpemluZyBhIHNldCBvZiBwYXR0ZXJucyBsZWF2ZXMgdGhlIG9yaWdpbmFsICBkYXRhICB1bnRvdWNoZWQsICBzbworICAgICAgIHRoZXkgIGNhbiAgc3RpbGwgIGJlIHVzZWQgZm9yIG1hdGNoaW5nLiBUaGVpciBtZW1vcnkgbXVzdCBldmVudHVhbGx5IGJlCisgICAgICAgZnJlZWQgaW4gdGhlIHVzdWFsIHdheSBieSBjYWxsaW5nIHBjcmUyX2NvZGVfZnJlZSgpLiBXaGVuIHlvdSBoYXZlIGZpbi0KKyAgICAgICBpc2hlZCB3aXRoIHRoZSBieXRlIHN0cmVhbSwgaXQgdG9vIG11c3QgYmUgZnJlZWQgYnkgY2FsbGluZyBwY3JlMl9zZXJpLQorICAgICAgIGFsaXplX2ZyZWUoKS4KKworCitSRS1VU0lORyBQUkVDT01QSUxFRCBQQVRURVJOUworCisgICAgICAgSW4gb3JkZXIgdG8gcmUtdXNlIGEgc2V0IG9mIHNhdmVkIHBhdHRlcm5zICB5b3UgIG11c3QgIGZpcnN0ICBtYWtlICB0aGUKKyAgICAgICBzZXJpYWxpemVkICBieXRlIHN0cmVhbSBhdmFpbGFibGUgaW4gbWFpbiBtZW1vcnkgKGZvciBleGFtcGxlLCBieSByZWFkLQorICAgICAgIGluZyBmcm9tIGEgZmlsZSkuIFRoZSBtYW5hZ2VtZW50IG9mIHRoaXMgbWVtb3J5ICBibG9jayAgaXMgIHVwICB0byAgdGhlCisgICAgICAgYXBwbGljYXRpb24uICBZb3UgIGNhbiAgdXNlICB0aGUgIHBjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzKCkKKyAgICAgICBmdW5jdGlvbiB0byBmaW5kIG91dCBob3cgbWFueSBjb21waWxlZCBwYXR0ZXJucyBhcmUgaW4gIHRoZSAgc2VyaWFsaXplZAorICAgICAgIGRhdGEgd2l0aG91dCBhY3R1YWxseSBkZWNvZGluZyB0aGUgcGF0dGVybnM6CisKKyAgICAgICAgIHVpbnQ4X3QgKmJ5dGVzID0gPHNlcmlhbGl6ZWQgZGF0YT47CisgICAgICAgICBpbnQzMl90IG51bWJlcl9vZl9jb2RlcyA9IHBjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzKGJ5dGVzKTsKKworICAgICAgIFRoZSBwY3JlMl9zZXJpYWxpemVfZGVjb2RlKCkgZnVuY3Rpb24gcmVhZHMgYSBieXRlIHN0cmVhbSBhbmQgcmVjcmVhdGVzCisgICAgICAgdGhlIGNvbXBpbGVkIHBhdHRlcm5zIGluIG5ldyBtZW1vcnkgYmxvY2tzLCBzZXR0aW5nIHBvaW50ZXJzIHRvIHRoZW0gaW4KKyAgICAgICBhICB2ZWN0b3IuICBUaGUgIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIGEgcG9pbnRlciB0byBhIHN1aXRhYmxlIHZlY3RvcgorICAgICAgIGFuZCBpdHMgbGVuZ3RoLCBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50IHBvaW50cyB0byAgYSAgYnl0ZSAgc3RyZWFtLiAgVGhlCisgICAgICAgZmluYWwgIGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhIGdlbmVyYWwgY29udGV4dCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8KKyAgICAgICBzcGVjaWZ5IGN1c3RvbSBtZW1vcnkgbWFuZ2FnZW1lbnQgZnVuY3Rpb25zIGZvciB0aGUgIGRlY29kZWQgIHBhdHRlcm5zLgorICAgICAgIElmIHRoaXMgYXJndW1lbnQgaXMgTlVMTCwgbWFsbG9jKCkgYW5kIGZyZWUoKSBhcmUgdXNlZC4gQWZ0ZXIgZGVzZXJpYWwtCisgICAgICAgaXphdGlvbiwgdGhlIGJ5dGUgc3RyZWFtIGlzIG5vIGxvbmdlciBuZWVkZWQgYW5kIGNhbiBiZSBkaXNjYXJkZWQuCisKKyAgICAgICAgIGludDMyX3QgbnVtYmVyX29mX2NvZGVzOworICAgICAgICAgcGNyZTJfY29kZSAqbGlzdF9vZl9jb2Rlc1syXTsKKyAgICAgICAgIHVpbnQ4X3QgKmJ5dGVzID0gPHNlcmlhbGl6ZWQgZGF0YT47CisgICAgICAgICBpbnQzMl90IG51bWJlcl9vZl9jb2RlcyA9CisgICAgICAgICAgIHBjcmUyX3NlcmlhbGl6ZV9kZWNvZGUobGlzdF9vZl9jb2RlcywgMiwgYnl0ZXMsIE5VTEwpOworCisgICAgICAgSWYgdGhlIHZlY3RvciBpcyBub3QgbGFyZ2UgZW5vdWdoIGZvciBhbGwgIHRoZSAgcGF0dGVybnMgIGluICB0aGUgIGJ5dGUKKyAgICAgICBzdHJlYW0sICBpdCAgaXMgIGZpbGxlZCAgd2l0aCAgdGhvc2UgIHRoYXQgIGZpdCwgIGFuZCB0aGUgcmVtYWluZGVyIGFyZQorICAgICAgIGlnbm9yZWQuIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgdGhlIG51bWJlciBvZiAgZGVjb2RlZCAgcGF0dGVybnMsCisgICAgICAgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6CisKKyAgICAgICAgIFBDUkUyX0VSUk9SX0JBRERBVEEgICBzZWNvbmQgYXJndW1lbnQgaXMgemVybyBvciBsZXNzCisgICAgICAgICBQQ1JFMl9FUlJPUl9CQURNQUdJQyAgbWlzbWF0Y2ggb2YgaWQgYnl0ZXMgaW4gdGhlIGRhdGEKKyAgICAgICAgIFBDUkUyX0VSUk9SX0JBRE1PREUgICBtaXNtYXRjaCBvZiB2YXJpYWJsZSB1bml0IHNpemUgb3IgUENSRTIgdmVyc2lvbgorICAgICAgICAgUENSRTJfRVJST1JfTUVNT1JZICAgIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICAgICAgICAgUENSRTJfRVJST1JfTlVMTCAgICAgIGZpcnN0IG9yIHRoaXJkIGFyZ3VtZW50IGlzIE5VTEwKKworICAgICAgIFBDUkUyX0VSUk9SX0JBRE1BR0lDICBtYXkgbWVhbiB0aGF0IHRoZSBkYXRhIGlzIGNvcnJ1cHQsIG9yIHRoYXQgaXQgd2FzCisgICAgICAgY29tcGlsZWQgb24gYSBzeXN0ZW0gd2l0aCBkaWZmZXJlbnQgZW5kaWFubmVzcy4KKworICAgICAgIERlY29kZWQgcGF0dGVybnMgY2FuIGJlIHVzZWQgZm9yIG1hdGNoaW5nIGluIHRoZSB1c3VhbCB3YXksIGFuZCBtdXN0IGJlCisgICAgICAgZnJlZWQgIGJ5ICBjYWxsaW5nIHBjcmUyX2NvZGVfZnJlZSgpLiBIb3dldmVyLCBiZSBhd2FyZSB0aGF0IHRoZXJlIGlzIGEKKyAgICAgICBwb3RlbnRpYWwgcmFjZSBpc3N1ZSBpZiB5b3UgIGFyZSAgdXNpbmcgIG11bHRpcGxlICBwYXR0ZXJucyAgdGhhdCAgd2VyZQorICAgICAgIGRlY29kZWQgIGZyb20gIGEgIHNpbmdsZSAgYnl0ZSBzdHJlYW0gaW4gYSBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9uLiBBCisgICAgICAgc2luZ2xlIGNvcHkgb2YgdGhlIGNoYXJhY3RlciB0YWJsZXMgaXMgdXNlZCBieSBhbGwgdGhlIGRlY29kZWQgcGF0dGVybnMKKyAgICAgICBhbmQgYSByZWZlcmVuY2UgY291bnQgaXMgdXNlZCB0byBhcnJhbmdlIGZvciBpdHMgbWVtb3J5IHRvIGJlIGF1dG9tYXRpLQorICAgICAgIGNhbGx5IGZyZWVkIHdoZW4gdGhlIGxhc3QgcGF0dGVybiBpcyBmcmVlZCwgYnV0IHRoZXJlIGlzIG5vIGxvY2tpbmcgIG9uCisgICAgICAgdGhpcyAgcmVmZXJlbmNlIGNvdW50LiBUaGVyZWZvcmUsIGlmIHlvdSB3YW50IHRvIGNhbGwgcGNyZTJfY29kZV9mcmVlKCkKKyAgICAgICBmb3IgdGhlc2UgcGF0dGVybnMgaW4gZGlmZmVyZW50IHRocmVhZHMsICB5b3UgIG11c3QgIGFycmFuZ2UgIHlvdXIgIG93bgorICAgICAgIGxvY2tpbmcsICBhbmQgIGVuc3VyZSAgdGhhdCAgcGNyZTJfY29kZV9mcmVlKCkgIGNhbm5vdCBiZSBjYWxsZWQgYnkgdHdvCisgICAgICAgdGhyZWFkcyBhdCB0aGUgc2FtZSB0aW1lLgorCisgICAgICAgSWYgYSBwYXR0ZXJuIHdhcyBwcm9jZXNzZWQgYnkgcGNyZTJfaml0X2NvbXBpbGUoKSBiZWZvcmUgYmVpbmcgIHNlcmlhbC0KKyAgICAgICBpemVkLCAgdGhlICBKSVQgZGF0YSBpcyBkaXNjYXJkZWQgYW5kIHNvIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgYWZ0ZXIgYQorICAgICAgIHNhdmUvcmVzdG9yZSBjeWNsZS4gWW91IGNhbiwgaG93ZXZlciwgcHJvY2VzcyBhIHJlc3RvcmVkICBwYXR0ZXJuICB3aXRoCisgICAgICAgcGNyZTJfaml0X2NvbXBpbGUoKSBpZiB5b3Ugd2lzaC4KKworCitBVVRIT1IKKworICAgICAgIFBoaWxpcCBIYXplbAorICAgICAgIFVuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKyAgICAgICBDYW1icmlkZ2UsIEVuZ2xhbmQuCisKKworUkVWSVNJT04KKworICAgICAgIExhc3QgdXBkYXRlZDogMDMgTm92ZW1iZXIgMjAxNQorICAgICAgIENvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworUENSRTJTVEFDSygzKSAgICAgICAgICAgICAgTGlicmFyeSBGdW5jdGlvbnMgTWFudWFsICAgICAgICAgICAgICBQQ1JFMlNUQUNLKDMpCisKKworCitOQU1FCisgICAgICAgUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisKK1BDUkUyIERJU0NVU1NJT04gT0YgU1RBQ0sgVVNBR0UKKworICAgICAgIFdoZW4gIHlvdSAgY2FsbCAgcGNyZTJfbWF0Y2goKSwgIGl0ICBtYWtlcyAgdXNlIG9mIGFuIGludGVybmFsIGZ1bmN0aW9uCisgICAgICAgY2FsbGVkIG1hdGNoKCkuIFRoaXMgY2FsbHMgaXRzZWxmIHJlY3Vyc2l2ZWx5IGF0IGJyYW5jaCBwb2ludHMgIGluICB0aGUKKyAgICAgICBwYXR0ZXJuLCAgaW4gIG9yZGVyICB0byAgcmVtZW1iZXIgdGhlIHN0YXRlIG9mIHRoZSBtYXRjaCBzbyB0aGF0IGl0IGNhbgorICAgICAgIGJhY2sgdXAgYW5kIHRyeSBhIGRpZmZlcmVudCBhbHRlcm5hdGl2ZSBhZnRlciBhICBmYWlsdXJlLiAgQXMgIG1hdGNoaW5nCisgICAgICAgcHJvY2VlZHMgIGRlZXBlciAgYW5kIGRlZXBlciBpbnRvIHRoZSB0cmVlIG9mIHBvc3NpYmlsaXRpZXMsIHRoZSByZWN1ci0KKyAgICAgICBzaW9uIGRlcHRoIGluY3JlYXNlcy4gVGhlIG1hdGNoKCkgZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgaW4gb3RoZXIgY2lyLQorICAgICAgIGN1bXN0YW5jZXMsICBmb3IgIGV4YW1wbGUsICB3aGVuZXZlciAgYSAgcGFyZW50aGVzaXplZCAgc3ViLXBhdHRlcm4gIGlzCisgICAgICAgZW50ZXJlZCwgYW5kIGluIGNlcnRhaW4gY2FzZXMgb2YgcmVwZXRpdGlvbi4KKworICAgICAgIE5vdCBhbGwgY2FsbHMgb2YgbWF0Y2goKSBpbmNyZWFzZSB0aGUgcmVjdXJzaW9uIGRlcHRoOyBmb3IgYW4gaXRlbSBzdWNoCisgICAgICAgYXMgIGEqIGl0IG1heSBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcyBhdCB0aGUgc2FtZSBsZXZlbCwgYWZ0ZXIgbWF0Y2hpbmcKKyAgICAgICBkaWZmZXJlbnQgbnVtYmVycyBvZiBhJ3MuIEZ1cnRoZXJtb3JlLCBpbiBhIG51bWJlciBvZiBjYXNlcyAgd2hlcmUgIHRoZQorICAgICAgIHJlc3VsdCAgb2YgIHRoZSAgcmVjdXJzaXZlIGNhbGwgd291bGQgaW1tZWRpYXRlbHkgYmUgcGFzc2VkIGJhY2sgYXMgdGhlCisgICAgICAgcmVzdWx0IG9mIHRoZSBjdXJyZW50IGNhbGwgKGEgInRhaWwgcmVjdXJzaW9uIiksIHRoZSBmdW5jdGlvbiAgaXMgIGp1c3QKKyAgICAgICByZXN0YXJ0ZWQgaW5zdGVhZC4KKworICAgICAgIEVhY2ggIHRpbWUgdGhlIGludGVybmFsIG1hdGNoKCkgZnVuY3Rpb24gaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5LCBpdCB1c2VzCisgICAgICAgbWVtb3J5IGZyb20gdGhlIHByb2Nlc3Mgc3RhY2suIEZvciBjZXJ0YWluIGtpbmRzIG9mIHBhdHRlcm4gIGFuZCAgZGF0YSwKKyAgICAgICB2ZXJ5ICBsYXJnZSAgYW1vdW50cyBvZiBzdGFjayBtYXkgYmUgbmVlZGVkLCBkZXNwaXRlIHRoZSByZWNvZ25pdGlvbiBvZgorICAgICAgICJ0YWlsIHJlY3Vyc2lvbiIuIE5vdGUgdGhhdCBpZiAgUENSRTIgIGlzICBjb21waWxlZCAgd2l0aCAgdGhlICAtZnNhbmktCisgICAgICAgdGl6ZT1hZGRyZXNzICBvcHRpb24gIG9mICB0aGUgIEdDQyBjb21waWxlciwgdGhlIHN0YWNrIHJlcXVpcmVtZW50cyBhcmUKKyAgICAgICBncmVhdGx5IGluY3JlYXNlZC4KKworICAgICAgIFRoZSBhYm92ZSBjb21tZW50cyBhcHBseSB3aGVuIHBjcmUyX21hdGNoKCkgaXMgcnVuIGluIGl0cyBub3JtYWwgaW50ZXItCisgICAgICAgcHJldGl2ZSBtYW5uZXIuIElmIHRoZSBjb21waWxlZCBwYXR0ZXJuIHdhcyBwcm9jZXNzZWQgYnkgcGNyZTJfaml0X2NvbS0KKyAgICAgICBwaWxlKCksIGFuZCBqdXN0LWluLXRpbWUgY29tcGlsaW5nICB3YXMgIHN1Y2Nlc3NmdWwsICBhbmQgIHRoZSAgb3B0aW9ucworICAgICAgIHBhc3NlZCAgdG8gIHBjcmUyX21hdGNoKCkgIHdlcmUgIG5vdCBpbmNvbXBhdGlibGUsIHRoZSBtYXRjaGluZyBwcm9jZXNzCisgICAgICAgdXNlcyB0aGUgSklULWNvbXBpbGVkIGNvZGUgaW5zdGVhZCBvZiB0aGUgIG1hdGNoKCkgIGZ1bmN0aW9uLiAgSW4gIHRoaXMKKyAgICAgICBjYXNlLCB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBhcmUgaGFuZGxlZCBlbnRpcmVseSBkaWZmZXJlbnRseS4gU2VlIHRoZQorICAgICAgIHBjcmUyaml0IGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKKyAgICAgICBUaGUgIHBjcmUyX2RmYV9tYXRjaCgpICBmdW5jdGlvbiAgb3BlcmF0ZXMgIGluICBhICBkaWZmZXJlbnQgICB3YXkgICB0bworICAgICAgIHBjcmUyX21hdGNoKCksICBhbmQgdXNlcyByZWN1cnNpb24gb25seSB3aGVuIHRoZXJlIGlzIGEgcmVndWxhciBleHByZXMtCisgICAgICAgc2lvbiByZWN1cnNpb24gb3Igc3Vicm91dGluZSBjYWxsIGluIHRoZSAgcGF0dGVybi4gIFRoaXMgIGluY2x1ZGVzICB0aGUKKyAgICAgICBwcm9jZXNzaW5nICBvZiBhc3NlcnRpb24gYW5kICJvbmNlLW9ubHkiIHN1YnBhdHRlcm5zLCB3aGljaCBhcmUgaGFuZGxlZAorICAgICAgIGxpa2Ugc3Vicm91dGluZSBjYWxscy4gIE5vcm1hbGx5LCB0aGVzZSBhcmUgbmV2ZXIgdmVyeSAgZGVlcCwgIGFuZCAgdGhlCisgICAgICAgbGltaXQgIG9uICB0aGUgIGNvbXBsZXhpdHkgIG9mICBwY3JlMl9kZmFfbWF0Y2goKSAgaXMgY29udHJvbGxlZCBieSB0aGUKKyAgICAgICBhbW91bnQgb2Ygd29ya3NwYWNlIGl0IGlzIGdpdmVuLiAgSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdG8gd3JpdGUgcGF0LQorICAgICAgIHRlcm5zICB3aXRoICBydW5hd2F5ICBpbmZpbml0ZSAgcmVjdXJzaW9uczsgIHN1Y2ggIHBhdHRlcm5zICB3aWxsIGNhdXNlCisgICAgICAgcGNyZTJfZGZhX21hdGNoKCkgdG8gcnVuIG91dCBvZiBzdGFjay4gQXQgcHJlc2VudCwgdGhlcmUgaXMgbm8gIHByb3RlYy0KKyAgICAgICB0aW9uIGFnYWluc3QgdGhpcy4KKworICAgICAgIFRoZSAgY29tbWVudHMgIHRoYXQgIGZvbGxvdyBkbyBOT1QgYXBwbHkgdG8gcGNyZTJfZGZhX21hdGNoKCk7IHRoZXkgYXJlCisgICAgICAgcmVsZXZhbnQgb25seSBmb3IgcGNyZTJfbWF0Y2goKSB3aXRob3V0IHRoZSBKSVQgb3B0aW1pemF0aW9uLgorCisgICBSZWR1Y2luZyBwY3JlMl9tYXRjaCgpJ3Mgc3RhY2sgdXNhZ2UKKworICAgICAgIFlvdSBjYW4gb2Z0ZW4gcmVkdWNlIHRoZSBhbW91bnQgb2YgcmVjdXJzaW9uLCBhbmQgdGhlcmVmb3JlIHRoZSAgYW1vdW50CisgICAgICAgb2YgIHN0YWNrICB1c2VkLCAgYnkgIG1vZGlmeWluZyB0aGUgcGF0dGVybiB0aGF0IGlzIGJlaW5nIG1hdGNoZWQuIENvbi0KKyAgICAgICBzaWRlciwgZm9yIGV4YW1wbGUsIHRoaXMgcGF0dGVybjoKKworICAgICAgICAgKFtePF18PCg/IWluZXQpKSsKKworICAgICAgIEl0IG1hdGNoZXMgZnJvbSB3aGVyZXZlciBpdCBzdGFydHMgdW50aWwgaXQgZW5jb3VudGVycyAiPGluZXQiICBvciAgdGhlCisgICAgICAgZW5kICBvZiAgdGhlICBkYXRhLCAgYW5kIGlzIHRoZSBraW5kIG9mIHBhdHRlcm4gdGhhdCBtaWdodCBiZSB1c2VkIHdoZW4KKyAgICAgICBwcm9jZXNzaW5nIGFuIFhNTCBmaWxlLiBFYWNoIGl0ZXJhdGlvbiBvZiB0aGUgb3V0ZXIgcGFyZW50aGVzZXMgbWF0Y2hlcworICAgICAgIGVpdGhlciAgb25lICBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgIjwiIG9yIGEgIjwiIHRoYXQgaXMgbm90IGZvbGxvd2VkIGJ5CisgICAgICAgImluZXQiLiBIb3dldmVyLCBlYWNoIHRpbWUgYSAgcGFyZW50aGVzaXMgIGlzICBwcm9jZXNzZWQsICBhICByZWN1cnNpb24KKyAgICAgICBvY2N1cnMsIHNvIHRoaXMgZm9ybXVsYXRpb24gdXNlcyBhIHN0YWNrIGZyYW1lIGZvciBlYWNoIG1hdGNoZWQgY2hhcmFjLQorICAgICAgIHRlci4gRm9yIGEgbG9uZyBzdHJpbmcsIGEgbG90IG9mIHN0YWNrIGlzIHJlcXVpcmVkLiBDb25zaWRlciAgbm93ICB0aGlzCisgICAgICAgcmV3cml0dGVuIHBhdHRlcm4sIHdoaWNoIG1hdGNoZXMgZXhhY3RseSB0aGUgc2FtZSBzdHJpbmdzOgorCisgICAgICAgICAoW148XSsrfDwoPyFpbmV0KSkrCisKKyAgICAgICBUaGlzICB1c2VzIHZlcnkgbXVjaCBsZXNzIHN0YWNrLCBiZWNhdXNlIHJ1bnMgb2YgY2hhcmFjdGVycyB0aGF0IGRvIG5vdAorICAgICAgIGNvbnRhaW4gIjwiIGFyZSAic3dhbGxvd2VkIiBpbiBvbmUgaXRlbSBpbnNpZGUgdGhlIHBhcmVudGhlc2VzLiAgUmVjdXItCisgICAgICAgc2lvbiAgaGFwcGVucyAgb25seSB3aGVuIGEgIjwiIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBmb2xsb3dlZCBieSAiaW5ldCIKKyAgICAgICBpcyBlbmNvdW50ZXJlZCAoYW5kIHdlIGFzc3VtZSB0aGlzIGlzIHJlbGF0aXZlbHkgIHJhcmUpLiAgQSAgcG9zc2Vzc2l2ZQorICAgICAgIHF1YW50aWZpZXIgIGlzICB1c2VkICB0byBzdG9wIGFueSBiYWNrdHJhY2tpbmcgaW50byB0aGUgcnVucyBvZiBub24tIjwiCisgICAgICAgY2hhcmFjdGVycywgYnV0IHRoYXQgaXMgbm90IHJlbGF0ZWQgdG8gc3RhY2sgdXNhZ2UuCisKKyAgICAgICBUaGlzIGV4YW1wbGUgc2hvd3MgdGhhdCBvbmUgd2F5IG9mIGF2b2lkaW5nIHN0YWNrIHByb2JsZW1zIHdoZW4gIG1hdGNoLQorICAgICAgIGluZyBsb25nIHN1YmplY3Qgc3RyaW5ncyBpcyB0byB3cml0ZSByZXBlYXRlZCBwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm5zCisgICAgICAgdG8gbWF0Y2ggbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIgd2hlbmV2ZXIgcG9zc2libGUuCisKKyAgIENvbXBpbGluZyBQQ1JFMiB0byB1c2UgaGVhcCBpbnN0ZWFkIG9mIHN0YWNrIGZvciBwY3JlMl9tYXRjaCgpCisKKyAgICAgICBJbiBlbnZpcm9ubWVudHMgd2hlcmUgc3RhY2sgbWVtb3J5IGlzIGNvbnN0cmFpbmVkLCB5b3UgIG1pZ2h0ICB3YW50ICB0bworICAgICAgIGNvbXBpbGUgUENSRTIgdG8gdXNlIGhlYXAgbWVtb3J5IGluc3RlYWQgb2Ygc3RhY2sgZm9yIHJlbWVtYmVyaW5nIGJhY2stCisgICAgICAgdXAgcG9pbnRzIHdoZW4gcGNyZTJfbWF0Y2goKSBpcyBydW5uaW5nLiBUaGlzIG1ha2VzIGl0IHJ1biBtb3JlIHNsb3dseSwKKyAgICAgICBob3dldmVyLiBEZXRhaWxzIG9mIGhvdyB0byBkbyB0aGlzIGFyZSBnaXZlbiBpbiB0aGUgcGNyZTJidWlsZCBkb2N1bWVuLQorICAgICAgIHRhdGlvbi4gV2hlbiBidWlsdCBpbiB0aGlzIHdheSwgaW5zdGVhZCBvZiB1c2luZyB0aGUgc3RhY2ssIFBDUkUyICBnZXRzCisgICAgICAgbWVtb3J5ICBmb3IgIHJlbWVtYmVyaW5nICBiYWNrdXAgIHBvaW50cyBmcm9tIHRoZSBoZWFwLiBCeSBkZWZhdWx0LCB0aGUKKyAgICAgICBtZW1vcnkgaXMgb2J0YWluZWQgYnkgY2FsbGluZyB0aGUgc3lzdGVtIG1hbGxvYygpIGZ1bmN0aW9uLCBidXQgeW91IGNhbgorICAgICAgIGFycmFuZ2UgdG8gc3VwcGx5IHlvdXIgb3duIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uLiBGb3IgZGV0YWlscywgc2VlCisgICAgICAgdGhlIHNlY3Rpb24gZW50aXRsZWQgIlRoZSBtYXRjaCBjb250ZXh0IiBpbiB0aGUgcGNyZTJhcGkgZG9jdW1lbnRhdGlvbi4KKyAgICAgICBTaW5jZSB0aGUgYmxvY2sgc2l6ZXMgYXJlIGFsd2F5cyB0aGUgc2FtZSwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvIGltcGxlLQorICAgICAgIG1lbnQgY3VzdG9taXplZCBhIG1lbW9yeSBoYW5kbGVyIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgIHN0YW4tCisgICAgICAgZGFyZCBmdW5jdGlvbi4gVGhlIG1lbW9yeSBibG9ja3Mgb2J0YWluZWQgZm9yIHRoaXMgcHVycG9zZSBhcmUgcmV0YWluZWQKKyAgICAgICBhbmQgcmUtdXNlZCBpZiBwb3NzaWJsZSB3aGlsZSBwY3JlMl9tYXRjaCgpIGlzIHJ1bm5pbmcuICBUaGV5ICBhcmUgIGFsbAorICAgICAgIGZyZWVkIGp1c3QgYmVmb3JlIGl0IGV4aXRzLgorCisgICBMaW1pdGluZyBwY3JlMl9tYXRjaCgpJ3Mgc3RhY2sgdXNhZ2UKKworICAgICAgIFlvdSBjYW4gc2V0IGxpbWl0cyBvbiB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBpbnRlcm5hbCBtYXRjaCgpIGZ1bmN0aW9uCisgICAgICAgaXMgY2FsbGVkLCBib3RoIGluIHRvdGFsIGFuZCAgcmVjdXJzaXZlbHkuICBJZiAgYSAgbGltaXQgIGlzICBleGNlZWRlZCwKKyAgICAgICBwY3JlMl9tYXRjaCgpICByZXR1cm5zICBhbiAgZXJyb3IgIGNvZGUuIFNldHRpbmcgc3VpdGFibGUgbGltaXRzIHNob3VsZAorICAgICAgIHByZXZlbnQgaXQgZnJvbSBydW5uaW5nIG91dCBvZiBzdGFjay4gVGhlIGRlZmF1bHQgdmFsdWVzIG9mIHRoZSAgbGltaXRzCisgICAgICAgYXJlICB2ZXJ5IGxhcmdlLCBhbmQgdW5saWtlbHkgZXZlciB0byBvcGVyYXRlLiBUaGV5IGNhbiBiZSBjaGFuZ2VkIHdoZW4KKyAgICAgICBQQ1JFMiBpcyBidWlsdCwgYW5kIHRoZXkgY2FuIGFsc28gYmUgc2V0IHdoZW4gcGNyZTJfbWF0Y2goKSBpcyAgY2FsbGVkLgorICAgICAgIEZvciAgZGV0YWlscyAgb2YgdGhlc2UgaW50ZXJmYWNlcywgc2VlIHRoZSBwY3JlMmJ1aWxkIGRvY3VtZW50YXRpb24gYW5kCisgICAgICAgdGhlIHNlY3Rpb24gZW50aXRsZWQgIlRoZSBtYXRjaCBjb250ZXh0IiBpbiB0aGUgcGNyZTJhcGkgZG9jdW1lbnRhdGlvbi4KKworICAgICAgIEFzIGEgdmVyeSByb3VnaCBydWxlIG9mIHRodW1iLCB5b3Ugc2hvdWxkIHJlY2tvbiBvbiBhYm91dCA1MDAgYnl0ZXMgcGVyCisgICAgICAgcmVjdXJzaW9uLiAgVGh1cywgIGlmICB5b3UgIHdhbnQgIHRvIGxpbWl0IHlvdXIgc3RhY2sgdXNhZ2UgdG8gOE1iLCB5b3UKKyAgICAgICBzaG91bGQgc2V0IHRoZSBsaW1pdCBhdCAxNjAwMCByZWN1cnNpb25zLiBBIDY0TWIgc3RhY2ssICBvbiAgdGhlICBvdGhlcgorICAgICAgIGhhbmQsIGNhbiBzdXBwb3J0IGFyb3VuZCAxMjgwMDAgcmVjdXJzaW9ucy4KKworICAgICAgIFRoZSAgcGNyZTJ0ZXN0ICB0ZXN0IHByb2dyYW0gaGFzIGEgbW9kaWZpZXIgY2FsbGVkICJmaW5kX2xpbWl0cyIgd2hpY2gsCisgICAgICAgaWYgYXBwbGllZCB0byBhIHN1YmplY3QgbGluZSwgY2F1c2VzIGl0IHRvICBmaW5kICB0aGUgIHNtYWxsZXN0ICBsaW1pdHMKKyAgICAgICB0aGF0ICBhbGxvdyBhIGEgcGF0dGVybiB0byBtYXRjaC4gVGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcgcGNyZTJfbWF0Y2goKQorICAgICAgIHJlcGVhdGVkbHkgd2l0aCBkaWZmZXJlbnQgbGltaXRzLgorCisgICBDaGFuZ2luZyBzdGFjayBzaXplIGluIFVuaXgtbGlrZSBzeXN0ZW1zCisKKyAgICAgICBJbiBVbml4LWxpa2UgZW52aXJvbm1lbnRzLCB0aGVyZSBpcyBub3Qgb2Z0ZW4gYSBwcm9ibGVtIHdpdGggdGhlICBzdGFjaworICAgICAgIHVubGVzcyAgdmVyeSAgbG9uZyAgc3RyaW5ncyAgYXJlICBpbnZvbHZlZCwgdGhvdWdoIHRoZSBkZWZhdWx0IGxpbWl0IG9uCisgICAgICAgc3RhY2sgc2l6ZSB2YXJpZXMgZnJvbSBzeXN0ZW0gdG8gc3lzdGVtLiBWYWx1ZXMgZnJvbSA4TWIgIHRvICA2NE1iICBhcmUKKyAgICAgICBjb21tb24uIFlvdSBjYW4gZmluZCB5b3VyIGRlZmF1bHQgbGltaXQgYnkgcnVubmluZyB0aGUgY29tbWFuZDoKKworICAgICAgICAgdWxpbWl0IC1zCisKKyAgICAgICBVbmZvcnR1bmF0ZWx5LCAgdGhlICBlZmZlY3QgIG9mICBydW5uaW5nIG91dCBvZiBzdGFjayBpcyBvZnRlbiBTSUdTRUdWLAorICAgICAgIHRob3VnaCBzb21ldGltZXMgYSBtb3JlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4uIFlvdSAgY2FuICBub3ItCisgICAgICAgbWFsbHkgaW5jcmVhc2UgdGhlIGxpbWl0IG9uIHN0YWNrIHNpemUgYnkgY29kZSBzdWNoIGFzIHRoaXM6CisKKyAgICAgICAgIHN0cnVjdCBybGltaXQgcmxpbTsKKyAgICAgICAgIGdldHJsaW1pdChSTElNSVRfU1RBQ0ssICZybGltKTsKKyAgICAgICAgIHJsaW0ucmxpbV9jdXIgPSAxMDAqMTAyNCoxMDI0OworICAgICAgICAgc2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJnJsaW0pOworCisgICAgICAgVGhpcyAgcmVhZHMgIHRoZSBjdXJyZW50IGxpbWl0cyAoc29mdCBhbmQgaGFyZCkgdXNpbmcgZ2V0cmxpbWl0KCksIHRoZW4KKyAgICAgICBhdHRlbXB0cyB0byBpbmNyZWFzZSB0aGUgc29mdCBsaW1pdCB0byAgMTAwTWIgIHVzaW5nICBzZXRybGltaXQoKS4gIFlvdQorICAgICAgIG11c3QgZG8gdGhpcyBiZWZvcmUgY2FsbGluZyBwY3JlMl9tYXRjaCgpLgorCisgICBDaGFuZ2luZyBzdGFjayBzaXplIGluIE1hYyBPUyBYCisKKyAgICAgICBVc2luZyBzZXRybGltaXQoKSwgYXMgZGVzY3JpYmVkIGFib3ZlLCBzaG91bGQgYWxzbyB3b3JrIG9uIE1hYyBPUyBYLiBJdAorICAgICAgIGlzIGFsc28gcG9zc2libGUgdG8gc2V0IGEgc3RhY2sgc2l6ZSB3aGVuIGxpbmtpbmcgYSBwcm9ncmFtLiBUaGVyZSBpcyBhCisgICAgICAgZGlzY3Vzc2lvbiAgIGFib3V0ICAgc3RhY2sgIHNpemVzICBpbiAgTWFjICBPUyAgWCAgYXQgIHRoaXMgIHdlYiAgc2l0ZToKKyAgICAgICBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9xYS9xYTIwMDUvcWExNDE5Lmh0bWwuCisKKworQVVUSE9SCisKKyAgICAgICBQaGlsaXAgSGF6ZWwKKyAgICAgICBVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCisgICAgICAgQ2FtYnJpZGdlLCBFbmdsYW5kLgorCisKK1JFVklTSU9OCisKKyAgICAgICBMYXN0IHVwZGF0ZWQ6IDIxIE5vdmVtYmVyIDIwMTQKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1BDUkUyU1lOVEFYKDMpICAgICAgICAgICAgIExpYnJhcnkgRnVuY3Rpb25zIE1hbnVhbCAgICAgICAgICAgICBQQ1JFMlNZTlRBWCgzKQorCisKKworTkFNRQorICAgICAgIFBDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorCitQQ1JFMiBSRUdVTEFSIEVYUFJFU1NJT04gU1lOVEFYIFNVTU1BUlkKKworICAgICAgIFRoZSAgZnVsbCBzeW50YXggYW5kIHNlbWFudGljcyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGFyZSBzdXAtCisgICAgICAgcG9ydGVkIGJ5IFBDUkUyIGFyZSBkZXNjcmliZWQgaW4gdGhlIHBjcmUycGF0dGVybiAgZG9jdW1lbnRhdGlvbi4gIFRoaXMKKyAgICAgICBkb2N1bWVudCBjb250YWlucyBhIHF1aWNrLXJlZmVyZW5jZSBzdW1tYXJ5IG9mIHRoZSBzeW50YXguCisKKworUVVPVElORworCisgICAgICAgICBceCAgICAgICAgIHdoZXJlIHggaXMgbm9uLWFscGhhbnVtZXJpYyBpcyBhIGxpdGVyYWwgeAorICAgICAgICAgXFEuLi5cRSAgICB0cmVhdCBlbmNsb3NlZCBjaGFyYWN0ZXJzIGFzIGxpdGVyYWwKKworCitFU0NBUEVEIENIQVJBQ1RFUlMKKworICAgICAgIFRoaXMgdGFibGUgYXBwbGllcyB0byBBU0NJSSBhbmQgVW5pY29kZSBlbnZpcm9ubWVudHMuCisKKyAgICAgICAgIFxhICAgICAgICAgYWxhcm0sIHRoYXQgaXMsIHRoZSBCRUwgY2hhcmFjdGVyIChoZXggMDcpCisgICAgICAgICBcY3ggICAgICAgICJjb250cm9sLXgiLCB3aGVyZSB4IGlzIGFueSBBU0NJSSBwcmludGluZyBjaGFyYWN0ZXIKKyAgICAgICAgIFxlICAgICAgICAgZXNjYXBlIChoZXggMUIpCisgICAgICAgICBcZiAgICAgICAgIGZvcm0gZmVlZCAoaGV4IDBDKQorICAgICAgICAgXG4gICAgICAgICBuZXdsaW5lIChoZXggMEEpCisgICAgICAgICBcciAgICAgICAgIGNhcnJpYWdlIHJldHVybiAoaGV4IDBEKQorICAgICAgICAgXHQgICAgICAgICB0YWIgKGhleCAwOSkKKyAgICAgICAgIFwwZGQgICAgICAgY2hhcmFjdGVyIHdpdGggb2N0YWwgY29kZSAwZGQKKyAgICAgICAgIFxkZGQgICAgICAgY2hhcmFjdGVyIHdpdGggb2N0YWwgY29kZSBkZGQsIG9yIGJhY2tyZWZlcmVuY2UKKyAgICAgICAgIFxve2RkZC4ufSAgY2hhcmFjdGVyIHdpdGggb2N0YWwgY29kZSBkZGQuLgorICAgICAgICAgXFUgICAgICAgICAiVSIgaWYgUENSRTJfQUxUX0JTVVggaXMgc2V0IChvdGhlcndpc2UgaXMgYW4gZXJyb3IpCisgICAgICAgICBcdWhoaGggICAgIGNoYXJhY3RlciB3aXRoIGhleCBjb2RlIGhoaGggKGlmIFBDUkUyX0FMVF9CU1VYIGlzIHNldCkKKyAgICAgICAgIFx4aGggICAgICAgY2hhcmFjdGVyIHdpdGggaGV4IGNvZGUgaGgKKyAgICAgICAgIFx4e2hoaC4ufSAgY2hhcmFjdGVyIHdpdGggaGV4IGNvZGUgaGhoLi4KKworICAgICAgIE5vdGUgdGhhdCBcMGRkIGlzIGFsd2F5cyBhbiBvY3RhbCBjb2RlLiBUaGUgdHJlYXRtZW50IG9mIGJhY2tzbGFzaCBmb2wtCisgICAgICAgbG93ZWQgYnkgYSBub24temVybyBkaWdpdCBpcyBjb21wbGljYXRlZDsgZm9yIGRldGFpbHMgc2VlICB0aGUgIHNlY3Rpb24KKyAgICAgICAiTm9uLXByaW50aW5nICBjaGFyYWN0ZXJzIiAgaW4gIHRoZSAgcGNyZTJwYXR0ZXJuICBkb2N1bWVudGF0aW9uLCB3aGVyZQorICAgICAgIGRldGFpbHMgb2YgZXNjYXBlIHByb2Nlc3NpbmcgaW4gRUJDRElDIGVudmlyb25tZW50cyBhcmUgYWxzbyBnaXZlbi4KKworICAgICAgIFdoZW4gXHggaXMgbm90IGZvbGxvd2VkIGJ5IHssIGZyb20gemVybyB0byB0d28gaGV4YWRlY2ltYWwgIGRpZ2l0cyAgYXJlCisgICAgICAgcmVhZCwgYnV0IGlmIFBDUkUyX0FMVF9CU1VYIGlzIHNldCwgXHggbXVzdCBiZSBmb2xsb3dlZCBieSB0d28gaGV4YWRlYy0KKyAgICAgICBpbWFsIGRpZ2l0cyB0byBiZSByZWNvZ25pemVkIGFzICBhICBoZXhhZGVjaW1hbCAgZXNjYXBlOyAgb3RoZXJ3aXNlICBpdAorICAgICAgIG1hdGNoZXMgIGEgbGl0ZXJhbCAieCIuICBMaWtld2lzZSwgaWYgXHUgKGluIEFMVF9CU1VYIG1vZGUpIGlzIG5vdCBmb2wtCisgICAgICAgbG93ZWQgYnkgZm91ciBoZXhhZGVjaW1hbCBkaWdpdHMsIGl0IG1hdGNoZXMgYSBsaXRlcmFsICJ1Ii4KKworCitDSEFSQUNURVIgVFlQRVMKKworICAgICAgICAgLiAgICAgICAgICBhbnkgY2hhcmFjdGVyIGV4Y2VwdCBuZXdsaW5lOworICAgICAgICAgICAgICAgICAgICAgIGluIGRvdGFsbCBtb2RlLCBhbnkgY2hhcmFjdGVyIHdoYXRzb2V2ZXIKKyAgICAgICAgIFxDICAgICAgICAgb25lIGNvZGUgdW5pdCwgZXZlbiBpbiBVVEYgbW9kZSAoYmVzdCBhdm9pZGVkKQorICAgICAgICAgXGQgICAgICAgICBhIGRlY2ltYWwgZGlnaXQKKyAgICAgICAgIFxEICAgICAgICAgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSBkZWNpbWFsIGRpZ2l0CisgICAgICAgICBcaCAgICAgICAgIGEgaG9yaXpvbnRhbCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIKKyAgICAgICAgIFxIICAgICAgICAgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSBob3Jpem9udGFsIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICAgICAgICAgXE4gICAgICAgICBhIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIG5ld2xpbmUKKyAgICAgICAgIFxwe3h4fSAgICAgYSBjaGFyYWN0ZXIgd2l0aCB0aGUgeHggcHJvcGVydHkKKyAgICAgICAgIFxQe3h4fSAgICAgYSBjaGFyYWN0ZXIgd2l0aG91dCB0aGUgeHggcHJvcGVydHkKKyAgICAgICAgIFxSICAgICAgICAgYSBuZXdsaW5lIHNlcXVlbmNlCisgICAgICAgICBccyAgICAgICAgIGEgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICBcUyAgICAgICAgIGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGEgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICBcdiAgICAgICAgIGEgdmVydGljYWwgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICBcViAgICAgICAgIGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGEgdmVydGljYWwgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICBcdyAgICAgICAgIGEgIndvcmQiIGNoYXJhY3RlcgorICAgICAgICAgXFcgICAgICAgICBhICJub24td29yZCIgY2hhcmFjdGVyCisgICAgICAgICBcWCAgICAgICAgIGEgVW5pY29kZSBleHRlbmRlZCBncmFwaGVtZSBjbHVzdGVyCisKKyAgICAgICBcQyBpcyBkYW5nZXJvdXMgYmVjYXVzZSBpdCBtYXkgbGVhdmUgdGhlIGN1cnJlbnQgbWF0Y2hpbmcgcG9pbnQgaW4gIHRoZQorICAgICAgIG1pZGRsZSBvZiBhIFVURi04IG9yIFVURi0xNiBjaGFyYWN0ZXIuIFRoZSBhcHBsaWNhdGlvbiBjYW4gbG9jayBvdXQgdGhlCisgICAgICAgdXNlIG9mIFxDIGJ5IHNldHRpbmcgdGhlIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DICBvcHRpb24uICBJdCAgaXMgIGFsc28KKyAgICAgICBwb3NzaWJsZSB0byBidWlsZCBQQ1JFMiB3aXRoIHRoZSB1c2Ugb2YgXEMgcGVybWFuZW50bHkgZGlzYWJsZWQuCisKKyAgICAgICBCeSAgZGVmYXVsdCwgIFxkLCBccywgYW5kIFx3IG1hdGNoIG9ubHkgQVNDSUkgY2hhcmFjdGVycywgZXZlbiBpbiBVVEYtOAorICAgICAgIG1vZGUgb3IgaW4gdGhlIDE2LWJpdCBhbmQgMzItYml0IGxpYnJhcmllcy4gSG93ZXZlciwgaWYgbG9jYWxlLXNwZWNpZmljCisgICAgICAgbWF0Y2hpbmcgIGlzICBoYXBwZW5pbmcsICBccyBhbmQgXHcgbWF5IGFsc28gbWF0Y2ggY2hhcmFjdGVycyB3aXRoIGNvZGUKKyAgICAgICBwb2ludHMgaW4gdGhlIHJhbmdlIDEyOC0yNTUuIElmIHRoZSBQQ1JFMl9VQ1Agb3B0aW9uIGlzIHNldCwgdGhlIGJlaGF2LQorICAgICAgIGlvdXIgb2YgdGhlc2UgZXNjYXBlIHNlcXVlbmNlcyBpcyBjaGFuZ2VkIHRvIHVzZSBVbmljb2RlIHByb3BlcnRpZXMgYW5kCisgICAgICAgdGhleSBtYXRjaCBtYW55IG1vcmUgY2hhcmFjdGVycy4KKworCitHRU5FUkFMIENBVEVHT1JZIFBST1BFUlRJRVMgRk9SIFxwIGFuZCBcUAorCisgICAgICAgICBDICAgICAgICAgIE90aGVyCisgICAgICAgICBDYyAgICAgICAgIENvbnRyb2wKKyAgICAgICAgIENmICAgICAgICAgRm9ybWF0CisgICAgICAgICBDbiAgICAgICAgIFVuYXNzaWduZWQKKyAgICAgICAgIENvICAgICAgICAgUHJpdmF0ZSB1c2UKKyAgICAgICAgIENzICAgICAgICAgU3Vycm9nYXRlCisKKyAgICAgICAgIEwgICAgICAgICAgTGV0dGVyCisgICAgICAgICBMbCAgICAgICAgIExvd2VyIGNhc2UgbGV0dGVyCisgICAgICAgICBMbSAgICAgICAgIE1vZGlmaWVyIGxldHRlcgorICAgICAgICAgTG8gICAgICAgICBPdGhlciBsZXR0ZXIKKyAgICAgICAgIEx0ICAgICAgICAgVGl0bGUgY2FzZSBsZXR0ZXIKKyAgICAgICAgIEx1ICAgICAgICAgVXBwZXIgY2FzZSBsZXR0ZXIKKyAgICAgICAgIEwmICAgICAgICAgTGwsIEx1LCBvciBMdAorCisgICAgICAgICBNICAgICAgICAgIE1hcmsKKyAgICAgICAgIE1jICAgICAgICAgU3BhY2luZyBtYXJrCisgICAgICAgICBNZSAgICAgICAgIEVuY2xvc2luZyBtYXJrCisgICAgICAgICBNbiAgICAgICAgIE5vbi1zcGFjaW5nIG1hcmsKKworICAgICAgICAgTiAgICAgICAgICBOdW1iZXIKKyAgICAgICAgIE5kICAgICAgICAgRGVjaW1hbCBudW1iZXIKKyAgICAgICAgIE5sICAgICAgICAgTGV0dGVyIG51bWJlcgorICAgICAgICAgTm8gICAgICAgICBPdGhlciBudW1iZXIKKworICAgICAgICAgUCAgICAgICAgICBQdW5jdHVhdGlvbgorICAgICAgICAgUGMgICAgICAgICBDb25uZWN0b3IgcHVuY3R1YXRpb24KKyAgICAgICAgIFBkICAgICAgICAgRGFzaCBwdW5jdHVhdGlvbgorICAgICAgICAgUGUgICAgICAgICBDbG9zZSBwdW5jdHVhdGlvbgorICAgICAgICAgUGYgICAgICAgICBGaW5hbCBwdW5jdHVhdGlvbgorICAgICAgICAgUGkgICAgICAgICBJbml0aWFsIHB1bmN0dWF0aW9uCisgICAgICAgICBQbyAgICAgICAgIE90aGVyIHB1bmN0dWF0aW9uCisgICAgICAgICBQcyAgICAgICAgIE9wZW4gcHVuY3R1YXRpb24KKworICAgICAgICAgUyAgICAgICAgICBTeW1ib2wKKyAgICAgICAgIFNjICAgICAgICAgQ3VycmVuY3kgc3ltYm9sCisgICAgICAgICBTayAgICAgICAgIE1vZGlmaWVyIHN5bWJvbAorICAgICAgICAgU20gICAgICAgICBNYXRoZW1hdGljYWwgc3ltYm9sCisgICAgICAgICBTbyAgICAgICAgIE90aGVyIHN5bWJvbAorCisgICAgICAgICBaICAgICAgICAgIFNlcGFyYXRvcgorICAgICAgICAgWmwgICAgICAgICBMaW5lIHNlcGFyYXRvcgorICAgICAgICAgWnAgICAgICAgICBQYXJhZ3JhcGggc2VwYXJhdG9yCisgICAgICAgICBacyAgICAgICAgIFNwYWNlIHNlcGFyYXRvcgorCisKK1BDUkUyIFNQRUNJQUwgQ0FURUdPUlkgUFJPUEVSVElFUyBGT1IgXHAgYW5kIFxQCisKKyAgICAgICAgIFhhbiAgICAgICAgQWxwaGFudW1lcmljOiB1bmlvbiBvZiBwcm9wZXJ0aWVzIEwgYW5kIE4KKyAgICAgICAgIFhwcyAgICAgICAgUE9TSVggc3BhY2U6IHByb3BlcnR5IFogb3IgdGFiLCBOTCwgVlQsIEZGLCBDUgorICAgICAgICAgWHNwICAgICAgICBQZXJsIHNwYWNlOiBwcm9wZXJ0eSBaIG9yIHRhYiwgTkwsIFZULCBGRiwgQ1IKKyAgICAgICAgIFh1YyAgICAgICAgVW5pdmVyYWxseS1uYW1lZCBjaGFyYWN0ZXI6IG9uZSB0aGF0IGNhbiBiZQorICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudGVkIGJ5IGEgVW5pdmVyc2FsIENoYXJhY3RlciBOYW1lCisgICAgICAgICBYd2QgICAgICAgIFBlcmwgd29yZDogcHJvcGVydHkgWGFuIG9yIHVuZGVyc2NvcmUKKworICAgICAgIFBlcmwgYW5kIFBPU0lYIHNwYWNlIGFyZSBub3cgdGhlIHNhbWUuIFBlcmwgYWRkZWQgVlQgdG8gaXRzIHNwYWNlIGNoYXItCisgICAgICAgYWN0ZXIgc2V0IGF0IHJlbGVhc2UgNS4xOC4KKworCitTQ1JJUFQgTkFNRVMgRk9SIFxwIEFORCBcUAorCisgICAgICAgQWhvbSwgICBBbmF0b2xpYW5fSGllcm9nbHlwaHMsICBBcmFiaWMsICBBcm1lbmlhbiwgIEF2ZXN0YW4sICBCYWxpbmVzZSwKKyAgICAgICBCYW11bSwgQmFzc2FfVmFoLCBCYXRhaywgQmVuZ2FsaSwgQm9wb21vZm8sIEJyYWhtaSwgQnJhaWxsZSwgIEJ1Z2luZXNlLAorICAgICAgIEJ1aGlkLCAgQ2FuYWRpYW5fQWJvcmlnaW5hbCwgIENhcmlhbiwgQ2F1Y2FzaWFuX0FsYmFuaWFuLCBDaGFrbWEsIENoYW0sCisgICAgICAgQ2hlcm9rZWUsICBDb21tb24sICBDb3B0aWMsICBDdW5laWZvcm0sICBDeXByaW90LCAgQ3lyaWxsaWMsICAgRGVzZXJldCwKKyAgICAgICBEZXZhbmFnYXJpLCAgRHVwbG95YW4sICBFZ3lwdGlhbl9IaWVyb2dseXBocywgIEVsYmFzYW4sIEV0aGlvcGljLCBHZW9yLQorICAgICAgIGdpYW4sIEdsYWdvbGl0aWMsIEdvdGhpYywgIEdyYW50aGEsICBHcmVlaywgIEd1amFyYXRpLCAgR3VybXVraGksICBIYW4sCisgICAgICAgSGFuZ3VsLCBIYW51bm9vLCBIYXRyYW4sIEhlYnJldywgSGlyYWdhbmEsIEltcGVyaWFsX0FyYW1haWMsIEluaGVyaXRlZCwKKyAgICAgICBJbnNjcmlwdGlvbmFsX1BhaGxhdmksIEluc2NyaXB0aW9uYWxfUGFydGhpYW4sIEphdmFuZXNlLCAgS2FpdGhpLCAgS2FuLQorICAgICAgIG5hZGEsICBLYXRha2FuYSwgIEtheWFoX0xpLCAgS2hhcm9zaHRoaSwgS2htZXIsIEtob2praSwgS2h1ZGF3YWRpLCBMYW8sCisgICAgICAgTGF0aW4sIExlcGNoYSwgTGltYnUsIExpbmVhcl9BLCBMaW5lYXJfQiwgTGlzdSwgTHljaWFuLCAgTHlkaWFuLCAgTWFoYS0KKyAgICAgICBqYW5pLCAgTWFsYXlhbGFtLCAgTWFuZGFpYywgIE1hbmljaGFlYW4sICBNZWV0ZWlfTWF5ZWssICBNZW5kZV9LaWtha3VpLAorICAgICAgIE1lcm9pdGljX0N1cnNpdmUsIE1lcm9pdGljX0hpZXJvZ2x5cGhzLCAgTWlhbywgIE1vZGksICBNb25nb2xpYW4sICBNcm8sCisgICAgICAgTXVsdGFuaSwgICBNeWFubWFyLCAgIE5hYmF0YWVhbiwgIE5ld19UYWlfTHVlLCAgTmtvLCAgT2doYW0sICBPbF9DaGlraSwKKyAgICAgICBPbGRfSHVuZ2FyaWFuLCBPbGRfSXRhbGljLCBPbGRfTm9ydGhfQXJhYmlhbiwgT2xkX1Blcm1pYywgIE9sZF9QZXJzaWFuLAorICAgICAgIE9sZF9Tb3V0aF9BcmFiaWFuLCBPbGRfVHVya2ljLCBPcml5YSwgT3NtYW55YSwgUGFoYXdoX0htb25nLCBQYWxteXJlbmUsCisgICAgICAgUGF1X0Npbl9IYXUsICBQaGFnc19QYSwgIFBob2VuaWNpYW4sICBQc2FsdGVyX1BhaGxhdmksICBSZWphbmcsICBSdW5pYywKKyAgICAgICBTYW1hcml0YW4sIFNhdXJhc2h0cmEsIFNoYXJhZGEsIFNoYXZpYW4sIFNpZGRoYW0sIFNpZ25Xcml0aW5nLCBTaW5oYWxhLAorICAgICAgIFNvcmFfU29tcGVuZywgIFN1bmRhbmVzZSwgIFN5bG90aV9OYWdyaSwgIFN5cmlhYywgIFRhZ2Fsb2csICAgVGFnYmFud2EsCisgICAgICAgVGFpX0xlLCAgIFRhaV9UaGFtLCAgVGFpX1ZpZXQsICBUYWtyaSwgIFRhbWlsLCAgVGVsdWd1LCAgVGhhYW5hLCAgVGhhaSwKKyAgICAgICBUaWJldGFuLCBUaWZpbmFnaCwgVGlyaHV0YSwgVWdhcml0aWMsIFZhaSwgV2FyYW5nX0NpdGksIFlpLgorCisKK0NIQVJBQ1RFUiBDTEFTU0VTCisKKyAgICAgICAgIFsuLi5dICAgICAgIHBvc2l0aXZlIGNoYXJhY3RlciBjbGFzcworICAgICAgICAgW14uLi5dICAgICAgbmVnYXRpdmUgY2hhcmFjdGVyIGNsYXNzCisgICAgICAgICBbeC15XSAgICAgICByYW5nZSAoY2FuIGJlIHVzZWQgZm9yIGhleCBjaGFyYWN0ZXJzKQorICAgICAgICAgW1s6eHh4Ol1dICAgcG9zaXRpdmUgUE9TSVggbmFtZWQgc2V0CisgICAgICAgICBbWzpeeHh4Ol1dICBuZWdhdGl2ZSBQT1NJWCBuYW1lZCBzZXQKKworICAgICAgICAgYWxudW0gICAgICAgYWxwaGFudW1lcmljCisgICAgICAgICBhbHBoYSAgICAgICBhbHBoYWJldGljCisgICAgICAgICBhc2NpaSAgICAgICAwLTEyNworICAgICAgICAgYmxhbmsgICAgICAgc3BhY2Ugb3IgdGFiCisgICAgICAgICBjbnRybCAgICAgICBjb250cm9sIGNoYXJhY3RlcgorICAgICAgICAgZGlnaXQgICAgICAgZGVjaW1hbCBkaWdpdAorICAgICAgICAgZ3JhcGggICAgICAgcHJpbnRpbmcsIGV4Y2x1ZGluZyBzcGFjZQorICAgICAgICAgbG93ZXIgICAgICAgbG93ZXIgY2FzZSBsZXR0ZXIKKyAgICAgICAgIHByaW50ICAgICAgIHByaW50aW5nLCBpbmNsdWRpbmcgc3BhY2UKKyAgICAgICAgIHB1bmN0ICAgICAgIHByaW50aW5nLCBleGNsdWRpbmcgYWxwaGFudW1lcmljCisgICAgICAgICBzcGFjZSAgICAgICB3aGl0ZSBzcGFjZQorICAgICAgICAgdXBwZXIgICAgICAgdXBwZXIgY2FzZSBsZXR0ZXIKKyAgICAgICAgIHdvcmQgICAgICAgIHNhbWUgYXMgXHcKKyAgICAgICAgIHhkaWdpdCAgICAgIGhleGFkZWNpbWFsIGRpZ2l0CisKKyAgICAgICBJbiBQQ1JFMiwgUE9TSVggY2hhcmFjdGVyIHNldCBuYW1lcyByZWNvZ25pemUgb25seSBBU0NJSSBjaGFyYWN0ZXJzICBieQorICAgICAgIGRlZmF1bHQsICBidXQgIHNvbWUgb2YgdGhlbSB1c2UgVW5pY29kZSBwcm9wZXJ0aWVzIGlmIFBDUkUyX1VDUCBpcyBzZXQuCisgICAgICAgWW91IGNhbiB1c2UgXFEuLi5cRSBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MuCisKKworUVVBTlRJRklFUlMKKworICAgICAgICAgPyAgICAgICAgICAgMCBvciAxLCBncmVlZHkKKyAgICAgICAgID8rICAgICAgICAgIDAgb3IgMSwgcG9zc2Vzc2l2ZQorICAgICAgICAgPz8gICAgICAgICAgMCBvciAxLCBsYXp5CisgICAgICAgICAqICAgICAgICAgICAwIG9yIG1vcmUsIGdyZWVkeQorICAgICAgICAgKisgICAgICAgICAgMCBvciBtb3JlLCBwb3NzZXNzaXZlCisgICAgICAgICAqPyAgICAgICAgICAwIG9yIG1vcmUsIGxhenkKKyAgICAgICAgICsgICAgICAgICAgIDEgb3IgbW9yZSwgZ3JlZWR5CisgICAgICAgICArKyAgICAgICAgICAxIG9yIG1vcmUsIHBvc3Nlc3NpdmUKKyAgICAgICAgICs/ICAgICAgICAgIDEgb3IgbW9yZSwgbGF6eQorICAgICAgICAge259ICAgICAgICAgZXhhY3RseSBuCisgICAgICAgICB7bixtfSAgICAgICBhdCBsZWFzdCBuLCBubyBtb3JlIHRoYW4gbSwgZ3JlZWR5CisgICAgICAgICB7bixtfSsgICAgICBhdCBsZWFzdCBuLCBubyBtb3JlIHRoYW4gbSwgcG9zc2Vzc2l2ZQorICAgICAgICAge24sbX0/ICAgICAgYXQgbGVhc3Qgbiwgbm8gbW9yZSB0aGFuIG0sIGxhenkKKyAgICAgICAgIHtuLH0gICAgICAgIG4gb3IgbW9yZSwgZ3JlZWR5CisgICAgICAgICB7bix9KyAgICAgICBuIG9yIG1vcmUsIHBvc3Nlc3NpdmUKKyAgICAgICAgIHtuLH0/ICAgICAgIG4gb3IgbW9yZSwgbGF6eQorCisKK0FOQ0hPUlMgQU5EIFNJTVBMRSBBU1NFUlRJT05TCisKKyAgICAgICAgIFxiICAgICAgICAgIHdvcmQgYm91bmRhcnkKKyAgICAgICAgIFxCICAgICAgICAgIG5vdCBhIHdvcmQgYm91bmRhcnkKKyAgICAgICAgIF4gICAgICAgICAgIHN0YXJ0IG9mIHN1YmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgYWxzbyBhZnRlciBhbiBpbnRlcm5hbCBuZXdsaW5lIGluIG11bHRpbGluZSBtb2RlCisgICAgICAgICAgICAgICAgICAgICAgIChhZnRlciBhbnkgbmV3bGluZSBpZiBQQ1JFMl9BTFRfQ0lSQ1VNRkxFWCBpcyBzZXQpCisgICAgICAgICBcQSAgICAgICAgICBzdGFydCBvZiBzdWJqZWN0CisgICAgICAgICAkICAgICAgICAgICBlbmQgb2Ygc3ViamVjdAorICAgICAgICAgICAgICAgICAgICAgICBhbHNvIGJlZm9yZSBuZXdsaW5lIGF0IGVuZCBvZiBzdWJqZWN0CisgICAgICAgICAgICAgICAgICAgICAgIGFsc28gYmVmb3JlIGludGVybmFsIG5ld2xpbmUgaW4gbXVsdGlsaW5lIG1vZGUKKyAgICAgICAgIFxaICAgICAgICAgIGVuZCBvZiBzdWJqZWN0CisgICAgICAgICAgICAgICAgICAgICAgIGFsc28gYmVmb3JlIG5ld2xpbmUgYXQgZW5kIG9mIHN1YmplY3QKKyAgICAgICAgIFx6ICAgICAgICAgIGVuZCBvZiBzdWJqZWN0CisgICAgICAgICBcRyAgICAgICAgICBmaXJzdCBtYXRjaGluZyBwb3NpdGlvbiBpbiBzdWJqZWN0CisKKworTUFUQ0ggUE9JTlQgUkVTRVQKKworICAgICAgICAgXEsgICAgICAgICAgcmVzZXQgc3RhcnQgb2YgbWF0Y2gKKworICAgICAgIFxLIGlzIGhvbm91cmVkIGluIHBvc2l0aXZlIGFzc2VydGlvbnMsIGJ1dCBpZ25vcmVkIGluIG5lZ2F0aXZlIG9uZXMuCisKKworQUxURVJOQVRJT04KKworICAgICAgICAgZXhwcnxleHByfGV4cHIuLi4KKworCitDQVBUVVJJTkcKKworICAgICAgICAgKC4uLikgICAgICAgICAgIGNhcHR1cmluZyBncm91cAorICAgICAgICAgKD88bmFtZT4uLi4pICAgIG5hbWVkIGNhcHR1cmluZyBncm91cCAoUGVybCkKKyAgICAgICAgICg/J25hbWUnLi4uKSAgICBuYW1lZCBjYXB0dXJpbmcgZ3JvdXAgKFBlcmwpCisgICAgICAgICAoP1A8bmFtZT4uLi4pICAgbmFtZWQgY2FwdHVyaW5nIGdyb3VwIChQeXRob24pCisgICAgICAgICAoPzouLi4pICAgICAgICAgbm9uLWNhcHR1cmluZyBncm91cAorICAgICAgICAgKD98Li4uKSAgICAgICAgIG5vbi1jYXB0dXJpbmcgZ3JvdXA7IHJlc2V0IGdyb3VwIG51bWJlcnMgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmluZyBncm91cHMgaW4gZWFjaCBhbHRlcm5hdGl2ZQorCisKK0FUT01JQyBHUk9VUFMKKworICAgICAgICAgKD8+Li4uKSAgICAgICAgIGF0b21pYywgbm9uLWNhcHR1cmluZyBncm91cAorCisKK0NPTU1FTlQKKworICAgICAgICAgKD8jLi4uLikgICAgICAgIGNvbW1lbnQgKG5vdCBuZXN0YWJsZSkKKworCitPUFRJT04gU0VUVElORworCisgICAgICAgICAoP2kpICAgICAgICAgICAgY2FzZWxlc3MKKyAgICAgICAgICg/SikgICAgICAgICAgICBhbGxvdyBkdXBsaWNhdGUgbmFtZXMKKyAgICAgICAgICg/bSkgICAgICAgICAgICBtdWx0aWxpbmUKKyAgICAgICAgICg/cykgICAgICAgICAgICBzaW5nbGUgbGluZSAoZG90YWxsKQorICAgICAgICAgKD9VKSAgICAgICAgICAgIGRlZmF1bHQgdW5ncmVlZHkgKGxhenkpCisgICAgICAgICAoP3gpICAgICAgICAgICAgZXh0ZW5kZWQgKGlnbm9yZSB3aGl0ZSBzcGFjZSkKKyAgICAgICAgICg/LS4uLikgICAgICAgICB1bnNldCBvcHRpb24ocykKKworICAgICAgIFRoZSBmb2xsb3dpbmcgYXJlIHJlY29nbml6ZWQgb25seSBhdCB0aGUgdmVyeSBzdGFydCAgb2YgIGEgIHBhdHRlcm4gIG9yCisgICAgICAgYWZ0ZXIgIG9uZSAgb2YgdGhlIG5ld2xpbmUgb3IgXFIgb3B0aW9ucyB3aXRoIHNpbWlsYXIgc3ludGF4LiBNb3JlIHRoYW4KKyAgICAgICBvbmUgb2YgdGhlbSBtYXkgYXBwZWFyLgorCisgICAgICAgICAoKkxJTUlUX01BVENIPWQpIHNldCB0aGUgbWF0Y2ggbGltaXQgdG8gZCAoZGVjaW1hbCBudW1iZXIpCisgICAgICAgICAoKkxJTUlUX1JFQ1VSU0lPTj1kKSBzZXQgdGhlIHJlY3Vyc2lvbiBsaW1pdCB0byBkIChkZWNpbWFsIG51bWJlcikKKyAgICAgICAgICgqTk9URU1QVFkpICAgICBzZXQgUENSRTJfTk9URU1QVFkgd2hlbiBtYXRjaGluZworICAgICAgICAgKCpOT1RFTVBUWV9BVFNUQVJUKSBzZXQgUENSRTJfTk9URU1QVFlfQVRTVEFSVCB3aGVuIG1hdGNoaW5nCisgICAgICAgICAoKk5PX0FVVE9fUE9TU0VTUykgbm8gYXV0by1wb3NzZXNzaWZpY2F0aW9uIChQQ1JFMl9OT19BVVRPX1BPU1NFU1MpCisgICAgICAgICAoKk5PX0RPVFNUQVJfQU5DSE9SKSBubyAuKiBhbmNob3JpbmcgKFBDUkUyX05PX0RPVFNUQVJfQU5DSE9SKQorICAgICAgICAgKCpOT19KSVQpICAgICAgIGRpc2FibGUgSklUIG9wdGltaXphdGlvbgorICAgICAgICAgKCpOT19TVEFSVF9PUFQpIG5vIHN0YXJ0LW1hdGNoIG9wdGltaXphdGlvbiAoUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUpCisgICAgICAgICAoKlVURikgICAgICAgICAgc2V0IGFwcHJvcHJpYXRlIFVURiBtb2RlIGZvciB0aGUgbGlicmFyeSBpbiB1c2UKKyAgICAgICAgICgqVUNQKSAgICAgICAgICBzZXQgUENSRTJfVUNQICh1c2UgVW5pY29kZSBwcm9wZXJ0aWVzIGZvciBcZCBldGMpCisKKyAgICAgICBOb3RlIHRoYXQgTElNSVRfTUFUQ0ggYW5kIExJTUlUX1JFQ1VSU0lPTiBjYW4gb25seSByZWR1Y2UgdGhlIHZhbHVlICBvZgorICAgICAgIHRoZSAgbGltaXRzICBzZXQgYnkgdGhlIGNhbGxlciBvZiBwY3JlMl9tYXRjaCgpLCBub3QgaW5jcmVhc2UgdGhlbS4gVGhlCisgICAgICAgYXBwbGljYXRpb24gY2FuIGxvY2sgb3V0IHRoZSB1c2Ugb2YgKCpVVEYpIGFuZCAoKlVDUCkgIGJ5ICBzZXR0aW5nICB0aGUKKyAgICAgICBQQ1JFMl9ORVZFUl9VVEYgIG9yICBQQ1JFMl9ORVZFUl9VQ1AgIG9wdGlvbnMsIHJlc3BlY3RpdmVseSwgYXQgY29tcGlsZQorICAgICAgIHRpbWUuCisKKworTkVXTElORSBDT05WRU5USU9OCisKKyAgICAgICBUaGVzZSBhcmUgcmVjb2duaXplZCBvbmx5IGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mICB0aGUgIHBhdHRlcm4gIG9yICBhZnRlcgorICAgICAgIG9wdGlvbiBzZXR0aW5ncyB3aXRoIGEgc2ltaWxhciBzeW50YXguCisKKyAgICAgICAgICgqQ1IpICAgICAgICAgICBjYXJyaWFnZSByZXR1cm4gb25seQorICAgICAgICAgKCpMRikgICAgICAgICAgIGxpbmVmZWVkIG9ubHkKKyAgICAgICAgICgqQ1JMRikgICAgICAgICBjYXJyaWFnZSByZXR1cm4gZm9sbG93ZWQgYnkgbGluZWZlZWQKKyAgICAgICAgICgqQU5ZQ1JMRikgICAgICBhbGwgdGhyZWUgb2YgdGhlIGFib3ZlCisgICAgICAgICAoKkFOWSkgICAgICAgICAgYW55IFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZQorCisKK1dIQVQgXFIgTUFUQ0hFUworCisgICAgICAgVGhlc2UgIGFyZSAgcmVjb2duaXplZCAgb25seSAgYXQgdGhlIHZlcnkgc3RhcnQgb2YgdGhlIHBhdHRlcm4gb3IgYWZ0ZXIKKyAgICAgICBvcHRpb24gc2V0dGluZyB3aXRoIGEgc2ltaWxhciBzeW50YXguCisKKyAgICAgICAgICgqQlNSX0FOWUNSTEYpICBDUiwgTEYsIG9yIENSTEYKKyAgICAgICAgICgqQlNSX1VOSUNPREUpICBhbnkgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlCisKKworTE9PS0FIRUFEIEFORCBMT09LQkVISU5EIEFTU0VSVElPTlMKKworICAgICAgICAgKD89Li4uKSAgICAgICAgIHBvc2l0aXZlIGxvb2sgYWhlYWQKKyAgICAgICAgICg/IS4uLikgICAgICAgICBuZWdhdGl2ZSBsb29rIGFoZWFkCisgICAgICAgICAoPzw9Li4uKSAgICAgICAgcG9zaXRpdmUgbG9vayBiZWhpbmQKKyAgICAgICAgICg/PCEuLi4pICAgICAgICBuZWdhdGl2ZSBsb29rIGJlaGluZAorCisgICAgICAgRWFjaCB0b3AtbGV2ZWwgYnJhbmNoIG9mIGEgbG9vayBiZWhpbmQgbXVzdCBiZSBvZiBhIGZpeGVkIGxlbmd0aC4KKworCitCQUNLUkVGRVJFTkNFUworCisgICAgICAgICBcbiAgICAgICAgICAgICAgcmVmZXJlbmNlIGJ5IG51bWJlciAoY2FuIGJlIGFtYmlndW91cykKKyAgICAgICAgIFxnbiAgICAgICAgICAgICByZWZlcmVuY2UgYnkgbnVtYmVyCisgICAgICAgICBcZ3tufSAgICAgICAgICAgcmVmZXJlbmNlIGJ5IG51bWJlcgorICAgICAgICAgXGd7LW59ICAgICAgICAgIHJlbGF0aXZlIHJlZmVyZW5jZSBieSBudW1iZXIKKyAgICAgICAgIFxrPG5hbWU+ICAgICAgICByZWZlcmVuY2UgYnkgbmFtZSAoUGVybCkKKyAgICAgICAgIFxrJ25hbWUnICAgICAgICByZWZlcmVuY2UgYnkgbmFtZSAoUGVybCkKKyAgICAgICAgIFxne25hbWV9ICAgICAgICByZWZlcmVuY2UgYnkgbmFtZSAoUGVybCkKKyAgICAgICAgIFxre25hbWV9ICAgICAgICByZWZlcmVuY2UgYnkgbmFtZSAoLk5FVCkKKyAgICAgICAgICg/UD1uYW1lKSAgICAgICByZWZlcmVuY2UgYnkgbmFtZSAoUHl0aG9uKQorCisKK1NVQlJPVVRJTkUgUkVGRVJFTkNFUyAoUE9TU0lCTFkgUkVDVVJTSVZFKQorCisgICAgICAgICAoP1IpICAgICAgICAgICAgcmVjdXJzZSB3aG9sZSBwYXR0ZXJuCisgICAgICAgICAoP24pICAgICAgICAgICAgY2FsbCBzdWJwYXR0ZXJuIGJ5IGFic29sdXRlIG51bWJlcgorICAgICAgICAgKD8rbikgICAgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSByZWxhdGl2ZSBudW1iZXIKKyAgICAgICAgICg/LW4pICAgICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgcmVsYXRpdmUgbnVtYmVyCisgICAgICAgICAoPyZuYW1lKSAgICAgICAgY2FsbCBzdWJwYXR0ZXJuIGJ5IG5hbWUgKFBlcmwpCisgICAgICAgICAoP1A+bmFtZSkgICAgICAgY2FsbCBzdWJwYXR0ZXJuIGJ5IG5hbWUgKFB5dGhvbikKKyAgICAgICAgIFxnPG5hbWU+ICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgbmFtZSAoT25pZ3VydW1hKQorICAgICAgICAgXGcnbmFtZScgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSBuYW1lIChPbmlndXJ1bWEpCisgICAgICAgICBcZzxuPiAgICAgICAgICAgY2FsbCBzdWJwYXR0ZXJuIGJ5IGFic29sdXRlIG51bWJlciAoT25pZ3VydW1hKQorICAgICAgICAgXGcnbicgICAgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSBhYnNvbHV0ZSBudW1iZXIgKE9uaWd1cnVtYSkKKyAgICAgICAgIFxnPCtuPiAgICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgcmVsYXRpdmUgbnVtYmVyIChQQ1JFMiBleHRlbnNpb24pCisgICAgICAgICBcZycrbicgICAgICAgICAgY2FsbCBzdWJwYXR0ZXJuIGJ5IHJlbGF0aXZlIG51bWJlciAoUENSRTIgZXh0ZW5zaW9uKQorICAgICAgICAgXGc8LW4+ICAgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSByZWxhdGl2ZSBudW1iZXIgKFBDUkUyIGV4dGVuc2lvbikKKyAgICAgICAgIFxnJy1uJyAgICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgcmVsYXRpdmUgbnVtYmVyIChQQ1JFMiBleHRlbnNpb24pCisKKworQ09ORElUSU9OQUwgUEFUVEVSTlMKKworICAgICAgICAgKD8oY29uZGl0aW9uKXllcy1wYXR0ZXJuKQorICAgICAgICAgKD8oY29uZGl0aW9uKXllcy1wYXR0ZXJufG5vLXBhdHRlcm4pCisKKyAgICAgICAgICg/KG4pICAgICAgICAgICAgICAgYWJzb2x1dGUgcmVmZXJlbmNlIGNvbmRpdGlvbgorICAgICAgICAgKD8oK24pICAgICAgICAgICAgICByZWxhdGl2ZSByZWZlcmVuY2UgY29uZGl0aW9uCisgICAgICAgICAoPygtbikgICAgICAgICAgICAgIHJlbGF0aXZlIHJlZmVyZW5jZSBjb25kaXRpb24KKyAgICAgICAgICg/KDxuYW1lPikgICAgICAgICAgbmFtZWQgcmVmZXJlbmNlIGNvbmRpdGlvbiAoUGVybCkKKyAgICAgICAgICg/KCduYW1lJykgICAgICAgICAgbmFtZWQgcmVmZXJlbmNlIGNvbmRpdGlvbiAoUGVybCkKKyAgICAgICAgICg/KG5hbWUpICAgICAgICAgICAgbmFtZWQgcmVmZXJlbmNlIGNvbmRpdGlvbiAoUENSRTIpCisgICAgICAgICAoPyhSKSAgICAgICAgICAgICAgIG92ZXJhbGwgcmVjdXJzaW9uIGNvbmRpdGlvbgorICAgICAgICAgKD8oUm4pICAgICAgICAgICAgICBzcGVjaWZpYyBncm91cCByZWN1cnNpb24gY29uZGl0aW9uCisgICAgICAgICAoPyhSJm5hbWUpICAgICAgICAgIHNwZWNpZmljIHJlY3Vyc2lvbiBjb25kaXRpb24KKyAgICAgICAgICg/KERFRklORSkgICAgICAgICAgZGVmaW5lIHN1YnBhdHRlcm4gZm9yIHJlZmVyZW5jZQorICAgICAgICAgKD8oVkVSU0lPTls+XT1uLm0pICB0ZXN0IFBDUkUyIHZlcnNpb24KKyAgICAgICAgICg/KGFzc2VydCkgICAgICAgICAgYXNzZXJ0aW9uIGNvbmRpdGlvbgorCisKK0JBQ0tUUkFDS0lORyBDT05UUk9MCisKKyAgICAgICBUaGUgZm9sbG93aW5nIGFjdCBpbW1lZGlhdGVseSB0aGV5IGFyZSByZWFjaGVkOgorCisgICAgICAgICAoKkFDQ0VQVCkgICAgICAgZm9yY2Ugc3VjY2Vzc2Z1bCBtYXRjaAorICAgICAgICAgKCpGQUlMKSAgICAgICAgIGZvcmNlIGJhY2t0cmFjazsgc3lub255bSAoKkYpCisgICAgICAgICAoKk1BUks6TkFNRSkgICAgc2V0IG5hbWUgdG8gYmUgcGFzc2VkIGJhY2s7IHN5bm9ueW0gKCo6TkFNRSkKKworICAgICAgIFRoZSBmb2xsb3dpbmcgYWN0IG9ubHkgd2hlbiBhIHN1YnNlcXVlbnQgbWF0Y2ggZmFpbHVyZSBjYXVzZXMgIGEgIGJhY2stCisgICAgICAgdHJhY2sgdG8gcmVhY2ggdGhlbS4gVGhleSBhbGwgZm9yY2UgYSBtYXRjaCBmYWlsdXJlLCBidXQgdGhleSBkaWZmZXIgaW4KKyAgICAgICB3aGF0IGhhcHBlbnMgYWZ0ZXJ3YXJkcy4gVGhvc2UgdGhhdCBhZHZhbmNlIHRoZSBzdGFydC1vZi1tYXRjaCBwb2ludCBkbworICAgICAgIHNvIG9ubHkgaWYgdGhlIHBhdHRlcm4gaXMgbm90IGFuY2hvcmVkLgorCisgICAgICAgICAoKkNPTU1JVCkgICAgICAgb3ZlcmFsbCBmYWlsdXJlLCBubyBhZHZhbmNlIG9mIHN0YXJ0aW5nIHBvaW50CisgICAgICAgICAoKlBSVU5FKSAgICAgICAgYWR2YW5jZSB0byBuZXh0IHN0YXJ0aW5nIGNoYXJhY3RlcgorICAgICAgICAgKCpQUlVORTpOQU1FKSAgIGVxdWl2YWxlbnQgdG8gKCpNQVJLOk5BTUUpKCpQUlVORSkKKyAgICAgICAgICgqU0tJUCkgICAgICAgICBhZHZhbmNlIHRvIGN1cnJlbnQgbWF0Y2hpbmcgcG9zaXRpb24KKyAgICAgICAgICgqU0tJUDpOQU1FKSAgICBhZHZhbmNlIHRvIHBvc2l0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYW4gZWFybGllcgorICAgICAgICAgICAgICAgICAgICAgICAgICgqTUFSSzpOQU1FKTsgaWYgbm90IGZvdW5kLCB0aGUgKCpTS0lQKSBpcyBpZ25vcmVkCisgICAgICAgICAoKlRIRU4pICAgICAgICAgbG9jYWwgZmFpbHVyZSwgYmFja3RyYWNrIHRvIG5leHQgYWx0ZXJuYXRpb24KKyAgICAgICAgICgqVEhFTjpOQU1FKSAgICBlcXVpdmFsZW50IHRvICgqTUFSSzpOQU1FKSgqVEhFTikKKworCitDQUxMT1VUUworCisgICAgICAgICAoP0MpICAgICAgICAgICAgY2FsbG91dCAoYXNzdW1lZCBudW1iZXIgMCkKKyAgICAgICAgICg/Q24pICAgICAgICAgICBjYWxsb3V0IHdpdGggbnVtZXJpY2FsIGRhdGEgbgorICAgICAgICAgKD9DInRleHQiKSAgICAgIGNhbGxvdXQgd2l0aCBzdHJpbmcgZGF0YQorCisgICAgICAgVGhlIGFsbG93ZWQgc3RyaW5nIGRlbGltaXRlcnMgYXJlIGAgJyAiIF4gJSAjICQgKHdoaWNoIGFyZSB0aGUgc2FtZSBmb3IKKyAgICAgICB0aGUgc3RhcnQgYW5kIHRoZSBlbmQpLCBhbmQgdGhlIHN0YXJ0aW5nIGRlbGltaXRlciB7IG1hdGNoZWQgIHdpdGggIHRoZQorICAgICAgIGVuZGluZyAgZGVsaW1pdGVyICB9LiBUbyBlbmNvZGUgdGhlIGVuZGluZyBkZWxpbWl0ZXIgd2l0aGluIHRoZSBzdHJpbmcsCisgICAgICAgZG91YmxlIGl0LgorCisKK1NFRSBBTFNPCisKKyAgICAgICBwY3JlMnBhdHRlcm4oMyksICAgcGNyZTJhcGkoMyksICAgcGNyZTJjYWxsb3V0KDMpLCAgICBwY3JlMm1hdGNoaW5nKDMpLAorICAgICAgIHBjcmUyKDMpLgorCisKK0FVVEhPUgorCisgICAgICAgUGhpbGlwIEhhemVsCisgICAgICAgVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorICAgICAgIENhbWJyaWRnZSwgRW5nbGFuZC4KKworCitSRVZJU0lPTgorCisgICAgICAgTGFzdCB1cGRhdGVkOiAxNiBPY3RvYmVyIDIwMTUKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK1BDUkUyVU5JQ09ERSgzKSAgICAgICAgICAgIExpYnJhcnkgRnVuY3Rpb25zIE1hbnVhbCAgICAgICAgICAgIFBDUkUyVU5JQ09ERSgzKQorCisKKworTkFNRQorICAgICAgIFBDUkUgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisKK1VOSUNPREUgQU5EIFVURiBTVVBQT1JUCisKKyAgICAgICBXaGVuIFBDUkUyIGlzIGJ1aWx0IHdpdGggVW5pY29kZSBzdXBwb3J0ICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIGl0IGhhcworICAgICAgIGtub3dsZWRnZSBvZiBVbmljb2RlIGNoYXJhY3RlciBwcm9wZXJ0aWVzIGFuZCBjYW4gcHJvY2VzcyB0ZXh0ICBzdHJpbmdzCisgICAgICAgaW4gIFVURi04LCBVVEYtMTYsIG9yIFVURi0zMiBmb3JtYXQgKGRlcGVuZGluZyBvbiB0aGUgY29kZSB1bml0IHdpZHRoKS4KKyAgICAgICBIb3dldmVyLCBieSBkZWZhdWx0LCBQQ1JFMiBhc3N1bWVzIHRoYXQgb25lIGNvZGUgdW5pdCBpcyBvbmUgY2hhcmFjdGVyLgorICAgICAgIFRvICBwcm9jZXNzICBhICBwYXR0ZXJuICBhcyBhIFVURiBzdHJpbmcsIHdoZXJlIGEgY2hhcmFjdGVyIG1heSByZXF1aXJlCisgICAgICAgbW9yZSB0aGFuIG9uZSAgY29kZSAgdW5pdCwgIHlvdSAgbXVzdCAgY2FsbCAgcGNyZTJfY29tcGlsZSgpICB3aXRoICB0aGUKKyAgICAgICBQQ1JFMl9VVEYgIG9wdGlvbiAgZmxhZywgIG9yICB0aGUgIHBhdHRlcm4gbXVzdCBzdGFydCB3aXRoIHRoZSBzZXF1ZW5jZQorICAgICAgICgqVVRGKS4gV2hlbiBlaXRoZXIgb2YgdGhlc2UgaXMgdGhlIGNhc2UsIGJvdGggdGhlIHBhdHRlcm4gYW5kIGFueSBzdWItCisgICAgICAgamVjdCAgc3RyaW5ncyAgdGhhdCAgYXJlICBtYXRjaGVkIGFnYWluc3QgaXQgYXJlIHRyZWF0ZWQgYXMgVVRGIHN0cmluZ3MKKyAgICAgICBpbnN0ZWFkIG9mIHN0cmluZ3Mgb2YgaW5kaXZpZHVhbCBvbmUtY29kZS11bml0IGNoYXJhY3RlcnMuCisKKyAgICAgICBJZiB5b3UgZG8gbm90IG5lZWQgVW5pY29kZSBzdXBwb3J0IHlvdSBjYW4gYnVpbGQgUENSRTIgd2l0aG91dCAgaXQsICBpbgorICAgICAgIHdoaWNoIGNhc2UgdGhlIGxpYnJhcnkgd2lsbCBiZSBzbWFsbGVyLgorCisKK1VOSUNPREUgUFJPUEVSVFkgU1VQUE9SVAorCisgICAgICAgV2hlbiAgUENSRTIgaXMgYnVpbHQgd2l0aCBVbmljb2RlIHN1cHBvcnQsIHRoZSBlc2NhcGUgc2VxdWVuY2VzIFxwey4ufSwKKyAgICAgICBcUHsuLn0sIGFuZCBcWCBjYW4gYmUgdXNlZC4gVGhlIFVuaWNvZGUgcHJvcGVydGllcyB0aGF0IGNhbiAgYmUgIHRlc3RlZAorICAgICAgIGFyZSAgbGltaXRlZCB0byB0aGUgZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0aWVzIHN1Y2ggYXMgTHUgZm9yIGFuIHVwcGVyCisgICAgICAgY2FzZSBsZXR0ZXIgb3IgTmQgZm9yIGEgZGVjaW1hbCBudW1iZXIsIHRoZSBVbmljb2RlIHNjcmlwdCAgbmFtZXMgIHN1Y2gKKyAgICAgICBhcyBBcmFiaWMgb3IgSGFuLCBhbmQgdGhlIGRlcml2ZWQgcHJvcGVydGllcyBBbnkgYW5kIEwmLiBGdWxsIGxpc3RzIGFyZQorICAgICAgIGdpdmVuIGluIHRoZSBwY3JlMnBhdHRlcm4gYW5kIHBjcmUyc3ludGF4IGRvY3VtZW50YXRpb24uIE9ubHkgdGhlIHNob3J0CisgICAgICAgbmFtZXMgIGZvciAgcHJvcGVydGllcyBhcmUgc3VwcG9ydGVkLiBGb3IgZXhhbXBsZSwgXHB7TH0gbWF0Y2hlcyBhIGxldC0KKyAgICAgICB0ZXIuIEl0cyBQZXJsIHN5bm9ueW0sIFxwe0xldHRlcn0sIGlzIG5vdCBzdXBwb3J0ZWQuICAgRnVydGhlcm1vcmUsICBpbgorICAgICAgIFBlcmwsICBtYW55IHByb3BlcnRpZXMgbWF5IG9wdGlvbmFsbHkgYmUgcHJlZml4ZWQgYnkgIklzIiwgZm9yIGNvbXBhdGktCisgICAgICAgYmlsaXR5IHdpdGggUGVybCA1LjYuIFBDUkUgZG9lcyBub3Qgc3VwcG9ydCB0aGlzLgorCisKK1dJREUgQ0hBUkFDVEVSUyBBTkQgVVRGIE1PREVTCisKKyAgICAgICBDb2RlcG9pbnRzIGxlc3MgdGhhbiAyNTYgY2FuIGJlIHNwZWNpZmllZCBpbiBwYXR0ZXJucyBieSBlaXRoZXIgIGJyYWNlZAorICAgICAgIG9yIHVuYnJhY2VkIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZXMgKGZvciBleGFtcGxlLCBceHtiM30gb3IgXHhiMykuCisgICAgICAgTGFyZ2VyIHZhbHVlcyBoYXZlIHRvIHVzZSBicmFjZWQgc2VxdWVuY2VzLiBVbmJyYWNlZCBvY3RhbCBjb2RlICBwb2ludHMKKyAgICAgICB1cCB0byBcNzc3IGFyZSBhbHNvIHJlY29nbml6ZWQ7IGxhcmdlciBvbmVzIGNhbiBiZSBjb2RlZCB1c2luZyBcb3suLi59LgorCisgICAgICAgSW4gIFVURiBtb2RlcywgcmVwZWF0IHF1YW50aWZpZXJzIGFwcGx5IHRvIGNvbXBsZXRlIFVURiBjaGFyYWN0ZXJzLCBub3QKKyAgICAgICB0byBpbmRpdmlkdWFsIGNvZGUgdW5pdHMuCisKKyAgICAgICBJbiBVVEYgbW9kZXMsIHRoZSBkb3QgbWV0YWNoYXJhY3RlciBtYXRjaGVzIG9uZSBVVEYgIGNoYXJhY3RlciAgaW5zdGVhZAorICAgICAgIG9mIGEgc2luZ2xlIGNvZGUgdW5pdC4KKworICAgICAgIFRoZSAgZXNjYXBlICBzZXF1ZW5jZSAgXEMgY2FuIGJlIHVzZWQgdG8gbWF0Y2ggYSBzaW5nbGUgY29kZSB1bml0LCBpbiBhCisgICAgICAgVVRGIG1vZGUsIGJ1dCBpdHMgdXNlIGNhbiBsZWFkICB0byAgc29tZSAgc3RyYW5nZSAgZWZmZWN0cyAgYmVjYXVzZSAgaXQKKyAgICAgICBicmVha3MgIHVwICBtdWx0aS11bml0ICBjaGFyYWN0ZXJzICAoc2VlICB0aGUgIGRlc2NyaXB0aW9uIG9mIFxDIGluIHRoZQorICAgICAgIHBjcmUycGF0dGVybiBkb2N1bWVudGF0aW9uKS4gVGhlIHVzZSBvZiBcQyAgaXMgIG5vdCAgc3VwcG9ydGVkICBieSAgdGhlCisgICAgICAgYWx0ZXJuYXRpdmUgIG1hdGNoaW5nICBmdW5jdGlvbiBwY3JlMl9kZmFfbWF0Y2goKSB3aGVuIGluIFVURiBtb2RlLiBJdHMKKyAgICAgICB1c2UgcHJvdm9rZXMgYSBtYXRjaC10aW1lIGVycm9yLiBUaGUgSklUICBvcHRpbWl6YXRpb24gIGFsc28gIGRvZXMgIG5vdAorICAgICAgIHN1cHBvcnQgIFxDICBpbiAgVVRGICBtb2RlLiAgSWYgSklUIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWQgZm9yIGEgVVRGCisgICAgICAgcGF0dGVybiB0aGF0IGNvbnRhaW5zIFxDLCBpdCB3aWxsIG5vdCBzdWNjZWVkLCBhbmQgc28gdGhlIG1hdGNoaW5nIHdpbGwKKyAgICAgICBiZSBjYXJyaWVkIG91dCBieSB0aGUgbm9ybWFsIGludGVycHJldGl2ZSBmdW5jdGlvbi4KKworICAgICAgIFRoZSBjaGFyYWN0ZXIgZXNjYXBlcyBcYiwgXEIsIFxkLCBcRCwgXHMsIFxTLCBcdywgYW5kIFxXIGNvcnJlY3RseSB0ZXN0CisgICAgICAgY2hhcmFjdGVycyBvZiBhbnkgY29kZSB2YWx1ZSwgYnV0LCAgYnkgIGRlZmF1bHQsICB0aGUgIGNoYXJhY3RlcnMgIHRoYXQKKyAgICAgICBQQ1JFMiAgcmVjb2duaXplcyBhcyBkaWdpdHMsIHNwYWNlcywgb3Igd29yZCBjaGFyYWN0ZXJzIHJlbWFpbiB0aGUgc2FtZQorICAgICAgIHNldCBhcyBpbiBub24tVVRGIG1vZGUsIGFsbCAgd2l0aCAgY29kZSAgcG9pbnRzICBsZXNzICB0aGFuICAyNTYuICBUaGlzCisgICAgICAgcmVtYWlucyAgdHJ1ZSAgZXZlbiAgd2hlbiAgUENSRTIgIGlzICBidWlsdCB0byBpbmNsdWRlIFVuaWNvZGUgc3VwcG9ydCwKKyAgICAgICBiZWNhdXNlIHRvIGRvIG90aGVyd2lzZSB3b3VsZCBzbG93IGRvd24gbWF0Y2hpbmcgaW4gbWFueSBjb21tb24gIGNhc2VzLgorICAgICAgIE5vdGUgIHRoYXQgIHRoaXMgYWxzbyBhcHBsaWVzIHRvIFxiIGFuZCBcQiwgYmVjYXVzZSB0aGV5IGFyZSBkZWZpbmVkIGluCisgICAgICAgdGVybXMgb2YgXHcgYW5kIFxXLiBJZiB5b3Ugd2FudCB0byB0ZXN0IGZvciAgYSAgd2lkZXIgIHNlbnNlICBvZiwgIHNheSwKKyAgICAgICAiZGlnaXQiLCAgeW91ICBjYW4gIHVzZSBleHBsaWNpdCBVbmljb2RlIHByb3BlcnR5IHRlc3RzIHN1Y2ggYXMgXHB7TmR9LgorICAgICAgIEFsdGVybmF0aXZlbHksIGlmIHlvdSBzZXQgdGhlIFBDUkUyX1VDUCBvcHRpb24sIHRoZSB3YXkgdGhhdCB0aGUgIGNoYXItCisgICAgICAgYWN0ZXIgIGVzY2FwZXMgIHdvcmsgIGlzIGNoYW5nZWQgc28gdGhhdCBVbmljb2RlIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8KKyAgICAgICBkZXRlcm1pbmUgd2hpY2ggY2hhcmFjdGVycyBtYXRjaC4gVGhlcmUgYXJlIG1vcmUgZGV0YWlscyBpbiB0aGUgc2VjdGlvbgorICAgICAgIG9uIGdlbmVyaWMgY2hhcmFjdGVyIHR5cGVzIGluIHRoZSBwY3JlMnBhdHRlcm4gZG9jdW1lbnRhdGlvbi4KKworICAgICAgIFNpbWlsYXJseSwgIGNoYXJhY3RlcnMgdGhhdCBtYXRjaCB0aGUgUE9TSVggbmFtZWQgY2hhcmFjdGVyIGNsYXNzZXMgYXJlCisgICAgICAgYWxsIGxvdy12YWx1ZWQgY2hhcmFjdGVycywgdW5sZXNzIHRoZSBQQ1JFMl9VQ1Agb3B0aW9uIGlzIHNldC4KKworICAgICAgIEhvd2V2ZXIsIHRoZSBzcGVjaWFsICBob3Jpem9udGFsICBhbmQgIHZlcnRpY2FsICB3aGl0ZSAgc3BhY2UgIG1hdGNoaW5nCisgICAgICAgZXNjYXBlcyAoXGgsIFxILCBcdiwgYW5kIFxWKSBkbyBtYXRjaCBhbGwgdGhlIGFwcHJvcHJpYXRlIFVuaWNvZGUgY2hhci0KKyAgICAgICBhY3RlcnMsIHdoZXRoZXIgb3Igbm90IFBDUkUyX1VDUCBpcyBzZXQuCisKKyAgICAgICBDYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nIGluIFVURiBtb2RlIG1ha2VzIHVzZSBvZiBVbmljb2RlICBwcm9wZXJ0aWVzLgorICAgICAgIEEgIGZldyAgVW5pY29kZSBjaGFyYWN0ZXJzIHN1Y2ggYXMgR3JlZWsgc2lnbWEgaGF2ZSBtb3JlIHRoYW4gdHdvIGNvZGUtCisgICAgICAgcG9pbnRzIHRoYXQgYXJlIGNhc2UtZXF1aXZhbGVudCwgYW5kIHRoZXNlIGFyZSB0cmVhdGVkIGFzIHN1Y2guCisKKworVkFMSURJVFkgT0YgVVRGIFNUUklOR1MKKworICAgICAgIFdoZW4gdGhlIFBDUkUyX1VURiBvcHRpb24gaXMgc2V0LCB0aGUgc3RyaW5ncyBwYXNzZWQgIGFzICBwYXR0ZXJucyAgYW5kCisgICAgICAgc3ViamVjdHMgYXJlIChieSBkZWZhdWx0KSBjaGVja2VkIGZvciB2YWxpZGl0eSBvbiBlbnRyeSB0byB0aGUgcmVsZXZhbnQKKyAgICAgICBmdW5jdGlvbnMuICBJZiBhbiBpbnZhbGlkIFVURiBzdHJpbmcgaXMgcGFzc2VkLCBhbiBuZWdhdGl2ZSBlcnJvciAgY29kZQorICAgICAgIGlzICByZXR1cm5lZC4gIFRoZSAgY29kZSAgdW5pdCBvZmZzZXQgdG8gdGhlIG9mZmVuZGluZyBjaGFyYWN0ZXIgY2FuIGJlCisgICAgICAgZXh0cmFjdGVkIGZyb20gdGhlIG1hdGNoIGRhdGEgYmxvY2sgYnkgIGNhbGxpbmcgIHBjcmUyX2dldF9zdGFydGNoYXIoKSwKKyAgICAgICB3aGljaCBpcyB1c2VkIGZvciB0aGlzIHB1cnBvc2UgYWZ0ZXIgYSBVVEYgZXJyb3IuCisKKyAgICAgICBVVEYtMTYgYW5kIFVURi0zMiBzdHJpbmdzIGNhbiBpbmRpY2F0ZSB0aGVpciBlbmRpYW5uZXNzIGJ5IHNwZWNpYWwgY29kZQorICAgICAgIGtub3dzIGFzIGEgYnl0ZS1vcmRlciBtYXJrIChCT00pLiBUaGUgUENSRTIgIGZ1bmN0aW9ucyAgZG8gIG5vdCAgaGFuZGxlCisgICAgICAgdGhpcywgZXhwZWN0aW5nIHN0cmluZ3MgdG8gYmUgaW4gaG9zdCBieXRlIG9yZGVyLgorCisgICAgICAgQSBVVEYgc3RyaW5nIGlzIGNoZWNrZWQgYmVmb3JlIGFueSBvdGhlciBwcm9jZXNzaW5nIHRha2VzIHBsYWNlLiBJbiB0aGUKKyAgICAgICBjYXNlIG9mIHBjcmUyX21hdGNoKCkgIGFuZCAgcGNyZTJfZGZhX21hdGNoKCkgIGNhbGxzICB3aXRoICBhICBub24temVybworICAgICAgIHN0YXJ0aW5nICBvZmZzZXQsIHRoZSBjaGVjayBpcyBhcHBsaWVkIG9ubHkgdG8gdGhhdCBwYXJ0IG9mIHRoZSBzdWJqZWN0CisgICAgICAgdGhhdCBjb3VsZCBiZSBpbnNwZWN0ZWQgZHVyaW5nIG1hdGNoaW5nLCBhbmQgdGhlcmUgaXMgYSBjaGVjayB0aGF0ICB0aGUKKyAgICAgICBzdGFydGluZyAgb2Zmc2V0IHBvaW50cyB0byB0aGUgZmlyc3QgY29kZSB1bml0IG9mIGEgY2hhcmFjdGVyIG9yIHRvIHRoZQorICAgICAgIGVuZCBvZiB0aGUgc3ViamVjdC4gSWYgdGhlcmUgYXJlIG5vIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucyBpbiAgdGhlICBwYXQtCisgICAgICAgdGVybiwgIHRoZSBjaGVjayBzdGFydHMgYXQgdGhlIHN0YXJ0aW5nIG9mZnNldC4gT3RoZXJ3aXNlLCBpdCBzdGFydHMgYXQKKyAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IGxvb2tiZWhpbmQgYmVmb3JlIHRoZSBzdGFydGluZyBvZmZzZXQsIG9yICBhdAorICAgICAgIHRoZSAgc3RhcnQgIG9mIHRoZSBzdWJqZWN0IGlmIHRoZXJlIGFyZSBub3QgdGhhdCBtYW55IGNoYXJhY3RlcnMgYmVmb3JlCisgICAgICAgdGhlIHN0YXJ0aW5nIG9mZnNldC4gTm90ZSB0aGF0IHRoZSBzZXF1ZW5jZXMgXGIgYW5kIFxCIGFyZSAgb25lLWNoYXJhYy0KKyAgICAgICB0ZXIgbG9va2JlaGluZHMuCisKKyAgICAgICBJbiAgYWRkaXRpb24gIHRvIGNoZWNraW5nIHRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZywgdGhlcmUgaXMgYSBjaGVjayB0bworICAgICAgIGVuc3VyZSB0aGF0IGFsbCBjb2RlIHBvaW50cyBsaWUgaW4gdGhlIHJhbmdlIFUrMCB0byBVKzEwRkZGRiwgZXhjbHVkaW5nCisgICAgICAgdGhlICBzdXJyb2dhdGUgIGFyZWEuIFRoZSBzby1jYWxsZWQgIm5vbi1jaGFyYWN0ZXIiIGNvZGUgcG9pbnRzIGFyZSBub3QKKyAgICAgICBleGNsdWRlZCBiZWNhdXNlIFVuaWNvZGUgY29ycmlnZW5kdW0gIzkgbWFrZXMgaXQgY2xlYXIgdGhhdCB0aGV5IHNob3VsZAorICAgICAgIG5vdCBiZS4KKworICAgICAgIENoYXJhY3RlcnMgIGluICB0aGUgIlN1cnJvZ2F0ZSBBcmVhIiBvZiBVbmljb2RlIGFyZSByZXNlcnZlZCBmb3IgdXNlIGJ5CisgICAgICAgVVRGLTE2LCB3aGVyZSB0aGV5IGFyZSB1c2VkIGluIHBhaXJzIHRvIGVuY29kZSBjb2RlIHBvaW50cyB3aXRoICB2YWx1ZXMKKyAgICAgICBncmVhdGVyICB0aGFuICAweEZGRkYuIFRoZSBjb2RlIHBvaW50cyB0aGF0IGFyZSBlbmNvZGVkIGJ5IFVURi0xNiBwYWlycworICAgICAgIGFyZSBhdmFpbGFibGUgaW5kZXBlbmRlbnRseSBpbiB0aGUgIFVURi04ICBhbmQgIFVURi0zMiAgZW5jb2RpbmdzLiAgKEluCisgICAgICAgb3RoZXIgIHdvcmRzLCAgdGhlICB3aG9sZSAgc3Vycm9nYXRlICB0aGluZyBpcyBhIGZ1ZGdlIGZvciBVVEYtMTYgd2hpY2gKKyAgICAgICB1bmZvcnR1bmF0ZWx5IG1lc3NlcyB1cCBVVEYtOCBhbmQgVVRGLTMyLikKKworICAgICAgIEluIHNvbWUgc2l0dWF0aW9ucywgeW91IG1heSBhbHJlYWR5IGtub3cgdGhhdCB5b3VyIHN0cmluZ3MgIGFyZSAgdmFsaWQsCisgICAgICAgYW5kICB0aGVyZWZvcmUgIHdhbnQgIHRvICBza2lwIHRoZXNlIGNoZWNrcyBpbiBvcmRlciB0byBpbXByb3ZlIHBlcmZvci0KKyAgICAgICBtYW5jZSwgZm9yIGV4YW1wbGUgaW4gdGhlIGNhc2Ugb2YgYSBsb25nIHN1YmplY3Qgc3RyaW5nIHRoYXQgIGlzICBiZWluZworICAgICAgIHNjYW5uZWQgIHJlcGVhdGVkbHkuICAgSWYgeW91IHNldCB0aGUgUENSRTJfTk9fVVRGX0NIRUNLIG9wdGlvbiBhdCBjb20tCisgICAgICAgcGlsZSB0aW1lIG9yIGF0IG1hdGNoIHRpbWUsIFBDUkUyIGFzc3VtZXMgdGhhdCB0aGUgcGF0dGVybiAgb3IgIHN1YmplY3QKKyAgICAgICBpdCBpcyBnaXZlbiAocmVzcGVjdGl2ZWx5KSBjb250YWlucyBvbmx5IHZhbGlkIFVURiBjb2RlIHVuaXQgc2VxdWVuY2VzLgorCisgICAgICAgUGFzc2luZyAgUENSRTJfTk9fVVRGX0NIRUNLICB0byBwY3JlMl9jb21waWxlKCkganVzdCBkaXNhYmxlcyB0aGUgY2hlY2sKKyAgICAgICBmb3IgdGhlIHBhdHRlcm47IGl0IGRvZXMgbm90IGFsc28gYXBwbHkgdG8gc3ViamVjdCBzdHJpbmdzLiBJZiB5b3Ugd2FudAorICAgICAgIHRvICBkaXNhYmxlIHRoZSBjaGVjayBmb3IgYSBzdWJqZWN0IHN0cmluZyB5b3UgbXVzdCBwYXNzIHRoaXMgb3B0aW9uIHRvCisgICAgICAgcGNyZTJfbWF0Y2goKSBvciBwY3JlMl9kZmFfbWF0Y2goKS4KKworICAgICAgIElmIHlvdSBwYXNzIGFuIGludmFsaWQgVVRGIHN0cmluZyB3aGVuIFBDUkUyX05PX1VURl9DSEVDSyBpcyAgc2V0LCAgdGhlCisgICAgICAgcmVzdWx0IGlzIHVuZGVmaW5lZCBhbmQgeW91ciBwcm9ncmFtIG1heSBjcmFzaCBvciBsb29wIGluZGVmaW5pdGVseS4KKworICAgRXJyb3JzIGluIFVURi04IHN0cmluZ3MKKworICAgICAgIFRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIGdpdmVuIGZvciBpbnZhbGlkIFVURi04IHN0cmluZ3M6CisKKyAgICAgICAgIFBDUkUyX0VSUk9SX1VURjhfRVJSMQorICAgICAgICAgUENSRTJfRVJST1JfVVRGOF9FUlIyCisgICAgICAgICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjMKKyAgICAgICAgIFBDUkUyX0VSUk9SX1VURjhfRVJSNAorICAgICAgICAgUENSRTJfRVJST1JfVVRGOF9FUlI1CisKKyAgICAgICBUaGUgIHN0cmluZyAgZW5kcyAgd2l0aCBhIHRydW5jYXRlZCBVVEYtOCBjaGFyYWN0ZXI7IHRoZSBjb2RlIHNwZWNpZmllcworICAgICAgIGhvdyBtYW55IGJ5dGVzIGFyZSBtaXNzaW5nICgxIHRvIDUpLiBBbHRob3VnaCBSRkMgMzYyOSByZXN0cmljdHMgIFVURi04CisgICAgICAgY2hhcmFjdGVycyAgdG8gIGJlICBubyBsb25nZXIgdGhhbiA0IGJ5dGVzLCB0aGUgZW5jb2Rpbmcgc2NoZW1lIChvcmlnaS0KKyAgICAgICBuYWxseSBkZWZpbmVkIGJ5IFJGQyAyMjc5KSBhbGxvd3MgZm9yICB1cCAgdG8gIDYgIGJ5dGVzLCAgYW5kICB0aGlzICBpcworICAgICAgIGNoZWNrZWQgZmlyc3Q7IGhlbmNlIHRoZSBwb3NzaWJpbGl0eSBvZiA0IG9yIDUgbWlzc2luZyBieXRlcy4KKworICAgICAgICAgUENSRTJfRVJST1JfVVRGOF9FUlI2CisgICAgICAgICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjcKKyAgICAgICAgIFBDUkUyX0VSUk9SX1VURjhfRVJSOAorICAgICAgICAgUENSRTJfRVJST1JfVVRGOF9FUlI5CisgICAgICAgICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjEwCisKKyAgICAgICBUaGUgdHdvIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgMm5kLCAzcmQsIDR0aCwgNXRoLCBvciA2dGggYnl0ZSBvZgorICAgICAgIHRoZSBjaGFyYWN0ZXIgZG8gbm90IGhhdmUgdGhlIGJpbmFyeSB2YWx1ZSAwYjEwICh0aGF0ICBpcywgIGVpdGhlciAgdGhlCisgICAgICAgbW9zdCBzaWduaWZpY2FudCBiaXQgaXMgMCwgb3IgdGhlIG5leHQgYml0IGlzIDEpLgorCisgICAgICAgICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjExCisgICAgICAgICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjEyCisKKyAgICAgICBBICBjaGFyYWN0ZXIgdGhhdCBpcyB2YWxpZCBieSB0aGUgUkZDIDIyNzkgcnVsZXMgaXMgZWl0aGVyIDUgb3IgNiBieXRlcworICAgICAgIGxvbmc7IHRoZXNlIGNvZGUgcG9pbnRzIGFyZSBleGNsdWRlZCBieSBSRkMgMzYyOS4KKworICAgICAgICAgUENSRTJfRVJST1JfVVRGOF9FUlIxMworCisgICAgICAgQSA0LWJ5dGUgY2hhcmFjdGVyIGhhcyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAweDEwZmZmOyB0aGVzZSBjb2RlICBwb2ludHMKKyAgICAgICBhcmUgZXhjbHVkZWQgYnkgUkZDIDM2MjkuCisKKyAgICAgICAgIFBDUkUyX0VSUk9SX1VURjhfRVJSMTQKKworICAgICAgIEEgIDMtYnl0ZSAgY2hhcmFjdGVyICBoYXMgIGEgIHZhbHVlIGluIHRoZSByYW5nZSAweGQ4MDAgdG8gMHhkZmZmOyB0aGlzCisgICAgICAgcmFuZ2Ugb2YgY29kZSBwb2ludHMgYXJlIHJlc2VydmVkIGJ5IFJGQyAzNjI5IGZvciB1c2Ugd2l0aCBVVEYtMTYsICBhbmQKKyAgICAgICBzbyBhcmUgZXhjbHVkZWQgZnJvbSBVVEYtOC4KKworICAgICAgICAgUENSRTJfRVJST1JfVVRGOF9FUlIxNQorICAgICAgICAgUENSRTJfRVJST1JfVVRGOF9FUlIxNgorICAgICAgICAgUENSRTJfRVJST1JfVVRGOF9FUlIxNworICAgICAgICAgUENSRTJfRVJST1JfVVRGOF9FUlIxOAorICAgICAgICAgUENSRTJfRVJST1JfVVRGOF9FUlIxOQorCisgICAgICAgQSAgMi0sIDMtLCA0LSwgNS0sIG9yIDYtYnl0ZSBjaGFyYWN0ZXIgaXMgIm92ZXJsb25nIiwgdGhhdCBpcywgaXQgY29kZXMKKyAgICAgICBmb3IgYSB2YWx1ZSB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBieSBmZXdlciBieXRlcywgd2hpY2ggIGlzICBpbnZhbGlkLgorICAgICAgIEZvciAgZXhhbXBsZSwgIHRoZSB0d28gYnl0ZXMgMHhjMCwgMHhhZSBnaXZlIHRoZSB2YWx1ZSAweDJlLCB3aG9zZSBjb3ItCisgICAgICAgcmVjdCBjb2RpbmcgdXNlcyBqdXN0IG9uZSBieXRlLgorCisgICAgICAgICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjIwCisKKyAgICAgICBUaGUgdHdvIG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUgZmlyc3QgYnl0ZSBvZiBhIGNoYXJhY3RlciBoYXZlIHRoZQorICAgICAgIGJpbmFyeSAgdmFsdWUgMGIxMCAodGhhdCBpcywgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGlzIDEgYW5kIHRoZSBzZWMtCisgICAgICAgb25kIGlzIDApLiBTdWNoIGEgYnl0ZSBjYW4gb25seSB2YWxpZGx5IG9jY3VyIGFzIHRoZSBzZWNvbmQgIG9yICBzdWJzZS0KKyAgICAgICBxdWVudCBieXRlIG9mIGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuCisKKyAgICAgICAgIFBDUkUyX0VSUk9SX1VURjhfRVJSMjEKKworICAgICAgIFRoZSAgZmlyc3QgYnl0ZSBvZiBhIGNoYXJhY3RlciBoYXMgdGhlIHZhbHVlIDB4ZmUgb3IgMHhmZi4gVGhlc2UgdmFsdWVzCisgICAgICAgY2FuIG5ldmVyIG9jY3VyIGluIGEgdmFsaWQgVVRGLTggc3RyaW5nLgorCisgICBFcnJvcnMgaW4gVVRGLTE2IHN0cmluZ3MKKworICAgICAgIFRoZSBmb2xsb3dpbmcgIG5lZ2F0aXZlICBlcnJvciAgY29kZXMgIGFyZSAgZ2l2ZW4gIGZvciAgaW52YWxpZCAgVVRGLTE2CisgICAgICAgc3RyaW5nczoKKworICAgICAgICAgUENSRV9VVEYxNl9FUlIxICBNaXNzaW5nIGxvdyBzdXJyb2dhdGUgYXQgZW5kIG9mIHN0cmluZworICAgICAgICAgUENSRV9VVEYxNl9FUlIyICBJbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9sbG93cyBoaWdoIHN1cnJvZ2F0ZQorICAgICAgICAgUENSRV9VVEYxNl9FUlIzICBJc29sYXRlZCBsb3cgc3Vycm9nYXRlCisKKworICAgRXJyb3JzIGluIFVURi0zMiBzdHJpbmdzCisKKyAgICAgICBUaGUgIGZvbGxvd2luZyAgbmVnYXRpdmUgIGVycm9yICBjb2RlcyAgYXJlICBnaXZlbiAgZm9yICBpbnZhbGlkIFVURi0zMgorICAgICAgIHN0cmluZ3M6CisKKyAgICAgICAgIFBDUkVfVVRGMzJfRVJSMSAgU3Vycm9nYXRlIGNoYXJhY3RlciAocmFuZ2UgZnJvbSAweGQ4MDAgdG8gMHhkZmZmKQorICAgICAgICAgUENSRV9VVEYzMl9FUlIyICBDb2RlIHBvaW50IGlzIGdyZWF0ZXIgdGhhbiAweDEwZmZmZgorCisKK0FVVEhPUgorCisgICAgICAgUGhpbGlwIEhhemVsCisgICAgICAgVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorICAgICAgIENhbWJyaWRnZSwgRW5nbGFuZC4KKworCitSRVZJU0lPTgorCisgICAgICAgTGFzdCB1cGRhdGVkOiAxNiBPY3RvYmVyIDIwMTUKKyAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9jYWxsb3V0X2VudW1lcmF0ZS4zIGIvZGlzdDIvZG9jL3BjcmUyX2NhbGxvdXRfZW51bWVyYXRlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3M2JiNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9jYWxsb3V0X2VudW1lcmF0ZS4zCkBAIC0wLDAgKzEsNTAgQEAKKy5USCBQQ1JFMl9DT01QSUxFIDMgIjIzIE1hcmNoIDIwMTUiICJQQ1JFMiAxMC4yMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZShjb25zdCBwY3JlMl9jb2RlICpcZkljb2RlXGZQLAorLkIgIiAgaW50ICgqXGZJY2FsbGJhY2tcZlApKHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrICosIHZvaWQgKiksIgorLkIgIiAgdm9pZCAqXGZJY2FsbG91dF9kYXRhXGZQKTsiCisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gc2NhbnMgYSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGNhbGxzIHRoZSBcZkljYWxsYmFjaygpXGZQCitmdW5jdGlvbiBmb3IgZWFjaCBjYWxsb3V0IHdpdGhpbiB0aGUgcGF0dGVybi4gVGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyB6ZXJvCitmb3Igc3VjY2VzcyBhbmQgbm9uLXplcm8gb3RoZXJ3aXNlLiBUaGUgYXJndW1lbnRzIGFyZToKKy5zcAorICBcZkljb2RlXGZQICAgICAgICAgICBQb2ludHMgdG8gdGhlIGNvbXBpbGVkIHBhdHRlcm4KKyAgXGZJY2FsbGJhY2tcZlAgICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgIFxmSWNhbGxvdXRfZGF0YVxmUCAgIFVzZXIgZGF0YSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKy5zcAorVGhlIFxmSWNhbGxiYWNrKClcZlAgZnVuY3Rpb24gaXMgcGFzc2VkIGEgcG9pbnRlciB0byBhIGRhdGEgYmxvY2sgY29udGFpbmluZwordGhlIGZvbGxvd2luZyBmaWVsZHM6Cisuc3AKKyAgXGZJdmVyc2lvblxmUCAgICAgICAgICAgICAgICBCbG9jayB2ZXJzaW9uIG51bWJlcgorICBcZklwYXR0ZXJuX3Bvc2l0aW9uXGZQICAgICAgIE9mZnNldCB0byBuZXh0IGl0ZW0gaW4gcGF0dGVybgorICBcZkluZXh0X2l0ZW1fbGVuZ3RoXGZQICAgICAgIExlbmd0aCBvZiBuZXh0IGl0ZW0gaW4gcGF0dGVybgorICBcZkljYWxsb3V0X251bWJlclxmUCAgICAgICAgIE51bWJlciBmb3IgbnVtYmVyZWQgY2FsbG91dHMKKyAgXGZJY2FsbG91dF9zdHJpbmdfb2Zmc2V0XGZQICBPZmZzZXQgdG8gc3RyaW5nIHdpdGhpbiBwYXR0ZXJuCisgIFxmSWNhbGxvdXRfc3RyaW5nX2xlbmd0aFxmUCAgTGVuZ3RoIG9mIGNhbGxvdXQgc3RyaW5nCisgIFxmSWNhbGxvdXRfc3RyaW5nXGZQICAgICAgICAgUG9pbnRzIHRvIGNhbGxvdXQgc3RyaW5nIG9yIGlzIE5VTEwKKy5zcAorVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgY2FsbG91dCBkYXRhIHRoYXQgd2FzIHBhc3NlZCB0bworXGZCcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUoKVxmUC4gVGhlIFxmQmNhbGxiYWNrKClcZlAgZnVuY3Rpb24gbXVzdCByZXR1cm4gemVybworZm9yIHN1Y2Nlc3MuIEFueSBvdGhlciB2YWx1ZSBjYXVzZXMgdGhlIHBhdHRlcm4gc2NhbiB0byBzdG9wLCB3aXRoIHRoZSB2YWx1ZQorYmVpbmcgcGFzc2VkIGJhY2sgYXMgdGhlIHJlc3VsdCBvZiBcZkJwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSgpXGZQLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9jb2RlX2ZyZWUuMyBiL2Rpc3QyL2RvYy9wY3JlMl9jb2RlX2ZyZWUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTI3MDgxCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX2NvZGVfZnJlZS4zCkBAIC0wLDAgKzEsMjcgQEAKKy5USCBQQ1JFMl9DT0RFX0ZSRUUgMyAiMjkgSnVseSAyMDE1IiAiUENSRTIgMTAuMjEiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiB2b2lkIHBjcmUyX2NvZGVfZnJlZShwY3JlMl9jb2RlICpcZkljb2RlXGZQKTsKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgbWVtb3J5IHVzZWQgZm9yIGEgY29tcGlsZWQgcGF0dGVybiwgaW5jbHVkaW5nIGFueQorbWVtb3J5IHVzZWQgYnkgdGhlIEpJVCBjb21waWxlci4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfY29tcGlsZS4zIGIvZGlzdDIvZG9jL3BjcmUyX2NvbXBpbGUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTBkY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX2NvbXBpbGUuMwpAQCAtMCwwICsxLDc4IEBACisuVEggUENSRTJfQ09NUElMRSAzICIyMiBBcHJpbCAyMDE1IiAiUENSRTIgMTAuMjAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBwY3JlMl9jb2RlICpwY3JlMl9jb21waWxlKFBDUkUyX1NQVFIgXGZJcGF0dGVyblxmUCwgUENSRTJfU0laRSBcZklsZW5ndGhcZlAsCisuQiAiICB1aW50MzJfdCBcZklvcHRpb25zXGZQLCBpbnQgKlxmSWVycm9yY29kZVxmUCwgUENSRTJfU0laRSAqXGZJZXJyb3JvZmZzZXQsXGZQIgorLkIgIiAgcGNyZTJfY29tcGlsZV9jb250ZXh0ICpcZkljY29udGV4dFxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIGNvbXBpbGVzIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gaW50byBhbiBpbnRlcm5hbCBmb3JtLiBJdHMKK2FyZ3VtZW50cyBhcmU6Cisuc3AKKyAgXGZJcGF0dGVyblxmUCAgICAgICBBIHN0cmluZyBjb250YWluaW5nIGV4cHJlc3Npb24gdG8gYmUgY29tcGlsZWQKKyAgXGZJbGVuZ3RoXGZQICAgICAgICBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgb3IgUENSRTJfWkVST19URVJNSU5BVEVECisgIFxmSW9wdGlvbnNcZlAgICAgICAgT3B0aW9uIGJpdHMKKyAgXGZJZXJyb3Jjb2RlXGZQICAgICBXaGVyZSB0byBwdXQgYW4gZXJyb3IgY29kZQorICBcZkllcnJvZmZzZXRcZlAgICAgIFdoZXJlIHRvIHB1dCBhbiBlcnJvciBvZmZzZXQKKyAgXGZJY2NvbnRleHRcZlAgICAgICBQb2ludGVyIHRvIGEgY29tcGlsZSBjb250ZXh0IG9yIE5VTEwKKy5zcAorVGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIGFuZCBhbnkgZXJyb3Igb2Zmc2V0IHRoYXQgaXMgcmV0dXJuZWQgYXJlIGluIGNvZGUKK3VuaXRzLCBub3QgY2hhcmFjdGVycy4gQSBjb21waWxlIGNvbnRleHQgaXMgbmVlZGVkIG9ubHkgaWYgeW91IHdhbnQgdG8gY2hhbmdlCisuc3AKKyAgV2hhdCBcZVIgbWF0Y2hlcyAoVW5pY29kZSBuZXdsaW5lcyBvciBDUiwgTEYsIENSTEYgb25seSkKKyAgUENSRTIncyBjaGFyYWN0ZXIgdGFibGVzCisgIFRoZSBuZXdsaW5lIGNoYXJhY3RlciBzZXF1ZW5jZQorICBUaGUgY29tcGlsZSB0aW1lIG5lc3RlZCBwYXJlbnRoZXNlcyBsaW1pdAorLnNwCitvciBwcm92aWRlIGFuIGV4dGVybmFsIGZ1bmN0aW9uIGZvciBzdGFjayBzaXplIGNoZWNraW5nLiBUaGUgb3B0aW9uIGJpdHMgYXJlOgorLnNwCisgIFBDUkUyX0FOQ0hPUkVEICAgICAgICAgICBGb3JjZSBwYXR0ZXJuIGFuY2hvcmluZworICBQQ1JFMl9BTFRfQlNVWCAgICAgICAgICAgQWx0ZXJuYXRpdmUgaGFuZGxpbmcgb2YgXGV1LCBcZVUsIGFuZCBcZXgKKyAgUENSRTJfQUxUX0NJUkNVTUZMRVggICAgIEFsdGVybmF0aXZlIGhhbmRsaW5nIG9mIF4gaW4gbXVsdGlsaW5lIG1vZGUKKyAgUENSRTJfQVVUT19DQUxMT1VUICAgICAgIENvbXBpbGUgYXV0b21hdGljIGNhbGxvdXRzCisgIFBDUkUyX0NBU0VMRVNTICAgICAgICAgICBEbyBjYXNlbGVzcyBtYXRjaGluZworICBQQ1JFMl9ET0xMQVJfRU5ET05MWSAgICAgJCBub3QgdG8gbWF0Y2ggbmV3bGluZSBhdCBlbmQKKyAgUENSRTJfRE9UQUxMICAgICAgICAgICAgIC4gbWF0Y2hlcyBhbnl0aGluZyBpbmNsdWRpbmcgTkwKKyAgUENSRTJfRFVQTkFNRVMgICAgICAgICAgIEFsbG93IGR1cGxpY2F0ZSBuYW1lcyBmb3Igc3VicGF0dGVybnMKKyAgUENSRTJfRVhURU5ERUQgICAgICAgICAgIElnbm9yZSB3aGl0ZSBzcGFjZSBhbmQgIyBjb21tZW50cworICBQQ1JFMl9GSVJTVExJTkUgICAgICAgICAgRm9yY2UgbWF0Y2hpbmcgdG8gYmUgYmVmb3JlIG5ld2xpbmUKKyAgUENSRTJfTUFUQ0hfVU5TRVRfQkFDS1JFRiAgTWF0Y2ggdW5zZXQgYmFjayByZWZlcmVuY2VzCisgIFBDUkUyX01VTFRJTElORSAgICAgICAgICBeIGFuZCAkIG1hdGNoIG5ld2xpbmVzIHdpdGhpbiBkYXRhCisgIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DICBMb2NrIG91dCB0aGUgdXNlIG9mIFxlQyBpbiBwYXR0ZXJucworICBQQ1JFMl9ORVZFUl9VQ1AgICAgICAgICAgTG9jayBvdXQgUENSRTJfVUNQLCBlLmcuIHZpYSAoKlVDUCkKKyAgUENSRTJfTkVWRVJfVVRGICAgICAgICAgIExvY2sgb3V0IFBDUkUyX1VURiwgZS5nLiB2aWEgKCpVVEYpCisgIFBDUkUyX05PX0FVVE9fQ0FQVFVSRSAgICBEaXNhYmxlIG51bWJlcmVkIGNhcHR1cmluZyBwYXJlbi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVzZXMgKG5hbWVkIG9uZXMgYXZhaWxhYmxlKQorICBQQ1JFMl9OT19BVVRPX1BPU1NFU1MgICAgRGlzYWJsZSBhdXRvLXBvc3Nlc3NpZmljYXRpb24KKyAgUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IgIERpc2FibGUgYXV0b21hdGljIGFuY2hvcmluZyBmb3IgLioKKyAgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUgIERpc2FibGUgbWF0Y2gtdGltZSBzdGFydCBvcHRpbWl6YXRpb25zCisgIFBDUkUyX05PX1VURl9DSEVDSyAgICAgICBEbyBub3QgY2hlY2sgdGhlIHBhdHRlcm4gZm9yIFVURiB2YWxpZGl0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSByZWxldmFudCBpZiBQQ1JFMl9VVEYgaXMgc2V0KQorICBQQ1JFMl9VQ1AgICAgICAgICAgICAgICAgVXNlIFVuaWNvZGUgcHJvcGVydGllcyBmb3IgXGVkLCBcZXcsIGV0Yy4KKyAgUENSRTJfVU5HUkVFRFkgICAgICAgICAgIEludmVydCBncmVlZGluZXNzIG9mIHF1YW50aWZpZXJzCisgIFBDUkUyX1VURiAgICAgICAgICAgICAgICBUcmVhdCBwYXR0ZXJuIGFuZCBzdWJqZWN0cyBhcyBVVEYgc3RyaW5ncworLnNwCitQQ1JFMiBtdXN0IGJlIGJ1aWx0IHdpdGggVW5pY29kZSBzdXBwb3J0IGluIG9yZGVyIHRvIHVzZSBQQ1JFMl9VVEYsIFBDUkUyX1VDUAorYW5kIHJlbGF0ZWQgb3B0aW9ucy4KKy5QCitUaGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIGEgcG9pbnRlciB0byBhIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdAorY29udGFpbnMgdGhlIGNvbXBpbGVkIHBhdHRlcm4sIG9yIE5VTEwgaWYgYW4gZXJyb3Igd2FzIGRldGVjdGVkLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9jb21waWxlX2NvbnRleHRfY29weS4zIGIvZGlzdDIvZG9jL3BjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVhMTE4NwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9jb21waWxlX2NvbnRleHRfY29weS4zCkBAIC0wLDAgKzEsMjkgQEAKKy5USCBQQ1JFMl9DT01QSUxFX0NPTlRFWFRfQ09QWSAzICIyMiBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqcGNyZTJfY29tcGlsZV9jb250ZXh0X2NvcHkoCisuQiAiICBwY3JlMl9jb21waWxlX2NvbnRleHQgKlxmSWNjb250ZXh0XGZQKTsiCisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gbWFrZXMgYSBuZXcgY29weSBvZiBhIGNvbXBpbGUgY29udGV4dCwgdXNpbmcgdGhlIG1lbW9yeQorYWxsb2NhdGlvbiBmdW5jdGlvbiB0aGF0IHdhcyB1c2VkIGZvciB0aGUgb3JpZ2luYWwgY29udGV4dC4gVGhlIHJlc3VsdCBpcyBOVUxMCitpZiB0aGUgbWVtb3J5IGNhbm5vdCBiZSBvYnRhaW5lZC4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZS4zIGIvZGlzdDIvZG9jL3BjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDUzZGY0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUuMwpAQCAtMCwwICsxLDMwIEBACisuVEggUENSRTJfQ09NUElMRV9DT05URVhUX0NSRUFURSAzICIyMiBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZSgKKy5CICIgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqXGZJZ2NvbnRleHRcZlApOyIKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIG5ldyBjb21waWxlIGNvbnRleHQuIElmIGl0cyBhcmd1bWVudCBpcworTlVMTCwgXGZCbWFsbG9jKClcZlAgaXMgdXNlZCB0byBnZXQgdGhlIG5lY2Vzc2FyeSBtZW1vcnk7IG90aGVyd2lzZSB0aGUgbWVtb3J5CithbGxvY2F0aW9uIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZ2VuZXJhbCBjb250ZXh0IGlzIHVzZWQuIFRoZSByZXN1bHQgaXMgTlVMTCBpZgordGhlIG1lbW9yeSBjb3VsZCBub3QgYmUgb2J0YWluZWQuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlLjMgYi9kaXN0Mi9kb2MvcGNyZTJfY29tcGlsZV9jb250ZXh0X2ZyZWUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzZkNzg3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlLjMKQEAgLTAsMCArMSwyOCBAQAorLlRIIFBDUkUyX0NPTVBJTEVfQ09OVEVYVF9GUkVFIDMgIjIyIE9jdG9iZXIgMjAxNCIgIlBDUkUyIDEwLjAwIgorLlNIIE5BTUUKK1BDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorLlNIIFNZTk9QU0lTCisucnMKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUyLmg+CisuUFAKKy5uZgorLkIgdm9pZCBwY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZShwY3JlMl9jb21waWxlX2NvbnRleHQgKlxmSWNjb250ZXh0XGZQKTsKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgbWVtb3J5IG9jY3VwaWVkIGJ5IGEgY29tcGlsZSBjb250ZXh0LCB1c2luZyB0aGUgbWVtb3J5CitmcmVlaW5nIGZ1bmN0aW9uIGZyb20gdGhlIGdlbmVyYWwgY29udGV4dCB3aXRoIHdoaWNoIGl0IHdhcyBjcmVhdGVkLCBvcgorXGZCZnJlZSgpXGZQIGlmIHRoYXQgd2FzIG5vdCBzZXQuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX2NvbmZpZy4zIGIvZGlzdDIvZG9jL3BjcmUyX2NvbmZpZy4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMjljZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfY29uZmlnLjMKQEAgLTAsMCArMSw2OSBAQAorLlRIIFBDUkUyX0NPTkZJRyAzICIyMCBBcHJpbCAyMDE0IiAiUENSRTIgMTAuMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisuU00KKy5CIGludCBwY3JlMl9jb25maWcodWludDMyX3QgXGZJd2hhdFxmUCwgdm9pZCAqXGZJd2hlcmVcZlApOworLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYSBjbGllbnQgcHJvZ3JhbSB0byBmaW5kIG91dCB3aGljaCBvcHRpb25hbAorZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgdmVyc2lvbiBvZiB0aGUgUENSRTIgbGlicmFyeSBpdCBpcyB1c2luZy4gVGhlCithcmd1bWVudHMgYXJlIGFzIGZvbGxvd3M6Cisuc3AKKyAgXGZJd2hhdFxmUCAgICAgQSBjb2RlIHNwZWNpZnlpbmcgd2hhdCBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZAorICBcZkl3aGVyZVxmUCAgICBQb2ludHMgdG8gd2hlcmUgdG8gcHV0IHRoZSBpbmZvcm1hdGlvbgorLnNwCitJZiBcZkl3aGVyZVxmUCBpcyBOVUxMLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgYW1vdW50IG9mIG1lbW9yeSBuZWVkZWQgZm9yCit0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLiBXaGVuIHRoZSBpbmZvcm1hdGlvbiBpcyBhIHN0cmluZywgdGhlIHZhbHVlIGlzIGluCitjb2RlIHVuaXRzOyBmb3Igb3RoZXIgdHlwZXMgb2YgZGF0YSBpdCBpcyBpbiBieXRlcy4KKy5QCitJZiBcZkJ3aGVyZVxmUCBpcyBub3QgTlVMTCwgZm9yIFBDUkUyX0NPTkZJR19KSVRUQVJHRVQsCitQQ1JFMl9DT05GSUdfVU5JQ09ERV9WRVJTSU9OLCBhbmQgUENSRTJfQ09ORklHX1ZFUlNJT04gaXQgbXVzdCBwb2ludCB0byBhCitidWZmZXIgdGhhdCBpcyBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgc3RyaW5nLiBGb3IgYWxsIG90aGVyIGNvZGVzIGl0IG11c3QKK3BvaW50IHRvIGEgdWludDMyX3QgaW50ZWdlciB2YXJpYWJsZS4gVGhlIGF2YWlsYWJsZSBjb2RlcyBhcmU6Cisuc3AKKyAgUENSRTJfQ09ORklHX0JTUiAgICAgICAgICAgICBJbmRpY2F0ZXMgd2hhdCBcZVIgbWF0Y2hlcyBieSBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfQlNSX1VOSUNPREUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX0JTUl9BTllDUkxGCisgIFBDUkUyX0NPTkZJR19KSVQgICAgICAgICAgICAgQXZhaWxhYmlsaXR5IG9mIGp1c3QtaW4tdGltZSBjb21waWxlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0ICgxPXllcyAwPW5vKQorICBQQ1JFMl9DT05GSUdfSklUVEFSR0VUICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHRoZSB0YXJnZXQgYXJjaGktCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWN0dXJlIGZvciB0aGUgSklUIGNvbXBpbGVyCisgIFBDUkUyX0NPTkZJR19MSU5LU0laRSAgICAgICAgQ29uZmlndXJlZCBpbnRlcm5hbCBsaW5rIHNpemUgKDIsIDMsIDQpCisgIFBDUkUyX0NPTkZJR19NQVRDSExJTUlUICAgICAgRGVmYXVsdCBpbnRlcm5hbCByZXNvdXJjZSBsaW1pdAorICBQQ1JFMl9DT05GSUdfTkVXTElORSAgICAgICAgIENvZGUgZm9yIHRoZSBkZWZhdWx0IG5ld2xpbmUgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9ORVdMSU5FX0NSCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9ORVdMSU5FX0xGCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9ORVdMSU5FX0NSTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX05FV0xJTkVfQU5ZCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9ORVdMSU5FX0FOWUNSTEYKKyAgUENSRTJfQ09ORklHX1BBUkVOU0xJTUlUICAgICBEZWZhdWx0IHBhcmVudGhlc2VzIG5lc3RpbmcgbGltaXQKKyAgUENSRTJfQ09ORklHX1JFQ1VSU0lPTkxJTUlUICBJbnRlcm5hbCByZWN1cnNpb24gZGVwdGggbGltaXQKKyAgUENSRTJfQ09ORklHX1NUQUNLUkVDVVJTRSAgICBSZWN1cnNpb24gaW1wbGVtZW50YXRpb24gKDE9c3RhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA9aGVhcCkKKyAgUENSRTJfQ09ORklHX1VOSUNPREUgICAgICAgICBBdmFpbGFiaWxpdHkgb2YgVW5pY29kZSBzdXBwb3J0ICgxPXllcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMD1ubykKKyAgUENSRTJfQ09ORklHX1VOSUNPREVfVkVSU0lPTiBUaGUgVW5pY29kZSB2ZXJzaW9uIChhIHN0cmluZykKKyAgUENSRTJfQ09ORklHX1ZFUlNJT04gICAgICAgICBUaGUgUENSRTIgdmVyc2lvbiAoYSBzdHJpbmcpCisuc3AKK1RoZSBmdW5jdGlvbiB5aWVsZHMgYSBub24tbmVnYXRpdmUgdmFsdWUgb24gc3VjY2VzcyBvciB0aGUgbmVnYXRpdmUgdmFsdWUKK1BDUkUyX0VSUk9SX0JBRE9QVElPTiBvdGhlcndpc2UuIFRoaXMgaXMgYWxzbyB0aGUgcmVzdWx0IGZvciB0aGUKK1BDUkUyX0NPTkZJR19KSVRUQVJHRVQgY29kZSBpZiBKSVQgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLiBXaGVuIGEgc3RyaW5nIGlzCityZXF1ZXN0ZWQsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgY29kZSB1bml0cyB1c2VkLCBpbmNsdWRpbmcgdGhlCit0ZXJtaW5hdGluZyB6ZXJvLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9kZmFfbWF0Y2guMyBiL2Rpc3QyL2RvYy9wY3JlMl9kZmFfbWF0Y2guMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDVkYTBkCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX2RmYV9tYXRjaC4zCkBAIC0wLDAgKzEsNzIgQEAKKy5USCBQQ1JFMl9ERkFfTUFUQ0ggMyAiMTIgTWF5IDIwMTMiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9kZmFfbWF0Y2goY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCwgUENSRTJfU1BUUiBcZklzdWJqZWN0XGZQLAorLkIgIiAgUENSRTJfU0laRSBcZklsZW5ndGhcZlAsIFBDUkUyX1NJWkUgXGZJc3RhcnRvZmZzZXRcZlAsIgorLkIgIiAgdWludDMyX3QgXGZJb3B0aW9uc1xmUCwgcGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCwiCisuQiAiICBwY3JlMl9tYXRjaF9jb250ZXh0ICpcZkltY29udGV4dFxmUCwiCisuQiAiICBpbnQgKlxmSXdvcmtzcGFjZVxmUCwgUENSRTJfU0laRSBcZkl3c2NvdW50XGZQKTsiCisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gbWF0Y2hlcyBhIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBhZ2FpbnN0IGEgZ2l2ZW4gc3ViamVjdAorc3RyaW5nLCB1c2luZyBhbiBhbHRlcm5hdGl2ZSBtYXRjaGluZyBhbGdvcml0aG0gdGhhdCBzY2FucyB0aGUgc3ViamVjdCBzdHJpbmcKK2p1c3Qgb25jZSAoXGZJbm90XGZQIFBlcmwtY29tcGF0aWJsZSkuIChUaGUgUGVybC1jb21wYXRpYmxlIG1hdGNoaW5nIGZ1bmN0aW9uCitpcyBcZkJwY3JlMl9tYXRjaCgpXGZQLikgVGhlIGFyZ3VtZW50cyBmb3IgdGhpcyBmdW5jdGlvbiBhcmU6Cisuc3AKKyAgXGZJY29kZVxmUCAgICAgICAgIFBvaW50cyB0byB0aGUgY29tcGlsZWQgcGF0dGVybgorICBcZklzdWJqZWN0XGZQICAgICAgUG9pbnRzIHRvIHRoZSBzdWJqZWN0IHN0cmluZworICBcZklsZW5ndGhcZlAgICAgICAgTGVuZ3RoIG9mIHRoZSBzdWJqZWN0IHN0cmluZworICBcZklzdGFydG9mZnNldFxmUCAgT2Zmc2V0IGluIHRoZSBzdWJqZWN0IGF0IHdoaWNoIHRvIHN0YXJ0IG1hdGNoaW5nCisgIFxmSW9wdGlvbnNcZlAgICAgICBPcHRpb24gYml0cworICBcZkltYXRjaF9kYXRhXGZQICAgUG9pbnRzIHRvIGEgbWF0Y2ggZGF0YSBibG9jaywgZm9yIHJlc3VsdHMKKyAgXGZJbWNvbnRleHRcZlAgICAgIFBvaW50cyB0byBhIG1hdGNoIGNvbnRleHQsIG9yIGlzIE5VTEwKKyAgXGZJd29ya3NwYWNlXGZQICAgIFBvaW50cyB0byBhIHZlY3RvciBvZiBpbnRzIHVzZWQgYXMgd29ya2luZyBzcGFjZQorICBcZkl3c2NvdW50XGZQICAgICAgTnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB2ZWN0b3IKKy5zcAorRm9yIFxmQnBjcmUyX2RmYV9tYXRjaCgpXGZQLCBhIG1hdGNoIGNvbnRleHQgaXMgbmVlZGVkIG9ubHkgaWYgeW91IHdhbnQgdG8gc2V0Cit1cCBhIGNhbGxvdXQgZnVuY3Rpb24uIFRoZSBcZklsZW5ndGhcZlAgYW5kIFxmSXN0YXJ0b2Zmc2V0XGZQIHZhbHVlcyBhcmUgY29kZQordW5pdHMsIG5vdCBjaGFyYWN0ZXJzLiBUaGUgb3B0aW9ucyBhcmU6Cisuc3AKKyAgUENSRTJfQU5DSE9SRUQgICAgICAgICAgTWF0Y2ggb25seSBhdCB0aGUgZmlyc3QgcG9zaXRpb24KKyAgUENSRTJfTk9UQk9MICAgICAgICAgICAgU3ViamVjdCBpcyBub3QgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKKyAgUENSRTJfTk9URU9MICAgICAgICAgICAgU3ViamVjdCBpcyBub3QgdGhlIGVuZCBvZiBhIGxpbmUKKyAgUENSRTJfTk9URU1QVFkgICAgICAgICAgQW4gZW1wdHkgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIG1hdGNoCisgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQgIEFuIGVtcHR5IHN0cmluZyBhdCB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vdCBhIHZhbGlkIG1hdGNoCisgIFBDUkUyX05PX1VURl9DSEVDSyAgICAgIERvIG5vdCBjaGVjayB0aGUgc3ViamVjdCBmb3IgVVRGCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGl0eSAob25seSByZWxldmFudCBpZiBQQ1JFMl9VVEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcyBzZXQgYXQgY29tcGlsZSB0aW1lKQorICBQQ1JFMl9QQVJUSUFMX1NPRlQgICAgICBSZXR1cm4gUENSRTJfRVJST1JfUEFSVElBTCBmb3IgYSBwYXJ0aWFsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggaWYgbm8gZnVsbCBtYXRjaGVzIGFyZSBmb3VuZAorICBQQ1JFMl9QQVJUSUFMX0hBUkQgICAgICBSZXR1cm4gUENSRTJfRVJST1JfUEFSVElBTCBmb3IgYSBwYXJ0aWFsIG1hdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVuIGlmIHRoZXJlIGlzIGEgZnVsbCBtYXRjaCBhcyB3ZWxsCisgIFBDUkUyX0RGQV9SRVNUQVJUICAgICAgIFJlc3RhcnQgYWZ0ZXIgYSBwYXJ0aWFsIG1hdGNoCisgIFBDUkUyX0RGQV9TSE9SVEVTVCAgICAgIFJldHVybiBvbmx5IHRoZSBzaG9ydGVzdCBtYXRjaAorLnNwCitUaGVyZSBhcmUgcmVzdHJpY3Rpb25zIG9uIHdoYXQgbWF5IGFwcGVhciBpbiBhIHBhdHRlcm4gd2hlbiB1c2luZyB0aGlzIG1hdGNoaW5nCitmdW5jdGlvbi4gRGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJtYXRjaGluZ1xmUAorLlwiCitkb2N1bWVudGF0aW9uLiBGb3IgZGV0YWlscyBvZiBwYXJ0aWFsIG1hdGNoaW5nLCBzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwYXJ0aWFsXGZQCisuXCIKK3BhZ2UuIFRoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9nZW5lcmFsX2NvbnRleHRfY29weS4zIGIvZGlzdDIvZG9jL3BjcmUyX2dlbmVyYWxfY29udGV4dF9jb3B5LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM3ZTU2NQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9nZW5lcmFsX2NvbnRleHRfY29weS4zCkBAIC0wLDAgKzEsMzAgQEAKKy5USCBQQ1JFMl9HRU5FUkFMX0NPTlRFWFRfQ09QWSAzICIyMiBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHkoCisuQiAiICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKlxmSWdjb250ZXh0XGZQKTsiCisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gbWFrZXMgYSBuZXcgY29weSBvZiBhIGdlbmVyYWwgY29udGV4dCwgdXNpbmcgdGhlIG1lbW9yeQorYWxsb2NhdGlvbiBmdW5jdGlvbnMgaW4gdGhlIGNvbnRleHQsIGlmIHNldCwgdG8gZ2V0IHRoZSBuZWNlc3NhcnkgbWVtb3J5LgorT3RoZXJ3aXNlIFxmQm1hbGxvYygpXGZQIGlzIHVzZWQuIFRoZSByZXN1bHQgaXMgTlVMTCBpZiB0aGUgbWVtb3J5IGNhbm5vdCBiZQorb2J0YWluZWQuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX2dlbmVyYWxfY29udGV4dF9jcmVhdGUuMyBiL2Rpc3QyL2RvYy9wY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNlNmMxMAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlLjMKQEAgLTAsMCArMSwzMiBAQAorLlRIIFBDUkUyX0dFTkVSQUxfQ09OVEVYVF9DUkVBVEUgMyAiMjIgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKnBjcmUyX2dlbmVyYWxfY29udGV4dF9jcmVhdGUoCisuQiAiICB2b2lkICooKlxmSXByaXZhdGVfbWFsbG9jXGZQKShQQ1JFMl9TSVpFLCB2b2lkICopLCIKKy5CICIgIHZvaWQgKCpcZklwcml2YXRlX2ZyZWVcZlApKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqXGZJbWVtb3J5X2RhdGFcZlApOyIKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIGdlbmVyYWwgY29udGV4dC4gVGhlIGFyZ3VtZW50cyBkZWZpbmUKK2N1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgYW5kIGEgZGF0YSB2YWx1ZSB0aGF0IGlzIHBhc3NlZCB0byB0aGVtIHdoZW4KK3RoZXkgYXJlIGNhbGxlZC4gVGhlIFxmQnByaXZhdGVfbWFsbG9jKClcZlAgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgbWVtb3J5IGZvcgordGhlIGNvbnRleHQuIElmIGVpdGhlciBvZiB0aGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBpcyBOVUxMLCB0aGUgc3lzdGVtIG1lbW9yeQorbWFuYWdlbWVudCBmdW5jdGlvbiBpcyB1c2VkLiBUaGUgcmVzdWx0IGlzIE5VTEwgaWYgbm8gbWVtb3J5IGNvdWxkIGJlIG9idGFpbmVkLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9nZW5lcmFsX2NvbnRleHRfZnJlZS4zIGIvZGlzdDIvZG9jL3BjcmUyX2dlbmVyYWxfY29udGV4dF9mcmVlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4NTMzMgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9nZW5lcmFsX2NvbnRleHRfZnJlZS4zCkBAIC0wLDAgKzEsMjcgQEAKKy5USCBQQ1JFMl9HRU5FUkFMX0NPTlRFWFRfRlJFRSAzICIyMiBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIHZvaWQgcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7CisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIG1lbW9yeSBvY2N1cGllZCBieSBhIGdlbmVyYWwgY29udGV4dCwgdXNpbmcgdGhlIG1lbW9yeQorZnJlZWluZyBmdW5jdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQsIGlmIHNldC4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UuMyBiL2Rpc3QyL2RvYy9wY3JlMl9nZXRfZXJyb3JfbWVzc2FnZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZjUzNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UuMwpAQCAtMCwwICsxLDM2IEBACisuVEggUENSRTJfR0VUX0VSUk9SX01FU1NBR0UgMyAiMjEgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQgcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoaW50IFxmSWVycm9yY29kZVxmUCwgUENSRTJfVUNIQVIgKlxmSWJ1ZmZlclxmUCwKKy5CICIgIFBDUkUyX1NJWkUgXGZJYnVmZmxlblxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgdGV4dHVhbCBlcnJvciBtZXNzYWdlIGZvciBlYWNoIFBDUkUyIGVycm9yIGNvZGUuCitDb21waWxhdGlvbiBlcnJvcnMgYXJlIHBvc2l0aXZlIG51bWJlcnM7IFVURiBmb3JtYXR0aW5nIGVycm9ycyBhbmQgbWF0Y2hpbmcKK2Vycm9ycyBhcmUgbmVnYXRpdmUgbnVtYmVycy4gVGhlIGFyZ3VtZW50cyBhcmU6Cisuc3AKKyAgXGZJZXJyb3Jjb2RlXGZQICAgYW4gZXJyb3IgY29kZSAocG9zaXRpdmUgb3IgbmVnYXRpdmUpCisgIFxmSWJ1ZmZlclxmUCAgICAgIHdoZXJlIHRvIHB1dCB0aGUgbWVzc2FnZQorICBcZklidWZmbGVuXGZQICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgKGNvZGUgdW5pdHMpCisuc3AKK1RoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIG1lc3NhZ2UsIGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgemVybywgb3IKK2EgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbC4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfZ2V0X21hcmsuMyBiL2Rpc3QyL2RvYy9wY3JlMl9nZXRfbWFyay4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NDFkZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfZ2V0X21hcmsuMwpAQCAtMCwwICsxLDMxIEBACisuVEggUENSRTJfR0VUX01BUksgMyAiMjQgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBQQ1JFMl9TUFRSIHBjcmUyX2dldF9tYXJrKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlApOworLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitBZnRlciBhIGNhbGwgb2YgXGZCcGNyZTJfbWF0Y2goKVxmUCB0aGF0IHdhcyBwYXNzZWQgdGhlIG1hdGNoIGJsb2NrIHRoYXQgaXMKK3RoaXMgZnVuY3Rpb24ncyBhcmd1bWVudCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgbGFzdCAoKk1BUkspCituYW1lIHRoYXQgd2FzIGVuY291bnRlcmVkLiBUaGUgbmFtZSBpcyB6ZXJvLXRlcm1pbmF0ZWQsIGFuZCBpcyB3aXRoaW4gdGhlCitjb21waWxlZCBwYXR0ZXJuLiBJZiBubyAoKk1BUkspIG5hbWUgaXMgYXZhaWxhYmxlLCBOVUxMIGlzIHJldHVybmVkLiBBICgqTUFSSykKK25hbWUgbWF5IGJlIGF2YWlsYWJsZSBhZnRlciBhIGZhaWxlZCBtYXRjaCBvciBhIHBhcnRpYWwgbWF0Y2gsIGFzIHdlbGwgYXMgYWZ0ZXIKK2Egc3VjY2Vzc2Z1bCBvbmUuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX2dldF9vdmVjdG9yX2NvdW50LjMgYi9kaXN0Mi9kb2MvcGNyZTJfZ2V0X292ZWN0b3JfY291bnQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjZkNzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX2dldF9vdmVjdG9yX2NvdW50LjMKQEAgLTAsMCArMSwyNyBAQAorLlRIIFBDUkUyX0dFVF9PVkVDVE9SX0NPVU5UIDMgIjI0IE9jdG9iZXIgMjAxNCIgIlBDUkUyIDEwLjAwIgorLlNIIE5BTUUKK1BDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorLlNIIFNZTk9QU0lTCisucnMKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUyLmg+CisuUFAKKy5uZgorLkIgdWludDMyX3QgcGNyZTJfZ2V0X292ZWN0b3JfY291bnQocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCk7CisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhaXJzIG9mIG9mZnNldHMgaW4gdGhlIG92ZWN0b3IgdGhhdCBmb3JtcworcGFydCBvZiB0aGUgZ2l2ZW4gbWF0Y2ggZGF0YSBibG9jay4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlci4zIGIvZGlzdDIvZG9jL3BjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjFkNjUyCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIuMwpAQCAtMCwwICsxLDI4IEBACisuVEggUENSRTJfR0VUX09WRUNUT1JfUE9JTlRFUiAzICIyNCBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIFBDUkUyX1NJWkUgKnBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCk7CisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHZlY3RvciBvZiBvZmZzZXRzIHRoYXQgZm9ybXMgcGFydCBvZiB0aGUKK2dpdmVuIG1hdGNoIGRhdGEgYmxvY2suIFRoZSBudW1iZXIgb2YgcGFpcnMgY2FuIGJlIGZvdW5kIGJ5IGNhbGxpbmcKK1xmQnBjcmUyX2dldF9vdmVjdG9yX2NvdW50KClcZlAuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX2dldF9zdGFydGNoYXIuMyBiL2Rpc3QyL2RvYy9wY3JlMl9nZXRfc3RhcnRjaGFyLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZhYzhiMAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9nZXRfc3RhcnRjaGFyLjMKQEAgLTAsMCArMSwzMiBAQAorLlRIIFBDUkUyX0dFVF9TVEFSVENIQVIgMyAiMjQgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBQQ1JFMl9TSVpFIHBjcmUyX2dldF9zdGFydGNoYXIocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCk7CisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK0FmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIG9mIFxmQnBjcmUyX21hdGNoKClcZlAgdGhhdCB3YXMgcGFzc2VkIHRoZSBtYXRjaCBibG9jawordGhhdCBpcyB0aGlzIGZ1bmN0aW9uJ3MgYXJndW1lbnQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgY29kZSB1bml0IG9mZnNldCBvZgordGhlIGNoYXJhY3RlciBhdCB3aGljaCB0aGUgc3VjY2Vzc2Z1bCBtYXRjaCBzdGFydGVkLiBGb3IgYSBub24tcGFydGlhbCBtYXRjaCwKK3RoaXMgY2FuIGJlIGRpZmZlcmVudCB0byB0aGUgdmFsdWUgb2YgXGZJb3ZlY3RvclswXVxmUCBpZiB0aGUgcGF0dGVybiBjb250YWlucwordGhlIFxlSyBlc2NhcGUgc2VxdWVuY2UuIEFmdGVyIGEgcGFydGlhbCBtYXRjaCwgaG93ZXZlciwgdGhpcyB2YWx1ZSBpcyBhbHdheXMKK3RoZSBzYW1lIGFzIFxmSW92ZWN0b3JbMF1cZlAgYmVjYXVzZSBcZUsgZG9lcyBub3QgYWZmZWN0IHRoZSByZXN1bHQgb2YgYQorcGFydGlhbCBtYXRjaC4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfaml0X2NvbXBpbGUuMyBiL2Rpc3QyL2RvYy9wY3JlMl9qaXRfY29tcGlsZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMWQ5NDkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfaml0X2NvbXBpbGUuMwpAQCAtMCwwICsxLDQ1IEBACisuVEggUENSRTJfSklUX0NPTVBJTEUgMyAiMjEgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQgcGNyZTJfaml0X2NvbXBpbGUocGNyZTJfY29kZSAqXGZJY29kZVxmUCwgdWludDMyX3QgXGZJb3B0aW9uc1xmUCk7CisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gcmVxdWVzdHMgSklUIGNvbXBpbGF0aW9uLCB3aGljaCwgaWYgdGhlIGp1c3QtaW4tdGltZSBjb21waWxlciBpcworYXZhaWxhYmxlLCBmdXJ0aGVyIHByb2Nlc3NlcyBhIGNvbXBpbGVkIHBhdHRlcm4gaW50byBtYWNoaW5lIGNvZGUgdGhhdCBleGVjdXRlcworbXVjaCBmYXN0ZXIgdGhhbiB0aGUgXGZCcGNyZTJfbWF0Y2goKVxmUCBpbnRlcnByZXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24uIEZ1bGwKK2RldGFpbHMgYXJlIGdpdmVuIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyaml0XGZQCisuXCIKK2RvY3VtZW50YXRpb24uCisuUAorVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0aGF0IHdhcyByZXR1cm5lZCBieSBhIHN1Y2Nlc3NmdWwgY2FsbCB0bworXGZCcGNyZTJfY29tcGlsZSgpXGZQLCBhbmQgdGhlIHNlY29uZCBtdXN0IGNvbnRhaW4gb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZworYml0czoKKy5zcAorICBQQ1JFMl9KSVRfQ09NUExFVEUgICAgICBjb21waWxlIGNvZGUgZm9yIGZ1bGwgbWF0Y2hpbmcKKyAgUENSRTJfSklUX1BBUlRJQUxfU09GVCAgY29tcGlsZSBjb2RlIGZvciBzb2Z0IHBhcnRpYWwgbWF0Y2hpbmcKKyAgUENSRTJfSklUX1BBUlRJQUxfSEFSRCAgY29tcGlsZSBjb2RlIGZvciBoYXJkIHBhcnRpYWwgbWF0Y2hpbmcKKy5zcAorVGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyAwIGZvciBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorSW4gcGFydGljdWxhciwgUENSRTJfRVJST1JfSklUX0JBRE9QVElPTiBpcyByZXR1cm5lZCBpZiBKSVQgaXMgbm90IHN1cHBvcnRlZCBvcgoraWYgYW4gdW5rbm93biBiaXQgaXMgc2V0IGluIFxmSW9wdGlvbnNcZlAuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkuMyBiL2Rpc3QyL2RvYy9wY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwNTBjOAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5LjMKQEAgLTAsMCArMSwzMSBAQAorLlRIIFBDUkUyX0pJVF9GUkVFX1VOVVNFRF9NRU1PUlkgMyAiMjcgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiB2b2lkIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7CisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gZnJlZXMgdW51c2VkIEpJVCBleGVjdXRhYmxlIG1lbW9yeS4gVGhlIGFyZ3VtZW50IGlzIGEgZ2VuZXJhbAorY29udGV4dCwgZm9yIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCwgb3IgTlVMTCBmb3Igc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQuCitKSVQgbWVtb3J5IGFsbG9jYXRpb24gcmV0YWlucyBzb21lIG1lbW9yeSBpbiBvcmRlciB0byBpbXByb3ZlIGZ1dHVyZSBKSVQKK2NvbXBpbGF0aW9uIHNwZWVkLiBJbiBsb3cgbWVtb3J5IGNvbmRpdGlvbnMsCitcZkJwY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5KClcZkIgY2FuIGJlIHVzZWQgdG8gY2F1c2UgdGhpcyBtZW1vcnkgdG8gYmUKK2ZyZWVkLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9qaXRfbWF0Y2guMyBiL2Rpc3QyL2RvYy9wY3JlMl9qaXRfbWF0Y2guMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMGNjMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX2ppdF9tYXRjaC4zCkBAIC0wLDAgKzEsNDggQEAKKy5USCBQQ1JFMl9KSVRfTUFUQ0ggMyAiMDMgTm92ZW1iZXIgMjAxNCIgIlBDUkUyIDEwLjAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQgcGNyZTJfaml0X21hdGNoKGNvbnN0IHBjcmUyX2NvZGUgKlxmSWNvZGVcZlAsIFBDUkUyX1NQVFIgXGZJc3ViamVjdFxmUCwKKy5CICIgIFBDUkUyX1NJWkUgXGZJbGVuZ3RoXGZQLCBQQ1JFMl9TSVpFIFxmSXN0YXJ0b2Zmc2V0XGZQLCIKKy5CICIgIHVpbnQzMl90IFxmSW9wdGlvbnNcZlAsIHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsIgorLkIgIiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlApOyIKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiBtYXRjaGVzIGEgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uIHRoYXQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5Citwcm9jZXNzZWQgYnkgdGhlIEpJVCBjb21waWxlciBhZ2FpbnN0IGEgZ2l2ZW4gc3ViamVjdCBzdHJpbmcsIHVzaW5nIGEgbWF0Y2hpbmcKK2FsZ29yaXRobSB0aGF0IGlzIHNpbWlsYXIgdG8gUGVybCdzLiBJdCBpcyBhICJmYXN0IHBhdGgiIGludGVyZmFjZSB0byBKSVQsIGFuZAoraXQgYnlwYXNzZXMgc29tZSBvZiB0aGUgc2FuaXR5IGNoZWNrcyB0aGF0IFxmQnBjcmUyX21hdGNoKClcZlAgYXBwbGllcy4KK0l0cyBhcmd1bWVudHMgYXJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgZm9yCisuXCIgSFJFRgorXGZCcGNyZTJfbWF0Y2goKVxmUC4KKy5cIgorLlAKK1RoZSBzdXBwb3J0ZWQgb3B0aW9ucyBhcmUgUENSRTJfTk9UQk9MLCBQQ1JFMl9OT1RFT0wsIFBDUkUyX05PVEVNUFRZLAorUENSRTJfTk9URU1QVFlfQVRTVEFSVCwgUENSRTJfUEFSVElBTF9IQVJELCBhbmQgUENSRTJfUEFSVElBTF9TT0ZULiBVbnN1cHBvcnRlZAorb3B0aW9ucyBhcmUgaWdub3JlZC4gVGhlIHN1YmplY3Qgc3RyaW5nIGlzIG5vdCBjaGVja2VkIGZvciBVVEYgdmFsaWRpdHkuCisuUAorVGhlIHJldHVybiB2YWx1ZXMgYXJlIHRoZSBzYW1lIGFzIGZvciBcZkJwY3JlMl9tYXRjaCgpXGZQIHBsdXMKK1BDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04gaWYgYSBtYXRjaGluZyBtb2RlIChwYXJ0aWFsIG9yIGNvbXBsZXRlKSBpcyByZXF1ZXN0ZWQKK3RoYXQgd2FzIG5vdCBjb21waWxlZC4gRm9yIGRldGFpbHMgb2YgcGFydGlhbCBtYXRjaGluZywgc2VlIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGFydGlhbFxmUAorLlwiCitwYWdlLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgSklUIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmppdFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX2ppdF9zdGFja19hc3NpZ24uMyBiL2Rpc3QyL2RvYy9wY3JlMl9qaXRfc3RhY2tfYXNzaWduLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiODA5NQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9qaXRfc3RhY2tfYXNzaWduLjMKQEAgLTAsMCArMSw1NSBAQAorLlRIIFBDUkUyX0pJVF9TVEFDS19BU1NJR04gMyAiMDggTm92ZW1iZXIgMjAxNCIgIlBDUkUyIDEwLjAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiB2b2lkIHBjcmUyX2ppdF9zdGFja19hc3NpZ24ocGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlAsCisuQiAiICBwY3JlMl9qaXRfY2FsbGJhY2sgXGZJY2FsbGJhY2tfZnVuY3Rpb25cZlAsIHZvaWQgKlxmSWNhbGxiYWNrX2RhdGFcZlApOyIKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSB1c2VkIGJ5IEpJVCBhcyBhIHJ1bi10aW1lIHN0YWNrCit3aGVuIFxmQnBjcmUyX21hdGNoKClcZlAgb3IgXGZCcGNyZTJfaml0X21hdGNoKClcZlAgaXMgY2FsbGVkIHdpdGggYSBwYXR0ZXJuCit0aGF0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQgYnkgdGhlIEpJVCBjb21waWxlci4gVGhlIGluZm9ybWF0aW9uIHRoYXQKK2RldGVybWluZXMgd2hpY2ggc3RhY2sgaXMgdXNlZCBpcyBwdXQgaW50byBhIG1hdGNoIGNvbnRleHQgdGhhdCBpcyBzdWJzZXF1ZW50bHkKK3Bhc3NlZCB0byBhIG1hdGNoaW5nIGZ1bmN0aW9uLiBUaGUgYXJndW1lbnRzIG9mIHRoaXMgZnVuY3Rpb24gYXJlOgorLnNwCisgIG1jb250ZXh0ICAgICAgIGEgcG9pbnRlciB0byBhIG1hdGNoIGNvbnRleHQKKyAgY2FsbGJhY2sgICAgICAgYSBjYWxsYmFjayBmdW5jdGlvbgorICBjYWxsYmFja19kYXRhICBhIEpJVCBzdGFjayBvciBhIHZhbHVlIHRvIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKy5QCitJZiBcZkljYWxsYmFja1xmUCBpcyBOVUxMIGFuZCBcZkljYWxsYmFja19kYXRhXGZQIGlzIE5VTEwsIGFuIGludGVybmFsIDMySworYmxvY2sgb24gdGhlIG1hY2hpbmUgc3RhY2sgaXMgdXNlZC4KKy5QCitJZiBcZkljYWxsYmFja1xmUCBpcyBOVUxMIGFuZCBcZkljYWxsYmFja19kYXRhXGZQIGlzIG5vdCBOVUxMLAorXGZJY2FsbGJhY2tfZGF0YVxmUCBtdXN0IGJlIGEgdmFsaWQgSklUIHN0YWNrLCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcKK1xmQnBjcmUyX2ppdF9zdGFja19jcmVhdGUoKVxmUC4KKy5QCitJZiBcZkljYWxsYmFja1xmUCBub3QgTlVMTCwgaXQgaXMgY2FsbGVkIHdpdGggXGZJY2FsbGJhY2tfZGF0YVxmUCBhcyBhbgorYXJndW1lbnQgYXQgdGhlIHN0YXJ0IG9mIG1hdGNoaW5nLCBpbiBvcmRlciB0byBzZXQgdXAgYSBKSVQgc3RhY2suIElmIHRoZQorcmVzdWx0IGlzIE5VTEwsIHRoZSBpbnRlcm5hbCAzMksgc3RhY2sgaXMgdXNlZDsgb3RoZXJ3aXNlIHRoZSByZXR1cm4gdmFsdWUgbXVzdAorYmUgYSB2YWxpZCBKSVQgc3RhY2ssIHRoZSByZXN1bHQgb2YgY2FsbGluZyBcZkJwY3JlMl9qaXRfc3RhY2tfY3JlYXRlKClcZlAuCisuUAorWW91IG1heSBzYWZlbHkgdXNlIHRoZSBzYW1lIEpJVCBzdGFjayBmb3IgbXVsdGlwbGUgcGF0dGVybnMsIGFzIGxvbmcgYXMgdGhleQorYXJlIGFsbCBtYXRjaGVkIGluIHRoZSBzYW1lIHRocmVhZC4gSW4gYSBtdWx0aXRocmVhZCBhcHBsaWNhdGlvbiwgZWFjaCB0aHJlYWQKK211c3QgdXNlIGl0cyBvd24gSklUIHN0YWNrLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJqaXRcZlAKKy5cIgorcGFnZS4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfaml0X3N0YWNrX2NyZWF0ZS4zIGIvZGlzdDIvZG9jL3BjcmUyX2ppdF9zdGFja19jcmVhdGUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTMwZDUwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX2ppdF9zdGFja19jcmVhdGUuMwpAQCAtMCwwICsxLDQwIEBACisuVEggUENSRTJfSklUX1NUQUNLX0NSRUFURSAzICIwMyBOb3ZlbWJlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBwY3JlMl9qaXRfc3RhY2sgKnBjcmUyX2ppdF9zdGFja19jcmVhdGUoUENSRTJfU0laRSBcZklzdGFydHNpemVcZlAsCisuQiAiICBQQ1JFMl9TSVpFIFxmSW1heHNpemVcZlAsIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqXGZJZ2NvbnRleHRcZlApOyIKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSBhIHN0YWNrIGZvciB1c2UgYnkgdGhlIGNvZGUgY29tcGlsZWQgYnkgdGhlIEpJVAorY29tcGlsZXIuIFRoZSBmaXJzdCB0d28gYXJndW1lbnRzIGFyZSBhIHN0YXJ0aW5nIHNpemUgZm9yIHRoZSBzdGFjaywgYW5kIGEKK21heGltdW0gc2l6ZSB0byB3aGljaCBpdCBpcyBhbGxvd2VkIHRvIGdyb3cuIFRoZSBmaW5hbCBhcmd1bWVudCBpcyBhIGdlbmVyYWwKK2NvbnRleHQsIGZvciBtZW1vcnkgYWxsb2NhdGlvbiBmdW5jdGlvbnMsIG9yIE5VTEwgZm9yIHN0YW5kYXJkIG1lbW9yeQorYWxsb2NhdGlvbi4gVGhlIHJlc3VsdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSBKSVQgcnVuLXRpbWUgY29kZSBieSBjYWxsaW5nCitcZkJwY3JlMl9qaXRfc3RhY2tfYXNzaWduKClcZlAgdG8gYXNzb2NpYXRlIHRoZSBzdGFjayB3aXRoIGEgY29tcGlsZWQgcGF0dGVybiwKK3doaWNoIGNhbiB0aGVuIGJlIHByb2Nlc3NlZCBieSBcZkJwY3JlMl9tYXRjaCgpXGZQLiBJZiB0aGUgImZhc3QgcGF0aCIgSklUCittYXRjaGVyLCBcZkJwY3JlMl9qaXRfbWF0Y2goKVxmUCBpcyB1c2VkLCB0aGUgc3RhY2sgY2FuIGJlIHBhc3NlZCBkaXJlY3RseSBhcworYW4gYXJndW1lbnQuIEEgbWF4aW11bSBzdGFjayBzaXplIG9mIDUxMksgdG8gMU0gc2hvdWxkIGJlIG1vcmUgdGhhbiBlbm91Z2ggZm9yCithbnkgcGF0dGVybi4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyaml0XGZQCisuXCIKK3BhZ2UuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX2ppdF9zdGFja19mcmVlLjMgYi9kaXN0Mi9kb2MvcGNyZTJfaml0X3N0YWNrX2ZyZWUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmE0Zjc5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX2ppdF9zdGFja19mcmVlLjMKQEAgLTAsMCArMSwzMSBAQAorLlRIIFBDUkUyX0pJVF9TVEFDS19GUkVFIDMgIjIxIE9jdG9iZXIgMjAxNCIgIlBDUkUyIDEwLjAwIgorLlNIIE5BTUUKK1BDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorLlNIIFNZTk9QU0lTCisucnMKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUyLmg+CisuUFAKKy5TTQorLkIgdm9pZCBwY3JlMl9qaXRfc3RhY2tfZnJlZShwY3JlMl9qaXRfc3RhY2sgKlxmSWppdF9zdGFja1xmUCk7CisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZnJlZSBhIEpJVCBzdGFjayB0aGF0IHdhcyBjcmVhdGVkIGJ5CitcZkJwY3JlMl9qaXRfc3RhY2tfY3JlYXRlKClcZlAgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBGb3IgbW9yZSBkZXRhaWxzLAorc2VlIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyaml0XGZQCisuXCIKK3BhZ2UuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX21ha2V0YWJsZXMuMyBiL2Rpc3QyL2RvYy9wY3JlMl9tYWtldGFibGVzLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIyZGJhNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9tYWtldGFibGVzLjMKQEAgLTAsMCArMSwzNiBAQAorLlRIIFBDUkUyX01BS0VUQUJMRVMgMyAiMjEgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLlNNCisuQiBjb25zdCB1bnNpZ25lZCBjaGFyICpwY3JlMl9tYWtldGFibGVzKHBjcmUyMl9nZW5lcmFsX2NvbnRleHQgKlxmSWdjb250ZXh0XGZQKTsKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gYnVpbGRzIGEgc2V0IG9mIGNoYXJhY3RlciB0YWJsZXMgZm9yIGNoYXJhY3RlciB2YWx1ZXMgbGVzcyB0aGFuCisyNTYuIFRoZXNlIGNhbiBiZSBwYXNzZWQgdG8gXGZCcGNyZTJfY29tcGlsZSgpXGZQIGluIGEgY29tcGlsZSBjb250ZXh0IGluIG9yZGVyCit0byBvdmVycmlkZSB0aGUgaW50ZXJuYWwsIGJ1aWx0LWluIHRhYmxlcyAod2hpY2ggd2VyZSBlaXRoZXIgZGVmYXVsdGVkIG9yIG1hZGUKK2J5IFxmQnBjcmUyX21ha2V0YWJsZXMoKVxmUCB3aGVuIFBDUkUyIHdhcyBjb21waWxlZCkuIFNlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcygpXGZQCisuXCIKK3BhZ2UuIFlvdSBtaWdodCB3YW50IHRvIGRvIHRoaXMgaWYgeW91IGFyZSB1c2luZyBhIG5vbi1zdGFuZGFyZCBsb2NhbGUuCisuUAorSWYgdGhlIGFyZ3VtZW50IGlzIE5VTEwsIFxmQm1hbGxvYygpXGZQIGlzIHVzZWQgdG8gZ2V0IG1lbW9yeSBmb3IgdGhlIHRhYmxlcy4KK090aGVyd2lzZSBpdCBtdXN0IHBvaW50IHRvIGEgZ2VuZXJhbCBjb250ZXh0LCB3aGljaCBjYW4gc3VwcGx5IHBvaW50ZXJzIHRvIGEKK2N1c3RvbSBtZW1vcnkgbWFuYWdlci4gVGhlIGZ1bmN0aW9uIHlpZWxkcyBhIHBvaW50ZXIgdG8gdGhlIHRhYmxlcy4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfbWF0Y2guMyBiL2Rpc3QyL2RvYy9wY3JlMl9tYXRjaC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNWNhY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfbWF0Y2guMwpAQCAtMCwwICsxLDY3IEBACisuVEggUENSRTJfTUFUQ0ggMyAiMjEgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQgcGNyZTJfbWF0Y2goY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCwgUENSRTJfU1BUUiBcZklzdWJqZWN0XGZQLAorLkIgIiAgUENSRTJfU0laRSBcZklsZW5ndGhcZlAsIFBDUkUyX1NJWkUgXGZJc3RhcnRvZmZzZXRcZlAsIgorLkIgIiAgdWludDMyX3QgXGZJb3B0aW9uc1xmUCwgcGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCwiCisuQiAiICBwY3JlMl9tYXRjaF9jb250ZXh0ICpcZkltY29udGV4dFxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIG1hdGNoZXMgYSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24gYWdhaW5zdCBhIGdpdmVuIHN1YmplY3QKK3N0cmluZywgdXNpbmcgYSBtYXRjaGluZyBhbGdvcml0aG0gdGhhdCBpcyBzaW1pbGFyIHRvIFBlcmwncy4gSXQgcmV0dXJucworb2Zmc2V0cyB0byBjYXB0dXJlZCBzdWJzdHJpbmdzLiBJdHMgYXJndW1lbnRzIGFyZToKKy5zcAorICBcZkljb2RlXGZQICAgICAgICAgUG9pbnRzIHRvIHRoZSBjb21waWxlZCBwYXR0ZXJuCisgIFxmSXN1YmplY3RcZlAgICAgICBQb2ludHMgdG8gdGhlIHN1YmplY3Qgc3RyaW5nCisgIFxmSWxlbmd0aFxmUCAgICAgICBMZW5ndGggb2YgdGhlIHN1YmplY3Qgc3RyaW5nCisgIFxmSXN0YXJ0b2Zmc2V0XGZQICBPZmZzZXQgaW4gdGhlIHN1YmplY3QgYXQgd2hpY2ggdG8gc3RhcnQgbWF0Y2hpbmcKKyAgXGZJb3B0aW9uc1xmUCAgICAgIE9wdGlvbiBiaXRzCisgIFxmSW1hdGNoX2RhdGFcZlAgICBQb2ludHMgdG8gYSBtYXRjaCBkYXRhIGJsb2NrLCBmb3IgcmVzdWx0cworICBcZkltY29udGV4dFxmUCAgICAgUG9pbnRzIHRvIGEgbWF0Y2ggY29udGV4dCwgb3IgaXMgTlVMTAorLnNwCitBIG1hdGNoIGNvbnRleHQgaXMgbmVlZGVkIG9ubHkgaWYgeW91IHdhbnQgdG86Cisuc3AKKyAgU2V0IHVwIGEgY2FsbG91dCBmdW5jdGlvbgorICBDaGFuZ2UgdGhlIGxpbWl0IGZvciBjYWxsaW5nIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiBcZkltYXRjaCgpXGZQCisgIENoYW5nZSB0aGUgbGltaXQgZm9yIGNhbGxpbmcgXGZJbWF0Y2goKVxmUCByZWN1cnNpdmVseQorICBTZXQgY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50IHdoZW4gdGhlIGhlYXAgaXMgdXNlZCBmb3IgcmVjdXJzaW9uCisuc3AKK1RoZSBcZklsZW5ndGhcZlAgYW5kIFxmSXN0YXJ0b2Zmc2V0XGZQIHZhbHVlcyBhcmUgY29kZQordW5pdHMsIG5vdCBjaGFyYWN0ZXJzLiBUaGUgb3B0aW9ucyBhcmU6Cisuc3AKKyAgUENSRTJfQU5DSE9SRUQgICAgICAgICAgTWF0Y2ggb25seSBhdCB0aGUgZmlyc3QgcG9zaXRpb24KKyAgUENSRTJfTk9UQk9MICAgICAgICAgICAgU3ViamVjdCBzdHJpbmcgaXMgbm90IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lCisgIFBDUkUyX05PVEVPTCAgICAgICAgICAgIFN1YmplY3Qgc3RyaW5nIGlzIG5vdCB0aGUgZW5kIG9mIGEgbGluZQorICBQQ1JFMl9OT1RFTVBUWSAgICAgICAgICBBbiBlbXB0eSBzdHJpbmcgaXMgbm90IGEgdmFsaWQgbWF0Y2gKKyAgUENSRTJfTk9URU1QVFlfQVRTVEFSVCAgQW4gZW1wdHkgc3RyaW5nIGF0IHRoZSBzdGFydCBvZiB0aGUgc3ViamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgbm90IGEgdmFsaWQgbWF0Y2gKKyAgUENSRTJfTk9fVVRGX0NIRUNLICAgICAgRG8gbm90IGNoZWNrIHRoZSBzdWJqZWN0IGZvciBVVEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkaXR5IChvbmx5IHJlbGV2YW50IGlmIFBDUkUyX1VURgorICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FzIHNldCBhdCBjb21waWxlIHRpbWUpCisgIFBDUkUyX1BBUlRJQUxfU09GVCAgICAgIFJldHVybiBQQ1JFMl9FUlJPUl9QQVJUSUFMIGZvciBhIHBhcnRpYWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCBpZiBubyBmdWxsIG1hdGNoZXMgYXJlIGZvdW5kCisgIFBDUkUyX1BBUlRJQUxfSEFSRCAgICAgIFJldHVybiBQQ1JFMl9FUlJPUl9QQVJUSUFMIGZvciBhIHBhcnRpYWwgbWF0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoYXQgaXMgZm91bmQgYmVmb3JlIGEgZnVsbCBtYXRjaAorLnNwCitGb3IgZGV0YWlscyBvZiBwYXJ0aWFsIG1hdGNoaW5nLCBzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwYXJ0aWFsXGZQCisuXCIKK3BhZ2UuIFRoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9tYXRjaF9jb250ZXh0X2NvcHkuMyBiL2Rpc3QyL2RvYy9wY3JlMl9tYXRjaF9jb250ZXh0X2NvcHkuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmMzM2E2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX21hdGNoX2NvbnRleHRfY29weS4zCkBAIC0wLDAgKzEsMjkgQEAKKy5USCBQQ1JFMl9NQVRDSF9DT05URVhUX0NPUFkgMyAiMjIgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBwY3JlMl9tYXRjaF9jb250ZXh0ICpwY3JlMl9tYXRjaF9jb250ZXh0X2NvcHkoCisuQiAiICBwY3JlMl9tYXRjaF9jb250ZXh0ICpcZkltY29udGV4dFxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIG1ha2VzIGEgbmV3IGNvcHkgb2YgYSBtYXRjaCBjb250ZXh0LCB1c2luZyB0aGUgbWVtb3J5CithbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQgd2FzIHVzZWQgZm9yIHRoZSBvcmlnaW5hbCBjb250ZXh0LiBUaGUgcmVzdWx0IGlzIE5VTEwKK2lmIHRoZSBtZW1vcnkgY2Fubm90IGJlIG9idGFpbmVkLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZS4zIGIvZGlzdDIvZG9jL3BjcmUyX21hdGNoX2NvbnRleHRfY3JlYXRlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRhMjY2NQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZS4zCkBAIC0wLDAgKzEsMzAgQEAKKy5USCBQQ1JFMl9NQVRDSF9DT05URVhUX0NSRUFURSAzICIyMiBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIHBjcmUyX21hdGNoX2NvbnRleHQgKnBjcmUyX21hdGNoX2NvbnRleHRfY3JlYXRlKAorLkIgIiAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYW5kIGluaXRpYWxpemVzIGEgbmV3IG1hdGNoIGNvbnRleHQuIElmIGl0cyBhcmd1bWVudCBpcworTlVMTCwgXGZCbWFsbG9jKClcZlAgaXMgdXNlZCB0byBnZXQgdGhlIG5lY2Vzc2FyeSBtZW1vcnk7IG90aGVyd2lzZSB0aGUgbWVtb3J5CithbGxvY2F0aW9uIGZ1bmN0aW9uIHdpdGhpbiB0aGUgZ2VuZXJhbCBjb250ZXh0IGlzIHVzZWQuIFRoZSByZXN1bHQgaXMgTlVMTCBpZgordGhlIG1lbW9yeSBjb3VsZCBub3QgYmUgb2J0YWluZWQuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX21hdGNoX2NvbnRleHRfZnJlZS4zIGIvZGlzdDIvZG9jL3BjcmUyX21hdGNoX2NvbnRleHRfZnJlZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYjk3ODMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlLjMKQEAgLTAsMCArMSwyOCBAQAorLlRIIFBDUkUyX01BVENIX0NPTlRFWFRfRlJFRSAzICIyMiBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIHZvaWQgcGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlKHBjcmUyX21hdGNoX2NvbnRleHQgKlxmSW1jb250ZXh0XGZQKTsKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiBmcmVlcyB0aGUgbWVtb3J5IG9jY3VwaWVkIGJ5IGEgbWF0Y2ggY29udGV4dCwgdXNpbmcgdGhlIG1lbW9yeQorZnJlZWluZyBmdW5jdGlvbiBmcm9tIHRoZSBnZW5lcmFsIGNvbnRleHQgd2l0aCB3aGljaCBpdCB3YXMgY3JlYXRlZCwgb3IKK1xmQmZyZWUoKVxmUCBpZiB0aGF0IHdhcyBub3Qgc2V0LgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZS4zIGIvZGlzdDIvZG9jL3BjcmUyX21hdGNoX2RhdGFfY3JlYXRlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwYTI5ZQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZS4zCkBAIC0wLDAgKzEsMzYgQEAKKy5USCBQQ1JFMl9NQVRDSF9EQVRBX0NSRUFURSAzICIyOSBKdWx5IDIwMTUiICJQQ1JFMiAxMC4yMSIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIHBjcmUyX21hdGNoX2RhdGEgKnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKHVpbnQzMl90IFxmSW92ZWNzaXplXGZQLAorLkIgIiAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgbWF0Y2ggZGF0YSBibG9jaywgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyB0aGUKK3Jlc3VsdCBvZiBhIG1hdGNoLiBUaGUgZmlyc3QgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcGFpcnMgb2Ygb2Zmc2V0cwordGhhdCBhcmUgcmVxdWlyZWQuIFRoZXNlIGZvcm0gdGhlICJvdXRwdXQgdmVjdG9yIiAob3ZlY3Rvcikgd2l0aGluIHRoZSBtYXRjaAorZGF0YSBibG9jaywgYW5kIGFyZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtYXRjaGVkIHN0cmluZyBhbmQgYW55IGNhcHR1cmVkCitzdWJzdHJpbmdzLiBUaGVyZSBpcyBhbHdheXMgb25lIHBhaXIgb2Ygb2Zmc2V0czsgaWYgXGZCb3ZlY3NpemVcZlAgaXMgemVybywgaXQKK2lzIHRyZWF0ZWQgYXMgb25lLgorLlAKK1RoZSBzZWNvbmQgYXJndW1lbnQgcG9pbnRzIHRvIGEgZ2VuZXJhbCBjb250ZXh0LCBmb3IgY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50LAorb3IgaXMgTlVMTCBmb3Igc3lzdGVtIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBpcyBOVUxMIGlmCit0aGUgbWVtb3J5IGZvciB0aGUgYmxvY2sgY291bGQgbm90IGJlIG9idGFpbmVkLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4uMyBiL2Rpc3QyL2RvYy9wY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4uMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGJmNzdjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybi4zCkBAIC0wLDAgKzEsMzcgQEAKKy5USCBQQ1JFMl9NQVRDSF9EQVRBX0NSRUFURV9GUk9NX1BBVFRFUk4gMyAiMjkgSnVseSAyMDE1IiAiUENSRTIgMTAuMjEiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBwY3JlMl9tYXRjaF9kYXRhICpwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4oCisuQiAiICBjb25zdCBwY3JlMl9jb2RlICpcZkljb2RlXGZQLCBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKlxmSWdjb250ZXh0XGZQKTsiCisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIG5ldyBtYXRjaCBkYXRhIGJsb2NrLCB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nIHRoZQorcmVzdWx0IG9mIGEgbWF0Y2guIFRoZSBmaXJzdCBhcmd1bWVudCBwb2ludHMgdG8gYSBjb21waWxlZCBwYXR0ZXJuLiBUaGUgbnVtYmVyCitvZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgd2l0aGluIHRoZSBwYXR0ZXJuIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mCitwYWlycyBvZiBvZmZzZXRzIHRoYXQgYXJlIHJlcXVpcmVkIGluIHRoZSBtYXRjaCBkYXRhIGJsb2NrLiBUaGVzZSBmb3JtIHRoZQorIm91dHB1dCB2ZWN0b3IiIChvdmVjdG9yKSB3aXRoaW4gdGhlIG1hdGNoIGRhdGEgYmxvY2ssIGFuZCBhcmUgdXNlZCB0byBpZGVudGlmeQordGhlIG1hdGNoZWQgc3RyaW5nIGFuZCBhbnkgY2FwdHVyZWQgc3Vic3RyaW5ncy4KKy5QCitUaGUgc2Vjb25kIGFyZ3VtZW50IHBvaW50cyB0byBhIGdlbmVyYWwgY29udGV4dCwgZm9yIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCwKK29yIGlzIE5VTEwgdG8gdXNlIHRoZSBzYW1lIG1lbW9yeSBhbGxvY2F0b3IgYXMgd2FzIHVzZWQgZm9yIHRoZSBjb21waWxlZAorcGF0dGVybi4gVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gaXMgTlVMTCBpZiB0aGUgbWVtb3J5IGZvciB0aGUgYmxvY2sgY291bGQKK25vdCBiZSBvYnRhaW5lZC4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfbWF0Y2hfZGF0YV9mcmVlLjMgYi9kaXN0Mi9kb2MvcGNyZTJfbWF0Y2hfZGF0YV9mcmVlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0YmM2MgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9tYXRjaF9kYXRhX2ZyZWUuMwpAQCAtMCwwICsxLDI4IEBACisuVEggUENSRTJfTUFUQ0hfREFUQV9GUkVFIDMgIjI0IE9jdG9iZXIgMjAxNCIgIlBDUkUyIDEwLjAwIgorLlNIIE5BTUUKK1BDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorLlNIIFNZTk9QU0lTCisucnMKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUyLmg+CisuUFAKKy5uZgorLkIgdm9pZCBwY3JlMl9tYXRjaF9kYXRhX2ZyZWUocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCk7CisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIG1lbW9yeSBvY2N1cGllZCBieSBhIG1hdGNoIGRhdGEgYmxvY2ssIHVzaW5nIHRoZSBtZW1vcnkKK2ZyZWVpbmcgZnVuY3Rpb24gZnJvbSB0aGUgZ2VuZXJhbCBjb250ZXh0IHdpdGggd2hpY2ggaXQgd2FzIGNyZWF0ZWQsIG9yCitcZkJmcmVlKClcZlAgaWYgdGhhdCB3YXMgbm90IHNldC4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfcGF0dGVybl9pbmZvLjMgYi9kaXN0Mi9kb2MvcGNyZTJfcGF0dGVybl9pbmZvLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc1ODQwYgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9wYXR0ZXJuX2luZm8uMwpAQCAtMCwwICsxLDk0IEBACisuVEggUENSRTJfUEFUVEVSTl9JTkZPIDMgIjIxIE5vdmVtYmVyIDIwMTUiICJQQ1JFMiAxMC4yMSIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9wYXR0ZXJuX2luZm8oY29uc3QgcGNyZTIgKlxmSWNvZGVcZlAsIHVpbnQzMl90IFxmSXdoYXRcZlAsIHZvaWQgKlxmSXdoZXJlXGZQKTsKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgY29tcGlsZWQgcGF0dGVybi4gSXRzIGFyZ3VtZW50cyBhcmU6Cisuc3AKKyAgXGZJY29kZVxmUCAgICAgUG9pbnRlciB0byBhIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbgorICBcZkl3aGF0XGZQICAgICBXaGF0IGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkCisgIFxmSXdoZXJlXGZQICAgIFdoZXJlIHRvIHB1dCB0aGUgaW5mb3JtYXRpb24KKy5zcAorVGhlIHJlY29nbml6ZWQgdmFsdWVzIGZvciB0aGUgXGZJd2hhdFxmUCBhcmd1bWVudCwgYW5kIHRoZSBpbmZvcm1hdGlvbiB0aGV5CityZXF1ZXN0IGFyZSBhcyBmb2xsb3dzOgorLnNwCisgIFBDUkUyX0lORk9fQUxMT1BUSU9OUyAgICAgIEZpbmFsIG9wdGlvbnMgYWZ0ZXIgY29tcGlsaW5nCisgIFBDUkUyX0lORk9fQVJHT1BUSU9OUyAgICAgIE9wdGlvbnMgcGFzc2VkIHRvIFxmQnBjcmUyX2NvbXBpbGUoKVxmUAorICBQQ1JFMl9JTkZPX0JBQ0tSRUZNQVggICAgICBOdW1iZXIgb2YgaGlnaGVzdCBiYWNrIHJlZmVyZW5jZQorICBQQ1JFMl9JTkZPX0JTUiAgICAgICAgICAgICBXaGF0IFxlUiBtYXRjaGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX0JTUl9VTklDT0RFOiBVbmljb2RlIGxpbmUgZW5kaW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX0JTUl9BTllDUkxGOiBDUiwgTEYsIG9yIENSTEYgb25seQorICBQQ1JFMl9JTkZPX0NBUFRVUkVDT1VOVCAgICBOdW1iZXIgb2YgY2FwdHVyaW5nIHN1YnBhdHRlcm5zCisgIFBDUkUyX0lORk9fRklSU1RCSVRNQVAgICAgIEJpdG1hcCBvZiBmaXJzdCBjb2RlIHVuaXRzLCBvciBOVUxMCisgIFBDUkUyX0lORk9fRklSU1RDT0RFVFlQRSAgIFR5cGUgb2Ygc3RhcnQtb2YtbWF0Y2ggaW5mb3JtYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIG5vdGhpbmcgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBmaXJzdCBjb2RlIHVuaXQgaXMgc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiBzdGFydCBvZiBzdHJpbmcgb3IgYWZ0ZXIgbmV3bGluZQorICBQQ1JFMl9JTkZPX0ZJUlNUQ09ERVVOSVQgICBGaXJzdCBjb2RlIHVuaXQgd2hlbiB0eXBlIGlzIDEKKyAgUENSRTJfSU5GT19IQVNCQUNLU0xBU0hDICAgUmV0dXJuIDEgaWYgcGF0dGVybiBjb250YWlucyBcZUMKKyAgUENSRTJfSU5GT19IQVNDUk9STEYgICAgICAgUmV0dXJuIDEgaWYgZXhwbGljaXQgQ1Igb3IgTEYgbWF0Y2hlcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0IGluIHRoZSBwYXR0ZXJuCisgIFBDUkUyX0lORk9fSkNIQU5HRUQgICAgICAgIFJldHVybiAxIGlmICg/Sikgb3IgKD8tSikgd2FzIHVzZWQKKyAgUENSRTJfSU5GT19KSVRTSVpFICAgICAgICAgU2l6ZSBvZiBKSVQgY29tcGlsZWQgY29kZSwgb3IgMAorICBQQ1JFMl9JTkZPX0xBU1RDT0RFVFlQRSAgICBUeXBlIG9mIG11c3QtYmUtcHJlc2VudCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgbm90aGluZyBzZXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxIGNvZGUgdW5pdCBpcyBzZXQKKyAgUENSRTJfSU5GT19MQVNUQ09ERVVOSVQgICAgTGFzdCBjb2RlIHVuaXQgd2hlbiB0eXBlIGlzIDEKKyAgUENSRTJfSU5GT19NQVRDSEVNUFRZICAgICAgMSBpZiB0aGUgcGF0dGVybiBjYW4gbWF0Y2ggYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eSBzdHJpbmcsIDAgb3RoZXJ3aXNlCisgIFBDUkUyX0lORk9fTUFUQ0hMSU1JVCAgICAgIE1hdGNoIGxpbWl0IGlmIHNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgUENSRTJfRVJST1JfVU5TRVQKKyAgUENSRTJfSU5GT19NQVhMT09LQkVISU5EICAgTGVuZ3RoIChpbiBjaGFyYWN0ZXJzKSBvZiB0aGUgbG9uZ2VzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2tiZWhpbmQgYXNzZXJ0aW9uCisgIFBDUkUyX0lORk9fTUlOTEVOR1RIICAgICAgIExvd2VyIGJvdW5kIGxlbmd0aCBvZiBtYXRjaGluZyBzdHJpbmdzCisgIFBDUkUyX0lORk9fTkFNRUNPVU5UICAgICAgIE51bWJlciBvZiBuYW1lZCBzdWJwYXR0ZXJucworICBQQ1JFMl9JTkZPX05BTUVFTlRSWVNJWkUgICBTaXplIG9mIG5hbWUgdGFibGUgZW50cmllcworICBQQ1JFMl9JTkZPX05BTUVUQUJMRSAgICAgICBQb2ludGVyIHRvIG5hbWUgdGFibGUKKyAgUENSRTJfQ09ORklHX05FV0xJTkUgICAgICAgQ29kZSBmb3IgdGhlIG5ld2xpbmUgc2VxdWVuY2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfTkVXTElORV9DUgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX05FV0xJTkVfTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9ORVdMSU5FX0NSTEYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9ORVdMSU5FX0FOWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRgorICBQQ1JFMl9JTkZPX1JFQ1VSU0lPTkxJTUlUICBSZWN1cnNpb24gbGltaXQgaWYgc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBQQ1JFMl9FUlJPUl9VTlNFVAorICBQQ1JFMl9JTkZPX1NJWkUgICAgICAgICAgICBTaXplIG9mIGNvbXBpbGVkIHBhdHRlcm4KKy5zcAorSWYgXGZJd2hlcmVcZlAgaXMgTlVMTCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkIGZvcgordGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiwgaW4gYnl0ZXMuIE90aGVyd2lzZSwgdGhlIFxmSXdoZXJlXGZQIGFyZ3VtZW50IG11c3QKK3BvaW50IHRvIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyICh1aW50MzJfdCB2YXJpYWJsZSksIGV4Y2VwdCBmb3IgdGhlCitmb2xsb3dpbmcgXGZJd2hhdFxmUCB2YWx1ZXMsIHdoZW4gaXQgbXVzdCBwb2ludCB0byBhIHZhcmlhYmxlIG9mIHRoZSB0eXBlCitzaG93bjoKKy5zcAorICBQQ1JFMl9JTkZPX0ZJUlNUQklUTUFQICAgICBjb25zdCB1aW50OF90ICoKKyAgUENSRTJfSU5GT19KSVRTSVpFICAgICAgICAgc2l6ZV90CisgIFBDUkUyX0lORk9fTkFNRVRBQkxFICAgICAgIFBDUkUyX1NQVFIKKyAgUENSRTJfSU5GT19TSVpFICAgICAgICAgICAgc2l6ZV90Cisuc3AKK1RoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgemVybyBvbiBzdWNjZXNzIG9yOgorLnNwCisgIFBDUkUyX0VSUk9SX05VTEwgICAgICAgICAgIHRoZSBhcmd1bWVudCBcZkljb2RlXGZQIGlzIE5VTEwKKyAgUENSRTJfRVJST1JfQkFETUFHSUMgICAgICAgdGhlICJtYWdpYyBudW1iZXIiIHdhcyBub3QgZm91bmQKKyAgUENSRTJfRVJST1JfQkFET1BUSU9OICAgICAgdGhlIHZhbHVlIG9mIFxmSXdoYXRcZlAgaXMgaW52YWxpZAorICBQQ1JFMl9FUlJPUl9CQURNT0RFICAgICAgICB0aGUgcGF0dGVybiB3YXMgY29tcGlsZWQgaW4gdGhlIHdyb25nIG1vZGUKKyAgUENSRTJfRVJST1JfVU5TRVQgICAgICAgICAgdGhlIHJlcXVlc3RlZCBpbmZvcm1hdGlvbiBpcyBub3Qgc2V0CisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX3NlcmlhbGl6ZV9kZWNvZGUuMyBiL2Rpc3QyL2RvYy9wY3JlMl9zZXJpYWxpemVfZGVjb2RlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczMDRhNQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9zZXJpYWxpemVfZGVjb2RlLjMKQEAgLTAsMCArMSw1MCBAQAorLlRIIFBDUkUyX1NFUklBTElaRV9ERUNPREUgMyAiMDIgU2VwdGVtYmVyIDIwMTUiICJQQ1JFMiAxMC4yMSIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludDMyX3QgcGNyZTJfc2VyaWFsaXplX2RlY29kZShwY3JlMl9jb2RlICoqXGZJY29kZXNcZlAsCisuQiAiICBpbnQzMl90IFxmSW51bWJlcl9vZl9jb2Rlc1xmUCwgY29uc3QgdWludDhfdCAqXGZJYnl0ZXNcZlAsIgorLkIgIiAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIGRlY29kZXMgYSBzZXJpYWxpemVkIHNldCBvZiBjb21waWxlZCBwYXR0ZXJucyBiYWNrIGludG8gYSBsaXN0IG9mCitpbmRpdmlkdWFsIHBhdHRlcm5zLiBJdHMgYXJndW1lbnRzIGFyZToKKy5zcAorICBcZkljb2Rlc1xmUCAgICAgICAgICAgIHBvaW50ZXIgdG8gYSB2ZWN0b3IgaW4gd2hpY2ggdG8gYnVpbGQgdGhlIGxpc3QKKyAgXGZJbnVtYmVyX29mX2NvZGVzXGZQICBudW1iZXIgb2Ygc2xvdHMgaW4gdGhlIHZlY3RvcgorICBcZklieXRlc1xmUCAgICAgICAgICAgIHRoZSBzZXJpYWxpemVkIGJ5dGUgc3RyZWFtCisgIFxmSWdjb250ZXh0XGZQICAgICAgICAgcG9pbnRlciB0byBhIGdlbmVyYWwgY29udGV4dCBvciBOVUxMCisuc3AKK1RoZSBcZklieXRlc1xmUCBhcmd1bWVudCBtdXN0IHBvaW50IHRvIGEgYmxvY2sgb2YgZGF0YSB0aGF0IHdhcyBvcmlnaW5hbGx5CitjcmVhdGVkIGJ5IFxmQnBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUoKVxmUCwgdGhvdWdoIGl0IG1heSBoYXZlIGJlZW4gc2F2ZWQgb24KK2Rpc2Mgb3IgZWxzZXdoZXJlIGluIHRoZSBtZWFudGltZS4gSWYgdGhlcmUgYXJlIG1vcmUgY29kZXMgaW4gdGhlIHNlcmlhbGl6ZWQKK2RhdGEgdGhhbiBzbG90cyBpbiB0aGUgbGlzdCwgb25seSB0aG9zZSBjb21waWxlZCBwYXR0ZXJucyB0aGF0IHdpbGwgZml0IGFyZQorZGVjb2RlZC4gVGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyB0aGUgbnVtYmVyIG9mIGRlY29kZWQgcGF0dGVybnMsIG9yIG9uZSBvZgordGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBlcnJvciBjb2RlczoKKy5zcAorICBQQ1JFMl9FUlJPUl9CQUREQVRBICAgXGZJbnVtYmVyX29mX2NvZGVzXGZQIGlzIHplcm8gb3IgbGVzcworICBQQ1JFMl9FUlJPUl9CQURNQUdJQyAgbWlzbWF0Y2ggb2YgaWQgYnl0ZXMgaW4gXGZJYnl0ZXNcZlAKKyAgUENSRTJfRVJST1JfQkFETU9ERSAgIG1pc21hdGNoIG9mIHZhcmlhYmxlIHVuaXQgc2l6ZSBvciBQQ1JFIHZlcnNpb24KKyAgUENSRTJfRVJST1JfTUVNT1JZICAgIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICBQQ1JFMl9FUlJPUl9OVUxMICAgICAgXGZJY29kZXNcZlAgb3IgXGZJYnl0ZXNcZlAgaXMgTlVMTAorLnNwCitQQ1JFMl9FUlJPUl9CQURNQUdJQyBtYXkgbWVhbiB0aGF0IHRoZSBkYXRhIGlzIGNvcnJ1cHQsIG9yIHRoYXQgaXQgd2FzIGNvbXBpbGVkCitvbiBhIHN5c3RlbSB3aXRoIGRpZmZlcmVudCBlbmRpYW5uZXNzLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9zZXJpYWxpemVfZW5jb2RlLjMgYi9kaXN0Mi9kb2MvcGNyZTJfc2VyaWFsaXplX2VuY29kZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljMjk2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfc2VyaWFsaXplX2VuY29kZS4zCkBAIC0wLDAgKzEsNDkgQEAKKy5USCBQQ1JFMl9TRVJJQUxJWkVfRU5DT0RFIDMgIjAyIFNlcHRlbWJlciAyMDE1IiAiUENSRTIgMTAuMjEiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQzMl90IHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUoY29uc3QgcGNyZTJfY29kZSAqKlxmSWNvZGVzXGZQLAorLkIgIiAgaW50MzJfdCBcZkludW1iZXJfb2ZfY29kZXNcZlAsIHVpbnQ4X3QgKipcZklzZXJpYWxpemVkX2J5dGVzXGZQLCIKKy5CICIgIFBDUkUyX1NJWkUgKlxmSXNlcmlhbGl6ZWRfc2l6ZVxmUCwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIGVuY29kZXMgYSBsaXN0IG9mIGNvbXBpbGVkIHBhdHRlcm5zIGludG8gYSBieXRlIHN0cmVhbSB0aGF0IGNhbgorYmUgc2F2ZWQgb24gZGlzYyBvciBlbHNld2hlcmUuIEl0cyBhcmd1bWVudHMgYXJlOgorLnNwCisgIFxmSWNvZGVzXGZQICAgICAgICAgICAgIHBvaW50ZXIgdG8gYSB2ZWN0b3IgY29udGFpbmluZyB0aGUgbGlzdAorICBcZkludW1iZXJfb2ZfY29kZXNcZlAgICBudW1iZXIgb2Ygc2xvdHMgaW4gdGhlIHZlY3RvcgorICBcZklzZXJpYWxpemVkX2J5dGVzXGZQICBzZXQgdG8gcG9pbnQgdG8gdGhlIHNlcmlhbGl6ZWQgYnl0ZSBzdHJlYW0KKyAgXGZJc2VyaWFsaXplZF9zaXplXGZQICAgc2V0IHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ5dGUgc3RyZWFtCisgIFxmSWdjb250ZXh0XGZQICAgICAgICAgIHBvaW50ZXIgdG8gYSBnZW5lcmFsIGNvbnRleHQgb3IgTlVMTAorLnNwCitUaGUgY29udGV4dCBhcmd1bWVudCBpcyB1c2VkIHRvIG9idGFpbiBtZW1vcnkgZm9yIHRoZSBieXRlIHN0cmVhbS4gV2hlbiB0aGUKK3NlcmlhbGl6ZWQgZGF0YSBpcyBubyBsb25nZXIgbmVlZGVkLCBpdCBtdXN0IGJlIGZyZWVkIGJ5IGNhbGxpbmcKK1xmQnBjcmUyX3NlcmlhbGl6ZV9mcmVlKClcZlAuIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgdGhlIG51bWJlciBvZgorc2VyaWFsaXplZCBwYXR0ZXJucywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXM6Cisuc3AKKyAgUENSRTJfRVJST1JfQkFEREFUQSAgICAgIFxmSW51bWJlcl9vZl9jb2Rlc1xmUCBpcyB6ZXJvIG9yIGxlc3MKKyAgUENSRTJfRVJST1JfQkFETUFHSUMgICAgIG1pc21hdGNoIG9mIGlkIGJ5dGVzIGluIG9uZSBvZiB0aGUgcGF0dGVybnMKKyAgUENSRTJfRVJST1JfTUVNT1JZICAgICAgIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICBQQ1JFMl9FUlJPUl9NSVhFRFRBQkxFUyAgdGhlIHBhdHRlcm5zIGRvIG5vdCBhbGwgdXNlIHRoZSBzYW1lIHRhYmxlcworICBQQ1JFMl9FUlJPUl9OVUxMICAgICAgICAgYW4gYXJndW1lbnQgb3RoZXIgdGhhbiBcZklnY29udGV4dFxmUCBpcyBOVUxMCisuc3AKK1BDUkUyX0VSUk9SX0JBRE1BR0lDIG1lYW5zIGVpdGhlciB0aGF0IGEgcGF0dGVybidzIGNvZGUgaGFzIGJlZW4gY29ycnVwdGVkLCBvcgordGhhdCBhIHNsb3QgaW4gdGhlIHZlY3RvciBkb2VzIG5vdCBwb2ludCB0byBhIGNvbXBpbGVkIHBhdHRlcm4uCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX3NlcmlhbGl6ZV9mcmVlLjMgYi9kaXN0Mi9kb2MvcGNyZTJfc2VyaWFsaXplX2ZyZWUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGFhOTRiCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3NlcmlhbGl6ZV9mcmVlLjMKQEAgLTAsMCArMSwyOCBAQAorLlRIIFBDUkUyX1NFUklBTElaRV9GUkVFIDMgIjE5IEphbnVhcnkgMjAxNSIgIlBDUkUyIDEwLjEwIgorLlNIIE5BTUUKK1BDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorLlNIIFNZTk9QU0lTCisucnMKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUyLmg+CisuUFAKKy5uZgorLkIgdm9pZCBwY3JlMl9zZXJpYWxpemVfZnJlZSh1aW50OF90ICpcZklieXRlc1xmUCk7CisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gZnJlZXMgdGhlIG1lbW9yeSB0aGF0IHdhcyBvYnRhaW5lZCBieQorXGZCcGNyZTJfc2VyaWFsaXplX2VuY29kZSgpXGZQIHRvIGhvbGQgYSBzZXJpYWxpemVkIGJ5dGUgc3RyZWFtLiBUaGUgYXJndW1lbnQKK211c3QgcG9pbnQgdG8gc3VjaCBhIGJ5dGUgc3RyZWFtLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlcy4zIGIvZGlzdDIvZG9jL3BjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjZTZhMQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlcy4zCkBAIC0wLDAgKzEsMzcgQEAKKy5USCBQQ1JFMl9TRVJJQUxJWkVfR0VUX05VTUJFUl9PRl9DT0RFUyAzICIxOSBKYW51YXJ5IDIwMTUiICJQQ1JFMiAxMC4xMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludDMyX3QgcGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXMoY29uc3QgdWludDhfdCAqXGZJYnl0ZXNcZlApOworLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGUgXGZJYnl0ZXNcZlAgYXJndW1lbnQgbXVzdCBwb2ludCB0byBhIHNlcmlhbGl6ZWQgYnl0ZSBzdHJlYW0gdGhhdCB3YXMKK29yaWdpbmFsbHkgY3JlYXRlZCBieSBcZkJwY3JlMl9zZXJpYWxpemVfZW5jb2RlKClcZlAgKHRob3VnaCBpdCBtYXkgaGF2ZSBiZWVuCitzYXZlZCBvbiBkaXNjIG9yIGVsc2V3aGVyZSBpbiB0aGUgbWVhbnRpbWUpLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mCitzZXJpYWxpemVkIHBhdHRlcm5zIGluIHRoZSBieXRlIHN0cmVhbSwgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IKK2NvZGVzOgorLnNwCisgIFBDUkUyX0VSUk9SX0JBRE1BR0lDICBtaXNtYXRjaCBvZiBpZCBieXRlcyBpbiBcZklieXRlc1xmUAorICBQQ1JFMl9FUlJPUl9CQURNT0RFICAgbWlzbWF0Y2ggb2YgdmFyaWFibGUgdW5pdCBzaXplIG9yIFBDUkUgdmVyc2lvbgorICBQQ1JFMl9FUlJPUl9OVUxMICAgICAgdGhlIGFyZ3VtZW50IGlzIE5VTEwKKy5zcAorUENSRTJfRVJST1JfQkFETUFHSUMgbWF5IG1lYW4gdGhhdCB0aGUgZGF0YSBpcyBjb3JydXB0LCBvciB0aGF0IGl0IHdhcyBjb21waWxlZAorb24gYSBzeXN0ZW0gd2l0aCBkaWZmZXJlbnQgZW5kaWFubmVzcy4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfc2V0X2Jzci4zIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9ic3IuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2YyNDM3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9ic3IuMwpAQCAtMCwwICsxLDMwIEBACisuVEggUENSRTJfU0VUX0JTUiAzICIyMiBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9zZXRfYnNyKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlAsCisuQiAiICB1aW50MzJfdCBcZkl2YWx1ZVxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIGNvbnZlbnRpb24gZm9yIHByb2Nlc3NpbmcgXGVSIHdpdGhpbiBhIGNvbXBpbGUgY29udGV4dC4KK1RoZSBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgUENSRTJfQlNSX0FOWUNSTEYgb3IgUENSRTJfQlNSX1VOSUNPREUuIFRoZQorcmVzdWx0IGlzIHplcm8gZm9yIHN1Y2Nlc3Mgb3IgUENSRTJfRVJST1JfQkFEREFUQSBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCitpbnZhbGlkLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9zZXRfY2FsbG91dC4zIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9jYWxsb3V0LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmY4NmY2OQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9zZXRfY2FsbG91dC4zCkBAIC0wLDAgKzEsMzEgQEAKKy5USCBQQ1JFMl9TRVRfQ0FMTE9VVCAzICIyNCBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9zZXRfY2FsbG91dChwY3JlMl9tYXRjaF9jb250ZXh0ICpcZkltY29udGV4dFxmUCwKKy5CICIgIGludCAoKlxmSWNhbGxvdXRfZnVuY3Rpb25cZlApKHBjcmUyX2NhbGxvdXRfYmxvY2sgKiksIgorLkIgIiAgdm9pZCAqXGZJY2FsbG91dF9kYXRhXGZQKTsiCisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gc2V0cyB0aGUgY2FsbG91dCBmaWVsZHMgaW4gYSBtYXRjaCBjb250ZXh0ICh0aGUgZmlyc3QgYXJndW1lbnQpLgorVGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgYSBjYWxsb3V0IGZ1bmN0aW9uLCBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIGFuCitvcGFxdWUgZGF0YSB0aW1lIHRoYXQgaXMgcGFzc2VkIHRvIGl0LiBUaGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzCit6ZXJvLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcy4zIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWVkZTRmOQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcy4zCkBAIC0wLDAgKzEsMzAgQEAKKy5USCBQQ1JFMl9TRVRfQ0hBUkFDVEVSX1RBQkxFUyAzICIyMiBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcyhwY3JlMl9jb21waWxlX2NvbnRleHQgKlxmSWNjb250ZXh0XGZQLAorLkIgIiAgY29uc3QgdW5zaWduZWQgY2hhciAqXGZJdGFibGVzXGZQKTsiCisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gc2V0cyBhIHBvaW50ZXIgdG8gY3VzdG9tIGNoYXJhY3RlciB0YWJsZXMgd2l0aGluIGEgY29tcGlsZQorY29udGV4dC4gVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIHRoZSByZXN1bHQgb2YgYSBjYWxsIHRvCitcZkJwY3JlMl9tYWtldGFibGVzKClcZlAgb3IgTlVMTCB0byByZXF1ZXN0IHRoZSBkZWZhdWx0IHRhYmxlcy4gVGhlIHJlc3VsdCBpcworYWx3YXlzIHplcm8uCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZC4zIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NzVmOTQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkLjMKQEAgLTAsMCArMSwzNCBAQAorLlRIIFBDUkUyX1NFVF9DT01QSUxFX1JFQ1VSU0lPTl9HVUFSRCAzICIyMiBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQocGNyZTJfY29tcGlsZV9jb250ZXh0ICpcZkljY29udGV4dFxmUCwKKy5CICIgIGludCAoKlxmSWd1YXJkX2Z1bmN0aW9uXGZQKSh1aW50MzJfdCwgdm9pZCAqKSwgdm9pZCAqXGZJdXNlcl9kYXRhXGZQKTsiCisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gZGVmaW5lcywgd2l0aGluIGEgY29tcGlsZSBjb250ZXh0LCBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkCit3aGVuZXZlciBcZkJwY3JlMl9jb21waWxlKClcZlAgc3RhcnRzIHRvIGNvbXBpbGUgYSBwYXJlbnRoZXNpemVkIHBhcnQgb2YgYQorcGF0dGVybi4gVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBmdW5jdGlvbiBnaXZlcyB0aGUgY3VycmVudCBkZXB0aCBvZgorcGFyZW50aGVzaXMgbmVzdGluZywgYW5kIHRoZSBzZWNvbmQgaXMgdXNlciBkYXRhIHRoYXQgaXMgc3VwcGxpZWQgd2hlbiB0aGUKK2Z1bmN0aW9uIGlzIHNldCB1cC4gVGhlIGNhbGxvdXQgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB6ZXJvIGlmIGFsbCBpcyB3ZWxsLCBvcgorbm9uLXplcm8gdG8gZm9yY2UgYW4gZXJyb3IuIFRoaXMgZmVhdHVyZSBpcyBwcm92aWRlZCBzbyB0aGF0IGFwcGxpY2F0aW9ucyBjYW4KK2NoZWNrIHRoZSBhdmFpbGFibGUgc3lzdGVtIHN0YWNrIHNwYWNlLCBpbiBvcmRlciB0byBhdm9pZCBydW5uaW5nIG91dC4gVGhlCityZXN1bHQgb2YgXGZCcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKClcZlAgaXMgYWx3YXlzIHplcm8uCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX3NldF9tYXRjaF9saW1pdC4zIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9tYXRjaF9saW1pdC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyM2U5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfc2V0X21hdGNoX2xpbWl0LjMKQEAgLTAsMCArMSwyOCBAQAorLlRIIFBDUkUyX1NFVF9NQVRDSF9MSU1JVCAzICIyNCBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9zZXRfbWF0Y2hfbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlAsCisuQiAiICB1aW50MzJfdCBcZkl2YWx1ZVxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG1hdGNoIGxpbWl0IGZpZWxkIGluIGEgbWF0Y2ggY29udGV4dC4gVGhlIHJlc3VsdCBpcworYWx3YXlzIHplcm8uCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX3NldF9uZXdsaW5lLjMgYi9kaXN0Mi9kb2MvcGNyZTJfc2V0X25ld2xpbmUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjM3NTAwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9uZXdsaW5lLjMKQEAgLTAsMCArMSwzOCBAQAorLlRIIFBDUkUyX1NFVF9ORVdMSU5FIDMgIjIyIE9jdG9iZXIgMjAxNCIgIlBDUkUyIDEwLjAwIgorLlNIIE5BTUUKK1BDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorLlNIIFNZTk9QU0lTCisucnMKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUyLmg+CisuUFAKKy5uZgorLkIgaW50IHBjcmUyX3NldF9uZXdsaW5lKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlAsCisuQiAiICB1aW50MzJfdCBcZkl2YWx1ZVxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG5ld2xpbmUgY29udmVudGlvbiB3aXRoaW4gYSBjb21waWxlIGNvbnRleHQuIFRoaXMKK3NwZWNpZmllcyB3aGljaCBjaGFyYWN0ZXIocykgYXJlIHJlY29nbml6ZWQgYXMgbmV3bGluZXMgd2hlbiBjb21waWxpbmcgYW5kCittYXRjaGluZyBwYXR0ZXJucy4gVGhlIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZjoKKy5zcAorICBQQ1JFMl9ORVdMSU5FX0NSICAgICAgICBDYXJyaWFnZSByZXR1cm4gb25seQorICBQQ1JFMl9ORVdMSU5FX0xGICAgICAgICBMaW5lZmVlZCBvbmx5CisgIFBDUkUyX05FV0xJTkVfQ1JMRiAgICAgIENSIGZvbGxvd2VkIGJ5IExGIG9ubHkKKyAgUENSRTJfTkVXTElORV9BTllDUkxGICAgQW55IG9mIHRoZSBhYm92ZQorICBQQ1JFMl9ORVdMSU5FX0FOWSAgICAgICBBbnkgVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlCisuc3AKK1RoZSByZXN1bHQgaXMgemVybyBmb3Igc3VjY2VzcyBvciBQQ1JFMl9FUlJPUl9CQUREQVRBIGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMKK2ludmFsaWQuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX3NldF9vZmZzZXRfbGltaXQuMyBiL2Rpc3QyL2RvYy9wY3JlMl9zZXRfb2Zmc2V0X2xpbWl0LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmYTEwNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9zZXRfb2Zmc2V0X2xpbWl0LjMKQEAgLTAsMCArMSwyOCBAQAorLlRIIFBDUkUyX1NFVF9PRkZTRVRfTElNSVQgMyAiMjIgU2VwdGVtYmVyIDIwMTUiICJQQ1JFMiAxMC4yMSIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKlxmSW1jb250ZXh0XGZQLAorLkIgIiAgUENSRTJfU0laRSBcZkl2YWx1ZVxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIG9mZnNldCBsaW1pdCBmaWVsZCBpbiBhIG1hdGNoIGNvbnRleHQuIFRoZSByZXN1bHQgaXMKK2Fsd2F5cyB6ZXJvLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQuMyBiL2Rpc3QyL2RvYy9wY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzY3NjE5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9wYXJlbnNfbmVzdF9saW1pdC4zCkBAIC0wLDAgKzEsMjggQEAKKy5USCBQQ1JFMl9TRVRfUEFSRU5TX05FU1RfTElNSVQgMyAiMjIgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQgcGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0KHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlAsCisuQiAiICB1aW50MzJfdCBcZkl2YWx1ZVxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIHNldHMsIGluIGEgY29tcGlsZSBjb250ZXh0LCB0aGUgbWF4aW11bSBkZXB0aCBvZiBuZXN0ZWQKK3BhcmVudGhlc2VzIGluIGEgcGF0dGVybi4gVGhlIHJlc3VsdCBpcyBhbHdheXMgemVyby4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdC4zIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9yZWN1cnNpb25fbGltaXQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjFmM2NkCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9yZWN1cnNpb25fbGltaXQuMwpAQCAtMCwwICsxLDI4IEBACisuVEggUENSRTJfU0VUX1JFQ1VSU0lPTl9MSU1JVCAzICIyNCBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9zZXRfcmVjdXJzaW9uX2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKlxmSW1jb250ZXh0XGZQLAorLkIgIiAgdWludDMyX3QgXGZJdmFsdWVcZlApOyIKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSByZWN1cnNpb24gbGltaXQgZmllbGQgaW4gYSBtYXRjaCBjb250ZXh0LiBUaGUgcmVzdWx0IGlzCithbHdheXMgemVyby4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfc2V0X3JlY3Vyc2lvbl9tZW1vcnlfbWFuYWdlbWVudC4zIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9yZWN1cnNpb25fbWVtb3J5X21hbmFnZW1lbnQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjU4ODdhCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3NldF9yZWN1cnNpb25fbWVtb3J5X21hbmFnZW1lbnQuMwpAQCAtMCwwICsxLDM1IEBACisuVEggUENSRTJfU0VUX1JFQ1VSU0lPTl9NRU1PUllfTUFOQUdFTUVOVCAzICIyNCBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50KAorLkIgIiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlAsIgorLkIgIiAgdm9pZCAqKCpcZklwcml2YXRlX21hbGxvY1xmUCkoUENSRTJfU0laRSwgdm9pZCAqKSwiCisuQiAiICB2b2lkICgqXGZJcHJpdmF0ZV9mcmVlXGZQKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKlxmSW1lbW9yeV9kYXRhXGZQKTsiCisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbWF0Y2ggY29udGV4dCBmaWVsZHMgZm9yIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCB3aGVuCitQQ1JFMiBpcyBjb21waWxlZCB0byB1c2UgdGhlIGhlYXAgaW5zdGVhZCBvZiB0aGUgc3lzdGVtIHN0YWNrIGZvciByZWN1cnNpdmUKK2Z1bmN0aW9uIGNhbGxzIHdoaWxlIG1hdGNoaW5nLiBXaGVuIFBDUkUyIGlzIGNvbXBpbGVkIHRvIHVzZSB0aGUgc3RhY2sgKHRoZQorZGVmYXVsdCkgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIG1hdGNoIGNvbnRleHQsIHRoZQorc2Vjb25kIGFuZCB0aGlyZCBzcGVjaWZ5IHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBmdW5jdGlvbnMsIGFuZCB0aGUKK2ZpbmFsIGFyZ3VtZW50IGlzIGFuIG9wYXF1ZSB2YWx1ZSB0aGF0IGlzIHBhc3NlZCB0byB0aGVtIHdoZW5ldmVyIHRoZXkgYXJlCitjYWxsZWQuIFRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBhbHdheXMgemVyby4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RpdHV0ZS4zIGIvZGlzdDIvZG9jL3BjcmUyX3N1YnN0aXR1dGUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjllMGNjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3N1YnN0aXR1dGUuMwpAQCAtMCwwICsxLDc4IEBACisuVEggUENSRTJfU1VCU1RJVFVURSAzICIxMiBEZWNlbWJlciAyMDE1IiAiUENSRTIgMTAuMjEiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQgcGNyZTJfc3Vic3RpdHV0ZShjb25zdCBwY3JlMl9jb2RlICpcZkljb2RlXGZQLCBQQ1JFMl9TUFRSIFxmSXN1YmplY3RcZlAsCisuQiAiICBQQ1JFMl9TSVpFIFxmSWxlbmd0aFxmUCwgUENSRTJfU0laRSBcZklzdGFydG9mZnNldFxmUCwiCisuQiAiICB1aW50MzJfdCBcZklvcHRpb25zXGZQLCBwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQLCIKKy5CICIgIHBjcmUyX21hdGNoX2NvbnRleHQgKlxmSW1jb250ZXh0XGZQLCBQQ1JFMl9TUFRSIFxmSXJlcGxhY2VtZW50XGZQLCIKKy5CICIgIFBDUkUyX1NJWkUgXGZJcmxlbmd0aFxmUCwgUENSRTJfVUNIQVIgKlxmSW91dHB1dGJ1ZmZlclxmUCwiCisuQiAiICBQQ1JFMl9TSVpFICpcZklvdXRsZW5ndGhwdHJcZlApOyIKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBmdW5jdGlvbiBtYXRjaGVzIGEgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uIGFnYWluc3QgYSBnaXZlbiBzdWJqZWN0CitzdHJpbmcsIHVzaW5nIGEgbWF0Y2hpbmcgYWxnb3JpdGhtIHRoYXQgaXMgc2ltaWxhciB0byBQZXJsJ3MuIEl0IHRoZW4gbWFrZXMgYQorY29weSBvZiB0aGUgc3ViamVjdCwgc3Vic3RpdHV0aW5nIGEgcmVwbGFjZW1lbnQgc3RyaW5nIGZvciB3aGF0IHdhcyBtYXRjaGVkLgorSXRzIGFyZ3VtZW50cyBhcmU6Cisuc3AKKyAgXGZJY29kZVxmUCAgICAgICAgICBQb2ludHMgdG8gdGhlIGNvbXBpbGVkIHBhdHRlcm4KKyAgXGZJc3ViamVjdFxmUCAgICAgICBQb2ludHMgdG8gdGhlIHN1YmplY3Qgc3RyaW5nCisgIFxmSWxlbmd0aFxmUCAgICAgICAgTGVuZ3RoIG9mIHRoZSBzdWJqZWN0IHN0cmluZworICBcZklzdGFydG9mZnNldFxmUCAgIE9mZnNldCBpbiB0aGUgc3ViamVjdCBhdCB3aGljaCB0byBzdGFydCBtYXRjaGluZworICBcZklvcHRpb25zXGZQICAgICAgIE9wdGlvbiBiaXRzCisgIFxmSW1hdGNoX2RhdGFcZlAgICAgUG9pbnRzIHRvIGEgbWF0Y2ggZGF0YSBibG9jaywgb3IgaXMgTlVMTAorICBcZkltY29udGV4dFxmUCAgICAgIFBvaW50cyB0byBhIG1hdGNoIGNvbnRleHQsIG9yIGlzIE5VTEwKKyAgXGZJcmVwbGFjZW1lbnRcZlAgICBQb2ludHMgdG8gdGhlIHJlcGxhY2VtZW50IHN0cmluZworICBcZklybGVuZ3RoXGZQICAgICAgIExlbmd0aCBvZiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nCisgIFxmSW91dHB1dGJ1ZmZlclxmUCAgUG9pbnRzIHRvIHRoZSBvdXRwdXQgYnVmZmVyCisgIFxmSW91dGxlbmd0aHB0clxmUCAgUG9pbnRzIHRvIHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dCBidWZmZXIKKy5zcAorQSBtYXRjaCBjb250ZXh0IGlzIG5lZWRlZCBvbmx5IGlmIHlvdSB3YW50IHRvOgorLnNwCisgIFNldCB1cCBhIGNhbGxvdXQgZnVuY3Rpb24KKyAgQ2hhbmdlIHRoZSBsaW1pdCBmb3IgY2FsbGluZyB0aGUgaW50ZXJuYWwgZnVuY3Rpb24gXGZJbWF0Y2goKVxmUAorICBDaGFuZ2UgdGhlIGxpbWl0IGZvciBjYWxsaW5nIFxmSW1hdGNoKClcZlAgcmVjdXJzaXZlbHkKKyAgU2V0IGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCB3aGVuIHRoZSBoZWFwIGlzIHVzZWQgZm9yIHJlY3Vyc2lvbgorLnNwCitUaGUgXGZJbGVuZ3RoXGZQLCBcZklzdGFydG9mZnNldFxmUCBhbmQgXGZJcmxlbmd0aFxmUCB2YWx1ZXMgYXJlIGNvZGUKK3VuaXRzLCBub3QgY2hhcmFjdGVycywgYXMgaXMgdGhlIGNvbnRlbnRzIG9mIHRoZSB2YXJpYWJsZSBwb2ludGVkIGF0IGJ5CitcZklvdXRsZW5ndGhwdHJcZlAsIHdoaWNoIGlzIHVwZGF0ZWQgdG8gdGhlIGFjdHVhbCBsZW5ndGggb2YgdGhlIG5ldyBzdHJpbmcuCitUaGUgb3B0aW9ucyBhcmU6Cisuc3AKKyAgUENSRTJfQU5DSE9SRUQgICAgICAgICAgICAgTWF0Y2ggb25seSBhdCB0aGUgZmlyc3QgcG9zaXRpb24KKyAgUENSRTJfTk9UQk9MICAgICAgICAgICAgICAgU3ViamVjdCBpcyBub3QgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUKKyAgUENSRTJfTk9URU9MICAgICAgICAgICAgICAgU3ViamVjdCBpcyBub3QgdGhlIGVuZCBvZiBhIGxpbmUKKyAgUENSRTJfTk9URU1QVFkgICAgICAgICAgICAgQW4gZW1wdHkgc3RyaW5nIGlzIG5vdCBhIHZhbGlkIG1hdGNoCisgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQgICAgIEFuIGVtcHR5IHN0cmluZyBhdCB0aGUgc3RhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0IGlzIG5vdCBhIHZhbGlkIG1hdGNoCisgIFBDUkUyX05PX1VURl9DSEVDSyAgICAgICAgIERvIG5vdCBjaGVjayB0aGUgc3ViamVjdCBvciByZXBsYWNlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFVURiB2YWxpZGl0eSAob25seSByZWxldmFudCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfVVRGIHdhcyBzZXQgYXQgY29tcGlsZSB0aW1lKQorICBQQ1JFMl9TVUJTVElUVVRFX0VYVEVOREVEICBEbyBleHRlbmRlZCByZXBsYWNlbWVudCBwcm9jZXNzaW5nCisgIFBDUkUyX1NVQlNUSVRVVEVfR0xPQkFMICAgIFJlcGxhY2UgYWxsIG9jY3VycmVuY2VzIGluIHRoZSBzdWJqZWN0CisgIFBDUkUyX1NVQlNUSVRVVEVfT1ZFUkZMT1dfTEVOR1RIICBJZiBvdmVyZmxvdywgY29tcHV0ZSBuZWVkZWQgbGVuZ3RoCisgIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCAgVHJlYXQgdW5rbm93biBncm91cCBhcyB1bnNldAorICBQQ1JFMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZICBTaW1wbGUgdW5zZXQgaW5zZXJ0ID0gZW1wdHkgc3RyaW5nCisuc3AKK1RoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucywgd2hpY2ggbWF5IGJlIHplcm8gaWYgdGhlcmUKK3dlcmUgbm8gbWF0Y2hlcy4gVGhlIHJlc3VsdCBjYW4gYmUgZ3JlYXRlciB0aGFuIG9uZSBvbmx5IHdoZW4KK1BDUkUyX1NVQlNUSVRVVEVfR0xPQkFMIGlzIHNldC4gSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKK2lzIHJldHVybmVkLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUuMyBiL2Rpc3QyL2RvYy9wY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmFmNjNiCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZS4zCkBAIC0wLDAgKzEsNDYgQEAKKy5USCBQQ1JFMl9TVUJTVFJJTkdfQ09QWV9CWU5BTUUgMyAiMjEgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsCisuQiAiICBQQ1JFMl9TUFRSIFxmSW5hbWVcZlAsIFBDUkUyX1VDSEFSICpcZklidWZmZXJcZlAsIFBDUkUyX1NJWkUgKlxmSWJ1ZmZsZW5cZlApOyIKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBleHRyYWN0aW5nIGEgY2FwdHVyZWQgc3Vic3RyaW5nLCBpZGVudGlmaWVkCitieSBuYW1lLCBpbnRvIGEgZ2l2ZW4gYnVmZmVyLiBUaGUgYXJndW1lbnRzIGFyZToKKy5zcAorICBcZkltYXRjaF9kYXRhXGZQICAgIFRoZSBtYXRjaCBkYXRhIGJsb2NrIGZvciB0aGUgbWF0Y2gKKyAgXGZJbmFtZVxmUCAgICAgICAgICBOYW1lIG9mIHRoZSByZXF1aXJlZCBzdWJzdHJpbmcKKyAgXGZJYnVmZmVyXGZQICAgICAgICBCdWZmZXIgdG8gcmVjZWl2ZSB0aGUgc3RyaW5nCisgIFxmSWJ1ZmZsZW5cZlAgICAgICAgTGVuZ3RoIG9mIGJ1ZmZlciAoY29kZSB1bml0cykKKy5zcAorVGhlIFxmSWJ1ZmZsZW5cZlAgdmFyaWFibGUgaXMgdXBkYXRlZCB0byBjb250YWluIHRoZSBsZW5ndGggb2YgdGhlIGV4dHJhY3RlZAorc3RyaW5nLCBleGNsdWRpbmcgdGhlIHRyYWlsaW5nIHplcm8uIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgemVybyBmb3IKK3N1Y2Nlc3Mgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgZXJyb3IgbnVtYmVyczoKKy5zcAorICBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORyAgIHRoZXJlIGFyZSBubyBncm91cHMgb2YgdGhhdCBuYW1lCisgIFBDUkUyX0VSUk9SX1VOQVZBSUxCTEUgICAgdGhlIG92ZWN0b3Igd2FzIHRvbyBzbWFsbCBmb3IgdGhhdCBncm91cAorICBQQ1JFMl9FUlJPUl9VTlNFVCAgICAgICAgIHRoZSBncm91cCBkaWQgbm90IHBhcnRpY2lwYXRlIGluIHRoZSBtYXRjaAorICBQQ1JFMl9FUlJPUl9OT01FTU9SWSAgICAgIHRoZSBidWZmZXIgaXMgbm90IGJpZyBlbm91Z2gKKy5zcAorSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBncm91cCB3aXRoIHRoZSBnaXZlbiBuYW1lLCB0aGUgZmlyc3Qgb25lIHRoYXQgaXMgc2V0CitpcyByZXR1cm5lZC4gSW4gdGhpcyBzaXR1YXRpb24gUENSRTJfRVJST1JfVU5TRVQgbWVhbnMgdGhhdCBubyBncm91cCB3aXRoIHRoZQorZ2l2ZW4gbmFtZSB3YXMgc2V0LgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlci4zIGIvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGNlZTJiNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlci4zCkBAIC0wLDAgKzEsNDQgQEAKKy5USCBQQ1JFMl9TVUJTVFJJTkdfQ09QWV9CWU5VTUJFUiAzICIxMyBEZWNlbWJlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCwKKy5CICIgIHVpbnQzMl90IFxmSW51bWJlclxmUCwgUENSRTJfVUNIQVIgKlxmSWJ1ZmZlclxmUCwiCisuQiAiICBQQ1JFMl9TSVpFICpcZklidWZmbGVuXGZQKTsiCisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZXh0cmFjdGluZyBhIGNhcHR1cmVkIHN1YnN0cmluZyBpbnRvIGEgZ2l2ZW4KK2J1ZmZlci4gVGhlIGFyZ3VtZW50cyBhcmU6Cisuc3AKKyAgXGZJbWF0Y2hfZGF0YVxmUCAgICBUaGUgbWF0Y2ggZGF0YSBibG9jayBmb3IgdGhlIG1hdGNoCisgIFxmSW51bWJlclxmUCAgICAgICAgTnVtYmVyIG9mIHRoZSByZXF1aXJlZCBzdWJzdHJpbmcKKyAgXGZJYnVmZmVyXGZQICAgICAgICBCdWZmZXIgdG8gcmVjZWl2ZSB0aGUgc3RyaW5nCisgIFxmSWJ1ZmZsZW5cZlAgICAgICAgTGVuZ3RoIG9mIGJ1ZmZlcgorLnNwCitUaGUgXGZJYnVmZmxlblxmUCB2YXJpYWJsZSBpcyB1cGRhdGVkIHdpdGggdGhlIGxlbmd0aCBvZiB0aGUgZXh0cmFjdGVkIHN0cmluZywKK2V4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgemVyby4gVGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyB6ZXJvIGZvciBzdWNjZXNzCitvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBlcnJvciBudW1iZXJzOgorLnNwCisgIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HICAgdGhlcmUgYXJlIG5vIGdyb3VwcyBvZiB0aGF0IG51bWJlcgorICBQQ1JFMl9FUlJPUl9VTkFWQUlMQkxFICAgIHRoZSBvdmVjdG9yIHdhcyB0b28gc21hbGwgZm9yIHRoYXQgZ3JvdXAKKyAgUENSRTJfRVJST1JfVU5TRVQgICAgICAgICB0aGUgZ3JvdXAgZGlkIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgbWF0Y2gKKyAgUENSRTJfRVJST1JfTk9NRU1PUlkgICAgICB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbAorLnNwCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19mcmVlLjMgYi9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RyaW5nX2ZyZWUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTk0ZTc4Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19mcmVlLjMKQEAgLTAsMCArMSwyOCBAQAorLlRIIFBDUkUyX1NVQlNUUklOR19GUkVFIDMgIjIxIE9jdG9iZXIgMjAxNCIgIlBDUkUyIDEwLjAwIgorLlNIIE5BTUUKK1BDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorLlNIIFNZTk9QU0lTCisucnMKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUyLmg+CisuUFAKKy5TTQorLkIgdm9pZCBwY3JlMl9zdWJzdHJpbmdfZnJlZShQQ1JFMl9VQ0hBUiAqXGZJYnVmZmVyXGZQKTsKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZnJlZWluZyB0aGUgbWVtb3J5IG9idGFpbmVkIGJ5IGEgcHJldmlvdXMKK2NhbGwgdG8gXGZCcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUoKVxmUCBvcgorXGZCcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcigpXGZQLiBJdHMgb25seSBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlCitzdHJpbmcuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lLjMgYi9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzNmN2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lLjMKQEAgLTAsMCArMSw0OCBAQAorLlRIIFBDUkUyX1NVQlNUUklOR19HRVRfQllOQU1FIDMgIjIxIE9jdG9iZXIgMjAxNCIgIlBDUkUyIDEwLjAwIgorLlNIIE5BTUUKK1BDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorLlNIIFNZTk9QU0lTCisucnMKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUyLmg+CisuUFAKKy5uZgorLkIgaW50IHBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsCisuQiAiICBQQ1JFMl9TUFRSIFxmSW5hbWVcZlAsIFBDUkUyX1VDSEFSICoqXGZJYnVmZmVycHRyXGZQLCBQQ1JFMl9TSVpFICpcZklidWZmbGVuXGZQKTsiCisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZXh0cmFjdGluZyBhIGNhcHR1cmVkIHN1YnN0cmluZyBieSBuYW1lIGludG8KK25ld2x5IGFjcXVpcmVkIG1lbW9yeS4gVGhlIGFyZ3VtZW50cyBhcmU6Cisuc3AKKyAgXGZJbWF0Y2hfZGF0YVxmUCAgICBUaGUgbWF0Y2ggZGF0YSBmb3IgdGhlIG1hdGNoCisgIFxmSW5hbWVcZlAgICAgICAgICAgTmFtZSBvZiB0aGUgcmVxdWlyZWQgc3Vic3RyaW5nCisgIFxmSWJ1ZmZlcnB0clxmUCAgICAgV2hlcmUgdG8gcHV0IHRoZSBzdHJpbmcgcG9pbnRlcgorICBcZklidWZmbGVuXGZQICAgICAgIFdoZXJlIHRvIHB1dCB0aGUgc3RyaW5nIGxlbmd0aAorLnNwCitUaGUgbWVtb3J5IGluIHdoaWNoIHRoZSBzdWJzdHJpbmcgaXMgcGxhY2VkIGlzIG9idGFpbmVkIGJ5IGNhbGxpbmcgdGhlIHNhbWUKK21lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQgd2FzIHVzZWQgZm9yIHRoZSBtYXRjaCBkYXRhIGJsb2NrLiBUaGUKK2NvbnZlbmllbmNlIGZ1bmN0aW9uIFxmQnBjcmUyX3N1YnN0cmluZ19mcmVlKClcZlAgY2FuIGJlIHVzZWQgdG8gZnJlZSBpdCB3aGVuCitpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBUaGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIHplcm8gZm9yIHN1Y2Nlc3Mgb3Igb25lIG9mCit0aGUgZm9sbG93aW5nIGVycm9yIG51bWJlcnM6Cisuc3AKKyAgUENSRTJfRVJST1JfTk9TVUJTVFJJTkcgICB0aGVyZSBhcmUgbm8gZ3JvdXBzIG9mIHRoYXQgbmFtZQorICBQQ1JFMl9FUlJPUl9VTkFWQUlMQkxFICAgIHRoZSBvdmVjdG9yIHdhcyB0b28gc21hbGwgZm9yIHRoYXQgZ3JvdXAKKyAgUENSRTJfRVJST1JfVU5TRVQgICAgICAgICB0aGUgZ3JvdXAgZGlkIG5vdCBwYXJ0aWNpcGF0ZSBpbiB0aGUgbWF0Y2gKKyAgUENSRTJfRVJST1JfTk9NRU1PUlkgICAgICBtZW1vcnkgY291bGQgbm90IGJlIG9idGFpbmVkCisuc3AKK0lmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZ3JvdXAgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgdGhlIGZpcnN0IG9uZSB0aGF0IGlzIHNldAoraXMgcmV0dXJuZWQuIEluIHRoaXMgc2l0dWF0aW9uIFBDUkUyX0VSUk9SX1VOU0VUIG1lYW5zIHRoYXQgbm8gZ3JvdXAgd2l0aCB0aGUKK2dpdmVuIG5hbWUgd2FzIHNldC4KKy5QCitUaGVyZSBpcyBhIGNvbXBsZXRlIGRlc2NyaXB0aW9uIG9mIHRoZSBQQ1JFMiBuYXRpdmUgQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlci4zIGIvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWI2YTA0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIuMwpAQCAtMCwwICsxLDQ1IEBACisuVEggUENSRTJfU1VCU1RSSU5HX0dFVF9CWU5VTUJFUiAzICIxMyBEZWNlbWJlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQLAorLkIgIiAgdWludDMyX3QgXGZJbnVtYmVyXGZQLCBQQ1JFMl9VQ0hBUiAqKlxmSWJ1ZmZlcnB0clxmUCwgUENSRTJfU0laRSAqXGZJYnVmZmxlblxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGV4dHJhY3RpbmcgYSBjYXB0dXJlZCBzdWJzdHJpbmcgYnkgbnVtYmVyCitpbnRvIG5ld2x5IGFjcXVpcmVkIG1lbW9yeS4gVGhlIGFyZ3VtZW50cyBhcmU6Cisuc3AKKyAgXGZJbWF0Y2hfZGF0YVxmUCAgICBUaGUgbWF0Y2ggZGF0YSBmb3IgdGhlIG1hdGNoCisgIFxmSW51bWJlclxmUCAgICAgICAgTnVtYmVyIG9mIHRoZSByZXF1aXJlZCBzdWJzdHJpbmcKKyAgXGZJYnVmZmVycHRyXGZQICAgICBXaGVyZSB0byBwdXQgdGhlIHN0cmluZyBwb2ludGVyCisgIFxmSWJ1ZmZsZW5cZlAgICAgICAgV2hlcmUgdG8gcHV0IHRoZSBzdHJpbmcgbGVuZ3RoCisuc3AKK1RoZSBtZW1vcnkgaW4gd2hpY2ggdGhlIHN1YnN0cmluZyBpcyBwbGFjZWQgaXMgb2J0YWluZWQgYnkgY2FsbGluZyB0aGUgc2FtZQorbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24gdGhhdCB3YXMgdXNlZCBmb3IgdGhlIG1hdGNoIGRhdGEgYmxvY2suIFRoZQorY29udmVuaWVuY2UgZnVuY3Rpb24gXGZCcGNyZTJfc3Vic3RyaW5nX2ZyZWUoKVxmUCBjYW4gYmUgdXNlZCB0byBmcmVlIGl0IHdoZW4KK2l0IGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgemVybyBmb3Igc3VjY2VzcyBvciBvbmUgb2YKK3RoZSBmb2xsb3dpbmcgZXJyb3IgbnVtYmVyczoKKy5zcAorICBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORyAgIHRoZXJlIGFyZSBubyBncm91cHMgb2YgdGhhdCBudW1iZXIKKyAgUENSRTJfRVJST1JfVU5BVkFJTEJMRSAgICB0aGUgb3ZlY3RvciB3YXMgdG9vIHNtYWxsIGZvciB0aGF0IGdyb3VwCisgIFBDUkUyX0VSUk9SX1VOU0VUICAgICAgICAgdGhlIGdyb3VwIGRpZCBub3QgcGFydGljaXBhdGUgaW4gdGhlIG1hdGNoCisgIFBDUkUyX0VSUk9SX05PTUVNT1JZICAgICAgbWVtb3J5IGNvdWxkIG5vdCBiZSBvYnRhaW5lZAorLnNwCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lLjMgYi9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGNkYzZhCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lLjMKQEAgLTAsMCArMSwzNCBAQAorLlRIIFBDUkUyX1NVQlNUUklOR19MRU5HVEhfQllOQU1FIDMgIjIxIE9jdG9iZXIgMjAxNCIgIlBDUkUyIDEwLjAwIgorLlNIIE5BTUUKK1BDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorLlNIIFNZTk9QU0lTCisucnMKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUyLmg+CisuUFAKKy5uZgorLkIgaW50IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsCisuQiAiICBQQ1JFMl9TUFRSIFxmSW5hbWVcZlAsIFBDUkUyX1NJWkUgKlxmSWxlbmd0aFxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiBhIG1hdGNoZWQgc3Vic3RyaW5nLCBpZGVudGlmaWVkIGJ5IG5hbWUuCitUaGUgYXJndW1lbnRzIGFyZToKKy5zcAorICBcZkltYXRjaF9kYXRhXGZQICAgVGhlIG1hdGNoIGRhdGEgYmxvY2sgZm9yIHRoZSBtYXRjaAorICBcZkluYW1lXGZQICAgICAgICAgVGhlIHN1YnN0cmluZyBuYW1lCisgIFxmSWxlbmd0aFxmUCAgICAgICBXaGVyZSB0byByZXR1cm4gdGhlIGxlbmd0aAorLnNwCitUaGUgeWllbGQgaXMgemVybyBvbiBzdWNjZXNzLCBvciBhbiBlcnJvciBjb2RlIGlmIHRoZSBzdWJzdHJpbmcgaXMgbm90IGZvdW5kLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyLjMgYi9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlci4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyNzc4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlci4zCkBAIC0wLDAgKzEsMzYgQEAKKy5USCBQQ1JFMl9TVUJTVFJJTkdfTEVOR1RIX0JZTlVNQkVSIDMgIjIyIERlY2VtYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsCisuQiAiICB1aW50MzJfdCBcZkludW1iZXJcZlAsIFBDUkUyX1NJWkUgKlxmSWxlbmd0aFxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiBhIG1hdGNoZWQgc3Vic3RyaW5nLCBpZGVudGlmaWVkIGJ5IG51bWJlci4KK1RoZSBhcmd1bWVudHMgYXJlOgorLnNwCisgIFxmSW1hdGNoX2RhdGFcZlAgICBUaGUgbWF0Y2ggZGF0YSBibG9jayBmb3IgdGhlIG1hdGNoCisgIFxmSW51bWJlclxmUCAgICAgICBUaGUgc3Vic3RyaW5nIG51bWJlcgorICBcZklsZW5ndGhcZlAgICAgICAgV2hlcmUgdG8gcmV0dXJuIHRoZSBsZW5ndGgsIG9yIE5VTEwKKy5zcAorVGhlIHRoaXJkIGFyZ3VtZW50IG1heSBiZSBOVUxMIGlmIGFsbCB5b3Ugd2FudCB0byBrbm93IGlzIHdoZXRoZXIgb3Igbm90IGEKK3N1YnN0cmluZyBpcyBzZXQuIFRoZSB5aWVsZCBpcyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorb3RoZXJ3aXNlLiBBZnRlciBhIHBhcnRpYWwgbWF0Y2gsIG9ubHkgc3Vic3RyaW5nIDAgaXMgYXZhaWxhYmxlLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlLjMgYi9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MjVmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZS4zCkBAIC0wLDAgKzEsMjcgQEAKKy5USCBQQ1JFMl9TVUJTVFJJTkdfTElTVF9GUkVFIDMgIjIxIE9jdG9iZXIgMjAxNCIgIlBDUkUyIDEwLjAwIgorLlNIIE5BTUUKK1BDUkUyIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorLlNIIFNZTk9QU0lTCisucnMKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUyLmg+CisuUFAKKy5TTQorLkIgdm9pZCBwY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlKFBDUkUyX1NQVFIgKlxmSWxpc3RcZlApOworLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBmcmVlaW5nIHRoZSBzdG9yZSBvYnRhaW5lZCBieSBhIHByZXZpb3VzCitjYWxsIHRvIFxmQnBjcmUyc3Vic3RyaW5nX2xpc3RfZ2V0KClcZlAuIEl0cyBvbmx5IGFyZ3VtZW50IGlzIGEgcG9pbnRlciB0bwordGhlIGxpc3Qgb2Ygc3RyaW5nIHBvaW50ZXJzLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQuMyBiL2Rpc3QyL2RvYy9wY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGM0MDBlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19saXN0X2dldC4zCkBAIC0wLDAgKzEsNDQgQEAKKy5USCBQQ1JFMl9TVUJTVFJJTkdfTElTVF9HRVQgMyAiMjEgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0KHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsCisuQiAiICBQQ1JFMl9VQ0hBUiAqKipcZklsaXN0cHRyXGZQLCBQQ1JFMl9TSVpFICoqXGZJbGVuZ3Roc3B0clxmUCk7CisuZmkKKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1RoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZXh0cmFjdGluZyBhbGwgdGhlIGNhcHR1cmVkIHN1YnN0cmluZ3MgYWZ0ZXIKK2EgcGF0dGVybiBtYXRjaC4gSXQgYnVpbGRzIGEgbGlzdCBvZiBwb2ludGVycyB0byB0aGUgc3RyaW5ncywgYW5kIChvcHRpb25hbGx5KQorYSBzZWNvbmQgbGlzdCB0aGF0IGNvbnRhaW5zIHRoZWlyIGxlbmd0aHMgKGluIGNvZGUgdW5pdHMpLCBleGNsdWRpbmcgYQordGVybWluYXRpbmcgemVybyB0aGF0IGlzIGFkZGVkIHRvIGVhY2ggb2YgdGhlbS4gQWxsIHRoaXMgaXMgZG9uZSBpbiBhIHNpbmdsZQorYmxvY2sgb2YgbWVtb3J5IHRoYXQgaXMgb2J0YWluZWQgdXNpbmcgdGhlIHNhbWUgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb24gdGhhdAord2FzIHVzZWQgdG8gZ2V0IHRoZSBtYXRjaCBkYXRhIGJsb2NrLiBUaGUgY29udmVuaWVuY2UgZnVuY3Rpb24KK1xmQnBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUoKVxmUCBjYW4gYmUgdXNlZCB0byBmcmVlIGl0IHdoZW4gaXQgaXMgbm8gbG9uZ2VyCituZWVkZWQuIFRoZSBhcmd1bWVudHMgYXJlOgorLnNwCisgIFxmSW1hdGNoX2RhdGFcZlAgICAgVGhlIG1hdGNoIGRhdGEgYmxvY2sKKyAgXGZJbGlzdHB0clxmUCAgICAgICBXaGVyZSB0byBwdXQgYSBwb2ludGVyIHRvIHRoZSBsaXN0CisgIFxmSWxlbmd0aHNwdHJcZlAgICAgV2hlcmUgdG8gcHV0IGEgcG9pbnRlciB0byB0aGUgbGVuZ3Rocywgb3IgTlVMTAorLnNwCitBIHBvaW50ZXIgdG8gYSBsaXN0IG9mIHBvaW50ZXJzIGlzIHB1dCBpbiB0aGUgdmFyaWFibGUgd2hvc2UgYWRkcmVzcyBpcyBpbgorXGZJbGlzdHB0clxmUC4gVGhlIGxpc3QgaXMgdGVybWluYXRlZCBieSBhIE5VTEwgcG9pbnRlci4gSWYgXGZJbGVuZ3Roc3B0clxmUCBpcworbm90IE5VTEwsIGEgbWF0Y2hpbmcgbGlzdCBvZiBsZW5ndGhzIGlzIGNyZWF0ZWQsIGFuZCBpdHMgYWRkcmVzcyBpcyBwbGFjZWQgaW4KK1xmSWxlbmd0aHNwdHJcZlAuIFRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgemVybyBvbiBzdWNjZXNzIG9yCitQQ1JFMl9FUlJPUl9OT01FTU9SWSBpZiBzdWZmaWNpZW50IG1lbW9yeSBjb3VsZCBub3QgYmUgb2J0YWluZWQuCisuUAorVGhlcmUgaXMgYSBjb21wbGV0ZSBkZXNjcmlwdGlvbiBvZiB0aGUgUENSRTIgbmF0aXZlIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitwYWdlIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBQT1NJWCBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwb3NpeFxmUAorLlwiCitwYWdlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2Nhbi4zIGIvZGlzdDIvZG9jL3BjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2Nhbi4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDJmOTgKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuLjMKQEAgLTAsMCArMSw0MSBAQAorLlRIIFBDUkUyX1NVQlNUUklOR19OQU1FVEFCTEVfU0NBTiAzICIyMSBPY3RvYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisubmYKKy5CIGludCBwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4oY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCwKKy5CICIgIFBDUkUyX1NQVFIgXGZJbmFtZVxmUCwgUENSRTJfU1BUUiAqXGZJZmlyc3RcZlAsIFBDUkUyX1NQVFIgKlxmSWxhc3RcZlApOyIKKy5maQorLgorLlNIIERFU0NSSVBUSU9OCisucnMKKy5zcAorVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiBmaW5kcywgZm9yIGEgY29tcGlsZWQgcGF0dGVybiwgdGhlIGZpcnN0IGFuZCBsYXN0CitlbnRyaWVzIGZvciBhIGdpdmVuIG5hbWUgaW4gdGhlIHRhYmxlIHRoYXQgdHJhbnNsYXRlcyBjYXB0dXJpbmcgcGFyZW50aGVzaXMKK25hbWVzIGludG8gbnVtYmVycy4KKy5zcAorICBcZkljb2RlXGZQICAgIENvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbgorICBcZkluYW1lXGZQICAgIE5hbWUgd2hvc2UgZW50cmllcyByZXF1aXJlZAorICBcZklmaXJzdFxmUCAgIFdoZXJlIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGVudHJ5CisgIFxmSWxhc3RcZlAgICAgV2hlcmUgdG8gcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgbGFzdCBlbnRyeQorLnNwCitXaGVuIHRoZSBuYW1lIGlzIGZvdW5kIGluIHRoZSB0YWJsZSwgaWYgXGZJZmlyc3RcZlAgaXMgTlVMTCwgdGhlIGZ1bmN0aW9uCityZXR1cm5zIGEgZ3JvdXAgbnVtYmVyLCBidXQgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyBlbnRyeSwgaXQgaXMgbm90CitkZWZpbmVkIHdoaWNoIG9uZS4gT3RoZXJ3aXNlLCB3aGVuIGJvdGggcG9pbnRlcnMgaGF2ZSBiZWVuIHNldCwgdGhlIHlpZWxkIG9mCit0aGUgZnVuY3Rpb24gaXMgdGhlIGxlbmd0aCBvZiBlYWNoIGVudHJ5IGluIGNvZGUgdW5pdHMuIElmIHRoZSBuYW1lIGlzIG5vdAorZm91bmQsIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HIGlzIHJldHVybmVkLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEksIGluY2x1ZGluZyB0aGUgZm9ybWF0IG9mCit0aGUgdGFibGUgZW50cmllcywgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSwgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIFBPU0lYIEFQSSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK3BhZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUuMyBiL2Rpc3QyL2RvYy9wY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNzdiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUuMwpAQCAtMCwwICsxLDM4IEBACisuVEggUENSRTJfU1VCU1RSSU5HX05VTUJFUl9GUk9NX05BTUUgMyAiMjEgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggU1lOT1BTSVMKKy5ycworLnNwCisuQiAjaW5jbHVkZSA8cGNyZTIuaD4KKy5QUAorLm5mCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUoY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCwKKy5CICIgIFBDUkUyX1NQVFIgXGZJbmFtZVxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZpbmRzIHRoZSBudW1iZXIgb2YgYSBuYW1lZCBzdWJzdHJpbmcgY2FwdHVyaW5nCitwYXJlbnRoZXNpcyBpbiBhIGNvbXBpbGVkIHBhdHRlcm4sIHByb3ZpZGVkIHRoYXQgaXQgaXMgYSB1bmlxdWUgbmFtZS4gVGhlCitmdW5jdGlvbiBhcmd1bWVudHMgYXJlOgorLnNwCisgIFxmSWNvZGVcZlAgICAgQ29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uCisgIFxmSW5hbWVcZlAgICAgTmFtZSB3aG9zZSBudW1iZXIgaXMgcmVxdWlyZWQKKy5zcAorVGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyB0aGUgbnVtYmVyIG9mIHRoZSBwYXJlbnRoZXNpcyBpZiB0aGUgbmFtZSBpcworZm91bmQsIG9yIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HIGlmIGl0IGlzIG5vdCBmb3VuZC4gV2hlbiBkdXBsaWNhdGUgbmFtZXMgYXJlCithbGxvd2VkIChQQ1JFMl9EVVBOQU1FUyBpcyBzZXQpLCBpZiB0aGUgbmFtZSBpcyBub3QgdW5pcXVlLAorUENSRTJfRVJST1JfTk9VTklRVUVTVUJTVFJJTkcgaXMgcmV0dXJuZWQuIFlvdSBjYW4gb2J0YWluIHRoZSBsaXN0IG9mIG51bWJlcnMKK3dpdGggdGhlIHNhbWUgbmFtZSBieSBjYWxsaW5nIFxmQnBjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2NhbigpXGZQLgorLlAKK1RoZXJlIGlzIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlIFBDUkUyIG5hdGl2ZSBBUEkgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9TSVggQVBJIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycG9zaXhcZlAKKy5cIgorcGFnZS4KZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMmFwaS4zIGIvZGlzdDIvZG9jL3BjcmUyYXBpLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI5ZjdiMAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMmFwaS4zCkBAIC0wLDAgKzEsMzE3MSBAQAorLlRIIFBDUkUyQVBJIDMgIjE2IERlY2VtYmVyIDIwMTUiICJQQ1JFMiAxMC4yMSIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUyLmg+Cisuc3AKK1BDUkUyIGlzIGEgbmV3IEFQSSBmb3IgUENSRS4gVGhpcyBkb2N1bWVudCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIGFsbCBpdHMKK2Z1bmN0aW9ucy4gU2VlIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyXGZQCisuXCIKK2RvY3VtZW50IGZvciBhbiBvdmVydmlldyBvZiBhbGwgdGhlIFBDUkUyIGRvY3VtZW50YXRpb24uCisuCisuCisuU0ggIlBDUkUyIE5BVElWRSBBUEkgQkFTSUMgRlVOQ1RJT05TIgorLnJzCisuc3AKKy5uZgorLkIgcGNyZTJfY29kZSAqcGNyZTJfY29tcGlsZShQQ1JFMl9TUFRSIFxmSXBhdHRlcm5cZlAsIFBDUkUyX1NJWkUgXGZJbGVuZ3RoXGZQLAorLkIgIiAgdWludDMyX3QgXGZJb3B0aW9uc1xmUCwgaW50ICpcZkllcnJvcmNvZGVcZlAsIFBDUkUyX1NJWkUgKlxmSWVycm9yb2Zmc2V0LFxmUCIKKy5CICIgIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlApOyIKKy5zcAorLkIgdm9pZCBwY3JlMl9jb2RlX2ZyZWUocGNyZTJfY29kZSAqXGZJY29kZVxmUCk7Cisuc3AKKy5CIHBjcmUyX21hdGNoX2RhdGEgKnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKHVpbnQzMl90IFxmSW92ZWNzaXplXGZQLAorLkIgIiAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7IgorLnNwCisuQiBwY3JlMl9tYXRjaF9kYXRhICpwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4oCisuQiAiICBjb25zdCBwY3JlMl9jb2RlICpcZkljb2RlXGZQLCBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKlxmSWdjb250ZXh0XGZQKTsiCisuc3AKKy5CIGludCBwY3JlMl9tYXRjaChjb25zdCBwY3JlMl9jb2RlICpcZkljb2RlXGZQLCBQQ1JFMl9TUFRSIFxmSXN1YmplY3RcZlAsCisuQiAiICBQQ1JFMl9TSVpFIFxmSWxlbmd0aFxmUCwgUENSRTJfU0laRSBcZklzdGFydG9mZnNldFxmUCwiCisuQiAiICB1aW50MzJfdCBcZklvcHRpb25zXGZQLCBwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQLCIKKy5CICIgIHBjcmUyX21hdGNoX2NvbnRleHQgKlxmSW1jb250ZXh0XGZQKTsiCisuc3AKKy5CIGludCBwY3JlMl9kZmFfbWF0Y2goY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCwgUENSRTJfU1BUUiBcZklzdWJqZWN0XGZQLAorLkIgIiAgUENSRTJfU0laRSBcZklsZW5ndGhcZlAsIFBDUkUyX1NJWkUgXGZJc3RhcnRvZmZzZXRcZlAsIgorLkIgIiAgdWludDMyX3QgXGZJb3B0aW9uc1xmUCwgcGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCwiCisuQiAiICBwY3JlMl9tYXRjaF9jb250ZXh0ICpcZkltY29udGV4dFxmUCwiCisuQiAiICBpbnQgKlxmSXdvcmtzcGFjZVxmUCwgUENSRTJfU0laRSBcZkl3c2NvdW50XGZQKTsiCisuc3AKKy5CIHZvaWQgcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlApOworLmZpCisuCisuCisuU0ggIlBDUkUyIE5BVElWRSBBUEkgQVVYSUxJQVJZIE1BVENIIEZVTkNUSU9OUyIKKy5ycworLnNwCisubmYKKy5CIFBDUkUyX1NQVFIgcGNyZTJfZ2V0X21hcmsocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCk7Cisuc3AKKy5CIHVpbnQzMl90IHBjcmUyX2dldF9vdmVjdG9yX2NvdW50KHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlApOworLnNwCisuQiBQQ1JFMl9TSVpFICpwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlApOworLnNwCisuQiBQQ1JFMl9TSVpFIHBjcmUyX2dldF9zdGFydGNoYXIocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCk7CisuZmkKKy4KKy4KKy5TSCAiUENSRTIgTkFUSVZFIEFQSSBHRU5FUkFMIENPTlRFWFQgRlVOQ1RJT05TIgorLnJzCisuc3AKKy5uZgorLkIgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpwY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlKAorLkIgIiAgdm9pZCAqKCpcZklwcml2YXRlX21hbGxvY1xmUCkoUENSRTJfU0laRSwgdm9pZCAqKSwiCisuQiAiICB2b2lkICgqXGZJcHJpdmF0ZV9mcmVlXGZQKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKlxmSW1lbW9yeV9kYXRhXGZQKTsiCisuc3AKKy5CIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHkoCisuQiAiICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKlxmSWdjb250ZXh0XGZQKTsiCisuc3AKKy5CIHZvaWQgcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7CisuZmkKKy4KKy4KKy5TSCAiUENSRTIgTkFUSVZFIEFQSSBDT01QSUxFIENPTlRFWFQgRlVOQ1RJT05TIgorLnJzCisuc3AKKy5uZgorLkIgcGNyZTJfY29tcGlsZV9jb250ZXh0ICpwY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlKAorLkIgIiAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7IgorLnNwCisuQiBwY3JlMl9jb21waWxlX2NvbnRleHQgKnBjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5KAorLkIgIiAgcGNyZTJfY29tcGlsZV9jb250ZXh0ICpcZkljY29udGV4dFxmUCk7IgorLnNwCisuQiB2b2lkIHBjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlApOworLnNwCisuQiBpbnQgcGNyZTJfc2V0X2JzcihwY3JlMl9jb21waWxlX2NvbnRleHQgKlxmSWNjb250ZXh0XGZQLAorLkIgIiAgdWludDMyX3QgXGZJdmFsdWVcZlApOyIKKy5zcAorLkIgaW50IHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlAsCisuQiAiICBjb25zdCB1bnNpZ25lZCBjaGFyICpcZkl0YWJsZXNcZlApOyIKKy5zcAorLkIgaW50IHBjcmUyX3NldF9tYXhfcGF0dGVybl9sZW5ndGgocGNyZTJfY29tcGlsZV9jb250ZXh0ICpcZkljY29udGV4dFxmUCwKKy5CICIgIFBDUkUyX1NJWkUgXGZJdmFsdWVcZlApOyIKKy5zcAorLkIgaW50IHBjcmUyX3NldF9uZXdsaW5lKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlAsCisuQiAiICB1aW50MzJfdCBcZkl2YWx1ZVxmUCk7IgorLnNwCisuQiBpbnQgcGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0KHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlAsCisuQiAiICB1aW50MzJfdCBcZkl2YWx1ZVxmUCk7IgorLnNwCisuQiBpbnQgcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlAsCisuQiAiICBpbnQgKCpcZklndWFyZF9mdW5jdGlvblxmUCkodWludDMyX3QsIHZvaWQgKiksIHZvaWQgKlxmSXVzZXJfZGF0YVxmUCk7IgorLmZpCisuCisuCisuU0ggIlBDUkUyIE5BVElWRSBBUEkgTUFUQ0ggQ09OVEVYVCBGVU5DVElPTlMiCisucnMKKy5zcAorLm5mCisuQiBwY3JlMl9tYXRjaF9jb250ZXh0ICpwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZSgKKy5CICIgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqXGZJZ2NvbnRleHRcZlApOyIKKy5zcAorLkIgcGNyZTJfbWF0Y2hfY29udGV4dCAqcGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5KAorLkIgIiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlApOyIKKy5zcAorLkIgdm9pZCBwY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWUocGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlApOworLnNwCisuQiBpbnQgcGNyZTJfc2V0X2NhbGxvdXQocGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlAsCisuQiAiICBpbnQgKCpcZkljYWxsb3V0X2Z1bmN0aW9uXGZQKShwY3JlMl9jYWxsb3V0X2Jsb2NrICosIHZvaWQgKiksIgorLkIgIiAgdm9pZCAqXGZJY2FsbG91dF9kYXRhXGZQKTsiCisuc3AKKy5CIGludCBwY3JlMl9zZXRfbWF0Y2hfbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlAsCisuQiAiICB1aW50MzJfdCBcZkl2YWx1ZVxmUCk7IgorLnNwCisuQiBpbnQgcGNyZTJfc2V0X29mZnNldF9saW1pdChwY3JlMl9tYXRjaF9jb250ZXh0ICpcZkltY29udGV4dFxmUCwKKy5CICIgIFBDUkUyX1NJWkUgXGZJdmFsdWVcZlApOyIKKy5zcAorLkIgaW50IHBjcmUyX3NldF9yZWN1cnNpb25fbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlAsCisuQiAiICB1aW50MzJfdCBcZkl2YWx1ZVxmUCk7IgorLnNwCisuQiBpbnQgcGNyZTJfc2V0X3JlY3Vyc2lvbl9tZW1vcnlfbWFuYWdlbWVudCgKKy5CICIgIHBjcmUyX21hdGNoX2NvbnRleHQgKlxmSW1jb250ZXh0XGZQLCIKKy5CICIgIHZvaWQgKigqXGZJcHJpdmF0ZV9tYWxsb2NcZlApKFBDUkUyX1NJWkUsIHZvaWQgKiksIgorLkIgIiAgdm9pZCAoKlxmSXByaXZhdGVfZnJlZVxmUCkodm9pZCAqLCB2b2lkICopLCB2b2lkICpcZkltZW1vcnlfZGF0YVxmUCk7IgorLmZpCisuCisuCisuU0ggIlBDUkUyIE5BVElWRSBBUEkgU1RSSU5HIEVYVFJBQ1RJT04gRlVOQ1RJT05TIgorLnJzCisuc3AKKy5uZgorLkIgaW50IHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZShwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQLAorLkIgIiAgUENSRTJfU1BUUiBcZkluYW1lXGZQLCBQQ1JFMl9VQ0hBUiAqXGZJYnVmZmVyXGZQLCBQQ1JFMl9TSVpFICpcZklidWZmbGVuXGZQKTsiCisuc3AKKy5CIGludCBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQLAorLkIgIiAgdWludDMyX3QgXGZJbnVtYmVyXGZQLCBQQ1JFMl9VQ0hBUiAqXGZJYnVmZmVyXGZQLCIKKy5CICIgIFBDUkUyX1NJWkUgKlxmSWJ1ZmZsZW5cZlApOyIKKy5zcAorLkIgdm9pZCBwY3JlMl9zdWJzdHJpbmdfZnJlZShQQ1JFMl9VQ0hBUiAqXGZJYnVmZmVyXGZQKTsKKy5zcAorLkIgaW50IHBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsCisuQiAiICBQQ1JFMl9TUFRSIFxmSW5hbWVcZlAsIFBDUkUyX1VDSEFSICoqXGZJYnVmZmVycHRyXGZQLCBQQ1JFMl9TSVpFICpcZklidWZmbGVuXGZQKTsiCisuc3AKKy5CIGludCBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsCisuQiAiICB1aW50MzJfdCBcZkludW1iZXJcZlAsIFBDUkUyX1VDSEFSICoqXGZJYnVmZmVycHRyXGZQLCIKKy5CICIgIFBDUkUyX1NJWkUgKlxmSWJ1ZmZsZW5cZlApOyIKKy5zcAorLkIgaW50IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsCisuQiAiICBQQ1JFMl9TUFRSIFxmSW5hbWVcZlAsIFBDUkUyX1NJWkUgKlxmSWxlbmd0aFxmUCk7IgorLnNwCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQLAorLkIgIiAgdWludDMyX3QgXGZJbnVtYmVyXGZQLCBQQ1JFMl9TSVpFICpcZklsZW5ndGhcZlApOyIKKy5zcAorLkIgaW50IHBjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2Nhbihjb25zdCBwY3JlMl9jb2RlICpcZkljb2RlXGZQLAorLkIgIiAgUENSRTJfU1BUUiBcZkluYW1lXGZQLCBQQ1JFMl9TUFRSICpcZklmaXJzdFxmUCwgUENSRTJfU1BUUiAqXGZJbGFzdFxmUCk7IgorLnNwCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUoY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCwKKy5CICIgIFBDUkUyX1NQVFIgXGZJbmFtZVxmUCk7IgorLnNwCisuQiB2b2lkIHBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUoUENSRTJfU1BUUiAqXGZJbGlzdFxmUCk7Cisuc3AKKy5CIGludCBwY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCwKKy5CICIgIFBDUkUyX1VDSEFSICoqKlxmSWxpc3RwdHJcZlAsIFBDUkUyX1NJWkUgKipcZklsZW5ndGhzcHRyXGZQKTsKKy5maQorLgorLgorLlNIICJQQ1JFMiBOQVRJVkUgQVBJIFNUUklORyBTVUJTVElUVVRJT04gRlVOQ1RJT04iCisucnMKKy5zcAorLm5mCisuQiBpbnQgcGNyZTJfc3Vic3RpdHV0ZShjb25zdCBwY3JlMl9jb2RlICpcZkljb2RlXGZQLCBQQ1JFMl9TUFRSIFxmSXN1YmplY3RcZlAsCisuQiAiICBQQ1JFMl9TSVpFIFxmSWxlbmd0aFxmUCwgUENSRTJfU0laRSBcZklzdGFydG9mZnNldFxmUCwiCisuQiAiICB1aW50MzJfdCBcZklvcHRpb25zXGZQLCBwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQLCIKKy5CICIgIHBjcmUyX21hdGNoX2NvbnRleHQgKlxmSW1jb250ZXh0XGZQLCBQQ1JFMl9TUFRSIFxmSXJlcGxhY2VtZW50emZQLCIKKy5CICIgIFBDUkUyX1NJWkUgXGZJcmxlbmd0aFxmUCwgUENSRTJfVUNIQVIgKlxmSW91dHB1dGJ1ZmZlclxmUCwiCisuQiAiICBQQ1JFMl9TSVpFICpcZklvdXRsZW5ndGhwdHJcZlApOyIKKy5maQorLgorLgorLlNIICJQQ1JFMiBOQVRJVkUgQVBJIEpJVCBGVU5DVElPTlMiCisucnMKKy5zcAorLm5mCisuQiBpbnQgcGNyZTJfaml0X2NvbXBpbGUocGNyZTJfY29kZSAqXGZJY29kZVxmUCwgdWludDMyX3QgXGZJb3B0aW9uc1xmUCk7Cisuc3AKKy5CIGludCBwY3JlMl9qaXRfbWF0Y2goY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCwgUENSRTJfU1BUUiBcZklzdWJqZWN0XGZQLAorLkIgIiAgUENSRTJfU0laRSBcZklsZW5ndGhcZlAsIFBDUkUyX1NJWkUgXGZJc3RhcnRvZmZzZXRcZlAsIgorLkIgIiAgdWludDMyX3QgXGZJb3B0aW9uc1xmUCwgcGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCwiCisuQiAiICBwY3JlMl9tYXRjaF9jb250ZXh0ICpcZkltY29udGV4dFxmUCk7IgorLnNwCisuQiB2b2lkIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7Cisuc3AKKy5CIHBjcmUyX2ppdF9zdGFjayAqcGNyZTJfaml0X3N0YWNrX2NyZWF0ZShQQ1JFMl9TSVpFIFxmSXN0YXJ0c2l6ZVxmUCwKKy5CICIgIFBDUkUyX1NJWkUgXGZJbWF4c2l6ZVxmUCwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7IgorLnNwCisuQiB2b2lkIHBjcmUyX2ppdF9zdGFja19hc3NpZ24ocGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlAsCisuQiAiICBwY3JlMl9qaXRfY2FsbGJhY2sgXGZJY2FsbGJhY2tfZnVuY3Rpb25cZlAsIHZvaWQgKlxmSWNhbGxiYWNrX2RhdGFcZlApOyIKKy5zcAorLkIgdm9pZCBwY3JlMl9qaXRfc3RhY2tfZnJlZShwY3JlMl9qaXRfc3RhY2sgKlxmSWppdF9zdGFja1xmUCk7CisuZmkKKy4KKy4KKy5TSCAiUENSRTIgTkFUSVZFIEFQSSBTRVJJQUxJWkFUSU9OIEZVTkNUSU9OUyIKKy5ycworLnNwCisubmYKKy5CIGludDMyX3QgcGNyZTJfc2VyaWFsaXplX2RlY29kZShwY3JlMl9jb2RlICoqXGZJY29kZXNcZlAsCisuQiAiICBpbnQzMl90IFxmSW51bWJlcl9vZl9jb2Rlc1xmUCwgY29uc3QgdWludDhfdCAqXGZJYnl0ZXNcZlAsIgorLkIgIiAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7IgorLnNwCisuQiBpbnQzMl90IHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUoY29uc3QgcGNyZTJfY29kZSAqKlxmSWNvZGVzXGZQLAorLkIgIiAgaW50MzJfdCBcZkludW1iZXJfb2ZfY29kZXNcZlAsIHVpbnQ4X3QgKipcZklzZXJpYWxpemVkX2J5dGVzXGZQLCIKKy5CICIgIFBDUkUyX1NJWkUgKlxmSXNlcmlhbGl6ZWRfc2l6ZVxmUCwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7IgorLnNwCisuQiB2b2lkIHBjcmUyX3NlcmlhbGl6ZV9mcmVlKHVpbnQ4X3QgKlxmSWJ5dGVzXGZQKTsKKy5zcAorLkIgaW50MzJfdCBwY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlcyhjb25zdCB1aW50OF90ICpcZklieXRlc1xmUCk7CisuZmkKKy4KKy4KKy5TSCAiUENSRTIgTkFUSVZFIEFQSSBBVVhJTElBUlkgRlVOQ1RJT05TIgorLnJzCisuc3AKKy5uZgorLkIgaW50IHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKGludCBcZkllcnJvcmNvZGVcZlAsIFBDUkUyX1VDSEFSICpcZklidWZmZXJcZlAsCisuQiAiICBQQ1JFMl9TSVpFIFxmSWJ1ZmZsZW5cZlApOyIKKy5zcAorLkIgY29uc3QgdW5zaWduZWQgY2hhciAqcGNyZTJfbWFrZXRhYmxlcyhwY3JlMl9nZW5lcmFsX2NvbnRleHQgKlxmSWdjb250ZXh0XGZQKTsKKy5zcAorLkIgaW50IHBjcmUyX3BhdHRlcm5faW5mbyhjb25zdCBwY3JlMiAqXGZJY29kZVxmUCwgdWludDMyX3QgXGZJd2hhdFxmUCwgdm9pZCAqXGZJd2hlcmVcZlApOworLnNwCisuQiBpbnQgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUoY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCwKKy5CICIgIGludCAoKlxmSWNhbGxiYWNrXGZQKShwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9jayAqLCB2b2lkICopLCIKKy5CICIgIHZvaWQgKlxmSXVzZXJfZGF0YVxmUCk7IgorLnNwCisuQiBpbnQgcGNyZTJfY29uZmlnKHVpbnQzMl90IFxmSXdoYXRcZlAsIHZvaWQgKlxmSXdoZXJlXGZQKTsKKy5maQorLgorLgorLlNIICJQQ1JFMiA4LUJJVCwgMTYtQklULCBBTkQgMzItQklUIExJQlJBUklFUyIKKy5ycworLnNwCitUaGVyZSBhcmUgdGhyZWUgUENSRTIgbGlicmFyaWVzLCBzdXBwb3J0aW5nIDgtYml0LCAxNi1iaXQsIGFuZCAzMi1iaXQgY29kZQordW5pdHMsIHJlc3BlY3RpdmVseS4gSG93ZXZlciwgdGhlcmUgaXMganVzdCBvbmUgaGVhZGVyIGZpbGUsIFxmQnBjcmUyLmhcZlAuCitUaGlzIGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBvdGhlciBkZWZpbml0aW9ucyBmb3IgYWxsIHRocmVlCitsaWJyYXJpZXMuIE9uZSwgdHdvLCBvciBhbGwgdGhyZWUgY2FuIGJlIGluc3RhbGxlZCBzaW11bHRhbmVvdXNseS4gT24gVW5peC1saWtlCitzeXN0ZW1zIHRoZSBsaWJyYXJpZXMgYXJlIGNhbGxlZCBcZkJsaWJwY3JlMi04XGZQLCBcZkJsaWJwY3JlMi0xNlxmUCwgYW5kCitcZkJsaWJwY3JlMi0zMlxmUCwgYW5kIHRoZXkgY2FuIGFsc28gY28tZXhpc3Qgd2l0aCB0aGUgb3JpZ2luYWwgUENSRSBsaWJyYXJpZXMuCisuUAorQ2hhcmFjdGVyIHN0cmluZ3MgYXJlIHBhc3NlZCB0byBhbmQgZnJvbSBhIFBDUkUyIGxpYnJhcnkgYXMgYSBzZXF1ZW5jZSBvZgordW5zaWduZWQgaW50ZWdlcnMgaW4gY29kZSB1bml0cyBvZiB0aGUgYXBwcm9wcmlhdGUgd2lkdGguIEV2ZXJ5IFBDUkUyIGZ1bmN0aW9uCitjb21lcyBpbiB0aHJlZSBkaWZmZXJlbnQgZm9ybXMsIG9uZSBmb3IgZWFjaCBsaWJyYXJ5LCBmb3IgZXhhbXBsZToKKy5zcAorICBcZkJwY3JlMl9jb21waWxlXzgoKVxmUAorICBcZkJwY3JlMl9jb21waWxlXzE2KClcZlAKKyAgXGZCcGNyZTJfY29tcGlsZV8zMigpXGZQCisuc3AKK1RoZXJlIGFyZSBhbHNvIHRocmVlIGRpZmZlcmVudCBzZXRzIG9mIGRhdGEgdHlwZXM6Cisuc3AKKyAgXGZCUENSRTJfVUNIQVI4LCBQQ1JFMl9VQ0hBUjE2LCBQQ1JFMl9VQ0hBUjMyXGZQCisgIFxmQlBDUkUyX1NQVFI4LCAgUENSRTJfU1BUUjE2LCAgUENSRTJfU1BUUjMyXGZQCisuc3AKK1RoZSBVQ0hBUiB0eXBlcyBkZWZpbmUgdW5zaWduZWQgY29kZSB1bml0cyBvZiB0aGUgYXBwcm9wcmlhdGUgd2lkdGhzLiBGb3IKK2V4YW1wbGUsIFBDUkUyX1VDSEFSMTYgaXMgdXN1YWxseSBkZWZpbmVkIGFzIGB1aW50MTZfdCcuIFRoZSBTUFRSIHR5cGVzIGFyZQorY29uc3RhbnQgcG9pbnRlcnMgdG8gdGhlIGVxdWl2YWxlbnQgVUNIQVIgdHlwZXMsIHRoYXQgaXMsIHRoZXkgYXJlIHBvaW50ZXJzIHRvCit2ZWN0b3JzIG9mIHVuc2lnbmVkIGNvZGUgdW5pdHMuCisuUAorTWFueSBhcHBsaWNhdGlvbnMgdXNlIG9ubHkgb25lIGNvZGUgdW5pdCB3aWR0aC4gRm9yIHRoZWlyIGNvbnZlbmllbmNlLCBtYWNyb3MKK2FyZSBkZWZpbmVkIHdob3NlIG5hbWVzIGFyZSB0aGUgZ2VuZXJpYyBmb3JtcyBzdWNoIGFzIFxmQnBjcmUyX2NvbXBpbGUoKVxmUCBhbmQKK1BDUkUyX1NQVFIuIFRoZXNlIG1hY3JvcyB1c2UgdGhlIHZhbHVlIG9mIHRoZSBtYWNybyBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggdG8KK2dlbmVyYXRlIHRoZSBhcHByb3ByaWF0ZSB3aWR0aC1zcGVjaWZpYyBmdW5jdGlvbiBhbmQgbWFjcm8gbmFtZXMuCitQQ1JFMl9DT0RFX1VOSVRfV0lEVEggaXMgbm90IGRlZmluZWQgYnkgZGVmYXVsdC4gQW4gYXBwbGljYXRpb24gbXVzdCBkZWZpbmUgaXQKK3RvIGJlIDgsIDE2LCBvciAzMiBiZWZvcmUgaW5jbHVkaW5nIFxmQnBjcmUyLmhcZlAgaW4gb3JkZXIgdG8gbWFrZSB1c2Ugb2YgdGhlCitnZW5lcmljIG5hbWVzLgorLlAKK0FwcGxpY2F0aW9ucyB0aGF0IHVzZSBtb3JlIHRoYW4gb25lIGNvZGUgdW5pdCB3aWR0aCBjYW4gYmUgbGlua2VkIHdpdGggbW9yZQordGhhbiBvbmUgUENSRTIgbGlicmFyeSwgYnV0IG11c3QgZGVmaW5lIFBDUkUyX0NPREVfVU5JVF9XSURUSCB0byBiZSAwIGJlZm9yZQoraW5jbHVkaW5nIFxmQnBjcmUyLmhcZlAsIGFuZCB0aGVuIHVzZSB0aGUgcmVhbCBmdW5jdGlvbiBuYW1lcy4gQW55IGNvZGUgdGhhdCBpcwordG8gYmUgaW5jbHVkZWQgaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgdGhlIHZhbHVlIG9mIFBDUkUyX0NPREVfVU5JVF9XSURUSCBpcwordW5rbm93biBzaG91bGQgYWxzbyB1c2UgdGhlIHJlYWwgZnVuY3Rpb24gbmFtZXMuIChVbmZvcnR1bmF0ZWx5LCBpdCBpcyBub3QKK3Bvc3NpYmxlIGluIEMgY29kZSB0byBzYXZlIGFuZCByZXN0b3JlIHRoZSB2YWx1ZSBvZiBhIG1hY3JvLikKKy5QCitJZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggaXMgbm90IGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyBcZkJwY3JlMi5oXGZQLCBhCitjb21waWxlciBlcnJvciBvY2N1cnMuCisuUAorV2hlbiB1c2luZyBtdWx0aXBsZSBsaWJyYXJpZXMgaW4gYW4gYXBwbGljYXRpb24sIHlvdSBtdXN0IHRha2UgY2FyZSB3aGVuCitwcm9jZXNzaW5nIGFueSBwYXJ0aWN1bGFyIHBhdHRlcm4gdG8gdXNlIG9ubHkgZnVuY3Rpb25zIGZyb20gYSBzaW5nbGUgbGlicmFyeS4KK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBydW4gYSBtYXRjaCB1c2luZyBhIHBhdHRlcm4gdGhhdCB3YXMgY29tcGlsZWQgd2l0aAorXGZCcGNyZTJfY29tcGlsZV8xNigpXGZQLCB5b3UgbXVzdCBkbyBzbyB3aXRoIFxmQnBjcmUyX21hdGNoXzE2KClcZlAsIG5vdAorXGZCcGNyZTJfbWF0Y2hfOCgpXGZQLgorLlAKK0luIHRoZSBmdW5jdGlvbiBzdW1tYXJpZXMgYWJvdmUsIGFuZCBpbiB0aGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50IGFuZCBvdGhlcgorUENSRTIgZG9jdW1lbnRzLCBmdW5jdGlvbnMgYW5kIGRhdGEgdHlwZXMgYXJlIGRlc2NyaWJlZCB1c2luZyB0aGVpciBnZW5lcmljCituYW1lcywgd2l0aG91dCB0aGUgOCwgMTYsIG9yIDMyIHN1ZmZpeC4KKy4KKy4KKy5TSCAiUENSRTIgQVBJIE9WRVJWSUVXIgorLnJzCisuc3AKK1BDUkUyIGhhcyBpdHMgb3duIG5hdGl2ZSBBUEksIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGlzIGRvY3VtZW50LiBUaGVyZSBhcmUKK2Fsc28gc29tZSB3cmFwcGVyIGZ1bmN0aW9ucyBmb3IgdGhlIDgtYml0IGxpYnJhcnkgdGhhdCBjb3JyZXNwb25kIHRvIHRoZQorUE9TSVggcmVndWxhciBleHByZXNzaW9uIEFQSSwgYnV0IHRoZXkgZG8gbm90IGdpdmUgYWNjZXNzIHRvIGFsbCB0aGUKK2Z1bmN0aW9uYWxpdHkuIFRoZXkgYXJlIGRlc2NyaWJlZCBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK2RvY3VtZW50YXRpb24uIEJvdGggdGhlc2UgQVBJcyBkZWZpbmUgYSBzZXQgb2YgQyBmdW5jdGlvbiBjYWxscy4KKy5QCitUaGUgbmF0aXZlIEFQSSBDIGRhdGEgdHlwZXMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIG9wdGlvbiB2YWx1ZXMsIGFuZCBlcnJvcgorY29kZXMgYXJlIGRlZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlIFxmQnBjcmUyLmhcZlAsIHdoaWNoIGNvbnRhaW5zIGRlZmluaXRpb25zCitvZiBQQ1JFMl9NQUpPUiBhbmQgUENSRTJfTUlOT1IsIHRoZSBtYWpvciBhbmQgbWlub3IgcmVsZWFzZSBudW1iZXJzIGZvciB0aGUKK2xpYnJhcnkuIEFwcGxpY2F0aW9ucyBjYW4gdXNlIHRoZXNlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgZGlmZmVyZW50IHJlbGVhc2VzCitvZiBQQ1JFMi4KKy5QCitJbiBhIFdpbmRvd3MgZW52aXJvbm1lbnQsIGlmIHlvdSB3YW50IHRvIHN0YXRpY2FsbHkgbGluayBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtCithZ2FpbnN0IGEgbm9uLWRsbCBQQ1JFMiBsaWJyYXJ5LCB5b3UgbXVzdCBkZWZpbmUgUENSRTJfU1RBVElDIGJlZm9yZSBpbmNsdWRpbmcKK1xmQnBjcmUyLmhcZlAuCisuUAorVGhlIGZ1bmN0aW9ucyBcZkJwY3JlMl9jb21waWxlKClcZlAsIGFuZCBcZkJwY3JlMl9tYXRjaCgpXGZQIGFyZSB1c2VkIGZvcgorY29tcGlsaW5nIGFuZCBtYXRjaGluZyByZWd1bGFyIGV4cHJlc3Npb25zIGluIGEgUGVybC1jb21wYXRpYmxlIG1hbm5lci4gQQorc2FtcGxlIHByb2dyYW0gdGhhdCBkZW1vbnN0cmF0ZXMgdGhlIHNpbXBsZXN0IHdheSBvZiB1c2luZyB0aGVtIGlzIHByb3ZpZGVkIGluCit0aGUgZmlsZSBjYWxsZWQgXGZJcGNyZTJkZW1vLmNcZlAgaW4gdGhlIFBDUkUyIHNvdXJjZSBkaXN0cmlidXRpb24uIEEgbGlzdGluZworb2YgdGhpcyBwcm9ncmFtIGlzIGdpdmVuIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyZGVtb1xmUAorLlwiCitkb2N1bWVudGF0aW9uLCBhbmQgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJzYW1wbGVcZlAKKy5cIgorZG9jdW1lbnRhdGlvbiBkZXNjcmliZXMgaG93IHRvIGNvbXBpbGUgYW5kIHJ1biBpdC4KKy5QCitKdXN0LWluLXRpbWUgY29tcGlsZXIgc3VwcG9ydCBpcyBhbiBvcHRpb25hbCBmZWF0dXJlIG9mIFBDUkUyIHRoYXQgY2FuIGJlIGJ1aWx0CitpbiBhcHByb3ByaWF0ZSBoYXJkd2FyZSBlbnZpcm9ubWVudHMuIEl0IGdyZWF0bHkgc3BlZWRzIHVwIHRoZSBtYXRjaGluZworcGVyZm9ybWFuY2Ugb2YgbWFueSBwYXR0ZXJucy4gUHJvZ3JhbXMgY2FuIHJlcXVlc3QgdGhhdCBpdCBiZSB1c2VkIGlmCithdmFpbGFibGUsIGJ5IGNhbGxpbmcgXGZCcGNyZTJfaml0X2NvbXBpbGUoKVxmUCBhZnRlciBhIHBhdHRlcm4gaGFzIGJlZW4KK3N1Y2Nlc3NmdWxseSBjb21waWxlZCBieSBcZkJwY3JlMl9jb21waWxlKClcZlAuIFRoaXMgZG9lcyBub3RoaW5nIGlmIEpJVAorc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLgorLlAKK01vcmUgY29tcGxpY2F0ZWQgcHJvZ3JhbXMgbWlnaHQgbmVlZCB0byBtYWtlIHVzZSBvZiB0aGUgc3BlY2lhbGlzdCBmdW5jdGlvbnMKK1xmQnBjcmUyX2ppdF9zdGFja19jcmVhdGUoKVxmUCwgXGZCcGNyZTJfaml0X3N0YWNrX2ZyZWUoKVxmUCwgYW5kCitcZkJwY3JlMl9qaXRfc3RhY2tfYXNzaWduKClcZlAgaW4gb3JkZXIgdG8gY29udHJvbCB0aGUgSklUIGNvZGUncyBtZW1vcnkgdXNhZ2UuCisuUAorSklUIG1hdGNoaW5nIGlzIGF1dG9tYXRpY2FsbHkgdXNlZCBieSBcZkJwY3JlMl9tYXRjaCgpXGZQIGlmIGl0IGlzIGF2YWlsYWJsZS4KK1RoZXJlIGlzIGFsc28gYSBkaXJlY3QgaW50ZXJmYWNlIGZvciBKSVQgbWF0Y2hpbmcsIHdoaWNoIGdpdmVzIGltcHJvdmVkCitwZXJmb3JtYW5jZS4gVGhlIEpJVC1zcGVjaWZpYyBmdW5jdGlvbnMgYXJlIGRpc2N1c3NlZCBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmppdFxmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLlAKK0Egc2Vjb25kIG1hdGNoaW5nIGZ1bmN0aW9uLCBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCwgd2hpY2ggaXMgbm90CitQZXJsLWNvbXBhdGlibGUsIGlzIGFsc28gcHJvdmlkZWQuIFRoaXMgdXNlcyBhIGRpZmZlcmVudCBhbGdvcml0aG0gZm9yIHRoZQorbWF0Y2hpbmcuIFRoZSBhbHRlcm5hdGl2ZSBhbGdvcml0aG0gZmluZHMgYWxsIHBvc3NpYmxlIG1hdGNoZXMgKGF0IGEgZ2l2ZW4KK3BvaW50IGluIHRoZSBzdWJqZWN0KSwgYW5kIHNjYW5zIHRoZSBzdWJqZWN0IGp1c3Qgb25jZSAodW5sZXNzIHRoZXJlIGFyZQorbG9va2JlaGluZCBhc3NlcnRpb25zKS4gSG93ZXZlciwgdGhpcyBhbGdvcml0aG0gZG9lcyBub3QgcmV0dXJuIGNhcHR1cmVkCitzdWJzdHJpbmdzLiBBIGRlc2NyaXB0aW9uIG9mIHRoZSB0d28gbWF0Y2hpbmcgYWxnb3JpdGhtcyBhbmQgdGhlaXIgYWR2YW50YWdlcworYW5kIGRpc2FkdmFudGFnZXMgaXMgZ2l2ZW4gaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJtYXRjaGluZ1xmUAorLlwiCitkb2N1bWVudGF0aW9uLiBUaGVyZSBpcyBubyBKSVQgc3VwcG9ydCBmb3IgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAuCisuUAorSW4gYWRkaXRpb24gdG8gdGhlIG1haW4gY29tcGlsaW5nIGFuZCBtYXRjaGluZyBmdW5jdGlvbnMsIHRoZXJlIGFyZSBjb252ZW5pZW5jZQorZnVuY3Rpb25zIGZvciBleHRyYWN0aW5nIGNhcHR1cmVkIHN1YnN0cmluZ3MgZnJvbSBhIHN1YmplY3Qgc3RyaW5nIHRoYXQgaGFzCitiZWVuIG1hdGNoZWQgYnkgXGZCcGNyZTJfbWF0Y2goKVxmUC4gVGhleSBhcmU6Cisuc3AKKyAgXGZCcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lKClcZlAKKyAgXGZCcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIoKVxmUAorICBcZkJwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZSgpXGZQCisgIFxmQnBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIoKVxmUAorICBcZkJwY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQoKVxmUAorICBcZkJwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZSgpXGZQCisgIFxmQnBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIoKVxmUAorICBcZkJwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4oKVxmUAorICBcZkJwY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZSgpXGZQCisuc3AKK1xmQnBjcmUyX3N1YnN0cmluZ19mcmVlKClcZlAgYW5kIFxmQnBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUoKVxmUCBhcmUgYWxzbworcHJvdmlkZWQsIHRvIGZyZWUgdGhlIG1lbW9yeSB1c2VkIGZvciBleHRyYWN0ZWQgc3RyaW5ncy4KKy5QCitUaGUgZnVuY3Rpb24gXGZCcGNyZTJfc3Vic3RpdHV0ZSgpXGZQIGNhbiBiZSBjYWxsZWQgdG8gbWF0Y2ggYSBwYXR0ZXJuIGFuZAorcmV0dXJuIGEgY29weSBvZiB0aGUgc3ViamVjdCBzdHJpbmcgd2l0aCBzdWJzdGl0dXRpb25zIGZvciBwYXJ0cyB0aGF0IHdlcmUKK21hdGNoZWQuCisuUAorRmluYWxseSwgdGhlcmUgYXJlIGZ1bmN0aW9ucyBmb3IgZmluZGluZyBvdXQgaW5mb3JtYXRpb24gYWJvdXQgYSBjb21waWxlZAorcGF0dGVybiAoXGZCcGNyZTJfcGF0dGVybl9pbmZvKClcZlApIGFuZCBhYm91dCB0aGUgY29uZmlndXJhdGlvbiB3aXRoIHdoaWNoCitQQ1JFMiB3YXMgYnVpbHQgKFxmQnBjcmUyX2NvbmZpZygpXGZQKS4KKy4KKy4KKy5TSCAiU1RSSU5HIExFTkdUSFMgQU5EIE9GRlNFVFMiCisucnMKKy5zcAorVGhlIFBDUkUyIEFQSSB1c2VzIHN0cmluZyBsZW5ndGhzIGFuZCBvZmZzZXRzIGludG8gc3RyaW5ncyBvZiBjb2RlIHVuaXRzIGluCitzZXZlcmFsIHBsYWNlcy4gVGhlc2UgdmFsdWVzIGFyZSBhbHdheXMgb2YgdHlwZSBQQ1JFMl9TSVpFLCB3aGljaCBpcyBhbgordW5zaWduZWQgaW50ZWdlciB0eXBlLCBjdXJyZW50bHkgYWx3YXlzIGRlZmluZWQgYXMgXGZJc2l6ZV90XGZQLiBUaGUgbGFyZ2VzdAordmFsdWUgdGhhdCBjYW4gYmUgc3RvcmVkIGluIHN1Y2ggYSB0eXBlICh0aGF0IGlzIH4oUENSRTJfU0laRSkwKSBpcyByZXNlcnZlZAorYXMgYSBzcGVjaWFsIGluZGljYXRvciBmb3IgemVyby10ZXJtaW5hdGVkIHN0cmluZ3MgYW5kIHVuc2V0IG9mZnNldHMuCitUaGVyZWZvcmUsIHRoZSBsb25nZXN0IHN0cmluZyB0aGF0IGNhbiBiZSBoYW5kbGVkIGlzIG9uZSBsZXNzIHRoYW4gdGhpcworbWF4aW11bS4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9Im5ld2xpbmVzIj48L2E+CisuU0ggTkVXTElORVMKKy5ycworLnNwCitQQ1JFMiBzdXBwb3J0cyBmaXZlIGRpZmZlcmVudCBjb252ZW50aW9ucyBmb3IgaW5kaWNhdGluZyBsaW5lIGJyZWFrcyBpbgorc3RyaW5nczogYSBzaW5nbGUgQ1IgKGNhcnJpYWdlIHJldHVybikgY2hhcmFjdGVyLCBhIHNpbmdsZSBMRiAobGluZWZlZWQpCitjaGFyYWN0ZXIsIHRoZSB0d28tY2hhcmFjdGVyIHNlcXVlbmNlIENSTEYsIGFueSBvZiB0aGUgdGhyZWUgcHJlY2VkaW5nLCBvciBhbnkKK1VuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZS4gVGhlIFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZXMgYXJlIHRoZSB0aHJlZSBqdXN0CittZW50aW9uZWQsIHBsdXMgdGhlIHNpbmdsZSBjaGFyYWN0ZXJzIFZUICh2ZXJ0aWNhbCB0YWIsIFUrMDAwQiksIEZGIChmb3JtIGZlZWQsCitVKzAwMEMpLCBORUwgKG5leHQgbGluZSwgVSswMDg1KSwgTFMgKGxpbmUgc2VwYXJhdG9yLCBVKzIwMjgpLCBhbmQgUFMKKyhwYXJhZ3JhcGggc2VwYXJhdG9yLCBVKzIwMjkpLgorLlAKK0VhY2ggb2YgdGhlIGZpcnN0IHRocmVlIGNvbnZlbnRpb25zIGlzIHVzZWQgYnkgYXQgbGVhc3Qgb25lIG9wZXJhdGluZyBzeXN0ZW0gYXMKK2l0cyBzdGFuZGFyZCBuZXdsaW5lIHNlcXVlbmNlLiBXaGVuIFBDUkUyIGlzIGJ1aWx0LCBhIGRlZmF1bHQgY2FuIGJlIHNwZWNpZmllZC4KK1RoZSBkZWZhdWx0IGRlZmF1bHQgaXMgTEYsIHdoaWNoIGlzIHRoZSBVbml4IHN0YW5kYXJkLiBIb3dldmVyLCB0aGUgbmV3bGluZQorY29udmVudGlvbiBjYW4gYmUgY2hhbmdlZCBieSBhbiBhcHBsaWNhdGlvbiB3aGVuIGNhbGxpbmcgXGZCcGNyZTJfY29tcGlsZSgpXGZQLAorb3IgaXQgY2FuIGJlIHNwZWNpZmllZCBieSBzcGVjaWFsIHRleHQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIGl0c2VsZjsgdGhpcworb3ZlcnJpZGVzIGFueSBvdGhlciBzZXR0aW5ncy4gU2VlIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGF0dGVyblxmUAorLlwiCitwYWdlIGZvciBkZXRhaWxzIG9mIHRoZSBzcGVjaWFsIGNoYXJhY3RlciBzZXF1ZW5jZXMuCisuUAorSW4gdGhlIFBDUkUyIGRvY3VtZW50YXRpb24gdGhlIHdvcmQgIm5ld2xpbmUiIGlzIHVzZWQgdG8gbWVhbiAidGhlIGNoYXJhY3RlciBvcgorcGFpciBvZiBjaGFyYWN0ZXJzIHRoYXQgaW5kaWNhdGUgYSBsaW5lIGJyZWFrIi4gVGhlIGNob2ljZSBvZiBuZXdsaW5lCitjb252ZW50aW9uIGFmZmVjdHMgdGhlIGhhbmRsaW5nIG9mIHRoZSBkb3QsIGNpcmN1bWZsZXgsIGFuZCBkb2xsYXIKK21ldGFjaGFyYWN0ZXJzLCB0aGUgaGFuZGxpbmcgb2YgIy1jb21tZW50cyBpbiAveCBtb2RlLCBhbmQsIHdoZW4gQ1JMRiBpcyBhCityZWNvZ25pemVkIGxpbmUgZW5kaW5nIHNlcXVlbmNlLCB0aGUgbWF0Y2ggcG9zaXRpb24gYWR2YW5jZW1lbnQgZm9yIGEKK25vbi1hbmNob3JlZCBwYXR0ZXJuLiBUaGVyZSBpcyBtb3JlIGRldGFpbCBhYm91dCB0aGlzIGluIHRoZQorLlwiIEhUTUwgPGEgaHJlZj0iI21hdGNob3B0aW9ucyI+CisuXCIgPC9hPgorc2VjdGlvbiBvbiBcZkJwY3JlMl9tYXRjaCgpXGZQIG9wdGlvbnMKKy5cIgorYmVsb3cuCisuUAorVGhlIGNob2ljZSBvZiBuZXdsaW5lIGNvbnZlbnRpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBpbnRlcnByZXRhdGlvbiBvZgordGhlIFxlbiBvciBcZXIgZXNjYXBlIHNlcXVlbmNlcywgbm9yIGRvZXMgaXQgYWZmZWN0IHdoYXQgXGVSIG1hdGNoZXM7IHRoaXMgaGFzCitpdHMgb3duIHNlcGFyYXRlIGNvbnZlbnRpb24uCisuCisuCisuU0ggTVVMVElUSFJFQURJTkcKKy5ycworLnNwCitJbiBhIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb24gaXQgaXMgaW1wb3J0YW50IHRvIGtlZXAgdGhyZWFkLXNwZWNpZmljIGRhdGEKK3NlcGFyYXRlIGZyb20gZGF0YSB0aGF0IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiB0aHJlYWRzLiBUaGUgUENSRTIgbGlicmFyeSBjb2RlCitpdHNlbGYgaXMgdGhyZWFkLXNhZmU6IGl0IGNvbnRhaW5zIG5vIHN0YXRpYyBvciBnbG9iYWwgdmFyaWFibGVzLiBUaGUgQVBJIGlzCitkZXNpZ25lZCB0byBiZSBmYWlybHkgc2ltcGxlIGZvciBub24tdGhyZWFkZWQgYXBwbGljYXRpb25zIHdoaWxlIGF0IHRoZSBzYW1lCit0aW1lIGVuc3VyaW5nIHRoYXQgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbnMgY2FuIHVzZSBpdC4KKy5QCitUaGVyZSBhcmUgc2V2ZXJhbCBkaWZmZXJlbnQgYmxvY2tzIG9mIGRhdGEgdGhhdCBhcmUgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uCitiZXR3ZWVuIHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlIFBDUkUyIGxpYnJhcmllcy4KKy5QCisoMSkgQSBwb2ludGVyIHRvIHRoZSBjb21waWxlZCBmb3JtIG9mIGEgcGF0dGVybiBpcyByZXR1cm5lZCB0byB0aGUgdXNlciB3aGVuCitcZkJwY3JlMl9jb21waWxlKClcZlAgaXMgc3VjY2Vzc2Z1bC4gVGhlIGRhdGEgaW4gdGhlIGNvbXBpbGVkIHBhdHRlcm4gaXMgZml4ZWQsCithbmQgZG9lcyBub3QgY2hhbmdlIHdoZW4gdGhlIHBhdHRlcm4gaXMgbWF0Y2hlZC4gVGhlcmVmb3JlLCBpdCBpcyB0aHJlYWQtc2FmZSwKK3RoYXQgaXMsIHRoZSBzYW1lIGNvbXBpbGVkIHBhdHRlcm4gY2FuIGJlIHVzZWQgYnkgbW9yZSB0aGFuIG9uZSB0aHJlYWQKK3NpbXVsdGFuZW91c2x5LiBBbiBhcHBsaWNhdGlvbiBjYW4gY29tcGlsZSBhbGwgaXRzIHBhdHRlcm5zIGF0IHRoZSBzdGFydCwKK2JlZm9yZSBmb3JraW5nIG9mZiBtdWx0aXBsZSB0aHJlYWRzIHRoYXQgdXNlIHRoZW0uIEhvd2V2ZXIsIGlmIHRoZSBqdXN0LWluLXRpbWUKK29wdGltaXphdGlvbiBmZWF0dXJlIGlzIGJlaW5nIHVzZWQsIGl0IG5lZWRzIHNlcGFyYXRlIG1lbW9yeSBzdGFjayBhcmVhcyBmb3IKK2VhY2ggdGhyZWFkLiBTZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJqaXRcZlAKKy5cIgorZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorLlAKKygyKSBUaGUgbmV4dCBzZWN0aW9uIGJlbG93IGludHJvZHVjZXMgdGhlIGlkZWEgb2YgImNvbnRleHRzIiBpbiB3aGljaCBQQ1JFMgorZnVuY3Rpb25zIGFyZSBjYWxsZWQuIEEgY29udGV4dCBpcyBub3RoaW5nIG1vcmUgdGhhbiBhIGNvbGxlY3Rpb24gb2YgcGFyYW1ldGVycwordGhhdCBjb250cm9sIHRoZSB3YXkgUENSRTIgb3BlcmF0ZXMuIEdyb3VwaW5nIGEgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdG9nZXRoZXIKK2luIGEgY29udGV4dCBpcyBhIGNvbnZlbmllbnQgd2F5IG9mIHBhc3NpbmcgdGhlbSB0byBhIFBDUkUyIGZ1bmN0aW9uIHdpdGhvdXQKK3VzaW5nIGxvdHMgb2YgYXJndW1lbnRzLiBUaGUgcGFyYW1ldGVycyB0aGF0IGFyZSBzdG9yZWQgaW4gY29udGV4dHMgYXJlIGluIHNvbWUKK3NlbnNlICJhZHZhbmNlZCBmZWF0dXJlcyIgb2YgdGhlIEFQSS4gTWFueSBzdHJhaWdodGZvcndhcmQgYXBwbGljYXRpb25zIHdpbGwKK25vdCBuZWVkIHRvIHVzZSBjb250ZXh0cy4KKy5QCitJbiBhIG11bHRpdGhyZWFkZWQgYXBwbGljYXRpb24sIGlmIHRoZSBwYXJhbWV0ZXJzIGluIGEgY29udGV4dCBhcmUgdmFsdWVzIHRoYXQKK2FyZSBuZXZlciBjaGFuZ2VkLCB0aGUgc2FtZSBjb250ZXh0IGNhbiBiZSB1c2VkIGJ5IGFsbCB0aGUgdGhyZWFkcy4gSG93ZXZlciwgaWYKK2FueSB0aHJlYWQgbmVlZHMgdG8gY2hhbmdlIGFueSB2YWx1ZSBpbiBhIGNvbnRleHQsIGl0IG11c3QgbWFrZSBpdHMgb3duCit0aHJlYWQtc3BlY2lmaWMgY29weS4KKy5QCisoMykgVGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyBuZWVkIGEgYmxvY2sgb2YgbWVtb3J5IGZvciB3b3JraW5nIHNwYWNlIGFuZCBmb3IKK3N0b3JpbmcgdGhlIHJlc3VsdHMgb2YgYSBtYXRjaC4gVGhpcyBpbmNsdWRlcyBkZXRhaWxzIG9mIHdoYXQgd2FzIG1hdGNoZWQsIGFzCit3ZWxsIGFzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgbmFtZSBvZiBhICgqTUFSSykgc2V0dGluZy4gRWFjaAordGhyZWFkIG11c3QgcHJvdmlkZSBpdHMgb3duIHZlcnNpb24gb2YgdGhpcyBtZW1vcnkuCisuCisuCisuU0ggIlBDUkUyIENPTlRFWFRTIgorLnJzCisuc3AKK1NvbWUgUENSRTIgZnVuY3Rpb25zIGhhdmUgYSBsb3Qgb2YgcGFyYW1ldGVycywgbWFueSBvZiB3aGljaCBhcmUgdXNlZCBvbmx5IGJ5CitzcGVjaWFsaXN0IGFwcGxpY2F0aW9ucywgZm9yIGV4YW1wbGUsIHRob3NlIHRoYXQgdXNlIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudAorb3Igbm9uLXN0YW5kYXJkIGNoYXJhY3RlciB0YWJsZXMuIFRvIGtlZXAgZnVuY3Rpb24gYXJndW1lbnQgbGlzdHMgYXQgYQorcmVhc29uYWJsZSBzaXplLCBhbmQgYXQgdGhlIHNhbWUgdGltZSB0byBrZWVwIHRoZSBBUEkgZXh0ZW5zaWJsZSwgInVuY29tbW9uIgorcGFyYW1ldGVycyBhcmUgcGFzc2VkIHRvIGNlcnRhaW4gZnVuY3Rpb25zIGluIGEgXGZCY29udGV4dFxmUCBpbnN0ZWFkIG9mCitkaXJlY3RseS4gQSBjb250ZXh0IGlzIGp1c3QgYSBibG9jayBvZiBtZW1vcnkgdGhhdCBob2xkcyB0aGUgcGFyYW1ldGVyIHZhbHVlcy4KK0FwcGxpY2F0aW9ucyB0aGF0IGRvIG5vdCBuZWVkIHRvIGFkanVzdCBhbnkgb2YgdGhlIGNvbnRleHQgcGFyYW1ldGVycyBjYW4gcGFzcworTlVMTCB3aGVuIGEgY29udGV4dCBwb2ludGVyIGlzIHJlcXVpcmVkLgorLlAKK1RoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgdHlwZXMgb2YgY29udGV4dDogYSBnZW5lcmFsIGNvbnRleHQgdGhhdCBpcyByZWxldmFudAorZm9yIHNldmVyYWwgUENSRTIgb3BlcmF0aW9ucywgYSBjb21waWxlLXRpbWUgY29udGV4dCwgYW5kIGEgbWF0Y2gtdGltZSBjb250ZXh0LgorLgorLgorLlNTICJUaGUgZ2VuZXJhbCBjb250ZXh0IgorLnJzCisuc3AKK0F0IHByZXNlbnQsIHRoaXMgY29udGV4dCBqdXN0IGNvbnRhaW5zIHBvaW50ZXJzIHRvIChhbmQgZGF0YSBmb3IpIGV4dGVybmFsCittZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGZyb20gc2V2ZXJhbCBwbGFjZXMgaW4gdGhlIFBDUkUyCitsaWJyYXJ5LiBUaGUgY29udGV4dCBpcyBuYW1lZCBgZ2VuZXJhbCcgcmF0aGVyIHRoYW4gc3BlY2lmaWNhbGx5IGBtZW1vcnknCitiZWNhdXNlIGluIGZ1dHVyZSBvdGhlciBmaWVsZHMgbWF5IGJlIGFkZGVkLiBJZiB5b3UgZG8gbm90IHdhbnQgdG8gc3VwcGx5IHlvdXIKK293biBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLCB5b3UgZG8gbm90IG5lZWQgdG8gYm90aGVyIHdpdGggYQorZ2VuZXJhbCBjb250ZXh0LiBBIGdlbmVyYWwgY29udGV4dCBpcyBjcmVhdGVkIGJ5OgorLnNwCisubmYKKy5CIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZSgKKy5CICIgIHZvaWQgKigqXGZJcHJpdmF0ZV9tYWxsb2NcZlApKFBDUkUyX1NJWkUsIHZvaWQgKiksIgorLkIgIiAgdm9pZCAoKlxmSXByaXZhdGVfZnJlZVxmUCkodm9pZCAqLCB2b2lkICopLCB2b2lkICpcZkltZW1vcnlfZGF0YVxmUCk7IgorLmZpCisuc3AKK1RoZSB0d28gZnVuY3Rpb24gcG9pbnRlcnMgc3BlY2lmeSBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLCB3aG9zZQorcHJvdG90eXBlcyBhcmU6Cisuc3AKKyAgXGZCdm9pZCAqcHJpdmF0ZV9tYWxsb2MoUENSRTJfU0laRSwgdm9pZCAqKTtcZlAKKyAgXGZCdm9pZCAgcHJpdmF0ZV9mcmVlKHZvaWQgKiwgdm9pZCAqKTtcZlAKKy5zcAorV2hlbmV2ZXIgY29kZSBpbiBQQ1JFMiBjYWxscyB0aGVzZSBmdW5jdGlvbnMsIHRoZSBmaW5hbCBhcmd1bWVudCBpcyB0aGUgdmFsdWUKK29mIFxmSW1lbW9yeV9kYXRhXGZQLiBFaXRoZXIgb2YgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMgb2YgdGhlIGNyZWF0aW9uCitmdW5jdGlvbiBtYXkgYmUgTlVMTCwgaW4gd2hpY2ggY2FzZSB0aGUgc3lzdGVtIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucworXGZJbWFsbG9jKClcZlAgYW5kIFxmSWZyZWUoKVxmUCBhcmUgdXNlZC4gKFRoaXMgaXMgbm90IGN1cnJlbnRseSB1c2VmdWwsIGFzCit0aGVyZSBhcmUgbm8gb3RoZXIgZmllbGRzIGluIGEgZ2VuZXJhbCBjb250ZXh0LCBidXQgaW4gZnV0dXJlIHRoZXJlIG1pZ2h0IGJlLikKK1RoZSBcZklwcml2YXRlX21hbGxvYygpXGZQIGZ1bmN0aW9uIGlzIHVzZWQgKGlmIHN1cHBsaWVkKSB0byBvYnRhaW4gbWVtb3J5IGZvcgorc3RvcmluZyB0aGUgY29udGV4dCwgYW5kIGFsbCB0aHJlZSB2YWx1ZXMgYXJlIHNhdmVkIGFzIHBhcnQgb2YgdGhlIGNvbnRleHQuCisuUAorV2hlbmV2ZXIgUENSRTIgY3JlYXRlcyBhIGRhdGEgYmxvY2sgb2YgYW55IGtpbmQsIHRoZSBibG9jayBjb250YWlucyBhIHBvaW50ZXIKK3RvIHRoZSBcZklmcmVlKClcZlAgZnVuY3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBcZkltYWxsb2MoKVxmUCBmdW5jdGlvbiB0aGF0IHdhcwordXNlZC4gV2hlbiB0aGUgdGltZSBjb21lcyB0byBmcmVlIHRoZSBibG9jaywgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisuUAorQSBnZW5lcmFsIGNvbnRleHQgY2FuIGJlIGNvcGllZCBieSBjYWxsaW5nOgorLnNwCisubmYKKy5CIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHkoCisuQiAiICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKlxmSWdjb250ZXh0XGZQKTsiCisuZmkKKy5zcAorVGhlIG1lbW9yeSB1c2VkIGZvciBhIGdlbmVyYWwgY29udGV4dCBzaG91bGQgYmUgZnJlZWQgYnkgY2FsbGluZzoKKy5zcAorLm5mCisuQiB2b2lkIHBjcmUyX2dlbmVyYWxfY29udGV4dF9mcmVlKHBjcmUyX2dlbmVyYWxfY29udGV4dCAqXGZJZ2NvbnRleHRcZlApOworLmZpCisuc3AKKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9ImNvbXBpbGVjb250ZXh0Ij48L2E+CisuU1MgIlRoZSBjb21waWxlIGNvbnRleHQiCisucnMKKy5zcAorQSBjb21waWxlIGNvbnRleHQgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiBhbnkKK29mIHRoZSBmb2xsb3dpbmcgY29tcGlsZS10aW1lIHBhcmFtZXRlcnM6Cisuc3AKKyAgV2hhdCBcZVIgbWF0Y2hlcyAoVW5pY29kZSBuZXdsaW5lcyBvciBDUiwgTEYsIENSTEYgb25seSkKKyAgUENSRTIncyBjaGFyYWN0ZXIgdGFibGVzCisgIFRoZSBuZXdsaW5lIGNoYXJhY3RlciBzZXF1ZW5jZQorICBUaGUgY29tcGlsZSB0aW1lIG5lc3RlZCBwYXJlbnRoZXNlcyBsaW1pdAorICBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIHBhdHRlcm4gc3RyaW5nCisgIEFuIGV4dGVybmFsIGZ1bmN0aW9uIGZvciBzdGFjayBjaGVja2luZworLnNwCitBIGNvbXBpbGUgY29udGV4dCBpcyBhbHNvIHJlcXVpcmVkIGlmIHlvdSBhcmUgdXNpbmcgY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50LgorSWYgbm9uZSBvZiB0aGVzZSBhcHBseSwganVzdCBwYXNzIE5VTEwgYXMgdGhlIGNvbnRleHQgYXJndW1lbnQgb2YKK1xmSXBjcmUyX2NvbXBpbGUoKVxmUC4KKy5QCitBIGNvbXBpbGUgY29udGV4dCBpcyBjcmVhdGVkLCBjb3BpZWQsIGFuZCBmcmVlZCBieSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKy5zcAorLm5mCisuQiBwY3JlMl9jb21waWxlX2NvbnRleHQgKnBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUoCisuQiAiICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKlxmSWdjb250ZXh0XGZQKTsiCisuc3AKKy5CIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqcGNyZTJfY29tcGlsZV9jb250ZXh0X2NvcHkoCisuQiAiICBwY3JlMl9jb21waWxlX2NvbnRleHQgKlxmSWNjb250ZXh0XGZQKTsiCisuc3AKKy5CIHZvaWQgcGNyZTJfY29tcGlsZV9jb250ZXh0X2ZyZWUocGNyZTJfY29tcGlsZV9jb250ZXh0ICpcZkljY29udGV4dFxmUCk7CisuZmkKKy5zcAorQSBjb21waWxlIGNvbnRleHQgaXMgY3JlYXRlZCB3aXRoIGRlZmF1bHQgdmFsdWVzIGZvciBpdHMgcGFyYW1ldGVycy4gVGhlc2UgY2FuCitiZSBjaGFuZ2VkIGJ5IGNhbGxpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMsIHdoaWNoIHJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yCitQQ1JFMl9FUlJPUl9CQUREQVRBIGlmIGludmFsaWQgZGF0YSBpcyBkZXRlY3RlZC4KKy5zcAorLm5mCisuQiBpbnQgcGNyZTJfc2V0X2JzcihwY3JlMl9jb21waWxlX2NvbnRleHQgKlxmSWNjb250ZXh0XGZQLAorLkIgIiAgdWludDMyX3QgXGZJdmFsdWVcZlApOyIKKy5maQorLnNwCitUaGUgdmFsdWUgbXVzdCBiZSBQQ1JFMl9CU1JfQU5ZQ1JMRiwgdG8gc3BlY2lmeSB0aGF0IFxlUiBtYXRjaGVzIG9ubHkgQ1IsIExGLAorb3IgQ1JMRiwgb3IgUENSRTJfQlNSX1VOSUNPREUsIHRvIHNwZWNpZnkgdGhhdCBcZVIgbWF0Y2hlcyBhbnkgVW5pY29kZSBsaW5lCitlbmRpbmcgc2VxdWVuY2UuIFRoZSB2YWx1ZSBpcyB1c2VkIGJ5IHRoZSBKSVQgY29tcGlsZXIgYW5kIGJ5IHRoZSB0d28KK2ludGVycHJldGVkIG1hdGNoaW5nIGZ1bmN0aW9ucywgXGZJcGNyZTJfbWF0Y2goKVxmUCBhbmQKK1xmSXBjcmUyX2RmYV9tYXRjaCgpXGZQLgorLnNwCisubmYKKy5CIGludCBwY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcyhwY3JlMl9jb21waWxlX2NvbnRleHQgKlxmSWNjb250ZXh0XGZQLAorLkIgIiAgY29uc3QgdW5zaWduZWQgY2hhciAqXGZJdGFibGVzXGZQKTsiCisuZmkKKy5zcAorVGhlIHZhbHVlIG11c3QgYmUgdGhlIHJlc3VsdCBvZiBhIGNhbGwgdG8gXGZJcGNyZTJfbWFrZXRhYmxlcygpXGZQLCB3aG9zZSBvbmx5Cithcmd1bWVudCBpcyBhIGdlbmVyYWwgY29udGV4dC4gVGhpcyBmdW5jdGlvbiBidWlsZHMgYSBzZXQgb2YgY2hhcmFjdGVyIHRhYmxlcworaW4gdGhlIGN1cnJlbnQgbG9jYWxlLgorLnNwCisubmYKKy5CIGludCBwY3JlMl9zZXRfbWF4X3BhdHRlcm5fbGVuZ3RoKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlAsCisuQiAiICBQQ1JFMl9TSVpFIFxmSXZhbHVlXGZQKTsiCisuZmkKKy5zcAorVGhpcyBzZXRzIGEgbWF4aW11bSBsZW5ndGgsIGluIGNvZGUgdW5pdHMsIGZvciB0aGUgcGF0dGVybiBzdHJpbmcgdGhhdCBpcyB0byBiZQorY29tcGlsZWQuIElmIHRoZSBwYXR0ZXJuIGlzIGxvbmdlciwgYW4gZXJyb3IgaXMgZ2VuZXJhdGVkLiBUaGlzIGZhY2lsaXR5IGlzCitwcm92aWRlZCBzbyB0aGF0IGFwcGxpY2F0aW9ucyB0aGF0IGFjY2VwdCBwYXR0ZXJucyBmcm9tIGV4dGVybmFsIHNvdXJjZXMgY2FuCitsaW1pdCB0aGVpciBzaXplLiBUaGUgZGVmYXVsdCBpcyB0aGUgbGFyZ2VzdCBudW1iZXIgdGhhdCBhIFBDUkUyX1NJWkUgdmFyaWFibGUKK2NhbiBob2xkLCB3aGljaCBpcyBlZmZlY3RpdmVseSB1bmxpbWl0ZWQuCisuc3AKKy5uZgorLkIgaW50IHBjcmUyX3NldF9uZXdsaW5lKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlAsCisuQiAiICB1aW50MzJfdCBcZkl2YWx1ZVxmUCk7IgorLmZpCisuc3AKK1RoaXMgc3BlY2lmaWVzIHdoaWNoIGNoYXJhY3RlcnMgb3IgY2hhcmFjdGVyIHNlcXVlbmNlcyBhcmUgdG8gYmUgcmVjb2duaXplZCBhcworbmV3bGluZXMuIFRoZSB2YWx1ZSBtdXN0IGJlIG9uZSBvZiBQQ1JFMl9ORVdMSU5FX0NSIChjYXJyaWFnZSByZXR1cm4gb25seSksCitQQ1JFMl9ORVdMSU5FX0xGIChsaW5lZmVlZCBvbmx5KSwgUENSRTJfTkVXTElORV9DUkxGICh0aGUgdHdvLWNoYXJhY3Rlcgorc2VxdWVuY2UgQ1IgZm9sbG93ZWQgYnkgTEYpLCBQQ1JFMl9ORVdMSU5FX0FOWUNSTEYgKGFueSBvZiB0aGUgYWJvdmUpLCBvcgorUENSRTJfTkVXTElORV9BTlkgKGFueSBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UpLgorLlAKK1doZW4gYSBwYXR0ZXJuIGlzIGNvbXBpbGVkIHdpdGggdGhlIFBDUkUyX0VYVEVOREVEIG9wdGlvbiwgdGhlIHZhbHVlIG9mIHRoaXMKK3BhcmFtZXRlciBhZmZlY3RzIHRoZSByZWNvZ25pdGlvbiBvZiB3aGl0ZSBzcGFjZSBhbmQgdGhlIGVuZCBvZiBpbnRlcm5hbAorY29tbWVudHMgc3RhcnRpbmcgd2l0aCAjLiBUaGUgdmFsdWUgaXMgc2F2ZWQgd2l0aCB0aGUgY29tcGlsZWQgcGF0dGVybiBmb3IKK3N1YnNlcXVlbnQgdXNlIGJ5IHRoZSBKSVQgY29tcGlsZXIgYW5kIGJ5IHRoZSB0d28gaW50ZXJwcmV0ZWQgbWF0Y2hpbmcKK2Z1bmN0aW9ucywgXGZJcGNyZTJfbWF0Y2goKVxmUCBhbmQgXGZJcGNyZTJfZGZhX21hdGNoKClcZlAuCisuc3AKKy5uZgorLkIgaW50IHBjcmUyX3NldF9wYXJlbnNfbmVzdF9saW1pdChwY3JlMl9jb21waWxlX2NvbnRleHQgKlxmSWNjb250ZXh0XGZQLAorLkIgIiAgdWludDMyX3QgXGZJdmFsdWVcZlApOyIKKy5maQorLnNwCitUaGlzIHBhcmFtZXRlciBhanVzdHMgdGhlIGxpbWl0LCBzZXQgd2hlbiBQQ1JFMiBpcyBidWlsdCAoZGVmYXVsdCAyNTApLCBvbiB0aGUKK2RlcHRoIG9mIHBhcmVudGhlc2lzIG5lc3RpbmcgaW4gYSBwYXR0ZXJuLiBUaGlzIGxpbWl0IHN0b3BzIHJvZ3VlIHBhdHRlcm5zCit1c2luZyB1cCB0b28gbXVjaCBzeXN0ZW0gc3RhY2sgd2hlbiBiZWluZyBjb21waWxlZC4KKy5zcAorLm5mCisuQiBpbnQgcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlAsCisuQiAiICBpbnQgKCpcZklndWFyZF9mdW5jdGlvblxmUCkodWludDMyX3QsIHZvaWQgKiksIHZvaWQgKlxmSXVzZXJfZGF0YVxmUCk7IgorLmZpCisuc3AKK1RoZXJlIGlzIGF0IGxlYXN0IG9uZSBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgUENSRTIgaW4gdGhyZWFkcyB3aXRoIHZlcnkgbGltaXRlZAorc3lzdGVtIHN0YWNrLCB3aGVyZSBydW5uaW5nIG91dCBvZiBzdGFjayBpcyB0byBiZSBhdm9pZGVkIGF0IGFsbCBjb3N0cy4gVGhlCitwYXJlbnRoZXNpcyBsaW1pdCBhYm92ZSBjYW5ub3QgdGFrZSBhY2NvdW50IG9mIGhvdyBtdWNoIHN0YWNrIGlzIGFjdHVhbGx5CithdmFpbGFibGUuIEZvciBhIGZpbmVyIGNvbnRyb2wsIHlvdSBjYW4gc3VwcGx5IGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQKK3doZW5ldmVyIFxmQnBjcmUyX2NvbXBpbGUoKVxmUCBzdGFydHMgdG8gY29tcGlsZSBhIHBhcmVudGhlc2l6ZWQgcGFydCBvZiBhCitwYXR0ZXJuLiBUaGlzIGZ1bmN0aW9uIGNhbiBjaGVjayB0aGUgYWN0dWFsIHN0YWNrIHNpemUgKG9yIGFueXRoaW5nIGVsc2UgdGhhdAoraXQgd2FudHMgdG8sIG9mIGNvdXJzZSkuCisuUAorVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjYWxsb3V0IGZ1bmN0aW9uIGdpdmVzIHRoZSBjdXJyZW50IGRlcHRoIG9mCituZXN0aW5nLCBhbmQgdGhlIHNlY29uZCBpcyB1c2VyIGRhdGEgdGhhdCBpcyBzZXQgdXAgYnkgdGhlIGxhc3QgYXJndW1lbnQgb2YKK1xmQnBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZCgpXGZQLiBUaGUgY2FsbG91dCBmdW5jdGlvbiBzaG91bGQgcmV0dXJuCit6ZXJvIGlmIGFsbCBpcyB3ZWxsLCBvciBub24temVybyB0byBmb3JjZSBhbiBlcnJvci4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9Im1hdGNoY29udGV4dCI+PC9hPgorLlNTICJUaGUgbWF0Y2ggY29udGV4dCIKKy5ycworLnNwCitBIG1hdGNoIGNvbnRleHQgaXMgcmVxdWlyZWQgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiBhbnkKK29mIHRoZSBmb2xsb3dpbmcgbWF0Y2gtdGltZSBwYXJhbWV0ZXJzOgorLnNwCisgIEEgY2FsbG91dCBmdW5jdGlvbgorICBUaGUgb2Zmc2V0IGxpbWl0IGZvciBtYXRjaGluZyBhbiB1bmFuY2hvcmVkIHBhdHRlcm4KKyAgVGhlIGxpbWl0IGZvciBjYWxsaW5nIFxmQm1hdGNoKClcZlAgKHNlZSBiZWxvdykKKyAgVGhlIGxpbWl0IGZvciBjYWxsaW5nIFxmQm1hdGNoKClcZlAgcmVjdXJzaXZlbHkKKy5zcAorQSBtYXRjaCBjb250ZXh0IGlzIGFsc28gcmVxdWlyZWQgaWYgeW91IGFyZSB1c2luZyBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQuCitJZiBub25lIG9mIHRoZXNlIGFwcGx5LCBqdXN0IHBhc3MgTlVMTCBhcyB0aGUgY29udGV4dCBhcmd1bWVudCBvZgorXGZCcGNyZTJfbWF0Y2goKVxmUCwgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAsIG9yIFxmQnBjcmUyX2ppdF9tYXRjaCgpXGZQLgorLlAKK0EgbWF0Y2ggY29udGV4dCBpcyBjcmVhdGVkLCBjb3BpZWQsIGFuZCBmcmVlZCBieSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKy5zcAorLm5mCisuQiBwY3JlMl9tYXRjaF9jb250ZXh0ICpwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZSgKKy5CICIgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqXGZJZ2NvbnRleHRcZlApOyIKKy5zcAorLkIgcGNyZTJfbWF0Y2hfY29udGV4dCAqcGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5KAorLkIgIiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlApOyIKKy5zcAorLkIgdm9pZCBwY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWUocGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlApOworLmZpCisuc3AKK0EgbWF0Y2ggY29udGV4dCBpcyBjcmVhdGVkIHdpdGggZGVmYXVsdCB2YWx1ZXMgZm9yIGl0cyBwYXJhbWV0ZXJzLiBUaGVzZSBjYW4KK2JlIGNoYW5nZWQgYnkgY2FsbGluZyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucywgd2hpY2ggcmV0dXJuIDAgb24gc3VjY2Vzcywgb3IKK1BDUkUyX0VSUk9SX0JBRERBVEEgaWYgaW52YWxpZCBkYXRhIGlzIGRldGVjdGVkLgorLnNwCisubmYKKy5CIGludCBwY3JlMl9zZXRfY2FsbG91dChwY3JlMl9tYXRjaF9jb250ZXh0ICpcZkltY29udGV4dFxmUCwKKy5CICIgIGludCAoKlxmSWNhbGxvdXRfZnVuY3Rpb25cZlApKHBjcmUyX2NhbGxvdXRfYmxvY2sgKiwgdm9pZCAqKSwiCisuQiAiICB2b2lkICpcZkljYWxsb3V0X2RhdGFcZlApOyIKKy5maQorLnNwCitUaGlzIHNldHMgdXAgYSAiY2FsbG91dCIgZnVuY3Rpb24sIHdoaWNoIFBDUkUyIHdpbGwgY2FsbCBhdCBzcGVjaWZpZWQgcG9pbnRzCitkdXJpbmcgYSBtYXRjaGluZyBvcGVyYXRpb24uIERldGFpbHMgYXJlIGdpdmVuIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyY2FsbG91dFxmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLnNwCisubmYKKy5CIGludCBwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKlxmSW1jb250ZXh0XGZQLAorLkIgIiAgUENSRTJfU0laRSBcZkl2YWx1ZVxmUCk7IgorLmZpCisuc3AKK1RoZSBcZklvZmZzZXRfbGltaXRcZlAgcGFyYW1ldGVyIGxpbWl0cyBob3cgZmFyIGFuIHVuYW5jaG9yZWQgc2VhcmNoIGNhbgorYWR2YW5jZSBpbiB0aGUgc3ViamVjdCBzdHJpbmcuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIFBDUkUyX1VOU0VULiBUaGUKK1xmQnBjcmUyX21hdGNoKClcZlAgYW5kIFxmQnBjcmUyX2RmYV9tYXRjaCgpXGZQIGZ1bmN0aW9ucyByZXR1cm4KK1BDUkUyX0VSUk9SX05PTUFUQ0ggaWYgYSBtYXRjaCB3aXRoIGEgc3RhcnRpbmcgcG9pbnQgYmVmb3JlIG9yIGF0IHRoZSBnaXZlbgorb2Zmc2V0IGlzIG5vdCBmb3VuZC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwYXR0ZXJuIC9hYmMvIGlzIG1hdGNoZWQgYWdhaW5zdAorIjEyM2FiYyIgd2l0aCBhbiBvZmZzZXQgbGltaXQgbGVzcyB0aGFuIDMsIHRoZSByZXN1bHQgaXMgUENSRTJfRVJST1JfTk9fTUFUQ0guCitBIG1hdGNoIGNhbiBuZXZlciBiZSBmb3VuZCBpZiB0aGUgXGZJc3RhcnRvZmZzZXRcZlAgYXJndW1lbnQgb2YKK1xmQnBjcmUyX21hdGNoKClcZlAgb3IgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgaXMgZ3JlYXRlciB0aGFuIHRoZSBvZmZzZXQKK2xpbWl0LgorLlAKK1doZW4gdXNpbmcgdGhpcyBmYWNpbGl0eSwgeW91IG11c3Qgc2V0IFBDUkUyX1VTRV9PRkZTRVRfTElNSVQgd2hlbiBjYWxsaW5nCitcZkJwY3JlMl9jb21waWxlKClcZlAgc28gdGhhdCB3aGVuIEpJVCBpcyBpbiB1c2UsIGRpZmZlcmVudCBjb2RlIGNhbiBiZQorY29tcGlsZWQuIElmIGEgbWF0Y2ggaXMgc3RhcnRlZCB3aXRoIGEgbm9uLWRlZmF1bHQgbWF0Y2ggbGltaXQgd2hlbgorUENSRTJfVVNFX09GRlNFVF9MSU1JVCBpcyBub3Qgc2V0LCBhbiBlcnJvciBpcyBnZW5lcmF0ZWQuCisuUAorVGhlIG9mZnNldCBsaW1pdCBmYWNpbGl0eSBjYW4gYmUgdXNlZCB0byB0cmFjayBwcm9ncmVzcyB3aGVuIHNlYXJjaGluZyBsYXJnZQorc3ViamVjdCBzdHJpbmdzLiBTZWUgYWxzbyB0aGUgUENSRTJfRklSU1RMSU5FIG9wdGlvbiwgd2hpY2ggcmVxdWlyZXMgYSBtYXRjaCB0bworc3RhcnQgd2l0aGluIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSBzdWJqZWN0LiBJZiB0aGlzIGlzIHNldCB3aXRoIGFuIG9mZnNldAorbGltaXQsIGEgbWF0Y2ggbXVzdCBvY2N1ciBpbiB0aGUgZmlyc3QgbGluZSBhbmQgYWxzbyB3aXRoaW4gdGhlIG9mZnNldCBsaW1pdC4KK0luIG90aGVyIHdvcmRzLCB3aGljaGV2ZXIgbGltaXQgY29tZXMgZmlyc3QgaXMgdXNlZC4KKy5zcAorLm5mCisuQiBpbnQgcGNyZTJfc2V0X21hdGNoX2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKlxmSW1jb250ZXh0XGZQLAorLkIgIiAgdWludDMyX3QgXGZJdmFsdWVcZlApOyIKKy5maQorLnNwCitUaGUgXGZJbWF0Y2hfbGltaXRcZlAgcGFyYW1ldGVyIHByb3ZpZGVzIGEgbWVhbnMgb2YgcHJldmVudGluZyBQQ1JFMiBmcm9tIHVzaW5nCit1cCB0b28gbWFueSByZXNvdXJjZXMgd2hlbiBwcm9jZXNzaW5nIHBhdHRlcm5zIHRoYXQgYXJlIG5vdCBnb2luZyB0byBtYXRjaCwgYnV0Cit3aGljaCBoYXZlIGEgdmVyeSBsYXJnZSBudW1iZXIgb2YgcG9zc2liaWxpdGllcyBpbiB0aGVpciBzZWFyY2ggdHJlZXMuIFRoZQorY2xhc3NpYyBleGFtcGxlIGlzIGEgcGF0dGVybiB0aGF0IHVzZXMgbmVzdGVkIHVubGltaXRlZCByZXBlYXRzLgorLlAKK0ludGVybmFsbHksIFxmQnBjcmUyX21hdGNoKClcZlAgdXNlcyBhIGZ1bmN0aW9uIGNhbGxlZCBcZkJtYXRjaCgpXGZQLCB3aGljaCBpdAorY2FsbHMgcmVwZWF0ZWRseSAoc29tZXRpbWVzIHJlY3Vyc2l2ZWx5KS4gVGhlIGxpbWl0IHNldCBieSBcZkltYXRjaF9saW1pdFxmUCBpcworaW1wb3NlZCBvbiB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBhIG1hdGNoLCB3aGljaAoraGFzIHRoZSBlZmZlY3Qgb2YgbGltaXRpbmcgdGhlIGFtb3VudCBvZiBiYWNrdHJhY2tpbmcgdGhhdCBjYW4gdGFrZSBwbGFjZS4gRm9yCitwYXR0ZXJucyB0aGF0IGFyZSBub3QgYW5jaG9yZWQsIHRoZSBjb3VudCByZXN0YXJ0cyBmcm9tIHplcm8gZm9yIGVhY2ggcG9zaXRpb24KK2luIHRoZSBzdWJqZWN0IHN0cmluZy4gVGhpcyBsaW1pdCBpcyBub3QgcmVsZXZhbnQgdG8gXGZCcGNyZTJfZGZhX21hdGNoKClcZlAsCit3aGljaCBpZ25vcmVzIGl0LgorLlAKK1doZW4gXGZCcGNyZTJfbWF0Y2goKVxmUCBpcyBjYWxsZWQgd2l0aCBhIHBhdHRlcm4gdGhhdCB3YXMgc3VjY2Vzc2Z1bGx5Citwcm9jZXNzZWQgYnkgXGZCcGNyZTJfaml0X2NvbXBpbGUoKVxmUCwgdGhlIHdheSBpbiB3aGljaCBtYXRjaGluZyBpcyBleGVjdXRlZAoraXMgZW50aXJlbHkgZGlmZmVyZW50LiBIb3dldmVyLCB0aGVyZSBpcyBzdGlsbCB0aGUgcG9zc2liaWxpdHkgb2YgcnVuYXdheQorbWF0Y2hpbmcgdGhhdCBnb2VzIG9uIGZvciBhIHZlcnkgbG9uZyB0aW1lLCBhbmQgc28gdGhlIFxmSW1hdGNoX2xpbWl0XGZQIHZhbHVlCitpcyBhbHNvIHVzZWQgaW4gdGhpcyBjYXNlIChidXQgaW4gYSBkaWZmZXJlbnQgd2F5KSB0byBsaW1pdCBob3cgbG9uZyB0aGUKK21hdGNoaW5nIGNhbiBjb250aW51ZS4KKy5QCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGxpbWl0IGNhbiBiZSBzZXQgd2hlbiBQQ1JFMiBpcyBidWlsdDsgdGhlIGRlZmF1bHQKK2RlZmF1bHQgaXMgMTAgbWlsbGlvbiwgd2hpY2ggaGFuZGxlcyBhbGwgYnV0IHRoZSBtb3N0IGV4dHJlbWUgY2FzZXMuIElmIHRoZQorbGltaXQgaXMgZXhjZWVkZWQsIFxmQnBjcmUyX21hdGNoKClcZlAgcmV0dXJucyBQQ1JFMl9FUlJPUl9NQVRDSExJTUlULiBBIHZhbHVlCitmb3IgdGhlIG1hdGNoIGxpbWl0IG1heSBhbHNvIGJlIHN1cHBsaWVkIGJ5IGFuIGl0ZW0gYXQgdGhlIHN0YXJ0IG9mIGEgcGF0dGVybgorb2YgdGhlIGZvcm0KKy5zcAorICAoKkxJTUlUX01BVENIPWRkZCkKKy5zcAord2hlcmUgZGRkIGlzIGEgZGVjaW1hbCBudW1iZXIuIEhvd2V2ZXIsIHN1Y2ggYSBzZXR0aW5nIGlzIGlnbm9yZWQgdW5sZXNzIGRkZCBpcworbGVzcyB0aGFuIHRoZSBsaW1pdCBzZXQgYnkgdGhlIGNhbGxlciBvZiBcZkJwY3JlMl9tYXRjaCgpXGZQIG9yLCBpZiBubyBzdWNoCitsaW1pdCBpcyBzZXQsIGxlc3MgdGhhbiB0aGUgZGVmYXVsdC4KKy5zcAorLm5mCisuQiBpbnQgcGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdChwY3JlMl9tYXRjaF9jb250ZXh0ICpcZkltY29udGV4dFxmUCwKKy5CICIgIHVpbnQzMl90IFxmSXZhbHVlXGZQKTsiCisuZmkKKy5zcAorVGhlIFxmSXJlY3Vyc2lvbl9saW1pdFxmUCBwYXJhbWV0ZXIgaXMgc2ltaWxhciB0byBcZkltYXRjaF9saW1pdFxmUCwgYnV0CitpbnN0ZWFkIG9mIGxpbWl0aW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgdGltZXMgdGhhdCBcZkJtYXRjaCgpXGZQIGlzIGNhbGxlZCwgaXQKK2xpbWl0cyB0aGUgZGVwdGggb2YgcmVjdXJzaW9uLiBUaGUgcmVjdXJzaW9uIGRlcHRoIGlzIGEgc21hbGxlciBudW1iZXIgdGhhbiB0aGUKK3RvdGFsIG51bWJlciBvZiBjYWxscywgYmVjYXVzZSBub3QgYWxsIGNhbGxzIHRvIFxmQm1hdGNoKClcZlAgYXJlIHJlY3Vyc2l2ZS4KK1RoaXMgbGltaXQgaXMgb2YgdXNlIG9ubHkgaWYgaXQgaXMgc2V0IHNtYWxsZXIgdGhhbiBcZkltYXRjaF9saW1pdFxmUC4KKy5QCitMaW1pdGluZyB0aGUgcmVjdXJzaW9uIGRlcHRoIGxpbWl0cyB0aGUgYW1vdW50IG9mIHN5c3RlbSBzdGFjayB0aGF0IGNhbiBiZQordXNlZCwgb3IsIHdoZW4gUENSRTIgaGFzIGJlZW4gY29tcGlsZWQgdG8gdXNlIG1lbW9yeSBvbiB0aGUgaGVhcCBpbnN0ZWFkIG9mIHRoZQorc3RhY2ssIHRoZSBhbW91bnQgb2YgaGVhcCBtZW1vcnkgdGhhdCBjYW4gYmUgdXNlZC4gVGhpcyBsaW1pdCBpcyBub3QgcmVsZXZhbnQsCithbmQgaXMgaWdub3JlZCwgd2hlbiBtYXRjaGluZyBpcyBkb25lIHVzaW5nIEpJVCBjb21waWxlZCBjb2RlIG9yIGJ5IHRoZQorXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgZnVuY3Rpb24uCisuUAorVGhlIGRlZmF1bHQgdmFsdWUgZm9yIFxmSXJlY3Vyc2lvbl9saW1pdFxmUCBjYW4gYmUgc2V0IHdoZW4gUENSRTIgaXMgYnVpbHQ7IHRoZQorZGVmYXVsdCBkZWZhdWx0IGlzIHRoZSBzYW1lIHZhbHVlIGFzIHRoZSBkZWZhdWx0IGZvciBcZkltYXRjaF9saW1pdFxmUC4gSWYgdGhlCitsaW1pdCBpcyBleGNlZWRlZCwgXGZCcGNyZTJfbWF0Y2goKVxmUCByZXR1cm5zIFBDUkUyX0VSUk9SX1JFQ1VSU0lPTkxJTUlULiBBCit2YWx1ZSBmb3IgdGhlIHJlY3Vyc2lvbiBsaW1pdCBtYXkgYWxzbyBiZSBzdXBwbGllZCBieSBhbiBpdGVtIGF0IHRoZSBzdGFydCBvZiBhCitwYXR0ZXJuIG9mIHRoZSBmb3JtCisuc3AKKyAgKCpMSU1JVF9SRUNVUlNJT049ZGRkKQorLnNwCit3aGVyZSBkZGQgaXMgYSBkZWNpbWFsIG51bWJlci4gSG93ZXZlciwgc3VjaCBhIHNldHRpbmcgaXMgaWdub3JlZCB1bmxlc3MgZGRkIGlzCitsZXNzIHRoYW4gdGhlIGxpbWl0IHNldCBieSB0aGUgY2FsbGVyIG9mIFxmQnBjcmUyX21hdGNoKClcZlAgb3IsIGlmIG5vIHN1Y2gKK2xpbWl0IGlzIHNldCwgbGVzcyB0aGFuIHRoZSBkZWZhdWx0LgorLnNwCisubmYKKy5CIGludCBwY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50KAorLkIgIiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlAsIgorLkIgIiAgdm9pZCAqKCpcZklwcml2YXRlX21hbGxvY1xmUCkoUENSRTJfU0laRSwgdm9pZCAqKSwiCisuQiAiICB2b2lkICgqXGZJcHJpdmF0ZV9mcmVlXGZQKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKlxmSW1lbW9yeV9kYXRhXGZQKTsiCisuZmkKKy5zcAorVGhpcyBmdW5jdGlvbiBzZXRzIHVwIHR3byBhZGRpdGlvbmFsIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgZm9yIHVzZQorYnkgXGZCcGNyZTJfbWF0Y2goKVxmUCB3aGVuIFBDUkUyIGlzIGNvbXBpbGVkIHRvIHVzZSB0aGUgaGVhcCBmb3IgcmVtZW1iZXJpbmcKK2JhY2t0cmFja2luZyBkYXRhLCBpbnN0ZWFkIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscyB0aGF0IHVzZSB0aGUgc3lzdGVtCitzdGFjay4gVGhlcmUgaXMgYSBkaXNjdXNzaW9uIGFib3V0IFBDUkUyJ3Mgc3RhY2sgdXNhZ2UgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJzdGFja1xmUAorLlwiCitkb2N1bWVudGF0aW9uLiBTZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJidWlsZFxmUAorLlwiCitkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzIG9mIGhvdyB0byBidWlsZCBQQ1JFMi4KKy5QCitVc2luZyB0aGUgaGVhcCBmb3IgcmVjdXJzaW9uIGlzIGEgbm9uLXN0YW5kYXJkIHdheSBvZiBidWlsZGluZyBQQ1JFMiwgZm9yIHVzZQoraW4gZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBsaW1pdGVkIHN0YWNrcy4gQmVjYXVzZSBvZiB0aGUgZ3JlYXRlciB1c2Ugb2YgbWVtb3J5CittYW5hZ2VtZW50LCBcZkJwY3JlMl9tYXRjaCgpXGZQIHJ1bnMgbW9yZSBzbG93bHkuIEZ1bmN0aW9ucyB0aGF0IGFyZSBkaWZmZXJlbnQKK3RvIHRoZSBnZW5lcmFsIGN1c3RvbSBtZW1vcnkgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCBzbyB0aGF0IHNwZWNpYWwtcHVycG9zZQorZXh0ZXJuYWwgY29kZSBjYW4gYmUgdXNlZCBmb3IgdGhpcyBjYXNlLCBiZWNhdXNlIHRoZSBtZW1vcnkgYmxvY2tzIGFyZSBhbGwgdGhlCitzYW1lIHNpemUuIFRoZSBibG9ja3MgYXJlIHJldGFpbmVkIGJ5IFxmQnBjcmUyX21hdGNoKClcZlAgdW50aWwgaXQgaXMgYWJvdXQgdG8KK2V4aXQgc28gdGhhdCB0aGV5IGNhbiBiZSByZS11c2VkIHdoZW4gcG9zc2libGUgZHVyaW5nIHRoZSBtYXRjaC4gSW4gdGhlIGFic2VuY2UKK29mIHRoZXNlIGZ1bmN0aW9ucywgdGhlIG5vcm1hbCBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGFyZSB1c2VkLCBpZgorc3VwcGxpZWQsIG90aGVyd2lzZSB0aGUgc3lzdGVtIGZ1bmN0aW9ucy4KKy4KKy4KKy5TSCAiQ0hFQ0tJTkcgQlVJTEQtVElNRSBPUFRJT05TIgorLnJzCisuc3AKKy5CIGludCBwY3JlMl9jb25maWcodWludDMyX3QgXGZJd2hhdFxmUCwgdm9pZCAqXGZJd2hlcmVcZlApOworLlAKK1RoZSBmdW5jdGlvbiBcZkJwY3JlMl9jb25maWcoKVxmUCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgYSBQQ1JFMiBjbGllbnQgdG8KK2Rpc2NvdmVyIHdoaWNoIG9wdGlvbmFsIGZlYXR1cmVzIGhhdmUgYmVlbiBjb21waWxlZCBpbnRvIHRoZSBQQ1JFMiBsaWJyYXJ5LiBUaGUKKy5cIiBIUkVGCitcZkJwY3JlMmJ1aWxkXGZQCisuXCIKK2RvY3VtZW50YXRpb24gaGFzIG1vcmUgZGV0YWlscyBhYm91dCB0aGVzZSBvcHRpb25hbCBmZWF0dXJlcy4KKy5QCitUaGUgZmlyc3QgYXJndW1lbnQgZm9yIFxmQnBjcmUyX2NvbmZpZygpXGZQIHNwZWNpZmllcyB3aGljaCBpbmZvcm1hdGlvbiBpcworcmVxdWlyZWQuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIG1lbW9yeSBpbnRvIHdoaWNoIHRoZSBpbmZvcm1hdGlvbgoraXMgcGxhY2VkLiBJZiBOVUxMIGlzIHBhc3NlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBpcworbmVlZGVkIGZvciB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uLiBGb3IgY2FsbHMgdGhhdCByZXR1cm4gbnVtZXJpY2FsIHZhbHVlcywKK3RoZSB2YWx1ZSBpcyBpbiBieXRlczsgd2hlbiByZXF1ZXN0aW5nIHRoZXNlIHZhbHVlcywgXGZJd2hlcmVcZlAgc2hvdWxkIHBvaW50Cit0byBhcHByb3ByaWF0ZWx5IGFsaWduZWQgbWVtb3J5LiBGb3IgY2FsbHMgdGhhdCByZXR1cm4gc3RyaW5ncywgdGhlIHJlcXVpcmVkCitsZW5ndGggaXMgZ2l2ZW4gaW4gY29kZSB1bml0cywgbm90IGNvdW50aW5nIHRoZSB0ZXJtaW5hdGluZyB6ZXJvLgorLlAKK1doZW4gcmVxdWVzdGluZyBpbmZvcm1hdGlvbiwgdGhlIHJldHVybmVkIHZhbHVlIGZyb20gXGZCcGNyZTJfY29uZmlnKClcZlAgaXMKK25vbi1uZWdhdGl2ZSBvbiBzdWNjZXNzLCBvciB0aGUgbmVnYXRpdmUgZXJyb3IgY29kZSBQQ1JFMl9FUlJPUl9CQURPUFRJT04gaWYKK3RoZSB2YWx1ZSBpbiB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IHJlY29nbml6ZWQuIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMKK2F2YWlsYWJsZToKKy5zcAorICBQQ1JFMl9DT05GSUdfQlNSCisuc3AKK1RoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHdob3NlIHZhbHVlIGluZGljYXRlcyB3aGF0IGNoYXJhY3Rlcgorc2VxdWVuY2VzIHRoZSBcZVIgZXNjYXBlIHNlcXVlbmNlIG1hdGNoZXMgYnkgZGVmYXVsdC4gQSB2YWx1ZSBvZgorUENSRTJfQlNSX1VOSUNPREUgbWVhbnMgdGhhdCBcZVIgbWF0Y2hlcyBhbnkgVW5pY29kZSBsaW5lIGVuZGluZyBzZXF1ZW5jZTsgYQordmFsdWUgb2YgUENSRTJfQlNSX0FOWUNSTEYgbWVhbnMgdGhhdCBcZVIgbWF0Y2hlcyBvbmx5IENSLCBMRiwgb3IgQ1JMRi4gVGhlCitkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIHdoZW4gYSBwYXR0ZXJuIGlzIGNvbXBpbGVkLgorLnNwCisgIFBDUkUyX0NPTkZJR19KSVQKKy5zcAorVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgdGhhdCBpcyBzZXQgdG8gb25lIGlmIHN1cHBvcnQgZm9yIGp1c3QtaW4tdGltZQorY29tcGlsaW5nIGlzIGF2YWlsYWJsZTsgb3RoZXJ3aXNlIGl0IGlzIHNldCB0byB6ZXJvLgorLnNwCisgIFBDUkUyX0NPTkZJR19KSVRUQVJHRVQKKy5zcAorVGhlIFxmSXdoZXJlXGZQIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIGJ1ZmZlciB0aGF0IGlzIGF0IGxlYXN0IDQ4IGNvZGUKK3VuaXRzIGxvbmcuIChUaGUgZXhhY3QgbGVuZ3RoIHJlcXVpcmVkIGNhbiBiZSBmb3VuZCBieSBjYWxsaW5nCitcZkJwY3JlMl9jb25maWcoKVxmUCB3aXRoIFxmQndoZXJlXGZQIHNldCB0byBOVUxMLikgVGhlIGJ1ZmZlciBpcyBmaWxsZWQgd2l0aCBhCitzdHJpbmcgdGhhdCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYXJjaGl0ZWN0dXJlIGZvciB3aGljaCB0aGUgSklUIGNvbXBpbGVyIGlzCitjb25maWd1cmVkLCBmb3IgZXhhbXBsZSAieDg2IDMyYml0IChsaXR0bGUgZW5kaWFuICsgdW5hbGlnbmVkKSIuIElmIEpJVCBzdXBwb3J0CitpcyBub3QgYXZhaWxhYmxlLCBQQ1JFMl9FUlJPUl9CQURPUFRJT04gaXMgcmV0dXJuZWQsIG90aGVyd2lzZSB0aGUgbnVtYmVyIG9mCitjb2RlIHVuaXRzIHVzZWQgaXMgcmV0dXJuZWQuIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nLCBwbHVzIG9uZSB1bml0Citmb3IgdGhlIHRlcm1pbmF0aW5nIHplcm8uCisuc3AKKyAgUENSRTJfQ09ORklHX0xJTktTSVpFCisuc3AKK1RoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgY29udGFpbnMgdGhlIG51bWJlciBvZiBieXRlcyB1c2VkIGZvcgoraW50ZXJuYWwgbGlua2FnZSBpbiBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb25zLiBXaGVuIFBDUkUyIGlzIGNvbmZpZ3VyZWQsIHRoZQordmFsdWUgY2FuIGJlIHNldCB0byAyLCAzLCBvciA0LCB3aXRoIHRoZSBkZWZhdWx0IGJlaW5nIDIuIFRoaXMgaXMgdGhlIHZhbHVlCit0aGF0IGlzIHJldHVybmVkIGJ5IFxmQnBjcmUyX2NvbmZpZygpXGZQLiBIb3dldmVyLCB3aGVuIHRoZSAxNi1iaXQgbGlicmFyeSBpcworY29tcGlsZWQsIGEgdmFsdWUgb2YgMyBpcyByb3VuZGVkIHVwIHRvIDQsIGFuZCB3aGVuIHRoZSAzMi1iaXQgbGlicmFyeSBpcworY29tcGlsZWQsIGludGVybmFsIGxpbmthZ2VzIGFsd2F5cyB1c2UgNCBieXRlcywgc28gdGhlIGNvbmZpZ3VyZWQgdmFsdWUgaXMgbm90CityZWxldmFudC4KKy5QCitUaGUgZGVmYXVsdCB2YWx1ZSBvZiAyIGZvciB0aGUgOC1iaXQgYW5kIDE2LWJpdCBsaWJyYXJpZXMgaXMgc3VmZmljaWVudCBmb3IgYWxsCitidXQgdGhlIG1vc3QgbWFzc2l2ZSBwYXR0ZXJucywgc2luY2UgaXQgYWxsb3dzIHRoZSBzaXplIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuCit0byBiZSB1cCB0byA2NEsgY29kZSB1bml0cy4gTGFyZ2VyIHZhbHVlcyBhbGxvdyBsYXJnZXIgcmVndWxhciBleHByZXNzaW9ucyB0bworYmUgY29tcGlsZWQgYnkgdGhvc2UgdHdvIGxpYnJhcmllcywgYnV0IGF0IHRoZSBleHBlbnNlIG9mIHNsb3dlciBtYXRjaGluZy4KKy5zcAorICBQQ1JFMl9DT05GSUdfTUFUQ0hMSU1JVAorLnNwCitUaGUgb3V0cHV0IGlzIGEgdWludDMyX3QgaW50ZWdlciB0aGF0IGdpdmVzIHRoZSBkZWZhdWx0IGxpbWl0IGZvciB0aGUgbnVtYmVyIG9mCitpbnRlcm5hbCBtYXRjaGluZyBmdW5jdGlvbiBjYWxscyBpbiBhIFxmQnBjcmUyX21hdGNoKClcZlAgZXhlY3V0aW9uLiBGdXJ0aGVyCitkZXRhaWxzIGFyZSBnaXZlbiB3aXRoIFxmQnBjcmUyX21hdGNoKClcZlAgYmVsb3cuCisuc3AKKyAgUENSRTJfQ09ORklHX05FV0xJTkUKKy5zcAorVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgd2hvc2UgdmFsdWUgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGNoYXJhY3Rlcgorc2VxdWVuY2UgdGhhdCBpcyByZWNvZ25pemVkIGFzIG1lYW5pbmcgIm5ld2xpbmUiLiBUaGUgdmFsdWVzIGFyZToKKy5zcAorICBQQ1JFMl9ORVdMSU5FX0NSICAgICAgIENhcnJpYWdlIHJldHVybiAoQ1IpCisgIFBDUkUyX05FV0xJTkVfTEYgICAgICAgTGluZWZlZWQgKExGKQorICBQQ1JFMl9ORVdMSU5FX0NSTEYgICAgIENhcnJpYWdlIHJldHVybiwgbGluZWZlZWQgKENSTEYpCisgIFBDUkUyX05FV0xJTkVfQU5ZICAgICAgQW55IFVuaWNvZGUgbGluZSBlbmRpbmcKKyAgUENSRTJfTkVXTElORV9BTllDUkxGICBBbnkgb2YgQ1IsIExGLCBvciBDUkxGCisuc3AKK1RoZSBkZWZhdWx0IHNob3VsZCBub3JtYWxseSBjb3JyZXNwb25kIHRvIHRoZSBzdGFuZGFyZCBzZXF1ZW5jZSBmb3IgeW91cgorb3BlcmF0aW5nIHN5c3RlbS4KKy5zcAorICBQQ1JFMl9DT05GSUdfUEFSRU5TTElNSVQKKy5zcAorVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgdGhhdCBnaXZlcyB0aGUgbWF4aW11bSBkZXB0aCBvZiBuZXN0aW5nCitvZiBwYXJlbnRoZXNlcyAob2YgYW55IGtpbmQpIGluIGEgcGF0dGVybi4gVGhpcyBsaW1pdCBpcyBpbXBvc2VkIHRvIGNhcCB0aGUKK2Ftb3VudCBvZiBzeXN0ZW0gc3RhY2sgdXNlZCB3aGVuIGEgcGF0dGVybiBpcyBjb21waWxlZC4gSXQgaXMgc3BlY2lmaWVkIHdoZW4KK1BDUkUyIGlzIGJ1aWx0OyB0aGUgZGVmYXVsdCBpcyAyNTAuIFRoaXMgbGltaXQgZG9lcyBub3QgdGFrZSBpbnRvIGFjY291bnQgdGhlCitzdGFjayB0aGF0IG1heSBhbHJlYWR5IGJlIHVzZWQgYnkgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24uIEZvciBmaW5lciBjb250cm9sCitvdmVyIGNvbXBpbGF0aW9uIHN0YWNrIHVzYWdlLCBzZWUgXGZCcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKClcZlAuCisuc3AKKyAgUENSRTJfQ09ORklHX1JFQ1VSU0lPTkxJTUlUCisuc3AKK1RoZSBvdXRwdXQgaXMgYSB1aW50MzJfdCBpbnRlZ2VyIHRoYXQgZ2l2ZXMgdGhlIGRlZmF1bHQgbGltaXQgZm9yIHRoZSBkZXB0aCBvZgorcmVjdXJzaW9uIHdoZW4gY2FsbGluZyB0aGUgaW50ZXJuYWwgbWF0Y2hpbmcgZnVuY3Rpb24gaW4gYSBcZkJwY3JlMl9tYXRjaCgpXGZQCitleGVjdXRpb24uIEZ1cnRoZXIgZGV0YWlscyBhcmUgZ2l2ZW4gd2l0aCBcZkJwY3JlMl9tYXRjaCgpXGZQIGJlbG93LgorLnNwCisgIFBDUkUyX0NPTkZJR19TVEFDS1JFQ1VSU0UKKy5zcAorVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgdGhhdCBpcyBzZXQgdG8gb25lIGlmIGludGVybmFsIHJlY3Vyc2lvbiB3aGVuCitydW5uaW5nIFxmQnBjcmUyX21hdGNoKClcZlAgaXMgaW1wbGVtZW50ZWQgYnkgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIHRoYXQgdXNlCit0aGUgc3lzdGVtIHN0YWNrIHRvIHJlbWVtYmVyIHRoZWlyIHN0YXRlLiBUaGlzIGlzIHRoZSB1c3VhbCB3YXkgdGhhdCBQQ1JFMiBpcworY29tcGlsZWQuIFRoZSBvdXRwdXQgaXMgemVybyBpZiBQQ1JFMiB3YXMgY29tcGlsZWQgdG8gdXNlIGJsb2NrcyBvZiBkYXRhIG9uIHRoZQoraGVhcCBpbnN0ZWFkIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscy4KKy5zcAorICBQQ1JFMl9DT05GSUdfVU5JQ09ERV9WRVJTSU9OCisuc3AKK1RoZSBcZkl3aGVyZVxmUCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSBidWZmZXIgdGhhdCBpcyBhdCBsZWFzdCAyNCBjb2RlCit1bml0cyBsb25nLiAoVGhlIGV4YWN0IGxlbmd0aCByZXF1aXJlZCBjYW4gYmUgZm91bmQgYnkgY2FsbGluZworXGZCcGNyZTJfY29uZmlnKClcZlAgd2l0aCBcZkJ3aGVyZVxmUCBzZXQgdG8gTlVMTC4pIElmIFBDUkUyIGhhcyBiZWVuIGNvbXBpbGVkCit3aXRob3V0IFVuaWNvZGUgc3VwcG9ydCwgdGhlIGJ1ZmZlciBpcyBmaWxsZWQgd2l0aCB0aGUgdGV4dCAiVW5pY29kZSBub3QKK3N1cHBvcnRlZCIuIE90aGVyd2lzZSwgdGhlIFVuaWNvZGUgdmVyc2lvbiBzdHJpbmcgKGZvciBleGFtcGxlLCAiOC4wLjAiKSBpcworaW5zZXJ0ZWQuIFRoZSBudW1iZXIgb2YgY29kZSB1bml0cyB1c2VkIGlzIHJldHVybmVkLiBUaGlzIGlzIHRoZSBsZW5ndGggb2YgdGhlCitzdHJpbmcgcGx1cyBvbmUgdW5pdCBmb3IgdGhlIHRlcm1pbmF0aW5nIHplcm8uCisuc3AKKyAgUENSRTJfQ09ORklHX1VOSUNPREUKKy5zcAorVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IGludGVnZXIgdGhhdCBpcyBzZXQgdG8gb25lIGlmIFVuaWNvZGUgc3VwcG9ydCBpcworYXZhaWxhYmxlOyBvdGhlcndpc2UgaXQgaXMgc2V0IHRvIHplcm8uIFVuaWNvZGUgc3VwcG9ydCBpbXBsaWVzIFVURiBzdXBwb3J0LgorLnNwCisgIFBDUkUyX0NPTkZJR19WRVJTSU9OCisuc3AKK1RoZSBcZkl3aGVyZVxmUCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSBidWZmZXIgdGhhdCBpcyBhdCBsZWFzdCAxMiBjb2RlCit1bml0cyBsb25nLiAoVGhlIGV4YWN0IGxlbmd0aCByZXF1aXJlZCBjYW4gYmUgZm91bmQgYnkgY2FsbGluZworXGZCcGNyZTJfY29uZmlnKClcZlAgd2l0aCBcZkJ3aGVyZVxmUCBzZXQgdG8gTlVMTC4pIFRoZSBidWZmZXIgaXMgZmlsbGVkIHdpdGgKK3RoZSBQQ1JFMiB2ZXJzaW9uIHN0cmluZywgemVyby10ZXJtaW5hdGVkLiBUaGUgbnVtYmVyIG9mIGNvZGUgdW5pdHMgdXNlZCBpcworcmV0dXJuZWQuIFRoaXMgaXMgdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHBsdXMgb25lIHVuaXQgZm9yIHRoZSB0ZXJtaW5hdGluZworemVyby4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9ImNvbXBpbGluZyI+PC9hPgorLlNIICJDT01QSUxJTkcgQSBQQVRURVJOIgorLnJzCisuc3AKKy5uZgorLkIgcGNyZTJfY29kZSAqcGNyZTJfY29tcGlsZShQQ1JFMl9TUFRSIFxmSXBhdHRlcm5cZlAsIFBDUkUyX1NJWkUgXGZJbGVuZ3RoXGZQLAorLkIgIiAgdWludDMyX3QgXGZJb3B0aW9uc1xmUCwgaW50ICpcZkllcnJvcmNvZGVcZlAsIFBDUkUyX1NJWkUgKlxmSWVycm9yb2Zmc2V0LFxmUCIKKy5CICIgIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqXGZJY2NvbnRleHRcZlApOyIKKy5zcAorLkIgdm9pZCBwY3JlMl9jb2RlX2ZyZWUocGNyZTJfY29kZSAqXGZJY29kZVxmUCk7CisuZmkKKy5QCitUaGUgXGZCcGNyZTJfY29tcGlsZSgpXGZQIGZ1bmN0aW9uIGNvbXBpbGVzIGEgcGF0dGVybiBpbnRvIGFuIGludGVybmFsIGZvcm0uCitUaGUgcGF0dGVybiBpcyBkZWZpbmVkIGJ5IGEgcG9pbnRlciB0byBhIHN0cmluZyBvZiBjb2RlIHVuaXRzIGFuZCBhIGxlbmd0aCwgSWYKK3RoZSBwYXR0ZXJuIGlzIHplcm8tdGVybWluYXRlZCwgdGhlIGxlbmd0aCBjYW4gYmUgc3BlY2lmaWVkIGFzCitQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byBhIGJsb2NrIG9mIG1lbW9yeSB0aGF0Citjb250YWlucyB0aGUgY29tcGlsZWQgcGF0dGVybiBhbmQgcmVsYXRlZCBkYXRhLiBUaGUgY2FsbGVyIG11c3QgZnJlZSB0aGUgbWVtb3J5CitieSBjYWxsaW5nIFxmQnBjcmUyX2NvZGVfZnJlZSgpXGZQIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKy5QCitOT1RFOiBXaGVuIG9uZSBvZiB0aGUgbWF0Y2hpbmcgZnVuY3Rpb25zIGlzIGNhbGxlZCwgcG9pbnRlcnMgdG8gdGhlIGNvbXBpbGVkCitwYXR0ZXJuIGFuZCB0aGUgc3ViamVjdCBzdHJpbmcgYXJlIHNldCBpbiB0aGUgbWF0Y2ggZGF0YSBibG9jayBzbyB0aGF0IHRoZXkgY2FuCitiZSByZWZlcmVuY2VkIGJ5IHRoZSBleHRyYWN0aW9uIGZ1bmN0aW9ucy4gQWZ0ZXIgcnVubmluZyBhIG1hdGNoLCB5b3UgbXVzdCBub3QKK2ZyZWUgYSBjb21waWxlZCBwYXR0ZXJuIChvciBhIHN1YmplY3Qgc3RyaW5nKSB1bnRpbCBhZnRlciBhbGwgb3BlcmF0aW9ucyBvbiB0aGUKKy5cIiBIVE1MIDxhIGhyZWY9IiNtYXRjaGRhdGFibG9jayI+CisuXCIgPC9hPgorbWF0Y2ggZGF0YSBibG9jaworLlwiCitoYXZlIHRha2VuIHBsYWNlLgorLlAKK0lmIHRoZSBjb21waWxlIGNvbnRleHQgYXJndW1lbnQgXGZJY2NvbnRleHRcZlAgaXMgTlVMTCwgbWVtb3J5IGZvciB0aGUgY29tcGlsZWQKK3BhdHRlcm4gaXMgb2J0YWluZWQgYnkgY2FsbGluZyBcZkJtYWxsb2MoKVxmUC4gT3RoZXJ3aXNlLCBpdCBpcyBvYnRhaW5lZCBmcm9tCit0aGUgc2FtZSBtZW1vcnkgZnVuY3Rpb24gdGhhdCB3YXMgdXNlZCBmb3IgdGhlIGNvbXBpbGUgY29udGV4dC4KKy5QCitUaGUgXGZJb3B0aW9uc1xmUCBhcmd1bWVudCBjb250YWlucyB2YXJpb3VzIGJpdCBzZXR0aW5ncyB0aGF0IGFmZmVjdCB0aGUKK2NvbXBpbGF0aW9uLiBJdCBzaG91bGQgYmUgemVybyBpZiBubyBvcHRpb25zIGFyZSByZXF1aXJlZC4gVGhlIGF2YWlsYWJsZQorb3B0aW9ucyBhcmUgZGVzY3JpYmVkIGJlbG93LiBTb21lIG9mIHRoZW0gKGluIHBhcnRpY3VsYXIsIHRob3NlIHRoYXQgYXJlCitjb21wYXRpYmxlIHdpdGggUGVybCwgYnV0IHNvbWUgb3RoZXJzIGFzIHdlbGwpIGNhbiBhbHNvIGJlIHNldCBhbmQgdW5zZXQgZnJvbQord2l0aGluIHRoZSBwYXR0ZXJuIChzZWUgdGhlIGRldGFpbGVkIGRlc2NyaXB0aW9uIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGF0dGVyblxmUAorLlwiCitkb2N1bWVudGF0aW9uKS4KKy5QCitGb3IgdGhvc2Ugb3B0aW9ucyB0aGF0IGNhbiBiZSBkaWZmZXJlbnQgaW4gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBwYXR0ZXJuLCB0aGUKK2NvbnRlbnRzIG9mIHRoZSBcZklvcHRpb25zXGZQIGFyZ3VtZW50IHNwZWNpZmllcyB0aGVpciBzZXR0aW5ncyBhdCB0aGUgc3RhcnQgb2YKK2NvbXBpbGF0aW9uLiBUaGUgUENSRTJfQU5DSE9SRUQgYW5kIFBDUkUyX05PX1VURl9DSEVDSyBvcHRpb25zIGNhbiBiZSBzZXQgYXQKK3RoZSB0aW1lIG9mIG1hdGNoaW5nIGFzIHdlbGwgYXMgYXQgY29tcGlsZSB0aW1lLgorLlAKK090aGVyLCBsZXNzIGZyZXF1ZW50bHkgcmVxdWlyZWQgY29tcGlsZS10aW1lIHBhcmFtZXRlcnMgKGZvciBleGFtcGxlLCB0aGUKK25ld2xpbmUgc2V0dGluZykgY2FuIGJlIHByb3ZpZGVkIGluIGEgY29tcGlsZSBjb250ZXh0IChhcyBkZXNjcmliZWQKKy5cIiBIVE1MIDxhIGhyZWY9IiNjb21waWxlY29udGV4dCI+CisuXCIgPC9hPgorYWJvdmUpLgorLlwiCisuUAorSWYgXGZJZXJyb3Jjb2RlXGZQIG9yIFxmSWVycm9yb2Zmc2V0XGZQIGlzIE5VTEwsIFxmQnBjcmUyX2NvbXBpbGUoKVxmUCByZXR1cm5zCitOVUxMIGltbWVkaWF0ZWx5LiBPdGhlcndpc2UsIGlmIGNvbXBpbGF0aW9uIG9mIGEgcGF0dGVybiBmYWlscywKK1xmQnBjcmUyX2NvbXBpbGUoKVxmUCByZXR1cm5zIE5VTEwsIGhhdmluZyBzZXQgdGhlc2UgdmFyaWFibGVzIHRvIGFuIGVycm9yIGNvZGUKK2FuZCBhbiBvZmZzZXQgKG51bWJlciBvZiBjb2RlIHVuaXRzKSB3aXRoaW4gdGhlIHBhdHRlcm4sIHJlc3BlY3RpdmVseS4gVGhlCitcZkJwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZSgpXGZQIGZ1bmN0aW9uIHByb3ZpZGVzIGEgdGV4dHVhbCBtZXNzYWdlIGZvciBlYWNoCitlcnJvciBjb2RlLiBDb21waWxhdGlvbiBlcnJvcnMgYXJlIHBvc2l0aXZlIG51bWJlcnMsIGJ1dCBVVEYgZm9ybWF0dGluZyBlcnJvcnMKK2FyZSBuZWdhdGl2ZSBudW1iZXJzLiBGb3IgYW4gaW52YWxpZCBVVEYtOCBvciBVVEYtMTYgc3RyaW5nLCB0aGUgb2Zmc2V0IGlzIHRoYXQKK29mIHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgdGhlIGZhaWxpbmcgY2hhcmFjdGVyLgorLlAKK1NvbWUgZXJyb3JzIGFyZSBub3QgZGV0ZWN0ZWQgdW50aWwgdGhlIHdob2xlIHBhdHRlcm4gaGFzIGJlZW4gc2Nhbm5lZDsgaW4gdGhlc2UKK2Nhc2VzLCB0aGUgb2Zmc2V0IHBhc3NlZCBiYWNrIGlzIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uIE5vdGUgdGhhdCB0aGUKK29mZnNldCBpcyBpbiBjb2RlIHVuaXRzLCBub3QgY2hhcmFjdGVycywgZXZlbiBpbiBhIFVURiBtb2RlLiBJdCBtYXkgc29tZXRpbWVzCitwb2ludCBpbnRvIHRoZSBtaWRkbGUgb2YgYSBVVEYtOCBvciBVVEYtMTYgY2hhcmFjdGVyLgorLlAKK1RoaXMgY29kZSBmcmFnbWVudCBzaG93cyBhIHR5cGljYWwgc3RyYWlnaHRmb3J3YXJkIGNhbGwgdG8KK1xmQnBjcmUyX2NvbXBpbGUoKVxmUDoKKy5zcAorICBwY3JlMl9jb2RlICpyZTsKKyAgUENSRTJfU0laRSBlcnJvZmZzZXQ7CisgIGludCBlcnJvcmNvZGU7CisgIHJlID0gcGNyZTJfY29tcGlsZSgKKyAgICAiXkEuKloiLCAgICAgICAgICAgICAgICAvKiB0aGUgcGF0dGVybiAqLworICAgIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCwgIC8qIHRoZSBwYXR0ZXJuIGlzIHplcm8tdGVybWluYXRlZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgb3B0aW9ucyAqLworICAgICZlcnJvcmNvZGUsICAgICAgICAgICAgIC8qIGZvciBlcnJvciBjb2RlICovCisgICAgJmVycm9mZnNldCwgICAgICAgICAgICAgLyogZm9yIGVycm9yIG9mZnNldCAqLworICAgIE5VTEwpOyAgICAgICAgICAgICAgICAgIC8qIG5vIGNvbXBpbGUgY29udGV4dCAqLworLnNwCitUaGUgZm9sbG93aW5nIG5hbWVzIGZvciBvcHRpb24gYml0cyBhcmUgZGVmaW5lZCBpbiB0aGUgXGZCcGNyZTIuaFxmUCBoZWFkZXIKK2ZpbGU6Cisuc3AKKyAgUENSRTJfQU5DSE9SRUQKKy5zcAorSWYgdGhpcyBiaXQgaXMgc2V0LCB0aGUgcGF0dGVybiBpcyBmb3JjZWQgdG8gYmUgImFuY2hvcmVkIiwgdGhhdCBpcywgaXQgaXMKK2NvbnN0cmFpbmVkIHRvIG1hdGNoIG9ubHkgYXQgdGhlIGZpcnN0IG1hdGNoaW5nIHBvaW50IGluIHRoZSBzdHJpbmcgdGhhdCBpcworYmVpbmcgc2VhcmNoZWQgKHRoZSAic3ViamVjdCBzdHJpbmciKS4gVGhpcyBlZmZlY3QgY2FuIGFsc28gYmUgYWNoaWV2ZWQgYnkKK2FwcHJvcHJpYXRlIGNvbnN0cnVjdHMgaW4gdGhlIHBhdHRlcm4gaXRzZWxmLCB3aGljaCBpcyB0aGUgb25seSB3YXkgdG8gZG8gaXQgaW4KK1BlcmwuCisuc3AKKyAgUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1MKKy5zcAorQnkgZGVmYXVsdCwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLCBhIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgdGhhdAoraW1tZWRpYXRlbHkgZm9sbG93cyBhbiBvcGVuaW5nIG9uZSBpcyB0cmVhdGVkIGFzIGEgZGF0YSBjaGFyYWN0ZXIgZm9yIHRoZQorY2xhc3MuIFdoZW4gUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1MgaXMgc2V0LCBpdCB0ZXJtaW5hdGVzIHRoZSBjbGFzcywgd2hpY2gKK3RoZXJlZm9yZSBjb250YWlucyBubyBjaGFyYWN0ZXJzIGFuZCBzbyBjYW4gbmV2ZXIgbWF0Y2guCisuc3AKKyAgUENSRTJfQUxUX0JTVVgKKy5zcAorVGhpcyBvcHRpb24gcmVxdWVzdCBhbHRlcm5hdGl2ZSBoYW5kbGluZyBvZiB0aHJlZSBlc2NhcGUgc2VxdWVuY2VzLCB3aGljaAorbWFrZXMgUENSRTIncyBiZWhhdmlvdXIgbW9yZSBsaWtlIEVDTUFzY3JpcHQgKGFrYSBKYXZhU2NyaXB0KS4gV2hlbiBpdCBpcyBzZXQ6CisuUAorKDEpIFxlVSBtYXRjaGVzIGFuIHVwcGVyIGNhc2UgIlUiIGNoYXJhY3RlcjsgYnkgZGVmYXVsdCBcZVUgY2F1c2VzIGEgY29tcGlsZQordGltZSBlcnJvciAoUGVybCB1c2VzIFxlVSB0byB1cHBlciBjYXNlIHN1YnNlcXVlbnQgY2hhcmFjdGVycykuCisuUAorKDIpIFxldSBtYXRjaGVzIGEgbG93ZXIgY2FzZSAidSIgY2hhcmFjdGVyIHVubGVzcyBpdCBpcyBmb2xsb3dlZCBieSBmb3VyCitoZXhhZGVjaW1hbCBkaWdpdHMsIGluIHdoaWNoIGNhc2UgdGhlIGhleGFkZWNpbWFsIG51bWJlciBkZWZpbmVzIHRoZSBjb2RlIHBvaW50Cit0byBtYXRjaC4gQnkgZGVmYXVsdCwgXGV1IGNhdXNlcyBhIGNvbXBpbGUgdGltZSBlcnJvciAoUGVybCB1c2VzIGl0IHRvIHVwcGVyCitjYXNlIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyKS4KKy5QCisoMykgXGV4IG1hdGNoZXMgYSBsb3dlciBjYXNlICJ4IiBjaGFyYWN0ZXIgdW5sZXNzIGl0IGlzIGZvbGxvd2VkIGJ5IHR3bworaGV4YWRlY2ltYWwgZGlnaXRzLCBpbiB3aGljaCBjYXNlIHRoZSBoZXhhZGVjaW1hbCBudW1iZXIgZGVmaW5lcyB0aGUgY29kZSBwb2ludAordG8gbWF0Y2guIEJ5IGRlZmF1bHQsIGFzIGluIFBlcmwsIGEgaGV4YWRlY2ltYWwgbnVtYmVyIGlzIGFsd2F5cyBleHBlY3RlZCBhZnRlcgorXGV4LCBidXQgaXQgbWF5IGhhdmUgemVybywgb25lLCBvciB0d28gZGlnaXRzIChzbywgZm9yIGV4YW1wbGUsIFxleHogbWF0Y2hlcyBhCitiaW5hcnkgemVybyBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgeikuCisuc3AKKyAgUENSRTJfQUxUX0NJUkNVTUZMRVgKKy5zcAorSW4gbXVsdGlsaW5lIG1vZGUgKHdoZW4gUENSRTJfTVVMVElMSU5FIGlzIHNldCksIHRoZSBjaXJjdW1mbGV4IG1ldGFjaGFyYWN0ZXIKK21hdGNoZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0ICh1bmxlc3MgUENSRTJfTk9UQk9MIGlzIHNldCksIGFuZCBhbHNvCithZnRlciBhbnkgaW50ZXJuYWwgbmV3bGluZS4gSG93ZXZlciwgaXQgZG9lcyBub3QgbWF0Y2ggYWZ0ZXIgYSBuZXdsaW5lIGF0IHRoZQorZW5kIG9mIHRoZSBzdWJqZWN0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwuIElmIHlvdSB3YW50IGEgbXVsdGlsaW5lCitjaXJjdW1mbGV4IGFsc28gdG8gbWF0Y2ggYWZ0ZXIgYSB0ZXJtaW5hdGluZyBuZXdsaW5lLCB5b3UgbXVzdCBzZXQKK1BDUkUyX0FMVF9DSVJDVU1GTEVYLgorLnNwCisgIFBDUkUyX0FMVF9WRVJCTkFNRVMKKy5zcAorQnkgZGVmYXVsdCwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLCB0aGUgbmFtZSBpbiBhbnkgdmVyYiBzZXF1ZW5jZSBzdWNoIGFzCisoKk1BUks6TkFNRSkgaXMgYW55IHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBkb2VzIG5vdCBpbmNsdWRlIGEgY2xvc2luZworcGFyZW50aGVzaXMuIFRoZSBuYW1lIGlzIG5vdCBwcm9jZXNzZWQgaW4gYW55IHdheSwgYW5kIGl0IGlzIG5vdCBwb3NzaWJsZSB0bworaW5jbHVkZSBhIGNsb3NpbmcgcGFyZW50aGVzaXMgaW4gdGhlIG5hbWUuIEhvd2V2ZXIsIGlmIHRoZSBQQ1JFMl9BTFRfVkVSQk5BTUVTCitvcHRpb24gaXMgc2V0LCBub3JtYWwgYmFja3NsYXNoIHByb2Nlc3NpbmcgaXMgYXBwbGllZCB0byB2ZXJiIG5hbWVzIGFuZCBvbmx5IGFuCit1bmVzY2FwZWQgY2xvc2luZyBwYXJlbnRoZXNpcyB0ZXJtaW5hdGVzIHRoZSBuYW1lLiBBIGNsb3NpbmcgcGFyZW50aGVzaXMgY2FuIGJlCitpbmNsdWRlZCBpbiBhIG5hbWUgZWl0aGVyIGFzIFxlKSBvciBiZXR3ZWVuIFxlUSBhbmQgXGVFLiBJZiB0aGUgUENSRTJfRVhURU5ERUQKK29wdGlvbiBpcyBzZXQsIHVuZXNjYXBlZCB3aGl0ZXNwYWNlIGluIHZlcmIgbmFtZXMgaXMgc2tpcHBlZCBhbmQgIy1jb21tZW50cyBhcmUKK3JlY29nbml6ZWQsIGV4YWN0bHkgYXMgaW4gdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4uCisuc3AKKyAgUENSRTJfQVVUT19DQUxMT1VUCisuc3AKK0lmIHRoaXMgYml0IGlzIHNldCwgXGZCcGNyZTJfY29tcGlsZSgpXGZQIGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBjYWxsb3V0IGl0ZW1zLAorYWxsIHdpdGggbnVtYmVyIDI1NSwgYmVmb3JlIGVhY2ggcGF0dGVybiBpdGVtLiBGb3IgZGlzY3Vzc2lvbiBvZiB0aGUgY2FsbG91dAorZmFjaWxpdHksIHNlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmNhbGxvdXRcZlAKKy5cIgorZG9jdW1lbnRhdGlvbi4KKy5zcAorICBQQ1JFMl9DQVNFTEVTUworLnNwCitJZiB0aGlzIGJpdCBpcyBzZXQsIGxldHRlcnMgaW4gdGhlIHBhdHRlcm4gbWF0Y2ggYm90aCB1cHBlciBhbmQgbG93ZXIgY2FzZQorbGV0dGVycyBpbiB0aGUgc3ViamVjdC4gSXQgaXMgZXF1aXZhbGVudCB0byBQZXJsJ3MgL2kgb3B0aW9uLCBhbmQgaXQgY2FuIGJlCitjaGFuZ2VkIHdpdGhpbiBhIHBhdHRlcm4gYnkgYSAoP2kpIG9wdGlvbiBzZXR0aW5nLgorLnNwCisgIFBDUkUyX0RPTExBUl9FTkRPTkxZCisuc3AKK0lmIHRoaXMgYml0IGlzIHNldCwgYSBkb2xsYXIgbWV0YWNoYXJhY3RlciBpbiB0aGUgcGF0dGVybiBtYXRjaGVzIG9ubHkgYXQgdGhlCitlbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLiBXaXRob3V0IHRoaXMgb3B0aW9uLCBhIGRvbGxhciBhbHNvIG1hdGNoZXMKK2ltbWVkaWF0ZWx5IGJlZm9yZSBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIChidXQgbm90IGJlZm9yZSBhbnkgb3RoZXIKK25ld2xpbmVzKS4gVGhlIFBDUkUyX0RPTExBUl9FTkRPTkxZIG9wdGlvbiBpcyBpZ25vcmVkIGlmIFBDUkUyX01VTFRJTElORSBpcworc2V0LiBUaGVyZSBpcyBubyBlcXVpdmFsZW50IHRvIHRoaXMgb3B0aW9uIGluIFBlcmwsIGFuZCBubyB3YXkgdG8gc2V0IGl0IHdpdGhpbgorYSBwYXR0ZXJuLgorLnNwCisgIFBDUkUyX0RPVEFMTAorLnNwCitJZiB0aGlzIGJpdCBpcyBzZXQsIGEgZG90IG1ldGFjaGFyYWN0ZXIgaW4gdGhlIHBhdHRlcm4gbWF0Y2hlcyBhbnkgY2hhcmFjdGVyLAoraW5jbHVkaW5nIG9uZSB0aGF0IGluZGljYXRlcyBhIG5ld2xpbmUuIEhvd2V2ZXIsIGl0IG9ubHkgZXZlciBtYXRjaGVzIG9uZQorY2hhcmFjdGVyLCBldmVuIGlmIG5ld2xpbmVzIGFyZSBjb2RlZCBhcyBDUkxGLiBXaXRob3V0IHRoaXMgb3B0aW9uLCBhIGRvdCBkb2VzCitub3QgbWF0Y2ggd2hlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3ViamVjdCBpcyBhdCBhIG5ld2xpbmUuIFRoaXMgb3B0aW9uCitpcyBlcXVpdmFsZW50IHRvIFBlcmwncyAvcyBvcHRpb24sIGFuZCBpdCBjYW4gYmUgY2hhbmdlZCB3aXRoaW4gYSBwYXR0ZXJuIGJ5IGEKKyg/cykgb3B0aW9uIHNldHRpbmcuIEEgbmVnYXRpdmUgY2xhc3Mgc3VjaCBhcyBbXmFdIGFsd2F5cyBtYXRjaGVzIG5ld2xpbmUKK2NoYXJhY3RlcnMsIGluZGVwZW5kZW50IG9mIHRoZSBzZXR0aW5nIG9mIHRoaXMgb3B0aW9uLgorLnNwCisgIFBDUkUyX0RVUE5BTUVTCisuc3AKK0lmIHRoaXMgYml0IGlzIHNldCwgbmFtZXMgdXNlZCB0byBpZGVudGlmeSBjYXB0dXJpbmcgc3VicGF0dGVybnMgbmVlZCBub3QgYmUKK3VuaXF1ZS4gVGhpcyBjYW4gYmUgaGVscGZ1bCBmb3IgY2VydGFpbiB0eXBlcyBvZiBwYXR0ZXJuIHdoZW4gaXQgaXMga25vd24gdGhhdAorb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIG5hbWVkIHN1YnBhdHRlcm4gY2FuIGV2ZXIgYmUgbWF0Y2hlZC4gVGhlcmUgYXJlIG1vcmUKK2RldGFpbHMgb2YgbmFtZWQgc3VicGF0dGVybnMgYmVsb3c7IHNlZSBhbHNvIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGF0dGVyblxmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLnNwCisgIFBDUkUyX0VYVEVOREVECisuc3AKK0lmIHRoaXMgYml0IGlzIHNldCwgbW9zdCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBwYXR0ZXJuIGFyZSB0b3RhbGx5CitpZ25vcmVkIGV4Y2VwdCB3aGVuIGVzY2FwZWQgb3IgaW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLiBIb3dldmVyLCB3aGl0ZSBzcGFjZQoraXMgbm90IGFsbG93ZWQgd2l0aGluIHNlcXVlbmNlcyBzdWNoIGFzICg/PiB0aGF0IGludHJvZHVjZSB2YXJpb3VzCitwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm5zLCBub3Igd2l0aGluIG51bWVyaWNhbCBxdWFudGlmaWVycyBzdWNoIGFzIHsxLDN9LgorSWdub3JhYmxlIHdoaXRlIHNwYWNlIGlzIHBlcm1pdHRlZCBiZXR3ZWVuIGFuIGl0ZW0gYW5kIGEgZm9sbG93aW5nIHF1YW50aWZpZXIKK2FuZCBiZXR3ZWVuIGEgcXVhbnRpZmllciBhbmQgYSBmb2xsb3dpbmcgKyB0aGF0IGluZGljYXRlcyBwb3NzZXNzaXZlbmVzcy4KKy5QCitQQ1JFMl9FWFRFTkRFRCBhbHNvIGNhdXNlcyBjaGFyYWN0ZXJzIGJldHdlZW4gYW4gdW5lc2NhcGVkICMgb3V0c2lkZSBhCitjaGFyYWN0ZXIgY2xhc3MgYW5kIHRoZSBuZXh0IG5ld2xpbmUsIGluY2x1c2l2ZSwgdG8gYmUgaWdub3JlZCwgd2hpY2ggbWFrZXMgaXQKK3Bvc3NpYmxlIHRvIGluY2x1ZGUgY29tbWVudHMgaW5zaWRlIGNvbXBsaWNhdGVkIHBhdHRlcm5zLiBOb3RlIHRoYXQgdGhlIGVuZCBvZgordGhpcyB0eXBlIG9mIGNvbW1lbnQgaXMgYSBsaXRlcmFsIG5ld2xpbmUgc2VxdWVuY2UgaW4gdGhlIHBhdHRlcm47IGVzY2FwZQorc2VxdWVuY2VzIHRoYXQgaGFwcGVuIHRvIHJlcHJlc2VudCBhIG5ld2xpbmUgZG8gbm90IGNvdW50LiBQQ1JFMl9FWFRFTkRFRCBpcworZXF1aXZhbGVudCB0byBQZXJsJ3MgL3ggb3B0aW9uLCBhbmQgaXQgY2FuIGJlIGNoYW5nZWQgd2l0aGluIGEgcGF0dGVybiBieSBhCisoP3gpIG9wdGlvbiBzZXR0aW5nLgorLlAKK1doaWNoIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIG5ld2xpbmVzIGNhbiBiZSBzcGVjaWZpZWQgYnkgYSBzZXR0aW5nIGluCit0aGUgY29tcGlsZSBjb250ZXh0IHRoYXQgaXMgcGFzc2VkIHRvIFxmQnBjcmUyX2NvbXBpbGUoKVxmUCBvciBieSBhIHNwZWNpYWwKK3NlcXVlbmNlIGF0IHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiwgYXMgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCisuXCIgSFRNTCA8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCNuZXdsaW5lcyI+CisuXCIgPC9hPgorIk5ld2xpbmUgY29udmVudGlvbnMiCisuXCIKK2luIHRoZSBcZkJwY3JlMnBhdHRlcm5cZlAgZG9jdW1lbnRhdGlvbi4gQSBkZWZhdWx0IGlzIGRlZmluZWQgd2hlbiBQQ1JFMiBpcworYnVpbHQuCisuc3AKKyAgUENSRTJfRklSU1RMSU5FCisuc3AKK0lmIHRoaXMgb3B0aW9uIGlzIHNldCwgYW4gdW5hbmNob3JlZCBwYXR0ZXJuIGlzIHJlcXVpcmVkIHRvIG1hdGNoIGJlZm9yZSBvciBhdAordGhlIGZpcnN0IG5ld2xpbmUgaW4gdGhlIHN1YmplY3Qgc3RyaW5nLCB0aG91Z2ggdGhlIG1hdGNoZWQgdGV4dCBtYXkgY29udGludWUKK292ZXIgdGhlIG5ld2xpbmUuIFNlZSBhbHNvIFBDUkUyX1VTRV9PRkZTRVRfTElNSVQsIHdoaWNoIHByb3ZpZGVzIGEgbW9yZQorZ2VuZXJhbCBsaW1pdGluZyBmYWNpbGl0eS4gSWYgUENSRTJfRklSU1RMSU5FIGlzIHNldCB3aXRoIGFuIG9mZnNldCBsaW1pdCwgYQorbWF0Y2ggbXVzdCBvY2N1ciBpbiB0aGUgZmlyc3QgbGluZSBhbmQgYWxzbyB3aXRoaW4gdGhlIG9mZnNldCBsaW1pdC4gSW4gb3RoZXIKK3dvcmRzLCB3aGljaGV2ZXIgbGltaXQgY29tZXMgZmlyc3QgaXMgdXNlZC4KKy5zcAorICBQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGCisuc3AKK0lmIHRoaXMgb3B0aW9uIGlzIHNldCwgYSBiYWNrIHJlZmVyZW5jZSB0byBhbiB1bnNldCBzdWJwYXR0ZXJuIGdyb3VwIG1hdGNoZXMgYW4KK2VtcHR5IHN0cmluZyAoYnkgZGVmYXVsdCB0aGlzIGNhdXNlcyB0aGUgY3VycmVudCBtYXRjaGluZyBhbHRlcm5hdGl2ZSB0byBmYWlsKS4KK0EgcGF0dGVybiBzdWNoIGFzIChcZTEpKGEpIHN1Y2NlZWRzIHdoZW4gdGhpcyBvcHRpb24gaXMgc2V0IChhc3N1bWluZyBpdCBjYW4KK2ZpbmQgYW4gImEiIGluIHRoZSBzdWJqZWN0KSwgd2hlcmVhcyBpdCBmYWlscyBieSBkZWZhdWx0LCBmb3IgUGVybAorY29tcGF0aWJpbGl0eS4gU2V0dGluZyB0aGlzIG9wdGlvbiBtYWtlcyBQQ1JFMiBiZWhhdmUgbW9yZSBsaWtlIEVDTUFzY3JpcHQgKGFrYQorSmF2YVNjcmlwdCkuCisuc3AKKyAgUENSRTJfTVVMVElMSU5FCisuc3AKK0J5IGRlZmF1bHQsIGZvciB0aGUgcHVycG9zZXMgb2YgbWF0Y2hpbmcgInN0YXJ0IG9mIGxpbmUiIGFuZCAiZW5kIG9mIGxpbmUiLAorUENSRTIgdHJlYXRzIHRoZSBzdWJqZWN0IHN0cmluZyBhcyBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGxpbmUgb2YgY2hhcmFjdGVycywKK2V2ZW4gaWYgaXQgYWN0dWFsbHkgY29udGFpbnMgbmV3bGluZXMuIFRoZSAic3RhcnQgb2YgbGluZSIgbWV0YWNoYXJhY3RlciAoXikKK21hdGNoZXMgb25seSBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZywgYW5kIHRoZSAiZW5kIG9mIGxpbmUiIG1ldGFjaGFyYWN0ZXIKKygkKSBtYXRjaGVzIG9ubHkgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBvciBiZWZvcmUgYSB0ZXJtaW5hdGluZyBuZXdsaW5lCisoZXhjZXB0IHdoZW4gUENSRTJfRE9MTEFSX0VORE9OTFkgaXMgc2V0KS4gTm90ZSwgaG93ZXZlciwgdGhhdCB1bmxlc3MKK1BDUkUyX0RPVEFMTCBpcyBzZXQsIHRoZSAiYW55IGNoYXJhY3RlciIgbWV0YWNoYXJhY3RlciAoLikgZG9lcyBub3QgbWF0Y2ggYXQgYQorbmV3bGluZS4gVGhpcyBiZWhhdmlvdXIgKGZvciBeLCAkLCBhbmQgZG90KSBpcyB0aGUgc2FtZSBhcyBQZXJsLgorLlAKK1doZW4gUENSRTJfTVVMVElMSU5FIGl0IGlzIHNldCwgdGhlICJzdGFydCBvZiBsaW5lIiBhbmQgImVuZCBvZiBsaW5lIgorY29uc3RydWN0cyBtYXRjaCBpbW1lZGlhdGVseSBmb2xsb3dpbmcgb3IgaW1tZWRpYXRlbHkgYmVmb3JlIGludGVybmFsIG5ld2xpbmVzCitpbiB0aGUgc3ViamVjdCBzdHJpbmcsIHJlc3BlY3RpdmVseSwgYXMgd2VsbCBhcyBhdCB0aGUgdmVyeSBzdGFydCBhbmQgZW5kLiBUaGlzCitpcyBlcXVpdmFsZW50IHRvIFBlcmwncyAvbSBvcHRpb24sIGFuZCBpdCBjYW4gYmUgY2hhbmdlZCB3aXRoaW4gYSBwYXR0ZXJuIGJ5IGEKKyg/bSkgb3B0aW9uIHNldHRpbmcuIE5vdGUgdGhhdCB0aGUgInN0YXJ0IG9mIGxpbmUiIG1ldGFjaGFyYWN0ZXIgZG9lcyBub3QgbWF0Y2gKK2FmdGVyIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0LCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwuCitIb3dldmVyLCB5b3UgY2FuIGNoYW5nZSB0aGlzIGJ5IHNldHRpbmcgdGhlIFBDUkUyX0FMVF9DSVJDVU1GTEVYIG9wdGlvbi4gSWYKK3RoZXJlIGFyZSBubyBuZXdsaW5lcyBpbiBhIHN1YmplY3Qgc3RyaW5nLCBvciBubyBvY2N1cnJlbmNlcyBvZiBeIG9yICQgaW4gYQorcGF0dGVybiwgc2V0dGluZyBQQ1JFMl9NVUxUSUxJTkUgaGFzIG5vIGVmZmVjdC4KKy5zcAorICBQQ1JFMl9ORVZFUl9CQUNLU0xBU0hfQworLnNwCitUaGlzIG9wdGlvbiBsb2NrcyBvdXQgdGhlIHVzZSBvZiBcZUMgaW4gdGhlIHBhdHRlcm4gdGhhdCBpcyBiZWluZyBjb21waWxlZC4KK1RoaXMgZXNjYXBlIGNhbiBjYXVzZSB1bnByZWRpY3RhYmxlIGJlaGF2aW91ciBpbiBVVEYtOCBvciBVVEYtMTYgbW9kZXMsIGJlY2F1c2UKK2l0IG1heSBsZWF2ZSB0aGUgY3VycmVudCBtYXRjaGluZyBwb2ludCBpbiB0aGUgbWlkZGxlIG9mIGEgbXVsdGktY29kZS11bml0CitjaGFyYWN0ZXIuIFRoaXMgb3B0aW9uIG1heSBiZSB1c2VmdWwgaW4gYXBwbGljYXRpb25zIHRoYXQgcHJvY2VzcyBwYXR0ZXJucyBmcm9tCitleHRlcm5hbCBzb3VyY2VzLiBOb3RlIHRoYXQgdGhlcmUgaXMgYWxzbyBhIGJ1aWxkLXRpbWUgb3B0aW9uIHRoYXQgcGVybWFuZW50bHkKK2xvY2tzIG91dCB0aGUgdXNlIG9mIFxlQy4KKy5zcAorICBQQ1JFMl9ORVZFUl9VQ1AKKy5zcAorVGhpcyBvcHRpb24gbG9ja3Mgb3V0IHRoZSB1c2Ugb2YgVW5pY29kZSBwcm9wZXJ0aWVzIGZvciBoYW5kbGluZyBcZUIsIFxlYiwgXGVELAorXGVkLCBcZVMsIFxlcywgXGVXLCBcZXcsIGFuZCBzb21lIG9mIHRoZSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3NlcywgYXMgZGVzY3JpYmVkCitmb3IgdGhlIFBDUkUyX1VDUCBvcHRpb24gYmVsb3cuIEluIHBhcnRpY3VsYXIsIGl0IHByZXZlbnRzIHRoZSBjcmVhdG9yIG9mIHRoZQorcGF0dGVybiBmcm9tIGVuYWJsaW5nIHRoaXMgZmFjaWxpdHkgYnkgc3RhcnRpbmcgdGhlIHBhdHRlcm4gd2l0aCAoKlVDUCkuIFRoaXMKK29wdGlvbiBtYXkgYmUgdXNlZnVsIGluIGFwcGxpY2F0aW9ucyB0aGF0IHByb2Nlc3MgcGF0dGVybnMgZnJvbSBleHRlcm5hbAorc291cmNlcy4gVGhlIG9wdGlvbiBjb21iaW5hdGlvbiBQQ1JFX1VDUCBhbmQgUENSRV9ORVZFUl9VQ1AgY2F1c2VzIGFuIGVycm9yLgorLnNwCisgIFBDUkUyX05FVkVSX1VURgorLnNwCitUaGlzIG9wdGlvbiBsb2NrcyBvdXQgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHBhdHRlcm4gYXMgVVRGLTgsIFVURi0xNiwgb3IKK1VURi0zMiwgZGVwZW5kaW5nIG9uIHdoaWNoIGxpYnJhcnkgaXMgaW4gdXNlLiBJbiBwYXJ0aWN1bGFyLCBpdCBwcmV2ZW50cyB0aGUKK2NyZWF0b3Igb2YgdGhlIHBhdHRlcm4gZnJvbSBzd2l0Y2hpbmcgdG8gVVRGIGludGVycHJldGF0aW9uIGJ5IHN0YXJ0aW5nIHRoZQorcGF0dGVybiB3aXRoICgqVVRGKS4gVGhpcyBvcHRpb24gbWF5IGJlIHVzZWZ1bCBpbiBhcHBsaWNhdGlvbnMgdGhhdCBwcm9jZXNzCitwYXR0ZXJucyBmcm9tIGV4dGVybmFsIHNvdXJjZXMuIFRoZSBjb21iaW5hdGlvbiBvZiBQQ1JFMl9VVEYgYW5kCitQQ1JFMl9ORVZFUl9VVEYgY2F1c2VzIGFuIGVycm9yLgorLnNwCisgIFBDUkUyX05PX0FVVE9fQ0FQVFVSRQorLnNwCitJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGl0IGRpc2FibGVzIHRoZSB1c2Ugb2YgbnVtYmVyZWQgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGluCit0aGUgcGF0dGVybi4gQW55IG9wZW5pbmcgcGFyZW50aGVzaXMgdGhhdCBpcyBub3QgZm9sbG93ZWQgYnkgPyBiZWhhdmVzIGFzIGlmIGl0Cit3ZXJlIGZvbGxvd2VkIGJ5ID86IGJ1dCBuYW1lZCBwYXJlbnRoZXNlcyBjYW4gc3RpbGwgYmUgdXNlZCBmb3IgY2FwdHVyaW5nIChhbmQKK3RoZXkgYWNxdWlyZSBudW1iZXJzIGluIHRoZSB1c3VhbCB3YXkpLiBUaGVyZSBpcyBubyBlcXVpdmFsZW50IG9mIHRoaXMgb3B0aW9uCitpbiBQZXJsLgorLnNwCisgIFBDUkUyX05PX0FVVE9fUE9TU0VTUworLnNwCitJZiB0aGlzIG9wdGlvbiBpcyBzZXQsIGl0IGRpc2FibGVzICJhdXRvLXBvc3Nlc3NpZmljYXRpb24iLCB3aGljaCBpcyBhbgorb3B0aW1pemF0aW9uIHRoYXQsIGZvciBleGFtcGxlLCB0dXJucyBhK2IgaW50byBhKytiIGluIG9yZGVyIHRvIGF2b2lkCitiYWNrdHJhY2tzIGludG8gYSsgdGhhdCBjYW4gbmV2ZXIgYmUgc3VjY2Vzc2Z1bC4gSG93ZXZlciwgaWYgY2FsbG91dHMgYXJlIGluCit1c2UsIGF1dG8tcG9zc2Vzc2lmaWNhdGlvbiBtZWFucyB0aGF0IHNvbWUgY2FsbG91dHMgYXJlIG5ldmVyIHRha2VuLiBZb3UgY2FuCitzZXQgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyB0byBkbyBhIGZ1bGwgdW5vcHRpbWl6ZWQKK3NlYXJjaCBhbmQgcnVuIGFsbCB0aGUgY2FsbG91dHMsIGJ1dCBpdCBpcyBtYWlubHkgcHJvdmlkZWQgZm9yIHRlc3RpbmcKK3B1cnBvc2VzLgorLnNwCisgIFBDUkUyX05PX0RPVFNUQVJfQU5DSE9SCisuc3AKK0lmIHRoaXMgb3B0aW9uIGlzIHNldCwgaXQgZGlzYWJsZXMgYW4gb3B0aW1pemF0aW9uIHRoYXQgaXMgYXBwbGllZCB3aGVuIC4qIGlzCit0aGUgZmlyc3Qgc2lnbmlmaWNhbnQgaXRlbSBpbiBhIHRvcC1sZXZlbCBicmFuY2ggb2YgYSBwYXR0ZXJuLCBhbmQgYWxsIHRoZQorb3RoZXIgYnJhbmNoZXMgYWxzbyBzdGFydCB3aXRoIC4qIG9yIHdpdGggXGVBIG9yIFxlRyBvciBeLiBUaGUgb3B0aW1pemF0aW9uIGlzCithdXRvbWF0aWNhbGx5IGRpc2FibGVkIGZvciAuKiBpZiBpdCBpcyBpbnNpZGUgYW4gYXRvbWljIGdyb3VwIG9yIGEgY2FwdHVyaW5nCitncm91cCB0aGF0IGlzIHRoZSBzdWJqZWN0IG9mIGEgYmFjayByZWZlcmVuY2UsIG9yIGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zCisoKlBSVU5FKSBvciAoKlNLSVApLiBXaGVuIHRoZSBvcHRpbWl6YXRpb24gaXMgbm90IGRpc2FibGVkLCBzdWNoIGEgcGF0dGVybiBpcworYXV0b21hdGljYWxseSBhbmNob3JlZCBpZiBQQ1JFMl9ET1RBTEwgaXMgc2V0IGZvciBhbGwgdGhlIC4qIGl0ZW1zIGFuZAorUENSRTJfTVVMVElMSU5FIGlzIG5vdCBzZXQgZm9yIGFueSBeIGl0ZW1zLiBPdGhlcndpc2UsIHRoZSBmYWN0IHRoYXQgYW55IG1hdGNoCittdXN0IHN0YXJ0IGVpdGhlciBhdCB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3Qgb3IgZm9sbG93aW5nIGEgbmV3bGluZSBpcworcmVtZW1iZXJlZC4gTGlrZSBvdGhlciBvcHRpbWl6YXRpb25zLCB0aGlzIGNhbiBjYXVzZSBjYWxsb3V0cyB0byBiZSBza2lwcGVkLgorLnNwCisgIFBDUkUyX05PX1NUQVJUX09QVElNSVpFCisuc3AKK1RoaXMgaXMgYW4gb3B0aW9uIHdob3NlIG1haW4gZWZmZWN0IGlzIGF0IG1hdGNoaW5nIHRpbWUuIEl0IGRvZXMgbm90IGNoYW5nZQord2hhdCBcZkJwY3JlMl9jb21waWxlKClcZlAgZ2VuZXJhdGVzLCBidXQgaXQgZG9lcyBhZmZlY3QgdGhlIG91dHB1dCBvZiB0aGUgSklUCitjb21waWxlci4KKy5QCitUaGVyZSBhcmUgYSBudW1iZXIgb2Ygb3B0aW1pemF0aW9ucyB0aGF0IG1heSBvY2N1ciBhdCB0aGUgc3RhcnQgb2YgYSBtYXRjaCwgaW4KK29yZGVyIHRvIHNwZWVkIHVwIHRoZSBwcm9jZXNzLiBGb3IgZXhhbXBsZSwgaWYgaXQgaXMga25vd24gdGhhdCBhbiB1bmFuY2hvcmVkCittYXRjaCBtdXN0IHN0YXJ0IHdpdGggYSBzcGVjaWZpYyBjaGFyYWN0ZXIsIHRoZSBtYXRjaGluZyBjb2RlIHNlYXJjaGVzIHRoZQorc3ViamVjdCBmb3IgdGhhdCBjaGFyYWN0ZXIsIGFuZCBmYWlscyBpbW1lZGlhdGVseSBpZiBpdCBjYW5ub3QgZmluZCBpdCwgd2l0aG91dAorYWN0dWFsbHkgcnVubmluZyB0aGUgbWFpbiBtYXRjaGluZyBmdW5jdGlvbi4gVGhpcyBtZWFucyB0aGF0IGEgc3BlY2lhbCBpdGVtCitzdWNoIGFzICgqQ09NTUlUKSBhdCB0aGUgc3RhcnQgb2YgYSBwYXR0ZXJuIGlzIG5vdCBjb25zaWRlcmVkIHVudGlsIGFmdGVyIGEKK3N1aXRhYmxlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgbWF0Y2ggaGFzIGJlZW4gZm91bmQuIEFsc28sIHdoZW4gY2FsbG91dHMgb3IKKygqTUFSSykgaXRlbXMgYXJlIGluIHVzZSwgdGhlc2UgInN0YXJ0LXVwIiBvcHRpbWl6YXRpb25zIGNhbiBjYXVzZSB0aGVtIHRvIGJlCitza2lwcGVkIGlmIHRoZSBwYXR0ZXJuIGlzIG5ldmVyIGFjdHVhbGx5IHVzZWQuIFRoZSBzdGFydC11cCBvcHRpbWl6YXRpb25zIGFyZQoraW4gZWZmZWN0IGEgcHJlLXNjYW4gb2YgdGhlIHN1YmplY3QgdGhhdCB0YWtlcyBwbGFjZSBiZWZvcmUgdGhlIHBhdHRlcm4gaXMgcnVuLgorLlAKK1RoZSBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSBvcHRpb24gZGlzYWJsZXMgdGhlIHN0YXJ0LXVwIG9wdGltaXphdGlvbnMsCitwb3NzaWJseSBjYXVzaW5nIHBlcmZvcm1hbmNlIHRvIHN1ZmZlciwgYnV0IGVuc3VyaW5nIHRoYXQgaW4gY2FzZXMgd2hlcmUgdGhlCityZXN1bHQgaXMgIm5vIG1hdGNoIiwgdGhlIGNhbGxvdXRzIGRvIG9jY3VyLCBhbmQgdGhhdCBpdGVtcyBzdWNoIGFzICgqQ09NTUlUKQorYW5kICgqTUFSSykgYXJlIGNvbnNpZGVyZWQgYXQgZXZlcnkgcG9zc2libGUgc3RhcnRpbmcgcG9zaXRpb24gaW4gdGhlIHN1YmplY3QKK3N0cmluZy4KKy5QCitTZXR0aW5nIFBDUkUyX05PX1NUQVJUX09QVElNSVpFIG1heSBjaGFuZ2UgdGhlIG91dGNvbWUgb2YgYSBtYXRjaGluZyBvcGVyYXRpb24uCitDb25zaWRlciB0aGUgcGF0dGVybgorLnNwCisgICgqQ09NTUlUKUFCQworLnNwCitXaGVuIHRoaXMgaXMgY29tcGlsZWQsIFBDUkUyIHJlY29yZHMgdGhlIGZhY3QgdGhhdCBhIG1hdGNoIG11c3Qgc3RhcnQgd2l0aCB0aGUKK2NoYXJhY3RlciAiQSIuIFN1cHBvc2UgdGhlIHN1YmplY3Qgc3RyaW5nIGlzICJERUZBQkMiLiBUaGUgc3RhcnQtdXAKK29wdGltaXphdGlvbiBzY2FucyBhbG9uZyB0aGUgc3ViamVjdCwgZmluZHMgIkEiIGFuZCBydW5zIHRoZSBmaXJzdCBtYXRjaAorYXR0ZW1wdCBmcm9tIHRoZXJlLiBUaGUgKCpDT01NSVQpIGl0ZW0gbWVhbnMgdGhhdCB0aGUgcGF0dGVybiBtdXN0IG1hdGNoIHRoZQorY3VycmVudCBzdGFydGluZyBwb3NpdGlvbiwgd2hpY2ggaW4gdGhpcyBjYXNlLCBpdCBkb2VzLiBIb3dldmVyLCBpZiB0aGUgc2FtZQorbWF0Y2ggaXMgcnVuIHdpdGggUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUgc2V0LCB0aGUgaW5pdGlhbCBzY2FuIGFsb25nIHRoZQorc3ViamVjdCBzdHJpbmcgZG9lcyBub3QgaGFwcGVuLiBUaGUgZmlyc3QgbWF0Y2ggYXR0ZW1wdCBpcyBydW4gc3RhcnRpbmcgZnJvbQorIkQiIGFuZCB3aGVuIHRoaXMgZmFpbHMsICgqQ09NTUlUKSBwcmV2ZW50cyBhbnkgZnVydGhlciBtYXRjaGVzIGJlaW5nIHRyaWVkLCBzbwordGhlIG92ZXJhbGwgcmVzdWx0IGlzICJubyBtYXRjaCIuIFRoZXJlIGFyZSBhbHNvIG90aGVyIHN0YXJ0LXVwIG9wdGltaXphdGlvbnMuCitGb3IgZXhhbXBsZSwgYSBtaW5pbXVtIGxlbmd0aCBmb3IgdGhlIHN1YmplY3QgbWF5IGJlIHJlY29yZGVkLiBDb25zaWRlciB0aGUKK3BhdHRlcm4KKy5zcAorICAoKk1BUks6QSkoWHxZKQorLnNwCitUaGUgbWluaW11bSBsZW5ndGggZm9yIGEgbWF0Y2ggaXMgb25lIGNoYXJhY3Rlci4gSWYgdGhlIHN1YmplY3QgaXMgIkFCQyIsIHRoZXJlCit3aWxsIGJlIGF0dGVtcHRzIHRvIG1hdGNoICJBQkMiLCAiQkMiLCBhbmQgIkMiLiBBbiBhdHRlbXB0IHRvIG1hdGNoIGFuIGVtcHR5CitzdHJpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCBkb2VzIG5vdCB0YWtlIHBsYWNlLCBiZWNhdXNlIFBDUkUyIGtub3dzIHRoYXQKK3RoZSBzdWJqZWN0IGlzIG5vdyB0b28gc2hvcnQsIGFuZCBzbyB0aGUgKCpNQVJLKSBpcyBuZXZlciBlbmNvdW50ZXJlZC4gSW4gdGhpcworY2FzZSwgdGhlIG9wdGltaXphdGlvbiBkb2VzIG5vdCBhZmZlY3QgdGhlIG92ZXJhbGwgbWF0Y2ggcmVzdWx0LCB3aGljaCBpcyBzdGlsbAorIm5vIG1hdGNoIiwgYnV0IGl0IGRvZXMgYWZmZWN0IHRoZSBhdXhpbGlhcnkgaW5mb3JtYXRpb24gdGhhdCBpcyByZXR1cm5lZC4KKy5zcAorICBQQ1JFMl9OT19VVEZfQ0hFQ0sKKy5zcAorV2hlbiBQQ1JFMl9VVEYgaXMgc2V0LCB0aGUgdmFsaWRpdHkgb2YgdGhlIHBhdHRlcm4gYXMgYSBVVEYgc3RyaW5nIGlzCithdXRvbWF0aWNhbGx5IGNoZWNrZWQuIFRoZXJlIGFyZSBkaXNjdXNzaW9ucyBhYm91dCB0aGUgdmFsaWRpdHkgb2YKKy5cIiBIVE1MIDxhIGhyZWY9InBjcmUydW5pY29kZS5odG1sI3V0ZjhzdHJpbmdzIj4KKy5cIiA8L2E+CitVVEYtOCBzdHJpbmdzLAorLlwiCisuXCIgSFRNTCA8YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCN1dGYxNnN0cmluZ3MiPgorLlwiIDwvYT4KK1VURi0xNiBzdHJpbmdzLAorLlwiCithbmQKKy5cIiBIVE1MIDxhIGhyZWY9InBjcmUydW5pY29kZS5odG1sI3V0ZjMyc3RyaW5ncyI+CisuXCIgPC9hPgorVVRGLTMyIHN0cmluZ3MKKy5cIgoraW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJ1bmljb2RlXGZQCisuXCIKK2RvY3VtZW50LgorSWYgYW4gaW52YWxpZCBVVEYgc2VxdWVuY2UgaXMgZm91bmQsIFxmQnBjcmUyX2NvbXBpbGUoKVxmUCByZXR1cm5zIGEgbmVnYXRpdmUKK2Vycm9yIGNvZGUuCisuUAorSWYgeW91IGtub3cgdGhhdCB5b3VyIHBhdHRlcm4gaXMgdmFsaWQsIGFuZCB5b3Ugd2FudCB0byBza2lwIHRoaXMgY2hlY2sgZm9yCitwZXJmb3JtYW5jZSByZWFzb25zLCB5b3UgY2FuIHNldCB0aGUgUENSRTJfTk9fVVRGX0NIRUNLIG9wdGlvbi4gV2hlbiBpdCBpcyBzZXQsCit0aGUgZWZmZWN0IG9mIHBhc3NpbmcgYW4gaW52YWxpZCBVVEYgc3RyaW5nIGFzIGEgcGF0dGVybiBpcyB1bmRlZmluZWQuIEl0IG1heQorY2F1c2UgeW91ciBwcm9ncmFtIHRvIGNyYXNoIG9yIGxvb3AuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBjYW4gYWxzbyBiZSBwYXNzZWQKK3RvIFxmQnBjcmUyX21hdGNoKClcZlAgYW5kIFxmQnBjcmVfZGZhX21hdGNoKClcZlAsIHRvIHN1cHByZXNzIHZhbGlkaXR5CitjaGVja2luZyBvZiB0aGUgc3ViamVjdCBzdHJpbmcuCisuc3AKKyAgUENSRTJfVUNQCisuc3AKK1RoaXMgb3B0aW9uIGNoYW5nZXMgdGhlIHdheSBQQ1JFMiBwcm9jZXNzZXMgXGVCLCBcZWIsIFxlRCwgXGVkLCBcZVMsIFxlcywgXGVXLAorXGV3LCBhbmQgc29tZSBvZiB0aGUgUE9TSVggY2hhcmFjdGVyIGNsYXNzZXMuIEJ5IGRlZmF1bHQsIG9ubHkgQVNDSUkgY2hhcmFjdGVycworYXJlIHJlY29nbml6ZWQsIGJ1dCBpZiBQQ1JFMl9VQ1AgaXMgc2V0LCBVbmljb2RlIHByb3BlcnRpZXMgYXJlIHVzZWQgaW5zdGVhZCB0bworY2xhc3NpZnkgY2hhcmFjdGVycy4gTW9yZSBkZXRhaWxzIGFyZSBnaXZlbiBpbiB0aGUgc2VjdGlvbiBvbgorLlwiIEhUTUwgPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwjZ2VuZXJpY2NoYXJ0eXBlcyI+CisuXCIgPC9hPgorZ2VuZXJpYyBjaGFyYWN0ZXIgdHlwZXMKKy5cIgoraW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwYXR0ZXJuXGZQCisuXCIKK3BhZ2UuIElmIHlvdSBzZXQgUENSRTJfVUNQLCBtYXRjaGluZyBvbmUgb2YgdGhlIGl0ZW1zIGl0IGFmZmVjdHMgdGFrZXMgbXVjaAorbG9uZ2VyLiBUaGUgb3B0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIFBDUkUyIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggVW5pY29kZQorc3VwcG9ydC4KKy5zcAorICBQQ1JFMl9VTkdSRUVEWQorLnNwCitUaGlzIG9wdGlvbiBpbnZlcnRzIHRoZSAiZ3JlZWRpbmVzcyIgb2YgdGhlIHF1YW50aWZpZXJzIHNvIHRoYXQgdGhleSBhcmUgbm90CitncmVlZHkgYnkgZGVmYXVsdCwgYnV0IGJlY29tZSBncmVlZHkgaWYgZm9sbG93ZWQgYnkgIj8iLiBJdCBpcyBub3QgY29tcGF0aWJsZQord2l0aCBQZXJsLiBJdCBjYW4gYWxzbyBiZSBzZXQgYnkgYSAoP1UpIG9wdGlvbiBzZXR0aW5nIHdpdGhpbiB0aGUgcGF0dGVybi4KKy5zcAorICBQQ1JFMl9VU0VfT0ZGU0VUX0xJTUlUCisuc3AKK1RoaXMgb3B0aW9uIG11c3QgYmUgc2V0IGZvciBcZkJwY3JlMl9jb21waWxlKClcZlAgaWYKK1xmQnBjcmUyX3NldF9vZmZzZXRfbGltaXQoKVxmUCBpcyBnb2luZyB0byBiZSB1c2VkIHRvIHNldCBhIG5vbi1kZWZhdWx0IG9mZnNldAorbGltaXQgaW4gYSBtYXRjaCBjb250ZXh0IGZvciBtYXRjaGVzIHRoYXQgdXNlIHRoaXMgcGF0dGVybi4gQW4gZXJyb3IgaXMKK2dlbmVyYXRlZCBpZiBhbiBvZmZzZXQgbGltaXQgaXMgc2V0IHdpdGhvdXQgdGhpcyBvcHRpb24uIEZvciBtb3JlIGRldGFpbHMsIHNlZQordGhlIGRlc2NyaXB0aW9uIG9mIFxmQnBjcmUyX3NldF9vZmZzZXRfbGltaXQoKVxmUCBpbiB0aGUKKy5cIiBIVE1MIDxhIGhyZWY9IiNtYXRjaGNvbnRleHQiPgorLlwiIDwvYT4KK3NlY3Rpb24KKy5cIgordGhhdCBkZXNjcmliZXMgbWF0Y2ggY29udGV4dHMuIFNlZSBhbHNvIHRoZSBQQ1JFMl9GSVJTVExJTkUKK29wdGlvbiBhYm92ZS4KKy5zcAorICBQQ1JFMl9VVEYKKy5zcAorVGhpcyBvcHRpb24gY2F1c2VzIFBDUkUyIHRvIHJlZ2FyZCBib3RoIHRoZSBwYXR0ZXJuIGFuZCB0aGUgc3ViamVjdCBzdHJpbmdzCit0aGF0IGFyZSBzdWJzZXF1ZW50bHkgcHJvY2Vzc2VkIGFzIHN0cmluZ3Mgb2YgVVRGIGNoYXJhY3RlcnMgaW5zdGVhZCBvZgorc2luZ2xlLWNvZGUtdW5pdCBzdHJpbmdzLiBJdCBpcyBhdmFpbGFibGUgd2hlbiBQQ1JFMiBpcyBidWlsdCB0byBpbmNsdWRlCitVbmljb2RlIHN1cHBvcnQgKHdoaWNoIGlzIHRoZSBkZWZhdWx0KS4gSWYgVW5pY29kZSBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUsCit0aGUgdXNlIG9mIHRoaXMgb3B0aW9uIHByb3Zva2VzIGFuIGVycm9yLiBEZXRhaWxzIG9mIGhvdyB0aGlzIG9wdGlvbiBjaGFuZ2VzCit0aGUgYmVoYXZpb3VyIG9mIFBDUkUyIGFyZSBnaXZlbiBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnVuaWNvZGVcZlAKKy5cIgorcGFnZS4KKy4KKy4KKy5TSCAiQ09NUElMQVRJT04gRVJST1IgQ09ERVMiCisucnMKKy5zcAorVGhlcmUgYXJlIG92ZXIgODAgcG9zaXRpdmUgZXJyb3IgY29kZXMgdGhhdCBcZkJwY3JlMl9jb21waWxlKClcZlAgbWF5IHJldHVybiBpZgoraXQgZmluZHMgYW4gZXJyb3IgaW4gdGhlIHBhdHRlcm4uIFRoZXJlIGFyZSBhbHNvIHNvbWUgbmVnYXRpdmUgZXJyb3IgY29kZXMgdGhhdAorYXJlIHVzZWQgZm9yIGludmFsaWQgVVRGIHN0cmluZ3MuIFRoZXNlIGFyZSB0aGUgc2FtZSBhcyBnaXZlbiBieQorXGZCcGNyZTJfbWF0Y2goKVxmUCBhbmQgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAsIGFuZCBhcmUgZGVzY3JpYmVkIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUydW5pY29kZVxmUAorLlwiCitwYWdlLiBUaGUgXGZCcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKVxmUCBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHRvIG9idGFpbiBhCit0ZXh0dWFsIGVycm9yIG1lc3NhZ2UgZnJvbSBhbnkgZXJyb3IgY29kZS4KKy4KKy4KKy5TSCAiSlVTVC1JTi1USU1FIChKSVQpIENPTVBJTEFUSU9OIgorLnJzCisuc3AKKy5uZgorLkIgaW50IHBjcmUyX2ppdF9jb21waWxlKHBjcmUyX2NvZGUgKlxmSWNvZGVcZlAsIHVpbnQzMl90IFxmSW9wdGlvbnNcZlApOworLnNwCisuQiBpbnQgcGNyZTJfaml0X21hdGNoKGNvbnN0IHBjcmUyX2NvZGUgKlxmSWNvZGVcZlAsIFBDUkUyX1NQVFIgXGZJc3ViamVjdFxmUCwKKy5CICIgIFBDUkUyX1NJWkUgXGZJbGVuZ3RoXGZQLCBQQ1JFMl9TSVpFIFxmSXN0YXJ0b2Zmc2V0XGZQLCIKKy5CICIgIHVpbnQzMl90IFxmSW9wdGlvbnNcZlAsIHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsIgorLkIgIiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlApOyIKKy5zcAorLkIgdm9pZCBwY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5KHBjcmUyX2dlbmVyYWxfY29udGV4dCAqXGZJZ2NvbnRleHRcZlApOworLnNwCisuQiBwY3JlMl9qaXRfc3RhY2sgKnBjcmUyX2ppdF9zdGFja19jcmVhdGUoUENSRTJfU0laRSBcZklzdGFydHNpemVcZlAsCisuQiAiICBQQ1JFMl9TSVpFIFxmSW1heHNpemVcZlAsIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqXGZJZ2NvbnRleHRcZlApOyIKKy5zcAorLkIgdm9pZCBwY3JlMl9qaXRfc3RhY2tfYXNzaWduKHBjcmUyX21hdGNoX2NvbnRleHQgKlxmSW1jb250ZXh0XGZQLAorLkIgIiAgcGNyZTJfaml0X2NhbGxiYWNrIFxmSWNhbGxiYWNrX2Z1bmN0aW9uXGZQLCB2b2lkICpcZkljYWxsYmFja19kYXRhXGZQKTsiCisuc3AKKy5CIHZvaWQgcGNyZTJfaml0X3N0YWNrX2ZyZWUocGNyZTJfaml0X3N0YWNrICpcZklqaXRfc3RhY2tcZlApOworLmZpCisuUAorVGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgc3VwcG9ydCBmb3IgSklUIGNvbXBpbGF0aW9uLCB3aGljaCwgaWYgdGhlIGp1c3QtaW4tdGltZQorY29tcGlsZXIgaXMgYXZhaWxhYmxlLCBmdXJ0aGVyIHByb2Nlc3NlcyBhIGNvbXBpbGVkIHBhdHRlcm4gaW50byBtYWNoaW5lIGNvZGUKK3RoYXQgZXhlY3V0ZXMgbXVjaCBmYXN0ZXIgdGhhbiB0aGUgXGZCcGNyZTJfbWF0Y2goKVxmUCBpbnRlcnByZXRpdmUgbWF0Y2hpbmcKK2Z1bmN0aW9uLiBGdWxsIGRldGFpbHMgYXJlIGdpdmVuIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyaml0XGZQCisuXCIKK2RvY3VtZW50YXRpb24uCisuUAorSklUIGNvbXBpbGF0aW9uIGlzIGEgaGVhdnl3ZWlnaHQgb3B0aW1pemF0aW9uLiBJdCBjYW4gdGFrZSBzb21lIHRpbWUgZm9yCitwYXR0ZXJucyB0byBiZSBhbmFseXplZCwgYW5kIGZvciBvbmUtb2ZmIG1hdGNoZXMgYW5kIHNpbXBsZSBwYXR0ZXJucyB0aGUKK2JlbmVmaXQgb2YgZmFzdGVyIGV4ZWN1dGlvbiBtaWdodCBiZSBvZmZzZXQgYnkgYSBtdWNoIHNsb3dlciBjb21waWxhdGlvbiB0aW1lLgorTW9zdCwgYnV0IG5vdCBhbGwgcGF0dGVybnMgY2FuIGJlIG9wdGltaXplZCBieSB0aGUgSklUIGNvbXBpbGVyLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0ibG9jYWxlc3VwcG9ydCI+PC9hPgorLlNIICJMT0NBTEUgU1VQUE9SVCIKKy5ycworLnNwCitQQ1JFMiBoYW5kbGVzIGNhc2VsZXNzIG1hdGNoaW5nLCBhbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIGNoYXJhY3RlcnMgYXJlIGxldHRlcnMsCitkaWdpdHMsIG9yIHdoYXRldmVyLCBieSByZWZlcmVuY2UgdG8gYSBzZXQgb2YgdGFibGVzLCBpbmRleGVkIGJ5IGNoYXJhY3RlciBjb2RlCitwb2ludC4gVGhpcyBhcHBsaWVzIG9ubHkgdG8gY2hhcmFjdGVycyB3aG9zZSBjb2RlIHBvaW50cyBhcmUgbGVzcyB0aGFuIDI1Ni4gQnkKK2RlZmF1bHQsIGhpZ2hlci12YWx1ZWQgY29kZSBwb2ludHMgbmV2ZXIgbWF0Y2ggZXNjYXBlcyBzdWNoIGFzIFxldyBvciBcZWQuCitIb3dldmVyLCBpZiBQQ1JFMiBpcyBidWlsdCB3aXRoIFVURiBzdXBwb3J0LCBhbGwgY2hhcmFjdGVycyBjYW4gYmUgdGVzdGVkIHdpdGgKK1xlcCBhbmQgXGVQLCBvciwgYWx0ZXJuYXRpdmVseSwgdGhlIFBDUkUyX1VDUCBvcHRpb24gY2FuIGJlIHNldCB3aGVuIGEgcGF0dGVybgoraXMgY29tcGlsZWQ7IHRoaXMgY2F1c2VzIFxldyBhbmQgZnJpZW5kcyB0byB1c2UgVW5pY29kZSBwcm9wZXJ0eSBzdXBwb3J0CitpbnN0ZWFkIG9mIHRoZSBidWlsdC1pbiB0YWJsZXMuCisuUAorVGhlIHVzZSBvZiBsb2NhbGVzIHdpdGggVW5pY29kZSBpcyBkaXNjb3VyYWdlZC4gSWYgeW91IGFyZSBoYW5kbGluZyBjaGFyYWN0ZXJzCit3aXRoIGNvZGUgcG9pbnRzIGdyZWF0ZXIgdGhhbiAxMjgsIHlvdSBzaG91bGQgZWl0aGVyIHVzZSBVbmljb2RlIHN1cHBvcnQsIG9yCit1c2UgbG9jYWxlcywgYnV0IG5vdCB0cnkgdG8gbWl4IHRoZSB0d28uCisuUAorUENSRTIgY29udGFpbnMgYW4gaW50ZXJuYWwgc2V0IG9mIGNoYXJhY3RlciB0YWJsZXMgdGhhdCBhcmUgdXNlZCBieSBkZWZhdWx0LgorVGhlc2UgYXJlIHN1ZmZpY2llbnQgZm9yIG1hbnkgYXBwbGljYXRpb25zLiBOb3JtYWxseSwgdGhlIGludGVybmFsIHRhYmxlcworcmVjb2duaXplIG9ubHkgQVNDSUkgY2hhcmFjdGVycy4gSG93ZXZlciwgd2hlbiBQQ1JFMiBpcyBidWlsdCwgaXQgaXMgcG9zc2libGUKK3RvIGNhdXNlIHRoZSBpbnRlcm5hbCB0YWJsZXMgdG8gYmUgcmVidWlsdCBpbiB0aGUgZGVmYXVsdCAiQyIgbG9jYWxlIG9mIHRoZQorbG9jYWwgc3lzdGVtLCB3aGljaCBtYXkgY2F1c2UgdGhlbSB0byBiZSBkaWZmZXJlbnQuCisuUAorVGhlIGludGVybmFsIHRhYmxlcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0YWJsZXMgc3VwcGxpZWQgYnkgdGhlIGFwcGxpY2F0aW9uCit0aGF0IGNhbGxzIFBDUkUyLiBUaGVzZSBtYXkgYmUgY3JlYXRlZCBpbiBhIGRpZmZlcmVudCBsb2NhbGUgZnJvbSB0aGUgZGVmYXVsdC4KK0FzIG1vcmUgYW5kIG1vcmUgYXBwbGljYXRpb25zIGNoYW5nZSB0byB1c2luZyBVbmljb2RlLCB0aGUgbmVlZCBmb3IgdGhpcyBsb2NhbGUKK3N1cHBvcnQgaXMgZXhwZWN0ZWQgdG8gZGllIGF3YXkuCisuUAorRXh0ZXJuYWwgdGFibGVzIGFyZSBidWlsdCBieSBjYWxsaW5nIHRoZSBcZkJwY3JlMl9tYWtldGFibGVzKClcZlAgZnVuY3Rpb24sIGluCit0aGUgcmVsZXZhbnQgbG9jYWxlLiBUaGUgcmVzdWx0IGNhbiBiZSBwYXNzZWQgdG8gXGZCcGNyZTJfY29tcGlsZSgpXGZQIGFzIG9mdGVuCithcyBuZWNlc3NhcnksIGJ5IGNyZWF0aW5nIGEgY29tcGlsZSBjb250ZXh0IGFuZCBjYWxsaW5nCitcZkJwY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcygpXGZQIHRvIHNldCB0aGUgdGFibGVzIHBvaW50ZXIgdGhlcmVpbi4gRm9yCitleGFtcGxlLCB0byBidWlsZCBhbmQgdXNlIHRhYmxlcyB0aGF0IGFyZSBhcHByb3ByaWF0ZSBmb3IgdGhlIEZyZW5jaCBsb2NhbGUKKyh3aGVyZSBhY2NlbnRlZCBjaGFyYWN0ZXJzIHdpdGggdmFsdWVzIGdyZWF0ZXIgdGhhbiAxMjggYXJlIHRyZWF0ZWQgYXMKK2xldHRlcnMpLCB0aGUgZm9sbG93aW5nIGNvZGUgY291bGQgYmUgdXNlZDoKKy5zcAorICBzZXRsb2NhbGUoTENfQ1RZUEUsICJmcl9GUiIpOworICB0YWJsZXMgPSBwY3JlMl9tYWtldGFibGVzKE5VTEwpOworICBjY29udGV4dCA9IHBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUoTlVMTCk7CisgIHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKGNjb250ZXh0LCB0YWJsZXMpOworICByZSA9IHBjcmUyX2NvbXBpbGUoLi4uLCBjY29udGV4dCk7Cisuc3AKK1RoZSBsb2NhbGUgbmFtZSAiZnJfRlIiIGlzIHVzZWQgb24gTGludXggYW5kIG90aGVyIFVuaXgtbGlrZSBzeXN0ZW1zOyBpZiB5b3UKK2FyZSB1c2luZyBXaW5kb3dzLCB0aGUgbmFtZSBmb3IgdGhlIEZyZW5jaCBsb2NhbGUgaXMgImZyZW5jaCIuIEl0IGlzIHRoZQorY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgdGhlIG1lbW9yeSBjb250YWluaW5nIHRoZSB0YWJsZXMgcmVtYWlucworYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIGl0IGlzIG5lZWRlZC4KKy5QCitUaGUgcG9pbnRlciB0aGF0IGlzIHBhc3NlZCAodmlhIHRoZSBjb21waWxlIGNvbnRleHQpIHRvIFxmQnBjcmUyX2NvbXBpbGUoKVxmUAoraXMgc2F2ZWQgd2l0aCB0aGUgY29tcGlsZWQgcGF0dGVybiwgYW5kIHRoZSBzYW1lIHRhYmxlcyBhcmUgdXNlZCBieQorXGZCcGNyZTJfbWF0Y2goKVxmUCBhbmQgXGZCcGNyZV9kZmFfbWF0Y2goKVxmUC4gVGh1cywgZm9yIGFueSBzaW5nbGUgcGF0dGVybiwKK2NvbXBpbGF0aW9uLCBhbmQgbWF0Y2hpbmcgYWxsIGhhcHBlbiBpbiB0aGUgc2FtZSBsb2NhbGUsIGJ1dCBkaWZmZXJlbnQgcGF0dGVybnMKK2NhbiBiZSBwcm9jZXNzZWQgaW4gZGlmZmVyZW50IGxvY2FsZXMuCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJpbmZvYWJvdXRwYXR0ZXJuIj48L2E+CisuU0ggIklORk9STUFUSU9OIEFCT1VUIEEgQ09NUElMRUQgUEFUVEVSTiIKKy5ycworLnNwCisubmYKKy5CIGludCBwY3JlMl9wYXR0ZXJuX2luZm8oY29uc3QgcGNyZTIgKlxmSWNvZGVcZlAsIHVpbnQzMl90IFxmSXdoYXRcZlAsIHZvaWQgKlxmSXdoZXJlXGZQKTsKKy5maQorLlAKK1RoZSBcZkJwY3JlMl9wYXR0ZXJuX2luZm8oKVxmUCBmdW5jdGlvbiByZXR1cm5zIGdlbmVyYWwgaW5mb3JtYXRpb24gYWJvdXQgYQorY29tcGlsZWQgcGF0dGVybi4gRm9yIGluZm9ybWF0aW9uIGFib3V0IGNhbGxvdXRzLCBzZWUgdGhlCisuXCIgSFRNTCA8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCNpbmZvYWJvdXRjYWxsb3V0cyI+CisuXCIgPC9hPgorbmV4dCBzZWN0aW9uLgorLlwiCitUaGUgZmlyc3QgYXJndW1lbnQgZm9yIFxmQnBjcmUyX3BhdHRlcm5faW5mbygpXGZQIGlzIGEgcG9pbnRlciB0byB0aGUgY29tcGlsZWQKK3BhdHRlcm4uIFRoZSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmaWVzIHdoaWNoIHBpZWNlIG9mIGluZm9ybWF0aW9uIGlzIHJlcXVpcmVkLAorYW5kIHRoZSB0aGlyZCBhcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gYSB2YXJpYWJsZSB0byByZWNlaXZlIHRoZSBkYXRhLiBJZiB0aGUKK3RoaXJkIGFyZ3VtZW50IGlzIE5VTEwsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBpZ25vcmVkLCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMKK3RoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSB2YXJpYWJsZSB0aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgaW5mb3JtYXRpb24KK3JlcXVlc3RlZC4gT3RoZXJ3aXNlLCBUaGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIHplcm8gZm9yIHN1Y2Nlc3MsIG9yIG9uZSBvZgordGhlIGZvbGxvd2luZyBuZWdhdGl2ZSBudW1iZXJzOgorLnNwCisgIFBDUkUyX0VSUk9SX05VTEwgICAgICAgICAgIHRoZSBhcmd1bWVudCBcZkljb2RlXGZQIHdhcyBOVUxMCisgIFBDUkUyX0VSUk9SX0JBRE1BR0lDICAgICAgIHRoZSAibWFnaWMgbnVtYmVyIiB3YXMgbm90IGZvdW5kCisgIFBDUkUyX0VSUk9SX0JBRE9QVElPTiAgICAgIHRoZSB2YWx1ZSBvZiBcZkl3aGF0XGZQIHdhcyBpbnZhbGlkCisgIFBDUkUyX0VSUk9SX1VOU0VUICAgICAgICAgIHRoZSByZXF1ZXN0ZWQgZmllbGQgaXMgbm90IHNldAorLnNwCitUaGUgIm1hZ2ljIG51bWJlciIgaXMgcGxhY2VkIGF0IHRoZSBzdGFydCBvZiBlYWNoIGNvbXBpbGVkIHBhdHRlcm4gYXMgYW4gc2ltcGxlCitjaGVjayBhZ2FpbnN0IHBhc3NpbmcgYW4gYXJiaXRyYXJ5IG1lbW9yeSBwb2ludGVyLiBIZXJlIGlzIGEgdHlwaWNhbCBjYWxsIG9mCitcZkJwY3JlMl9wYXR0ZXJuX2luZm8oKVxmUCwgdG8gb2J0YWluIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm46Cisuc3AKKyAgaW50IHJjOworICBzaXplX3QgbGVuZ3RoOworICByYyA9IHBjcmUyX3BhdHRlcm5faW5mbygKKyAgICByZSwgICAgICAgICAgICAgICAvKiByZXN1bHQgb2YgcGNyZTJfY29tcGlsZSgpICovCisgICAgUENSRTJfSU5GT19TSVpFLCAgLyogd2hhdCBpcyByZXF1aXJlZCAqLworICAgICZsZW5ndGgpOyAgICAgICAgIC8qIHdoZXJlIHRvIHB1dCB0aGUgZGF0YSAqLworLnNwCitUaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgc2Vjb25kIGFyZ3VtZW50IGFyZSBkZWZpbmVkIGluIFxmQnBjcmUyLmhcZlAsIGFuZAorYXJlIGFzIGZvbGxvd3M6Cisuc3AKKyAgUENSRTJfSU5GT19BTExPUFRJT05TCisgIFBDUkUyX0lORk9fQVJHT1BUSU9OUworLnNwCitSZXR1cm4gYSBjb3B5IG9mIHRoZSBwYXR0ZXJuJ3Mgb3B0aW9ucy4gVGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhCitcZkJ1aW50MzJfdFxmUCB2YXJpYWJsZS4gUENSRTJfSU5GT19BUkdPUFRJT05TIHJldHVybnMgZXhhY3RseSB0aGUgb3B0aW9ucyB0aGF0Cit3ZXJlIHBhc3NlZCB0byBcZkJwY3JlMl9jb21waWxlKClcZlAsIHdoZXJlYXMgUENSRTJfSU5GT19BTExPUFRJT05TIHJldHVybnMKK3RoZSBjb21waWxlIG9wdGlvbnMgYXMgbW9kaWZpZWQgYnkgYW55IHRvcC1sZXZlbCBvcHRpb24gc2V0dGluZ3Mgc3VjaCBhcyAoKlVURikKK2F0IHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiBpdHNlbGYuIEZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiAvKCpVVEYpYWJjLyBpcworY29tcGlsZWQgd2l0aCB0aGUgUENSRTJfRVhURU5ERUQgb3B0aW9uLCB0aGUgcmVzdWx0IGlzIFBDUkUyX0VYVEVOREVEIGFuZAorUENSRTJfVVRGLgorLlAKK0EgcGF0dGVybiBjb21waWxlZCB3aXRob3V0IFBDUkUyX0FOQ0hPUkVEIGlzIGF1dG9tYXRpY2FsbHkgYW5jaG9yZWQgYnkgUENSRTIgaWYKK3RoZSBmaXJzdCBzaWduaWZpY2FudCBpdGVtIGluIGV2ZXJ5IHRvcC1sZXZlbCBicmFuY2ggaXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6Cisuc3AKKyAgXiAgICAgdW5sZXNzIFBDUkUyX01VTFRJTElORSBpcyBzZXQKKyAgXGVBICAgIGFsd2F5cworICBcZUcgICAgYWx3YXlzCisgIC4qICAgIHNvbWV0aW1lcyAtIHNlZSBiZWxvdworLnNwCitXaGVuIC4qIGlzIHRoZSBmaXJzdCBzaWduaWZpY2FudCBpdGVtLCBhbmNob3JpbmcgaXMgcG9zc2libGUgb25seSB3aGVuIGFsbCB0aGUKK2ZvbGxvd2luZyBhcmUgdHJ1ZToKKy5zcAorICAuKiBpcyBub3QgaW4gYW4gYXRvbWljIGdyb3VwCisuXCIgSk9JTgorICAuKiBpcyBub3QgaW4gYSBjYXB0dXJpbmcgZ3JvdXAgdGhhdCBpcyB0aGUgc3ViamVjdAorICAgICAgIG9mIGEgYmFjayByZWZlcmVuY2UKKyAgUENSRTJfRE9UQUxMIGlzIGluIGZvcmNlIGZvciAuKgorICBOZWl0aGVyICgqUFJVTkUpIG5vciAoKlNLSVApIGFwcGVhcnMgaW4gdGhlIHBhdHRlcm4uCisgIFBDUkUyX05PX0RPVFNUQVJfQU5DSE9SIGlzIG5vdCBzZXQuCisuc3AKK0ZvciBwYXR0ZXJucyB0aGF0IGFyZSBhdXRvLWFuY2hvcmVkLCB0aGUgUENSRTJfQU5DSE9SRUQgYml0IGlzIHNldCBpbiB0aGUKK29wdGlvbnMgcmV0dXJuZWQgZm9yIFBDUkUyX0lORk9fQUxMT1BUSU9OUy4KKy5zcAorICBQQ1JFMl9JTkZPX0JBQ0tSRUZNQVgKKy5zcAorUmV0dXJuIHRoZSBudW1iZXIgb2YgdGhlIGhpZ2hlc3QgYmFjayByZWZlcmVuY2UgaW4gdGhlIHBhdHRlcm4uIFRoZSB0aGlyZAorYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIFxmQnVpbnQzMl90XGZQIHZhcmlhYmxlLiBOYW1lZCBzdWJwYXR0ZXJucyBhY3F1aXJlCitudW1iZXJzIGFzIHdlbGwgYXMgbmFtZXMsIGFuZCB0aGVzZSBjb3VudCB0b3dhcmRzIHRoZSBoaWdoZXN0IGJhY2sgcmVmZXJlbmNlLgorQmFjayByZWZlcmVuY2VzIHN1Y2ggYXMgXGU0IG9yIFxlZ3sxMn0gbWF0Y2ggdGhlIGNhcHR1cmVkIGNoYXJhY3RlcnMgb2YgdGhlCitnaXZlbiBncm91cCwgYnV0IGluIGFkZGl0aW9uLCB0aGUgY2hlY2sgdGhhdCBhIGNhcHR1cmluZyBncm91cCBpcyBzZXQgaW4gYQorY29uZGl0aW9uYWwgc3VicGF0dGVybiBzdWNoIGFzICg/KDMpYXxiKSBpcyBhbHNvIGEgYmFjayByZWZlcmVuY2UuIFplcm8gaXMKK3JldHVybmVkIGlmIHRoZXJlIGFyZSBubyBiYWNrIHJlZmVyZW5jZXMuCisuc3AKKyAgUENSRTJfSU5GT19CU1IKKy5zcAorVGhlIG91dHB1dCBpcyBhIHVpbnQzMl90IHdob3NlIHZhbHVlIGluZGljYXRlcyB3aGF0IGNoYXJhY3RlciBzZXF1ZW5jZXMgdGhlIFxlUgorZXNjYXBlIHNlcXVlbmNlIG1hdGNoZXMuIEEgdmFsdWUgb2YgUENSRTJfQlNSX1VOSUNPREUgbWVhbnMgdGhhdCBcZVIgbWF0Y2hlcworYW55IFVuaWNvZGUgbGluZSBlbmRpbmcgc2VxdWVuY2U7IGEgdmFsdWUgb2YgUENSRTJfQlNSX0FOWUNSTEYgbWVhbnMgdGhhdCBcZVIKK21hdGNoZXMgb25seSBDUiwgTEYsIG9yIENSTEYuCisuc3AKKyAgUENSRTJfSU5GT19DQVBUVVJFQ09VTlQKKy5zcAorUmV0dXJuIHRoZSBoaWdoZXN0IGNhcHR1cmluZyBzdWJwYXR0ZXJuIG51bWJlciBpbiB0aGUgcGF0dGVybi4gSW4gcGF0dGVybnMKK3doZXJlICg/fCBpcyBub3QgdXNlZCwgdGhpcyBpcyBhbHNvIHRoZSB0b3RhbCBudW1iZXIgb2YgY2FwdHVyaW5nIHN1YnBhdHRlcm5zLgorVGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBcZkJ1aW50MzJfdFxmUCB2YXJpYWJsZS4KKy5zcAorICBQQ1JFMl9JTkZPX0ZJUlNUQklUTUFQCisuc3AKK0luIHRoZSBhYnNlbmNlIG9mIGEgc2luZ2xlIGZpcnN0IGNvZGUgdW5pdCBmb3IgYSBub24tYW5jaG9yZWQgcGF0dGVybiwKK1xmQnBjcmUyX2NvbXBpbGUoKVxmUCBtYXkgY29uc3RydWN0IGEgMjU2LWJpdCB0YWJsZSB0aGF0IGRlZmluZXMgYSBmaXhlZCBzZXQgb2YKK3ZhbHVlcyBmb3IgdGhlIGZpcnN0IGNvZGUgdW5pdCBpbiBhbnkgbWF0Y2guIEZvciBleGFtcGxlLCBhIHBhdHRlcm4gdGhhdCBzdGFydHMKK3dpdGggW2FiY10gcmVzdWx0cyBpbiBhIHRhYmxlIHdpdGggdGhyZWUgYml0cyBzZXQuIFdoZW4gY29kZSB1bml0IHZhbHVlcworZ3JlYXRlciB0aGFuIDI1NSBhcmUgc3VwcG9ydGVkLCB0aGUgZmxhZyBiaXQgZm9yIDI1NSBtZWFucyAiYW55IGNvZGUgdW5pdCBvZgordmFsdWUgMjU1IG9yIGFib3ZlIi4gSWYgc3VjaCBhIHRhYmxlIHdhcyBjb25zdHJ1Y3RlZCwgYSBwb2ludGVyIHRvIGl0IGlzCityZXR1cm5lZC4gT3RoZXJ3aXNlIE5VTEwgaXMgcmV0dXJuZWQuIFRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4KK1xmQmNvbnN0IHVpbnQ4X3QgKlxmUCB2YXJpYWJsZS4KKy5zcAorICBQQ1JFMl9JTkZPX0ZJUlNUQ09ERVRZUEUKKy5zcAorUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgYW55IG1hdGNoZWQgc3RyaW5nLCBmb3IgYQorbm9uLWFuY2hvcmVkIHBhdHRlcm4uIFRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gXGZCdWludDMyX3RcZlAKK3ZhcmlhYmxlLiBJZiB0aGVyZSBpcyBhIGZpeGVkIGZpcnN0IHZhbHVlLCBmb3IgZXhhbXBsZSwgdGhlIGxldHRlciAiYyIgZnJvbSBhCitwYXR0ZXJuIHN1Y2ggYXMgKGNhdHxjb3d8Y295b3RlKSwgMSBpcyByZXR1cm5lZCwgYW5kIHRoZSBjaGFyYWN0ZXIgdmFsdWUgY2FuIGJlCityZXRyaWV2ZWQgdXNpbmcgUENSRTJfSU5GT19GSVJTVENPREVVTklULiBJZiB0aGVyZSBpcyBubyBmaXhlZCBmaXJzdCB2YWx1ZSwgYnV0CitpdCBpcyBrbm93biB0aGF0IGEgbWF0Y2ggY2FuIG9jY3VyIG9ubHkgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0IG9yCitmb2xsb3dpbmcgYSBuZXdsaW5lIGluIHRoZSBzdWJqZWN0LCAyIGlzIHJldHVybmVkLiBPdGhlcndpc2UsIGFuZCBmb3IgYW5jaG9yZWQKK3BhdHRlcm5zLCAwIGlzIHJldHVybmVkLgorLnNwCisgIFBDUkUyX0lORk9fRklSU1RDT0RFVU5JVAorLnNwCitSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgYW55IG1hdGNoZWQgc3RyaW5nIGluIHRoZSBzaXR1YXRpb24KK3doZXJlIFBDUkUyX0lORk9fRklSU1RDT0RFVFlQRSByZXR1cm5zIDE7IG90aGVyd2lzZSByZXR1cm4gMC4gVGhlIHRoaXJkCithcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gXGZCdWludDMyX3RcZlAgdmFyaWFibGUuIEluIHRoZSA4LWJpdCBsaWJyYXJ5LCB0aGUKK3ZhbHVlIGlzIGFsd2F5cyBsZXNzIHRoYW4gMjU2LiBJbiB0aGUgMTYtYml0IGxpYnJhcnkgdGhlIHZhbHVlIGNhbiBiZSB1cCB0bworMHhmZmZmLiBJbiB0aGUgMzItYml0IGxpYnJhcnkgaW4gVVRGLTMyIG1vZGUgdGhlIHZhbHVlIGNhbiBiZSB1cCB0byAweDEwZmZmZiwKK2FuZCB1cCB0byAweGZmZmZmZmZmIHdoZW4gbm90IHVzaW5nIFVURi0zMiBtb2RlLgorLnNwCisgIFBDUkUyX0lORk9fSEFTQkFDS1NMQVNIQworLnNwCitSZXR1cm4gMSBpZiB0aGUgcGF0dGVybiBjb250YWlucyBhbnkgaW5zdGFuY2VzIG9mIFxlQywgb3RoZXJ3aXNlIDAuIFRoZSB0aGlyZAorYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIFxmQnVpbnQzMl90XGZQIHZhcmlhYmxlLgorLnNwCisgIFBDUkUyX0lORk9fSEFTQ1JPUkxGCisuc3AKK1JldHVybiAxIGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIGFueSBleHBsaWNpdCBtYXRjaGVzIGZvciBDUiBvciBMRiBjaGFyYWN0ZXJzLAorb3RoZXJ3aXNlIDAuIFRoZSB0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gXGZCdWludDMyX3RcZlAgdmFyaWFibGUuIEFuCitleHBsaWNpdCBtYXRjaCBpcyBlaXRoZXIgYSBsaXRlcmFsIENSIG9yIExGIGNoYXJhY3Rlciwgb3IgXGVyIG9yIFxlbi4KKy5zcAorICBQQ1JFMl9JTkZPX0pDSEFOR0VECisuc3AKK1JldHVybiAxIGlmIHRoZSAoP0opIG9yICg/LUopIG9wdGlvbiBzZXR0aW5nIGlzIHVzZWQgaW4gdGhlIHBhdHRlcm4sIG90aGVyd2lzZQorMC4gVGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBcZkJ1aW50MzJfdFxmUCB2YXJpYWJsZS4gKD9KKSBhbmQKKyg/LUopIHNldCBhbmQgdW5zZXQgdGhlIGxvY2FsIFBDUkUyX0RVUE5BTUVTIG9wdGlvbiwgcmVzcGVjdGl2ZWx5LgorLnNwCisgIFBDUkUyX0lORk9fSklUU0laRQorLnNwCitJZiB0aGUgY29tcGlsZWQgcGF0dGVybiB3YXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBieQorXGZCcGNyZTJfaml0X2NvbXBpbGUoKVxmUCwgcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBKSVQgY29tcGlsZWQgY29kZSwgb3RoZXJ3aXNlCityZXR1cm4gemVyby4gVGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhIFxmQnNpemVfdFxmUCB2YXJpYWJsZS4KKy5zcAorICBQQ1JFMl9JTkZPX0xBU1RDT0RFVFlQRQorLnNwCitSZXR1cm5zIDEgaWYgdGhlcmUgaXMgYSByaWdodG1vc3QgbGl0ZXJhbCBjb2RlIHVuaXQgdGhhdCBtdXN0IGV4aXN0IGluIGFueQorbWF0Y2hlZCBzdHJpbmcsIG90aGVyIHRoYW4gYXQgaXRzIHN0YXJ0LiBUaGUgdGhpcmQgYXJndW1lbnQgc2hvdWxkICBwb2ludCB0byBhbgorXGZCdWludDMyX3RcZlAgdmFyaWFibGUuIElmIHRoZXJlIGlzIG5vIHN1Y2ggdmFsdWUsIDAgaXMgcmV0dXJuZWQuIFdoZW4gMSBpcworcmV0dXJuZWQsIHRoZSBjb2RlIHVuaXQgdmFsdWUgaXRzZWxmIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcKK1BDUkUyX0lORk9fTEFTVENPREVVTklULiBGb3IgYW5jaG9yZWQgcGF0dGVybnMsIGEgbGFzdCBsaXRlcmFsIHZhbHVlIGlzCityZWNvcmRlZCBvbmx5IGlmIGl0IGZvbGxvd3Mgc29tZXRoaW5nIG9mIHZhcmlhYmxlIGxlbmd0aC4gRm9yIGV4YW1wbGUsIGZvciB0aGUKK3BhdHRlcm4gL15hXGVkK3pcZWQrLyB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgMSAod2l0aCAieiIgcmV0dXJuZWQgZnJvbQorUENSRTJfSU5GT19MQVNUQ09ERVVOSVQpLCBidXQgZm9yIC9eYVxlZHpcZWQvIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyAwLgorLnNwCisgIFBDUkUyX0lORk9fTEFTVENPREVVTklUCisuc3AKK1JldHVybiB0aGUgdmFsdWUgb2YgdGhlIHJpZ2h0bW9zdCBsaXRlcmFsIGRhdGEgdW5pdCB0aGF0IG11c3QgZXhpc3QgaW4gYW55CittYXRjaGVkIHN0cmluZywgb3RoZXIgdGhhbiBhdCBpdHMgc3RhcnQsIGlmIHN1Y2ggYSB2YWx1ZSBoYXMgYmVlbiByZWNvcmRlZC4gVGhlCit0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYW4gXGZCdWludDMyX3RcZlAgdmFyaWFibGUuIElmIHRoZXJlIGlzIG5vIHN1Y2gKK3ZhbHVlLCAwIGlzIHJldHVybmVkLgorLnNwCisgIFBDUkUyX0lORk9fTUFUQ0hFTVBUWQorLnNwCitSZXR1cm4gMSBpZiB0aGUgcGF0dGVybiBtaWdodCBtYXRjaCBhbiBlbXB0eSBzdHJpbmcsIG90aGVyd2lzZSAwLiBUaGUgdGhpcmQKK2FyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiBcZkJ1aW50MzJfdFxmUCB2YXJpYWJsZS4gV2hlbiBhIHBhdHRlcm4gY29udGFpbnMKK3JlY3Vyc2l2ZSBzdWJyb3V0aW5lIGNhbGxzIGl0IGlzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3IKK25vdCBpdCBjYW4gbWF0Y2ggYW4gZW1wdHkgc3RyaW5nLiBQQ1JFMiB0YWtlcyBhIGNhdXRpb3VzIGFwcHJvYWNoIGFuZCByZXR1cm5zIDEKK2luIHN1Y2ggY2FzZXMuCisuc3AKKyAgUENSRTJfSU5GT19NQVRDSExJTUlUCisuc3AKK0lmIHRoZSBwYXR0ZXJuIHNldCBhIG1hdGNoIGxpbWl0IGJ5IGluY2x1ZGluZyBhbiBpdGVtIG9mIHRoZSBmb3JtCisoKkxJTUlUX01BVENIPW5ubm4pIGF0IHRoZSBzdGFydCwgdGhlIHZhbHVlIGlzIHJldHVybmVkLiBUaGUgdGhpcmQgYXJndW1lbnQKK3Nob3VsZCBwb2ludCB0byBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlci4gSWYgbm8gc3VjaCB2YWx1ZSBoYXMgYmVlbiBzZXQsIHRoZQorY2FsbCB0byBcZkJwY3JlMl9wYXR0ZXJuX2luZm8oKVxmUCByZXR1cm5zIHRoZSBlcnJvciBQQ1JFMl9FUlJPUl9VTlNFVC4KKy5zcAorICBQQ1JFMl9JTkZPX01BWExPT0tCRUhJTkQKKy5zcAorUmV0dXJuIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyAobm90IGNvZGUgdW5pdHMpIGluIHRoZSBsb25nZXN0IGxvb2tiZWhpbmQKK2Fzc2VydGlvbiBpbiB0aGUgcGF0dGVybi4gVGhlIHRoaXJkIGFyZ3VtZW50IHNob3VsZCBwb2ludCB0byBhbiB1bnNpZ25lZCAzMi1iaXQKK2ludGVnZXIuIFRoaXMgaW5mb3JtYXRpb24gaXMgdXNlZnVsIHdoZW4gZG9pbmcgbXVsdGktc2VnbWVudCBtYXRjaGluZyB1c2luZyB0aGUKK3BhcnRpYWwgbWF0Y2hpbmcgZmFjaWxpdGllcy4gTm90ZSB0aGF0IHRoZSBzaW1wbGUgYXNzZXJ0aW9ucyBcZWIgYW5kIFxlQgorcmVxdWlyZSBhIG9uZS1jaGFyYWN0ZXIgbG9va2JlaGluZC4gXGVBIGFsc28gcmVnaXN0ZXJzIGEgb25lLWNoYXJhY3RlcgorbG9va2JlaGluZCwgdGhvdWdoIGl0IGRvZXMgbm90IGFjdHVhbGx5IGluc3BlY3QgdGhlIHByZXZpb3VzIGNoYXJhY3Rlci4gVGhpcyBpcwordG8gZW5zdXJlIHRoYXQgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBmcm9tIHRoZSBvbGQgc2VnbWVudCBpcyByZXRhaW5lZCB3aGVuIGEKK25ldyBzZWdtZW50IGlzIHByb2Nlc3NlZC4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgbm8gbG9va2JlaGluZHMgaW4gdGhlCitwYXR0ZXJuLCBcZUEgbWlnaHQgbWF0Y2ggaW5jb3JyZWN0bHkgYXQgdGhlIHN0YXJ0IG9mIGEgbmV3IHNlZ21lbnQuCisuc3AKKyAgUENSRTJfSU5GT19NSU5MRU5HVEgKKy5zcAorSWYgYSBtaW5pbXVtIGxlbmd0aCBmb3IgbWF0Y2hpbmcgc3ViamVjdCBzdHJpbmdzIHdhcyBjb21wdXRlZCwgaXRzIHZhbHVlIGlzCityZXR1cm5lZC4gT3RoZXJ3aXNlIHRoZSByZXR1cm5lZCB2YWx1ZSBpcyAwLiBUaGUgdmFsdWUgaXMgYSBudW1iZXIgb2YKK2NoYXJhY3RlcnMsIHdoaWNoIGluIFVURiBtb2RlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgbnVtYmVyIG9mIGNvZGUgdW5pdHMuCitUaGUgdGhpcmQgYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIFxmQnVpbnQzMl90XGZQIHZhcmlhYmxlLiBUaGUgdmFsdWUgaXMgYQorbG93ZXIgYm91bmQgdG8gdGhlIGxlbmd0aCBvZiBhbnkgbWF0Y2hpbmcgc3RyaW5nLiBUaGVyZSBtYXkgbm90IGJlIGFueSBzdHJpbmdzCitvZiB0aGF0IGxlbmd0aCB0aGF0IGRvIGFjdHVhbGx5IG1hdGNoLCBidXQgZXZlcnkgc3RyaW5nIHRoYXQgZG9lcyBtYXRjaCBpcyBhdAorbGVhc3QgdGhhdCBsb25nLgorLnNwCisgIFBDUkUyX0lORk9fTkFNRUNPVU5UCisgIFBDUkUyX0lORk9fTkFNRUVOVFJZU0laRQorICBQQ1JFMl9JTkZPX05BTUVUQUJMRQorLnNwCitQQ1JFMiBzdXBwb3J0cyB0aGUgdXNlIG9mIG5hbWVkIGFzIHdlbGwgYXMgbnVtYmVyZWQgY2FwdHVyaW5nIHBhcmVudGhlc2VzLiBUaGUKK25hbWVzIGFyZSBqdXN0IGFuIGFkZGl0aW9uYWwgd2F5IG9mIGlkZW50aWZ5aW5nIHRoZSBwYXJlbnRoZXNlcywgd2hpY2ggc3RpbGwKK2FjcXVpcmUgbnVtYmVycy4gU2V2ZXJhbCBjb252ZW5pZW5jZSBmdW5jdGlvbnMgc3VjaCBhcworXGZCcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUoKVxmUCBhcmUgcHJvdmlkZWQgZm9yIGV4dHJhY3RpbmcgY2FwdHVyZWQKK3N1YnN0cmluZ3MgYnkgbmFtZS4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBleHRyYWN0IHRoZSBkYXRhIGRpcmVjdGx5LCBieSBmaXJzdAorY29udmVydGluZyB0aGUgbmFtZSB0byBhIG51bWJlciBpbiBvcmRlciB0byBhY2Nlc3MgdGhlIGNvcnJlY3QgcG9pbnRlcnMgaW4gdGhlCitvdXRwdXQgdmVjdG9yIChkZXNjcmliZWQgd2l0aCBcZkJwY3JlMl9tYXRjaCgpXGZQIGJlbG93KS4gVG8gZG8gdGhlIGNvbnZlcnNpb24sCit5b3UgbmVlZCB0byB1c2UgdGhlIG5hbWUtdG8tbnVtYmVyIG1hcCwgd2hpY2ggaXMgZGVzY3JpYmVkIGJ5IHRoZXNlIHRocmVlCit2YWx1ZXMuCisuUAorVGhlIG1hcCBjb25zaXN0cyBvZiBhIG51bWJlciBvZiBmaXhlZC1zaXplIGVudHJpZXMuIFBDUkUyX0lORk9fTkFNRUNPVU5UIGdpdmVzCit0aGUgbnVtYmVyIG9mIGVudHJpZXMsIGFuZCBQQ1JFMl9JTkZPX05BTUVFTlRSWVNJWkUgZ2l2ZXMgdGhlIHNpemUgb2YgZWFjaAorZW50cnkgaW4gY29kZSB1bml0czsgYm90aCBvZiB0aGVzZSByZXR1cm4gYSBcZkJ1aW50MzJfdFxmUCB2YWx1ZS4gVGhlIGVudHJ5CitzaXplIGRlcGVuZHMgb24gdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBuYW1lLgorLlAKK1BDUkUyX0lORk9fTkFNRVRBQkxFIHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgdGFibGUuIFRoaXMgaXMKK2EgUENSRTJfU1BUUiBwb2ludGVyIHRvIGEgYmxvY2sgb2YgY29kZSB1bml0cy4gSW4gdGhlIDgtYml0IGxpYnJhcnksIHRoZSBmaXJzdAordHdvIGJ5dGVzIG9mIGVhY2ggZW50cnkgYXJlIHRoZSBudW1iZXIgb2YgdGhlIGNhcHR1cmluZyBwYXJlbnRoZXNpcywgbW9zdAorc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdC4gSW4gdGhlIDE2LWJpdCBsaWJyYXJ5LCB0aGUgcG9pbnRlciBwb2ludHMgdG8gMTYtYml0Citjb2RlIHVuaXRzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggY29udGFpbnMgdGhlIHBhcmVudGhlc2lzIG51bWJlci4gSW4gdGhlIDMyLWJpdAorbGlicmFyeSwgdGhlIHBvaW50ZXIgcG9pbnRzIHRvIDMyLWJpdCBjb2RlIHVuaXRzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggY29udGFpbnMKK3RoZSBwYXJlbnRoZXNpcyBudW1iZXIuIFRoZSByZXN0IG9mIHRoZSBlbnRyeSBpcyB0aGUgY29ycmVzcG9uZGluZyBuYW1lLCB6ZXJvCit0ZXJtaW5hdGVkLgorLlAKK1RoZSBuYW1lcyBhcmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLiBJZiAoP3wgaXMgdXNlZCB0byBjcmVhdGUgbXVsdGlwbGUgZ3JvdXBzCit3aXRoIHRoZSBzYW1lIG51bWJlciwgYXMgZGVzY3JpYmVkIGluIHRoZQorLlwiIEhUTUwgPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwjZHVwc3VicGF0dGVybm51bWJlciI+CisuXCIgPC9hPgorc2VjdGlvbiBvbiBkdXBsaWNhdGUgc3VicGF0dGVybiBudW1iZXJzCisuXCIKK2luIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGF0dGVyblxmUAorLlwiCitwYWdlLCB0aGUgZ3JvdXBzIG1heSBiZSBnaXZlbiB0aGUgc2FtZSBuYW1lLCBidXQgdGhlcmUgaXMgb25seSBvbmUgZW50cnkgaW4gdGhlCit0YWJsZS4gRGlmZmVyZW50IG5hbWVzIGZvciBncm91cHMgb2YgdGhlIHNhbWUgbnVtYmVyIGFyZSBub3QgcGVybWl0dGVkLgorLlAKK0R1cGxpY2F0ZSBuYW1lcyBmb3Igc3VicGF0dGVybnMgd2l0aCBkaWZmZXJlbnQgbnVtYmVycyBhcmUgcGVybWl0dGVkLCBidXQgb25seQoraWYgUENSRTJfRFVQTkFNRVMgaXMgc2V0LiBUaGV5IGFwcGVhciBpbiB0aGUgdGFibGUgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkKK3dlcmUgZm91bmQgaW4gdGhlIHBhdHRlcm4uIEluIHRoZSBhYnNlbmNlIG9mICg/fCB0aGlzIGlzIHRoZSBvcmRlciBvZgoraW5jcmVhc2luZyBudW1iZXI7IHdoZW4gKD98IGlzIHVzZWQgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGNhc2UgYmVjYXVzZQorbGF0ZXIgc3VicGF0dGVybnMgbWF5IGhhdmUgbG93ZXIgbnVtYmVycy4KKy5QCitBcyBhIHNpbXBsZSBleGFtcGxlIG9mIHRoZSBuYW1lL251bWJlciB0YWJsZSwgY29uc2lkZXIgdGhlIGZvbGxvd2luZyBwYXR0ZXJuCithZnRlciBjb21waWxhdGlvbiBieSB0aGUgOC1iaXQgbGlicmFyeSAoYXNzdW1lIFBDUkUyX0VYVEVOREVEIGlzIHNldCwgc28gd2hpdGUKK3NwYWNlIC0gaW5jbHVkaW5nIG5ld2xpbmVzIC0gaXMgaWdub3JlZCk6Cisuc3AKKy5cIiBKT0lOCisgICg/PGRhdGU+ICg/PHllYXI+KFxlZFxlZCk/XGVkXGVkKSAtCisgICg/PG1vbnRoPlxlZFxlZCkgLSAoPzxkYXk+XGVkXGVkKSApCisuc3AKK1RoZXJlIGFyZSBmb3VyIG5hbWVkIHN1YnBhdHRlcm5zLCBzbyB0aGUgdGFibGUgaGFzIGZvdXIgZW50cmllcywgYW5kIGVhY2ggZW50cnkKK2luIHRoZSB0YWJsZSBpcyBlaWdodCBieXRlcyBsb25nLiBUaGUgdGFibGUgaXMgYXMgZm9sbG93cywgd2l0aCBub24tcHJpbnRpbmcKK2J5dGVzIHNob3dzIGluIGhleGFkZWNpbWFsLCBhbmQgdW5kZWZpbmVkIGJ5dGVzIHNob3duIGFzID8/OgorLnNwCisgIDAwIDAxIGQgIGEgIHQgIGUgIDAwID8/CisgIDAwIDA1IGQgIGEgIHkgIDAwID8/ID8/CisgIDAwIDA0IG0gIG8gIG4gIHQgIGggIDAwCisgIDAwIDAyIHkgIGUgIGEgIHIgIDAwID8/Cisuc3AKK1doZW4gd3JpdGluZyBjb2RlIHRvIGV4dHJhY3QgZGF0YSBmcm9tIG5hbWVkIHN1YnBhdHRlcm5zIHVzaW5nIHRoZQorbmFtZS10by1udW1iZXIgbWFwLCByZW1lbWJlciB0aGF0IHRoZSBsZW5ndGggb2YgdGhlIGVudHJpZXMgaXMgbGlrZWx5IHRvIGJlCitkaWZmZXJlbnQgZm9yIGVhY2ggY29tcGlsZWQgcGF0dGVybi4KKy5zcAorICBQQ1JFMl9JTkZPX05FV0xJTkUKKy5zcAorVGhlIG91dHB1dCBpcyBhIFxmQnVpbnQzMl90XGZQIHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLnNwCisgIFBDUkUyX05FV0xJTkVfQ1IgICAgICAgQ2FycmlhZ2UgcmV0dXJuIChDUikKKyAgUENSRTJfTkVXTElORV9MRiAgICAgICBMaW5lZmVlZCAoTEYpCisgIFBDUkUyX05FV0xJTkVfQ1JMRiAgICAgQ2FycmlhZ2UgcmV0dXJuLCBsaW5lZmVlZCAoQ1JMRikKKyAgUENSRTJfTkVXTElORV9BTlkgICAgICBBbnkgVW5pY29kZSBsaW5lIGVuZGluZworICBQQ1JFMl9ORVdMSU5FX0FOWUNSTEYgIEFueSBvZiBDUiwgTEYsIG9yIENSTEYKKy5zcAorVGhpcyBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgY2hhcmFjdGVyIHNlcXVlbmNlIHRoYXQgd2lsbCBiZSByZWNvZ25pemVkIGFzCittZWFuaW5nICJuZXdsaW5lIiB3aGlsZSBtYXRjaGluZy4KKy5zcAorICBQQ1JFMl9JTkZPX1JFQ1VSU0lPTkxJTUlUCisuc3AKK0lmIHRoZSBwYXR0ZXJuIHNldCBhIHJlY3Vyc2lvbiBsaW1pdCBieSBpbmNsdWRpbmcgYW4gaXRlbSBvZiB0aGUgZm9ybQorKCpMSU1JVF9SRUNVUlNJT049bm5ubikgYXQgdGhlIHN0YXJ0LCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQuIFRoZSB0aGlyZAorYXJndW1lbnQgc2hvdWxkIHBvaW50IHRvIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGhhcyBiZWVuCitzZXQsIHRoZSBjYWxsIHRvIFxmQnBjcmUyX3BhdHRlcm5faW5mbygpXGZQIHJldHVybnMgdGhlIGVycm9yIFBDUkUyX0VSUk9SX1VOU0VULgorLnNwCisgIFBDUkUyX0lORk9fU0laRQorLnNwCitSZXR1cm4gdGhlIHNpemUgb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm4gaW4gYnl0ZXMgKGZvciBhbGwgdGhyZWUgbGlicmFyaWVzKS4gVGhlCit0aGlyZCBhcmd1bWVudCBzaG91bGQgcG9pbnQgdG8gYSBcZkJzaXplX3RcZlAgdmFyaWFibGUuIFRoaXMgdmFsdWUgaW5jbHVkZXMgdGhlCitzaXplIG9mIHRoZSBnZW5lcmFsIGRhdGEgYmxvY2sgdGhhdCBwcmVjZWRlcyB0aGUgY29kZSB1bml0cyBvZiB0aGUgY29tcGlsZWQKK3BhdHRlcm4gaXRzZWxmLiBUaGUgdmFsdWUgdGhhdCBpcyB1c2VkIHdoZW4gXGZCcGNyZTJfY29tcGlsZSgpXGZQIGlzIGdldHRpbmcKK21lbW9yeSBpbiB3aGljaCB0byBwbGFjZSB0aGUgY29tcGlsZWQgcGF0dGVybiBtYXkgYmUgc2xpZ2h0bHkgbGFyZ2VyIHRoYW4gdGhlCit2YWx1ZSByZXR1cm5lZCBieSB0aGlzIG9wdGlvbiwgYmVjYXVzZSB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIGNvZGUgdGhhdAorY2FsY3VsYXRlcyB0aGUgc2l6ZSBoYXMgdG8gb3Zlci1lc3RpbWF0ZS4gUHJvY2Vzc2luZyBhIHBhdHRlcm4gd2l0aCB0aGUgSklUCitjb21waWxlciBkb2VzIG5vdCBhbHRlciB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBvcHRpb24uCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJpbmZvYWJvdXRjYWxsb3V0cyI+PC9hPgorLlNIICJJTkZPUk1BVElPTiBBQk9VVCBBIFBBVFRFUk4nUyBDQUxMT1VUUyIKKy5ycworLnNwCisubmYKKy5CIGludCBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZShjb25zdCBwY3JlMl9jb2RlICpcZkljb2RlXGZQLAorLkIgIiAgaW50ICgqXGZJY2FsbGJhY2tcZlApKHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrICosIHZvaWQgKiksIgorLkIgIiAgdm9pZCAqXGZJdXNlcl9kYXRhXGZQKTsiCisuZmkKKy5zcAorQSBzY3JpcHQgbGFuZ3VhZ2UgdGhhdCBzdXBwb3J0cyB0aGUgdXNlIG9mIHN0cmluZyBhcmd1bWVudHMgaW4gY2FsbG91dHMgbWlnaHQKK2xpa2UgdG8gc2NhbiBhbGwgdGhlIGNhbGxvdXRzIGluIGEgcGF0dGVybiBiZWZvcmUgcnVubmluZyB0aGUgbWF0Y2guIFRoaXMgY2FuCitiZSBkb25lIGJ5IGNhbGxpbmcgXGZCcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUoKVxmUC4gVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEKK3BvaW50ZXIgdG8gYSBjb21waWxlZCBwYXR0ZXJuLCB0aGUgc2Vjb25kIHBvaW50cyB0byBhIGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQKK3RoZSB0aGlyZCBpcyBhcmJpdHJhcnkgdXNlciBkYXRhLiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBldmVyeQorY2FsbG91dCBpbiB0aGUgcGF0dGVybiBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcHBlYXIuIEl0cyBmaXJzdCBhcmd1bWVudCBpcworYSBwb2ludGVyIHRvIGEgY2FsbG91dCBlbnVtZXJhdGlvbiBibG9jaywgYW5kIGl0cyBzZWNvbmQgYXJndW1lbnQgaXMgdGhlCitcZkl1c2VyX2RhdGFcZlAgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIHRvIFxmQnBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKClcZlAuIFRoZQorY29udGVudHMgb2YgdGhlIGNhbGxvdXQgZW51bWVyYXRpb24gYmxvY2sgYXJlIGRlc2NyaWJlZCBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmNhbGxvdXRcZlAKKy5cIgorZG9jdW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBnaXZlcyBmdXJ0aGVyIGRldGFpbHMgYWJvdXQgY2FsbG91dHMuCisuCisuCisuU0ggIlNFUklBTElaQVRJT04gQU5EIFBSRUNPTVBJTElORyIKKy5ycworLnNwCitJdCBpcyBwb3NzaWJsZSB0byBzYXZlIGNvbXBpbGVkIHBhdHRlcm5zIG9uIGRpc2Mgb3IgZWxzZXdoZXJlLCBhbmQgcmVsb2FkIHRoZW0KK2xhdGVyLCBzdWJqZWN0IHRvIGEgbnVtYmVyIG9mIHJlc3RyaWN0aW9ucy4gVGhlIGZ1bmN0aW9ucyB3aG9zZSBuYW1lcyBiZWdpbgord2l0aCBcZkJwY3JlMl9zZXJpYWxpemVfXGZQIGFyZSB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIFRoZXkgYXJlIGRlc2NyaWJlZCBpbgordGhlCisuXCIgSFJFRgorXGZCcGNyZTJzZXJpYWxpemVcZlAKKy5cIgorZG9jdW1lbnRhdGlvbi4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9Im1hdGNoZGF0YWJsb2NrIj48L2E+CisuU0ggIlRIRSBNQVRDSCBEQVRBIEJMT0NLIgorLnJzCisuc3AKKy5uZgorLkIgcGNyZTJfbWF0Y2hfZGF0YSAqcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUodWludDMyX3QgXGZJb3ZlY3NpemVcZlAsCisuQiAiICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKlxmSWdjb250ZXh0XGZQKTsiCisuc3AKKy5CIHBjcmUyX21hdGNoX2RhdGEgKnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybigKKy5CICIgIGNvbnN0IHBjcmUyX2NvZGUgKlxmSWNvZGVcZlAsIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqXGZJZ2NvbnRleHRcZlApOyIKKy5zcAorLkIgdm9pZCBwY3JlMl9tYXRjaF9kYXRhX2ZyZWUocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCk7CisuZmkKKy5QCitJbmZvcm1hdGlvbiBhYm91dCBhIHN1Y2Nlc3NmdWwgb3IgdW5zdWNjZXNzZnVsIG1hdGNoIGlzIHBsYWNlZCBpbiBhIG1hdGNoCitkYXRhIGJsb2NrLCB3aGljaCBpcyBhbiBvcGFxdWUgc3RydWN0dXJlIHRoYXQgaXMgYWNjZXNzZWQgYnkgZnVuY3Rpb24gY2FsbHMuIEluCitwYXJ0aWN1bGFyLCB0aGUgbWF0Y2ggZGF0YSBibG9jayBjb250YWlucyBhIHZlY3RvciBvZiBvZmZzZXRzIGludG8gdGhlIHN1YmplY3QKK3N0cmluZyB0aGF0IGRlZmluZSB0aGUgbWF0Y2hlZCBwYXJ0IG9mIHRoZSBzdWJqZWN0IGFuZCBhbnkgc3Vic3RyaW5ncyB0aGF0IHdlcmUKK2NhcHR1cmVkLiBUaGlzIGlzIGtub3cgYXMgdGhlIFxmSW92ZWN0b3JcZlAuCisuUAorQmVmb3JlIGNhbGxpbmcgXGZCcGNyZTJfbWF0Y2goKVxmUCwgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAsIG9yCitcZkJwY3JlMl9qaXRfbWF0Y2goKVxmUCB5b3UgbXVzdCBjcmVhdGUgYSBtYXRjaCBkYXRhIGJsb2NrIGJ5IGNhbGxpbmcgb25lIG9mCit0aGUgY3JlYXRpb24gZnVuY3Rpb25zIGFib3ZlLiBGb3IgXGZCcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUoKVxmUCwgdGhlIGZpcnN0Cithcmd1bWVudCBpcyB0aGUgbnVtYmVyIG9mIHBhaXJzIG9mIG9mZnNldHMgaW4gdGhlIFxmSW92ZWN0b3JcZlAuIE9uZSBwYWlyIG9mCitvZmZzZXRzIGlzIHJlcXVpcmVkIHRvIGlkZW50aWZ5IHRoZSBzdHJpbmcgdGhhdCBtYXRjaGVkIHRoZSB3aG9sZSBwYXR0ZXJuLCB3aXRoCithbm90aGVyIHBhaXIgZm9yIGVhY2ggY2FwdHVyZWQgc3Vic3RyaW5nLiBGb3IgZXhhbXBsZSwgYSB2YWx1ZSBvZiA0IGNyZWF0ZXMKK2Vub3VnaCBzcGFjZSB0byByZWNvcmQgdGhlIG1hdGNoZWQgcG9ydGlvbiBvZiB0aGUgc3ViamVjdCBwbHVzIHRocmVlIGNhcHR1cmVkCitzdWJzdHJpbmdzLiBBIG1pbmltdW0gb2YgYXQgbGVhc3QgMSBwYWlyIGlzIGltcG9zZWQgYnkKK1xmQnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKClcZlAsIHNvIGl0IGlzIGFsd2F5cyBwb3NzaWJsZSB0byByZXR1cm4gdGhlIG92ZXJhbGwKK21hdGNoZWQgc3RyaW5nLgorLlAKK1RoZSBzZWNvbmQgYXJndW1lbnQgb2YgXGZCcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUoKVxmUCBpcyBhIHBvaW50ZXIgdG8gYQorZ2VuZXJhbCBjb250ZXh0LCB3aGljaCBjYW4gc3BlY2lmeSBjdXN0b20gbWVtb3J5IG1hbmFnZW1lbnQgZm9yIG9idGFpbmluZyB0aGUKK21lbW9yeSBmb3IgdGhlIG1hdGNoIGRhdGEgYmxvY2suIElmIHlvdSBhcmUgbm90IHVzaW5nIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudCwKK3Bhc3MgTlVMTCwgd2hpY2ggY2F1c2VzIFxmQm1hbGxvYygpXGZQIHRvIGJlIHVzZWQuCisuUAorRm9yIFxmQnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybigpXGZQLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYQorcG9pbnRlciB0byBhIGNvbXBpbGVkIHBhdHRlcm4uIFRoZSBvdmVjdG9yIGlzIGNyZWF0ZWQgdG8gYmUgZXhhY3RseSB0aGUgcmlnaHQKK3NpemUgdG8gaG9sZCBhbGwgdGhlIHN1YnN0cmluZ3MgYSBwYXR0ZXJuIG1pZ2h0IGNhcHR1cmUuIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMKK2FnYWluIGEgcG9pbnRlciB0byBhIGdlbmVyYWwgY29udGV4dCwgYnV0IGluIHRoaXMgY2FzZSBpZiBOVUxMIGlzIHBhc3NlZCwgdGhlCittZW1vcnkgaXMgb2J0YWluZWQgdXNpbmcgdGhlIHNhbWUgYWxsb2NhdG9yIHRoYXQgd2FzIHVzZWQgZm9yIHRoZSBjb21waWxlZAorcGF0dGVybiAoY3VzdG9tIG9yIGRlZmF1bHQpLgorLlAKK0EgbWF0Y2ggZGF0YSBibG9jayBjYW4gYmUgdXNlZCBtYW55IHRpbWVzLCB3aXRoIHRoZSBzYW1lIG9yIGRpZmZlcmVudCBjb21waWxlZAorcGF0dGVybnMuIFlvdSBjYW4gZXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIGEgbWF0Y2ggZGF0YSBibG9jayBhZnRlciBhIG1hdGNoCitvcGVyYXRpb24gaGFzIGZpbmlzaGVkLCB1c2luZyBmdW5jdGlvbnMgdGhhdCBhcmUgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9ucyBvbgorLlwiIEhUTUwgPGEgaHJlZj0iI21hdGNoZWRzdHJpbmdzIj4KKy5cIiA8L2E+CittYXRjaGVkIHN0cmluZ3MKKy5cIgorYW5kCisuXCIgSFRNTCA8YSBocmVmPSIjbWF0Y2hvdGhlcmRhdGEiPgorLlwiIDwvYT4KK290aGVyIG1hdGNoIGRhdGEKKy5cIgorYmVsb3cuCisuUAorV2hlbiBhIGNhbGwgb2YgXGZCcGNyZTJfbWF0Y2goKVxmUCBmYWlscywgdmFsaWQgZGF0YSBpcyBhdmFpbGFibGUgaW4gdGhlIG1hdGNoCitibG9jayBvbmx5IHdoZW4gdGhlIGVycm9yIGlzIFBDUkUyX0VSUk9SX05PTUFUQ0gsIFBDUkUyX0VSUk9SX1BBUlRJQUwsIG9yIG9uZQorb2YgdGhlIGVycm9yIGNvZGVzIGZvciBhbiBpbnZhbGlkIFVURiBzdHJpbmcuIEV4YWN0bHkgd2hhdCBpcyBhdmFpbGFibGUgZGVwZW5kcworb24gdGhlIGVycm9yLCBhbmQgaXMgZGV0YWlsZWQgYmVsb3cuCisuUAorV2hlbiBvbmUgb2YgdGhlIG1hdGNoaW5nIGZ1bmN0aW9ucyBpcyBjYWxsZWQsIHBvaW50ZXJzIHRvIHRoZSBjb21waWxlZCBwYXR0ZXJuCithbmQgdGhlIHN1YmplY3Qgc3RyaW5nIGFyZSBzZXQgaW4gdGhlIG1hdGNoIGRhdGEgYmxvY2sgc28gdGhhdCB0aGV5IGNhbiBiZQorcmVmZXJlbmNlZCBieSB0aGUgZXh0cmFjdGlvbiBmdW5jdGlvbnMuIEFmdGVyIHJ1bm5pbmcgYSBtYXRjaCwgeW91IG11c3Qgbm90CitmcmVlIGEgY29tcGlsZWQgcGF0dGVybiBvciBhIHN1YmplY3Qgc3RyaW5nIHVudGlsIGFmdGVyIGFsbCBvcGVyYXRpb25zIG9uIHRoZQorbWF0Y2ggZGF0YSBibG9jayAoZm9yIHRoYXQgbWF0Y2gpIGhhdmUgdGFrZW4gcGxhY2UuCisuUAorV2hlbiBhIG1hdGNoIGRhdGEgYmxvY2sgaXRzZWxmIGlzIG5vIGxvbmdlciBuZWVkZWQsIGl0IHNob3VsZCBiZSBmcmVlZCBieQorY2FsbGluZyBcZkJwY3JlMl9tYXRjaF9kYXRhX2ZyZWUoKVxmUC4KKy4KKy4KKy5TSCAiTUFUQ0hJTkcgQSBQQVRURVJOOiBUSEUgVFJBRElUSU9OQUwgRlVOQ1RJT04iCisucnMKKy5zcAorLm5mCisuQiBpbnQgcGNyZTJfbWF0Y2goY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCwgUENSRTJfU1BUUiBcZklzdWJqZWN0XGZQLAorLkIgIiAgUENSRTJfU0laRSBcZklsZW5ndGhcZlAsIFBDUkUyX1NJWkUgXGZJc3RhcnRvZmZzZXRcZlAsIgorLkIgIiAgdWludDMyX3QgXGZJb3B0aW9uc1xmUCwgcGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCwiCisuQiAiICBwY3JlMl9tYXRjaF9jb250ZXh0ICpcZkltY29udGV4dFxmUCk7IgorLmZpCisuUAorVGhlIGZ1bmN0aW9uIFxmQnBjcmUyX21hdGNoKClcZlAgaXMgY2FsbGVkIHRvIG1hdGNoIGEgc3ViamVjdCBzdHJpbmcgYWdhaW5zdCBhCitjb21waWxlZCBwYXR0ZXJuLCB3aGljaCBpcyBwYXNzZWQgaW4gdGhlIFxmSWNvZGVcZlAgYXJndW1lbnQuIFlvdSBjYW4gY2FsbAorXGZCcGNyZTJfbWF0Y2goKVxmUCB3aXRoIHRoZSBzYW1lIFxmSWNvZGVcZlAgYXJndW1lbnQgYXMgbWFueSB0aW1lcyBhcyB5b3UKK2xpa2UsIGluIG9yZGVyIHRvIGZpbmQgbXVsdGlwbGUgbWF0Y2hlcyBpbiB0aGUgc3ViamVjdCBzdHJpbmcgb3IgdG8gbWF0Y2gKK2RpZmZlcmVudCBzdWJqZWN0IHN0cmluZ3Mgd2l0aCB0aGUgc2FtZSBwYXR0ZXJuLgorLlAKK1RoaXMgZnVuY3Rpb24gaXMgdGhlIG1haW4gbWF0Y2hpbmcgZmFjaWxpdHkgb2YgdGhlIGxpYnJhcnksIGFuZCBpdCBvcGVyYXRlcyBpbgorYSBQZXJsLWxpa2UgbWFubmVyLiBGb3Igc3BlY2lhbGlzdCB1c2UgdGhlcmUgaXMgYWxzbyBhbiBhbHRlcm5hdGl2ZSBtYXRjaGluZworZnVuY3Rpb24sIHdoaWNoIGlzIGRlc2NyaWJlZAorLlwiIEhUTUwgPGEgaHJlZj0iI2RmYW1hdGNoIj4KKy5cIiA8L2E+CitiZWxvdworLlwiCitpbiB0aGUgc2VjdGlvbiBhYm91dCB0aGUgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgZnVuY3Rpb24uCisuUAorSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIGNhbGwgdG8gXGZCcGNyZTJfbWF0Y2goKVxmUDoKKy5zcAorICBwY3JlMl9tYXRjaF9kYXRhICptZCA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKDQsIE5VTEwpOworICBpbnQgcmMgPSBwY3JlMl9tYXRjaCgKKyAgICByZSwgICAgICAgICAgICAgLyogcmVzdWx0IG9mIHBjcmUyX2NvbXBpbGUoKSAqLworICAgICJzb21lIHN0cmluZyIsICAvKiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgICAxMSwgICAgICAgICAgICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgLyogc3RhcnQgYXQgb2Zmc2V0IDAgaW4gdGhlIHN1YmplY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgLyogZGVmYXVsdCBvcHRpb25zICovCisgICAgbWF0Y2hfZGF0YSwgICAgIC8qIHRoZSBtYXRjaCBkYXRhIGJsb2NrICovCisgICAgTlVMTCk7ICAgICAgICAgIC8qIGEgbWF0Y2ggY29udGV4dDsgTlVMTCBtZWFucyB1c2UgZGVmYXVsdHMgKi8KKy5zcAorSWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIHplcm8tdGVybWluYXRlZCwgdGhlIGxlbmd0aCBjYW4gYmUgZ2l2ZW4gYXMKK1BDUkUyX1pFUk9fVEVSTUlOQVRFRC4gQSBtYXRjaCBjb250ZXh0IG11c3QgYmUgcHJvdmlkZWQgaWYgY2VydGFpbiBsZXNzIGNvbW1vbgorbWF0Y2hpbmcgcGFyYW1ldGVycyBhcmUgdG8gYmUgY2hhbmdlZC4gRm9yIGRldGFpbHMsIHNlZSB0aGUgc2VjdGlvbiBvbgorLlwiIEhUTUwgPGEgaHJlZj0iI21hdGNoY29udGV4dCI+CisuXCIgPC9hPgordGhlIG1hdGNoIGNvbnRleHQKKy5cIgorYWJvdmUuCisuCisuCisuU1MgIlRoZSBzdHJpbmcgdG8gYmUgbWF0Y2hlZCBieSBcZkJwY3JlMl9tYXRjaCgpXGZQIgorLnJzCisuc3AKK1RoZSBzdWJqZWN0IHN0cmluZyBpcyBwYXNzZWQgdG8gXGZCcGNyZTJfbWF0Y2goKVxmUCBhcyBhIHBvaW50ZXIgaW4KK1xmSXN1YmplY3RcZlAsIGEgbGVuZ3RoIGluIFxmSWxlbmd0aFxmUCwgYW5kIGEgc3RhcnRpbmcgb2Zmc2V0IGluCitcZklzdGFydG9mZnNldFxmUC4gVGhlIGxlbmd0aCBhbmQgb2Zmc2V0IGFyZSBpbiBjb2RlIHVuaXRzLCBub3QgY2hhcmFjdGVycy4KK1RoYXQgaXMsIHRoZXkgYXJlIGluIGJ5dGVzIGZvciB0aGUgOC1iaXQgbGlicmFyeSwgMTYtYml0IGNvZGUgdW5pdHMgZm9yIHRoZQorMTYtYml0IGxpYnJhcnksIGFuZCAzMi1iaXQgY29kZSB1bml0cyBmb3IgdGhlIDMyLWJpdCBsaWJyYXJ5LCB3aGV0aGVyIG9yIG5vdAorVVRGIHByb2Nlc3NpbmcgaXMgZW5hYmxlZC4KKy5QCitJZiBcZklzdGFydG9mZnNldFxmUCBpcyBncmVhdGVyIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCwKK1xmQnBjcmUyX21hdGNoKClcZlAgcmV0dXJucyBQQ1JFMl9FUlJPUl9CQURPRkZTRVQuIFdoZW4gdGhlIHN0YXJ0aW5nIG9mZnNldCBpcworemVybywgdGhlIHNlYXJjaCBmb3IgYSBtYXRjaCBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3ViamVjdCwgYW5kIHRoaXMKK2lzIGJ5IGZhciB0aGUgbW9zdCBjb21tb24gY2FzZS4gSW4gVVRGLTggb3IgVVRGLTE2IG1vZGUsIHRoZSBzdGFydGluZyBvZmZzZXQKK211c3QgcG9pbnQgdG8gdGhlIHN0YXJ0IG9mIGEgY2hhcmFjdGVyLCBvciB0byB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IChpbiBVVEYtMzIKK21vZGUsIG9uZSBjb2RlIHVuaXQgZXF1YWxzIG9uZSBjaGFyYWN0ZXIsIHNvIGFsbCBvZmZzZXRzIGFyZSB2YWxpZCkuIExpa2UgdGhlCitwYXR0ZXJuIHN0cmluZywgdGhlIHN1YmplY3QgbWF5IGNvbnRhaW4gYmluYXJ5IHplcm9lcy4KKy5QCitBIG5vbi16ZXJvIHN0YXJ0aW5nIG9mZnNldCBpcyB1c2VmdWwgd2hlbiBzZWFyY2hpbmcgZm9yIGFub3RoZXIgbWF0Y2ggaW4gdGhlCitzYW1lIHN1YmplY3QgYnkgY2FsbGluZyBcZkJwY3JlMl9tYXRjaCgpXGZQIGFnYWluIGFmdGVyIGEgcHJldmlvdXMgc3VjY2Vzcy4KK1NldHRpbmcgXGZJc3RhcnRvZmZzZXRcZlAgZGlmZmVycyBmcm9tIHBhc3Npbmcgb3ZlciBhIHNob3J0ZW5lZCBzdHJpbmcgYW5kCitzZXR0aW5nIFBDUkUyX05PVEJPTCBpbiB0aGUgY2FzZSBvZiBhIHBhdHRlcm4gdGhhdCBiZWdpbnMgd2l0aCBhbnkga2luZCBvZgorbG9va2JlaGluZC4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoZSBwYXR0ZXJuCisuc3AKKyAgXGVCaXNzXGVCCisuc3AKK3doaWNoIGZpbmRzIG9jY3VycmVuY2VzIG9mICJpc3MiIGluIHRoZSBtaWRkbGUgb2Ygd29yZHMuIChcZUIgbWF0Y2hlcyBvbmx5IGlmCit0aGUgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgc3ViamVjdCBpcyBub3QgYSB3b3JkIGJvdW5kYXJ5LikgV2hlbiBhcHBsaWVkIHRvCit0aGUgc3RyaW5nICJNaXNzaXNzaXBpIiB0aGUgZmlyc3QgY2FsbCB0byBcZkJwY3JlMl9tYXRjaCgpXGZQIGZpbmRzIHRoZSBmaXJzdAorb2NjdXJyZW5jZS4gSWYgXGZCcGNyZTJfbWF0Y2goKVxmUCBpcyBjYWxsZWQgYWdhaW4gd2l0aCBqdXN0IHRoZSByZW1haW5kZXIgb2YKK3RoZSBzdWJqZWN0LCBuYW1lbHkgImlzc2lwaSIsIGl0IGRvZXMgbm90IG1hdGNoLCBiZWNhdXNlIFxlQiBpcyBhbHdheXMgZmFsc2UgYXQKK3RoZSBzdGFydCBvZiB0aGUgc3ViamVjdCwgd2hpY2ggaXMgZGVlbWVkIHRvIGJlIGEgd29yZCBib3VuZGFyeS4gSG93ZXZlciwgaWYKK1xmQnBjcmUyX21hdGNoKClcZlAgaXMgcGFzc2VkIHRoZSBlbnRpcmUgc3RyaW5nIGFnYWluLCBidXQgd2l0aAorXGZJc3RhcnRvZmZzZXRcZlAgc2V0IHRvIDQsIGl0IGZpbmRzIHRoZSBzZWNvbmQgb2NjdXJyZW5jZSBvZiAiaXNzIiBiZWNhdXNlIGl0CitpcyBhYmxlIHRvIGxvb2sgYmVoaW5kIHRoZSBzdGFydGluZyBwb2ludCB0byBkaXNjb3ZlciB0aGF0IGl0IGlzIHByZWNlZGVkIGJ5IGEKK2xldHRlci4KKy5QCitGaW5kaW5nIGFsbCB0aGUgbWF0Y2hlcyBpbiBhIHN1YmplY3QgaXMgdHJpY2t5IHdoZW4gdGhlIHBhdHRlcm4gY2FuIG1hdGNoIGFuCitlbXB0eSBzdHJpbmcuIEl0IGlzIHBvc3NpYmxlIHRvIGVtdWxhdGUgUGVybCdzIC9nIGJlaGF2aW91ciBieSBmaXJzdCB0cnlpbmcgdGhlCittYXRjaCBhZ2FpbiBhdCB0aGUgc2FtZSBvZmZzZXQsIHdpdGggdGhlIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQgYW5kCitQQ1JFMl9BTkNIT1JFRCBvcHRpb25zLCBhbmQgdGhlbiBpZiB0aGF0IGZhaWxzLCBhZHZhbmNpbmcgdGhlIHN0YXJ0aW5nIG9mZnNldAorYW5kIHRyeWluZyBhbiBvcmRpbmFyeSBtYXRjaCBhZ2Fpbi4gVGhlcmUgaXMgc29tZSBjb2RlIHRoYXQgZGVtb25zdHJhdGVzIGhvdyB0bworZG8gdGhpcyBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmRlbW9cZlAKKy5cIgorc2FtcGxlIHByb2dyYW0uIEluIHRoZSBtb3N0IGdlbmVyYWwgY2FzZSwgeW91IGhhdmUgdG8gY2hlY2sgdG8gc2VlIGlmIHRoZQorbmV3bGluZSBjb252ZW50aW9uIHJlY29nbml6ZXMgQ1JMRiBhcyBhIG5ld2xpbmUsIGFuZCBpZiBzbywgYW5kIHRoZSBjdXJyZW50CitjaGFyYWN0ZXIgaXMgQ1IgZm9sbG93ZWQgYnkgTEYsIGFkdmFuY2UgdGhlIHN0YXJ0aW5nIG9mZnNldCBieSB0d28gY2hhcmFjdGVycworaW5zdGVhZCBvZiBvbmUuCisuUAorSWYgYSBub24temVybyBzdGFydGluZyBvZmZzZXQgaXMgcGFzc2VkIHdoZW4gdGhlIHBhdHRlcm4gaXMgYW5jaG9yZWQsIG9uZQorYXR0ZW1wdCB0byBtYXRjaCBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGlzIG1hZGUuIFRoaXMgY2FuIG9ubHkgc3VjY2VlZCBpZiB0aGUKK3BhdHRlcm4gZG9lcyBub3QgcmVxdWlyZSB0aGUgbWF0Y2ggdG8gYmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0LgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0ibWF0Y2hvcHRpb25zIj48L2E+CisuU1MgIk9wdGlvbiBiaXRzIGZvciBcZkJwY3JlMl9tYXRjaCgpXGZQIgorLnJzCisuc3AKK1RoZSB1bnVzZWQgYml0cyBvZiB0aGUgXGZJb3B0aW9uc1xmUCBhcmd1bWVudCBmb3IgXGZCcGNyZTJfbWF0Y2goKVxmUCBtdXN0IGJlCit6ZXJvLiBUaGUgb25seSBiaXRzIHRoYXQgbWF5IGJlIHNldCBhcmUgUENSRTJfQU5DSE9SRUQsIFBDUkUyX05PVEJPTCwKK1BDUkUyX05PVEVPTCwgUENSRTJfTk9URU1QVFksIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQsIFBDUkUyX05PX1VURl9DSEVDSywKK1BDUkUyX1BBUlRJQUxfSEFSRCwgYW5kIFBDUkUyX1BBUlRJQUxfU09GVC4gVGhlaXIgYWN0aW9uIGlzIGRlc2NyaWJlZCBiZWxvdy4KKy5QCitTZXR0aW5nIFBDUkUyX0FOQ0hPUkVEIGF0IG1hdGNoIHRpbWUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUganVzdC1pbi10aW1lIChKSVQpCitjb21waWxlci4gSWYgaXQgaXMgc2V0LCBKSVQgbWF0Y2hpbmcgaXMgZGlzYWJsZWQgYW5kIHRoZSBub3JtYWwgaW50ZXJwcmV0aXZlCitjb2RlIGluIFxmQnBjcmUyX21hdGNoKClcZlAgaXMgcnVuLiBUaGUgcmVtYWluaW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBmb3IgSklUCittYXRjaGluZy4KKy5zcAorICBQQ1JFMl9BTkNIT1JFRAorLnNwCitUaGUgUENSRTJfQU5DSE9SRUQgb3B0aW9uIGxpbWl0cyBcZkJwY3JlMl9tYXRjaCgpXGZQIHRvIG1hdGNoaW5nIGF0IHRoZSBmaXJzdAorbWF0Y2hpbmcgcG9zaXRpb24uIElmIGEgcGF0dGVybiB3YXMgY29tcGlsZWQgd2l0aCBQQ1JFMl9BTkNIT1JFRCwgb3IgdHVybmVkIG91dAordG8gYmUgYW5jaG9yZWQgYnkgdmlydHVlIG9mIGl0cyBjb250ZW50cywgaXQgY2Fubm90IGJlIG1hZGUgdW5hY2hvcmVkIGF0CittYXRjaGluZyB0aW1lLiBOb3RlIHRoYXQgc2V0dGluZyB0aGUgb3B0aW9uIGF0IG1hdGNoIHRpbWUgZGlzYWJsZXMgSklUCittYXRjaGluZy4KKy5zcAorICBQQ1JFMl9OT1RCT0wKKy5zcAorVGhpcyBvcHRpb24gc3BlY2lmaWVzIHRoYXQgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzdWJqZWN0IHN0cmluZyBpcyBub3QgdGhlCitiZWdpbm5pbmcgb2YgYSBsaW5lLCBzbyB0aGUgY2lyY3VtZmxleCBtZXRhY2hhcmFjdGVyIHNob3VsZCBub3QgbWF0Y2ggYmVmb3JlCitpdC4gU2V0dGluZyB0aGlzIHdpdGhvdXQgaGF2aW5nIHNldCBQQ1JFMl9NVUxUSUxJTkUgYXQgY29tcGlsZSB0aW1lIGNhdXNlcworY2lyY3VtZmxleCBuZXZlciB0byBtYXRjaC4gVGhpcyBvcHRpb24gYWZmZWN0cyBvbmx5IHRoZSBiZWhhdmlvdXIgb2YgdGhlCitjaXJjdW1mbGV4IG1ldGFjaGFyYWN0ZXIuIEl0IGRvZXMgbm90IGFmZmVjdCBcZUEuCisuc3AKKyAgUENSRTJfTk9URU9MCisuc3AKK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIG5vdCB0aGUgZW5kIG9mIGEKK2xpbmUsIHNvIHRoZSBkb2xsYXIgbWV0YWNoYXJhY3RlciBzaG91bGQgbm90IG1hdGNoIGl0IG5vciAoZXhjZXB0IGluIG11bHRpbGluZQorbW9kZSkgYSBuZXdsaW5lIGltbWVkaWF0ZWx5IGJlZm9yZSBpdC4gU2V0dGluZyB0aGlzIHdpdGhvdXQgaGF2aW5nIHNldAorUENSRTJfTVVMVElMSU5FIGF0IGNvbXBpbGUgdGltZSBjYXVzZXMgZG9sbGFyIG5ldmVyIHRvIG1hdGNoLiBUaGlzIG9wdGlvbgorYWZmZWN0cyBvbmx5IHRoZSBiZWhhdmlvdXIgb2YgdGhlIGRvbGxhciBtZXRhY2hhcmFjdGVyLiBJdCBkb2VzIG5vdCBhZmZlY3QgXGVaCitvciBcZXouCisuc3AKKyAgUENSRTJfTk9URU1QVFkKKy5zcAorQW4gZW1wdHkgc3RyaW5nIGlzIG5vdCBjb25zaWRlcmVkIHRvIGJlIGEgdmFsaWQgbWF0Y2ggaWYgdGhpcyBvcHRpb24gaXMgc2V0LiBJZgordGhlcmUgYXJlIGFsdGVybmF0aXZlcyBpbiB0aGUgcGF0dGVybiwgdGhleSBhcmUgdHJpZWQuIElmIGFsbCB0aGUgYWx0ZXJuYXRpdmVzCittYXRjaCB0aGUgZW1wdHkgc3RyaW5nLCB0aGUgZW50aXJlIG1hdGNoIGZhaWxzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4KKy5zcAorICBhP2I/Cisuc3AKK2lzIGFwcGxpZWQgdG8gYSBzdHJpbmcgbm90IGJlZ2lubmluZyB3aXRoICJhIiBvciAiYiIsIGl0IG1hdGNoZXMgYW4gZW1wdHkKK3N0cmluZyBhdCB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3QuIFdpdGggUENSRTJfTk9URU1QVFkgc2V0LCB0aGlzIG1hdGNoIGlzIG5vdAordmFsaWQsIHNvIFxmQnBjcmUyX21hdGNoKClcZlAgc2VhcmNoZXMgZnVydGhlciBpbnRvIHRoZSBzdHJpbmcgZm9yIG9jY3VycmVuY2VzCitvZiAiYSIgb3IgImIiLgorLnNwCisgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQKKy5zcAorVGhpcyBpcyBsaWtlIFBDUkUyX05PVEVNUFRZLCBleGNlcHQgdGhhdCBpdCBsb2NrcyBvdXQgYW4gZW1wdHkgc3RyaW5nIG1hdGNoCitvbmx5IGF0IHRoZSBmaXJzdCBtYXRjaGluZyBwb3NpdGlvbiwgdGhhdCBpcywgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0IHBsdXMKK3RoZSBzdGFydGluZyBvZmZzZXQuIEFuIGVtcHR5IHN0cmluZyBtYXRjaCBsYXRlciBpbiB0aGUgc3ViamVjdCBpcyBwZXJtaXR0ZWQuCitJZiB0aGUgcGF0dGVybiBpcyBhbmNob3JlZCwgc3VjaCBhIG1hdGNoIGNhbiBvY2N1ciBvbmx5IGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zCitcZUsuCisuc3AKKyAgUENSRTJfTk9fVVRGX0NIRUNLCisuc3AKK1doZW4gUENSRTJfVVRGIGlzIHNldCBhdCBjb21waWxlIHRpbWUsIHRoZSB2YWxpZGl0eSBvZiB0aGUgc3ViamVjdCBhcyBhIFVURgorc3RyaW5nIGlzIGNoZWNrZWQgYnkgZGVmYXVsdCB3aGVuIFxmQnBjcmUyX21hdGNoKClcZlAgaXMgc3Vic2VxdWVudGx5IGNhbGxlZC4KK0lmIGEgbm9uLXplcm8gc3RhcnRpbmcgb2Zmc2V0IGlzIGdpdmVuLCB0aGUgY2hlY2sgaXMgYXBwbGllZCBvbmx5IHRvIHRoYXQgcGFydAorb2YgdGhlIHN1YmplY3QgdGhhdCBjb3VsZCBiZSBpbnNwZWN0ZWQgZHVyaW5nIG1hdGNoaW5nLCBhbmQgdGhlcmUgaXMgYSBjaGVjawordGhhdCB0aGUgc3RhcnRpbmcgb2Zmc2V0IHBvaW50cyB0byB0aGUgZmlyc3QgY29kZSB1bml0IG9mIGEgY2hhcmFjdGVyIG9yIHRvIHRoZQorZW5kIG9mIHRoZSBzdWJqZWN0LiBJZiB0aGVyZSBhcmUgbm8gbG9va2JlaGluZCBhc3NlcnRpb25zIGluIHRoZSBwYXR0ZXJuLCB0aGUKK2NoZWNrIHN0YXJ0cyBhdCB0aGUgc3RhcnRpbmcgb2Zmc2V0LiBPdGhlcndpc2UsIGl0IHN0YXJ0cyBhdCB0aGUgbGVuZ3RoIG9mIHRoZQorbG9uZ2VzdCBsb29rYmVoaW5kIGJlZm9yZSB0aGUgc3RhcnRpbmcgb2Zmc2V0LCBvciBhdCB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3QKK2lmIHRoZXJlIGFyZSBub3QgdGhhdCBtYW55IGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBzdGFydGluZyBvZmZzZXQuIE5vdGUgdGhhdCB0aGUKK3NlcXVlbmNlcyBcZWIgYW5kIFxlQiBhcmUgb25lLWNoYXJhY3RlciBsb29rYmVoaW5kcy4KKy5QCitUaGUgY2hlY2sgaXMgY2FycmllZCBvdXQgYmVmb3JlIGFueSBvdGhlciBwcm9jZXNzaW5nIHRha2VzIHBsYWNlLCBhbmQgYQorbmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZCBpZiB0aGUgY2hlY2sgZmFpbHMuIFRoZXJlIGFyZSBzZXZlcmFsIFVURiBlcnJvcgorY29kZXMgZm9yIGVhY2ggY29kZSB1bml0IHdpZHRoLCBjb3JyZXNwb25kaW5nIHRvIGRpZmZlcmVudCBwcm9ibGVtcyB3aXRoIHRoZQorY29kZSB1bml0IHNlcXVlbmNlLiBUaGVyZSBhcmUgZGlzY3Vzc2lvbnMgYWJvdXQgdGhlIHZhbGlkaXR5IG9mCisuXCIgSFRNTCA8YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCN1dGY4c3RyaW5ncyI+CisuXCIgPC9hPgorVVRGLTggc3RyaW5ncywKKy5cIgorLlwiIEhUTUwgPGEgaHJlZj0icGNyZTJ1bmljb2RlLmh0bWwjdXRmMTZzdHJpbmdzIj4KKy5cIiA8L2E+CitVVEYtMTYgc3RyaW5ncywKKy5cIgorYW5kCisuXCIgSFRNTCA8YSBocmVmPSJwY3JlMnVuaWNvZGUuaHRtbCN1dGYzMnN0cmluZ3MiPgorLlwiIDwvYT4KK1VURi0zMiBzdHJpbmdzCisuXCIKK2luIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUydW5pY29kZVxmUAorLlwiCitwYWdlLgorLlAKK0lmIHlvdSBrbm93IHRoYXQgeW91ciBzdWJqZWN0IGlzIHZhbGlkLCBhbmQgeW91IHdhbnQgdG8gc2tpcCB0aGVzZSBjaGVja3MgZm9yCitwZXJmb3JtYW5jZSByZWFzb25zLCB5b3UgY2FuIHNldCB0aGUgUENSRTJfTk9fVVRGX0NIRUNLIG9wdGlvbiB3aGVuIGNhbGxpbmcKK1xmQnBjcmUyX21hdGNoKClcZlAuIFlvdSBtaWdodCB3YW50IHRvIGRvIHRoaXMgZm9yIHRoZSBzZWNvbmQgYW5kIHN1YnNlcXVlbnQKK2NhbGxzIHRvIFxmQnBjcmUyX21hdGNoKClcZlAgaWYgeW91IGFyZSBtYWtpbmcgcmVwZWF0ZWQgY2FsbHMgdG8gZmluZCBhbGwgdGhlCittYXRjaGVzIGluIGEgc2luZ2xlIHN1YmplY3Qgc3RyaW5nLgorLlAKK05PVEU6IFdoZW4gUENSRTJfTk9fVVRGX0NIRUNLIGlzIHNldCwgdGhlIGVmZmVjdCBvZiBwYXNzaW5nIGFuIGludmFsaWQgc3RyaW5nCithcyBhIHN1YmplY3QsIG9yIGFuIGludmFsaWQgdmFsdWUgb2YgXGZJc3RhcnRvZmZzZXRcZlAsIGlzIHVuZGVmaW5lZC4gWW91cgorcHJvZ3JhbSBtYXkgY3Jhc2ggb3IgbG9vcCBpbmRlZmluaXRlbHkuCisuc3AKKyAgUENSRTJfUEFSVElBTF9IQVJECisgIFBDUkUyX1BBUlRJQUxfU09GVAorLnNwCitUaGVzZSBvcHRpb25zIHR1cm4gb24gdGhlIHBhcnRpYWwgbWF0Y2hpbmcgZmVhdHVyZS4gQSBwYXJ0aWFsIG1hdGNoIG9jY3VycyBpZgordGhlIGVuZCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgcmVhY2hlZCBzdWNjZXNzZnVsbHksIGJ1dCB0aGVyZSBhcmUgbm90IGVub3VnaAorc3ViamVjdCBjaGFyYWN0ZXJzIHRvIGNvbXBsZXRlIHRoZSBtYXRjaC4gSWYgdGhpcyBoYXBwZW5zIHdoZW4KK1BDUkUyX1BBUlRJQUxfU09GVCAoYnV0IG5vdCBQQ1JFMl9QQVJUSUFMX0hBUkQpIGlzIHNldCwgbWF0Y2hpbmcgY29udGludWVzIGJ5Cit0ZXN0aW5nIGFueSByZW1haW5pbmcgYWx0ZXJuYXRpdmVzLiBPbmx5IGlmIG5vIGNvbXBsZXRlIG1hdGNoIGNhbiBiZSBmb3VuZCBpcworUENSRTJfRVJST1JfUEFSVElBTCByZXR1cm5lZCBpbnN0ZWFkIG9mIFBDUkUyX0VSUk9SX05PTUFUQ0guIEluIG90aGVyIHdvcmRzLAorUENSRTJfUEFSVElBTF9TT0ZUIHNwZWNpZmllcyB0aGF0IHRoZSBjYWxsZXIgaXMgcHJlcGFyZWQgdG8gaGFuZGxlIGEgcGFydGlhbAorbWF0Y2gsIGJ1dCBvbmx5IGlmIG5vIGNvbXBsZXRlIG1hdGNoIGNhbiBiZSBmb3VuZC4KKy5QCitJZiBQQ1JFMl9QQVJUSUFMX0hBUkQgaXMgc2V0LCBpdCBvdmVycmlkZXMgUENSRTJfUEFSVElBTF9TT0ZULiBJbiB0aGlzIGNhc2UsIGlmCithIHBhcnRpYWwgbWF0Y2ggaXMgZm91bmQsIFxmQnBjcmUyX21hdGNoKClcZlAgaW1tZWRpYXRlbHkgcmV0dXJucworUENSRTJfRVJST1JfUEFSVElBTCwgd2l0aG91dCBjb25zaWRlcmluZyBhbnkgb3RoZXIgYWx0ZXJuYXRpdmVzLiBJbiBvdGhlcgord29yZHMsIHdoZW4gUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldCwgYSBwYXJ0aWFsIG1hdGNoIGlzIGNvbnNpZGVyZWQgdG8gYmUgbW9yZQoraW1wb3J0YW50IHRoYXQgYW4gYWx0ZXJuYXRpdmUgY29tcGxldGUgbWF0Y2guCisuUAorVGhlcmUgaXMgYSBtb3JlIGRldGFpbGVkIGRpc2N1c3Npb24gb2YgcGFydGlhbCBhbmQgbXVsdGktc2VnbWVudCBtYXRjaGluZywgd2l0aAorZXhhbXBsZXMsIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGFydGlhbFxmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLgorLgorLgorLlNIICJORVdMSU5FIEhBTkRMSU5HIFdIRU4gTUFUQ0hJTkciCisucnMKKy5zcAorV2hlbiBQQ1JFMiBpcyBidWlsdCwgYSBkZWZhdWx0IG5ld2xpbmUgY29udmVudGlvbiBpcyBzZXQ7IHRoaXMgaXMgdXN1YWxseSB0aGUKK3N0YW5kYXJkIGNvbnZlbnRpb24gZm9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBUaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBpbgorYQorLlwiIEhUTUwgPGEgaHJlZj0iI2NvbXBpbGVjb250ZXh0Ij4KKy5cIiA8L2E+Citjb21waWxlIGNvbnRleHQKKy5cIgorYnkgY2FsbGluZyBcZkJwY3JlMl9zZXRfbmV3bGluZSgpXGZQLiBJdCBjYW4gYWxzbyBiZSBvdmVycmlkZGVuIGJ5IHN0YXJ0aW5nIGEKK3BhdHRlcm4gc3RyaW5nIHdpdGgsIGZvciBleGFtcGxlLCAoKkNSTEYpLCBhcyBkZXNjcmliZWQgaW4gdGhlCisuXCIgSFRNTCA8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCNuZXdsaW5lcyI+CisuXCIgPC9hPgorc2VjdGlvbiBvbiBuZXdsaW5lIGNvbnZlbnRpb25zCisuXCIKK2luIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGF0dGVyblxmUAorLlwiCitwYWdlLiBEdXJpbmcgbWF0Y2hpbmcsIHRoZSBuZXdsaW5lIGNob2ljZSBhZmZlY3RzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIGRvdCwKK2NpcmN1bWZsZXgsIGFuZCBkb2xsYXIgbWV0YWNoYXJhY3RlcnMuIEl0IG1heSBhbHNvIGFsdGVyIHRoZSB3YXkgdGhlIG1hdGNoCitzdGFydGluZyBwb3NpdGlvbiBpcyBhZHZhbmNlZCBhZnRlciBhIG1hdGNoIGZhaWx1cmUgZm9yIGFuIHVuYW5jaG9yZWQgcGF0dGVybi4KKy5QCitXaGVuIFBDUkUyX05FV0xJTkVfQ1JMRiwgUENSRTJfTkVXTElORV9BTllDUkxGLCBvciBQQ1JFMl9ORVdMSU5FX0FOWSBpcyBzZXQgYXMKK3RoZSBuZXdsaW5lIGNvbnZlbnRpb24sIGFuZCBhIG1hdGNoIGF0dGVtcHQgZm9yIGFuIHVuYW5jaG9yZWQgcGF0dGVybiBmYWlscword2hlbiB0aGUgY3VycmVudCBzdGFydGluZyBwb3NpdGlvbiBpcyBhdCBhIENSTEYgc2VxdWVuY2UsIGFuZCB0aGUgcGF0dGVybgorY29udGFpbnMgbm8gZXhwbGljaXQgbWF0Y2hlcyBmb3IgQ1Igb3IgTEYgY2hhcmFjdGVycywgdGhlIG1hdGNoIHBvc2l0aW9uIGlzCithZHZhbmNlZCBieSB0d28gY2hhcmFjdGVycyBpbnN0ZWFkIG9mIG9uZSwgaW4gb3RoZXIgd29yZHMsIHRvIGFmdGVyIHRoZSBDUkxGLgorLlAKK1RoZSBhYm92ZSBydWxlIGlzIGEgY29tcHJvbWlzZSB0aGF0IG1ha2VzIHRoZSBtb3N0IGNvbW1vbiBjYXNlcyB3b3JrIGFzCitleHBlY3RlZC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwYXR0ZXJuIGlzIC4rQSAoYW5kIHRoZSBQQ1JFMl9ET1RBTEwgb3B0aW9uIGlzCitub3Qgc2V0KSwgaXQgZG9lcyBub3QgbWF0Y2ggdGhlIHN0cmluZyAiXGVyXGVuQSIgYmVjYXVzZSwgYWZ0ZXIgZmFpbGluZyBhdCB0aGUKK3N0YXJ0LCBpdCBza2lwcyBib3RoIHRoZSBDUiBhbmQgdGhlIExGIGJlZm9yZSByZXRyeWluZy4gSG93ZXZlciwgdGhlIHBhdHRlcm4KK1tcZXJcZW5dQSBkb2VzIG1hdGNoIHRoYXQgc3RyaW5nLCBiZWNhdXNlIGl0IGNvbnRhaW5zIGFuIGV4cGxpY2l0IENSIG9yIExGCityZWZlcmVuY2UsIGFuZCBzbyBhZHZhbmNlcyBvbmx5IGJ5IG9uZSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGZpcnN0IGZhaWx1cmUuCisuUAorQW4gZXhwbGljaXQgbWF0Y2ggZm9yIENSIG9mIExGIGlzIGVpdGhlciBhIGxpdGVyYWwgYXBwZWFyYW5jZSBvZiBvbmUgb2YgdGhvc2UKK2NoYXJhY3RlcnMgaW4gdGhlIHBhdHRlcm4sIG9yIG9uZSBvZiB0aGUgXGVyIG9yIFxlbiBlc2NhcGUgc2VxdWVuY2VzLiBJbXBsaWNpdAorbWF0Y2hlcyBzdWNoIGFzIFteWF0gZG8gbm90IGNvdW50LCBub3IgZG9lcyBcZXMsIGV2ZW4gdGhvdWdoIGl0IGluY2x1ZGVzIENSIGFuZAorTEYgaW4gdGhlIGNoYXJhY3RlcnMgdGhhdCBpdCBtYXRjaGVzLgorLlAKK05vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIGFub21hbG91cyBlZmZlY3RzIG1heSBzdGlsbCBvY2N1ciB3aGVuIENSTEYgaXMgYQordmFsaWQgbmV3bGluZSBzZXF1ZW5jZSBhbmQgZXhwbGljaXQgXGVyIG9yIFxlbiBlc2NhcGVzIGFwcGVhciBpbiB0aGUgcGF0dGVybi4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9Im1hdGNoZWRzdHJpbmdzIj48L2E+CisuU0ggIkhPVyBQQ1JFMl9NQVRDSCgpIFJFVFVSTlMgQSBTVFJJTkcgQU5EIENBUFRVUkVEIFNVQlNUUklOR1MiCisucnMKKy5zcAorLm5mCisuQiB1aW50MzJfdCBwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudChwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQKTsKKy5zcAorLkIgUENSRTJfU0laRSAqcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcihwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQKTsKKy5maQorLlAKK0luIGdlbmVyYWwsIGEgcGF0dGVybiBtYXRjaGVzIGEgY2VydGFpbiBwb3J0aW9uIG9mIHRoZSBzdWJqZWN0LCBhbmQgaW4KK2FkZGl0aW9uLCBmdXJ0aGVyIHN1YnN0cmluZ3MgZnJvbSB0aGUgc3ViamVjdCBtYXkgYmUgcGlja2VkIG91dCBieQorcGFyZW50aGVzaXplZCBwYXJ0cyBvZiB0aGUgcGF0dGVybi4gRm9sbG93aW5nIHRoZSB1c2FnZSBpbiBKZWZmcmV5IEZyaWVkbCdzCitib29rLCB0aGlzIGlzIGNhbGxlZCAiY2FwdHVyaW5nIiBpbiB3aGF0IGZvbGxvd3MsIGFuZCB0aGUgcGhyYXNlICJjYXB0dXJpbmcKK3N1YnBhdHRlcm4iIG9yICJjYXB0dXJpbmcgZ3JvdXAiIGlzIHVzZWQgZm9yIGEgZnJhZ21lbnQgb2YgYSBwYXR0ZXJuIHRoYXQgcGlja3MKK291dCBhIHN1YnN0cmluZy4gUENSRTIgc3VwcG9ydHMgc2V2ZXJhbCBvdGhlciBraW5kcyBvZiBwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm4KK3RoYXQgZG8gbm90IGNhdXNlIHN1YnN0cmluZ3MgdG8gYmUgY2FwdHVyZWQuIFRoZSBcZkJwY3JlMl9wYXR0ZXJuX2luZm8oKVxmUAorZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZmluZCBvdXQgaG93IG1hbnkgY2FwdHVyaW5nIHN1YnBhdHRlcm5zIHRoZXJlIGFyZSBpbiBhCitjb21waWxlZCBwYXR0ZXJuLgorLlAKK1lvdSBjYW4gdXNlIGF1eGlsaWFyeSBmdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyBjYXB0dXJlZCBzdWJzdHJpbmdzCisuXCIgSFRNTCA8YSBocmVmPSIjZXh0cmFjdGJ5bnVtYmVyIj4KKy5cIiA8L2E+CitieSBudW1iZXIKKy5cIgorb3IKKy5cIiBIVE1MIDxhIGhyZWY9IiNleHRyYWN0YnluYW1lIj4KKy5cIiA8L2E+CitieSBuYW1lLAorLlwiCithcyBkZXNjcmliZWQgaW4gc2VjdGlvbnMgYmVsb3cuCisuUAorQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBtYWtlIGRpcmVjdCB1c2Ugb2YgdGhlIHZlY3RvciBvZiBQQ1JFMl9TSVpFIHZhbHVlcywKK2NhbGxlZCB0aGUgXGZCb3ZlY3RvclxmUCwgd2hpY2ggY29udGFpbnMgdGhlIG9mZnNldHMgb2YgY2FwdHVyZWQgc3RyaW5ncy4gSXQgaXMKK3BhcnQgb2YgdGhlCisuXCIgSFRNTCA8YSBocmVmPSIjbWF0Y2hkYXRhYmxvY2siPgorLlwiIDwvYT4KK21hdGNoIGRhdGEgYmxvY2suCisuXCIKK1RoZSBmdW5jdGlvbiBcZkJwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyKClcZlAgcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUKK292ZWN0b3IsIGFuZCBcZkJwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudCgpXGZQIHJldHVybnMgdGhlIG51bWJlciBvZiBwYWlycyBvZgordmFsdWVzIGl0IGNvbnRhaW5zLgorLlAKK1dpdGhpbiB0aGUgb3ZlY3RvciwgdGhlIGZpcnN0IGluIGVhY2ggcGFpciBvZiB2YWx1ZXMgaXMgc2V0IHRvIHRoZSBvZmZzZXQgb2YKK3RoZSBmaXJzdCBjb2RlIHVuaXQgb2YgYSBzdWJzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGlzIHNldCB0byB0aGUgb2Zmc2V0IG9mIHRoZQorZmlyc3QgY29kZSB1bml0IGFmdGVyIHRoZSBlbmQgb2YgYSBzdWJzdHJpbmcuIFRoZXNlIHZhbHVlcyBhcmUgYWx3YXlzIGNvZGUgdW5pdAorb2Zmc2V0cywgbm90IGNoYXJhY3RlciBvZmZzZXRzLiBUaGF0IGlzLCB0aGV5IGFyZSBieXRlIG9mZnNldHMgaW4gdGhlIDgtYml0CitsaWJyYXJ5LCAxNi1iaXQgb2Zmc2V0cyBpbiB0aGUgMTYtYml0IGxpYnJhcnksIGFuZCAzMi1iaXQgb2Zmc2V0cyBpbiB0aGUgMzItYml0CitsaWJyYXJ5LgorLlAKK0FmdGVyIGEgcGFydGlhbCBtYXRjaCAoZXJyb3IgcmV0dXJuIFBDUkUyX0VSUk9SX1BBUlRJQUwpLCBvbmx5IHRoZSBmaXJzdCBwYWlyCitvZiBvZmZzZXRzICh0aGF0IGlzLCBcZklvdmVjdG9yWzBdXGZQIGFuZCBcZklvdmVjdG9yWzFdXGZQKSBhcmUgc2V0LiBUaGV5CitpZGVudGlmeSB0aGUgcGFydCBvZiB0aGUgc3ViamVjdCB0aGF0IHdhcyBwYXJ0aWFsbHkgbWF0Y2hlZC4gU2VlIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGFydGlhbFxmUAorLlwiCitkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzIG9mIHBhcnRpYWwgbWF0Y2hpbmcuCisuUAorQWZ0ZXIgYSBzdWNjZXNzZnVsIG1hdGNoLCB0aGUgZmlyc3QgcGFpciBvZiBvZmZzZXRzIGlkZW50aWZpZXMgdGhlIHBvcnRpb24gb2YKK3RoZSBzdWJqZWN0IHN0cmluZyB0aGF0IHdhcyBtYXRjaGVkIGJ5IHRoZSBlbnRpcmUgcGF0dGVybi4gVGhlIG5leHQgcGFpciBpcwordXNlZCBmb3IgdGhlIGZpcnN0IGNhcHR1cmluZyBzdWJwYXR0ZXJuLCBhbmQgc28gb24uIFRoZSB2YWx1ZSByZXR1cm5lZCBieQorXGZCcGNyZTJfbWF0Y2goKVxmUCBpcyBvbmUgbW9yZSB0aGFuIHRoZSBoaWdoZXN0IG51bWJlcmVkIHBhaXIgdGhhdCBoYXMgYmVlbgorc2V0LiBGb3IgZXhhbXBsZSwgaWYgdHdvIHN1YnN0cmluZ3MgaGF2ZSBiZWVuIGNhcHR1cmVkLCB0aGUgcmV0dXJuZWQgdmFsdWUgaXMKKzMuIElmIHRoZXJlIGFyZSBubyBjYXB0dXJpbmcgc3VicGF0dGVybnMsIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBhIHN1Y2Nlc3NmdWwKK21hdGNoIGlzIDEsIGluZGljYXRpbmcgdGhhdCBqdXN0IHRoZSBmaXJzdCBwYWlyIG9mIG9mZnNldHMgaGFzIGJlZW4gc2V0LgorLlAKK0lmIGEgcGF0dGVybiB1c2VzIHRoZSBcZUsgZXNjYXBlIHNlcXVlbmNlIHdpdGhpbiBhIHBvc2l0aXZlIGFzc2VydGlvbiwgdGhlCityZXBvcnRlZCBzdGFydCBvZiBhIHN1Y2Nlc3NmdWwgbWF0Y2ggY2FuIGJlIGdyZWF0ZXIgdGhhbiB0aGUgZW5kIG9mIHRoZSBtYXRjaC4KK0ZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiAoPz1hYlxlSykgaXMgbWF0Y2hlZCBhZ2FpbnN0ICJhYiIsIHRoZSBzdGFydCBhbmQKK2VuZCBvZmZzZXQgdmFsdWVzIGZvciB0aGUgbWF0Y2ggYXJlIDIgYW5kIDAuCisuUAorSWYgYSBjYXB0dXJpbmcgc3VicGF0dGVybiBncm91cCBpcyBtYXRjaGVkIHJlcGVhdGVkbHkgd2l0aGluIGEgc2luZ2xlIG1hdGNoCitvcGVyYXRpb24sIGl0IGlzIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHN1YmplY3QgdGhhdCBpdCBtYXRjaGVkIHRoYXQgaXMKK3JldHVybmVkLgorLlAKK0lmIHRoZSBvdmVjdG9yIGlzIHRvbyBzbWFsbCB0byBob2xkIGFsbCB0aGUgY2FwdHVyZWQgc3Vic3RyaW5nIG9mZnNldHMsIGFzIG11Y2gKK2FzIHBvc3NpYmxlIGlzIGZpbGxlZCBpbiwgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2YgemVyby4gSWYgY2FwdHVyZWQKK3N1YnN0cmluZ3MgYXJlIG5vdCBvZiBpbnRlcmVzdCwgXGZCcGNyZTJfbWF0Y2goKVxmUCBtYXkgYmUgY2FsbGVkIHdpdGggYSBtYXRjaAorZGF0YSBibG9jayB3aG9zZSBvdmVjdG9yIGlzIG9mIG1pbmltdW0gbGVuZ3RoICh0aGF0IGlzLCBvbmUgcGFpcikuIEhvd2V2ZXIsIGlmCit0aGUgcGF0dGVybiBjb250YWlucyBiYWNrIHJlZmVyZW5jZXMgYW5kIHRoZSBcZklvdmVjdG9yXGZQIGlzIG5vdCBiaWcgZW5vdWdoIHRvCityZW1lbWJlciB0aGUgcmVsYXRlZCBzdWJzdHJpbmdzLCBQQ1JFMiBoYXMgdG8gZ2V0IGFkZGl0aW9uYWwgbWVtb3J5IGZvciB1c2UKK2R1cmluZyBtYXRjaGluZy4gVGh1cyBpdCBpcyB1c3VhbGx5IGFkdmlzYWJsZSB0byBzZXQgdXAgYSBtYXRjaCBkYXRhIGJsb2NrCitjb250YWluaW5nIGFuIG92ZWN0b3Igb2YgcmVhc29uYWJsZSBzaXplLgorLlAKK0l0IGlzIHBvc3NpYmxlIGZvciBjYXB0dXJpbmcgc3VicGF0dGVybiBudW1iZXIgXGZJbisxXGZQIHRvIG1hdGNoIHNvbWUgcGFydCBvZgordGhlIHN1YmplY3Qgd2hlbiBzdWJwYXR0ZXJuIFxmSW5cZlAgaGFzIG5vdCBiZWVuIHVzZWQgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYKK3RoZSBzdHJpbmcgImFiYyIgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBwYXR0ZXJuIChhfCh6KSkoYmMpIHRoZSByZXR1cm4gZnJvbSB0aGUKK2Z1bmN0aW9uIGlzIDQsIGFuZCBzdWJwYXR0ZXJucyAxIGFuZCAzIGFyZSBtYXRjaGVkLCBidXQgMiBpcyBub3QuIFdoZW4gdGhpcworaGFwcGVucywgYm90aCB2YWx1ZXMgaW4gdGhlIG9mZnNldCBwYWlycyBjb3JyZXNwb25kaW5nIHRvIHVudXNlZCBzdWJwYXR0ZXJucworYXJlIHNldCB0byBQQ1JFMl9VTlNFVC4KKy5QCitPZmZzZXQgdmFsdWVzIHRoYXQgY29ycmVzcG9uZCB0byB1bnVzZWQgc3VicGF0dGVybnMgYXQgdGhlIGVuZCBvZiB0aGUKK2V4cHJlc3Npb24gYXJlIGFsc28gc2V0IHRvIFBDUkUyX1VOU0VULiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cmluZyAiYWJjIiBpcworbWF0Y2hlZCBhZ2FpbnN0IHRoZSBwYXR0ZXJuIChhYmMpKHgoeXopPyk/IHN1YnBhdHRlcm5zIDIgYW5kIDMgYXJlIG5vdCBtYXRjaGVkLgorVGhlIHJldHVybiBmcm9tIHRoZSBmdW5jdGlvbiBpcyAyLCBiZWNhdXNlIHRoZSBoaWdoZXN0IHVzZWQgY2FwdHVyaW5nCitzdWJwYXR0ZXJuIG51bWJlciBpcyAxLiBUaGUgb2Zmc2V0cyBmb3IgZm9yIHRoZSBzZWNvbmQgYW5kIHRoaXJkIGNhcHR1cmluZworc3VicGF0dGVybnMgKGFzc3VtaW5nIHRoZSB2ZWN0b3IgaXMgbGFyZ2UgZW5vdWdoLCBvZiBjb3Vyc2UpIGFyZSBzZXQgdG8KK1BDUkUyX1VOU0VULgorLlAKK0VsZW1lbnRzIGluIHRoZSBvdmVjdG9yIHRoYXQgZG8gbm90IGNvcnJlc3BvbmQgdG8gY2FwdHVyaW5nIHBhcmVudGhlc2VzIGluIHRoZQorcGF0dGVybiBhcmUgbmV2ZXIgY2hhbmdlZC4gVGhhdCBpcywgaWYgYSBwYXR0ZXJuIGNvbnRhaW5zIFxmSW5cZlAgY2FwdHVyaW5nCitwYXJlbnRoZXNlcywgbm8gbW9yZSB0aGFuIFxmSW92ZWN0b3JbMF1cZlAgdG8gXGZJb3ZlY3RvclsybisxXVxmUCBhcmUgc2V0IGJ5CitcZkJwY3JlMl9tYXRjaCgpXGZQLiBUaGUgb3RoZXIgZWxlbWVudHMgcmV0YWluIHdoYXRldmVyIHZhbHVlcyB0aGV5IHByZXZpb3VzbHkKK2hhZC4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9Im1hdGNob3RoZXJkYXRhIj48L2E+CisuU0ggIk9USEVSIElORk9STUFUSU9OIEFCT1VUIEEgTUFUQ0giCisucnMKKy5zcAorLm5mCisuQiBQQ1JFMl9TUFRSIHBjcmUyX2dldF9tYXJrKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlApOworLnNwCisuQiBQQ1JFMl9TSVpFIHBjcmUyX2dldF9zdGFydGNoYXIocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCk7CisuZmkKKy5QCitBcyB3ZWxsIGFzIHRoZSBvZmZzZXRzIGluIHRoZSBvdmVjdG9yLCBvdGhlciBpbmZvcm1hdGlvbiBhYm91dCBhIG1hdGNoIGlzCityZXRhaW5lZCBpbiB0aGUgbWF0Y2ggZGF0YSBibG9jayBhbmQgY2FuIGJlIHJldHJpZXZlZCBieSB0aGUgYWJvdmUgZnVuY3Rpb25zIGluCithcHByb3ByaWF0ZSBjaXJjdW1zdGFuY2VzLiBJZiB0aGV5IGFyZSBjYWxsZWQgYXQgb3RoZXIgdGltZXMsIHRoZSByZXN1bHQgaXMKK3VuZGVmaW5lZC4KKy5QCitBZnRlciBhIHN1Y2Nlc3NmdWwgbWF0Y2gsIGEgcGFydGlhbCBtYXRjaCAoUENSRTJfRVJST1JfUEFSVElBTCksIG9yIGEgZmFpbHVyZQordG8gbWF0Y2ggKFBDUkUyX0VSUk9SX05PTUFUQ0gpLCBhICgqTUFSSykgbmFtZSBtYXkgYmUgYXZhaWxhYmxlLCBhbmQKK1xmQnBjcmUyX2dldF9tYXJrKClcZlAgY2FuIGJlIGNhbGxlZC4gSXQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlCit6ZXJvLXRlcm1pbmF0ZWQgbmFtZSwgd2hpY2ggaXMgd2l0aGluIHRoZSBjb21waWxlZCBwYXR0ZXJuLiBPdGhlcndpc2UgTlVMTCBpcworcmV0dXJuZWQuIFRoZSBsZW5ndGggb2YgdGhlICgqTUFSSykgbmFtZSAoZXhjbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyB6ZXJvKSBpcworc3RvcmVkIGluIHRoZSBjb2RlIHVuaXQgdGhhdCBwcmVjZWVkcyB0aGUgbmFtZS4gWW91IHNob3VsZCB1c2UgdGhpcyBpbnN0ZWFkIG9mCityZWx5aW5nIG9uIHRoZSB0ZXJtaW5hdGluZyB6ZXJvIGlmIHRoZSAoKk1BUkspIG5hbWUgbWlnaHQgY29udGFpbiBhIGJpbmFyeQoremVyby4KKy5QCitBZnRlciBhIHN1Y2Nlc3NmdWwgbWF0Y2gsIHRoZSAoKk1BUkspIG5hbWUgdGhhdCBpcyByZXR1cm5lZCBpcyB0aGUKK2xhc3Qgb25lIGVuY291bnRlcmVkIG9uIHRoZSBtYXRjaGluZyBwYXRoIHRocm91Z2ggdGhlIHBhdHRlcm4uIEFmdGVyIGEgIm5vCittYXRjaCIgb3IgYSBwYXJ0aWFsIG1hdGNoLCB0aGUgbGFzdCBlbmNvdW50ZXJlZCAoKk1BUkspIG5hbWUgaXMgcmV0dXJuZWQuIEZvcgorZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBwYXR0ZXJuOgorLnNwCisgIF4oKk1BUks6QSkoKCpNQVJLOkIpYXxiKWMKKy5zcAorV2hlbiBpdCBtYXRjaGVzICJiYyIsIHRoZSByZXR1cm5lZCBtYXJrIGlzIEEuIFRoZSBCIG1hcmsgaXMgInNlZW4iIGluIHRoZSBmaXJzdAorYnJhbmNoIG9mIHRoZSBncm91cCwgYnV0IGl0IGlzIG5vdCBvbiB0aGUgbWF0Y2hpbmcgcGF0aC4gT24gdGhlIG90aGVyIGhhbmQsCit3aGVuIHRoaXMgcGF0dGVybiBmYWlscyB0byBtYXRjaCAiYngiLCB0aGUgcmV0dXJuZWQgbWFyayBpcyBCLgorLlAKK0FmdGVyIGEgc3VjY2Vzc2Z1bCBtYXRjaCwgYSBwYXJ0aWFsIG1hdGNoLCBvciBvbmUgb2YgdGhlIGludmFsaWQgVVRGIGVycm9ycworKGZvciBleGFtcGxlLCBQQ1JFMl9FUlJPUl9VVEY4X0VSUjUpLCBcZkJwY3JlMl9nZXRfc3RhcnRjaGFyKClcZlAgY2FuIGJlCitjYWxsZWQuIEFmdGVyIGEgc3VjY2Vzc2Z1bCBvciBwYXJ0aWFsIG1hdGNoIGl0IHJldHVybnMgdGhlIGNvZGUgdW5pdCBvZmZzZXQgb2YKK3RoZSBjaGFyYWN0ZXIgYXQgd2hpY2ggdGhlIG1hdGNoIHN0YXJ0ZWQuIEZvciBhIG5vbi1wYXJ0aWFsIG1hdGNoLCB0aGlzIGNhbiBiZQorZGlmZmVyZW50IHRvIHRoZSB2YWx1ZSBvZiBcZklvdmVjdG9yWzBdXGZQIGlmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIHRoZSBcZUsKK2VzY2FwZSBzZXF1ZW5jZS4gQWZ0ZXIgYSBwYXJ0aWFsIG1hdGNoLCBob3dldmVyLCB0aGlzIHZhbHVlIGlzIGFsd2F5cyB0aGUgc2FtZQorYXMgXGZJb3ZlY3RvclswXVxmUCBiZWNhdXNlIFxlSyBkb2VzIG5vdCBhZmZlY3QgdGhlIHJlc3VsdCBvZiBhIHBhcnRpYWwgbWF0Y2guCisuUAorQWZ0ZXIgYSBVVEYgY2hlY2sgZmFpbHVyZSwgXGZCcGNyZTJfZ2V0X3N0YXJ0Y2hhcigpXGZQIGNhbiBiZSB1c2VkIHRvIG9idGFpbgordGhlIGNvZGUgdW5pdCBvZmZzZXQgb2YgdGhlIGludmFsaWQgVVRGIGNoYXJhY3Rlci4gRGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJ1bmljb2RlXGZQCisuXCIKK3BhZ2UuCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJlcnJvcmxpc3QiPjwvYT4KKy5TSCAiRVJST1IgUkVUVVJOUyBGUk9NIFxmQnBjcmUyX21hdGNoKClcZlAiCisucnMKKy5zcAorSWYgXGZCcGNyZTJfbWF0Y2goKVxmUCBmYWlscywgaXQgcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlci4gVGhpcyBjYW4gYmUKK2NvbnZlcnRlZCB0byBhIHRleHQgc3RyaW5nIGJ5IGNhbGxpbmcgXGZCcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKVxmUC4gTmVnYXRpdmUKK2Vycm9yIGNvZGVzIGFyZSBhbHNvIHJldHVybmVkIGJ5IG90aGVyIGZ1bmN0aW9ucywgYW5kIGFyZSBkb2N1bWVudGVkIHdpdGggdGhlbS4KK1RoZSBjb2RlcyBhcmUgZ2l2ZW4gbmFtZXMgaW4gdGhlIGhlYWRlciBmaWxlLiBJZiBVVEYgY2hlY2tpbmcgaXMgaW4gZm9yY2UgYW5kCithbiBpbnZhbGlkIFVURiBzdWJqZWN0IHN0cmluZyBpcyBkZXRlY3RlZCwgb25lIG9mIGEgbnVtYmVyIG9mIFVURi1zcGVjaWZpYworbmVnYXRpdmUgZXJyb3IgY29kZXMgaXMgcmV0dXJuZWQuIERldGFpbHMgYXJlIGdpdmVuIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUydW5pY29kZVxmUAorLlwiCitwYWdlLiBUaGUgZm9sbG93aW5nIGFyZSB0aGUgb3RoZXIgZXJyb3JzIHRoYXQgbWF5IGJlIHJldHVybmVkIGJ5CitcZkJwY3JlMl9tYXRjaCgpXGZQOgorLnNwCisgIFBDUkUyX0VSUk9SX05PTUFUQ0gKKy5zcAorVGhlIHN1YmplY3Qgc3RyaW5nIGRpZCBub3QgbWF0Y2ggdGhlIHBhdHRlcm4uCisuc3AKKyAgUENSRTJfRVJST1JfUEFSVElBTAorLnNwCitUaGUgc3ViamVjdCBzdHJpbmcgZGlkIG5vdCBtYXRjaCwgYnV0IGl0IGRpZCBtYXRjaCBwYXJ0aWFsbHkuIFNlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBhcnRpYWxcZlAKKy5cIgorZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscyBvZiBwYXJ0aWFsIG1hdGNoaW5nLgorLnNwCisgIFBDUkUyX0VSUk9SX0JBRE1BR0lDCisuc3AKK1BDUkUyIHN0b3JlcyBhIDQtYnl0ZSAibWFnaWMgbnVtYmVyIiBhdCB0aGUgc3RhcnQgb2YgdGhlIGNvbXBpbGVkIGNvZGUsIHRvCitjYXRjaCB0aGUgY2FzZSB3aGVuIGl0IGlzIHBhc3NlZCBhIGp1bmsgcG9pbnRlci4gVGhpcyBpcyB0aGUgZXJyb3IgdGhhdCBpcworcmV0dXJuZWQgd2hlbiB0aGUgbWFnaWMgbnVtYmVyIGlzIG5vdCBwcmVzZW50LgorLnNwCisgIFBDUkUyX0VSUk9SX0JBRE1PREUKKy5zcAorVGhpcyBlcnJvciBpcyBnaXZlbiB3aGVuIGEgcGF0dGVybiB0aGF0IHdhcyBjb21waWxlZCBieSB0aGUgOC1iaXQgbGlicmFyeSBpcworcGFzc2VkIHRvIGEgMTYtYml0IG9yIDMyLWJpdCBsaWJyYXJ5IGZ1bmN0aW9uLCBvciB2aWNlIHZlcnNhLgorLnNwCisgIFBDUkUyX0VSUk9SX0JBRE9GRlNFVAorLnNwCitUaGUgdmFsdWUgb2YgXGZJc3RhcnRvZmZzZXRcZlAgd2FzIGdyZWF0ZXIgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBzdWJqZWN0LgorLnNwCisgIFBDUkUyX0VSUk9SX0JBRE9QVElPTgorLnNwCitBbiB1bnJlY29nbml6ZWQgYml0IHdhcyBzZXQgaW4gdGhlIFxmSW9wdGlvbnNcZlAgYXJndW1lbnQuCisuc3AKKyAgUENSRTJfRVJST1JfQkFEVVRGT0ZGU0VUCisuc3AKK1RoZSBVVEYgY29kZSB1bml0IHNlcXVlbmNlIHRoYXQgd2FzIHBhc3NlZCBhcyBhIHN1YmplY3Qgd2FzIGNoZWNrZWQgYW5kIGZvdW5kCit0byBiZSB2YWxpZCAodGhlIFBDUkUyX05PX1VURl9DSEVDSyBvcHRpb24gd2FzIG5vdCBzZXQpLCBidXQgdGhlIHZhbHVlIG9mCitcZklzdGFydG9mZnNldFxmUCBkaWQgbm90IHBvaW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBVVEYgY2hhcmFjdGVyIG9yIHRoZSBlbmQKK29mIHRoZSBzdWJqZWN0LgorLnNwCisgIFBDUkUyX0VSUk9SX0NBTExPVVQKKy5zcAorVGhpcyBlcnJvciBpcyBuZXZlciBnZW5lcmF0ZWQgYnkgXGZCcGNyZTJfbWF0Y2goKVxmUCBpdHNlbGYuIEl0IGlzIHByb3ZpZGVkIGZvcgordXNlIGJ5IGNhbGxvdXQgZnVuY3Rpb25zIHRoYXQgd2FudCB0byBjYXVzZSBcZkJwY3JlMl9tYXRjaCgpXGZQIG9yCitcZkJwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSgpXGZQIHRvIHJldHVybiBhIGRpc3RpbmN0aXZlIGVycm9yIGNvZGUuIFNlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmNhbGxvdXRcZlAKKy5cIgorZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KKy5zcAorICBQQ1JFMl9FUlJPUl9JTlRFUk5BTAorLnNwCitBbiB1bmV4cGVjdGVkIGludGVybmFsIGVycm9yIGhhcyBvY2N1cnJlZC4gVGhpcyBlcnJvciBjb3VsZCBiZSBjYXVzZWQgYnkgYSBidWcKK2luIFBDUkUyIG9yIGJ5IG92ZXJ3cml0aW5nIG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuLgorLnNwCisgIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04KKy5zcAorVGhpcyBlcnJvciBpcyByZXR1cm5lZCB3aGVuIGEgcGF0dGVybiB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgc3R1ZGllZCB1c2luZyBKSVQKK2lzIGJlaW5nIG1hdGNoZWQsIGJ1dCB0aGUgbWF0Y2hpbmcgbW9kZSAocGFydGlhbCBvciBjb21wbGV0ZSBtYXRjaCkgZG9lcyBub3QKK2NvcnJlc3BvbmQgdG8gYW55IEpJVCBjb21waWxhdGlvbiBtb2RlLiBXaGVuIHRoZSBKSVQgZmFzdCBwYXRoIGZ1bmN0aW9uIGlzCit1c2VkLCB0aGlzIGVycm9yIG1heSBiZSBhbHNvIGdpdmVuIGZvciBpbnZhbGlkIG9wdGlvbnMuIFNlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmppdFxmUAorLlwiCitkb2N1bWVudGF0aW9uIGZvciBtb3JlIGRldGFpbHMuCisuc3AKKyAgUENSRTJfRVJST1JfSklUX1NUQUNLTElNSVQKKy5zcAorVGhpcyBlcnJvciBpcyByZXR1cm5lZCB3aGVuIGEgcGF0dGVybiB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgc3R1ZGllZCB1c2luZyBKSVQKK2lzIGJlaW5nIG1hdGNoZWQsIGJ1dCB0aGUgbWVtb3J5IGF2YWlsYWJsZSBmb3IgdGhlIGp1c3QtaW4tdGltZSBwcm9jZXNzaW5nCitzdGFjayBpcyBub3QgbGFyZ2UgZW5vdWdoLiBTZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJqaXRcZlAKKy5cIgorZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorLnNwCisgIFBDUkUyX0VSUk9SX01BVENITElNSVQKKy5zcAorVGhlIGJhY2t0cmFja2luZyBsaW1pdCB3YXMgcmVhY2hlZC4KKy5zcAorICBQQ1JFMl9FUlJPUl9OT01FTU9SWQorLnNwCitJZiBhIHBhdHRlcm4gY29udGFpbnMgYmFjayByZWZlcmVuY2VzLCBidXQgdGhlIG92ZWN0b3IgaXMgbm90IGJpZyBlbm91Z2ggdG8KK3JlbWVtYmVyIHRoZSByZWZlcmVuY2VkIHN1YnN0cmluZ3MsIFBDUkUyIGdldHMgYSBibG9jayBvZiBtZW1vcnkgYXQgdGhlIHN0YXJ0CitvZiBtYXRjaGluZyB0byB1c2UgZm9yIHRoaXMgcHVycG9zZS4gVGhlcmUgYXJlIHNvbWUgb3RoZXIgc3BlY2lhbCBjYXNlcyB3aGVyZQorZXh0cmEgbWVtb3J5IGlzIG5lZWRlZCBkdXJpbmcgbWF0Y2hpbmcuIFRoaXMgZXJyb3IgaXMgZ2l2ZW4gd2hlbiBtZW1vcnkgY2Fubm90CitiZSBvYnRhaW5lZC4KKy5zcAorICBQQ1JFMl9FUlJPUl9OVUxMCisuc3AKK0VpdGhlciB0aGUgXGZJY29kZVxmUCwgXGZJc3ViamVjdFxmUCwgb3IgXGZJbWF0Y2hfZGF0YVxmUCBhcmd1bWVudCB3YXMgcGFzc2VkCithcyBOVUxMLgorLnNwCisgIFBDUkUyX0VSUk9SX1JFQ1VSU0VMT09QCisuc3AKK1RoaXMgZXJyb3IgaXMgcmV0dXJuZWQgd2hlbiBcZkJwY3JlMl9tYXRjaCgpXGZQIGRldGVjdHMgYSByZWN1cnNpb24gbG9vcCB3aXRoaW4KK3RoZSBwYXR0ZXJuLiBTcGVjaWZpY2FsbHksIGl0IG1lYW5zIHRoYXQgZWl0aGVyIHRoZSB3aG9sZSBwYXR0ZXJuIG9yIGEKK3N1YnBhdHRlcm4gaGFzIGJlZW4gY2FsbGVkIHJlY3Vyc2l2ZWx5IGZvciB0aGUgc2Vjb25kIHRpbWUgYXQgdGhlIHNhbWUgcG9zaXRpb24KK2luIHRoZSBzdWJqZWN0IHN0cmluZy4gU29tZSBzaW1wbGUgcGF0dGVybnMgdGhhdCBtaWdodCBkbyB0aGlzIGFyZSBkZXRlY3RlZCBhbmQKK2ZhdWx0ZWQgYXQgY29tcGlsZSB0aW1lLCBidXQgbW9yZSBjb21wbGljYXRlZCBjYXNlcywgaW4gcGFydGljdWxhciBtdXR1YWwKK3JlY3Vyc2lvbnMgYmV0d2VlbiB0d28gZGlmZmVyZW50IHN1YnBhdHRlcm5zLCBjYW5ub3QgYmUgZGV0ZWN0ZWQgdW50aWwgbWF0Y2hpbmcKK2lzIGF0dGVtcHRlZC4KKy5zcAorICBQQ1JFMl9FUlJPUl9SRUNVUlNJT05MSU1JVAorLnNwCitUaGUgaW50ZXJuYWwgcmVjdXJzaW9uIGxpbWl0IHdhcyByZWFjaGVkLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0iZXh0cmFjdGJ5bnVtYmVyIj48L2E+CisuU0ggIkVYVFJBQ1RJTkcgQ0FQVFVSRUQgU1VCU1RSSU5HUyBCWSBOVU1CRVIiCisucnMKKy5zcAorLm5mCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQLAorLkIgIiAgdWludDMyX3QgXGZJbnVtYmVyXGZQLCBQQ1JFMl9TSVpFICpcZklsZW5ndGhcZlApOyIKKy5zcAorLkIgaW50IHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsCisuQiAiICB1aW50MzJfdCBcZkludW1iZXJcZlAsIFBDUkUyX1VDSEFSICpcZklidWZmZXJcZlAsIgorLkIgIiAgUENSRTJfU0laRSAqXGZJYnVmZmxlblxmUCk7IgorLnNwCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQLAorLkIgIiAgdWludDMyX3QgXGZJbnVtYmVyXGZQLCBQQ1JFMl9VQ0hBUiAqKlxmSWJ1ZmZlcnB0clxmUCwiCisuQiAiICBQQ1JFMl9TSVpFICpcZklidWZmbGVuXGZQKTsiCisuc3AKKy5CIHZvaWQgcGNyZTJfc3Vic3RyaW5nX2ZyZWUoUENSRTJfVUNIQVIgKlxmSWJ1ZmZlclxmUCk7CisuZmkKKy5QCitDYXB0dXJlZCBzdWJzdHJpbmdzIGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBieSB1c2luZyB0aGUgb3ZlY3RvciBhcyBkZXNjcmliZWQKKy5cIiBIVE1MIDxhIGhyZWY9IiNtYXRjaGVkc3RyaW5ncyI+CisuXCIgPC9hPgorYWJvdmUuCisuXCIKK0ZvciBjb252ZW5pZW5jZSwgYXV4aWxpYXJ5IGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIGV4dHJhY3RpbmcgY2FwdHVyZWQKK3N1YnN0cmluZ3MgYXMgbmV3LCBzZXBhcmF0ZSwgemVyby10ZXJtaW5hdGVkIHN0cmluZ3MuIEEgc3Vic3RyaW5nIHRoYXQgY29udGFpbnMKK2EgYmluYXJ5IHplcm8gaXMgY29ycmVjdGx5IGV4dHJhY3RlZCBhbmQgaGFzIGEgZnVydGhlciB6ZXJvIGFkZGVkIG9uIHRoZSBlbmQsCitidXQgdGhlIHJlc3VsdCBpcyBub3QsIG9mIGNvdXJzZSwgYSBDIHN0cmluZy4KKy5QCitUaGUgZnVuY3Rpb25zIGluIHRoaXMgc2VjdGlvbiBpZGVudGlmeSBzdWJzdHJpbmdzIGJ5IG51bWJlci4gVGhlIG51bWJlciB6ZXJvCityZWZlcnMgdG8gdGhlIGVudGlyZSBtYXRjaGVkIHN1YnN0cmluZywgd2l0aCBoaWdoZXIgbnVtYmVycyByZWZlcnJpbmcgdG8KK3N1YnN0cmluZ3MgY2FwdHVyZWQgYnkgcGFyZW50aGVzaXplZCBncm91cHMuIEFmdGVyIGEgcGFydGlhbCBtYXRjaCwgb25seQorc3Vic3RyaW5nIHplcm8gaXMgYXZhaWxhYmxlLiBBbiBhdHRlbXB0IHRvIGV4dHJhY3QgYW55IG90aGVyIHN1YnN0cmluZyBnaXZlcwordGhlIGVycm9yIFBDUkUyX0VSUk9SX1BBUlRJQUwuIFRoZSBuZXh0IHNlY3Rpb24gZGVzY3JpYmVzIHNpbWlsYXIgZnVuY3Rpb25zIGZvcgorZXh0cmFjdGluZyBjYXB0dXJlZCBzdWJzdHJpbmdzIGJ5IG5hbWUuCisuUAorSWYgYSBwYXR0ZXJuIHVzZXMgdGhlIFxlSyBlc2NhcGUgc2VxdWVuY2Ugd2l0aGluIGEgcG9zaXRpdmUgYXNzZXJ0aW9uLCB0aGUKK3JlcG9ydGVkIHN0YXJ0IG9mIGEgc3VjY2Vzc2Z1bCBtYXRjaCBjYW4gYmUgZ3JlYXRlciB0aGFuIHRoZSBlbmQgb2YgdGhlIG1hdGNoLgorRm9yIGV4YW1wbGUsIGlmIHRoZSBwYXR0ZXJuICg/PWFiXGVLKSBpcyBtYXRjaGVkIGFnYWluc3QgImFiIiwgdGhlIHN0YXJ0IGFuZAorZW5kIG9mZnNldCB2YWx1ZXMgZm9yIHRoZSBtYXRjaCBhcmUgMiBhbmQgMC4gSW4gdGhpcyBzaXR1YXRpb24sIGNhbGxpbmcgdGhlc2UKK2Z1bmN0aW9ucyB3aXRoIGEgemVybyBzdWJzdHJpbmcgbnVtYmVyIGV4dHJhY3RzIGEgemVyby1sZW5ndGggZW1wdHkgc3RyaW5nLgorLlAKK1lvdSBjYW4gZmluZCB0aGUgbGVuZ3RoIGluIGNvZGUgdW5pdHMgb2YgYSBjYXB0dXJlZCBzdWJzdHJpbmcgd2l0aG91dAorZXh0cmFjdGluZyBpdCBieSBjYWxsaW5nIFxmQnBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIoKVxmUC4gVGhlIGZpcnN0Cithcmd1bWVudCBpcyBhIHBvaW50ZXIgdG8gdGhlIG1hdGNoIGRhdGEgYmxvY2ssIHRoZSBzZWNvbmQgaXMgdGhlIGdyb3VwIG51bWJlciwKK2FuZCB0aGUgdGhpcmQgaXMgYSBwb2ludGVyIHRvIGEgdmFyaWFibGUgaW50byB3aGljaCB0aGUgbGVuZ3RoIGlzIHBsYWNlZC4gSWYKK3lvdSBqdXN0IHdhbnQgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCB0aGUgc3Vic3RyaW5nIGhhcyBiZWVuIGNhcHR1cmVkLCB5b3UgY2FuCitwYXNzIHRoZSB0aGlyZCBhcmd1bWVudCBhcyBOVUxMLgorLlAKK1RoZSBcZkJwY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcigpXGZQIGZ1bmN0aW9uIGNvcGllcyBhIGNhcHR1cmVkIHN1YnN0cmluZworaW50byBhIHN1cHBsaWVkIGJ1ZmZlciwgd2hlcmVhcyBcZkJwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyKClcZlAgY29waWVzIGl0CitpbnRvIG5ldyBtZW1vcnksIG9idGFpbmVkIHVzaW5nIHRoZSBzYW1lIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQgd2FzCit1c2VkIGZvciB0aGUgbWF0Y2ggZGF0YSBibG9jay4gVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhCitwb2ludGVyIHRvIHRoZSBtYXRjaCBkYXRhIGJsb2NrIGFuZCBhIGNhcHR1cmluZyBncm91cCBudW1iZXIuCisuUAorVGhlIGZpbmFsIGFyZ3VtZW50cyBvZiBcZkJwY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcigpXGZQIGFyZSBhIHBvaW50ZXIgdG8KK3RoZSBidWZmZXIgYW5kIGEgcG9pbnRlciB0byBhIHZhcmlhYmxlIHRoYXQgY29udGFpbnMgaXRzIGxlbmd0aCBpbiBjb2RlIHVuaXRzLgorVGhpcyBpcyB1cGRhdGVkIHRvIGNvbnRhaW4gdGhlIGFjdHVhbCBudW1iZXIgb2YgY29kZSB1bml0cyB1c2VkIGZvciB0aGUKK2V4dHJhY3RlZCBzdWJzdHJpbmcsIGV4Y2x1ZGluZyB0aGUgdGVybWluYXRpbmcgemVyby4KKy5QCitGb3IgXGZCcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcigpXGZQIHRoZSB0aGlyZCBhbmQgZm91cnRoIGFyZ3VtZW50cyBwb2ludAordG8gdmFyaWFibGVzIHRoYXQgYXJlIHVwZGF0ZWQgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIG5ldyBtZW1vcnkgYW5kIHRoZSBudW1iZXIKK29mIGNvZGUgdW5pdHMgdGhhdCBjb21wcmlzZSB0aGUgc3Vic3RyaW5nLCBhZ2FpbiBleGNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nCit6ZXJvLiBXaGVuIHRoZSBzdWJzdHJpbmcgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgdGhlIG1lbW9yeSBzaG91bGQgYmUgZnJlZWQgYnkKK2NhbGxpbmcgXGZCcGNyZTJfc3Vic3RyaW5nX2ZyZWUoKVxmUC4KKy5QCitUaGUgcmV0dXJuIHZhbHVlIGZyb20gYWxsIHRoZXNlIGZ1bmN0aW9ucyBpcyB6ZXJvIGZvciBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlCitlcnJvciBjb2RlLiBJZiB0aGUgcGF0dGVybiBtYXRjaCBmYWlsZWQsIHRoZSBtYXRjaCBmYWlsdXJlIGNvZGUgaXMgcmV0dXJuZWQuCitJZiBhIHN1YnN0cmluZyBudW1iZXIgZ3JlYXRlciB0aGFuIHplcm8gaXMgdXNlZCBhZnRlciBhIHBhcnRpYWwgbWF0Y2gsCitQQ1JFMl9FUlJPUl9QQVJUSUFMIGlzIHJldHVybmVkLiBPdGhlciBwb3NzaWJsZSBlcnJvciBjb2RlcyBhcmU6Cisuc3AKKyAgUENSRTJfRVJST1JfTk9NRU1PUlkKKy5zcAorVGhlIGJ1ZmZlciB3YXMgdG9vIHNtYWxsIGZvciBcZkJwY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcigpXGZQLCBvciB0aGUKK2F0dGVtcHQgdG8gZ2V0IG1lbW9yeSBmYWlsZWQgZm9yIFxmQnBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIoKVxmUC4KKy5zcAorICBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORworLnNwCitUaGVyZSBpcyBubyBzdWJzdHJpbmcgd2l0aCB0aGF0IG51bWJlciBpbiB0aGUgcGF0dGVybiwgdGhhdCBpcywgdGhlIG51bWJlciBpcworZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgY2FwdHVyaW5nIHBhcmVudGhlc2VzLgorLnNwCisgIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFCisuc3AKK1RoZSBzdWJzdHJpbmcgbnVtYmVyLCB0aG91Z2ggbm90IGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGNhcHR1cmVzIGluIHRoZQorcGF0dGVybiwgaXMgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2Ygc2xvdHMgaW4gdGhlIG92ZWN0b3IsIHNvIHRoZSBzdWJzdHJpbmcKK2NvdWxkIG5vdCBiZSBjYXB0dXJlZC4KKy5zcAorICBQQ1JFMl9FUlJPUl9VTlNFVAorLnNwCitUaGUgc3Vic3RyaW5nIGRpZCBub3QgcGFydGljaXBhdGUgaW4gdGhlIG1hdGNoLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4gaXMKKyhhYmMpfChkZWYpIGFuZCB0aGUgc3ViamVjdCBpcyAiZGVmIiwgYW5kIHRoZSBvdmVjdG9yIGNvbnRhaW5zIGF0IGxlYXN0IHR3bworY2FwdHVyaW5nIHNsb3RzLCBzdWJzdHJpbmcgbnVtYmVyIDEgaXMgdW5zZXQuCisuCisuCisuU0ggIkVYVFJBQ1RJTkcgQSBMSVNUIE9GIEFMTCBDQVBUVVJFRCBTVUJTVFJJTkdTIgorLnJzCisuc3AKKy5uZgorLkIgaW50IHBjcmUyX3N1YnN0cmluZ19saXN0X2dldChwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQLAorLkIgIiAgUENSRTJfVUNIQVIgKioqXGZJbGlzdHB0clxmUCwgUENSRTJfU0laRSAqKlxmSWxlbmd0aHNwdHJcZlApOworLnNwCisuQiB2b2lkIHBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUoUENSRTJfU1BUUiAqXGZJbGlzdFxmUCk7CisuZmkKKy5QCitUaGUgXGZCcGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0KClcZlAgZnVuY3Rpb24gZXh0cmFjdHMgYWxsIGF2YWlsYWJsZSBzdWJzdHJpbmdzCithbmQgYnVpbGRzIGEgbGlzdCBvZiBwb2ludGVycyB0byB0aGVtLiBJdCBhbHNvIChvcHRpb25hbGx5KSBidWlsZHMgYSBzZWNvbmQKK2xpc3QgdGhhdCBjb250YWlucyB0aGVpciBsZW5ndGhzIChpbiBjb2RlIHVuaXRzKSwgZXhjbHVkaW5nIGEgdGVybWluYXRpbmcgemVybwordGhhdCBpcyBhZGRlZCB0byBlYWNoIG9mIHRoZW0uIEFsbCB0aGlzIGlzIGRvbmUgaW4gYSBzaW5nbGUgYmxvY2sgb2YgbWVtb3J5Cit0aGF0IGlzIG9idGFpbmVkIHVzaW5nIHRoZSBzYW1lIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9uIHRoYXQgd2FzIHVzZWQgdG8gZ2V0Cit0aGUgbWF0Y2ggZGF0YSBibG9jay4KKy5QCitUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgYSBzdWNjZXNzZnVsIG1hdGNoLiBJZiBjYWxsZWQgYWZ0ZXIgYQorcGFydGlhbCBtYXRjaCwgdGhlIGVycm9yIGNvZGUgUENSRTJfRVJST1JfUEFSVElBTCBpcyByZXR1cm5lZC4KKy5QCitUaGUgYWRkcmVzcyBvZiB0aGUgbWVtb3J5IGJsb2NrIGlzIHJldHVybmVkIHZpYSBcZklsaXN0cHRyXGZQLCB3aGljaCBpcyBhbHNvCit0aGUgc3RhcnQgb2YgdGhlIGxpc3Qgb2Ygc3RyaW5nIHBvaW50ZXJzLiBUaGUgZW5kIG9mIHRoZSBsaXN0IGlzIG1hcmtlZCBieSBhCitOVUxMIHBvaW50ZXIuIFRoZSBhZGRyZXNzIG9mIHRoZSBsaXN0IG9mIGxlbmd0aHMgaXMgcmV0dXJuZWQgdmlhCitcZklsZW5ndGhzcHRyXGZQLiBJZiB5b3VyIHN0cmluZ3MgZG8gbm90IGNvbnRhaW4gYmluYXJ5IHplcm9zIGFuZCB5b3UgZG8gbm90Cit0aGVyZWZvcmUgbmVlZCB0aGUgbGVuZ3RocywgeW91IG1heSBzdXBwbHkgTlVMTCBhcyB0aGUgXGZCbGVuZ3Roc3B0clxmUAorYXJndW1lbnQgdG8gZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgYSBsaXN0IG9mIGxlbmd0aHMuIFRoZSB5aWVsZCBvZiB0aGUKK2Z1bmN0aW9uIGlzIHplcm8gaWYgYWxsIHdlbnQgd2VsbCwgb3IgUENSRTJfRVJST1JfTk9NRU1PUlkgaWYgdGhlIG1lbW9yeSBibG9jaworY291bGQgbm90IGJlIG9idGFpbmVkLiBXaGVuIHRoZSBsaXN0IGlzIG5vIGxvbmdlciBuZWVkZWQsIGl0IHNob3VsZCBiZSBmcmVlZCBieQorY2FsbGluZyBcZkJwY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlKClcZlAuCisuUAorSWYgdGhpcyBmdW5jdGlvbiBlbmNvdW50ZXJzIGEgc3Vic3RyaW5nIHRoYXQgaXMgdW5zZXQsIHdoaWNoIGNhbiBoYXBwZW4gd2hlbgorY2FwdHVyaW5nIHN1YnBhdHRlcm4gbnVtYmVyIFxmSW4rMVxmUCBtYXRjaGVzIHNvbWUgcGFydCBvZiB0aGUgc3ViamVjdCwgYnV0CitzdWJwYXR0ZXJuIFxmSW5cZlAgaGFzIG5vdCBiZWVuIHVzZWQgYXQgYWxsLCBpdCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4gVGhpcworY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSBhIGdlbnVpbmUgemVyby1sZW5ndGggc3Vic3RyaW5nIGJ5IGluc3BlY3RpbmcgdGhlCithcHByb3ByaWF0ZSBvZmZzZXQgaW4gdGhlIG92ZWN0b3IsIHdoaWNoIGNvbnRhaW4gUENSRTJfVU5TRVQgZm9yIHVuc2V0CitzdWJzdHJpbmdzLCBvciBieSBjYWxsaW5nIFxmQnBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIoKVxmUC4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9ImV4dHJhY3RieW5hbWUiPjwvYT4KKy5TSCAiRVhUUkFDVElORyBDQVBUVVJFRCBTVUJTVFJJTkdTIEJZIE5BTUUiCisucnMKKy5zcAorLm5mCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUoY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCwKKy5CICIgIFBDUkUyX1NQVFIgXGZJbmFtZVxmUCk7IgorLnNwCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCwKKy5CICIgIFBDUkUyX1NQVFIgXGZJbmFtZVxmUCwgUENSRTJfU0laRSAqXGZJbGVuZ3RoXGZQKTsiCisuc3AKKy5CIGludCBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCwKKy5CICIgIFBDUkUyX1NQVFIgXGZJbmFtZVxmUCwgUENSRTJfVUNIQVIgKlxmSWJ1ZmZlclxmUCwgUENSRTJfU0laRSAqXGZJYnVmZmxlblxmUCk7IgorLnNwCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqXGZJbWF0Y2hfZGF0YVxmUCwKKy5CICIgIFBDUkUyX1NQVFIgXGZJbmFtZVxmUCwgUENSRTJfVUNIQVIgKipcZklidWZmZXJwdHJcZlAsIFBDUkUyX1NJWkUgKlxmSWJ1ZmZsZW5cZlApOyIKKy5zcAorLkIgdm9pZCBwY3JlMl9zdWJzdHJpbmdfZnJlZShQQ1JFMl9VQ0hBUiAqXGZJYnVmZmVyXGZQKTsKKy5maQorLlAKK1RvIGV4dHJhY3QgYSBzdWJzdHJpbmcgYnkgbmFtZSwgeW91IGZpcnN0IGhhdmUgdG8gZmluZCBhc3NvY2lhdGVkIG51bWJlci4KK0ZvciBleGFtcGxlLCBmb3IgdGhpcyBwYXR0ZXJuOgorLnNwCisgIChhKyliKD88eHh4PlxlZCspLi4uCisuc3AKK3RoZSBudW1iZXIgb2YgdGhlIHN1YnBhdHRlcm4gY2FsbGVkICJ4eHgiIGlzIDIuIElmIHRoZSBuYW1lIGlzIGtub3duIHRvIGJlCit1bmlxdWUgKFBDUkUyX0RVUE5BTUVTIHdhcyBub3Qgc2V0KSwgeW91IGNhbiBmaW5kIHRoZSBudW1iZXIgZnJvbSB0aGUgbmFtZSBieQorY2FsbGluZyBcZkJwY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZSgpXGZQLiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlCitjb21waWxlZCBwYXR0ZXJuLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgbmFtZS4gVGhlIHlpZWxkIG9mIHRoZSBmdW5jdGlvbiBpcyB0aGUKK3N1YnBhdHRlcm4gbnVtYmVyLCBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORyBpZiB0aGVyZSBpcyBubyBzdWJwYXR0ZXJuIG9mIHRoYXQKK25hbWUsIG9yIFBDUkUyX0VSUk9SX05PVU5JUVVFU1VCU1RSSU5HIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgc3VicGF0dGVybiBvZgordGhhdCBuYW1lLiBHaXZlbiB0aGUgbnVtYmVyLCB5b3UgY2FuIGV4dHJhY3QgdGhlIHN1YnN0cmluZyBkaXJlY3RseSwgb3IgdXNlIG9uZQorb2YgdGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQgYWJvdmUuCisuUAorRm9yIGNvbnZlbmllbmNlLCB0aGVyZSBhcmUgYWxzbyAiYnluYW1lIiBmdW5jdGlvbnMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZQorImJ5bnVtYmVyIiBmdW5jdGlvbnMsIHRoZSBvbmx5IGRpZmZlcmVuY2UgYmVpbmcgdGhhdCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEKK25hbWUgaW5zdGVhZCBvZiBhIG51bWJlci4gSWYgUENSRTJfRFVQTkFNRVMgaXMgc2V0IGFuZCB0aGVyZSBhcmUgZHVwbGljYXRlCituYW1lcywgdGhlc2UgZnVuY3Rpb25zIHNjYW4gYWxsIHRoZSBncm91cHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgYW5kIHJldHVybiB0aGUKK2ZpcnN0IG5hbWVkIHN0cmluZyB0aGF0IGlzIHNldC4KKy5QCitJZiB0aGVyZSBhcmUgbm8gZ3JvdXBzIHdpdGggdGhlIGdpdmVuIG5hbWUsIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HIGlzCityZXR1cm5lZC4gSWYgYWxsIGdyb3VwcyB3aXRoIHRoZSBuYW1lIGhhdmUgbnVtYmVycyB0aGF0IGFyZSBncmVhdGVyIHRoYW4gdGhlCitudW1iZXIgb2Ygc2xvdHMgaW4gdGhlIG92ZWN0b3IsIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFIGlzIHJldHVybmVkLiBJZiB0aGVyZQoraXMgYXQgbGVhc3Qgb25lIGdyb3VwIHdpdGggYSBzbG90IGluIHRoZSBvdmVjdG9yLCBidXQgbm8gZ3JvdXAgaXMgZm91bmQgdG8gYmUKK3NldCwgUENSRTJfRVJST1JfVU5TRVQgaXMgcmV0dXJuZWQuCisuUAorXGZCV2FybmluZzpcZlAgSWYgdGhlIHBhdHRlcm4gdXNlcyB0aGUgKD98IGZlYXR1cmUgdG8gc2V0IHVwIG11bHRpcGxlCitzdWJwYXR0ZXJucyB3aXRoIHRoZSBzYW1lIG51bWJlciwgYXMgZGVzY3JpYmVkIGluIHRoZQorLlwiIEhUTUwgPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwjZHVwc3VicGF0dGVybm51bWJlciI+CisuXCIgPC9hPgorc2VjdGlvbiBvbiBkdXBsaWNhdGUgc3VicGF0dGVybiBudW1iZXJzCisuXCIKK2luIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGF0dGVyblxmUAorLlwiCitwYWdlLCB5b3UgY2Fubm90IHVzZSBuYW1lcyB0byBkaXN0aW5ndWlzaCB0aGUgZGlmZmVyZW50IHN1YnBhdHRlcm5zLCBiZWNhdXNlCituYW1lcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBjb21waWxlZCBjb2RlLiBUaGUgbWF0Y2hpbmcgcHJvY2VzcyB1c2VzIG9ubHkKK251bWJlcnMuIEZvciB0aGlzIHJlYXNvbiwgdGhlIHVzZSBvZiBkaWZmZXJlbnQgbmFtZXMgZm9yIHN1YnBhdHRlcm5zIG9mIHRoZQorc2FtZSBudW1iZXIgY2F1c2VzIGFuIGVycm9yIGF0IGNvbXBpbGUgdGltZS4KKy4KKy4KKy5TSCAiQ1JFQVRJTkcgQSBORVcgU1RSSU5HIFdJVEggU1VCU1RJVFVUSU9OUyIKKy5ycworLnNwCisubmYKKy5CIGludCBwY3JlMl9zdWJzdGl0dXRlKGNvbnN0IHBjcmUyX2NvZGUgKlxmSWNvZGVcZlAsIFBDUkUyX1NQVFIgXGZJc3ViamVjdFxmUCwKKy5CICIgIFBDUkUyX1NJWkUgXGZJbGVuZ3RoXGZQLCBQQ1JFMl9TSVpFIFxmSXN0YXJ0b2Zmc2V0XGZQLCIKKy5CICIgIHVpbnQzMl90IFxmSW9wdGlvbnNcZlAsIHBjcmUyX21hdGNoX2RhdGEgKlxmSW1hdGNoX2RhdGFcZlAsIgorLkIgIiAgcGNyZTJfbWF0Y2hfY29udGV4dCAqXGZJbWNvbnRleHRcZlAsIFBDUkUyX1NQVFIgXGZJcmVwbGFjZW1lbnRcZlAsIgorLkIgIiAgUENSRTJfU0laRSBcZklybGVuZ3RoXGZQLCBQQ1JFMl9VQ0hBUiAqXGZJb3V0cHV0YnVmZmVyXHpmUCwiCisuQiAiICBQQ1JFMl9TSVpFICpcZklvdXRsZW5ndGhwdHJcZlApOyIKKy5maQorLlAKK1RoaXMgZnVuY3Rpb24gY2FsbHMgXGZCcGNyZTJfbWF0Y2goKVxmUCBhbmQgdGhlbiBtYWtlcyBhIGNvcHkgb2YgdGhlIHN1YmplY3QKK3N0cmluZyBpbiBcZklvdXRwdXRidWZmZXJcZlAsIHJlcGxhY2luZyB0aGUgcGFydCB0aGF0IHdhcyBtYXRjaGVkIHdpdGggdGhlCitcZklyZXBsYWNlbWVudFxmUCBzdHJpbmcsIHdob3NlIGxlbmd0aCBpcyBzdXBwbGllZCBpbiBcZkJybGVuZ3RoXGZQLiBUaGlzIGNhbgorYmUgZ2l2ZW4gYXMgUENSRTJfWkVST19URVJNSU5BVEVEIGZvciBhIHplcm8tdGVybWluYXRlZCBzdHJpbmcuIE1hdGNoZXMgaW4KK3doaWNoIGEgXGVLIGl0ZW0gaW4gYSBsb29rYWhlYWQgaW4gdGhlIHBhdHRlcm4gY2F1c2VzIHRoZSBtYXRjaCB0byBlbmQgYmVmb3JlCitpdCBzdGFydHMgYXJlIG5vdCBzdXBwb3J0ZWQsIGFuZCBnaXZlIHJpc2UgdG8gYW4gZXJyb3IgcmV0dXJuLgorLlAKK1RoZSBmaXJzdCBzZXZlbiBhcmd1bWVudHMgb2YgXGZCcGNyZTJfc3Vic3RpdHV0ZSgpXGZQIGFyZSB0aGUgc2FtZSBhcyBmb3IKK1xmQnBjcmUyX21hdGNoKClcZlAsIGV4Y2VwdCB0aGF0IHRoZSBwYXJ0aWFsIG1hdGNoaW5nIG9wdGlvbnMgYXJlIG5vdAorcGVybWl0dGVkLCBhbmQgXGZJbWF0Y2hfZGF0YVxmUCBtYXkgYmUgcGFzc2VkIGFzIE5VTEwsIGluIHdoaWNoIGNhc2UgYSBtYXRjaAorZGF0YSBibG9jayBpcyBvYnRhaW5lZCBhbmQgZnJlZWQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHVzaW5nIG1lbW9yeSBtYW5hZ2VtZW50CitmdW5jdGlvbnMgZnJvbSB0aGUgbWF0Y2ggY29udGV4dCwgaWYgcHJvdmlkZWQsIG9yIGVsc2UgdGhvc2UgdGhhdCB3ZXJlIHVzZWQgdG8KK2FsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGNvbXBpbGVkIGNvZGUuCisuUAorVGhlIFxmSW91dGxlbmd0aHB0clxmUCBhcmd1bWVudCBtdXN0IHBvaW50IHRvIGEgdmFyaWFibGUgdGhhdCBjb250YWlucyB0aGUKK2xlbmd0aCwgaW4gY29kZSB1bml0cywgb2YgdGhlIG91dHB1dCBidWZmZXIuIElmIHRoZSBmdW5jdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGUKK3ZhbHVlIGlzIHVwZGF0ZWQgdG8gY29udGFpbiB0aGUgbGVuZ3RoIG9mIHRoZSBuZXcgc3RyaW5nLCBleGNsdWRpbmcgdGhlCit0cmFpbGluZyB6ZXJvIHRoYXQgaXMgYXV0b21hdGljYWxseSBhZGRlZC4KKy5QCitJZiB0aGUgZnVuY3Rpb24gaXMgbm90IHN1Y2Nlc3NmdWwsIHRoZSB2YWx1ZSBzZXQgdmlhIFxmSW91dGxlbmd0aHB0clxmUCBkZXBlbmRzCitvbiB0aGUgdHlwZSBvZiBlcnJvci4gRm9yIHN5bnRheCBlcnJvcnMgaW4gdGhlIHJlcGxhY2VtZW50IHN0cmluZywgdGhlIHZhbHVlIGlzCit0aGUgb2Zmc2V0IGluIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgd2hlcmUgdGhlIGVycm9yIHdhcyBkZXRlY3RlZC4gRm9yIG90aGVyCitlcnJvcnMsIHRoZSB2YWx1ZSBpcyBQQ1JFMl9VTlNFVCBieSBkZWZhdWx0LiBUaGlzIGluY2x1ZGVzIHRoZSBjYXNlIG9mIHRoZQorb3V0cHV0IGJ1ZmZlciBiZWluZyB0b28gc21hbGwsIHVubGVzcyBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCBpcyBzZXQKKyhzZWUgYmVsb3cpLCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBpcyB0aGUgbWluaW11bSBsZW5ndGggbmVlZGVkLCBpbmNsdWRpbmcKK3NwYWNlIGZvciB0aGUgdHJhaWxpbmcgemVyby4gTm90ZSB0aGF0IGluIG9yZGVyIHRvIGNvbXB1dGUgdGhlIHJlcXVpcmVkIGxlbmd0aCwKK1xmQnBjcmUyX3N1YnN0aXR1dGUoKVxmUCBoYXMgdG8gc2ltdWxhdGUgYWxsIHRoZSBtYXRjaGluZyBhbmQgY29weWluZywgaW5zdGVhZAorb2YgZ2l2aW5nIGFuIGVycm9yIHJldHVybiBhcyBzb29uIGFzIHRoZSBidWZmZXIgb3ZlcmZsb3dzLiBOb3RlIGFsc28gdGhhdCB0aGUKK2xlbmd0aCBpcyBpbiBjb2RlIHVuaXRzLCBub3QgYnl0ZXMuCisuUAorSW4gdGhlIHJlcGxhY2VtZW50IHN0cmluZywgd2hpY2ggaXMgaW50ZXJwcmV0ZWQgYXMgYSBVVEYgc3RyaW5nIGluIFVURiBtb2RlLAorYW5kIGlzIGNoZWNrZWQgZm9yIFVURiB2YWxpZGl0eSB1bmxlc3MgdGhlIFBDUkUyX05PX1VURl9DSEVDSyBvcHRpb24gaXMgc2V0LCBhCitkb2xsYXIgY2hhcmFjdGVyIGlzIGFuIGVzY2FwZSBjaGFyYWN0ZXIgdGhhdCBjYW4gc3BlY2lmeSB0aGUgaW5zZXJ0aW9uIG9mCitjaGFyYWN0ZXJzIGZyb20gY2FwdHVyaW5nIGdyb3VwcyBvciAoKk1BUkspIGl0ZW1zIGluIHRoZSBwYXR0ZXJuLiBUaGUgZm9sbG93aW5nCitmb3JtcyBhcmUgYWx3YXlzIHJlY29nbml6ZWQ6Cisuc3AKKyAgJCQgICAgICAgICAgICAgICAgICBpbnNlcnQgYSBkb2xsYXIgY2hhcmFjdGVyCisgICQ8bj4gb3IgJHs8bj59ICAgICAgaW5zZXJ0IHRoZSBjb250ZW50cyBvZiBncm91cCA8bj4KKyAgJCpNQVJLIG9yICR7Kk1BUkt9ICBpbnNlcnQgdGhlIG5hbWUgb2YgdGhlIGxhc3QgKCpNQVJLKSBlbmNvdW50ZXJlZAorLnNwCitFaXRoZXIgYSBncm91cCBudW1iZXIgb3IgYSBncm91cCBuYW1lIGNhbiBiZSBnaXZlbiBmb3IgPG4+LiBDdXJseSBicmFja2V0cyBhcmUKK3JlcXVpcmVkIG9ubHkgaWYgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgd291bGQgYmUgaW50ZXJwcmV0ZWQgYXMgcGFydCBvZiB0aGUKK251bWJlciBvciBuYW1lLiBUaGUgbnVtYmVyIG1heSBiZSB6ZXJvIHRvIGluY2x1ZGUgdGhlIGVudGlyZSBtYXRjaGVkIHN0cmluZy4KK0ZvciBleGFtcGxlLCBpZiB0aGUgcGF0dGVybiBhKGIpYyBpcyBtYXRjaGVkIHdpdGggIj1hYmM9IiBhbmQgdGhlIHJlcGxhY2VtZW50CitzdHJpbmcgIiskMSQwJDErIiwgdGhlIHJlc3VsdCBpcyAiPStiYWJjYis9Ii4KKy5QCitUaGUgZmFjaWxpdHkgZm9yIGluc2VydGluZyBhICgqTUFSSykgbmFtZSBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHNpbXBsZQorc2ltdWx0YW5lb3VzIHN1YnN0aXR1dGlvbnMsIGFzIHRoaXMgXGZCcGNyZTJ0ZXN0XGZQIGV4YW1wbGUgc2hvd3M6Cisuc3AKKyAgLygqOnBlYXIpYXBwbGV8KCo6b3JhbmdlKWxlbW9uL2cscmVwbGFjZT0keypNQVJLfQorICAgICAgYXBwbGUgbGVtb24KKyAgIDI6IHBlYXIgb3JhbmdlCisuc3AKK0FzIHdlbGwgYXMgdGhlIHVzdWFsIG9wdGlvbnMgZm9yIFxmQnBjcmUyX21hdGNoKClcZlAsIGEgbnVtYmVyIG9mIGFkZGl0aW9uYWwKK29wdGlvbnMgY2FuIGJlIHNldCBpbiB0aGUgXGZJb3B0aW9uc1xmUCBhcmd1bWVudC4KKy5QCitQQ1JFMl9TVUJTVElUVVRFX0dMT0JBTCBjYXVzZXMgdGhlIGZ1bmN0aW9uIHRvIGl0ZXJhdGUgb3ZlciB0aGUgc3ViamVjdCBzdHJpbmcsCityZXBsYWNpbmcgZXZlcnkgbWF0Y2hpbmcgc3Vic3RyaW5nLiBJZiB0aGlzIGlzIG5vdCBzZXQsIG9ubHkgdGhlIGZpcnN0IG1hdGNoaW5nCitzdWJzdHJpbmcgaXMgcmVwbGFjZWQuIElmIGFueSBtYXRjaGVkIHN1YnN0cmluZyBoYXMgemVybyBsZW5ndGgsIGFmdGVyIHRoZQorc3Vic3RpdHV0aW9uIGhhcyBoYXBwZW5lZCwgYW4gYXR0ZW1wdCB0byBmaW5kIGEgbm9uLWVtcHR5IG1hdGNoIGF0IHRoZSBzYW1lCitwb3NpdGlvbiBpcyBwZXJmb3JtZWQuIElmIHRoaXMgaXMgbm90IHN1Y2Nlc3NmdWwsIHRoZSBjdXJyZW50IHBvc2l0aW9uIGlzCithZHZhbmNlZCBieSBvbmUgY2hhcmFjdGVyIGV4Y2VwdCB3aGVuIENSTEYgaXMgYSB2YWxpZCBuZXdsaW5lIHNlcXVlbmNlIGFuZCB0aGUKK25leHQgdHdvIGNoYXJhY3RlcnMgYXJlIENSLCBMRi4gSW4gdGhpcyBjYXNlLCB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhZHZhbmNlZAorYnkgdHdvIGNoYXJhY3RlcnMuCisuUAorUENSRTJfU1VCU1RJVFVURV9PVkVSRkxPV19MRU5HVEggY2hhbmdlcyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgb3V0cHV0IGJ1ZmZlciBpcwordG9vIHNtYWxsLiBUaGUgZGVmYXVsdCBhY3Rpb24gaXMgdG8gcmV0dXJuIFBDUkUyX0VSUk9SX05PTUVNT1JZIGltbWVkaWF0ZWx5LiBJZgordGhpcyBvcHRpb24gaXMgc2V0LCBob3dldmVyLCBcZkJwY3JlMl9zdWJzdGl0dXRlKClcZlAgY29udGludWVzIHRvIGdvIHRocm91Z2gKK3RoZSBtb3Rpb25zIG9mIG1hdGNoaW5nIGFuZCBzdWJzdGl0dXRpbmcgKHdpdGhvdXQsIG9mIGNvdXJzZSwgd3JpdGluZyBhbnl0aGluZykKK2luIG9yZGVyIHRvIGNvbXB1dGUgdGhlIHNpemUgb2YgYnVmZmVyIHRoYXQgaXMgbmVlZGVkLiBUaGlzIHZhbHVlIGlzIHBhc3NlZAorYmFjayB2aWEgdGhlIFxmSW91dGxlbmd0aHB0clxmUCB2YXJpYWJsZSwgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBmdW5jdGlvbiBzdGlsbAorYmVpbmcgUENSRTJfRVJST1JfTk9NRU1PUlkuCisuUAorUGFzc2luZyBhIGJ1ZmZlciBzaXplIG9mIHplcm8gaXMgYSBwZXJtaXR0ZWQgd2F5IG9mIGZpbmRpbmcgb3V0IGhvdyBtdWNoIG1lbW9yeQoraXMgbmVlZGVkIGZvciBnaXZlbiBzdWJzdGl0dXRpb24uIEhvd2V2ZXIsIHRoaXMgZG9lcyBtZWFuIHRoYXQgdGhlIGVudGlyZQorb3BlcmF0aW9uIGlzIGNhcnJpZWQgb3V0IHR3aWNlLiBEZXBlbmRpbmcgb24gdGhlIGFwcGxpY2F0aW9uLCBpdCBtYXkgYmUgbW9yZQorZWZmaWNpZW50IHRvIGFsbG9jYXRlIGEgbGFyZ2UgYnVmZmVyIGFuZCBmcmVlIHRoZSBleGNlc3MgYWZ0ZXJ3YXJkcywgaW5zdGVhZCBvZgordXNpbmcgUENSRTJfU1VCU1RJVFVURV9PVkVSRkxPV19MRU5HVEguCisuUAorUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUIGNhdXNlcyByZWZlcmVuY2VzIHRvIGNhcHR1cmluZyBncm91cHMgdGhhdCBkbworbm90IGFwcGVhciBpbiB0aGUgcGF0dGVybiB0byBiZSB0cmVhdGVkIGFzIHVuc2V0IGdyb3Vwcy4gVGhpcyBvcHRpb24gc2hvdWxkIGJlCit1c2VkIHdpdGggY2FyZSwgYmVjYXVzZSBpdCBtZWFucyB0aGF0IGEgdHlwbyBpbiBhIGdyb3VwIG5hbWUgb3IgbnVtYmVyIG5vCitsb25nZXIgY2F1c2VzIHRoZSBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORyBlcnJvci4KKy5QCitQQ1JFMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZIGNhdXNlcyB1bnNldCBjYXB0dXJpbmcgZ3JvdXBzIChpbmNsdWRpbmcgdW5rbm93bgorZ3JvdXBzIHdoZW4gUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUIGlzIHNldCkgdG8gYmUgdHJlYXRlZCBhcyBlbXB0eQorc3RyaW5ncyB3aGVuIGluc2VydGVkIGFzIGRlc2NyaWJlZCBhYm92ZS4gSWYgdGhpcyBvcHRpb24gaXMgbm90IHNldCwgYW4gYXR0ZW1wdAordG8gaW5zZXJ0IGFuIHVuc2V0IGdyb3VwIGNhdXNlcyB0aGUgUENSRTJfRVJST1JfVU5TRVQgZXJyb3IuIFRoaXMgb3B0aW9uIGRvZXMKK25vdCBpbmZsdWVuY2UgdGhlIGV4dGVuZGVkIHN1YnN0aXR1dGlvbiBzeW50YXggZGVzY3JpYmVkIGJlbG93LgorLlAKK1BDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUQgY2F1c2VzIGV4dHJhIHByb2Nlc3NpbmcgdG8gYmUgYXBwbGllZCB0byB0aGUKK3JlcGxhY2VtZW50IHN0cmluZy4gV2l0aG91dCB0aGlzIG9wdGlvbiwgb25seSB0aGUgZG9sbGFyIGNoYXJhY3RlciBpcyBzcGVjaWFsLAorYW5kIG9ubHkgdGhlIGdyb3VwIGluc2VydGlvbiBmb3JtcyBsaXN0ZWQgYWJvdmUgYXJlIHZhbGlkLiBXaGVuCitQQ1JFMl9TVUJTVElUVVRFX0VYVEVOREVEIGlzIHNldCwgdHdvIHRoaW5ncyBjaGFuZ2U6CisuUAorRmlyc3RseSwgYmFja3NsYXNoIGluIGEgcmVwbGFjZW1lbnQgc3RyaW5nIGlzIGludGVycHJldGVkIGFzIGFuIGVzY2FwZQorY2hhcmFjdGVyLiBUaGUgdXN1YWwgZm9ybXMgc3VjaCBhcyBcZW4gb3IgXGV4e2RkZH0gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeQorcGFydGljdWxhciBjaGFyYWN0ZXIgY29kZXMsIGFuZCBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYW55IG5vbi1hbHBoYW51bWVyaWMKK2NoYXJhY3RlciBxdW90ZXMgdGhhdCBjaGFyYWN0ZXIuIEV4dGVuZGVkIHF1b3RpbmcgY2FuIGJlIGNvZGVkIHVzaW5nIFxlUS4uLlxlRSwKK2V4YWN0bHkgYXMgaW4gcGF0dGVybiBzdHJpbmdzLgorLlAKK1RoZXJlIGFyZSBhbHNvIGZvdXIgZXNjYXBlIHNlcXVlbmNlcyBmb3IgZm9yY2luZyB0aGUgY2FzZSBvZiBpbnNlcnRlZCBsZXR0ZXJzLgorVGhlIGluc2VydGlvbiBtZWNoYW5pc20gaGFzIHRocmVlIHN0YXRlczogbm8gY2FzZSBmb3JjaW5nLCBmb3JjZSB1cHBlciBjYXNlLAorYW5kIGZvcmNlIGxvd2VyIGNhc2UuIFRoZSBlc2NhcGUgc2VxdWVuY2VzIGNoYW5nZSB0aGUgY3VycmVudCBzdGF0ZTogXGVVIGFuZAorXGVMIGNoYW5nZSB0byB1cHBlciBvciBsb3dlciBjYXNlIGZvcmNpbmcsIHJlc3BlY3RpdmVseSwgYW5kIFxlRSAod2hlbiBub3QKK3Rlcm1pbmF0aW5nIGEgXGVRIHF1b3RlZCBzZXF1ZW5jZSkgcmV2ZXJ0cyB0byBubyBjYXNlIGZvcmNpbmcuIFRoZSBzZXF1ZW5jZXMKK1xldSBhbmQgXGVsIGZvcmNlIHRoZSBuZXh0IGNoYXJhY3RlciAoaWYgaXQgaXMgYSBsZXR0ZXIpIHRvIHVwcGVyIG9yIGxvd2VyCitjYXNlLCByZXNwZWN0aXZlbHksIGFuZCB0aGVuIHRoZSBzdGF0ZSBhdXRvbWF0aWNhbGx5IHJldmVydHMgdG8gbm8gY2FzZQorZm9yY2luZy4gQ2FzZSBmb3JjaW5nIGFwcGxpZXMgdG8gYWxsIGluc2VydGVkICBjaGFyYWN0ZXJzLCBpbmNsdWRpbmcgdGhvc2UgZnJvbQorY2FwdHVyZWQgZ3JvdXBzIGFuZCBsZXR0ZXJzIHdpdGhpbiBcZVEuLi5cZUUgcXVvdGVkIHNlcXVlbmNlcy4KKy5QCitOb3RlIHRoYXQgY2FzZSBmb3JjaW5nIHNlcXVlbmNlcyBzdWNoIGFzIFxlVS4uLlxlRSBkbyBub3QgbmVzdC4gRm9yIGV4YW1wbGUsCit0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgIlxlVWFhXGVMQkJcZUVjY1xlRSIgaXMgIkFBYmJjYyI7IHRoZSBmaW5hbCBcZUUgaGFzIG5vCitlZmZlY3QuCisuUAorVGhlIHNlY29uZCBlZmZlY3Qgb2Ygc2V0dGluZyBQQ1JFMl9TVUJTVElUVVRFX0VYVEVOREVEIGlzIHRvIGFkZCBtb3JlCitmbGV4aWJpbGl0eSB0byBncm91cCBzdWJzdGl0dXRpb24uIFRoZSBzeW50YXggaXMgc2ltaWxhciB0byB0aGF0IHVzZWQgYnkgQmFzaDoKKy5zcAorICAkezxuPjotPHN0cmluZz59CisgICR7PG4+Ois8c3RyaW5nMT46PHN0cmluZzI+fQorLnNwCitBcyBiZWZvcmUsIDxuPiBtYXkgYmUgYSBncm91cCBudW1iZXIgb3IgYSBuYW1lLiBUaGUgZmlyc3QgZm9ybSBzcGVjaWZpZXMgYQorZGVmYXVsdCB2YWx1ZS4gSWYgZ3JvdXAgPG4+IGlzIHNldCwgaXRzIHZhbHVlIGlzIGluc2VydGVkOyBpZiBub3QsIDxzdHJpbmc+IGlzCitleHBhbmRlZCBhbmQgdGhlIHJlc3VsdCBpbnNlcnRlZC4gVGhlIHNlY29uZCBmb3JtIHNwZWNpZmllcyBzdHJpbmdzIHRoYXQgYXJlCitleHBhbmRlZCBhbmQgaW5zZXJ0ZWQgd2hlbiBncm91cCA8bj4gaXMgc2V0IG9yIHVuc2V0LCByZXNwZWN0aXZlbHkuIFRoZSBmaXJzdAorZm9ybSBpcyBqdXN0IGEgY29udmVuaWVudCBzaG9ydGhhbmQgZm9yCisuc3AKKyAgJHs8bj46KyR7PG4+fTo8c3RyaW5nPn0KKy5zcAorQmFja3NsYXNoIGNhbiBiZSB1c2VkIHRvIGVzY2FwZSBjb2xvbnMgYW5kIGNsb3NpbmcgY3VybHkgYnJhY2tldHMgaW4gdGhlCityZXBsYWNlbWVudCBzdHJpbmdzLiBBIGNoYW5nZSBvZiB0aGUgY2FzZSBmb3JjaW5nIHN0YXRlIHdpdGhpbiBhIHJlcGxhY2VtZW50CitzdHJpbmcgcmVtYWlucyBpbiBmb3JjZSBhZnRlcndhcmRzLCBhcyBzaG93biBpbiB0aGlzIFxmQnBjcmUydGVzdFxmUCBleGFtcGxlOgorLnNwCisgIC8oc29tZSk/KGJvZHkpL3N1YnN0aXR1dGVfZXh0ZW5kZWQscmVwbGFjZT0kezE6K1xlVTpcZUx9SGVMTG8KKyAgICAgIGJvZHkKKyAgIDE6IGhlbGxvCisgICAgICBzb21lYm9keQorICAgMTogSEVMTE8KKy5zcAorVGhlIFBDUkUyX1NVQlNUSVRVVEVfVU5TRVRfRU1QVFkgb3B0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGVzZSBleHRlbmRlZAorc3Vic3RpdHV0aW9ucy4gSG93ZXZlciwgUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUIGRvZXMgY2F1c2UgdW5rbm93bgorZ3JvdXBzIGluIHRoZSBleHRlbmRlZCBzeW50YXggZm9ybXMgdG8gYmUgdHJlYXRlZCBhcyB1bnNldC4KKy5QCitJZiBzdWNjZXNzZnVsLCBcZkJwY3JlMl9zdWJzdGl0dXRlKClcZlAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlcGxhY2VtZW50cyB0aGF0Cit3ZXJlIG1hZGUuIFRoaXMgbWF5IGJlIHplcm8gaWYgbm8gbWF0Y2hlcyB3ZXJlIGZvdW5kLCBhbmQgaXMgbmV2ZXIgZ3JlYXRlciB0aGFuCisxIHVubGVzcyBQQ1JFMl9TVUJTVElUVVRFX0dMT0JBTCBpcyBzZXQuCisuUAorSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuIEV4Y2VwdCBmb3IKK1BDUkUyX0VSUk9SX05PTUFUQ0ggKHdoaWNoIGlzIG5ldmVyIHJldHVybmVkKSwgZXJyb3JzIGZyb20gXGZCcGNyZTJfbWF0Y2goKVxmUAorYXJlIHBhc3NlZCBzdHJhaWdodCBiYWNrLgorLlAKK1BDUkUyX0VSUk9SX05PU1VCU1RSSU5HIGlzIHJldHVybmVkIGZvciBhIG5vbi1leGlzdGVudCBzdWJzdHJpbmcgaW5zZXJ0aW9uLAordW5sZXNzIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCBpcyBzZXQuCisuUAorUENSRTJfRVJST1JfVU5TRVQgaXMgcmV0dXJuZWQgZm9yIGFuIHVuc2V0IHN1YnN0cmluZyBpbnNlcnRpb24gKGluY2x1ZGluZyBhbgordW5rbm93biBzdWJzdHJpbmcgd2hlbiBQQ1JFMl9TVUJTVElUVVRFX1VOS05PV05fVU5TRVQgaXMgc2V0KSB3aGVuIHRoZSBzaW1wbGUKKyhub24tZXh0ZW5kZWQpIHN5bnRheCBpcyB1c2VkIGFuZCBQQ1JFMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZIGlzIG5vdCBzZXQuCisuUAorUENSRTJfRVJST1JfTk9NRU1PUlkgaXMgcmV0dXJuZWQgaWYgdGhlIG91dHB1dCBidWZmZXIgaXMgbm90IGJpZyBlbm91Z2guIElmIHRoZQorUENSRTJfU1VCU1RJVFVURV9PVkVSRkxPV19MRU5HVEggb3B0aW9uIGlzIHNldCwgdGhlIHNpemUgb2YgYnVmZmVyIHRoYXQgaXMKK25lZWRlZCBpcyByZXR1cm5lZCB2aWEgXGZJb3V0bGVuZ3RocHRyXGZQLiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBoYXBwZW4gYnkKK2RlZmF1bHQuCisuUAorUENSRTJfRVJST1JfQkFEUkVQTEFDRU1FTlQgaXMgdXNlZCBmb3IgbWlzY2VsbGFuZW91cyBzeW50YXggZXJyb3JzIGluIHRoZQorcmVwbGFjZW1lbnQgc3RyaW5nLCB3aXRoIG1vcmUgcGFydGljdWxhciBlcnJvcnMgYmVpbmcgUENSRTJfRVJST1JfQkFEUkVQRVNDQVBFCisoaW52YWxpZCBlc2NhcGUgc2VxdWVuY2UpLCBQQ1JFMl9FUlJPUl9SRVBNSVNTSU5HX0JSQUNFIChjbG9zaW5nIGN1cmx5IGJyYWNrZXQKK25vdCBmb3VuZCksIFBDUkUyX0JBRFNVQlNUSVRVVElPTiAoc3ludGF4IGVycm9yIGluIGV4dGVuZGVkIGdyb3VwCitzdWJzdGl0dXRpb24pLCBhbmQgUENSRTJfQkFEU1VCUEFUVEVSTiAodGhlIHBhdHRlcm4gbWF0Y2ggZW5kZWQgYmVmb3JlIGl0CitzdGFydGVkLCB3aGljaCBjYW4gaGFwcGVuIGlmIFxlSyBpcyB1c2VkIGluIGFuIGFzc2VydGlvbikuCisuUAorQXMgZm9yIGFsbCBQQ1JFMiBlcnJvcnMsIGEgdGV4dCBtZXNzYWdlIHRoYXQgZGVzY3JpYmVzIHRoZSBlcnJvciBjYW4gYmUKK29idGFpbmVkIGJ5IGNhbGxpbmcgXGZCcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKVxmUC4KKy4KKy4KKy5TSCAiRFVQTElDQVRFIFNVQlBBVFRFUk4gTkFNRVMiCisucnMKKy5zcAorLm5mCisuQiBpbnQgcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuKGNvbnN0IHBjcmUyX2NvZGUgKlxmSWNvZGVcZlAsCisuQiAiICBQQ1JFMl9TUFRSIFxmSW5hbWVcZlAsIFBDUkUyX1NQVFIgKlxmSWZpcnN0XGZQLCBQQ1JFMl9TUFRSICpcZklsYXN0XGZQKTsiCisuZmkKKy5QCitXaGVuIGEgcGF0dGVybiBpcyBjb21waWxlZCB3aXRoIHRoZSBQQ1JFMl9EVVBOQU1FUyBvcHRpb24sIG5hbWVzIGZvcgorc3VicGF0dGVybnMgYXJlIG5vdCByZXF1aXJlZCB0byBiZSB1bmlxdWUuIER1cGxpY2F0ZSBuYW1lcyBhcmUgYWx3YXlzIGFsbG93ZWQKK2ZvciBzdWJwYXR0ZXJucyB3aXRoIHRoZSBzYW1lIG51bWJlciwgY3JlYXRlZCBieSB1c2luZyB0aGUgKD98IGZlYXR1cmUuIEluZGVlZCwKK2lmIHN1Y2ggc3VicGF0dGVybnMgYXJlIG5hbWVkLCB0aGV5IGFyZSByZXF1aXJlZCB0byB1c2UgdGhlIHNhbWUgbmFtZXMuCisuUAorTm9ybWFsbHksIHBhdHRlcm5zIHdpdGggZHVwbGljYXRlIG5hbWVzIGFyZSBzdWNoIHRoYXQgaW4gYW55IG9uZSBtYXRjaCwgb25seQorb25lIG9mIHRoZSBuYW1lZCBzdWJwYXR0ZXJucyBwYXJ0aWNpcGF0ZXMuIEFuIGV4YW1wbGUgaXMgc2hvd24gaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwYXR0ZXJuXGZQCisuXCIKK2RvY3VtZW50YXRpb24uCisuUAorV2hlbiBkdXBsaWNhdGVzIGFyZSBwcmVzZW50LCBcZkJwY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUoKVxmUCBhbmQKK1xmQnBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lKClcZlAgcmV0dXJuIHRoZSBmaXJzdCBzdWJzdHJpbmcgY29ycmVzcG9uZGluZyB0bwordGhlIGdpdmVuIG5hbWUgdGhhdCBpcyBzZXQuIE9ubHkgaWYgbm9uZSBhcmUgc2V0IGlzIFBDUkUyX0VSUk9SX1VOU0VUIGlzCityZXR1cm5lZC4gVGhlIFxmQnBjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lKClcZlAgZnVuY3Rpb24gcmV0dXJucyB0aGUKK2Vycm9yIFBDUkUyX0VSUk9SX05PVU5JUVVFU1VCU1RSSU5HIHdoZW4gdGhlcmUgYXJlIGR1cGxpY2F0ZSBuYW1lcy4KKy5QCitJZiB5b3Ugd2FudCB0byBnZXQgZnVsbCBkZXRhaWxzIG9mIGFsbCBjYXB0dXJlZCBzdWJzdHJpbmdzIGZvciBhIGdpdmVuIG5hbWUsCit5b3UgbXVzdCB1c2UgdGhlIFxmQnBjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2NhbigpXGZQIGZ1bmN0aW9uLiBUaGUgZmlyc3QKK2FyZ3VtZW50IGlzIHRoZSBjb21waWxlZCBwYXR0ZXJuLCBhbmQgdGhlIHNlY29uZCBpcyB0aGUgbmFtZS4gSWYgdGhlIHRoaXJkIGFuZAorZm91cnRoIGFyZ3VtZW50cyBhcmUgTlVMTCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBncm91cCBudW1iZXIgZm9yIGEgdW5pcXVlCituYW1lLCBvciBQQ1JFMl9FUlJPUl9OT1VOSVFVRVNVQlNUUklORyBvdGhlcndpc2UuCisuUAorV2hlbiB0aGUgdGhpcmQgYW5kIGZvdXJ0aCBhcmd1bWVudHMgYXJlIG5vdCBOVUxMLCB0aGV5IG11c3QgYmUgcG9pbnRlcnMgdG8KK3ZhcmlhYmxlcyB0aGF0IGFyZSB1cGRhdGVkIGJ5IHRoZSBmdW5jdGlvbi4gQWZ0ZXIgaXQgaGFzIHJ1biwgdGhleSBwb2ludCB0byB0aGUKK2ZpcnN0IGFuZCBsYXN0IGVudHJpZXMgaW4gdGhlIG5hbWUtdG8tbnVtYmVyIHRhYmxlIGZvciB0aGUgZ2l2ZW4gbmFtZSwgYW5kIHRoZQorZnVuY3Rpb24gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIGVhY2ggZW50cnkgaW4gY29kZSB1bml0cy4gSW4gYm90aCBjYXNlcywKK1BDUkUyX0VSUk9SX05PU1VCU1RSSU5HIGlzIHJldHVybmVkIGlmIHRoZXJlIGFyZSBubyBlbnRyaWVzIGZvciB0aGUgZ2l2ZW4gbmFtZS4KKy5QCitUaGUgZm9ybWF0IG9mIHRoZSBuYW1lIHRhYmxlIGlzIGRlc2NyaWJlZAorLlwiIEhUTUwgPGEgaHJlZj0iI2luZm9hYm91dHBhdHRlcm4iPgorLlwiIDwvYT4KK2Fib3ZlCisuXCIKK2luIHRoZSBzZWN0aW9uIGVudGl0bGVkIFxmSUluZm9ybWF0aW9uIGFib3V0IGEgcGF0dGVyblxmUC4gR2l2ZW4gYWxsIHRoZQorcmVsZXZhbnQgZW50cmllcyBmb3IgdGhlIG5hbWUsIHlvdSBjYW4gZXh0cmFjdCBlYWNoIG9mIHRoZWlyIG51bWJlcnMsIGFuZCBoZW5jZQordGhlIGNhcHR1cmVkIGRhdGEuCisuCisuCisuU0ggIkZJTkRJTkcgQUxMIFBPU1NJQkxFIE1BVENIRVMgQVQgT05FIFBPU0lUSU9OIgorLnJzCisuc3AKK1RoZSB0cmFkaXRpb25hbCBtYXRjaGluZyBmdW5jdGlvbiB1c2VzIGEgc2ltaWxhciBhbGdvcml0aG0gdG8gUGVybCwgd2hpY2ggc3RvcHMKK3doZW4gaXQgZmluZHMgdGhlIGZpcnN0IG1hdGNoIGF0IGEgZ2l2ZW4gcG9pbnQgaW4gdGhlIHN1YmplY3QuIElmIHlvdSB3YW50IHRvCitmaW5kIGFsbCBwb3NzaWJsZSBtYXRjaGVzLCBvciB0aGUgbG9uZ2VzdCBwb3NzaWJsZSBtYXRjaCBhdCBhIGdpdmVuIHBvc2l0aW9uLAorY29uc2lkZXIgdXNpbmcgdGhlIGFsdGVybmF0aXZlIG1hdGNoaW5nIGZ1bmN0aW9uIChzZWUgYmVsb3cpIGluc3RlYWQuIElmIHlvdQorY2Fubm90IHVzZSB0aGUgYWx0ZXJuYXRpdmUgZnVuY3Rpb24sIHlvdSBjYW4ga2x1ZGdlIGl0IHVwIGJ5IG1ha2luZyB1c2Ugb2YgdGhlCitjYWxsb3V0IGZhY2lsaXR5LCB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJjYWxsb3V0XGZQCisuXCIKK2RvY3VtZW50YXRpb24uCisuUAorV2hhdCB5b3UgaGF2ZSB0byBkbyBpcyB0byBpbnNlcnQgYSBjYWxsb3V0IHJpZ2h0IGF0IHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uCitXaGVuIHlvdXIgY2FsbG91dCBmdW5jdGlvbiBpcyBjYWxsZWQsIGV4dHJhY3QgYW5kIHNhdmUgdGhlIGN1cnJlbnQgbWF0Y2hlZAorc3Vic3RyaW5nLiBUaGVuIHJldHVybiAxLCB3aGljaCBmb3JjZXMgXGZCcGNyZTJfbWF0Y2goKVxmUCB0byBiYWNrdHJhY2sgYW5kIHRyeQorb3RoZXIgYWx0ZXJuYXRpdmVzLiBVbHRpbWF0ZWx5LCB3aGVuIGl0IHJ1bnMgb3V0IG9mIG1hdGNoZXMsCitcZkJwY3JlMl9tYXRjaCgpXGZQIHdpbGwgeWllbGQgUENSRTJfRVJST1JfTk9NQVRDSC4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9ImRmYW1hdGNoIj48L2E+CisuU0ggIk1BVENISU5HIEEgUEFUVEVSTjogVEhFIEFMVEVSTkFUSVZFIEZVTkNUSU9OIgorLnJzCisuc3AKKy5uZgorLkIgaW50IHBjcmUyX2RmYV9tYXRjaChjb25zdCBwY3JlMl9jb2RlICpcZkljb2RlXGZQLCBQQ1JFMl9TUFRSIFxmSXN1YmplY3RcZlAsCisuQiAiICBQQ1JFMl9TSVpFIFxmSWxlbmd0aFxmUCwgUENSRTJfU0laRSBcZklzdGFydG9mZnNldFxmUCwiCisuQiAiICB1aW50MzJfdCBcZklvcHRpb25zXGZQLCBwY3JlMl9tYXRjaF9kYXRhICpcZkltYXRjaF9kYXRhXGZQLCIKKy5CICIgIHBjcmUyX21hdGNoX2NvbnRleHQgKlxmSW1jb250ZXh0XGZQLCIKKy5CICIgIGludCAqXGZJd29ya3NwYWNlXGZQLCBQQ1JFMl9TSVpFIFxmSXdzY291bnRcZlApOyIKKy5maQorLlAKK1RoZSBmdW5jdGlvbiBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCBpcyBjYWxsZWQgdG8gbWF0Y2ggYSBzdWJqZWN0IHN0cmluZworYWdhaW5zdCBhIGNvbXBpbGVkIHBhdHRlcm4sIHVzaW5nIGEgbWF0Y2hpbmcgYWxnb3JpdGhtIHRoYXQgc2NhbnMgdGhlIHN1YmplY3QKK3N0cmluZyBqdXN0IG9uY2UsIGFuZCBkb2VzIG5vdCBiYWNrdHJhY2suIFRoaXMgaGFzIGRpZmZlcmVudCBjaGFyYWN0ZXJpc3RpY3MgdG8KK3RoZSBub3JtYWwgYWxnb3JpdGhtLCBhbmQgaXMgbm90IGNvbXBhdGlibGUgd2l0aCBQZXJsLiBTb21lIG9mIHRoZSBmZWF0dXJlcyBvZgorUENSRTIgcGF0dGVybnMgYXJlIG5vdCBzdXBwb3J0ZWQuIE5ldmVydGhlbGVzcywgdGhlcmUgYXJlIHRpbWVzIHdoZW4gdGhpcyBraW5kCitvZiBtYXRjaGluZyBjYW4gYmUgdXNlZnVsLiBGb3IgYSBkaXNjdXNzaW9uIG9mIHRoZSB0d28gbWF0Y2hpbmcgYWxnb3JpdGhtcywgYW5kCithIGxpc3Qgb2YgZmVhdHVyZXMgdGhhdCBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCBkb2VzIG5vdCBzdXBwb3J0LCBzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJtYXRjaGluZ1xmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLlAKK1RoZSBhcmd1bWVudHMgZm9yIHRoZSBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCBmdW5jdGlvbiBhcmUgdGhlIHNhbWUgYXMgZm9yCitcZkJwY3JlMl9tYXRjaCgpXGZQLCBwbHVzIHR3byBleHRyYXMuIFRoZSBvdmVjdG9yIHdpdGhpbiB0aGUgbWF0Y2ggZGF0YSBibG9jaworaXMgdXNlZCBpbiBhIGRpZmZlcmVudCB3YXksIGFuZCB0aGlzIGlzIGRlc2NyaWJlZCBiZWxvdy4gVGhlIG90aGVyIGNvbW1vbgorYXJndW1lbnRzIGFyZSB1c2VkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IgXGZCcGNyZTJfbWF0Y2goKVxmUCwgc28gdGhlaXIKK2Rlc2NyaXB0aW9uIGlzIG5vdCByZXBlYXRlZCBoZXJlLgorLlAKK1RoZSB0d28gYWRkaXRpb25hbCBhcmd1bWVudHMgcHJvdmlkZSB3b3Jrc3BhY2UgZm9yIHRoZSBmdW5jdGlvbi4gVGhlIHdvcmtzcGFjZQordmVjdG9yIHNob3VsZCBjb250YWluIGF0IGxlYXN0IDIwIGVsZW1lbnRzLiBJdCBpcyB1c2VkIGZvciBrZWVwaW5nIHRyYWNrIG9mCittdWx0aXBsZSBwYXRocyB0aHJvdWdoIHRoZSBwYXR0ZXJuIHRyZWUuIE1vcmUgd29ya3NwYWNlIGlzIG5lZWRlZCBmb3IgcGF0dGVybnMKK2FuZCBzdWJqZWN0cyB3aGVyZSB0aGVyZSBhcmUgYSBsb3Qgb2YgcG90ZW50aWFsIG1hdGNoZXMuCisuUAorSGVyZSBpcyBhbiBleGFtcGxlIG9mIGEgc2ltcGxlIGNhbGwgdG8gXGZCcGNyZTJfZGZhX21hdGNoKClcZlA6Cisuc3AKKyAgaW50IHdzcGFjZVsyMF07CisgIHBjcmUyX21hdGNoX2RhdGEgKm1kID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGUoNCwgTlVMTCk7CisgIGludCByYyA9IHBjcmUyX2RmYV9tYXRjaCgKKyAgICByZSwgICAgICAgICAgICAgLyogcmVzdWx0IG9mIHBjcmUyX2NvbXBpbGUoKSAqLworICAgICJzb21lIHN0cmluZyIsICAvKiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgICAxMSwgICAgICAgICAgICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgICAwLCAgICAgICAgICAgICAgLyogc3RhcnQgYXQgb2Zmc2V0IDAgaW4gdGhlIHN1YmplY3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgLyogZGVmYXVsdCBvcHRpb25zICovCisgICAgbWF0Y2hfZGF0YSwgICAgIC8qIHRoZSBtYXRjaCBkYXRhIGJsb2NrICovCisgICAgTlVMTCwgICAgICAgICAgIC8qIGEgbWF0Y2ggY29udGV4dDsgTlVMTCBtZWFucyB1c2UgZGVmYXVsdHMgKi8KKyAgICB3c3BhY2UsICAgICAgICAgLyogd29ya2luZyBzcGFjZSB2ZWN0b3IgKi8KKyAgICAyMCk7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVsZW1lbnRzIChOT1Qgc2l6ZSBpbiBieXRlcykgKi8KKy4KKy5TUyAiT3B0aW9uIGJpdHMgZm9yIFxmQnBjcmVfZGZhX21hdGNoKClcZlAiCisucnMKKy5zcAorVGhlIHVudXNlZCBiaXRzIG9mIHRoZSBcZklvcHRpb25zXGZQIGFyZ3VtZW50IGZvciBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCBtdXN0CitiZSB6ZXJvLiBUaGUgb25seSBiaXRzIHRoYXQgbWF5IGJlIHNldCBhcmUgUENSRTJfQU5DSE9SRUQsIFBDUkUyX05PVEJPTCwKK1BDUkUyX05PVEVPTCwgUENSRTJfTk9URU1QVFksIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQsIFBDUkUyX05PX1VURl9DSEVDSywKK1BDUkUyX1BBUlRJQUxfSEFSRCwgUENSRTJfUEFSVElBTF9TT0ZULCBQQ1JFMl9ERkFfU0hPUlRFU1QsIGFuZAorUENSRTJfREZBX1JFU1RBUlQuIEFsbCBidXQgdGhlIGxhc3QgZm91ciBvZiB0aGVzZSBhcmUgZXhhY3RseSB0aGUgc2FtZSBhcyBmb3IKK1xmQnBjcmUyX21hdGNoKClcZlAsIHNvIHRoZWlyIGRlc2NyaXB0aW9uIGlzIG5vdCByZXBlYXRlZCBoZXJlLgorLnNwCisgIFBDUkUyX1BBUlRJQUxfSEFSRAorICBQQ1JFMl9QQVJUSUFMX1NPRlQKKy5zcAorVGhlc2UgaGF2ZSB0aGUgc2FtZSBnZW5lcmFsIGVmZmVjdCBhcyB0aGV5IGRvIGZvciBcZkJwY3JlMl9tYXRjaCgpXGZQLCBidXQgdGhlCitkZXRhaWxzIGFyZSBzbGlnaHRseSBkaWZmZXJlbnQuIFdoZW4gUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldCBmb3IKK1xmQnBjcmUyX2RmYV9tYXRjaCgpXGZQLCBpdCByZXR1cm5zIFBDUkUyX0VSUk9SX1BBUlRJQUwgaWYgdGhlIGVuZCBvZiB0aGUKK3N1YmplY3QgaXMgcmVhY2hlZCBhbmQgdGhlcmUgaXMgc3RpbGwgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHBvc3NpYmlsaXR5IHRoYXQKK3JlcXVpcmVzIGFkZGl0aW9uYWwgY2hhcmFjdGVycy4gVGhpcyBoYXBwZW5zIGV2ZW4gaWYgc29tZSBjb21wbGV0ZSBtYXRjaGVzIGhhdmUKK2FscmVhZHkgYmVlbiBmb3VuZC4gV2hlbiBQQ1JFMl9QQVJUSUFMX1NPRlQgaXMgc2V0LCB0aGUgcmV0dXJuIGNvZGUKK1BDUkUyX0VSUk9SX05PTUFUQ0ggaXMgY29udmVydGVkIGludG8gUENSRTJfRVJST1JfUEFSVElBTCBpZiB0aGUgZW5kIG9mIHRoZQorc3ViamVjdCBpcyByZWFjaGVkLCB0aGVyZSBoYXZlIGJlZW4gbm8gY29tcGxldGUgbWF0Y2hlcywgYnV0IHRoZXJlIGlzIHN0aWxsIGF0CitsZWFzdCBvbmUgbWF0Y2hpbmcgcG9zc2liaWxpdHkuIFRoZSBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgdGhhdCB3YXMgaW5zcGVjdGVkCit3aGVuIHRoZSBsb25nZXN0IHBhcnRpYWwgbWF0Y2ggd2FzIGZvdW5kIGlzIHNldCBhcyB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RyaW5nIGluCitib3RoIGNhc2VzLiBUaGVyZSBpcyBhIG1vcmUgZGV0YWlsZWQgZGlzY3Vzc2lvbiBvZiBwYXJ0aWFsIGFuZCBtdWx0aS1zZWdtZW50CittYXRjaGluZywgd2l0aCBleGFtcGxlcywgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwYXJ0aWFsXGZQCisuXCIKK2RvY3VtZW50YXRpb24uCisuc3AKKyAgUENSRTJfREZBX1NIT1JURVNUCisuc3AKK1NldHRpbmcgdGhlIFBDUkUyX0RGQV9TSE9SVEVTVCBvcHRpb24gY2F1c2VzIHRoZSBtYXRjaGluZyBhbGdvcml0aG0gdG8gc3RvcCBhcworc29vbiBhcyBpdCBoYXMgZm91bmQgb25lIG1hdGNoLiBCZWNhdXNlIG9mIHRoZSB3YXkgdGhlIGFsdGVybmF0aXZlIGFsZ29yaXRobQord29ya3MsIHRoaXMgaXMgbmVjZXNzYXJpbHkgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIG1hdGNoIGF0IHRoZSBmaXJzdCBwb3NzaWJsZQorbWF0Y2hpbmcgcG9pbnQgaW4gdGhlIHN1YmplY3Qgc3RyaW5nLgorLnNwCisgIFBDUkUyX0RGQV9SRVNUQVJUCisuc3AKK1doZW4gXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgcmV0dXJucyBhIHBhcnRpYWwgbWF0Y2gsIGl0IGlzIHBvc3NpYmxlIHRvIGNhbGwgaXQKK2FnYWluLCB3aXRoIGFkZGl0aW9uYWwgc3ViamVjdCBjaGFyYWN0ZXJzLCBhbmQgaGF2ZSBpdCBjb250aW51ZSB3aXRoIHRoZSBzYW1lCittYXRjaC4gVGhlIFBDUkUyX0RGQV9SRVNUQVJUIG9wdGlvbiByZXF1ZXN0cyB0aGlzIGFjdGlvbjsgd2hlbiBpdCBpcyBzZXQsIHRoZQorXGZJd29ya3NwYWNlXGZQIGFuZCBcZkl3c2NvdW50XGZQIG9wdGlvbnMgbXVzdCByZWZlcmVuY2UgdGhlIHNhbWUgdmVjdG9yIGFzCitiZWZvcmUgYmVjYXVzZSBkYXRhIGFib3V0IHRoZSBtYXRjaCBzbyBmYXIgaXMgbGVmdCBpbiB0aGVtIGFmdGVyIGEgcGFydGlhbAorbWF0Y2guIFRoZXJlIGlzIG1vcmUgZGlzY3Vzc2lvbiBvZiB0aGlzIGZhY2lsaXR5IGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGFydGlhbFxmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLgorLgorLlNTICJTdWNjZXNzZnVsIHJldHVybnMgZnJvbSBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCIKKy5ycworLnNwCitXaGVuIFxmQnBjcmUyX2RmYV9tYXRjaCgpXGZQIHN1Y2NlZWRzLCBpdCBtYXkgaGF2ZSBtYXRjaGVkIG1vcmUgdGhhbiBvbmUKK3N1YnN0cmluZyBpbiB0aGUgc3ViamVjdC4gTm90ZSwgaG93ZXZlciwgdGhhdCBhbGwgdGhlIG1hdGNoZXMgZnJvbSBvbmUgcnVuIG9mCit0aGUgZnVuY3Rpb24gc3RhcnQgYXQgdGhlIHNhbWUgcG9pbnQgaW4gdGhlIHN1YmplY3QuIFRoZSBzaG9ydGVyIG1hdGNoZXMgYXJlCithbGwgaW5pdGlhbCBzdWJzdHJpbmdzIG9mIHRoZSBsb25nZXIgbWF0Y2hlcy4gRm9yIGV4YW1wbGUsIGlmIHRoZSBwYXR0ZXJuCisuc3AKKyAgPC4qPgorLnNwCitpcyBtYXRjaGVkIGFnYWluc3QgdGhlIHN0cmluZworLnNwCisgIFRoaXMgaXMgPHNvbWV0aGluZz4gPHNvbWV0aGluZyBlbHNlPiA8c29tZXRoaW5nIGZ1cnRoZXI+IG5vIG1vcmUKKy5zcAordGhlIHRocmVlIG1hdGNoZWQgc3RyaW5ncyBhcmUKKy5zcAorICA8c29tZXRoaW5nPiA8c29tZXRoaW5nIGVsc2U+IDxzb21ldGhpbmcgZnVydGhlcj4KKyAgPHNvbWV0aGluZz4gPHNvbWV0aGluZyBlbHNlPgorICA8c29tZXRoaW5nPgorLnNwCitPbiBzdWNjZXNzLCB0aGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3aGljaCBpcwordGhlIG51bWJlciBvZiBtYXRjaGVkIHN1YnN0cmluZ3MuIFRoZSBvZmZzZXRzIG9mIHRoZSBzdWJzdHJpbmdzIGFyZSByZXR1cm5lZCBpbgordGhlIG92ZWN0b3IsIGFuZCBjYW4gYmUgZXh0cmFjdGVkIGJ5IG51bWJlciBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yCitcZkJwY3JlMl9tYXRjaCgpXGZQLCBidXQgdGhlIG51bWJlcnMgYmVhciBubyByZWxhdGlvbiB0byBhbnkgY2FwdHVyaW5nIGdyb3VwcwordGhhdCBtYXkgZXhpc3QgaW4gdGhlIHBhdHRlcm4sIGJlY2F1c2UgREZBIG1hdGNoaW5nIGRvZXMgbm90IHN1cHBvcnQgZ3JvdXAKK2NhcHR1cmUuCisuUAorQ2FsbHMgdG8gdGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyB0aGF0IGV4dHJhY3Qgc3Vic3RyaW5ncyBieSBuYW1lCityZXR1cm4gdGhlIGVycm9yIFBDUkUyX0VSUk9SX0RGQV9VRlVOQyAodW5zdXBwb3J0ZWQgZnVuY3Rpb24pIGlmIHVzZWQgYWZ0ZXIgYQorREZBIG1hdGNoLiBUaGUgY29udmVuaWVuY2UgZnVuY3Rpb25zIHRoYXQgZXh0cmFjdCBzdWJzdHJpbmdzIGJ5IG51bWJlciBuZXZlcgorcmV0dXJuIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HLCBhbmQgdGhlIG1lYW5pbmdzIG9mIHNvbWUgb3RoZXIgZXJyb3JzIGFyZQorc2xpZ2h0bHkgZGlmZmVyZW50OgorLnNwCisgIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFCisuc3AKK1RoZSBvdmVjdG9yIGlzIG5vdCBiaWcgZW5vdWdoIHRvIGluY2x1ZGUgYSBzbG90IGZvciB0aGUgZ2l2ZW4gc3Vic3RyaW5nIG51bWJlci4KKy5zcAorICBQQ1JFMl9FUlJPUl9VTlNFVAorLnNwCitUaGVyZSBpcyBhIHNsb3QgaW4gdGhlIG92ZWN0b3IgZm9yIHRoaXMgc3Vic3RyaW5nLCBidXQgdGhlcmUgd2VyZSBpbnN1ZmZpY2llbnQKK21hdGNoZXMgdG8gZmlsbCBpdC4KKy5QCitUaGUgbWF0Y2hlZCBzdHJpbmdzIGFyZSBzdG9yZWQgaW4gdGhlIG92ZWN0b3IgaW4gcmV2ZXJzZSBvcmRlciBvZiBsZW5ndGg7IHRoYXQKK2lzLCB0aGUgbG9uZ2VzdCBtYXRjaGluZyBzdHJpbmcgaXMgZmlyc3QuIElmIHRoZXJlIHdlcmUgdG9vIG1hbnkgbWF0Y2hlcyB0byBmaXQKK2ludG8gdGhlIG92ZWN0b3IsIHRoZSB5aWVsZCBvZiB0aGUgZnVuY3Rpb24gaXMgemVybywgYW5kIHRoZSB2ZWN0b3IgaXMgZmlsbGVkCit3aXRoIHRoZSBsb25nZXN0IG1hdGNoZXMuCisuUAorTk9URTogUENSRTIncyAiYXV0by1wb3NzZXNzaWZpY2F0aW9uIiBvcHRpbWl6YXRpb24gdXN1YWxseSBhcHBsaWVzIHRvIGNoYXJhY3RlcgorcmVwZWF0cyBhdCB0aGUgZW5kIG9mIGEgcGF0dGVybiAoYXMgd2VsbCBhcyBpbnRlcm5hbGx5KS4gRm9yIGV4YW1wbGUsIHRoZQorcGF0dGVybiAiYVxlZCsiIGlzIGNvbXBpbGVkIGFzIGlmIGl0IHdlcmUgImFcZWQrKyIuIEZvciBERkEgbWF0Y2hpbmcsIHRoaXMKK21lYW5zIHRoYXQgb25seSBvbmUgcG9zc2libGUgbWF0Y2ggaXMgZm91bmQuIElmIHlvdSByZWFsbHkgZG8gd2FudCBtdWx0aXBsZQorbWF0Y2hlcyBpbiBzdWNoIGNhc2VzLCBlaXRoZXIgdXNlIGFuIHVuZ3JlZWR5IHJlcGVhdCBhdWNoIGFzICJhXGVkKz8iIG9yIHNldAordGhlIFBDUkUyX05PX0FVVE9fUE9TU0VTUyBvcHRpb24gd2hlbiBjb21waWxpbmcuCisuCisuCisuU1MgIkVycm9yIHJldHVybnMgZnJvbSBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCIKKy5ycworLnNwCitUaGUgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgZnVuY3Rpb24gcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciB3aGVuIGl0IGZhaWxzLgorTWFueSBvZiB0aGUgZXJyb3JzIGFyZSB0aGUgc2FtZSBhcyBmb3IgXGZCcGNyZTJfbWF0Y2goKVxmUCwgYXMgZGVzY3JpYmVkCisuXCIgSFRNTCA8YSBocmVmPSIjZXJyb3JsaXN0Ij4KKy5cIiA8L2E+CithYm92ZS4KKy5cIgorVGhlcmUgYXJlIGluIGFkZGl0aW9uIHRoZSBmb2xsb3dpbmcgZXJyb3JzIHRoYXQgYXJlIHNwZWNpZmljIHRvCitcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUDoKKy5zcAorICBQQ1JFMl9FUlJPUl9ERkFfVUlURU0KKy5zcAorVGhpcyByZXR1cm4gaXMgZ2l2ZW4gaWYgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgZW5jb3VudGVycyBhbiBpdGVtIGluIHRoZQorcGF0dGVybiB0aGF0IGl0IGRvZXMgbm90IHN1cHBvcnQsIGZvciBpbnN0YW5jZSwgdGhlIHVzZSBvZiBcZUMgaW4gYSBVVEYgbW9kZSBvcgorYSBiYWNrIHJlZmVyZW5jZS4KKy5zcAorICBQQ1JFMl9FUlJPUl9ERkFfVUNPTkQKKy5zcAorVGhpcyByZXR1cm4gaXMgZ2l2ZW4gaWYgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgZW5jb3VudGVycyBhIGNvbmRpdGlvbiBpdGVtCit0aGF0IHVzZXMgYSBiYWNrIHJlZmVyZW5jZSBmb3IgdGhlIGNvbmRpdGlvbiwgb3IgYSB0ZXN0IGZvciByZWN1cnNpb24gaW4gYQorc3BlY2lmaWMgZ3JvdXAuIFRoZXNlIGFyZSBub3Qgc3VwcG9ydGVkLgorLnNwCisgIFBDUkUyX0VSUk9SX0RGQV9XU1NJWkUKKy5zcAorVGhpcyByZXR1cm4gaXMgZ2l2ZW4gaWYgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgcnVucyBvdXQgb2Ygc3BhY2UgaW4gdGhlCitcZkl3b3Jrc3BhY2VcZlAgdmVjdG9yLgorLnNwCisgIFBDUkUyX0VSUk9SX0RGQV9SRUNVUlNFCisuc3AKK1doZW4gYSByZWN1cnNpdmUgc3VicGF0dGVybiBpcyBwcm9jZXNzZWQsIHRoZSBtYXRjaGluZyBmdW5jdGlvbiBjYWxscyBpdHNlbGYKK3JlY3Vyc2l2ZWx5LCB1c2luZyBwcml2YXRlIG1lbW9yeSBmb3IgdGhlIG92ZWN0b3IgYW5kIFxmSXdvcmtzcGFjZVxmUC4gVGhpcworZXJyb3IgaXMgZ2l2ZW4gaWYgdGhlIGludGVybmFsIG92ZWN0b3IgaXMgbm90IGxhcmdlIGVub3VnaC4gVGhpcyBzaG91bGQgYmUKK2V4dHJlbWVseSByYXJlLCBhcyBhIHZlY3RvciBvZiBzaXplIDEwMDAgaXMgdXNlZC4KKy5zcAorICBQQ1JFMl9FUlJPUl9ERkFfQkFEUkVTVEFSVAorLnNwCitXaGVuIFxmQnBjcmUyX2RmYV9tYXRjaCgpXGZQIGlzIGNhbGxlZCB3aXRoIHRoZSBcZkJQQ1JFMl9ERkFfUkVTVEFSVFxmUCBvcHRpb24sCitzb21lIHBsYXVzaWJpbGl0eSBjaGVja3MgYXJlIG1hZGUgb24gdGhlIGNvbnRlbnRzIG9mIHRoZSB3b3Jrc3BhY2UsIHdoaWNoCitzaG91bGQgY29udGFpbiBkYXRhIGFib3V0IHRoZSBwcmV2aW91cyBwYXJ0aWFsIG1hdGNoLiBJZiBhbnkgb2YgdGhlc2UgY2hlY2tzCitmYWlsLCB0aGlzIGVycm9yIGlzIGdpdmVuLgorLgorLgorLlNIICJTRUUgQUxTTyIKKy5ycworLnNwCitcZkJwY3JlMmJ1aWxkXGZQKDMpLCBcZkJwY3JlMmNhbGxvdXRcZlAoMyksIFxmQnBjcmUyZGVtbygzKVxmUCwKK1xmQnBjcmUybWF0Y2hpbmdcZlAoMyksIFxmQnBjcmUycGFydGlhbFxmUCgzKSwgXGZCcGNyZTJwb3NpeFxmUCgzKSwKK1xmQnBjcmUyc2FtcGxlXGZQKDMpLCBcZkJwY3JlMnN0YWNrXGZQKDMpLCBcZkJwY3JlMnVuaWNvZGVcZlAoMykuCisuCisuCisuU0ggQVVUSE9SCisucnMKKy5zcAorLm5mCitQaGlsaXAgSGF6ZWwKK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKK0NhbWJyaWRnZSwgRW5nbGFuZC4KKy5maQorLgorLgorLlNIIFJFVklTSU9OCisucnMKKy5zcAorLm5mCitMYXN0IHVwZGF0ZWQ6IDE2IERlY2VtYmVyIDIwMTUKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJidWlsZC4zIGIvZGlzdDIvZG9jL3BjcmUyYnVpbGQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTBmMWIyCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyYnVpbGQuMwpAQCAtMCwwICsxLDUyNCBAQAorLlRIIFBDUkUyQlVJTEQgMyAiMTYgT2N0b2JlciAyMDE1IiAiUENSRTIgMTAuMjEiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuCisuCisuU0ggIkJVSUxESU5HIFBDUkUyIgorLnJzCisuc3AKK1BDUkUyIGlzIGRpc3RyaWJ1dGVkIHdpdGggYSBcZkJjb25maWd1cmVcZlAgc2NyaXB0IHRoYXQgY2FuIGJlIHVzZWQgdG8gYnVpbGQKK3RoZSBsaWJyYXJ5IGluIFVuaXgtbGlrZSBlbnZpcm9ubWVudHMgdXNpbmcgdGhlIGFwcGxpY2F0aW9ucyBrbm93biBhcworQXV0b3Rvb2xzLiBBbHNvIGluIHRoZSBkaXN0cmlidXRpb24gYXJlIGZpbGVzIHRvIHN1cHBvcnQgYnVpbGRpbmcgdXNpbmcKK1xmQkNNYWtlXGZQIGluc3RlYWQgb2YgXGZCY29uZmlndXJlXGZQLiBUaGUgdGV4dCBmaWxlCisuXCIgSFRNTCA8YSBocmVmPSJSRUFETUUudHh0Ij4KKy5cIiA8L2E+CitcZkJSRUFETUVcZlAKKy5cIgorY29udGFpbnMgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhYm91dCBidWlsZGluZyB3aXRoIEF1dG90b29scyAoc29tZSBvZiB3aGljaCBpcworcmVwZWF0ZWQgYmVsb3cpLCBhbmQgYWxzbyBoYXMgc29tZSBjb21tZW50cyBhYm91dCBidWlsZGluZyBvbiB2YXJpb3VzIG9wZXJhdGluZworc3lzdGVtcy4gVGhlcmUgaXMgYSBsb3QgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBidWlsZGluZyBQQ1JFMiB3aXRob3V0IHVzaW5nCitBdXRvdG9vbHMgKGluY2x1ZGluZyBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyBcZkJDTWFrZVxmUCBhbmQgYnVpbGRpbmcgImJ5CitoYW5kIikgaW4gdGhlIHRleHQgZmlsZSBjYWxsZWQKKy5cIiBIVE1MIDxhIGhyZWY9Ik5PTi1BVVRPVE9PTFMtQlVJTEQudHh0Ij4KKy5cIiA8L2E+CitcZkJOT04tQVVUT1RPT0xTLUJVSUxEXGZQLgorLlwiCitZb3Ugc2hvdWxkIGNvbnN1bHQgdGhpcyBmaWxlIGFzIHdlbGwgYXMgdGhlCisuXCIgSFRNTCA8YSBocmVmPSJSRUFETUUudHh0Ij4KKy5cIiA8L2E+CitcZkJSRUFETUVcZlAKKy5cIgorZmlsZSBpZiB5b3UgYXJlIGJ1aWxkaW5nIGluIGEgbm9uLVVuaXgtbGlrZSBlbnZpcm9ubWVudC4KKy4KKy4KKy5TSCAiUENSRTIgQlVJTEQtVElNRSBPUFRJT05TIgorLnJzCisuc3AKK1RoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBvcHRpb25hbCBmZWF0dXJlcyBvZiBQQ1JFMiB0aGF0IGNhbiBiZQorc2VsZWN0ZWQgd2hlbiB0aGUgbGlicmFyeSBpcyBjb21waWxlZC4gSXQgYXNzdW1lcyB1c2Ugb2YgdGhlIFxmQmNvbmZpZ3VyZVxmUAorc2NyaXB0LCB3aGVyZSB0aGUgb3B0aW9uYWwgZmVhdHVyZXMgYXJlIHNlbGVjdGVkIG9yIGRlc2VsZWN0ZWQgYnkgcHJvdmlkaW5nCitvcHRpb25zIHRvIFxmQmNvbmZpZ3VyZVxmUCBiZWZvcmUgcnVubmluZyB0aGUgXGZCbWFrZVxmUCBjb21tYW5kLiBIb3dldmVyLCB0aGUKK3NhbWUgb3B0aW9ucyBjYW4gYmUgc2VsZWN0ZWQgaW4gYm90aCBVbml4LWxpa2UgYW5kIG5vbi1Vbml4LWxpa2UgZW52aXJvbm1lbnRzCitpZiB5b3UgYXJlIHVzaW5nIFxmQkNNYWtlXGZQIGluc3RlYWQgb2YgXGZCY29uZmlndXJlXGZQIHRvIGJ1aWxkIFBDUkUyLgorLlAKK0lmIHlvdSBhcmUgbm90IHVzaW5nIEF1dG90b29scyBvciBcZkJDTWFrZVxmUCwgb3B0aW9uIHNlbGVjdGlvbiBjYW4gYmUgZG9uZSBieQorZWRpdGluZyB0aGUgXGZCY29uZmlnLmhcZlAgZmlsZSwgb3IgYnkgcGFzc2luZyBwYXJhbWV0ZXIgc2V0dGluZ3MgdG8gdGhlCitjb21waWxlciwgYXMgZGVzY3JpYmVkIGluCisuXCIgSFRNTCA8YSBocmVmPSJOT04tQVVUT1RPT0xTLUJVSUxELnR4dCI+CisuXCIgPC9hPgorXGZCTk9OLUFVVE9UT09MUy1CVUlMRFxmUC4KKy5cIgorLlAKK1RoZSBjb21wbGV0ZSBsaXN0IG9mIG9wdGlvbnMgZm9yIFxmQmNvbmZpZ3VyZVxmUCAod2hpY2ggaW5jbHVkZXMgdGhlIHN0YW5kYXJkCitvbmVzIHN1Y2ggYXMgdGhlIHNlbGVjdGlvbiBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSkgY2FuIGJlIG9idGFpbmVkIGJ5CitydW5uaW5nCisuc3AKKyAgLi9jb25maWd1cmUgLS1oZWxwCisuc3AKK1RoZSBmb2xsb3dpbmcgc2VjdGlvbnMgaW5jbHVkZSBkZXNjcmlwdGlvbnMgb2Ygb3B0aW9ucyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoCistLWVuYWJsZSBvciAtLWRpc2FibGUuIFRoZXNlIHNldHRpbmdzIHNwZWNpZnkgY2hhbmdlcyB0byB0aGUgZGVmYXVsdHMgZm9yIHRoZQorXGZCY29uZmlndXJlXGZQIGNvbW1hbmQuIEJlY2F1c2Ugb2YgdGhlIHdheSB0aGF0IFxmQmNvbmZpZ3VyZVxmUCB3b3JrcywKKy0tZW5hYmxlIGFuZCAtLWRpc2FibGUgYWx3YXlzIGNvbWUgaW4gcGFpcnMsIHNvIHRoZSBjb21wbGVtZW50YXJ5IG9wdGlvbiBhbHdheXMKK2V4aXN0cyBhcyB3ZWxsLCBidXQgYXMgaXQgc3BlY2lmaWVzIHRoZSBkZWZhdWx0LCBpdCBpcyBub3QgZGVzY3JpYmVkLgorLgorLgorLlNIICJCVUlMRElORyA4LUJJVCwgMTYtQklUIEFORCAzMi1CSVQgTElCUkFSSUVTIgorLnJzCisuc3AKK0J5IGRlZmF1bHQsIGEgbGlicmFyeSBjYWxsZWQgXGZCbGlicGNyZTItOFxmUCBpcyBidWlsdCwgY29udGFpbmluZyBmdW5jdGlvbnMKK3RoYXQgdGFrZSBzdHJpbmcgYXJndW1lbnRzIGNvbnRhaW5lZCBpbiB2ZWN0b3JzIG9mIGJ5dGVzLCBpbnRlcnByZXRlZCBlaXRoZXIgYXMKK3NpbmdsZS1ieXRlIGNoYXJhY3RlcnMsIG9yIFVURi04IHN0cmluZ3MuIFlvdSBjYW4gYWxzbyBidWlsZCB0d28gb3RoZXIKK2xpYnJhcmllcywgY2FsbGVkIFxmQmxpYnBjcmUyLTE2XGZQIGFuZCBcZkJsaWJwY3JlMi0zMlxmUCwgd2hpY2ggcHJvY2Vzcworc3RyaW5ncyB0aGF0IGFyZSBjb250YWluZWQgaW4gdmVjdG9ycyBvZiAxNi1iaXQgYW5kIDMyLWJpdCBjb2RlIHVuaXRzLAorcmVzcGVjdGl2ZWx5LiBUaGVzZSBjYW4gYmUgaW50ZXJwcmV0ZWQgZWl0aGVyIGFzIHNpbmdsZS11bml0IGNoYXJhY3RlcnMgb3IKK1VURi0xNi9VVEYtMzIgc3RyaW5ncy4gVG8gYnVpbGQgdGhlc2UgYWRkaXRpb25hbCBsaWJyYXJpZXMsIGFkZCBvbmUgb3IgYm90aCBvZgordGhlIGZvbGxvd2luZyB0byB0aGUgXGZCY29uZmlndXJlXGZQIGNvbW1hbmQ6Cisuc3AKKyAgLS1lbmFibGUtcGNyZTItMTYKKyAgLS1lbmFibGUtcGNyZTItMzIKKy5zcAorSWYgeW91IGRvIG5vdCB3YW50IHRoZSA4LWJpdCBsaWJyYXJ5LCBhZGQKKy5zcAorICAtLWRpc2FibGUtcGNyZTItOAorLnNwCithcyB3ZWxsLiBBdCBsZWFzdCBvbmUgb2YgdGhlIHRocmVlIGxpYnJhcmllcyBtdXN0IGJlIGJ1aWx0LiBOb3RlIHRoYXQgdGhlIFBPU0lYCit3cmFwcGVyIGlzIGZvciB0aGUgOC1iaXQgbGlicmFyeSBvbmx5LCBhbmQgdGhhdCBcZkJwY3JlMmdyZXBcZlAgaXMgYW4gOC1iaXQKK3Byb2dyYW0uIE5laXRoZXIgb2YgdGhlc2UgYXJlIGJ1aWx0IGlmIHlvdSBzZWxlY3Qgb25seSB0aGUgMTYtYml0IG9yIDMyLWJpdAorbGlicmFyaWVzLgorLgorLgorLlNIICJCVUlMRElORyBTSEFSRUQgQU5EIFNUQVRJQyBMSUJSQVJJRVMiCisucnMKKy5zcAorVGhlIEF1dG90b29scyBQQ1JFMiBidWlsZGluZyBwcm9jZXNzIHVzZXMgXGZCbGlidG9vbFxmUCB0byBidWlsZCBib3RoIHNoYXJlZAorYW5kIHN0YXRpYyBsaWJyYXJpZXMgYnkgZGVmYXVsdC4gWW91IGNhbiBzdXBwcmVzcyBhbiB1bndhbnRlZCBsaWJyYXJ5IGJ5IGFkZGluZworb25lIG9mCisuc3AKKyAgLS1kaXNhYmxlLXNoYXJlZAorICAtLWRpc2FibGUtc3RhdGljCisuc3AKK3RvIHRoZSBcZkJjb25maWd1cmVcZlAgY29tbWFuZC4KKy4KKy4KKy5TSCAiVU5JQ09ERSBBTkQgVVRGIFNVUFBPUlQiCisucnMKKy5zcAorQnkgZGVmYXVsdCwgUENSRTIgaXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciBVbmljb2RlIGFuZCBVVEYgY2hhcmFjdGVyIHN0cmluZ3MuCitUbyBidWlsZCBpdCB3aXRob3V0IFVuaWNvZGUgc3VwcG9ydCwgYWRkCisuc3AKKyAgLS1kaXNhYmxlLXVuaWNvZGUKKy5zcAordG8gdGhlIFxmQmNvbmZpZ3VyZVxmUCBjb21tYW5kLiBUaGlzIHNldHRpbmcgYXBwbGllcyB0byBhbGwgdGhyZWUgbGlicmFyaWVzLiBJdAoraXMgbm90IHBvc3NpYmxlIHRvIGJ1aWxkIG9uZSBsaWJyYXJ5IHdpdGggVW5pY29kZSBzdXBwb3J0LCBhbmQgYW5vdGhlciB3aXRob3V0LAoraW4gdGhlIHNhbWUgY29uZmlndXJhdGlvbi4KKy5QCitPZiBpdHNlbGYsIFVuaWNvZGUgc3VwcG9ydCBkb2VzIG5vdCBtYWtlIFBDUkUyIHRyZWF0IHN0cmluZ3MgYXMgVVRGLTgsIFVURi0xNgorb3IgVVRGLTMyLiBUbyBkbyB0aGF0LCBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGhlIGxpYnJhcnkgY2FuIHNldCB0aGUgUENSRTJfVVRGCitvcHRpb24gd2hlbiB0aGV5IGNhbGwgXGZCcGNyZTJfY29tcGlsZSgpXGZQIHRvIGNvbXBpbGUgYSBwYXR0ZXJuLgorQWx0ZXJuYXRpdmVseSwgcGF0dGVybnMgbWF5IGJlIHN0YXJ0ZWQgd2l0aCAoKlVURikgdW5sZXNzIHRoZSBhcHBsaWNhdGlvbiBoYXMKK2xvY2tlZCB0aGlzIG91dCBieSBzZXR0aW5nIFBDUkUyX05FVkVSX1VURi4KKy5QCitVVEYgc3VwcG9ydCBhbGxvd3MgdGhlIGxpYnJhcmllcyB0byBwcm9jZXNzIGNoYXJhY3RlciBjb2RlIHBvaW50cyB1cCB0bworMHgxMGZmZmYgaW4gdGhlIHN0cmluZ3MgdGhhdCB0aGV5IGhhbmRsZS4gSXQgYWxzbyBwcm92aWRlcyBzdXBwb3J0IGZvcgorYWNjZXNzaW5nIHRoZSBVbmljb2RlIHByb3BlcnRpZXMgb2Ygc3VjaCBjaGFyYWN0ZXJzLCB1c2luZyBwYXR0ZXJuIGVzY2FwZXMgc3VjaAorYXMgXGVQLCBcZXAsIGFuZCBcZVguIE9ubHkgdGhlIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydGllcyBzdWNoIGFzIFxmSUx1XGZQIGFuZAorXGZJTmRcZlAgYXJlIHN1cHBvcnRlZC4gRGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwYXR0ZXJuXGZQCisuXCIKK2RvY3VtZW50YXRpb24uCisuUAorUGF0dGVybiBlc2NhcGVzIHN1Y2ggYXMgXGVkIGFuZCBcZXcgZG8gbm90IGJ5IGRlZmF1bHQgbWFrZSB1c2Ugb2YgVW5pY29kZQorcHJvcGVydGllcy4gVGhlIGFwcGxpY2F0aW9uIGNhbiByZXF1ZXN0IHRoYXQgdGhleSBkbyBieSBzZXR0aW5nIHRoZSBQQ1JFMl9VQ1AKK29wdGlvbi4gVW5sZXNzIHRoZSBhcHBsaWNhdGlvbiBoYXMgc2V0IFBDUkUyX05FVkVSX1VDUCwgYSBwYXR0ZXJuIG1heSBhbHNvCityZXF1ZXN0IHRoaXMgYnkgc3RhcnRpbmcgd2l0aCAoKlVDUCkuCisuCisuCisuU0ggIkRJU0FCTElORyBUSEUgVVNFIE9GIFxlQyIKKy5ycworLnNwCitUaGUgXGVDIGVzY2FwZSBzZXF1ZW5jZSwgd2hpY2ggbWF0Y2hlcyBhIHNpbmdsZSBjb2RlIHVuaXQsIGV2ZW4gaW4gYSBVVEYgbW9kZSwKK2NhbiBjYXVzZSB1bnByZWRpY3RhYmxlIGJlaGF2aW91ciBiZWNhdXNlIGl0IG1heSBsZWF2ZSB0aGUgY3VycmVudCBtYXRjaGluZworcG9pbnQgaW4gdGhlIG1pZGRsZSBvZiBhIG11bHRpLWNvZGUtdW5pdCBjaGFyYWN0ZXIuIFRoZSBhcHBsaWNhdGlvbiBjYW4gbG9jayBpdAorb3V0IGJ5IHNldHRpbmcgdGhlIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DIG9wdGlvbiB3aGVuIGNhbGxpbmcKK1xmQnBjcmUyX2NvbXBpbGUoKVxmUC4gVGhlcmUgaXMgYWxzbyBhIGJ1aWxkLXRpbWUgb3B0aW9uCisuc3AKKyAgLS1lbmFibGUtbmV2ZXItYmFja3NsYXNoLUMKKy5zcAorKG5vdGUgdGhlIHVwcGVyIGNhc2UgQykgd2hpY2ggbG9ja3Mgb3V0IHRoZSB1c2Ugb2YgXGVDIGVudGlyZWx5LgorLgorLgorLlNIICJKVVNULUlOLVRJTUUgQ09NUElMRVIgU1VQUE9SVCIKKy5ycworLnNwCitKdXN0LWluLXRpbWUgY29tcGlsZXIgc3VwcG9ydCBpcyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQgYnkgc3BlY2lmeWluZworLnNwCisgIC0tZW5hYmxlLWppdAorLnNwCitUaGlzIHN1cHBvcnQgaXMgYXZhaWxhYmxlIG9ubHkgZm9yIGNlcnRhaW4gaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcy4gSWYgdGhpcworb3B0aW9uIGlzIHNldCBmb3IgYW4gdW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlLCBhIGJ1aWxkaW5nIGVycm9yIG9jY3Vycy4KK1NlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmppdFxmUAorLlwiCitkb2N1bWVudGF0aW9uIGZvciBhIGRpc2N1c3Npb24gb2YgSklUIHVzYWdlLiBXaGVuIEpJVCBzdXBwb3J0IGlzIGVuYWJsZWQsCitwY3JlMmdyZXAgYXV0b21hdGljYWxseSBtYWtlcyB1c2Ugb2YgaXQsIHVubGVzcyB5b3UgYWRkCisuc3AKKyAgLS1kaXNhYmxlLXBjcmUyZ3JlcC1qaXQKKy5zcAordG8gdGhlICJjb25maWd1cmUiIGNvbW1hbmQuCisuCisuCisuU0ggIk5FV0xJTkUgUkVDT0dOSVRJT04iCisucnMKKy5zcAorQnkgZGVmYXVsdCwgUENSRTIgaW50ZXJwcmV0cyB0aGUgbGluZWZlZWQgKExGKSBjaGFyYWN0ZXIgYXMgaW5kaWNhdGluZyB0aGUgZW5kCitvZiBhIGxpbmUuIFRoaXMgaXMgdGhlIG5vcm1hbCBuZXdsaW5lIGNoYXJhY3RlciBvbiBVbml4LWxpa2Ugc3lzdGVtcy4gWW91IGNhbgorY29tcGlsZSBQQ1JFMiB0byB1c2UgY2FycmlhZ2UgcmV0dXJuIChDUikgaW5zdGVhZCwgYnkgYWRkaW5nCisuc3AKKyAgLS1lbmFibGUtbmV3bGluZS1pcy1jcgorLnNwCit0byB0aGUgXGZCY29uZmlndXJlXGZQIGNvbW1hbmQuIFRoZXJlIGlzIGFsc28gYW4gLS1lbmFibGUtbmV3bGluZS1pcy1sZiBvcHRpb24sCit3aGljaCBleHBsaWNpdGx5IHNwZWNpZmllcyBsaW5lZmVlZCBhcyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIuCisuUAorQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBzcGVjaWZ5IHRoYXQgbGluZSBlbmRpbmdzIGFyZSB0byBiZSBpbmRpY2F0ZWQgYnkgdGhlCit0d28tY2hhcmFjdGVyIHNlcXVlbmNlIENSTEYgKENSIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IExGKS4gSWYgeW91IHdhbnQgdGhpcywKK2FkZAorLnNwCisgIC0tZW5hYmxlLW5ld2xpbmUtaXMtY3JsZgorLnNwCit0byB0aGUgXGZCY29uZmlndXJlXGZQIGNvbW1hbmQuIFRoZXJlIGlzIGEgZm91cnRoIG9wdGlvbiwgc3BlY2lmaWVkIGJ5Cisuc3AKKyAgLS1lbmFibGUtbmV3bGluZS1pcy1hbnljcmxmCisuc3AKK3doaWNoIGNhdXNlcyBQQ1JFMiB0byByZWNvZ25pemUgYW55IG9mIHRoZSB0aHJlZSBzZXF1ZW5jZXMgQ1IsIExGLCBvciBDUkxGIGFzCitpbmRpY2F0aW5nIGEgbGluZSBlbmRpbmcuIEZpbmFsbHksIGEgZmlmdGggb3B0aW9uLCBzcGVjaWZpZWQgYnkKKy5zcAorICAtLWVuYWJsZS1uZXdsaW5lLWlzLWFueQorLnNwCitjYXVzZXMgUENSRTIgdG8gcmVjb2duaXplIGFueSBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UuIFRoZSBVbmljb2RlIG5ld2xpbmUKK3NlcXVlbmNlcyBhcmUgdGhlIHRocmVlIGp1c3QgbWVudGlvbmVkLCBwbHVzIHRoZSBzaW5nbGUgY2hhcmFjdGVycyBWVCAodmVydGljYWwKK3RhYiwgVSswMDBCKSwgRkYgKGZvcm0gZmVlZCwgVSswMDBDKSwgTkVMIChuZXh0IGxpbmUsIFUrMDA4NSksIExTIChsaW5lCitzZXBhcmF0b3IsIFUrMjAyOCksIGFuZCBQUyAocGFyYWdyYXBoIHNlcGFyYXRvciwgVSsyMDI5KS4KKy5QCitXaGF0ZXZlciBkZWZhdWx0IGxpbmUgZW5kaW5nIGNvbnZlbnRpb24gaXMgc2VsZWN0ZWQgd2hlbiBQQ1JFMiBpcyBidWlsdCBjYW4gYmUKK292ZXJyaWRkZW4gYnkgYXBwbGljYXRpb25zIHRoYXQgdXNlIHRoZSBsaWJyYXJ5LiBBdCBidWlsZCB0aW1lIGl0IGlzCitjb252ZW50aW9uYWwgdG8gdXNlIHRoZSBzdGFuZGFyZCBmb3IgeW91ciBvcGVyYXRpbmcgc3lzdGVtLgorLgorLgorLlNIICJXSEFUIFxlUiBNQVRDSEVTIgorLnJzCisuc3AKK0J5IGRlZmF1bHQsIHRoZSBzZXF1ZW5jZSBcZVIgaW4gYSBwYXR0ZXJuIG1hdGNoZXMgYW55IFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZSwKK2luZGVwZW5kZW50bHkgb2Ygd2hhdCBoYXMgYmVlbiBzZWxlY3RlZCBhcyB0aGUgbGluZSBlbmRpbmcgc2VxdWVuY2UuIElmIHlvdQorc3BlY2lmeQorLnNwCisgIC0tZW5hYmxlLWJzci1hbnljcmxmCisuc3AKK3RoZSBkZWZhdWx0IGlzIGNoYW5nZWQgc28gdGhhdCBcZVIgbWF0Y2hlcyBvbmx5IENSLCBMRiwgb3IgQ1JMRi4gV2hhdGV2ZXIgaXMKK3NlbGVjdGVkIHdoZW4gUENSRTIgaXMgYnVpbHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgYXBwbGljYXRpb25zIHRoYXQgdXNlIHRoZQorY2FsbGVkLgorLgorLgorLlNIICJIQU5ETElORyBWRVJZIExBUkdFIFBBVFRFUk5TIgorLnJzCisuc3AKK1dpdGhpbiBhIGNvbXBpbGVkIHBhdHRlcm4sIG9mZnNldCB2YWx1ZXMgYXJlIHVzZWQgdG8gcG9pbnQgZnJvbSBvbmUgcGFydCB0bworYW5vdGhlciAoZm9yIGV4YW1wbGUsIGZyb20gYW4gb3BlbmluZyBwYXJlbnRoZXNpcyB0byBhbiBhbHRlcm5hdGlvbgorbWV0YWNoYXJhY3RlcikuIEJ5IGRlZmF1bHQsIGluIHRoZSA4LWJpdCBhbmQgMTYtYml0IGxpYnJhcmllcywgdHdvLWJ5dGUgdmFsdWVzCithcmUgdXNlZCBmb3IgdGhlc2Ugb2Zmc2V0cywgbGVhZGluZyB0byBhIG1heGltdW0gc2l6ZSBmb3IgYSBjb21waWxlZCBwYXR0ZXJuIG9mCithcm91bmQgNjRLIGNvZGUgdW5pdHMuIFRoaXMgaXMgc3VmZmljaWVudCB0byBoYW5kbGUgYWxsIGJ1dCB0aGUgbW9zdCBnaWdhbnRpYworcGF0dGVybnMuIE5ldmVydGhlbGVzcywgc29tZSBwZW9wbGUgZG8gd2FudCB0byBwcm9jZXNzIHRydWx5IGVub3Jtb3VzIHBhdHRlcm5zLAorc28gaXQgaXMgcG9zc2libGUgdG8gY29tcGlsZSBQQ1JFMiB0byB1c2UgdGhyZWUtYnl0ZSBvciBmb3VyLWJ5dGUgb2Zmc2V0cyBieQorYWRkaW5nIGEgc2V0dGluZyBzdWNoIGFzCisuc3AKKyAgLS13aXRoLWxpbmstc2l6ZT0zCisuc3AKK3RvIHRoZSBcZkJjb25maWd1cmVcZlAgY29tbWFuZC4gVGhlIHZhbHVlIGdpdmVuIG11c3QgYmUgMiwgMywgb3IgNC4gRm9yIHRoZQorMTYtYml0IGxpYnJhcnksIGEgdmFsdWUgb2YgMyBpcyByb3VuZGVkIHVwIHRvIDQuIEluIHRoZXNlIGxpYnJhcmllcywgdXNpbmcKK2xvbmdlciBvZmZzZXRzIHNsb3dzIGRvd24gdGhlIG9wZXJhdGlvbiBvZiBQQ1JFMiBiZWNhdXNlIGl0IGhhcyB0byBsb2FkCithZGRpdGlvbmFsIGRhdGEgd2hlbiBoYW5kbGluZyB0aGVtLiBGb3IgdGhlIDMyLWJpdCBsaWJyYXJ5IHRoZSB2YWx1ZSBpcyBhbHdheXMKKzQgYW5kIGNhbm5vdCBiZSBvdmVycmlkZGVuOyB0aGUgdmFsdWUgb2YgLS13aXRoLWxpbmstc2l6ZSBpcyBpZ25vcmVkLgorLgorLgorLlNIICJBVk9JRElORyBFWENFU1NJVkUgU1RBQ0sgVVNBR0UiCisucnMKKy5zcAorV2hlbiBtYXRjaGluZyB3aXRoIHRoZSBcZkJwY3JlMl9tYXRjaCgpXGZQIGZ1bmN0aW9uLCBQQ1JFMiBpbXBsZW1lbnRzCitiYWNrdHJhY2tpbmcgYnkgbWFraW5nIHJlY3Vyc2l2ZSBjYWxscyB0byBhbiBpbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQKK1xmQm1hdGNoKClcZlAuIEluIGVudmlyb25tZW50cyB3aGVyZSB0aGUgc2l6ZSBvZiB0aGUgc3RhY2sgaXMgbGltaXRlZCwgdGhpcyBjYW4KK3NldmVyZWx5IGxpbWl0IFBDUkUyJ3Mgb3BlcmF0aW9uLiAoVGhlIFVuaXggZW52aXJvbm1lbnQgZG9lcyBub3QgdXN1YWxseSBzdWZmZXIKK2Zyb20gdGhpcyBwcm9ibGVtLCBidXQgaXQgbWF5IHNvbWV0aW1lcyBiZSBuZWNlc3NhcnkgdG8gaW5jcmVhc2UgdGhlIG1heGltdW0KK3N0YWNrIHNpemUuIFRoZXJlIGlzIGEgZGlzY3Vzc2lvbiBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnN0YWNrXGZQCisuXCIKK2RvY3VtZW50YXRpb24uKSBBbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byByZWN1cnNpb24gdGhhdCB1c2VzIG1lbW9yeSBmcm9tIHRoZQoraGVhcCB0byByZW1lbWJlciBkYXRhLCBpbnN0ZWFkIG9mIHVzaW5nIHJlY3Vyc2l2ZSBmdW5jdGlvbiBjYWxscywgaGFzIGJlZW4KK2ltcGxlbWVudGVkIHRvIHdvcmsgcm91bmQgdGhlIHByb2JsZW0gb2YgbGltaXRlZCBzdGFjayBzaXplLiBJZiB5b3Ugd2FudCB0bworYnVpbGQgYSB2ZXJzaW9uIG9mIFBDUkUyIHRoYXQgd29ya3MgdGhpcyB3YXksIGFkZAorLnNwCisgIC0tZGlzYWJsZS1zdGFjay1mb3ItcmVjdXJzaW9uCisuc3AKK3RvIHRoZSBcZkJjb25maWd1cmVcZlAgY29tbWFuZC4gQnkgZGVmYXVsdCwgdGhlIHN5c3RlbSBmdW5jdGlvbnMgXGZCbWFsbG9jKClcZlAKK2FuZCBcZkJmcmVlKClcZlAgYXJlIGNhbGxlZCB0byBtYW5hZ2UgdGhlIGhlYXAgbWVtb3J5IHRoYXQgaXMgcmVxdWlyZWQsIGJ1dAorY3VzdG9tIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyBjYW4gYmUgY2FsbGVkIGluc3RlYWQuIFBDUkUyIHJ1bnMgbm90aWNlYWJseQorbW9yZSBzbG93bHkgd2hlbiBidWlsdCBpbiB0aGlzIHdheS4gVGhpcyBvcHRpb24gYWZmZWN0cyBvbmx5IHRoZQorXGZCcGNyZTJfbWF0Y2goKVxmUCBmdW5jdGlvbjsgaXQgaXMgbm90IHJlbGV2YW50IGZvciBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUC4KKy4KKy4KKy5TSCAiTElNSVRJTkcgUENSRTIgUkVTT1VSQ0UgVVNBR0UiCisucnMKKy5zcAorSW50ZXJuYWxseSwgUENSRTIgaGFzIGEgZnVuY3Rpb24gY2FsbGVkIFxmQm1hdGNoKClcZlAsIHdoaWNoIGl0IGNhbGxzCityZXBlYXRlZGx5IChzb21ldGltZXMgcmVjdXJzaXZlbHkpIHdoZW4gbWF0Y2hpbmcgYSBwYXR0ZXJuIHdpdGggdGhlCitcZkJwY3JlMl9tYXRjaCgpXGZQIGZ1bmN0aW9uLiBCeSBjb250cm9sbGluZyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgdGhpcworZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBkdXJpbmcgYSBzaW5nbGUgbWF0Y2hpbmcgb3BlcmF0aW9uLCBhIGxpbWl0IGNhbiBiZQorcGxhY2VkIG9uIHRoZSByZXNvdXJjZXMgdXNlZCBieSBhIHNpbmdsZSBjYWxsIHRvIFxmQnBjcmUyX21hdGNoKClcZlAuIFRoZSBsaW1pdAorY2FuIGJlIGNoYW5nZWQgYXQgcnVuIHRpbWUsIGFzIGRlc2NyaWJlZCBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitkb2N1bWVudGF0aW9uLiBUaGUgZGVmYXVsdCBpcyAxMCBtaWxsaW9uLCBidXQgdGhpcyBjYW4gYmUgY2hhbmdlZCBieSBhZGRpbmcgYQorc2V0dGluZyBzdWNoIGFzCisuc3AKKyAgLS13aXRoLW1hdGNoLWxpbWl0PTUwMDAwMAorLnNwCit0byB0aGUgXGZCY29uZmlndXJlXGZQIGNvbW1hbmQuIFRoaXMgc2V0dGluZyBoYXMgbm8gZWZmZWN0IG9uIHRoZQorXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgbWF0Y2hpbmcgZnVuY3Rpb24uCisuUAorSW4gc29tZSBlbnZpcm9ubWVudHMgaXQgaXMgZGVzaXJhYmxlIHRvIGxpbWl0IHRoZSBkZXB0aCBvZiByZWN1cnNpdmUgY2FsbHMgb2YKK1xmQm1hdGNoKClcZlAgbW9yZSBzdHJpY3RseSB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY2FsbHMsIGluIG9yZGVyIHRvCityZXN0cmljdCB0aGUgbWF4aW11bSBhbW91bnQgb2Ygc3RhY2sgKG9yIGhlYXAsIGlmIC0tZGlzYWJsZS1zdGFjay1mb3ItcmVjdXJzaW9uCitpcyBzcGVjaWZpZWQpIHRoYXQgaXMgdXNlZC4gQSBzZWNvbmQgbGltaXQgY29udHJvbHMgdGhpczsgaXQgZGVmYXVsdHMgdG8gdGhlCit2YWx1ZSB0aGF0IGlzIHNldCBmb3IgLS13aXRoLW1hdGNoLWxpbWl0LCB3aGljaCBpbXBvc2VzIG5vIGFkZGl0aW9uYWwKK2NvbnN0cmFpbnRzLiBIb3dldmVyLCB5b3UgY2FuIHNldCBhIGxvd2VyIGxpbWl0IGJ5IGFkZGluZywgZm9yIGV4YW1wbGUsCisuc3AKKyAgLS13aXRoLW1hdGNoLWxpbWl0LXJlY3Vyc2lvbj0xMDAwMAorLnNwCit0byB0aGUgXGZCY29uZmlndXJlXGZQIGNvbW1hbmQuIFRoaXMgdmFsdWUgY2FuIGFsc28gYmUgb3ZlcnJpZGRlbiBhdCBydW4gdGltZS4KKy4KKy4KKy5TSCAiQ1JFQVRJTkcgQ0hBUkFDVEVSIFRBQkxFUyBBVCBCVUlMRCBUSU1FIgorLnJzCisuc3AKK1BDUkUyIHVzZXMgZml4ZWQgdGFibGVzIGZvciBwcm9jZXNzaW5nIGNoYXJhY3RlcnMgd2hvc2UgY29kZSBwb2ludHMgYXJlIGxlc3MKK3RoYW4gMjU2LiBCeSBkZWZhdWx0LCBQQ1JFMiBpcyBidWlsdCB3aXRoIGEgc2V0IG9mIHRhYmxlcyB0aGF0IGFyZSBkaXN0cmlidXRlZAoraW4gdGhlIGZpbGUgXGZJc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0XGZQLiBUaGVzZSB0YWJsZXMgYXJlIGZvciBBU0NJSSBjb2Rlcworb25seS4gSWYgeW91IGFkZAorLnNwCisgIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcworLnNwCit0byB0aGUgXGZCY29uZmlndXJlXGZQIGNvbW1hbmQsIHRoZSBkaXN0cmlidXRlZCB0YWJsZXMgYXJlIG5vIGxvbmdlciB1c2VkLgorSW5zdGVhZCwgYSBwcm9ncmFtIGNhbGxlZCBcZkJkZnRhYmxlc1xmUCBpcyBjb21waWxlZCBhbmQgcnVuLiBUaGlzIG91dHB1dHMgdGhlCitzb3VyY2UgZm9yIG5ldyBzZXQgb2YgdGFibGVzLCBjcmVhdGVkIGluIHRoZSBkZWZhdWx0IGxvY2FsZSBvZiB5b3VyIEMgcnVuLXRpbWUKK3N5c3RlbS4gKFRoaXMgbWV0aG9kIG9mIHJlcGxhY2luZyB0aGUgdGFibGVzIGRvZXMgbm90IHdvcmsgaWYgeW91IGFyZSBjcm9zcworY29tcGlsaW5nLCBiZWNhdXNlIFxmQmRmdGFibGVzXGZQIGlzIHJ1biBvbiB0aGUgbG9jYWwgaG9zdC4gSWYgeW91IG5lZWQgdG8KK2NyZWF0ZSBhbHRlcm5hdGl2ZSB0YWJsZXMgd2hlbiBjcm9zcyBjb21waWxpbmcsIHlvdSB3aWxsIGhhdmUgdG8gZG8gc28gImJ5CitoYW5kIi4pCisuCisuCisuU0ggIlVTSU5HIEVCQ0RJQyBDT0RFIgorLnJzCisuc3AKK1BDUkUyIGFzc3VtZXMgYnkgZGVmYXVsdCB0aGF0IGl0IHdpbGwgcnVuIGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSBjaGFyYWN0ZXIKK2NvZGUgaXMgQVNDSUkgb3IgVW5pY29kZSwgd2hpY2ggaXMgYSBzdXBlcnNldCBvZiBBU0NJSS4gVGhpcyBpcyB0aGUgY2FzZSBmb3IKK21vc3QgY29tcHV0ZXIgb3BlcmF0aW5nIHN5c3RlbXMuIFBDUkUyIGNhbiwgaG93ZXZlciwgYmUgY29tcGlsZWQgdG8gcnVuIGluIGFuCis4LWJpdCBFQkNESUMgZW52aXJvbm1lbnQgYnkgYWRkaW5nCisuc3AKKyAgLS1lbmFibGUtZWJjZGljIC0tZGlzYWJsZS11bmljb2RlCisuc3AKK3RvIHRoZSBcZkJjb25maWd1cmVcZlAgY29tbWFuZC4gVGhpcyBzZXR0aW5nIGltcGxpZXMKKy0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcy4gWW91IHNob3VsZCBvbmx5IHVzZSBpdCBpZiB5b3Uga25vdyB0aGF0IHlvdSBhcmUgaW4KK2FuIEVCQ0RJQyBlbnZpcm9ubWVudCAoZm9yIGV4YW1wbGUsIGFuIElCTSBtYWluZnJhbWUgb3BlcmF0aW5nIHN5c3RlbSkuCisuUAorSXQgaXMgbm90IHBvc3NpYmxlIHRvIHN1cHBvcnQgYm90aCBFQkNESUMgYW5kIFVURi04IGNvZGVzIGluIHRoZSBzYW1lIHZlcnNpb24KK29mIHRoZSBsaWJyYXJ5LiBDb25zZXF1ZW50bHksIC0tZW5hYmxlLXVuaWNvZGUgYW5kIC0tZW5hYmxlLWViY2RpYyBhcmUgbXV0dWFsbHkKK2V4Y2x1c2l2ZS4KKy5QCitUaGUgRUJDRElDIGNoYXJhY3RlciB0aGF0IGNvcnJlc3BvbmRzIHRvIGFuIEFTQ0lJIExGIGlzIGFzc3VtZWQgdG8gaGF2ZSB0aGUKK3ZhbHVlIDB4MTUgYnkgZGVmYXVsdC4gSG93ZXZlciwgaW4gc29tZSBFQkNESUMgZW52aXJvbm1lbnRzLCAweDI1IGlzIHVzZWQuIEluCitzdWNoIGFuIGVudmlyb25tZW50IHlvdSBzaG91bGQgdXNlCisuc3AKKyAgLS1lbmFibGUtZWJjZGljLW5sMjUKKy5zcAorYXMgd2VsbCBhcywgb3IgaW5zdGVhZCBvZiwgLS1lbmFibGUtZWJjZGljLiBUaGUgRUJDRElDIGNoYXJhY3RlciBmb3IgQ1IgaGFzIHRoZQorc2FtZSB2YWx1ZSBhcyBpbiBBU0NJSSwgbmFtZWx5LCAweDBkLiBXaGljaGV2ZXIgb2YgMHgxNSBhbmQgMHgyNSBpcyBcZklub3RcZlAKK2Nob3NlbiBhcyBMRiBpcyBtYWRlIHRvIGNvcnJlc3BvbmQgdG8gdGhlIFVuaWNvZGUgTkVMIGNoYXJhY3RlciAod2hpY2gsIGluCitVbmljb2RlLCBpcyAweDg1KS4KKy5QCitUaGUgb3B0aW9ucyB0aGF0IHNlbGVjdCBuZXdsaW5lIGJlaGF2aW91ciwgc3VjaCBhcyAtLWVuYWJsZS1uZXdsaW5lLWlzLWNyLAorYW5kIGVxdWl2YWxlbnQgcnVuLXRpbWUgb3B0aW9ucywgcmVmZXIgdG8gdGhlc2UgY2hhcmFjdGVyIHZhbHVlcyBpbiBhbiBFQkNESUMKK2Vudmlyb25tZW50LgorLgorLgorLlNIICJQQ1JFMkdSRVAgT1BUSU9OUyBGT1IgQ09NUFJFU1NFRCBGSUxFIFNVUFBPUlQiCisucnMKKy5zcAorQnkgZGVmYXVsdCwgXGZCcGNyZTJncmVwXGZQIHJlYWRzIGFsbCBmaWxlcyBhcyBwbGFpbiB0ZXh0LiBZb3UgY2FuIGJ1aWxkIGl0IHNvCit0aGF0IGl0IHJlY29nbml6ZXMgZmlsZXMgd2hvc2UgbmFtZXMgZW5kIGluIFxmQi5nelxmUCBvciBcZkIuYnoyXGZQLCBhbmQgcmVhZHMKK3RoZW0gd2l0aCBcZkJsaWJ6XGZQIG9yIFxmQmxpYmJ6MlxmUCwgcmVzcGVjdGl2ZWx5LCBieSBhZGRpbmcgb25lIG9yIGJvdGggb2YKKy5zcAorICAtLWVuYWJsZS1wY3JlMmdyZXAtbGliegorICAtLWVuYWJsZS1wY3JlMmdyZXAtbGliYnoyCisuc3AKK3RvIHRoZSBcZkJjb25maWd1cmVcZlAgY29tbWFuZC4gVGhlc2Ugb3B0aW9ucyBuYXR1cmFsbHkgcmVxdWlyZSB0aGF0IHRoZQorcmVsZXZhbnQgbGlicmFyaWVzIGFyZSBpbnN0YWxsZWQgb24geW91ciBzeXN0ZW0uIENvbmZpZ3VyYXRpb24gd2lsbCBmYWlsIGlmCit0aGV5IGFyZSBub3QuCisuCisuCisuU0ggIlBDUkUyR1JFUCBCVUZGRVIgU0laRSIKKy5ycworLnNwCitcZkJwY3JlMmdyZXBcZlAgdXNlcyBhbiBpbnRlcm5hbCBidWZmZXIgdG8gaG9sZCBhICJ3aW5kb3ciIG9uIHRoZSBmaWxlIGl0IGlzCitzY2FubmluZywgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBvdXRwdXQgImJlZm9yZSIgYW5kICJhZnRlciIgbGluZXMgd2hlbiBpdAorZmluZHMgYSBtYXRjaC4gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBjb250cm9sbGVkIGJ5IGEgcGFyYW1ldGVyIHdob3NlCitkZWZhdWx0IHZhbHVlIGlzIDIwSy4gVGhlIGJ1ZmZlciBpdHNlbGYgaXMgdGhyZWUgdGltZXMgdGhpcyBzaXplLCBidXQgYmVjYXVzZQorb2YgdGhlIHdheSBpdCBpcyB1c2VkIGZvciBob2xkaW5nICJiZWZvcmUiIGxpbmVzLCB0aGUgbG9uZ2VzdCBsaW5lIHRoYXQgaXMKK2d1YXJhbnRlZWQgdG8gYmUgcHJvY2Vzc2FibGUgaXMgdGhlIHBhcmFtZXRlciBzaXplLiBZb3UgY2FuIGNoYW5nZSB0aGUgZGVmYXVsdAorcGFyYW1ldGVyIHZhbHVlIGJ5IGFkZGluZywgZm9yIGV4YW1wbGUsCisuc3AKKyAgLS13aXRoLXBjcmUyZ3JlcC1idWZzaXplPTUwSworLnNwCit0byB0aGUgXGZCY29uZmlndXJlXGZQIGNvbW1hbmQuIFRoZSBjYWxsZXIgb2YgXGZQcGNyZTJncmVwXGZQIGNhbiBvdmVycmlkZSB0aGlzCit2YWx1ZSBieSB1c2luZyAtLWJ1ZmZlci1zaXplIG9uIHRoZSBjb21tYW5kIGxpbmUuLgorLgorLgorLlNIICJQQ1JFMlRFU1QgT1BUSU9OIEZPUiBMSUJSRUFETElORSBTVVBQT1JUIgorLnJzCisuc3AKK0lmIHlvdSBhZGQgb25lIG9mCisuc3AKKyAgLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYnJlYWRsaW5lCisgIC0tZW5hYmxlLXBjcmUydGVzdC1saWJlZGl0Cisuc3AKK3RvIHRoZSBcZkJjb25maWd1cmVcZlAgY29tbWFuZCwgXGZCcGNyZTJ0ZXN0XGZQIGlzIGxpbmtlZCB3aXRoIHRoZQorXGZCbGlicmVhZGxpbmVcZlAgb3JcZkJsaWJlZGl0XGZQIGxpYnJhcnksIHJlc3BlY3RpdmVseSwgYW5kIHdoZW4gaXRzIGlucHV0IGlzCitmcm9tIGEgdGVybWluYWwsIGl0IHJlYWRzIGl0IHVzaW5nIHRoZSBcZkJyZWFkbGluZSgpXGZQIGZ1bmN0aW9uLiBUaGlzIHByb3ZpZGVzCitsaW5lLWVkaXRpbmcgYW5kIGhpc3RvcnkgZmFjaWxpdGllcy4gTm90ZSB0aGF0IFxmQmxpYnJlYWRsaW5lXGZQIGlzCitHUEwtbGljZW5zZWQsIHNvIGlmIHlvdSBkaXN0cmlidXRlIGEgYmluYXJ5IG9mIFxmQnBjcmUydGVzdFxmUCBsaW5rZWQgaW4gdGhpcword2F5LCB0aGVyZSBtYXkgYmUgbGljZW5zaW5nIGlzc3Vlcy4gVGhlc2UgY2FuIGJlIGF2b2lkZWQgYnkgbGlua2luZyBpbnN0ZWFkCit3aXRoIFxmQmxpYmVkaXRcZlAsIHdoaWNoIGhhcyBhIEJTRCBsaWNlbmNlLgorLlAKK1NldHRpbmcgLS1lbmFibGUtcGNyZTJ0ZXN0LWxpYnJlYWRsaW5lIGNhdXNlcyB0aGUgXGZCLWxyZWFkbGluZVxmUCBvcHRpb24gdG8gYmUKK2FkZGVkIHRvIHRoZSBcZkJwY3JlMnRlc3RcZlAgYnVpbGQuIEluIG1hbnkgb3BlcmF0aW5nIGVudmlyb25tZW50cyB3aXRoIGEKK3N5dGVtLWluc3RhbGxlZCByZWFkbGluZSBsaWJyYXJ5IHRoaXMgaXMgc3VmZmljaWVudC4gSG93ZXZlciwgaW4gc29tZQorZW52aXJvbm1lbnRzIChlLmcuIGlmIGFuIHVubW9kaWZpZWQgZGlzdHJpYnV0aW9uIHZlcnNpb24gb2YgcmVhZGxpbmUgaXMgaW4KK3VzZSksIHNvbWUgZXh0cmEgY29uZmlndXJhdGlvbiBtYXkgYmUgbmVjZXNzYXJ5LiBUaGUgSU5TVEFMTCBmaWxlIGZvcgorXGZCbGlicmVhZGxpbmVcZlAgc2F5cyB0aGlzOgorLnNwCisgICJSZWFkbGluZSB1c2VzIHRoZSB0ZXJtY2FwIGZ1bmN0aW9ucywgYnV0IGRvZXMgbm90IGxpbmsgd2l0aAorICB0aGUgdGVybWNhcCBvciBjdXJzZXMgbGlicmFyeSBpdHNlbGYsIGFsbG93aW5nIGFwcGxpY2F0aW9ucworICB3aGljaCBsaW5rIHdpdGggcmVhZGxpbmUgdGhlIHRvIGNob29zZSBhbiBhcHByb3ByaWF0ZSBsaWJyYXJ5LiIKKy5zcAorSWYgeW91ciBlbnZpcm9ubWVudCBoYXMgbm90IGJlZW4gc2V0IHVwIHNvIHRoYXQgYW4gYXBwcm9wcmlhdGUgbGlicmFyeSBpcworYXV0b21hdGljYWxseSBpbmNsdWRlZCwgeW91IG1heSBuZWVkIHRvIGFkZCBzb21ldGhpbmcgbGlrZQorLnNwCisgIExJQlM9Ii1uY3Vyc2VzIgorLnNwCitpbW1lZGlhdGVseSBiZWZvcmUgdGhlIFxmQmNvbmZpZ3VyZVxmUCBjb21tYW5kLgorLgorLgorLlNIICJJTkNMVURJTkcgREVCVUdHSU5HIENPREUiCisucnMKKy5zcAorSWYgeW91IGFkZAorLnNwCisgIC0tZW5hYmxlLWRlYnVnCisuc3AKK3RvIHRoZSBcZkJjb25maWd1cmVcZlAgY29tbWFuZCwgYWRkaXRpb25hbCBkZWJ1Z2dpbmcgY29kZSBpcyBpbmNsdWRlZCBpbiB0aGUKK2J1aWxkLiBUaGlzIGZlYXR1cmUgaXMgaW50ZW5kZWQgZm9yIHVzZSBieSB0aGUgUENSRTIgbWFpbnRhaW5lcnMuCisuCisuCisuU0ggIkRFQlVHR0lORyBXSVRIIFZBTEdSSU5EIFNVUFBPUlQiCisucnMKKy5zcAorSWYgeW91IGFkZAorLnNwCisgIC0tZW5hYmxlLXZhbGdyaW5kCisuc3AKK3RvIHRoZSBcZkJjb25maWd1cmVcZlAgY29tbWFuZCwgUENSRTIgd2lsbCB1c2UgdmFsZ3JpbmQgYW5ub3RhdGlvbnMgdG8gbWFyaworY2VydGFpbiBtZW1vcnkgcmVnaW9ucyBhcyB1bmFkZHJlc3NhYmxlLiBUaGlzIGFsbG93cyBpdCB0byBkZXRlY3QgaW52YWxpZAorbWVtb3J5IGFjY2Vzc2VzLCBhbmQgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIFBDUkUyIGl0c2VsZi4KKy4KKy4KKy5TSCAiQ09ERSBDT1ZFUkFHRSBSRVBPUlRJTkciCisucnMKKy5zcAorSWYgeW91ciBDIGNvbXBpbGVyIGlzIGdjYywgeW91IGNhbiBidWlsZCBhIHZlcnNpb24gb2YgUENSRTIgdGhhdCBjYW4gZ2VuZXJhdGUgYQorY29kZSBjb3ZlcmFnZSByZXBvcnQgZm9yIGl0cyB0ZXN0IHN1aXRlLiBUbyBlbmFibGUgdGhpcywgeW91IG11c3QgaW5zdGFsbAorXGZCbGNvdlxmUCB2ZXJzaW9uIDEuNiBvciBhYm92ZS4gVGhlbiBzcGVjaWZ5Cisuc3AKKyAgLS1lbmFibGUtY292ZXJhZ2UKKy5zcAordG8gdGhlIFxmQmNvbmZpZ3VyZVxmUCBjb21tYW5kIGFuZCBidWlsZCBQQ1JFMiBpbiB0aGUgdXN1YWwgd2F5LgorLlAKK05vdGUgdGhhdCB1c2luZyBcZkJjY2FjaGVcZlAgKGEgY2FjaGluZyBDIGNvbXBpbGVyKSBpcyBpbmNvbXBhdGlibGUgd2l0aCBjb2RlCitjb3ZlcmFnZSByZXBvcnRpbmcuIElmIHlvdSBoYXZlIGNvbmZpZ3VyZWQgXGZCY2NhY2hlXGZQIHRvIHJ1biBhdXRvbWF0aWNhbGx5CitvbiB5b3VyIHN5c3RlbSwgeW91IG11c3Qgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorLnNwCisgIENDQUNIRV9ESVNBQkxFPTEKKy5zcAorYmVmb3JlIHJ1bm5pbmcgXGZCbWFrZVxmUCB0byBidWlsZCBQQ1JFMiwgc28gdGhhdCBcZkJjY2FjaGVcZlAgaXMgbm90IHVzZWQuCisuUAorV2hlbiAtLWVuYWJsZS1jb3ZlcmFnZSBpcyB1c2VkLCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uIHRhcmdldHMgYXJlIGFkZGVkIHRvIHRoZQorXGZJTWFrZWZpbGVcZlA6Cisuc3AKKyAgbWFrZSBjb3ZlcmFnZQorLnNwCitUaGlzIGNyZWF0ZXMgYSBmcmVzaCBjb3ZlcmFnZSByZXBvcnQgZm9yIHRoZSBQQ1JFMiB0ZXN0IHN1aXRlLiBJdCBpcyBlcXVpdmFsZW50Cit0byBydW5uaW5nICJtYWtlIGNvdmVyYWdlLXJlc2V0IiwgIm1ha2UgY292ZXJhZ2UtYmFzZWxpbmUiLCAibWFrZSBjaGVjayIsIGFuZAordGhlbiAibWFrZSBjb3ZlcmFnZS1yZXBvcnQiLgorLnNwCisgIG1ha2UgY292ZXJhZ2UtcmVzZXQKKy5zcAorVGhpcyB6ZXJvZXMgdGhlIGNvdmVyYWdlIGNvdW50ZXJzLCBidXQgZG9lcyBub3RoaW5nIGVsc2UuCisuc3AKKyAgbWFrZSBjb3ZlcmFnZS1iYXNlbGluZQorLnNwCitUaGlzIGNhcHR1cmVzIGJhc2VsaW5lIGNvdmVyYWdlIGluZm9ybWF0aW9uLgorLnNwCisgIG1ha2UgY292ZXJhZ2UtcmVwb3J0Cisuc3AKK1RoaXMgY3JlYXRlcyB0aGUgY292ZXJhZ2UgcmVwb3J0LgorLnNwCisgIG1ha2UgY292ZXJhZ2UtY2xlYW4tcmVwb3J0Cisuc3AKK1RoaXMgcmVtb3ZlcyB0aGUgZ2VuZXJhdGVkIGNvdmVyYWdlIHJlcG9ydCB3aXRob3V0IGNsZWFuaW5nIHRoZSBjb3ZlcmFnZSBkYXRhCitpdHNlbGYuCisuc3AKKyAgbWFrZSBjb3ZlcmFnZS1jbGVhbi1kYXRhCisuc3AKK1RoaXMgcmVtb3ZlcyB0aGUgY2FwdHVyZWQgY292ZXJhZ2UgZGF0YSB3aXRob3V0IHJlbW92aW5nIHRoZSBjb3ZlcmFnZSBmaWxlcworY3JlYXRlZCBhdCBjb21waWxlIHRpbWUgKCouZ2NubykuCisuc3AKKyAgbWFrZSBjb3ZlcmFnZS1jbGVhbgorLnNwCitUaGlzIGNsZWFucyBhbGwgY292ZXJhZ2UgZGF0YSBpbmNsdWRpbmcgdGhlIGdlbmVyYXRlZCBjb3ZlcmFnZSByZXBvcnQuIEZvciBtb3JlCitpbmZvcm1hdGlvbiBhYm91dCBjb2RlIGNvdmVyYWdlLCBzZWUgdGhlIFxmQmdjb3ZcZlAgYW5kIFxmQmxjb3ZcZlAKK2RvY3VtZW50YXRpb24uCisuCisuCisuU0ggIlNFRSBBTFNPIgorLnJzCisuc3AKK1xmQnBjcmUyYXBpXGZQKDMpLCBcZkJwY3JlMi1jb25maWdcZlAoMykuCisuCisuCisuU0ggQVVUSE9SCisucnMKKy5zcAorLm5mCitQaGlsaXAgSGF6ZWwKK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKK0NhbWJyaWRnZSwgRW5nbGFuZC4KKy5maQorLgorLgorLlNIIFJFVklTSU9OCisucnMKKy5zcAorLm5mCitMYXN0IHVwZGF0ZWQ6IDE2IE9jdG9iZXIgMjAxNQorQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCisuZmkKZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMmNhbGxvdXQuMyBiL2Rpc3QyL2RvYy9wY3JlMmNhbGxvdXQuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE5ZjVhCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyY2FsbG91dC4zCkBAIC0wLDAgKzEsMzg3IEBACisuVEggUENSRTJDQUxMT1VUIDMgIjIzIE1hcmNoIDIwMTUiICJQQ1JFMiAxMC4yMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CICNpbmNsdWRlIDxwY3JlMi5oPgorLlBQCisuU00KKy5uZgorLkIgaW50ICgqcGNyZTJfY2FsbG91dCkocGNyZTJfY2FsbG91dF9ibG9jayAqLCB2b2lkICopOworLnNwCisuQiBpbnQgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUoY29uc3QgcGNyZTJfY29kZSAqXGZJY29kZVxmUCwKKy5CICIgIGludCAoKlxmSWNhbGxiYWNrXGZQKShwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9jayAqLCB2b2lkICopLCIKKy5CICIgIHZvaWQgKlxmSXVzZXJfZGF0YVxmUCk7IgorLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitQQ1JFMiBwcm92aWRlcyBhIGZlYXR1cmUgY2FsbGVkICJjYWxsb3V0Iiwgd2hpY2ggaXMgYSBtZWFucyBvZiB0ZW1wb3JhcmlseQorcGFzc2luZyBjb250cm9sIHRvIHRoZSBjYWxsZXIgb2YgUENSRTIgaW4gdGhlIG1pZGRsZSBvZiBwYXR0ZXJuIG1hdGNoaW5nLiBUaGUKK2NhbGxlciBvZiBQQ1JFMiBwcm92aWRlcyBhbiBleHRlcm5hbCBmdW5jdGlvbiBieSBwdXR0aW5nIGl0cyBlbnRyeSBwb2ludCBpbgorYSBtYXRjaCBjb250ZXh0IChzZWUgXGZCcGNyZTJfc2V0X2NhbGxvdXQoKVxmUCBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitkb2N1bWVudGF0aW9uKS4KKy5QCitXaXRoaW4gYSByZWd1bGFyIGV4cHJlc3Npb24sICg/Qzxhcmc+KSBpbmRpY2F0ZXMgYSBwb2ludCBhdCB3aGljaCB0aGUgZXh0ZXJuYWwKK2Z1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZC4gRGlmZmVyZW50IGNhbGxvdXQgcG9pbnRzIGNhbiBiZSBpZGVudGlmaWVkIGJ5IHB1dHRpbmcKK2EgbnVtYmVyIGxlc3MgdGhhbiAyNTYgYWZ0ZXIgdGhlIGxldHRlciBDLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB6ZXJvLgorQWx0ZXJuYXRpdmVseSwgdGhlIGFyZ3VtZW50IG1heSBiZSBhIGRlbGltaXRlZCBzdHJpbmcuIFRoZSBzdGFydGluZyBkZWxpbWl0ZXIKK211c3QgYmUgb25lIG9mIGAgJyAiIF4gJSAjICQgeyBhbmQgdGhlIGVuZGluZyBkZWxpbWl0ZXIgaXMgdGhlIHNhbWUgYXMgdGhlCitzdGFydCwgZXhjZXB0IGZvciB7LCB3aGVyZSB0aGUgZW5kaW5nIGRlbGltaXRlciBpcyB9LiBJZiB0aGUgZW5kaW5nIGRlbGltaXRlcgoraXMgbmVlZGVkIHdpdGhpbiB0aGUgc3RyaW5nLCBpdCBtdXN0IGJlIGRvdWJsZWQuIEZvciBleGFtcGxlLCB0aGlzIHBhdHRlcm4gaGFzCit0d28gY2FsbG91dCBwb2ludHM6Cisuc3AKKyAgKD9DMSlhYmMoP0Mic29tZSAiImFyYml0cmFyeSIiIHRleHQiKWRlZgorLnNwCitJZiB0aGUgUENSRTJfQVVUT19DQUxMT1VUIG9wdGlvbiBiaXQgaXMgc2V0IHdoZW4gYSBwYXR0ZXJuIGlzIGNvbXBpbGVkLCBQQ1JFMgorYXV0b21hdGljYWxseSBpbnNlcnRzIGNhbGxvdXRzLCBhbGwgd2l0aCBudW1iZXIgMjU1LCBiZWZvcmUgZWFjaCBpdGVtIGluIHRoZQorcGF0dGVybi4gRm9yIGV4YW1wbGUsIGlmIFBDUkUyX0FVVE9fQ0FMTE9VVCBpcyB1c2VkIHdpdGggdGhlIHBhdHRlcm4KKy5zcAorICBBKFxlZHsyfXwtLSkKKy5zcAoraXQgaXMgcHJvY2Vzc2VkIGFzIGlmIGl0IHdlcmUKKy5zcAorKD9DMjU1KUEoP0MyNTUpKCg/QzI1NSlcZWR7Mn0oP0MyNTUpfCg/QzI1NSktKD9DMjU1KS0oP0MyNTUpKSg/QzI1NSkKKy5zcAorTm90aWNlIHRoYXQgdGhlcmUgaXMgYSBjYWxsb3V0IGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBwYXJlbnRoZXNpcyBhbmQKK2FsdGVybmF0aW9uIGJhci4gSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgYSBjb25kaXRpb25hbCBncm91cCB3aG9zZSBjb25kaXRpb24gaXMKK2FuIGFzc2VydGlvbiwgYW4gYXV0b21hdGljIGNhbGxvdXQgaXMgaW5zZXJ0ZWQgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZQorY29uZGl0aW9uLiBTdWNoIGEgY2FsbG91dCBtYXkgYWxzbyBiZSBpbnNlcnRlZCBleHBsaWNpdGx5LCBmb3IgZXhhbXBsZToKKy5zcAorICAoPyg/QzkpKD89YSlhYnxkZSkgICg/KD9DJXRleHQlKSg/IT1kKWFifGRlKQorLnNwCitUaGlzIGFwcGxpZXMgb25seSB0byBhc3NlcnRpb24gY29uZGl0aW9ucyAoYmVjYXVzZSB0aGV5IGFyZSB0aGVtc2VsdmVzCitpbmRlcGVuZGVudCBncm91cHMpLgorLlAKK0NhbGxvdXRzIGNhbiBiZSB1c2VmdWwgZm9yIHRyYWNraW5nIHRoZSBwcm9ncmVzcyBvZiBwYXR0ZXJuIG1hdGNoaW5nLiBUaGUKKy5cIiBIUkVGCitcZkJwY3JlMnRlc3RcZlAKKy5cIgorcHJvZ3JhbSBoYXMgYSBwYXR0ZXJuIHF1YWxpZmllciAoL2F1dG9fY2FsbG91dCkgdGhhdCBzZXRzIGF1dG9tYXRpYyBjYWxsb3V0cy4KK1doZW4gYW55IGNhbGxvdXRzIGFyZSBwcmVzZW50LCB0aGUgb3V0cHV0IGZyb20gXGZCcGNyZTJ0ZXN0XGZQIGluZGljYXRlcyBob3cKK3RoZSBwYXR0ZXJuIGlzIGJlaW5nIG1hdGNoZWQuIFRoaXMgaXMgdXNlZnVsIGluZm9ybWF0aW9uIHdoZW4geW91IGFyZSB0cnlpbmcgdG8KK29wdGltaXplIHRoZSBwZXJmb3JtYW5jZSBvZiBhIHBhcnRpY3VsYXIgcGF0dGVybi4KKy4KKy4KKy5TSCAiTUlTU0lORyBDQUxMT1VUUyIKKy5ycworLnNwCitZb3Ugc2hvdWxkIGJlIGF3YXJlIHRoYXQsIGJlY2F1c2Ugb2Ygb3B0aW1pemF0aW9ucyBpbiB0aGUgd2F5IFBDUkUyIGNvbXBpbGVzCithbmQgbWF0Y2hlcyBwYXR0ZXJucywgY2FsbG91dHMgc29tZXRpbWVzIGRvIG5vdCBoYXBwZW4gZXhhY3RseSBhcyB5b3UgbWlnaHQKK2V4cGVjdC4KKy4KKy4KKy5TUyAiQXV0by1wb3NzZXNzaWZpY2F0aW9uIgorLnJzCisuc3AKK0F0IGNvbXBpbGUgdGltZSwgUENSRTIgImF1dG8tcG9zc2Vzc2lmaWVzIiByZXBlYXRlZCBpdGVtcyB3aGVuIGl0IGtub3dzIHRoYXQKK3doYXQgZm9sbG93cyBjYW5ub3QgYmUgcGFydCBvZiB0aGUgcmVwZWF0LiBGb3IgZXhhbXBsZSwgYStbYmNdIGlzIGNvbXBpbGVkIGFzCitpZiBpdCB3ZXJlIGErK1tiY10uIFRoZSBcZkJwY3JlMnRlc3RcZlAgb3V0cHV0IHdoZW4gdGhpcyBwYXR0ZXJuIGlzIGNvbXBpbGVkCit3aXRoIFBDUkUyX0FOQ0hPUkVEIGFuZCBQQ1JFMl9BVVRPX0NBTExPVVQgYW5kIHRoZW4gYXBwbGllZCB0byB0aGUgc3RyaW5nCisiYWFhYSIgaXM6Cisuc3AKKyAgLS0tPmFhYWEKKyAgICswIF4gICAgICAgIGErCisgICArMiBeICAgXiAgICBbYmNdCisgIE5vIG1hdGNoCisuc3AKK1RoaXMgaW5kaWNhdGVzIHRoYXQgd2hlbiBtYXRjaGluZyBbYmNdIGZhaWxzLCB0aGVyZSBpcyBubyBiYWNrdHJhY2tpbmcgaW50byBhKworYW5kIHRoZXJlZm9yZSB0aGUgY2FsbG91dHMgdGhhdCB3b3VsZCBiZSB0YWtlbiBmb3IgdGhlIGJhY2t0cmFja3MgZG8gbm90IG9jY3VyLgorWW91IGNhbiBkaXNhYmxlIHRoZSBhdXRvLXBvc3Nlc3NpZnkgZmVhdHVyZSBieSBwYXNzaW5nIFBDUkUyX05PX0FVVE9fUE9TU0VTUyB0bworXGZCcGNyZTJfY29tcGlsZSgpXGZQLCBvciBzdGFydGluZyB0aGUgcGF0dGVybiB3aXRoICgqTk9fQVVUT19QT1NTRVNTKS4gSW4gdGhpcworY2FzZSwgdGhlIG91dHB1dCBjaGFuZ2VzIHRvIHRoaXM6Cisuc3AKKyAgLS0tPmFhYWEKKyAgICswIF4gICAgICAgIGErCisgICArMiBeICAgXiAgICBbYmNdCisgICArMiBeICBeICAgICBbYmNdCisgICArMiBeIF4gICAgICBbYmNdCisgICArMiBeXiAgICAgICBbYmNdCisgIE5vIG1hdGNoCisuc3AKK1RoaXMgdGltZSwgd2hlbiBtYXRjaGluZyBbYmNdIGZhaWxzLCB0aGUgbWF0Y2hlciBiYWNrdHJhY2tzIGludG8gYSsgYW5kIHRyaWVzCithZ2FpbiwgcmVwZWF0ZWRseSwgdW50aWwgYSsgaXRzZWxmIGZhaWxzLgorLgorLgorLlNTICJBdXRvbWF0aWMgLiogYW5jaG9yaW5nIgorLnJzCisuc3AKK0J5IGRlZmF1bHQsIGFuIG9wdGltaXphdGlvbiBpcyBhcHBsaWVkIHdoZW4gLiogaXMgdGhlIGZpcnN0IHNpZ25pZmljYW50IGl0ZW0gaW4KK2EgcGF0dGVybi4gSWYgUENSRTJfRE9UQUxMIGlzIHNldCwgc28gdGhhdCB0aGUgZG90IGNhbiBtYXRjaCBhbnkgY2hhcmFjdGVyLCB0aGUKK3BhdHRlcm4gaXMgYXV0b21hdGljYWxseSBhbmNob3JlZC4gSWYgUENSRTJfRE9UQUxMIGlzIG5vdCBzZXQsIGEgbWF0Y2ggY2FuCitzdGFydCBvbmx5IGFmdGVyIGFuIGludGVybmFsIG5ld2xpbmUgb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3ViamVjdCwgYW5kCitcZkJwY3JlMl9jb21waWxlKClcZlAgcmVtZW1iZXJzIHRoaXMuIFRoaXMgb3B0aW1pemF0aW9uIGlzIGRpc2FibGVkLCBob3dldmVyLAoraWYgLiogaXMgaW4gYW4gYXRvbWljIGdyb3VwIG9yIGlmIHRoZXJlIGlzIGEgYmFjayByZWZlcmVuY2UgdG8gdGhlIGNhcHR1cmluZworZ3JvdXAgaW4gd2hpY2ggaXQgYXBwZWFycy4gSXQgaXMgYWxzbyBkaXNhYmxlZCBpZiB0aGUgcGF0dGVybiBjb250YWlucyAoKlBSVU5FKQorb3IgKCpTS0lQKS4gSG93ZXZlciwgdGhlIHByZXNlbmNlIG9mIGNhbGxvdXRzIGRvZXMgbm90IGFmZmVjdCBpdC4KKy5QCitGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4gLipcZWQgaXMgY29tcGlsZWQgd2l0aCBQQ1JFMl9BVVRPX0NBTExPVVQgYW5kCithcHBsaWVkIHRvIHRoZSBzdHJpbmcgImFhIiwgdGhlIFxmQnBjcmUydGVzdFxmUCBvdXRwdXQgaXM6Cisuc3AKKyAgLS0tPmFhCisgICArMCBeICAgICAgLioKKyAgICsyIF4gXiAgICBcZWQKKyAgICsyIF5eICAgICBcZWQKKyAgICsyIF4gICAgICBcZWQKKyAgTm8gbWF0Y2gKKy5zcAorVGhpcyBzaG93cyB0aGF0IGFsbCBtYXRjaCBhdHRlbXB0cyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJqZWN0LiBJbgorb3RoZXIgd29yZHMsIHRoZSBwYXR0ZXJuIGlzIGFuY2hvcmVkLiBZb3UgY2FuIGRpc2FibGUgdGhpcyBvcHRpbWl6YXRpb24gYnkKK3Bhc3NpbmcgUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IgdG8gXGZCcGNyZTJfY29tcGlsZSgpXGZQLCBvciBzdGFydGluZyB0aGUKK3BhdHRlcm4gd2l0aCAoKk5PX0RPVFNUQVJfQU5DSE9SKS4gSW4gdGhpcyBjYXNlLCB0aGUgb3V0cHV0IGNoYW5nZXMgdG86Cisuc3AKKyAgLS0tPmFhCisgICArMCBeICAgICAgLioKKyAgICsyIF4gXiAgICBcZWQKKyAgICsyIF5eICAgICBcZWQKKyAgICsyIF4gICAgICBcZWQKKyAgICswICBeICAgICAuKgorICAgKzIgIF5eICAgIFxlZAorICAgKzIgIF4gICAgIFxlZAorICBObyBtYXRjaAorLnNwCitUaGlzIHNob3dzIG1vcmUgbWF0Y2ggYXR0ZW1wdHMsIHN0YXJ0aW5nIGF0IHRoZSBzZWNvbmQgc3ViamVjdCBjaGFyYWN0ZXIuCitBbm90aGVyIG9wdGltaXphdGlvbiwgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24sIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8KK3N1YnNlcXVlbnQgYXR0ZW1wdCB0byBtYXRjaCB3aXRoIGFuIGVtcHR5IHN1YmplY3QuCisuUAorSWYgYSBwYXR0ZXJuIGhhcyBtb3JlIHRoYW4gb25lIHRvcC1sZXZlbCBicmFuY2gsIGF1dG9tYXRpYyBhbmNob3Jpbmcgb2NjdXJzIGlmCithbGwgYnJhbmNoZXMgYXJlIGFuY2hvcmFibGUuCisuCisuCisuU1MgIk90aGVyIG9wdGltaXphdGlvbnMiCisucnMKKy5zcAorT3RoZXIgb3B0aW1pemF0aW9ucyB0aGF0IHByb3ZpZGUgZmFzdCAibm8gbWF0Y2giIHJlc3VsdHMgYWxzbyBhZmZlY3QgY2FsbG91dHMuCitGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4gaXMKKy5zcAorICBhYig/QzQpY2QKKy5zcAorUENSRTIga25vd3MgdGhhdCBhbnkgbWF0Y2hpbmcgc3RyaW5nIG11c3QgY29udGFpbiB0aGUgbGV0dGVyICJkIi4gSWYgdGhlCitzdWJqZWN0IHN0cmluZyBpcyAiYWJ5eiIsIHRoZSBsYWNrIG9mICJkIiBtZWFucyB0aGF0IG1hdGNoaW5nIGRvZXNuJ3QgZXZlcgorc3RhcnQsIGFuZCB0aGUgY2FsbG91dCBpcyBuZXZlciByZWFjaGVkLiBIb3dldmVyLCB3aXRoICJhYnlkIiwgdGhvdWdoIHRoZQorcmVzdWx0IGlzIHN0aWxsIG5vIG1hdGNoLCB0aGUgY2FsbG91dCBpcyBvYmV5ZWQuCisuUAorUENSRTIgYWxzbyBrbm93cyB0aGUgbWluaW11bSBsZW5ndGggb2YgYSBtYXRjaGluZyBzdHJpbmcsIGFuZCB3aWxsIGltbWVkaWF0ZWx5CitnaXZlIGEgIm5vIG1hdGNoIiByZXR1cm4gd2l0aG91dCBhY3R1YWxseSBydW5uaW5nIGEgbWF0Y2ggaWYgdGhlIHN1YmplY3QgaXMgbm90Citsb25nIGVub3VnaCwgb3IsIGZvciB1bmFuY2hvcmVkIHBhdHRlcm5zLCBpZiBpdCBoYXMgYmVlbiBzY2FubmVkIGZhciBlbm91Z2guCisuUAorWW91IGNhbiBkaXNhYmxlIHRoZXNlIG9wdGltaXphdGlvbnMgYnkgcGFzc2luZyB0aGUgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUKK29wdGlvbiB0byBcZkJwY3JlMl9jb21waWxlKClcZlAsIG9yIGJ5IHN0YXJ0aW5nIHRoZSBwYXR0ZXJuIHdpdGgKKygqTk9fU1RBUlRfT1BUKS4gVGhpcyBzbG93cyBkb3duIHRoZSBtYXRjaGluZyBwcm9jZXNzLCBidXQgZG9lcyBlbnN1cmUgdGhhdAorY2FsbG91dHMgc3VjaCBhcyB0aGUgZXhhbXBsZSBhYm92ZSBhcmUgb2JleWVkLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0iY2FsbG91dGludGVyZmFjZSI+PC9hPgorLlNIICJUSEUgQ0FMTE9VVCBJTlRFUkZBQ0UiCisucnMKKy5zcAorRHVyaW5nIG1hdGNoaW5nLCB3aGVuIFBDUkUyIHJlYWNoZXMgYSBjYWxsb3V0IHBvaW50LCBpZiBhbiBleHRlcm5hbCBmdW5jdGlvbiBpcworc2V0IGluIHRoZSBtYXRjaCBjb250ZXh0LCBpdCBpcyBjYWxsZWQuIFRoaXMgYXBwbGllcyB0byBib3RoIG5vcm1hbCBhbmQgREZBCittYXRjaGluZy4gVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBjYWxsb3V0IGZ1bmN0aW9uIGlzIGEgcG9pbnRlciB0byBhCitcZkJwY3JlMl9jYWxsb3V0XGZQIGJsb2NrLiBUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSB2b2lkICogY2FsbG91dCBkYXRhIHRoYXQKK3dhcyBzdXBwbGllZCB3aGVuIHRoZSBjYWxsb3V0IHdhcyBzZXQgdXAgYnkgY2FsbGluZyBcZkJwY3JlMl9zZXRfY2FsbG91dCgpXGZQCisoc2VlIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK2RvY3VtZW50YXRpb24pLiBUaGUgY2FsbG91dCBibG9jayBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIGZvbGxvd2luZyBmaWVsZHM6Cisuc3AKKyAgdWludDMyX3QgICAgICBcZkl2ZXJzaW9uXGZQOworICB1aW50MzJfdCAgICAgIFxmSWNhbGxvdXRfbnVtYmVyXGZQOworICB1aW50MzJfdCAgICAgIFxmSWNhcHR1cmVfdG9wXGZQOworICB1aW50MzJfdCAgICAgIFxmSWNhcHR1cmVfbGFzdFxmUDsKKyAgUENSRTJfU0laRSAgICpcZklvZmZzZXRfdmVjdG9yXGZQOworICBQQ1JFMl9TUFRSICAgIFxmSW1hcmtcZlA7CisgIFBDUkUyX1NQVFIgICAgXGZJc3ViamVjdFxmUDsKKyAgUENSRTJfU0laRSAgICBcZklzdWJqZWN0X2xlbmd0aFxmUDsKKyAgUENSRTJfU0laRSAgICBcZklzdGFydF9tYXRjaFxmUDsKKyAgUENSRTJfU0laRSAgICBcZkljdXJyZW50X3Bvc2l0aW9uXGZQOworICBQQ1JFMl9TSVpFICAgIFxmSXBhdHRlcm5fcG9zaXRpb25cZlA7CisgIFBDUkUyX1NJWkUgICAgXGZJbmV4dF9pdGVtX2xlbmd0aFxmUDsKKyAgUENSRTJfU0laRSAgICBcZkljYWxsb3V0X3N0cmluZ19vZmZzZXRcZlA7CisgIFBDUkUyX1NJWkUgICAgXGZJY2FsbG91dF9zdHJpbmdfbGVuZ3RoXGZQOworICBQQ1JFMl9TUFRSICAgIFxmSWNhbGxvdXRfc3RyaW5nXGZQOworLnNwCitUaGUgXGZJdmVyc2lvblxmUCBmaWVsZCBjb250YWlucyB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIGJsb2NrIGZvcm1hdC4gVGhlCitjdXJyZW50IHZlcnNpb24gaXMgMTsgdGhlIHRocmVlIGNhbGxvdXQgc3RyaW5nIGZpZWxkcyB3ZXJlIGFkZGVkIGZvciB0aGlzCit2ZXJzaW9uLiBJZiB5b3UgYXJlIHdyaXRpbmcgYW4gYXBwbGljYXRpb24gdGhhdCBtaWdodCB1c2UgYW4gZWFybGllciByZWxlYXNlIG9mCitQQ1JFMiwgeW91IHNob3VsZCBjaGVjayB0aGUgdmVyc2lvbiBudW1iZXIgYmVmb3JlIGFjY2Vzc2luZyBhbnkgb2YgdGhlc2UKK2ZpZWxkcy4gVGhlIHZlcnNpb24gbnVtYmVyIHdpbGwgaW5jcmVhc2UgaW4gZnV0dXJlIGlmIG1vcmUgZmllbGRzIGFyZSBhZGRlZCwKK2J1dCB0aGUgaW50ZW50aW9uIGlzIG5ldmVyIHRvIHJlbW92ZSBhbnkgb2YgdGhlIGV4aXN0aW5nIGZpZWxkcy4KKy4KKy4KKy5TUyAiRmllbGRzIGZvciBudW1lcmljYWwgY2FsbG91dHMiCisucnMKKy5zcAorRm9yIGEgbnVtZXJpY2FsIGNhbGxvdXQsIFxmSWNhbGxvdXRfc3RyaW5nXGZQIGlzIE5VTEwsIGFuZCBcZkljYWxsb3V0X251bWJlclxmUAorY29udGFpbnMgdGhlIG51bWJlciBvZiB0aGUgY2FsbG91dCwgaW4gdGhlIHJhbmdlIDAtMjU1LiBUaGlzIGlzIHRoZSBudW1iZXIKK3RoYXQgZm9sbG93cyAoP0MgZm9yIG1hbnVhbCBjYWxsb3V0czsgaXQgaXMgMjU1IGZvciBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZAorY2FsbG91dHMuCisuCisuCisuU1MgIkZpZWxkcyBmb3Igc3RyaW5nIGNhbGxvdXRzIgorLnJzCisuc3AKK0ZvciBjYWxsb3V0cyB3aXRoIHN0cmluZyBhcmd1bWVudHMsIFxmSWNhbGxvdXRfbnVtYmVyXGZQIGlzIGFsd2F5cyB6ZXJvLCBhbmQKK1xmSWNhbGxvdXRfc3RyaW5nXGZQIHBvaW50cyB0byB0aGUgc3RyaW5nIHRoYXQgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgY29tcGlsZWQKK3BhdHRlcm4uIEl0cyBsZW5ndGggaXMgZ2l2ZW4gYnkgXGZJY2FsbG91dF9zdHJpbmdfbGVuZ3RoXGZQLiBEdXBsaWNhdGVkIGVuZGluZworZGVsaW1pdGVycyB0aGF0IHdlcmUgcHJlc2VudCBpbiB0aGUgb3JpZ2luYWwgcGF0dGVybiBzdHJpbmcgaGF2ZSBiZWVuIHR1cm5lZAoraW50byBzaW5nbGUgY2hhcmFjdGVycywgYnV0IHRoZXJlIGlzIG5vIG90aGVyIHByb2Nlc3Npbmcgb2YgdGhlIGNhbGxvdXQgc3RyaW5nCithcmd1bWVudC4gQW4gYWRkaXRpb25hbCBjb2RlIHVuaXQgY29udGFpbmluZyBiaW5hcnkgemVybyBpcyBwcmVzZW50IGFmdGVyIHRoZQorc3RyaW5nLCBidXQgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBsZW5ndGguIFRoZSBkZWxpbWl0ZXIgdGhhdCB3YXMgdXNlZCB0byBzdGFydAordGhlIHN0cmluZyBpcyBhbHNvIHN0b3JlZCB3aXRoaW4gdGhlIHBhdHRlcm4sIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgc3RyaW5nCitpdHNlbGYuIFlvdSBjYW4gYWNjZXNzIHRoaXMgZGVsaW1pdGVyIGFzIFxmSWNhbGxvdXRfc3RyaW5nXGZQWy0xXSBpZiB5b3UgbmVlZAoraXQuCisuUAorVGhlIFxmSWNhbGxvdXRfc3RyaW5nX29mZnNldFxmUCBmaWVsZCBpcyB0aGUgY29kZSB1bml0IG9mZnNldCB0byB0aGUgc3RhcnQgb2YKK3RoZSBjYWxsb3V0IGFyZ3VtZW50IHN0cmluZyB3aXRoaW4gdGhlIG9yaWdpbmFsIHBhdHRlcm4gc3RyaW5nLiBUaGlzIGlzCitwcm92aWRlZCBmb3IgdGhlIGJlbmVmaXQgb2YgYXBwbGljYXRpb25zIHN1Y2ggYXMgc2NyaXB0IGxhbmd1YWdlcyB0aGF0IG1pZ2h0CituZWVkIHRvIHJlcG9ydCBlcnJvcnMgaW4gdGhlIGNhbGxvdXQgc3RyaW5nIHdpdGhpbiB0aGUgcGF0dGVybi4KKy4KKy4KKy5TUyAiRmllbGRzIGZvciBhbGwgY2FsbG91dHMiCisucnMKKy5zcAorVGhlIHJlbWFpbmluZyBmaWVsZHMgaW4gdGhlIGNhbGxvdXQgYmxvY2sgYXJlIHRoZSBzYW1lIGZvciBib3RoIGtpbmRzIG9mCitjYWxsb3V0LgorLlAKK1RoZSBcZklvZmZzZXRfdmVjdG9yXGZQIGZpZWxkIGlzIGEgcG9pbnRlciB0byB0aGUgdmVjdG9yIG9mIGNhcHR1cmluZyBvZmZzZXRzCisodGhlICJvdmVjdG9yIikgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSBtYXRjaGluZyBmdW5jdGlvbiBpbiB0aGUgbWF0Y2ggZGF0YQorYmxvY2suIFdoZW4gXGZCcGNyZTJfbWF0Y2goKVxmUCBpcyB1c2VkLCB0aGUgY29udGVudHMgY2FuIGJlIGluc3BlY3RlZCBpbgorb3JkZXIgdG8gZXh0cmFjdCBzdWJzdHJpbmdzIHRoYXQgaGF2ZSBiZWVuIG1hdGNoZWQgc28gZmFyLCBpbiB0aGUgc2FtZSB3YXkgYXMKK2ZvciBleHRyYWN0aW5nIHN1YnN0cmluZ3MgYWZ0ZXIgYSBtYXRjaCBoYXMgY29tcGxldGVkLiBGb3IgdGhlIERGQSBtYXRjaGluZworZnVuY3Rpb24sIHRoaXMgZmllbGQgaXMgbm90IHVzZWZ1bC4KKy5QCitUaGUgXGZJc3ViamVjdFxmUCBhbmQgXGZJc3ViamVjdF9sZW5ndGhcZlAgZmllbGRzIGNvbnRhaW4gY29waWVzIG9mIHRoZSB2YWx1ZXMKK3RoYXQgd2VyZSBwYXNzZWQgdG8gdGhlIG1hdGNoaW5nIGZ1bmN0aW9uLgorLlAKK1RoZSBcZklzdGFydF9tYXRjaFxmUCBmaWVsZCBub3JtYWxseSBjb250YWlucyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgc3ViamVjdCBhdAord2hpY2ggdGhlIGN1cnJlbnQgbWF0Y2ggYXR0ZW1wdCBzdGFydGVkLiBIb3dldmVyLCBpZiB0aGUgZXNjYXBlIHNlcXVlbmNlIFxlSworaGFzIGJlZW4gZW5jb3VudGVyZWQsIHRoaXMgdmFsdWUgaXMgY2hhbmdlZCB0byByZWZsZWN0IHRoZSBtb2RpZmllZCBzdGFydGluZworcG9pbnQuIElmIHRoZSBwYXR0ZXJuIGlzIG5vdCBhbmNob3JlZCwgdGhlIGNhbGxvdXQgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZAorc2V2ZXJhbCB0aW1lcyBmcm9tIHRoZSBzYW1lIHBvaW50IGluIHRoZSBwYXR0ZXJuIGZvciBkaWZmZXJlbnQgc3RhcnRpbmcgcG9pbnRzCitpbiB0aGUgc3ViamVjdC4KKy5QCitUaGUgXGZJY3VycmVudF9wb3NpdGlvblxmUCBmaWVsZCBjb250YWlucyB0aGUgb2Zmc2V0IHdpdGhpbiB0aGUgc3ViamVjdCBvZiB0aGUKK2N1cnJlbnQgbWF0Y2ggcG9pbnRlci4KKy5QCitXaGVuIHRoZSBcZkJwY3JlMl9tYXRjaCgpXGZQIGlzIHVzZWQsIHRoZSBcZkljYXB0dXJlX3RvcFxmUCBmaWVsZCBjb250YWlucyBvbmUKK21vcmUgdGhhbiB0aGUgbnVtYmVyIG9mIHRoZSBoaWdoZXN0IG51bWJlcmVkIGNhcHR1cmVkIHN1YnN0cmluZyBzbyBmYXIuIElmIG5vCitzdWJzdHJpbmdzIGhhdmUgYmVlbiBjYXB0dXJlZCwgdGhlIHZhbHVlIG9mIFxmSWNhcHR1cmVfdG9wXGZQIGlzIG9uZS4gVGhpcyBpcworYWx3YXlzIHRoZSBjYXNlIHdoZW4gdGhlIERGQSBmdW5jdGlvbnMgYXJlIHVzZWQsIGJlY2F1c2UgdGhleSBkbyBub3Qgc3VwcG9ydAorY2FwdHVyZWQgc3Vic3RyaW5ncy4KKy5QCitUaGUgXGZJY2FwdHVyZV9sYXN0XGZQIGZpZWxkIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50bHkgY2FwdHVyZWQKK3N1YnN0cmluZy4gSG93ZXZlciwgd2hlbiBhIHJlY3Vyc2lvbiBleGl0cywgdGhlIHZhbHVlIHJldmVydHMgdG8gd2hhdCBpdCB3YXMKK291dHNpZGUgdGhlIHJlY3Vyc2lvbiwgYXMgZG8gdGhlIHZhbHVlcyBvZiBhbGwgY2FwdHVyZWQgc3Vic3RyaW5ncy4gSWYgbm8KK3N1YnN0cmluZ3MgaGF2ZSBiZWVuIGNhcHR1cmVkLCB0aGUgdmFsdWUgb2YgXGZJY2FwdHVyZV9sYXN0XGZQIGlzIDAuIFRoaXMgaXMKK2Fsd2F5cyB0aGUgY2FzZSBmb3IgdGhlIERGQSBtYXRjaGluZyBmdW5jdGlvbnMuCisuUAorVGhlIFxmSXBhdHRlcm5fcG9zaXRpb25cZlAgZmllbGQgY29udGFpbnMgdGhlIG9mZnNldCBpbiB0aGUgcGF0dGVybiBzdHJpbmcgdG8KK3RoZSBuZXh0IGl0ZW0gdG8gYmUgbWF0Y2hlZC4KKy5QCitUaGUgXGZJbmV4dF9pdGVtX2xlbmd0aFxmUCBmaWVsZCBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBuZXh0IGl0ZW0gdG8gYmUKK21hdGNoZWQgaW4gdGhlIHBhdHRlcm4gc3RyaW5nLiBXaGVuIHRoZSBjYWxsb3V0IGltbWVkaWF0ZWx5IHByZWNlZGVzIGFuCithbHRlcm5hdGlvbiBiYXIsIGEgY2xvc2luZyBwYXJlbnRoZXNpcywgb3IgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgdGhlIGxlbmd0aAoraXMgemVyby4gV2hlbiB0aGUgY2FsbG91dCBwcmVjZWRlcyBhbiBvcGVuaW5nIHBhcmVudGhlc2lzLCB0aGUgbGVuZ3RoIGlzIHRoYXQKK29mIHRoZSBlbnRpcmUgc3VicGF0dGVybi4KKy5QCitUaGUgXGZJcGF0dGVybl9wb3NpdGlvblxmUCBhbmQgXGZJbmV4dF9pdGVtX2xlbmd0aFxmUCBmaWVsZHMgYXJlIGludGVuZGVkIHRvCitoZWxwIGluIGRpc3Rpbmd1aXNoaW5nIGJldHdlZW4gZGlmZmVyZW50IGF1dG9tYXRpYyBjYWxsb3V0cywgd2hpY2ggYWxsIGhhdmUgdGhlCitzYW1lIGNhbGxvdXQgbnVtYmVyLiBIb3dldmVyLCB0aGV5IGFyZSBzZXQgZm9yIGFsbCBjYWxsb3V0cywgYW5kIGFyZSB1c2VkIGJ5CitcZkJwY3JlMnRlc3RcZlAgdG8gc2hvdyB0aGUgbmV4dCBpdGVtIHRvIGJlIG1hdGNoZWQgd2hlbiBkaXNwbGF5aW5nIGNhbGxvdXQKK2luZm9ybWF0aW9uLgorLlAKK0luIGNhbGxvdXRzIGZyb20gXGZCcGNyZTJfbWF0Y2goKVxmUCB0aGUgXGZJbWFya1xmUCBmaWVsZCBjb250YWlucyBhIHBvaW50ZXIgdG8KK3RoZSB6ZXJvLXRlcm1pbmF0ZWQgbmFtZSBvZiB0aGUgbW9zdCByZWNlbnRseSBwYXNzZWQgKCpNQVJLKSwgKCpQUlVORSksIG9yCisoKlRIRU4pIGl0ZW0gaW4gdGhlIG1hdGNoLCBvciBOVUxMIGlmIG5vIHN1Y2ggaXRlbXMgaGF2ZSBiZWVuIHBhc3NlZC4gSW5zdGFuY2VzCitvZiAoKlBSVU5FKSBvciAoKlRIRU4pIHdpdGhvdXQgYSBuYW1lIGRvIG5vdCBvYmxpdGVyYXRlIGEgcHJldmlvdXMgKCpNQVJLKS4gSW4KK2NhbGxvdXRzIGZyb20gdGhlIERGQSBtYXRjaGluZyBmdW5jdGlvbiB0aGlzIGZpZWxkIGFsd2F5cyBjb250YWlucyBOVUxMLgorLgorLgorLlNIICJSRVRVUk4gVkFMVUVTIEZST00gQ0FMTE9VVFMiCisucnMKKy5zcAorVGhlIGV4dGVybmFsIGNhbGxvdXQgZnVuY3Rpb24gcmV0dXJucyBhbiBpbnRlZ2VyIHRvIFBDUkUyLiBJZiB0aGUgdmFsdWUgaXMKK3plcm8sIG1hdGNoaW5nIHByb2NlZWRzIGFzIG5vcm1hbC4gSWYgdGhlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCBtYXRjaGluZworZmFpbHMgYXQgdGhlIGN1cnJlbnQgcG9pbnQsIGJ1dCB0aGUgdGVzdGluZyBvZiBvdGhlciBtYXRjaGluZyBwb3NzaWJpbGl0aWVzCitnb2VzIGFoZWFkLCBqdXN0IGFzIGlmIGEgbG9va2FoZWFkIGFzc2VydGlvbiBoYWQgZmFpbGVkLiBJZiB0aGUgdmFsdWUgaXMgbGVzcwordGhhbiB6ZXJvLCB0aGUgbWF0Y2ggaXMgYWJhbmRvbmVkLCBhbmQgdGhlIG1hdGNoaW5nIGZ1bmN0aW9uIHJldHVybnMgdGhlCituZWdhdGl2ZSB2YWx1ZS4KKy5QCitOZWdhdGl2ZSB2YWx1ZXMgc2hvdWxkIG5vcm1hbGx5IGJlIGNob3NlbiBmcm9tIHRoZSBzZXQgb2YgUENSRTJfRVJST1JfeHh4Cit2YWx1ZXMuIEluIHBhcnRpY3VsYXIsIFBDUkUyX0VSUk9SX05PTUFUQ0ggZm9yY2VzIGEgc3RhbmRhcmQgIm5vIG1hdGNoIgorZmFpbHVyZS4gVGhlIGVycm9yIG51bWJlciBQQ1JFMl9FUlJPUl9DQUxMT1VUIGlzIHJlc2VydmVkIGZvciB1c2UgYnkgY2FsbG91dAorZnVuY3Rpb25zOyBpdCB3aWxsIG5ldmVyIGJlIHVzZWQgYnkgUENSRTIgaXRzZWxmLgorLgorLgorLlNIICJDQUxMT1VUIEVOVU1FUkFUSU9OIgorLnJzCisuc3AKKy5uZgorLkIgaW50IHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKGNvbnN0IHBjcmUyX2NvZGUgKlxmSWNvZGVcZlAsCisuQiAiICBpbnQgKCpcZkljYWxsYmFja1xmUCkocGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2sgKiwgdm9pZCAqKSwiCisuQiAiICB2b2lkICpcZkl1c2VyX2RhdGFcZlApOyIKKy5maQorLnNwCitBIHNjcmlwdCBsYW5ndWFnZSB0aGF0IHN1cHBvcnRzIHRoZSB1c2Ugb2Ygc3RyaW5nIGFyZ3VtZW50cyBpbiBjYWxsb3V0cyBtaWdodAorbGlrZSB0byBzY2FuIGFsbCB0aGUgY2FsbG91dHMgaW4gYSBwYXR0ZXJuIGJlZm9yZSBydW5uaW5nIHRoZSBtYXRjaC4gVGhpcyBjYW4KK2JlIGRvbmUgYnkgY2FsbGluZyBcZkJwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSgpXGZQLiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYQorcG9pbnRlciB0byBhIGNvbXBpbGVkIHBhdHRlcm4sIHRoZSBzZWNvbmQgcG9pbnRzIHRvIGEgY2FsbGJhY2sgZnVuY3Rpb24sIGFuZAordGhlIHRoaXJkIGlzIGFyYml0cmFyeSB1c2VyIGRhdGEuIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGV2ZXJ5CitjYWxsb3V0IGluIHRoZSBwYXR0ZXJuIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhci4gSXRzIGZpcnN0IGFyZ3VtZW50IGlzCithIHBvaW50ZXIgdG8gYSBjYWxsb3V0IGVudW1lcmF0aW9uIGJsb2NrLCBhbmQgaXRzIHNlY29uZCBhcmd1bWVudCBpcyB0aGUKK1xmSXVzZXJfZGF0YVxmUCB2YWx1ZSB0aGF0IHdhcyBwYXNzZWQgdG8gXGZCcGNyZTJfY2FsbG91dF9lbnVtZXJhdGUoKVxmUC4gVGhlCitkYXRhIGJsb2NrIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZmllbGRzOgorLnNwCisgIFxmSXZlcnNpb25cZlAgICAgICAgICAgICAgICAgQmxvY2sgdmVyc2lvbiBudW1iZXIKKyAgXGZJcGF0dGVybl9wb3NpdGlvblxmUCAgICAgICBPZmZzZXQgdG8gbmV4dCBpdGVtIGluIHBhdHRlcm4KKyAgXGZJbmV4dF9pdGVtX2xlbmd0aFxmUCAgICAgICBMZW5ndGggb2YgbmV4dCBpdGVtIGluIHBhdHRlcm4KKyAgXGZJY2FsbG91dF9udW1iZXJcZlAgICAgICAgICBOdW1iZXIgZm9yIG51bWJlcmVkIGNhbGxvdXRzCisgIFxmSWNhbGxvdXRfc3RyaW5nX29mZnNldFxmUCAgT2Zmc2V0IHRvIHN0cmluZyB3aXRoaW4gcGF0dGVybgorICBcZkljYWxsb3V0X3N0cmluZ19sZW5ndGhcZlAgIExlbmd0aCBvZiBjYWxsb3V0IHN0cmluZworICBcZkljYWxsb3V0X3N0cmluZ1xmUCAgICAgICAgIFBvaW50cyB0byBjYWxsb3V0IHN0cmluZyBvciBpcyBOVUxMCisuc3AKK1RoZSB2ZXJzaW9uIG51bWJlciBpcyBjdXJyZW50bHkgMC4gSXQgd2lsbCBpbmNyZWFzZSBpZiBuZXcgZmllbGRzIGFyZSBldmVyCithZGRlZCB0byB0aGUgYmxvY2suIFRoZSByZW1haW5pbmcgZmllbGRzIGFyZSB0aGUgc2FtZSBhcyB0aGVpciBuYW1lc2FrZXMgaW4gdGhlCitcZkJwY3JlMl9jYWxsb3V0XGZQIGJsb2NrIHRoYXQgaXMgdXNlZCBmb3IgY2FsbG91dHMgZHVyaW5nIG1hdGNoaW5nLCBhcworZGVzY3JpYmVkCisuXCIgSFRNTCA8YSBocmVmPSIjY2FsbG91dGludGVyZmFjZSI+CisuXCIgPC9hPgorYWJvdmUuCisuXCIKKy5QCitOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIFxmSXBhdHRlcm5fcG9zaXRpb25cZlAgaXMgdW5pcXVlIGZvciBlYWNoIGNhbGxvdXQuCitIb3dldmVyLCBpZiBhIGNhbGxvdXQgb2NjdXJzIGluc2lkZSBhIGdyb3VwIHRoYXQgaXMgcXVhbnRpZmllZCB3aXRoIGEgbm9uLXplcm8KK21pbmltdW0gb3IgYSBmaXhlZCBtYXhpbXVtLCB0aGUgZ3JvdXAgaXMgcmVwbGljYXRlZCBpbnNpZGUgdGhlIGNvbXBpbGVkCitwYXR0ZXJuLiBGb3IgZXhhbXBsZSwgYSBwYXR0ZXJuIHN1Y2ggYXMgLyhhKXsyfS8gaXMgY29tcGlsZWQgYXMgaWYgaXQgd2VyZQorLyhhKShhKS8uIFRoaXMgbWVhbnMgdGhhdCB0aGUgY2FsbG91dCB3aWxsIGJlIGVudW1lcmF0ZWQgbW9yZSB0aGFuIG9uY2UsIGJ1dAord2l0aCB0aGUgc2FtZSB2YWx1ZSBmb3IgXGZJcGF0dGVybl9wb3NpdGlvblxmUCBpbiBlYWNoIGNhc2UuCisuUAorVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHNob3VsZCBub3JtYWxseSByZXR1cm4gemVyby4gSWYgaXQgcmV0dXJucyBhIG5vbi16ZXJvCit2YWx1ZSwgc2Nhbm5pbmcgdGhlIHBhdHRlcm4gc3RvcHMsIGFuZCB0aGF0IHZhbHVlIGlzIHJldHVybmVkIGZyb20KK1xmQnBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKClcZlAuCisuCisuCisuU0ggQVVUSE9SCisucnMKKy5zcAorLm5mCitQaGlsaXAgSGF6ZWwKK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKK0NhbWJyaWRnZSwgRW5nbGFuZC4KKy5maQorLgorLgorLlNIIFJFVklTSU9OCisucnMKKy5zcAorLm5mCitMYXN0IHVwZGF0ZWQ6IDIzIE1hcmNoIDIwMTUKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJjb21wYXQuMyBiL2Rpc3QyL2RvYy9wY3JlMmNvbXBhdC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMzA2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJjb21wYXQuMwpAQCAtMCwwICsxLDE5MCBAQAorLlRIIFBDUkUyQ09NUEFUIDMgIjE1IE1hcmNoIDIwMTUiICJQQ1JFMiAxMC4yMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCAiRElGRkVSRU5DRVMgQkVUV0VFTiBQQ1JFMiBBTkQgUEVSTCIKKy5ycworLnNwCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGlmZmVyZW5jZXMgaW4gdGhlIHdheXMgdGhhdCBQQ1JFMiBhbmQgUGVybCBoYW5kbGUKK3JlZ3VsYXIgZXhwcmVzc2lvbnMuIFRoZSBkaWZmZXJlbmNlcyBkZXNjcmliZWQgaGVyZSBhcmUgd2l0aCByZXNwZWN0IHRvIFBlcmwKK3ZlcnNpb25zIDUuMTAgYW5kIGFib3ZlLgorLlAKKzEuIFBDUkUyIGhhcyBvbmx5IGEgc3Vic2V0IG9mIFBlcmwncyBVbmljb2RlIHN1cHBvcnQuIERldGFpbHMgb2Ygd2hhdCBpdCBkb2VzCitoYXZlIGFyZSBnaXZlbiBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnVuaWNvZGVcZlAKKy5cIgorcGFnZS4KKy5QCisyLiBQQ1JFMiBhbGxvd3MgcmVwZWF0IHF1YW50aWZpZXJzIG9ubHkgb24gcGFyZW50aGVzaXplZCBhc3NlcnRpb25zLCBidXQgdGhleQorZG8gbm90IG1lYW4gd2hhdCB5b3UgbWlnaHQgdGhpbmsuIEZvciBleGFtcGxlLCAoPyFhKXszfSBkb2VzIG5vdCBhc3NlcnQgdGhhdAordGhlIG5leHQgdGhyZWUgY2hhcmFjdGVycyBhcmUgbm90ICJhIi4gSXQganVzdCBhc3NlcnRzIHRoYXQgdGhlIG5leHQgY2hhcmFjdGVyCitpcyBub3QgImEiIHRocmVlIHRpbWVzIChpbiBwcmluY2lwbGU6IFBDUkUyIG9wdGltaXplcyB0aGlzIHRvIHJ1biB0aGUgYXNzZXJ0aW9uCitqdXN0IG9uY2UpLiBQZXJsIGFsbG93cyByZXBlYXQgcXVhbnRpZmllcnMgb24gb3RoZXIgYXNzZXJ0aW9ucyBzdWNoIGFzIFxlYiwgYnV0Cit0aGVzZSBkbyBub3Qgc2VlbSB0byBoYXZlIGFueSB1c2UuCisuUAorMy4gQ2FwdHVyaW5nIHN1YnBhdHRlcm5zIHRoYXQgb2NjdXIgaW5zaWRlIG5lZ2F0aXZlIGxvb2thaGVhZCBhc3NlcnRpb25zIGFyZQorY291bnRlZCwgYnV0IHRoZWlyIGVudHJpZXMgaW4gdGhlIG9mZnNldHMgdmVjdG9yIGFyZSBuZXZlciBzZXQuIFBlcmwgc29tZXRpbWVzCisoYnV0IG5vdCBhbHdheXMpIHNldHMgaXRzIG51bWVyaWNhbCB2YXJpYWJsZXMgZnJvbSBpbnNpZGUgbmVnYXRpdmUgYXNzZXJ0aW9ucy4KKy5QCis0LiBUaGUgZm9sbG93aW5nIFBlcmwgZXNjYXBlIHNlcXVlbmNlcyBhcmUgbm90IHN1cHBvcnRlZDogXGVsLCBcZXUsIFxlTCwKK1xlVSwgYW5kIFxlTiB3aGVuIGZvbGxvd2VkIGJ5IGEgY2hhcmFjdGVyIG5hbWUgb3IgVW5pY29kZSB2YWx1ZS4gKFxlTiBvbiBpdHMKK293biwgbWF0Y2hpbmcgYSBub24tbmV3bGluZSBjaGFyYWN0ZXIsIGlzIHN1cHBvcnRlZC4pIEluIGZhY3QgdGhlc2UgYXJlCitpbXBsZW1lbnRlZCBieSBQZXJsJ3MgZ2VuZXJhbCBzdHJpbmctaGFuZGxpbmcgYW5kIGFyZSBub3QgcGFydCBvZiBpdHMgcGF0dGVybgorbWF0Y2hpbmcgZW5naW5lLiBJZiBhbnkgb2YgdGhlc2UgYXJlIGVuY291bnRlcmVkIGJ5IFBDUkUyLCBhbiBlcnJvciBpcworZ2VuZXJhdGVkIGJ5IGRlZmF1bHQuIEhvd2V2ZXIsIGlmIHRoZSBQQ1JFMl9BTFRfQlNVWCBvcHRpb24gaXMgc2V0LAorXGVVIGFuZCBcZXUgYXJlIGludGVycHJldGVkIGFzIEVDTUFTY3JpcHQgaW50ZXJwcmV0cyB0aGVtLgorLlAKKzUuIFRoZSBQZXJsIGVzY2FwZSBzZXF1ZW5jZXMgXGVwLCBcZVAsIGFuZCBcZVggYXJlIHN1cHBvcnRlZCBvbmx5IGlmIFBDUkUyIGlzCitidWlsdCB3aXRoIFVuaWNvZGUgc3VwcG9ydC4gVGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgdGVzdGVkIHdpdGggXGVwIGFuZCBcZVAKK2FyZSBsaW1pdGVkIHRvIHRoZSBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnRpZXMgc3VjaCBhcyBMdSBhbmQgTmQsIHNjcmlwdCBuYW1lcworc3VjaCBhcyBHcmVlayBvciBIYW4sIGFuZCB0aGUgZGVyaXZlZCBwcm9wZXJ0aWVzIEFueSBhbmQgTCYuIFBDUkUyIGRvZXMgc3VwcG9ydAordGhlIENzIChzdXJyb2dhdGUpIHByb3BlcnR5LCB3aGljaCBQZXJsIGRvZXMgbm90OyB0aGUgUGVybCBkb2N1bWVudGF0aW9uIHNheXMKKyJCZWNhdXNlIFBlcmwgaGlkZXMgdGhlIG5lZWQgZm9yIHRoZSB1c2VyIHRvIHVuZGVyc3RhbmQgdGhlIGludGVybmFsCityZXByZXNlbnRhdGlvbiBvZiBVbmljb2RlIGNoYXJhY3RlcnMsIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW1wbGVtZW50IHRoZQorc29tZXdoYXQgbWVzc3kgY29uY2VwdCBvZiBzdXJyb2dhdGVzLiIKKy5QCis2LiBQQ1JFMiBkb2VzIHN1cHBvcnQgdGhlIFxlUS4uLlxlRSBlc2NhcGUgZm9yIHF1b3Rpbmcgc3Vic3RyaW5ncy4gQ2hhcmFjdGVycworaW4gYmV0d2VlbiBhcmUgdHJlYXRlZCBhcyBsaXRlcmFscy4gVGhpcyBpcyBzbGlnaHRseSBkaWZmZXJlbnQgZnJvbSBQZXJsIGluCit0aGF0ICQgYW5kIEAgYXJlIGFsc28gaGFuZGxlZCBhcyBsaXRlcmFscyBpbnNpZGUgdGhlIHF1b3Rlcy4gSW4gUGVybCwgdGhleQorY2F1c2UgdmFyaWFibGUgaW50ZXJwb2xhdGlvbiAoYnV0IG9mIGNvdXJzZSBQQ1JFMiBkb2VzIG5vdCBoYXZlIHZhcmlhYmxlcykuCitOb3RlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXM6Cisuc3AKKyAgICBQYXR0ZXJuICAgICAgICAgICAgUENSRTIgbWF0Y2hlcyAgICAgIFBlcmwgbWF0Y2hlcworLnNwCisuXCIgSk9JTgorICAgIFxlUWFiYyR4eXpcZUUgICAgICAgIGFiYyR4eXogICAgICAgICAgIGFiYyBmb2xsb3dlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cyBvZiAkeHl6CisgICAgXGVRYWJjXGUkeHl6XGVFICAgICAgIGFiY1xlJHh5eiAgICAgICAgICBhYmNcZSR4eXoKKyAgICBcZVFhYmNcZUVcZSRcZVF4eXpcZUUgICBhYmMkeHl6ICAgICAgICAgICBhYmMkeHl6Cisuc3AKK1RoZSBcZVEuLi5cZUUgc2VxdWVuY2UgaXMgcmVjb2duaXplZCBib3RoIGluc2lkZSBhbmQgb3V0c2lkZSBjaGFyYWN0ZXIgY2xhc3Nlcy4KKy5QCis3LiBGYWlybHkgb2J2aW91c2x5LCBQQ1JFMiBkb2VzIG5vdCBzdXBwb3J0IHRoZSAoP3tjb2RlfSkgYW5kICg/P3tjb2RlfSkKK2NvbnN0cnVjdGlvbnMuIEhvd2V2ZXIsIHRoZXJlIGlzIHN1cHBvcnQgZm9yIHJlY3Vyc2l2ZSBwYXR0ZXJucy4gVGhpcyBpcyBub3QKK2F2YWlsYWJsZSBpbiBQZXJsIDUuOCwgYnV0IGl0IGlzIGluIFBlcmwgNS4xMC4gQWxzbywgdGhlIFBDUkUyICJjYWxsb3V0IgorZmVhdHVyZSBhbGxvd3MgYW4gZXh0ZXJuYWwgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGR1cmluZyBwYXR0ZXJuIG1hdGNoaW5nLiBTZWUKK3RoZQorLlwiIEhSRUYKK1xmQnBjcmUyY2FsbG91dFxmUAorLlwiCitkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorLlAKKzguIFN1YnJvdXRpbmUgY2FsbHMgKHdoZXRoZXIgcmVjdXJzaXZlIG9yIG5vdCkgYXJlIHRyZWF0ZWQgYXMgYXRvbWljIGdyb3Vwcy4KK0F0b21pYyByZWN1cnNpb24gaXMgbGlrZSBQeXRob24sIGJ1dCB1bmxpa2UgUGVybC4gQ2FwdHVyZWQgdmFsdWVzIHRoYXQgYXJlIHNldAorb3V0c2lkZSBhIHN1YnJvdXRpbmUgY2FsbCBjYW4gYmUgcmVmZXJlbmNlZCBmcm9tIGluc2lkZSBpbiBQQ1JFMiwgYnV0IG5vdCBpbgorUGVybC4gVGhlcmUgaXMgYSBkaXNjdXNzaW9uIHRoYXQgZXhwbGFpbnMgdGhlc2UgZGlmZmVyZW5jZXMgaW4gbW9yZSBkZXRhaWwgaW4KK3RoZQorLlwiIEhUTUwgPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwjcmVjdXJzaW9uZGlmZmVyZW5jZSI+CisuXCIgPC9hPgorc2VjdGlvbiBvbiByZWN1cnNpb24gZGlmZmVyZW5jZXMgZnJvbSBQZXJsCisuXCIKK2luIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGF0dGVyblxmUAorLlwiCitwYWdlLgorLlAKKzkuIElmIGFueSBvZiB0aGUgYmFja3RyYWNraW5nIGNvbnRyb2wgdmVyYnMgYXJlIHVzZWQgaW4gYSBzdWJwYXR0ZXJuIHRoYXQgaXMKK2NhbGxlZCBhcyBhIHN1YnJvdXRpbmUgKHdoZXRoZXIgb3Igbm90IHJlY3Vyc2l2ZWx5KSwgdGhlaXIgZWZmZWN0IGlzIGNvbmZpbmVkCit0byB0aGF0IHN1YnBhdHRlcm47IGl0IGRvZXMgbm90IGV4dGVuZCB0byB0aGUgc3Vycm91bmRpbmcgcGF0dGVybi4gVGhpcyBpcyBub3QKK2Fsd2F5cyB0aGUgY2FzZSBpbiBQZXJsLiBJbiBwYXJ0aWN1bGFyLCBpZiAoKlRIRU4pIGlzIHByZXNlbnQgaW4gYSBncm91cCB0aGF0CitpcyBjYWxsZWQgYXMgYSBzdWJyb3V0aW5lLCBpdHMgYWN0aW9uIGlzIGxpbWl0ZWQgdG8gdGhhdCBncm91cCwgZXZlbiBpZiB0aGUKK2dyb3VwIGRvZXMgbm90IGNvbnRhaW4gYW55IHwgY2hhcmFjdGVycy4gTm90ZSB0aGF0IHN1Y2ggc3VicGF0dGVybnMgYXJlCitwcm9jZXNzZWQgYXMgYW5jaG9yZWQgYXQgdGhlIHBvaW50IHdoZXJlIHRoZXkgYXJlIHRlc3RlZC4KKy5QCisxMC4gSWYgYSBwYXR0ZXJuIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgYmFja3RyYWNraW5nIGNvbnRyb2wgdmVyYiwgdGhlIGZpcnN0CitvbmUgdGhhdCBpcyBiYWNrdHJhY2tlZCBvbnRvIGFjdHMuIEZvciBleGFtcGxlLCBpbiB0aGUgcGF0dGVybgorQSgqQ09NTUlUKUIoKlBSVU5FKUMgYSBmYWlsdXJlIGluIEIgdHJpZ2dlcnMgKCpDT01NSVQpLCBidXQgYSBmYWlsdXJlIGluIEMKK3RyaWdnZXJzICgqUFJVTkUpLiBQZXJsJ3MgYmVoYXZpb3VyIGlzIG1vcmUgY29tcGxleDsgaW4gbWFueSBjYXNlcyBpdCBpcyB0aGUKK3NhbWUgYXMgUENSRTIsIGJ1dCB0aGVyZSBhcmUgZXhhbXBsZXMgd2hlcmUgaXQgZGlmZmVycy4KKy5QCisxMS4gTW9zdCBiYWNrdHJhY2tpbmcgdmVyYnMgaW4gYXNzZXJ0aW9ucyBoYXZlIHRoZWlyIG5vcm1hbCBhY3Rpb25zLiBUaGV5IGFyZQorbm90IGNvbmZpbmVkIHRvIHRoZSBhc3NlcnRpb24uCisuUAorMTIuIFRoZXJlIGFyZSBzb21lIGRpZmZlcmVuY2VzIHRoYXQgYXJlIGNvbmNlcm5lZCB3aXRoIHRoZSBzZXR0aW5ncyBvZiBjYXB0dXJlZAorc3RyaW5ncyB3aGVuIHBhcnQgb2YgYSBwYXR0ZXJuIGlzIHJlcGVhdGVkLiBGb3IgZXhhbXBsZSwgbWF0Y2hpbmcgImFiYSIgYWdhaW5zdAordGhlIHBhdHRlcm4gL14oYShiKT8pKyQvIGluIFBlcmwgbGVhdmVzICQyIHVuc2V0LCBidXQgaW4gUENSRTIgaXQgaXMgc2V0IHRvCisiYiIuCisuUAorMTMuIFBDUkUyJ3MgaGFuZGxpbmcgb2YgZHVwbGljYXRlIHN1YnBhdHRlcm4gbnVtYmVycyBhbmQgZHVwbGljYXRlIHN1YnBhdHRlcm4KK25hbWVzIGlzIG5vdCBhcyBnZW5lcmFsIGFzIFBlcmwncy4gVGhpcyBpcyBhIGNvbnNlcXVlbmNlIG9mIHRoZSBmYWN0IHRoZSBQQ1JFMgord29ya3MgaW50ZXJuYWxseSBqdXN0IHdpdGggbnVtYmVycywgdXNpbmcgYW4gZXh0ZXJuYWwgdGFibGUgdG8gdHJhbnNsYXRlCitiZXR3ZWVuIG51bWJlcnMgYW5kIG5hbWVzLiBJbiBwYXJ0aWN1bGFyLCBhIHBhdHRlcm4gc3VjaCBhcyAoP3woPzxhPkEpfCg/PGIpQiksCit3aGVyZSB0aGUgdHdvIGNhcHR1cmluZyBwYXJlbnRoZXNlcyBoYXZlIHRoZSBzYW1lIG51bWJlciBidXQgZGlmZmVyZW50IG5hbWVzLAoraXMgbm90IHN1cHBvcnRlZCwgYW5kIGNhdXNlcyBhbiBlcnJvciBhdCBjb21waWxlIHRpbWUuIElmIGl0IHdlcmUgYWxsb3dlZCwgaXQKK3dvdWxkIG5vdCBiZSBwb3NzaWJsZSB0byBkaXN0aW5ndWlzaCB3aGljaCBwYXJlbnRoZXNlcyBtYXRjaGVkLCBiZWNhdXNlIGJvdGgKK25hbWVzIG1hcCB0byBjYXB0dXJpbmcgc3VicGF0dGVybiBudW1iZXIgMS4gVG8gYXZvaWQgdGhpcyBjb25mdXNpbmcgc2l0dWF0aW9uLAorYW4gZXJyb3IgaXMgZ2l2ZW4gYXQgY29tcGlsZSB0aW1lLgorLlAKKzE0LiBQZXJsIHJlY29nbml6ZXMgY29tbWVudHMgaW4gc29tZSBwbGFjZXMgdGhhdCBQQ1JFMiBkb2VzIG5vdCwgZm9yIGV4YW1wbGUsCitiZXR3ZWVuIHRoZSAoIGFuZCA/IGF0IHRoZSBzdGFydCBvZiBhIHN1YnBhdHRlcm4uIElmIHRoZSAveCBtb2RpZmllciBpcyBzZXQsCitQZXJsIGFsbG93cyB3aGl0ZSBzcGFjZSBiZXR3ZWVuICggYW5kID8gKHRob3VnaCBjdXJyZW50IFBlcmxzIHdhcm4gdGhhdCB0aGlzIGlzCitkZXByZWNhdGVkKSBidXQgUENSRTIgbmV2ZXIgZG9lcywgZXZlbiBpZiB0aGUgUENSRTJfRVhURU5ERUQgb3B0aW9uIGlzIHNldC4KKy5QCisxNS4gUGVybCwgd2hlbiBpbiB3YXJuaW5nIG1vZGUsIGdpdmVzIHdhcm5pbmdzIGZvciBjaGFyYWN0ZXIgY2xhc3NlcyBzdWNoIGFzCitbQS1cZWRdIG9yIFthLVs6ZGlnaXQ6XV0uIEl0IHRoZW4gdHJlYXRzIHRoZSBoeXBoZW5zIGFzIGxpdGVyYWxzLiBQQ1JFMiBoYXMgbm8KK3dhcm5pbmcgZmVhdHVyZXMsIHNvIGl0IGdpdmVzIGFuIGVycm9yIGluIHRoZXNlIGNhc2VzIGJlY2F1c2UgdGhleSBhcmUgYWxtb3N0CitjZXJ0YWlubHkgdXNlciBtaXN0YWtlcy4KKy5QCisxNi4gSW4gUENSRTIsIHRoZSB1cHBlci9sb3dlciBjYXNlIGNoYXJhY3RlciBwcm9wZXJ0aWVzIEx1IGFuZCBMbCBhcmUgbm90CithZmZlY3RlZCB3aGVuIGNhc2UtaW5kZXBlbmRlbnQgbWF0Y2hpbmcgaXMgc3BlY2lmaWVkLiBGb3IgZXhhbXBsZSwgXGVwe0x1fQorYWx3YXlzIG1hdGNoZXMgYW4gdXBwZXIgY2FzZSBsZXR0ZXIuIEkgdGhpbmsgUGVybCBoYXMgY2hhbmdlZCBpbiB0aGlzIHJlc3BlY3Q7CitpbiB0aGUgcmVsZWFzZSBhdCB0aGUgdGltZSBvZiB3cml0aW5nICg1LjE2KSwgXGVwe0x1fSBhbmQgXGVwe0xsfSBtYXRjaCBhbGwKK2xldHRlcnMsIHJlZ2FyZGxlc3Mgb2YgY2FzZSwgd2hlbiBjYXNlIGluZGVwZW5kZW5jZSBpcyBzcGVjaWZpZWQuCisuUAorMTcuIFBDUkUyIHByb3ZpZGVzIHNvbWUgZXh0ZW5zaW9ucyB0byB0aGUgUGVybCByZWd1bGFyIGV4cHJlc3Npb24gZmFjaWxpdGllcy4KK1BlcmwgNS4xMCBpbmNsdWRlcyBuZXcgZmVhdHVyZXMgdGhhdCBhcmUgbm90IGluIGVhcmxpZXIgdmVyc2lvbnMgb2YgUGVybCwgc29tZQorb2Ygd2hpY2ggKHN1Y2ggYXMgbmFtZWQgcGFyZW50aGVzZXMpIGhhdmUgYmVlbiBpbiBQQ1JFMiBmb3Igc29tZSB0aW1lLiBUaGlzCitsaXN0IGlzIHdpdGggcmVzcGVjdCB0byBQZXJsIDUuMTA6Cisuc3AKKyhhKSBBbHRob3VnaCBsb29rYmVoaW5kIGFzc2VydGlvbnMgaW4gUENSRTIgbXVzdCBtYXRjaCBmaXhlZCBsZW5ndGggc3RyaW5ncywKK2VhY2ggYWx0ZXJuYXRpdmUgYnJhbmNoIG9mIGEgbG9va2JlaGluZCBhc3NlcnRpb24gY2FuIG1hdGNoIGEgZGlmZmVyZW50IGxlbmd0aAorb2Ygc3RyaW5nLiBQZXJsIHJlcXVpcmVzIHRoZW0gYWxsIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgorLnNwCisoYikgSWYgUENSRTJfRE9MTEFSX0VORE9OTFkgaXMgc2V0IGFuZCBQQ1JFMl9NVUxUSUxJTkUgaXMgbm90IHNldCwgdGhlICQKK21ldGEtY2hhcmFjdGVyIG1hdGNoZXMgb25seSBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIHN0cmluZy4KKy5zcAorKGMpIEEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGEgbGV0dGVyIHdpdGggbm8gc3BlY2lhbCBtZWFuaW5nIGlzIGZhdWx0ZWQuIChQZXJsCitjYW4gYmUgbWFkZSB0byBpc3N1ZSBhIHdhcm5pbmcuKQorLnNwCisoZCkgSWYgUENSRTJfVU5HUkVFRFkgaXMgc2V0LCB0aGUgZ3JlZWRpbmVzcyBvZiB0aGUgcmVwZXRpdGlvbiBxdWFudGlmaWVycyBpcworaW52ZXJ0ZWQsIHRoYXQgaXMsIGJ5IGRlZmF1bHQgdGhleSBhcmUgbm90IGdyZWVkeSwgYnV0IGlmIGZvbGxvd2VkIGJ5IGEKK3F1ZXN0aW9uIG1hcmsgdGhleSBhcmUuCisuc3AKKyhlKSBQQ1JFMl9BTkNIT1JFRCBjYW4gYmUgdXNlZCBhdCBtYXRjaGluZyB0aW1lIHRvIGZvcmNlIGEgcGF0dGVybiB0byBiZSB0cmllZAorb25seSBhdCB0aGUgZmlyc3QgbWF0Y2hpbmcgcG9zaXRpb24gaW4gdGhlIHN1YmplY3Qgc3RyaW5nLgorLnNwCisoZikgVGhlIFBDUkUyX05PVEJPTCwgUENSRTJfTk9URU9MLCBQQ1JFMl9OT1RFTVBUWSwgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwgYW5kCitQQ1JFMl9OT19BVVRPX0NBUFRVUkUgb3B0aW9ucyBoYXZlIG5vIFBlcmwgZXF1aXZhbGVudHMuCisuc3AKKyhnKSBUaGUgXGVSIGVzY2FwZSBzZXF1ZW5jZSBjYW4gYmUgcmVzdHJpY3RlZCB0byBtYXRjaCBvbmx5IENSLCBMRiwgb3IgQ1JMRgorYnkgdGhlIFBDUkUyX0JTUl9BTllDUkxGIG9wdGlvbi4KKy5zcAorKGgpIFRoZSBjYWxsb3V0IGZhY2lsaXR5IGlzIFBDUkUyLXNwZWNpZmljLgorLnNwCisoaSkgVGhlIHBhcnRpYWwgbWF0Y2hpbmcgZmFjaWxpdHkgaXMgUENSRTItc3BlY2lmaWMuCisuc3AKKyhqKSBUaGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24gKFxmQnBjcmUyX2RmYV9tYXRjaCgpXGZQIG1hdGNoZXMgaW4gYQorZGlmZmVyZW50IHdheSBhbmQgaXMgbm90IFBlcmwtY29tcGF0aWJsZS4KKy5zcAorKGspIFBDUkUyIHJlY29nbml6ZXMgc29tZSBzcGVjaWFsIHNlcXVlbmNlcyBzdWNoIGFzICgqQ1IpIGF0IHRoZSBzdGFydCBvZgorYSBwYXR0ZXJuIHRoYXQgc2V0IG92ZXJhbGwgb3B0aW9ucyB0aGF0IGNhbm5vdCBiZSBjaGFuZ2VkIHdpdGhpbiB0aGUgcGF0dGVybi4KKy4KKy4KKy5TSCBBVVRIT1IKKy5ycworLnNwCisubmYKK1BoaWxpcCBIYXplbAorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorQ2FtYnJpZGdlLCBFbmdsYW5kLgorLmZpCisuCisuCisuU0ggUkVWSVNJT04KKy5ycworLnNwCisubmYKK0xhc3QgdXBkYXRlZDogMTUgTWFyY2ggMjAxNQorQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCisuZmkKZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMmRlbW8uMyBiL2Rpc3QyL2RvYy9wY3JlMmRlbW8uMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGVlZDBhCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyZGVtby4zCkBAIC0wLDAgKzEsNDQxIEBACisuXCIgU3RhcnQgZXhhbXBsZS4KKy5kZSBFWAorLiAgbnIgbUUgXFxuKC5mCisuICBuZgorLiAgbmgKKy4gIGZ0IENXCisuLgorLgorLgorLlwiIEVuZCBleGFtcGxlLgorLmRlIEVFCisuICBmdCBcXG4obUUKKy4gIGZpCisuICBoeSBcXG4oSFkKKy4uCisuCisuRVgKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICBQQ1JFMiBERU1PTlNUUkFUSU9OIFBST0dSQU0gICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpcyBhIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB0byBpbGx1c3RyYXRlIGEgc3RyYWlnaHRmb3J3YXJkIHdheSBvZgorY2FsbGluZyB0aGUgUENSRTIgcmVndWxhciBleHByZXNzaW9uIGxpYnJhcnkgZnJvbSBhIEMgcHJvZ3JhbS4gU2VlIHRoZQorcGNyZTJzYW1wbGUgZG9jdW1lbnRhdGlvbiBmb3IgYSBzaG9ydCBkaXNjdXNzaW9uICgibWFuIHBjcmUyc2FtcGxlIiBpZiB5b3UgaGF2ZQordGhlIFBDUkUyIG1hbiBwYWdlcyBpbnN0YWxsZWQpLiBQQ1JFMiBpcyBhIHJldmlzZWQgQVBJIGZvciB0aGUgbGlicmFyeSwgYW5kIGlzCitpbmNvbXBhdGlibGUgd2l0aCB0aGUgb3JpZ2luYWwgUENSRSBBUEkuCisKK1RoZXJlIGFyZSBhY3R1YWxseSB0aHJlZSBsaWJyYXJpZXMsIGVhY2ggc3VwcG9ydGluZyBhIGRpZmZlcmVudCBjb2RlIHVuaXQKK3dpZHRoLiBUaGlzIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB1c2VzIHRoZSA4LWJpdCBsaWJyYXJ5LgorCitJbiBVbml4LWxpa2UgZW52aXJvbm1lbnRzLCBpZiBQQ1JFMiBpcyBpbnN0YWxsZWQgaW4geW91ciBzdGFuZGFyZCBzeXN0ZW0KK2xpYnJhcmllcywgeW91IHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgdGhpcyBwcm9ncmFtIHVzaW5nIHRoaXMgY29tbWFuZDoKKworZ2NjIC1XYWxsIHBjcmUyZGVtby5jIC1scGNyZTItOCAtbyBwY3JlMmRlbW8KKworSWYgUENSRTIgaXMgbm90IGluc3RhbGxlZCBpbiBhIHN0YW5kYXJkIHBsYWNlLCBpdCBpcyBsaWtlbHkgdG8gYmUgaW5zdGFsbGVkCit3aXRoIHN1cHBvcnQgZm9yIHRoZSBwa2ctY29uZmlnIG1lY2hhbmlzbS4gSWYgeW91IGhhdmUgcGtnLWNvbmZpZywgeW91IGNhbgorY29tcGlsZSB0aGlzIHByb2dyYW0gdXNpbmcgdGhpcyBjb21tYW5kOgorCitnY2MgLVdhbGwgcGNyZTJkZW1vLmMgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIGxpYnBjcmUyLThgIC1vIHBjcmUyZGVtbworCitJZiB5b3UgZG8gbm90IGhhdmUgcGtnLWNvbmZpZywgeW91IG1heSBoYXZlIHRvIHVzZSB0aGlzOgorCitnY2MgLVdhbGwgcGNyZTJkZW1vLmMgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLUwvdXNyL2xvY2FsL2xpYiBcZQorICAtUi91c3IvbG9jYWwvbGliIC1scGNyZTItOCAtbyBwY3JlMmRlbW8KKworUmVwbGFjZSAiL3Vzci9sb2NhbC9pbmNsdWRlIiBhbmQgIi91c3IvbG9jYWwvbGliIiB3aXRoIHdoZXJldmVyIHRoZSBpbmNsdWRlIGFuZAorbGlicmFyeSBmaWxlcyBmb3IgUENSRTIgYXJlIGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbS4gT25seSBzb21lIG9wZXJhdGluZworc3lzdGVtcyAoU29sYXJpcyBpcyBvbmUpIHVzZSB0aGUgLVIgb3B0aW9uLgorCitCdWlsZGluZyB1bmRlciBXaW5kb3dzOgorCitJZiB5b3Ugd2FudCB0byBzdGF0aWNhbGx5IGxpbmsgdGhpcyBwcm9ncmFtIGFnYWluc3QgYSBub24tZGxsIC5hIGZpbGUsIHlvdSBtdXN0CitkZWZpbmUgUENSRTJfU1RBVElDIGJlZm9yZSBpbmNsdWRpbmcgcGNyZTIuaCwgc28gaW4gdGhpcyBlbnZpcm9ubWVudCwgdW5jb21tZW50Cit0aGUgZm9sbG93aW5nIGxpbmUuICovCisKKy8qICNkZWZpbmUgUENSRTJfU1RBVElDICovCisKKy8qIFRoaXMgbWFjcm8gbXVzdCBiZSBkZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgcGNyZTIuaC4gRm9yIGEgcHJvZ3JhbSB0aGF0IHVzZXMKK29ubHkgb25lIGNvZGUgdW5pdCB3aWR0aCwgaXQgbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIGdlbmVyaWMgZnVuY3Rpb24gbmFtZXMKK3N1Y2ggYXMgcGNyZTJfY29tcGlsZSgpLiAqLworCisjZGVmaW5lIFBDUkUyX0NPREVfVU5JVF9XSURUSCA4CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHBjcmUyLmg+CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIEhlcmUgaXMgdGhlIHByb2dyYW0uIFRoZSBBUEkgaW5jbHVkZXMgdGhlIGNvbmNlcHQgb2YgImNvbnRleHRzIiBmb3IgICAgICoKKyogc2V0dGluZyB1cCB1bnVzdWFsIGludGVyZmFjZSByZXF1aXJlbWVudHMgZm9yIGNvbXBpbGluZyBhbmQgbWF0Y2hpbmcsICAgKgorKiBzdWNoIGFzIGN1c3RvbSBtZW1vcnkgbWFuYWdlcnMgYW5kIG5vbi1zdGFuZGFyZCBuZXdsaW5lIGRlZmluaXRpb25zLiAgICAqCisqIFRoaXMgcHJvZ3JhbSBkb2VzIG5vdCBkbyBhbnkgb2YgdGhpcywgc28gaXQgbWFrZXMgbm8gdXNlIG9mIGNvbnRleHRzLCAgICoKKyogYWx3YXlzIHBhc3NpbmcgTlVMTCB3aGVyZSBhIGNvbnRleHQgY291bGQgYmUgZ2l2ZW4uICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKK3BjcmUyX2NvZGUgKnJlOworUENSRTJfU1BUUiBwYXR0ZXJuOyAgICAgLyogUENSRTJfU1BUUiBpcyBhIHBvaW50ZXIgdG8gdW5zaWduZWQgY29kZSB1bml0cyBvZiAqLworUENSRTJfU1BUUiBzdWJqZWN0OyAgICAgLyogdGhlIGFwcHJvcHJpYXRlIHdpZHRoICg4LCAxNiwgb3IgMzIgYml0cykuICovCitQQ1JFMl9TUFRSIG5hbWVfdGFibGU7CisKK2ludCBjcmxmX2lzX25ld2xpbmU7CitpbnQgZXJyb3JudW1iZXI7CitpbnQgZmluZF9hbGw7CitpbnQgaTsKK2ludCBuYW1lY291bnQ7CitpbnQgbmFtZV9lbnRyeV9zaXplOworaW50IHJjOworaW50IHV0Zjg7CisKK3VpbnQzMl90IG9wdGlvbl9iaXRzOwordWludDMyX3QgbmV3bGluZTsKKworUENSRTJfU0laRSBlcnJvcm9mZnNldDsKK1BDUkUyX1NJWkUgKm92ZWN0b3I7CisKK3NpemVfdCBzdWJqZWN0X2xlbmd0aDsKK3BjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGE7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogRmlyc3QsIHNvcnQgb3V0IHRoZSBjb21tYW5kIGxpbmUuIFRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIG9wdGlvbiBhdCAgKgorKiB0aGUgbW9tZW50LCAiLWciIHRvIHJlcXVlc3QgcmVwZWF0ZWQgbWF0Y2hpbmcgdG8gZmluZCBhbGwgb2NjdXJyZW5jZXMsICAqCisqIGxpa2UgUGVybCdzIC9nIG9wdGlvbi4gV2Ugc2V0IHRoZSB2YXJpYWJsZSBmaW5kX2FsbCB0byBhIG5vbi16ZXJvIHZhbHVlICoKKyogaWYgdGhlIC1nIG9wdGlvbiBpcyBwcmVzZW50LiBBcGFydCBmcm9tIHRoYXQsIHRoZXJlIG11c3QgYmUgZXhhY3RseSB0d28gKgorKiBhcmd1bWVudHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZmluZF9hbGwgPSAwOworZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgeworICBpZiAoc3RyY21wKGFyZ3ZbaV0sICItZyIpID09IDApIGZpbmRfYWxsID0gMTsKKyAgICBlbHNlIGJyZWFrOworICB9CisKKy8qIEFmdGVyIHRoZSBvcHRpb25zLCB3ZSByZXF1aXJlIGV4YWN0bHkgdHdvIGFyZ3VtZW50cywgd2hpY2ggYXJlIHRoZSBwYXR0ZXJuLAorYW5kIHRoZSBzdWJqZWN0IHN0cmluZy4gKi8KKworaWYgKGFyZ2MgLSBpICE9IDIpCisgIHsKKyAgcHJpbnRmKCJUd28gYXJndW1lbnRzIHJlcXVpcmVkOiBhIHJlZ2V4IGFuZCBhIHN1YmplY3Qgc3RyaW5nXGVuIik7CisgIHJldHVybiAxOworICB9CisKKy8qIEFzIHBhdHRlcm4gYW5kIHN1YmplY3QgYXJlIGNoYXIgYXJndW1lbnRzLCB0aGV5IGNhbiBiZSBzdHJhaWdodGZvcndhcmRseQorY2FzdCB0byBQQ1JFMl9TUFRSIGFzIHdlIGFyZSB3b3JraW5nIGluIDgtYml0IGNvZGUgdW5pdHMuICovCisKK3BhdHRlcm4gPSAoUENSRTJfU1BUUilhcmd2W2ldOworc3ViamVjdCA9IChQQ1JFMl9TUFRSKWFyZ3ZbaSsxXTsKK3N1YmplY3RfbGVuZ3RoID0gc3RybGVuKChjaGFyICopc3ViamVjdCk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogTm93IHdlIGFyZSBnb2luZyB0byBjb21waWxlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiwgYW5kIGhhbmRsZSAqCisqIGFueSBlcnJvcnMgdGhhdCBhcmUgZGV0ZWN0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworcmUgPSBwY3JlMl9jb21waWxlKAorICBwYXR0ZXJuLCAgICAgICAgICAgICAgIC8qIHRoZSBwYXR0ZXJuICovCisgIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCwgLyogaW5kaWNhdGVzIHBhdHRlcm4gaXMgemVyby10ZXJtaW5hdGVkICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgLyogZGVmYXVsdCBvcHRpb25zICovCisgICZlcnJvcm51bWJlciwgICAgICAgICAgLyogZm9yIGVycm9yIG51bWJlciAqLworICAmZXJyb3JvZmZzZXQsICAgICAgICAgIC8qIGZvciBlcnJvciBvZmZzZXQgKi8KKyAgTlVMTCk7ICAgICAgICAgICAgICAgICAvKiB1c2UgZGVmYXVsdCBjb21waWxlIGNvbnRleHQgKi8KKworLyogQ29tcGlsYXRpb24gZmFpbGVkOiBwcmludCB0aGUgZXJyb3IgbWVzc2FnZSBhbmQgZXhpdC4gKi8KKworaWYgKHJlID09IE5VTEwpCisgIHsKKyAgUENSRTJfVUNIQVIgYnVmZmVyWzI1Nl07CisgIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKGVycm9ybnVtYmVyLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsKKyAgcHJpbnRmKCJQQ1JFMiBjb21waWxhdGlvbiBmYWlsZWQgYXQgb2Zmc2V0ICVkOiAlc1xlbiIsIChpbnQpZXJyb3JvZmZzZXQsCisgICAgYnVmZmVyKTsKKyAgcmV0dXJuIDE7CisgIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBJZiB0aGUgY29tcGlsYXRpb24gc3VjY2VlZGVkLCB3ZSBjYWxsIFBDUkUgYWdhaW4sIGluIG9yZGVyIHRvIGRvIGEgICAgICoKKyogcGF0dGVybiBtYXRjaCBhZ2FpbnN0IHRoZSBzdWJqZWN0IHN0cmluZy4gVGhpcyBkb2VzIGp1c3QgT05FIG1hdGNoLiBJZiAqCisqIGZ1cnRoZXIgbWF0Y2hpbmcgaXMgbmVlZGVkLCBpdCB3aWxsIGJlIGRvbmUgYmVsb3cuIEJlZm9yZSBydW5uaW5nIHRoZSAgKgorKiBtYXRjaCB3ZSBtdXN0IHNldCB1cCBhIG1hdGNoX2RhdGEgYmxvY2sgZm9yIGhvbGRpbmcgdGhlIHJlc3VsdC4gICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFVzaW5nIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBibG9jayBpcyBleGFjdGx5IHRoZSByaWdodCBzaXplIGZvcgordGhlIG51bWJlciBvZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgaW4gdGhlIHBhdHRlcm4uICovCisKK21hdGNoX2RhdGEgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4ocmUsIE5VTEwpOworCityYyA9IHBjcmUyX21hdGNoKAorICByZSwgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbXBpbGVkIHBhdHRlcm4gKi8KKyAgc3ViamVjdCwgICAgICAgICAgICAgIC8qIHRoZSBzdWJqZWN0IHN0cmluZyAqLworICBzdWJqZWN0X2xlbmd0aCwgICAgICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgLyogc3RhcnQgYXQgb2Zmc2V0IDAgaW4gdGhlIHN1YmplY3QgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgb3B0aW9ucyAqLworICBtYXRjaF9kYXRhLCAgICAgICAgICAgLyogYmxvY2sgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCAqLworICBOVUxMKTsgICAgICAgICAgICAgICAgLyogdXNlIGRlZmF1bHQgbWF0Y2ggY29udGV4dCAqLworCisvKiBNYXRjaGluZyBmYWlsZWQ6IGhhbmRsZSBlcnJvciBjYXNlcyAqLworCitpZiAocmMgPCAwKQorICB7CisgIHN3aXRjaChyYykKKyAgICB7CisgICAgY2FzZSBQQ1JFMl9FUlJPUl9OT01BVENIOiBwcmludGYoIk5vIG1hdGNoXGVuIik7IGJyZWFrOworICAgIC8qCisgICAgSGFuZGxlIG90aGVyIHNwZWNpYWwgY2FzZXMgaWYgeW91IGxpa2UKKyAgICAqLworICAgIGRlZmF1bHQ6IHByaW50ZigiTWF0Y2hpbmcgZXJyb3IgJWRcZW4iLCByYyk7IGJyZWFrOworICAgIH0KKyAgcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKG1hdGNoX2RhdGEpOyAgIC8qIFJlbGVhc2UgbWVtb3J5IHVzZWQgZm9yIHRoZSBtYXRjaCAqLworICBwY3JlMl9jb2RlX2ZyZWUocmUpOyAgICAgICAgICAgICAgICAgLyogZGF0YSBhbmQgdGhlIGNvbXBpbGVkIHBhdHRlcm4uICovCisgIHJldHVybiAxOworICB9CisKKy8qIE1hdGNoIHN1Y2NlZGVkLiBHZXQgYSBwb2ludGVyIHRvIHRoZSBvdXRwdXQgdmVjdG9yLCB3aGVyZSBzdHJpbmcgb2Zmc2V0cyBhcmUKK3N0b3JlZC4gKi8KKworb3ZlY3RvciA9IHBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIobWF0Y2hfZGF0YSk7CitwcmludGYoIlxlbk1hdGNoIHN1Y2NlZWRlZCBhdCBvZmZzZXQgJWRcZW4iLCAoaW50KW92ZWN0b3JbMF0pOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIFdlIGhhdmUgZm91bmQgdGhlIGZpcnN0IG1hdGNoIHdpdGhpbiB0aGUgc3ViamVjdCBzdHJpbmcuIElmIHRoZSBvdXRwdXQgKgorKiB2ZWN0b3Igd2Fzbid0IGJpZyBlbm91Z2gsIHNheSBzby4gVGhlbiBvdXRwdXQgYW55IHN1YnN0cmluZ3MgdGhhdCB3ZXJlICoKKyogY2FwdHVyZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGUgb3V0cHV0IHZlY3RvciB3YXNuJ3QgYmlnIGVub3VnaC4gVGhpcyBzaG91bGQgbm90IGhhcHBlbiwgYmVjYXVzZSB3ZSB1c2VkCitwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4oKSBhYm92ZS4gKi8KKworaWYgKHJjID09IDApCisgIHByaW50Zigib3ZlY3RvciB3YXMgbm90IGJpZyBlbm91Z2ggZm9yIGFsbCB0aGUgY2FwdHVyZWQgc3Vic3RyaW5nc1xlbiIpOworCisvKiBTaG93IHN1YnN0cmluZ3Mgc3RvcmVkIGluIHRoZSBvdXRwdXQgdmVjdG9yIGJ5IG51bWJlci4gT2J2aW91c2x5LCBpbiBhIHJlYWwKK2FwcGxpY2F0aW9uIHlvdSBtaWdodCB3YW50IHRvIGRvIHRoaW5ncyBvdGhlciB0aGFuIHByaW50IHRoZW0uICovCisKK2ZvciAoaSA9IDA7IGkgPCByYzsgaSsrKQorICB7CisgIFBDUkUyX1NQVFIgc3Vic3RyaW5nX3N0YXJ0ID0gc3ViamVjdCArIG92ZWN0b3JbMippXTsKKyAgc2l6ZV90IHN1YnN0cmluZ19sZW5ndGggPSBvdmVjdG9yWzIqaSsxXSAtIG92ZWN0b3JbMippXTsKKyAgcHJpbnRmKCIlMmQ6ICUuKnNcZW4iLCBpLCAoaW50KXN1YnN0cmluZ19sZW5ndGgsIChjaGFyICopc3Vic3RyaW5nX3N0YXJ0KTsKKyAgfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBUaGF0IGNvbmNsdWRlcyB0aGUgYmFzaWMgcGFydCBvZiB0aGlzIGRlbW9uc3RyYXRpb24gcHJvZ3JhbS4gV2UgaGF2ZSAgICAqCisqIGNvbXBpbGVkIGEgcGF0dGVybiwgYW5kIHBlcmZvcm1lZCBhIHNpbmdsZSBtYXRjaC4gVGhlIGNvZGUgdGhhdCBmb2xsb3dzICoKKyogc2hvd3MgZmlyc3QgaG93IHRvIGFjY2VzcyBuYW1lZCBzdWJzdHJpbmdzLCBhbmQgdGhlbiBob3cgdG8gY29kZSBmb3IgICAgKgorKiByZXBlYXRlZCBtYXRjaGVzIG9uIHRoZSBzYW1lIHN1YmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgbmFtZWQgc3Vic3RyaW5ncywgYW5kIGlmIHNvLCBzaG93IHRoZW0gYnkgbmFtZS4gRmlyc3QKK3dlIGhhdmUgdG8gZXh0cmFjdCB0aGUgY291bnQgb2YgbmFtZWQgcGFyZW50aGVzZXMgZnJvbSB0aGUgcGF0dGVybi4gKi8KKworKHZvaWQpcGNyZTJfcGF0dGVybl9pbmZvKAorICByZSwgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbXBpbGVkIHBhdHRlcm4gKi8KKyAgUENSRTJfSU5GT19OQU1FQ09VTlQsIC8qIGdldCB0aGUgbnVtYmVyIG9mIG5hbWVkIHN1YnN0cmluZ3MgKi8KKyAgJm5hbWVjb3VudCk7ICAgICAgICAgIC8qIHdoZXJlIHRvIHB1dCB0aGUgYW5zd2VyICovCisKK2lmIChuYW1lY291bnQgPD0gMCkgcHJpbnRmKCJObyBuYW1lZCBzdWJzdHJpbmdzXGVuIik7IGVsc2UKKyAgeworICBQQ1JFMl9TUFRSIHRhYnB0cjsKKyAgcHJpbnRmKCJOYW1lZCBzdWJzdHJpbmdzXGVuIik7CisKKyAgLyogQmVmb3JlIHdlIGNhbiBhY2Nlc3MgdGhlIHN1YnN0cmluZ3MsIHdlIG11c3QgZXh0cmFjdCB0aGUgdGFibGUgZm9yCisgIHRyYW5zbGF0aW5nIG5hbWVzIHRvIG51bWJlcnMsIGFuZCB0aGUgc2l6ZSBvZiBlYWNoIGVudHJ5IGluIHRoZSB0YWJsZS4gKi8KKworICAodm9pZClwY3JlMl9wYXR0ZXJuX2luZm8oCisgICAgcmUsICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tcGlsZWQgcGF0dGVybiAqLworICAgIFBDUkUyX0lORk9fTkFNRVRBQkxFLCAgICAgLyogYWRkcmVzcyBvZiB0aGUgdGFibGUgKi8KKyAgICAmbmFtZV90YWJsZSk7ICAgICAgICAgICAgIC8qIHdoZXJlIHRvIHB1dCB0aGUgYW5zd2VyICovCisKKyAgKHZvaWQpcGNyZTJfcGF0dGVybl9pbmZvKAorICAgIHJlLCAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbXBpbGVkIHBhdHRlcm4gKi8KKyAgICBQQ1JFMl9JTkZPX05BTUVFTlRSWVNJWkUsIC8qIHNpemUgb2YgZWFjaCBlbnRyeSBpbiB0aGUgdGFibGUgKi8KKyAgICAmbmFtZV9lbnRyeV9zaXplKTsgICAgICAgIC8qIHdoZXJlIHRvIHB1dCB0aGUgYW5zd2VyICovCisKKyAgLyogTm93IHdlIGNhbiBzY2FuIHRoZSB0YWJsZSBhbmQsIGZvciBlYWNoIGVudHJ5LCBwcmludCB0aGUgbnVtYmVyLCB0aGUgbmFtZSwKKyAgYW5kIHRoZSBzdWJzdHJpbmcgaXRzZWxmLiBJbiB0aGUgOC1iaXQgbGlicmFyeSB0aGUgbnVtYmVyIGlzIGhlbGQgaW4gdHdvCisgIGJ5dGVzLCBtb3N0IHNpZ25pZmljYW50IGZpcnN0LiAqLworCisgIHRhYnB0ciA9IG5hbWVfdGFibGU7CisgIGZvciAoaSA9IDA7IGkgPCBuYW1lY291bnQ7IGkrKykKKyAgICB7CisgICAgaW50IG4gPSAodGFicHRyWzBdIDw8IDgpIHwgdGFicHRyWzFdOworICAgIHByaW50ZigiKCVkKSAlKnM6ICUuKnNcZW4iLCBuLCBuYW1lX2VudHJ5X3NpemUgLSAzLCB0YWJwdHIgKyAyLAorICAgICAgKGludCkob3ZlY3RvclsyKm4rMV0gLSBvdmVjdG9yWzIqbl0pLCBzdWJqZWN0ICsgb3ZlY3RvclsyKm5dKTsKKyAgICB0YWJwdHIgKz0gbmFtZV9lbnRyeV9zaXplOworICAgIH0KKyAgfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIElmIHRoZSAiLWciIG9wdGlvbiB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgd2Ugd2FudCB0byBjb250aW51ZSAgKgorKiB0byBzZWFyY2ggZm9yIGFkZGl0aW9uYWwgbWF0Y2hlcyBpbiB0aGUgc3ViamVjdCBzdHJpbmcsIGluIGEgc2ltaWxhciAgICoKKyogd2F5IHRvIHRoZSAvZyBvcHRpb24gaW4gUGVybC4gVGhpcyB0dXJucyBvdXQgdG8gYmUgdHJpY2tpZXIgdGhhbiB5b3UgICAqCisqIG1pZ2h0IHRoaW5rIGJlY2F1c2Ugb2YgdGhlIHBvc3NpYmlsaXR5IG9mIG1hdGNoaW5nIGFuIGVtcHR5IHN0cmluZy4gICAgKgorKiBXaGF0IGhhcHBlbnMgaXMgYXMgZm9sbG93czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIElmIHRoZSBwcmV2aW91cyBtYXRjaCB3YXMgTk9UIGZvciBhbiBlbXB0eSBzdHJpbmcsIHdlIGNhbiBqdXN0IHN0YXJ0ICAgKgorKiB0aGUgbmV4dCBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIElmIHRoZSBwcmV2aW91cyBtYXRjaCBXQVMgZm9yIGFuIGVtcHR5IHN0cmluZywgd2UgY2FuJ3QgZG8gdGhhdCwgYXMgaXQgKgorKiB3b3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuIEluc3RlYWQsIGEgY2FsbCBvZiBwY3JlMl9tYXRjaCgpIGlzICAgICoKKyogbWFkZSB3aXRoIHRoZSBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIGFuZCBQQ1JFMl9BTkNIT1JFRCBmbGFncyBzZXQuIFRoZSAqCisqIGZpcnN0IG9mIHRoZXNlIHRlbGxzIFBDUkUyIHRoYXQgYW4gZW1wdHkgc3RyaW5nIGF0IHRoZSBzdGFydCBvZiB0aGUgICAgKgorKiBzdWJqZWN0IGlzIG5vdCBhIHZhbGlkIG1hdGNoOyBvdGhlciBwb3NzaWJpbGl0aWVzIG11c3QgYmUgdHJpZWQuIFRoZSAgICoKKyogc2Vjb25kIGZsYWcgcmVzdHJpY3RzIFBDUkUyIHRvIG9uZSBtYXRjaCBhdHRlbXB0IGF0IHRoZSBpbml0aWFsIHN0cmluZyAqCisqIHBvc2l0aW9uLiBJZiB0aGlzIG1hdGNoIHN1Y2NlZWRzLCBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgZW1wdHkgc3RyaW5nICAgKgorKiBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgYW5kIHdlIGNhbiBwcmludCBpdCBhbmQgcHJvY2VlZCByb3VuZCB0aGUgbG9vcCwgICoKKyogYWR2YW5jaW5nIGJ5IHRoZSBsZW5ndGggb2Ygd2hhdGV2ZXIgd2FzIGZvdW5kLiBJZiB0aGlzIG1hdGNoIGRvZXMgbm90ICAqCisqIHN1Y2NlZWQsIHdlIHN0aWxsIHN0YXkgaW4gdGhlIGxvb3AsIGFkdmFuY2luZyBieSBqdXN0IG9uZSBjaGFyYWN0ZXIuICAgKgorKiBJbiBVVEYtOCBtb2RlLCB3aGljaCBjYW4gYmUgc2V0IGJ5ICgqVVRGKSBpbiB0aGUgcGF0dGVybiwgdGhpcyBtYXkgYmUgICoKKyogbW9yZSB0aGFuIG9uZSBieXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBIb3dldmVyLCB0aGVyZSBpcyBhIGNvbXBsaWNhdGlvbiBjb25jZXJuZWQgd2l0aCBuZXdsaW5lcy4gV2hlbiB0aGUgICAgICoKKyogbmV3bGluZSBjb252ZW50aW9uIGlzIHN1Y2ggdGhhdCBDUkxGIGlzIGEgdmFsaWQgbmV3bGluZSwgd2UgbXVzdCAgICAgICAqCisqIGFkdmFuY2UgYnkgdHdvIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gb25lLiBUaGUgbmV3bGluZSBjb252ZW50aW9uIGNhbiAgKgorKiBiZSBzZXQgaW4gdGhlIHJlZ2V4IGJ5ICgqQ1IpLCBldGMuOyBpZiBub3QsIHdlIG11c3QgZmluZCB0aGUgZGVmYXVsdC4gICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2lmICghZmluZF9hbGwpICAgICAvKiBDaGVjayBmb3IgLWcgKi8KKyAgeworICBwY3JlMl9tYXRjaF9kYXRhX2ZyZWUobWF0Y2hfZGF0YSk7ICAvKiBSZWxlYXNlIHRoZSBtZW1vcnkgdGhhdCB3YXMgdXNlZCAqLworICBwY3JlMl9jb2RlX2ZyZWUocmUpOyAgICAgICAgICAgICAgICAvKiBmb3IgdGhlIG1hdGNoIGRhdGEgYW5kIHRoZSBwYXR0ZXJuLiAqLworICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeGl0IHRoZSBwcm9ncmFtLiAqLworICB9CisKKy8qIEJlZm9yZSBydW5uaW5nIHRoZSBsb29wLCBjaGVjayBmb3IgVVRGLTggYW5kIHdoZXRoZXIgQ1JMRiBpcyBhIHZhbGlkIG5ld2xpbmUKK3NlcXVlbmNlLiBGaXJzdCwgZmluZCB0aGUgb3B0aW9ucyB3aXRoIHdoaWNoIHRoZSByZWdleCB3YXMgY29tcGlsZWQgYW5kIGV4dHJhY3QKK3RoZSBVVEYgc3RhdGUuICovCisKKyh2b2lkKXBjcmUyX3BhdHRlcm5faW5mbyhyZSwgUENSRTJfSU5GT19BTExPUFRJT05TLCAmb3B0aW9uX2JpdHMpOwordXRmOCA9IChvcHRpb25fYml0cyAmIFBDUkUyX1VURikgIT0gMDsKKworLyogTm93IGZpbmQgdGhlIG5ld2xpbmUgY29udmVudGlvbiBhbmQgc2VlIHdoZXRoZXIgQ1JMRiBpcyBhIHZhbGlkIG5ld2xpbmUKK3NlcXVlbmNlLiAqLworCisodm9pZClwY3JlMl9wYXR0ZXJuX2luZm8ocmUsIFBDUkUyX0lORk9fTkVXTElORSwgJm5ld2xpbmUpOworY3JsZl9pc19uZXdsaW5lID0gbmV3bGluZSA9PSBQQ1JFMl9ORVdMSU5FX0FOWSB8fAorICAgICAgICAgICAgICAgICAgbmV3bGluZSA9PSBQQ1JFMl9ORVdMSU5FX0NSTEYgfHwKKyAgICAgICAgICAgICAgICAgIG5ld2xpbmUgPT0gUENSRTJfTkVXTElORV9BTllDUkxGOworCisvKiBMb29wIGZvciBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgbWF0Y2hlcyAqLworCitmb3IgKDs7KQorICB7CisgIHVpbnQzMl90IG9wdGlvbnMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogTm9ybWFsbHkgbm8gb3B0aW9ucyAqLworICBQQ1JFMl9TSVpFIHN0YXJ0X29mZnNldCA9IG92ZWN0b3JbMV07ICAvKiBTdGFydCBhdCBlbmQgb2YgcHJldmlvdXMgbWF0Y2ggKi8KKworICAvKiBJZiB0aGUgcHJldmlvdXMgbWF0Y2ggd2FzIGZvciBhbiBlbXB0eSBzdHJpbmcsIHdlIGFyZSBmaW5pc2hlZCBpZiB3ZSBhcmUKKyAgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdC4gT3RoZXJ3aXNlLCBhcnJhbmdlIHRvIHJ1biBhbm90aGVyIG1hdGNoIGF0IHRoZQorICBzYW1lIHBvaW50IHRvIHNlZSBpZiBhIG5vbi1lbXB0eSBtYXRjaCBjYW4gYmUgZm91bmQuICovCisKKyAgaWYgKG92ZWN0b3JbMF0gPT0gb3ZlY3RvclsxXSkKKyAgICB7CisgICAgaWYgKG92ZWN0b3JbMF0gPT0gc3ViamVjdF9sZW5ndGgpIGJyZWFrOworICAgIG9wdGlvbnMgPSBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIHwgUENSRTJfQU5DSE9SRUQ7CisgICAgfQorCisgIC8qIFJ1biB0aGUgbmV4dCBtYXRjaGluZyBvcGVyYXRpb24gKi8KKworICByYyA9IHBjcmUyX21hdGNoKAorICAgIHJlLCAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tcGlsZWQgcGF0dGVybiAqLworICAgIHN1YmplY3QsICAgICAgICAgICAgICAvKiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgICBzdWJqZWN0X2xlbmd0aCwgICAgICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCAqLworICAgIHN0YXJ0X29mZnNldCwgICAgICAgICAvKiBzdGFydGluZyBvZmZzZXQgaW4gdGhlIHN1YmplY3QgKi8KKyAgICBvcHRpb25zLCAgICAgICAgICAgICAgLyogb3B0aW9ucyAqLworICAgIG1hdGNoX2RhdGEsICAgICAgICAgICAvKiBibG9jayBmb3Igc3RvcmluZyB0aGUgcmVzdWx0ICovCisgICAgTlVMTCk7ICAgICAgICAgICAgICAgIC8qIHVzZSBkZWZhdWx0IG1hdGNoIGNvbnRleHQgKi8KKworICAvKiBUaGlzIHRpbWUsIGEgcmVzdWx0IG9mIE5PTUFUQ0ggaXNuJ3QgYW4gZXJyb3IuIElmIHRoZSB2YWx1ZSBpbiAib3B0aW9ucyIKKyAgaXMgemVybywgaXQganVzdCBtZWFucyB3ZSBoYXZlIGZvdW5kIGFsbCBwb3NzaWJsZSBtYXRjaGVzLCBzbyB0aGUgbG9vcCBlbmRzLgorICBPdGhlcndpc2UsIGl0IG1lYW5zIHdlIGhhdmUgZmFpbGVkIHRvIGZpbmQgYSBub24tZW1wdHktc3RyaW5nIG1hdGNoIGF0IGEKKyAgcG9pbnQgd2hlcmUgdGhlcmUgd2FzIGEgcHJldmlvdXMgZW1wdHktc3RyaW5nIG1hdGNoLiBJbiB0aGlzIGNhc2UsIHdlIGRvIHdoYXQKKyAgUGVybCBkb2VzOiBhZHZhbmNlIHRoZSBtYXRjaGluZyBwb3NpdGlvbiBieSBvbmUgY2hhcmFjdGVyLCBhbmQgY29udGludWUuIFdlCisgIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgImVuZCBvZiBwcmV2aW91cyBtYXRjaCIgb2Zmc2V0LCBiZWNhdXNlIHRoYXQgaXMgcGlja2VkCisgIHVwIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AgYXMgdGhlIHBvaW50IGF0IHdoaWNoIHRvIHN0YXJ0IGFnYWluLgorCisgIFRoZXJlIGFyZSB0d28gY29tcGxpY2F0aW9uczogKGEpIFdoZW4gQ1JMRiBpcyBhIHZhbGlkIG5ld2xpbmUgc2VxdWVuY2UsIGFuZAorICB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBqdXN0IGJlZm9yZSBpdCwgYWR2YW5jZSBieSBhbiBleHRyYSBieXRlLiAoYikKKyAgT3RoZXJ3aXNlIHdlIG11c3QgZW5zdXJlIHRoYXQgd2Ugc2tpcCBhbiBlbnRpcmUgVVRGIGNoYXJhY3RlciBpZiB3ZSBhcmUgaW4KKyAgVVRGIG1vZGUuICovCisKKyAgaWYgKHJjID09IFBDUkUyX0VSUk9SX05PTUFUQ0gpCisgICAgeworICAgIGlmIChvcHRpb25zID09IDApIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogQWxsIG1hdGNoZXMgZm91bmQgKi8KKyAgICBvdmVjdG9yWzFdID0gc3RhcnRfb2Zmc2V0ICsgMTsgICAgICAgICAgICAgIC8qIEFkdmFuY2Ugb25lIGNvZGUgdW5pdCAqLworICAgIGlmIChjcmxmX2lzX25ld2xpbmUgJiYgICAgICAgICAgICAgICAgICAgICAgLyogSWYgQ1JMRiBpcyBuZXdsaW5lICYgKi8KKyAgICAgICAgc3RhcnRfb2Zmc2V0IDwgc3ViamVjdF9sZW5ndGggLSAxICYmICAgIC8qIHdlIGFyZSBhdCBDUkxGLCAqLworICAgICAgICBzdWJqZWN0W3N0YXJ0X29mZnNldF0gPT0gJ1xlcicgJiYKKyAgICAgICAgc3ViamVjdFtzdGFydF9vZmZzZXQgKyAxXSA9PSAnXGVuJykKKyAgICAgIG92ZWN0b3JbMV0gKz0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFkdmFuY2UgYnkgb25lIG1vcmUuICovCisgICAgZWxzZSBpZiAodXRmOCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIGVuc3VyZSB3ZSAqLworICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWR2YW5jZSBhIHdob2xlIFVURi04ICovCisgICAgICB3aGlsZSAob3ZlY3RvclsxXSA8IHN1YmplY3RfbGVuZ3RoKSAgICAgICAvKiBjaGFyYWN0ZXIuICovCisgICAgICAgIHsKKyAgICAgICAgaWYgKChzdWJqZWN0W292ZWN0b3JbMV1dICYgMHhjMCkgIT0gMHg4MCkgYnJlYWs7CisgICAgICAgIG92ZWN0b3JbMV0gKz0gMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIGNvbnRpbnVlOyAgICAvKiBHbyByb3VuZCB0aGUgbG9vcCBhZ2FpbiAqLworICAgIH0KKworICAvKiBPdGhlciBtYXRjaGluZyBlcnJvcnMgYXJlIG5vdCByZWNvdmVyYWJsZS4gKi8KKworICBpZiAocmMgPCAwKQorICAgIHsKKyAgICBwcmludGYoIk1hdGNoaW5nIGVycm9yICVkXGVuIiwgcmMpOworICAgIHBjcmUyX21hdGNoX2RhdGFfZnJlZShtYXRjaF9kYXRhKTsKKyAgICBwY3JlMl9jb2RlX2ZyZWUocmUpOworICAgIHJldHVybiAxOworICAgIH0KKworICAvKiBNYXRjaCBzdWNjZWRlZCAqLworCisgIHByaW50ZigiXGVuTWF0Y2ggc3VjY2VlZGVkIGFnYWluIGF0IG9mZnNldCAlZFxlbiIsIChpbnQpb3ZlY3RvclswXSk7CisKKyAgLyogVGhlIG1hdGNoIHN1Y2NlZWRlZCwgYnV0IHRoZSBvdXRwdXQgdmVjdG9yIHdhc24ndCBiaWcgZW5vdWdoLiBUaGlzCisgIHNob3VsZCBub3QgaGFwcGVuLiAqLworCisgIGlmIChyYyA9PSAwKQorICAgIHByaW50Zigib3ZlY3RvciB3YXMgbm90IGJpZyBlbm91Z2ggZm9yIGFsbCB0aGUgY2FwdHVyZWQgc3Vic3RyaW5nc1xlbiIpOworCisgIC8qIEFzIGJlZm9yZSwgc2hvdyBzdWJzdHJpbmdzIHN0b3JlZCBpbiB0aGUgb3V0cHV0IHZlY3RvciBieSBudW1iZXIsIGFuZCB0aGVuCisgIGFsc28gYW55IG5hbWVkIHN1YnN0cmluZ3MuICovCisKKyAgZm9yIChpID0gMDsgaSA8IHJjOyBpKyspCisgICAgeworICAgIFBDUkUyX1NQVFIgc3Vic3RyaW5nX3N0YXJ0ID0gc3ViamVjdCArIG92ZWN0b3JbMippXTsKKyAgICBzaXplX3Qgc3Vic3RyaW5nX2xlbmd0aCA9IG92ZWN0b3JbMippKzFdIC0gb3ZlY3RvclsyKmldOworICAgIHByaW50ZigiJTJkOiAlLipzXGVuIiwgaSwgKGludClzdWJzdHJpbmdfbGVuZ3RoLCAoY2hhciAqKXN1YnN0cmluZ19zdGFydCk7CisgICAgfQorCisgIGlmIChuYW1lY291bnQgPD0gMCkgcHJpbnRmKCJObyBuYW1lZCBzdWJzdHJpbmdzXGVuIik7IGVsc2UKKyAgICB7CisgICAgUENSRTJfU1BUUiB0YWJwdHIgPSBuYW1lX3RhYmxlOworICAgIHByaW50ZigiTmFtZWQgc3Vic3RyaW5nc1xlbiIpOworICAgIGZvciAoaSA9IDA7IGkgPCBuYW1lY291bnQ7IGkrKykKKyAgICAgIHsKKyAgICAgIGludCBuID0gKHRhYnB0clswXSA8PCA4KSB8IHRhYnB0clsxXTsKKyAgICAgIHByaW50ZigiKCVkKSAlKnM6ICUuKnNcZW4iLCBuLCBuYW1lX2VudHJ5X3NpemUgLSAzLCB0YWJwdHIgKyAyLAorICAgICAgICAoaW50KShvdmVjdG9yWzIqbisxXSAtIG92ZWN0b3JbMipuXSksIHN1YmplY3QgKyBvdmVjdG9yWzIqbl0pOworICAgICAgdGFicHRyICs9IG5hbWVfZW50cnlfc2l6ZTsKKyAgICAgIH0KKyAgICB9CisgIH0gICAgICAvKiBFbmQgb2YgbG9vcCB0byBmaW5kIHNlY29uZCBhbmQgc3Vic2VxdWVudCBtYXRjaGVzICovCisKK3ByaW50ZigiXGVuIik7CitwY3JlMl9tYXRjaF9kYXRhX2ZyZWUobWF0Y2hfZGF0YSk7CitwY3JlMl9jb2RlX2ZyZWUocmUpOworcmV0dXJuIDA7Cit9CisKKy8qIEVuZCBvZiBwY3JlMmRlbW8uYyAqLworLkVFCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJncmVwLjEgYi9kaXN0Mi9kb2MvcGNyZTJncmVwLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDI4YTkxZQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMmdyZXAuMQpAQCAtMCwwICsxLDcwNSBAQAorLlRIIFBDUkUyR1JFUCAxICIwMyBKYW51YXJ5IDIwMTUiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitwY3JlMmdyZXAgLSBhIGdyZXAgd2l0aCBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucy4KKy5TSCBTWU5PUFNJUworLkIgcGNyZTJncmVwIFtvcHRpb25zXSBbbG9uZyBvcHRpb25zXSBbcGF0dGVybl0gW3BhdGgxIHBhdGgyIC4uLl0KKy4KKy5TSCBERVNDUklQVElPTgorLnJzCisuc3AKK1xmQnBjcmUyZ3JlcFxmUCBzZWFyY2hlcyBmaWxlcyBmb3IgY2hhcmFjdGVyIHBhdHRlcm5zLCBpbiB0aGUgc2FtZSB3YXkgYXMgb3RoZXIKK2dyZXAgY29tbWFuZHMgZG8sIGJ1dCBpdCB1c2VzIHRoZSBQQ1JFMiByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeSB0byBzdXBwb3J0CitwYXR0ZXJucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgb2YgUGVybCA1LiBTZWUKKy5cIiBIUkVGCitcZkJwY3JlMnN5bnRheFxmUCgzKQorLlwiCitmb3IgYSBxdWljay1yZWZlcmVuY2Ugc3VtbWFyeSBvZiBwYXR0ZXJuIHN5bnRheCwgb3IKKy5cIiBIUkVGCitcZkJwY3JlMnBhdHRlcm5cZlAoMykKKy5cIgorZm9yIGEgZnVsbCBkZXNjcmlwdGlvbiBvZiB0aGUgc3ludGF4IGFuZCBzZW1hbnRpY3Mgb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKK3RoYXQgUENSRTIgc3VwcG9ydHMuCisuUAorUGF0dGVybnMsIHdoZXRoZXIgc3VwcGxpZWQgb24gdGhlIGNvbW1hbmQgbGluZSBvciBpbiBhIHNlcGFyYXRlIGZpbGUsIGFyZSBnaXZlbgord2l0aG91dCBkZWxpbWl0ZXJzLiBGb3IgZXhhbXBsZToKKy5zcAorICBwY3JlMmdyZXAgVGh1cnNkYXkgL2V0Yy9tb3RkCisuc3AKK0lmIHlvdSBhdHRlbXB0IHRvIHVzZSBkZWxpbWl0ZXJzIChmb3IgZXhhbXBsZSwgYnkgc3Vycm91bmRpbmcgYSBwYXR0ZXJuIHdpdGgKK3NsYXNoZXMsIGFzIGlzIGNvbW1vbiBpbiBQZXJsIHNjcmlwdHMpLCB0aGV5IGFyZSBpbnRlcnByZXRlZCBhcyBwYXJ0IG9mIHRoZQorcGF0dGVybi4gUXVvdGVzIGNhbiBvZiBjb3Vyc2UgYmUgdXNlZCB0byBkZWxpbWl0IHBhdHRlcm5zIG9uIHRoZSBjb21tYW5kIGxpbmUKK2JlY2F1c2UgdGhleSBhcmUgaW50ZXJwcmV0ZWQgYnkgdGhlIHNoZWxsLCBhbmQgaW5kZWVkIHF1b3RlcyBhcmUgcmVxdWlyZWQgaWYgYQorcGF0dGVybiBjb250YWlucyB3aGl0ZSBzcGFjZSBvciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KKy5QCitUaGUgZmlyc3QgYXJndW1lbnQgdGhhdCBmb2xsb3dzIGFueSBvcHRpb24gc2V0dGluZ3MgaXMgdHJlYXRlZCBhcyB0aGUgc2luZ2xlCitwYXR0ZXJuIHRvIGJlIG1hdGNoZWQgd2hlbiBuZWl0aGVyIFxmQi1lXGZQIG5vciBcZkItZlxmUCBpcyBwcmVzZW50LgorQ29udmVyc2VseSwgd2hlbiBvbmUgb3IgYm90aCBvZiB0aGVzZSBvcHRpb25zIGFyZSB1c2VkIHRvIHNwZWNpZnkgcGF0dGVybnMsIGFsbAorYXJndW1lbnRzIGFyZSB0cmVhdGVkIGFzIHBhdGggbmFtZXMuIEF0IGxlYXN0IG9uZSBvZiBcZkItZVxmUCwgXGZCLWZcZlAsIG9yIGFuCithcmd1bWVudCBwYXR0ZXJuIG11c3QgYmUgcHJvdmlkZWQuCisuUAorSWYgbm8gZmlsZXMgYXJlIHNwZWNpZmllZCwgXGZCcGNyZTJncmVwXGZQIHJlYWRzIHRoZSBzdGFuZGFyZCBpbnB1dC4gVGhlCitzdGFuZGFyZCBpbnB1dCBjYW4gYWxzbyBiZSByZWZlcmVuY2VkIGJ5IGEgbmFtZSBjb25zaXN0aW5nIG9mIGEgc2luZ2xlIGh5cGhlbi4KK0ZvciBleGFtcGxlOgorLnNwCisgIHBjcmUyZ3JlcCBzb21lLXBhdHRlcm4gZmlsZTEgLSBmaWxlMworLnNwCitJbnB1dCBmaWxlcyBhcmUgc2VhcmNoZWQgbGluZSBieSBsaW5lLiBCeSBkZWZhdWx0LCBlYWNoIGxpbmUgdGhhdCBtYXRjaGVzIGEKK3BhdHRlcm4gaXMgY29waWVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQsIGFuZCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGZpbGUsCit0aGUgZmlsZSBuYW1lIGlzIG91dHB1dCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBmb2xsb3dlZCBieSBhIGNvbG9uLgorSG93ZXZlciwgdGhlcmUgYXJlIG9wdGlvbnMgdGhhdCBjYW4gY2hhbmdlIGhvdyBcZkJwY3JlMmdyZXBcZlAgYmVoYXZlcy4gSW4KK3BhcnRpY3VsYXIsIHRoZSBcZkItTVxmUCBvcHRpb24gbWFrZXMgaXQgcG9zc2libGUgdG8gc2VhcmNoIGZvciBzdHJpbmdzIHRoYXQKK3NwYW4gbGluZSBib3VuZGFyaWVzLiBXaGF0IGRlZmluZXMgYSBsaW5lIGJvdW5kYXJ5IGlzIGNvbnRyb2xsZWQgYnkgdGhlCitcZkItTlxmUCAoXGZCLS1uZXdsaW5lXGZQKSBvcHRpb24uCisuUAorVGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBmb3IgYnVmZmVyaW5nIGZpbGVzIHRoYXQgYXJlIGJlaW5nIHNjYW5uZWQgaXMKK2NvbnRyb2xsZWQgYnkgYSBwYXJhbWV0ZXIgdGhhdCBjYW4gYmUgc2V0IGJ5IHRoZSBcZkItLWJ1ZmZlci1zaXplXGZQIG9wdGlvbi4KK1RoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciBpcyBzcGVjaWZpZWQgd2hlbiBcZkJwY3JlMmdyZXBcZlAgaXMKK2J1aWx0LCB3aXRoIHRoZSBkZWZhdWx0IGRlZmF1bHQgYmVpbmcgMjBLLiBBIGJsb2NrIG9mIG1lbW9yeSB0aHJlZSB0aW1lcyB0aGlzCitzaXplIGlzIHVzZWQgKHRvIGFsbG93IGZvciBidWZmZXJpbmcgImJlZm9yZSIgYW5kICJhZnRlciIgbGluZXMpLiBBbiBlcnJvcgorb2NjdXJzIGlmIGEgbGluZSBvdmVyZmxvd3MgdGhlIGJ1ZmZlci4KKy5QCitQYXR0ZXJucyBjYW4gYmUgbm8gbG9uZ2VyIHRoYW4gOEsgb3IgQlVGU0laIGJ5dGVzLCB3aGljaGV2ZXIgaXMgdGhlIGdyZWF0ZXIuCitCVUZTSVogaXMgZGVmaW5lZCBpbiBcZkI8c3RkaW8uaD5cZlAuIFdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYXR0ZXJuCisoc3BlY2lmaWVkIGJ5IHRoZSB1c2Ugb2YgXGZCLWVcZlAgYW5kL29yIFxmQi1mXGZQKSwgZWFjaCBwYXR0ZXJuIGlzIGFwcGxpZWQgdG8KK2VhY2ggbGluZSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgZGVmaW5lZCwgZXhjZXB0IHRoYXQgYWxsIHRoZSBcZkItZVxmUAorcGF0dGVybnMgYXJlIHRyaWVkIGJlZm9yZSB0aGUgXGZCLWZcZlAgcGF0dGVybnMuCisuUAorQnkgZGVmYXVsdCwgYXMgc29vbiBhcyBvbmUgcGF0dGVybiBtYXRjaGVzIGEgbGluZSwgbm8gZnVydGhlciBwYXR0ZXJucyBhcmUKK2NvbnNpZGVyZWQuIEhvd2V2ZXIsIGlmIFxmQi0tY29sb3VyXGZQIChvciBcZkItLWNvbG9yXGZQKSBpcyB1c2VkIHRvIGNvbG91ciB0aGUKK21hdGNoaW5nIHN1YnN0cmluZ3MsIG9yIGlmIFxmQi0tb25seS1tYXRjaGluZ1xmUCwgXGZCLS1maWxlLW9mZnNldHNcZlAsIG9yCitcZkItLWxpbmUtb2Zmc2V0c1xmUCBpcyB1c2VkIHRvIG91dHB1dCBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBsaW5lIHRoYXQgbWF0Y2hlZAorKGVpdGhlciBzaG93biBsaXRlcmFsbHksIG9yIGFzIGFuIG9mZnNldCksIHNjYW5uaW5nIHJlc3VtZXMgaW1tZWRpYXRlbHkKK2ZvbGxvd2luZyB0aGUgbWF0Y2gsIHNvIHRoYXQgZnVydGhlciBtYXRjaGVzIG9uIHRoZSBzYW1lIGxpbmUgY2FuIGJlIGZvdW5kLiBJZgordGhlcmUgYXJlIG11bHRpcGxlIHBhdHRlcm5zLCB0aGV5IGFyZSBhbGwgdHJpZWQgb24gdGhlIHJlbWFpbmRlciBvZiB0aGUgbGluZSwKK2J1dCBwYXR0ZXJucyB0aGF0IGZvbGxvdyB0aGUgb25lIHRoYXQgbWF0Y2hlZCBhcmUgbm90IHRyaWVkIG9uIHRoZSBlYXJsaWVyIHBhcnQKK29mIHRoZSBsaW5lLgorLlAKK1RoaXMgYmVoYXZpb3VyIG1lYW5zIHRoYXQgdGhlIG9yZGVyIGluIHdoaWNoIG11bHRpcGxlIHBhdHRlcm5zIGFyZSBzcGVjaWZpZWQKK2NhbiBhZmZlY3QgdGhlIG91dHB1dCB3aGVuIG9uZSBvZiB0aGUgYWJvdmUgb3B0aW9ucyBpcyB1c2VkLiBUaGlzIGlzIG5vIGxvbmdlcgordGhlIHNhbWUgYmVoYXZpb3VyIGFzIEdOVSBncmVwLCB3aGljaCBub3cgbWFuYWdlcyB0byBkaXNwbGF5IGVhcmxpZXIgbWF0Y2hlcworZm9yIGxhdGVyIHBhdHRlcm5zIChhcyBsb25nIGFzIHRoZXJlIGlzIG5vIG92ZXJsYXApLgorLlAKK1BhdHRlcm5zIHRoYXQgY2FuIG1hdGNoIGFuIGVtcHR5IHN0cmluZyBhcmUgYWNjZXB0ZWQsIGJ1dCBlbXB0eSBzdHJpbmcKK21hdGNoZXMgYXJlIG5ldmVyIHJlY29nbml6ZWQuIEFuIGV4YW1wbGUgaXMgdGhlIHBhdHRlcm4gIihzdXBlcik/KG1hbik/IiwgaW4KK3doaWNoIGFsbCBjb21wb25lbnRzIGFyZSBvcHRpb25hbC4gVGhpcyBwYXR0ZXJuIGZpbmRzIGFsbCBvY2N1cnJlbmNlcyBvZiBib3RoCisic3VwZXIiIGFuZCAibWFuIjsgdGhlIG91dHB1dCBkaWZmZXJzIGZyb20gbWF0Y2hpbmcgd2l0aCAic3VwZXJ8bWFuIiB3aGVuIG9ubHkKK3RoZSBtYXRjaGluZyBzdWJzdHJpbmdzIGFyZSBiZWluZyBzaG93bi4KKy5QCitJZiB0aGUgXGZCTENfQUxMXGZQIG9yIFxmQkxDX0NUWVBFXGZQIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwKK1xmQnBjcmUyZ3JlcFxmUCB1c2VzIHRoZSB2YWx1ZSB0byBzZXQgYSBsb2NhbGUgd2hlbiBjYWxsaW5nIHRoZSBQQ1JFMiBsaWJyYXJ5LgorVGhlIFxmQi0tbG9jYWxlXGZQIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGlzLgorLgorLgorLlNIICJTVVBQT1JUIEZPUiBDT01QUkVTU0VEIEZJTEVTIgorLnJzCisuc3AKK0l0IGlzIHBvc3NpYmxlIHRvIGNvbXBpbGUgXGZCcGNyZTJncmVwXGZQIHNvIHRoYXQgaXQgdXNlcyBcZkJsaWJ6XGZQIG9yCitcZkJsaWJiejJcZlAgdG8gcmVhZCBmaWxlcyB3aG9zZSBuYW1lcyBlbmQgaW4gXGZCLmd6XGZQIG9yIFxmQi5iejJcZlAsCityZXNwZWN0aXZlbHkuIFlvdSBjYW4gZmluZCBvdXQgd2hldGhlciB5b3VyIGJpbmFyeSBoYXMgc3VwcG9ydCBmb3Igb25lIG9yIGJvdGgKK29mIHRoZXNlIGZpbGUgdHlwZXMgYnkgcnVubmluZyBpdCB3aXRoIHRoZSBcZkItLWhlbHBcZlAgb3B0aW9uLiBJZiB0aGUKK2FwcHJvcHJpYXRlIHN1cHBvcnQgaXMgbm90IHByZXNlbnQsIGZpbGVzIGFyZSB0cmVhdGVkIGFzIHBsYWluIHRleHQuIFRoZQorc3RhbmRhcmQgaW5wdXQgaXMgYWx3YXlzIHNvIHRyZWF0ZWQuCisuCisuCisuU0ggIkJJTkFSWSBGSUxFUyIKKy5ycworLnNwCitCeSBkZWZhdWx0LCBhIGZpbGUgdGhhdCBjb250YWlucyBhIGJpbmFyeSB6ZXJvIGJ5dGUgd2l0aGluIHRoZSBmaXJzdCAxMDI0IGJ5dGVzCitpcyBpZGVudGlmaWVkIGFzIGEgYmluYXJ5IGZpbGUsIGFuZCBpcyBwcm9jZXNzZWQgc3BlY2lhbGx5LiAoR05VIGdyZXAgYWxzbworaWRlbnRpZmllcyBiaW5hcnkgZmlsZXMgaW4gdGhpcyBtYW5uZXIuKSBTZWUgdGhlIFxmQi0tYmluYXJ5LWZpbGVzXGZQIG9wdGlvbgorZm9yIGEgbWVhbnMgb2YgY2hhbmdpbmcgdGhlIHdheSBiaW5hcnkgZmlsZXMgYXJlIGhhbmRsZWQuCisuCisuCisuU0ggT1BUSU9OUworLnJzCisuc3AKK1RoZSBvcmRlciBpbiB3aGljaCBzb21lIG9mIHRoZSBvcHRpb25zIGFwcGVhciBjYW4gYWZmZWN0IHRoZSBvdXRwdXQuIEZvcgorZXhhbXBsZSwgYm90aCB0aGUgXGZCLWhcZlAgYW5kIFxmQi1sXGZQIG9wdGlvbnMgYWZmZWN0IHRoZSBwcmludGluZyBvZiBmaWxlCituYW1lcy4gV2hpY2hldmVyIGNvbWVzIGxhdGVyIGluIHRoZSBjb21tYW5kIGxpbmUgd2lsbCBiZSB0aGUgb25lIHRoYXQgdGFrZXMKK2VmZmVjdC4gU2ltaWxhcmx5LCBleGNlcHQgd2hlcmUgbm90ZWQgYmVsb3csIGlmIGFuIG9wdGlvbiBpcyBnaXZlbiB0d2ljZSwgdGhlCitsYXRlciBzZXR0aW5nIGlzIHVzZWQuIE51bWVyaWNhbCB2YWx1ZXMgZm9yIG9wdGlvbnMgbWF5IGJlIGZvbGxvd2VkIGJ5IEsgb3IgTSwKK3RvIHNpZ25pZnkgbXVsdGlwbGljYXRpb24gYnkgMTAyNCBvciAxMDI0KjEwMjQgcmVzcGVjdGl2ZWx5LgorLlRQIDEwCitcZkItLVxmUAorVGhpcyB0ZXJtaW5hdGVzIHRoZSBsaXN0IG9mIG9wdGlvbnMuIEl0IGlzIHVzZWZ1bCBpZiB0aGUgbmV4dCBpdGVtIG9uIHRoZQorY29tbWFuZCBsaW5lIHN0YXJ0cyB3aXRoIGEgaHlwaGVuIGJ1dCBpcyBub3QgYW4gb3B0aW9uLiBUaGlzIGFsbG93cyBmb3IgdGhlCitwcm9jZXNzaW5nIG9mIHBhdHRlcm5zIGFuZCBmaWxlIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBoeXBoZW5zLgorLlRQCitcZkItQVxmUCBcZkludW1iZXJcZlAsIFxmQi0tYWZ0ZXItY29udGV4dD1cZlBcZkludW1iZXJcZlAKK091dHB1dCBcZkludW1iZXJcZlAgbGluZXMgb2YgY29udGV4dCBhZnRlciBlYWNoIG1hdGNoaW5nIGxpbmUuIElmIGZpbGUgbmFtZXMKK2FuZC9vciBsaW5lIG51bWJlcnMgYXJlIGJlaW5nIG91dHB1dCwgYSBoeXBoZW4gc2VwYXJhdG9yIGlzIHVzZWQgaW5zdGVhZCBvZiBhCitjb2xvbiBmb3IgdGhlIGNvbnRleHQgbGluZXMuIEEgbGluZSBjb250YWluaW5nICItLSIgaXMgb3V0cHV0IGJldHdlZW4gZWFjaAorZ3JvdXAgb2YgbGluZXMsIHVubGVzcyB0aGV5IGFyZSBpbiBmYWN0IGNvbnRpZ3VvdXMgaW4gdGhlIGlucHV0IGZpbGUuIFRoZSB2YWx1ZQorb2YgXGZJbnVtYmVyXGZQIGlzIGV4cGVjdGVkIHRvIGJlIHJlbGF0aXZlbHkgc21hbGwuIEhvd2V2ZXIsIFxmQnBjcmUyZ3JlcFxmUAorZ3VhcmFudGVlcyB0byBoYXZlIHVwIHRvIDhLIG9mIGZvbGxvd2luZyB0ZXh0IGF2YWlsYWJsZSBmb3IgY29udGV4dCBvdXRwdXQuCisuVFAKK1xmQi1hXGZQLCBcZkItLXRleHRcZlAKK1RyZWF0IGJpbmFyeSBmaWxlcyBhcyB0ZXh0LiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KK1xmQi0tYmluYXJ5LWZpbGVzXGZQPVxmSXRleHRcZlAuCisuVFAKK1xmQi1CXGZQIFxmSW51bWJlclxmUCwgXGZCLS1iZWZvcmUtY29udGV4dD1cZlBcZkludW1iZXJcZlAKK091dHB1dCBcZkludW1iZXJcZlAgbGluZXMgb2YgY29udGV4dCBiZWZvcmUgZWFjaCBtYXRjaGluZyBsaW5lLiBJZiBmaWxlIG5hbWVzCithbmQvb3IgbGluZSBudW1iZXJzIGFyZSBiZWluZyBvdXRwdXQsIGEgaHlwaGVuIHNlcGFyYXRvciBpcyB1c2VkIGluc3RlYWQgb2YgYQorY29sb24gZm9yIHRoZSBjb250ZXh0IGxpbmVzLiBBIGxpbmUgY29udGFpbmluZyAiLS0iIGlzIG91dHB1dCBiZXR3ZWVuIGVhY2gKK2dyb3VwIG9mIGxpbmVzLCB1bmxlc3MgdGhleSBhcmUgaW4gZmFjdCBjb250aWd1b3VzIGluIHRoZSBpbnB1dCBmaWxlLiBUaGUgdmFsdWUKK29mIFxmSW51bWJlclxmUCBpcyBleHBlY3RlZCB0byBiZSByZWxhdGl2ZWx5IHNtYWxsLiBIb3dldmVyLCBcZkJwY3JlMmdyZXBcZlAKK2d1YXJhbnRlZXMgdG8gaGF2ZSB1cCB0byA4SyBvZiBwcmVjZWRpbmcgdGV4dCBhdmFpbGFibGUgZm9yIGNvbnRleHQgb3V0cHV0LgorLlRQCitcZkItLWJpbmFyeS1maWxlcz1cZlBcZkl3b3JkXGZQCitTcGVjaWZ5IGhvdyBiaW5hcnkgZmlsZXMgYXJlIHRvIGJlIHByb2Nlc3NlZC4gSWYgdGhlIHdvcmQgaXMgImJpbmFyeSIgKHRoZQorZGVmYXVsdCksIHBhdHRlcm4gbWF0Y2hpbmcgaXMgcGVyZm9ybWVkIG9uIGJpbmFyeSBmaWxlcywgYnV0IHRoZSBvbmx5IG91dHB1dCBpcworIkJpbmFyeSBmaWxlIDxuYW1lPiBtYXRjaGVzIiB3aGVuIGEgbWF0Y2ggc3VjY2VlZHMuIElmIHRoZSB3b3JkIGlzICJ0ZXh0IiwKK3doaWNoIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFxmQi1hXGZQIG9yIFxmQi0tdGV4dFxmUCBvcHRpb24sIGJpbmFyeSBmaWxlcyBhcmUKK3Byb2Nlc3NlZCBpbiB0aGUgc2FtZSB3YXkgYXMgYW55IG90aGVyIGZpbGUuIEluIHRoaXMgY2FzZSwgd2hlbiBhIG1hdGNoCitzdWNjZWVkcywgdGhlIG91dHB1dCBtYXkgYmUgYmluYXJ5IGdhcmJhZ2UsIHdoaWNoIGNhbiBoYXZlIG5hc3R5IGVmZmVjdHMgaWYKK3NlbnQgdG8gYSB0ZXJtaW5hbC4gSWYgdGhlIHdvcmQgaXMgIndpdGhvdXQtbWF0Y2giLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZQorXGZCLUlcZlAgb3B0aW9uLCBiaW5hcnkgZmlsZXMgYXJlIG5vdCBwcm9jZXNzZWQgYXQgYWxsOyB0aGV5IGFyZSBhc3N1bWVkIG5vdCB0bworYmUgb2YgaW50ZXJlc3QgYW5kIGFyZSBza2lwcGVkIHdpdGhvdXQgY2F1c2luZyBhbnkgb3V0cHV0IG9yIGFmZmVjdGluZyB0aGUKK3JldHVybiBjb2RlLgorLlRQCitcZkItLWJ1ZmZlci1zaXplPVxmUFxmSW51bWJlclxmUAorU2V0IHRoZSBwYXJhbWV0ZXIgdGhhdCBjb250cm9scyBob3cgbXVjaCBtZW1vcnkgaXMgdXNlZCBmb3IgYnVmZmVyaW5nIGZpbGVzCit0aGF0IGFyZSBiZWluZyBzY2FubmVkLgorLlRQCitcZkItQ1xmUCBcZkludW1iZXJcZlAsIFxmQi0tY29udGV4dD1cZlBcZkludW1iZXJcZlAKK091dHB1dCBcZkludW1iZXJcZlAgbGluZXMgb2YgY29udGV4dCBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIgZWFjaCBtYXRjaGluZyBsaW5lLgorVGhpcyBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgYm90aCBcZkItQVxmUCBhbmQgXGZCLUJcZlAgdG8gdGhlIHNhbWUgdmFsdWUuCisuVFAKK1xmQi1jXGZQLCBcZkItLWNvdW50XGZQCitEbyBub3Qgb3V0cHV0IGxpbmVzIGZyb20gdGhlIGZpbGVzIHRoYXQgYXJlIGJlaW5nIHNjYW5uZWQ7IGluc3RlYWQgb3V0cHV0IHRoZQorbnVtYmVyIG9mIG1hdGNoZXMgKG9yIG5vbi1tYXRjaGVzIGlmIFxmQi12XGZQIGlzIHVzZWQpIHRoYXQgd291bGQgb3RoZXJ3aXNlCitoYXZlIGNhdXNlZCBsaW5lcyB0byBiZSBzaG93bi4gQnkgZGVmYXVsdCwgdGhpcyBjb3VudCBpcyB0aGUgc2FtZSBhcyB0aGUgbnVtYmVyCitvZiBzdXBwcmVzc2VkIGxpbmVzLCBidXQgaWYgdGhlIFxmQi1NXGZQIChtdWx0aWxpbmUpIG9wdGlvbiBpcyB1c2VkICh3aXRob3V0CitcZkItdlxmUCksIHRoZXJlIG1heSBiZSBtb3JlIHN1cHByZXNzZWQgbGluZXMgdGhhbiB0aGUgbnVtYmVyIG9mIG1hdGNoZXMuCisuc3AKK0lmIG5vIGxpbmVzIGFyZSBzZWxlY3RlZCwgdGhlIG51bWJlciB6ZXJvIGlzIG91dHB1dC4gSWYgc2V2ZXJhbCBmaWxlcyBhcmUgYXJlCitiZWluZyBzY2FubmVkLCBhIGNvdW50IGlzIG91dHB1dCBmb3IgZWFjaCBvZiB0aGVtLiBIb3dldmVyLCBpZiB0aGUKK1xmQi0tZmlsZXMtd2l0aC1tYXRjaGVzXGZQIG9wdGlvbiBpcyBhbHNvIHVzZWQsIG9ubHkgdGhvc2UgZmlsZXMgd2hvc2UgY291bnRzCithcmUgZ3JlYXRlciB0aGFuIHplcm8gYXJlIGxpc3RlZC4gV2hlbiBcZkItY1xmUCBpcyB1c2VkLCB0aGUgXGZCLUFcZlAsCitcZkItQlxmUCwgYW5kIFxmQi1DXGZQIG9wdGlvbnMgYXJlIGlnbm9yZWQuCisuVFAKK1xmQi0tY29sb3VyXGZQLCBcZkItLWNvbG9yXGZQCitJZiB0aGlzIG9wdGlvbiBpcyBnaXZlbiB3aXRob3V0IGFueSBkYXRhLCBpdCBpcyBlcXVpdmFsZW50IHRvICItLWNvbG91cj1hdXRvIi4KK0lmIGRhdGEgaXMgcmVxdWlyZWQsIGl0IG11c3QgYmUgZ2l2ZW4gaW4gdGhlIHNhbWUgc2hlbGwgaXRlbSwgc2VwYXJhdGVkIGJ5IGFuCitlcXVhbHMgc2lnbi4KKy5UUAorXGZCLS1jb2xvdXI9XGZQXGZJdmFsdWVcZlAsIFxmQi0tY29sb3I9XGZQXGZJdmFsdWVcZlAKK1RoaXMgb3B0aW9uIHNwZWNpZmllcyB1bmRlciB3aGF0IGNpcmN1bXN0YW5jZXMgdGhlIHBhcnRzIG9mIGEgbGluZSB0aGF0IG1hdGNoZWQKK2EgcGF0dGVybiBzaG91bGQgYmUgY29sb3VyZWQgaW4gdGhlIG91dHB1dC4gQnkgZGVmYXVsdCwgdGhlIG91dHB1dCBpcyBub3QKK2NvbG91cmVkLiBUaGUgdmFsdWUgKHdoaWNoIGlzIG9wdGlvbmFsLCBzZWUgYWJvdmUpIG1heSBiZSAibmV2ZXIiLCAiYWx3YXlzIiwgb3IKKyJhdXRvIi4gSW4gdGhlIGxhdHRlciBjYXNlLCBjb2xvdXJpbmcgaGFwcGVucyBvbmx5IGlmIHRoZSBzdGFuZGFyZCBvdXRwdXQgaXMKK2Nvbm5lY3RlZCB0byBhIHRlcm1pbmFsLiBNb3JlIHJlc291cmNlcyBhcmUgdXNlZCB3aGVuIGNvbG91cmluZyBpcyBlbmFibGVkLAorYmVjYXVzZSBcZkJwY3JlMmdyZXBcZlAgaGFzIHRvIHNlYXJjaCBmb3IgYWxsIHBvc3NpYmxlIG1hdGNoZXMgaW4gYSBsaW5lLCBub3QKK2p1c3Qgb25lLCBpbiBvcmRlciB0byBjb2xvdXIgdGhlbSBhbGwuCisuc3AKK1RoZSBjb2xvdXIgdGhhdCBpcyB1c2VkIGNhbiBiZSBzcGVjaWZpZWQgYnkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKK1BDUkUyR1JFUF9DT0xPVVIgb3IgUENSRTJHUkVQX0NPTE9SLiBUaGUgdmFsdWUgb2YgdGhpcyB2YXJpYWJsZSBzaG91bGQgYmUgYQorc3RyaW5nIG9mIHR3byBudW1iZXJzLCBzZXBhcmF0ZWQgYnkgYSBzZW1pY29sb24uIFRoZXkgYXJlIGNvcGllZCBkaXJlY3RseSBpbnRvCit0aGUgY29udHJvbCBzdHJpbmcgZm9yIHNldHRpbmcgY29sb3VyIG9uIGEgdGVybWluYWwsIHNvIGl0IGlzIHlvdXIKK3Jlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZXkgbWFrZSBzZW5zZS4gSWYgbmVpdGhlciBvZiB0aGUgZW52aXJvbm1lbnQKK3ZhcmlhYmxlcyBpcyBzZXQsIHRoZSBkZWZhdWx0IGlzICIxOzMxIiwgd2hpY2ggZ2l2ZXMgcmVkLgorLlRQCitcZkItRFxmUCBcZklhY3Rpb25cZlAsIFxmQi0tZGV2aWNlcz1cZlBcZklhY3Rpb25cZlAKK0lmIGFuIGlucHV0IHBhdGggaXMgbm90IGEgcmVndWxhciBmaWxlIG9yIGEgZGlyZWN0b3J5LCAiYWN0aW9uIiBzcGVjaWZpZXMgaG93CitpdCBpcyB0byBiZSBwcm9jZXNzZWQuIFZhbGlkIHZhbHVlcyBhcmUgInJlYWQiICh0aGUgZGVmYXVsdCkgb3IgInNraXAiCisoc2lsZW50bHkgc2tpcCB0aGUgcGF0aCkuCisuVFAKK1xmQi1kXGZQIFxmSWFjdGlvblxmUCwgXGZCLS1kaXJlY3Rvcmllcz1cZlBcZklhY3Rpb25cZlAKK0lmIGFuIGlucHV0IHBhdGggaXMgYSBkaXJlY3RvcnksICJhY3Rpb24iIHNwZWNpZmllcyBob3cgaXQgaXMgdG8gYmUgcHJvY2Vzc2VkLgorVmFsaWQgdmFsdWVzIGFyZSAicmVhZCIgKHRoZSBkZWZhdWx0IGluIG5vbi1XaW5kb3dzIGVudmlyb25tZW50cywgZm9yCitjb21wYXRpYmlsaXR5IHdpdGggR05VIGdyZXApLCAicmVjdXJzZSIgKGVxdWl2YWxlbnQgdG8gdGhlIFxmQi1yXGZQIG9wdGlvbiksIG9yCisic2tpcCIgKHNpbGVudGx5IHNraXAgdGhlIHBhdGgsIHRoZSBkZWZhdWx0IGluIFdpbmRvd3MgZW52aXJvbm1lbnRzKS4gSW4gdGhlCisicmVhZCIgY2FzZSwgZGlyZWN0b3JpZXMgYXJlIHJlYWQgYXMgaWYgdGhleSB3ZXJlIG9yZGluYXJ5IGZpbGVzLiBJbiBzb21lCitvcGVyYXRpbmcgc3lzdGVtcyB0aGUgZWZmZWN0IG9mIHJlYWRpbmcgYSBkaXJlY3RvcnkgbGlrZSB0aGlzIGlzIGFuIGltbWVkaWF0ZQorZW5kLW9mLWZpbGU7IGluIG90aGVycyBpdCBtYXkgcHJvdm9rZSBhbiBlcnJvci4KKy5UUAorXGZCLWVcZlAgXGZJcGF0dGVyblxmUCwgXGZCLS1yZWdleD1cZlBcZklwYXR0ZXJuXGZQLCBcZkItLXJlZ2V4cD1cZlBcZklwYXR0ZXJuXGZQCitTcGVjaWZ5IGEgcGF0dGVybiB0byBiZSBtYXRjaGVkLiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCBtdWx0aXBsZSB0aW1lcyBpbgorb3JkZXIgdG8gc3BlY2lmeSBzZXZlcmFsIHBhdHRlcm5zLiBJdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgd2F5IG9mIHNwZWNpZnlpbmcgYQorc2luZ2xlIHBhdHRlcm4gdGhhdCBzdGFydHMgd2l0aCBhIGh5cGhlbi4gV2hlbiBcZkItZVxmUCBpcyB1c2VkLCBubyBhcmd1bWVudAorcGF0dGVybiBpcyB0YWtlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBhcmd1bWVudHMgYXJlIHRyZWF0ZWQgYXMgZmlsZQorbmFtZXMuIFRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgcGF0dGVybnMuIFRoZXkgYXJlIGFwcGxpZWQgdG8gZWFjaAorbGluZSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgZGVmaW5lZCB1bnRpbCBvbmUgbWF0Y2hlcy4KKy5zcAorSWYgXGZCLWZcZlAgaXMgdXNlZCB3aXRoIFxmQi1lXGZQLCB0aGUgY29tbWFuZCBsaW5lIHBhdHRlcm5zIGFyZSBtYXRjaGVkIGZpcnN0LAorZm9sbG93ZWQgYnkgdGhlIHBhdHRlcm5zIGZyb20gdGhlIGZpbGUocyksIGluZGVwZW5kZW50IG9mIHRoZSBvcmRlciBpbiB3aGljaAordGhlc2Ugb3B0aW9ucyBhcmUgc3BlY2lmaWVkLiBOb3RlIHRoYXQgbXVsdGlwbGUgdXNlIG9mIFxmQi1lXGZQIGlzIG5vdCB0aGUgc2FtZQorYXMgYSBzaW5nbGUgcGF0dGVybiB3aXRoIGFsdGVybmF0aXZlcy4gRm9yIGV4YW1wbGUsIFh8WSBmaW5kcyB0aGUgZmlyc3QKK2NoYXJhY3RlciBpbiBhIGxpbmUgdGhhdCBpcyBYIG9yIFksIHdoZXJlYXMgaWYgdGhlIHR3byBwYXR0ZXJucyBhcmUgZ2l2ZW4KK3NlcGFyYXRlbHksIHdpdGggWCBmaXJzdCwgXGZCcGNyZTJncmVwXGZQIGZpbmRzIFggaWYgaXQgaXMgcHJlc2VudCwgZXZlbiBpZiBpdAorZm9sbG93cyBZIGluIHRoZSBsaW5lLiBJdCBmaW5kcyBZIG9ubHkgaWYgdGhlcmUgaXMgbm8gWCBpbiB0aGUgbGluZS4gVGhpcworbWF0dGVycyBvbmx5IGlmIHlvdSBhcmUgdXNpbmcgXGZCLW9cZlAgb3IgXGZCLS1jb2xvKHUpclxmUCB0byBzaG93IHRoZSBwYXJ0KHMpCitvZiB0aGUgbGluZSB0aGF0IG1hdGNoZWQuCisuVFAKK1xmQi0tZXhjbHVkZVxmUD1cZklwYXR0ZXJuXGZQCitGaWxlcyAoYnV0IG5vdCBkaXJlY3Rvcmllcykgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4gYXJlIHNraXBwZWQgd2l0aG91dAorYmVpbmcgcHJvY2Vzc2VkLiBUaGlzIGFwcGxpZXMgdG8gYWxsIGZpbGVzLCB3aGV0aGVyIGxpc3RlZCBvbiB0aGUgY29tbWFuZCBsaW5lLAorb2J0YWluZWQgZnJvbSBcZkItLWZpbGUtbGlzdFxmUCwgb3IgYnkgc2Nhbm5pbmcgYSBkaXJlY3RvcnkuIFRoZSBwYXR0ZXJuIGlzIGEKK1BDUkUyIHJlZ3VsYXIgZXhwcmVzc2lvbiwgYW5kIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmluYWwgY29tcG9uZW50IG9mIHRoZQorZmlsZSBuYW1lLCBub3QgdGhlIGVudGlyZSBwYXRoLiBUaGUgXGZCLUZcZlAsIFxmQi13XGZQLCBhbmQgXGZCLXhcZlAgb3B0aW9ucyBkbworbm90IGFwcGx5IHRvIHRoaXMgcGF0dGVybi4gVGhlIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gYW55IG51bWJlciBvZiB0aW1lcyBpbiBvcmRlcgordG8gc3BlY2lmeSBtdWx0aXBsZSBwYXR0ZXJucy4gSWYgYSBmaWxlIG5hbWUgbWF0Y2hlcyBib3RoIGFuIFxmQi0taW5jbHVkZVxmUAorYW5kIGFuIFxmQi0tZXhjbHVkZVxmUCBwYXR0ZXJuLCBpdCBpcyBleGNsdWRlZC4gVGhlcmUgaXMgbm8gc2hvcnQgZm9ybSBmb3IgdGhpcworb3B0aW9uLgorLlRQCitcZkItLWV4Y2x1ZGUtZnJvbT1cZlBcZklmaWxlbmFtZVxmUAorVHJlYXQgZWFjaCBub24tZW1wdHkgbGluZSBvZiB0aGUgZmlsZSBhcyB0aGUgZGF0YSBmb3IgYW4gXGZCLS1leGNsdWRlXGZQCitvcHRpb24uIFdoYXQgY29uc3RpdHV0ZXMgYSBuZXdsaW5lIHdoZW4gcmVhZGluZyB0aGUgZmlsZSBpcyB0aGUgb3BlcmF0aW5nCitzeXN0ZW0ncyBkZWZhdWx0LiBUaGUgXGZCLS1uZXdsaW5lXGZQIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoaXMgb3B0aW9uLiBUaGlzCitvcHRpb24gbWF5IGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlIGluIG9yZGVyIHRvIHNwZWNpZnkgYSBudW1iZXIgb2YgZmlsZXMgdG8KK3JlYWQuCisuVFAKK1xmQi0tZXhjbHVkZS1kaXJcZlA9XGZJcGF0dGVyblxmUAorRGlyZWN0b3JpZXMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4gYXJlIHNraXBwZWQgd2l0aG91dCBiZWluZyBwcm9jZXNzZWQsCit3aGF0ZXZlciB0aGUgc2V0dGluZyBvZiB0aGUgXGZCLS1yZWN1cnNpdmVcZlAgb3B0aW9uLiBUaGlzIGFwcGxpZXMgdG8gYWxsCitkaXJlY3Rvcmllcywgd2hldGhlciBsaXN0ZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgb2J0YWluZWQgZnJvbQorXGZCLS1maWxlLWxpc3RcZlAsIG9yIGJ5IHNjYW5uaW5nIGEgcGFyZW50IGRpcmVjdG9yeS4gVGhlIHBhdHRlcm4gaXMgYSBQQ1JFMgorcmVndWxhciBleHByZXNzaW9uLCBhbmQgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBmaW5hbCBjb21wb25lbnQgb2YgdGhlIGRpcmVjdG9yeQorbmFtZSwgbm90IHRoZSBlbnRpcmUgcGF0aC4gVGhlIFxmQi1GXGZQLCBcZkItd1xmUCwgYW5kIFxmQi14XGZQIG9wdGlvbnMgZG8gbm90CithcHBseSB0byB0aGlzIHBhdHRlcm4uIFRoZSBvcHRpb24gbWF5IGJlIGdpdmVuIGFueSBudW1iZXIgb2YgdGltZXMgaW4gb3JkZXIgdG8KK3NwZWNpZnkgbW9yZSB0aGFuIG9uZSBwYXR0ZXJuLiBJZiBhIGRpcmVjdG9yeSBtYXRjaGVzIGJvdGggXGZCLS1pbmNsdWRlLWRpclxmUAorYW5kIFxmQi0tZXhjbHVkZS1kaXJcZlAsIGl0IGlzIGV4Y2x1ZGVkLiBUaGVyZSBpcyBubyBzaG9ydCBmb3JtIGZvciB0aGlzCitvcHRpb24uCisuVFAKK1xmQi1GXGZQLCBcZkItLWZpeGVkLXN0cmluZ3NcZlAKK0ludGVycHJldCBlYWNoIGRhdGEtbWF0Y2hpbmcgcGF0dGVybiBhcyBhIGxpc3Qgb2YgZml4ZWQgc3RyaW5ncywgc2VwYXJhdGVkIGJ5CituZXdsaW5lcywgaW5zdGVhZCBvZiBhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbi4gV2hhdCBjb25zdGl0dXRlcyBhIG5ld2xpbmUgZm9yCit0aGlzIHB1cnBvc2UgaXMgY29udHJvbGxlZCBieSB0aGUgXGZCLS1uZXdsaW5lXGZQIG9wdGlvbi4gVGhlIFxmQi13XGZQIChtYXRjaAorYXMgYSB3b3JkKSBhbmQgXGZCLXhcZlAgKG1hdGNoIHdob2xlIGxpbmUpIG9wdGlvbnMgY2FuIGJlIHVzZWQgd2l0aCBcZkItRlxmUC4KK1RoZXkgYXBwbHkgdG8gZWFjaCBvZiB0aGUgZml4ZWQgc3RyaW5ncy4gQSBsaW5lIGlzIHNlbGVjdGVkIGlmIGFueSBvZiB0aGUgZml4ZWQKK3N0cmluZ3MgYXJlIGZvdW5kIGluIGl0IChzdWJqZWN0IHRvIFxmQi13XGZQIG9yIFxmQi14XGZQLCBpZiBwcmVzZW50KS4gVGhpcworb3B0aW9uIGFwcGxpZXMgb25seSB0byB0aGUgcGF0dGVybnMgdGhhdCBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBjb250ZW50cyBvZgorZmlsZXM7IGl0IGRvZXMgbm90IGFwcGx5IHRvIHBhdHRlcm5zIHNwZWNpZmllZCBieSBhbnkgb2YgdGhlIFxmQi0taW5jbHVkZVxmUCBvcgorXGZCLS1leGNsdWRlXGZQIG9wdGlvbnMuCisuVFAKK1xmQi1mXGZQIFxmSWZpbGVuYW1lXGZQLCBcZkItLWZpbGU9XGZQXGZJZmlsZW5hbWVcZlAKK1JlYWQgcGF0dGVybnMgZnJvbSB0aGUgZmlsZSwgb25lIHBlciBsaW5lLCBhbmQgbWF0Y2ggdGhlbSBhZ2FpbnN0CitlYWNoIGxpbmUgb2YgaW5wdXQuIFdoYXQgY29uc3RpdHV0ZXMgYSBuZXdsaW5lIHdoZW4gcmVhZGluZyB0aGUgZmlsZSBpcyB0aGUKK29wZXJhdGluZyBzeXN0ZW0ncyBkZWZhdWx0LiBUaGUgXGZCLS1uZXdsaW5lXGZQIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoaXMKK29wdGlvbi4gVHJhaWxpbmcgd2hpdGUgc3BhY2UgaXMgcmVtb3ZlZCBmcm9tIGVhY2ggbGluZSwgYW5kIGJsYW5rIGxpbmVzIGFyZQoraWdub3JlZC4gQW4gZW1wdHkgZmlsZSBjb250YWlucyBubyBwYXR0ZXJucyBhbmQgdGhlcmVmb3JlIG1hdGNoZXMgbm90aGluZy4gU2VlCithbHNvIHRoZSBjb21tZW50cyBhYm91dCBtdWx0aXBsZSBwYXR0ZXJucyB2ZXJzdXMgYSBzaW5nbGUgcGF0dGVybiB3aXRoCithbHRlcm5hdGl2ZXMgaW4gdGhlIGRlc2NyaXB0aW9uIG9mIFxmQi1lXGZQIGFib3ZlLgorLnNwCitJZiB0aGlzIG9wdGlvbiBpcyBnaXZlbiBtb3JlIHRoYW4gb25jZSwgYWxsIHRoZSBzcGVjaWZpZWQgZmlsZXMgYXJlCityZWFkLiBBIGRhdGEgbGluZSBpcyBvdXRwdXQgaWYgYW55IG9mIHRoZSBwYXR0ZXJucyBtYXRjaCBpdC4gQSBmaWxlIG5hbWUgY2FuCitiZSBnaXZlbiBhcyAiLSIgdG8gcmVmZXIgdG8gdGhlIHN0YW5kYXJkIGlucHV0LiBXaGVuIFxmQi1mXGZQIGlzIHVzZWQsIHBhdHRlcm5zCitzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSB1c2luZyBcZkItZVxmUCBtYXkgYWxzbyBiZSBwcmVzZW50OyB0aGV5IGFyZQordGVzdGVkIGJlZm9yZSB0aGUgZmlsZSdzIHBhdHRlcm5zLiBIb3dldmVyLCBubyBvdGhlciBwYXR0ZXJuIGlzIHRha2VuIGZyb20gdGhlCitjb21tYW5kIGxpbmU7IGFsbCBhcmd1bWVudHMgYXJlIHRyZWF0ZWQgYXMgdGhlIG5hbWVzIG9mIHBhdGhzIHRvIGJlIHNlYXJjaGVkLgorLlRQCitcZkItLWZpbGUtbGlzdFxmUD1cZklmaWxlbmFtZVxmUAorUmVhZCBhIGxpc3Qgb2YgZmlsZXMgYW5kL29yIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHRvIGJlIHNjYW5uZWQgZnJvbSB0aGUgZ2l2ZW4KK2ZpbGUsIG9uZSBwZXIgbGluZS4gVHJhaWxpbmcgd2hpdGUgc3BhY2UgaXMgcmVtb3ZlZCBmcm9tIGVhY2ggbGluZSwgYW5kIGJsYW5rCitsaW5lcyBhcmUgaWdub3JlZC4gVGhlc2UgcGF0aHMgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IHRoYXQgYXJlIGxpc3RlZCBvbiB0aGUKK2NvbW1hbmQgbGluZS4gVGhlIGZpbGUgbmFtZSBjYW4gYmUgZ2l2ZW4gYXMgIi0iIHRvIHJlZmVyIHRvIHRoZSBzdGFuZGFyZCBpbnB1dC4KK0lmIFxmQi0tZmlsZVxmUCBhbmQgXGZCLS1maWxlLWxpc3RcZlAgYXJlIGJvdGggc3BlY2lmaWVkIGFzICItIiwgcGF0dGVybnMgYXJlCityZWFkIGZpcnN0LiBUaGlzIGlzIHVzZWZ1bCBvbmx5IHdoZW4gdGhlIHN0YW5kYXJkIGlucHV0IGlzIGEgdGVybWluYWwsIGZyb20KK3doaWNoIGZ1cnRoZXIgbGluZXMgKHRoZSBsaXN0IG9mIGZpbGVzKSBjYW4gYmUgcmVhZCBhZnRlciBhbiBlbmQtb2YtZmlsZQoraW5kaWNhdGlvbi4gSWYgdGhpcyBvcHRpb24gaXMgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UsIGFsbCB0aGUgc3BlY2lmaWVkIGZpbGVzIGFyZQorcmVhZC4KKy5UUAorXGZCLS1maWxlLW9mZnNldHNcZlAKK0luc3RlYWQgb2Ygc2hvd2luZyBsaW5lcyBvciBwYXJ0cyBvZiBsaW5lcyB0aGF0IG1hdGNoLCBzaG93IGVhY2ggbWF0Y2ggYXMgYW4KK29mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgZmlsZSBhbmQgYSBsZW5ndGgsIHNlcGFyYXRlZCBieSBhIGNvbW1hLiBJbiB0aGlzCittb2RlLCBubyBjb250ZXh0IGlzIHNob3duLiBUaGF0IGlzLCB0aGUgXGZCLUFcZlAsIFxmQi1CXGZQLCBhbmQgXGZCLUNcZlAKK29wdGlvbnMgYXJlIGlnbm9yZWQuIElmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWF0Y2ggaW4gYSBsaW5lLCBlYWNoIG9mIHRoZW0gaXMKK3Nob3duIHNlcGFyYXRlbHkuIFRoaXMgb3B0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIFxmQi0tbGluZS1vZmZzZXRzXGZQCithbmQgXGZCLS1vbmx5LW1hdGNoaW5nXGZQLgorLlRQCitcZkItSFxmUCwgXGZCLS13aXRoLWZpbGVuYW1lXGZQCitGb3JjZSB0aGUgaW5jbHVzaW9uIG9mIHRoZSBmaWxlIG5hbWUgYXQgdGhlIHN0YXJ0IG9mIG91dHB1dCBsaW5lcyB3aGVuCitzZWFyY2hpbmcgYSBzaW5nbGUgZmlsZS4gQnkgZGVmYXVsdCwgdGhlIGZpbGUgbmFtZSBpcyBub3Qgc2hvd24gaW4gdGhpcyBjYXNlLgorRm9yIG1hdGNoaW5nIGxpbmVzLCB0aGUgZmlsZSBuYW1lIGlzIGZvbGxvd2VkIGJ5IGEgY29sb247IGZvciBjb250ZXh0IGxpbmVzLCBhCitoeXBoZW4gc2VwYXJhdG9yIGlzIHVzZWQuIElmIGEgbGluZSBudW1iZXIgaXMgYWxzbyBiZWluZyBvdXRwdXQsIGl0IGZvbGxvd3MgdGhlCitmaWxlIG5hbWUuIFdoZW4gdGhlIFxmQi1NXGZQIG9wdGlvbiBjYXVzZXMgYSBwYXR0ZXJuIHRvIG1hdGNoIG1vcmUgdGhhbiBvbmUKK2xpbmUsIG9ubHkgdGhlIGZpcnN0IGlzIHByZWNlZGVkIGJ5IHRoZSBmaWxlIG5hbWUuCisuVFAKK1xmQi1oXGZQLCBcZkItLW5vLWZpbGVuYW1lXGZQCitTdXBwcmVzcyB0aGUgb3V0cHV0IGZpbGUgbmFtZXMgd2hlbiBzZWFyY2hpbmcgbXVsdGlwbGUgZmlsZXMuIEJ5IGRlZmF1bHQsCitmaWxlIG5hbWVzIGFyZSBzaG93biB3aGVuIG11bHRpcGxlIGZpbGVzIGFyZSBzZWFyY2hlZC4gRm9yIG1hdGNoaW5nIGxpbmVzLCB0aGUKK2ZpbGUgbmFtZSBpcyBmb2xsb3dlZCBieSBhIGNvbG9uOyBmb3IgY29udGV4dCBsaW5lcywgYSBoeXBoZW4gc2VwYXJhdG9yIGlzIHVzZWQuCitJZiBhIGxpbmUgbnVtYmVyIGlzIGFsc28gYmVpbmcgb3V0cHV0LCBpdCBmb2xsb3dzIHRoZSBmaWxlIG5hbWUuCisuVFAKK1xmQi0taGVscFxmUAorT3V0cHV0IGEgaGVscCBtZXNzYWdlLCBnaXZpbmcgYnJpZWYgZGV0YWlscyBvZiB0aGUgY29tbWFuZCBvcHRpb25zIGFuZCBmaWxlCit0eXBlIHN1cHBvcnQsIGFuZCB0aGVuIGV4aXQuIEFueXRoaW5nIGVsc2Ugb24gdGhlIGNvbW1hbmQgbGluZSBpcworaWdub3JlZC4KKy5UUAorXGZCLUlcZlAKK0lnbm9yZSBiaW5hcnkgZmlsZXMuIFRoaXMgaXMgZXF1aXZhbGVudCB0bworXGZCLS1iaW5hcnktZmlsZXNcZlA9XGZJd2l0aG91dC1tYXRjaFxmUC4KKy5UUAorXGZCLWlcZlAsIFxmQi0taWdub3JlLWNhc2VcZlAKK0lnbm9yZSB1cHBlci9sb3dlciBjYXNlIGRpc3RpbmN0aW9ucyBkdXJpbmcgY29tcGFyaXNvbnMuCisuVFAKK1xmQi0taW5jbHVkZVxmUD1cZklwYXR0ZXJuXGZQCitJZiBhbnkgXGZCLS1pbmNsdWRlXGZQIHBhdHRlcm5zIGFyZSBzcGVjaWZpZWQsIHRoZSBvbmx5IGZpbGVzIHRoYXQgYXJlCitwcm9jZXNzZWQgYXJlIHRob3NlIHRoYXQgbWF0Y2ggb25lIG9mIHRoZSBwYXR0ZXJucyAoYW5kIGRvIG5vdCBtYXRjaCBhbgorXGZCLS1leGNsdWRlXGZQIHBhdHRlcm4pLiBUaGlzIG9wdGlvbiBkb2VzIG5vdCBhZmZlY3QgZGlyZWN0b3JpZXMsIGJ1dCBpdAorYXBwbGllcyB0byBhbGwgZmlsZXMsIHdoZXRoZXIgbGlzdGVkIG9uIHRoZSBjb21tYW5kIGxpbmUsIG9idGFpbmVkIGZyb20KK1xmQi0tZmlsZS1saXN0XGZQLCBvciBieSBzY2FubmluZyBhIGRpcmVjdG9yeS4gVGhlIHBhdHRlcm4gaXMgYSBQQ1JFMiByZWd1bGFyCitleHByZXNzaW9uLCBhbmQgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBmaW5hbCBjb21wb25lbnQgb2YgdGhlIGZpbGUgbmFtZSwgbm90Cit0aGUgZW50aXJlIHBhdGguIFRoZSBcZkItRlxmUCwgXGZCLXdcZlAsIGFuZCBcZkIteFxmUCBvcHRpb25zIGRvIG5vdCBhcHBseSB0bwordGhpcyBwYXR0ZXJuLiBUaGUgb3B0aW9uIG1heSBiZSBnaXZlbiBhbnkgbnVtYmVyIG9mIHRpbWVzLiBJZiBhIGZpbGUgbmFtZQorbWF0Y2hlcyBib3RoIGFuIFxmQi0taW5jbHVkZVxmUCBhbmQgYW4gXGZCLS1leGNsdWRlXGZQIHBhdHRlcm4sIGl0IGlzIGV4Y2x1ZGVkLgorVGhlcmUgaXMgbm8gc2hvcnQgZm9ybSBmb3IgdGhpcyBvcHRpb24uCisuVFAKK1xmQi0taW5jbHVkZS1mcm9tPVxmUFxmSWZpbGVuYW1lXGZQCitUcmVhdCBlYWNoIG5vbi1lbXB0eSBsaW5lIG9mIHRoZSBmaWxlIGFzIHRoZSBkYXRhIGZvciBhbiBcZkItLWluY2x1ZGVcZlAKK29wdGlvbi4gV2hhdCBjb25zdGl0dXRlcyBhIG5ld2xpbmUgZm9yIHRoaXMgcHVycG9zZSBpcyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzCitkZWZhdWx0LiBUaGUgXGZCLS1uZXdsaW5lXGZQIG9wdGlvbiBoYXMgbm8gZWZmZWN0IG9uIHRoaXMgb3B0aW9uLiBUaGlzIG9wdGlvbgorbWF5IGJlIGdpdmVuIGFueSBudW1iZXIgb2YgdGltZXM7IGFsbCB0aGUgZmlsZXMgYXJlIHJlYWQuCisuVFAKK1xmQi0taW5jbHVkZS1kaXJcZlA9XGZJcGF0dGVyblxmUAorSWYgYW55IFxmQi0taW5jbHVkZS1kaXJcZlAgcGF0dGVybnMgYXJlIHNwZWNpZmllZCwgdGhlIG9ubHkgZGlyZWN0b3JpZXMgdGhhdAorYXJlIHByb2Nlc3NlZCBhcmUgdGhvc2UgdGhhdCBtYXRjaCBvbmUgb2YgdGhlIHBhdHRlcm5zIChhbmQgZG8gbm90IG1hdGNoIGFuCitcZkItLWV4Y2x1ZGUtZGlyXGZQIHBhdHRlcm4pLiBUaGlzIGFwcGxpZXMgdG8gYWxsIGRpcmVjdG9yaWVzLCB3aGV0aGVyIGxpc3RlZAorb24gdGhlIGNvbW1hbmQgbGluZSwgb2J0YWluZWQgZnJvbSBcZkItLWZpbGUtbGlzdFxmUCwgb3IgYnkgc2Nhbm5pbmcgYSBwYXJlbnQKK2RpcmVjdG9yeS4gVGhlIHBhdHRlcm4gaXMgYSBQQ1JFMiByZWd1bGFyIGV4cHJlc3Npb24sIGFuZCBpcyBtYXRjaGVkIGFnYWluc3QKK3RoZSBmaW5hbCBjb21wb25lbnQgb2YgdGhlIGRpcmVjdG9yeSBuYW1lLCBub3QgdGhlIGVudGlyZSBwYXRoLiBUaGUgXGZCLUZcZlAsCitcZkItd1xmUCwgYW5kIFxmQi14XGZQIG9wdGlvbnMgZG8gbm90IGFwcGx5IHRvIHRoaXMgcGF0dGVybi4gVGhlIG9wdGlvbiBtYXkgYmUKK2dpdmVuIGFueSBudW1iZXIgb2YgdGltZXMuIElmIGEgZGlyZWN0b3J5IG1hdGNoZXMgYm90aCBcZkItLWluY2x1ZGUtZGlyXGZQIGFuZAorXGZCLS1leGNsdWRlLWRpclxmUCwgaXQgaXMgZXhjbHVkZWQuIFRoZXJlIGlzIG5vIHNob3J0IGZvcm0gZm9yIHRoaXMgb3B0aW9uLgorLlRQCitcZkItTFxmUCwgXGZCLS1maWxlcy13aXRob3V0LW1hdGNoXGZQCitJbnN0ZWFkIG9mIG91dHB1dHRpbmcgbGluZXMgZnJvbSB0aGUgZmlsZXMsIGp1c3Qgb3V0cHV0IHRoZSBuYW1lcyBvZiB0aGUgZmlsZXMKK3RoYXQgZG8gbm90IGNvbnRhaW4gYW55IGxpbmVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIG91dHB1dC4gRWFjaCBmaWxlIG5hbWUgaXMKK291dHB1dCBvbmNlLCBvbiBhIHNlcGFyYXRlIGxpbmUuCisuVFAKK1xmQi1sXGZQLCBcZkItLWZpbGVzLXdpdGgtbWF0Y2hlc1xmUAorSW5zdGVhZCBvZiBvdXRwdXR0aW5nIGxpbmVzIGZyb20gdGhlIGZpbGVzLCBqdXN0IG91dHB1dCB0aGUgbmFtZXMgb2YgdGhlIGZpbGVzCitjb250YWluaW5nIGxpbmVzIHRoYXQgd291bGQgaGF2ZSBiZWVuIG91dHB1dC4gRWFjaCBmaWxlIG5hbWUgaXMgb3V0cHV0CitvbmNlLCBvbiBhIHNlcGFyYXRlIGxpbmUuIFNlYXJjaGluZyBub3JtYWxseSBzdG9wcyBhcyBzb29uIGFzIGEgbWF0Y2hpbmcgbGluZQoraXMgZm91bmQgaW4gYSBmaWxlLiBIb3dldmVyLCBpZiB0aGUgXGZCLWNcZlAgKGNvdW50KSBvcHRpb24gaXMgYWxzbyB1c2VkLAorbWF0Y2hpbmcgY29udGludWVzIGluIG9yZGVyIHRvIG9idGFpbiB0aGUgY29ycmVjdCBjb3VudCwgYW5kIHRob3NlIGZpbGVzIHRoYXQKK2hhdmUgYXQgbGVhc3Qgb25lIG1hdGNoIGFyZSBsaXN0ZWQgYWxvbmcgd2l0aCB0aGVpciBjb3VudHMuIFVzaW5nIHRoaXMgb3B0aW9uCit3aXRoIFxmQi1jXGZQIGlzIGEgd2F5IG9mIHN1cHByZXNzaW5nIHRoZSBsaXN0aW5nIG9mIGZpbGVzIHdpdGggbm8gbWF0Y2hlcy4KKy5UUAorXGZCLS1sYWJlbFxmUD1cZkluYW1lXGZQCitUaGlzIG9wdGlvbiBzdXBwbGllcyBhIG5hbWUgdG8gYmUgdXNlZCBmb3IgdGhlIHN0YW5kYXJkIGlucHV0IHdoZW4gZmlsZSBuYW1lcworYXJlIGJlaW5nIG91dHB1dC4gSWYgbm90IHN1cHBsaWVkLCAiKHN0YW5kYXJkIGlucHV0KSIgaXMgdXNlZC4gVGhlcmUgaXMgbm8KK3Nob3J0IGZvcm0gZm9yIHRoaXMgb3B0aW9uLgorLlRQCitcZkItLWxpbmUtYnVmZmVyZWRcZlAKK1doZW4gdGhpcyBvcHRpb24gaXMgZ2l2ZW4sIGlucHV0IGlzIHJlYWQgYW5kIHByb2Nlc3NlZCBsaW5lIGJ5IGxpbmUsIGFuZCB0aGUKK291dHB1dCBpcyBmbHVzaGVkIGFmdGVyIGVhY2ggd3JpdGUuIEJ5IGRlZmF1bHQsIGlucHV0IGlzIHJlYWQgaW4gbGFyZ2UgY2h1bmtzLAordW5sZXNzIFxmQnBjcmUyZ3JlcFxmUCBjYW4gZGV0ZXJtaW5lIHRoYXQgaXQgaXMgcmVhZGluZyBmcm9tIGEgdGVybWluYWwgKHdoaWNoCitpcyBjdXJyZW50bHkgcG9zc2libGUgb25seSBpbiBVbml4LWxpa2UgZW52aXJvbm1lbnRzKS4gT3V0cHV0IHRvIHRlcm1pbmFsIGlzCitub3JtYWxseSBhdXRvbWF0aWNhbGx5IGZsdXNoZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFRoaXMgb3B0aW9uIGNhbiBiZQordXNlZnVsIHdoZW4gdGhlIGlucHV0IG9yIG91dHB1dCBpcyBhdHRhY2hlZCB0byBhIHBpcGUgYW5kIHlvdSBkbyBub3Qgd2FudAorXGZCcGNyZTJncmVwXGZQIHRvIGJ1ZmZlciB1cCBsYXJnZSBhbW91bnRzIG9mIGRhdGEuIEhvd2V2ZXIsIGl0cyB1c2Ugd2lsbAorYWZmZWN0IHBlcmZvcm1hbmNlLCBhbmQgdGhlIFxmQi1NXGZQIChtdWx0aWxpbmUpIG9wdGlvbiBjZWFzZXMgdG8gd29yay4KKy5UUAorXGZCLS1saW5lLW9mZnNldHNcZlAKK0luc3RlYWQgb2Ygc2hvd2luZyBsaW5lcyBvciBwYXJ0cyBvZiBsaW5lcyB0aGF0IG1hdGNoLCBzaG93IGVhY2ggbWF0Y2ggYXMgYQorbGluZSBudW1iZXIsIHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIGxpbmUsIGFuZCBhIGxlbmd0aC4gVGhlIGxpbmUKK251bWJlciBpcyB0ZXJtaW5hdGVkIGJ5IGEgY29sb24gKGFzIHVzdWFsOyBzZWUgdGhlIFxmQi1uXGZQIG9wdGlvbiksIGFuZCB0aGUKK29mZnNldCBhbmQgbGVuZ3RoIGFyZSBzZXBhcmF0ZWQgYnkgYSBjb21tYS4gSW4gdGhpcyBtb2RlLCBubyBjb250ZXh0IGlzIHNob3duLgorVGhhdCBpcywgdGhlIFxmQi1BXGZQLCBcZkItQlxmUCwgYW5kIFxmQi1DXGZQIG9wdGlvbnMgYXJlIGlnbm9yZWQuIElmIHRoZXJlIGlzCittb3JlIHRoYW4gb25lIG1hdGNoIGluIGEgbGluZSwgZWFjaCBvZiB0aGVtIGlzIHNob3duIHNlcGFyYXRlbHkuIFRoaXMgb3B0aW9uIGlzCittdXR1YWxseSBleGNsdXNpdmUgd2l0aCBcZkItLWZpbGUtb2Zmc2V0c1xmUCBhbmQgXGZCLS1vbmx5LW1hdGNoaW5nXGZQLgorLlRQCitcZkItLWxvY2FsZVxmUD1cZklsb2NhbGUtbmFtZVxmUAorVGhpcyBvcHRpb24gc3BlY2lmaWVzIGEgbG9jYWxlIHRvIGJlIHVzZWQgZm9yIHBhdHRlcm4gbWF0Y2hpbmcuIEl0IG92ZXJyaWRlcwordGhlIHZhbHVlIGluIHRoZSBcZkJMQ19BTExcZlAgb3IgXGZCTENfQ1RZUEVcZlAgZW52aXJvbm1lbnQgdmFyaWFibGVzLiBJZiBubworbG9jYWxlIGlzIHNwZWNpZmllZCwgdGhlIFBDUkUyIGxpYnJhcnkncyBkZWZhdWx0ICh1c3VhbGx5IHRoZSAiQyIgbG9jYWxlKSBpcwordXNlZC4gVGhlcmUgaXMgbm8gc2hvcnQgZm9ybSBmb3IgdGhpcyBvcHRpb24uCisuVFAKK1xmQi0tbWF0Y2gtbGltaXRcZlA9XGZJbnVtYmVyXGZQCitQcm9jZXNzaW5nIHNvbWUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5zIGNhbiByZXF1aXJlIGEgdmVyeSBsYXJnZSBhbW91bnQgb2YKK21lbW9yeSwgbGVhZGluZyBpbiBzb21lIGNhc2VzIHRvIGEgcHJvZ3JhbSBjcmFzaCBpZiBub3QgZW5vdWdoIGlzIGF2YWlsYWJsZS4KK090aGVyIHBhdHRlcm5zIG1heSB0YWtlIGEgdmVyeSBsb25nIHRpbWUgdG8gc2VhcmNoIGZvciBhbGwgcG9zc2libGUgbWF0Y2hpbmcKK3N0cmluZ3MuIFRoZSBcZkJwY3JlMl9tYXRjaCgpXGZQIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGJ5IFxmQnBjcmUyZ3JlcFxmUCB0bworZG8gdGhlIG1hdGNoaW5nIGhhcyB0d28gcGFyYW1ldGVycyB0aGF0IGNhbiBsaW1pdCB0aGUgcmVzb3VyY2VzIHRoYXQgaXQgdXNlcy4KKy5zcAorVGhlIFxmQi0tbWF0Y2gtbGltaXRcZlAgb3B0aW9uIHByb3ZpZGVzIGEgbWVhbnMgb2YgbGltaXRpbmcgcmVzb3VyY2UgdXNhZ2UKK3doZW4gcHJvY2Vzc2luZyBwYXR0ZXJucyB0aGF0IGFyZSBub3QgZ29pbmcgdG8gbWF0Y2gsIGJ1dCB3aGljaCBoYXZlIGEgdmVyeQorbGFyZ2UgbnVtYmVyIG9mIHBvc3NpYmlsaXRpZXMgaW4gdGhlaXIgc2VhcmNoIHRyZWVzLiBUaGUgY2xhc3NpYyBleGFtcGxlIGlzIGEKK3BhdHRlcm4gdGhhdCB1c2VzIG5lc3RlZCB1bmxpbWl0ZWQgcmVwZWF0cy4gSW50ZXJuYWxseSwgUENSRTIgdXNlcyBhIGZ1bmN0aW9uCitjYWxsZWQgXGZCbWF0Y2goKVxmUCB3aGljaCBpdCBjYWxscyByZXBlYXRlZGx5IChzb21ldGltZXMgcmVjdXJzaXZlbHkpLiBUaGUKK2xpbWl0IHNldCBieSBcZkItLW1hdGNoLWxpbWl0XGZQIGlzIGltcG9zZWQgb24gdGhlIG51bWJlciBvZiB0aW1lcyB0aGlzCitmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGEgbWF0Y2gsIHdoaWNoIGhhcyB0aGUgZWZmZWN0IG9mIGxpbWl0aW5nIHRoZSBhbW91bnQKK29mIGJhY2t0cmFja2luZyB0aGF0IGNhbiB0YWtlIHBsYWNlLgorLnNwCitUaGUgXGZCLS1yZWN1cnNpb24tbGltaXRcZlAgb3B0aW9uIGlzIHNpbWlsYXIgdG8gXGZCLS1tYXRjaC1saW1pdFxmUCwgYnV0CitpbnN0ZWFkIG9mIGxpbWl0aW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgdGltZXMgdGhhdCBcZkJtYXRjaCgpXGZQIGlzIGNhbGxlZCwgaXQKK2xpbWl0cyB0aGUgZGVwdGggb2YgcmVjdXJzaXZlIGNhbGxzLCB3aGljaCBpbiB0dXJuIGxpbWl0cyB0aGUgYW1vdW50IG9mIG1lbW9yeQordGhhdCBjYW4gYmUgdXNlZC4gVGhlIHJlY3Vyc2lvbiBkZXB0aCBpcyBhIHNtYWxsZXIgbnVtYmVyIHRoYW4gdGhlIHRvdGFsIG51bWJlcgorb2YgY2FsbHMsIGJlY2F1c2Ugbm90IGFsbCBjYWxscyB0byBcZkJtYXRjaCgpXGZQIGFyZSByZWN1cnNpdmUuIFRoaXMgbGltaXQgaXMKK29mIHVzZSBvbmx5IGlmIGl0IGlzIHNldCBzbWFsbGVyIHRoYW4gXGZCLS1tYXRjaC1saW1pdFxmUC4KKy5zcAorVGhlcmUgYXJlIG5vIHNob3J0IGZvcm1zIGZvciB0aGVzZSBvcHRpb25zLiBUaGUgZGVmYXVsdCBzZXR0aW5ncyBhcmUgc3BlY2lmaWVkCit3aGVuIHRoZSBQQ1JFMiBsaWJyYXJ5IGlzIGNvbXBpbGVkLCB3aXRoIHRoZSBkZWZhdWx0IGRlZmF1bHQgYmVpbmcgMTAgbWlsbGlvbi4KKy5UUAorXGZCLU1cZlAsIFxmQi0tbXVsdGlsaW5lXGZQCitBbGxvdyBwYXR0ZXJucyB0byBtYXRjaCBtb3JlIHRoYW4gb25lIGxpbmUuIFdoZW4gdGhpcyBvcHRpb24gaXMgZ2l2ZW4sIHBhdHRlcm5zCittYXkgdXNlZnVsbHkgY29udGFpbiBsaXRlcmFsIG5ld2xpbmUgY2hhcmFjdGVycyBhbmQgaW50ZXJuYWwgb2NjdXJyZW5jZXMgb2YgXgorYW5kICQgY2hhcmFjdGVycy4gVGhlIG91dHB1dCBmb3IgYSBzdWNjZXNzZnVsIG1hdGNoIG1heSBjb25zaXN0IG9mIG1vcmUgdGhhbgorb25lIGxpbmUuIFRoZSBmaXJzdCBpcyB0aGUgbGluZSBpbiB3aGljaCB0aGUgbWF0Y2ggc3RhcnRlZCwgYW5kIHRoZSBsYXN0IGlzIHRoZQorbGluZSBpbiB3aGljaCB0aGUgbWF0Y2ggZW5kZWQuIElmIHRoZSBtYXRjaGVkIHN0cmluZyBlbmRzIHdpdGggYSBuZXdsaW5lCitzZXF1ZW5jZSB0aGUgb3V0cHV0IGVuZHMgYXQgdGhlIGVuZCBvZiB0aGF0IGxpbmUuCisuc3AKK1doZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgUENSRTIgbGlicmFyeSBpcyBjYWxsZWQgaW4gIm11bHRpbGluZSIgbW9kZS4KK0hvd2V2ZXIsIFxmQnBjcmUyZ3JlcFxmUCBzdGlsbCBwcm9jZXNzZXMgdGhlIGlucHV0IGxpbmUgYnkgbGluZS4gVGhlIGRpZmZlcmVuY2UKK2lzIHRoYXQgYSBtYXRjaGVkIHN0cmluZyBtYXkgZXh0ZW5kIHBhc3QgdGhlIGVuZCBvZiBhIGxpbmUgYW5kIGNvbnRpbnVlIG9uCitvbmUgb3IgbW9yZSBzdWJzZXF1ZW50IGxpbmVzLiBUaGUgbmV3bGluZSBzZXF1ZW5jZSBtdXN0IGJlIG1hdGNoZWQgYXMgcGFydCBvZgordGhlIHBhdHRlcm4uIEZvciBleGFtcGxlLCB0byBmaW5kIHRoZSBwaHJhc2UgInJlZ3VsYXIgZXhwcmVzc2lvbiIgaW4gYSBmaWxlCit3aGVyZSAicmVndWxhciIgbWlnaHQgYmUgYXQgdGhlIGVuZCBvZiBhIGxpbmUgYW5kICJleHByZXNzaW9uIiBhdCB0aGUgc3RhcnQgb2YKK3RoZSBuZXh0IGxpbmUsIHlvdSBjb3VsZCB1c2UgdGhpcyBjb21tYW5kOgorLnNwCisgIHBjcmUyZ3JlcCAtTSAncmVndWxhclxlcytleHByZXNzaW9uJyA8ZmlsZT4KKy5zcAorVGhlIFxlcyBlc2NhcGUgc2VxdWVuY2UgbWF0Y2hlcyBhbnkgd2hpdGUgc3BhY2UgY2hhcmFjdGVyLCBpbmNsdWRpbmcgbmV3bGluZXMsCithbmQgaXMgZm9sbG93ZWQgYnkgKyBzbyBhcyB0byBtYXRjaCB0cmFpbGluZyB3aGl0ZSBzcGFjZSBvbiB0aGUgZmlyc3QgbGluZSBhcword2VsbCBhcyBwb3NzaWJseSBoYW5kbGluZyBhIHR3by1jaGFyYWN0ZXIgbmV3bGluZSBzZXF1ZW5jZS4KKy5zcAorVGhlcmUgaXMgYSBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgY2FuIGJlIG1hdGNoZWQsIGltcG9zZWQgYnkgdGhlIHdheQordGhhdCBcZkJwY3JlMmdyZXBcZlAgYnVmZmVycyB0aGUgaW5wdXQgZmlsZSBhcyBpdCBzY2FucyBpdC4gSG93ZXZlciwKK1xmQnBjcmUyZ3JlcFxmUCBlbnN1cmVzIHRoYXQgYXQgbGVhc3QgOEsgY2hhcmFjdGVycyBvciB0aGUgcmVzdCBvZiB0aGUgZmlsZQorKHdoaWNoZXZlciBpcyB0aGUgc2hvcnRlcikgYXJlIGF2YWlsYWJsZSBmb3IgZm9yd2FyZCBtYXRjaGluZywgYW5kIHNpbWlsYXJseQordGhlIHByZXZpb3VzIDhLIGNoYXJhY3RlcnMgKG9yIGFsbCB0aGUgcHJldmlvdXMgY2hhcmFjdGVycywgaWYgZmV3ZXIgdGhhbiA4SykKK2FyZSBndWFyYW50ZWVkIHRvIGJlIGF2YWlsYWJsZSBmb3IgbG9va2JlaGluZCBhc3NlcnRpb25zLiBUaGUgXGZCLU1cZlAgb3B0aW9uCitkb2VzIG5vdCB3b3JrIHdoZW4gaW5wdXQgaXMgcmVhZCBsaW5lIGJ5IGxpbmUgKHNlZSBcZlAtLWxpbmUtYnVmZmVyZWRcZlAuKQorLlRQCitcZkItTlxmUCBcZkluZXdsaW5lLXR5cGVcZlAsIFxmQi0tbmV3bGluZVxmUD1cZkluZXdsaW5lLXR5cGVcZlAKK1RoZSBQQ1JFMiBsaWJyYXJ5IHN1cHBvcnRzIGZpdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIGZvciBpbmRpY2F0aW5nCit0aGUgZW5kcyBvZiBsaW5lcy4gVGhleSBhcmUgdGhlIHNpbmdsZS1jaGFyYWN0ZXIgc2VxdWVuY2VzIENSIChjYXJyaWFnZSByZXR1cm4pCithbmQgTEYgKGxpbmVmZWVkKSwgdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiwgYW4gImFueWNybGYiIGNvbnZlbnRpb24sCit3aGljaCByZWNvZ25pemVzIGFueSBvZiB0aGUgcHJlY2VkaW5nIHRocmVlIHR5cGVzLCBhbmQgYW4gImFueSIgY29udmVudGlvbiwgaW4KK3doaWNoIGFueSBVbmljb2RlIGxpbmUgZW5kaW5nIHNlcXVlbmNlIGlzIGFzc3VtZWQgdG8gZW5kIGEgbGluZS4gVGhlIFVuaWNvZGUKK3NlcXVlbmNlcyBhcmUgdGhlIHRocmVlIGp1c3QgbWVudGlvbmVkLCBwbHVzIFZUICh2ZXJ0aWNhbCB0YWIsIFUrMDAwQiksIEZGCisoZm9ybSBmZWVkLCBVKzAwMEMpLCBORUwgKG5leHQgbGluZSwgVSswMDg1KSwgTFMgKGxpbmUgc2VwYXJhdG9yLCBVKzIwMjgpLCBhbmQKK1BTIChwYXJhZ3JhcGggc2VwYXJhdG9yLCBVKzIwMjkpLgorLnNwCitXaGVuIHRoZSBQQ1JFMiBsaWJyYXJ5IGlzIGJ1aWx0LCBhIGRlZmF1bHQgbGluZS1lbmRpbmcgc2VxdWVuY2UgaXMgc3BlY2lmaWVkLgorVGhpcyBpcyBub3JtYWxseSB0aGUgc3RhbmRhcmQgc2VxdWVuY2UgZm9yIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBVbmxlc3MKK290aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGhpcyBvcHRpb24sIFxmQnBjcmUyZ3JlcFxmUCB1c2VzIHRoZSBsaWJyYXJ5J3MgZGVmYXVsdC4KK1RoZSBwb3NzaWJsZSB2YWx1ZXMgZm9yIHRoaXMgb3B0aW9uIGFyZSBDUiwgTEYsIENSTEYsIEFOWUNSTEYsIG9yIEFOWS4gVGhpcworbWFrZXMgaXQgcG9zc2libGUgdG8gdXNlIFxmQnBjcmUyZ3JlcFxmUCB0byBzY2FuIGZpbGVzIHRoYXQgaGF2ZSBjb21lIGZyb20KK290aGVyIGVudmlyb25tZW50cyB3aXRob3V0IGhhdmluZyB0byBtb2RpZnkgdGhlaXIgbGluZSBlbmRpbmdzLiBJZiB0aGUgZGF0YQordGhhdCBpcyBiZWluZyBzY2FubmVkIGRvZXMgbm90IGFncmVlIHdpdGggdGhlIGNvbnZlbnRpb24gc2V0IGJ5IHRoaXMgb3B0aW9uLAorXGZCcGNyZTJncmVwXGZQIG1heSBiZWhhdmUgaW4gc3RyYW5nZSB3YXlzLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24gZG9lcyBub3QKK2FwcGx5IHRvIGZpbGVzIHNwZWNpZmllZCBieSB0aGUgXGZCLWZcZlAsIFxmQi0tZXhjbHVkZS1mcm9tXGZQLCBvcgorXGZCLS1pbmNsdWRlLWZyb21cZlAgb3B0aW9ucywgd2hpY2ggYXJlIGV4cGVjdGVkIHRvIHVzZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzCitzdGFuZGFyZCBuZXdsaW5lIHNlcXVlbmNlLgorLlRQCitcZkItblxmUCwgXGZCLS1saW5lLW51bWJlclxmUAorUHJlY2VkZSBlYWNoIG91dHB1dCBsaW5lIGJ5IGl0cyBsaW5lIG51bWJlciBpbiB0aGUgZmlsZSwgZm9sbG93ZWQgYnkgYSBjb2xvbgorZm9yIG1hdGNoaW5nIGxpbmVzIG9yIGEgaHlwaGVuIGZvciBjb250ZXh0IGxpbmVzLiBJZiB0aGUgZmlsZSBuYW1lIGlzIGFsc28KK2JlaW5nIG91dHB1dCwgaXQgcHJlY2VkZXMgdGhlIGxpbmUgbnVtYmVyLiBXaGVuIHRoZSBcZkItTVxmUCBvcHRpb24gY2F1c2VzIGEKK3BhdHRlcm4gdG8gbWF0Y2ggbW9yZSB0aGFuIG9uZSBsaW5lLCBvbmx5IHRoZSBmaXJzdCBpcyBwcmVjZWRlZCBieSBpdHMgbGluZQorbnVtYmVyLiBUaGlzIG9wdGlvbiBpcyBmb3JjZWQgaWYgXGZCLS1saW5lLW9mZnNldHNcZlAgaXMgdXNlZC4KKy5UUAorXGZCLS1uby1qaXRcZlAKK0lmIHRoZSBQQ1JFMiBsaWJyYXJ5IGlzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IganVzdC1pbi10aW1lIGNvbXBpbGluZyAod2hpY2gKK3NwZWVkcyB1cCBtYXRjaGluZyksIFxmQnBjcmUyZ3JlcFxmUCBhdXRvbWF0aWNhbGx5IG1ha2VzIHVzZSBvZiB0aGlzLCB1bmxlc3MgaXQKK3dhcyBleHBsaWNpdGx5IGRpc2FibGVkIGF0IGJ1aWxkIHRpbWUuIFRoaXMgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgdGhlCit1c2Ugb2YgSklUIGF0IHJ1biB0aW1lLiBJdCBpcyBwcm92aWRlZCBmb3IgdGVzdGluZyBhbmQgd29ya2luZyByb3VuZCBwcm9ibGVtcy4KK0l0IHNob3VsZCBuZXZlciBiZSBuZWVkZWQgaW4gbm9ybWFsIHVzZS4KKy5UUAorXGZCLW9cZlAsIFxmQi0tb25seS1tYXRjaGluZ1xmUAorU2hvdyBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBsaW5lIHRoYXQgbWF0Y2hlZCBhIHBhdHRlcm4gaW5zdGVhZCBvZiB0aGUgd2hvbGUKK2xpbmUuIEluIHRoaXMgbW9kZSwgbm8gY29udGV4dCBpcyBzaG93bi4gVGhhdCBpcywgdGhlIFxmQi1BXGZQLCBcZkItQlxmUCwgYW5kCitcZkItQ1xmUCBvcHRpb25zIGFyZSBpZ25vcmVkLiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIG1hdGNoIGluIGEgbGluZSwgZWFjaAorb2YgdGhlbSBpcyBzaG93biBzZXBhcmF0ZWx5LiBJZiBcZkItb1xmUCBpcyBjb21iaW5lZCB3aXRoIFxmQi12XGZQIChpbnZlcnQgdGhlCitzZW5zZSBvZiB0aGUgbWF0Y2ggdG8gZmluZCBub24tbWF0Y2hpbmcgbGluZXMpLCBubyBvdXRwdXQgaXMgZ2VuZXJhdGVkLCBidXQgdGhlCityZXR1cm4gY29kZSBpcyBzZXQgYXBwcm9wcmlhdGVseS4gSWYgdGhlIG1hdGNoZWQgcG9ydGlvbiBvZiB0aGUgbGluZSBpcyBlbXB0eSwKK25vdGhpbmcgaXMgb3V0cHV0IHVubGVzcyB0aGUgZmlsZSBuYW1lIG9yIGxpbmUgbnVtYmVyIGFyZSBiZWluZyBwcmludGVkLCBpbgord2hpY2ggY2FzZSB0aGV5IGFyZSBzaG93biBvbiBhbiBvdGhlcndpc2UgZW1wdHkgbGluZS4gVGhpcyBvcHRpb24gaXMgbXV0dWFsbHkKK2V4Y2x1c2l2ZSB3aXRoIFxmQi0tZmlsZS1vZmZzZXRzXGZQIGFuZCBcZkItLWxpbmUtb2Zmc2V0c1xmUC4KKy5UUAorXGZCLW9cZlBcZkludW1iZXJcZlAsIFxmQi0tb25seS1tYXRjaGluZ1xmUD1cZkludW1iZXJcZlAKK1Nob3cgb25seSB0aGUgcGFydCBvZiB0aGUgbGluZSB0aGF0IG1hdGNoZWQgdGhlIGNhcHR1cmluZyBwYXJlbnRoZXNlcyBvZiB0aGUKK2dpdmVuIG51bWJlci4gVXAgdG8gMzIgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGFyZSBzdXBwb3J0ZWQsIGFuZCAtbzAgaXMKK2VxdWl2YWxlbnQgdG8gXGZCLW9cZlAgd2l0aG91dCBhIG51bWJlci4gQmVjYXVzZSB0aGVzZSBvcHRpb25zIGNhbiBiZSBnaXZlbgord2l0aG91dCBhbiBhcmd1bWVudCAoc2VlIGFib3ZlKSwgaWYgYW4gYXJndW1lbnQgaXMgcHJlc2VudCwgaXQgbXVzdCBiZSBnaXZlbiBpbgordGhlIHNhbWUgc2hlbGwgaXRlbSwgZm9yIGV4YW1wbGUsIC1vMyBvciAtLW9ubHktbWF0Y2hpbmc9Mi4gVGhlIGNvbW1lbnRzIGdpdmVuCitmb3IgdGhlIG5vbi1hcmd1bWVudCBjYXNlIGFib3ZlIGFsc28gYXBwbHkgdG8gdGhpcyBjYXNlLiBJZiB0aGUgc3BlY2lmaWVkCitjYXB0dXJpbmcgcGFyZW50aGVzZXMgZG8gbm90IGV4aXN0IGluIHRoZSBwYXR0ZXJuLCBvciB3ZXJlIG5vdCBzZXQgaW4gdGhlCittYXRjaCwgbm90aGluZyBpcyBvdXRwdXQgdW5sZXNzIHRoZSBmaWxlIG5hbWUgb3IgbGluZSBudW1iZXIgYXJlIGJlaW5nIG91dHB1dC4KKy5zcAorSWYgdGhpcyBvcHRpb24gaXMgZ2l2ZW4gbXVsdGlwbGUgdGltZXMsIG11bHRpcGxlIHN1YnN0cmluZ3MgYXJlIG91dHB1dCwgaW4gdGhlCitvcmRlciB0aGUgb3B0aW9ucyBhcmUgZ2l2ZW4uIEZvciBleGFtcGxlLCAtbzMgLW8xIC1vMyBjYXVzZXMgdGhlIHN1YnN0cmluZ3MKK21hdGNoZWQgYnkgY2FwdHVyaW5nIHBhcmVudGhlc2VzIDMgYW5kIDEgYW5kIHRoZW4gMyBhZ2FpbiB0byBiZSBvdXRwdXQuIEJ5CitkZWZhdWx0LCB0aGVyZSBpcyBubyBzZXBhcmF0b3IgKGJ1dCBzZWUgdGhlIG5leHQgb3B0aW9uKS4KKy5UUAorXGZCLS1vbS1zZXBhcmF0b3JcZlA9XGZJdGV4dFxmUAorU3BlY2lmeSBhIHNlcGFyYXRpbmcgc3RyaW5nIGZvciBtdWx0aXBsZSBvY2N1cnJlbmNlcyBvZiBcZkItb1xmUC4gVGhlIGRlZmF1bHQKK2lzIGFuIGVtcHR5IHN0cmluZy4gU2VwYXJhdGluZyBzdHJpbmdzIGFyZSBuZXZlciBjb2xvdXJlZC4KKy5UUAorXGZCLXFcZlAsIFxmQi0tcXVpZXRcZlAKK1dvcmsgcXVpZXRseSwgdGhhdCBpcywgZGlzcGxheSBub3RoaW5nIGV4Y2VwdCBlcnJvciBtZXNzYWdlcy4gVGhlIGV4aXQKK3N0YXR1cyBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgYW55IG1hdGNoZXMgd2VyZSBmb3VuZC4KKy5UUAorXGZCLXJcZlAsIFxmQi0tcmVjdXJzaXZlXGZQCitJZiBhbnkgZ2l2ZW4gcGF0aCBpcyBhIGRpcmVjdG9yeSwgcmVjdXJzaXZlbHkgc2NhbiB0aGUgZmlsZXMgaXQgY29udGFpbnMsCit0YWtpbmcgbm90ZSBvZiBhbnkgXGZCLS1pbmNsdWRlXGZQIGFuZCBcZkItLWV4Y2x1ZGVcZlAgc2V0dGluZ3MuIEJ5IGRlZmF1bHQsIGEKK2RpcmVjdG9yeSBpcyByZWFkIGFzIGEgbm9ybWFsIGZpbGU7IGluIHNvbWUgb3BlcmF0aW5nIHN5c3RlbXMgdGhpcyBnaXZlcyBhbgoraW1tZWRpYXRlIGVuZC1vZi1maWxlLiBUaGlzIG9wdGlvbiBpcyBhIHNob3J0aGFuZCBmb3Igc2V0dGluZyB0aGUgXGZCLWRcZlAKK29wdGlvbiB0byAicmVjdXJzZSIuCisuVFAKK1xmQi0tcmVjdXJzaW9uLWxpbWl0XGZQPVxmSW51bWJlclxmUAorU2VlIFxmQi0tbWF0Y2gtbGltaXRcZlAgYWJvdmUuCisuVFAKK1xmQi1zXGZQLCBcZkItLW5vLW1lc3NhZ2VzXGZQCitTdXBwcmVzcyBlcnJvciBtZXNzYWdlcyBhYm91dCBub24tZXhpc3RlbnQgb3IgdW5yZWFkYWJsZSBmaWxlcy4gU3VjaCBmaWxlcyBhcmUKK3F1aWV0bHkgc2tpcHBlZC4gSG93ZXZlciwgdGhlIHJldHVybiBjb2RlIGlzIHN0aWxsIDIsIGV2ZW4gaWYgbWF0Y2hlcyB3ZXJlCitmb3VuZCBpbiBvdGhlciBmaWxlcy4KKy5UUAorXGZCLXVcZlAsIFxmQi0tdXRmLThcZlAKK09wZXJhdGUgaW4gVVRGLTggbW9kZS4gVGhpcyBvcHRpb24gaXMgYXZhaWxhYmxlIG9ubHkgaWYgUENSRTIgaGFzIGJlZW4gY29tcGlsZWQKK3dpdGggVVRGLTggc3VwcG9ydC4gQWxsIHBhdHRlcm5zIChpbmNsdWRpbmcgdGhvc2UgZm9yIGFueSBcZkItLWV4Y2x1ZGVcZlAgYW5kCitcZkItLWluY2x1ZGVcZlAgb3B0aW9ucykgYW5kIGFsbCBzdWJqZWN0IGxpbmVzIHRoYXQgYXJlIHNjYW5uZWQgbXVzdCBiZSB2YWxpZAorc3RyaW5ncyBvZiBVVEYtOCBjaGFyYWN0ZXJzLgorLlRQCitcZkItVlxmUCwgXGZCLS12ZXJzaW9uXGZQCitXcml0ZSB0aGUgdmVyc2lvbiBudW1iZXJzIG9mIFxmQnBjcmUyZ3JlcFxmUCBhbmQgdGhlIFBDUkUyIGxpYnJhcnkgdG8gdGhlCitzdGFuZGFyZCBvdXRwdXQgYW5kIHRoZW4gZXhpdC4gQW55dGhpbmcgZWxzZSBvbiB0aGUgY29tbWFuZCBsaW5lIGlzCitpZ25vcmVkLgorLlRQCitcZkItdlxmUCwgXGZCLS1pbnZlcnQtbWF0Y2hcZlAKK0ludmVydCB0aGUgc2Vuc2Ugb2YgdGhlIG1hdGNoLCBzbyB0aGF0IGxpbmVzIHdoaWNoIGRvIFxmSW5vdFxmUCBtYXRjaCBhbnkgb2YKK3RoZSBwYXR0ZXJucyBhcmUgdGhlIG9uZXMgdGhhdCBhcmUgZm91bmQuCisuVFAKK1xmQi13XGZQLCBcZkItLXdvcmQtcmVnZXhcZlAsIFxmQi0td29yZC1yZWdleHBcZlAKK0ZvcmNlIHRoZSBwYXR0ZXJucyB0byBtYXRjaCBvbmx5IHdob2xlIHdvcmRzLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gaGF2aW5nIFxlYgorYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIHBhdHRlcm4uIFRoaXMgb3B0aW9uIGFwcGxpZXMgb25seSB0byB0aGUgcGF0dGVybnMKK3RoYXQgYXJlIG1hdGNoZWQgYWdhaW5zdCB0aGUgY29udGVudHMgb2YgZmlsZXM7IGl0IGRvZXMgbm90IGFwcGx5IHRvIHBhdHRlcm5zCitzcGVjaWZpZWQgYnkgYW55IG9mIHRoZSBcZkItLWluY2x1ZGVcZlAgb3IgXGZCLS1leGNsdWRlXGZQIG9wdGlvbnMuCisuVFAKK1xmQi14XGZQLCBcZkItLWxpbmUtcmVnZXhcZlAsIFxmQi0tbGluZS1yZWdleHBcZlAKK0ZvcmNlIHRoZSBwYXR0ZXJucyB0byBiZSBhbmNob3JlZCAoZWFjaCBtdXN0IHN0YXJ0IG1hdGNoaW5nIGF0IHRoZSBiZWdpbm5pbmcgb2YKK2EgbGluZSkgYW5kIGluIGFkZGl0aW9uLCByZXF1aXJlIHRoZW0gdG8gbWF0Y2ggZW50aXJlIGxpbmVzLiBUaGlzIGlzIGVxdWl2YWxlbnQKK3RvIGhhdmluZyBeIGFuZCAkIGNoYXJhY3RlcnMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgZWFjaCBhbHRlcm5hdGl2ZSB0b3AtbGV2ZWwKK2JyYW5jaCBpbiBldmVyeSBwYXR0ZXJuLiBUaGlzIG9wdGlvbiBhcHBsaWVzIG9ubHkgdG8gdGhlIHBhdHRlcm5zIHRoYXQgYXJlCittYXRjaGVkIGFnYWluc3QgdGhlIGNvbnRlbnRzIG9mIGZpbGVzOyBpdCBkb2VzIG5vdCBhcHBseSB0byBwYXR0ZXJucyBzcGVjaWZpZWQKK2J5IGFueSBvZiB0aGUgXGZCLS1pbmNsdWRlXGZQIG9yIFxmQi0tZXhjbHVkZVxmUCBvcHRpb25zLgorLgorLgorLlNIICJFTlZJUk9OTUVOVCBWQVJJQUJMRVMiCisucnMKKy5zcAorVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBcZkJMQ19BTExcZlAgYW5kIFxmQkxDX0NUWVBFXGZQIGFyZSBleGFtaW5lZCwgaW4gdGhhdAorb3JkZXIsIGZvciBhIGxvY2FsZS4gVGhlIGZpcnN0IG9uZSB0aGF0IGlzIHNldCBpcyB1c2VkLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuCitieSB0aGUgXGZCLS1sb2NhbGVcZlAgb3B0aW9uLiBJZiBubyBsb2NhbGUgaXMgc2V0LCB0aGUgUENSRTIgbGlicmFyeSdzIGRlZmF1bHQKKyh1c3VhbGx5IHRoZSAiQyIgbG9jYWxlKSBpcyB1c2VkLgorLgorLgorLlNIICJORVdMSU5FUyIKKy5ycworLnNwCitUaGUgXGZCLU5cZlAgKFxmQi0tbmV3bGluZVxmUCkgb3B0aW9uIGFsbG93cyBcZkJwY3JlMmdyZXBcZlAgdG8gc2NhbiBmaWxlcyB3aXRoCitkaWZmZXJlbnQgbmV3bGluZSBjb252ZW50aW9ucyBmcm9tIHRoZSBkZWZhdWx0LiBBbnkgcGFydHMgb2YgdGhlIGlucHV0IGZpbGVzCit0aGF0IGFyZSB3cml0dGVuIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgYXJlIGNvcGllZCBpZGVudGljYWxseSwgd2l0aCB3aGF0ZXZlcgorbmV3bGluZSBzZXF1ZW5jZXMgdGhleSBoYXZlIGluIHRoZSBpbnB1dC4gSG93ZXZlciwgdGhlIHNldHRpbmcgb2YgdGhpcyBvcHRpb24KK2RvZXMgbm90IGFmZmVjdCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgZmlsZXMgc3BlY2lmaWVkIGJ5IHRoZSBcZkItZlxmUCwKK1xmQi0tZXhjbHVkZS1mcm9tXGZQLCBvciBcZkItLWluY2x1ZGUtZnJvbVxmUCBvcHRpb25zLCB3aGljaCBhcmUgYXNzdW1lZCB0byB1c2UKK3RoZSBvcGVyYXRpbmcgc3lzdGVtJ3Mgc3RhbmRhcmQgbmV3bGluZSBzZXF1ZW5jZSwgbm9yIGRvZXMgaXQgYWZmZWN0IHRoZSB3YXkgaW4KK3doaWNoIFxmQnBjcmUyZ3JlcFxmUCB3cml0ZXMgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0byB0aGUgc3RhbmRhcmQgZXJyb3IgYW5kCitvdXRwdXQgc3RyZWFtcy4gRm9yIHRoZXNlIGl0IHVzZXMgdGhlIHN0cmluZyAiXGVuIiB0byBpbmRpY2F0ZSBuZXdsaW5lcywKK3JlbHlpbmcgb24gdGhlIEMgSS9PIGxpYnJhcnkgdG8gY29udmVydCB0aGlzIHRvIGFuIGFwcHJvcHJpYXRlIHNlcXVlbmNlLgorLgorLgorLlNIICJPUFRJT05TIENPTVBBVElCSUxJVFkiCisucnMKKy5zcAorTWFueSBvZiB0aGUgc2hvcnQgYW5kIGxvbmcgZm9ybXMgb2YgXGZCcGNyZTJncmVwXGZQJ3Mgb3B0aW9ucyBhcmUgdGhlIHNhbWUKK2FzIGluIHRoZSBHTlUgXGZCZ3JlcFxmUCBwcm9ncmFtLiBBbnkgbG9uZyBvcHRpb24gb2YgdGhlIGZvcm0KK1xmQi0teHh4LXJlZ2V4cFxmUCAoR05VIHRlcm1pbm9sb2d5KSBpcyBhbHNvIGF2YWlsYWJsZSBhcyBcZkItLXh4eC1yZWdleFxmUAorKFBDUkUyIHRlcm1pbm9sb2d5KS4gSG93ZXZlciwgdGhlIFxmQi0tZmlsZS1saXN0XGZQLCBcZkItLWZpbGUtb2Zmc2V0c1xmUCwKK1xmQi0taW5jbHVkZS1kaXJcZlAsIFxmQi0tbGluZS1vZmZzZXRzXGZQLCBcZkItLWxvY2FsZVxmUCwgXGZCLS1tYXRjaC1saW1pdFxmUCwKK1xmQi1NXGZQLCBcZkItLW11bHRpbGluZVxmUCwgXGZCLU5cZlAsIFxmQi0tbmV3bGluZVxmUCwgXGZCLS1vbS1zZXBhcmF0b3JcZlAsCitcZkItLXJlY3Vyc2lvbi1saW1pdFxmUCwgXGZCLXVcZlAsIGFuZCBcZkItLXV0Zi04XGZQIG9wdGlvbnMgYXJlIHNwZWNpZmljIHRvCitcZkJwY3JlMmdyZXBcZlAsIGFzIGlzIHRoZSB1c2Ugb2YgdGhlIFxmQi0tb25seS1tYXRjaGluZ1xmUCBvcHRpb24gd2l0aCBhCitjYXB0dXJpbmcgcGFyZW50aGVzZXMgbnVtYmVyLgorLlAKK0FsdGhvdWdoIG1vc3Qgb2YgdGhlIGNvbW1vbiBvcHRpb25zIHdvcmsgdGhlIHNhbWUgd2F5LCBhIGZldyBhcmUgZGlmZmVyZW50IGluCitcZkJwY3JlMmdyZXBcZlAuIEZvciBleGFtcGxlLCB0aGUgXGZCLS1pbmNsdWRlXGZQIG9wdGlvbidzIGFyZ3VtZW50IGlzIGEgZ2xvYgorZm9yIEdOVSBcZkJncmVwXGZQLCBidXQgYSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIFxmQnBjcmUyZ3JlcFxmUC4gSWYgYm90aCB0aGUKK1xmQi1jXGZQIGFuZCBcZkItbFxmUCBvcHRpb25zIGFyZSBnaXZlbiwgR05VIGdyZXAgbGlzdHMgb25seSBmaWxlIG5hbWVzLAord2l0aG91dCBjb3VudHMsIGJ1dCBcZkJwY3JlMmdyZXBcZlAgZ2l2ZXMgdGhlIGNvdW50cyBhcyB3ZWxsLgorLgorLgorLlNIICJPUFRJT05TIFdJVEggREFUQSIKKy5ycworLnNwCitUaGVyZSBhcmUgZm91ciBkaWZmZXJlbnQgd2F5cyBpbiB3aGljaCBhbiBvcHRpb24gd2l0aCBkYXRhIGNhbiBiZSBzcGVjaWZpZWQuCitJZiBhIHNob3J0IGZvcm0gb3B0aW9uIGlzIHVzZWQsIHRoZSBkYXRhIG1heSBmb2xsb3cgaW1tZWRpYXRlbHksIG9yICh3aXRoIG9uZQorZXhjZXB0aW9uKSBpbiB0aGUgbmV4dCBjb21tYW5kIGxpbmUgaXRlbS4gRm9yIGV4YW1wbGU6Cisuc3AKKyAgLWYvc29tZS9maWxlCisgIC1mIC9zb21lL2ZpbGUKKy5zcAorVGhlIGV4Y2VwdGlvbiBpcyB0aGUgXGZCLW9cZlAgb3B0aW9uLCB3aGljaCBtYXkgYXBwZWFyIHdpdGggb3Igd2l0aG91dCBkYXRhLgorQmVjYXVzZSBvZiB0aGlzLCBpZiBkYXRhIGlzIHByZXNlbnQsIGl0IG11c3QgZm9sbG93IGltbWVkaWF0ZWx5IGluIHRoZSBzYW1lCitpdGVtLCBmb3IgZXhhbXBsZSAtbzMuCisuUAorSWYgYSBsb25nIGZvcm0gb3B0aW9uIGlzIHVzZWQsIHRoZSBkYXRhIG1heSBhcHBlYXIgaW4gdGhlIHNhbWUgY29tbWFuZCBsaW5lCitpdGVtLCBzZXBhcmF0ZWQgYnkgYW4gZXF1YWxzIGNoYXJhY3Rlciwgb3IgKHdpdGggdHdvIGV4Y2VwdGlvbnMpIGl0IG1heSBhcHBlYXIKK2luIHRoZSBuZXh0IGNvbW1hbmQgbGluZSBpdGVtLiBGb3IgZXhhbXBsZToKKy5zcAorICAtLWZpbGU9L3NvbWUvZmlsZQorICAtLWZpbGUgL3NvbWUvZmlsZQorLnNwCitOb3RlLCBob3dldmVyLCB0aGF0IGlmIHlvdSB3YW50IHRvIHN1cHBseSBhIGZpbGUgbmFtZSBiZWdpbm5pbmcgd2l0aCB+IGFzIGRhdGEKK2luIGEgc2hlbGwgY29tbWFuZCwgYW5kIGhhdmUgdGhlIHNoZWxsIGV4cGFuZCB+IHRvIGEgaG9tZSBkaXJlY3RvcnksIHlvdSBtdXN0CitzZXBhcmF0ZSB0aGUgZmlsZSBuYW1lIGZyb20gdGhlIG9wdGlvbiwgYmVjYXVzZSB0aGUgc2hlbGwgZG9lcyBub3QgdHJlYXQgfgorc3BlY2lhbGx5IHVubGVzcyBpdCBpcyBhdCB0aGUgc3RhcnQgb2YgYW4gaXRlbS4KKy5QCitUaGUgZXhjZXB0aW9ucyB0byB0aGUgYWJvdmUgYXJlIHRoZSBcZkItLWNvbG91clxmUCAob3IgXGZCLS1jb2xvclxmUCkgYW5kCitcZkItLW9ubHktbWF0Y2hpbmdcZlAgb3B0aW9ucywgZm9yIHdoaWNoIHRoZSBkYXRhIGlzIG9wdGlvbmFsLiBJZiBvbmUgb2YgdGhlc2UKK29wdGlvbnMgZG9lcyBoYXZlIGRhdGEsIGl0IG11c3QgYmUgZ2l2ZW4gaW4gdGhlIGZpcnN0IGZvcm0sIHVzaW5nIGFuIGVxdWFscworY2hhcmFjdGVyLiBPdGhlcndpc2UgXGZCcGNyZTJncmVwXGZQIHdpbGwgYXNzdW1lIHRoYXQgaXQgaGFzIG5vIGRhdGEuCisuCisuCisuU0ggIk1BVENISU5HIEVSUk9SUyIKKy5ycworLnNwCitJdCBpcyBwb3NzaWJsZSB0byBzdXBwbHkgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB0YWtlcyBhIHZlcnkgbG9uZyB0aW1lIHRvCitmYWlsIHRvIG1hdGNoIGNlcnRhaW4gbGluZXMuIFN1Y2ggcGF0dGVybnMgbm9ybWFsbHkgaW52b2x2ZSBuZXN0ZWQgaW5kZWZpbml0ZQorcmVwZWF0cywgZm9yIGV4YW1wbGU6IChhKykqXGVkIHdoZW4gbWF0Y2hlZCBhZ2FpbnN0IGEgbGluZSBvZiBhJ3Mgd2l0aCBubyBmaW5hbAorZGlnaXQuIFRoZSBQQ1JFMiBtYXRjaGluZyBmdW5jdGlvbiBoYXMgYSByZXNvdXJjZSBsaW1pdCB0aGF0IGNhdXNlcyBpdCB0byBhYm9ydAoraW4gdGhlc2UgY2lyY3Vtc3RhbmNlcy4gSWYgdGhpcyBoYXBwZW5zLCBcZkJwY3JlMmdyZXBcZlAgb3V0cHV0cyBhbiBlcnJvcgorbWVzc2FnZSBhbmQgdGhlIGxpbmUgdGhhdCBjYXVzZWQgdGhlIHByb2JsZW0gdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4gSWYKK3RoZXJlIGFyZSBtb3JlIHRoYW4gMjAgc3VjaCBlcnJvcnMsIFxmQnBjcmUyZ3JlcFxmUCBnaXZlcyB1cC4KKy5QCitUaGUgXGZCLS1tYXRjaC1saW1pdFxmUCBvcHRpb24gb2YgXGZCcGNyZTJncmVwXGZQIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUKK292ZXJhbGwgcmVzb3VyY2UgbGltaXQ7IHRoZXJlIGlzIGEgc2Vjb25kIG9wdGlvbiBjYWxsZWQgXGZCLS1yZWN1cnNpb24tbGltaXRcZlAKK3RoYXQgc2V0cyBhIGxpbWl0IG9uIHRoZSBhbW91bnQgb2YgbWVtb3J5ICh1c3VhbGx5IHN0YWNrKSB0aGF0IGlzIHVzZWQgKHNlZSB0aGUKK2Rpc2N1c3Npb24gb2YgdGhlc2Ugb3B0aW9ucyBhYm92ZSkuCisuCisuCisuU0ggRElBR05PU1RJQ1MKKy5ycworLnNwCitFeGl0IHN0YXR1cyBpcyAwIGlmIGFueSBtYXRjaGVzIHdlcmUgZm91bmQsIDEgaWYgbm8gbWF0Y2hlcyB3ZXJlIGZvdW5kLCBhbmQgMgorZm9yIHN5bnRheCBlcnJvcnMsIG92ZXJsb25nIGxpbmVzLCBub24tZXhpc3RlbnQgb3IgaW5hY2Nlc3NpYmxlIGZpbGVzIChldmVuIGlmCittYXRjaGVzIHdlcmUgZm91bmQgaW4gb3RoZXIgZmlsZXMpIG9yIHRvbyBtYW55IG1hdGNoaW5nIGVycm9ycy4gVXNpbmcgdGhlCitcZkItc1xmUCBvcHRpb24gdG8gc3VwcHJlc3MgZXJyb3IgbWVzc2FnZXMgYWJvdXQgaW5hY2Nlc3NpYmxlIGZpbGVzIGRvZXMgbm90CithZmZlY3QgdGhlIHJldHVybiBjb2RlLgorLgorLgorLlNIICJTRUUgQUxTTyIKKy5ycworLnNwCitcZkJwY3JlMnBhdHRlcm5cZlAoMyksIFxmQnBjcmUyc3ludGF4XGZQKDMpLgorLgorLgorLlNIIEFVVEhPUgorLnJzCisuc3AKKy5uZgorUGhpbGlwIEhhemVsCitVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCitDYW1icmlkZ2UsIEVuZ2xhbmQuCisuZmkKKy4KKy4KKy5TSCBSRVZJU0lPTgorLnJzCisuc3AKKy5uZgorTGFzdCB1cGRhdGVkOiAwMyBKYW51YXJ5IDIwMTUKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJncmVwLnR4dCBiL2Rpc3QyL2RvYy9wY3JlMmdyZXAudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5Y2Q3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJncmVwLnR4dApAQCAtMCwwICsxLDc2OSBAQAorUENSRTJHUkVQKDEpICAgICAgICAgICAgICAgIEdlbmVyYWwgQ29tbWFuZHMgTWFudWFsICAgICAgICAgICAgICAgUENSRTJHUkVQKDEpCisKKworCitOQU1FCisgICAgICAgcGNyZTJncmVwIC0gYSBncmVwIHdpdGggUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisKK1NZTk9QU0lTCisgICAgICAgcGNyZTJncmVwIFtvcHRpb25zXSBbbG9uZyBvcHRpb25zXSBbcGF0dGVybl0gW3BhdGgxIHBhdGgyIC4uLl0KKworCitERVNDUklQVElPTgorCisgICAgICAgcGNyZTJncmVwICBzZWFyY2hlcyAgZmlsZXMgIGZvciAgY2hhcmFjdGVyIHBhdHRlcm5zLCBpbiB0aGUgc2FtZSB3YXkgYXMKKyAgICAgICBvdGhlciBncmVwIGNvbW1hbmRzIGRvLCAgYnV0ICBpdCAgdXNlcyAgdGhlICBQQ1JFMiAgcmVndWxhciAgZXhwcmVzc2lvbgorICAgICAgIGxpYnJhcnkgIHRvICBzdXBwb3J0ICBwYXR0ZXJucyAgdGhhdCAgYXJlICBjb21wYXRpYmxlICB3aXRoIHRoZSByZWd1bGFyCisgICAgICAgZXhwcmVzc2lvbnMgb2YgUGVybCA1LiBTZWUgcGNyZTJzeW50YXgoMykgZm9yIGEgcXVpY2stcmVmZXJlbmNlIHN1bW1hcnkKKyAgICAgICBvZiAgcGF0dGVybiAgc3ludGF4LCAgb3IgIHBjcmUycGF0dGVybigzKSBmb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIHRoZQorICAgICAgIHN5bnRheCBhbmQgc2VtYW50aWNzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgUENSRTIgc3VwcG9ydHMuCisKKyAgICAgICBQYXR0ZXJucywgd2hldGhlciBzdXBwbGllZCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluIGEgIHNlcGFyYXRlICBmaWxlLAorICAgICAgIGFyZSBnaXZlbiB3aXRob3V0IGRlbGltaXRlcnMuIEZvciBleGFtcGxlOgorCisgICAgICAgICBwY3JlMmdyZXAgVGh1cnNkYXkgL2V0Yy9tb3RkCisKKyAgICAgICBJZiB5b3UgYXR0ZW1wdCB0byB1c2UgZGVsaW1pdGVycyAoZm9yIGV4YW1wbGUsIGJ5IHN1cnJvdW5kaW5nIGEgcGF0dGVybgorICAgICAgIHdpdGggc2xhc2hlcywgYXMgaXMgY29tbW9uIGluIFBlcmwgc2NyaXB0cyksIHRoZXkgIGFyZSAgaW50ZXJwcmV0ZWQgIGFzCisgICAgICAgcGFydCAgb2YgIHRoZSBwYXR0ZXJuLiBRdW90ZXMgY2FuIG9mIGNvdXJzZSBiZSB1c2VkIHRvIGRlbGltaXQgcGF0dGVybnMKKyAgICAgICBvbiB0aGUgY29tbWFuZCBsaW5lIGJlY2F1c2UgdGhleSBhcmUgIGludGVycHJldGVkICBieSAgdGhlICBzaGVsbCwgIGFuZAorICAgICAgIGluZGVlZCAgcXVvdGVzICBhcmUgcmVxdWlyZWQgaWYgYSBwYXR0ZXJuIGNvbnRhaW5zIHdoaXRlIHNwYWNlIG9yIHNoZWxsCisgICAgICAgbWV0YWNoYXJhY3RlcnMuCisKKyAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgdGhhdCBmb2xsb3dzIGFueSBvcHRpb24gc2V0dGluZ3MgaXMgdHJlYXRlZCAgYXMgIHRoZQorICAgICAgIHNpbmdsZSAgcGF0dGVybiAgdG8gYmUgbWF0Y2hlZCB3aGVuIG5laXRoZXIgLWUgbm9yIC1mIGlzIHByZXNlbnQuICBDb24tCisgICAgICAgdmVyc2VseSwgd2hlbiBvbmUgb3IgYm90aCBvZiB0aGVzZSBvcHRpb25zIGFyZSAgdXNlZCAgdG8gIHNwZWNpZnkgIHBhdC0KKyAgICAgICB0ZXJucywgYWxsIGFyZ3VtZW50cyBhcmUgdHJlYXRlZCBhcyBwYXRoIG5hbWVzLiBBdCBsZWFzdCBvbmUgb2YgLWUsIC1mLAorICAgICAgIG9yIGFuIGFyZ3VtZW50IHBhdHRlcm4gbXVzdCBiZSBwcm92aWRlZC4KKworICAgICAgIElmIG5vIGZpbGVzIGFyZSBzcGVjaWZpZWQsIHBjcmUyZ3JlcCAgcmVhZHMgIHRoZSAgc3RhbmRhcmQgIGlucHV0LiAgVGhlCisgICAgICAgc3RhbmRhcmQgIGlucHV0IGNhbiBhbHNvIGJlIHJlZmVyZW5jZWQgYnkgYSBuYW1lIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUKKyAgICAgICBoeXBoZW4uICBGb3IgZXhhbXBsZToKKworICAgICAgICAgcGNyZTJncmVwIHNvbWUtcGF0dGVybiBmaWxlMSAtIGZpbGUzCisKKyAgICAgICBJbnB1dCBmaWxlcyBhcmUgc2VhcmNoZWQgbGluZSBieSAgbGluZS4gIEJ5ICBkZWZhdWx0LCAgZWFjaCAgbGluZSAgdGhhdAorICAgICAgIG1hdGNoZXMgIGEgIHBhdHRlcm4gIGlzICBjb3BpZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCwgYW5kIGlmIHRoZXJlIGlzCisgICAgICAgbW9yZSB0aGFuIG9uZSBmaWxlLCB0aGUgZmlsZSBuYW1lIGlzIG91dHB1dCBhdCB0aGUgc3RhcnQgb2YgZWFjaCAgbGluZSwKKyAgICAgICBmb2xsb3dlZCAgYnkgIGEgIGNvbG9uLiAgSG93ZXZlciwgdGhlcmUgYXJlIG9wdGlvbnMgdGhhdCBjYW4gY2hhbmdlIGhvdworICAgICAgIHBjcmUyZ3JlcCBiZWhhdmVzLiBJbiBwYXJ0aWN1bGFyLCB0aGUgLU0gb3B0aW9uIG1ha2VzICBpdCAgcG9zc2libGUgIHRvCisgICAgICAgc2VhcmNoICBmb3IgIHN0cmluZ3MgIHRoYXQgIHNwYW4gIGxpbmUgIGJvdW5kYXJpZXMuIFdoYXQgZGVmaW5lcyBhIGxpbmUKKyAgICAgICBib3VuZGFyeSBpcyBjb250cm9sbGVkIGJ5IHRoZSAtTiAoLS1uZXdsaW5lKSBvcHRpb24uCisKKyAgICAgICBUaGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGZvciBidWZmZXJpbmcgZmlsZXMgdGhhdCBhcmUgYmVpbmcgc2Nhbm5lZCBpcworICAgICAgIGNvbnRyb2xsZWQgIGJ5IGEgcGFyYW1ldGVyIHRoYXQgY2FuIGJlIHNldCBieSB0aGUgLS1idWZmZXItc2l6ZSBvcHRpb24uCisgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIGlzICBzcGVjaWZpZWQgIHdoZW4gIHBjcmUyZ3JlcCAgaXMKKyAgICAgICBidWlsdCwgIHdpdGggIHRoZSAgZGVmYXVsdCAgZGVmYXVsdCAgYmVpbmcgMjBLLiBBIGJsb2NrIG9mIG1lbW9yeSB0aHJlZQorICAgICAgIHRpbWVzIHRoaXMgc2l6ZSBpcyB1c2VkICh0byBhbGxvdyBmb3IgYnVmZmVyaW5nICAiYmVmb3JlIiAgYW5kICAiYWZ0ZXIiCisgICAgICAgbGluZXMpLiBBbiBlcnJvciBvY2N1cnMgaWYgYSBsaW5lIG92ZXJmbG93cyB0aGUgYnVmZmVyLgorCisgICAgICAgUGF0dGVybnMgIGNhbiAgYmUgIG5vICBsb25nZXIgdGhhbiA4SyBvciBCVUZTSVogYnl0ZXMsIHdoaWNoZXZlciBpcyB0aGUKKyAgICAgICBncmVhdGVyLiAgQlVGU0laIGlzIGRlZmluZWQgaW4gPHN0ZGlvLmg+LiBXaGVuIHRoZXJlIGlzIG1vcmUgIHRoYW4gIG9uZQorICAgICAgIHBhdHRlcm4gKHNwZWNpZmllZCBieSB0aGUgdXNlIG9mIC1lIGFuZC9vciAtZiksIGVhY2ggcGF0dGVybiBpcyBhcHBsaWVkCisgICAgICAgdG8gZWFjaCBsaW5lIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBkZWZpbmVkLCAgZXhjZXB0ICB0aGF0ICBhbGwKKyAgICAgICB0aGUgLWUgcGF0dGVybnMgYXJlIHRyaWVkIGJlZm9yZSB0aGUgLWYgcGF0dGVybnMuCisKKyAgICAgICBCeSAgZGVmYXVsdCwgYXMgc29vbiBhcyBvbmUgcGF0dGVybiBtYXRjaGVzIGEgbGluZSwgbm8gZnVydGhlciBwYXR0ZXJucworICAgICAgIGFyZSBjb25zaWRlcmVkLiBIb3dldmVyLCBpZiAtLWNvbG91ciAob3IgLS1jb2xvcikgaXMgdXNlZCB0byBjb2xvdXIgdGhlCisgICAgICAgbWF0Y2hpbmcgIHN1YnN0cmluZ3MsIG9yIGlmIC0tb25seS1tYXRjaGluZywgLS1maWxlLW9mZnNldHMsIG9yIC0tbGluZS0KKyAgICAgICBvZmZzZXRzIGlzIHVzZWQgdG8gb3V0cHV0IG9ubHkgIHRoZSAgcGFydCAgb2YgIHRoZSAgbGluZSAgdGhhdCAgbWF0Y2hlZAorICAgICAgIChlaXRoZXIgc2hvd24gbGl0ZXJhbGx5LCBvciBhcyBhbiBvZmZzZXQpLCBzY2FubmluZyByZXN1bWVzIGltbWVkaWF0ZWx5CisgICAgICAgZm9sbG93aW5nIHRoZSBtYXRjaCwgc28gdGhhdCBmdXJ0aGVyIG1hdGNoZXMgb24gdGhlIHNhbWUgIGxpbmUgIGNhbiAgYmUKKyAgICAgICBmb3VuZC4gIElmICB0aGVyZSAgYXJlICBtdWx0aXBsZSAgcGF0dGVybnMsICB0aGV5ICBhcmUgYWxsIHRyaWVkIG9uIHRoZQorICAgICAgIHJlbWFpbmRlciBvZiB0aGUgbGluZSwgYnV0IHBhdHRlcm5zIHRoYXQgZm9sbG93IHRoZSAgb25lICB0aGF0ICBtYXRjaGVkCisgICAgICAgYXJlIG5vdCB0cmllZCBvbiB0aGUgZWFybGllciBwYXJ0IG9mIHRoZSBsaW5lLgorCisgICAgICAgVGhpcyAgYmVoYXZpb3VyICBtZWFucyAgdGhhdCAgdGhlICBvcmRlciBpbiB3aGljaCBtdWx0aXBsZSBwYXR0ZXJucyBhcmUKKyAgICAgICBzcGVjaWZpZWQgY2FuIGFmZmVjdCB0aGUgb3V0cHV0IHdoZW4gb25lIG9mIHRoZSBhYm92ZSBvcHRpb25zIGlzICB1c2VkLgorICAgICAgIFRoaXMgIGlzIG5vIGxvbmdlciB0aGUgc2FtZSBiZWhhdmlvdXIgYXMgR05VIGdyZXAsIHdoaWNoIG5vdyBtYW5hZ2VzIHRvCisgICAgICAgZGlzcGxheSBlYXJsaWVyIG1hdGNoZXMgZm9yIGxhdGVyIHBhdHRlcm5zIChhcyAgbG9uZyAgYXMgIHRoZXJlICBpcyAgbm8KKyAgICAgICBvdmVybGFwKS4KKworICAgICAgIFBhdHRlcm5zICB0aGF0IGNhbiBtYXRjaCBhbiBlbXB0eSBzdHJpbmcgYXJlIGFjY2VwdGVkLCBidXQgZW1wdHkgc3RyaW5nCisgICAgICAgbWF0Y2hlcyAgIGFyZSAgIG5ldmVyICAgcmVjb2duaXplZC4gICBBbiAgIGV4YW1wbGUgICBpcyAgIHRoZSAgIHBhdHRlcm4KKyAgICAgICAiKHN1cGVyKT8obWFuKT8iLCAgaW4gIHdoaWNoICBhbGwgY29tcG9uZW50cyBhcmUgb3B0aW9uYWwuIFRoaXMgcGF0dGVybgorICAgICAgIGZpbmRzIGFsbCBvY2N1cnJlbmNlcyBvZiBib3RoICJzdXBlciIgYW5kICAibWFuIjsgIHRoZSAgb3V0cHV0ICBkaWZmZXJzCisgICAgICAgZnJvbSAgbWF0Y2hpbmcgIHdpdGggICJzdXBlcnxtYW4iIHdoZW4gb25seSB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5ncyBhcmUKKyAgICAgICBiZWluZyBzaG93bi4KKworICAgICAgIElmIHRoZSBMQ19BTEwgb3IgTENfQ1RZUEUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCAgcGNyZTJncmVwICB1c2VzCisgICAgICAgdGhlIHZhbHVlIHRvIHNldCBhIGxvY2FsZSB3aGVuIGNhbGxpbmcgdGhlIFBDUkUyIGxpYnJhcnkuICBUaGUgLS1sb2NhbGUKKyAgICAgICBvcHRpb24gY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhpcy4KKworCitTVVBQT1JUIEZPUiBDT01QUkVTU0VEIEZJTEVTCisKKyAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBjb21waWxlIHBjcmUyZ3JlcCBzbyB0aGF0IGl0IHVzZXMgbGlieiBvciAgbGliYnoyICB0bworICAgICAgIHJlYWQgIGZpbGVzICB3aG9zZSBuYW1lcyBlbmQgaW4gLmd6IG9yIC5iejIsIHJlc3BlY3RpdmVseS4gWW91IGNhbiBmaW5kCisgICAgICAgb3V0IHdoZXRoZXIgeW91ciBiaW5hcnkgaGFzIHN1cHBvcnQgZm9yIG9uZSBvciBib3RoIG9mIHRoZXNlIGZpbGUgdHlwZXMKKyAgICAgICBieSBydW5uaW5nIGl0IHdpdGggdGhlIC0taGVscCBvcHRpb24uIElmIHRoZSBhcHByb3ByaWF0ZSBzdXBwb3J0IGlzIG5vdAorICAgICAgIHByZXNlbnQsIGZpbGVzIGFyZSB0cmVhdGVkIGFzIHBsYWluIHRleHQuIFRoZSBzdGFuZGFyZCBpbnB1dCBpcyAgYWx3YXlzCisgICAgICAgc28gdHJlYXRlZC4KKworCitCSU5BUlkgRklMRVMKKworICAgICAgIEJ5ICBkZWZhdWx0LCAgYSAgZmlsZSB0aGF0IGNvbnRhaW5zIGEgYmluYXJ5IHplcm8gYnl0ZSB3aXRoaW4gdGhlIGZpcnN0CisgICAgICAgMTAyNCBieXRlcyBpcyBpZGVudGlmaWVkIGFzIGEgYmluYXJ5IGZpbGUsIGFuZCBpcyBwcm9jZXNzZWQgIHNwZWNpYWxseS4KKyAgICAgICAoR05VICBncmVwICBhbHNvICBpZGVudGlmaWVzICBiaW5hcnkgIGZpbGVzICBpbiAgdGhpcyAgbWFubmVyLikgU2VlIHRoZQorICAgICAgIC0tYmluYXJ5LWZpbGVzIG9wdGlvbiBmb3IgYSBtZWFucyBvZiBjaGFuZ2luZyB0aGUgd2F5IGJpbmFyeSBmaWxlcyAgYXJlCisgICAgICAgaGFuZGxlZC4KKworCitPUFRJT05TCisKKyAgICAgICBUaGUgIG9yZGVyICBpbiAgd2hpY2ggc29tZSBvZiB0aGUgb3B0aW9ucyBhcHBlYXIgY2FuIGFmZmVjdCB0aGUgb3V0cHV0LgorICAgICAgIEZvciBleGFtcGxlLCBib3RoIHRoZSAtaCBhbmQgLWwgb3B0aW9ucyBhZmZlY3QgIHRoZSAgcHJpbnRpbmcgIG9mICBmaWxlCisgICAgICAgbmFtZXMuICBXaGljaGV2ZXIgIGNvbWVzIGxhdGVyIGluIHRoZSBjb21tYW5kIGxpbmUgd2lsbCBiZSB0aGUgb25lIHRoYXQKKyAgICAgICB0YWtlcyBlZmZlY3QuIFNpbWlsYXJseSwgZXhjZXB0IHdoZXJlIG5vdGVkICBiZWxvdywgIGlmICBhbiAgb3B0aW9uICBpcworICAgICAgIGdpdmVuICB0d2ljZSwgIHRoZSAgbGF0ZXIgc2V0dGluZyBpcyB1c2VkLiBOdW1lcmljYWwgdmFsdWVzIGZvciBvcHRpb25zCisgICAgICAgbWF5IGJlIGZvbGxvd2VkIGJ5IEsgIG9yICBNLCAgdG8gIHNpZ25pZnkgIG11bHRpcGxpY2F0aW9uICBieSAgMTAyNCAgb3IKKyAgICAgICAxMDI0KjEwMjQgcmVzcGVjdGl2ZWx5LgorCisgICAgICAgLS0gICAgICAgIFRoaXMgdGVybWluYXRlcyB0aGUgbGlzdCBvZiBvcHRpb25zLiBJdCBpcyB1c2VmdWwgaWYgdGhlIG5leHQKKyAgICAgICAgICAgICAgICAgaXRlbSBvbiB0aGUgY29tbWFuZCBsaW5lIHN0YXJ0cyB3aXRoIGEgaHlwaGVuIGJ1dCBpcyAgbm90ICBhbgorICAgICAgICAgICAgICAgICBvcHRpb24uICBUaGlzICBhbGxvd3MgZm9yIHRoZSBwcm9jZXNzaW5nIG9mIHBhdHRlcm5zIGFuZCBmaWxlCisgICAgICAgICAgICAgICAgIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBoeXBoZW5zLgorCisgICAgICAgLUEgbnVtYmVyLCAtLWFmdGVyLWNvbnRleHQ9bnVtYmVyCisgICAgICAgICAgICAgICAgIE91dHB1dCBudW1iZXIgbGluZXMgb2YgY29udGV4dCBhZnRlciBlYWNoIG1hdGNoaW5nICBsaW5lLiAgSWYKKyAgICAgICAgICAgICAgICAgZmlsZSAgbmFtZXMgIGFuZC9vciAgbGluZSAgbnVtYmVycyBhcmUgYmVpbmcgb3V0cHV0LCBhIGh5cGhlbgorICAgICAgICAgICAgICAgICBzZXBhcmF0b3IgaXMgdXNlZCBpbnN0ZWFkIG9mIGEgY29sb24gZm9yIHRoZSBjb250ZXh0IGxpbmVzLiBBCisgICAgICAgICAgICAgICAgIGxpbmUgIGNvbnRhaW5pbmcgICItLSIgaXMgb3V0cHV0IGJldHdlZW4gZWFjaCBncm91cCBvZiBsaW5lcywKKyAgICAgICAgICAgICAgICAgdW5sZXNzIHRoZXkgYXJlIGluIGZhY3QgY29udGlndW91cyBpbiAgdGhlICBpbnB1dCAgZmlsZS4gIFRoZQorICAgICAgICAgICAgICAgICB2YWx1ZSAgb2YgbnVtYmVyIGlzIGV4cGVjdGVkIHRvIGJlIHJlbGF0aXZlbHkgc21hbGwuIEhvd2V2ZXIsCisgICAgICAgICAgICAgICAgIHBjcmUyZ3JlcCBndWFyYW50ZWVzIHRvIGhhdmUgIHVwICB0byAgOEsgIG9mICBmb2xsb3dpbmcgIHRleHQKKyAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIGZvciBjb250ZXh0IG91dHB1dC4KKworICAgICAgIC1hLCAtLXRleHQKKyAgICAgICAgICAgICAgICAgVHJlYXQgIGJpbmFyeSAgZmlsZXMgYXMgdGV4dC4gVGhpcyBpcyBlcXVpdmFsZW50IHRvIC0tYmluYXJ5LQorICAgICAgICAgICAgICAgICBmaWxlcz10ZXh0LgorCisgICAgICAgLUIgbnVtYmVyLCAtLWJlZm9yZS1jb250ZXh0PW51bWJlcgorICAgICAgICAgICAgICAgICBPdXRwdXQgbnVtYmVyIGxpbmVzIG9mIGNvbnRleHQgYmVmb3JlIGVhY2ggbWF0Y2hpbmcgbGluZS4gIElmCisgICAgICAgICAgICAgICAgIGZpbGUgIG5hbWVzICBhbmQvb3IgIGxpbmUgIG51bWJlcnMgYXJlIGJlaW5nIG91dHB1dCwgYSBoeXBoZW4KKyAgICAgICAgICAgICAgICAgc2VwYXJhdG9yIGlzIHVzZWQgaW5zdGVhZCBvZiBhIGNvbG9uIGZvciB0aGUgY29udGV4dCBsaW5lcy4gQQorICAgICAgICAgICAgICAgICBsaW5lICBjb250YWluaW5nICAiLS0iIGlzIG91dHB1dCBiZXR3ZWVuIGVhY2ggZ3JvdXAgb2YgbGluZXMsCisgICAgICAgICAgICAgICAgIHVubGVzcyB0aGV5IGFyZSBpbiBmYWN0IGNvbnRpZ3VvdXMgaW4gIHRoZSAgaW5wdXQgIGZpbGUuICBUaGUKKyAgICAgICAgICAgICAgICAgdmFsdWUgIG9mIG51bWJlciBpcyBleHBlY3RlZCB0byBiZSByZWxhdGl2ZWx5IHNtYWxsLiBIb3dldmVyLAorICAgICAgICAgICAgICAgICBwY3JlMmdyZXAgZ3VhcmFudGVlcyB0byBoYXZlICB1cCAgdG8gIDhLICBvZiAgcHJlY2VkaW5nICB0ZXh0CisgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSBmb3IgY29udGV4dCBvdXRwdXQuCisKKyAgICAgICAtLWJpbmFyeS1maWxlcz13b3JkCisgICAgICAgICAgICAgICAgIFNwZWNpZnkgIGhvdyBiaW5hcnkgZmlsZXMgYXJlIHRvIGJlIHByb2Nlc3NlZC4gSWYgdGhlIHdvcmQgaXMKKyAgICAgICAgICAgICAgICAgImJpbmFyeSIgKHRoZSBkZWZhdWx0KSwgIHBhdHRlcm4gIG1hdGNoaW5nICBpcyAgcGVyZm9ybWVkICBvbgorICAgICAgICAgICAgICAgICBiaW5hcnkgIGZpbGVzLCAgYnV0ICB0aGUgIG9ubHkgIG91dHB1dCBpcyAiQmluYXJ5IGZpbGUgPG5hbWU+CisgICAgICAgICAgICAgICAgIG1hdGNoZXMiIHdoZW4gYSBtYXRjaCBzdWNjZWVkcy4gSWYgdGhlIHdvcmQgaXMgInRleHQiLCAgd2hpY2gKKyAgICAgICAgICAgICAgICAgaXMgIGVxdWl2YWxlbnQgIHRvICB0aGUgLWEgb3IgLS10ZXh0IG9wdGlvbiwgYmluYXJ5IGZpbGVzIGFyZQorICAgICAgICAgICAgICAgICBwcm9jZXNzZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGFueSBvdGhlciBmaWxlLiAgSW4gIHRoaXMgIGNhc2UsCisgICAgICAgICAgICAgICAgIHdoZW4gIGEgIG1hdGNoICBzdWNjZWVkcywgIHRoZSAgb3V0cHV0IG1heSBiZSBiaW5hcnkgZ2FyYmFnZSwKKyAgICAgICAgICAgICAgICAgd2hpY2ggY2FuIGhhdmUgbmFzdHkgZWZmZWN0cyBpZiBzZW50IHRvIGEgIHRlcm1pbmFsLiAgSWYgIHRoZQorICAgICAgICAgICAgICAgICB3b3JkICBpcyAgIndpdGhvdXQtbWF0Y2giLCAgd2hpY2ggIGlzICBlcXVpdmFsZW50ICB0byAgdGhlIC1JCisgICAgICAgICAgICAgICAgIG9wdGlvbiwgYmluYXJ5IGZpbGVzIGFyZSAgbm90ICBwcm9jZXNzZWQgIGF0ICBhbGw7ICB0aGV5ICBhcmUKKyAgICAgICAgICAgICAgICAgYXNzdW1lZCBub3QgdG8gYmUgb2YgaW50ZXJlc3QgYW5kIGFyZSBza2lwcGVkIHdpdGhvdXQgY2F1c2luZworICAgICAgICAgICAgICAgICBhbnkgb3V0cHV0IG9yIGFmZmVjdGluZyB0aGUgcmV0dXJuIGNvZGUuCisKKyAgICAgICAtLWJ1ZmZlci1zaXplPW51bWJlcgorICAgICAgICAgICAgICAgICBTZXQgdGhlIHBhcmFtZXRlciB0aGF0IGNvbnRyb2xzIGhvdyBtdWNoIG1lbW9yeSBpcyAgdXNlZCAgZm9yCisgICAgICAgICAgICAgICAgIGJ1ZmZlcmluZyBmaWxlcyB0aGF0IGFyZSBiZWluZyBzY2FubmVkLgorCisgICAgICAgLUMgbnVtYmVyLCAtLWNvbnRleHQ9bnVtYmVyCisgICAgICAgICAgICAgICAgIE91dHB1dCAgbnVtYmVyICBsaW5lcyAgb2YgIGNvbnRleHQgYm90aCBiZWZvcmUgYW5kIGFmdGVyIGVhY2gKKyAgICAgICAgICAgICAgICAgbWF0Y2hpbmcgbGluZS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzZXR0aW5nIGJvdGggLUEgYW5kICAtQgorICAgICAgICAgICAgICAgICB0byB0aGUgc2FtZSB2YWx1ZS4KKworICAgICAgIC1jLCAtLWNvdW50CisgICAgICAgICAgICAgICAgIERvICBub3QgIG91dHB1dCAgbGluZXMgZnJvbSB0aGUgZmlsZXMgdGhhdCBhcmUgYmVpbmcgc2Nhbm5lZDsKKyAgICAgICAgICAgICAgICAgaW5zdGVhZCBvdXRwdXQgdGhlIG51bWJlciBvZiBtYXRjaGVzIChvciBub24tbWF0Y2hlcyBpZiAtdiBpcworICAgICAgICAgICAgICAgICB1c2VkKSAgdGhhdCB3b3VsZCBvdGhlcndpc2UgaGF2ZSBjYXVzZWQgbGluZXMgdG8gYmUgc2hvd24uIEJ5CisgICAgICAgICAgICAgICAgIGRlZmF1bHQsIHRoaXMgY291bnQgaXMgdGhlIHNhbWUgYXMgdGhlIG51bWJlciAgb2YgIHN1cHByZXNzZWQKKyAgICAgICAgICAgICAgICAgbGluZXMsIGJ1dCBpZiB0aGUgLU0gKG11bHRpbGluZSkgb3B0aW9uIGlzIHVzZWQgKHdpdGhvdXQgLXYpLAorICAgICAgICAgICAgICAgICB0aGVyZSBtYXkgIGJlICBtb3JlICBzdXBwcmVzc2VkICBsaW5lcyAgdGhhbiAgdGhlICBudW1iZXIgIG9mCisgICAgICAgICAgICAgICAgIG1hdGNoZXMuCisKKyAgICAgICAgICAgICAgICAgSWYgIG5vIGxpbmVzIGFyZSBzZWxlY3RlZCwgdGhlIG51bWJlciB6ZXJvIGlzIG91dHB1dC4gSWYgc2V2LQorICAgICAgICAgICAgICAgICBlcmFsIGZpbGVzIGFyZSBhcmUgYmVpbmcgc2Nhbm5lZCwgYSBjb3VudCBpcyBvdXRwdXQgZm9yICBlYWNoCisgICAgICAgICAgICAgICAgIG9mICB0aGVtLiBIb3dldmVyLCBpZiB0aGUgLS1maWxlcy13aXRoLW1hdGNoZXMgb3B0aW9uIGlzIGFsc28KKyAgICAgICAgICAgICAgICAgdXNlZCwgb25seSB0aG9zZSBmaWxlcyB3aG9zZSBjb3VudHMgYXJlIGdyZWF0ZXIgdGhhbiB6ZXJvIGFyZQorICAgICAgICAgICAgICAgICBsaXN0ZWQuICBXaGVuICAtYyAgaXMgIHVzZWQsICB0aGUgIC1BLCAtQiwgYW5kIC1DIG9wdGlvbnMgYXJlCisgICAgICAgICAgICAgICAgIGlnbm9yZWQuCisKKyAgICAgICAtLWNvbG91ciwgLS1jb2xvcgorICAgICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBnaXZlbiB3aXRob3V0IGFueSBkYXRhLCBpdCBpcyBlcXVpdmFsZW50IHRvCisgICAgICAgICAgICAgICAgICItLWNvbG91cj1hdXRvIi4gICBJZiAgZGF0YSAgaXMgcmVxdWlyZWQsIGl0IG11c3QgYmUgZ2l2ZW4gaW4KKyAgICAgICAgICAgICAgICAgdGhlIHNhbWUgc2hlbGwgaXRlbSwgc2VwYXJhdGVkIGJ5IGFuIGVxdWFscyBzaWduLgorCisgICAgICAgLS1jb2xvdXI9dmFsdWUsIC0tY29sb3I9dmFsdWUKKyAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gc3BlY2lmaWVzIHVuZGVyIHdoYXQgY2lyY3Vtc3RhbmNlcyB0aGUgcGFydHMgb2YgYQorICAgICAgICAgICAgICAgICBsaW5lIHRoYXQgbWF0Y2hlZCBhIHBhdHRlcm4gc2hvdWxkIGJlIGNvbG91cmVkIGluIHRoZSBvdXRwdXQuCisgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBvdXRwdXQgaXMgbm90IGNvbG91cmVkLiBUaGUgdmFsdWUgICh3aGljaCAgaXMKKyAgICAgICAgICAgICAgICAgb3B0aW9uYWwsICBzZWUgYWJvdmUpIG1heSBiZSAibmV2ZXIiLCAiYWx3YXlzIiwgb3IgImF1dG8iLiBJbgorICAgICAgICAgICAgICAgICB0aGUgbGF0dGVyIGNhc2UsIGNvbG91cmluZyBoYXBwZW5zIG9ubHkgaWYgdGhlIHN0YW5kYXJkICBvdXQtCisgICAgICAgICAgICAgICAgIHB1dCAgaXMgY29ubmVjdGVkIHRvIGEgdGVybWluYWwuIE1vcmUgcmVzb3VyY2VzIGFyZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgY29sb3VyaW5nIGlzIGVuYWJsZWQsIGJlY2F1c2UgcGNyZTJncmVwIGhhcyB0byBzZWFyY2ggZm9yIGFsbAorICAgICAgICAgICAgICAgICBwb3NzaWJsZSAgbWF0Y2hlcyBpbiBhIGxpbmUsIG5vdCBqdXN0IG9uZSwgaW4gb3JkZXIgdG8gY29sb3VyCisgICAgICAgICAgICAgICAgIHRoZW0gYWxsLgorCisgICAgICAgICAgICAgICAgIFRoZSBjb2xvdXIgdGhhdCBpcyB1c2VkIGNhbiBiZSBzcGVjaWZpZWQgYnkgc2V0dGluZyB0aGUgZW52aS0KKyAgICAgICAgICAgICAgICAgcm9ubWVudCAgdmFyaWFibGUgIFBDUkUyR1JFUF9DT0xPVVIgIG9yICBQQ1JFMkdSRVBfQ09MT1IuIFRoZQorICAgICAgICAgICAgICAgICB2YWx1ZSBvZiB0aGlzIHZhcmlhYmxlIHNob3VsZCBiZSBhICBzdHJpbmcgIG9mICB0d28gIG51bWJlcnMsCisgICAgICAgICAgICAgICAgIHNlcGFyYXRlZCAgYnkgIGEgc2VtaWNvbG9uLiBUaGV5IGFyZSBjb3BpZWQgZGlyZWN0bHkgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgY29udHJvbCBzdHJpbmcgZm9yIHNldHRpbmcgY29sb3VyIG9uIGEgIHRlcm1pbmFsLCAgc28gIGl0ICBpcworICAgICAgICAgICAgICAgICB5b3VyICByZXNwb25zaWJpbGl0eSAgdG8gZW5zdXJlIHRoYXQgdGhleSBtYWtlIHNlbnNlLiBJZiBuZWktCisgICAgICAgICAgICAgICAgIHRoZXIgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyAgaXMgIHNldCwgIHRoZSAgZGVmYXVsdCAgaXMKKyAgICAgICAgICAgICAgICAgIjE7MzEiLCB3aGljaCBnaXZlcyByZWQuCisKKyAgICAgICAtRCBhY3Rpb24sIC0tZGV2aWNlcz1hY3Rpb24KKyAgICAgICAgICAgICAgICAgSWYgIGFuICBpbnB1dCAgcGF0aCAgaXMgIG5vdCAgYSAgcmVndWxhciBmaWxlIG9yIGEgZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAiYWN0aW9uIiBzcGVjaWZpZXMgaG93IGl0IGlzIHRvIGJlICBwcm9jZXNzZWQuICBWYWxpZCAgdmFsdWVzCisgICAgICAgICAgICAgICAgIGFyZSAicmVhZCIgKHRoZSBkZWZhdWx0KSBvciAic2tpcCIgKHNpbGVudGx5IHNraXAgdGhlIHBhdGgpLgorCisgICAgICAgLWQgYWN0aW9uLCAtLWRpcmVjdG9yaWVzPWFjdGlvbgorICAgICAgICAgICAgICAgICBJZiBhbiBpbnB1dCBwYXRoIGlzIGEgZGlyZWN0b3J5LCAiYWN0aW9uIiBzcGVjaWZpZXMgaG93IGl0IGlzCisgICAgICAgICAgICAgICAgIHRvIGJlIHByb2Nlc3NlZC4gIFZhbGlkIHZhbHVlcyBhcmUgICJyZWFkIiAgKHRoZSAgZGVmYXVsdCAgaW4KKyAgICAgICAgICAgICAgICAgbm9uLVdpbmRvd3MgIGVudmlyb25tZW50cywgIGZvciBjb21wYXRpYmlsaXR5IHdpdGggR05VIGdyZXApLAorICAgICAgICAgICAgICAgICAicmVjdXJzZSIgKGVxdWl2YWxlbnQgdG8gdGhlIC1yIG9wdGlvbiksIG9yICJza2lwIiAgKHNpbGVudGx5CisgICAgICAgICAgICAgICAgIHNraXAgIHRoZSAgcGF0aCwgdGhlIGRlZmF1bHQgaW4gV2luZG93cyBlbnZpcm9ubWVudHMpLiBJbiB0aGUKKyAgICAgICAgICAgICAgICAgInJlYWQiIGNhc2UsIGRpcmVjdG9yaWVzIGFyZSByZWFkIGFzIGlmICB0aGV5ICB3ZXJlICBvcmRpbmFyeQorICAgICAgICAgICAgICAgICBmaWxlcy4gIEluICBzb21lICBvcGVyYXRpbmcgIHN5c3RlbXMgIHRoZSBlZmZlY3Qgb2YgcmVhZGluZyBhCisgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSBsaWtlIHRoaXMgaXMgYW4gaW1tZWRpYXRlIGVuZC1vZi1maWxlOyBpbiBvdGhlcnMgaXQKKyAgICAgICAgICAgICAgICAgbWF5IHByb3Zva2UgYW4gZXJyb3IuCisKKyAgICAgICAtZSBwYXR0ZXJuLCAtLXJlZ2V4PXBhdHRlcm4sIC0tcmVnZXhwPXBhdHRlcm4KKyAgICAgICAgICAgICAgICAgU3BlY2lmeSBhIHBhdHRlcm4gdG8gYmUgbWF0Y2hlZC4gVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgbXVsLQorICAgICAgICAgICAgICAgICB0aXBsZSB0aW1lcyBpbiBvcmRlciB0byBzcGVjaWZ5IHNldmVyYWwgcGF0dGVybnMuIEl0IGNhbiBhbHNvCisgICAgICAgICAgICAgICAgIGJlICB1c2VkICBhcyBhIHdheSBvZiBzcGVjaWZ5aW5nIGEgc2luZ2xlIHBhdHRlcm4gdGhhdCBzdGFydHMKKyAgICAgICAgICAgICAgICAgd2l0aCBhIGh5cGhlbi4gV2hlbiAtZSBpcyB1c2VkLCBubyBhcmd1bWVudCBwYXR0ZXJuIGlzICB0YWtlbgorICAgICAgICAgICAgICAgICBmcm9tICB0aGUgIGNvbW1hbmQgIGxpbmU7ICBhbGwgIGFyZ3VtZW50cyBhcmUgdHJlYXRlZCBhcyBmaWxlCisgICAgICAgICAgICAgICAgIG5hbWVzLiBUaGVyZSBpcyBubyBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIHBhdHRlcm5zLiBUaGV5ICBhcmUKKyAgICAgICAgICAgICAgICAgYXBwbGllZCAgdG8gIGVhY2ggbGluZSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcmUgZGVmaW5lZAorICAgICAgICAgICAgICAgICB1bnRpbCBvbmUgbWF0Y2hlcy4KKworICAgICAgICAgICAgICAgICBJZiAtZiBpcyB1c2VkIHdpdGggLWUsIHRoZSBjb21tYW5kIGxpbmUgcGF0dGVybnMgYXJlICBtYXRjaGVkCisgICAgICAgICAgICAgICAgIGZpcnN0LCBmb2xsb3dlZCBieSB0aGUgcGF0dGVybnMgZnJvbSB0aGUgZmlsZShzKSwgaW5kZXBlbmRlbnQKKyAgICAgICAgICAgICAgICAgb2YgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXNlIG9wdGlvbnMgYXJlIHNwZWNpZmllZC4gTm90ZSAgdGhhdAorICAgICAgICAgICAgICAgICBtdWx0aXBsZSAgdXNlICBvZiAtZSBpcyBub3QgdGhlIHNhbWUgYXMgYSBzaW5nbGUgcGF0dGVybiB3aXRoCisgICAgICAgICAgICAgICAgIGFsdGVybmF0aXZlcy4gRm9yIGV4YW1wbGUsIFh8WSBmaW5kcyB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIGEKKyAgICAgICAgICAgICAgICAgbGluZSAgdGhhdCAgaXMgIFggb3IgWSwgd2hlcmVhcyBpZiB0aGUgdHdvIHBhdHRlcm5zIGFyZSBnaXZlbgorICAgICAgICAgICAgICAgICBzZXBhcmF0ZWx5LCB3aXRoIFggZmlyc3QsIHBjcmUyZ3JlcCBmaW5kcyBYIGlmIGl0IGlzIHByZXNlbnQsCisgICAgICAgICAgICAgICAgIGV2ZW4gaWYgaXQgZm9sbG93cyBZIGluIHRoZSBsaW5lLiBJdCBmaW5kcyBZIG9ubHkgaWYgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICAgbm8gWCBpbiB0aGUgbGluZS4gVGhpcyBtYXR0ZXJzIG9ubHkgaWYgeW91IGFyZSAgdXNpbmcgIC1vICBvcgorICAgICAgICAgICAgICAgICAtLWNvbG8odSlyIHRvIHNob3cgdGhlIHBhcnQocykgb2YgdGhlIGxpbmUgdGhhdCBtYXRjaGVkLgorCisgICAgICAgLS1leGNsdWRlPXBhdHRlcm4KKyAgICAgICAgICAgICAgICAgRmlsZXMgKGJ1dCBub3QgZGlyZWN0b3JpZXMpIHdob3NlIG5hbWVzIG1hdGNoIHRoZSBwYXR0ZXJuIGFyZQorICAgICAgICAgICAgICAgICBza2lwcGVkIHdpdGhvdXQgYmVpbmcgcHJvY2Vzc2VkLiBUaGlzIGFwcGxpZXMgdG8gIGFsbCAgZmlsZXMsCisgICAgICAgICAgICAgICAgIHdoZXRoZXIgIGxpc3RlZCAgb24gIHRoZSAgY29tbWFuZCBsaW5lLCBvYnRhaW5lZCBmcm9tIC0tZmlsZS0KKyAgICAgICAgICAgICAgICAgbGlzdCwgb3IgYnkgc2Nhbm5pbmcgYSBkaXJlY3RvcnkuIFRoZSBwYXR0ZXJuIGlzIGEgUENSRTIgcmVnLQorICAgICAgICAgICAgICAgICB1bGFyICBleHByZXNzaW9uLCAgYW5kIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmluYWwgY29tcG9uZW50CisgICAgICAgICAgICAgICAgIG9mIHRoZSBmaWxlIG5hbWUsIG5vdCB0aGUgZW50aXJlIHBhdGguIFRoZSAgLUYsICAtdywgIGFuZCAgLXgKKyAgICAgICAgICAgICAgICAgb3B0aW9ucyBkbyBub3QgYXBwbHkgdG8gdGhpcyBwYXR0ZXJuLiBUaGUgb3B0aW9uIG1heSBiZSBnaXZlbgorICAgICAgICAgICAgICAgICBhbnkgbnVtYmVyIG9mIHRpbWVzIGluIG9yZGVyIHRvIHNwZWNpZnkgbXVsdGlwbGUgcGF0dGVybnMuIElmCisgICAgICAgICAgICAgICAgIGEgIGZpbGUgIG5hbWUgbWF0Y2hlcyBib3RoIGFuIC0taW5jbHVkZSBhbmQgYW4gLS1leGNsdWRlIHBhdC0KKyAgICAgICAgICAgICAgICAgdGVybiwgaXQgaXMgZXhjbHVkZWQuIFRoZXJlIGlzIG5vIHNob3J0IGZvcm0gZm9yIHRoaXMgb3B0aW9uLgorCisgICAgICAgLS1leGNsdWRlLWZyb209ZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgVHJlYXQgZWFjaCBub24tZW1wdHkgbGluZSBvZiB0aGUgZmlsZSAgYXMgIHRoZSAgZGF0YSAgZm9yICBhbgorICAgICAgICAgICAgICAgICAtLWV4Y2x1ZGUgb3B0aW9uLiBXaGF0IGNvbnN0aXR1dGVzIGEgbmV3bGluZSB3aGVuIHJlYWRpbmcgdGhlCisgICAgICAgICAgICAgICAgIGZpbGUgaXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBkZWZhdWx0LiBUaGUgLS1uZXdsaW5lICBvcHRpb24KKyAgICAgICAgICAgICAgICAgaGFzICBubyAgZWZmZWN0IG9uIHRoaXMgb3B0aW9uLiBUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gbW9yZQorICAgICAgICAgICAgICAgICB0aGFuIG9uY2UgaW4gb3JkZXIgdG8gc3BlY2lmeSBhIG51bWJlciBvZiBmaWxlcyB0byByZWFkLgorCisgICAgICAgLS1leGNsdWRlLWRpcj1wYXR0ZXJuCisgICAgICAgICAgICAgICAgIERpcmVjdG9yaWVzIHdob3NlIG5hbWVzIG1hdGNoIHRoZSBwYXR0ZXJuIGFyZSBza2lwcGVkIHdpdGhvdXQKKyAgICAgICAgICAgICAgICAgYmVpbmcgIHByb2Nlc3NlZCwgIHdoYXRldmVyICB0aGUgIHNldHRpbmcgIG9mIHRoZSAtLXJlY3Vyc2l2ZQorICAgICAgICAgICAgICAgICBvcHRpb24uIFRoaXMgYXBwbGllcyB0byBhbGwgZGlyZWN0b3JpZXMsICB3aGV0aGVyICBsaXN0ZWQgIG9uCisgICAgICAgICAgICAgICAgIHRoZSBjb21tYW5kIGxpbmUsIG9idGFpbmVkIGZyb20gLS1maWxlLWxpc3QsIG9yIGJ5IHNjYW5uaW5nIGEKKyAgICAgICAgICAgICAgICAgcGFyZW50IGRpcmVjdG9yeS4gVGhlIHBhdHRlcm4gaXMgYSBQQ1JFMiByZWd1bGFyICBleHByZXNzaW9uLAorICAgICAgICAgICAgICAgICBhbmQgIGlzICBtYXRjaGVkIGFnYWluc3QgdGhlIGZpbmFsIGNvbXBvbmVudCBvZiB0aGUgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgIG5hbWUsIG5vdCB0aGUgZW50aXJlIHBhdGguIFRoZSAtRiwgLXcsIGFuZCAteCBvcHRpb25zIGRvICBub3QKKyAgICAgICAgICAgICAgICAgYXBwbHkgIHRvIHRoaXMgcGF0dGVybi4gVGhlIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gYW55IG51bWJlciBvZgorICAgICAgICAgICAgICAgICB0aW1lcyBpbiBvcmRlciB0byBzcGVjaWZ5IG1vcmUgdGhhbiBvbmUgcGF0dGVybi4gSWYgYSAgZGlyZWMtCisgICAgICAgICAgICAgICAgIHRvcnkgIG1hdGNoZXMgIGJvdGggIC0taW5jbHVkZS1kaXIgIGFuZCAgLS1leGNsdWRlLWRpciwgaXQgaXMKKyAgICAgICAgICAgICAgICAgZXhjbHVkZWQuIFRoZXJlIGlzIG5vIHNob3J0IGZvcm0gZm9yIHRoaXMgb3B0aW9uLgorCisgICAgICAgLUYsIC0tZml4ZWQtc3RyaW5ncworICAgICAgICAgICAgICAgICBJbnRlcnByZXQgZWFjaCBkYXRhLW1hdGNoaW5nICBwYXR0ZXJuICBhcyAgYSAgbGlzdCAgb2YgIGZpeGVkCisgICAgICAgICAgICAgICAgIHN0cmluZ3MsICBzZXBhcmF0ZWQgIGJ5ICBuZXdsaW5lcywgIGluc3RlYWQgIG9mICBhcyBhIHJlZ3VsYXIKKyAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbi4gV2hhdCBjb25zdGl0dXRlcyBhIG5ld2xpbmUgZm9yICB0aGlzICBwdXJwb3NlICBpcworICAgICAgICAgICAgICAgICBjb250cm9sbGVkICBieSB0aGUgLS1uZXdsaW5lIG9wdGlvbi4gVGhlIC13IChtYXRjaCBhcyBhIHdvcmQpCisgICAgICAgICAgICAgICAgIGFuZCAteCAobWF0Y2ggd2hvbGUgbGluZSkgb3B0aW9ucyBjYW4gYmUgdXNlZCB3aXRoIC1GLiAgIFRoZXkKKyAgICAgICAgICAgICAgICAgYXBwbHkgdG8gZWFjaCBvZiB0aGUgZml4ZWQgc3RyaW5ncy4gQSBsaW5lIGlzIHNlbGVjdGVkIGlmIGFueQorICAgICAgICAgICAgICAgICBvZiB0aGUgZml4ZWQgc3RyaW5ncyBhcmUgZm91bmQgaW4gaXQgKHN1YmplY3QgdG8gLXcgb3IgLXgsIGlmCisgICAgICAgICAgICAgICAgIHByZXNlbnQpLiAgVGhpcyAgb3B0aW9uIGFwcGxpZXMgb25seSB0byB0aGUgcGF0dGVybnMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBjb250ZW50cyBvZiBmaWxlczsgaXQgZG9lcyBub3QgIGFwcGx5ICB0bworICAgICAgICAgICAgICAgICBwYXR0ZXJucyAgc3BlY2lmaWVkICBieSAgYW55ICBvZiAgdGhlICAtLWluY2x1ZGUgb3IgLS1leGNsdWRlCisgICAgICAgICAgICAgICAgIG9wdGlvbnMuCisKKyAgICAgICAtZiBmaWxlbmFtZSwgLS1maWxlPWZpbGVuYW1lCisgICAgICAgICAgICAgICAgIFJlYWQgcGF0dGVybnMgZnJvbSB0aGUgZmlsZSwgb25lIHBlciAgbGluZSwgIGFuZCAgbWF0Y2ggIHRoZW0KKyAgICAgICAgICAgICAgICAgYWdhaW5zdCAgZWFjaCAgbGluZSBvZiBpbnB1dC4gV2hhdCBjb25zdGl0dXRlcyBhIG5ld2xpbmUgd2hlbgorICAgICAgICAgICAgICAgICByZWFkaW5nIHRoZSBmaWxlICBpcyAgdGhlICBvcGVyYXRpbmcgIHN5c3RlbSdzICBkZWZhdWx0LiAgVGhlCisgICAgICAgICAgICAgICAgIC0tbmV3bGluZSBvcHRpb24gaGFzIG5vIGVmZmVjdCBvbiB0aGlzIG9wdGlvbi4gVHJhaWxpbmcgd2hpdGUKKyAgICAgICAgICAgICAgICAgc3BhY2UgaXMgcmVtb3ZlZCBmcm9tIGVhY2ggbGluZSwgYW5kIGJsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLgorICAgICAgICAgICAgICAgICBBbiAgZW1wdHkgIGZpbGUgIGNvbnRhaW5zICBubyAgcGF0dGVybnMgYW5kIHRoZXJlZm9yZSBtYXRjaGVzCisgICAgICAgICAgICAgICAgIG5vdGhpbmcuIFNlZSBhbHNvIHRoZSBjb21tZW50cyBhYm91dCBtdWx0aXBsZSBwYXR0ZXJucyB2ZXJzdXMKKyAgICAgICAgICAgICAgICAgYSAgc2luZ2xlICBwYXR0ZXJuIHdpdGggYWx0ZXJuYXRpdmVzIGluIHRoZSBkZXNjcmlwdGlvbiBvZiAtZQorICAgICAgICAgICAgICAgICBhYm92ZS4KKworICAgICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBnaXZlbiBtb3JlIHRoYW4gIG9uY2UsICBhbGwgIHRoZSAgc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgIGZpbGVzICBhcmUgcmVhZC4gQSBkYXRhIGxpbmUgaXMgb3V0cHV0IGlmIGFueSBvZiB0aGUgcGF0dGVybnMKKyAgICAgICAgICAgICAgICAgbWF0Y2ggaXQuIEEgZmlsZSBuYW1lIGNhbiBiZSBnaXZlbiBhcyAiLSIgIHRvICByZWZlciAgdG8gIHRoZQorICAgICAgICAgICAgICAgICBzdGFuZGFyZCAgaW5wdXQuICBXaGVuICAtZiBpcyB1c2VkLCBwYXR0ZXJucyBzcGVjaWZpZWQgb24gdGhlCisgICAgICAgICAgICAgICAgIGNvbW1hbmQgbGluZSB1c2luZyAtZSBtYXkgYWxzbyBiZSBwcmVzZW50OyAgdGhleSAgYXJlICB0ZXN0ZWQKKyAgICAgICAgICAgICAgICAgYmVmb3JlICB0aGUgIGZpbGUncyAgcGF0dGVybnMuICBIb3dldmVyLCAgbm8gb3RoZXIgcGF0dGVybiBpcworICAgICAgICAgICAgICAgICB0YWtlbiBmcm9tIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBhcmd1bWVudHMgYXJlIHRyZWF0ZWQgYXMgdGhlCisgICAgICAgICAgICAgICAgIG5hbWVzIG9mIHBhdGhzIHRvIGJlIHNlYXJjaGVkLgorCisgICAgICAgLS1maWxlLWxpc3Q9ZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgUmVhZCAgYSAgbGlzdCAgb2YgIGZpbGVzICBhbmQvb3IgIGRpcmVjdG9yaWVzICB0aGF0IGFyZSB0byBiZQorICAgICAgICAgICAgICAgICBzY2FubmVkIGZyb20gdGhlIGdpdmVuIGZpbGUsIG9uZSAgcGVyICBsaW5lLiAgVHJhaWxpbmcgIHdoaXRlCisgICAgICAgICAgICAgICAgIHNwYWNlIGlzIHJlbW92ZWQgZnJvbSBlYWNoIGxpbmUsIGFuZCBibGFuayBsaW5lcyBhcmUgaWdub3JlZC4KKyAgICAgICAgICAgICAgICAgVGhlc2UgcGF0aHMgYXJlIHByb2Nlc3NlZCBiZWZvcmUgYW55IHRoYXQgYXJlIGxpc3RlZCAgb24gIHRoZQorICAgICAgICAgICAgICAgICBjb21tYW5kICBsaW5lLiAgVGhlIGZpbGUgbmFtZSBjYW4gYmUgZ2l2ZW4gYXMgIi0iIHRvIHJlZmVyIHRvCisgICAgICAgICAgICAgICAgIHRoZSBzdGFuZGFyZCBpbnB1dC4gIElmIC0tZmlsZSBhbmQgLS1maWxlLWxpc3QgYXJlIGJvdGggc3BlYy0KKyAgICAgICAgICAgICAgICAgaWZpZWQgIGFzICAiLSIsICBwYXR0ZXJucyBhcmUgcmVhZCBmaXJzdC4gVGhpcyBpcyB1c2VmdWwgb25seQorICAgICAgICAgICAgICAgICB3aGVuIHRoZSBzdGFuZGFyZCBpbnB1dCBpcyBhICB0ZXJtaW5hbCwgIGZyb20gIHdoaWNoICBmdXJ0aGVyCisgICAgICAgICAgICAgICAgIGxpbmVzICAodGhlICBsaXN0ICBvZiBmaWxlcykgY2FuIGJlIHJlYWQgYWZ0ZXIgYW4gZW5kLW9mLWZpbGUKKyAgICAgICAgICAgICAgICAgaW5kaWNhdGlvbi4gSWYgdGhpcyBvcHRpb24gaXMgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UsICBhbGwgIHRoZQorICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgZmlsZXMgYXJlIHJlYWQuCisKKyAgICAgICAtLWZpbGUtb2Zmc2V0cworICAgICAgICAgICAgICAgICBJbnN0ZWFkICBvZiAgc2hvd2luZyBsaW5lcyBvciBwYXJ0cyBvZiBsaW5lcyB0aGF0IG1hdGNoLCBzaG93CisgICAgICAgICAgICAgICAgIGVhY2ggbWF0Y2ggYXMgYW4gb2Zmc2V0IGZyb20gdGhlIHN0YXJ0ICBvZiAgdGhlICBmaWxlICBhbmQgIGEKKyAgICAgICAgICAgICAgICAgbGVuZ3RoLCAgc2VwYXJhdGVkICBieSAgYSAgY29tbWEuIEluIHRoaXMgbW9kZSwgbm8gY29udGV4dCBpcworICAgICAgICAgICAgICAgICBzaG93bi4gVGhhdCBpcywgdGhlIC1BLCAtQiwgYW5kIC1DIG9wdGlvbnMgIGFyZSAgaWdub3JlZC4gIElmCisgICAgICAgICAgICAgICAgIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgbWF0Y2ggaW4gYSBsaW5lLCBlYWNoIG9mIHRoZW0gaXMgc2hvd24KKyAgICAgICAgICAgICAgICAgc2VwYXJhdGVseS4gVGhpcyBvcHRpb24gaXMgbXV0dWFsbHkgIGV4Y2x1c2l2ZSAgd2l0aCAgLS1saW5lLQorICAgICAgICAgICAgICAgICBvZmZzZXRzIGFuZCAtLW9ubHktbWF0Y2hpbmcuCisKKyAgICAgICAtSCwgLS13aXRoLWZpbGVuYW1lCisgICAgICAgICAgICAgICAgIEZvcmNlICB0aGUgIGluY2x1c2lvbiBvZiB0aGUgZmlsZSBuYW1lIGF0IHRoZSBzdGFydCBvZiBvdXRwdXQKKyAgICAgICAgICAgICAgICAgbGluZXMgd2hlbiBzZWFyY2hpbmcgYSBzaW5nbGUgZmlsZS4gQnkgZGVmYXVsdCwgdGhlIGZpbGUgbmFtZQorICAgICAgICAgICAgICAgICBpcyBub3Qgc2hvd24gaW4gdGhpcyBjYXNlLiAgRm9yIG1hdGNoaW5nIGxpbmVzLCB0aGUgZmlsZSBuYW1lCisgICAgICAgICAgICAgICAgIGlzIGZvbGxvd2VkIGJ5IGEgY29sb247IGZvciBjb250ZXh0IGxpbmVzLCBhIGh5cGhlbiBzZXBhcmF0b3IKKyAgICAgICAgICAgICAgICAgaXMgIHVzZWQuICBJZiAgYSBsaW5lIG51bWJlciBpcyBhbHNvIGJlaW5nIG91dHB1dCwgaXQgZm9sbG93cworICAgICAgICAgICAgICAgICB0aGUgZmlsZSBuYW1lLiBXaGVuIHRoZSAtTSBvcHRpb24gY2F1c2VzIGEgcGF0dGVybiAgdG8gIG1hdGNoCisgICAgICAgICAgICAgICAgIG1vcmUgIHRoYW4gIG9uZSAgbGluZSwgb25seSB0aGUgZmlyc3QgaXMgcHJlY2VkZWQgYnkgdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgbmFtZS4KKworICAgICAgIC1oLCAtLW5vLWZpbGVuYW1lCisgICAgICAgICAgICAgICAgIFN1cHByZXNzIHRoZSBvdXRwdXQgZmlsZSBuYW1lcyB3aGVuIHNlYXJjaGluZyBtdWx0aXBsZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAgQnkgIGRlZmF1bHQsICBmaWxlICBuYW1lcyAgYXJlICBzaG93biB3aGVuIG11bHRpcGxlIGZpbGVzIGFyZQorICAgICAgICAgICAgICAgICBzZWFyY2hlZC4gRm9yIG1hdGNoaW5nIGxpbmVzLCB0aGUgZmlsZSBuYW1lIGlzIGZvbGxvd2VkIGJ5ICBhCisgICAgICAgICAgICAgICAgIGNvbG9uOyAgZm9yICBjb250ZXh0IGxpbmVzLCBhIGh5cGhlbiBzZXBhcmF0b3IgaXMgdXNlZC4gIElmIGEKKyAgICAgICAgICAgICAgICAgbGluZSBudW1iZXIgaXMgYWxzbyBiZWluZyBvdXRwdXQsIGl0IGZvbGxvd3MgdGhlIGZpbGUgbmFtZS4KKworICAgICAgIC0taGVscCAgICBPdXRwdXQgYSBoZWxwIG1lc3NhZ2UsIGdpdmluZyBicmllZiBkZXRhaWxzICBvZiAgdGhlICBjb21tYW5kCisgICAgICAgICAgICAgICAgIG9wdGlvbnMgIGFuZCAgZmlsZSB0eXBlIHN1cHBvcnQsIGFuZCB0aGVuIGV4aXQuIEFueXRoaW5nIGVsc2UKKyAgICAgICAgICAgICAgICAgb24gdGhlIGNvbW1hbmQgbGluZSBpcyBpZ25vcmVkLgorCisgICAgICAgLUkgICAgICAgIElnbm9yZSAgYmluYXJ5ICBmaWxlcy4gIFRoaXMgIGlzICBlcXVpdmFsZW50ICAgdG8gICAtLWJpbmFyeS0KKyAgICAgICAgICAgICAgICAgZmlsZXM9d2l0aG91dC1tYXRjaC4KKworICAgICAgIC1pLCAtLWlnbm9yZS1jYXNlCisgICAgICAgICAgICAgICAgIElnbm9yZSB1cHBlci9sb3dlciBjYXNlIGRpc3RpbmN0aW9ucyBkdXJpbmcgY29tcGFyaXNvbnMuCisKKyAgICAgICAtLWluY2x1ZGU9cGF0dGVybgorICAgICAgICAgICAgICAgICBJZiAgYW55IC0taW5jbHVkZSBwYXR0ZXJucyBhcmUgc3BlY2lmaWVkLCB0aGUgb25seSBmaWxlcyB0aGF0CisgICAgICAgICAgICAgICAgIGFyZSBwcm9jZXNzZWQgYXJlIHRob3NlIHRoYXQgbWF0Y2ggb25lIG9mIHRoZSAgcGF0dGVybnMgIChhbmQKKyAgICAgICAgICAgICAgICAgZG8gIG5vdCAgbWF0Y2ggIGFuICAtLWV4Y2x1ZGUgIHBhdHRlcm4pLiBUaGlzIG9wdGlvbiBkb2VzIG5vdAorICAgICAgICAgICAgICAgICBhZmZlY3QgZGlyZWN0b3JpZXMsIGJ1dCBpdCAgYXBwbGllcyAgdG8gIGFsbCAgZmlsZXMsICB3aGV0aGVyCisgICAgICAgICAgICAgICAgIGxpc3RlZCAgb24gdGhlIGNvbW1hbmQgbGluZSwgb2J0YWluZWQgZnJvbSAtLWZpbGUtbGlzdCwgb3IgYnkKKyAgICAgICAgICAgICAgICAgc2Nhbm5pbmcgYSBkaXJlY3RvcnkuIFRoZSBwYXR0ZXJuIGlzIGEgUENSRTIgcmVndWxhciAgZXhwcmVzLQorICAgICAgICAgICAgICAgICBzaW9uLCAgYW5kIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgZmluYWwgY29tcG9uZW50IG9mIHRoZSBmaWxlCisgICAgICAgICAgICAgICAgIG5hbWUsIG5vdCB0aGUgZW50aXJlIHBhdGguIFRoZSAtRiwgLXcsIGFuZCAteCBvcHRpb25zIGRvICBub3QKKyAgICAgICAgICAgICAgICAgYXBwbHkgIHRvIHRoaXMgcGF0dGVybi4gVGhlIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gYW55IG51bWJlciBvZgorICAgICAgICAgICAgICAgICB0aW1lcy4gSWYgYSBmaWxlICBuYW1lICBtYXRjaGVzICBib3RoICBhbiAgLS1pbmNsdWRlICBhbmQgIGFuCisgICAgICAgICAgICAgICAgIC0tZXhjbHVkZSAgcGF0dGVybiwgIGl0ICBpcyBleGNsdWRlZC4gIFRoZXJlIGlzIG5vIHNob3J0IGZvcm0KKyAgICAgICAgICAgICAgICAgZm9yIHRoaXMgb3B0aW9uLgorCisgICAgICAgLS1pbmNsdWRlLWZyb209ZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgVHJlYXQgZWFjaCBub24tZW1wdHkgbGluZSBvZiB0aGUgZmlsZSAgYXMgIHRoZSAgZGF0YSAgZm9yICBhbgorICAgICAgICAgICAgICAgICAtLWluY2x1ZGUgb3B0aW9uLiBXaGF0IGNvbnN0aXR1dGVzIGEgbmV3bGluZSBmb3IgdGhpcyBwdXJwb3NlCisgICAgICAgICAgICAgICAgIGlzIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgZGVmYXVsdC4gVGhlIC0tbmV3bGluZSAgb3B0aW9uICBoYXMKKyAgICAgICAgICAgICAgICAgbm8gZWZmZWN0IG9uIHRoaXMgb3B0aW9uLiBUaGlzIG9wdGlvbiBtYXkgYmUgZ2l2ZW4gYW55IG51bWJlcgorICAgICAgICAgICAgICAgICBvZiB0aW1lczsgYWxsIHRoZSBmaWxlcyBhcmUgcmVhZC4KKworICAgICAgIC0taW5jbHVkZS1kaXI9cGF0dGVybgorICAgICAgICAgICAgICAgICBJZiBhbnkgLS1pbmNsdWRlLWRpciBwYXR0ZXJucyBhcmUgc3BlY2lmaWVkLCB0aGUgb25seSAgZGlyZWMtCisgICAgICAgICAgICAgICAgIHRvcmllcyAgdGhhdCAgYXJlICBwcm9jZXNzZWQgIGFyZSB0aG9zZSB0aGF0IG1hdGNoIG9uZSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgcGF0dGVybnMgKGFuZCBkbyBub3QgbWF0Y2ggYW4gIC0tZXhjbHVkZS1kaXIgIHBhdHRlcm4pLiAgVGhpcworICAgICAgICAgICAgICAgICBhcHBsaWVzICB0byAgYWxsICBkaXJlY3RvcmllcywgIHdoZXRoZXIgbGlzdGVkIG9uIHRoZSBjb21tYW5kCisgICAgICAgICAgICAgICAgIGxpbmUsIG9idGFpbmVkIGZyb20gLS1maWxlLWxpc3QsICBvciAgYnkgIHNjYW5uaW5nICBhICBwYXJlbnQKKyAgICAgICAgICAgICAgICAgZGlyZWN0b3J5LiAgVGhlIHBhdHRlcm4gaXMgYSBQQ1JFMiByZWd1bGFyIGV4cHJlc3Npb24sIGFuZCBpcworICAgICAgICAgICAgICAgICBtYXRjaGVkIGFnYWluc3QgdGhlIGZpbmFsIGNvbXBvbmVudCBvZiAgdGhlICBkaXJlY3RvcnkgIG5hbWUsCisgICAgICAgICAgICAgICAgIG5vdCAgdGhlIGVudGlyZSBwYXRoLiBUaGUgLUYsIC13LCBhbmQgLXggb3B0aW9ucyBkbyBub3QgYXBwbHkKKyAgICAgICAgICAgICAgICAgdG8gdGhpcyBwYXR0ZXJuLiBUaGUgb3B0aW9uIG1heSBiZSBnaXZlbiBhbnkgbnVtYmVyIG9mIHRpbWVzLgorICAgICAgICAgICAgICAgICBJZiAgYSBkaXJlY3RvcnkgbWF0Y2hlcyBib3RoIC0taW5jbHVkZS1kaXIgYW5kIC0tZXhjbHVkZS1kaXIsCisgICAgICAgICAgICAgICAgIGl0IGlzIGV4Y2x1ZGVkLiBUaGVyZSBpcyBubyBzaG9ydCBmb3JtIGZvciB0aGlzIG9wdGlvbi4KKworICAgICAgIC1MLCAtLWZpbGVzLXdpdGhvdXQtbWF0Y2gKKyAgICAgICAgICAgICAgICAgSW5zdGVhZCBvZiBvdXRwdXR0aW5nIGxpbmVzIGZyb20gdGhlIGZpbGVzLCBqdXN0ICBvdXRwdXQgIHRoZQorICAgICAgICAgICAgICAgICBuYW1lcyAgb2YgIHRoZSBmaWxlcyB0aGF0IGRvIG5vdCBjb250YWluIGFueSBsaW5lcyB0aGF0IHdvdWxkCisgICAgICAgICAgICAgICAgIGhhdmUgYmVlbiBvdXRwdXQuIEVhY2ggZmlsZSBuYW1lIGlzIG91dHB1dCBvbmNlLCBvbiAgYSAgc2VwYS0KKyAgICAgICAgICAgICAgICAgcmF0ZSBsaW5lLgorCisgICAgICAgLWwsIC0tZmlsZXMtd2l0aC1tYXRjaGVzCisgICAgICAgICAgICAgICAgIEluc3RlYWQgIG9mICBvdXRwdXR0aW5nIGxpbmVzIGZyb20gdGhlIGZpbGVzLCBqdXN0IG91dHB1dCB0aGUKKyAgICAgICAgICAgICAgICAgbmFtZXMgb2YgdGhlIGZpbGVzIGNvbnRhaW5pbmcgbGluZXMgdGhhdCB3b3VsZCBoYXZlIGJlZW4gb3V0LQorICAgICAgICAgICAgICAgICBwdXQuICBFYWNoICBmaWxlICBuYW1lICBpcyAgb3V0cHV0ICBvbmNlLCBvbiBhIHNlcGFyYXRlIGxpbmUuCisgICAgICAgICAgICAgICAgIFNlYXJjaGluZyBub3JtYWxseSBzdG9wcyBhcyBzb29uIGFzIGEgbWF0Y2hpbmcgbGluZSBpcyAgZm91bmQKKyAgICAgICAgICAgICAgICAgaW4gIGEgIGZpbGUuICBIb3dldmVyLCBpZiB0aGUgLWMgKGNvdW50KSBvcHRpb24gaXMgYWxzbyB1c2VkLAorICAgICAgICAgICAgICAgICBtYXRjaGluZyBjb250aW51ZXMgaW4gb3JkZXIgdG8gb2J0YWluIHRoZSBjb3JyZWN0IGNvdW50LCAgYW5kCisgICAgICAgICAgICAgICAgIHRob3NlICBmaWxlcyAgdGhhdCAgaGF2ZSAgYXQgbGVhc3Qgb25lIG1hdGNoIGFyZSBsaXN0ZWQgYWxvbmcKKyAgICAgICAgICAgICAgICAgd2l0aCB0aGVpciBjb3VudHMuIFVzaW5nIHRoaXMgb3B0aW9uIHdpdGggLWMgaXMgYSB3YXkgb2Ygc3VwLQorICAgICAgICAgICAgICAgICBwcmVzc2luZyB0aGUgbGlzdGluZyBvZiBmaWxlcyB3aXRoIG5vIG1hdGNoZXMuCisKKyAgICAgICAtLWxhYmVsPW5hbWUKKyAgICAgICAgICAgICAgICAgVGhpcyBvcHRpb24gc3VwcGxpZXMgYSBuYW1lIHRvIGJlIHVzZWQgZm9yIHRoZSBzdGFuZGFyZCBpbnB1dAorICAgICAgICAgICAgICAgICB3aGVuIGZpbGUgbmFtZXMgYXJlIGJlaW5nIG91dHB1dC4gSWYgbm90IHN1cHBsaWVkLCAiKHN0YW5kYXJkCisgICAgICAgICAgICAgICAgIGlucHV0KSIgaXMgdXNlZC4gVGhlcmUgaXMgbm8gc2hvcnQgZm9ybSBmb3IgdGhpcyBvcHRpb24uCisKKyAgICAgICAtLWxpbmUtYnVmZmVyZWQKKyAgICAgICAgICAgICAgICAgV2hlbiAgdGhpcyAgb3B0aW9uIGlzIGdpdmVuLCBpbnB1dCBpcyByZWFkIGFuZCBwcm9jZXNzZWQgbGluZQorICAgICAgICAgICAgICAgICBieSBsaW5lLCBhbmQgdGhlIG91dHB1dCAgaXMgIGZsdXNoZWQgIGFmdGVyICBlYWNoICB3cml0ZS4gIEJ5CisgICAgICAgICAgICAgICAgIGRlZmF1bHQsICBpbnB1dCBpcyByZWFkIGluIGxhcmdlIGNodW5rcywgdW5sZXNzIHBjcmUyZ3JlcCBjYW4KKyAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lIHRoYXQgaXQgaXMgcmVhZGluZyBmcm9tIGEgdGVybWluYWwgKHdoaWNoICBpcyAgY3VyLQorICAgICAgICAgICAgICAgICByZW50bHkgIHBvc3NpYmxlICBvbmx5ICBpbiBVbml4LWxpa2UgZW52aXJvbm1lbnRzKS4gT3V0cHV0IHRvCisgICAgICAgICAgICAgICAgIHRlcm1pbmFsIGlzIG5vcm1hbGx5IGF1dG9tYXRpY2FsbHkgZmx1c2hlZCBieSAgdGhlICBvcGVyYXRpbmcKKyAgICAgICAgICAgICAgICAgc3lzdGVtLiBUaGlzIG9wdGlvbiBjYW4gYmUgdXNlZnVsIHdoZW4gdGhlIGlucHV0IG9yIG91dHB1dCBpcworICAgICAgICAgICAgICAgICBhdHRhY2hlZCB0byBhIHBpcGUgYW5kIHlvdSBkbyBub3Qgd2FudCBwY3JlMmdyZXAgdG8gYnVmZmVyIHVwCisgICAgICAgICAgICAgICAgIGxhcmdlICBhbW91bnRzICBvZiBkYXRhLiBIb3dldmVyLCBpdHMgdXNlIHdpbGwgYWZmZWN0IHBlcmZvci0KKyAgICAgICAgICAgICAgICAgbWFuY2UsIGFuZCB0aGUgLU0gKG11bHRpbGluZSkgb3B0aW9uIGNlYXNlcyB0byB3b3JrLgorCisgICAgICAgLS1saW5lLW9mZnNldHMKKyAgICAgICAgICAgICAgICAgSW5zdGVhZCBvZiBzaG93aW5nIGxpbmVzIG9yIHBhcnRzIG9mIGxpbmVzIHRoYXQgIG1hdGNoLCAgc2hvdworICAgICAgICAgICAgICAgICBlYWNoIG1hdGNoIGFzIGEgbGluZSBudW1iZXIsIHRoZSBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgIGxpbmUsIGFuZCBhIGxlbmd0aC4gVGhlIGxpbmUgbnVtYmVyIGlzIHRlcm1pbmF0ZWQgYnkgYSAgY29sb24KKyAgICAgICAgICAgICAgICAgKGFzICB1c3VhbDsgc2VlIHRoZSAtbiBvcHRpb24pLCBhbmQgdGhlIG9mZnNldCBhbmQgbGVuZ3RoIGFyZQorICAgICAgICAgICAgICAgICBzZXBhcmF0ZWQgYnkgYSBjb21tYS4gSW4gdGhpcyAgbW9kZSwgIG5vICBjb250ZXh0ICBpcyAgc2hvd24uCisgICAgICAgICAgICAgICAgIFRoYXQgIGlzLCB0aGUgLUEsIC1CLCBhbmQgLUMgb3B0aW9ucyBhcmUgaWdub3JlZC4gSWYgdGhlcmUgaXMKKyAgICAgICAgICAgICAgICAgbW9yZSB0aGFuIG9uZSBtYXRjaCBpbiBhIGxpbmUsIGVhY2ggb2YgdGhlbSAgaXMgIHNob3duICBzZXBhLQorICAgICAgICAgICAgICAgICByYXRlbHkuIFRoaXMgb3B0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIC0tZmlsZS1vZmZzZXRzCisgICAgICAgICAgICAgICAgIGFuZCAtLW9ubHktbWF0Y2hpbmcuCisKKyAgICAgICAtLWxvY2FsZT1sb2NhbGUtbmFtZQorICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgYSBsb2NhbGUgdG8gYmUgdXNlZCBmb3IgcGF0dGVybiAgbWF0Y2gtCisgICAgICAgICAgICAgICAgIGluZy4gIEl0ICBvdmVycmlkZXMgdGhlIHZhbHVlIGluIHRoZSBMQ19BTEwgb3IgTENfQ1RZUEUgZW52aS0KKyAgICAgICAgICAgICAgICAgcm9ubWVudCB2YXJpYWJsZXMuIElmICBubyAgbG9jYWxlICBpcyAgc3BlY2lmaWVkLCAgdGhlICBQQ1JFMgorICAgICAgICAgICAgICAgICBsaWJyYXJ5J3MgIGRlZmF1bHQgKHVzdWFsbHkgdGhlICJDIiBsb2NhbGUpIGlzIHVzZWQuIFRoZXJlIGlzCisgICAgICAgICAgICAgICAgIG5vIHNob3J0IGZvcm0gZm9yIHRoaXMgb3B0aW9uLgorCisgICAgICAgLS1tYXRjaC1saW1pdD1udW1iZXIKKyAgICAgICAgICAgICAgICAgUHJvY2Vzc2luZyBzb21lIHJlZ3VsYXIgZXhwcmVzc2lvbiAgcGF0dGVybnMgIGNhbiAgcmVxdWlyZSAgYQorICAgICAgICAgICAgICAgICB2ZXJ5ICBsYXJnZSBhbW91bnQgb2YgbWVtb3J5LCBsZWFkaW5nIGluIHNvbWUgY2FzZXMgdG8gYSBwcm8tCisgICAgICAgICAgICAgICAgIGdyYW0gY3Jhc2ggaWYgbm90IGVub3VnaCBpcyBhdmFpbGFibGUuICAgT3RoZXIgIHBhdHRlcm5zICBtYXkKKyAgICAgICAgICAgICAgICAgdGFrZSAgYSAgdmVyeSAgbG9uZyAgdGltZSB0byBzZWFyY2ggZm9yIGFsbCBwb3NzaWJsZSBtYXRjaGluZworICAgICAgICAgICAgICAgICBzdHJpbmdzLiAgVGhlICBwY3JlMl9tYXRjaCgpICBmdW5jdGlvbiAgdGhhdCAgaXMgIGNhbGxlZCAgIGJ5CisgICAgICAgICAgICAgICAgIHBjcmUyZ3JlcCAgdG8gIGRvICB0aGUgIG1hdGNoaW5nICBoYXMgdHdvIHBhcmFtZXRlcnMgdGhhdCBjYW4KKyAgICAgICAgICAgICAgICAgbGltaXQgdGhlIHJlc291cmNlcyB0aGF0IGl0IHVzZXMuCisKKyAgICAgICAgICAgICAgICAgVGhlICAtLW1hdGNoLWxpbWl0ICBvcHRpb24gIHByb3ZpZGVzICBhICBtZWFucyAgb2YgICBsaW1pdGluZworICAgICAgICAgICAgICAgICByZXNvdXJjZSB1c2FnZSB3aGVuIHByb2Nlc3NpbmcgcGF0dGVybnMgdGhhdCBhcmUgbm90IGdvaW5nIHRvCisgICAgICAgICAgICAgICAgIG1hdGNoLCBidXQgd2hpY2ggaGF2ZSBhIHZlcnkgbGFyZ2UgbnVtYmVyIG9mIHBvc3NpYmlsaXRpZXMgaW4KKyAgICAgICAgICAgICAgICAgdGhlaXIgIHNlYXJjaCAgdHJlZXMuICBUaGUgIGNsYXNzaWMgZXhhbXBsZSBpcyBhIHBhdHRlcm4gdGhhdAorICAgICAgICAgICAgICAgICB1c2VzIG5lc3RlZCB1bmxpbWl0ZWQgcmVwZWF0cy4gSW50ZXJuYWxseSwgUENSRTIgdXNlcyBhIGZ1bmMtCisgICAgICAgICAgICAgICAgIHRpb24gIGNhbGxlZCAgbWF0Y2goKSAgd2hpY2ggIGl0ICBjYWxscyByZXBlYXRlZGx5IChzb21ldGltZXMKKyAgICAgICAgICAgICAgICAgcmVjdXJzaXZlbHkpLiBUaGUgbGltaXQgc2V0IGJ5IC0tbWF0Y2gtbGltaXQgIGlzICBpbXBvc2VkICBvbgorICAgICAgICAgICAgICAgICB0aGUgIG51bWJlciAgb2YgdGltZXMgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGEgbWF0Y2gsCisgICAgICAgICAgICAgICAgIHdoaWNoIGhhcyB0aGUgZWZmZWN0IG9mIGxpbWl0aW5nIHRoZSBhbW91bnQgIG9mICBiYWNrdHJhY2tpbmcKKyAgICAgICAgICAgICAgICAgdGhhdCBjYW4gdGFrZSBwbGFjZS4KKworICAgICAgICAgICAgICAgICBUaGUgLS1yZWN1cnNpb24tbGltaXQgb3B0aW9uIGlzIHNpbWlsYXIgdG8gLS1tYXRjaC1saW1pdCwgYnV0CisgICAgICAgICAgICAgICAgIGluc3RlYWQgb2YgbGltaXRpbmcgdGhlIHRvdGFsIG51bWJlciBvZiB0aW1lcyB0aGF0IG1hdGNoKCkgaXMKKyAgICAgICAgICAgICAgICAgY2FsbGVkLCBpdCBsaW1pdHMgdGhlIGRlcHRoIG9mIHJlY3Vyc2l2ZSBjYWxscywgd2hpY2ggaW4gdHVybgorICAgICAgICAgICAgICAgICBsaW1pdHMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdGhhdCBjYW4gYmUgdXNlZC4gIFRoZSAgcmVjdXJzaW9uCisgICAgICAgICAgICAgICAgIGRlcHRoICBpcyAgYSAgc21hbGxlciAgbnVtYmVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjYWxscywKKyAgICAgICAgICAgICAgICAgYmVjYXVzZSBub3QgYWxsIGNhbGxzIHRvIG1hdGNoKCkgYXJlIHJlY3Vyc2l2ZS4gVGhpcyBsaW1pdCBpcworICAgICAgICAgICAgICAgICBvZiB1c2Ugb25seSBpZiBpdCBpcyBzZXQgc21hbGxlciB0aGFuIC0tbWF0Y2gtbGltaXQuCisKKyAgICAgICAgICAgICAgICAgVGhlcmUgIGFyZSBubyBzaG9ydCBmb3JtcyBmb3IgdGhlc2Ugb3B0aW9ucy4gVGhlIGRlZmF1bHQgc2V0LQorICAgICAgICAgICAgICAgICB0aW5ncyBhcmUgc3BlY2lmaWVkIHdoZW4gdGhlIFBDUkUyIGxpYnJhcnkgaXMgY29tcGlsZWQsICB3aXRoCisgICAgICAgICAgICAgICAgIHRoZSBkZWZhdWx0IGRlZmF1bHQgYmVpbmcgMTAgbWlsbGlvbi4KKworICAgICAgIC1NLCAtLW11bHRpbGluZQorICAgICAgICAgICAgICAgICBBbGxvdyAgcGF0dGVybnMgdG8gbWF0Y2ggbW9yZSB0aGFuIG9uZSBsaW5lLiBXaGVuIHRoaXMgb3B0aW9uCisgICAgICAgICAgICAgICAgIGlzIGdpdmVuLCBwYXR0ZXJucyBtYXkgdXNlZnVsbHkgY29udGFpbiBsaXRlcmFsIG5ld2xpbmUgY2hhci0KKyAgICAgICAgICAgICAgICAgYWN0ZXJzICBhbmQgIGludGVybmFsICBvY2N1cnJlbmNlcyBvZiBeIGFuZCAkIGNoYXJhY3RlcnMuIFRoZQorICAgICAgICAgICAgICAgICBvdXRwdXQgZm9yIGEgc3VjY2Vzc2Z1bCBtYXRjaCBtYXkgY29uc2lzdCBvZiAgbW9yZSAgdGhhbiAgb25lCisgICAgICAgICAgICAgICAgIGxpbmUuICBUaGUgIGZpcnN0IGlzIHRoZSBsaW5lIGluIHdoaWNoIHRoZSBtYXRjaCBzdGFydGVkLCBhbmQKKyAgICAgICAgICAgICAgICAgdGhlIGxhc3QgaXMgdGhlIGxpbmUgaW4gd2hpY2ggdGhlIG1hdGNoIGVuZGVkLiBJZiB0aGUgbWF0Y2hlZAorICAgICAgICAgICAgICAgICBzdHJpbmcgIGVuZHMgIHdpdGggIGEgbmV3bGluZSBzZXF1ZW5jZSB0aGUgb3V0cHV0IGVuZHMgYXQgdGhlCisgICAgICAgICAgICAgICAgIGVuZCBvZiB0aGF0IGxpbmUuCisKKyAgICAgICAgICAgICAgICAgV2hlbiB0aGlzIG9wdGlvbiBpcyBzZXQsIHRoZSBQQ1JFMiBsaWJyYXJ5IGlzIGNhbGxlZCBpbiAibXVsLQorICAgICAgICAgICAgICAgICB0aWxpbmUiICBtb2RlLiAgIEhvd2V2ZXIsIHBjcmUyZ3JlcCBzdGlsbCBwcm9jZXNzZXMgdGhlIGlucHV0CisgICAgICAgICAgICAgICAgIGxpbmUgYnkgbGluZS4gVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCAgYSAgbWF0Y2hlZCAgc3RyaW5nICBtYXkKKyAgICAgICAgICAgICAgICAgZXh0ZW5kICBwYXN0ICB0aGUgIGVuZCAgb2YgYSBsaW5lIGFuZCBjb250aW51ZSBvbiBvbmUgb3IgbW9yZQorICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50IGxpbmVzLiBUaGUgbmV3bGluZSBzZXF1ZW5jZSAgbXVzdCAgYmUgIG1hdGNoZWQgIGFzCisgICAgICAgICAgICAgICAgIHBhcnQgb2YgdGhlIHBhdHRlcm4uIEZvciBleGFtcGxlLCB0byBmaW5kIHRoZSBwaHJhc2UgInJlZ3VsYXIKKyAgICAgICAgICAgICAgICAgZXhwcmVzc2lvbiIgaW4gYSBmaWxlIHdoZXJlICJyZWd1bGFyIiBtaWdodCBiZSBhdCB0aGUgZW5kICBvZgorICAgICAgICAgICAgICAgICBhICBsaW5lICBhbmQgICJleHByZXNzaW9uIiBhdCB0aGUgc3RhcnQgb2YgdGhlIG5leHQgbGluZSwgeW91CisgICAgICAgICAgICAgICAgIGNvdWxkIHVzZSB0aGlzIGNvbW1hbmQ6CisKKyAgICAgICAgICAgICAgICAgICBwY3JlMmdyZXAgLU0gJ3JlZ3VsYXJccytleHByZXNzaW9uJyA8ZmlsZT4KKworICAgICAgICAgICAgICAgICBUaGUgXHMgZXNjYXBlIHNlcXVlbmNlIG1hdGNoZXMgIGFueSAgd2hpdGUgIHNwYWNlICBjaGFyYWN0ZXIsCisgICAgICAgICAgICAgICAgIGluY2x1ZGluZyAgbmV3bGluZXMsICBhbmQgIGlzICBmb2xsb3dlZCAgYnkgICsgc28gYXMgdG8gbWF0Y2gKKyAgICAgICAgICAgICAgICAgdHJhaWxpbmcgd2hpdGUgc3BhY2Ugb24gdGhlIGZpcnN0IGxpbmUgYXMgIHdlbGwgIGFzICBwb3NzaWJseQorICAgICAgICAgICAgICAgICBoYW5kbGluZyBhIHR3by1jaGFyYWN0ZXIgbmV3bGluZSBzZXF1ZW5jZS4KKworICAgICAgICAgICAgICAgICBUaGVyZSAgaXMgYSBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGxpbmVzIHRoYXQgY2FuIGJlIG1hdGNoZWQsCisgICAgICAgICAgICAgICAgIGltcG9zZWQgYnkgdGhlIHdheSB0aGF0IHBjcmUyZ3JlcCBidWZmZXJzIHRoZSBpbnB1dCAgZmlsZSAgYXMKKyAgICAgICAgICAgICAgICAgaXQgIHNjYW5zICBpdC4gIEhvd2V2ZXIsICBwY3JlMmdyZXAgIGVuc3VyZXMgdGhhdCBhdCBsZWFzdCA4SworICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIG9yIHRoZSByZXN0IG9mIHRoZSBmaWxlICh3aGljaGV2ZXIgaXMgdGhlIHNob3J0ZXIpCisgICAgICAgICAgICAgICAgIGFyZSAgYXZhaWxhYmxlIGZvciBmb3J3YXJkIG1hdGNoaW5nLCBhbmQgc2ltaWxhcmx5IHRoZSBwcmV2aS0KKyAgICAgICAgICAgICAgICAgb3VzIDhLIGNoYXJhY3RlcnMgKG9yIGFsbCB0aGUgcHJldmlvdXMgY2hhcmFjdGVycywgIGlmICBmZXdlcgorICAgICAgICAgICAgICAgICB0aGFuIDhLKSBhcmUgZ3VhcmFudGVlZCB0byBiZSBhdmFpbGFibGUgZm9yIGxvb2tiZWhpbmQgYXNzZXItCisgICAgICAgICAgICAgICAgIHRpb25zLiBUaGUgLU0gb3B0aW9uIGRvZXMgbm90IHdvcmsgd2hlbiBpbnB1dCBpcyByZWFkIGxpbmUgYnkKKyAgICAgICAgICAgICAgICAgbGluZSAoc2VlIC0tbGluZS1idWZmZXJlZC4pCisKKyAgICAgICAtTiBuZXdsaW5lLXR5cGUsIC0tbmV3bGluZT1uZXdsaW5lLXR5cGUKKyAgICAgICAgICAgICAgICAgVGhlICBQQ1JFMiAgbGlicmFyeSAgc3VwcG9ydHMgIGZpdmUgZGlmZmVyZW50IGNvbnZlbnRpb25zIGZvcgorICAgICAgICAgICAgICAgICBpbmRpY2F0aW5nIHRoZSBlbmRzIG9mIGxpbmVzLiBUaGV5IGFyZSAgdGhlICBzaW5nbGUtY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgIHNlcXVlbmNlcyAgQ1IgIChjYXJyaWFnZSAgcmV0dXJuKSBhbmQgTEYgKGxpbmVmZWVkKSwgdGhlIHR3by0KKyAgICAgICAgICAgICAgICAgY2hhcmFjdGVyIHNlcXVlbmNlIENSTEYsIGFuICJhbnljcmxmIiBjb252ZW50aW9uLCB3aGljaCAgcmVjLQorICAgICAgICAgICAgICAgICBvZ25pemVzICBhbnkgIG9mIHRoZSBwcmVjZWRpbmcgdGhyZWUgdHlwZXMsIGFuZCBhbiAiYW55IiBjb24tCisgICAgICAgICAgICAgICAgIHZlbnRpb24sIGluIHdoaWNoIGFueSBVbmljb2RlIGxpbmUgZW5kaW5nIHNlcXVlbmNlIGlzIGFzc3VtZWQKKyAgICAgICAgICAgICAgICAgdG8gIGVuZCBhIGxpbmUuIFRoZSBVbmljb2RlIHNlcXVlbmNlcyBhcmUgdGhlIHRocmVlIGp1c3QgbWVuLQorICAgICAgICAgICAgICAgICB0aW9uZWQsIHBsdXMgIFZUICAodmVydGljYWwgIHRhYiwgIFUrMDAwQiksICBGRiAgKGZvcm0gIGZlZWQsCisgICAgICAgICAgICAgICAgIFUrMDAwQyksICAgTkVMICAobmV4dCAgbGluZSwgIFUrMDA4NSksICBMUyAgKGxpbmUgIHNlcGFyYXRvciwKKyAgICAgICAgICAgICAgICAgVSsyMDI4KSwgYW5kIFBTIChwYXJhZ3JhcGggc2VwYXJhdG9yLCBVKzIwMjkpLgorCisgICAgICAgICAgICAgICAgIFdoZW4gdGhlICBQQ1JFMiAgbGlicmFyeSAgaXMgIGJ1aWx0LCAgYSAgZGVmYXVsdCAgbGluZS1lbmRpbmcKKyAgICAgICAgICAgICAgICAgc2VxdWVuY2UgICBpcyAgc3BlY2lmaWVkLiAgIFRoaXMgIGlzICBub3JtYWxseSAgdGhlICBzdGFuZGFyZAorICAgICAgICAgICAgICAgICBzZXF1ZW5jZSBmb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkCisgICAgICAgICAgICAgICAgIGJ5ICB0aGlzICBvcHRpb24sICBwY3JlMmdyZXAgdXNlcyB0aGUgbGlicmFyeSdzIGRlZmF1bHQuICBUaGUKKyAgICAgICAgICAgICAgICAgcG9zc2libGUgdmFsdWVzIGZvciB0aGlzIG9wdGlvbiBhcmUgQ1IsIExGLCBDUkxGLCBBTllDUkxGLCBvcgorICAgICAgICAgICAgICAgICBBTlkuICBUaGlzICBtYWtlcyAgaXQgcG9zc2libGUgdG8gdXNlIHBjcmUyZ3JlcCB0byBzY2FuIGZpbGVzCisgICAgICAgICAgICAgICAgIHRoYXQgaGF2ZSBjb21lIGZyb20gb3RoZXIgZW52aXJvbm1lbnRzIHdpdGhvdXQgaGF2aW5nIHRvIG1vZC0KKyAgICAgICAgICAgICAgICAgaWZ5ICB0aGVpciAgbGluZSAgZW5kaW5ncy4gIElmIHRoZSBkYXRhIHRoYXQgaXMgYmVpbmcgc2Nhbm5lZAorICAgICAgICAgICAgICAgICBkb2VzIG5vdCBhZ3JlZSAgd2l0aCAgdGhlICBjb252ZW50aW9uICBzZXQgIGJ5ICB0aGlzICBvcHRpb24sCisgICAgICAgICAgICAgICAgIHBjcmUyZ3JlcCAgbWF5ICBiZWhhdmUgaW4gc3RyYW5nZSB3YXlzLiBOb3RlIHRoYXQgdGhpcyBvcHRpb24KKyAgICAgICAgICAgICAgICAgZG9lcyBub3QgYXBwbHkgdG8gZmlsZXMgc3BlY2lmaWVkIGJ5IHRoZSAtZiwgIC0tZXhjbHVkZS1mcm9tLAorICAgICAgICAgICAgICAgICBvciAgLS1pbmNsdWRlLWZyb20gIG9wdGlvbnMsICB3aGljaCAgYXJlICBleHBlY3RlZCB0byB1c2UgdGhlCisgICAgICAgICAgICAgICAgIG9wZXJhdGluZyBzeXN0ZW0ncyBzdGFuZGFyZCBuZXdsaW5lIHNlcXVlbmNlLgorCisgICAgICAgLW4sIC0tbGluZS1udW1iZXIKKyAgICAgICAgICAgICAgICAgUHJlY2VkZSBlYWNoIG91dHB1dCBsaW5lIGJ5IGl0cyBsaW5lIG51bWJlciBpbiB0aGUgZmlsZSwgZm9sLQorICAgICAgICAgICAgICAgICBsb3dlZCAgYnkgIGEgY29sb24gZm9yIG1hdGNoaW5nIGxpbmVzIG9yIGEgaHlwaGVuIGZvciBjb250ZXh0CisgICAgICAgICAgICAgICAgIGxpbmVzLiBJZiB0aGUgZmlsZSBuYW1lIGlzIGFsc28gYmVpbmcgb3V0cHV0LCBpdCBwcmVjZWRlcyB0aGUKKyAgICAgICAgICAgICAgICAgbGluZSAgbnVtYmVyLiAgV2hlbiAgdGhlICAtTSBvcHRpb24gY2F1c2VzIGEgcGF0dGVybiB0byBtYXRjaAorICAgICAgICAgICAgICAgICBtb3JlIHRoYW4gb25lIGxpbmUsIG9ubHkgdGhlIGZpcnN0IGlzIHByZWNlZGVkICBieSAgaXRzICBsaW5lCisgICAgICAgICAgICAgICAgIG51bWJlci4gVGhpcyBvcHRpb24gaXMgZm9yY2VkIGlmIC0tbGluZS1vZmZzZXRzIGlzIHVzZWQuCisKKyAgICAgICAtLW5vLWppdCAgSWYgIHRoZSAgUENSRTIgbGlicmFyeSBpcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIGp1c3QtaW4tdGltZQorICAgICAgICAgICAgICAgICBjb21waWxpbmcgKHdoaWNoIHNwZWVkcyB1cCBtYXRjaGluZyksIHBjcmUyZ3JlcCBhdXRvbWF0aWNhbGx5CisgICAgICAgICAgICAgICAgIG1ha2VzIHVzZSBvZiB0aGlzLCB1bmxlc3MgaXQgd2FzIGV4cGxpY2l0bHkgZGlzYWJsZWQgYXQgYnVpbGQKKyAgICAgICAgICAgICAgICAgdGltZS4gVGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGUgdXNlICBvZiAgSklUICBhdAorICAgICAgICAgICAgICAgICBydW4gIHRpbWUuIEl0IGlzIHByb3ZpZGVkIGZvciB0ZXN0aW5nIGFuZCB3b3JraW5nIHJvdW5kIHByb2ItCisgICAgICAgICAgICAgICAgIGxlbXMuICBJdCBzaG91bGQgbmV2ZXIgYmUgbmVlZGVkIGluIG5vcm1hbCB1c2UuCisKKyAgICAgICAtbywgLS1vbmx5LW1hdGNoaW5nCisgICAgICAgICAgICAgICAgIFNob3cgb25seSB0aGUgcGFydCBvZiB0aGUgbGluZSB0aGF0IG1hdGNoZWQgYSBwYXR0ZXJuIGluc3RlYWQKKyAgICAgICAgICAgICAgICAgb2YgIHRoZSAgd2hvbGUgIGxpbmUuIEluIHRoaXMgbW9kZSwgbm8gY29udGV4dCBpcyBzaG93bi4gVGhhdAorICAgICAgICAgICAgICAgICBpcywgdGhlIC1BLCAtQiwgYW5kIC1DIG9wdGlvbnMgYXJlIGlnbm9yZWQuIElmIHRoZXJlIGlzICBtb3JlCisgICAgICAgICAgICAgICAgIHRoYW4gIG9uZSAgbWF0Y2ggaW4gYSBsaW5lLCBlYWNoIG9mIHRoZW0gaXMgc2hvd24gc2VwYXJhdGVseS4KKyAgICAgICAgICAgICAgICAgSWYgLW8gaXMgY29tYmluZWQgd2l0aCAtdiAoaW52ZXJ0IHRoZSBzZW5zZSBvZiB0aGUgIG1hdGNoICB0bworICAgICAgICAgICAgICAgICBmaW5kICBub24tbWF0Y2hpbmcgIGxpbmVzKSwgIG5vICBvdXRwdXQgaXMgZ2VuZXJhdGVkLCBidXQgdGhlCisgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlIGlzIHNldCBhcHByb3ByaWF0ZWx5LiBJZiB0aGUgbWF0Y2hlZCAgcG9ydGlvbiAgb2YKKyAgICAgICAgICAgICAgICAgdGhlICBsaW5lIGlzIGVtcHR5LCBub3RoaW5nIGlzIG91dHB1dCB1bmxlc3MgdGhlIGZpbGUgbmFtZSBvcgorICAgICAgICAgICAgICAgICBsaW5lIG51bWJlciBhcmUgYmVpbmcgcHJpbnRlZCwgaW4gd2hpY2ggY2FzZSB0aGV5ICBhcmUgIHNob3duCisgICAgICAgICAgICAgICAgIG9uIGFuIG90aGVyd2lzZSBlbXB0eSBsaW5lLiBUaGlzIG9wdGlvbiBpcyBtdXR1YWxseSBleGNsdXNpdmUKKyAgICAgICAgICAgICAgICAgd2l0aCAtLWZpbGUtb2Zmc2V0cyBhbmQgLS1saW5lLW9mZnNldHMuCisKKyAgICAgICAtb251bWJlciwgLS1vbmx5LW1hdGNoaW5nPW51bWJlcgorICAgICAgICAgICAgICAgICBTaG93IG9ubHkgdGhlIHBhcnQgb2YgdGhlIGxpbmUgIHRoYXQgIG1hdGNoZWQgIHRoZSAgY2FwdHVyaW5nCisgICAgICAgICAgICAgICAgIHBhcmVudGhlc2VzIG9mIHRoZSBnaXZlbiBudW1iZXIuIFVwIHRvIDMyIGNhcHR1cmluZyBwYXJlbnRoZS0KKyAgICAgICAgICAgICAgICAgc2VzIGFyZSBzdXBwb3J0ZWQsIGFuZCAtbzAgaXMgZXF1aXZhbGVudCB0byAtbyB3aXRob3V0IGEgbnVtLQorICAgICAgICAgICAgICAgICBiZXIuICBCZWNhdXNlICB0aGVzZSBvcHRpb25zIGNhbiBiZSBnaXZlbiB3aXRob3V0IGFuIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgIChzZWUgYWJvdmUpLCBpZiBhbiBhcmd1bWVudCBpcyBwcmVzZW50LCBpdCBtdXN0IGJlICBnaXZlbiAgaW4KKyAgICAgICAgICAgICAgICAgdGhlICBzYW1lICBzaGVsbCBpdGVtLCBmb3IgZXhhbXBsZSwgLW8zIG9yIC0tb25seS1tYXRjaGluZz0yLgorICAgICAgICAgICAgICAgICBUaGUgY29tbWVudHMgZ2l2ZW4gZm9yIHRoZSBub24tYXJndW1lbnQgY2FzZSBhYm92ZSBhbHNvIGFwcGx5CisgICAgICAgICAgICAgICAgIHRvICB0aGlzICBjYXNlLiBJZiB0aGUgc3BlY2lmaWVkIGNhcHR1cmluZyBwYXJlbnRoZXNlcyBkbyBub3QKKyAgICAgICAgICAgICAgICAgZXhpc3QgaW4gdGhlIHBhdHRlcm4sIG9yIHdlcmUgbm90IHNldCBpbiB0aGUgIG1hdGNoLCAgbm90aGluZworICAgICAgICAgICAgICAgICBpcyAgb3V0cHV0IHVubGVzcyB0aGUgZmlsZSBuYW1lIG9yIGxpbmUgbnVtYmVyIGFyZSBiZWluZyBvdXQtCisgICAgICAgICAgICAgICAgIHB1dC4KKworICAgICAgICAgICAgICAgICBJZiB0aGlzIG9wdGlvbiBpcyBnaXZlbiBtdWx0aXBsZSB0aW1lcywgIG11bHRpcGxlICBzdWJzdHJpbmdzCisgICAgICAgICAgICAgICAgIGFyZSAgb3V0cHV0LCBpbiB0aGUgb3JkZXIgdGhlIG9wdGlvbnMgYXJlIGdpdmVuLiBGb3IgZXhhbXBsZSwKKyAgICAgICAgICAgICAgICAgLW8zIC1vMSAtbzMgY2F1c2VzIHRoZSBzdWJzdHJpbmdzIG1hdGNoZWQgYnkgY2FwdHVyaW5nIHBhcmVuLQorICAgICAgICAgICAgICAgICB0aGVzZXMgIDMgIGFuZCAgMSAgYW5kIHRoZW4gMyBhZ2FpbiB0byBiZSBvdXRwdXQuIEJ5IGRlZmF1bHQsCisgICAgICAgICAgICAgICAgIHRoZXJlIGlzIG5vIHNlcGFyYXRvciAoYnV0IHNlZSB0aGUgbmV4dCBvcHRpb24pLgorCisgICAgICAgLS1vbS1zZXBhcmF0b3I9dGV4dAorICAgICAgICAgICAgICAgICBTcGVjaWZ5IGEgc2VwYXJhdGluZyBzdHJpbmcgZm9yIG11bHRpcGxlIG9jY3VycmVuY2VzICBvZiAgLW8uCisgICAgICAgICAgICAgICAgIFRoZSAgZGVmYXVsdCBpcyBhbiBlbXB0eSBzdHJpbmcuIFNlcGFyYXRpbmcgc3RyaW5ncyBhcmUgbmV2ZXIKKyAgICAgICAgICAgICAgICAgY29sb3VyZWQuCisKKyAgICAgICAtcSwgLS1xdWlldAorICAgICAgICAgICAgICAgICBXb3JrIHF1aWV0bHksIHRoYXQgaXMsIGRpc3BsYXkgbm90aGluZyBleGNlcHQgZXJyb3IgbWVzc2FnZXMuCisgICAgICAgICAgICAgICAgIFRoZSAgZXhpdCAgc3RhdHVzICBpbmRpY2F0ZXMgIHdoZXRoZXIgb3Igbm90IGFueSBtYXRjaGVzIHdlcmUKKyAgICAgICAgICAgICAgICAgZm91bmQuCisKKyAgICAgICAtciwgLS1yZWN1cnNpdmUKKyAgICAgICAgICAgICAgICAgSWYgYW55IGdpdmVuIHBhdGggaXMgYSBkaXJlY3RvcnksIHJlY3Vyc2l2ZWx5IHNjYW4gdGhlICBmaWxlcworICAgICAgICAgICAgICAgICBpdCAgY29udGFpbnMsIHRha2luZyBub3RlIG9mIGFueSAtLWluY2x1ZGUgYW5kIC0tZXhjbHVkZSBzZXQtCisgICAgICAgICAgICAgICAgIHRpbmdzLiBCeSBkZWZhdWx0LCBhIGRpcmVjdG9yeSBpcyByZWFkIGFzIGEgbm9ybWFsICBmaWxlOyAgaW4KKyAgICAgICAgICAgICAgICAgc29tZSAgb3BlcmF0aW5nICBzeXN0ZW1zIHRoaXMgZ2l2ZXMgYW4gaW1tZWRpYXRlIGVuZC1vZi1maWxlLgorICAgICAgICAgICAgICAgICBUaGlzIG9wdGlvbiBpcyBhIHNob3J0aGFuZCAgZm9yICBzZXR0aW5nICB0aGUgIC1kICBvcHRpb24gIHRvCisgICAgICAgICAgICAgICAgICJyZWN1cnNlIi4KKworICAgICAgIC0tcmVjdXJzaW9uLWxpbWl0PW51bWJlcgorICAgICAgICAgICAgICAgICBTZWUgLS1tYXRjaC1saW1pdCBhYm92ZS4KKworICAgICAgIC1zLCAtLW5vLW1lc3NhZ2VzCisgICAgICAgICAgICAgICAgIFN1cHByZXNzICBlcnJvciAgbWVzc2FnZXMgIGFib3V0ICBub24tZXhpc3RlbnQgIG9yIHVucmVhZGFibGUKKyAgICAgICAgICAgICAgICAgZmlsZXMuIFN1Y2ggZmlsZXMgYXJlIHF1aWV0bHkgc2tpcHBlZC4gIEhvd2V2ZXIsICB0aGUgIHJldHVybgorICAgICAgICAgICAgICAgICBjb2RlIGlzIHN0aWxsIDIsIGV2ZW4gaWYgbWF0Y2hlcyB3ZXJlIGZvdW5kIGluIG90aGVyIGZpbGVzLgorCisgICAgICAgLXUsIC0tdXRmLTgKKyAgICAgICAgICAgICAgICAgT3BlcmF0ZSBpbiBVVEYtOCBtb2RlLiBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUgb25seSBpZiBQQ1JFMgorICAgICAgICAgICAgICAgICBoYXMgYmVlbiBjb21waWxlZCB3aXRoIFVURi04IHN1cHBvcnQuIEFsbCBwYXR0ZXJucyAoaW5jbHVkaW5nCisgICAgICAgICAgICAgICAgIHRob3NlICBmb3IgIGFueSAtLWV4Y2x1ZGUgYW5kIC0taW5jbHVkZSBvcHRpb25zKSBhbmQgYWxsIHN1Yi0KKyAgICAgICAgICAgICAgICAgamVjdCBsaW5lcyB0aGF0IGFyZSBzY2FubmVkIG11c3QgYmUgdmFsaWQgIHN0cmluZ3MgIG9mICBVVEYtOAorICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzLgorCisgICAgICAgLVYsIC0tdmVyc2lvbgorICAgICAgICAgICAgICAgICBXcml0ZSAgdGhlIHZlcnNpb24gbnVtYmVycyBvZiBwY3JlMmdyZXAgYW5kIHRoZSBQQ1JFMiBsaWJyYXJ5CisgICAgICAgICAgICAgICAgIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIHRoZW4gZXhpdC4gQW55dGhpbmcgIGVsc2UgIG9uICB0aGUKKyAgICAgICAgICAgICAgICAgY29tbWFuZCBsaW5lIGlzIGlnbm9yZWQuCisKKyAgICAgICAtdiwgLS1pbnZlcnQtbWF0Y2gKKyAgICAgICAgICAgICAgICAgSW52ZXJ0ICB0aGUgIHNlbnNlICBvZiAgdGhlIG1hdGNoLCBzbyB0aGF0IGxpbmVzIHdoaWNoIGRvIG5vdAorICAgICAgICAgICAgICAgICBtYXRjaCBhbnkgb2YgdGhlIHBhdHRlcm5zIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBmb3VuZC4KKworICAgICAgIC13LCAtLXdvcmQtcmVnZXgsIC0td29yZC1yZWdleHAKKyAgICAgICAgICAgICAgICAgRm9yY2UgdGhlIHBhdHRlcm5zIHRvIG1hdGNoIG9ubHkgd2hvbGUgd29yZHMuIFRoaXMgaXMgZXF1aXZhLQorICAgICAgICAgICAgICAgICBsZW50ICB0byAgaGF2aW5nIFxiIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBwYXR0ZXJuLiBUaGlzCisgICAgICAgICAgICAgICAgIG9wdGlvbiBhcHBsaWVzIG9ubHkgdG8gdGhlIHBhdHRlcm5zIHRoYXQgYXJlIG1hdGNoZWQgIGFnYWluc3QKKyAgICAgICAgICAgICAgICAgdGhlICBjb250ZW50cyAgb2YgZmlsZXM7IGl0IGRvZXMgbm90IGFwcGx5IHRvIHBhdHRlcm5zIHNwZWNpLQorICAgICAgICAgICAgICAgICBmaWVkIGJ5IGFueSBvZiB0aGUgLS1pbmNsdWRlIG9yIC0tZXhjbHVkZSBvcHRpb25zLgorCisgICAgICAgLXgsIC0tbGluZS1yZWdleCwgLS1saW5lLXJlZ2V4cAorICAgICAgICAgICAgICAgICBGb3JjZSB0aGUgcGF0dGVybnMgdG8gYmUgYW5jaG9yZWQgKGVhY2ggbXVzdCAgc3RhcnQgIG1hdGNoaW5nCisgICAgICAgICAgICAgICAgIGF0ICB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSkgYW5kIGluIGFkZGl0aW9uLCByZXF1aXJlIHRoZW0gdG8KKyAgICAgICAgICAgICAgICAgbWF0Y2ggZW50aXJlIGxpbmVzLiBUaGlzIGlzIGVxdWl2YWxlbnQgIHRvICBoYXZpbmcgIF4gIGFuZCAgJAorICAgICAgICAgICAgICAgICBjaGFyYWN0ZXJzIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIGVhY2ggYWx0ZXJuYXRpdmUgdG9wLWxldmVsCisgICAgICAgICAgICAgICAgIGJyYW5jaCBpbiBldmVyeSBwYXR0ZXJuLiBUaGlzIG9wdGlvbiBhcHBsaWVzIG9ubHkgdG8gdGhlIHBhdC0KKyAgICAgICAgICAgICAgICAgdGVybnMgdGhhdCBhcmUgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBjb250ZW50cyBvZiBmaWxlczsgaXQgZG9lcworICAgICAgICAgICAgICAgICBub3QgYXBwbHkgdG8gcGF0dGVybnMgc3BlY2lmaWVkIGJ5IGFueSBvZiAgdGhlICAtLWluY2x1ZGUgIG9yCisgICAgICAgICAgICAgICAgIC0tZXhjbHVkZSBvcHRpb25zLgorCisKK0VOVklST05NRU5UIFZBUklBQkxFUworCisgICAgICAgVGhlICBlbnZpcm9ubWVudCAgdmFyaWFibGVzICBMQ19BTEwgIGFuZCBMQ19DVFlQRSBhcmUgZXhhbWluZWQsIGluIHRoYXQKKyAgICAgICBvcmRlciwgZm9yIGEgbG9jYWxlLiBUaGUgZmlyc3Qgb25lIHRoYXQgaXMgc2V0IGlzICB1c2VkLiAgVGhpcyAgY2FuICBiZQorICAgICAgIG92ZXJyaWRkZW4gIGJ5ICB0aGUgIC0tbG9jYWxlICBvcHRpb24uICBJZiAgbm8gbG9jYWxlIGlzIHNldCwgdGhlIFBDUkUyCisgICAgICAgbGlicmFyeSdzIGRlZmF1bHQgKHVzdWFsbHkgdGhlICJDIiBsb2NhbGUpIGlzIHVzZWQuCisKKworTkVXTElORVMKKworICAgICAgIFRoZSAtTiAoLS1uZXdsaW5lKSBvcHRpb24gYWxsb3dzIHBjcmUyZ3JlcCB0byBzY2FuIGZpbGVzIHdpdGggZGlmZmVyZW50CisgICAgICAgbmV3bGluZSBjb252ZW50aW9ucyBmcm9tIHRoZSBkZWZhdWx0LiBBbnkgcGFydHMgb2YgdGhlIGlucHV0IGZpbGVzIHRoYXQKKyAgICAgICBhcmUgd3JpdHRlbiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0IGFyZSBjb3BpZWQgaWRlbnRpY2FsbHksICB3aXRoICB3aGF0LQorICAgICAgIGV2ZXIgIG5ld2xpbmUgc2VxdWVuY2VzIHRoZXkgaGF2ZSBpbiB0aGUgaW5wdXQuIEhvd2V2ZXIsIHRoZSBzZXR0aW5nIG9mCisgICAgICAgdGhpcyBvcHRpb24gZG9lcyBub3QgYWZmZWN0IHRoZSBpbnRlcnByZXRhdGlvbiBvZiAgZmlsZXMgIHNwZWNpZmllZCAgYnkKKyAgICAgICB0aGUgLWYsIC0tZXhjbHVkZS1mcm9tLCBvciAtLWluY2x1ZGUtZnJvbSBvcHRpb25zLCB3aGljaCBhcmUgYXNzdW1lZCB0bworICAgICAgIHVzZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzICBzdGFuZGFyZCAgbmV3bGluZSAgc2VxdWVuY2UsICBub3IgIGRvZXMgIGl0CisgICAgICAgYWZmZWN0ICB0aGUgd2F5IGluIHdoaWNoIHBjcmUyZ3JlcCB3cml0ZXMgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0byB0aGUKKyAgICAgICBzdGFuZGFyZCBlcnJvciBhbmQgb3V0cHV0IHN0cmVhbXMuIEZvciB0aGVzZSBpdCB1c2VzIHRoZSBzdHJpbmcgIlxuIiB0bworICAgICAgIGluZGljYXRlICBuZXdsaW5lcywgIHJlbHlpbmcgb24gdGhlIEMgSS9PIGxpYnJhcnkgdG8gY29udmVydCB0aGlzIHRvIGFuCisgICAgICAgYXBwcm9wcmlhdGUgc2VxdWVuY2UuCisKKworT1BUSU9OUyBDT01QQVRJQklMSVRZCisKKyAgICAgICBNYW55IG9mIHRoZSBzaG9ydCBhbmQgbG9uZyBmb3JtcyBvZiBwY3JlMmdyZXAncyBvcHRpb25zIGFyZSB0aGUgc2FtZSBhcworICAgICAgIGluICB0aGUgR05VIGdyZXAgcHJvZ3JhbS4gQW55IGxvbmcgb3B0aW9uIG9mIHRoZSBmb3JtIC0teHh4LXJlZ2V4cCAoR05VCisgICAgICAgdGVybWlub2xvZ3kpIGlzIGFsc28gYXZhaWxhYmxlIGFzIC0teHh4LXJlZ2V4IChQQ1JFMiB0ZXJtaW5vbG9neSkuIEhvdy0KKyAgICAgICBldmVyLCAgdGhlICAtLWZpbGUtbGlzdCwgLS1maWxlLW9mZnNldHMsIC0taW5jbHVkZS1kaXIsIC0tbGluZS1vZmZzZXRzLAorICAgICAgIC0tbG9jYWxlLCAtLW1hdGNoLWxpbWl0LCAtTSwgLS1tdWx0aWxpbmUsIC1OLCAgLS1uZXdsaW5lLCAgLS1vbS1zZXBhcmEtCisgICAgICAgdG9yLCAgLS1yZWN1cnNpb24tbGltaXQsICAtdSwgIGFuZCAgLS11dGYtOCAgb3B0aW9ucyAgYXJlICBzcGVjaWZpYyAgdG8KKyAgICAgICBwY3JlMmdyZXAsIGFzIGlzIHRoZSB1c2Ugb2YgdGhlIC0tb25seS1tYXRjaGluZyBvcHRpb24gd2l0aCBhIGNhcHR1cmluZworICAgICAgIHBhcmVudGhlc2VzIG51bWJlci4KKworICAgICAgIEFsdGhvdWdoICBtb3N0ICBvZiB0aGUgY29tbW9uIG9wdGlvbnMgd29yayB0aGUgc2FtZSB3YXksIGEgZmV3IGFyZSBkaWYtCisgICAgICAgZmVyZW50IGluIHBjcmUyZ3JlcC4gRm9yIGV4YW1wbGUsIHRoZSAtLWluY2x1ZGUgb3B0aW9uJ3MgYXJndW1lbnQgaXMgIGEKKyAgICAgICBnbG9iICBmb3IgR05VIGdyZXAsIGJ1dCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcGNyZTJncmVwLiBJZiBib3RoIHRoZQorICAgICAgIC1jIGFuZCAtbCBvcHRpb25zIGFyZSBnaXZlbiwgR05VIGdyZXAgbGlzdHMgb25seSAgZmlsZSAgbmFtZXMsICB3aXRob3V0CisgICAgICAgY291bnRzLCBidXQgcGNyZTJncmVwIGdpdmVzIHRoZSBjb3VudHMgYXMgd2VsbC4KKworCitPUFRJT05TIFdJVEggREFUQQorCisgICAgICAgVGhlcmUgYXJlIGZvdXIgZGlmZmVyZW50IHdheXMgaW4gd2hpY2ggYW4gb3B0aW9uIHdpdGggZGF0YSBjYW4gYmUgc3BlYy0KKyAgICAgICBpZmllZC4gIElmIGEgc2hvcnQgZm9ybSBvcHRpb24gaXMgdXNlZCwgdGhlICBkYXRhICBtYXkgIGZvbGxvdyAgaW1tZWRpLQorICAgICAgIGF0ZWx5LCBvciAod2l0aCBvbmUgZXhjZXB0aW9uKSBpbiB0aGUgbmV4dCBjb21tYW5kIGxpbmUgaXRlbS4gRm9yIGV4YW0tCisgICAgICAgcGxlOgorCisgICAgICAgICAtZi9zb21lL2ZpbGUKKyAgICAgICAgIC1mIC9zb21lL2ZpbGUKKworICAgICAgIFRoZSBleGNlcHRpb24gaXMgdGhlIC1vIG9wdGlvbiwgd2hpY2ggbWF5IGFwcGVhciB3aXRoIG9yIHdpdGhvdXQgIGRhdGEuCisgICAgICAgQmVjYXVzZSAgb2YgdGhpcywgaWYgZGF0YSBpcyBwcmVzZW50LCBpdCBtdXN0IGZvbGxvdyBpbW1lZGlhdGVseSBpbiB0aGUKKyAgICAgICBzYW1lIGl0ZW0sIGZvciBleGFtcGxlIC1vMy4KKworICAgICAgIElmIGEgbG9uZyBmb3JtIG9wdGlvbiBpcyB1c2VkLCB0aGUgZGF0YSBtYXkgYXBwZWFyIGluIHRoZSBzYW1lICBjb21tYW5kCisgICAgICAgbGluZSAgaXRlbSwgIHNlcGFyYXRlZCBieSBhbiBlcXVhbHMgY2hhcmFjdGVyLCBvciAod2l0aCB0d28gZXhjZXB0aW9ucykKKyAgICAgICBpdCBtYXkgYXBwZWFyIGluIHRoZSBuZXh0IGNvbW1hbmQgbGluZSBpdGVtLiBGb3IgZXhhbXBsZToKKworICAgICAgICAgLS1maWxlPS9zb21lL2ZpbGUKKyAgICAgICAgIC0tZmlsZSAvc29tZS9maWxlCisKKyAgICAgICBOb3RlLCBob3dldmVyLCB0aGF0IGlmIHlvdSB3YW50IHRvIHN1cHBseSBhIGZpbGUgbmFtZSBiZWdpbm5pbmcgd2l0aCAgfgorICAgICAgIGFzICBkYXRhICBpbiAgYSAgc2hlbGwgIGNvbW1hbmQsICBhbmQgaGF2ZSB0aGUgc2hlbGwgZXhwYW5kIH4gdG8gYSBob21lCisgICAgICAgZGlyZWN0b3J5LCB5b3UgbXVzdCBzZXBhcmF0ZSB0aGUgZmlsZSBuYW1lIGZyb20gdGhlIG9wdGlvbiwgYmVjYXVzZSB0aGUKKyAgICAgICBzaGVsbCBkb2VzIG5vdCB0cmVhdCB+IHNwZWNpYWxseSB1bmxlc3MgaXQgaXMgYXQgdGhlIHN0YXJ0IG9mIGFuIGl0ZW0uCisKKyAgICAgICBUaGUgIGV4Y2VwdGlvbnMgIHRvIHRoZSBhYm92ZSBhcmUgdGhlIC0tY29sb3VyIChvciAtLWNvbG9yKSBhbmQgLS1vbmx5LQorICAgICAgIG1hdGNoaW5nIG9wdGlvbnMsIGZvciB3aGljaCB0aGUgZGF0YSAgaXMgIG9wdGlvbmFsLiAgSWYgIG9uZSAgb2YgIHRoZXNlCisgICAgICAgb3B0aW9ucyAgZG9lcyAgaGF2ZSAgZGF0YSwgaXQgbXVzdCBiZSBnaXZlbiBpbiB0aGUgZmlyc3QgZm9ybSwgdXNpbmcgYW4KKyAgICAgICBlcXVhbHMgY2hhcmFjdGVyLiBPdGhlcndpc2UgcGNyZTJncmVwIHdpbGwgYXNzdW1lIHRoYXQgaXQgaGFzIG5vIGRhdGEuCisKKworTUFUQ0hJTkcgRVJST1JTCisKKyAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBzdXBwbHkgYSByZWd1bGFyIGV4cHJlc3Npb24gdGhhdCB0YWtlcyAgYSAgdmVyeSAgbG9uZworICAgICAgIHRpbWUgIHRvICBmYWlsICB0byAgbWF0Y2ggY2VydGFpbiBsaW5lcy4gU3VjaCBwYXR0ZXJucyBub3JtYWxseSBpbnZvbHZlCisgICAgICAgbmVzdGVkIGluZGVmaW5pdGUgcmVwZWF0cywgZm9yIGV4YW1wbGU6IChhKykqXGQgd2hlbiBtYXRjaGVkIGFnYWluc3QgIGEKKyAgICAgICBsaW5lICBvZiAgYSdzICB3aXRoICBubyAgZmluYWwgZGlnaXQuIFRoZSBQQ1JFMiBtYXRjaGluZyBmdW5jdGlvbiBoYXMgYQorICAgICAgIHJlc291cmNlIGxpbWl0IHRoYXQgY2F1c2VzIGl0IHRvIGFib3J0IGluIHRoZXNlIGNpcmN1bXN0YW5jZXMuIElmICB0aGlzCisgICAgICAgaGFwcGVucywgIHBjcmUyZ3JlcCAgb3V0cHV0cyAgYW4gZXJyb3IgbWVzc2FnZSBhbmQgdGhlIGxpbmUgdGhhdCBjYXVzZWQKKyAgICAgICB0aGUgcHJvYmxlbSB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtLiBJZiB0aGVyZSAgYXJlICBtb3JlICB0aGFuICAyMAorICAgICAgIHN1Y2ggZXJyb3JzLCBwY3JlMmdyZXAgZ2l2ZXMgdXAuCisKKyAgICAgICBUaGUgIC0tbWF0Y2gtbGltaXQgIG9wdGlvbiAgb2YgcGNyZTJncmVwIGNhbiBiZSB1c2VkIHRvIHNldCB0aGUgb3ZlcmFsbAorICAgICAgIHJlc291cmNlIGxpbWl0OyB0aGVyZSBpcyBhIHNlY29uZCBvcHRpb24gY2FsbGVkIC0tcmVjdXJzaW9uLWxpbWl0ICB0aGF0CisgICAgICAgc2V0cyAgYSBsaW1pdCBvbiB0aGUgYW1vdW50IG9mIG1lbW9yeSAodXN1YWxseSBzdGFjaykgdGhhdCBpcyB1c2VkIChzZWUKKyAgICAgICB0aGUgZGlzY3Vzc2lvbiBvZiB0aGVzZSBvcHRpb25zIGFib3ZlKS4KKworCitESUFHTk9TVElDUworCisgICAgICAgRXhpdCBzdGF0dXMgaXMgMCBpZiBhbnkgbWF0Y2hlcyB3ZXJlIGZvdW5kLCAxIGlmIG5vIG1hdGNoZXMgd2VyZSBmb3VuZCwKKyAgICAgICBhbmQgIDIgIGZvciBzeW50YXggZXJyb3JzLCBvdmVybG9uZyBsaW5lcywgbm9uLWV4aXN0ZW50IG9yIGluYWNjZXNzaWJsZQorICAgICAgIGZpbGVzIChldmVuIGlmIG1hdGNoZXMgd2VyZSBmb3VuZCBpbiBvdGhlciBmaWxlcykgb3IgdG9vIG1hbnkgIG1hdGNoaW5nCisgICAgICAgZXJyb3JzLiBVc2luZyB0aGUgLXMgb3B0aW9uIHRvIHN1cHByZXNzIGVycm9yIG1lc3NhZ2VzIGFib3V0IGluYWNjZXNzaS0KKyAgICAgICBibGUgZmlsZXMgZG9lcyBub3QgYWZmZWN0IHRoZSByZXR1cm4gY29kZS4KKworCitTRUUgQUxTTworCisgICAgICAgcGNyZTJwYXR0ZXJuKDMpLCBwY3JlMnN5bnRheCgzKS4KKworCitBVVRIT1IKKworICAgICAgIFBoaWxpcCBIYXplbAorICAgICAgIFVuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKKyAgICAgICBDYW1icmlkZ2UsIEVuZ2xhbmQuCisKKworUkVWSVNJT04KKworICAgICAgIExhc3QgdXBkYXRlZDogMDMgSmFudWFyeSAyMDE1CisgICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJqaXQuMyBiL2Rpc3QyL2RvYy9wY3JlMmppdC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyMTE3ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJqaXQuMwpAQCAtMCwwICsxLDQxNSBAQAorLlRIIFBDUkUySklUIDMgIjE0IE5vdmVtYmVyIDIwMTUiICJQQ1JFMiAxMC4yMSIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCAiUENSRTIgSlVTVC1JTi1USU1FIENPTVBJTEVSIFNVUFBPUlQiCisucnMKKy5zcAorSnVzdC1pbi10aW1lIGNvbXBpbGluZyBpcyBhIGhlYXZ5d2VpZ2h0IG9wdGltaXphdGlvbiB0aGF0IGNhbiBncmVhdGx5IHNwZWVkIHVwCitwYXR0ZXJuIG1hdGNoaW5nLiBIb3dldmVyLCBpdCBjb21lcyBhdCB0aGUgY29zdCBvZiBleHRyYSBwcm9jZXNzaW5nIGJlZm9yZSB0aGUKK21hdGNoIGlzIHBlcmZvcm1lZCwgc28gaXQgaXMgb2YgbW9zdCBiZW5lZml0IHdoZW4gdGhlIHNhbWUgcGF0dGVybiBpcyBnb2luZyB0bworYmUgbWF0Y2hlZCBtYW55IHRpbWVzLiBUaGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gbWFueSBjYWxscyBvZiBhIG1hdGNoaW5nCitmdW5jdGlvbjsgaWYgdGhlIHBhdHRlcm4gaXMgbm90IGFuY2hvcmVkLCBtYXRjaGluZyBhdHRlbXB0cyBtYXkgdGFrZSBwbGFjZSBtYW55Cit0aW1lcyBhdCB2YXJpb3VzIHBvc2l0aW9ucyBpbiB0aGUgc3ViamVjdCwgZXZlbiBmb3IgYSBzaW5nbGUgY2FsbC4gVGhlcmVmb3JlLAoraWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzIHZlcnkgbG9uZywgaXQgbWF5IHN0aWxsIHBheSB0byB1c2UgSklUIGV2ZW4gZm9yCitvbmUtb2ZmIG1hdGNoZXMuIEpJVCBzdXBwb3J0IGlzIGF2YWlsYWJsZSBmb3IgYWxsIG9mIHRoZSA4LWJpdCwgMTYtYml0IGFuZAorMzItYml0IFBDUkUyIGxpYnJhcmllcy4KKy5QCitKSVQgc3VwcG9ydCBhcHBsaWVzIG9ubHkgdG8gdGhlIHRyYWRpdGlvbmFsIFBlcmwtY29tcGF0aWJsZSBtYXRjaGluZyBmdW5jdGlvbi4KK0l0IGRvZXMgbm90IGFwcGx5IHdoZW4gdGhlIERGQSBtYXRjaGluZyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBUaGUgY29kZSBmb3IKK3RoaXMgc3VwcG9ydCB3YXMgd3JpdHRlbiBieSBab2x0YW4gSGVyY3plZy4KKy4KKy4KKy5TSCAiQVZBSUxBQklMSVRZIE9GIEpJVCBTVVBQT1JUIgorLnJzCisuc3AKK0pJVCBzdXBwb3J0IGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUgb2YgUENSRTIuIFRoZSAiY29uZmlndXJlIiBvcHRpb24KKy0tZW5hYmxlLWppdCAob3IgZXF1aXZhbGVudCBDTWFrZSBvcHRpb24pIG11c3QgYmUgc2V0IHdoZW4gUENSRTIgaXMgYnVpbHQgaWYKK3lvdSB3YW50IHRvIHVzZSBKSVQuIFRoZSBzdXBwb3J0IGlzIGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZyBoYXJkd2FyZQorcGxhdGZvcm1zOgorLnNwCisgIEFSTSAzMi1iaXQgKHY1LCB2NywgYW5kIFRodW1iMikKKyAgQVJNIDY0LWJpdAorICBJbnRlbCB4ODYgMzItYml0IGFuZCA2NC1iaXQKKyAgTUlQUyAzMi1iaXQgYW5kIDY0LWJpdAorICBQb3dlciBQQyAzMi1iaXQgYW5kIDY0LWJpdAorICBTUEFSQyAzMi1iaXQKKy5zcAorSWYgLS1lbmFibGUtaml0IGlzIHNldCBvbiBhbiB1bnN1cHBvcnRlZCBwbGF0Zm9ybSwgY29tcGlsYXRpb24gZmFpbHMuCisuUAorQSBwcm9ncmFtIGNhbiB0ZWxsIGlmIEpJVCBzdXBwb3J0IGlzIGF2YWlsYWJsZSBieSBjYWxsaW5nIFxmQnBjcmUyX2NvbmZpZygpXGZQCit3aXRoIHRoZSBQQ1JFMl9DT05GSUdfSklUIG9wdGlvbi4gVGhlIHJlc3VsdCBpcyAxIHdoZW4gSklUIGlzIGF2YWlsYWJsZSwgYW5kIDAKK290aGVyd2lzZS4gSG93ZXZlciwgYSBzaW1wbGUgcHJvZ3JhbSBkb2VzIG5vdCBuZWVkIHRvIGNoZWNrIHRoaXMgaW4gb3JkZXIgdG8KK3VzZSBKSVQuIFRoZSBBUEkgaXMgaW1wbGVtZW50ZWQgaW4gYSB3YXkgdGhhdCBmYWxscyBiYWNrIHRvIHRoZSBpbnRlcnByZXRpdmUKK2NvZGUgaWYgSklUIGlzIG5vdCBhdmFpbGFibGUuIEZvciBwcm9ncmFtcyB0aGF0IG5lZWQgdGhlIGJlc3QgcG9zc2libGUKK3BlcmZvcm1hbmNlLCB0aGVyZSBpcyBhbHNvIGEgImZhc3QgcGF0aCIgQVBJIHRoYXQgaXMgSklULXNwZWNpZmljLgorLgorLgorLlNIICJTSU1QTEUgVVNFIE9GIEpJVCIKKy5ycworLnNwCitUbyBtYWtlIHVzZSBvZiB0aGUgSklUIHN1cHBvcnQgaW4gdGhlIHNpbXBsZXN0IHdheSwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHRvCitjYWxsIFxmQnBjcmUyX2ppdF9jb21waWxlKClcZlAgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGNvbXBpbGluZyBhIHBhdHRlcm4gd2l0aAorXGZCcGNyZTJfY29tcGlsZSgpXGZQLiBUaGlzIGZ1bmN0aW9uIGhhcyB0d28gYXJndW1lbnRzOiB0aGUgZmlyc3QgaXMgdGhlCitjb21waWxlZCBwYXR0ZXJuIHBvaW50ZXIgdGhhdCB3YXMgcmV0dXJuZWQgYnkgXGZCcGNyZTJfY29tcGlsZSgpXGZQLCBhbmQgdGhlCitzZWNvbmQgaXMgemVybyBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uIGJpdHM6IFBDUkUyX0pJVF9DT01QTEVURSwKK1BDUkUyX0pJVF9QQVJUSUFMX0hBUkQsIG9yIFBDUkUyX0pJVF9QQVJUSUFMX1NPRlQuCisuUAorSWYgSklUIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSwgYSBjYWxsIHRvIFxmQnBjcmUyX2ppdF9jb21waWxlKClcZlAgZG9lcworbm90aGluZyBhbmQgcmV0dXJucyBQQ1JFMl9FUlJPUl9KSVRfQkFET1BUSU9OLiBPdGhlcndpc2UsIHRoZSBjb21waWxlZCBwYXR0ZXJuCitpcyBwYXNzZWQgdG8gdGhlIEpJVCBjb21waWxlciwgd2hpY2ggdHVybnMgaXQgaW50byBtYWNoaW5lIGNvZGUgdGhhdCBleGVjdXRlcworbXVjaCBmYXN0ZXIgdGhhbiB0aGUgbm9ybWFsIGludGVycHJldGl2ZSBjb2RlLCBidXQgeWllbGRzIGV4YWN0bHkgdGhlIHNhbWUKK3Jlc3VsdHMuIFRoZSByZXR1cm5lZCB2YWx1ZSBmcm9tIFxmQnBjcmUyX2ppdF9jb21waWxlKClcZlAgaXMgemVybyBvbiBzdWNjZXNzLAorb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgorLlAKK1RoZXJlIGlzIGEgbGltaXQgdG8gdGhlIHNpemUgb2YgcGF0dGVybiB0aGF0IEpJVCBzdXBwb3J0cywgaW1wb3NlZCBieSB0aGUgc2l6ZQorb2YgbWFjaGluZSBzdGFjayB0aGF0IGl0IHVzZXMuIFRoZSBleGFjdCBydWxlcyBhcmUgbm90IGRvY3VtZW50ZWQgYmVjYXVzZSB0aGV5CittYXkgY2hhbmdlIGF0IGFueSB0aW1lLCBpbiBwYXJ0aWN1bGFyLCB3aGVuIG5ldyBvcHRpbWl6YXRpb25zIGFyZSBpbnRyb2R1Y2VkLgorSWYgYSBwYXR0ZXJuIGlzIHRvbyBiaWcsIGEgY2FsbCB0byBcZkJwY3JlMl9qaXRfY29tcGlsZSgpXGZCIHJldHVybnMKK1BDUkUyX0VSUk9SX05PTUVNT1JZLgorLlAKK1BDUkUyX0pJVF9DT01QTEVURSByZXF1ZXN0cyB0aGUgSklUIGNvbXBpbGVyIHRvIGdlbmVyYXRlIGNvZGUgZm9yIGNvbXBsZXRlCittYXRjaGVzLiBJZiB5b3Ugd2FudCB0byBydW4gcGFydGlhbCBtYXRjaGVzIHVzaW5nIHRoZSBQQ1JFMl9QQVJUSUFMX0hBUkQgb3IKK1BDUkUyX1BBUlRJQUxfU09GVCBvcHRpb25zIG9mIFxmQnBjcmUyX21hdGNoKClcZlAsIHlvdSBzaG91bGQgc2V0IG9uZSBvciBib3RoCitvZiB0aGUgb3RoZXIgb3B0aW9ucyBhcyB3ZWxsIGFzLCBvciBpbnN0ZWFkIG9mIFBDUkUyX0pJVF9DT01QTEVURS4gVGhlIEpJVAorY29tcGlsZXIgZ2VuZXJhdGVzIGRpZmZlcmVudCBvcHRpbWl6ZWQgY29kZSBmb3IgZWFjaCBvZiB0aGUgdGhyZWUgbW9kZXMKKyhub3JtYWwsIHNvZnQgcGFydGlhbCwgaGFyZCBwYXJ0aWFsKS4gV2hlbiBcZkJwY3JlMl9tYXRjaCgpXGZQIGlzIGNhbGxlZCwgdGhlCithcHByb3ByaWF0ZSBjb2RlIGlzIHJ1biBpZiBpdCBpcyBhdmFpbGFibGUuIE90aGVyd2lzZSwgdGhlIHBhdHRlcm4gaXMgbWF0Y2hlZAordXNpbmcgaW50ZXJwcmV0aXZlIGNvZGUuCisuUAorWW91IGNhbiBjYWxsIFxmQnBjcmUyX2ppdF9jb21waWxlKClcZlAgbXVsdGlwbGUgdGltZXMgZm9yIHRoZSBzYW1lIGNvbXBpbGVkCitwYXR0ZXJuLiBJdCBkb2VzIG5vdGhpbmcgaWYgaXQgaGFzIHByZXZpb3VzbHkgY29tcGlsZWQgY29kZSBmb3IgYW55IG9mIHRoZQorb3B0aW9uIGJpdHMuIEZvciBleGFtcGxlLCB5b3UgY2FuIGNhbGwgaXQgb25jZSB3aXRoIFBDUkUyX0pJVF9DT01QTEVURSBhbmQKKyhwZXJoYXBzIGxhdGVyLCB3aGVuIHlvdSBmaW5kIHlvdSBuZWVkIHBhcnRpYWwgbWF0Y2hpbmcpIGFnYWluIHdpdGgKK1BDUkUyX0pJVF9DT01QTEVURSBhbmQgUENSRTJfSklUX1BBUlRJQUxfSEFSRC4gVGhpcyB0aW1lIGl0IHdpbGwgaWdub3JlCitQQ1JFMl9KSVRfQ09NUExFVEUgYW5kIGp1c3QgY29tcGlsZSBjb2RlIGZvciBwYXJ0aWFsIG1hdGNoaW5nLiBJZgorXGZCcGNyZTJfaml0X2NvbXBpbGUoKVxmUCBpcyBjYWxsZWQgd2l0aCBubyBvcHRpb24gYml0cyBzZXQsIGl0IGltbWVkaWF0ZWx5CityZXR1cm5zIHplcm8uIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgd2F5IG9mIHRlc3Rpbmcgd2hldGhlciBKSVQgaXMgYXZhaWxhYmxlLgorLlAKK0F0IHByZXNlbnQsIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBmcmVlIEpJVCBjb21waWxlZCBjb2RlIGV4Y2VwdCB3aGVuIHRoZSBlbnRpcmUKK2NvbXBpbGVkIHBhdHRlcm4gaXMgZnJlZWQgYnkgY2FsbGluZyBcZkJwY3JlMl9jb2RlX2ZyZWUoKVxmUC4KKy5QCitJbiBzb21lIGNpcmN1bXN0YW5jZXMgeW91IG1heSBuZWVkIHRvIGNhbGwgYWRkaXRpb25hbCBmdW5jdGlvbnMuIFRoZXNlIGFyZQorZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCisuXCIgSFRNTCA8YSBocmVmPSIjc3RhY2tjb250cm9sIj4KKy5cIiA8L2E+CisiQ29udHJvbGxpbmcgdGhlIEpJVCBzdGFjayIKKy5cIgorYmVsb3cuCisuUAorVGhlcmUgYXJlIHNvbWUgXGZCcGNyZTJfbWF0Y2goKVxmUCBvcHRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgSklULCBhbmQKK3RoZXJlIGFyZSBhbHNvIHNvbWUgcGF0dGVybiBpdGVtcyB0aGF0IEpJVCBjYW5ub3QgaGFuZGxlLiBEZXRhaWxzIGFyZSBnaXZlbgorYmVsb3cuIEluIGJvdGggY2FzZXMsIG1hdGNoaW5nIGF1dG9tYXRpY2FsbHkgZmFsbHMgYmFjayB0byB0aGUgaW50ZXJwcmV0aXZlCitjb2RlLiBJZiB5b3Ugd2FudCB0byBrbm93IHdoZXRoZXIgSklUIHdhcyBhY3R1YWxseSB1c2VkIGZvciBhIHBhcnRpY3VsYXIgbWF0Y2gsCit5b3Ugc2hvdWxkIGFycmFuZ2UgZm9yIGEgSklUIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIHNldCB1cCBhcyBkZXNjcmliZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkCisuXCIgSFRNTCA8YSBocmVmPSIjc3RhY2tjb250cm9sIj4KKy5cIiA8L2E+CisiQ29udHJvbGxpbmcgdGhlIEpJVCBzdGFjayIKKy5cIgorYmVsb3csIGV2ZW4gaWYgeW91IGRvIG5vdCBuZWVkIHRvIHN1cHBseSBhIG5vbi1kZWZhdWx0IEpJVCBzdGFjay4gU3VjaCBhCitjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgSklUIGNvZGUgaXMgYWJvdXQgdG8gYmUgb2JleWVkLiBJZiB0aGUKK21hdGNoLXRpbWUgb3B0aW9ucyBhcmUgbm90IHJpZ2h0IGZvciBKSVQgZXhlY3V0aW9uLCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMKK25vdCBvYmV5ZWQuCisuUAorSWYgdGhlIEpJVCBjb21waWxlciBmaW5kcyBhbiB1bnN1cHBvcnRlZCBpdGVtLCBubyBKSVQgZGF0YSBpcyBnZW5lcmF0ZWQuIFlvdQorY2FuIGZpbmQgb3V0IGlmIEpJVCBtYXRjaGluZyBpcyBhdmFpbGFibGUgYWZ0ZXIgY29tcGlsaW5nIGEgcGF0dGVybiBieSBjYWxsaW5nCitcZkJwY3JlMl9wYXR0ZXJuX2luZm8oKVxmUCB3aXRoIHRoZSBQQ1JFMl9JTkZPX0pJVFNJWkUgb3B0aW9uLiBBIG5vbi16ZXJvCityZXN1bHQgbWVhbnMgdGhhdCBKSVQgY29tcGlsYXRpb24gd2FzIHN1Y2Nlc3NmdWwuIEEgcmVzdWx0IG9mIDAgbWVhbnMgdGhhdCBKSVQKK3N1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSwgb3IgdGhlIHBhdHRlcm4gd2FzIG5vdCBwcm9jZXNzZWQgYnkKK1xmQnBjcmUyX2ppdF9jb21waWxlKClcZlAsIG9yIHRoZSBKSVQgY29tcGlsZXIgd2FzIG5vdCBhYmxlIHRvIGhhbmRsZSB0aGUKK3BhdHRlcm4uCisuCisuCisuU0ggIlVOU1VQUE9SVEVEIE9QVElPTlMgQU5EIFBBVFRFUk4gSVRFTVMiCisucnMKKy5zcAorVGhlIFxmQnBjcmUyX21hdGNoKClcZlAgb3B0aW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgZm9yIEpJVCBtYXRjaGluZyBhcmUKK1BDUkUyX05PVEJPTCwgUENSRTJfTk9URU9MLCBQQ1JFMl9OT1RFTVBUWSwgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwKK1BDUkUyX05PX1VURl9DSEVDSywgUENSRTJfUEFSVElBTF9IQVJELCBhbmQgUENSRTJfUEFSVElBTF9TT0ZULiBUaGUKK1BDUkUyX0FOQ0hPUkVEIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGF0IG1hdGNoIHRpbWUuCisuUAorVGhlIG9ubHkgdW5zdXBwb3J0ZWQgcGF0dGVybiBpdGVtcyBhcmUgXGVDIChtYXRjaCBhIHNpbmdsZSBkYXRhIHVuaXQpIHdoZW4KK3J1bm5pbmcgaW4gYSBVVEYgbW9kZSwgYW5kIGEgY2FsbG91dCBpbW1lZGlhdGVseSBiZWZvcmUgYW4gYXNzZXJ0aW9uIGNvbmRpdGlvbgoraW4gYSBjb25kaXRpb25hbCBncm91cC4KKy4KKy4KKy5TSCAiUkVUVVJOIFZBTFVFUyBGUk9NIEpJVCBNQVRDSElORyIKKy5ycworLnNwCitXaGVuIGEgcGF0dGVybiBpcyBtYXRjaGVkIHVzaW5nIEpJVCBtYXRjaGluZywgdGhlIHJldHVybiB2YWx1ZXMgYXJlIHRoZSBzYW1lCithcyB0aG9zZSBnaXZlbiBieSB0aGUgaW50ZXJwcmV0aXZlIFxmQnBjcmUyX21hdGNoKClcZlAgY29kZSwgd2l0aCB0aGUgYWRkaXRpb24KK29mIG9uZSBuZXcgZXJyb3IgY29kZTogUENSRTJfRVJST1JfSklUX1NUQUNLTElNSVQuIFRoaXMgbWVhbnMgdGhhdCB0aGUgbWVtb3J5Cit1c2VkIGZvciB0aGUgSklUIHN0YWNrIHdhcyBpbnN1ZmZpY2llbnQuIFNlZQorLlwiIEhUTUwgPGEgaHJlZj0iI3N0YWNrY29udHJvbCI+CisuXCIgPC9hPgorIkNvbnRyb2xsaW5nIHRoZSBKSVQgc3RhY2siCisuXCIKK2JlbG93IGZvciBhIGRpc2N1c3Npb24gb2YgSklUIHN0YWNrIHVzYWdlLgorLlAKK1RoZSBlcnJvciBjb2RlIFBDUkUyX0VSUk9SX01BVENITElNSVQgaXMgcmV0dXJuZWQgYnkgdGhlIEpJVCBjb2RlIGlmIHNlYXJjaGluZworYSB2ZXJ5IGxhcmdlIHBhdHRlcm4gdHJlZSBnb2VzIG9uIGZvciB0b28gbG9uZywgYXMgaXQgaXMgaW4gdGhlIHNhbWUKK2NpcmN1bXN0YW5jZSB3aGVuIEpJVCBpcyBub3QgdXNlZCwgYnV0IHRoZSBkZXRhaWxzIG9mIGV4YWN0bHkgd2hhdCBpcyBjb3VudGVkCithcmUgbm90IHRoZSBzYW1lLiBUaGUgUENSRTJfRVJST1JfUkVDVVJTSU9OTElNSVQgZXJyb3IgY29kZSBpcyBuZXZlciByZXR1cm5lZAord2hlbiBKSVQgbWF0Y2hpbmcgaXMgdXNlZC4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9InN0YWNrY29udHJvbCI+PC9hPgorLlNIICJDT05UUk9MTElORyBUSEUgSklUIFNUQUNLIgorLnJzCisuc3AKK1doZW4gdGhlIGNvbXBpbGVkIEpJVCBjb2RlIHJ1bnMsIGl0IG5lZWRzIGEgYmxvY2sgb2YgbWVtb3J5IHRvIHVzZSBhcyBhIHN0YWNrLgorQnkgZGVmYXVsdCwgaXQgdXNlcyAzMksgb24gdGhlIG1hY2hpbmUgc3RhY2suIEhvd2V2ZXIsIHNvbWUgbGFyZ2Ugb3IKK2NvbXBsaWNhdGVkIHBhdHRlcm5zIG5lZWQgbW9yZSB0aGFuIHRoaXMuIFRoZSBlcnJvciBQQ1JFMl9FUlJPUl9KSVRfU1RBQ0tMSU1JVAoraXMgZ2l2ZW4gd2hlbiB0aGVyZSBpcyBub3QgZW5vdWdoIHN0YWNrLiBUaHJlZSBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIGZvcgorbWFuYWdpbmcgYmxvY2tzIG9mIG1lbW9yeSBmb3IgdXNlIGFzIEpJVCBzdGFja3MuIFRoZXJlIGlzIGZ1cnRoZXIgZGlzY3Vzc2lvbgorYWJvdXQgdGhlIHVzZSBvZiBKSVQgc3RhY2tzIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCisuXCIgSFRNTCA8YSBocmVmPSIjc3RhY2tmYXEiPgorLlwiIDwvYT4KKyJKSVQgc3RhY2sgRkFRIgorLlwiCitiZWxvdy4KKy5QCitUaGUgXGZCcGNyZTJfaml0X3N0YWNrX2NyZWF0ZSgpXGZQIGZ1bmN0aW9uIGNyZWF0ZXMgYSBKSVQgc3RhY2suIEl0cyBhcmd1bWVudHMKK2FyZSBhIHN0YXJ0aW5nIHNpemUsIGEgbWF4aW11bSBzaXplLCBhbmQgYSBnZW5lcmFsIGNvbnRleHQgKGZvciBtZW1vcnkKK2FsbG9jYXRpb24gZnVuY3Rpb25zLCBvciBOVUxMIGZvciBzdGFuZGFyZCBtZW1vcnkgYWxsb2NhdGlvbikuIEl0IHJldHVybnMgYQorcG9pbnRlciB0byBhbiBvcGFxdWUgc3RydWN0dXJlIG9mIHR5cGUgXGZCcGNyZTJfaml0X3N0YWNrXGZQLCBvciBOVUxMIGlmIHRoZXJlCitpcyBhbiBlcnJvci4gVGhlIFxmQnBjcmUyX2ppdF9zdGFja19mcmVlKClcZlAgZnVuY3Rpb24gaXMgdXNlZCB0byBmcmVlIGEgc3RhY2sKK3RoYXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gKEZvciB0aGUgdGVjaG5pY2FsbHkgbWluZGVkOiB0aGUgYWRkcmVzcyBzcGFjZSBpcworYWxsb2NhdGVkIGJ5IG1tYXAgb3IgVmlydHVhbEFsbG9jLikKKy5QCitKSVQgdXNlcyBmYXIgbGVzcyBtZW1vcnkgZm9yIHJlY3Vyc2lvbiB0aGFuIHRoZSBpbnRlcnByZXRpdmUgY29kZSwKK2FuZCBhIG1heGltdW0gc3RhY2sgc2l6ZSBvZiA1MTJLIHRvIDFNIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoIGZvciBhbnkKK3BhdHRlcm4uCisuUAorVGhlIFxmQnBjcmUyX2ppdF9zdGFja19hc3NpZ24oKVxmUCBmdW5jdGlvbiBzcGVjaWZpZXMgd2hpY2ggc3RhY2sgSklUIGNvZGUKK3Nob3VsZCB1c2UuIEl0cyBhcmd1bWVudHMgYXJlIGFzIGZvbGxvd3M6Cisuc3AKKyAgcGNyZTJfbWF0Y2hfY29udGV4dCAgKm1jb250ZXh0CisgIHBjcmUyX2ppdF9jYWxsYmFjayAgICBjYWxsYmFjaworICB2b2lkICAgICAgICAgICAgICAgICAqZGF0YQorLnNwCitUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSBwb2ludGVyIHRvIGEgbWF0Y2ggY29udGV4dC4gV2hlbiB0aGlzIGlzIHN1YnNlcXVlbnRseQorcGFzc2VkIHRvIGEgbWF0Y2hpbmcgZnVuY3Rpb24sIGl0cyBpbmZvcm1hdGlvbiBkZXRlcm1pbmVzIHdoaWNoIEpJVCBzdGFjayBpcwordXNlZC4gVGhlcmUgYXJlIHRocmVlIGNhc2VzIGZvciB0aGUgdmFsdWVzIG9mIHRoZSBvdGhlciB0d28gb3B0aW9uczoKKy5zcAorICAoMSkgSWYgXGZJY2FsbGJhY2tcZlAgaXMgTlVMTCBhbmQgXGZJZGF0YVxmUCBpcyBOVUxMLCBhbiBpbnRlcm5hbCAzMksgYmxvY2sKKyAgICAgIG9uIHRoZSBtYWNoaW5lIHN0YWNrIGlzIHVzZWQuIFRoaXMgaXMgdGhlIGRlZmF1bHQgd2hlbiBhIG1hdGNoCisgICAgICBjb250ZXh0IGlzIGNyZWF0ZWQuCisuc3AKKyAgKDIpIElmIFxmSWNhbGxiYWNrXGZQIGlzIE5VTEwgYW5kIFxmSWRhdGFcZlAgaXMgbm90IE5VTEwsIFxmSWRhdGFcZlAgbXVzdCBiZQorICAgICAgYSBwb2ludGVyIHRvIGEgdmFsaWQgSklUIHN0YWNrLCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcKKyAgICAgIFxmQnBjcmUyX2ppdF9zdGFja19jcmVhdGUoKVxmUC4KKy5zcAorICAoMykgSWYgXGZJY2FsbGJhY2tcZlAgaXMgbm90IE5VTEwsIGl0IG11c3QgcG9pbnQgdG8gYSBmdW5jdGlvbiB0aGF0IGlzCisgICAgICBjYWxsZWQgd2l0aCBcZklkYXRhXGZQIGFzIGFuIGFyZ3VtZW50IGF0IHRoZSBzdGFydCBvZiBtYXRjaGluZywgaW4KKyAgICAgIG9yZGVyIHRvIHNldCB1cCBhIEpJVCBzdGFjay4gSWYgdGhlIHJldHVybiBmcm9tIHRoZSBjYWxsYmFjaworICAgICAgZnVuY3Rpb24gaXMgTlVMTCwgdGhlIGludGVybmFsIDMySyBzdGFjayBpcyB1c2VkOyBvdGhlcndpc2UgdGhlCisgICAgICByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHZhbGlkIEpJVCBzdGFjaywgdGhlIHJlc3VsdCBvZiBjYWxsaW5nCisgICAgICBcZkJwY3JlMl9qaXRfc3RhY2tfY3JlYXRlKClcZlAuCisuc3AKK0EgY2FsbGJhY2sgZnVuY3Rpb24gaXMgb2JleWVkIHdoZW5ldmVyIEpJVCBjb2RlIGlzIGFib3V0IHRvIGJlIHJ1bjsgaXQgaXMgbm90CitvYmV5ZWQgd2hlbiBcZkJwY3JlMl9tYXRjaCgpXGZQIGlzIGNhbGxlZCB3aXRoIG9wdGlvbnMgdGhhdCBhcmUgaW5jb21wYXRpYmxlCitmb3IgSklUIG1hdGNoaW5nLiBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiB0aGVyZWZvcmUgYmUgdXNlZCB0byBkZXRlcm1pbmUKK3doZXRoZXIgYSBtYXRjaCBvcGVyYXRpb24gd2FzIGV4ZWN1dGVkIGJ5IEpJVCBvciBieSB0aGUgaW50ZXJwcmV0ZXIuCisuUAorWW91IG1heSBzYWZlbHkgdXNlIHRoZSBzYW1lIEpJVCBzdGFjayBmb3IgbW9yZSB0aGFuIG9uZSBwYXR0ZXJuIChlaXRoZXIgYnkKK2Fzc2lnbmluZyBkaXJlY3RseSBvciBieSBjYWxsYmFjayksIGFzIGxvbmcgYXMgdGhlIHBhdHRlcm5zIGFyZSBtYXRjaGVkCitzZXF1ZW50aWFsbHkgaW4gdGhlIHNhbWUgdGhyZWFkLiBDdXJyZW50bHksIHRoZSBvbmx5IHdheSB0byBzZXQgdXAKK25vbi1zZXF1ZW50aWFsIG1hdGNoZXMgaW4gb25lIHRocmVhZCBpcyB0byB1c2UgY2FsbG91dHM6IGlmIGEgY2FsbG91dCBmdW5jdGlvbgorc3RhcnRzIGFub3RoZXIgbWF0Y2gsIHRoYXQgbWF0Y2ggbXVzdCB1c2UgYSBkaWZmZXJlbnQgSklUIHN0YWNrIHRvIHRoZSBvbmUgdXNlZAorZm9yIGN1cnJlbnRseSBzdXNwZW5kZWQgbWF0Y2goZXMpLgorLlAKK0luIGEgbXVsdGl0aHJlYWQgYXBwbGljYXRpb24sIGlmIHlvdSBkbyBub3QKK3NwZWNpZnkgYSBKSVQgc3RhY2ssIG9yIGlmIHlvdSBhc3NpZ24gb3IgcGFzcyBiYWNrIE5VTEwgZnJvbSBhIGNhbGxiYWNrLCB0aGF0CitpcyB0aHJlYWQtc2FmZSwgYmVjYXVzZSBlYWNoIHRocmVhZCBoYXMgaXRzIG93biBtYWNoaW5lIHN0YWNrLiBIb3dldmVyLCBpZiB5b3UKK2Fzc2lnbiBvciBwYXNzIGJhY2sgYSBub24tTlVMTCBKSVQgc3RhY2ssIHRoaXMgbXVzdCBiZSBhIGRpZmZlcmVudCBzdGFjayBmb3IKK2VhY2ggdGhyZWFkIHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGlzIHRocmVhZC1zYWZlLgorLlAKK1N0cmljdGx5IHNwZWFraW5nLCBldmVuIG1vcmUgaXMgYWxsb3dlZC4gWW91IGNhbiBhc3NpZ24gdGhlIHNhbWUgbm9uLU5VTEwgc3RhY2sKK3RvIGEgbWF0Y2ggY29udGV4dCB0aGF0IGlzIHVzZWQgYnkgYW55IG51bWJlciBvZiBwYXR0ZXJucywgYXMgbG9uZyBhcyB0aGV5IGFyZQorbm90IHVzZWQgZm9yIG1hdGNoaW5nIGJ5IG11bHRpcGxlIHRocmVhZHMgYXQgdGhlIHNhbWUgdGltZS4gRm9yIGV4YW1wbGUsIHlvdQorY291bGQgdXNlIHRoZSBzYW1lIHN0YWNrIGluIGFsbCBjb21waWxlZCBwYXR0ZXJucywgd2l0aCBhIGdsb2JhbCBtdXRleCBpbiB0aGUKK2NhbGxiYWNrIHRvIHdhaXQgdW50aWwgdGhlIHN0YWNrIGlzIGF2YWlsYWJsZSBmb3IgdXNlLiBIb3dldmVyLCB0aGlzIGlzIGFuCitpbmVmZmljaWVudCBzb2x1dGlvbiwgYW5kIG5vdCByZWNvbW1lbmRlZC4KKy5QCitUaGlzIGlzIGEgc3VnZ2VzdGlvbiBmb3IgaG93IGEgbXVsdGl0aHJlYWRlZCBwcm9ncmFtIHRoYXQgbmVlZHMgdG8gc2V0IHVwCitub24tZGVmYXVsdCBKSVQgc3RhY2tzIG1pZ2h0IG9wZXJhdGU6Cisuc3AKKyAgRHVyaW5nIHRocmVhZCBpbml0YWxpemF0aW9uCisgICAgdGhyZWFkX2xvY2FsX3ZhciA9IHBjcmUyX2ppdF9zdGFja19jcmVhdGUoLi4uKQorLnNwCisgIER1cmluZyB0aHJlYWQgZXhpdAorICAgIHBjcmUyX2ppdF9zdGFja19mcmVlKHRocmVhZF9sb2NhbF92YXIpCisuc3AKKyAgVXNlIGEgb25lLWxpbmUgY2FsbGJhY2sgZnVuY3Rpb24KKyAgICByZXR1cm4gdGhyZWFkX2xvY2FsX3ZhcgorLnNwCitBbGwgdGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdGhpbmcgaWYgSklUIGlzIG5vdCBhdmFpbGFibGUuCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJzdGFja2ZhcSI+PC9hPgorLlNIICJKSVQgU1RBQ0sgRkFRIgorLnJzCisuc3AKKygxKSBXaHkgZG8gd2UgbmVlZCBKSVQgc3RhY2tzPworLnNwCitQQ1JFMiAoYW5kIEpJVCkgaXMgYSByZWN1cnNpdmUsIGRlcHRoLWZpcnN0IGVuZ2luZSwgc28gaXQgbmVlZHMgYSBzdGFjayB3aGVyZQordGhlIGxvY2FsIGRhdGEgb2YgdGhlIGN1cnJlbnQgbm9kZSBpcyBwdXNoZWQgYmVmb3JlIGNoZWNraW5nIGl0cyBjaGlsZCBub2Rlcy4KK0FsbG9jYXRpbmcgcmVhbCBtYWNoaW5lIHN0YWNrIG9uIHNvbWUgcGxhdGZvcm1zIGlzIGRpZmZpY3VsdC4gRm9yIGV4YW1wbGUsIHRoZQorc3RhY2sgY2hhaW4gbmVlZHMgdG8gYmUgdXBkYXRlZCBldmVyeSB0aW1lIGlmIHdlIGV4dGVuZCB0aGUgc3RhY2sgb24gUG93ZXJQQy4KK0FsdGhvdWdoIGl0IGlzIHBvc3NpYmxlLCBpdHMgdXBkYXRpbmcgdGltZSBvdmVyaGVhZCBkZWNyZWFzZXMgcGVyZm9ybWFuY2UuIFNvCit3ZSBkbyB0aGUgcmVjdXJzaW9uIGluIG1lbW9yeS4KKy5QCisoMikgV2h5IGRvbid0IHdlIHNpbXBseSBhbGxvY2F0ZSBibG9ja3Mgb2YgbWVtb3J5IHdpdGggXGZCbWFsbG9jKClcZlA/Cisuc3AKK01vZGVybiBvcGVyYXRpbmcgc3lzdGVtcyBoYXZlIGEgbmljZSBmZWF0dXJlOiB0aGV5IGNhbiByZXNlcnZlIGFuIGFkZHJlc3Mgc3BhY2UKK2luc3RlYWQgb2YgYWxsb2NhdGluZyBtZW1vcnkuIFdlIGNhbiBzYWZlbHkgYWxsb2NhdGUgbWVtb3J5IHBhZ2VzIGluc2lkZSB0aGlzCithZGRyZXNzIHNwYWNlLCBzbyB0aGUgc3RhY2sgY291bGQgZ3JvdyB3aXRob3V0IG1vdmluZyBtZW1vcnkgZGF0YSAodGhpcyBpcworaW1wb3J0YW50IGJlY2F1c2Ugb2YgcG9pbnRlcnMpLiBUaHVzIHdlIGNhbiBhbGxvY2F0ZSAxTSBhZGRyZXNzIHNwYWNlLCBhbmQgdXNlCitvbmx5IGEgc2luZ2xlIG1lbW9yeSBwYWdlICh1c3VhbGx5IDRLKSBpZiB0aGF0IGlzIGVub3VnaC4gSG93ZXZlciwgd2UgY2FuIHN0aWxsCitncm93IHVwIHRvIDFNIGFueXRpbWUgaWYgbmVlZGVkLgorLlAKKygzKSBXaG8gIm93bnMiIGEgSklUIHN0YWNrPworLnNwCitUaGUgb3duZXIgb2YgdGhlIHN0YWNrIGlzIHRoZSB1c2VyIHByb2dyYW0sIG5vdCB0aGUgSklUIHN0dWRpZWQgcGF0dGVybiBvcgorYW55dGhpbmcgZWxzZS4gVGhlIHVzZXIgcHJvZ3JhbSBtdXN0IGVuc3VyZSB0aGF0IGlmIGEgc3RhY2sgaXMgYmVpbmcgdXNlZCBieQorXGZCcGNyZTJfbWF0Y2goKVxmUCwgKHRoYXQgaXMsIGl0IGlzIGFzc2lnbmVkIHRvIGEgbWF0Y2ggY29udGV4dCB0aGF0IGlzIHBhc3NlZAordG8gdGhlIHBhdHRlcm4gY3VycmVudGx5IHJ1bm5pbmcpLCB0aGF0IHN0YWNrIG11c3Qgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyCit0aHJlYWRzICh0byBhdm9pZCBvdmVyd3JpdGluZyB0aGUgc2FtZSBtZW1vcnkgYXJlYSkuIFRoZSBiZXN0IHByYWN0aWNlIGZvcgorbXVsdGl0aHJlYWRlZCBwcm9ncmFtcyBpcyB0byBhbGxvY2F0ZSBhIHN0YWNrIGZvciBlYWNoIHRocmVhZCwgYW5kIHJldHVybiB0aGlzCitzdGFjayB0aHJvdWdoIHRoZSBKSVQgY2FsbGJhY2sgZnVuY3Rpb24uCisuUAorKDQpIFdoZW4gc2hvdWxkIGEgSklUIHN0YWNrIGJlIGZyZWVkPworLnNwCitZb3UgY2FuIGZyZWUgYSBKSVQgc3RhY2sgYXQgYW55IHRpbWUsIGFzIGxvbmcgYXMgaXQgd2lsbCBub3QgYmUgdXNlZCBieQorXGZCcGNyZTJfbWF0Y2goKVxmUCBhZ2Fpbi4gV2hlbiB5b3UgYXNzaWduIHRoZSBzdGFjayB0byBhIG1hdGNoIGNvbnRleHQsIG9ubHkgYQorcG9pbnRlciBpcyBzZXQuIFRoZXJlIGlzIG5vIHJlZmVyZW5jZSBjb3VudGluZyBvciBhbnkgb3RoZXIgbWFnaWMuIFlvdSBjYW4gZnJlZQorY29tcGlsZWQgcGF0dGVybnMsIGNvbnRleHRzLCBhbmQgc3RhY2tzIGluIGFueSBvcmRlciwgYW55dGltZS4gSnVzdCBcZklkbworbm90XGZQIGNhbGwgXGZCcGNyZTJfbWF0Y2goKVxmUCB3aXRoIGEgbWF0Y2ggY29udGV4dCBwb2ludGluZyB0byBhbiBhbHJlYWR5CitmcmVlZCBzdGFjaywgYXMgdGhhdCB3aWxsIGNhdXNlIFNFR0ZBVUxULiAoQWxzbywgZG8gbm90IGZyZWUgYSBzdGFjayBjdXJyZW50bHkKK3VzZWQgYnkgXGZCcGNyZTJfbWF0Y2goKVxmUCBpbiBhbm90aGVyIHRocmVhZCkuIFlvdSBjYW4gYWxzbyByZXBsYWNlIHRoZSBzdGFjaworaW4gYSBjb250ZXh0IGF0IGFueSB0aW1lIHdoZW4gaXQgaXMgbm90IGluIHVzZS4gWW91IHNob3VsZCBmcmVlIHRoZSBwcmV2aW91cworc3RhY2sgYmVmb3JlIGFzc2lnbmluZyBhIHJlcGxhY2VtZW50LgorLlAKKyg1KSBTaG91bGQgSSBhbGxvY2F0ZS9mcmVlIGEgc3RhY2sgZXZlcnkgdGltZSBiZWZvcmUvYWZ0ZXIgY2FsbGluZworXGZCcGNyZTJfbWF0Y2goKVxmUD8KKy5zcAorTm8sIGJlY2F1c2UgdGhpcyBpcyB0b28gY29zdGx5IGluIHRlcm1zIG9mIHJlc291cmNlcy4gSG93ZXZlciwgeW91IGNvdWxkCitpbXBsZW1lbnQgc29tZSBjbGV2ZXIgaWRlYSB3aGljaCByZWxlYXNlIHRoZSBzdGFjayBpZiBpdCBpcyBub3QgdXNlZCBpbiBsZXQncworc2F5IHR3byBtaW51dGVzLiBUaGUgSklUIGNhbGxiYWNrIGNhbiBoZWxwIHRvIGFjaGlldmUgdGhpcyB3aXRob3V0IGtlZXBpbmcgYQorbGlzdCBvZiBwYXR0ZXJucy4KKy5QCisoNikgT0ssIHRoZSBzdGFjayBpcyBmb3IgbG9uZyB0ZXJtIG1lbW9yeSBhbGxvY2F0aW9uLiBCdXQgd2hhdCBoYXBwZW5zIGlmIGEKK3BhdHRlcm4gY2F1c2VzIHN0YWNrIG92ZXJmbG93IHdpdGggYSBzdGFjayBvZiAxTT8gSXMgdGhhdCAxTSBrZXB0IHVudGlsIHRoZQorc3RhY2sgaXMgZnJlZWQ/Cisuc3AKK0VzcGVjaWFsbHkgb24gZW1iZWRkZWQgc3l0ZW1zLCBpdCBtaWdodCBiZSBhIGdvb2QgaWRlYSB0byByZWxlYXNlIG1lbW9yeQorc29tZXRpbWVzIHdpdGhvdXQgZnJlZWluZyB0aGUgc3RhY2suIFRoZXJlIGlzIG5vIEFQSSBmb3IgdGhpcyBhdCB0aGUgbW9tZW50LgorUHJvYmFibHkgYSBmdW5jdGlvbiBjYWxsIHdoaWNoIHJldHVybnMgd2l0aCB0aGUgY3VycmVudGx5IGFsbG9jYXRlZCBtZW1vcnkgZm9yCithbnkgc3RhY2sgYW5kIGFub3RoZXIgd2hpY2ggYWxsb3dzIHJlbGVhc2luZyBtZW1vcnkgKHNocmlua2luZyB0aGUgc3RhY2spIHdvdWxkCitiZSBhIGdvb2QgaWRlYSBpZiBzb21lb25lIG5lZWRzIHRoaXMuCisuUAorKDcpIFRoaXMgaXMgdG9vIG11Y2ggb2YgYSBoZWFkYWNoZS4gSXNuJ3QgdGhlcmUgYW55IGJldHRlciBzb2x1dGlvbiBmb3IgSklUCitzdGFjayBoYW5kbGluZz8KKy5zcAorTm8sIHRoYW5rcyB0byBXaW5kb3dzLiBJZiBQT1NJWCB0aHJlYWRzIHdlcmUgdXNlZCBldmVyeXdoZXJlLCB3ZSBjb3VsZCB0aHJvdworb3V0IHRoaXMgY29tcGxpY2F0ZWQgQVBJLgorLgorLgorLlNIICJGUkVFSU5HIEpJVCBTUEVDVUxBVElWRSBNRU1PUlkiCisucnMKKy5zcAorLm5mCisuQiB2b2lkIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7CisuZmkKKy5QCitUaGUgSklUIGV4ZWN1dGFibGUgYWxsb2NhdG9yIGRvZXMgbm90IGZyZWUgYWxsIG1lbW9yeSB3aGVuIGl0IGlzIHBvc3NpYmxlLgorSXQgZXhwZWN0cyBuZXcgYWxsb2NhdGlvbnMsIGFuZCBrZWVwcyBzb21lIGZyZWUgbWVtb3J5IGFyb3VuZCB0byBpbXByb3ZlCithbGxvY2F0aW9uIHNwZWVkLiBIb3dldmVyLCBpbiBsb3cgbWVtb3J5IGNvbmRpdGlvbnMsIGl0IG1pZ2h0IGJlIGJldHRlciB0byBmcmVlCithbGwgcG9zc2libGUgbWVtb3J5LiBZb3UgY2FuIGNhdXNlIHRoaXMgdG8gaGFwcGVuIGJ5IGNhbGxpbmcKK3BjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkoKS4gSXRzIGFyZ3VtZW50IGlzIGEgZ2VuZXJhbCBjb250ZXh0LCBmb3IgY3VzdG9tCittZW1vcnkgbWFuYWdlbWVudCwgb3IgTlVMTCBmb3Igc3RhbmRhcmQgbWVtb3J5IG1hbmFnZW1lbnQuCisuCisuCisuU0ggIkVYQU1QTEUgQ09ERSIKKy5ycworLnNwCitUaGlzIGlzIGEgc2luZ2xlLXRocmVhZGVkIGV4YW1wbGUgdGhhdCBzcGVjaWZpZXMgYSBKSVQgc3RhY2sgd2l0aG91dCB1c2luZyBhCitjYWxsYmFjay4gQSByZWFsIHByb2dyYW0gc2hvdWxkIGluY2x1ZGUgZXJyb3IgY2hlY2tpbmcgYWZ0ZXIgYWxsIHRoZSBmdW5jdGlvbgorY2FsbHMuCisuc3AKKyAgaW50IHJjOworICBwY3JlMl9jb2RlICpyZTsKKyAgcGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YTsKKyAgcGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQ7CisgIHBjcmUyX2ppdF9zdGFjayAqaml0X3N0YWNrOworLnNwCisgIHJlID0gcGNyZTJfY29tcGlsZShwYXR0ZXJuLCBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsIDAsCisgICAgJmVycm9ybnVtYmVyLCAmZXJyb2Zmc2V0LCBOVUxMKTsKKyAgcmMgPSBwY3JlMl9qaXRfY29tcGlsZShyZSwgUENSRTJfSklUX0NPTVBMRVRFKTsKKyAgbWNvbnRleHQgPSBwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZShOVUxMKTsKKyAgaml0X3N0YWNrID0gcGNyZTJfaml0X3N0YWNrX2NyZWF0ZSgzMioxMDI0LCA1MTIqMTAyNCwgTlVMTCk7CisgIHBjcmUyX2ppdF9zdGFja19hc3NpZ24obWNvbnRleHQsIE5VTEwsIGppdF9zdGFjayk7CisgIG1hdGNoX2RhdGEgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZShyZSwgMTApOworICByYyA9IHBjcmUyX21hdGNoKHJlLCBzdWJqZWN0LCBsZW5ndGgsIDAsIDAsIG1hdGNoX2RhdGEsIG1jb250ZXh0KTsKKyAgLyogUHJvY2VzcyByZXN1bHQgKi8KKy5zcAorICBwY3JlMl9jb2RlX2ZyZWUocmUpOworICBwY3JlMl9tYXRjaF9kYXRhX2ZyZWUobWF0Y2hfZGF0YSk7CisgIHBjcmUyX21hdGNoX2NvbnRleHRfZnJlZShtY29udGV4dCk7CisgIHBjcmUyX2ppdF9zdGFja19mcmVlKGppdF9zdGFjayk7Cisuc3AKKy4KKy4KKy5TSCAiSklUIEZBU1QgUEFUSCBBUEkiCisucnMKKy5zcAorQmVjYXVzZSB0aGUgQVBJIGRlc2NyaWJlZCBhYm92ZSBmYWxscyBiYWNrIHRvIGludGVycHJldGVkIG1hdGNoaW5nIHdoZW4gSklUIGlzCitub3QgYXZhaWxhYmxlLCBpdCBpcyBjb252ZW5pZW50IGZvciBwcm9ncmFtcyB0aGF0IGFyZSB3cml0dGVuIGZvciBnZW5lcmFsIHVzZQoraW4gbWFueSBlbnZpcm9ubWVudHMuIEhvd2V2ZXIsIGNhbGxpbmcgSklUIHZpYSBcZkJwY3JlMl9tYXRjaCgpXGZQIGRvZXMgaGF2ZSBhCitwZXJmb3JtYW5jZSBpbXBhY3QuIFByb2dyYW1zIHRoYXQgYXJlIHdyaXR0ZW4gZm9yIHVzZSB3aGVyZSBKSVQgaXMga25vd24gdG8gYmUKK2F2YWlsYWJsZSwgYW5kIHdoaWNoIG5lZWQgdGhlIGJlc3QgcG9zc2libGUgcGVyZm9ybWFuY2UsIGNhbiBpbnN0ZWFkIHVzZSBhCisiZmFzdCBwYXRoIiBBUEkgdG8gY2FsbCBKSVQgbWF0Y2hpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBjYWxsaW5nCitcZkJwY3JlMl9tYXRjaCgpXGZQIChvYnZpb3VzbHkgb25seSBmb3IgcGF0dGVybnMgdGhhdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5Citwcm9jZXNzZWQgYnkgXGZCcGNyZTJfaml0X2NvbXBpbGUoKVxmUCkuCisuUAorVGhlIGZhc3QgcGF0aCBmdW5jdGlvbiBpcyBjYWxsZWQgXGZCcGNyZTJfaml0X21hdGNoKClcZlAsIGFuZCBpdCB0YWtlcyBleGFjdGx5Cit0aGUgc2FtZSBhcmd1bWVudHMgYXMgXGZCcGNyZTJfbWF0Y2goKVxmUC4gVGhlIHJldHVybiB2YWx1ZXMgYXJlIGFsc28gdGhlIHNhbWUsCitwbHVzIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04gaWYgYSBtYXRjaGluZyBtb2RlIChwYXJ0aWFsIG9yIGNvbXBsZXRlKSBpcworcmVxdWVzdGVkIHRoYXQgd2FzIG5vdCBjb21waWxlZC4gVW5zdXBwb3J0ZWQgb3B0aW9uIGJpdHMgKGZvciBleGFtcGxlLAorUENSRTJfQU5DSE9SRUQpIGFyZSBpZ25vcmVkLgorLlAKK1doZW4geW91IGNhbGwgXGZCcGNyZTJfbWF0Y2goKVxmUCwgYXMgd2VsbCBhcyB0ZXN0aW5nIGZvciBpbnZhbGlkIG9wdGlvbnMsIGEKK251bWJlciBvZiBvdGhlciBzYW5pdHkgY2hlY2tzIGFyZSBwZXJmb3JtZWQgb24gdGhlIGFyZ3VtZW50cy4gRm9yIGV4YW1wbGUsIGlmCit0aGUgc3ViamVjdCBwb2ludGVyIGlzIE5VTEwsIGFuIGltbWVkaWF0ZSBlcnJvciBpcyBnaXZlbi4gQWxzbywgdW5sZXNzCitQQ1JFMl9OT19VVEZfQ0hFQ0sgaXMgc2V0LCBhIFVURiBzdWJqZWN0IHN0cmluZyBpcyB0ZXN0ZWQgZm9yIHZhbGlkaXR5LiBJbiB0aGUKK2ludGVyZXN0cyBvZiBzcGVlZCwgdGhlc2UgY2hlY2tzIGRvIG5vdCBoYXBwZW4gb24gdGhlIEpJVCBmYXN0IHBhdGgsIGFuZCBpZgoraW52YWxpZCBkYXRhIGlzIHBhc3NlZCwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuCisuUAorQnlwYXNzaW5nIHRoZSBzYW5pdHkgY2hlY2tzIGFuZCB0aGUgXGZCcGNyZTJfbWF0Y2goKVxmUCB3cmFwcGluZyBjYW4gZ2l2ZQorc3BlZWR1cHMgb2YgbW9yZSB0aGFuIDEwJS4KKy4KKy4KKy5TSCAiU0VFIEFMU08iCisucnMKKy5zcAorXGZCcGNyZTJhcGlcZlAoMykKKy4KKy4KKy5TSCBBVVRIT1IKKy5ycworLnNwCisubmYKK1BoaWxpcCBIYXplbCAoRkFRIGJ5IFpvbHRhbiBIZXJjemVnKQorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorQ2FtYnJpZGdlLCBFbmdsYW5kLgorLmZpCisuCisuCisuU0ggUkVWSVNJT04KKy5ycworLnNwCisubmYKK0xhc3QgdXBkYXRlZDogMTQgTm92ZW1iZXIgMjAxNQorQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCisuZmkKZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMmxpbWl0cy4zIGIvZGlzdDIvZG9jL3BjcmUybGltaXRzLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViYWI4MQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMmxpbWl0cy4zCkBAIC0wLDAgKzEsODAgQEAKKy5USCBQQ1JFMkxJTUlUUyAzICIwNSBOb3ZlbWJlciAyMDE1IiAiUENSRTIgMTAuMjEiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggIlNJWkUgQU5EIE9USEVSIExJTUlUQVRJT05TIgorLnJzCisuc3AKK1RoZXJlIGFyZSBzb21lIHNpemUgbGltaXRhdGlvbnMgaW4gUENSRTIgYnV0IGl0IGlzIGhvcGVkIHRoYXQgdGhleSB3aWxsIG5ldmVyCitpbiBwcmFjdGljZSBiZSByZWxldmFudC4KKy5QCitUaGUgbWF4aW11bSBzaXplIG9mIGEgY29tcGlsZWQgcGF0dGVybiBpcyBhcHByb3hpbWF0ZWx5IDY0SyBjb2RlIHVuaXRzIGZvciB0aGUKKzgtYml0IGFuZCAxNi1iaXQgbGlicmFyaWVzIGlmIFBDUkUyIGlzIGNvbXBpbGVkIHdpdGggdGhlIGRlZmF1bHQgaW50ZXJuYWwKK2xpbmthZ2Ugc2l6ZSwgd2hpY2ggaXMgMiBieXRlcyBmb3IgdGhlc2UgbGlicmFyaWVzLiBJZiB5b3Ugd2FudCB0byBwcm9jZXNzCityZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgYXJlIHRydWx5IGVub3Jtb3VzLCB5b3UgY2FuIGNvbXBpbGUgUENSRTIgd2l0aCBhbgoraW50ZXJuYWwgbGlua2FnZSBzaXplIG9mIDMgb3IgNCAod2hlbiBidWlsZGluZyB0aGUgMTYtYml0IGxpYnJhcnksIDMgaXMgcm91bmRlZAordXAgdG8gNCkuIFNlZSB0aGUgXGZCUkVBRE1FXGZQIGZpbGUgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24gYW5kIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYnVpbGRcZlAKKy5cIgorZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4gSW4gdGhlc2UgY2FzZXMgdGhlIGxpbWl0IGlzIHN1YnN0YW50aWFsbHkgbGFyZ2VyLgorSG93ZXZlciwgdGhlIHNwZWVkIG9mIGV4ZWN1dGlvbiBpcyBzbG93ZXIuIEluIHRoZSAzMi1iaXQgbGlicmFyeSwgdGhlIGludGVybmFsCitsaW5rYWdlIHNpemUgaXMgYWx3YXlzIDQuCisuUAorVGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgc291cmNlIHBhdHRlcm4gc3RyaW5nIGlzIGVzc2VudGlhbGx5IHVubGltaXRlZDsgaXQgaXMKK3RoZSBsYXJnZXN0IG51bWJlciBhIFBDUkUyX1NJWkUgdmFyaWFibGUgY2FuIGhvbGQuIEhvd2V2ZXIsIHRoZSBwcm9ncmFtIHRoYXQKK2NhbGxzIFxmQnBjcmUyX2NvbXBpbGUoKVxmUCBjYW4gc3BlY2lmeSBhIHNtYWxsZXIgbGltaXQuCisuUAorVGhlIG1heGltdW0gbGVuZ3RoIChpbiBjb2RlIHVuaXRzKSBvZiBhIHN1YmplY3Qgc3RyaW5nIGlzIG9uZSBsZXNzIHRoYW4gdGhlCitsYXJnZXN0IG51bWJlciBhIFBDUkUyX1NJWkUgdmFyaWFibGUgY2FuIGhvbGQuIFBDUkUyX1NJWkUgaXMgYW4gdW5zaWduZWQKK2ludGVnZXIgdHlwZSwgdXN1YWxseSBkZWZpbmVkIGFzIHNpemVfdC4gSXRzIG1heGltdW0gdmFsdWUgKHRoYXQgaXMKK34oUENSRTJfU0laRSkwKSBpcyByZXNlcnZlZCBhcyBhIHNwZWNpYWwgaW5kaWNhdG9yIGZvciB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5ncworYW5kIHVuc2V0IG9mZnNldHMuCisuUAorTm90ZSB0aGF0IHdoZW4gdXNpbmcgdGhlIHRyYWRpdGlvbmFsIG1hdGNoaW5nIGZ1bmN0aW9uLCBQQ1JFMiB1c2VzIHJlY3Vyc2lvbiB0bworaGFuZGxlIHN1YnBhdHRlcm5zIGFuZCBpbmRlZmluaXRlIHJlcGV0aXRpb24uIFRoaXMgbWVhbnMgdGhhdCB0aGUgYXZhaWxhYmxlCitzdGFjayBzcGFjZSBtYXkgbGltaXQgdGhlIHNpemUgb2YgYSBzdWJqZWN0IHN0cmluZyB0aGF0IGNhbiBiZSBwcm9jZXNzZWQgYnkKK2NlcnRhaW4gcGF0dGVybnMuIEZvciBhIGRpc2N1c3Npb24gb2Ygc3RhY2sgaXNzdWVzLCBzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJzdGFja1xmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLlAKK0FsbCB2YWx1ZXMgaW4gcmVwZWF0aW5nIHF1YW50aWZpZXJzIG11c3QgYmUgbGVzcyB0aGFuIDY1NTM2LgorLlAKK1RoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIDY1NTM1IGNoYXJhY3RlcnMuCisuUAorVGhlcmUgaXMgbm8gbGltaXQgdG8gdGhlIG51bWJlciBvZiBwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm5zLCBidXQgdGhlcmUgY2FuIGJlCitubyBtb3JlIHRoYW4gNjU1MzUgY2FwdHVyaW5nIHN1YnBhdHRlcm5zLiBUaGVyZSBpcywgaG93ZXZlciwgYSBsaW1pdCB0byB0aGUKK2RlcHRoIG9mIG5lc3Rpbmcgb2YgcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJucyBvZiBhbGwga2luZHMuIFRoaXMgaXMgaW1wb3NlZCBpbgorb3JkZXIgdG8gbGltaXQgdGhlIGFtb3VudCBvZiBzeXN0ZW0gc3RhY2sgdXNlZCBhdCBjb21waWxlIHRpbWUuIFRoZSBsaW1pdCBjYW4KK2JlIHNwZWNpZmllZCB3aGVuIFBDUkUyIGlzIGJ1aWx0OyB0aGUgZGVmYXVsdCBpcyAyNTAuCisuUAorVGhlcmUgaXMgYSBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGZvcndhcmQgcmVmZXJlbmNlcyB0byBzdWJzZXF1ZW50IHN1YnBhdHRlcm5zCitvZiBhcm91bmQgMjAwLDAwMC4gUmVwZWF0ZWQgZm9yd2FyZCByZWZlcmVuY2VzIHdpdGggZml4ZWQgdXBwZXIgbGltaXRzLCBmb3IKK2V4YW1wbGUsICg/Mil7MCwxMDB9IHdoZW4gc3VicGF0dGVybiBudW1iZXIgMiBpcyB0byB0aGUgcmlnaHQsIGFyZSBpbmNsdWRlZCBpbgordGhlIGNvdW50LiBUaGVyZSBpcyBubyBsaW1pdCB0byB0aGUgbnVtYmVyIG9mIGJhY2t3YXJkIHJlZmVyZW5jZXMuCisuUAorVGhlIG1heGltdW0gbGVuZ3RoIG9mIG5hbWUgZm9yIGEgbmFtZWQgc3VicGF0dGVybiBpcyAzMiBjb2RlIHVuaXRzLCBhbmQgdGhlCittYXhpbXVtIG51bWJlciBvZiBuYW1lZCBzdWJwYXR0ZXJucyBpcyAxMDAwMC4KKy5QCitUaGUgbWF4aW11bSBsZW5ndGggb2YgYSBuYW1lIGluIGEgKCpNQVJLKSwgKCpQUlVORSksICgqU0tJUCksIG9yICgqVEhFTikgdmVyYgoraXMgMjU1IGZvciB0aGUgOC1iaXQgbGlicmFyeSBhbmQgNjU1MzUgZm9yIHRoZSAxNi1iaXQgYW5kIDMyLWJpdCBsaWJyYXJpZXMuCisuCisuCisuU0ggQVVUSE9SCisucnMKKy5zcAorLm5mCitQaGlsaXAgSGF6ZWwKK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKK0NhbWJyaWRnZSwgRW5nbGFuZC4KKy5maQorLgorLgorLlNIIFJFVklTSU9OCisucnMKKy5zcAorLm5mCitMYXN0IHVwZGF0ZWQ6IDA1IE5vdmVtYmVyIDIwMTUKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJtYXRjaGluZy4zIGIvZGlzdDIvZG9jL3BjcmUybWF0Y2hpbmcuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTg4NWU1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUybWF0Y2hpbmcuMwpAQCAtMCwwICsxLDIxMyBAQAorLlRIIFBDUkUyTUFUQ0hJTkcgMyAiMjkgU2VwdGVtYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCAiUENSRTIgTUFUQ0hJTkcgQUxHT1JJVEhNUyIKKy5ycworLnNwCitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgdHdvIGRpZmZlcmVudCBhbGdvcml0aG1zIHRoYXQgYXJlIGF2YWlsYWJsZSBpbgorUENSRTIgZm9yIG1hdGNoaW5nIGEgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uIGFnYWluc3QgYSBnaXZlbiBzdWJqZWN0CitzdHJpbmcuIFRoZSAic3RhbmRhcmQiIGFsZ29yaXRobSBpcyB0aGUgb25lIHByb3ZpZGVkIGJ5IHRoZSBcZkJwY3JlMl9tYXRjaCgpXGZQCitmdW5jdGlvbi4gVGhpcyB3b3JrcyBpbiB0aGUgc2FtZSBhcyBhcyBQZXJsJ3MgbWF0Y2hpbmcgZnVuY3Rpb24sIGFuZCBwcm92aWRlIGEKK1BlcmwtY29tcGF0aWJsZSBtYXRjaGluZyBvcGVyYXRpb24uIFRoZSBqdXN0LWluLXRpbWUgKEpJVCkgb3B0aW1pemF0aW9uIHRoYXQgaXMKK2Rlc2NyaWJlZCBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmppdFxmUAorLlwiCitkb2N1bWVudGF0aW9uIGlzIGNvbXBhdGlibGUgd2l0aCB0aGlzIGZ1bmN0aW9uLgorLlAKK0FuIGFsdGVybmF0aXZlIGFsZ29yaXRobSBpcyBwcm92aWRlZCBieSB0aGUgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgZnVuY3Rpb247CitpdCBvcGVyYXRlcyBpbiBhIGRpZmZlcmVudCB3YXksIGFuZCBpcyBub3QgUGVybC1jb21wYXRpYmxlLiBUaGlzIGFsdGVybmF0aXZlCitoYXMgYWR2YW50YWdlcyBhbmQgZGlzYWR2YW50YWdlcyBjb21wYXJlZCB3aXRoIHRoZSBzdGFuZGFyZCBhbGdvcml0aG0sIGFuZAordGhlc2UgYXJlIGRlc2NyaWJlZCBiZWxvdy4KKy5QCitXaGVuIHRoZXJlIGlzIG9ubHkgb25lIHBvc3NpYmxlIHdheSBpbiB3aGljaCBhIGdpdmVuIHN1YmplY3Qgc3RyaW5nIGNhbiBtYXRjaCBhCitwYXR0ZXJuLCB0aGUgdHdvIGFsZ29yaXRobXMgZ2l2ZSB0aGUgc2FtZSBhbnN3ZXIuIEEgZGlmZmVyZW5jZSBhcmlzZXMsIGhvd2V2ZXIsCit3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZSBwb3NzaWJpbGl0aWVzLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4KKy5zcAorICBePC4qPgorLnNwCitpcyBtYXRjaGVkIGFnYWluc3QgdGhlIHN0cmluZworLnNwCisgIDxzb21ldGhpbmc+IDxzb21ldGhpbmcgZWxzZT4gPHNvbWV0aGluZyBmdXJ0aGVyPgorLnNwCit0aGVyZSBhcmUgdGhyZWUgcG9zc2libGUgYW5zd2Vycy4gVGhlIHN0YW5kYXJkIGFsZ29yaXRobSBmaW5kcyBvbmx5IG9uZSBvZgordGhlbSwgd2hlcmVhcyB0aGUgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtIGZpbmRzIGFsbCB0aHJlZS4KKy4KKy4KKy5TSCAiUkVHVUxBUiBFWFBSRVNTSU9OUyBBUyBUUkVFUyIKKy5ycworLnNwCitUaGUgc2V0IG9mIHN0cmluZ3MgdGhhdCBhcmUgbWF0Y2hlZCBieSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYW4gYmUgcmVwcmVzZW50ZWQKK2FzIGEgdHJlZSBzdHJ1Y3R1cmUuIEFuIHVubGltaXRlZCByZXBldGl0aW9uIGluIHRoZSBwYXR0ZXJuIG1ha2VzIHRoZSB0cmVlIG9mCitpbmZpbml0ZSBzaXplLCBidXQgaXQgaXMgc3RpbGwgYSB0cmVlLiBNYXRjaGluZyB0aGUgcGF0dGVybiB0byBhIGdpdmVuIHN1YmplY3QKK3N0cmluZyAoZnJvbSBhIGdpdmVuIHN0YXJ0aW5nIHBvaW50KSBjYW4gYmUgdGhvdWdodCBvZiBhcyBhIHNlYXJjaCBvZiB0aGUgdHJlZS4KK1RoZXJlIGFyZSB0d28gd2F5cyB0byBzZWFyY2ggYSB0cmVlOiBkZXB0aC1maXJzdCBhbmQgYnJlYWR0aC1maXJzdCwgYW5kIHRoZXNlCitjb3JyZXNwb25kIHRvIHRoZSB0d28gbWF0Y2hpbmcgYWxnb3JpdGhtcyBwcm92aWRlZCBieSBQQ1JFMi4KKy4KKy4KKy5TSCAiVEhFIFNUQU5EQVJEIE1BVENISU5HIEFMR09SSVRITSIKKy5ycworLnNwCitJbiB0aGUgdGVybWlub2xvZ3kgb2YgSmVmZnJleSBGcmllZGwncyBib29rICJNYXN0ZXJpbmcgUmVndWxhciBFeHByZXNzaW9ucyIsCit0aGUgc3RhbmRhcmQgYWxnb3JpdGhtIGlzIGFuICJORkEgYWxnb3JpdGhtIi4gSXQgY29uZHVjdHMgYSBkZXB0aC1maXJzdCBzZWFyY2gKK29mIHRoZSBwYXR0ZXJuIHRyZWUuIFRoYXQgaXMsIGl0IHByb2NlZWRzIGFsb25nIGEgc2luZ2xlIHBhdGggdGhyb3VnaCB0aGUgdHJlZSwKK2NoZWNraW5nIHRoYXQgdGhlIHN1YmplY3QgbWF0Y2hlcyB3aGF0IGlzIHJlcXVpcmVkLiBXaGVuIHRoZXJlIGlzIGEgbWlzbWF0Y2gsCit0aGUgYWxnb3JpdGhtIHRyaWVzIGFueSBhbHRlcm5hdGl2ZXMgYXQgdGhlIGN1cnJlbnQgcG9pbnQsIGFuZCBpZiB0aGV5IGFsbAorZmFpbCwgaXQgYmFja3MgdXAgdG8gdGhlIHByZXZpb3VzIGJyYW5jaCBwb2ludCBpbiB0aGUgdHJlZSwgYW5kIHRyaWVzIHRoZSBuZXh0CithbHRlcm5hdGl2ZSBicmFuY2ggYXQgdGhhdCBsZXZlbC4gVGhpcyBvZnRlbiBpbnZvbHZlcyBiYWNraW5nIHVwIChtb3ZpbmcgdG8gdGhlCitsZWZ0KSBpbiB0aGUgc3ViamVjdCBzdHJpbmcgYXMgd2VsbC4gVGhlIG9yZGVyIGluIHdoaWNoIHJlcGV0aXRpb24gYnJhbmNoZXMgYXJlCit0cmllZCBpcyBjb250cm9sbGVkIGJ5IHRoZSBncmVlZHkgb3IgdW5ncmVlZHkgbmF0dXJlIG9mIHRoZSBxdWFudGlmaWVyLgorLlAKK0lmIGEgbGVhZiBub2RlIGlzIHJlYWNoZWQsIGEgbWF0Y2hpbmcgc3RyaW5nIGhhcyBiZWVuIGZvdW5kLCBhbmQgYXQgdGhhdCBwb2ludAordGhlIGFsZ29yaXRobSBzdG9wcy4gVGh1cywgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSBtYXRjaCwgdGhpcworYWxnb3JpdGhtIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGl0IGZpbmRzLiBXaGV0aGVyIHRoaXMgaXMgdGhlIHNob3J0ZXN0LAordGhlIGxvbmdlc3QsIG9yIHNvbWUgaW50ZXJtZWRpYXRlIGxlbmd0aCBkZXBlbmRzIG9uIHRoZSB3YXkgdGhlIGdyZWVkeSBhbmQKK3VuZ3JlZWR5IHJlcGV0aXRpb24gcXVhbnRpZmllcnMgYXJlIHNwZWNpZmllZCBpbiB0aGUgcGF0dGVybi4KKy5QCitCZWNhdXNlIGl0IGVuZHMgdXAgd2l0aCBhIHNpbmdsZSBwYXRoIHRocm91Z2ggdGhlIHRyZWUsIGl0IGlzIHJlbGF0aXZlbHkKK3N0cmFpZ2h0Zm9yd2FyZCBmb3IgdGhpcyBhbGdvcml0aG0gdG8ga2VlcCB0cmFjayBvZiB0aGUgc3Vic3RyaW5ncyB0aGF0IGFyZQorbWF0Y2hlZCBieSBwb3J0aW9ucyBvZiB0aGUgcGF0dGVybiBpbiBwYXJlbnRoZXNlcy4gVGhpcyBwcm92aWRlcyBzdXBwb3J0IGZvcgorY2FwdHVyaW5nIHBhcmVudGhlc2VzIGFuZCBiYWNrIHJlZmVyZW5jZXMuCisuCisuCisuU0ggIlRIRSBBTFRFUk5BVElWRSBNQVRDSElORyBBTEdPUklUSE0iCisucnMKKy5zcAorVGhpcyBhbGdvcml0aG0gY29uZHVjdHMgYSBicmVhZHRoLWZpcnN0IHNlYXJjaCBvZiB0aGUgdHJlZS4gU3RhcnRpbmcgZnJvbSB0aGUKK2ZpcnN0IG1hdGNoaW5nIHBvaW50IGluIHRoZSBzdWJqZWN0LCBpdCBzY2FucyB0aGUgc3ViamVjdCBzdHJpbmcgZnJvbSBsZWZ0IHRvCityaWdodCwgb25jZSwgY2hhcmFjdGVyIGJ5IGNoYXJhY3RlciwgYW5kIGFzIGl0IGRvZXMgdGhpcywgaXQgcmVtZW1iZXJzIGFsbCB0aGUKK3BhdGhzIHRocm91Z2ggdGhlIHRyZWUgdGhhdCByZXByZXNlbnQgdmFsaWQgbWF0Y2hlcy4gSW4gRnJpZWRsJ3MgdGVybWlub2xvZ3ksCit0aGlzIGlzIGEga2luZCBvZiAiREZBIGFsZ29yaXRobSIsIHRob3VnaCBpdCBpcyBub3QgaW1wbGVtZW50ZWQgYXMgYQordHJhZGl0aW9uYWwgZmluaXRlIHN0YXRlIG1hY2hpbmUgKGl0IGtlZXBzIG11bHRpcGxlIHN0YXRlcyBhY3RpdmUKK3NpbXVsdGFuZW91c2x5KS4KKy5QCitBbHRob3VnaCB0aGUgZ2VuZXJhbCBwcmluY2lwbGUgb2YgdGhpcyBtYXRjaGluZyBhbGdvcml0aG0gaXMgdGhhdCBpdCBzY2FucyB0aGUKK3N1YmplY3Qgc3RyaW5nIG9ubHkgb25jZSwgd2l0aG91dCBiYWNrdHJhY2tpbmcsIHRoZXJlIGlzIG9uZSBleGNlcHRpb246IHdoZW4gYQorbG9va2Fyb3VuZCBhc3NlcnRpb24gaXMgZW5jb3VudGVyZWQsIHRoZSBjaGFyYWN0ZXJzIGZvbGxvd2luZyBvciBwcmVjZWRpbmcgdGhlCitjdXJyZW50IHBvaW50IGhhdmUgdG8gYmUgaW5kZXBlbmRlbnRseSBpbnNwZWN0ZWQuCisuUAorVGhlIHNjYW4gY29udGludWVzIHVudGlsIGVpdGhlciB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IGlzIHJlYWNoZWQsIG9yIHRoZXJlIGFyZQorbm8gbW9yZSB1bnRlcm1pbmF0ZWQgcGF0aHMuIEF0IHRoaXMgcG9pbnQsIHRlcm1pbmF0ZWQgcGF0aHMgcmVwcmVzZW50IHRoZQorZGlmZmVyZW50IG1hdGNoaW5nIHBvc3NpYmlsaXRpZXMgKGlmIHRoZXJlIGFyZSBub25lLCB0aGUgbWF0Y2ggaGFzIGZhaWxlZCkuCitUaHVzLCBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHBvc3NpYmxlIG1hdGNoLCB0aGlzIGFsZ29yaXRobSBmaW5kcyBhbGwgb2YKK3RoZW0sIGFuZCBpbiBwYXJ0aWN1bGFyLCBpdCBmaW5kcyB0aGUgbG9uZ2VzdC4gVGhlIG1hdGNoZXMgYXJlIHJldHVybmVkIGluCitkZWNyZWFzaW5nIG9yZGVyIG9mIGxlbmd0aC4gVGhlcmUgaXMgYW4gb3B0aW9uIHRvIHN0b3AgdGhlIGFsZ29yaXRobSBhZnRlciB0aGUKK2ZpcnN0IG1hdGNoICh3aGljaCBpcyBuZWNlc3NhcmlseSB0aGUgc2hvcnRlc3QpIGlzIGZvdW5kLgorLlAKK05vdGUgdGhhdCBhbGwgdGhlIG1hdGNoZXMgdGhhdCBhcmUgZm91bmQgc3RhcnQgYXQgdGhlIHNhbWUgcG9pbnQgaW4gdGhlCitzdWJqZWN0LiBJZiB0aGUgcGF0dGVybgorLnNwCisgIGNhdChlcihwaWxsYXIpPyk/Cisuc3AKK2lzIG1hdGNoZWQgYWdhaW5zdCB0aGUgc3RyaW5nICJ0aGUgY2F0ZXJwaWxsYXIgY2F0Y2htZW50IiwgdGhlIHJlc3VsdCBpcyB0aGUKK3RocmVlIHN0cmluZ3MgImNhdGVycGlsbGFyIiwgImNhdGVyIiwgYW5kICJjYXQiIHRoYXQgc3RhcnQgYXQgdGhlIGZpZnRoCitjaGFyYWN0ZXIgb2YgdGhlIHN1YmplY3QuIFRoZSBhbGdvcml0aG0gZG9lcyBub3QgYXV0b21hdGljYWxseSBtb3ZlIG9uIHRvIGZpbmQKK21hdGNoZXMgdGhhdCBzdGFydCBhdCBsYXRlciBwb3NpdGlvbnMuCisuUAorUENSRTIncyAiYXV0by1wb3NzZXNzaWZpY2F0aW9uIiBvcHRpbWl6YXRpb24gdXN1YWxseSBhcHBsaWVzIHRvIGNoYXJhY3RlcgorcmVwZWF0cyBhdCB0aGUgZW5kIG9mIGEgcGF0dGVybiAoYXMgd2VsbCBhcyBpbnRlcm5hbGx5KS4gRm9yIGV4YW1wbGUsIHRoZQorcGF0dGVybiAiYVxlZCsiIGlzIGNvbXBpbGVkIGFzIGlmIGl0IHdlcmUgImFcZWQrKyIgYmVjYXVzZSB0aGVyZSBpcyBubyBwb2ludAorZXZlbiBjb25zaWRlcmluZyB0aGUgcG9zc2liaWxpdHkgb2YgYmFja3RyYWNraW5nIGludG8gdGhlIHJlcGVhdGVkIGRpZ2l0cy4gRm9yCitERkEgbWF0Y2hpbmcsIHRoaXMgbWVhbnMgdGhhdCBvbmx5IG9uZSBwb3NzaWJsZSBtYXRjaCBpcyBmb3VuZC4gSWYgeW91IHJlYWxseQorZG8gd2FudCBtdWx0aXBsZSBtYXRjaGVzIGluIHN1Y2ggY2FzZXMsIGVpdGhlciB1c2UgYW4gdW5ncmVlZHkgcmVwZWF0CisoImFcZWQrPyIpIG9yIHNldCB0aGUgUENSRTJfTk9fQVVUT19QT1NTRVNTIG9wdGlvbiB3aGVuIGNvbXBpbGluZy4KKy5QCitUaGVyZSBhcmUgYSBudW1iZXIgb2YgZmVhdHVyZXMgb2YgUENSRTIgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGFyZSBub3QKK3N1cHBvcnRlZCBieSB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgYWxnb3JpdGhtLiBUaGV5IGFyZSBhcyBmb2xsb3dzOgorLlAKKzEuIEJlY2F1c2UgdGhlIGFsZ29yaXRobSBmaW5kcyBhbGwgcG9zc2libGUgbWF0Y2hlcywgdGhlIGdyZWVkeSBvciB1bmdyZWVkeQorbmF0dXJlIG9mIHJlcGV0aXRpb24gcXVhbnRpZmllcnMgaXMgbm90IHJlbGV2YW50ICh0aG91Z2ggaXQgbWF5IGFmZmVjdAorYXV0by1wb3NzZXNzaWZpY2F0aW9uLCBhcyBqdXN0IGRlc2NyaWJlZCkuIER1cmluZyBtYXRjaGluZywgZ3JlZWR5IGFuZCB1bmdyZWVkeQorcXVhbnRpZmllcnMgYXJlIHRyZWF0ZWQgaW4gZXhhY3RseSB0aGUgc2FtZSB3YXkuIEhvd2V2ZXIsIHBvc3Nlc3NpdmUKK3F1YW50aWZpZXJzIGNhbiBtYWtlIGEgZGlmZmVyZW5jZSB3aGVuIHdoYXQgZm9sbG93cyBjb3VsZCBhbHNvIG1hdGNoIHdoYXQgaXMKK3F1YW50aWZpZWQsIGZvciBleGFtcGxlIGluIGEgcGF0dGVybiBsaWtlIHRoaXM6Cisuc3AKKyAgXmErK1xldyEKKy5zcAorVGhpcyBwYXR0ZXJuIG1hdGNoZXMgImFhYWIhIiBidXQgbm90ICJhYWEhIiwgd2hpY2ggd291bGQgYmUgbWF0Y2hlZCBieSBhCitub24tcG9zc2Vzc2l2ZSBxdWFudGlmaWVyLiBTaW1pbGFybHksIGlmIGFuIGF0b21pYyBncm91cCBpcyBwcmVzZW50LCBpdCBpcworbWF0Y2hlZCBhcyBpZiBpdCB3ZXJlIGEgc3RhbmRhbG9uZSBwYXR0ZXJuIGF0IHRoZSBjdXJyZW50IHBvaW50LCBhbmQgdGhlCitsb25nZXN0IG1hdGNoIGlzIHRoZW4gImxvY2tlZCBpbiIgZm9yIHRoZSByZXN0IG9mIHRoZSBvdmVyYWxsIHBhdHRlcm4uCisuUAorMi4gV2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgcGF0aHMgdGhyb3VnaCB0aGUgdHJlZSBzaW11bHRhbmVvdXNseSwgaXQgaXMgbm90CitzdHJhaWdodGZvcndhcmQgdG8ga2VlcCB0cmFjayBvZiBjYXB0dXJlZCBzdWJzdHJpbmdzIGZvciB0aGUgZGlmZmVyZW50IG1hdGNoaW5nCitwb3NzaWJpbGl0aWVzLCBhbmQgUENSRTIncyBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGFsZ29yaXRobSBkb2VzIG5vdCBhdHRlbXB0IHRvCitkbyB0aGlzLiBUaGlzIG1lYW5zIHRoYXQgbm8gY2FwdHVyZWQgc3Vic3RyaW5ncyBhcmUgYXZhaWxhYmxlLgorLlAKKzMuIEJlY2F1c2Ugbm8gc3Vic3RyaW5ncyBhcmUgY2FwdHVyZWQsIGJhY2sgcmVmZXJlbmNlcyB3aXRoaW4gdGhlIHBhdHRlcm4gYXJlCitub3Qgc3VwcG9ydGVkLCBhbmQgY2F1c2UgZXJyb3JzIGlmIGVuY291bnRlcmVkLgorLlAKKzQuIEZvciB0aGUgc2FtZSByZWFzb24sIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIHRoYXQgdXNlIGEgYmFja3JlZmVyZW5jZSBhcyB0aGUKK2NvbmRpdGlvbiBvciB0ZXN0IGZvciBhIHNwZWNpZmljIGdyb3VwIHJlY3Vyc2lvbiBhcmUgbm90IHN1cHBvcnRlZC4KKy5QCis1LiBCZWNhdXNlIG1hbnkgcGF0aHMgdGhyb3VnaCB0aGUgdHJlZSBtYXkgYmUgYWN0aXZlLCB0aGUgXGVLIGVzY2FwZSBzZXF1ZW5jZSwKK3doaWNoIHJlc2V0cyB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoIHdoZW4gZW5jb3VudGVyZWQgKGJ1dCBtYXkgYmUgb24gc29tZSBwYXRocworYW5kIG5vdCBvbiBvdGhlcnMpLCBpcyBub3Qgc3VwcG9ydGVkLiBJdCBjYXVzZXMgYW4gZXJyb3IgaWYgZW5jb3VudGVyZWQuCisuUAorNi4gQ2FsbG91dHMgYXJlIHN1cHBvcnRlZCwgYnV0IHRoZSB2YWx1ZSBvZiB0aGUgXGZJY2FwdHVyZV90b3BcZlAgZmllbGQgaXMKK2Fsd2F5cyAxLCBhbmQgdGhlIHZhbHVlIG9mIHRoZSBcZkljYXB0dXJlX2xhc3RcZlAgZmllbGQgaXMgYWx3YXlzIDAuCisuUAorNy4gVGhlIFxlQyBlc2NhcGUgc2VxdWVuY2UsIHdoaWNoIChpbiB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtKSBhbHdheXMgbWF0Y2hlcyBhCitzaW5nbGUgY29kZSB1bml0LCBldmVuIGluIGEgVVRGIG1vZGUsIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlc2UgbW9kZXMsIGJlY2F1c2UKK3RoZSBhbHRlcm5hdGl2ZSBhbGdvcml0aG0gbW92ZXMgdGhyb3VnaCB0aGUgc3ViamVjdCBzdHJpbmcgb25lIGNoYXJhY3RlciAobm90Citjb2RlIHVuaXQpIGF0IGEgdGltZSwgZm9yIGFsbCBhY3RpdmUgcGF0aHMgdGhyb3VnaCB0aGUgdHJlZS4KKy5QCis4LiBFeGNlcHQgZm9yICgqRkFJTCksIHRoZSBiYWNrdHJhY2tpbmcgY29udHJvbCB2ZXJicyBzdWNoIGFzICgqUFJVTkUpIGFyZSBub3QKK3N1cHBvcnRlZC4gKCpGQUlMKSBpcyBzdXBwb3J0ZWQsIGFuZCBiZWhhdmVzIGxpa2UgYSBmYWlsaW5nIG5lZ2F0aXZlIGFzc2VydGlvbi4KKy4KKy4KKy5TSCAiQURWQU5UQUdFUyBPRiBUSEUgQUxURVJOQVRJVkUgQUxHT1JJVEhNIgorLnJzCisuc3AKK1VzaW5nIHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBhbGdvcml0aG0gcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBhZHZhbnRhZ2VzOgorLlAKKzEuIEFsbCBwb3NzaWJsZSBtYXRjaGVzIChhdCBhIHNpbmdsZSBwb2ludCBpbiB0aGUgc3ViamVjdCkgYXJlIGF1dG9tYXRpY2FsbHkKK2ZvdW5kLCBhbmQgaW4gcGFydGljdWxhciwgdGhlIGxvbmdlc3QgbWF0Y2ggaXMgZm91bmQuIFRvIGZpbmQgbW9yZSB0aGFuIG9uZQorbWF0Y2ggdXNpbmcgdGhlIHN0YW5kYXJkIGFsZ29yaXRobSwgeW91IGhhdmUgdG8gZG8ga2x1ZGd5IHRoaW5ncyB3aXRoCitjYWxsb3V0cy4KKy5QCisyLiBCZWNhdXNlIHRoZSBhbHRlcm5hdGl2ZSBhbGdvcml0aG0gc2NhbnMgdGhlIHN1YmplY3Qgc3RyaW5nIGp1c3Qgb25jZSwgYW5kCituZXZlciBuZWVkcyB0byBiYWNrdHJhY2sgKGV4Y2VwdCBmb3IgbG9va2JlaGluZHMpLCBpdCBpcyBwb3NzaWJsZSB0byBwYXNzIHZlcnkKK2xvbmcgc3ViamVjdCBzdHJpbmdzIHRvIHRoZSBtYXRjaGluZyBmdW5jdGlvbiBpbiBzZXZlcmFsIHBpZWNlcywgY2hlY2tpbmcgZm9yCitwYXJ0aWFsIG1hdGNoaW5nIGVhY2ggdGltZS4gQWx0aG91Z2ggaXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkbyBtdWx0aS1zZWdtZW50CittYXRjaGluZyB1c2luZyB0aGUgc3RhbmRhcmQgYWxnb3JpdGhtLCBieSByZXRhaW5pbmcgcGFydGlhbGx5IG1hdGNoZWQKK3N1YnN0cmluZ3MsIGl0IGlzIG1vcmUgY29tcGxpY2F0ZWQuIFRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGFydGlhbFxmUAorLlwiCitkb2N1bWVudGF0aW9uIGdpdmVzIGRldGFpbHMgb2YgcGFydGlhbCBtYXRjaGluZyBhbmQgZGlzY3Vzc2VzIG11bHRpLXNlZ21lbnQKK21hdGNoaW5nLgorLgorLgorLlNIICJESVNBRFZBTlRBR0VTIE9GIFRIRSBBTFRFUk5BVElWRSBBTEdPUklUSE0iCisucnMKKy5zcAorVGhlIGFsdGVybmF0aXZlIGFsZ29yaXRobSBzdWZmZXJzIGZyb20gYSBudW1iZXIgb2YgZGlzYWR2YW50YWdlczoKKy5QCisxLiBJdCBpcyBzdWJzdGFudGlhbGx5IHNsb3dlciB0aGFuIHRoZSBzdGFuZGFyZCBhbGdvcml0aG0uIFRoaXMgaXMgcGFydGx5CitiZWNhdXNlIGl0IGhhcyB0byBzZWFyY2ggZm9yIGFsbCBwb3NzaWJsZSBtYXRjaGVzLCBidXQgaXMgYWxzbyBiZWNhdXNlIGl0IGlzCitsZXNzIHN1c2NlcHRpYmxlIHRvIG9wdGltaXphdGlvbi4KKy5QCisyLiBDYXB0dXJpbmcgcGFyZW50aGVzZXMgYW5kIGJhY2sgcmVmZXJlbmNlcyBhcmUgbm90IHN1cHBvcnRlZC4KKy5QCiszLiBBbHRob3VnaCBhdG9taWMgZ3JvdXBzIGFyZSBzdXBwb3J0ZWQsIHRoZWlyIHVzZSBkb2VzIG5vdCBwcm92aWRlIHRoZQorcGVyZm9ybWFuY2UgYWR2YW50YWdlIHRoYXQgaXQgZG9lcyBmb3IgdGhlIHN0YW5kYXJkIGFsZ29yaXRobS4KKy4KKy4KKy5TSCBBVVRIT1IKKy5ycworLnNwCisubmYKK1BoaWxpcCBIYXplbAorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorQ2FtYnJpZGdlLCBFbmdsYW5kLgorLmZpCisuCisuCisuU0ggUkVWSVNJT04KKy5ycworLnNwCisubmYKK0xhc3QgdXBkYXRlZDogMjkgU2VwdGVtYmVyIDIwMTQKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE0IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJwYXJ0aWFsLjMgYi9kaXN0Mi9kb2MvcGNyZTJwYXJ0aWFsLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJhMTJlZAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMnBhcnRpYWwuMwpAQCAtMCwwICsxLDQzNCBAQAorLlRIIFBDUkUyUEFSVElBTCAzICIyMiBEZWNlbWJlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucworLlNIICJQQVJUSUFMIE1BVENISU5HIElOIFBDUkUyIgorLnJzCisuc3AKK0luIG5vcm1hbCB1c2Ugb2YgUENSRTIsIGlmIHRoZSBzdWJqZWN0IHN0cmluZyB0aGF0IGlzIHBhc3NlZCB0byBhIG1hdGNoaW5nCitmdW5jdGlvbiBtYXRjaGVzIGFzIGZhciBhcyBpdCBnb2VzLCBidXQgaXMgdG9vIHNob3J0IHRvIG1hdGNoIHRoZSBlbnRpcmUKK3BhdHRlcm4sIFBDUkUyX0VSUk9SX05PTUFUQ0ggaXMgcmV0dXJuZWQuIFRoZXJlIGFyZSBjaXJjdW1zdGFuY2VzIHdoZXJlIGl0CittaWdodCBiZSBoZWxwZnVsIHRvIGRpc3Rpbmd1aXNoIHRoaXMgY2FzZSBmcm9tIG90aGVyIGNhc2VzIGluIHdoaWNoIHRoZXJlIGlzIG5vCittYXRjaC4KKy5QCitDb25zaWRlciwgZm9yIGV4YW1wbGUsIGFuIGFwcGxpY2F0aW9uIHdoZXJlIGEgaHVtYW4gaXMgcmVxdWlyZWQgdG8gdHlwZSBpbiBkYXRhCitmb3IgYSBmaWVsZCB3aXRoIHNwZWNpZmljIGZvcm1hdHRpbmcgcmVxdWlyZW1lbnRzLiBBbiBleGFtcGxlIG1pZ2h0IGJlIGEgZGF0ZQoraW4gdGhlIGZvcm0gXGZJZGRtbW15eVxmUCwgZGVmaW5lZCBieSB0aGlzIHBhdHRlcm46Cisuc3AKKyAgXlxlZD9cZWQoamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpXGVkXGVkJAorLnNwCitJZiB0aGUgYXBwbGljYXRpb24gc2VlcyB0aGUgdXNlcidzIGtleXN0cm9rZXMgb25lIGJ5IG9uZSwgYW5kIGNhbiBjaGVjayB0aGF0Cit3aGF0IGhhcyBiZWVuIHR5cGVkIHNvIGZhciBpcyBwb3RlbnRpYWxseSB2YWxpZCwgaXQgaXMgYWJsZSB0byByYWlzZSBhbiBlcnJvcgorYXMgc29vbiBhcyBhIG1pc3Rha2UgaXMgbWFkZSwgYnkgYmVlcGluZyBhbmQgbm90IHJlZmxlY3RpbmcgdGhlIGNoYXJhY3RlciB0aGF0CitoYXMgYmVlbiB0eXBlZCwgZm9yIGV4YW1wbGUuIFRoaXMgaW1tZWRpYXRlIGZlZWRiYWNrIGlzIGxpa2VseSB0byBiZSBhIGJldHRlcgordXNlciBpbnRlcmZhY2UgdGhhbiBhIGNoZWNrIHRoYXQgaXMgZGVsYXllZCB1bnRpbCB0aGUgZW50aXJlIHN0cmluZyBoYXMgYmVlbgorZW50ZXJlZC4gUGFydGlhbCBtYXRjaGluZyBjYW4gYWxzbyBiZSB1c2VmdWwgd2hlbiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgdmVyeQorbG9uZyBhbmQgaXMgbm90IGFsbCBhdmFpbGFibGUgYXQgb25jZS4KKy5QCitQQ1JFMiBzdXBwb3J0cyBwYXJ0aWFsIG1hdGNoaW5nIGJ5IG1lYW5zIG9mIHRoZSBQQ1JFMl9QQVJUSUFMX1NPRlQgYW5kCitQQ1JFMl9QQVJUSUFMX0hBUkQgb3B0aW9ucywgd2hpY2ggY2FuIGJlIHNldCB3aGVuIGNhbGxpbmcgYSBtYXRjaGluZyBmdW5jdGlvbi4KK1RoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBvcHRpb25zIGlzIHdoZXRoZXIgb3Igbm90IGEgcGFydGlhbCBtYXRjaCBpcworcHJlZmVycmVkIHRvIGFuIGFsdGVybmF0aXZlIGNvbXBsZXRlIG1hdGNoLCB0aG91Z2ggdGhlIGRldGFpbHMgZGlmZmVyIGJldHdlZW4KK3RoZSB0d28gdHlwZXMgb2YgbWF0Y2hpbmcgZnVuY3Rpb24uIElmIGJvdGggb3B0aW9ucyBhcmUgc2V0LCBQQ1JFMl9QQVJUSUFMX0hBUkQKK3Rha2VzIHByZWNlZGVuY2UuCisuUAorSWYgeW91IHdhbnQgdG8gdXNlIHBhcnRpYWwgbWF0Y2hpbmcgd2l0aCBqdXN0LWluLXRpbWUgb3B0aW1pemVkIGNvZGUsIHlvdSBtdXN0CitjYWxsIFxmQnBjcmUyX2ppdF9jb21waWxlKClcZlAgd2l0aCBvbmUgb3IgYm90aCBvZiB0aGVzZSBvcHRpb25zOgorLnNwCisgIFBDUkUyX0pJVF9QQVJUSUFMX1NPRlQKKyAgUENSRTJfSklUX1BBUlRJQUxfSEFSRAorLnNwCitQQ1JFMl9KSVRfQ09NUExFVEUgc2hvdWxkIGFsc28gYmUgc2V0IGlmIHlvdSBhcmUgZ29pbmcgdG8gcnVuIG5vbi1wYXJ0aWFsCittYXRjaGVzIG9uIHRoZSBzYW1lIHBhdHRlcm4uIElmIHRoZSBhcHByb3ByaWF0ZSBKSVQgbW9kZSBoYXMgbm90IGJlZW4gY29tcGlsZWQsCitpbnRlcnByZXRpdmUgbWF0Y2hpbmcgY29kZSBpcyB1c2VkLgorLlAKK1NldHRpbmcgYSBwYXJ0aWFsIG1hdGNoaW5nIG9wdGlvbiBkaXNhYmxlcyB0d28gb2YgUENSRTIncyBzdGFuZGFyZAorb3B0aW1pemF0aW9ucy4gUENSRTIgcmVtZW1iZXJzIHRoZSBsYXN0IGxpdGVyYWwgY29kZSB1bml0IGluIGEgcGF0dGVybiwgYW5kCithYmFuZG9ucyBtYXRjaGluZyBpbW1lZGlhdGVseSBpZiBpdCBpcyBub3QgcHJlc2VudCBpbiB0aGUgc3ViamVjdCBzdHJpbmcuIFRoaXMKK29wdGltaXphdGlvbiBjYW5ub3QgYmUgdXNlZCBmb3IgYSBzdWJqZWN0IHN0cmluZyB0aGF0IG1pZ2h0IG1hdGNoIG9ubHkKK3BhcnRpYWxseS4gUENSRTIgYWxzbyBrbm93cyB0aGUgbWluaW11bSBsZW5ndGggb2YgYSBtYXRjaGluZyBzdHJpbmcsIGFuZCBkb2VzCitub3QgYm90aGVyIHRvIHJ1biB0aGUgbWF0Y2hpbmcgZnVuY3Rpb24gb24gc2hvcnRlciBzdHJpbmdzLiBUaGlzIG9wdGltaXphdGlvbgoraXMgYWxzbyBkaXNhYmxlZCBmb3IgcGFydGlhbCBtYXRjaGluZy4KKy4KKy4KKy5TSCAiUEFSVElBTCBNQVRDSElORyBVU0lORyBwY3JlMl9tYXRjaCgpIgorLnJzCisuc3AKK0EgcGFydGlhbCBtYXRjaCBvY2N1cnMgZHVyaW5nIGEgY2FsbCB0byBcZkJwY3JlMl9tYXRjaCgpXGZQIHdoZW4gdGhlIGVuZCBvZiB0aGUKK3N1YmplY3Qgc3RyaW5nIGlzIHJlYWNoZWQgc3VjY2Vzc2Z1bGx5LCBidXQgbWF0Y2hpbmcgY2Fubm90IGNvbnRpbnVlIGJlY2F1c2UKK21vcmUgY2hhcmFjdGVycyBhcmUgbmVlZGVkLiBIb3dldmVyLCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGluIHRoZSBzdWJqZWN0IG11c3QKK2hhdmUgYmVlbiBpbnNwZWN0ZWQuIFRoaXMgY2hhcmFjdGVyIG5lZWQgbm90IGZvcm0gcGFydCBvZiB0aGUgZmluYWwgbWF0Y2hlZAorc3RyaW5nOyBsb29rYmVoaW5kIGFzc2VydGlvbnMgYW5kIHRoZSBcZUsgZXNjYXBlIHNlcXVlbmNlIHByb3ZpZGUgd2F5cyBvZgoraW5zcGVjdGluZyBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgc3RhcnQgb2YgYSBtYXRjaGVkIHN0cmluZy4gVGhlIHJlcXVpcmVtZW50IGZvcgoraW5zcGVjdGluZyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIGV4aXN0cyBiZWNhdXNlIGFuIGVtcHR5IHN0cmluZyBjYW4gYWx3YXlzIGJlCittYXRjaGVkOyB3aXRob3V0IHN1Y2ggYSByZXN0cmljdGlvbiB0aGVyZSB3b3VsZCBhbHdheXMgYmUgYSBwYXJ0aWFsIG1hdGNoIG9mIGFuCitlbXB0eSBzdHJpbmcgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdC4KKy5QCitXaGVuIGEgcGFydGlhbCBtYXRjaCBpcyByZXR1cm5lZCwgdGhlIGZpcnN0IHR3byBlbGVtZW50cyBpbiB0aGUgb3ZlY3RvciBwb2ludAordG8gdGhlIHBvcnRpb24gb2YgdGhlIHN1YmplY3QgdGhhdCB3YXMgbWF0Y2hlZCwgYnV0IHRoZSB2YWx1ZXMgaW4gdGhlIHJlc3Qgb2YKK3RoZSBvdmVjdG9yIGFyZSB1bmRlZmluZWQuIFRoZSBhcHBlYXJhbmNlIG9mIFxlSyBpbiB0aGUgcGF0dGVybiBoYXMgbm8gZWZmZWN0Citmb3IgYSBwYXJ0aWFsIG1hdGNoLiBDb25zaWRlciB0aGlzIHBhdHRlcm46Cisuc3AKKyAgL2FiY1xlSzEyMy8KKy5zcAorSWYgaXQgaXMgbWF0Y2hlZCBhZ2FpbnN0ICI0NTZhYmMxMjN4eXoiIHRoZSByZXN1bHQgaXMgYSBjb21wbGV0ZSBtYXRjaCwgYW5kIHRoZQorb3ZlY3RvciBkZWZpbmVzIHRoZSBtYXRjaGVkIHN0cmluZyBhcyAiMTIzIiwgYmVjYXVzZSBcZUsgcmVzZXRzIHRoZSAic3RhcnQgb2YKK21hdGNoIiBwb2ludC4gSG93ZXZlciwgaWYgYSBwYXJ0aWFsIG1hdGNoIGlzIHJlcXVlc3RlZCBhbmQgdGhlIHN1YmplY3Qgc3RyaW5nCitpcyAiNDU2YWJjMTIiLCBhIHBhcnRpYWwgbWF0Y2ggaXMgZm91bmQgZm9yIHRoZSBzdHJpbmcgImFiYzEyIiwgYmVjYXVzZSBhbGwKK3RoZXNlIGNoYXJhY3RlcnMgYXJlIG5lZWRlZCBmb3IgYSBzdWJzZXF1ZW50IHJlLW1hdGNoIHdpdGggYWRkaXRpb25hbAorY2hhcmFjdGVycy4KKy5QCitXaGF0IGhhcHBlbnMgd2hlbiBhIHBhcnRpYWwgbWF0Y2ggaXMgaWRlbnRpZmllZCBkZXBlbmRzIG9uIHdoaWNoIG9mIHRoZSB0d28KK3BhcnRpYWwgbWF0Y2hpbmcgb3B0aW9ucyBhcmUgc2V0LgorLgorLgorLlNTICJQQ1JFMl9QQVJUSUFMX1NPRlQgV0lUSCBwY3JlMl9tYXRjaCgpIgorLnJzCisuc3AKK0lmIFBDUkUyX1BBUlRJQUxfU09GVCBpcyBzZXQgd2hlbiBcZkJwY3JlMl9tYXRjaCgpXGZQIGlkZW50aWZpZXMgYSBwYXJ0aWFsCittYXRjaCwgdGhlIHBhcnRpYWwgbWF0Y2ggaXMgcmVtZW1iZXJlZCwgYnV0IG1hdGNoaW5nIGNvbnRpbnVlcyBhcyBub3JtYWwsIGFuZAorb3RoZXIgYWx0ZXJuYXRpdmVzIGluIHRoZSBwYXR0ZXJuIGFyZSB0cmllZC4gSWYgbm8gY29tcGxldGUgbWF0Y2ggY2FuIGJlIGZvdW5kLAorUENSRTJfRVJST1JfUEFSVElBTCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIFBDUkUyX0VSUk9SX05PTUFUQ0guCisuUAorVGhpcyBvcHRpb24gaXMgInNvZnQiIGJlY2F1c2UgaXQgcHJlZmVycyBhIGNvbXBsZXRlIG1hdGNoIG92ZXIgYSBwYXJ0aWFsIG1hdGNoLgorQWxsIHRoZSB2YXJpb3VzIG1hdGNoaW5nIGl0ZW1zIGluIGEgcGF0dGVybiBiZWhhdmUgYXMgaWYgdGhlIHN1YmplY3Qgc3RyaW5nIGlzCitwb3RlbnRpYWxseSBjb21wbGV0ZS4gRm9yIGV4YW1wbGUsIFxleiwgXGVaLCBhbmQgJCBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZQorc3ViamVjdCwgYXMgbm9ybWFsLCBhbmQgZm9yIFxlYiBhbmQgXGVCIHRoZSBlbmQgb2YgdGhlIHN1YmplY3QgaXMgdHJlYXRlZCBhcyBhCitub24tYWxwaGFudW1lcmljLgorLlAKK0lmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcGFydGlhbCBtYXRjaCwgdGhlIGZpcnN0IG9uZSB0aGF0IHdhcyBmb3VuZCBwcm92aWRlcwordGhlIGRhdGEgdGhhdCBpcyByZXR1cm5lZC4gQ29uc2lkZXIgdGhpcyBwYXR0ZXJuOgorLnNwCisgIC8xMjNcZXcrWHxkb2dZLworLnNwCitJZiB0aGlzIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgc3ViamVjdCBzdHJpbmcgImFiYzEyM2RvZyIsIGJvdGgKK2FsdGVybmF0aXZlcyBmYWlsIHRvIG1hdGNoLCBidXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCBpcyByZWFjaGVkIGR1cmluZworbWF0Y2hpbmcsIHNvIFBDUkUyX0VSUk9SX1BBUlRJQUwgaXMgcmV0dXJuZWQuIFRoZSBvZmZzZXRzIGFyZSBzZXQgdG8gMyBhbmQgOSwKK2lkZW50aWZ5aW5nICIxMjNkb2ciIGFzIHRoZSBmaXJzdCBwYXJ0aWFsIG1hdGNoIHRoYXQgd2FzIGZvdW5kLiAoSW4gdGhpcworZXhhbXBsZSwgdGhlcmUgYXJlIHR3byBwYXJ0aWFsIG1hdGNoZXMsIGJlY2F1c2UgImRvZyIgb24gaXRzIG93biBwYXJ0aWFsbHkKK21hdGNoZXMgdGhlIHNlY29uZCBhbHRlcm5hdGl2ZS4pCisuCisuCisuU1MgIlBDUkUyX1BBUlRJQUxfSEFSRCBXSVRIIHBjcmUyX21hdGNoKCkiCisucnMKKy5zcAorSWYgUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldCBmb3IgXGZCcGNyZTJfbWF0Y2goKVxmUCwgUENSRTJfRVJST1JfUEFSVElBTCBpcworcmV0dXJuZWQgYXMgc29vbiBhcyBhIHBhcnRpYWwgbWF0Y2ggaXMgZm91bmQsIHdpdGhvdXQgY29udGludWluZyB0byBzZWFyY2ggZm9yCitwb3NzaWJsZSBjb21wbGV0ZSBtYXRjaGVzLiBUaGlzIG9wdGlvbiBpcyAiaGFyZCIgYmVjYXVzZSBpdCBwcmVmZXJzIGFuIGVhcmxpZXIKK3BhcnRpYWwgbWF0Y2ggb3ZlciBhIGxhdGVyIGNvbXBsZXRlIG1hdGNoLiBGb3IgdGhpcyByZWFzb24sIHRoZSBhc3N1bXB0aW9uIGlzCittYWRlIHRoYXQgdGhlIGVuZCBvZiB0aGUgc3VwcGxpZWQgc3ViamVjdCBzdHJpbmcgbWF5IG5vdCBiZSB0aGUgdHJ1ZSBlbmQgb2YgdGhlCithdmFpbGFibGUgZGF0YSwgYW5kIHNvLCBpZiBcZXosIFxlWiwgXGViLCBcZUIsIG9yICQgYXJlIGVuY291bnRlcmVkIGF0IHRoZSBlbmQKK29mIHRoZSBzdWJqZWN0LCB0aGUgcmVzdWx0IGlzIFBDUkUyX0VSUk9SX1BBUlRJQUwsIHByb3ZpZGVkIHRoYXQgYXQgbGVhc3Qgb25lCitjaGFyYWN0ZXIgaW4gdGhlIHN1YmplY3QgaGFzIGJlZW4gaW5zcGVjdGVkLgorLgorLgorLlNTICJDb21wYXJpbmcgaGFyZCBhbmQgc29mdCBwYXJ0aWFsIG1hdGNoaW5nIgorLnJzCisuc3AKK1RoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3byBwYXJ0aWFsIG1hdGNoaW5nIG9wdGlvbnMgY2FuIGJlIGlsbHVzdHJhdGVkIGJ5IGEKK3BhdHRlcm4gc3VjaCBhczoKKy5zcAorICAvZG9nKHNib2R5KT8vCisuc3AKK1RoaXMgbWF0Y2hlcyBlaXRoZXIgImRvZyIgb3IgImRvZ3Nib2R5IiwgZ3JlZWRpbHkgKHRoYXQgaXMsIGl0IHByZWZlcnMgdGhlCitsb25nZXIgc3RyaW5nIGlmIHBvc3NpYmxlKS4gSWYgaXQgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBzdHJpbmcgImRvZyIgd2l0aAorUENSRTJfUEFSVElBTF9TT0ZULCBpdCB5aWVsZHMgYSBjb21wbGV0ZSBtYXRjaCBmb3IgImRvZyIuIEhvd2V2ZXIsIGlmCitQQ1JFMl9QQVJUSUFMX0hBUkQgaXMgc2V0LCB0aGUgcmVzdWx0IGlzIFBDUkUyX0VSUk9SX1BBUlRJQUwuIE9uIHRoZSBvdGhlcgoraGFuZCwgaWYgdGhlIHBhdHRlcm4gaXMgbWFkZSB1bmdyZWVkeSB0aGUgcmVzdWx0IGlzIGRpZmZlcmVudDoKKy5zcAorICAvZG9nKHNib2R5KT8/LworLnNwCitJbiB0aGlzIGNhc2UgdGhlIHJlc3VsdCBpcyBhbHdheXMgYSBjb21wbGV0ZSBtYXRjaCBiZWNhdXNlIHRoYXQgaXMgZm91bmQgZmlyc3QsCithbmQgbWF0Y2hpbmcgbmV2ZXIgY29udGludWVzIGFmdGVyIGZpbmRpbmcgYSBjb21wbGV0ZSBtYXRjaC4gSXQgbWlnaHQgYmUgZWFzaWVyCit0byBmb2xsb3cgdGhpcyBleHBsYW5hdGlvbiBieSB0aGlua2luZyBvZiB0aGUgdHdvIHBhdHRlcm5zIGxpa2UgdGhpczoKKy5zcAorICAvZG9nKHNib2R5KT8vICAgIGlzIHRoZSBzYW1lIGFzICAvZG9nc2JvZHl8ZG9nLworICAvZG9nKHNib2R5KT8/LyAgIGlzIHRoZSBzYW1lIGFzICAvZG9nfGRvZ3Nib2R5LworLnNwCitUaGUgc2Vjb25kIHBhdHRlcm4gd2lsbCBuZXZlciBtYXRjaCAiZG9nc2JvZHkiLCBiZWNhdXNlIGl0IHdpbGwgYWx3YXlzIGZpbmQgdGhlCitzaG9ydGVyIG1hdGNoIGZpcnN0LgorLgorLgorLlNIICJQQVJUSUFMIE1BVENISU5HIFVTSU5HIHBjcmUyX2RmYV9tYXRjaCgpIgorLnJzCisuc3AKK1RoZSBERkEgZnVuY3Rpb25zIG1vdmUgYWxvbmcgdGhlIHN1YmplY3Qgc3RyaW5nIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIsIHdpdGhvdXQKK2JhY2t0cmFja2luZywgc2VhcmNoaW5nIGZvciBhbGwgcG9zc2libGUgbWF0Y2hlcyBzaW11bHRhbmVvdXNseS4gSWYgdGhlIGVuZCBvZgordGhlIHN1YmplY3QgaXMgcmVhY2hlZCBiZWZvcmUgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgdGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5CitvZiBhIHBhcnRpYWwgbWF0Y2gsIGFnYWluIHByb3ZpZGVkIHRoYXQgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBoYXMgYmVlbgoraW5zcGVjdGVkLgorLlAKK1doZW4gUENSRTJfUEFSVElBTF9TT0ZUIGlzIHNldCwgUENSRTJfRVJST1JfUEFSVElBTCBpcyByZXR1cm5lZCBvbmx5IGlmIHRoZXJlCitoYXZlIGJlZW4gbm8gY29tcGxldGUgbWF0Y2hlcy4gT3RoZXJ3aXNlLCB0aGUgY29tcGxldGUgbWF0Y2hlcyBhcmUgcmV0dXJuZWQuCitIb3dldmVyLCBpZiBQQ1JFMl9QQVJUSUFMX0hBUkQgaXMgc2V0LCBhIHBhcnRpYWwgbWF0Y2ggdGFrZXMgcHJlY2VkZW5jZSBvdmVyCithbnkgY29tcGxldGUgbWF0Y2hlcy4gVGhlIHBvcnRpb24gb2YgdGhlIHN0cmluZyB0aGF0IHdhcyBtYXRjaGVkIHdoZW4gdGhlCitsb25nZXN0IHBhcnRpYWwgbWF0Y2ggd2FzIGZvdW5kIGlzIHNldCBhcyB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RyaW5nLgorLlAKK0JlY2F1c2UgdGhlIERGQSBmdW5jdGlvbnMgYWx3YXlzIHNlYXJjaCBmb3IgYWxsIHBvc3NpYmxlIG1hdGNoZXMsIGFuZCB0aGVyZSBpcworbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGdyZWVkeSBhbmQgdW5ncmVlZHkgcmVwZXRpdGlvbiwgdGhlaXIgYmVoYXZpb3VyIGlzCitkaWZmZXJlbnQgZnJvbSB0aGUgc3RhbmRhcmQgZnVuY3Rpb25zIHdoZW4gUENSRTJfUEFSVElBTF9IQVJEIGlzIHNldC4gQ29uc2lkZXIKK3RoZSBzdHJpbmcgImRvZyIgbWF0Y2hlZCBhZ2FpbnN0IHRoZSB1bmdyZWVkeSBwYXR0ZXJuIHNob3duIGFib3ZlOgorLnNwCisgIC9kb2coc2JvZHkpPz8vCisuc3AKK1doZXJlYXMgdGhlIHN0YW5kYXJkIGZ1bmN0aW9uIHN0b3BzIGFzIHNvb24gYXMgaXQgZmluZHMgdGhlIGNvbXBsZXRlIG1hdGNoIGZvcgorImRvZyIsIHRoZSBERkEgZnVuY3Rpb24gYWxzbyBmaW5kcyB0aGUgcGFydGlhbCBtYXRjaCBmb3IgImRvZ3Nib2R5IiwgYW5kIHNvCityZXR1cm5zIHRoYXQgd2hlbiBQQ1JFMl9QQVJUSUFMX0hBUkQgaXMgc2V0LgorLgorLgorLlNIICJQQVJUSUFMIE1BVENISU5HIEFORCBXT1JEIEJPVU5EQVJJRVMiCisucnMKKy5zcAorSWYgYSBwYXR0ZXJuIGVuZHMgd2l0aCBvbmUgb2Ygc2VxdWVuY2VzIFxlYiBvciBcZUIsIHdoaWNoIHRlc3QgZm9yIHdvcmQKK2JvdW5kYXJpZXMsIHBhcnRpYWwgbWF0Y2hpbmcgd2l0aCBQQ1JFMl9QQVJUSUFMX1NPRlQgY2FuIGdpdmUgY291bnRlci1pbnR1aXRpdmUKK3Jlc3VsdHMuIENvbnNpZGVyIHRoaXMgcGF0dGVybjoKKy5zcAorICAvXGViY2F0XGViLworLnNwCitUaGlzIG1hdGNoZXMgImNhdCIsIHByb3ZpZGVkIHRoZXJlIGlzIGEgd29yZCBib3VuZGFyeSBhdCBlaXRoZXIgZW5kLiBJZiB0aGUKK3N1YmplY3Qgc3RyaW5nIGlzICJ0aGUgY2F0IiwgdGhlIGNvbXBhcmlzb24gb2YgdGhlIGZpbmFsICJ0IiB3aXRoIGEgZm9sbG93aW5nCitjaGFyYWN0ZXIgY2Fubm90IHRha2UgcGxhY2UsIHNvIGEgcGFydGlhbCBtYXRjaCBpcyBmb3VuZC4gSG93ZXZlciwgbm9ybWFsCittYXRjaGluZyBjYXJyaWVzIG9uLCBhbmQgXGViIG1hdGNoZXMgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCB3aGVuIHRoZSBsYXN0CitjaGFyYWN0ZXIgaXMgYSBsZXR0ZXIsIHNvIGEgY29tcGxldGUgbWF0Y2ggaXMgZm91bmQuIFRoZSByZXN1bHQsIHRoZXJlZm9yZSwgaXMKK1xmSW5vdFxmUCBQQ1JFMl9FUlJPUl9QQVJUSUFMLiBVc2luZyBQQ1JFMl9QQVJUSUFMX0hBUkQgaW4gdGhpcyBjYXNlIGRvZXMgeWllbGQKK1BDUkUyX0VSUk9SX1BBUlRJQUwsIGJlY2F1c2UgdGhlbiB0aGUgcGFydGlhbCBtYXRjaCB0YWtlcyBwcmVjZWRlbmNlLgorLgorLgorLlNIICJFWEFNUExFIE9GIFBBUlRJQUwgTUFUQ0hJTkcgVVNJTkcgUENSRTJURVNUIgorLnJzCisuc3AKK0lmIHRoZSBcZkJwYXJ0aWFsX3NvZnRcZlAgKG9yIFxmQnBzXGZQKSBtb2RpZmllciBpcyBwcmVzZW50IG9uIGEKK1xmQnBjcmUydGVzdFxmUCBkYXRhIGxpbmUsIHRoZSBQQ1JFMl9QQVJUSUFMX1NPRlQgb3B0aW9uIGlzIHVzZWQgZm9yIHRoZSBtYXRjaC4KK0hlcmUgaXMgYSBydW4gb2YgXGZCcGNyZTJ0ZXN0XGZQIHRoYXQgdXNlcyB0aGUgZGF0ZSBleGFtcGxlIHF1b3RlZCBhYm92ZToKKy5zcAorICAgIHJlPiAvXlxlZD9cZWQoamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMpXGVkXGVkJC8KKyAgZGF0YT4gMjVqdW4wNFxlPXBzCisgICAwOiAyNWp1bjA0CisgICAxOiBqdW4KKyAgZGF0YT4gMjVkZWMzXGU9cHMKKyAgUGFydGlhbCBtYXRjaDogMjNkZWMzCisgIGRhdGE+IDNqdVxlPXBzCisgIFBhcnRpYWwgbWF0Y2g6IDNqdQorICBkYXRhPiAzanVqXGU9cHMKKyAgTm8gbWF0Y2gKKyAgZGF0YT4galxlPXBzCisgIE5vIG1hdGNoCisuc3AKK1RoZSBmaXJzdCBkYXRhIHN0cmluZyBpcyBtYXRjaGVkIGNvbXBsZXRlbHksIHNvIFxmQnBjcmUydGVzdFxmUCBzaG93cyB0aGUKK21hdGNoZWQgc3Vic3RyaW5ncy4gVGhlIHJlbWFpbmluZyBmb3VyIHN0cmluZ3MgZG8gbm90IG1hdGNoIHRoZSBjb21wbGV0ZQorcGF0dGVybiwgYnV0IHRoZSBmaXJzdCB0d28gYXJlIHBhcnRpYWwgbWF0Y2hlcy4gU2ltaWxhciBvdXRwdXQgaXMgb2J0YWluZWQKK2lmIERGQSBtYXRjaGluZyBpcyB1c2VkLgorLlAKK0lmIHRoZSBcZkJwYXJ0aWFsX2hhcmRcZlAgKG9yIFxmQnBoXGZQKSBtb2RpZmllciBpcyBwcmVzZW50IG9uIGEKK1xmQnBjcmUydGVzdFxmUCBkYXRhIGxpbmUsIHRoZSBQQ1JFMl9QQVJUSUFMX0hBUkQgb3B0aW9uIGlzIHNldCBmb3IgdGhlIG1hdGNoLgorLgorLgorLlNIICJNVUxUSS1TRUdNRU5UIE1BVENISU5HIFdJVEggcGNyZTJfZGZhX21hdGNoKCkiCisucnMKKy5zcAorV2hlbiBhIHBhcnRpYWwgbWF0Y2ggaGFzIGJlZW4gZm91bmQgdXNpbmcgYSBERkEgbWF0Y2hpbmcgZnVuY3Rpb24sIGl0IGlzCitwb3NzaWJsZSB0byBjb250aW51ZSB0aGUgbWF0Y2ggYnkgcHJvdmlkaW5nIGFkZGl0aW9uYWwgc3ViamVjdCBkYXRhIGFuZCBjYWxsaW5nCit0aGUgZnVuY3Rpb24gYWdhaW4gd2l0aCB0aGUgc2FtZSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24sIHRoaXMgdGltZSBzZXR0aW5nCit0aGUgUENSRTJfREZBX1JFU1RBUlQgb3B0aW9uLiBZb3UgbXVzdCBwYXNzIHRoZSBzYW1lIHdvcmtpbmcgc3BhY2UgYXMgYmVmb3JlLAorYmVjYXVzZSB0aGlzIGlzIHdoZXJlIGRldGFpbHMgb2YgdGhlIHByZXZpb3VzIHBhcnRpYWwgbWF0Y2ggYXJlIHN0b3JlZC4gSGVyZSBpcworYW4gZXhhbXBsZSB1c2luZyBcZkJwY3JlMnRlc3RcZlA6Cisuc3AKKyAgICByZT4gL15cZWQ/XGVkKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKVxlZFxlZCQvCisgIGRhdGE+IDIzamFcZT1kZmEscHMKKyAgUGFydGlhbCBtYXRjaDogMjNqYQorICBkYXRhPiBuMDVcZT1kZmEsZGZhX3Jlc3RhcnQKKyAgIDA6IG4wNQorLnNwCitUaGUgZmlyc3QgY2FsbCBoYXMgIjIzamEiIGFzIHRoZSBzdWJqZWN0LCBhbmQgcmVxdWVzdHMgcGFydGlhbCBtYXRjaGluZzsgdGhlCitzZWNvbmQgY2FsbCBoYXMgIm4wNSIgYXMgdGhlIHN1YmplY3QgZm9yIHRoZSBjb250aW51ZWQgKHJlc3RhcnRlZCkgbWF0Y2guCitOb3RpY2UgdGhhdCB3aGVuIHRoZSBtYXRjaCBpcyBjb21wbGV0ZSwgb25seSB0aGUgbGFzdCBwYXJ0IGlzIHNob3duOyBQQ1JFMiBkb2VzCitub3QgcmV0YWluIHRoZSBwcmV2aW91c2x5IHBhcnRpYWxseS1tYXRjaGVkIHN0cmluZy4gSXQgaXMgdXAgdG8gdGhlIGNhbGxpbmcKK3Byb2dyYW0gdG8gZG8gdGhhdCBpZiBpdCBuZWVkcyB0by4KKy5QCitUaGF0IG1lYW5zIHRoYXQsIGZvciBhbiB1bmFuY2hvcmVkIHBhdHRlcm4sIGlmIGEgY29udGludWVkIG1hdGNoIGZhaWxzLCBpdCBpcworbm90IHBvc3NpYmxlIHRvIHRyeSBhZ2FpbiBhdCBhIG5ldyBzdGFydGluZyBwb2ludC4gQWxsIHRoaXMgZmFjaWxpdHkgaXMgY2FwYWJsZQorb2YgZG9pbmcgaXMgY29udGludWluZyB3aXRoIHRoZSBwcmV2aW91cyBtYXRjaCBhdHRlbXB0LiBJbiB0aGUgcHJldmlvdXMKK2V4YW1wbGUsIGlmIHRoZSBzZWNvbmQgc2V0IG9mIGRhdGEgaXMgInVnMjMiIHRoZSByZXN1bHQgaXMgbm8gbWF0Y2gsIGV2ZW4KK3Rob3VnaCB0aGVyZSB3b3VsZCBiZSBhIG1hdGNoIGZvciAiYXVnMjMiIGlmIHRoZSBlbnRpcmUgc3RyaW5nIHdlcmUgZ2l2ZW4gYXQKK29uY2UuIERlcGVuZGluZyBvbiB0aGUgYXBwbGljYXRpb24sIHRoaXMgbWF5IG9yIG1heSBub3QgYmUgd2hhdCB5b3Ugd2FudC4KK1RoZSBvbmx5IHdheSB0byBhbGxvdyBmb3Igc3RhcnRpbmcgYWdhaW4gYXQgdGhlIG5leHQgY2hhcmFjdGVyIGlzIHRvIHJldGFpbiB0aGUKK21hdGNoZWQgcGFydCBvZiB0aGUgc3ViamVjdCBhbmQgdHJ5IGEgbmV3IGNvbXBsZXRlIG1hdGNoLgorLlAKK1lvdSBjYW4gc2V0IHRoZSBQQ1JFMl9QQVJUSUFMX1NPRlQgb3IgUENSRTJfUEFSVElBTF9IQVJEIG9wdGlvbnMgd2l0aAorUENSRTJfREZBX1JFU1RBUlQgdG8gY29udGludWUgcGFydGlhbCBtYXRjaGluZyBvdmVyIG11bHRpcGxlIHNlZ21lbnRzLiBUaGlzCitmYWNpbGl0eSBjYW4gYmUgdXNlZCB0byBwYXNzIHZlcnkgbG9uZyBzdWJqZWN0IHN0cmluZ3MgdG8gdGhlIERGQSBtYXRjaGluZworZnVuY3Rpb25zLgorLgorLgorLlNIICJNVUxUSS1TRUdNRU5UIE1BVENISU5HIFdJVEggcGNyZTJfbWF0Y2goKSIKKy5ycworLnNwCitVbmxpa2UgdGhlIERGQSBmdW5jdGlvbiwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlc3RhcnQgdGhlIHByZXZpb3VzIG1hdGNoIHdpdGgKK2EgbmV3IHNlZ21lbnQgb2YgZGF0YSB3aGVuIHVzaW5nIFxmQnBjcmUyX21hdGNoKClcZlAuIEluc3RlYWQsIG5ldyBkYXRhIG11c3QgYmUKK2FkZGVkIHRvIHRoZSBwcmV2aW91cyBzdWJqZWN0IHN0cmluZywgYW5kIHRoZSBlbnRpcmUgbWF0Y2ggcmUtcnVuLCBzdGFydGluZworZnJvbSB0aGUgcG9pbnQgd2hlcmUgdGhlIHBhcnRpYWwgbWF0Y2ggb2NjdXJyZWQuIEVhcmxpZXIgZGF0YSBjYW4gYmUgZGlzY2FyZGVkLgorLlAKK0l0IGlzIGJlc3QgdG8gdXNlIFBDUkUyX1BBUlRJQUxfSEFSRCBpbiB0aGlzIHNpdHVhdGlvbiwgYmVjYXVzZSBpdCBkb2VzIG5vdAordHJlYXQgdGhlIGVuZCBvZiBhIHNlZ21lbnQgYXMgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCB3aGVuIG1hdGNoaW5nIFxleiwgXGVaLAorXGViLCBcZUIsIGFuZCAkLiBDb25zaWRlciBhbiB1bmFuY2hvcmVkIHBhdHRlcm4gdGhhdCBtYXRjaGVzIGRhdGVzOgorLnNwCisgICAgcmU+IC9cZWQ/XGVkKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKVxlZFxlZC8KKyAgZGF0YT4gVGhlIGRhdGUgaXMgMjNqYVxlPXBoCisgIFBhcnRpYWwgbWF0Y2g6IDIzamEKKy5zcAorQXQgdGhpcyBzdGFnZSwgYW4gYXBwbGljYXRpb24gY291bGQgZGlzY2FyZCB0aGUgdGV4dCBwcmVjZWRpbmcgIjIzamEiLCBhZGQgb24KK3RleHQgZnJvbSB0aGUgbmV4dCBzZWdtZW50LCBhbmQgY2FsbCB0aGUgbWF0Y2hpbmcgZnVuY3Rpb24gYWdhaW4uIFVubGlrZSB0aGUKK0RGQSBtYXRjaGluZyBmdW5jdGlvbiwgdGhlIGVudGlyZSBtYXRjaGluZyBzdHJpbmcgbXVzdCBhbHdheXMgYmUgYXZhaWxhYmxlLAorYW5kIHRoZSBjb21wbGV0ZSBtYXRjaGluZyBwcm9jZXNzIG9jY3VycyBmb3IgZWFjaCBjYWxsLCBzbyBtb3JlIG1lbW9yeSBhbmQgbW9yZQorcHJvY2Vzc2luZyB0aW1lIGlzIG5lZWRlZC4KKy4KKy4KKy5TSCAiSVNTVUVTIFdJVEggTVVMVEktU0VHTUVOVCBNQVRDSElORyIKKy5ycworLnNwCitDZXJ0YWluIHR5cGVzIG9mIHBhdHRlcm4gbWF5IGdpdmUgcHJvYmxlbXMgd2l0aCBtdWx0aS1zZWdtZW50IG1hdGNoaW5nLAord2hpY2hldmVyIG1hdGNoaW5nIGZ1bmN0aW9uIGlzIHVzZWQuCisuUAorMS4gSWYgdGhlIHBhdHRlcm4gY29udGFpbnMgYSB0ZXN0IGZvciB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSwgeW91IG5lZWQgdG8gcGFzcwordGhlIFBDUkUyX05PVEJPTCBvcHRpb24gd2hlbiB0aGUgc3ViamVjdCBzdHJpbmcgZm9yIGFueSBjYWxsIGRvZXMgc3RhcnQgYXQgdGhlCitiZWdpbm5pbmcgb2YgYSBsaW5lLiBUaGVyZSBpcyBhbHNvIGEgUENSRTJfTk9URU9MIG9wdGlvbiwgYnV0IGluIHByYWN0aWNlIHdoZW4KK2RvaW5nIG11bHRpLXNlZ21lbnQgbWF0Y2hpbmcgeW91IHNob3VsZCBiZSB1c2luZyBQQ1JFMl9QQVJUSUFMX0hBUkQsIHdoaWNoCitpbmNsdWRlcyB0aGUgZWZmZWN0IG9mIFBDUkUyX05PVEVPTC4KKy5QCisyLiBJZiBhIHBhdHRlcm4gY29udGFpbnMgYSBsb29rYmVoaW5kIGFzc2VydGlvbiwgY2hhcmFjdGVycyB0aGF0IHByZWNlZGUgdGhlCitzdGFydCBvZiB0aGUgcGFydGlhbCBtYXRjaCBtYXkgaGF2ZSBiZWVuIGluc3BlY3RlZCBkdXJpbmcgdGhlIG1hdGNoaW5nIHByb2Nlc3MuCitXaGVuIHVzaW5nIFxmQnBjcmUyX21hdGNoKClcZlAsIHN1ZmZpY2llbnQgY2hhcmFjdGVycyBtdXN0IGJlIHJldGFpbmVkIGZvciB0aGUKK25leHQgbWF0Y2ggYXR0ZW1wdC4gWW91IGNhbiBlbnN1cmUgdGhhdCBlbm91Z2ggY2hhcmFjdGVycyBhcmUgcmV0YWluZWQgYnkgZG9pbmcKK3RoZSBmb2xsb3dpbmc6CisuUAorQmVmb3JlIGRvaW5nIGFueSBtYXRjaGluZywgZmluZCB0aGUgbGVuZ3RoIG9mIHRoZSBsb25nZXN0IGxvb2tiZWhpbmQgaW4gdGhlCitwYXR0ZXJuIGJ5IGNhbGxpbmcgXGZCcGNyZTJfcGF0dGVybl9pbmZvKClcZlAgd2l0aCB0aGUgUENSRTJfSU5GT19NQVhMT09LQkVISU5ECitvcHRpb24uIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIGNvdW50IGlzIGluIGNoYXJhY3RlcnMsIG5vdCBjb2RlIHVuaXRzLiBBZnRlciBhCitwYXJ0aWFsIG1hdGNoLCBtb3ZpbmcgYmFjayBmcm9tIHRoZSBvdmVjdG9yWzBdIG9mZnNldCBpbiB0aGUgc3ViamVjdCBieSB0aGUKK251bWJlciBvZiBjaGFyYWN0ZXJzIGdpdmVuIGZvciB0aGUgbWF4aW11bSBsb29rYmVoaW5kIGdldHMgeW91IHRvIHRoZSBlYXJsaWVzdAorY2hhcmFjdGVyIHRoYXQgbXVzdCBiZSByZXRhaW5lZC4gSW4gYSBub24tVVRGIG9yIGEgMzItYml0IHNpdHVhdGlvbiwgbW92aW5nCitiYWNrIGlzIGp1c3QgYSBzdWJ0cmFjdGlvbiwgYnV0IGluIFVURi04IG9yIFVURi0xNiB5b3UgaGF2ZSB0byBjb3VudCBjaGFyYWN0ZXJzCit3aGlsZSBtb3ZpbmcgYmFjayB0aHJvdWdoIHRoZSBjb2RlIHVuaXRzLgorLlAKK0NoYXJhY3RlcnMgYmVmb3JlIHRoZSBwb2ludCB5b3UgaGF2ZSBub3cgcmVhY2hlZCBjYW4gYmUgZGlzY2FyZGVkLCBhbmQgYWZ0ZXIKK3RoZSBuZXh0IHNlZ21lbnQgaGFzIGJlZW4gYWRkZWQgdG8gd2hhdCBpcyByZXRhaW5lZCwgeW91IHNob3VsZCBydW4gdGhlIG5leHQKK21hdGNoIHdpdGggdGhlIFxmQnN0YXJ0b2Zmc2V0XGZQIGFyZ3VtZW50IHNldCBzbyB0aGF0IHRoZSBtYXRjaCBiZWdpbnMgYXQgdGhlCitzYW1lIHBvaW50IGFzIGJlZm9yZS4KKy5QCitGb3IgZXhhbXBsZSwgaWYgdGhlIHBhdHRlcm4gIig/PD0xMjMpYWJjIiBpcyBwYXJ0aWFsbHkgbWF0Y2hlZCBhZ2FpbnN0IHRoZQorc3RyaW5nICJ4eDEyM2FiIiwgdGhlIG92ZWN0b3Igb2Zmc2V0cyBhcmUgNSBhbmQgNyAoImFiIikuIFRoZSBtYXhpbXVtCitsb29rYmVoaW5kIGNvdW50IGlzIDMsIHNvIGFsbCBjaGFyYWN0ZXJzIGJlZm9yZSBvZmZzZXQgMiBjYW4gYmUgZGlzY2FyZGVkLiBUaGUKK3ZhbHVlIG9mIFxmQnN0YXJ0b2Zmc2V0XGZQIGZvciB0aGUgbmV4dCBtYXRjaCBzaG91bGQgYmUgMy4gV2hlbiBcZkJwY3JlMnRlc3RcZlAKK2Rpc3BsYXlzIGEgcGFydGlhbCBtYXRjaCwgaXQgaW5kaWNhdGVzIHRoZSBsb29rYmVoaW5kIGNoYXJhY3RlcnMgd2l0aCAnPCcKK2NoYXJhY3RlcnM6Cisuc3AKKyAgICByZT4gIig/PD0xMjMpYWJjIgorICBkYXRhPiB4eDEyM2FiXGU9cGgKKyAgUGFydGlhbCBtYXRjaDogMTIzYWIKKyAgICAgICAgICAgICAgICAgPDw8CisuUAorMy4gQmVjYXVzZSBhIHBhcnRpYWwgbWF0Y2ggbXVzdCBhbHdheXMgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCB3aGF0CittaWdodCBiZSBjb25zaWRlcmVkIGEgcGFydGlhbCBtYXRjaCBvZiBhbiBlbXB0eSBzdHJpbmcgYWN0dWFsbHkgZ2l2ZXMgYSAibm8KK21hdGNoIiByZXN1bHQuIEZvciBleGFtcGxlOgorLnNwCisgICAgcmU+IC9jKD88PWFiYyl4LworICBkYXRhPiBhYlxlPXBzCisgIE5vIG1hdGNoCisuc3AKK0lmIHRoZSBuZXh0IHNlZ21lbnQgYmVnaW5zICJjeCIsIGEgbWF0Y2ggc2hvdWxkIGJlIGZvdW5kLCBidXQgdGhpcyB3aWxsIG9ubHkKK2hhcHBlbiBpZiBjaGFyYWN0ZXJzIGZyb20gdGhlIHByZXZpb3VzIHNlZ21lbnQgYXJlIHJldGFpbmVkLiBGb3IgdGhpcyByZWFzb24sIGEKKyJubyBtYXRjaCIgcmVzdWx0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyAicGFydGlhbCBtYXRjaCBvZiBhbiBlbXB0eSBzdHJpbmciCit3aGVuIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIGxvb2tiZWhpbmRzLgorLlAKKzQuIE1hdGNoaW5nIGEgc3ViamVjdCBzdHJpbmcgdGhhdCBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIHNlZ21lbnRzIG1heSBub3QKK2Fsd2F5cyBwcm9kdWNlIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGFzIG1hdGNoaW5nIG92ZXIgb25lIHNpbmdsZSBsb25nIHN0cmluZywKK2VzcGVjaWFsbHkgd2hlbiBQQ1JFMl9QQVJUSUFMX1NPRlQgaXMgdXNlZC4gVGhlIHNlY3Rpb24gIlBhcnRpYWwgTWF0Y2hpbmcgYW5kCitXb3JkIEJvdW5kYXJpZXMiIGFib3ZlIGRlc2NyaWJlcyBhbiBpc3N1ZSB0aGF0IGFyaXNlcyBpZiB0aGUgcGF0dGVybiBlbmRzIHdpdGgKK1xlYiBvciBcZUIuIEFub3RoZXIga2luZCBvZiBkaWZmZXJlbmNlIG1heSBvY2N1ciB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZQorbWF0Y2hpbmcgcG9zc2liaWxpdGllcywgYmVjYXVzZSAoZm9yIFBDUkUyX1BBUlRJQUxfU09GVCkgYSBwYXJ0aWFsIG1hdGNoIHJlc3VsdAoraXMgZ2l2ZW4gb25seSB3aGVuIHRoZXJlIGFyZSBubyBjb21wbGV0ZWQgbWF0Y2hlcy4gVGhpcyBtZWFucyB0aGF0IGFzIHNvb24gYXMKK3RoZSBzaG9ydGVzdCBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgY29udGludWF0aW9uIHRvIGEgbmV3IHN1YmplY3Qgc2VnbWVudCBpcyBubworbG9uZ2VyIHBvc3NpYmxlLiBDb25zaWRlciB0aGlzIFxmQnBjcmUydGVzdFxmUCBleGFtcGxlOgorLnNwCisgICAgcmU+IC9kb2coc2JvZHkpPy8KKyAgZGF0YT4gZG9nc2JcZT1wcworICAgMDogZG9nCisgIGRhdGE+IGRvXGU9cHMsZGZhCisgIFBhcnRpYWwgbWF0Y2g6IGRvCisgIGRhdGE+IGdzYlxlPXBzLGRmYSxkZmFfcmVzdGFydAorICAgMDogZworICBkYXRhPiBkb2dzYm9keVxlPWRmYQorICAgMDogZG9nc2JvZHkKKyAgIDE6IGRvZworLnNwCitUaGUgZmlyc3QgZGF0YSBsaW5lIHBhc3NlcyB0aGUgc3RyaW5nICJkb2dzYiIgdG8gYSBzdGFuZGFyZCBtYXRjaGluZyBmdW5jdGlvbiwKK3NldHRpbmcgdGhlIFBDUkUyX1BBUlRJQUxfU09GVCBvcHRpb24uIEFsdGhvdWdoIHRoZSBzdHJpbmcgaXMgYSBwYXJ0aWFsIG1hdGNoCitmb3IgImRvZ3Nib2R5IiwgdGhlIHJlc3VsdCBpcyBub3QgUENSRTJfRVJST1JfUEFSVElBTCwgYmVjYXVzZSB0aGUgc2hvcnRlcgorc3RyaW5nICJkb2ciIGlzIGEgY29tcGxldGUgbWF0Y2guIFNpbWlsYXJseSwgd2hlbiB0aGUgc3ViamVjdCBpcyBwcmVzZW50ZWQgdG8KK2EgREZBIG1hdGNoaW5nIGZ1bmN0aW9uIGluIHNldmVyYWwgcGFydHMgKCJkbyIgYW5kICJnc2IiIGJlaW5nIHRoZSBmaXJzdCB0d28pCit0aGUgbWF0Y2ggc3RvcHMgd2hlbiAiZG9nIiBoYXMgYmVlbiBmb3VuZCwgYW5kIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjb250aW51ZS4KK09uIHRoZSBvdGhlciBoYW5kLCBpZiAiZG9nc2JvZHkiIGlzIHByZXNlbnRlZCBhcyBhIHNpbmdsZSBzdHJpbmcsIGEgREZBCittYXRjaGluZyBmdW5jdGlvbiBmaW5kcyBib3RoIG1hdGNoZXMuCisuUAorQmVjYXVzZSBvZiB0aGVzZSBwcm9ibGVtcywgaXQgaXMgYmVzdCB0byB1c2UgUENSRTJfUEFSVElBTF9IQVJEIHdoZW4gbWF0Y2hpbmcKK211bHRpLXNlZ21lbnQgZGF0YS4gVGhlIGV4YW1wbGUgYWJvdmUgdGhlbiBiZWhhdmVzIGRpZmZlcmVudGx5OgorLnNwCisgICAgcmU+IC9kb2coc2JvZHkpPy8KKyAgZGF0YT4gZG9nc2JcZT1waAorICBQYXJ0aWFsIG1hdGNoOiBkb2dzYgorICBkYXRhPiBkb1xlPXBzLGRmYQorICBQYXJ0aWFsIG1hdGNoOiBkbworICBkYXRhPiBnc2JcZT1waCxkZmEsZGZhX3Jlc3RhcnQKKyAgUGFydGlhbCBtYXRjaDogZ3NiCisuc3AKKzUuIFBhdHRlcm5zIHRoYXQgY29udGFpbiBhbHRlcm5hdGl2ZXMgYXQgdGhlIHRvcCBsZXZlbCB3aGljaCBkbyBub3QgYWxsIHN0YXJ0Cit3aXRoIHRoZSBzYW1lIHBhdHRlcm4gaXRlbSBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQgd2hlbiBQQ1JFMl9ERkFfUkVTVEFSVCBpcwordXNlZC4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoaXMgcGF0dGVybjoKKy5zcAorICAxMjM0fDM3ODkKKy5zcAorSWYgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIHN1YmplY3QgaXMgIkFCQzEyMyIsIGEgcGFydGlhbCBtYXRjaCBvZiB0aGUgZmlyc3QKK2FsdGVybmF0aXZlIGlzIGZvdW5kIGF0IG9mZnNldCAzLiBUaGVyZSBpcyBubyBwYXJ0aWFsIG1hdGNoIGZvciB0aGUgc2Vjb25kCithbHRlcm5hdGl2ZSwgYmVjYXVzZSBzdWNoIGEgbWF0Y2ggZG9lcyBub3Qgc3RhcnQgYXQgdGhlIHNhbWUgcG9pbnQgaW4gdGhlCitzdWJqZWN0IHN0cmluZy4gQXR0ZW1wdGluZyB0byBjb250aW51ZSB3aXRoIHRoZSBzdHJpbmcgIjc4OTAiIGRvZXMgbm90IHlpZWxkIGEKK21hdGNoIGJlY2F1c2Ugb25seSB0aG9zZSBhbHRlcm5hdGl2ZXMgdGhhdCBtYXRjaCBhdCBvbmUgcG9pbnQgaW4gdGhlIHN1YmplY3QKK2FyZSByZW1lbWJlcmVkLiBUaGUgcHJvYmxlbSBhcmlzZXMgYmVjYXVzZSB0aGUgc3RhcnQgb2YgdGhlIHNlY29uZCBhbHRlcm5hdGl2ZQorbWF0Y2hlcyB3aXRoaW4gdGhlIGZpcnN0IGFsdGVybmF0aXZlLiBUaGVyZSBpcyBubyBwcm9ibGVtIHdpdGggYW5jaG9yZWQKK3BhdHRlcm5zIG9yIHBhdHRlcm5zIHN1Y2ggYXM6Cisuc3AKKyAgMTIzNHxBQkNECisuc3AKK3doZXJlIG5vIHN0cmluZyBjYW4gYmUgYSBwYXJ0aWFsIG1hdGNoIGZvciBib3RoIGFsdGVybmF0aXZlcy4gVGhpcyBpcyBub3QgYQorcHJvYmxlbSBpZiBhIHN0YW5kYXJkIG1hdGNoaW5nIGZ1bmN0aW9uIGlzIHVzZWQsIGJlY2F1c2UgdGhlIGVudGlyZSBtYXRjaCBoYXMKK3RvIGJlIHJlcnVuIGVhY2ggdGltZToKKy5zcAorICAgIHJlPiAvMTIzNHwzNzg5LworICBkYXRhPiBBQkMxMjNcZT1waAorICBQYXJ0aWFsIG1hdGNoOiAxMjMKKyAgZGF0YT4gMTIzNzg5MAorICAgMDogMzc4OQorLnNwCitPZiBjb3Vyc2UsIGluc3RlYWQgb2YgdXNpbmcgUENSRTJfREZBX1JFU1RBUlQsIHRoZSBzYW1lIHRlY2huaXF1ZSBvZiByZS1ydW5uaW5nCit0aGUgZW50aXJlIG1hdGNoIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCB0aGUgREZBIG1hdGNoaW5nIGZ1bmN0aW9uLiBBbm90aGVyCitwb3NzaWJpbGl0eSBpcyB0byB3b3JrIHdpdGggdHdvIGJ1ZmZlcnMuIElmIGEgcGFydGlhbCBtYXRjaCBhdCBvZmZzZXQgXGZJblxmUAoraW4gdGhlIGZpcnN0IGJ1ZmZlciBpcyBmb2xsb3dlZCBieSAibm8gbWF0Y2giIHdoZW4gUENSRTJfREZBX1JFU1RBUlQgaXMgdXNlZCBvbgordGhlIHNlY29uZCBidWZmZXIsIHlvdSBjYW4gdGhlbiB0cnkgYSBuZXcgbWF0Y2ggc3RhcnRpbmcgYXQgb2Zmc2V0IFxmSW4rMVxmUCBpbgordGhlIGZpcnN0IGJ1ZmZlci4KKy4KKy4KKy5TSCBBVVRIT1IKKy5ycworLnNwCisubmYKK1BoaWxpcCBIYXplbAorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorQ2FtYnJpZGdlLCBFbmdsYW5kLgorLmZpCisuCisuCisuU0ggUkVWSVNJT04KKy5ycworLnNwCisubmYKK0xhc3QgdXBkYXRlZDogMjIgRGVjZW1iZXIgMjAxNAorQ29weXJpZ2h0IChjKSAxOTk3LTIwMTQgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCisuZmkKZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMnBhdHRlcm4uMyBiL2Rpc3QyL2RvYy9wY3JlMnBhdHRlcm4uMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDBlOWRmCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUycGF0dGVybi4zCkBAIC0wLDAgKzEsMzQzMCBAQAorLlRIIFBDUkUyUEFUVEVSTiAzICIxMyBOb3ZlbWJlciAyMDE1IiAiUENSRTIgMTAuMjEiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggIlBDUkUyIFJFR1VMQVIgRVhQUkVTU0lPTiBERVRBSUxTIgorLnJzCisuc3AKK1RoZSBzeW50YXggYW5kIHNlbWFudGljcyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgUENSRTIKK2FyZSBkZXNjcmliZWQgaW4gZGV0YWlsIGJlbG93LiBUaGVyZSBpcyBhIHF1aWNrLXJlZmVyZW5jZSBzeW50YXggc3VtbWFyeSBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnN5bnRheFxmUAorLlwiCitwYWdlLiBQQ1JFMiB0cmllcyB0byBtYXRjaCBQZXJsIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzIGNsb3NlbHkgYXMgaXQgY2FuLgorUENSRTIgYWxzbyBzdXBwb3J0cyBzb21lIGFsdGVybmF0aXZlIHJlZ3VsYXIgZXhwcmVzc2lvbiBzeW50YXggKHdoaWNoIGRvZXMgbm90Citjb25mbGljdCB3aXRoIHRoZSBQZXJsIHN5bnRheCkgaW4gb3JkZXIgdG8gcHJvdmlkZSBzb21lIGNvbXBhdGliaWxpdHkgd2l0aAorcmVndWxhciBleHByZXNzaW9ucyBpbiBQeXRob24sIC5ORVQsIGFuZCBPbmlndXJ1bWEuCisuUAorUGVybCdzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGRlc2NyaWJlZCBpbiBpdHMgb3duIGRvY3VtZW50YXRpb24sIGFuZCByZWd1bGFyCitleHByZXNzaW9ucyBpbiBnZW5lcmFsIGFyZSBjb3ZlcmVkIGluIGEgbnVtYmVyIG9mIGJvb2tzLCBzb21lIG9mIHdoaWNoIGhhdmUKK2NvcGlvdXMgZXhhbXBsZXMuIEplZmZyZXkgRnJpZWRsJ3MgIk1hc3RlcmluZyBSZWd1bGFyIEV4cHJlc3Npb25zIiwgcHVibGlzaGVkCitieSBPJ1JlaWxseSwgY292ZXJzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaW4gZ3JlYXQgZGV0YWlsLiBUaGlzIGRlc2NyaXB0aW9uIG9mCitQQ1JFMidzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgaXMgaW50ZW5kZWQgYXMgcmVmZXJlbmNlIG1hdGVyaWFsLgorLlAKK1RoaXMgZG9jdW1lbnQgZGlzY3Vzc2VzIHRoZSBwYXR0ZXJucyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgUENSRTIgd2hlbiBpdHMgbWFpbgorbWF0Y2hpbmcgZnVuY3Rpb24sIFxmQnBjcmUyX21hdGNoKClcZlAsIGlzIHVzZWQuIFBDUkUyIGFsc28gaGFzIGFuIGFsdGVybmF0aXZlCittYXRjaGluZyBmdW5jdGlvbiwgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAsIHdoaWNoIG1hdGNoZXMgdXNpbmcgYSBkaWZmZXJlbnQKK2FsZ29yaXRobSB0aGF0IGlzIG5vdCBQZXJsLWNvbXBhdGlibGUuIFNvbWUgb2YgdGhlIGZlYXR1cmVzIGRpc2N1c3NlZCBiZWxvdyBhcmUKK25vdCBhdmFpbGFibGUgd2hlbiBERkEgbWF0Y2hpbmcgaXMgdXNlZC4gVGhlIGFkdmFudGFnZXMgYW5kIGRpc2FkdmFudGFnZXMgb2YKK3RoZSBhbHRlcm5hdGl2ZSBmdW5jdGlvbiwgYW5kIGhvdyBpdCBkaWZmZXJzIGZyb20gdGhlIG5vcm1hbCBmdW5jdGlvbiwgYXJlCitkaXNjdXNzZWQgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJtYXRjaGluZ1xmUAorLlwiCitwYWdlLgorLgorLgorLlNIICJTUEVDSUFMIFNUQVJULU9GLVBBVFRFUk4gSVRFTVMiCisucnMKKy5zcAorQSBudW1iZXIgb2Ygb3B0aW9ucyB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gXGZCcGNyZTJfY29tcGlsZSgpXGZQIGNhbiBhbHNvIGJlIHNldAorYnkgc3BlY2lhbCBpdGVtcyBhdCB0aGUgc3RhcnQgb2YgYSBwYXR0ZXJuLiBUaGVzZSBhcmUgbm90IFBlcmwtY29tcGF0aWJsZSwgYnV0CithcmUgcHJvdmlkZWQgdG8gbWFrZSB0aGVzZSBvcHRpb25zIGFjY2Vzc2libGUgdG8gcGF0dGVybiB3cml0ZXJzIHdobyBhcmUgbm90CithYmxlIHRvIGNoYW5nZSB0aGUgcHJvZ3JhbSB0aGF0IHByb2Nlc3NlcyB0aGUgcGF0dGVybi4gQW55IG51bWJlciBvZiB0aGVzZQoraXRlbXMgbWF5IGFwcGVhciwgYnV0IHRoZXkgbXVzdCBhbGwgYmUgdG9nZXRoZXIgcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIHRoZQorcGF0dGVybiBzdHJpbmcsIGFuZCB0aGUgbGV0dGVycyBtdXN0IGJlIGluIHVwcGVyIGNhc2UuCisuCisuCisuU1MgIlVURiBzdXBwb3J0IgorLnJzCisuc3AKK0luIHRoZSA4LWJpdCBhbmQgMTYtYml0IFBDUkUyIGxpYnJhcmllcywgY2hhcmFjdGVycyBtYXkgYmUgY29kZWQgZWl0aGVyIGFzCitzaW5nbGUgY29kZSB1bml0cywgb3IgYXMgbXVsdGlwbGUgVVRGLTggb3IgVVRGLTE2IGNvZGUgdW5pdHMuIFVURi0zMiBjYW4gYmUKK3NwZWNpZmllZCBmb3IgdGhlIDMyLWJpdCBsaWJyYXJ5LCBpbiB3aGljaCBjYXNlIGl0IGNvbnN0cmFpbnMgdGhlIGNoYXJhY3RlcgordmFsdWVzIHRvIHZhbGlkIFVuaWNvZGUgY29kZSBwb2ludHMuIFRvIHByb2Nlc3MgVVRGIHN0cmluZ3MsIFBDUkUyIG11c3QgYmUKK2J1aWx0IHRvIGluY2x1ZGUgVW5pY29kZSBzdXBwb3J0ICh3aGljaCBpcyB0aGUgZGVmYXVsdCkuIFdoZW4gdXNpbmcgVVRGIHN0cmluZ3MKK3lvdSBtdXN0IGVpdGhlciBjYWxsIHRoZSBjb21waWxpbmcgZnVuY3Rpb24gd2l0aCB0aGUgUENSRTJfVVRGIG9wdGlvbiwgb3IgdGhlCitwYXR0ZXJuIG11c3Qgc3RhcnQgd2l0aCB0aGUgc3BlY2lhbCBzZXF1ZW5jZSAoKlVURiksIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8KK3NldHRpbmcgdGhlIHJlbGV2YW50IG9wdGlvbi4gSG93IHNldHRpbmcgYSBVVEYgbW9kZSBhZmZlY3RzIHBhdHRlcm4gbWF0Y2hpbmcgaXMKK21lbnRpb25lZCBpbiBzZXZlcmFsIHBsYWNlcyBiZWxvdy4gVGhlcmUgaXMgYWxzbyBhIHN1bW1hcnkgb2YgZmVhdHVyZXMgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJ1bmljb2RlXGZQCisuXCIKK3BhZ2UuCisuUAorU29tZSBhcHBsaWNhdGlvbnMgdGhhdCBhbGxvdyB0aGVpciB1c2VycyB0byBzdXBwbHkgcGF0dGVybnMgbWF5IHdpc2ggdG8KK3Jlc3RyaWN0IHRoZW0gdG8gbm9uLVVURiBkYXRhIGZvciBzZWN1cml0eSByZWFzb25zLiBJZiB0aGUgUENSRTJfTkVWRVJfVVRGCitvcHRpb24gaXMgcGFzc2VkIHRvIFxmQnBjcmUyX2NvbXBpbGUoKVxmUCwgKCpVVEYpIGlzIG5vdCBhbGxvd2VkLCBhbmQgaXRzCithcHBlYXJhbmNlIGluIGEgcGF0dGVybiBjYXVzZXMgYW4gZXJyb3IuCisuCisuCisuU1MgIlVuaWNvZGUgcHJvcGVydHkgc3VwcG9ydCIKKy5ycworLnNwCitBbm90aGVyIHNwZWNpYWwgc2VxdWVuY2UgdGhhdCBtYXkgYXBwZWFyIGF0IHRoZSBzdGFydCBvZiBhIHBhdHRlcm4gaXMgKCpVQ1ApLgorVGhpcyBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzIHNldHRpbmcgdGhlIFBDUkUyX1VDUCBvcHRpb246IGl0IGNhdXNlcyBzZXF1ZW5jZXMKK3N1Y2ggYXMgXGVkIGFuZCBcZXcgdG8gdXNlIFVuaWNvZGUgcHJvcGVydGllcyB0byBkZXRlcm1pbmUgY2hhcmFjdGVyIHR5cGVzLAoraW5zdGVhZCBvZiByZWNvZ25pemluZyBvbmx5IGNoYXJhY3RlcnMgd2l0aCBjb2RlcyBsZXNzIHRoYW4gMjU2IHZpYSBhIGxvb2t1cAordGFibGUuCisuUAorU29tZSBhcHBsaWNhdGlvbnMgdGhhdCBhbGxvdyB0aGVpciB1c2VycyB0byBzdXBwbHkgcGF0dGVybnMgbWF5IHdpc2ggdG8KK3Jlc3RyaWN0IHRoZW0gZm9yIHNlY3VyaXR5IHJlYXNvbnMuIElmIHRoZSBQQ1JFMl9ORVZFUl9VQ1Agb3B0aW9uIGlzIHBhc3NlZCB0bworXGZCcGNyZTJfY29tcGlsZSgpXGZQLCAoKlVDUCkgaXMgbm90IGFsbG93ZWQsIGFuZCBpdHMgYXBwZWFyYW5jZSBpbiBhIHBhdHRlcm4KK2NhdXNlcyBhbiBlcnJvci4KKy4KKy4KKy5TUyAiTG9ja2luZyBvdXQgZW1wdHkgc3RyaW5nIG1hdGNoaW5nIgorLnJzCisuc3AKK1N0YXJ0aW5nIGEgcGF0dGVybiB3aXRoICgqTk9URU1QVFkpIG9yICgqTk9URU1QVFlfQVRTVEFSVCkgaGFzIHRoZSBzYW1lIGVmZmVjdAorYXMgcGFzc2luZyB0aGUgUENSRTJfTk9URU1QVFkgb3IgUENSRTJfTk9URU1QVFlfQVRTVEFSVCBvcHRpb24gdG8gd2hpY2hldmVyCittYXRjaGluZyBmdW5jdGlvbiBpcyBzdWJzZXF1ZW50bHkgY2FsbGVkIHRvIG1hdGNoIHRoZSBwYXR0ZXJuLiBUaGVzZSBvcHRpb25zCitsb2NrIG91dCB0aGUgbWF0Y2hpbmcgb2YgZW1wdHkgc3RyaW5ncywgZWl0aGVyIGVudGlyZWx5LCBvciBvbmx5IGF0IHRoZSBzdGFydAorb2YgdGhlIHN1YmplY3QuCisuCisuCisuU1MgIkRpc2FibGluZyBhdXRvLXBvc3Nlc3NpZmljYXRpb24iCisucnMKKy5zcAorSWYgYSBwYXR0ZXJuIHN0YXJ0cyB3aXRoICgqTk9fQVVUT19QT1NTRVNTKSwgaXQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBzZXR0aW5nCit0aGUgUENSRTJfTk9fQVVUT19QT1NTRVNTIG9wdGlvbi4gVGhpcyBzdG9wcyBQQ1JFMiBmcm9tIG1ha2luZyBxdWFudGlmaWVycworcG9zc2Vzc2l2ZSB3aGVuIHdoYXQgZm9sbG93cyBjYW5ub3QgbWF0Y2ggdGhlIHJlcGVhdGVkIGl0ZW0uIEZvciBleGFtcGxlLCBieQorZGVmYXVsdCBhK2IgaXMgdHJlYXRlZCBhcyBhKytiLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorZG9jdW1lbnRhdGlvbi4KKy4KKy4KKy5TUyAiRGlzYWJsaW5nIHN0YXJ0LXVwIG9wdGltaXphdGlvbnMiCisucnMKKy5zcAorSWYgYSBwYXR0ZXJuIHN0YXJ0cyB3aXRoICgqTk9fU1RBUlRfT1BUKSwgaXQgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBzZXR0aW5nIHRoZQorUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUgb3B0aW9uLiBUaGlzIGRpc2FibGVzIHNldmVyYWwgb3B0aW1pemF0aW9ucyBmb3IgcXVpY2tseQorcmVhY2hpbmcgIm5vIG1hdGNoIiByZXN1bHRzLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorZG9jdW1lbnRhdGlvbi4KKy4KKy4KKy5TUyAiRGlzYWJsaW5nIGF1dG9tYXRpYyBhbmNob3JpbmciCisucnMKKy5zcAorSWYgYSBwYXR0ZXJuIHN0YXJ0cyB3aXRoICgqTk9fRE9UU1RBUl9BTkNIT1IpLCBpdCBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzCitzZXR0aW5nIHRoZSBQQ1JFMl9OT19ET1RTVEFSX0FOQ0hPUiBvcHRpb24uIFRoaXMgZGlzYWJsZXMgb3B0aW1pemF0aW9ucyB0aGF0CithcHBseSB0byBwYXR0ZXJucyB3aG9zZSB0b3AtbGV2ZWwgYnJhbmNoZXMgYWxsIHN0YXJ0IHdpdGggLiogKG1hdGNoIGFueSBudW1iZXIKK29mIGFyYml0cmFyeSBjaGFyYWN0ZXJzKS4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK2RvY3VtZW50YXRpb24uCisuCisuCisuU1MgIkRpc2FibGluZyBKSVQgY29tcGlsYXRpb24iCisucnMKKy5zcAorSWYgYSBwYXR0ZXJuIHRoYXQgc3RhcnRzIHdpdGggKCpOT19KSVQpIGlzIHN1Y2Nlc3NmdWxseSBjb21waWxlZCwgYW4gYXR0ZW1wdCBieQordGhlIGFwcGxpY2F0aW9uIHRvIGFwcGx5IHRoZSBKSVQgb3B0aW1pemF0aW9uIGJ5IGNhbGxpbmcKK1xmQnBjcmUyX2ppdF9jb21waWxlKClcZlAgaXMgaWdub3JlZC4KKy4KKy4KKy5TUyAiU2V0dGluZyBtYXRjaCBhbmQgcmVjdXJzaW9uIGxpbWl0cyIKKy5ycworLnNwCitUaGUgY2FsbGVyIG9mIFxmQnBjcmUyX21hdGNoKClcZlAgY2FuIHNldCBhIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlCitpbnRlcm5hbCBcZkJtYXRjaCgpXGZQIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgb24gdGhlIG1heGltdW0gZGVwdGggb2YKK3JlY3Vyc2l2ZSBjYWxscy4gVGhlc2UgZmFjaWxpdGllcyBhcmUgcHJvdmlkZWQgdG8gY2F0Y2ggcnVuYXdheSBtYXRjaGVzIHRoYXQKK2FyZSBwcm92b2tlZCBieSBwYXR0ZXJucyB3aXRoIGh1Z2UgbWF0Y2hpbmcgdHJlZXMgKGEgdHlwaWNhbCBleGFtcGxlIGlzIGEKK3BhdHRlcm4gd2l0aCBuZXN0ZWQgdW5saW1pdGVkIHJlcGVhdHMpIGFuZCB0byBhdm9pZCBydW5uaW5nIG91dCBvZiBzeXN0ZW0gc3RhY2sKK2J5IHRvbyBtdWNoIHJlY3Vyc2lvbi4gV2hlbiBvbmUgb2YgdGhlc2UgbGltaXRzIGlzIHJlYWNoZWQsIFxmQnBjcmUyX21hdGNoKClcZlAKK2dpdmVzIGFuIGVycm9yIHJldHVybi4gVGhlIGxpbWl0cyBjYW4gYWxzbyBiZSBzZXQgYnkgaXRlbXMgYXQgdGhlIHN0YXJ0IG9mIHRoZQorcGF0dGVybiBvZiB0aGUgZm9ybQorLnNwCisgICgqTElNSVRfTUFUQ0g9ZCkKKyAgKCpMSU1JVF9SRUNVUlNJT049ZCkKKy5zcAord2hlcmUgZCBpcyBhbnkgbnVtYmVyIG9mIGRlY2ltYWwgZGlnaXRzLiBIb3dldmVyLCB0aGUgdmFsdWUgb2YgdGhlIHNldHRpbmcgbXVzdAorYmUgbGVzcyB0aGFuIHRoZSB2YWx1ZSBzZXQgKG9yIGRlZmF1bHRlZCkgYnkgdGhlIGNhbGxlciBvZiBcZkJwY3JlMl9tYXRjaCgpXGZQCitmb3IgaXQgdG8gaGF2ZSBhbnkgZWZmZWN0LiBJbiBvdGhlciB3b3JkcywgdGhlIHBhdHRlcm4gd3JpdGVyIGNhbiBsb3dlciB0aGUKK2xpbWl0cyBzZXQgYnkgdGhlIHByb2dyYW1tZXIsIGJ1dCBub3QgcmFpc2UgdGhlbS4gSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZQorc2V0dGluZyBvZiBvbmUgb2YgdGhlc2UgbGltaXRzLCB0aGUgbG93ZXIgdmFsdWUgaXMgdXNlZC4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9Im5ld2xpbmVzIj48L2E+CisuU1MgIk5ld2xpbmUgY29udmVudGlvbnMiCisucnMKKy5zcAorUENSRTIgc3VwcG9ydHMgZml2ZSBkaWZmZXJlbnQgY29udmVudGlvbnMgZm9yIGluZGljYXRpbmcgbGluZSBicmVha3MgaW4KK3N0cmluZ3M6IGEgc2luZ2xlIENSIChjYXJyaWFnZSByZXR1cm4pIGNoYXJhY3RlciwgYSBzaW5nbGUgTEYgKGxpbmVmZWVkKQorY2hhcmFjdGVyLCB0aGUgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSBDUkxGLCBhbnkgb2YgdGhlIHRocmVlIHByZWNlZGluZywgb3IgYW55CitVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UuIFRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UgaGFzCisuXCIgSFRNTCA8YSBocmVmPSJwY3JlMmFwaS5odG1sI25ld2xpbmVzIj4KKy5cIiA8L2E+CitmdXJ0aGVyIGRpc2N1c3Npb24KKy5cIgorYWJvdXQgbmV3bGluZXMsIGFuZCBzaG93cyBob3cgdG8gc2V0IHRoZSBuZXdsaW5lIGNvbnZlbnRpb24gd2hlbiBjYWxsaW5nCitcZkJwY3JlMl9jb21waWxlKClcZlAuCisuUAorSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEgbmV3bGluZSBjb252ZW50aW9uIGJ5IHN0YXJ0aW5nIGEgcGF0dGVybgorc3RyaW5nIHdpdGggb25lIG9mIHRoZSBmb2xsb3dpbmcgZml2ZSBzZXF1ZW5jZXM6Cisuc3AKKyAgKCpDUikgICAgICAgIGNhcnJpYWdlIHJldHVybgorICAoKkxGKSAgICAgICAgbGluZWZlZWQKKyAgKCpDUkxGKSAgICAgIGNhcnJpYWdlIHJldHVybiwgZm9sbG93ZWQgYnkgbGluZWZlZWQKKyAgKCpBTllDUkxGKSAgIGFueSBvZiB0aGUgdGhyZWUgYWJvdmUKKyAgKCpBTlkpICAgICAgIGFsbCBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2VzCisuc3AKK1RoZXNlIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGFuZCB0aGUgb3B0aW9ucyBnaXZlbiB0byB0aGUgY29tcGlsaW5nIGZ1bmN0aW9uLiBGb3IKK2V4YW1wbGUsIG9uIGEgVW5peCBzeXN0ZW0gd2hlcmUgTEYgaXMgdGhlIGRlZmF1bHQgbmV3bGluZSBzZXF1ZW5jZSwgdGhlIHBhdHRlcm4KKy5zcAorICAoKkNSKWEuYgorLnNwCitjaGFuZ2VzIHRoZSBjb252ZW50aW9uIHRvIENSLiBUaGF0IHBhdHRlcm4gbWF0Y2hlcyAiYVxlbmIiIGJlY2F1c2UgTEYgaXMgbm8KK2xvbmdlciBhIG5ld2xpbmUuIElmIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2Ugc2V0dGluZ3MgaXMgcHJlc2VudCwgdGhlIGxhc3Qgb25lCitpcyB1c2VkLgorLlAKK1RoZSBuZXdsaW5lIGNvbnZlbnRpb24gYWZmZWN0cyB3aGVyZSB0aGUgY2lyY3VtZmxleCBhbmQgZG9sbGFyIGFzc2VydGlvbnMgYXJlCit0cnVlLiBJdCBhbHNvIGFmZmVjdHMgdGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBkb3QgbWV0YWNoYXJhY3RlciB3aGVuCitQQ1JFMl9ET1RBTEwgaXMgbm90IHNldCwgYW5kIHRoZSBiZWhhdmlvdXIgb2YgXGVOLiBIb3dldmVyLCBpdCBkb2VzIG5vdCBhZmZlY3QKK3doYXQgdGhlIFxlUiBlc2NhcGUgc2VxdWVuY2UgbWF0Y2hlcy4gQnkgZGVmYXVsdCwgdGhpcyBpcyBhbnkgVW5pY29kZSBuZXdsaW5lCitzZXF1ZW5jZSwgZm9yIFBlcmwgY29tcGF0aWJpbGl0eS4gSG93ZXZlciwgdGhpcyBjYW4gYmUgY2hhbmdlZDsgc2VlIHRoZQorZGVzY3JpcHRpb24gb2YgXGVSIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCisuXCIgSFRNTCA8YSBocmVmPSIjbmV3bGluZXNlcSI+CisuXCIgPC9hPgorIk5ld2xpbmUgc2VxdWVuY2VzIgorLlwiCitiZWxvdy4gQSBjaGFuZ2Ugb2YgXGVSIHNldHRpbmcgY2FuIGJlIGNvbWJpbmVkIHdpdGggYSBjaGFuZ2Ugb2YgbmV3bGluZQorY29udmVudGlvbi4KKy4KKy4KKy5TUyAiU3BlY2lmeWluZyB3aGF0IFxlUiBtYXRjaGVzIgorLnJzCisuc3AKK0l0IGlzIHBvc3NpYmxlIHRvIHJlc3RyaWN0IFxlUiB0byBtYXRjaCBvbmx5IENSLCBMRiwgb3IgQ1JMRiAoaW5zdGVhZCBvZiB0aGUKK2NvbXBsZXRlIHNldCBvZiBVbmljb2RlIGxpbmUgZW5kaW5ncykgYnkgc2V0dGluZyB0aGUgb3B0aW9uIFBDUkUyX0JTUl9BTllDUkxGCithdCBjb21waWxlIHRpbWUuIFRoaXMgZWZmZWN0IGNhbiBhbHNvIGJlIGFjaGlldmVkIGJ5IHN0YXJ0aW5nIGEgcGF0dGVybiB3aXRoCisoKkJTUl9BTllDUkxGKS4gRm9yIGNvbXBsZXRlbmVzcywgKCpCU1JfVU5JQ09ERSkgaXMgYWxzbyByZWNvZ25pemVkLAorY29ycmVzcG9uZGluZyB0byBQQ1JFMl9CU1JfVU5JQ09ERS4KKy4KKy4KKy5TSCAiRUJDRElDIENIQVJBQ1RFUiBDT0RFUyIKKy5ycworLnNwCitQQ1JFMiBjYW4gYmUgY29tcGlsZWQgdG8gcnVuIGluIGFuIGVudmlyb25tZW50IHRoYXQgdXNlcyBFQkNESUMgYXMgaXRzCitjaGFyYWN0ZXIgY29kZSByYXRoZXIgdGhhbiBBU0NJSSBvciBVbmljb2RlICh0eXBpY2FsbHkgYSBtYWluZnJhbWUgc3lzdGVtKS4gSW4KK3RoZSBzZWN0aW9ucyBiZWxvdywgY2hhcmFjdGVyIGNvZGUgdmFsdWVzIGFyZSBBU0NJSSBvciBVbmljb2RlOyBpbiBhbiBFQkNESUMKK2Vudmlyb25tZW50IHRoZXNlIGNoYXJhY3RlcnMgbWF5IGhhdmUgZGlmZmVyZW50IGNvZGUgdmFsdWVzLCBhbmQgdGhlcmUgYXJlIG5vCitjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gMjU1LgorLgorLgorLlNIICJDSEFSQUNURVJTIEFORCBNRVRBQ0hBUkFDVEVSUyIKKy5ycworLnNwCitBIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBhIHBhdHRlcm4gdGhhdCBpcyBtYXRjaGVkIGFnYWluc3QgYSBzdWJqZWN0IHN0cmluZyBmcm9tCitsZWZ0IHRvIHJpZ2h0LiBNb3N0IGNoYXJhY3RlcnMgc3RhbmQgZm9yIHRoZW1zZWx2ZXMgaW4gYSBwYXR0ZXJuLCBhbmQgbWF0Y2ggdGhlCitjb3JyZXNwb25kaW5nIGNoYXJhY3RlcnMgaW4gdGhlIHN1YmplY3QuIEFzIGEgdHJpdmlhbCBleGFtcGxlLCB0aGUgcGF0dGVybgorLnNwCisgIFRoZSBxdWljayBicm93biBmb3gKKy5zcAorbWF0Y2hlcyBhIHBvcnRpb24gb2YgYSBzdWJqZWN0IHN0cmluZyB0aGF0IGlzIGlkZW50aWNhbCB0byBpdHNlbGYuIFdoZW4KK2Nhc2VsZXNzIG1hdGNoaW5nIGlzIHNwZWNpZmllZCAodGhlIFBDUkUyX0NBU0VMRVNTIG9wdGlvbiksIGxldHRlcnMgYXJlIG1hdGNoZWQKK2luZGVwZW5kZW50bHkgb2YgY2FzZS4KKy5QCitUaGUgcG93ZXIgb2YgcmVndWxhciBleHByZXNzaW9ucyBjb21lcyBmcm9tIHRoZSBhYmlsaXR5IHRvIGluY2x1ZGUgYWx0ZXJuYXRpdmVzCithbmQgcmVwZXRpdGlvbnMgaW4gdGhlIHBhdHRlcm4uIFRoZXNlIGFyZSBlbmNvZGVkIGluIHRoZSBwYXR0ZXJuIGJ5IHRoZSB1c2Ugb2YKK1xmSW1ldGFjaGFyYWN0ZXJzXGZQLCB3aGljaCBkbyBub3Qgc3RhbmQgZm9yIHRoZW1zZWx2ZXMgYnV0IGluc3RlYWQgYXJlCitpbnRlcnByZXRlZCBpbiBzb21lIHNwZWNpYWwgd2F5LgorLlAKK1RoZXJlIGFyZSB0d28gZGlmZmVyZW50IHNldHMgb2YgbWV0YWNoYXJhY3RlcnM6IHRob3NlIHRoYXQgYXJlIHJlY29nbml6ZWQKK2FueXdoZXJlIGluIHRoZSBwYXR0ZXJuIGV4Y2VwdCB3aXRoaW4gc3F1YXJlIGJyYWNrZXRzLCBhbmQgdGhvc2UgdGhhdCBhcmUKK3JlY29nbml6ZWQgd2l0aGluIHNxdWFyZSBicmFja2V0cy4gT3V0c2lkZSBzcXVhcmUgYnJhY2tldHMsIHRoZSBtZXRhY2hhcmFjdGVycworYXJlIGFzIGZvbGxvd3M6Cisuc3AKKyAgXGUgICAgICBnZW5lcmFsIGVzY2FwZSBjaGFyYWN0ZXIgd2l0aCBzZXZlcmFsIHVzZXMKKyAgXiAgICAgIGFzc2VydCBzdGFydCBvZiBzdHJpbmcgKG9yIGxpbmUsIGluIG11bHRpbGluZSBtb2RlKQorICAkICAgICAgYXNzZXJ0IGVuZCBvZiBzdHJpbmcgKG9yIGxpbmUsIGluIG11bHRpbGluZSBtb2RlKQorICAuICAgICAgbWF0Y2ggYW55IGNoYXJhY3RlciBleGNlcHQgbmV3bGluZSAoYnkgZGVmYXVsdCkKKyAgWyAgICAgIHN0YXJ0IGNoYXJhY3RlciBjbGFzcyBkZWZpbml0aW9uCisgIHwgICAgICBzdGFydCBvZiBhbHRlcm5hdGl2ZSBicmFuY2gKKyAgKCAgICAgIHN0YXJ0IHN1YnBhdHRlcm4KKyAgKSAgICAgIGVuZCBzdWJwYXR0ZXJuCisgID8gICAgICBleHRlbmRzIHRoZSBtZWFuaW5nIG9mICgKKyAgICAgICAgIGFsc28gMCBvciAxIHF1YW50aWZpZXIKKyAgICAgICAgIGFsc28gcXVhbnRpZmllciBtaW5pbWl6ZXIKKyAgKiAgICAgIDAgb3IgbW9yZSBxdWFudGlmaWVyCisgICsgICAgICAxIG9yIG1vcmUgcXVhbnRpZmllcgorICAgICAgICAgYWxzbyAicG9zc2Vzc2l2ZSBxdWFudGlmaWVyIgorICB7ICAgICAgc3RhcnQgbWluL21heCBxdWFudGlmaWVyCisuc3AKK1BhcnQgb2YgYSBwYXR0ZXJuIHRoYXQgaXMgaW4gc3F1YXJlIGJyYWNrZXRzIGlzIGNhbGxlZCBhICJjaGFyYWN0ZXIgY2xhc3MiLiBJbgorYSBjaGFyYWN0ZXIgY2xhc3MgdGhlIG9ubHkgbWV0YWNoYXJhY3RlcnMgYXJlOgorLnNwCisgIFxlICAgICAgZ2VuZXJhbCBlc2NhcGUgY2hhcmFjdGVyCisgIF4gICAgICBuZWdhdGUgdGhlIGNsYXNzLCBidXQgb25seSBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyCisgIC0gICAgICBpbmRpY2F0ZXMgY2hhcmFjdGVyIHJhbmdlCisuXCIgSk9JTgorICBbICAgICAgUE9TSVggY2hhcmFjdGVyIGNsYXNzIChvbmx5IGlmIGZvbGxvd2VkIGJ5IFBPU0lYCisgICAgICAgICAgIHN5bnRheCkKKyAgXSAgICAgIHRlcm1pbmF0ZXMgdGhlIGNoYXJhY3RlciBjbGFzcworLnNwCitUaGUgZm9sbG93aW5nIHNlY3Rpb25zIGRlc2NyaWJlIHRoZSB1c2Ugb2YgZWFjaCBvZiB0aGUgbWV0YWNoYXJhY3RlcnMuCisuCisuCisuU0ggQkFDS1NMQVNICisucnMKKy5zcAorVGhlIGJhY2tzbGFzaCBjaGFyYWN0ZXIgaGFzIHNldmVyYWwgdXNlcy4gRmlyc3RseSwgaWYgaXQgaXMgZm9sbG93ZWQgYnkgYQorY2hhcmFjdGVyIHRoYXQgaXMgbm90IGEgbnVtYmVyIG9yIGEgbGV0dGVyLCBpdCB0YWtlcyBhd2F5IGFueSBzcGVjaWFsIG1lYW5pbmcKK3RoYXQgY2hhcmFjdGVyIG1heSBoYXZlLiBUaGlzIHVzZSBvZiBiYWNrc2xhc2ggYXMgYW4gZXNjYXBlIGNoYXJhY3RlciBhcHBsaWVzCitib3RoIGluc2lkZSBhbmQgb3V0c2lkZSBjaGFyYWN0ZXIgY2xhc3Nlcy4KKy5QCitGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gbWF0Y2ggYSAqIGNoYXJhY3RlciwgeW91IHdyaXRlIFxlKiBpbiB0aGUgcGF0dGVybi4KK1RoaXMgZXNjYXBpbmcgYWN0aW9uIGFwcGxpZXMgd2hldGhlciBvciBub3QgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXIgd291bGQKK290aGVyd2lzZSBiZSBpbnRlcnByZXRlZCBhcyBhIG1ldGFjaGFyYWN0ZXIsIHNvIGl0IGlzIGFsd2F5cyBzYWZlIHRvIHByZWNlZGUgYQorbm9uLWFscGhhbnVtZXJpYyB3aXRoIGJhY2tzbGFzaCB0byBzcGVjaWZ5IHRoYXQgaXQgc3RhbmRzIGZvciBpdHNlbGYuIEluCitwYXJ0aWN1bGFyLCBpZiB5b3Ugd2FudCB0byBtYXRjaCBhIGJhY2tzbGFzaCwgeW91IHdyaXRlIFxlXGUuCisuUAorSW4gYSBVVEYgbW9kZSwgb25seSBBU0NJSSBudW1iZXJzIGFuZCBsZXR0ZXJzIGhhdmUgYW55IHNwZWNpYWwgbWVhbmluZyBhZnRlciBhCitiYWNrc2xhc2guIEFsbCBvdGhlciBjaGFyYWN0ZXJzIChpbiBwYXJ0aWN1bGFyLCB0aG9zZSB3aG9zZSBjb2RlcG9pbnRzIGFyZQorZ3JlYXRlciB0aGFuIDEyNykgYXJlIHRyZWF0ZWQgYXMgbGl0ZXJhbHMuCisuUAorSWYgYSBwYXR0ZXJuIGlzIGNvbXBpbGVkIHdpdGggdGhlIFBDUkUyX0VYVEVOREVEIG9wdGlvbiwgbW9zdCB3aGl0ZSBzcGFjZSBpbgordGhlIHBhdHRlcm4gKG90aGVyIHRoYW4gaW4gYSBjaGFyYWN0ZXIgY2xhc3MpLCBhbmQgY2hhcmFjdGVycyBiZXR3ZWVuIGEgIworb3V0c2lkZSBhIGNoYXJhY3RlciBjbGFzcyBhbmQgdGhlIG5leHQgbmV3bGluZSwgaW5jbHVzaXZlLCBhcmUgaWdub3JlZC4gQW4KK2VzY2FwaW5nIGJhY2tzbGFzaCBjYW4gYmUgdXNlZCB0byBpbmNsdWRlIGEgd2hpdGUgc3BhY2Ugb3IgIyBjaGFyYWN0ZXIgYXMgcGFydAorb2YgdGhlIHBhdHRlcm4uCisuUAorSWYgeW91IHdhbnQgdG8gcmVtb3ZlIHRoZSBzcGVjaWFsIG1lYW5pbmcgZnJvbSBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMsIHlvdQorY2FuIGRvIHNvIGJ5IHB1dHRpbmcgdGhlbSBiZXR3ZWVuIFxlUSBhbmQgXGVFLiBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIFBlcmwgaW4KK3RoYXQgJCBhbmQgQCBhcmUgaGFuZGxlZCBhcyBsaXRlcmFscyBpbiBcZVEuLi5cZUUgc2VxdWVuY2VzIGluIFBDUkUyLCB3aGVyZWFzCitpbiBQZXJsLCAkIGFuZCBAIGNhdXNlIHZhcmlhYmxlIGludGVycG9sYXRpb24uIE5vdGUgdGhlIGZvbGxvd2luZyBleGFtcGxlczoKKy5zcAorICBQYXR0ZXJuICAgICAgICAgICAgUENSRTIgbWF0Y2hlcyAgIFBlcmwgbWF0Y2hlcworLnNwCisuXCIgSk9JTgorICBcZVFhYmMkeHl6XGVFICAgICAgICBhYmMkeHl6ICAgICAgICBhYmMgZm9sbG93ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIG9mICR4eXoKKyAgXGVRYWJjXGUkeHl6XGVFICAgICAgIGFiY1xlJHh5eiAgICAgICBhYmNcZSR4eXoKKyAgXGVRYWJjXGVFXGUkXGVReHl6XGVFICAgYWJjJHh5eiAgICAgICAgYWJjJHh5egorLnNwCitUaGUgXGVRLi4uXGVFIHNlcXVlbmNlIGlzIHJlY29nbml6ZWQgYm90aCBpbnNpZGUgYW5kIG91dHNpZGUgY2hhcmFjdGVyIGNsYXNzZXMuCitBbiBpc29sYXRlZCBcZUUgdGhhdCBpcyBub3QgcHJlY2VkZWQgYnkgXGVRIGlzIGlnbm9yZWQuIElmIFxlUSBpcyBub3QgZm9sbG93ZWQKK2J5IFxlRSBsYXRlciBpbiB0aGUgcGF0dGVybiwgdGhlIGxpdGVyYWwgaW50ZXJwcmV0YXRpb24gY29udGludWVzIHRvIHRoZSBlbmQgb2YKK3RoZSBwYXR0ZXJuICh0aGF0IGlzLCBcZUUgaXMgYXNzdW1lZCBhdCB0aGUgZW5kKS4gSWYgdGhlIGlzb2xhdGVkIFxlUSBpcyBpbnNpZGUKK2EgY2hhcmFjdGVyIGNsYXNzLCB0aGlzIGNhdXNlcyBhbiBlcnJvciwgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGNsYXNzIGlzIG5vdAordGVybWluYXRlZC4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9ImRpZ2l0c2FmdGVyYmFja3NsYXNoIj48L2E+CisuU1MgIk5vbi1wcmludGluZyBjaGFyYWN0ZXJzIgorLnJzCisuc3AKK0Egc2Vjb25kIHVzZSBvZiBiYWNrc2xhc2ggcHJvdmlkZXMgYSB3YXkgb2YgZW5jb2Rpbmcgbm9uLXByaW50aW5nIGNoYXJhY3RlcnMKK2luIHBhdHRlcm5zIGluIGEgdmlzaWJsZSBtYW5uZXIuIFRoZXJlIGlzIG5vIHJlc3RyaWN0aW9uIG9uIHRoZSBhcHBlYXJhbmNlIG9mCitub24tcHJpbnRpbmcgY2hhcmFjdGVycyBpbiBhIHBhdHRlcm4sIGJ1dCB3aGVuIGEgcGF0dGVybiBpcyBiZWluZyBwcmVwYXJlZCBieQordGV4dCBlZGl0aW5nLCBpdCBpcyBvZnRlbiBlYXNpZXIgdG8gdXNlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGVzY2FwZSBzZXF1ZW5jZXMKK3RoYW4gdGhlIGJpbmFyeSBjaGFyYWN0ZXIgaXQgcmVwcmVzZW50cy4gSW4gYW4gQVNDSUkgb3IgVW5pY29kZSBlbnZpcm9ubWVudCwKK3RoZXNlIGVzY2FwZXMgYXJlIGFzIGZvbGxvd3M6Cisuc3AKKyAgXGVhICAgICAgICBhbGFybSwgdGhhdCBpcywgdGhlIEJFTCBjaGFyYWN0ZXIgKGhleCAwNykKKyAgXGVjeCAgICAgICAiY29udHJvbC14Iiwgd2hlcmUgeCBpcyBhbnkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcgorICBcZWUgICAgICAgIGVzY2FwZSAoaGV4IDFCKQorICBcZWYgICAgICAgIGZvcm0gZmVlZCAoaGV4IDBDKQorICBcZW4gICAgICAgIGxpbmVmZWVkIChoZXggMEEpCisgIFxlciAgICAgICAgY2FycmlhZ2UgcmV0dXJuIChoZXggMEQpCisgIFxldCAgICAgICAgdGFiIChoZXggMDkpCisgIFxlMGRkICAgICAgY2hhcmFjdGVyIHdpdGggb2N0YWwgY29kZSAwZGQKKyAgXGVkZGQgICAgICBjaGFyYWN0ZXIgd2l0aCBvY3RhbCBjb2RlIGRkZCwgb3IgYmFjayByZWZlcmVuY2UKKyAgXGVve2RkZC4ufSBjaGFyYWN0ZXIgd2l0aCBvY3RhbCBjb2RlIGRkZC4uCisgIFxleGhoICAgICAgY2hhcmFjdGVyIHdpdGggaGV4IGNvZGUgaGgKKyAgXGV4e2hoaC4ufSBjaGFyYWN0ZXIgd2l0aCBoZXggY29kZSBoaGguLiAoZGVmYXVsdCBtb2RlKQorICBcZXVoaGhoICAgIGNoYXJhY3RlciB3aXRoIGhleCBjb2RlIGhoaGggKHdoZW4gUENSRTJfQUxUX0JTVVggaXMgc2V0KQorLnNwCitUaGUgcHJlY2lzZSBlZmZlY3Qgb2YgXGVjeCBvbiBBU0NJSSBjaGFyYWN0ZXJzIGlzIGFzIGZvbGxvd3M6IGlmIHggaXMgYSBsb3dlcgorY2FzZSBsZXR0ZXIsIGl0IGlzIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlLiBUaGVuIGJpdCA2IG9mIHRoZSBjaGFyYWN0ZXIgKGhleAorNDApIGlzIGludmVydGVkLiBUaHVzIFxlY0EgdG8gXGVjWiBiZWNvbWUgaGV4IDAxIHRvIGhleCAxQSAoQSBpcyA0MSwgWiBpcyA1QSksCitidXQgXGVjeyBiZWNvbWVzIGhleCAzQiAoeyBpcyA3QiksIGFuZCBcZWM7IGJlY29tZXMgaGV4IDdCICg7IGlzIDNCKS4gSWYgdGhlCitjb2RlIHVuaXQgZm9sbG93aW5nIFxlYyBoYXMgYSB2YWx1ZSBsZXNzIHRoYW4gMzIgb3IgZ3JlYXRlciB0aGFuIDEyNiwgYQorY29tcGlsZS10aW1lIGVycm9yIG9jY3Vycy4gVGhpcyBsb2NrcyBvdXQgbm9uLXByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXJzIGluIGFsbAorbW9kZXMuCisuUAorV2hlbiBQQ1JFMiBpcyBjb21waWxlZCBpbiBFQkNESUMgbW9kZSwgXGVhLCBcZWUsIFxlZiwgXGVuLCBcZXIsIGFuZCBcZXQKK2dlbmVyYXRlIHRoZSBhcHByb3ByaWF0ZSBFQkNESUMgY29kZSB2YWx1ZXMuIFRoZSBcZWMgZXNjYXBlIGlzIHByb2Nlc3NlZAorYXMgc3BlY2lmaWVkIGZvciBQZXJsIGluIHRoZSBcZkJwZXJsZWJjZGljXGZQIGRvY3VtZW50LiBUaGUgb25seSBjaGFyYWN0ZXJzCit0aGF0IGFyZSBhbGxvd2VkIGFmdGVyIFxlYyBhcmUgQS1aLCBhLXosIG9yIG9uZSBvZiBALCBbLCBcZSwgXSwgXiwgXywgb3IgPy4gQW55CitvdGhlciBjaGFyYWN0ZXIgcHJvdm9rZXMgYSBjb21waWxlLXRpbWUgZXJyb3IuIFRoZSBzZXF1ZW5jZSBcZUAgZW5jb2RlcworY2hhcmFjdGVyIGNvZGUgMDsgdGhlIGxldHRlcnMgKGluIGVpdGhlciBjYXNlKSBlbmNvZGUgY2hhcmFjdGVycyAxLTI2IChoZXggMDEKK3RvIGhleCAxQSk7IFssIFxlLCBdLCBeLCBhbmQgXyBlbmNvZGUgY2hhcmFjdGVycyAyNy0zMSAoaGV4IDFCIHRvIGhleCAxRiksIGFuZAorXGU/IGJlY29tZXMgZWl0aGVyIDI1NSAoaGV4IEZGKSBvciA5NSAoaGV4IDVGKS4KKy5QCitUaHVzLCBhcGFydCBmcm9tIFxlPywgdGhlc2UgZXNjYXBlcyBnZW5lcmF0ZSB0aGUgc2FtZSBjaGFyYWN0ZXIgY29kZSB2YWx1ZXMgYXMKK3RoZXkgZG8gaW4gYW4gQVNDSUkgZW52aXJvbm1lbnQsIHRob3VnaCB0aGUgbWVhbmluZ3Mgb2YgdGhlIHZhbHVlcyBtb3N0bHkKK2RpZmZlci4gRm9yIGV4YW1wbGUsIFxlRyBhbHdheXMgZ2VuZXJhdGVzIGNvZGUgdmFsdWUgNywgd2hpY2ggaXMgQkVMIGluIEFTQ0lJCitidXQgREVMIGluIEVCQ0RJQy4KKy5QCitUaGUgc2VxdWVuY2UgXGU/IGdlbmVyYXRlcyBERUwgKDEyNywgaGV4IDdGKSBpbiBhbiBBU0NJSSBlbnZpcm9ubWVudCwgYnV0CitiZWNhdXNlIDEyNyBpcyBub3QgYSBjb250cm9sIGNoYXJhY3RlciBpbiBFQkNESUMsIFBlcmwgbWFrZXMgaXQgZ2VuZXJhdGUgdGhlCitBUEMgY2hhcmFjdGVyLiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgc2V2ZXJhbCB2YXJpYW50cyBvZiBFQkNESUMuIEluIG1vc3Qgb2YKK3RoZW0gdGhlIEFQQyBjaGFyYWN0ZXIgaGFzIHRoZSB2YWx1ZSAyNTUgKGhleCBGRiksIGJ1dCBpbiB0aGUgb25lIFBlcmwgY2FsbHMKK1BPU0lYLUJDIGl0cyB2YWx1ZSBpcyA5NSAoaGV4IDVGKS4gSWYgY2VydGFpbiBvdGhlciBjaGFyYWN0ZXJzIGhhdmUgUE9TSVgtQkMKK3ZhbHVlcywgUENSRTIgbWFrZXMgXGU/IGdlbmVyYXRlIDk1OyBvdGhlcndpc2UgaXQgZ2VuZXJhdGVzIDI1NS4KKy5QCitBZnRlciBcZTAgdXAgdG8gdHdvIGZ1cnRoZXIgb2N0YWwgZGlnaXRzIGFyZSByZWFkLiBJZiB0aGVyZSBhcmUgZmV3ZXIgdGhhbiB0d28KK2RpZ2l0cywganVzdCB0aG9zZSB0aGF0IGFyZSBwcmVzZW50IGFyZSB1c2VkLiBUaHVzIHRoZSBzZXF1ZW5jZSBcZTBcZXhcZTAxNQorc3BlY2lmaWVzIHR3byBiaW5hcnkgemVyb3MgZm9sbG93ZWQgYnkgYSBDUiBjaGFyYWN0ZXIgKGNvZGUgdmFsdWUgMTMpLiBNYWtlCitzdXJlIHlvdSBzdXBwbHkgdHdvIGRpZ2l0cyBhZnRlciB0aGUgaW5pdGlhbCB6ZXJvIGlmIHRoZSBwYXR0ZXJuIGNoYXJhY3RlciB0aGF0Citmb2xsb3dzIGlzIGl0c2VsZiBhbiBvY3RhbCBkaWdpdC4KKy5QCitUaGUgZXNjYXBlIFxlbyBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgc2VxdWVuY2Ugb2Ygb2N0YWwgZGlnaXRzLCBlbmNsb3NlZCBpbgorYnJhY2VzLiBBbiBlcnJvciBvY2N1cnMgaWYgdGhpcyBpcyBub3QgdGhlIGNhc2UuIFRoaXMgZXNjYXBlIGlzIGEgcmVjZW50CithZGRpdGlvbiB0byBQZXJsOyBpdCBwcm92aWRlcyB3YXkgb2Ygc3BlY2lmeWluZyBjaGFyYWN0ZXIgY29kZSBwb2ludHMgYXMgb2N0YWwKK251bWJlcnMgZ3JlYXRlciB0aGFuIDA3NzcsIGFuZCBpdCBhbHNvIGFsbG93cyBvY3RhbCBudW1iZXJzIGFuZCBiYWNrIHJlZmVyZW5jZXMKK3RvIGJlIHVuYW1iaWd1b3VzbHkgc3BlY2lmaWVkLgorLlAKK0ZvciBncmVhdGVyIGNsYXJpdHkgYW5kIHVuYW1iaWd1aXR5LCBpdCBpcyBiZXN0IHRvIGF2b2lkIGZvbGxvd2luZyBcZSBieSBhCitkaWdpdCBncmVhdGVyIHRoYW4gemVyby4gSW5zdGVhZCwgdXNlIFxlb3t9IG9yIFxleHt9IHRvIHNwZWNpZnkgY2hhcmFjdGVyCitudW1iZXJzLCBhbmQgXGVne30gdG8gc3BlY2lmeSBiYWNrIHJlZmVyZW5jZXMuIFRoZSBmb2xsb3dpbmcgcGFyYWdyYXBocworZGVzY3JpYmUgdGhlIG9sZCwgYW1iaWd1b3VzIHN5bnRheC4KKy5QCitUaGUgaGFuZGxpbmcgb2YgYSBiYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBkaWdpdCBvdGhlciB0aGFuIDAgaXMgY29tcGxpY2F0ZWQsCithbmQgUGVybCBoYXMgY2hhbmdlZCBvdmVyIHRpbWUsIGNhdXNpbmcgUENSRTIgYWxzbyB0byBjaGFuZ2UuCisuUAorT3V0c2lkZSBhIGNoYXJhY3RlciBjbGFzcywgUENSRTIgcmVhZHMgdGhlIGRpZ2l0IGFuZCBhbnkgZm9sbG93aW5nIGRpZ2l0cyBhcyBhCitkZWNpbWFsIG51bWJlci4gSWYgdGhlIG51bWJlciBpcyBsZXNzIHRoYW4gMTAsIGJlZ2lucyB3aXRoIHRoZSBkaWdpdCA4IG9yIDksIG9yCitpZiB0aGVyZSBhcmUgYXQgbGVhc3QgdGhhdCBtYW55IHByZXZpb3VzIGNhcHR1cmluZyBsZWZ0IHBhcmVudGhlc2VzIGluIHRoZQorZXhwcmVzc2lvbiwgdGhlIGVudGlyZSBzZXF1ZW5jZSBpcyB0YWtlbiBhcyBhIFxmSWJhY2sgcmVmZXJlbmNlXGZQLiBBCitkZXNjcmlwdGlvbiBvZiBob3cgdGhpcyB3b3JrcyBpcyBnaXZlbgorLlwiIEhUTUwgPGEgaHJlZj0iI2JhY2tyZWZlcmVuY2VzIj4KKy5cIiA8L2E+CitsYXRlciwKKy5cIgorZm9sbG93aW5nIHRoZSBkaXNjdXNzaW9uIG9mCisuXCIgSFRNTCA8YSBocmVmPSIjc3VicGF0dGVybiI+CisuXCIgPC9hPgorcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJucy4KKy5cIgorT3RoZXJ3aXNlLCB1cCB0byB0aHJlZSBvY3RhbCBkaWdpdHMgYXJlIHJlYWQgdG8gZm9ybSBhIGNoYXJhY3RlciBjb2RlLgorLlAKK0luc2lkZSBhIGNoYXJhY3RlciBjbGFzcywgUENSRTIgaGFuZGxlcyBcZTggYW5kIFxlOSBhcyB0aGUgbGl0ZXJhbCBjaGFyYWN0ZXJzCisiOCIgYW5kICI5IiwgYW5kIG90aGVyd2lzZSByZWFkcyB1cCB0byB0aHJlZSBvY3RhbCBkaWdpdHMgZm9sbG93aW5nIHRoZQorYmFja3NsYXNoLCB1c2luZyB0aGVtIHRvIGdlbmVyYXRlIGEgZGF0YSBjaGFyYWN0ZXIuIEFueSBzdWJzZXF1ZW50IGRpZ2l0cyBzdGFuZAorZm9yIHRoZW1zZWx2ZXMuIEZvciBleGFtcGxlLCBvdXRzaWRlIGEgY2hhcmFjdGVyIGNsYXNzOgorLnNwCisgIFxlMDQwICAgaXMgYW5vdGhlciB3YXkgb2Ygd3JpdGluZyBhbiBBU0NJSSBzcGFjZQorLlwiIEpPSU4KKyAgXGU0MCAgICBpcyB0aGUgc2FtZSwgcHJvdmlkZWQgdGhlcmUgYXJlIGZld2VyIHRoYW4gNDAKKyAgICAgICAgICAgIHByZXZpb3VzIGNhcHR1cmluZyBzdWJwYXR0ZXJucworICBcZTcgICAgIGlzIGFsd2F5cyBhIGJhY2sgcmVmZXJlbmNlCisuXCIgSk9JTgorICBcZTExICAgIG1pZ2h0IGJlIGEgYmFjayByZWZlcmVuY2UsIG9yIGFub3RoZXIgd2F5IG9mCisgICAgICAgICAgICB3cml0aW5nIGEgdGFiCisgIFxlMDExICAgaXMgYWx3YXlzIGEgdGFiCisgIFxlMDExMyAgaXMgYSB0YWIgZm9sbG93ZWQgYnkgdGhlIGNoYXJhY3RlciAiMyIKKy5cIiBKT0lOCisgIFxlMTEzICAgbWlnaHQgYmUgYSBiYWNrIHJlZmVyZW5jZSwgb3RoZXJ3aXNlIHRoZQorICAgICAgICAgICAgY2hhcmFjdGVyIHdpdGggb2N0YWwgY29kZSAxMTMKKy5cIiBKT0lOCisgIFxlMzc3ICAgbWlnaHQgYmUgYSBiYWNrIHJlZmVyZW5jZSwgb3RoZXJ3aXNlCisgICAgICAgICAgICB0aGUgdmFsdWUgMjU1IChkZWNpbWFsKQorLlwiIEpPSU4KKyAgXGU4MSAgICBpcyBhbHdheXMgYSBiYWNrIHJlZmVyZW5jZQorLnNwCitOb3RlIHRoYXQgb2N0YWwgdmFsdWVzIG9mIDEwMCBvciBncmVhdGVyIHRoYXQgYXJlIHNwZWNpZmllZCB1c2luZyB0aGlzIHN5bnRheAorbXVzdCBub3QgYmUgaW50cm9kdWNlZCBieSBhIGxlYWRpbmcgemVybywgYmVjYXVzZSBubyBtb3JlIHRoYW4gdGhyZWUgb2N0YWwKK2RpZ2l0cyBhcmUgZXZlciByZWFkLgorLlAKK0J5IGRlZmF1bHQsIGFmdGVyIFxleCB0aGF0IGlzIG5vdCBmb2xsb3dlZCBieSB7LCBmcm9tIHplcm8gdG8gdHdvIGhleGFkZWNpbWFsCitkaWdpdHMgYXJlIHJlYWQgKGxldHRlcnMgY2FuIGJlIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UpLiBBbnkgbnVtYmVyIG9mCitoZXhhZGVjaW1hbCBkaWdpdHMgbWF5IGFwcGVhciBiZXR3ZWVuIFxleHsgYW5kIH0uIElmIGEgY2hhcmFjdGVyIG90aGVyIHRoYW4KK2EgaGV4YWRlY2ltYWwgZGlnaXQgYXBwZWFycyBiZXR3ZWVuIFxleHsgYW5kIH0sIG9yIGlmIHRoZXJlIGlzIG5vIHRlcm1pbmF0aW5nCit9LCBhbiBlcnJvciBvY2N1cnMuCisuUAorSWYgdGhlIFBDUkUyX0FMVF9CU1VYIG9wdGlvbiBpcyBzZXQsIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBcZXggaXMgYXMganVzdAorZGVzY3JpYmVkIG9ubHkgd2hlbiBpdCBpcyBmb2xsb3dlZCBieSB0d28gaGV4YWRlY2ltYWwgZGlnaXRzLiBPdGhlcndpc2UsIGl0CittYXRjaGVzIGEgbGl0ZXJhbCAieCIgY2hhcmFjdGVyLiBJbiB0aGlzIG1vZGUgbW9kZSwgc3VwcG9ydCBmb3IgY29kZSBwb2ludHMKK2dyZWF0ZXIgdGhhbiAyNTYgaXMgcHJvdmlkZWQgYnkgXGV1LCB3aGljaCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGZvdXIgaGV4YWRlY2ltYWwKK2RpZ2l0czsgb3RoZXJ3aXNlIGl0IG1hdGNoZXMgYSBsaXRlcmFsICJ1IiBjaGFyYWN0ZXIuCisuUAorQ2hhcmFjdGVycyB3aG9zZSB2YWx1ZSBpcyBsZXNzIHRoYW4gMjU2IGNhbiBiZSBkZWZpbmVkIGJ5IGVpdGhlciBvZiB0aGUgdHdvCitzeW50YXhlcyBmb3IgXGV4IChvciBieSBcZXUgaW4gUENSRTJfQUxUX0JTVVggbW9kZSkuIFRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgaW4KK3RoZSB3YXkgdGhleSBhcmUgaGFuZGxlZC4gRm9yIGV4YW1wbGUsIFxleGRjIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgXGV4e2RjfSAob3IKK1xldTAwZGMgaW4gUENSRTJfQUxUX0JTVVggbW9kZSkuCisuCisuCisuU1MgIkNvbnN0cmFpbnRzIG9uIGNoYXJhY3RlciB2YWx1ZXMiCisucnMKKy5zcAorQ2hhcmFjdGVycyB0aGF0IGFyZSBzcGVjaWZpZWQgdXNpbmcgb2N0YWwgb3IgaGV4YWRlY2ltYWwgbnVtYmVycyBhcmUKK2xpbWl0ZWQgdG8gY2VydGFpbiB2YWx1ZXMsIGFzIGZvbGxvd3M6Cisuc3AKKyAgOC1iaXQgbm9uLVVURiBtb2RlICAgIGxlc3MgdGhhbiAweDEwMAorICA4LWJpdCBVVEYtOCBtb2RlICAgICAgbGVzcyB0aGFuIDB4MTBmZmZmIGFuZCBhIHZhbGlkIGNvZGVwb2ludAorICAxNi1iaXQgbm9uLVVURiBtb2RlICAgbGVzcyB0aGFuIDB4MTAwMDAKKyAgMTYtYml0IFVURi0xNiBtb2RlICAgIGxlc3MgdGhhbiAweDEwZmZmZiBhbmQgYSB2YWxpZCBjb2RlcG9pbnQKKyAgMzItYml0IG5vbi1VVEYgbW9kZSAgIGxlc3MgdGhhbiAweDEwMDAwMDAwMAorICAzMi1iaXQgVVRGLTMyIG1vZGUgICAgbGVzcyB0aGFuIDB4MTBmZmZmIGFuZCBhIHZhbGlkIGNvZGVwb2ludAorLnNwCitJbnZhbGlkIFVuaWNvZGUgY29kZXBvaW50cyBhcmUgdGhlIHJhbmdlIDB4ZDgwMCB0byAweGRmZmYgKHRoZSBzby1jYWxsZWQKKyJzdXJyb2dhdGUiIGNvZGVwb2ludHMpLCBhbmQgMHhmZmVmLgorLgorLgorLlNTICJFc2NhcGUgc2VxdWVuY2VzIGluIGNoYXJhY3RlciBjbGFzc2VzIgorLnJzCisuc3AKK0FsbCB0aGUgc2VxdWVuY2VzIHRoYXQgZGVmaW5lIGEgc2luZ2xlIGNoYXJhY3RlciB2YWx1ZSBjYW4gYmUgdXNlZCBib3RoIGluc2lkZQorYW5kIG91dHNpZGUgY2hhcmFjdGVyIGNsYXNzZXMuIEluIGFkZGl0aW9uLCBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIFxlYiBpcworaW50ZXJwcmV0ZWQgYXMgdGhlIGJhY2tzcGFjZSBjaGFyYWN0ZXIgKGhleCAwOCkuCisuUAorXGVOIGlzIG5vdCBhbGxvd2VkIGluIGEgY2hhcmFjdGVyIGNsYXNzLiBcZUIsIFxlUiwgYW5kIFxlWCBhcmUgbm90IHNwZWNpYWwKK2luc2lkZSBhIGNoYXJhY3RlciBjbGFzcy4gTGlrZSBvdGhlciB1bnJlY29nbml6ZWQgYWxwaGFiZXRpYyBlc2NhcGUgc2VxdWVuY2VzLAordGhleSBjYXVzZSBhbiBlcnJvci4gT3V0c2lkZSBhIGNoYXJhY3RlciBjbGFzcywgdGhlc2Ugc2VxdWVuY2VzIGhhdmUgZGlmZmVyZW50CittZWFuaW5ncy4KKy4KKy4KKy5TUyAiVW5zdXBwb3J0ZWQgZXNjYXBlIHNlcXVlbmNlcyIKKy5ycworLnNwCitJbiBQZXJsLCB0aGUgc2VxdWVuY2VzIFxlbCwgXGVMLCBcZXUsIGFuZCBcZVUgYXJlIHJlY29nbml6ZWQgYnkgaXRzIHN0cmluZworaGFuZGxlciBhbmQgdXNlZCB0byBtb2RpZnkgdGhlIGNhc2Ugb2YgZm9sbG93aW5nIGNoYXJhY3RlcnMuIEJ5IGRlZmF1bHQsIFBDUkUyCitkb2VzIG5vdCBzdXBwb3J0IHRoZXNlIGVzY2FwZSBzZXF1ZW5jZXMuIEhvd2V2ZXIsIGlmIHRoZSBQQ1JFMl9BTFRfQlNVWCBvcHRpb24KK2lzIHNldCwgXGVVIG1hdGNoZXMgYSAiVSIgY2hhcmFjdGVyLCBhbmQgXGV1IGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhIGNoYXJhY3RlcgorYnkgY29kZSBwb2ludCwgYXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLgorLgorLgorLlNTICJBYnNvbHV0ZSBhbmQgcmVsYXRpdmUgYmFjayByZWZlcmVuY2VzIgorLnJzCisuc3AKK1RoZSBzZXF1ZW5jZSBcZWcgZm9sbG93ZWQgYnkgYW4gdW5zaWduZWQgb3IgYSBuZWdhdGl2ZSBudW1iZXIsIG9wdGlvbmFsbHkKK2VuY2xvc2VkIGluIGJyYWNlcywgaXMgYW4gYWJzb2x1dGUgb3IgcmVsYXRpdmUgYmFjayByZWZlcmVuY2UuIEEgbmFtZWQgYmFjaworcmVmZXJlbmNlIGNhbiBiZSBjb2RlZCBhcyBcZWd7bmFtZX0uIEJhY2sgcmVmZXJlbmNlcyBhcmUgZGlzY3Vzc2VkCisuXCIgSFRNTCA8YSBocmVmPSIjYmFja3JlZmVyZW5jZXMiPgorLlwiIDwvYT4KK2xhdGVyLAorLlwiCitmb2xsb3dpbmcgdGhlIGRpc2N1c3Npb24gb2YKKy5cIiBIVE1MIDxhIGhyZWY9IiNzdWJwYXR0ZXJuIj4KKy5cIiA8L2E+CitwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm5zLgorLlwiCisuCisuCisuU1MgIkFic29sdXRlIGFuZCByZWxhdGl2ZSBzdWJyb3V0aW5lIGNhbGxzIgorLnJzCisuc3AKK0ZvciBjb21wYXRpYmlsaXR5IHdpdGggT25pZ3VydW1hLCB0aGUgbm9uLVBlcmwgc3ludGF4IFxlZyBmb2xsb3dlZCBieSBhIG5hbWUgb3IKK2EgbnVtYmVyIGVuY2xvc2VkIGVpdGhlciBpbiBhbmdsZSBicmFja2V0cyBvciBzaW5nbGUgcXVvdGVzLCBpcyBhbiBhbHRlcm5hdGl2ZQorc3ludGF4IGZvciByZWZlcmVuY2luZyBhIHN1YnBhdHRlcm4gYXMgYSAic3Vicm91dGluZSIuIERldGFpbHMgYXJlIGRpc2N1c3NlZAorLlwiIEhUTUwgPGEgaHJlZj0iI29uaWd1cnVtYXN1YnJvdXRpbmVzIj4KKy5cIiA8L2E+CitsYXRlci4KKy5cIgorTm90ZSB0aGF0IFxlZ3suLi59IChQZXJsIHN5bnRheCkgYW5kIFxlZzwuLi4+IChPbmlndXJ1bWEgc3ludGF4KSBhcmUgXGZJbm90XGZQCitzeW5vbnltb3VzLiBUaGUgZm9ybWVyIGlzIGEgYmFjayByZWZlcmVuY2U7IHRoZSBsYXR0ZXIgaXMgYQorLlwiIEhUTUwgPGEgaHJlZj0iI3N1YnBhdHRlcm5zYXNzdWJyb3V0aW5lcyI+CisuXCIgPC9hPgorc3Vicm91dGluZQorLlwiCitjYWxsLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0iZ2VuZXJpY2NoYXJ0eXBlcyI+PC9hPgorLlNTICJHZW5lcmljIGNoYXJhY3RlciB0eXBlcyIKKy5ycworLnNwCitBbm90aGVyIHVzZSBvZiBiYWNrc2xhc2ggaXMgZm9yIHNwZWNpZnlpbmcgZ2VuZXJpYyBjaGFyYWN0ZXIgdHlwZXM6Cisuc3AKKyAgXGVkICAgICBhbnkgZGVjaW1hbCBkaWdpdAorICBcZUQgICAgIGFueSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSBkZWNpbWFsIGRpZ2l0CisgIFxlaCAgICAgYW55IGhvcml6b250YWwgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgIFxlSCAgICAgYW55IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIGhvcml6b250YWwgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgIFxlcyAgICAgYW55IHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcZVMgICAgIGFueSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIKKyAgXGV2ICAgICBhbnkgdmVydGljYWwgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgIFxlViAgICAgYW55IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIHZlcnRpY2FsIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcZXcgICAgIGFueSAid29yZCIgY2hhcmFjdGVyCisgIFxlVyAgICAgYW55ICJub24td29yZCIgY2hhcmFjdGVyCisuc3AKK1RoZXJlIGlzIGFsc28gdGhlIHNpbmdsZSBzZXF1ZW5jZSBcZU4sIHdoaWNoIG1hdGNoZXMgYSBub24tbmV3bGluZSBjaGFyYWN0ZXIuCitUaGlzIGlzIHRoZSBzYW1lIGFzCisuXCIgSFRNTCA8YSBocmVmPSIjZnVsbHN0b3Bkb3QiPgorLlwiIDwvYT4KK3RoZSAiLiIgbWV0YWNoYXJhY3RlcgorLlwiCit3aGVuIFBDUkUyX0RPVEFMTCBpcyBub3Qgc2V0LiBQZXJsIGFsc28gdXNlcyBcZU4gdG8gbWF0Y2ggY2hhcmFjdGVycyBieSBuYW1lOworUENSRTIgZG9lcyBub3Qgc3VwcG9ydCB0aGlzLgorLlAKK0VhY2ggcGFpciBvZiBsb3dlciBhbmQgdXBwZXIgY2FzZSBlc2NhcGUgc2VxdWVuY2VzIHBhcnRpdGlvbnMgdGhlIGNvbXBsZXRlIHNldAorb2YgY2hhcmFjdGVycyBpbnRvIHR3byBkaXNqb2ludCBzZXRzLiBBbnkgZ2l2ZW4gY2hhcmFjdGVyIG1hdGNoZXMgb25lLCBhbmQgb25seQorb25lLCBvZiBlYWNoIHBhaXIuIFRoZSBzZXF1ZW5jZXMgY2FuIGFwcGVhciBib3RoIGluc2lkZSBhbmQgb3V0c2lkZSBjaGFyYWN0ZXIKK2NsYXNzZXMuIFRoZXkgZWFjaCBtYXRjaCBvbmUgY2hhcmFjdGVyIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLiBJZiB0aGUgY3VycmVudAorbWF0Y2hpbmcgcG9pbnQgaXMgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCBzdHJpbmcsIGFsbCBvZiB0aGVtIGZhaWwsIGJlY2F1c2UKK3RoZXJlIGlzIG5vIGNoYXJhY3RlciB0byBtYXRjaC4KKy5QCitUaGUgZGVmYXVsdCBcZXMgY2hhcmFjdGVycyBhcmUgSFQgKDkpLCBMRiAoMTApLCBWVCAoMTEpLCBGRiAoMTIpLCBDUiAoMTMpLCBhbmQKK3NwYWNlICgzMiksIHdoaWNoIGFyZSBkZWZpbmVkIGFzIHdoaXRlIHNwYWNlIGluIHRoZSAiQyIgbG9jYWxlLiBUaGlzIGxpc3QgbWF5Cit2YXJ5IGlmIGxvY2FsZS1zcGVjaWZpYyBtYXRjaGluZyBpcyB0YWtpbmcgcGxhY2UuIEZvciBleGFtcGxlLCBpbiBzb21lIGxvY2FsZXMKK3RoZSAibm9uLWJyZWFraW5nIHNwYWNlIiBjaGFyYWN0ZXIgKFxleEEwKSBpcyByZWNvZ25pemVkIGFzIHdoaXRlIHNwYWNlLCBhbmQgaW4KK290aGVycyB0aGUgVlQgY2hhcmFjdGVyIGlzIG5vdC4KKy5QCitBICJ3b3JkIiBjaGFyYWN0ZXIgaXMgYW4gdW5kZXJzY29yZSBvciBhbnkgY2hhcmFjdGVyIHRoYXQgaXMgYSBsZXR0ZXIgb3IgZGlnaXQuCitCeSBkZWZhdWx0LCB0aGUgZGVmaW5pdGlvbiBvZiBsZXR0ZXJzIGFuZCBkaWdpdHMgaXMgY29udHJvbGxlZCBieSBQQ1JFMidzCitsb3ctdmFsdWVkIGNoYXJhY3RlciB0YWJsZXMsIGFuZCBtYXkgdmFyeSBpZiBsb2NhbGUtc3BlY2lmaWMgbWF0Y2hpbmcgaXMgdGFraW5nCitwbGFjZSAoc2VlCisuXCIgSFRNTCA8YSBocmVmPSJwY3JlMmFwaS5odG1sI2xvY2FsZXN1cHBvcnQiPgorLlwiIDwvYT4KKyJMb2NhbGUgc3VwcG9ydCIKKy5cIgoraW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorcGFnZSkuIEZvciBleGFtcGxlLCBpbiBhIEZyZW5jaCBsb2NhbGUgc3VjaCBhcyAiZnJfRlIiIGluIFVuaXgtbGlrZSBzeXN0ZW1zLAorb3IgImZyZW5jaCIgaW4gV2luZG93cywgc29tZSBjaGFyYWN0ZXIgY29kZXMgZ3JlYXRlciB0aGFuIDEyNyBhcmUgdXNlZCBmb3IKK2FjY2VudGVkIGxldHRlcnMsIGFuZCB0aGVzZSBhcmUgdGhlbiBtYXRjaGVkIGJ5IFxldy4gVGhlIHVzZSBvZiBsb2NhbGVzIHdpdGgKK1VuaWNvZGUgaXMgZGlzY291cmFnZWQuCisuUAorQnkgZGVmYXVsdCwgY2hhcmFjdGVycyB3aG9zZSBjb2RlIHBvaW50cyBhcmUgZ3JlYXRlciB0aGFuIDEyNyBuZXZlciBtYXRjaCBcZWQsCitcZXMsIG9yIFxldywgYW5kIGFsd2F5cyBtYXRjaCBcZUQsIFxlUywgYW5kIFxlVywgYWx0aG91Z2ggdGhpcyBtYXkgYmUgZGlmZmVyZW50Citmb3IgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgMTI4LTI1NSB3aGVuIGxvY2FsZS1zcGVjaWZpYyBtYXRjaGluZyBpcyBoYXBwZW5pbmcuCitUaGVzZSBlc2NhcGUgc2VxdWVuY2VzIHJldGFpbiB0aGVpciBvcmlnaW5hbCBtZWFuaW5ncyBmcm9tIGJlZm9yZSBVbmljb2RlCitzdXBwb3J0IHdhcyBhdmFpbGFibGUsIG1haW5seSBmb3IgZWZmaWNpZW5jeSByZWFzb25zLiBJZiB0aGUgUENSRTJfVUNQIG9wdGlvbgoraXMgc2V0LCB0aGUgYmVoYXZpb3VyIGlzIGNoYW5nZWQgc28gdGhhdCBVbmljb2RlIHByb3BlcnRpZXMgYXJlIHVzZWQgdG8KK2RldGVybWluZSBjaGFyYWN0ZXIgdHlwZXMsIGFzIGZvbGxvd3M6Cisuc3AKKyAgXGVkICBhbnkgY2hhcmFjdGVyIHRoYXQgbWF0Y2hlcyBcZXB7TmR9IChkZWNpbWFsIGRpZ2l0KQorICBcZXMgIGFueSBjaGFyYWN0ZXIgdGhhdCBtYXRjaGVzIFxlcHtafSBvciBcZWggb3IgXGV2CisgIFxldyAgYW55IGNoYXJhY3RlciB0aGF0IG1hdGNoZXMgXGVwe0x9IG9yIFxlcHtOfSwgcGx1cyB1bmRlcnNjb3JlCisuc3AKK1RoZSB1cHBlciBjYXNlIGVzY2FwZXMgbWF0Y2ggdGhlIGludmVyc2Ugc2V0cyBvZiBjaGFyYWN0ZXJzLiBOb3RlIHRoYXQgXGVkCittYXRjaGVzIG9ubHkgZGVjaW1hbCBkaWdpdHMsIHdoZXJlYXMgXGV3IG1hdGNoZXMgYW55IFVuaWNvZGUgZGlnaXQsIGFzIHdlbGwgYXMKK2FueSBVbmljb2RlIGxldHRlciwgYW5kIHVuZGVyc2NvcmUuIE5vdGUgYWxzbyB0aGF0IFBDUkUyX1VDUCBhZmZlY3RzIFxlYiwgYW5kCitcZUIgYmVjYXVzZSB0aGV5IGFyZSBkZWZpbmVkIGluIHRlcm1zIG9mIFxldyBhbmQgXGVXLiBNYXRjaGluZyB0aGVzZSBzZXF1ZW5jZXMKK2lzIG5vdGljZWFibHkgc2xvd2VyIHdoZW4gUENSRTJfVUNQIGlzIHNldC4KKy5QCitUaGUgc2VxdWVuY2VzIFxlaCwgXGVILCBcZXYsIGFuZCBcZVYsIGluIGNvbnRyYXN0IHRvIHRoZSBvdGhlciBzZXF1ZW5jZXMsIHdoaWNoCittYXRjaCBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMgYnkgZGVmYXVsdCwgYWx3YXlzIG1hdGNoIGEgc3BlY2lmaWMgbGlzdCBvZiBjb2RlCitwb2ludHMsIHdoZXRoZXIgb3Igbm90IFBDUkUyX1VDUCBpcyBzZXQuIFRoZSBob3Jpem9udGFsIHNwYWNlIGNoYXJhY3RlcnMgYXJlOgorLnNwCisgIFUrMDAwOSAgICAgSG9yaXpvbnRhbCB0YWIgKEhUKQorICBVKzAwMjAgICAgIFNwYWNlCisgIFUrMDBBMCAgICAgTm9uLWJyZWFrIHNwYWNlCisgIFUrMTY4MCAgICAgT2doYW0gc3BhY2UgbWFyaworICBVKzE4MEUgICAgIE1vbmdvbGlhbiB2b3dlbCBzZXBhcmF0b3IKKyAgVSsyMDAwICAgICBFbiBxdWFkCisgIFUrMjAwMSAgICAgRW0gcXVhZAorICBVKzIwMDIgICAgIEVuIHNwYWNlCisgIFUrMjAwMyAgICAgRW0gc3BhY2UKKyAgVSsyMDA0ICAgICBUaHJlZS1wZXItZW0gc3BhY2UKKyAgVSsyMDA1ICAgICBGb3VyLXBlci1lbSBzcGFjZQorICBVKzIwMDYgICAgIFNpeC1wZXItZW0gc3BhY2UKKyAgVSsyMDA3ICAgICBGaWd1cmUgc3BhY2UKKyAgVSsyMDA4ICAgICBQdW5jdHVhdGlvbiBzcGFjZQorICBVKzIwMDkgICAgIFRoaW4gc3BhY2UKKyAgVSsyMDBBICAgICBIYWlyIHNwYWNlCisgIFUrMjAyRiAgICAgTmFycm93IG5vLWJyZWFrIHNwYWNlCisgIFUrMjA1RiAgICAgTWVkaXVtIG1hdGhlbWF0aWNhbCBzcGFjZQorICBVKzMwMDAgICAgIElkZW9ncmFwaGljIHNwYWNlCisuc3AKK1RoZSB2ZXJ0aWNhbCBzcGFjZSBjaGFyYWN0ZXJzIGFyZToKKy5zcAorICBVKzAwMEEgICAgIExpbmVmZWVkIChMRikKKyAgVSswMDBCICAgICBWZXJ0aWNhbCB0YWIgKFZUKQorICBVKzAwMEMgICAgIEZvcm0gZmVlZCAoRkYpCisgIFUrMDAwRCAgICAgQ2FycmlhZ2UgcmV0dXJuIChDUikKKyAgVSswMDg1ICAgICBOZXh0IGxpbmUgKE5FTCkKKyAgVSsyMDI4ICAgICBMaW5lIHNlcGFyYXRvcgorICBVKzIwMjkgICAgIFBhcmFncmFwaCBzZXBhcmF0b3IKKy5zcAorSW4gOC1iaXQsIG5vbi1VVEYtOCBtb2RlLCBvbmx5IHRoZSBjaGFyYWN0ZXJzIHdpdGggY29kZSBwb2ludHMgbGVzcyB0aGFuIDI1NgorYXJlIHJlbGV2YW50LgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0ibmV3bGluZXNlcSI+PC9hPgorLlNTICJOZXdsaW5lIHNlcXVlbmNlcyIKKy5ycworLnNwCitPdXRzaWRlIGEgY2hhcmFjdGVyIGNsYXNzLCBieSBkZWZhdWx0LCB0aGUgZXNjYXBlIHNlcXVlbmNlIFxlUiBtYXRjaGVzIGFueQorVW5pY29kZSBuZXdsaW5lIHNlcXVlbmNlLiBJbiA4LWJpdCBub24tVVRGLTggbW9kZSBcZVIgaXMgZXF1aXZhbGVudCB0byB0aGUKK2ZvbGxvd2luZzoKKy5zcAorICAoPz5cZXJcZW58XGVufFxleDBifFxlZnxcZXJ8XGV4ODUpCisuc3AKK1RoaXMgaXMgYW4gZXhhbXBsZSBvZiBhbiAiYXRvbWljIGdyb3VwIiwgZGV0YWlscyBvZiB3aGljaCBhcmUgZ2l2ZW4KKy5cIiBIVE1MIDxhIGhyZWY9IiNhdG9taWNncm91cCI+CisuXCIgPC9hPgorYmVsb3cuCisuXCIKK1RoaXMgcGFydGljdWxhciBncm91cCBtYXRjaGVzIGVpdGhlciB0aGUgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSBDUiBmb2xsb3dlZCBieQorTEYsIG9yIG9uZSBvZiB0aGUgc2luZ2xlIGNoYXJhY3RlcnMgTEYgKGxpbmVmZWVkLCBVKzAwMEEpLCBWVCAodmVydGljYWwgdGFiLAorVSswMDBCKSwgRkYgKGZvcm0gZmVlZCwgVSswMDBDKSwgQ1IgKGNhcnJpYWdlIHJldHVybiwgVSswMDBEKSwgb3IgTkVMIChuZXh0CitsaW5lLCBVKzAwODUpLiBCZWNhdXNlIHRoaXMgaXMgYW4gYXRvbWljIGdyb3VwLCB0aGUgdHdvLWNoYXJhY3RlciBzZXF1ZW5jZSBpcwordHJlYXRlZCBhcyBhIHNpbmdsZSB1bml0IHRoYXQgY2Fubm90IGJlIHNwbGl0LgorLlAKK0luIG90aGVyIG1vZGVzLCB0d28gYWRkaXRpb25hbCBjaGFyYWN0ZXJzIHdob3NlIGNvZGVwb2ludHMgYXJlIGdyZWF0ZXIgdGhhbiAyNTUKK2FyZSBhZGRlZDogTFMgKGxpbmUgc2VwYXJhdG9yLCBVKzIwMjgpIGFuZCBQUyAocGFyYWdyYXBoIHNlcGFyYXRvciwgVSsyMDI5KS4KK1VuaWNvZGUgc3VwcG9ydCBpcyBub3QgbmVlZGVkIGZvciB0aGVzZSBjaGFyYWN0ZXJzIHRvIGJlIHJlY29nbml6ZWQuCisuUAorSXQgaXMgcG9zc2libGUgdG8gcmVzdHJpY3QgXGVSIHRvIG1hdGNoIG9ubHkgQ1IsIExGLCBvciBDUkxGIChpbnN0ZWFkIG9mIHRoZQorY29tcGxldGUgc2V0IG9mIFVuaWNvZGUgbGluZSBlbmRpbmdzKSBieSBzZXR0aW5nIHRoZSBvcHRpb24gUENSRTJfQlNSX0FOWUNSTEYKK2F0IGNvbXBpbGUgdGltZS4gKEJTUiBpcyBhbiBhYmJyZXZhdGlvbiBmb3IgImJhY2tzbGFzaCBSIi4pIFRoaXMgY2FuIGJlIG1hZGUKK3RoZSBkZWZhdWx0IHdoZW4gUENSRTIgaXMgYnVpbHQ7IGlmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZSBvdGhlciBiZWhhdmlvdXIgY2FuCitiZSByZXF1ZXN0ZWQgdmlhIHRoZSBQQ1JFMl9CU1JfVU5JQ09ERSBvcHRpb24uIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeQordGhlc2Ugc2V0dGluZ3MgYnkgc3RhcnRpbmcgYSBwYXR0ZXJuIHN0cmluZyB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nCitzZXF1ZW5jZXM6Cisuc3AKKyAgKCpCU1JfQU5ZQ1JMRikgICBDUiwgTEYsIG9yIENSTEYgb25seQorICAoKkJTUl9VTklDT0RFKSAgIGFueSBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UKKy5zcAorVGhlc2Ugb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYW5kIHRoZSBvcHRpb25zIGdpdmVuIHRvIHRoZSBjb21waWxpbmcgZnVuY3Rpb24uCitOb3RlIHRoYXQgdGhlc2Ugc3BlY2lhbCBzZXR0aW5ncywgd2hpY2ggYXJlIG5vdCBQZXJsLWNvbXBhdGlibGUsIGFyZSByZWNvZ25pemVkCitvbmx5IGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIGEgcGF0dGVybiwgYW5kIHRoYXQgdGhleSBtdXN0IGJlIGluIHVwcGVyIGNhc2UuIElmCittb3JlIHRoYW4gb25lIG9mIHRoZW0gaXMgcHJlc2VudCwgdGhlIGxhc3Qgb25lIGlzIHVzZWQuIFRoZXkgY2FuIGJlIGNvbWJpbmVkCit3aXRoIGEgY2hhbmdlIG9mIG5ld2xpbmUgY29udmVudGlvbjsgZm9yIGV4YW1wbGUsIGEgcGF0dGVybiBjYW4gc3RhcnQgd2l0aDoKKy5zcAorICAoKkFOWSkoKkJTUl9BTllDUkxGKQorLnNwCitUaGV5IGNhbiBhbHNvIGJlIGNvbWJpbmVkIHdpdGggdGhlICgqVVRGKSBvciAoKlVDUCkgc3BlY2lhbCBzZXF1ZW5jZXMuIEluc2lkZSBhCitjaGFyYWN0ZXIgY2xhc3MsIFxlUiBpcyB0cmVhdGVkIGFzIGFuIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2UsIGFuZCBjYXVzZXMKK2FuIGVycm9yLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0idW5pZXh0c2VxIj48L2E+CisuU1MgVW5pY29kZSBjaGFyYWN0ZXIgcHJvcGVydGllcworLnJzCisuc3AKK1doZW4gUENSRTIgaXMgYnVpbHQgd2l0aCBVbmljb2RlIHN1cHBvcnQgKHRoZSBkZWZhdWx0KSwgdGhyZWUgYWRkaXRpb25hbCBlc2NhcGUKK3NlcXVlbmNlcyB0aGF0IG1hdGNoIGNoYXJhY3RlcnMgd2l0aCBzcGVjaWZpYyBwcm9wZXJ0aWVzIGFyZSBhdmFpbGFibGUuIEluCis4LWJpdCBub24tVVRGLTggbW9kZSwgdGhlc2Ugc2VxdWVuY2VzIGFyZSBvZiBjb3Vyc2UgbGltaXRlZCB0byB0ZXN0aW5nCitjaGFyYWN0ZXJzIHdob3NlIGNvZGVwb2ludHMgYXJlIGxlc3MgdGhhbiAyNTYsIGJ1dCB0aGV5IGRvIHdvcmsgaW4gdGhpcyBtb2RlLgorVGhlIGV4dHJhIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOgorLnNwCisgIFxlcHtcZkl4eFxmUH0gICBhIGNoYXJhY3RlciB3aXRoIHRoZSBcZkl4eFxmUCBwcm9wZXJ0eQorICBcZVB7XGZJeHhcZlB9ICAgYSBjaGFyYWN0ZXIgd2l0aG91dCB0aGUgXGZJeHhcZlAgcHJvcGVydHkKKyAgXGVYICAgICAgIGEgVW5pY29kZSBleHRlbmRlZCBncmFwaGVtZSBjbHVzdGVyCisuc3AKK1RoZSBwcm9wZXJ0eSBuYW1lcyByZXByZXNlbnRlZCBieSBcZkl4eFxmUCBhYm92ZSBhcmUgbGltaXRlZCB0byB0aGUgVW5pY29kZQorc2NyaXB0IG5hbWVzLCB0aGUgZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0aWVzLCAiQW55Iiwgd2hpY2ggbWF0Y2hlcyBhbnkKK2NoYXJhY3RlciAoaW5jbHVkaW5nIG5ld2xpbmUpLCBhbmQgc29tZSBzcGVjaWFsIFBDUkUyIHByb3BlcnRpZXMgKGRlc2NyaWJlZAoraW4gdGhlCisuXCIgSFRNTCA8YSBocmVmPSIjZXh0cmFwcm9wcyI+CisuXCIgPC9hPgorbmV4dCBzZWN0aW9uKS4KKy5cIgorT3RoZXIgUGVybCBwcm9wZXJ0aWVzIHN1Y2ggYXMgIkluTXVzaWNhbFN5bWJvbHMiIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IFBDUkUyLgorTm90ZSB0aGF0IFxlUHtBbnl9IGRvZXMgbm90IG1hdGNoIGFueSBjaGFyYWN0ZXJzLCBzbyBhbHdheXMgY2F1c2VzIGEgbWF0Y2gKK2ZhaWx1cmUuCisuUAorU2V0cyBvZiBVbmljb2RlIGNoYXJhY3RlcnMgYXJlIGRlZmluZWQgYXMgYmVsb25naW5nIHRvIGNlcnRhaW4gc2NyaXB0cy4gQQorY2hhcmFjdGVyIGZyb20gb25lIG9mIHRoZXNlIHNldHMgY2FuIGJlIG1hdGNoZWQgdXNpbmcgYSBzY3JpcHQgbmFtZS4gRm9yCitleGFtcGxlOgorLnNwCisgIFxlcHtHcmVla30KKyAgXGVQe0hhbn0KKy5zcAorVGhvc2UgdGhhdCBhcmUgbm90IHBhcnQgb2YgYW4gaWRlbnRpZmllZCBzY3JpcHQgYXJlIGx1bXBlZCB0b2dldGhlciBhcworIkNvbW1vbiIuIFRoZSBjdXJyZW50IGxpc3Qgb2Ygc2NyaXB0cyBpczoKKy5QCitBaG9tLAorQW5hdG9saWFuX0hpZXJvZ2x5cGhzLAorQXJhYmljLAorQXJtZW5pYW4sCitBdmVzdGFuLAorQmFsaW5lc2UsCitCYW11bSwKK0Jhc3NhX1ZhaCwKK0JhdGFrLAorQmVuZ2FsaSwKK0JvcG9tb2ZvLAorQnJhaG1pLAorQnJhaWxsZSwKK0J1Z2luZXNlLAorQnVoaWQsCitDYW5hZGlhbl9BYm9yaWdpbmFsLAorQ2FyaWFuLAorQ2F1Y2FzaWFuX0FsYmFuaWFuLAorQ2hha21hLAorQ2hhbSwKK0NoZXJva2VlLAorQ29tbW9uLAorQ29wdGljLAorQ3VuZWlmb3JtLAorQ3lwcmlvdCwKK0N5cmlsbGljLAorRGVzZXJldCwKK0RldmFuYWdhcmksCitEdXBsb3lhbiwKK0VneXB0aWFuX0hpZXJvZ2x5cGhzLAorRWxiYXNhbiwKK0V0aGlvcGljLAorR2VvcmdpYW4sCitHbGFnb2xpdGljLAorR290aGljLAorR3JhbnRoYSwKK0dyZWVrLAorR3VqYXJhdGksCitHdXJtdWtoaSwKK0hhbiwKK0hhbmd1bCwKK0hhbnVub28sCitIYXRyYW4sCitIZWJyZXcsCitIaXJhZ2FuYSwKK0ltcGVyaWFsX0FyYW1haWMsCitJbmhlcml0ZWQsCitJbnNjcmlwdGlvbmFsX1BhaGxhdmksCitJbnNjcmlwdGlvbmFsX1BhcnRoaWFuLAorSmF2YW5lc2UsCitLYWl0aGksCitLYW5uYWRhLAorS2F0YWthbmEsCitLYXlhaF9MaSwKK0toYXJvc2h0aGksCitLaG1lciwKK0tob2praSwKK0todWRhd2FkaSwKK0xhbywKK0xhdGluLAorTGVwY2hhLAorTGltYnUsCitMaW5lYXJfQSwKK0xpbmVhcl9CLAorTGlzdSwKK0x5Y2lhbiwKK0x5ZGlhbiwKK01haGFqYW5pLAorTWFsYXlhbGFtLAorTWFuZGFpYywKK01hbmljaGFlYW4sCitNZWV0ZWlfTWF5ZWssCitNZW5kZV9LaWtha3VpLAorTWVyb2l0aWNfQ3Vyc2l2ZSwKK01lcm9pdGljX0hpZXJvZ2x5cGhzLAorTWlhbywKK01vZGksCitNb25nb2xpYW4sCitNcm8sCitNdWx0YW5pLAorTXlhbm1hciwKK05hYmF0YWVhbiwKK05ld19UYWlfTHVlLAorTmtvLAorT2doYW0sCitPbF9DaGlraSwKK09sZF9IdW5nYXJpYW4sCitPbGRfSXRhbGljLAorT2xkX05vcnRoX0FyYWJpYW4sCitPbGRfUGVybWljLAorT2xkX1BlcnNpYW4sCitPbGRfU291dGhfQXJhYmlhbiwKK09sZF9UdXJraWMsCitPcml5YSwKK09zbWFueWEsCitQYWhhd2hfSG1vbmcsCitQYWxteXJlbmUsCitQYXVfQ2luX0hhdSwKK1BoYWdzX1BhLAorUGhvZW5pY2lhbiwKK1BzYWx0ZXJfUGFobGF2aSwKK1JlamFuZywKK1J1bmljLAorU2FtYXJpdGFuLAorU2F1cmFzaHRyYSwKK1NoYXJhZGEsCitTaGF2aWFuLAorU2lkZGhhbSwKK1NpZ25Xcml0aW5nLAorU2luaGFsYSwKK1NvcmFfU29tcGVuZywKK1N1bmRhbmVzZSwKK1N5bG90aV9OYWdyaSwKK1N5cmlhYywKK1RhZ2Fsb2csCitUYWdiYW53YSwKK1RhaV9MZSwKK1RhaV9UaGFtLAorVGFpX1ZpZXQsCitUYWtyaSwKK1RhbWlsLAorVGVsdWd1LAorVGhhYW5hLAorVGhhaSwKK1RpYmV0YW4sCitUaWZpbmFnaCwKK1Rpcmh1dGEsCitVZ2FyaXRpYywKK1ZhaSwKK1dhcmFuZ19DaXRpLAorWWkuCisuUAorRWFjaCBjaGFyYWN0ZXIgaGFzIGV4YWN0bHkgb25lIFVuaWNvZGUgZ2VuZXJhbCBjYXRlZ29yeSBwcm9wZXJ0eSwgc3BlY2lmaWVkIGJ5CithIHR3by1sZXR0ZXIgYWJicmV2aWF0aW9uLiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwsIG5lZ2F0aW9uIGNhbiBiZQorc3BlY2lmaWVkIGJ5IGluY2x1ZGluZyBhIGNpcmN1bWZsZXggYmV0d2VlbiB0aGUgb3BlbmluZyBicmFjZSBhbmQgdGhlIHByb3BlcnR5CituYW1lLiBGb3IgZXhhbXBsZSwgXGVwe15MdX0gaXMgdGhlIHNhbWUgYXMgXGVQe0x1fS4KKy5QCitJZiBvbmx5IG9uZSBsZXR0ZXIgaXMgc3BlY2lmaWVkIHdpdGggXGVwIG9yIFxlUCwgaXQgaW5jbHVkZXMgYWxsIHRoZSBnZW5lcmFsCitjYXRlZ29yeSBwcm9wZXJ0aWVzIHRoYXQgc3RhcnQgd2l0aCB0aGF0IGxldHRlci4gSW4gdGhpcyBjYXNlLCBpbiB0aGUgYWJzZW5jZQorb2YgbmVnYXRpb24sIHRoZSBjdXJseSBicmFja2V0cyBpbiB0aGUgZXNjYXBlIHNlcXVlbmNlIGFyZSBvcHRpb25hbDsgdGhlc2UgdHdvCitleGFtcGxlcyBoYXZlIHRoZSBzYW1lIGVmZmVjdDoKKy5zcAorICBcZXB7TH0KKyAgXGVwTAorLnNwCitUaGUgZm9sbG93aW5nIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHkgY29kZXMgYXJlIHN1cHBvcnRlZDoKKy5zcAorICBDICAgICBPdGhlcgorICBDYyAgICBDb250cm9sCisgIENmICAgIEZvcm1hdAorICBDbiAgICBVbmFzc2lnbmVkCisgIENvICAgIFByaXZhdGUgdXNlCisgIENzICAgIFN1cnJvZ2F0ZQorLnNwCisgIEwgICAgIExldHRlcgorICBMbCAgICBMb3dlciBjYXNlIGxldHRlcgorICBMbSAgICBNb2RpZmllciBsZXR0ZXIKKyAgTG8gICAgT3RoZXIgbGV0dGVyCisgIEx0ICAgIFRpdGxlIGNhc2UgbGV0dGVyCisgIEx1ICAgIFVwcGVyIGNhc2UgbGV0dGVyCisuc3AKKyAgTSAgICAgTWFyaworICBNYyAgICBTcGFjaW5nIG1hcmsKKyAgTWUgICAgRW5jbG9zaW5nIG1hcmsKKyAgTW4gICAgTm9uLXNwYWNpbmcgbWFyaworLnNwCisgIE4gICAgIE51bWJlcgorICBOZCAgICBEZWNpbWFsIG51bWJlcgorICBObCAgICBMZXR0ZXIgbnVtYmVyCisgIE5vICAgIE90aGVyIG51bWJlcgorLnNwCisgIFAgICAgIFB1bmN0dWF0aW9uCisgIFBjICAgIENvbm5lY3RvciBwdW5jdHVhdGlvbgorICBQZCAgICBEYXNoIHB1bmN0dWF0aW9uCisgIFBlICAgIENsb3NlIHB1bmN0dWF0aW9uCisgIFBmICAgIEZpbmFsIHB1bmN0dWF0aW9uCisgIFBpICAgIEluaXRpYWwgcHVuY3R1YXRpb24KKyAgUG8gICAgT3RoZXIgcHVuY3R1YXRpb24KKyAgUHMgICAgT3BlbiBwdW5jdHVhdGlvbgorLnNwCisgIFMgICAgIFN5bWJvbAorICBTYyAgICBDdXJyZW5jeSBzeW1ib2wKKyAgU2sgICAgTW9kaWZpZXIgc3ltYm9sCisgIFNtICAgIE1hdGhlbWF0aWNhbCBzeW1ib2wKKyAgU28gICAgT3RoZXIgc3ltYm9sCisuc3AKKyAgWiAgICAgU2VwYXJhdG9yCisgIFpsICAgIExpbmUgc2VwYXJhdG9yCisgIFpwICAgIFBhcmFncmFwaCBzZXBhcmF0b3IKKyAgWnMgICAgU3BhY2Ugc2VwYXJhdG9yCisuc3AKK1RoZSBzcGVjaWFsIHByb3BlcnR5IEwmIGlzIGFsc28gc3VwcG9ydGVkOiBpdCBtYXRjaGVzIGEgY2hhcmFjdGVyIHRoYXQgaGFzCit0aGUgTHUsIExsLCBvciBMdCBwcm9wZXJ0eSwgaW4gb3RoZXIgd29yZHMsIGEgbGV0dGVyIHRoYXQgaXMgbm90IGNsYXNzaWZpZWQgYXMKK2EgbW9kaWZpZXIgb3IgIm90aGVyIi4KKy5QCitUaGUgQ3MgKFN1cnJvZ2F0ZSkgcHJvcGVydHkgYXBwbGllcyBvbmx5IHRvIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFUrRDgwMCB0bworVStERkZGLiBTdWNoIGNoYXJhY3RlcnMgYXJlIG5vdCB2YWxpZCBpbiBVbmljb2RlIHN0cmluZ3MgYW5kIHNvCitjYW5ub3QgYmUgdGVzdGVkIGJ5IFBDUkUyLCB1bmxlc3MgVVRGIHZhbGlkaXR5IGNoZWNraW5nIGhhcyBiZWVuIHR1cm5lZCBvZmYKKyhzZWUgdGhlIGRpc2N1c3Npb24gb2YgUENSRTJfTk9fVVRGX0NIRUNLIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK3BhZ2UpLiBQZXJsIGRvZXMgbm90IHN1cHBvcnQgdGhlIENzIHByb3BlcnR5LgorLlAKK1RoZSBsb25nIHN5bm9ueW1zIGZvciBwcm9wZXJ0eSBuYW1lcyB0aGF0IFBlcmwgc3VwcG9ydHMgKHN1Y2ggYXMgXGVwe0xldHRlcn0pCithcmUgbm90IHN1cHBvcnRlZCBieSBQQ1JFMiwgbm9yIGlzIGl0IHBlcm1pdHRlZCB0byBwcmVmaXggYW55IG9mIHRoZXNlCitwcm9wZXJ0aWVzIHdpdGggIklzIi4KKy5QCitObyBjaGFyYWN0ZXIgdGhhdCBpcyBpbiB0aGUgVW5pY29kZSB0YWJsZSBoYXMgdGhlIENuICh1bmFzc2lnbmVkKSBwcm9wZXJ0eS4KK0luc3RlYWQsIHRoaXMgcHJvcGVydHkgaXMgYXNzdW1lZCBmb3IgYW55IGNvZGUgcG9pbnQgdGhhdCBpcyBub3QgaW4gdGhlCitVbmljb2RlIHRhYmxlLgorLlAKK1NwZWNpZnlpbmcgY2FzZWxlc3MgbWF0Y2hpbmcgZG9lcyBub3QgYWZmZWN0IHRoZXNlIGVzY2FwZSBzZXF1ZW5jZXMuIEZvcgorZXhhbXBsZSwgXGVwe0x1fSBhbHdheXMgbWF0Y2hlcyBvbmx5IHVwcGVyIGNhc2UgbGV0dGVycy4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbQordGhlIGJlaGF2aW91ciBvZiBjdXJyZW50IHZlcnNpb25zIG9mIFBlcmwuCisuUAorTWF0Y2hpbmcgY2hhcmFjdGVycyBieSBVbmljb2RlIHByb3BlcnR5IGlzIG5vdCBmYXN0LCBiZWNhdXNlIFBDUkUyIGhhcyB0byBkbyBhCittdWx0aXN0YWdlIHRhYmxlIGxvb2t1cCBpbiBvcmRlciB0byBmaW5kIGEgY2hhcmFjdGVyJ3MgcHJvcGVydHkuIFRoYXQgaXMgd2h5Cit0aGUgdHJhZGl0aW9uYWwgZXNjYXBlIHNlcXVlbmNlcyBzdWNoIGFzIFxlZCBhbmQgXGV3IGRvIG5vdCB1c2UgVW5pY29kZQorcHJvcGVydGllcyBpbiBQQ1JFMiBieSBkZWZhdWx0LCB0aG91Z2ggeW91IGNhbiBtYWtlIHRoZW0gZG8gc28gYnkgc2V0dGluZyB0aGUKK1BDUkUyX1VDUCBvcHRpb24gb3IgYnkgc3RhcnRpbmcgdGhlIHBhdHRlcm4gd2l0aCAoKlVDUCkuCisuCisuCisuU1MgRXh0ZW5kZWQgZ3JhcGhlbWUgY2x1c3RlcnMKKy5ycworLnNwCitUaGUgXGVYIGVzY2FwZSBtYXRjaGVzIGFueSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIHRoYXQgZm9ybSBhbiAiZXh0ZW5kZWQKK2dyYXBoZW1lIGNsdXN0ZXIiLCBhbmQgdHJlYXRzIHRoZSBzZXF1ZW5jZSBhcyBhbiBhdG9taWMgZ3JvdXAKKy5cIiBIVE1MIDxhIGhyZWY9IiNhdG9taWNncm91cCI+CisuXCIgPC9hPgorKHNlZSBiZWxvdykuCisuXCIKK1VuaWNvZGUgc3VwcG9ydHMgdmFyaW91cyBraW5kcyBvZiBjb21wb3NpdGUgY2hhcmFjdGVyIGJ5IGdpdmluZyBlYWNoIGNoYXJhY3RlcgorYSBncmFwaGVtZSBicmVha2luZyBwcm9wZXJ0eSwgYW5kIGhhdmluZyBydWxlcyB0aGF0IHVzZSB0aGVzZSBwcm9wZXJ0aWVzIHRvCitkZWZpbmUgdGhlIGJvdW5kYXJpZXMgb2YgZXh0ZW5kZWQgZ3JhcGhlbWUgY2x1c3RlcnMuIFxlWCBhbHdheXMgbWF0Y2hlcyBhdAorbGVhc3Qgb25lIGNoYXJhY3Rlci4gVGhlbiBpdCBkZWNpZGVzIHdoZXRoZXIgdG8gYWRkIGFkZGl0aW9uYWwgY2hhcmFjdGVycworYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgcnVsZXMgZm9yIGVuZGluZyBhIGNsdXN0ZXI6CisuUAorMS4gRW5kIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLgorLlAKKzIuIERvIG5vdCBlbmQgYmV0d2VlbiBDUiBhbmQgTEY7IG90aGVyd2lzZSBlbmQgYWZ0ZXIgYW55IGNvbnRyb2wgY2hhcmFjdGVyLgorLlAKKzMuIERvIG5vdCBicmVhayBIYW5ndWwgKGEgS29yZWFuIHNjcmlwdCkgc3lsbGFibGUgc2VxdWVuY2VzLiBIYW5ndWwgY2hhcmFjdGVycworYXJlIG9mIGZpdmUgdHlwZXM6IEwsIFYsIFQsIExWLCBhbmQgTFZULiBBbiBMIGNoYXJhY3RlciBtYXkgYmUgZm9sbG93ZWQgYnkgYW4KK0wsIFYsIExWLCBvciBMVlQgY2hhcmFjdGVyOyBhbiBMViBvciBWIGNoYXJhY3RlciBtYXkgYmUgZm9sbG93ZWQgYnkgYSBWIG9yIFQKK2NoYXJhY3RlcjsgYW4gTFZUIG9yIFQgY2hhcmFjdGVyIG1heSBiZSBmb2xsd2VkIG9ubHkgYnkgYSBUIGNoYXJhY3Rlci4KKy5QCis0LiBEbyBub3QgZW5kIGJlZm9yZSBleHRlbmRpbmcgY2hhcmFjdGVycyBvciBzcGFjaW5nIG1hcmtzLiBDaGFyYWN0ZXJzIHdpdGgKK3RoZSAibWFyayIgcHJvcGVydHkgYWx3YXlzIGhhdmUgdGhlICJleHRlbmQiIGdyYXBoZW1lIGJyZWFraW5nIHByb3BlcnR5LgorLlAKKzUuIERvIG5vdCBlbmQgYWZ0ZXIgcHJlcGVuZCBjaGFyYWN0ZXJzLgorLlAKKzYuIE90aGVyd2lzZSwgZW5kIHRoZSBjbHVzdGVyLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0iZXh0cmFwcm9wcyI+PC9hPgorLlNTIFBDUkUyJ3MgYWRkaXRpb25hbCBwcm9wZXJ0aWVzCisucnMKKy5zcAorQXMgd2VsbCBhcyB0aGUgc3RhbmRhcmQgVW5pY29kZSBwcm9wZXJ0aWVzIGRlc2NyaWJlZCBhYm92ZSwgUENSRTIgc3VwcG9ydHMgZm91cgorbW9yZSB0aGF0IG1ha2UgaXQgcG9zc2libGUgdG8gY29udmVydCB0cmFkaXRpb25hbCBlc2NhcGUgc2VxdWVuY2VzIHN1Y2ggYXMgXGV3CithbmQgXGVzIHRvIHVzZSBVbmljb2RlIHByb3BlcnRpZXMuIFBDUkUyIHVzZXMgdGhlc2Ugbm9uLXN0YW5kYXJkLCBub24tUGVybAorcHJvcGVydGllcyBpbnRlcm5hbGx5IHdoZW4gUENSRTJfVUNQIGlzIHNldC4gSG93ZXZlciwgdGhleSBtYXkgYWxzbyBiZSB1c2VkCitleHBsaWNpdGx5LiBUaGVzZSBwcm9wZXJ0aWVzIGFyZToKKy5zcAorICBYYW4gICBBbnkgYWxwaGFudW1lcmljIGNoYXJhY3RlcgorICBYcHMgICBBbnkgUE9TSVggc3BhY2UgY2hhcmFjdGVyCisgIFhzcCAgIEFueSBQZXJsIHNwYWNlIGNoYXJhY3RlcgorICBYd2QgICBBbnkgUGVybCAid29yZCIgY2hhcmFjdGVyCisuc3AKK1hhbiBtYXRjaGVzIGNoYXJhY3RlcnMgdGhhdCBoYXZlIGVpdGhlciB0aGUgTCAobGV0dGVyKSBvciB0aGUgTiAobnVtYmVyKQorcHJvcGVydHkuIFhwcyBtYXRjaGVzIHRoZSBjaGFyYWN0ZXJzIHRhYiwgbGluZWZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBvcgorY2FycmlhZ2UgcmV0dXJuLCBhbmQgYW55IG90aGVyIGNoYXJhY3RlciB0aGF0IGhhcyB0aGUgWiAoc2VwYXJhdG9yKSBwcm9wZXJ0eS4KK1hzcCBpcyB0aGUgc2FtZSBhcyBYcHM7IGluIFBDUkUxIGl0IHVzZWQgdG8gZXhjbHVkZSB2ZXJ0aWNhbCB0YWIsIGZvciBQZXJsCitjb21wYXRpYmlsaXR5LCBidXQgUGVybCBjaGFuZ2VkLiBYd2QgbWF0Y2hlcyB0aGUgc2FtZSBjaGFyYWN0ZXJzIGFzIFhhbiwgcGx1cwordW5kZXJzY29yZS4KKy5QCitUaGVyZSBpcyBhbm90aGVyIG5vbi1zdGFuZGFyZCBwcm9wZXJ0eSwgWHVjLCB3aGljaCBtYXRjaGVzIGFueSBjaGFyYWN0ZXIgdGhhdAorY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGEgVW5pdmVyc2FsIENoYXJhY3RlciBOYW1lIGluIEMrKyBhbmQgb3RoZXIgcHJvZ3JhbW1pbmcKK2xhbmd1YWdlcy4gVGhlc2UgYXJlIHRoZSBjaGFyYWN0ZXJzICQsIEAsIGAgKGdyYXZlIGFjY2VudCksIGFuZCBhbGwgY2hhcmFjdGVycword2l0aCBVbmljb2RlIGNvZGUgcG9pbnRzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBVKzAwQTAsIGV4Y2VwdCBmb3IgdGhlCitzdXJyb2dhdGVzIFUrRDgwMCB0byBVK0RGRkYuIE5vdGUgdGhhdCBtb3N0IGJhc2UgKEFTQ0lJKSBjaGFyYWN0ZXJzIGFyZQorZXhjbHVkZWQuIChVbml2ZXJzYWwgQ2hhcmFjdGVyIE5hbWVzIGFyZSBvZiB0aGUgZm9ybSBcZXVISEhIIG9yIFxlVUhISEhISEhICit3aGVyZSBIIGlzIGEgaGV4YWRlY2ltYWwgZGlnaXQuIE5vdGUgdGhhdCB0aGUgWHVjIHByb3BlcnR5IGRvZXMgbm90IG1hdGNoIHRoZXNlCitzZXF1ZW5jZXMgYnV0IHRoZSBjaGFyYWN0ZXJzIHRoYXQgdGhleSByZXByZXNlbnQuKQorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0icmVzZXRtYXRjaHN0YXJ0Ij48L2E+CisuU1MgIlJlc2V0dGluZyB0aGUgbWF0Y2ggc3RhcnQiCisucnMKKy5zcAorVGhlIGVzY2FwZSBzZXF1ZW5jZSBcZUsgY2F1c2VzIGFueSBwcmV2aW91c2x5IG1hdGNoZWQgY2hhcmFjdGVycyBub3QgdG8gYmUKK2luY2x1ZGVkIGluIHRoZSBmaW5hbCBtYXRjaGVkIHNlcXVlbmNlLiBGb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm46Cisuc3AKKyAgZm9vXGVLYmFyCisuc3AKK21hdGNoZXMgImZvb2JhciIsIGJ1dCByZXBvcnRzIHRoYXQgaXQgaGFzIG1hdGNoZWQgImJhciIuIFRoaXMgZmVhdHVyZSBpcworc2ltaWxhciB0byBhIGxvb2tiZWhpbmQgYXNzZXJ0aW9uCisuXCIgSFRNTCA8YSBocmVmPSIjbG9va2JlaGluZCI+CisuXCIgPC9hPgorKGRlc2NyaWJlZCBiZWxvdykuCisuXCIKK0hvd2V2ZXIsIGluIHRoaXMgY2FzZSwgdGhlIHBhcnQgb2YgdGhlIHN1YmplY3QgYmVmb3JlIHRoZSByZWFsIG1hdGNoIGRvZXMgbm90CitoYXZlIHRvIGJlIG9mIGZpeGVkIGxlbmd0aCwgYXMgbG9va2JlaGluZCBhc3NlcnRpb25zIGRvLiBUaGUgdXNlIG9mIFxlSyBkb2VzCitub3QgaW50ZXJmZXJlIHdpdGggdGhlIHNldHRpbmcgb2YKKy5cIiBIVE1MIDxhIGhyZWY9IiNzdWJwYXR0ZXJuIj4KKy5cIiA8L2E+CitjYXB0dXJlZCBzdWJzdHJpbmdzLgorLlwiCitGb3IgZXhhbXBsZSwgd2hlbiB0aGUgcGF0dGVybgorLnNwCisgIChmb28pXGVLYmFyCisuc3AKK21hdGNoZXMgImZvb2JhciIsIHRoZSBmaXJzdCBzdWJzdHJpbmcgaXMgc3RpbGwgc2V0IHRvICJmb28iLgorLlAKK1BlcmwgZG9jdW1lbnRzIHRoYXQgdGhlIHVzZSBvZiBcZUsgd2l0aGluIGFzc2VydGlvbnMgaXMgIm5vdCB3ZWxsIGRlZmluZWQiLiBJbgorUENSRTIsIFxlSyBpcyBhY3RlZCB1cG9uIHdoZW4gaXQgb2NjdXJzIGluc2lkZSBwb3NpdGl2ZSBhc3NlcnRpb25zLCBidXQgaXMKK2lnbm9yZWQgaW4gbmVnYXRpdmUgYXNzZXJ0aW9ucy4gTm90ZSB0aGF0IHdoZW4gYSBwYXR0ZXJuIHN1Y2ggYXMgKD89YWJcZUspCittYXRjaGVzLCB0aGUgcmVwb3J0ZWQgc3RhcnQgb2YgdGhlIG1hdGNoIGNhbiBiZSBncmVhdGVyIHRoYW4gdGhlIGVuZCBvZiB0aGUKK21hdGNoLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0ic21hbGxhc3NlcnRpb25zIj48L2E+CisuU1MgIlNpbXBsZSBhc3NlcnRpb25zIgorLnJzCisuc3AKK1RoZSBmaW5hbCB1c2Ugb2YgYmFja3NsYXNoIGlzIGZvciBjZXJ0YWluIHNpbXBsZSBhc3NlcnRpb25zLiBBbiBhc3NlcnRpb24KK3NwZWNpZmllcyBhIGNvbmRpdGlvbiB0aGF0IGhhcyB0byBiZSBtZXQgYXQgYSBwYXJ0aWN1bGFyIHBvaW50IGluIGEgbWF0Y2gsCit3aXRob3V0IGNvbnN1bWluZyBhbnkgY2hhcmFjdGVycyBmcm9tIHRoZSBzdWJqZWN0IHN0cmluZy4gVGhlIHVzZSBvZgorc3VicGF0dGVybnMgZm9yIG1vcmUgY29tcGxpY2F0ZWQgYXNzZXJ0aW9ucyBpcyBkZXNjcmliZWQKKy5cIiBIVE1MIDxhIGhyZWY9IiNiaWdhc3NlcnRpb25zIj4KKy5cIiA8L2E+CitiZWxvdy4KKy5cIgorVGhlIGJhY2tzbGFzaGVkIGFzc2VydGlvbnMgYXJlOgorLnNwCisgIFxlYiAgICAgbWF0Y2hlcyBhdCBhIHdvcmQgYm91bmRhcnkKKyAgXGVCICAgICBtYXRjaGVzIHdoZW4gbm90IGF0IGEgd29yZCBib3VuZGFyeQorICBcZUEgICAgIG1hdGNoZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdWJqZWN0CisgIFxlWiAgICAgbWF0Y2hlcyBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0CisgICAgICAgICAgYWxzbyBtYXRjaGVzIGJlZm9yZSBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdAorICBcZXogICAgIG1hdGNoZXMgb25seSBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0CisgIFxlRyAgICAgbWF0Y2hlcyBhdCB0aGUgZmlyc3QgbWF0Y2hpbmcgcG9zaXRpb24gaW4gdGhlIHN1YmplY3QKKy5zcAorSW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLCBcZWIgaGFzIGEgZGlmZmVyZW50IG1lYW5pbmc7IGl0IG1hdGNoZXMgdGhlIGJhY2tzcGFjZQorY2hhcmFjdGVyLiBJZiBhbnkgb3RoZXIgb2YgdGhlc2UgYXNzZXJ0aW9ucyBhcHBlYXJzIGluIGEgY2hhcmFjdGVyIGNsYXNzLCBhbgorImludmFsaWQgZXNjYXBlIHNlcXVlbmNlIiBlcnJvciBpcyBnZW5lcmF0ZWQuCisuUAorQSB3b3JkIGJvdW5kYXJ5IGlzIGEgcG9zaXRpb24gaW4gdGhlIHN1YmplY3Qgc3RyaW5nIHdoZXJlIHRoZSBjdXJyZW50IGNoYXJhY3RlcgorYW5kIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgZG8gbm90IGJvdGggbWF0Y2ggXGV3IG9yIFxlVyAoaS5lLiBvbmUgbWF0Y2hlcworXGV3IGFuZCB0aGUgb3RoZXIgbWF0Y2hlcyBcZVcpLCBvciB0aGUgc3RhcnQgb3IgZW5kIG9mIHRoZSBzdHJpbmcgaWYgdGhlCitmaXJzdCBvciBsYXN0IGNoYXJhY3RlciBtYXRjaGVzIFxldywgcmVzcGVjdGl2ZWx5LiBJbiBhIFVURiBtb2RlLCB0aGUgbWVhbmluZ3MKK29mIFxldyBhbmQgXGVXIGNhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgdGhlIFBDUkUyX1VDUCBvcHRpb24uIFdoZW4gdGhpcyBpcworZG9uZSwgaXQgYWxzbyBhZmZlY3RzIFxlYiBhbmQgXGVCLiBOZWl0aGVyIFBDUkUyIG5vciBQZXJsIGhhcyBhIHNlcGFyYXRlICJzdGFydAorb2Ygd29yZCIgb3IgImVuZCBvZiB3b3JkIiBtZXRhc2VxdWVuY2UuIEhvd2V2ZXIsIHdoYXRldmVyIGZvbGxvd3MgXGViIG5vcm1hbGx5CitkZXRlcm1pbmVzIHdoaWNoIGl0IGlzLiBGb3IgZXhhbXBsZSwgdGhlIGZyYWdtZW50IFxlYmEgbWF0Y2hlcyAiYSIgYXQgdGhlIHN0YXJ0CitvZiBhIHdvcmQuCisuUAorVGhlIFxlQSwgXGVaLCBhbmQgXGV6IGFzc2VydGlvbnMgZGlmZmVyIGZyb20gdGhlIHRyYWRpdGlvbmFsIGNpcmN1bWZsZXggYW5kCitkb2xsYXIgKGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uKSBpbiB0aGF0IHRoZXkgb25seSBldmVyIG1hdGNoIGF0IHRoZSB2ZXJ5CitzdGFydCBhbmQgZW5kIG9mIHRoZSBzdWJqZWN0IHN0cmluZywgd2hhdGV2ZXIgb3B0aW9ucyBhcmUgc2V0LiBUaHVzLCB0aGV5IGFyZQoraW5kZXBlbmRlbnQgb2YgbXVsdGlsaW5lIG1vZGUuIFRoZXNlIHRocmVlIGFzc2VydGlvbnMgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGUKK1BDUkUyX05PVEJPTCBvciBQQ1JFMl9OT1RFT0wgb3B0aW9ucywgd2hpY2ggYWZmZWN0IG9ubHkgdGhlIGJlaGF2aW91ciBvZiB0aGUKK2NpcmN1bWZsZXggYW5kIGRvbGxhciBtZXRhY2hhcmFjdGVycy4gSG93ZXZlciwgaWYgdGhlIFxmSXN0YXJ0b2Zmc2V0XGZQCithcmd1bWVudCBvZiBcZkJwY3JlMl9tYXRjaCgpXGZQIGlzIG5vbi16ZXJvLCBpbmRpY2F0aW5nIHRoYXQgbWF0Y2hpbmcgaXMgdG8KK3N0YXJ0IGF0IGEgcG9pbnQgb3RoZXIgdGhhbiB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdWJqZWN0LCBcZUEgY2FuIG5ldmVyIG1hdGNoLgorVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBcZVogYW5kIFxleiBpcyB0aGF0IFxlWiBtYXRjaGVzIGJlZm9yZSBhIG5ld2xpbmUgYXQgdGhlCitlbmQgb2YgdGhlIHN0cmluZyBhcyB3ZWxsIGFzIGF0IHRoZSB2ZXJ5IGVuZCwgd2hlcmVhcyBcZXogbWF0Y2hlcyBvbmx5IGF0IHRoZQorZW5kLgorLlAKK1RoZSBcZUcgYXNzZXJ0aW9uIGlzIHRydWUgb25seSB3aGVuIHRoZSBjdXJyZW50IG1hdGNoaW5nIHBvc2l0aW9uIGlzIGF0IHRoZQorc3RhcnQgcG9pbnQgb2YgdGhlIG1hdGNoLCBhcyBzcGVjaWZpZWQgYnkgdGhlIFxmSXN0YXJ0b2Zmc2V0XGZQIGFyZ3VtZW50IG9mCitcZkJwY3JlMl9tYXRjaCgpXGZQLiBJdCBkaWZmZXJzIGZyb20gXGVBIHdoZW4gdGhlIHZhbHVlIG9mIFxmSXN0YXJ0b2Zmc2V0XGZQIGlzCitub24temVyby4gQnkgY2FsbGluZyBcZkJwY3JlMl9tYXRjaCgpXGZQIG11bHRpcGxlIHRpbWVzIHdpdGggYXBwcm9wcmlhdGUKK2FyZ3VtZW50cywgeW91IGNhbiBtaW1pYyBQZXJsJ3MgL2cgb3B0aW9uLCBhbmQgaXQgaXMgaW4gdGhpcyBraW5kIG9mCitpbXBsZW1lbnRhdGlvbiB3aGVyZSBcZUcgY2FuIGJlIHVzZWZ1bC4KKy5QCitOb3RlLCBob3dldmVyLCB0aGF0IFBDUkUyJ3MgaW50ZXJwcmV0YXRpb24gb2YgXGVHLCBhcyB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQKK21hdGNoLCBpcyBzdWJ0bHkgZGlmZmVyZW50IGZyb20gUGVybCdzLCB3aGljaCBkZWZpbmVzIGl0IGFzIHRoZSBlbmQgb2YgdGhlCitwcmV2aW91cyBtYXRjaC4gSW4gUGVybCwgdGhlc2UgY2FuIGJlIGRpZmZlcmVudCB3aGVuIHRoZSBwcmV2aW91c2x5IG1hdGNoZWQKK3N0cmluZyB3YXMgZW1wdHkuIEJlY2F1c2UgUENSRTIgZG9lcyBqdXN0IG9uZSBtYXRjaCBhdCBhIHRpbWUsIGl0IGNhbm5vdAorcmVwcm9kdWNlIHRoaXMgYmVoYXZpb3VyLgorLlAKK0lmIGFsbCB0aGUgYWx0ZXJuYXRpdmVzIG9mIGEgcGF0dGVybiBiZWdpbiB3aXRoIFxlRywgdGhlIGV4cHJlc3Npb24gaXMgYW5jaG9yZWQKK3RvIHRoZSBzdGFydGluZyBtYXRjaCBwb3NpdGlvbiwgYW5kIHRoZSAiYW5jaG9yZWQiIGZsYWcgaXMgc2V0IGluIHRoZSBjb21waWxlZAorcmVndWxhciBleHByZXNzaW9uLgorLgorLgorLlNIICJDSVJDVU1GTEVYIEFORCBET0xMQVIiCisucnMKKy5zcAorVGhlIGNpcmN1bWZsZXggYW5kIGRvbGxhciBtZXRhY2hhcmFjdGVycyBhcmUgemVyby13aWR0aCBhc3NlcnRpb25zLiBUaGF0IGlzLAordGhleSB0ZXN0IGZvciBhIHBhcnRpY3VsYXIgY29uZGl0aW9uIGJlaW5nIHRydWUgd2l0aG91dCBjb25zdW1pbmcgYW55CitjaGFyYWN0ZXJzIGZyb20gdGhlIHN1YmplY3Qgc3RyaW5nLiBUaGVzZSB0d28gbWV0YWNoYXJhY3RlcnMgYXJlIGNvbmNlcm5lZCB3aXRoCittYXRjaGluZyB0aGUgc3RhcnRzIGFuZCBlbmRzIG9mIGxpbmVzLiBJZiB0aGUgbmV3bGluZSBjb252ZW50aW9uIGlzIHNldCBzbyB0aGF0Citvbmx5IHRoZSB0d28tY2hhcmFjdGVyIHNlcXVlbmNlIENSTEYgaXMgcmVjb2duaXplZCBhcyBhIG5ld2xpbmUsIGlzb2xhdGVkIENSCithbmQgTEYgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCBhcyBvcmRpbmFyeSBkYXRhIGNoYXJhY3RlcnMsIGFuZCBhcmUgbm90CityZWNvZ25pemVkIGFzIG5ld2xpbmVzLgorLlAKK091dHNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIGluIHRoZSBkZWZhdWx0IG1hdGNoaW5nIG1vZGUsIHRoZSBjaXJjdW1mbGV4CitjaGFyYWN0ZXIgaXMgYW4gYXNzZXJ0aW9uIHRoYXQgaXMgdHJ1ZSBvbmx5IGlmIHRoZSBjdXJyZW50IG1hdGNoaW5nIHBvaW50IGlzIGF0Cit0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLiBJZiB0aGUgXGZJc3RhcnRvZmZzZXRcZlAgYXJndW1lbnQgb2YKK1xmQnBjcmUyX21hdGNoKClcZlAgaXMgbm9uLXplcm8sIG9yIGlmIFBDUkUyX05PVEJPTCBpcyBzZXQsIGNpcmN1bWZsZXggY2FuCituZXZlciBtYXRjaCBpZiB0aGUgUENSRTJfTVVMVElMSU5FIG9wdGlvbiBpcyB1bnNldC4gSW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLAorY2lyY3VtZmxleCBoYXMgYW4gZW50aXJlbHkgZGlmZmVyZW50IG1lYW5pbmcKKy5cIiBIVE1MIDxhIGhyZWY9IiNjaGFyYWN0ZXJjbGFzcyI+CisuXCIgPC9hPgorKHNlZSBiZWxvdykuCisuXCIKKy5QCitDaXJjdW1mbGV4IG5lZWQgbm90IGJlIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHBhdHRlcm4gaWYgYSBudW1iZXIgb2YKK2FsdGVybmF0aXZlcyBhcmUgaW52b2x2ZWQsIGJ1dCBpdCBzaG91bGQgYmUgdGhlIGZpcnN0IHRoaW5nIGluIGVhY2ggYWx0ZXJuYXRpdmUKK2luIHdoaWNoIGl0IGFwcGVhcnMgaWYgdGhlIHBhdHRlcm4gaXMgZXZlciB0byBtYXRjaCB0aGF0IGJyYW5jaC4gSWYgYWxsCitwb3NzaWJsZSBhbHRlcm5hdGl2ZXMgc3RhcnQgd2l0aCBhIGNpcmN1bWZsZXgsIHRoYXQgaXMsIGlmIHRoZSBwYXR0ZXJuIGlzCitjb25zdHJhaW5lZCB0byBtYXRjaCBvbmx5IGF0IHRoZSBzdGFydCBvZiB0aGUgc3ViamVjdCwgaXQgaXMgc2FpZCB0byBiZSBhbgorImFuY2hvcmVkIiBwYXR0ZXJuLiAoVGhlcmUgYXJlIGFsc28gb3RoZXIgY29uc3RydWN0cyB0aGF0IGNhbiBjYXVzZSBhIHBhdHRlcm4KK3RvIGJlIGFuY2hvcmVkLikKKy5QCitUaGUgZG9sbGFyIGNoYXJhY3RlciBpcyBhbiBhc3NlcnRpb24gdGhhdCBpcyB0cnVlIG9ubHkgaWYgdGhlIGN1cnJlbnQgbWF0Y2hpbmcKK3BvaW50IGlzIGF0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLCBvciBpbW1lZGlhdGVseSBiZWZvcmUgYSBuZXdsaW5lIGF0Cit0aGUgZW5kIG9mIHRoZSBzdHJpbmcgKGJ5IGRlZmF1bHQpLCB1bmxlc3MgUENSRTJfTk9URU9MIGlzIHNldC4gTm90ZSwgaG93ZXZlciwKK3RoYXQgaXQgZG9lcyBub3QgYWN0dWFsbHkgbWF0Y2ggdGhlIG5ld2xpbmUuIERvbGxhciBuZWVkIG5vdCBiZSB0aGUgbGFzdAorY2hhcmFjdGVyIG9mIHRoZSBwYXR0ZXJuIGlmIGEgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBhcmUgaW52b2x2ZWQsIGJ1dCBpdAorc2hvdWxkIGJlIHRoZSBsYXN0IGl0ZW0gaW4gYW55IGJyYW5jaCBpbiB3aGljaCBpdCBhcHBlYXJzLiBEb2xsYXIgaGFzIG5vCitzcGVjaWFsIG1lYW5pbmcgaW4gYSBjaGFyYWN0ZXIgY2xhc3MuCisuUAorVGhlIG1lYW5pbmcgb2YgZG9sbGFyIGNhbiBiZSBjaGFuZ2VkIHNvIHRoYXQgaXQgbWF0Y2hlcyBvbmx5IGF0IHRoZSB2ZXJ5IGVuZCBvZgordGhlIHN0cmluZywgYnkgc2V0dGluZyB0aGUgUENSRTJfRE9MTEFSX0VORE9OTFkgb3B0aW9uIGF0IGNvbXBpbGUgdGltZS4gVGhpcworZG9lcyBub3QgYWZmZWN0IHRoZSBcZVogYXNzZXJ0aW9uLgorLlAKK1RoZSBtZWFuaW5ncyBvZiB0aGUgY2lyY3VtZmxleCBhbmQgZG9sbGFyIG1ldGFjaGFyYWN0ZXJzIGFyZSBjaGFuZ2VkIGlmIHRoZQorUENSRTJfTVVMVElMSU5FIG9wdGlvbiBpcyBzZXQuIFdoZW4gdGhpcyBpcyB0aGUgY2FzZSwgYSBkb2xsYXIgY2hhcmFjdGVyCittYXRjaGVzIGJlZm9yZSBhbnkgbmV3bGluZXMgaW4gdGhlIHN0cmluZywgYXMgd2VsbCBhcyBhdCB0aGUgdmVyeSBlbmQsIGFuZCBhCitjaXJjdW1mbGV4IG1hdGNoZXMgaW1tZWRpYXRlbHkgYWZ0ZXIgaW50ZXJuYWwgbmV3bGluZXMgYXMgd2VsbCBhcyBhdCB0aGUgc3RhcnQKK29mIHRoZSBzdWJqZWN0IHN0cmluZy4gSXQgZG9lcyBub3QgbWF0Y2ggYWZ0ZXIgYSBuZXdsaW5lIHRoYXQgZW5kcyB0aGUgc3RyaW5nLAorZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLiBIb3dldmVyLCB0aGlzIGNhbiBiZSBjaGFuZ2VkIGJ5IHNldHRpbmcgdGhlCitQQ1JFMl9BTFRfQ0lSQ1VNRkxFWCBvcHRpb24uCisuUAorRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuIC9eYWJjJC8gbWF0Y2hlcyB0aGUgc3ViamVjdCBzdHJpbmcgImRlZlxlbmFiYyIgKHdoZXJlCitcZW4gcmVwcmVzZW50cyBhIG5ld2xpbmUpIGluIG11bHRpbGluZSBtb2RlLCBidXQgbm90IG90aGVyd2lzZS4gQ29uc2VxdWVudGx5LAorcGF0dGVybnMgdGhhdCBhcmUgYW5jaG9yZWQgaW4gc2luZ2xlIGxpbmUgbW9kZSBiZWNhdXNlIGFsbCBicmFuY2hlcyBzdGFydCB3aXRoCiteIGFyZSBub3QgYW5jaG9yZWQgaW4gbXVsdGlsaW5lIG1vZGUsIGFuZCBhIG1hdGNoIGZvciBjaXJjdW1mbGV4IGlzIHBvc3NpYmxlCit3aGVuIHRoZSBcZklzdGFydG9mZnNldFxmUCBhcmd1bWVudCBvZiBcZkJwY3JlMl9tYXRjaCgpXGZQIGlzIG5vbi16ZXJvLiBUaGUKK1BDUkUyX0RPTExBUl9FTkRPTkxZIG9wdGlvbiBpcyBpZ25vcmVkIGlmIFBDUkUyX01VTFRJTElORSBpcyBzZXQuCisuUAorV2hlbiB0aGUgbmV3bGluZSBjb252ZW50aW9uIChzZWUKKy5cIiBIVE1MIDxhIGhyZWY9IiNuZXdsaW5lcyI+CisuXCIgPC9hPgorIk5ld2xpbmUgY29udmVudGlvbnMiCisuXCIKK2JlbG93KSByZWNvZ25pemVzIHRoZSB0d28tY2hhcmFjdGVyIHNlcXVlbmNlIENSTEYgYXMgYSBuZXdsaW5lLCB0aGlzIGlzCitwcmVmZXJyZWQsIGV2ZW4gaWYgdGhlIHNpbmdsZSBjaGFyYWN0ZXJzIENSIGFuZCBMRiBhcmUgYWxzbyByZWNvZ25pemVkIGFzCituZXdsaW5lcy4gRm9yIGV4YW1wbGUsIGlmIHRoZSBuZXdsaW5lIGNvbnZlbnRpb24gaXMgImFueSIsIGEgbXVsdGlsaW5lIG1vZGUKK2NpcmN1bWZsZXggbWF0Y2hlcyBiZWZvcmUgInh5eiIgaW4gdGhlIHN0cmluZyAiYWJjXGVyXGVueHl6IiByYXRoZXIgdGhhbiBhZnRlcgorQ1IsIGV2ZW4gdGhvdWdoIENSIG9uIGl0cyBvd24gaXMgYSB2YWxpZCBuZXdsaW5lLiAoSXQgYWxzbyBtYXRjaGVzIGF0IHRoZSB2ZXJ5CitzdGFydCBvZiB0aGUgc3RyaW5nLCBvZiBjb3Vyc2UuKQorLlAKK05vdGUgdGhhdCB0aGUgc2VxdWVuY2VzIFxlQSwgXGVaLCBhbmQgXGV6IGNhbiBiZSB1c2VkIHRvIG1hdGNoIHRoZSBzdGFydCBhbmQKK2VuZCBvZiB0aGUgc3ViamVjdCBpbiBib3RoIG1vZGVzLCBhbmQgaWYgYWxsIGJyYW5jaGVzIG9mIGEgcGF0dGVybiBzdGFydCB3aXRoCitcZUEgaXQgaXMgYWx3YXlzIGFuY2hvcmVkLCB3aGV0aGVyIG9yIG5vdCBQQ1JFMl9NVUxUSUxJTkUgaXMgc2V0LgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0iZnVsbHN0b3Bkb3QiPjwvYT4KKy5TSCAiRlVMTCBTVE9QIChQRVJJT0QsIERPVCkgQU5EIFxlTiIKKy5ycworLnNwCitPdXRzaWRlIGEgY2hhcmFjdGVyIGNsYXNzLCBhIGRvdCBpbiB0aGUgcGF0dGVybiBtYXRjaGVzIGFueSBvbmUgY2hhcmFjdGVyIGluCit0aGUgc3ViamVjdCBzdHJpbmcgZXhjZXB0IChieSBkZWZhdWx0KSBhIGNoYXJhY3RlciB0aGF0IHNpZ25pZmllcyB0aGUgZW5kIG9mIGEKK2xpbmUuCisuUAorV2hlbiBhIGxpbmUgZW5kaW5nIGlzIGRlZmluZWQgYXMgYSBzaW5nbGUgY2hhcmFjdGVyLCBkb3QgbmV2ZXIgbWF0Y2hlcyB0aGF0CitjaGFyYWN0ZXI7IHdoZW4gdGhlIHR3by1jaGFyYWN0ZXIgc2VxdWVuY2UgQ1JMRiBpcyB1c2VkLCBkb3QgZG9lcyBub3QgbWF0Y2ggQ1IKK2lmIGl0IGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IExGLCBidXQgb3RoZXJ3aXNlIGl0IG1hdGNoZXMgYWxsIGNoYXJhY3RlcnMKKyhpbmNsdWRpbmcgaXNvbGF0ZWQgQ1JzIGFuZCBMRnMpLiBXaGVuIGFueSBVbmljb2RlIGxpbmUgZW5kaW5ncyBhcmUgYmVpbmcKK3JlY29nbml6ZWQsIGRvdCBkb2VzIG5vdCBtYXRjaCBDUiBvciBMRiBvciBhbnkgb2YgdGhlIG90aGVyIGxpbmUgZW5kaW5nCitjaGFyYWN0ZXJzLgorLlAKK1RoZSBiZWhhdmlvdXIgb2YgZG90IHdpdGggcmVnYXJkIHRvIG5ld2xpbmVzIGNhbiBiZSBjaGFuZ2VkLiBJZiB0aGUKK1BDUkUyX0RPVEFMTCBvcHRpb24gaXMgc2V0LCBhIGRvdCBtYXRjaGVzIGFueSBvbmUgY2hhcmFjdGVyLCB3aXRob3V0IGV4Y2VwdGlvbi4KK0lmIHRoZSB0d28tY2hhcmFjdGVyIHNlcXVlbmNlIENSTEYgaXMgcHJlc2VudCBpbiB0aGUgc3ViamVjdCBzdHJpbmcsIGl0IHRha2VzCit0d28gZG90cyB0byBtYXRjaCBpdC4KKy5QCitUaGUgaGFuZGxpbmcgb2YgZG90IGlzIGVudGlyZWx5IGluZGVwZW5kZW50IG9mIHRoZSBoYW5kbGluZyBvZiBjaXJjdW1mbGV4IGFuZAorZG9sbGFyLCB0aGUgb25seSByZWxhdGlvbnNoaXAgYmVpbmcgdGhhdCB0aGV5IGJvdGggaW52b2x2ZSBuZXdsaW5lcy4gRG90IGhhcyBubworc3BlY2lhbCBtZWFuaW5nIGluIGEgY2hhcmFjdGVyIGNsYXNzLgorLlAKK1RoZSBlc2NhcGUgc2VxdWVuY2UgXGVOIGJlaGF2ZXMgbGlrZSBhIGRvdCwgZXhjZXB0IHRoYXQgaXQgaXMgbm90IGFmZmVjdGVkIGJ5Cit0aGUgUENSRTJfRE9UQUxMIG9wdGlvbi4gSW4gb3RoZXIgd29yZHMsIGl0IG1hdGNoZXMgYW55IGNoYXJhY3RlciBleGNlcHQgb25lCit0aGF0IHNpZ25pZmllcyB0aGUgZW5kIG9mIGEgbGluZS4gUGVybCBhbHNvIHVzZXMgXGVOIHRvIG1hdGNoIGNoYXJhY3RlcnMgYnkKK25hbWU7IFBDUkUyIGRvZXMgbm90IHN1cHBvcnQgdGhpcy4KKy4KKy4KKy5TSCAiTUFUQ0hJTkcgQSBTSU5HTEUgQ09ERSBVTklUIgorLnJzCisuc3AKK091dHNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIHRoZSBlc2NhcGUgc2VxdWVuY2UgXGVDIG1hdGNoZXMgYW55IG9uZSBjb2RlIHVuaXQsCit3aGV0aGVyIG9yIG5vdCBhIFVURiBtb2RlIGlzIHNldC4gSW4gdGhlIDgtYml0IGxpYnJhcnksIG9uZSBjb2RlIHVuaXQgaXMgb25lCitieXRlOyBpbiB0aGUgMTYtYml0IGxpYnJhcnkgaXQgaXMgYSAxNi1iaXQgdW5pdDsgaW4gdGhlIDMyLWJpdCBsaWJyYXJ5IGl0IGlzIGEKKzMyLWJpdCB1bml0LiBVbmxpa2UgYSBkb3QsIFxlQyBhbHdheXMgbWF0Y2hlcyBsaW5lLWVuZGluZyBjaGFyYWN0ZXJzLiBUaGUKK2ZlYXR1cmUgaXMgcHJvdmlkZWQgaW4gUGVybCBpbiBvcmRlciB0byBtYXRjaCBpbmRpdmlkdWFsIGJ5dGVzIGluIFVURi04IG1vZGUsCitidXQgaXQgaXMgdW5jbGVhciBob3cgaXQgY2FuIHVzZWZ1bGx5IGJlIHVzZWQuCisuUAorQmVjYXVzZSBcZUMgYnJlYWtzIHVwIGNoYXJhY3RlcnMgaW50byBpbmRpdmlkdWFsIGNvZGUgdW5pdHMsIG1hdGNoaW5nIG9uZSB1bml0Cit3aXRoIFxlQyBpbiBVVEYtOCBvciBVVEYtMTYgbW9kZSBtZWFucyB0aGF0IHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgbWF5IHN0YXJ0Cit3aXRoIGEgbWFsZm9ybWVkIFVURiBjaGFyYWN0ZXIuIFRoaXMgaGFzIHVuZGVmaW5lZCByZXN1bHRzLCBiZWNhdXNlIFBDUkUyCithc3N1bWVzIHRoYXQgaXQgaXMgbWF0Y2hpbmcgY2hhcmFjdGVyIGJ5IGNoYXJhY3RlciBpbiBhIHZhbGlkIFVURiBzdHJpbmcgKGJ5CitkZWZhdWx0IGl0IGNoZWNrcyB0aGUgc3ViamVjdCBzdHJpbmcncyB2YWxpZGl0eSBhdCB0aGUgc3RhcnQgb2YgcHJvY2Vzc2luZwordW5sZXNzIHRoZSBQQ1JFMl9OT19VVEZfQ0hFQ0sgb3B0aW9uIGlzIHVzZWQpLgorLlAKK0FuIGFwcGxpY2F0aW9uIGNhbiBsb2NrIG91dCB0aGUgdXNlIG9mIFxlQyBieSBzZXR0aW5nIHRoZQorUENSRTJfTkVWRVJfQkFDS1NMQVNIX0Mgb3B0aW9uIHdoZW4gY29tcGlsaW5nIGEgcGF0dGVybi4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0bworYnVpbGQgUENSRTIgd2l0aCB0aGUgdXNlIG9mIFxlQyBwZXJtYW5lbnRseSBkaXNhYmxlZC4KKy5QCitQQ1JFMiBkb2VzIG5vdCBhbGxvdyBcZUMgdG8gYXBwZWFyIGluIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucworLlwiIEhUTUwgPGEgaHJlZj0iI2xvb2tiZWhpbmQiPgorLlwiIDwvYT4KKyhkZXNjcmliZWQgYmVsb3cpCisuXCIKK2luIGEgVVRGIG1vZGUsIGJlY2F1c2UgdGhpcyB3b3VsZCBtYWtlIGl0IGltcG9zc2libGUgdG8gY2FsY3VsYXRlIHRoZSBsZW5ndGggb2YKK3RoZSBsb29rYmVoaW5kLiBOZWl0aGVyIHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbgorXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgbm90IHRoZSBKSVQgb3B0aW1pemVyIHN1cHBvcnQgXGVDIGluIGEgVVRGIG1vZGUuIFRoZQorZm9ybWVyIGdpdmVzIGEgbWF0Y2gtdGltZSBlcnJvcjsgdGhlIGxhdHRlciBmYWlscyB0byBvcHRpbWl6ZSBhbmQgc28gdGhlIG1hdGNoCitpcyBhbHdheXMgcnVuIHVzaW5nIHRoZSBpbnRlcnByZXRlci4KKy5QCitJbiBnZW5lcmFsLCB0aGUgXGVDIGVzY2FwZSBzZXF1ZW5jZSBpcyBiZXN0IGF2b2lkZWQuIEhvd2V2ZXIsIG9uZSB3YXkgb2YgdXNpbmcKK2l0IHRoYXQgYXZvaWRzIHRoZSBwcm9ibGVtIG9mIG1hbGZvcm1lZCBVVEYgY2hhcmFjdGVycyBpcyB0byB1c2UgYSBsb29rYWhlYWQgdG8KK2NoZWNrIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgY2hhcmFjdGVyLCBhcyBpbiB0aGlzIHBhdHRlcm4sIHdoaWNoIGNvdWxkIGJlIHVzZWQKK3dpdGggYSBVVEYtOCBzdHJpbmcgKGlnbm9yZSB3aGl0ZSBzcGFjZSBhbmQgbGluZSBicmVha3MpOgorLnNwCisgICg/fCAoPz1bXGV4MDAtXGV4N2ZdKShcZUMpIHwKKyAgICAgICg/PVtcZXg4MC1cZXh7N2ZmfV0pKFxlQykoXGVDKSB8CisgICAgICAoPz1bXGV4ezgwMH0tXGV4e2ZmZmZ9XSkoXGVDKShcZUMpKFxlQykgfAorICAgICAgKD89W1xleHsxMDAwMH0tXGV4ezFmZmZmZn1dKShcZUMpKFxlQykoXGVDKShcZUMpKQorLnNwCitJbiB0aGlzIGV4YW1wbGUsIGEgZ3JvdXAgdGhhdCBzdGFydHMgd2l0aCAoP3wgcmVzZXRzIHRoZSBjYXB0dXJpbmcgcGFyZW50aGVzZXMKK251bWJlcnMgaW4gZWFjaCBhbHRlcm5hdGl2ZSAoc2VlCisuXCIgSFRNTCA8YSBocmVmPSIjZHVwc3VicGF0dGVybm51bWJlciI+CisuXCIgPC9hPgorIkR1cGxpY2F0ZSBTdWJwYXR0ZXJuIE51bWJlcnMiCisuXCIKK2JlbG93KS4gVGhlIGFzc2VydGlvbnMgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggYnJhbmNoIGNoZWNrIHRoZSBuZXh0IFVURi04CitjaGFyYWN0ZXIgZm9yIHZhbHVlcyB3aG9zZSBlbmNvZGluZyB1c2VzIDEsIDIsIDMsIG9yIDQgYnl0ZXMsIHJlc3BlY3RpdmVseS4gVGhlCitjaGFyYWN0ZXIncyBpbmRpdmlkdWFsIGJ5dGVzIGFyZSB0aGVuIGNhcHR1cmVkIGJ5IHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgb2YKK1xlQyBncm91cHMuCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJjaGFyYWN0ZXJjbGFzcyI+PC9hPgorLlNIICJTUVVBUkUgQlJBQ0tFVFMgQU5EIENIQVJBQ1RFUiBDTEFTU0VTIgorLnJzCisuc3AKK0FuIG9wZW5pbmcgc3F1YXJlIGJyYWNrZXQgaW50cm9kdWNlcyBhIGNoYXJhY3RlciBjbGFzcywgdGVybWluYXRlZCBieSBhIGNsb3NpbmcKK3NxdWFyZSBicmFja2V0LiBBIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgb24gaXRzIG93biBpcyBub3Qgc3BlY2lhbCBieSBkZWZhdWx0LgorSWYgYSBjbG9zaW5nIHNxdWFyZSBicmFja2V0IGlzIHJlcXVpcmVkIGFzIGEgbWVtYmVyIG9mIHRoZSBjbGFzcywgaXQgc2hvdWxkIGJlCit0aGUgZmlyc3QgZGF0YSBjaGFyYWN0ZXIgaW4gdGhlIGNsYXNzIChhZnRlciBhbiBpbml0aWFsIGNpcmN1bWZsZXgsIGlmIHByZXNlbnQpCitvciBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2guIFRoaXMgbWVhbnMgdGhhdCwgYnkgZGVmYXVsdCwgYW4gZW1wdHkgY2xhc3MgY2Fubm90CitiZSBkZWZpbmVkLiBIb3dldmVyLCBpZiB0aGUgUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1Mgb3B0aW9uIGlzIHNldCwgYSBjbG9zaW5nCitzcXVhcmUgYnJhY2tldCBhdCB0aGUgc3RhcnQgZG9lcyBlbmQgdGhlIChlbXB0eSkgY2xhc3MuCisuUAorQSBjaGFyYWN0ZXIgY2xhc3MgbWF0Y2hlcyBhIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlIHN1YmplY3QuIEEgbWF0Y2hlZAorY2hhcmFjdGVyIG11c3QgYmUgaW4gdGhlIHNldCBvZiBjaGFyYWN0ZXJzIGRlZmluZWQgYnkgdGhlIGNsYXNzLCB1bmxlc3MgdGhlCitmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gaXMgYSBjaXJjdW1mbGV4LCBpbiB3aGljaCBjYXNlIHRoZQorc3ViamVjdCBjaGFyYWN0ZXIgbXVzdCBub3QgYmUgaW4gdGhlIHNldCBkZWZpbmVkIGJ5IHRoZSBjbGFzcy4gSWYgYSBjaXJjdW1mbGV4CitpcyBhY3R1YWxseSByZXF1aXJlZCBhcyBhIG1lbWJlciBvZiB0aGUgY2xhc3MsIGVuc3VyZSBpdCBpcyBub3QgdGhlIGZpcnN0CitjaGFyYWN0ZXIsIG9yIGVzY2FwZSBpdCB3aXRoIGEgYmFja3NsYXNoLgorLlAKK0ZvciBleGFtcGxlLCB0aGUgY2hhcmFjdGVyIGNsYXNzIFthZWlvdV0gbWF0Y2hlcyBhbnkgbG93ZXIgY2FzZSB2b3dlbCwgd2hpbGUKK1teYWVpb3VdIG1hdGNoZXMgYW55IGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIGxvd2VyIGNhc2Ugdm93ZWwuIE5vdGUgdGhhdCBhCitjaXJjdW1mbGV4IGlzIGp1c3QgYSBjb252ZW5pZW50IG5vdGF0aW9uIGZvciBzcGVjaWZ5aW5nIHRoZSBjaGFyYWN0ZXJzIHRoYXQKK2FyZSBpbiB0aGUgY2xhc3MgYnkgZW51bWVyYXRpbmcgdGhvc2UgdGhhdCBhcmUgbm90LiBBIGNsYXNzIHRoYXQgc3RhcnRzIHdpdGggYQorY2lyY3VtZmxleCBpcyBub3QgYW4gYXNzZXJ0aW9uOyBpdCBzdGlsbCBjb25zdW1lcyBhIGNoYXJhY3RlciBmcm9tIHRoZSBzdWJqZWN0CitzdHJpbmcsIGFuZCB0aGVyZWZvcmUgaXQgZmFpbHMgaWYgdGhlIGN1cnJlbnQgcG9pbnRlciBpcyBhdCB0aGUgZW5kIG9mIHRoZQorc3RyaW5nLgorLlAKK1doZW4gY2FzZWxlc3MgbWF0Y2hpbmcgaXMgc2V0LCBhbnkgbGV0dGVycyBpbiBhIGNsYXNzIHJlcHJlc2VudCBib3RoIHRoZWlyCit1cHBlciBjYXNlIGFuZCBsb3dlciBjYXNlIHZlcnNpb25zLCBzbyBmb3IgZXhhbXBsZSwgYSBjYXNlbGVzcyBbYWVpb3VdIG1hdGNoZXMKKyJBIiBhcyB3ZWxsIGFzICJhIiwgYW5kIGEgY2FzZWxlc3MgW15hZWlvdV0gZG9lcyBub3QgbWF0Y2ggIkEiLCB3aGVyZWFzIGEKK2Nhc2VmdWwgdmVyc2lvbiB3b3VsZC4KKy5QCitDaGFyYWN0ZXJzIHRoYXQgbWlnaHQgaW5kaWNhdGUgbGluZSBicmVha3MgYXJlIG5ldmVyIHRyZWF0ZWQgaW4gYW55IHNwZWNpYWwgd2F5Cit3aGVuIG1hdGNoaW5nIGNoYXJhY3RlciBjbGFzc2VzLCB3aGF0ZXZlciBsaW5lLWVuZGluZyBzZXF1ZW5jZSBpcyBpbiB1c2UsIGFuZAord2hhdGV2ZXIgc2V0dGluZyBvZiB0aGUgUENSRTJfRE9UQUxMIGFuZCBQQ1JFMl9NVUxUSUxJTkUgb3B0aW9ucyBpcyB1c2VkLiBBCitjbGFzcyBzdWNoIGFzIFteYV0gYWx3YXlzIG1hdGNoZXMgb25lIG9mIHRoZXNlIGNoYXJhY3RlcnMuCisuUAorVGhlIG1pbnVzIChoeXBoZW4pIGNoYXJhY3RlciBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGEgcmFuZ2Ugb2YgY2hhcmFjdGVycyBpbiBhCitjaGFyYWN0ZXIgY2xhc3MuIEZvciBleGFtcGxlLCBbZC1tXSBtYXRjaGVzIGFueSBsZXR0ZXIgYmV0d2VlbiBkIGFuZCBtLAoraW5jbHVzaXZlLiBJZiBhIG1pbnVzIGNoYXJhY3RlciBpcyByZXF1aXJlZCBpbiBhIGNsYXNzLCBpdCBtdXN0IGJlIGVzY2FwZWQgd2l0aAorYSBiYWNrc2xhc2ggb3IgYXBwZWFyIGluIGEgcG9zaXRpb24gd2hlcmUgaXQgY2Fubm90IGJlIGludGVycHJldGVkIGFzCitpbmRpY2F0aW5nIGEgcmFuZ2UsIHR5cGljYWxseSBhcyB0aGUgZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGNsYXNzLCBvcgoraW1tZWRpYXRlbHkgYWZ0ZXIgYSByYW5nZS4gRm9yIGV4YW1wbGUsIFtiLWQtel0gbWF0Y2hlcyBsZXR0ZXJzIGluIHRoZSByYW5nZSBiCit0byBkLCBhIGh5cGhlbiBjaGFyYWN0ZXIsIG9yIHouCisuUAorSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgdGhlIGxpdGVyYWwgY2hhcmFjdGVyICJdIiBhcyB0aGUgZW5kIGNoYXJhY3RlciBvZiBhCityYW5nZS4gQSBwYXR0ZXJuIHN1Y2ggYXMgW1ctXTQ2XSBpcyBpbnRlcnByZXRlZCBhcyBhIGNsYXNzIG9mIHR3byBjaGFyYWN0ZXJzCisoIlciIGFuZCAiLSIpIGZvbGxvd2VkIGJ5IGEgbGl0ZXJhbCBzdHJpbmcgIjQ2XSIsIHNvIGl0IHdvdWxkIG1hdGNoICJXNDZdIiBvcgorIi00Nl0iLiBIb3dldmVyLCBpZiB0aGUgIl0iIGlzIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaCBpdCBpcyBpbnRlcnByZXRlZCBhcwordGhlIGVuZCBvZiByYW5nZSwgc28gW1ctXGVdNDZdIGlzIGludGVycHJldGVkIGFzIGEgY2xhc3MgY29udGFpbmluZyBhIHJhbmdlCitmb2xsb3dlZCBieSB0d28gb3RoZXIgY2hhcmFjdGVycy4gVGhlIG9jdGFsIG9yIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mCisiXSIgY2FuIGFsc28gYmUgdXNlZCB0byBlbmQgYSByYW5nZS4KKy5QCitBbiBlcnJvciBpcyBnZW5lcmF0ZWQgaWYgYSBQT1NJWCBjaGFyYWN0ZXIgY2xhc3MgKHNlZSBiZWxvdykgb3IgYW4gZXNjYXBlCitzZXF1ZW5jZSBvdGhlciB0aGFuIG9uZSB0aGF0IGRlZmluZXMgYSBzaW5nbGUgY2hhcmFjdGVyIGFwcGVhcnMgYXQgYSBwb2ludAord2hlcmUgYSByYW5nZSBlbmRpbmcgY2hhcmFjdGVyIGlzIGV4cGVjdGVkLiBGb3IgZXhhbXBsZSwgW3otXGV4ZmZdIGlzIHZhbGlkLAorYnV0IFtBLVxlZF0gYW5kIFtBLVs6ZGlnaXQ6XV0gYXJlIG5vdC4KKy5QCitSYW5nZXMgbm9ybWFsbHkgaW5jbHVkZSBhbGwgY29kZSBwb2ludHMgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBjaGFyYWN0ZXJzLAoraW5jbHVzaXZlLiBUaGV5IGNhbiBhbHNvIGJlIHVzZWQgZm9yIGNvZGUgcG9pbnRzIHNwZWNpZmllZCBudW1lcmljYWxseSwgZm9yCitleGFtcGxlIFtcZTAwMC1cZTAzN10uIFJhbmdlcyBjYW4gaW5jbHVkZSBhbnkgY2hhcmFjdGVycyB0aGF0IGFyZSB2YWxpZCBmb3IgdGhlCitjdXJyZW50IG1vZGUuCisuUAorVGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgaW4gRUJDRElDIGVudmlyb25tZW50cyBmb3IgcmFuZ2VzIHdob3NlIGVuZCBwb2ludHMgYXJlCitib3RoIHNwZWNpZmllZCBhcyBsaXRlcmFsIGxldHRlcnMgaW4gdGhlIHNhbWUgY2FzZS4gRm9yIGNvbXBhdGliaWxpdHkgd2l0aAorUGVybCwgRUJDRElDIGNvZGUgcG9pbnRzIHdpdGhpbiB0aGUgcmFuZ2UgdGhhdCBhcmUgbm90IGxldHRlcnMgYXJlIG9taXR0ZWQuIEZvcgorZXhhbXBsZSwgW2gta10gbWF0Y2hlcyBvbmx5IGZvdXIgY2hhcmFjdGVycywgZXZlbiB0aG91Z2ggdGhlIGNvZGVzIGZvciBoIGFuZCBrCithcmUgMHg4OCBhbmQgMHg5MiwgYSByYW5nZSBvZiAxMSBjb2RlIHBvaW50cy4gSG93ZXZlciwgaWYgdGhlIHJhbmdlIGlzCitzcGVjaWZpZWQgbnVtZXJpY2FsbHksIGZvciBleGFtcGxlLCBbXGV4ODgtXGV4OTJdIG9yIFtoLVxleDkyXSwgYWxsIGNvZGUgcG9pbnRzCithcmUgaW5jbHVkZWQuCisuUAorSWYgYSByYW5nZSB0aGF0IGluY2x1ZGVzIGxldHRlcnMgaXMgdXNlZCB3aGVuIGNhc2VsZXNzIG1hdGNoaW5nIGlzIHNldCwgaXQKK21hdGNoZXMgdGhlIGxldHRlcnMgaW4gZWl0aGVyIGNhc2UuIEZvciBleGFtcGxlLCBbVy1jXSBpcyBlcXVpdmFsZW50IHRvCitbXVtcZVxlXl9gd3h5emFiY10sIG1hdGNoZWQgY2FzZWxlc3NseSwgYW5kIGluIGEgbm9uLVVURiBtb2RlLCBpZiBjaGFyYWN0ZXIKK3RhYmxlcyBmb3IgYSBGcmVuY2ggbG9jYWxlIGFyZSBpbiB1c2UsIFtcZXhjOC1cZXhjYl0gbWF0Y2hlcyBhY2NlbnRlZCBFCitjaGFyYWN0ZXJzIGluIGJvdGggY2FzZXMuCisuUAorVGhlIGNoYXJhY3RlciBlc2NhcGUgc2VxdWVuY2VzIFxlZCwgXGVELCBcZWgsIFxlSCwgXGVwLCBcZVAsIFxlcywgXGVTLCBcZXYsCitcZVYsIFxldywgYW5kIFxlVyBtYXkgYXBwZWFyIGluIGEgY2hhcmFjdGVyIGNsYXNzLCBhbmQgYWRkIHRoZSBjaGFyYWN0ZXJzIHRoYXQKK3RoZXkgbWF0Y2ggdG8gdGhlIGNsYXNzLiBGb3IgZXhhbXBsZSwgW1xlZEFCQ0RFRl0gbWF0Y2hlcyBhbnkgaGV4YWRlY2ltYWwKK2RpZ2l0LiBJbiBVVEYgbW9kZXMsIHRoZSBQQ1JFMl9VQ1Agb3B0aW9uIGFmZmVjdHMgdGhlIG1lYW5pbmdzIG9mIFxlZCwgXGVzLCBcZXcKK2FuZCB0aGVpciB1cHBlciBjYXNlIHBhcnRuZXJzLCBqdXN0IGFzIGl0IGRvZXMgd2hlbiB0aGV5IGFwcGVhciBvdXRzaWRlIGEKK2NoYXJhY3RlciBjbGFzcywgYXMgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCisuXCIgSFRNTCA8YSBocmVmPSIjZ2VuZXJpY2NoYXJ0eXBlcyI+CisuXCIgPC9hPgorIkdlbmVyaWMgY2hhcmFjdGVyIHR5cGVzIgorLlwiCithYm92ZS4gVGhlIGVzY2FwZSBzZXF1ZW5jZSBcZWIgaGFzIGEgZGlmZmVyZW50IG1lYW5pbmcgaW5zaWRlIGEgY2hhcmFjdGVyCitjbGFzczsgaXQgbWF0Y2hlcyB0aGUgYmFja3NwYWNlIGNoYXJhY3Rlci4gVGhlIHNlcXVlbmNlcyBcZUIsIFxlTiwgXGVSLCBhbmQgXGVYCithcmUgbm90IHNwZWNpYWwgaW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLiBMaWtlIGFueSBvdGhlciB1bnJlY29nbml6ZWQgZXNjYXBlCitzZXF1ZW5jZXMsIHRoZXkgY2F1c2UgYW4gZXJyb3IuCisuUAorQSBjaXJjdW1mbGV4IGNhbiBjb252ZW5pZW50bHkgYmUgdXNlZCB3aXRoIHRoZSB1cHBlciBjYXNlIGNoYXJhY3RlciB0eXBlcyB0bworc3BlY2lmeSBhIG1vcmUgcmVzdHJpY3RlZCBzZXQgb2YgY2hhcmFjdGVycyB0aGFuIHRoZSBtYXRjaGluZyBsb3dlciBjYXNlIHR5cGUuCitGb3IgZXhhbXBsZSwgdGhlIGNsYXNzIFteXGVXX10gbWF0Y2hlcyBhbnkgbGV0dGVyIG9yIGRpZ2l0LCBidXQgbm90IHVuZGVyc2NvcmUsCit3aGVyZWFzIFtcZXddIGluY2x1ZGVzIHVuZGVyc2NvcmUuIEEgcG9zaXRpdmUgY2hhcmFjdGVyIGNsYXNzIHNob3VsZCBiZSByZWFkIGFzCisic29tZXRoaW5nIE9SIHNvbWV0aGluZyBPUiAuLi4iIGFuZCBhIG5lZ2F0aXZlIGNsYXNzIGFzICJOT1Qgc29tZXRoaW5nIEFORCBOT1QKK3NvbWV0aGluZyBBTkQgTk9UIC4uLiIuCisuUAorVGhlIG9ubHkgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgcmVjb2duaXplZCBpbiBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgYmFja3NsYXNoLAoraHlwaGVuIChvbmx5IHdoZXJlIGl0IGNhbiBiZSBpbnRlcnByZXRlZCBhcyBzcGVjaWZ5aW5nIGEgcmFuZ2UpLCBjaXJjdW1mbGV4Cisob25seSBhdCB0aGUgc3RhcnQpLCBvcGVuaW5nIHNxdWFyZSBicmFja2V0IChvbmx5IHdoZW4gaXQgY2FuIGJlIGludGVycHJldGVkIGFzCitpbnRyb2R1Y2luZyBhIFBPU0lYIGNsYXNzIG5hbWUsIG9yIGZvciBhIHNwZWNpYWwgY29tcGF0aWJpbGl0eSBmZWF0dXJlIC0gc2VlCit0aGUgbmV4dCB0d28gc2VjdGlvbnMpLCBhbmQgdGhlIHRlcm1pbmF0aW5nIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQuIEhvd2V2ZXIsCitlc2NhcGluZyBvdGhlciBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgZG9lcyBubyBoYXJtLgorLgorLgorLlNIICJQT1NJWCBDSEFSQUNURVIgQ0xBU1NFUyIKKy5ycworLnNwCitQZXJsIHN1cHBvcnRzIHRoZSBQT1NJWCBub3RhdGlvbiBmb3IgY2hhcmFjdGVyIGNsYXNzZXMuIFRoaXMgdXNlcyBuYW1lcworZW5jbG9zZWQgYnkgWzogYW5kIDpdIHdpdGhpbiB0aGUgZW5jbG9zaW5nIHNxdWFyZSBicmFja2V0cy4gUENSRTIgYWxzbyBzdXBwb3J0cwordGhpcyBub3RhdGlvbi4gRm9yIGV4YW1wbGUsCisuc3AKKyAgWzAxWzphbHBoYTpdJV0KKy5zcAorbWF0Y2hlcyAiMCIsICIxIiwgYW55IGFscGhhYmV0aWMgY2hhcmFjdGVyLCBvciAiJSIuIFRoZSBzdXBwb3J0ZWQgY2xhc3MgbmFtZXMKK2FyZToKKy5zcAorICBhbG51bSAgICBsZXR0ZXJzIGFuZCBkaWdpdHMKKyAgYWxwaGEgICAgbGV0dGVycworICBhc2NpaSAgICBjaGFyYWN0ZXIgY29kZXMgMCAtIDEyNworICBibGFuayAgICBzcGFjZSBvciB0YWIgb25seQorICBjbnRybCAgICBjb250cm9sIGNoYXJhY3RlcnMKKyAgZGlnaXQgICAgZGVjaW1hbCBkaWdpdHMgKHNhbWUgYXMgXGVkKQorICBncmFwaCAgICBwcmludGluZyBjaGFyYWN0ZXJzLCBleGNsdWRpbmcgc3BhY2UKKyAgbG93ZXIgICAgbG93ZXIgY2FzZSBsZXR0ZXJzCisgIHByaW50ICAgIHByaW50aW5nIGNoYXJhY3RlcnMsIGluY2x1ZGluZyBzcGFjZQorICBwdW5jdCAgICBwcmludGluZyBjaGFyYWN0ZXJzLCBleGNsdWRpbmcgbGV0dGVycyBhbmQgZGlnaXRzIGFuZCBzcGFjZQorICBzcGFjZSAgICB3aGl0ZSBzcGFjZSAodGhlIHNhbWUgYXMgXGVzIGZyb20gUENSRTIgOC4zNCkKKyAgdXBwZXIgICAgdXBwZXIgY2FzZSBsZXR0ZXJzCisgIHdvcmQgICAgICJ3b3JkIiBjaGFyYWN0ZXJzIChzYW1lIGFzIFxldykKKyAgeGRpZ2l0ICAgaGV4YWRlY2ltYWwgZGlnaXRzCisuc3AKK1RoZSBkZWZhdWx0ICJzcGFjZSIgY2hhcmFjdGVycyBhcmUgSFQgKDkpLCBMRiAoMTApLCBWVCAoMTEpLCBGRiAoMTIpLCBDUiAoMTMpLAorYW5kIHNwYWNlICgzMikuIElmIGxvY2FsZS1zcGVjaWZpYyBtYXRjaGluZyBpcyB0YWtpbmcgcGxhY2UsIHRoZSBsaXN0IG9mIHNwYWNlCitjaGFyYWN0ZXJzIG1heSBiZSBkaWZmZXJlbnQ7IHRoZXJlIG1heSBiZSBmZXdlciBvciBtb3JlIG9mIHRoZW0uICJTcGFjZSIgYW5kCitcZXMgbWF0Y2ggdGhlIHNhbWUgc2V0IG9mIGNoYXJhY3RlcnMuCisuUAorVGhlIG5hbWUgIndvcmQiIGlzIGEgUGVybCBleHRlbnNpb24sIGFuZCAiYmxhbmsiIGlzIGEgR05VIGV4dGVuc2lvbiBmcm9tIFBlcmwKKzUuOC4gQW5vdGhlciBQZXJsIGV4dGVuc2lvbiBpcyBuZWdhdGlvbiwgd2hpY2ggaXMgaW5kaWNhdGVkIGJ5IGEgXiBjaGFyYWN0ZXIKK2FmdGVyIHRoZSBjb2xvbi4gRm9yIGV4YW1wbGUsCisuc3AKKyAgWzEyWzpeZGlnaXQ6XV0KKy5zcAorbWF0Y2hlcyAiMSIsICIyIiwgb3IgYW55IG5vbi1kaWdpdC4gUENSRTIgKGFuZCBQZXJsKSBhbHNvIHJlY29nbml6ZSB0aGUgUE9TSVgKK3N5bnRheCBbLmNoLl0gYW5kIFs9Y2g9XSB3aGVyZSAiY2giIGlzIGEgImNvbGxhdGluZyBlbGVtZW50IiwgYnV0IHRoZXNlIGFyZSBub3QKK3N1cHBvcnRlZCwgYW5kIGFuIGVycm9yIGlzIGdpdmVuIGlmIHRoZXkgYXJlIGVuY291bnRlcmVkLgorLlAKK0J5IGRlZmF1bHQsIGNoYXJhY3RlcnMgd2l0aCB2YWx1ZXMgZ3JlYXRlciB0aGFuIDEyNyBkbyBub3QgbWF0Y2ggYW55IG9mIHRoZQorUE9TSVggY2hhcmFjdGVyIGNsYXNzZXMsIGFsdGhvdWdoIHRoaXMgbWF5IGJlIGRpZmZlcmVudCBmb3IgY2hhcmFjdGVycyBpbiB0aGUKK3JhbmdlIDEyOC0yNTUgd2hlbiBsb2NhbGUtc3BlY2lmaWMgbWF0Y2hpbmcgaXMgaGFwcGVuaW5nLiBIb3dldmVyLCBpZiB0aGUKK1BDUkUyX1VDUCBvcHRpb24gaXMgcGFzc2VkIHRvIFxmQnBjcmUyX2NvbXBpbGUoKVxmUCwgc29tZSBvZiB0aGUgY2xhc3NlcyBhcmUKK2NoYW5nZWQgc28gdGhhdCBVbmljb2RlIGNoYXJhY3RlciBwcm9wZXJ0aWVzIGFyZSB1c2VkLiBUaGlzIGlzIGFjaGlldmVkIGJ5CityZXBsYWNpbmcgY2VydGFpbiBQT1NJWCBjbGFzc2VzIHdpdGggb3RoZXIgc2VxdWVuY2VzLCBhcyBmb2xsb3dzOgorLnNwCisgIFs6YWxudW06XSAgYmVjb21lcyAgXGVwe1hhbn0KKyAgWzphbHBoYTpdICBiZWNvbWVzICBcZXB7TH0KKyAgWzpibGFuazpdICBiZWNvbWVzICBcZWgKKyAgWzpjbnRybDpdICBiZWNvbWVzICBcZXB7Q2N9CisgIFs6ZGlnaXQ6XSAgYmVjb21lcyAgXGVwe05kfQorICBbOmxvd2VyOl0gIGJlY29tZXMgIFxlcHtMbH0KKyAgWzpzcGFjZTpdICBiZWNvbWVzICBcZXB7WHBzfQorICBbOnVwcGVyOl0gIGJlY29tZXMgIFxlcHtMdX0KKyAgWzp3b3JkOl0gICBiZWNvbWVzICBcZXB7WHdkfQorLnNwCitOZWdhdGVkIHZlcnNpb25zLCBzdWNoIGFzIFs6XmFscGhhOl0gdXNlIFxlUCBpbnN0ZWFkIG9mIFxlcC4gVGhyZWUgb3RoZXIgUE9TSVgKK2NsYXNzZXMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5IGluIFVDUCBtb2RlOgorLlRQIDEwCitbOmdyYXBoOl0KK1RoaXMgbWF0Y2hlcyBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBnbHlwaHMgdGhhdCBtYXJrIHRoZSBwYWdlIHdoZW4gcHJpbnRlZC4gSW4KK1VuaWNvZGUgcHJvcGVydHkgdGVybXMsIGl0IG1hdGNoZXMgYWxsIGNoYXJhY3RlcnMgd2l0aCB0aGUgTCwgTSwgTiwgUCwgUywgb3IgQ2YKK3Byb3BlcnRpZXMsIGV4Y2VwdCBmb3I6Cisuc3AKKyAgVSswNjFDICAgICAgICAgICBBcmFiaWMgTGV0dGVyIE1hcmsKKyAgVSsxODBFICAgICAgICAgICBNb25nb2xpYW4gVm93ZWwgU2VwYXJhdG9yCisgIFUrMjA2NiAtIFUrMjA2OSAgVmFyaW91cyAiaXNvbGF0ZSJzCisuc3AKKy5UUCAxMAorWzpwcmludDpdCitUaGlzIG1hdGNoZXMgdGhlIHNhbWUgY2hhcmFjdGVycyBhcyBbOmdyYXBoOl0gcGx1cyBzcGFjZSBjaGFyYWN0ZXJzIHRoYXQgYXJlCitub3QgY29udHJvbHMsIHRoYXQgaXMsIGNoYXJhY3RlcnMgd2l0aCB0aGUgWnMgcHJvcGVydHkuCisuVFAgMTAKK1s6cHVuY3Q6XQorVGhpcyBtYXRjaGVzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSB0aGUgVW5pY29kZSBQIChwdW5jdHVhdGlvbikgcHJvcGVydHksCitwbHVzIHRob3NlIGNoYXJhY3RlcnMgd2l0aCBjb2RlIHBvaW50cyBsZXNzIHRoYW4gMjU2IHRoYXQgaGF2ZSB0aGUgUyAoU3ltYm9sKQorcHJvcGVydHkuCisuUAorVGhlIG90aGVyIFBPU0lYIGNsYXNzZXMgYXJlIHVuY2hhbmdlZCwgYW5kIG1hdGNoIG9ubHkgY2hhcmFjdGVycyB3aXRoIGNvZGUKK3BvaW50cyBsZXNzIHRoYW4gMjU2LgorLgorLgorLlNIICJDT01QQVRJQklMSVRZIEZFQVRVUkUgRk9SIFdPUkQgQk9VTkRBUklFUyIKKy5ycworLnNwCitJbiB0aGUgUE9TSVguMiBjb21wbGlhbnQgbGlicmFyeSB0aGF0IHdhcyBpbmNsdWRlZCBpbiA0LjRCU0QgVW5peCwgdGhlIHVnbHkKK3N5bnRheCBbWzo8Ol1dIGFuZCBbWzo+Ol1dIGlzIHVzZWQgZm9yIG1hdGNoaW5nICJzdGFydCBvZiB3b3JkIiBhbmQgImVuZCBvZgord29yZCIuIFBDUkUyIHRyZWF0cyB0aGVzZSBpdGVtcyBhcyBmb2xsb3dzOgorLnNwCisgIFtbOjw6XV0gIGlzIGNvbnZlcnRlZCB0byAgXGViKD89XGV3KQorICBbWzo+Ol1dICBpcyBjb252ZXJ0ZWQgdG8gIFxlYig/PD1cZXcpCisuc3AKK09ubHkgdGhlc2UgZXhhY3QgY2hhcmFjdGVyIHNlcXVlbmNlcyBhcmUgcmVjb2duaXplZC4gQSBzZXF1ZW5jZSBzdWNoIGFzCitbYVs6PDpdYl0gcHJvdm9rZXMgZXJyb3IgZm9yIGFuIHVucmVjb2duaXplZCBQT1NJWCBjbGFzcyBuYW1lLiBUaGlzIHN1cHBvcnQgaXMKK25vdCBjb21wYXRpYmxlIHdpdGggUGVybC4gSXQgaXMgcHJvdmlkZWQgdG8gaGVscCBtaWdyYXRpb25zIGZyb20gb3RoZXIKK2Vudmlyb25tZW50cywgYW5kIGlzIGJlc3Qgbm90IHVzZWQgaW4gYW55IG5ldyBwYXR0ZXJucy4gTm90ZSB0aGF0IFxlYiBtYXRjaGVzCithdCB0aGUgc3RhcnQgYW5kIHRoZSBlbmQgb2YgYSB3b3JkIChzZWUKKy5cIiBIVE1MIDxhIGhyZWY9IiNzbWFsbGFzc2VydGlvbnMiPgorLlwiIDwvYT4KKyJTaW1wbGUgYXNzZXJ0aW9ucyIKKy5cIgorYWJvdmUpLCBhbmQgaW4gYSBQZXJsLXN0eWxlIHBhdHRlcm4gdGhlIHByZWNlZGluZyBvciBmb2xsb3dpbmcgY2hhcmFjdGVyCitub3JtYWxseSBzaG93cyB3aGljaCBpcyB3YW50ZWQsIHdpdGhvdXQgdGhlIG5lZWQgZm9yIHRoZSBhc3NlcnRpb25zIHRoYXQgYXJlCit1c2VkIGFib3ZlIGluIG9yZGVyIHRvIGdpdmUgZXhhY3RseSB0aGUgUE9TSVggYmVoYXZpb3VyLgorLgorLgorLlNIICJWRVJUSUNBTCBCQVIiCisucnMKKy5zcAorVmVydGljYWwgYmFyIGNoYXJhY3RlcnMgYXJlIHVzZWQgdG8gc2VwYXJhdGUgYWx0ZXJuYXRpdmUgcGF0dGVybnMuIEZvciBleGFtcGxlLAordGhlIHBhdHRlcm4KKy5zcAorICBnaWxiZXJ0fHN1bGxpdmFuCisuc3AKK21hdGNoZXMgZWl0aGVyICJnaWxiZXJ0IiBvciAic3VsbGl2YW4iLiBBbnkgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBtYXkgYXBwZWFyLAorYW5kIGFuIGVtcHR5IGFsdGVybmF0aXZlIGlzIHBlcm1pdHRlZCAobWF0Y2hpbmcgdGhlIGVtcHR5IHN0cmluZykuIFRoZSBtYXRjaGluZworcHJvY2VzcyB0cmllcyBlYWNoIGFsdGVybmF0aXZlIGluIHR1cm4sIGZyb20gbGVmdCB0byByaWdodCwgYW5kIHRoZSBmaXJzdCBvbmUKK3RoYXQgc3VjY2VlZHMgaXMgdXNlZC4gSWYgdGhlIGFsdGVybmF0aXZlcyBhcmUgd2l0aGluIGEgc3VicGF0dGVybgorLlwiIEhUTUwgPGEgaHJlZj0iI3N1YnBhdHRlcm4iPgorLlwiIDwvYT4KKyhkZWZpbmVkIGJlbG93KSwKKy5cIgorInN1Y2NlZWRzIiBtZWFucyBtYXRjaGluZyB0aGUgcmVzdCBvZiB0aGUgbWFpbiBwYXR0ZXJuIGFzIHdlbGwgYXMgdGhlCithbHRlcm5hdGl2ZSBpbiB0aGUgc3VicGF0dGVybi4KKy4KKy4KKy5TSCAiSU5URVJOQUwgT1BUSU9OIFNFVFRJTkciCisucnMKKy5zcAorVGhlIHNldHRpbmdzIG9mIHRoZSBQQ1JFMl9DQVNFTEVTUywgUENSRTJfTVVMVElMSU5FLCBQQ1JFMl9ET1RBTEwsIGFuZAorUENSRTJfRVhURU5ERUQgb3B0aW9ucyAod2hpY2ggYXJlIFBlcmwtY29tcGF0aWJsZSkgY2FuIGJlIGNoYW5nZWQgZnJvbSB3aXRoaW4KK3RoZSBwYXR0ZXJuIGJ5IGEgc2VxdWVuY2Ugb2YgUGVybCBvcHRpb24gbGV0dGVycyBlbmNsb3NlZCBiZXR3ZWVuICIoPyIgYW5kICIpIi4KK1RoZSBvcHRpb24gbGV0dGVycyBhcmUKKy5zcAorICBpICBmb3IgUENSRTJfQ0FTRUxFU1MKKyAgbSAgZm9yIFBDUkUyX01VTFRJTElORQorICBzICBmb3IgUENSRTJfRE9UQUxMCisgIHggIGZvciBQQ1JFMl9FWFRFTkRFRAorLnNwCitGb3IgZXhhbXBsZSwgKD9pbSkgc2V0cyBjYXNlbGVzcywgbXVsdGlsaW5lIG1hdGNoaW5nLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvCit1bnNldCB0aGVzZSBvcHRpb25zIGJ5IHByZWNlZGluZyB0aGUgbGV0dGVyIHdpdGggYSBoeXBoZW4sIGFuZCBhIGNvbWJpbmVkCitzZXR0aW5nIGFuZCB1bnNldHRpbmcgc3VjaCBhcyAoP2ltLXN4KSwgd2hpY2ggc2V0cyBQQ1JFMl9DQVNFTEVTUyBhbmQKK1BDUkUyX01VTFRJTElORSB3aGlsZSB1bnNldHRpbmcgUENSRTJfRE9UQUxMIGFuZCBQQ1JFMl9FWFRFTkRFRCwgaXMgYWxzbworcGVybWl0dGVkLiBJZiBhIGxldHRlciBhcHBlYXJzIGJvdGggYmVmb3JlIGFuZCBhZnRlciB0aGUgaHlwaGVuLCB0aGUgb3B0aW9uIGlzCit1bnNldC4gQW4gZW1wdHkgb3B0aW9ucyBzZXR0aW5nICIoPykiIGlzIGFsbG93ZWQuIE5lZWRsZXNzIHRvIHNheSwgaXQgaGFzIG5vCitlZmZlY3QuCisuUAorVGhlIFBDUkUyLXNwZWNpZmljIG9wdGlvbnMgUENSRTJfRFVQTkFNRVMgYW5kIFBDUkUyX1VOR1JFRURZIGNhbiBiZSBjaGFuZ2VkIGluCit0aGUgc2FtZSB3YXkgYXMgdGhlIFBlcmwtY29tcGF0aWJsZSBvcHRpb25zIGJ5IHVzaW5nIHRoZSBjaGFyYWN0ZXJzIEogYW5kIFUKK3Jlc3BlY3RpdmVseS4KKy5QCitXaGVuIG9uZSBvZiB0aGVzZSBvcHRpb24gY2hhbmdlcyBvY2N1cnMgYXQgdG9wIGxldmVsICh0aGF0IGlzLCBub3QgaW5zaWRlCitzdWJwYXR0ZXJuIHBhcmVudGhlc2VzKSwgdGhlIGNoYW5nZSBhcHBsaWVzIHRvIHRoZSByZW1haW5kZXIgb2YgdGhlIHBhdHRlcm4KK3RoYXQgZm9sbG93cy4gSWYgdGhlIGNoYW5nZSBpcyBwbGFjZWQgcmlnaHQgYXQgdGhlIHN0YXJ0IG9mIGEgcGF0dGVybiwgUENSRTIKK2V4dHJhY3RzIGl0IGludG8gdGhlIGdsb2JhbCBvcHRpb25zIChhbmQgaXQgd2lsbCB0aGVyZWZvcmUgc2hvdyB1cCBpbiBkYXRhCitleHRyYWN0ZWQgYnkgdGhlIFxmQnBjcmUyX3BhdHRlcm5faW5mbygpXGZQIGZ1bmN0aW9uKS4KKy5QCitBbiBvcHRpb24gY2hhbmdlIHdpdGhpbiBhIHN1YnBhdHRlcm4gKHNlZSBiZWxvdyBmb3IgYSBkZXNjcmlwdGlvbiBvZgorc3VicGF0dGVybnMpIGFmZmVjdHMgb25seSB0aGF0IHBhcnQgb2YgdGhlIHN1YnBhdHRlcm4gdGhhdCBmb2xsb3dzIGl0LCBzbworLnNwCisgIChhKD9pKWIpYworLnNwCittYXRjaGVzIGFiYyBhbmQgYUJjIGFuZCBubyBvdGhlciBzdHJpbmdzIChhc3N1bWluZyBQQ1JFMl9DQVNFTEVTUyBpcyBub3QgdXNlZCkuCitCeSB0aGlzIG1lYW5zLCBvcHRpb25zIGNhbiBiZSBtYWRlIHRvIGhhdmUgZGlmZmVyZW50IHNldHRpbmdzIGluIGRpZmZlcmVudAorcGFydHMgb2YgdGhlIHBhdHRlcm4uIEFueSBjaGFuZ2VzIG1hZGUgaW4gb25lIGFsdGVybmF0aXZlIGRvIGNhcnJ5IG9uCitpbnRvIHN1YnNlcXVlbnQgYnJhbmNoZXMgd2l0aGluIHRoZSBzYW1lIHN1YnBhdHRlcm4uIEZvciBleGFtcGxlLAorLnNwCisgIChhKD9pKWJ8YykKKy5zcAorbWF0Y2hlcyAiYWIiLCAiYUIiLCAiYyIsIGFuZCAiQyIsIGV2ZW4gdGhvdWdoIHdoZW4gbWF0Y2hpbmcgIkMiIHRoZSBmaXJzdAorYnJhbmNoIGlzIGFiYW5kb25lZCBiZWZvcmUgdGhlIG9wdGlvbiBzZXR0aW5nLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGVmZmVjdHMgb2YKK29wdGlvbiBzZXR0aW5ncyBoYXBwZW4gYXQgY29tcGlsZSB0aW1lLiBUaGVyZSB3b3VsZCBiZSBzb21lIHZlcnkgd2VpcmQKK2JlaGF2aW91ciBvdGhlcndpc2UuCisuUAorQXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCwgaWYgYW55IG9wdGlvbiBzZXR0aW5ncyBhcmUgcmVxdWlyZWQgYXQgdGhlIHN0YXJ0IG9mCithIG5vbi1jYXB0dXJpbmcgc3VicGF0dGVybiAoc2VlIHRoZSBuZXh0IHNlY3Rpb24pLCB0aGUgb3B0aW9uIGxldHRlcnMgbWF5CithcHBlYXIgYmV0d2VlbiB0aGUgIj8iIGFuZCB0aGUgIjoiLiBUaHVzIHRoZSB0d28gcGF0dGVybnMKKy5zcAorICAoP2k6c2F0dXJkYXl8c3VuZGF5KQorICAoPzooP2kpc2F0dXJkYXl8c3VuZGF5KQorLnNwCittYXRjaCBleGFjdGx5IHRoZSBzYW1lIHNldCBvZiBzdHJpbmdzLgorLlAKK1xmQk5vdGU6XGZQIFRoZXJlIGFyZSBvdGhlciBQQ1JFMi1zcGVjaWZpYyBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCBieSB0aGUKK2FwcGxpY2F0aW9uIHdoZW4gdGhlIGNvbXBpbGluZyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSBwYXR0ZXJuIGNhbiBjb250YWluCitzcGVjaWFsIGxlYWRpbmcgc2VxdWVuY2VzIHN1Y2ggYXMgKCpDUkxGKSB0byBvdmVycmlkZSB3aGF0IHRoZSBhcHBsaWNhdGlvbiBoYXMKK3NldCBvciB3aGF0IGhhcyBiZWVuIGRlZmF1bHRlZC4gRGV0YWlscyBhcmUgZ2l2ZW4gaW4gdGhlIHNlY3Rpb24gZW50aXRsZWQKKy5cIiBIVE1MIDxhIGhyZWY9IiNuZXdsaW5lc2VxIj4KKy5cIiA8L2E+CisiTmV3bGluZSBzZXF1ZW5jZXMiCisuXCIKK2Fib3ZlLiBUaGVyZSBhcmUgYWxzbyB0aGUgKCpVVEYpIGFuZCAoKlVDUCkgbGVhZGluZyBzZXF1ZW5jZXMgdGhhdCBjYW4gYmUgdXNlZAordG8gc2V0IFVURiBhbmQgVW5pY29kZSBwcm9wZXJ0eSBtb2RlczsgdGhleSBhcmUgZXF1aXZhbGVudCB0byBzZXR0aW5nIHRoZQorUENSRTJfVVRGIGFuZCBQQ1JFMl9VQ1Agb3B0aW9ucywgcmVzcGVjdGl2ZWx5LiBIb3dldmVyLCB0aGUgYXBwbGljYXRpb24gY2FuIHNldAordGhlIFBDUkUyX05FVkVSX1VURiBhbmQgUENSRTJfTkVWRVJfVUNQIG9wdGlvbnMsIHdoaWNoIGxvY2sgb3V0IHRoZSB1c2Ugb2YgdGhlCisoKlVURikgYW5kICgqVUNQKSBzZXF1ZW5jZXMuCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJzdWJwYXR0ZXJuIj48L2E+CisuU0ggU1VCUEFUVEVSTlMKKy5ycworLnNwCitTdWJwYXR0ZXJucyBhcmUgZGVsaW1pdGVkIGJ5IHBhcmVudGhlc2VzIChyb3VuZCBicmFja2V0cyksIHdoaWNoIGNhbiBiZSBuZXN0ZWQuCitUdXJuaW5nIHBhcnQgb2YgYSBwYXR0ZXJuIGludG8gYSBzdWJwYXR0ZXJuIGRvZXMgdHdvIHRoaW5nczoKKy5zcAorMS4gSXQgbG9jYWxpemVzIGEgc2V0IG9mIGFsdGVybmF0aXZlcy4gRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuCisuc3AKKyAgY2F0KGFyYWN0fGVycGlsbGFyfCkKKy5zcAorbWF0Y2hlcyAiY2F0YXJhY3QiLCAiY2F0ZXJwaWxsYXIiLCBvciAiY2F0Ii4gV2l0aG91dCB0aGUgcGFyZW50aGVzZXMsIGl0IHdvdWxkCittYXRjaCAiY2F0YXJhY3QiLCAiZXJwaWxsYXIiIG9yIGFuIGVtcHR5IHN0cmluZy4KKy5zcAorMi4gSXQgc2V0cyB1cCB0aGUgc3VicGF0dGVybiBhcyBhIGNhcHR1cmluZyBzdWJwYXR0ZXJuLiBUaGlzIG1lYW5zIHRoYXQsIHdoZW4KK3RoZSB3aG9sZSBwYXR0ZXJuIG1hdGNoZXMsIHRoZSBwb3J0aW9uIG9mIHRoZSBzdWJqZWN0IHN0cmluZyB0aGF0IG1hdGNoZWQgdGhlCitzdWJwYXR0ZXJuIGlzIHBhc3NlZCBiYWNrIHRvIHRoZSBjYWxsZXIsIHNlcGFyYXRlbHkgZnJvbSB0aGUgcG9ydGlvbiB0aGF0CittYXRjaGVkIHRoZSB3aG9sZSBwYXR0ZXJuLiAoVGhpcyBhcHBsaWVzIG9ubHkgdG8gdGhlIHRyYWRpdGlvbmFsIG1hdGNoaW5nCitmdW5jdGlvbjsgdGhlIERGQSBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNhcHR1cmluZy4pCisuUAorT3BlbmluZyBwYXJlbnRoZXNlcyBhcmUgY291bnRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgKHN0YXJ0aW5nIGZyb20gMSkgdG8gb2J0YWluCitudW1iZXJzIGZvciB0aGUgY2FwdHVyaW5nIHN1YnBhdHRlcm5zLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHN0cmluZyAidGhlIHJlZAora2luZyIgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBwYXR0ZXJuCisuc3AKKyAgdGhlICgocmVkfHdoaXRlKSAoa2luZ3xxdWVlbikpCisuc3AKK3RoZSBjYXB0dXJlZCBzdWJzdHJpbmdzIGFyZSAicmVkIGtpbmciLCAicmVkIiwgYW5kICJraW5nIiwgYW5kIGFyZSBudW1iZXJlZCAxLAorMiwgYW5kIDMsIHJlc3BlY3RpdmVseS4KKy5QCitUaGUgZmFjdCB0aGF0IHBsYWluIHBhcmVudGhlc2VzIGZ1bGZpbCB0d28gZnVuY3Rpb25zIGlzIG5vdCBhbHdheXMgaGVscGZ1bC4KK1RoZXJlIGFyZSBvZnRlbiB0aW1lcyB3aGVuIGEgZ3JvdXBpbmcgc3VicGF0dGVybiBpcyByZXF1aXJlZCB3aXRob3V0IGEKK2NhcHR1cmluZyByZXF1aXJlbWVudC4gSWYgYW4gb3BlbmluZyBwYXJlbnRoZXNpcyBpcyBmb2xsb3dlZCBieSBhIHF1ZXN0aW9uIG1hcmsKK2FuZCBhIGNvbG9uLCB0aGUgc3VicGF0dGVybiBkb2VzIG5vdCBkbyBhbnkgY2FwdHVyaW5nLCBhbmQgaXMgbm90IGNvdW50ZWQgd2hlbgorY29tcHV0aW5nIHRoZSBudW1iZXIgb2YgYW55IHN1YnNlcXVlbnQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zLiBGb3IgZXhhbXBsZSwgaWYKK3RoZSBzdHJpbmcgInRoZSB3aGl0ZSBxdWVlbiIgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBwYXR0ZXJuCisuc3AKKyAgdGhlICgoPzpyZWR8d2hpdGUpIChraW5nfHF1ZWVuKSkKKy5zcAordGhlIGNhcHR1cmVkIHN1YnN0cmluZ3MgYXJlICJ3aGl0ZSBxdWVlbiIgYW5kICJxdWVlbiIsIGFuZCBhcmUgbnVtYmVyZWQgMSBhbmQKKzIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjYXB0dXJpbmcgc3VicGF0dGVybnMgaXMgNjU1MzUuCisuUAorQXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCwgaWYgYW55IG9wdGlvbiBzZXR0aW5ncyBhcmUgcmVxdWlyZWQgYXQgdGhlIHN0YXJ0IG9mCithIG5vbi1jYXB0dXJpbmcgc3VicGF0dGVybiwgdGhlIG9wdGlvbiBsZXR0ZXJzIG1heSBhcHBlYXIgYmV0d2VlbiB0aGUgIj8iIGFuZAordGhlICI6Ii4gVGh1cyB0aGUgdHdvIHBhdHRlcm5zCisuc3AKKyAgKD9pOnNhdHVyZGF5fHN1bmRheSkKKyAgKD86KD9pKXNhdHVyZGF5fHN1bmRheSkKKy5zcAorbWF0Y2ggZXhhY3RseSB0aGUgc2FtZSBzZXQgb2Ygc3RyaW5ncy4gQmVjYXVzZSBhbHRlcm5hdGl2ZSBicmFuY2hlcyBhcmUgdHJpZWQKK2Zyb20gbGVmdCB0byByaWdodCwgYW5kIG9wdGlvbnMgYXJlIG5vdCByZXNldCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBzdWJwYXR0ZXJuCitpcyByZWFjaGVkLCBhbiBvcHRpb24gc2V0dGluZyBpbiBvbmUgYnJhbmNoIGRvZXMgYWZmZWN0IHN1YnNlcXVlbnQgYnJhbmNoZXMsIHNvCit0aGUgYWJvdmUgcGF0dGVybnMgbWF0Y2ggIlNVTkRBWSIgYXMgd2VsbCBhcyAiU2F0dXJkYXkiLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0iZHVwc3VicGF0dGVybm51bWJlciI+PC9hPgorLlNIICJEVVBMSUNBVEUgU1VCUEFUVEVSTiBOVU1CRVJTIgorLnJzCisuc3AKK1BlcmwgNS4xMCBpbnRyb2R1Y2VkIGEgZmVhdHVyZSB3aGVyZWJ5IGVhY2ggYWx0ZXJuYXRpdmUgaW4gYSBzdWJwYXR0ZXJuIHVzZXMKK3RoZSBzYW1lIG51bWJlcnMgZm9yIGl0cyBjYXB0dXJpbmcgcGFyZW50aGVzZXMuIFN1Y2ggYSBzdWJwYXR0ZXJuIHN0YXJ0cyB3aXRoCisoP3wgYW5kIGlzIGl0c2VsZiBhIG5vbi1jYXB0dXJpbmcgc3VicGF0dGVybi4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoaXMKK3BhdHRlcm46Cisuc3AKKyAgKD98KFNhdCl1cnwoU3VuKSlkYXkKKy5zcAorQmVjYXVzZSB0aGUgdHdvIGFsdGVybmF0aXZlcyBhcmUgaW5zaWRlIGEgKD98IGdyb3VwLCBib3RoIHNldHMgb2YgY2FwdHVyaW5nCitwYXJlbnRoZXNlcyBhcmUgbnVtYmVyZWQgb25lLiBUaHVzLCB3aGVuIHRoZSBwYXR0ZXJuIG1hdGNoZXMsIHlvdSBjYW4gbG9vaworYXQgY2FwdHVyZWQgc3Vic3RyaW5nIG51bWJlciBvbmUsIHdoaWNoZXZlciBhbHRlcm5hdGl2ZSBtYXRjaGVkLiBUaGlzIGNvbnN0cnVjdAoraXMgdXNlZnVsIHdoZW4geW91IHdhbnQgdG8gY2FwdHVyZSBwYXJ0LCBidXQgbm90IGFsbCwgb2Ygb25lIG9mIGEgbnVtYmVyIG9mCithbHRlcm5hdGl2ZXMuIEluc2lkZSBhICg/fCBncm91cCwgcGFyZW50aGVzZXMgYXJlIG51bWJlcmVkIGFzIHVzdWFsLCBidXQgdGhlCitudW1iZXIgaXMgcmVzZXQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggYnJhbmNoLiBUaGUgbnVtYmVycyBvZiBhbnkgY2FwdHVyaW5nCitwYXJlbnRoZXNlcyB0aGF0IGZvbGxvdyB0aGUgc3VicGF0dGVybiBzdGFydCBhZnRlciB0aGUgaGlnaGVzdCBudW1iZXIgdXNlZCBpbgorYW55IGJyYW5jaC4gVGhlIGZvbGxvd2luZyBleGFtcGxlIGlzIHRha2VuIGZyb20gdGhlIFBlcmwgZG9jdW1lbnRhdGlvbi4gVGhlCitudW1iZXJzIHVuZGVybmVhdGggc2hvdyBpbiB3aGljaCBidWZmZXIgdGhlIGNhcHR1cmVkIGNvbnRlbnQgd2lsbCBiZSBzdG9yZWQuCisuc3AKKyAgIyBiZWZvcmUgIC0tLS0tLS0tLS0tLS0tLWJyYW5jaC1yZXNldC0tLS0tLS0tLS0tIGFmdGVyCisgIC8gKCBhICkgICg/fCB4ICggeSApIHogfCAocCAocSkgcikgfCAodCkgdSAodikgKSAoIHogKSAveAorICAjIDEgICAgICAgICAgICAyICAgICAgICAgMiAgMyAgICAgICAgMiAgICAgMyAgICAgNAorLnNwCitBIGJhY2sgcmVmZXJlbmNlIHRvIGEgbnVtYmVyZWQgc3VicGF0dGVybiB1c2VzIHRoZSBtb3N0IHJlY2VudCB2YWx1ZSB0aGF0IGlzCitzZXQgZm9yIHRoYXQgbnVtYmVyIGJ5IGFueSBzdWJwYXR0ZXJuLiBUaGUgZm9sbG93aW5nIHBhdHRlcm4gbWF0Y2hlcyAiYWJjYWJjIgorb3IgImRlZmRlZiI6Cisuc3AKKyAgLyg/fChhYmMpfChkZWYpKVxlMS8KKy5zcAorSW4gY29udHJhc3QsIGEgc3Vicm91dGluZSBjYWxsIHRvIGEgbnVtYmVyZWQgc3VicGF0dGVybiBhbHdheXMgcmVmZXJzIHRvIHRoZQorZmlyc3Qgb25lIGluIHRoZSBwYXR0ZXJuIHdpdGggdGhlIGdpdmVuIG51bWJlci4gVGhlIGZvbGxvd2luZyBwYXR0ZXJuIG1hdGNoZXMKKyJhYmNhYmMiIG9yICJkZWZhYmMiOgorLnNwCisgIC8oP3woYWJjKXwoZGVmKSkoPzEpLworLnNwCitBIHJlbGF0aXZlIHJlZmVyZW5jZSBzdWNoIGFzICg/LTEpIGlzIG5vIGRpZmZlcmVudDogaXQgaXMganVzdCBhIGNvbnZlbmllbnQgd2F5CitvZiBjb21wdXRpbmcgYW4gYWJzb2x1dGUgZ3JvdXAgbnVtYmVyLgorLlAKK0lmIGEKKy5cIiBIVE1MIDxhIGhyZWY9IiNjb25kaXRpb25zIj4KKy5cIiA8L2E+Citjb25kaXRpb24gdGVzdAorLlwiCitmb3IgYSBzdWJwYXR0ZXJuJ3MgaGF2aW5nIG1hdGNoZWQgcmVmZXJzIHRvIGEgbm9uLXVuaXF1ZSBudW1iZXIsIHRoZSB0ZXN0IGlzCit0cnVlIGlmIGFueSBvZiB0aGUgc3VicGF0dGVybnMgb2YgdGhhdCBudW1iZXIgaGF2ZSBtYXRjaGVkLgorLlAKK0FuIGFsdGVybmF0aXZlIGFwcHJvYWNoIHRvIHVzaW5nIHRoaXMgImJyYW5jaCByZXNldCIgZmVhdHVyZSBpcyB0byB1c2UKK2R1cGxpY2F0ZSBuYW1lZCBzdWJwYXR0ZXJucywgYXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCisuCisuCisuU0ggIk5BTUVEIFNVQlBBVFRFUk5TIgorLnJzCisuc3AKK0lkZW50aWZ5aW5nIGNhcHR1cmluZyBwYXJlbnRoZXNlcyBieSBudW1iZXIgaXMgc2ltcGxlLCBidXQgaXQgY2FuIGJlIHZlcnkgaGFyZAordG8ga2VlcCB0cmFjayBvZiB0aGUgbnVtYmVycyBpbiBjb21wbGljYXRlZCByZWd1bGFyIGV4cHJlc3Npb25zLiBGdXJ0aGVybW9yZSwKK2lmIGFuIGV4cHJlc3Npb24gaXMgbW9kaWZpZWQsIHRoZSBudW1iZXJzIG1heSBjaGFuZ2UuIFRvIGhlbHAgd2l0aCB0aGlzCitkaWZmaWN1bHR5LCBQQ1JFMiBzdXBwb3J0cyB0aGUgbmFtaW5nIG9mIHN1YnBhdHRlcm5zLiBUaGlzIGZlYXR1cmUgd2FzIG5vdAorYWRkZWQgdG8gUGVybCB1bnRpbCByZWxlYXNlIDUuMTAuIFB5dGhvbiBoYWQgdGhlIGZlYXR1cmUgZWFybGllciwgYW5kIFBDUkUxCitpbnRyb2R1Y2VkIGl0IGF0IHJlbGVhc2UgNC4wLCB1c2luZyB0aGUgUHl0aG9uIHN5bnRheC4gUENSRTIgc3VwcG9ydHMgYm90aCB0aGUKK1BlcmwgYW5kIHRoZSBQeXRob24gc3ludGF4LiBQZXJsIGFsbG93cyBpZGVudGljYWxseSBudW1iZXJlZCBzdWJwYXR0ZXJucyB0bworaGF2ZSBkaWZmZXJlbnQgbmFtZXMsIGJ1dCBQQ1JFMiBkb2VzIG5vdC4KKy5QCitJbiBQQ1JFMiwgYSBzdWJwYXR0ZXJuIGNhbiBiZSBuYW1lZCBpbiBvbmUgb2YgdGhyZWUgd2F5czogKD88bmFtZT4uLi4pIG9yCisoPyduYW1lJy4uLikgYXMgaW4gUGVybCwgb3IgKD9QPG5hbWU+Li4uKSBhcyBpbiBQeXRob24uIFJlZmVyZW5jZXMgdG8gY2FwdHVyaW5nCitwYXJlbnRoZXNlcyBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBwYXR0ZXJuLCBzdWNoIGFzCisuXCIgSFRNTCA8YSBocmVmPSIjYmFja3JlZmVyZW5jZXMiPgorLlwiIDwvYT4KK2JhY2sgcmVmZXJlbmNlcywKKy5cIgorLlwiIEhUTUwgPGEgaHJlZj0iI3JlY3Vyc2lvbiI+CisuXCIgPC9hPgorcmVjdXJzaW9uLAorLlwiCithbmQKKy5cIiBIVE1MIDxhIGhyZWY9IiNjb25kaXRpb25zIj4KKy5cIiA8L2E+Citjb25kaXRpb25zLAorLlwiCitjYW4gYmUgbWFkZSBieSBuYW1lIGFzIHdlbGwgYXMgYnkgbnVtYmVyLgorLlAKK05hbWVzIGNvbnNpc3Qgb2YgdXAgdG8gMzIgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgYW5kIHVuZGVyc2NvcmVzLCBidXQgbXVzdAorc3RhcnQgd2l0aCBhIG5vbi1kaWdpdC4gTmFtZWQgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGFyZSBzdGlsbCBhbGxvY2F0ZWQgbnVtYmVycworYXMgd2VsbCBhcyBuYW1lcywgZXhhY3RseSBhcyBpZiB0aGUgbmFtZXMgd2VyZSBub3QgcHJlc2VudC4gVGhlIFBDUkUyIEFQSQorcHJvdmlkZXMgZnVuY3Rpb24gY2FsbHMgZm9yIGV4dHJhY3RpbmcgdGhlIG5hbWUtdG8tbnVtYmVyIHRyYW5zbGF0aW9uIHRhYmxlCitmcm9tIGEgY29tcGlsZWQgcGF0dGVybi4gVGhlcmUgYXJlIGFsc28gY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBleHRyYWN0aW5nIGEKK2NhcHR1cmVkIHN1YnN0cmluZyBieSBuYW1lLgorLlAKK0J5IGRlZmF1bHQsIGEgbmFtZSBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gYSBwYXR0ZXJuLCBidXQgaXQgaXMgcG9zc2libGUgdG8gcmVsYXgKK3RoaXMgY29uc3RyYWludCBieSBzZXR0aW5nIHRoZSBQQ1JFMl9EVVBOQU1FUyBvcHRpb24gYXQgY29tcGlsZSB0aW1lLgorKER1cGxpY2F0ZSBuYW1lcyBhcmUgYWxzbyBhbHdheXMgcGVybWl0dGVkIGZvciBzdWJwYXR0ZXJucyB3aXRoIHRoZSBzYW1lCitudW1iZXIsIHNldCB1cCBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uKSBEdXBsaWNhdGUgbmFtZXMgY2FuIGJlCit1c2VmdWwgZm9yIHBhdHRlcm5zIHdoZXJlIG9ubHkgb25lIGluc3RhbmNlIG9mIHRoZSBuYW1lZCBwYXJlbnRoZXNlcyBjYW4gbWF0Y2guCitTdXBwb3NlIHlvdSB3YW50IHRvIG1hdGNoIHRoZSBuYW1lIG9mIGEgd2Vla2RheSwgZWl0aGVyIGFzIGEgMy1sZXR0ZXIKK2FiYnJldmlhdGlvbiBvciBhcyB0aGUgZnVsbCBuYW1lLCBhbmQgaW4gYm90aCBjYXNlcyB5b3Ugd2FudCB0byBleHRyYWN0IHRoZQorYWJicmV2aWF0aW9uLiBUaGlzIHBhdHRlcm4gKGlnbm9yaW5nIHRoZSBsaW5lIGJyZWFrcykgZG9lcyB0aGUgam9iOgorLnNwCisgICg/PEROPk1vbnxGcml8U3VuKSg/OmRheSk/fAorICAoPzxETj5UdWUpKD86c2RheSk/fAorICAoPzxETj5XZWQpKD86bmVzZGF5KT98CisgICg/PEROPlRodSkoPzpyc2RheSk/fAorICAoPzxETj5TYXQpKD86dXJkYXkpPworLnNwCitUaGVyZSBhcmUgZml2ZSBjYXB0dXJpbmcgc3Vic3RyaW5ncywgYnV0IG9ubHkgb25lIGlzIGV2ZXIgc2V0IGFmdGVyIGEgbWF0Y2guCisoQW4gYWx0ZXJuYXRpdmUgd2F5IG9mIHNvbHZpbmcgdGhpcyBwcm9ibGVtIGlzIHRvIHVzZSBhICJicmFuY2ggcmVzZXQiCitzdWJwYXR0ZXJuLCBhcyBkZXNjcmliZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24uKQorLlAKK1RoZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGV4dHJhY3RpbmcgdGhlIGRhdGEgYnkgbmFtZSByZXR1cm5zIHRoZSBzdWJzdHJpbmcKK2ZvciB0aGUgZmlyc3QgKGFuZCBpbiB0aGlzIGV4YW1wbGUsIHRoZSBvbmx5KSBzdWJwYXR0ZXJuIG9mIHRoYXQgbmFtZSB0aGF0CittYXRjaGVkLiBUaGlzIHNhdmVzIHNlYXJjaGluZyB0byBmaW5kIHdoaWNoIG51bWJlcmVkIHN1YnBhdHRlcm4gaXQgd2FzLgorLlAKK0lmIHlvdSBtYWtlIGEgYmFjayByZWZlcmVuY2UgdG8gYSBub24tdW5pcXVlIG5hbWVkIHN1YnBhdHRlcm4gZnJvbSBlbHNld2hlcmUgaW4KK3RoZSBwYXR0ZXJuLCB0aGUgc3VicGF0dGVybnMgdG8gd2hpY2ggdGhlIG5hbWUgcmVmZXJzIGFyZSBjaGVja2VkIGluIHRoZSBvcmRlcgoraW4gd2hpY2ggdGhleSBhcHBlYXIgaW4gdGhlIG92ZXJhbGwgcGF0dGVybi4gVGhlIGZpcnN0IG9uZSB0aGF0IGlzIHNldCBpcyB1c2VkCitmb3IgdGhlIHJlZmVyZW5jZS4gRm9yIGV4YW1wbGUsIHRoaXMgcGF0dGVybiBtYXRjaGVzIGJvdGggImZvb2ZvbyIgYW5kCisiYmFyYmFyIiBidXQgbm90ICJmb29iYXIiIG9yICJiYXJmb28iOgorLnNwCisgICg/Oig/PG4+Zm9vKXwoPzxuPmJhcikpXGVrPG4+Cisuc3AKKy5QCitJZiB5b3UgbWFrZSBhIHN1YnJvdXRpbmUgY2FsbCB0byBhIG5vbi11bmlxdWUgbmFtZWQgc3VicGF0dGVybiwgdGhlIG9uZSB0aGF0Citjb3JyZXNwb25kcyB0byB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgbmFtZSBpcyB1c2VkLiBJbiB0aGUgYWJzZW5jZSBvZgorZHVwbGljYXRlIG51bWJlcnMgKHNlZSB0aGUgcHJldmlvdXMgc2VjdGlvbikgdGhpcyBpcyB0aGUgb25lIHdpdGggdGhlIGxvd2VzdAorbnVtYmVyLgorLlAKK0lmIHlvdSB1c2UgYSBuYW1lZCByZWZlcmVuY2UgaW4gYSBjb25kaXRpb24KK3Rlc3QgKHNlZSB0aGUKKy5cIgorLlwiIEhUTUwgPGEgaHJlZj0iI2NvbmRpdGlvbnMiPgorLlwiIDwvYT4KK3NlY3Rpb24gYWJvdXQgY29uZGl0aW9ucworLlwiCitiZWxvdyksIGVpdGhlciB0byBjaGVjayB3aGV0aGVyIGEgc3VicGF0dGVybiBoYXMgbWF0Y2hlZCwgb3IgdG8gY2hlY2sgZm9yCityZWN1cnNpb24sIGFsbCBzdWJwYXR0ZXJucyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIHRlc3RlZC4gSWYgdGhlIGNvbmRpdGlvbiBpcwordHJ1ZSBmb3IgYW55IG9uZSBvZiB0aGVtLCB0aGUgb3ZlcmFsbCBjb25kaXRpb24gaXMgdHJ1ZS4gVGhpcyBpcyB0aGUgc2FtZQorYmVoYXZpb3VyIGFzIHRlc3RpbmcgYnkgbnVtYmVyLiBGb3IgZnVydGhlciBkZXRhaWxzIG9mIHRoZSBpbnRlcmZhY2VzIGZvcgoraGFuZGxpbmcgbmFtZWQgc3VicGF0dGVybnMsIHNlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLlAKK1xmQldhcm5pbmc6XGZQIFlvdSBjYW5ub3QgdXNlIGRpZmZlcmVudCBuYW1lcyB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHR3bworc3VicGF0dGVybnMgd2l0aCB0aGUgc2FtZSBudW1iZXIgYmVjYXVzZSBQQ1JFMiB1c2VzIG9ubHkgdGhlIG51bWJlcnMgd2hlbgorbWF0Y2hpbmcuIEZvciB0aGlzIHJlYXNvbiwgYW4gZXJyb3IgaXMgZ2l2ZW4gYXQgY29tcGlsZSB0aW1lIGlmIGRpZmZlcmVudCBuYW1lcworYXJlIGdpdmVuIHRvIHN1YnBhdHRlcm5zIHdpdGggdGhlIHNhbWUgbnVtYmVyLiBIb3dldmVyLCB5b3UgY2FuIGFsd2F5cyBnaXZlIHRoZQorc2FtZSBuYW1lIHRvIHN1YnBhdHRlcm5zIHdpdGggdGhlIHNhbWUgbnVtYmVyLCBldmVuIHdoZW4gUENSRTJfRFVQTkFNRVMgaXMgbm90CitzZXQuCisuCisuCisuU0ggUkVQRVRJVElPTgorLnJzCisuc3AKK1JlcGV0aXRpb24gaXMgc3BlY2lmaWVkIGJ5IHF1YW50aWZpZXJzLCB3aGljaCBjYW4gZm9sbG93IGFueSBvZiB0aGUgZm9sbG93aW5nCitpdGVtczoKKy5zcAorICBhIGxpdGVyYWwgZGF0YSBjaGFyYWN0ZXIKKyAgdGhlIGRvdCBtZXRhY2hhcmFjdGVyCisgIHRoZSBcZUMgZXNjYXBlIHNlcXVlbmNlCisgIHRoZSBcZVggZXNjYXBlIHNlcXVlbmNlCisgIHRoZSBcZVIgZXNjYXBlIHNlcXVlbmNlCisgIGFuIGVzY2FwZSBzdWNoIGFzIFxlZCBvciBcZXBMIHRoYXQgbWF0Y2hlcyBhIHNpbmdsZSBjaGFyYWN0ZXIKKyAgYSBjaGFyYWN0ZXIgY2xhc3MKKyAgYSBiYWNrIHJlZmVyZW5jZQorICBhIHBhcmVudGhlc2l6ZWQgc3VicGF0dGVybiAoaW5jbHVkaW5nIG1vc3QgYXNzZXJ0aW9ucykKKyAgYSBzdWJyb3V0aW5lIGNhbGwgdG8gYSBzdWJwYXR0ZXJuIChyZWN1cnNpdmUgb3Igb3RoZXJ3aXNlKQorLnNwCitUaGUgZ2VuZXJhbCByZXBldGl0aW9uIHF1YW50aWZpZXIgc3BlY2lmaWVzIGEgbWluaW11bSBhbmQgbWF4aW11bSBudW1iZXIgb2YKK3Blcm1pdHRlZCBtYXRjaGVzLCBieSBnaXZpbmcgdGhlIHR3byBudW1iZXJzIGluIGN1cmx5IGJyYWNrZXRzIChicmFjZXMpLAorc2VwYXJhdGVkIGJ5IGEgY29tbWEuIFRoZSBudW1iZXJzIG11c3QgYmUgbGVzcyB0aGFuIDY1NTM2LCBhbmQgdGhlIGZpcnN0IG11c3QKK2JlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc2Vjb25kLiBGb3IgZXhhbXBsZToKKy5zcAorICB6ezIsNH0KKy5zcAorbWF0Y2hlcyAienoiLCAienp6Iiwgb3IgInp6enoiLiBBIGNsb3NpbmcgYnJhY2Ugb24gaXRzIG93biBpcyBub3QgYSBzcGVjaWFsCitjaGFyYWN0ZXIuIElmIHRoZSBzZWNvbmQgbnVtYmVyIGlzIG9taXR0ZWQsIGJ1dCB0aGUgY29tbWEgaXMgcHJlc2VudCwgdGhlcmUgaXMKK25vIHVwcGVyIGxpbWl0OyBpZiB0aGUgc2Vjb25kIG51bWJlciBhbmQgdGhlIGNvbW1hIGFyZSBib3RoIG9taXR0ZWQsIHRoZQorcXVhbnRpZmllciBzcGVjaWZpZXMgYW4gZXhhY3QgbnVtYmVyIG9mIHJlcXVpcmVkIG1hdGNoZXMuIFRodXMKKy5zcAorICBbYWVpb3VdezMsfQorLnNwCittYXRjaGVzIGF0IGxlYXN0IDMgc3VjY2Vzc2l2ZSB2b3dlbHMsIGJ1dCBtYXkgbWF0Y2ggbWFueSBtb3JlLCB3aGVyZWFzCisuc3AKKyAgXGVkezh9Cisuc3AKK21hdGNoZXMgZXhhY3RseSA4IGRpZ2l0cy4gQW4gb3BlbmluZyBjdXJseSBicmFja2V0IHRoYXQgYXBwZWFycyBpbiBhIHBvc2l0aW9uCit3aGVyZSBhIHF1YW50aWZpZXIgaXMgbm90IGFsbG93ZWQsIG9yIG9uZSB0aGF0IGRvZXMgbm90IG1hdGNoIHRoZSBzeW50YXggb2YgYQorcXVhbnRpZmllciwgaXMgdGFrZW4gYXMgYSBsaXRlcmFsIGNoYXJhY3Rlci4gRm9yIGV4YW1wbGUsIHssNn0gaXMgbm90IGEKK3F1YW50aWZpZXIsIGJ1dCBhIGxpdGVyYWwgc3RyaW5nIG9mIGZvdXIgY2hhcmFjdGVycy4KKy5QCitJbiBVVEYgbW9kZXMsIHF1YW50aWZpZXJzIGFwcGx5IHRvIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gdG8gaW5kaXZpZHVhbCBjb2RlCit1bml0cy4gVGh1cywgZm9yIGV4YW1wbGUsIFxleHsxMDB9ezJ9IG1hdGNoZXMgdHdvIGNoYXJhY3RlcnMsIGVhY2ggb2YKK3doaWNoIGlzIHJlcHJlc2VudGVkIGJ5IGEgdHdvLWJ5dGUgc2VxdWVuY2UgaW4gYSBVVEYtOCBzdHJpbmcuIFNpbWlsYXJseSwKK1xlWHszfSBtYXRjaGVzIHRocmVlIFVuaWNvZGUgZXh0ZW5kZWQgZ3JhcGhlbWUgY2x1c3RlcnMsIGVhY2ggb2Ygd2hpY2ggbWF5IGJlCitzZXZlcmFsIGNvZGUgdW5pdHMgbG9uZyAoYW5kIHRoZXkgbWF5IGJlIG9mIGRpZmZlcmVudCBsZW5ndGhzKS4KKy5QCitUaGUgcXVhbnRpZmllciB7MH0gaXMgcGVybWl0dGVkLCBjYXVzaW5nIHRoZSBleHByZXNzaW9uIHRvIGJlaGF2ZSBhcyBpZiB0aGUKK3ByZXZpb3VzIGl0ZW0gYW5kIHRoZSBxdWFudGlmaWVyIHdlcmUgbm90IHByZXNlbnQuIFRoaXMgbWF5IGJlIHVzZWZ1bCBmb3IKK3N1YnBhdHRlcm5zIHRoYXQgYXJlIHJlZmVyZW5jZWQgYXMKKy5cIiBIVE1MIDxhIGhyZWY9IiNzdWJwYXR0ZXJuc2Fzc3Vicm91dGluZXMiPgorLlwiIDwvYT4KK3N1YnJvdXRpbmVzCisuXCIKK2Zyb20gZWxzZXdoZXJlIGluIHRoZSBwYXR0ZXJuIChidXQgc2VlIGFsc28gdGhlIHNlY3Rpb24gZW50aXRsZWQKKy5cIiBIVE1MIDxhIGhyZWY9IiNzdWJkZWZpbmUiPgorLlwiIDwvYT4KKyJEZWZpbmluZyBzdWJwYXR0ZXJucyBmb3IgdXNlIGJ5IHJlZmVyZW5jZSBvbmx5IgorLlwiCitiZWxvdykuIEl0ZW1zIG90aGVyIHRoYW4gc3VicGF0dGVybnMgdGhhdCBoYXZlIGEgezB9IHF1YW50aWZpZXIgYXJlIG9taXR0ZWQKK2Zyb20gdGhlIGNvbXBpbGVkIHBhdHRlcm4uCisuUAorRm9yIGNvbnZlbmllbmNlLCB0aGUgdGhyZWUgbW9zdCBjb21tb24gcXVhbnRpZmllcnMgaGF2ZSBzaW5nbGUtY2hhcmFjdGVyCithYmJyZXZpYXRpb25zOgorLnNwCisgICogICAgaXMgZXF1aXZhbGVudCB0byB7MCx9CisgICsgICAgaXMgZXF1aXZhbGVudCB0byB7MSx9CisgID8gICAgaXMgZXF1aXZhbGVudCB0byB7MCwxfQorLnNwCitJdCBpcyBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgaW5maW5pdGUgbG9vcHMgYnkgZm9sbG93aW5nIGEgc3VicGF0dGVybiB0aGF0IGNhbgorbWF0Y2ggbm8gY2hhcmFjdGVycyB3aXRoIGEgcXVhbnRpZmllciB0aGF0IGhhcyBubyB1cHBlciBsaW1pdCwgZm9yIGV4YW1wbGU6Cisuc3AKKyAgKGE/KSoKKy5zcAorRWFybGllciB2ZXJzaW9ucyBvZiBQZXJsIGFuZCBQQ1JFMSB1c2VkIHRvIGdpdmUgYW4gZXJyb3IgYXQgY29tcGlsZSB0aW1lIGZvcgorc3VjaCBwYXR0ZXJucy4gSG93ZXZlciwgYmVjYXVzZSB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhpcyBjYW4gYmUgdXNlZnVsLCBzdWNoCitwYXR0ZXJucyBhcmUgbm93IGFjY2VwdGVkLCBidXQgaWYgYW55IHJlcGV0aXRpb24gb2YgdGhlIHN1YnBhdHRlcm4gZG9lcyBpbiBmYWN0CittYXRjaCBubyBjaGFyYWN0ZXJzLCB0aGUgbG9vcCBpcyBmb3JjaWJseSBicm9rZW4uCisuUAorQnkgZGVmYXVsdCwgdGhlIHF1YW50aWZpZXJzIGFyZSAiZ3JlZWR5IiwgdGhhdCBpcywgdGhleSBtYXRjaCBhcyBtdWNoIGFzCitwb3NzaWJsZSAodXAgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIHBlcm1pdHRlZCB0aW1lcyksIHdpdGhvdXQgY2F1c2luZyB0aGUKK3Jlc3Qgb2YgdGhlIHBhdHRlcm4gdG8gZmFpbC4gVGhlIGNsYXNzaWMgZXhhbXBsZSBvZiB3aGVyZSB0aGlzIGdpdmVzIHByb2JsZW1zCitpcyBpbiB0cnlpbmcgdG8gbWF0Y2ggY29tbWVudHMgaW4gQyBwcm9ncmFtcy4gVGhlc2UgYXBwZWFyIGJldHdlZW4gLyogYW5kICovCithbmQgd2l0aGluIHRoZSBjb21tZW50LCBpbmRpdmlkdWFsICogYW5kIC8gY2hhcmFjdGVycyBtYXkgYXBwZWFyLiBBbiBhdHRlbXB0IHRvCittYXRjaCBDIGNvbW1lbnRzIGJ5IGFwcGx5aW5nIHRoZSBwYXR0ZXJuCisuc3AKKyAgL1xlKi4qXGUqLworLnNwCit0byB0aGUgc3RyaW5nCisuc3AKKyAgLyogZmlyc3QgY29tbWVudCAqLyAgbm90IGNvbW1lbnQgIC8qIHNlY29uZCBjb21tZW50ICovCisuc3AKK2ZhaWxzLCBiZWNhdXNlIGl0IG1hdGNoZXMgdGhlIGVudGlyZSBzdHJpbmcgb3dpbmcgdG8gdGhlIGdyZWVkaW5lc3Mgb2YgdGhlIC4qCitpdGVtLgorLlAKK0lmIGEgcXVhbnRpZmllciBpcyBmb2xsb3dlZCBieSBhIHF1ZXN0aW9uIG1hcmssIGl0IGNlYXNlcyB0byBiZSBncmVlZHksIGFuZAoraW5zdGVhZCBtYXRjaGVzIHRoZSBtaW5pbXVtIG51bWJlciBvZiB0aW1lcyBwb3NzaWJsZSwgc28gdGhlIHBhdHRlcm4KKy5zcAorICAvXGUqLio/XGUqLworLnNwCitkb2VzIHRoZSByaWdodCB0aGluZyB3aXRoIHRoZSBDIGNvbW1lbnRzLiBUaGUgbWVhbmluZyBvZiB0aGUgdmFyaW91cworcXVhbnRpZmllcnMgaXMgbm90IG90aGVyd2lzZSBjaGFuZ2VkLCBqdXN0IHRoZSBwcmVmZXJyZWQgbnVtYmVyIG9mIG1hdGNoZXMuCitEbyBub3QgY29uZnVzZSB0aGlzIHVzZSBvZiBxdWVzdGlvbiBtYXJrIHdpdGggaXRzIHVzZSBhcyBhIHF1YW50aWZpZXIgaW4gaXRzCitvd24gcmlnaHQuIEJlY2F1c2UgaXQgaGFzIHR3byB1c2VzLCBpdCBjYW4gc29tZXRpbWVzIGFwcGVhciBkb3VibGVkLCBhcyBpbgorLnNwCisgIFxlZD8/XGVkCisuc3AKK3doaWNoIG1hdGNoZXMgb25lIGRpZ2l0IGJ5IHByZWZlcmVuY2UsIGJ1dCBjYW4gbWF0Y2ggdHdvIGlmIHRoYXQgaXMgdGhlIG9ubHkKK3dheSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBtYXRjaGVzLgorLlAKK0lmIHRoZSBQQ1JFMl9VTkdSRUVEWSBvcHRpb24gaXMgc2V0IChhbiBvcHRpb24gdGhhdCBpcyBub3QgYXZhaWxhYmxlIGluIFBlcmwpLAordGhlIHF1YW50aWZpZXJzIGFyZSBub3QgZ3JlZWR5IGJ5IGRlZmF1bHQsIGJ1dCBpbmRpdmlkdWFsIG9uZXMgY2FuIGJlIG1hZGUKK2dyZWVkeSBieSBmb2xsb3dpbmcgdGhlbSB3aXRoIGEgcXVlc3Rpb24gbWFyay4gSW4gb3RoZXIgd29yZHMsIGl0IGludmVydHMgdGhlCitkZWZhdWx0IGJlaGF2aW91ci4KKy5QCitXaGVuIGEgcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJuIGlzIHF1YW50aWZpZWQgd2l0aCBhIG1pbmltdW0gcmVwZWF0IGNvdW50IHRoYXQKK2lzIGdyZWF0ZXIgdGhhbiAxIG9yIHdpdGggYSBsaW1pdGVkIG1heGltdW0sIG1vcmUgbWVtb3J5IGlzIHJlcXVpcmVkIGZvciB0aGUKK2NvbXBpbGVkIHBhdHRlcm4sIGluIHByb3BvcnRpb24gdG8gdGhlIHNpemUgb2YgdGhlIG1pbmltdW0gb3IgbWF4aW11bS4KKy5QCitJZiBhIHBhdHRlcm4gc3RhcnRzIHdpdGggLiogb3IgLnswLH0gYW5kIHRoZSBQQ1JFMl9ET1RBTEwgb3B0aW9uIChlcXVpdmFsZW50Cit0byBQZXJsJ3MgL3MpIGlzIHNldCwgdGh1cyBhbGxvd2luZyB0aGUgZG90IHRvIG1hdGNoIG5ld2xpbmVzLCB0aGUgcGF0dGVybiBpcworaW1wbGljaXRseSBhbmNob3JlZCwgYmVjYXVzZSB3aGF0ZXZlciBmb2xsb3dzIHdpbGwgYmUgdHJpZWQgYWdhaW5zdCBldmVyeQorY2hhcmFjdGVyIHBvc2l0aW9uIGluIHRoZSBzdWJqZWN0IHN0cmluZywgc28gdGhlcmUgaXMgbm8gcG9pbnQgaW4gcmV0cnlpbmcgdGhlCitvdmVyYWxsIG1hdGNoIGF0IGFueSBwb3NpdGlvbiBhZnRlciB0aGUgZmlyc3QuIFBDUkUyIG5vcm1hbGx5IHRyZWF0cyBzdWNoIGEKK3BhdHRlcm4gYXMgdGhvdWdoIGl0IHdlcmUgcHJlY2VkZWQgYnkgXGVBLgorLlAKK0luIGNhc2VzIHdoZXJlIGl0IGlzIGtub3duIHRoYXQgdGhlIHN1YmplY3Qgc3RyaW5nIGNvbnRhaW5zIG5vIG5ld2xpbmVzLCBpdCBpcword29ydGggc2V0dGluZyBQQ1JFMl9ET1RBTEwgaW4gb3JkZXIgdG8gb2J0YWluIHRoaXMgb3B0aW1pemF0aW9uLCBvcgorYWx0ZXJuYXRpdmVseSwgdXNpbmcgXiB0byBpbmRpY2F0ZSBhbmNob3JpbmcgZXhwbGljaXRseS4KKy5QCitIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBjYXNlcyB3aGVyZSB0aGUgb3B0aW1pemF0aW9uIGNhbm5vdCBiZSB1c2VkLiBXaGVuIC4qCitpcyBpbnNpZGUgY2FwdHVyaW5nIHBhcmVudGhlc2VzIHRoYXQgYXJlIHRoZSBzdWJqZWN0IG9mIGEgYmFjayByZWZlcmVuY2UKK2Vsc2V3aGVyZSBpbiB0aGUgcGF0dGVybiwgYSBtYXRjaCBhdCB0aGUgc3RhcnQgbWF5IGZhaWwgd2hlcmUgYSBsYXRlciBvbmUKK3N1Y2NlZWRzLiBDb25zaWRlciwgZm9yIGV4YW1wbGU6Cisuc3AKKyAgKC4qKWFiY1xlMQorLnNwCitJZiB0aGUgc3ViamVjdCBpcyAieHl6MTIzYWJjMTIzIiB0aGUgbWF0Y2ggcG9pbnQgaXMgdGhlIGZvdXJ0aCBjaGFyYWN0ZXIuIEZvcgordGhpcyByZWFzb24sIHN1Y2ggYSBwYXR0ZXJuIGlzIG5vdCBpbXBsaWNpdGx5IGFuY2hvcmVkLgorLlAKK0Fub3RoZXIgY2FzZSB3aGVyZSBpbXBsaWNpdCBhbmNob3JpbmcgaXMgbm90IGFwcGxpZWQgaXMgd2hlbiB0aGUgbGVhZGluZyAuKiBpcworaW5zaWRlIGFuIGF0b21pYyBncm91cC4gT25jZSBhZ2FpbiwgYSBtYXRjaCBhdCB0aGUgc3RhcnQgbWF5IGZhaWwgd2hlcmUgYSBsYXRlcgorb25lIHN1Y2NlZWRzLiBDb25zaWRlciB0aGlzIHBhdHRlcm46Cisuc3AKKyAgKD8+Lio/YSliCisuc3AKK0l0IG1hdGNoZXMgImFiIiBpbiB0aGUgc3ViamVjdCAiYWFiIi4gVGhlIHVzZSBvZiB0aGUgYmFja3RyYWNraW5nIGNvbnRyb2wgdmVyYnMKKygqUFJVTkUpIGFuZCAoKlNLSVApIGFsc28gZGlzYWJsZSB0aGlzIG9wdGltaXphdGlvbiwgYW5kIHRoZXJlIGlzIGFuIG9wdGlvbiwKK1BDUkUyX05PX0RPVFNUQVJfQU5DSE9SLCB0byBkbyBzbyBleHBsaWNpdGx5LgorLlAKK1doZW4gYSBjYXB0dXJpbmcgc3VicGF0dGVybiBpcyByZXBlYXRlZCwgdGhlIHZhbHVlIGNhcHR1cmVkIGlzIHRoZSBzdWJzdHJpbmcKK3RoYXQgbWF0Y2hlZCB0aGUgZmluYWwgaXRlcmF0aW9uLiBGb3IgZXhhbXBsZSwgYWZ0ZXIKKy5zcAorICAodHdlZWRsZVtkdW1lXXszfVxlcyopKworLnNwCitoYXMgbWF0Y2hlZCAidHdlZWRsZWR1bSB0d2VlZGxlZGVlIiB0aGUgdmFsdWUgb2YgdGhlIGNhcHR1cmVkIHN1YnN0cmluZyBpcworInR3ZWVkbGVkZWUiLiBIb3dldmVyLCBpZiB0aGVyZSBhcmUgbmVzdGVkIGNhcHR1cmluZyBzdWJwYXR0ZXJucywgdGhlCitjb3JyZXNwb25kaW5nIGNhcHR1cmVkIHZhbHVlcyBtYXkgaGF2ZSBiZWVuIHNldCBpbiBwcmV2aW91cyBpdGVyYXRpb25zLiBGb3IKK2V4YW1wbGUsIGFmdGVyCisuc3AKKyAgKGF8KGIpKSsKKy5zcAorbWF0Y2hlcyAiYWJhIiB0aGUgdmFsdWUgb2YgdGhlIHNlY29uZCBjYXB0dXJlZCBzdWJzdHJpbmcgaXMgImIiLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0iYXRvbWljZ3JvdXAiPjwvYT4KKy5TSCAiQVRPTUlDIEdST1VQSU5HIEFORCBQT1NTRVNTSVZFIFFVQU5USUZJRVJTIgorLnJzCisuc3AKK1dpdGggYm90aCBtYXhpbWl6aW5nICgiZ3JlZWR5IikgYW5kIG1pbmltaXppbmcgKCJ1bmdyZWVkeSIgb3IgImxhenkiKQorcmVwZXRpdGlvbiwgZmFpbHVyZSBvZiB3aGF0IGZvbGxvd3Mgbm9ybWFsbHkgY2F1c2VzIHRoZSByZXBlYXRlZCBpdGVtIHRvIGJlCityZS1ldmFsdWF0ZWQgdG8gc2VlIGlmIGEgZGlmZmVyZW50IG51bWJlciBvZiByZXBlYXRzIGFsbG93cyB0aGUgcmVzdCBvZiB0aGUKK3BhdHRlcm4gdG8gbWF0Y2guIFNvbWV0aW1lcyBpdCBpcyB1c2VmdWwgdG8gcHJldmVudCB0aGlzLCBlaXRoZXIgdG8gY2hhbmdlIHRoZQorbmF0dXJlIG9mIHRoZSBtYXRjaCwgb3IgdG8gY2F1c2UgaXQgZmFpbCBlYXJsaWVyIHRoYW4gaXQgb3RoZXJ3aXNlIG1pZ2h0LCB3aGVuCit0aGUgYXV0aG9yIG9mIHRoZSBwYXR0ZXJuIGtub3dzIHRoZXJlIGlzIG5vIHBvaW50IGluIGNhcnJ5aW5nIG9uLgorLlAKK0NvbnNpZGVyLCBmb3IgZXhhbXBsZSwgdGhlIHBhdHRlcm4gXGVkK2ZvbyB3aGVuIGFwcGxpZWQgdG8gdGhlIHN1YmplY3QgbGluZQorLnNwCisgIDEyMzQ1NmJhcgorLnNwCitBZnRlciBtYXRjaGluZyBhbGwgNiBkaWdpdHMgYW5kIHRoZW4gZmFpbGluZyB0byBtYXRjaCAiZm9vIiwgdGhlIG5vcm1hbAorYWN0aW9uIG9mIHRoZSBtYXRjaGVyIGlzIHRvIHRyeSBhZ2FpbiB3aXRoIG9ubHkgNSBkaWdpdHMgbWF0Y2hpbmcgdGhlIFxlZCsKK2l0ZW0sIGFuZCB0aGVuIHdpdGggNCwgYW5kIHNvIG9uLCBiZWZvcmUgdWx0aW1hdGVseSBmYWlsaW5nLiAiQXRvbWljIGdyb3VwaW5nIgorKGEgdGVybSB0YWtlbiBmcm9tIEplZmZyZXkgRnJpZWRsJ3MgYm9vaykgcHJvdmlkZXMgdGhlIG1lYW5zIGZvciBzcGVjaWZ5aW5nCit0aGF0IG9uY2UgYSBzdWJwYXR0ZXJuIGhhcyBtYXRjaGVkLCBpdCBpcyBub3QgdG8gYmUgcmUtZXZhbHVhdGVkIGluIHRoaXMgd2F5LgorLlAKK0lmIHdlIHVzZSBhdG9taWMgZ3JvdXBpbmcgZm9yIHRoZSBwcmV2aW91cyBleGFtcGxlLCB0aGUgbWF0Y2hlciBnaXZlcyB1cAoraW1tZWRpYXRlbHkgb24gZmFpbGluZyB0byBtYXRjaCAiZm9vIiB0aGUgZmlyc3QgdGltZS4gVGhlIG5vdGF0aW9uIGlzIGEga2luZCBvZgorc3BlY2lhbCBwYXJlbnRoZXNpcywgc3RhcnRpbmcgd2l0aCAoPz4gYXMgaW4gdGhpcyBleGFtcGxlOgorLnNwCisgICg/PlxlZCspZm9vCisuc3AKK1RoaXMga2luZCBvZiBwYXJlbnRoZXNpcyAibG9ja3MgdXAiIHRoZSAgcGFydCBvZiB0aGUgcGF0dGVybiBpdCBjb250YWlucyBvbmNlCitpdCBoYXMgbWF0Y2hlZCwgYW5kIGEgZmFpbHVyZSBmdXJ0aGVyIGludG8gdGhlIHBhdHRlcm4gaXMgcHJldmVudGVkIGZyb20KK2JhY2t0cmFja2luZyBpbnRvIGl0LiBCYWNrdHJhY2tpbmcgcGFzdCBpdCB0byBwcmV2aW91cyBpdGVtcywgaG93ZXZlciwgd29ya3MgYXMKK25vcm1hbC4KKy5QCitBbiBhbHRlcm5hdGl2ZSBkZXNjcmlwdGlvbiBpcyB0aGF0IGEgc3VicGF0dGVybiBvZiB0aGlzIHR5cGUgbWF0Y2hlcyBleGFjdGx5Cit0aGUgc3RyaW5nIG9mIGNoYXJhY3RlcnMgdGhhdCBhbiBpZGVudGljYWwgc3RhbmRhbG9uZSBwYXR0ZXJuIHdvdWxkIG1hdGNoLCBpZgorYW5jaG9yZWQgYXQgdGhlIGN1cnJlbnQgcG9pbnQgaW4gdGhlIHN1YmplY3Qgc3RyaW5nLgorLlAKK0F0b21pYyBncm91cGluZyBzdWJwYXR0ZXJucyBhcmUgbm90IGNhcHR1cmluZyBzdWJwYXR0ZXJucy4gU2ltcGxlIGNhc2VzIHN1Y2ggYXMKK3RoZSBhYm92ZSBleGFtcGxlIGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEgbWF4aW1pemluZyByZXBlYXQgdGhhdCBtdXN0IHN3YWxsb3cKK2V2ZXJ5dGhpbmcgaXQgY2FuLiBTbywgd2hpbGUgYm90aCBcZWQrIGFuZCBcZWQrPyBhcmUgcHJlcGFyZWQgdG8gYWRqdXN0IHRoZQorbnVtYmVyIG9mIGRpZ2l0cyB0aGV5IG1hdGNoIGluIG9yZGVyIHRvIG1ha2UgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gbWF0Y2gsCisoPz5cZWQrKSBjYW4gb25seSBtYXRjaCBhbiBlbnRpcmUgc2VxdWVuY2Ugb2YgZGlnaXRzLgorLlAKK0F0b21pYyBncm91cHMgaW4gZ2VuZXJhbCBjYW4gb2YgY291cnNlIGNvbnRhaW4gYXJiaXRyYXJpbHkgY29tcGxpY2F0ZWQKK3N1YnBhdHRlcm5zLCBhbmQgY2FuIGJlIG5lc3RlZC4gSG93ZXZlciwgd2hlbiB0aGUgc3VicGF0dGVybiBmb3IgYW4gYXRvbWljCitncm91cCBpcyBqdXN0IGEgc2luZ2xlIHJlcGVhdGVkIGl0ZW0sIGFzIGluIHRoZSBleGFtcGxlIGFib3ZlLCBhIHNpbXBsZXIKK25vdGF0aW9uLCBjYWxsZWQgYSAicG9zc2Vzc2l2ZSBxdWFudGlmaWVyIiBjYW4gYmUgdXNlZC4gVGhpcyBjb25zaXN0cyBvZiBhbgorYWRkaXRpb25hbCArIGNoYXJhY3RlciBmb2xsb3dpbmcgYSBxdWFudGlmaWVyLiBVc2luZyB0aGlzIG5vdGF0aW9uLCB0aGUKK3ByZXZpb3VzIGV4YW1wbGUgY2FuIGJlIHJld3JpdHRlbiBhcworLnNwCisgIFxlZCsrZm9vCisuc3AKK05vdGUgdGhhdCBhIHBvc3Nlc3NpdmUgcXVhbnRpZmllciBjYW4gYmUgdXNlZCB3aXRoIGFuIGVudGlyZSBncm91cCwgZm9yCitleGFtcGxlOgorLnNwCisgIChhYmN8eHl6KXsyLDN9KworLnNwCitQb3NzZXNzaXZlIHF1YW50aWZpZXJzIGFyZSBhbHdheXMgZ3JlZWR5OyB0aGUgc2V0dGluZyBvZiB0aGUgUENSRTJfVU5HUkVFRFkKK29wdGlvbiBpcyBpZ25vcmVkLiBUaGV5IGFyZSBhIGNvbnZlbmllbnQgbm90YXRpb24gZm9yIHRoZSBzaW1wbGVyIGZvcm1zIG9mCithdG9taWMgZ3JvdXAuIEhvd2V2ZXIsIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgaW4gdGhlIG1lYW5pbmcgb2YgYSBwb3NzZXNzaXZlCitxdWFudGlmaWVyIGFuZCB0aGUgZXF1aXZhbGVudCBhdG9taWMgZ3JvdXAsIHRob3VnaCB0aGVyZSBtYXkgYmUgYSBwZXJmb3JtYW5jZQorZGlmZmVyZW5jZTsgcG9zc2Vzc2l2ZSBxdWFudGlmaWVycyBzaG91bGQgYmUgc2xpZ2h0bHkgZmFzdGVyLgorLlAKK1RoZSBwb3NzZXNzaXZlIHF1YW50aWZpZXIgc3ludGF4IGlzIGFuIGV4dGVuc2lvbiB0byB0aGUgUGVybCA1Ljggc3ludGF4LgorSmVmZnJleSBGcmllZGwgb3JpZ2luYXRlZCB0aGUgaWRlYSAoYW5kIHRoZSBuYW1lKSBpbiB0aGUgZmlyc3QgZWRpdGlvbiBvZiBoaXMKK2Jvb2suIE1pa2UgTWNDbG9za2V5IGxpa2VkIGl0LCBzbyBpbXBsZW1lbnRlZCBpdCB3aGVuIGhlIGJ1aWx0IFN1bidzIEphdmEKK3BhY2thZ2UsIGFuZCBQQ1JFMSBjb3BpZWQgaXQgZnJvbSB0aGVyZS4gSXQgdWx0aW1hdGVseSBmb3VuZCBpdHMgd2F5IGludG8gUGVybAorYXQgcmVsZWFzZSA1LjEwLgorLlAKK1BDUkUyIGhhcyBhbiBvcHRpbWl6YXRpb24gdGhhdCBhdXRvbWF0aWNhbGx5ICJwb3NzZXNzaWZpZXMiIGNlcnRhaW4gc2ltcGxlCitwYXR0ZXJuIGNvbnN0cnVjdHMuIEZvciBleGFtcGxlLCB0aGUgc2VxdWVuY2UgQStCIGlzIHRyZWF0ZWQgYXMgQSsrQiBiZWNhdXNlCit0aGVyZSBpcyBubyBwb2ludCBpbiBiYWNrdHJhY2tpbmcgaW50byBhIHNlcXVlbmNlIG9mIEEncyB3aGVuIEIgbXVzdCBmb2xsb3cuCitUaGlzIGZlYXR1cmUgY2FuIGJlIGRpc2FibGVkIGJ5IHRoZSBQQ1JFMl9OT19BVVRPUE9TU0VTUyBvcHRpb24sIG9yIHN0YXJ0aW5nCit0aGUgcGF0dGVybiB3aXRoICgqTk9fQVVUT19QT1NTRVNTKS4KKy5QCitXaGVuIGEgcGF0dGVybiBjb250YWlucyBhbiB1bmxpbWl0ZWQgcmVwZWF0IGluc2lkZSBhIHN1YnBhdHRlcm4gdGhhdCBjYW4gaXRzZWxmCitiZSByZXBlYXRlZCBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIHRpbWVzLCB0aGUgdXNlIG9mIGFuIGF0b21pYyBncm91cCBpcyB0aGUKK29ubHkgd2F5IHRvIGF2b2lkIHNvbWUgZmFpbGluZyBtYXRjaGVzIHRha2luZyBhIHZlcnkgbG9uZyB0aW1lIGluZGVlZC4gVGhlCitwYXR0ZXJuCisuc3AKKyAgKFxlRCt8PFxlZCs+KSpbIT9dCisuc3AKK21hdGNoZXMgYW4gdW5saW1pdGVkIG51bWJlciBvZiBzdWJzdHJpbmdzIHRoYXQgZWl0aGVyIGNvbnNpc3Qgb2Ygbm9uLWRpZ2l0cywgb3IKK2RpZ2l0cyBlbmNsb3NlZCBpbiA8PiwgZm9sbG93ZWQgYnkgZWl0aGVyICEgb3IgPy4gV2hlbiBpdCBtYXRjaGVzLCBpdCBydW5zCitxdWlja2x5LiBIb3dldmVyLCBpZiBpdCBpcyBhcHBsaWVkIHRvCisuc3AKKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorLnNwCitpdCB0YWtlcyBhIGxvbmcgdGltZSBiZWZvcmUgcmVwb3J0aW5nIGZhaWx1cmUuIFRoaXMgaXMgYmVjYXVzZSB0aGUgc3RyaW5nIGNhbgorYmUgZGl2aWRlZCBiZXR3ZWVuIHRoZSBpbnRlcm5hbCBcZUQrIHJlcGVhdCBhbmQgdGhlIGV4dGVybmFsICogcmVwZWF0IGluIGEKK2xhcmdlIG51bWJlciBvZiB3YXlzLCBhbmQgYWxsIGhhdmUgdG8gYmUgdHJpZWQuIChUaGUgZXhhbXBsZSB1c2VzIFshP10gcmF0aGVyCit0aGFuIGEgc2luZ2xlIGNoYXJhY3RlciBhdCB0aGUgZW5kLCBiZWNhdXNlIGJvdGggUENSRTIgYW5kIFBlcmwgaGF2ZSBhbgorb3B0aW1pemF0aW9uIHRoYXQgYWxsb3dzIGZvciBmYXN0IGZhaWx1cmUgd2hlbiBhIHNpbmdsZSBjaGFyYWN0ZXIgaXMgdXNlZC4gVGhleQorcmVtZW1iZXIgdGhlIGxhc3Qgc2luZ2xlIGNoYXJhY3RlciB0aGF0IGlzIHJlcXVpcmVkIGZvciBhIG1hdGNoLCBhbmQgZmFpbCBlYXJseQoraWYgaXQgaXMgbm90IHByZXNlbnQgaW4gdGhlIHN0cmluZy4pIElmIHRoZSBwYXR0ZXJuIGlzIGNoYW5nZWQgc28gdGhhdCBpdCB1c2VzCithbiBhdG9taWMgZ3JvdXAsIGxpa2UgdGhpczoKKy5zcAorICAoKD8+XGVEKyl8PFxlZCs+KSpbIT9dCisuc3AKK3NlcXVlbmNlcyBvZiBub24tZGlnaXRzIGNhbm5vdCBiZSBicm9rZW4sIGFuZCBmYWlsdXJlIGhhcHBlbnMgcXVpY2tseS4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9ImJhY2tyZWZlcmVuY2VzIj48L2E+CisuU0ggIkJBQ0sgUkVGRVJFTkNFUyIKKy5ycworLnNwCitPdXRzaWRlIGEgY2hhcmFjdGVyIGNsYXNzLCBhIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhIGRpZ2l0IGdyZWF0ZXIgdGhhbiAwIChhbmQKK3Bvc3NpYmx5IGZ1cnRoZXIgZGlnaXRzKSBpcyBhIGJhY2sgcmVmZXJlbmNlIHRvIGEgY2FwdHVyaW5nIHN1YnBhdHRlcm4gZWFybGllcgorKHRoYXQgaXMsIHRvIGl0cyBsZWZ0KSBpbiB0aGUgcGF0dGVybiwgcHJvdmlkZWQgdGhlcmUgaGF2ZSBiZWVuIHRoYXQgbWFueQorcHJldmlvdXMgY2FwdHVyaW5nIGxlZnQgcGFyZW50aGVzZXMuCisuUAorSG93ZXZlciwgaWYgdGhlIGRlY2ltYWwgbnVtYmVyIGZvbGxvd2luZyB0aGUgYmFja3NsYXNoIGlzIGxlc3MgdGhhbiA4LCBpdCBpcworYWx3YXlzIHRha2VuIGFzIGEgYmFjayByZWZlcmVuY2UsIGFuZCBjYXVzZXMgYW4gZXJyb3Igb25seSBpZiB0aGVyZSBhcmUgbm90Cit0aGF0IG1hbnkgY2FwdHVyaW5nIGxlZnQgcGFyZW50aGVzZXMgaW4gdGhlIGVudGlyZSBwYXR0ZXJuLiBJbiBvdGhlciB3b3JkcywgdGhlCitwYXJlbnRoZXNlcyB0aGF0IGFyZSByZWZlcmVuY2VkIG5lZWQgbm90IGJlIHRvIHRoZSBsZWZ0IG9mIHRoZSByZWZlcmVuY2UgZm9yCitudW1iZXJzIGxlc3MgdGhhbiA4LiBBICJmb3J3YXJkIGJhY2sgcmVmZXJlbmNlIiBvZiB0aGlzIHR5cGUgY2FuIG1ha2Ugc2Vuc2UKK3doZW4gYSByZXBldGl0aW9uIGlzIGludm9sdmVkIGFuZCB0aGUgc3VicGF0dGVybiB0byB0aGUgcmlnaHQgaGFzIHBhcnRpY2lwYXRlZAoraW4gYW4gZWFybGllciBpdGVyYXRpb24uCisuUAorSXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUgYSBudW1lcmljYWwgImZvcndhcmQgYmFjayByZWZlcmVuY2UiIHRvIGEgc3VicGF0dGVybgord2hvc2UgbnVtYmVyIGlzIDggb3IgbW9yZSB1c2luZyB0aGlzIHN5bnRheCBiZWNhdXNlIGEgc2VxdWVuY2Ugc3VjaCBhcyBcZTUwIGlzCitpbnRlcnByZXRlZCBhcyBhIGNoYXJhY3RlciBkZWZpbmVkIGluIG9jdGFsLiBTZWUgdGhlIHN1YnNlY3Rpb24gZW50aXRsZWQKKyJOb24tcHJpbnRpbmcgY2hhcmFjdGVycyIKKy5cIiBIVE1MIDxhIGhyZWY9IiNkaWdpdHNhZnRlcmJhY2tzbGFzaCI+CisuXCIgPC9hPgorYWJvdmUKKy5cIgorZm9yIGZ1cnRoZXIgZGV0YWlscyBvZiB0aGUgaGFuZGxpbmcgb2YgZGlnaXRzIGZvbGxvd2luZyBhIGJhY2tzbGFzaC4gVGhlcmUgaXMKK25vIHN1Y2ggcHJvYmxlbSB3aGVuIG5hbWVkIHBhcmVudGhlc2VzIGFyZSB1c2VkLiBBIGJhY2sgcmVmZXJlbmNlIHRvIGFueQorc3VicGF0dGVybiBpcyBwb3NzaWJsZSB1c2luZyBuYW1lZCBwYXJlbnRoZXNlcyAoc2VlIGJlbG93KS4KKy5QCitBbm90aGVyIHdheSBvZiBhdm9pZGluZyB0aGUgYW1iaWd1aXR5IGluaGVyZW50IGluIHRoZSB1c2Ugb2YgZGlnaXRzIGZvbGxvd2luZyBhCitiYWNrc2xhc2ggaXMgdG8gdXNlIHRoZSBcZWcgZXNjYXBlIHNlcXVlbmNlLiBUaGlzIGVzY2FwZSBtdXN0IGJlIGZvbGxvd2VkIGJ5IGFuCit1bnNpZ25lZCBudW1iZXIgb3IgYSBuZWdhdGl2ZSBudW1iZXIsIG9wdGlvbmFsbHkgZW5jbG9zZWQgaW4gYnJhY2VzLiBUaGVzZQorZXhhbXBsZXMgYXJlIGFsbCBpZGVudGljYWw6Cisuc3AKKyAgKHJpbmcpLCBcZTEKKyAgKHJpbmcpLCBcZWcxCisgIChyaW5nKSwgXGVnezF9Cisuc3AKK0FuIHVuc2lnbmVkIG51bWJlciBzcGVjaWZpZXMgYW4gYWJzb2x1dGUgcmVmZXJlbmNlIHdpdGhvdXQgdGhlIGFtYmlndWl0eSB0aGF0CitpcyBwcmVzZW50IGluIHRoZSBvbGRlciBzeW50YXguIEl0IGlzIGFsc28gdXNlZnVsIHdoZW4gbGl0ZXJhbCBkaWdpdHMgZm9sbG93Cit0aGUgcmVmZXJlbmNlLiBBIG5lZ2F0aXZlIG51bWJlciBpcyBhIHJlbGF0aXZlIHJlZmVyZW5jZS4gQ29uc2lkZXIgdGhpcworZXhhbXBsZToKKy5zcAorICAoYWJjKGRlZilnaGkpXGVney0xfQorLnNwCitUaGUgc2VxdWVuY2UgXGVney0xfSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgbW9zdCByZWNlbnRseSBzdGFydGVkIGNhcHR1cmluZworc3VicGF0dGVybiBiZWZvcmUgXGVnLCB0aGF0IGlzLCBpcyBpdCBlcXVpdmFsZW50IHRvIFxlMiBpbiB0aGlzIGV4YW1wbGUuCitTaW1pbGFybHksIFxlZ3stMn0gd291bGQgYmUgZXF1aXZhbGVudCB0byBcZTEuIFRoZSB1c2Ugb2YgcmVsYXRpdmUgcmVmZXJlbmNlcworY2FuIGJlIGhlbHBmdWwgaW4gbG9uZyBwYXR0ZXJucywgYW5kIGFsc28gaW4gcGF0dGVybnMgdGhhdCBhcmUgY3JlYXRlZCBieQoram9pbmluZyB0b2dldGhlciBmcmFnbWVudHMgdGhhdCBjb250YWluIHJlZmVyZW5jZXMgd2l0aGluIHRoZW1zZWx2ZXMuCisuUAorQSBiYWNrIHJlZmVyZW5jZSBtYXRjaGVzIHdoYXRldmVyIGFjdHVhbGx5IG1hdGNoZWQgdGhlIGNhcHR1cmluZyBzdWJwYXR0ZXJuIGluCit0aGUgY3VycmVudCBzdWJqZWN0IHN0cmluZywgcmF0aGVyIHRoYW4gYW55dGhpbmcgbWF0Y2hpbmcgdGhlIHN1YnBhdHRlcm4KK2l0c2VsZiAoc2VlCisuXCIgSFRNTCA8YSBocmVmPSIjc3VicGF0dGVybnNhc3N1YnJvdXRpbmVzIj4KKy5cIiA8L2E+CisiU3VicGF0dGVybnMgYXMgc3Vicm91dGluZXMiCisuXCIKK2JlbG93IGZvciBhIHdheSBvZiBkb2luZyB0aGF0KS4gU28gdGhlIHBhdHRlcm4KKy5zcAorICAoc2Vuc3xyZXNwb25zKWUgYW5kIFxlMWliaWxpdHkKKy5zcAorbWF0Y2hlcyAic2Vuc2UgYW5kIHNlbnNpYmlsaXR5IiBhbmQgInJlc3BvbnNlIGFuZCByZXNwb25zaWJpbGl0eSIsIGJ1dCBub3QKKyJzZW5zZSBhbmQgcmVzcG9uc2liaWxpdHkiLiBJZiBjYXNlZnVsIG1hdGNoaW5nIGlzIGluIGZvcmNlIGF0IHRoZSB0aW1lIG9mIHRoZQorYmFjayByZWZlcmVuY2UsIHRoZSBjYXNlIG9mIGxldHRlcnMgaXMgcmVsZXZhbnQuIEZvciBleGFtcGxlLAorLnNwCisgICgoP2kpcmFoKVxlcytcZTEKKy5zcAorbWF0Y2hlcyAicmFoIHJhaCIgYW5kICJSQUggUkFIIiwgYnV0IG5vdCAiUkFIIHJhaCIsIGV2ZW4gdGhvdWdoIHRoZSBvcmlnaW5hbAorY2FwdHVyaW5nIHN1YnBhdHRlcm4gaXMgbWF0Y2hlZCBjYXNlbGVzc2x5LgorLlAKK1RoZXJlIGFyZSBzZXZlcmFsIGRpZmZlcmVudCB3YXlzIG9mIHdyaXRpbmcgYmFjayByZWZlcmVuY2VzIHRvIG5hbWVkCitzdWJwYXR0ZXJucy4gVGhlIC5ORVQgc3ludGF4IFxla3tuYW1lfSBhbmQgdGhlIFBlcmwgc3ludGF4IFxlazxuYW1lPiBvcgorXGVrJ25hbWUnIGFyZSBzdXBwb3J0ZWQsIGFzIGlzIHRoZSBQeXRob24gc3ludGF4ICg/UD1uYW1lKS4gUGVybCA1LjEwJ3MgdW5pZmllZAorYmFjayByZWZlcmVuY2Ugc3ludGF4LCBpbiB3aGljaCBcZWcgY2FuIGJlIHVzZWQgZm9yIGJvdGggbnVtZXJpYyBhbmQgbmFtZWQKK3JlZmVyZW5jZXMsIGlzIGFsc28gc3VwcG9ydGVkLiBXZSBjb3VsZCByZXdyaXRlIHRoZSBhYm92ZSBleGFtcGxlIGluIGFueSBvZgordGhlIGZvbGxvd2luZyB3YXlzOgorLnNwCisgICg/PHAxPig/aSlyYWgpXGVzK1xlazxwMT4KKyAgKD8ncDEnKD9pKXJhaClcZXMrXGVre3AxfQorICAoP1A8cDE+KD9pKXJhaClcZXMrKD9QPXAxKQorICAoPzxwMT4oP2kpcmFoKVxlcytcZWd7cDF9Cisuc3AKK0Egc3VicGF0dGVybiB0aGF0IGlzIHJlZmVyZW5jZWQgYnkgbmFtZSBtYXkgYXBwZWFyIGluIHRoZSBwYXR0ZXJuIGJlZm9yZSBvcgorYWZ0ZXIgdGhlIHJlZmVyZW5jZS4KKy5QCitUaGVyZSBtYXkgYmUgbW9yZSB0aGFuIG9uZSBiYWNrIHJlZmVyZW5jZSB0byB0aGUgc2FtZSBzdWJwYXR0ZXJuLiBJZiBhCitzdWJwYXR0ZXJuIGhhcyBub3QgYWN0dWFsbHkgYmVlbiB1c2VkIGluIGEgcGFydGljdWxhciBtYXRjaCwgYW55IGJhY2sKK3JlZmVyZW5jZXMgdG8gaXQgYWx3YXlzIGZhaWwgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIHRoZSBwYXR0ZXJuCisuc3AKKyAgKGF8KGJjKSlcZTIKKy5zcAorYWx3YXlzIGZhaWxzIGlmIGl0IHN0YXJ0cyB0byBtYXRjaCAiYSIgcmF0aGVyIHRoYW4gImJjIi4gSG93ZXZlciwgaWYgdGhlCitQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGIG9wdGlvbiBpcyBzZXQgYXQgY29tcGlsZSB0aW1lLCBhIGJhY2sgcmVmZXJlbmNlIHRvIGFuCit1bnNldCB2YWx1ZSBtYXRjaGVzIGFuIGVtcHR5IHN0cmluZy4KKy5QCitCZWNhdXNlIHRoZXJlIG1heSBiZSBtYW55IGNhcHR1cmluZyBwYXJlbnRoZXNlcyBpbiBhIHBhdHRlcm4sIGFsbCBkaWdpdHMKK2ZvbGxvd2luZyBhIGJhY2tzbGFzaCBhcmUgdGFrZW4gYXMgcGFydCBvZiBhIHBvdGVudGlhbCBiYWNrIHJlZmVyZW5jZSBudW1iZXIuCitJZiB0aGUgcGF0dGVybiBjb250aW51ZXMgd2l0aCBhIGRpZ2l0IGNoYXJhY3Rlciwgc29tZSBkZWxpbWl0ZXIgbXVzdCBiZSB1c2VkIHRvCit0ZXJtaW5hdGUgdGhlIGJhY2sgcmVmZXJlbmNlLiBJZiB0aGUgUENSRTJfRVhURU5ERUQgb3B0aW9uIGlzIHNldCwgdGhpcyBjYW4gYmUKK3doaXRlIHNwYWNlLiBPdGhlcndpc2UsIHRoZSBcZWd7IHN5bnRheCBvciBhbiBlbXB0eSBjb21tZW50IChzZWUKKy5cIiBIVE1MIDxhIGhyZWY9IiNjb21tZW50cyI+CisuXCIgPC9hPgorIkNvbW1lbnRzIgorLlwiCitiZWxvdykgY2FuIGJlIHVzZWQuCisuCisuCisuU1MgIlJlY3Vyc2l2ZSBiYWNrIHJlZmVyZW5jZXMiCisucnMKKy5zcAorQSBiYWNrIHJlZmVyZW5jZSB0aGF0IG9jY3VycyBpbnNpZGUgdGhlIHBhcmVudGhlc2VzIHRvIHdoaWNoIGl0IHJlZmVycyBmYWlscword2hlbiB0aGUgc3VicGF0dGVybiBpcyBmaXJzdCB1c2VkLCBzbywgZm9yIGV4YW1wbGUsIChhXGUxKSBuZXZlciBtYXRjaGVzLgorSG93ZXZlciwgc3VjaCByZWZlcmVuY2VzIGNhbiBiZSB1c2VmdWwgaW5zaWRlIHJlcGVhdGVkIHN1YnBhdHRlcm5zLiBGb3IKK2V4YW1wbGUsIHRoZSBwYXR0ZXJuCisuc3AKKyAgKGF8YlxlMSkrCisuc3AKK21hdGNoZXMgYW55IG51bWJlciBvZiAiYSJzIGFuZCBhbHNvICJhYmEiLCAiYWJhYmJhYSIgZXRjLiBBdCBlYWNoIGl0ZXJhdGlvbiBvZgordGhlIHN1YnBhdHRlcm4sIHRoZSBiYWNrIHJlZmVyZW5jZSBtYXRjaGVzIHRoZSBjaGFyYWN0ZXIgc3RyaW5nIGNvcnJlc3BvbmRpbmcKK3RvIHRoZSBwcmV2aW91cyBpdGVyYXRpb24uIEluIG9yZGVyIGZvciB0aGlzIHRvIHdvcmssIHRoZSBwYXR0ZXJuIG11c3QgYmUgc3VjaAordGhhdCB0aGUgZmlyc3QgaXRlcmF0aW9uIGRvZXMgbm90IG5lZWQgdG8gbWF0Y2ggdGhlIGJhY2sgcmVmZXJlbmNlLiBUaGlzIGNhbiBiZQorZG9uZSB1c2luZyBhbHRlcm5hdGlvbiwgYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUsIG9yIGJ5IGEgcXVhbnRpZmllciB3aXRoIGEKK21pbmltdW0gb2YgemVyby4KKy5QCitCYWNrIHJlZmVyZW5jZXMgb2YgdGhpcyB0eXBlIGNhdXNlIHRoZSBncm91cCB0aGF0IHRoZXkgcmVmZXJlbmNlIHRvIGJlIHRyZWF0ZWQKK2FzIGFuCisuXCIgSFRNTCA8YSBocmVmPSIjYXRvbWljZ3JvdXAiPgorLlwiIDwvYT4KK2F0b21pYyBncm91cC4KKy5cIgorT25jZSB0aGUgd2hvbGUgZ3JvdXAgaGFzIGJlZW4gbWF0Y2hlZCwgYSBzdWJzZXF1ZW50IG1hdGNoaW5nIGZhaWx1cmUgY2Fubm90CitjYXVzZSBiYWNrdHJhY2tpbmcgaW50byB0aGUgbWlkZGxlIG9mIHRoZSBncm91cC4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9ImJpZ2Fzc2VydGlvbnMiPjwvYT4KKy5TSCBBU1NFUlRJT05TCisucnMKKy5zcAorQW4gYXNzZXJ0aW9uIGlzIGEgdGVzdCBvbiB0aGUgY2hhcmFjdGVycyBmb2xsb3dpbmcgb3IgcHJlY2VkaW5nIHRoZSBjdXJyZW50CittYXRjaGluZyBwb2ludCB0aGF0IGRvZXMgbm90IGNvbnN1bWUgYW55IGNoYXJhY3RlcnMuIFRoZSBzaW1wbGUgYXNzZXJ0aW9ucworY29kZWQgYXMgXGViLCBcZUIsIFxlQSwgXGVHLCBcZVosIFxleiwgXiBhbmQgJCBhcmUgZGVzY3JpYmVkCisuXCIgSFRNTCA8YSBocmVmPSIjc21hbGxhc3NlcnRpb25zIj4KKy5cIiA8L2E+CithYm92ZS4KKy5cIgorLlAKK01vcmUgY29tcGxpY2F0ZWQgYXNzZXJ0aW9ucyBhcmUgY29kZWQgYXMgc3VicGF0dGVybnMuIFRoZXJlIGFyZSB0d28ga2luZHM6Cit0aG9zZSB0aGF0IGxvb2sgYWhlYWQgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN1YmplY3Qgc3RyaW5nLCBhbmQgdGhvc2UKK3RoYXQgbG9vayBiZWhpbmQgaXQuIEFuIGFzc2VydGlvbiBzdWJwYXR0ZXJuIGlzIG1hdGNoZWQgaW4gdGhlIG5vcm1hbCB3YXksCitleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBjYXVzZSB0aGUgY3VycmVudCBtYXRjaGluZyBwb3NpdGlvbiB0byBiZSBjaGFuZ2VkLgorLlAKK0Fzc2VydGlvbiBzdWJwYXR0ZXJucyBhcmUgbm90IGNhcHR1cmluZyBzdWJwYXR0ZXJucy4gSWYgc3VjaCBhbiBhc3NlcnRpb24KK2NvbnRhaW5zIGNhcHR1cmluZyBzdWJwYXR0ZXJucyB3aXRoaW4gaXQsIHRoZXNlIGFyZSBjb3VudGVkIGZvciB0aGUgcHVycG9zZXMgb2YKK251bWJlcmluZyB0aGUgY2FwdHVyaW5nIHN1YnBhdHRlcm5zIGluIHRoZSB3aG9sZSBwYXR0ZXJuLiBIb3dldmVyLCBzdWJzdHJpbmcKK2NhcHR1cmluZyBpcyBjYXJyaWVkIG91dCBvbmx5IGZvciBwb3NpdGl2ZSBhc3NlcnRpb25zLiAoUGVybCBzb21ldGltZXMsIGJ1dCBub3QKK2Fsd2F5cywgZG9lcyBkbyBjYXB0dXJpbmcgaW4gbmVnYXRpdmUgYXNzZXJ0aW9ucy4pCisuUAorRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLCBtb3N0IGFzc2VydGlvbiBzdWJwYXR0ZXJucyBtYXkgYmUgcmVwZWF0ZWQ7IHRob3VnaAoraXQgbWFrZXMgbm8gc2Vuc2UgdG8gYXNzZXJ0IHRoZSBzYW1lIHRoaW5nIHNldmVyYWwgdGltZXMsIHRoZSBzaWRlIGVmZmVjdCBvZgorY2FwdHVyaW5nIHBhcmVudGhlc2VzIG1heSBvY2Nhc2lvbmFsbHkgYmUgdXNlZnVsLiBIb3dldmVyLCBhbiBhc3NlcnRpb24gdGhhdAorZm9ybXMgdGhlIGNvbmRpdGlvbiBmb3IgYSBjb25kaXRpb25hbCBzdWJwYXR0ZXJuIG1heSBub3QgYmUgcXVhbnRpZmllZC4gSW4KK3ByYWN0aWNlLCBmb3Igb3RoZXIgYXNzZXJ0aW9ucywgdGhlcmUgb25seSB0aHJlZSBjYXNlczoKKy5zcAorKDEpIElmIHRoZSBxdWFudGlmaWVyIGlzIHswfSwgdGhlIGFzc2VydGlvbiBpcyBuZXZlciBvYmV5ZWQgZHVyaW5nIG1hdGNoaW5nLgorSG93ZXZlciwgaXQgbWF5IGNvbnRhaW4gaW50ZXJuYWwgY2FwdHVyaW5nIHBhcmVudGhlc2l6ZWQgZ3JvdXBzIHRoYXQgYXJlIGNhbGxlZAorZnJvbSBlbHNld2hlcmUgdmlhIHRoZQorLlwiIEhUTUwgPGEgaHJlZj0iI3N1YnBhdHRlcm5zYXNzdWJyb3V0aW5lcyI+CisuXCIgPC9hPgorc3Vicm91dGluZSBtZWNoYW5pc20uCisuXCIKKy5zcAorKDIpIElmIHF1YW50aWZpZXIgaXMgezAsbn0gd2hlcmUgbiBpcyBncmVhdGVyIHRoYW4gemVybywgaXQgaXMgdHJlYXRlZCBhcyBpZiBpdAord2VyZSB7MCwxfS4gQXQgcnVuIHRpbWUsIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIG1hdGNoIGlzIHRyaWVkIHdpdGggYW5kCit3aXRob3V0IHRoZSBhc3NlcnRpb24sIHRoZSBvcmRlciBkZXBlbmRpbmcgb24gdGhlIGdyZWVkaW5lc3Mgb2YgdGhlIHF1YW50aWZpZXIuCisuc3AKKygzKSBJZiB0aGUgbWluaW11bSByZXBldGl0aW9uIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB0aGUgcXVhbnRpZmllciBpcyBpZ25vcmVkLgorVGhlIGFzc2VydGlvbiBpcyBvYmV5ZWQganVzdCBvbmNlIHdoZW4gZW5jb3VudGVyZWQgZHVyaW5nIG1hdGNoaW5nLgorLgorLgorLlNTICJMb29rYWhlYWQgYXNzZXJ0aW9ucyIKKy5ycworLnNwCitMb29rYWhlYWQgYXNzZXJ0aW9ucyBzdGFydCB3aXRoICg/PSBmb3IgcG9zaXRpdmUgYXNzZXJ0aW9ucyBhbmQgKD8hIGZvcgorbmVnYXRpdmUgYXNzZXJ0aW9ucy4gRm9yIGV4YW1wbGUsCisuc3AKKyAgXGV3Kyg/PTspCisuc3AKK21hdGNoZXMgYSB3b3JkIGZvbGxvd2VkIGJ5IGEgc2VtaWNvbG9uLCBidXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgc2VtaWNvbG9uIGluCit0aGUgbWF0Y2gsIGFuZAorLnNwCisgIGZvbyg/IWJhcikKKy5zcAorbWF0Y2hlcyBhbnkgb2NjdXJyZW5jZSBvZiAiZm9vIiB0aGF0IGlzIG5vdCBmb2xsb3dlZCBieSAiYmFyIi4gTm90ZSB0aGF0IHRoZQorYXBwYXJlbnRseSBzaW1pbGFyIHBhdHRlcm4KKy5zcAorICAoPyFmb28pYmFyCisuc3AKK2RvZXMgbm90IGZpbmQgYW4gb2NjdXJyZW5jZSBvZiAiYmFyIiB0aGF0IGlzIHByZWNlZGVkIGJ5IHNvbWV0aGluZyBvdGhlciB0aGFuCisiZm9vIjsgaXQgZmluZHMgYW55IG9jY3VycmVuY2Ugb2YgImJhciIgd2hhdHNvZXZlciwgYmVjYXVzZSB0aGUgYXNzZXJ0aW9uCisoPyFmb28pIGlzIGFsd2F5cyB0cnVlIHdoZW4gdGhlIG5leHQgdGhyZWUgY2hhcmFjdGVycyBhcmUgImJhciIuIEEKK2xvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIG5lZWRlZCB0byBhY2hpZXZlIHRoZSBvdGhlciBlZmZlY3QuCisuUAorSWYgeW91IHdhbnQgdG8gZm9yY2UgYSBtYXRjaGluZyBmYWlsdXJlIGF0IHNvbWUgcG9pbnQgaW4gYSBwYXR0ZXJuLCB0aGUgbW9zdAorY29udmVuaWVudCB3YXkgdG8gZG8gaXQgaXMgd2l0aCAoPyEpIGJlY2F1c2UgYW4gZW1wdHkgc3RyaW5nIGFsd2F5cyBtYXRjaGVzLCBzbworYW4gYXNzZXJ0aW9uIHRoYXQgcmVxdWlyZXMgdGhlcmUgbm90IHRvIGJlIGFuIGVtcHR5IHN0cmluZyBtdXN0IGFsd2F5cyBmYWlsLgorVGhlIGJhY2t0cmFja2luZyBjb250cm9sIHZlcmIgKCpGQUlMKSBvciAoKkYpIGlzIGEgc3lub255bSBmb3IgKD8hKS4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9Imxvb2tiZWhpbmQiPjwvYT4KKy5TUyAiTG9va2JlaGluZCBhc3NlcnRpb25zIgorLnJzCisuc3AKK0xvb2tiZWhpbmQgYXNzZXJ0aW9ucyBzdGFydCB3aXRoICg/PD0gZm9yIHBvc2l0aXZlIGFzc2VydGlvbnMgYW5kICg/PCEgZm9yCituZWdhdGl2ZSBhc3NlcnRpb25zLiBGb3IgZXhhbXBsZSwKKy5zcAorICAoPzwhZm9vKWJhcgorLnNwCitkb2VzIGZpbmQgYW4gb2NjdXJyZW5jZSBvZiAiYmFyIiB0aGF0IGlzIG5vdCBwcmVjZWRlZCBieSAiZm9vIi4gVGhlIGNvbnRlbnRzIG9mCithIGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGFyZSByZXN0cmljdGVkIHN1Y2ggdGhhdCBhbGwgdGhlIHN0cmluZ3MgaXQgbWF0Y2hlcyBtdXN0CitoYXZlIGEgZml4ZWQgbGVuZ3RoLiBIb3dldmVyLCBpZiB0aGVyZSBhcmUgc2V2ZXJhbCB0b3AtbGV2ZWwgYWx0ZXJuYXRpdmVzLCB0aGV5CitkbyBub3QgYWxsIGhhdmUgdG8gaGF2ZSB0aGUgc2FtZSBmaXhlZCBsZW5ndGguIFRodXMKKy5zcAorICAoPzw9YnVsbG9ja3xkb25rZXkpCisuc3AKK2lzIHBlcm1pdHRlZCwgYnV0Cisuc3AKKyAgKD88IWRvZ3M/fGNhdHM/KQorLnNwCitjYXVzZXMgYW4gZXJyb3IgYXQgY29tcGlsZSB0aW1lLiBCcmFuY2hlcyB0aGF0IG1hdGNoIGRpZmZlcmVudCBsZW5ndGggc3RyaW5ncworYXJlIHBlcm1pdHRlZCBvbmx5IGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBsb29rYmVoaW5kIGFzc2VydGlvbi4gVGhpcyBpcyBhbgorZXh0ZW5zaW9uIGNvbXBhcmVkIHdpdGggUGVybCwgd2hpY2ggcmVxdWlyZXMgYWxsIGJyYW5jaGVzIHRvIG1hdGNoIHRoZSBzYW1lCitsZW5ndGggb2Ygc3RyaW5nLiBBbiBhc3NlcnRpb24gc3VjaCBhcworLnNwCisgICg/PD1hYihjfGRlKSkKKy5zcAoraXMgbm90IHBlcm1pdHRlZCwgYmVjYXVzZSBpdHMgc2luZ2xlIHRvcC1sZXZlbCBicmFuY2ggY2FuIG1hdGNoIHR3byBkaWZmZXJlbnQKK2xlbmd0aHMsIGJ1dCBpdCBpcyBhY2NlcHRhYmxlIHRvIFBDUkUyIGlmIHJld3JpdHRlbiB0byB1c2UgdHdvIHRvcC1sZXZlbAorYnJhbmNoZXM6Cisuc3AKKyAgKD88PWFiY3xhYmRlKQorLnNwCitJbiBzb21lIGNhc2VzLCB0aGUgZXNjYXBlIHNlcXVlbmNlIFxlSworLlwiIEhUTUwgPGEgaHJlZj0iI3Jlc2V0bWF0Y2hzdGFydCI+CisuXCIgPC9hPgorKHNlZSBhYm92ZSkKKy5cIgorY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIGxvb2tiZWhpbmQgYXNzZXJ0aW9uIHRvIGdldCByb3VuZCB0aGUgZml4ZWQtbGVuZ3RoCityZXN0cmljdGlvbi4KKy5QCitUaGUgaW1wbGVtZW50YXRpb24gb2YgbG9va2JlaGluZCBhc3NlcnRpb25zIGlzLCBmb3IgZWFjaCBhbHRlcm5hdGl2ZSwgdG8KK3RlbXBvcmFyaWx5IG1vdmUgdGhlIGN1cnJlbnQgcG9zaXRpb24gYmFjayBieSB0aGUgZml4ZWQgbGVuZ3RoIGFuZCB0aGVuIHRyeSB0bworbWF0Y2guIElmIHRoZXJlIGFyZSBpbnN1ZmZpY2llbnQgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGN1cnJlbnQgcG9zaXRpb24sIHRoZQorYXNzZXJ0aW9uIGZhaWxzLgorLlAKK0luIGEgVVRGIG1vZGUsIFBDUkUyIGRvZXMgbm90IGFsbG93IHRoZSBcZUMgZXNjYXBlICh3aGljaCBtYXRjaGVzIGEgc2luZ2xlIGNvZGUKK3VuaXQgZXZlbiBpbiBhIFVURiBtb2RlKSB0byBhcHBlYXIgaW4gbG9va2JlaGluZCBhc3NlcnRpb25zLCBiZWNhdXNlIGl0IG1ha2VzCitpdCBpbXBvc3NpYmxlIHRvIGNhbGN1bGF0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBsb29rYmVoaW5kLiBUaGUgXGVYIGFuZCBcZVIKK2VzY2FwZXMsIHdoaWNoIGNhbiBtYXRjaCBkaWZmZXJlbnQgbnVtYmVycyBvZiBjb2RlIHVuaXRzLCBhcmUgYWxzbyBub3QKK3Blcm1pdHRlZC4KKy5QCisuXCIgSFRNTCA8YSBocmVmPSIjc3VicGF0dGVybnNhc3N1YnJvdXRpbmVzIj4KKy5cIiA8L2E+CisiU3Vicm91dGluZSIKKy5cIgorY2FsbHMgKHNlZSBiZWxvdykgc3VjaCBhcyAoPzIpIG9yICg/JlgpIGFyZSBwZXJtaXR0ZWQgaW4gbG9va2JlaGluZHMsIGFzIGxvbmcKK2FzIHRoZSBzdWJwYXR0ZXJuIG1hdGNoZXMgYSBmaXhlZC1sZW5ndGggc3RyaW5nLgorLlwiIEhUTUwgPGEgaHJlZj0iI3JlY3Vyc2lvbiI+CisuXCIgPC9hPgorUmVjdXJzaW9uLAorLlwiCitob3dldmVyLCBpcyBub3Qgc3VwcG9ydGVkLgorLlAKK1Bvc3Nlc3NpdmUgcXVhbnRpZmllcnMgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBsb29rYmVoaW5kIGFzc2VydGlvbnMgdG8KK3NwZWNpZnkgZWZmaWNpZW50IG1hdGNoaW5nIG9mIGZpeGVkLWxlbmd0aCBzdHJpbmdzIGF0IHRoZSBlbmQgb2Ygc3ViamVjdAorc3RyaW5ncy4gQ29uc2lkZXIgYSBzaW1wbGUgcGF0dGVybiBzdWNoIGFzCisuc3AKKyAgYWJjZCQKKy5zcAord2hlbiBhcHBsaWVkIHRvIGEgbG9uZyBzdHJpbmcgdGhhdCBkb2VzIG5vdCBtYXRjaC4gQmVjYXVzZSBtYXRjaGluZyBwcm9jZWVkcworZnJvbSBsZWZ0IHRvIHJpZ2h0LCBQQ1JFMiB3aWxsIGxvb2sgZm9yIGVhY2ggImEiIGluIHRoZSBzdWJqZWN0IGFuZCB0aGVuIHNlZSBpZgord2hhdCBmb2xsb3dzIG1hdGNoZXMgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4uIElmIHRoZSBwYXR0ZXJuIGlzIHNwZWNpZmllZCBhcworLnNwCisgIF4uKmFiY2QkCisuc3AKK3RoZSBpbml0aWFsIC4qIG1hdGNoZXMgdGhlIGVudGlyZSBzdHJpbmcgYXQgZmlyc3QsIGJ1dCB3aGVuIHRoaXMgZmFpbHMgKGJlY2F1c2UKK3RoZXJlIGlzIG5vIGZvbGxvd2luZyAiYSIpLCBpdCBiYWNrdHJhY2tzIHRvIG1hdGNoIGFsbCBidXQgdGhlIGxhc3QgY2hhcmFjdGVyLAordGhlbiBhbGwgYnV0IHRoZSBsYXN0IHR3byBjaGFyYWN0ZXJzLCBhbmQgc28gb24uIE9uY2UgYWdhaW4gdGhlIHNlYXJjaCBmb3IgImEiCitjb3ZlcnMgdGhlIGVudGlyZSBzdHJpbmcsIGZyb20gcmlnaHQgdG8gbGVmdCwgc28gd2UgYXJlIG5vIGJldHRlciBvZmYuIEhvd2V2ZXIsCitpZiB0aGUgcGF0dGVybiBpcyB3cml0dGVuIGFzCisuc3AKKyAgXi4qKyg/PD1hYmNkKQorLnNwCit0aGVyZSBjYW4gYmUgbm8gYmFja3RyYWNraW5nIGZvciB0aGUgLiorIGl0ZW0gYmVjYXVzZSBvZiB0aGUgcG9zc2Vzc2l2ZQorcXVhbnRpZmllcjsgaXQgY2FuIG1hdGNoIG9ubHkgdGhlIGVudGlyZSBzdHJpbmcuIFRoZSBzdWJzZXF1ZW50IGxvb2tiZWhpbmQKK2Fzc2VydGlvbiBkb2VzIGEgc2luZ2xlIHRlc3Qgb24gdGhlIGxhc3QgZm91ciBjaGFyYWN0ZXJzLiBJZiBpdCBmYWlscywgdGhlCittYXRjaCBmYWlscyBpbW1lZGlhdGVseS4gRm9yIGxvbmcgc3RyaW5ncywgdGhpcyBhcHByb2FjaCBtYWtlcyBhIHNpZ25pZmljYW50CitkaWZmZXJlbmNlIHRvIHRoZSBwcm9jZXNzaW5nIHRpbWUuCisuCisuCisuU1MgIlVzaW5nIG11bHRpcGxlIGFzc2VydGlvbnMiCisucnMKKy5zcAorU2V2ZXJhbCBhc3NlcnRpb25zIChvZiBhbnkgc29ydCkgbWF5IG9jY3VyIGluIHN1Y2Nlc3Npb24uIEZvciBleGFtcGxlLAorLnNwCisgICg/PD1cZWR7M30pKD88ITk5OSlmb28KKy5zcAorbWF0Y2hlcyAiZm9vIiBwcmVjZWRlZCBieSB0aHJlZSBkaWdpdHMgdGhhdCBhcmUgbm90ICI5OTkiLiBOb3RpY2UgdGhhdCBlYWNoIG9mCit0aGUgYXNzZXJ0aW9ucyBpcyBhcHBsaWVkIGluZGVwZW5kZW50bHkgYXQgdGhlIHNhbWUgcG9pbnQgaW4gdGhlIHN1YmplY3QKK3N0cmluZy4gRmlyc3QgdGhlcmUgaXMgYSBjaGVjayB0aGF0IHRoZSBwcmV2aW91cyB0aHJlZSBjaGFyYWN0ZXJzIGFyZSBhbGwKK2RpZ2l0cywgYW5kIHRoZW4gdGhlcmUgaXMgYSBjaGVjayB0aGF0IHRoZSBzYW1lIHRocmVlIGNoYXJhY3RlcnMgYXJlIG5vdCAiOTk5Ii4KK1RoaXMgcGF0dGVybiBkb2VzIFxmSW5vdFxmUCBtYXRjaCAiZm9vIiBwcmVjZWRlZCBieSBzaXggY2hhcmFjdGVycywgdGhlIGZpcnN0CitvZiB3aGljaCBhcmUgZGlnaXRzIGFuZCB0aGUgbGFzdCB0aHJlZSBvZiB3aGljaCBhcmUgbm90ICI5OTkiLiBGb3IgZXhhbXBsZSwgaXQKK2RvZXNuJ3QgbWF0Y2ggIjEyM2FiY2ZvbyIuIEEgcGF0dGVybiB0byBkbyB0aGF0IGlzCisuc3AKKyAgKD88PVxlZHszfS4uLikoPzwhOTk5KWZvbworLnNwCitUaGlzIHRpbWUgdGhlIGZpcnN0IGFzc2VydGlvbiBsb29rcyBhdCB0aGUgcHJlY2VkaW5nIHNpeCBjaGFyYWN0ZXJzLCBjaGVja2luZwordGhhdCB0aGUgZmlyc3QgdGhyZWUgYXJlIGRpZ2l0cywgYW5kIHRoZW4gdGhlIHNlY29uZCBhc3NlcnRpb24gY2hlY2tzIHRoYXQgdGhlCitwcmVjZWRpbmcgdGhyZWUgY2hhcmFjdGVycyBhcmUgbm90ICI5OTkiLgorLlAKK0Fzc2VydGlvbnMgY2FuIGJlIG5lc3RlZCBpbiBhbnkgY29tYmluYXRpb24uIEZvciBleGFtcGxlLAorLnNwCisgICg/PD0oPzwhZm9vKWJhciliYXoKKy5zcAorbWF0Y2hlcyBhbiBvY2N1cnJlbmNlIG9mICJiYXoiIHRoYXQgaXMgcHJlY2VkZWQgYnkgImJhciIgd2hpY2ggaW4gdHVybiBpcyBub3QKK3ByZWNlZGVkIGJ5ICJmb28iLCB3aGlsZQorLnNwCisgICg/PD1cZWR7M30oPyE5OTkpLi4uKWZvbworLnNwCitpcyBhbm90aGVyIHBhdHRlcm4gdGhhdCBtYXRjaGVzICJmb28iIHByZWNlZGVkIGJ5IHRocmVlIGRpZ2l0cyBhbmQgYW55IHRocmVlCitjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCAiOTk5Ii4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9ImNvbmRpdGlvbnMiPjwvYT4KKy5TSCAiQ09ORElUSU9OQUwgU1VCUEFUVEVSTlMiCisucnMKKy5zcAorSXQgaXMgcG9zc2libGUgdG8gY2F1c2UgdGhlIG1hdGNoaW5nIHByb2Nlc3MgdG8gb2JleSBhIHN1YnBhdHRlcm4KK2NvbmRpdGlvbmFsbHkgb3IgdG8gY2hvb3NlIGJldHdlZW4gdHdvIGFsdGVybmF0aXZlIHN1YnBhdHRlcm5zLCBkZXBlbmRpbmcgb24KK3RoZSByZXN1bHQgb2YgYW4gYXNzZXJ0aW9uLCBvciB3aGV0aGVyIGEgc3BlY2lmaWMgY2FwdHVyaW5nIHN1YnBhdHRlcm4gaGFzCithbHJlYWR5IGJlZW4gbWF0Y2hlZC4gVGhlIHR3byBwb3NzaWJsZSBmb3JtcyBvZiBjb25kaXRpb25hbCBzdWJwYXR0ZXJuIGFyZToKKy5zcAorICAoPyhjb25kaXRpb24peWVzLXBhdHRlcm4pCisgICg/KGNvbmRpdGlvbil5ZXMtcGF0dGVybnxuby1wYXR0ZXJuKQorLnNwCitJZiB0aGUgY29uZGl0aW9uIGlzIHNhdGlzZmllZCwgdGhlIHllcy1wYXR0ZXJuIGlzIHVzZWQ7IG90aGVyd2lzZSB0aGUKK25vLXBhdHRlcm4gKGlmIHByZXNlbnQpIGlzIHVzZWQuIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gdHdvIGFsdGVybmF0aXZlcyBpbiB0aGUKK3N1YnBhdHRlcm4sIGEgY29tcGlsZS10aW1lIGVycm9yIG9jY3Vycy4gRWFjaCBvZiB0aGUgdHdvIGFsdGVybmF0aXZlcyBtYXkKK2l0c2VsZiBjb250YWluIG5lc3RlZCBzdWJwYXR0ZXJucyBvZiBhbnkgZm9ybSwgaW5jbHVkaW5nIGNvbmRpdGlvbmFsCitzdWJwYXR0ZXJuczsgdGhlIHJlc3RyaWN0aW9uIHRvIHR3byBhbHRlcm5hdGl2ZXMgYXBwbGllcyBvbmx5IGF0IHRoZSBsZXZlbCBvZgordGhlIGNvbmRpdGlvbi4gVGhpcyBwYXR0ZXJuIGZyYWdtZW50IGlzIGFuIGV4YW1wbGUgd2hlcmUgdGhlIGFsdGVybmF0aXZlcyBhcmUKK2NvbXBsZXg6Cisuc3AKKyAgKD8oMSkgKEF8QnxDKSB8IChEIHwgKD8oMilFfEYpIHwgRSkgKQorLnNwCisuUAorVGhlcmUgYXJlIGZpdmUga2luZHMgb2YgY29uZGl0aW9uOiByZWZlcmVuY2VzIHRvIHN1YnBhdHRlcm5zLCByZWZlcmVuY2VzIHRvCityZWN1cnNpb24sIHR3byBwc2V1ZG8tY29uZGl0aW9ucyBjYWxsZWQgREVGSU5FIGFuZCBWRVJTSU9OLCBhbmQgYXNzZXJ0aW9ucy4KKy4KKy4KKy5TUyAiQ2hlY2tpbmcgZm9yIGEgdXNlZCBzdWJwYXR0ZXJuIGJ5IG51bWJlciIKKy5ycworLnNwCitJZiB0aGUgdGV4dCBiZXR3ZWVuIHRoZSBwYXJlbnRoZXNlcyBjb25zaXN0cyBvZiBhIHNlcXVlbmNlIG9mIGRpZ2l0cywgdGhlCitjb25kaXRpb24gaXMgdHJ1ZSBpZiBhIGNhcHR1cmluZyBzdWJwYXR0ZXJuIG9mIHRoYXQgbnVtYmVyIGhhcyBwcmV2aW91c2x5CittYXRjaGVkLiBJZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGNhcHR1cmluZyBzdWJwYXR0ZXJuIHdpdGggdGhlIHNhbWUgbnVtYmVyCisoc2VlIHRoZSBlYXJsaWVyCisuXCIKKy5cIiBIVE1MIDxhIGhyZWY9IiNyZWN1cnNpb24iPgorLlwiIDwvYT4KK3NlY3Rpb24gYWJvdXQgZHVwbGljYXRlIHN1YnBhdHRlcm4gbnVtYmVycyksCisuXCIKK3RoZSBjb25kaXRpb24gaXMgdHJ1ZSBpZiBhbnkgb2YgdGhlbSBoYXZlIG1hdGNoZWQuIEFuIGFsdGVybmF0aXZlIG5vdGF0aW9uIGlzCit0byBwcmVjZWRlIHRoZSBkaWdpdHMgd2l0aCBhIHBsdXMgb3IgbWludXMgc2lnbi4gSW4gdGhpcyBjYXNlLCB0aGUgc3VicGF0dGVybgorbnVtYmVyIGlzIHJlbGF0aXZlIHJhdGhlciB0aGFuIGFic29sdXRlLiBUaGUgbW9zdCByZWNlbnRseSBvcGVuZWQgcGFyZW50aGVzZXMKK2NhbiBiZSByZWZlcmVuY2VkIGJ5ICg/KC0xKSwgdGhlIG5leHQgbW9zdCByZWNlbnQgYnkgKD8oLTIpLCBhbmQgc28gb24uIEluc2lkZQorbG9vcHMgaXQgY2FuIGFsc28gbWFrZSBzZW5zZSB0byByZWZlciB0byBzdWJzZXF1ZW50IGdyb3Vwcy4gVGhlIG5leHQKK3BhcmVudGhlc2VzIHRvIGJlIG9wZW5lZCBjYW4gYmUgcmVmZXJlbmNlZCBhcyAoPygrMSksIGFuZCBzbyBvbi4gKFRoZSB2YWx1ZQoremVybyBpbiBhbnkgb2YgdGhlc2UgZm9ybXMgaXMgbm90IHVzZWQ7IGl0IHByb3Zva2VzIGEgY29tcGlsZS10aW1lIGVycm9yLikKKy5QCitDb25zaWRlciB0aGUgZm9sbG93aW5nIHBhdHRlcm4sIHdoaWNoIGNvbnRhaW5zIG5vbi1zaWduaWZpY2FudCB3aGl0ZSBzcGFjZSB0bworbWFrZSBpdCBtb3JlIHJlYWRhYmxlIChhc3N1bWUgdGhlIFBDUkUyX0VYVEVOREVEIG9wdGlvbikgYW5kIHRvIGRpdmlkZSBpdCBpbnRvCit0aHJlZSBwYXJ0cyBmb3IgZWFzZSBvZiBkaXNjdXNzaW9uOgorLnNwCisgICggXGUoICk/ICAgIFteKCldKyAgICAoPygxKSBcZSkgKQorLnNwCitUaGUgZmlyc3QgcGFydCBtYXRjaGVzIGFuIG9wdGlvbmFsIG9wZW5pbmcgcGFyZW50aGVzaXMsIGFuZCBpZiB0aGF0CitjaGFyYWN0ZXIgaXMgcHJlc2VudCwgc2V0cyBpdCBhcyB0aGUgZmlyc3QgY2FwdHVyZWQgc3Vic3RyaW5nLiBUaGUgc2Vjb25kIHBhcnQKK21hdGNoZXMgb25lIG9yIG1vcmUgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgcGFyZW50aGVzZXMuIFRoZSB0aGlyZCBwYXJ0IGlzIGEKK2NvbmRpdGlvbmFsIHN1YnBhdHRlcm4gdGhhdCB0ZXN0cyB3aGV0aGVyIG9yIG5vdCB0aGUgZmlyc3Qgc2V0IG9mIHBhcmVudGhlc2VzCittYXRjaGVkLiBJZiB0aGV5IGRpZCwgdGhhdCBpcywgaWYgc3ViamVjdCBzdGFydGVkIHdpdGggYW4gb3BlbmluZyBwYXJlbnRoZXNpcywKK3RoZSBjb25kaXRpb24gaXMgdHJ1ZSwgYW5kIHNvIHRoZSB5ZXMtcGF0dGVybiBpcyBleGVjdXRlZCBhbmQgYSBjbG9zaW5nCitwYXJlbnRoZXNpcyBpcyByZXF1aXJlZC4gT3RoZXJ3aXNlLCBzaW5jZSBuby1wYXR0ZXJuIGlzIG5vdCBwcmVzZW50LCB0aGUKK3N1YnBhdHRlcm4gbWF0Y2hlcyBub3RoaW5nLiBJbiBvdGhlciB3b3JkcywgdGhpcyBwYXR0ZXJuIG1hdGNoZXMgYSBzZXF1ZW5jZSBvZgorbm9uLXBhcmVudGhlc2VzLCBvcHRpb25hbGx5IGVuY2xvc2VkIGluIHBhcmVudGhlc2VzLgorLlAKK0lmIHlvdSB3ZXJlIGVtYmVkZGluZyB0aGlzIHBhdHRlcm4gaW4gYSBsYXJnZXIgb25lLCB5b3UgY291bGQgdXNlIGEgcmVsYXRpdmUKK3JlZmVyZW5jZToKKy5zcAorICAuLi5vdGhlciBzdHVmZi4uLiAoIFxlKCApPyAgICBbXigpXSsgICAgKD8oLTEpIFxlKSApIC4uLgorLnNwCitUaGlzIG1ha2VzIHRoZSBmcmFnbWVudCBpbmRlcGVuZGVudCBvZiB0aGUgcGFyZW50aGVzZXMgaW4gdGhlIGxhcmdlciBwYXR0ZXJuLgorLgorLgorLlNTICJDaGVja2luZyBmb3IgYSB1c2VkIHN1YnBhdHRlcm4gYnkgbmFtZSIKKy5ycworLnNwCitQZXJsIHVzZXMgdGhlIHN5bnRheCAoPyg8bmFtZT4pLi4uKSBvciAoPygnbmFtZScpLi4uKSB0byB0ZXN0IGZvciBhIHVzZWQKK3N1YnBhdHRlcm4gYnkgbmFtZS4gRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIFBDUkUxLCB3aGljaCBoYWQKK3RoaXMgZmFjaWxpdHkgYmVmb3JlIFBlcmwsIHRoZSBzeW50YXggKD8obmFtZSkuLi4pIGlzIGFsc28gcmVjb2duaXplZC4KKy5QCitSZXdyaXRpbmcgdGhlIGFib3ZlIGV4YW1wbGUgdG8gdXNlIGEgbmFtZWQgc3VicGF0dGVybiBnaXZlcyB0aGlzOgorLnNwCisgICg/PE9QRU4+IFxlKCApPyAgICBbXigpXSsgICAgKD8oPE9QRU4+KSBcZSkgKQorLnNwCitJZiB0aGUgbmFtZSB1c2VkIGluIGEgY29uZGl0aW9uIG9mIHRoaXMga2luZCBpcyBhIGR1cGxpY2F0ZSwgdGhlIHRlc3QgaXMKK2FwcGxpZWQgdG8gYWxsIHN1YnBhdHRlcm5zIG9mIHRoZSBzYW1lIG5hbWUsIGFuZCBpcyB0cnVlIGlmIGFueSBvbmUgb2YgdGhlbSBoYXMKK21hdGNoZWQuCisuCisuCisuU1MgIkNoZWNraW5nIGZvciBwYXR0ZXJuIHJlY3Vyc2lvbiIKKy5ycworLnNwCitJZiB0aGUgY29uZGl0aW9uIGlzIHRoZSBzdHJpbmcgKFIpLCBhbmQgdGhlcmUgaXMgbm8gc3VicGF0dGVybiB3aXRoIHRoZSBuYW1lIFIsCit0aGUgY29uZGl0aW9uIGlzIHRydWUgaWYgYSByZWN1cnNpdmUgY2FsbCB0byB0aGUgd2hvbGUgcGF0dGVybiBvciBhbnkKK3N1YnBhdHRlcm4gaGFzIGJlZW4gbWFkZS4gSWYgZGlnaXRzIG9yIGEgbmFtZSBwcmVjZWRlZCBieSBhbXBlcnNhbmQgZm9sbG93IHRoZQorbGV0dGVyIFIsIGZvciBleGFtcGxlOgorLnNwCisgICg/KFIzKS4uLikgb3IgKD8oUiZuYW1lKS4uLikKKy5zcAordGhlIGNvbmRpdGlvbiBpcyB0cnVlIGlmIHRoZSBtb3N0IHJlY2VudCByZWN1cnNpb24gaXMgaW50byBhIHN1YnBhdHRlcm4gd2hvc2UKK251bWJlciBvciBuYW1lIGlzIGdpdmVuLiBUaGlzIGNvbmRpdGlvbiBkb2VzIG5vdCBjaGVjayB0aGUgZW50aXJlIHJlY3Vyc2lvbgorc3RhY2suIElmIHRoZSBuYW1lIHVzZWQgaW4gYSBjb25kaXRpb24gb2YgdGhpcyBraW5kIGlzIGEgZHVwbGljYXRlLCB0aGUgdGVzdCBpcworYXBwbGllZCB0byBhbGwgc3VicGF0dGVybnMgb2YgdGhlIHNhbWUgbmFtZSwgYW5kIGlzIHRydWUgaWYgYW55IG9uZSBvZiB0aGVtIGlzCit0aGUgbW9zdCByZWNlbnQgcmVjdXJzaW9uLgorLlAKK0F0ICJ0b3AgbGV2ZWwiLCBhbGwgdGhlc2UgcmVjdXJzaW9uIHRlc3QgY29uZGl0aW9ucyBhcmUgZmFsc2UuCisuXCIgSFRNTCA8YSBocmVmPSIjcmVjdXJzaW9uIj4KKy5cIiA8L2E+CitUaGUgc3ludGF4IGZvciByZWN1cnNpdmUgcGF0dGVybnMKKy5cIgoraXMgZGVzY3JpYmVkIGJlbG93LgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0ic3ViZGVmaW5lIj48L2E+CisuU1MgIkRlZmluaW5nIHN1YnBhdHRlcm5zIGZvciB1c2UgYnkgcmVmZXJlbmNlIG9ubHkiCisucnMKKy5zcAorSWYgdGhlIGNvbmRpdGlvbiBpcyB0aGUgc3RyaW5nIChERUZJTkUpLCBhbmQgdGhlcmUgaXMgbm8gc3VicGF0dGVybiB3aXRoIHRoZQorbmFtZSBERUZJTkUsIHRoZSBjb25kaXRpb24gaXMgYWx3YXlzIGZhbHNlLiBJbiB0aGlzIGNhc2UsIHRoZXJlIG1heSBiZSBvbmx5IG9uZQorYWx0ZXJuYXRpdmUgaW4gdGhlIHN1YnBhdHRlcm4uIEl0IGlzIGFsd2F5cyBza2lwcGVkIGlmIGNvbnRyb2wgcmVhY2hlcyB0aGlzCitwb2ludCBpbiB0aGUgcGF0dGVybjsgdGhlIGlkZWEgb2YgREVGSU5FIGlzIHRoYXQgaXQgY2FuIGJlIHVzZWQgdG8gZGVmaW5lCitzdWJyb3V0aW5lcyB0aGF0IGNhbiBiZSByZWZlcmVuY2VkIGZyb20gZWxzZXdoZXJlLiAoVGhlIHVzZSBvZgorLlwiIEhUTUwgPGEgaHJlZj0iI3N1YnBhdHRlcm5zYXNzdWJyb3V0aW5lcyI+CisuXCIgPC9hPgorc3Vicm91dGluZXMKKy5cIgoraXMgZGVzY3JpYmVkIGJlbG93LikgRm9yIGV4YW1wbGUsIGEgcGF0dGVybiB0byBtYXRjaCBhbiBJUHY0IGFkZHJlc3Mgc3VjaCBhcworIjE5Mi4xNjguMjMuMjQ1IiBjb3VsZCBiZSB3cml0dGVuIGxpa2UgdGhpcyAoaWdub3JlIHdoaXRlIHNwYWNlIGFuZCBsaW5lCiticmVha3MpOgorLnNwCisgICg/KERFRklORSkgKD88Ynl0ZT4gMlswLTRdXGVkIHwgMjVbMC01XSB8IDFcZWRcZWQgfCBbMS05XT9cZWQpICkKKyAgXGViICg/JmJ5dGUpIChcZS4oPyZieXRlKSl7M30gXGViCisuc3AKK1RoZSBmaXJzdCBwYXJ0IG9mIHRoZSBwYXR0ZXJuIGlzIGEgREVGSU5FIGdyb3VwIGluc2lkZSB3aGljaCBhIGFub3RoZXIgZ3JvdXAKK25hbWVkICJieXRlIiBpcyBkZWZpbmVkLiBUaGlzIG1hdGNoZXMgYW4gaW5kaXZpZHVhbCBjb21wb25lbnQgb2YgYW4gSVB2NAorYWRkcmVzcyAoYSBudW1iZXIgbGVzcyB0aGFuIDI1NikuIFdoZW4gbWF0Y2hpbmcgdGFrZXMgcGxhY2UsIHRoaXMgcGFydCBvZiB0aGUKK3BhdHRlcm4gaXMgc2tpcHBlZCBiZWNhdXNlIERFRklORSBhY3RzIGxpa2UgYSBmYWxzZSBjb25kaXRpb24uIFRoZSByZXN0IG9mIHRoZQorcGF0dGVybiB1c2VzIHJlZmVyZW5jZXMgdG8gdGhlIG5hbWVkIGdyb3VwIHRvIG1hdGNoIHRoZSBmb3VyIGRvdC1zZXBhcmF0ZWQKK2NvbXBvbmVudHMgb2YgYW4gSVB2NCBhZGRyZXNzLCBpbnNpc3Rpbmcgb24gYSB3b3JkIGJvdW5kYXJ5IGF0IGVhY2ggZW5kLgorLgorLgorLlNTICJDaGVja2luZyB0aGUgUENSRTIgdmVyc2lvbiIKKy5ycworLnNwCitQcm9ncmFtcyB0aGF0IGxpbmsgd2l0aCBhIFBDUkUyIGxpYnJhcnkgY2FuIGNoZWNrIHRoZSB2ZXJzaW9uIGJ5IGNhbGxpbmcKK1xmQnBjcmUyX2NvbmZpZygpXGZQIHdpdGggYXBwcm9wcmlhdGUgYXJndW1lbnRzLiBVc2VycyBvZiBhcHBsaWNhdGlvbnMgdGhhdCBkbworbm90IGhhdmUgYWNjZXNzIHRvIHRoZSB1bmRlcmx5aW5nIGNvZGUgY2Fubm90IGRvIHRoaXMuIEEgc3BlY2lhbCAiY29uZGl0aW9uIgorY2FsbGVkIFZFUlNJT04gZXhpc3RzIHRvIGFsbG93IHN1Y2ggdXNlcnMgdG8gZGlzY292ZXIgd2hpY2ggdmVyc2lvbiBvZiBQQ1JFMgordGhleSBhcmUgZGVhbGluZyB3aXRoIGJ5IHVzaW5nIHRoaXMgY29uZGl0aW9uIHRvIG1hdGNoIGEgc3RyaW5nIHN1Y2ggYXMKKyJ5ZXNubyIuIFZFUlNJT04gbXVzdCBiZSBmb2xsb3dlZCBlaXRoZXIgYnkgIj0iIG9yICI+PSIgYW5kIGEgdmVyc2lvbiBudW1iZXIuCitGb3IgZXhhbXBsZToKKy5zcAorICAoPyhWRVJTSU9OPj0xMC40KXllc3xubykKKy5zcAorVGhpcyBwYXR0ZXJuIG1hdGNoZXMgInllcyIgaWYgdGhlIFBDUkUyIHZlcnNpb24gaXMgZ3JlYXRlciBvciBlcXVhbCB0byAxMC40LCBvcgorIm5vIiBvdGhlcndpc2UuIFRoZSBmcmFjdGlvbmFsIHBhcnQgb2YgdGhlIHZlcnNpb24gbnVtYmVyIG1heSBub3QgY29udGFpbiBtb3JlCit0aGFuIHR3byBkaWdpdHMuCisuCisuCisuU1MgIkFzc2VydGlvbiBjb25kaXRpb25zIgorLnJzCisuc3AKK0lmIHRoZSBjb25kaXRpb24gaXMgbm90IGluIGFueSBvZiB0aGUgYWJvdmUgZm9ybWF0cywgaXQgbXVzdCBiZSBhbiBhc3NlcnRpb24uCitUaGlzIG1heSBiZSBhIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIGxvb2thaGVhZCBvciBsb29rYmVoaW5kIGFzc2VydGlvbi4gQ29uc2lkZXIKK3RoaXMgcGF0dGVybiwgYWdhaW4gY29udGFpbmluZyBub24tc2lnbmlmaWNhbnQgd2hpdGUgc3BhY2UsIGFuZCB3aXRoIHRoZSB0d28KK2FsdGVybmF0aXZlcyBvbiB0aGUgc2Vjb25kIGxpbmU6Cisuc3AKKyAgKD8oPz1bXmEtel0qW2Etel0pCisgIFxlZHsyfS1bYS16XXszfS1cZWR7Mn0gIHwgIFxlZHsyfS1cZWR7Mn0tXGVkezJ9ICkKKy5zcAorVGhlIGNvbmRpdGlvbiBpcyBhIHBvc2l0aXZlIGxvb2thaGVhZCBhc3NlcnRpb24gdGhhdCBtYXRjaGVzIGFuIG9wdGlvbmFsCitzZXF1ZW5jZSBvZiBub24tbGV0dGVycyBmb2xsb3dlZCBieSBhIGxldHRlci4gSW4gb3RoZXIgd29yZHMsIGl0IHRlc3RzIGZvciB0aGUKK3ByZXNlbmNlIG9mIGF0IGxlYXN0IG9uZSBsZXR0ZXIgaW4gdGhlIHN1YmplY3QuIElmIGEgbGV0dGVyIGlzIGZvdW5kLCB0aGUKK3N1YmplY3QgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoZSBmaXJzdCBhbHRlcm5hdGl2ZTsgb3RoZXJ3aXNlIGl0IGlzIG1hdGNoZWQKK2FnYWluc3QgdGhlIHNlY29uZC4gVGhpcyBwYXR0ZXJuIG1hdGNoZXMgc3RyaW5ncyBpbiBvbmUgb2YgdGhlIHR3byBmb3JtcworZGQtYWFhLWRkIG9yIGRkLWRkLWRkLCB3aGVyZSBhYWEgYXJlIGxldHRlcnMgYW5kIGRkIGFyZSBkaWdpdHMuCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJjb21tZW50cyI+PC9hPgorLlNIIENPTU1FTlRTCisucnMKKy5zcAorVGhlcmUgYXJlIHR3byB3YXlzIG9mIGluY2x1ZGluZyBjb21tZW50cyBpbiBwYXR0ZXJucyB0aGF0IGFyZSBwcm9jZXNzZWQgYnkKK1BDUkUyLiBJbiBib3RoIGNhc2VzLCB0aGUgc3RhcnQgb2YgdGhlIGNvbW1lbnQgbXVzdCBub3QgYmUgaW4gYSBjaGFyYWN0ZXIKK2NsYXNzLCBub3IgaW4gdGhlIG1pZGRsZSBvZiBhbnkgb3RoZXIgc2VxdWVuY2Ugb2YgcmVsYXRlZCBjaGFyYWN0ZXJzIHN1Y2ggYXMKKyg/OiBvciBhIHN1YnBhdHRlcm4gbmFtZSBvciBudW1iZXIuIFRoZSBjaGFyYWN0ZXJzIHRoYXQgbWFrZSB1cCBhIGNvbW1lbnQgcGxheQorbm8gcGFydCBpbiB0aGUgcGF0dGVybiBtYXRjaGluZy4KKy5QCitUaGUgc2VxdWVuY2UgKD8jIG1hcmtzIHRoZSBzdGFydCBvZiBhIGNvbW1lbnQgdGhhdCBjb250aW51ZXMgdXAgdG8gdGhlIG5leHQKK2Nsb3NpbmcgcGFyZW50aGVzaXMuIE5lc3RlZCBwYXJlbnRoZXNlcyBhcmUgbm90IHBlcm1pdHRlZC4gSWYgdGhlCitQQ1JFMl9FWFRFTkRFRCBvcHRpb24gaXMgc2V0LCBhbiB1bmVzY2FwZWQgIyBjaGFyYWN0ZXIgYWxzbyBpbnRyb2R1Y2VzIGEKK2NvbW1lbnQsIHdoaWNoIGluIHRoaXMgY2FzZSBjb250aW51ZXMgdG8gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIG5leHQgbmV3bGluZQorY2hhcmFjdGVyIG9yIGNoYXJhY3RlciBzZXF1ZW5jZSBpbiB0aGUgcGF0dGVybi4gV2hpY2ggY2hhcmFjdGVycyBhcmUKK2ludGVycHJldGVkIGFzIG5ld2xpbmVzIGlzIGNvbnRyb2xsZWQgYnkgYW4gb3B0aW9uIHBhc3NlZCB0byB0aGUgY29tcGlsaW5nCitmdW5jdGlvbiBvciBieSBhIHNwZWNpYWwgc2VxdWVuY2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuLCBhcyBkZXNjcmliZWQgaW4KK3RoZSBzZWN0aW9uIGVudGl0bGVkCisuXCIgSFRNTCA8YSBocmVmPSIjbmV3bGluZXMiPgorLlwiIDwvYT4KKyJOZXdsaW5lIGNvbnZlbnRpb25zIgorLlwiCithYm92ZS4gTm90ZSB0aGF0IHRoZSBlbmQgb2YgdGhpcyB0eXBlIG9mIGNvbW1lbnQgaXMgYSBsaXRlcmFsIG5ld2xpbmUgc2VxdWVuY2UKK2luIHRoZSBwYXR0ZXJuOyBlc2NhcGUgc2VxdWVuY2VzIHRoYXQgaGFwcGVuIHRvIHJlcHJlc2VudCBhIG5ld2xpbmUgZG8gbm90Citjb3VudC4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoaXMgcGF0dGVybiB3aGVuIFBDUkUyX0VYVEVOREVEIGlzIHNldCwgYW5kIHRoZQorZGVmYXVsdCBuZXdsaW5lIGNvbnZlbnRpb24gKGEgc2luZ2xlIGxpbmVmZWVkIGNoYXJhY3RlcikgaXMgaW4gZm9yY2U6Cisuc3AKKyAgYWJjICNjb21tZW50IFxlbiBzdGlsbCBjb21tZW50Cisuc3AKK09uIGVuY291bnRlcmluZyB0aGUgIyBjaGFyYWN0ZXIsIFxmQnBjcmUyX2NvbXBpbGUoKVxmUCBza2lwcyBhbG9uZywgbG9va2luZyBmb3IKK2EgbmV3bGluZSBpbiB0aGUgcGF0dGVybi4gVGhlIHNlcXVlbmNlIFxlbiBpcyBzdGlsbCBsaXRlcmFsIGF0IHRoaXMgc3RhZ2UsIHNvCitpdCBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlIGNvbW1lbnQuIE9ubHkgYW4gYWN0dWFsIGNoYXJhY3RlciB3aXRoIHRoZSBjb2RlIHZhbHVlCisweDBhICh0aGUgZGVmYXVsdCBuZXdsaW5lKSBkb2VzIHNvLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0icmVjdXJzaW9uIj48L2E+CisuU0ggIlJFQ1VSU0lWRSBQQVRURVJOUyIKKy5ycworLnNwCitDb25zaWRlciB0aGUgcHJvYmxlbSBvZiBtYXRjaGluZyBhIHN0cmluZyBpbiBwYXJlbnRoZXNlcywgYWxsb3dpbmcgZm9yCit1bmxpbWl0ZWQgbmVzdGVkIHBhcmVudGhlc2VzLiBXaXRob3V0IHRoZSB1c2Ugb2YgcmVjdXJzaW9uLCB0aGUgYmVzdCB0aGF0IGNhbgorYmUgZG9uZSBpcyB0byB1c2UgYSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyB1cCB0byBzb21lIGZpeGVkIGRlcHRoIG9mIG5lc3RpbmcuIEl0CitpcyBub3QgcG9zc2libGUgdG8gaGFuZGxlIGFuIGFyYml0cmFyeSBuZXN0aW5nIGRlcHRoLgorLlAKK0ZvciBzb21lIHRpbWUsIFBlcmwgaGFzIHByb3ZpZGVkIGEgZmFjaWxpdHkgdGhhdCBhbGxvd3MgcmVndWxhciBleHByZXNzaW9ucyB0bworcmVjdXJzZSAoYW1vbmdzdCBvdGhlciB0aGluZ3MpLiBJdCBkb2VzIHRoaXMgYnkgaW50ZXJwb2xhdGluZyBQZXJsIGNvZGUgaW4gdGhlCitleHByZXNzaW9uIGF0IHJ1biB0aW1lLCBhbmQgdGhlIGNvZGUgY2FuIHJlZmVyIHRvIHRoZSBleHByZXNzaW9uIGl0c2VsZi4gQSBQZXJsCitwYXR0ZXJuIHVzaW5nIGNvZGUgaW50ZXJwb2xhdGlvbiB0byBzb2x2ZSB0aGUgcGFyZW50aGVzZXMgcHJvYmxlbSBjYW4gYmUKK2NyZWF0ZWQgbGlrZSB0aGlzOgorLnNwCisgICRyZSA9IHFye1xlKCAoPzogKD8+W14oKV0rKSB8ICg/cHskcmV9KSApKiBcZSl9eDsKKy5zcAorVGhlICg/cHsuLi59KSBpdGVtIGludGVycG9sYXRlcyBQZXJsIGNvZGUgYXQgcnVuIHRpbWUsIGFuZCBpbiB0aGlzIGNhc2UgcmVmZXJzCityZWN1cnNpdmVseSB0byB0aGUgcGF0dGVybiBpbiB3aGljaCBpdCBhcHBlYXJzLgorLlAKK09idmlvdXNseSwgUENSRTIgY2Fubm90IHN1cHBvcnQgdGhlIGludGVycG9sYXRpb24gb2YgUGVybCBjb2RlLiBJbnN0ZWFkLCBpdAorc3VwcG9ydHMgc3BlY2lhbCBzeW50YXggZm9yIHJlY3Vyc2lvbiBvZiB0aGUgZW50aXJlIHBhdHRlcm4sIGFuZCBhbHNvIGZvcgoraW5kaXZpZHVhbCBzdWJwYXR0ZXJuIHJlY3Vyc2lvbi4gQWZ0ZXIgaXRzIGludHJvZHVjdGlvbiBpbiBQQ1JFMSBhbmQgUHl0aG9uLAordGhpcyBraW5kIG9mIHJlY3Vyc2lvbiB3YXMgc3Vic2VxdWVudGx5IGludHJvZHVjZWQgaW50byBQZXJsIGF0IHJlbGVhc2UgNS4xMC4KKy5QCitBIHNwZWNpYWwgaXRlbSB0aGF0IGNvbnNpc3RzIG9mICg/IGZvbGxvd2VkIGJ5IGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiB6ZXJvIGFuZCBhCitjbG9zaW5nIHBhcmVudGhlc2lzIGlzIGEgcmVjdXJzaXZlIHN1YnJvdXRpbmUgY2FsbCBvZiB0aGUgc3VicGF0dGVybiBvZiB0aGUKK2dpdmVuIG51bWJlciwgcHJvdmlkZWQgdGhhdCBpdCBvY2N1cnMgaW5zaWRlIHRoYXQgc3VicGF0dGVybi4gKElmIG5vdCwgaXQgaXMgYQorLlwiIEhUTUwgPGEgaHJlZj0iI3N1YnBhdHRlcm5zYXNzdWJyb3V0aW5lcyI+CisuXCIgPC9hPgorbm9uLXJlY3Vyc2l2ZSBzdWJyb3V0aW5lCisuXCIKK2NhbGwsIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dCBzZWN0aW9uLikgVGhlIHNwZWNpYWwgaXRlbSAoP1IpIG9yICg/MCkgaXMKK2EgcmVjdXJzaXZlIGNhbGwgb2YgdGhlIGVudGlyZSByZWd1bGFyIGV4cHJlc3Npb24uCisuUAorVGhpcyBQQ1JFMiBwYXR0ZXJuIHNvbHZlcyB0aGUgbmVzdGVkIHBhcmVudGhlc2VzIHByb2JsZW0gKGFzc3VtZSB0aGUKK1BDUkUyX0VYVEVOREVEIG9wdGlvbiBpcyBzZXQgc28gdGhhdCB3aGl0ZSBzcGFjZSBpcyBpZ25vcmVkKToKKy5zcAorICBcZSggKCBbXigpXSsrIHwgKD9SKSApKiBcZSkKKy5zcAorRmlyc3QgaXQgbWF0Y2hlcyBhbiBvcGVuaW5nIHBhcmVudGhlc2lzLiBUaGVuIGl0IG1hdGNoZXMgYW55IG51bWJlciBvZgorc3Vic3RyaW5ncyB3aGljaCBjYW4gZWl0aGVyIGJlIGEgc2VxdWVuY2Ugb2Ygbm9uLXBhcmVudGhlc2VzLCBvciBhIHJlY3Vyc2l2ZQorbWF0Y2ggb2YgdGhlIHBhdHRlcm4gaXRzZWxmICh0aGF0IGlzLCBhIGNvcnJlY3RseSBwYXJlbnRoZXNpemVkIHN1YnN0cmluZykuCitGaW5hbGx5IHRoZXJlIGlzIGEgY2xvc2luZyBwYXJlbnRoZXNpcy4gTm90ZSB0aGUgdXNlIG9mIGEgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyCit0byBhdm9pZCBiYWNrdHJhY2tpbmcgaW50byBzZXF1ZW5jZXMgb2Ygbm9uLXBhcmVudGhlc2VzLgorLlAKK0lmIHRoaXMgd2VyZSBwYXJ0IG9mIGEgbGFyZ2VyIHBhdHRlcm4sIHlvdSB3b3VsZCBub3Qgd2FudCB0byByZWN1cnNlIHRoZSBlbnRpcmUKK3BhdHRlcm4sIHNvIGluc3RlYWQgeW91IGNvdWxkIHVzZSB0aGlzOgorLnNwCisgICggXGUoICggW14oKV0rKyB8ICg/MSkgKSogXGUpICkKKy5zcAorV2UgaGF2ZSBwdXQgdGhlIHBhdHRlcm4gaW50byBwYXJlbnRoZXNlcywgYW5kIGNhdXNlZCB0aGUgcmVjdXJzaW9uIHRvIHJlZmVyIHRvCit0aGVtIGluc3RlYWQgb2YgdGhlIHdob2xlIHBhdHRlcm4uCisuUAorSW4gYSBsYXJnZXIgcGF0dGVybiwga2VlcGluZyB0cmFjayBvZiBwYXJlbnRoZXNpcyBudW1iZXJzIGNhbiBiZSB0cmlja3kuIFRoaXMKK2lzIG1hZGUgZWFzaWVyIGJ5IHRoZSB1c2Ugb2YgcmVsYXRpdmUgcmVmZXJlbmNlcy4gSW5zdGVhZCBvZiAoPzEpIGluIHRoZQorcGF0dGVybiBhYm92ZSB5b3UgY2FuIHdyaXRlICg/LTIpIHRvIHJlZmVyIHRvIHRoZSBzZWNvbmQgbW9zdCByZWNlbnRseSBvcGVuZWQKK3BhcmVudGhlc2VzIHByZWNlZGluZyB0aGUgcmVjdXJzaW9uLiBJbiBvdGhlciB3b3JkcywgYSBuZWdhdGl2ZSBudW1iZXIgY291bnRzCitjYXB0dXJpbmcgcGFyZW50aGVzZXMgbGVmdHdhcmRzIGZyb20gdGhlIHBvaW50IGF0IHdoaWNoIGl0IGlzIGVuY291bnRlcmVkLgorLlAKK0JlIGF3YXJlIGhvd2V2ZXIsIHRoYXQgaWYKKy5cIiBIVE1MIDxhIGhyZWY9IiNkdXBzdWJwYXR0ZXJubnVtYmVyIj4KKy5cIiA8L2E+CitkdXBsaWNhdGUgc3VicGF0dGVybiBudW1iZXJzCisuXCIKK2FyZSBpbiB1c2UsIHJlbGF0aXZlIHJlZmVyZW5jZXMgcmVmZXIgdG8gdGhlIGVhcmxpZXN0IHN1YnBhdHRlcm4gd2l0aCB0aGUKK2FwcHJvcHJpYXRlIG51bWJlci4gQ29uc2lkZXIsIGZvciBleGFtcGxlOgorLnNwCisgICg/fChhKXwoYikpIChjKSAoPy0yKQorLnNwCitUaGUgZmlyc3QgdHdvIGNhcHR1cmluZyBncm91cHMgKGEpIGFuZCAoYikgYXJlIGJvdGggbnVtYmVyZWQgMSwgYW5kIGdyb3VwIChjKQoraXMgbnVtYmVyIDIuIFdoZW4gdGhlIHJlZmVyZW5jZSAoPy0yKSBpcyBlbmNvdW50ZXJlZCwgdGhlIHNlY29uZCBtb3N0IHJlY2VudGx5CitvcGVuZWQgcGFyZW50aGVzZXMgaGFzIHRoZSBudW1iZXIgMSwgYnV0IGl0IGlzIHRoZSBmaXJzdCBzdWNoIGdyb3VwICh0aGUgKGEpCitncm91cCkgdG8gd2hpY2ggdGhlIHJlY3Vyc2lvbiByZWZlcnMuIFRoaXMgd291bGQgYmUgdGhlIHNhbWUgaWYgYW4gYWJzb2x1dGUKK3JlZmVyZW5jZSAoPzEpIHdhcyB1c2VkLiBJbiBvdGhlciB3b3JkcywgcmVsYXRpdmUgcmVmZXJlbmNlcyBhcmUganVzdCBhCitzaG9ydGhhbmQgZm9yIGNvbXB1dGluZyBhIGdyb3VwIG51bWJlci4KKy5QCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHJlZmVyIHRvIHN1YnNlcXVlbnRseSBvcGVuZWQgcGFyZW50aGVzZXMsIGJ5IHdyaXRpbmcKK3JlZmVyZW5jZXMgc3VjaCBhcyAoPysyKS4gSG93ZXZlciwgdGhlc2UgY2Fubm90IGJlIHJlY3Vyc2l2ZSBiZWNhdXNlIHRoZQorcmVmZXJlbmNlIGlzIG5vdCBpbnNpZGUgdGhlIHBhcmVudGhlc2VzIHRoYXQgYXJlIHJlZmVyZW5jZWQuIFRoZXkgYXJlIGFsd2F5cworLlwiIEhUTUwgPGEgaHJlZj0iI3N1YnBhdHRlcm5zYXNzdWJyb3V0aW5lcyI+CisuXCIgPC9hPgorbm9uLXJlY3Vyc2l2ZSBzdWJyb3V0aW5lCisuXCIKK2NhbGxzLCBhcyBkZXNjcmliZWQgaW4gdGhlIG5leHQgc2VjdGlvbi4KKy5QCitBbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byB1c2UgbmFtZWQgcGFyZW50aGVzZXMuIFRoZSBQZXJsIHN5bnRheCBmb3IgdGhpcworaXMgKD8mbmFtZSk7IFBDUkUxJ3MgZWFybGllciBzeW50YXggKD9QPm5hbWUpIGlzIGFsc28gc3VwcG9ydGVkLiBXZSBjb3VsZAorcmV3cml0ZSB0aGUgYWJvdmUgZXhhbXBsZSBhcyBmb2xsb3dzOgorLnNwCisgICg/PHBuPiBcZSggKCBbXigpXSsrIHwgKD8mcG4pICkqIFxlKSApCisuc3AKK0lmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgc3VicGF0dGVybiB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZSBlYXJsaWVzdCBvbmUgaXMKK3VzZWQuCisuUAorVGhlIGV4YW1wbGUgcGF0dGVybiB0aGF0IHdlIGhhdmUgYmVlbiBsb29raW5nIGF0IGNvbnRhaW5zIG5lc3RlZCB1bmxpbWl0ZWQKK3JlcGVhdHMsIGFuZCBzbyB0aGUgdXNlIG9mIGEgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyIGZvciBtYXRjaGluZyBzdHJpbmdzIG9mCitub24tcGFyZW50aGVzZXMgaXMgaW1wb3J0YW50IHdoZW4gYXBwbHlpbmcgdGhlIHBhdHRlcm4gdG8gc3RyaW5ncyB0aGF0IGRvIG5vdAorbWF0Y2guIEZvciBleGFtcGxlLCB3aGVuIHRoaXMgcGF0dGVybiBpcyBhcHBsaWVkIHRvCisuc3AKKyAgKGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhKCkKKy5zcAoraXQgeWllbGRzICJubyBtYXRjaCIgcXVpY2tseS4gSG93ZXZlciwgaWYgYSBwb3NzZXNzaXZlIHF1YW50aWZpZXIgaXMgbm90IHVzZWQsCit0aGUgbWF0Y2ggcnVucyBmb3IgYSB2ZXJ5IGxvbmcgdGltZSBpbmRlZWQgYmVjYXVzZSB0aGVyZSBhcmUgc28gbWFueSBkaWZmZXJlbnQKK3dheXMgdGhlICsgYW5kICogcmVwZWF0cyBjYW4gY2FydmUgdXAgdGhlIHN1YmplY3QsIGFuZCBhbGwgaGF2ZSB0byBiZSB0ZXN0ZWQKK2JlZm9yZSBmYWlsdXJlIGNhbiBiZSByZXBvcnRlZC4KKy5QCitBdCB0aGUgZW5kIG9mIGEgbWF0Y2gsIHRoZSB2YWx1ZXMgb2YgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGFyZSB0aG9zZSBmcm9tCit0aGUgb3V0ZXJtb3N0IGxldmVsLiBJZiB5b3Ugd2FudCB0byBvYnRhaW4gaW50ZXJtZWRpYXRlIHZhbHVlcywgYSBjYWxsb3V0CitmdW5jdGlvbiBjYW4gYmUgdXNlZCAoc2VlIGJlbG93IGFuZCB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmNhbGxvdXRcZlAKKy5cIgorZG9jdW1lbnRhdGlvbikuIElmIHRoZSBwYXR0ZXJuIGFib3ZlIGlzIG1hdGNoZWQgYWdhaW5zdAorLnNwCisgIChhYihjZCllZikKKy5zcAordGhlIHZhbHVlIGZvciB0aGUgaW5uZXIgY2FwdHVyaW5nIHBhcmVudGhlc2VzIChudW1iZXJlZCAyKSBpcyAiZWYiLCB3aGljaCBpcwordGhlIGxhc3QgdmFsdWUgdGFrZW4gb24gYXQgdGhlIHRvcCBsZXZlbC4gSWYgYSBjYXB0dXJpbmcgc3VicGF0dGVybiBpcyBub3QKK21hdGNoZWQgYXQgdGhlIHRvcCBsZXZlbCwgaXRzIGZpbmFsIGNhcHR1cmVkIHZhbHVlIGlzIHVuc2V0LCBldmVuIGlmIGl0IHdhcworKHRlbXBvcmFyaWx5KSBzZXQgYXQgYSBkZWVwZXIgbGV2ZWwgZHVyaW5nIHRoZSBtYXRjaGluZyBwcm9jZXNzLgorLlAKK0lmIHRoZXJlIGFyZSBtb3JlIHRoYW4gMTUgY2FwdHVyaW5nIHBhcmVudGhlc2VzIGluIGEgcGF0dGVybiwgUENSRTIgaGFzIHRvCitvYnRhaW4gZXh0cmEgbWVtb3J5IGZyb20gdGhlIGhlYXAgdG8gc3RvcmUgZGF0YSBkdXJpbmcgYSByZWN1cnNpb24uIElmIG5vCittZW1vcnkgY2FuIGJlIG9idGFpbmVkLCB0aGUgbWF0Y2ggZmFpbHMgd2l0aCB0aGUgUENSRTJfRVJST1JfTk9NRU1PUlkgZXJyb3IuCisuUAorRG8gbm90IGNvbmZ1c2UgdGhlICg/UikgaXRlbSB3aXRoIHRoZSBjb25kaXRpb24gKFIpLCB3aGljaCB0ZXN0cyBmb3IgcmVjdXJzaW9uLgorQ29uc2lkZXIgdGhpcyBwYXR0ZXJuLCB3aGljaCBtYXRjaGVzIHRleHQgaW4gYW5nbGUgYnJhY2tldHMsIGFsbG93aW5nIGZvcgorYXJiaXRyYXJ5IG5lc3RpbmcuIE9ubHkgZGlnaXRzIGFyZSBhbGxvd2VkIGluIG5lc3RlZCBicmFja2V0cyAodGhhdCBpcywgd2hlbgorcmVjdXJzaW5nKSwgd2hlcmVhcyBhbnkgY2hhcmFjdGVycyBhcmUgcGVybWl0dGVkIGF0IHRoZSBvdXRlciBsZXZlbC4KKy5zcAorICA8ICg/OiAoPyhSKSBcZWQrKyAgfCBbXjw+XSorKSB8ICg/UikpICogPgorLnNwCitJbiB0aGlzIHBhdHRlcm4sICg/KFIpIGlzIHRoZSBzdGFydCBvZiBhIGNvbmRpdGlvbmFsIHN1YnBhdHRlcm4sIHdpdGggdHdvCitkaWZmZXJlbnQgYWx0ZXJuYXRpdmVzIGZvciB0aGUgcmVjdXJzaXZlIGFuZCBub24tcmVjdXJzaXZlIGNhc2VzLiBUaGUgKD9SKSBpdGVtCitpcyB0aGUgYWN0dWFsIHJlY3Vyc2l2ZSBjYWxsLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0icmVjdXJzaW9uZGlmZmVyZW5jZSI+PC9hPgorLlNTICJEaWZmZXJlbmNlcyBpbiByZWN1cnNpb24gcHJvY2Vzc2luZyBiZXR3ZWVuIFBDUkUyIGFuZCBQZXJsIgorLnJzCisuc3AKK1JlY3Vyc2lvbiBwcm9jZXNzaW5nIGluIFBDUkUyIGRpZmZlcnMgZnJvbSBQZXJsIGluIHR3byBpbXBvcnRhbnQgd2F5cy4gSW4gUENSRTIKKyhsaWtlIFB5dGhvbiwgYnV0IHVubGlrZSBQZXJsKSwgYSByZWN1cnNpdmUgc3VicGF0dGVybiBjYWxsIGlzIGFsd2F5cyB0cmVhdGVkCithcyBhbiBhdG9taWMgZ3JvdXAuIFRoYXQgaXMsIG9uY2UgaXQgaGFzIG1hdGNoZWQgc29tZSBvZiB0aGUgc3ViamVjdCBzdHJpbmcsIGl0CitpcyBuZXZlciByZS1lbnRlcmVkLCBldmVuIGlmIGl0IGNvbnRhaW5zIHVudHJpZWQgYWx0ZXJuYXRpdmVzIGFuZCB0aGVyZSBpcyBhCitzdWJzZXF1ZW50IG1hdGNoaW5nIGZhaWx1cmUuIFRoaXMgY2FuIGJlIGlsbHVzdHJhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcGF0dGVybiwKK3doaWNoIHB1cnBvcnRzIHRvIG1hdGNoIGEgcGFsaW5kcm9taWMgc3RyaW5nIHRoYXQgY29udGFpbnMgYW4gb2RkIG51bWJlciBvZgorY2hhcmFjdGVycyAoZm9yIGV4YW1wbGUsICJhIiwgImFiYSIsICJhYmNiYSIsICJhYmNkY2JhIik6Cisuc3AKKyAgXigufCguKSg/MSlcZTIpJAorLnNwCitUaGUgaWRlYSBpcyB0aGF0IGl0IGVpdGhlciBtYXRjaGVzIGEgc2luZ2xlIGNoYXJhY3Rlciwgb3IgdHdvIGlkZW50aWNhbAorY2hhcmFjdGVycyBzdXJyb3VuZGluZyBhIHN1Yi1wYWxpbmRyb21lLiBJbiBQZXJsLCB0aGlzIHBhdHRlcm4gd29ya3M7IGluIFBDUkUyCitpdCBkb2VzIG5vdCBpZiB0aGUgcGF0dGVybiBpcyBsb25nZXIgdGhhbiB0aHJlZSBjaGFyYWN0ZXJzLiBDb25zaWRlciB0aGUKK3N1YmplY3Qgc3RyaW5nICJhYmNiYSI6CisuUAorQXQgdGhlIHRvcCBsZXZlbCwgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyBtYXRjaGVkLCBidXQgYXMgaXQgaXMgbm90IGF0IHRoZSBlbmQKK29mIHRoZSBzdHJpbmcsIHRoZSBmaXJzdCBhbHRlcm5hdGl2ZSBmYWlsczsgdGhlIHNlY29uZCBhbHRlcm5hdGl2ZSBpcyB0YWtlbgorYW5kIHRoZSByZWN1cnNpb24ga2lja3MgaW4uIFRoZSByZWN1cnNpdmUgY2FsbCB0byBzdWJwYXR0ZXJuIDEgc3VjY2Vzc2Z1bGx5CittYXRjaGVzIHRoZSBuZXh0IGNoYXJhY3RlciAoImIiKS4gKE5vdGUgdGhhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgbGluZQordGVzdHMgYXJlIG5vdCBwYXJ0IG9mIHRoZSByZWN1cnNpb24pLgorLlAKK0JhY2sgYXQgdGhlIHRvcCBsZXZlbCwgdGhlIG5leHQgY2hhcmFjdGVyICgiYyIpIGlzIGNvbXBhcmVkIHdpdGggd2hhdAorc3VicGF0dGVybiAyIG1hdGNoZWQsIHdoaWNoIHdhcyAiYSIuIFRoaXMgZmFpbHMuIEJlY2F1c2UgdGhlIHJlY3Vyc2lvbiBpcwordHJlYXRlZCBhcyBhbiBhdG9taWMgZ3JvdXAsIHRoZXJlIGFyZSBub3cgbm8gYmFja3RyYWNraW5nIHBvaW50cywgYW5kIHNvIHRoZQorZW50aXJlIG1hdGNoIGZhaWxzLiAoUGVybCBpcyBhYmxlLCBhdCB0aGlzIHBvaW50LCB0byByZS1lbnRlciB0aGUgcmVjdXJzaW9uIGFuZAordHJ5IHRoZSBzZWNvbmQgYWx0ZXJuYXRpdmUuKSBIb3dldmVyLCBpZiB0aGUgcGF0dGVybiBpcyB3cml0dGVuIHdpdGggdGhlCithbHRlcm5hdGl2ZXMgaW4gdGhlIG90aGVyIG9yZGVyLCB0aGluZ3MgYXJlIGRpZmZlcmVudDoKKy5zcAorICBeKCguKSg/MSlcZTJ8LikkCisuc3AKK1RoaXMgdGltZSwgdGhlIHJlY3Vyc2luZyBhbHRlcm5hdGl2ZSBpcyB0cmllZCBmaXJzdCwgYW5kIGNvbnRpbnVlcyB0byByZWN1cnNlCit1bnRpbCBpdCBydW5zIG91dCBvZiBjaGFyYWN0ZXJzLCBhdCB3aGljaCBwb2ludCB0aGUgcmVjdXJzaW9uIGZhaWxzLiBCdXQgdGhpcwordGltZSB3ZSBkbyBoYXZlIGFub3RoZXIgYWx0ZXJuYXRpdmUgdG8gdHJ5IGF0IHRoZSBoaWdoZXIgbGV2ZWwuIFRoYXQgaXMgdGhlIGJpZworZGlmZmVyZW5jZTogaW4gdGhlIHByZXZpb3VzIGNhc2UgdGhlIHJlbWFpbmluZyBhbHRlcm5hdGl2ZSBpcyBhdCBhIGRlZXBlcgorcmVjdXJzaW9uIGxldmVsLCB3aGljaCBQQ1JFMiBjYW5ub3QgdXNlLgorLlAKK1RvIGNoYW5nZSB0aGUgcGF0dGVybiBzbyB0aGF0IGl0IG1hdGNoZXMgYWxsIHBhbGluZHJvbWljIHN0cmluZ3MsIG5vdCBqdXN0Cit0aG9zZSB3aXRoIGFuIG9kZCBudW1iZXIgb2YgY2hhcmFjdGVycywgaXQgaXMgdGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBwYXR0ZXJuIHRvCit0aGlzOgorLnNwCisgIF4oKC4pKD8xKVxlMnwuPykkCisuc3AKK0FnYWluLCB0aGlzIHdvcmtzIGluIFBlcmwsIGJ1dCBub3QgaW4gUENSRTIsIGFuZCBmb3IgdGhlIHNhbWUgcmVhc29uLiBXaGVuIGEKK2RlZXBlciByZWN1cnNpb24gaGFzIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCBpdCBjYW5ub3QgYmUgZW50ZXJlZCBhZ2FpbiBpbgorb3JkZXIgdG8gbWF0Y2ggYW4gZW1wdHkgc3RyaW5nLiBUaGUgc29sdXRpb24gaXMgdG8gc2VwYXJhdGUgdGhlIHR3byBjYXNlcywgYW5kCit3cml0ZSBvdXQgdGhlIG9kZCBhbmQgZXZlbiBjYXNlcyBhcyBhbHRlcm5hdGl2ZXMgYXQgdGhlIGhpZ2hlciBsZXZlbDoKKy5zcAorICBeKD86KCguKSg/MSlcZTJ8KXwoKC4pKD8zKVxlNHwuKSkKKy5zcAorSWYgeW91IHdhbnQgdG8gbWF0Y2ggdHlwaWNhbCBwYWxpbmRyb21pYyBwaHJhc2VzLCB0aGUgcGF0dGVybiBoYXMgdG8gaWdub3JlIGFsbAorbm9uLXdvcmQgY2hhcmFjdGVycywgd2hpY2ggY2FuIGJlIGRvbmUgbGlrZSB0aGlzOgorLnNwCisgIF5cZVcqKyg/OigoLilcZVcqKyg/MSlcZVcqK1xlMnwpfCgoLilcZVcqKyg/MylcZVcqK1xlNHxcZVcqKy5cZVcqKykpXGVXKiskCisuc3AKK0lmIHJ1biB3aXRoIHRoZSBQQ1JFMl9DQVNFTEVTUyBvcHRpb24sIHRoaXMgcGF0dGVybiBtYXRjaGVzIHBocmFzZXMgc3VjaCBhcyAiQQorbWFuLCBhIHBsYW4sIGEgY2FuYWw6IFBhbmFtYSEiIGFuZCBpdCB3b3JrcyBpbiBib3RoIFBDUkUyIGFuZCBQZXJsLiBOb3RlIHRoZQordXNlIG9mIHRoZSBwb3NzZXNzaXZlIHF1YW50aWZpZXIgKisgdG8gYXZvaWQgYmFja3RyYWNraW5nIGludG8gc2VxdWVuY2VzIG9mCitub24td29yZCBjaGFyYWN0ZXJzLiBXaXRob3V0IHRoaXMsIFBDUkUyIHRha2VzIGEgZ3JlYXQgZGVhbCBsb25nZXIgKHRlbiB0aW1lcworb3IgbW9yZSkgdG8gbWF0Y2ggdHlwaWNhbCBwaHJhc2VzLCBhbmQgUGVybCB0YWtlcyBzbyBsb25nIHRoYXQgeW91IHRoaW5rIGl0IGhhcworZ29uZSBpbnRvIGEgbG9vcC4KKy5QCitcZkJXQVJOSU5HXGZQOiBUaGUgcGFsaW5kcm9tZS1tYXRjaGluZyBwYXR0ZXJucyBhYm92ZSB3b3JrIG9ubHkgaWYgdGhlIHN1YmplY3QKK3N0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIGEgcGFsaW5kcm9tZSB0aGF0IGlzIHNob3J0ZXIgdGhhbiB0aGUgZW50aXJlIHN0cmluZy4KK0ZvciBleGFtcGxlLCBhbHRob3VnaCAiYWJjYmEiIGlzIGNvcnJlY3RseSBtYXRjaGVkLCBpZiB0aGUgc3ViamVjdCBpcyAiYWJhYmEiLAorUENSRTIgZmluZHMgdGhlIHBhbGluZHJvbWUgImFiYSIgYXQgdGhlIHN0YXJ0LCB0aGVuIGZhaWxzIGF0IHRvcCBsZXZlbCBiZWNhdXNlCit0aGUgZW5kIG9mIHRoZSBzdHJpbmcgZG9lcyBub3QgZm9sbG93LiBPbmNlIGFnYWluLCBpdCBjYW5ub3QganVtcCBiYWNrIGludG8gdGhlCityZWN1cnNpb24gdG8gdHJ5IG90aGVyIGFsdGVybmF0aXZlcywgc28gdGhlIGVudGlyZSBtYXRjaCBmYWlscy4KKy5QCitUaGUgc2Vjb25kIHdheSBpbiB3aGljaCBQQ1JFMiBhbmQgUGVybCBkaWZmZXIgaW4gdGhlaXIgcmVjdXJzaW9uIHByb2Nlc3NpbmcgaXMKK2luIHRoZSBoYW5kbGluZyBvZiBjYXB0dXJlZCB2YWx1ZXMuIEluIFBlcmwsIHdoZW4gYSBzdWJwYXR0ZXJuIGlzIGNhbGxlZAorcmVjdXJzaXZlbHkgb3IgYXMgYSBzdWJwYXR0ZXJuIChzZWUgdGhlIG5leHQgc2VjdGlvbiksIGl0IGhhcyBubyBhY2Nlc3MgdG8gYW55Cit2YWx1ZXMgdGhhdCB3ZXJlIGNhcHR1cmVkIG91dHNpZGUgdGhlIHJlY3Vyc2lvbiwgd2hlcmVhcyBpbiBQQ1JFMiB0aGVzZSB2YWx1ZXMKK2NhbiBiZSByZWZlcmVuY2VkLiBDb25zaWRlciB0aGlzIHBhdHRlcm46Cisuc3AKKyAgXiguKShcZTF8YSg/MikpCisuc3AKK0luIFBDUkUyLCB0aGlzIHBhdHRlcm4gbWF0Y2hlcyAiYmFiIi4gVGhlIGZpcnN0IGNhcHR1cmluZyBwYXJlbnRoZXNlcyBtYXRjaCAiYiIsCit0aGVuIGluIHRoZSBzZWNvbmQgZ3JvdXAsIHdoZW4gdGhlIGJhY2sgcmVmZXJlbmNlIFxlMSBmYWlscyB0byBtYXRjaCAiYiIsIHRoZQorc2Vjb25kIGFsdGVybmF0aXZlIG1hdGNoZXMgImEiIGFuZCB0aGVuIHJlY3Vyc2VzLiBJbiB0aGUgcmVjdXJzaW9uLCBcZTEgZG9lcworbm93IG1hdGNoICJiIiBhbmQgc28gdGhlIHdob2xlIG1hdGNoIHN1Y2NlZWRzLiBJbiBQZXJsLCB0aGUgcGF0dGVybiBmYWlscyB0bworbWF0Y2ggYmVjYXVzZSBpbnNpZGUgdGhlIHJlY3Vyc2l2ZSBjYWxsIFxlMSBjYW5ub3QgYWNjZXNzIHRoZSBleHRlcm5hbGx5IHNldAordmFsdWUuCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJzdWJwYXR0ZXJuc2Fzc3Vicm91dGluZXMiPjwvYT4KKy5TSCAiU1VCUEFUVEVSTlMgQVMgU1VCUk9VVElORVMiCisucnMKKy5zcAorSWYgdGhlIHN5bnRheCBmb3IgYSByZWN1cnNpdmUgc3VicGF0dGVybiBjYWxsIChlaXRoZXIgYnkgbnVtYmVyIG9yIGJ5CituYW1lKSBpcyB1c2VkIG91dHNpZGUgdGhlIHBhcmVudGhlc2VzIHRvIHdoaWNoIGl0IHJlZmVycywgaXQgb3BlcmF0ZXMgbGlrZSBhCitzdWJyb3V0aW5lIGluIGEgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuIFRoZSBjYWxsZWQgc3VicGF0dGVybiBtYXkgYmUgZGVmaW5lZAorYmVmb3JlIG9yIGFmdGVyIHRoZSByZWZlcmVuY2UuIEEgbnVtYmVyZWQgcmVmZXJlbmNlIGNhbiBiZSBhYnNvbHV0ZSBvcgorcmVsYXRpdmUsIGFzIGluIHRoZXNlIGV4YW1wbGVzOgorLnNwCisgICguLi4oYWJzb2x1dGUpLi4uKS4uLig/MikuLi4KKyAgKC4uLihyZWxhdGl2ZSkuLi4pLi4uKD8tMSkuLi4KKyAgKC4uLig/KzEpLi4uKHJlbGF0aXZlKS4uLgorLnNwCitBbiBlYXJsaWVyIGV4YW1wbGUgcG9pbnRlZCBvdXQgdGhhdCB0aGUgcGF0dGVybgorLnNwCisgIChzZW5zfHJlc3BvbnMpZSBhbmQgXGUxaWJpbGl0eQorLnNwCittYXRjaGVzICJzZW5zZSBhbmQgc2Vuc2liaWxpdHkiIGFuZCAicmVzcG9uc2UgYW5kIHJlc3BvbnNpYmlsaXR5IiwgYnV0IG5vdAorInNlbnNlIGFuZCByZXNwb25zaWJpbGl0eSIuIElmIGluc3RlYWQgdGhlIHBhdHRlcm4KKy5zcAorICAoc2Vuc3xyZXNwb25zKWUgYW5kICg/MSlpYmlsaXR5Cisuc3AKK2lzIHVzZWQsIGl0IGRvZXMgbWF0Y2ggInNlbnNlIGFuZCByZXNwb25zaWJpbGl0eSIgYXMgd2VsbCBhcyB0aGUgb3RoZXIgdHdvCitzdHJpbmdzLiBBbm90aGVyIGV4YW1wbGUgaXMgZ2l2ZW4gaW4gdGhlIGRpc2N1c3Npb24gb2YgREVGSU5FIGFib3ZlLgorLlAKK0FsbCBzdWJyb3V0aW5lIGNhbGxzLCB3aGV0aGVyIHJlY3Vyc2l2ZSBvciBub3QsIGFyZSBhbHdheXMgdHJlYXRlZCBhcyBhdG9taWMKK2dyb3Vwcy4gVGhhdCBpcywgb25jZSBhIHN1YnJvdXRpbmUgaGFzIG1hdGNoZWQgc29tZSBvZiB0aGUgc3ViamVjdCBzdHJpbmcsIGl0CitpcyBuZXZlciByZS1lbnRlcmVkLCBldmVuIGlmIGl0IGNvbnRhaW5zIHVudHJpZWQgYWx0ZXJuYXRpdmVzIGFuZCB0aGVyZSBpcyBhCitzdWJzZXF1ZW50IG1hdGNoaW5nIGZhaWx1cmUuIEFueSBjYXB0dXJpbmcgcGFyZW50aGVzZXMgdGhhdCBhcmUgc2V0IGR1cmluZyB0aGUKK3N1YnJvdXRpbmUgY2FsbCByZXZlcnQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIGFmdGVyd2FyZHMuCisuUAorUHJvY2Vzc2luZyBvcHRpb25zIHN1Y2ggYXMgY2FzZS1pbmRlcGVuZGVuY2UgYXJlIGZpeGVkIHdoZW4gYSBzdWJwYXR0ZXJuIGlzCitkZWZpbmVkLCBzbyBpZiBpdCBpcyB1c2VkIGFzIGEgc3Vicm91dGluZSwgc3VjaCBvcHRpb25zIGNhbm5vdCBiZSBjaGFuZ2VkIGZvcgorZGlmZmVyZW50IGNhbGxzLiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBwYXR0ZXJuOgorLnNwCisgIChhYmMpKD9pOig/LTEpKQorLnNwCitJdCBtYXRjaGVzICJhYmNhYmMiLiBJdCBkb2VzIG5vdCBtYXRjaCAiYWJjQUJDIiBiZWNhdXNlIHRoZSBjaGFuZ2Ugb2YKK3Byb2Nlc3Npbmcgb3B0aW9uIGRvZXMgbm90IGFmZmVjdCB0aGUgY2FsbGVkIHN1YnBhdHRlcm4uCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJvbmlndXJ1bWFzdWJyb3V0aW5lcyI+PC9hPgorLlNIICJPTklHVVJVTUEgU1VCUk9VVElORSBTWU5UQVgiCisucnMKKy5zcAorRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBPbmlndXJ1bWEsIHRoZSBub24tUGVybCBzeW50YXggXGVnIGZvbGxvd2VkIGJ5IGEgbmFtZSBvcgorYSBudW1iZXIgZW5jbG9zZWQgZWl0aGVyIGluIGFuZ2xlIGJyYWNrZXRzIG9yIHNpbmdsZSBxdW90ZXMsIGlzIGFuIGFsdGVybmF0aXZlCitzeW50YXggZm9yIHJlZmVyZW5jaW5nIGEgc3VicGF0dGVybiBhcyBhIHN1YnJvdXRpbmUsIHBvc3NpYmx5IHJlY3Vyc2l2ZWx5LiBIZXJlCithcmUgdHdvIG9mIHRoZSBleGFtcGxlcyB1c2VkIGFib3ZlLCByZXdyaXR0ZW4gdXNpbmcgdGhpcyBzeW50YXg6Cisuc3AKKyAgKD88cG4+IFxlKCAoICg/PlteKCldKykgfCBcZWc8cG4+ICkqIFxlKSApCisgIChzZW5zfHJlc3BvbnMpZSBhbmQgXGVnJzEnaWJpbGl0eQorLnNwCitQQ1JFMiBzdXBwb3J0cyBhbiBleHRlbnNpb24gdG8gT25pZ3VydW1hOiBpZiBhIG51bWJlciBpcyBwcmVjZWRlZCBieSBhCitwbHVzIG9yIGEgbWludXMgc2lnbiBpdCBpcyB0YWtlbiBhcyBhIHJlbGF0aXZlIHJlZmVyZW5jZS4gRm9yIGV4YW1wbGU6Cisuc3AKKyAgKGFiYykoP2k6XGVnPC0xPikKKy5zcAorTm90ZSB0aGF0IFxlZ3suLi59IChQZXJsIHN5bnRheCkgYW5kIFxlZzwuLi4+IChPbmlndXJ1bWEgc3ludGF4KSBhcmUgXGZJbm90XGZQCitzeW5vbnltb3VzLiBUaGUgZm9ybWVyIGlzIGEgYmFjayByZWZlcmVuY2U7IHRoZSBsYXR0ZXIgaXMgYSBzdWJyb3V0aW5lIGNhbGwuCisuCisuCisuU0ggQ0FMTE9VVFMKKy5ycworLnNwCitQZXJsIGhhcyBhIGZlYXR1cmUgd2hlcmVieSB1c2luZyB0aGUgc2VxdWVuY2UgKD97Li4ufSkgY2F1c2VzIGFyYml0cmFyeSBQZXJsCitjb2RlIHRvIGJlIG9iZXllZCBpbiB0aGUgbWlkZGxlIG9mIG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uLiBUaGlzIG1ha2VzIGl0Citwb3NzaWJsZSwgYW1vbmdzdCBvdGhlciB0aGluZ3MsIHRvIGV4dHJhY3QgZGlmZmVyZW50IHN1YnN0cmluZ3MgdGhhdCBtYXRjaCB0aGUKK3NhbWUgcGFpciBvZiBwYXJlbnRoZXNlcyB3aGVuIHRoZXJlIGlzIGEgcmVwZXRpdGlvbi4KKy5QCitQQ1JFMiBwcm92aWRlcyBhIHNpbWlsYXIgZmVhdHVyZSwgYnV0IG9mIGNvdXJzZSBpdCBjYW5ub3Qgb2JleSBhcmJpdHJhcnkgUGVybAorY29kZS4gVGhlIGZlYXR1cmUgaXMgY2FsbGVkICJjYWxsb3V0Ii4gVGhlIGNhbGxlciBvZiBQQ1JFMiBwcm92aWRlcyBhbiBleHRlcm5hbAorZnVuY3Rpb24gYnkgcHV0dGluZyBpdHMgZW50cnkgcG9pbnQgaW4gYSBtYXRjaCBjb250ZXh0IHVzaW5nIHRoZSBmdW5jdGlvbgorXGZCcGNyZTJfc2V0X2NhbGxvdXQoKVxmUCwgYW5kIHRoZW4gcGFzc2luZyB0aGF0IGNvbnRleHQgdG8gXGZCcGNyZTJfbWF0Y2goKVxmUAorb3IgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAuIElmIG5vIG1hdGNoIGNvbnRleHQgaXMgcGFzc2VkLCBvciBpZiB0aGUgY2FsbG91dAorZW50cnkgcG9pbnQgaXMgc2V0IHRvIE5VTEwsIGNhbGxvdXRzIGFyZSBkaXNhYmxlZC4KKy5QCitXaXRoaW4gYSByZWd1bGFyIGV4cHJlc3Npb24sICg/Qzxhcmc+KSBpbmRpY2F0ZXMgYSBwb2ludCBhdCB3aGljaCB0aGUgZXh0ZXJuYWwKK2Z1bmN0aW9uIGlzIHRvIGJlIGNhbGxlZC4gVGhlcmUgYXJlIHR3byBraW5kcyBvZiBjYWxsb3V0OiB0aG9zZSB3aXRoIGEKK251bWVyaWNhbCBhcmd1bWVudCBhbmQgdGhvc2Ugd2l0aCBhIHN0cmluZyBhcmd1bWVudC4gKD9DKSBvbiBpdHMgb3duIHdpdGggbm8KK2FyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgKD9DMCkuIEEgbnVtZXJpY2FsIGFyZ3VtZW50IGFsbG93cyB0aGUgYXBwbGljYXRpb24gdG8KK2Rpc3Rpbmd1aXNoIGJldHdlZW4gZGlmZmVyZW50IGNhbGxvdXRzLiBTdHJpbmcgYXJndW1lbnRzIHdlcmUgYWRkZWQgZm9yIHJlbGVhc2UKKzEwLjIwIHRvIG1ha2UgaXQgcG9zc2libGUgZm9yIHNjcmlwdCBsYW5ndWFnZXMgdGhhdCB1c2UgUENSRTIgdG8gZW1iZWQgc2hvcnQKK3NjcmlwdHMgd2l0aGluIHBhdHRlcm5zIGluIGEgc2ltaWxhciB3YXkgdG8gUGVybC4KKy5QCitEdXJpbmcgbWF0Y2hpbmcsIHdoZW4gUENSRTIgcmVhY2hlcyBhIGNhbGxvdXQgcG9pbnQsIHRoZSBleHRlcm5hbCBmdW5jdGlvbiBpcworY2FsbGVkLiBJdCBpcyBwcm92aWRlZCB3aXRoIHRoZSBudW1iZXIgb3Igc3RyaW5nIGFyZ3VtZW50IG9mIHRoZSBjYWxsb3V0LCB0aGUKK3Bvc2l0aW9uIGluIHRoZSBwYXR0ZXJuLCBhbmQgb25lIGl0ZW0gb2YgZGF0YSB0aGF0IGlzIGFsc28gc2V0IGluIHRoZSBtYXRjaAorYmxvY2suIFRoZSBjYWxsb3V0IGZ1bmN0aW9uIG1heSBjYXVzZSBtYXRjaGluZyB0byBwcm9jZWVkLCB0byBiYWNrdHJhY2ssIG9yIHRvCitmYWlsLgorLlAKK0J5IGRlZmF1bHQsIFBDUkUyIGltcGxlbWVudHMgYSBudW1iZXIgb2Ygb3B0aW1pemF0aW9ucyBhdCBtYXRjaGluZyB0aW1lLCBhbmQKK29uZSBzaWRlLWVmZmVjdCBpcyB0aGF0IHNvbWV0aW1lcyBjYWxsb3V0cyBhcmUgc2tpcHBlZC4gSWYgeW91IG5lZWQgYWxsCitwb3NzaWJsZSBjYWxsb3V0cyB0byBoYXBwZW4sIHlvdSBuZWVkIHRvIHNldCBvcHRpb25zIHRoYXQgZGlzYWJsZSB0aGUgcmVsZXZhbnQKK29wdGltaXphdGlvbnMuIE1vcmUgZGV0YWlscywgaW5jbHVkaW5nIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhlCitwcm9ncmFtbWluZyBpbnRlcmZhY2UgdG8gdGhlIGNhbGxvdXQgZnVuY3Rpb24sIGFyZSBnaXZlbiBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmNhbGxvdXRcZlAKKy5cIgorZG9jdW1lbnRhdGlvbi4KKy4KKy4KKy5TUyAiQ2FsbG91dHMgd2l0aCBudW1lcmljYWwgYXJndW1lbnRzIgorLnJzCisuc3AKK0lmIHlvdSBqdXN0IHdhbnQgdG8gaGF2ZSBhIG1lYW5zIG9mIGlkZW50aWZ5aW5nIGRpZmZlcmVudCBjYWxsb3V0IHBvaW50cywgcHV0IGEKK251bWJlciBsZXNzIHRoYW4gMjU2IGFmdGVyIHRoZSBsZXR0ZXIgQy4gRm9yIGV4YW1wbGUsIHRoaXMgcGF0dGVybiBoYXMgdHdvCitjYWxsb3V0IHBvaW50czoKKy5zcAorICAoP0MxKWFiYyg/QzIpZGVmCisuc3AKK0lmIHRoZSBQQ1JFMl9BVVRPX0NBTExPVVQgZmxhZyBpcyBwYXNzZWQgdG8gXGZCcGNyZTJfY29tcGlsZSgpXGZQLCBudW1lcmljYWwKK2NhbGxvdXRzIGFyZSBhdXRvbWF0aWNhbGx5IGluc3RhbGxlZCBiZWZvcmUgZWFjaCBpdGVtIGluIHRoZSBwYXR0ZXJuLiBUaGV5IGFyZQorYWxsIG51bWJlcmVkIDI1NS4gSWYgdGhlcmUgaXMgYSBjb25kaXRpb25hbCBncm91cCBpbiB0aGUgcGF0dGVybiB3aG9zZQorY29uZGl0aW9uIGlzIGFuIGFzc2VydGlvbiwgYW4gYWRkaXRpb25hbCBjYWxsb3V0IGlzIGluc2VydGVkIGp1c3QgYmVmb3JlIHRoZQorY29uZGl0aW9uLiBBbiBleHBsaWNpdCBjYWxsb3V0IG1heSBhbHNvIGJlIHNldCBhdCB0aGlzIHBvc2l0aW9uLCBhcyBpbiB0aGlzCitleGFtcGxlOgorLnNwCisgICg/KD9DOSkoPz1hKWFiY3xkZWYpCisuc3AKK05vdGUgdGhhdCB0aGlzIGFwcGxpZXMgb25seSB0byBhc3NlcnRpb24gY29uZGl0aW9ucywgbm90IHRvIG90aGVyIHR5cGVzIG9mCitjb25kaXRpb24uCisuCisuCisuU1MgIkNhbGxvdXRzIHdpdGggc3RyaW5nIGFyZ3VtZW50cyIKKy5ycworLnNwCitBIGRlbGltaXRlZCBzdHJpbmcgbWF5IGJlIHVzZWQgaW5zdGVhZCBvZiBhIG51bWJlciBhcyBhIGNhbGxvdXQgYXJndW1lbnQuIFRoZQorc3RhcnRpbmcgZGVsaW1pdGVyIG11c3QgYmUgb25lIG9mIGAgJyAiIF4gJSAjICQgeyBhbmQgdGhlIGVuZGluZyBkZWxpbWl0ZXIgaXMKK3RoZSBzYW1lIGFzIHRoZSBzdGFydCwgZXhjZXB0IGZvciB7LCB3aGVyZSB0aGUgZW5kaW5nIGRlbGltaXRlciBpcyB9LiBJZiB0aGUKK2VuZGluZyBkZWxpbWl0ZXIgaXMgbmVlZGVkIHdpdGhpbiB0aGUgc3RyaW5nLCBpdCBtdXN0IGJlIGRvdWJsZWQuIEZvcgorZXhhbXBsZToKKy5zcAorICAoP0MnYWIgJydjJycgZCcpeHl6KD9De2FueSB0ZXh0fSlwcXIKKy5zcAorVGhlIGRvdWJsaW5nIGlzIHJlbW92ZWQgYmVmb3JlIHRoZSBzdHJpbmcgaXMgcGFzc2VkIHRvIHRoZSBjYWxsb3V0IGZ1bmN0aW9uLgorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0iYmFja3RyYWNrY29udHJvbCI+PC9hPgorLlNIICJCQUNLVFJBQ0tJTkcgQ09OVFJPTCIKKy5ycworLnNwCitQZXJsIDUuMTAgaW50cm9kdWNlZCBhIG51bWJlciBvZiAiU3BlY2lhbCBCYWNrdHJhY2tpbmcgQ29udHJvbCBWZXJicyIsIHdoaWNoCithcmUgc3RpbGwgZGVzY3JpYmVkIGluIHRoZSBQZXJsIGRvY3VtZW50YXRpb24gYXMgImV4cGVyaW1lbnRhbCBhbmQgc3ViamVjdCB0bworY2hhbmdlIG9yIHJlbW92YWwgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBQZXJsIi4gSXQgZ29lcyBvbiB0byBzYXk6ICJUaGVpciB1c2FnZQoraW4gcHJvZHVjdGlvbiBjb2RlIHNob3VsZCBiZSBub3RlZCB0byBhdm9pZCBwcm9ibGVtcyBkdXJpbmcgdXBncmFkZXMuIiBUaGUgc2FtZQorcmVtYXJrcyBhcHBseSB0byB0aGUgUENSRTIgZmVhdHVyZXMgZGVzY3JpYmVkIGluIHRoaXMgc2VjdGlvbi4KKy5QCitUaGUgbmV3IHZlcmJzIG1ha2UgdXNlIG9mIHdoYXQgd2FzIHByZXZpb3VzbHkgaW52YWxpZCBzeW50YXg6IGFuIG9wZW5pbmcKK3BhcmVudGhlc2lzIGZvbGxvd2VkIGJ5IGFuIGFzdGVyaXNrLiBUaGV5IGFyZSBnZW5lcmFsbHkgb2YgdGhlIGZvcm0gKCpWRVJCKSBvcgorKCpWRVJCOk5BTUUpLiBTb21lIHZlcmJzIHRha2UgZWl0aGVyIGZvcm0sIHBvc3NpYmx5IGJlaGF2aW5nIGRpZmZlcmVudGx5CitkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgYSBuYW1lIGlzIHByZXNlbnQuCisuUAorQnkgZGVmYXVsdCwgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLCBhIG5hbWUgaXMgYW55IHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMKK3RoYXQgZG9lcyBub3QgaW5jbHVkZSBhIGNsb3NpbmcgcGFyZW50aGVzaXMuIFRoZSBuYW1lIGlzIG5vdCBwcm9jZXNzZWQgaW4KK2FueSB3YXksIGFuZCBpdCBpcyBub3QgcG9zc2libGUgdG8gaW5jbHVkZSBhIGNsb3NpbmcgcGFyZW50aGVzaXMgaW4gdGhlIG5hbWUuCitIb3dldmVyLCBpZiB0aGUgUENSRTJfQUxUX1ZFUkJOQU1FUyBvcHRpb24gaXMgc2V0LCBub3JtYWwgYmFja3NsYXNoIHByb2Nlc3NpbmcKK2lzIGFwcGxpZWQgdG8gdmVyYiBuYW1lcyBhbmQgb25seSBhbiB1bmVzY2FwZWQgY2xvc2luZyBwYXJlbnRoZXNpcyB0ZXJtaW5hdGVzCit0aGUgbmFtZS4gQSBjbG9zaW5nIHBhcmVudGhlc2lzIGNhbiBiZSBpbmNsdWRlZCBpbiBhIG5hbWUgZWl0aGVyIGFzIFxlKSBvcgorYmV0d2VlbiBcZVEgYW5kIFxlRS4gSWYgdGhlIFBDUkUyX0VYVEVOREVEIG9wdGlvbiBpcyBzZXQsIHVuZXNjYXBlZCB3aGl0ZXNwYWNlCitpbiB2ZXJiIG5hbWVzIGlzIHNraXBwZWQgYW5kICMtY29tbWVudHMgYXJlIHJlY29nbml6ZWQsIGV4YWN0bHkgYXMgaW4gdGhlIHJlc3QKK29mIHRoZSBwYXR0ZXJuLgorLlAKK1RoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIG5hbWUgaXMgMjU1IGluIHRoZSA4LWJpdCBsaWJyYXJ5IGFuZCA2NTUzNSBpbiB0aGUKKzE2LWJpdCBhbmQgMzItYml0IGxpYnJhcmllcy4gSWYgdGhlIG5hbWUgaXMgZW1wdHksIHRoYXQgaXMsIGlmIHRoZSBjbG9zaW5nCitwYXJlbnRoZXNpcyBpbW1lZGlhdGVseSBmb2xsb3dzIHRoZSBjb2xvbiwgdGhlIGVmZmVjdCBpcyBhcyBpZiB0aGUgY29sb24gd2VyZQorbm90IHRoZXJlLiBBbnkgbnVtYmVyIG9mIHRoZXNlIHZlcmJzIG1heSBvY2N1ciBpbiBhIHBhdHRlcm4uCisuUAorU2luY2UgdGhlc2UgdmVyYnMgYXJlIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGJhY2t0cmFja2luZywgbW9zdCBvZiB0aGVtIGNhbiBiZQordXNlZCBvbmx5IHdoZW4gdGhlIHBhdHRlcm4gaXMgdG8gYmUgbWF0Y2hlZCB1c2luZyB0aGUgdHJhZGl0aW9uYWwgbWF0Y2hpbmcKK2Z1bmN0aW9uLCBiZWNhdXNlIHRoZXNlIHVzZSBhIGJhY2t0cmFja2luZyBhbGdvcml0aG0uIFdpdGggdGhlIGV4Y2VwdGlvbiBvZgorKCpGQUlMKSwgd2hpY2ggYmVoYXZlcyBsaWtlIGEgZmFpbGluZyBuZWdhdGl2ZSBhc3NlcnRpb24sIHRoZSBiYWNrdHJhY2tpbmcKK2NvbnRyb2wgdmVyYnMgY2F1c2UgYW4gZXJyb3IgaWYgZW5jb3VudGVyZWQgYnkgdGhlIERGQSBtYXRjaGluZyBmdW5jdGlvbi4KKy5QCitUaGUgYmVoYXZpb3VyIG9mIHRoZXNlIHZlcmJzIGluCisuXCIgSFRNTCA8YSBocmVmPSIjYnRyZXBlYXQiPgorLlwiIDwvYT4KK3JlcGVhdGVkIGdyb3VwcywKKy5cIgorLlwiIEhUTUwgPGEgaHJlZj0iI2J0YXNzZXJ0Ij4KKy5cIiA8L2E+Cithc3NlcnRpb25zLAorLlwiCithbmQgaW4KKy5cIiBIVE1MIDxhIGhyZWY9IiNidHN1YiI+CisuXCIgPC9hPgorc3VicGF0dGVybnMgY2FsbGVkIGFzIHN1YnJvdXRpbmVzCisuXCIKKyh3aGV0aGVyIG9yIG5vdCByZWN1cnNpdmVseSkgaXMgZG9jdW1lbnRlZCBiZWxvdy4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9Im5vb3B0aW1pemUiPjwvYT4KKy5TUyAiT3B0aW1pemF0aW9ucyB0aGF0IGFmZmVjdCBiYWNrdHJhY2tpbmcgdmVyYnMiCisucnMKKy5zcAorUENSRTIgY29udGFpbnMgc29tZSBvcHRpbWl6YXRpb25zIHRoYXQgYXJlIHVzZWQgdG8gc3BlZWQgdXAgbWF0Y2hpbmcgYnkgcnVubmluZworc29tZSBjaGVja3MgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggbWF0Y2ggYXR0ZW1wdC4gRm9yIGV4YW1wbGUsIGl0IG1heSBrbm93IHRoZQorbWluaW11bSBsZW5ndGggb2YgbWF0Y2hpbmcgc3ViamVjdCwgb3IgdGhhdCBhIHBhcnRpY3VsYXIgY2hhcmFjdGVyIG11c3QgYmUKK3ByZXNlbnQuIFdoZW4gb25lIG9mIHRoZXNlIG9wdGltaXphdGlvbnMgYnlwYXNzZXMgdGhlIHJ1bm5pbmcgb2YgYSBtYXRjaCwgYW55CitpbmNsdWRlZCBiYWNrdHJhY2tpbmcgdmVyYnMgd2lsbCBub3QsIG9mIGNvdXJzZSwgYmUgcHJvY2Vzc2VkLiBZb3UgY2FuIHN1cHByZXNzCit0aGUgc3RhcnQtb2YtbWF0Y2ggb3B0aW1pemF0aW9ucyBieSBzZXR0aW5nIHRoZSBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSBvcHRpb24KK3doZW4gY2FsbGluZyBcZkJwY3JlMl9jb21waWxlKClcZlAsIG9yIGJ5IHN0YXJ0aW5nIHRoZSBwYXR0ZXJuIHdpdGgKKygqTk9fU1RBUlRfT1BUKS4gVGhlcmUgaXMgbW9yZSBkaXNjdXNzaW9uIG9mIHRoaXMgb3B0aW9uIGluIHRoZSBzZWN0aW9uCitlbnRpdGxlZAorLlwiIEhUTUwgPGEgaHJlZj0icGNyZTJhcGkuaHRtbCNjb21waWxpbmciPgorLlwiIDwvYT4KKyJDb21waWxpbmcgYSBwYXR0ZXJuIgorLlwiCitpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLlAKK0V4cGVyaW1lbnRzIHdpdGggUGVybCBzdWdnZXN0IHRoYXQgaXQgdG9vIGhhcyBzaW1pbGFyIG9wdGltaXphdGlvbnMsIHNvbWV0aW1lcworbGVhZGluZyB0byBhbm9tYWxvdXMgcmVzdWx0cy4KKy4KKy4KKy5TUyAiVmVyYnMgdGhhdCBhY3QgaW1tZWRpYXRlbHkiCisucnMKKy5zcAorVGhlIGZvbGxvd2luZyB2ZXJicyBhY3QgYXMgc29vbiBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZC4gVGhleSBtYXkgbm90IGJlCitmb2xsb3dlZCBieSBhIG5hbWUuCisuc3AKKyAgICgqQUNDRVBUKQorLnNwCitUaGlzIHZlcmIgY2F1c2VzIHRoZSBtYXRjaCB0byBlbmQgc3VjY2Vzc2Z1bGx5LCBza2lwcGluZyB0aGUgcmVtYWluZGVyIG9mIHRoZQorcGF0dGVybi4gSG93ZXZlciwgd2hlbiBpdCBpcyBpbnNpZGUgYSBzdWJwYXR0ZXJuIHRoYXQgaXMgY2FsbGVkIGFzIGEKK3N1YnJvdXRpbmUsIG9ubHkgdGhhdCBzdWJwYXR0ZXJuIGlzIGVuZGVkIHN1Y2Nlc3NmdWxseS4gTWF0Y2hpbmcgdGhlbiBjb250aW51ZXMKK2F0IHRoZSBvdXRlciBsZXZlbC4gSWYgKCpBQ0NFUFQpIGluIHRyaWdnZXJlZCBpbiBhIHBvc2l0aXZlIGFzc2VydGlvbiwgdGhlCithc3NlcnRpb24gc3VjY2VlZHM7IGluIGEgbmVnYXRpdmUgYXNzZXJ0aW9uLCB0aGUgYXNzZXJ0aW9uIGZhaWxzLgorLlAKK0lmICgqQUNDRVBUKSBpcyBpbnNpZGUgY2FwdHVyaW5nIHBhcmVudGhlc2VzLCB0aGUgZGF0YSBzbyBmYXIgaXMgY2FwdHVyZWQuIEZvcgorZXhhbXBsZToKKy5zcAorICBBKCg/OkF8QigqQUNDRVBUKXxDKUQpCisuc3AKK1RoaXMgbWF0Y2hlcyAiQUIiLCAiQUFEIiwgb3IgIkFDRCI7IHdoZW4gaXQgbWF0Y2hlcyAiQUIiLCAiQiIgaXMgY2FwdHVyZWQgYnkKK3RoZSBvdXRlciBwYXJlbnRoZXNlcy4KKy5zcAorICAoKkZBSUwpIG9yICgqRikKKy5zcAorVGhpcyB2ZXJiIGNhdXNlcyBhIG1hdGNoaW5nIGZhaWx1cmUsIGZvcmNpbmcgYmFja3RyYWNraW5nIHRvIG9jY3VyLiBJdCBpcworZXF1aXZhbGVudCB0byAoPyEpIGJ1dCBlYXNpZXIgdG8gcmVhZC4gVGhlIFBlcmwgZG9jdW1lbnRhdGlvbiBub3RlcyB0aGF0IGl0IGlzCitwcm9iYWJseSB1c2VmdWwgb25seSB3aGVuIGNvbWJpbmVkIHdpdGggKD97fSkgb3IgKD8/e30pLiBUaG9zZSBhcmUsIG9mIGNvdXJzZSwKK1BlcmwgZmVhdHVyZXMgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gUENSRTIuIFRoZSBuZWFyZXN0IGVxdWl2YWxlbnQgaXMgdGhlCitjYWxsb3V0IGZlYXR1cmUsIGFzIGZvciBleGFtcGxlIGluIHRoaXMgcGF0dGVybjoKKy5zcAorICBhKyg/QykoKkZBSUwpCisuc3AKK0EgbWF0Y2ggd2l0aCB0aGUgc3RyaW5nICJhYWFhIiBhbHdheXMgZmFpbHMsIGJ1dCB0aGUgY2FsbG91dCBpcyB0YWtlbiBiZWZvcmUKK2VhY2ggYmFja3RyYWNrIGhhcHBlbnMgKGluIHRoaXMgZXhhbXBsZSwgMTAgdGltZXMpLgorLgorLgorLlNTICJSZWNvcmRpbmcgd2hpY2ggcGF0aCB3YXMgdGFrZW4iCisucnMKKy5zcAorVGhlcmUgaXMgb25lIHZlcmIgd2hvc2UgbWFpbiBwdXJwb3NlIGlzIHRvIHRyYWNrIGhvdyBhIG1hdGNoIHdhcyBhcnJpdmVkIGF0LAordGhvdWdoIGl0IGFsc28gaGFzIGEgc2Vjb25kYXJ5IHVzZSBpbiBjb25qdW5jdGlvbiB3aXRoIGFkdmFuY2luZyB0aGUgbWF0Y2gKK3N0YXJ0aW5nIHBvaW50IChzZWUgKCpTS0lQKSBiZWxvdykuCisuc3AKKyAgKCpNQVJLOk5BTUUpIG9yICgqOk5BTUUpCisuc3AKK0EgbmFtZSBpcyBhbHdheXMgcmVxdWlyZWQgd2l0aCB0aGlzIHZlcmIuIFRoZXJlIG1heSBiZSBhcyBtYW55IGluc3RhbmNlcyBvZgorKCpNQVJLKSBhcyB5b3UgbGlrZSBpbiBhIHBhdHRlcm4sIGFuZCB0aGVpciBuYW1lcyBkbyBub3QgaGF2ZSB0byBiZSB1bmlxdWUuCisuUAorV2hlbiBhIG1hdGNoIHN1Y2NlZWRzLCB0aGUgbmFtZSBvZiB0aGUgbGFzdC1lbmNvdW50ZXJlZCAoKk1BUks6TkFNRSksCisoKlBSVU5FOk5BTUUpLCBvciAoKlRIRU46TkFNRSkgb24gdGhlIG1hdGNoaW5nIHBhdGggaXMgcGFzc2VkIGJhY2sgdG8gdGhlCitjYWxsZXIgYXMgZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkCisuXCIgSFRNTCA8YSBocmVmPSJwY3JlMmFwaS5odG1sI21hdGNob3RoZXJkYXRhIj4KKy5cIiA8L2E+CisiT3RoZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hdGNoIgorLlwiCitpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitkb2N1bWVudGF0aW9uLiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgXGZCcGNyZTJ0ZXN0XGZQIG91dHB1dCwgd2hlcmUgdGhlICJtYXJrIgorbW9kaWZpZXIgcmVxdWVzdHMgdGhlIHJldHJpZXZhbCBhbmQgb3V0cHV0dGluZyBvZiAoKk1BUkspIGRhdGE6Cisuc3AKKyAgICByZT4gL1goKk1BUks6QSlZfFgoKk1BUks6QilaL21hcmsKKyAgZGF0YT4gWFkKKyAgIDA6IFhZCisgIE1LOiBBCisgIFhaCisgICAwOiBYWgorICBNSzogQgorLnNwCitUaGUgKCpNQVJLKSBuYW1lIGlzIHRhZ2dlZCB3aXRoICJNSzoiIGluIHRoaXMgb3V0cHV0LCBhbmQgaW4gdGhpcyBleGFtcGxlIGl0CitpbmRpY2F0ZXMgd2hpY2ggb2YgdGhlIHR3byBhbHRlcm5hdGl2ZXMgbWF0Y2hlZC4gVGhpcyBpcyBhIG1vcmUgZWZmaWNpZW50IHdheQorb2Ygb2J0YWluaW5nIHRoaXMgaW5mb3JtYXRpb24gdGhhbiBwdXR0aW5nIGVhY2ggYWx0ZXJuYXRpdmUgaW4gaXRzIG93bgorY2FwdHVyaW5nIHBhcmVudGhlc2VzLgorLlAKK0lmIGEgdmVyYiB3aXRoIGEgbmFtZSBpcyBlbmNvdW50ZXJlZCBpbiBhIHBvc2l0aXZlIGFzc2VydGlvbiB0aGF0IGlzIHRydWUsIHRoZQorbmFtZSBpcyByZWNvcmRlZCBhbmQgcGFzc2VkIGJhY2sgaWYgaXQgaXMgdGhlIGxhc3QtZW5jb3VudGVyZWQuIFRoaXMgZG9lcyBub3QKK2hhcHBlbiBmb3IgbmVnYXRpdmUgYXNzZXJ0aW9ucyBvciBmYWlsaW5nIHBvc2l0aXZlIGFzc2VydGlvbnMuCisuUAorQWZ0ZXIgYSBwYXJ0aWFsIG1hdGNoIG9yIGEgZmFpbGVkIG1hdGNoLCB0aGUgbGFzdCBlbmNvdW50ZXJlZCBuYW1lIGluIHRoZQorZW50aXJlIG1hdGNoIHByb2Nlc3MgaXMgcmV0dXJuZWQuIEZvciBleGFtcGxlOgorLnNwCisgICAgcmU+IC9YKCpNQVJLOkEpWXxYKCpNQVJLOkIpWi9tYXJrCisgIGRhdGE+IFhQCisgIE5vIG1hdGNoLCBtYXJrID0gQgorLnNwCitOb3RlIHRoYXQgaW4gdGhpcyB1bmFuY2hvcmVkIGV4YW1wbGUgdGhlIG1hcmsgaXMgcmV0YWluZWQgZnJvbSB0aGUgbWF0Y2gKK2F0dGVtcHQgdGhhdCBzdGFydGVkIGF0IHRoZSBsZXR0ZXIgIlgiIGluIHRoZSBzdWJqZWN0LiBTdWJzZXF1ZW50IG1hdGNoCithdHRlbXB0cyBzdGFydGluZyBhdCAiUCIgYW5kIHRoZW4gd2l0aCBhbiBlbXB0eSBzdHJpbmcgZG8gbm90IGdldCBhcyBmYXIgYXMgdGhlCisoKk1BUkspIGl0ZW0sIGJ1dCBuZXZlcnRoZWxlc3MgZG8gbm90IHJlc2V0IGl0LgorLlAKK0lmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiAoKk1BUkspIHZhbHVlcyBhZnRlciBmYWlsZWQgbWF0Y2hlcywgeW91IHNob3VsZAorcHJvYmFibHkgc2V0IHRoZSBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSBvcHRpb24KKy5cIiBIVE1MIDxhIGhyZWY9IiNub29wdGltaXplIj4KKy5cIiA8L2E+Cisoc2VlIGFib3ZlKQorLlwiCit0byBlbnN1cmUgdGhhdCB0aGUgbWF0Y2ggaXMgYWx3YXlzIGF0dGVtcHRlZC4KKy4KKy4KKy5TUyAiVmVyYnMgdGhhdCBhY3QgYWZ0ZXIgYmFja3RyYWNraW5nIgorLnJzCisuc3AKK1RoZSBmb2xsb3dpbmcgdmVyYnMgZG8gbm90aGluZyB3aGVuIHRoZXkgYXJlIGVuY291bnRlcmVkLiBNYXRjaGluZyBjb250aW51ZXMKK3dpdGggd2hhdCBmb2xsb3dzLCBidXQgaWYgdGhlcmUgaXMgbm8gc3Vic2VxdWVudCBtYXRjaCwgY2F1c2luZyBhIGJhY2t0cmFjayB0bwordGhlIHZlcmIsIGEgZmFpbHVyZSBpcyBmb3JjZWQuIFRoYXQgaXMsIGJhY2t0cmFja2luZyBjYW5ub3QgcGFzcyB0byB0aGUgbGVmdCBvZgordGhlIHZlcmIuIEhvd2V2ZXIsIHdoZW4gb25lIG9mIHRoZXNlIHZlcmJzIGFwcGVhcnMgaW5zaWRlIGFuIGF0b21pYyBncm91cAorKHdoaWNoIGluY2x1ZGVzIGFueSBncm91cCB0aGF0IGlzIGNhbGxlZCBhcyBhIHN1YnJvdXRpbmUpIG9yIGluIGFuIGFzc2VydGlvbgordGhhdCBpcyB0cnVlLCBpdHMgZWZmZWN0IGlzIGNvbmZpbmVkIHRvIHRoYXQgZ3JvdXAsIGJlY2F1c2Ugb25jZSB0aGUgZ3JvdXAgaGFzCitiZWVuIG1hdGNoZWQsIHRoZXJlIGlzIG5ldmVyIGFueSBiYWNrdHJhY2tpbmcgaW50byBpdC4gSW4gdGhpcyBzaXR1YXRpb24sCitiYWNrdHJhY2tpbmcgaGFzIHRvIGp1bXAgdG8gdGhlIGxlZnQgb2YgdGhlIGVudGlyZSBhdG9taWMgZ3JvdXAgb3IgYXNzZXJ0aW9uLgorLlAKK1RoZXNlIHZlcmJzIGRpZmZlciBpbiBleGFjdGx5IHdoYXQga2luZCBvZiBmYWlsdXJlIG9jY3VycyB3aGVuIGJhY2t0cmFja2luZworcmVhY2hlcyB0aGVtLiBUaGUgYmVoYXZpb3VyIGRlc2NyaWJlZCBiZWxvdyBpcyB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgdmVyYiBpcworbm90IGluIGEgc3Vicm91dGluZSBvciBhbiBhc3NlcnRpb24uIFN1YnNlcXVlbnQgc2VjdGlvbnMgY292ZXIgdGhlc2Ugc3BlY2lhbAorY2FzZXMuCisuc3AKKyAgKCpDT01NSVQpCisuc3AKK1RoaXMgdmVyYiwgd2hpY2ggbWF5IG5vdCBiZSBmb2xsb3dlZCBieSBhIG5hbWUsIGNhdXNlcyB0aGUgd2hvbGUgbWF0Y2ggdG8gZmFpbAorb3V0cmlnaHQgaWYgdGhlcmUgaXMgYSBsYXRlciBtYXRjaGluZyBmYWlsdXJlIHRoYXQgY2F1c2VzIGJhY2t0cmFja2luZyB0byByZWFjaAoraXQuIEV2ZW4gaWYgdGhlIHBhdHRlcm4gaXMgdW5hbmNob3JlZCwgbm8gZnVydGhlciBhdHRlbXB0cyB0byBmaW5kIGEgbWF0Y2ggYnkKK2FkdmFuY2luZyB0aGUgc3RhcnRpbmcgcG9pbnQgdGFrZSBwbGFjZS4gSWYgKCpDT01NSVQpIGlzIHRoZSBvbmx5IGJhY2t0cmFja2luZwordmVyYiB0aGF0IGlzIGVuY291bnRlcmVkLCBvbmNlIGl0IGhhcyBiZWVuIHBhc3NlZCBcZkJwY3JlMl9tYXRjaCgpXGZQIGlzCitjb21taXR0ZWQgdG8gZmluZGluZyBhIG1hdGNoIGF0IHRoZSBjdXJyZW50IHN0YXJ0aW5nIHBvaW50LCBvciBub3QgYXQgYWxsLiBGb3IKK2V4YW1wbGU6Cisuc3AKKyAgYSsoKkNPTU1JVCliCisuc3AKK1RoaXMgbWF0Y2hlcyAieHhhYWIiIGJ1dCBub3QgImFhY2FhYiIuIEl0IGNhbiBiZSB0aG91Z2h0IG9mIGFzIGEga2luZCBvZgorZHluYW1pYyBhbmNob3IsIG9yICJJJ3ZlIHN0YXJ0ZWQsIHNvIEkgbXVzdCBmaW5pc2guIiBUaGUgbmFtZSBvZiB0aGUgbW9zdAorcmVjZW50bHkgcGFzc2VkICgqTUFSSykgaW4gdGhlIHBhdGggaXMgcGFzc2VkIGJhY2sgd2hlbiAoKkNPTU1JVCkgZm9yY2VzIGEKK21hdGNoIGZhaWx1cmUuCisuUAorSWYgdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBiYWNrdHJhY2tpbmcgdmVyYiBpbiBhIHBhdHRlcm4sIGEgZGlmZmVyZW50IG9uZSB0aGF0Citmb2xsb3dzICgqQ09NTUlUKSBtYXkgYmUgdHJpZ2dlcmVkIGZpcnN0LCBzbyBtZXJlbHkgcGFzc2luZyAoKkNPTU1JVCkgZHVyaW5nIGEKK21hdGNoIGRvZXMgbm90IGFsd2F5cyBndWFyYW50ZWUgdGhhdCBhIG1hdGNoIG11c3QgYmUgYXQgdGhpcyBzdGFydGluZyBwb2ludC4KKy5QCitOb3RlIHRoYXQgKCpDT01NSVQpIGF0IHRoZSBzdGFydCBvZiBhIHBhdHRlcm4gaXMgbm90IHRoZSBzYW1lIGFzIGFuIGFuY2hvciwKK3VubGVzcyBQQ1JFMidzIHN0YXJ0LW9mLW1hdGNoIG9wdGltaXphdGlvbnMgYXJlIHR1cm5lZCBvZmYsIGFzIHNob3duIGluIHRoaXMKK291dHB1dCBmcm9tIFxmQnBjcmUydGVzdFxmUDoKKy5zcAorICAgIHJlPiAvKCpDT01NSVQpYWJjLworICBkYXRhPiB4eXphYmMKKyAgIDA6IGFiYworICBkYXRhPgorICByZT4gLygqQ09NTUlUKWFiYy9ub19zdGFydF9vcHRpbWl6ZQorICBkYXRhPiB4eXphYmMKKyAgTm8gbWF0Y2gKKy5zcAorRm9yIHRoZSBmaXJzdCBwYXR0ZXJuLCBQQ1JFMiBrbm93cyB0aGF0IGFueSBtYXRjaCBtdXN0IHN0YXJ0IHdpdGggImEiLCBzbyB0aGUKK29wdGltaXphdGlvbiBza2lwcyBhbG9uZyB0aGUgc3ViamVjdCB0byAiYSIgYmVmb3JlIGFwcGx5aW5nIHRoZSBwYXR0ZXJuIHRvIHRoZQorZmlyc3Qgc2V0IG9mIGRhdGEuIFRoZSBtYXRjaCBhdHRlbXB0IHRoZW4gc3VjY2VlZHMuIFRoZSBzZWNvbmQgcGF0dGVybiBkaXNhYmxlcwordGhlIG9wdGltaXphdGlvbiB0aGF0IHNraXBzIGFsb25nIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIuIFRoZSBwYXR0ZXJuIGlzIG5vdworYXBwbGllZCBzdGFydGluZyBhdCAieCIsIGFuZCBzbyB0aGUgKCpDT01NSVQpIGNhdXNlcyB0aGUgbWF0Y2ggdG8gZmFpbCB3aXRob3V0Cit0cnlpbmcgYW55IG90aGVyIHN0YXJ0aW5nIHBvaW50cy4KKy5zcAorICAoKlBSVU5FKSBvciAoKlBSVU5FOk5BTUUpCisuc3AKK1RoaXMgdmVyYiBjYXVzZXMgdGhlIG1hdGNoIHRvIGZhaWwgYXQgdGhlIGN1cnJlbnQgc3RhcnRpbmcgcG9zaXRpb24gaW4gdGhlCitzdWJqZWN0IGlmIHRoZXJlIGlzIGEgbGF0ZXIgbWF0Y2hpbmcgZmFpbHVyZSB0aGF0IGNhdXNlcyBiYWNrdHJhY2tpbmcgdG8gcmVhY2gKK2l0LiBJZiB0aGUgcGF0dGVybiBpcyB1bmFuY2hvcmVkLCB0aGUgbm9ybWFsICJidW1wYWxvbmciIGFkdmFuY2UgdG8gdGhlIG5leHQKK3N0YXJ0aW5nIGNoYXJhY3RlciB0aGVuIGhhcHBlbnMuIEJhY2t0cmFja2luZyBjYW4gb2NjdXIgYXMgdXN1YWwgdG8gdGhlIGxlZnQgb2YKKygqUFJVTkUpLCBiZWZvcmUgaXQgaXMgcmVhY2hlZCwgb3Igd2hlbiBtYXRjaGluZyB0byB0aGUgcmlnaHQgb2YgKCpQUlVORSksIGJ1dAoraWYgdGhlcmUgaXMgbm8gbWF0Y2ggdG8gdGhlIHJpZ2h0LCBiYWNrdHJhY2tpbmcgY2Fubm90IGNyb3NzICgqUFJVTkUpLiBJbgorc2ltcGxlIGNhc2VzLCB0aGUgdXNlIG9mICgqUFJVTkUpIGlzIGp1c3QgYW4gYWx0ZXJuYXRpdmUgdG8gYW4gYXRvbWljIGdyb3VwIG9yCitwb3NzZXNzaXZlIHF1YW50aWZpZXIsIGJ1dCB0aGVyZSBhcmUgc29tZSB1c2VzIG9mICgqUFJVTkUpIHRoYXQgY2Fubm90IGJlCitleHByZXNzZWQgaW4gYW55IG90aGVyIHdheS4gSW4gYW4gYW5jaG9yZWQgcGF0dGVybiAoKlBSVU5FKSBoYXMgdGhlIHNhbWUgZWZmZWN0CithcyAoKkNPTU1JVCkuCisuUAorVGhlIGJlaGF2aW91ciBvZiAoKlBSVU5FOk5BTUUpIGlzIHRoZSBub3QgdGhlIHNhbWUgYXMgKCpNQVJLOk5BTUUpKCpQUlVORSkuCitJdCBpcyBsaWtlICgqTUFSSzpOQU1FKSBpbiB0aGF0IHRoZSBuYW1lIGlzIHJlbWVtYmVyZWQgZm9yIHBhc3NpbmcgYmFjayB0byB0aGUKK2NhbGxlci4gSG93ZXZlciwgKCpTS0lQOk5BTUUpIHNlYXJjaGVzIG9ubHkgZm9yIG5hbWVzIHNldCB3aXRoICgqTUFSSyksCitpZ25vcmluZyB0aG9zZSBzZXQgYnkgKCpQUlVORSkgb3IgKCpUSEVOKS4KKy5zcAorICAoKlNLSVApCisuc3AKK1RoaXMgdmVyYiwgd2hlbiBnaXZlbiB3aXRob3V0IGEgbmFtZSwgaXMgbGlrZSAoKlBSVU5FKSwgZXhjZXB0IHRoYXQgaWYgdGhlCitwYXR0ZXJuIGlzIHVuYW5jaG9yZWQsIHRoZSAiYnVtcGFsb25nIiBhZHZhbmNlIGlzIG5vdCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIsCitidXQgdG8gdGhlIHBvc2l0aW9uIGluIHRoZSBzdWJqZWN0IHdoZXJlICgqU0tJUCkgd2FzIGVuY291bnRlcmVkLiAoKlNLSVApCitzaWduaWZpZXMgdGhhdCB3aGF0ZXZlciB0ZXh0IHdhcyBtYXRjaGVkIGxlYWRpbmcgdXAgdG8gaXQgY2Fubm90IGJlIHBhcnQgb2YgYQorc3VjY2Vzc2Z1bCBtYXRjaC4gQ29uc2lkZXI6Cisuc3AKKyAgYSsoKlNLSVApYgorLnNwCitJZiB0aGUgc3ViamVjdCBpcyAiYWFhYWMuLi4iLCBhZnRlciB0aGUgZmlyc3QgbWF0Y2ggYXR0ZW1wdCBmYWlscyAoc3RhcnRpbmcgYXQKK3RoZSBmaXJzdCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZyksIHRoZSBzdGFydGluZyBwb2ludCBza2lwcyBvbiB0byBzdGFydCB0aGUKK25leHQgYXR0ZW1wdCBhdCAiYyIuIE5vdGUgdGhhdCBhIHBvc3Nlc3NpdmUgcXVhbnRpZmVyIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUKK2VmZmVjdCBhcyB0aGlzIGV4YW1wbGU7IGFsdGhvdWdoIGl0IHdvdWxkIHN1cHByZXNzIGJhY2t0cmFja2luZyBkdXJpbmcgdGhlCitmaXJzdCBtYXRjaCBhdHRlbXB0LCB0aGUgc2Vjb25kIGF0dGVtcHQgd291bGQgc3RhcnQgYXQgdGhlIHNlY29uZCBjaGFyYWN0ZXIKK2luc3RlYWQgb2Ygc2tpcHBpbmcgb24gdG8gImMiLgorLnNwCisgICgqU0tJUDpOQU1FKQorLnNwCitXaGVuICgqU0tJUCkgaGFzIGFuIGFzc29jaWF0ZWQgbmFtZSwgaXRzIGJlaGF2aW91ciBpcyBtb2RpZmllZC4gV2hlbiBpdCBpcwordHJpZ2dlcmVkLCB0aGUgcHJldmlvdXMgcGF0aCB0aHJvdWdoIHRoZSBwYXR0ZXJuIGlzIHNlYXJjaGVkIGZvciB0aGUgbW9zdAorcmVjZW50ICgqTUFSSykgdGhhdCBoYXMgdGhlIHNhbWUgbmFtZS4gSWYgb25lIGlzIGZvdW5kLCB0aGUgImJ1bXBhbG9uZyIgYWR2YW5jZQoraXMgdG8gdGhlIHN1YmplY3QgcG9zaXRpb24gdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0ICgqTUFSSykgaW5zdGVhZCBvZiB0byB3aGVyZQorKCpTS0lQKSB3YXMgZW5jb3VudGVyZWQuIElmIG5vICgqTUFSSykgd2l0aCBhIG1hdGNoaW5nIG5hbWUgaXMgZm91bmQsIHRoZQorKCpTS0lQKSBpcyBpZ25vcmVkLgorLlAKK05vdGUgdGhhdCAoKlNLSVA6TkFNRSkgc2VhcmNoZXMgb25seSBmb3IgbmFtZXMgc2V0IGJ5ICgqTUFSSzpOQU1FKS4gSXQgaWdub3JlcworbmFtZXMgdGhhdCBhcmUgc2V0IGJ5ICgqUFJVTkU6TkFNRSkgb3IgKCpUSEVOOk5BTUUpLgorLnNwCisgICgqVEhFTikgb3IgKCpUSEVOOk5BTUUpCisuc3AKK1RoaXMgdmVyYiBjYXVzZXMgYSBza2lwIHRvIHRoZSBuZXh0IGlubmVybW9zdCBhbHRlcm5hdGl2ZSB3aGVuIGJhY2t0cmFja2luZworcmVhY2hlcyBpdC4gVGhhdCBpcywgaXQgY2FuY2VscyBhbnkgZnVydGhlciBiYWNrdHJhY2tpbmcgd2l0aGluIHRoZSBjdXJyZW50CithbHRlcm5hdGl2ZS4gSXRzIG5hbWUgY29tZXMgZnJvbSB0aGUgb2JzZXJ2YXRpb24gdGhhdCBpdCBjYW4gYmUgdXNlZCBmb3IgYQorcGF0dGVybi1iYXNlZCBpZi10aGVuLWVsc2UgYmxvY2s6Cisuc3AKKyAgKCBDT05EMSAoKlRIRU4pIEZPTyB8IENPTkQyICgqVEhFTikgQkFSIHwgQ09ORDMgKCpUSEVOKSBCQVogKSAuLi4KKy5zcAorSWYgdGhlIENPTkQxIHBhdHRlcm4gbWF0Y2hlcywgRk9PIGlzIHRyaWVkIChhbmQgcG9zc2libHkgZnVydGhlciBpdGVtcyBhZnRlcgordGhlIGVuZCBvZiB0aGUgZ3JvdXAgaWYgRk9PIHN1Y2NlZWRzKTsgb24gZmFpbHVyZSwgdGhlIG1hdGNoZXIgc2tpcHMgdG8gdGhlCitzZWNvbmQgYWx0ZXJuYXRpdmUgYW5kIHRyaWVzIENPTkQyLCB3aXRob3V0IGJhY2t0cmFja2luZyBpbnRvIENPTkQxLiBJZiB0aGF0CitzdWNjZWVkcyBhbmQgQkFSIGZhaWxzLCBDT05EMyBpcyB0cmllZC4gSWYgc3Vic2VxdWVudGx5IEJBWiBmYWlscywgdGhlcmUgYXJlIG5vCittb3JlIGFsdGVybmF0aXZlcywgc28gdGhlcmUgaXMgYSBiYWNrdHJhY2sgdG8gd2hhdGV2ZXIgY2FtZSBiZWZvcmUgdGhlIGVudGlyZQorZ3JvdXAuIElmICgqVEhFTikgaXMgbm90IGluc2lkZSBhbiBhbHRlcm5hdGlvbiwgaXQgYWN0cyBsaWtlICgqUFJVTkUpLgorLlAKK1RoZSBiZWhhdmlvdXIgb2YgKCpUSEVOOk5BTUUpIGlzIHRoZSBub3QgdGhlIHNhbWUgYXMgKCpNQVJLOk5BTUUpKCpUSEVOKS4KK0l0IGlzIGxpa2UgKCpNQVJLOk5BTUUpIGluIHRoYXQgdGhlIG5hbWUgaXMgcmVtZW1iZXJlZCBmb3IgcGFzc2luZyBiYWNrIHRvIHRoZQorY2FsbGVyLiBIb3dldmVyLCAoKlNLSVA6TkFNRSkgc2VhcmNoZXMgb25seSBmb3IgbmFtZXMgc2V0IHdpdGggKCpNQVJLKSwKK2lnbm9yaW5nIHRob3NlIHNldCBieSAoKlBSVU5FKSBhbmQgKCpUSEVOKS4KKy5QCitBIHN1YnBhdHRlcm4gdGhhdCBkb2VzIG5vdCBjb250YWluIGEgfCBjaGFyYWN0ZXIgaXMganVzdCBhIHBhcnQgb2YgdGhlCitlbmNsb3NpbmcgYWx0ZXJuYXRpdmU7IGl0IGlzIG5vdCBhIG5lc3RlZCBhbHRlcm5hdGlvbiB3aXRoIG9ubHkgb25lCithbHRlcm5hdGl2ZS4gVGhlIGVmZmVjdCBvZiAoKlRIRU4pIGV4dGVuZHMgYmV5b25kIHN1Y2ggYSBzdWJwYXR0ZXJuIHRvIHRoZQorZW5jbG9zaW5nIGFsdGVybmF0aXZlLiBDb25zaWRlciB0aGlzIHBhdHRlcm4sIHdoZXJlIEEsIEIsIGV0Yy4gYXJlIGNvbXBsZXgKK3BhdHRlcm4gZnJhZ21lbnRzIHRoYXQgZG8gbm90IGNvbnRhaW4gYW55IHwgY2hhcmFjdGVycyBhdCB0aGlzIGxldmVsOgorLnNwCisgIEEgKEIoKlRIRU4pQykgfCBECisuc3AKK0lmIEEgYW5kIEIgYXJlIG1hdGNoZWQsIGJ1dCB0aGVyZSBpcyBhIGZhaWx1cmUgaW4gQywgbWF0Y2hpbmcgZG9lcyBub3QKK2JhY2t0cmFjayBpbnRvIEE7IGluc3RlYWQgaXQgbW92ZXMgdG8gdGhlIG5leHQgYWx0ZXJuYXRpdmUsIHRoYXQgaXMsIEQuCitIb3dldmVyLCBpZiB0aGUgc3VicGF0dGVybiBjb250YWluaW5nICgqVEhFTikgaXMgZ2l2ZW4gYW4gYWx0ZXJuYXRpdmUsIGl0CitiZWhhdmVzIGRpZmZlcmVudGx5OgorLnNwCisgIEEgKEIoKlRIRU4pQyB8ICgqRkFJTCkpIHwgRAorLnNwCitUaGUgZWZmZWN0IG9mICgqVEhFTikgaXMgbm93IGNvbmZpbmVkIHRvIHRoZSBpbm5lciBzdWJwYXR0ZXJuLiBBZnRlciBhIGZhaWx1cmUKK2luIEMsIG1hdGNoaW5nIG1vdmVzIHRvICgqRkFJTCksIHdoaWNoIGNhdXNlcyB0aGUgd2hvbGUgc3VicGF0dGVybiB0byBmYWlsCitiZWNhdXNlIHRoZXJlIGFyZSBubyBtb3JlIGFsdGVybmF0aXZlcyB0byB0cnkuIEluIHRoaXMgY2FzZSwgbWF0Y2hpbmcgZG9lcyBub3cKK2JhY2t0cmFjayBpbnRvIEEuCisuUAorTm90ZSB0aGF0IGEgY29uZGl0aW9uYWwgc3VicGF0dGVybiBpcyBub3QgY29uc2lkZXJlZCBhcyBoYXZpbmcgdHdvCithbHRlcm5hdGl2ZXMsIGJlY2F1c2Ugb25seSBvbmUgaXMgZXZlciB1c2VkLiBJbiBvdGhlciB3b3JkcywgdGhlIHwgY2hhcmFjdGVyIGluCithIGNvbmRpdGlvbmFsIHN1YnBhdHRlcm4gaGFzIGEgZGlmZmVyZW50IG1lYW5pbmcuIElnbm9yaW5nIHdoaXRlIHNwYWNlLAorY29uc2lkZXI6Cisuc3AKKyAgXi4qPyAoPyg/PWEpIGEgfCBiKCpUSEVOKWMgKQorLnNwCitJZiB0aGUgc3ViamVjdCBpcyAiYmEiLCB0aGlzIHBhdHRlcm4gZG9lcyBub3QgbWF0Y2guIEJlY2F1c2UgLio/IGlzIHVuZ3JlZWR5LAoraXQgaW5pdGlhbGx5IG1hdGNoZXMgemVybyBjaGFyYWN0ZXJzLiBUaGUgY29uZGl0aW9uICg/PWEpIHRoZW4gZmFpbHMsIHRoZQorY2hhcmFjdGVyICJiIiBpcyBtYXRjaGVkLCBidXQgImMiIGlzIG5vdC4gQXQgdGhpcyBwb2ludCwgbWF0Y2hpbmcgZG9lcyBub3QKK2JhY2t0cmFjayB0byAuKj8gYXMgbWlnaHQgcGVyaGFwcyBiZSBleHBlY3RlZCBmcm9tIHRoZSBwcmVzZW5jZSBvZiB0aGUgfAorY2hhcmFjdGVyLiBUaGUgY29uZGl0aW9uYWwgc3VicGF0dGVybiBpcyBwYXJ0IG9mIHRoZSBzaW5nbGUgYWx0ZXJuYXRpdmUgdGhhdAorY29tcHJpc2VzIHRoZSB3aG9sZSBwYXR0ZXJuLCBhbmQgc28gdGhlIG1hdGNoIGZhaWxzLiAoSWYgdGhlcmUgd2FzIGEgYmFja3RyYWNrCitpbnRvIC4qPywgYWxsb3dpbmcgaXQgdG8gbWF0Y2ggImIiLCB0aGUgbWF0Y2ggd291bGQgc3VjY2VlZC4pCisuUAorVGhlIHZlcmJzIGp1c3QgZGVzY3JpYmVkIHByb3ZpZGUgZm91ciBkaWZmZXJlbnQgInN0cmVuZ3RocyIgb2YgY29udHJvbCB3aGVuCitzdWJzZXF1ZW50IG1hdGNoaW5nIGZhaWxzLiAoKlRIRU4pIGlzIHRoZSB3ZWFrZXN0LCBjYXJyeWluZyBvbiB0aGUgbWF0Y2ggYXQgdGhlCituZXh0IGFsdGVybmF0aXZlLiAoKlBSVU5FKSBjb21lcyBuZXh0LCBmYWlsaW5nIHRoZSBtYXRjaCBhdCB0aGUgY3VycmVudAorc3RhcnRpbmcgcG9zaXRpb24sIGJ1dCBhbGxvd2luZyBhbiBhZHZhbmNlIHRvIHRoZSBuZXh0IGNoYXJhY3RlciAoZm9yIGFuCit1bmFuY2hvcmVkIHBhdHRlcm4pLiAoKlNLSVApIGlzIHNpbWlsYXIsIGV4Y2VwdCB0aGF0IHRoZSBhZHZhbmNlIG1heSBiZSBtb3JlCit0aGFuIG9uZSBjaGFyYWN0ZXIuICgqQ09NTUlUKSBpcyB0aGUgc3Ryb25nZXN0LCBjYXVzaW5nIHRoZSBlbnRpcmUgbWF0Y2ggdG8KK2ZhaWwuCisuCisuCisuU1MgIk1vcmUgdGhhbiBvbmUgYmFja3RyYWNraW5nIHZlcmIiCisucnMKKy5zcAorSWYgbW9yZSB0aGFuIG9uZSBiYWNrdHJhY2tpbmcgdmVyYiBpcyBwcmVzZW50IGluIGEgcGF0dGVybiwgdGhlIG9uZSB0aGF0IGlzCitiYWNrdHJhY2tlZCBvbnRvIGZpcnN0IGFjdHMuIEZvciBleGFtcGxlLCBjb25zaWRlciB0aGlzIHBhdHRlcm4sIHdoZXJlIEEsIEIsCitldGMuIGFyZSBjb21wbGV4IHBhdHRlcm4gZnJhZ21lbnRzOgorLnNwCisgIChBKCpDT01NSVQpQigqVEhFTilDfEFCRCkKKy5zcAorSWYgQSBtYXRjaGVzIGJ1dCBCIGZhaWxzLCB0aGUgYmFja3RyYWNrIHRvICgqQ09NTUlUKSBjYXVzZXMgdGhlIGVudGlyZSBtYXRjaCB0bworZmFpbC4gSG93ZXZlciwgaWYgQSBhbmQgQiBtYXRjaCwgYnV0IEMgZmFpbHMsIHRoZSBiYWNrdHJhY2sgdG8gKCpUSEVOKSBjYXVzZXMKK3RoZSBuZXh0IGFsdGVybmF0aXZlIChBQkQpIHRvIGJlIHRyaWVkLiBUaGlzIGJlaGF2aW91ciBpcyBjb25zaXN0ZW50LCBidXQgaXMKK25vdCBhbHdheXMgdGhlIHNhbWUgYXMgUGVybCdzLiBJdCBtZWFucyB0aGF0IGlmIHR3byBvciBtb3JlIGJhY2t0cmFja2luZyB2ZXJicworYXBwZWFyIGluIHN1Y2Nlc3Npb24sIGFsbCB0aGUgdGhlIGxhc3Qgb2YgdGhlbSBoYXMgbm8gZWZmZWN0LiBDb25zaWRlciB0aGlzCitleGFtcGxlOgorLnNwCisgIC4uLigqQ09NTUlUKSgqUFJVTkUpLi4uCisuc3AKK0lmIHRoZXJlIGlzIGEgbWF0Y2hpbmcgZmFpbHVyZSB0byB0aGUgcmlnaHQsIGJhY2t0cmFja2luZyBvbnRvICgqUFJVTkUpIGNhdXNlcworaXQgdG8gYmUgdHJpZ2dlcmVkLCBhbmQgaXRzIGFjdGlvbiBpcyB0YWtlbi4gVGhlcmUgY2FuIG5ldmVyIGJlIGEgYmFja3RyYWNrCitvbnRvICgqQ09NTUlUKS4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9ImJ0cmVwZWF0Ij48L2E+CisuU1MgIkJhY2t0cmFja2luZyB2ZXJicyBpbiByZXBlYXRlZCBncm91cHMiCisucnMKKy5zcAorUENSRTIgZGlmZmVycyBmcm9tIFBlcmwgaW4gaXRzIGhhbmRsaW5nIG9mIGJhY2t0cmFja2luZyB2ZXJicyBpbiByZXBlYXRlZAorZ3JvdXBzLiBGb3IgZXhhbXBsZSwgY29uc2lkZXI6Cisuc3AKKyAgLyhhKCpDT01NSVQpYikrYWMvCisuc3AKK0lmIHRoZSBzdWJqZWN0IGlzICJhYmFjIiwgUGVybCBtYXRjaGVzLCBidXQgUENSRTIgZmFpbHMgYmVjYXVzZSB0aGUgKCpDT01NSVQpCitpbiB0aGUgc2Vjb25kIHJlcGVhdCBvZiB0aGUgZ3JvdXAgYWN0cy4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9ImJ0YXNzZXJ0Ij48L2E+CisuU1MgIkJhY2t0cmFja2luZyB2ZXJicyBpbiBhc3NlcnRpb25zIgorLnJzCisuc3AKKygqRkFJTCkgaW4gYW4gYXNzZXJ0aW9uIGhhcyBpdHMgbm9ybWFsIGVmZmVjdDogaXQgZm9yY2VzIGFuIGltbWVkaWF0ZQorYmFja3RyYWNrLgorLlAKKygqQUNDRVBUKSBpbiBhIHBvc2l0aXZlIGFzc2VydGlvbiBjYXVzZXMgdGhlIGFzc2VydGlvbiB0byBzdWNjZWVkIHdpdGhvdXQgYW55CitmdXJ0aGVyIHByb2Nlc3NpbmcuIEluIGEgbmVnYXRpdmUgYXNzZXJ0aW9uLCAoKkFDQ0VQVCkgY2F1c2VzIHRoZSBhc3NlcnRpb24gdG8KK2ZhaWwgd2l0aG91dCBhbnkgZnVydGhlciBwcm9jZXNzaW5nLgorLlAKK1RoZSBvdGhlciBiYWNrdHJhY2tpbmcgdmVyYnMgYXJlIG5vdCB0cmVhdGVkIHNwZWNpYWxseSBpZiB0aGV5IGFwcGVhciBpbiBhCitwb3NpdGl2ZSBhc3NlcnRpb24uIEluIHBhcnRpY3VsYXIsICgqVEhFTikgc2tpcHMgdG8gdGhlIG5leHQgYWx0ZXJuYXRpdmUgaW4gdGhlCitpbm5lcm1vc3QgZW5jbG9zaW5nIGdyb3VwIHRoYXQgaGFzIGFsdGVybmF0aW9ucywgd2hldGhlciBvciBub3QgdGhpcyBpcyB3aXRoaW4KK3RoZSBhc3NlcnRpb24uCisuUAorTmVnYXRpdmUgYXNzZXJ0aW9ucyBhcmUsIGhvd2V2ZXIsIGRpZmZlcmVudCwgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgY2hhbmdpbmcgYQorcG9zaXRpdmUgYXNzZXJ0aW9uIGludG8gYSBuZWdhdGl2ZSBhc3NlcnRpb24gY2hhbmdlcyBpdHMgcmVzdWx0LiBCYWNrdHJhY2tpbmcKK2ludG8gKCpDT01NSVQpLCAoKlNLSVApLCBvciAoKlBSVU5FKSBjYXVzZXMgYSBuZWdhdGl2ZSBhc3NlcnRpb24gdG8gYmUgdHJ1ZSwKK3dpdGhvdXQgY29uc2lkZXJpbmcgYW55IGZ1cnRoZXIgYWx0ZXJuYXRpdmUgYnJhbmNoZXMgaW4gdGhlIGFzc2VydGlvbi4KK0JhY2t0cmFja2luZyBpbnRvICgqVEhFTikgY2F1c2VzIGl0IHRvIHNraXAgdG8gdGhlIG5leHQgZW5jbG9zaW5nIGFsdGVybmF0aXZlCit3aXRoaW4gdGhlIGFzc2VydGlvbiAodGhlIG5vcm1hbCBiZWhhdmlvdXIpLCBidXQgaWYgdGhlIGFzc2VydGlvbiBkb2VzIG5vdCBoYXZlCitzdWNoIGFuIGFsdGVybmF0aXZlLCAoKlRIRU4pIGJlaGF2ZXMgbGlrZSAoKlBSVU5FKS4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9ImJ0c3ViIj48L2E+CisuU1MgIkJhY2t0cmFja2luZyB2ZXJicyBpbiBzdWJyb3V0aW5lcyIKKy5ycworLnNwCitUaGVzZSBiZWhhdmlvdXJzIG9jY3VyIHdoZXRoZXIgb3Igbm90IHRoZSBzdWJwYXR0ZXJuIGlzIGNhbGxlZCByZWN1cnNpdmVseS4KK1BlcmwncyB0cmVhdG1lbnQgb2Ygc3Vicm91dGluZXMgaXMgZGlmZmVyZW50IGluIHNvbWUgY2FzZXMuCisuUAorKCpGQUlMKSBpbiBhIHN1YnBhdHRlcm4gY2FsbGVkIGFzIGEgc3Vicm91dGluZSBoYXMgaXRzIG5vcm1hbCBlZmZlY3Q6IGl0IGZvcmNlcworYW4gaW1tZWRpYXRlIGJhY2t0cmFjay4KKy5QCisoKkFDQ0VQVCkgaW4gYSBzdWJwYXR0ZXJuIGNhbGxlZCBhcyBhIHN1YnJvdXRpbmUgY2F1c2VzIHRoZSBzdWJyb3V0aW5lIG1hdGNoIHRvCitzdWNjZWVkIHdpdGhvdXQgYW55IGZ1cnRoZXIgcHJvY2Vzc2luZy4gTWF0Y2hpbmcgdGhlbiBjb250aW51ZXMgYWZ0ZXIgdGhlCitzdWJyb3V0aW5lIGNhbGwuCisuUAorKCpDT01NSVQpLCAoKlNLSVApLCBhbmQgKCpQUlVORSkgaW4gYSBzdWJwYXR0ZXJuIGNhbGxlZCBhcyBhIHN1YnJvdXRpbmUgY2F1c2UKK3RoZSBzdWJyb3V0aW5lIG1hdGNoIHRvIGZhaWwuCisuUAorKCpUSEVOKSBza2lwcyB0byB0aGUgbmV4dCBhbHRlcm5hdGl2ZSBpbiB0aGUgaW5uZXJtb3N0IGVuY2xvc2luZyBncm91cCB3aXRoaW4KK3RoZSBzdWJwYXR0ZXJuIHRoYXQgaGFzIGFsdGVybmF0aXZlcy4gSWYgdGhlcmUgaXMgbm8gc3VjaCBncm91cCB3aXRoaW4gdGhlCitzdWJwYXR0ZXJuLCAoKlRIRU4pIGNhdXNlcyB0aGUgc3Vicm91dGluZSBtYXRjaCB0byBmYWlsLgorLgorLgorLlNIICJTRUUgQUxTTyIKKy5ycworLnNwCitcZkJwY3JlMmFwaVxmUCgzKSwgXGZCcGNyZTJjYWxsb3V0XGZQKDMpLCBcZkJwY3JlMm1hdGNoaW5nXGZQKDMpLAorXGZCcGNyZTJzeW50YXhcZlAoMyksIFxmQnBjcmUyXGZQKDMpLgorLgorLgorLlNIIEFVVEhPUgorLnJzCisuc3AKKy5uZgorUGhpbGlwIEhhemVsCitVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCitDYW1icmlkZ2UsIEVuZ2xhbmQuCisuZmkKKy4KKy4KKy5TSCBSRVZJU0lPTgorLnJzCisuc3AKKy5uZgorTGFzdCB1cGRhdGVkOiAxMyBOb3ZlbWJlciAyMDE1CitDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy5maQpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUycGVyZm9ybS4zIGIvZGlzdDIvZG9jL3BjcmUycGVyZm9ybS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjODZmZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJwZXJmb3JtLjMKQEAgLTAsMCArMSwxODIgQEAKKy5USCBQQ1JFMlBFUkZPUk0gMyAiMDIgSmFudWFyeSAyMDE1IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggIlBDUkUyIFBFUkZPUk1BTkNFIgorLnJzCisuc3AKK1R3byBhc3BlY3RzIG9mIHBlcmZvcm1hbmNlIGFyZSBkaXNjdXNzZWQgYmVsb3c6IG1lbW9yeSB1c2FnZSBhbmQgcHJvY2Vzc2luZwordGltZS4gVGhlIHdheSB5b3UgZXhwcmVzcyB5b3VyIHBhdHRlcm4gYXMgYSByZWd1bGFyIGV4cHJlc3Npb24gY2FuIGFmZmVjdCBib3RoCitvZiB0aGVtLgorLgorLlNIICJDT01QSUxFRCBQQVRURVJOIE1FTU9SWSBVU0FHRSIKKy5ycworLnNwCitQYXR0ZXJucyBhcmUgY29tcGlsZWQgYnkgUENSRTIgaW50byBhIHJlYXNvbmFibHkgZWZmaWNpZW50IGludGVycHJldGl2ZSBjb2RlLAorc28gdGhhdCBtb3N0IHNpbXBsZSBwYXR0ZXJucyBkbyBub3QgdXNlIG11Y2ggbWVtb3J5LiBIb3dldmVyLCB0aGVyZSBpcyBvbmUgY2FzZQord2hlcmUgdGhlIG1lbW9yeSB1c2FnZSBvZiBhIGNvbXBpbGVkIHBhdHRlcm4gY2FuIGJlIHVuZXhwZWN0ZWRseSBsYXJnZS4gSWYgYQorcGFyZW50aGVzaXplZCBzdWJwYXR0ZXJuIGhhcyBhIHF1YW50aWZpZXIgd2l0aCBhIG1pbmltdW0gZ3JlYXRlciB0aGFuIDEgYW5kL29yCithIGxpbWl0ZWQgbWF4aW11bSwgdGhlIHdob2xlIHN1YnBhdHRlcm4gaXMgcmVwZWF0ZWQgaW4gdGhlIGNvbXBpbGVkIGNvZGUuIEZvcgorZXhhbXBsZSwgdGhlIHBhdHRlcm4KKy5zcAorICAoYWJjfGRlZil7Miw0fQorLnNwCitpcyBjb21waWxlZCBhcyBpZiBpdCB3ZXJlCisuc3AKKyAgKGFiY3xkZWYpKGFiY3xkZWYpKChhYmN8ZGVmKShhYmN8ZGVmKT8pPworLnNwCisoVGVjaG5pY2FsIGFzaWRlOiBJdCBpcyBkb25lIHRoaXMgd2F5IHNvIHRoYXQgYmFja3RyYWNrIHBvaW50cyB3aXRoaW4gZWFjaCBvZgordGhlIHJlcGV0aXRpb25zIGNhbiBiZSBpbmRlcGVuZGVudGx5IG1haW50YWluZWQuKQorLlAKK0ZvciByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHF1YW50aWZpZXJzIHVzZSBvbmx5IHNtYWxsIG51bWJlcnMsIHRoaXMgaXMgbm90Cit1c3VhbGx5IGEgcHJvYmxlbS4gSG93ZXZlciwgaWYgdGhlIG51bWJlcnMgYXJlIGxhcmdlLCBhbmQgcGFydGljdWxhcmx5IGlmIHN1Y2gKK3JlcGV0aXRpb25zIGFyZSBuZXN0ZWQsIHRoZSBtZW1vcnkgdXNhZ2UgY2FuIGJlY29tZSBhbiBlbWJhcnJhc3NtZW50LiBGb3IKK2V4YW1wbGUsIHRoZSB2ZXJ5IHNpbXBsZSBwYXR0ZXJuCisuc3AKKyAgKChhYil7MSwxMDAwfWMpezEsM30KKy5zcAordXNlcyA1MUsgYnl0ZXMgd2hlbiBjb21waWxlZCB1c2luZyB0aGUgOC1iaXQgbGlicmFyeS4gV2hlbiBQQ1JFMiBpcyBjb21waWxlZAord2l0aCBpdHMgZGVmYXVsdCBpbnRlcm5hbCBwb2ludGVyIHNpemUgb2YgdHdvIGJ5dGVzLCB0aGUgc2l6ZSBsaW1pdCBvbiBhCitjb21waWxlZCBwYXR0ZXJuIGlzIDY0SyBjb2RlIHVuaXRzIGluIHRoZSA4LWJpdCBhbmQgMTYtYml0IGxpYnJhcmllcywgYW5kIHRoaXMKK2lzIHJlYWNoZWQgd2l0aCB0aGUgYWJvdmUgcGF0dGVybiBpZiB0aGUgb3V0ZXIgcmVwZXRpdGlvbiBpcyBpbmNyZWFzZWQgZnJvbSAzCit0byA0LiBQQ1JFMiBjYW4gYmUgY29tcGlsZWQgdG8gdXNlIGxhcmdlciBpbnRlcm5hbCBwb2ludGVycyBhbmQgdGh1cyBoYW5kbGUKK2xhcmdlciBjb21waWxlZCBwYXR0ZXJucywgYnV0IGl0IGlzIGJldHRlciB0byB0cnkgdG8gcmV3cml0ZSB5b3VyIHBhdHRlcm4gdG8KK3VzZSBsZXNzIG1lbW9yeSBpZiB5b3UgY2FuLgorLlAKK09uZSB3YXkgb2YgcmVkdWNpbmcgdGhlIG1lbW9yeSB1c2FnZSBmb3Igc3VjaCBwYXR0ZXJucyBpcyB0byBtYWtlIHVzZSBvZgorUENSRTIncworLlwiIEhUTUwgPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwjc3VicGF0dGVybnNhc3N1YnJvdXRpbmVzIj4KKy5cIiA8L2E+Cisic3Vicm91dGluZSIKKy5cIgorZmFjaWxpdHkuIFJlLXdyaXRpbmcgdGhlIGFib3ZlIHBhdHRlcm4gYXMKKy5zcAorICAoKGFiKSg/Mil7MCw5OTl9YykoPzEpezAsMn0KKy5zcAorcmVkdWNlcyB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyB0byAxOEssIGFuZCBpbmRlZWQgaXQgcmVtYWlucyB1bmRlciAyMEsgZXZlbgord2l0aCB0aGUgb3V0ZXIgcmVwZXRpdGlvbiBpbmNyZWFzZWQgdG8gMTAwLiBIb3dldmVyLCB0aGlzIHBhdHRlcm4gaXMgbm90CitleGFjdGx5IGVxdWl2YWxlbnQsIGJlY2F1c2UgdGhlICJzdWJyb3V0aW5lIiBjYWxscyBhcmUgdHJlYXRlZCBhcworLlwiIEhUTUwgPGEgaHJlZj0icGNyZTJwYXR0ZXJuLmh0bWwjYXRvbWljZ3JvdXAiPgorLlwiIDwvYT4KK2F0b21pYyBncm91cHMKKy5cIgoraW50byB3aGljaCB0aGVyZSBjYW4gYmUgbm8gYmFja3RyYWNraW5nIGlmIHRoZXJlIGlzIGEgc3Vic2VxdWVudCBtYXRjaGluZworZmFpbHVyZS4gVGhlcmVmb3JlLCBQQ1JFMiBjYW5ub3QgZG8gdGhpcyBraW5kIG9mIHJld3JpdGluZyBhdXRvbWF0aWNhbGx5LgorRnVydGhlcm1vcmUsIHRoZXJlIGlzIGEgbm90aWNlYWJsZSBsb3NzIG9mIHNwZWVkIHdoZW4gZXhlY3V0aW5nIHRoZSBtb2RpZmllZAorcGF0dGVybi4gTmV2ZXJ0aGVsZXNzLCBpZiB0aGUgYXRvbWljIGdyb3VwaW5nIGlzIG5vdCBhIHByb2JsZW0gYW5kIHRoZSBsb3NzIG9mCitzcGVlZCBpcyBhY2NlcHRhYmxlLCB0aGlzIGtpbmQgb2YgcmV3cml0aW5nIHdpbGwgYWxsb3cgeW91IHRvIHByb2Nlc3MgcGF0dGVybnMKK3RoYXQgUENSRTIgY2Fubm90IG90aGVyd2lzZSBoYW5kbGUuCisuCisuCisuU0ggIlNUQUNLIFVTQUdFIEFUIFJVTiBUSU1FIgorLnJzCisuc3AKK1doZW4gXGZCcGNyZTJfbWF0Y2goKVxmUCBpcyB1c2VkIGZvciBtYXRjaGluZywgY2VydGFpbiBraW5kcyBvZiBwYXR0ZXJuIGNhbgorY2F1c2UgaXQgdG8gdXNlIGxhcmdlIGFtb3VudHMgb2YgdGhlIHByb2Nlc3Mgc3RhY2suIEluIHNvbWUgZW52aXJvbm1lbnRzIHRoZQorZGVmYXVsdCBwcm9jZXNzIHN0YWNrIGlzIHF1aXRlIHNtYWxsLCBhbmQgaWYgaXQgcnVucyBvdXQgdGhlIHJlc3VsdCBpcyBvZnRlbgorU0lHU0VHVi4gUmV3cml0aW5nIHlvdXIgcGF0dGVybiBjYW4gb2Z0ZW4gaGVscC4gVGhlCisuXCIgSFJFRgorXGZCcGNyZTJzdGFja1xmUAorLlwiCitkb2N1bWVudGF0aW9uIGRpc2N1c3NlcyB0aGlzIGlzc3VlIGluIGRldGFpbC4KKy4KKy4KKy5TSCAiUFJPQ0VTU0lORyBUSU1FIgorLnJzCisuc3AKK0NlcnRhaW4gaXRlbXMgaW4gcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5zIGFyZSBwcm9jZXNzZWQgbW9yZSBlZmZpY2llbnRseQordGhhbiBvdGhlcnMuIEl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHVzZSBhIGNoYXJhY3RlciBjbGFzcyBsaWtlIFthZWlvdV0gdGhhbiBhCitzZXQgb2Ygc2luZ2xlLWNoYXJhY3RlciBhbHRlcm5hdGl2ZXMgc3VjaCBhcyAoYXxlfGl8b3x1KS4gSW4gZ2VuZXJhbCwgdGhlCitzaW1wbGVzdCBjb25zdHJ1Y3Rpb24gdGhhdCBwcm92aWRlcyB0aGUgcmVxdWlyZWQgYmVoYXZpb3VyIGlzIHVzdWFsbHkgdGhlIG1vc3QKK2VmZmljaWVudC4gSmVmZnJleSBGcmllZGwncyBib29rIGNvbnRhaW5zIGEgbG90IG9mIHVzZWZ1bCBnZW5lcmFsIGRpc2N1c3Npb24KK2Fib3V0IG9wdGltaXppbmcgcmVndWxhciBleHByZXNzaW9ucyBmb3IgZWZmaWNpZW50IHBlcmZvcm1hbmNlLiBUaGlzIGRvY3VtZW50Citjb250YWlucyBhIGZldyBvYnNlcnZhdGlvbnMgYWJvdXQgUENSRTIuCisuUAorVXNpbmcgVW5pY29kZSBjaGFyYWN0ZXIgcHJvcGVydGllcyAodGhlIFxlcCwgXGVQLCBhbmQgXGVYIGVzY2FwZXMpIGlzIHNsb3csCitiZWNhdXNlIFBDUkUyIGhhcyB0byB1c2UgYSBtdWx0aS1zdGFnZSB0YWJsZSBsb29rdXAgd2hlbmV2ZXIgaXQgbmVlZHMgYQorY2hhcmFjdGVyJ3MgcHJvcGVydHkuIElmIHlvdSBjYW4gZmluZCBhbiBhbHRlcm5hdGl2ZSBwYXR0ZXJuIHRoYXQgZG9lcyBub3QgdXNlCitjaGFyYWN0ZXIgcHJvcGVydGllcywgaXQgd2lsbCBwcm9iYWJseSBiZSBmYXN0ZXIuCisuUAorQnkgZGVmYXVsdCwgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgXGViLCBcZWQsIFxlcywgYW5kIFxldywgYW5kIHRoZSBQT1NJWAorY2hhcmFjdGVyIGNsYXNzZXMgc3VjaCBhcyBbOmFscGhhOl0gZG8gbm90IHVzZSBVbmljb2RlIHByb3BlcnRpZXMsIHBhcnRseSBmb3IKK2JhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBhbmQgcGFydGx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBIb3dldmVyLCB5b3UgY2FuCitzZXQgdGhlIFBDUkUyX1VDUCBvcHRpb24gb3Igc3RhcnQgdGhlIHBhdHRlcm4gd2l0aCAoKlVDUCkgaWYgeW91IHdhbnQgVW5pY29kZQorY2hhcmFjdGVyIHByb3BlcnRpZXMgdG8gYmUgdXNlZC4gVGhpcyBjYW4gZG91YmxlIHRoZSBtYXRjaGluZyB0aW1lIGZvciBpdGVtcworc3VjaCBhcyBcZWQsIHdoZW4gbWF0Y2hlZCB3aXRoIFxmQnBjcmUyX21hdGNoKClcZlA7IHRoZSBwZXJmb3JtYW5jZSBsb3NzIGlzCitsZXNzIHdpdGggYSBERkEgbWF0Y2hpbmcgZnVuY3Rpb24sIGFuZCBpbiBib3RoIGNhc2VzIHRoZXJlIGlzIG5vdCBtdWNoCitkaWZmZXJlbmNlIGZvciBcZWIuCisuUAorV2hlbiBhIHBhdHRlcm4gYmVnaW5zIHdpdGggLiogbm90IGluIGF0b21pYyBwYXJlbnRoZXNlcywgbm9yIGluIHBhcmVudGhlc2VzCit0aGF0IGFyZSB0aGUgc3ViamVjdCBvZiBhIGJhY2tyZWZlcmVuY2UsIGFuZCB0aGUgUENSRTJfRE9UQUxMIG9wdGlvbiBpcyBzZXQsCit0aGUgcGF0dGVybiBpcyBpbXBsaWNpdGx5IGFuY2hvcmVkIGJ5IFBDUkUyLCBzaW5jZSBpdCBjYW4gbWF0Y2ggb25seSBhdCB0aGUKK3N0YXJ0IG9mIGEgc3ViamVjdCBzdHJpbmcuIElmIHRoZSBwYXR0ZXJuIGhhcyBtdWx0aXBsZSB0b3AtbGV2ZWwgYnJhbmNoZXMsIHRoZXkKK211c3QgYWxsIGJlIGFuY2hvcmFibGUuIFRoZSBvcHRpbWl6YXRpb24gY2FuIGJlIGRpc2FibGVkIGJ5IHRoZQorUENSRTJfTk9fRE9UU1RBUl9BTkNIT1Igb3B0aW9uLCBhbmQgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCBpZiB0aGUgcGF0dGVybgorY29udGFpbnMgKCpQUlVORSkgb3IgKCpTS0lQKS4KKy5QCitJZiBQQ1JFMl9ET1RBTEwgaXMgbm90IHNldCwgUENSRTIgY2Fubm90IG1ha2UgdGhpcyBvcHRpbWl6YXRpb24sIGJlY2F1c2UgdGhlCitkb3QgbWV0YWNoYXJhY3RlciBkb2VzIG5vdCB0aGVuIG1hdGNoIGEgbmV3bGluZSwgYW5kIGlmIHRoZSBzdWJqZWN0IHN0cmluZworY29udGFpbnMgbmV3bGluZXMsIHRoZSBwYXR0ZXJuIG1heSBtYXRjaCBmcm9tIHRoZSBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkKK2ZvbGxvd2luZyBvbmUgb2YgdGhlbSBpbnN0ZWFkIG9mIGZyb20gdGhlIHZlcnkgc3RhcnQuIEZvciBleGFtcGxlLCB0aGUgcGF0dGVybgorLnNwCisgIC4qc2Vjb25kCisuc3AKK21hdGNoZXMgdGhlIHN1YmplY3QgImZpcnN0XGVuYW5kIHNlY29uZCIgKHdoZXJlIFxlbiBzdGFuZHMgZm9yIGEgbmV3bGluZQorY2hhcmFjdGVyKSwgd2l0aCB0aGUgbWF0Y2ggc3RhcnRpbmcgYXQgdGhlIHNldmVudGggY2hhcmFjdGVyLiBJbiBvcmRlciB0byBkbwordGhpcywgUENSRTIgaGFzIHRvIHJldHJ5IHRoZSBtYXRjaCBzdGFydGluZyBhZnRlciBldmVyeSBuZXdsaW5lIGluIHRoZSBzdWJqZWN0LgorLlAKK0lmIHlvdSBhcmUgdXNpbmcgc3VjaCBhIHBhdHRlcm4gd2l0aCBzdWJqZWN0IHN0cmluZ3MgdGhhdCBkbyBub3QgY29udGFpbgorbmV3bGluZXMsIHRoZSBiZXN0IHBlcmZvcm1hbmNlIGlzIG9idGFpbmVkIGJ5IHNldHRpbmcgUENSRTJfRE9UQUxMLCBvciBzdGFydGluZwordGhlIHBhdHRlcm4gd2l0aCBeLiogb3IgXi4qPyB0byBpbmRpY2F0ZSBleHBsaWNpdCBhbmNob3JpbmcuIFRoYXQgc2F2ZXMgUENSRTIKK2Zyb20gaGF2aW5nIHRvIHNjYW4gYWxvbmcgdGhlIHN1YmplY3QgbG9va2luZyBmb3IgYSBuZXdsaW5lIHRvIHJlc3RhcnQgYXQuCisuUAorQmV3YXJlIG9mIHBhdHRlcm5zIHRoYXQgY29udGFpbiBuZXN0ZWQgaW5kZWZpbml0ZSByZXBlYXRzLiBUaGVzZSBjYW4gdGFrZSBhCitsb25nIHRpbWUgdG8gcnVuIHdoZW4gYXBwbGllZCB0byBhIHN0cmluZyB0aGF0IGRvZXMgbm90IG1hdGNoLiBDb25zaWRlciB0aGUKK3BhdHRlcm4gZnJhZ21lbnQKKy5zcAorICBeKGErKSoKKy5zcAorVGhpcyBjYW4gbWF0Y2ggImFhYWEiIGluIDE2IGRpZmZlcmVudCB3YXlzLCBhbmQgdGhpcyBudW1iZXIgaW5jcmVhc2VzIHZlcnkKK3JhcGlkbHkgYXMgdGhlIHN0cmluZyBnZXRzIGxvbmdlci4gKFRoZSAqIHJlcGVhdCBjYW4gbWF0Y2ggMCwgMSwgMiwgMywgb3IgNAordGltZXMsIGFuZCBmb3IgZWFjaCBvZiB0aG9zZSBjYXNlcyBvdGhlciB0aGFuIDAgb3IgNCwgdGhlICsgcmVwZWF0cyBjYW4gbWF0Y2gKK2RpZmZlcmVudCBudW1iZXJzIG9mIHRpbWVzLikgV2hlbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBwYXR0ZXJuIGlzIHN1Y2ggdGhhdCB0aGUKK2VudGlyZSBtYXRjaCBpcyBnb2luZyB0byBmYWlsLCBQQ1JFMiBoYXMgaW4gcHJpbmNpcGxlIHRvIHRyeSBldmVyeSBwb3NzaWJsZQordmFyaWF0aW9uLCBhbmQgdGhpcyBjYW4gdGFrZSBhbiBleHRyZW1lbHkgbG9uZyB0aW1lLCBldmVuIGZvciByZWxhdGl2ZWx5IHNob3J0CitzdHJpbmdzLgorLlAKK0FuIG9wdGltaXphdGlvbiBjYXRjaGVzIHNvbWUgb2YgdGhlIG1vcmUgc2ltcGxlIGNhc2VzIHN1Y2ggYXMKKy5zcAorICAoYSspKmIKKy5zcAord2hlcmUgYSBsaXRlcmFsIGNoYXJhY3RlciBmb2xsb3dzLiBCZWZvcmUgZW1iYXJraW5nIG9uIHRoZSBzdGFuZGFyZCBtYXRjaGluZworcHJvY2VkdXJlLCBQQ1JFMiBjaGVja3MgdGhhdCB0aGVyZSBpcyBhICJiIiBsYXRlciBpbiB0aGUgc3ViamVjdCBzdHJpbmcsIGFuZCBpZgordGhlcmUgaXMgbm90LCBpdCBmYWlscyB0aGUgbWF0Y2ggaW1tZWRpYXRlbHkuIEhvd2V2ZXIsIHdoZW4gdGhlcmUgaXMgbm8KK2ZvbGxvd2luZyBsaXRlcmFsIHRoaXMgb3B0aW1pemF0aW9uIGNhbm5vdCBiZSB1c2VkLiBZb3UgY2FuIHNlZSB0aGUgZGlmZmVyZW5jZQorYnkgY29tcGFyaW5nIHRoZSBiZWhhdmlvdXIgb2YKKy5zcAorICAoYSspKlxlZAorLnNwCit3aXRoIHRoZSBwYXR0ZXJuIGFib3ZlLiBUaGUgZm9ybWVyIGdpdmVzIGEgZmFpbHVyZSBhbG1vc3QgaW5zdGFudGx5IHdoZW4KK2FwcGxpZWQgdG8gYSB3aG9sZSBsaW5lIG9mICJhIiBjaGFyYWN0ZXJzLCB3aGVyZWFzIHRoZSBsYXR0ZXIgdGFrZXMgYW4KK2FwcHJlY2lhYmxlIHRpbWUgd2l0aCBzdHJpbmdzIGxvbmdlciB0aGFuIGFib3V0IDIwIGNoYXJhY3RlcnMuCisuUAorSW4gbWFueSBjYXNlcywgdGhlIHNvbHV0aW9uIHRvIHRoaXMga2luZCBvZiBwZXJmb3JtYW5jZSBpc3N1ZSBpcyB0byB1c2UgYW4KK2F0b21pYyBncm91cCBvciBhIHBvc3Nlc3NpdmUgcXVhbnRpZmllci4KKy4KKy4KKy5TSCBBVVRIT1IKKy5ycworLnNwCisubmYKK1BoaWxpcCBIYXplbAorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorQ2FtYnJpZGdlLCBFbmdsYW5kLgorLmZpCisuCisuCisuU0ggUkVWSVNJT04KKy5ycworLnNwCisubmYKK0xhc3QgdXBkYXRlZDogMDIgSmFudWFyeSAyMDE1CitDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy5maQpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUycG9zaXguMyBiL2Rpc3QyL2RvYy9wY3JlMnBvc2l4LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMzZTk2YwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMnBvc2l4LjMKQEAgLTAsMCArMSwyNzUgQEAKKy5USCBQQ1JFMlBPU0lYIDMgIjI5IE5vdmVtYmVyIDIwMTUiICJQQ1JFMiAxMC4yMSIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCAiU1lOT1BTSVMiCisucnMKKy5zcAorLkIgI2luY2x1ZGUgPHBjcmUycG9zaXguaD4KKy5QUAorLm5mCisuQiBpbnQgcmVnY29tcChyZWdleF90ICpcZklwcmVnXGZQLCBjb25zdCBjaGFyICpcZklwYXR0ZXJuXGZQLAorLkIgIiAgICAgaW50IFxmSWNmbGFnc1xmUCk7IgorLnNwCisuQiBpbnQgcmVnZXhlYyhjb25zdCByZWdleF90ICpcZklwcmVnXGZQLCBjb25zdCBjaGFyICpcZklzdHJpbmdcZlAsCisuQiAiICAgICBzaXplX3QgXGZJbm1hdGNoXGZQLCByZWdtYXRjaF90IFxmSXBtYXRjaFxmUFtdLCBpbnQgXGZJZWZsYWdzXGZQKTsiCisuc3AKKy5CICJzaXplX3QgcmVnZXJyb3IoaW50IFxmSWVycmNvZGVcZlAsIGNvbnN0IHJlZ2V4X3QgKlxmSXByZWdcZlAsIgorLkIgIiAgICAgY2hhciAqXGZJZXJyYnVmXGZQLCBzaXplX3QgXGZJZXJyYnVmX3NpemVcZlApOyIKKy5zcAorLkIgdm9pZCByZWdmcmVlKHJlZ2V4X3QgKlxmSXByZWdcZlApOworLmZpCisuCisuU0ggREVTQ1JJUFRJT04KKy5ycworLnNwCitUaGlzIHNldCBvZiBmdW5jdGlvbnMgcHJvdmlkZXMgYSBQT1NJWC1zdHlsZSBBUEkgZm9yIHRoZSBQQ1JFMiByZWd1bGFyCitleHByZXNzaW9uIDgtYml0IGxpYnJhcnkuIFNlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitkb2N1bWVudGF0aW9uIGZvciBhIGRlc2NyaXB0aW9uIG9mIFBDUkUyJ3MgbmF0aXZlIEFQSSwgd2hpY2ggY29udGFpbnMgbXVjaAorYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LiBUaGVyZSBpcyBubyBQT1NJWC1zdHlsZSB3cmFwcGVyIGZvciBQQ1JFMidzIDE2LWJpdAorYW5kIDMyLWJpdCBsaWJyYXJpZXMuCisuUAorVGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQgaGVyZSBhcmUganVzdCB3cmFwcGVyIGZ1bmN0aW9ucyB0aGF0IHVsdGltYXRlbHkgY2FsbAordGhlIFBDUkUyIG5hdGl2ZSBBUEkuIFRoZWlyIHByb3RvdHlwZXMgYXJlIGRlZmluZWQgaW4gdGhlIFxmQnBjcmUycG9zaXguaFxmUAoraGVhZGVyIGZpbGUsIGFuZCBvbiBVbml4IHN5c3RlbXMgdGhlIGxpYnJhcnkgaXRzZWxmIGlzIGNhbGxlZAorXGZCbGlicGNyZTItcG9zaXguYVxmUCwgc28gY2FuIGJlIGFjY2Vzc2VkIGJ5IGFkZGluZyBcZkItbHBjcmUyLXBvc2l4XGZQIHRvIHRoZQorY29tbWFuZCBmb3IgbGlua2luZyBhbiBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlbS4gQmVjYXVzZSB0aGUgUE9TSVggZnVuY3Rpb25zCitjYWxsIHRoZSBuYXRpdmUgb25lcywgaXQgaXMgYWxzbyBuZWNlc3NhcnkgdG8gYWRkIFxmQi1scGNyZTItOFxmUC4KKy5QCitUaG9zZSBQT1NJWCBvcHRpb24gYml0cyB0aGF0IGNhbiByZWFzb25hYmx5IGJlIG1hcHBlZCB0byBQQ1JFMiBuYXRpdmUgb3B0aW9ucworaGF2ZSBiZWVuIGltcGxlbWVudGVkLiBJbiBhZGRpdGlvbiwgdGhlIG9wdGlvbiBSRUdfRVhURU5ERUQgaXMgZGVmaW5lZCB3aXRoIHRoZQordmFsdWUgemVyby4gVGhpcyBoYXMgbm8gZWZmZWN0LCBidXQgc2luY2UgcHJvZ3JhbXMgdGhhdCBhcmUgd3JpdHRlbiB0byB0aGUKK1BPU0lYIGludGVyZmFjZSBvZnRlbiB1c2UgaXQsIHRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHNsb3QgaW4gUENSRTIgYXMgYQorcmVwbGFjZW1lbnQgbGlicmFyeS4gT3RoZXIgUE9TSVggb3B0aW9ucyBhcmUgbm90IGV2ZW4gZGVmaW5lZC4KKy5QCitUaGVyZSBhcmUgYWxzbyBzb21lIG90aGVyIG9wdGlvbnMgdGhhdCBhcmUgbm90IGRlZmluZWQgYnkgUE9TSVguIFRoZXNlIGhhdmUKK2JlZW4gYWRkZWQgYXQgdGhlIHJlcXVlc3Qgb2YgdXNlcnMgd2hvIHdhbnQgdG8gbWFrZSB1c2Ugb2YgY2VydGFpbgorUENSRTItc3BlY2lmaWMgZmVhdHVyZXMgdmlhIHRoZSBQT1NJWCBjYWxsaW5nIGludGVyZmFjZS4KKy5QCitXaGVuIFBDUkUyIGlzIGNhbGxlZCB2aWEgdGhlc2UgZnVuY3Rpb25zLCBpdCBpcyBvbmx5IHRoZSBBUEkgdGhhdCBpcyBQT1NJWC1saWtlCitpbiBzdHlsZS4gVGhlIHN5bnRheCBhbmQgc2VtYW50aWNzIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIHRoZW1zZWx2ZXMgYXJlCitzdGlsbCB0aG9zZSBvZiBQZXJsLCBzdWJqZWN0IHRvIHRoZSBzZXR0aW5nIG9mIHZhcmlvdXMgUENSRTIgb3B0aW9ucywgYXMKK2Rlc2NyaWJlZCBiZWxvdy4gIlBPU0lYLWxpa2UgaW4gc3R5bGUiIG1lYW5zIHRoYXQgdGhlIEFQSSBhcHByb3hpbWF0ZXMgdG8gdGhlCitQT1NJWCBkZWZpbml0aW9uOyBpdCBpcyBub3QgZnVsbHkgUE9TSVgtY29tcGF0aWJsZSwgYW5kIGluIG11bHRpLXVuaXQgZW5jb2RpbmcKK2RvbWFpbnMgaXQgaXMgcHJvYmFibHkgZXZlbiBsZXNzIGNvbXBhdGlibGUuCisuUAorVGhlIGhlYWRlciBmb3IgdGhlc2UgZnVuY3Rpb25zIGlzIHN1cHBsaWVkIGFzIFxmQnBjcmUycG9zaXguaFxmUCB0byBhdm9pZCBhbnkKK3BvdGVudGlhbCBjbGFzaCB3aXRoIG90aGVyIFBPU0lYIGxpYnJhcmllcy4gSXQgY2FuLCBvZiBjb3Vyc2UsIGJlIHJlbmFtZWQgb3IKK2FsaWFzZWQgYXMgXGZCcmVnZXguaFxmUCwgd2hpY2ggaXMgdGhlICJjb3JyZWN0IiBuYW1lLiBJdCBwcm92aWRlcyB0d28KK3N0cnVjdHVyZSB0eXBlcywgXGZJcmVnZXhfdFxmUCBmb3IgY29tcGlsZWQgaW50ZXJuYWwgZm9ybXMsIGFuZAorXGZJcmVnbWF0Y2hfdFxmUCBmb3IgcmV0dXJuaW5nIGNhcHR1cmVkIHN1YnN0cmluZ3MuIEl0IGFsc28gZGVmaW5lcyBzb21lCitjb25zdGFudHMgd2hvc2UgbmFtZXMgc3RhcnQgd2l0aCAiUkVHXyI7IHRoZXNlIGFyZSB1c2VkIGZvciBzZXR0aW5nIG9wdGlvbnMgYW5kCitpZGVudGlmeWluZyBlcnJvciBjb2Rlcy4KKy4KKy4KKy5TSCAiQ09NUElMSU5HIEEgUEFUVEVSTiIKKy5ycworLnNwCitUaGUgZnVuY3Rpb24gXGZCcmVnY29tcCgpXGZQIGlzIGNhbGxlZCB0byBjb21waWxlIGEgcGF0dGVybiBpbnRvIGFuCitpbnRlcm5hbCBmb3JtLiBUaGUgcGF0dGVybiBpcyBhIEMgc3RyaW5nIHRlcm1pbmF0ZWQgYnkgYSBiaW5hcnkgemVybywgYW5kCitpcyBwYXNzZWQgaW4gdGhlIGFyZ3VtZW50IFxmSXBhdHRlcm5cZlAuIFRoZSBcZklwcmVnXGZQIGFyZ3VtZW50IGlzIGEgcG9pbnRlcgordG8gYSBcZkJyZWdleF90XGZQIHN0cnVjdHVyZSB0aGF0IGlzIHVzZWQgYXMgYSBiYXNlIGZvciBzdG9yaW5nIGluZm9ybWF0aW9uCithYm91dCB0aGUgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uLgorLlAKK1RoZSBhcmd1bWVudCBcZkljZmxhZ3NcZlAgaXMgZWl0aGVyIHplcm8sIG9yIGNvbnRhaW5zIG9uZSBvciBtb3JlIG9mIHRoZSBiaXRzCitkZWZpbmVkIGJ5IHRoZSBmb2xsb3dpbmcgbWFjcm9zOgorLnNwCisgIFJFR19ET1RBTEwKKy5zcAorVGhlIFBDUkUyX0RPVEFMTCBvcHRpb24gaXMgc2V0IHdoZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBwYXNzZWQgZm9yCitjb21waWxhdGlvbiB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBOb3RlIHRoYXQgUkVHX0RPVEFMTCBpcyBub3QgcGFydCBvZiB0aGUKK1BPU0lYIHN0YW5kYXJkLgorLnNwCisgIFJFR19JQ0FTRQorLnNwCitUaGUgUENSRTJfQ0FTRUxFU1Mgb3B0aW9uIGlzIHNldCB3aGVuIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgcGFzc2VkIGZvcgorY29tcGlsYXRpb24gdG8gdGhlIG5hdGl2ZSBmdW5jdGlvbi4KKy5zcAorICBSRUdfTkVXTElORQorLnNwCitUaGUgUENSRTJfTVVMVElMSU5FIG9wdGlvbiBpcyBzZXQgd2hlbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGlzIHBhc3NlZCBmb3IKK2NvbXBpbGF0aW9uIHRvIHRoZSBuYXRpdmUgZnVuY3Rpb24uIE5vdGUgdGhhdCB0aGlzIGRvZXMgXGZJbm90XGZQIG1pbWljIHRoZQorZGVmaW5lZCBQT1NJWCBiZWhhdmlvdXIgZm9yIFJFR19ORVdMSU5FIChzZWUgdGhlIGZvbGxvd2luZyBzZWN0aW9uKS4KKy5zcAorICBSRUdfTk9TVUIKKy5zcAorVGhlIFBDUkUyX05PX0FVVE9fQ0FQVFVSRSBvcHRpb24gaXMgc2V0IHdoZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBwYXNzZWQKK2ZvciBjb21waWxhdGlvbiB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBJbiBhZGRpdGlvbiwgd2hlbiBhIHBhdHRlcm4gdGhhdCBpcworY29tcGlsZWQgd2l0aCB0aGlzIGZsYWcgaXMgcGFzc2VkIHRvIFxmQnJlZ2V4ZWMoKVxmUCBmb3IgbWF0Y2hpbmcsIHRoZQorXGZJbm1hdGNoXGZQIGFuZCBcZklwbWF0Y2hcZlAgYXJndW1lbnRzIGFyZSBpZ25vcmVkLCBhbmQgbm8gY2FwdHVyZWQgc3RyaW5ncworYXJlIHJldHVybmVkLgorLnNwCisgIFJFR19VQ1AKKy5zcAorVGhlIFBDUkUyX1VDUCBvcHRpb24gaXMgc2V0IHdoZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBwYXNzZWQgZm9yCitjb21waWxhdGlvbiB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBUaGlzIGNhdXNlcyBQQ1JFMiB0byB1c2UgVW5pY29kZSBwcm9wZXJ0aWVzCit3aGVuIG1hdGNoaW5lIFxlZCwgXGV3LCBldGMuLCBpbnN0ZWFkIG9mIGp1c3QgcmVjb2duaXppbmcgQVNDSUkgdmFsdWVzLiBOb3RlCit0aGF0IFJFR19VQ1AgaXMgbm90IHBhcnQgb2YgdGhlIFBPU0lYIHN0YW5kYXJkLgorLnNwCisgIFJFR19VTkdSRUVEWQorLnNwCitUaGUgUENSRTJfVU5HUkVFRFkgb3B0aW9uIGlzIHNldCB3aGVuIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gaXMgcGFzc2VkIGZvcgorY29tcGlsYXRpb24gdG8gdGhlIG5hdGl2ZSBmdW5jdGlvbi4gTm90ZSB0aGF0IFJFR19VTkdSRUVEWSBpcyBub3QgcGFydCBvZiB0aGUKK1BPU0lYIHN0YW5kYXJkLgorLnNwCisgIFJFR19VVEYKKy5zcAorVGhlIFBDUkUyX1VURiBvcHRpb24gaXMgc2V0IHdoZW4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBwYXNzZWQgZm9yCitjb21waWxhdGlvbiB0byB0aGUgbmF0aXZlIGZ1bmN0aW9uLiBUaGlzIGNhdXNlcyB0aGUgcGF0dGVybiBpdHNlbGYgYW5kIGFsbCBkYXRhCitzdHJpbmdzIHVzZWQgZm9yIG1hdGNoaW5nIGl0IHRvIGJlIHRyZWF0ZWQgYXMgVVRGLTggc3RyaW5ncy4gTm90ZSB0aGF0IFJFR19VVEYKK2lzIG5vdCBwYXJ0IG9mIHRoZSBQT1NJWCBzdGFuZGFyZC4KKy5QCitJbiB0aGUgYWJzZW5jZSBvZiB0aGVzZSBmbGFncywgbm8gb3B0aW9ucyBhcmUgcGFzc2VkIHRvIHRoZSBuYXRpdmUgZnVuY3Rpb24uCitUaGlzIG1lYW5zIHRoZSB0aGUgcmVnZXggaXMgY29tcGlsZWQgd2l0aCBQQ1JFMiBkZWZhdWx0IHNlbWFudGljcy4gSW4KK3BhcnRpY3VsYXIsIHRoZSB3YXkgaXQgaGFuZGxlcyBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gdGhlIHN1YmplY3Qgc3RyaW5nIGlzIHRoZQorUGVybCB3YXksIG5vdCB0aGUgUE9TSVggd2F5LiBOb3RlIHRoYXQgc2V0dGluZyBQQ1JFMl9NVUxUSUxJTkUgaGFzIG9ubHkKK1xmSXNvbWVcZlAgb2YgdGhlIGVmZmVjdHMgc3BlY2lmaWVkIGZvciBSRUdfTkVXTElORS4gSXQgZG9lcyBub3QgYWZmZWN0IHRoZSB3YXkKK25ld2xpbmVzIGFyZSBtYXRjaGVkIGJ5IHRoZSBkb3QgbWV0YWNoYXJhY3RlciAodGhleSBhcmUgbm90KSBvciBieSBhIG5lZ2F0aXZlCitjbGFzcyBzdWNoIGFzIFteYV0gKHRoZXkgYXJlKS4KKy5QCitUaGUgeWllbGQgb2YgXGZCcmVnY29tcCgpXGZQIGlzIHplcm8gb24gc3VjY2VzcywgYW5kIG5vbi16ZXJvIG90aGVyd2lzZS4gVGhlCitcZklwcmVnXGZQIHN0cnVjdHVyZSBpcyBmaWxsZWQgaW4gb24gc3VjY2VzcywgYW5kIG9uZSBtZW1iZXIgb2YgdGhlIHN0cnVjdHVyZQoraXMgcHVibGljOiBcZklyZV9uc3ViXGZQIGNvbnRhaW5zIHRoZSBudW1iZXIgb2YgY2FwdHVyaW5nIHN1YnBhdHRlcm5zIGluCit0aGUgcmVndWxhciBleHByZXNzaW9uLiBWYXJpb3VzIGVycm9yIGNvZGVzIGFyZSBkZWZpbmVkIGluIHRoZSBoZWFkZXIgZmlsZS4KKy5QCitOT1RFOiBJZiB0aGUgeWllbGQgb2YgXGZCcmVnY29tcCgpXGZQIGlzIG5vbi16ZXJvLCB5b3UgbXVzdCBub3QgYXR0ZW1wdCB0bwordXNlIHRoZSBjb250ZW50cyBvZiB0aGUgXGZJcHJlZ1xmUCBzdHJ1Y3R1cmUuIElmLCBmb3IgZXhhbXBsZSwgeW91IHBhc3MgaXQgdG8KK1xmQnJlZ2V4ZWMoKVxmUCwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQgYW5kIHlvdXIgcHJvZ3JhbSBpcyBsaWtlbHkgdG8gY3Jhc2guCisuCisuCisuU0ggIk1BVENISU5HIE5FV0xJTkUgQ0hBUkFDVEVSUyIKKy5ycworLnNwCitUaGlzIGFyZWEgaXMgbm90IHNpbXBsZSwgYmVjYXVzZSBQT1NJWCBhbmQgUGVybCB0YWtlIGRpZmZlcmVudCB2aWV3cyBvZiB0aGluZ3MuCitJdCBpcyBub3QgcG9zc2libGUgdG8gZ2V0IFBDUkUyIHRvIG9iZXkgUE9TSVggc2VtYW50aWNzLCBidXQgdGhlbiBQQ1JFMiB3YXMKK25ldmVyIGludGVuZGVkIHRvIGJlIGEgUE9TSVggZW5naW5lLiBUaGUgZm9sbG93aW5nIHRhYmxlIGxpc3RzIHRoZSBkaWZmZXJlbnQKK3Bvc3NpYmlsaXRpZXMgZm9yIG1hdGNoaW5nIG5ld2xpbmUgY2hhcmFjdGVycyBpbiBQZXJsIGFuZCBQQ1JFMjoKKy5zcAorICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0ICAgQ2hhbmdlIHdpdGgKKy5zcAorICAuIG1hdGNoZXMgbmV3bGluZSAgICAgICAgICBubyAgICAgUENSRTJfRE9UQUxMCisgIG5ld2xpbmUgbWF0Y2hlcyBbXmFdICAgICAgIHllcyAgICBub3QgY2hhbmdlYWJsZQorICAkIG1hdGNoZXMgXGVuIGF0IGVuZCAgICAgICAgeWVzICAgIFBDUkUyX0RPTExBUl9FTkRPTkxZCisgICQgbWF0Y2hlcyBcZW4gaW4gbWlkZGxlICAgICBubyAgICAgUENSRTJfTVVMVElMSU5FCisgIF4gbWF0Y2hlcyBcZW4gaW4gbWlkZGxlICAgICBubyAgICAgUENSRTJfTVVMVElMSU5FCisuc3AKK1RoaXMgaXMgdGhlIGVxdWl2YWxlbnQgdGFibGUgZm9yIGEgUE9TSVgtY29tcGF0aWJsZSBwYXR0ZXJuIG1hdGNoZXI6Cisuc3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCAgIENoYW5nZSB3aXRoCisuc3AKKyAgLiBtYXRjaGVzIG5ld2xpbmUgICAgICAgICAgeWVzICAgIFJFR19ORVdMSU5FCisgIG5ld2xpbmUgbWF0Y2hlcyBbXmFdICAgICAgIHllcyAgICBSRUdfTkVXTElORQorICAkIG1hdGNoZXMgXGVuIGF0IGVuZCAgICAgICAgbm8gICAgIFJFR19ORVdMSU5FCisgICQgbWF0Y2hlcyBcZW4gaW4gbWlkZGxlICAgICBubyAgICAgUkVHX05FV0xJTkUKKyAgXiBtYXRjaGVzIFxlbiBpbiBtaWRkbGUgICAgIG5vICAgICBSRUdfTkVXTElORQorLnNwCitUaGlzIGJlaGF2aW91ciBpcyBub3Qgd2hhdCBoYXBwZW5zIHdoZW4gUENSRTIgaXMgY2FsbGVkIHZpYSBpdHMgUE9TSVgKK0FQSS4gQnkgZGVmYXVsdCwgUENSRTIncyBiZWhhdmlvdXIgaXMgdGhlIHNhbWUgYXMgUGVybCdzLCBleGNlcHQgdGhhdCB0aGVyZSBpcworbm8gZXF1aXZhbGVudCBmb3IgUENSRTJfRE9MTEFSX0VORE9OTFkgaW4gUGVybC4gSW4gYm90aCBQQ1JFMiBhbmQgUGVybCwgdGhlcmUKK2lzIG5vIHdheSB0byBzdG9wIG5ld2xpbmUgZnJvbSBtYXRjaGluZyBbXmFdLgorLlAKK0RlZmF1bHQgUE9TSVggbmV3bGluZSBoYW5kbGluZyBjYW4gYmUgb2J0YWluZWQgYnkgc2V0dGluZyBQQ1JFMl9ET1RBTEwgYW5kCitQQ1JFMl9ET0xMQVJfRU5ET05MWSB3aGVuIGNhbGxpbmcgXGZCcGNyZTJfY29tcGlsZSgpXGZQIGRpcmVjdGx5LCBidXQgdGhlcmUgaXMKK25vIHdheSB0byBtYWtlIFBDUkUyIGJlaGF2ZSBleGFjdGx5IGFzIGZvciB0aGUgUkVHX05FV0xJTkUgYWN0aW9uLiBXaGVuIHVzaW5nCit0aGUgUE9TSVggQVBJLCBwYXNzaW5nIFJFR19ORVdMSU5FIHRvIFBDUkUyJ3MgXGZCcmVnY29tcCgpXGZQIGZ1bmN0aW9uCitjYXVzZXMgUENSRTJfTVVMVElMSU5FIHRvIGJlIHBhc3NlZCB0byBcZkJwY3JlMl9jb21waWxlKClcZlAsIGFuZCBSRUdfRE9UQUxMCitwYXNzZXMgUENSRTJfRE9UQUxMLiBUaGVyZSBpcyBubyB3YXkgdG8gcGFzcyBQQ1JFMl9ET0xMQVJfRU5ET05MWS4KKy4KKy4KKy5TSCAiTUFUQ0hJTkcgQSBQQVRURVJOIgorLnJzCisuc3AKK1RoZSBmdW5jdGlvbiBcZkJyZWdleGVjKClcZlAgaXMgY2FsbGVkIHRvIG1hdGNoIGEgY29tcGlsZWQgcGF0dGVybiBcZklwcmVnXGZQCithZ2FpbnN0IGEgZ2l2ZW4gXGZJc3RyaW5nXGZQLCB3aGljaCBpcyBieSBkZWZhdWx0IHRlcm1pbmF0ZWQgYnkgYSB6ZXJvIGJ5dGUKKyhidXQgc2VlIFJFR19TVEFSVEVORCBiZWxvdyksIHN1YmplY3QgdG8gdGhlIG9wdGlvbnMgaW4gXGZJZWZsYWdzXGZQLiBUaGVzZSBjYW4KK2JlOgorLnNwCisgIFJFR19OT1RCT0wKKy5zcAorVGhlIFBDUkUyX05PVEJPTCBvcHRpb24gaXMgc2V0IHdoZW4gY2FsbGluZyB0aGUgdW5kZXJseWluZyBQQ1JFMiBtYXRjaGluZworZnVuY3Rpb24uCisuc3AKKyAgUkVHX05PVEVNUFRZCisuc3AKK1RoZSBQQ1JFMl9OT1RFTVBUWSBvcHRpb24gaXMgc2V0IHdoZW4gY2FsbGluZyB0aGUgdW5kZXJseWluZyBQQ1JFMiBtYXRjaGluZworZnVuY3Rpb24uIE5vdGUgdGhhdCBSRUdfTk9URU1QVFkgaXMgbm90IHBhcnQgb2YgdGhlIFBPU0lYIHN0YW5kYXJkLiBIb3dldmVyLAorc2V0dGluZyB0aGlzIG9wdGlvbiBjYW4gZ2l2ZSBtb3JlIFBPU0lYLWxpa2UgYmVoYXZpb3VyIGluIHNvbWUgc2l0dWF0aW9ucy4KKy5zcAorICBSRUdfTk9URU9MCisuc3AKK1RoZSBQQ1JFMl9OT1RFT0wgb3B0aW9uIGlzIHNldCB3aGVuIGNhbGxpbmcgdGhlIHVuZGVybHlpbmcgUENSRTIgbWF0Y2hpbmcKK2Z1bmN0aW9uLgorLnNwCisgIFJFR19TVEFSVEVORAorLnNwCitUaGUgc3RyaW5nIGlzIGNvbnNpZGVyZWQgdG8gc3RhcnQgYXQgXGZJc3RyaW5nXGZQICsgXGZJcG1hdGNoWzBdLnJtX3NvXGZQIGFuZAordG8gaGF2ZSBhIHRlcm1pbmF0aW5nIE5VTCBsb2NhdGVkIGF0IFxmSXN0cmluZ1xmUCArIFxmSXBtYXRjaFswXS5ybV9lb1xmUAorKHRoZXJlIG5lZWQgbm90IGFjdHVhbGx5IGJlIGEgTlVMIGF0IHRoYXQgbG9jYXRpb24pLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZgorXGZJbm1hdGNoXGZQLiBUaGlzIGlzIGEgQlNEIGV4dGVuc2lvbiwgY29tcGF0aWJsZSB3aXRoIGJ1dCBub3Qgc3BlY2lmaWVkIGJ5CitJRUVFIFN0YW5kYXJkIDEwMDMuMiAoUE9TSVguMiksIGFuZCBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24gaW4gc29mdHdhcmUKK2ludGVuZGVkIHRvIGJlIHBvcnRhYmxlIHRvIG90aGVyIHN5c3RlbXMuIE5vdGUgdGhhdCBhIG5vbi16ZXJvIFxmSXJtX3NvXGZQIGRvZXMKK25vdCBpbXBseSBSRUdfTk9UQk9MOyBSRUdfU1RBUlRFTkQgYWZmZWN0cyBvbmx5IHRoZSBsb2NhdGlvbiBvZiB0aGUgc3RyaW5nLCBub3QKK2hvdyBpdCBpcyBtYXRjaGVkLiBTZXR0aW5nIFJFR19TVEFSVEVORCBhbmQgcGFzc2luZyBcZklwbWF0Y2hcZlAgYXMgTlVMTCBhcmUKK211dHVhbGx5IGV4Y2x1c2l2ZTsgdGhlIGVycm9yIFJFR19JTlZBUkcgaXMgcmV0dXJuZWQuCisuUAorSWYgdGhlIHBhdHRlcm4gd2FzIGNvbXBpbGVkIHdpdGggdGhlIFJFR19OT1NVQiBmbGFnLCBubyBkYXRhIGFib3V0IGFueSBtYXRjaGVkCitzdHJpbmdzIGlzIHJldHVybmVkLiBUaGUgXGZJbm1hdGNoXGZQIGFuZCBcZklwbWF0Y2hcZlAgYXJndW1lbnRzIG9mCitcZkJyZWdleGVjKClcZlAgYXJlIGlnbm9yZWQuCisuUAorSWYgdGhlIHZhbHVlIG9mIFxmSW5tYXRjaFxmUCBpcyB6ZXJvLCBvciBpZiB0aGUgdmFsdWUgXGZJcG1hdGNoXGZQIGlzIE5VTEwsCitubyBkYXRhIGFib3V0IGFueSBtYXRjaGVkIHN0cmluZ3MgaXMgcmV0dXJuZWQuCisuUAorT3RoZXJ3aXNlLHRoZSBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgdGhhdCB3YXMgbWF0Y2hlZCwgYW5kIGFsc28gYW55IGNhcHR1cmVkCitzdWJzdHJpbmdzLCBhcmUgcmV0dXJuZWQgdmlhIHRoZSBcZklwbWF0Y2hcZlAgYXJndW1lbnQsIHdoaWNoIHBvaW50cyB0byBhbgorYXJyYXkgb2YgXGZJbm1hdGNoXGZQIHN0cnVjdHVyZXMgb2YgdHlwZSBcZklyZWdtYXRjaF90XGZQLCBjb250YWluaW5nIHRoZQorbWVtYmVycyBcZklybV9zb1xmUCBhbmQgXGZJcm1fZW9cZlAuIFRoZXNlIGNvbnRhaW4gdGhlIGJ5dGUgb2Zmc2V0IHRvIHRoZSBmaXJzdAorY2hhcmFjdGVyIG9mIGVhY2ggc3Vic3RyaW5nIGFuZCB0aGUgb2Zmc2V0IHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGVuZAorb2YgZWFjaCBzdWJzdHJpbmcsIHJlc3BlY3RpdmVseS4gVGhlIDB0aCBlbGVtZW50IG9mIHRoZSB2ZWN0b3IgcmVsYXRlcyB0byB0aGUKK2VudGlyZSBwb3J0aW9uIG9mIFxmSXN0cmluZ1xmUCB0aGF0IHdhcyBtYXRjaGVkOyBzdWJzZXF1ZW50IGVsZW1lbnRzIHJlbGF0ZSB0bwordGhlIGNhcHR1cmluZyBzdWJwYXR0ZXJucyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9uLiBVbnVzZWQgZW50cmllcyBpbiB0aGUKK2FycmF5IGhhdmUgYm90aCBzdHJ1Y3R1cmUgbWVtYmVycyBzZXQgdG8gLTEuCisuUAorQSBzdWNjZXNzZnVsIG1hdGNoIHlpZWxkcyBhIHplcm8gcmV0dXJuOyB2YXJpb3VzIGVycm9yIGNvZGVzIGFyZSBkZWZpbmVkIGluIHRoZQoraGVhZGVyIGZpbGUsIG9mIHdoaWNoIFJFR19OT01BVENIIGlzIHRoZSAiZXhwZWN0ZWQiIGZhaWx1cmUgY29kZS4KKy4KKy4KKy5TSCAiRVJST1IgTUVTU0FHRVMiCisucnMKKy5zcAorVGhlIFxmQnJlZ2Vycm9yKClcZlAgZnVuY3Rpb24gbWFwcyBhIG5vbi16ZXJvIGVycm9yY29kZSBmcm9tIGVpdGhlcgorXGZCcmVnY29tcCgpXGZQIG9yIFxmQnJlZ2V4ZWMoKVxmUCB0byBhIHByaW50YWJsZSBtZXNzYWdlLiBJZiBcZklwcmVnXGZQIGlzIG5vdAorTlVMTCwgdGhlIGVycm9yIHNob3VsZCBoYXZlIGFyaXNlbiBmcm9tIHRoZSB1c2Ugb2YgdGhhdCBzdHJ1Y3R1cmUuIEEgbWVzc2FnZQordGVybWluYXRlZCBieSBhIGJpbmFyeSB6ZXJvIGlzIHBsYWNlZCBpbiBcZkllcnJidWZcZlAuIElmIHRoZSBidWZmZXIgaXMgdG9vCitzaG9ydCwgb25seSB0aGUgZmlyc3QgXGZJZXJyYnVmX3NpemVcZlAgLSAxIGNoYXJhY3RlcnMgb2YgdGhlIGVycm9yIG1lc3NhZ2UgYXJlCit1c2VkLiBUaGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIHRoZSBzaXplIG9mIGJ1ZmZlciBuZWVkZWQgdG8gaG9sZCB0aGUgd2hvbGUKK21lc3NhZ2UsIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgemVyby4gVGhpcyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4KK1xmSWVycmJ1Zl9zaXplXGZQIGlmIHRoZSBtZXNzYWdlIHdhcyB0cnVuY2F0ZWQuCisuCisuCisuU0ggTUVNT1JZIFVTQUdFCisucnMKKy5zcAorQ29tcGlsaW5nIGEgcmVndWxhciBleHByZXNzaW9uIGNhdXNlcyBtZW1vcnkgdG8gYmUgYWxsb2NhdGVkIGFuZCBhc3NvY2lhdGVkCit3aXRoIHRoZSBcZklwcmVnXGZQIHN0cnVjdHVyZS4gVGhlIGZ1bmN0aW9uIFxmQnJlZ2ZyZWUoKVxmUCBmcmVlcyBhbGwgc3VjaAorbWVtb3J5LCBhZnRlciB3aGljaCBcZklwcmVnXGZQIG1heSBubyBsb25nZXIgYmUgdXNlZCBhcyBhIGNvbXBpbGVkIGV4cHJlc3Npb24uCisuCisuCisuU0ggQVVUSE9SCisucnMKKy5zcAorLm5mCitQaGlsaXAgSGF6ZWwKK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKK0NhbWJyaWRnZSwgRW5nbGFuZC4KKy5maQorLgorLgorLlNIIFJFVklTSU9OCisucnMKKy5zcAorLm5mCitMYXN0IHVwZGF0ZWQ6IDI5IE5vdmVtYmVyIDIwMTUKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJzYW1wbGUuMyBiL2Rpc3QyL2RvYy9wY3JlMnNhbXBsZS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNDY5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJzYW1wbGUuMwpAQCAtMCwwICsxLDk0IEBACisuVEggUENSRTJTQU1QTEUgMyAiMjAgT2N0b2JlciAyMDE0IiAiUENSRTIgMTAuMDAiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggIlBDUkUyIFNBTVBMRSBQUk9HUkFNIgorLnJzCisuc3AKK0Egc2ltcGxlLCBjb21wbGV0ZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0gdG8gZ2V0IHlvdSBzdGFydGVkIHdpdGggdXNpbmcgUENSRTIgaXMKK3N1cHBsaWVkIGluIHRoZSBmaWxlIFxmSXBjcmUyZGVtby5jXGZQIGluIHRoZSBcZkJzcmNcZlAgZGlyZWN0b3J5IGluIHRoZSBQQ1JFMgorZGlzdHJpYnV0aW9uLiBBIGxpc3Rpbmcgb2YgdGhpcyBwcm9ncmFtIGlzIGdpdmVuIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyZGVtb1xmUAorLlwiCitkb2N1bWVudGF0aW9uLiBJZiB5b3UgZG8gbm90IGhhdmUgYSBjb3B5IG9mIHRoZSBQQ1JFMiBkaXN0cmlidXRpb24sIHlvdSBjYW4KK3NhdmUgdGhpcyBsaXN0aW5nIHRvIHJlLWNyZWF0ZSB0aGUgY29udGVudHMgb2YgXGZJcGNyZTJkZW1vLmNcZlAuCisuUAorVGhlIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSwgd2hpY2ggdXNlcyB0aGUgUENSRTIgOC1iaXQgbGlicmFyeSwgY29tcGlsZXMgdGhlCityZWd1bGFyIGV4cHJlc3Npb24gdGhhdCBpcyBpdHMgZmlyc3QgYXJndW1lbnQsIGFuZCBtYXRjaGVzIGl0IGFnYWluc3QgdGhlCitzdWJqZWN0IHN0cmluZyBpbiBpdHMgc2Vjb25kIGFyZ3VtZW50LiBObyBQQ1JFMiBvcHRpb25zIGFyZSBzZXQsIGFuZCBkZWZhdWx0CitjaGFyYWN0ZXIgdGFibGVzIGFyZSB1c2VkLiBJZiBtYXRjaGluZyBzdWNjZWVkcywgdGhlIHByb2dyYW0gb3V0cHV0cyB0aGUKK3BvcnRpb24gb2YgdGhlIHN1YmplY3QgdGhhdCBtYXRjaGVkLCB0b2dldGhlciB3aXRoIHRoZSBjb250ZW50cyBvZiBhbnkgY2FwdHVyZWQKK3N1YnN0cmluZ3MuCisuUAorSWYgdGhlIC1nIG9wdGlvbiBpcyBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLCB0aGUgcHJvZ3JhbSB0aGVuIGdvZXMgb24gdG8KK2NoZWNrIGZvciBmdXJ0aGVyIG1hdGNoZXMgb2YgdGhlIHNhbWUgcmVndWxhciBleHByZXNzaW9uIGluIHRoZSBzYW1lIHN1YmplY3QKK3N0cmluZy4gVGhlIGxvZ2ljIGlzIGEgbGl0dGxlIGJpdCB0cmlja3kgYmVjYXVzZSBvZiB0aGUgcG9zc2liaWxpdHkgb2YgbWF0Y2hpbmcKK2FuIGVtcHR5IHN0cmluZy4gQ29tbWVudHMgaW4gdGhlIGNvZGUgZXhwbGFpbiB3aGF0IGlzIGdvaW5nIG9uLgorLlAKK0lmIFBDUkUyIGlzIGluc3RhbGxlZCBpbiB0aGUgc3RhbmRhcmQgaW5jbHVkZSBhbmQgbGlicmFyeSBkaXJlY3RvcmllcyBmb3IgeW91cgorb3BlcmF0aW5nIHN5c3RlbSwgeW91IHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgdGhlIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB1c2luZwordGhpcyBjb21tYW5kOgorLnNwCisgIGdjYyAtbyBwY3JlMmRlbW8gcGNyZTJkZW1vLmMgLWxwY3JlMi04Cisuc3AKK0lmIFBDUkUyIGlzIGluc3RhbGxlZCBlbHNld2hlcmUsIHlvdSBtYXkgbmVlZCB0byBhZGQgYWRkaXRpb25hbCBvcHRpb25zIHRvIHRoZQorY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZSwgb24gYSBVbml4LWxpa2Ugc3lzdGVtIHRoYXQgaGFzIFBDUkUyIGluc3RhbGxlZCBpbgorXGZJL3Vzci9sb2NhbFxmUCwgeW91IGNhbiBjb21waWxlIHRoZSBkZW1vbnN0cmF0aW9uIHByb2dyYW0gdXNpbmcgYSBjb21tYW5kCitsaWtlIHRoaXM6Cisuc3AKKy5cIiBKT0lOU0gKKyAgZ2NjIC1vIHBjcmUyZGVtbyAtSS91c3IvbG9jYWwvaW5jbHVkZSBwY3JlMmRlbW8uYyBcZQorICAgICAgLUwvdXNyL2xvY2FsL2xpYiAtbHBjcmUyLTgKKy5zcAorLlAKK09uY2UgeW91IGhhdmUgY29tcGlsZWQgYW5kIGxpbmtlZCB0aGUgZGVtb25zdHJhdGlvbiBwcm9ncmFtLCB5b3UgY2FuIHJ1biBzaW1wbGUKK3Rlc3RzIGxpa2UgdGhpczoKKy5zcAorICAuL3BjcmUyZGVtbyAnY2F0fGRvZycgJ3RoZSBjYXQgc2F0IG9uIHRoZSBtYXQnCisgIC4vcGNyZTJkZW1vIC1nICdjYXR8ZG9nJyAndGhlIGRvZyBzYXQgb24gdGhlIGNhdCcKKy5zcAorTm90ZSB0aGF0IHRoZXJlIGlzIGEgbXVjaCBtb3JlIGNvbXByZWhlbnNpdmUgdGVzdCBwcm9ncmFtLCBjYWxsZWQKKy5cIiBIUkVGCitcZkJwY3JlMnRlc3RcZlAsCisuXCIKK3doaWNoIHN1cHBvcnRzIG1hbnkgbW9yZSBmYWNpbGl0aWVzIGZvciB0ZXN0aW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdXNpbmcgdGhlCitQQ1JFMiBsaWJyYXJpZXMuIFRoZQorLlwiIEhSRUYKK1xmQnBjcmUyZGVtb1xmUAorLlwiCitwcm9ncmFtIGlzIHByb3ZpZGVkIGFzIGEgc2ltcGxlIGNvZGluZyBleGFtcGxlLgorLlAKK0lmIHlvdSB0cnkgdG8gcnVuCisuXCIgSFJFRgorXGZCcGNyZTJkZW1vXGZQCisuXCIKK3doZW4gUENSRTIgaXMgbm90IGluc3RhbGxlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBkaXJlY3RvcnksIHlvdSBtYXkgZ2V0IGFuCitlcnJvciBsaWtlIHRoaXMgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoZS5nLiBTb2xhcmlzKToKKy5zcAorICBsZC5zby4xOiBhLm91dDogZmF0YWw6IGxpYnBjcmUyLnNvLjA6IG9wZW4gZmFpbGVkOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5Cisuc3AKK1RoaXMgaXMgY2F1c2VkIGJ5IHRoZSB3YXkgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydCB3b3JrcyBvbiB0aG9zZSBzeXN0ZW1zLiBZb3UKK25lZWQgdG8gYWRkCisuc3AKKyAgLVIvdXNyL2xvY2FsL2xpYgorLnNwCisoZm9yIGV4YW1wbGUpIHRvIHRoZSBjb21waWxlIGNvbW1hbmQgdG8gZ2V0IHJvdW5kIHRoaXMgcHJvYmxlbS4KKy4KKy4KKy5TSCBBVVRIT1IKKy5ycworLnNwCisubmYKK1BoaWxpcCBIYXplbAorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorQ2FtYnJpZGdlLCBFbmdsYW5kLgorLmZpCisuCisuCisuU0ggUkVWSVNJT04KKy5ycworLnNwCisubmYKK0xhc3QgdXBkYXRlZDogMjAgT2N0b2JlciAyMDE0CitDb3B5cmlnaHQgKGMpIDE5OTctMjAxNCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy5maQpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyc2VyaWFsaXplLjMgYi9kaXN0Mi9kb2MvcGNyZTJzZXJpYWxpemUuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWJjYjE4Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvZG9jL3BjcmUyc2VyaWFsaXplLjMKQEAgLTAsMCArMSwxNzUgQEAKKy5USCBQQ1JFMlNFUklBTElaRSAzICIwMyBOb3ZlbWJlciAyMDE1IiAiUENSRTIgMTAuMjEiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggIlNBVklORyBBTkQgUkUtVVNJTkcgUFJFQ09NUElMRUQgUENSRTIgUEFUVEVSTlMiCisucnMKKy5zcAorLm5mCisuQiBpbnQzMl90IHBjcmUyX3NlcmlhbGl6ZV9kZWNvZGUocGNyZTJfY29kZSAqKlxmSWNvZGVzXGZQLAorLkIgIiAgaW50MzJfdCBcZkludW1iZXJfb2ZfY29kZXNcZlAsIGNvbnN0IHVpbnQzMl90ICpcZklieXRlc1xmUCwiCisuQiAiICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKlxmSWdjb250ZXh0XGZQKTsiCisuc3AKKy5CIGludDMyX3QgcGNyZTJfc2VyaWFsaXplX2VuY29kZShwY3JlMl9jb2RlICoqXGZJY29kZXNcZlAsCisuQiAiICBpbnQzMl90IFxmSW51bWJlcl9vZl9jb2Rlc1xmUCwgdWludDMyX3QgKipcZklzZXJpYWxpemVkX2J5dGVzXGZQLCIKKy5CICIgIFBDUkUyX1NJWkUgKlxmSXNlcmlhbGl6ZWRfc2l6ZVxmUCwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpcZklnY29udGV4dFxmUCk7IgorLnNwCisuQiB2b2lkIHBjcmUyX3NlcmlhbGl6ZV9mcmVlKHVpbnQ4X3QgKlxmSWJ5dGVzXGZQKTsKKy5zcAorLkIgaW50MzJfdCBwY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlcyhjb25zdCB1aW50OF90ICpcZklieXRlc1xmUCk7CisuZmkKKy5zcAorSWYgeW91IGFyZSBydW5uaW5nIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyBhIGxhcmdlIG51bWJlciBvZiByZWd1bGFyCitleHByZXNzaW9uIHBhdHRlcm5zLCBpdCBtYXkgYmUgdXNlZnVsIHRvIHN0b3JlIHRoZW0gaW4gYSBwcmVjb21waWxlZCBmb3JtCitpbnN0ZWFkIG9mIGhhdmluZyB0byBjb21waWxlIHRoZW0gZXZlcnkgdGltZSB0aGUgYXBwbGljYXRpb24gaXMgcnVuLiBIb3dldmVyLAoraWYgeW91IGFyZSB1c2luZyB0aGUganVzdC1pbi10aW1lIG9wdGltaXphdGlvbiBmZWF0dXJlLCBpdCBpcyBub3QgcG9zc2libGUgdG8KK3NhdmUgYW5kIHJlbG9hZCB0aGUgSklUIGRhdGEsIGJlY2F1c2UgaXQgaXMgcG9zaXRpb24tZGVwZW5kZW50LiBUaGUgaG9zdCBvbgord2hpY2ggdGhlIHBhdHRlcm5zIGFyZSByZWxvYWRlZCBtdXN0IGJlIHJ1bm5pbmcgdGhlIHNhbWUgdmVyc2lvbiBvZiBQQ1JFMiwgd2l0aAordGhlIHNhbWUgY29kZSB1bml0IHdpZHRoLCBhbmQgbXVzdCBhbHNvIGhhdmUgdGhlIHNhbWUgZW5kaWFubmVzcywgcG9pbnRlciB3aWR0aAorYW5kIFBDUkUyX1NJWkUgdHlwZS4gRm9yIGV4YW1wbGUsIHBhdHRlcm5zIGNvbXBpbGVkIG9uIGEgMzItYml0IHN5c3RlbSB1c2luZworUENSRTIncyAxNi1iaXQgbGlicmFyeSBjYW5ub3QgYmUgcmVsb2FkZWQgb24gYSA2NC1iaXQgc3lzdGVtLCBub3IgY2FuIHRoZXkgYmUKK3JlbG9hZGVkIHVzaW5nIHRoZSA4LWJpdCBsaWJyYXJ5LgorLgorLgorLlNIICJTQVZJTkcgQ09NUElMRUQgUEFUVEVSTlMiCisucnMKKy5zcAorQmVmb3JlIGNvbXBpbGVkIHBhdHRlcm5zIGNhbiBiZSBzYXZlZCB0aGV5IG11c3QgYmUgc2VyaWFsaXplZCwgdGhhdCBpcywKK2NvbnZlcnRlZCB0byBhIHN0cmVhbSBvZiBieXRlcy4gQSBzaW5nbGUgYnl0ZSBzdHJlYW0gbWF5IGNvbnRhaW4gYW55IG51bWJlciBvZgorY29tcGlsZWQgcGF0dGVybnMsIGJ1dCB0aGV5IG11c3QgYWxsIHVzZSB0aGUgc2FtZSBjaGFyYWN0ZXIgdGFibGVzLiBBIHNpbmdsZQorY29weSBvZiB0aGUgdGFibGVzIGlzIGluY2x1ZGVkIGluIHRoZSBieXRlIHN0cmVhbSAoaXRzIHNpemUgaXMgMTA4OCBieXRlcykuIEZvcgorbW9yZSBkZXRhaWxzIG9mIGNoYXJhY3RlciB0YWJsZXMsIHNlZSB0aGUKKy5cIiBIVE1MIDxhIGhyZWY9InBjcmUyYXBpLmh0bWwjbG9jYWxlc3VwcG9ydCI+CisuXCIgPC9hPgorc2VjdGlvbiBvbiBsb2NhbGUgc3VwcG9ydAorLlwiCitpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLlAKK1RoZSBmdW5jdGlvbiBcZkJwY3JlMl9zZXJpYWxpemVfZW5jb2RlKClcZlAgY3JlYXRlcyBhIHNlcmlhbGl6ZWQgYnl0ZSBzdHJlYW0KK2Zyb20gYSBsaXN0IG9mIGNvbXBpbGVkIHBhdHRlcm5zLiBJdHMgZmlyc3QgdHdvIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBsaXN0LAorYmVpbmcgYSBwb2ludGVyIHRvIGEgdmVjdG9yIG9mIHBvaW50ZXJzIHRvIGNvbXBpbGVkIHBhdHRlcm5zLCBhbmQgdGhlIGxlbmd0aCBvZgordGhlIHZlY3Rvci4gVGhlIHRoaXJkIGFuZCBmb3VydGggYXJndW1lbnRzIHBvaW50IHRvIHZhcmlhYmxlcyB3aGljaCBhcmUgc2V0IHRvCitwb2ludCB0byB0aGUgY3JlYXRlZCBieXRlIHN0cmVhbSBhbmQgaXRzIGxlbmd0aCwgcmVzcGVjdGl2ZWx5LiBUaGUgZmluYWwKK2FyZ3VtZW50IGlzIGEgcG9pbnRlciB0byBhIGdlbmVyYWwgY29udGV4dCwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBjdXN0b20KK21lbW9yeSBtYW5nYWdlbWVudCBmdW5jdGlvbnMuIElmIHRoaXMgYXJndW1lbnQgaXMgTlVMTCwgXGZCbWFsbG9jKClcZlAgaXMgdXNlZAordG8gb2J0YWluIG1lbW9yeSBmb3IgdGhlIGJ5dGUgc3RyZWFtLiBUaGUgeWllbGQgb2YgdGhlIGZ1bmN0aW9uIGlzIHRoZSBudW1iZXIKK29mIHNlcmlhbGl6ZWQgcGF0dGVybnMsIG9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzOgorLnNwCisgIFBDUkUyX0VSUk9SX0JBRERBVEEgICAgICB0aGUgbnVtYmVyIG9mIHBhdHRlcm5zIGlzIHplcm8gb3IgbGVzcworICBQQ1JFMl9FUlJPUl9CQURNQUdJQyAgICAgbWlzbWF0Y2ggb2YgaWQgYnl0ZXMgaW4gb25lIG9mIHRoZSBwYXR0ZXJucworICBQQ1JFMl9FUlJPUl9NRU1PUlkgICAgICAgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkCisgIFBDUkUyX0VSUk9SX01JWEVEVEFCTEVTICB0aGUgcGF0dGVybnMgZG8gbm90IGFsbCB1c2UgdGhlIHNhbWUgdGFibGVzCisgIFBDUkUyX0VSUk9SX05VTEwgICAgICAgICB0aGUgMXN0LCAzcmQsIG9yIDR0aCBhcmd1bWVudCBpcyBOVUxMCisuc3AKK1BDUkUyX0VSUk9SX0JBRE1BR0lDIG1lYW5zIGVpdGhlciB0aGF0IGEgcGF0dGVybidzIGNvZGUgaGFzIGJlZW4gY29ycnVwdGVkLCBvcgordGhhdCBhIHNsb3QgaW4gdGhlIHZlY3RvciBkb2VzIG5vdCBwb2ludCB0byBhIGNvbXBpbGVkIHBhdHRlcm4uCisuUAorT25jZSBhIHNldCBvZiBwYXR0ZXJucyBoYXMgYmVlbiBzZXJpYWxpemVkIHlvdSBjYW4gc2F2ZSB0aGUgZGF0YSBpbiBhbnkKK2FwcHJvcHJpYXRlIG1hbm5lci4gSGVyZSBpcyBzYW1wbGUgY29kZSB0aGF0IGNvbXBpbGVzIHR3byBwYXR0ZXJucyBhbmQgd3JpdGVzCit0aGVtIHRvIGEgZmlsZS4gSXQgYXNzdW1lcyB0aGF0IHRoZSB2YXJpYWJsZSBcZklmZFxmUCByZWZlcnMgdG8gYSBmaWxlIHRoYXQgaXMKK29wZW4gZm9yIG91dHB1dC4gVGhlIGVycm9yIGNoZWNraW5nIHRoYXQgc2hvdWxkIGJlIHByZXNlbnQgaW4gYSByZWFsCithcHBsaWNhdGlvbiBoYXMgYmVlbiBvbWl0dGVkIGZvciBzaW1wbGljaXR5LgorLnNwCisgIGludCBlcnJvcmNvZGU7CisgIHVpbnQ4X3QgKmJ5dGVzOworICBQQ1JFMl9TSVpFIGVycm9yb2Zmc2V0OworICBQQ1JFMl9TSVpFIGJ5dGVzY291bnQ7CisgIHBjcmUyX2NvZGUgKmxpc3Rfb2ZfY29kZXNbMl07CisgIGxpc3Rfb2ZfY29kZXNbMF0gPSBwY3JlMl9jb21waWxlKCJmaXJzdCBwYXR0ZXJuIiwKKyAgICBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsIDAsICZlcnJvcmNvZGUsICZlcnJvcm9mZnNldCwgTlVMTCk7CisgIGxpc3Rfb2ZfY29kZXNbMV0gPSBwY3JlMl9jb21waWxlKCJzZWNvbmQgcGF0dGVybiIsCisgICAgUENSRTJfWkVST19URVJNSU5BVEVELCAwLCAmZXJyb3Jjb2RlLCAmZXJyb3JvZmZzZXQsIE5VTEwpOworICBlcnJvcmNvZGUgPSBwY3JlMl9zZXJpYWxpemVfZW5jb2RlKGxpc3Rfb2ZfY29kZXMsIDIsICZieXRlcywKKyAgICAmYnl0ZXNjb3VudCwgTlVMTCk7CisgIGVycm9yY29kZSA9IGZ3cml0ZShieXRlcywgMSwgYnl0ZXNjb3VudCwgZmQpOworLnNwCitOb3RlIHRoYXQgdGhlIHNlcmlhbGl6ZWQgZGF0YSBpcyBiaW5hcnkgZGF0YSB0aGF0IG1heSBjb250YWluIGFueSBvZiB0aGUgMjU2Citwb3NzaWJsZSBieXRlIHZhbHVlcy4gT24gc3lzdGVtcyB0aGF0IG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGJpbmFyeSBhbmQKK25vbi1iaW5hcnkgZGF0YSwgYmUgc3VyZSB0aGF0IHRoZSBmaWxlIGlzIG9wZW5lZCBmb3IgYmluYXJ5IG91dHB1dC4KKy5QCitTZXJpYWxpemluZyBhIHNldCBvZiBwYXR0ZXJucyBsZWF2ZXMgdGhlIG9yaWdpbmFsIGRhdGEgdW50b3VjaGVkLCBzbyB0aGV5IGNhbgorc3RpbGwgYmUgdXNlZCBmb3IgbWF0Y2hpbmcuIFRoZWlyIG1lbW9yeSBtdXN0IGV2ZW50dWFsbHkgYmUgZnJlZWQgaW4gdGhlIHVzdWFsCit3YXkgYnkgY2FsbGluZyBcZkJwY3JlMl9jb2RlX2ZyZWUoKVxmUC4gV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCB3aXRoIHRoZSBieXRlCitzdHJlYW0sIGl0IHRvbyBtdXN0IGJlIGZyZWVkIGJ5IGNhbGxpbmcgXGZCcGNyZTJfc2VyaWFsaXplX2ZyZWUoKVxmUC4KKy4KKy4KKy5TSCAiUkUtVVNJTkcgUFJFQ09NUElMRUQgUEFUVEVSTlMiCisucnMKKy5zcAorSW4gb3JkZXIgdG8gcmUtdXNlIGEgc2V0IG9mIHNhdmVkIHBhdHRlcm5zIHlvdSBtdXN0IGZpcnN0IG1ha2UgdGhlIHNlcmlhbGl6ZWQKK2J5dGUgc3RyZWFtIGF2YWlsYWJsZSBpbiBtYWluIG1lbW9yeSAoZm9yIGV4YW1wbGUsIGJ5IHJlYWRpbmcgZnJvbSBhIGZpbGUpLiBUaGUKK21hbmFnZW1lbnQgb2YgdGhpcyBtZW1vcnkgYmxvY2sgaXMgdXAgdG8gdGhlIGFwcGxpY2F0aW9uLiBZb3UgY2FuIHVzZSB0aGUKK1xmQnBjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzKClcZlAgZnVuY3Rpb24gdG8gZmluZCBvdXQgaG93IG1hbnkKK2NvbXBpbGVkIHBhdHRlcm5zIGFyZSBpbiB0aGUgc2VyaWFsaXplZCBkYXRhIHdpdGhvdXQgYWN0dWFsbHkgZGVjb2RpbmcgdGhlCitwYXR0ZXJuczoKKy5zcAorICB1aW50OF90ICpieXRlcyA9IDxzZXJpYWxpemVkIGRhdGE+OworICBpbnQzMl90IG51bWJlcl9vZl9jb2RlcyA9IHBjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzKGJ5dGVzKTsKKy5zcAorVGhlIFxmQnBjcmUyX3NlcmlhbGl6ZV9kZWNvZGUoKVxmUCBmdW5jdGlvbiByZWFkcyBhIGJ5dGUgc3RyZWFtIGFuZCByZWNyZWF0ZXMKK3RoZSBjb21waWxlZCBwYXR0ZXJucyBpbiBuZXcgbWVtb3J5IGJsb2Nrcywgc2V0dGluZyBwb2ludGVycyB0byB0aGVtIGluIGEKK3ZlY3Rvci4gVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIGEgcG9pbnRlciB0byBhIHN1aXRhYmxlIHZlY3RvciBhbmQgaXRzCitsZW5ndGgsIGFuZCB0aGUgdGhpcmQgYXJndW1lbnQgcG9pbnRzIHRvIGEgYnl0ZSBzdHJlYW0uIFRoZSBmaW5hbCBhcmd1bWVudCBpcyBhCitwb2ludGVyIHRvIGEgZ2VuZXJhbCBjb250ZXh0LCB3aGljaCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGN1c3RvbSBtZW1vcnkKK21hbmdhZ2VtZW50IGZ1bmN0aW9ucyBmb3IgdGhlIGRlY29kZWQgcGF0dGVybnMuIElmIHRoaXMgYXJndW1lbnQgaXMgTlVMTCwKK1xmQm1hbGxvYygpXGZQIGFuZCBcZkJmcmVlKClcZlAgYXJlIHVzZWQuIEFmdGVyIGRlc2VyaWFsaXphdGlvbiwgdGhlIGJ5dGUKK3N0cmVhbSBpcyBubyBsb25nZXIgbmVlZGVkIGFuZCBjYW4gYmUgZGlzY2FyZGVkLgorLnNwCisgIGludDMyX3QgbnVtYmVyX29mX2NvZGVzOworICBwY3JlMl9jb2RlICpsaXN0X29mX2NvZGVzWzJdOworICB1aW50OF90ICpieXRlcyA9IDxzZXJpYWxpemVkIGRhdGE+OworICBpbnQzMl90IG51bWJlcl9vZl9jb2RlcyA9CisgICAgcGNyZTJfc2VyaWFsaXplX2RlY29kZShsaXN0X29mX2NvZGVzLCAyLCBieXRlcywgTlVMTCk7Cisuc3AKK0lmIHRoZSB2ZWN0b3IgaXMgbm90IGxhcmdlIGVub3VnaCBmb3IgYWxsIHRoZSBwYXR0ZXJucyBpbiB0aGUgYnl0ZSBzdHJlYW0sIGl0CitpcyBmaWxsZWQgd2l0aCB0aG9zZSB0aGF0IGZpdCwgYW5kIHRoZSByZW1haW5kZXIgYXJlIGlnbm9yZWQuIFRoZSB5aWVsZCBvZiB0aGUKK2Z1bmN0aW9uIGlzIHRoZSBudW1iZXIgb2YgZGVjb2RlZCBwYXR0ZXJucywgb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgbmVnYXRpdmUKK2Vycm9yIGNvZGVzOgorLnNwCisgIFBDUkUyX0VSUk9SX0JBRERBVEEgICBzZWNvbmQgYXJndW1lbnQgaXMgemVybyBvciBsZXNzCisgIFBDUkUyX0VSUk9SX0JBRE1BR0lDICBtaXNtYXRjaCBvZiBpZCBieXRlcyBpbiB0aGUgZGF0YQorICBQQ1JFMl9FUlJPUl9CQURNT0RFICAgbWlzbWF0Y2ggb2YgdmFyaWFibGUgdW5pdCBzaXplIG9yIFBDUkUyIHZlcnNpb24KKyAgUENSRTJfRVJST1JfTUVNT1JZICAgIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZAorICBQQ1JFMl9FUlJPUl9OVUxMICAgICAgZmlyc3Qgb3IgdGhpcmQgYXJndW1lbnQgaXMgTlVMTAorLnNwCitQQ1JFMl9FUlJPUl9CQURNQUdJQyBtYXkgbWVhbiB0aGF0IHRoZSBkYXRhIGlzIGNvcnJ1cHQsIG9yIHRoYXQgaXQgd2FzIGNvbXBpbGVkCitvbiBhIHN5c3RlbSB3aXRoIGRpZmZlcmVudCBlbmRpYW5uZXNzLgorLlAKK0RlY29kZWQgcGF0dGVybnMgY2FuIGJlIHVzZWQgZm9yIG1hdGNoaW5nIGluIHRoZSB1c3VhbCB3YXksIGFuZCBtdXN0IGJlIGZyZWVkCitieSBjYWxsaW5nIFxmQnBjcmUyX2NvZGVfZnJlZSgpXGZQLiBIb3dldmVyLCBiZSBhd2FyZSB0aGF0IHRoZXJlIGlzIGEgcG90ZW50aWFsCityYWNlIGlzc3VlIGlmIHlvdSBhcmUgdXNpbmcgbXVsdGlwbGUgcGF0dGVybnMgdGhhdCB3ZXJlIGRlY29kZWQgZnJvbSBhIHNpbmdsZQorYnl0ZSBzdHJlYW0gaW4gYSBtdWx0aXRocmVhZGVkIGFwcGxpY2F0aW9uLiBBIHNpbmdsZSBjb3B5IG9mIHRoZSBjaGFyYWN0ZXIKK3RhYmxlcyBpcyB1c2VkIGJ5IGFsbCB0aGUgZGVjb2RlZCBwYXR0ZXJucyBhbmQgYSByZWZlcmVuY2UgY291bnQgaXMgdXNlZCB0bworYXJyYW5nZSBmb3IgaXRzIG1lbW9yeSB0byBiZSBhdXRvbWF0aWNhbGx5IGZyZWVkIHdoZW4gdGhlIGxhc3QgcGF0dGVybiBpcworZnJlZWQsIGJ1dCB0aGVyZSBpcyBubyBsb2NraW5nIG9uIHRoaXMgcmVmZXJlbmNlIGNvdW50LiBUaGVyZWZvcmUsIGlmIHlvdSB3YW50Cit0byBjYWxsIFxmQnBjcmUyX2NvZGVfZnJlZSgpXGZQIGZvciB0aGVzZSBwYXR0ZXJucyBpbiBkaWZmZXJlbnQgdGhyZWFkcywgeW91CittdXN0IGFycmFuZ2UgeW91ciBvd24gbG9ja2luZywgYW5kIGVuc3VyZSB0aGF0IFxmQnBjcmUyX2NvZGVfZnJlZSgpXGZQIGNhbm5vdAorYmUgY2FsbGVkIGJ5IHR3byB0aHJlYWRzIGF0IHRoZSBzYW1lIHRpbWUuCisuUAorSWYgYSBwYXR0ZXJuIHdhcyBwcm9jZXNzZWQgYnkgXGZCcGNyZTJfaml0X2NvbXBpbGUoKVxmUCBiZWZvcmUgYmVpbmcKK3NlcmlhbGl6ZWQsIHRoZSBKSVQgZGF0YSBpcyBkaXNjYXJkZWQgYW5kIHNvIGlzIG5vIGxvbmdlciBhdmFpbGFibGUgYWZ0ZXIgYQorc2F2ZS9yZXN0b3JlIGN5Y2xlLiBZb3UgY2FuLCBob3dldmVyLCBwcm9jZXNzIGEgcmVzdG9yZWQgcGF0dGVybiB3aXRoCitcZkJwY3JlMl9qaXRfY29tcGlsZSgpXGZQIGlmIHlvdSB3aXNoLgorLgorLgorLgorLlNIIEFVVEhPUgorLnJzCisuc3AKKy5uZgorUGhpbGlwIEhhemVsCitVbml2ZXJzaXR5IENvbXB1dGluZyBTZXJ2aWNlCitDYW1icmlkZ2UsIEVuZ2xhbmQuCisuZmkKKy4KKy4KKy5TSCBSRVZJU0lPTgorLnJzCisuc3AKKy5uZgorTGFzdCB1cGRhdGVkOiAwMyBOb3ZlbWJlciAyMDE1CitDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy5maQpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUyc3RhY2suMyBiL2Rpc3QyL2RvYy9wY3JlMnN0YWNrLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcxMTI2MwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMnN0YWNrLjMKQEAgLTAsMCArMSwyMDIgQEAKKy5USCBQQ1JFMlNUQUNLIDMgIjIxIE5vdmVtYmVyIDIwMTQiICJQQ1JFMiAxMC4wMCIKKy5TSCBOQU1FCitQQ1JFMiAtIFBlcmwtY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIChyZXZpc2VkIEFQSSkKKy5TSCAiUENSRTIgRElTQ1VTU0lPTiBPRiBTVEFDSyBVU0FHRSIKKy5ycworLnNwCitXaGVuIHlvdSBjYWxsIFxmQnBjcmUyX21hdGNoKClcZlAsIGl0IG1ha2VzIHVzZSBvZiBhbiBpbnRlcm5hbCBmdW5jdGlvbiBjYWxsZWQKK1xmQm1hdGNoKClcZlAuIFRoaXMgY2FsbHMgaXRzZWxmIHJlY3Vyc2l2ZWx5IGF0IGJyYW5jaCBwb2ludHMgaW4gdGhlIHBhdHRlcm4sCitpbiBvcmRlciB0byByZW1lbWJlciB0aGUgc3RhdGUgb2YgdGhlIG1hdGNoIHNvIHRoYXQgaXQgY2FuIGJhY2sgdXAgYW5kIHRyeSBhCitkaWZmZXJlbnQgYWx0ZXJuYXRpdmUgYWZ0ZXIgYSBmYWlsdXJlLiBBcyBtYXRjaGluZyBwcm9jZWVkcyBkZWVwZXIgYW5kIGRlZXBlcgoraW50byB0aGUgdHJlZSBvZiBwb3NzaWJpbGl0aWVzLCB0aGUgcmVjdXJzaW9uIGRlcHRoIGluY3JlYXNlcy4gVGhlCitcZkJtYXRjaCgpXGZQIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGluIG90aGVyIGNpcmN1bXN0YW5jZXMsIGZvciBleGFtcGxlLAord2hlbmV2ZXIgYSBwYXJlbnRoZXNpemVkIHN1Yi1wYXR0ZXJuIGlzIGVudGVyZWQsIGFuZCBpbiBjZXJ0YWluIGNhc2VzIG9mCityZXBldGl0aW9uLgorLlAKK05vdCBhbGwgY2FsbHMgb2YgXGZCbWF0Y2goKVxmUCBpbmNyZWFzZSB0aGUgcmVjdXJzaW9uIGRlcHRoOyBmb3IgYW4gaXRlbSBzdWNoCithcyBhKiBpdCBtYXkgYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgYXQgdGhlIHNhbWUgbGV2ZWwsIGFmdGVyIG1hdGNoaW5nCitkaWZmZXJlbnQgbnVtYmVycyBvZiBhJ3MuIEZ1cnRoZXJtb3JlLCBpbiBhIG51bWJlciBvZiBjYXNlcyB3aGVyZSB0aGUgcmVzdWx0IG9mCit0aGUgcmVjdXJzaXZlIGNhbGwgd291bGQgaW1tZWRpYXRlbHkgYmUgcGFzc2VkIGJhY2sgYXMgdGhlIHJlc3VsdCBvZiB0aGUKK2N1cnJlbnQgY2FsbCAoYSAidGFpbCByZWN1cnNpb24iKSwgdGhlIGZ1bmN0aW9uIGlzIGp1c3QgcmVzdGFydGVkIGluc3RlYWQuCisuUAorRWFjaCB0aW1lIHRoZSBpbnRlcm5hbCBcZkJtYXRjaCgpXGZQIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWN1cnNpdmVseSwgaXQgdXNlcworbWVtb3J5IGZyb20gdGhlIHByb2Nlc3Mgc3RhY2suIEZvciBjZXJ0YWluIGtpbmRzIG9mIHBhdHRlcm4gYW5kIGRhdGEsIHZlcnkKK2xhcmdlIGFtb3VudHMgb2Ygc3RhY2sgbWF5IGJlIG5lZWRlZCwgZGVzcGl0ZSB0aGUgcmVjb2duaXRpb24gb2YgInRhaWwKK3JlY3Vyc2lvbiIuIE5vdGUgdGhhdCBpZiBQQ1JFMiBpcyBjb21waWxlZCB3aXRoIHRoZSAtZnNhbml0aXplPWFkZHJlc3Mgb3B0aW9uCitvZiB0aGUgR0NDIGNvbXBpbGVyLCB0aGUgc3RhY2sgcmVxdWlyZW1lbnRzIGFyZSBncmVhdGx5IGluY3JlYXNlZC4KKy5QCitUaGUgYWJvdmUgY29tbWVudHMgYXBwbHkgd2hlbiBcZkJwY3JlMl9tYXRjaCgpXGZQIGlzIHJ1biBpbiBpdHMgbm9ybWFsCitpbnRlcnByZXRpdmUgbWFubmVyLiBJZiB0aGUgY29tcGlsZWQgcGF0dGVybiB3YXMgcHJvY2Vzc2VkIGJ5CitcZkJwY3JlMl9qaXRfY29tcGlsZSgpXGZQLCBhbmQganVzdC1pbi10aW1lIGNvbXBpbGluZyB3YXMgc3VjY2Vzc2Z1bCwgYW5kIHRoZQorb3B0aW9ucyBwYXNzZWQgdG8gXGZCcGNyZTJfbWF0Y2goKVxmUCB3ZXJlIG5vdCBpbmNvbXBhdGlibGUsIHRoZSBtYXRjaGluZworcHJvY2VzcyB1c2VzIHRoZSBKSVQtY29tcGlsZWQgY29kZSBpbnN0ZWFkIG9mIHRoZSBcZkJtYXRjaCgpXGZQIGZ1bmN0aW9uLiBJbgordGhpcyBjYXNlLCB0aGUgbWVtb3J5IHJlcXVpcmVtZW50cyBhcmUgaGFuZGxlZCBlbnRpcmVseSBkaWZmZXJlbnRseS4gU2VlIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyaml0XGZQCisuXCIKK2RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisuUAorVGhlIFxmQnBjcmUyX2RmYV9tYXRjaCgpXGZQIGZ1bmN0aW9uIG9wZXJhdGVzIGluIGEgZGlmZmVyZW50IHdheSB0bworXGZCcGNyZTJfbWF0Y2goKVxmUCwgYW5kIHVzZXMgcmVjdXJzaW9uIG9ubHkgd2hlbiB0aGVyZSBpcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbgorcmVjdXJzaW9uIG9yIHN1YnJvdXRpbmUgY2FsbCBpbiB0aGUgcGF0dGVybi4gVGhpcyBpbmNsdWRlcyB0aGUgcHJvY2Vzc2luZyBvZgorYXNzZXJ0aW9uIGFuZCAib25jZS1vbmx5IiBzdWJwYXR0ZXJucywgd2hpY2ggYXJlIGhhbmRsZWQgbGlrZSBzdWJyb3V0aW5lIGNhbGxzLgorTm9ybWFsbHksIHRoZXNlIGFyZSBuZXZlciB2ZXJ5IGRlZXAsIGFuZCB0aGUgbGltaXQgb24gdGhlIGNvbXBsZXhpdHkgb2YKK1xmQnBjcmUyX2RmYV9tYXRjaCgpXGZQIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGFtb3VudCBvZiB3b3Jrc3BhY2UgaXQgaXMgZ2l2ZW4uCitIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0byB3cml0ZSBwYXR0ZXJucyB3aXRoIHJ1bmF3YXkgaW5maW5pdGUgcmVjdXJzaW9uczsKK3N1Y2ggcGF0dGVybnMgd2lsbCBjYXVzZSBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCB0byBydW4gb3V0IG9mIHN0YWNrLiBBdAorcHJlc2VudCwgdGhlcmUgaXMgbm8gcHJvdGVjdGlvbiBhZ2FpbnN0IHRoaXMuCisuUAorVGhlIGNvbW1lbnRzIHRoYXQgZm9sbG93IGRvIE5PVCBhcHBseSB0byBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUDsgdGhleSBhcmUKK3JlbGV2YW50IG9ubHkgZm9yIFxmQnBjcmUyX21hdGNoKClcZlAgd2l0aG91dCB0aGUgSklUIG9wdGltaXphdGlvbi4KKy4KKy4KKy5TUyAiUmVkdWNpbmcgXGZCcGNyZTJfbWF0Y2goKVxmUCdzIHN0YWNrIHVzYWdlIgorLnJzCisuc3AKK1lvdSBjYW4gb2Z0ZW4gcmVkdWNlIHRoZSBhbW91bnQgb2YgcmVjdXJzaW9uLCBhbmQgdGhlcmVmb3JlIHRoZQorYW1vdW50IG9mIHN0YWNrIHVzZWQsIGJ5IG1vZGlmeWluZyB0aGUgcGF0dGVybiB0aGF0IGlzIGJlaW5nIG1hdGNoZWQuIENvbnNpZGVyLAorZm9yIGV4YW1wbGUsIHRoaXMgcGF0dGVybjoKKy5zcAorICAoW148XXw8KD8haW5ldCkpKworLnNwCitJdCBtYXRjaGVzIGZyb20gd2hlcmV2ZXIgaXQgc3RhcnRzIHVudGlsIGl0IGVuY291bnRlcnMgIjxpbmV0IiBvciB0aGUgZW5kIG9mCit0aGUgZGF0YSwgYW5kIGlzIHRoZSBraW5kIG9mIHBhdHRlcm4gdGhhdCBtaWdodCBiZSB1c2VkIHdoZW4gcHJvY2Vzc2luZyBhbiBYTUwKK2ZpbGUuIEVhY2ggaXRlcmF0aW9uIG9mIHRoZSBvdXRlciBwYXJlbnRoZXNlcyBtYXRjaGVzIGVpdGhlciBvbmUgY2hhcmFjdGVyIHRoYXQKK2lzIG5vdCAiPCIgb3IgYSAiPCIgdGhhdCBpcyBub3QgZm9sbG93ZWQgYnkgImluZXQiLiBIb3dldmVyLCBlYWNoIHRpbWUgYQorcGFyZW50aGVzaXMgaXMgcHJvY2Vzc2VkLCBhIHJlY3Vyc2lvbiBvY2N1cnMsIHNvIHRoaXMgZm9ybXVsYXRpb24gdXNlcyBhIHN0YWNrCitmcmFtZSBmb3IgZWFjaCBtYXRjaGVkIGNoYXJhY3Rlci4gRm9yIGEgbG9uZyBzdHJpbmcsIGEgbG90IG9mIHN0YWNrIGlzCityZXF1aXJlZC4gQ29uc2lkZXIgbm93IHRoaXMgcmV3cml0dGVuIHBhdHRlcm4sIHdoaWNoIG1hdGNoZXMgZXhhY3RseSB0aGUgc2FtZQorc3RyaW5nczoKKy5zcAorICAoW148XSsrfDwoPyFpbmV0KSkrCisuc3AKK1RoaXMgdXNlcyB2ZXJ5IG11Y2ggbGVzcyBzdGFjaywgYmVjYXVzZSBydW5zIG9mIGNoYXJhY3RlcnMgdGhhdCBkbyBub3QgY29udGFpbgorIjwiIGFyZSAic3dhbGxvd2VkIiBpbiBvbmUgaXRlbSBpbnNpZGUgdGhlIHBhcmVudGhlc2VzLiBSZWN1cnNpb24gaGFwcGVucyBvbmx5Cit3aGVuIGEgIjwiIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBmb2xsb3dlZCBieSAiaW5ldCIgaXMgZW5jb3VudGVyZWQgKGFuZCB3ZQorYXNzdW1lIHRoaXMgaXMgcmVsYXRpdmVseSByYXJlKS4gQSBwb3NzZXNzaXZlIHF1YW50aWZpZXIgaXMgdXNlZCB0byBzdG9wIGFueQorYmFja3RyYWNraW5nIGludG8gdGhlIHJ1bnMgb2Ygbm9uLSI8IiBjaGFyYWN0ZXJzLCBidXQgdGhhdCBpcyBub3QgcmVsYXRlZCB0bworc3RhY2sgdXNhZ2UuCisuUAorVGhpcyBleGFtcGxlIHNob3dzIHRoYXQgb25lIHdheSBvZiBhdm9pZGluZyBzdGFjayBwcm9ibGVtcyB3aGVuIG1hdGNoaW5nIGxvbmcKK3N1YmplY3Qgc3RyaW5ncyBpcyB0byB3cml0ZSByZXBlYXRlZCBwYXJlbnRoZXNpemVkIHN1YnBhdHRlcm5zIHRvIG1hdGNoIG1vcmUKK3RoYW4gb25lIGNoYXJhY3RlciB3aGVuZXZlciBwb3NzaWJsZS4KKy4KKy4KKy5TUyAiQ29tcGlsaW5nIFBDUkUyIHRvIHVzZSBoZWFwIGluc3RlYWQgb2Ygc3RhY2sgZm9yIFxmQnBjcmUyX21hdGNoKClcZlAiCisucnMKKy5zcAorSW4gZW52aXJvbm1lbnRzIHdoZXJlIHN0YWNrIG1lbW9yeSBpcyBjb25zdHJhaW5lZCwgeW91IG1pZ2h0IHdhbnQgdG8gY29tcGlsZQorUENSRTIgdG8gdXNlIGhlYXAgbWVtb3J5IGluc3RlYWQgb2Ygc3RhY2sgZm9yIHJlbWVtYmVyaW5nIGJhY2stdXAgcG9pbnRzIHdoZW4KK1xmQnBjcmUyX21hdGNoKClcZlAgaXMgcnVubmluZy4gVGhpcyBtYWtlcyBpdCBydW4gbW9yZSBzbG93bHksIGhvd2V2ZXIuIERldGFpbHMKK29mIGhvdyB0byBkbyB0aGlzIGFyZSBnaXZlbiBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmJ1aWxkXGZQCisuXCIKK2RvY3VtZW50YXRpb24uIFdoZW4gYnVpbHQgaW4gdGhpcyB3YXksIGluc3RlYWQgb2YgdXNpbmcgdGhlIHN0YWNrLCBQQ1JFMgorZ2V0cyBtZW1vcnkgZm9yIHJlbWVtYmVyaW5nIGJhY2t1cCBwb2ludHMgZnJvbSB0aGUgaGVhcC4gQnkgZGVmYXVsdCwgdGhlIG1lbW9yeQoraXMgb2J0YWluZWQgYnkgY2FsbGluZyB0aGUgc3lzdGVtIFxmQm1hbGxvYygpXGZQIGZ1bmN0aW9uLCBidXQgeW91IGNhbiBhcnJhbmdlCit0byBzdXBwbHkgeW91ciBvd24gbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb24uIEZvciBkZXRhaWxzLCBzZWUgdGhlIHNlY3Rpb24KK2VudGl0bGVkCisuXCIgSFRNTCA8YSBocmVmPSJwY3JlMmFwaS5odG1sI21hdGNoY29udGV4dCI+CisuXCIgPC9hPgorIlRoZSBtYXRjaCBjb250ZXh0IgorLlwiCitpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitkb2N1bWVudGF0aW9uLiBTaW5jZSB0aGUgYmxvY2sgc2l6ZXMgYXJlIGFsd2F5cyB0aGUgc2FtZSwgaXQgbWF5IGJlIHBvc3NpYmxlIHRvCitpbXBsZW1lbnQgY3VzdG9taXplZCBhIG1lbW9yeSBoYW5kbGVyIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgc3RhbmRhcmQKK2Z1bmN0aW9uLiBUaGUgbWVtb3J5IGJsb2NrcyBvYnRhaW5lZCBmb3IgdGhpcyBwdXJwb3NlIGFyZSByZXRhaW5lZCBhbmQgcmUtdXNlZAoraWYgcG9zc2libGUgd2hpbGUgXGZCcGNyZTJfbWF0Y2goKVxmUCBpcyBydW5uaW5nLiBUaGV5IGFyZSBhbGwgZnJlZWQganVzdAorYmVmb3JlIGl0IGV4aXRzLgorLgorLgorLlNTICJMaW1pdGluZyBcZkJwY3JlMl9tYXRjaCgpXGZQJ3Mgc3RhY2sgdXNhZ2UiCisucnMKKy5zcAorWW91IGNhbiBzZXQgbGltaXRzIG9uIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGludGVybmFsIFxmQm1hdGNoKClcZlAgZnVuY3Rpb24KK2lzIGNhbGxlZCwgYm90aCBpbiB0b3RhbCBhbmQgcmVjdXJzaXZlbHkuIElmIGEgbGltaXQgaXMgZXhjZWVkZWQsCitcZkJwY3JlMl9tYXRjaCgpXGZQIHJldHVybnMgYW4gZXJyb3IgY29kZS4gU2V0dGluZyBzdWl0YWJsZSBsaW1pdHMgc2hvdWxkCitwcmV2ZW50IGl0IGZyb20gcnVubmluZyBvdXQgb2Ygc3RhY2suIFRoZSBkZWZhdWx0IHZhbHVlcyBvZiB0aGUgbGltaXRzIGFyZSB2ZXJ5CitsYXJnZSwgYW5kIHVubGlrZWx5IGV2ZXIgdG8gb3BlcmF0ZS4gVGhleSBjYW4gYmUgY2hhbmdlZCB3aGVuIFBDUkUyIGlzIGJ1aWx0LAorYW5kIHRoZXkgY2FuIGFsc28gYmUgc2V0IHdoZW4gXGZCcGNyZTJfbWF0Y2goKVxmUCBpcyBjYWxsZWQuIEZvciBkZXRhaWxzIG9mCit0aGVzZSBpbnRlcmZhY2VzLCBzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJidWlsZFxmUAorLlwiCitkb2N1bWVudGF0aW9uIGFuZCB0aGUgc2VjdGlvbiBlbnRpdGxlZAorLlwiIEhUTUwgPGEgaHJlZj0icGNyZTJhcGkuaHRtbCNtYXRjaGNvbnRleHQiPgorLlwiIDwvYT4KKyJUaGUgbWF0Y2ggY29udGV4dCIKKy5cIgoraW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorZG9jdW1lbnRhdGlvbi4KKy5QCitBcyBhIHZlcnkgcm91Z2ggcnVsZSBvZiB0aHVtYiwgeW91IHNob3VsZCByZWNrb24gb24gYWJvdXQgNTAwIGJ5dGVzIHBlcgorcmVjdXJzaW9uLiBUaHVzLCBpZiB5b3Ugd2FudCB0byBsaW1pdCB5b3VyIHN0YWNrIHVzYWdlIHRvIDhNYiwgeW91IHNob3VsZCBzZXQKK3RoZSBsaW1pdCBhdCAxNjAwMCByZWN1cnNpb25zLiBBIDY0TWIgc3RhY2ssIG9uIHRoZSBvdGhlciBoYW5kLCBjYW4gc3VwcG9ydAorYXJvdW5kIDEyODAwMCByZWN1cnNpb25zLgorLlAKK1RoZSBcZkJwY3JlMnRlc3RcZlAgdGVzdCBwcm9ncmFtIGhhcyBhIG1vZGlmaWVyIGNhbGxlZCAiZmluZF9saW1pdHMiIHdoaWNoLCBpZgorYXBwbGllZCB0byBhIHN1YmplY3QgbGluZSwgY2F1c2VzIGl0IHRvIGZpbmQgdGhlIHNtYWxsZXN0IGxpbWl0cyB0aGF0IGFsbG93IGEgYQorcGF0dGVybiB0byBtYXRjaC4gVGhpcyBpcyBkb25lIGJ5IGNhbGxpbmcgXGZCcGNyZTJfbWF0Y2goKVxmUCByZXBlYXRlZGx5IHdpdGgKK2RpZmZlcmVudCBsaW1pdHMuCisuCisuCisuU1MgIkNoYW5naW5nIHN0YWNrIHNpemUgaW4gVW5peC1saWtlIHN5c3RlbXMiCisucnMKKy5zcAorSW4gVW5peC1saWtlIGVudmlyb25tZW50cywgdGhlcmUgaXMgbm90IG9mdGVuIGEgcHJvYmxlbSB3aXRoIHRoZSBzdGFjayB1bmxlc3MKK3ZlcnkgbG9uZyBzdHJpbmdzIGFyZSBpbnZvbHZlZCwgdGhvdWdoIHRoZSBkZWZhdWx0IGxpbWl0IG9uIHN0YWNrIHNpemUgdmFyaWVzCitmcm9tIHN5c3RlbSB0byBzeXN0ZW0uIFZhbHVlcyBmcm9tIDhNYiB0byA2NE1iIGFyZSBjb21tb24uIFlvdSBjYW4gZmluZCB5b3VyCitkZWZhdWx0IGxpbWl0IGJ5IHJ1bm5pbmcgdGhlIGNvbW1hbmQ6Cisuc3AKKyAgdWxpbWl0IC1zCisuc3AKK1VuZm9ydHVuYXRlbHksIHRoZSBlZmZlY3Qgb2YgcnVubmluZyBvdXQgb2Ygc3RhY2sgaXMgb2Z0ZW4gU0lHU0VHViwgdGhvdWdoCitzb21ldGltZXMgYSBtb3JlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2UgaXMgZ2l2ZW4uIFlvdSBjYW4gbm9ybWFsbHkgaW5jcmVhc2UgdGhlCitsaW1pdCBvbiBzdGFjayBzaXplIGJ5IGNvZGUgc3VjaCBhcyB0aGlzOgorLnNwCisgIHN0cnVjdCBybGltaXQgcmxpbTsKKyAgZ2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJnJsaW0pOworICBybGltLnJsaW1fY3VyID0gMTAwKjEwMjQqMTAyNDsKKyAgc2V0cmxpbWl0KFJMSU1JVF9TVEFDSywgJnJsaW0pOworLnNwCitUaGlzIHJlYWRzIHRoZSBjdXJyZW50IGxpbWl0cyAoc29mdCBhbmQgaGFyZCkgdXNpbmcgXGZCZ2V0cmxpbWl0KClcZlAsIHRoZW4KK2F0dGVtcHRzIHRvIGluY3JlYXNlIHRoZSBzb2Z0IGxpbWl0IHRvIDEwME1iIHVzaW5nIFxmQnNldHJsaW1pdCgpXGZQLiBZb3UgbXVzdAorZG8gdGhpcyBiZWZvcmUgY2FsbGluZyBcZkJwY3JlMl9tYXRjaCgpXGZQLgorLgorLgorLlNTICJDaGFuZ2luZyBzdGFjayBzaXplIGluIE1hYyBPUyBYIgorLnJzCisuc3AKK1VzaW5nIFxmQnNldHJsaW1pdCgpXGZQLCBhcyBkZXNjcmliZWQgYWJvdmUsIHNob3VsZCBhbHNvIHdvcmsgb24gTWFjIE9TIFguIEl0CitpcyBhbHNvIHBvc3NpYmxlIHRvIHNldCBhIHN0YWNrIHNpemUgd2hlbiBsaW5raW5nIGEgcHJvZ3JhbS4gVGhlcmUgaXMgYQorZGlzY3Vzc2lvbiBhYm91dCBzdGFjayBzaXplcyBpbiBNYWMgT1MgWCBhdCB0aGlzIHdlYiBzaXRlOgorLlwiIEhUTUwgPGEgaHJlZj0iaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vcWEvcWEyMDA1L3FhMTQxOS5odG1sIj4KKy5cIiA8L2E+CitodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9xYS9xYTIwMDUvcWExNDE5Lmh0bWwuCisuXCIKKy4KKy4KKy5TSCBBVVRIT1IKKy5ycworLnNwCisubmYKK1BoaWxpcCBIYXplbAorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorQ2FtYnJpZGdlLCBFbmdsYW5kLgorLmZpCisuCisuCisuU0ggUkVWSVNJT04KKy5ycworLnNwCisubmYKK0xhc3QgdXBkYXRlZDogMjEgTm92ZW1iZXIgMjAxNAorQ29weXJpZ2h0IChjKSAxOTk3LTIwMTQgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCisuZmkKZGlmZiAtLWdpdCBhL2Rpc3QyL2RvYy9wY3JlMnN5bnRheC4zIGIvZGlzdDIvZG9jL3BjcmUyc3ludGF4LjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJlOGI5MgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMnN5bnRheC4zCkBAIC0wLDAgKzEsNTgyIEBACisuVEggUENSRTJTWU5UQVggMyAiMTYgT2N0b2JlciAyMDE1IiAiUENSRTIgMTAuMjEiCisuU0ggTkFNRQorUENSRTIgLSBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyAocmV2aXNlZCBBUEkpCisuU0ggIlBDUkUyIFJFR1VMQVIgRVhQUkVTU0lPTiBTWU5UQVggU1VNTUFSWSIKKy5ycworLnNwCitUaGUgZnVsbCBzeW50YXggYW5kIHNlbWFudGljcyBvZiB0aGUgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkKK1BDUkUyIGFyZSBkZXNjcmliZWQgaW4gdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwYXR0ZXJuXGZQCisuXCIKK2RvY3VtZW50YXRpb24uIFRoaXMgZG9jdW1lbnQgY29udGFpbnMgYSBxdWljay1yZWZlcmVuY2Ugc3VtbWFyeSBvZiB0aGUgc3ludGF4LgorLgorLgorLlNIICJRVU9USU5HIgorLnJzCisuc3AKKyAgXGV4ICAgICAgICAgd2hlcmUgeCBpcyBub24tYWxwaGFudW1lcmljIGlzIGEgbGl0ZXJhbCB4CisgIFxlUS4uLlxlRSAgICB0cmVhdCBlbmNsb3NlZCBjaGFyYWN0ZXJzIGFzIGxpdGVyYWwKKy4KKy4KKy5TSCAiRVNDQVBFRCBDSEFSQUNURVJTIgorLnJzCisuc3AKK1RoaXMgdGFibGUgYXBwbGllcyB0byBBU0NJSSBhbmQgVW5pY29kZSBlbnZpcm9ubWVudHMuCisuc3AKKyAgXGVhICAgICAgICAgYWxhcm0sIHRoYXQgaXMsIHRoZSBCRUwgY2hhcmFjdGVyIChoZXggMDcpCisgIFxlY3ggICAgICAgICJjb250cm9sLXgiLCB3aGVyZSB4IGlzIGFueSBBU0NJSSBwcmludGluZyBjaGFyYWN0ZXIKKyAgXGVlICAgICAgICAgZXNjYXBlIChoZXggMUIpCisgIFxlZiAgICAgICAgIGZvcm0gZmVlZCAoaGV4IDBDKQorICBcZW4gICAgICAgICBuZXdsaW5lIChoZXggMEEpCisgIFxlciAgICAgICAgIGNhcnJpYWdlIHJldHVybiAoaGV4IDBEKQorICBcZXQgICAgICAgICB0YWIgKGhleCAwOSkKKyAgXGUwZGQgICAgICAgY2hhcmFjdGVyIHdpdGggb2N0YWwgY29kZSAwZGQKKyAgXGVkZGQgICAgICAgY2hhcmFjdGVyIHdpdGggb2N0YWwgY29kZSBkZGQsIG9yIGJhY2tyZWZlcmVuY2UKKyAgXGVve2RkZC4ufSAgY2hhcmFjdGVyIHdpdGggb2N0YWwgY29kZSBkZGQuLgorICBcZVUgICAgICAgICAiVSIgaWYgUENSRTJfQUxUX0JTVVggaXMgc2V0IChvdGhlcndpc2UgaXMgYW4gZXJyb3IpCisgIFxldWhoaGggICAgIGNoYXJhY3RlciB3aXRoIGhleCBjb2RlIGhoaGggKGlmIFBDUkUyX0FMVF9CU1VYIGlzIHNldCkKKyAgXGV4aGggICAgICAgY2hhcmFjdGVyIHdpdGggaGV4IGNvZGUgaGgKKyAgXGV4e2hoaC4ufSAgY2hhcmFjdGVyIHdpdGggaGV4IGNvZGUgaGhoLi4KKy5zcAorTm90ZSB0aGF0IFxlMGRkIGlzIGFsd2F5cyBhbiBvY3RhbCBjb2RlLiBUaGUgdHJlYXRtZW50IG9mIGJhY2tzbGFzaCBmb2xsb3dlZCBieQorYSBub24temVybyBkaWdpdCBpcyBjb21wbGljYXRlZDsgZm9yIGRldGFpbHMgc2VlIHRoZSBzZWN0aW9uCisuXCIgSFRNTCA8YSBocmVmPSJwY3JlMnBhdHRlcm4uaHRtbCNkaWdpdHNhZnRlcmJhY2tzbGFzaCI+CisuXCIgPC9hPgorIk5vbi1wcmludGluZyBjaGFyYWN0ZXJzIgorLlwiCitpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBhdHRlcm5cZlAKKy5cIgorZG9jdW1lbnRhdGlvbiwgd2hlcmUgZGV0YWlscyBvZiBlc2NhcGUgcHJvY2Vzc2luZyBpbiBFQkNESUMgZW52aXJvbm1lbnRzIGFyZQorYWxzbyBnaXZlbi4KKy5QCitXaGVuIFxleCBpcyBub3QgZm9sbG93ZWQgYnkgeywgZnJvbSB6ZXJvIHRvIHR3byBoZXhhZGVjaW1hbCBkaWdpdHMgYXJlIHJlYWQsCitidXQgaWYgUENSRTJfQUxUX0JTVVggaXMgc2V0LCBcZXggbXVzdCBiZSBmb2xsb3dlZCBieSB0d28gaGV4YWRlY2ltYWwgZGlnaXRzIHRvCitiZSByZWNvZ25pemVkIGFzIGEgaGV4YWRlY2ltYWwgZXNjYXBlOyBvdGhlcndpc2UgaXQgbWF0Y2hlcyBhIGxpdGVyYWwgIngiLgorTGlrZXdpc2UsIGlmIFxldSAoaW4gQUxUX0JTVVggbW9kZSkgaXMgbm90IGZvbGxvd2VkIGJ5IGZvdXIgaGV4YWRlY2ltYWwgZGlnaXRzLAoraXQgbWF0Y2hlcyBhIGxpdGVyYWwgInUiLgorLgorLgorLlNIICJDSEFSQUNURVIgVFlQRVMiCisucnMKKy5zcAorICAuICAgICAgICAgIGFueSBjaGFyYWN0ZXIgZXhjZXB0IG5ld2xpbmU7CisgICAgICAgICAgICAgICBpbiBkb3RhbGwgbW9kZSwgYW55IGNoYXJhY3RlciB3aGF0c29ldmVyCisgIFxlQyAgICAgICAgIG9uZSBjb2RlIHVuaXQsIGV2ZW4gaW4gVVRGIG1vZGUgKGJlc3QgYXZvaWRlZCkKKyAgXGVkICAgICAgICAgYSBkZWNpbWFsIGRpZ2l0CisgIFxlRCAgICAgICAgIGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGEgZGVjaW1hbCBkaWdpdAorICBcZWggICAgICAgICBhIGhvcml6b250YWwgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgIFxlSCAgICAgICAgIGEgY2hhcmFjdGVyIHRoYXQgaXMgbm90IGEgaG9yaXpvbnRhbCB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIKKyAgXGVOICAgICAgICAgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QgYSBuZXdsaW5lCisgIFxlcHtcZkl4eFxmUH0gICAgIGEgY2hhcmFjdGVyIHdpdGggdGhlIFxmSXh4XGZQIHByb3BlcnR5CisgIFxlUHtcZkl4eFxmUH0gICAgIGEgY2hhcmFjdGVyIHdpdGhvdXQgdGhlIFxmSXh4XGZQIHByb3BlcnR5CisgIFxlUiAgICAgICAgIGEgbmV3bGluZSBzZXF1ZW5jZQorICBcZXMgICAgICAgICBhIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcZVMgICAgICAgICBhIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcZXYgICAgICAgICBhIHZlcnRpY2FsIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcZVYgICAgICAgICBhIGNoYXJhY3RlciB0aGF0IGlzIG5vdCBhIHZlcnRpY2FsIHdoaXRlIHNwYWNlIGNoYXJhY3RlcgorICBcZXcgICAgICAgICBhICJ3b3JkIiBjaGFyYWN0ZXIKKyAgXGVXICAgICAgICAgYSAibm9uLXdvcmQiIGNoYXJhY3RlcgorICBcZVggICAgICAgICBhIFVuaWNvZGUgZXh0ZW5kZWQgZ3JhcGhlbWUgY2x1c3RlcgorLnNwCitcZUMgaXMgZGFuZ2Vyb3VzIGJlY2F1c2UgaXQgbWF5IGxlYXZlIHRoZSBjdXJyZW50IG1hdGNoaW5nIHBvaW50IGluIHRoZSBtaWRkbGUKK29mIGEgVVRGLTggb3IgVVRGLTE2IGNoYXJhY3Rlci4gVGhlIGFwcGxpY2F0aW9uIGNhbiBsb2NrIG91dCB0aGUgdXNlIG9mIFxlQyBieQorc2V0dGluZyB0aGUgUENSRTJfTkVWRVJfQkFDS1NMQVNIX0Mgb3B0aW9uLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGJ1aWxkIFBDUkUyCit3aXRoIHRoZSB1c2Ugb2YgXGVDIHBlcm1hbmVudGx5IGRpc2FibGVkLgorLlAKK0J5IGRlZmF1bHQsIFxlZCwgXGVzLCBhbmQgXGV3IG1hdGNoIG9ubHkgQVNDSUkgY2hhcmFjdGVycywgZXZlbiBpbiBVVEYtOCBtb2RlCitvciBpbiB0aGUgMTYtYml0IGFuZCAzMi1iaXQgbGlicmFyaWVzLiBIb3dldmVyLCBpZiBsb2NhbGUtc3BlY2lmaWMgbWF0Y2hpbmcgaXMKK2hhcHBlbmluZywgXGVzIGFuZCBcZXcgbWF5IGFsc28gbWF0Y2ggY2hhcmFjdGVycyB3aXRoIGNvZGUgcG9pbnRzIGluIHRoZSByYW5nZQorMTI4LTI1NS4gSWYgdGhlIFBDUkUyX1VDUCBvcHRpb24gaXMgc2V0LCB0aGUgYmVoYXZpb3VyIG9mIHRoZXNlIGVzY2FwZQorc2VxdWVuY2VzIGlzIGNoYW5nZWQgdG8gdXNlIFVuaWNvZGUgcHJvcGVydGllcyBhbmQgdGhleSBtYXRjaCBtYW55IG1vcmUKK2NoYXJhY3RlcnMuCisuCisuCisuU0ggIkdFTkVSQUwgQ0FURUdPUlkgUFJPUEVSVElFUyBGT1IgXGVwIGFuZCBcZVAiCisucnMKKy5zcAorICBDICAgICAgICAgIE90aGVyCisgIENjICAgICAgICAgQ29udHJvbAorICBDZiAgICAgICAgIEZvcm1hdAorICBDbiAgICAgICAgIFVuYXNzaWduZWQKKyAgQ28gICAgICAgICBQcml2YXRlIHVzZQorICBDcyAgICAgICAgIFN1cnJvZ2F0ZQorLnNwCisgIEwgICAgICAgICAgTGV0dGVyCisgIExsICAgICAgICAgTG93ZXIgY2FzZSBsZXR0ZXIKKyAgTG0gICAgICAgICBNb2RpZmllciBsZXR0ZXIKKyAgTG8gICAgICAgICBPdGhlciBsZXR0ZXIKKyAgTHQgICAgICAgICBUaXRsZSBjYXNlIGxldHRlcgorICBMdSAgICAgICAgIFVwcGVyIGNhc2UgbGV0dGVyCisgIEwmICAgICAgICAgTGwsIEx1LCBvciBMdAorLnNwCisgIE0gICAgICAgICAgTWFyaworICBNYyAgICAgICAgIFNwYWNpbmcgbWFyaworICBNZSAgICAgICAgIEVuY2xvc2luZyBtYXJrCisgIE1uICAgICAgICAgTm9uLXNwYWNpbmcgbWFyaworLnNwCisgIE4gICAgICAgICAgTnVtYmVyCisgIE5kICAgICAgICAgRGVjaW1hbCBudW1iZXIKKyAgTmwgICAgICAgICBMZXR0ZXIgbnVtYmVyCisgIE5vICAgICAgICAgT3RoZXIgbnVtYmVyCisuc3AKKyAgUCAgICAgICAgICBQdW5jdHVhdGlvbgorICBQYyAgICAgICAgIENvbm5lY3RvciBwdW5jdHVhdGlvbgorICBQZCAgICAgICAgIERhc2ggcHVuY3R1YXRpb24KKyAgUGUgICAgICAgICBDbG9zZSBwdW5jdHVhdGlvbgorICBQZiAgICAgICAgIEZpbmFsIHB1bmN0dWF0aW9uCisgIFBpICAgICAgICAgSW5pdGlhbCBwdW5jdHVhdGlvbgorICBQbyAgICAgICAgIE90aGVyIHB1bmN0dWF0aW9uCisgIFBzICAgICAgICAgT3BlbiBwdW5jdHVhdGlvbgorLnNwCisgIFMgICAgICAgICAgU3ltYm9sCisgIFNjICAgICAgICAgQ3VycmVuY3kgc3ltYm9sCisgIFNrICAgICAgICAgTW9kaWZpZXIgc3ltYm9sCisgIFNtICAgICAgICAgTWF0aGVtYXRpY2FsIHN5bWJvbAorICBTbyAgICAgICAgIE90aGVyIHN5bWJvbAorLnNwCisgIFogICAgICAgICAgU2VwYXJhdG9yCisgIFpsICAgICAgICAgTGluZSBzZXBhcmF0b3IKKyAgWnAgICAgICAgICBQYXJhZ3JhcGggc2VwYXJhdG9yCisgIFpzICAgICAgICAgU3BhY2Ugc2VwYXJhdG9yCisuCisuCisuU0ggIlBDUkUyIFNQRUNJQUwgQ0FURUdPUlkgUFJPUEVSVElFUyBGT1IgXGVwIGFuZCBcZVAiCisucnMKKy5zcAorICBYYW4gICAgICAgIEFscGhhbnVtZXJpYzogdW5pb24gb2YgcHJvcGVydGllcyBMIGFuZCBOCisgIFhwcyAgICAgICAgUE9TSVggc3BhY2U6IHByb3BlcnR5IFogb3IgdGFiLCBOTCwgVlQsIEZGLCBDUgorICBYc3AgICAgICAgIFBlcmwgc3BhY2U6IHByb3BlcnR5IFogb3IgdGFiLCBOTCwgVlQsIEZGLCBDUgorICBYdWMgICAgICAgIFVuaXZlcmFsbHktbmFtZWQgY2hhcmFjdGVyOiBvbmUgdGhhdCBjYW4gYmUKKyAgICAgICAgICAgICAgIHJlcHJlc2VudGVkIGJ5IGEgVW5pdmVyc2FsIENoYXJhY3RlciBOYW1lCisgIFh3ZCAgICAgICAgUGVybCB3b3JkOiBwcm9wZXJ0eSBYYW4gb3IgdW5kZXJzY29yZQorLnNwCitQZXJsIGFuZCBQT1NJWCBzcGFjZSBhcmUgbm93IHRoZSBzYW1lLiBQZXJsIGFkZGVkIFZUIHRvIGl0cyBzcGFjZSBjaGFyYWN0ZXIgc2V0CithdCByZWxlYXNlIDUuMTguCisuCisuCisuU0ggIlNDUklQVCBOQU1FUyBGT1IgXGVwIEFORCBcZVAiCisucnMKKy5zcAorQWhvbSwKK0FuYXRvbGlhbl9IaWVyb2dseXBocywKK0FyYWJpYywKK0FybWVuaWFuLAorQXZlc3RhbiwKK0JhbGluZXNlLAorQmFtdW0sCitCYXNzYV9WYWgsCitCYXRhaywKK0JlbmdhbGksCitCb3BvbW9mbywKK0JyYWhtaSwKK0JyYWlsbGUsCitCdWdpbmVzZSwKK0J1aGlkLAorQ2FuYWRpYW5fQWJvcmlnaW5hbCwKK0NhcmlhbiwKK0NhdWNhc2lhbl9BbGJhbmlhbiwKK0NoYWttYSwKK0NoYW0sCitDaGVyb2tlZSwKK0NvbW1vbiwKK0NvcHRpYywKK0N1bmVpZm9ybSwKK0N5cHJpb3QsCitDeXJpbGxpYywKK0Rlc2VyZXQsCitEZXZhbmFnYXJpLAorRHVwbG95YW4sCitFZ3lwdGlhbl9IaWVyb2dseXBocywKK0VsYmFzYW4sCitFdGhpb3BpYywKK0dlb3JnaWFuLAorR2xhZ29saXRpYywKK0dvdGhpYywKK0dyYW50aGEsCitHcmVlaywKK0d1amFyYXRpLAorR3VybXVraGksCitIYW4sCitIYW5ndWwsCitIYW51bm9vLAorSGF0cmFuLAorSGVicmV3LAorSGlyYWdhbmEsCitJbXBlcmlhbF9BcmFtYWljLAorSW5oZXJpdGVkLAorSW5zY3JpcHRpb25hbF9QYWhsYXZpLAorSW5zY3JpcHRpb25hbF9QYXJ0aGlhbiwKK0phdmFuZXNlLAorS2FpdGhpLAorS2FubmFkYSwKK0thdGFrYW5hLAorS2F5YWhfTGksCitLaGFyb3NodGhpLAorS2htZXIsCitLaG9qa2ksCitLaHVkYXdhZGksCitMYW8sCitMYXRpbiwKK0xlcGNoYSwKK0xpbWJ1LAorTGluZWFyX0EsCitMaW5lYXJfQiwKK0xpc3UsCitMeWNpYW4sCitMeWRpYW4sCitNYWhhamFuaSwKK01hbGF5YWxhbSwKK01hbmRhaWMsCitNYW5pY2hhZWFuLAorTWVldGVpX01heWVrLAorTWVuZGVfS2lrYWt1aSwKK01lcm9pdGljX0N1cnNpdmUsCitNZXJvaXRpY19IaWVyb2dseXBocywKK01pYW8sCitNb2RpLAorTW9uZ29saWFuLAorTXJvLAorTXVsdGFuaSwKK015YW5tYXIsCitOYWJhdGFlYW4sCitOZXdfVGFpX0x1ZSwKK05rbywKK09naGFtLAorT2xfQ2hpa2ksCitPbGRfSHVuZ2FyaWFuLAorT2xkX0l0YWxpYywKK09sZF9Ob3J0aF9BcmFiaWFuLAorT2xkX1Blcm1pYywKK09sZF9QZXJzaWFuLAorT2xkX1NvdXRoX0FyYWJpYW4sCitPbGRfVHVya2ljLAorT3JpeWEsCitPc21hbnlhLAorUGFoYXdoX0htb25nLAorUGFsbXlyZW5lLAorUGF1X0Npbl9IYXUsCitQaGFnc19QYSwKK1Bob2VuaWNpYW4sCitQc2FsdGVyX1BhaGxhdmksCitSZWphbmcsCitSdW5pYywKK1NhbWFyaXRhbiwKK1NhdXJhc2h0cmEsCitTaGFyYWRhLAorU2hhdmlhbiwKK1NpZGRoYW0sCitTaWduV3JpdGluZywKK1NpbmhhbGEsCitTb3JhX1NvbXBlbmcsCitTdW5kYW5lc2UsCitTeWxvdGlfTmFncmksCitTeXJpYWMsCitUYWdhbG9nLAorVGFnYmFud2EsCitUYWlfTGUsCitUYWlfVGhhbSwKK1RhaV9WaWV0LAorVGFrcmksCitUYW1pbCwKK1RlbHVndSwKK1RoYWFuYSwKK1RoYWksCitUaWJldGFuLAorVGlmaW5hZ2gsCitUaXJodXRhLAorVWdhcml0aWMsCitWYWksCitXYXJhbmdfQ2l0aSwKK1lpLgorLgorLgorLlNIICJDSEFSQUNURVIgQ0xBU1NFUyIKKy5ycworLnNwCisgIFsuLi5dICAgICAgIHBvc2l0aXZlIGNoYXJhY3RlciBjbGFzcworICBbXi4uLl0gICAgICBuZWdhdGl2ZSBjaGFyYWN0ZXIgY2xhc3MKKyAgW3gteV0gICAgICAgcmFuZ2UgKGNhbiBiZSB1c2VkIGZvciBoZXggY2hhcmFjdGVycykKKyAgW1s6eHh4Ol1dICAgcG9zaXRpdmUgUE9TSVggbmFtZWQgc2V0CisgIFtbOl54eHg6XV0gIG5lZ2F0aXZlIFBPU0lYIG5hbWVkIHNldAorLnNwCisgIGFsbnVtICAgICAgIGFscGhhbnVtZXJpYworICBhbHBoYSAgICAgICBhbHBoYWJldGljCisgIGFzY2lpICAgICAgIDAtMTI3CisgIGJsYW5rICAgICAgIHNwYWNlIG9yIHRhYgorICBjbnRybCAgICAgICBjb250cm9sIGNoYXJhY3RlcgorICBkaWdpdCAgICAgICBkZWNpbWFsIGRpZ2l0CisgIGdyYXBoICAgICAgIHByaW50aW5nLCBleGNsdWRpbmcgc3BhY2UKKyAgbG93ZXIgICAgICAgbG93ZXIgY2FzZSBsZXR0ZXIKKyAgcHJpbnQgICAgICAgcHJpbnRpbmcsIGluY2x1ZGluZyBzcGFjZQorICBwdW5jdCAgICAgICBwcmludGluZywgZXhjbHVkaW5nIGFscGhhbnVtZXJpYworICBzcGFjZSAgICAgICB3aGl0ZSBzcGFjZQorICB1cHBlciAgICAgICB1cHBlciBjYXNlIGxldHRlcgorICB3b3JkICAgICAgICBzYW1lIGFzIFxldworICB4ZGlnaXQgICAgICBoZXhhZGVjaW1hbCBkaWdpdAorLnNwCitJbiBQQ1JFMiwgUE9TSVggY2hhcmFjdGVyIHNldCBuYW1lcyByZWNvZ25pemUgb25seSBBU0NJSSBjaGFyYWN0ZXJzIGJ5IGRlZmF1bHQsCitidXQgc29tZSBvZiB0aGVtIHVzZSBVbmljb2RlIHByb3BlcnRpZXMgaWYgUENSRTJfVUNQIGlzIHNldC4gWW91IGNhbiB1c2UKK1xlUS4uLlxlRSBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MuCisuCisuCisuU0ggIlFVQU5USUZJRVJTIgorLnJzCisuc3AKKyAgPyAgICAgICAgICAgMCBvciAxLCBncmVlZHkKKyAgPysgICAgICAgICAgMCBvciAxLCBwb3NzZXNzaXZlCisgID8/ICAgICAgICAgIDAgb3IgMSwgbGF6eQorICAqICAgICAgICAgICAwIG9yIG1vcmUsIGdyZWVkeQorICAqKyAgICAgICAgICAwIG9yIG1vcmUsIHBvc3Nlc3NpdmUKKyAgKj8gICAgICAgICAgMCBvciBtb3JlLCBsYXp5CisgICsgICAgICAgICAgIDEgb3IgbW9yZSwgZ3JlZWR5CisgICsrICAgICAgICAgIDEgb3IgbW9yZSwgcG9zc2Vzc2l2ZQorICArPyAgICAgICAgICAxIG9yIG1vcmUsIGxhenkKKyAge259ICAgICAgICAgZXhhY3RseSBuCisgIHtuLG19ICAgICAgIGF0IGxlYXN0IG4sIG5vIG1vcmUgdGhhbiBtLCBncmVlZHkKKyAge24sbX0rICAgICAgYXQgbGVhc3Qgbiwgbm8gbW9yZSB0aGFuIG0sIHBvc3Nlc3NpdmUKKyAge24sbX0/ICAgICAgYXQgbGVhc3Qgbiwgbm8gbW9yZSB0aGFuIG0sIGxhenkKKyAge24sfSAgICAgICAgbiBvciBtb3JlLCBncmVlZHkKKyAge24sfSsgICAgICAgbiBvciBtb3JlLCBwb3NzZXNzaXZlCisgIHtuLH0/ICAgICAgIG4gb3IgbW9yZSwgbGF6eQorLgorLgorLlNIICJBTkNIT1JTIEFORCBTSU1QTEUgQVNTRVJUSU9OUyIKKy5ycworLnNwCisgIFxlYiAgICAgICAgICB3b3JkIGJvdW5kYXJ5CisgIFxlQiAgICAgICAgICBub3QgYSB3b3JkIGJvdW5kYXJ5CisgIF4gICAgICAgICAgIHN0YXJ0IG9mIHN1YmplY3QKKyAgICAgICAgICAgICAgICBhbHNvIGFmdGVyIGFuIGludGVybmFsIG5ld2xpbmUgaW4gbXVsdGlsaW5lIG1vZGUKKyAgICAgICAgICAgICAgICAoYWZ0ZXIgYW55IG5ld2xpbmUgaWYgUENSRTJfQUxUX0NJUkNVTUZMRVggaXMgc2V0KQorICBcZUEgICAgICAgICAgc3RhcnQgb2Ygc3ViamVjdAorICAkICAgICAgICAgICBlbmQgb2Ygc3ViamVjdAorICAgICAgICAgICAgICAgIGFsc28gYmVmb3JlIG5ld2xpbmUgYXQgZW5kIG9mIHN1YmplY3QKKyAgICAgICAgICAgICAgICBhbHNvIGJlZm9yZSBpbnRlcm5hbCBuZXdsaW5lIGluIG11bHRpbGluZSBtb2RlCisgIFxlWiAgICAgICAgICBlbmQgb2Ygc3ViamVjdAorICAgICAgICAgICAgICAgIGFsc28gYmVmb3JlIG5ld2xpbmUgYXQgZW5kIG9mIHN1YmplY3QKKyAgXGV6ICAgICAgICAgIGVuZCBvZiBzdWJqZWN0CisgIFxlRyAgICAgICAgICBmaXJzdCBtYXRjaGluZyBwb3NpdGlvbiBpbiBzdWJqZWN0CisuCisuCisuU0ggIk1BVENIIFBPSU5UIFJFU0VUIgorLnJzCisuc3AKKyAgXGVLICAgICAgICAgIHJlc2V0IHN0YXJ0IG9mIG1hdGNoCisuc3AKK1xlSyBpcyBob25vdXJlZCBpbiBwb3NpdGl2ZSBhc3NlcnRpb25zLCBidXQgaWdub3JlZCBpbiBuZWdhdGl2ZSBvbmVzLgorLgorLgorLlNIICJBTFRFUk5BVElPTiIKKy5ycworLnNwCisgIGV4cHJ8ZXhwcnxleHByLi4uCisuCisuCisuU0ggIkNBUFRVUklORyIKKy5ycworLnNwCisgICguLi4pICAgICAgICAgICBjYXB0dXJpbmcgZ3JvdXAKKyAgKD88bmFtZT4uLi4pICAgIG5hbWVkIGNhcHR1cmluZyBncm91cCAoUGVybCkKKyAgKD8nbmFtZScuLi4pICAgIG5hbWVkIGNhcHR1cmluZyBncm91cCAoUGVybCkKKyAgKD9QPG5hbWU+Li4uKSAgIG5hbWVkIGNhcHR1cmluZyBncm91cCAoUHl0aG9uKQorICAoPzouLi4pICAgICAgICAgbm9uLWNhcHR1cmluZyBncm91cAorICAoP3wuLi4pICAgICAgICAgbm9uLWNhcHR1cmluZyBncm91cDsgcmVzZXQgZ3JvdXAgbnVtYmVycyBmb3IKKyAgICAgICAgICAgICAgICAgICBjYXB0dXJpbmcgZ3JvdXBzIGluIGVhY2ggYWx0ZXJuYXRpdmUKKy4KKy4KKy5TSCAiQVRPTUlDIEdST1VQUyIKKy5ycworLnNwCisgICg/Pi4uLikgICAgICAgICBhdG9taWMsIG5vbi1jYXB0dXJpbmcgZ3JvdXAKKy4KKy4KKy4KKy4KKy5TSCAiQ09NTUVOVCIKKy5ycworLnNwCisgICg/Iy4uLi4pICAgICAgICBjb21tZW50IChub3QgbmVzdGFibGUpCisuCisuCisuU0ggIk9QVElPTiBTRVRUSU5HIgorLnJzCisuc3AKKyAgKD9pKSAgICAgICAgICAgIGNhc2VsZXNzCisgICg/SikgICAgICAgICAgICBhbGxvdyBkdXBsaWNhdGUgbmFtZXMKKyAgKD9tKSAgICAgICAgICAgIG11bHRpbGluZQorICAoP3MpICAgICAgICAgICAgc2luZ2xlIGxpbmUgKGRvdGFsbCkKKyAgKD9VKSAgICAgICAgICAgIGRlZmF1bHQgdW5ncmVlZHkgKGxhenkpCisgICg/eCkgICAgICAgICAgICBleHRlbmRlZCAoaWdub3JlIHdoaXRlIHNwYWNlKQorICAoPy0uLi4pICAgICAgICAgdW5zZXQgb3B0aW9uKHMpCisuc3AKK1RoZSBmb2xsb3dpbmcgYXJlIHJlY29nbml6ZWQgb25seSBhdCB0aGUgdmVyeSBzdGFydCBvZiBhIHBhdHRlcm4gb3IgYWZ0ZXIgb25lCitvZiB0aGUgbmV3bGluZSBvciBcZVIgb3B0aW9ucyB3aXRoIHNpbWlsYXIgc3ludGF4LiBNb3JlIHRoYW4gb25lIG9mIHRoZW0gbWF5CithcHBlYXIuCisuc3AKKyAgKCpMSU1JVF9NQVRDSD1kKSBzZXQgdGhlIG1hdGNoIGxpbWl0IHRvIGQgKGRlY2ltYWwgbnVtYmVyKQorICAoKkxJTUlUX1JFQ1VSU0lPTj1kKSBzZXQgdGhlIHJlY3Vyc2lvbiBsaW1pdCB0byBkIChkZWNpbWFsIG51bWJlcikKKyAgKCpOT1RFTVBUWSkgICAgIHNldCBQQ1JFMl9OT1RFTVBUWSB3aGVuIG1hdGNoaW5nCisgICgqTk9URU1QVFlfQVRTVEFSVCkgc2V0IFBDUkUyX05PVEVNUFRZX0FUU1RBUlQgd2hlbiBtYXRjaGluZworICAoKk5PX0FVVE9fUE9TU0VTUykgbm8gYXV0by1wb3NzZXNzaWZpY2F0aW9uIChQQ1JFMl9OT19BVVRPX1BPU1NFU1MpCisgICgqTk9fRE9UU1RBUl9BTkNIT1IpIG5vIC4qIGFuY2hvcmluZyAoUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IpCisgICgqTk9fSklUKSAgICAgICBkaXNhYmxlIEpJVCBvcHRpbWl6YXRpb24KKyAgKCpOT19TVEFSVF9PUFQpIG5vIHN0YXJ0LW1hdGNoIG9wdGltaXphdGlvbiAoUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUpCisgICgqVVRGKSAgICAgICAgICBzZXQgYXBwcm9wcmlhdGUgVVRGIG1vZGUgZm9yIHRoZSBsaWJyYXJ5IGluIHVzZQorICAoKlVDUCkgICAgICAgICAgc2V0IFBDUkUyX1VDUCAodXNlIFVuaWNvZGUgcHJvcGVydGllcyBmb3IgXGVkIGV0YykKKy5zcAorTm90ZSB0aGF0IExJTUlUX01BVENIIGFuZCBMSU1JVF9SRUNVUlNJT04gY2FuIG9ubHkgcmVkdWNlIHRoZSB2YWx1ZSBvZiB0aGUKK2xpbWl0cyBzZXQgYnkgdGhlIGNhbGxlciBvZiBwY3JlMl9tYXRjaCgpLCBub3QgaW5jcmVhc2UgdGhlbS4gVGhlIGFwcGxpY2F0aW9uCitjYW4gbG9jayBvdXQgdGhlIHVzZSBvZiAoKlVURikgYW5kICgqVUNQKSBieSBzZXR0aW5nIHRoZSBQQ1JFMl9ORVZFUl9VVEYgb3IKK1BDUkUyX05FVkVSX1VDUCBvcHRpb25zLCByZXNwZWN0aXZlbHksIGF0IGNvbXBpbGUgdGltZS4KKy4KKy4KKy5TSCAiTkVXTElORSBDT05WRU5USU9OIgorLnJzCisuc3AKK1RoZXNlIGFyZSByZWNvZ25pemVkIG9ubHkgYXQgdGhlIHZlcnkgc3RhcnQgb2YgdGhlIHBhdHRlcm4gb3IgYWZ0ZXIgb3B0aW9uCitzZXR0aW5ncyB3aXRoIGEgc2ltaWxhciBzeW50YXguCisuc3AKKyAgKCpDUikgICAgICAgICAgIGNhcnJpYWdlIHJldHVybiBvbmx5CisgICgqTEYpICAgICAgICAgICBsaW5lZmVlZCBvbmx5CisgICgqQ1JMRikgICAgICAgICBjYXJyaWFnZSByZXR1cm4gZm9sbG93ZWQgYnkgbGluZWZlZWQKKyAgKCpBTllDUkxGKSAgICAgIGFsbCB0aHJlZSBvZiB0aGUgYWJvdmUKKyAgKCpBTlkpICAgICAgICAgIGFueSBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UKKy4KKy4KKy5TSCAiV0hBVCBcZVIgTUFUQ0hFUyIKKy5ycworLnNwCitUaGVzZSBhcmUgcmVjb2duaXplZCBvbmx5IGF0IHRoZSB2ZXJ5IHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIG9yIGFmdGVyIG9wdGlvbgorc2V0dGluZyB3aXRoIGEgc2ltaWxhciBzeW50YXguCisuc3AKKyAgKCpCU1JfQU5ZQ1JMRikgIENSLCBMRiwgb3IgQ1JMRgorICAoKkJTUl9VTklDT0RFKSAgYW55IFVuaWNvZGUgbmV3bGluZSBzZXF1ZW5jZQorLgorLgorLlNIICJMT09LQUhFQUQgQU5EIExPT0tCRUhJTkQgQVNTRVJUSU9OUyIKKy5ycworLnNwCisgICg/PS4uLikgICAgICAgICBwb3NpdGl2ZSBsb29rIGFoZWFkCisgICg/IS4uLikgICAgICAgICBuZWdhdGl2ZSBsb29rIGFoZWFkCisgICg/PD0uLi4pICAgICAgICBwb3NpdGl2ZSBsb29rIGJlaGluZAorICAoPzwhLi4uKSAgICAgICAgbmVnYXRpdmUgbG9vayBiZWhpbmQKKy5zcAorRWFjaCB0b3AtbGV2ZWwgYnJhbmNoIG9mIGEgbG9vayBiZWhpbmQgbXVzdCBiZSBvZiBhIGZpeGVkIGxlbmd0aC4KKy4KKy4KKy5TSCAiQkFDS1JFRkVSRU5DRVMiCisucnMKKy5zcAorICBcZW4gICAgICAgICAgICAgIHJlZmVyZW5jZSBieSBudW1iZXIgKGNhbiBiZSBhbWJpZ3VvdXMpCisgIFxlZ24gICAgICAgICAgICAgcmVmZXJlbmNlIGJ5IG51bWJlcgorICBcZWd7bn0gICAgICAgICAgIHJlZmVyZW5jZSBieSBudW1iZXIKKyAgXGVney1ufSAgICAgICAgICByZWxhdGl2ZSByZWZlcmVuY2UgYnkgbnVtYmVyCisgIFxlazxuYW1lPiAgICAgICAgcmVmZXJlbmNlIGJ5IG5hbWUgKFBlcmwpCisgIFxlayduYW1lJyAgICAgICAgcmVmZXJlbmNlIGJ5IG5hbWUgKFBlcmwpCisgIFxlZ3tuYW1lfSAgICAgICAgcmVmZXJlbmNlIGJ5IG5hbWUgKFBlcmwpCisgIFxla3tuYW1lfSAgICAgICAgcmVmZXJlbmNlIGJ5IG5hbWUgKC5ORVQpCisgICg/UD1uYW1lKSAgICAgICByZWZlcmVuY2UgYnkgbmFtZSAoUHl0aG9uKQorLgorLgorLlNIICJTVUJST1VUSU5FIFJFRkVSRU5DRVMgKFBPU1NJQkxZIFJFQ1VSU0lWRSkiCisucnMKKy5zcAorICAoP1IpICAgICAgICAgICAgcmVjdXJzZSB3aG9sZSBwYXR0ZXJuCisgICg/bikgICAgICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgYWJzb2x1dGUgbnVtYmVyCisgICg/K24pICAgICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgcmVsYXRpdmUgbnVtYmVyCisgICg/LW4pICAgICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgcmVsYXRpdmUgbnVtYmVyCisgICg/Jm5hbWUpICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgbmFtZSAoUGVybCkKKyAgKD9QPm5hbWUpICAgICAgIGNhbGwgc3VicGF0dGVybiBieSBuYW1lIChQeXRob24pCisgIFxlZzxuYW1lPiAgICAgICAgY2FsbCBzdWJwYXR0ZXJuIGJ5IG5hbWUgKE9uaWd1cnVtYSkKKyAgXGVnJ25hbWUnICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgbmFtZSAoT25pZ3VydW1hKQorICBcZWc8bj4gICAgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSBhYnNvbHV0ZSBudW1iZXIgKE9uaWd1cnVtYSkKKyAgXGVnJ24nICAgICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgYWJzb2x1dGUgbnVtYmVyIChPbmlndXJ1bWEpCisgIFxlZzwrbj4gICAgICAgICAgY2FsbCBzdWJwYXR0ZXJuIGJ5IHJlbGF0aXZlIG51bWJlciAoUENSRTIgZXh0ZW5zaW9uKQorICBcZWcnK24nICAgICAgICAgIGNhbGwgc3VicGF0dGVybiBieSByZWxhdGl2ZSBudW1iZXIgKFBDUkUyIGV4dGVuc2lvbikKKyAgXGVnPC1uPiAgICAgICAgICBjYWxsIHN1YnBhdHRlcm4gYnkgcmVsYXRpdmUgbnVtYmVyIChQQ1JFMiBleHRlbnNpb24pCisgIFxlZyctbicgICAgICAgICAgY2FsbCBzdWJwYXR0ZXJuIGJ5IHJlbGF0aXZlIG51bWJlciAoUENSRTIgZXh0ZW5zaW9uKQorLgorLgorLlNIICJDT05ESVRJT05BTCBQQVRURVJOUyIKKy5ycworLnNwCisgICg/KGNvbmRpdGlvbil5ZXMtcGF0dGVybikKKyAgKD8oY29uZGl0aW9uKXllcy1wYXR0ZXJufG5vLXBhdHRlcm4pCisuc3AKKyAgKD8obikgICAgICAgICAgICAgICBhYnNvbHV0ZSByZWZlcmVuY2UgY29uZGl0aW9uCisgICg/KCtuKSAgICAgICAgICAgICAgcmVsYXRpdmUgcmVmZXJlbmNlIGNvbmRpdGlvbgorICAoPygtbikgICAgICAgICAgICAgIHJlbGF0aXZlIHJlZmVyZW5jZSBjb25kaXRpb24KKyAgKD8oPG5hbWU+KSAgICAgICAgICBuYW1lZCByZWZlcmVuY2UgY29uZGl0aW9uIChQZXJsKQorICAoPygnbmFtZScpICAgICAgICAgIG5hbWVkIHJlZmVyZW5jZSBjb25kaXRpb24gKFBlcmwpCisgICg/KG5hbWUpICAgICAgICAgICAgbmFtZWQgcmVmZXJlbmNlIGNvbmRpdGlvbiAoUENSRTIpCisgICg/KFIpICAgICAgICAgICAgICAgb3ZlcmFsbCByZWN1cnNpb24gY29uZGl0aW9uCisgICg/KFJuKSAgICAgICAgICAgICAgc3BlY2lmaWMgZ3JvdXAgcmVjdXJzaW9uIGNvbmRpdGlvbgorICAoPyhSJm5hbWUpICAgICAgICAgIHNwZWNpZmljIHJlY3Vyc2lvbiBjb25kaXRpb24KKyAgKD8oREVGSU5FKSAgICAgICAgICBkZWZpbmUgc3VicGF0dGVybiBmb3IgcmVmZXJlbmNlCisgICg/KFZFUlNJT05bPl09bi5tKSAgdGVzdCBQQ1JFMiB2ZXJzaW9uCisgICg/KGFzc2VydCkgICAgICAgICAgYXNzZXJ0aW9uIGNvbmRpdGlvbgorLgorLgorLlNIICJCQUNLVFJBQ0tJTkcgQ09OVFJPTCIKKy5ycworLnNwCitUaGUgZm9sbG93aW5nIGFjdCBpbW1lZGlhdGVseSB0aGV5IGFyZSByZWFjaGVkOgorLnNwCisgICgqQUNDRVBUKSAgICAgICBmb3JjZSBzdWNjZXNzZnVsIG1hdGNoCisgICgqRkFJTCkgICAgICAgICBmb3JjZSBiYWNrdHJhY2s7IHN5bm9ueW0gKCpGKQorICAoKk1BUks6TkFNRSkgICAgc2V0IG5hbWUgdG8gYmUgcGFzc2VkIGJhY2s7IHN5bm9ueW0gKCo6TkFNRSkKKy5zcAorVGhlIGZvbGxvd2luZyBhY3Qgb25seSB3aGVuIGEgc3Vic2VxdWVudCBtYXRjaCBmYWlsdXJlIGNhdXNlcyBhIGJhY2t0cmFjayB0bworcmVhY2ggdGhlbS4gVGhleSBhbGwgZm9yY2UgYSBtYXRjaCBmYWlsdXJlLCBidXQgdGhleSBkaWZmZXIgaW4gd2hhdCBoYXBwZW5zCithZnRlcndhcmRzLiBUaG9zZSB0aGF0IGFkdmFuY2UgdGhlIHN0YXJ0LW9mLW1hdGNoIHBvaW50IGRvIHNvIG9ubHkgaWYgdGhlCitwYXR0ZXJuIGlzIG5vdCBhbmNob3JlZC4KKy5zcAorICAoKkNPTU1JVCkgICAgICAgb3ZlcmFsbCBmYWlsdXJlLCBubyBhZHZhbmNlIG9mIHN0YXJ0aW5nIHBvaW50CisgICgqUFJVTkUpICAgICAgICBhZHZhbmNlIHRvIG5leHQgc3RhcnRpbmcgY2hhcmFjdGVyCisgICgqUFJVTkU6TkFNRSkgICBlcXVpdmFsZW50IHRvICgqTUFSSzpOQU1FKSgqUFJVTkUpCisgICgqU0tJUCkgICAgICAgICBhZHZhbmNlIHRvIGN1cnJlbnQgbWF0Y2hpbmcgcG9zaXRpb24KKyAgKCpTS0lQOk5BTUUpICAgIGFkdmFuY2UgdG8gcG9zaXRpb24gY29ycmVzcG9uZGluZyB0byBhbiBlYXJsaWVyCisgICAgICAgICAgICAgICAgICAoKk1BUks6TkFNRSk7IGlmIG5vdCBmb3VuZCwgdGhlICgqU0tJUCkgaXMgaWdub3JlZAorICAoKlRIRU4pICAgICAgICAgbG9jYWwgZmFpbHVyZSwgYmFja3RyYWNrIHRvIG5leHQgYWx0ZXJuYXRpb24KKyAgKCpUSEVOOk5BTUUpICAgIGVxdWl2YWxlbnQgdG8gKCpNQVJLOk5BTUUpKCpUSEVOKQorLgorLgorLlNIICJDQUxMT1VUUyIKKy5ycworLnNwCisgICg/QykgICAgICAgICAgICBjYWxsb3V0IChhc3N1bWVkIG51bWJlciAwKQorICAoP0NuKSAgICAgICAgICAgY2FsbG91dCB3aXRoIG51bWVyaWNhbCBkYXRhIG4KKyAgKD9DInRleHQiKSAgICAgIGNhbGxvdXQgd2l0aCBzdHJpbmcgZGF0YQorLnNwCitUaGUgYWxsb3dlZCBzdHJpbmcgZGVsaW1pdGVycyBhcmUgYCAnICIgXiAlICMgJCAod2hpY2ggYXJlIHRoZSBzYW1lIGZvciB0aGUKK3N0YXJ0IGFuZCB0aGUgZW5kKSwgYW5kIHRoZSBzdGFydGluZyBkZWxpbWl0ZXIgeyBtYXRjaGVkIHdpdGggdGhlIGVuZGluZworZGVsaW1pdGVyIH0uIFRvIGVuY29kZSB0aGUgZW5kaW5nIGRlbGltaXRlciB3aXRoaW4gdGhlIHN0cmluZywgZG91YmxlIGl0LgorLgorLgorLlNIICJTRUUgQUxTTyIKKy5ycworLnNwCitcZkJwY3JlMnBhdHRlcm5cZlAoMyksIFxmQnBjcmUyYXBpXGZQKDMpLCBcZkJwY3JlMmNhbGxvdXRcZlAoMyksCitcZkJwY3JlMm1hdGNoaW5nXGZQKDMpLCBcZkJwY3JlMlxmUCgzKS4KKy4KKy4KKy5TSCBBVVRIT1IKKy5ycworLnNwCisubmYKK1BoaWxpcCBIYXplbAorVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorQ2FtYnJpZGdlLCBFbmdsYW5kLgorLmZpCisuCisuCisuU0ggUkVWSVNJT04KKy5ycworLnNwCisubmYKK0xhc3QgdXBkYXRlZDogMTYgT2N0b2JlciAyMDE1CitDb3B5cmlnaHQgKGMpIDE5OTctMjAxNSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKy5maQpkaWZmIC0tZ2l0IGEvZGlzdDIvZG9jL3BjcmUydGVzdC4xIGIvZGlzdDIvZG9jL3BjcmUydGVzdC4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4ZWVmOTMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJ0ZXN0LjEKQEAgLTAsMCArMSwxNjQ1IEBACisuVEggUENSRTJURVNUIDEgIjEyIERlY2VtYmVyIDIwMTUiICJQQ1JFIDEwLjIxIgorLlNIIE5BTUUKK3BjcmUydGVzdCAtIGEgcHJvZ3JhbSBmb3IgdGVzdGluZyBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucy4KKy5TSCBTWU5PUFNJUworLnJzCisuc3AKKy5CIHBjcmUydGVzdCAiW29wdGlvbnNdIFtpbnB1dCBmaWxlIFtvdXRwdXQgZmlsZV1dIgorLnNwCitcZkJwY3JlMnRlc3RcZlAgaXMgYSB0ZXN0IHByb2dyYW0gZm9yIHRoZSBQQ1JFMiByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyaWVzLAorYnV0IGl0IGNhbiBhbHNvIGJlIHVzZWQgZm9yIGV4cGVyaW1lbnRpbmcgd2l0aCByZWd1bGFyIGV4cHJlc3Npb25zLiBUaGlzCitkb2N1bWVudCBkZXNjcmliZXMgdGhlIGZlYXR1cmVzIG9mIHRoZSB0ZXN0IHByb2dyYW07IGZvciBkZXRhaWxzIG9mIHRoZSByZWd1bGFyCitleHByZXNzaW9ucyB0aGVtc2VsdmVzLCBzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJwYXR0ZXJuXGZQCisuXCIKK2RvY3VtZW50YXRpb24uIEZvciBkZXRhaWxzIG9mIHRoZSBQQ1JFMiBsaWJyYXJ5IGZ1bmN0aW9uIGNhbGxzIGFuZCB0aGVpcgorb3B0aW9ucywgc2VlIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyYXBpXGZQCisuXCIKK2RvY3VtZW50YXRpb24uCisuUAorVGhlIGlucHV0IGZvciBcZkJwY3JlMnRlc3RcZlAgaXMgYSBzZXF1ZW5jZSBvZiByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybnMgYW5kCitzdWJqZWN0IHN0cmluZ3MgdG8gYmUgbWF0Y2hlZC4gVGhlcmUgYXJlIGFsc28gY29tbWFuZCBsaW5lcyBmb3Igc2V0dGluZworZGVmYXVsdHMgYW5kIGNvbnRyb2xsaW5nIHNvbWUgc3BlY2lhbCBhY3Rpb25zLiBUaGUgb3V0cHV0IHNob3dzIHRoZSByZXN1bHQgb2YKK2VhY2ggbWF0Y2ggYXR0ZW1wdC4gTW9kaWZpZXJzIG9uIGV4dGVybmFsIG9yIGludGVybmFsIGNvbW1hbmQgbGluZXMsIHRoZQorcGF0dGVybnMsIGFuZCB0aGUgc3ViamVjdCBsaW5lcyBzcGVjaWZ5IFBDUkUyIGZ1bmN0aW9uIG9wdGlvbnMsIGNvbnRyb2wgaG93IHRoZQorc3ViamVjdCBpcyBwcm9jZXNzZWQsIGFuZCB3aGF0IG91dHB1dCBpcyBwcm9kdWNlZC4KKy5QCitBcyB0aGUgb3JpZ2luYWwgZmFpcmx5IHNpbXBsZSBQQ1JFIGxpYnJhcnkgZXZvbHZlZCwgaXQgYWNxdWlyZWQgbWFueSBkaWZmZXJlbnQKK2ZlYXR1cmVzLCBhbmQgYXMgYSByZXN1bHQsIHRoZSBvcmlnaW5hbCBcZkJwY3JldGVzdFxmUCBwcm9ncmFtIGVuZGVkIHVwIHdpdGggYQorbG90IG9mIG9wdGlvbnMgaW4gYSBtZXNzeSwgYXJjYW5lIHN5bnRheCwgZm9yIHRlc3RpbmcgYWxsIHRoZSBmZWF0dXJlcy4gVGhlCittb3ZlIHRvIHRoZSBuZXcgUENSRTIgQVBJIHByb3ZpZGVkIGFuIG9wcG9ydHVuaXR5IHRvIHJlLWltcGxlbWVudCB0aGUgdGVzdAorcHJvZ3JhbSBhcyBcZkJwY3JlMnRlc3RcZlAsIHdpdGggYSBjbGVhbmVyIG1vZGlmaWVyIHN5bnRheC4gTmV2ZXJ0aGVsZXNzLCB0aGVyZQorYXJlIHN0aWxsIG1hbnkgb2JzY3VyZSBtb2RpZmllcnMsIHNvbWUgb2Ygd2hpY2ggYXJlIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IKK3VzZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSB0ZXN0IHNjcmlwdCBhbmQgZGF0YSBmaWxlcyB0aGF0IGFyZSBkaXN0cmlidXRlZCBhcworcGFydCBvZiBQQ1JFMi4gQWxsIHRoZSBtb2RpZmllcnMgYXJlIGRvY3VtZW50ZWQgaGVyZSwgc29tZSB3aXRob3V0IG11Y2gKK2p1c3RpZmljYXRpb24sIGJ1dCBtYW55IG9mIHRoZW0gYXJlIHVubGlrZWx5IHRvIGJlIG9mIHVzZSBleGNlcHQgd2hlbiB0ZXN0aW5nCit0aGUgbGlicmFyaWVzLgorLgorLgorLlNIICJQQ1JFMidzIDgtQklULCAxNi1CSVQgQU5EIDMyLUJJVCBMSUJSQVJJRVMiCisucnMKKy5zcAorRGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBQQ1JFMiBsaWJyYXJ5IGNhbiBiZSBidWlsdCB0byBzdXBwb3J0IGNoYXJhY3Rlcgorc3RyaW5ncyB0aGF0IGFyZSBlbmNvZGVkIGluIDgtYml0LCAxNi1iaXQsIG9yIDMyLWJpdCBjb2RlIHVuaXRzLiBPbmUsIHR3bywgb3IKK2FsbCB0aHJlZSBvZiB0aGVzZSBsaWJyYXJpZXMgbWF5IGJlIHNpbXVsdGFuZW91c2x5IGluc3RhbGxlZC4gVGhlCitcZkJwY3JlMnRlc3RcZlAgcHJvZ3JhbSBjYW4gYmUgdXNlZCB0byB0ZXN0IGFsbCB0aGUgbGlicmFyaWVzLiBIb3dldmVyLCBpdHMgb3duCitpbnB1dCBhbmQgb3V0cHV0IGFyZSBhbHdheXMgaW4gOC1iaXQgZm9ybWF0LiBXaGVuIHRlc3RpbmcgdGhlIDE2LWJpdCBvciAzMi1iaXQKK2xpYnJhcmllcywgcGF0dGVybnMgYW5kIHN1YmplY3Qgc3RyaW5ncyBhcmUgY29udmVydGVkIHRvIDE2LSBvciAzMi1iaXQgZm9ybWF0CitiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZSBsaWJyYXJ5IGZ1bmN0aW9ucy4gUmVzdWx0cyBhcmUgY29udmVydGVkIGJhY2sgdG8KKzgtYml0IGNvZGUgdW5pdHMgZm9yIG91dHB1dC4KKy5QCitJbiB0aGUgcmVzdCBvZiB0aGlzIGRvY3VtZW50LCB0aGUgbmFtZXMgb2YgbGlicmFyeSBmdW5jdGlvbnMgYW5kIHN0cnVjdHVyZXMKK2FyZSBnaXZlbiBpbiBnZW5lcmljIGZvcm0sIGZvciBleGFtcGxlLCBcZkJwY3JlX2NvbXBpbGUoKVxmUC4gVGhlIGFjdHVhbAorbmFtZXMgdXNlZCBpbiB0aGUgbGlicmFyaWVzIGhhdmUgYSBzdWZmaXggXzgsIF8xNiwgb3IgXzMyLCBhcyBhcHByb3ByaWF0ZS4KKy4KKy4KKy5TSCAiSU5QVVQgRU5DT0RJTkciCisucnMKKy5zcAorSW5wdXQgdG8gXGZCcGNyZTJ0ZXN0XGZQIGlzIHByb2Nlc3NlZCBsaW5lIGJ5IGxpbmUsIGVpdGhlciBieSBjYWxsaW5nIHRoZSBDCitsaWJyYXJ5J3MgXGZCZmdldHMoKVxmUCBmdW5jdGlvbiwgb3IgdmlhIHRoZSBcZkJsaWJyZWFkbGluZVxmUCBsaWJyYXJ5IChzZWUKK2JlbG93KS4gVGhlIGlucHV0IGlzIHByb2Nlc3NlZCB1c2luZyB1c2luZyBDJ3Mgc3RyaW5nIGZ1bmN0aW9ucywgc28gbXVzdCBub3QKK2NvbnRhaW4gYmluYXJ5IHplcm9lcywgZXZlbiB0aG91Z2ggaW4gVW5peC1saWtlIGVudmlyb25tZW50cywgXGZCZmdldHMoKVxmUAordHJlYXRzIGFueSBieXRlcyBvdGhlciB0aGFuIG5ld2xpbmUgYXMgZGF0YSBjaGFyYWN0ZXJzLiBJbiBzb21lIFdpbmRvd3MKK2Vudmlyb25tZW50cyBjaGFyYWN0ZXIgMjYgKGhleCAxQSkgY2F1c2VzIGFuIGltbWVkaWF0ZSBlbmQgb2YgZmlsZSwgYW5kIG5vCitmdXJ0aGVyIGRhdGEgaXMgcmVhZC4KKy5QCitGb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgdGhlcmVmb3JlLCBpdCBpcyBzYWZlc3QgdG8gYXZvaWQgbm9uLXByaW50aW5nCitjaGFyYWN0ZXJzIGluIFxmQnBjcmUydGVzdFxmUCBpbnB1dCBmaWxlcy4gVGhlcmUgaXMgYSBmYWNpbGl0eSBmb3Igc3BlY2lmeWluZyBhCitwYXR0ZXJuJ3MgY2hhcmFjdGVycyBhcyBoZXhhZGVjaW1hbCBwYWlycywgdGh1cyBtYWtpbmcgaXQgcG9zc2libGUgdG8gaW5jbHVkZQorYmluYXJ5IHplcm9lcyBpbiBhIHBhdHRlcm4gZm9yIHRlc3RpbmcgcHVycG9zZXMuIFN1YmplY3QgbGluZXMgYXJlIHByb2Nlc3NlZAorZm9yIGJhY2tzbGFzaCBlc2NhcGVzLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBpbmNsdWRlIGFueSBkYXRhIHZhbHVlLgorLgorLgorLlNIICJDT01NQU5EIExJTkUgT1BUSU9OUyIKKy5ycworLlRQIDEwCitcZkItOFxmUAorSWYgdGhlIDgtYml0IGxpYnJhcnkgaGFzIGJlZW4gYnVpbHQsIHRoaXMgb3B0aW9uIGNhdXNlcyBpdCB0byBiZSB1c2VkICh0aGlzIGlzCit0aGUgZGVmYXVsdCkuIElmIHRoZSA4LWJpdCBsaWJyYXJ5IGhhcyBub3QgYmVlbiBidWlsdCwgdGhpcyBvcHRpb24gY2F1c2VzIGFuCitlcnJvci4KKy5UUCAxMAorXGZCLTE2XGZQCitJZiB0aGUgMTYtYml0IGxpYnJhcnkgaGFzIGJlZW4gYnVpbHQsIHRoaXMgb3B0aW9uIGNhdXNlcyBpdCB0byBiZSB1c2VkLiBJZiBvbmx5Cit0aGUgMTYtYml0IGxpYnJhcnkgaGFzIGJlZW4gYnVpbHQsIHRoaXMgaXMgdGhlIGRlZmF1bHQuIElmIHRoZSAxNi1iaXQgbGlicmFyeQoraGFzIG5vdCBiZWVuIGJ1aWx0LCB0aGlzIG9wdGlvbiBjYXVzZXMgYW4gZXJyb3IuCisuVFAgMTAKK1xmQi0zMlxmUAorSWYgdGhlIDMyLWJpdCBsaWJyYXJ5IGhhcyBiZWVuIGJ1aWx0LCB0aGlzIG9wdGlvbiBjYXVzZXMgaXQgdG8gYmUgdXNlZC4gSWYgb25seQordGhlIDMyLWJpdCBsaWJyYXJ5IGhhcyBiZWVuIGJ1aWx0LCB0aGlzIGlzIHRoZSBkZWZhdWx0LiBJZiB0aGUgMzItYml0IGxpYnJhcnkKK2hhcyBub3QgYmVlbiBidWlsdCwgdGhpcyBvcHRpb24gY2F1c2VzIGFuIGVycm9yLgorLlRQIDEwCitcZkItYlxmUAorQmVoYXZlIGFzIGlmIGVhY2ggcGF0dGVybiBoYXMgdGhlIFxmQi9mdWxsYmluY29kZVxmUCBtb2RpZmllcjsgdGhlIGZ1bGwKK2ludGVybmFsIGJpbmFyeSBmb3JtIG9mIHRoZSBwYXR0ZXJuIGlzIG91dHB1dCBhZnRlciBjb21waWxhdGlvbi4KKy5UUCAxMAorXGZCLUNcZlAKK091dHB1dCB0aGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIFBDUkUyIGxpYnJhcnksIGFuZCBhbGwgYXZhaWxhYmxlIGluZm9ybWF0aW9uCithYm91dCB0aGUgb3B0aW9uYWwgZmVhdHVyZXMgdGhhdCBhcmUgaW5jbHVkZWQsIGFuZCB0aGVuIGV4aXQgd2l0aCB6ZXJvIGV4aXQKK2NvZGUuIEFsbCBvdGhlciBvcHRpb25zIGFyZSBpZ25vcmVkLgorLlRQIDEwCitcZkItQ1xmUCBcZklvcHRpb25cZlAKK091dHB1dCBpbmZvcm1hdGlvbiBhYm91dCBhIHNwZWNpZmljIGJ1aWxkLXRpbWUgb3B0aW9uLCB0aGVuIGV4aXQuIFRoaXMKK2Z1bmN0aW9uYWxpdHkgaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBzY3JpcHRzIHN1Y2ggYXMgXGZCUnVuVGVzdFxmUC4gVGhlCitmb2xsb3dpbmcgb3B0aW9ucyBvdXRwdXQgdGhlIHZhbHVlIGFuZCBzZXQgdGhlIGV4aXQgY29kZSBhcyBpbmRpY2F0ZWQ6Cisuc3AKKyAgZWJjZGljLW5sICB0aGUgY29kZSBmb3IgTEYgKD0gTkwpIGluIGFuIEVCQ0RJQyBlbnZpcm9ubWVudDoKKyAgICAgICAgICAgICAgIDB4MTUgb3IgMHgyNQorICAgICAgICAgICAgICAgMCBpZiB1c2VkIGluIGFuIEFTQ0lJIGVudmlyb25tZW50CisgICAgICAgICAgICAgICBleGl0IGNvZGUgaXMgYWx3YXlzIDAKKyAgbGlua3NpemUgICB0aGUgY29uZmlndXJlZCBpbnRlcm5hbCBsaW5rIHNpemUgKDIsIDMsIG9yIDQpCisgICAgICAgICAgICAgICBleGl0IGNvZGUgaXMgc2V0IHRvIHRoZSBsaW5rIHNpemUKKyAgbmV3bGluZSAgICB0aGUgZGVmYXVsdCBuZXdsaW5lIHNldHRpbmc6CisgICAgICAgICAgICAgICBDUiwgTEYsIENSTEYsIEFOWUNSTEYsIG9yIEFOWQorICAgICAgICAgICAgICAgZXhpdCBjb2RlIGlzIGFsd2F5cyAwCisgIGJzciAgICAgICAgdGhlIGRlZmF1bHQgc2V0dGluZyBmb3Igd2hhdCBcZVIgbWF0Y2hlczoKKyAgICAgICAgICAgICAgIEFOWUNSTEYgb3IgQU5ZCisgICAgICAgICAgICAgICBleGl0IGNvZGUgaXMgYWx3YXlzIDAKKy5zcAorVGhlIGZvbGxvd2luZyBvcHRpb25zIG91dHB1dCAxIGZvciB0cnVlIG9yIDAgZm9yIGZhbHNlLCBhbmQgc2V0IHRoZSBleGl0IGNvZGUKK3RvIHRoZSBzYW1lIHZhbHVlOgorLnNwCisgIGJhY2tzbGFzaC1DICBcZUMgaXMgc3VwcG9ydGVkIChub3QgbG9ja2VkIG91dCkKKyAgZWJjZGljICAgICAgIGNvbXBpbGVkIGZvciBhbiBFQkNESUMgZW52aXJvbm1lbnQKKyAgaml0ICAgICAgICAgIGp1c3QtaW4tdGltZSBzdXBwb3J0IGlzIGF2YWlsYWJsZQorICBwY3JlMi0xNiAgICAgdGhlIDE2LWJpdCBsaWJyYXJ5IHdhcyBidWlsdAorICBwY3JlMi0zMiAgICAgdGhlIDMyLWJpdCBsaWJyYXJ5IHdhcyBidWlsdAorICBwY3JlMi04ICAgICAgdGhlIDgtYml0IGxpYnJhcnkgd2FzIGJ1aWx0CisgIHVuaWNvZGUgICAgICBVbmljb2RlIHN1cHBvcnQgaXMgYXZhaWxhYmxlCisuc3AKK0lmIGFuIHVua25vd24gb3B0aW9uIGlzIGdpdmVuLCBhbiBlcnJvciBtZXNzYWdlIGlzIG91dHB1dDsgdGhlIGV4aXQgY29kZSBpcyAwLgorLlRQIDEwCitcZkItZFxmUAorQmVoYXZlIGFzIGlmIGVhY2ggcGF0dGVybiBoYXMgdGhlIFxmQmRlYnVnXGZQIG1vZGlmaWVyOyB0aGUgaW50ZXJuYWwKK2Zvcm0gYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlZCBwYXR0ZXJuIGlzIG91dHB1dCBhZnRlciBjb21waWxhdGlvbjsKK1xmQi1kXGZQIGlzIGVxdWl2YWxlbnQgdG8gXGZCLWIgLWlcZlAuCisuVFAgMTAKK1xmQi1kZmFcZlAKK0JlaGF2ZSBhcyBpZiBlYWNoIHN1YmplY3QgbGluZSBoYXMgdGhlIFxmQmRmYVxmUCBtb2RpZmllcjsgbWF0Y2hpbmcgaXMgZG9uZQordXNpbmcgdGhlIFxmQnBjcmUyX2RmYV9tYXRjaCgpXGZQIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKK1xmQnBjcmUyX21hdGNoKClcZlAuCisuVFAgMTAKK1xmQi1oZWxwXGZQCitPdXRwdXQgYSBicmllZiBzdW1tYXJ5IHRoZXNlIG9wdGlvbnMgYW5kIHRoZW4gZXhpdC4KKy5UUCAxMAorXGZCLWlcZlAKK0JlaGF2ZSBhcyBpZiBlYWNoIHBhdHRlcm4gaGFzIHRoZSBcZkIvaW5mb1xmUCBtb2RpZmllcjsgaW5mb3JtYXRpb24gYWJvdXQgdGhlCitjb21waWxlZCBwYXR0ZXJuIGlzIGdpdmVuIGFmdGVyIGNvbXBpbGF0aW9uLgorLlRQIDEwCitcZkItaml0XGZQCitCZWhhdmUgYXMgaWYgZWFjaCBwYXR0ZXJuIGxpbmUgaGFzIHRoZSBcZkJqaXRcZlAgbW9kaWZpZXI7IGFmdGVyIHN1Y2Nlc3NmdWwKK2NvbXBpbGF0aW9uLCBlYWNoIHBhdHRlcm4gaXMgcGFzc2VkIHRvIHRoZSBqdXN0LWluLXRpbWUgY29tcGlsZXIsIGlmIGF2YWlsYWJsZS4KKy5UUCAxMAorXGZCLXBhdHRlcm5cZkIgXGZJbW9kaWZpZXItbGlzdFxmUAorQmVoYXZlIGFzIGlmIGVhY2ggcGF0dGVybiBsaW5lIGNvbnRhaW5zIHRoZSBnaXZlbiBtb2RpZmllcnMuCisuVFAgMTAKK1xmQi1xXGZQCitEbyBub3Qgb3V0cHV0IHRoZSB2ZXJzaW9uIG51bWJlciBvZiBcZkJwY3JlMnRlc3RcZlAgYXQgdGhlIHN0YXJ0IG9mIGV4ZWN1dGlvbi4KKy5UUCAxMAorXGZCLVNcZlAgXGZJc2l6ZVxmUAorT24gVW5peC1saWtlIHN5c3RlbXMsIHNldCB0aGUgc2l6ZSBvZiB0aGUgcnVuLXRpbWUgc3RhY2sgdG8gXGZJc2l6ZVxmUAorbWVnYWJ5dGVzLgorLlRQIDEwCitcZkItc3ViamVjdFxmUCBcZkltb2RpZmllci1saXN0XGZQCitCZWhhdmUgYXMgaWYgZWFjaCBzdWJqZWN0IGxpbmUgY29udGFpbnMgdGhlIGdpdmVuIG1vZGlmaWVycy4KKy5UUCAxMAorXGZCLXRcZlAKK1J1biBlYWNoIGNvbXBpbGUgYW5kIG1hdGNoIG1hbnkgdGltZXMgd2l0aCBhIHRpbWVyLCBhbmQgb3V0cHV0IHRoZSByZXN1bHRpbmcKK3RpbWVzIHBlciBjb21waWxlIG9yIG1hdGNoLiBXaGVuIEpJVCBpcyB1c2VkLCBzZXBhcmF0ZSB0aW1lcyBhcmUgZ2l2ZW4gZm9yIHRoZQoraW5pdGlhbCBjb21waWxlIGFuZCB0aGUgSklUIGNvbXBpbGUuIFlvdSBjYW4gY29udHJvbCB0aGUgbnVtYmVyIG9mIGl0ZXJhdGlvbnMKK3RoYXQgYXJlIHVzZWQgZm9yIHRpbWluZyBieSBmb2xsb3dpbmcgXGZCLXRcZlAgd2l0aCBhIG51bWJlciAoYXMgYSBzZXBhcmF0ZQoraXRlbSBvbiB0aGUgY29tbWFuZCBsaW5lKS4gRm9yIGV4YW1wbGUsICItdCAxMDAwIiBpdGVyYXRlcyAxMDAwIHRpbWVzLiBUaGUKK2RlZmF1bHQgaXMgdG8gaXRlcmF0ZSA1MDAsMDAwIHRpbWVzLgorLlRQIDEwCitcZkItdG1cZlAKK1RoaXMgaXMgbGlrZSBcZkItdFxmUCBleGNlcHQgdGhhdCBpdCB0aW1lcyBvbmx5IHRoZSBtYXRjaGluZyBwaGFzZSwgbm90IHRoZQorY29tcGlsZSBwaGFzZS4KKy5UUCAxMAorXGZCLVRcZlAgXGZCLVRNXGZQCitUaGVzZSBiZWhhdmUgbGlrZSBcZkItdFxmUCBhbmQgXGZCLXRtXGZQLCBidXQgaW4gYWRkaXRpb24sIGF0IHRoZSBlbmQgb2YgYSBydW4sCit0aGUgdG90YWwgdGltZXMgZm9yIGFsbCBjb21waWxlcyBhbmQgbWF0Y2hlcyBhcmUgb3V0cHV0LgorLlRQIDEwCitcZkItdmVyc2lvblxmUAorT3V0cHV0IHRoZSBQQ1JFMiB2ZXJzaW9uIG51bWJlciBhbmQgdGhlbiBleGl0LgorLgorLgorLlNIICJERVNDUklQVElPTiIKKy5ycworLnNwCitJZiBcZkJwY3JlMnRlc3RcZlAgaXMgZ2l2ZW4gdHdvIGZpbGVuYW1lIGFyZ3VtZW50cywgaXQgcmVhZHMgZnJvbSB0aGUgZmlyc3QgYW5kCit3cml0ZXMgdG8gdGhlIHNlY29uZC4gSWYgdGhlIGZpcnN0IG5hbWUgaXMgIi0iLCBpbnB1dCBpcyB0YWtlbiBmcm9tIHRoZQorc3RhbmRhcmQgaW5wdXQuIElmIFxmQnBjcmUydGVzdFxmUCBpcyBnaXZlbiBvbmx5IG9uZSBhcmd1bWVudCwgaXQgcmVhZHMgZnJvbQordGhhdCBmaWxlIGFuZCB3cml0ZXMgdG8gc3Rkb3V0LiBPdGhlcndpc2UsIGl0IHJlYWRzIGZyb20gc3RkaW4gYW5kIHdyaXRlcyB0bworc3Rkb3V0LgorLlAKK1doZW4gXGZCcGNyZTJ0ZXN0XGZQIGlzIGJ1aWx0LCBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGNhbiBzcGVjaWZ5IHRoYXQgaXQKK3Nob3VsZCBiZSBsaW5rZWQgd2l0aCB0aGUgXGZCbGlicmVhZGxpbmVcZlAgb3IgXGZCbGliZWRpdFxmUCBsaWJyYXJ5LiBXaGVuIHRoaXMKK2lzIGRvbmUsIGlmIHRoZSBpbnB1dCBpcyBmcm9tIGEgdGVybWluYWwsIGl0IGlzIHJlYWQgdXNpbmcgdGhlIFxmQnJlYWRsaW5lKClcZlAKK2Z1bmN0aW9uLiBUaGlzIHByb3ZpZGVzIGxpbmUtZWRpdGluZyBhbmQgaGlzdG9yeSBmYWNpbGl0aWVzLiBUaGUgb3V0cHV0IGZyb20KK3RoZSBcZkItaGVscFxmUCBvcHRpb24gc3RhdGVzIHdoZXRoZXIgb3Igbm90IFxmQnJlYWRsaW5lKClcZlAgd2lsbCBiZSB1c2VkLgorLlAKK1RoZSBwcm9ncmFtIGhhbmRsZXMgYW55IG51bWJlciBvZiB0ZXN0cywgZWFjaCBvZiB3aGljaCBjb25zaXN0cyBvZiBhIHNldCBvZgoraW5wdXQgbGluZXMuIEVhY2ggc2V0IHN0YXJ0cyB3aXRoIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4sIGZvbGxvd2VkIGJ5IGFueQorbnVtYmVyIG9mIHN1YmplY3QgbGluZXMgdG8gYmUgbWF0Y2hlZCBhZ2FpbnN0IHRoYXQgcGF0dGVybi4gSW4gYmV0d2VlbiBzZXRzIG9mCit0ZXN0IGRhdGEsIGNvbW1hbmQgbGluZXMgdGhhdCBiZWdpbiB3aXRoICMgbWF5IGFwcGVhci4gVGhpcyBmaWxlIGZvcm1hdCwgd2l0aAorc29tZSByZXN0cmljdGlvbnMsIGNhbiBhbHNvIGJlIHByb2Nlc3NlZCBieSB0aGUgXGZCcGVybHRlc3Quc2hcZlAgc2NyaXB0IHRoYXQKK2lzIGRpc3RyaWJ1dGVkIHdpdGggUENSRTIgYXMgYSBtZWFucyBvZiBjaGVja2luZyB0aGF0IHRoZSBiZWhhdmlvdXIgb2YgUENSRTIKK2FuZCBQZXJsIGlzIHRoZSBzYW1lLgorLlAKK1doZW4gdGhlIGlucHV0IGlzIGEgdGVybWluYWwsIFxmQnBjcmUydGVzdFxmUCBwcm9tcHRzIGZvciBlYWNoIGxpbmUgb2YgaW5wdXQsCit1c2luZyAicmU+IiB0byBwcm9tcHQgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJucywgYW5kICJkYXRhPiIgdG8gcHJvbXB0Citmb3Igc3ViamVjdCBsaW5lcy4gQ29tbWFuZCBsaW5lcyBzdGFydGluZyB3aXRoICMgY2FuIGJlIGVudGVyZWQgb25seSBpbgorcmVzcG9uc2UgdG8gdGhlICJyZT4iIHByb21wdC4KKy5QCitFYWNoIHN1YmplY3QgbGluZSBpcyBtYXRjaGVkIHNlcGFyYXRlbHkgYW5kIGluZGVwZW5kZW50bHkuIElmIHlvdSB3YW50IHRvIGRvCittdWx0aS1saW5lIG1hdGNoZXMsIHlvdSBoYXZlIHRvIHVzZSB0aGUgXGVuIGVzY2FwZSBzZXF1ZW5jZSAob3IgXGVyIG9yIFxlclxlbiwKK2V0Yy4sIGRlcGVuZGluZyBvbiB0aGUgbmV3bGluZSBzZXR0aW5nKSBpbiBhIHNpbmdsZSBsaW5lIG9mIGlucHV0IHRvIGVuY29kZSB0aGUKK25ld2xpbmUgc2VxdWVuY2VzLiBUaGVyZSBpcyBubyBsaW1pdCBvbiB0aGUgbGVuZ3RoIG9mIHN1YmplY3QgbGluZXM7IHRoZSBpbnB1dAorYnVmZmVyIGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgaWYgaXQgaXMgdG9vIHNtYWxsLiBUaGVyZSBhcmUgcmVwbGljYXRpb24KK2ZlYXR1cmVzIHRoYXQgbWFrZXMgaXQgcG9zc2libGUgdG8gZ2VuZXJhdGUgbG9uZyByZXBldGl0aXZlIHBhdHRlcm4gb3Igc3ViamVjdAorbGluZXMgd2l0aG91dCBoYXZpbmcgdG8gc3VwcGx5IHRoZW0gZXhwbGljaXRseS4KKy5QCitBbiBlbXB0eSBsaW5lIG9yIHRoZSBlbmQgb2YgdGhlIGZpbGUgc2lnbmFscyB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IGxpbmVzIGZvciBhCit0ZXN0LCBhdCB3aGljaCBwb2ludCBhIG5ldyBwYXR0ZXJuIG9yIGNvbW1hbmQgbGluZSBpcyBleHBlY3RlZCBpZiB0aGVyZSBpcworc3RpbGwgaW5wdXQgdG8gYmUgcmVhZC4KKy4KKy4KKy5TSCAiQ09NTUFORCBMSU5FUyIKKy5ycworLnNwCitJbiBiZXR3ZWVuIHNldHMgb2YgdGVzdCBkYXRhLCBhIGxpbmUgdGhhdCBiZWdpbnMgd2l0aCAjIGlzIGludGVycHJldGVkIGFzIGEKK2NvbW1hbmQgbGluZS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyBmb2xsb3dlZCBieSB3aGl0ZSBzcGFjZSBvciBhbgorZXhjbGFtYXRpb24gbWFyaywgdGhlIGxpbmUgaXMgdHJlYXRlZCBhcyBhIGNvbW1lbnQsIGFuZCBpZ25vcmVkLiBPdGhlcndpc2UsIHRoZQorZm9sbG93aW5nIGNvbW1hbmRzIGFyZSByZWNvZ25pemVkOgorLnNwCisgICNmb3JiaWRfdXRmCisuc3AKK1N1YnNlcXVlbnQgcGF0dGVybnMgYXV0b21hdGljYWxseSBoYXZlIHRoZSBQQ1JFMl9ORVZFUl9VVEYgYW5kIFBDUkUyX05FVkVSX1VDUAorb3B0aW9ucyBzZXQsIHdoaWNoIGxvY2tzIG91dCB0aGUgdXNlIG9mIHRoZSBQQ1JFMl9VVEYgYW5kIFBDUkUyX1VDUCBvcHRpb25zIGFuZAordGhlIHVzZSBvZiAoKlVURikgYW5kICgqVUNQKSBhdCB0aGUgc3RhcnQgb2YgcGF0dGVybnMuIFRoaXMgY29tbWFuZCBhbHNvIGZvcmNlcworYW4gZXJyb3IgaWYgYSBzdWJzZXF1ZW50IHBhdHRlcm4gY29udGFpbnMgYW55IG9jY3VycmVuY2VzIG9mIFxlUCwgXGVwLCBvciBcZVgsCit3aGljaCBhcmUgc3RpbGwgc3VwcG9ydGVkIHdoZW4gUENSRTJfVVRGIGlzIG5vdCBzZXQsIGJ1dCB3aGljaCByZXF1aXJlIFVuaWNvZGUKK3Byb3BlcnR5IHN1cHBvcnQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkuCisuUAorVGhpcyBpcyBhIHRyaWdnZXIgZ3VhcmQgdGhhdCBpcyB1c2VkIGluIHRlc3QgZmlsZXMgdG8gZW5zdXJlIHRoYXQgVVRGIG9yCitVbmljb2RlIHByb3BlcnR5IHRlc3RzIGFyZSBub3QgYWNjaWRlbnRhbGx5IGFkZGVkIHRvIGZpbGVzIHRoYXQgYXJlIHVzZWQgd2hlbgorVW5pY29kZSBzdXBwb3J0IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeS4gU2V0dGluZyBQQ1JFMl9ORVZFUl9VVEYgYW5kCitQQ1JFMl9ORVZFUl9VQ1AgYXMgYSBkZWZhdWx0IGNhbiBhbHNvIGJlIG9idGFpbmVkIGJ5IHRoZSB1c2Ugb2YgXGZCI3BhdHRlcm5cZlA7Cit0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IFxmQiNmb3JiaWRfdXRmXGZQIGNhbm5vdCBiZSB1bnNldCwgYW5kIHRoZSBhdXRvbWF0aWMKK29wdGlvbnMgYXJlIG5vdCBkaXNwbGF5ZWQgaW4gcGF0dGVybiBpbmZvcm1hdGlvbiwgdG8gYXZvaWQgY2x1dHRlcmluZyB1cCB0ZXN0CitvdXRwdXQuCisuc3AKKyAgI2xvYWQgPGZpbGVuYW1lPgorLnNwCitUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBsb2FkIGEgc2V0IG9mIHByZWNvbXBpbGVkIHBhdHRlcm5zIGZyb20gYSBmaWxlLCBhcworZGVzY3JpYmVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJTYXZpbmcgYW5kIHJlc3RvcmluZyBjb21waWxlZCBwYXR0ZXJucyIKKy5cIiBIVE1MIDxhIGhyZWY9IiNzYXZlcmVzdG9yZSI+CisuXCIgPC9hPgorYmVsb3cuCisuXCIKKy5zcAorICAjbmV3bGluZV9kZWZhdWx0IFs8bmV3bGluZS1saXN0Pl0KKy5zcAorV2hlbiBQQ1JFMiBpcyBidWlsdCwgYSBkZWZhdWx0IG5ld2xpbmUgY29udmVudGlvbiBjYW4gYmUgc3BlY2lmaWVkLiBUaGlzCitkZXRlcm1pbmVzIHdoaWNoIGNoYXJhY3RlcnMgYW5kL29yIGNoYXJhY3RlciBwYWlycyBhcmUgcmVjb2duaXplZCBhcyBpbmRpY2F0aW5nCithIG5ld2xpbmUgaW4gYSBwYXR0ZXJuIG9yIHN1YmplY3Qgc3RyaW5nLiBUaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiB3aGVuIGEKK3BhdHRlcm4gaXMgY29tcGlsZWQuIFRoZSBzdGFuZGFyZCB0ZXN0IGZpbGVzIGNvbnRhaW4gdGVzdHMgb2YgdmFyaW91cyBuZXdsaW5lCitjb252ZW50aW9ucywgYnV0IHRoZSBtYWpvcml0eSBvZiB0aGUgdGVzdHMgZXhwZWN0IGEgc2luZ2xlIGxpbmVmZWVkIHRvIGJlCityZWNvZ25pemVkIGFzIGEgbmV3bGluZSBieSBkZWZhdWx0LiBXaXRob3V0IHNwZWNpYWwgYWN0aW9uIHRoZSB0ZXN0cyB3b3VsZCBmYWlsCit3aGVuIFBDUkUyIGlzIGNvbXBpbGVkIHdpdGggZWl0aGVyIENSIG9yIENSTEYgYXMgdGhlIGRlZmF1bHQgbmV3bGluZS4KKy5QCitUaGUgI25ld2xpbmVfZGVmYXVsdCBjb21tYW5kIHNwZWNpZmllcyBhIGxpc3Qgb2YgbmV3bGluZSB0eXBlcyB0aGF0IGFyZQorYWNjZXB0YWJsZSBhcyB0aGUgZGVmYXVsdC4gVGhlIHR5cGVzIG11c3QgYmUgb25lIG9mIENSLCBMRiwgQ1JMRiwgQU5ZQ1JMRiwgb3IKK0FOWSAoaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSksIGZvciBleGFtcGxlOgorLnNwCisgICNuZXdsaW5lX2RlZmF1bHQgTEYgQW55IGFueUNSTEYKKy5zcAorSWYgdGhlIGRlZmF1bHQgbmV3bGluZSBpcyBpbiB0aGUgbGlzdCwgdGhpcyBjb21tYW5kIGhhcyBubyBlZmZlY3QuIE90aGVyd2lzZSwKK2V4Y2VwdCB3aGVuIHRlc3RpbmcgdGhlIFBPU0lYIEFQSSwgYSBcZkJuZXdsaW5lXGZQIG1vZGlmaWVyIHRoYXQgc3BlY2lmaWVzIHRoZQorZmlyc3QgbmV3bGluZSBjb252ZW50aW9uIGluIHRoZSBsaXN0IChMRiBpbiB0aGUgYWJvdmUgZXhhbXBsZSkgaXMgYWRkZWQgdG8gYW55CitwYXR0ZXJuIHRoYXQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgXGZCbmV3bGluZVxmUCBtb2RpZmllci4gSWYgdGhlIG5ld2xpbmUKK2xpc3QgaXMgZW1wdHksIHRoZSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYuIFRoaXMgY29tbWFuZCBpcyBwcmVzZW50IGluIGEgbnVtYmVyCitvZiB0aGUgc3RhbmRhcmQgdGVzdCBpbnB1dCBmaWxlcy4KKy5QCitXaGVuIHRoZSBQT1NJWCBBUEkgaXMgYmVpbmcgdGVzdGVkIHRoZXJlIGlzIG5vIHdheSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdAorbmV3bGluZSBjb252ZW50aW9uLCB0aG91Z2ggaXQgaXMgcG9zc2libGUgdG8gc2V0IHRoZSBuZXdsaW5lIGNvbnZlbnRpb24gZnJvbQord2l0aGluIHRoZSBwYXR0ZXJuLiBBIHdhcm5pbmcgaXMgZ2l2ZW4gaWYgdGhlIFxmQnBvc2l4XGZQIG1vZGlmaWVyIGlzIHVzZWQgd2hlbgorXGZCI25ld2xpbmVfZGVmYXVsdFxmUCB3b3VsZCBzZXQgYSBkZWZhdWx0IGZvciB0aGUgbm9uLVBPU0lYIEFQSS4KKy5zcAorICAjcGF0dGVybiA8bW9kaWZpZXItbGlzdD4KKy5zcAorVGhpcyBjb21tYW5kIHNldHMgYSBkZWZhdWx0IG1vZGlmaWVyIGxpc3QgdGhhdCBhcHBsaWVzIHRvIGFsbCBzdWJzZXF1ZW50CitwYXR0ZXJucy4gTW9kaWZpZXJzIG9uIGEgcGF0dGVybiBjYW4gY2hhbmdlIHRoZXNlIHNldHRpbmdzLgorLnNwCisgICNwZXJsdGVzdAorLnNwCitUaGUgYXBwZWFyYW5jZSBvZiB0aGlzIGxpbmUgY2F1c2VzIGFsbCBzdWJzZXF1ZW50IG1vZGlmaWVyIHNldHRpbmdzIHRvIGJlCitjaGVja2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIFxmQnBlcmx0ZXN0LnNoXGZQIHNjcmlwdCwgd2hpY2ggaXMgdXNlZCB0bworY29uZmlybSB0aGF0IFBlcmwgZ2l2ZXMgdGhlIHNhbWUgcmVzdWx0cyBhcyBQQ1JFMi4gQWxzbywgYXBhcnQgZnJvbSBjb21tZW50CitsaW5lcywgbm9uZSBvZiB0aGUgb3RoZXIgY29tbWFuZCBsaW5lcyBhcmUgcGVybWl0dGVkLCBiZWNhdXNlIHRoZXkgYW5kIG1hbnkKK29mIHRoZSBtb2RpZmllcnMgYXJlIHNwZWNpZmljIHRvIFxmQnBjcmUydGVzdFxmUCwgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBpbgordGVzdCBmaWxlcyB0aGF0IGFyZSBhbHNvIHByb2Nlc3NlZCBieSBcZkJwZXJsdGVzdC5zaFxmUC4gVGhlIFxmQiNwZXJsdGVzdFxmUAorY29tbWFuZCBoZWxwcyBkZXRlY3QgdGVzdHMgdGhhdCBhcmUgYWNjaWRlbnRhbGx5IHB1dCBpbiB0aGUgd3JvbmcgZmlsZS4KKy5zcAorICAjcG9wIFs8bW9kaWZpZXJzPl0KKy5zcAorVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgc3RhY2sgb2YgY29tcGlsZWQgcGF0dGVybnMsIGFzIGRlc2NyaWJlZAoraW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIlNhdmluZyBhbmQgcmVzdG9yaW5nIGNvbXBpbGVkIHBhdHRlcm5zIgorLlwiIEhUTUwgPGEgaHJlZj0iI3NhdmVyZXN0b3JlIj4KKy5cIiA8L2E+CitiZWxvdy4KKy5cIgorLnNwCisgICNzYXZlIDxmaWxlbmFtZT4KKy5zcAorVGhpcyBjb21tYW5kIGlzIHVzZWQgdG8gc2F2ZSBhIHNldCBvZiBjb21waWxlZCBwYXR0ZXJucyB0byBhIGZpbGUsIGFzIGRlc2NyaWJlZAoraW4gdGhlIHNlY3Rpb24gZW50aXRsZWQgIlNhdmluZyBhbmQgcmVzdG9yaW5nIGNvbXBpbGVkIHBhdHRlcm5zIgorLlwiIEhUTUwgPGEgaHJlZj0iI3NhdmVyZXN0b3JlIj4KKy5cIiA8L2E+CitiZWxvdy4KKy5cIgorLnNwCisgICNzdWJqZWN0IDxtb2RpZmllci1saXN0PgorLnNwCitUaGlzIGNvbW1hbmQgc2V0cyBhIGRlZmF1bHQgbW9kaWZpZXIgbGlzdCB0aGF0IGFwcGxpZXMgdG8gYWxsIHN1YnNlcXVlbnQKK3N1YmplY3QgbGluZXMuIE1vZGlmaWVycyBvbiBhIHN1YmplY3QgbGluZSBjYW4gY2hhbmdlIHRoZXNlIHNldHRpbmdzLgorLgorLgorLlNIICJNT0RJRklFUiBTWU5UQVgiCisucnMKKy5zcAorTW9kaWZpZXIgbGlzdHMgYXJlIHVzZWQgd2l0aCBib3RoIHBhdHRlcm4gYW5kIHN1YmplY3QgbGluZXMuIEl0ZW1zIGluIGEgbGlzdAorYXJlIHNlcGFyYXRlZCBieSBjb21tYXMgZm9sbG93ZWQgYnkgb3B0aW9uYWwgd2hpdGUgc3BhY2UuIFRyYWlsaW5nIHdoaXRlc3BhY2UKK2luIGEgbW9kaWZpZXIgbGlzdCBpcyBpZ25vcmVkLiBTb21lIG1vZGlmaWVycyBtYXkgYmUgZ2l2ZW4gZm9yIGJvdGggcGF0dGVybnMKK2FuZCBzdWJqZWN0IGxpbmVzLCB3aGVyZWFzIG90aGVycyBhcmUgdmFsaWQgb25seSBmb3Igb25lIG9yIHRoZSBvdGhlci4gRWFjaAorbW9kaWZpZXIgaGFzIGEgbG9uZyBuYW1lLCBmb3IgZXhhbXBsZSAiYW5jaG9yZWQiLCBhbmQgc29tZSBvZiB0aGVtIG11c3QgYmUKK2ZvbGxvd2VkIGJ5IGFuIGVxdWFscyBzaWduIGFuZCBhIHZhbHVlLCBmb3IgZXhhbXBsZSwgIm9mZnNldD0xMiIuIFZhbHVlcyBjYW5ub3QKK2NvbnRhaW4gY29tbWEgY2hhcmFjdGVycywgYnV0IG1heSBjb250YWluIHNwYWNlcy4gTW9kaWZpZXJzIHRoYXQgZG8gbm90IHRha2UKK3ZhbHVlcyBtYXkgYmUgcHJlY2VkZWQgYnkgYSBtaW51cyBzaWduIHRvIHR1cm4gb2ZmIGEgcHJldmlvdXMgc2V0dGluZy4KKy5QCitBIGZldyBvZiB0aGUgbW9yZSBjb21tb24gbW9kaWZpZXJzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBhcyBzaW5nbGUgbGV0dGVycywgZm9yCitleGFtcGxlICJpIiBmb3IgImNhc2VsZXNzIi4gSW4gZG9jdW1lbnRhdGlvbiwgZm9sbG93aW5nIHRoZSBQZXJsIGNvbnZlbnRpb24sCit0aGVzZSBhcmUgd3JpdHRlbiB3aXRoIGEgc2xhc2ggKCJ0aGUgL2kgbW9kaWZpZXIiKSBmb3IgY2xhcml0eS4gQWJicmV2aWF0ZWQKK21vZGlmaWVycyBtdXN0IGFsbCBiZSBjb25jYXRlbmF0ZWQgaW4gdGhlIGZpcnN0IGl0ZW0gb2YgYSBtb2RpZmllciBsaXN0LiBJZiB0aGUKK2ZpcnN0IGl0ZW0gaXMgbm90IHJlY29nbml6ZWQgYXMgYSBsb25nIG1vZGlmaWVyIG5hbWUsIGl0IGlzIGludGVycHJldGVkIGFzIGEKK3NlcXVlbmNlIG9mIHRoZXNlIGFiYnJldmlhdGlvbnMuIEZvciBleGFtcGxlOgorLnNwCisgIC9hYmMvaWcsbmV3bGluZT1jcixqaXQ9MworLnNwCitUaGlzIGlzIGEgcGF0dGVybiBsaW5lIHdob3NlIG1vZGlmaWVyIGxpc3Qgc3RhcnRzIHdpdGggdHdvIG9uZS1sZXR0ZXIgbW9kaWZpZXJzCisoL2kgYW5kIC9nKS4gVGhlIGxvd2VyLWNhc2UgYWJicmV2aWF0ZWQgbW9kaWZpZXJzIGFyZSB0aGUgc2FtZSBhcyB1c2VkIGluIFBlcmwuCisuCisuCisuU0ggIlBBVFRFUk4gU1lOVEFYIgorLnJzCisuc3AKK0EgcGF0dGVybiBsaW5lIG11c3Qgc3RhcnQgd2l0aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIChjb21tb24gc3ltYm9scywKK2V4Y2x1ZGluZyBwYXR0ZXJuIG1ldGEtY2hhcmFjdGVycyk6Cisuc3AKKyAgLyAhICIgJyBgIC0gPSBfIDogOyAsICUgJiBAIH4KKy5zcAorVGhpcyBpcyBpbnRlcnByZXRlZCBhcyB0aGUgcGF0dGVybidzIGRlbGltaXRlci4gQSByZWd1bGFyIGV4cHJlc3Npb24gbWF5IGJlCitjb250aW51ZWQgb3ZlciBzZXZlcmFsIGlucHV0IGxpbmVzLCBpbiB3aGljaCBjYXNlIHRoZSBuZXdsaW5lIGNoYXJhY3RlcnMgYXJlCitpbmNsdWRlZCB3aXRoaW4gaXQuIEl0IGlzIHBvc3NpYmxlIHRvIGluY2x1ZGUgdGhlIGRlbGltaXRlciB3aXRoaW4gdGhlIHBhdHRlcm4KK2J5IGVzY2FwaW5nIGl0IHdpdGggYSBiYWNrc2xhc2gsIGZvciBleGFtcGxlCisuc3AKKyAgL2FiY1xlL2RlZi8KKy5zcAorSWYgeW91IGRvIHRoaXMsIHRoZSBlc2NhcGUgYW5kIHRoZSBkZWxpbWl0ZXIgZm9ybSBwYXJ0IG9mIHRoZSBwYXR0ZXJuLCBidXQKK3NpbmNlIHRoZSBkZWxpbWl0ZXJzIGFyZSBhbGwgbm9uLWFscGhhbnVtZXJpYywgdGhpcyBkb2VzIG5vdCBhZmZlY3QgaXRzCitpbnRlcnByZXRhdGlvbi4gSWYgdGhlIHRlcm1pbmF0aW5nIGRlbGltaXRlciBpcyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhCitiYWNrc2xhc2gsIGZvciBleGFtcGxlLAorLnNwCisgIC9hYmMvXGUKKy5zcAordGhlbiBhIGJhY2tzbGFzaCBpcyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiBUaGlzIGlzIGRvbmUgdG8gcHJvdmlkZSBhCit3YXkgb2YgdGVzdGluZyB0aGUgZXJyb3IgY29uZGl0aW9uIHRoYXQgYXJpc2VzIGlmIGEgcGF0dGVybiBmaW5pc2hlcyB3aXRoIGEKK2JhY2tzbGFzaCwgYmVjYXVzZQorLnNwCisgIC9hYmNcZS8KKy5zcAoraXMgaW50ZXJwcmV0ZWQgYXMgdGhlIGZpcnN0IGxpbmUgb2YgYSBwYXR0ZXJuIHRoYXQgc3RhcnRzIHdpdGggImFiYy8iLCBjYXVzaW5nCitwY3JlMnRlc3QgdG8gcmVhZCB0aGUgbmV4dCBsaW5lIGFzIGEgY29udGludWF0aW9uIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uCisuUAorQSBwYXR0ZXJuIGNhbiBiZSBmb2xsb3dlZCBieSBhIG1vZGlmaWVyIGxpc3QgKGRldGFpbHMgYmVsb3cpLgorLgorLgorLlNIICJTVUJKRUNUIExJTkUgU1lOVEFYIgorLnJzCisuc3AKK0JlZm9yZSBlYWNoIHN1YmplY3QgbGluZSBpcyBwYXNzZWQgdG8gXGZCcGNyZTJfbWF0Y2goKVxmUCBvcgorXGZCcGNyZTJfZGZhX21hdGNoKClcZlAsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlIHNwYWNlIGlzIHJlbW92ZWQsIGFuZCB0aGUKK2xpbmUgaXMgc2Nhbm5lZCBmb3IgYmFja3NsYXNoIGVzY2FwZXMuIFRoZSBmb2xsb3dpbmcgcHJvdmlkZSBhIG1lYW5zIG9mCitlbmNvZGluZyBub24tcHJpbnRpbmcgY2hhcmFjdGVycyBpbiBhIHZpc2libGUgd2F5OgorLnNwCisgIFxlYSAgICAgICAgIGFsYXJtIChCRUwsIFxleDA3KQorICBcZWIgICAgICAgICBiYWNrc3BhY2UgKFxleDA4KQorICBcZWUgICAgICAgICBlc2NhcGUgKFxleDI3KQorICBcZWYgICAgICAgICBmb3JtIGZlZWQgKFxleDBjKQorICBcZW4gICAgICAgICBuZXdsaW5lIChcZXgwYSkKKyAgXGVyICAgICAgICAgY2FycmlhZ2UgcmV0dXJuIChcZXgwZCkKKyAgXGV0ICAgICAgICAgdGFiIChcZXgwOSkKKyAgXGV2ICAgICAgICAgdmVydGljYWwgdGFiIChcZXgwYikKKyAgXGVubm4gICAgICAgb2N0YWwgY2hhcmFjdGVyICh1cCB0byAzIG9jdGFsIGRpZ2l0cyk7IGFsd2F5cworICAgICAgICAgICAgICAgYSBieXRlIHVubGVzcyA+IDI1NSBpbiBVVEYtOCBvciAxNi1iaXQgb3IgMzItYml0IG1vZGUKKyAgXGVve2RkLi4ufSAgb2N0YWwgY2hhcmFjdGVyIChhbnkgbnVtYmVyIG9mIG9jdGFsIGRpZ2l0c30KKyAgXGV4aGggICAgICAgaGV4YWRlY2ltYWwgYnl0ZSAodXAgdG8gMiBoZXggZGlnaXRzKQorICBcZXh7aGguLi59ICBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIgKGFueSBudW1iZXIgb2YgaGV4IGRpZ2l0cykKKy5zcAorVGhlIHVzZSBvZiBcZXh7aGguLi59IGlzIG5vdCBkZXBlbmRlbnQgb24gdGhlIHVzZSBvZiB0aGUgXGZCdXRmXGZQIG1vZGlmaWVyIG9uCit0aGUgcGF0dGVybi4gSXQgaXMgcmVjb2duaXplZCBhbHdheXMuIFRoZXJlIG1heSBiZSBhbnkgbnVtYmVyIG9mIGhleGFkZWNpbWFsCitkaWdpdHMgaW5zaWRlIHRoZSBicmFjZXM7IGludmFsaWQgdmFsdWVzIHByb3Zva2UgZXJyb3IgbWVzc2FnZXMuCisuUAorTm90ZSB0aGF0IFxleGhoIHNwZWNpZmllcyBvbmUgYnl0ZSByYXRoZXIgdGhhbiBvbmUgY2hhcmFjdGVyIGluIFVURi04IG1vZGU7Cit0aGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbnN0cnVjdCBpbnZhbGlkIFVURi04IHNlcXVlbmNlcyBmb3IgdGVzdGluZworcHVycG9zZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBcZXh7aGh9IGlzIGludGVycHJldGVkIGFzIGEgVVRGLTggY2hhcmFjdGVyIGluCitVVEYtOCBtb2RlLCBnZW5lcmF0aW5nIG1vcmUgdGhhbiBvbmUgYnl0ZSBpZiB0aGUgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIDEyNy4KK1doZW4gdGVzdGluZyB0aGUgOC1iaXQgbGlicmFyeSBub3QgaW4gVVRGLTggbW9kZSwgXGV4e2hofSBnZW5lcmF0ZXMgb25lIGJ5dGUKK2ZvciB2YWx1ZXMgbGVzcyB0aGFuIDI1NiwgYW5kIGNhdXNlcyBhbiBlcnJvciBmb3IgZ3JlYXRlciB2YWx1ZXMuCisuUAorSW4gVVRGLTE2IG1vZGUsIGFsbCA0LWRpZ2l0IFxleHtoaGhofSB2YWx1ZXMgYXJlIGFjY2VwdGVkLiBUaGlzIG1ha2VzIGl0Citwb3NzaWJsZSB0byBjb25zdHJ1Y3QgaW52YWxpZCBVVEYtMTYgc2VxdWVuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorLlAKK0luIFVURi0zMiBtb2RlLCBhbGwgNC0gdG8gOC1kaWdpdCBcZXh7Li4ufSB2YWx1ZXMgYXJlIGFjY2VwdGVkLiBUaGlzIG1ha2VzIGl0Citwb3NzaWJsZSB0byBjb25zdHJ1Y3QgaW52YWxpZCBVVEYtMzIgc2VxdWVuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorLlAKK1RoZXJlIGlzIGEgc3BlY2lhbCBiYWNrc2xhc2ggc2VxdWVuY2UgdGhhdCBzcGVjaWZpZXMgcmVwbGljYXRpb24gb2Ygb25lIG9yIG1vcmUKK2NoYXJhY3RlcnM6Cisuc3AKKyAgXGVbPGNoYXJhY3RlcnM+XXs8Y291bnQ+fQorLnNwCitUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHRlc3QgbG9uZyBzdHJpbmdzIHdpdGhvdXQgaGF2aW5nIHRvIHByb3ZpZGUgdGhlbSBhcworcGFydCBvZiB0aGUgZmlsZS4gRm9yIGV4YW1wbGU6Cisuc3AKKyAgXGVbYWJjXXs0fQorLnNwCitpcyBjb252ZXJ0ZWQgdG8gImFiY2FiY2FiY2FiYyIuIFRoaXMgZmVhdHVyZSBkb2VzIG5vdCBzdXBwb3J0IG5lc3RpbmcuIFRvCitpbmNsdWRlIGEgY2xvc2luZyBzcXVhcmUgYnJhY2tldCBpbiB0aGUgY2hhcmFjdGVycywgY29kZSBpdCBhcyBcZXg1RC4KKy5QCitBIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhbiBlcXVhbHMgc2lnbiBtYXJrcyB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IHN0cmluZyBhbmQKK3RoZSBzdGFydCBvZiBhIG1vZGlmaWVyIGxpc3QuIEZvciBleGFtcGxlOgorLnNwCisgIGFiY1xlPW5vdGJvbCxub3RlbXB0eQorLnNwCitJZiB0aGUgc3ViamVjdCBzdHJpbmcgaXMgZW1wdHkgYW5kIFxlPSBpcyBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLCB0aGUgbGluZSBpcwordHJlYXRlZCBhcyBhIGNvbW1lbnQgbGluZSwgYW5kIGlzIG5vdCB1c2VkIGZvciBtYXRjaGluZy4gRm9yIGV4YW1wbGU6Cisuc3AKKyAgXGU9IFRoaXMgaXMgYSBjb21tZW50LgorICBhYmNcZT0gVGhpcyBpcyBhbiBpbnZhbGlkIG1vZGlmaWVyIGxpc3QuCisuc3AKK0EgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGFueSBvdGhlciBub24tYWxwaGFudW1lcmljIGNoYXJhY3RlciBqdXN0IGVzY2FwZXMgdGhhdAorY2hhcmFjdGVyLiBBIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhbnl0aGluZyBlbHNlIGNhdXNlcyBhbiBlcnJvci4gSG93ZXZlciwgaWYKK3RoZSB2ZXJ5IGxhc3QgY2hhcmFjdGVyIGluIHRoZSBsaW5lIGlzIGEgYmFja3NsYXNoIChhbmQgdGhlcmUgaXMgbm8gbW9kaWZpZXIKK2xpc3QpLCBpdCBpcyBpZ25vcmVkLiBUaGlzIGdpdmVzIGEgd2F5IG9mIHBhc3NpbmcgYW4gZW1wdHkgbGluZSBhcyBkYXRhLCBzaW5jZQorYSByZWFsIGVtcHR5IGxpbmUgdGVybWluYXRlcyB0aGUgZGF0YSBpbnB1dC4KKy4KKy4KKy5TSCAiUEFUVEVSTiBNT0RJRklFUlMiCisucnMKKy5zcAorVGhlcmUgYXJlIHNldmVyYWwgdHlwZXMgb2YgbW9kaWZpZXIgdGhhdCBjYW4gYXBwZWFyIGluIHBhdHRlcm4gbGluZXMuIEV4Y2VwdAord2hlcmUgbm90ZWQgYmVsb3csIHRoZXkgbWF5IGFsc28gYmUgdXNlZCBpbiBcZkIjcGF0dGVyblxmUCBjb21tYW5kcy4gQQorcGF0dGVybidzIG1vZGlmaWVyIGxpc3QgY2FuIGFkZCB0byBvciBvdmVycmlkZSBkZWZhdWx0IG1vZGlmaWVycyB0aGF0IHdlcmUgc2V0CitieSBhIHByZXZpb3VzIFxmQiNwYXR0ZXJuXGZQIGNvbW1hbmQuCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJvcHRpb25tb2RpZmllcnMiPjwvYT4KKy5TUyAiU2V0dGluZyBjb21waWxhdGlvbiBvcHRpb25zIgorLnJzCisuc3AKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIHNldCBvcHRpb25zIGZvciBcZkJwY3JlMl9jb21waWxlKClcZlAuIFRoZSBtb3N0IGNvbW1vbgorb25lcyBoYXZlIHNpbmdsZS1sZXR0ZXIgYWJicmV2aWF0aW9ucy4gU2VlCisuXCIgSFJFRgorXGZCcGNyZTJhcGlcZlAKKy5cIgorZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlaXIgZWZmZWN0cy4KKy5zcAorICAgICAgYWxsb3dfZW1wdHlfY2xhc3MgICAgICAgICBzZXQgUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1MKKyAgICAgIGFsdF9ic3V4ICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX0FMVF9CU1VYCisgICAgICBhbHRfY2lyY3VtZmxleCAgICAgICAgICAgIHNldCBQQ1JFMl9BTFRfQ0lSQ1VNRkxFWAorICAgICAgYWx0X3ZlcmJuYW1lcyAgICAgICAgICAgICBzZXQgUENSRTJfQUxUX1ZFUkJOQU1FUworICAgICAgYW5jaG9yZWQgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfQU5DSE9SRUQKKyAgICAgIGF1dG9fY2FsbG91dCAgICAgICAgICAgICAgc2V0IFBDUkUyX0FVVE9fQ0FMTE9VVAorICAvaSAgY2FzZWxlc3MgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfQ0FTRUxFU1MKKyAgICAgIGRvbGxhcl9lbmRvbmx5ICAgICAgICAgICAgc2V0IFBDUkUyX0RPTExBUl9FTkRPTkxZCisgIC9zICBkb3RhbGwgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9ET1RBTEwKKyAgICAgIGR1cG5hbWVzICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX0RVUE5BTUVTCisgIC94ICBleHRlbmRlZCAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9FWFRFTkRFRAorICAgICAgZmlyc3RsaW5lICAgICAgICAgICAgICAgICBzZXQgUENSRTJfRklSU1RMSU5FCisgICAgICBtYXRjaF91bnNldF9iYWNrcmVmICAgICAgIHNldCBQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGCisgIC9tICBtdWx0aWxpbmUgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9NVUxUSUxJTkUKKyAgICAgIG5ldmVyX2JhY2tzbGFzaF9jICAgICAgICAgc2V0IFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DCisgICAgICBuZXZlcl91Y3AgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9ORVZFUl9VQ1AKKyAgICAgIG5ldmVyX3V0ZiAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX05FVkVSX1VURgorICAgICAgbm9fYXV0b19jYXB0dXJlICAgICAgICAgICBzZXQgUENSRTJfTk9fQVVUT19DQVBUVVJFCisgICAgICBub19hdXRvX3Bvc3Nlc3MgICAgICAgICAgIHNldCBQQ1JFMl9OT19BVVRPX1BPU1NFU1MKKyAgICAgIG5vX2RvdHN0YXJfYW5jaG9yICAgICAgICAgc2V0IFBDUkUyX05PX0RPVFNUQVJfQU5DSE9SCisgICAgICBub19zdGFydF9vcHRpbWl6ZSAgICAgICAgIHNldCBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRQorICAgICAgbm9fdXRmX2NoZWNrICAgICAgICAgICAgICBzZXQgUENSRTJfTk9fVVRGX0NIRUNLCisgICAgICB1Y3AgICAgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9VQ1AKKyAgICAgIHVuZ3JlZWR5ICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX1VOR1JFRURZCisgICAgICB1c2Vfb2Zmc2V0X2xpbWl0ICAgICAgICAgIHNldCBQQ1JFMl9VU0VfT0ZGU0VUX0xJTUlUCisgICAgICB1dGYgICAgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9VVEYKKy5zcAorQXMgd2VsbCBhcyB0dXJuaW5nIG9uIHRoZSBQQ1JFMl9VVEYgb3B0aW9uLCB0aGUgXGZCdXRmXGZQIG1vZGlmaWVyIGNhdXNlcyBhbGwKK25vbi1wcmludGluZyBjaGFyYWN0ZXJzIGluIG91dHB1dCBzdHJpbmdzIHRvIGJlIHByaW50ZWQgdXNpbmcgdGhlIFxleHtoaC4uLn0KK25vdGF0aW9uLiBPdGhlcndpc2UsIHRob3NlIGxlc3MgdGhhbiAweDEwMCBhcmUgb3V0cHV0IGluIGhleCB3aXRob3V0IHRoZSBjdXJseQorYnJhY2tldHMuCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJjb250cm9sbW9kaWZpZXJzIj48L2E+CisuU1MgIlNldHRpbmcgY29tcGlsYXRpb24gY29udHJvbHMiCisucnMKKy5zcAorVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgYWZmZWN0IHRoZSBjb21waWxhdGlvbiBwcm9jZXNzIG9yIHJlcXVlc3QgaW5mb3JtYXRpb24KK2Fib3V0IHRoZSBwYXR0ZXJuOgorLnNwCisgICAgICBic3I9W2FueWNybGZ8dW5pY29kZV0gICAgIHNwZWNpZnkgXGVSIGhhbmRsaW5nCisgIC9CICBiaW5jb2RlICAgICAgICAgICAgICAgICAgIHNob3cgYmluYXJ5IGNvZGUgd2l0aG91dCBsZW5ndGhzCisgICAgICBjYWxsb3V0X2luZm8gICAgICAgICAgICAgIHNob3cgY2FsbG91dCBpbmZvcm1hdGlvbgorICAgICAgZGVidWcgICAgICAgICAgICAgICAgICAgICBzYW1lIGFzIGluZm8sZnVsbGJpbmNvZGUKKyAgICAgIGZ1bGxiaW5jb2RlICAgICAgICAgICAgICAgc2hvdyBiaW5hcnkgY29kZSB3aXRoIGxlbmd0aHMKKyAgL0kgIGluZm8gICAgICAgICAgICAgICAgICAgICAgc2hvdyBpbmZvIGFib3V0IGNvbXBpbGVkIHBhdHRlcm4KKyAgICAgIGhleCAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiBpcyBjb2RlZCBpbiBoZXhhZGVjaW1hbAorICAgICAgaml0Wz08bnVtYmVyPl0gICAgICAgICAgICB1c2UgSklUCisgICAgICBqaXRmYXN0ICAgICAgICAgICAgICAgICAgIHVzZSBKSVQgZmFzdCBwYXRoCisgICAgICBqaXR2ZXJpZnkgICAgICAgICAgICAgICAgIHZlcmlmeSBKSVQgdXNlCisgICAgICBsb2NhbGU9PG5hbWU+ICAgICAgICAgICAgIHVzZSB0aGlzIGxvY2FsZQorICAgICAgbWF4X3BhdHRlcm5fbGVuZ3RoPTxuPiAgICBzZXQgdGhlIG1heGltdW0gcGF0dGVybiBsZW5ndGgKKyAgICAgIG1lbW9yeSAgICAgICAgICAgICAgICAgICAgc2hvdyBtZW1vcnkgdXNlZAorICAgICAgbmV3bGluZT08dHlwZT4gICAgICAgICAgICBzZXQgbmV3bGluZSB0eXBlCisgICAgICBudWxsX2NvbnRleHQgICAgICAgICAgICAgIGNvbXBpbGUgd2l0aCBhIE5VTEwgY29udGV4dAorICAgICAgcGFyZW5zX25lc3RfbGltaXQ9PG4+ICAgICBzZXQgbWF4aW11bSBwYXJlbnRoZXNlcyBkZXB0aAorICAgICAgcG9zaXggICAgICAgICAgICAgICAgICAgICB1c2UgdGhlIFBPU0lYIEFQSQorICAgICAgcHVzaCAgICAgICAgICAgICAgICAgICAgICBwdXNoIGNvbXBpbGVkIHBhdHRlcm4gb250byB0aGUgc3RhY2sKKyAgICAgIHN0YWNrZ3VhcmQ9PG51bWJlcj4gICAgICAgdGVzdCB0aGUgc3RhY2tndWFyZCBmZWF0dXJlCisgICAgICB0YWJsZXM9WzB8MXwyXSAgICAgICAgICAgIHNlbGVjdCBpbnRlcm5hbCB0YWJsZXMKKy5zcAorVGhlIGVmZmVjdHMgb2YgdGhlc2UgbW9kaWZpZXJzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKy4KKy4KKy5TUyAiTmV3bGluZSBhbmQgXGVSIGhhbmRsaW5nIgorLnJzCisuc3AKK1RoZSBcZkJic3JcZlAgbW9kaWZpZXIgc3BlY2lmaWVzIHdoYXQgXGVSIGluIGEgcGF0dGVybiBzaG91bGQgbWF0Y2guIElmIGl0IGlzCitzZXQgdG8gImFueWNybGYiLCBcZVIgbWF0Y2hlcyBDUiwgTEYsIG9yIENSTEYgb25seS4gSWYgaXQgaXMgc2V0IHRvICJ1bmljb2RlIiwKK1xlUiBtYXRjaGVzIGFueSBVbmljb2RlIG5ld2xpbmUgc2VxdWVuY2UuIFRoZSBkZWZhdWx0IGlzIHNwZWNpZmllZCB3aGVuIFBDUkUyCitpcyBidWlsdCwgd2l0aCB0aGUgZGVmYXVsdCBkZWZhdWx0IGJlaW5nIFVuaWNvZGUuCisuUAorVGhlIFxmQm5ld2xpbmVcZlAgbW9kaWZpZXIgc3BlY2lmaWVzIHdoaWNoIGNoYXJhY3RlcnMgYXJlIHRvIGJlIGludGVycHJldGVkIGFzCituZXdsaW5lcywgYm90aCBpbiB0aGUgcGF0dGVybiBhbmQgaW4gc3ViamVjdCBsaW5lcy4gVGhlIHR5cGUgbXVzdCBiZSBvbmUgb2YgQ1IsCitMRiwgQ1JMRiwgQU5ZQ1JMRiwgb3IgQU5ZIChpbiB1cHBlciBvciBsb3dlciBjYXNlKS4KKy4KKy4KKy5TUyAiSW5mb3JtYXRpb24gYWJvdXQgYSBwYXR0ZXJuIgorLnJzCisuc3AKK1RoZSBcZkJkZWJ1Z1xmUCBtb2RpZmllciBpcyBhIHNob3J0aGFuZCBmb3IgXGZCaW5mbyxmdWxsYmluY29kZVxmUCwgcmVxdWVzdGluZworYWxsIGF2YWlsYWJsZSBpbmZvcm1hdGlvbi4KKy5QCitUaGUgXGZCYmluY29kZVxmUCBtb2RpZmllciBjYXVzZXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGlsZWQgY29kZSB0byBiZQorb3V0cHV0IGFmdGVyIGNvbXBpbGF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGRvZXMgbm90IGNvbnRhaW4gbGVuZ3RoIGFuZCBvZmZzZXQKK3ZhbHVlcywgd2hpY2ggZW5zdXJlcyB0aGF0IHRoZSBzYW1lIG91dHB1dCBpcyBnZW5lcmF0ZWQgZm9yIGRpZmZlcmVudCBpbnRlcm5hbAorbGluayBzaXplcyBhbmQgZGlmZmVyZW50IGNvZGUgdW5pdCB3aWR0aHMuIEJ5IHVzaW5nIFxmQmJpbmNvZGVcZlAsIHRoZSBzYW1lCityZWdyZXNzaW9uIHRlc3RzIGNhbiBiZSB1c2VkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuCisuUAorVGhlIFxmQmZ1bGxiaW5jb2RlXGZQIG1vZGlmaWVyLCBieSBjb250cmFzdCwgXGZJZG9lc1xmUCBpbmNsdWRlIGxlbmd0aCBhbmQKK29mZnNldCB2YWx1ZXMuIFRoaXMgaXMgdXNlZCBpbiBhIGZldyBzcGVjaWFsIHRlc3RzIHRoYXQgcnVuIG9ubHkgZm9yIHNwZWNpZmljCitjb2RlIHVuaXQgd2lkdGhzIGFuZCBsaW5rIHNpemVzLCBhbmQgaXMgYWxzbyB1c2VmdWwgZm9yIG9uZS1vZmYgdGVzdHMuCisuUAorVGhlIFxmQmluZm9cZlAgbW9kaWZpZXIgcmVxdWVzdHMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVkIHBhdHRlcm4KKyh3aGV0aGVyIGl0IGlzIGFuY2hvcmVkLCBoYXMgYSBmaXhlZCBmaXJzdCBjaGFyYWN0ZXIsIGFuZCBzbyBvbikuIFRoZQoraW5mb3JtYXRpb24gaXMgb2J0YWluZWQgZnJvbSB0aGUgXGZCcGNyZTJfcGF0dGVybl9pbmZvKClcZlAgZnVuY3Rpb24uIEhlcmUgYXJlCitzb21lIHR5cGljYWwgZXhhbXBsZXM6Cisuc3AKKyAgICByZT4gLyg/aSkoXmF8XmIpL20saW5mbworICBDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKKyAgQ29tcGlsZSBvcHRpb25zOiBtdWx0aWxpbmUKKyAgT3ZlcmFsbCBvcHRpb25zOiBjYXNlbGVzcyBtdWx0aWxpbmUKKyAgRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorICBTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKy5zcAorICAgIHJlPiAvKD9pKWFiYy9pbmZvCisgIENhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorICBDb21waWxlIG9wdGlvbnM6IDxub25lPgorICBPdmVyYWxsIG9wdGlvbnM6IGNhc2VsZXNzCisgIEZpcnN0IGNvZGUgdW5pdCA9ICdhJyAoY2FzZWxlc3MpCisgIExhc3QgY29kZSB1bml0ID0gJ2MnIChjYXNlbGVzcykKKyAgU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisuc3AKKyJDb21waWxlIG9wdGlvbnMiIGFyZSB0aG9zZSBzcGVjaWZpZWQgYnkgbW9kaWZpZXJzOyAib3ZlcmFsbCBvcHRpb25zIiBoYXZlCithZGRlZCBvcHRpb25zIHRoYXQgYXJlIHRha2VuIG9yIGRlZHVjZWQgZnJvbSB0aGUgcGF0dGVybi4gSWYgYm90aCBzZXRzIG9mCitvcHRpb25zIGFyZSB0aGUgc2FtZSwganVzdCBhIHNpbmdsZSAib3B0aW9ucyIgbGluZSBpcyBvdXRwdXQ7IGlmIHRoZXJlIGFyZSBubworb3B0aW9ucywgdGhlIGxpbmUgaXMgb21pdHRlZC4gIkZpcnN0IGNvZGUgdW5pdCIgaXMgd2hlcmUgYW55IG1hdGNoIG11c3Qgc3RhcnQ7CitpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHRoZXkgYXJlIGxpc3RlZCBhcyAic3RhcnRpbmcgY29kZSB1bml0cyIuICJMYXN0IGNvZGUKK3VuaXQiIGlzIHRoZSBsYXN0IGxpdGVyYWwgY29kZSB1bml0IHRoYXQgbXVzdCBiZSBwcmVzZW50IGluIGFueSBtYXRjaC4gVGhpcyBpcworbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IGNoYXJhY3Rlci4gVGhlc2UgbGluZXMgYXJlIG9taXR0ZWQgaWYgbm8gc3RhcnRpbmcgb3IKK2VuZGluZyBjb2RlIHVuaXRzIGFyZSByZWNvcmRlZC4KKy5QCitUaGUgXGZCY2FsbG91dF9pbmZvXGZQIG1vZGlmaWVyIHJlcXVlc3RzIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgY2FsbG91dHMgaW4KK3RoZSBwYXR0ZXJuLiBBIGxpc3Qgb2YgdGhlbSBpcyBvdXRwdXQgYXQgdGhlIGVuZCBvZiBhbnkgb3RoZXIgaW5mb3JtYXRpb24gdGhhdAoraXMgcmVxdWVzdGVkLiBGb3IgZWFjaCBjYWxsb3V0LCBlaXRoZXIgaXRzIG51bWJlciBvciBzdHJpbmcgaXMgZ2l2ZW4sIGZvbGxvd2VkCitieSB0aGUgaXRlbSB0aGF0IGZvbGxvd3MgaXQgaW4gdGhlIHBhdHRlcm4uCisuCisuCisuU1MgIlBhc3NpbmcgYSBOVUxMIGNvbnRleHQiCisucnMKKy5zcAorTm9ybWFsbHksIFxmQnBjcmUydGVzdFxmUCBwYXNzZXMgYSBjb250ZXh0IGJsb2NrIHRvIFxmQnBjcmUyX2NvbXBpbGUoKVxmUC4gSWYKK3RoZSBcZkJudWxsX2NvbnRleHRcZlAgbW9kaWZpZXIgaXMgc2V0LCBob3dldmVyLCBOVUxMIGlzIHBhc3NlZC4gVGhpcyBpcyBmb3IKK3Rlc3RpbmcgdGhhdCBcZkJwY3JlMl9jb21waWxlKClcZlAgYmVoYXZlcyBjb3JyZWN0bHkgaW4gdGhpcyBjYXNlIChpdCB1c2VzCitkZWZhdWx0IHZhbHVlcykuCisuCisuCisuU1MgIlNwZWNpZnlpbmcgYSBwYXR0ZXJuIGluIGhleCIKKy5ycworLnNwCitUaGUgXGZCaGV4XGZQIG1vZGlmaWVyIHNwZWNpZmllcyB0aGF0IHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBwYXR0ZXJuIGFyZSB0byBiZQoraW50ZXJwcmV0ZWQgYXMgcGFpcnMgb2YgaGV4YWRlY2ltYWwgZGlnaXRzLiBXaGl0ZSBzcGFjZSBpcyBwZXJtaXR0ZWQgYmV0d2VlbgorcGFpcnMuIEZvciBleGFtcGxlOgorLnNwCisgIC9hYiAzMiA1OS9oZXgKKy5zcAorVGhpcyBmZWF0dXJlIGlzIHByb3ZpZGVkIGFzIGEgd2F5IG9mIGNyZWF0aW5nIHBhdHRlcm5zIHRoYXQgY29udGFpbiBiaW5hcnkgemVybworYW5kIG90aGVyIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzLiBCeSBkZWZhdWx0LCBcZkJwY3JlMnRlc3RcZlAgcGFzc2VzIHBhdHRlcm5zCithcyB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5ncyB0byBcZkJwY3JlMl9jb21waWxlKClcZlAsIGdpdmluZyB0aGUgbGVuZ3RoIGFzCitQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIEhvd2V2ZXIsIGZvciBwYXR0ZXJucyBzcGVjaWZpZWQgaW4gaGV4YWRlY2ltYWwsIHRoZQorYWN0dWFsIGxlbmd0aCBvZiB0aGUgcGF0dGVybiBpcyBwYXNzZWQuCisuCisuCisuU1MgIkdlbmVyYXRpbmcgbG9uZyByZXBldGl0aXZlIHBhdHRlcm5zIgorLnJzCisuc3AKK1NvbWUgdGVzdHMgdXNlIGxvbmcgcGF0dGVybnMgdGhhdCBhcmUgdmVyeSByZXBldGl0aXZlLiBJbnN0ZWFkIG9mIGNyZWF0aW5nIGEKK3ZlcnkgbG9uZyBpbnB1dCBsaW5lIGZvciBzdWNoIGEgcGF0dGVybiwgeW91IGNhbiB1c2UgYSBzcGVjaWFsIHJlcGV0aXRpb24KK2ZlYXR1cmUsIHNpbWlsYXIgdG8gdGhlIG9uZSBkZXNjcmliZWQgZm9yIHN1YmplY3QgbGluZXMgYWJvdmUuIElmIHRoZQorXGZCZXhwYW5kXGZQIG1vZGlmaWVyIGlzIHByZXNlbnQgb24gYSBwYXR0ZXJuLCBwYXJ0cyBvZiB0aGUgcGF0dGVybiB0aGF0IGhhdmUKK3RoZSBmb3JtCisuc3AKKyAgXGVbPGNoYXJhY3RlcnM+XXs8Y291bnQ+fQorLnNwCithcmUgZXhwYW5kZWQgYmVmb3JlIHRoZSBwYXR0ZXJuIGlzIHBhc3NlZCB0byBcZkJwY3JlMl9jb21waWxlKClcZlAuIEZvcgorZXhhbXBsZSwgXGVbQUJdezYwMDB9IGlzIGV4cGFuZGVkIHRvICJBQkFCLi4uIiA2MDAwIHRpbWVzLiBUaGlzIGNvbnN0cnVjdGlvbgorY2Fubm90IGJlIG5lc3RlZC4gQW4gaW5pdGlhbCAiXGVbIiBzZXF1ZW5jZSBpcyByZWNvZ25pemVkIG9ubHkgaWYgIl17IiBmb2xsb3dlZAorYnkgZGVjaW1hbCBkaWdpdHMgYW5kICJ9IiBpcyBmb3VuZCBsYXRlciBpbiB0aGUgcGF0dGVybi4gSWYgbm90LCB0aGUgY2hhcmFjdGVycworcmVtYWluIGluIHRoZSBwYXR0ZXJuIHVuYWx0ZXJlZC4KKy5QCitJZiBwYXJ0IG9mIGFuIGV4cGFuZGVkIHBhdHRlcm4gbG9va3MgbGlrZSBhbiBleHBhbnNpb24sIGJ1dCBpcyByZWFsbHkgcGFydCBvZgordGhlIGFjdHVhbCBwYXR0ZXJuLCB1bndhbnRlZCBleHBhbnNpb24gY2FuIGJlIGF2b2lkZWQgYnkgZ2l2aW5nIHR3byB2YWx1ZXMgaW4KK3RoZSBxdWFudGlmaWVyLiBGb3IgZXhhbXBsZSwgXGVbQUJdezYwMDAsNjAwMH0gaXMgbm90IHJlY29nbml6ZWQgYXMgYW4KK2V4cGFuc2lvbiBpdGVtLgorLlAKK0lmIHRoZSBcZkJpbmZvXGZQIG1vZGlmaWVyIGlzIHNldCBvbiBhbiBleHBhbmRlZCBwYXR0ZXJuLCB0aGUgcmVzdWx0IG9mIHRoZQorZXhwYW5zaW9uIGlzIGluY2x1ZGVkIGluIHRoZSBpbmZvcm1hdGlvbiB0aGF0IGlzIG91dHB1dC4KKy4KKy4KKy5TUyAiSklUIGNvbXBpbGF0aW9uIgorLnJzCisuc3AKK0p1c3QtaW4tdGltZSAoSklUKSBjb21waWxpbmcgaXMgYSBoZWF2eXdlaWdodCBvcHRpbWl6YXRpb24gdGhhdCBjYW4gZ3JlYXRseQorc3BlZWQgdXAgcGF0dGVybiBtYXRjaGluZy4gU2VlIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUyaml0XGZQCisuXCIKK2RvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuIEpJVCBjb21waWxpbmcgaGFwcGVucywgb3B0aW9uYWxseSwgYWZ0ZXIgYSBwYXR0ZXJuCitoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGlsZWQgaW50byBhbiBpbnRlcm5hbCBmb3JtLiBUaGUgSklUIGNvbXBpbGVyIGNvbnZlcnRzCit0aGlzIHRvIG9wdGltaXplZCBtYWNoaW5lIGNvZGUuIEl0IG5lZWRzIHRvIGtub3cgd2hldGhlciB0aGUgbWF0Y2gtdGltZSBvcHRpb25zCitQQ1JFMl9QQVJUSUFMX0hBUkQgYW5kIFBDUkUyX1BBUlRJQUxfU09GVCBhcmUgZ29pbmcgdG8gYmUgdXNlZCwgYmVjYXVzZQorZGlmZmVyZW50IGNvZGUgaXMgZ2VuZXJhdGVkIGZvciB0aGUgZGlmZmVyZW50IGNhc2VzLiBTZWUgdGhlIFxmQnBhcnRpYWxcZlAKK21vZGlmaWVyIGluICJTdWJqZWN0IE1vZGlmaWVycyIKKy5cIiBIVE1MIDxhIGhyZWY9IiNzdWJqZWN0bW9kaWZpZXJzIj4KKy5cIiA8L2E+CitiZWxvdworLlwiCitmb3IgZGV0YWlscyBvZiBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGZvciBlYWNoIG1hdGNoIGF0dGVtcHQuCisuUAorSklUIGNvbXBpbGF0aW9uIGlzIHJlcXVlc3RlZCBieSB0aGUgXGZCL2ppdFxmUCBwYXR0ZXJuIG1vZGlmaWVyLCB3aGljaCBtYXkKK29wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgYW4gZXF1YWxzIHNpZ24gYW5kIGEgbnVtYmVyIGluIHRoZSByYW5nZSAwIHRvIDcuCitUaGUgdGhyZWUgYml0cyB0aGF0IG1ha2UgdXAgdGhlIG51bWJlciBzcGVjaWZ5IHdoaWNoIG9mIHRoZSB0aHJlZSBKSVQgb3BlcmF0aW5nCittb2RlcyBhcmUgdG8gYmUgY29tcGlsZWQ6Cisuc3AKKyAgMSAgY29tcGlsZSBKSVQgY29kZSBmb3Igbm9uLXBhcnRpYWwgbWF0Y2hpbmcKKyAgMiAgY29tcGlsZSBKSVQgY29kZSBmb3Igc29mdCBwYXJ0aWFsIG1hdGNoaW5nCisgIDQgIGNvbXBpbGUgSklUIGNvZGUgZm9yIGhhcmQgcGFydGlhbCBtYXRjaGluZworLnNwCitUaGUgcG9zc2libGUgdmFsdWVzIGZvciB0aGUgXGZCL2ppdFxmUCBtb2RpZmllciBhcmUgdGhlcmVmb3JlOgorLnNwCisgIDAgIGRpc2FibGUgSklUCisgIDEgIG5vcm1hbCBtYXRjaGluZyBvbmx5CisgIDIgIHNvZnQgcGFydGlhbCBtYXRjaGluZyBvbmx5CisgIDMgIG5vcm1hbCBhbmQgc29mdCBwYXJ0aWFsIG1hdGNoaW5nCisgIDQgIGhhcmQgcGFydGlhbCBtYXRjaGluZyBvbmx5CisgIDYgIHNvZnQgYW5kIGhhcmQgcGFydGlhbCBtYXRjaGluZyBvbmx5CisgIDcgIGFsbCB0aHJlZSBtb2RlcworLnNwCitJZiBubyBudW1iZXIgaXMgZ2l2ZW4sIDcgaXMgYXNzdW1lZC4gVGhlIHBocmFzZSAicGFydGlhbCBtYXRjaGluZyIgbWVhbnMgYSBjYWxsCit0byBcZkJwY3JlMl9tYXRjaCgpXGZQIHdpdGggZWl0aGVyIHRoZSBQQ1JFMl9QQVJUSUFMX1NPRlQgb3IgdGhlCitQQ1JFMl9QQVJUSUFMX0hBUkQgb3B0aW9uIHNldC4gTm90ZSB0aGF0IHN1Y2ggYSBjYWxsIG1heSByZXR1cm4gYSBjb21wbGV0ZQorbWF0Y2g7IHRoZSBvcHRpb25zIGVuYWJsZSB0aGUgcG9zc2liaWxpdHkgb2YgYSBwYXJ0aWFsIG1hdGNoLCBidXQgZG8gbm90CityZXF1aXJlIGl0LiBOb3RlIGFsc28gdGhhdCBpZiB5b3UgcmVxdWVzdCBKSVQgY29tcGlsYXRpb24gb25seSBmb3IgcGFydGlhbAorbWF0Y2hpbmcgKGZvciBleGFtcGxlLCAvaml0PTIpIGJ1dCBkbyBub3Qgc2V0IHRoZSBcZkJwYXJ0aWFsXGZQIG1vZGlmaWVyIG9uIGEKK3N1YmplY3QgbGluZSwgdGhhdCBtYXRjaCB3aWxsIG5vdCB1c2UgSklUIGNvZGUgYmVjYXVzZSBub25lIHdhcyBjb21waWxlZCBmb3IKK25vbi1wYXJ0aWFsIG1hdGNoaW5nLgorLlAKK0lmIEpJVCBjb21waWxhdGlvbiBpcyBzdWNjZXNzZnVsLCB0aGUgY29tcGlsZWQgSklUIGNvZGUgd2lsbCBhdXRvbWF0aWNhbGx5IGJlCit1c2VkIHdoZW4gYW4gYXBwcm9wcmlhdGUgdHlwZSBvZiBtYXRjaCBpcyBydW4sIGV4Y2VwdCB3aGVuIGluY29tcGF0aWJsZQorcnVuLXRpbWUgb3B0aW9ucyBhcmUgc3BlY2lmaWVkLiBGb3IgbW9yZSBkZXRhaWxzLCBzZWUgdGhlCisuXCIgSFJFRgorXGZCcGNyZTJqaXRcZlAKKy5cIgorZG9jdW1lbnRhdGlvbi4gU2VlIGFsc28gdGhlIFxmQmppdHN0YWNrXGZQIG1vZGlmaWVyIGJlbG93IGZvciBhIHdheSBvZgorc2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgSklUIHN0YWNrLgorLlAKK0lmIHRoZSBcZkJqaXRmYXN0XGZQIG1vZGlmaWVyIGlzIHNwZWNpZmllZCwgbWF0Y2hpbmcgaXMgZG9uZSB1c2luZyB0aGUgSklUCisiZmFzdCBwYXRoIiBpbnRlcmZhY2UsIFxmQnBjcmUyX2ppdF9tYXRjaCgpXGZQLCB3aGljaCBza2lwcyBzb21lIG9mIHRoZSBzYW5pdHkKK2NoZWNrcyB0aGF0IGFyZSBkb25lIGJ5IFxmQnBjcmUyX21hdGNoKClcZlAsIGFuZCBvZiBjb3Vyc2UgZG9lcyBub3Qgd29yayB3aGVuCitKSVQgaXMgbm90IHN1cHBvcnRlZC4gSWYgXGZCaml0ZmFzdFxmUCBpcyBzcGVjaWZpZWQgd2l0aG91dCBcZkJqaXRcZlAsIGppdD03IGlzCithc3N1bWVkLgorLlAKK0lmIHRoZSBcZkJqaXR2ZXJpZnlcZlAgbW9kaWZpZXIgaXMgc3BlY2lmaWVkLCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZWQKK3BhdHRlcm4gc2hvd3Mgd2hldGhlciBKSVQgY29tcGlsYXRpb24gd2FzIG9yIHdhcyBub3Qgc3VjY2Vzc2Z1bC4gSWYKK1xmQmppdHZlcmlmeVxmUCBpcyBzcGVjaWZpZWQgd2l0aG91dCBcZkJqaXRcZlAsIGppdD03IGlzIGFzc3VtZWQuIElmIEpJVAorY29tcGlsYXRpb24gaXMgc3VjY2Vzc2Z1bCB3aGVuIFxmQmppdHZlcmlmeVxmUCBpcyBzZXQsIHRoZSB0ZXh0ICIoSklUKSIgaXMKK2FkZGVkIHRvIHRoZSBmaXJzdCBvdXRwdXQgbGluZSBhZnRlciBhIG1hdGNoIG9yIG5vbiBtYXRjaCB3aGVuIEpJVC1jb21waWxlZAorY29kZSB3YXMgYWN0dWFsbHkgdXNlZCBpbiB0aGUgbWF0Y2guCisuCisuCisuU1MgIlNldHRpbmcgYSBsb2NhbGUiCisucnMKKy5zcAorVGhlIFxmQi9sb2NhbGVcZlAgbW9kaWZpZXIgbXVzdCBzcGVjaWZ5IHRoZSBuYW1lIG9mIGEgbG9jYWxlLCBmb3IgZXhhbXBsZToKKy5zcAorICAvcGF0dGVybi9sb2NhbGU9ZnJfRlIKKy5zcAorVGhlIGdpdmVuIGxvY2FsZSBpcyBzZXQsIFxmQnBjcmUyX21ha2V0YWJsZXMoKVxmUCBpcyBjYWxsZWQgdG8gYnVpbGQgYSBzZXQgb2YKK2NoYXJhY3RlciB0YWJsZXMgZm9yIHRoZSBsb2NhbGUsIGFuZCB0aGlzIGlzIHRoZW4gcGFzc2VkIHRvCitcZkJwY3JlMl9jb21waWxlKClcZlAgd2hlbiBjb21waWxpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbi4gVGhlIHNhbWUgdGFibGVzCithcmUgdXNlZCB3aGVuIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgc3ViamVjdCBsaW5lcy4gVGhlIFxmQi9sb2NhbGVcZlAgbW9kaWZpZXIKK2FwcGxpZXMgb25seSB0byB0aGUgcGF0dGVybiBvbiB3aGljaCBpdCBhcHBlYXJzLCBidXQgY2FuIGJlIGdpdmVuIGluIGEKK1xmQiNwYXR0ZXJuXGZQIGNvbW1hbmQgaWYgYSBkZWZhdWx0IGlzIG5lZWRlZC4gU2V0dGluZyBhIGxvY2FsZSBhbmQgYWx0ZXJuYXRlCitjaGFyYWN0ZXIgdGFibGVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisuCisuCisuU1MgIlNob3dpbmcgcGF0dGVybiBtZW1vcnkiCisucnMKKy5zcAorVGhlIFxmQi9tZW1vcnlcZlAgbW9kaWZpZXIgY2F1c2VzIHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBtZW1vcnkgdXNlZCB0byBob2xkCit0aGUgY29tcGlsZWQgcGF0dGVybiB0byBiZSBvdXRwdXQuIFRoaXMgZG9lcyBub3QgaW5jbHVkZSB0aGUgc2l6ZSBvZiB0aGUKK1xmQnBjcmUyX2NvZGVcZlAgYmxvY2s7IGl0IGlzIGp1c3QgdGhlIGFjdHVhbCBjb21waWxlZCBkYXRhLiBJZiB0aGUgcGF0dGVybiBpcworc3Vic2VxdWVudGx5IHBhc3NlZCB0byB0aGUgSklUIGNvbXBpbGVyLCB0aGUgc2l6ZSBvZiB0aGUgSklUIGNvbXBpbGVkIGNvZGUgaXMKK2Fsc28gb3V0cHV0LiBIZXJlIGlzIGFuIGV4YW1wbGU6Cisuc3AKKyAgICByZT4gL2EoYiljL2ppdCxtZW1vcnkKKyAgTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMQorICBNZW1vcnkgYWxsb2NhdGlvbiAoSklUIGNvZGUpOiAxOTEwCisuc3AKKy4KKy4KKy5TUyAiTGltaXRpbmcgbmVzdGVkIHBhcmVudGhlc2VzIgorLnJzCisuc3AKK1RoZSBcZkJwYXJlbnNfbmVzdF9saW1pdFxmUCBtb2RpZmllciBzZXRzIGEgbGltaXQgb24gdGhlIGRlcHRoIG9mIG5lc3RlZAorcGFyZW50aGVzZXMgaW4gYSBwYXR0ZXJuLiBCcmVhY2hpbmcgdGhlIGxpbWl0IGNhdXNlcyBhIGNvbXBpbGF0aW9uIGVycm9yLgorVGhlIGRlZmF1bHQgZm9yIHRoZSBsaWJyYXJ5IGlzIHNldCB3aGVuIFBDUkUyIGlzIGJ1aWx0LCBidXQgXGZCcGNyZTJ0ZXN0XGZQCitzZXRzIGl0cyBvd24gZGVmYXVsdCBvZiAyMjAsIHdoaWNoIGlzIHJlcXVpcmVkIGZvciBydW5uaW5nIHRoZSBzdGFuZGFyZCB0ZXN0CitzdWl0ZS4KKy4KKy4KKy5TUyAiTGltaXRpbmcgdGhlIHBhdHRlcm4gbGVuZ3RoIgorLnJzCisuc3AKK1RoZSBcZkJtYXhfcGF0dGVybl9sZW5ndGhcZlAgbW9kaWZpZXIgc2V0cyBhIGxpbWl0LCBpbiBjb2RlIHVuaXRzLCB0byB0aGUKK2xlbmd0aCBvZiBwYXR0ZXJuIHRoYXQgXGZCcGNyZTJfY29tcGlsZSgpXGZQIHdpbGwgYWNjZXB0LiBCcmVhY2hpbmcgdGhlIGxpbWl0CitjYXVzZXMgYSBjb21waWxhdGlvbiBlcnJvci4gVGhlIGRlZmF1bHQgaXMgdGhlIGxhcmdlc3QgbnVtYmVyIGEgUENSRTJfU0laRQordmFyaWFibGUgY2FuIGhvbGQgKGVzc2VudGlhbGx5IHVubGltaXRlZCkuCisuCisuCisuU1MgIlVzaW5nIHRoZSBQT1NJWCB3cmFwcGVyIEFQSSIKKy5ycworLnNwCitUaGUgXGZCL3Bvc2l4XGZQIG1vZGlmaWVyIGNhdXNlcyBcZkJwY3JlMnRlc3RcZlAgdG8gY2FsbCBQQ1JFMiB2aWEgdGhlIFBPU0lYCit3cmFwcGVyIEFQSSByYXRoZXIgdGhhbiBpdHMgbmF0aXZlIEFQSS4gVGhpcyBzdXBwb3J0cyBvbmx5IHRoZSA4LWJpdCBsaWJyYXJ5LgorTm90ZSB0aGF0IGl0IGRvZXMgbm90IGltcGx5IFBPU0lYIG1hdGNoaW5nIHNlbWFudGljczsgZm9yIG1vcmUgZGV0YWlsIHNlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBvc2l4XGZQCisuXCIKK2RvY3VtZW50YXRpb24uIFdoZW4gdGhlIFBPU0lYIEFQSSBpcyBiZWluZyB1c2VkLCB0aGUgZm9sbG93aW5nIHBhdHRlcm4KK21vZGlmaWVycyBzZXQgb3B0aW9ucyBmb3IgdGhlIFxmQnJlZ2NvbXAoKVxmUCBmdW5jdGlvbjoKKy5zcAorICBjYXNlbGVzcyAgICAgICAgICAgUkVHX0lDQVNFCisgIG11bHRpbGluZSAgICAgICAgICBSRUdfTkVXTElORQorICBub19hdXRvX2NhcHR1cmUgICAgUkVHX05PU1VCCisgIGRvdGFsbCAgICAgICAgICAgICBSRUdfRE9UQUxMICAgICApCisgIHVuZ3JlZWR5ICAgICAgICAgICBSRUdfVU5HUkVFRFkgICApIFRoZXNlIG9wdGlvbnMgYXJlIG5vdCBwYXJ0IG9mCisgIHVjcCAgICAgICAgICAgICAgICBSRUdfVUNQICAgICAgICApICAgdGhlIFBPU0lYIHN0YW5kYXJkCisgIHV0ZiAgICAgICAgICAgICAgICBSRUdfVVRGOCAgICAgICApCisuc3AKK1RoZSBcZkJyZWdlcnJvcl9idWZmc2l6ZVxmUCBtb2RpZmllciBzcGVjaWZpZXMgYSBzaXplIGZvciB0aGUgZXJyb3IgYnVmZmVyIHRoYXQKK2lzIHBhc3NlZCB0byBcZkJyZWdlcnJvcigpXGZQIGluIHRoZSBldmVudCBvZiBhIGNvbXBpbGF0aW9uIGVycm9yLiBGb3IgZXhhbXBsZToKKy5zcAorICAvYWJjL3Bvc2l4LHJlZ2Vycm9yX2J1ZmZzaXplPTIwCisuc3AKK1RoaXMgcHJvdmlkZXMgYSBtZWFucyBvZiB0ZXN0aW5nIHRoZSBiZWhhdmlvdXIgb2YgXGZCcmVnZXJyb3IoKVxmUCB3aGVuIHRoZQorYnVmZmVyIGlzIHRvbyBzbWFsbCBmb3IgdGhlIGVycm9yIG1lc3NhZ2UuIElmIHRoaXMgbW9kaWZpZXIgaGFzIG5vdCBiZWVuIHNldCwgYQorbGFyZ2UgYnVmZmVyIGlzIHVzZWQuCisuUAorVGhlIFxmQmFmdGVydGV4dFxmUCBhbmQgXGZCYWxsYWZ0ZXJ0ZXh0XGZQIHN1YmplY3QgbW9kaWZpZXJzIHdvcmsgYXMgZGVzY3JpYmVkCitiZWxvdy4gQWxsIG90aGVyIG1vZGlmaWVycyBjYXVzZSBhbiBlcnJvci4KKy4KKy4KKy5TUyAiVGVzdGluZyB0aGUgc3RhY2sgZ3VhcmQgZmVhdHVyZSIKKy5ycworLnNwCitUaGUgXGZCL3N0YWNrZ3VhcmRcZlAgbW9kaWZpZXIgaXMgdXNlZCB0byB0ZXN0IHRoZSB1c2Ugb2YKK1xmQnBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZCgpXGZQLCBhIGZ1bmN0aW9uIHRoYXQgaXMgcHJvdmlkZWQgdG8KK2VuYWJsZSBzdGFjayBhdmFpbGFiaWxpdHkgdG8gYmUgY2hlY2tlZCBkdXJpbmcgY29tcGlsYXRpb24gKHNlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMmFwaVxmUAorLlwiCitkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzKS4gSWYgdGhlIG51bWJlciBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyIGlzIGdyZWF0ZXIKK3RoYW4gemVybywgXGZCcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKClcZlAgaXMgY2FsbGVkIHRvIHNldCB1cAorY2FsbGJhY2sgZnJvbSBcZkJwY3JlMl9jb21waWxlKClcZlAgdG8gYSBsb2NhbCBmdW5jdGlvbi4gVGhlIGFyZ3VtZW50IGl0CityZWNlaXZlcyBpcyB0aGUgY3VycmVudCBuZXN0aW5nIHBhcmVudGhlc2lzIGRlcHRoOyBpZiB0aGlzIGlzIGdyZWF0ZXIgdGhhbiB0aGUKK3ZhbHVlIGdpdmVuIGJ5IHRoZSBtb2RpZmllciwgbm9uLXplcm8gaXMgcmV0dXJuZWQsIGNhdXNpbmcgdGhlIGNvbXBpbGF0aW9uIHRvCitiZSBhYm9ydGVkLgorLgorLgorLlNTICJVc2luZyBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXIgdGFibGVzIgorLnJzCisuc3AKK1RoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yIHRoZSBcZkIvdGFibGVzXGZQIG1vZGlmaWVyIG11c3QgYmUgb25lIG9mIHRoZSBkaWdpdHMgMCwKKzEsIG9yIDIuIEl0IGNhdXNlcyBhIHNwZWNpZmljIHNldCBvZiBidWlsdC1pbiBjaGFyYWN0ZXIgdGFibGVzIHRvIGJlIHBhc3NlZCB0bworXGZCcGNyZTJfY29tcGlsZSgpXGZQLiBUaGlzIGlzIHVzZWQgaW4gdGhlIFBDUkUyIHRlc3RzIHRvIGNoZWNrIGJlaGF2aW91ciB3aXRoCitkaWZmZXJlbnQgY2hhcmFjdGVyIHRhYmxlcy4gVGhlIGRpZ2l0IHNwZWNpZmllcyB0aGUgdGFibGVzIGFzIGZvbGxvd3M6Cisuc3AKKyAgMCAgIGRvIG5vdCBwYXNzIGFueSBzcGVjaWFsIGNoYXJhY3RlciB0YWJsZXMKKyAgMSAgIHRoZSBkZWZhdWx0IEFTQ0lJIHRhYmxlcywgYXMgZGlzdHJpYnV0ZWQgaW4KKyAgICAgICAgcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QKKyAgMiAgIGEgc2V0IG9mIHRhYmxlcyBkZWZpbmluZyBJU08gODg1OSBjaGFyYWN0ZXJzCisuc3AKK0luIHRhYmxlIDIsIHNvbWUgY2hhcmFjdGVycyB3aG9zZSBjb2RlcyBhcmUgZ3JlYXRlciB0aGFuIDEyOCBhcmUgaWRlbnRpZmllZCBhcworbGV0dGVycywgZGlnaXRzLCBzcGFjZXMsIGV0Yy4gU2V0dGluZyBhbHRlcm5hdGUgY2hhcmFjdGVyIHRhYmxlcyBhbmQgYSBsb2NhbGUKK2FyZSBtdXR1YWxseSBleGNsdXNpdmUuCisuCisuCisuU1MgIlNldHRpbmcgY2VydGFpbiBtYXRjaCBjb250cm9scyIKKy5ycworLnNwCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBhcmUgcmVhbGx5IHN1YmplY3QgbW9kaWZpZXJzLCBhbmQgYXJlIGRlc2NyaWJlZCBiZWxvdy4KK0hvd2V2ZXIsIHRoZXkgbWF5IGJlIGluY2x1ZGVkIGluIGEgcGF0dGVybidzIG1vZGlmaWVyIGxpc3QsIGluIHdoaWNoIGNhc2UgdGhleQorYXJlIGFwcGxpZWQgdG8gZXZlcnkgc3ViamVjdCBsaW5lIHRoYXQgaXMgcHJvY2Vzc2VkIHdpdGggdGhhdCBwYXR0ZXJuLiBUaGV5IG1heQorbm90IGFwcGVhciBpbiBcZkIjcGF0dGVyblxmUCBjb21tYW5kcy4gVGhlc2UgbW9kaWZpZXJzIGRvIG5vdCBhZmZlY3QgdGhlCitjb21waWxhdGlvbiBwcm9jZXNzLgorLnNwCisgICAgICBhZnRlcnRleHQgICAgICAgICAgICAgICAgICBzaG93IHRleHQgYWZ0ZXIgbWF0Y2gKKyAgICAgIGFsbGFmdGVydGV4dCAgICAgICAgICAgICAgIHNob3cgdGV4dCBhZnRlciBjYXB0dXJlcworICAgICAgYWxsY2FwdHVyZXMgICAgICAgICAgICAgICAgc2hvdyBhbGwgY2FwdHVyZXMKKyAgICAgIGFsbHVzZWR0ZXh0ICAgICAgICAgICAgICAgIHNob3cgYWxsIGNvbnN1bHRlZCB0ZXh0CisgIC9nICBnbG9iYWwgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgbWF0Y2hpbmcKKyAgICAgIG1hcmsgICAgICAgICAgICAgICAgICAgICAgIHNob3cgbWFyayB2YWx1ZXMKKyAgICAgIHJlcGxhY2U9PHN0cmluZz4gICAgICAgICAgIHNwZWNpZnkgYSByZXBsYWNlbWVudCBzdHJpbmcKKyAgICAgIHN0YXJ0Y2hhciAgICAgICAgICAgICAgICAgIHNob3cgc3RhcnRpbmcgY2hhcmFjdGVyIHdoZW4gcmVsZXZhbnQKKyAgICAgIHN1YnN0aXR1dGVfZXh0ZW5kZWQgICAgICAgIHVzZSBQQ1JFMl9TVUJTVElUVVRFX0VYVEVOREVECisgICAgICBzdWJzdGl0dXRlX292ZXJmbG93X2xlbmd0aCB1c2UgUENSRTJfU1VCU1RJVFVURV9PVkVSRkxPV19MRU5HVEgKKyAgICAgIHN1YnN0aXR1dGVfdW5rbm93bl91bnNldCAgIHVzZSBQQ1JFMl9TVUJTVElUVVRFX1VOS05PV05fVU5TRVQKKyAgICAgIHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkgICAgIHVzZSBQQ1JFMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZCisuc3AKK1RoZXNlIG1vZGlmaWVycyBtYXkgbm90IGFwcGVhciBpbiBhIFxmQiNwYXR0ZXJuXGZQIGNvbW1hbmQuIElmIHlvdSB3YW50IHRoZW0gYXMKK2RlZmF1bHRzLCBzZXQgdGhlbSBpbiBhIFxmQiNzdWJqZWN0XGZQIGNvbW1hbmQuCisuCisuCisuU1MgIlNhdmluZyBhIGNvbXBpbGVkIHBhdHRlcm4iCisucnMKKy5zcAorV2hlbiBhIHBhdHRlcm4gd2l0aCB0aGUgXGZCcHVzaFxmUCBtb2RpZmllciBpcyBzdWNjZXNzZnVsbHkgY29tcGlsZWQsIGl0IGlzCitwdXNoZWQgb250byBhIHN0YWNrIG9mIGNvbXBpbGVkIHBhdHRlcm5zLCBhbmQgXGZCcGNyZTJ0ZXN0XGZQIGV4cGVjdHMgdGhlIG5leHQKK2xpbmUgdG8gY29udGFpbiBhIG5ldyBwYXR0ZXJuIChvciBhIGNvbW1hbmQpIGluc3RlYWQgb2YgYSBzdWJqZWN0IGxpbmUuIFRoaXMKK2ZhY2lsaXR5IGlzIHVzZWQgd2hlbiBzYXZpbmcgY29tcGlsZWQgcGF0dGVybnMgdG8gYSBmaWxlLCBhcyBkZXNjcmliZWQgaW4gdGhlCitzZWN0aW9uIGVudGl0bGVkICJTYXZpbmcgYW5kIHJlc3RvcmluZyBjb21waWxlZCBwYXR0ZXJucyIKKy5cIiBIVE1MIDxhIGhyZWY9IiNzYXZlcmVzdG9yZSI+CisuXCIgPC9hPgorYmVsb3cuCisuXCIKK1RoZSBcZkJwdXNoXGZQIG1vZGlmaWVyIGlzIGluY29tcGF0aWJsZSB3aXRoIGNvbXBpbGF0aW9uIG1vZGlmaWVycyBzdWNoIGFzCitcZkJnbG9iYWxcZlAgdGhhdCBhY3QgYXQgbWF0Y2ggdGltZS4gQW55IHRoYXQgYXJlIHNwZWNpZmllZCBhcmUgaWdub3JlZCwgd2l0aCBhCit3YXJuaW5nIG1lc3NhZ2UsIGV4Y2VwdCBmb3IgXGZCcmVwbGFjZVxmUCwgd2hpY2ggY2F1c2VzIGFuIGVycm9yLiBOb3RlIHRoYXQsCitcZkJqaXR2ZXJpZnlcZlAsIHdoaWNoIGlzIGFsbG93ZWQsIGRvZXMgbm90IGNhcnJ5IHRocm91Z2ggdG8gYW55IHN1YnNlcXVlbnQKK21hdGNoaW5nIHRoYXQgdXNlcyB0aGlzIHBhdHRlcm4uCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJzdWJqZWN0bW9kaWZpZXJzIj48L2E+CisuU0ggIlNVQkpFQ1QgTU9ESUZJRVJTIgorLnJzCisuc3AKK1RoZSBtb2RpZmllcnMgdGhhdCBjYW4gYXBwZWFyIGluIHN1YmplY3QgbGluZXMgYW5kIHRoZSBcZkIjc3ViamVjdFxmUAorY29tbWFuZCBhcmUgb2YgdHdvIHR5cGVzLgorLgorLgorLlNTICJTZXR0aW5nIG1hdGNoIG9wdGlvbnMiCisucnMKKy5zcAorVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgc2V0IG9wdGlvbnMgZm9yIFxmQnBjcmUyX21hdGNoKClcZlAgb3IKK1xmQnBjcmUyX2RmYV9tYXRjaCgpXGZQLiBTZWUKKy5cIiBIUkVGCitcZkJwY3JlYXBpXGZQCisuXCIKK2ZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZWlyIGVmZmVjdHMuCisuc3AKKyAgICAgIGFuY2hvcmVkICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX0FOQ0hPUkVECisgICAgICBkZmFfcmVzdGFydCAgICAgICAgICAgICAgIHNldCBQQ1JFMl9ERkFfUkVTVEFSVAorICAgICAgZGZhX3Nob3J0ZXN0ICAgICAgICAgICAgICBzZXQgUENSRTJfREZBX1NIT1JURVNUCisgICAgICBub191dGZfY2hlY2sgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT19VVEZfQ0hFQ0sKKyAgICAgIG5vdGJvbCAgICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX05PVEJPTAorICAgICAgbm90ZW1wdHkgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfTk9URU1QVFkKKyAgICAgIG5vdGVtcHR5X2F0c3RhcnQgICAgICAgICAgc2V0IFBDUkUyX05PVEVNUFRZX0FUU1RBUlQKKyAgICAgIG5vdGVvbCAgICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX05PVEVPTAorICAgICAgcGFydGlhbF9oYXJkIChvciBwaCkgICAgICBzZXQgUENSRTJfUEFSVElBTF9IQVJECisgICAgICBwYXJ0aWFsX3NvZnQgKG9yIHBzKSAgICAgIHNldCBQQ1JFMl9QQVJUSUFMX1NPRlQKKy5zcAorVGhlIHBhcnRpYWwgbWF0Y2hpbmcgbW9kaWZpZXJzIGFyZSBwcm92aWRlZCB3aXRoIGFiYnJldmlhdGlvbnMgYmVjYXVzZSB0aGV5CithcHBlYXIgZnJlcXVlbnRseSBpbiB0ZXN0cy4KKy5QCitJZiB0aGUgXGZCL3Bvc2l4XGZQIG1vZGlmaWVyIHdhcyBwcmVzZW50IG9uIHRoZSBwYXR0ZXJuLCBjYXVzaW5nIHRoZSBQT1NJWAord3JhcHBlciBBUEkgdG8gYmUgdXNlZCwgdGhlIG9ubHkgb3B0aW9uLXNldHRpbmcgbW9kaWZpZXJzIHRoYXQgaGF2ZSBhbnkgZWZmZWN0CithcmUgXGZCbm90Ym9sXGZQLCBcZkJub3RlbXB0eVxmUCwgYW5kIFxmQm5vdGVvbFxmUCwgY2F1c2luZyBSRUdfTk9UQk9MLAorUkVHX05PVEVNUFRZLCBhbmQgUkVHX05PVEVPTCwgcmVzcGVjdGl2ZWx5LCB0byBiZSBwYXNzZWQgdG8gXGZCcmVnZXhlYygpXGZQLgorQW55IG90aGVyIG1vZGlmaWVycyBjYXVzZSBhbiBlcnJvci4KKy4KKy4KKy5TUyAiU2V0dGluZyBtYXRjaCBjb250cm9scyIKKy5ycworLnNwCitUaGUgZm9sbG93aW5nIG1vZGlmaWVycyBhZmZlY3QgdGhlIG1hdGNoaW5nIHByb2Nlc3Mgb3IgcmVxdWVzdCBhZGRpdGlvbmFsCitpbmZvcm1hdGlvbi4gU29tZSBvZiB0aGVtIG1heSBhbHNvIGJlIHNwZWNpZmllZCBvbiBhIHBhdHRlcm4gbGluZSAoc2VlIGFib3ZlKSwKK2luIHdoaWNoIGNhc2UgdGhleSBhcHBseSB0byBldmVyeSBzdWJqZWN0IGxpbmUgdGhhdCBpcyBtYXRjaGVkIGFnYWluc3QgdGhhdAorcGF0dGVybi4KKy5zcAorICAgICAgYWZ0ZXJ0ZXh0ICAgICAgICAgICAgICAgICAgc2hvdyB0ZXh0IGFmdGVyIG1hdGNoCisgICAgICBhbGxhZnRlcnRleHQgICAgICAgICAgICAgICBzaG93IHRleHQgYWZ0ZXIgY2FwdHVyZXMKKyAgICAgIGFsbGNhcHR1cmVzICAgICAgICAgICAgICAgIHNob3cgYWxsIGNhcHR1cmVzCisgICAgICBhbGx1c2VkdGV4dCAgICAgICAgICAgICAgICBzaG93IGFsbCBjb25zdWx0ZWQgdGV4dCAobm9uLUpJVCBvbmx5KQorICAgICAgYWx0Z2xvYmFsICAgICAgICAgICAgICAgICAgYWx0ZXJuYXRpdmUgZ2xvYmFsIG1hdGNoaW5nCisgICAgICBjYWxsb3V0X2NhcHR1cmUgICAgICAgICAgICBzaG93IGNhcHR1cmVzIGF0IGNhbGxvdXQgdGltZQorICAgICAgY2FsbG91dF9kYXRhPTxuPiAgICAgICAgICAgc2V0IGEgdmFsdWUgdG8gcGFzcyB2aWEgY2FsbG91dHMKKyAgICAgIGNhbGxvdXRfZmFpbD08bj5bOjxtPl0gICAgIGNvbnRyb2wgY2FsbG91dCBmYWlsdXJlCisgICAgICBjYWxsb3V0X25vbmUgICAgICAgICAgICAgICBkbyBub3Qgc3VwcGx5IGEgY2FsbG91dCBmdW5jdGlvbgorICAgICAgY29weT08bnVtYmVyIG9yIG5hbWU+ICAgICAgY29weSBjYXB0dXJlZCBzdWJzdHJpbmcKKyAgICAgIGRmYSAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUAorICAgICAgZmluZF9saW1pdHMgICAgICAgICAgICAgICAgZmluZCBtYXRjaCBhbmQgcmVjdXJzaW9uIGxpbWl0cworICAgICAgZ2V0PTxudW1iZXIgb3IgbmFtZT4gICAgICAgZXh0cmFjdCBjYXB0dXJlZCBzdWJzdHJpbmcKKyAgICAgIGdldGFsbCAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3QgYWxsIGNhcHR1cmVkIHN1YnN0cmluZ3MKKyAgL2cgIGdsb2JhbCAgICAgICAgICAgICAgICAgICAgIGdsb2JhbCBtYXRjaGluZworICAgICAgaml0c3RhY2s9PG4+ICAgICAgICAgICAgICAgc2V0IHNpemUgb2YgSklUIHN0YWNrCisgICAgICBtYXJrICAgICAgICAgICAgICAgICAgICAgICBzaG93IG1hcmsgdmFsdWVzCisgICAgICBtYXRjaF9saW1pdD08bj4gICAgICAgICAgICBzZXQgYSBtYXRjaCBsaW1pdAorICAgICAgbWVtb3J5ICAgICAgICAgICAgICAgICAgICAgc2hvdyBtZW1vcnkgdXNhZ2UKKyAgICAgIG51bGxfY29udGV4dCAgICAgICAgICAgICAgIG1hdGNoIHdpdGggYSBOVUxMIGNvbnRleHQKKyAgICAgIG9mZnNldD08bj4gICAgICAgICAgICAgICAgIHNldCBzdGFydGluZyBvZmZzZXQKKyAgICAgIG9mZnNldF9saW1pdD08bj4gICAgICAgICAgIHNldCBvZmZzZXQgbGltaXQKKyAgICAgIG92ZWN0b3I9PG4+ICAgICAgICAgICAgICAgIHNldCBzaXplIG9mIG91dHB1dCB2ZWN0b3IKKyAgICAgIHJlY3Vyc2lvbl9saW1pdD08bj4gICAgICAgIHNldCBhIHJlY3Vyc2lvbiBsaW1pdAorICAgICAgcmVwbGFjZT08c3RyaW5nPiAgICAgICAgICAgc3BlY2lmeSBhIHJlcGxhY2VtZW50IHN0cmluZworICAgICAgc3RhcnRjaGFyICAgICAgICAgICAgICAgICAgc2hvdyBzdGFydGNoYXIgd2hlbiByZWxldmFudAorICAgICAgc3RhcnRvZmZzZXQ9PG4+ICAgICAgICAgICAgc2FtZSBhcyBvZmZzZXQ9PG4+CisgICAgICBzdWJzdGl0dXRlX2V4dGVkZGVkICAgICAgICB1c2UgUENSRTJfU1VCU1RJVFVURV9FWFRFTkRFRAorICAgICAgc3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGggdXNlIFBDUkUyX1NVQlNUSVRVVEVfT1ZFUkZMT1dfTEVOR1RICisgICAgICBzdWJzdGl0dXRlX3Vua25vd25fdW5zZXQgICB1c2UgUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUCisgICAgICBzdWJzdGl0dXRlX3Vuc2V0X2VtcHR5ICAgICB1c2UgUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWQorICAgICAgemVyb190ZXJtaW5hdGUgICAgICAgICAgICAgcGFzcyB0aGUgc3ViamVjdCBhcyB6ZXJvLXRlcm1pbmF0ZWQKKy5zcAorVGhlIGVmZmVjdHMgb2YgdGhlc2UgbW9kaWZpZXJzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKy4KKy4KKy5TUyAiU2hvd2luZyBtb3JlIHRleHQiCisucnMKKy5zcAorVGhlIFxmQmFmdGVydGV4dFxmUCBtb2RpZmllciByZXF1ZXN0cyB0aGF0IGFzIHdlbGwgYXMgb3V0cHV0dGluZyB0aGUgcGFydCBvZgordGhlIHN1YmplY3Qgc3RyaW5nIHRoYXQgbWF0Y2hlZCB0aGUgZW50aXJlIHBhdHRlcm4sIFxmQnBjcmUydGVzdFxmUCBzaG91bGQgaW4KK2FkZGl0aW9uIG91dHB1dCB0aGUgcmVtYWluZGVyIG9mIHRoZSBzdWJqZWN0IHN0cmluZy4gVGhpcyBpcyB1c2VmdWwgZm9yIHRlc3RzCit3aGVyZSB0aGUgc3ViamVjdCBjb250YWlucyBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlIHNhbWUgc3Vic3RyaW5nLiBUaGUKK1xmQmFsbGFmdGVydGV4dFxmUCBtb2RpZmllciByZXF1ZXN0cyB0aGUgc2FtZSBhY3Rpb24gZm9yIGNhcHR1cmVkIHN1YnN0cmluZ3MgYXMKK3dlbGwgYXMgdGhlIG1haW4gbWF0Y2hlZCBzdWJzdHJpbmcuIEluIGVhY2ggY2FzZSB0aGUgcmVtYWluZGVyIGlzIG91dHB1dCBvbiB0aGUKK2ZvbGxvd2luZyBsaW5lIHdpdGggYSBwbHVzIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlIGNhcHR1cmUgbnVtYmVyLgorLlAKK1RoZSBcZkJhbGx1c2VkdGV4dFxmUCBtb2RpZmllciByZXF1ZXN0cyB0aGF0IGFsbCB0aGUgdGV4dCB0aGF0IHdhcyBjb25zdWx0ZWQKK2R1cmluZyBhIHN1Y2Nlc3NmdWwgcGF0dGVybiBtYXRjaCBieSB0aGUgaW50ZXJwcmV0ZXIgc2hvdWxkIGJlIHNob3duLiBUaGlzCitmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpJVCBtYXRjaGluZywgYW5kIGlmIHJlcXVlc3RlZCB3aXRoIEpJVCBpdCBpcworaWdub3JlZCAod2l0aCBhIHdhcm5pbmcgbWVzc2FnZSkuIFNldHRpbmcgdGhpcyBtb2RpZmllciBhZmZlY3RzIHRoZSBvdXRwdXQgaWYKK3RoZXJlIGlzIGEgbG9va2JlaGluZCBhdCB0aGUgc3RhcnQgb2YgYSBtYXRjaCwgb3IgYSBsb29rYWhlYWQgYXQgdGhlIGVuZCwgb3IgaWYKK1xlSyBpcyB1c2VkIGluIHRoZSBwYXR0ZXJuLiBDaGFyYWN0ZXJzIHRoYXQgcHJlY2VkZSBvciBmb2xsb3cgdGhlIHN0YXJ0IGFuZCBlbmQKK29mIHRoZSBhY3R1YWwgbWF0Y2ggYXJlIGluZGljYXRlZCBpbiB0aGUgb3V0cHV0IGJ5ICc8JyBvciAnPicgY2hhcmFjdGVycwordW5kZXJuZWF0aCB0aGVtLiBIZXJlIGlzIGFuIGV4YW1wbGU6Cisuc3AKKyAgICByZT4gLyg/PD1wcXIpYWJjKD89eHl6KS8KKyAgZGF0YT4gMTIzcHFyYWJjeHl6NDU2XGU9YWxsdXNlZHRleHQKKyAgIDA6IHBxcmFiY3h5egorICAgICAgPDw8ICAgPj4+Cisuc3AKK1RoaXMgc2hvd3MgdGhhdCB0aGUgbWF0Y2hlZCBzdHJpbmcgaXMgImFiYyIsIHdpdGggdGhlIHByZWNlZGluZyBhbmQgZm9sbG93aW5nCitzdHJpbmdzICJwcXIiIGFuZCAieHl6IiBoYXZpbmcgYmVlbiBjb25zdWx0ZWQgZHVyaW5nIHRoZSBtYXRjaCAod2hlbiBwcm9jZXNzaW5nCit0aGUgYXNzZXJ0aW9ucykuCisuUAorVGhlIFxmQnN0YXJ0Y2hhclxmUCBtb2RpZmllciByZXF1ZXN0cyB0aGF0IHRoZSBzdGFydGluZyBjaGFyYWN0ZXIgZm9yIHRoZSBtYXRjaAorYmUgaW5kaWNhdGVkLCBpZiBpdCBpcyBkaWZmZXJlbnQgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaGVkIHN0cmluZy4gVGhlIG9ubHkKK3RpbWUgd2hlbiB0aGlzIG9jY3VycyBpcyB3aGVuIFxlSyBoYXMgYmVlbiBwcm9jZXNzZWQgYXMgcGFydCBvZiB0aGUgbWF0Y2guIEluCit0aGlzIHNpdHVhdGlvbiwgdGhlIG91dHB1dCBmb3IgdGhlIG1hdGNoZWQgc3RyaW5nIGlzIGRpc3BsYXllZCBmcm9tIHRoZQorc3RhcnRpbmcgY2hhcmFjdGVyIGluc3RlYWQgb2YgZnJvbSB0aGUgbWF0Y2ggcG9pbnQsIHdpdGggY2lyY3VtZmxleCBjaGFyYWN0ZXJzCit1bmRlciB0aGUgZWFybGllciBjaGFyYWN0ZXJzLiBGb3IgZXhhbXBsZToKKy5zcAorICAgIHJlPiAvYWJjXGVLeHl6LworICBkYXRhPiBhYmN4eXpcZT1zdGFydGNoYXIKKyAgIDA6IGFiY3h5egorICAgICAgXl5eCisuc3AKK1VubGlrZSBcZkJhbGx1c2VkdGV4dFxmUCwgdGhlIFxmQnN0YXJ0Y2hhclxmUCBtb2RpZmllciBjYW4gYmUgdXNlZCB3aXRoIEpJVC4KK0hvd2V2ZXIsIHRoZXNlIHR3byBtb2RpZmllcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKy4KKy4KKy5TUyAiU2hvd2luZyB0aGUgdmFsdWUgb2YgYWxsIGNhcHR1cmUgZ3JvdXBzIgorLnJzCisuc3AKK1RoZSBcZkJhbGxjYXB0dXJlc1xmUCBtb2RpZmllciByZXF1ZXN0cyB0aGF0IHRoZSB2YWx1ZXMgb2YgYWxsIHBvdGVudGlhbAorY2FwdHVyZWQgcGFyZW50aGVzZXMgYmUgb3V0cHV0IGFmdGVyIGEgbWF0Y2guIEJ5IGRlZmF1bHQsIG9ubHkgdGhvc2UgdXAgdG8gdGhlCitoaWdoZXN0IG9uZSBhY3R1YWxseSB1c2VkIGluIHRoZSBtYXRjaCBhcmUgb3V0cHV0IChjb3JyZXNwb25kaW5nIHRvIHRoZSByZXR1cm4KK2NvZGUgZnJvbSBcZkJwY3JlMl9tYXRjaCgpXGZQKS4gR3JvdXBzIHRoYXQgZGlkIG5vdCB0YWtlIHBhcnQgaW4gdGhlIG1hdGNoCithcmUgb3V0cHV0IGFzICI8dW5zZXQ+Ii4KKy4KKy4KKy5TUyAiVGVzdGluZyBjYWxsb3V0cyIKKy5ycworLnNwCitBIGNhbGxvdXQgZnVuY3Rpb24gaXMgc3VwcGxpZWQgd2hlbiBcZkJwY3JlMnRlc3RcZlAgY2FsbHMgdGhlIGxpYnJhcnkgbWF0Y2hpbmcKK2Z1bmN0aW9ucywgdW5sZXNzIFxmQmNhbGxvdXRfbm9uZVxmUCBpcyBzcGVjaWZpZWQuIElmIFxmQmNhbGxvdXRfY2FwdHVyZVxmUCBpcworc2V0LCB0aGUgY3VycmVudCBjYXB0dXJlZCBncm91cHMgYXJlIG91dHB1dCB3aGVuIGEgY2FsbG91dCBvY2N1cnMuCisuUAorVGhlIFxmQmNhbGxvdXRfZmFpbFxmUCBtb2RpZmllciBjYW4gYmUgZ2l2ZW4gb25lIG9yIHR3byBudW1iZXJzLiBJZiB0aGVyZSBpcworb25seSBvbmUgbnVtYmVyLCAxIGlzIHJldHVybmVkIGluc3RlYWQgb2YgMCB3aGVuIGEgY2FsbG91dCBvZiB0aGF0IG51bWJlciBpcworcmVhY2hlZC4gSWYgdHdvIG51bWJlcnMgYXJlIGdpdmVuLCAxIGlzIHJldHVybmVkIHdoZW4gY2FsbG91dCA8bj4gaXMgcmVhY2hlZAorZm9yIHRoZSA8bT50aCB0aW1lLiBOb3RlIHRoYXQgY2FsbG91dHMgd2l0aCBzdHJpbmcgYXJndW1lbnRzIGFyZSBhbHdheXMgZ2l2ZW4KK3RoZSBudW1iZXIgemVyby4gU2VlICJDYWxsb3V0cyIgYmVsb3cgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIG91dHB1dCB3aGVuIGEKK2NhbGxvdXQgaXQgdGFrZW4uCisuUAorVGhlIFxmQmNhbGxvdXRfZGF0YVxmUCBtb2RpZmllciBjYW4gYmUgZ2l2ZW4gYW4gdW5zaWduZWQgb3IgYSBuZWdhdGl2ZSBudW1iZXIuCitUaGlzIGlzIHNldCBhcyB0aGUgInVzZXIgZGF0YSIgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIG1hdGNoaW5nIGZ1bmN0aW9uLCBhbmQKK3Bhc3NlZCBiYWNrIHdoZW4gdGhlIGNhbGxvdXQgZnVuY3Rpb24gaXMgaW52b2tlZC4gQW55IHZhbHVlIG90aGVyIHRoYW4gemVybyBpcwordXNlZCBhcyBhIHJldHVybiBmcm9tIFxmQnBjcmUydGVzdFxmUCdzIGNhbGxvdXQgZnVuY3Rpb24uCisuCisuCisuU1MgIkZpbmRpbmcgYWxsIG1hdGNoZXMgaW4gYSBzdHJpbmciCisucnMKKy5zcAorU2VhcmNoaW5nIGZvciBhbGwgcG9zc2libGUgbWF0Y2hlcyB3aXRoaW4gYSBzdWJqZWN0IGNhbiBiZSByZXF1ZXN0ZWQgYnkgdGhlCitcZkJnbG9iYWxcZlAgb3IgXGZCL2FsdGdsb2JhbFxmUCBtb2RpZmllci4gQWZ0ZXIgZmluZGluZyBhIG1hdGNoLCB0aGUgbWF0Y2hpbmcKK2Z1bmN0aW9uIGlzIGNhbGxlZCBhZ2FpbiB0byBzZWFyY2ggdGhlIHJlbWFpbmRlciBvZiB0aGUgc3ViamVjdC4gVGhlIGRpZmZlcmVuY2UKK2JldHdlZW4gXGZCZ2xvYmFsXGZQIGFuZCBcZkJhbHRnbG9iYWxcZlAgaXMgdGhhdCB0aGUgZm9ybWVyIHVzZXMgdGhlCitcZklzdGFydF9vZmZzZXRcZlAgYXJndW1lbnQgdG8gXGZCcGNyZTJfbWF0Y2goKVxmUCBvciBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUAordG8gc3RhcnQgc2VhcmNoaW5nIGF0IGEgbmV3IHBvaW50IHdpdGhpbiB0aGUgZW50aXJlIHN0cmluZyAod2hpY2ggaXMgd2hhdCBQZXJsCitkb2VzKSwgd2hlcmVhcyB0aGUgbGF0dGVyIHBhc3NlcyBvdmVyIGEgc2hvcnRlbmVkIHN1YmplY3QuIFRoaXMgbWFrZXMgYQorZGlmZmVyZW5jZSB0byB0aGUgbWF0Y2hpbmcgcHJvY2VzcyBpZiB0aGUgcGF0dGVybiBiZWdpbnMgd2l0aCBhIGxvb2tiZWhpbmQKK2Fzc2VydGlvbiAoaW5jbHVkaW5nIFxlYiBvciBcZUIpLgorLlAKK0lmIGFuIGVtcHR5IHN0cmluZyBpcyBtYXRjaGVkLCB0aGUgbmV4dCBtYXRjaCBpcyBkb25lIHdpdGggdGhlCitQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIGFuZCBQQ1JFMl9BTkNIT1JFRCBmbGFncyBzZXQsIGluIG9yZGVyIHRvIHNlYXJjaCBmb3IKK2Fub3RoZXIsIG5vbi1lbXB0eSwgbWF0Y2ggYXQgdGhlIHNhbWUgcG9pbnQgaW4gdGhlIHN1YmplY3QuIElmIHRoaXMgbWF0Y2gKK2ZhaWxzLCB0aGUgc3RhcnQgb2Zmc2V0IGlzIGFkdmFuY2VkLCBhbmQgdGhlIG5vcm1hbCBtYXRjaCBpcyByZXRyaWVkLiBUaGlzCitpbWl0YXRlcyB0aGUgd2F5IFBlcmwgaGFuZGxlcyBzdWNoIGNhc2VzIHdoZW4gdXNpbmcgdGhlIFxmQi9nXGZQIG1vZGlmaWVyIG9yCit0aGUgXGZCc3BsaXQoKVxmUCBmdW5jdGlvbi4gTm9ybWFsbHksIHRoZSBzdGFydCBvZmZzZXQgaXMgYWR2YW5jZWQgYnkgb25lCitjaGFyYWN0ZXIsIGJ1dCBpZiB0aGUgbmV3bGluZSBjb252ZW50aW9uIHJlY29nbml6ZXMgQ1JMRiBhcyBhIG5ld2xpbmUsIGFuZCB0aGUKK2N1cnJlbnQgY2hhcmFjdGVyIGlzIENSIGZvbGxvd2VkIGJ5IExGLCBhbiBhZHZhbmNlIG9mIHR3byBjaGFyYWN0ZXJzIG9jY3Vycy4KKy4KKy4KKy5TUyAiVGVzdGluZyBzdWJzdHJpbmcgZXh0cmFjdGlvbiBmdW5jdGlvbnMiCisucnMKKy5zcAorVGhlIFxmQmNvcHlcZlAgYW5kIFxmQmdldFxmUCBtb2RpZmllcnMgY2FuIGJlIHVzZWQgdG8gdGVzdCB0aGUKK1xmQnBjcmUyX3N1YnN0cmluZ19jb3B5X3h4eCgpXGZQIGFuZCBcZkJwY3JlMl9zdWJzdHJpbmdfZ2V0X3h4eCgpXGZQIGZ1bmN0aW9ucy4KK1RoZXkgY2FuIGJlIGdpdmVuIG1vcmUgdGhhbiBvbmNlLCBhbmQgZWFjaCBjYW4gc3BlY2lmeSBhIGdyb3VwIG5hbWUgb3IgbnVtYmVyLAorZm9yIGV4YW1wbGU6Cisuc3AKKyAgIGFiY2RcZT1jb3B5PTEsY29weT0zLGdldD1HMQorLnNwCitJZiB0aGUgXGZCI3N1YmplY3RcZlAgY29tbWFuZCBpcyB1c2VkIHRvIHNldCBkZWZhdWx0IGNvcHkgYW5kL29yIGdldCBsaXN0cywKK3RoZXNlIGNhbiBiZSB1bnNldCBieSBzcGVjaWZ5aW5nIGEgbmVnYXRpdmUgbnVtYmVyIHRvIGNhbmNlbCBhbGwgbnVtYmVyZWQKK2dyb3VwcyBhbmQgYW4gZW1wdHkgbmFtZSB0byBjYW5jZWwgYWxsIG5hbWVkIGdyb3Vwcy4KKy5QCitUaGUgXGZCZ2V0YWxsXGZQIG1vZGlmaWVyIHRlc3RzIFxmQnBjcmUyX3N1YnN0cmluZ19saXN0X2dldCgpXGZQLCB3aGljaAorZXh0cmFjdHMgYWxsIGNhcHR1cmVkIHN1YnN0cmluZ3MuCisuUAorSWYgdGhlIHN1YmplY3QgbGluZSBpcyBzdWNjZXNzZnVsbHkgbWF0Y2hlZCwgdGhlIHN1YnN0cmluZ3MgZXh0cmFjdGVkIGJ5IHRoZQorY29udmVuaWVuY2UgZnVuY3Rpb25zIGFyZSBvdXRwdXQgd2l0aCBDLCBHLCBvciBMIGFmdGVyIHRoZSBzdHJpbmcgbnVtYmVyCitpbnN0ZWFkIG9mIGEgY29sb24uIFRoaXMgaXMgaW4gYWRkaXRpb24gdG8gdGhlIG5vcm1hbCBmdWxsIGxpc3QuIFRoZSBzdHJpbmcKK2xlbmd0aCAodGhhdCBpcywgdGhlIHJldHVybiBmcm9tIHRoZSBleHRyYWN0aW9uIGZ1bmN0aW9uKSBpcyBnaXZlbiBpbgorcGFyZW50aGVzZXMgYWZ0ZXIgZWFjaCBzdWJzdHJpbmcsIGZvbGxvd2VkIGJ5IHRoZSBuYW1lIHdoZW4gdGhlIGV4dHJhY3Rpb24gd2FzCitieSBuYW1lLgorLgorLgorLlNTICJUZXN0aW5nIHRoZSBzdWJzdGl0dXRpb24gZnVuY3Rpb24iCisucnMKKy5zcAorSWYgdGhlIFxmQnJlcGxhY2VcZlAgbW9kaWZpZXIgaXMgc2V0LCB0aGUgXGZCcGNyZTJfc3Vic3RpdHV0ZSgpXGZQIGZ1bmN0aW9uIGlzCitjYWxsZWQgaW5zdGVhZCBvZiBvbmUgb2YgdGhlIG1hdGNoaW5nIGZ1bmN0aW9ucy4gTm90ZSB0aGF0IHJlcGxhY2VtZW50IHN0cmluZ3MKK2Nhbm5vdCBjb250YWluIGNvbW1hcywgYmVjYXVzZSBhIGNvbW1hIHNpZ25pZmllcyB0aGUgZW5kIG9mIGEgbW9kaWZpZXIuIFRoaXMgaXMKK25vdCB0aG91Z2h0IHRvIGJlIGFuIGlzc3VlIGluIGEgdGVzdCBwcm9ncmFtLgorLlAKK1VubGlrZSBzdWJqZWN0IHN0cmluZ3MsIFxmQnBjcmUydGVzdFxmUCBkb2VzIG5vdCBwcm9jZXNzIHJlcGxhY2VtZW50IHN0cmluZ3MKK2ZvciBlc2NhcGUgc2VxdWVuY2VzLiBJbiBVVEYgbW9kZSwgYSByZXBsYWNlbWVudCBzdHJpbmcgaXMgY2hlY2tlZCB0byBzZWUgaWYgaXQKK2lzIGEgdmFsaWQgVVRGLTggc3RyaW5nLiBJZiBzbywgaXQgaXMgY29ycmVjdGx5IGNvbnZlcnRlZCB0byBhIFVURiBzdHJpbmcgb2YKK3RoZSBhcHByb3ByaWF0ZSBjb2RlIHVuaXQgd2lkdGguIElmIGl0IGlzIG5vdCBhIHZhbGlkIFVURi04IHN0cmluZywgdGhlCitpbmRpdmlkdWFsIGNvZGUgdW5pdHMgYXJlIGNvcGllZCBkaXJlY3RseS4gVGhpcyBwcm92aWRlcyBhIG1lYW5zIG9mIHBhc3NpbmcgYW4KK2ludmFsaWQgVVRGLTggc3RyaW5nIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorLlAKK1RoZSBmb2xsb3dpbmcgbW9kaWZpZXJzIHNldCBvcHRpb25zIChpbiBhZGRpdGlvbmFsIHRvIHRoZSBub3JtYWwgbWF0Y2ggb3B0aW9ucykKK2ZvciBcZkJwY3JlMl9zdWJzdGl0dXRlKClcZlA6Cisuc3AKKyAgZ2xvYmFsICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NVQlNUSVRVVEVfR0xPQkFMCisgIHN1YnN0aXR1dGVfZXh0ZW5kZWQgICAgICAgICBQQ1JFMl9TVUJTVElUVVRFX0VYVEVOREVECisgIHN1YnN0aXR1dGVfb3ZlcmZsb3dfbGVuZ3RoICBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSAorICBzdWJzdGl0dXRlX3Vua25vd25fdW5zZXQgICAgUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUCisgIHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkgICAgICBQQ1JFMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZCisuc3AKKy5QCitBZnRlciBhIHN1Y2Nlc3NmdWwgc3Vic3RpdHV0aW9uLCB0aGUgbW9kaWZpZWQgc3RyaW5nIGlzIG91dHB1dCwgcHJlY2VkZWQgYnkgdGhlCitudW1iZXIgb2YgcmVwbGFjZW1lbnRzLiBUaGlzIG1heSBiZSB6ZXJvIGlmIHRoZXJlIHdlcmUgbm8gbWF0Y2hlcy4gSGVyZSBpcyBhCitzaW1wbGUgZXhhbXBsZSBvZiBhIHN1YnN0aXR1dGlvbiB0ZXN0OgorLnNwCisgIC9hYmMvcmVwbGFjZT14eHgKKyAgICAgID1hYmM9YWJjPQorICAgMTogPXh4eD1hYmM9CisgICAgICA9YWJjPWFiYz1cZT1nbG9iYWwKKyAgIDI6ID14eHg9eHh4PQorLnNwCitTdWJqZWN0IGFuZCByZXBsYWNlbWVudCBzdHJpbmdzIHNob3VsZCBiZSBrZXB0IHJlbGF0aXZlbHkgc2hvcnQgKGZld2VyIHRoYW4gMjU2CitjaGFyYWN0ZXJzKSBmb3Igc3Vic3RpdHV0aW9uIHRlc3RzLCBhcyBmaXhlZC1zaXplIGJ1ZmZlcnMgYXJlIHVzZWQuIFRvIG1ha2UgaXQKK2Vhc3kgdG8gdGVzdCBmb3IgYnVmZmVyIG92ZXJmbG93LCBpZiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nIHN0YXJ0cyB3aXRoIGEKK251bWJlciBpbiBzcXVhcmUgYnJhY2tldHMsIHRoYXQgbnVtYmVyIGlzIHBhc3NlZCB0byBcZkJwY3JlMl9zdWJzdGl0dXRlKClcZlAgYXMKK3RoZSBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLCB3aXRoIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgc3RhcnRpbmcgYXQgdGhlIG5leHQKK2NoYXJhY3Rlci4gSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgdGVzdHMgdGhlIGVkZ2UgY2FzZToKKy5zcAorICAvYWJjLworICAgICAgMTIzYWJjMTIzXGU9cmVwbGFjZT1bMTBdWFlaCisgICAxOiAxMjNYWVoxMjMKKyAgICAgIDEyM2FiYzEyM1xlPXJlcGxhY2U9WzldWFlaCisgIEZhaWxlZDogZXJyb3IgLTQ3OiBubyBtb3JlIG1lbW9yeQorLnNwCitUaGUgZGVmYXVsdCBhY3Rpb24gb2YgXGZCcGNyZTJfc3Vic3RpdHV0ZSgpXGZQIGlzIHRvIHJldHVybgorUENSRTJfRVJST1JfTk9NRU1PUlkgd2hlbiB0aGUgb3V0cHV0IGJ1ZmZlciBpcyB0b28gc21hbGwuIEhvd2V2ZXIsIGlmIHRoZQorUENSRTJfU1VCU1RJVFVURV9PVkVSRkxPV19MRU5HVEggb3B0aW9uIGlzIHNldCAoYnkgdXNpbmcgdGhlCitcZkJzdWJzdGl0dXRlX292ZXJmbG93X2xlbmd0aFxmUCBtb2RpZmllciksIFxmQnBjcmUyX3N1YnN0aXR1dGUoKVxmUCBjb250aW51ZXMKK3RvIGdvIHRocm91Z2ggdGhlIG1vdGlvbnMgb2YgbWF0Y2hpbmcgYW5kIHN1YnN0aXR1dGluZywgaW4gb3JkZXIgdG8gY29tcHV0ZSB0aGUKK3NpemUgb2YgYnVmZmVyIHRoYXQgaXMgcmVxdWlyZWQuIFdoZW4gdGhpcyBoYXBwZW5zLCBcZkJwY3JlMnRlc3RcZlAgc2hvd3MgdGhlCityZXF1aXJlZCBidWZmZXIgbGVuZ3RoICh3aGljaCBpbmNsdWRlcyBzcGFjZSBmb3IgdGhlIHRyYWlsaW5nIHplcm8pIGFzIHBhcnQgb2YKK3RoZSBlcnJvciBtZXNzYWdlLiBGb3IgZXhhbXBsZToKKy5zcAorICAvYWJjL3N1YnN0aXR1dGVfb3ZlcmZsb3dfbGVuZ3RoCisgICAgICAxMjNhYmMxMjNcZT1yZXBsYWNlPVs5XVhZWgorICBGYWlsZWQ6IGVycm9yIC00Nzogbm8gbW9yZSBtZW1vcnk6IDEwIGNvZGUgdW5pdHMgYXJlIG5lZWRlZAorLnNwCitBIHJlcGxhY2VtZW50IHN0cmluZyBpcyBpZ25vcmVkIHdpdGggUE9TSVggYW5kIERGQSBtYXRjaGluZy4gU3BlY2lmeWluZyBwYXJ0aWFsCittYXRjaGluZyBwcm92b2tlcyBhbiBlcnJvciByZXR1cm4gKCJiYWQgb3B0aW9uIHZhbHVlIikgZnJvbQorXGZCcGNyZTJfc3Vic3RpdHV0ZSgpXGZQLgorLgorLgorLlNTICJTZXR0aW5nIHRoZSBKSVQgc3RhY2sgc2l6ZSIKKy5ycworLnNwCitUaGUgXGZCaml0c3RhY2tcZlAgbW9kaWZpZXIgcHJvdmlkZXMgYSB3YXkgb2Ygc2V0dGluZyB0aGUgbWF4aW11bSBzdGFjayBzaXplCit0aGF0IGlzIHVzZWQgYnkgdGhlIGp1c3QtaW4tdGltZSBvcHRpbWl6YXRpb24gY29kZS4gSXQgaXMgaWdub3JlZCBpZiBKSVQKK29wdGltaXphdGlvbiBpcyBub3QgYmVpbmcgdXNlZC4gVGhlIHZhbHVlIGlzIGEgbnVtYmVyIG9mIGtpbG9ieXRlcy4gUHJvdmlkaW5nIGEKK3N0YWNrIHRoYXQgaXMgbGFyZ2VyIHRoYW4gdGhlIGRlZmF1bHQgMzJLIGlzIG5lY2Vzc2FyeSBvbmx5IGZvciB2ZXJ5Citjb21wbGljYXRlZCBwYXR0ZXJucy4KKy4KKy4KKy5TUyAiU2V0dGluZyBtYXRjaCBhbmQgcmVjdXJzaW9uIGxpbWl0cyIKKy5ycworLnNwCitUaGUgXGZCbWF0Y2hfbGltaXRcZlAgYW5kIFxmQnJlY3Vyc2lvbl9saW1pdFxmUCBtb2RpZmllcnMgc2V0IHRoZSBhcHByb3ByaWF0ZQorbGltaXRzIGluIHRoZSBtYXRjaCBjb250ZXh0LiBUaGVzZSB2YWx1ZXMgYXJlIGlnbm9yZWQgd2hlbiB0aGUKK1xmQmZpbmRfbGltaXRzXGZQIG1vZGlmaWVyIGlzIHNwZWNpZmllZC4KKy4KKy4KKy5TUyAiRmluZGluZyBtaW5pbXVtIGxpbWl0cyIKKy5ycworLnNwCitJZiB0aGUgXGZCZmluZF9saW1pdHNcZlAgbW9kaWZpZXIgaXMgcHJlc2VudCwgXGZCcGNyZTJ0ZXN0XGZQIGNhbGxzCitcZkJwY3JlMl9tYXRjaCgpXGZQIHNldmVyYWwgdGltZXMsIHNldHRpbmcgZGlmZmVyZW50IHZhbHVlcyBpbiB0aGUgbWF0Y2gKK2NvbnRleHQgdmlhIFxmQnBjcmUyX3NldF9tYXRjaF9saW1pdCgpXGZQIGFuZCBcZkJwY3JlMl9zZXRfcmVjdXJzaW9uX2xpbWl0KClcZlAKK3VudGlsIGl0IGZpbmRzIHRoZSBtaW5pbXVtIHZhbHVlcyBmb3IgZWFjaCBwYXJhbWV0ZXIgdGhhdCBhbGxvdworXGZCcGNyZTJfbWF0Y2goKVxmUCB0byBjb21wbGV0ZSB3aXRob3V0IGVycm9yLgorLlAKK0lmIEpJVCBpcyBiZWluZyB1c2VkLCBvbmx5IHRoZSBtYXRjaCBsaW1pdCBpcyByZWxldmFudC4gSWYgREZBIG1hdGNoaW5nIGlzCitiZWluZyB1c2VkLCBuZWl0aGVyIGxpbWl0IGlzIHJlbGV2YW50LCBhbmQgdGhpcyBtb2RpZmllciBpcyBpZ25vcmVkICh3aXRoIGEKK3dhcm5pbmcgbWVzc2FnZSkuCisuUAorVGhlIFxmSW1hdGNoX2xpbWl0XGZQIG51bWJlciBpcyBhIG1lYXN1cmUgb2YgdGhlIGFtb3VudCBvZiBiYWNrdHJhY2tpbmcKK3RoYXQgdGFrZXMgcGxhY2UsIGFuZCBsZWFybmluZyB0aGUgbWluaW11bSB2YWx1ZSBjYW4gYmUgaW5zdHJ1Y3RpdmUuIEZvciBtb3N0CitzaW1wbGUgbWF0Y2hlcywgdGhlIG51bWJlciBpcyBxdWl0ZSBzbWFsbCwgYnV0IGZvciBwYXR0ZXJucyB3aXRoIHZlcnkgbGFyZ2UKK251bWJlcnMgb2YgbWF0Y2hpbmcgcG9zc2liaWxpdGllcywgaXQgY2FuIGJlY29tZSBsYXJnZSB2ZXJ5IHF1aWNrbHkgd2l0aAoraW5jcmVhc2luZyBsZW5ndGggb2Ygc3ViamVjdCBzdHJpbmcuIFRoZSBcZkltYXRjaF9saW1pdF9yZWN1cnNpb25cZlAgbnVtYmVyIGlzCithIG1lYXN1cmUgb2YgaG93IG11Y2ggc3RhY2sgKG9yLCBpZiBQQ1JFMiBpcyBjb21waWxlZCB3aXRoIE5PX1JFQ1VSU0UsIGhvdyBtdWNoCitoZWFwKSBtZW1vcnkgaXMgbmVlZGVkIHRvIGNvbXBsZXRlIHRoZSBtYXRjaCBhdHRlbXB0LgorLgorLgorLlNTICJTaG93aW5nIE1BUksgbmFtZXMiCisucnMKKy5zcAorLlAKK1RoZSBcZkJtYXJrXGZQIG1vZGlmaWVyIGNhdXNlcyB0aGUgbmFtZXMgZnJvbSBiYWNrdHJhY2tpbmcgY29udHJvbCB2ZXJicyB0aGF0CithcmUgcmV0dXJuZWQgZnJvbSBjYWxscyB0byBcZkJwY3JlMl9tYXRjaCgpXGZQIHRvIGJlIGRpc3BsYXllZC4gSWYgYSBtYXJrIGlzCityZXR1cm5lZCBmb3IgYSBtYXRjaCwgbm9uLW1hdGNoLCBvciBwYXJ0aWFsIG1hdGNoLCBcZkJwY3JlMnRlc3RcZlAgc2hvd3MgaXQuCitGb3IgYSBtYXRjaCwgaXQgaXMgb24gYSBsaW5lIGJ5IGl0c2VsZiwgdGFnZ2VkIHdpdGggIk1LOiIuIE90aGVyd2lzZSwgaXQKK2lzIGFkZGVkIHRvIHRoZSBub24tbWF0Y2ggbWVzc2FnZS4KKy4KKy4KKy5TUyAiU2hvd2luZyBtZW1vcnkgdXNhZ2UiCisucnMKKy5zcAorVGhlIFxmQm1lbW9yeVxmUCBtb2RpZmllciBjYXVzZXMgXGZCcGNyZTJ0ZXN0XGZQIHRvIGxvZyBhbGwgbWVtb3J5IGFsbG9jYXRpb24KK2FuZCBmcmVlaW5nIGNhbGxzIHRoYXQgb2NjdXIgZHVyaW5nIGEgbWF0Y2ggb3BlcmF0aW9uLgorLgorLgorLlNTICJTZXR0aW5nIGEgc3RhcnRpbmcgb2Zmc2V0IgorLnJzCisuc3AKK1RoZSBcZkJvZmZzZXRcZlAgbW9kaWZpZXIgc2V0cyBhbiBvZmZzZXQgaW4gdGhlIHN1YmplY3Qgc3RyaW5nIGF0IHdoaWNoCittYXRjaGluZyBzdGFydHMuIEl0cyB2YWx1ZSBpcyBhIG51bWJlciBvZiBjb2RlIHVuaXRzLCBub3QgY2hhcmFjdGVycy4KKy4KKy4KKy5TUyAiU2V0dGluZyBhbiBvZmZzZXQgbGltaXQiCisucnMKKy5zcAorVGhlIFxmQm9mZnNldF9saW1pdFxmUCBtb2RpZmllciBzZXRzIGEgbGltaXQgZm9yIHVuYW5jaG9yZWQgbWF0Y2hlcy4gSWYgYSBtYXRjaAorY2Fubm90IGJlIGZvdW5kIHN0YXJ0aW5nIGF0IG9yIGJlZm9yZSB0aGlzIG9mZnNldCBpbiB0aGUgc3ViamVjdCwgYSAibm8gbWF0Y2giCityZXR1cm4gaXMgZ2l2ZW4uIFRoZSBkYXRhIHZhbHVlIGlzIGEgbnVtYmVyIG9mIGNvZGUgdW5pdHMsIG5vdCBjaGFyYWN0ZXJzLiBXaGVuCit0aGlzIG1vZGlmaWVyIGlzIHVzZWQsIHRoZSBcZkJ1c2Vfb2Zmc2V0X2xpbWl0XGZQIG1vZGlmaWVyIG11c3QgaGF2ZSBiZWVuIHNldAorZm9yIHRoZSBwYXR0ZXJuOyBpZiBub3QsIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4KKy4KKy4KKy5TUyAiU2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IHZlY3RvciIKKy5ycworLnNwCitUaGUgXGZCb3ZlY3RvclxmUCBtb2RpZmllciBhcHBsaWVzIG9ubHkgdG8gdGhlIHN1YmplY3QgbGluZSBpbiB3aGljaCBpdAorYXBwZWFycywgdGhvdWdoIG9mIGNvdXJzZSBpdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHNldCBhIGRlZmF1bHQgaW4gYQorXGZCI3N1YmplY3RcZlAgY29tbWFuZC4gSXQgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcGFpcnMgb2Ygb2Zmc2V0cyB0aGF0IGFyZQorYXZhaWxhYmxlIGZvciBzdG9yaW5nIG1hdGNoaW5nIGluZm9ybWF0aW9uLiBUaGUgZGVmYXVsdCBpcyAxNS4KKy5QCitBIHZhbHVlIG9mIHplcm8gaXMgdXNlZnVsIHdoZW4gdGVzdGluZyB0aGUgUE9TSVggQVBJIGJlY2F1c2UgaXQgY2F1c2VzCitcZkJyZWdleGVjKClcZlAgdG8gYmUgY2FsbGVkIHdpdGggYSBOVUxMIGNhcHR1cmUgdmVjdG9yLiBXaGVuIG5vdCB0ZXN0aW5nIHRoZQorUE9TSVggQVBJLCBhIHZhbHVlIG9mIHplcm8gaXMgdXNlZCB0byBjYXVzZQorXGZCcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuKClcZlAgdG8gYmUgY2FsbGVkLCBpbiBvcmRlciB0byBjcmVhdGUgYQorbWF0Y2ggYmxvY2sgb2YgZXhhY3RseSB0aGUgcmlnaHQgc2l6ZSBmb3IgdGhlIHBhdHRlcm4uIChJdCBpcyBub3QgcG9zc2libGUgdG8KK2NyZWF0ZSBhIG1hdGNoIGJsb2NrIHdpdGggYSB6ZXJvLWxlbmd0aCBvdmVjdG9yOyB0aGVyZSBpcyBhbHdheXMgYXQgbGVhc3Qgb25lCitwYWlyIG9mIG9mZnNldHMuKQorLgorLgorLlNTICJQYXNzaW5nIHRoZSBzdWJqZWN0IGFzIHplcm8tdGVybWluYXRlZCIKKy5ycworLnNwCitCeSBkZWZhdWx0LCB0aGUgc3ViamVjdCBzdHJpbmcgaXMgcGFzc2VkIHRvIGEgbmF0aXZlIEFQSSBtYXRjaGluZyBmdW5jdGlvbiB3aXRoCitpdHMgY29ycmVjdCBsZW5ndGguIEluIG9yZGVyIHRvIHRlc3QgdGhlIGZhY2lsaXR5IGZvciBwYXNzaW5nIGEgemVyby10ZXJtaW5hdGVkCitzdHJpbmcsIHRoZSBcZkJ6ZXJvX3Rlcm1pbmF0ZVxmUCBtb2RpZmllciBpcyBwcm92aWRlZC4gSXQgY2F1c2VzIHRoZSBsZW5ndGggdG8KK2JlIHBhc3NlZCBhcyBQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIChXaGVuIG1hdGNoaW5nIHZpYSB0aGUgUE9TSVggaW50ZXJmYWNlLAordGhpcyBtb2RpZmllciBoYXMgbm8gZWZmZWN0LCBhcyB0aGVyZSBpcyBubyBmYWNpbGl0eSBmb3IgcGFzc2luZyBhIGxlbmd0aC4pCisuUAorV2hlbiB0ZXN0aW5nIFxmQnBjcmUyX3N1YnN0aXR1dGUoKVxmUCwgdGhpcyBtb2RpZmllciBhbHNvIGhhcyB0aGUgZWZmZWN0IG9mCitwYXNzaW5nIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgYXMgemVyby10ZXJtaW5hdGVkLgorLgorLgorLlNTICJQYXNzaW5nIGEgTlVMTCBjb250ZXh0IgorLnJzCisuc3AKK05vcm1hbGx5LCBcZkJwY3JlMnRlc3RcZlAgcGFzc2VzIGEgY29udGV4dCBibG9jayB0byBcZkJwY3JlMl9tYXRjaCgpXGZQLAorXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgb3IgXGZCcGNyZTJfaml0X21hdGNoKClcZlAuIElmIHRoZSBcZkJudWxsX2NvbnRleHRcZlAKK21vZGlmaWVyIGlzIHNldCwgaG93ZXZlciwgTlVMTCBpcyBwYXNzZWQuIFRoaXMgaXMgZm9yIHRlc3RpbmcgdGhhdCB0aGUgbWF0Y2hpbmcKK2Z1bmN0aW9ucyBiZWhhdmUgY29ycmVjdGx5IGluIHRoaXMgY2FzZSAodGhleSB1c2UgZGVmYXVsdCB2YWx1ZXMpLiBUaGlzCittb2RpZmllciBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoZSBcZkJmaW5kX2xpbWl0c1xmUCBtb2RpZmllciBvciB3aGVuIHRlc3RpbmcgdGhlCitzdWJzdGl0dXRpb24gZnVuY3Rpb24uCisuCisuCisuU0ggIlRIRSBBTFRFUk5BVElWRSBNQVRDSElORyBGVU5DVElPTiIKKy5ycworLnNwCitCeSBkZWZhdWx0LCBcZkJwY3JlMnRlc3RcZlAgdXNlcyB0aGUgc3RhbmRhcmQgUENSRTIgbWF0Y2hpbmcgZnVuY3Rpb24sCitcZkJwY3JlMl9tYXRjaCgpXGZQIHRvIG1hdGNoIGVhY2ggc3ViamVjdCBsaW5lLiBQQ1JFMiBhbHNvIHN1cHBvcnRzIGFuCithbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbiwgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAsIHdoaWNoIG9wZXJhdGVzIGluIGEKK2RpZmZlcmVudCB3YXksIGFuZCBoYXMgc29tZSByZXN0cmljdGlvbnMuIFRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28KK2Z1bmN0aW9ucyBhcmUgZGVzY3JpYmVkIGluIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUybWF0Y2hpbmdcZlAKKy5cIgorZG9jdW1lbnRhdGlvbi4KKy5QCitJZiB0aGUgXGZCZGZhXGZQIG1vZGlmaWVyIGlzIHNldCwgdGhlIGFsdGVybmF0aXZlIG1hdGNoaW5nIGZ1bmN0aW9uIGlzIHVzZWQuCitUaGlzIGZ1bmN0aW9uIGZpbmRzIGFsbCBwb3NzaWJsZSBtYXRjaGVzIGF0IGEgZ2l2ZW4gcG9pbnQgaW4gdGhlIHN1YmplY3QuIElmLAoraG93ZXZlciwgdGhlIFxmQmRmYV9zaG9ydGVzdFxmUCBtb2RpZmllciBpcyBzZXQsIHByb2Nlc3Npbmcgc3RvcHMgYWZ0ZXIgdGhlCitmaXJzdCBtYXRjaCBpcyBmb3VuZC4gVGhpcyBpcyBhbHdheXMgdGhlIHNob3J0ZXN0IHBvc3NpYmxlIG1hdGNoLgorLgorLgorLlNIICJERUZBVUxUIE9VVFBVVCBGUk9NIHBjcmUydGVzdCIKKy5ycworLnNwCitUaGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBvdXRwdXQgd2hlbiB0aGUgbm9ybWFsIG1hdGNoaW5nIGZ1bmN0aW9uLAorXGZCcGNyZTJfbWF0Y2goKVxmUCwgaXMgYmVpbmcgdXNlZC4KKy5QCitXaGVuIGEgbWF0Y2ggc3VjY2VlZHMsIFxmQnBjcmUydGVzdFxmUCBvdXRwdXRzIHRoZSBsaXN0IG9mIGNhcHR1cmVkIHN1YnN0cmluZ3MsCitzdGFydGluZyB3aXRoIG51bWJlciAwIGZvciB0aGUgc3RyaW5nIHRoYXQgbWF0Y2hlZCB0aGUgd2hvbGUgcGF0dGVybi4KK090aGVyd2lzZSwgaXQgb3V0cHV0cyAiTm8gbWF0Y2giIHdoZW4gdGhlIHJldHVybiBpcyBQQ1JFMl9FUlJPUl9OT01BVENILCBvcgorIlBhcnRpYWwgbWF0Y2g6IiBmb2xsb3dlZCBieSB0aGUgcGFydGlhbGx5IG1hdGNoaW5nIHN1YnN0cmluZyB3aGVuIHRoZQorcmV0dXJuIGlzIFBDUkUyX0VSUk9SX1BBUlRJQUwuIChOb3RlIHRoYXQgdGhpcyBpcyB0aGUKK2VudGlyZSBzdWJzdHJpbmcgdGhhdCB3YXMgaW5zcGVjdGVkIGR1cmluZyB0aGUgcGFydGlhbCBtYXRjaDsgaXQgbWF5IGluY2x1ZGUKK2NoYXJhY3RlcnMgYmVmb3JlIHRoZSBhY3R1YWwgbWF0Y2ggc3RhcnQgaWYgYSBsb29rYmVoaW5kIGFzc2VydGlvbiwgXGVLLCBcZWIsCitvciBcZUIgd2FzIGludm9sdmVkLikKKy5QCitGb3IgYW55IG90aGVyIHJldHVybiwgXGZCcGNyZTJ0ZXN0XGZQIG91dHB1dHMgdGhlIFBDUkUyIG5lZ2F0aXZlIGVycm9yIG51bWJlcgorYW5kIGEgc2hvcnQgZGVzY3JpcHRpdmUgcGhyYXNlLiBJZiB0aGUgZXJyb3IgaXMgYSBmYWlsZWQgVVRGIHN0cmluZyBjaGVjaywgdGhlCitjb2RlIHVuaXQgb2Zmc2V0IG9mIHRoZSBzdGFydCBvZiB0aGUgZmFpbGluZyBjaGFyYWN0ZXIgaXMgYWxzbyBvdXRwdXQuIEhlcmUgaXMKK2FuIGV4YW1wbGUgb2YgYW4gaW50ZXJhY3RpdmUgXGZCcGNyZTJ0ZXN0XGZQIHJ1bi4KKy5zcAorICAkIHBjcmUydGVzdAorICBQQ1JFMiB2ZXJzaW9uIDkuMDAgMjAxNC0wNS0xMAorLnNwCisgICAgcmU+IC9eYWJjKFxlZCspLworICBkYXRhPiBhYmMxMjMKKyAgIDA6IGFiYzEyMworICAgMTogMTIzCisgIGRhdGE+IHh5egorICBObyBtYXRjaAorLnNwCitVbnNldCBjYXB0dXJpbmcgc3Vic3RyaW5ncyB0aGF0IGFyZSBub3QgZm9sbG93ZWQgYnkgb25lIHRoYXQgaXMgc2V0IGFyZSBub3QKK3Nob3duIGJ5IFxmQnBjcmUydGVzdFxmUCB1bmxlc3MgdGhlIFxmQmFsbGNhcHR1cmVzXGZQIG1vZGlmaWVyIGlzIHNwZWNpZmllZC4gSW4KK3RoZSBmb2xsb3dpbmcgZXhhbXBsZSwgdGhlcmUgYXJlIHR3byBjYXB0dXJpbmcgc3Vic3RyaW5ncywgYnV0IHdoZW4gdGhlIGZpcnN0CitkYXRhIGxpbmUgaXMgbWF0Y2hlZCwgdGhlIHNlY29uZCwgdW5zZXQgc3Vic3RyaW5nIGlzIG5vdCBzaG93bi4gQW4gImludGVybmFsIgordW5zZXQgc3Vic3RyaW5nIGlzIHNob3duIGFzICI8dW5zZXQ+IiwgYXMgZm9yIHRoZSBzZWNvbmQgZGF0YSBsaW5lLgorLnNwCisgICAgcmU+IC8oYSl8KGIpLworICBkYXRhPiBhCisgICAwOiBhCisgICAxOiBhCisgIGRhdGE+IGIKKyAgIDA6IGIKKyAgIDE6IDx1bnNldD4KKyAgIDI6IGIKKy5zcAorSWYgdGhlIHN0cmluZ3MgY29udGFpbiBhbnkgbm9uLXByaW50aW5nIGNoYXJhY3RlcnMsIHRoZXkgYXJlIG91dHB1dCBhcyBcZXhoaAorZXNjYXBlcyBpZiB0aGUgdmFsdWUgaXMgbGVzcyB0aGFuIDI1NiBhbmQgVVRGIG1vZGUgaXMgbm90IHNldC4gT3RoZXJ3aXNlIHRoZXkKK2FyZSBvdXRwdXQgYXMgXGV4e2hoLi4ufSBlc2NhcGVzLiBTZWUgYmVsb3cgZm9yIHRoZSBkZWZpbml0aW9uIG9mIG5vbi1wcmludGluZworY2hhcmFjdGVycy4gSWYgdGhlIFxmQi9hZnRlcnRleHRcZlAgbW9kaWZpZXIgaXMgc2V0LCB0aGUgb3V0cHV0IGZvciBzdWJzdHJpbmcKKzAgaXMgZm9sbG93ZWQgYnkgdGhlIHRoZSByZXN0IG9mIHRoZSBzdWJqZWN0IHN0cmluZywgaWRlbnRpZmllZCBieSAiMCsiIGxpa2UKK3RoaXM6Cisuc3AKKyAgICByZT4gL2NhdC9hZnRlcnRleHQKKyAgZGF0YT4gY2F0YXJhY3QKKyAgIDA6IGNhdAorICAgMCsgYXJhY3QKKy5zcAorSWYgZ2xvYmFsIG1hdGNoaW5nIGlzIHJlcXVlc3RlZCwgdGhlIHJlc3VsdHMgb2Ygc3VjY2Vzc2l2ZSBtYXRjaGluZyBhdHRlbXB0cworYXJlIG91dHB1dCBpbiBzZXF1ZW5jZSwgbGlrZSB0aGlzOgorLnNwCisgICAgcmU+IC9cZUJpKFxld1xldykvZworICBkYXRhPiBNaXNzaXNzaXBwaQorICAgMDogaXNzCisgICAxOiBzcworICAgMDogaXNzCisgICAxOiBzcworICAgMDogaXBwCisgICAxOiBwcAorLnNwCisiTm8gbWF0Y2giIGlzIG91dHB1dCBvbmx5IGlmIHRoZSBmaXJzdCBtYXRjaCBhdHRlbXB0IGZhaWxzLiBIZXJlIGlzIGFuIGV4YW1wbGUKK29mIGEgZmFpbHVyZSBtZXNzYWdlICh0aGUgb2Zmc2V0IDQgdGhhdCBpcyBzcGVjaWZpZWQgYnkgdGhlIFxmQm9mZnNldFxmUAorbW9kaWZpZXIgaXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IHN0cmluZyk6Cisuc3AKKyAgICByZT4gL3h5ei8KKyAgZGF0YT4geHl6XGU9b2Zmc2V0PTQKKyAgRXJyb3IgLTI0IChiYWQgb2Zmc2V0IHZhbHVlKQorLlAKK05vdGUgdGhhdCB3aGVyZWFzIHBhdHRlcm5zIGNhbiBiZSBjb250aW51ZWQgb3ZlciBzZXZlcmFsIGxpbmVzIChhIHBsYWluICI+IgorcHJvbXB0IGlzIHVzZWQgZm9yIGNvbnRpbnVhdGlvbnMpLCBzdWJqZWN0IGxpbmVzIG1heSBub3QuIEhvd2V2ZXIgbmV3bGluZXMgY2FuCitiZSBpbmNsdWRlZCBpbiBhIHN1YmplY3QgYnkgbWVhbnMgb2YgdGhlIFxlbiBlc2NhcGUgKG9yIFxlciwgXGVyXGVuLCBldGMuLAorZGVwZW5kaW5nIG9uIHRoZSBuZXdsaW5lIHNlcXVlbmNlIHNldHRpbmcpLgorLgorLgorLgorLlNIICJPVVRQVVQgRlJPTSBUSEUgQUxURVJOQVRJVkUgTUFUQ0hJTkcgRlVOQ1RJT04iCisucnMKKy5zcAorV2hlbiB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24sIFxmQnBjcmUyX2RmYV9tYXRjaCgpXGZQLCBpcyB1c2VkLCB0aGUKK291dHB1dCBjb25zaXN0cyBvZiBhIGxpc3Qgb2YgYWxsIHRoZSBtYXRjaGVzIHRoYXQgc3RhcnQgYXQgdGhlIGZpcnN0IHBvaW50IGluCit0aGUgc3ViamVjdCB3aGVyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgbWF0Y2guIEZvciBleGFtcGxlOgorLnNwCisgICAgcmU+IC8odGFuZ3x0YW5nZXJpbmV8dGFuKS8KKyAgZGF0YT4geWVsbG93IHRhbmdlcmluZVxlPWRmYQorICAgMDogdGFuZ2VyaW5lCisgICAxOiB0YW5nCisgICAyOiB0YW4KKy5zcAorVXNpbmcgdGhlIG5vcm1hbCBtYXRjaGluZyBmdW5jdGlvbiBvbiB0aGlzIGRhdGEgZmluZHMgb25seSAidGFuZyIuIFRoZQorbG9uZ2VzdCBtYXRjaGluZyBzdHJpbmcgaXMgYWx3YXlzIGdpdmVuIGZpcnN0IChhbmQgbnVtYmVyZWQgemVybykuIEFmdGVyIGEKK1BDUkUyX0VSUk9SX1BBUlRJQUwgcmV0dXJuLCB0aGUgb3V0cHV0IGlzICJQYXJ0aWFsIG1hdGNoOiIsIGZvbGxvd2VkIGJ5IHRoZQorcGFydGlhbGx5IG1hdGNoaW5nIHN1YnN0cmluZy4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIGVudGlyZSBzdWJzdHJpbmcgdGhhdCB3YXMKK2luc3BlY3RlZCBkdXJpbmcgdGhlIHBhcnRpYWwgbWF0Y2g7IGl0IG1heSBpbmNsdWRlIGNoYXJhY3RlcnMgYmVmb3JlIHRoZSBhY3R1YWwKK21hdGNoIHN0YXJ0IGlmIGEgbG9va2JlaGluZCBhc3NlcnRpb24sIFxlYiwgb3IgXGVCIHdhcyBpbnZvbHZlZC4gKFxlSyBpcyBub3QKK3N1cHBvcnRlZCBmb3IgREZBIG1hdGNoaW5nLikKKy5QCitJZiBnbG9iYWwgbWF0Y2hpbmcgaXMgcmVxdWVzdGVkLCB0aGUgc2VhcmNoIGZvciBmdXJ0aGVyIG1hdGNoZXMgcmVzdW1lcworYXQgdGhlIGVuZCBvZiB0aGUgbG9uZ2VzdCBtYXRjaC4gRm9yIGV4YW1wbGU6Cisuc3AKKyAgICByZT4gLyh0YW5nfHRhbmdlcmluZXx0YW4pL2cKKyAgZGF0YT4geWVsbG93IHRhbmdlcmluZSBhbmQgdGFuZ3kgc3VsdGFuYVxlPWRmYQorICAgMDogdGFuZ2VyaW5lCisgICAxOiB0YW5nCisgICAyOiB0YW4KKyAgIDA6IHRhbmcKKyAgIDE6IHRhbgorICAgMDogdGFuCisuc3AKK1RoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IHN1YnN0cmluZyBjYXB0dXJlLCBzbyB0aGUKK21vZGlmaWVycyB0aGF0IGFyZSBjb25jZXJuZWQgd2l0aCBjYXB0dXJlZCBzdWJzdHJpbmdzIGFyZSBub3QgcmVsZXZhbnQuCisuCisuCisuU0ggIlJFU1RBUlRJTkcgQUZURVIgQSBQQVJUSUFMIE1BVENIIgorLnJzCisuc3AKK1doZW4gdGhlIGFsdGVybmF0aXZlIG1hdGNoaW5nIGZ1bmN0aW9uIGhhcyBnaXZlbiB0aGUgUENSRTJfRVJST1JfUEFSVElBTAorcmV0dXJuLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHN1YmplY3QgcGFydGlhbGx5IG1hdGNoZWQgdGhlIHBhdHRlcm4sIHlvdSBjYW4KK3Jlc3RhcnQgdGhlIG1hdGNoIHdpdGggYWRkaXRpb25hbCBzdWJqZWN0IGRhdGEgYnkgbWVhbnMgb2YgdGhlCitcZkJkZmFfcmVzdGFydFxmUCBtb2RpZmllci4gRm9yIGV4YW1wbGU6Cisuc3AKKyAgICByZT4gL15cZWQ/XGVkKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKVxlZFxlZCQvCisgIGRhdGE+IDIzamFcZT1QLGRmYQorICBQYXJ0aWFsIG1hdGNoOiAyM2phCisgIGRhdGE+IG4wNVxlPWRmYSxkZmFfcmVzdGFydAorICAgMDogbjA1Cisuc3AKK0ZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IHBhcnRpYWwgbWF0Y2hpbmcsIHNlZSB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBhcnRpYWxcZlAKKy5cIgorZG9jdW1lbnRhdGlvbi4KKy4KKy4KKy5TSCBDQUxMT1VUUworLnJzCisuc3AKK0lmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIGFueSBjYWxsb3V0IHJlcXVlc3RzLCBcZkJwY3JlMnRlc3RcZlAncyBjYWxsb3V0CitmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIG1hdGNoaW5nIHVubGVzcyBcZkJjYWxsb3V0X25vbmVcZlAgaXMgc3BlY2lmaWVkLgorVGhpcyB3b3JrcyB3aXRoIGJvdGggbWF0Y2hpbmcgZnVuY3Rpb25zLgorLlAKK1RoZSBjYWxsb3V0IGZ1bmN0aW9uIGluIFxmQnBjcmUydGVzdFxmUCByZXR1cm5zIHplcm8gKGNhcnJ5IG9uIG1hdGNoaW5nKSBieQorZGVmYXVsdCwgYnV0IHlvdSBjYW4gdXNlIGEgXGZCY2FsbG91dF9mYWlsXGZQIG1vZGlmaWVyIGluIGEgc3ViamVjdCBsaW5lIChhcworZGVzY3JpYmVkIGFib3ZlKSB0byBjaGFuZ2UgdGhpcyBhbmQgb3RoZXIgcGFyYW1ldGVycyBvZiB0aGUgY2FsbG91dC4KKy5QCitJbnNlcnRpbmcgY2FsbG91dHMgY2FuIGJlIGhlbHBmdWwgd2hlbiB1c2luZyBcZkJwY3JlMnRlc3RcZlAgdG8gY2hlY2sKK2NvbXBsaWNhdGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuIEZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IGNhbGxvdXRzLCBzZWUKK3RoZQorLlwiIEhSRUYKK1xmQnBjcmUyY2FsbG91dFxmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLlAKK1RoZSBvdXRwdXQgZm9yIGNhbGxvdXRzIHdpdGggbnVtZXJpY2FsIGFyZ3VtZW50cyBhbmQgdGhvc2Ugd2l0aCBzdHJpbmcKK2FyZ3VtZW50cyBpcyBzbGlnaHRseSBkaWZmZXJlbnQuCisuCisuCisuU1MgIkNhbGxvdXRzIHdpdGggbnVtZXJpY2FsIGFyZ3VtZW50cyIKKy5ycworLnNwCitCeSBkZWZhdWx0LCB0aGUgY2FsbG91dCBmdW5jdGlvbiBkaXNwbGF5cyB0aGUgY2FsbG91dCBudW1iZXIsIHRoZSBzdGFydCBhbmQKK2N1cnJlbnQgcG9zaXRpb25zIGluIHRoZSBzdWJqZWN0IHRleHQgYXQgdGhlIGNhbGxvdXQgdGltZSwgYW5kIHRoZSBuZXh0IHBhdHRlcm4KK2l0ZW0gdG8gYmUgdGVzdGVkLiBGb3IgZXhhbXBsZToKKy5zcAorICAtLS0+cHFyYWJjZGVmCisgICAgMCAgICBeICBeICAgICBcZWQKKy5zcAorVGhpcyBvdXRwdXQgaW5kaWNhdGVzIHRoYXQgY2FsbG91dCBudW1iZXIgMCBvY2N1cnJlZCBmb3IgYSBtYXRjaCBhdHRlbXB0CitzdGFydGluZyBhdCB0aGUgZm91cnRoIGNoYXJhY3RlciBvZiB0aGUgc3ViamVjdCBzdHJpbmcsIHdoZW4gdGhlIHBvaW50ZXIgd2FzIGF0Cit0aGUgc2V2ZW50aCBjaGFyYWN0ZXIsIGFuZCB3aGVuIHRoZSBuZXh0IHBhdHRlcm4gaXRlbSB3YXMgXGVkLiBKdXN0CitvbmUgY2lyY3VtZmxleCBpcyBvdXRwdXQgaWYgdGhlIHN0YXJ0IGFuZCBjdXJyZW50IHBvc2l0aW9ucyBhcmUgdGhlIHNhbWUuCisuUAorQ2FsbG91dHMgbnVtYmVyZWQgMjU1IGFyZSBhc3N1bWVkIHRvIGJlIGF1dG9tYXRpYyBjYWxsb3V0cywgaW5zZXJ0ZWQgYXMgYQorcmVzdWx0IG9mIHRoZSBcZkIvYXV0b19jYWxsb3V0XGZQIHBhdHRlcm4gbW9kaWZpZXIuIEluIHRoaXMgY2FzZSwgaW5zdGVhZCBvZgorc2hvd2luZyB0aGUgY2FsbG91dCBudW1iZXIsIHRoZSBvZmZzZXQgaW4gdGhlIHBhdHRlcm4sIHByZWNlZGVkIGJ5IGEgcGx1cywgaXMKK291dHB1dC4gRm9yIGV4YW1wbGU6Cisuc3AKKyAgICByZT4gL1xlZD9bQS1FXVxlKi9hdXRvX2NhbGxvdXQKKyAgZGF0YT4gRSoKKyAgLS0tPkUqCisgICArMCBeICAgICAgXGVkPworICAgKzMgXiAgICAgIFtBLUVdCisgICArOCBeXiAgICAgXGUqCisgICsxMCBeIF4KKyAgIDA6IEUqCisuc3AKK0lmIGEgcGF0dGVybiBjb250YWlucyAoKk1BUkspIGl0ZW1zLCBhbiBhZGRpdGlvbmFsIGxpbmUgaXMgb3V0cHV0IHdoZW5ldmVyCithIGNoYW5nZSBvZiBsYXRlc3QgbWFyayBpcyBwYXNzZWQgdG8gdGhlIGNhbGxvdXQgZnVuY3Rpb24uIEZvciBleGFtcGxlOgorLnNwCisgICAgcmU+IC9hKCpNQVJLOlgpYmMvYXV0b19jYWxsb3V0CisgIGRhdGE+IGFiYworICAtLS0+YWJjCisgICArMCBeICAgICAgIGEKKyAgICsxIF5eICAgICAgKCpNQVJLOlgpCisgICsxMCBeXiAgICAgIGIKKyAgTGF0ZXN0IE1hcms6IFgKKyAgKzExIF4gXiAgICAgYworICArMTIgXiAgXgorICAgMDogYWJjCisuc3AKK1RoZSBtYXJrIGNoYW5nZXMgYmV0d2VlbiBtYXRjaGluZyAiYSIgYW5kICJiIiwgYnV0IHN0YXlzIHRoZSBzYW1lIGZvciB0aGUgcmVzdAorb2YgdGhlIG1hdGNoLCBzbyBub3RoaW5nIG1vcmUgaXMgb3V0cHV0LiBJZiwgYXMgYSByZXN1bHQgb2YgYmFja3RyYWNraW5nLCB0aGUKK21hcmsgcmV2ZXJ0cyB0byBiZWluZyB1bnNldCwgdGhlIHRleHQgIjx1bnNldD4iIGlzIG91dHB1dC4KKy4KKy4KKy5TUyAiQ2FsbG91dHMgd2l0aCBzdHJpbmcgYXJndW1lbnRzIgorLnJzCisuc3AKK1RoZSBvdXRwdXQgZm9yIGEgY2FsbG91dCB3aXRoIGEgc3RyaW5nIGFyZ3VtZW50IGlzIHNpbWlsYXIsIGV4Y2VwdCB0aGF0IGluc3RlYWQKK29mIG91dHB1dHRpbmcgYSBjYWxsb3V0IG51bWJlciBiZWZvcmUgdGhlIHBvc2l0aW9uIGluZGljYXRvcnMsIHRoZSBjYWxsb3V0CitzdHJpbmcgYW5kIGl0cyBvZmZzZXQgaW4gdGhlIHBhdHRlcm4gc3RyaW5nIGFyZSBvdXRwdXQgYmVmb3JlIHRoZSByZWZsZWN0aW9uIG9mCit0aGUgc3ViamVjdCBzdHJpbmcsIGFuZCB0aGUgc3ViamVjdCBzdHJpbmcgaXMgcmVmbGVjdGVkIGZvciBlYWNoIGNhbGxvdXQuIEZvcgorZXhhbXBsZToKKy5zcAorICAgIHJlPiAvXmFiKD9DJ2ZpcnN0JyljZCg/QyJzZWNvbmQiKWVmLworICBkYXRhPiBhYmNkZWZnCisgIENhbGxvdXQgKDcpOiAnZmlyc3QnCisgIC0tLT5hYmNkZWZnCisgICAgICBeIF4gICAgICAgICBjCisgIENhbGxvdXQgKDIwKTogInNlY29uZCIKKyAgLS0tPmFiY2RlZmcKKyAgICAgIF4gICBeICAgICAgIGUKKyAgIDA6IGFiY2RlZgorLnNwCisuCisuCisuCisuU0ggIk5PTi1QUklOVElORyBDSEFSQUNURVJTIgorLnJzCisuc3AKK1doZW4gXGZCcGNyZTJ0ZXN0XGZQIGlzIG91dHB1dHRpbmcgdGV4dCBpbiB0aGUgY29tcGlsZWQgdmVyc2lvbiBvZiBhIHBhdHRlcm4sCitieXRlcyBvdGhlciB0aGFuIDMyLTEyNiBhcmUgYWx3YXlzIHRyZWF0ZWQgYXMgbm9uLXByaW50aW5nIGNoYXJhY3RlcnMgYW5kIGFyZQordGhlcmVmb3JlIHNob3duIGFzIGhleCBlc2NhcGVzLgorLlAKK1doZW4gXGZCcGNyZTJ0ZXN0XGZQIGlzIG91dHB1dHRpbmcgdGV4dCB0aGF0IGlzIGEgbWF0Y2hlZCBwYXJ0IG9mIGEgc3ViamVjdAorc3RyaW5nLCBpdCBiZWhhdmVzIGluIHRoZSBzYW1lIHdheSwgdW5sZXNzIGEgZGlmZmVyZW50IGxvY2FsZSBoYXMgYmVlbiBzZXQgZm9yCit0aGUgcGF0dGVybiAodXNpbmcgdGhlIFxmQi9sb2NhbGVcZlAgbW9kaWZpZXIpLiBJbiB0aGlzIGNhc2UsIHRoZQorXGZCaXNwcmludCgpXGZQIGZ1bmN0aW9uIGlzIHVzZWQgdG8gZGlzdGluZ3Vpc2ggcHJpbnRpbmcgYW5kIG5vbi1wcmludGluZworY2hhcmFjdGVycy4KKy4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9InNhdmVyZXN0b3JlIj48L2E+CisuU0ggIlNBVklORyBBTkQgUkVTVE9SSU5HIENPTVBJTEVEIFBBVFRFUk5TIgorLnJzCisuc3AKK0l0IGlzIHBvc3NpYmxlIHRvIHNhdmUgY29tcGlsZWQgcGF0dGVybnMgb24gZGlzYyBvciBlbHNld2hlcmUsIGFuZCByZWxvYWQgdGhlbQorbGF0ZXIsIHN1YmplY3QgdG8gYSBudW1iZXIgb2YgcmVzdHJpY3Rpb25zLiBKSVQgZGF0YSBjYW5ub3QgYmUgc2F2ZWQuIFRoZSBob3N0CitvbiB3aGljaCB0aGUgcGF0dGVybnMgYXJlIHJlbG9hZGVkIG11c3QgYmUgcnVubmluZyB0aGUgc2FtZSB2ZXJzaW9uIG9mIFBDUkUyLAord2l0aCB0aGUgc2FtZSBjb2RlIHVuaXQgd2lkdGgsIGFuZCBtdXN0IGFsc28gaGF2ZSB0aGUgc2FtZSBlbmRpYW5uZXNzLCBwb2ludGVyCit3aWR0aCBhbmQgUENSRTJfU0laRSB0eXBlLiBCZWZvcmUgY29tcGlsZWQgcGF0dGVybnMgY2FuIGJlIHNhdmVkIHRoZXkgbXVzdCBiZQorc2VyaWFsaXplZCwgdGhhdCBpcywgY29udmVydGVkIHRvIGEgc3RyZWFtIG9mIGJ5dGVzLiBBIHNpbmdsZSBieXRlIHN0cmVhbSBtYXkKK2NvbnRhaW4gYW55IG51bWJlciBvZiBjb21waWxlZCBwYXR0ZXJucywgYnV0IHRoZXkgbXVzdCBhbGwgdXNlIHRoZSBzYW1lCitjaGFyYWN0ZXIgdGFibGVzLiBBIHNpbmdsZSBjb3B5IG9mIHRoZSB0YWJsZXMgaXMgaW5jbHVkZWQgaW4gdGhlIGJ5dGUgc3RyZWFtCisoaXRzIHNpemUgaXMgMTA4OCBieXRlcykuCisuUAorVGhlIGZ1bmN0aW9ucyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoIFxmQnBjcmUyX3NlcmlhbGl6ZV9cZlAgYXJlIHVzZWQKK2ZvciBzZXJpYWxpemluZyBhbmQgZGUtc2VyaWFsaXppbmcuIFRoZXkgYXJlIGRlc2NyaWJlZCBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnNlcmlhbGl6ZVxmUAorLlwiCitkb2N1bWVudGF0aW9uLiBJbiB0aGlzIHNlY3Rpb24gd2UgZGVzY3JpYmUgdGhlIGZlYXR1cmVzIG9mIFxmQnBjcmUydGVzdFxmUCB0aGF0CitjYW4gYmUgdXNlZCB0byB0ZXN0IHRoZXNlIGZ1bmN0aW9ucy4KKy5QCitXaGVuIGEgcGF0dGVybiB3aXRoIFxmQnB1c2hcZlAgbW9kaWZpZXIgaXMgc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkLCBpdCBpcyBwdXNoZWQKK29udG8gYSBzdGFjayBvZiBjb21waWxlZCBwYXR0ZXJucywgYW5kIFxmQnBjcmUydGVzdFxmUCBleHBlY3RzIHRoZSBuZXh0IGxpbmUgdG8KK2NvbnRhaW4gYSBuZXcgcGF0dGVybiAob3IgY29tbWFuZCkgaW5zdGVhZCBvZiBhIHN1YmplY3QgbGluZS4gQnkgdGhpcyBtZWFucywgYQorbnVtYmVyIG9mIHBhdHRlcm5zIGNhbiBiZSBjb21waWxlZCBhbmQgcmV0YWluZWQuIFRoZSBcZkJwdXNoXGZQIG1vZGlmaWVyIGlzCitpbmNvbXBhdGlibGUgd2l0aCBcZkJwb3NpeFxmUCwgYW5kIGNvbnRyb2wgbW9kaWZpZXJzIHRoYXQgYWN0IGF0IG1hdGNoIHRpbWUgYXJlCitpZ25vcmVkICh3aXRoIGEgbWVzc2FnZSkuIFRoZSBcZkJqaXR2ZXJpZnlcZlAgbW9kaWZpZXIgYXBwbGllcyBvbmx5IGF0IGNvbXBpbGUKK3RpbWUuIFRoZSBjb21tYW5kCisuc3AKKyAgI3NhdmUgPGZpbGVuYW1lPgorLnNwCitjYXVzZXMgYWxsIHRoZSBzdGFja2VkIHBhdHRlcm5zIHRvIGJlIHNlcmlhbGl6ZWQgYW5kIHRoZSByZXN1bHQgd3JpdHRlbiB0byB0aGUKK25hbWVkIGZpbGUuIEFmdGVyd2FyZHMsIGFsbCB0aGUgc3RhY2tlZCBwYXR0ZXJucyBhcmUgZnJlZWQuIFRoZSBjb21tYW5kCisuc3AKKyAgI2xvYWQgPGZpbGVuYW1lPgorLnNwCityZWFkcyB0aGUgZGF0YSBpbiB0aGUgZmlsZSwgYW5kIHRoZW4gYXJyYW5nZXMgZm9yIGl0IHRvIGJlIGRlLXNlcmlhbGl6ZWQsIHdpdGgKK3RoZSByZXN1bHRpbmcgY29tcGlsZWQgcGF0dGVybnMgYWRkZWQgdG8gdGhlIHBhdHRlcm4gc3RhY2suIFRoZSBwYXR0ZXJuIG9uIHRoZQordG9wIG9mIHRoZSBzdGFjayBjYW4gYmUgcmV0cmlldmVkIGJ5IHRoZSAjcG9wIGNvbW1hbmQsIHdoaWNoIG11c3QgYmUgZm9sbG93ZWQKK2J5IGxpbmVzIG9mIHN1YmplY3RzIHRoYXQgYXJlIHRvIGJlIG1hdGNoZWQgd2l0aCB0aGUgcGF0dGVybiwgdGVybWluYXRlZCBhcwordXN1YWwgYnkgYW4gZW1wdHkgbGluZSBvciBlbmQgb2YgZmlsZS4gVGhpcyBjb21tYW5kIG1heSBiZSBmb2xsb3dlZCBieSBhCittb2RpZmllciBsaXN0IGNvbnRhaW5pbmcgb25seQorLlwiIEhUTUwgPGEgaHJlZj0iI2NvbnRyb2xtb2RpZmllcnMiPgorLlwiIDwvYT4KK2NvbnRyb2wgbW9kaWZpZXJzCisuXCIKK3RoYXQgYWN0IGFmdGVyIGEgcGF0dGVybiBoYXMgYmVlbiBjb21waWxlZC4gSW4gcGFydGljdWxhciwgXGZCaGV4XGZQLAorXGZCcG9zaXhcZlAsIGFuZCBcZkJwdXNoXGZQIGFyZSBub3QgYWxsb3dlZCwgbm9yIGFyZSBhbnkKKy5cIiBIVE1MIDxhIGhyZWY9IiNvcHRpb25tb2RpZmllcnMiPgorLlwiIDwvYT4KK29wdGlvbi1zZXR0aW5nIG1vZGlmaWVycy4KKy5cIgorVGhlIEpJVCBtb2RpZmllcnMgYXJlLCBob3dldmVyIHBlcm1pdHRlZC4gSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgc2F2ZXMgYW5kCityZWxvYWRzIHR3byBwYXR0ZXJucy4KKy5zcAorICAvYWJjL3B1c2gKKyAgL3h5ei9wdXNoCisgICNzYXZlIHRlbXBmaWxlCisgICNsb2FkIHRlbXBmaWxlCisgICNwb3AgaW5mbworICB4eXoKKy5zcAorICAjcG9wIGppdCxiaW5jb2RlCisgIGFiYworLnNwCitJZiBcZkJqaXR2ZXJpZnlcZlAgaXMgdXNlZCB3aXRoICNwb3AsIGl0IGRvZXMgbm90IGF1dG9tYXRpY2FsbHkgaW1wbHkKK1xmQmppdFxmUCwgd2hpY2ggaXMgZGlmZmVyZW50IGJlaGF2aW91ciBmcm9tIHdoZW4gaXQgaXMgdXNlZCBvbiBhIHBhdHRlcm4uCisuCisuCisuCisuU0ggIlNFRSBBTFNPIgorLnJzCisuc3AKK1xmQnBjcmUyXGZQKDMpLCBcZkJwY3JlMmFwaVxmUCgzKSwgXGZCcGNyZTJjYWxsb3V0XGZQKDMpLAorXGZCcGNyZTJqaXRcZlAsIFxmQnBjcmUybWF0Y2hpbmdcZlAoMyksIFxmQnBjcmUycGFydGlhbFxmUChkKSwKK1xmQnBjcmUycGF0dGVyblxmUCgzKSwgXGZCcGNyZTJzZXJpYWxpemVcZlAoMykuCisuCisuCisuU0ggQVVUSE9SCisucnMKKy5zcAorLm5mCitQaGlsaXAgSGF6ZWwKK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKK0NhbWJyaWRnZSwgRW5nbGFuZC4KKy5maQorLgorLgorLlNIIFJFVklTSU9OCisucnMKKy5zcAorLm5mCitMYXN0IHVwZGF0ZWQ6IDEyIERlY2VtYmVyIDIwMTUKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDE1IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlLgorLmZpCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJ0ZXN0LnR4dCBiL2Rpc3QyL2RvYy9wY3JlMnRlc3QudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZGJjNGQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9kb2MvcGNyZTJ0ZXN0LnR4dApAQCAtMCwwICsxLDE1MDkgQEAKK1BDUkUyVEVTVCgxKSAgICAgICAgICAgICAgICBHZW5lcmFsIENvbW1hbmRzIE1hbnVhbCAgICAgICAgICAgICAgIFBDUkUyVEVTVCgxKQorCisKKworTkFNRQorICAgICAgIHBjcmUydGVzdCAtIGEgcHJvZ3JhbSBmb3IgdGVzdGluZyBQZXJsLWNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucy4KKworU1lOT1BTSVMKKworICAgICAgIHBjcmUydGVzdCBbb3B0aW9uc10gW2lucHV0IGZpbGUgW291dHB1dCBmaWxlXV0KKworICAgICAgIHBjcmUydGVzdCBpcyBhIHRlc3QgcHJvZ3JhbSBmb3IgdGhlIFBDUkUyIHJlZ3VsYXIgZXhwcmVzc2lvbiBsaWJyYXJpZXMsCisgICAgICAgYnV0IGl0IGNhbiBhbHNvIGJlIHVzZWQgZm9yICBleHBlcmltZW50aW5nICB3aXRoICByZWd1bGFyICBleHByZXNzaW9ucy4KKyAgICAgICBUaGlzICBkb2N1bWVudCAgZGVzY3JpYmVzIHRoZSBmZWF0dXJlcyBvZiB0aGUgdGVzdCBwcm9ncmFtOyBmb3IgZGV0YWlscworICAgICAgIG9mIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIHRoZW1zZWx2ZXMsIHNlZSB0aGUgcGNyZTJwYXR0ZXJuICBkb2N1bWVudGEtCisgICAgICAgdGlvbi4gIEZvciAgZGV0YWlscyAgb2YgIHRoZSAgUENSRTIgIGxpYnJhcnkgIGZ1bmN0aW9uICBjYWxscyBhbmQgdGhlaXIKKyAgICAgICBvcHRpb25zLCBzZWUgdGhlIHBjcmUyYXBpIGRvY3VtZW50YXRpb24uCisKKyAgICAgICBUaGUgaW5wdXQgZm9yIHBjcmUydGVzdCBpcyBhIHNlcXVlbmNlIG9mICByZWd1bGFyICBleHByZXNzaW9uICBwYXR0ZXJucworICAgICAgIGFuZCAgc3ViamVjdCAgc3RyaW5ncyAgdG8gIGJlIG1hdGNoZWQuIFRoZXJlIGFyZSBhbHNvIGNvbW1hbmQgbGluZXMgZm9yCisgICAgICAgc2V0dGluZyBkZWZhdWx0cyBhbmQgY29udHJvbGxpbmcgc29tZSBzcGVjaWFsIGFjdGlvbnMuIFRoZSBvdXRwdXQgc2hvd3MKKyAgICAgICB0aGUgIHJlc3VsdCAgb2YgIGVhY2ggIG1hdGNoIGF0dGVtcHQuIE1vZGlmaWVycyBvbiBleHRlcm5hbCBvciBpbnRlcm5hbAorICAgICAgIGNvbW1hbmQgbGluZXMsIHRoZSBwYXR0ZXJucywgYW5kIHRoZSBzdWJqZWN0IGxpbmVzIHNwZWNpZnkgUENSRTIgIGZ1bmMtCisgICAgICAgdGlvbiAgb3B0aW9ucywgY29udHJvbCBob3cgdGhlIHN1YmplY3QgaXMgcHJvY2Vzc2VkLCBhbmQgd2hhdCBvdXRwdXQgaXMKKyAgICAgICBwcm9kdWNlZC4KKworICAgICAgIEFzIHRoZSBvcmlnaW5hbCBmYWlybHkgc2ltcGxlIFBDUkUgbGlicmFyeSBldm9sdmVkLCAgaXQgIGFjcXVpcmVkICBtYW55CisgICAgICAgZGlmZmVyZW50ICBmZWF0dXJlcywgIGFuZCAgYXMgIGEgIHJlc3VsdCwgdGhlIG9yaWdpbmFsIHBjcmV0ZXN0IHByb2dyYW0KKyAgICAgICBlbmRlZCB1cCB3aXRoIGEgbG90IG9mIG9wdGlvbnMgaW4gYSBtZXNzeSwgYXJjYW5lIHN5bnRheCwgIGZvciAgdGVzdGluZworICAgICAgIGFsbCB0aGUgZmVhdHVyZXMuIFRoZSBtb3ZlIHRvIHRoZSBuZXcgUENSRTIgQVBJIHByb3ZpZGVkIGFuIG9wcG9ydHVuaXR5CisgICAgICAgdG8gcmUtaW1wbGVtZW50IHRoZSB0ZXN0IHByb2dyYW0gYXMgcGNyZTJ0ZXN0LCB3aXRoIGEgY2xlYW5lciAgbW9kaWZpZXIKKyAgICAgICBzeW50YXguICBOZXZlcnRoZWxlc3MsICB0aGVyZSBhcmUgc3RpbGwgbWFueSBvYnNjdXJlIG1vZGlmaWVycywgc29tZSBvZgorICAgICAgIHdoaWNoIGFyZSBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIHVzZSBpbiBjb25qdW5jdGlvbiAgd2l0aCAgdGhlICB0ZXN0CisgICAgICAgc2NyaXB0ICBhbmQgIGRhdGEgIGZpbGVzIHRoYXQgYXJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQgb2YgUENSRTIuIEFsbCB0aGUKKyAgICAgICBtb2RpZmllcnMgYXJlIGRvY3VtZW50ZWQgaGVyZSwgc29tZSAgd2l0aG91dCAgbXVjaCAganVzdGlmaWNhdGlvbiwgIGJ1dAorICAgICAgIG1hbnkgIG9mICB0aGVtICBhcmUgIHVubGlrZWx5ICB0byAgYmUgIG9mICB1c2UgIGV4Y2VwdCB3aGVuIHRlc3RpbmcgdGhlCisgICAgICAgbGlicmFyaWVzLgorCisKK1BDUkUyJ3MgOC1CSVQsIDE2LUJJVCBBTkQgMzItQklUIExJQlJBUklFUworCisgICAgICAgRGlmZmVyZW50IHZlcnNpb25zIG9mIHRoZSBQQ1JFMiBsaWJyYXJ5IGNhbiBiZSBidWlsdCB0byBzdXBwb3J0IGNoYXJhYy0KKyAgICAgICB0ZXIgIHN0cmluZ3MgIHRoYXQgIGFyZSBlbmNvZGVkIGluIDgtYml0LCAxNi1iaXQsIG9yIDMyLWJpdCBjb2RlIHVuaXRzLgorICAgICAgIE9uZSwgdHdvLCBvciAgYWxsICB0aHJlZSAgb2YgIHRoZXNlICBsaWJyYXJpZXMgIG1heSAgYmUgIHNpbXVsdGFuZW91c2x5CisgICAgICAgaW5zdGFsbGVkLiBUaGUgcGNyZTJ0ZXN0IHByb2dyYW0gY2FuIGJlIHVzZWQgdG8gdGVzdCBhbGwgdGhlIGxpYnJhcmllcy4KKyAgICAgICBIb3dldmVyLCBpdHMgb3duIGlucHV0IGFuZCBvdXRwdXQgYXJlICBhbHdheXMgIGluICA4LWJpdCAgZm9ybWF0LiAgV2hlbgorICAgICAgIHRlc3RpbmcgIHRoZSAgMTYtYml0ICBvciAzMi1iaXQgbGlicmFyaWVzLCBwYXR0ZXJucyBhbmQgc3ViamVjdCBzdHJpbmdzCisgICAgICAgYXJlIGNvbnZlcnRlZCB0byAxNi0gb3IgIDMyLWJpdCAgZm9ybWF0ICBiZWZvcmUgIGJlaW5nICBwYXNzZWQgIHRvICB0aGUKKyAgICAgICBsaWJyYXJ5ICBmdW5jdGlvbnMuICBSZXN1bHRzIGFyZSBjb252ZXJ0ZWQgYmFjayB0byA4LWJpdCBjb2RlIHVuaXRzIGZvcgorICAgICAgIG91dHB1dC4KKworICAgICAgIEluIHRoZSByZXN0IG9mIHRoaXMgZG9jdW1lbnQsIHRoZSBuYW1lcyBvZiBsaWJyYXJ5IGZ1bmN0aW9ucyBhbmQgc3RydWMtCisgICAgICAgdHVyZXMgIGFyZSAgZ2l2ZW4gIGluICBnZW5lcmljICBmb3JtLCAgZm9yIGV4YW1wbGUsIHBjcmVfY29tcGlsZSgpLiBUaGUKKyAgICAgICBhY3R1YWwgbmFtZXMgdXNlZCBpbiB0aGUgbGlicmFyaWVzIGhhdmUgYSBzdWZmaXggXzgsIF8xNiwgIG9yICBfMzIsICBhcworICAgICAgIGFwcHJvcHJpYXRlLgorCisKK0lOUFVUIEVOQ09ESU5HCisKKyAgICAgICBJbnB1dCAgdG8gIHBjcmUydGVzdCBpcyBwcm9jZXNzZWQgbGluZSBieSBsaW5lLCBlaXRoZXIgYnkgY2FsbGluZyB0aGUgQworICAgICAgIGxpYnJhcnkncyBmZ2V0cygpIGZ1bmN0aW9uLCBvciB2aWEgdGhlIGxpYnJlYWRsaW5lIGxpYnJhcnkgKHNlZSBiZWxvdykuCisgICAgICAgVGhlICBpbnB1dCAgaXMgIHByb2Nlc3NlZCB1c2luZyB1c2luZyBDJ3Mgc3RyaW5nIGZ1bmN0aW9ucywgc28gbXVzdCBub3QKKyAgICAgICBjb250YWluIGJpbmFyeSB6ZXJvZXMsIGV2ZW4gdGhvdWdoIGluIFVuaXgtbGlrZSAgZW52aXJvbm1lbnRzLCAgZmdldHMoKQorICAgICAgIHRyZWF0cyBhbnkgYnl0ZXMgb3RoZXIgdGhhbiBuZXdsaW5lIGFzIGRhdGEgY2hhcmFjdGVycy4gSW4gc29tZSBXaW5kb3dzCisgICAgICAgZW52aXJvbm1lbnRzIGNoYXJhY3RlciAyNiAoaGV4IDFBKSBjYXVzZXMgYW4gaW1tZWRpYXRlIGVuZCBvZiBmaWxlLCBhbmQKKyAgICAgICBubyBmdXJ0aGVyIGRhdGEgaXMgcmVhZC4KKworICAgICAgIEZvciAgbWF4aW11bSBwb3J0YWJpbGl0eSwgdGhlcmVmb3JlLCBpdCBpcyBzYWZlc3QgdG8gYXZvaWQgbm9uLXByaW50aW5nCisgICAgICAgY2hhcmFjdGVycyBpbiBwY3JlMnRlc3QgaW5wdXQgZmlsZXMuIFRoZXJlIGlzIGEgZmFjaWxpdHkgZm9yIHNwZWNpZnlpbmcKKyAgICAgICBhIHBhdHRlcm4ncyBjaGFyYWN0ZXJzIGFzIGhleGFkZWNpbWFsIHBhaXJzLCB0aHVzIG1ha2luZyBpdCBwb3NzaWJsZSB0bworICAgICAgIGluY2x1ZGUgYmluYXJ5IHplcm9lcyBpbiBhIHBhdHRlcm4gZm9yIHRlc3RpbmcgcHVycG9zZXMuIFN1YmplY3QgIGxpbmVzCisgICAgICAgYXJlIHByb2Nlc3NlZCBmb3IgYmFja3NsYXNoIGVzY2FwZXMsIHdoaWNoIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGluY2x1ZGUKKyAgICAgICBhbnkgZGF0YSB2YWx1ZS4KKworCitDT01NQU5EIExJTkUgT1BUSU9OUworCisgICAgICAgLTggICAgICAgIElmIHRoZSA4LWJpdCBsaWJyYXJ5IGhhcyBiZWVuIGJ1aWx0LCB0aGlzIG9wdGlvbiBjYXVzZXMgaXQgdG8KKyAgICAgICAgICAgICAgICAgYmUgIHVzZWQgICh0aGlzIGlzIHRoZSBkZWZhdWx0KS4gSWYgdGhlIDgtYml0IGxpYnJhcnkgaGFzIG5vdAorICAgICAgICAgICAgICAgICBiZWVuIGJ1aWx0LCB0aGlzIG9wdGlvbiBjYXVzZXMgYW4gZXJyb3IuCisKKyAgICAgICAtMTYgICAgICAgSWYgdGhlIDE2LWJpdCBsaWJyYXJ5IGhhcyBiZWVuIGJ1aWx0LCB0aGlzIG9wdGlvbiAgY2F1c2VzICBpdAorICAgICAgICAgICAgICAgICB0byAgYmUgIHVzZWQuIElmIG9ubHkgdGhlIDE2LWJpdCBsaWJyYXJ5IGhhcyBiZWVuIGJ1aWx0LCB0aGlzCisgICAgICAgICAgICAgICAgIGlzIHRoZSBkZWZhdWx0LiBJZiB0aGUgMTYtYml0IGxpYnJhcnkgIGhhcyAgbm90ICBiZWVuICBidWlsdCwKKyAgICAgICAgICAgICAgICAgdGhpcyBvcHRpb24gY2F1c2VzIGFuIGVycm9yLgorCisgICAgICAgLTMyICAgICAgIElmICB0aGUgIDMyLWJpdCBsaWJyYXJ5IGhhcyBiZWVuIGJ1aWx0LCB0aGlzIG9wdGlvbiBjYXVzZXMgaXQKKyAgICAgICAgICAgICAgICAgdG8gYmUgdXNlZC4gSWYgb25seSB0aGUgMzItYml0IGxpYnJhcnkgaGFzIGJlZW4gIGJ1aWx0LCAgdGhpcworICAgICAgICAgICAgICAgICBpcyAgdGhlICBkZWZhdWx0LiAgSWYgIHRoZSAzMi1iaXQgbGlicmFyeSBoYXMgbm90IGJlZW4gYnVpbHQsCisgICAgICAgICAgICAgICAgIHRoaXMgb3B0aW9uIGNhdXNlcyBhbiBlcnJvci4KKworICAgICAgIC1iICAgICAgICBCZWhhdmUgYXMgaWYgZWFjaCBwYXR0ZXJuIGhhcyB0aGUgL2Z1bGxiaW5jb2RlIG1vZGlmaWVyOyAgdGhlCisgICAgICAgICAgICAgICAgIGZ1bGwgaW50ZXJuYWwgYmluYXJ5IGZvcm0gb2YgdGhlIHBhdHRlcm4gaXMgb3V0cHV0IGFmdGVyIGNvbS0KKyAgICAgICAgICAgICAgICAgcGlsYXRpb24uCisKKyAgICAgICAtQyAgICAgICAgT3V0cHV0IHRoZSB2ZXJzaW9uIG51bWJlciAgb2YgIHRoZSAgUENSRTIgIGxpYnJhcnksICBhbmQgIGFsbAorICAgICAgICAgICAgICAgICBhdmFpbGFibGUgIGluZm9ybWF0aW9uICBhYm91dCAgdGhlIG9wdGlvbmFsIGZlYXR1cmVzIHRoYXQgYXJlCisgICAgICAgICAgICAgICAgIGluY2x1ZGVkLCBhbmQgdGhlbiAgZXhpdCAgd2l0aCAgemVybyAgZXhpdCAgY29kZS4gIEFsbCAgb3RoZXIKKyAgICAgICAgICAgICAgICAgb3B0aW9ucyBhcmUgaWdub3JlZC4KKworICAgICAgIC1DIG9wdGlvbiBPdXRwdXQgIGluZm9ybWF0aW9uICBhYm91dCBhIHNwZWNpZmljIGJ1aWxkLXRpbWUgb3B0aW9uLCB0aGVuCisgICAgICAgICAgICAgICAgIGV4aXQuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIHNjcmlwdHMgIHN1Y2gKKyAgICAgICAgICAgICAgICAgYXMgIFJ1blRlc3QuICBUaGUgIGZvbGxvd2luZyBvcHRpb25zIG91dHB1dCB0aGUgdmFsdWUgYW5kIHNldAorICAgICAgICAgICAgICAgICB0aGUgZXhpdCBjb2RlIGFzIGluZGljYXRlZDoKKworICAgICAgICAgICAgICAgICAgIGViY2RpYy1ubCAgdGhlIGNvZGUgZm9yIExGICg9IE5MKSBpbiBhbiBFQkNESUMgZW52aXJvbm1lbnQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTUgb3IgMHgyNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIGlmIHVzZWQgaW4gYW4gQVNDSUkgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBjb2RlIGlzIGFsd2F5cyAwCisgICAgICAgICAgICAgICAgICAgbGlua3NpemUgICB0aGUgY29uZmlndXJlZCBpbnRlcm5hbCBsaW5rIHNpemUgKDIsIDMsIG9yIDQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQgY29kZSBpcyBzZXQgdG8gdGhlIGxpbmsgc2l6ZQorICAgICAgICAgICAgICAgICAgIG5ld2xpbmUgICAgdGhlIGRlZmF1bHQgbmV3bGluZSBzZXR0aW5nOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUiwgTEYsIENSTEYsIEFOWUNSTEYsIG9yIEFOWQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0IGNvZGUgaXMgYWx3YXlzIDAKKyAgICAgICAgICAgICAgICAgICBic3IgICAgICAgIHRoZSBkZWZhdWx0IHNldHRpbmcgZm9yIHdoYXQgXFIgbWF0Y2hlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5ZQ1JMRiBvciBBTlkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCBjb2RlIGlzIGFsd2F5cyAwCisKKyAgICAgICAgICAgICAgICAgVGhlIGZvbGxvd2luZyBvcHRpb25zIG91dHB1dCAxIGZvciB0cnVlIG9yIDAgZm9yICBmYWxzZSwgIGFuZAorICAgICAgICAgICAgICAgICBzZXQgdGhlIGV4aXQgY29kZSB0byB0aGUgc2FtZSB2YWx1ZToKKworICAgICAgICAgICAgICAgICAgIGJhY2tzbGFzaC1DICBcQyBpcyBzdXBwb3J0ZWQgKG5vdCBsb2NrZWQgb3V0KQorICAgICAgICAgICAgICAgICAgIGViY2RpYyAgICAgICBjb21waWxlZCBmb3IgYW4gRUJDRElDIGVudmlyb25tZW50CisgICAgICAgICAgICAgICAgICAgaml0ICAgICAgICAgIGp1c3QtaW4tdGltZSBzdXBwb3J0IGlzIGF2YWlsYWJsZQorICAgICAgICAgICAgICAgICAgIHBjcmUyLTE2ICAgICB0aGUgMTYtYml0IGxpYnJhcnkgd2FzIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgcGNyZTItMzIgICAgIHRoZSAzMi1iaXQgbGlicmFyeSB3YXMgYnVpbHQKKyAgICAgICAgICAgICAgICAgICBwY3JlMi04ICAgICAgdGhlIDgtYml0IGxpYnJhcnkgd2FzIGJ1aWx0CisgICAgICAgICAgICAgICAgICAgdW5pY29kZSAgICAgIFVuaWNvZGUgc3VwcG9ydCBpcyBhdmFpbGFibGUKKworICAgICAgICAgICAgICAgICBJZiAgYW4gIHVua25vd24gIG9wdGlvbiBpcyBnaXZlbiwgYW4gZXJyb3IgbWVzc2FnZSBpcyBvdXRwdXQ7CisgICAgICAgICAgICAgICAgIHRoZSBleGl0IGNvZGUgaXMgMC4KKworICAgICAgIC1kICAgICAgICBCZWhhdmUgYXMgaWYgZWFjaCBwYXR0ZXJuIGhhcyB0aGUgZGVidWcgbW9kaWZpZXI7IHRoZSAgaW50ZXItCisgICAgICAgICAgICAgICAgIG5hbCBmb3JtIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZWQgcGF0dGVybiBpcyBvdXRwdXQKKyAgICAgICAgICAgICAgICAgYWZ0ZXIgY29tcGlsYXRpb247IC1kIGlzIGVxdWl2YWxlbnQgdG8gLWIgLWkuCisKKyAgICAgICAtZGZhICAgICAgQmVoYXZlIGFzIGlmIGVhY2ggc3ViamVjdCBsaW5lIGhhcyB0aGUgZGZhIG1vZGlmaWVyOyBtYXRjaGluZworICAgICAgICAgICAgICAgICBpcyAgZG9uZSAgdXNpbmcgdGhlIHBjcmUyX2RmYV9tYXRjaCgpIGZ1bmN0aW9uIGluc3RlYWQgb2YgdGhlCisgICAgICAgICAgICAgICAgIGRlZmF1bHQgcGNyZTJfbWF0Y2goKS4KKworICAgICAgIC1oZWxwICAgICBPdXRwdXQgYSBicmllZiBzdW1tYXJ5IHRoZXNlIG9wdGlvbnMgYW5kIHRoZW4gZXhpdC4KKworICAgICAgIC1pICAgICAgICBCZWhhdmUgYXMgaWYgZWFjaCBwYXR0ZXJuIGhhcyB0aGUgL2luZm8gbW9kaWZpZXI7IGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgIGFib3V0IHRoZSBjb21waWxlZCBwYXR0ZXJuIGlzIGdpdmVuIGFmdGVyIGNvbXBpbGF0aW9uLgorCisgICAgICAgLWppdCAgICAgIEJlaGF2ZSAgYXMgIGlmICBlYWNoIHBhdHRlcm4gbGluZSBoYXMgdGhlIGppdCBtb2RpZmllcjsgYWZ0ZXIKKyAgICAgICAgICAgICAgICAgc3VjY2Vzc2Z1bCBjb21waWxhdGlvbiwgZWFjaCBwYXR0ZXJuIGlzIHBhc3NlZCB0byAgdGhlICBqdXN0LQorICAgICAgICAgICAgICAgICBpbi10aW1lIGNvbXBpbGVyLCBpZiBhdmFpbGFibGUuCisKKyAgICAgICAtcGF0dGVybiBtb2RpZmllci1saXN0CisgICAgICAgICAgICAgICAgIEJlaGF2ZSBhcyBpZiBlYWNoIHBhdHRlcm4gbGluZSBjb250YWlucyB0aGUgZ2l2ZW4gbW9kaWZpZXJzLgorCisgICAgICAgLXEgICAgICAgIERvIG5vdCBvdXRwdXQgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHBjcmUydGVzdCBhdCB0aGUgc3RhcnQgb2YKKyAgICAgICAgICAgICAgICAgZXhlY3V0aW9uLgorCisgICAgICAgLVMgc2l6ZSAgIE9uIFVuaXgtbGlrZSBzeXN0ZW1zLCBzZXQgdGhlIHNpemUgb2YgdGhlIHJ1bi10aW1lICBzdGFjayAgdG8KKyAgICAgICAgICAgICAgICAgc2l6ZSBtZWdhYnl0ZXMuCisKKyAgICAgICAtc3ViamVjdCBtb2RpZmllci1saXN0CisgICAgICAgICAgICAgICAgIEJlaGF2ZSBhcyBpZiBlYWNoIHN1YmplY3QgbGluZSBjb250YWlucyB0aGUgZ2l2ZW4gbW9kaWZpZXJzLgorCisgICAgICAgLXQgICAgICAgIFJ1biAgZWFjaCBjb21waWxlIGFuZCBtYXRjaCBtYW55IHRpbWVzIHdpdGggYSB0aW1lciwgYW5kIG91dC0KKyAgICAgICAgICAgICAgICAgcHV0IHRoZSByZXN1bHRpbmcgdGltZXMgcGVyIGNvbXBpbGUgb3IgIG1hdGNoLiAgV2hlbiAgSklUICBpcworICAgICAgICAgICAgICAgICB1c2VkLCAgc2VwYXJhdGUgIHRpbWVzICBhcmUgZ2l2ZW4gZm9yIHRoZSBpbml0aWFsIGNvbXBpbGUgYW5kCisgICAgICAgICAgICAgICAgIHRoZSBKSVQgY29tcGlsZS4gWW91IGNhbiBjb250cm9sICB0aGUgIG51bWJlciAgb2YgIGl0ZXJhdGlvbnMKKyAgICAgICAgICAgICAgICAgdGhhdCAgYXJlIHVzZWQgZm9yIHRpbWluZyBieSBmb2xsb3dpbmcgLXQgd2l0aCBhIG51bWJlciAoYXMgYQorICAgICAgICAgICAgICAgICBzZXBhcmF0ZSBpdGVtIG9uIHRoZSBjb21tYW5kIGxpbmUpLiBGb3IgIGV4YW1wbGUsICAiLXQgIDEwMDAiCisgICAgICAgICAgICAgICAgIGl0ZXJhdGVzIDEwMDAgdGltZXMuIFRoZSBkZWZhdWx0IGlzIHRvIGl0ZXJhdGUgNTAwLDAwMCB0aW1lcy4KKworICAgICAgIC10bSAgICAgICBUaGlzIGlzIGxpa2UgLXQgZXhjZXB0IHRoYXQgaXQgdGltZXMgb25seSB0aGUgbWF0Y2hpbmcgcGhhc2UsCisgICAgICAgICAgICAgICAgIG5vdCB0aGUgY29tcGlsZSBwaGFzZS4KKworICAgICAgIC1UIC1UTSAgICBUaGVzZSBiZWhhdmUgbGlrZSAtdCBhbmQgLXRtLCBidXQgaW4gYWRkaXRpb24sIGF0IHRoZSBlbmQgIG9mCisgICAgICAgICAgICAgICAgIGEgIHJ1biwgdGhlIHRvdGFsIHRpbWVzIGZvciBhbGwgY29tcGlsZXMgYW5kIG1hdGNoZXMgYXJlIG91dC0KKyAgICAgICAgICAgICAgICAgcHV0LgorCisgICAgICAgLXZlcnNpb24gIE91dHB1dCB0aGUgUENSRTIgdmVyc2lvbiBudW1iZXIgYW5kIHRoZW4gZXhpdC4KKworCitERVNDUklQVElPTgorCisgICAgICAgSWYgcGNyZTJ0ZXN0IGlzIGdpdmVuIHR3byBmaWxlbmFtZSBhcmd1bWVudHMsIGl0IHJlYWRzIGZyb20gIHRoZSAgZmlyc3QKKyAgICAgICBhbmQgd3JpdGVzIHRvIHRoZSBzZWNvbmQuIElmIHRoZSBmaXJzdCBuYW1lIGlzICItIiwgaW5wdXQgaXMgdGFrZW4gZnJvbQorICAgICAgIHRoZSBzdGFuZGFyZCBpbnB1dC4gSWYgcGNyZTJ0ZXN0IGlzIGdpdmVuIG9ubHkgb25lIGFyZ3VtZW50LCAgaXQgIHJlYWRzCisgICAgICAgZnJvbSB0aGF0IGZpbGUgYW5kIHdyaXRlcyB0byBzdGRvdXQuIE90aGVyd2lzZSwgaXQgcmVhZHMgZnJvbSBzdGRpbiBhbmQKKyAgICAgICB3cml0ZXMgdG8gc3Rkb3V0LgorCisgICAgICAgV2hlbiBwY3JlMnRlc3QgaXMgYnVpbHQsIGEgY29uZmlndXJhdGlvbiBvcHRpb24gIGNhbiAgc3BlY2lmeSAgdGhhdCAgaXQKKyAgICAgICBzaG91bGQgIGJlIGxpbmtlZCB3aXRoIHRoZSBsaWJyZWFkbGluZSBvciBsaWJlZGl0IGxpYnJhcnkuIFdoZW4gdGhpcyBpcworICAgICAgIGRvbmUsIGlmIHRoZSBpbnB1dCBpcyBmcm9tIGEgdGVybWluYWwsIGl0IGlzIHJlYWQgdXNpbmcgdGhlICByZWFkbGluZSgpCisgICAgICAgZnVuY3Rpb24uIFRoaXMgcHJvdmlkZXMgbGluZS1lZGl0aW5nIGFuZCBoaXN0b3J5IGZhY2lsaXRpZXMuIFRoZSBvdXRwdXQKKyAgICAgICBmcm9tIHRoZSAtaGVscCBvcHRpb24gc3RhdGVzIHdoZXRoZXIgb3Igbm90IHJlYWRsaW5lKCkgd2lsbCBiZSB1c2VkLgorCisgICAgICAgVGhlIHByb2dyYW0gaGFuZGxlcyBhbnkgbnVtYmVyIG9mIHRlc3RzLCBlYWNoIG9mIHdoaWNoICBjb25zaXN0cyAgb2YgIGEKKyAgICAgICBzZXQgIG9mIGlucHV0IGxpbmVzLiBFYWNoIHNldCBzdGFydHMgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuLAorICAgICAgIGZvbGxvd2VkIGJ5IGFueSBudW1iZXIgb2Ygc3ViamVjdCBsaW5lcyB0byBiZSBtYXRjaGVkIGFnYWluc3QgdGhhdCBwYXQtCisgICAgICAgdGVybi4gSW4gYmV0d2VlbiBzZXRzIG9mIHRlc3QgZGF0YSwgY29tbWFuZCBsaW5lcyB0aGF0IGJlZ2luIHdpdGggIyBtYXkKKyAgICAgICBhcHBlYXIuIFRoaXMgZmlsZSBmb3JtYXQsIHdpdGggc29tZSByZXN0cmljdGlvbnMsIGNhbiBhbHNvIGJlIHByb2Nlc3NlZAorICAgICAgIGJ5ICB0aGUgcGVybHRlc3Quc2ggc2NyaXB0IHRoYXQgaXMgZGlzdHJpYnV0ZWQgd2l0aCBQQ1JFMiBhcyBhIG1lYW5zIG9mCisgICAgICAgY2hlY2tpbmcgdGhhdCB0aGUgYmVoYXZpb3VyIG9mIFBDUkUyIGFuZCBQZXJsIGlzIHRoZSBzYW1lLgorCisgICAgICAgV2hlbiB0aGUgaW5wdXQgaXMgYSB0ZXJtaW5hbCwgcGNyZTJ0ZXN0IHByb21wdHMgZm9yIGVhY2ggbGluZSBvZiBpbnB1dCwKKyAgICAgICB1c2luZyAgInJlPiIgIHRvIHByb21wdCBmb3IgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5zLCBhbmQgImRhdGE+IiB0bworICAgICAgIHByb21wdCBmb3Igc3ViamVjdCBsaW5lcy4gQ29tbWFuZCBsaW5lcyBzdGFydGluZyB3aXRoICMgY2FuIGJlICBlbnRlcmVkCisgICAgICAgb25seSBpbiByZXNwb25zZSB0byB0aGUgInJlPiIgcHJvbXB0LgorCisgICAgICAgRWFjaCAgc3ViamVjdCBsaW5lIGlzIG1hdGNoZWQgc2VwYXJhdGVseSBhbmQgaW5kZXBlbmRlbnRseS4gSWYgeW91IHdhbnQKKyAgICAgICB0byBkbyBtdWx0aS1saW5lIG1hdGNoZXMsIHlvdSBoYXZlIHRvIHVzZSB0aGUgXG4gZXNjYXBlIHNlcXVlbmNlIChvciBccgorICAgICAgIG9yICBcclxuLCAgZXRjLiwgIGRlcGVuZGluZyBvbiB0aGUgbmV3bGluZSBzZXR0aW5nKSBpbiBhIHNpbmdsZSBsaW5lIG9mCisgICAgICAgaW5wdXQgdG8gZW5jb2RlIHRoZSBuZXdsaW5lIHNlcXVlbmNlcy4gVGhlcmUgaXMgbm8gbGltaXQgb24gdGhlICBsZW5ndGgKKyAgICAgICBvZiAgc3ViamVjdCAgbGluZXM7IHRoZSBpbnB1dCBidWZmZXIgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCBpZiBpdCBpcworICAgICAgIHRvbyBzbWFsbC4gVGhlcmUgYXJlIHJlcGxpY2F0aW9uIGZlYXR1cmVzIHRoYXQgIG1ha2VzICBpdCAgcG9zc2libGUgIHRvCisgICAgICAgZ2VuZXJhdGUgIGxvbmcgIHJlcGV0aXRpdmUgIHBhdHRlcm4gIG9yIHN1YmplY3QgbGluZXMgd2l0aG91dCBoYXZpbmcgdG8KKyAgICAgICBzdXBwbHkgdGhlbSBleHBsaWNpdGx5LgorCisgICAgICAgQW4gZW1wdHkgbGluZSBvciB0aGUgZW5kIG9mIHRoZSBmaWxlIHNpZ25hbHMgdGhlICBlbmQgIG9mICB0aGUgIHN1YmplY3QKKyAgICAgICBsaW5lcyAgZm9yICBhICB0ZXN0LCAgYXQgIHdoaWNoICBwb2ludCBhIG5ldyBwYXR0ZXJuIG9yIGNvbW1hbmQgbGluZSBpcworICAgICAgIGV4cGVjdGVkIGlmIHRoZXJlIGlzIHN0aWxsIGlucHV0IHRvIGJlIHJlYWQuCisKKworQ09NTUFORCBMSU5FUworCisgICAgICAgSW4gYmV0d2VlbiBzZXRzIG9mIHRlc3QgZGF0YSwgYSBsaW5lIHRoYXQgYmVnaW5zIHdpdGggIyBpcyAgaW50ZXJwcmV0ZWQKKyAgICAgICBhcyBhIGNvbW1hbmQgbGluZS4gSWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpcyBmb2xsb3dlZCBieSB3aGl0ZSBzcGFjZSBvcgorICAgICAgIGFuIGV4Y2xhbWF0aW9uIG1hcmssIHRoZSBsaW5lIGlzIHRyZWF0ZWQgYXMgIGEgIGNvbW1lbnQsICBhbmQgIGlnbm9yZWQuCisgICAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSByZWNvZ25pemVkOgorCisgICAgICAgICAjZm9yYmlkX3V0ZgorCisgICAgICAgU3Vic2VxdWVudCAgIHBhdHRlcm5zICAgYXV0b21hdGljYWxseSAgIGhhdmUgIHRoZSAgUENSRTJfTkVWRVJfVVRGICBhbmQKKyAgICAgICBQQ1JFMl9ORVZFUl9VQ1Agb3B0aW9ucyBzZXQsIHdoaWNoIGxvY2tzIG91dCB0aGUgdXNlIG9mICB0aGUgIFBDUkUyX1VURgorICAgICAgIGFuZCAgUENSRTJfVUNQIG9wdGlvbnMgYW5kIHRoZSB1c2Ugb2YgKCpVVEYpIGFuZCAoKlVDUCkgYXQgdGhlIHN0YXJ0IG9mCisgICAgICAgcGF0dGVybnMuIFRoaXMgY29tbWFuZCBhbHNvIGZvcmNlcyBhbiBlcnJvciAgaWYgIGEgIHN1YnNlcXVlbnQgIHBhdHRlcm4KKyAgICAgICBjb250YWlucyAgYW55ICBvY2N1cnJlbmNlcyAgb2YgXFAsIFxwLCBvciBcWCwgd2hpY2ggYXJlIHN0aWxsIHN1cHBvcnRlZAorICAgICAgIHdoZW4gUENSRTJfVVRGIGlzIG5vdCBzZXQsIGJ1dCB3aGljaCByZXF1aXJlIFVuaWNvZGUgIHByb3BlcnR5ICBzdXBwb3J0CisgICAgICAgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkuCisKKyAgICAgICBUaGlzICBpcyAgYSB0cmlnZ2VyIGd1YXJkIHRoYXQgaXMgdXNlZCBpbiB0ZXN0IGZpbGVzIHRvIGVuc3VyZSB0aGF0IFVURgorICAgICAgIG9yIFVuaWNvZGUgcHJvcGVydHkgdGVzdHMgYXJlIG5vdCBhY2NpZGVudGFsbHkgYWRkZWQgdG8gZmlsZXMgdGhhdCAgYXJlCisgICAgICAgdXNlZCAgd2hlbiAgVW5pY29kZSAgc3VwcG9ydCAgaXMgIG5vdCAgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkuIFNldHRpbmcKKyAgICAgICBQQ1JFMl9ORVZFUl9VVEYgYW5kIFBDUkUyX05FVkVSX1VDUCBhcyBhIGRlZmF1bHQgY2FuIGFsc28gIGJlICBvYnRhaW5lZAorICAgICAgIGJ5ICB0aGUgIHVzZSAgb2YgI3BhdHRlcm47IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgI2ZvcmJpZF91dGYgY2Fubm90IGJlCisgICAgICAgdW5zZXQsIGFuZCB0aGUgYXV0b21hdGljIG9wdGlvbnMgYXJlIG5vdCBkaXNwbGF5ZWQgaW4gcGF0dGVybiAgaW5mb3JtYS0KKyAgICAgICB0aW9uLCB0byBhdm9pZCBjbHV0dGVyaW5nIHVwIHRlc3Qgb3V0cHV0LgorCisgICAgICAgICAjbG9hZCA8ZmlsZW5hbWU+CisKKyAgICAgICBUaGlzIGNvbW1hbmQgaXMgdXNlZCB0byBsb2FkIGEgc2V0IG9mIHByZWNvbXBpbGVkIHBhdHRlcm5zIGZyb20gYSBmaWxlLAorICAgICAgIGFzIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAgIlNhdmluZyAgYW5kICByZXN0b3JpbmcgIGNvbXBpbGVkCisgICAgICAgcGF0dGVybnMiIGJlbG93LgorCisgICAgICAgICAjbmV3bGluZV9kZWZhdWx0IFs8bmV3bGluZS1saXN0Pl0KKworICAgICAgIFdoZW4gIFBDUkUyICBpcyAgYnVpbHQsICBhIGRlZmF1bHQgbmV3bGluZSBjb252ZW50aW9uIGNhbiBiZSBzcGVjaWZpZWQuCisgICAgICAgVGhpcyBkZXRlcm1pbmVzIHdoaWNoIGNoYXJhY3RlcnMgYW5kL29yIGNoYXJhY3RlciBwYWlycyBhcmUgIHJlY29nbml6ZWQKKyAgICAgICBhcyBpbmRpY2F0aW5nIGEgbmV3bGluZSBpbiBhIHBhdHRlcm4gb3Igc3ViamVjdCBzdHJpbmcuIFRoZSBkZWZhdWx0IGNhbgorICAgICAgIGJlIG92ZXJyaWRkZW4gd2hlbiBhIHBhdHRlcm4gaXMgY29tcGlsZWQuIFRoZSBzdGFuZGFyZCB0ZXN0IGZpbGVzICBjb24tCisgICAgICAgdGFpbiAgdGVzdHMgIG9mICB2YXJpb3VzICBuZXdsaW5lICBjb252ZW50aW9ucywgYnV0IHRoZSBtYWpvcml0eSBvZiB0aGUKKyAgICAgICB0ZXN0cyBleHBlY3QgYSBzaW5nbGUgIGxpbmVmZWVkICB0byAgYmUgIHJlY29nbml6ZWQgIGFzICBhICBuZXdsaW5lICBieQorICAgICAgIGRlZmF1bHQuIFdpdGhvdXQgc3BlY2lhbCBhY3Rpb24gdGhlIHRlc3RzIHdvdWxkIGZhaWwgd2hlbiBQQ1JFMiBpcyBjb20tCisgICAgICAgcGlsZWQgd2l0aCBlaXRoZXIgQ1Igb3IgQ1JMRiBhcyB0aGUgZGVmYXVsdCBuZXdsaW5lLgorCisgICAgICAgVGhlICNuZXdsaW5lX2RlZmF1bHQgY29tbWFuZCBzcGVjaWZpZXMgYSBsaXN0IG9mIG5ld2xpbmUgdHlwZXMgdGhhdCBhcmUKKyAgICAgICBhY2NlcHRhYmxlICBhcyB0aGUgZGVmYXVsdC4gVGhlIHR5cGVzIG11c3QgYmUgb25lIG9mIENSLCBMRiwgQ1JMRiwgQU5ZLQorICAgICAgIENSTEYsIG9yIEFOWSAoaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSksIGZvciBleGFtcGxlOgorCisgICAgICAgICAjbmV3bGluZV9kZWZhdWx0IExGIEFueSBhbnlDUkxGCisKKyAgICAgICBJZiB0aGUgZGVmYXVsdCBuZXdsaW5lIGlzIGluIHRoZSBsaXN0LCB0aGlzIGNvbW1hbmQgaGFzIG5vIGVmZmVjdC4gT3RoLQorICAgICAgIGVyd2lzZSwgIGV4Y2VwdCAgd2hlbiAgdGVzdGluZyAgdGhlICBQT1NJWCBBUEksIGEgbmV3bGluZSBtb2RpZmllciB0aGF0CisgICAgICAgc3BlY2lmaWVzIHRoZSBmaXJzdCBuZXdsaW5lIGNvbnZlbnRpb24gaW4gdGhlIGxpc3QgIChMRiAgaW4gIHRoZSAgYWJvdmUKKyAgICAgICBleGFtcGxlKSAgaXMgIGFkZGVkIHRvIGFueSBwYXR0ZXJuIHRoYXQgZG9lcyBub3QgYWxyZWFkeSBoYXZlIGEgbmV3bGluZQorICAgICAgIG1vZGlmaWVyLiBJZiB0aGUgbmV3bGluZSBsaXN0IGlzIGVtcHR5LCB0aGUgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmLiBUaGlzCisgICAgICAgY29tbWFuZCBpcyBwcmVzZW50IGluIGEgbnVtYmVyIG9mIHRoZSBzdGFuZGFyZCB0ZXN0IGlucHV0IGZpbGVzLgorCisgICAgICAgV2hlbiAgdGhlICBQT1NJWCAgQVBJICBpcyAgYmVpbmcgdGVzdGVkIHRoZXJlIGlzIG5vIHdheSB0byBvdmVycmlkZSB0aGUKKyAgICAgICBkZWZhdWx0IG5ld2xpbmUgY29udmVudGlvbiwgdGhvdWdoIGl0IGlzIHBvc3NpYmxlIHRvICBzZXQgIHRoZSAgbmV3bGluZQorICAgICAgIGNvbnZlbnRpb24gIGZyb20gIHdpdGhpbiAgdGhlICBwYXR0ZXJuLiBBIHdhcm5pbmcgaXMgZ2l2ZW4gaWYgdGhlIHBvc2l4CisgICAgICAgbW9kaWZpZXIgaXMgdXNlZCB3aGVuICNuZXdsaW5lX2RlZmF1bHQgd291bGQgc2V0IGEgZGVmYXVsdCBmb3IgdGhlIG5vbi0KKyAgICAgICBQT1NJWCBBUEkuCisKKyAgICAgICAgICNwYXR0ZXJuIDxtb2RpZmllci1saXN0PgorCisgICAgICAgVGhpcyAgY29tbWFuZCAgc2V0cyAgYSBkZWZhdWx0IG1vZGlmaWVyIGxpc3QgdGhhdCBhcHBsaWVzIHRvIGFsbCBzdWJzZS0KKyAgICAgICBxdWVudCBwYXR0ZXJucy4gTW9kaWZpZXJzIG9uIGEgcGF0dGVybiBjYW4gY2hhbmdlIHRoZXNlIHNldHRpbmdzLgorCisgICAgICAgICAjcGVybHRlc3QKKworICAgICAgIFRoZSBhcHBlYXJhbmNlIG9mIHRoaXMgbGluZSBjYXVzZXMgYWxsIHN1YnNlcXVlbnQgbW9kaWZpZXIgc2V0dGluZ3MgIHRvCisgICAgICAgYmUgY2hlY2tlZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBwZXJsdGVzdC5zaCBzY3JpcHQsIHdoaWNoIGlzIHVzZWQKKyAgICAgICB0byBjb25maXJtIHRoYXQgUGVybCBnaXZlcyB0aGUgc2FtZSByZXN1bHRzIGFzIFBDUkUyLiBBbHNvLCBhcGFydCAgZnJvbQorICAgICAgIGNvbW1lbnQgIGxpbmVzLCAgbm9uZSBvZiB0aGUgb3RoZXIgY29tbWFuZCBsaW5lcyBhcmUgcGVybWl0dGVkLCBiZWNhdXNlCisgICAgICAgdGhleSBhbmQgbWFueSBvZiB0aGUgbW9kaWZpZXJzIGFyZSBzcGVjaWZpYyB0byAgcGNyZTJ0ZXN0LCAgYW5kICBzaG91bGQKKyAgICAgICBub3QgIGJlICB1c2VkIGluIHRlc3QgZmlsZXMgdGhhdCBhcmUgYWxzbyBwcm9jZXNzZWQgYnkgcGVybHRlc3Quc2guIFRoZQorICAgICAgICNwZXJsdGVzdCBjb21tYW5kIGhlbHBzIGRldGVjdCB0ZXN0cyB0aGF0IGFyZSBhY2NpZGVudGFsbHkgcHV0ICBpbiAgdGhlCisgICAgICAgd3JvbmcgZmlsZS4KKworICAgICAgICAgI3BvcCBbPG1vZGlmaWVycz5dCisKKyAgICAgICBUaGlzICBjb21tYW5kICBpcyB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlIHN0YWNrIG9mIGNvbXBpbGVkIHBhdHRlcm5zLCBhcworICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiU2F2aW5nIGFuZCByZXN0b3JpbmcgIGNvbXBpbGVkICBwYXQtCisgICAgICAgdGVybnMiIGJlbG93LgorCisgICAgICAgICAjc2F2ZSA8ZmlsZW5hbWU+CisKKyAgICAgICBUaGlzICBjb21tYW5kICBpcyB1c2VkIHRvIHNhdmUgYSBzZXQgb2YgY29tcGlsZWQgcGF0dGVybnMgdG8gYSBmaWxlLCBhcworICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiU2F2aW5nIGFuZCByZXN0b3JpbmcgIGNvbXBpbGVkICBwYXQtCisgICAgICAgdGVybnMiIGJlbG93LgorCisgICAgICAgICAjc3ViamVjdCA8bW9kaWZpZXItbGlzdD4KKworICAgICAgIFRoaXMgIGNvbW1hbmQgIHNldHMgIGEgZGVmYXVsdCBtb2RpZmllciBsaXN0IHRoYXQgYXBwbGllcyB0byBhbGwgc3Vic2UtCisgICAgICAgcXVlbnQgc3ViamVjdCBsaW5lcy4gTW9kaWZpZXJzIG9uIGEgc3ViamVjdCBsaW5lIGNhbiBjaGFuZ2UgdGhlc2UgIHNldC0KKyAgICAgICB0aW5ncy4KKworCitNT0RJRklFUiBTWU5UQVgKKworICAgICAgIE1vZGlmaWVyIGxpc3RzIGFyZSB1c2VkIHdpdGggYm90aCBwYXR0ZXJuIGFuZCBzdWJqZWN0IGxpbmVzLiBJdGVtcyBpbiBhCisgICAgICAgbGlzdCBhcmUgc2VwYXJhdGVkIGJ5IGNvbW1hcyBmb2xsb3dlZCBieSBvcHRpb25hbCB3aGl0ZSBzcGFjZS4gVHJhaWxpbmcKKyAgICAgICB3aGl0ZXNwYWNlICBpbiAgYSBtb2RpZmllciBsaXN0IGlzIGlnbm9yZWQuIFNvbWUgbW9kaWZpZXJzIG1heSBiZSBnaXZlbgorICAgICAgIGZvciBib3RoIHBhdHRlcm5zIGFuZCBzdWJqZWN0IGxpbmVzLCB3aGVyZWFzIG90aGVycyBhcmUgdmFsaWQgb25seSAgZm9yCisgICAgICAgb25lICBvciAgdGhlICBvdGhlci4gIEVhY2ggIG1vZGlmaWVyICBoYXMgIGEgIGxvbmcgIG5hbWUsICBmb3IgIGV4YW1wbGUKKyAgICAgICAiYW5jaG9yZWQiLCBhbmQgc29tZSBvZiB0aGVtIG11c3QgYmUgZm9sbG93ZWQgYnkgYW4gZXF1YWxzIHNpZ24gIGFuZCAgYQorICAgICAgIHZhbHVlLCAgZm9yICBleGFtcGxlLCAgIm9mZnNldD0xMiIuIFZhbHVlcyBjYW5ub3QgY29udGFpbiBjb21tYSBjaGFyYWMtCisgICAgICAgdGVycywgYnV0IG1heSBjb250YWluIHNwYWNlcy4gTW9kaWZpZXJzIHRoYXQgZG8gbm90IHRha2UgdmFsdWVzIG1heSAgYmUKKyAgICAgICBwcmVjZWRlZCBieSBhIG1pbnVzIHNpZ24gdG8gdHVybiBvZmYgYSBwcmV2aW91cyBzZXR0aW5nLgorCisgICAgICAgQSBmZXcgb2YgdGhlIG1vcmUgY29tbW9uIG1vZGlmaWVycyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgYXMgc2luZ2xlIGxldC0KKyAgICAgICB0ZXJzLCBmb3IgZXhhbXBsZSAiaSIgZm9yICJjYXNlbGVzcyIuIEluIGRvY3VtZW50YXRpb24sICBmb2xsb3dpbmcgIHRoZQorICAgICAgIFBlcmwgY29udmVudGlvbiwgdGhlc2UgYXJlIHdyaXR0ZW4gd2l0aCBhIHNsYXNoICgidGhlIC9pIG1vZGlmaWVyIikgZm9yCisgICAgICAgY2xhcml0eS4gQWJicmV2aWF0ZWQgbW9kaWZpZXJzIG11c3QgYWxsIGJlIGNvbmNhdGVuYXRlZCAgaW4gIHRoZSAgZmlyc3QKKyAgICAgICBpdGVtICBvZiBhIG1vZGlmaWVyIGxpc3QuIElmIHRoZSBmaXJzdCBpdGVtIGlzIG5vdCByZWNvZ25pemVkIGFzIGEgbG9uZworICAgICAgIG1vZGlmaWVyIG5hbWUsIGl0IGlzIGludGVycHJldGVkIGFzIGEgc2VxdWVuY2Ugb2YgdGhlc2UgIGFiYnJldmlhdGlvbnMuCisgICAgICAgRm9yIGV4YW1wbGU6CisKKyAgICAgICAgIC9hYmMvaWcsbmV3bGluZT1jcixqaXQ9MworCisgICAgICAgVGhpcyAgaXMgIGEgcGF0dGVybiBsaW5lIHdob3NlIG1vZGlmaWVyIGxpc3Qgc3RhcnRzIHdpdGggdHdvIG9uZS1sZXR0ZXIKKyAgICAgICBtb2RpZmllcnMgKC9pIGFuZCAvZykuIFRoZSBsb3dlci1jYXNlICBhYmJyZXZpYXRlZCAgbW9kaWZpZXJzICBhcmUgIHRoZQorICAgICAgIHNhbWUgYXMgdXNlZCBpbiBQZXJsLgorCisKK1BBVFRFUk4gU1lOVEFYCisKKyAgICAgICBBICBwYXR0ZXJuIGxpbmUgbXVzdCBzdGFydCB3aXRoIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgKGNvbW1vbgorICAgICAgIHN5bWJvbHMsIGV4Y2x1ZGluZyBwYXR0ZXJuIG1ldGEtY2hhcmFjdGVycyk6CisKKyAgICAgICAgIC8gISAiICcgYCAtID0gXyA6IDsgLCAlICYgQCB+CisKKyAgICAgICBUaGlzIGlzIGludGVycHJldGVkIGFzIHRoZSBwYXR0ZXJuJ3MgZGVsaW1pdGVyLiAgQSAgcmVndWxhciAgZXhwcmVzc2lvbgorICAgICAgIG1heSAgYmUgIGNvbnRpbnVlZCAgb3ZlciBzZXZlcmFsIGlucHV0IGxpbmVzLCBpbiB3aGljaCBjYXNlIHRoZSBuZXdsaW5lCisgICAgICAgY2hhcmFjdGVycyBhcmUgaW5jbHVkZWQgd2l0aGluIGl0LiBJdCBpcyBwb3NzaWJsZSB0byBpbmNsdWRlIHRoZSBkZWxpbS0KKyAgICAgICBpdGVyIHdpdGhpbiB0aGUgcGF0dGVybiBieSBlc2NhcGluZyBpdCB3aXRoIGEgYmFja3NsYXNoLCBmb3IgZXhhbXBsZQorCisgICAgICAgICAvYWJjXC9kZWYvCisKKyAgICAgICBJZiAgeW91IGRvIHRoaXMsIHRoZSBlc2NhcGUgYW5kIHRoZSBkZWxpbWl0ZXIgZm9ybSBwYXJ0IG9mIHRoZSBwYXR0ZXJuLAorICAgICAgIGJ1dCBzaW5jZSB0aGUgZGVsaW1pdGVycyBhcmUgYWxsIG5vbi1hbHBoYW51bWVyaWMsIHRoaXMgZG9lcyBub3QgYWZmZWN0CisgICAgICAgaXRzICBpbnRlcnByZXRhdGlvbi4gIElmICB0aGUgdGVybWluYXRpbmcgZGVsaW1pdGVyIGlzIGltbWVkaWF0ZWx5IGZvbC0KKyAgICAgICBsb3dlZCBieSBhIGJhY2tzbGFzaCwgZm9yIGV4YW1wbGUsCisKKyAgICAgICAgIC9hYmMvXAorCisgICAgICAgdGhlbiBhIGJhY2tzbGFzaCBpcyBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLiBUaGlzICBpcyAgZG9uZSAgdG8KKyAgICAgICBwcm92aWRlICBhICB3YXkgb2YgdGVzdGluZyB0aGUgZXJyb3IgY29uZGl0aW9uIHRoYXQgYXJpc2VzIGlmIGEgcGF0dGVybgorICAgICAgIGZpbmlzaGVzIHdpdGggYSBiYWNrc2xhc2gsIGJlY2F1c2UKKworICAgICAgICAgL2FiY1wvCisKKyAgICAgICBpcyBpbnRlcnByZXRlZCBhcyB0aGUgZmlyc3QgbGluZSBvZiBhIHBhdHRlcm4gdGhhdCBzdGFydHMgd2l0aCAgImFiYy8iLAorICAgICAgIGNhdXNpbmcgIHBjcmUydGVzdCB0byByZWFkIHRoZSBuZXh0IGxpbmUgYXMgYSBjb250aW51YXRpb24gb2YgdGhlIHJlZ3UtCisgICAgICAgbGFyIGV4cHJlc3Npb24uCisKKyAgICAgICBBIHBhdHRlcm4gY2FuIGJlIGZvbGxvd2VkIGJ5IGEgbW9kaWZpZXIgbGlzdCAoZGV0YWlscyBiZWxvdykuCisKKworU1VCSkVDVCBMSU5FIFNZTlRBWAorCisgICAgICAgQmVmb3JlICAgZWFjaCAgIHN1YmplY3QgICBsaW5lICAgaXMgICBwYXNzZWQgICB0byAgIHBjcmUyX21hdGNoKCkgICAgb3IKKyAgICAgICBwY3JlMl9kZmFfbWF0Y2goKSwgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGUgc3BhY2UgaXMgcmVtb3ZlZCwgYW5kIHRoZQorICAgICAgIGxpbmUgaXMgc2Nhbm5lZCBmb3IgYmFja3NsYXNoIGVzY2FwZXMuIFRoZSBmb2xsb3dpbmcgcHJvdmlkZSBhIG1lYW5zIG9mCisgICAgICAgZW5jb2Rpbmcgbm9uLXByaW50aW5nIGNoYXJhY3RlcnMgaW4gYSB2aXNpYmxlIHdheToKKworICAgICAgICAgXGEgICAgICAgICBhbGFybSAoQkVMLCBceDA3KQorICAgICAgICAgXGIgICAgICAgICBiYWNrc3BhY2UgKFx4MDgpCisgICAgICAgICBcZSAgICAgICAgIGVzY2FwZSAoXHgyNykKKyAgICAgICAgIFxmICAgICAgICAgZm9ybSBmZWVkIChceDBjKQorICAgICAgICAgXG4gICAgICAgICBuZXdsaW5lIChceDBhKQorICAgICAgICAgXHIgICAgICAgICBjYXJyaWFnZSByZXR1cm4gKFx4MGQpCisgICAgICAgICBcdCAgICAgICAgIHRhYiAoXHgwOSkKKyAgICAgICAgIFx2ICAgICAgICAgdmVydGljYWwgdGFiIChceDBiKQorICAgICAgICAgXG5ubiAgICAgICBvY3RhbCBjaGFyYWN0ZXIgKHVwIHRvIDMgb2N0YWwgZGlnaXRzKTsgYWx3YXlzCisgICAgICAgICAgICAgICAgICAgICAgYSBieXRlIHVubGVzcyA+IDI1NSBpbiBVVEYtOCBvciAxNi1iaXQgb3IgMzItYml0IG1vZGUKKyAgICAgICAgIFxve2RkLi4ufSAgb2N0YWwgY2hhcmFjdGVyIChhbnkgbnVtYmVyIG9mIG9jdGFsIGRpZ2l0c30KKyAgICAgICAgIFx4aGggICAgICAgaGV4YWRlY2ltYWwgYnl0ZSAodXAgdG8gMiBoZXggZGlnaXRzKQorICAgICAgICAgXHh7aGguLi59ICBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIgKGFueSBudW1iZXIgb2YgaGV4IGRpZ2l0cykKKworICAgICAgIFRoZSB1c2Ugb2YgXHh7aGguLi59IGlzIG5vdCBkZXBlbmRlbnQgb24gdGhlIHVzZSBvZiB0aGUgdXRmIG1vZGlmaWVyIG9uCisgICAgICAgdGhlIHBhdHRlcm4uIEl0IGlzIHJlY29nbml6ZWQgYWx3YXlzLiBUaGVyZSBtYXkgYmUgYW55IG51bWJlciBvZiAgaGV4YS0KKyAgICAgICBkZWNpbWFsICBkaWdpdHMgIGluc2lkZSAgdGhlICBicmFjZXM7IGludmFsaWQgdmFsdWVzIHByb3Zva2UgZXJyb3IgbWVzLQorICAgICAgIHNhZ2VzLgorCisgICAgICAgTm90ZSB0aGF0IFx4aGggc3BlY2lmaWVzIG9uZSBieXRlIHJhdGhlciB0aGFuIG9uZSAgY2hhcmFjdGVyICBpbiAgVVRGLTgKKyAgICAgICBtb2RlOyAgdGhpcyAgbWFrZXMgaXQgcG9zc2libGUgdG8gY29uc3RydWN0IGludmFsaWQgVVRGLTggc2VxdWVuY2VzIGZvcgorICAgICAgIHRlc3RpbmcgcHVycG9zZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBceHtoaH0gaXMgaW50ZXJwcmV0ZWQgYXMgIGEgIFVURi04CisgICAgICAgY2hhcmFjdGVyICBpbiBVVEYtOCBtb2RlLCBnZW5lcmF0aW5nIG1vcmUgdGhhbiBvbmUgYnl0ZSBpZiB0aGUgdmFsdWUgaXMKKyAgICAgICBncmVhdGVyIHRoYW4gMTI3LiAgV2hlbiB0ZXN0aW5nIHRoZSA4LWJpdCBsaWJyYXJ5IG5vdCAgaW4gIFVURi04ICBtb2RlLAorICAgICAgIFx4e2hofSBnZW5lcmF0ZXMgb25lIGJ5dGUgZm9yIHZhbHVlcyBsZXNzIHRoYW4gMjU2LCBhbmQgY2F1c2VzIGFuIGVycm9yCisgICAgICAgZm9yIGdyZWF0ZXIgdmFsdWVzLgorCisgICAgICAgSW4gVVRGLTE2IG1vZGUsIGFsbCA0LWRpZ2l0IFx4e2hoaGh9IHZhbHVlcyBhcmUgYWNjZXB0ZWQuIFRoaXMgbWFrZXMgaXQKKyAgICAgICBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgaW52YWxpZCBVVEYtMTYgc2VxdWVuY2VzIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorCisgICAgICAgSW4gIFVURi0zMiAgbW9kZSwgIGFsbCAgNC0gdG8gOC1kaWdpdCBceHsuLi59IHZhbHVlcyBhcmUgYWNjZXB0ZWQuIFRoaXMKKyAgICAgICBtYWtlcyBpdCBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgaW52YWxpZCAgVVRGLTMyICBzZXF1ZW5jZXMgIGZvciAgdGVzdGluZworICAgICAgIHB1cnBvc2VzLgorCisgICAgICAgVGhlcmUgaXMgYSBzcGVjaWFsIGJhY2tzbGFzaCBzZXF1ZW5jZSB0aGF0IHNwZWNpZmllcyByZXBsaWNhdGlvbiBvZiBvbmUKKyAgICAgICBvciBtb3JlIGNoYXJhY3RlcnM6CisKKyAgICAgICAgIFxbPGNoYXJhY3RlcnM+XXs8Y291bnQ+fQorCisgICAgICAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byB0ZXN0IGxvbmcgc3RyaW5ncyB3aXRob3V0IGhhdmluZyAgdG8gIHByb3ZpZGUKKyAgICAgICB0aGVtIGFzIHBhcnQgb2YgdGhlIGZpbGUuIEZvciBleGFtcGxlOgorCisgICAgICAgICBcW2FiY117NH0KKworICAgICAgIGlzICBjb252ZXJ0ZWQgdG8gImFiY2FiY2FiY2FiYyIuIFRoaXMgZmVhdHVyZSBkb2VzIG5vdCBzdXBwb3J0IG5lc3RpbmcuCisgICAgICAgVG8gaW5jbHVkZSBhIGNsb3Npbmcgc3F1YXJlIGJyYWNrZXQgaW4gdGhlIGNoYXJhY3RlcnMsIGNvZGUgaXQgYXMgXHg1RC4KKworICAgICAgIEEgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGFuIGVxdWFscyBzaWduIG1hcmtzIHRoZSAgZW5kICBvZiAgdGhlICBzdWJqZWN0CisgICAgICAgc3RyaW5nIGFuZCB0aGUgc3RhcnQgb2YgYSBtb2RpZmllciBsaXN0LiBGb3IgZXhhbXBsZToKKworICAgICAgICAgYWJjXD1ub3Rib2wsbm90ZW1wdHkKKworICAgICAgIElmICB0aGUgIHN1YmplY3QgIHN0cmluZyBpcyBlbXB0eSBhbmQgXD0gaXMgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZSwgdGhlCisgICAgICAgbGluZSBpcyB0cmVhdGVkIGFzIGEgY29tbWVudCBsaW5lLCBhbmQgaXMgbm90IHVzZWQgIGZvciAgbWF0Y2hpbmcuICBGb3IKKyAgICAgICBleGFtcGxlOgorCisgICAgICAgICBcPSBUaGlzIGlzIGEgY29tbWVudC4KKyAgICAgICAgIGFiY1w9IFRoaXMgaXMgYW4gaW52YWxpZCBtb2RpZmllciBsaXN0LgorCisgICAgICAgQSAgYmFja3NsYXNoICBmb2xsb3dlZCAgYnkgIGFueSAgb3RoZXIgIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVyIGp1c3QKKyAgICAgICBlc2NhcGVzIHRoYXQgY2hhcmFjdGVyLiBBIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBhbnl0aGluZyBlbHNlIGNhdXNlcyBhbgorICAgICAgIGVycm9yLiAgSG93ZXZlciwgIGlmIHRoZSB2ZXJ5IGxhc3QgY2hhcmFjdGVyIGluIHRoZSBsaW5lIGlzIGEgYmFja3NsYXNoCisgICAgICAgKGFuZCB0aGVyZSBpcyBubyBtb2RpZmllciBsaXN0KSwgaXQgaXMgaWdub3JlZC4gVGhpcyAgZ2l2ZXMgIGEgIHdheSAgb2YKKyAgICAgICBwYXNzaW5nICBhbiAgZW1wdHkgbGluZSBhcyBkYXRhLCBzaW5jZSBhIHJlYWwgZW1wdHkgbGluZSB0ZXJtaW5hdGVzIHRoZQorICAgICAgIGRhdGEgaW5wdXQuCisKKworUEFUVEVSTiBNT0RJRklFUlMKKworICAgICAgIFRoZXJlIGFyZSBzZXZlcmFsIHR5cGVzIG9mIG1vZGlmaWVyIHRoYXQgY2FuIGFwcGVhciBpbiAgcGF0dGVybiAgbGluZXMuCisgICAgICAgRXhjZXB0IHdoZXJlIG5vdGVkIGJlbG93LCB0aGV5IG1heSBhbHNvIGJlIHVzZWQgaW4gI3BhdHRlcm4gY29tbWFuZHMuIEEKKyAgICAgICBwYXR0ZXJuJ3MgbW9kaWZpZXIgbGlzdCBjYW4gYWRkIHRvIG9yIG92ZXJyaWRlIGRlZmF1bHQgIG1vZGlmaWVycyAgdGhhdAorICAgICAgIHdlcmUgc2V0IGJ5IGEgcHJldmlvdXMgI3BhdHRlcm4gY29tbWFuZC4KKworICAgU2V0dGluZyBjb21waWxhdGlvbiBvcHRpb25zCisKKyAgICAgICBUaGUgIGZvbGxvd2luZyBtb2RpZmllcnMgc2V0IG9wdGlvbnMgZm9yIHBjcmUyX2NvbXBpbGUoKS4gVGhlIG1vc3QgY29tLQorICAgICAgIG1vbiBvbmVzIGhhdmUgc2luZ2xlLWxldHRlciBhYmJyZXZpYXRpb25zLiBTZWUgcGNyZTJhcGkgZm9yIGEgIGRlc2NyaXAtCisgICAgICAgdGlvbiBvZiB0aGVpciBlZmZlY3RzLgorCisgICAgICAgICAgICAgYWxsb3dfZW1wdHlfY2xhc3MgICAgICAgICBzZXQgUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1MKKyAgICAgICAgICAgICBhbHRfYnN1eCAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9BTFRfQlNVWAorICAgICAgICAgICAgIGFsdF9jaXJjdW1mbGV4ICAgICAgICAgICAgc2V0IFBDUkUyX0FMVF9DSVJDVU1GTEVYCisgICAgICAgICAgICAgYWx0X3ZlcmJuYW1lcyAgICAgICAgICAgICBzZXQgUENSRTJfQUxUX1ZFUkJOQU1FUworICAgICAgICAgICAgIGFuY2hvcmVkICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX0FOQ0hPUkVECisgICAgICAgICAgICAgYXV0b19jYWxsb3V0ICAgICAgICAgICAgICBzZXQgUENSRTJfQVVUT19DQUxMT1VUCisgICAgICAgICAvaSAgY2FzZWxlc3MgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfQ0FTRUxFU1MKKyAgICAgICAgICAgICBkb2xsYXJfZW5kb25seSAgICAgICAgICAgIHNldCBQQ1JFMl9ET0xMQVJfRU5ET05MWQorICAgICAgICAgL3MgIGRvdGFsbCAgICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX0RPVEFMTAorICAgICAgICAgICAgIGR1cG5hbWVzICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX0RVUE5BTUVTCisgICAgICAgICAveCAgZXh0ZW5kZWQgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfRVhURU5ERUQKKyAgICAgICAgICAgICBmaXJzdGxpbmUgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9GSVJTVExJTkUKKyAgICAgICAgICAgICBtYXRjaF91bnNldF9iYWNrcmVmICAgICAgIHNldCBQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGCisgICAgICAgICAvbSAgbXVsdGlsaW5lICAgICAgICAgICAgICAgICBzZXQgUENSRTJfTVVMVElMSU5FCisgICAgICAgICAgICAgbmV2ZXJfYmFja3NsYXNoX2MgICAgICAgICBzZXQgUENSRTJfTkVWRVJfQkFDS1NMQVNIX0MKKyAgICAgICAgICAgICBuZXZlcl91Y3AgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9ORVZFUl9VQ1AKKyAgICAgICAgICAgICBuZXZlcl91dGYgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9ORVZFUl9VVEYKKyAgICAgICAgICAgICBub19hdXRvX2NhcHR1cmUgICAgICAgICAgIHNldCBQQ1JFMl9OT19BVVRPX0NBUFRVUkUKKyAgICAgICAgICAgICBub19hdXRvX3Bvc3Nlc3MgICAgICAgICAgIHNldCBQQ1JFMl9OT19BVVRPX1BPU1NFU1MKKyAgICAgICAgICAgICBub19kb3RzdGFyX2FuY2hvciAgICAgICAgIHNldCBQQ1JFMl9OT19ET1RTVEFSX0FOQ0hPUgorICAgICAgICAgICAgIG5vX3N0YXJ0X29wdGltaXplICAgICAgICAgc2V0IFBDUkUyX05PX1NUQVJUX09QVElNSVpFCisgICAgICAgICAgICAgbm9fdXRmX2NoZWNrICAgICAgICAgICAgICBzZXQgUENSRTJfTk9fVVRGX0NIRUNLCisgICAgICAgICAgICAgdWNwICAgICAgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfVUNQCisgICAgICAgICAgICAgdW5ncmVlZHkgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfVU5HUkVFRFkKKyAgICAgICAgICAgICB1c2Vfb2Zmc2V0X2xpbWl0ICAgICAgICAgIHNldCBQQ1JFMl9VU0VfT0ZGU0VUX0xJTUlUCisgICAgICAgICAgICAgdXRmICAgICAgICAgICAgICAgICAgICAgICBzZXQgUENSRTJfVVRGCisKKyAgICAgICBBcyB3ZWxsIGFzIHR1cm5pbmcgb24gdGhlIFBDUkUyX1VURiBvcHRpb24sIHRoZSB1dGYgbW9kaWZpZXIgY2F1c2VzIGFsbAorICAgICAgIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzIGluIG91dHB1dCAgc3RyaW5ncyAgdG8gIGJlICBwcmludGVkICB1c2luZyAgdGhlCisgICAgICAgXHh7aGguLi59ICBub3RhdGlvbi4gT3RoZXJ3aXNlLCB0aG9zZSBsZXNzIHRoYW4gMHgxMDAgYXJlIG91dHB1dCBpbiBoZXgKKyAgICAgICB3aXRob3V0IHRoZSBjdXJseSBicmFja2V0cy4KKworICAgU2V0dGluZyBjb21waWxhdGlvbiBjb250cm9scworCisgICAgICAgVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgIGFmZmVjdCAgdGhlICBjb21waWxhdGlvbiAgcHJvY2VzcyAgb3IgIHJlcXVlc3QKKyAgICAgICBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGF0dGVybjoKKworICAgICAgICAgICAgIGJzcj1bYW55Y3JsZnx1bmljb2RlXSAgICAgc3BlY2lmeSBcUiBoYW5kbGluZworICAgICAgICAgL0IgIGJpbmNvZGUgICAgICAgICAgICAgICAgICAgc2hvdyBiaW5hcnkgY29kZSB3aXRob3V0IGxlbmd0aHMKKyAgICAgICAgICAgICBjYWxsb3V0X2luZm8gICAgICAgICAgICAgIHNob3cgY2FsbG91dCBpbmZvcm1hdGlvbgorICAgICAgICAgICAgIGRlYnVnICAgICAgICAgICAgICAgICAgICAgc2FtZSBhcyBpbmZvLGZ1bGxiaW5jb2RlCisgICAgICAgICAgICAgZnVsbGJpbmNvZGUgICAgICAgICAgICAgICBzaG93IGJpbmFyeSBjb2RlIHdpdGggbGVuZ3RocworICAgICAgICAgL0kgIGluZm8gICAgICAgICAgICAgICAgICAgICAgc2hvdyBpbmZvIGFib3V0IGNvbXBpbGVkIHBhdHRlcm4KKyAgICAgICAgICAgICBoZXggICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gaXMgY29kZWQgaW4gaGV4YWRlY2ltYWwKKyAgICAgICAgICAgICBqaXRbPTxudW1iZXI+XSAgICAgICAgICAgIHVzZSBKSVQKKyAgICAgICAgICAgICBqaXRmYXN0ICAgICAgICAgICAgICAgICAgIHVzZSBKSVQgZmFzdCBwYXRoCisgICAgICAgICAgICAgaml0dmVyaWZ5ICAgICAgICAgICAgICAgICB2ZXJpZnkgSklUIHVzZQorICAgICAgICAgICAgIGxvY2FsZT08bmFtZT4gICAgICAgICAgICAgdXNlIHRoaXMgbG9jYWxlCisgICAgICAgICAgICAgbWF4X3BhdHRlcm5fbGVuZ3RoPTxuPiAgICBzZXQgdGhlIG1heGltdW0gcGF0dGVybiBsZW5ndGgKKyAgICAgICAgICAgICBtZW1vcnkgICAgICAgICAgICAgICAgICAgIHNob3cgbWVtb3J5IHVzZWQKKyAgICAgICAgICAgICBuZXdsaW5lPTx0eXBlPiAgICAgICAgICAgIHNldCBuZXdsaW5lIHR5cGUKKyAgICAgICAgICAgICBudWxsX2NvbnRleHQgICAgICAgICAgICAgIGNvbXBpbGUgd2l0aCBhIE5VTEwgY29udGV4dAorICAgICAgICAgICAgIHBhcmVuc19uZXN0X2xpbWl0PTxuPiAgICAgc2V0IG1heGltdW0gcGFyZW50aGVzZXMgZGVwdGgKKyAgICAgICAgICAgICBwb3NpeCAgICAgICAgICAgICAgICAgICAgIHVzZSB0aGUgUE9TSVggQVBJCisgICAgICAgICAgICAgcHVzaCAgICAgICAgICAgICAgICAgICAgICBwdXNoIGNvbXBpbGVkIHBhdHRlcm4gb250byB0aGUgc3RhY2sKKyAgICAgICAgICAgICBzdGFja2d1YXJkPTxudW1iZXI+ICAgICAgIHRlc3QgdGhlIHN0YWNrZ3VhcmQgZmVhdHVyZQorICAgICAgICAgICAgIHRhYmxlcz1bMHwxfDJdICAgICAgICAgICAgc2VsZWN0IGludGVybmFsIHRhYmxlcworCisgICAgICAgVGhlIGVmZmVjdHMgb2YgdGhlc2UgbW9kaWZpZXJzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKworICAgTmV3bGluZSBhbmQgXFIgaGFuZGxpbmcKKworICAgICAgIFRoZSAgYnNyIG1vZGlmaWVyIHNwZWNpZmllcyB3aGF0IFxSIGluIGEgcGF0dGVybiBzaG91bGQgbWF0Y2guIElmIGl0IGlzCisgICAgICAgc2V0IHRvICJhbnljcmxmIiwgXFIgbWF0Y2hlcyBDUiwgTEYsIG9yIENSTEYgb25seS4gIElmICBpdCAgaXMgIHNldCAgdG8KKyAgICAgICAidW5pY29kZSIsICBcUiAgbWF0Y2hlcyAgYW55ICBVbmljb2RlICBuZXdsaW5lIHNlcXVlbmNlLiBUaGUgZGVmYXVsdCBpcworICAgICAgIHNwZWNpZmllZCB3aGVuIFBDUkUyIGlzIGJ1aWx0LCB3aXRoIHRoZSBkZWZhdWx0IGRlZmF1bHQgYmVpbmcgVW5pY29kZS4KKworICAgICAgIFRoZSBuZXdsaW5lIG1vZGlmaWVyIHNwZWNpZmllcyB3aGljaCBjaGFyYWN0ZXJzIGFyZSB0byAgYmUgIGludGVycHJldGVkCisgICAgICAgYXMgbmV3bGluZXMsIGJvdGggaW4gdGhlIHBhdHRlcm4gYW5kIGluIHN1YmplY3QgbGluZXMuIFRoZSB0eXBlIG11c3QgYmUKKyAgICAgICBvbmUgb2YgQ1IsIExGLCBDUkxGLCBBTllDUkxGLCBvciBBTlkgKGluIHVwcGVyIG9yIGxvd2VyIGNhc2UpLgorCisgICBJbmZvcm1hdGlvbiBhYm91dCBhIHBhdHRlcm4KKworICAgICAgIFRoZSBkZWJ1ZyBtb2RpZmllciBpcyBhIHNob3J0aGFuZCBmb3IgaW5mbyxmdWxsYmluY29kZSwgcmVxdWVzdGluZyAgYWxsCisgICAgICAgYXZhaWxhYmxlIGluZm9ybWF0aW9uLgorCisgICAgICAgVGhlIGJpbmNvZGUgbW9kaWZpZXIgY2F1c2VzIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBpbGVkIGNvZGUgdG8gYmUKKyAgICAgICBvdXRwdXQgYWZ0ZXIgY29tcGlsYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gZG9lcyBub3QgY29udGFpbiBsZW5ndGggIGFuZAorICAgICAgIG9mZnNldCB2YWx1ZXMsIHdoaWNoIGVuc3VyZXMgdGhhdCB0aGUgc2FtZSBvdXRwdXQgaXMgZ2VuZXJhdGVkIGZvciBkaWYtCisgICAgICAgZmVyZW50IGludGVybmFsIGxpbmsgc2l6ZXMgYW5kIGRpZmZlcmVudCBjb2RlICB1bml0ICB3aWR0aHMuICBCeSAgdXNpbmcKKyAgICAgICBiaW5jb2RlLCAgdGhlICBzYW1lICByZWdyZXNzaW9uIHRlc3RzIGNhbiBiZSB1c2VkIGluIGRpZmZlcmVudCBlbnZpcm9uLQorICAgICAgIG1lbnRzLgorCisgICAgICAgVGhlIGZ1bGxiaW5jb2RlIG1vZGlmaWVyLCBieSBjb250cmFzdCwgZG9lcyBpbmNsdWRlIGxlbmd0aCAgYW5kICBvZmZzZXQKKyAgICAgICB2YWx1ZXMuICBUaGlzIGlzIHVzZWQgaW4gYSBmZXcgc3BlY2lhbCB0ZXN0cyB0aGF0IHJ1biBvbmx5IGZvciBzcGVjaWZpYworICAgICAgIGNvZGUgdW5pdCB3aWR0aHMgYW5kIGxpbmsgc2l6ZXMsIGFuZCBpcyBhbHNvIHVzZWZ1bCBmb3Igb25lLW9mZiB0ZXN0cy4KKworICAgICAgIFRoZSBpbmZvIG1vZGlmaWVyICByZXF1ZXN0cyAgaW5mb3JtYXRpb24gIGFib3V0ICB0aGUgIGNvbXBpbGVkICBwYXR0ZXJuCisgICAgICAgKHdoZXRoZXIgIGl0ICBpcyBhbmNob3JlZCwgaGFzIGEgZml4ZWQgZmlyc3QgY2hhcmFjdGVyLCBhbmQgc28gb24pLiBUaGUKKyAgICAgICBpbmZvcm1hdGlvbiBpcyBvYnRhaW5lZCBmcm9tIHRoZSAgcGNyZTJfcGF0dGVybl9pbmZvKCkgIGZ1bmN0aW9uLiAgSGVyZQorICAgICAgIGFyZSBzb21lIHR5cGljYWwgZXhhbXBsZXM6CisKKyAgICAgICAgICAgcmU+IC8oP2kpKF5hfF5iKS9tLGluZm8KKyAgICAgICAgIENhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorICAgICAgICAgQ29tcGlsZSBvcHRpb25zOiBtdWx0aWxpbmUKKyAgICAgICAgIE92ZXJhbGwgb3B0aW9uczogY2FzZWxlc3MgbXVsdGlsaW5lCisgICAgICAgICBGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCisgICAgICAgICBTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworICAgICAgICAgICByZT4gLyg/aSlhYmMvaW5mbworICAgICAgICAgQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCisgICAgICAgICBDb21waWxlIG9wdGlvbnM6IDxub25lPgorICAgICAgICAgT3ZlcmFsbCBvcHRpb25zOiBjYXNlbGVzcworICAgICAgICAgRmlyc3QgY29kZSB1bml0ID0gJ2EnIChjYXNlbGVzcykKKyAgICAgICAgIExhc3QgY29kZSB1bml0ID0gJ2MnIChjYXNlbGVzcykKKyAgICAgICAgIFN1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisgICAgICAgIkNvbXBpbGUgIG9wdGlvbnMiICBhcmUgdGhvc2Ugc3BlY2lmaWVkIGJ5IG1vZGlmaWVyczsgIm92ZXJhbGwgb3B0aW9ucyIKKyAgICAgICBoYXZlIGFkZGVkIG9wdGlvbnMgdGhhdCBhcmUgdGFrZW4gb3IgZGVkdWNlZCBmcm9tIHRoZSBwYXR0ZXJuLiBJZiAgYm90aAorICAgICAgIHNldHMgIG9mICBvcHRpb25zIGFyZSB0aGUgc2FtZSwganVzdCBhIHNpbmdsZSAib3B0aW9ucyIgbGluZSBpcyBvdXRwdXQ7CisgICAgICAgaWYgdGhlcmUgYXJlIG5vIG9wdGlvbnMsIHRoZSBsaW5lIGlzICBvbWl0dGVkLiAgIkZpcnN0ICBjb2RlICB1bml0IiAgaXMKKyAgICAgICB3aGVyZSAgYW55ICBtYXRjaCBtdXN0IHN0YXJ0OyBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHRoZXkgYXJlIGxpc3RlZAorICAgICAgIGFzICJzdGFydGluZyBjb2RlIHVuaXRzIi4gIkxhc3QgY29kZSB1bml0IiBpcyAgdGhlICBsYXN0ICBsaXRlcmFsICBjb2RlCisgICAgICAgdW5pdCAgdGhhdCAgbXVzdCAgYmUgIHByZXNlbnQgaW4gYW55IG1hdGNoLiBUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUKKyAgICAgICBsYXN0IGNoYXJhY3Rlci4gVGhlc2UgbGluZXMgYXJlIG9taXR0ZWQgaWYgbm8gc3RhcnRpbmcgb3IgIGVuZGluZyAgY29kZQorICAgICAgIHVuaXRzIGFyZSByZWNvcmRlZC4KKworICAgICAgIFRoZSAgY2FsbG91dF9pbmZvICBtb2RpZmllciByZXF1ZXN0cyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgdGhlIGNhbGxvdXRzCisgICAgICAgaW4gdGhlIHBhdHRlcm4uIEEgbGlzdCBvZiB0aGVtIGlzIG91dHB1dCBhdCB0aGUgZW5kIG9mIGFueSBvdGhlciBpbmZvci0KKyAgICAgICBtYXRpb24gdGhhdCBpcyByZXF1ZXN0ZWQuIEZvciBlYWNoIGNhbGxvdXQsIGVpdGhlciBpdHMgbnVtYmVyIG9yIHN0cmluZworICAgICAgIGlzIGdpdmVuLCBmb2xsb3dlZCBieSB0aGUgaXRlbSB0aGF0IGZvbGxvd3MgaXQgaW4gdGhlIHBhdHRlcm4uCisKKyAgIFBhc3NpbmcgYSBOVUxMIGNvbnRleHQKKworICAgICAgIE5vcm1hbGx5LCBwY3JlMnRlc3QgcGFzc2VzIGEgY29udGV4dCBibG9jayB0byBwY3JlMl9jb21waWxlKCkuICBJZiAgdGhlCisgICAgICAgbnVsbF9jb250ZXh0ICBtb2RpZmllciAgaXMgIHNldCwgIGhvd2V2ZXIsICBOVUxMIGlzIHBhc3NlZC4gVGhpcyBpcyBmb3IKKyAgICAgICB0ZXN0aW5nIHRoYXQgcGNyZTJfY29tcGlsZSgpIGJlaGF2ZXMgY29ycmVjdGx5IGluIHRoaXMgIGNhc2UgIChpdCAgdXNlcworICAgICAgIGRlZmF1bHQgdmFsdWVzKS4KKworICAgU3BlY2lmeWluZyBhIHBhdHRlcm4gaW4gaGV4CisKKyAgICAgICBUaGUgaGV4IG1vZGlmaWVyIHNwZWNpZmllcyB0aGF0IHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBwYXR0ZXJuIGFyZSB0byBiZQorICAgICAgIGludGVycHJldGVkIGFzIHBhaXJzIG9mIGhleGFkZWNpbWFsIGRpZ2l0cy4gV2hpdGUgIHNwYWNlICBpcyAgcGVybWl0dGVkCisgICAgICAgYmV0d2VlbiBwYWlycy4gRm9yIGV4YW1wbGU6CisKKyAgICAgICAgIC9hYiAzMiA1OS9oZXgKKworICAgICAgIFRoaXMgIGZlYXR1cmUgIGlzICBwcm92aWRlZCAgYXMgYSB3YXkgb2YgY3JlYXRpbmcgcGF0dGVybnMgdGhhdCBjb250YWluCisgICAgICAgYmluYXJ5IHplcm8gYW5kIG90aGVyIG5vbi1wcmludGluZyBjaGFyYWN0ZXJzLiAgQnkgIGRlZmF1bHQsICBwY3JlMnRlc3QKKyAgICAgICBwYXNzZXMgIHBhdHRlcm5zICBhcyB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5ncyB0byBwY3JlMl9jb21waWxlKCksIGdpdmluZworICAgICAgIHRoZSBsZW5ndGggYXMgUENSRTJfWkVST19URVJNSU5BVEVELiBIb3dldmVyLCBmb3IgcGF0dGVybnMgc3BlY2lmaWVkIGluCisgICAgICAgaGV4YWRlY2ltYWwsIHRoZSBhY3R1YWwgbGVuZ3RoIG9mIHRoZSBwYXR0ZXJuIGlzIHBhc3NlZC4KKworICAgR2VuZXJhdGluZyBsb25nIHJlcGV0aXRpdmUgcGF0dGVybnMKKworICAgICAgIFNvbWUgIHRlc3RzIHVzZSBsb25nIHBhdHRlcm5zIHRoYXQgYXJlIHZlcnkgcmVwZXRpdGl2ZS4gSW5zdGVhZCBvZiBjcmUtCisgICAgICAgYXRpbmcgYSB2ZXJ5IGxvbmcgaW5wdXQgbGluZSBmb3Igc3VjaCBhIHBhdHRlcm4sIHlvdSBjYW4gdXNlIGEgIHNwZWNpYWwKKyAgICAgICByZXBldGl0aW9uICBmZWF0dXJlLCAgc2ltaWxhciAgdG8gIHRoZSAgb25lIGRlc2NyaWJlZCBmb3Igc3ViamVjdCBsaW5lcworICAgICAgIGFib3ZlLiBJZiB0aGUgZXhwYW5kIG1vZGlmaWVyIGlzIHByZXNlbnQgb24gYSAgcGF0dGVybiwgIHBhcnRzICBvZiAgdGhlCisgICAgICAgcGF0dGVybiB0aGF0IGhhdmUgdGhlIGZvcm0KKworICAgICAgICAgXFs8Y2hhcmFjdGVycz5dezxjb3VudD59CisKKyAgICAgICBhcmUgZXhwYW5kZWQgYmVmb3JlIHRoZSBwYXR0ZXJuIGlzIHBhc3NlZCB0byBwY3JlMl9jb21waWxlKCkuIEZvciBleGFtLQorICAgICAgIHBsZSwgXFtBQl17NjAwMH0gaXMgZXhwYW5kZWQgdG8gIkFCQUIuLi4iIDYwMDAgdGltZXMuIFRoaXMgY29uc3RydWN0aW9uCisgICAgICAgY2Fubm90ICBiZSAgbmVzdGVkLiBBbiBpbml0aWFsICJcWyIgc2VxdWVuY2UgaXMgcmVjb2duaXplZCBvbmx5IGlmICJdeyIKKyAgICAgICBmb2xsb3dlZCBieSBkZWNpbWFsIGRpZ2l0cyBhbmQgIn0iIGlzIGZvdW5kIGxhdGVyIGluICB0aGUgIHBhdHRlcm4uICBJZgorICAgICAgIG5vdCwgdGhlIGNoYXJhY3RlcnMgcmVtYWluIGluIHRoZSBwYXR0ZXJuIHVuYWx0ZXJlZC4KKworICAgICAgIElmICBwYXJ0ICBvZiBhbiBleHBhbmRlZCBwYXR0ZXJuIGxvb2tzIGxpa2UgYW4gZXhwYW5zaW9uLCBidXQgaXMgcmVhbGx5CisgICAgICAgcGFydCBvZiB0aGUgYWN0dWFsIHBhdHRlcm4sIHVud2FudGVkIGV4cGFuc2lvbiBjYW4gYmUgYXZvaWRlZCBieSBnaXZpbmcKKyAgICAgICB0d28gdmFsdWVzIGluIHRoZSBxdWFudGlmaWVyLiBGb3IgZXhhbXBsZSwgXFtBQl17NjAwMCw2MDAwfSBpcyBub3QgcmVjLQorICAgICAgIG9nbml6ZWQgYXMgYW4gZXhwYW5zaW9uIGl0ZW0uCisKKyAgICAgICBJZiB0aGUgaW5mbyBtb2RpZmllciBpcyBzZXQgb24gYW4gZXhwYW5kZWQgcGF0dGVybiwgdGhlIHJlc3VsdCAgb2YgIHRoZQorICAgICAgIGV4cGFuc2lvbiBpcyBpbmNsdWRlZCBpbiB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyBvdXRwdXQuCisKKyAgIEpJVCBjb21waWxhdGlvbgorCisgICAgICAgSnVzdC1pbi10aW1lICAoSklUKSAgY29tcGlsaW5nICBpcyAgYSBoZWF2eXdlaWdodCBvcHRpbWl6YXRpb24gdGhhdCBjYW4KKyAgICAgICBncmVhdGx5IHNwZWVkIHVwIHBhdHRlcm4gbWF0Y2hpbmcuIFNlZSB0aGUgcGNyZTJqaXQgIGRvY3VtZW50YXRpb24gIGZvcgorICAgICAgIGRldGFpbHMuICBKSVQgIGNvbXBpbGluZyAgaGFwcGVucywgb3B0aW9uYWxseSwgYWZ0ZXIgYSBwYXR0ZXJuIGhhcyBiZWVuCisgICAgICAgc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkIGludG8gYW4gaW50ZXJuYWwgZm9ybS4gVGhlIEpJVCBjb21waWxlciAgY29udmVydHMKKyAgICAgICB0aGlzIHRvIG9wdGltaXplZCBtYWNoaW5lIGNvZGUuIEl0IG5lZWRzIHRvIGtub3cgd2hldGhlciB0aGUgbWF0Y2gtdGltZQorICAgICAgIG9wdGlvbnMgUENSRTJfUEFSVElBTF9IQVJEIGFuZCBQQ1JFMl9QQVJUSUFMX1NPRlQgYXJlIGdvaW5nIHRvIGJlIHVzZWQsCisgICAgICAgYmVjYXVzZSAgZGlmZmVyZW50ICBjb2RlICBpcyBnZW5lcmF0ZWQgZm9yIHRoZSBkaWZmZXJlbnQgY2FzZXMuIFNlZSB0aGUKKyAgICAgICBwYXJ0aWFsIG1vZGlmaWVyIGluICJTdWJqZWN0IE1vZGlmaWVycyIgYmVsb3cgZm9yIGRldGFpbHMgb2YgaG93ICB0aGVzZQorICAgICAgIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBmb3IgZWFjaCBtYXRjaCBhdHRlbXB0LgorCisgICAgICAgSklUICBjb21waWxhdGlvbiAgaXMgIHJlcXVlc3RlZCBieSB0aGUgL2ppdCBwYXR0ZXJuIG1vZGlmaWVyLCB3aGljaCBtYXkKKyAgICAgICBvcHRpb25hbGx5IGJlIGZvbGxvd2VkIGJ5IGFuIGVxdWFscyBzaWduIGFuZCBhIG51bWJlciBpbiB0aGUgcmFuZ2UgMCB0bworICAgICAgIDcuICAgVGhlICB0aHJlZSBiaXRzIHRoYXQgbWFrZSB1cCB0aGUgbnVtYmVyIHNwZWNpZnkgd2hpY2ggb2YgdGhlIHRocmVlCisgICAgICAgSklUIG9wZXJhdGluZyBtb2RlcyBhcmUgdG8gYmUgY29tcGlsZWQ6CisKKyAgICAgICAgIDEgIGNvbXBpbGUgSklUIGNvZGUgZm9yIG5vbi1wYXJ0aWFsIG1hdGNoaW5nCisgICAgICAgICAyICBjb21waWxlIEpJVCBjb2RlIGZvciBzb2Z0IHBhcnRpYWwgbWF0Y2hpbmcKKyAgICAgICAgIDQgIGNvbXBpbGUgSklUIGNvZGUgZm9yIGhhcmQgcGFydGlhbCBtYXRjaGluZworCisgICAgICAgVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIC9qaXQgbW9kaWZpZXIgYXJlIHRoZXJlZm9yZToKKworICAgICAgICAgMCAgZGlzYWJsZSBKSVQKKyAgICAgICAgIDEgIG5vcm1hbCBtYXRjaGluZyBvbmx5CisgICAgICAgICAyICBzb2Z0IHBhcnRpYWwgbWF0Y2hpbmcgb25seQorICAgICAgICAgMyAgbm9ybWFsIGFuZCBzb2Z0IHBhcnRpYWwgbWF0Y2hpbmcKKyAgICAgICAgIDQgIGhhcmQgcGFydGlhbCBtYXRjaGluZyBvbmx5CisgICAgICAgICA2ICBzb2Z0IGFuZCBoYXJkIHBhcnRpYWwgbWF0Y2hpbmcgb25seQorICAgICAgICAgNyAgYWxsIHRocmVlIG1vZGVzCisKKyAgICAgICBJZiBubyBudW1iZXIgaXMgZ2l2ZW4sIDcgaXMgIGFzc3VtZWQuICBUaGUgIHBocmFzZSAgInBhcnRpYWwgIG1hdGNoaW5nIgorICAgICAgIG1lYW5zIGEgY2FsbCB0byBwY3JlMl9tYXRjaCgpIHdpdGggZWl0aGVyIHRoZSBQQ1JFMl9QQVJUSUFMX1NPRlQgb3IgdGhlCisgICAgICAgUENSRTJfUEFSVElBTF9IQVJEIG9wdGlvbiBzZXQuIE5vdGUgdGhhdCBzdWNoIGEgY2FsbCBtYXkgcmV0dXJuIGEgIGNvbS0KKyAgICAgICBwbGV0ZSBtYXRjaDsgdGhlIG9wdGlvbnMgZW5hYmxlIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHBhcnRpYWwgbWF0Y2gsIGJ1dAorICAgICAgIGRvIG5vdCByZXF1aXJlIGl0LiBOb3RlIGFsc28gdGhhdCBpZiB5b3UgcmVxdWVzdCBKSVQgIGNvbXBpbGF0aW9uICBvbmx5CisgICAgICAgZm9yICBwYXJ0aWFsICBtYXRjaGluZyAoZm9yIGV4YW1wbGUsIC9qaXQ9MikgYnV0IGRvIG5vdCBzZXQgdGhlIHBhcnRpYWwKKyAgICAgICBtb2RpZmllciBvbiBhIHN1YmplY3QgbGluZSwgdGhhdCBtYXRjaCB3aWxsIG5vdCB1c2UgIEpJVCAgY29kZSAgYmVjYXVzZQorICAgICAgIG5vbmUgd2FzIGNvbXBpbGVkIGZvciBub24tcGFydGlhbCBtYXRjaGluZy4KKworICAgICAgIElmICBKSVQgY29tcGlsYXRpb24gaXMgc3VjY2Vzc2Z1bCwgdGhlIGNvbXBpbGVkIEpJVCBjb2RlIHdpbGwgYXV0b21hdGktCisgICAgICAgY2FsbHkgYmUgdXNlZCB3aGVuIGFuIGFwcHJvcHJpYXRlIHR5cGUgb2YgbWF0Y2ggIGlzICBydW4sICBleGNlcHQgIHdoZW4KKyAgICAgICBpbmNvbXBhdGlibGUgIHJ1bi10aW1lIG9wdGlvbnMgYXJlIHNwZWNpZmllZC4gRm9yIG1vcmUgZGV0YWlscywgc2VlIHRoZQorICAgICAgIHBjcmUyaml0IGRvY3VtZW50YXRpb24uIFNlZSBhbHNvIHRoZSBqaXRzdGFjayBtb2RpZmllciBiZWxvdyBmb3IgYSAgd2F5CisgICAgICAgb2Ygc2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgSklUIHN0YWNrLgorCisgICAgICAgSWYgIHRoZSAgaml0ZmFzdCAgbW9kaWZpZXIgaXMgc3BlY2lmaWVkLCBtYXRjaGluZyBpcyBkb25lIHVzaW5nIHRoZSBKSVQKKyAgICAgICAiZmFzdCBwYXRoIiBpbnRlcmZhY2UsIHBjcmUyX2ppdF9tYXRjaCgpLCB3aGljaCBza2lwcyBzb21lIG9mIHRoZSAgc2FuLQorICAgICAgIGl0eSAgY2hlY2tzIHRoYXQgYXJlIGRvbmUgYnkgcGNyZTJfbWF0Y2goKSwgYW5kIG9mIGNvdXJzZSBkb2VzIG5vdCB3b3JrCisgICAgICAgd2hlbiBKSVQgaXMgbm90IHN1cHBvcnRlZC4gSWYgaml0ZmFzdCBpcyBzcGVjaWZpZWQgd2l0aG91dCAgaml0LCAgaml0PTcKKyAgICAgICBpcyBhc3N1bWVkLgorCisgICAgICAgSWYgIHRoZSBqaXR2ZXJpZnkgbW9kaWZpZXIgaXMgc3BlY2lmaWVkLCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZWQKKyAgICAgICBwYXR0ZXJuIHNob3dzIHdoZXRoZXIgSklUIGNvbXBpbGF0aW9uIHdhcyBvciAgd2FzICBub3QgIHN1Y2Nlc3NmdWwuICBJZgorICAgICAgIGppdHZlcmlmeSAgaXMgIHNwZWNpZmllZCB3aXRob3V0IGppdCwgaml0PTcgaXMgYXNzdW1lZC4gSWYgSklUIGNvbXBpbGEtCisgICAgICAgdGlvbiBpcyBzdWNjZXNzZnVsIHdoZW4gaml0dmVyaWZ5IGlzIHNldCwgdGhlIHRleHQgIihKSVQpIiBpcyBhZGRlZCAgdG8KKyAgICAgICB0aGUgZmlyc3Qgb3V0cHV0IGxpbmUgYWZ0ZXIgYSBtYXRjaCBvciBub24gbWF0Y2ggd2hlbiBKSVQtY29tcGlsZWQgY29kZQorICAgICAgIHdhcyBhY3R1YWxseSB1c2VkIGluIHRoZSBtYXRjaC4KKworICAgU2V0dGluZyBhIGxvY2FsZQorCisgICAgICAgVGhlIC9sb2NhbGUgbW9kaWZpZXIgbXVzdCBzcGVjaWZ5IHRoZSBuYW1lIG9mIGEgbG9jYWxlLCBmb3IgZXhhbXBsZToKKworICAgICAgICAgL3BhdHRlcm4vbG9jYWxlPWZyX0ZSCisKKyAgICAgICBUaGUgZ2l2ZW4gbG9jYWxlIGlzIHNldCwgcGNyZTJfbWFrZXRhYmxlcygpIGlzIGNhbGxlZCB0byBidWlsZCBhIHNldCBvZgorICAgICAgIGNoYXJhY3RlciAgdGFibGVzIGZvciB0aGUgbG9jYWxlLCBhbmQgdGhpcyBpcyB0aGVuIHBhc3NlZCB0byBwY3JlMl9jb20tCisgICAgICAgcGlsZSgpIHdoZW4gY29tcGlsaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb24uIFRoZSBzYW1lIHRhYmxlcyBhcmUgIHVzZWQKKyAgICAgICB3aGVuIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgc3ViamVjdCBsaW5lcy4gVGhlIC9sb2NhbGUgbW9kaWZpZXIgYXBwbGllcworICAgICAgIG9ubHkgdG8gdGhlIHBhdHRlcm4gb24gd2hpY2ggaXQgYXBwZWFycywgYnV0IGNhbiBiZSBnaXZlbiBpbiBhICNwYXR0ZXJuCisgICAgICAgY29tbWFuZCAgaWYgYSBkZWZhdWx0IGlzIG5lZWRlZC4gU2V0dGluZyBhIGxvY2FsZSBhbmQgYWx0ZXJuYXRlIGNoYXJhYy0KKyAgICAgICB0ZXIgdGFibGVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisKKyAgIFNob3dpbmcgcGF0dGVybiBtZW1vcnkKKworICAgICAgIFRoZSAvbWVtb3J5IG1vZGlmaWVyIGNhdXNlcyB0aGUgc2l6ZSBpbiBieXRlcyBvZiAgdGhlICBtZW1vcnkgIHVzZWQgIHRvCisgICAgICAgaG9sZCAgdGhlIGNvbXBpbGVkIHBhdHRlcm4gdG8gYmUgb3V0cHV0LiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIHNpemUKKyAgICAgICBvZiB0aGUgcGNyZTJfY29kZSBibG9jazsgaXQgaXMganVzdCB0aGUgYWN0dWFsIGNvbXBpbGVkICBkYXRhLiAgSWYgIHRoZQorICAgICAgIHBhdHRlcm4gaXMgc3Vic2VxdWVudGx5IHBhc3NlZCB0byB0aGUgSklUIGNvbXBpbGVyLCB0aGUgc2l6ZSBvZiB0aGUgSklUCisgICAgICAgY29tcGlsZWQgY29kZSBpcyBhbHNvIG91dHB1dC4gSGVyZSBpcyBhbiBleGFtcGxlOgorCisgICAgICAgICAgIHJlPiAvYShiKWMvaml0LG1lbW9yeQorICAgICAgICAgTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMQorICAgICAgICAgTWVtb3J5IGFsbG9jYXRpb24gKEpJVCBjb2RlKTogMTkxMAorCisKKyAgIExpbWl0aW5nIG5lc3RlZCBwYXJlbnRoZXNlcworCisgICAgICAgVGhlIHBhcmVuc19uZXN0X2xpbWl0IG1vZGlmaWVyIHNldHMgYSBsaW1pdCAgb24gIHRoZSAgZGVwdGggIG9mICBuZXN0ZWQKKyAgICAgICBwYXJlbnRoZXNlcyAgaW4gIGEgIHBhdHRlcm4uICBCcmVhY2hpbmcgIHRoZSBsaW1pdCBjYXVzZXMgYSBjb21waWxhdGlvbgorICAgICAgIGVycm9yLiAgVGhlIGRlZmF1bHQgZm9yIHRoZSBsaWJyYXJ5IGlzIHNldCB3aGVuICBQQ1JFMiAgaXMgIGJ1aWx0LCAgYnV0CisgICAgICAgcGNyZTJ0ZXN0ICBzZXRzICBpdHMgIG93biBkZWZhdWx0IG9mIDIyMCwgd2hpY2ggaXMgcmVxdWlyZWQgZm9yIHJ1bm5pbmcKKyAgICAgICB0aGUgc3RhbmRhcmQgdGVzdCBzdWl0ZS4KKworICAgTGltaXRpbmcgdGhlIHBhdHRlcm4gbGVuZ3RoCisKKyAgICAgICBUaGUgbWF4X3BhdHRlcm5fbGVuZ3RoIG1vZGlmaWVyIHNldHMgYSBsaW1pdCwgaW4gIGNvZGUgIHVuaXRzLCAgdG8gIHRoZQorICAgICAgIGxlbmd0aCBvZiBwYXR0ZXJuIHRoYXQgcGNyZTJfY29tcGlsZSgpIHdpbGwgYWNjZXB0LiBCcmVhY2hpbmcgdGhlIGxpbWl0CisgICAgICAgY2F1c2VzIGEgY29tcGlsYXRpb24gIGVycm9yLiAgVGhlICBkZWZhdWx0ICBpcyAgdGhlICBsYXJnZXN0ICBudW1iZXIgIGEKKyAgICAgICBQQ1JFMl9TSVpFIHZhcmlhYmxlIGNhbiBob2xkIChlc3NlbnRpYWxseSB1bmxpbWl0ZWQpLgorCisgICBVc2luZyB0aGUgUE9TSVggd3JhcHBlciBBUEkKKworICAgICAgIFRoZSAgL3Bvc2l4IG1vZGlmaWVyIGNhdXNlcyBwY3JlMnRlc3QgdG8gY2FsbCBQQ1JFMiB2aWEgdGhlIFBPU0lYIHdyYXAtCisgICAgICAgcGVyIEFQSSByYXRoZXIgdGhhbiBpdHMgIG5hdGl2ZSAgQVBJLiAgVGhpcyAgc3VwcG9ydHMgIG9ubHkgIHRoZSAgOC1iaXQKKyAgICAgICBsaWJyYXJ5LiAgIE5vdGUgIHRoYXQgIGl0ICBkb2VzIG5vdCBpbXBseSBQT1NJWCBtYXRjaGluZyBzZW1hbnRpY3M7IGZvcgorICAgICAgIG1vcmUgZGV0YWlsIHNlZSB0aGUgcGNyZTJwb3NpeCBkb2N1bWVudGF0aW9uLiBXaGVuICB0aGUgIFBPU0lYICBBUEkgIGlzCisgICAgICAgYmVpbmcgIHVzZWQsICB0aGUgIGZvbGxvd2luZyBwYXR0ZXJuIG1vZGlmaWVycyBzZXQgb3B0aW9ucyBmb3IgdGhlIHJlZy0KKyAgICAgICBjb21wKCkgZnVuY3Rpb246CisKKyAgICAgICAgIGNhc2VsZXNzICAgICAgICAgICBSRUdfSUNBU0UKKyAgICAgICAgIG11bHRpbGluZSAgICAgICAgICBSRUdfTkVXTElORQorICAgICAgICAgbm9fYXV0b19jYXB0dXJlICAgIFJFR19OT1NVQgorICAgICAgICAgZG90YWxsICAgICAgICAgICAgIFJFR19ET1RBTEwgICAgICkKKyAgICAgICAgIHVuZ3JlZWR5ICAgICAgICAgICBSRUdfVU5HUkVFRFkgICApIFRoZXNlIG9wdGlvbnMgYXJlIG5vdCBwYXJ0IG9mCisgICAgICAgICB1Y3AgICAgICAgICAgICAgICAgUkVHX1VDUCAgICAgICAgKSAgIHRoZSBQT1NJWCBzdGFuZGFyZAorICAgICAgICAgdXRmICAgICAgICAgICAgICAgIFJFR19VVEY4ICAgICAgICkKKworICAgICAgIFRoZSByZWdlcnJvcl9idWZmc2l6ZSBtb2RpZmllciBzcGVjaWZpZXMgYSBzaXplIGZvciAgdGhlICBlcnJvciAgYnVmZmVyCisgICAgICAgdGhhdCAgaXMgIHBhc3NlZCB0byByZWdlcnJvcigpIGluIHRoZSBldmVudCBvZiBhIGNvbXBpbGF0aW9uIGVycm9yLiBGb3IKKyAgICAgICBleGFtcGxlOgorCisgICAgICAgICAvYWJjL3Bvc2l4LHJlZ2Vycm9yX2J1ZmZzaXplPTIwCisKKyAgICAgICBUaGlzIHByb3ZpZGVzIGEgbWVhbnMgb2YgdGVzdGluZyB0aGUgYmVoYXZpb3VyIG9mIHJlZ2Vycm9yKCkgIHdoZW4gIHRoZQorICAgICAgIGJ1ZmZlciAgaXMgIHRvbyAgc21hbGwgIGZvciB0aGUgZXJyb3IgbWVzc2FnZS4gSWYgdGhpcyBtb2RpZmllciBoYXMgbm90CisgICAgICAgYmVlbiBzZXQsIGEgbGFyZ2UgYnVmZmVyIGlzIHVzZWQuCisKKyAgICAgICBUaGUgYWZ0ZXJ0ZXh0IGFuZCBhbGxhZnRlcnRleHQgIHN1YmplY3QgIG1vZGlmaWVycyAgd29yayAgYXMgIGRlc2NyaWJlZAorICAgICAgIGJlbG93LiBBbGwgb3RoZXIgbW9kaWZpZXJzIGNhdXNlIGFuIGVycm9yLgorCisgICBUZXN0aW5nIHRoZSBzdGFjayBndWFyZCBmZWF0dXJlCisKKyAgICAgICBUaGUgIC9zdGFja2d1YXJkICBtb2RpZmllciAgaXMgIHVzZWQgIHRvIHRlc3QgdGhlIHVzZSBvZiBwY3JlMl9zZXRfY29tLQorICAgICAgIHBpbGVfcmVjdXJzaW9uX2d1YXJkKCksIGEgZnVuY3Rpb24gdGhhdCBpcyAgcHJvdmlkZWQgIHRvICBlbmFibGUgIHN0YWNrCisgICAgICAgYXZhaWxhYmlsaXR5ICB0byAgYmUgY2hlY2tlZCBkdXJpbmcgY29tcGlsYXRpb24gKHNlZSB0aGUgcGNyZTJhcGkgZG9jdS0KKyAgICAgICBtZW50YXRpb24gZm9yIGRldGFpbHMpLiBJZiB0aGUgbnVtYmVyICBzcGVjaWZpZWQgIGJ5ICB0aGUgIG1vZGlmaWVyICBpcworICAgICAgIGdyZWF0ZXIgdGhhbiB6ZXJvLCBwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQoKSBpcyBjYWxsZWQgdG8gc2V0CisgICAgICAgdXAgY2FsbGJhY2sgZnJvbSBwY3JlMl9jb21waWxlKCkgdG8gYSBsb2NhbCBmdW5jdGlvbi4gVGhlICBhcmd1bWVudCAgaXQKKyAgICAgICByZWNlaXZlcyAgaXMgIHRoZSBjdXJyZW50IG5lc3RpbmcgcGFyZW50aGVzaXMgZGVwdGg7IGlmIHRoaXMgaXMgZ3JlYXRlcgorICAgICAgIHRoYW4gdGhlIHZhbHVlIGdpdmVuIGJ5IHRoZSBtb2RpZmllciwgbm9uLXplcm8gaXMgcmV0dXJuZWQsIGNhdXNpbmcgdGhlCisgICAgICAgY29tcGlsYXRpb24gdG8gYmUgYWJvcnRlZC4KKworICAgVXNpbmcgYWx0ZXJuYXRpdmUgY2hhcmFjdGVyIHRhYmxlcworCisgICAgICAgVGhlICB2YWx1ZSBzcGVjaWZpZWQgZm9yIHRoZSAvdGFibGVzIG1vZGlmaWVyIG11c3QgYmUgb25lIG9mIHRoZSBkaWdpdHMKKyAgICAgICAwLCAxLCBvciAyLiBJdCBjYXVzZXMgYSBzcGVjaWZpYyBzZXQgb2YgYnVpbHQtaW4gY2hhcmFjdGVyIHRhYmxlcyB0byBiZQorICAgICAgIHBhc3NlZCB0byBwY3JlMl9jb21waWxlKCkuIFRoaXMgaXMgdXNlZCBpbiB0aGUgUENSRTIgdGVzdHMgdG8gY2hlY2sgYmUtCisgICAgICAgaGF2aW91ciB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIgdGFibGVzLiBUaGUgZGlnaXQgc3BlY2lmaWVzIHRoZSB0YWJsZXMKKyAgICAgICBhcyBmb2xsb3dzOgorCisgICAgICAgICAwICAgZG8gbm90IHBhc3MgYW55IHNwZWNpYWwgY2hhcmFjdGVyIHRhYmxlcworICAgICAgICAgMSAgIHRoZSBkZWZhdWx0IEFTQ0lJIHRhYmxlcywgYXMgZGlzdHJpYnV0ZWQgaW4KKyAgICAgICAgICAgICAgIHBjcmUyX2NoYXJ0YWJsZXMuYy5kaXN0CisgICAgICAgICAyICAgYSBzZXQgb2YgdGFibGVzIGRlZmluaW5nIElTTyA4ODU5IGNoYXJhY3RlcnMKKworICAgICAgIEluICB0YWJsZSAyLCBzb21lIGNoYXJhY3RlcnMgd2hvc2UgY29kZXMgYXJlIGdyZWF0ZXIgdGhhbiAxMjggYXJlIGlkZW4tCisgICAgICAgdGlmaWVkIGFzIGxldHRlcnMsIGRpZ2l0cywgc3BhY2VzLCAgZXRjLiAgU2V0dGluZyAgYWx0ZXJuYXRlICBjaGFyYWN0ZXIKKyAgICAgICB0YWJsZXMgYW5kIGEgbG9jYWxlIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCisKKyAgIFNldHRpbmcgY2VydGFpbiBtYXRjaCBjb250cm9scworCisgICAgICAgVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgYXJlIHJlYWxseSBzdWJqZWN0IG1vZGlmaWVycywgYW5kIGFyZSBkZXNjcmliZWQKKyAgICAgICBiZWxvdy4gIEhvd2V2ZXIsIHRoZXkgbWF5IGJlIGluY2x1ZGVkIGluIGEgcGF0dGVybidzIG1vZGlmaWVyIGxpc3QsICBpbgorICAgICAgIHdoaWNoICBjYXNlICB0aGV5ICBhcmUgIGFwcGxpZWQgdG8gZXZlcnkgc3ViamVjdCBsaW5lIHRoYXQgaXMgcHJvY2Vzc2VkCisgICAgICAgd2l0aCB0aGF0IHBhdHRlcm4uIFRoZXkgbWF5IG5vdCBhcHBlYXIgaW4gI3BhdHRlcm4gY29tbWFuZHMuIFRoZXNlIG1vZC0KKyAgICAgICBpZmllcnMgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsYXRpb24gcHJvY2Vzcy4KKworICAgICAgICAgICAgIGFmdGVydGV4dCAgICAgICAgICAgICAgICAgIHNob3cgdGV4dCBhZnRlciBtYXRjaAorICAgICAgICAgICAgIGFsbGFmdGVydGV4dCAgICAgICAgICAgICAgIHNob3cgdGV4dCBhZnRlciBjYXB0dXJlcworICAgICAgICAgICAgIGFsbGNhcHR1cmVzICAgICAgICAgICAgICAgIHNob3cgYWxsIGNhcHR1cmVzCisgICAgICAgICAgICAgYWxsdXNlZHRleHQgICAgICAgICAgICAgICAgc2hvdyBhbGwgY29uc3VsdGVkIHRleHQKKyAgICAgICAgIC9nICBnbG9iYWwgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgbWF0Y2hpbmcKKyAgICAgICAgICAgICBtYXJrICAgICAgICAgICAgICAgICAgICAgICBzaG93IG1hcmsgdmFsdWVzCisgICAgICAgICAgICAgcmVwbGFjZT08c3RyaW5nPiAgICAgICAgICAgc3BlY2lmeSBhIHJlcGxhY2VtZW50IHN0cmluZworICAgICAgICAgICAgIHN0YXJ0Y2hhciAgICAgICAgICAgICAgICAgIHNob3cgc3RhcnRpbmcgY2hhcmFjdGVyIHdoZW4gcmVsZXZhbnQKKyAgICAgICAgICAgICBzdWJzdGl0dXRlX2V4dGVuZGVkICAgICAgICB1c2UgUENSRTJfU1VCU1RJVFVURV9FWFRFTkRFRAorICAgICAgICAgICAgIHN1YnN0aXR1dGVfb3ZlcmZsb3dfbGVuZ3RoIHVzZSBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSAorICAgICAgICAgICAgIHN1YnN0aXR1dGVfdW5rbm93bl91bnNldCAgIHVzZSBQQ1JFMl9TVUJTVElUVVRFX1VOS05PV05fVU5TRVQKKyAgICAgICAgICAgICBzdWJzdGl0dXRlX3Vuc2V0X2VtcHR5ICAgICB1c2UgUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWQorCisgICAgICAgVGhlc2UgIG1vZGlmaWVycyBtYXkgbm90IGFwcGVhciBpbiBhICNwYXR0ZXJuIGNvbW1hbmQuIElmIHlvdSB3YW50IHRoZW0KKyAgICAgICBhcyBkZWZhdWx0cywgc2V0IHRoZW0gaW4gYSAjc3ViamVjdCBjb21tYW5kLgorCisgICBTYXZpbmcgYSBjb21waWxlZCBwYXR0ZXJuCisKKyAgICAgICBXaGVuIGEgcGF0dGVybiB3aXRoIHRoZSBwdXNoIG1vZGlmaWVyIGlzIHN1Y2Nlc3NmdWxseSBjb21waWxlZCwgIGl0ICBpcworICAgICAgIHB1c2hlZCAgb250byAgYSAgc3RhY2sgIG9mIGNvbXBpbGVkIHBhdHRlcm5zLCBhbmQgcGNyZTJ0ZXN0IGV4cGVjdHMgdGhlCisgICAgICAgbmV4dCBsaW5lIHRvIGNvbnRhaW4gYSBuZXcgcGF0dGVybiAob3IgYSBjb21tYW5kKSBpbnN0ZWFkIG9mIGEgIHN1YmplY3QKKyAgICAgICBsaW5lLiBUaGlzIGZhY2lsaXR5IGlzIHVzZWQgd2hlbiBzYXZpbmcgY29tcGlsZWQgcGF0dGVybnMgdG8gYSBmaWxlLCBhcworICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiU2F2aW5nIGFuZCByZXN0b3JpbmcgIGNvbXBpbGVkICBwYXQtCisgICAgICAgdGVybnMiIGJlbG93LiAgVGhlIHB1c2ggbW9kaWZpZXIgaXMgaW5jb21wYXRpYmxlIHdpdGggY29tcGlsYXRpb24gbW9kaS0KKyAgICAgICBmaWVycyBzdWNoIGFzIGdsb2JhbCB0aGF0IGFjdCBhdCBtYXRjaCB0aW1lLiBBbnkgdGhhdCBhcmUgc3BlY2lmaWVkIGFyZQorICAgICAgIGlnbm9yZWQsICB3aXRoICBhICB3YXJuaW5nIG1lc3NhZ2UsIGV4Y2VwdCBmb3IgcmVwbGFjZSwgd2hpY2ggY2F1c2VzIGFuCisgICAgICAgZXJyb3IuIE5vdGUgdGhhdCwgaml0dmVyaWZ5LCB3aGljaCBpcyBhbGxvd2VkLCBkb2VzIG5vdCAgY2FycnkgIHRocm91Z2gKKyAgICAgICB0byBhbnkgc3Vic2VxdWVudCBtYXRjaGluZyB0aGF0IHVzZXMgdGhpcyBwYXR0ZXJuLgorCisKK1NVQkpFQ1QgTU9ESUZJRVJTCisKKyAgICAgICBUaGUgbW9kaWZpZXJzIHRoYXQgY2FuIGFwcGVhciBpbiBzdWJqZWN0IGxpbmVzIGFuZCB0aGUgI3N1YmplY3QgY29tbWFuZAorICAgICAgIGFyZSBvZiB0d28gdHlwZXMuCisKKyAgIFNldHRpbmcgbWF0Y2ggb3B0aW9ucworCisgICAgICAgVGhlICAgZm9sbG93aW5nICAgbW9kaWZpZXJzICAgc2V0ICAgb3B0aW9ucyAgIGZvciAgIHBjcmUyX21hdGNoKCkgICAgb3IKKyAgICAgICBwY3JlMl9kZmFfbWF0Y2goKS4gU2VlIHBjcmVhcGkgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlaXIgZWZmZWN0cy4KKworICAgICAgICAgICAgIGFuY2hvcmVkICAgICAgICAgICAgICAgICAgc2V0IFBDUkUyX0FOQ0hPUkVECisgICAgICAgICAgICAgZGZhX3Jlc3RhcnQgICAgICAgICAgICAgICBzZXQgUENSRTJfREZBX1JFU1RBUlQKKyAgICAgICAgICAgICBkZmFfc2hvcnRlc3QgICAgICAgICAgICAgIHNldCBQQ1JFMl9ERkFfU0hPUlRFU1QKKyAgICAgICAgICAgICBub191dGZfY2hlY2sgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT19VVEZfQ0hFQ0sKKyAgICAgICAgICAgICBub3Rib2wgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT1RCT0wKKyAgICAgICAgICAgICBub3RlbXB0eSAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT1RFTVBUWQorICAgICAgICAgICAgIG5vdGVtcHR5X2F0c3RhcnQgICAgICAgICAgc2V0IFBDUkUyX05PVEVNUFRZX0FUU1RBUlQKKyAgICAgICAgICAgICBub3Rlb2wgICAgICAgICAgICAgICAgICAgIHNldCBQQ1JFMl9OT1RFT0wKKyAgICAgICAgICAgICBwYXJ0aWFsX2hhcmQgKG9yIHBoKSAgICAgIHNldCBQQ1JFMl9QQVJUSUFMX0hBUkQKKyAgICAgICAgICAgICBwYXJ0aWFsX3NvZnQgKG9yIHBzKSAgICAgIHNldCBQQ1JFMl9QQVJUSUFMX1NPRlQKKworICAgICAgIFRoZSAgcGFydGlhbCBtYXRjaGluZyBtb2RpZmllcnMgYXJlIHByb3ZpZGVkIHdpdGggYWJicmV2aWF0aW9ucyBiZWNhdXNlCisgICAgICAgdGhleSBhcHBlYXIgZnJlcXVlbnRseSBpbiB0ZXN0cy4KKworICAgICAgIElmIHRoZSAvcG9zaXggbW9kaWZpZXIgd2FzIHByZXNlbnQgb24gdGhlIHBhdHRlcm4sICBjYXVzaW5nICB0aGUgIFBPU0lYCisgICAgICAgd3JhcHBlciBBUEkgdG8gYmUgdXNlZCwgdGhlIG9ubHkgb3B0aW9uLXNldHRpbmcgbW9kaWZpZXJzIHRoYXQgaGF2ZSBhbnkKKyAgICAgICBlZmZlY3QgIGFyZSAgbm90Ym9sLCAgbm90ZW1wdHksICAgYW5kICAgbm90ZW9sLCAgIGNhdXNpbmcgICBSRUdfTk9UQk9MLAorICAgICAgIFJFR19OT1RFTVBUWSwgIGFuZCBSRUdfTk9URU9MLCByZXNwZWN0aXZlbHksIHRvIGJlIHBhc3NlZCB0byByZWdleGVjKCkuCisgICAgICAgQW55IG90aGVyIG1vZGlmaWVycyBjYXVzZSBhbiBlcnJvci4KKworICAgU2V0dGluZyBtYXRjaCBjb250cm9scworCisgICAgICAgVGhlIGZvbGxvd2luZyBtb2RpZmllcnMgYWZmZWN0IHRoZSBtYXRjaGluZyBwcm9jZXNzICBvciAgcmVxdWVzdCAgYWRkaS0KKyAgICAgICB0aW9uYWwgIGluZm9ybWF0aW9uLiAgU29tZSAgb2YgIHRoZW0gbWF5IGFsc28gYmUgc3BlY2lmaWVkIG9uIGEgcGF0dGVybgorICAgICAgIGxpbmUgKHNlZSBhYm92ZSksIGluIHdoaWNoIGNhc2UgdGhleSBhcHBseSB0byBldmVyeSBzdWJqZWN0ICBsaW5lICB0aGF0CisgICAgICAgaXMgbWF0Y2hlZCBhZ2FpbnN0IHRoYXQgcGF0dGVybi4KKworICAgICAgICAgICAgIGFmdGVydGV4dCAgICAgICAgICAgICAgICAgIHNob3cgdGV4dCBhZnRlciBtYXRjaAorICAgICAgICAgICAgIGFsbGFmdGVydGV4dCAgICAgICAgICAgICAgIHNob3cgdGV4dCBhZnRlciBjYXB0dXJlcworICAgICAgICAgICAgIGFsbGNhcHR1cmVzICAgICAgICAgICAgICAgIHNob3cgYWxsIGNhcHR1cmVzCisgICAgICAgICAgICAgYWxsdXNlZHRleHQgICAgICAgICAgICAgICAgc2hvdyBhbGwgY29uc3VsdGVkIHRleHQgKG5vbi1KSVQgb25seSkKKyAgICAgICAgICAgICBhbHRnbG9iYWwgICAgICAgICAgICAgICAgICBhbHRlcm5hdGl2ZSBnbG9iYWwgbWF0Y2hpbmcKKyAgICAgICAgICAgICBjYWxsb3V0X2NhcHR1cmUgICAgICAgICAgICBzaG93IGNhcHR1cmVzIGF0IGNhbGxvdXQgdGltZQorICAgICAgICAgICAgIGNhbGxvdXRfZGF0YT08bj4gICAgICAgICAgIHNldCBhIHZhbHVlIHRvIHBhc3MgdmlhIGNhbGxvdXRzCisgICAgICAgICAgICAgY2FsbG91dF9mYWlsPTxuPls6PG0+XSAgICAgY29udHJvbCBjYWxsb3V0IGZhaWx1cmUKKyAgICAgICAgICAgICBjYWxsb3V0X25vbmUgICAgICAgICAgICAgICBkbyBub3Qgc3VwcGx5IGEgY2FsbG91dCBmdW5jdGlvbgorICAgICAgICAgICAgIGNvcHk9PG51bWJlciBvciBuYW1lPiAgICAgIGNvcHkgY2FwdHVyZWQgc3Vic3RyaW5nCisgICAgICAgICAgICAgZGZhICAgICAgICAgICAgICAgICAgICAgICAgdXNlIHBjcmUyX2RmYV9tYXRjaCgpCisgICAgICAgICAgICAgZmluZF9saW1pdHMgICAgICAgICAgICAgICAgZmluZCBtYXRjaCBhbmQgcmVjdXJzaW9uIGxpbWl0cworICAgICAgICAgICAgIGdldD08bnVtYmVyIG9yIG5hbWU+ICAgICAgIGV4dHJhY3QgY2FwdHVyZWQgc3Vic3RyaW5nCisgICAgICAgICAgICAgZ2V0YWxsICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdCBhbGwgY2FwdHVyZWQgc3Vic3RyaW5ncworICAgICAgICAgL2cgIGdsb2JhbCAgICAgICAgICAgICAgICAgICAgIGdsb2JhbCBtYXRjaGluZworICAgICAgICAgICAgIGppdHN0YWNrPTxuPiAgICAgICAgICAgICAgIHNldCBzaXplIG9mIEpJVCBzdGFjaworICAgICAgICAgICAgIG1hcmsgICAgICAgICAgICAgICAgICAgICAgIHNob3cgbWFyayB2YWx1ZXMKKyAgICAgICAgICAgICBtYXRjaF9saW1pdD08bj4gICAgICAgICAgICBzZXQgYSBtYXRjaCBsaW1pdAorICAgICAgICAgICAgIG1lbW9yeSAgICAgICAgICAgICAgICAgICAgIHNob3cgbWVtb3J5IHVzYWdlCisgICAgICAgICAgICAgbnVsbF9jb250ZXh0ICAgICAgICAgICAgICAgbWF0Y2ggd2l0aCBhIE5VTEwgY29udGV4dAorICAgICAgICAgICAgIG9mZnNldD08bj4gICAgICAgICAgICAgICAgIHNldCBzdGFydGluZyBvZmZzZXQKKyAgICAgICAgICAgICBvZmZzZXRfbGltaXQ9PG4+ICAgICAgICAgICBzZXQgb2Zmc2V0IGxpbWl0CisgICAgICAgICAgICAgb3ZlY3Rvcj08bj4gICAgICAgICAgICAgICAgc2V0IHNpemUgb2Ygb3V0cHV0IHZlY3RvcgorICAgICAgICAgICAgIHJlY3Vyc2lvbl9saW1pdD08bj4gICAgICAgIHNldCBhIHJlY3Vyc2lvbiBsaW1pdAorICAgICAgICAgICAgIHJlcGxhY2U9PHN0cmluZz4gICAgICAgICAgIHNwZWNpZnkgYSByZXBsYWNlbWVudCBzdHJpbmcKKyAgICAgICAgICAgICBzdGFydGNoYXIgICAgICAgICAgICAgICAgICBzaG93IHN0YXJ0Y2hhciB3aGVuIHJlbGV2YW50CisgICAgICAgICAgICAgc3RhcnRvZmZzZXQ9PG4+ICAgICAgICAgICAgc2FtZSBhcyBvZmZzZXQ9PG4+CisgICAgICAgICAgICAgc3Vic3RpdHV0ZV9leHRlZGRlZCAgICAgICAgdXNlIFBDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUQKKyAgICAgICAgICAgICBzdWJzdGl0dXRlX292ZXJmbG93X2xlbmd0aCB1c2UgUENSRTJfU1VCU1RJVFVURV9PVkVSRkxPV19MRU5HVEgKKyAgICAgICAgICAgICBzdWJzdGl0dXRlX3Vua25vd25fdW5zZXQgICB1c2UgUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUCisgICAgICAgICAgICAgc3Vic3RpdHV0ZV91bnNldF9lbXB0eSAgICAgdXNlIFBDUkUyX1NVQlNUSVRVVEVfVU5TRVRfRU1QVFkKKyAgICAgICAgICAgICB6ZXJvX3Rlcm1pbmF0ZSAgICAgICAgICAgICBwYXNzIHRoZSBzdWJqZWN0IGFzIHplcm8tdGVybWluYXRlZAorCisgICAgICAgVGhlIGVmZmVjdHMgb2YgdGhlc2UgbW9kaWZpZXJzIGFyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKworICAgU2hvd2luZyBtb3JlIHRleHQKKworICAgICAgIFRoZSAgYWZ0ZXJ0ZXh0IG1vZGlmaWVyIHJlcXVlc3RzIHRoYXQgYXMgd2VsbCBhcyBvdXRwdXR0aW5nIHRoZSBwYXJ0IG9mCisgICAgICAgdGhlIHN1YmplY3Qgc3RyaW5nIHRoYXQgbWF0Y2hlZCB0aGUgZW50aXJlIHBhdHRlcm4sIHBjcmUydGVzdCBzaG91bGQgaW4KKyAgICAgICBhZGRpdGlvbiBvdXRwdXQgdGhlIHJlbWFpbmRlciBvZiB0aGUgc3ViamVjdCBzdHJpbmcuIFRoaXMgaXMgdXNlZnVsIGZvcgorICAgICAgIHRlc3RzIHdoZXJlIHRoZSBzdWJqZWN0IGNvbnRhaW5zIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgc2FtZSBzdWJzdHJpbmcuCisgICAgICAgVGhlICBhbGxhZnRlcnRleHQgIG1vZGlmaWVyICByZXF1ZXN0cyB0aGUgc2FtZSBhY3Rpb24gZm9yIGNhcHR1cmVkIHN1Yi0KKyAgICAgICBzdHJpbmdzIGFzIHdlbGwgYXMgdGhlIG1haW4gbWF0Y2hlZCBzdWJzdHJpbmcuIEluIGVhY2ggY2FzZSB0aGUgcmVtYWluLQorICAgICAgIGRlciBpcyBvdXRwdXQgb24gdGhlIGZvbGxvd2luZyBsaW5lIHdpdGggYSBwbHVzIGNoYXJhY3RlciBmb2xsb3dpbmcgdGhlCisgICAgICAgY2FwdHVyZSBudW1iZXIuCisKKyAgICAgICBUaGUgYWxsdXNlZHRleHQgbW9kaWZpZXIgcmVxdWVzdHMgdGhhdCBhbGwgdGhlIHRleHQgdGhhdCB3YXMgIGNvbnN1bHRlZAorICAgICAgIGR1cmluZyAgYSAgc3VjY2Vzc2Z1bCBwYXR0ZXJuIG1hdGNoIGJ5IHRoZSBpbnRlcnByZXRlciBzaG91bGQgYmUgc2hvd24uCisgICAgICAgVGhpcyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIEpJVCBtYXRjaGluZywgYW5kIGlmICByZXF1ZXN0ZWQgIHdpdGgKKyAgICAgICBKSVQgIGl0ICBpcyAgaWdub3JlZCAgKHdpdGggIGEgIHdhcm5pbmcgbWVzc2FnZSkuIFNldHRpbmcgdGhpcyBtb2RpZmllcgorICAgICAgIGFmZmVjdHMgdGhlIG91dHB1dCBpZiB0aGVyZSBpcyBhIGxvb2tiZWhpbmQgYXQgdGhlIHN0YXJ0IG9mIGEgbWF0Y2gsIG9yCisgICAgICAgYSAgbG9va2FoZWFkICBhdCAgdGhlICBlbmQsIG9yIGlmIFxLIGlzIHVzZWQgaW4gdGhlIHBhdHRlcm4uIENoYXJhY3RlcnMKKyAgICAgICB0aGF0IHByZWNlZGUgb3IgZm9sbG93IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBhY3R1YWwgbWF0Y2ggYXJlICBpbmRpLQorICAgICAgIGNhdGVkICBpbiAgdGhlIG91dHB1dCBieSAnPCcgb3IgJz4nIGNoYXJhY3RlcnMgdW5kZXJuZWF0aCB0aGVtLiBIZXJlIGlzCisgICAgICAgYW4gZXhhbXBsZToKKworICAgICAgICAgICByZT4gLyg/PD1wcXIpYWJjKD89eHl6KS8KKyAgICAgICAgIGRhdGE+IDEyM3BxcmFiY3h5ejQ1Nlw9YWxsdXNlZHRleHQKKyAgICAgICAgICAwOiBwcXJhYmN4eXoKKyAgICAgICAgICAgICA8PDwgICA+Pj4KKworICAgICAgIFRoaXMgc2hvd3MgdGhhdCB0aGUgbWF0Y2hlZCBzdHJpbmcgaXMgImFiYyIsICB3aXRoICB0aGUgIHByZWNlZGluZyAgYW5kCisgICAgICAgZm9sbG93aW5nICBzdHJpbmdzICAicHFyIiAgYW5kICAieHl6IiAgaGF2aW5nIGJlZW4gY29uc3VsdGVkIGR1cmluZyB0aGUKKyAgICAgICBtYXRjaCAod2hlbiBwcm9jZXNzaW5nIHRoZSBhc3NlcnRpb25zKS4KKworICAgICAgIFRoZSBzdGFydGNoYXIgbW9kaWZpZXIgcmVxdWVzdHMgdGhhdCB0aGUgIHN0YXJ0aW5nICBjaGFyYWN0ZXIgIGZvciAgdGhlCisgICAgICAgbWF0Y2ggIGJlICBpbmRpY2F0ZWQsICBpZiAgaXQgIGlzIGRpZmZlcmVudCB0byB0aGUgc3RhcnQgb2YgdGhlIG1hdGNoZWQKKyAgICAgICBzdHJpbmcuIFRoZSBvbmx5IHRpbWUgd2hlbiB0aGlzIG9jY3VycyBpcyB3aGVuIFxLIGhhcyBiZWVuIHByb2Nlc3NlZCBhcworICAgICAgIHBhcnQgb2YgdGhlIG1hdGNoLiBJbiB0aGlzIHNpdHVhdGlvbiwgdGhlIG91dHB1dCBmb3IgdGhlIG1hdGNoZWQgc3RyaW5nCisgICAgICAgaXMgZGlzcGxheWVkIGZyb20gdGhlIHN0YXJ0aW5nIGNoYXJhY3RlciAgaW5zdGVhZCAgb2YgIGZyb20gIHRoZSAgbWF0Y2gKKyAgICAgICBwb2ludCwgIHdpdGggIGNpcmN1bWZsZXggIGNoYXJhY3RlcnMgIHVuZGVyIHRoZSBlYXJsaWVyIGNoYXJhY3RlcnMuIEZvcgorICAgICAgIGV4YW1wbGU6CisKKyAgICAgICAgICAgcmU+IC9hYmNcS3h5ei8KKyAgICAgICAgIGRhdGE+IGFiY3h5elw9c3RhcnRjaGFyCisgICAgICAgICAgMDogYWJjeHl6CisgICAgICAgICAgICAgXl5eCisKKyAgICAgICBVbmxpa2UgYWxsdXNlZHRleHQsIHRoZSBzdGFydGNoYXIgbW9kaWZpZXIgY2FuIGJlIHVzZWQgd2l0aCBKSVQuICAgSG93LQorICAgICAgIGV2ZXIsIHRoZXNlIHR3byBtb2RpZmllcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKworICAgU2hvd2luZyB0aGUgdmFsdWUgb2YgYWxsIGNhcHR1cmUgZ3JvdXBzCisKKyAgICAgICBUaGUgYWxsY2FwdHVyZXMgbW9kaWZpZXIgcmVxdWVzdHMgdGhhdCB0aGUgdmFsdWVzIG9mIGFsbCBwb3RlbnRpYWwgY2FwLQorICAgICAgIHR1cmVkIHBhcmVudGhlc2VzIGJlIG91dHB1dCBhZnRlciBhIG1hdGNoLiBCeSBkZWZhdWx0LCBvbmx5IHRob3NlIHVwIHRvCisgICAgICAgdGhlIGhpZ2hlc3Qgb25lIGFjdHVhbGx5IHVzZWQgaW4gdGhlIG1hdGNoIGFyZSBvdXRwdXQgKGNvcnJlc3BvbmRpbmcgdG8KKyAgICAgICB0aGUgcmV0dXJuIGNvZGUgZnJvbSBwY3JlMl9tYXRjaCgpKS4gR3JvdXBzIHRoYXQgZGlkIG5vdCB0YWtlICBwYXJ0ICBpbgorICAgICAgIHRoZSBtYXRjaCBhcmUgb3V0cHV0IGFzICI8dW5zZXQ+Ii4KKworICAgVGVzdGluZyBjYWxsb3V0cworCisgICAgICAgQSAgY2FsbG91dCBmdW5jdGlvbiBpcyBzdXBwbGllZCB3aGVuIHBjcmUydGVzdCBjYWxscyB0aGUgbGlicmFyeSBtYXRjaC0KKyAgICAgICBpbmcgZnVuY3Rpb25zLCB1bmxlc3MgY2FsbG91dF9ub25lIGlzIHNwZWNpZmllZC4gSWYgY2FsbG91dF9jYXB0dXJlICBpcworICAgICAgIHNldCwgdGhlIGN1cnJlbnQgY2FwdHVyZWQgZ3JvdXBzIGFyZSBvdXRwdXQgd2hlbiBhIGNhbGxvdXQgb2NjdXJzLgorCisgICAgICAgVGhlICBjYWxsb3V0X2ZhaWwgbW9kaWZpZXIgY2FuIGJlIGdpdmVuIG9uZSBvciB0d28gbnVtYmVycy4gSWYgdGhlcmUgaXMKKyAgICAgICBvbmx5IG9uZSBudW1iZXIsIDEgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiAwIHdoZW4gYSBjYWxsb3V0IG9mIHRoYXQgbnVtLQorICAgICAgIGJlciAgaXMgIHJlYWNoZWQuICBJZiB0d28gbnVtYmVycyBhcmUgZ2l2ZW4sIDEgaXMgcmV0dXJuZWQgd2hlbiBjYWxsb3V0CisgICAgICAgPG4+IGlzIHJlYWNoZWQgZm9yIHRoZSA8bT50aCB0aW1lLiBOb3RlIHRoYXQgY2FsbG91dHMgd2l0aCBzdHJpbmcgYXJndS0KKyAgICAgICBtZW50cyAgYXJlICBhbHdheXMgIGdpdmVuICB0aGUgIG51bWJlciB6ZXJvLiBTZWUgIkNhbGxvdXRzIiBiZWxvdyBmb3IgYQorICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBvdXRwdXQgd2hlbiBhIGNhbGxvdXQgaXQgdGFrZW4uCisKKyAgICAgICBUaGUgY2FsbG91dF9kYXRhIG1vZGlmaWVyIGNhbiBiZSBnaXZlbiBhbiB1bnNpZ25lZCBvciBhICBuZWdhdGl2ZSAgbnVtLQorICAgICAgIGJlci4gICBUaGlzICBpcyAgc2V0ICBhcyB0aGUgInVzZXIgZGF0YSIgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIG1hdGNoaW5nCisgICAgICAgZnVuY3Rpb24sIGFuZCBwYXNzZWQgYmFjayB3aGVuIHRoZSBjYWxsb3V0ICBmdW5jdGlvbiAgaXMgIGludm9rZWQuICBBbnkKKyAgICAgICB2YWx1ZSAgb3RoZXIgIHRoYW4gIHplcm8gIGlzICB1c2VkIGFzIGEgcmV0dXJuIGZyb20gcGNyZTJ0ZXN0J3MgY2FsbG91dAorICAgICAgIGZ1bmN0aW9uLgorCisgICBGaW5kaW5nIGFsbCBtYXRjaGVzIGluIGEgc3RyaW5nCisKKyAgICAgICBTZWFyY2hpbmcgZm9yIGFsbCBwb3NzaWJsZSBtYXRjaGVzIHdpdGhpbiBhIHN1YmplY3QgY2FuIGJlIHJlcXVlc3RlZCBieQorICAgICAgIHRoZSAgZ2xvYmFsIG9yIC9hbHRnbG9iYWwgbW9kaWZpZXIuIEFmdGVyIGZpbmRpbmcgYSBtYXRjaCwgdGhlIG1hdGNoaW5nCisgICAgICAgZnVuY3Rpb24gaXMgY2FsbGVkIGFnYWluIHRvIHNlYXJjaCB0aGUgcmVtYWluZGVyIG9mICB0aGUgIHN1YmplY3QuICBUaGUKKyAgICAgICBkaWZmZXJlbmNlICBiZXR3ZWVuICBnbG9iYWwgIGFuZCAgYWx0Z2xvYmFsIGlzIHRoYXQgdGhlIGZvcm1lciB1c2VzIHRoZQorICAgICAgIHN0YXJ0X29mZnNldCBhcmd1bWVudCB0byBwY3JlMl9tYXRjaCgpIG9yICBwY3JlMl9kZmFfbWF0Y2goKSAgdG8gIHN0YXJ0CisgICAgICAgc2VhcmNoaW5nICBhdCAgYSBuZXcgcG9pbnQgd2l0aGluIHRoZSBlbnRpcmUgc3RyaW5nICh3aGljaCBpcyB3aGF0IFBlcmwKKyAgICAgICBkb2VzKSwgd2hlcmVhcyB0aGUgbGF0dGVyIHBhc3NlcyBvdmVyIGEgc2hvcnRlbmVkIHN1YmplY3QuIFRoaXMgbWFrZXMgYQorICAgICAgIGRpZmZlcmVuY2UgdG8gdGhlIG1hdGNoaW5nIHByb2Nlc3MgaWYgdGhlIHBhdHRlcm4gYmVnaW5zIHdpdGggYSBsb29rYmUtCisgICAgICAgaGluZCBhc3NlcnRpb24gKGluY2x1ZGluZyBcYiBvciBcQikuCisKKyAgICAgICBJZiBhbiBlbXB0eSBzdHJpbmcgIGlzICBtYXRjaGVkLCAgdGhlICBuZXh0ICBtYXRjaCAgaXMgIGRvbmUgIHdpdGggIHRoZQorICAgICAgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQgYW5kIFBDUkUyX0FOQ0hPUkVEIGZsYWdzIHNldCwgaW4gb3JkZXIgdG8gc2VhcmNoCisgICAgICAgZm9yIGFub3RoZXIsIG5vbi1lbXB0eSwgbWF0Y2ggYXQgdGhlIHNhbWUgcG9pbnQgaW4gdGhlIHN1YmplY3QuIElmIHRoaXMKKyAgICAgICBtYXRjaCAgZmFpbHMsICB0aGUgIHN0YXJ0ICBvZmZzZXQgIGlzIGFkdmFuY2VkLCBhbmQgdGhlIG5vcm1hbCBtYXRjaCBpcworICAgICAgIHJldHJpZWQuIFRoaXMgaW1pdGF0ZXMgdGhlIHdheSBQZXJsIGhhbmRsZXMgc3VjaCBjYXNlcyB3aGVuICB1c2luZyAgdGhlCisgICAgICAgL2cgIG1vZGlmaWVyICBvciAgdGhlICBzcGxpdCgpICBmdW5jdGlvbi4gTm9ybWFsbHksIHRoZSBzdGFydCBvZmZzZXQgaXMKKyAgICAgICBhZHZhbmNlZCBieSBvbmUgY2hhcmFjdGVyLCBidXQgaWYgIHRoZSAgbmV3bGluZSAgY29udmVudGlvbiAgcmVjb2duaXplcworICAgICAgIENSTEYgIGFzICBhIG5ld2xpbmUsIGFuZCB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgQ1IgZm9sbG93ZWQgYnkgTEYsIGFuCisgICAgICAgYWR2YW5jZSBvZiB0d28gY2hhcmFjdGVycyBvY2N1cnMuCisKKyAgIFRlc3Rpbmcgc3Vic3RyaW5nIGV4dHJhY3Rpb24gZnVuY3Rpb25zCisKKyAgICAgICBUaGUgY29weSAgYW5kICBnZXQgIG1vZGlmaWVycyAgY2FuICBiZSAgdXNlZCAgdG8gIHRlc3QgIHRoZSAgcGNyZTJfc3ViLQorICAgICAgIHN0cmluZ19jb3B5X3h4eCgpIGFuZCBwY3JlMl9zdWJzdHJpbmdfZ2V0X3h4eCgpIGZ1bmN0aW9ucy4gIFRoZXkgY2FuIGJlCisgICAgICAgZ2l2ZW4gbW9yZSB0aGFuIG9uY2UsIGFuZCBlYWNoIGNhbiBzcGVjaWZ5IGEgZ3JvdXAgbmFtZSBvciBudW1iZXIsICBmb3IKKyAgICAgICBleGFtcGxlOgorCisgICAgICAgICAgYWJjZFw9Y29weT0xLGNvcHk9MyxnZXQ9RzEKKworICAgICAgIElmICB0aGUgICNzdWJqZWN0IGNvbW1hbmQgaXMgdXNlZCB0byBzZXQgZGVmYXVsdCBjb3B5IGFuZC9vciBnZXQgbGlzdHMsCisgICAgICAgdGhlc2UgY2FuIGJlIHVuc2V0IGJ5IHNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBudW1iZXIgdG8gY2FuY2VsICBhbGwgIG51bS0KKyAgICAgICBiZXJlZCBncm91cHMgYW5kIGFuIGVtcHR5IG5hbWUgdG8gY2FuY2VsIGFsbCBuYW1lZCBncm91cHMuCisKKyAgICAgICBUaGUgIGdldGFsbCAgbW9kaWZpZXIgIHRlc3RzIHBjcmUyX3N1YnN0cmluZ19saXN0X2dldCgpLCB3aGljaCBleHRyYWN0cworICAgICAgIGFsbCBjYXB0dXJlZCBzdWJzdHJpbmdzLgorCisgICAgICAgSWYgdGhlIHN1YmplY3QgbGluZSBpcyBzdWNjZXNzZnVsbHkgbWF0Y2hlZCwgdGhlICBzdWJzdHJpbmdzICBleHRyYWN0ZWQKKyAgICAgICBieSAgdGhlICBjb252ZW5pZW5jZSAgZnVuY3Rpb25zICBhcmUgIG91dHB1dCAgd2l0aCBDLCBHLCBvciBMIGFmdGVyIHRoZQorICAgICAgIHN0cmluZyBudW1iZXIgaW5zdGVhZCBvZiBhIGNvbG9uLiBUaGlzIGlzIGluICBhZGRpdGlvbiAgdG8gIHRoZSAgbm9ybWFsCisgICAgICAgZnVsbCAgbGlzdC4gIFRoZSBzdHJpbmcgbGVuZ3RoICh0aGF0IGlzLCB0aGUgcmV0dXJuIGZyb20gdGhlIGV4dHJhY3Rpb24KKyAgICAgICBmdW5jdGlvbikgaXMgZ2l2ZW4gaW4gcGFyZW50aGVzZXMgYWZ0ZXIgZWFjaCBzdWJzdHJpbmcsIGZvbGxvd2VkIGJ5IHRoZQorICAgICAgIG5hbWUgd2hlbiB0aGUgZXh0cmFjdGlvbiB3YXMgYnkgbmFtZS4KKworICAgVGVzdGluZyB0aGUgc3Vic3RpdHV0aW9uIGZ1bmN0aW9uCisKKyAgICAgICBJZiAgdGhlICByZXBsYWNlICBtb2RpZmllciAgaXMgIHNldCwgdGhlIHBjcmUyX3N1YnN0aXR1dGUoKSBmdW5jdGlvbiBpcworICAgICAgIGNhbGxlZCBpbnN0ZWFkIG9mIG9uZSBvZiB0aGUgbWF0Y2hpbmcgZnVuY3Rpb25zLiBOb3RlIHRoYXQgIHJlcGxhY2VtZW50CisgICAgICAgc3RyaW5ncyAgY2Fubm90ICBjb250YWluIGNvbW1hcywgYmVjYXVzZSBhIGNvbW1hIHNpZ25pZmllcyB0aGUgZW5kIG9mIGEKKyAgICAgICBtb2RpZmllci4gVGhpcyBpcyBub3QgdGhvdWdodCB0byBiZSBhbiBpc3N1ZSBpbiBhIHRlc3QgcHJvZ3JhbS4KKworICAgICAgIFVubGlrZSBzdWJqZWN0IHN0cmluZ3MsIHBjcmUydGVzdCBkb2VzIG5vdCBwcm9jZXNzIHJlcGxhY2VtZW50ICBzdHJpbmdzCisgICAgICAgZm9yICBlc2NhcGUgIHNlcXVlbmNlcy4gSW4gVVRGIG1vZGUsIGEgcmVwbGFjZW1lbnQgc3RyaW5nIGlzIGNoZWNrZWQgdG8KKyAgICAgICBzZWUgaWYgaXQgaXMgYSB2YWxpZCBVVEYtOCBzdHJpbmcuIElmIHNvLCBpdCBpcyBjb3JyZWN0bHkgY29udmVydGVkICB0bworICAgICAgIGEgIFVURiAgc3RyaW5nIG9mIHRoZSBhcHByb3ByaWF0ZSBjb2RlIHVuaXQgd2lkdGguIElmIGl0IGlzIG5vdCBhIHZhbGlkCisgICAgICAgVVRGLTggc3RyaW5nLCB0aGUgaW5kaXZpZHVhbCBjb2RlIHVuaXRzIGFyZSBjb3BpZWQgZGlyZWN0bHkuIFRoaXMgIHByby0KKyAgICAgICB2aWRlcyBhIG1lYW5zIG9mIHBhc3NpbmcgYW4gaW52YWxpZCBVVEYtOCBzdHJpbmcgZm9yIHRlc3RpbmcgcHVycG9zZXMuCisKKyAgICAgICBUaGUgIGZvbGxvd2luZyBtb2RpZmllcnMgc2V0IG9wdGlvbnMgKGluIGFkZGl0aW9uYWwgdG8gdGhlIG5vcm1hbCBtYXRjaAorICAgICAgIG9wdGlvbnMpIGZvciBwY3JlMl9zdWJzdGl0dXRlKCk6CisKKyAgICAgICAgIGdsb2JhbCAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUJTVElUVVRFX0dMT0JBTAorICAgICAgICAgc3Vic3RpdHV0ZV9leHRlbmRlZCAgICAgICAgIFBDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUQKKyAgICAgICAgIHN1YnN0aXR1dGVfb3ZlcmZsb3dfbGVuZ3RoICBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSAorICAgICAgICAgc3Vic3RpdHV0ZV91bmtub3duX3Vuc2V0ICAgIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVAorICAgICAgICAgc3Vic3RpdHV0ZV91bnNldF9lbXB0eSAgICAgIFBDUkUyX1NVQlNUSVRVVEVfVU5TRVRfRU1QVFkKKworCisgICAgICAgQWZ0ZXIgYSBzdWNjZXNzZnVsIHN1YnN0aXR1dGlvbiwgdGhlIG1vZGlmaWVkIHN0cmluZyAgaXMgIG91dHB1dCwgIHByZS0KKyAgICAgICBjZWRlZCAgYnkgdGhlIG51bWJlciBvZiByZXBsYWNlbWVudHMuIFRoaXMgbWF5IGJlIHplcm8gaWYgdGhlcmUgd2VyZSBubworICAgICAgIG1hdGNoZXMuIEhlcmUgaXMgYSBzaW1wbGUgZXhhbXBsZSBvZiBhIHN1YnN0aXR1dGlvbiB0ZXN0OgorCisgICAgICAgICAvYWJjL3JlcGxhY2U9eHh4CisgICAgICAgICAgICAgPWFiYz1hYmM9CisgICAgICAgICAgMTogPXh4eD1hYmM9CisgICAgICAgICAgICAgPWFiYz1hYmM9XD1nbG9iYWwKKyAgICAgICAgICAyOiA9eHh4PXh4eD0KKworICAgICAgIFN1YmplY3QgYW5kIHJlcGxhY2VtZW50IHN0cmluZ3Mgc2hvdWxkIGJlIGtlcHQgcmVsYXRpdmVseSBzaG9ydCAgKGZld2VyCisgICAgICAgdGhhbiAgMjU2IGNoYXJhY3RlcnMpIGZvciBzdWJzdGl0dXRpb24gdGVzdHMsIGFzIGZpeGVkLXNpemUgYnVmZmVycyBhcmUKKyAgICAgICB1c2VkLiBUbyBtYWtlIGl0IGVhc3kgdG8gdGVzdCBmb3IgYnVmZmVyIG92ZXJmbG93LCBpZiAgdGhlICByZXBsYWNlbWVudAorICAgICAgIHN0cmluZyAgc3RhcnRzICB3aXRoIGEgbnVtYmVyIGluIHNxdWFyZSBicmFja2V0cywgdGhhdCBudW1iZXIgaXMgcGFzc2VkCisgICAgICAgdG8gcGNyZTJfc3Vic3RpdHV0ZSgpIGFzIHRoZSAgc2l6ZSAgb2YgIHRoZSAgb3V0cHV0ICBidWZmZXIsICB3aXRoICB0aGUKKyAgICAgICByZXBsYWNlbWVudCAgc3RyaW5nICBzdGFydGluZyBhdCB0aGUgbmV4dCBjaGFyYWN0ZXIuIEhlcmUgaXMgYW4gZXhhbXBsZQorICAgICAgIHRoYXQgdGVzdHMgdGhlIGVkZ2UgY2FzZToKKworICAgICAgICAgL2FiYy8KKyAgICAgICAgICAgICAxMjNhYmMxMjNcPXJlcGxhY2U9WzEwXVhZWgorICAgICAgICAgIDE6IDEyM1hZWjEyMworICAgICAgICAgICAgIDEyM2FiYzEyM1w9cmVwbGFjZT1bOV1YWVoKKyAgICAgICAgIEZhaWxlZDogZXJyb3IgLTQ3OiBubyBtb3JlIG1lbW9yeQorCisgICAgICAgVGhlICAgZGVmYXVsdCAgIGFjdGlvbiAgIG9mICAgIHBjcmUyX3N1YnN0aXR1dGUoKSAgICBpcyAgICB0byAgICByZXR1cm4KKyAgICAgICBQQ1JFMl9FUlJPUl9OT01FTU9SWSAgd2hlbiAgdGhlIG91dHB1dCBidWZmZXIgaXMgdG9vIHNtYWxsLiBIb3dldmVyLCBpZgorICAgICAgIHRoZSBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCBvcHRpb24gaXMgc2V0IChieSB1c2luZyAgdGhlICBzdWItCisgICAgICAgc3RpdHV0ZV9vdmVyZmxvd19sZW5ndGggIG1vZGlmaWVyKSwgIHBjcmUyX3N1YnN0aXR1dGUoKSBjb250aW51ZXMgdG8gZ28KKyAgICAgICB0aHJvdWdoIHRoZSBtb3Rpb25zIG9mIG1hdGNoaW5nIGFuZCBzdWJzdGl0dXRpbmcsIGluIG9yZGVyICB0byAgY29tcHV0ZQorICAgICAgIHRoZSBzaXplIG9mIGJ1ZmZlciB0aGF0IGlzIHJlcXVpcmVkLiBXaGVuIHRoaXMgaGFwcGVucywgcGNyZTJ0ZXN0IHNob3dzCisgICAgICAgdGhlIHJlcXVpcmVkIGJ1ZmZlciBsZW5ndGggKHdoaWNoIGluY2x1ZGVzIHNwYWNlIGZvciB0aGUgdHJhaWxpbmcgemVybykKKyAgICAgICBhcyBwYXJ0IG9mIHRoZSBlcnJvciBtZXNzYWdlLiBGb3IgZXhhbXBsZToKKworICAgICAgICAgL2FiYy9zdWJzdGl0dXRlX292ZXJmbG93X2xlbmd0aAorICAgICAgICAgICAgIDEyM2FiYzEyM1w9cmVwbGFjZT1bOV1YWVoKKyAgICAgICAgIEZhaWxlZDogZXJyb3IgLTQ3OiBubyBtb3JlIG1lbW9yeTogMTAgY29kZSB1bml0cyBhcmUgbmVlZGVkCisKKyAgICAgICBBIHJlcGxhY2VtZW50IHN0cmluZyBpcyBpZ25vcmVkIHdpdGggUE9TSVggYW5kIERGQSBtYXRjaGluZy4gU3BlY2lmeWluZworICAgICAgIHBhcnRpYWwgbWF0Y2hpbmcgcHJvdm9rZXMgYW4gZXJyb3IgcmV0dXJuICAoImJhZCAgb3B0aW9uICB2YWx1ZSIpICBmcm9tCisgICAgICAgcGNyZTJfc3Vic3RpdHV0ZSgpLgorCisgICBTZXR0aW5nIHRoZSBKSVQgc3RhY2sgc2l6ZQorCisgICAgICAgVGhlICBqaXRzdGFjayBtb2RpZmllciBwcm92aWRlcyBhIHdheSBvZiBzZXR0aW5nIHRoZSBtYXhpbXVtIHN0YWNrIHNpemUKKyAgICAgICB0aGF0IGlzIHVzZWQgYnkgdGhlIGp1c3QtaW4tdGltZSBvcHRpbWl6YXRpb24gY29kZS4gSXQgIGlzICBpZ25vcmVkICBpZgorICAgICAgIEpJVCBvcHRpbWl6YXRpb24gaXMgbm90IGJlaW5nIHVzZWQuIFRoZSB2YWx1ZSBpcyBhIG51bWJlciBvZiBraWxvYnl0ZXMuCisgICAgICAgUHJvdmlkaW5nIGEgc3RhY2sgdGhhdCBpcyBsYXJnZXIgdGhhbiB0aGUgZGVmYXVsdCAzMksgaXMgbmVjZXNzYXJ5IG9ubHkKKyAgICAgICBmb3IgdmVyeSBjb21wbGljYXRlZCBwYXR0ZXJucy4KKworICAgU2V0dGluZyBtYXRjaCBhbmQgcmVjdXJzaW9uIGxpbWl0cworCisgICAgICAgVGhlICBtYXRjaF9saW1pdCBhbmQgcmVjdXJzaW9uX2xpbWl0IG1vZGlmaWVycyBzZXQgdGhlIGFwcHJvcHJpYXRlIGxpbS0KKyAgICAgICBpdHMgaW4gdGhlIG1hdGNoIGNvbnRleHQuIFRoZXNlIHZhbHVlcyBhcmUgaWdub3JlZCB3aGVuIHRoZSBmaW5kX2xpbWl0cworICAgICAgIG1vZGlmaWVyIGlzIHNwZWNpZmllZC4KKworICAgRmluZGluZyBtaW5pbXVtIGxpbWl0cworCisgICAgICAgSWYgIHRoZSAgZmluZF9saW1pdHMgbW9kaWZpZXIgaXMgcHJlc2VudCwgcGNyZTJ0ZXN0IGNhbGxzIHBjcmUyX21hdGNoKCkKKyAgICAgICBzZXZlcmFsIHRpbWVzLCBzZXR0aW5nICBkaWZmZXJlbnQgIHZhbHVlcyAgaW4gIHRoZSAgbWF0Y2ggIGNvbnRleHQgIHZpYQorICAgICAgIHBjcmUyX3NldF9tYXRjaF9saW1pdCgpICBhbmQgcGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdCgpIHVudGlsIGl0IGZpbmRzCisgICAgICAgdGhlIG1pbmltdW0gdmFsdWVzIGZvciBlYWNoIHBhcmFtZXRlciB0aGF0IGFsbG93IHBjcmUyX21hdGNoKCkgdG8gIGNvbS0KKyAgICAgICBwbGV0ZSB3aXRob3V0IGVycm9yLgorCisgICAgICAgSWYgSklUIGlzIGJlaW5nIHVzZWQsIG9ubHkgdGhlIG1hdGNoIGxpbWl0IGlzIHJlbGV2YW50LiBJZiBERkEgbWF0Y2hpbmcKKyAgICAgICBpcyBiZWluZyB1c2VkLCBuZWl0aGVyIGxpbWl0IGlzIHJlbGV2YW50LCBhbmQgdGhpcyBtb2RpZmllciBpcyAgaWdub3JlZAorICAgICAgICh3aXRoIGEgd2FybmluZyBtZXNzYWdlKS4KKworICAgICAgIFRoZSAgbWF0Y2hfbGltaXQgbnVtYmVyIGlzIGEgbWVhc3VyZSBvZiB0aGUgYW1vdW50IG9mIGJhY2t0cmFja2luZyB0aGF0CisgICAgICAgdGFrZXMgcGxhY2UsIGFuZCBsZWFybmluZyB0aGUgbWluaW11bSB2YWx1ZSAgY2FuICBiZSAgaW5zdHJ1Y3RpdmUuICBGb3IKKyAgICAgICBtb3N0ICBzaW1wbGUgIG1hdGNoZXMsIHRoZSBudW1iZXIgaXMgcXVpdGUgc21hbGwsIGJ1dCBmb3IgcGF0dGVybnMgd2l0aAorICAgICAgIHZlcnkgbGFyZ2UgbnVtYmVycyBvZiBtYXRjaGluZyBwb3NzaWJpbGl0aWVzLCBpdCBjYW4gYmVjb21lIGxhcmdlICB2ZXJ5CisgICAgICAgcXVpY2tseSAgICB3aXRoICAgIGluY3JlYXNpbmcgICAgbGVuZ3RoICAgIG9mICAgc3ViamVjdCAgIHN0cmluZy4gICBUaGUKKyAgICAgICBtYXRjaF9saW1pdF9yZWN1cnNpb24gbnVtYmVyIGlzIGEgbWVhc3VyZSBvZiBob3cgIG11Y2ggIHN0YWNrICAob3IsICBpZgorICAgICAgIFBDUkUyICBpcyAgY29tcGlsZWQgd2l0aCBOT19SRUNVUlNFLCBob3cgbXVjaCBoZWFwKSBtZW1vcnkgaXMgbmVlZGVkIHRvCisgICAgICAgY29tcGxldGUgdGhlIG1hdGNoIGF0dGVtcHQuCisKKyAgIFNob3dpbmcgTUFSSyBuYW1lcworCisKKyAgICAgICBUaGUgbWFyayBtb2RpZmllciBjYXVzZXMgdGhlIG5hbWVzIGZyb20gYmFja3RyYWNraW5nIGNvbnRyb2wgdmVyYnMgdGhhdAorICAgICAgIGFyZSAgcmV0dXJuZWQgZnJvbSBjYWxscyB0byBwY3JlMl9tYXRjaCgpIHRvIGJlIGRpc3BsYXllZC4gSWYgYSBtYXJrIGlzCisgICAgICAgcmV0dXJuZWQgZm9yIGEgbWF0Y2gsIG5vbi1tYXRjaCwgb3IgcGFydGlhbCBtYXRjaCwgcGNyZTJ0ZXN0IHNob3dzICBpdC4KKyAgICAgICBGb3IgIGEgIG1hdGNoLCBpdCBpcyBvbiBhIGxpbmUgYnkgaXRzZWxmLCB0YWdnZWQgd2l0aCAiTUs6Ii4gT3RoZXJ3aXNlLAorICAgICAgIGl0IGlzIGFkZGVkIHRvIHRoZSBub24tbWF0Y2ggbWVzc2FnZS4KKworICAgU2hvd2luZyBtZW1vcnkgdXNhZ2UKKworICAgICAgIFRoZSBtZW1vcnkgbW9kaWZpZXIgY2F1c2VzIHBjcmUydGVzdCB0byBsb2cgYWxsIG1lbW9yeSAgYWxsb2NhdGlvbiAgYW5kCisgICAgICAgZnJlZWluZyBjYWxscyB0aGF0IG9jY3VyIGR1cmluZyBhIG1hdGNoIG9wZXJhdGlvbi4KKworICAgU2V0dGluZyBhIHN0YXJ0aW5nIG9mZnNldAorCisgICAgICAgVGhlICBvZmZzZXQgIG1vZGlmaWVyICBzZXRzICBhbiAgb2Zmc2V0ICBpbiB0aGUgc3ViamVjdCBzdHJpbmcgYXQgd2hpY2gKKyAgICAgICBtYXRjaGluZyBzdGFydHMuIEl0cyB2YWx1ZSBpcyBhIG51bWJlciBvZiBjb2RlIHVuaXRzLCBub3QgY2hhcmFjdGVycy4KKworICAgU2V0dGluZyBhbiBvZmZzZXQgbGltaXQKKworICAgICAgIFRoZSBvZmZzZXRfbGltaXQgbW9kaWZpZXIgc2V0cyBhIGxpbWl0IGZvciAgdW5hbmNob3JlZCAgbWF0Y2hlcy4gIElmICBhCisgICAgICAgbWF0Y2ggY2Fubm90IGJlIGZvdW5kIHN0YXJ0aW5nIGF0IG9yIGJlZm9yZSB0aGlzIG9mZnNldCBpbiB0aGUgc3ViamVjdCwKKyAgICAgICBhICJubyBtYXRjaCIgcmV0dXJuIGlzIGdpdmVuLiBUaGUgZGF0YSB2YWx1ZSBpcyBhIG51bWJlciBvZiBjb2RlIHVuaXRzLAorICAgICAgIG5vdCAgY2hhcmFjdGVycy4gV2hlbiB0aGlzIG1vZGlmaWVyIGlzIHVzZWQsIHRoZSB1c2Vfb2Zmc2V0X2xpbWl0IG1vZGktCisgICAgICAgZmllciBtdXN0IGhhdmUgYmVlbiBzZXQgZm9yIHRoZSBwYXR0ZXJuOyBpZiBub3QsIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4KKworICAgU2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IHZlY3RvcgorCisgICAgICAgVGhlIG92ZWN0b3IgbW9kaWZpZXIgYXBwbGllcyBvbmx5IHRvICB0aGUgIHN1YmplY3QgIGxpbmUgIGluICB3aGljaCAgaXQKKyAgICAgICBhcHBlYXJzLCAgdGhvdWdoICBvZiAgY291cnNlICBpdCBjYW4gYWxzbyBiZSB1c2VkIHRvIHNldCBhIGRlZmF1bHQgaW4gYQorICAgICAgICNzdWJqZWN0IGNvbW1hbmQuIEl0IHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIHBhaXJzIG9mIG9mZnNldHMgdGhhdCAgYXJlCisgICAgICAgYXZhaWxhYmxlIGZvciBzdG9yaW5nIG1hdGNoaW5nIGluZm9ybWF0aW9uLiBUaGUgZGVmYXVsdCBpcyAxNS4KKworICAgICAgIEEgIHZhbHVlIG9mIHplcm8gaXMgdXNlZnVsIHdoZW4gdGVzdGluZyB0aGUgUE9TSVggQVBJIGJlY2F1c2UgaXQgY2F1c2VzCisgICAgICAgcmVnZXhlYygpIHRvIGJlIGNhbGxlZCB3aXRoIGEgTlVMTCBjYXB0dXJlIHZlY3Rvci4gV2hlbiBub3QgdGVzdGluZyB0aGUKKyAgICAgICBQT1NJWCAgQVBJLCAgYSAgdmFsdWUgIG9mICB6ZXJvICBpcyB1c2VkIHRvIGNhdXNlIHBjcmUyX21hdGNoX2RhdGFfY3JlLQorICAgICAgIGF0ZV9mcm9tX3BhdHRlcm4oKSB0byBiZSBjYWxsZWQsIGluIG9yZGVyIHRvIGNyZWF0ZSBhICBtYXRjaCAgYmxvY2sgIG9mCisgICAgICAgZXhhY3RseSB0aGUgcmlnaHQgc2l6ZSBmb3IgdGhlIHBhdHRlcm4uIChJdCBpcyBub3QgcG9zc2libGUgdG8gY3JlYXRlIGEKKyAgICAgICBtYXRjaCBibG9jayB3aXRoIGEgemVyby1sZW5ndGggb3ZlY3RvcjsgdGhlcmUgaXMgYWx3YXlzICBhdCAgbGVhc3QgIG9uZQorICAgICAgIHBhaXIgb2Ygb2Zmc2V0cy4pCisKKyAgIFBhc3NpbmcgdGhlIHN1YmplY3QgYXMgemVyby10ZXJtaW5hdGVkCisKKyAgICAgICBCeSBkZWZhdWx0LCB0aGUgc3ViamVjdCBzdHJpbmcgaXMgcGFzc2VkIHRvIGEgbmF0aXZlIEFQSSBtYXRjaGluZyBmdW5jLQorICAgICAgIHRpb24gd2l0aCBpdHMgY29ycmVjdCBsZW5ndGguIEluIG9yZGVyIHRvIHRlc3QgdGhlIGZhY2lsaXR5IGZvciBwYXNzaW5nCisgICAgICAgYSAgemVyby10ZXJtaW5hdGVkICBzdHJpbmcsIHRoZSB6ZXJvX3Rlcm1pbmF0ZSBtb2RpZmllciBpcyBwcm92aWRlZC4gSXQKKyAgICAgICBjYXVzZXMgdGhlIGxlbmd0aCB0byBiZSBwYXNzZWQgYXMgUENSRTJfWkVST19URVJNSU5BVEVELiAoV2hlbiBtYXRjaGluZworICAgICAgIHZpYSAgdGhlICBQT1NJWCAgaW50ZXJmYWNlLCB0aGlzIG1vZGlmaWVyIGhhcyBubyBlZmZlY3QsIGFzIHRoZXJlIGlzIG5vCisgICAgICAgZmFjaWxpdHkgZm9yIHBhc3NpbmcgYSBsZW5ndGguKQorCisgICAgICAgV2hlbiB0ZXN0aW5nIHBjcmUyX3N1YnN0aXR1dGUoKSwgdGhpcyBtb2RpZmllciBhbHNvIGhhcyB0aGUgIGVmZmVjdCAgb2YKKyAgICAgICBwYXNzaW5nIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgYXMgemVyby10ZXJtaW5hdGVkLgorCisgICBQYXNzaW5nIGEgTlVMTCBjb250ZXh0CisKKyAgICAgICBOb3JtYWxseSwgICBwY3JlMnRlc3QgICBwYXNzZXMgICBhICAgY29udGV4dCAgYmxvY2sgIHRvICBwY3JlMl9tYXRjaCgpLAorICAgICAgIHBjcmUyX2RmYV9tYXRjaCgpIG9yIHBjcmUyX2ppdF9tYXRjaCgpLiBJZiB0aGUgbnVsbF9jb250ZXh0IG1vZGlmaWVyIGlzCisgICAgICAgc2V0LCAgaG93ZXZlciwgIE5VTEwgIGlzICBwYXNzZWQuIFRoaXMgaXMgZm9yIHRlc3RpbmcgdGhhdCB0aGUgbWF0Y2hpbmcKKyAgICAgICBmdW5jdGlvbnMgYmVoYXZlIGNvcnJlY3RseSBpbiB0aGlzIGNhc2UgKHRoZXkgdXNlIGRlZmF1bHQgdmFsdWVzKS4gVGhpcworICAgICAgIG1vZGlmaWVyICBjYW5ub3QgIGJlIHVzZWQgd2l0aCB0aGUgZmluZF9saW1pdHMgbW9kaWZpZXIgb3Igd2hlbiB0ZXN0aW5nCisgICAgICAgdGhlIHN1YnN0aXR1dGlvbiBmdW5jdGlvbi4KKworCitUSEUgQUxURVJOQVRJVkUgTUFUQ0hJTkcgRlVOQ1RJT04KKworICAgICAgIEJ5IGRlZmF1bHQsICBwY3JlMnRlc3QgIHVzZXMgIHRoZSAgc3RhbmRhcmQgIFBDUkUyICBtYXRjaGluZyAgZnVuY3Rpb24sCisgICAgICAgcGNyZTJfbWF0Y2goKSB0byBtYXRjaCBlYWNoIHN1YmplY3QgbGluZS4gUENSRTIgYWxzbyBzdXBwb3J0cyBhbiBhbHRlci0KKyAgICAgICBuYXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24sIHBjcmUyX2RmYV9tYXRjaCgpLCB3aGljaCBvcGVyYXRlcyBpbiAgYSAgZGlmLQorICAgICAgIGZlcmVudCAgd2F5LCBhbmQgaGFzIHNvbWUgcmVzdHJpY3Rpb25zLiBUaGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvCisgICAgICAgZnVuY3Rpb25zIGFyZSBkZXNjcmliZWQgaW4gdGhlIHBjcmUybWF0Y2hpbmcgZG9jdW1lbnRhdGlvbi4KKworICAgICAgIElmIHRoZSBkZmEgbW9kaWZpZXIgaXMgc2V0LCB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24gaXMgIHVzZWQuCisgICAgICAgVGhpcyAgZnVuY3Rpb24gIGZpbmRzIGFsbCBwb3NzaWJsZSBtYXRjaGVzIGF0IGEgZ2l2ZW4gcG9pbnQgaW4gdGhlIHN1Yi0KKyAgICAgICBqZWN0LiBJZiwgaG93ZXZlciwgdGhlIGRmYV9zaG9ydGVzdCBtb2RpZmllciBpcyBzZXQsICBwcm9jZXNzaW5nICBzdG9wcworICAgICAgIGFmdGVyICB0aGUgIGZpcnN0ICBtYXRjaCBpcyBmb3VuZC4gVGhpcyBpcyBhbHdheXMgdGhlIHNob3J0ZXN0IHBvc3NpYmxlCisgICAgICAgbWF0Y2guCisKKworREVGQVVMVCBPVVRQVVQgRlJPTSBwY3JlMnRlc3QKKworICAgICAgIFRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIG91dHB1dCB3aGVuIHRoZSAgbm9ybWFsICBtYXRjaGluZyAgZnVuY3Rpb24sCisgICAgICAgcGNyZTJfbWF0Y2goKSwgaXMgYmVpbmcgdXNlZC4KKworICAgICAgIFdoZW4gIGEgIG1hdGNoICBzdWNjZWVkcywgIHBjcmUydGVzdCAgb3V0cHV0cyB0aGUgbGlzdCBvZiBjYXB0dXJlZCBzdWItCisgICAgICAgc3RyaW5ncywgc3RhcnRpbmcgd2l0aCBudW1iZXIgMCBmb3IgdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQgIHRoZSAgd2hvbGUKKyAgICAgICBwYXR0ZXJuLiAgICBPdGhlcndpc2UsICBpdCAgb3V0cHV0cyAgIk5vICBtYXRjaCIgIHdoZW4gIHRoZSAgcmV0dXJuICBpcworICAgICAgIFBDUkUyX0VSUk9SX05PTUFUQ0gsIG9yICJQYXJ0aWFsICBtYXRjaDoiICBmb2xsb3dlZCAgYnkgIHRoZSAgcGFydGlhbGx5CisgICAgICAgbWF0Y2hpbmcgIHN1YnN0cmluZyAgd2hlbiB0aGUgcmV0dXJuIGlzIFBDUkUyX0VSUk9SX1BBUlRJQUwuIChOb3RlIHRoYXQKKyAgICAgICB0aGlzIGlzIHRoZSBlbnRpcmUgc3Vic3RyaW5nIHRoYXQgIHdhcyAgaW5zcGVjdGVkICBkdXJpbmcgIHRoZSAgcGFydGlhbAorICAgICAgIG1hdGNoOyAgaXQgIG1heSAgaW5jbHVkZSAgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGFjdHVhbCBtYXRjaCBzdGFydCBpZiBhCisgICAgICAgbG9va2JlaGluZCBhc3NlcnRpb24sIFxLLCBcYiwgb3IgXEIgd2FzIGludm9sdmVkLikKKworICAgICAgIEZvciBhbnkgb3RoZXIgcmV0dXJuLCBwY3JlMnRlc3Qgb3V0cHV0cyB0aGUgUENSRTIgbmVnYXRpdmUgZXJyb3IgbnVtYmVyCisgICAgICAgYW5kICBhICBzaG9ydCAgZGVzY3JpcHRpdmUgIHBocmFzZS4gSWYgdGhlIGVycm9yIGlzIGEgZmFpbGVkIFVURiBzdHJpbmcKKyAgICAgICBjaGVjaywgdGhlIGNvZGUgdW5pdCBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoZSAgZmFpbGluZyAgY2hhcmFjdGVyICBpcworICAgICAgIGFsc28gb3V0cHV0LiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYW4gaW50ZXJhY3RpdmUgcGNyZTJ0ZXN0IHJ1bi4KKworICAgICAgICAgJCBwY3JlMnRlc3QKKyAgICAgICAgIFBDUkUyIHZlcnNpb24gOS4wMCAyMDE0LTA1LTEwCisKKyAgICAgICAgICAgcmU+IC9eYWJjKFxkKykvCisgICAgICAgICBkYXRhPiBhYmMxMjMKKyAgICAgICAgICAwOiBhYmMxMjMKKyAgICAgICAgICAxOiAxMjMKKyAgICAgICAgIGRhdGE+IHh5egorICAgICAgICAgTm8gbWF0Y2gKKworICAgICAgIFVuc2V0IGNhcHR1cmluZyBzdWJzdHJpbmdzIHRoYXQgYXJlIG5vdCBmb2xsb3dlZCBieSBvbmUgdGhhdCBpcyBzZXQgYXJlCisgICAgICAgbm90IHNob3duIGJ5IHBjcmUydGVzdCB1bmxlc3MgdGhlIGFsbGNhcHR1cmVzIG1vZGlmaWVyIGlzIHNwZWNpZmllZC4gSW4KKyAgICAgICB0aGUgZm9sbG93aW5nIGV4YW1wbGUsIHRoZXJlIGFyZSB0d28gY2FwdHVyaW5nIHN1YnN0cmluZ3MsIGJ1dCB3aGVuIHRoZQorICAgICAgIGZpcnN0IGRhdGEgbGluZSBpcyBtYXRjaGVkLCB0aGUgc2Vjb25kLCB1bnNldCBzdWJzdHJpbmcgaXMgIG5vdCAgc2hvd24uCisgICAgICAgQW4gICJpbnRlcm5hbCIgdW5zZXQgc3Vic3RyaW5nIGlzIHNob3duIGFzICI8dW5zZXQ+IiwgYXMgZm9yIHRoZSBzZWNvbmQKKyAgICAgICBkYXRhIGxpbmUuCisKKyAgICAgICAgICAgcmU+IC8oYSl8KGIpLworICAgICAgICAgZGF0YT4gYQorICAgICAgICAgIDA6IGEKKyAgICAgICAgICAxOiBhCisgICAgICAgICBkYXRhPiBiCisgICAgICAgICAgMDogYgorICAgICAgICAgIDE6IDx1bnNldD4KKyAgICAgICAgICAyOiBiCisKKyAgICAgICBJZiB0aGUgc3RyaW5ncyBjb250YWluIGFueSBub24tcHJpbnRpbmcgY2hhcmFjdGVycywgdGhleSBhcmUgb3V0cHV0ICBhcworICAgICAgIFx4aGggIGVzY2FwZXMgIGlmICB0aGUgIHZhbHVlIGlzIGxlc3MgdGhhbiAyNTYgYW5kIFVURiBtb2RlIGlzIG5vdCBzZXQuCisgICAgICAgT3RoZXJ3aXNlIHRoZXkgYXJlIG91dHB1dCBhcyBceHtoaC4uLn0gZXNjYXBlcy4gU2VlIGJlbG93IGZvciB0aGUgZGVmaS0KKyAgICAgICBuaXRpb24gIG9mICBub24tcHJpbnRpbmcgY2hhcmFjdGVycy4gSWYgdGhlIC9hZnRlcnRleHQgbW9kaWZpZXIgaXMgc2V0LAorICAgICAgIHRoZSBvdXRwdXQgZm9yIHN1YnN0cmluZyAwIGlzIGZvbGxvd2VkIGJ5IHRoZSB0aGUgcmVzdCBvZiAgdGhlICBzdWJqZWN0CisgICAgICAgc3RyaW5nLCBpZGVudGlmaWVkIGJ5ICIwKyIgbGlrZSB0aGlzOgorCisgICAgICAgICAgIHJlPiAvY2F0L2FmdGVydGV4dAorICAgICAgICAgZGF0YT4gY2F0YXJhY3QKKyAgICAgICAgICAwOiBjYXQKKyAgICAgICAgICAwKyBhcmFjdAorCisgICAgICAgSWYgIGdsb2JhbCAgbWF0Y2hpbmcgIGlzICByZXF1ZXN0ZWQsIHRoZSByZXN1bHRzIG9mIHN1Y2Nlc3NpdmUgbWF0Y2hpbmcKKyAgICAgICBhdHRlbXB0cyBhcmUgb3V0cHV0IGluIHNlcXVlbmNlLCBsaWtlIHRoaXM6CisKKyAgICAgICAgICAgcmU+IC9cQmkoXHdcdykvZworICAgICAgICAgZGF0YT4gTWlzc2lzc2lwcGkKKyAgICAgICAgICAwOiBpc3MKKyAgICAgICAgICAxOiBzcworICAgICAgICAgIDA6IGlzcworICAgICAgICAgIDE6IHNzCisgICAgICAgICAgMDogaXBwCisgICAgICAgICAgMTogcHAKKworICAgICAgICJObyBtYXRjaCIgaXMgb3V0cHV0IG9ubHkgaWYgdGhlIGZpcnN0IG1hdGNoIGF0dGVtcHQgZmFpbHMuIEhlcmUgaXMgIGFuCisgICAgICAgZXhhbXBsZSAgb2YgIGEgIGZhaWx1cmUgIG1lc3NhZ2UgKHRoZSBvZmZzZXQgNCB0aGF0IGlzIHNwZWNpZmllZCBieSB0aGUKKyAgICAgICBvZmZzZXQgbW9kaWZpZXIgaXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IHN0cmluZyk6CisKKyAgICAgICAgICAgcmU+IC94eXovCisgICAgICAgICBkYXRhPiB4eXpcPW9mZnNldD00CisgICAgICAgICBFcnJvciAtMjQgKGJhZCBvZmZzZXQgdmFsdWUpCisKKyAgICAgICBOb3RlIHRoYXQgd2hlcmVhcyBwYXR0ZXJucyBjYW4gYmUgY29udGludWVkIG92ZXIgc2V2ZXJhbCBsaW5lcyAoYSBwbGFpbgorICAgICAgICI+IiAgcHJvbXB0ICBpcyB1c2VkIGZvciBjb250aW51YXRpb25zKSwgc3ViamVjdCBsaW5lcyBtYXkgbm90LiBIb3dldmVyCisgICAgICAgbmV3bGluZXMgY2FuIGJlIGluY2x1ZGVkIGluIGEgc3ViamVjdCBieSBtZWFucyBvZiB0aGUgXG4gZXNjYXBlIChvciBcciwKKyAgICAgICBcclxuLCBldGMuLCBkZXBlbmRpbmcgb24gdGhlIG5ld2xpbmUgc2VxdWVuY2Ugc2V0dGluZykuCisKKworT1VUUFVUIEZST00gVEhFIEFMVEVSTkFUSVZFIE1BVENISU5HIEZVTkNUSU9OCisKKyAgICAgICBXaGVuIHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbiwgcGNyZTJfZGZhX21hdGNoKCksIGlzIHVzZWQsIHRoZQorICAgICAgIG91dHB1dCBjb25zaXN0cyBvZiBhIGxpc3Qgb2YgYWxsIHRoZSBtYXRjaGVzIHRoYXQgc3RhcnQgIGF0ICB0aGUgIGZpcnN0CisgICAgICAgcG9pbnQgaW4gdGhlIHN1YmplY3Qgd2hlcmUgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG1hdGNoLiBGb3IgZXhhbXBsZToKKworICAgICAgICAgICByZT4gLyh0YW5nfHRhbmdlcmluZXx0YW4pLworICAgICAgICAgZGF0YT4geWVsbG93IHRhbmdlcmluZVw9ZGZhCisgICAgICAgICAgMDogdGFuZ2VyaW5lCisgICAgICAgICAgMTogdGFuZworICAgICAgICAgIDI6IHRhbgorCisgICAgICAgVXNpbmcgIHRoZSBub3JtYWwgbWF0Y2hpbmcgZnVuY3Rpb24gb24gdGhpcyBkYXRhIGZpbmRzIG9ubHkgInRhbmciLiBUaGUKKyAgICAgICBsb25nZXN0IG1hdGNoaW5nIHN0cmluZyBpcyBhbHdheXMgIGdpdmVuICBmaXJzdCAgKGFuZCAgbnVtYmVyZWQgIHplcm8pLgorICAgICAgIEFmdGVyICBhICBQQ1JFMl9FUlJPUl9QQVJUSUFMICByZXR1cm4sICB0aGUgb3V0cHV0IGlzICJQYXJ0aWFsIG1hdGNoOiIsCisgICAgICAgZm9sbG93ZWQgYnkgdGhlIHBhcnRpYWxseSBtYXRjaGluZyBzdWJzdHJpbmcuIE5vdGUgIHRoYXQgIHRoaXMgIGlzICB0aGUKKyAgICAgICBlbnRpcmUgIHN1YnN0cmluZyAgdGhhdCAgd2FzIGluc3BlY3RlZCBkdXJpbmcgdGhlIHBhcnRpYWwgbWF0Y2g7IGl0IG1heQorICAgICAgIGluY2x1ZGUgY2hhcmFjdGVycyBiZWZvcmUgdGhlIGFjdHVhbCBtYXRjaCBzdGFydCBpZiBhIGxvb2tiZWhpbmQgYXNzZXItCisgICAgICAgdGlvbiwgXGIsIG9yIFxCIHdhcyBpbnZvbHZlZC4gKFxLIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIERGQSBtYXRjaGluZy4pCisKKyAgICAgICBJZiBnbG9iYWwgbWF0Y2hpbmcgaXMgcmVxdWVzdGVkLCB0aGUgc2VhcmNoIGZvciBmdXJ0aGVyIG1hdGNoZXMgcmVzdW1lcworICAgICAgIGF0IHRoZSBlbmQgb2YgdGhlIGxvbmdlc3QgbWF0Y2guIEZvciBleGFtcGxlOgorCisgICAgICAgICAgIHJlPiAvKHRhbmd8dGFuZ2VyaW5lfHRhbikvZworICAgICAgICAgZGF0YT4geWVsbG93IHRhbmdlcmluZSBhbmQgdGFuZ3kgc3VsdGFuYVw9ZGZhCisgICAgICAgICAgMDogdGFuZ2VyaW5lCisgICAgICAgICAgMTogdGFuZworICAgICAgICAgIDI6IHRhbgorICAgICAgICAgIDA6IHRhbmcKKyAgICAgICAgICAxOiB0YW4KKyAgICAgICAgICAwOiB0YW4KKworICAgICAgIFRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0ICBzdWJzdHJpbmcgIGNhcHR1cmUsCisgICAgICAgc28gIHRoZSAgbW9kaWZpZXJzICB0aGF0IGFyZSBjb25jZXJuZWQgd2l0aCBjYXB0dXJlZCBzdWJzdHJpbmdzIGFyZSBub3QKKyAgICAgICByZWxldmFudC4KKworCitSRVNUQVJUSU5HIEFGVEVSIEEgUEFSVElBTCBNQVRDSAorCisgICAgICAgV2hlbiB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24gaGFzIGdpdmVuICB0aGUgIFBDUkUyX0VSUk9SX1BBUi0KKyAgICAgICBUSUFMIHJldHVybiwgaW5kaWNhdGluZyB0aGF0IHRoZSBzdWJqZWN0IHBhcnRpYWxseSBtYXRjaGVkIHRoZSBwYXR0ZXJuLAorICAgICAgIHlvdSBjYW4gcmVzdGFydCB0aGUgbWF0Y2ggd2l0aCBhZGRpdGlvbmFsIHN1YmplY3QgZGF0YSBieSBtZWFucyBvZiAgdGhlCisgICAgICAgZGZhX3Jlc3RhcnQgbW9kaWZpZXIuIEZvciBleGFtcGxlOgorCisgICAgICAgICAgIHJlPiAvXlxkP1xkKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKVxkXGQkLworICAgICAgICAgZGF0YT4gMjNqYVw9UCxkZmEKKyAgICAgICAgIFBhcnRpYWwgbWF0Y2g6IDIzamEKKyAgICAgICAgIGRhdGE+IG4wNVw9ZGZhLGRmYV9yZXN0YXJ0CisgICAgICAgICAgMDogbjA1CisKKyAgICAgICBGb3IgIGZ1cnRoZXIgIGluZm9ybWF0aW9uICBhYm91dCBwYXJ0aWFsIG1hdGNoaW5nLCBzZWUgdGhlIHBjcmUycGFydGlhbAorICAgICAgIGRvY3VtZW50YXRpb24uCisKKworQ0FMTE9VVFMKKworICAgICAgIElmIHRoZSBwYXR0ZXJuIGNvbnRhaW5zIGFueSBjYWxsb3V0IHJlcXVlc3RzLCBwY3JlMnRlc3QncyBjYWxsb3V0IGZ1bmMtCisgICAgICAgdGlvbiAgaXMgY2FsbGVkIGR1cmluZyBtYXRjaGluZyB1bmxlc3MgY2FsbG91dF9ub25lIGlzIHNwZWNpZmllZC4gIFRoaXMKKyAgICAgICB3b3JrcyB3aXRoIGJvdGggbWF0Y2hpbmcgZnVuY3Rpb25zLgorCisgICAgICAgVGhlIGNhbGxvdXQgZnVuY3Rpb24gaW4gcGNyZTJ0ZXN0IHJldHVybnMgemVybyAoY2Fycnkgb24gIG1hdGNoaW5nKSAgYnkKKyAgICAgICBkZWZhdWx0LCAgYnV0IHlvdSBjYW4gdXNlIGEgY2FsbG91dF9mYWlsIG1vZGlmaWVyIGluIGEgc3ViamVjdCBsaW5lIChhcworICAgICAgIGRlc2NyaWJlZCBhYm92ZSkgdG8gY2hhbmdlIHRoaXMgYW5kIG90aGVyIHBhcmFtZXRlcnMgb2YgdGhlIGNhbGxvdXQuCisKKyAgICAgICBJbnNlcnRpbmcgY2FsbG91dHMgY2FuIGJlIGhlbHBmdWwgd2hlbiB1c2luZyBwY3JlMnRlc3QgdG8gY2hlY2sgY29tcGxpLQorICAgICAgIGNhdGVkICByZWd1bGFyIGV4cHJlc3Npb25zLiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCBjYWxsb3V0cywgc2VlCisgICAgICAgdGhlIHBjcmUyY2FsbG91dCBkb2N1bWVudGF0aW9uLgorCisgICAgICAgVGhlIG91dHB1dCBmb3IgY2FsbG91dHMgd2l0aCBudW1lcmljYWwgYXJndW1lbnRzIGFuZCB0aG9zZSB3aXRoICBzdHJpbmcKKyAgICAgICBhcmd1bWVudHMgaXMgc2xpZ2h0bHkgZGlmZmVyZW50LgorCisgICBDYWxsb3V0cyB3aXRoIG51bWVyaWNhbCBhcmd1bWVudHMKKworICAgICAgIEJ5IGRlZmF1bHQsIHRoZSBjYWxsb3V0IGZ1bmN0aW9uIGRpc3BsYXlzIHRoZSBjYWxsb3V0IG51bWJlciwgdGhlIHN0YXJ0CisgICAgICAgYW5kIGN1cnJlbnQgcG9zaXRpb25zIGluIHRoZSBzdWJqZWN0IHRleHQgYXQgdGhlIGNhbGxvdXQgdGltZSwgYW5kICB0aGUKKyAgICAgICBuZXh0IHBhdHRlcm4gaXRlbSB0byBiZSB0ZXN0ZWQuIEZvciBleGFtcGxlOgorCisgICAgICAgICAtLS0+cHFyYWJjZGVmCisgICAgICAgICAgIDAgICAgXiAgXiAgICAgXGQKKworICAgICAgIFRoaXMgIG91dHB1dCAgaW5kaWNhdGVzICB0aGF0ICBjYWxsb3V0ICBudW1iZXIgIDAgIG9jY3VycmVkIGZvciBhIG1hdGNoCisgICAgICAgYXR0ZW1wdCBzdGFydGluZyBhdCB0aGUgZm91cnRoIGNoYXJhY3RlciBvZiB0aGUgIHN1YmplY3QgIHN0cmluZywgIHdoZW4KKyAgICAgICB0aGUgIHBvaW50ZXIgIHdhcyAgYXQgIHRoZSBzZXZlbnRoIGNoYXJhY3RlciwgYW5kIHdoZW4gdGhlIG5leHQgcGF0dGVybgorICAgICAgIGl0ZW0gd2FzIFxkLiBKdXN0IG9uZSBjaXJjdW1mbGV4IGlzIG91dHB1dCBpZiAgdGhlICBzdGFydCAgYW5kICBjdXJyZW50CisgICAgICAgcG9zaXRpb25zIGFyZSB0aGUgc2FtZS4KKworICAgICAgIENhbGxvdXRzIG51bWJlcmVkIDI1NSBhcmUgYXNzdW1lZCB0byBiZSBhdXRvbWF0aWMgY2FsbG91dHMsIGluc2VydGVkIGFzCisgICAgICAgYSByZXN1bHQgb2YgdGhlIC9hdXRvX2NhbGxvdXQgcGF0dGVybiBtb2RpZmllci4gSW4gdGhpcyAgY2FzZSwgIGluc3RlYWQKKyAgICAgICBvZiBzaG93aW5nIHRoZSBjYWxsb3V0IG51bWJlciwgdGhlIG9mZnNldCBpbiB0aGUgcGF0dGVybiwgcHJlY2VkZWQgYnkgYQorICAgICAgIHBsdXMsIGlzIG91dHB1dC4gRm9yIGV4YW1wbGU6CisKKyAgICAgICAgICAgcmU+IC9cZD9bQS1FXVwqL2F1dG9fY2FsbG91dAorICAgICAgICAgZGF0YT4gRSoKKyAgICAgICAgIC0tLT5FKgorICAgICAgICAgICswIF4gICAgICBcZD8KKyAgICAgICAgICArMyBeICAgICAgW0EtRV0KKyAgICAgICAgICArOCBeXiAgICAgXCoKKyAgICAgICAgICsxMCBeIF4KKyAgICAgICAgICAwOiBFKgorCisgICAgICAgSWYgYSBwYXR0ZXJuIGNvbnRhaW5zICgqTUFSSykgaXRlbXMsIGFuIGFkZGl0aW9uYWwgbGluZSBpcyBvdXRwdXQgd2hlbi0KKyAgICAgICBldmVyICBhICBjaGFuZ2UgIG9mICBsYXRlc3QgbWFyayBpcyBwYXNzZWQgdG8gdGhlIGNhbGxvdXQgZnVuY3Rpb24uIEZvcgorICAgICAgIGV4YW1wbGU6CisKKyAgICAgICAgICAgcmU+IC9hKCpNQVJLOlgpYmMvYXV0b19jYWxsb3V0CisgICAgICAgICBkYXRhPiBhYmMKKyAgICAgICAgIC0tLT5hYmMKKyAgICAgICAgICArMCBeICAgICAgIGEKKyAgICAgICAgICArMSBeXiAgICAgICgqTUFSSzpYKQorICAgICAgICAgKzEwIF5eICAgICAgYgorICAgICAgICAgTGF0ZXN0IE1hcms6IFgKKyAgICAgICAgICsxMSBeIF4gICAgIGMKKyAgICAgICAgICsxMiBeICBeCisgICAgICAgICAgMDogYWJjCisKKyAgICAgICBUaGUgbWFyayBjaGFuZ2VzIGJldHdlZW4gbWF0Y2hpbmcgImEiIGFuZCAiYiIsIGJ1dCBzdGF5cyB0aGUgIHNhbWUgIGZvcgorICAgICAgIHRoZSAgcmVzdCAgb2YgIHRoZSBtYXRjaCwgc28gbm90aGluZyBtb3JlIGlzIG91dHB1dC4gSWYsIGFzIGEgcmVzdWx0IG9mCisgICAgICAgYmFja3RyYWNraW5nLCB0aGUgbWFyayByZXZlcnRzIHRvIGJlaW5nIHVuc2V0LCB0aGUgIHRleHQgICI8dW5zZXQ+IiAgaXMKKyAgICAgICBvdXRwdXQuCisKKyAgIENhbGxvdXRzIHdpdGggc3RyaW5nIGFyZ3VtZW50cworCisgICAgICAgVGhlIG91dHB1dCBmb3IgYSBjYWxsb3V0IHdpdGggYSBzdHJpbmcgYXJndW1lbnQgaXMgc2ltaWxhciwgZXhjZXB0IHRoYXQKKyAgICAgICBpbnN0ZWFkIG9mIG91dHB1dHRpbmcgYSBjYWxsb3V0IG51bWJlciBiZWZvcmUgdGhlIHBvc2l0aW9uICBpbmRpY2F0b3JzLAorICAgICAgIHRoZSAgY2FsbG91dCAgc3RyaW5nICBhbmQgIGl0cyAgb2Zmc2V0IGluIHRoZSBwYXR0ZXJuIHN0cmluZyBhcmUgb3V0cHV0CisgICAgICAgYmVmb3JlIHRoZSByZWZsZWN0aW9uIG9mIHRoZSBzdWJqZWN0IHN0cmluZywgYW5kIHRoZSBzdWJqZWN0IHN0cmluZyAgaXMKKyAgICAgICByZWZsZWN0ZWQgZm9yIGVhY2ggY2FsbG91dC4gRm9yIGV4YW1wbGU6CisKKyAgICAgICAgICAgcmU+IC9eYWIoP0MnZmlyc3QnKWNkKD9DInNlY29uZCIpZWYvCisgICAgICAgICBkYXRhPiBhYmNkZWZnCisgICAgICAgICBDYWxsb3V0ICg3KTogJ2ZpcnN0JworICAgICAgICAgLS0tPmFiY2RlZmcKKyAgICAgICAgICAgICBeIF4gICAgICAgICBjCisgICAgICAgICBDYWxsb3V0ICgyMCk6ICJzZWNvbmQiCisgICAgICAgICAtLS0+YWJjZGVmZworICAgICAgICAgICAgIF4gICBeICAgICAgIGUKKyAgICAgICAgICAwOiBhYmNkZWYKKworCitOT04tUFJJTlRJTkcgQ0hBUkFDVEVSUworCisgICAgICAgV2hlbiBwY3JlMnRlc3QgaXMgb3V0cHV0dGluZyB0ZXh0IGluIHRoZSBjb21waWxlZCB2ZXJzaW9uIG9mIGEgcGF0dGVybiwKKyAgICAgICBieXRlcyBvdGhlciB0aGFuIDMyLTEyNiBhcmUgYWx3YXlzIHRyZWF0ZWQgYXMgIG5vbi1wcmludGluZyAgY2hhcmFjdGVycworICAgICAgIGFuZCBhcmUgdGhlcmVmb3JlIHNob3duIGFzIGhleCBlc2NhcGVzLgorCisgICAgICAgV2hlbiAgcGNyZTJ0ZXN0ICBpcyBvdXRwdXR0aW5nIHRleHQgdGhhdCBpcyBhIG1hdGNoZWQgcGFydCBvZiBhIHN1YmplY3QKKyAgICAgICBzdHJpbmcsIGl0IGJlaGF2ZXMgaW4gdGhlIHNhbWUgd2F5LCB1bmxlc3MgYSBkaWZmZXJlbnQgbG9jYWxlIGhhcyAgYmVlbgorICAgICAgIHNldCAgZm9yICB0aGUgIHBhdHRlcm4gICh1c2luZyB0aGUgL2xvY2FsZSBtb2RpZmllcikuIEluIHRoaXMgY2FzZSwgdGhlCisgICAgICAgaXNwcmludCgpIGZ1bmN0aW9uIGlzIHVzZWQgdG8gIGRpc3Rpbmd1aXNoICBwcmludGluZyAgYW5kICBub24tcHJpbnRpbmcKKyAgICAgICBjaGFyYWN0ZXJzLgorCisKK1NBVklORyBBTkQgUkVTVE9SSU5HIENPTVBJTEVEIFBBVFRFUk5TCisKKyAgICAgICBJdCAgaXMgIHBvc3NpYmxlICB0byAgc2F2ZSAgY29tcGlsZWQgcGF0dGVybnMgb24gZGlzYyBvciBlbHNld2hlcmUsIGFuZAorICAgICAgIHJlbG9hZCB0aGVtIGxhdGVyLCBzdWJqZWN0IHRvIGEgbnVtYmVyIG9mIHJlc3RyaWN0aW9ucy4gSklUIGRhdGEgY2Fubm90CisgICAgICAgYmUgIHNhdmVkLiAgVGhlIGhvc3Qgb24gd2hpY2ggdGhlIHBhdHRlcm5zIGFyZSByZWxvYWRlZCBtdXN0IGJlIHJ1bm5pbmcKKyAgICAgICB0aGUgc2FtZSB2ZXJzaW9uIG9mIFBDUkUyLCB3aXRoIHRoZSBzYW1lIGNvZGUgdW5pdCB3aWR0aCwgYW5kIG11c3QgYWxzbworICAgICAgIGhhdmUgIHRoZSAgc2FtZSAgZW5kaWFubmVzcywgIHBvaW50ZXIgd2lkdGggYW5kIFBDUkUyX1NJWkUgdHlwZS4gQmVmb3JlCisgICAgICAgY29tcGlsZWQgcGF0dGVybnMgY2FuIGJlIHNhdmVkIHRoZXkgbXVzdCBiZSBzZXJpYWxpemVkLCB0aGF0ICBpcywgIGNvbi0KKyAgICAgICB2ZXJ0ZWQgIHRvIGEgc3RyZWFtIG9mIGJ5dGVzLiBBIHNpbmdsZSBieXRlIHN0cmVhbSBtYXkgY29udGFpbiBhbnkgbnVtLQorICAgICAgIGJlciBvZiBjb21waWxlZCBwYXR0ZXJucywgYnV0IHRoZXkgbXVzdCAgYWxsICB1c2UgIHRoZSAgc2FtZSAgY2hhcmFjdGVyCisgICAgICAgdGFibGVzLiBBIHNpbmdsZSBjb3B5IG9mIHRoZSB0YWJsZXMgaXMgaW5jbHVkZWQgaW4gdGhlIGJ5dGUgc3RyZWFtIChpdHMKKyAgICAgICBzaXplIGlzIDEwODggYnl0ZXMpLgorCisgICAgICAgVGhlIGZ1bmN0aW9ucyB3aG9zZSBuYW1lcyBiZWdpbiAgd2l0aCAgcGNyZTJfc2VyaWFsaXplXyAgYXJlICB1c2VkICBmb3IKKyAgICAgICBzZXJpYWxpemluZyAgYW5kIGRlLXNlcmlhbGl6aW5nLiBUaGV5IGFyZSBkZXNjcmliZWQgaW4gdGhlIHBjcmUyc2VyaWFsLQorICAgICAgIGl6ZSAgZG9jdW1lbnRhdGlvbi4gIEluICB0aGlzICBzZWN0aW9uICB3ZSAgZGVzY3JpYmUgIHRoZSAgZmVhdHVyZXMgIG9mCisgICAgICAgcGNyZTJ0ZXN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gdGVzdCB0aGVzZSBmdW5jdGlvbnMuCisKKyAgICAgICBXaGVuICBhICBwYXR0ZXJuICB3aXRoICBwdXNoICBtb2RpZmllciAgaXMgc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkLCBpdCBpcworICAgICAgIHB1c2hlZCBvbnRvIGEgc3RhY2sgb2YgY29tcGlsZWQgcGF0dGVybnMsICBhbmQgIHBjcmUydGVzdCAgZXhwZWN0cyAgdGhlCisgICAgICAgbmV4dCAgbGluZSAgdG8gIGNvbnRhaW4gYSBuZXcgcGF0dGVybiAob3IgY29tbWFuZCkgaW5zdGVhZCBvZiBhIHN1YmplY3QKKyAgICAgICBsaW5lLiBCeSB0aGlzIG1lYW5zLCBhIG51bWJlciBvZiBwYXR0ZXJucyBjYW4gYmUgY29tcGlsZWQgYW5kIHJldGFpbmVkLgorICAgICAgIFRoZSAgcHVzaCAgbW9kaWZpZXIgIGlzICBpbmNvbXBhdGlibGUgd2l0aCBwb3NpeCwgYW5kIGNvbnRyb2wgbW9kaWZpZXJzCisgICAgICAgdGhhdCBhY3QgYXQgbWF0Y2ggdGltZSBhcmUgaWdub3JlZCAod2l0aCBhIG1lc3NhZ2UpLiBUaGUgaml0dmVyaWZ5IG1vZC0KKyAgICAgICBpZmllciBhcHBsaWVzIG9ubHkgYXQgY29tcGlsZSB0aW1lLiBUaGUgY29tbWFuZAorCisgICAgICAgICAjc2F2ZSA8ZmlsZW5hbWU+CisKKyAgICAgICBjYXVzZXMgYWxsIHRoZSBzdGFja2VkIHBhdHRlcm5zIHRvIGJlIHNlcmlhbGl6ZWQgYW5kIHRoZSByZXN1bHQgd3JpdHRlbgorICAgICAgIHRvIHRoZSBuYW1lZCBmaWxlLiBBZnRlcndhcmRzLCBhbGwgdGhlIHN0YWNrZWQgcGF0dGVybnMgYXJlIGZyZWVkLiAgVGhlCisgICAgICAgY29tbWFuZAorCisgICAgICAgICAjbG9hZCA8ZmlsZW5hbWU+CisKKyAgICAgICByZWFkcyAgdGhlICBkYXRhIGluIHRoZSBmaWxlLCBhbmQgdGhlbiBhcnJhbmdlcyBmb3IgaXQgdG8gYmUgZGUtc2VyaWFsLQorICAgICAgIGl6ZWQsIHdpdGggdGhlIHJlc3VsdGluZyBjb21waWxlZCBwYXR0ZXJucyBhZGRlZCB0byB0aGUgcGF0dGVybiAgc3RhY2suCisgICAgICAgVGhlICBwYXR0ZXJuICBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjayBjYW4gYmUgcmV0cmlldmVkIGJ5IHRoZSAjcG9wIGNvbS0KKyAgICAgICBtYW5kLCB3aGljaCBtdXN0IGJlIGZvbGxvd2VkIGJ5ICBsaW5lcyAgb2YgIHN1YmplY3RzICB0aGF0ICBhcmUgIHRvICBiZQorICAgICAgIG1hdGNoZWQgIHdpdGggIHRoZSBwYXR0ZXJuLCB0ZXJtaW5hdGVkIGFzIHVzdWFsIGJ5IGFuIGVtcHR5IGxpbmUgb3IgZW5kCisgICAgICAgb2YgZmlsZS4gVGhpcyBjb21tYW5kIG1heSBiZSBmb2xsb3dlZCBieSAgYSAgbW9kaWZpZXIgIGxpc3QgIGNvbnRhaW5pbmcKKyAgICAgICBvbmx5ICBjb250cm9sICBtb2RpZmllcnMgdGhhdCBhY3QgYWZ0ZXIgYSBwYXR0ZXJuIGhhcyBiZWVuIGNvbXBpbGVkLiBJbgorICAgICAgIHBhcnRpY3VsYXIsIGhleCwgcG9zaXgsIGFuZCBwdXNoIGFyZSBub3QgYWxsb3dlZCwgbm9yIGFyZSAgYW55ICBvcHRpb24tCisgICAgICAgc2V0dGluZyAgbW9kaWZpZXJzLiAgIFRoZSBKSVQgbW9kaWZpZXJzIGFyZSwgaG93ZXZlciBwZXJtaXR0ZWQuIEhlcmUgaXMKKyAgICAgICBhbiBleGFtcGxlIHRoYXQgc2F2ZXMgYW5kIHJlbG9hZHMgdHdvIHBhdHRlcm5zLgorCisgICAgICAgICAvYWJjL3B1c2gKKyAgICAgICAgIC94eXovcHVzaAorICAgICAgICAgI3NhdmUgdGVtcGZpbGUKKyAgICAgICAgICNsb2FkIHRlbXBmaWxlCisgICAgICAgICAjcG9wIGluZm8KKyAgICAgICAgIHh5egorCisgICAgICAgICAjcG9wIGppdCxiaW5jb2RlCisgICAgICAgICBhYmMKKworICAgICAgIElmIGppdHZlcmlmeSBpcyB1c2VkIHdpdGggI3BvcCwgaXQgZG9lcyBub3QgIGF1dG9tYXRpY2FsbHkgIGltcGx5ICBqaXQsCisgICAgICAgd2hpY2ggaXMgZGlmZmVyZW50IGJlaGF2aW91ciBmcm9tIHdoZW4gaXQgaXMgdXNlZCBvbiBhIHBhdHRlcm4uCisKKworU0VFIEFMU08KKworICAgICAgIHBjcmUyKDMpLCAgcGNyZTJhcGkoMyksICBwY3JlMmNhbGxvdXQoMyksICBwY3JlMmppdCwgIHBjcmUybWF0Y2hpbmcoMyksCisgICAgICAgcGNyZTJwYXJ0aWFsKGQpLCBwY3JlMnBhdHRlcm4oMyksIHBjcmUyc2VyaWFsaXplKDMpLgorCisKK0FVVEhPUgorCisgICAgICAgUGhpbGlwIEhhemVsCisgICAgICAgVW5pdmVyc2l0eSBDb21wdXRpbmcgU2VydmljZQorICAgICAgIENhbWJyaWRnZSwgRW5nbGFuZC4KKworCitSRVZJU0lPTgorCisgICAgICAgTGFzdCB1cGRhdGVkOiAxMiBEZWNlbWJlciAyMDE1CisgICAgICAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCmRpZmYgLS1naXQgYS9kaXN0Mi9kb2MvcGNyZTJ1bmljb2RlLjMgYi9kaXN0Mi9kb2MvcGNyZTJ1bmljb2RlLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTllMjI2ZQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2RvYy9wY3JlMnVuaWNvZGUuMwpAQCAtMCwwICsxLDI2OCBAQAorLlRIIFBDUkUyVU5JQ09ERSAzICIxNiBPY3RvYmVyIDIwMTUiICJQQ1JFMiAxMC4yMSIKKy5TSCBOQU1FCitQQ1JFIC0gUGVybC1jb21wYXRpYmxlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgKHJldmlzZWQgQVBJKQorLlNIICJVTklDT0RFIEFORCBVVEYgU1VQUE9SVCIKKy5ycworLnNwCitXaGVuIFBDUkUyIGlzIGJ1aWx0IHdpdGggVW5pY29kZSBzdXBwb3J0ICh3aGljaCBpcyB0aGUgZGVmYXVsdCksIGl0IGhhcwora25vd2xlZGdlIG9mIFVuaWNvZGUgY2hhcmFjdGVyIHByb3BlcnRpZXMgYW5kIGNhbiBwcm9jZXNzIHRleHQgc3RyaW5ncyBpbgorVVRGLTgsIFVURi0xNiwgb3IgVVRGLTMyIGZvcm1hdCAoZGVwZW5kaW5nIG9uIHRoZSBjb2RlIHVuaXQgd2lkdGgpLiBIb3dldmVyLCBieQorZGVmYXVsdCwgUENSRTIgYXNzdW1lcyB0aGF0IG9uZSBjb2RlIHVuaXQgaXMgb25lIGNoYXJhY3Rlci4gVG8gcHJvY2VzcyBhCitwYXR0ZXJuIGFzIGEgVVRGIHN0cmluZywgd2hlcmUgYSBjaGFyYWN0ZXIgbWF5IHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBjb2RlIHVuaXQsCit5b3UgbXVzdCBjYWxsCisuXCIgSFJFRgorXGZCcGNyZTJfY29tcGlsZSgpXGZQCisuXCIKK3dpdGggdGhlIFBDUkUyX1VURiBvcHRpb24gZmxhZywgb3IgdGhlIHBhdHRlcm4gbXVzdCBzdGFydCB3aXRoIHRoZSBzZXF1ZW5jZQorKCpVVEYpLiBXaGVuIGVpdGhlciBvZiB0aGVzZSBpcyB0aGUgY2FzZSwgYm90aCB0aGUgcGF0dGVybiBhbmQgYW55IHN1YmplY3QKK3N0cmluZ3MgdGhhdCBhcmUgbWF0Y2hlZCBhZ2FpbnN0IGl0IGFyZSB0cmVhdGVkIGFzIFVURiBzdHJpbmdzIGluc3RlYWQgb2YKK3N0cmluZ3Mgb2YgaW5kaXZpZHVhbCBvbmUtY29kZS11bml0IGNoYXJhY3RlcnMuCisuUAorSWYgeW91IGRvIG5vdCBuZWVkIFVuaWNvZGUgc3VwcG9ydCB5b3UgY2FuIGJ1aWxkIFBDUkUyIHdpdGhvdXQgaXQsIGluIHdoaWNoCitjYXNlIHRoZSBsaWJyYXJ5IHdpbGwgYmUgc21hbGxlci4KKy4KKy4KKy5TSCAiVU5JQ09ERSBQUk9QRVJUWSBTVVBQT1JUIgorLnJzCisuc3AKK1doZW4gUENSRTIgaXMgYnVpbHQgd2l0aCBVbmljb2RlIHN1cHBvcnQsIHRoZSBlc2NhcGUgc2VxdWVuY2VzIFxlcHsuLn0sCitcZVB7Li59LCBhbmQgXGVYIGNhbiBiZSB1c2VkLiBUaGUgVW5pY29kZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHRlc3RlZCBhcmUKK2xpbWl0ZWQgdG8gdGhlIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydGllcyBzdWNoIGFzIEx1IGZvciBhbiB1cHBlciBjYXNlIGxldHRlcgorb3IgTmQgZm9yIGEgZGVjaW1hbCBudW1iZXIsIHRoZSBVbmljb2RlIHNjcmlwdCBuYW1lcyBzdWNoIGFzIEFyYWJpYyBvciBIYW4sIGFuZAordGhlIGRlcml2ZWQgcHJvcGVydGllcyBBbnkgYW5kIEwmLiBGdWxsIGxpc3RzIGFyZSBnaXZlbiBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBhdHRlcm5cZlAKKy5cIgorYW5kCisuXCIgSFJFRgorXGZCcGNyZTJzeW50YXhcZlAKKy5cIgorZG9jdW1lbnRhdGlvbi4gT25seSB0aGUgc2hvcnQgbmFtZXMgZm9yIHByb3BlcnRpZXMgYXJlIHN1cHBvcnRlZC4gRm9yIGV4YW1wbGUsCitcZXB7TH0gbWF0Y2hlcyBhIGxldHRlci4gSXRzIFBlcmwgc3lub255bSwgXGVwe0xldHRlcn0sIGlzIG5vdCBzdXBwb3J0ZWQuCitGdXJ0aGVybW9yZSwgaW4gUGVybCwgbWFueSBwcm9wZXJ0aWVzIG1heSBvcHRpb25hbGx5IGJlIHByZWZpeGVkIGJ5ICJJcyIsIGZvcgorY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwgNS42LiBQQ1JFIGRvZXMgbm90IHN1cHBvcnQgdGhpcy4KKy4KKy4KKy5TSCAiV0lERSBDSEFSQUNURVJTIEFORCBVVEYgTU9ERVMiCisucnMKKy5zcAorQ29kZXBvaW50cyBsZXNzIHRoYW4gMjU2IGNhbiBiZSBzcGVjaWZpZWQgaW4gcGF0dGVybnMgYnkgZWl0aGVyIGJyYWNlZCBvcgordW5icmFjZWQgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlcyAoZm9yIGV4YW1wbGUsIFxleHtiM30gb3IgXGV4YjMpLiBMYXJnZXIKK3ZhbHVlcyBoYXZlIHRvIHVzZSBicmFjZWQgc2VxdWVuY2VzLiBVbmJyYWNlZCBvY3RhbCBjb2RlIHBvaW50cyB1cCB0byBcZTc3NyBhcmUKK2Fsc28gcmVjb2duaXplZDsgbGFyZ2VyIG9uZXMgY2FuIGJlIGNvZGVkIHVzaW5nIFxlb3suLi59LgorLlAKK0luIFVURiBtb2RlcywgcmVwZWF0IHF1YW50aWZpZXJzIGFwcGx5IHRvIGNvbXBsZXRlIFVURiBjaGFyYWN0ZXJzLCBub3QgdG8KK2luZGl2aWR1YWwgY29kZSB1bml0cy4KKy5QCitJbiBVVEYgbW9kZXMsIHRoZSBkb3QgbWV0YWNoYXJhY3RlciBtYXRjaGVzIG9uZSBVVEYgY2hhcmFjdGVyIGluc3RlYWQgb2YgYQorc2luZ2xlIGNvZGUgdW5pdC4KKy5QCitUaGUgZXNjYXBlIHNlcXVlbmNlIFxlQyBjYW4gYmUgdXNlZCB0byBtYXRjaCBhIHNpbmdsZSBjb2RlIHVuaXQsIGluIGEgVVRGIG1vZGUsCitidXQgaXRzIHVzZSBjYW4gbGVhZCB0byBzb21lIHN0cmFuZ2UgZWZmZWN0cyBiZWNhdXNlIGl0IGJyZWFrcyB1cCBtdWx0aS11bml0CitjaGFyYWN0ZXJzIChzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIFxlQyBpbiB0aGUKKy5cIiBIUkVGCitcZkJwY3JlMnBhdHRlcm5cZlAKKy5cIgorZG9jdW1lbnRhdGlvbikuIFRoZSB1c2Ugb2YgXGVDIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGFsdGVybmF0aXZlIG1hdGNoaW5nCitmdW5jdGlvbiBcZkJwY3JlMl9kZmFfbWF0Y2goKVxmUCB3aGVuIGluIFVURiBtb2RlLiBJdHMgdXNlIHByb3Zva2VzIGEKK21hdGNoLXRpbWUgZXJyb3IuIFRoZSBKSVQgb3B0aW1pemF0aW9uIGFsc28gZG9lcyBub3Qgc3VwcG9ydCBcZUMgaW4gVVRGIG1vZGUuCitJZiBKSVQgb3B0aW1pemF0aW9uIGlzIHJlcXVlc3RlZCBmb3IgYSBVVEYgcGF0dGVybiB0aGF0IGNvbnRhaW5zIFxlQywgaXQgd2lsbAorbm90IHN1Y2NlZWQsIGFuZCBzbyB0aGUgbWF0Y2hpbmcgd2lsbCBiZSBjYXJyaWVkIG91dCBieSB0aGUgbm9ybWFsIGludGVycHJldGl2ZQorZnVuY3Rpb24uCisuUAorVGhlIGNoYXJhY3RlciBlc2NhcGVzIFxlYiwgXGVCLCBcZWQsIFxlRCwgXGVzLCBcZVMsIFxldywgYW5kIFxlVyBjb3JyZWN0bHkgdGVzdAorY2hhcmFjdGVycyBvZiBhbnkgY29kZSB2YWx1ZSwgYnV0LCBieSBkZWZhdWx0LCB0aGUgY2hhcmFjdGVycyB0aGF0IFBDUkUyCityZWNvZ25pemVzIGFzIGRpZ2l0cywgc3BhY2VzLCBvciB3b3JkIGNoYXJhY3RlcnMgcmVtYWluIHRoZSBzYW1lIHNldCBhcyBpbgorbm9uLVVURiBtb2RlLCBhbGwgd2l0aCBjb2RlIHBvaW50cyBsZXNzIHRoYW4gMjU2LiBUaGlzIHJlbWFpbnMgdHJ1ZSBldmVuIHdoZW4KK1BDUkUyIGlzIGJ1aWx0IHRvIGluY2x1ZGUgVW5pY29kZSBzdXBwb3J0LCBiZWNhdXNlIHRvIGRvIG90aGVyd2lzZSB3b3VsZCBzbG93Citkb3duIG1hdGNoaW5nIGluIG1hbnkgY29tbW9uIGNhc2VzLiBOb3RlIHRoYXQgdGhpcyBhbHNvIGFwcGxpZXMgdG8gXGViCithbmQgXGVCLCBiZWNhdXNlIHRoZXkgYXJlIGRlZmluZWQgaW4gdGVybXMgb2YgXGV3IGFuZCBcZVcuIElmIHlvdSB3YW50Cit0byB0ZXN0IGZvciBhIHdpZGVyIHNlbnNlIG9mLCBzYXksICJkaWdpdCIsIHlvdSBjYW4gdXNlIGV4cGxpY2l0IFVuaWNvZGUKK3Byb3BlcnR5IHRlc3RzIHN1Y2ggYXMgXGVwe05kfS4gQWx0ZXJuYXRpdmVseSwgaWYgeW91IHNldCB0aGUgUENSRTJfVUNQIG9wdGlvbiwKK3RoZSB3YXkgdGhhdCB0aGUgY2hhcmFjdGVyIGVzY2FwZXMgd29yayBpcyBjaGFuZ2VkIHNvIHRoYXQgVW5pY29kZSBwcm9wZXJ0aWVzCithcmUgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggY2hhcmFjdGVycyBtYXRjaC4gVGhlcmUgYXJlIG1vcmUgZGV0YWlscyBpbiB0aGUKK3NlY3Rpb24gb24KKy5cIiBIVE1MIDxhIGhyZWY9InBjcmUycGF0dGVybi5odG1sI2dlbmVyaWNjaGFydHlwZXMiPgorLlwiIDwvYT4KK2dlbmVyaWMgY2hhcmFjdGVyIHR5cGVzCisuXCIKK2luIHRoZQorLlwiIEhSRUYKK1xmQnBjcmUycGF0dGVyblxmUAorLlwiCitkb2N1bWVudGF0aW9uLgorLlAKK1NpbWlsYXJseSwgY2hhcmFjdGVycyB0aGF0IG1hdGNoIHRoZSBQT1NJWCBuYW1lZCBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgYWxsCitsb3ctdmFsdWVkIGNoYXJhY3RlcnMsIHVubGVzcyB0aGUgUENSRTJfVUNQIG9wdGlvbiBpcyBzZXQuCisuUAorSG93ZXZlciwgdGhlIHNwZWNpYWwgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgd2hpdGUgc3BhY2UgbWF0Y2hpbmcgZXNjYXBlcyAoXGVoLAorXGVILCBcZXYsIGFuZCBcZVYpIGRvIG1hdGNoIGFsbCB0aGUgYXBwcm9wcmlhdGUgVW5pY29kZSBjaGFyYWN0ZXJzLCB3aGV0aGVyIG9yCitub3QgUENSRTJfVUNQIGlzIHNldC4KKy5QCitDYXNlLWluc2Vuc2l0aXZlIG1hdGNoaW5nIGluIFVURiBtb2RlIG1ha2VzIHVzZSBvZiBVbmljb2RlIHByb3BlcnRpZXMuIEEgZmV3CitVbmljb2RlIGNoYXJhY3RlcnMgc3VjaCBhcyBHcmVlayBzaWdtYSBoYXZlIG1vcmUgdGhhbiB0d28gY29kZXBvaW50cyB0aGF0IGFyZQorY2FzZS1lcXVpdmFsZW50LCBhbmQgdGhlc2UgYXJlIHRyZWF0ZWQgYXMgc3VjaC4KKy4KKy4KKy5TSCAiVkFMSURJVFkgT0YgVVRGIFNUUklOR1MiCisucnMKKy5zcAorV2hlbiB0aGUgUENSRTJfVVRGIG9wdGlvbiBpcyBzZXQsIHRoZSBzdHJpbmdzIHBhc3NlZCBhcyBwYXR0ZXJucyBhbmQgc3ViamVjdHMKK2FyZSAoYnkgZGVmYXVsdCkgY2hlY2tlZCBmb3IgdmFsaWRpdHkgb24gZW50cnkgdG8gdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4KK0lmIGFuIGludmFsaWQgVVRGIHN0cmluZyBpcyBwYXNzZWQsIGFuIG5lZ2F0aXZlIGVycm9yIGNvZGUgaXMgcmV0dXJuZWQuIFRoZQorY29kZSB1bml0IG9mZnNldCB0byB0aGUgb2ZmZW5kaW5nIGNoYXJhY3RlciBjYW4gYmUgZXh0cmFjdGVkIGZyb20gdGhlIG1hdGNoCitkYXRhIGJsb2NrIGJ5IGNhbGxpbmcgXGZCcGNyZTJfZ2V0X3N0YXJ0Y2hhcigpXGZQLCB3aGljaCBpcyB1c2VkIGZvciB0aGlzCitwdXJwb3NlIGFmdGVyIGEgVVRGIGVycm9yLgorLlAKK1VURi0xNiBhbmQgVVRGLTMyIHN0cmluZ3MgY2FuIGluZGljYXRlIHRoZWlyIGVuZGlhbm5lc3MgYnkgc3BlY2lhbCBjb2RlIGtub3dzCithcyBhIGJ5dGUtb3JkZXIgbWFyayAoQk9NKS4gVGhlIFBDUkUyIGZ1bmN0aW9ucyBkbyBub3QgaGFuZGxlIHRoaXMsIGV4cGVjdGluZworc3RyaW5ncyB0byBiZSBpbiBob3N0IGJ5dGUgb3JkZXIuCisuUAorQSBVVEYgc3RyaW5nIGlzIGNoZWNrZWQgYmVmb3JlIGFueSBvdGhlciBwcm9jZXNzaW5nIHRha2VzIHBsYWNlLiBJbiB0aGUgY2FzZSBvZgorXGZCcGNyZTJfbWF0Y2goKVxmUCBhbmQgXGZCcGNyZTJfZGZhX21hdGNoKClcZlAgY2FsbHMgd2l0aCBhIG5vbi16ZXJvIHN0YXJ0aW5nCitvZmZzZXQsIHRoZSBjaGVjayBpcyBhcHBsaWVkIG9ubHkgdG8gdGhhdCBwYXJ0IG9mIHRoZSBzdWJqZWN0IHRoYXQgY291bGQgYmUKK2luc3BlY3RlZCBkdXJpbmcgbWF0Y2hpbmcsIGFuZCB0aGVyZSBpcyBhIGNoZWNrIHRoYXQgdGhlIHN0YXJ0aW5nIG9mZnNldCBwb2ludHMKK3RvIHRoZSBmaXJzdCBjb2RlIHVuaXQgb2YgYSBjaGFyYWN0ZXIgb3IgdG8gdGhlIGVuZCBvZiB0aGUgc3ViamVjdC4gSWYgdGhlcmUKK2FyZSBubyBsb29rYmVoaW5kIGFzc2VydGlvbnMgaW4gdGhlIHBhdHRlcm4sIHRoZSBjaGVjayBzdGFydHMgYXQgdGhlIHN0YXJ0aW5nCitvZmZzZXQuIE90aGVyd2lzZSwgaXQgc3RhcnRzIGF0IHRoZSBsZW5ndGggb2YgdGhlIGxvbmdlc3QgbG9va2JlaGluZCBiZWZvcmUgdGhlCitzdGFydGluZyBvZmZzZXQsIG9yIGF0IHRoZSBzdGFydCBvZiB0aGUgc3ViamVjdCBpZiB0aGVyZSBhcmUgbm90IHRoYXQgbWFueQorY2hhcmFjdGVycyBiZWZvcmUgdGhlIHN0YXJ0aW5nIG9mZnNldC4gTm90ZSB0aGF0IHRoZSBzZXF1ZW5jZXMgXGViIGFuZCBcZUIgYXJlCitvbmUtY2hhcmFjdGVyIGxvb2tiZWhpbmRzLgorLlAKK0luIGFkZGl0aW9uIHRvIGNoZWNraW5nIHRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZywgdGhlcmUgaXMgYSBjaGVjayB0byBlbnN1cmUKK3RoYXQgYWxsIGNvZGUgcG9pbnRzIGxpZSBpbiB0aGUgcmFuZ2UgVSswIHRvIFUrMTBGRkZGLCBleGNsdWRpbmcgdGhlIHN1cnJvZ2F0ZQorYXJlYS4gVGhlIHNvLWNhbGxlZCAibm9uLWNoYXJhY3RlciIgY29kZSBwb2ludHMgYXJlIG5vdCBleGNsdWRlZCBiZWNhdXNlCitVbmljb2RlIGNvcnJpZ2VuZHVtICM5IG1ha2VzIGl0IGNsZWFyIHRoYXQgdGhleSBzaG91bGQgbm90IGJlLgorLlAKK0NoYXJhY3RlcnMgaW4gdGhlICJTdXJyb2dhdGUgQXJlYSIgb2YgVW5pY29kZSBhcmUgcmVzZXJ2ZWQgZm9yIHVzZSBieSBVVEYtMTYsCit3aGVyZSB0aGV5IGFyZSB1c2VkIGluIHBhaXJzIHRvIGVuY29kZSBjb2RlIHBvaW50cyB3aXRoIHZhbHVlcyBncmVhdGVyIHRoYW4KKzB4RkZGRi4gVGhlIGNvZGUgcG9pbnRzIHRoYXQgYXJlIGVuY29kZWQgYnkgVVRGLTE2IHBhaXJzIGFyZSBhdmFpbGFibGUKK2luZGVwZW5kZW50bHkgaW4gdGhlIFVURi04IGFuZCBVVEYtMzIgZW5jb2RpbmdzLiAoSW4gb3RoZXIgd29yZHMsIHRoZSB3aG9sZQorc3Vycm9nYXRlIHRoaW5nIGlzIGEgZnVkZ2UgZm9yIFVURi0xNiB3aGljaCB1bmZvcnR1bmF0ZWx5IG1lc3NlcyB1cCBVVEYtOCBhbmQKK1VURi0zMi4pCisuUAorSW4gc29tZSBzaXR1YXRpb25zLCB5b3UgbWF5IGFscmVhZHkga25vdyB0aGF0IHlvdXIgc3RyaW5ncyBhcmUgdmFsaWQsIGFuZAordGhlcmVmb3JlIHdhbnQgdG8gc2tpcCB0aGVzZSBjaGVja3MgaW4gb3JkZXIgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSwgZm9yCitleGFtcGxlIGluIHRoZSBjYXNlIG9mIGEgbG9uZyBzdWJqZWN0IHN0cmluZyB0aGF0IGlzIGJlaW5nIHNjYW5uZWQgcmVwZWF0ZWRseS4KK0lmIHlvdSBzZXQgdGhlIFBDUkUyX05PX1VURl9DSEVDSyBvcHRpb24gYXQgY29tcGlsZSB0aW1lIG9yIGF0IG1hdGNoIHRpbWUsCitQQ1JFMiBhc3N1bWVzIHRoYXQgdGhlIHBhdHRlcm4gb3Igc3ViamVjdCBpdCBpcyBnaXZlbiAocmVzcGVjdGl2ZWx5KSBjb250YWlucworb25seSB2YWxpZCBVVEYgY29kZSB1bml0IHNlcXVlbmNlcy4KKy5QCitQYXNzaW5nIFBDUkUyX05PX1VURl9DSEVDSyB0byBcZkJwY3JlMl9jb21waWxlKClcZlAganVzdCBkaXNhYmxlcyB0aGUgY2hlY2sgZm9yCit0aGUgcGF0dGVybjsgaXQgZG9lcyBub3QgYWxzbyBhcHBseSB0byBzdWJqZWN0IHN0cmluZ3MuIElmIHlvdSB3YW50IHRvIGRpc2FibGUKK3RoZSBjaGVjayBmb3IgYSBzdWJqZWN0IHN0cmluZyB5b3UgbXVzdCBwYXNzIHRoaXMgb3B0aW9uIHRvIFxmQnBjcmUyX21hdGNoKClcZlAKK29yIFxmQnBjcmUyX2RmYV9tYXRjaCgpXGZQLgorLlAKK0lmIHlvdSBwYXNzIGFuIGludmFsaWQgVVRGIHN0cmluZyB3aGVuIFBDUkUyX05PX1VURl9DSEVDSyBpcyBzZXQsIHRoZSByZXN1bHQKK2lzIHVuZGVmaW5lZCBhbmQgeW91ciBwcm9ncmFtIG1heSBjcmFzaCBvciBsb29wIGluZGVmaW5pdGVseS4KKy4KKy4KKy5cIiBIVE1MIDxhIG5hbWU9InV0ZjhzdHJpbmdzIj48L2E+CisuU1MgIkVycm9ycyBpbiBVVEYtOCBzdHJpbmdzIgorLnJzCisuc3AKK1RoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIGdpdmVuIGZvciBpbnZhbGlkIFVURi04IHN0cmluZ3M6Cisuc3AKKyAgUENSRTJfRVJST1JfVVRGOF9FUlIxCisgIFBDUkUyX0VSUk9SX1VURjhfRVJSMgorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjMKKyAgUENSRTJfRVJST1JfVVRGOF9FUlI0CisgIFBDUkUyX0VSUk9SX1VURjhfRVJSNQorLnNwCitUaGUgc3RyaW5nIGVuZHMgd2l0aCBhIHRydW5jYXRlZCBVVEYtOCBjaGFyYWN0ZXI7IHRoZSBjb2RlIHNwZWNpZmllcyBob3cgbWFueQorYnl0ZXMgYXJlIG1pc3NpbmcgKDEgdG8gNSkuIEFsdGhvdWdoIFJGQyAzNjI5IHJlc3RyaWN0cyBVVEYtOCBjaGFyYWN0ZXJzIHRvIGJlCitubyBsb25nZXIgdGhhbiA0IGJ5dGVzLCB0aGUgZW5jb2Rpbmcgc2NoZW1lIChvcmlnaW5hbGx5IGRlZmluZWQgYnkgUkZDIDIyNzkpCithbGxvd3MgZm9yIHVwIHRvIDYgYnl0ZXMsIGFuZCB0aGlzIGlzIGNoZWNrZWQgZmlyc3Q7IGhlbmNlIHRoZSBwb3NzaWJpbGl0eSBvZgorNCBvciA1IG1pc3NpbmcgYnl0ZXMuCisuc3AKKyAgUENSRTJfRVJST1JfVVRGOF9FUlI2CisgIFBDUkUyX0VSUk9SX1VURjhfRVJSNworICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjgKKyAgUENSRTJfRVJST1JfVVRGOF9FUlI5CisgIFBDUkUyX0VSUk9SX1VURjhfRVJSMTAKKy5zcAorVGhlIHR3byBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIDJuZCwgM3JkLCA0dGgsIDV0aCwgb3IgNnRoIGJ5dGUgb2YgdGhlCitjaGFyYWN0ZXIgZG8gbm90IGhhdmUgdGhlIGJpbmFyeSB2YWx1ZSAwYjEwICh0aGF0IGlzLCBlaXRoZXIgdGhlIG1vc3QKK3NpZ25pZmljYW50IGJpdCBpcyAwLCBvciB0aGUgbmV4dCBiaXQgaXMgMSkuCisuc3AKKyAgUENSRTJfRVJST1JfVVRGOF9FUlIxMQorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjEyCisuc3AKK0EgY2hhcmFjdGVyIHRoYXQgaXMgdmFsaWQgYnkgdGhlIFJGQyAyMjc5IHJ1bGVzIGlzIGVpdGhlciA1IG9yIDYgYnl0ZXMgbG9uZzsKK3RoZXNlIGNvZGUgcG9pbnRzIGFyZSBleGNsdWRlZCBieSBSRkMgMzYyOS4KKy5zcAorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjEzCisuc3AKK0EgNC1ieXRlIGNoYXJhY3RlciBoYXMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gMHgxMGZmZjsgdGhlc2UgY29kZSBwb2ludHMgYXJlCitleGNsdWRlZCBieSBSRkMgMzYyOS4KKy5zcAorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE0Cisuc3AKK0EgMy1ieXRlIGNoYXJhY3RlciBoYXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgMHhkODAwIHRvIDB4ZGZmZjsgdGhpcyByYW5nZSBvZgorY29kZSBwb2ludHMgYXJlIHJlc2VydmVkIGJ5IFJGQyAzNjI5IGZvciB1c2Ugd2l0aCBVVEYtMTYsIGFuZCBzbyBhcmUgZXhjbHVkZWQKK2Zyb20gVVRGLTguCisuc3AKKyAgUENSRTJfRVJST1JfVVRGOF9FUlIxNQorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE2CisgIFBDUkUyX0VSUk9SX1VURjhfRVJSMTcKKyAgUENSRTJfRVJST1JfVVRGOF9FUlIxOAorICBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE5Cisuc3AKK0EgMi0sIDMtLCA0LSwgNS0sIG9yIDYtYnl0ZSBjaGFyYWN0ZXIgaXMgIm92ZXJsb25nIiwgdGhhdCBpcywgaXQgY29kZXMgZm9yIGEKK3ZhbHVlIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGJ5IGZld2VyIGJ5dGVzLCB3aGljaCBpcyBpbnZhbGlkLiBGb3IgZXhhbXBsZSwKK3RoZSB0d28gYnl0ZXMgMHhjMCwgMHhhZSBnaXZlIHRoZSB2YWx1ZSAweDJlLCB3aG9zZSBjb3JyZWN0IGNvZGluZyB1c2VzIGp1c3QKK29uZSBieXRlLgorLnNwCisgIFBDUkUyX0VSUk9SX1VURjhfRVJSMjAKKy5zcAorVGhlIHR3byBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIGZpcnN0IGJ5dGUgb2YgYSBjaGFyYWN0ZXIgaGF2ZSB0aGUgYmluYXJ5Cit2YWx1ZSAwYjEwICh0aGF0IGlzLCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgaXMgMSBhbmQgdGhlIHNlY29uZCBpcyAwKS4gU3VjaCBhCitieXRlIGNhbiBvbmx5IHZhbGlkbHkgb2NjdXIgYXMgdGhlIHNlY29uZCBvciBzdWJzZXF1ZW50IGJ5dGUgb2YgYSBtdWx0aS1ieXRlCitjaGFyYWN0ZXIuCisuc3AKKyAgUENSRTJfRVJST1JfVVRGOF9FUlIyMQorLnNwCitUaGUgZmlyc3QgYnl0ZSBvZiBhIGNoYXJhY3RlciBoYXMgdGhlIHZhbHVlIDB4ZmUgb3IgMHhmZi4gVGhlc2UgdmFsdWVzIGNhbgorbmV2ZXIgb2NjdXIgaW4gYSB2YWxpZCBVVEYtOCBzdHJpbmcuCisuCisuCisuXCIgSFRNTCA8YSBuYW1lPSJ1dGYxNnN0cmluZ3MiPjwvYT4KKy5TUyAiRXJyb3JzIGluIFVURi0xNiBzdHJpbmdzIgorLnJzCisuc3AKK1RoZSBmb2xsb3dpbmcgbmVnYXRpdmUgZXJyb3IgY29kZXMgYXJlIGdpdmVuIGZvciBpbnZhbGlkIFVURi0xNiBzdHJpbmdzOgorLnNwCisgIFBDUkVfVVRGMTZfRVJSMSAgTWlzc2luZyBsb3cgc3Vycm9nYXRlIGF0IGVuZCBvZiBzdHJpbmcKKyAgUENSRV9VVEYxNl9FUlIyICBJbnZhbGlkIGxvdyBzdXJyb2dhdGUgZm9sbG93cyBoaWdoIHN1cnJvZ2F0ZQorICBQQ1JFX1VURjE2X0VSUjMgIElzb2xhdGVkIGxvdyBzdXJyb2dhdGUKKy5zcAorLgorLgorLlwiIEhUTUwgPGEgbmFtZT0idXRmMzJzdHJpbmdzIj48L2E+CisuU1MgIkVycm9ycyBpbiBVVEYtMzIgc3RyaW5ncyIKKy5ycworLnNwCitUaGUgZm9sbG93aW5nIG5lZ2F0aXZlIGVycm9yIGNvZGVzIGFyZSBnaXZlbiBmb3IgaW52YWxpZCBVVEYtMzIgc3RyaW5nczoKKy5zcAorICBQQ1JFX1VURjMyX0VSUjEgIFN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKHJhbmdlIGZyb20gMHhkODAwIHRvIDB4ZGZmZikKKyAgUENSRV9VVEYzMl9FUlIyICBDb2RlIHBvaW50IGlzIGdyZWF0ZXIgdGhhbiAweDEwZmZmZgorLnNwCisuCisuCisuU0ggQVVUSE9SCisucnMKKy5zcAorLm5mCitQaGlsaXAgSGF6ZWwKK1VuaXZlcnNpdHkgQ29tcHV0aW5nIFNlcnZpY2UKK0NhbWJyaWRnZSwgRW5nbGFuZC4KKy5maQorLgorLgorLlNIIFJFVklTSU9OCisucnMKKy5zcAorLm5mCitMYXN0IHVwZGF0ZWQ6IDE2IE9jdG9iZXIgMjAxNQorQ29weXJpZ2h0IChjKSAxOTk3LTIwMTUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCisuZmkKZGlmZiAtLWdpdCBhL2Rpc3QyL2luc3RhbGwtc2ggYi9kaXN0Mi9pbnN0YWxsLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBiMGZkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9pbnN0YWxsLXNoCkBAIC0wLDAgKzEsNTAxIEBACisjIS9iaW4vc2gKKyMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCisKK3NjcmlwdHZlcnNpb249MjAxMy0xMi0yNS4yMzsgIyBVVEMKKworIyBUaGlzIG9yaWdpbmF0ZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKSwgd2hpY2ggd2FzCisjIGxhdGVyIHJlbGVhc2VkIGluIFgxMVI2ICh4Yy9jb25maWcvdXRpbC9pbnN0YWxsLnNoKSB3aXRoIHRoZQorIyBmb2xsb3dpbmcgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTQgWCBDb25zb3J0aXVtCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisjIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisjIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorIyBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyMgWCBDT05TT1JUSVVNIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUMtCisjIFRJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisjCisjIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIHRoZSBYIENvbnNvcnRpdW0gc2hhbGwgbm90CisjIGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3Igb3RoZXJ3aXNlIHRvIHByb21vdGUgdGhlIHNhbGUsIHVzZSBvciBvdGhlciBkZWFsLQorIyBpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgWCBDb25zb3ItCisjIHRpdW0uCisjCisjCisjIEZTRiBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCisjCisjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50CisjICdtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CisjIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCisjCisjIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KKyMgZnJvbSBzY3JhdGNoLgorCit0YWI9JwknCitubD0nCisnCitJRlM9IiAkdGFiJG5sIgorCisjIFNldCBET0lUUFJPRyB0byAiZWNobyIgdG8gdGVzdCB0aGlzIHNjcmlwdC4KKworZG9pdD0ke0RPSVRQUk9HLX0KK2RvaXRfZXhlYz0ke2RvaXQ6LWV4ZWN9CisKKyMgUHV0IGluIGFic29sdXRlIGZpbGUgbmFtZXMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7CisjIG9yIHVzZSBlbnZpcm9ubWVudCB2YXJzLgorCitjaGdycHByb2c9JHtDSEdSUFBST0ctY2hncnB9CitjaG1vZHByb2c9JHtDSE1PRFBST0ctY2htb2R9CitjaG93bnByb2c9JHtDSE9XTlBST0ctY2hvd259CitjbXBwcm9nPSR7Q01QUFJPRy1jbXB9CitjcHByb2c9JHtDUFBST0ctY3B9Citta2RpcnByb2c9JHtNS0RJUlBST0ctbWtkaXJ9CittdnByb2c9JHtNVlBST0ctbXZ9CitybXByb2c9JHtSTVBST0ctcm19CitzdHJpcHByb2c9JHtTVFJJUFBST0ctc3RyaXB9CisKK3Bvc2l4X21rZGlyPQorCisjIERlc2lyZWQgbW9kZSBvZiBpbnN0YWxsZWQgZmlsZS4KK21vZGU9MDc1NQorCitjaGdycGNtZD0KK2NobW9kY21kPSRjaG1vZHByb2cKK2Nob3duY21kPQorbXZjbWQ9JG12cHJvZworcm1jbWQ9IiRybXByb2cgLWYiCitzdHJpcGNtZD0KKworc3JjPQorZHN0PQorZGlyX2FyZz0KK2RzdF9hcmc9CisKK2NvcHlfb25fY2hhbmdlPWZhbHNlCitpc190YXJnZXRfYV9kaXJlY3Rvcnk9cG9zc2libHkKKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbLVRdIFNSQ0ZJTEUgRFNURklMRQorICAgb3I6ICQwIFtPUFRJT05dLi4uIFNSQ0ZJTEVTLi4uIERJUkVDVE9SWQorICAgb3I6ICQwIFtPUFRJT05dLi4uIC10IERJUkVDVE9SWSBTUkNGSUxFUy4uLgorICAgb3I6ICQwIFtPUFRJT05dLi4uIC1kIERJUkVDVE9SSUVTLi4uCisKK0luIHRoZSAxc3QgZm9ybSwgY29weSBTUkNGSUxFIHRvIERTVEZJTEUuCitJbiB0aGUgMm5kIGFuZCAzcmQsIGNvcHkgYWxsIFNSQ0ZJTEVTIHRvIERJUkVDVE9SWS4KK0luIHRoZSA0dGgsIGNyZWF0ZSBESVJFQ1RPUklFUy4KKworT3B0aW9uczoKKyAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKyAgICAgLS12ZXJzaW9uICBkaXNwbGF5IHZlcnNpb24gaW5mbyBhbmQgZXhpdC4KKworICAtYyAgICAgICAgICAgIChpZ25vcmVkKQorICAtQyAgICAgICAgICAgIGluc3RhbGwgb25seSBpZiBkaWZmZXJlbnQgKHByZXNlcnZlIHRoZSBsYXN0IGRhdGEgbW9kaWZpY2F0aW9uIHRpbWUpCisgIC1kICAgICAgICAgICAgY3JlYXRlIGRpcmVjdG9yaWVzIGluc3RlYWQgb2YgaW5zdGFsbGluZyBmaWxlcy4KKyAgLWcgR1JPVVAgICAgICAkY2hncnBwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBHUk9VUC4KKyAgLW0gTU9ERSAgICAgICAkY2htb2Rwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBNT0RFLgorICAtbyBVU0VSICAgICAgICRjaG93bnByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIFVTRVIuCisgIC1zICAgICAgICAgICAgJHN0cmlwcHJvZyBpbnN0YWxsZWQgZmlsZXMuCisgIC10IERJUkVDVE9SWSAgaW5zdGFsbCBpbnRvIERJUkVDVE9SWS4KKyAgLVQgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IgaWYgRFNURklMRSBpcyBhIGRpcmVjdG9yeS4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbW1hbmRzOgorICBDSEdSUFBST0cgQ0hNT0RQUk9HIENIT1dOUFJPRyBDTVBQUk9HIENQUFJPRyBNS0RJUlBST0cgTVZQUk9HCisgIFJNUFJPRyBTVFJJUFBST0cKKyIKKword2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC1jKSA7OworCisgICAgLUMpIGNvcHlfb25fY2hhbmdlPXRydWU7OworCisgICAgLWQpIGRpcl9hcmc9dHJ1ZTs7CisKKyAgICAtZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisgICAgICAgIHNoaWZ0OzsKKworICAgIC0taGVscCkgZWNobyAiJHVzYWdlIjsgZXhpdCAkPzs7CisKKyAgICAtbSkgbW9kZT0kMgorICAgICAgICBjYXNlICRtb2RlIGluCisgICAgICAgICAgKicgJyogfCAqIiR0YWIiKiB8ICoiJG5sIiogfCAqJyonKiB8IConPycqIHwgKidbJyopCisgICAgICAgICAgICBlY2hvICIkMDogaW52YWxpZCBtb2RlOiAkbW9kZSIgPiYyCisgICAgICAgICAgICBleGl0IDE7OworICAgICAgICBlc2FjCisgICAgICAgIHNoaWZ0OzsKKworICAgIC1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKKyAgICAgICAgc2hpZnQ7OworCisgICAgLXMpIHN0cmlwY21kPSRzdHJpcHByb2c7OworCisgICAgLXQpCisgICAgICAgIGlzX3RhcmdldF9hX2RpcmVjdG9yeT1hbHdheXMKKyAgICAgICAgZHN0X2FyZz0kMgorICAgICAgICAjIFByb3RlY3QgbmFtZXMgcHJvYmxlbWF0aWMgZm9yICd0ZXN0JyBhbmQgb3RoZXIgdXRpbGl0aWVzLgorICAgICAgICBjYXNlICRkc3RfYXJnIGluCisgICAgICAgICAgLSogfCBbPVwoXCkhXSkgZHN0X2FyZz0uLyRkc3RfYXJnOzsKKyAgICAgICAgZXNhYworICAgICAgICBzaGlmdDs7CisKKyAgICAtVCkgaXNfdGFyZ2V0X2FfZGlyZWN0b3J5PW5ldmVyOzsKKworICAgIC0tdmVyc2lvbikgZWNobyAiJDAgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKKworICAgIC0tKSBzaGlmdAorICAgICAgICBicmVhazs7CisKKyAgICAtKikgZWNobyAiJDA6IGludmFsaWQgb3B0aW9uOiAkMSIgPiYyCisgICAgICAgIGV4aXQgMTs7CisKKyAgICAqKSAgYnJlYWs7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKKyMgV2UgYWxsb3cgdGhlIHVzZSBvZiBvcHRpb25zIC1kIGFuZCAtVCB0b2dldGhlciwgYnkgbWFraW5nIC1kCisjIHRha2UgdGhlIHByZWNlZGVuY2U7IHRoaXMgaXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBHTlUgaW5zdGFsbC4KKworaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRkc3RfYXJnIjsgdGhlbgorICAgIGVjaG8gIiQwOiB0YXJnZXQgZGlyZWN0b3J5IG5vdCBhbGxvd2VkIHdoZW4gaW5zdGFsbGluZyBhIGRpcmVjdG9yeS4iID4mMgorICAgIGV4aXQgMQorICBmaQorZmkKKworaWYgdGVzdCAkIyAtbmUgMCAmJiB0ZXN0IC16ICIkZGlyX2FyZyRkc3RfYXJnIjsgdGhlbgorICAjIFdoZW4gLWQgaXMgdXNlZCwgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZS4KKyAgIyBXaGVuIC10IGlzIHVzZWQsIHRoZSBkZXN0aW5hdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZC4KKyAgIyBPdGhlcndpc2UsIHRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkZXN0aW5hdGlvbi4gIFJlbW92ZSBpdCBmcm9tICRALgorICBmb3IgYXJnCisgIGRvCisgICAgaWYgdGVzdCAtbiAiJGRzdF9hcmciOyB0aGVuCisgICAgICAjICRAIGlzIG5vdCBlbXB0eTogaXQgY29udGFpbnMgYXQgbGVhc3QgJGFyZy4KKyAgICAgIHNldCBmbm9yZCAiJEAiICIkZHN0X2FyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBmaQorICAgIHNoaWZ0ICMgYXJnCisgICAgZHN0X2FyZz0kYXJnCisgICAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKyAgICBjYXNlICRkc3RfYXJnIGluCisgICAgICAtKiB8IFs9XChcKSFdKSBkc3RfYXJnPS4vJGRzdF9hcmc7OworICAgIGVzYWMKKyAgZG9uZQorZmkKKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgICBlY2hvICIkMDogbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQuIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKKyAgIyBJdCdzIE9LIHRvIGNhbGwgJ2luc3RhbGwtc2ggLWQnIHdpdGhvdXQgYXJndW1lbnQuCisgICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gY3JlYXRpbmcgY29uZGl0aW9uYWwgZGlyZWN0b3JpZXMuCisgIGV4aXQgMAorZmkKKworaWYgdGVzdCAteiAiJGRpcl9hcmciOyB0aGVuCisgIGlmIHRlc3QgJCMgLWd0IDEgfHwgdGVzdCAiJGlzX3RhcmdldF9hX2RpcmVjdG9yeSIgPSBhbHdheXM7IHRoZW4KKyAgICBpZiB0ZXN0ICEgLWQgIiRkc3RfYXJnIjsgdGhlbgorICAgICAgZWNobyAiJDA6ICRkc3RfYXJnOiBJcyBub3QgYSBkaXJlY3RvcnkuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisgIGZpCitmaQorCitpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgZG9fZXhpdD0nKGV4aXQgJHJldCk7IGV4aXQgJHJldCcKKyAgdHJhcCAicmV0PTEyOTsgJGRvX2V4aXQiIDEKKyAgdHJhcCAicmV0PTEzMDsgJGRvX2V4aXQiIDIKKyAgdHJhcCAicmV0PTE0MTsgJGRvX2V4aXQiIDEzCisgIHRyYXAgInJldD0xNDM7ICRkb19leGl0IiAxNQorCisgICMgU2V0IHVtYXNrIHNvIGFzIG5vdCB0byBjcmVhdGUgdGVtcHMgd2l0aCB0b28tZ2VuZXJvdXMgbW9kZXMuCisgICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KKyAgY2FzZSAkbW9kZSBpbgorICAgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorICAgICo2NDQpIGNwX3VtYXNrPTEzMzs7CisgICAgKjc1NSkgY3BfdW1hc2s9MjI7OworCisgICAgKlswLTddKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorICAgICAgICB1X3BsdXNfcnc9CisgICAgICBlbHNlCisgICAgICAgIHVfcGx1c19ydz0nJSAyMDAnCisgICAgICBmaQorICAgICAgY3BfdW1hc2s9YGV4cHIgJygnIDc3NyAtICRtb2RlICUgMTAwMCAnKScgJHVfcGx1c19yd2A7OworICAgICopCisgICAgICBpZiB0ZXN0IC16ICIkc3RyaXBjbWQiOyB0aGVuCisgICAgICAgIHVfcGx1c19ydz0KKyAgICAgIGVsc2UKKyAgICAgICAgdV9wbHVzX3J3PSx1K3J3CisgICAgICBmaQorICAgICAgY3BfdW1hc2s9JG1vZGUkdV9wbHVzX3J3OzsKKyAgZXNhYworZmkKKworZm9yIHNyYworZG8KKyAgIyBQcm90ZWN0IG5hbWVzIHByb2JsZW1hdGljIGZvciAndGVzdCcgYW5kIG90aGVyIHV0aWxpdGllcy4KKyAgY2FzZSAkc3JjIGluCisgICAgLSogfCBbPVwoXCkhXSkgc3JjPS4vJHNyYzs7CisgIGVzYWMKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICBkc3Q9JHNyYworICAgIGRzdGRpcj0kZHN0CisgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICBkc3RkaXJfc3RhdHVzPSQ/CisgIGVsc2UKKworICAgICMgV2FpdGluZyBmb3IgdGhpcyB0byBiZSBkZXRlY3RlZCBieSB0aGUgIiRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kCisgICAgIyBtaWdodCBjYXVzZSBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkLCB3aGljaCB3b3VsZCBiZSBlc3BlY2lhbGx5IGJhZAorICAgICMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgorICAgIGlmIHRlc3QgISAtZiAiJHNyYyIgJiYgdGVzdCAhIC1kICIkc3JjIjsgdGhlbgorICAgICAgZWNobyAiJDA6ICRzcmMgZG9lcyBub3QgZXhpc3QuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisgICAgZHN0PSRkc3RfYXJnCisKKyAgICAjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyB3b24ndCB3b3JrCisgICAgIyBpZiBkb3VibGUgc2xhc2hlcyBhcmVuJ3QgaWdub3JlZC4KKyAgICBpZiB0ZXN0IC1kICIkZHN0IjsgdGhlbgorICAgICAgaWYgdGVzdCAiJGlzX3RhcmdldF9hX2RpcmVjdG9yeSIgPSBuZXZlcjsgdGhlbgorICAgICAgICBlY2hvICIkMDogJGRzdF9hcmc6IElzIGEgZGlyZWN0b3J5IiA+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICBmaQorICAgICAgZHN0ZGlyPSRkc3QKKyAgICAgIGRzdD0kZHN0ZGlyL2BiYXNlbmFtZSAiJHNyYyJgCisgICAgICBkc3RkaXJfc3RhdHVzPTAKKyAgICBlbHNlCisgICAgICBkc3RkaXI9YGRpcm5hbWUgIiRkc3QiYAorICAgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICAgIGRzdGRpcl9zdGF0dXM9JD8KKyAgICBmaQorICBmaQorCisgIG9ic29sZXRlX21rZGlyX3VzZWQ9ZmFsc2UKKworICBpZiB0ZXN0ICRkc3RkaXJfc3RhdHVzICE9IDA7IHRoZW4KKyAgICBjYXNlICRwb3NpeF9ta2RpciBpbgorICAgICAgJycpCisgICAgICAgICMgQ3JlYXRlIGludGVybWVkaWF0ZSBkaXJzIHVzaW5nIG1vZGUgNzU1IGFzIG1vZGlmaWVkIGJ5IHRoZSB1bWFzay4KKyAgICAgICAgIyBUaGlzIGlzIGxpa2UgRnJlZUJTRCAnaW5zdGFsbCcgYXMgb2YgMTk5Ny0xMC0yOC4KKyAgICAgICAgdW1hc2s9YHVtYXNrYAorICAgICAgICBjYXNlICRzdHJpcGNtZC4kdW1hc2sgaW4KKyAgICAgICAgICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKyAgICAgICAgICAqWzIzNjddWzIzNjddKSBta2Rpcl91bWFzaz0kdW1hc2s7OworICAgICAgICAgIC4qMFswMl1bMDJdIHwgLlswMl1bMDJdIHwgLlswMl0pIG1rZGlyX3VtYXNrPTIyOzsKKworICAgICAgICAgICpbMC03XSkKKyAgICAgICAgICAgIG1rZGlyX3VtYXNrPWBleHByICR1bWFzayArIDIyIFwKKyAgICAgICAgICAgICAgLSAkdW1hc2sgJSAxMDAgJSA0MCArICR1bWFzayAlIDIwIFwKKyAgICAgICAgICAgICAgLSAkdW1hc2sgJSAxMCAlIDQgKyAkdW1hc2sgJSAyCisgICAgICAgICAgICBgOzsKKyAgICAgICAgICAqKSBta2Rpcl91bWFzaz0kdW1hc2ssZ28tdzs7CisgICAgICAgIGVzYWMKKworICAgICAgICAjIFdpdGggLWQsIGNyZWF0ZSB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSB1c2VyLXNwZWNpZmllZCBtb2RlLgorICAgICAgICAjIE90aGVyd2lzZSwgcmVseSBvbiAkbWtkaXJfdW1hc2suCisgICAgICAgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICAgICAgICAgIG1rZGlyX21vZGU9LW0kbW9kZQorICAgICAgICBlbHNlCisgICAgICAgICAgbWtkaXJfbW9kZT0KKyAgICAgICAgZmkKKworICAgICAgICBwb3NpeF9ta2Rpcj1mYWxzZQorICAgICAgICBjYXNlICR1bWFzayBpbgorICAgICAgICAgICpbMTIzNTY3XVswLTddWzAtN10pCisgICAgICAgICAgICAjIFBPU0lYIG1rZGlyIC1wIHNldHMgdSt3eCBiaXRzIHJlZ2FyZGxlc3Mgb2YgdW1hc2ssIHdoaWNoCisgICAgICAgICAgICAjIGlzIGluY29tcGF0aWJsZSB3aXRoIEZyZWVCU0QgJ2luc3RhbGwnIHdoZW4gKHVtYXNrICYgMzAwKSAhPSAwLgorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgdG1wZGlyPSR7VE1QRElSLS90bXB9L2lucyRSQU5ET00tJCQKKyAgICAgICAgICAgIHRyYXAgJ3JldD0kPzsgcm1kaXIgIiR0bXBkaXIvZCIgIiR0bXBkaXIiIDI+L2Rldi9udWxsOyBleGl0ICRyZXQnIDAKKworICAgICAgICAgICAgaWYgKHVtYXNrICRta2Rpcl91bWFzayAmJgorICAgICAgICAgICAgICAgIGV4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJHRtcGRpci9kIikgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CisgICAgICAgICAgICAgICAgICAgIyBDaGVjayBmb3IgUE9TSVggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCAtbS4KKyAgICAgICAgICAgICAgICAgICAjIEhQLVVYIDExLjIzIGFuZCBJUklYIDYuNSBta2RpciAtbSAtcCBzZXRzIGdyb3VwLSBvcgorICAgICAgICAgICAgICAgICAgICMgb3RoZXItd3JpdGFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCisgICAgICAgICAgICAgICAgICAgIyBGcmVlQlNEIDYuMSBta2RpciAtbSAtcCBzZXRzIG1vZGUgb2YgZXhpc3RpbmcgZGlyZWN0b3J5LgorICAgICAgICAgICAgICAgICAgIGxzX2xkX3RtcGRpcj1gbHMgLWxkICIkdG1wZGlyImAKKyAgICAgICAgICAgICAgICAgICBjYXNlICRsc19sZF90bXBkaXIgaW4KKyAgICAgICAgICAgICAgICAgICAgIGQ/Pz8/LT9yLSopIGRpZmZlcmVudF9tb2RlPTcwMDs7CisgICAgICAgICAgICAgICAgICAgICBkPz8/Py0/LS0qKSBkaWZmZXJlbnRfbW9kZT03NTU7OworICAgICAgICAgICAgICAgICAgICAgKikgZmFsc2U7OworICAgICAgICAgICAgICAgICAgIGVzYWMgJiYKKyAgICAgICAgICAgICAgICAgICAkbWtkaXJwcm9nIC1tJGRpZmZlcmVudF9tb2RlIC1wIC0tICIkdG1wZGlyIiAmJiB7CisgICAgICAgICAgICAgICAgICAgICBsc19sZF90bXBkaXJfMT1gbHMgLWxkICIkdG1wZGlyImAKKyAgICAgICAgICAgICAgICAgICAgIHRlc3QgIiRsc19sZF90bXBkaXIiID0gIiRsc19sZF90bXBkaXJfMSIKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgdGhlbiBwb3NpeF9ta2Rpcj06CisgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgIHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIFJlbW92ZSBhbnkgZGlycyBsZWZ0IGJlaGluZCBieSBhbmNpZW50IG1rZGlyIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICAgICAgICAgcm1kaXIgLi8kbWtkaXJfbW9kZSAuLy1wIC4vLS0gMj4vZGV2L251bGwKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICB0cmFwICcnIDA7OworICAgICAgICBlc2FjOzsKKyAgICBlc2FjCisKKyAgICBpZgorICAgICAgJHBvc2l4X21rZGlyICYmICgKKyAgICAgICAgdW1hc2sgJG1rZGlyX3VtYXNrICYmCisgICAgICAgICRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIKKyAgICAgICkKKyAgICB0aGVuIDoKKyAgICBlbHNlCisKKyAgICAgICMgVGhlIHVtYXNrIGlzIHJpZGljdWxvdXMsIG9yIG1rZGlyIGRvZXMgbm90IGNvbmZvcm0gdG8gUE9TSVgsCisgICAgICAjIG9yIGl0IGZhaWxlZCBwb3NzaWJseSBkdWUgdG8gYSByYWNlIGNvbmRpdGlvbi4gIENyZWF0ZSB0aGUKKyAgICAgICMgZGlyZWN0b3J5IHRoZSBzbG93IHdheSwgc3RlcCBieSBzdGVwLCBjaGVja2luZyBmb3IgcmFjZXMgYXMgd2UgZ28uCisKKyAgICAgIGNhc2UgJGRzdGRpciBpbgorICAgICAgICAvKikgcHJlZml4PScvJzs7CisgICAgICAgIFstPVwoXCkhXSopIHByZWZpeD0nLi8nOzsKKyAgICAgICAgKikgIHByZWZpeD0nJzs7CisgICAgICBlc2FjCisKKyAgICAgIG9JRlM9JElGUworICAgICAgSUZTPS8KKyAgICAgIHNldCAtZgorICAgICAgc2V0IGZub3JkICRkc3RkaXIKKyAgICAgIHNoaWZ0CisgICAgICBzZXQgK2YKKyAgICAgIElGUz0kb0lGUworCisgICAgICBwcmVmaXhlcz0KKworICAgICAgZm9yIGQKKyAgICAgIGRvCisgICAgICAgIHRlc3QgWCIkZCIgPSBYICYmIGNvbnRpbnVlCisKKyAgICAgICAgcHJlZml4PSRwcmVmaXgkZAorICAgICAgICBpZiB0ZXN0IC1kICIkcHJlZml4IjsgdGhlbgorICAgICAgICAgIHByZWZpeGVzPQorICAgICAgICBlbHNlCisgICAgICAgICAgaWYgJHBvc2l4X21rZGlyOyB0aGVuCisgICAgICAgICAgICAodW1hc2s9JG1rZGlyX3VtYXNrICYmCisgICAgICAgICAgICAgJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIikgJiYgYnJlYWsKKyAgICAgICAgICAgICMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKyAgICAgICAgICAgIHRlc3QgLWQgIiRwcmVmaXgiIHx8IGV4aXQgMQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhc2UgJHByZWZpeCBpbgorICAgICAgICAgICAgICAqXCcqKSBxcHJlZml4PWBlY2hvICIkcHJlZml4IiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisgICAgICAgICAgICAgICopIHFwcmVmaXg9JHByZWZpeDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBwcmVmaXhlcz0iJHByZWZpeGVzICckcXByZWZpeCciCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgcHJlZml4PSRwcmVmaXgvCisgICAgICBkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVmaXhlcyI7IHRoZW4KKyAgICAgICAgIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgorICAgICAgICAodW1hc2sgJG1rZGlyX3VtYXNrICYmCisgICAgICAgICBldmFsICJcJGRvaXRfZXhlYyBcJG1rZGlycHJvZyAkcHJlZml4ZXMiKSB8fAorICAgICAgICAgIHRlc3QgLWQgIiRkc3RkaXIiIHx8IGV4aXQgMQorICAgICAgICBvYnNvbGV0ZV9ta2Rpcl91c2VkPXRydWUKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0ICIkb2Jzb2xldGVfbWtkaXJfdXNlZCRjaG93bmNtZCRjaGdycGNtZCIgPSBmYWxzZSB8fAorICAgICAgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3QiOyB9IHx8IGV4aXQgMQorICBlbHNlCisKKyAgICAjIE1ha2UgYSBjb3VwbGUgb2YgdGVtcCBmaWxlIG5hbWVzIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorICAgIGRzdHRtcD0kZHN0ZGlyL19pbnN0LiQkXworICAgIHJtdG1wPSRkc3RkaXIvX3JtLiQkXworCisgICAgIyBUcmFwIHRvIGNsZWFuIHVwIHRob3NlIHRlbXAgZmlsZXMgYXQgZXhpdC4KKyAgICB0cmFwICdyZXQ9JD87IHJtIC1mICIkZHN0dG1wIiAiJHJtdG1wIiAmJiBleGl0ICRyZXQnIDAKKworICAgICMgQ29weSB0aGUgZmlsZSBuYW1lIHRvIHRoZSB0ZW1wIG5hbWUuCisgICAgKHVtYXNrICRjcF91bWFzayAmJiAkZG9pdF9leGVjICRjcHByb2cgIiRzcmMiICIkZHN0dG1wIikgJiYKKworICAgICMgYW5kIHNldCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cy4KKyAgICAjCisgICAgIyBJZiBhbnkgb2YgdGhlc2UgZmFpbCwgd2UgYWJvcnQgdGhlIHdob2xlIHRoaW5nLiAgSWYgd2Ugd2FudCB0bworICAgICMgaWdub3JlIGVycm9ycyBmcm9tIGFueSBvZiB0aGVzZSwganVzdCBtYWtlIHN1cmUgbm90IHRvIGlnbm9yZQorICAgICMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZC4KKyAgICAjCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJHN0cmlwY21kIiB8fCAkZG9pdCAkc3RyaXBjbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdHRtcCI7IH0gJiYKKworICAgICMgSWYgLUMsIGRvbid0IGJvdGhlciB0byBjb3B5IGlmIGl0IHdvdWxkbid0IGNoYW5nZSB0aGUgZmlsZS4KKyAgICBpZiAkY29weV9vbl9jaGFuZ2UgJiYKKyAgICAgICBvbGQ9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3QiICAgICAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICBuZXc9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3R0bXAiICAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICBzZXQgLWYgJiYKKyAgICAgICBzZXQgWCAkb2xkICYmIG9sZD06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICBzZXQgWCAkbmV3ICYmIG5ldz06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICBzZXQgK2YgJiYKKyAgICAgICB0ZXN0ICIkb2xkIiA9ICIkbmV3IiAmJgorICAgICAgICRjbXBwcm9nICIkZHN0IiAiJGRzdHRtcCIgPi9kZXYvbnVsbCAyPiYxCisgICAgdGhlbgorICAgICAgcm0gLWYgIiRkc3R0bXAiCisgICAgZWxzZQorICAgICAgIyBSZW5hbWUgdGhlIGZpbGUgdG8gdGhlIHJlYWwgZGVzdGluYXRpb24uCisgICAgICAkZG9pdCAkbXZjbWQgLWYgIiRkc3R0bXAiICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorCisgICAgICAjIFRoZSByZW5hbWUgZmFpbGVkLCBwZXJoYXBzIGJlY2F1c2UgbXYgY2FuJ3QgcmVuYW1lIHNvbWV0aGluZyBlbHNlCisgICAgICAjIHRvIGl0c2VsZiwgb3IgcGVyaGFwcyBiZWNhdXNlIG12IGlzIHNvIGFuY2llbnQgdGhhdCBpdCBkb2VzIG5vdAorICAgICAgIyBzdXBwb3J0IC1mLgorICAgICAgeworICAgICAgICAjIE5vdyByZW1vdmUgb3IgbW92ZSBhc2lkZSBhbnkgb2xkIGZpbGUgYXQgZGVzdGluYXRpb24gbG9jYXRpb24uCisgICAgICAgICMgV2UgdHJ5IHRoaXMgdHdvIHdheXMgc2luY2Ugcm0gY2FuJ3QgdW5saW5rIGl0c2VsZiBvbiBzb21lCisgICAgICAgICMgc3lzdGVtcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbWlnaHQgYmUgYnVzeSBmb3Igb3RoZXIKKyAgICAgICAgIyByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCB0aGUgZmluYWwgY2xlYW51cCBtaWdodCBmYWlsIGJ1dCB0aGUgbmV3CisgICAgICAgICMgZmlsZSBzaG91bGQgc3RpbGwgaW5zdGFsbCBzdWNjZXNzZnVsbHkuCisgICAgICAgIHsKKyAgICAgICAgICB0ZXN0ICEgLWYgIiRkc3QiIHx8CisgICAgICAgICAgJGRvaXQgJHJtY21kIC1mICIkZHN0IiAyPi9kZXYvbnVsbCB8fAorICAgICAgICAgIHsgJGRvaXQgJG12Y21kIC1mICIkZHN0IiAiJHJtdG1wIiAyPi9kZXYvbnVsbCAmJgorICAgICAgICAgICAgeyAkZG9pdCAkcm1jbWQgLWYgIiRybXRtcCIgMj4vZGV2L251bGw7IDo7IH0KKyAgICAgICAgICB9IHx8CisgICAgICAgICAgeyBlY2hvICIkMDogY2Fubm90IHVubGluayBvciByZW5hbWUgJGRzdCIgPiYyCisgICAgICAgICAgICAoZXhpdCAxKTsgZXhpdCAxCisgICAgICAgICAgfQorICAgICAgICB9ICYmCisKKyAgICAgICAgIyBOb3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorICAgICAgICAkZG9pdCAkbXZjbWQgIiRkc3R0bXAiICIkZHN0IgorICAgICAgfQorICAgIGZpIHx8IGV4aXQgMQorCisgICAgdHJhcCAnJyAwCisgIGZpCitkb25lCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2Rpc3QyL2xpYnBjcmUyLTE2LnBjLmluIGIvZGlzdDIvbGlicGNyZTItMTYucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc4MDQwZAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2xpYnBjcmUyLTE2LnBjLmluCkBAIC0wLDAgKzEsMTMgQEAKKyMgUGFja2FnZSBJbmZvcm1hdGlvbiBmb3IgcGtnLWNvbmZpZworCitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKworTmFtZTogbGlicGNyZTItMTYKK0Rlc2NyaXB0aW9uOiBQQ1JFMiAtIFBlcmwgY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIEMgbGlicmFyeSAoMm5kIEFQSSkgd2l0aCAxNiBiaXQgY2hhcmFjdGVyIHN1cHBvcnQKK1ZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACitMaWJzOiAtTCR7bGliZGlyfSAtbHBjcmUyLTE2CitMaWJzLnByaXZhdGU6IEBQVEhSRUFEX0NGTEFHU0AgQFBUSFJFQURfTElCU0AKK0NmbGFnczogLUkke2luY2x1ZGVkaXJ9IEBQQ1JFMl9TVEFUSUNfQ0ZMQUdACmRpZmYgLS1naXQgYS9kaXN0Mi9saWJwY3JlMi0zMi5wYy5pbiBiL2Rpc3QyL2xpYnBjcmUyLTMyLnBjLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZmIxODcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9saWJwY3JlMi0zMi5wYy5pbgpAQCAtMCwwICsxLDEzIEBACisjIFBhY2thZ2UgSW5mb3JtYXRpb24gZm9yIHBrZy1jb25maWcKKworcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6IGxpYnBjcmUyLTMyCitEZXNjcmlwdGlvbjogUENSRTIgLSBQZXJsIGNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyBDIGxpYnJhcnkgKDJuZCBBUEkpIHdpdGggMzIgYml0IGNoYXJhY3RlciBzdXBwb3J0CitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorTGliczogLUwke2xpYmRpcn0gLWxwY3JlMi0zMgorTGlicy5wcml2YXRlOiBAUFRIUkVBRF9DRkxBR1NAIEBQVEhSRUFEX0xJQlNACitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAUENSRTJfU1RBVElDX0NGTEFHQApkaWZmIC0tZ2l0IGEvZGlzdDIvbGlicGNyZTItOC5wYy5pbiBiL2Rpc3QyL2xpYnBjcmUyLTgucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM4NzJkMAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2xpYnBjcmUyLTgucGMuaW4KQEAgLTAsMCArMSwxMyBAQAorIyBQYWNrYWdlIEluZm9ybWF0aW9uIGZvciBwa2ctY29uZmlnCisKK3ByZWZpeD1AcHJlZml4QAorZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAorbGliZGlyPUBsaWJkaXJACitpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorCitOYW1lOiBsaWJwY3JlMi04CitEZXNjcmlwdGlvbjogUENSRTIgLSBQZXJsIGNvbXBhdGlibGUgcmVndWxhciBleHByZXNzaW9ucyBDIGxpYnJhcnkgKDJuZCBBUEkpIHdpdGggOCBiaXQgY2hhcmFjdGVyIHN1cHBvcnQKK1ZlcnNpb246IEBQQUNLQUdFX1ZFUlNJT05ACitMaWJzOiAtTCR7bGliZGlyfSAtbHBjcmUyLTgKK0xpYnMucHJpdmF0ZTogQFBUSFJFQURfQ0ZMQUdTQCBAUFRIUkVBRF9MSUJTQAorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gQFBDUkUyX1NUQVRJQ19DRkxBR0AKZGlmZiAtLWdpdCBhL2Rpc3QyL2xpYnBjcmUyLXBvc2l4LnBjLmluIGIvZGlzdDIvbGlicGNyZTItcG9zaXgucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0MTU1NQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL2xpYnBjcmUyLXBvc2l4LnBjLmluCkBAIC0wLDAgKzEsMTMgQEAKKyMgUGFja2FnZSBJbmZvcm1hdGlvbiBmb3IgcGtnLWNvbmZpZworCitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2xpYmRpcj1AbGliZGlyQAoraW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKKworTmFtZTogbGlicGNyZTItcG9zaXgKK0Rlc2NyaXB0aW9uOiBQb3NpeCBjb21wYXRpYmxlIGludGVyZmFjZSB0byBsaWJwY3JlMi04CitWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAorTGliczogLUwke2xpYmRpcn0gLWxwY3JlMi1wb3NpeAorQ2ZsYWdzOiAtSSR7aW5jbHVkZWRpcn0gQFBDUkUyX1NUQVRJQ19DRkxBR0AKK1JlcXVpcmVzLnByaXZhdGU6IGxpYnBjcmUyLTgKZGlmZiAtLWdpdCBhL2Rpc3QyL2x0bWFpbi5zaCBiL2Rpc3QyL2x0bWFpbi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjBhMmRhCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvbHRtYWluLnNoCkBAIC0wLDAgKzEsMTExNDcgQEAKKyMhIC9iaW4vc2gKKyMjIERPIE5PVCBFRElUIC0gVGhpcyBmaWxlIGdlbmVyYXRlZCBmcm9tIC4vYnVpbGQtYXV4L2x0bWFpbi5pbgorIyMgICAgICAgICAgICAgICBieSBpbmxpbmUtc291cmNlIHYyMDE0LTAxLTAzLjAxCisKKyMgbGlidG9vbCAoR05VIGxpYnRvb2wpIDIuNC42CisjIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworCitQUk9HUkFNPWxpYnRvb2wKK1BBQ0tBR0U9bGlidG9vbAorVkVSU0lPTj0yLjQuNgorcGFja2FnZV9yZXZpc2lvbj0yLjQuNgorCisKKyMjIC0tLS0tLSAjIworIyMgVXNhZ2UuICMjCisjIyAtLS0tLS0gIyMKKworIyBSdW4gJy4vbGlidG9vbCAtLWhlbHAnIGZvciBoZWxwIHdpdGggdXNpbmcgdGhpcyBzY3JpcHQgZnJvbSB0aGUKKyMgY29tbWFuZCBsaW5lLgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFVzZXIgb3ZlcnJpZGFibGUgY29tbWFuZCBwYXRocy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBBZnRlciBjb25maWd1cmUgY29tcGxldGVzLCBpdCBoYXMgYSBiZXR0ZXIgaWRlYSBvZiBzb21lIG9mIHRoZQorIyBzaGVsbCB0b29scyB3ZSBuZWVkIHRoYW4gdGhlIGRlZmF1bHRzIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyBzaGFyZWQKKyMgd2l0aCBib290c3RyYXAsIHNvIHNldCB0aG9zZSBoZXJlIHdoZXJlIHRoZXkgY2FuIHN0aWxsIGJlIG92ZXItCisjIHJpZGRlbiBieSB0aGUgdXNlciwgYnV0IG90aGVyd2lzZSB0YWtlIHByZWNlZGVuY2UuCisKKzogJHtBVVRPQ09ORj0iYXV0b2NvbmYifQorOiAke0FVVE9NQUtFPSJhdXRvbWFrZSJ9CisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFNvdXJjZSBleHRlcm5hbCBsaWJyYXJpZXMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIE11Y2ggb2Ygb3VyIGxvdy1sZXZlbCBmdW5jdGlvbmFsaXR5IG5lZWRzIHRvIGJlIHNvdXJjZWQgZnJvbSBleHRlcm5hbAorIyBsaWJyYXJpZXMsIHdoaWNoIGFyZSBpbnN0YWxsZWQgdG8gJHBrZ2F1eGRpci4KKworIyBTZXQgYSB2ZXJzaW9uIHN0cmluZyBmb3IgdGhpcyBzY3JpcHQuCitzY3JpcHR2ZXJzaW9uPTIwMTUtMDEtMjAuMTc7ICMgVVRDCisKKyMgR2VuZXJhbCBzaGVsbCBzY3JpcHQgYm9pbGVyIHBsYXRlLCBhbmQgaGVscGVyIGZ1bmN0aW9ucy4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKworIyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91IGRpc3RyaWJ1dGUKKyMgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdCBpcyBidWlsdCB1c2luZyBHTlUgTGlidG9vbCwKKyMgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlCisjIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVMgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJvcG9zZSBwYXRjaGVzIHRvIGdhcnlAZ251Lm9yZy4KKworCisjIyAtLS0tLS0gIyMKKyMjIFVzYWdlLiAjIworIyMgLS0tLS0tICMjCisKKyMgRXZhbHVhdGUgdGhpcyBmaWxlIG5lYXIgdGhlIHRvcCBvZiB5b3VyIHNjcmlwdCB0byBnYWluIGFjY2VzcyB0bworIyB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgZGVmaW5lZCBoZXJlOgorIworIyAgIC4gYGVjaG8gIiQwIiB8ICR7U0VELXNlZH0gJ3N8W14vXSokfHwnYC9idWlsZC1hdXgvZnVuY2xpYi5zaAorIworIyBJZiB5b3UgbmVlZCB0byBvdmVycmlkZSBhbnkgb2YgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgdmFyaWFibGUKKyMgc2V0dGluZ3MsIGRvIHRoYXQgYmVmb3JlIGV2YWx1YXRpbmcgdGhpcyBmaWxlLgorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBTaGVsbCBub3JtYWxpc2F0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBTb21lIHNoZWxscyBuZWVkIGEgbGl0dGxlIGhlbHAgdG8gYmUgYXMgQm91cm5lIGNvbXBhdGlibGUgYXMgcG9zc2libGUuCisjIEJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBtYWtlIHN1cmUgYWxsIHRoYXQgaGVscCBoYXMgYmVlbiBwcm92aWRlZCEKKworRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgZW11bGF0ZSBzaAorICBOVUxMQ01EPToKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorZWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7IGVzYWMKK2ZpCisKKyMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyBpbiBjYXNlIHRoZXkgYXJlIHJlcXVpcmVkIGxhdGVyLgorX0dfdXNlcl9sb2NhbGU9CitfR19zYWZlX2xvY2FsZT0KK2ZvciBfR192YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUworZG8KKyAgZXZhbCAiaWYgdGVzdCBzZXQgPSBcIlwkeyRfR192YXIrc2V0fVwiOyB0aGVuCisgICAgICAgICAgc2F2ZV8kX0dfdmFyPVwkJF9HX3ZhcgorICAgICAgICAgICRfR192YXI9QworCSAgZXhwb3J0ICRfR192YXIKKwkgIF9HX3VzZXJfbG9jYWxlPVwiJF9HX3Zhcj1cXFwkc2F2ZV9cJF9HX3ZhcjsgXCRfR191c2VyX2xvY2FsZVwiCisJICBfR19zYWZlX2xvY2FsZT1cIiRfR192YXI9QzsgXCRfR19zYWZlX2xvY2FsZVwiCisJZmkiCitkb25lCisKKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisjIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAorc3A9JyAnCitubD0nCisnCitJRlM9IiRzcAkkbmwiCisKKyMgVGhlcmUgYXJlIGFwcGFyZW50bHkgc29tZSByZXRhcmRlZCBzeXN0ZW1zIHRoYXQgdXNlICc7JyBhcyBhIFBBVEggc2VwYXJhdG9yIQoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTG9jYXRlIGNvbW1hbmQgdXRpbGl0aWVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisKKyMgZnVuY19leGVjdXRhYmxlX3AgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRoYXQgRklMRSBpcyBhbiBleGVjdXRhYmxlIHJlZ3VsYXIgZmlsZS4KK2Z1bmNfZXhlY3V0YWJsZV9wICgpCit7CisgICAgdGVzdCAtZiAiJDEiICYmIHRlc3QgLXggIiQxIgorfQorCisKKyMgZnVuY19wYXRoX3Byb2dzIFBST0dTX0xJU1QgQ0hFQ0tfRlVOQyBbUEFUSF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VhcmNoIGZvciBlaXRoZXIgYSBwcm9ncmFtIHRoYXQgcmVzcG9uZHMgdG8gLS12ZXJzaW9uIHdpdGggb3V0cHV0CisjIGNvbnRhaW5pbmcgIkdOVSIsIG9yIGVsc2UgcmV0dXJuZWQgYnkgQ0hFQ0tfRlVOQyBvdGhlcndpc2UsIGJ5CisjIHRyeWluZyBhbGwgdGhlIGRpcmVjdG9yaWVzIGluIFBBVEggd2l0aCBlYWNoIG9mIHRoZSBlbGVtZW50cyBvZgorIyBQUk9HU19MSVNULgorIworIyBDSEVDS19GVU5DIHNob3VsZCBhY2NlcHQgdGhlIHBhdGggdG8gYSBjYW5kaWRhdGUgcHJvZ3JhbSwgYW5kCisjIHNldCAkZnVuY19jaGVja19wcm9nX3Jlc3VsdCBpZiBpdCB0cnVuY2F0ZXMgaXRzIG91dHB1dCBsZXNzIHRoYW4KKyMgJF9HX3BhdGhfcHJvZ19tYXggY2hhcmFjdGVycy4KK2Z1bmNfcGF0aF9wcm9ncyAoKQoreworICAgIF9HX3Byb2dzX2xpc3Q9JDEKKyAgICBfR19jaGVja19mdW5jPSQyCisgICAgX0dfUEFUSD0kezMtIiRQQVRIIn0KKworICAgIF9HX3BhdGhfcHJvZ19tYXg9MAorICAgIF9HX3BhdGhfcHJvZ19mb3VuZD1mYWxzZQorICAgIF9HX3NhdmVfSUZTPSRJRlM7IElGUz0ke1BBVEhfU0VQQVJBVE9SLTp9CisgICAgZm9yIF9HX2RpciBpbiAkX0dfUEFUSDsgZG8KKyAgICAgIElGUz0kX0dfc2F2ZV9JRlMKKyAgICAgIHRlc3QgLXogIiRfR19kaXIiICYmIF9HX2Rpcj0uCisgICAgICBmb3IgX0dfcHJvZ19uYW1lIGluICRfR19wcm9nc19saXN0OyBkbworICAgICAgICBmb3IgX2V4ZWV4dCBpbiAnJyAuRVhFOyBkbworICAgICAgICAgIF9HX3BhdGhfcHJvZz0kX0dfZGlyLyRfR19wcm9nX25hbWUkX2V4ZWV4dAorICAgICAgICAgIGZ1bmNfZXhlY3V0YWJsZV9wICIkX0dfcGF0aF9wcm9nIiB8fCBjb250aW51ZQorICAgICAgICAgIGNhc2UgYCIkX0dfcGF0aF9wcm9nIiAtLXZlcnNpb24gMj4mMWAgaW4KKyAgICAgICAgICAgICpHTlUqKSBmdW5jX3BhdGhfcHJvZ3NfcmVzdWx0PSRfR19wYXRoX3Byb2cgX0dfcGF0aF9wcm9nX2ZvdW5kPTogOzsKKyAgICAgICAgICAgICopICAgICAkX0dfY2hlY2tfZnVuYyAkX0dfcGF0aF9wcm9nCisJCSAgIGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQ9JGZ1bmNfY2hlY2tfcHJvZ19yZXN1bHQKKwkJICAgOzsKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgJF9HX3BhdGhfcHJvZ19mb3VuZCAmJiBicmVhayAzCisgICAgICAgIGRvbmUKKyAgICAgIGRvbmUKKyAgICBkb25lCisgICAgSUZTPSRfR19zYXZlX0lGUworICAgIHRlc3QgLXogIiRmdW5jX3BhdGhfcHJvZ3NfcmVzdWx0IiAmJiB7CisgICAgICBlY2hvICJubyBhY2NlcHRhYmxlIHNlZCBjb3VsZCBiZSBmb3VuZCBpbiBcJFBBVEgiID4mMgorICAgICAgZXhpdCAxCisgICAgfQorfQorCisKKyMgV2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgZnVuY3Rpb25zIGluIHRoaXMgZmlsZSBiZWZvcmUgY29uZmlndXJlCisjIGhhcyBmaWd1cmVkIG91dCB3aGVyZSB0aGUgYmVzdCBiaW5hcmllcyBhcmUga2VwdCwgd2hpY2ggbWVhbnMgd2UgaGF2ZQorIyB0byBzZWFyY2ggZm9yIHRoZW0gb3Vyc2VsdmVzIC0gZXhjZXB0IHdoZW4gdGhlIHJlc3VsdHMgYXJlIGFscmVhZHkgc2V0CisjIHdoZXJlIHdlIHNraXAgdGhlIHNlYXJjaGVzLgorCisjIFVubGVzcyB0aGUgdXNlciBvdmVycmlkZXMgYnkgc2V0dGluZyBTRUQsIHNlYXJjaCB0aGUgcGF0aCBmb3IgZWl0aGVyIEdOVQorIyBzZWQsIG9yIHRoZSBzZWQgdGhhdCB0cnVuY2F0ZXMgaXRzIG91dHB1dCB0aGUgbGVhc3QuCit0ZXN0IC16ICIkU0VEIiAmJiB7CisgIF9HX3NlZF9zY3JpcHQ9cy9hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYS9iYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIvCisgIGZvciBfR19pIGluIDEgMiAzIDQgNSA2IDc7IGRvCisgICAgX0dfc2VkX3NjcmlwdD0kX0dfc2VkX3NjcmlwdCRubCRfR19zZWRfc2NyaXB0CisgIGRvbmUKKyAgZWNobyAiJF9HX3NlZF9zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCisgIF9HX3NlZF9zY3JpcHQ9CisKKyAgZnVuY19jaGVja19wcm9nX3NlZCAoKQorICB7CisgICAgX0dfcGF0aF9wcm9nPSQxCisKKyAgICBfR19jb3VudD0wCisgICAgcHJpbnRmIDAxMjM0NTY3ODkgPmNvbmZ0ZXN0LmluCisgICAgd2hpbGUgOgorICAgIGRvCisgICAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgICAgZWNobyAnJyA+PiBjb25mdGVzdC5ubAorICAgICAgIiRfR19wYXRoX3Byb2ciIC1mIGNvbmZ0ZXN0LnNlZCA8Y29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgICAgZGlmZiBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgICBfR19jb3VudD1gZXhwciAkX0dfY291bnQgKyAxYAorICAgICAgaWYgdGVzdCAiJF9HX2NvdW50IiAtZ3QgIiRfR19wYXRoX3Byb2dfbWF4IjsgdGhlbgorICAgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgICAgZnVuY19jaGVja19wcm9nX3Jlc3VsdD0kX0dfcGF0aF9wcm9nCisgICAgICAgIF9HX3BhdGhfcHJvZ19tYXg9JF9HX2NvdW50CisgICAgICBmaQorICAgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgICAgdGVzdCAxMCAtbHQgIiRfR19jb3VudCIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dAorICB9CisKKyAgZnVuY19wYXRoX3Byb2dzICJzZWQgZ3NlZCIgZnVuY19jaGVja19wcm9nX3NlZCAkUEFUSDovdXNyL3hwZzQvYmluCisgIHJtIC1mIGNvbmZ0ZXN0LnNlZAorICBTRUQ9JGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQKK30KKworCisjIFVubGVzcyB0aGUgdXNlciBvdmVycmlkZXMgYnkgc2V0dGluZyBHUkVQLCBzZWFyY2ggdGhlIHBhdGggZm9yIGVpdGhlciBHTlUKKyMgZ3JlcCwgb3IgdGhlIGdyZXAgdGhhdCB0cnVuY2F0ZXMgaXRzIG91dHB1dCB0aGUgbGVhc3QuCit0ZXN0IC16ICIkR1JFUCIgJiYgeworICBmdW5jX2NoZWNrX3Byb2dfZ3JlcCAoKQorICB7CisgICAgX0dfcGF0aF9wcm9nPSQxCisKKyAgICBfR19jb3VudD0wCisgICAgX0dfcGF0aF9wcm9nX21heD0wCisgICAgcHJpbnRmIDAxMjM0NTY3ODkgPmNvbmZ0ZXN0LmluCisgICAgd2hpbGUgOgorICAgIGRvCisgICAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAorICAgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgICAgZWNobyAnR1JFUCcgPj4gY29uZnRlc3QubmwKKyAgICAgICIkX0dfcGF0aF9wcm9nIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8Y29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgICAgZGlmZiBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgICBfR19jb3VudD1gZXhwciAkX0dfY291bnQgKyAxYAorICAgICAgaWYgdGVzdCAiJF9HX2NvdW50IiAtZ3QgIiRfR19wYXRoX3Byb2dfbWF4IjsgdGhlbgorICAgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKKyAgICAgICAgZnVuY19jaGVja19wcm9nX3Jlc3VsdD0kX0dfcGF0aF9wcm9nCisgICAgICAgIF9HX3BhdGhfcHJvZ19tYXg9JF9HX2NvdW50CisgICAgICBmaQorICAgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgICAgdGVzdCAxMCAtbHQgIiRfR19jb3VudCIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dAorICB9CisKKyAgZnVuY19wYXRoX3Byb2dzICJncmVwIGdncmVwIiBmdW5jX2NoZWNrX3Byb2dfZ3JlcCAkUEFUSDovdXNyL3hwZzQvYmluCisgIEdSRVA9JGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQKK30KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVc2VyIG92ZXJyaWRhYmxlIGNvbW1hbmQgcGF0aHMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQWxsIHVwcGVyY2FzZSB2YXJpYWJsZSBuYW1lcyBhcmUgdXNlZCBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgVGhlc2UKKyMgdmFyaWFibGVzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyIGJlZm9yZSBjYWxsaW5nIGEgc2NyaXB0IHRoYXQKKyMgdXNlcyB0aGVtIGlmIGEgc3VpdGFibGUgY29tbWFuZCBvZiB0aGF0IG5hbWUgaXMgbm90IGFscmVhZHkgYXZhaWxhYmxlCisjIGluIHRoZSBjb21tYW5kIHNlYXJjaCBQQVRILgorCis6ICR7Q1A9ImNwIC1mIn0KKzogJHtFQ0hPPSJwcmludGYgJXNcbiJ9Cis6ICR7RUdSRVA9IiRHUkVQIC1FIn0KKzogJHtGR1JFUD0iJEdSRVAgLUYifQorOiAke0xOX1M9ImxuIC1zIn0KKzogJHtNQUtFPSJtYWtlIn0KKzogJHtNS0RJUj0ibWtkaXIifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKzogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVc2VmdWwgc2VkIHNuaXBwZXRzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworc2VkX2Rpcm5hbWU9J3N8L1teL10qJHx8Jworc2VkX2Jhc2VuYW1lPSdzfF4uKi98fCcKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0nc3xcKFtgIiRcXF1cKXxcXFwxfGcnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorc2VkX2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKKyMgc3RyaW5nIGxpdGVyYWxseS4KK3NlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3N8W10uW14kXFwqXC9dfFxcJnxnJworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBjb252ZXJ0cyBhIHczMiBmaWxlIG5hbWUgb3IgcGF0aAorIyB0aGF0IGNvbnRhaW5zIGZvcndhcmQgc2xhc2hlcywgaW50byBvbmUgdGhhdCBjb250YWlucworIyAoZXNjYXBlZCkgYmFja3NsYXNoZXMuICBBIHZlcnkgbmFpdmUgaW1wbGVtZW50YXRpb24uCitzZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisKKyMgUmUtJ1wnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBzZWRfZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQKKyMgd2VyZSAnXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mICdcJyBwcmVjZWRlZCBhCisjICckJyBpbiBpbnB1dCB0byBzZWRfZG91YmxlX3F1b3RlX3N1YnN0LCB0aGF0ICckJyB3YXMgcHJvdGVjdGVkIGZyb20KKyMgZXhwYW5zaW9uLiAgU2luY2UgZWFjaCBpbnB1dCAnXCcgaXMgbm93IHR3byAnXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyCisjIG9mIHJ1bnMgb2YgZm91ciAnXCdzIGZvbGxvd2VkIGJ5IHR3byAnXCdzIGFuZCB0aGVuIGEgJyQnLiAgJ1wnIHRoYXQgJyQnLgorX0dfYnM9J1xcJworX0dfYnMyPSdcXFxcJworX0dfYnM0PSdcXFxcXFxcXCcKK19HX2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRfR19iczQvJlxcCisvZworICBzL14kX0dfYnMyJF9HX2RvbGxhci8kX0dfYnMmLworICBzL1xcKFteJF9HX2JzXVxcKSRfR19iczIkX0dfZG9sbGFyL1xcMSRfR19iczIkX0dfYnMkX0dfZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgR2xvYmFsIHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgRXhjZXB0IGZvciB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBleHBsaWNpdGx5IGxpc3RlZCBiZWxvdywgdGhlIGZvbGxvd2luZworIyBmdW5jdGlvbnMgaW4gdGhlICdeZnVuY18nIG5hbWVzcGFjZSwgYW5kIHRoZSAnXnJlcXVpcmVfJyBuYW1lc3BhY2UKKyMgdmFyaWFibGVzIGluaXRpYWxpc2VkIGluIHRoZSAnUmVzb3VyY2UgbWFuYWdlbWVudCcgc2VjdGlvbiwgc291cmNpbmcKKyMgdGhpcyBmaWxlIHdpbGwgbm90IHBvbGx1dGUgeW91ciBnbG9iYWwgbmFtZXNwYWNlIHdpdGggYW55dGhpbmcKKyMgZWxzZS4gVGhlcmUncyBubyBwb3J0YWJsZSB3YXkgdG8gc2NvcGUgdmFyaWFibGVzIGluIEJvdXJuZSBzaGVsbAorIyB0aG91Z2gsIHNvIGFjdHVhbGx5IHJ1bm5pbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgc29tZXRpbWVzIHBsYWNlCisjIHJlc3VsdHMgaW50byBhIHZhcmlhYmxlIG5hbWVkIGFmdGVyIHRoZSBmdW5jdGlvbiwgYW5kIG9mdGVuIHVzZQorIyB0ZW1wb3JhcnkgdmFyaWFibGVzIGluIHRoZSAnXl9HXycgbmFtZXNwYWNlLiBJZiB5b3UgYXJlIGNhcmVmdWwgdG8KKyMgYXZvaWQgdXNpbmcgdGhvc2UgbmFtZXNwYWNlcyBjYXN1YWxseSBpbiB5b3VyIHNvdXJjaW5nIHNjcmlwdCwgdGhpbmdzCisjIHNob3VsZCBjb250aW51ZSB0byB3b3JrIGFzIHlvdSBleHBlY3QuIEFuZCwgb2YgY291cnNlLCB5b3UgY2FuIGZyZWVseQorIyBvdmVyd3JpdGUgYW55IG9mIHRoZSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGRlZmluZWQgaGVyZSBiZWZvcmUKKyMgY2FsbGluZyBhbnl0aGluZyB0byBjdXN0b21pemUgdGhlbS4KKworRVhJVF9TVUNDRVNTPTAKK0VYSVRfRkFJTFVSRT0xCitFWElUX01JU01BVENIPTYzICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCitFWElUX1NLSVA9NzcJICAjICQ/ID0gNzcgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHNraXBwZWQgdGVzdCB0byBhdXRvbWFrZS4KKworIyBBbGxvdyBvdmVycmlkaW5nLCBlZyBhc3N1bWluZyB0aGF0IHlvdSBmb2xsb3cgdGhlIGNvbnZlbnRpb24gb2YKKyMgcHV0dGluZyAnJGRlYnVnX2NtZCcgYXQgdGhlIHN0YXJ0IG9mIGFsbCB5b3VyIGZ1bmN0aW9ucywgeW91IGNhbiBnZXQKKyMgYmFzaCB0byBzaG93IGZ1bmN0aW9uIGNhbGwgdHJhY2Ugd2l0aDoKKyMKKyMgICAgZGVidWdfY21kPSdldmFsIGVjaG8gIiR7RlVOQ05BTUVbMF19ICQqIiA+JjInIGJhc2ggeW91ci1zY3JpcHQtbmFtZQorZGVidWdfY21kPSR7ZGVidWdfY21kLSI6In0KK2V4aXRfY21kPToKKworIyBCeSBjb252ZW50aW9uLCBmaW5pc2ggeW91ciBzY3JpcHQgd2l0aDoKKyMKKyMgICAgZXhpdCAkZXhpdF9zdGF0dXMKKyMKKyMgc28gdGhhdCB5b3UgY2FuIHNldCBleGl0X3N0YXR1cyB0byBub24temVybyBpZiB5b3Ugd2FudCB0byBpbmRpY2F0ZQorIyBzb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgZXhlY3V0aW9uIHdpdGhvdXQgYWN0dWFsbHkgYmFpbGluZyBvdXQgYXQKKyMgdGhlIHBvaW50IG9mIGZhaWx1cmUuCitleGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCisKKyMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAorIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKKyMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCisjIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKKyMgZnVuY3Rpb24uCitwcm9ncGF0aD0kMAorCisjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbS4KK3Byb2duYW1lPWAkRUNITyAiJHByb2dwYXRoIiB8JFNFRCAiJHNlZF9iYXNlbmFtZSJgCisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcHJvZ3BhdGggZm9yIHJlZXhlY3V0aW9uOgorY2FzZSAkcHJvZ3BhdGggaW4KKyAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKKyAgKltcXC9dKikKKyAgICAgcHJvZ2Rpcj1gJEVDSE8gIiRwcm9ncGF0aCIgfCRTRUQgIiRzZWRfZGlybmFtZSJgCisgICAgIHByb2dkaXI9YGNkICIkcHJvZ2RpciIgJiYgcHdkYAorICAgICBwcm9ncGF0aD0kcHJvZ2Rpci8kcHJvZ25hbWUKKyAgICAgOzsKKyAgKikKKyAgICAgX0dfSUZTPSRJRlMKKyAgICAgSUZTPSR7UEFUSF9TRVBBUkFUT1ItOn0KKyAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCisgICAgICAgSUZTPSRfR19JRlMKKyAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCisgICAgIGRvbmUKKyAgICAgSUZTPSRfR19JRlMKKyAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAKKyAgICAgcHJvZ3BhdGg9JHByb2dkaXIvJHByb2duYW1lCisgICAgIDs7Citlc2FjCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFN0YW5kYXJkIG9wdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhZmZlY3QgdGhlIG9wZXJhdGlvbiBvZiB0aGUgZnVuY3Rpb25zIGRlZmluZWQKKyMgYmVsb3csIGFuZCBzaG91bGQgYmUgc2V0IGFwcHJvcHJpYXRlbHkgZGVwZW5kaW5nIG9uIHJ1bi10aW1lIHBhcmEtCisjIG1ldGVycyBwYXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9xdWlldD1mYWxzZQorb3B0X3ZlcmJvc2U9ZmFsc2UKKworIyBDYXRlZ29yaWVzICdhbGwnIGFuZCAnbm9uZScgYXJlIGFsd2F5cyBhdmFpbGFibGUuICBBcHBlbmQgYW55IG90aGVycworIyB5b3Ugd2lsbCBwYXNzIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBmdW5jX3dhcm5pbmcgZnJvbSB5b3VyIG93bgorIyBjb2RlLgord2FybmluZ19jYXRlZ29yaWVzPQorCisjIEJ5IGRlZmF1bHQsIGRpc3BsYXkgd2FybmluZ3MgYWNjb3JkaW5nIHRvICdvcHRfd2FybmluZ190eXBlcycuICBTZXQKKyMgJ3dhcm5pbmdfZnVuYycgIHRvICc6JyB0byBlbGlkZSBhbGwgd2FybmluZ3MsIG9yIGZ1bmNfZmF0YWxfZXJyb3IgdG8KKyMgdHJlYXQgdGhlIG5leHQgZGlzcGxheWVkIHdhcm5pbmcgYXMgYSBmYXRhbCBlcnJvci4KK3dhcm5pbmdfZnVuYz1mdW5jX3dhcm5fYW5kX2NvbnRpbnVlCisKKyMgU2V0IHRvICdhbGwnIHRvIGRpc3BsYXkgYWxsIHdhcm5pbmdzLCAnbm9uZScgdG8gc3VwcHJlc3MgYWxsCisjIHdhcm5pbmdzLCBvciBhIHNwYWNlIGRlbGltaXRlZCBsaXN0IG9mIHNvbWUgc3Vic2V0IG9mCisjICd3YXJuaW5nX2NhdGVnb3JpZXMnIHRvIGRpc3BsYXkgb25seSB0aGUgbGlzdGVkIHdhcm5pbmdzLgorb3B0X3dhcm5pbmdfdHlwZXM9YWxsCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlc291cmNlIG1hbmFnZW1lbnQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoaXMgc2VjdGlvbiBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgZnVuY3Rpb25zIHRoYXQgZWFjaCBlbnN1cmUgYQorIyBwYXJ0aWN1bGFyIHJlc291cmNlIChhIGZpbGUsIG9yIGEgbm9uLWVtcHR5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yCisjIGV4YW1wbGUpIGlzIGF2YWlsYWJsZSwgYW5kIGlmIGFwcHJvcHJpYXRlIHRvIGV4dHJhY3QgZGVmYXVsdCB2YWx1ZXMKKyMgZnJvbSBwZXJ0aW5lbnQgcGFja2FnZSBmaWxlcy4gQ2FsbCB0aGVtIHVzaW5nIHRoZWlyIGFzc29jaWF0ZWQKKyMgJ3JlcXVpcmVfKicgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgZXhlY3V0ZWQsIGF0IG1vc3QsIG9uY2UuCisjCisjIEl0J3MgZW50aXJlbHkgZGVsaWJlcmF0ZSB0aGF0IGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIGNhbiBzZXQKKyMgdmFyaWFibGVzIHRoYXQgZG9uJ3Qgb2JleSB0aGUgbmFtZXNwYWNlIGxpbWl0YXRpb25zIG9iZXllZCBieSB0aGUgcmVzdAorIyBvZiB0aGlzIGZpbGUsIGluIG9yZGVyIHRoYXQgdGhhdCB0aGV5IGJlIGFzIHVzZWZ1bCBhcyBwb3NzaWJsZSB0bworIyBjYWxsZXJzLgorCisKKyMgcmVxdWlyZV90ZXJtX2NvbG9ycworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsbG93IGRpc3BsYXkgb2YgYm9sZCB0ZXh0IG9uIHRlcm1pbmFscyB0aGF0IHN1cHBvcnQgaXQuCityZXF1aXJlX3Rlcm1fY29sb3JzPWZ1bmNfcmVxdWlyZV90ZXJtX2NvbG9ycworZnVuY19yZXF1aXJlX3Rlcm1fY29sb3JzICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgdGVzdCAtdCAxICYmIHsKKyAgICAgICMgQ09MT1JURVJNIGFuZCBVU0VfQU5TSV9DT0xPUlMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRha2UKKyAgICAgICMgcHJlY2VkZW5jZSwgYmVjYXVzZSBtb3N0IHRlcm1pbmZvIGRhdGFiYXNlcyBuZWdsZWN0IHRvIGRlc2NyaWJlCisgICAgICAjIHdoZXRoZXIgY29sb3Igc2VxdWVuY2VzIGFyZSBzdXBwb3J0ZWQuCisgICAgICB0ZXN0IC1uICIke0NPTE9SVEVSTStzZXR9IiAmJiA6ICR7VVNFX0FOU0lfQ09MT1JTPSIxIn0KKworICAgICAgaWYgdGVzdCAxID0gIiRVU0VfQU5TSV9DT0xPUlMiOyB0aGVuCisgICAgICAgICMgU3RhbmRhcmQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzCisgICAgICAgIHRjX3Jlc2V0PScbWzBtJworICAgICAgICB0Y19ib2xkPScbWzFtJzsgICB0Y19zdGFuZG91dD0nG1s3bScKKyAgICAgICAgdGNfcmVkPScbWzMxbSc7ICAgdGNfZ3JlZW49JxtbMzJtJworICAgICAgICB0Y19ibHVlPScbWzM0bSc7ICB0Y19jeWFuPScbWzM2bScKKyAgICAgIGVsc2UKKyAgICAgICAgIyBPdGhlcndpc2UgdHJ1c3QgdGhlIHRlcm1pbmZvIGRhdGFiYXNlIGFmdGVyIGFsbC4KKyAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2dyMCAyPi9kZXYvbnVsbGAiICYmIHsKKyAgICAgICAgICB0Y19yZXNldD1gdHB1dCBzZ3IwYAorICAgICAgICAgIHRlc3QgLW4gImB0cHV0IGJvbGQgMj4vZGV2L251bGxgIiAmJiB0Y19ib2xkPWB0cHV0IGJvbGRgCisgICAgICAgICAgdGNfc3RhbmRvdXQ9JHRjX2JvbGQKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzbXNvIDI+L2Rldi9udWxsYCIgJiYgdGNfc3RhbmRvdXQ9YHRwdXQgc21zb2AKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiAxIDI+L2Rldi9udWxsYCIgJiYgdGNfcmVkPWB0cHV0IHNldGFmIDFgCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgMiAyPi9kZXYvbnVsbGAiICYmIHRjX2dyZWVuPWB0cHV0IHNldGFmIDJgCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgNCAyPi9kZXYvbnVsbGAiICYmIHRjX2JsdWU9YHRwdXQgc2V0YWYgNGAKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiA1IDI+L2Rldi9udWxsYCIgJiYgdGNfY3lhbj1gdHB1dCBzZXRhZiA1YAorICAgICAgICB9CisgICAgICBmaQorICAgIH0KKworICAgIHJlcXVpcmVfdGVybV9jb2xvcnM9OgorfQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGdW5jdGlvbiBsaWJyYXJ5LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgYSB2YXJpZXR5IG9mIHVzZWZ1bCBmdW5jdGlvbnMgdG8gY2FsbCBpbiB5b3VyCisjIHNjcmlwdHMuIFRha2Ugbm90ZSBvZiB0aGUgcG9ydGFibGUgd3JhcHBlcnMgZm9yIGZlYXR1cmVzIHByb3ZpZGVkIGJ5CisjIHNvbWUgbW9kZXJuIHNoZWxscywgd2hpY2ggd2lsbCBmYWxsIGJhY2sgdG8gc2xvd2VyIGVxdWl2YWxlbnRzIG9uCisjIGxlc3MgZmVhdHVyZWZ1bCBzaGVsbHMuCisKKworIyBmdW5jX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCBWQUxVRSBvbnRvIHRoZSBleGlzdGluZyBjb250ZW50cyBvZiBWQVIuCisKKyAgIyBXZSBzaG91bGQgdHJ5IHRvIG1pbmltaXNlIGZvcmtzLCBlc3BlY2lhbGx5IG9uIFdpbmRvd3Mgd2hlcmUgdGhleSBhcmUKKyAgIyB1bnJlYXNvbmFibHkgc2xvdywgc28gc2tpcCB0aGUgZmVhdHVyZSBwcm9iZXMgd2hlbiBiYXNoIG9yIHpzaCBhcmUKKyAgIyBiZWluZyB1c2VkOgorICBpZiB0ZXN0IHNldCA9ICIke0JBU0hfVkVSU0lPTitzZXR9JHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgIDogJHtfR19IQVZFX0FSSVRIX09QPSJ5ZXMifQorICAgIDogJHtfR19IQVZFX1hTSV9PUFM9InllcyJ9CisgICAgIyBUaGUgKz0gb3BlcmF0b3Igd2FzIGludHJvZHVjZWQgaW4gYmFzaCAzLjEKKyAgICBjYXNlICRCQVNIX1ZFUlNJT04gaW4KKyAgICAgIFsxMl0uKiB8IDMuMCB8IDMuMCopIDs7CisgICAgICAqKQorICAgICAgICA6ICR7X0dfSEFWRV9QTFVTRVFfT1A9InllcyJ9CisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgICMgX0dfSEFWRV9QTFVTRVFfT1AKKyAgIyBDYW4gYmUgZW1wdHksIGluIHdoaWNoIGNhc2UgdGhlIHNoZWxsIGlzIHByb2JlZCwgInllcyIgaWYgKz0gaXMKKyAgIyB1c2VhYmxlIG9yIGFueXRoaW5nIGVsc2UgaWYgaXQgZG9lcyBub3Qgd29yay4KKyAgdGVzdCAteiAiJF9HX0hBVkVfUExVU0VRX09QIiBcCisgICAgJiYgKGV2YWwgJ3g9YTsgeCs9IiBiIjsgdGVzdCAiYSBiIiA9ICIkeCInKSAyPi9kZXYvbnVsbCBcCisgICAgJiYgX0dfSEFWRV9QTFVTRVFfT1A9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1BMVVNFUV9PUCIKK3RoZW4KKyAgIyBUaGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRhdGlvbi4uLgorICBldmFsICdmdW5jX2FwcGVuZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCAiJDErPVwkMiIKKyAgfScKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KKyAgZnVuY19hcHBlbmQgKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGV2YWwgIiQxPVwkJDFcJDIiCisgIH0KK2ZpCisKKworIyBmdW5jX2FwcGVuZF9xdW90ZWQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCisjIGJ5IGEgc3BhY2UuCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9QTFVTRVFfT1AiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfYXBwZW5kX3F1b3RlZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJDIiCisgICAgZXZhbCAiJDErPVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgIH0nCitlbHNlCisgIGZ1bmNfYXBwZW5kX3F1b3RlZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJDIiCisgICAgZXZhbCAiJDE9XCQkMVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgIH0KK2ZpCisKKworIyBmdW5jX2FwcGVuZF91bmlxIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdW5pcXVlIFZBTFVFIG9udG8gdGhlIGV4aXN0aW5nIGNvbnRlbnRzIG9mIFZBUiwgYXNzdW1pbmcKKyMgZW50cmllcyBhcmUgZGVsaW1pdGVkIGJ5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgVkFMVUUuICBGb3IgZXhhbXBsZToKKyMKKyMgICBmdW5jX2FwcGVuZF91bmlxIG9wdGlvbnMgIiAtLWFub3RoZXItb3B0aW9uIG9wdGlvbi1hcmd1bWVudCIKKyMKKyMgd2lsbCBvbmx5IGFwcGVuZCB0byAkb3B0aW9ucyBpZiAiIC0tYW5vdGhlci1vcHRpb24gb3B0aW9uLWFyZ3VtZW50ICIKKyMgaXMgbm90IGFscmVhZHkgcHJlc2VudCBzb21ld2hlcmUgaW4gJG9wdGlvbnMgYWxyZWFkeSAobm90ZSBzcGFjZXMgYXQKKyMgZWFjaCBlbmQgaW1wbGllZCBieSBsZWFkaW5nIHNwYWNlIGluIHNlY29uZCBhcmd1bWVudCkuCitmdW5jX2FwcGVuZF91bmlxICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCBfR19jdXJyZW50X3ZhbHVlPSdgJEVDSE8gJCckMSdgJworICAgIF9HX2RlbGltPWBleHByICIkMiIgOiAnXCguXCknYAorCisgICAgY2FzZSAkX0dfZGVsaW0kX0dfY3VycmVudF92YWx1ZSRfR19kZWxpbSBpbgorICAgICAgKiIkMiRfR19kZWxpbSIqKSA7OworICAgICAgKikgZnVuY19hcHBlbmQgIiRAIiA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfYXJpdGggVEVSTS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfYXJpdGhfcmVzdWx0IHRvIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBURVJNcy4KKyAgdGVzdCAteiAiJF9HX0hBVkVfQVJJVEhfT1AiIFwKKyAgICAmJiAoZXZhbCAndGVzdCAyID0gJCgoIDEgKyAxICkpJykgMj4vZGV2L251bGwgXAorICAgICYmIF9HX0hBVkVfQVJJVEhfT1A9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX0FSSVRIX09QIjsgdGhlbgorICBldmFsICdmdW5jX2FyaXRoICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgZnVuY19hcml0aCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKyAgfQorZmkKKworCisjIGZ1bmNfYmFzZW5hbWUgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfYmFzZW5hbWVfcmVzdWx0IHRvIEZJTEUgd2l0aCBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcKKyMgdGhlIGxhc3QgLyBzdHJpcHBlZC4KK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgICMgSWYgdGhpcyBzaGVsbCBzdXBwb3J0cyBzdWZmaXggcGF0dGVybiByZW1vdmFsLCB0aGVuIHVzZSBpdCB0byBhdm9pZAorICAjIGZvcmtpbmcuIEhpZGUgdGhlIGRlZmluaXRpb25zIHNpbmdsZSBxdW90ZXMgaW4gY2FzZSB0aGUgc2hlbGwgY2hva2VzCisgICMgb24gdW5zdXBwb3J0ZWQgc3ludGF4Li4uCisgIF9iPSdmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0kezEjIyovfScKKyAgX2Q9J2Nhc2UgJDEgaW4KKyAgICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSR7MSUvKn0kMiA7OworICAgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9JDMgICAgICAgIDs7CisgICAgICBlc2FjJworCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBzZWQuCisgIF9iPSdmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiB8JFNFRCAiJHNlZF9iYXNlbmFtZSJgJworICBfZD0nZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiAgfCRTRUQgIiRzZWRfZGlybmFtZSJgCisgICAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkMSI7IHRoZW4KKyAgICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0kMworICAgICAgZWxzZQorICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2Rpcm5hbWVfcmVzdWx0ICIkMiIKKyAgICAgIGZpJworZmkKKworZXZhbCAnZnVuY19iYXNlbmFtZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICciJF9iIicKK30nCisKKworIyBmdW5jX2Rpcm5hbWUgRklMRSBBUFBFTkQgTk9ORElSX1JFUExBQ0VNRU5UCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKKyMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorZXZhbCAnZnVuY19kaXJuYW1lICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgJyIkX2QiJworfScKKworCisjIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgRklMRSBBUFBFTkQgTk9ORElSX1JFUExBQ0VNRU5UCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1bmN0aW9uCisjIGNhbGw6CisjICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LAorIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsIG90aGVyd2lzZSBzZXQgcmVzdWx0CisjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCisjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0byB0aGUgZnVuY3Rpb25zIGFib3ZlIGJ1dCBpbnN0ZWFkCisjIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgorZXZhbCAnZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICciJF9iIicKKyAgICAnIiRfZCInCit9JworCisKKyMgZnVuY19lY2hvIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UuCitmdW5jX2VjaG8gKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBfR19tZXNzYWdlPSQqCisKKyAgICBmdW5jX2VjaG9fSUZTPSRJRlMKKyAgICBJRlM9JG5sCisgICAgZm9yIF9HX2xpbmUgaW4gJF9HX21lc3NhZ2U7IGRvCisgICAgICBJRlM9JGZ1bmNfZWNob19JRlMKKyAgICAgICRFQ0hPICIkcHJvZ25hbWU6ICRfR19saW5lIgorICAgIGRvbmUKKyAgICBJRlM9JGZ1bmNfZWNob19JRlMKK30KKworCisjIGZ1bmNfZWNob19hbGwgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiQqIgorfQorCisKKyMgZnVuY19lY2hvX2luZml4XzEgSU5GSVggQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSwgZm9sbG93ZWQgYnkgSU5GSVggb24gdGhlIGZpcnN0IGxpbmUsIHdpdGggYW55CisjIGFkZGl0aW9uYWwgbGluZXMgbm90IHNob3dpbmcgSU5GSVguCitmdW5jX2VjaG9faW5maXhfMSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICRyZXF1aXJlX3Rlcm1fY29sb3JzCisKKyAgICBfR19pbmZpeD0kMTsgc2hpZnQKKyAgICBfR19pbmRlbnQ9JF9HX2luZml4CisgICAgX0dfcHJlZml4PSIkcHJvZ25hbWU6ICRfR19pbmZpeDogIgorICAgIF9HX21lc3NhZ2U9JCoKKworICAgICMgU3RyaXAgY29sb3IgZXNjYXBlIHNlcXVlbmNlcyBiZWZvcmUgY291bnRpbmcgcHJpbnRhYmxlIGxlbmd0aAorICAgIGZvciBfR190YyBpbiAiJHRjX3Jlc2V0IiAiJHRjX2JvbGQiICIkdGNfc3RhbmRvdXQiICIkdGNfcmVkIiAiJHRjX2dyZWVuIiAiJHRjX2JsdWUiICIkdGNfY3lhbiIKKyAgICBkbworICAgICAgdGVzdCAtbiAiJF9HX3RjIiAmJiB7CisgICAgICAgIF9HX2VzY190Yz1gJEVDSE8gIiRfR190YyIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisgICAgICAgIF9HX2luZGVudD1gJEVDSE8gIiRfR19pbmRlbnQiIHwgJFNFRCAic3wkX0dfZXNjX3RjfHxnImAKKyAgICAgIH0KKyAgICBkb25lCisgICAgX0dfaW5kZW50PSIkcHJvZ25hbWU6ICJgZWNobyAiJF9HX2luZGVudCIgfCAkU0VEICdzfC58IHxnJ2AiICAiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCisKKyAgICBmdW5jX2VjaG9faW5maXhfMV9JRlM9JElGUworICAgIElGUz0kbmwKKyAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2FnZTsgZG8KKyAgICAgIElGUz0kZnVuY19lY2hvX2luZml4XzFfSUZTCisgICAgICAkRUNITyAiJF9HX3ByZWZpeCR0Y19ib2xkJF9HX2xpbmUkdGNfcmVzZXQiID4mMgorICAgICAgX0dfcHJlZml4PSRfR19pbmRlbnQKKyAgICBkb25lCisgICAgSUZTPSRmdW5jX2VjaG9faW5maXhfMV9JRlMKK30KKworCisjIGZ1bmNfZXJyb3IgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX2Vycm9yICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgJHJlcXVpcmVfdGVybV9jb2xvcnMKKworICAgIGZ1bmNfZWNob19pbmZpeF8xICIgICR0Y19zdGFuZG91dCR7dGNfcmVkfWVycm9yJHRjX3Jlc2V0IiAiJCoiID4mMgorfQorCisKKyMgZnVuY19mYXRhbF9lcnJvciBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgYW5kIGV4aXQuCitmdW5jX2ZhdGFsX2Vycm9yICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19lcnJvciAiJCoiCisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCit9CisKKworIyBmdW5jX2dyZXAgRVhQUkVTU0lPTiBGSUxFTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBvZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCitmdW5jX2dyZXAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCit9CisKKworIyBmdW5jX2xlbiBTVFJJTkcKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFNldCBmdW5jX2xlbl9yZXN1bHQgdG8gdGhlIGxlbmd0aCBvZiBTVFJJTkcuIFNUUklORyBtYXkgbm90CisjIHN0YXJ0IHdpdGggYSBoeXBoZW4uCisgIHRlc3QgLXogIiRfR19IQVZFX1hTSV9PUFMiIFwKKyAgICAmJiAoZXZhbCAneD1hL2IvYzsKKyAgICAgIHRlc3QgNWFhL2JiL2NjID0gIiR7I3h9JHt4JSUvKn0ke3glLyp9JHt4IyovfSR7eCMjKi99IicpIDI+L2Rldi9udWxsIFwKKyAgICAmJiBfR19IQVZFX1hTSV9PUFM9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfbGVuICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KKyAgfScKK2Vsc2UKKyAgZnVuY19sZW4gKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfbGVuX3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKKyAgfQorZmkKKworCisjIGZ1bmNfbWtkaXJfcCBESVJFQ1RPUlktUEFUSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJFQ1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCitmdW5jX21rZGlyX3AgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBfR19kaXJlY3RvcnlfcGF0aD0kMQorICAgIF9HX2Rpcl9saXN0PQorCisgICAgaWYgdGVzdCAtbiAiJF9HX2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0IDogIT0gIiRvcHRfZHJ5X3J1biI7IHRoZW4KKworICAgICAgIyBQcm90ZWN0IGRpcmVjdG9yeSBuYW1lcyBzdGFydGluZyB3aXRoICctJworICAgICAgY2FzZSAkX0dfZGlyZWN0b3J5X3BhdGggaW4KKyAgICAgICAgLSopIF9HX2RpcmVjdG9yeV9wYXRoPS4vJF9HX2RpcmVjdG9yeV9wYXRoIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KKyAgICAgIHdoaWxlIHRlc3QgISAtZCAiJF9HX2RpcmVjdG9yeV9wYXRoIjsgZG8KKyAgICAgICAgIyAuLi5tYWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVkCisJIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNlLgorICAgICAgICBfR19kaXJfbGlzdD0kX0dfZGlyZWN0b3J5X3BhdGg6JF9HX2Rpcl9saXN0CisKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQorICAgICAgICBjYXNlICRfR19kaXJlY3RvcnlfcGF0aCBpbiAqLyopIDs7ICopIGJyZWFrIDs7IGVzYWMKKworICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKKyAgICAgICAgX0dfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICIkX0dfZGlyZWN0b3J5X3BhdGgiIHwgJFNFRCAtZSAiJHNlZF9kaXJuYW1lImAKKyAgICAgIGRvbmUKKyAgICAgIF9HX2Rpcl9saXN0PWAkRUNITyAiJF9HX2Rpcl9saXN0IiB8ICRTRUQgJ3N8OiokfHwnYAorCisgICAgICBmdW5jX21rZGlyX3BfSUZTPSRJRlM7IElGUz06CisgICAgICBmb3IgX0dfZGlyIGluICRfR19kaXJfbGlzdDsgZG8KKwlJRlM9JGZ1bmNfbWtkaXJfcF9JRlMKKyAgICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgJ0ZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBwcm9jZXNzZXMKKyAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgY29uY3VycmVudGx5LiAgRG9uJ3QKKyAgICAgICAgIyBzdG9wIGluIHRoYXQgY2FzZSEKKyAgICAgICAgJE1LRElSICIkX0dfZGlyIiAyPi9kZXYvbnVsbCB8fCA6CisgICAgICBkb25lCisgICAgICBJRlM9JGZ1bmNfbWtkaXJfcF9JRlMKKworICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBvdGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgorICAgICAgdGVzdCAtZCAiJF9HX2RpcmVjdG9yeV9wYXRoIiB8fCBcCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZhaWxlZCB0byBjcmVhdGUgJyQxJyIKKyAgICBmaQorfQorCisKKyMgZnVuY19ta3RlbXBkaXIgW0JBU0VOQU1FXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1ha2UgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCisjIGxpYnRvb2wgcHJvY2Vzc2VzLCBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBpZiBwb3NzaWJsZS4gIElmCisjIGdpdmVuLCBCQVNFTkFNRSBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgorZnVuY19ta3RlbXBkaXIgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBfR190ZW1wbGF0ZT0ke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfQorCisgICAgaWYgdGVzdCA6ID0gIiRvcHRfZHJ5X3J1biI7IHRoZW4KKyAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCisgICAgICBfR190bXBkaXI9JF9HX3RlbXBsYXRlLSQkCisgICAgZWxzZQorCisgICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CisgICAgICBfR190bXBkaXI9YG1rdGVtcCAtZCAiJF9HX3RlbXBsYXRlLVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKKworICAgICAgaWYgdGVzdCAhIC1kICIkX0dfdG1wZGlyIjsgdGhlbgorICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKKyAgICAgICAgX0dfdG1wZGlyPSRfR190ZW1wbGF0ZS0ke1JBTkRPTS0wfSQkCisKKyAgICAgICAgZnVuY19ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorICAgICAgICB1bWFzayAwMDc3CisgICAgICAgICRNS0RJUiAiJF9HX3RtcGRpciIKKyAgICAgICAgdW1hc2sgJGZ1bmNfbWt0ZW1wZGlyX3VtYXNrCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKKyAgICAgIHRlc3QgLWQgIiRfR190bXBkaXIiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5ICckX0dfdG1wZGlyJyIKKyAgICBmaQorCisgICAgJEVDSE8gIiRfR190bXBkaXIiCit9CisKKworIyBmdW5jX25vcm1hbF9hYnNwYXRoIFBBVEgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlbW92ZSBkb3VibGVkLXVwIGFuZCB0cmFpbGluZyBzbGFzaGVzLCAiLiIgcGF0aCBjb21wb25lbnRzLAorIyBhbmQgY2FuY2VsIG91dCBhbnkgIi4uIiBwYXRoIGNvbXBvbmVudHMgaW4gUEFUSCBhZnRlciBtYWtpbmcKKyMgaXQgYW4gYWJzb2x1dGUgcGF0aC4KK2Z1bmNfbm9ybWFsX2Fic3BhdGggKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIFRoZXNlIFNFRCBzY3JpcHRzIHByZXN1cHBvc2UgYW4gYWJzb2x1dGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCisgICAgX0dfcGF0aGNhcj0nc3xeL1woW14vXSpcKS4qJHxcMXwnCisgICAgX0dfcGF0aGNkcj0nc3xeL1teL10qfHwnCisgICAgX0dfcmVtb3ZlZG90cGFydHM9Jzpkb3RzbAorCQlzfC9cLi98L3xnCisJCXQgZG90c2wKKwkJc3wvXC4kfC98JworICAgIF9HX2NvbGxhcHNlc2xhc2hlcz0nc3wvXHsxLFx9fC98ZycKKyAgICBfR19maW5hbHNsYXNoPSdzfC8qJHwvfCcKKworICAgICMgU3RhcnQgZnJvbSByb290IGRpciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPSQxCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9hbHRuYW1lc3BhY2U9CisgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCBpbgorICAgICAgIiIpCisgICAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2QuCisgICAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiYHB3ZGAiCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgICAgcmV0dXJuCisgICAgICAgIDs7CisgICAgICAjIFRoZSBuZXh0IHRocmVlIGVudHJpZXMgYXJlIHVzZWQgdG8gc3BvdCBhIHJ1biBvZiBwcmVjaXNlbHkKKyAgICAgICMgdHdvIGxlYWRpbmcgc2xhc2hlcyB3aXRob3V0IHVzaW5nIG5lZ2F0ZWQgY2hhcmFjdGVyIGNsYXNzZXM7CisgICAgICAjIHdlIHRha2UgYWR2YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCisgICAgICAvLy8qKQorICAgICAgICAjIFVudXN1YWwgZm9ybSBvZiBhYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgorICAgICAgICA7OworICAgICAgLy8qKQorICAgICAgICAjIE5vdCBuZWNlc3NhcmlseSBhbiBvcmRpbmFyeSBwYXRoOyBQT1NJWCByZXNlcnZlcyBsZWFkaW5nICcvLycKKyAgICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcworICAgICAgICAjIG92ZXIgQ0lGUy9TTUIsIHNvIHdlIGNvbnNlcnZlIGEgbGVhZGluZyBkb3VibGUgc2xhc2ggaWYgZm91bmQuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPS8KKyAgICAgICAgOzsKKyAgICAgIC8qKQorICAgICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICAjIFJlbGF0aXZlIHBhdGgsIHByZXBlbmQgJGN3ZC4KKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aAorICAgICAgICA7OworICAgIGVzYWMKKworICAgICMgQ2FuY2VsIG91dCBhbGwgdGhlIHNpbXBsZSBzdHVmZiB0byBzYXZlIGl0ZXJhdGlvbnMuICBXZSBhbHNvIHdhbnQKKyAgICAjIHRoZSBwYXRoIHRvIGVuZCB3aXRoIGEgc2xhc2ggZm9yIGVhc2Ugb2YgcGFyc2luZywgc28gbWFrZSBzdXJlCisgICAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgICAgLWUgIiRfR19yZW1vdmVkb3RwYXJ0cyIgLWUgIiRfR19jb2xsYXBzZXNsYXNoZXMiIC1lICIkX0dfZmluYWxzbGFzaCJgCisgICAgd2hpbGUgOjsgZG8KKyAgICAgICMgUHJvY2Vzc2VkIGl0IGFsbCB5ZXQ/CisgICAgICBpZiB0ZXN0IC8gPSAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiOyB0aGVuCisgICAgICAgICMgSWYgd2UgYXNjZW5kZWQgdG8gdGhlIHJvb3QgdXNpbmcgIi4uIiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eSBub3cuCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0vCisgICAgICAgIGZpCisgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgICAgLWUgIiRfR19wYXRoY2FyImAKKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgICAtZSAiJF9HX3BhdGhjZHIiYAorICAgICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAorICAgICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IGluCisgICAgICAgICIiKQorICAgICAgICAgICMgVHJhaWxpbmcgZW1wdHkgcGF0aCBjb21wb25lbnQsIGlnbm9yZSBpdC4KKyAgICAgICAgICA7OworICAgICAgICAuLikKKyAgICAgICAgICAjIFBhcmVudCBkaXI7IHN0cmlwIGxhc3QgYXNzZW1ibGVkIGNvbXBvbmVudCBmcm9tIHJlc3VsdC4KKyAgICAgICAgICBmdW5jX2Rpcm5hbWUgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKKyAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgIyBBY3R1YWwgcGF0aCBjb21wb25lbnQsIGFwcGVuZCBpdC4KKyAgICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCAiLyRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgIyBSZXN0b3JlIGxlYWRpbmcgZG91YmxlLXNsYXNoIGlmIG9uZSB3YXMgZm91bmQgb24gZW50cnkuCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Cit9CisKKworIyBmdW5jX25vdHF1aWV0IEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIG9ubHkgd2hlbiBub3QgaW4gcXVpZXQgbW9kZS4KK2Z1bmNfbm90cXVpZXQgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkb3B0X3F1aWV0IHx8IGZ1bmNfZWNobyAkezErIiRAIn0KKworICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUgb2YgYSBmdW5jdGlvbgorICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdlIG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCisgICAgIyB3b3JrIGFyb3VuZCB0aGF0OgorICAgIDoKK30KKworCisjIGZ1bmNfcmVsYXRpdmVfcGF0aCBTUkNESVIgRFNURElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IHRvIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gU1JDRElSIHRvIERTVERJUi4KK2Z1bmNfcmVsYXRpdmVfcGF0aCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9CisgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDEiCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisgICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDIiCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0CisKKyAgICAjIEFzY2VuZCB0aGUgdHJlZSBzdGFydGluZyBmcm9tIGxpYmRpcgorICAgIHdoaWxlIDo7IGRvCisgICAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVmaXggb2YgYmluZGlyCisgICAgICBjYXNlICRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciBpbgorICAgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIpCisgICAgICAgICAgIyBmb3VuZCBhbiBleGFjdCBtYXRjaAorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPQorICAgICAgICAgIGJyZWFrCisgICAgICAgICAgOzsKKyAgICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKikKKyAgICAgICAgICAjIGZvdW5kIGEgbWF0Y2hpbmcgcHJlZml4CisgICAgICAgICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4KKyAgICAgICAgICBmaQorICAgICAgICAgIGJyZWFrCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBmdW5jX2Rpcm5hbWUgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiOyB0aGVuCisgICAgICAgICAgICAjIEhhdmUgdG8gZGVzY2VuZCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdCEKKyAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICBmaQorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgTm93IGNhbGN1bGF0ZSBwYXRoOyB0YWtlIGNhcmUgdG8gYXZvaWQgZG91YmxpbmctdXAgc2xhc2hlcy4KKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfc3RyaXBuYW1lICcvJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZCIKKyAgICBpZiB0ZXN0IC1uICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgorICAgICAgZnVuY19hcHBlbmQgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCAiLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisgICAgZmkKKworICAgICMgTm9ybWFsaXNhdGlvbi4gSWYgYmluZGlyIGlzIGxpYmRpciwgcmV0dXJuICcuJyBlbHNlIHJlbGF0aXZlIHBhdGguCisgICAgaWYgdGVzdCAtbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICBmdW5jX3N0cmlwbmFtZSAnLi8nICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKKyAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZpCisKKyAgICB0ZXN0IC1uICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIgfHwgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCisKKyAgICA6Cit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9ldmFsIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZXN0aGV0aWNhbGx5IHF1b3RlIEFSR3MgdG8gYmUgZXZhbGVkIGxhdGVyLgorIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlczoKKyMgICBpKSBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICAgIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbAorIyAgaWkpIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0CisjICAgICAgaGFzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlCisjICAgICAgcXVvdGVzIGJhY2tzbGFzaGlmaWVkLgorZnVuY19xdW90ZV9mb3JfZXZhbCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PQorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PQorICAgIHdoaWxlIHRlc3QgMCAtbHQgJCM7IGRvCisgICAgICBjYXNlICQxIGluCisgICAgICAgICpbXFxcYFwiXCRdKikKKwkgIF9HX3VucXVvdGVkX2FyZz1gcHJpbnRmICclc1xuJyAiJDEiIHwkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBfR191bnF1b3RlZF9hcmc9JDEgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCAiICRfR191bnF1b3RlZF9hcmciCisgICAgICBlbHNlCisgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0ICIkX0dfdW5xdW90ZWRfYXJnIgorICAgICAgZmkKKworICAgICAgY2FzZSAkX0dfdW5xdW90ZWRfYXJnIGluCisgICAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgICAjIHdvcmQgc3BsaXR0aW5nLCBjb21tYW5kIHN1YnN0aXR1dGlvbiBhbmQgdmFyaWFibGUgZXhwYW5zaW9uCisgICAgICAgICMgZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorICAgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgICBfR19xdW90ZWRfYXJnPVwiJF9HX3VucXVvdGVkX2FyZ1wiCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBfR19xdW90ZWRfYXJnPSRfR191bnF1b3RlZF9hcmcKKwkgIDs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCI7IHRoZW4KKwlmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiICRfR19xdW90ZWRfYXJnIgorICAgICAgZWxzZQorICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiJF9HX3F1b3RlZF9hcmciCisgICAgICBmaQorICAgICAgc2hpZnQKKyAgICBkb25lCit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgQVJHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyOyBzYW1lIGFzIGFib3ZlLAorIyBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitmdW5jX3F1b3RlX2Zvcl9leHBhbmQgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICQxIGluCisgICAgICAqW1xcXGBcIl0qKQorCV9HX2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgXAorCSAgICAtZSAiJHNlZF9kb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OworICAgICAgKikKKyAgICAgICAgX0dfYXJnPSQxIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkX0dfYXJnIGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIF9HX2FyZz1cIiRfR19hcmdcIgorICAgICAgICA7OworICAgIGVzYWMKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQ9JF9HX2FyZworfQorCisKKyMgZnVuY19zdHJpcG5hbWUgUFJFRklYIFNVRkZJWCBOQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBmcm9tIE5BTUUsIGFuZCBzdG9yZSBpbiBmdW5jX3N0cmlwbmFtZV9yZXN1bHQuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIjsgdGhlbgorICBldmFsICdmdW5jX3N0cmlwbmFtZSAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHZhcmlhYmxlIGZpcnN0LgorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0kMworICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJDEifQorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJDIifQorICB9JworZWxzZQorICBmdW5jX3N0cmlwbmFtZSAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgY2FzZSAkMiBpbgorICAgICAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgLWUgInMlXiQxJSUiIC1lICJzJVxcXFwkMlwkJSUiYDs7CisgICAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJDMiIHwgJFNFRCAtZSAicyVeJDElJSIgLWUgInMlJDJcJCUlImA7OworICAgIGVzYWMKKyAgfQorZmkKKworCisjIGZ1bmNfc2hvd19ldmFsIENNRCBbRkFJTF9FWFBdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFVubGVzcyBvcHRfcXVpZXQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuCitmdW5jX3Nob3dfZXZhbCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIF9HX2NtZD0kMQorICAgIF9HX2ZhaWxfZXhwPSR7Mi0nOid9CisKKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRfR19jbWQiCisgICAgZXZhbCAiZnVuY19ub3RxdWlldCAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBldmFsICIkX0dfY21kIgorICAgICAgX0dfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0IDAgLW5lICIkX0dfc3RhdHVzIjsgdGhlbgorCWV2YWwgIihleGl0ICRfR19zdGF0dXMpOyAkX0dfZmFpbF9leHAiCisgICAgICBmaQorICAgIH0KK30KKworCisjIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSBDTUQgW0ZBSUxfRVhQXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVW5sZXNzIG9wdF9xdWlldCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIG5vdCB0cnVlLCBldmFsdWF0ZSBDTUQuICBJZiB0aGUgZXZhbHVhdGlvbiBvZiBDTUQgZmFpbHMsIGFuZCBGQUlMX0VYUAorIyBpcyBnaXZlbiwgdGhlbiBldmFsdWF0ZSBpdC4gIFVzZSB0aGUgc2F2ZWQgbG9jYWxlIGZvciBldmFsdWF0aW9uLgorZnVuY19zaG93X2V2YWxfbG9jYWxlICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgX0dfY21kPSQxCisgICAgX0dfZmFpbF9leHA9JHsyLSc6J30KKworICAgICRvcHRfcXVpZXQgfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkX0dfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBldmFsICIkX0dfdXNlcl9sb2NhbGUKKwkgICAgJF9HX2NtZCIKKyAgICAgIF9HX3N0YXR1cz0kPworICAgICAgZXZhbCAiJF9HX3NhZmVfbG9jYWxlIgorICAgICAgaWYgdGVzdCAwIC1uZSAiJF9HX3N0YXR1cyI7IHRoZW4KKwlldmFsICIoZXhpdCAkX0dfc3RhdHVzKTsgJF9HX2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICB9Cit9CisKKworIyBmdW5jX3RyX3NoCisjIC0tLS0tLS0tLS0KKyMgVHVybiAkMSBpbnRvIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBhIHNoZWxsIHZhcmlhYmxlIG5hbWUuCisjIFJlc3VsdCBpcyBzdG9yZWQgaW4gJGZ1bmNfdHJfc2hfcmVzdWx0LiAgQWxsIGNoYXJhY3RlcnMKKyMgbm90IGluIHRoZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQgd2l0aCAnXycuIEZ1cnRoZXIsCisjIGlmICQxIGJlZ2lucyB3aXRoIGEgZGlnaXQsIGEgJ18nIGlzIHByZXBlbmRlZCBhcyB3ZWxsLgorZnVuY190cl9zaCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgJDEgaW4KKyAgICBbMC05XSogfCAqWyFhLXpBLVowLTlfXSopCisgICAgICBmdW5jX3RyX3NoX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgLWUgJ3MvXlwoWzAtOV1cKS9fXDEvJyAtZSAncy9bXmEtekEtWjAtOV9dL18vZydgCisgICAgICA7OworICAgICogKQorICAgICAgZnVuY190cl9zaF9yZXN1bHQ9JDEKKyAgICAgIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY192ZXJib3NlIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgaW4gdmVyYm9zZSBtb2RlIG9ubHkuCitmdW5jX3ZlcmJvc2UgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkb3B0X3ZlcmJvc2UgJiYgZnVuY19lY2hvICIkKiIKKworICAgIDoKK30KKworCisjIGZ1bmNfd2Fybl9hbmRfY29udGludWUgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdhcm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfd2Fybl9hbmRfY29udGludWUgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkcmVxdWlyZV90ZXJtX2NvbG9ycworCisgICAgZnVuY19lY2hvX2luZml4XzEgIiR7dGNfcmVkfXdhcm5pbmckdGNfcmVzZXQiICIkKiIgPiYyCit9CisKKworIyBmdW5jX3dhcm5pbmcgQ0FURUdPUlkgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLiBXYXJuaW5nCisjIG1lc3NhZ2VzIGNhbiBiZSBmaWx0ZXJlZCBhY2NvcmRpbmcgdG8gQ0FURUdPUlksIHdoZXJlIHRoaXMgZnVuY3Rpb24KKyMgZWxpZGVzIG1lc3NhZ2VzIHdoZXJlIENBVEVHT1JZIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGdsb2JhbCB2YXJpYWJsZQorIyAnb3B0X3dhcm5pbmdfdHlwZXMnLgorZnVuY193YXJuaW5nICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBDQVRFR09SWSBtdXN0IGJlIGluIHRoZSB3YXJuaW5nX2NhdGVnb3JpZXMgbGlzdCEKKyAgICBjYXNlICIgJHdhcm5pbmdfY2F0ZWdvcmllcyAiIGluCisgICAgICAqIiAkMSAiKikgOzsKKyAgICAgICopIGZ1bmNfaW50ZXJuYWxfZXJyb3IgImludmFsaWQgd2FybmluZyBjYXRlZ29yeSAnJDEnIiA7OworICAgIGVzYWMKKworICAgIF9HX2NhdGVnb3J5PSQxCisgICAgc2hpZnQKKworICAgIGNhc2UgIiAkb3B0X3dhcm5pbmdfdHlwZXMgIiBpbgorICAgICAgKiIgJF9HX2NhdGVnb3J5ICIqKSAkd2FybmluZ19mdW5jICR7MSsiJEAifSA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfc29ydF92ZXIgVkVSMSBWRVIyCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICdzb3J0IC1WJyBpcyBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZS4KKyMgTm90ZSB0aGlzIGRldmlhdGVzIGZyb20gdGhlIHZlcnNpb24gY29tcGFyaXNvbiBpbiBhdXRvbWFrZQorIyBpbiB0aGF0IGl0IHRyZWF0cyAxLjUgPCAxLjUuMCwgYW5kIHRyZWF0cyAxLjQuNGEgPCAxLjQtcDNhCisjIGJ1dCB0aGlzIHNob3VsZCBzdWZmaWNlIGFzIHdlIHdvbid0IGJlIHNwZWNpZnlpbmcgb2xkCisjIHZlcnNpb24gZm9ybWF0cyBvciByZWR1bmRhbnQgdHJhaWxpbmcgLjAgaW4gYm9vdHN0cmFwLmNvbmYuCisjIElmIHdlIGRpZCB3YW50IGZ1bGwgY29tcGF0aWJpbGl0eSB0aGVuIHdlIHNob3VsZCBwcm9iYWJseQorIyB1c2UgbTRfdmVyc2lvbl9jb21wYXJlIGZyb20gYXV0b2NvbmYuCitmdW5jX3NvcnRfdmVyICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgcHJpbnRmICclc1xuJXNcbicgIiQxIiAiJDIiIFwKKyAgICAgIHwgc29ydCAtdC4gLWsgMSwxbiAtayAyLDJuIC1rIDMsM24gLWsgNCw0biAtayA1LDVuIC1rIDYsNm4gLWsgNyw3biAtayA4LDhuIC1rIDksOW4KK30KKworIyBmdW5jX2x0X3ZlciBQUkVWIENVUlIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJldHVybiB0cnVlIGlmIFBSRVYgYW5kIENVUlIgYXJlIGluIHRoZSBjb3JyZWN0IG9yZGVyIGFjY29yZGluZyB0bworIyBmdW5jX3NvcnRfdmVyLCBvdGhlcndpc2UgZmFsc2UuICBVc2UgaXQgbGlrZSB0aGlzOgorIworIyAgZnVuY19sdF92ZXIgIiRwcmV2X3ZlciIgIiRwcm9wb3NlZF92ZXIiIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIi4uLiIKK2Z1bmNfbHRfdmVyICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgdGVzdCAieCQxIiA9IHhgZnVuY19zb3J0X3ZlciAiJDEiICIkMiIgfCAkU0VEIDFxYAorfQorCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXBhdHRlcm46ICIxMC9zY3JpcHR2ZXJzaW9uPSU6eS0lMDJtLSUwMmQuJTAySDsgIyBVVEMiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyBFbmQ6CisjISAvYmluL3NoCisKKyMgU2V0IGEgdmVyc2lvbiBzdHJpbmcgZm9yIHRoaXMgc2NyaXB0Lgorc2NyaXB0dmVyc2lvbj0yMDE0LTAxLTA3LjAzOyAjIFVUQworCisjIEEgcG9ydGFibGUsIHBsdWdnYWJsZSBvcHRpb24gcGFyc2VyIGZvciBCb3VybmUgc2hlbGwuCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDEwCisKKyMgQ29weXJpZ2h0IChDKSAyMDEwLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJvcG9zZSBwYXRjaGVzIHRvIGdhcnlAZ251Lm9yZy4KKworCisjIyAtLS0tLS0gIyMKKyMjIFVzYWdlLiAjIworIyMgLS0tLS0tICMjCisKKyMgVGhpcyBmaWxlIGlzIGEgbGlicmFyeSBmb3IgcGFyc2luZyBvcHRpb25zIGluIHlvdXIgc2hlbGwgc2NyaXB0cyBhbG9uZworIyB3aXRoIGFzc29ydGVkIG90aGVyIHVzZWZ1bCBzdXBwb3J0aW5nIGZlYXR1cmVzIHRoYXQgeW91IGNhbiBtYWtlIHVzZQorIyBvZiB0b28uCisjCisjIEZvciB0aGUgc2ltcGxlc3Qgc2NyaXB0cyB5b3UgbWlnaHQgbmVlZCBvbmx5OgorIworIyAgICMhL2Jpbi9zaAorIyAgIC4gcmVsYXRpdmUvcGF0aC90by9mdW5jbGliLnNoCisjICAgLiByZWxhdGl2ZS9wYXRoL3RvL29wdGlvbnMtcGFyc2VyCisjICAgc2NyaXB0dmVyc2lvbj0xLjAKKyMgICBmdW5jX29wdGlvbnMgJHsxKyIkQCJ9CisjICAgZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlvbnNfcmVzdWx0Ijsgc2hpZnQKKyMgICAuLi5yZXN0IG9mIHlvdXIgc2NyaXB0Li4uCisjCisjIEluIG9yZGVyIGZvciB0aGUgJy0tdmVyc2lvbicgb3B0aW9uIHRvIHdvcmssIHlvdSB3aWxsIG5lZWQgdG8gaGF2ZSBhCisjIHN1aXRhYmx5IGZvcm1hdHRlZCBjb21tZW50IGxpa2UgdGhlIG9uZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZQorIyBzdGFydGluZyB3aXRoICcjIFdyaXR0ZW4gYnkgJyBhbmQgZW5kaW5nIHdpdGggJyMgd2FycmFudHk7ICcuCisjCisjIEZvciAnLWgnIGFuZCAnLS1oZWxwJyB0byB3b3JrLCB5b3Ugd2lsbCBhbHNvIG5lZWQgYSBvbmUgbGluZQorIyBkZXNjcmlwdGlvbiBvZiB5b3VyIHNjcmlwdCdzIHB1cnBvc2UgaW4gYSBjb21tZW50IGRpcmVjdGx5IGFib3ZlIHRoZQorIyAnIyBXcml0dGVuIGJ5ICcgbGluZSwgbGlrZSB0aGUgb25lIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLgorIworIyBUaGUgZGVmYXVsdCBvcHRpb25zIGFsc28gc3VwcG9ydCAnLS1kZWJ1ZycsIHdoaWNoIHdpbGwgdHVybiBvbiBzaGVsbAorIyBleGVjdXRpb24gdHJhY2luZyAoc2VlIHRoZSBjb21tZW50IGFib3ZlIGRlYnVnX2NtZCBiZWxvdyBmb3IgYW5vdGhlcgorIyB1c2UpLCBhbmQgJy0tdmVyYm9zZScgYW5kIHRoZSBmdW5jX3ZlcmJvc2UgZnVuY3Rpb24gdG8gYWxsb3cgeW91ciBzY3JpcHQKKyMgdG8gZGlzcGxheSB2ZXJib3NlIG1lc3NhZ2VzIG9ubHkgd2hlbiB5b3VyIHVzZXIgaGFzIHNwZWNpZmllZAorIyAnLS12ZXJib3NlJy4KKyMKKyMgQWZ0ZXIgc291cmNpbmcgdGhpcyBmaWxlLCB5b3UgY2FuIHBsdWcgcHJvY2Vzc2luZyBmb3IgYWRkaXRpb25hbAorIyBvcHRpb25zIGJ5IGFtZW5kaW5nIHRoZSB2YXJpYWJsZXMgZnJvbSB0aGUgJ0NvbmZpZ3VyYXRpb24nIHNlY3Rpb24KKyMgYmVsb3csIGFuZCBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgJ09wdGlvbiBwYXJzaW5nJworIyBzZWN0aW9uIGZ1cnRoZXIgZG93bi4KKworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENvbmZpZ3VyYXRpb24uICMjCisjIyAtLS0tLS0tLS0tLS0tLSAjIworCisjIFlvdSBzaG91bGQgb3ZlcnJpZGUgdGhlc2UgdmFyaWFibGVzIGluIHlvdXIgc2NyaXB0IGFmdGVyIHNvdXJjaW5nIHRoaXMKKyMgZmlsZSBzbyB0aGF0IHRoZXkgcmVmbGVjdCB0aGUgY3VzdG9taXNhdGlvbnMgeW91IGhhdmUgYWRkZWQgdG8gdGhlCisjIG9wdGlvbiBwYXJzZXIuCisKKyMgVGhlIHVzYWdlIGxpbmUgZm9yIG9wdGlvbiBwYXJzaW5nIGVycm9ycyBhbmQgdGhlIHN0YXJ0IG9mICctaCcgYW5kCisjICctLWhlbHAnIG91dHB1dCBtZXNzYWdlcy4gWW91IGNhbiBlbWJlZCBzaGVsbCB2YXJpYWJsZXMgZm9yIGRlbGF5ZWQKKyMgZXhwYW5zaW9uIGF0IHRoZSB0aW1lIHRoZSBtZXNzYWdlIGlzIGRpc3BsYXllZCwgYnV0IHlvdSB3aWxsIG5lZWQgdG8KKyMgcXVvdGUgb3RoZXIgc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIGNhcmVmdWxseSB0byBwcmV2ZW50IHRoZW0gYmVpbmcKKyMgZXhwYW5kZWQgd2hlbiB0aGUgY29udGVudHMgYXJlIGV2YWxlZC4KK3VzYWdlPSckcHJvZ3BhdGggW09QVElPTl0uLi4nCisKKyMgU2hvcnQgaGVscCBtZXNzYWdlIGluIHJlc3BvbnNlIHRvICctaCcgYW5kICctLWhlbHAnLiAgQWRkIHRvIHRoaXMgb3IKKyMgb3ZlcnJpZGUgaXQgYWZ0ZXIgc291cmNpbmcgdGhpcyBsaWJyYXJ5IHRvIHJlZmxlY3QgdGhlIGZ1bGwgc2V0IG9mCisjIG9wdGlvbnMgeW91ciBzY3JpcHQgYWNjZXB0cy4KK3VzYWdlX21lc3NhZ2U9IlwKKyAgICAgICAtLWRlYnVnICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCisgICAtVywgLS13YXJuaW5ncz1DQVRFR09SWQorICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGluZyBpbiBDQVRFR09SWSBbYWxsXQorICAgLXYsIC0tdmVyYm9zZSAgICAgIHZlcmJvc2VseSByZXBvcnQgcHJvY2Vzc2luZworICAgICAgIC0tdmVyc2lvbiAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKyAgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCBzaG9ydCBvciBsb25nIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorIgorCisjIEFkZGl0aW9uYWwgdGV4dCBhcHBlbmRlZCB0byAndXNhZ2VfbWVzc2FnZScgaW4gcmVzcG9uc2UgdG8gJy0taGVscCcuCitsb25nX2hlbHBfbWVzc2FnZT0iCitXYXJuaW5nIGNhdGVnb3JpZXMgaW5jbHVkZToKKyAgICAgICAnYWxsJyAgICAgICAgICBzaG93IGFsbCB3YXJuaW5ncworICAgICAgICdub25lJyAgICAgICAgIHR1cm4gb2ZmIGFsbCB0aGUgd2FybmluZ3MKKyAgICAgICAnZXJyb3InICAgICAgICB3YXJuaW5ncyBhcmUgdHJlYXRlZCBhcyBmYXRhbCBlcnJvcnMiCisKKyMgSGVscCBtZXNzYWdlIHByaW50ZWQgYmVmb3JlIGZhdGFsIG9wdGlvbiBwYXJzaW5nIGVycm9ycy4KK2ZhdGFsX2hlbHA9IlRyeSAnXCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEhvb2sgZnVuY3Rpb24gbWFuYWdlbWVudC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgZnVuY3Rpb25zIGZvciBhZGRpbmcsIHJlbW92aW5nLCBhbmQgcnVubmluZyBob29rcworIyB0byB0aGUgbWFpbiBjb2RlLiAgQSBob29rIGlzIGp1c3QgYSBuYW1lZCBsaXN0IG9mIG9mIGZ1bmN0aW9uLCB0aGF0IGNhbgorIyBiZSBydW4gaW4gb3JkZXIgbGF0ZXIgb24uCisKKyMgZnVuY19ob29rYWJsZSBGVU5DX05BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVjbGFyZSB0aGF0IEZVTkNfTkFNRSB3aWxsIHJ1biBob29rcyBhZGRlZCB3aXRoCisjICdmdW5jX2FkZF9ob29rIEZVTkNfTkFNRSAuLi4nLgorZnVuY19ob29rYWJsZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfYXBwZW5kIGhvb2thYmxlX2ZucyAiICQxIgorfQorCisKKyMgZnVuY19hZGRfaG9vayBGVU5DX05BTUUgSE9PS19GVU5DCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZXF1ZXN0IHRoYXQgRlVOQ19OQU1FIGNhbGwgSE9PS19GVU5DIGJlZm9yZSBpdCByZXR1cm5zLiAgRlVOQ19OQU1FIG11c3QKKyMgZmlyc3QgaGF2ZSBiZWVuIGRlY2xhcmVkICJob29rYWJsZSIgYnkgYSBjYWxsIHRvICdmdW5jX2hvb2thYmxlJy4KK2Z1bmNfYWRkX2hvb2sgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICIgJGhvb2thYmxlX2ZucyAiIGluCisgICAgICAqIiAkMSAiKikgOzsKKyAgICAgICopIGZ1bmNfZmF0YWxfZXJyb3IgIickMScgZG9lcyBub3QgYWNjZXB0IGhvb2sgZnVuY3Rpb25zLiIgOzsKKyAgICBlc2FjCisKKyAgICBldmFsIGZ1bmNfYXBwZW5kICR7MX1faG9va3MgJyIgJDIiJworfQorCisKKyMgZnVuY19yZW1vdmVfaG9vayBGVU5DX05BTUUgSE9PS19GVU5DCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZW1vdmUgSE9PS19GVU5DIGZyb20gdGhlIGxpc3Qgb2YgZnVuY3Rpb25zIGNhbGxlZCBieSBGVU5DX05BTUUuCitmdW5jX3JlbW92ZV9ob29rICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCAkezF9X2hvb2tzPSdgJEVDSE8gIlwkJyQxJ19ob29rcyIgfCRTRUQgInN8ICckMid8fCJgJworfQorCisKKyMgZnVuY19ydW5faG9va3MgRlVOQ19OQU1FIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSdW4gYWxsIGhvb2sgZnVuY3Rpb25zIHJlZ2lzdGVyZWQgdG8gRlVOQ19OQU1FLgorIyBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGxpc3Qgb2YgaG9vayBmdW5jdGlvbnMgY29udGFpbnMgbm90aGluZyBtb3JlCisjIHRoYW4gYSB3aGl0ZXNwYWNlLWRlbGltaXRlZCBsaXN0IG9mIGxlZ2FsIHNoZWxsIGZ1bmN0aW9uIG5hbWVzLCBhbmQKKyMgbm8gZWZmb3J0IGlzIHdhc3RlZCB0cnlpbmcgdG8gY2F0Y2ggc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIG9yIHByZXNlcnZlCisjIHdoaXRlc3BhY2UuCitmdW5jX3J1bl9ob29rcyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgIiAkaG9va2FibGVfZm5zICIgaW4KKyAgICAgICoiICQxICIqKSA7OworICAgICAgKikgZnVuY19mYXRhbF9lcnJvciAiJyQxJyBkb2VzIG5vdCBzdXBwb3J0IGhvb2sgZnVuY2lvbnMubiIgOzsKKyAgICBlc2FjCisKKyAgICBldmFsIF9HX2hvb2tfZm5zPVwkJDFfaG9va3M7IHNoaWZ0CisKKyAgICBmb3IgX0dfaG9vayBpbiAkX0dfaG9va19mbnM7IGRvCisgICAgICBldmFsICRfR19ob29rICciJEAiJworCisgICAgICAjIHN0b3JlIHJldHVybmVkIG9wdGlvbnMgbGlzdCBiYWNrIGludG8gcG9zaXRpb25hbAorICAgICAgIyBwYXJhbWV0ZXJzIGZvciBuZXh0ICdjbWQnIGV4ZWN1dGlvbi4KKyAgICAgIGV2YWwgX0dfaG9va19yZXN1bHQ9XCQke19HX2hvb2t9X3Jlc3VsdAorICAgICAgZXZhbCBzZXQgZHVtbXkgIiRfR19ob29rX3Jlc3VsdCI7IHNoaWZ0CisgICAgZG9uZQorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBmdW5jX3J1bl9ob29rc19yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Cit9CisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE9wdGlvbiBwYXJzaW5nLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgSW4gb3JkZXIgdG8gYWRkIHlvdXIgb3duIG9wdGlvbiBwYXJzaW5nIGhvb2tzLCB5b3UgbXVzdCBhY2NlcHQgdGhlCisjIGZ1bGwgcG9zaXRpb25hbCBwYXJhbWV0ZXIgbGlzdCBpbiB5b3VyIGhvb2sgZnVuY3Rpb24sIHJlbW92ZSBhbnkKKyMgb3B0aW9ucyB0aGF0IHlvdSBhY3Rpb24sIGFuZCB0aGVuIHBhc3MgYmFjayB0aGUgcmVtYWluaW5nIHVucHJvY2Vzc2VkCisjIG9wdGlvbnMgaW4gJzxob29rZWRfZnVuY3Rpb25fbmFtZT5fcmVzdWx0JywgZXNjYXBlZCBzdWl0YWJseSBmb3IKKyMgJ2V2YWwnLiAgTGlrZSB0aGlzOgorIworIyAgICBteV9vcHRpb25zX3ByZXAgKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgIyBFeHRlbmQgdGhlIGV4aXN0aW5nIHVzYWdlIG1lc3NhZ2UuCisjICAgICAgICB1c2FnZV9tZXNzYWdlPSR1c2FnZV9tZXNzYWdlJworIyAgICAgIC1zLCAtLXNpbGVudCAgICAgICBkb24nXCcndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICcKKyMKKyMgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisjICAgICAgICBteV9vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICB9CisjICAgIGZ1bmNfYWRkX2hvb2sgZnVuY19vcHRpb25zX3ByZXAgbXlfb3B0aW9uc19wcmVwCisjCisjCisjICAgIG15X3NpbGVudF9vcHRpb24gKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgIyBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksIHdlIHBhcnNlIGFzIG1hbnkgb3B0aW9ucyBhcyB3ZSBjYW4KKyMgICAgICAgICMgcmVjb2duaXNlIGluIGEgbG9vcCBiZWZvcmUgcGFzc2luZyB0aGUgcmVtYWluZGVyIGJhY2sgdG8gdGhlCisjICAgICAgICAjIGNhbGxlciBvbiB0aGUgZmlyc3QgdW5yZWNvZ25pc2VkIGFyZ3VtZW50IHdlIGVuY291bnRlci4KKyMgICAgICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisjICAgICAgICAgIG9wdD0kMTsgc2hpZnQKKyMgICAgICAgICAgY2FzZSAkb3B0IGluCisjICAgICAgICAgICAgLS1zaWxlbnR8LXMpIG9wdF9zaWxlbnQ9OiA7OworIyAgICAgICAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisjICAgICAgICAgICAgLXMqKSAgICAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgorIyAgICAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorIyAgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorIyAgICAgICAgICAgICAgICAgICAgICAgICA7OworIyAgICAgICAgICAgICopICAgICAgICAgICAgc2V0IGR1bW15ICIkX0dfb3B0IiAiJCoiOyBzaGlmdDsgYnJlYWsgOzsKKyMgICAgICAgICAgZXNhYworIyAgICAgICAgZG9uZQorIworIyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyMgICAgICAgIG15X3NpbGVudF9vcHRpb25fcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorIyAgICB9CisjICAgIGZ1bmNfYWRkX2hvb2sgZnVuY19wYXJzZV9vcHRpb25zIG15X3NpbGVudF9vcHRpb24KKyMKKyMKKyMgICAgbXlfb3B0aW9uX3ZhbGlkYXRpb24gKCkKKyMgICAgeworIyAgICAgICAgJGRlYnVnX2NtZAorIworIyAgICAgICAgJG9wdF9zaWxlbnQgJiYgJG9wdF92ZXJib3NlICYmIGZ1bmNfZmF0YWxfaGVscCAiXAorIyAgICAnLS1zaWxlbnQnIGFuZCAnLS12ZXJib3NlJyBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuIgorIworIyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyMgICAgICAgIG15X29wdGlvbl92YWxpZGF0aW9uX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyMgICAgfQorIyAgICBmdW5jX2FkZF9ob29rIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBteV9vcHRpb25fdmFsaWRhdGlvbgorIworIyBZb3UnbGwgYWxzZSBuZWVkIHRvIG1hbnVhbGx5IGFtZW5kICR1c2FnZV9tZXNzYWdlIHRvIHJlZmxlY3QgdGhlIGV4dHJhCisjIG9wdGlvbnMgeW91IHBhcnNlLiAgSXQncyBwcmVmZXJhYmxlIHRvIGFwcGVuZCBpZiB5b3UgY2FuLCBzbyB0aGF0CisjIG11bHRpcGxlIG9wdGlvbiBwYXJzaW5nIGhvb2tzIGNhbiBiZSBhZGRlZCBzYWZlbHkuCisKKworIyBmdW5jX29wdGlvbnMgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsbCB0aGUgZnVuY3Rpb25zIGNhbGxlZCBpbnNpZGUgZnVuY19vcHRpb25zIGFyZSBob29rYWJsZS4gU2VlIHRoZQorIyBpbmRpdmlkdWFsIGltcGxlbWVudGF0aW9ucyBmb3IgZGV0YWlscy4KK2Z1bmNfaG9va2FibGUgZnVuY19vcHRpb25zCitmdW5jX29wdGlvbnMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX29wdGlvbnNfcHJlcCAkezErIiRAIn0KKyAgICBldmFsIGZ1bmNfcGFyc2Vfb3B0aW9ucyBcCisgICAgICAgICR7ZnVuY19vcHRpb25zX3ByZXBfcmVzdWx0KyIkZnVuY19vcHRpb25zX3ByZXBfcmVzdWx0In0KKyAgICBldmFsIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBcCisgICAgICAgICR7ZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdCsiJGZ1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQifQorCisgICAgZXZhbCBmdW5jX3J1bl9ob29rcyBmdW5jX29wdGlvbnMgXAorICAgICAgICAke2Z1bmNfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQrIiRmdW5jX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0In0KKworICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgorICAgIGZ1bmNfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdAorfQorCisKKyMgZnVuY19vcHRpb25zX3ByZXAgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWxsIGluaXRpYWxpc2F0aW9ucyByZXF1aXJlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG9wdGlvbiBwYXJzZSBsb29wLgorIyBOb3RlIHRoYXQgd2hlbiBjYWxsaW5nIGhvb2sgZnVuY3Rpb25zLCB3ZSBwYXNzIHRocm91Z2ggdGhlIGxpc3Qgb2YKKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLiAgSWYgYSBob29rIGZ1bmN0aW9uIG1vZGlmaWVzIHRoYXQgbGlzdCwgYW5kCisjIG5lZWRzIHRvIHByb3BvZ2F0ZSB0aGF0IGJhY2sgdG8gcmVzdCBvZiB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgY29tcGxldGUKKyMgbW9kaWZpZWQgbGlzdCBtdXN0IGJlIHB1dCBpbiAnZnVuY19ydW5faG9va3NfcmVzdWx0JyBiZWZvcmUKKyMgcmV0dXJuaW5nLgorZnVuY19ob29rYWJsZSBmdW5jX29wdGlvbnNfcHJlcAorZnVuY19vcHRpb25zX3ByZXAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIE9wdGlvbiBkZWZhdWx0czoKKyAgICBvcHRfdmVyYm9zZT1mYWxzZQorICAgIG9wdF93YXJuaW5nX3R5cGVzPQorCisgICAgZnVuY19ydW5faG9va3MgZnVuY19vcHRpb25zX3ByZXAgJHsxKyIkQCJ9CisKKyAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKKyAgICBmdW5jX29wdGlvbnNfcHJlcF9yZXN1bHQ9JGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdAorfQorCisKKyMgZnVuY19wYXJzZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGUgbWFpbiBvcHRpb24gcGFyc2luZyBsb29wLgorZnVuY19ob29rYWJsZSBmdW5jX3BhcnNlX29wdGlvbnMKK2Z1bmNfcGFyc2Vfb3B0aW9ucyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9CisKKyAgICAjIHRoaXMganVzdCBlYXNlcyBleGl0IGhhbmRsaW5nCisgICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgICAgICMgRGVmZXIgdG8gaG9vayBmdW5jdGlvbnMgZm9yIGluaXRpYWwgb3B0aW9uIHBhcnNpbmcsIHNvIHRoZXkKKyAgICAgICMgZ2V0IHByaW9yaXR5IGluIHRoZSBldmVudCBvZiByZXVzaW5nIGFuIG9wdGlvbiBuYW1lLgorICAgICAgZnVuY19ydW5faG9va3MgZnVuY19wYXJzZV9vcHRpb25zICR7MSsiJEAifQorCisgICAgICAjIEFkanVzdCBmdW5jX3BhcnNlX29wdGlvbnMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHRvIG1hdGNoCisgICAgICBldmFsIHNldCBkdW1teSAiJGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdCI7IHNoaWZ0CisKKyAgICAgICMgQnJlYWsgb3V0IG9mIHRoZSBsb29wIGlmIHdlIGFscmVhZHkgcGFyc2VkIGV2ZXJ5IG9wdGlvbi4KKyAgICAgIHRlc3QgJCMgLWd0IDAgfHwgYnJlYWsKKworICAgICAgX0dfb3B0PSQxCisgICAgICBzaGlmdAorICAgICAgY2FzZSAkX0dfb3B0IGluCisgICAgICAgIC0tZGVidWd8LXgpICAgZGVidWdfY21kPSdzZXQgLXgnCisgICAgICAgICAgICAgICAgICAgICAgZnVuY19lY2hvICJlbmFibGluZyBzaGVsbCB0cmFjZSBtb2RlIgorICAgICAgICAgICAgICAgICAgICAgICRkZWJ1Z19jbWQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tbm8td2FybmluZ3N8LS1uby13YXJuaW5nfC0tbm8td2FybikKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgLS13YXJuaW5ncyBub25lICR7MSsiJEAifQorICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisJCSAgICAgIDs7CisKKyAgICAgICAgLS13YXJuaW5nc3wtLXdhcm5pbmd8LVcpCisgICAgICAgICAgICAgICAgICAgICAgdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkX0dfb3B0ICYmIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiICR3YXJuaW5nX2NhdGVnb3JpZXMgJDEiIGluCisgICAgICAgICAgICAgICAgICAgICAgICAqIiAkMSAiKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cmFpbGluZyBzcGFjZSBwcmV2ZW50cyBtYXRjaGluZyBsYXN0ICQxIGFib3ZlCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kX3VuaXEgb3B0X3dhcm5pbmdfdHlwZXMgIiAkMSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICphbGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICpub25lKQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz1ub25lCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz06CisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAqZXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ19mdW5jPWZ1bmNfZmF0YWxfZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgd2FybmluZyBjYXRlZ29yeTogJyQxJyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tdmVyYm9zZXwtdikgb3B0X3ZlcmJvc2U9OiA7OworICAgICAgICAtLXZlcnNpb24pICAgIGZ1bmNfdmVyc2lvbiA7OworICAgICAgICAtXD98LWgpICAgICAgIGZ1bmNfdXNhZ2UgOzsKKyAgICAgICAgLS1oZWxwKSAgICAgICBmdW5jX2hlbHAgOzsKKworCSMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnMgKHBsdWdpbnMgbWF5IG5lZWQgdGhpcyk6CisJLS0qPSopICAgICAgICBmdW5jX3NwbGl0X2VxdWFscyAiJF9HX29wdCIKKwkgICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfZXF1YWxzX3JocyIgJHsxKyIkQCJ9CisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIHNob3J0IG9wdGlvbnM6CisgICAgICAgIC1XKikKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKKyAgICAgICAgLVw/KnwtaCp8LXYqfC14KikKKyAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tKSAgICAgICAgICAgYnJlYWsgOzsKKyAgICAgICAgLSopICAgICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInVucmVjb2duaXNlZCBvcHRpb246ICckX0dfb3B0JyIgOzsKKyAgICAgICAgKikgICAgICAgICAgICBzZXQgZHVtbXkgIiRfR19vcHQiICR7MSsiJEAifTsgc2hpZnQ7IGJyZWFrIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBmdW5jX3BhcnNlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorCisKKyMgZnVuY192YWxpZGF0ZV9vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQZXJmb3JtIGFueSBzYW5pdHkgY2hlY2tzIG9uIG9wdGlvbiBzZXR0aW5ncyBhbmQvb3IgdW5jb25zdW1lZAorIyBhcmd1bWVudHMuCitmdW5jX2hvb2thYmxlIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucworZnVuY192YWxpZGF0ZV9vcHRpb25zICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBEaXNwbGF5IGFsbCB3YXJuaW5ncyBpZiAtVyB3YXMgbm90IGdpdmVuLgorICAgIHRlc3QgLW4gIiRvcHRfd2FybmluZ190eXBlcyIgfHwgb3B0X3dhcm5pbmdfdHlwZXM9IiAkd2FybmluZ19jYXRlZ29yaWVzIgorCisgICAgZnVuY19ydW5faG9va3MgZnVuY192YWxpZGF0ZV9vcHRpb25zICR7MSsiJEAifQorCisgICAgIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZCEKKyAgICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY192YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19ydW5faG9va3NfcmVzdWx0Cit9CisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgSGVscGVyIGZ1bmN0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIHRoZSBoZWxwZXIgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIHJlc3Qgb2YgdGhlCisjIGhvb2thYmxlIG9wdGlvbiBwYXJzZXIgZnJhbWV3b3JrIGluIGFzY2lpLWJldGljYWwgb3JkZXIuCisKKworIyBmdW5jX2ZhdGFsX2hlbHAgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBoZWxwIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9oZWxwICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCBcJEVDSE8gXCIiVXNhZ2U6ICR1c2FnZSJcIgorICAgIGV2YWwgXCRFQ0hPIFwiIiRmYXRhbF9oZWxwIlwiCisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworCisjIGZ1bmNfaGVscAorIyAtLS0tLS0tLS0KKyMgRWNobyBsb25nIGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX2hlbHAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX3VzYWdlX21lc3NhZ2UKKyAgICAkRUNITyAiJGxvbmdfaGVscF9tZXNzYWdlIgorICAgIGV4aXQgMAorfQorCisKKyMgZnVuY19taXNzaW5nX2FyZyBBUkdOQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yIGFuZCBzZXQgZ2xvYmFsCisjIGV4aXRfY21kLgorZnVuY19taXNzaW5nX2FyZyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfZXJyb3IgIk1pc3NpbmcgYXJndW1lbnQgZm9yICckMScuIgorICAgIGV4aXRfY21kPWV4aXQKK30KKworCisjIGZ1bmNfc3BsaXRfZXF1YWxzIFNUUklORworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfc3BsaXRfZXF1YWxzX2xocyBhbmQgZnVuY19zcGxpdF9lcXVhbHNfcmhzIHNoZWxsIHZhcmlhYmxlcyBhZnRlcgorIyBzcGxpdHRpbmcgU1RSSU5HIGF0IHRoZSAnPScgc2lnbi4KK3Rlc3QgLXogIiRfR19IQVZFX1hTSV9PUFMiIFwKKyAgICAmJiAoZXZhbCAneD1hL2IvYzsKKyAgICAgIHRlc3QgNWFhL2JiL2NjID0gIiR7I3h9JHt4JSUvKn0ke3glLyp9JHt4IyovfSR7eCMjKi99IicpIDI+L2Rldi9udWxsIFwKKyAgICAmJiBfR19IQVZFX1hTSV9PUFM9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiCit0aGVuCisgICMgVGhpcyBpcyBhbiBYU0kgY29tcGF0aWJsZSBzaGVsbCwgYWxsb3dpbmcgYSBmYXN0ZXIgaW1wbGVtZW50YXRpb24uLi4KKyAgZXZhbCAnZnVuY19zcGxpdF9lcXVhbHMgKCkKKyAgeworICAgICAgJGRlYnVnX2NtZAorCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19saHM9JHsxJSU9Kn0KKyAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0kezEjKj19CisgICAgICB0ZXN0ICJ4JGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgPSAieCQxIiBcCisgICAgICAgICYmIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0KKyAgfScKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KKyAgZnVuY19zcGxpdF9lcXVhbHMgKCkKKyAgeworICAgICAgJGRlYnVnX2NtZAorCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19saHM9YGV4cHIgIngkMSIgOiAneFwoW149XSpcKSdgCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19yaHM9CisgICAgICB0ZXN0ICJ4JGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgPSAieCQxIiBcCisgICAgICAgIHx8IGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz1gZXhwciAieCQxIiA6ICd4W149XSo9XCguKlwpJCdgCisgIH0KK2ZpICNmdW5jX3NwbGl0X2VxdWFscworCisKKyMgZnVuY19zcGxpdF9zaG9ydF9vcHQgU0hPUlRPUFQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAorIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIFNIT1JUT1BUIGFmdGVyIHRoZSAybmQgY2hhcmFjdGVyLgoraWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyIKK3RoZW4KKyAgIyBUaGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRhdGlvbi4uLgorICBldmFsICdmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQorICB7CisgICAgICAkZGVidWdfY21kCisKKyAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99CisgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9CisgIH0nCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBleHByLCB3aGljaCBpcyBvZnRlbiBhIHNoZWxsIGJ1aWx0aW4uCisgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCisgIHsKKyAgICAgICRkZWJ1Z19jbWQKKworICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT1gZXhwciAieCQxIiA6ICd4LVwoLlwpJ2AKKyAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz1gZXhwciAieCQxIiA6ICd4LS5cKC4qXCkkJ2AKKyAgfQorZmkgI2Z1bmNfc3BsaXRfc2hvcnRfb3B0CisKKworIyBmdW5jX3VzYWdlCisjIC0tLS0tLS0tLS0KKyMgRWNobyBzaG9ydCBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgorZnVuY191c2FnZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfdXNhZ2VfbWVzc2FnZQorICAgICRFQ0hPICJSdW4gJyRwcm9nbmFtZSAtLWhlbHAgfCR7UEFHRVItbW9yZX0nIGZvciBmdWxsIHVzYWdlIgorICAgIGV4aXQgMAorfQorCisKKyMgZnVuY191c2FnZV9tZXNzYWdlCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQuCitmdW5jX3VzYWdlX21lc3NhZ2UgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBldmFsIFwkRUNITyBcIiJVc2FnZTogJHVzYWdlIlwiCisgICAgZWNobworICAgICRTRUQgLW4gJ3N8XiMgfHwKKyAgICAgICAgL15Xcml0dGVuIGJ5L3sKKyAgICAgICAgICB4O3A7eAorICAgICAgICB9CisJaAorCS9eV3JpdHRlbiBieS9xJyA8ICIkcHJvZ3BhdGgiCisgICAgZWNobworICAgIGV2YWwgXCRFQ0hPIFwiIiR1c2FnZV9tZXNzYWdlIlwiCit9CisKKworIyBmdW5jX3ZlcnNpb24KKyMgLS0tLS0tLS0tLS0tCisjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdmVyc2lvbiAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIHByaW50ZiAnJXNcbicgIiRwcm9nbmFtZSAkc2NyaXB0dmVyc2lvbiIKKyAgICAkU0VEIC1uICcKKyAgICAgICAgLyhDKS8hYiBnbworICAgICAgICA6bW9yZQorICAgICAgICAvXC4vIXsKKyAgICAgICAgICBOCisgICAgICAgICAgc3xcbiMgfCB8CisgICAgICAgICAgYiBtb3JlCisgICAgICAgIH0KKyAgICAgICAgOmdvCisgICAgICAgIC9eIyBXcml0dGVuIGJ5IC8sLyMgd2FycmFudHk7IC8geworICAgICAgICAgIHN8XiMgfHwKKyAgICAgICAgICBzfF4jICokfHwKKyAgICAgICAgICBzfFwoKEMpXClbIDAtOSwtXSpbICwtXVwoWzEtOV1bMC05XSogXCl8XDEgXDJ8CisgICAgICAgICAgcAorICAgICAgICB9CisgICAgICAgIC9eIyBXcml0dGVuIGJ5IC8geworICAgICAgICAgIHN8XiMgfHwKKyAgICAgICAgICBwCisgICAgICAgIH0KKyAgICAgICAgL153YXJyYW50eTsgL3EnIDwgIiRwcm9ncGF0aCIKKworICAgIGV4aXQgJD8KK30KKworCisjIExvY2FsIHZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnYmVmb3JlLXNhdmUtaG9vayAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1wYXR0ZXJuOiAiMTAvc2NyaXB0dmVyc2lvbj0lOnktJTAybS0lMDJkLiUwMkg7ICMgVVRDIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgRW5kOgorCisjIFNldCBhIHZlcnNpb24gc3RyaW5nLgorc2NyaXB0dmVyc2lvbj0nKEdOVSBsaWJ0b29sKSAyLjQuNicKKworCisjIGZ1bmNfZWNobyBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJ0b29sIGFsc28gZGlzcGxheXMgdGhlIGN1cnJlbnQgbW9kZSBpbiBtZXNzYWdlcywgc28gb3ZlcnJpZGUKKyMgZnVuY2xpYi5zaCBmdW5jX2VjaG8gd2l0aCB0aGlzIGN1c3RvbSBkZWZpbml0aW9uLgorZnVuY19lY2hvICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgX0dfbWVzc2FnZT0kKgorCisgICAgZnVuY19lY2hvX0lGUz0kSUZTCisgICAgSUZTPSRubAorICAgIGZvciBfR19saW5lIGluICRfR19tZXNzYWdlOyBkbworICAgICAgSUZTPSRmdW5jX2VjaG9fSUZTCisgICAgICAkRUNITyAiJHByb2duYW1lJHtvcHRfbW9kZSs6ICRvcHRfbW9kZX06ICRfR19saW5lIgorICAgIGRvbmUKKyAgICBJRlM9JGZ1bmNfZWNob19JRlMKK30KKworCisjIGZ1bmNfd2FybmluZyBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJ0b29sIHdhcm5pbmdzIGFyZSBub3QgY2F0ZWdvcml6ZWQsIHNvIG92ZXJyaWRlIGZ1bmNsaWIuc2gKKyMgZnVuY193YXJuaW5nIHdpdGggdGhpcyBzaW1wbGVyIGRlZmluaXRpb24uCitmdW5jX3dhcm5pbmcgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkd2FybmluZ19mdW5jICR7MSsiJEAifQorfQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE9wdGlvbnMgcGFyc2luZy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBIb29rIGluIHRoZSBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIG91ciBvd24gb3B0aW9ucyBhcmUgcGFyc2VkIGR1cmluZworIyB0aGUgb3B0aW9uIHBhcnNpbmcgbG9vcC4KKwordXNhZ2U9JyRwcm9ncGF0aCBbT1BUSU9OXS4uLiBbTU9ERS1BUkddLi4uJworCisjIFNob3J0IGhlbHAgbWVzc2FnZSBpbiByZXNwb25zZSB0byAnLWgnLgordXNhZ2VfbWVzc2FnZT0iT3B0aW9uczoKKyAgICAgICAtLWNvbmZpZyAgICAgICAgICAgICBzaG93IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworICAgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworICAgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCisgICAgICAgLS1uby13YXJuaW5ncyAgICAgICAgZXF1aXZhbGVudCB0byAnLVdub25lJworICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisgICAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworICAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHByaW50IG1vcmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGFuIGRlZmF1bHQKKyAgICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCisgICAtVywgLS13YXJuaW5ncz1DQVRFR09SWSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZIFthbGxdCisgICAtaCwgLS1oZWxwLCAtLWhlbHAtYWxsICAgcHJpbnQgc2hvcnQsIGxvbmcsIG9yIGRldGFpbGVkIGhlbHAgbWVzc2FnZQorIgorCisjIEFkZGl0aW9uYWwgdGV4dCBhcHBlbmRlZCB0byAndXNhZ2VfbWVzc2FnZScgaW4gcmVzcG9uc2UgdG8gJy0taGVscCcuCitmdW5jX2hlbHAgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX3VzYWdlX21lc3NhZ2UKKyAgICAkRUNITyAiJGxvbmdfaGVscF9tZXNzYWdlCisKK01PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGNsZWFuICAgICAgICAgICByZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CisgICAgICAgY29tcGlsZSAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyAgICAgICBleGVjdXRlICAgICAgICAgYXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0KKyAgICAgICBmaW5pc2ggICAgICAgICAgY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcworICAgICAgIGluc3RhbGwgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworICAgICAgIGxpbmsgICAgICAgICAgICBjcmVhdGUgYSBsaWJyYXJ5IG9yIGFuIGV4ZWN1dGFibGUKKyAgICAgICB1bmluc3RhbGwgICAgICAgcmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxlZCBkaXJlY3RvcnkKKworTU9ERS1BUkdTIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBNT0RFLiAgV2hlbiBwYXNzZWQgYXMgZmlyc3Qgb3B0aW9uLAorJy0tbW9kZT1NT0RFJyBtYXkgYmUgYWJicmV2aWF0ZWQgYXMgJ01PREUnIG9yIGEgdW5pcXVlIGFiYnJldmlhdGlvbiBvZiB0aGF0LgorVHJ5ICckcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCisKK1doZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAoraW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisgICAgICAgaG9zdC10cmlwbGV0OiAgICRob3N0CisgICAgICAgc2hlbGw6ICAgICAgICAgICRTSEVMTAorICAgICAgIGNvbXBpbGVyOiAgICAgICAkTFRDQworICAgICAgIGNvbXBpbGVyIGZsYWdzOiAkTFRDRkxBR1MKKyAgICAgICBsaW5rZXI6ICAgICAgICAgJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyAgICAgICB2ZXJzaW9uOiAgICAgICAgJHByb2duYW1lIChHTlUgbGlidG9vbCkgMi40LjYKKyAgICAgICBhdXRvbWFrZTogICAgICAgYCgkQVVUT01BS0UgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAKKyAgICAgICBhdXRvY29uZjogICAgICAgYCgkQVVUT0NPTkYgLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1saWJ0b29sQGdudS5vcmc+LgorR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvPi4KK0dlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LiIKKyAgICBleGl0IDAKK30KKworCisjIGZ1bmNfbG8ybyBPQkpFQ1QtTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJhbnNmb3JtIE9CSkVDVC1OQU1FIGZyb20gYSAnLmxvJyBzdWZmaXggdG8gdGhlIHBsYXRmb3JtIHNwZWNpZmljCisjIG9iamVjdCBzdWZmaXguCisKK2xvMm89cy9cXC5sb1wkLy4kb2JqZXh0LworbzJsbz1zL1xcLiRvYmpleHRcJC8ubG8vCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfbG8ybyAoKQorICB7CisgICAgY2FzZSAkMSBpbgorICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4kb2JqZXh0IDs7CisgICAgICAqICAgKSBmdW5jX2xvMm9fcmVzdWx0PSQxICAgICAgICAgICAgICAgOzsKKyAgICBlc2FjCisgIH0nCisKKyAgIyBmdW5jX3hmb3JtIExJQk9CSi1PUi1TT1VSQ0UKKyAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIyBUcmFuc2Zvcm0gTElCT0JKLU9SLVNPVVJDRSBmcm9tIGEgJy5vJyBvciAnLmMnIChvciBvdGhlcndpc2UpCisgICMgc3VmZml4IHRvIGEgJy5sbycgbGlidG9vbC1vYmplY3Qgc3VmZml4LgorICBldmFsICdmdW5jX3hmb3JtICgpCisgIHsKKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD0kezElLip9LmxvCisgIH0nCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBzZWQuCisgIGZ1bmNfbG8ybyAoKQorICB7CisgICAgZnVuY19sbzJvX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRsbzJvImAKKyAgfQorCisgIGZ1bmNfeGZvcm0gKCkKKyAgeworICAgIGZ1bmNfeGZvcm1fcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAnc3xcLlteLl0qJHwubG98J2AKKyAgfQorZmkKKworCisjIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGNvbmZpZ3VyYXRpb24gZmFpbHVyZSBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAoKQoreworICAgIGZ1bmNfX2ZhdGFsX2Vycm9yICR7MSsiJEAifSBcCisgICAgICAiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgXAorICAgICAgIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuIgorfQorCisKKyMgZnVuY19jb25maWcKKyMgLS0tLS0tLS0tLS0KKyMgRGlzcGxheSB0aGUgY29uZmlndXJhdGlvbiBmb3IgYWxsIHRoZSB0YWdzIGluIHRoaXMgc2NyaXB0LgorZnVuY19jb25maWcgKCkKK3sKKyAgICByZV9iZWdpbmNmPSdeIyAjIyMgQkVHSU4gTElCVE9PTCcKKyAgICByZV9lbmRjZj0nXiMgIyMjIEVORCBMSUJUT09MJworCisgICAgIyBEZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisgICAgJFNFRCAiMSwvJHJlX2JlZ2luY2YgQ09ORklHL2Q7LyRyZV9lbmRjZiBDT05GSUcvLFwkZCIgPCAiJHByb2dwYXRoIgorCisgICAgIyBOb3cgcHJpbnQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFncy4KKyAgICBmb3IgdGFnbmFtZSBpbiAkdGFnbGlzdDsgZG8KKyAgICAgICRTRUQgLW4gIi8kcmVfYmVnaW5jZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkLywvJHJlX2VuZGNmIFRBRyBDT05GSUc6ICR0YWduYW1lXCQvcCIgPCAiJHByb2dwYXRoIgorICAgIGRvbmUKKworICAgIGV4aXQgJD8KK30KKworCisjIGZ1bmNfZmVhdHVyZXMKKyMgLS0tLS0tLS0tLS0tLQorIyBEaXNwbGF5IHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCitmdW5jX2ZlYXR1cmVzICgpCit7CisgICAgZWNobyAiaG9zdDogJGhvc3QiCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKyAgICAgIGVjaG8gImVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGVsc2UKKyAgICAgIGVjaG8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBmaQorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKyAgICAgIGVjaG8gImVuYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGVsc2UKKyAgICAgIGVjaG8gImRpc2FibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBmaQorCisgICAgZXhpdCAkPworfQorCisKKyMgZnVuY19lbmFibGVfdGFnIFRBR05BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVmVyaWZ5IHRoYXQgVEFHTkFNRSBpcyB2YWxpZCwgYW5kIGVpdGhlciBmbGFnIGFuIGVycm9yIGFuZCBleGl0LCBvcgorIyBlbmFibGUgdGhlIFRBR05BTUUgdGFnLiAgV2UgYWxzbyBhZGQgVEFHTkFNRSB0byB0aGUgZ2xvYmFsICR0YWdsaXN0CisjIHZhcmlhYmxlIGhlcmUuCitmdW5jX2VuYWJsZV90YWcgKCkKK3sKKyAgICAjIEdsb2JhbCB2YXJpYWJsZToKKyAgICB0YWduYW1lPSQxCisKKyAgICByZV9iZWdpbmNmPSJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICAgIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgICBzZWRfZXh0cmFjdGNmPS8kcmVfYmVnaW5jZi8sLyRyZV9lbmRjZi9wCisKKyAgICAjIFZhbGlkYXRlIHRhZ25hbWUuCisgICAgY2FzZSAkdGFnbmFtZSBpbgorICAgICAgKlshLV9BLVphLXowLTksL10qKQorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3cgaXQncworICAgICMgdGhlcmUgYnV0IG5vdCBzcGVjaWFsbHkgbWFya2VkLgorICAgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICAgICAgQ0MpIDs7CisgICAgKikKKyAgICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIHRhZ2xpc3Q9IiR0YWdsaXN0ICR0YWduYW1lIgorCisJICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLiAgQmUgY2FyZWZ1bCB0byBxdW90ZSB0aGUgcGF0aAorCSAgIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKKwkgICMgYWxzbyBkb24ndCB1c2Ugbm9uLXBvcnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFja3F1b3RlcyB3aXRoaW4KKwkgICMgcXVvdGVzIHdlIGhhdmUgdG8gZG8gaXQgaW4gMiBzdGVwczoKKwkgIGV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKKwkgIGV2YWwgIiRleHRyYWN0ZWRjZiIKKyAgICAgICAgZWxzZQorCSAgZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQorIyByZWxlYXNlIG9mIGxpYnRvb2wuCitmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKK3sKKyAgICBpZiB0ZXN0ICIkcGFja2FnZV9yZXZpc2lvbiIgIT0gIiRtYWNyb19yZXZpc2lvbiI7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgorICAgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gYW4gb2xkZXIgcmVsZWFzZS4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KKyRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgICAgZWxzZQorICAgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCBidXQgdGhlCiskcHJvZ25hbWU6IGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gJFBBQ0tBR0UgJG1hY3JvX3ZlcnNpb24uCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tICRQQUNLQUdFICRWRVJTSU9OCiskcHJvZ25hbWU6IGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIGNhdCA+JjIgPDxfTFRfRU9GCiskcHJvZ25hbWU6IFZlcnNpb24gbWlzbWF0Y2ggZXJyb3IuICBUaGlzIGlzICRQQUNLQUdFICRWRVJTSU9OLCByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbiwKKyRwcm9nbmFtZTogYnV0IHRoZSBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tIHJldmlzaW9uICRtYWNyb19yZXZpc2lvbi4KKyRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24KKyRwcm9nbmFtZTogb2YgJFBBQ0tBR0UgJFZFUlNJT04gYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KK19MVF9FT0YKKyAgICAgIGZpCisKKyAgICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKKyAgICBmaQorfQorCisKKyMgbGlidG9vbF9vcHRpb25zX3ByZXAgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJlcGFyYXRpb24gZm9yIG9wdGlvbnMgcGFyc2VkIGJ5IGxpYnRvb2wuCitsaWJ0b29sX29wdGlvbnNfcHJlcCAoKQoreworICAgICRkZWJ1Z19tb2RlCisKKyAgICAjIE9wdGlvbiBkZWZhdWx0czoKKyAgICBvcHRfY29uZmlnPWZhbHNlCisgICAgb3B0X2Rsb3Blbj0KKyAgICBvcHRfZHJ5X3J1bj1mYWxzZQorICAgIG9wdF9oZWxwPWZhbHNlCisgICAgb3B0X21vZGU9CisgICAgb3B0X3ByZXNlcnZlX2R1cF9kZXBzPWZhbHNlCisgICAgb3B0X3F1aWV0PWZhbHNlCisKKyAgICBub25vcHQ9CisgICAgcHJlc2VydmVfYXJncz0KKworICAgICMgU2hvcnRoYW5kIGZvciAtLW1vZGU9Zm9vLCBvbmx5IHZhbGlkIGFzIHRoZSBmaXJzdCBhcmd1bWVudAorICAgIGNhc2UgJDEgaW4KKyAgICBjbGVhbnxjbGVhfGNsZXxjbCkKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNsZWFuICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGNvbXBpbGUgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBleGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZXhlY3V0ZSAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIGZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBsaW5rfGxpbnxsaXxsKQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgbGluayAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIHVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQorICAgICAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgdW5pbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBQYXNzIGJhY2sgdGhlIGxpc3Qgb2Ygb3B0aW9ucy4KKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorICAgIGxpYnRvb2xfb3B0aW9uc19wcmVwX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKK30KK2Z1bmNfYWRkX2hvb2sgZnVuY19vcHRpb25zX3ByZXAgbGlidG9vbF9vcHRpb25zX3ByZXAKKworCisjIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucyBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvdmlkZSBoYW5kbGluZyBmb3IgbGlidG9vbCBzcGVjaWZpYyBvcHRpb25zLgorbGlidG9vbF9wYXJzZV9vcHRpb25zICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBQZXJmb3JtIG91ciBvd24gbG9vcCB0byBjb25zdW1lIGFzIG1hbnkgb3B0aW9ucyBhcyBwb3NzaWJsZSBpbgorICAgICMgZWFjaCBpdGVyYXRpb24uCisgICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KKyAgICAgIF9HX29wdD0kMQorICAgICAgc2hpZnQKKyAgICAgIGNhc2UgJF9HX29wdCBpbgorICAgICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfZHJ5X3J1bj06CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tY29uZmlnKSAgICAgICBmdW5jX2NvbmZpZyA7OworCisgICAgICAgIC0tZGxvcGVufC1kbG9wZW4pCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfZGxvcGVuPSIke29wdF9kbG9wZW4rJG9wdF9kbG9wZW4KK30kMSIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcHJlc2VydmVfZHVwX2RlcHM9OiA7OworCisgICAgICAgIC0tZmVhdHVyZXMpICAgICBmdW5jX2ZlYXR1cmVzIDs7CisKKyAgICAgICAgLS1maW5pc2gpICAgICAgIHNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQgOzsKKworICAgICAgICAtLWhlbHApICAgICAgICAgb3B0X2hlbHA9OiA7OworCisgICAgICAgIC0taGVscC1hbGwpICAgICBvcHRfaGVscD0nOiBoZWxwLWFsbCcgOzsKKworICAgICAgICAtLW1vZGUpICAgICAgICAgdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkX0dfb3B0ICYmIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfbW9kZT0kMQorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAkMSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhbnxjb21waWxlfGV4ZWN1dGV8ZmluaXNofGluc3RhbGx8bGlua3xyZWxpbmt8dW5pbnN0YWxsKSA7OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAqKSBmdW5jX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IGZvciAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0X2NtZD1leGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLW5vLXNpbGVudHwtLW5vLXF1aWV0KQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3F1aWV0PWZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1uby13YXJuaW5nc3wtLW5vLXdhcm5pbmd8LS1uby13YXJuKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmc9ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLW5vLXZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tc2lsZW50fC0tcXVpZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfcXVpZXQ9OgorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLXRhZykgICAgICAgICAgdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkX0dfb3B0ICYmIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdGFnPSQxCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCAkMSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZW5hYmxlX3RhZyAiJDEiCisgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLXZlcmJvc2V8LXYpICAgb3B0X3F1aWV0PWZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdmVyYm9zZT06CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKwkjIEFuIG9wdGlvbiBub3QgaGFuZGxlZCBieSB0aGlzIGhvb2sgZnVuY3Rpb246CisgICAgICAgICopCQlzZXQgZHVtbXkgIiRfR19vcHQiICR7MSsiJEAifTsJc2hpZnQ7IGJyZWFrICA7OworICAgICAgZXNhYworICAgIGRvbmUKKworCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBsaWJ0b29sX3BhcnNlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorZnVuY19hZGRfaG9vayBmdW5jX3BhcnNlX29wdGlvbnMgbGlidG9vbF9wYXJzZV9vcHRpb25zCisKKworCisjIGxpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhbnkgc2FuaXR5IGNoZWNrcyBvbiBvcHRpb24gc2V0dGluZ3MgYW5kL29yIHVuY29uc3VtZWQKKyMgYXJndW1lbnRzLgorbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zICgpCit7CisgICAgIyBzYXZlIGZpcnN0IG5vbi1vcHRpb24gYXJndW1lbnQKKyAgICBpZiB0ZXN0IDAgLWx0ICQjOyB0aGVuCisgICAgICBub25vcHQ9JDEKKyAgICAgIHNoaWZ0CisgICAgZmkKKworICAgICMgcHJlc2VydmUgLS1kZWJ1ZworICAgIHRlc3QgOiA9ICIkZGVidWdfY21kIiB8fCBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgLS1kZWJ1ZyIKKworICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICMgU29sYXJpczIgYWRkZWQgdG8gZml4IGh0dHA6Ly9kZWJidWdzLmdudS5vcmcvY2dpL2J1Z3JlcG9ydC5jZ2k/YnVnPTE2NDUyCisgICAgICAjIHNlZSBhbHNvOiBodHRwOi8vZ2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTU5Nzg4CisgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqIHwgKnNvbGFyaXMyKiB8ICpvczIqKQorICAgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworICAgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcworICAgICAgICA7OworICAgIGVzYWMKKworICAgICRvcHRfaGVscCB8fCB7CisgICAgICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisgICAgICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKworICAgICAgdGVzdCB5ZXMgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiIFwKKyAgICAgICAgJiYgdGVzdCB5ZXMgIT0gIiRidWlsZF9vbGRfbGlicyIgXAorICAgICAgICAmJiBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCisKKyAgICAgICMgRGFyd2luIHN1Y2tzCisgICAgICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgorCisgICAgICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorICAgICAgaWYgdGVzdCAtbiAiJG9wdF9kbG9wZW4iICYmIHRlc3QgZXhlY3V0ZSAhPSAiJG9wdF9tb2RlIjsgdGhlbgorICAgICAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uICctZGxvcGVuJyIKKyAgICAgICAgJEVDSE8gIiRoZWxwIiAxPiYyCisgICAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorICAgICAgZ2VuZXJpY19oZWxwPSRoZWxwCisgICAgICBoZWxwPSJUcnkgJyRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIH0KKworICAgICMgUGFzcyBiYWNrIHRoZSB1bnBhcnNlZCBhcmd1bWVudCBsaXN0CisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorZnVuY19hZGRfaG9vayBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zCisKKworIyBQcm9jZXNzIG9wdGlvbnMgYXMgZWFybHkgYXMgcG9zc2libGUgc28gdGhhdCAtLWhlbHAgYW5kIC0tdmVyc2lvbgorIyBjYW4gcmV0dXJuIHF1aWNrbHkuCitmdW5jX29wdGlvbnMgJHsxKyIkQCJ9CitldmFsIHNldCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBzaGlmdAorCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjICAgIE1haW4uICAgICMjCisjIyAtLS0tLS0tLS0tLSAjIworCittYWdpYz0nJSUlTUFHSUMgdmFyaWFibGUlJSUnCittYWdpY19leGU9JyUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJScKKworIyBHbG9iYWwgdmFyaWFibGVzLgorZXh0cmFjdGVkX2FyY2hpdmVzPQorZXh0cmFjdGVkX3NlcmlhbD0wCisKKyMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAorIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisjIGxlZnQgb3ZlciBieSBzaGVsbHMuCitleGVjX2NtZD0KKworCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyQxCitfTFRFQ0hPX0VPRicKK30KKworIyBmdW5jX2dlbmVyYXRlZF9ieV9saWJ0b29sCisjIFRydWUgaWZmIHN0ZGluIGhhcyBiZWVuIGdlbmVyYXRlZCBieSBMaWJ0b29sLiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkKKyMgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dCBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfZ2VuZXJhdGVkX2J5X2xpYnRvb2xfcCAoKQoreworICAkR1JFUCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4gL2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2xhbGliX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCAnLmxhJyBsaWJyYXJ5IG9yICcubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbGFsaWJfcCAoKQoreworICAgIHRlc3QgLWYgIiQxIiAmJgorICAgICAgJFNFRCAtZSA0cSAiJDEiIDI+L2Rldi9udWxsIHwgZnVuY19nZW5lcmF0ZWRfYnlfbGlidG9vbF9wCit9CisKKyMgZnVuY19sYWxpYl91bnNhZmVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sICcubGEnIGxpYnJhcnkgb3IgJy5sbycgb2JqZWN0IGZpbGUuCisjIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgc2FtZSBjaGVjayBhcyBmdW5jX2xhbGliX3Agd2l0aG91dAorIyByZXNvcnRpbmcgdG8gZXh0ZXJuYWwgcHJvZ3JhbXMuICBUbyB0aGlzIGVuZCwgaXQgcmVkaXJlY3RzIHN0ZGluIGFuZAorIyBjbG9zZXMgaXQgYWZ0ZXJ3YXJkcywgd2l0aG91dCBzYXZpbmcgdGhlIG9yaWdpbmFsIGZpbGUgZGVzY3JpcHRvci4KKyMgQXMgYSBzYWZldHkgbWVhc3VyZSwgdXNlIGl0IG9ubHkgd2hlcmUgYSBuZWdhdGl2ZSByZXN1bHQgd291bGQgYmUKKyMgZmF0YWwgYW55d2F5LiAgV29ya3MgaWYgJ2ZpbGUnIGRvZXMgbm90IGV4aXN0LgorZnVuY19sYWxpYl91bnNhZmVfcCAoKQoreworICAgIGxhbGliX3A9bm8KKyAgICBpZiB0ZXN0IC1mICIkMSIgJiYgdGVzdCAtciAiJDEiICYmIGV4ZWMgNTwmMCA8IiQxIjsgdGhlbgorCWZvciBsYWxpYl9wX2wgaW4gMSAyIDMgNAorCWRvCisJICAgIHJlYWQgbGFsaWJfcF9saW5lCisJICAgIGNhc2UgJGxhbGliX3BfbGluZSBpbgorCQlcI1wgR2VuZXJhdGVkXCBieVwgKiRQQUNLQUdFKiApIGxhbGliX3A9eWVzOyBicmVhazs7CisJICAgIGVzYWMKKwlkb25lCisJZXhlYyAwPCY1IDU8Ji0KKyAgICBmaQorICAgIHRlc3QgeWVzID0gIiRsYWxpYl9wIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAoKQoreworICAgIHRlc3QgLWYgIiQxIiAmJgorICAgICAgJGx0X3RydW5jYXRlX2JpbiA8ICIkMSIgMj4vZGV2L251bGwgfCBmdW5jX2dlbmVyYXRlZF9ieV9saWJ0b29sX3AKK30KKworIyBmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCB3cmFwcGVyIGV4ZWN1dGFibGUKKyMgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGEgYmFzaWMgc2FuaXR5IGNoZWNrOyBpdCB3aWxsIGhhcmRseSBmbHVzaCBvdXQKKyMgZGV0ZXJtaW5lZCBpbXBvc3RlcnMuCitmdW5jX2x0d3JhcHBlcl9leGVjdXRhYmxlX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0KKyAgICBjYXNlICQxIGluCisgICAgKi5leGUpIDs7CisgICAgKikgZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXg9LmV4ZSA7OworICAgIGVzYWMKKyAgICAkR1JFUCAiJG1hZ2ljX2V4ZSIgIiQxJGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4IiA+L2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lIGZpbGUKKyMgQXNzdW1lcyBmaWxlIGlzIGFuIGx0d3JhcHBlcl9leGVjdXRhYmxlCisjIHVzZXMgJGZpbGUgdG8gZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBmaWxlbmFtZSBmb3IgYQorIyB0ZW1wb3JhcnkgbHR3cmFwcGVyX3NjcmlwdC4KK2Z1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgKCkKK3sKKyAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkMSIgIiIgIi4iCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9JGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIKK30KKworIyBmdW5jX2x0d3JhcHBlcl9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgb3Igd3JhcHBlciBleGVjdXRhYmxlCisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkMSIgfHwgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkMSIKK30KKworCisjIGZ1bmNfZXhlY3V0ZV9jbWRzIGNvbW1hbmRzIGZhaWxfY21kCisjIEV4ZWN1dGUgdGlsZGUtZGVsaW1pdGVkIENPTU1BTkRTLgorIyBJZiBGQUlMX0NNRCBpcyBnaXZlbiwgZXZhbCB0aGF0IHVwb24gZmFpbHVyZS4KKyMgRkFJTF9DTUQgbWF5IHJlYWQtYWNjZXNzIHRoZSBjdXJyZW50IGNvbW1hbmQgaW4gdmFyaWFibGUgQ01EIQorZnVuY19leGVjdXRlX2NtZHMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisgICAgZm9yIGNtZCBpbiAkMTsgZG8KKyAgICAgIElGUz0kc3AkbmwKKyAgICAgIGV2YWwgY21kPVwiJGNtZFwiCisgICAgICBJRlM9JHNhdmVfaWZzCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGNtZCIgIiR7Mi06fSIKKyAgICBkb25lCisgICAgSUZTPSRzYXZlX2lmcworfQorCisKKyMgZnVuY19zb3VyY2UgZmlsZQorIyBTb3VyY2UgRklMRSwgYWRkaW5nIGRpcmVjdG9yeSBjb21wb25lbnQgaWYgbmVjZXNzYXJ5LgorIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCisjIEZJTEUgZXZlbiBpZiBib3RoIEZJTEUgYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKKyMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZworIyAnRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgorZnVuY19zb3VyY2UgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICQxIGluCisgICAgKi8qIHwgKlxcKikJLiAiJDEiIDs7CisgICAgKikJCS4gIi4vJDEiIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3QgUEFUSAorIyBSZXBsYWNlIGEgbGVhZGluZyA9IGluIFBBVEggd2l0aCBhIHN5c3Jvb3QuICBTdG9yZSB0aGUgcmVzdWx0IGludG8KKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CitmdW5jX3Jlc29sdmVfc3lzcm9vdCAoKQoreworICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JDEKKyAgY2FzZSAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IGluCisgID0qKQorICAgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfcmVwbGFjZV9zeXNyb290IFBBVEgKKyMgSWYgUEFUSCBiZWdpbnMgd2l0aCB0aGUgc3lzcm9vdCwgcmVwbGFjZSBpdCB3aXRoID0gYW5kCisjIHN0b3JlIHRoZSByZXN1bHQgaW50byBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQuCitmdW5jX3JlcGxhY2Vfc3lzcm9vdCAoKQoreworICBjYXNlICRsdF9zeXNyb290OiQxIGluCisgID8qOiIkbHRfc3lzcm9vdCIqKQorICAgIGZ1bmNfc3RyaXBuYW1lICIkbHRfc3lzcm9vdCIgJycgIiQxIgorICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0nPSckZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgOzsKKyAgKikKKyAgICAjIEluY2x1ZGluZyBubyBzeXNyb290LgorICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0kMQorICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2luZmVyX3RhZyBhcmcKKyMgSW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gdG8gdXNlIGlmIGFueSBhcmUgYXZhaWxhYmxlIGFuZAorIyBpZiBvbmUgd2Fzbid0IGNob3NlbiB2aWEgdGhlICItLXRhZyIgY29tbWFuZCBsaW5lIG9wdGlvbi4KKyMgT25seSBhdHRlbXB0IHRoaXMgaWYgdGhlIGNvbXBpbGVyIGluIHRoZSBiYXNlIGNvbXBpbGUKKyMgY29tbWFuZCBkb2Vzbid0IG1hdGNoIHRoZSBkZWZhdWx0IGNvbXBpbGVyLgorIyBhcmcgaXMgdXN1YWxseSBvZiB0aGUgZm9ybSAnZ2NjIC4uLicKK2Z1bmNfaW5mZXJfdGFnICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgaWYgdGVzdCAtbiAiJGF2YWlsYWJsZV90YWdzIiAmJiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKyAgICAgIENDX3F1b3RlZD0KKyAgICAgIGZvciBhcmcgaW4gJENDOyBkbworCWZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisgICAgICBkb25lCisgICAgICBDQ19leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NgCisgICAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKKyAgICAgIGNhc2UgJEAgaW4KKyAgICAgICMgQmxhbmtzIGluIHRoZSBjb21tYW5kIG1heSBoYXZlIGJlZW4gc3RyaXBwZWQgYnkgdGhlIGNhbGxpbmcgc2hlbGwsCisgICAgICAjIGJ1dCBub3QgZnJvbSB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiBjb25maWd1cmUgd2FzIHJ1bi4KKyAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgJENDX2V4cGFuZGVkICIqIHwgIiRDQ19leHBhbmRlZCAiKiB8IFwKKyAgICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikgOzsKKyAgICAgICMgQmxhbmtzIGF0IHRoZSBzdGFydCBvZiAkYmFzZV9jb21waWxlIHdpbGwgY2F1c2UgdGhpcyB0byBmYWlsCisgICAgICAjIGlmIHdlIGRvbid0IGNoZWNrIGZvciB0aGVtIGFzIHdlbGwuCisgICAgICAqKQorCWZvciB6IGluICRhdmFpbGFibGVfdGFnczsgZG8KKwkgIGlmICRHUkVQICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KKwkgICAgZXZhbCAiYCRTRUQgLW4gLWUgJy9eIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC8sL14jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAnJHonJC9wJyA8ICRwcm9ncGF0aGAiCisJICAgIENDX3F1b3RlZD0KKwkgICAgZm9yIGFyZyBpbiAkQ0M7IGRvCisJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorCSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisJICAgIGRvbmUKKwkgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorCSAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKKwkgICAgY2FzZSAiJEAgIiBpbgorCSAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiICRDQ19leHBhbmRlZCAiKiB8ICIkQ0NfZXhwYW5kZWQgIiogfCBcCisJICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikKKwkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcworCSAgICAgICMgdGhlIG9uZSBpbiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24uCisJICAgICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4KKwkgICAgICB0YWduYW1lPSR6CisJICAgICAgYnJlYWsKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCWRvbmUKKwkjIElmICR0YWduYW1lIHN0aWxsIGlzbid0IHNldCwgdGhlbiBubyB0YWdnZWQgY29uZmlndXJhdGlvbgorCSMgd2FzIGZvdW5kIGFuZCBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSAiLS10YWciIGNvbW1hbmQKKwkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KKwlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKwkgIGZ1bmNfZWNobyAidW5hYmxlIHRvIGluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCSAgZnVuY19mYXRhbF9lcnJvciAic3BlY2lmeSBhIHRhZyB3aXRoICctLXRhZyciCisjCWVsc2UKKyMJICBmdW5jX3ZlcmJvc2UgInVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorfQorCisKKworIyBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0IG91dHB1dF9uYW1lIHBpY19uYW1lIG5vbnBpY19uYW1lCisjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KK2Z1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgKCkKK3sKKyAgICB3cml0ZV9saWJvYmo9JDEKKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorICAgICAgd3JpdGVfbG9iaj1cJyQyXCcKKyAgICBlbHNlCisgICAgICB3cml0ZV9sb2JqPW5vbmUKKyAgICBmaQorCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorICAgICAgd3JpdGVfb2xkb2JqPVwnJDNcJworICAgIGVsc2UKKyAgICAgIHdyaXRlX29sZG9iaj1ub25lCisgICAgZmkKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBjYXQgPiR7d3JpdGVfbGlib2JqfVQgPDxFT0YKKyMgJHdyaXRlX2xpYm9iaiAtIGEgbGlidG9vbCBvYmplY3QgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04KKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgTmFtZSBvZiB0aGUgUElDIG9iamVjdC4KK3BpY19vYmplY3Q9JHdyaXRlX2xvYmoKKworIyBOYW1lIG9mIHRoZSBub24tUElDIG9iamVjdAorbm9uX3BpY19vYmplY3Q9JHdyaXRlX29sZG9iagorCitFT0YKKyAgICAgICRNViAiJHt3cml0ZV9saWJvYmp9VCIgIiR3cml0ZV9saWJvYmoiCisgICAgfQorfQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEZJTEUgTkFNRSBBTkQgUEFUSCBDT05WRVJTSU9OIEhFTFBFUiBGVU5DVElPTlMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyIEFSRworIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgd2hlbiAkYnVpbGQgaXMgKm5peCwKKyMgYW5kICRob3N0IGlzIG1pbmd3LCBjeWd3aW4sIG9yIHNvbWUgb3RoZXIgdzMyIGVudmlyb25tZW50LiBSZWxpZXMgb24gYQorIyBjb3JyZWN0bHkgY29uZmlndXJlZCB3aW5lIGVudmlyb25tZW50IGF2YWlsYWJsZSwgd2l0aCB0aGUgd2luZXBhdGggcHJvZ3JhbQorIyBpbiAkYnVpbGQncyAkUEFUSC4KKyMKKyMgQVJHIGlzIHRoZSAkYnVpbGQgZmlsZSBuYW1lIHRvIGJlIGNvbnZlcnRlZCB0byB3MzIgZm9ybWF0LgorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluICRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCwgYW5kIHdpbGwKKyMgYmUgZW1wdHkgb24gZXJyb3IgKG9yIHdoZW4gQVJHIGlzIGVtcHR5KQorZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybyBlcnJvciBjb2RlLCBzbyB3ZQorICAgICMgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2Ygc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlCisgICAgIyBjb21tYW5kIGlzIG5vdCBmb3VuZCwgdGhlIHNoZWxsIHdpbGwgc2V0IGFuIGV4aXQgY29kZSBvZiAxMjcgYW5kIHByaW50CisgICAgIyAqYW4gZXJyb3IgbWVzc2FnZSogdG8gc3Rkb3V0LiBTbyB3ZSBtdXN0IGNoZWNrIGZvciBib3RoIGVycm9yIGNvZGUgb2YKKyAgICAjIHplcm8gQU5EIG5vbi1lbXB0eSBzdGRvdXQsIHdoaWNoIGV4cGxhaW5zIHRoZSBvZGQgY29uc3RydWN0aW9uOgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wPWB3aW5lcGF0aCAtdyAiJDEiIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgIiQ/IiAtZXEgMCAmJiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl90bXAiOyB0aGVuCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCIgfAorICAgICAgICAkU0VEIC1lICIkc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgZWxzZQorICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9CisgICAgZmkKKyAgZmkKK30KKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyIEFSRworIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsIGFuZAorIyAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEgY29ycmVjdGx5CisjIGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0gaW4gJGJ1aWxkJ3MKKyMgJFBBVEguIEFzc3VtZXMgQVJHIGhhcyBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMuCisjCisjIEFSRyBpcyBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gd2luMzIuCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0LgorIyBVbmNvbnZlcnRpYmxlIGZpbGUgKGRpcmVjdG9yeSkgbmFtZXMgaW4gQVJHIGFyZSBza2lwcGVkOyBpZiBubyBkaXJlY3RvcnkgbmFtZXMKKyMgYXJlIGNvbnZlcnRpYmxlLCB0aGVuIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5LgorZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAoKQoreworICAkZGVidWdfY21kCisKKyAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aHMsIG9ubHkgZmlsZSBuYW1lcworICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0KKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgb2xkSUZTPSRJRlMKKyAgICBJRlM9OgorICAgIGZvciBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YgaW4gJDE7IGRvCisgICAgICBJRlM9JG9sZElGUworICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiIKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IjsgdGhlbgorICAgICAgICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdAorICAgICAgICBlbHNlCisgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQgIjskZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9JG9sZElGUworICBmaQorfQorIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIKKworCisjIGZ1bmNfY3lncGF0aCBBUkdTLi4uCisjIFdyYXBwZXIgYXJvdW5kIGNhbGxpbmcgdGhlIGN5Z3BhdGggcHJvZ3JhbSB2aWEgTFRfQ1lHUEFUSC4gVGhpcyBpcyB1c2VkIHdoZW4KKyMgd2hlbiAoMSkgJGJ1aWxkIGlzICpuaXggYW5kIEN5Z3dpbiBpcyBob3N0ZWQgdmlhIGEgd2luZSBlbnZpcm9ubWVudDsgb3IgKDIpCisjICRidWlsZCBpcyBNU1lTIGFuZCAkaG9zdCBpcyBDeWd3aW4sIG9yICgzKSAkYnVpbGQgaXMgQ3lnd2luLiBJbiBjYXNlICgxKSBvcgorIyAoMiksIHJldHVybnMgdGhlIEN5Z3dpbiBmaWxlIG5hbWUgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dAorIyBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluIHczMiBmb3JtYXQsIGFzIHByZXZpb3VzbHkgY29udmVydGVkCisjIGZyb20gJGJ1aWxkJ3MgKm5peCBvciBNU1lTIGZvcm1hdCkuIEluIGNhc2UgKDMpLCByZXR1cm5zIHRoZSB3MzIgZmlsZSBuYW1lCisjIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbgorIyBDeWd3aW4gZm9ybWF0KS4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgb24gZXJyb3IuCisjCisjIEFSR1MgYXJlIHBhc3NlZCB0byBjeWdwYXRoLCB3aXRoIHRoZSBsYXN0IG9uZSBiZWluZyB0aGUgZmlsZSBuYW1lIG9yIHBhdGggdG8KKyMgYmUgY29udmVydGVkLgorIworIyBTcGVjaWZ5IHRoZSBhYnNvbHV0ZSAqbml4IChvciB3MzIpIG5hbWUgdG8gY3lncGF0aCBpbiB0aGUgTFRfQ1lHUEFUSAorIyBlbnZpcm9ubWVudCB2YXJpYWJsZTsgZG8gbm90IHB1dCBpdCBpbiAkUEFUSC4KK2Z1bmNfY3lncGF0aCAoKQoreworICAkZGVidWdfY21kCisKKyAgaWYgdGVzdCAtbiAiJExUX0NZR1BBVEgiICYmIHRlc3QgLWYgIiRMVF9DWUdQQVRIIjsgdGhlbgorICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9YCRMVF9DWUdQQVRIICIkQCIgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAiJD8iIC1uZSAwOyB0aGVuCisgICAgICAjIG9uIGZhaWx1cmUsIGVuc3VyZSByZXN1bHQgaXMgZW1wdHkKKyAgICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisgICAgZmkKKyAgZWxzZQorICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9CisgICAgZnVuY19lcnJvciAiTFRfQ1lHUEFUSCBpcyBlbXB0eSBvciBzcGVjaWZpZXMgbm9uLWV4aXN0ZW50IGZpbGU6ICckTFRfQ1lHUEFUSCciCisgIGZpCit9CisjZW5kOiBmdW5jX2N5Z3BhdGgKKworCisjIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBvciBwYXRoIEFSRyBmcm9tIE1TWVMgZm9ybWF0IHRvIHczMiBmb3JtYXQuICBSZXR1cm4KKyMgcmVzdWx0IGluIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKKyAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0PWAoIGNtZCAvL2MgZWNobyAiJDEiICkgMj4vZGV2L251bGwgfAorICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRzZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKK30KKyNlbmQ6IGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayBBUkcxIEFSRzIKKyMgVmVyaWZ5IHRoYXQgQVJHMSAoYSBmaWxlIG5hbWUgaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorIyBmb3JtYXQgaW4gQVJHMi4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSAocmVzZXR0aW5nCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBBUkcxKS4KK2Z1bmNfY29udmVydF9maWxlX2NoZWNrICgpCit7CisgICRkZWJ1Z19jbWQKKworICBpZiB0ZXN0IC16ICIkMiIgJiYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19lcnJvciAiQ291bGQgbm90IGRldGVybWluZSBob3N0IGZpbGUgbmFtZSBjb3JyZXNwb25kaW5nIHRvIgorICAgIGZ1bmNfZXJyb3IgIiAgJyQxJyIKKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKyAgICAjIEZhbGxiYWNrOgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIEZST01fUEFUSFNFUCBUT19QQVRIU0VQIEZST01fUEFUSCBUT19QQVRICisjIFZlcmlmeSB0aGF0IEZST01fUEFUSCAoYSBwYXRoIGluICRidWlsZCBmb3JtYXQpIHdhcyBjb252ZXJ0ZWQgdG8gJGhvc3QKKyMgZm9ybWF0IGluIFRPX1BBVEguIE90aGVyd2lzZSwgZW1pdCBhbiBlcnJvciBtZXNzYWdlLCBidXQgY29udGludWUsIHJlc2V0dGluZworIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQgdG8gYSBzaW1wbGlzdGljIGZhbGxiYWNrIHZhbHVlIChzZWUgYmVsb3cpLgorZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGlmIHRlc3QgLXogIiQ0IiAmJiB0ZXN0IC1uICIkMyI7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKyAgICBmdW5jX2Vycm9yICIgICckMyciCisgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCisgICAgIyBGYWxsYmFjay4gIFRoaXMgaXMgYSBkZWxpYmVyYXRlbHkgc2ltcGxpc3RpYyAiY29udmVyc2lvbiIgYW5kCisgICAgIyBzaG91bGQgbm90IGJlICJpbXByb3ZlZCIuICBTZWUgbGlidG9vbC5pbmZvLgorICAgIGlmIHRlc3QgIngkMSIgIT0gIngkMiI7IHRoZW4KKyAgICAgIGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycz0ic3wkMXwkMnxnIgorICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkMyIgfAorICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzImAKKyAgICBlbHNlCisgICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDMKKyAgICBmaQorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCBGUk9OVFBBVCBCQUNLUEFUIFJFUEwgT1JJRworIyBNb2RpZmllcyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgYnkgcHJlcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBGUk9OVFBBVAorIyBhbmQgYXBwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEJBQ0tQQVQuCitmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGNhc2UgJDQgaW4KKyAgJDEgKSBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDMkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0CisgICAgOzsKKyAgZXNhYworICBjYXNlICQ0IGluCisgICQyICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0ICIkMyIKKyAgICA7OworICBlc2FjCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkYnVpbGQgdG8gJGhvc3QgRklMRSBOQU1FIENPTlZFUlNJT04gRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGludm9rZWQgdmlhICckdG9faG9zdF9maWxlX2NtZCBBUkcnCisjCisjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCisjIFJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorCisKKyMgZnVuY190b19ob3N0X2ZpbGUgQVJHCisjIENvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY190b19ob3N0X2ZpbGUgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgICR0b19ob3N0X2ZpbGVfY21kICIkMSIKK30KKyMgZW5kIGZ1bmNfdG9faG9zdF9maWxlCisKKworIyBmdW5jX3RvX3Rvb2xfZmlsZSBBUkcgTEFaWQorIyBjb252ZXJ0cyB0aGUgZmlsZSBuYW1lIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gdG9vbGNoYWluIGZvcm1hdC4gUmV0dXJuCisjIHJlc3VsdCBpbiBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQuICBJZiB0aGUgY29udmVyc2lvbiBpbiB1c2UgaXMgbGlzdGVkCisjIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHRha2VzIHBsYWNlLgorZnVuY190b190b29sX2ZpbGUgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGNhc2UgLCQyLCBpbgorICAgICosIiR0b190b29sX2ZpbGVfY21kIiwqKQorICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSQxCisgICAgICA7OworICAgICopCisgICAgICAkdG9fdG9vbF9maWxlX2NtZCAiJDEiCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdAorICAgICAgOzsKKyAgZXNhYworfQorIyBlbmQgZnVuY190b190b29sX2ZpbGUKKworCisjIGZ1bmNfY29udmVydF9maWxlX25vb3AgQVJHCisjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25vb3AgKCkKK3sKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9ub29wCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0CisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBiZWNhdXNlICRidWlsZCBpcyBjeWd3aW4sIHdlIGNhbGwgInRoZSIgY3lncGF0aCBpbiAkUEFUSDsgbm8gbmVlZCB0byB1c2UKKyAgICAjIExUX0NZR1BBVEggaW4gdGhpcyBjYXNlLgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD1gY3lncGF0aCAtbSAiJDEiYAorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50CisjIGFuZCBhIHdvcmtpbmcgd2luZXBhdGguIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25peF90b193MzIgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0CisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gTVNZUyB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgTFRfQ1lHUEFUSCBzZXQuCisjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkCisjIGluIGEgd2luZSBlbnZpcm9ubWVudCwgd29ya2luZyB3aW5lcGF0aCwgYW5kIExUX0NZR1BBVEggc2V0LiAgUmV0dXJucyByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgY29udmVydCBmcm9tICpuaXggdG8gdzMyLCB0aGVuIHVzZSBjeWdwYXRoIHRvIGNvbnZlcnQgZnJvbSB3MzIgdG8gY3lnd2luLgorICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgIiQxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkYnVpbGQgdG8gJGhvc3QgUEFUSCBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgaW52b2tlZCB2aWEgJyR0b19ob3N0X3BhdGhfY21kIEFSRycKKyMKKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKyMgVGhlIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorIworIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuICBJZgorIyBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQKKyMgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkgb24gb3V0cHV0LgorIworIyBBbGwgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgbmFtZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uOgorIyAgIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9uICAgIDogZnVuY19jb252ZXJ0X2ZpbGVfWF90b19ZICgpCisjICAgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9uICAgICAgICAgOiBmdW5jX2NvbnZlcnRfcGF0aF9YX3RvX1kgKCkKKyMgd2hlcmUsIGZvciBhbnkgZ2l2ZW4gJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9uIHRoZSAnWF90b19ZJyB2YWx1ZSBpcyB0aGUKKyMgc2FtZS4gIElmIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBhZGRlZCBmb3IgbmV3ICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMsCisjIHRoZSB0d28gbmV3IGZ1bmN0aW9ucyBtdXN0IGZvbGxvdyB0aGlzIHBhdHRlcm4sIG9yIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisjIHdpbGwgYnJlYWsuCisKKworIyBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorIyBFbnN1cmVzIHRoYXQgZnVuY3Rpb24gInBvaW50ZXIiIHZhcmlhYmxlICR0b19ob3N0X3BhdGhfY21kIGlzIHNldCB0byB0aGUKKyMgYXBwcm9wcmlhdGUgdmFsdWUsIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiAkdG9faG9zdF9maWxlX2NtZC4KK3RvX2hvc3RfcGF0aF9jbWQ9CitmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZCAoKQoreworICAkZGVidWdfY21kCisKKyAgaWYgdGVzdCAteiAiJHRvX2hvc3RfcGF0aF9jbWQiOyB0aGVuCisgICAgZnVuY19zdHJpcG5hbWUgJ2Z1bmNfY29udmVydF9maWxlXycgJycgIiR0b19ob3N0X2ZpbGVfY21kIgorICAgIHRvX2hvc3RfcGF0aF9jbWQ9ZnVuY19jb252ZXJ0X3BhdGhfJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICBmaQorfQorCisKKyMgZnVuY190b19ob3N0X3BhdGggQVJHCisjIENvbnZlcnRzIHRoZSBwYXRoIEFSRyBmcm9tICRidWlsZCBmb3JtYXQgdG8gJGhvc3QgZm9ybWF0LiBSZXR1cm4gcmVzdWx0CisjIGluIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KK2Z1bmNfdG9faG9zdF9wYXRoICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorICAkdG9faG9zdF9wYXRoX2NtZCAiJDEiCit9CisjIGVuZCBmdW5jX3RvX2hvc3RfcGF0aAorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbm9vcCBBUkcKKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbm9vcCAoKQoreworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25vb3AKKworCisjIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKG1pbmd3KSBNU1lTIHRvIChtaW5ndykgdzMyIGZvcm1hdDsgYXV0b21hdGljCisjIGNvbnZlcnNpb24gdG8gdzMyIGlzIG5vdCBhdmFpbGFibGUgaW5zaWRlIHRoZSBjd3JhcHBlci4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tIEFSRy4gIE1TWVMKKyAgICAjIGJlaGF2aW9yIGlzIGluY29uc2lzdGVudCBoZXJlOyBjeWdwYXRoIHR1cm5zIHRoZW0gaW50byAnLjsnIGFuZCAnOy4nOworICAgICMgYW5kIHdpbmVwYXRoIGlnbm9yZXMgdGhlbSBjb21wbGV0ZWx5LgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIEN5Z3dpbiB0byB3MzIgZm9ybWF0LiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBjeWdwYXRoIC1tIC1wICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSJgCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9jeWd3aW5fdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyIEFSRworIyBDb252ZXJ0IHBhdGggQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50IGFuZAorIyBhIHdvcmtpbmcgd2luZXBhdGguICBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b19jeWd3aW4KKworCisjIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAqbml4IHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBDeWd3aW4gaW5zdGFsbGVkIGluIGEKKyMgYSB3aW5lIGVudmlyb25tZW50LCB3b3JraW5nIHdpbmVwYXRoLCBhbmQgTFRfQ1lHUEFUSCBzZXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCisgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQorICAgICMgaW50byAnLjsnIGFuZCAnOy4nLCBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbgorCisKKyMgZnVuY19kbGxfZGVmX3AgRklMRQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgV2luZG93cyBETEwgJy5kZWYnIGZpbGUuCisjIEtlZXAgaW4gc3luYyB3aXRoIF9MVF9ETExfREVGX1AgaW4gbGlidG9vbC5tNAorZnVuY19kbGxfZGVmX3AgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfZGxsX2RlZl9wX3RtcD1gJFNFRCAtbiBcCisgICAgLWUgJ3MvXlsJIF0qLy8nIFwKKyAgICAtZSAnL15cKDsuKlwpKiQvZCcgXAorICAgIC1lICdzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCcgXAorICAgIC1lIHEgXAorICAgICIkMSJgCisgIHRlc3QgREVGID0gIiRmdW5jX2RsbF9kZWZfcF90bXAiCit9CisKKworIyBmdW5jX21vZGVfY29tcGlsZSBhcmcuLi4KK2Z1bmNfbW9kZV9jb21waWxlICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KKyAgICBiYXNlX2NvbXBpbGU9CisgICAgc3JjZmlsZT0kbm9ub3B0ICAjICBhbHdheXMga2VlcCBhIG5vbi1lbXB0eSB2YWx1ZSBpbiAic3JjZmlsZSIKKyAgICBzdXBwcmVzc19vcHQ9eWVzCisgICAgc3VwcHJlc3Nfb3V0cHV0PQorICAgIGFyZ19tb2RlPW5vcm1hbAorICAgIGxpYm9iaj0KKyAgICBsYXRlcj0KKyAgICBwaWVfZmxhZz0KKworICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICAgIGFyZyAgKQorCSMgZG8gbm90ICJjb250aW51ZSIuICBJbnN0ZWFkLCBhZGQgdGhpcyB0byBiYXNlX2NvbXBpbGUKKwlsYXN0YXJnPSRhcmcKKwlhcmdfbW9kZT1ub3JtYWwKKwk7OworCisgICAgICB0YXJnZXQgKQorCWxpYm9iaj0kYXJnCisJYXJnX21vZGU9bm9ybWFsCisJY29udGludWUKKwk7OworCisgICAgICBub3JtYWwgKQorCSMgQWNjZXB0IGFueSBjb21tYW5kLWxpbmUgb3B0aW9ucy4KKwljYXNlICRhcmcgaW4KKwktbykKKwkgIHRlc3QgLW4gIiRsaWJvYmoiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5ICctbycgbW9yZSB0aGFuIG9uY2UiCisJICBhcmdfbW9kZT10YXJnZXQKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXBpZSB8IC1mcGllIHwgLWZQSUUpCisgICAgICAgICAgZnVuY19hcHBlbmQgcGllX2ZsYWcgIiAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktc2hhcmVkIHwgLXN0YXRpYyB8IC1wcmVmZXItcGljIHwgLXByZWZlci1ub24tcGljKQorCSAgZnVuY19hcHBlbmQgbGF0ZXIgIiAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktbm8tc3VwcHJlc3MpCisJICBzdXBwcmVzc19vcHQ9bm8KKwkgIGNvbnRpbnVlCisJICA7OworCisJLVhjb21waWxlcikKKwkgIGFyZ19tb2RlPWFyZyAgIyAgdGhlIG5leHQgb25lIGdvZXMgaW50byB0aGUgImJhc2VfY29tcGlsZSIgYXJnIGxpc3QKKwkgIGNvbnRpbnVlICAgICAgIyAgVGhlIGN1cnJlbnQgInNyY2ZpbGUiIHdpbGwgZWl0aGVyIGJlIHJldGFpbmVkIG9yCisJICA7OyAgICAgICAgICAgICMgIHJlcGxhY2VkIGxhdGVyLiAgSSB3b3VsZCBndWVzcyB0aGF0IHdvdWxkIGJlIGEgYnVnLgorCisJLVdjLCopCisJICBmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCisJICBhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGxhc3Rhcmc9CisJICBzYXZlX2lmcz0kSUZTOyBJRlM9LAorCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKwkgICAgSUZTPSRzYXZlX2lmcworCSAgICBmdW5jX2FwcGVuZF9xdW90ZWQgbGFzdGFyZyAiJGFyZyIKKwkgIGRvbmUKKwkgIElGUz0kc2F2ZV9pZnMKKwkgIGZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGxhc3RhcmciCisJICBsYXN0YXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworCSAgIyBBZGQgdGhlIGFyZ3VtZW50cyB0byBiYXNlX2NvbXBpbGUuCisJICBmdW5jX2FwcGVuZCBiYXNlX2NvbXBpbGUgIiAkbGFzdGFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCisJKikKKwkgICMgQWNjZXB0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGFzIHRoZSBzb3VyY2UgZmlsZS4KKwkgICMgVGhlIHByZXZpb3VzICJzcmNmaWxlIiBiZWNvbWVzIHRoZSBjdXJyZW50IGFyZ3VtZW50LgorCSAgIworCSAgbGFzdGFyZz0kc3JjZmlsZQorCSAgc3JjZmlsZT0kYXJnCisJICA7OworCWVzYWMgICMgIGNhc2UgJGFyZworCTs7CisgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCisgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYmFzZV9jb21waWxlICIkbGFzdGFyZyIKKyAgICBkb25lICMgZm9yIGFyZworCisgICAgY2FzZSAkYXJnX21vZGUgaW4KKyAgICBhcmcpCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGFyZ3VtZW50IGZvciAtWGNvbXBpbGUiCisgICAgICA7OworICAgIHRhcmdldCkKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCAnLW8nIgorICAgICAgOzsKKyAgICAqKQorICAgICAgIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgb2JqZWN0LgorICAgICAgdGVzdCAteiAiJGxpYm9iaiIgJiYgeworCWZ1bmNfYmFzZW5hbWUgIiRzcmNmaWxlIgorCWxpYm9iaj0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICAgIH0KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBSZWNvZ25pemUgc2V2ZXJhbCBkaWZmZXJlbnQgZmlsZSBzdWZmaXhlcy4KKyAgICAjIElmIHRoZSB1c2VyIHNwZWNpZmllcyAtbyBmaWxlLm8sIGl0IGlzIHJlcGxhY2VkIHdpdGggZmlsZS5sbworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICouW2NDRlNpZm1zb10gfCBcCisgICAgKi5hZGEgfCAqLmFkYiB8ICouYWRzIHwgKi5hc20gfCBcCisgICAgKi5jKysgfCAqLmNjIHwgKi5paSB8ICouY2xhc3MgfCAqLmNwcCB8ICouY3h4IHwgXAorICAgICouW2ZGXVswOV0/IHwgKi5mb3IgfCAqLmphdmEgfCAqLmdvIHwgKi5vYmogfCAqLnN4IHwgKi5jdSB8ICouY3VwKQorICAgICAgZnVuY194Zm9ybSAiJGxpYm9iaiIKKyAgICAgIGxpYm9iaj0kZnVuY194Zm9ybV9yZXN1bHQKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkbGlib2JqIGluCisgICAgKi5sbykgZnVuY19sbzJvICIkbGlib2JqIjsgb2JqPSRmdW5jX2xvMm9fcmVzdWx0IDs7CisgICAgKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tICckbGlib2JqJyIKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQorCisgICAgZm9yIGFyZyBpbiAkbGF0ZXI7IGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgXAorCSAgfHwgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW5ub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXN0YXRpYykKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKwlidWlsZF9vbGRfbGlicz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItcGljKQorCXBpY19tb2RlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1ub24tcGljKQorCXBpY19tb2RlPW5vCisJY29udGludWUKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsaWJvYmoiCisgICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IiBcCisgICAgICAmJiAkRUNITyAiWCRsaWJvYmoiIHwgJEdSRVAgJ1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10nIFwKKyAgICAgICYmIGZ1bmNfd2FybmluZyAibGlib2JqIG5hbWUgJyRsaWJvYmonIG1heSBub3QgY29udGFpbiBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuIgorICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvYmoiICIvIiAiIgorICAgIG9iam5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgICAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorICAgIGxvYmo9JHhkaXIkb2JqZGlyLyRvYmpuYW1lCisKKyAgICB0ZXN0IC16ICIkYmFzZV9jb21waWxlIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBjb21waWxhdGlvbiBjb21tYW5kIgorCisgICAgIyBEZWxldGUgYW55IGxlZnRvdmVyIGxpYnJhcnkgb2JqZWN0cy4KKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisgICAgICByZW1vdmVsaXN0PSIkb2JqICRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBlbHNlCisgICAgICByZW1vdmVsaXN0PSIkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCisgICAgZmkKKworICAgICMgT24gQ3lnd2luIHRoZXJlJ3Mgbm8gInJlYWwiIFBJQyBmbGFnIHNvIHdlIG11c3QgYnVpbGQgYm90aCBvYmplY3QgdHlwZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgIDs7CisgICAgZXNhYworICAgIGlmIHRlc3Qgbm8gPSAiJHBpY19tb2RlIiAmJiB0ZXN0IHBhc3NfYWxsICE9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCisgICAgICAjIG5vbi1QSUMgY29kZSBpbiBzaGFyZWQgbGlicmFyaWVzIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICBmaQorCisgICAgIyBDYWxjdWxhdGUgdGhlIGZpbGVuYW1lIG9mIHRoZSBvdXRwdXQgb2JqZWN0IGlmIGNvbXBpbGVyIGRvZXMKKyAgICAjIG5vdCBzdXBwb3J0IC1vIHdpdGggLWMKKyAgICBpZiB0ZXN0IG5vID0gIiRjb21waWxlcl9jX28iOyB0aGVuCisgICAgICBvdXRwdXRfb2JqPWAkRUNITyAiJHNyY2ZpbGUiIHwgJFNFRCAncyVeLiovJSU7IHMlXC5bXi5dKiQlJSdgLiRvYmpleHQKKyAgICAgIGxvY2tmaWxlPSRvdXRwdXRfb2JqLmxvY2sKKyAgICBlbHNlCisgICAgICBvdXRwdXRfb2JqPQorICAgICAgbmVlZF9sb2Nrcz1ubworICAgICAgbG9ja2ZpbGU9CisgICAgZmkKKworICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCisgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQorICAgIGlmIHRlc3QgeWVzID0gIiRuZWVkX2xvY2tzIjsgdGhlbgorICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbworCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGVsaWYgdGVzdCB3YXJuID0gIiRuZWVkX2xvY2tzIjsgdGhlbgorICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgorCSRFQ0hPICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCAnLWMnIGFuZCAnLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKyAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkb3V0cHV0X29iaiIKKyAgICAgICRFQ0hPICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgIGZpCisKKyAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisgICAgZnVuY19hcHBlbmQgcmVtb3ZlbGlzdCAiICRsb2NrZmlsZSIKKyAgICB0cmFwICckb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnIDEgMiAxNQorCisgICAgZnVuY190b190b29sX2ZpbGUgIiRzcmNmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgIHNyY2ZpbGU9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorCisgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKyAgICAgICMgV2l0aG91dCB0aGlzIGFzc2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVtcHRpZWQuCisgICAgICBmYnNkX2hpZGVvdXNfc2hfYnVnPSRiYXNlX2NvbXBpbGUKKworICAgICAgaWYgdGVzdCBubyAhPSAiJHBpY19tb2RlIjsgdGhlbgorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGVsc2UKKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCisgICAgICBmaQorCisgICAgICBmdW5jX21rZGlyX3AgIiR4ZGlyJG9iamRpciIKKworICAgICAgaWYgdGVzdCAteiAiJG91dHB1dF9vYmoiOyB0aGVuCisJIyBQbGFjZSBQSUMgb2JqZWN0cyBpbiAkb2JqZGlyCisJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRsb2JqIgorICAgICAgZmkKKworICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIJXAorICAgICAgICAgICd0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUnCisKKyAgICAgIGlmIHRlc3Qgd2FybiA9ICIkbmVlZF9sb2NrcyIgJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkRUNITyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0ICctYycgYW5kICctbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZCwgdGhlbiBnbyBvbiB0byBjb21waWxlIHRoZSBuZXh0IG9uZQorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkbG9iaiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRsb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKKyAgICAgIGZpCisKKyAgICAgICMgQWxsb3cgZXJyb3IgbWVzc2FnZXMgb25seSBmcm9tIHRoZSBmaXJzdCBjb21waWxhdGlvbi4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwcmVzc19vcHQiOyB0aGVuCisJc3VwcHJlc3Nfb3V0cHV0PScgPi9kZXYvbnVsbCAyPiYxJworICAgICAgZmkKKyAgICBmaQorCisgICAgIyBPbmx5IGJ1aWxkIGEgcG9zaXRpb24tZGVwZW5kZW50IG9iamVjdCBpZiB3ZSBidWlsZCBvbGQgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzICE9ICIkcGljX21vZGUiOyB0aGVuCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlJHBpZV9mbGFnIgorICAgICAgZWxzZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IHllcyA9ICIkY29tcGlsZXJfY19vIjsgdGhlbgorCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkb2JqIgorICAgICAgZmkKKworICAgICAgIyBTdXBwcmVzcyBjb21waWxlciBvdXRwdXQgaWYgd2UgYWxyZWFkeSBkaWQgYSBQSUMgY29tcGlsYXRpb24uCisgICAgICBmdW5jX2FwcGVuZCBjb21tYW5kICIkc3VwcHJlc3Nfb3V0cHV0IgorICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIgXAorICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJworCisgICAgICBpZiB0ZXN0IHdhcm4gPSAiJG5lZWRfbG9ja3MiICYmCisJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCisJJEVDSE8gIlwKKyoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK2J1dCBpdCBzaG91bGQgY29udGFpbjoKKyRzcmNmaWxlCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCAnLWMnIGFuZCAnLW8nIHRvZ2V0aGVyLiAgSWYgeW91CityZXBlYXQgdGhpcyBjb21waWxhdGlvbiwgaXQgbWF5IHN1Y2NlZWQsIGJ5IGNoYW5jZSwgYnV0IHlvdSBoYWQgYmV0dGVyCithdm9pZCBwYXJhbGxlbCBidWlsZHMgKG1ha2UgLWopIGluIHRoaXMgcGxhdGZvcm0sIG9yIGdldCBhIGJldHRlcgorY29tcGlsZXIuIgorCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQKKyAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJG9iaiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJE1WICIkb3V0cHV0X29iaiIgIiRvYmoiJyBcCisJICAnZXJyb3I9JD87ICRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJGVycm9yJworICAgICAgZmkKKyAgICBmaQorCisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3QgIiRsaWJvYmoiICIkb2JqZGlyLyRvYmpuYW1lIiAiJG9iam5hbWUiCisKKyAgICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKKyAgICAgIGlmIHRlc3Qgbm8gIT0gIiRuZWVkX2xvY2tzIjsgdGhlbgorCXJlbW92ZWxpc3Q9JGxvY2tmaWxlCisgICAgICAgICRSTSAiJGxvY2tmaWxlIgorICAgICAgZmkKKyAgICB9CisKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworJG9wdF9oZWxwIHx8IHsKKyAgdGVzdCBjb21waWxlID0gIiRvcHRfbW9kZSIgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9Cit9CisKK2Z1bmNfbW9kZV9oZWxwICgpCit7CisgICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCisgICAgY2FzZSAkb3B0X21vZGUgaW4KKyAgICAgICIiKQorICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKKyAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorICAgICAgICBmdW5jX2hlbHAKKyAgICAgICAgOzsKKworICAgICAgY2xlYW4pCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSAnL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyAnLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBvYmplY3Qgb3IgcHJvZ3JhbSwgYWxsIHRoZSBmaWxlcyBhc3NvY2lhdGVkCit3aXRoIGl0IGFyZSBkZWxldGVkLiBPdGhlcndpc2UsIG9ubHkgRklMRSBpdHNlbGYgaXMgZGVsZXRlZCB1c2luZyBSTS4iCisgICAgICAgIDs7CisKKyAgICAgIGNvbXBpbGUpCisgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y29tcGlsZSBDT01QSUxFLUNPTU1BTkQuLi4gU09VUkNFRklMRQorCitDb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgbGlicmFyeSBvYmplY3QuCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1vIE9VVFBVVC1GSUxFICAgIHNldCB0aGUgb3V0cHV0IGZpbGUgbmFtZSB0byBPVVRQVVQtRklMRQorICAtbm8tc3VwcHJlc3MgICAgICBkbyBub3Qgc3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGZvciBtdWx0aXBsZSBwYXNzZXMKKyAgLXByZWZlci1waWMgICAgICAgdHJ5IHRvIGJ1aWxkIFBJQyBvYmplY3RzIG9ubHkKKyAgLXByZWZlci1ub24tcGljICAgdHJ5IHRvIGJ1aWxkIG5vbi1QSUMgb2JqZWN0cyBvbmx5CisgIC1zaGFyZWQgICAgICAgICAgIGRvIG5vdCBidWlsZCBhICcubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhICcubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLVdjLEZMQUcgICAgICAgICAgcGFzcyBGTEFHIGRpcmVjdGx5IHRvIHRoZSBjb21waWxlcgorCitDT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSAnc3RhbmRhcmQnIG9iamVjdCBmaWxlCitmcm9tIHRoZSBnaXZlbiBTT1VSQ0VGSUxFLgorCitUaGUgb3V0cHV0IGZpbGUgbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHJlbW92aW5nIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IGZyb20KK1NPVVJDRUZJTEUsIHRoZW4gc3Vic3RpdHV0aW5nIHRoZSBDIHNvdXJjZSBjb2RlIHN1ZmZpeCAnLmMnIHdpdGggdGhlCitsaWJyYXJ5IG9iamVjdCBzdWZmaXgsICcubG8nLiIKKyAgICAgICAgOzsKKworICAgICAgZXhlY3V0ZSkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWV4ZWN1dGUgQ09NTUFORCBbQVJHU10uLi4KKworQXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0uCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1kbG9wZW4gRklMRSAgICAgIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgRklMRSB0byB0aGUgbGlicmFyeSBwYXRoCisKK1RoaXMgbW9kZSBzZXRzIHRoZSBsaWJyYXJ5IHBhdGggZW52aXJvbm1lbnQgdmFyaWFibGUgYWNjb3JkaW5nIHRvICctZGxvcGVuJworZmxhZ3MuCisKK0lmIGFueSBvZiB0aGUgQVJHUyBhcmUgbGlidG9vbCBleGVjdXRhYmxlIHdyYXBwZXJzLCB0aGVuIHRoZXkgYXJlIHRyYW5zbGF0ZWQKK2ludG8gdGhlaXIgY29ycmVzcG9uZGluZyB1bmluc3RhbGxlZCBiaW5hcnksIGFuZCBhbnkgb2YgdGhlaXIgcmVxdWlyZWQgbGlicmFyeQorZGlyZWN0b3JpZXMgYXJlIGFkZGVkIHRvIHRoZSBsaWJyYXJ5IHBhdGguCisKK1RoZW4sIENPTU1BTkQgaXMgZXhlY3V0ZWQsIHdpdGggQVJHUyBhcyBhcmd1bWVudHMuIgorICAgICAgICA7OworCisgICAgICBmaW5pc2gpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1maW5pc2ggW0xJQkRJUl0uLi4KKworQ29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcy4KKworRWFjaCBMSUJESVIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBsaWJ0b29sIGxpYnJhcmllcy4KKworVGhlIGNvbW1hbmRzIHRoYXQgdGhpcyBtb2RlIGV4ZWN1dGVzIG1heSByZXF1aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLiAgVXNlCit0aGUgJy0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgorICAgICAgICA7OworCisgICAgICBpbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9aW5zdGFsbCBJTlNUQUxMLUNPTU1BTkQuLi4KKworSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCisKK0lOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQorZWl0aGVyIHRoZSAnaW5zdGFsbCcgb3IgJ2NwJyBwcm9ncmFtLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgSU5TVEFMTC1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtaW5zdC1wcmVmaXgtZGlyIFBSRUZJWC1ESVIgIFVzZSBQUkVGSVgtRElSIGFzIGEgc3RhZ2luZyBhcmVhIGZvciBpbnN0YWxsYXRpb24KKworVGhlIHJlc3Qgb2YgdGhlIGNvbXBvbmVudHMgYXJlIGludGVycHJldGVkIGFzIGFyZ3VtZW50cyB0byB0aGF0IGNvbW1hbmQgKG9ubHkKK0JTRC1jb21wYXRpYmxlIGluc3RhbGwgb3B0aW9ucyBhcmUgcmVjb2duaXplZCkuIgorICAgICAgICA7OworCisgICAgICBsaW5rKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9bGluayBMSU5LLUNPTU1BTkQuLi4KKworTGluayBvYmplY3QgZmlsZXMgb3IgbGlicmFyaWVzIHRvZ2V0aGVyIHRvIGZvcm0gYW5vdGhlciBsaWJyYXJ5LCBvciB0bworY3JlYXRlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbS4KKworTElOSy1DT01NQU5EIGlzIGEgY29tbWFuZCB1c2luZyB0aGUgQyBjb21waWxlciB0aGF0IHlvdSB3b3VsZCB1c2UgdG8gY3JlYXRlCithIHByb2dyYW0gZnJvbSBzZXZlcmFsIG9iamVjdCBmaWxlcy4KKworVGhlIGZvbGxvd2luZyBjb21wb25lbnRzIG9mIExJTkstQ09NTUFORCBhcmUgdHJlYXRlZCBzcGVjaWFsbHk6CisKKyAgLWFsbC1zdGF0aWMgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgYXQgYWxsCisgIC1hdm9pZC12ZXJzaW9uICAgIGRvIG5vdCBhZGQgYSB2ZXJzaW9uIHN1ZmZpeCBpZiBwb3NzaWJsZQorICAtYmluZGlyIEJJTkRJUiAgICBzcGVjaWZ5IHBhdGggdG8gYmluYXJpZXMgZGlyZWN0b3J5IChmb3Igc3lzdGVtcyB3aGVyZQorICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgbXVzdCBiZSBmb3VuZCBpbiB0aGUgUEFUSCBzZXR0aW5nIGF0IHJ1bnRpbWUpCisgIC1kbG9wZW4gRklMRSAgICAgICctZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCisgIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisgIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCisgIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQorICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIG1hdGNoaW5nIFJFR0VYCisgIC1MTElCRElSICAgICAgICAgIHNlYXJjaCBMSUJESVIgZm9yIHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMKKyAgLWxOQU1FICAgICAgICAgICAgT1VUUFVULUZJTEUgcmVxdWlyZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5IGxpYk5BTUUKKyAgLW1vZHVsZSAgICAgICAgICAgYnVpbGQgYSBsaWJyYXJ5IHRoYXQgY2FuIGRsb3BlbmVkCisgIC1uby1mYXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3QtaW5zdGFsbCBtb2RlCisgIC1uby1pbnN0YWxsICAgICAgIGxpbmsgYSBub3QtaW5zdGFsbGFibGUgZXhlY3V0YWJsZQorICAtbm8tdW5kZWZpbmVkICAgICBkZWNsYXJlIHRoYXQgYSBsaWJyYXJ5IGRvZXMgbm90IHJlZmVyIHRvIGV4dGVybmFsIHN5bWJvbHMKKyAgLW8gT1VUUFVULUZJTEUgICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RzCisgIC1vYmplY3RsaXN0IEZJTEUgIHVzZSBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvdW5kIGluIEZJTEUgdG8gc3BlY2lmeSBvYmplY3RzCisgIC1vczJkbGxuYW1lIE5BTUUgIGZvcmNlIGEgc2hvcnQgRExMIG5hbWUgb24gT1MvMiAobm8gZWZmZWN0IG9uIG90aGVyIE9TZXMpCisgIC1wcmVjaW91cy1maWxlcy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICBkb24ndCByZW1vdmUgb3V0cHV0IGZpbGVzIG1hdGNoaW5nIFJFR0VYCisgIC1yZWxlYXNlIFJFTEVBU0UgIHNwZWNpZnkgcGFja2FnZSByZWxlYXNlIGluZm9ybWF0aW9uCisgIC1ycGF0aCBMSUJESVIgICAgIHRoZSBjcmVhdGVkIGxpYnJhcnkgd2lsbCBldmVudHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIKKyAgLVJbIF1MSUJESVIgICAgICAgYWRkIExJQkRJUiB0byB0aGUgcnVudGltZSBwYXRoIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMKKyAgLXNoYXJlZCAgICAgICAgICAgb25seSBkbyBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXNocmV4dCBTVUZGSVggICAgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIHNoYXJlZCBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uCisgIC1zdGF0aWMgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zdGF0aWMtbGlidG9vbC1saWJzCisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC12ZXJzaW9uLWluZm8gQ1VSUkVOVFs6UkVWSVNJT05bOkFHRV1dCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KKyAgLXdlYWsgTElCTkFNRSAgICAgZGVjbGFyZSB0aGF0IHRoZSB0YXJnZXQgcHJvdmlkZXMgdGhlIExJQk5BTUUgaW50ZXJmYWNlCisgIC1XYyxGTEFHCisgIC1YY29tcGlsZXIgRkxBRyAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCisgIC1XbCxGTEFHCisgIC1YbGlua2VyIEZMQUcgICAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGxpbmtlcgorICAtWENDbGlua2VyIEZMQUcgICBwYXNzIGxpbmstc3BlY2lmaWMgRkxBRyB0byB0aGUgY29tcGlsZXIgZHJpdmVyIChDQykKKworQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCAnLScpIGFyZSBpZ25vcmVkLgorCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gJy5sYScgYXJlCit0cmVhdGVkIGFzIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzLCBvdGhlciBmaWxlcyBhcmUgc3RhbmRhcmQgb3IgbGlicmFyeQorb2JqZWN0IGZpbGVzLgorCitJZiB0aGUgT1VUUFVULUZJTEUgZW5kcyBpbiAnLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAorb25seSBsaWJyYXJ5IG9iamVjdHMgKCcubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgJy1ycGF0aCcgaXMKK3JlcXVpcmVkLCBleGNlcHQgd2hlbiBjcmVhdGluZyBhIGNvbnZlbmllbmNlIGxpYnJhcnkuCisKK0lmIE9VVFBVVC1GSUxFIGVuZHMgaW4gJy5hJyBvciAnLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nICdhcicgYW5kICdyYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nICdsaWInLgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluICcubG8nIG9yICcuJG9iamV4dCcsIHRoZW4gYSByZWxvYWRhYmxlIG9iamVjdCBmaWxlCitpcyBjcmVhdGVkLCBvdGhlcndpc2UgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIGlzIGNyZWF0ZWQuIgorICAgICAgICA7OworCisgICAgICB1bmluc3RhbGwpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT11bmluc3RhbGwgUk0gW1JNLU9QVElPTl0uLi4gRklMRS4uLgorCitSZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5ICcvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzICctZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgorT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgJyRvcHRfbW9kZSciCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgZWNobworICAgICRFQ0hPICJUcnkgJyRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKK30KKworIyBOb3cgdGhhdCB3ZSd2ZSBjb2xsZWN0ZWQgYSBwb3NzaWJsZSAtLW1vZGUgYXJnLCBzaG93IGhlbHAgaWYgbmVjZXNzYXJ5CitpZiAkb3B0X2hlbHA7IHRoZW4KKyAgaWYgdGVzdCA6ID0gIiRvcHRfaGVscCI7IHRoZW4KKyAgICBmdW5jX21vZGVfaGVscAorICBlbHNlCisgICAgeworICAgICAgZnVuY19oZWxwIG5vZXhpdAorICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKwlmdW5jX21vZGVfaGVscAorICAgICAgZG9uZQorICAgIH0gfCAkU0VEIC1uICcxcDsgMiwkcy9eVXNhZ2U6LyAgb3I6IC9wJworICAgIHsKKyAgICAgIGZ1bmNfaGVscCBub2V4aXQKKyAgICAgIGZvciBvcHRfbW9kZSBpbiBjb21waWxlIGxpbmsgZXhlY3V0ZSBpbnN0YWxsIGZpbmlzaCB1bmluc3RhbGwgY2xlYW47IGRvCisJZWNobworCWZ1bmNfbW9kZV9oZWxwCisgICAgICBkb25lCisgICAgfSB8CisgICAgJFNFRCAnMWQKKyAgICAgIC9eV2hlbiByZXBvcnRpbmcvLC9eUmVwb3J0L3sKKwlICisJZAorICAgICAgfQorICAgICAgJHgKKyAgICAgIC9pbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy9kCisgICAgICAvbW9yZSBkZXRhaWxlZCAuKk1PREUvZAorICAgICAgcy9eVXNhZ2U6LiotLW1vZGU9XChbXiBdKlwpIC4qL0Rlc2NyaXB0aW9uIG9mIFwxIG1vZGU6LycKKyAgZmkKKyAgZXhpdCAkPworZmkKKworCisjIGZ1bmNfbW9kZV9leGVjdXRlIGFyZy4uLgorZnVuY19tb2RlX2V4ZWN1dGUgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAjIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgY29tbWFuZCBuYW1lLgorICAgIGNtZD0kbm9ub3B0CisgICAgdGVzdCAteiAiJGNtZCIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgQ09NTUFORCIKKworICAgICMgSGFuZGxlIC1kbG9wZW4gZmxhZ3MgaW1tZWRpYXRlbHkuCisgICAgZm9yIGZpbGUgaW4gJG9wdF9kbG9wZW47IGRvCisgICAgICB0ZXN0IC1mICIkZmlsZSIgXAorCXx8IGZ1bmNfZmF0YWxfaGVscCAiJyRmaWxlJyBpcyBub3QgYSBmaWxlIgorCisgICAgICBkaXI9CisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLmxhKQorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiJyRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgorCWRsbmFtZT0KKwlsaWJyYXJ5X25hbWVzPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgU2tpcCB0aGlzIGxpYnJhcnkgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkLgorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICAjIFdhcm4gaWYgaXQgd2FzIGEgc2hhcmVkIGxpYnJhcnkuCisJICB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYgXAorCSAgICBmdW5jX3dhcm5pbmcgIickZmlsZScgd2FzIG5vdCBsaW5rZWQgd2l0aCAnLWV4cG9ydC1keW5hbWljJyIKKwkgIGNvbnRpbnVlCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCisJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCisJICBmdW5jX2FwcGVuZCBkaXIgIi8kb2JqZGlyIgorCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCAnJGRsbmFtZScgaW4gJyRkaXInIG9yICckZGlyLyRvYmpkaXInIgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgorCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCTs7CisKKyAgICAgICopCisJZnVuY193YXJuaW5nICInLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGhuYW1lLgorICAgICAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorICAgICAgdGVzdCAtbiAiJGFic2RpciIgJiYgZGlyPSRhYnNkaXIKKworICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgorICAgICAgZWxzZQorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKKyAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSRtYWdpYworCisgICAgIyBDaGVjayBpZiBhbnkgb2YgdGhlIGFyZ3VtZW50cyBpcyBhIHdyYXBwZXIgc2NyaXB0LgorICAgIGFyZ3M9CisgICAgZm9yIGZpbGUKKyAgICBkbworICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgLSogfCAqLmxhIHwgKi5sbyApIDs7CisgICAgICAqKQorCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KKwlpZiBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX3NvdXJjZSAiJGZpbGUiCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0kcHJvZ2Rpci8kcHJvZ3JhbQorCWVsaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgorCSAgZnVuY19zb3VyY2UgIiRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSRwcm9nZGlyLyRwcm9ncmFtCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBhcmdzICIkZmlsZSIKKyAgICBkb25lCisKKyAgICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKyAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwlldmFsICJcJEVDSE8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgorCWVjaG8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisgICAgICAkRUNITyAiJGNtZCRhcmdzIgorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJIyBFeHBvcnQgdGhlIHNobGlicGF0aF92YXIuCisJZXZhbCAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKworICAgICAgIyBSZXN0b3JlIHNhdmVkIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCisgICAgICBkbworCWV2YWwgImlmIHRlc3QgXCJcJHtzYXZlXyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCisgICAgICAgICAgICAgICAgJGx0X3Zhcj1cJHNhdmVfJGx0X3ZhcjsgZXhwb3J0ICRsdF92YXIKKwkgICAgICBlbHNlCisJCSRsdF91bnNldCAkbHRfdmFyCisJICAgICAgZmkiCisgICAgICBkb25lCisKKyAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KKyAgICAgIGV4ZWNfY21kPVwkY21kJGFyZ3MKKyAgICBmaQorfQorCit0ZXN0IGV4ZWN1dGUgPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KKworCisjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCitmdW5jX21vZGVfZmluaXNoICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgbGlicz0KKyAgICBsaWJkaXJzPQorICAgIGFkbWluY21kcz0KKworICAgIGZvciBvcHQgaW4gIiRub25vcHQiICR7MSsiJEAifQorICAgIGRvCisgICAgICBpZiB0ZXN0IC1kICIkb3B0IjsgdGhlbgorCWZ1bmNfYXBwZW5kIGxpYmRpcnMgIiAkb3B0IgorCisgICAgICBlbGlmIHRlc3QgLWYgIiRvcHQiOyB0aGVuCisJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJG9wdCI7IHRoZW4KKwkgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkb3B0IgorCWVsc2UKKwkgIGZ1bmNfd2FybmluZyAiJyRvcHQnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwlmaQorCisgICAgICBlbHNlCisJZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCAnJG9wdCciCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGlmIHRlc3QgLW4gIiRsaWJzIjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJGx0X3N5c3Jvb3QiOyB0aGVuCisgICAgICAgIHN5c3Jvb3RfcmVnZXg9YCRFQ0hPICIkbHRfc3lzcm9vdCIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisgICAgICAgIHN5c3Jvb3RfY21kPSJzL1woWyAnXVwpJHN5c3Jvb3RfcmVnZXgvXDEvZzsiCisgICAgICBlbHNlCisgICAgICAgIHN5c3Jvb3RfY21kPQorICAgICAgZmkKKworICAgICAgIyBSZW1vdmUgc3lzcm9vdCByZWZlcmVuY2VzCisgICAgICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKyAgICAgICAgICBlY2hvICJyZW1vdmluZyByZWZlcmVuY2VzIHRvICRsdF9zeXNyb290IGFuZCAnPScgcHJlZml4ZXMgZnJvbSAkbGliIgorICAgICAgICBkb25lCisgICAgICBlbHNlCisgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCisgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCisJICAkU0VEIC1lICIkc3lzcm9vdF9jbWQgcy9cKFsgJ10tW0xSXVwpPS9cMS9nOyBzL1woWyAnXVwpPS9cMS9nIiAkbGliIFwKKwkgICAgPiAkdG1wZGlyL3RtcC1sYQorCSAgbXYgLWYgJHRtcGRpci90bXAtbGEgJGxpYgorCWRvbmUKKyAgICAgICAgJHtSTX1yICIkdG1wZGlyIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZmluaXNoX2NtZHMiICdhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyciJGNtZCInIicKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KKwkgICMgRG8gdGhlIHNpbmdsZSBmaW5pc2hfZXZhbC4KKwkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGZ1bmNfYXBwZW5kIGFkbWluY21kcyAiCisgICAgICAgJGNtZHMiCisJZmkKKyAgICAgIGRvbmUKKyAgICBmaQorCisgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgJG9wdF9xdWlldCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKworICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorICAgICAgZWNobyAiTGlicmFyaWVzIGhhdmUgYmVlbiBpbnN0YWxsZWQgaW46IgorICAgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKwkkRUNITyAiICAgJGxpYmRpciIKKyAgICAgIGRvbmUKKyAgICAgIGVjaG8KKyAgICAgIGVjaG8gIklmIHlvdSBldmVyIGhhcHBlbiB0byB3YW50IHRvIGxpbmsgYWdhaW5zdCBpbnN0YWxsZWQgbGlicmFyaWVzIgorICAgICAgZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCisgICAgICBlY2hvICJzcGVjaWZ5IHRoZSBmdWxsIHBhdGhuYW1lIG9mIHRoZSBsaWJyYXJ5LCBvciB1c2UgdGhlICctTExJQkRJUiciCisgICAgICBlY2hvICJmbGFnIGR1cmluZyBsaW5raW5nIGFuZCBkbyBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZzoiCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlICckc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisJZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlICckcnVucGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorCWVjaG8gIiAgICAgZHVyaW5nIGxpbmtpbmciCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJbGliZGlyPUxJQkRJUgorCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKworCSRFQ0hPICIgICAtIHVzZSB0aGUgJyRmbGFnJyBsaW5rZXIgZmxhZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorCSRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorCWVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gJy9ldGMvbGQuc28uY29uZiciCisgICAgICBmaQorICAgICAgZWNobworCisgICAgICBlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwlzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKwkgIGVjaG8gInBhZ2VzLiIKKwkgIDs7CisJKikKKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZmkKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKwordGVzdCBmaW5pc2ggPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfaW5zdGFsbCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KKyAgICBpZiB0ZXN0ICIkU0hFTEwiID0gIiRub25vcHQiIHx8IHRlc3QgL2Jpbi9zaCA9ICIkbm9ub3B0IiB8fAorICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgorICAgICAgIGNhc2UgJG5vbm9wdCBpbiAqc2h0b29sKikgOjs7ICopIGZhbHNlOzsgZXNhYworICAgIHRoZW4KKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRub25vcHQiCisgICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiCisgICAgICBhcmc9JDEKKyAgICAgIHNoaWZ0CisgICAgZWxzZQorICAgICAgaW5zdGFsbF9wcm9nPQorICAgICAgYXJnPSRub25vcHQKKyAgICBmaQorCisgICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgorICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9JGluc3RhbGxfcHJvZworICAgIGNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKyAgICAgICpbXFxcIC9dY3BcICopIGluc3RhbGxfY3A9OiA7OworICAgICAgKikgaW5zdGFsbF9jcD1mYWxzZSA7OworICAgIGVzYWMKKworICAgICMgV2UgbmVlZCB0byBhY2NlcHQgYXQgbGVhc3QgYWxsIHRoZSBCU0QgaW5zdGFsbCBmbGFncy4KKyAgICBkZXN0PQorICAgIGZpbGVzPQorICAgIG9wdHM9CisgICAgcHJldj0KKyAgICBpbnN0YWxsX3R5cGU9CisgICAgaXNkaXI9ZmFsc2UKKyAgICBzdHJpcG1lPQorICAgIG5vX21vZGU9OgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgYXJnMj0KKyAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgorCWZ1bmNfYXBwZW5kIGZpbGVzICIgJGRlc3QiCisJZGVzdD0kYXJnCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWQpIGlzZGlyPTogOzsKKyAgICAgIC1mKQorCWlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKwkgIHByZXY9JGFyZworCWZpCisJOzsKKyAgICAgIC1nIHwgLW0gfCAtbykKKwlwcmV2PSRhcmcKKwk7OworICAgICAgLXMpCisJc3RyaXBtZT0iIC1zIgorCWNvbnRpbnVlCisJOzsKKyAgICAgIC0qKQorCTs7CisgICAgICAqKQorCSMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkZWQgYW4gYXJndW1lbnQsIHRoZW4gc2tpcCBpdC4KKwlpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwkgIGlmIHRlc3QgWC1tID0gIlgkcHJldiIgJiYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSI7IHRoZW4KKwkgICAgYXJnMj0kaW5zdGFsbF9vdmVycmlkZV9tb2RlCisJICAgIG5vX21vZGU9ZmFsc2UKKwkgIGZpCisJICBwcmV2PQorCWVsc2UKKwkgIGRlc3Q9JGFyZworCSAgY29udGludWUKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgYXJndW1lbnQuCisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgICAgaWYgdGVzdCAtbiAiJGFyZzIiOyB0aGVuCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZzIiCisgICAgICBmaQorICAgICAgZnVuY19hcHBlbmQgaW5zdGFsbF9zaGFyZWRfcHJvZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICBkb25lCisKKyAgICB0ZXN0IC16ICIkaW5zdGFsbF9wcm9nIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gaW5zdGFsbCBwcm9ncmFtIgorCisgICAgdGVzdCAtbiAiJHByZXYiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlICckcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgJiYgJG5vX21vZGU7IHRoZW4KKyAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIgorCWZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KKwlmdW5jX2ZhdGFsX2hlbHAgIm5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3BlY2lmaWVkIgorICAgICAgZWxzZQorCWZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdCIKKyAgICBkZXN0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgorICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj06CisgICAgaWYgJGlzZGlyOyB0aGVuCisgICAgICBkZXN0ZGlyPSRkZXN0CisgICAgICBkZXN0bmFtZT0KKyAgICBlbHNlCisgICAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkZGVzdCIgIiIgIi4iCisgICAgICBkZXN0ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgICBkZXN0bmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgorICAgICAgc2V0IGR1bW15ICRmaWxlczsgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY19mYXRhbF9oZWxwICInJGRlc3QnIGlzIG5vdCBhIGRpcmVjdG9yeSIKKyAgICBmaQorICAgIGNhc2UgJGRlc3RkaXIgaW4KKyAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisgICAgKikKKyAgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKwljYXNlICRmaWxlIGluCisJKi5sbykgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICInJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSRtYWdpYworCisgICAgc3RhdGljbGlicz0KKyAgICBmdXR1cmVfbGliZGlycz0KKyAgICBjdXJyZW50X2xpYmRpcnM9CisgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbworCisgICAgICAjIERvIGVhY2ggaW5zdGFsbGF0aW9uLgorICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgKi4kbGliZXh0KQorCSMgRG8gdGhlIHN0YXRpYyBsaWJyYXJpZXMgbGF0ZXIuCisJZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRmaWxlIgorCTs7CisKKyAgICAgICoubGEpCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICInJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJcmVsaW5rX2NvbW1hbmQ9CisJZnVuY19zb3VyY2UgIiRmaWxlIgorCisJIyBBZGQgdGhlIGxpYmRpciB0byBjdXJyZW50X2xpYmRpcnMgaWYgaXQgaXMgdGhlIGRlc3RpbmF0aW9uLgorCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCisJICBjYXNlICIkY3VycmVudF9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBjdXJyZW50X2xpYmRpcnMgIiAkbGliZGlyIiA7OworCSAgZXNhYworCWVsc2UKKwkgICMgTm90ZSB0aGUgbGliZGlyIGFzIGEgZnV0dXJlIGxpYmRpci4KKwkgIGNhc2UgIiRmdXR1cmVfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgZnV0dXJlX2xpYmRpcnMgIiAkbGliZGlyIiA7OworCSAgZXNhYworCWZpCisKKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiLyIgIiIKKwlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCisKKwlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorCSAgaW5zdF9wcmVmaXhfZGlyPWAkRUNITyAiJGRlc3RkaXIiIHwgJFNFRCAtZSAicyUkbGliZGlyXCQlJSJgCisKKwkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKwkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCB0byB0aGUgc2FtZSBwcmVmaXguCisJICAjIEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24ndCBhZmZlY3Qgd2luZG93cyAuZGxsJ3MgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQorCSAgIyBidXQgaXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uCisJICB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogY2Fubm90IGluc3RhbGwgJyRmaWxlJyB0byBhIGRpcmVjdG9yeSBub3QgZW5kaW5nIGluICRsaWJkaXIiCisKKwkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJICAgICMgU3RpY2sgdGhlIGluc3RfcHJlZml4X2RpciBkYXRhIGludG8gdGhlIGxpbmsgY29tbWFuZC4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUtaW5zdC1wcmVmaXgtZGlyICRpbnN0X3ByZWZpeF9kaXIlImAKKwkgIGVsc2UKKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUlImAKKwkgIGZpCisKKwkgIGZ1bmNfd2FybmluZyAicmVsaW5raW5nICckZmlsZSciCisJICBmdW5jX3Nob3dfZXZhbCAiJHJlbGlua19jb21tYW5kIiBcCisJICAgICdmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogcmVsaW5rICdcJyckZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCisJZmkKKworCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzOyBzaGlmdAorCWlmIHRlc3QgLW4gIiQxIjsgdGhlbgorCSAgcmVhbG5hbWU9JDEKKwkgIHNoaWZ0CisKKwkgIHNyY25hbWU9JHJlYWxuYW1lCisJICB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9JHtyZWFsbmFtZX1UCisKKwkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgXAorCSAgICAgICdleGl0ICQ/JworCSAgdHN0cmlwbWU9JHN0cmlwbWUKKwkgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKwkgICAgY2FzZSAkcmVhbG5hbWUgaW4KKwkgICAgKi5kbGwuYSkKKwkgICAgICB0c3RyaXBtZT0KKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICBvczIqKQorCSAgICBjYXNlICRyZWFsbmFtZSBpbgorCSAgICAqX2RsbC5hKQorCSAgICAgIHRzdHJpcG1lPQorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgLW4gIiR0c3RyaXBtZSIgJiYgdGVzdCAtbiAiJHN0cmlwbGliIjsgdGhlbgorCSAgICBmdW5jX3Nob3dfZXZhbCAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIgJ2V4aXQgJD8nCisJICBmaQorCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgIyBEZWxldGUgdGhlIG9sZCBzeW1saW5rcywgYW5kIGNyZWF0ZSBuZXcgb25lcy4KKwkgICAgIyBUcnkgJ2xuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlICdsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgorCSAgICAjIHRoZSBzeW1saW5rIHdlIHJlcGxhY2UhICBTb2xhcmlzIC9iaW4vbG4gZG9lcyBub3QgdW5kZXJzdGFuZCAtZiwKKwkgICAgIyBzbyB3ZSBhbHNvIG5lZWQgdG8gdHJ5IHJtICYmIGxuIC1zLgorCSAgICBmb3IgbGlua25hbWUKKwkgICAgZG8KKwkgICAgICB0ZXN0ICIkbGlua25hbWUiICE9ICIkcmVhbG5hbWUiIFwKKwkJJiYgZnVuY19zaG93X2V2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkUk0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgorCSAgICBkb25lCisJICBmaQorCisJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisJICBsaWI9JGRlc3RkaXIvJHJlYWxuYW1lCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworCWZpCisKKwkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KKwlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCWluc3RuYW1lPSRkaXIvJHtuYW1lfWkKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiICdleGl0ICQ/JworCisJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgorCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgZnVuY19hcHBlbmQgc3RhdGljbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCTs7CisKKyAgICAgICoubG8pCisJIyBJbnN0YWxsIChpLmUuIGNvcHkpIGEgbGlidG9vbCBvYmplY3QuCisKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RuYW1lCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgIGRlc3RmaWxlPSRkZXN0ZGlyLyRkZXN0ZmlsZQorCWZpCisKKwkjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCWNhc2UgJGRlc3RmaWxlIGluCisJKi5sbykKKwkgIGZ1bmNfbG8ybyAiJGRlc3RmaWxlIgorCSAgc3RhdGljZGVzdD0kZnVuY19sbzJvX3Jlc3VsdAorCSAgOzsKKwkqLiRvYmpleHQpCisJICBzdGF0aWNkZXN0PSRkZXN0ZmlsZQorCSAgZGVzdGZpbGU9CisJICA7OworCSopCisJICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gJyRkZXN0ZmlsZSciCisJICA7OworCWVzYWMKKworCSMgSW5zdGFsbCB0aGUgbGlidG9vbCBvYmplY3QgaWYgcmVxdWVzdGVkLgorCXRlc3QgLW4gIiRkZXN0ZmlsZSIgJiYgXAorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIiAnZXhpdCAkPycKKworCSMgSW5zdGFsbCB0aGUgb2xkIG9iamVjdCBpZiBlbmFibGVkLgorCWlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkgICMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJICBmdW5jX2xvMm8gIiRmaWxlIgorCSAgc3RhdGljb2JqPSRmdW5jX2xvMm9fcmVzdWx0CisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJHN0YXRpY29iaiBcJHN0YXRpY2Rlc3QiICdleGl0ICQ/JworCWZpCisJZXhpdCAkRVhJVF9TVUNDRVNTCisJOzsKKworICAgICAgKikKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RuYW1lCisJZWxzZQorCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisJICBkZXN0ZmlsZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgIGRlc3RmaWxlPSRkZXN0ZGlyLyRkZXN0ZmlsZQorCWZpCisKKwkjIElmIHRoZSBmaWxlIGlzIG1pc3NpbmcsIGFuZCB0aGVyZSBpcyBhIC5leGUgb24gdGhlIGVuZCwgc3RyaXAgaXQKKwkjIGJlY2F1c2UgaXQgaXMgbW9zdCBsaWtlbHkgYSBsaWJ0b29sIHNjcmlwdCB3ZSBhY3R1YWxseSB3YW50IHRvCisJIyBpbnN0YWxsCisJc3RyaXBwZWRfZXh0PQorCWNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGZpbGUiCisJICAgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgc3RyaXBwZWRfZXh0PS5leGUKKwkgICAgZmkKKwkgICAgOzsKKwllc2FjCisKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KikKKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICBlbHNlCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZmkKKwkgICAgOzsKKwkqKQorCSAgICB3cmFwcGVyPSRmaWxlCisJICAgIDs7CisJZXNhYworCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkd3JhcHBlciI7IHRoZW4KKwkgIG5vdGluc3RfZGVwbGlicz0KKwkgIHJlbGlua19jb21tYW5kPQorCisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgorCSAgdGVzdCAteiAiJGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb24iICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0ICckd3JhcHBlciciCisKKwkgIGZpbmFsaXplPToKKwkgIGZvciBsaWIgaW4gJG5vdGluc3RfZGVwbGliczsgZG8KKwkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgorCSAgICBsaWJkaXI9CisJICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJICAgICAgZnVuY19zb3VyY2UgIiRsaWIiCisJICAgIGZpCisJICAgIGxpYmZpbGU9JGxpYmRpci9gJEVDSE8gIiRsaWIiIHwgJFNFRCAncyVeLiovJSVnJ2AKKwkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX3dhcm5pbmcgIickbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluICckbGliZGlyJyIKKwkgICAgICBmaW5hbGl6ZT1mYWxzZQorCSAgICBmaQorCSAgZG9uZQorCisJICByZWxpbmtfY29tbWFuZD0KKwkgIGZ1bmNfc291cmNlICIkd3JhcHBlciIKKworCSAgb3V0cHV0bmFtZT0KKwkgIGlmIHRlc3Qgbm8gPSAiJGZhc3RfaW5zdGFsbCIgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGlmICRmaW5hbGl6ZTsgdGhlbgorCSAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKwkJZnVuY19iYXNlbmFtZSAiJGZpbGUkc3RyaXBwZWRfZXh0IgorCQlmaWxlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICAgICAgb3V0cHV0bmFtZT0kdG1wZGlyLyRmaWxlCisJICAgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJICAgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJ2AKKworCSAgICAgICAgJG9wdF9xdWlldCB8fCB7CisJICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJHJlbGlua19jb21tYW5kIgorCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgICAgICAgIH0KKwkgICAgICAgIGlmIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgorCSAgICAgICAgICBlbHNlCisJCSAgZnVuY19lcnJvciAiZXJyb3I6IHJlbGluayAnJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCisJCSAgJG9wdF9kcnlfcnVuIHx8ICR7Uk19ciAiJHRtcGRpciIKKwkJICBjb250aW51ZQorCSAgICAgICAgZmkKKwkgICAgICAgIGZpbGU9JG91dHB1dG5hbWUKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX3dhcm5pbmcgImNhbm5vdCByZWxpbmsgJyRmaWxlJyIKKwkgICAgICBmaQorCSAgICB9CisJICBlbHNlCisJICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KKwkgICAgZmlsZT1gJEVDSE8gIiRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkU0VEICJzJVwoW14vXSpcKSQlJG9iamRpci9cMSUiYAorCSAgZmkKKwlmaQorCisJIyByZW1vdmUgLmV4ZSBzaW5jZSBjeWd3aW4gL3Vzci9iaW4vaW5zdGFsbCB3aWxsIGFwcGVuZCBhbm90aGVyCisJIyBvbmUgYW55d2F5CisJY2FzZSAkaW5zdGFsbF9wcm9nLCRob3N0IGluCisJKi91c3IvYmluL2luc3RhbGwqLCpjeWd3aW4qKQorCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KKwkgICouZXhlOiouZXhlKQorCSAgICAjIHRoaXMgaXMgb2sKKwkgICAgOzsKKwkgICouZXhlOiopCisJICAgIGRlc3RmaWxlPSRkZXN0ZmlsZS5leGUKKwkgICAgOzsKKwkgICo6Ki5leGUpCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGRlc3RmaWxlIgorCSAgICBkZXN0ZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisJJG9wdF9kcnlfcnVuIHx8IGlmIHRlc3QgLW4gIiRvdXRwdXRuYW1lIjsgdGhlbgorCSAgJHtSTX1yICIkdG1wZGlyIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmb3IgZmlsZSBpbiAkc3RhdGljbGliczsgZG8KKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworICAgICAgIyBTZXQgdXAgdGhlIHJhbmxpYiBwYXJhbWV0ZXJzLgorICAgICAgb2xkbGliPSRkZXN0ZGlyLyRuYW1lCisgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9sZGxpYiIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgIHRvb2xfb2xkbGliPSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKworICAgICAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgXCRmaWxlIFwkb2xkbGliIiAnZXhpdCAkPycKKworICAgICAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRvbGRfc3RyaXBsaWIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgIiRvbGRfc3RyaXBsaWIgJHRvb2xfb2xkbGliIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAorICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4gJyRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCisKKyAgICBpZiB0ZXN0IC1uICIkY3VycmVudF9saWJkaXJzIjsgdGhlbgorICAgICAgIyBNYXliZSBqdXN0IGRvIGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biAmJiBjdXJyZW50X2xpYmRpcnM9IiAtbiRjdXJyZW50X2xpYmRpcnMiCisgICAgICBleGVjX2NtZD0nJFNIRUxMICIkcHJvZ3BhdGgiICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKKyAgICBlbHNlCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBmaQorfQorCit0ZXN0IGluc3RhbGwgPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfaW5zdGFsbCAkezErIiRAIn0KKworCisjIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zIG91dHB1dG5hbWUgb3JpZ2luYXRvciBwaWNfcAorIyBFeHRyYWN0IHN5bWJvbHMgZnJvbSBkbHByZWZpbGVzIGFuZCBjcmVhdGUgJHtvdXRwdXRuYW1lfVMubyB3aXRoCisjIGEgZGxwcmVvcGVuIHN5bWJvbCB0YWJsZS4KK2Z1bmNfZ2VuZXJhdGVfZGxzeW1zICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgbXlfb3V0cHV0bmFtZT0kMQorICAgIG15X29yaWdpbmF0b3I9JDIKKyAgICBteV9waWNfcD0kezMtZmFsc2V9CisgICAgbXlfcHJlZml4PWAkRUNITyAiJG15X29yaWdpbmF0b3IiIHwgJFNFRCAncyVbXmEtekEtWjAtOV0lXyVnJ2AKKyAgICBteV9kbHN5bXM9CisKKyAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0IG5vICE9ICIkZGxzZWxmIjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCW15X2Rsc3ltcz0ke215X291dHB1dG5hbWV9Uy5jCisgICAgICBlbHNlCisJZnVuY19lcnJvciAibm90IGNvbmZpZ3VyZWQgdG8gZXh0cmFjdCBnbG9iYWwgc3ltYm9scyBmcm9tIGRscHJlb3BlbmVkIGZpbGVzIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJG15X2Rsc3ltcyI7IHRoZW4KKyAgICAgIGNhc2UgJG15X2Rsc3ltcyBpbgorICAgICAgIiIpIDs7CisgICAgICAqLmMpCisJIyBEaXNjb3ZlciB0aGUgbmxpc3Qgb2YgZWFjaCBvZiB0aGUgZGxmaWxlcy4KKwlubGlzdD0kb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5ubQorCisJZnVuY19zaG93X2V2YWwgIiRSTSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKworCSMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCisJZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCisJJG9wdF9kcnlfcnVuIHx8ICRFQ0hPID4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisvKiAkbXlfZGxzeW1zIC0gc3ltYm9sIHJlc29sdXRpb24gdGFibGUgZm9yICckbXlfb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLworLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuIFwiQ1wiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNCkpIHx8IChfX0dOVUNfXyA+IDQpKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiCisjZW5kaWYKKworLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX1dJTjMyX1dDRQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZCBfX29zZl9fCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisjZGVmaW5lIFNUUkVRKHMxLCBzMikgKHN0cmNtcCAoKHMxKSwgKHMyKSkgPT0gMCkKKworLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKKyIKKworCWlmIHRlc3QgeWVzID0gIiRkbHNlbGYiOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yICckb3V0cHV0JyIKKworCSAgJG9wdF9kcnlfcnVuIHx8IGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorCisJICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCisJICBwcm9nZmlsZXM9YCRFQ0hPICIkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSAnJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCciCisJICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkTk0gJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICBkb25lCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAnJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICBldmFsICckTVYgIiRubGlzdCJUICIkbmxpc3QiJworCSAgICB9CisJICBmaQorCisJICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCSAgaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgZXZhbCAiJFNFRCAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKyAgICAgICAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworICAgICAgICAgICAgICAgIGV2YWwgJ2NhdCAiJGV4cG9ydF9zeW1ib2xzIiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICB9CisJICBlbHNlCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgZXZhbCAiJFNFRCAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJworCSAgICAgIGV2YWwgJyRHUkVQIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAgICAgZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgICAgZXZhbCAnY2F0ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgfQorCSAgZmkKKwlmaQorCisJZm9yIGRscHJlZmlsZSBpbiAkZGxwcmVmaWxlczsgZG8KKwkgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gJyRkbHByZWZpbGUnIgorCSAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZSIKKwkgIG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgICAgICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAjIGlmIGFuIGltcG9ydCBsaWJyYXJ5LCB3ZSBuZWVkIHRvIG9idGFpbiBkbG5hbWUKKwkgICAgICBpZiBmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAiJGRscHJlZmlsZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkbHByZWZpbGUiCisJICAgICAgICBldmFsICJjdXJyX2xhZmlsZT1cJGxpYmZpbGVfJGZ1bmNfdHJfc2hfcmVzdWx0IgorCSAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9CisJICAgICAgICBpZiB0ZXN0IC1uICIkY3Vycl9sYWZpbGUiICYmIGZ1bmNfbGFsaWJfcCAiJGN1cnJfbGFmaWxlIjsgdGhlbgorCSAgICAgICAgICAjIFVzZSBzdWJzaGVsbCwgdG8gYXZvaWQgY2xvYmJlcmluZyBjdXJyZW50IHZhcmlhYmxlIHZhbHVlcworCSAgICAgICAgICBkbHByZWZpbGVfZGxuYW1lPWBzb3VyY2UgIiRjdXJyX2xhZmlsZSIgJiYgZWNobyAiJGRsbmFtZSJgCisJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxuYW1lIjsgdGhlbgorCSAgICAgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRkbHByZWZpbGVfZGxuYW1lIgorCSAgICAgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgIyBubyBsYWZpbGUuIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgLWRscHJlb3BlbiA8aW1wb3J0IGxpYnJhcnk+LgorCSAgICAgICAgICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCAiJGRscHJlZmlsZSIKKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0kc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKwkgICAgICAgICAgZmkKKwkgICAgICAgIGZpCisJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiOyB0aGVuCisJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJGRscHJlZmlsZV9kbGJhc2VuYW1lIiA+PiAiJG5saXN0IicKKwkgICAgICAgICAgZWxzZQorCSAgICAgICAgICAgIGZ1bmNfd2FybmluZyAiQ291bGQgbm90IGNvbXB1dGUgRExMIG5hbWUgZnJvbSAkbmFtZSIKKwkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICAgICAgICBmaQorCSAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8CisJICAgICAgICAgICAgJFNFRCAtZSAnL0kgX19pbXAvZCcgLWUgJ3MvSSBfX25tXy9EIC87cy9fbm1fXy8vJyA+PiAnJG5saXN0JyIKKwkgICAgICAgIH0KKwkgICAgICBlbHNlICMgbm90IGFuIGltcG9ydCBsaWIKKwkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkZGxwcmVmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCSAgICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgICAgICAgfQorCSAgICAgIGZpCisJICAgIDs7CisJICAgICopCisJICAgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCisJICAgICAgfQorCSAgICA7OworICAgICAgICAgIGVzYWMKKwlkb25lCisKKwkkb3B0X2RyeV9ydW4gfHwgeworCSAgIyBNYWtlIHN1cmUgd2UgaGF2ZSBhdCBsZWFzdCBhbiBlbXB0eSBmaWxlLgorCSAgdGVzdCAtZiAiJG5saXN0IiB8fCA6ID4gIiRubGlzdCIKKworCSAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgJEVHUkVQIC12ICIgKCRleGNsdWRlX2V4cHN5bXMpJCIgIiRubGlzdCIgPiAiJG5saXN0IlQKKwkgICAgJE1WICIkbmxpc3QiVCAiJG5saXN0IgorCSAgZmkKKworCSAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKwkgIGlmICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgfAorCSAgICAgIGlmIHNvcnQgLWsgMyA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlzb3J0IC1rIDMKKwkgICAgICBlbHNlCisJCXNvcnQgKzIKKwkgICAgICBmaSB8CisJICAgICAgdW5pcSA+ICIkbmxpc3QiUzsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgICRHUkVQIC12ICJeOiAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLWYgIiRubGlzdCJTOyB0aGVuCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IlMgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiJworCSAgZWxzZQorCSAgICBlY2hvICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgIGZpCisKKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiR7bmxpc3R9SSInCisJICBpZiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQiOyB0aGVuCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCInIDwgIiRubGlzdCJTID4gIiRubGlzdCJJJworCSAgZmkKKworCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLwordHlwZWRlZiBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICB2b2lkICphZGRyZXNzOworfSBsdF9kbHN5bWxpc3Q7CitleHRlcm4gTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CitsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW107XAorIgorCisJICBpZiB0ZXN0IC1zICIkbmxpc3QiSTsgdGhlbgorCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorc3RhdGljIHZvaWQgbHRfc3ltaW5pdCh2b2lkKQoreworICBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QgKnN5bWJvbCA9IGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7CisgIGZvciAoOyBzeW1ib2wtPm5hbWU7ICsrc3ltYm9sKQorICAgIHsiCisJICAgICRTRUQgJ3MvLiovICAgICAgaWYgKFNUUkVRIChzeW1ib2wtPm5hbWUsIFwiJlwiKSkgc3ltYm9sLT5hZGRyZXNzID0gKHZvaWQgKikgXCYmOy8nIDwgIiRubGlzdCJJID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorICAgIH0KK30iCisJICBmaQorCSAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKK0xUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3sge1wiJG15X29yaWdpbmF0b3JcIiwgKHZvaWQgKikgMH0sIgorCisJICBpZiB0ZXN0IC1zICIkbmxpc3QiSTsgdGhlbgorCSAgICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorICB7XCJASU5JVEBcIiwgKHZvaWQgKikgJmx0X3N5bWluaXR9LCIKKwkgIGZpCisKKwkgIGNhc2UgJG5lZWRfbGliX3ByZWZpeCBpbgorCSAgbm8pCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgorCSAgICA7OworCSAgKikKKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZlwKKyIKKwl9ICMgISRvcHRfZHJ5X3J1bgorCisJcGljX2ZsYWdfZm9yX3N5bXRhYmxlPQorCWNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgorCSoiIC1zdGF0aWMgIiopIDs7CisJKikKKwkgIGNhc2UgJGhvc3QgaW4KKwkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAorCSAgIyBhIEZyZWVCU0QgYnVnIHRoYXQgY2F1c2VzIHByb2dyYW1zIHRvIGNyYXNoIHdoZW4gLWxtIGlzCisJICAjIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIFBJQyBvYmplY3QuICBCdXQgd2UgbXVzdCBub3QgdXNlCisJICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KKwkgICMgRnJlZUJTRCAyLjIuNiBhbmQgaXMgZml4ZWQgaW4gRnJlZUJTRCAzLjEuCisJICAqLSotZnJlZWJzZDIuKnwqLSotZnJlZWJzZDMuMCp8Ki0qLWZyZWVic2RlbGYzLjAqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcgLURGUkVFQlNEX1dPUktBUk9VTkQiIDs7CisJICAqLSotaHB1eCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIgIDs7CisJICAqKQorCSAgICAkbXlfcGljX3AgJiYgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIgorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJc3ltdGFiX2NmbGFncz0KKwlmb3IgYXJnIGluICRMVENGTEFHUzsgZG8KKwkgIGNhc2UgJGFyZyBpbgorCSAgLXBpZSB8IC1mcGllIHwgLWZQSUUpIDs7CisJICAqKSBmdW5jX2FwcGVuZCBzeW10YWJfY2ZsYWdzICIgJGFyZyIgOzsKKwkgIGVzYWMKKwlkb25lCisKKwkjIE5vdyBjb21waWxlIHRoZSBkeW5hbWljIHN5bWJvbCBmaWxlLgorCWZ1bmNfc2hvd19ldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0Mkc3ltdGFiX2NmbGFncyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkbXlfZGxzeW1zIiknICdleGl0ICQ/JworCisJIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCWZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiICIke25saXN0fUkiJworCisJIyBUcmFuc2Zvcm0gdGhlIHN5bWJvbCBmaWxlIGludG8gdGhlIGNvcnJlY3QgbmFtZS4KKwlzeW1maWxlb2JqPSRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQKKwljYXNlICRob3N0IGluCisJKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYiOyB0aGVuCisJICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8kbXlfb3V0cHV0bmFtZS5kZWYgJHN5bWZpbGVvYmolImAKKwkgIGVsc2UKKwkgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIGZpCisJICA7OworCSopCisJICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgIDs7CisJZXNhYworCTs7CisgICAgICAqKQorCWZ1bmNfZmF0YWxfZXJyb3IgInVua25vd24gc3VmZml4IGZvciAnJG15X2Rsc3ltcyciCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICAjIFdlIGtlZXAgZ29pbmcganVzdCBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCByZWZlciB0bworICAgICAgIyBsdF9wcmVsb2FkZWRfc3ltYm9scy4gIFRoZSBsaW5rZXIgd2lsbCBmYWlsIGlmIGdsb2JhbF9zeW1ib2xfcGlwZQorICAgICAgIyByZWFsbHkgd2FzIHJlcXVpcmVkLgorCisgICAgICAjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgorICAgICAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyUgQFNZTUZJTEVAJSUiYAorICAgIGZpCit9CisKKyMgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCBBUkcKKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorIyBBUkcgaXMgYSBHTlUvYmludXRpbHMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KK2Z1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkRUdSRVAgJyAoX2hlYWRfW0EtWmEtejAtOV9dK19bYWRdbCp8W0EtWmEtejAtOV9dK19bYWRdbCpfaW5hbWUpJCdgCisgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAiCit9CisKKyMgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wIEFSRworIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisjIEFSRyBpcyBhbiBNUy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExfSU1QT1JUX0RFU0NSSVBUT1InYAorICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXAiCit9CisKKyMgZnVuY193aW4zMl9saWJpZCBhcmcKKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworIworIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCisjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCisjIERlc3BpdGUgdGhlIG5hbWUsIGFsc28gZGVhbCB3aXRoIDY0IGJpdCBiaW5hcmllcy4KK2Z1bmNfd2luMzJfbGliaWQgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIHdpbjMyX2xpYmlkX3R5cGU9dW5rbm93bgorICB3aW4zMl9maWxlcmVzPWBmaWxlIC1MICQxIDI+L2Rldi9udWxsYAorICBjYXNlICR3aW4zMl9maWxlcmVzIGluCisgICphclwgYXJjaGl2ZVwgaW1wb3J0XCBsaWJyYXJ5KikgIyBkZWZpbml0ZWx5IGltcG9ydAorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBhcmNoaXZlIGltcG9ydCIKKyAgICA7OworICAqYXJcIGFyY2hpdmUqKSAjIGNvdWxkIGJlIGFuIGltcG9ydCwgb3Igc3RhdGljCisgICAgIyBLZWVwIHRoZSBlZ3JlcCBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QuCisgICAgaWYgZXZhbCAkT0JKRFVNUCAtZiAkMSB8ICRTRUQgLWUgJzEwcScgMj4vZGV2L251bGwgfAorICAgICAgICRFR1JFUCAnZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBjYXNlICRubV9pbnRlcmZhY2UgaW4KKyAgICAgICJNUyBkdW1wYmluIikKKwlpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIiB8fAorCSAgIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgIiQxIgorCXRoZW4KKwkgIHdpbjMyX25tcmVzPWltcG9ydAorCWVsc2UKKwkgIHdpbjMyX25tcmVzPQorCWZpCisJOzsKKyAgICAgICopCisJZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCXdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiB8CisJICAkU0VEIC1uIC1lICcKKwkgICAgMSwxMDB7CisJCS8gSSAveworCQkgICAgc3wuKnxpbXBvcnR8CisJCSAgICBwCisJCSAgICBxCisJCX0KKwkgICAgfSdgCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCisgICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7CisgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICAqRExMKikKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgIDs7CisgICpleGVjdXRhYmxlKikgIyBidXQgc2hlbGwgc2NyaXB0cyBhcmUgImV4ZWN1dGFibGUiIHRvby4uLgorICAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCisgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAkRUNITyAiJHdpbjMyX2xpYmlkX3R5cGUiCit9CisKKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliIEFSRworIworIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYiAoKQoreworICAkZGVidWdfY21kCisKKyAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YCRETExUT09MIC0taWRlbnRpZnktc3RyaWN0IC0taWRlbnRpZnkgIiQxImAKK30KKworIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSBTRUNUSU9OX05BTUUgTElCTkFNRXMKKyMKKyMgVGhlIGlzIHRoZSBjb3JlIG9mIGEgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgYQorIyBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZQorIyBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkgTElCTkFNRS4KKyMKKyMgU0VDVElPTl9OQU1FIGlzIGVpdGhlciAuaWRhdGEkNiBvciAuaWRhdGEkNywgZGVwZW5kaW5nCisjIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY29tcGlsZXIgdGhhdCBjcmVhdGVkIHRoZSBpbXBsaWIuCisjCisjIEVjaG9zIHRoZSBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZQorIyBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkuCitmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAoKQoreworICAkZGVidWdfY21kCisKKyAgbWF0Y2hfbGl0ZXJhbD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfbWFrZV9saXRlcmFsX3JlZ2V4ImAKKyAgJE9CSkRVTVAgLXMgLS1zZWN0aW9uICIkMSIgIiQyIiAyPi9kZXYvbnVsbCB8CisgICAgJFNFRCAnL15Db250ZW50cyBvZiBzZWN0aW9uICciJG1hdGNoX2xpdGVyYWwiJzoveworICAgICAgIyBQbGFjZSBtYXJrZXIgYXQgYmVnaW5uaW5nIG9mIGFyY2hpdmUgbWVtYmVyIGRsbG5hbWUgc2VjdGlvbgorICAgICAgcy8uKi89PT09TUFSSz09PT0vCisgICAgICBwCisgICAgICBkCisgICAgfQorICAgICMgVGhlc2UgbGluZXMgY2FuIHNvbWV0aW1lcyBiZSBsb25nZXIgdGhhbiA0MyBjaGFyYWN0ZXJzLCBidXQKKyAgICAjIGFyZSBhbHdheXMgdW5pbnRlcmVzdGluZworICAgIC86WwkgXSpmaWxlIGZvcm1hdCBwZVtpXVx7LDFcfS0vZAorICAgIC9eSW4gYXJjaGl2ZSBbXjpdKjovZAorICAgICMgRW5zdXJlIG1hcmtlciBpcyBwcmludGVkCisgICAgL149PT09TUFSSz09PT0vcAorICAgICMgUmVtb3ZlIGFsbCBsaW5lcyB3aXRoIGxlc3MgdGhhbiA0MyBjaGFyYWN0ZXJzCisgICAgL14uXHs0M1x9LyFkCisgICAgIyBGcm9tIHJlbWFpbmluZyBsaW5lcywgcmVtb3ZlIGZpcnN0IDQzIGNoYXJhY3RlcnMKKyAgICBzL14uXHs0M1x9Ly8nIHwKKyAgICAkU0VEIC1uICcKKyAgICAgICMgSm9pbiBtYXJrZXIgYW5kIGFsbCBsaW5lcyB1bnRpbCBuZXh0IG1hcmtlciBpbnRvIGEgc2luZ2xlIGxpbmUKKyAgICAgIC9ePT09PU1BUks9PT09LyBiIHBhcmEKKyAgICAgIEgKKyAgICAgICQgYiBwYXJhCisgICAgICBiCisgICAgICA6cGFyYQorICAgICAgeAorICAgICAgcy9cbi8vZworICAgICAgIyBSZW1vdmUgdGhlIG1hcmtlcgorICAgICAgcy9ePT09PU1BUks9PT09Ly8KKyAgICAgICMgUmVtb3ZlIHRyYWlsaW5nIGRvdHMgYW5kIHdoaXRlc3BhY2UKKyAgICAgIHMvW1wuIFx0XSokLy8KKyAgICAgICMgUHJpbnQKKyAgICAgIC8uL3AnIHwKKyAgICAjIHdlIG5vdyBoYXZlIGEgbGlzdCwgb25lIGVudHJ5IHBlciBsaW5lLCBvZiB0aGUgc3RyaW5naWZpZWQKKyAgICAjIGNvbnRlbnRzIG9mIHRoZSBhcHByb3ByaWF0ZSBzZWN0aW9uIG9mIGFsbCBtZW1iZXJzIG9mIHRoZQorICAgICMgYXJjaGl2ZSB0aGF0IHBvc3Nlc3MgdGhhdCBzZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQorICAgICMgYWxsIHRob3NlIHRoYXQgaGF2ZSBhIGZpcnN0IG9yIHNlY29uZCBjaGFyYWN0ZXIgdGhhdCBpcworICAgICMgYSAnLicgKHRoYXQgaXMsIG9iamR1bXAncyByZXByZXNlbnRhdGlvbiBvZiBhbiB1bnByaW50YWJsZQorICAgICMgY2hhcmFjdGVyLikgVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGFyY2hpdmVzIHdpdGggbGVzcyB0aGFuCisgICAgIyAweDMwMmYgZXhwb3J0cyAtLSBidXQgd2lsbCBmYWlsIGZvciBETExzIHdob3NlIG5hbWUgYWN0dWFsbHkKKyAgICAjIGJlZ2lucyB3aXRoIGEgbGl0ZXJhbCAnLicgb3IgYSBzaW5nbGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5CisgICAgIyBhICcuJy4KKyAgICAjCisgICAgIyBPZiB0aG9zZSB0aGF0IHJlbWFpbiwgcHJpbnQgdGhlIGZpcnN0IG9uZS4KKyAgICAkU0VEIC1lICcvXlwuL2Q7L14uXC4vZDtxJworfQorCisjIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayBBUkcKKyMgUGxhdGZvcm0tc3BlY2lmaWMgZnVuY3Rpb24gdG8gZXh0cmFjdCB0aGUKKyMgbmFtZSBvZiB0aGUgRExMIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3BlY2lmaWVkCisjIGltcG9ydCBsaWJyYXJ5IEFSRy4KKyMKKyMgVGhpcyBmYWxsYmFjayBpbXBsZW1lbnRhdGlvbiBpcyBmb3IgdXNlIHdoZW4gJERMTFRPT0wKKyMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgLS1pZGVudGlmeS1zdHJpY3Qgb3B0aW9uLgorIyBJbnZva2VkIGJ5IGV2YWwnaW5nIHRoZSBsaWJ0b29sIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorIyBSZXN1bHQgaXMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZQorIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKK2Z1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayAoKQoreworICAkZGVidWdfY21kCisKKyAgaWYgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiOyB0aGVuCisgICAgIyBiaW51dGlscyBpbXBvcnQgbGlicmFyeQorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDcnICIkMSJgCisgIGVsaWYgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICIkMSI7IHRoZW4KKyAgICAjIG1zLWdlbmVyYXRlZCBpbXBvcnQgbGlicmFyeQorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAnLmlkYXRhJDYnICIkMSJgCisgIGVsc2UKKyAgICAjIHVua25vd24KKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD0KKyAgZmkKK30KKworCisjIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlIGRpciBvbGRsaWIKK2Z1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZl9leF9hbl9hcl9kaXI9JDE7IHNoaWZ0CisgICAgZl9leF9hbl9hcl9vbGRsaWI9JDEKKyAgICBpZiB0ZXN0IHllcyA9ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIjsgdGhlbgorICAgICAgbG9ja2ZpbGU9JGZfZXhfYW5fYXJfb2xkbGliLmxvY2sKKyAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KKwlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgorCXNsZWVwIDIKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcIlwkZl9leF9hbl9hcl9vbGRsaWJcIikiIFwKKwkJICAgJ3N0YXQ9JD87IHJtIC1mICIkbG9ja2ZpbGUiOyBleGl0ICRzdGF0JworICAgIGlmIHRlc3QgeWVzID0gIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iOyB0aGVuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgcm0gLWYgIiRsb2NrZmlsZSIKKyAgICBmaQorICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgIDoKKyAgICBlbHNlCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJvYmplY3QgbmFtZSBjb25mbGljdHMgaW4gYXJjaGl2ZTogJGZfZXhfYW5fYXJfZGlyLyRmX2V4X2FuX2FyX29sZGxpYiIKKyAgICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FyY2hpdmVzIGdlbnRvcCBvbGRsaWIgLi4uCitmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBteV9nZW50b3A9JDE7IHNoaWZ0CisgICAgbXlfb2xkbGlicz0kezErIiRAIn0KKyAgICBteV9vbGRvYmpzPQorICAgIG15X3hsaWI9CisgICAgbXlfeGFicz0KKyAgICBteV94ZGlyPQorCisgICAgZm9yIG15X3hsaWIgaW4gJG15X29sZGxpYnM7IGRvCisgICAgICAjIEV4dHJhY3QgdGhlIG9iamVjdHMuCisgICAgICBjYXNlICRteV94bGliIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBteV94YWJzPSRteV94bGliIDs7CisJKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7CisgICAgICBlc2FjCisgICAgICBmdW5jX2Jhc2VuYW1lICIkbXlfeGxpYiIKKyAgICAgIG15X3hsaWI9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgICAgICBteV94bGliX3U9JG15X3hsaWIKKyAgICAgIHdoaWxlIDo7IGRvCisgICAgICAgIGNhc2UgIiAkZXh0cmFjdGVkX2FyY2hpdmVzICIgaW4KKwkqIiAkbXlfeGxpYl91ICIqKQorCSAgZnVuY19hcml0aCAkZXh0cmFjdGVkX3NlcmlhbCArIDEKKwkgIGV4dHJhY3RlZF9zZXJpYWw9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICBteV94bGliX3U9bHQkZXh0cmFjdGVkX3NlcmlhbC0kbXlfeGxpYiA7OworCSopIGJyZWFrIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZXh0cmFjdGVkX2FyY2hpdmVzPSIkZXh0cmFjdGVkX2FyY2hpdmVzICRteV94bGliX3UiCisgICAgICBteV94ZGlyPSRteV9nZW50b3AvJG15X3hsaWJfdQorCisgICAgICBmdW5jX21rZGlyX3AgIiRteV94ZGlyIgorCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLWRhcndpbiopCisJZnVuY192ZXJib3NlICJFeHRyYWN0aW5nICRteV94YWJzIgorCSMgRG8gbm90IGJvdGhlciBkb2luZyBhbnl0aGluZyBpZiBqdXN0IGEgZHJ5IHJ1bgorCSRvcHRfZHJ5X3J1biB8fCB7CisJICBkYXJ3aW5fb3JpZ19kaXI9YHB3ZGAKKwkgIGNkICRteV94ZGlyIHx8IGV4aXQgJD8KKwkgIGRhcndpbl9hcmNoaXZlPSRteV94YWJzCisJICBkYXJ3aW5fY3VyZGlyPWBwd2RgCisJICBmdW5jX2Jhc2VuYW1lICIkZGFyd2luX2FyY2hpdmUiCisJICBkYXJ3aW5fYmFzZV9hcmNoaXZlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgZGFyd2luX2FyY2hlcz1gJExJUE8gLWluZm8gIiRkYXJ3aW5fYXJjaGl2ZSIgMj4vZGV2L251bGwgfCAkR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsIHx8IHRydWVgCisJICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4KKwkgICAgZGFyd2luX2FyY2hlcz1gJEVDSE8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAorCSAgICBkYXJ3aW5fYXJjaD0KKwkgICAgZnVuY192ZXJib3NlICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2luX2FyY2hlcyIKKwkgICAgZm9yIGRhcndpbl9hcmNoIGluICAkZGFyd2luX2FyY2hlczsgZG8KKwkgICAgICBmdW5jX21rZGlyX3AgInVuZmF0LSQkLyRkYXJ3aW5fYmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaCIKKwkgICAgICAkTElQTyAtdGhpbiAkZGFyd2luX2FyY2ggLW91dHB1dCAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoLyRkYXJ3aW5fYmFzZV9hcmNoaXZlIiAiJGRhcndpbl9hcmNoaXZlIgorCSAgICAgIGNkICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2giCisJICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgImBwd2RgIiAiJGRhcndpbl9iYXNlX2FyY2hpdmUiCisJICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgorCSAgICAgICRSTSAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoLyRkYXJ3aW5fYmFzZV9hcmNoaXZlIgorCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKKyAgICAgICAgICAgICMjIE9rYXkgbm93IHdlJ3ZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQorCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnQgfCAkU0VEIC1lICIkc2VkX2Jhc2VuYW1lIiB8IHNvcnQgLXVgCisJICAgIGRhcndpbl9maWxlPQorCSAgICBkYXJ3aW5fZmlsZXM9CisJICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbworCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgc29ydCB8ICROTDJTUGAKKwkgICAgICAkTElQTyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcworCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAorCSAgICAkUk0gLXJmIHVuZmF0LSQkCisJICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgorCSAgZWxzZQorCSAgICBjZCAkZGFyd2luX29yaWdfZGlyCisJICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCSAgZmkgIyAkZGFyd2luX2FyY2hlcworCX0gIyAhJG9wdF9kcnlfcnVuCisJOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCTs7CisgICAgICBlc2FjCisgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgc29ydCB8ICROTDJTUGAKKyAgICBkb25lCisKKyAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSRteV9vbGRvYmpzCit9CisKKworIyBmdW5jX2VtaXRfd3JhcHBlciBbYXJnPW5vXQorIworIyBFbWl0IGEgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCBvbiBzdGRvdXQuCisjIERvbid0IGRpcmVjdGx5IG9wZW4gYSBmaWxlIGJlY2F1c2Ugd2UgbWF5IHdhbnQgdG8KKyMgaW5jb3Jwb3JhdGUgdGhlIHNjcmlwdCBjb250ZW50cyB3aXRoaW4gYSBjeWd3aW4vbWluZ3cKKyMgd3JhcHBlciBleGVjdXRhYmxlLiAgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbgorIyBmdW5jX21vZGVfbGluayBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGVzCisjIHNldCB0aGVyZWluLgorIworIyBBUkcgaXMgdGhlIHZhbHVlIHRoYXQgdGhlIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSCisjIHZhcmlhYmxlIHdpbGwgdGFrZS4gIElmICd5ZXMnLCB0aGVuIHRoZSBlbWl0dGVkIHNjcmlwdAorIyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBkaXJlY3Rvcnkgd2hlcmUgaXQgaXMgc3RvcmVkIGlzCisjIHRoZSAkb2JqZGlyIGRpcmVjdG9yeS4gIFRoaXMgaXMgYSBjeWd3aW4vbWluZ3ctc3BlY2lmaWMKKyMgYmVoYXZpb3IuCitmdW5jX2VtaXRfd3JhcHBlciAoKQoreworCWZ1bmNfZW1pdF93cmFwcGVyX2FyZzE9JHsxLW5vfQorCisJJEVDSE8gIlwKKyMhICRTSEVMTAorCisjICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCisjCisjIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisjCisjIFRoaXMgd3JhcHBlciBzY3JpcHQgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCitCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiCisKKyMgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZXRlcm1pbmVzIG91ciBvcGVyYXRpb24gbW9kZS4KK2lmIHRlc3QgXCJcJGxpYnRvb2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNcIjsgdGhlbgorICAjIGluc3RhbGwgbW9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyAgZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbj0nJG1hY3JvX3ZlcnNpb24nCisgIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKK2Vsc2UKKyAgIyBXaGVuIHdlIGFyZSBzb3VyY2VkIGluIGV4ZWN1dGUgbW9kZSwgXCRmaWxlIGFuZCBcJEVDSE8gYXJlIGFscmVhZHkgc2V0LgorICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgZmlsZT1cIlwkMFwiIgorCisgICAgcUVDSE89YCRFQ0hPICIkRUNITyIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAkRUNITyAiXAorCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKK1wkMQorX0xURUNIT19FT0YnCit9CisgICAgRUNITz1cIiRxRUNIT1wiCisgIGZpCisKKyMgVmVyeSBiYXNpYyBvcHRpb24gcGFyc2luZy4gVGhlc2Ugb3B0aW9ucyBhcmUgKGEpIHNwZWNpZmljIHRvCisjIHRoZSBsaWJ0b29sIHdyYXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHdyYXBwZXIKKyMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB0aGF0IGlzIHVzZWQgb25seSBvbgorIyB3aW5kb3dzIHBsYXRmb3JtcywgYW5kIChjKSBhbGwgYmVnaW4gd2l0aCB0aGUgc3RyaW5nICItLWx0LSIKKyMgKGFwcGxpY2F0aW9uIHByb2dyYW1zIGFyZSB1bmxpa2VseSB0byBoYXZlIG9wdGlvbnMgdGhhdCBtYXRjaAorIyB0aGlzIHBhdHRlcm4pLgorIworIyBUaGVyZSBhcmUgb25seSB0d28gc3VwcG9ydGVkIG9wdGlvbnM6IC0tbHQtZGVidWcgYW5kCisjIC0tbHQtZHVtcC1zY3JpcHQuIFRoZXJlIGlzLCBkZWxpYmVyYXRlbHksIG5vIC0tbHQtaGVscC4KKyMKKyMgVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoaXMgcGFyc2luZyBmdW5jdGlvbiBzaG91bGQgYmUgdGhlCisjIHNjcmlwdCdzICQwIHZhbHVlLCBmb2xsb3dlZCBieSAiJEAiLgorbHRfb3B0aW9uX2RlYnVnPQorZnVuY19wYXJzZV9sdF9vcHRpb25zICgpCit7CisgIGx0X3NjcmlwdF9hcmcwPVwkMAorICBzaGlmdAorICBmb3IgbHRfb3B0CisgIGRvCisgICAgY2FzZSBcIlwkbHRfb3B0XCIgaW4KKyAgICAtLWx0LWRlYnVnKSBsdF9vcHRpb25fZGVidWc9MSA7OworICAgIC0tbHQtZHVtcC1zY3JpcHQpCisgICAgICAgIGx0X2R1bXBfRD1cYFwkRUNITyBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgfCAkU0VEIC1lICdzL15YLy8nIC1lICdzJS9bXi9dKiQlJSdcYAorICAgICAgICB0ZXN0IFwiWFwkbHRfZHVtcF9EXCIgPSBcIlhcJGx0X3NjcmlwdF9hcmcwXCIgJiYgbHRfZHVtcF9EPS4KKyAgICAgICAgbHRfZHVtcF9GPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlXi4qLyUlJ1xgCisgICAgICAgIGNhdCBcIlwkbHRfZHVtcF9EL1wkbHRfZHVtcF9GXCIKKyAgICAgICAgZXhpdCAwCisgICAgICA7OworICAgIC0tbHQtKikKKyAgICAgICAgXCRFQ0hPIFwiVW5yZWNvZ25pemVkIC0tbHQtIG9wdGlvbjogJ1wkbHRfb3B0J1wiIDE+JjIKKyAgICAgICAgZXhpdCAxCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICMgUHJpbnQgdGhlIGRlYnVnIGJhbm5lciBpbW1lZGlhdGVseToKKyAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICBlY2hvIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OXCIgMT4mMgorICBmaQorfQorCisjIFVzZWQgd2hlbiAtLWx0LWRlYnVnLiBQcmludHMgaXRzIGFyZ3VtZW50cyB0byBzdGRvdXQKKyMgKHJlZGlyZWN0aW9uIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyKQorZnVuY19sdF9kdW1wX2FyZ3MgKCkKK3sKKyAgbHRfZHVtcF9hcmdzX049MTsKKyAgZm9yIGx0X2FyZworICBkbworICAgIFwkRUNITyBcIiRvdXRwdXRuYW1lOiRvdXRwdXQ6XCRMSU5FTk86IG5ld2FyZ3ZbXCRsdF9kdW1wX2FyZ3NfTl06IFwkbHRfYXJnXCIKKyAgICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIgXCRsdF9kdW1wX2FyZ3NfTiArIDFcYAorICBkb25lCit9CisKKyMgQ29yZSBmdW5jdGlvbiBmb3IgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KK2Z1bmNfZXhlY19wcm9ncmFtX2NvcmUgKCkKK3sKKyIKKyAgY2FzZSAkaG9zdCBpbgorICAjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKyAgKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKyAgICAkRUNITyAiXAorICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICAgICAgXCRFQ0hPIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKKyAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCisgICAgICBmaQorICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisgICAgOzsKKworICAqKQorICAgICRFQ0hPICJcCisgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgICAgICBcJEVDSE8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBuZXdhcmd2WzBdOiBcJHByb2dkaXIvXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKKyAgICAgIGZpCisgICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KKyIKKyAgICA7OworICBlc2FjCisgICRFQ0hPICJcCisgICAgICBcJEVDSE8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIiAxPiYyCisgICAgICBleGl0IDEKK30KKworIyBBIGZ1bmN0aW9uIHRvIGVuY2Fwc3VsYXRlIGxhdW5jaGluZyB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uCisjIFN0cmlwcyBvcHRpb25zIGluIHRoZSAtLWx0LSogbmFtZXNwYWNlIGZyb20gXCRAIGFuZAorIyBsYXVuY2hlcyB0YXJnZXQgYXBwbGljYXRpb24gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KK2Z1bmNfZXhlY19wcm9ncmFtICgpCit7CisgIGNhc2UgXCIgXCQqIFwiIGluCisgICpcXCAtLWx0LSopCisgICAgZm9yIGx0X3dyX2FyZworICAgIGRvCisgICAgICBjYXNlIFwkbHRfd3JfYXJnIGluCisgICAgICAtLWx0LSopIDs7CisgICAgICAqKSBzZXQgeCBcIlwkQFwiIFwiXCRsdF93cl9hcmdcIjsgc2hpZnQ7OworICAgICAgZXNhYworICAgICAgc2hpZnQKKyAgICBkb25lIDs7CisgIGVzYWMKKyAgZnVuY19leGVjX3Byb2dyYW1fY29yZSBcJHsxK1wiXCRAXCJ9Cit9CisKKyAgIyBQYXJzZSBvcHRpb25zCisgIGZ1bmNfcGFyc2VfbHRfb3B0aW9ucyBcIlwkMFwiIFwkezErXCJcJEBcIn0KKworICAjIEZpbmQgdGhlIGRpcmVjdG9yeSB0aGF0IHRoaXMgc2NyaXB0IGxpdmVzIGluLgorICB0aGlzZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKiQlJSdcYAorICB0ZXN0IFwieFwkdGhpc2RpclwiID0gXCJ4XCRmaWxlXCIgJiYgdGhpc2Rpcj0uCisKKyAgIyBGb2xsb3cgc3ltYm9saWMgbGlua3MgdW50aWwgd2UgZ2V0IHRvIHRoZSByZWFsIHRoaXNkaXIuCisgIGZpbGU9XGBscyAtbGQgXCJcJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKKyAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbworICAgIGRlc3RkaXI9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlL1teL10qXCQlJSdcYAorCisgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgorICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KKyAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgorICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7CisgICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7CisgICAgICBlc2FjCisgICAgZmkKKworICAgIGZpbGU9XGBcJEVDSE8gXCJcJGZpbGVcIiB8ICRTRUQgJ3MlXi4qLyUlJ1xgCisgICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICRTRUQgLW4gJ3MvLiotPiAvL3AnXGAKKyAgZG9uZQorCisgICMgVXN1YWxseSAnbm8nLCBleGNlcHQgb24gY3lnd2luL21pbmd3IHdoZW4gZW1iZWRkZWQgaW50bworICAjIHRoZSBjd3JhcHBlci4KKyAgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVI9JGZ1bmNfZW1pdF93cmFwcGVyX2FyZzEKKyAgaWYgdGVzdCBcIlwkV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVJcIiA9IFwieWVzXCI7IHRoZW4KKyAgICAjIHNwZWNpYWwgY2FzZSBmb3IgJy4nCisgICAgaWYgdGVzdCBcIlwkdGhpc2RpclwiID0gXCIuXCI7IHRoZW4KKyAgICAgIHRoaXNkaXI9XGBwd2RcYAorICAgIGZpCisgICAgIyByZW1vdmUgLmxpYnMgZnJvbSB0aGlzZGlyCisgICAgY2FzZSBcIlwkdGhpc2RpclwiIGluCisgICAgKltcXFxcL10kb2JqZGlyICkgdGhpc2Rpcj1cYFwkRUNITyBcIlwkdGhpc2RpclwiIHwgJFNFRCAncyVbXFxcXC9dW15cXFxcL10qJCUlJ1xgIDs7CisgICAgJG9iamRpciApICAgdGhpc2Rpcj0uIDs7CisgICAgZXNhYworICBmaQorCisgICMgVHJ5IHRvIGdldCB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUuCisgIGFic2Rpcj1cYGNkIFwiXCR0aGlzZGlyXCIgJiYgcHdkXGAKKyAgdGVzdCAtbiBcIlwkYWJzZGlyXCIgJiYgdGhpc2Rpcj1cIlwkYWJzZGlyXCIKKyIKKworCWlmIHRlc3QgeWVzID0gIiRmYXN0X2luc3RhbGwiOyB0aGVuCisJICAkRUNITyAiXAorICBwcm9ncmFtPWx0LSckb3V0cHV0bmFtZSckZXhlZXh0CisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisKKyAgaWYgdGVzdCAhIC1mIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIHx8CisgICAgIHsgZmlsZT1cYGxzIC0xZHQgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCJcJHByb2dkaXIvLi4vXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfCAkU0VEIDFxXGA7IFxcCisgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKworICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCisKKyAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgorICAgICAgJE1LRElSIFwiXCRwcm9nZGlyXCIKKyAgICBlbHNlCisgICAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgICBmaSIKKworCSAgJEVDSE8gIlwKKworICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5CisgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgorICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcJHJlbGlua19jb21tYW5kIDI+JjFcYDsgdGhlbiA6CisgICAgICBlbHNlCisJXCRFQ0hPIFwiXCRyZWxpbmtfY29tbWFuZF9vdXRwdXRcIiA+JjIKKwkkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKwlleGl0IDEKKyAgICAgIGZpCisgICAgZmkKKworICAgICRNViBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8fAorICAgIHsgJFJNIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOworICAgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9CisgICAgJFJNIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisgIGZpIgorCWVsc2UKKwkgICRFQ0hPICJcCisgIHByb2dyYW09JyRvdXRwdXRuYW1lJworICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorIgorCWZpCisKKwkkRUNITyAiXAorCisgIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCisKKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorCSMKKwkjIEZpeCB0aGUgRExMIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4gIERvIHRoaXMgYmVmb3JlIHByZXBlbmRpbmcKKwkjIHRvIHNobGlicGF0aCwgYmVjYXVzZSBvbiBXaW5kb3dzLCBib3RoIGFyZSBQQVRIIGFuZCB1bmluc3RhbGxlZAorCSMgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4KKwlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgdGhlIGRsbCBzZWFyY2ggcGF0aCBjb21wb25lbnRzIHRvIHRoZSBleGVjdXRhYmxlIFBBVEgKKyAgICBQQVRIPSRkbGxzZWFyY2hwYXRoOlwkUEFUSAorIgorCWZpCisKKwkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KKwlpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisJICAkRUNITyAiXAorICAgICMgQWRkIG91ciBvd24gbGlicmFyeSBwYXRoIHRvICRzaGxpYnBhdGhfdmFyCisgICAgJHNobGlicGF0aF92YXI9XCIkdGVtcF9ycGF0aFwkJHNobGlicGF0aF92YXJcIgorCisgICAgIyBTb21lIHN5c3RlbXMgY2Fubm90IGNvcGUgd2l0aCBjb2xvbi10ZXJtaW5hdGVkICRzaGxpYnBhdGhfdmFyCisgICAgIyBUaGUgc2Vjb25kIGNvbG9uIGlzIGEgd29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gQmVPUyBSNCBzZWQKKyAgICAkc2hsaWJwYXRoX3Zhcj1cYFwkRUNITyBcIlwkJHNobGlicGF0aF92YXJcIiB8ICRTRUQgJ3MvOjoqXCQvLydcYAorCisgICAgZXhwb3J0ICRzaGxpYnBhdGhfdmFyCisiCisJZmkKKworCSRFQ0hPICJcCisgICAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgorICAgICAgIyBSdW4gdGhlIGFjdHVhbCBwcm9ncmFtIHdpdGggb3VyIGFyZ3VtZW50cy4KKyAgICAgIGZ1bmNfZXhlY19wcm9ncmFtIFwkezErXCJcJEBcIn0KKyAgICBmaQorICBlbHNlCisgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorICAgIFwkRUNITyBcIlwkMDogZXJyb3I6ICdcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKKyAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKKyAgICBcJEVDSE8gXCJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgMT4mMgorICAgIGV4aXQgMQorICBmaQorZmlcCisiCit9CisKKworIyBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjCisjIGVtaXQgdGhlIHNvdXJjZSBjb2RlIGZvciBhIHdyYXBwZXIgZXhlY3V0YWJsZSBvbiBzdGRvdXQKKyMgTXVzdCBPTkxZIGJlIGNhbGxlZCBmcm9tIHdpdGhpbiBmdW5jX21vZGVfbGluayBiZWNhdXNlCisjIGl0IGRlcGVuZHMgb24gYSBudW1iZXIgb2YgdmFyaWFibGUgc2V0IHRoZXJlaW4uCitmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjICgpCit7CisJY2F0IDw8RU9GCisKKy8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTgorCisgICBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyAgIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKworICAgVGhpcyB3cmFwcGVyIGV4ZWN1dGFibGUgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorKi8KK0VPRgorCSAgICBjYXQgPDwiRU9GIgorI2lmZGVmIF9NU0NfVkVSCisjIGRlZmluZSBfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUgMQorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZmRlZiBfTVNDX1ZFUgorIyBpbmNsdWRlIDxkaXJlY3QuaD4KKyMgaW5jbHVkZSA8cHJvY2Vzcy5oPgorIyBpbmNsdWRlIDxpby5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjIGluY2x1ZGUgPHN0ZGludC5oPgorIyBpZmRlZiBfX0NZR1dJTl9fCisjICBpbmNsdWRlIDxpby5oPgorIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2RlZmluZSBTVFJFUShzMSwgczIpIChzdHJjbXAgKChzMSksIChzMikpID09IDApCisKKy8qIGRlY2xhcmF0aW9ucyBvZiBub24tQU5TSSBmdW5jdGlvbnMgKi8KKyNpZiBkZWZpbmVkIF9fTUlOR1czMl9fCisjIGlmZGVmIF9fU1RSSUNUX0FOU0lfXworaW50IF9wdXRlbnYgKGNvbnN0IGNoYXIgKik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkIF9fQ1lHV0lOX18KKyMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCitjaGFyICpyZWFscGF0aCAoY29uc3QgY2hhciAqLCBjaGFyICopOworaW50IHB1dGVudiAoY2hhciAqKTsKK2ludCBzZXRlbnYgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworIyBlbmRpZgorLyogI2VsaWYgZGVmaW5lZCBvdGhlcl9wbGF0Zm9ybSB8fCBkZWZpbmVkIC4uLiAqLworI2VuZGlmCisKKy8qIHBvcnRhYmlsaXR5IGRlZmluZXMsIGV4Y2x1ZGluZyBwYXRoIGhhbmRsaW5nIG1hY3JvcyAqLworI2lmIGRlZmluZWQgX01TQ19WRVIKKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyMgZGVmaW5lIHN0YXQgICAgX3N0YXQKKyMgZGVmaW5lIGNobW9kICAgX2NobW9kCisjIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKKyMgZGVmaW5lIHB1dGVudiAgX3B1dGVudgorIyBkZWZpbmUgU19JWFVTUiBfU19JRVhFQworI2VsaWYgZGVmaW5lZCBfX01JTkdXMzJfXworIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQorIyBkZWZpbmUgc3RhdCAgICBfc3RhdAorIyBkZWZpbmUgY2htb2QgICBfY2htb2QKKyMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAorIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CisjZWxpZiBkZWZpbmVkIF9fQ1lHV0lOX18KKyMgZGVmaW5lIEhBVkVfU0VURU5WCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisvKiAjZWxpZiBkZWZpbmVkIG90aGVyIHBsYXRmb3JtcyAuLi4gKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBQQVRIX01BWAorIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAorI2VsaWYgZGVmaW5lZCBNQVhQQVRITEVOCisjIGRlZmluZSBMVF9QQVRITUFYIE1BWFBBVEhMRU4KKyNlbHNlCisjIGRlZmluZSBMVF9QQVRITUFYIDEwMjQKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhPVEgKKyMgZGVmaW5lIFNfSVhPVEggMAorI2VuZGlmCisjaWZuZGVmIFNfSVhHUlAKKyMgZGVmaW5lIFNfSVhHUlAgMAorI2VuZGlmCisKKy8qIHBhdGggaGFuZGxpbmcgcG9ydGFiaWxpdHkgbWFjcm9zICovCisjaWZuZGVmIERJUl9TRVBBUkFUT1IKKyMgZGVmaW5lIERJUl9TRVBBUkFUT1IgJy8nCisjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX01TRE9TX18gfHwgZGVmaW5lZCBfX0RKR1BQX18gfHwgXAorICBkZWZpbmVkIF9fT1MyX18KKyMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjIGRlZmluZSBGT1BFTl9XQiAid2IiCisjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworIyBlbmRpZgorIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCisjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKKwkoKChjaCkgPT0gRElSX1NFUEFSQVRPUikgfHwgKChjaCkgPT0gRElSX1NFUEFSQVRPUl8yKSkKKyNlbmRpZiAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1IpCisjZWxzZSAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisjIGRlZmluZSBJU19QQVRIX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gUEFUSF9TRVBBUkFUT1JfMikKKyNlbmRpZiAvKiBQQVRIX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgRk9QRU5fV0IKKyMgZGVmaW5lIEZPUEVOX1dCICJ3IgorI2VuZGlmCisjaWZuZGVmIF9PX0JJTkFSWQorIyBkZWZpbmUgX09fQklOQVJZIDAKKyNlbmRpZgorCisjZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCisjZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKKyAgaWYgKHN0YWxlKSB7IGZyZWUgKHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKK30gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVkIExUX0RFQlVHV1JBUFBFUgorc3RhdGljIGludCBsdF9kZWJ1ZyA9IDE7CisjZWxzZQorc3RhdGljIGludCBsdF9kZWJ1ZyA9IDA7CisjZW5kaWYKKworY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gImxpYnRvb2wtd3JhcHBlciI7IC8qIGluIGNhc2UgeHN0cmR1cCBmYWlscyAqLworCit2b2lkICp4bWFsbG9jIChzaXplX3QgbnVtKTsKK2NoYXIgKnhzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZyk7Citjb25zdCBjaGFyICpiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworY2hhciAqZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKTsKK2NoYXIgKmNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYyk7CitpbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2ludCBjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2NoYXIgKnN0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpOwordm9pZCBsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworc3RhdGljIGNvbnN0IGNoYXIgKm5vbm51bGwgKGNvbnN0IGNoYXIgKnMpOworc3RhdGljIGNvbnN0IGNoYXIgKm5vbmVtcHR5IChjb25zdCBjaGFyICpzKTsKK3ZvaWQgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICpsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpOwordm9pZCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICoqcHJlcGFyZV9zcGF3biAoY2hhciAqKmFyZ3YpOwordm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSAqZik7CitFT0YKKworCSAgICBjYXQgPDxFT0YKKyNpZiBfX0dOVUNfXyA8IDQgfHwgKF9fR05VQ19fID09IDQgJiYgX19HTlVDX01JTk9SX18gPCA1KQorIyBkZWZpbmUgZXh0ZXJuYWxseV92aXNpYmxlIHZvbGF0aWxlCisjZWxzZQorIyBkZWZpbmUgZXh0ZXJuYWxseV92aXNpYmxlIF9fYXR0cmlidXRlX18oKGV4dGVybmFsbHlfdmlzaWJsZSkpIHZvbGF0aWxlCisjZW5kaWYKK2V4dGVybmFsbHlfdmlzaWJsZSBjb25zdCBjaGFyICogTUFHSUNfRVhFID0gIiRtYWdpY19leGUiOworY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBUk5BTUUgPSAiJHNobGlicGF0aF92YXIiOworRU9GCisKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJHRlbXBfcnBhdGgiCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogTElCX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiI7CitFT0YKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KKyAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiRkbGxzZWFyY2hwYXRoOiIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIlBBVEgiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PCJFT0YiCitjb25zdCBjaGFyICogRVhFX1BBVEhfVkFSTkFNRSA9ICIiOworY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgeWVzID0gIiRmYXN0X2luc3RhbGwiOyB0aGVuCisJICAgICAgY2F0IDw8RU9GCitjb25zdCBjaGFyICogVEFSR0VUX1BST0dSQU1fTkFNRSA9ICJsdC0kb3V0cHV0bmFtZSI7IC8qIGhvcGVmdWxseSwgbm8gLmV4ZSAqLworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gIiRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZmkKKworCisJICAgIGNhdCA8PCJFT0YiCisKKyNkZWZpbmUgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggICAgICAgICAiLS1sdC0iCisKK3N0YXRpYyBjb25zdCBjaGFyICpsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYOworc3RhdGljIGNvbnN0IGNoYXIgKmR1bXBzY3JpcHRfb3B0ICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImR1bXAtc2NyaXB0IjsKK3N0YXRpYyBjb25zdCBjaGFyICpkZWJ1Z19vcHQgICAgICAgICAgICA9IExUV1JBUFBFUl9PUFRJT05fUFJFRklYICJkZWJ1ZyI7CisKK2ludAorbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgY2hhciAqKm5ld2FyZ3o7CisgIGludCAgbmV3YXJnYzsKKyAgY2hhciAqdG1wX3BhdGhzcGVjOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfcGF0aDsKKyAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX25hbWU7CisgIGNoYXIgKnRhcmdldF9uYW1lOworICBjaGFyICpsdF9hcmd2X3plcm87CisgIGludCBydmFsID0gMTI3OworCisgIGludCBpOworCisgIHByb2dyYW1fbmFtZSA9IChjaGFyICopIHhzdHJkdXAgKGJhc2VfbmFtZSAoYXJndlswXSkpOworICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCAoc2l6ZV90KSBhcmdjICsgMSk7CisKKyAgLyogdmVyeSBzaW1wbGUgYXJnIHBhcnNpbmc7IGRvbid0IHdhbnQgdG8gcmVseSBvbiBnZXRvcHQKKyAgICogYWxzbywgY29weSBhbGwgbm9uIGN3cmFwcGVyIG9wdGlvbnMgdG8gbmV3YXJneiwgZXhjZXB0CisgICAqIGFyZ3pbMF0sIHdoaWNoIGlzIGhhbmRsZWQgZGlmZmVyZW50bHkKKyAgICovCisgIG5ld2FyZ2M9MDsKKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICB7CisgICAgICBpZiAoU1RSRVEgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSkKKwl7CitFT0YKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICptaW5ndyogfCAqY3lnd2luKiApCisJCSMgbWFrZSBzdGRvdXQgdXNlICJ1bml4IiBsaW5lIGVuZGluZ3MKKwkJZWNobyAiICAgICAgICAgIHNldG1vZGUoMSxfT19CSU5BUlkpOyIKKwkJOzsKKwkgICAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKwkgIGx0X2R1bXBfc2NyaXB0IChzdGRvdXQpOworCSAgcmV0dXJuIDA7CisJfQorICAgICAgaWYgKFNUUkVRIChhcmd2W2ldLCBkZWJ1Z19vcHQpKQorCXsKKyAgICAgICAgICBsdF9kZWJ1ZyA9IDE7CisgICAgICAgICAgY29udGludWU7CisJfQorICAgICAgaWYgKFNUUkVRIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCisgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKyAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgInVucmVjb2duaXplZCAlcyBvcHRpb246ICclcyciLAorICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7CisgICAgICAgIH0KKyAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKyAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOworICAgIH0KKyAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKworRU9GCisJICAgIGNhdCA8PEVPRgorICAvKiBUaGUgR05VIGJhbm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJyb3IgZGVidWcgbWVzc2FnZSAqLworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAibGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OXG4iKTsKK0VPRgorCSAgICBjYXQgPDwiRU9GIgorICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIGFyZ3ZbMF06ICVzXG4iLCBhcmd2WzBdKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBwcm9ncmFtX25hbWU6ICVzXG4iLCBwcm9ncmFtX25hbWUpOworCisgIHRtcF9wYXRoc3BlYyA9IGZpbmRfZXhlY3V0YWJsZSAoYXJndlswXSk7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiY291bGRuJ3QgZmluZCAlcyIsIGFyZ3ZbMF0pOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGJlZm9yZSBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisJCSAgdG1wX3BhdGhzcGVjKTsKKworICBhY3R1YWxfY3dyYXBwZXJfcGF0aCA9IGNoYXNlX3N5bWxpbmtzICh0bXBfcGF0aHNwZWMpOworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorICAgICAgICAgICAgICAgICAgIihtYWluKSBmb3VuZCBleGUgKGFmdGVyIHN5bWxpbmsgY2hhc2UpIGF0OiAlc1xuIiwKKwkJICBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworCisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChhY3R1YWxfY3dyYXBwZXJfcGF0aCkpOworICBzdHJlbmR6YXAgKGFjdHVhbF9jd3JhcHBlcl9wYXRoLCBhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisKKyAgLyogd3JhcHBlciBuYW1lIHRyYW5zZm9ybXMgKi8KKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFIChhY3R1YWxfY3dyYXBwZXJfbmFtZSk7CisgIGFjdHVhbF9jd3JhcHBlcl9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIC8qIHRhcmdldF9uYW1lIHRyYW5zZm9ybXMgLS0gdXNlIGFjdHVhbCB0YXJnZXQgcHJvZ3JhbSBuYW1lOyBtaWdodCBoYXZlIGx0LSBwcmVmaXggKi8KKyAgdGFyZ2V0X25hbWUgPSB4c3RyZHVwIChiYXNlX25hbWUgKFRBUkdFVF9QUk9HUkFNX05BTUUpKTsKKyAgc3RyZW5kemFwICh0YXJnZXRfbmFtZSwgIi5leGUiKTsKKyAgdG1wX3BhdGhzcGVjID0gbHRfZXh0ZW5kX3N0ciAodGFyZ2V0X25hbWUsICIuZXhlIiwgMSk7CisgIFhGUkVFICh0YXJnZXRfbmFtZSk7CisgIHRhcmdldF9uYW1lID0gdG1wX3BhdGhzcGVjOworICB0bXBfcGF0aHNwZWMgPSAwOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihtYWluKSBsaWJ0b29sIHRhcmdldCBuYW1lOiAlc1xuIiwKKwkJICB0YXJnZXRfbmFtZSk7CitFT0YKKworCSAgICBjYXQgPDxFT0YKKyAgbmV3YXJnelswXSA9CisgICAgWE1BTExPQyAoY2hhciwgKHN0cmxlbiAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpICsKKwkJICAgIHN0cmxlbiAoIiRvYmpkaXIiKSArIDEgKyBzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9uYW1lKSArIDEpKTsKKyAgc3RyY3B5IChuZXdhcmd6WzBdLCBhY3R1YWxfY3dyYXBwZXJfcGF0aCk7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIiRvYmpkaXIiKTsKKyAgc3RyY2F0IChuZXdhcmd6WzBdLCAiLyIpOworRU9GCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgLyogc3RvcCBoZXJlLCBhbmQgY29weSBzbyB3ZSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgdHdpY2UgKi8KKyAgdG1wX3BhdGhzcGVjID0geHN0cmR1cCAobmV3YXJnelswXSk7CisKKyAgLyogZG8gTk9UIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSwgc28gdXNlIGFjdHVhbF9jd3JhcHBlcl9uYW1lICovCisgIHN0cmNhdCAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIERPIHdhbnQgdGhlIGx0LSBwcmVmaXggaGVyZSBpZiBpdCBleGlzdHMsIHNvIHVzZSB0YXJnZXRfbmFtZSAqLworICBsdF9hcmd2X3plcm8gPSBsdF9leHRlbmRfc3RyICh0bXBfcGF0aHNwZWMsIHRhcmdldF9uYW1lLCAxKTsKKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisgIHRtcF9wYXRoc3BlYyA9IE5VTEw7CitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCSAgICBjYXQgPDwiRU9GIgorICB7CisgICAgY2hhciogcDsKKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKG5ld2FyZ3pbMF0sICdcXCcpKSAhPSBOVUxMKQorICAgICAgeworCSpwID0gJy8nOworICAgICAgfQorICAgIHdoaWxlICgocCA9IHN0cmNociAobHRfYXJndl96ZXJvLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgfQorRU9GCisJICAgIDs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorICBYRlJFRSAodGFyZ2V0X25hbWUpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIGx0X3NldGVudiAoIkJJTl9TSCIsICJ4cGc0Iik7IC8qIGZvciBUcnU2NCAqLworICBsdF9zZXRlbnYgKCJEVUFMQ0FTRSIsICIxIik7ICAvKiBmb3IgTVNLIHNoICovCisgIC8qIFVwZGF0ZSB0aGUgRExMIHNlYXJjaHBhdGguICBFWEVfUEFUSF9WQUxVRSAoJGRsbHNlYXJjaHBhdGgpIG11c3QKKyAgICAgYmUgcHJlcGVuZGVkIGJlZm9yZSAodGhhdCBpcywgYXBwZWFyIGFmdGVyKSBMSUJfUEFUSF9WQUxVRSAoJHRlbXBfcnBhdGgpCisgICAgIGJlY2F1c2Ugb24gV2luZG93cywgYm90aCAqX1ZBUk5BTUVzIGFyZSBQQVRIIGJ1dCB1bmluc3RhbGxlZAorICAgICBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LiAqLworICBsdF91cGRhdGVfZXhlX3BhdGggKEVYRV9QQVRIX1ZBUk5BTUUsIEVYRV9QQVRIX1ZBTFVFKTsKKyAgbHRfdXBkYXRlX2xpYl9wYXRoIChMSUJfUEFUSF9WQVJOQU1FLCBMSUJfUEFUSF9WQUxVRSk7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBsdF9hcmd2X3plcm86ICVzXG4iLAorCQkgIG5vbm51bGwgKGx0X2FyZ3ZfemVybykpOworICBmb3IgKGkgPSAwOyBpIDwgbmV3YXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbmV3YXJnelslZF06ICVzXG4iLAorCQkgICAgICBpLCBub25udWxsIChuZXdhcmd6W2ldKSk7CisgICAgfQorCitFT0YKKworCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorICAvKiBleGVjdiBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgb24gbWluZ3cgYXMgZXhwZWN0ZWQgb24gdW5peCAqLworICBuZXdhcmd6ID0gcHJlcGFyZV9zcGF3biAobmV3YXJneik7CisgIHJ2YWwgPSAoaW50KSBfc3Bhd252IChfUF9XQUlULCBsdF9hcmd2X3plcm8sIChjb25zdCBjaGFyICogY29uc3QgKikgbmV3YXJneik7CisgIGlmIChydmFsID09IC0xKQorICAgIHsKKyAgICAgIC8qIGZhaWxlZCB0byBzdGFydCBwcm9jZXNzICovCisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgICAiKG1haW4pIGZhaWxlZCB0byBsYXVuY2ggdGFyZ2V0IFwiJXNcIjogJXNcbiIsCisJCSAgICAgIGx0X2FyZ3ZfemVybywgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworICAgICAgcmV0dXJuIDEyNzsKKyAgICB9CisgIHJldHVybiBydmFsOworRU9GCisJCTs7CisJICAgICAgKikKKwkJY2F0IDw8IkVPRiIKKyAgZXhlY3YgKGx0X2FyZ3ZfemVybywgbmV3YXJneik7CisgIHJldHVybiBydmFsOyAvKiA9MTI3LCBidXQgYXZvaWRzIHVudXNlZCB2YXJpYWJsZSB3YXJuaW5nICovCitFT0YKKwkJOzsKKwkgICAgZXNhYworCisJICAgIGNhdCA8PCJFT0YiCit9CisKK3ZvaWQgKgoreG1hbGxvYyAoc2l6ZV90IG51bSkKK3sKKyAgdm9pZCAqcCA9ICh2b2lkICopIG1hbGxvYyAobnVtKTsKKyAgaWYgKCFwKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJtZW1vcnkgZXhoYXVzdGVkIik7CisKKyAgcmV0dXJuIHA7Cit9CisKK2NoYXIgKgoreHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwKKwkJCSAgc3RyaW5nKSA6IE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKgorYmFzZV9uYW1lIChjb25zdCBjaGFyICpuYW1lKQoreworICBjb25zdCBjaGFyICpiYXNlOworCisjaWYgZGVmaW5lZCBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorICAvKiBTa2lwIG92ZXIgdGhlIGRpc2sgbmFtZSBpbiBNU0RPUyBwYXRobmFtZXMuICovCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgbmFtZVswXSkgJiYgbmFtZVsxXSA9PSAnOicpCisgICAgbmFtZSArPSAyOworI2VuZGlmCisKKyAgZm9yIChiYXNlID0gbmFtZTsgKm5hbWU7IG5hbWUrKykKKyAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAoKm5hbWUpKQorICAgICAgYmFzZSA9IG5hbWUgKyAxOworICByZXR1cm4gYmFzZTsKK30KKworaW50CitjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGNoZWNrX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmICgoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgICAgJiYgKHN0LnN0X21vZGUgJiAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKSkpCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworaW50CittYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIGludCBydmFsID0gMDsKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWtlX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmIChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgeworICAgICAgcnZhbCA9IGNobW9kIChwYXRoLCBzdC5zdF9tb2RlIHwgU19JWE9USCB8IFNfSVhHUlAgfCBTX0lYVVNSKTsKKyAgICB9CisgIHJldHVybiBydmFsOworfQorCisvKiBTZWFyY2hlcyBmb3IgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgd3JhcHBlci4gIFJldHVybnMKKyAgIG5ld2x5IGFsbG9jYXRlZCBmdWxsIHBhdGggbmFtZSBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UKKyAgIERvZXMgbm90IGNoYXNlIHN5bWxpbmtzLCBldmVuIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlbS4KKyovCitjaGFyICoKK2ZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKK3sKKyAgaW50IGhhc19zbGFzaCA9IDA7CisgIGNvbnN0IGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKnBfbmV4dDsKKyAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCisgIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKKyAgc2l6ZV90IHRtcF9sZW47CisgIGNoYXIgKmNvbmNhdF9uYW1lOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoZmluZF9leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAod3JhcHBlcikpOworCisgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogQWJzb2x1dGUgcGF0aD8gKi8KKyNpZiBkZWZpbmVkIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgd3JhcHBlclswXSkgJiYgd3JhcHBlclsxXSA9PSAnOicpCisgICAgeworICAgICAgY29uY2F0X25hbWUgPSB4c3RyZHVwICh3cmFwcGVyKTsKKyAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJcmV0dXJuIGNvbmNhdF9uYW1lOworICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisjZW5kaWYKKyAgICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICh3cmFwcGVyWzBdKSkKKwl7CisJICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworCSAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwkgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworCSAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwl9CisjaWYgZGVmaW5lZCBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQorICAgIH0KKyNlbmRpZgorCisgIGZvciAocCA9IHdyYXBwZXI7ICpwOyBwKyspCisgICAgaWYgKCpwID09ICcvJykKKyAgICAgIHsKKwloYXNfc2xhc2ggPSAxOworCWJyZWFrOworICAgICAgfQorICBpZiAoIWhhc19zbGFzaCkKKyAgICB7CisgICAgICAvKiBubyBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLworICAgICAgY29uc3QgY2hhciAqcGF0aCA9IGdldGVudiAoIlBBVEgiKTsKKyAgICAgIGlmIChwYXRoICE9IE5VTEwpCisJeworCSAgZm9yIChwID0gcGF0aDsgKnA7IHAgPSBwX25leHQpCisJICAgIHsKKwkgICAgICBjb25zdCBjaGFyICpxOworCSAgICAgIHNpemVfdCBwX2xlbjsKKwkgICAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQorCQlpZiAoSVNfUEFUSF9TRVBBUkFUT1IgKCpxKSkKKwkJICBicmVhazsKKwkgICAgICBwX2xlbiA9IChzaXplX3QpIChxIC0gcCk7CisJICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOworCSAgICAgIGlmIChwX2xlbiA9PSAwKQorCQl7CisJCSAgLyogZW1wdHkgcGF0aDogY3VycmVudCBkaXJlY3RvcnkgKi8KKwkJICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisJCSAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ubnVsbCAoc3RyZXJyb3IgKGVycm5vKSkpOworCQkgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVt0bXBfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgY29uY2F0X25hbWUgPQorCQkgICAgWE1BTExPQyAoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuICh3cmFwcGVyKSArIDEpOworCQkgIG1lbWNweSAoY29uY2F0X25hbWUsIHAsIHBfbGVuKTsKKwkJICBjb25jYXRfbmFtZVtwX2xlbl0gPSAnLyc7CisJCSAgc3RyY3B5IChjb25jYXRfbmFtZSArIHBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCQlyZXR1cm4gY29uY2F0X25hbWU7CisJICAgICAgWEZSRUUgKGNvbmNhdF9uYW1lKTsKKwkgICAgfQorCX0KKyAgICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCisgICAgfQorICAvKiBSZWxhdGl2ZSBwYXRoIHwgbm90IGZvdW5kIGluIHBhdGg6IHByZXBlbmQgY3dkICovCisgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAiZ2V0Y3dkIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisgIHRtcF9sZW4gPSBzdHJsZW4gKHRtcCk7CisgIGNvbmNhdF9uYW1lID0gWE1BTExPQyAoY2hhciwgdG1wX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCisgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICBYRlJFRSAoY29uY2F0X25hbWUpOworICByZXR1cm4gTlVMTDsKK30KKworY2hhciAqCitjaGFzZV9zeW1saW5rcyAoY29uc3QgY2hhciAqcGF0aHNwZWMpCit7CisjaWZuZGVmIFNfSVNMTksKKyAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyNlbHNlCisgIGNoYXIgYnVmW0xUX1BBVEhNQVhdOworICBzdHJ1Y3Qgc3RhdCBzOworICBjaGFyICp0bXBfcGF0aHNwZWMgPSB4c3RyZHVwIChwYXRoc3BlYyk7CisgIGNoYXIgKnA7CisgIGludCBoYXNfc3ltbGlua3MgPSAwOworICB3aGlsZSAoc3RybGVuICh0bXBfcGF0aHNwZWMpICYmICFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICAgImNoZWNraW5nIHBhdGggY29tcG9uZW50IGZvciBzeW1saW5rczogJXNcbiIsCisJCSAgICAgIHRtcF9wYXRoc3BlYyk7CisgICAgICBpZiAobHN0YXQgKHRtcF9wYXRoc3BlYywgJnMpID09IDApCisJeworCSAgaWYgKFNfSVNMTksgKHMuc3RfbW9kZSkgIT0gMCkKKwkgICAgeworCSAgICAgIGhhc19zeW1saW5rcyA9IDE7CisJICAgICAgYnJlYWs7CisJICAgIH0KKworCSAgLyogc2VhcmNoIGJhY2t3YXJkcyBmb3IgbGFzdCBESVJfU0VQQVJBVE9SICovCisJICBwID0gdG1wX3BhdGhzcGVjICsgc3RybGVuICh0bXBfcGF0aHNwZWMpIC0gMTsKKwkgIHdoaWxlICgocCA+IHRtcF9wYXRoc3BlYykgJiYgKCFJU19ESVJfU0VQQVJBVE9SICgqcCkpKQorCSAgICBwLS07CisJICBpZiAoKHAgPT0gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHsKKwkgICAgICAvKiBubyBtb3JlIERJUl9TRVBBUkFUT1JTIGxlZnQgKi8KKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgKnAgPSAnXDAnOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgImVycm9yIGFjY2Vzc2luZyBmaWxlIFwiJXNcIjogJXMiLAorCQkgICAgdG1wX3BhdGhzcGVjLCBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisJfQorICAgIH0KKyAgWEZSRUUgKHRtcF9wYXRoc3BlYyk7CisKKyAgaWYgKCFoYXNfc3ltbGlua3MpCisgICAgeworICAgICAgcmV0dXJuIHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgICB9CisKKyAgdG1wX3BhdGhzcGVjID0gcmVhbHBhdGggKHBhdGhzcGVjLCBidWYpOworICBpZiAodG1wX3BhdGhzcGVjID09IDApCisgICAgeworICAgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJImNvdWxkIG5vdCBmb2xsb3cgc3ltbGlua3MgZm9yICVzIiwgcGF0aHNwZWMpOworICAgIH0KKyAgcmV0dXJuIHhzdHJkdXAgKHRtcF9wYXRoc3BlYyk7CisjZW5kaWYKK30KKworY2hhciAqCitzdHJlbmR6YXAgKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworICBzaXplX3QgbGVuLCBwYXRsZW47CisKKyAgYXNzZXJ0IChzdHIgIT0gTlVMTCk7CisgIGFzc2VydCAocGF0ICE9IE5VTEwpOworCisgIGxlbiA9IHN0cmxlbiAoc3RyKTsKKyAgcGF0bGVuID0gc3RybGVuIChwYXQpOworCisgIGlmIChwYXRsZW4gPD0gbGVuKQorICAgIHsKKyAgICAgIHN0ciArPSBsZW4gLSBwYXRsZW47CisgICAgICBpZiAoU1RSRVEgKHN0ciwgcGF0KSkKKwkqc3RyID0gJ1wwJzsKKyAgICB9CisgIHJldHVybiBzdHI7Cit9CisKK3ZvaWQKK2x0X2RlYnVncHJpbnRmIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisgIHZhX2xpc3QgYXJnczsKKyAgaWYgKGx0X2RlYnVnKQorICAgIHsKKyAgICAgICh2b2lkKSBmcHJpbnRmIChzdGRlcnIsICIlczolczolZDogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lKTsKKyAgICAgIHZhX3N0YXJ0IChhcmdzLCBmbXQpOworICAgICAgKHZvaWQpIHZmcHJpbnRmIChzdGRlcnIsIGZtdCwgYXJncyk7CisgICAgICB2YV9lbmQgKGFyZ3MpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK2x0X2Vycm9yX2NvcmUgKGludCBleGl0X3N0YXR1cywgY29uc3QgY2hhciAqZmlsZSwKKwkgICAgICAgaW50IGxpbmUsIGNvbnN0IGNoYXIgKm1vZGUsCisJICAgICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHZhX2xpc3QgYXApCit7CisgIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAlczogIiwgcHJvZ3JhbV9uYW1lLCBmaWxlLCBsaW5lLCBtb2RlKTsKKyAgdmZwcmludGYgKHN0ZGVyciwgbWVzc2FnZSwgYXApOworICBmcHJpbnRmIChzdGRlcnIsICIuXG4iKTsKKworICBpZiAoZXhpdF9zdGF0dXMgPj0gMCkKKyAgICBleGl0IChleGl0X3N0YXR1cyk7Cit9CisKK3ZvaWQKK2x0X2ZhdGFsIChjb25zdCBjaGFyICpmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQoreworICB2YV9saXN0IGFwOworICB2YV9zdGFydCAoYXAsIG1lc3NhZ2UpOworICBsdF9lcnJvcl9jb3JlIChFWElUX0ZBSUxVUkUsIGZpbGUsIGxpbmUsICJGQVRBTCIsIG1lc3NhZ2UsIGFwKTsKKyAgdmFfZW5kIChhcCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK25vbm51bGwgKGNvbnN0IGNoYXIgKnMpCit7CisgIHJldHVybiBzID8gcyA6ICIobnVsbCkiOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitub25lbXB0eSAoY29uc3QgY2hhciAqcykKK3sKKyAgcmV0dXJuIChzICYmICEqcykgPyAiKGVtcHR5KSIgOiBub25udWxsIChzKTsKK30KKwordm9pZAorbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAiKGx0X3NldGVudikgc2V0dGluZyAnJXMnIHRvICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKyAgeworI2lmZGVmIEhBVkVfU0VURU5WCisgICAgLyogYWx3YXlzIG1ha2UgYSBjb3B5LCBmb3IgY29uc2lzdGVuY3kgd2l0aCAhSEFWRV9TRVRFTlYgKi8KKyAgICBjaGFyICpzdHIgPSB4c3RyZHVwICh2YWx1ZSk7CisgICAgc2V0ZW52IChuYW1lLCBzdHIsIDEpOworI2Vsc2UKKyAgICBzaXplX3QgbGVuID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4gKHZhbHVlKSArIDE7CisgICAgY2hhciAqc3RyID0gWE1BTExPQyAoY2hhciwgbGVuKTsKKyAgICBzcHJpbnRmIChzdHIsICIlcz0lcyIsIG5hbWUsIHZhbHVlKTsKKyAgICBpZiAocHV0ZW52IChzdHIpICE9IEVYSVRfU1VDQ0VTUykKKyAgICAgIHsKKyAgICAgICAgWEZSRUUgKHN0cik7CisgICAgICB9CisjZW5kaWYKKyAgfQorfQorCitjaGFyICoKK2x0X2V4dGVuZF9zdHIgKGNvbnN0IGNoYXIgKm9yaWdfdmFsdWUsIGNvbnN0IGNoYXIgKmFkZCwgaW50IHRvX2VuZCkKK3sKKyAgY2hhciAqbmV3X3ZhbHVlOworICBpZiAob3JpZ192YWx1ZSAmJiAqb3JpZ192YWx1ZSkKKyAgICB7CisgICAgICBzaXplX3Qgb3JpZ192YWx1ZV9sZW4gPSBzdHJsZW4gKG9yaWdfdmFsdWUpOworICAgICAgc2l6ZV90IGFkZF9sZW4gPSBzdHJsZW4gKGFkZCk7CisgICAgICBuZXdfdmFsdWUgPSBYTUFMTE9DIChjaGFyLCBhZGRfbGVuICsgb3JpZ192YWx1ZV9sZW4gKyAxKTsKKyAgICAgIGlmICh0b19lbmQpCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgb3JpZ192YWx1ZSk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBvcmlnX3ZhbHVlX2xlbiwgYWRkKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUsIGFkZCk7CisgICAgICAgICAgc3RyY3B5IChuZXdfdmFsdWUgKyBhZGRfbGVuLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIG5ld192YWx1ZSA9IHhzdHJkdXAgKGFkZCk7CisgICAgfQorICByZXR1cm4gbmV3X3ZhbHVlOworfQorCit2b2lkCitsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfdXBkYXRlX2V4ZV9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IGNvcGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGggIycgKi8KKyAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSk7CisgICAgICB3aGlsZSAoKGxlbiA+IDApICYmIElTX1BBVEhfU0VQQVJBVE9SIChuZXdfdmFsdWVbbGVuLTFdKSkKKyAgICAgICAgeworICAgICAgICAgIG5ld192YWx1ZVstLWxlbl0gPSAnXDAnOworICAgICAgICB9CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9saWJfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF91cGRhdGVfbGliX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICBsdF9zZXRlbnYgKG5hbWUsIG5ld192YWx1ZSk7CisgICAgICBYRlJFRSAobmV3X3ZhbHVlKTsKKyAgICB9Cit9CisKK0VPRgorCSAgICBjYXNlICRob3N0X29zIGluCisJICAgICAgbWluZ3cqKQorCQljYXQgPDwiRU9GIgorCisvKiBQcmVwYXJlcyBhbiBhcmd1bWVudCB2ZWN0b3IgYmVmb3JlIGNhbGxpbmcgc3Bhd24oKS4KKyAgIE5vdGUgdGhhdCBzcGF3bigpIGRvZXMgbm90IGJ5IGl0c2VsZiBjYWxsIHRoZSBjb21tYW5kIGludGVycHJldGVyCisgICAgIChnZXRlbnYgKCJDT01TUEVDIikgIT0gTlVMTCA/IGdldGVudiAoIkNPTVNQRUMiKSA6CisgICAgICAoeyBPU1ZFUlNJT05JTkZPIHY7IHYuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZihPU1ZFUlNJT05JTkZPKTsKKyAgICAgICAgIEdldFZlcnNpb25FeCgmdik7CisgICAgICAgICB2LmR3UGxhdGZvcm1JZCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQ7CisgICAgICB9KSA/ICJjbWQuZXhlIiA6ICJjb21tYW5kLmNvbSIpLgorICAgSW5zdGVhZCBpdCBzaW1wbHkgY29uY2F0ZW5hdGVzIHRoZSBhcmd1bWVudHMsIHNlcGFyYXRlZCBieSAnICcsIGFuZCBjYWxscworICAgQ3JlYXRlUHJvY2VzcygpLiAgV2UgbXVzdCBxdW90ZSB0aGUgYXJndW1lbnRzIHNpbmNlIFdpbjMyIENyZWF0ZVByb2Nlc3MoKQorICAgaW50ZXJwcmV0cyBjaGFyYWN0ZXJzIGxpa2UgJyAnLCAnXHQnLCAnXFwnLCAnIicgKGJ1dCBub3QgJzwnIGFuZCAnPicpIGluIGEKKyAgIHNwZWNpYWwgd2F5OgorICAgLSBTcGFjZSBhbmQgdGFiIGFyZSBpbnRlcnByZXRlZCBhcyBkZWxpbWl0ZXJzLiBUaGV5IGFyZSBub3QgdHJlYXRlZCBhcworICAgICBkZWxpbWl0ZXJzIGlmIHRoZXkgYXJlIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlczogIi4uLiIuCisgICAtIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFyZSByZW1vdmVkIGZyb20gdGhlIGlucHV0LiBUaGVpciBvbmx5IGVmZmVjdCBpcworICAgICB0aGF0IHdpdGhpbiBkb3VibGUgcXVvdGVzLCBzcGFjZSBhbmQgdGFiIGFyZSB0cmVhdGVkIGxpa2Ugbm9ybWFsCisgICAgIGNoYXJhY3RlcnMuCisgICAtIEJhY2tzbGFzaGVzIG5vdCBmb2xsb3dlZCBieSBkb3VibGUgcXVvdGVzIGFyZSBub3Qgc3BlY2lhbC4KKyAgIC0gQnV0IDIqbisxIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIGJlY29tZQorICAgICBuIGJhY2tzbGFzaGVzIGZvbGxvd2VkIGJ5IGEgZG91YmxlIHF1b3RlIChuID49IDApOgorICAgICAgIFwiIC0+ICIKKyAgICAgICBcXFwiIC0+IFwiCisgICAgICAgXFxcXFwiIC0+IFxcIgorICovCisjZGVmaW5lIFNIRUxMX1NQRUNJQUxfQ0hBUlMgIlwiXFwgXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIKKyNkZWZpbmUgU0hFTExfU1BBQ0VfQ0hBUlMgIiBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3IgorY2hhciAqKgorcHJlcGFyZV9zcGF3biAoY2hhciAqKmFyZ3YpCit7CisgIHNpemVfdCBhcmdjOworICBjaGFyICoqbmV3X2FyZ3Y7CisgIHNpemVfdCBpOworCisgIC8qIENvdW50IG51bWJlciBvZiBhcmd1bWVudHMuICAqLworICBmb3IgKGFyZ2MgPSAwOyBhcmd2W2FyZ2NdICE9IE5VTEw7IGFyZ2MrKykKKyAgICA7CisKKyAgLyogQWxsb2NhdGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisgIG5ld19hcmd2ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisKKyAgLyogUHV0IHF1b3RlZCBhcmd1bWVudHMgaW50byB0aGUgbmV3IGFyZ3VtZW50IHZlY3Rvci4gICovCisgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgY29uc3QgY2hhciAqc3RyaW5nID0gYXJndltpXTsKKworICAgICAgaWYgKHN0cmluZ1swXSA9PSAnXDAnKQorCW5ld19hcmd2W2ldID0geHN0cmR1cCAoIlwiXCIiKTsKKyAgICAgIGVsc2UgaWYgKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BFQ0lBTF9DSEFSUykgIT0gTlVMTCkKKwl7CisJICBpbnQgcXVvdGVfYXJvdW5kID0gKHN0cnBicmsgKHN0cmluZywgU0hFTExfU1BBQ0VfQ0hBUlMpICE9IE5VTEwpOworCSAgc2l6ZV90IGxlbmd0aDsKKwkgIHVuc2lnbmVkIGludCBiYWNrc2xhc2hlczsKKwkgIGNvbnN0IGNoYXIgKnM7CisJICBjaGFyICpxdW90ZWRfc3RyaW5nOworCSAgY2hhciAqcDsKKworCSAgbGVuZ3RoID0gMDsKKwkgIGJhY2tzbGFzaGVzID0gMDsKKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgIGxlbmd0aCsrOworCSAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCisJICAgIHsKKwkgICAgICBjaGFyIGMgPSAqczsKKwkgICAgICBpZiAoYyA9PSAnIicpCisJCWxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7CisJICAgICAgbGVuZ3RoKys7CisJICAgICAgaWYgKGMgPT0gJ1xcJykKKwkJYmFja3NsYXNoZXMrKzsKKwkgICAgICBlbHNlCisJCWJhY2tzbGFzaGVzID0gMDsKKwkgICAgfQorCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgbGVuZ3RoICs9IGJhY2tzbGFzaGVzICsgMTsKKworCSAgcXVvdGVkX3N0cmluZyA9IFhNQUxMT0MgKGNoYXIsIGxlbmd0aCArIDEpOworCisJICBwID0gcXVvdGVkX3N0cmluZzsKKwkgIGJhY2tzbGFzaGVzID0gMDsKKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgICpwKysgPSAnIic7CisJICBmb3IgKHMgPSBzdHJpbmc7ICpzICE9ICdcMCc7IHMrKykKKwkgICAgeworCSAgICAgIGNoYXIgYyA9ICpzOworCSAgICAgIGlmIChjID09ICciJykKKwkJeworCQkgIHVuc2lnbmVkIGludCBqOworCQkgIGZvciAoaiA9IGJhY2tzbGFzaGVzICsgMTsgaiA+IDA7IGotLSkKKwkJICAgICpwKysgPSAnXFwnOworCQl9CisJICAgICAgKnArKyA9IGM7CisJICAgICAgaWYgKGMgPT0gJ1xcJykKKwkJYmFja3NsYXNoZXMrKzsKKwkgICAgICBlbHNlCisJCWJhY2tzbGFzaGVzID0gMDsKKwkgICAgfQorCSAgaWYgKHF1b3RlX2Fyb3VuZCkKKwkgICAgeworCSAgICAgIHVuc2lnbmVkIGludCBqOworCSAgICAgIGZvciAoaiA9IGJhY2tzbGFzaGVzOyBqID4gMDsgai0tKQorCQkqcCsrID0gJ1xcJzsKKwkgICAgICAqcCsrID0gJyInOworCSAgICB9CisJICAqcCA9ICdcMCc7CisKKwkgIG5ld19hcmd2W2ldID0gcXVvdGVkX3N0cmluZzsKKwl9CisgICAgICBlbHNlCisJbmV3X2FyZ3ZbaV0gPSAoY2hhciAqKSBzdHJpbmc7CisgICAgfQorICBuZXdfYXJndlthcmdjXSA9IE5VTEw7CisKKyAgcmV0dXJuIG5ld19hcmd2OworfQorRU9GCisJCTs7CisJICAgIGVzYWMKKworICAgICAgICAgICAgY2F0IDw8IkVPRiIKK3ZvaWQgbHRfZHVtcF9zY3JpcHQgKEZJTEUqIGYpCit7CitFT0YKKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgeWVzIHwKKwkgICAgICAkU0VEIC1uIC1lICcKK3MvXlwoLlx7NzlcfVwpXCguLipcKS9cMVwKK1wyLworaAorcy9cKFtcXCJdXCkvXFxcMS9nCitzLyQvXFxuLworcy9cKFteXG5dKlwpLiovICBmcHV0cyAoIlwxIiwgZik7L3AKK2cKK0QnCisgICAgICAgICAgICBjYXQgPDwiRU9GIgorfQorRU9GCit9CisjIGVuZDogZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworCisjIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wIEFSRworIyBUcnVlIGlmIEFSRyBpcyBhbiBpbXBvcnQgbGliLCBhcyBpbmRpY2F0ZWQgYnkgJGZpbGVfbWFnaWNfY21kCitmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgYGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCQxXCIgMj4vZGV2L251bGwgfCAkU0VEIC1lIDEwcWAgaW4KKyAgICAqaW1wb3J0KikgOiA7OworICAgICopIGZhbHNlIDs7CisgICAgZXNhYworfQorCisjIGZ1bmNfc3VuY2NfY3N0ZF9hYmkKKyMgISFPTkxZIENBTEwgVEhJUyBGT1IgU1VOIENDIEFGVEVSICRjb21waWxlX2NvbW1hbmQgSVMgRlVMTFkgRVhQQU5ERUQhIQorIyBTZXZlcmFsIGNvbXBpbGVyIGZsYWdzIHNlbGVjdCBhbiBBQkkgdGhhdCBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUKKyMgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nIGl0IGlmIGFueSBhcmUgaW4gQ1hYRkxBR1MuCitmdW5jX3N1bmNjX2NzdGRfYWJpICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgY2FzZSAiICRjb21waWxlX2NvbW1hbmQgIiBpbgorICAgICoiIC1jb21wYXQ9ZyAiKnwqXCAtc3RkPWMrK1swLTldWzAtOV1cICp8KiIgLWxpYnJhcnk9c3RkY3h4NCAiKnwqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHN1bmNjX3VzZV9jc3RkX2FiaT1ubworICAgICAgOzsKKyAgICAqKQorICAgICAgc3VuY2NfdXNlX2NzdGRfYWJpPXllcworICAgICAgOzsKKyAgICBlc2FjCit9CisKKyMgZnVuY19tb2RlX2xpbmsgYXJnLi4uCitmdW5jX21vZGVfbGluayAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgJGhvc3QgaW4KKyAgICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorICAgICAgIyBJdCBpcyBpbXBvc3NpYmxlIHRvIGxpbmsgYSBkbGwgd2l0aG91dCB0aGlzIHNldHRpbmcsIGFuZAorICAgICAgIyB3ZSBzaG91bGRuJ3QgZm9yY2UgdGhlIG1ha2VmaWxlIG1haW50YWluZXIgdG8gZmlndXJlIG91dAorICAgICAgIyB3aGF0IHN5c3RlbSB3ZSBhcmUgY29tcGlsaW5nIGZvciBpbiBvcmRlciB0byBwYXNzIGFuIGV4dHJhCisgICAgICAjIGZsYWcgZm9yIGV2ZXJ5IGxpYnRvb2wgaW52b2NhdGlvbi4KKyAgICAgICMgYWxsb3dfdW5kZWZpbmVkPW5vCisKKyAgICAgICMgRklYTUU6IFVuZm9ydHVuYXRlbHksIHRoZXJlIGFyZSBwcm9ibGVtcyB3aXRoIHRoZSBhYm92ZSB3aGVuIHRyeWluZworICAgICAgIyB0byBtYWtlIGEgZGxsIHRoYXQgaGFzIHVuZGVmaW5lZCBzeW1ib2xzLCBpbiB3aGljaCBjYXNlIG5vdAorICAgICAgIyBldmVuIGEgc3RhdGljIGxpYnJhcnkgaXMgYnVpbHQuICBGb3Igbm93LCB3ZSBuZWVkIHRvIHNwZWNpZnkKKyAgICAgICMgLW5vLXVuZGVmaW5lZCBvbiB0aGUgbGlidG9vbCBsaW5rIGxpbmUgd2hlbiB3ZSBjYW4gYmUgY2VydGFpbgorICAgICAgIyB0aGF0IGFsbCBzeW1ib2xzIGFyZSBzYXRpc2ZpZWQsIG90aGVyd2lzZSB3ZSBnZXQgYSBzdGF0aWMgbGlicmFyeS4KKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGFsbG93X3VuZGVmaW5lZD15ZXMKKyAgICAgIDs7CisgICAgZXNhYworICAgIGxpYnRvb2xfYXJncz0kbm9ub3B0CisgICAgYmFzZV9jb21waWxlPSIkbm9ub3B0ICRAIgorICAgIGNvbXBpbGVfY29tbWFuZD0kbm9ub3B0CisgICAgZmluYWxpemVfY29tbWFuZD0kbm9ub3B0CisKKyAgICBjb21waWxlX3JwYXRoPQorICAgIGZpbmFsaXplX3JwYXRoPQorICAgIGNvbXBpbGVfc2hsaWJwYXRoPQorICAgIGZpbmFsaXplX3NobGlicGF0aD0KKyAgICBjb252ZW5pZW5jZT0KKyAgICBvbGRfY29udmVuaWVuY2U9CisgICAgZGVwbGlicz0KKyAgICBvbGRfZGVwbGlicz0KKyAgICBjb21waWxlcl9mbGFncz0KKyAgICBsaW5rZXJfZmxhZ3M9CisgICAgZGxsc2VhcmNocGF0aD0KKyAgICBsaWJfc2VhcmNoX3BhdGg9YHB3ZGAKKyAgICBpbnN0X3ByZWZpeF9kaXI9CisgICAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9CisKKyAgICBhdm9pZF92ZXJzaW9uPW5vCisgICAgYmluZGlyPQorICAgIGRsZmlsZXM9CisgICAgZGxwcmVmaWxlcz0KKyAgICBkbHNlbGY9bm8KKyAgICBleHBvcnRfZHluYW1pYz1ubworICAgIGV4cG9ydF9zeW1ib2xzPQorICAgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PQorICAgIGdlbmVyYXRlZD0KKyAgICBsaWJvYmpzPQorICAgIGx0bGlicz0KKyAgICBtb2R1bGU9bm8KKyAgICBub19pbnN0YWxsPW5vCisgICAgb2Jqcz0KKyAgICBvczJkbGxuYW1lPQorICAgIG5vbl9waWNfb2JqZWN0cz0KKyAgICBwcmVjaW91c19maWxlc19yZWdleD0KKyAgICBwcmVmZXJfc3RhdGljX2xpYnM9bm8KKyAgICBwcmVsb2FkPWZhbHNlCisgICAgcHJldj0KKyAgICBwcmV2YXJnPQorICAgIHJlbGVhc2U9CisgICAgcnBhdGg9CisgICAgeHJwYXRoPQorICAgIHBlcm1fcnBhdGg9CisgICAgdGVtcF9ycGF0aD0KKyAgICB0aHJlYWRfc2FmZT1ubworICAgIHZpbmZvPQorICAgIHZpbmZvX251bWJlcj1ubworICAgIHdlYWtfbGlicz0KKyAgICBzaW5nbGVfbW9kdWxlPSR3bC1zaW5nbGVfbW9kdWxlCisgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQorCisgICAgIyBXZSBuZWVkIHRvIGtub3cgLXN0YXRpYywgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgZmlsZW5hbWVzLgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgeWVzICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIiBcCisJICAmJiBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbm5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJYnJlYWsKKwk7OworICAgICAgLWFsbC1zdGF0aWMgfCAtc3RhdGljIHwgLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJY2FzZSAkYXJnIGluCisJLWFsbC1zdGF0aWMpCisJICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjb21wbGV0ZSBzdGF0aWMgbGlua2luZyBpcyBpbXBvc3NpYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbiIKKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz15ZXMKKwkgIDs7CisJLXN0YXRpYykKKwkgIGlmIHRlc3QgLXogIiRwaWNfZmxhZyIgJiYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9YnVpbHQKKwkgIDs7CisJLXN0YXRpYy1saWJ0b29sLWxpYnMpCisJICBpZiB0ZXN0IC16ICIkcGljX2ZsYWciICYmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgICBkbG9wZW5fc2VsZj0kZGxvcGVuX3NlbGZfc3RhdGljCisJICBmaQorCSAgcHJlZmVyX3N0YXRpY19saWJzPXllcworCSAgOzsKKwllc2FjCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgU2VlIGlmIG91ciBzaGFyZWQgYXJjaGl2ZXMgZGVwZW5kIG9uIHN0YXRpYyBhcmNoaXZlcy4KKyAgICB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgYnVpbGRfb2xkX2xpYnM9eWVzCisKKyAgICAjIEdvIHRocm91Z2ggdGhlIGFyZ3VtZW50cywgdHJhbnNmb3JtaW5nIHRoZW0gb24gdGhlIHdheS4KKyAgICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgICBhcmc9JDEKKyAgICAgIHNoaWZ0CisgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgICAgcWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnRvb2xfYXJncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKworICAgICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwljYXNlICRwcmV2IGluCisJb3V0cHV0KQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQE9VVFBVVEAiCisJICA7OworCWVzYWMKKworCWNhc2UgJHByZXYgaW4KKwliaW5kaXIpCisJICBiaW5kaXI9JGFyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCWRsZmlsZXN8ZGxwcmVmaWxlcykKKwkgICRwcmVsb2FkIHx8IHsKKwkgICAgIyBBZGQgdGhlIHN5bWJvbCBvYmplY3QgaW50byB0aGUgbGlua2luZyBjb21tYW5kcy4KKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBwcmVsb2FkPToKKwkgIH0KKwkgIGNhc2UgJGFyZyBpbgorCSAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KKwkgIGZvcmNlKQorCSAgICBpZiB0ZXN0IG5vID0gIiRkbHNlbGYiOyB0aGVuCisJICAgICAgZGxzZWxmPW5lZWRsZXNzCisJICAgICAgZXhwb3J0X2R5bmFtaWM9eWVzCisJICAgIGZpCisJICAgIHByZXY9CisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBzZWxmKQorCSAgICBpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCisJICAgICAgZGxzZWxmPXllcworCSAgICBlbGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiIgJiYgdGVzdCB5ZXMgIT0gIiRkbG9wZW5fc2VsZiI7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsc2UKKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGFyZyIKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkYXJnIgorCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlleHBzeW1zKQorCSAgZXhwb3J0X3N5bWJvbHM9JGFyZworCSAgdGVzdCAtZiAiJGFyZyIgXAorCSAgICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJzeW1ib2wgZmlsZSAnJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXhwc3ltc19yZWdleCkKKwkgIGV4cG9ydF9zeW1ib2xzX3JlZ2V4PSRhcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlmcmFtZXdvcmspCisJICBjYXNlICRob3N0IGluCisJICAgICotKi1kYXJ3aW4qKQorCSAgICAgIGNhc2UgIiRkZXBsaWJzICIgaW4KKwkJKiIgJHFhcmcubHRmcmFtZXdvcmsgIiopIDs7CisJCSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkcWFyZy5sdGZyYW1ld29yayIgIyB0aGlzIGlzIGZpeGVkIGxhdGVyCisJCSAgIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICBlc2FjCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJaW5zdF9wcmVmaXgpCisJICBpbnN0X3ByZWZpeF9kaXI9JGFyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCW1sbHZtKQorCSAgIyBDbGFuZyBkb2VzIG5vdCB1c2UgTExWTSB0byBsaW5rLCBzbyB3ZSBjYW4gc2ltcGx5IGRpc2NhcmQgYW55CisJICAjICctbWxsdm0gJGFyZycgb3B0aW9ucyB3aGVuIGRvaW5nIHRoZSBsaW5rIHN0ZXAuCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJb2JqZWN0bGlzdCkKKwkgIGlmIHRlc3QgLWYgIiRhcmciOyB0aGVuCisJICAgIHNhdmVfYXJnPSRhcmcKKwkgICAgbW9yZWFyZ3M9CisJICAgIGZvciBmaWwgaW4gYGNhdCAiJHNhdmVfYXJnImAKKwkgICAgZG8KKyMJICAgICAgZnVuY19hcHBlbmQgbW9yZWFyZ3MgIiAkZmlsIgorCSAgICAgIGFyZz0kZmlsCisJICAgICAgIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkgICAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJICAgICAgaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KKwkJcGljX29iamVjdD0KKwkJbm9uX3BpY19vYmplY3Q9CisKKwkJIyBSZWFkIHRoZSAubG8gZmlsZQorCQlmdW5jX3NvdXJjZSAiJGFyZyIKKworCQlpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiICYmCisJCSAgIHRlc3Qgbm9uZSA9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCisJCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBvYmplY3QgZm9yICckYXJnJyIKKwkJZmkKKworCQkjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQlmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQl4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisKKwkJaWYgdGVzdCBub25lICE9ICIkcGljX29iamVjdCI7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIHBpY19vYmplY3Q9JHhkaXIkcGljX29iamVjdAorCisJCSAgaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgorCQkgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgJiYgdGVzdCB5ZXMgPSAiJGRsb3Blbl9zdXBwb3J0IjsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCisJCSAgICAgIHByZXY9CisJCSAgICAgIGNvbnRpbnVlCisJCSAgICBlbHNlCisJCSAgICAgICMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCSAgICAgIHByZXY9ZGxwcmVmaWxlcworCQkgICAgZmkKKwkJICBmaQorCisJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkJICBpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCisJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisJCSAgICBwcmV2PQorCQkgIGZpCisKKwkJICAjIEEgUElDIG9iamVjdC4KKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgYXJnPSRwaWNfb2JqZWN0CisJCWZpCisKKwkJIyBOb24tUElDIG9iamVjdC4KKwkJaWYgdGVzdCBub25lICE9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBub25fcGljX29iamVjdD0keGRpciRub25fcGljX29iamVjdAorCisJCSAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiOyB0aGVuCisJCSAgICBhcmc9JG5vbl9waWNfb2JqZWN0CisJCSAgZmkKKwkJZWxzZQorCQkgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KKwkJICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCisJCSAgbm9uX3BpY19vYmplY3Q9JHBpY19vYmplY3QKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCWZpCisJICAgICAgZWxzZQorCQkjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkJaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisJCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQkgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKworCQkgIGZ1bmNfbG8ybyAiJGFyZyIKKwkJICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCQkgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgICAgICAgZWxzZQorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIickYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkJZmkKKwkgICAgICBmaQorCSAgICBkb25lCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImxpbmsgaW5wdXQgZmlsZSAnJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICBmaQorCSAgYXJnPSRzYXZlX2FyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCW9zMmRsbG5hbWUpCisJICBvczJkbGxuYW1lPSRhcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlwcmVjaW91c19yZWdleCkKKwkgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PSRhcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlyZWxlYXNlKQorCSAgcmVsZWFzZT0tJGFyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJwYXRoIHwgeHJwYXRoKQorCSAgIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJICBjYXNlICRhcmcgaW4KKwkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkgICopCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCBycGF0aCA9ICIkcHJldiI7IHRoZW4KKwkgICAgY2FzZSAiJHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgcnBhdGggIiAkYXJnIiA7OworCSAgICBlc2FjCisJICBlbHNlCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkYXJnIiA7OworCSAgICBlc2FjCisJICBmaQorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXNocmV4dCkKKwkgIHNocmV4dF9jbWRzPSRhcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl3ZWFrKQorCSAgZnVuY19hcHBlbmQgd2Vha19saWJzICIgJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl4Y2NsaW5rZXIpCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCisJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4Y29tcGlsZXIpCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgorCSAgcHJldj0KKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGxpbmtlcikKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkcWFyZyIKKwkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGNvbnRpbnVlCisJICA7OworCSopCisJICBldmFsICIkcHJldj1cIlwkYXJnXCIiCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJZXNhYworICAgICAgZmkgIyB0ZXN0IC1uICIkcHJldiIKKworICAgICAgcHJldmFyZz0kYXJnCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWFsbC1zdGF0aWMpCisJaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAjIFNlZSBjb21tZW50IGZvciAtc3RhdGljIGZsYWcgYmVsb3csIGZvciBtb3JlIGRldGFpbHMuCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWFsbG93LXVuZGVmaW5lZCkKKwkjIEZJWE1FOiByZW1vdmUgdGhpcyBmbGFnIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUuCisJZnVuY19mYXRhbF9lcnJvciAiJy1hbGxvdy11bmRlZmluZWQnIG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIKKwk7OworCisgICAgICAtYXZvaWQtdmVyc2lvbikKKwlhdm9pZF92ZXJzaW9uPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWJpbmRpcikKKwlwcmV2PWJpbmRpcgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRsb3BlbikKKwlwcmV2PWRsZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbHByZW9wZW4pCisJcHJldj1kbHByZWZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LWR5bmFtaWMpCisJZXhwb3J0X2R5bmFtaWM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgorCWZpCisJaWYgdGVzdCBYLWV4cG9ydC1zeW1ib2xzID0gIlgkYXJnIjsgdGhlbgorCSAgcHJldj1leHBzeW1zCisJZWxzZQorCSAgcHJldj1leHBzeW1zX3JlZ2V4CisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1mcmFtZXdvcmspCisJcHJldj1mcmFtZXdvcmsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1pbnN0LXByZWZpeC1kaXIpCisJcHJldj1pbnN0X3ByZWZpeAorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUaGUgbmF0aXZlIElSSVggbGlua2VyIHVuZGVyc3RhbmRzIC1MQU5HOiosIC1MSVNUOiogYW5kIC1MTk86KgorICAgICAgIyBzbywgaWYgd2Ugc2VlIHRoZXNlIGZsYWdzIGJlIGNhcmVmdWwgbm90IHRvIHRyZWF0IHRoZW0gbGlrZSAtTAorICAgICAgLUxbQS1aXVtBLVpdKjoqKQorCWNhc2UgJHdpdGhfZ2NjLyRob3N0IGluCisJbm8vKi0qLWlyaXgqIHwgLyotKi1pcml4KikKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLUwqKQorCWZ1bmNfc3RyaXBuYW1lICItTCIgJycgIiRhcmciCisJaWYgdGVzdCAteiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KKwkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJyZXF1aXJlIG5vIHNwYWNlIGJldHdlZW4gJy1MJyBhbmQgJyQxJyIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciAnLUwnIG9wdGlvbiIKKwkgIGZpCisJZmkKKwlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwlkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkqKQorCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAorCSAgdGVzdCAteiAiJGFic2RpciIgJiYgXAorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckZGlyJyIKKwkgIGRpcj0kYWJzZGlyCisJICA7OworCWVzYWMKKwljYXNlICIkZGVwbGlicyAiIGluCisJKiIgLUwkZGlyICIqIHwgKiIgJGFyZyAiKikKKwkgICMgV2lsbCBvbmx5IGhhcHBlbiBmb3IgYWJzb2x1dGUgb3Igc3lzcm9vdCBhcmd1bWVudHMKKwkgIDs7CisJKikKKwkgICMgUHJlc2VydmUgc3lzcm9vdCwgYnV0IG5ldmVyIGluY2x1ZGUgcmVsYXRpdmUgZGlyZWN0b3JpZXMKKwkgIGNhc2UgJGRpciBpbgorCSAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSogfCA9KikgZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAtTCRkaXIiIDs7CisJICBlc2FjCisJICBmdW5jX2FwcGVuZCBsaWJfc2VhcmNoX3BhdGggIiAkZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi1jZWdjYyopCisJICB0ZXN0YmluZGlyPWAkRUNITyAiJGRpciIgfCAkU0VEICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGRpcjoiKikgOzsKKwkgIDo6KSBkbGxzZWFyY2hwYXRoPSRkaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiRkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWwqKQorCWlmIHRlc3QgWC1sYyA9ICJYJGFyZyIgfHwgdGVzdCBYLWxtID0gIlgkYXJnIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyogfCAqLSotaGFpa3UqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9zMiopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KiB8ICotKi1iaXRyaWcqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXN5c3Y0LjJ1dzIqIHwgKi0qLXN5c3Y1KiB8ICotKi11bml4d2FyZSogfCAqLSotT3BlblVOSVgqKQorCSAgICAjIENvbXBpbGVyIGluc2VydHMgbGliYyBpbiB0aGUgY29ycmVjdCBwbGFjZSBmb3IgdGhyZWFkcyB0byB3b3JrCisJICAgIHRlc3QgWC1sYyA9ICJYJGFyZyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgIGVzYWMKKwllbGlmIHRlc3QgWC1sY19yID0gIlgkYXJnIjsgdGhlbgorCSBjYXNlICRob3N0IGluCisJICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqIHwgKi0qLWJpdHJpZyopCisJICAgIyBEbyBub3QgaW5jbHVkZSBsaWJjX3IgZGlyZWN0bHksIHVzZSAtcHRocmVhZCBmbGFnLgorCSAgIGNvbnRpbnVlCisJICAgOzsKKwkgZXNhYworCWZpCisJZnVuY19hcHBlbmQgZGVwbGlicyAiICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAtbWxsdm0pCisJcHJldj1tbGx2bQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW1vZHVsZSkKKwltb2R1bGU9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgorICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdHwtLXN5c3Jvb3QpCisJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUgXAorICAgICAgfC10aHJlYWRzfC1mb3Blbm1wfC1vcGVubXB8LW1wfC14b3Blbm1wfC1vbXB8LXFzbXA9KikKKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkYXJnIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tdWx0aV9tb2R1bGUpCisJc2luZ2xlX21vZHVsZT0kd2wtbXVsdGlfbW9kdWxlCisJY29udGludWUKKwk7OworCisgICAgICAtbm8tZmFzdC1pbnN0YWxsKQorCWZhc3RfaW5zdGFsbD1ubworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLWluc3RhbGwpCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWRhcndpbiogfCAqLWNlZ2NjKikKKwkgICMgVGhlIFBBVEggaGFja2VyeSBpbiB3cmFwcGVyIHNjcmlwdHMgaXMgcmVxdWlyZWQgb24gV2luZG93cworCSAgIyBhbmQgRGFyd2luIGluIG9yZGVyIGZvciB0aGUgbG9hZGVyIHRvIGZpbmQgYW55IGRsbHMgaXQgbmVlZHMuCisJICBmdW5jX3dhcm5pbmcgIictbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCisJICBmdW5jX3dhcm5pbmcgImFzc3VtaW5nICctbm8tZmFzdC1pbnN0YWxsJyBpbnN0ZWFkIgorCSAgZmFzdF9pbnN0YWxsPW5vCisJICA7OworCSopIG5vX2luc3RhbGw9eWVzIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLW5vLXVuZGVmaW5lZCkKKwlhbGxvd191bmRlZmluZWQ9bm8KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vYmplY3RsaXN0KQorCXByZXY9b2JqZWN0bGlzdAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLW9zMmRsbG5hbWUpCisJcHJldj1vczJkbGxuYW1lCisJY29udGludWUKKwk7OworCisgICAgICAtbykgcHJldj1vdXRwdXQgOzsKKworICAgICAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4KQorCXByZXY9cHJlY2lvdXNfcmVnZXgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1yZWxlYXNlKQorCXByZXY9cmVsZWFzZQorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJwYXRoKQorCXByZXY9cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKQorCXByZXY9eHJwYXRoCisJY29udGludWUKKwk7OworCisgICAgICAtUiopCisJZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGFyZyIKKwlkaXI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwk9KikKKwkgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGRpciIKKwkgIGRpcj0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIgorCSAgOzsKKwllc2FjCisJY2FzZSAiJHhycGF0aCAiIGluCisJKiIgJGRpciAiKikgOzsKKwkqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaGFyZWQpCisJIyBUaGUgZWZmZWN0cyBvZiAtc2hhcmVkIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zaHJleHQpCisJcHJldj1zaHJleHQKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMgfCAtc3RhdGljLWxpYnRvb2wtbGlicykKKwkjIFRoZSBlZmZlY3RzIG9mIC1zdGF0aWMgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCSMgV2UgdXNlZCB0byBkbyB0aGUgc2FtZSBhcyAtYWxsLXN0YXRpYyBvbiBwbGF0Zm9ybXMgdGhhdAorCSMgZGlkbid0IGhhdmUgYSBQSUMgZmxhZywgYnV0IHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGVmZmVjdHMKKwkjIHdvdWxkIGJlIGVxdWl2YWxlbnQgd2FzIHdyb25nLiAgSXQgd291bGQgYnJlYWsgb24gYXQgbGVhc3QKKwkjIERpZ2l0YWwgVW5peCBhbmQgQUlYLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXRocmVhZC1zYWZlKQorCXRocmVhZF9zYWZlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXZlcnNpb24taW5mbykKKwlwcmV2PXZpbmZvCisJY29udGludWUKKwk7OworCisgICAgICAtdmVyc2lvbi1udW1iZXIpCisJcHJldj12aW5mbworCXZpbmZvX251bWJlcj15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC13ZWFrKQorICAgICAgICBwcmV2PXdlYWsKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1XYywqKQorCWZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwlhcmc9CisJc2F2ZV9pZnM9JElGUzsgSUZTPSwKKwlmb3IgZmxhZyBpbiAkYXJnczsgZG8KKwkgIElGUz0kc2F2ZV9pZnMKKyAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGFyZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWRvbmUKKwlJRlM9JHNhdmVfaWZzCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJOzsKKworICAgICAgLVdsLCopCisJZnVuY19zdHJpcG5hbWUgJy1XbCwnICcnICIkYXJnIgorCWFyZ3M9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCWFyZz0KKwlzYXZlX2lmcz0kSUZTOyBJRlM9LAorCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSRzYXZlX2lmcworICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgZnVuY19hcHBlbmQgYXJnICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJZG9uZQorCUlGUz0kc2F2ZV9pZnMKKwlmdW5jX3N0cmlwbmFtZSAnICcgJycgIiRhcmciCisJYXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwk7OworCisgICAgICAtWGNvbXBpbGVyKQorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OworCisgICAgICAtWGxpbmtlcikKKwlwcmV2PXhsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YQ0NsaW5rZXIpCisJcHJldj14Y2NsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgLW1zZ18qIGZvciBvc2YgY2MKKyAgICAgIC1tc2dfKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKwk7OworCisgICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6CisgICAgICAjIC02NCwgLW1pcHNbMC05XSAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAtclswLTldWzAtOV0qICAgICAgICBzcGVjaWZ5IHByb2Nlc3NvciBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29tcGlsZXIKKyAgICAgICMgK0RBKiwgK0REKiAgICAgICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgSFAgY29tcGlsZXIKKyAgICAgICMgLXEqICAgICAgICAgICAgICAgICAgY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgZm9yIEdDQworICAgICAgIyAtRi9wYXRoICAgICAgICAgICAgICBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKyAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogIHByb2ZpbGluZyBmbGFncyBmb3IgR0NDCisgICAgICAjIC1mc3RhY2stcHJvdGVjdG9yKiAgIHN0YWNrIHByb3RlY3RvciBmbGFncyBmb3IgR0NDCisgICAgICAjIEBmaWxlICAgICAgICAgICAgICAgIEdDQyByZXNwb25zZSBmaWxlcworICAgICAgIyAtdHA9KiAgICAgICAgICAgICAgICBQb3J0bGFuZCBwZ2NjIHRhcmdldCBwcm9jZXNzb3Igc2VsZWN0aW9uCisgICAgICAjIC0tc3lzcm9vdD0qICAgICAgICAgIGZvciBzeXNyb290IHN1cHBvcnQKKyAgICAgICMgLU8qLCAtZyosIC1mbHRvKiwgLWZ3aG9wciosIC1mdXNlLWxpbmtlci1wbHVnaW4gR0NDIGxpbmstdGltZSBvcHRpbWl6YXRpb24KKyAgICAgICMgLXN0ZGxpYj0qICAgICAgICAgICAgc2VsZWN0IGMrKyBzdGQgbGliIHdpdGggY2xhbmcKKyAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwgXAorICAgICAgLXRbNDVdKnwtdHhzY2FsZSp8LXB8LXBnfC0tY292ZXJhZ2V8LWZwcm9maWxlLSp8LUYqfEAqfC10cD0qfC0tc3lzcm9vdD0qfCBcCisgICAgICAtTyp8LWcqfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2lufC1mc3RhY2stcHJvdGVjdG9yKnwtc3RkbGliPSopCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorICAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorICAgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorICAgICAgICBjb250aW51ZQorICAgICAgICA7OworCisgICAgICAtWiopCisgICAgICAgIGlmIHRlc3Qgb3MyID0gImBleHByICRob3N0IDogJy4qXChvczJcKSdgIjsgdGhlbgorICAgICAgICAgICMgT1MvMiB1c2VzIC1aeHh4IHRvIHNwZWNpZnkgT1MvMi1zcGVjaWZpYyBvcHRpb25zCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJICBjYXNlICRhcmcgaW4KKwkgIC1abGlua2VyIHwgLVpzdGFjaykKKwkgICAgcHJldj14Y29tcGlsZXIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGNvbnRpbnVlCisgICAgICAgIGVsc2UKKwkgICMgT3RoZXJ3aXNlIHRyZWF0IGxpa2UgJ1NvbWUgb3RoZXIgY29tcGlsZXIgZmxhZycgYmVsb3cKKwkgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJICBhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisgICAgICAgIGZpCisJOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcuCisgICAgICAtKiB8ICsqKQorICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKwk7OworCisgICAgICAqLiRvYmpleHQpCisJIyBBIHN0YW5kYXJkIG9iamVjdC4KKwlmdW5jX2FwcGVuZCBvYmpzICIgJGFyZyIKKwk7OworCisgICAgICAqLmxvKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCWlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCisJICBwaWNfb2JqZWN0PQorCSAgbm9uX3BpY19vYmplY3Q9CisKKwkgICMgUmVhZCB0aGUgLmxvIGZpbGUKKwkgIGZ1bmNfc291cmNlICIkYXJnIgorCisJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwKKwkgICAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkgICAgIHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3Qgbm9uZSA9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciAnJGFyZyciCisJICBmaQorCisJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgIHhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKworCSAgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IiB8fCB7CisJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJICAgIHBpY19vYmplY3Q9JHhkaXIkcGljX29iamVjdAorCisJICAgIGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0IHllcyA9ICIkZGxvcGVuX3N1cHBvcnQiOyB0aGVuCisJCWZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKKwkJcHJldj0KKwkJY29udGludWUKKwkgICAgICBlbHNlCisJCSMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCXByZXY9ZGxwcmVmaWxlcworCSAgICAgIGZpCisJICAgIGZpCisKKwkgICAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkgICAgaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgorCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisJICAgICAgcHJldj0KKwkgICAgZmkKKworCSAgICAjIEEgUElDIG9iamVjdC4KKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBhcmc9JHBpY19vYmplY3QKKwkgIH0KKworCSAgIyBOb24tUElDIG9iamVjdC4KKwkgIGlmIHRlc3Qgbm9uZSAhPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBub25fcGljX29iamVjdD0keGRpciRub25fcGljX29iamVjdAorCisJICAgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiOyB0aGVuCisJICAgICAgYXJnPSRub25fcGljX29iamVjdAorCSAgICBmaQorCSAgZWxzZQorCSAgICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJICAgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkgICAgbm9uX3BpY19vYmplY3Q9JHBpY19vYmplY3QKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwllbHNlCisJICAjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorCSAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCSAgICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCSAgICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisKKwkgICAgZnVuY19sbzJvICIkYXJnIgorCSAgICBwaWNfb2JqZWN0PSR4ZGlyJG9iamRpci8kZnVuY19sbzJvX3Jlc3VsdAorCSAgICBub25fcGljX29iamVjdD0keGRpciRmdW5jX2xvMm9fcmVzdWx0CisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgorCSAgZWxzZQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJICBmaQorCWZpCisJOzsKKworICAgICAgKi4kbGliZXh0KQorCSMgQW4gYXJjaGl2ZS4KKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBvbGRfZGVwbGlicyAiICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAqLmxhKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKworCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkYXJnIgorCWlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KKwkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCSAgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICBwcmV2PQorCWVsaWYgdGVzdCBkbHByZWZpbGVzID0gIiRwcmV2IjsgdGhlbgorCSAgIyBUaGUgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KKwkgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgcHJldj0KKwllbHNlCisJICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGFyZ3VtZW50LgorICAgICAgKikKKwkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisJYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorCTs7CisgICAgICBlc2FjICMgYXJnCisKKyAgICAgICMgTm93IGFjdHVhbGx5IHN1YnN0aXR1dGUgdGhlIGFyZ3VtZW50IGludG8gdGhlIGNvbW1hbmRzLgorICAgICAgaWYgdGVzdCAtbiAiJGFyZyI7IHRoZW4KKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgICAgZmkKKyAgICBkb25lICMgYXJndW1lbnQgcGFyc2luZyBsb29wCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgJyRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisKKyAgICBpZiB0ZXN0IHllcyA9ICIkZXhwb3J0X2R5bmFtaWMiICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCisgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgorICAgIGZpCisKKyAgICBvbGRsaWJzPQorICAgICMgY2FsY3VsYXRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB3aXRob3V0IGl0cyBkaXJlY3RvcnkKKyAgICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorICAgIG91dHB1dG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgICAgbGlib2Jqc19zYXZlPSRsaWJvYmpzCisKKyAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAgICAgICMgZ2V0IHRoZSBkaXJlY3RvcmllcyBsaXN0ZWQgaW4gJHNobGlicGF0aF92YXIKKyAgICAgIGV2YWwgc2hsaWJfc2VhcmNoX3BhdGg9XGBcJEVDSE8gXCJcJCRzaGxpYnBhdGhfdmFyXCIgXHwgXCRTRUQgXCdzLzovIC9nXCdcYAorICAgIGVsc2UKKyAgICAgIHNobGliX3NlYXJjaF9wYXRoPQorICAgIGZpCisgICAgZXZhbCBzeXNfbGliX3NlYXJjaF9wYXRoPVwiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlY1wiCisgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgorCisgICAgIyBEZWZpbml0aW9uIGlzIGluamVjdGVkIGJ5IExUX0NPTkZJRyBkdXJpbmcgbGlidG9vbCBnZW5lcmF0aW9uLgorICAgIGZ1bmNfbXVuZ2VfcGF0aF9saXN0IHN5c19saWJfZGxzZWFyY2hfcGF0aCAiJExUX1NZU19MSUJSQVJZX1BBVEgiCisKKyAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgorICAgIG91dHB1dF9vYmpkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQkb2JqZGlyCisgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyIKKyAgICB0b29sX291dHB1dF9vYmpkaXI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorICAgICMgQ3JlYXRlIHRoZSBvYmplY3QgZGlyZWN0b3J5LgorICAgIGZ1bmNfbWtkaXJfcCAiJG91dHB1dF9vYmpkaXIiCisKKyAgICAjIERldGVybWluZSB0aGUgdHlwZSBvZiBvdXRwdXQKKyAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAiIikKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBvdXRwdXQgZmlsZSIKKyAgICAgIDs7CisgICAgKi4kbGliZXh0KSBsaW5rbW9kZT1vbGRsaWIgOzsKKyAgICAqLmxvIHwgKi4kb2JqZXh0KSBsaW5rbW9kZT1vYmogOzsKKyAgICAqLmxhKSBsaW5rbW9kZT1saWIgOzsKKyAgICAqKSBsaW5rbW9kZT1wcm9nIDs7ICMgQW55dGhpbmcgZWxzZSBzaG91bGQgYmUgYSBwcm9ncmFtLgorICAgIGVzYWMKKworICAgIHNwZWNpYWxkZXBsaWJzPQorCisgICAgbGlicz0KKyAgICAjIEZpbmQgYWxsIGludGVyZGVwZW5kZW50IGRlcGxpYnMgYnkgc2VhcmNoaW5nIGZvciBsaWJyYXJpZXMKKyAgICAjIHRoYXQgYXJlIGxpbmtlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiAtbGEgLWxiIC1sYSkKKyAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgorCWNhc2UgIiRsaWJzICIgaW4KKwkqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkZGVwbGliIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKyAgICAgIGxpYnM9IiRwcmVkZXBzICRsaWJzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggJHBvc3RkZXBzIgorCisgICAgICAjIENvbXB1dGUgbGlicmFyaWVzIHRoYXQgYXJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSBpbiAkcHJlZGVwcworICAgICAgIyAkcG9zdGRlcHMgYW5kIG1hcmsgdGhlbSBhcyBzcGVjaWFsIChpLmUuLCB3aG9zZSBkdXBsaWNhdGVzIGFyZQorICAgICAgIyBub3QgdG8gYmUgZWxpbWluYXRlZCkuCisgICAgICBwcmVfcG9zdF9kZXBzPQorICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM7IHRoZW4KKwlmb3IgcHJlX3Bvc3RfZGVwIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KKwkgIGNhc2UgIiRwcmVfcG9zdF9kZXBzICIgaW4KKwkgICoiICRwcmVfcG9zdF9kZXAgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJHByZV9wb3N0X2RlcHMiIDs7CisJICBlc2FjCisJICBmdW5jX2FwcGVuZCBwcmVfcG9zdF9kZXBzICIgJHByZV9wb3N0X2RlcCIKKwlkb25lCisgICAgICBmaQorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICBmaQorCisgICAgZGVwbGlicz0KKyAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisgICAgbmV3bGliX3NlYXJjaF9wYXRoPQorICAgIG5lZWRfcmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5raW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfZGVwbGlicz0gIyBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgbm90aW5zdF9wYXRoPSAjIHBhdGhzIHRoYXQgY29udGFpbiBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisKKyAgICBjYXNlICRsaW5rbW9kZSBpbgorICAgIGxpYikKKwlwYXNzZXM9ImNvbnYgZGxwcmVvcGVuIGxpbmsiCisJZm9yIGZpbGUgaW4gJGRsZmlsZXMgJGRscHJlZmlsZXM7IGRvCisJICBjYXNlICRmaWxlIGluCisJICAqLmxhKSA7OworCSAgKikKKwkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuICctZGxvcGVuJyBvbmx5IGxpYnRvb2wgbGlicmFyaWVzOiAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJOzsKKyAgICBwcm9nKQorCWNvbXBpbGVfZGVwbGlicz0KKwlmaW5hbGl6ZV9kZXBsaWJzPQorCWFsbGRlcGxpYnM9ZmFsc2UKKwluZXdkbGZpbGVzPQorCW5ld2RscHJlZmlsZXM9CisJcGFzc2VzPSJjb252IHNjYW4gZGxvcGVuIGRscHJlb3BlbiBsaW5rIgorCTs7CisgICAgKikgIHBhc3Nlcz0iY29udiIKKwk7OworICAgIGVzYWMKKworICAgIGZvciBwYXNzIGluICRwYXNzZXM7IGRvCisgICAgICAjIFRoZSBwcmVvcGVuIHBhc3MgaW4gbGliIG1vZGUgcmV2ZXJzZXMgJGRlcGxpYnM7IHB1dCBpdCBiYWNrIGhlcmUKKyAgICAgICMgc28gdGhhdCAtTCBjb21lcyBiZWZvcmUgbGlicyB0aGF0IG5lZWQgaXQgZm9yIGluc3RhbmNlLi4uCisgICAgICBpZiB0ZXN0IGxpYixsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KKwkjIyBGSVhNRTogRmluZCB0aGUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QgaXMgcmVidWlsdCBpbiB0aGUgd3JvbmcKKwkjIyAgICAgICAgb3JkZXIsIGFuZCBmaXggaXQgdGhlcmUgcHJvcGVybHkKKyAgICAgICAgdG1wX2RlcGxpYnM9CisJZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgIHRtcF9kZXBsaWJzPSIkZGVwbGliICR0bXBfZGVwbGlicyIKKwlkb25lCisJZGVwbGlicz0kdG1wX2RlcGxpYnMKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgbGliLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIiB8fAorCSB0ZXN0IHByb2csc2NhbiA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJbGlicz0kZGVwbGlicworCWRlcGxpYnM9CisgICAgICBmaQorICAgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKwljYXNlICRwYXNzIGluCisJZGxvcGVuKSBsaWJzPSRkbGZpbGVzIDs7CisJZGxwcmVvcGVuKSBsaWJzPSRkbHByZWZpbGVzIDs7CisJbGluaykgbGlicz0iJGRlcGxpYnMgJURFUExJQlMlICRkZXBlbmRlbmN5X2xpYnMiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgbGliLGRscHJlb3BlbiA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJIyBDb2xsZWN0IGFuZCBmb3J3YXJkIGRlcGxpYnMgb2YgcHJlb3BlbmVkIGxpYnRvb2wgbGlicworCWZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAjIElnbm9yZSBub24tbGlidG9vbC1saWJzCisJICBkZXBlbmRlbmN5X2xpYnM9CisJICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGxpYiIKKwkgIGNhc2UgJGxpYiBpbgorCSAgKi5sYSkJZnVuY19zb3VyY2UgIiRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CisJICBlc2FjCisKKwkgICMgQ29sbGVjdCBwcmVvcGVuZWQgbGlidG9vbCBkZXBsaWJzLCBleGNlcHQgYW55IHRoaXMgbGlicmFyeQorCSAgIyBoYXMgZGVjbGFyZWQgYXMgd2VhayBsaWJzCisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisgICAgICAgICAgICBkZXBsaWJfYmFzZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgY2FzZSAiICR3ZWFrX2xpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliX2Jhc2UgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICBlc2FjCisJICBkb25lCisJZG9uZQorCWxpYnM9JGRscHJlZmlsZXMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IGRsb3BlbiA9ICIkcGFzcyI7IHRoZW4KKwkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCisJc2F2ZV9kZXBsaWJzPSRkZXBsaWJzCisJZGVwbGlicz0KKyAgICAgIGZpCisKKyAgICAgIGZvciBkZXBsaWIgaW4gJGxpYnM7IGRvCisJbGliPQorCWZvdW5kPWZhbHNlCisJY2FzZSAkZGVwbGliIGluCisJLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZSBcCisgICAgICAgIHwtdGhyZWFkc3wtZm9wZW5tcHwtb3Blbm1wfC1tcHwteG9wZW5tcHwtb21wfC1xc21wPSopCisJICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRkZXBsaWIiCisJICAgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkJY2FzZSAiJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkJICAgICoiICRkZXBsaWIgIiopIDs7CisJCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkZGVwbGliIiA7OworCQllc2FjCisJICAgIGZpCisJICBmaQorCSAgY29udGludWUKKwkgIDs7CisJLWwqKQorCSAgaWYgdGVzdCBsaWIgIT0gIiRsaW5rbW9kZSIgJiYgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiJy1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZWxzZQorCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgorCSAgZmkKKwkgIGZvciBzZWFyY2hkaXIgaW4gJHNlYXJjaGRpcnM7IGRvCisJICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCisJICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQorCSAgICAgIGxpYj0kc2VhcmNoZGlyL2xpYiRuYW1lJHNlYXJjaF9leHQKKwkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCQlpZiB0ZXN0IC5sYSA9ICIkc2VhcmNoX2V4dCI7IHRoZW4KKwkJICBmb3VuZD06CisJCWVsc2UKKwkJICBmb3VuZD1mYWxzZQorCQlmaQorCQlicmVhayAyCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZG9uZQorCSAgaWYgJGZvdW5kOyB0aGVuCisJICAgICMgZGVwbGliIGlzIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgICMgSWYgJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyAmJiAkZGVwbGliIGlzIGEgc3RkbGliLAorCSAgICAjIFdlIG5lZWQgdG8gZG8gc29tZSBzcGVjaWFsIHRoaW5ncyBoZXJlLCBhbmQgbm90IGxhdGVyLgorCSAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgorCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopCisJCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KKwkJICBsaWJyYXJ5X25hbWVzPQorCQkgIG9sZF9saWJyYXJ5PQorCQkgIGZ1bmNfc291cmNlICIkbGliIgorCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkJICAgIGxsPSRsCisJCSAgZG9uZQorCQkgIGlmIHRlc3QgIlgkbGwiID0gIlgkb2xkX2xpYnJhcnkiOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKKwkJICAgIGZvdW5kPWZhbHNlCisJCSAgICBmdW5jX2Rpcm5hbWUgIiRsaWIiICIiICIuIgorCQkgICAgbGFkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKwkJICAgIGxpYj0kbGFkaXIvJG9sZF9saWJyYXJ5CisJCSAgICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCQkgICAgZWxzZQorCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCQkgICAgICB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCQkgICAgZmkKKwkJICAgIGNvbnRpbnVlCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKSA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgIGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIDs7ICMgLWwKKwkqLmx0ZnJhbWV3b3JrKQorCSAgaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwktTCopCisJICBjYXNlICRsaW5rbW9kZSBpbgorCSAgbGliKQorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICB0ZXN0IGNvbnYgPSAiJHBhc3MiICYmIGNvbnRpbnVlCisJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkgICAgOzsKKwkgIHByb2cpCisJICAgIGlmIHRlc3QgY29udiA9ICIkcGFzcyI7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIGNvbnRpbnVlCisJICAgIGZpCisJICAgIGlmIHRlc3Qgc2NhbiA9ICIkcGFzcyI7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZmkKKwkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKwkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJICAgIDs7CisJICAqKQorCSAgICBmdW5jX3dhcm5pbmcgIictTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgICAgOzsKKwkgIGVzYWMgIyBsaW5rbW9kZQorCSAgY29udGludWUKKwkgIDs7ICMgLUwKKwktUiopCisJICBpZiB0ZXN0IGxpbmsgPSAiJHBhc3MiOyB0aGVuCisJICAgIGZ1bmNfc3RyaXBuYW1lICctUicgJycgIiRkZXBsaWIiCisJICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICBkaXI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgICAjIE1ha2Ugc3VyZSB0aGUgeHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICBjYXNlICIkeHJwYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGRpciIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBjb250aW51ZQorCSAgOzsKKwkqLmxhKQorCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJICBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgOzsKKwkqLiRsaWJleHQpCisJICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGNvbnRpbnVlCisJICBmaQorCSAgY2FzZSAkbGlua21vZGUgaW4KKwkgIGxpYikKKwkgICAgIyBMaW5raW5nIGNvbnZlbmllbmNlIG1vZHVsZXMgaW50byBzaGFyZWQgbGlicmFyaWVzIGlzIGFsbG93ZWQsCisJICAgICMgYnV0IGxpbmtpbmcgb3RoZXIgc3RhdGljIGxpYnJhcmllcyBpcyBub24tcG9ydGFibGUuCisJICAgIGNhc2UgIiAkZGxwcmVjb252ZW5pZW5jZWxpYnMgIiBpbgorCSAgICAqIiAkZGVwbGliICIqKSA7OworCSAgICAqKQorCSAgICAgIHZhbGlkX2FfbGliPWZhbHNlCisJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkJbWF0Y2hfcGF0dGVybiopCisJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCisJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKKwkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgIHZhbGlkX2FfbGliPToKKwkJICBmaQorCQk7OworCQlwYXNzX2FsbCkKKwkJICB2YWxpZF9hX2xpYj06CisJCTs7CisJICAgICAgZXNhYworCSAgICAgIGlmICR2YWxpZF9hX2xpYjsgdGhlbgorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZWxzZQorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCisJCWVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0IGxpbmsgIT0gIiRwYXNzIjsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICA7OyAjICouJGxpYmV4dAorCSoubG8gfCAqLiRvYmpleHQpCisJICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGlmIHRlc3QgZGxwcmVvcGVuID0gIiRwYXNzIiB8fCB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zdXBwb3J0IiB8fCB0ZXN0IG5vID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkZXBsaWIiCisJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkZGVwbGliIgorCSAgICBmaQorCSAgZmkKKwkgIGNvbnRpbnVlCisJICA7OworCSVERVBMSUJTJSkKKwkgIGFsbGRlcGxpYnM9OgorCSAgY29udGludWUKKwkgIDs7CisJZXNhYyAjIGNhc2UgJGRlcGxpYgorCisJJGZvdW5kIHx8IHRlc3QgLWYgIiRsaWIiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5ICckbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgJyRkZXBsaWInIgorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkbGliIiBcCisJICB8fCBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwlsYWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCisJZGxuYW1lPQorCWRsb3Blbj0KKwlkbHByZW9wZW49CisJbGliZGlyPQorCWxpYnJhcnlfbmFtZXM9CisJb2xkX2xpYnJhcnk9CisJaW5oZXJpdGVkX2xpbmtlcl9mbGFncz0KKwkjIElmIHRoZSBsaWJyYXJ5IHdhcyBpbnN0YWxsZWQgd2l0aCBhbiBvbGQgcmVsZWFzZSBvZiBsaWJ0b29sLAorCSMgaXQgd2lsbCBub3QgcmVkZWZpbmUgdmFyaWFibGVzIGluc3RhbGxlZCwgb3Igc2hvdWxkbm90bGluaworCWluc3RhbGxlZD15ZXMKKwlzaG91bGRub3RsaW5rPW5vCisJYXZvaWR0ZW1wcnBhdGg9CisKKworCSMgUmVhZCB0aGUgLmxhIGZpbGUKKwlmdW5jX3NvdXJjZSAiJGxpYiIKKworCSMgQ29udmVydCAiLWZyYW1ld29yayBmb28iIHRvICJmb28ubHRmcmFtZXdvcmsiCisJaWYgdGVzdCAtbiAiJGluaGVyaXRlZF9saW5rZXJfZmxhZ3MiOyB0aGVuCisJICB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFncz1gJEVDSE8gIiRpbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MvLWZyYW1ld29yayBcKFteICRdKlwpL1wxLmx0ZnJhbWV3b3JrL2cnYAorCSAgZm9yIHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgaW4gJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWdzOyBkbworCSAgICBjYXNlICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgaW4KKwkgICAgICAqIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIjs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwlmaQorCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIiAkZGVwZW5kZW5jeV9saWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJaWYgdGVzdCBsaWIsbGluayA9ICIkbGlua21vZGUsJHBhc3MiIHx8CisJICAgdGVzdCBwcm9nLHNjYW4gPSAiJGxpbmttb2RlLCRwYXNzIiB8fAorCSAgIHsgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiICYmIHRlc3QgbGliICE9ICIkbGlua21vZGUiOyB9OyB0aGVuCisJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKKwkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZGxwcmVvcGVuIgorCWZpCisKKwlpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCisJICAjIE9ubHkgY2hlY2sgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcworCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgJyRsaWInIgorCSAgICBmaQorCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCisJICAgIGZ1bmNfYXBwZW5kIGNvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCSAgICBmdW5jX2FwcGVuZCBvbGRfY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICBlbGlmIHRlc3QgcHJvZyAhPSAiJGxpbmttb2RlIiAmJiB0ZXN0IGxpYiAhPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIKKwkgIGZpCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorCSAgZG9uZQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gY29udgorCisKKwkjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCisJbGlua2xpYj0KKwlpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmCisJICAgeyB0ZXN0IHllcyA9ICIkcHJlZmVyX3N0YXRpY19saWJzIiB8fAorCSAgICAgdGVzdCBidWlsdCxubyA9ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiOyB9OyB0aGVuCisJICBsaW5rbGliPSRvbGRfbGlicmFyeQorCWVsc2UKKwkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkgICAgbGlua2xpYj0kbAorCSAgZG9uZQorCWZpCisJaWYgdGVzdCAteiAiJGxpbmtsaWIiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgJyRsaWInIgorCWZpCisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwlpZiB0ZXN0IGRsb3BlbiA9ICIkcGFzcyI7IHRoZW4KKwkgIHRlc3QgLXogIiRsaWJkaXIiIFwKKwkgICAgJiYgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiAnJGxpYiciCisJICBpZiB0ZXN0IC16ICIkZGxuYW1lIiB8fAorCSAgICAgdGVzdCB5ZXMgIT0gIiRkbG9wZW5fc3VwcG9ydCIgfHwKKwkgICAgIHRlc3Qgbm8gPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIKKwkgIHRoZW4KKwkgICAgIyBJZiB0aGVyZSBpcyBubyBkbG5hbWUsIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcKKwkgICAgIyBzdGF0aWNhbGx5LCB3ZSBuZWVkIHRvIHByZWxvYWQuICBXZSBhbHNvIG5lZWQgdG8gcHJlbG9hZCBhbnkKKwkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKKwkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgorCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGxpYiAkZGVwZW5kZW5jeV9saWJzIgorCSAgZWxzZQorCSAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGxpYiIKKwkgIGZpCisJICBjb250aW51ZQorCWZpICMgJHBhc3MgPSBkbG9wZW4KKworCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCWNhc2UgJGxhZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNfbGFkaXI9JGxhZGlyIDs7CisJKikKKwkgIGFic19sYWRpcj1gY2QgIiRsYWRpciIgJiYgcHdkYAorCSAgaWYgdGVzdCAteiAiJGFic19sYWRpciI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckbGFkaXInIgorCSAgICBmdW5jX3dhcm5pbmcgInBhc3NpbmcgaXQgbGl0ZXJhbGx5IHRvIHRoZSBsaW5rZXIsIGFsdGhvdWdoIGl0IG1pZ2h0IGZhaWwiCisJICAgIGFic19sYWRpcj0kbGFkaXIKKwkgIGZpCisJICA7OworCWVzYWMKKwlmdW5jX2Jhc2VuYW1lICIkbGliIgorCWxhbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworCSMgRmluZCB0aGUgcmVsZXZhbnQgb2JqZWN0IGRpcmVjdG9yeSBhbmQgbGlicmFyeSBuYW1lLgorCWlmIHRlc3QgeWVzID0gIiRpbnN0YWxsZWQiOyB0aGVuCisJICBpZiB0ZXN0ICEgLWYgIiRsdF9zeXNyb290JGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJsaWJyYXJ5ICckbGliJyB3YXMgbW92ZWQuIgorCSAgICBkaXI9JGxhZGlyCisJICAgIGFic2Rpcj0kYWJzX2xhZGlyCisJICAgIGxpYmRpcj0kYWJzX2xhZGlyCisJICBlbHNlCisJICAgIGRpcj0kbHRfc3lzcm9vdCRsaWJkaXIKKwkgICAgYWJzZGlyPSRsdF9zeXNyb290JGxpYmRpcgorCSAgZmkKKwkgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiICYmIGF2b2lkdGVtcHJwYXRoPXllcworCWVsc2UKKwkgIGlmIHRlc3QgISAtZiAiJGxhZGlyLyRvYmpkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCisJICAgIGRpcj0kbGFkaXIKKwkgICAgYWJzZGlyPSRhYnNfbGFkaXIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgorCSAgZWxzZQorCSAgICBkaXI9JGxhZGlyLyRvYmpkaXIKKwkgICAgYWJzZGlyPSRhYnNfbGFkaXIvJG9iamRpcgorCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCisJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCisJICBmaQorCWZpICMgJGluc3RhbGxlZCA9IHllcworCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkbGFuYW1lIgorCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCisJaWYgdGVzdCBkbHByZW9wZW4gPSAiJHBhc3MiOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6ICckbGliJyIKKwkgIGZpCisJICBjYXNlICRob3N0IGluCisJICAgICMgc3BlY2lhbCBoYW5kbGluZyBmb3IgcGxhdGZvcm1zIHdpdGggUEUtRExMcy4KKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICAgIyBMaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGxpbmsgYWdhaW5zdCBzaGFyZWQgbGlicmFyeSBpZiBib3RoCisJICAgICAgIyBzdGF0aWMgYW5kIHNoYXJlZCBhcmUgcHJlc2VudC4gIFRoZXJlZm9yZSwgZW5zdXJlIHdlIGV4dHJhY3QKKwkgICAgICAjIHN5bWJvbHMgZnJvbSB0aGUgaW1wb3J0IGxpYnJhcnkgaWYgYSBzaGFyZWQgbGlicmFyeSBpcyBwcmVzZW50CisJICAgICAgIyAob3RoZXJ3aXNlLCB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIHdpbGwgYmUgaW5jb3JyZWN0KS4gIFdlIGRvCisJICAgICAgIyB0aGlzIGJ5IHB1dHRpbmcgdGhlIGltcG9ydCBsaWJyYXJ5IG5hbWUgaW50byAkbmV3ZGxwcmVmaWxlcy4KKwkgICAgICAjIFdlIHJlY292ZXIgdGhlIGRsb3BlbiBtb2R1bGUgbmFtZSBieSAnc2F2aW5nJyB0aGUgbGEgZmlsZQorCSAgICAgICMgbmFtZSBpbiBhIHNwZWNpYWwgcHVycG9zZSB2YXJpYWJsZSwgYW5kIChsYXRlcikgZXh0cmFjdGluZyB0aGUKKwkgICAgICAjIGRsbmFtZSBmcm9tIHRoZSBsYSBmaWxlLgorCSAgICAgIGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgICBmdW5jX3RyX3NoICIkZGlyLyRsaW5rbGliIgorCSAgICAgICAgZXZhbCAibGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQ9XCRhYnNfbGFkaXIvXCRsYW5hbWUiCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kbGlua2xpYiIKKwkgICAgICBlbHNlCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgICAjIEtlZXAgYSBsaXN0IG9mIHByZW9wZW5lZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMgdG8gY2hlY2sKKwkgICAgICAgICMgdGhhdCB0aGV5IGFyZSBiZWluZyB1c2VkIGNvcnJlY3RseSBpbiB0aGUgbGluayBwYXNzLgorCSAgICAgICAgdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCSAgICAgICAgICBmdW5jX2FwcGVuZCBkbHByZWNvbnZlbmllbmNlbGlicyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgIGZpCisJICAgIDs7CisJICAgICogKQorCSAgICAgICMgUHJlZmVyIHVzaW5nIGEgc3RhdGljIGxpYnJhcnkgKHNvIHRoYXQgbm8gc2lsbHkgX0RZTkFNSUMgc3ltYm9scworCSAgICAgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgorCSAgICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgIyBPdGhlcndpc2UsIHVzZSB0aGUgZGxuYW1lLCBzbyB0aGF0IGx0X2Rsb3BlbiBmaW5kcyBpdC4KKwkgICAgICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCisJICAgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRpci8kZGxuYW1lIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorCSAgICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJZmkgIyAkcGFzcyA9IGRscHJlb3BlbgorCisJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICMgTGluayB0aGUgY29udmVuaWVuY2UgbGlicmFyeQorCSAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGlyLyRvbGRfbGlicmFyeSAkZGVwbGlicyIKKwkgIGVsaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIiAjIHVzZWQgZm9yIHByb2csc2NhbiBwYXNzCisJICBmaQorCSAgY29udGludWUKKwlmaQorCisKKwlpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiAmJiB0ZXN0IGxpbmsgIT0gIiRwYXNzIjsgdGhlbgorCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGxhZGlyIgorCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKKworCSAgbGlua2FsbGRlcGxpYnM9ZmFsc2UKKwkgIGlmIHRlc3Qgbm8gIT0gIiRsaW5rX2FsbF9kZXBsaWJzIiB8fCB0ZXN0IC16ICIkbGlicmFyeV9uYW1lcyIgfHwKKwkgICAgIHRlc3Qgbm8gPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwkgICAgbGlua2FsbGRlcGxpYnM9OgorCSAgZmkKKworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisJICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJICAgICAgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKwkJIDs7CisJICAgIGVzYWMKKwkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPworCSAgICBpZiAkbGlua2FsbGRlcGxpYnM7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBsaWJyYXJ5IHBhdGhzCisJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZmkKKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorCSAgZG9uZSAjIGZvciBkZXBsaWIKKwkgIGNvbnRpbnVlCisJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCisKKwlpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICAgIHsgeyB0ZXN0IG5vID0gIiRwcmVmZXJfc3RhdGljX2xpYnMiIHx8CisJICAgICAgICAgdGVzdCBidWlsdCx5ZXMgPSAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIjsgfSB8fAorCSAgICAgICB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCisJICAgICMgV2UgbmVlZCB0byBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoCisJICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC16ICIkYXZvaWR0ZW1wcnBhdGgiOyB0aGVuCisJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICAgIGNhc2UgJHRlbXBfcnBhdGg6IGluCisJICAgICAgKiIkYWJzZGlyOiIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKworCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCisJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKKwkgICAgIyBzZWFyY2ggcGF0aC4KKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KKwkgICAgICAqIiAkYWJzZGlyICIqKSA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGNvbXBpbGVfcnBhdGggIiAkYWJzZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaSAjICRsaW5rbW9kZSwkcGFzcyA9IHByb2csbGluay4uLgorCisJICBpZiAkYWxsZGVwbGlicyAmJgorCSAgICAgeyB0ZXN0IHBhc3NfYWxsID0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgfHwKKwkgICAgICAgeyB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJgorCQkgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiOyB9OyB9OyB0aGVuCisJICAgICMgV2Ugb25seSBuZWVkIHRvIHNlYXJjaCBmb3Igc3RhdGljIGxpYnJhcmllcworCSAgICBjb250aW51ZQorCSAgZmkKKwlmaQorCisJbGlua19zdGF0aWM9bm8gIyBXaGV0aGVyIHRoZSBkZXBsaWIgd2lsbCBiZSBsaW5rZWQgc3RhdGljYWxseQorCXVzZV9zdGF0aWNfbGlicz0kcHJlZmVyX3N0YXRpY19saWJzCisJaWYgdGVzdCBidWlsdCA9ICIkdXNlX3N0YXRpY19saWJzIiAmJiB0ZXN0IHllcyA9ICIkaW5zdGFsbGVkIjsgdGhlbgorCSAgdXNlX3N0YXRpY19saWJzPW5vCisJZmkKKwlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKKwkgICB7IHRlc3Qgbm8gPSAiJHVzZV9zdGF0aWNfbGlicyIgfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiB8ICpvczIqKQorCSAgICAgICMgTm8gcG9pbnQgaW4gcmVsaW5raW5nIERMTHMgYmVjYXVzZSBwYXRocyBhcmUgbm90IGVuY29kZWQKKwkgICAgICBmdW5jX2FwcGVuZCBub3RpbnN0X2RlcGxpYnMgIiAkbGliIgorCSAgICAgIG5lZWRfcmVsaW5rPW5vCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0IG5vID0gIiRpbnN0YWxsZWQiOyB0aGVuCisJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz15ZXMKKwkgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgVGhpcyBpcyBhIHNoYXJlZCBsaWJyYXJ5CisKKwkgICMgV2FybiBhYm91dCBwb3J0YWJpbGl0eSwgY2FuJ3QgbGluayBhZ2FpbnN0IC1tb2R1bGUncyBvbiBzb21lCisJICAjIHN5c3RlbXMgKGRhcndpbikuICBEb24ndCBibGVhdCBhYm91dCBkbG9wZW5lZCBtb2R1bGVzIHRob3VnaCEKKwkgIGRsb3Blbm1vZHVsZT0KKwkgIGZvciBkbHByZW1vZHVsZXRlc3QgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgIGlmIHRlc3QgIlgkZGxwcmVtb2R1bGV0ZXN0IiA9ICJYJGxpYiI7IHRoZW4KKwkgICAgICBkbG9wZW5tb2R1bGU9JGRscHJlbW9kdWxldGVzdAorCSAgICAgIGJyZWFrCisJICAgIGZpCisJICBkb25lCisJICBpZiB0ZXN0IC16ICIkZGxvcGVubW9kdWxlIiAmJiB0ZXN0IHllcyA9ICIkc2hvdWxkbm90bGluayIgJiYgdGVzdCBsaW5rID0gIiRwYXNzIjsgdGhlbgorCSAgICBlY2hvCisJICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBlbHNlCisJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKKwkgICAgZmkKKwkgICAgJEVDSE8gIioqKiAkbGlua2xpYiBpcyBub3QgcG9ydGFibGUhIgorCSAgZmkKKwkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSIgJiYKKwkgICAgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9pbnRvX2xpYnMiOyB0aGVuCisJICAgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aC4KKwkgICAgIyBTa2lwIGRpcmVjdG9yaWVzIHRoYXQgYXJlIGluIHRoZSBzeXN0ZW0gZGVmYXVsdCBydW4tdGltZQorCSAgICAjIHNlYXJjaCBwYXRoLgorCSAgICBjYXNlICIgJHN5c19saWJfZGxzZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICopCisJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgorCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgY2FzZSAiICRzeXNfbGliX2Rsc2VhcmNoX3BhdGggIiBpbgorCSAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAqKQorCSAgICAgIGNhc2UgIiRmaW5hbGl6ZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyI7IHRoZW4KKwkgICAgIyBmaWd1cmUgb3V0IHRoZSBzb25hbWUKKwkgICAgc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJICAgIHNoaWZ0CisJICAgIHJlYWxuYW1lPSQxCisJICAgIHNoaWZ0CisJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCSAgICAjIHVzZSBkbG5hbWUgaWYgd2UgZ290IGl0LiBpdCdzIHBlcmZlY3RseSBnb29kLCBubz8KKwkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICBzb25hbWU9JGRsbmFtZQorCSAgICBlbGlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgICAgICAjIGJsZWggd2luZG93cworCSAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICAqY3lnd2luKiB8IG1pbmd3KiB8ICpjZWdjYyogfCAqb3MyKikKKwkgICAgICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJCW1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQl2ZXJzdWZmaXg9LSRtYWpvcgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisJICAgIGVsc2UKKwkgICAgICBzb25hbWU9JHJlYWxuYW1lCisJICAgIGZpCisKKwkgICAgIyBNYWtlIGEgbmV3IG5hbWUgZm9yIHRoZSBleHRyYWN0X2V4cHN5bXNfY21kcyB0byB1c2UKKwkgICAgc29yb290PSRzb25hbWUKKwkgICAgZnVuY19iYXNlbmFtZSAiJHNvcm9vdCIKKwkgICAgc29uYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICBmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmRsbCcgIiRzb25hbWUiCisJICAgIG5ld2xpYj1saWJpbXAtJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5hCisKKwkgICAgIyBJZiB0aGUgbGlicmFyeSBoYXMgbm8gZXhwb3J0IGxpc3QsIHRoZW4gY3JlYXRlIG9uZSBub3cKKwkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYiOyB0aGVuIDoKKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tICckc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKworCSAgICAjIENyZWF0ZSAkbmV3bGliCisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgaW1wb3J0IGxpYnJhcnkgZm9yICckc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKKwkgICAgZmkKKwkgICAgIyBtYWtlIHN1cmUgdGhlIGxpYnJhcnkgdmFyaWFibGVzIGFyZSBwb2ludGluZyB0byB0aGUgbmV3IGxpYnJhcnkKKwkgICAgZGlyPSRvdXRwdXRfb2JqZGlyCisJICAgIGxpbmtsaWI9JG5ld2xpYgorCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCisKKwkgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiIHx8IHRlc3QgcmVsaW5rICE9ICIkb3B0X21vZGUiOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgbGliX2xpbmtlZD15ZXMKKwkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCisJICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX2RpcmVjdCI7IHRoZW4KKwkJYWRkPSRkaXIvJGxpbmtsaWIKKwkJY2FzZSAkaG9zdCBpbgorCQkgICotKi1zY28zLjJ2NS4wLlswMjRdKikgYWRkX2Rpcj0tTCRkaXIgOzsKKwkJICAqLSotc3lzdjQqdXcyKikgYWRkX2Rpcj0tTCRkaXIgOzsKKwkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKKwkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPS1MJGRpciA7OworCQkgICotKi1kYXJ3aW4qICkKKwkJICAgICMgaWYgdGhlIGxpYiBpcyBhIChub24tZGxvcGVuZWQpIG1vZHVsZSB0aGVuIHdlIGNhbm5vdAorCQkgICAgIyBsaW5rIGFnYWluc3QgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIGVhcmxpZXIgd2FybmluZ3MKKwkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAorCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbDsgdGhlbgorCQkgICAgICBpZiB0ZXN0ICJYJGRsb3Blbm1vZHVsZSIgIT0gIlgkbGliIjsgdGhlbgorCQkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaWIgJGxpbmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBhIHNoYXJlZCBsaWJyYXJ5IgorCQkJaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCQkJICBlY2hvCisJCQkgIGVjaG8gIioqKiBBbmQgdGhlcmUgZG9lc24ndCBzZWVtIHRvIGJlIGEgc3RhdGljIGFyY2hpdmUgYXZhaWxhYmxlIgorCQkJICBlY2hvICIqKiogVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKKwkJCWVsc2UKKwkJCSAgYWRkPSRkaXIvJG9sZF9saWJyYXJ5CisJCQlmaQorCQkgICAgICBlbGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkJCWFkZD0kZGlyLyRvbGRfbGlicmFyeQorCQkgICAgICBmaQorCQkgICAgZmkKKwkJZXNhYworCSAgICAgIGVsaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KKwkJY2FzZSAkaG9zdCBpbgorCQkqLSotc3Vub3MqKSBhZGRfc2hsaWJwYXRoPSRkaXIgOzsKKwkJZXNhYworCQlhZGRfZGlyPS1MJGRpcgorCQlhZGQ9LWwkbmFtZQorCSAgICAgIGVsaWYgdGVzdCBubyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0kZGlyCisJCWFkZD0tbCRuYW1lCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICByZWxpbmspCisJICAgICAgaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKKwkgICAgICAgICB0ZXN0IG5vID0gIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiOyB0aGVuCisJCWFkZD0kZGlyLyRsaW5rbGliCisJICAgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KKwkJYWRkX2Rpcj0tTCRhYnNkaXIKKwkJIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQkgIGNhc2UgJGxpYmRpciBpbgorCQkgICAgW1xcL10qKQorCQkgICAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKKwkJICAgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWFkZD0tbCRuYW1lCisJICAgICAgZWxpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkJYWRkX3NobGlicGF0aD0kZGlyCisJCWFkZD0tbCRuYW1lCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICAqKSBsaWJfbGlua2VkPW5vIDs7CisJICAgIGVzYWMKKworCSAgICBpZiB0ZXN0IHllcyAhPSAiJGxpYl9saW5rZWQiOyB0aGVuCisJICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9wZXJ0aWVzIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRhZGRfc2hsaWJwYXRoIjsgdGhlbgorCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3NobGlicGF0aCAiJGFkZF9zaGxpYnBhdGg6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkX2RpciAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZCAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisJICAgICAgaWYgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9kaXJlY3QiICYmCisJCSB0ZXN0IHllcyAhPSAiJGhhcmRjb2RlX21pbnVzX0wiICYmCisJCSB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkJKiI6JGxpYmRpcjoiKikgOzsKKwkJKikgZnVuY19hcHBlbmQgZmluYWxpemVfc2hsaWJwYXRoICIkbGliZGlyOiIgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCisJICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiB8fCB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCisJICAgIGFkZF9zaGxpYnBhdGg9CisJICAgIGFkZF9kaXI9CisJICAgIGFkZD0KKwkgICAgIyBGaW5hbGl6ZSBjb21tYW5kIGZvciBib3RoIGlzIHNpbXBsZToganVzdCBoYXJkY29kZSBpdC4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKKwkgICAgICAgdGVzdCBubyA9ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIjsgdGhlbgorCSAgICAgIGFkZD0kbGliZGlyLyRsaW5rbGliCisJICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCisJICAgICAgYWRkX2Rpcj0tTCRsaWJkaXIKKwkgICAgICBhZGQ9LWwkbmFtZQorCSAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgorCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJICAgICAgKiI6JGxpYmRpcjoiKikgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgICBhZGQ9LWwkbmFtZQorCSAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciIgJiYKKwkJIHRlc3QgLWYgIiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIjsgdGhlbgorCQlhZGQ9JGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIKKwkgICAgICBlbHNlCisJCWFkZD0kbGliZGlyLyRsaW5rbGliCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisJICAgICAgYWRkX2Rpcj0tTCRsaWJkaXIKKwkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCisJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkJY2FzZSAkbGliZGlyIGluCisJCSAgW1xcL10qKQorCQkgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCisJCSAgICA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgICBhZGQ9LWwkbmFtZQorCSAgICBmaQorCisJICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgZmkKKwkgIGZpCisJZWxpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAorCSAgIyBpcyBub3QgdW5zdXBwb3J0ZWQuICBUaGlzIGlzIHZhbGlkIG9uIGFsbCBrbm93biBzdGF0aWMgYW5kCisJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCisJICBpZiB0ZXN0IHVuc3VwcG9ydGVkICE9ICIkaGFyZGNvZGVfZGlyZWN0IjsgdGhlbgorCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9JG9sZF9saWJyYXJ5CisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBjb21waWxlX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZmkKKwllbGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisJICAjIE5vdCBhIHNoYXJlZCBsaWJyYXJ5CisJICBpZiB0ZXN0IHBhc3NfYWxsICE9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCisJICAgICMgV2UncmUgdHJ5aW5nIGxpbmsgYSBzaGFyZWQgbGlicmFyeSBhZ2FpbnN0IGEgc3RhdGljIG9uZQorCSAgICAjIGJ1dCB0aGUgc3lzdGVtIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKworCSAgICAjIEp1c3QgcHJpbnQgYSB3YXJuaW5nIGFuZCBhZGQgdGhlIGxpYnJhcnkgdG8gZGVwZW5kZW5jeV9saWJzIHNvCisJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgorCSAgICBlY2hvCisJICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2Fubm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgorCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUuIgorCSAgICBpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIjsgdGhlbgorCSAgICAgIGVjaG8gIioqKiBCdXQgYXMgeW91IHRyeSB0byBidWlsZCBhIG1vZHVsZSBsaWJyYXJ5LCBsaWJ0b29sIHdpbGwgc3RpbGwgY3JlYXRlICIKKwkgICAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICBlY2hvICIqKiogaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZyB0byByZXNvbHZlIHN5bWJvbHMgYXQgcnVudGltZS4iCisJICAgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKwkJZWNobworCQllY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyAnbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCQllY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJCWVjaG8gIioqKiAnbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgICAgZmkKKwkgICAgICBpZiB0ZXN0IG5vID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBlbHNlCisJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgorCSAgICBsaW5rX3N0YXRpYz15ZXMKKwkgIGZpCisJZmkgIyBsaW5rIHNoYXJlZC9zdGF0aWMgbGlicmFyeT8KKworCWlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRkZXBlbmRlbmN5X2xpYnMiICYmCisJICAgICB7IHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfaW50b19saWJzIiB8fAorCSAgICAgICB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiIHx8CisJICAgICAgIHRlc3QgeWVzID0gIiRsaW5rX3N0YXRpYyI7IH07IHRoZW4KKwkgICAgIyBFeHRyYWN0IC1SIGZyb20gZGVwZW5kZW5jeV9saWJzCisJICAgIHRlbXBfZGVwbGlicz0KKwkgICAgZm9yIGxpYmRpciBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIGNhc2UgJGxpYmRpciBpbgorCSAgICAgIC1SKikgZnVuY19zdHJpcG5hbWUgJy1SJyAnJyAiJGxpYmRpciIKKwkgICAgICAgICAgIHRlbXBfeHJwYXRoPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CisJCSAgICopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICR0ZW1wX3hycGF0aCI7OworCQkgICBlc2FjOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX2RlcGxpYnMgIiAkbGliZGlyIjs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0kdGVtcF9kZXBsaWJzCisJICBmaQorCisJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkYWJzZGlyIgorCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBsaWJyYXJ5CisJICB0ZXN0IG5vID0gIiRsaW5rX3N0YXRpYyIgJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkYWJzX2xhZGlyLyRsYW5hbWUgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICMgLi4uIGFuZCBpdHMgZGVwZW5kZW5jeV9saWJzCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGNhc2UgJGRlcGxpYiBpbgorICAgICAgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lICctTCcgJycgIiRkZXBsaWIiCisgICAgICAgICAgICAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOzsKKyAgICAgICAgICAgICAgKikgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiIDs7CisgICAgICAgICAgICBlc2FjCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHM7IHRoZW4KKwkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQgIiopCisgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgorCSAgZG9uZQorCisJICBpZiB0ZXN0IG5vICE9ICIkbGlua19hbGxfZGVwbGlicyI7IHRoZW4KKwkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKwkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIHBhdGg9CisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgLUwqKSBwYXRoPSRkZXBsaWIgOzsKKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJICAgICAgICBkZXBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgICAgICAgZnVuY19kaXJuYW1lICIkZGVwbGliIiAiIiAiLiIKKwkJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisJCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgorCQljYXNlICRkaXIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9JGRpciA7OworCQkqKQorCQkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkJICBpZiB0ZXN0IC16ICIkYWJzZGlyIjsgdGhlbgorCQkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckZGlyJyIKKwkJICAgIGFic2Rpcj0kZGlyCisJCSAgZmkKKwkJICA7OworCQllc2FjCisJCWlmICRHUkVQICJeaW5zdGFsbGVkPW5vIiAkZGVwbGliID4gL2Rldi9udWxsOyB0aGVuCisJCWNhc2UgJGhvc3QgaW4KKwkJKi0qLWRhcndpbiopCisJCSAgZGVwZGVwbD0KKwkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCRTRUQgLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIjsgdGhlbgorCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lczsgZG8KKwkJICAgICAgZGVwZGVwbD0kdG1wCisJCSAgICBkb25lCisJCSAgICBpZiB0ZXN0IC1mICIkYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwiOyB0aGVuCisJCSAgICAgIGRlcGRlcGw9JGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsCisJCSAgICAgIGRhcndpbl9pbnN0YWxsX25hbWU9YCRPVE9PTCAtTCAkZGVwZGVwbCB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJE9UT09MNjQgLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAorICAgICAgICAgICAgICAgICAgICAgIGZpCisJCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsLWR5bGliX2ZpbGUgJHdsJGRhcndpbl9pbnN0YWxsX25hbWU6JGRlcGRlcGwiCisJCSAgICAgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiIC1keWxpYl9maWxlICRkYXJ3aW5faW5zdGFsbF9uYW1lOiRkZXBkZXBsIgorCQkgICAgICBwYXRoPQorCQkgICAgZmkKKwkJICBmaQorCQkgIDs7CisJCSopCisJCSAgcGF0aD0tTCRhYnNkaXIvJG9iamRpcgorCQkgIDs7CisJCWVzYWMKKwkJZWxzZQorCQkgIGV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIickZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfd2FybmluZyAiJyRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgorCisJCSAgcGF0aD0tTCRhYnNkaXIKKwkJZmkKKwkJOzsKKwkgICAgICBlc2FjCisJICAgICAgY2FzZSAiICRkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkcGF0aCAiKikgOzsKKwkgICAgICAqKSBkZXBsaWJzPSIkcGF0aCAkZGVwbGlicyIgOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgIGZpICMgbGlua19hbGxfZGVwbGlicyAhPSBubworCWZpICMgbGlua21vZGUgPSBsaWIKKyAgICAgIGRvbmUgIyBmb3IgZGVwbGliIGluICRsaWJzCisgICAgICBpZiB0ZXN0IGxpbmsgPSAiJHBhc3MiOyB0aGVuCisJaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRjb21waWxlX2RlcGxpYnMiCisJICBmaW5hbGl6ZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGZpbmFsaXplX2RlcGxpYnMiCisJZWxzZQorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAiYCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmkKKyAgICAgIGZpCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JG5ld2RlcGVuZGVuY3lfbGlicworICAgICAgaWYgdGVzdCBkbHByZW9wZW4gPSAiJHBhc3MiOyB0aGVuCisJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcworCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgZGxvcGVuICE9ICIkcGFzcyI7IHRoZW4KKwl0ZXN0IGNvbnYgPSAiJHBhc3MiIHx8IHsKKwkgICMgTWFrZSBzdXJlIGxpYl9zZWFyY2hfcGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KKwkgIGxpYl9zZWFyY2hfcGF0aD0KKwkgIGZvciBkaXIgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aDsgZG8KKwkgICAgY2FzZSAiJGxpYl9zZWFyY2hfcGF0aCAiIGluCisJICAgICoiICRkaXIgIiopIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKwl9CisKKwlpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCisJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwllbHNlCisJICB2YXJzPWRlcGxpYnMKKwlmaQorCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisJICBuZXdfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworCSAgICAjICAgICAgICB0aGF0IHNvbWUgbmFzdHkgZGVwZW5kZW5jeSBsb29wIGlzbid0IGFjY2lkZW50YWxseQorCSAgICAjICAgICAgICBicm9rZW46CisJICAgICNuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCisJICAgICMgUHJhZ21hdGljYWxseSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgorCSAgICAjIHByYWN0aWNlOgorCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgIC1SKikgOzsKKwkgICAgKikKKwkgICAgICAjIEFuZCBoZXJlIGlzIHRoZSByZWFzb246IHdoZW4gYSBsaWJyYXJ5IGFwcGVhcnMgbW9yZQorCSAgICAgICMgdGhhbiBvbmNlIGFzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ugb2YgYSBsaWJyYXJ5LCBvcgorCSAgICAgICMgaXMgaW1wbGljaXRseSBsaW5rZWQgaW4gbW9yZSB0aGFuIG9uY2UgYnkgdGhlCisJICAgICAgIyBjb21waWxlciwgaXQgaXMgY29uc2lkZXJlZCBzcGVjaWFsLCBhbmQgbXVsdGlwbGUKKwkgICAgICAjIG9jY3VycmVuY2VzIHRoZXJlb2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0aGlzCisJICAgICAgIyB3aXRoIGhhdmluZyB0aGUgc2FtZSBsaWJyYXJ5IGJlaW5nIGxpc3RlZCBhcyBhCisJICAgICAgIyBkZXBlbmRlbmN5IG9mIG11bHRpcGxlIG90aGVyIGxpYnJhcmllczogaW4gdGhpcyBjYXNlLAorCSAgICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisJICAgICAgIyBuZWVkIHRvIGJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSwgc28gd2Uga2VlcCBvbmx5IHRoZQorCSAgICAgICMgbGFzdCBjb3B5LiAgVGhpcyBpcyBub3QgYWx3YXlzIHJpZ2h0LCBidXQgaXQgaXMgcmFyZQorCSAgICAgICMgZW5vdWdoIHRoYXQgd2UgcmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFuIHRvIHBsYXkKKwkgICAgICAjIHN1Y2ggdW5wb3J0YWJsZSBsaW5raW5nIHRyaWNrcyB0byBsaW5rIHRoZSBsaWJyYXJ5CisJICAgICAgIyB1c2luZyAtV2wsLWxuYW1lLCBzbyB0aGF0IGxpYnRvb2wgZG9lcyBub3QgY29uc2lkZXIgaXQKKwkgICAgICAjIGZvciBkdXBsaWNhdGUgcmVtb3ZhbC4KKwkgICAgICBjYXNlICIgJHNwZWNpYWxkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICAgKikKKwkJY2FzZSAiICRuZXdfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIDs7CisJCSopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkJZXNhYworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKQorCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCisJZG9uZSAjIGZvciB2YXIKKyAgICAgIGZpCisKKyAgICAgICMgQWRkIFN1biBDQyBwb3N0ZGVwcyBpZiByZXF1aXJlZDoKKyAgICAgIHRlc3QgQ1hYID0gIiR0YWduYW1lIiAmJiB7CisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgbGludXgqKQorICAgICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorICAgICAgICAgICpTdW5cIEMqKSAjIFN1biBDKysgNS45CisgICAgICAgICAgICBmdW5jX3N1bmNjX2NzdGRfYWJpCisKKyAgICAgICAgICAgIGlmIHRlc3Qgbm8gIT0gIiRzdW5jY191c2VfY3N0ZF9hYmkiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHBvc3RkZXBzICcgLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisKKyAgICAgICAgc29sYXJpcyopCisgICAgICAgICAgZnVuY19jY19iYXNlbmFtZSAiJENDIgorICAgICAgICAgIGNhc2UgJGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0IGluCisgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorICAgICAgICAgICAgZnVuY19zdW5jY19jc3RkX2FiaQorCisgICAgICAgICAgICBpZiB0ZXN0IG5vICE9ICIkc3VuY2NfdXNlX2NzdGRfYWJpIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwb3N0ZGVwcyAnIC1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICB9CisKKyAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCisgICAgICAjICh0aGV5IHN0YXkgaW4gZGVwbGlicykKKyAgICAgIHRtcF9saWJzPQorICAgICAgZm9yIGkgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KKwljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICRjb21waWxlcl9saWJfc2VhcmNoX3BhdGggIiBpbgorCSoiICRpICIqKQorCSAgaT0KKwkgIDs7CisJZXNhYworCWlmIHRlc3QgLW4gIiRpIjsgdGhlbgorCSAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkaSIKKwlmaQorICAgICAgZG9uZQorICAgICAgZGVwZW5kZW5jeV9saWJzPSR0bXBfbGlicworICAgIGRvbmUgIyBmb3IgcGFzcworICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCisgICAgICBkbGZpbGVzPSRuZXdkbGZpbGVzCisgICAgZmkKKyAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIiB8fCB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCisgICAgICBkbHByZWZpbGVzPSRuZXdkbHByZWZpbGVzCisgICAgZmkKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCBubyAhPSAiJGRsc2VsZiI7IHRoZW4KKwlmdW5jX3dhcm5pbmcgIictZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KKyAgICAgICpcIC1sKiB8ICpcIC1MKikKKwlmdW5jX3dhcm5pbmcgIictbCcgYW5kICctTCcgYXJlIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICInLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIictdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICInLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictZXhwb3J0LXN5bWJvbHMnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCisgICAgICAjIE5vdyBzZXQgdGhlIHZhcmlhYmxlcyBmb3IgYnVpbGRpbmcgb2xkIGxpYnJhcmllcy4KKyAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICAgICAgb2xkbGlicz0kb3V0cHV0CisgICAgICBmdW5jX2FwcGVuZCBvYmpzICIkb2xkX2RlcGxpYnMiCisgICAgICA7OworCisgICAgbGliKQorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gJ2xpYk5BTUUubGEnLgorICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorICAgICAgbGliKikKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OworICAgICAgKikKKwl0ZXN0IG5vID0gIiRtb2R1bGUiIFwKKwkgICYmIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5ICckb3V0cHV0JyBtdXN0IGJlZ2luIHdpdGggJ2xpYiciCisKKwlpZiB0ZXN0IG5vICE9ICIkbmVlZF9saWJfcHJlZml4IjsgdGhlbgorCSAgIyBBZGQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcyBpZiByZXF1aXJlZAorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICBldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisJZWxzZQorCSAgZnVuY19zdHJpcG5hbWUgJycgJy5sYScgIiRvdXRwdXRuYW1lIgorCSAgbGlibmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJZmkKKwk7OworICAgICAgZXNhYworCisgICAgICBpZiB0ZXN0IC1uICIkb2JqcyI7IHRoZW4KKwlpZiB0ZXN0IHBhc3NfYWxsICE9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlidG9vbCBsaWJyYXJ5ICckb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgorCWVsc2UKKwkgIGVjaG8KKwkgICRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSBub24tbGlidG9vbCIKKwkgICRFQ0hPICIqKiogb2JqZWN0cyAkb2JqcyBpcyBub3QgcG9ydGFibGUhIgorCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRvYmpzIgorCWZpCisgICAgICBmaQorCisgICAgICB0ZXN0IG5vID0gIiRkbHNlbGYiIFwKKwl8fCBmdW5jX3dhcm5pbmcgIictZGxvcGVuIHNlbGYnIGlzIGlnbm9yZWQgZm9yIGxpYnRvb2wgbGlicmFyaWVzIgorCisgICAgICBzZXQgZHVtbXkgJHJwYXRoCisgICAgICBzaGlmdAorICAgICAgdGVzdCAxIC1sdCAiJCMiIFwKKwkmJiBmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlICctcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisKKyAgICAgIGluc3RhbGxfbGliZGlyPSQxCisKKyAgICAgIG9sZGxpYnM9CisgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwkgICMgQnVpbGRpbmcgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnkuCisJICAjIFNvbWUgY29tcGlsZXJzIGhhdmUgcHJvYmxlbXMgd2l0aCBhICcuYWwnIGV4dGVuc2lvbiBzbworCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgZXh0ZW5zaW9uIGFuCisJICAjIGFyY2hpdmUgbm9ybWFsbHkgd291bGQuCisJICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0ICRvbGRsaWJzIgorCSAgYnVpbGRfbGlidG9vbF9saWJzPWNvbnZlbmllbmNlCisJICBidWlsZF9vbGRfbGlicz15ZXMKKwlmaQorCisJdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJICBmdW5jX3dhcm5pbmcgIictdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorCisJdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCisgICAgICBlbHNlCisKKwkjIFBhcnNlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFyZ3VtZW50LgorCXNhdmVfaWZzPSRJRlM7IElGUz06CisJc2V0IGR1bW15ICR2aW5mbyAwIDAgMAorCXNoaWZ0CisJSUZTPSRzYXZlX2lmcworCisJdGVzdCAtbiAiJDciICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAidG9vIG1hbnkgcGFyYW1ldGVycyB0byAnLXZlcnNpb24taW5mbyciCisKKwkjIGNvbnZlcnQgYWJzb2x1dGUgdmVyc2lvbiBudW1iZXJzIHRvIGxpYnRvb2wgYWdlcworCSMgdGhpcyByZXRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmlsZXMgYW5kIGF0dGVtcHRzCisJIyB0byBtYWtlIHRoZSBjb2RlIGJlbG93IGEgYml0IG1vcmUgY29tcHJlaGVuc2libGUKKworCWNhc2UgJHZpbmZvX251bWJlciBpbgorCXllcykKKwkgIG51bWJlcl9tYWpvcj0kMQorCSAgbnVtYmVyX21pbm9yPSQyCisJICBudW1iZXJfcmV2aXNpb249JDMKKwkgICMKKwkgICMgVGhlcmUgYXJlIHJlYWxseSBvbmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0CisJICAjIHVzZSB0aGUgY3VycmVudCByZXZpc2lvbiBhcyB0aGUgbWFqb3IgdmVyc2lvbgorCSAgIyBhbmQgdGhvc2UgdGhhdCBzdWJ0cmFjdCBhZ2UgYW5kIHVzZSBhZ2UgYXMKKwkgICMgYSBtaW5vciB2ZXJzaW9uLiAgQnV0LCB0aGVuIHRoZXJlIGlzIGlyaXgKKwkgICMgdGhhdCBoYXMgYW4gZXh0cmEgMSBhZGRlZCBqdXN0IGZvciBmdW4KKwkgICMKKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgIyBjb3JyZWN0IGxpbnV4IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJICBkYXJ3aW58ZnJlZWJzZC1lbGZ8bGludXh8b3NmfHdpbmRvd3N8bm9uZSkKKwkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgorCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBhZ2U9JG51bWJlcl9taW5vcgorCSAgICByZXZpc2lvbj0kbnVtYmVyX3JldmlzaW9uCisJICAgIDs7CisJICBmcmVlYnNkLWFvdXR8cW54fHN1bm9zKQorCSAgICBjdXJyZW50PSRudW1iZXJfbWFqb3IKKwkgICAgcmV2aXNpb249JG51bWJlcl9taW5vcgorCSAgICBhZ2U9MAorCSAgICA7OworCSAgaXJpeHxub25zdG9wdXgpCisJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKKwkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgYWdlPSRudW1iZXJfbWlub3IKKwkgICAgcmV2aXNpb249JG51bWJlcl9taW5vcgorCSAgICBsdF9pcml4X2luY3JlbWVudD1ubworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlubykKKwkgIGN1cnJlbnQ9JDEKKwkgIHJldmlzaW9uPSQyCisJICBhZ2U9JDMKKwkgIDs7CisJZXNhYworCisJIyBDaGVjayB0aGF0IGVhY2ggb2YgdGhlIHRoaW5ncyBhcmUgdmFsaWQgbnVtYmVycy4KKwljYXNlICRjdXJyZW50IGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICBmdW5jX2Vycm9yICJDVVJSRU5UICckY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcmV2aXNpb24gaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgIGZ1bmNfZXJyb3IgIlJFVklTSU9OICckcmV2aXNpb24nIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICA7OworCWVzYWMKKworCWNhc2UgJGFnZSBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgZnVuY19lcnJvciAiQUdFICckYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIickdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgorCSAgOzsKKwllc2FjCisKKwlpZiB0ZXN0ICIkYWdlIiAtZ3QgIiRjdXJyZW50IjsgdGhlbgorCSAgZnVuY19lcnJvciAiQUdFICckYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciAnJGN1cnJlbnQnIgorCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJZmkKKworCSMgQ2FsY3VsYXRlIHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4KKwltYWpvcj0KKwl2ZXJzdWZmaXg9CisJdmVyc3RyaW5nPQorCWNhc2UgJHZlcnNpb25fdHlwZSBpbgorCW5vbmUpIDs7CisKKwlkYXJ3aW4pCisJICAjIExpa2UgTGludXgsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gYXZhaWxhYmxlIGluCisJICAjIHZlcnN0cmluZyBmb3IgY29kaW5nIGl0IGludG8gdGhlIGxpYnJhcnkgaGVhZGVyCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSRtYWpvci4kYWdlLiRyZXZpc2lvbgorCSAgIyBEYXJ3aW4gbGQgZG9lc24ndCBsaWtlIDAgZm9yIHRoZXNlIG9wdGlvbnMuLi4KKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgKyAxCisJICBtaW5vcl9jdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgeGxjdmVyc3RyaW5nPSIkd2wtY29tcGF0aWJpbGl0eV92ZXJzaW9uICR3bCRtaW5vcl9jdXJyZW50ICR3bC1jdXJyZW50X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorCSAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorICAgICAgICAgICMgT24gRGFyd2luIG90aGVyIGNvbXBpbGVycworICAgICAgICAgIGNhc2UgJENDIGluCisgICAgICAgICAgICAgIG5hZ2ZvciopCisgICAgICAgICAgICAgICAgICB2ZXJzdHJpbmc9IiR3bC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQgJHdsLWN1cnJlbnRfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgdmVyc3RyaW5nPSItY29tcGF0aWJpbGl0eV92ZXJzaW9uICRtaW5vcl9jdXJyZW50IC1jdXJyZW50X3ZlcnNpb24gJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjCisJICA7OworCisJZnJlZWJzZC1hb3V0KQorCSAgbWFqb3I9LiRjdXJyZW50CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50LiRyZXZpc2lvbgorCSAgOzsKKworCWZyZWVic2QtZWxmKQorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKKwkgIHZlcnN1ZmZpeD0kbWFqb3IuJGFnZS4kcmV2aXNpb24KKwkgIDs7CisKKwlpcml4IHwgbm9uc3RvcHV4KQorCSAgaWYgdGVzdCBubyA9ICIkbHRfaXJpeF9pbmNyZW1lbnQiOyB0aGVuCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBlbHNlCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlICsgMQorCSAgZmkKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OworCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisJICBlc2FjCisJICB2ZXJzdHJpbmc9JHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJHJldmlzaW9uCisKKwkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCisJICBsb29wPSRyZXZpc2lvbgorCSAgd2hpbGUgdGVzdCAwIC1uZSAiJGxvb3AiOyBkbworCSAgICBmdW5jX2FyaXRoICRyZXZpc2lvbiAtICRsb29wCisJICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQorCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgICB2ZXJzdHJpbmc9JHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmcKKwkgIGRvbmUKKworCSAgIyBCZWZvcmUgdGhpcyBwb2ludCwgJG1ham9yIG11c3Qgbm90IGNvbnRhaW4gJy4nLgorCSAgbWFqb3I9LiRtYWpvcgorCSAgdmVyc3VmZml4PSRtYWpvci4kcmV2aXNpb24KKwkgIDs7CisKKwlsaW51eCkgIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PSRtYWpvci4kYWdlLiRyZXZpc2lvbgorCSAgOzsKKworCW9zZikKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uCisJICB2ZXJzdHJpbmc9JGN1cnJlbnQuJGFnZS4kcmV2aXNpb24KKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JGFnZQorCSAgd2hpbGUgdGVzdCAwIC1uZSAiJGxvb3AiOyBkbworCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIHZlcnN0cmluZz0kdmVyc3RyaW5nOiRpZmFjZS4wCisJICBkb25lCisKKwkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KKwkgIGZ1bmNfYXBwZW5kIHZlcnN0cmluZyAiOiRjdXJyZW50LjAiCisJICA7OworCisJcW54KQorCSAgbWFqb3I9LiRjdXJyZW50CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50CisJICA7OworCisJc2NvKQorCSAgbWFqb3I9LiRjdXJyZW50CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50CisJICA7OworCisJc3Vub3MpCisJICBtYWpvcj0uJGN1cnJlbnQKKwkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQuJHJldmlzaW9uCisJICA7OworCisJd2luZG93cykKKwkgICMgVXNlICctJyByYXRoZXIgdGhhbiAnLicsIHNpbmNlIHdlIG9ubHkgd2FudCBvbmUKKwkgICMgZXh0ZW5zaW9uIG9uIERPUyA4LjMgZmlsZSBzeXN0ZW1zLgorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCSAgdmVyc3VmZml4PS0kbWFqb3IKKwkgIDs7CisKKwkqKQorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlICckdmVyc2lvbl90eXBlJyIKKwkgIDs7CisJZXNhYworCisJIyBDbGVhciB0aGUgdmVyc2lvbiBpbmZvIGlmIHdlIGRlZmF1bHRlZCwgYW5kIHRoZXkgc3BlY2lmaWVkIGEgcmVsZWFzZS4KKwlpZiB0ZXN0IC16ICIkdmluZm8iICYmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgorCSAgbWFqb3I9CisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbikKKwkgICAgIyB3ZSBjYW4ndCBjaGVjayBmb3IgIjAuMCIgaW4gYXJjaGl2ZV9jbWRzIGR1ZSB0byBxdW90aW5nCisJICAgICMgcHJvYmxlbXMsIHNvIHdlIHJlc2V0IGl0IGNvbXBsZXRlbHkKKwkgICAgdmVyc3RyaW5nPQorCSAgICA7OworCSAgKikKKwkgICAgdmVyc3RyaW5nPTAuMAorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCBubyA9ICIkbmVlZF92ZXJzaW9uIjsgdGhlbgorCSAgICB2ZXJzdWZmaXg9CisJICBlbHNlCisJICAgIHZlcnN1ZmZpeD0uMC4wCisJICBmaQorCWZpCisKKwkjIFJlbW92ZSB2ZXJzaW9uIGluZm8gZnJvbSBuYW1lIGlmIHZlcnNpb25pbmcgc2hvdWxkIGJlIGF2b2lkZWQKKwlpZiB0ZXN0IHllcyxubyA9ICIkYXZvaWRfdmVyc2lvbiwkbmVlZF92ZXJzaW9uIjsgdGhlbgorCSAgbWFqb3I9CisJICB2ZXJzdWZmaXg9CisJICB2ZXJzdHJpbmc9CisJZmkKKworCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSB1bmRlZmluZWQgc3ltYm9scy4KKwlpZiB0ZXN0IHllcyA9ICIkYWxsb3dfdW5kZWZpbmVkIjsgdGhlbgorCSAgaWYgdGVzdCB1bnN1cHBvcnRlZCA9ICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkgICAgICBmdW5jX3dhcm5pbmcgInVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXM7IGJ1aWxkaW5nIHN0YXRpYyBvbmx5IgorCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICBlbHNlCisJICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2FuJ3QgYnVpbGQgJGhvc3Qgc2hhcmVkIGxpYnJhcnkgdW5sZXNzIC1uby11bmRlZmluZWQgaXMgc3BlY2lmaWVkIgorCSAgICBmaQorCSAgZmkKKwllbHNlCisJICAjIERvbid0IGFsbG93IHVuZGVmaW5lZCBzeW1ib2xzLgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JG5vX3VuZGVmaW5lZF9mbGFnCisJZmkKKworICAgICAgZmkKKworICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiIDoKKyAgICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkc3ltZmlsZW9iaiIKKyAgICAgIHRlc3QgIiAiID0gIiRsaWJvYmpzIiAmJiBsaWJvYmpzPQorCisgICAgICBpZiB0ZXN0IHJlbGluayAhPSAiJG9wdF9tb2RlIjsgdGhlbgorCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CisJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCisJcmVtb3ZlbGlzdD0KKwl0ZW1wcmVtb3ZlbGlzdD1gJEVDSE8gIiRvdXRwdXRfb2JqZGlyLyoiYAorCWZvciBwIGluICR0ZW1wcmVtb3ZlbGlzdDsgZG8KKwkgIGNhc2UgJHAgaW4KKwkgICAgKi4kb2JqZXh0IHwgKi5nY25vKQorCSAgICAgICA7OworCSAgICAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiogfCAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLiopCisJICAgICAgIGlmIHRlc3QgLW4gIiRwcmVjaW91c19maWxlc19yZWdleCI7IHRoZW4KKwkJIGlmICRFQ0hPICIkcCIgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCisJCSB0aGVuCisJCSAgIGNvbnRpbnVlCisJCSBmaQorCSAgICAgICBmaQorCSAgICAgICBmdW5jX2FwcGVuZCByZW1vdmVsaXN0ICIgJHAiCisJICAgICAgIDs7CisJICAgICopIDs7CisJICBlc2FjCisJZG9uZQorCXRlc3QgLW4gIiRyZW1vdmVsaXN0IiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIiAmJiB0ZXN0IGNvbnZlbmllbmNlICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorCWZ1bmNfYXBwZW5kIG9sZGxpYnMgIiAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCisJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorCW9sZG9ianM9IiRvYmpzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiRsaWJleHQkL2Q7ICRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgICMgRWxpbWluYXRlIGFsbCB0ZW1wb3JhcnkgZGlyZWN0b3JpZXMuCisgICAgICAjZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKyAgICAgICMJbGliX3NlYXJjaF9wYXRoPWAkRUNITyAiJGxpYl9zZWFyY2hfcGF0aCAiIHwgJFNFRCAicyUgJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGxpYnM9YCRFQ0hPICIkZGVwbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICMJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiJGRlcGVuZGVuY3lfbGlicyAiIHwgJFNFRCAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgICNkb25lCisKKyAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCXRlbXBfeHJwYXRoPQorCWZvciBsaWJkaXIgaW4gJHhycGF0aDsgZG8KKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorCSAgZnVuY19hcHBlbmQgdGVtcF94cnBhdGggIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisJaWYgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9pbnRvX2xpYnMiIHx8IHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIGRsZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMgdGhhdCB3b24ndCBiZSBkbHByZW9wZW5lZAorICAgICAgb2xkX2RsZmlsZXM9JGRsZmlsZXMKKyAgICAgIGRsZmlsZXM9CisgICAgICBmb3IgbGliIGluICRvbGRfZGxmaWxlczsgZG8KKwljYXNlICIgJGRscHJlZmlsZXMgJGRsZmlsZXMgIiBpbgorCSoiICRsaWIgIiopIDs7CisJKikgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICAjIE1ha2Ugc3VyZSBkbHByZWZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzCisgICAgICBvbGRfZGxwcmVmaWxlcz0kZGxwcmVmaWxlcworICAgICAgZGxwcmVmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbworCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCisJICBjYXNlICRob3N0IGluCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1iZW9zKiB8ICotY2VnY2MqIHwgKi0qLWhhaWt1KikKKwkgICAgIyB0aGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBjIGxpYnJhcnkgKGFzIHN1Y2gpIQorCSAgICA7OworCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQorCSAgICAjIFJoYXBzb2R5IEMgbGlicmFyeSBpcyBpbiB0aGUgU3lzdGVtIGZyYW1ld29yaworCSAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgU3lzdGVtLmx0ZnJhbWV3b3JrIgorCSAgICA7OworCSAgKi0qLW5ldGJzZCopCisJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICA7OworCSAgKikKKwkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbmVlZF9sYyI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgorCSAgICBmaQorCSAgICA7OworCSAgZXNhYworCWZpCisKKwkjIFRyYW5zZm9ybSBkZXBsaWJzIGludG8gb25seSBkZXBsaWJzIHRoYXQgY2FuIGJlIGxpbmtlZCBpbiBzaGFyZWQuCisJbmFtZV9zYXZlPSRuYW1lCisJbGlibmFtZV9zYXZlPSRsaWJuYW1lCisJcmVsZWFzZV9zYXZlPSRyZWxlYXNlCisJdmVyc3VmZml4X3NhdmU9JHZlcnN1ZmZpeAorCW1ham9yX3NhdmU9JG1ham9yCisJIyBJJ20gbm90IHN1cmUgaWYgSSdtIHRyZWF0aW5nIHRoZSByZWxlYXNlIGNvcnJlY3RseS4gIEkgdGhpbmsKKwkjIHJlbGVhc2Ugc2hvdWxkIHNob3cgdXAgaW4gdGhlIC1sIChpZSAtbGdtcDUpIHNvIHdlIGRvbid0IHdhbnQgdG8KKwkjIGFkZCBpdCBpbiB0d2ljZS4gIElzIHRoYXQgY29ycmVjdD8KKwlyZWxlYXNlPQorCXZlcnN1ZmZpeD0KKwltYWpvcj0KKwluZXdkZXBsaWJzPQorCWRyb3BwZWRkZXBzPW5vCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwlwYXNzX2FsbCkKKwkgICMgRG9uJ3QgY2hlY2sgZm9yIHNoYXJlZC9zdGF0aWMuICBFdmVyeXRoaW5nIHdvcmtzLgorCSAgIyBUaGlzIG1pZ2h0IGJlIGEgbGl0dGxlIG5haXZlLiAgV2UgbWlnaHQgd2FudCB0byBjaGVjaworCSAgIyB3aGV0aGVyIHRoZSBsaWJyYXJ5IGV4aXN0cyBvciBub3QuICBCdXQgdGhpcyBpcyBvbgorCSAgIyBvc2YzICYgb3NmNCBhbmQgSSdtIG5vdCByZWFsbHkgc3VyZS4uLiBKdXN0CisJICAjIGltcGxlbWVudGluZyB3aGF0IHdhcyBhbHJlYWR5IHRoZSBiZWhhdmlvci4KKwkgIG5ld2RlcGxpYnM9JGRlcGxpYnMKKwkgIDs7CisJdGVzdF9jb21waWxlKQorCSAgIyBUaGlzIGNvZGUgc3RyZXNzZXMgdGhlICJsaWJyYXJpZXMgYXJlIHByb2dyYW1zIiBwYXJhZGlnbSB0byBpdHMKKwkgICMgbGltaXRzLiBNYXliZSBldmVuIGJyZWFrcyBpdC4gIFdlIGNvbXBpbGUgYSBwcm9ncmFtLCBsaW5raW5nIGl0CisJICAjIGFnYWluc3QgdGhlIGRlcGxpYnMgYXMgYSBwcm94eSBmb3IgdGhlIGxpYnJhcnkuICBUaGVuIHdlIGNhbiBjaGVjaworCSAgIyB3aGV0aGVyIHRoZXkgbGlua2VkIGluIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHkgd2l0aCBsZGQuCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0LmMKKwkgIGNhdCA+IGNvbmZ0ZXN0LmMgPDxFT0YKKwkgIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQorRU9GCisJICAkb3B0X2RyeV9ydW4gfHwgJFJNIGNvbmZ0ZXN0CisJICBpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGliczsgdGhlbgorCSAgICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCWlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCisJCSAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgKiIgJGkgIiopCisJCSAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCSAgICBpPQorCQkgICAgOzsKKwkJICBlc2FjCisJCWZpCisJCWlmIHRlc3QgLW4gIiRpIjsgdGhlbgorCQkgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAorCQkgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorCQkgIGRlcGxpYl9tYXRjaD0kMQorCQkgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMDsgdGhlbgorCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgIGVsc2UKKwkJICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgZWNobworCQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCisJCSAgICBlY2hvICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgZmkKKwkJZmkKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCTs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBlbHNlCisJICAgICMgRXJyb3Igb2NjdXJyZWQgaW4gdGhlIGZpcnN0IGNvbXBpbGUuICBMZXQncyB0cnkgdG8gc2FsdmFnZQorCSAgICAjIHRoZSBzaXR1YXRpb246IENvbXBpbGUgYSBzZXBhcmF0ZSBwcm9ncmFtIGZvciBlYWNoIGxpYnJhcnkuCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIGNhc2UgJGkgaW4KKwkgICAgICAtbCopCisJCWZ1bmNfc3RyaXBuYW1lIC1sICcnICIkaSIKKwkJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJCSRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QKKwkJaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGk7IHRoZW4KKwkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJCSAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KKwkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICAgKiIgJGkgIiopCisJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKKwkJICAgICAgaT0KKwkJICAgICAgOzsKKwkJICAgIGVzYWMKKwkJICBmaQorCQkgIGlmIHRlc3QgLW4gIiRpIjsgdGhlbgorCQkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCSAgICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisJCSAgICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAorCQkgICAgZGVwbGliX21hdGNoPSQxCisJCSAgICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDA7IHRoZW4KKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQkgICAgZWxzZQorCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKKwkJICAgICAgZWNobworCQkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAgIGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICAgIGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJICAgICAgZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCisJCSAgICAgIGVjaG8gIioqKiBhcyBhIGR5bmFtaWMgZGVwZW5kZW5jeSB0aGF0IHByb2dyYW1zIGNhbiBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICAgIGZpCisJCSAgZmkKKwkJZWxzZQorCQkgIGRyb3BwZWRkZXBzPXllcworCQkgIGVjaG8KKwkJICAkRUNITyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgorCQkgIGVjaG8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKKwkJICBlY2hvICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgorCQkgIGVjaG8gIioqKiBmdW5jdGlvbmFsLiAgSW5zdGFsbGluZyBpdCBiZWZvcmUgY29udGludWluZyB3b3VsZCBiZSBldmVuIGJldHRlci4iCisJCWZpCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgZmkKKwkgIDs7CisJZmlsZV9tYWdpYyopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAorCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCSAgYV9kZXBsaWI9CisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfZ2xvYiI7IHRoZW4KKwkJICBsaWJuYW1lZ2xvYj1gZnVuY19lY2hvX2FsbCAiJGxpYm5hbWUiIHwgJFNFRCAtZSAkZmlsZV9tYWdpY19nbG9iYAorCQllbHNlCisJCSAgbGlibmFtZWdsb2I9JGxpYm5hbWUKKwkJZmkKKwkJdGVzdCB5ZXMgPSAiJHdhbnRfbm9jYXNlZ2xvYiIgJiYgbm9jYXNlZ2xvYj1gc2hvcHQgLXAgbm9jYXNlZ2xvYmAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgaWYgdGVzdCB5ZXMgPSAiJHdhbnRfbm9jYXNlZ2xvYiI7IHRoZW4KKwkJICAgIHNob3B0IC1zIG5vY2FzZWdsb2IKKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICAgICRub2Nhc2VnbG9iCisJCSAgZWxzZQorCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorCQkgIGZpCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgICAjIEZvbGxvdyBzb2Z0IGxpbmtzLgorCQkgICAgICBpZiBscyAtbExkICIkcG90ZW50X2xpYiIgMj4vZGV2L251bGwgfAorCQkJICRHUkVQICIgLT4gIiA+L2Rldi9udWxsOyB0aGVuCisJCQljb250aW51ZQorCQkgICAgICBmaQorCQkgICAgICAjIFRoZSBzdGF0ZW1lbnQgYWJvdmUgdHJpZXMgdG8gYXZvaWQgZW50ZXJpbmcgYW4KKwkJICAgICAgIyBlbmRsZXNzIGxvb3AgYmVsb3csIGluIGNhc2Ugb2YgY3ljbGljIGxpbmtzLgorCQkgICAgICAjIFdlIG1pZ2h0IHN0aWxsIGVudGVyIGFuIGVuZGxlc3MgbG9vcCwgc2luY2UgYSBsaW5rCisJCSAgICAgICMgbG9vcCBjYW4gYmUgY2xvc2VkIHdoaWxlIHdlIGZvbGxvdyBsaW5rcywKKwkJICAgICAgIyBidXQgc28gd2hhdD8KKwkJICAgICAgcG90bGliPSRwb3RlbnRfbGliCisJCSAgICAgIHdoaWxlIHRlc3QgLWggIiRwb3RsaWIiIDI+L2Rldi9udWxsOyBkbworCQkJcG90bGlibGluaz1gbHMgLWxkICRwb3RsaWIgfCAkU0VEICdzLy4qIC0+IC8vJ2AKKwkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KKwkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSRwb3RsaWJsaW5rOzsKKwkJCSopIHBvdGxpYj1gJEVDSE8gIiRwb3RsaWIiIHwgJFNFRCAnc3xbXi9dKiR8fCdgIiRwb3RsaWJsaW5rIjs7CisJCQllc2FjCisJCSAgICAgIGRvbmUKKwkJICAgICAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJHBvdGxpYlwiIDI+L2Rldi9udWxsIHwKKwkJCSAkU0VEIC1lIDEwcSB8CisJCQkgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJCWZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCQlhX2RlcGxpYj0KKwkJCWJyZWFrIDIKKwkJICAgICAgZmkKKwkJICBkb25lCisJCWRvbmUKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiOyB0aGVuCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKKwkJZWxzZQorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRFQ0hPICIqKiogdXNpbmcgYSBmaWxlIG1hZ2ljLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgIGRvbmUgIyBHb25lIHRocm91Z2ggYWxsIGRlcGxpYnMuCisJICA7OworCW1hdGNoX3BhdHRlcm4qKQorCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKKwkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkgIGZvciBhX2RlcGxpYiBpbiAkZGVwbGliczsgZG8KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KKwkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSoiICRhX2RlcGxpYiAiKikKKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgorCQkgIGFfZGVwbGliPQorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KKwkJbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCisJCWZvciBpIGluICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoOyBkbworCQkgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZVsuLV0qIDI+L2Rldi9udWxsYAorCQkgIGZvciBwb3RlbnRfbGliIGluICRwb3RlbnRpYWxfbGliczsgZG8KKwkJICAgIHBvdGxpYj0kcG90ZW50X2xpYiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAorCQkgICAgaWYgZXZhbCAiXCRFQ0hPIFwiJHBvdGVudF9saWJcIiIgMj4vZGV2L251bGwgfCAkU0VEIDEwcSB8IFwKKwkJICAgICAgICRFR1JFUCAiJG1hdGNoX3BhdHRlcm5fcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJCSAgICAgIGFfZGVwbGliPQorCQkgICAgICBicmVhayAyCisJCSAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgorCQlkcm9wcGVkZGVwcz15ZXMKKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiI7IHRoZW4KKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciByZWdleCBwYXR0ZXJuIHRlc3QpIgorCQllbHNlCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIHJlZ2V4IHBhdHRlcm4uIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgorCQlmaQorCSAgICAgIGZpCisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICAjIEFkZCBhIC1MIGFyZ3VtZW50LgorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbm9uZSB8IHVua25vd24gfCAqKQorCSAgbmV3ZGVwbGlicz0KKwkgIHRtcF9kZXBsaWJzPWAkRUNITyAiICRkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyQvLzsgcy8gLVtMUl1bXiBdKi8vZydgCisJICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgorCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCisJICAgICAgIyBjYW4ndCB1c2UgWHNlZCBiZWxvdywgYmVjYXVzZSAkaSBtaWdodCBjb250YWluICcvJworCSAgICAgIHRtcF9kZXBsaWJzPWAkRUNITyAiICR0bXBfZGVwbGlicyIgfCAkU0VEICJzfCRpfHwiYAorCSAgICBkb25lCisJICBmaQorCSAgY2FzZSAkdG1wX2RlcGxpYnMgaW4KKwkgICpbIVwJXCBdKikKKwkgICAgZWNobworCSAgICBpZiB0ZXN0IG5vbmUgPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIjsgdGhlbgorCSAgICAgIGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKKwkgICAgZWxzZQorCSAgICAgIGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHRvIGJlIHN1cHBvcnRlZC4iCisJICAgIGZpCisJICAgIGVjaG8gIioqKiBBbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGRyb3BwZWQuIgorCSAgICBkcm9wcGVkZGVwcz15ZXMKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworCXZlcnN1ZmZpeD0kdmVyc3VmZml4X3NhdmUKKwltYWpvcj0kbWFqb3Jfc2F2ZQorCXJlbGVhc2U9JHJlbGVhc2Vfc2F2ZQorCWxpYm5hbWU9JGxpYm5hbWVfc2F2ZQorCW5hbWU9JG5hbWVfc2F2ZQorCisJY2FzZSAkaG9zdCBpbgorCSotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IHdpdGggdGhlIFN5c3RlbSBmcmFtZXdvcmsKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICIgJG5ld2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCSAgOzsKKwllc2FjCisKKwlpZiB0ZXN0IHllcyA9ICIkZHJvcHBlZGRlcHMiOyB0aGVuCisJICBpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIjsgdGhlbgorCSAgICBlY2hvCisJICAgIGVjaG8gIioqKiBXYXJuaW5nOiBsaWJ0b29sIGNvdWxkIG5vdCBzYXRpc2Z5IGFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IgorCSAgICAkRUNITyAiKioqIGRlcGVuZGVuY2llcyBvZiBtb2R1bGUgJGxpYm5hbWUuICBUaGVyZWZvcmUsIGxpYnRvb2wgd2lsbCBjcmVhdGUiCisJICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIgorCSAgICBlY2hvICIqKiogYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCisJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJICAgICAgZWNobworCSAgICAgIGVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgorCSAgICAgIGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgJ25tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkgICAgICBlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJICAgICAgZWNobyAiKioqICdubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgZmkKKwkgICAgaWYgdGVzdCBubyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisJICAgICAgb2xkbGlicz0kb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0CisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgICBlbHNlCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGZpCisJICBlbHNlCisJICAgIGVjaG8gIioqKiBUaGUgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCisJICAgIGVjaG8gIioqKiBhdXRvbWF0aWNhbGx5IGFkZGVkIHdoZW5ldmVyIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCB0aGlzIGxpYnJhcnkiCisJICAgIGVjaG8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKworCSAgICBpZiB0ZXN0IG5vID0gIiRhbGxvd191bmRlZmluZWQiOyB0aGVuCisJICAgICAgZWNobworCSAgICAgIGVjaG8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCisJICAgICAgZWNobyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCisJICAgICAgZWNobyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgorCSAgICAgIGVjaG8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCisJICAgICAgaWYgdGVzdCBubyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisJCW9sZGxpYnM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dAorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisJZmkKKwkjIERvbmUgY2hlY2tpbmcgZGVwbGlicyEKKwlkZXBsaWJzPSRuZXdkZXBsaWJzCisgICAgICBmaQorICAgICAgIyBUaW1lIHRvIGNoYW5nZSBhbGwgb3VyICJmb28ubHRmcmFtZXdvcmsiIHN0dWZmIGJhY2sgdG8gIi1mcmFtZXdvcmsgZm9vIgorICAgICAgY2FzZSAkaG9zdCBpbgorCSotKi1kYXJ3aW4qKQorCSAgbmV3ZGVwbGlicz1gJEVDSE8gIiAkbmV3ZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICBkZXBsaWJzPWAkRUNITyAiICRkZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJICA7OworICAgICAgZXNhYworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGRlcGxpYnMgIiBpbgorCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBkZXBsaWJzPSRuZXdfbGlicworCisgICAgICAjIEFsbCB0aGUgbGlicmFyeS1zcGVjaWZpYyB2YXJpYWJsZXMgKGluc3RhbGxfbGliZGlyIGlzIHNldCBhYm92ZSkuCisgICAgICBsaWJyYXJ5X25hbWVzPQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICBkbG5hbWU9CisKKyAgICAgICMgVGVzdCBhZ2Fpbiwgd2UgbWF5IGhhdmUgZGVjaWRlZCBub3QgdG8gYnVpbGQgaXQgYW55IG1vcmUKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisJIyBSZW1vdmUgJHdsIGluc3RhbmNlcyB3aGVuIGxpbmtpbmcgd2l0aCBsZC4KKwkjIEZJWE1FOiBzaG91bGQgdGVzdCB0aGUgcmlnaHQgX2NtZHMgdmFyaWFibGUuCisJY2FzZSAkYXJjaGl2ZV9jbWRzIGluCisJICAqXCRMRFwgKikgd2w9IDs7CisgICAgICAgIGVzYWMKKwlpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfaW50b19saWJzIjsgdGhlbgorCSAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworCSAgaGFyZGNvZGVfbGliZGlycz0KKwkgIGRlcF9ycGF0aD0KKwkgIHJwYXRoPSRmaW5hbGl6ZV9ycGF0aAorCSAgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIiB8fCBycGF0aD0kY29tcGlsZV9ycGF0aCRycGF0aAorCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKwkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKKwkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJCSAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCisJCWVsc2UKKwkJICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJCSAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkJICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCSAgICA7OworCQkgICopCisJCSAgICBmdW5jX2FwcGVuZCBoYXJkY29kZV9saWJkaXJzICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCSAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkgICAgICBlbHNlCisJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCisJICAgICAgZmkKKwkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCisJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZG9uZQorCSAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgIGxpYmRpcj0kaGFyZGNvZGVfbGliZGlycworCSAgICBldmFsICJkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgorCSAgZmkKKwkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCisJICAgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICAgIHJwYXRoPQorCSAgICBmb3IgZGlyIGluICRwZXJtX3JwYXRoOyBkbworCSAgICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKwkgICAgZG9uZQorCSAgICBldmFsICIkcnVucGF0aF92YXI9JyRycGF0aFwkJHJ1bnBhdGhfdmFyJzsgZXhwb3J0ICRydW5wYXRoX3ZhciIKKwkgIGZpCisJICB0ZXN0IC1uICIkZGVwX3JwYXRoIiAmJiBkZXBsaWJzPSIkZGVwX3JwYXRoICRkZXBsaWJzIgorCWZpCisKKwlzaGxpYnBhdGg9JGZpbmFsaXplX3NobGlicGF0aAorCXRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSIgfHwgc2hsaWJwYXRoPSRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgKKwlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgorCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorCWZpCisKKwkjIEdldCB0aGUgcmVhbCBhbmQgbGluayBuYW1lcyBvZiB0aGUgbGlicmFyeS4KKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCXNoaWZ0CisJcmVhbG5hbWU9JDEKKwlzaGlmdAorCisJaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgorCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgorCWVsc2UKKwkgIHNvbmFtZT0kcmVhbG5hbWUKKwlmaQorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisKKwlsaWI9JG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lCisJbGlua25hbWVzPQorCWZvciBsaW5rCisJZG8KKwkgIGZ1bmNfYXBwZW5kIGxpbmtuYW1lcyAiICRsaW5rIgorCWRvbmUKKworCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCisJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCXRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisKKwlkZWxmaWxlcz0KKwlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCisJICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwCisJICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyIKKwlmaQorCisJb3JpZ19leHBvcnRfc3ltYm9scz0KKwljYXNlICRob3N0X29zIGluCisJY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAjIGV4cG9ydGluZyB1c2luZyB1c2VyIHN1cHBsaWVkIHN5bWZpbGUKKwkgICAgZnVuY19kbGxfZGVmX3AgIiRleHBvcnRfc3ltYm9scyIgfHwgeworCSAgICAgICMgYW5kIGl0J3MgTk9UIGFscmVhZHkgYSAuZGVmIGZpbGUuIE11c3QgZmlndXJlIG91dAorCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCisJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgorCSAgICAgICMgZXhwb3J0X3N5bWJvbHMgZ2V0cyByZWFzc2lnbmVkIGluc2lkZSB0aGUgInByZXBhcmUKKwkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCisJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCisJICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0kZXhwb3J0X3N5bWJvbHMKKwkgICAgICBleHBvcnRfc3ltYm9scz0KKwkgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisJICAgIH0KKwkgIGZpCisJICA7OworCWVzYWMKKworCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCisJaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgaWYgdGVzdCB5ZXMgPSAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYSciCisJICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cAorCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCisJICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKwkgICAgZm9yIGNtZDEgaW4gJGNtZHM7IGRvCisJICAgICAgSUZTPSRzYXZlX2lmcworCSAgICAgICMgVGFrZSB0aGUgbm9ybWFsIGJyYW5jaCBpZiB0aGUgbm1fZmlsZV9saXN0X3NwZWMgYnJhbmNoCisJICAgICAgIyBkb2Vzbid0IHdvcmsgb3IgaWYgdG9vbCBjb252ZXJzaW9uIGlzIG5vdCBuZWVkZWQuCisJICAgICAgY2FzZSAkbm1fZmlsZV9saXN0X3NwZWN+JHRvX3Rvb2xfZmlsZV9jbWQgaW4KKwkJKn5mdW5jX2NvbnZlcnRfZmlsZV9ub29wIHwgKn5mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiB8IH4qKQorCQkgIHRyeV9ub3JtYWxfYnJhbmNoPXllcworCQkgIGV2YWwgY21kPVwiJGNtZDFcIgorCQkgIGZ1bmNfbGVuICIgJGNtZCIKKwkJICBsZW49JGZ1bmNfbGVuX3Jlc3VsdAorCQkgIDs7CisJCSopCisJCSAgdHJ5X25vcm1hbF9icmFuY2g9bm8KKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkdHJ5X25vcm1hbF9icmFuY2giIFwKKwkJICYmIHsgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIFwKKwkJICAgICAgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IH0KKwkgICAgICB0aGVuCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbGlmIHRlc3QgLW4gIiRubV9maWxlX2xpc3Rfc3BlYyI7IHRoZW4KKwkJZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKwkJb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCQlzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkJc2F2ZV9vdXRwdXQ9JG91dHB1dAorCQlvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS5ubQorCQlmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkJbGlib2Jqcz0kbm1fZmlsZV9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisJCWZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKwkJZnVuY192ZXJib3NlICJjcmVhdGluZyAkTk0gaW5wdXQgZmlsZSBsaXN0OiAkb3V0cHV0IgorCQlmb3Igb2JqIGluICRzYXZlX2xpYm9ianM7IGRvCisJCSAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJCSAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisJCWRvbmUgPiAiJG91dHB1dCIKKwkJZXZhbCBjbWQ9XCIkY21kMVwiCisJCWZ1bmNfc2hvd19ldmFsICIkY21kIiAnZXhpdCAkPycKKwkJb3V0cHV0PSRzYXZlX291dHB1dAorCQlsaWJvYmpzPSRzYXZlX2xpYm9ianMKKwkJc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbHNlCisJCSMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgorCQlmdW5jX3ZlcmJvc2UgInVzaW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgorCQlza2lwcGVkX2V4cG9ydD06CisJCSMgQnJlYWsgb3V0IGVhcmx5LCBvdGhlcndpc2Ugc2tpcHBlZF9leHBvcnQgbWF5IGJlCisJCSMgc2V0IHRvIGZhbHNlIGJ5IGEgbGF0ZXIgYnV0IHNob3J0ZXIgY21kLgorCQlicmVhaworCSAgICAgIGZpCisJICAgIGRvbmUKKwkgICAgSUZTPSRzYXZlX2lmcworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSRleHBvcnRfc3ltYm9scworCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0kb3JpZ19leHBvcnRfc3ltYm9scworCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJZmkKKworCWlmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICMgVGhlIGdpdmVuIGV4cG9ydHNfc3ltYm9scyBmaWxlIGhhcyB0byBiZSBmaWx0ZXJlZCwgc28gZmlsdGVyIGl0LgorCSAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yICckbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAjICdzJyBjb21tYW5kcywgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgorCSAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKwlmaQorCisJdG1wX2RlcGxpYnM9CisJZm9yIHRlc3RfZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgY2FzZSAiICRjb252ZW5pZW5jZSAiIGluCisJICAqIiAkdGVzdF9kZXBsaWIgIiopIDs7CisJICAqKQorCSAgICBmdW5jX2FwcGVuZCB0bXBfZGVwbGlicyAiICR0ZXN0X2RlcGxpYiIKKwkgICAgOzsKKwkgIGVzYWMKKwlkb25lCisJZGVwbGlicz0kdG1wX2RlcGxpYnMKKworCWlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgJiYKKwkgICAgdGVzdCB5ZXMgPSAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgJiYKKwkgICAgdGVzdCAteiAiJGxpYm9ianMiOyB0aGVuCisJICAgICMgZXh0cmFjdCB0aGUgYXJjaGl2ZXMsIHNvIHdlIGhhdmUgb2JqZWN0cyB0byBsaXN0LgorCSAgICAjIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgdG8ganVzdCBleHRyYWN0IG9uZSBhcmNoaXZlLgorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIGZpCisJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcworCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGVsc2UKKwkgICAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CisJICAgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwkgIGZpCisJZmkKKworCWlmIHRlc3QgeWVzID0gIiR0aHJlYWRfc2FmZSIgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZsYWciCisJZmkKKworCSMgTWFrZSBhIGJhY2t1cCBvZiB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSB3aGVuIHJlbGlua2luZworCWlmIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VSAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VSknIHx8IGV4aXQgJD8KKwlmaQorCisJIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCWlmIHRlc3QgeWVzID0gIiRtb2R1bGUiICYmIHRlc3QgLW4gIiRtb2R1bGVfY21kcyI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2V4cHN5bV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCisJICBlbHNlCisJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9jbWRzXCIKKwkgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgIGZpCisJZWxzZQorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCIgJiYKKwkgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiICYmCisJICAgbGVuPSRmdW5jX2xlbl9yZXN1bHQgJiYKKwkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIDoKKwllbHNlCisJICAjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBwaWVjZXdpc2UKKwkgICMgb3IsIGlmIHVzaW5nIEdOVSBsZCBhbmQgc2tpcHBlZF9leHBvcnQgaXMgbm90IDosIHVzZSBhIGxpbmtlcgorCSAgIyBzY3JpcHQuCisKKwkgICMgU2F2ZSB0aGUgdmFsdWUgb2YgJG91dHB1dCBhbmQgJGxpYm9ianMgYmVjYXVzZSB3ZSB3YW50IHRvCisJICAjIHVzZSB0aGVtIGxhdGVyLiAgSWYgd2UgaGF2ZSB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgd2UKKwkgICMgd2FudCB0byB1c2Ugc2F2ZV9saWJvYmpzIGFzIGl0IHdhcyBiZWZvcmUKKwkgICMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgd2FzIGV4cGFuZGVkLCBiZWNhdXNlIHdlIGNhbid0CisJICAjIGFzc3VtZSB0aGUgbGlua2VyIHVuZGVyc3RhbmRzIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLgorCSAgIyBUaGlzIG1heSBoYXZlIHRvIGJlIHJldmlzaXRlZCwgaW4gY2FzZSB0b28gbWFueQorCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgZ2V0IGxpbmtlZCBpbiBhbmQgZW5kIHVwIGV4Y2VlZGluZworCSAgIyB0aGUgc3BlYy4KKwkgIGlmIHRlc3QgLXogIiRjb252ZW5pZW5jZSIgfHwgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgIGZpCisJICBzYXZlX291dHB1dD0kb3V0cHV0CisJICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorCSAgb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCisJICAjIENsZWFyIHRoZSByZWxvYWRhYmxlIG9iamVjdCBjcmVhdGlvbiBjb21tYW5kIHF1ZXVlIGFuZAorCSAgIyBpbml0aWFsaXplIGsgdG8gb25lLgorCSAgdGVzdF9jbWRzPQorCSAgY29uY2F0X2NtZHM9CisJICBvYmpsaXN0PQorCSAgbGFzdF9yb2JqPQorCSAgaz0xCisKKwkgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLmxua3NjcmlwdAorCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIEdOVSBsZCBzY3JpcHQ6ICRvdXRwdXQiCisJICAgIGVjaG8gJ0lOUFVUICgnID4gJG91dHB1dAorCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGVjaG8gJyknID4+ICRvdXRwdXQKKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmIHRlc3QgLW4gIiRmaWxlX2xpc3Rfc3BlYyI7IHRoZW4KKwkgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEubG5rCisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKwkgICAgOiA+ICRvdXRwdXQKKwkgICAgc2V0IHggJHNhdmVfbGlib2JqcworCSAgICBzaGlmdAorCSAgICBmaXJzdG9iaj0KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGNvbXBpbGVyX25lZWRzX29iamVjdCI7IHRoZW4KKwkgICAgICBmaXJzdG9iaj0iJDEgIgorCSAgICAgIHNoaWZ0CisJICAgIGZpCisJICAgIGZvciBvYmoKKwkgICAgZG8KKwkgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgPj4gJG91dHB1dAorCSAgICBkb25lCisJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJICAgIG91dHB1dD0kZmlyc3RvYmpcIiRmaWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIgorCSAgZWxzZQorCSAgICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIjsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuLi4iCisJICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9iamV4dAorCSAgICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICAgICAgbGVuPSRsZW4wCisKKwkgICAgICAjIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGxpbmtlZC4KKwkgICAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKKwkgICAgICBkbworCQlmdW5jX2xlbiAiICRvYmoiCisJCWZ1bmNfYXJpdGggJGxlbiArICRmdW5jX2xlbl9yZXN1bHQKKwkJbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlpZiB0ZXN0IC16ICIkb2JqbGlzdCIgfHwKKwkJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJCSAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJCWVsc2UKKwkJICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQorCQkgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCisJCSAgaWYgdGVzdCAxIC1lcSAiJGsiOyB0aGVuCisJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgorCQkgICAgcmVsb2FkX29ianM9JG9iamxpc3QKKwkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgorCQkgIGVsc2UKKwkJICAgICMgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMgd2lsbCBsaW5rIGluCisJCSAgICAjIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCQkgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkJICBmaQorCQkgIGxhc3Rfcm9iaj0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSRrLiRvYmpleHQKKwkJICBmdW5jX2FyaXRoICRrICsgMQorCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9iamV4dAorCQkgIG9iamxpc3Q9IiAkb2JqIgorCQkgIGZ1bmNfbGVuICIgJGxhc3Rfcm9iaiIKKwkJICBmdW5jX2FyaXRoICRsZW4wICsgJGZ1bmNfbGVuX3Jlc3VsdAorCQkgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJZmkKKwkgICAgICBkb25lCisJICAgICAgIyBIYW5kbGUgdGhlIHJlbWFpbmluZyBvYmplY3RzIGJ5IGNyZWF0aW5nIG9uZSBsYXN0CisJICAgICAgIyByZWxvYWRhYmxlIG9iamVjdCBmaWxlLiAgQWxsIHN1YnNlcXVlbnQgcmVsb2FkYWJsZSBvYmplY3QKKwkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRyZWxvYWRfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCisKKwkgICAgZWxzZQorCSAgICAgIG91dHB1dD0KKwkgICAgZmkKKworCSAgICAke3NraXBwZWRfZXhwb3J0LWZhbHNlfSAmJiB7CisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cAorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgbGlib2Jqcz0kb3V0cHV0CisJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRleHBvcnRfc3ltYm9sc19jbWRzXCIKKwkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgorCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgorCSAgICAgIGZpCisJICAgIH0KKworCSAgICB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgYSB0ZW1wb3JhcnkgcmVsb2FkYWJsZSBvYmplY3QgZmlsZTogJG91dHB1dCIKKworCSAgICAjIExvb3AgdGhyb3VnaCB0aGUgY29tbWFuZHMgZ2VuZXJhdGVkIGFib3ZlIGFuZCBleGVjdXRlIHRoZW0uCisJICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCisJICAgICAgSUZTPSRzYXZlX2lmcworCSAgICAgICRvcHRfcXVpZXQgfHwgeworCQkgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICAgICAgfQorCSAgICAgICRvcHRfZHJ5X3J1biB8fCBldmFsICIkY21kIiB8fCB7CisJCWx0X2V4aXQ9JD8KKworCQkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwkJaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgorCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJCSAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkJZmkKKworCQlleGl0ICRsdF9leGl0CisJICAgICAgfQorCSAgICBkb25lCisJICAgIElGUz0kc2F2ZV9pZnMKKworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgIGZ1bmNfc2hvd19ldmFsICckTVYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGZpCisJICBmaQorCisgICAgICAgICAgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX0gJiYgeworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSRleHBvcnRfc3ltYm9scworCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9JG9yaWdfZXhwb3J0X3N5bWJvbHMKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKworCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KKwkgICAgICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgorCSAgICAgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAgICAgIyAncycgY29tbWFuZHMsIHdoaWNoIG5vdCBhbGwgc2VkcyBjYW4gaGFuZGxlLiBHTlUgc2VkIHNob3VsZCBiZSBmaW5lCisJICAgICAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAgICAgIyBnbG9iYWwgdmFyaWFibGVzLiBqb2luKDEpIHdvdWxkIGJlIG5pY2UgaGVyZSwgYnV0IHVuZm9ydHVuYXRlbHkKKwkgICAgICAjIGlzbid0IGEgYmxlc3NlZCB0b29sLgorCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciIKKwkgICAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scworCSAgICBmaQorCSAgfQorCisJICBsaWJvYmpzPSRvdXRwdXQKKwkgICMgUmVzdG9yZSB0aGUgdmFsdWUgb2Ygb3V0cHV0LgorCSAgb3V0cHV0PSRzYXZlX291dHB1dAorCisJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiICYmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CisJICBmaQorCSAgIyBFeHBhbmQgdGhlIGxpYnJhcnkgbGlua2luZyBjb21tYW5kcyBhZ2FpbiB0byByZXNldCB0aGUKKwkgICMgdmFsdWUgb2YgJGxpYm9ianMgZm9yIHBpZWNld2lzZSBsaW5raW5nLgorCisJICAjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCisJICBpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiOyB0aGVuCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJG1vZHVsZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JG1vZHVsZV9jbWRzCisJICAgIGZpCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgICAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICAgIGZpCisJICBmaQorCWZpCisKKwlpZiB0ZXN0IC1uICIkZGVsZmlsZXMiOyB0aGVuCisJICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzIHRvICRjbWRzLgorCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkUk0gJGRlbGZpbGVzXCIKKwlmaQorCisJIyBBZGQgYW55IG9iamVjdHMgZnJvbSBwcmVsb2FkZWQgY29udmVuaWVuY2UgbGlicmFyaWVzCisJaWYgdGVzdCAtbiAiJGRscHJlZmlsZXMiOyB0aGVuCisJICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKKwkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCisKKwkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCisJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCWZpCisKKwlzYXZlX2lmcz0kSUZTOyBJRlM9J34nCisJZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIElGUz0kc3AkbmwKKwkgIGV2YWwgY21kPVwiJGNtZFwiCisJICBJRlM9JHNhdmVfaWZzCisJICAkb3B0X3F1aWV0IHx8IHsKKwkgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCSAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCisJICB9CisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZCIgfHwgeworCSAgICBsdF9leGl0PSQ/CisKKwkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJICAgIGlmIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KKwkgICAgICAoIGNkICIkb3V0cHV0X29iamRpciIgJiYgXAorCSAgICAgICAgJFJNICIke3JlYWxuYW1lfVQiICYmIFwKKwkJJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKKwkgICAgZmkKKworCSAgICBleGl0ICRsdF9leGl0CisJICB9CisJZG9uZQorCUlGUz0kc2F2ZV9pZnMKKworCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCWlmIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgICAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJICAgIGZpCisJICBmaQorCisJICBleGl0ICRFWElUX1NVQ0NFU1MKKwlmaQorCisJIyBDcmVhdGUgbGlua3MgdG8gdGhlIHJlYWwgbGlicmFyeS4KKwlmb3IgbGlua25hbWUgaW4gJGxpbmtuYW1lczsgZG8KKwkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgJyhjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJGxpbmtuYW1lIiAmJiAkTE5fUyAiJHJlYWxuYW1lIiAiJGxpbmtuYW1lIiknICdleGl0ICQ/JworCSAgZmkKKwlkb25lCisKKwkjIElmIC1tb2R1bGUgb3IgLWV4cG9ydC1keW5hbWljIHdhcyBzcGVjaWZpZWQsIHNldCB0aGUgZGxuYW1lLgorCWlmIHRlc3QgeWVzID0gIiRtb2R1bGUiIHx8IHRlc3QgeWVzID0gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KKwkgICMgT24gYWxsIGtub3duIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVzZSBhcmUgaWRlbnRpY2FsLgorCSAgZGxuYW1lPSRzb25hbWUKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvYmopCisgICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0IG5vICE9ICIkZGxzZWxmIjsgdGhlbgorCWZ1bmNfd2FybmluZyAiJy1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisgICAgICBmaQorCisgICAgICBjYXNlICIgJGRlcGxpYnMiIGluCisgICAgICAqXCAtbCogfCAqXCAtTCopCisJZnVuY193YXJuaW5nICInLWwnIGFuZCAnLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiA7OworICAgICAgZXNhYworCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisKKyAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHZpbmZvIiAmJiBcCisJZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIictcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKworICAgICAgY2FzZSAkb3V0cHV0IGluCisgICAgICAqLmxvKQorCXRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIiAmJiBcCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgJyRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyIKKworCWxpYm9iaj0kb3V0cHV0CisJZnVuY19sbzJvICIkbGlib2JqIgorCW9iaj0kZnVuY19sbzJvX3Jlc3VsdAorCTs7CisgICAgICAqKQorCWxpYm9iaj0KKwlvYmo9JG91dHB1dAorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb2JqZWN0cy4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJG9iaiAkbGlib2JqCisKKyAgICAgICMgT2JqZWN0cyBmcm9tIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFRoaXMgYXNzdW1lcworICAgICAgIyBzaW5nbGUtdmVyc2lvbiBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKKyAgICAgICMgZGlmZmVyZW50IG9uZXMgZm9yIFBJQy9ub24tUElDLCB0aGlzIHdlJ2xsIGhhdmUgdG8gZHVwbGljYXRlCisgICAgICAjIHRoZSBleHRyYWN0aW9uLgorICAgICAgcmVsb2FkX2NvbnZfb2Jqcz0KKyAgICAgIGdlbnRvcD0KKyAgICAgICMgaWYgcmVsb2FkX2NtZHMgcnVucyAkTEQgZGlyZWN0bHksIGdldCByaWQgb2YgLVdsIGZyb20KKyAgICAgICMgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMgYW5kIGhvcGUgd2UgY2FuIGdldCBieSB3aXRoIHR1cm5pbmcgY29tbWEKKyAgICAgICMgaW50byBzcGFjZS4KKyAgICAgIGNhc2UgJHJlbG9hZF9jbWRzIGluCisgICAgICAgICpcJExEW1wgXCRdKikgd2w9IDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCisJaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICB0ZXN0IC1uICIkd2wiIHx8IHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzPWAkRUNITyAiJHRtcF93aG9sZV9hcmNoaXZlX2ZsYWdzIiB8ICRTRUQgJ3N8LHwgfGcnYAorCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcICR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncworCWVsc2UKKwkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke29ian14CisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKKwkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorICAgICAgZmkKKworICAgICAgIyBJZiB3ZSdyZSBub3QgYnVpbGRpbmcgc2hhcmVkLCB3ZSBuZWVkIHRvIHVzZSBub25fcGljX29ianMKKyAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiIHx8IGxpYm9ianM9JG5vbl9waWNfb2JqZWN0cworCisgICAgICAjIENyZWF0ZSB0aGUgb2xkLXN0eWxlIG9iamVjdC4KKyAgICAgIHJlbG9hZF9vYmpzPSRvYmpzJG9sZF9kZXBsaWJzJyAnYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4kbGliZXh0JC9kOyAvXC5saWIkL2Q7ICRsbzJvIiB8ICROTDJTUGAnICckcmVsb2FkX2NvbnZfb2JqcworCisgICAgICBvdXRwdXQ9JG9iagorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCisKKyAgICAgICMgRXhpdCBpZiB3ZSBhcmVuJ3QgZG9pbmcgYSBsaWJyYXJ5IG9iamVjdCBmaWxlLgorICAgICAgaWYgdGVzdCAteiAiJGxpYm9iaiI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgfHwgeworCWlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCisJICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKwlmaQorCisJIyBDcmVhdGUgYW4gaW52YWxpZCBsaWJ0b29sIG9iamVjdCBpZiBubyBQSUMsIHNvIHRoYXQgd2UgZG9uJ3QKKwkjIGFjY2lkZW50YWxseSBsaW5rIGl0IGludG8gYSBwcm9ncmFtLgorCSMgJHNob3cgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIKKwkjICRvcHRfZHJ5X3J1biB8fCBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIH0KKworICAgICAgaWYgdGVzdCAtbiAiJHBpY19mbGFnIiB8fCB0ZXN0IGRlZmF1bHQgIT0gIiRwaWNfbW9kZSI7IHRoZW4KKwkjIE9ubHkgZG8gY29tbWFuZHMgaWYgd2UgcmVhbGx5IGhhdmUgZGlmZmVyZW50IFBJQyBvYmplY3RzLgorCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKKwlvdXRwdXQ9JGxpYm9iagorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKKyAgICAgIGZpCisKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgOzsKKworICAgIHByb2cpCisgICAgICBjYXNlICRob3N0IGluCisJKmN5Z3dpbiopIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKKwkgICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuZXhlOzsKKyAgICAgIGVzYWMKKyAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCWZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKKworICAgICAgJHByZWxvYWQgXAorCSYmIHRlc3QgdW5rbm93bix1bmtub3duLHVua25vd24gPSAiJGRsb3Blbl9zdXBwb3J0LCRkbG9wZW5fc2VsZiwkZGxvcGVuX3NlbGZfc3RhdGljIiBcCisJJiYgZnVuY193YXJuaW5nICInTFRfSU5JVChbZGxvcGVuXSknIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yaworCWNvbXBpbGVfZGVwbGlicz1gJEVDSE8gIiAkY29tcGlsZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKKwk7OworICAgICAgZXNhYworCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqLSotZGFyd2luKikKKwkjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCisJIyBCdXQgaXMgc3VwcG9zZWRseSBmaXhlZCBvbiAxMC40IG9yIGxhdGVyICh5YXkhKS4KKwlpZiB0ZXN0IENYWCA9ICIkdGFnbmFtZSI7IHRoZW4KKwkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KKwkgICAgMTAuWzAxMjNdKQorCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bC1iaW5kX2F0X2xvYWQiCisJICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bC1iaW5kX2F0X2xvYWQiCisJICAgIDs7CisJICBlc2FjCisJZmkKKwkjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJOzsKKyAgICAgIGVzYWMKKworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCisJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCisJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBmb3IgZGVwbGliIGluICRjb21waWxlX2RlcGxpYnM7IGRvCisJY2FzZSAkZGVwbGliIGluCisJLUwqKQorCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCisJICAqIiAkZGVwbGliICIqKSA7OworCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OworCSAgZXNhYworCSAgOzsKKwkqKSBmdW5jX2FwcGVuZCBuZXdfbGlicyAiICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgY29tcGlsZV9kZXBsaWJzPSRuZXdfbGlicworCisKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRjb21waWxlX2RlcGxpYnMiCisgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGZpbmFsaXplX2RlcGxpYnMiCisKKyAgICAgIGlmIHRlc3QgLW4gIiRycGF0aCR4cnBhdGgiOyB0aGVuCisJIyBJZiB0aGUgdXNlciBzcGVjaWZpZWQgYW55IHJwYXRoIGZsYWdzLCB0aGVuIGFkZCB0aGVtLgorCWZvciBsaWJkaXIgaW4gJHJwYXRoICR4cnBhdGg7IGRvCisJICAjIFRoaXMgaXMgdGhlIG1hZ2ljIHRvIHVzZSAtcnBhdGguCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisgICAgICBmaQorCisgICAgICAjIE5vdyBoYXJkY29kZSB0aGUgbGlicmFyeSBwYXRocworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkY29tcGlsZV9ycGF0aCAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorCWNhc2UgJGhvc3QgaW4KKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgdGVzdGJpbmRpcj1gJEVDSE8gIiRsaWJkaXIiIHwgJFNFRCAtZSAncyovbGliJCovYmluKidgCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiRsaWJkaXI6IiopIDs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kbGliZGlyOzsKKwkgICopIGZ1bmNfYXBwZW5kIGRsbHNlYXJjaHBhdGggIjokbGliZGlyIjs7CisJICBlc2FjCisJICBjYXNlIDokZGxsc2VhcmNocGF0aDogaW4KKwkgICoiOiR0ZXN0YmluZGlyOiIqKSA7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JHRlc3RiaW5kaXI7OworCSAgKikgZnVuY19hcHBlbmQgZGxsc2VhcmNocGF0aCAiOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSRoYXJkY29kZV9saWJkaXJzCisJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisgICAgICBmaQorICAgICAgY29tcGlsZV9ycGF0aD0kcnBhdGgKKworICAgICAgcnBhdGg9CisgICAgICBoYXJkY29kZV9saWJkaXJzPQorICAgICAgZm9yIGxpYmRpciBpbiAkZmluYWxpemVfcnBhdGg7IGRvCisJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgorCSAgZmkKKwllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9wZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwlsaWJkaXI9JGhhcmRjb2RlX2xpYmRpcnMKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBmaW5hbGl6ZV9ycGF0aD0kcnBhdGgKKworICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KKwkjIFRyYW5zZm9ybSBhbGwgdGhlIGxpYnJhcnkgb2JqZWN0cyBpbnRvIHN0YW5kYXJkIG9iamVjdHMuCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkb3V0cHV0bmFtZSIgIkBQUk9HUkFNQCIgZmFsc2UKKworICAgICAgIyB0ZW1wbGF0ZSBwcmVsaW5raW5nIHN0ZXAKKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVsaW5rX2NtZHMiOyB0aGVuCisJZnVuY19leGVjdXRlX2NtZHMgIiRwcmVsaW5rX2NtZHMiICdleGl0ICQ/JworICAgICAgZmkKKworICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9OgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKmNlZ2NjKiB8ICptaW5ndzMyY2UqKQorICAgICAgICAjIERpc2FibGUgd3JhcHBlcnMgZm9yIGNlZ2NjIGFuZCBtaW5ndzMyY2UgaG9zdHMsIHdlIGFyZSBjcm9zcyBjb21waWxpbmcgYW55d2F5LgorICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1mYWxzZQorICAgICAgICA7OworICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKyAgICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgfHwgd3JhcHBlcnNfcmVxdWlyZWQ9ZmFsc2UKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIGlmIHRlc3Qgbm8gPSAiJG5lZWRfcmVsaW5rIiB8fCB0ZXN0IHllcyAhPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1mYWxzZQorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgJHdyYXBwZXJzX3JlcXVpcmVkIHx8IHsKKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCWxpbmtfY29tbWFuZD0kY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKKworCSMgV2UgaGF2ZSBubyB1bmluc3RhbGxlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcywgc28gZmluYWxpemUgcmlnaHQgbm93LgorCWV4aXRfc3RhdHVzPTAKKwlmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXRfc3RhdHVzPSQ/JworCisJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJG9iamV4dCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiRvYmpleHQiJworCWZpCisKKwlleGl0ICRleGl0X3N0YXR1cworICAgICAgfQorCisgICAgICBpZiB0ZXN0IC1uICIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWNvbXBpbGVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRjb21waWxlX2NvbW1hbmQiCisgICAgICBmaQorICAgICAgaWYgdGVzdCAtbiAiJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KKwlmaW5hbGl6ZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGZpbmFsaXplX2NvbW1hbmQiCisgICAgICBmaQorCisgICAgICBjb21waWxlX3Zhcj0KKyAgICAgIGZpbmFsaXplX3Zhcj0KKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwlpZiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCisJICBycGF0aD0KKwkgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgIGZ1bmNfYXBwZW5kIHJwYXRoICIkZGlyOiIKKwkgIGRvbmUKKwkgIGNvbXBpbGVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5hbGl6ZV9wZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkZmluYWxpemVfcGVybV9ycGF0aDsgZG8KKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgorCSAgZG9uZQorCSAgZmluYWxpemVfdmFyPSIkcnVucGF0aF92YXI9XCIkcnBhdGhcJCRydW5wYXRoX3ZhclwiICIKKwlmaQorICAgICAgZmkKKworICAgICAgaWYgdGVzdCB5ZXMgPSAiJG5vX2luc3RhbGwiOyB0aGVuCisJIyBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0LgorCWxpbmtfY29tbWFuZD0kY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0CisJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0CisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisJZmkKKworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uLCRmYXN0X2luc3RhbGwgaW4KKyAgICAgICAgcmVsaW5rLCopCisJICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKwkgIGxpbmtfY29tbWFuZD0kY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKKwkgIHJlbGlua19jb21tYW5kPSRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAorCisJICBmdW5jX3dhcm5pbmcgInRoaXMgcGxhdGZvcm0gZG9lcyBub3QgbGlrZSB1bmluc3RhbGxlZCBzaGFyZWQgbGlicmFyaWVzIgorCSAgZnVuY193YXJuaW5nICInJG91dHB1dCcgd2lsbCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIgorCSAgOzsKKyAgICAgICAgKix5ZXMpCisJICBsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKKwkgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRTRUQgJ3MlQE9VVFBVVEAlXCRwcm9nZGlyL1wkZmlsZSVnJ2AKKyAgICAgICAgICA7OworCSosbm8pCisJICBsaW5rX2NvbW1hbmQ9JGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoCisJICByZWxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKKyAgICAgICAgICA7OworCSosbmVlZGxlc3MpCisJICBsaW5rX2NvbW1hbmQ9JGZpbmFsaXplX3ZhciRjb21waWxlX2NvbW1hbmQkZmluYWxpemVfcnBhdGgKKwkgIHJlbGlua19jb21tYW5kPQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisKKyAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KKyAgICAgIGxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGVzLgorICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0ICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lICRvdXRwdXRfb2JqZGlyL2x0LSRvdXRwdXRuYW1lCisKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdCAkPycKKworICAgICAgaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIgorCXBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSInJWcnIC1lICdzJUBUT09MX09VVFBVVEAlJyIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiclZydgCisJZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgICMgTm93IGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQuCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUXVvdGUgdGhlIHJlbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIGlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisJZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJICBpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICBlbHNlCisJICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGZpCisJZG9uZQorCXJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRyZWxpbmtfY29tbWFuZCkiCisJcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBmaQorCisgICAgICAjIE9ubHkgYWN0dWFsbHkgZG8gdGhpbmdzIGlmIG5vdCBpbiBkcnkgcnVuIG1vZGUuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSMgd2luMzIgd2lsbCB0aGluayB0aGUgc2NyaXB0IGlzIGEgYmluYXJ5IGlmIGl0IGhhcworCSMgYSAuZXhlIHN1ZmZpeCwgc28gd2Ugc3RyaXAgaXQgb2ZmIGhlcmUuCisJY2FzZSAkb3V0cHV0IGluCisJICAqLmV4ZSkgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgIG91dHB1dD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisJZXNhYworCSMgdGVzdCBmb3IgY3lnd2luIGJlY2F1c2UgbXYgZmFpbHMgdy9vIC5leGUgZXh0ZW5zaW9ucworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qKQorCSAgICBleGVleHQ9LmV4ZQorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXRuYW1lIgorCSAgICBvdXRwdXRuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKwkgICopIGV4ZWV4dD0gOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKwkgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG91dHB1dCIgIiIgIi4iCisJICAgIG91dHB1dF9uYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICBvdXRwdXRfcGF0aD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCSAgICBjd3JhcHBlcnNvdXJjZT0kb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYworCSAgICBjd3JhcHBlcj0kb3V0cHV0X3BhdGgvJG91dHB1dF9uYW1lLmV4ZQorCSAgICAkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworCSAgICBmdW5jX2VtaXRfY3dyYXBwZXJleGVfc3JjID4gJGN3cmFwcGVyc291cmNlCisKKwkgICAgIyBUaGUgd3JhcHBlciBleGVjdXRhYmxlIGlzIGJ1aWx0IHVzaW5nIHRoZSAkaG9zdCBjb21waWxlciwKKwkgICAgIyBiZWNhdXNlIGl0IGNvbnRhaW5zICRob3N0IHBhdGhzIGFuZCBmaWxlcy4gSWYgY3Jvc3MtCisJICAgICMgY29tcGlsaW5nLCBpdCwgbGlrZSB0aGUgdGFyZ2V0IGV4ZWN1dGFibGUsIG11c3QgYmUKKwkgICAgIyBleGVjdXRlZCBvbiB0aGUgJGhvc3Qgb3IgdW5kZXIgYW4gZW11bGF0aW9uIGVudmlyb25tZW50LgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICRMVENDICRMVENGTEFHUyAtbyAkY3dyYXBwZXIgJGN3cmFwcGVyc291cmNlCisJICAgICAgJFNUUklQICRjd3JhcHBlcgorCSAgICB9CisKKwkgICAgIyBOb3csIGNyZWF0ZSB0aGUgd3JhcHBlciBzY3JpcHQgZm9yIGZ1bmNfc291cmNlIHVzZToKKwkgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAkY3dyYXBwZXIKKwkgICAgJFJNICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICB0cmFwICIkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICMgbm90ZTogdGhpcyBzY3JpcHQgd2lsbCBub3QgYmUgZXhlY3V0ZWQsIHNvIGRvIG5vdCBjaG1vZC4KKwkgICAgICBpZiB0ZXN0ICJ4JGJ1aWxkIiA9ICJ4JGhvc3QiOyB0aGVuCisJCSRjd3JhcHBlciAtLWx0LWR1bXAtc2NyaXB0ID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZWxzZQorCQlmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGZpCisJICAgIH0KKwkgIDs7CisJICAqICkKKwkgICAgJFJNICRvdXRwdXQKKwkgICAgdHJhcCAiJFJNICRvdXRwdXQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkgICAgZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkb3V0cHV0CisJICAgIGNobW9kICt4ICRvdXRwdXQKKwkgIDs7CisJZXNhYworICAgICAgfQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIHdlIG5lZWQgdG8gYnVpbGQgYW4gb2xkLWZhc2hpb25lZCBhcmNoaXZlLgorICAgIGZvciBvbGRsaWIgaW4gJG9sZGxpYnM7IGRvCisKKyAgICAgIGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbgorICAgICAgICBjb252ZW5pZW5jZSkKKwkgIG9sZG9ianM9IiRsaWJvYmpzX3NhdmUgJHN5bWZpbGVvYmoiCisJICBhZGRsaWJzPSRjb252ZW5pZW5jZQorCSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICA7OworCW1vZHVsZSkKKwkgIG9sZG9ianM9JGxpYm9ianNfc2F2ZQorCSAgYWRkbGlicz0kb2xkX2NvbnZlbmllbmNlCisJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgICAgICA7OworCSopCisJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKKwkgICRwcmVsb2FkICYmIHRlc3QgLWYgIiRzeW1maWxlb2JqIiBcCisJICAgICYmIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkc3ltZmlsZW9iaiIKKwkgIGFkZGxpYnM9JG9sZF9jb252ZW5pZW5jZQorCSAgOzsKKyAgICAgIGVzYWMKKworICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCisJZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CisJZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCWZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRhZGRsaWJzCisJZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwljbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisgICAgICBlbHNlCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGRscHJlZmlsZXMKKwkgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmaQorCisJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCisJIyB0byBhdm9pZCBjcmVhdGluZyBhcmNoaXZlcyB3aXRoIGR1cGxpY2F0ZSBiYXNlbmFtZXMgaWYgd2UKKwkjIG1pZ2h0IGhhdmUgdG8gZXh0cmFjdCB0aGVtIGFmdGVyd2FyZHMsIGUuZy4sIHdoZW4gY3JlYXRpbmcgYQorCSMgc3RhdGljIGFyY2hpdmUgb3V0IG9mIGEgY29udmVuaWVuY2UgbGlicmFyeSwgb3Igd2hlbiBsaW5raW5nCisJIyB0aGUgZW50aXJldHkgb2YgYSBsaWJ0b29sIGFyY2hpdmUgaW50byBhbm90aGVyIChjdXJyZW50bHkKKwkjIG5vdCBzdXBwb3J0ZWQgYnkgbGlidG9vbCkuCisJaWYgKGZvciBvYmogaW4gJG9sZG9ianMKKwkgICAgZG8KKwkgICAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGRvbmUgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgorCSAgOgorCWVsc2UKKwkgIGVjaG8gImNvcHlpbmcgc2VsZWN0ZWQgb2JqZWN0IGZpbGVzIHRvIGF2b2lkIGJhc2VuYW1lIGNvbmZsaWN0cy4uLiIKKwkgIGdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKwkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCSAgb2xkb2Jqcz0KKwkgIGNvdW50ZXI9MQorCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICBvYmpiYXNlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICBjYXNlICIgJG9sZG9ianMgIiBpbgorCSAgICAiICIpIG9sZG9ianM9JG9iaiA7OworCSAgICAqW1wgL10iJG9iamJhc2UgIiopCisJICAgICAgd2hpbGUgOjsgZG8KKwkJIyBNYWtlIHN1cmUgd2UgZG9uJ3QgcGljayBhbiBhbHRlcm5hdGUgbmFtZSB0aGF0IGFsc28KKwkJIyBvdmVybGFwcy4KKwkJbmV3b2JqPWx0JGNvdW50ZXItJG9iamJhc2UKKwkJZnVuY19hcml0aCAkY291bnRlciArIDEKKwkJY291bnRlcj0kZnVuY19hcml0aF9yZXN1bHQKKwkJY2FzZSAiICRvbGRvYmpzICIgaW4KKwkJKltcIC9dIiRuZXdvYmogIiopIDs7CisJCSopIGlmIHRlc3QgISAtZiAiJGdlbnRvcC8kbmV3b2JqIjsgdGhlbiBicmVhazsgZmkgOzsKKwkJZXNhYworCSAgICAgIGRvbmUKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAibG4gJG9iaiAkZ2VudG9wLyRuZXdvYmogfHwgY3AgJG9iaiAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRnZW50b3AvJG5ld29iaiIKKwkgICAgICA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJG9iaiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisJZnVuY190b190b29sX2ZpbGUgIiRvbGRsaWIiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJdG9vbF9vbGRsaWI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKworCWZ1bmNfbGVuICIgJGNtZHMiCisJbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwlpZiB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKKwllbGlmIHRlc3QgLW4gIiRhcmNoaXZlcl9saXN0X3NwZWMiOyB0aGVuCisJICBmdW5jX3ZlcmJvc2UgInVzaW5nIGNvbW1hbmQgZmlsZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBmb3Igb2JqIGluICRvbGRvYmpzCisJICBkbworCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiCisJICBkb25lID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUubGliY21kIgorCSAgb2xkb2Jqcz0iICRhcmNoaXZlcl9saXN0X3NwZWMkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorCSAgY21kcz0kb2xkX2FyY2hpdmVfY21kcworCWVsc2UKKwkgICMgdGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIGluIHBhcnRzCisJICBmdW5jX3ZlcmJvc2UgInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBzYXZlX1JBTkxJQj0kUkFOTElCCisJICBSQU5MSUI9OgorCSAgb2JqbGlzdD0KKwkgIGNvbmNhdF9jbWRzPQorCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgIyBJcyB0aGVyZSBhIGJldHRlciB3YXkgb2YgZmluZGluZyB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGxpc3Q/CisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIGxhc3Rfb2xkb2JqPSRvYmoKKwkgIGRvbmUKKwkgIGV2YWwgdGVzdF9jbWRzPVwiJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CisJICBsZW49JGxlbjAKKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY19sZW4gIiAkb2JqIgorCSAgICBmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJICAgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgorCSAgICAgIDoKKwkgICAgZWxzZQorCSAgICAgICMgdGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIGl0IGdldHMgdG9vIGxvbmcKKwkgICAgICBvbGRvYmpzPSRvYmpsaXN0CisJICAgICAgaWYgdGVzdCAiJG9iaiIgPSAiJGxhc3Rfb2xkb2JqIjsgdGhlbgorCQlSQU5MSUI9JHNhdmVfUkFOTElCCisJICAgICAgZmkKKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgICAgICBvYmpsaXN0PQorCSAgICAgIGxlbj0kbGVuMAorCSAgICBmaQorCSAgZG9uZQorCSAgUkFOTElCPSRzYXZlX1JBTkxJQgorCSAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgaWYgdGVzdCAteiAiJG9sZG9ianMiOyB0aGVuCisJICAgIGV2YWwgY21kcz1cIlwkY29uY2F0X2NtZHNcIgorCSAgZWxzZQorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzflwkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmaQorCWZpCisgICAgICBmaQorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRjbWRzIiAnZXhpdCAkPycKKyAgICBkb25lCisKKyAgICB0ZXN0IC1uICIkZ2VuZXJhdGVkIiAmJiBcCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yJGdlbmVyYXRlZCIKKworICAgICMgTm93IGNyZWF0ZSB0aGUgbGlidG9vbCBhcmNoaXZlLgorICAgIGNhc2UgJG91dHB1dCBpbgorICAgICoubGEpCisgICAgICBvbGRfbGlicmFyeT0KKyAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyIgJiYgb2xkX2xpYnJhcnk9JGxpYm5hbWUuJGxpYmV4dAorICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgorCisgICAgICAjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisgICAgICBmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KKwlpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8ICRsdF91bnNldCAkdmFyIHx8IHsgJHZhcj07IGV4cG9ydCAkdmFyOyB9OyB9OyAkcmVsaW5rX2NvbW1hbmQiCisJZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJZWxzZQorCSAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwlmaQorICAgICAgZG9uZQorICAgICAgIyBRdW90ZSB0aGUgbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIHJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRTSEVMTCBcIiRwcm9ncGF0aFwiICRwcmVzZXJ2ZV9hcmdzIC0tbW9kZT1yZWxpbmsgJGxpYnRvb2xfYXJncyBAaW5zdF9wcmVmaXhfZGlyQCkiCisgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiOyB0aGVuCisJcmVsaW5rX2NvbW1hbmQ9CisgICAgICBmaQorCisgICAgICAjIE9ubHkgY3JlYXRlIHRoZSBvdXRwdXQgaWYgbm90IGEgZHJ5IHJ1bi4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJZm9yIGluc3RhbGxlZCBpbiBubyB5ZXM7IGRvCisJICBpZiB0ZXN0IHllcyA9ICIkaW5zdGFsbGVkIjsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1pCisJICAgICMgUmVwbGFjZSBhbGwgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMgd2l0aCB0aGUgaW5zdGFsbGVkIG9uZXMKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgKi5sYSkKKwkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKKwkJbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0YAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiJyRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgLUwqKQorCQlmdW5jX3N0cmlwbmFtZSAtTCAnJyAiJGRlcGxpYiIKKwkJZnVuY19yZXBsYWNlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJCWZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiIC1MJGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdCIKKwkJOzsKKwkgICAgICAtUiopCisJCWZ1bmNfc3RyaXBuYW1lIC1SICcnICIkZGVwbGliIgorCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLVIkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorCQk7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0kbmV3ZGVwZW5kZW5jeV9saWJzCisJICAgIG5ld2RsZmlsZXM9CisKKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCSAgICAgICAgZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkJZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQlmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRsZmlsZXM9JG5ld2RsZmlsZXMKKwkgICAgbmV3ZGxwcmVmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkgICAgICAqLmxhKQorCQkjIE9ubHkgcGFzcyBwcmVvcGVuZWQgZmlsZXMgdG8gdGhlIHBzZXVkby1hcmNoaXZlIChmb3IKKwkJIyBldmVudHVhbCBsaW5raW5nIHdpdGggdGhlIGFwcC4gdGhhdCBsaW5rcyBpdCkgaWYgd2UKKwkJIyBkaWRuJ3QgYWxyZWFkeSBsaW5rIHRoZSBwcmVvcGVuZWQgb2JqZWN0cyBkaXJlY3RseSBpbnRvCisJCSMgdGhlIGxpYnJhcnk6CisJCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJCW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiJyRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSRuZXdkbHByZWZpbGVzCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSRsaWIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbGZpbGVzPSRuZXdkbGZpbGVzCisJICAgIG5ld2RscHJlZmlsZXM9CisJICAgIGZvciBsaWIgaW4gJGRscHJlZmlsZXM7IGRvCisJICAgICAgY2FzZSAkbGliIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSRsaWIgOzsKKwkJKikgYWJzPWBwd2RgIi8kbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSRuZXdkbHByZWZpbGVzCisJICBmaQorCSAgJFJNICRvdXRwdXQKKwkgICMgcGxhY2UgZGxuYW1lIGluIGNvcnJlY3QgcG9zaXRpb24gZm9yIGN5Z3dpbgorCSAgIyBJbiBmYWN0LCBpdCB3b3VsZCBiZSBuaWNlIGlmIHdlIGNvdWxkIHVzZSB0aGlzIGNvZGUgZm9yIGFsbCB0YXJnZXQKKwkgICMgc3lzdGVtcyB0aGF0IGNhbid0IGhhcmQtY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gdGhlaXIgZXhlY3V0YWJsZXMKKwkgICMgYW5kIHRoYXQgaGF2ZSBubyBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlIGluZGVwZW5kZW50IG9mIFBBVEgsCisJICAjIGJ1dCBpdCB0dXJucyBvdXQgd2UgY2FuJ3QgZWFzaWx5IGRldGVybWluZSB0aGF0IGZyb20gaW5zcGVjdGluZworCSAgIyBsaWJ0b29sIHZhcmlhYmxlcywgc28gd2UgaGF2ZSB0byBoYXJkLWNvZGUgdGhlIE9TcyB0byB3aGljaCBpdAorCSAgIyBhcHBsaWVzIGhlcmU7IGF0IHRoZSBtb21lbnQsIHRoYXQgbWVhbnMgcGxhdGZvcm1zIHRoYXQgdXNlIHRoZSBQRQorCSAgIyBvYmplY3QgZm9ybWF0IHdpdGggRExMIGZpbGVzLiAgU2VlIHRoZSBsb25nIGNvbW1lbnQgYXQgdGhlIHRvcCBvZgorCSAgIyB0ZXN0cy9iaW5kaXIuYXQgZm9yIGZ1bGwgZGV0YWlscy4KKwkgIHRkbG5hbWU9JGRsbmFtZQorCSAgY2FzZSAkaG9zdCwkb3V0cHV0LCRpbnN0YWxsZWQsJG1vZHVsZSwkZGxuYW1lIGluCisJICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCB8ICpjZWdjYyosKmxhaSx5ZXMsbm8sKi5kbGwpCisJICAgICAgIyBJZiBhIC1iaW5kaXIgYXJndW1lbnQgd2FzIHN1cHBsaWVkLCBwbGFjZSB0aGUgZGxsIHRoZXJlLgorCSAgICAgIGlmIHRlc3QgLW4gIiRiaW5kaXIiOyB0aGVuCisJCWZ1bmNfcmVsYXRpdmVfcGF0aCAiJGluc3RhbGxfbGliZGlyIiAiJGJpbmRpciIKKwkJdGRsbmFtZT0kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdC8kZGxuYW1lCisJICAgICAgZWxzZQorCQkjIE90aGVyd2lzZSBmYWxsIGJhY2sgb24gaGV1cmlzdGljLgorCQl0ZGxuYW1lPS4uL2Jpbi8kZGxuYW1lCisJICAgICAgZmkKKwkgICAgICA7OworCSAgZXNhYworCSAgJEVDSE8gPiAkb3V0cHV0ICJcCisjICRvdXRwdXRuYW1lIC0gYSBsaWJ0b29sIGxpYnJhcnkgZmlsZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04KKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgVGhlIG5hbWUgdGhhdCB3ZSBjYW4gZGxvcGVuKDMpLgorZGxuYW1lPSckdGRsbmFtZScKKworIyBOYW1lcyBvZiB0aGlzIGxpYnJhcnkuCitsaWJyYXJ5X25hbWVzPSckbGlicmFyeV9uYW1lcycKKworIyBUaGUgbmFtZSBvZiB0aGUgc3RhdGljIGFyY2hpdmUuCitvbGRfbGlicmFyeT0nJG9sZF9saWJyYXJ5JworCisjIExpbmtlciBmbGFncyB0aGF0IGNhbm5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCitpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSckbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MnCisKKyMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgorZGVwZW5kZW5jeV9saWJzPSckZGVwZW5kZW5jeV9saWJzJworCisjIE5hbWVzIG9mIGFkZGl0aW9uYWwgd2VhayBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5Cit3ZWFrX2xpYnJhcnlfbmFtZXM9JyR3ZWFrX2xpYnMnCisKKyMgVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgJGxpYm5hbWUuCitjdXJyZW50PSRjdXJyZW50CithZ2U9JGFnZQorcmV2aXNpb249JHJldmlzaW9uCisKKyMgSXMgdGhpcyBhbiBhbHJlYWR5IGluc3RhbGxlZCBsaWJyYXJ5PworaW5zdGFsbGVkPSRpbnN0YWxsZWQKKworIyBTaG91bGQgd2Ugd2FybiBhYm91dCBwb3J0YWJpbGl0eSB3aGVuIGxpbmtpbmcgYWdhaW5zdCAtbW9kdWxlcz8KK3Nob3VsZG5vdGxpbms9JG1vZHVsZQorCisjIEZpbGVzIHRvIGRsb3Blbi9kbHByZW9wZW4KK2Rsb3Blbj0nJGRsZmlsZXMnCitkbHByZW9wZW49JyRkbHByZWZpbGVzJworCisjIERpcmVjdG9yeSB0aGF0IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSBpbnN0YWxsZWQgaW46CitsaWJkaXI9JyRpbnN0YWxsX2xpYmRpciciCisJICBpZiB0ZXN0IG5vLHllcyA9ICIkaW5zdGFsbGVkLCRuZWVkX3JlbGluayI7IHRoZW4KKwkgICAgJEVDSE8gPj4gJG91dHB1dCAiXAorcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIiIKKwkgIGZpCisJZG9uZQorICAgICAgfQorCisgICAgICAjIERvIGEgc3ltYm9saWMgbGluayBzbyB0aGF0IHRoZSBsaWJ0b29sIGFyY2hpdmUgY2FuIGJlIGZvdW5kIGluCisgICAgICAjIExEX0xJQlJBUllfUEFUSCBiZWZvcmUgdGhlIHByb2dyYW0gaXMgaW5zdGFsbGVkLgorICAgICAgZnVuY19zaG93X2V2YWwgJyggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRvdXRwdXRuYW1lIiAmJiAkTE5fUyAiLi4vJG91dHB1dG5hbWUiICIkb3V0cHV0bmFtZSIgKScgJ2V4aXQgJD8nCisgICAgICA7OworICAgIGVzYWMKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworaWYgdGVzdCBsaW5rID0gIiRvcHRfbW9kZSIgfHwgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgorICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KK2ZpCisKKworIyBmdW5jX21vZGVfdW5pbnN0YWxsIGFyZy4uLgorZnVuY19tb2RlX3VuaW5zdGFsbCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIFJNPSRub25vcHQKKyAgICBmaWxlcz0KKyAgICBybWZvcmNlPWZhbHNlCisgICAgZXhpdF9zdGF0dXM9MAorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSRtYWdpYworCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1mKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciOyBybWZvcmNlPTogOzsKKyAgICAgIC0qKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciIDs7CisgICAgICAqKSBmdW5jX2FwcGVuZCBmaWxlcyAiICRhcmciIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgdGVzdCAteiAiJFJNIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIKKworICAgIHJtZGlycz0KKworICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKyAgICAgIGZ1bmNfZGlybmFtZSAiJGZpbGUiICIiICIuIgorICAgICAgZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgICBpZiB0ZXN0IC4gPSAiJGRpciI7IHRoZW4KKwlvZGlyPSRvYmpkaXIKKyAgICAgIGVsc2UKKwlvZGlyPSRkaXIvJG9iamRpcgorICAgICAgZmkKKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICAgIHRlc3QgdW5pbnN0YWxsID0gIiRvcHRfbW9kZSIgJiYgb2Rpcj0kZGlyCisKKyAgICAgICMgUmVtZW1iZXIgb2RpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCisgICAgICBpZiB0ZXN0IGNsZWFuID0gIiRvcHRfbW9kZSI7IHRoZW4KKwljYXNlICIgJHJtZGlycyAiIGluCisJICAqIiAkb2RpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHJtZGlycyAiICRvZGlyIiA7OworCWVzYWMKKyAgICAgIGZpCisKKyAgICAgICMgRG9uJ3QgZXJyb3IgaWYgdGhlIGZpbGUgZG9lc24ndCBleGlzdCBhbmQgcm0gLWYgd2FzIHVzZWQuCisgICAgICBpZiB7IHRlc3QgLUwgIiRmaWxlIjsgfSA+L2Rldi9udWxsIDI+JjEgfHwKKwkgeyB0ZXN0IC1oICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCToKKyAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisJZXhpdF9zdGF0dXM9MQorCWNvbnRpbnVlCisgICAgICBlbGlmICRybWZvcmNlOyB0aGVuCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIHJtZmlsZXM9JGZpbGUKKworICAgICAgY2FzZSAkbmFtZSBpbgorICAgICAgKi5sYSkKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKKworCSAgIyBEZWxldGUgdGhlIGxpYnRvb2wgbGlicmFyaWVzIGFuZCBzeW1saW5rcy4KKwkgIGZvciBuIGluICRsaWJyYXJ5X25hbWVzOyBkbworCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG4iCisJICBkb25lCisJICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kb2xkX2xpYnJhcnkiCisKKwkgIGNhc2UgJG9wdF9tb2RlIGluCisJICBjbGVhbikKKwkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KKwkgICAgKiIgJGRsbmFtZSAiKikgOzsKKwkgICAgKikgdGVzdCAtbiAiJGRsbmFtZSIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRkbG5hbWUiIDs7CisJICAgIGVzYWMKKwkgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1pIgorCSAgICA7OworCSAgdW5pbnN0YWxsKQorCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJyRybWZvcmNlIHx8IGV4aXRfc3RhdHVzPTEnCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBvbGRfcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMiICckcm1mb3JjZSB8fCBleGl0X3N0YXR1cz0xJworCSAgICBmaQorCSAgICAjIEZJWE1FOiBzaG91bGQgcmVpbnN0YWxsIHRoZSBiZXN0IHJlbWFpbmluZyBzaGFyZWQgbGlicmFyeS4KKwkgICAgOzsKKwkgIGVzYWMKKwlmaQorCTs7CisKKyAgICAgICoubG8pCisJIyBQb3NzaWJseSBhIGxpYnRvb2wgb2JqZWN0LCBzbyB2ZXJpZnkgaXQuCisJaWYgZnVuY19sYWxpYl9wICIkZmlsZSI7IHRoZW4KKworCSAgIyBSZWFkIHRoZSAubG8gZmlsZQorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQorCisJICAjIEFkZCBQSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRwaWNfb2JqZWN0IiAmJiB0ZXN0IG5vbmUgIT0gIiRwaWNfb2JqZWN0IjsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYgdGVzdCBub25lICE9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRub25fcGljX29iamVjdCIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqKQorCWlmIHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgorCSAgbm9leGVuYW1lPSRuYW1lCisJICBjYXNlICRmaWxlIGluCisJICAqLmV4ZSkKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG5hbWUiCisJICAgIG5vZXhlbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgICMgJGZpbGUgd2l0aCAuZXhlIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gcm1maWxlcywKKwkgICAgIyBhZGQgJGZpbGUgd2l0aG91dCAuZXhlCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIGEgbGlidG9vbCBwcm9ncmFtLgorCSAgaWYgZnVuY19sdHdyYXBwZXJfcCAiJGZpbGUiOyB0aGVuCisJICAgIGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICAgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAiJGZpbGUiCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKKwkgICAgZWxzZQorCSAgICAgIHJlbGlua19jb21tYW5kPQorCSAgICAgIGZ1bmNfc291cmNlICRkaXIvJG5vZXhlbmFtZQorCSAgICBmaQorCisJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5CisJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9Uy4kb2JqZXh0IgorCSAgICBpZiB0ZXN0IHllcyA9ICIkZmFzdF9pbnN0YWxsIiAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRuYW1lIgorCSAgICBmaQorCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSI7IHRoZW4KKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJG5vZXhlbmFtZS5jIgorCSAgICBmaQorCSAgZmkKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJFJNICRybWZpbGVzIiAnZXhpdF9zdGF0dXM9MScKKyAgICBkb25lCisKKyAgICAjIFRyeSB0byByZW1vdmUgdGhlICRvYmpkaXIncyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcworICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRkaXIiOyB0aGVuCisJZnVuY19zaG93X2V2YWwgInJtZGlyICRkaXIgPi9kZXYvbnVsbCAyPiYxIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBleGl0ICRleGl0X3N0YXR1cworfQorCitpZiB0ZXN0IHVuaW5zdGFsbCA9ICIkb3B0X21vZGUiIHx8IHRlc3QgY2xlYW4gPSAiJG9wdF9tb2RlIjsgdGhlbgorICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQorZmkKKwordGVzdCAteiAiJG9wdF9tb2RlIiAmJiB7CisgIGhlbHA9JGdlbmVyaWNfaGVscAorICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIgorfQorCit0ZXN0IC16ICIkZXhlY19jbWQiICYmIFwKKyAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlICckb3B0X21vZGUnIgorCitpZiB0ZXN0IC1uICIkZXhlY19jbWQiOyB0aGVuCisgIGV2YWwgZXhlYyAiJGV4ZWNfY21kIgorICBleGl0ICRFWElUX0ZBSUxVUkUKK2ZpCisKK2V4aXQgJGV4aXRfc3RhdHVzCisKKworIyBUaGUgVEFHcyBiZWxvdyBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgd2UgbmV2ZXIgZ2V0IGludG8gYSBzaXR1YXRpb24KKyMgd2hlcmUgd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCisjIGNob2ljZXMsIHdlIGdvIGZvciBhIHN0YXRpYyBsaWJyYXJ5LCB0aGF0IGlzIHRoZSBtb3N0IHBvcnRhYmxlLAorIyBzaW5jZSB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlIGRpc2FibGVkIGJlY2F1c2UKKyMgdGhlIHVzZXIgYXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVzZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0CisjIHRoZW0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgb24gQUlYLCBiZWNhdXNlIHdlIGRvbid0CisjIHN1cHBvcnQgaGF2aW5nIGJvdGggc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQgYXQgdGhlIHNhbWUKKyMgdGltZSBvbiB0aGF0IHBsYXRmb3JtLCBzbyB3ZSBkZWZhdWx0IHRvIGEgc2hhcmVkLW9ubHkgY29uZmlndXJhdGlvbi4KKyMgSWYgYSBkaXNhYmxlLXNoYXJlZCB0YWcgaXMgZ2l2ZW4sIHdlJ2xsIGZhbGxiYWNrIHRvIGEgc3RhdGljLW9ubHkKKyMgY29uZmlndXJhdGlvbi4gIEJ1dCB3ZSdsbCBuZXZlciBnbyBmcm9tIHN0YXRpYy1vbmx5IHRvIHNoYXJlZC1vbmx5LgorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCitidWlsZF9saWJ0b29sX2xpYnM9bm8KK2J1aWxkX29sZF9saWJzPXllcworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zaGFyZWQKKworIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworYnVpbGRfb2xkX2xpYnM9YGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbiB5ZXMpIGVjaG8gbm87OyAqKSBlY2hvIHllczs7IGVzYWNgCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTpzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246MgorIyBFbmQ6CmRpZmYgLS1naXQgYS9kaXN0Mi9tNC9heF9wdGhyZWFkLm00IGIvZGlzdDIvbTQvYXhfcHRocmVhZC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTBkZTM0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvbTQvYXhfcHRocmVhZC5tNApAQCAtMCwwICsxLDMwOSBAQAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgICAgICAgIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvY29uZi1hcmNoaXZlL2F4X3B0aHJlYWQuaHRtbAorIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMKKyMgU1lOT1BTSVMKKyMKKyMgICBBWF9QVEhSRUFEKFtBQ1RJT04tSUYtRk9VTkRbLCBBQ1RJT04tSUYtTk9ULUZPVU5EXV0pCisjCisjIERFU0NSSVBUSU9OCisjCisjICAgVGhpcyBtYWNybyBmaWd1cmVzIG91dCBob3cgdG8gYnVpbGQgQyBwcm9ncmFtcyB1c2luZyBQT1NJWCB0aHJlYWRzLiBJdAorIyAgIHNldHMgdGhlIFBUSFJFQURfTElCUyBvdXRwdXQgdmFyaWFibGUgdG8gdGhlIHRocmVhZHMgbGlicmFyeSBhbmQgbGlua2VyCisjICAgZmxhZ3MsIGFuZCB0aGUgUFRIUkVBRF9DRkxBR1Mgb3V0cHV0IHZhcmlhYmxlIHRvIGFueSBzcGVjaWFsIEMgY29tcGlsZXIKKyMgICBmbGFncyB0aGF0IGFyZSBuZWVkZWQuIChUaGUgdXNlciBjYW4gYWxzbyBmb3JjZSBjZXJ0YWluIGNvbXBpbGVyCisjICAgZmxhZ3MvbGlicyB0byBiZSB0ZXN0ZWQgYnkgc2V0dGluZyB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuKQorIworIyAgIEFsc28gc2V0cyBQVEhSRUFEX0NDIHRvIGFueSBzcGVjaWFsIEMgY29tcGlsZXIgdGhhdCBpcyBuZWVkZWQgZm9yCisjICAgbXVsdGktdGhyZWFkZWQgcHJvZ3JhbXMgKGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBDQyBvdGhlcndpc2UpLiAoVGhpcworIyAgIGlzIG5lY2Vzc2FyeSBvbiBBSVggdG8gdXNlIHRoZSBzcGVjaWFsIGNjX3IgY29tcGlsZXIgYWxpYXMuKQorIworIyAgIE5PVEU6IFlvdSBhcmUgYXNzdW1lZCB0byBub3Qgb25seSBjb21waWxlIHlvdXIgcHJvZ3JhbSB3aXRoIHRoZXNlIGZsYWdzLAorIyAgIGJ1dCBhbHNvIGxpbmsgaXQgd2l0aCB0aGVtIGFzIHdlbGwuIGUuZy4geW91IHNob3VsZCBsaW5rIHdpdGgKKyMgICAkUFRIUkVBRF9DQyAkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyAkTERGTEFHUyAuLi4gJFBUSFJFQURfTElCUyAkTElCUworIworIyAgIElmIHlvdSBhcmUgb25seSBidWlsZGluZyB0aHJlYWRzIHByb2dyYW1zLCB5b3UgbWF5IHdpc2ggdG8gdXNlIHRoZXNlCisjICAgdmFyaWFibGVzIGluIHlvdXIgZGVmYXVsdCBMSUJTLCBDRkxBR1MsIGFuZCBDQzoKKyMKKyMgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisjICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorIyAgICAgQ0M9IiRQVEhSRUFEX0NDIgorIworIyAgIEluIGFkZGl0aW9uLCBpZiB0aGUgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgdGhyZWFkLWF0dHJpYnV0ZSBjb25zdGFudAorIyAgIGhhcyBhIG5vbnN0YW5kYXJkIG5hbWUsIGRlZmluZXMgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgdG8gdGhhdCBuYW1lCisjICAgKGUuZy4gUFRIUkVBRF9DUkVBVEVfVU5ERVRBQ0hFRCBvbiBBSVgpLgorIworIyAgIEFsc28gSEFWRV9QVEhSRUFEX1BSSU9fSU5IRVJJVCBpcyBkZWZpbmVkIGlmIHB0aHJlYWQgaXMgZm91bmQgYW5kIHRoZQorIyAgIFBUSFJFQURfUFJJT19JTkhFUklUIHN5bWJvbCBpcyBkZWZpbmVkIHdoZW4gY29tcGlsaW5nIHdpdGgKKyMgICBQVEhSRUFEX0NGTEFHUy4KKyMKKyMgICBBQ1RJT04tSUYtRk9VTkQgaXMgYSBsaXN0IG9mIHNoZWxsIGNvbW1hbmRzIHRvIHJ1biBpZiBhIHRocmVhZHMgbGlicmFyeQorIyAgIGlzIGZvdW5kLCBhbmQgQUNUSU9OLUlGLU5PVC1GT1VORCBpcyBhIGxpc3Qgb2YgY29tbWFuZHMgdG8gcnVuIGl0IGlmIGl0CisjICAgaXMgbm90IGZvdW5kLiBJZiBBQ1RJT04tSUYtRk9VTkQgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgYWN0aW9uCisjICAgd2lsbCBkZWZpbmUgSEFWRV9QVEhSRUFELgorIworIyAgIFBsZWFzZSBsZXQgdGhlIGF1dGhvcnMga25vdyBpZiB0aGlzIG1hY3JvIGZhaWxzIG9uIGFueSBwbGF0Zm9ybSwgb3IgaWYKKyMgICB5b3UgaGF2ZSBhbnkgb3RoZXIgc3VnZ2VzdGlvbnMgb3IgY29tbWVudHMuIFRoaXMgbWFjcm8gd2FzIGJhc2VkIG9uIHdvcmsKKyMgICBieSBTR0ogb24gYXV0b2NvbmYgc2NyaXB0cyBmb3IgRkZUVyAoaHR0cDovL3d3dy5mZnR3Lm9yZy8pICh3aXRoIGhlbHAKKyMgICBmcm9tIE0uIEZyaWdvKSwgYXMgd2VsbCBhcyBhY19wdGhyZWFkIGFuZCBoYl9wdGhyZWFkIG1hY3JvcyBwb3N0ZWQgYnkKKyMgICBBbGVqYW5kcm8gRm9yZXJvIEN1ZXJ2byB0byB0aGUgYXV0b2NvbmYgbWFjcm8gcmVwb3NpdG9yeS4gV2UgYXJlIGFsc28KKyMgICBncmF0ZWZ1bCBmb3IgdGhlIGhlbHBmdWwgZmVlZGJhY2sgb2YgbnVtZXJvdXMgdXNlcnMuCisjCisjICAgVXBkYXRlZCBmb3IgQXV0b2NvbmYgMi42OCBieSBEYW5pZWwgUmljaGFyZCBHLgorIworIyBMSUNFTlNFCisjCisjICAgQ29weXJpZ2h0IChjKSAyMDA4IFN0ZXZlbiBHLiBKb2huc29uIDxzdGV2ZW5qQGFsdW0ubWl0LmVkdT4KKyMgICBDb3B5cmlnaHQgKGMpIDIwMTEgRGFuaWVsIFJpY2hhcmQgRy4gPHNrdW5rQGlTS1VOSy5PUkc+CisjCisjICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisjICAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgR2VuZXJhbAorIyAgIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyMgICB3aXRoIHRoaXMgcHJvZ3JhbS4gSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorIworIyAgIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSByZXNwZWN0aXZlIEF1dG9jb25mIE1hY3JvJ3MgY29weXJpZ2h0IG93bmVyCisjICAgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IHRoZSBjb25maWd1cmUKKyMgICBzY3JpcHRzIHRoYXQgYXJlIHRoZSBvdXRwdXQgb2YgQXV0b2NvbmYgd2hlbiBwcm9jZXNzaW5nIHRoZSBNYWNyby4gWW91CisjICAgbmVlZCBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugd2hlbiB1c2luZworIyAgIG9yIGRpc3RyaWJ1dGluZyBzdWNoIHNjcmlwdHMsIGV2ZW4gdGhvdWdoIHBvcnRpb25zIG9mIHRoZSB0ZXh0IG9mIHRoZQorIyAgIE1hY3JvIGFwcGVhciBpbiB0aGVtLiBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgZG9lcyBnb3Zlcm4KKyMgICBhbGwgb3RoZXIgdXNlIG9mIHRoZSBtYXRlcmlhbCB0aGF0IGNvbnN0aXR1dGVzIHRoZSBBdXRvY29uZiBNYWNyby4KKyMKKyMgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwgYXBwbGllcyB0byB2ZXJzaW9ucyBvZiB0aGUgQXV0b2NvbmYKKyMgICBNYWNybyByZWxlYXNlZCBieSB0aGUgQXV0b2NvbmYgQXJjaGl2ZS4gV2hlbiB5b3UgbWFrZSBhbmQgZGlzdHJpYnV0ZSBhCisjICAgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgQXV0b2NvbmYgTWFjcm8sIHlvdSBtYXkgZXh0ZW5kIHRoaXMgc3BlY2lhbAorIyAgIGV4Y2VwdGlvbiB0byB0aGUgR1BMIHRvIGFwcGx5IHRvIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiBhcyB3ZWxsLgorCisjc2VyaWFsIDE4CisKK0FVX0FMSUFTKFtBQ1hfUFRIUkVBRF0sIFtBWF9QVEhSRUFEXSkKK0FDX0RFRlVOKFtBWF9QVEhSRUFEXSwgWworQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQorQUNfTEFOR19QVVNIKFtDXSkKK2F4X3B0aHJlYWRfb2s9bm8KKworIyBXZSB1c2VkIHRvIGNoZWNrIGZvciBwdGhyZWFkLmggZmlyc3QsIGJ1dCB0aGlzIGZhaWxzIGlmIHB0aHJlYWQuaAorIyByZXF1aXJlcyBzcGVjaWFsIGNvbXBpbGVyIGZsYWdzIChlLmcuIG9uIFRydWU2NCBvciBTZXF1ZW50KS4KKyMgSXQgZ2V0cyBjaGVja2VkIGZvciBpbiB0aGUgbGluayB0ZXN0IGFueXdheS4KKworIyBGaXJzdCBvZiBhbGwsIGNoZWNrIGlmIHRoZSB1c2VyIGhhcyBzZXQgYW55IG9mIHRoZSBQVEhSRUFEX0xJQlMsCisjIGV0Y2V0ZXJhIGVudmlyb25tZW50IHZhcmlhYmxlcywgYW5kIGlmIHRocmVhZHMgbGlua2luZyB3b3JrcyB1c2luZworIyB0aGVtOgoraWYgdGVzdCB4IiRQVEhSRUFEX0xJQlMkUFRIUkVBRF9DRkxBR1MiICE9IHg7IHRoZW4KKyAgICAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgICAgIENGTEFHUz0iJENGTEFHUyAkUFRIUkVBRF9DRkxBR1MiCisgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICAgIExJQlM9IiRQVEhSRUFEX0xJQlMgJExJQlMiCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHB0aHJlYWRfam9pbiBpbiBMSUJTPSRQVEhSRUFEX0xJQlMgd2l0aCBDRkxBR1M9JFBUSFJFQURfQ0ZMQUdTXSkKKyAgICAgICAgQUNfVFJZX0xJTktfRlVOQyhwdGhyZWFkX2pvaW4sIGF4X3B0aHJlYWRfb2s9eWVzKQorICAgICAgICBBQ19NU0dfUkVTVUxUKCRheF9wdGhyZWFkX29rKQorICAgICAgICBpZiB0ZXN0IHgiJGF4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCisgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSIiCisgICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKKyAgICAgICAgZmkKKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCitmaQorCisjIFdlIG11c3QgY2hlY2sgZm9yIHRoZSB0aHJlYWRzIGxpYnJhcnkgdW5kZXIgYSBudW1iZXIgb2YgZGlmZmVyZW50CisjIG5hbWVzOyB0aGUgb3JkZXJpbmcgaXMgdmVyeSBpbXBvcnRhbnQgYmVjYXVzZSBzb21lIHN5c3RlbXMKKyMgKGUuZy4gREVDKSBoYXZlIGJvdGggLWxwdGhyZWFkIGFuZCAtbHB0aHJlYWRzLCB3aGVyZSBvbmUgb2YgdGhlCisjIGxpYnJhcmllcyBpcyBicm9rZW4gKG5vbi1QT1NJWCkuCisKKyMgQ3JlYXRlIGEgbGlzdCBvZiB0aHJlYWQgZmxhZ3MgdG8gdHJ5LiAgSXRlbXMgc3RhcnRpbmcgd2l0aCBhICItIiBhcmUKKyMgQyBjb21waWxlciBmbGFncywgYW5kIG90aGVyIGl0ZW1zIGFyZSBsaWJyYXJ5IG5hbWVzLCBleGNlcHQgZm9yICJub25lIgorIyB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSB0cnkgd2l0aG91dCBhbnkgZmxhZ3MgYXQgYWxsLCBhbmQgInB0aHJlYWQtY29uZmlnIgorIyB3aGljaCBpcyBhIHByb2dyYW0gcmV0dXJuaW5nIHRoZSBmbGFncyBmb3IgdGhlIFB0aCBlbXVsYXRpb24gbGlicmFyeS4KKworYXhfcHRocmVhZF9mbGFncz0icHRocmVhZHMgbm9uZSAtS3RocmVhZCAta3RocmVhZCBsdGhyZWFkIC1wdGhyZWFkIC1wdGhyZWFkcyAtbXRocmVhZHMgcHRocmVhZCAtLXRocmVhZC1zYWZlIC1tdCBwdGhyZWFkLWNvbmZpZyIKKworIyBUaGUgb3JkZXJpbmcgKmlzKiAoc29tZXRpbWVzKSBpbXBvcnRhbnQuICBTb21lIG5vdGVzIG9uIHRoZQorIyBpbmRpdmlkdWFsIGl0ZW1zIGZvbGxvdzoKKworIyBwdGhyZWFkczogQUlYIChtdXN0IGNoZWNrIHRoaXMgYmVmb3JlIC1scHRocmVhZCkKKyMgbm9uZTogaW4gY2FzZSB0aHJlYWRzIGFyZSBpbiBsaWJjOyBzaG91bGQgYmUgdHJpZWQgYmVmb3JlIC1LdGhyZWFkIGFuZAorIyAgICAgICBvdGhlciBjb21waWxlciBmbGFncyB0byBwcmV2ZW50IGNvbnRpbnVhbCBjb21waWxlciB3YXJuaW5ncworIyAtS3RocmVhZDogU2VxdWVudCAodGhyZWFkcyBpbiBsaWJjLCBidXQgLUt0aHJlYWQgbmVlZGVkIGZvciBwdGhyZWFkLmgpCisjIC1rdGhyZWFkOiBGcmVlQlNEIGtlcm5lbCB0aHJlYWRzIChwcmVmZXJyZWQgdG8gLXB0aHJlYWQgc2luY2UgU01QLWFibGUpCisjIGx0aHJlYWQ6IExpbnV4VGhyZWFkcyBwb3J0IG9uIEZyZWVCU0QgKGFsc28gcHJlZmVycmVkIHRvIC1wdGhyZWFkKQorIyAtcHRocmVhZDogTGludXgvZ2NjIChrZXJuZWwgdGhyZWFkcyksIEJTRC9nY2MgKHVzZXJsYW5kIHRocmVhZHMpCisjIC1wdGhyZWFkczogU29sYXJpcy9nY2MKKyMgLW10aHJlYWRzOiBNaW5ndzMyL2djYywgTHlueC9nY2MKKyMgLW10OiBTdW4gV29ya3Nob3AgQyAobWF5IG9ubHkgbGluayBTdW5PUyB0aHJlYWRzIFstbHRocmVhZF0sIGJ1dCBpdAorIyAgICAgIGRvZXNuJ3QgaHVydCB0byBjaGVjayBzaW5jZSB0aGlzIHNvbWV0aW1lcyBkZWZpbmVzIHB0aHJlYWRzIHRvbzsKKyMgICAgICBhbHNvIGRlZmluZXMgLURfUkVFTlRSQU5UKQorIyAgICAgIC4uLiAtbXQgaXMgYWxzbyB0aGUgcHRocmVhZHMgZmxhZyBmb3IgSFAvYUNDCisjIHB0aHJlYWQ6IExpbnV4LCBldGNldGVyYQorIyAtLXRocmVhZC1zYWZlOiBLQUkgQysrCisjIHB0aHJlYWQtY29uZmlnOiB1c2UgcHRocmVhZC1jb25maWcgcHJvZ3JhbSAoZm9yIEdOVSBQdGggbGlicmFyeSkKKworY2FzZSAke2hvc3Rfb3N9IGluCisgICAgICAgIHNvbGFyaXMqKQorCisgICAgICAgICMgT24gU29sYXJpcyAoYXQgbGVhc3QsIGZvciBzb21lIHZlcnNpb25zKSwgbGliYyBjb250YWlucyBzdHViYmVkCisgICAgICAgICMgKG5vbi1mdW5jdGlvbmFsKSB2ZXJzaW9ucyBvZiB0aGUgcHRocmVhZHMgcm91dGluZXMsIHNvIGxpbmstYmFzZWQKKyAgICAgICAgIyB0ZXN0cyB3aWxsIGVycm9uZW91c2x5IHN1Y2NlZWQuICAoV2UgbmVlZCB0byBsaW5rIHdpdGggLXB0aHJlYWRzLy1tdC8KKyAgICAgICAgIyAtbHB0aHJlYWQuKSAgKFRoZSBzdHVicyBhcmUgbWlzc2luZyBwdGhyZWFkX2NsZWFudXBfcHVzaCwgb3IgcmF0aGVyCisgICAgICAgICMgYSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhpcyBtYWNybywgc28gd2UgY291bGQgY2hlY2sgZm9yIHRoYXQsIGJ1dAorICAgICAgICAjIHdobyBrbm93cyB3aGV0aGVyIHRoZXknbGwgc3R1YiB0aGF0IHRvbyBpbiBhIGZ1dHVyZSBsaWJjLikgIFNvLAorICAgICAgICAjIHdlJ2xsIGp1c3QgbG9vayBmb3IgLXB0aHJlYWRzIGFuZCAtbHB0aHJlYWQgZmlyc3Q6CisKKyAgICAgICAgYXhfcHRocmVhZF9mbGFncz0iLXB0aHJlYWRzIHB0aHJlYWQgLW10IC1wdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgorICAgICAgICA7OworCisgICAgICAgIGRhcndpbiopCisgICAgICAgIGF4X3B0aHJlYWRfZmxhZ3M9Ii1wdGhyZWFkICRheF9wdGhyZWFkX2ZsYWdzIgorICAgICAgICA7OworZXNhYworCitpZiB0ZXN0IHgiJGF4X3B0aHJlYWRfb2siID0geG5vOyB0aGVuCitmb3IgZmxhZyBpbiAkYXhfcHRocmVhZF9mbGFnczsgZG8KKworICAgICAgICBjYXNlICRmbGFnIGluCisgICAgICAgICAgICAgICAgbm9uZSkKKyAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgcHRocmVhZHMgd29yayB3aXRob3V0IGFueSBmbGFnc10pCisgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAgICAgICAgIC0qKQorICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBwdGhyZWFkcyB3b3JrIHdpdGggJGZsYWddKQorICAgICAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkZmxhZyIKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgcHRocmVhZC1jb25maWcpCisgICAgICAgICAgICAgICAgQUNfQ0hFQ0tfUFJPRyhheF9wdGhyZWFkX2NvbmZpZywgcHRocmVhZC1jb25maWcsIHllcywgbm8pCisgICAgICAgICAgICAgICAgaWYgdGVzdCB4IiRheF9wdGhyZWFkX2NvbmZpZyIgPSB4bm87IHRoZW4gY29udGludWU7IGZpCisgICAgICAgICAgICAgICAgUFRIUkVBRF9DRkxBR1M9ImBwdGhyZWFkLWNvbmZpZyAtLWNmbGFnc2AiCisgICAgICAgICAgICAgICAgUFRIUkVBRF9MSUJTPSJgcHRocmVhZC1jb25maWcgLS1sZGZsYWdzYCBgcHRocmVhZC1jb25maWcgLS1saWJzYCIKKyAgICAgICAgICAgICAgICA7OworCisgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciB0aGUgcHRocmVhZHMgbGlicmFyeSAtbCRmbGFnXSkKKyAgICAgICAgICAgICAgICBQVEhSRUFEX0xJQlM9Ii1sJGZsYWciCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworCisgICAgICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgJFBUSFJFQURfQ0ZMQUdTIgorCisgICAgICAgICMgQ2hlY2sgZm9yIHZhcmlvdXMgZnVuY3Rpb25zLiAgV2UgbXVzdCBpbmNsdWRlIHB0aHJlYWQuaCwKKyAgICAgICAgIyBzaW5jZSBzb21lIGZ1bmN0aW9ucyBtYXkgYmUgbWFjcm9zLiAgKE9uIHRoZSBTZXF1ZW50LCB3ZQorICAgICAgICAjIG5lZWQgYSBzcGVjaWFsIGZsYWcgLUt0aHJlYWQgdG8gbWFrZSB0aGlzIGhlYWRlciBjb21waWxlLikKKyAgICAgICAgIyBXZSBjaGVjayBmb3IgcHRocmVhZF9qb2luIGJlY2F1c2UgaXQgaXMgaW4gLWxwdGhyZWFkIG9uIElSSVgKKyAgICAgICAgIyB3aGlsZSBwdGhyZWFkX2NyZWF0ZSBpcyBpbiBsaWJjLiAgV2UgY2hlY2sgZm9yIHB0aHJlYWRfYXR0cl9pbml0CisgICAgICAgICMgZHVlIHRvIERFQyBjcmF6aW5lc3Mgd2l0aCAtbHB0aHJlYWRzLiAgV2UgY2hlY2sgZm9yCisgICAgICAgICMgcHRocmVhZF9jbGVhbnVwX3B1c2ggYmVjYXVzZSBpdCBpcyBvbmUgb2YgdGhlIGZldyBwdGhyZWFkCisgICAgICAgICMgZnVuY3Rpb25zIG9uIFNvbGFyaXMgdGhhdCBkb2Vzbid0IGhhdmUgYSBub24tZnVuY3Rpb25hbCBsaWJjIHN0dWIuCisgICAgICAgICMgV2UgdHJ5IHB0aHJlYWRfY3JlYXRlIG9uIGdlbmVyYWwgcHJpbmNpcGxlcy4KKyAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpYyB2b2lkIHJvdXRpbmUodm9pZCAqYSkgeyBhID0gMDsgfQorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgKnN0YXJ0X3JvdXRpbmUodm9pZCAqYSkgeyByZXR1cm4gYTsgfV0sCisgICAgICAgICAgICAgICAgICAgICAgIFtwdGhyZWFkX3QgdGg7IHB0aHJlYWRfYXR0cl90IGF0dHI7CisgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX2NyZWF0ZSgmdGgsIDAsIHN0YXJ0X3JvdXRpbmUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9qb2luKHRoLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfYXR0cl9pbml0KCZhdHRyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfY2xlYW51cF9wdXNoKHJvdXRpbmUsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9jbGVhbnVwX3BvcCgwKSAvKiA7ICovXSldLAorICAgICAgICAgICAgICAgIFtheF9wdGhyZWFkX29rPXllc10sCisgICAgICAgICAgICAgICAgW10pCisKKyAgICAgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICAgICAgQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkYXhfcHRocmVhZF9vaykKKyAgICAgICAgaWYgdGVzdCAieCRheF9wdGhyZWFkX29rIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZmkKKworICAgICAgICBQVEhSRUFEX0xJQlM9IiIKKyAgICAgICAgUFRIUkVBRF9DRkxBR1M9IiIKK2RvbmUKK2ZpCisKKyMgVmFyaW91cyBvdGhlciBjaGVja3M6CitpZiB0ZXN0ICJ4JGF4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorICAgICAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSIkUFRIUkVBRF9MSUJTICRMSUJTIgorICAgICAgICBzYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRQVEhSRUFEX0NGTEFHUyIKKworICAgICAgICAjIERldGVjdCBBSVggbG9zc2FnZTogSk9JTkFCTEUgYXR0cmlidXRlIGlzIGNhbGxlZCBVTkRFVEFDSEVELgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBqb2luYWJsZSBwdGhyZWFkIGF0dHJpYnV0ZV0pCisgICAgICAgIGF0dHJfbmFtZT11bmtub3duCisgICAgICAgIGZvciBhdHRyIGluIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFIFBUSFJFQURfQ1JFQVRFX1VOREVUQUNIRUQ7IGRvCisgICAgICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8cHRocmVhZC5oPl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW50IGF0dHIgPSAkYXR0cjsgcmV0dXJuIGF0dHIgLyogOyAqL10pXSwKKyAgICAgICAgICAgICAgICBbYXR0cl9uYW1lPSRhdHRyOyBicmVha10sCisgICAgICAgICAgICAgICAgW10pCisgICAgICAgIGRvbmUKKyAgICAgICAgQUNfTVNHX1JFU1VMVCgkYXR0cl9uYW1lKQorICAgICAgICBpZiB0ZXN0ICIkYXR0cl9uYW1lIiAhPSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRTsgdGhlbgorICAgICAgICAgICAgQUNfREVGSU5FX1VOUVVPVEVEKFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFLCAkYXR0cl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gbmVjZXNzYXJ5IHN5bWJvbCBpZiB0aGlzIGNvbnN0YW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgYSBub24tc3RhbmRhcmQgbmFtZSBvbiB5b3VyIHN5c3RlbS5dKQorICAgICAgICBmaQorCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbaWYgbW9yZSBzcGVjaWFsIGZsYWdzIGFyZSByZXF1aXJlZCBmb3IgcHRocmVhZHNdKQorICAgICAgICBmbGFnPW5vCisgICAgICAgIGNhc2UgJHtob3N0X29zfSBpbgorICAgICAgICAgICAgYWl4KiB8IGZyZWVic2QqIHwgZGFyd2luKikgZmxhZz0iLURfVEhSRUFEX1NBRkUiOzsKKyAgICAgICAgICAgIG9zZiogfCBocHV4KikgZmxhZz0iLURfUkVFTlRSQU5UIjs7CisgICAgICAgICAgICBzb2xhcmlzKikKKyAgICAgICAgICAgIGlmIHRlc3QgIiRHQ0MiID0gInllcyI7IHRoZW4KKyAgICAgICAgICAgICAgICBmbGFnPSItRF9SRUVOVFJBTlQiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZmxhZz0iLW10IC1EX1JFRU5UUkFOVCIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIEFDX01TR19SRVNVTFQoJHtmbGFnfSkKKyAgICAgICAgaWYgdGVzdCAieCRmbGFnIiAhPSB4bm87IHRoZW4KKyAgICAgICAgICAgIFBUSFJFQURfQ0ZMQUdTPSIkZmxhZyAkUFRIUkVBRF9DRkxBR1MiCisgICAgICAgIGZpCisKKyAgICAgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBQVEhSRUFEX1BSSU9fSU5IRVJJVF0sCisgICAgICAgICAgICBheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVCwgWworICAgICAgICAgICAgICAgIEFDX0xJTktfSUZFTFNFKFsKKyAgICAgICAgICAgICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHB0aHJlYWQuaD5dXSwgW1tpbnQgaSA9IFBUSFJFQURfUFJJT19JTkhFUklUO11dKV0sCisgICAgICAgICAgICAgICAgICAgIFtheF9jdl9QVEhSRUFEX1BSSU9fSU5IRVJJVD15ZXNdLAorICAgICAgICAgICAgICAgICAgICBbYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQ9bm9dKQorICAgICAgICAgICAgXSkKKyAgICAgICAgQVNfSUYoW3Rlc3QgIngkYXhfY3ZfUFRIUkVBRF9QUklPX0lOSEVSSVQiID0gInh5ZXMiXSwKKyAgICAgICAgICAgIEFDX0RFRklORShbSEFWRV9QVEhSRUFEX1BSSU9fSU5IRVJJVF0sIDEsIFtIYXZlIFBUSFJFQURfUFJJT19JTkhFUklULl0pKQorCisgICAgICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCisgICAgICAgICMgTW9yZSBBSVggbG9zc2FnZTogbXVzdCBjb21waWxlIHdpdGggeGxjX3Igb3IgY2NfcgorICAgICAgICBpZiB0ZXN0IHgiJEdDQyIgIT0geHllczsgdGhlbgorICAgICAgICAgIEFDX0NIRUNLX1BST0dTKFBUSFJFQURfQ0MsIHhsY19yIGNjX3IsICR7Q0N9KQorICAgICAgICBlbHNlCisgICAgICAgICAgUFRIUkVBRF9DQz0kQ0MKKyAgICAgICAgZmkKK2Vsc2UKKyAgICAgICAgUFRIUkVBRF9DQz0iJENDIgorZmkKKworQUNfU1VCU1QoUFRIUkVBRF9MSUJTKQorQUNfU1VCU1QoUFRIUkVBRF9DRkxBR1MpCitBQ19TVUJTVChQVEhSRUFEX0NDKQorCisjIEZpbmFsbHksIGV4ZWN1dGUgQUNUSU9OLUlGLUZPVU5EL0FDVElPTi1JRi1OT1QtRk9VTkQ6CitpZiB0ZXN0IHgiJGF4X3B0aHJlYWRfb2siID0geHllczsgdGhlbgorICAgICAgICBpZmVsc2UoWyQxXSwsQUNfREVGSU5FKEhBVkVfUFRIUkVBRCwxLFtEZWZpbmUgaWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcyBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcy5dKSxbJDFdKQorICAgICAgICA6CitlbHNlCisgICAgICAgIGF4X3B0aHJlYWRfb2s9bm8KKyAgICAgICAgJDIKK2ZpCitBQ19MQU5HX1BPUAorXSlkbmwgQVhfUFRIUkVBRApkaWZmIC0tZ2l0IGEvZGlzdDIvbTQvbGlidG9vbC5tNCBiL2Rpc3QyL200L2xpYnRvb2wubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiYzMzNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL200L2xpYnRvb2wubTQKQEAgLTAsMCArMSw4MzY5IEBACisjIGxpYnRvb2wubTQgLSBDb25maWd1cmUgbGlidG9vbCBmb3IgdGhlIGhvc3Qgc3lzdGVtLiAtKi1BdXRvY29uZi0qLQorIworIyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDAxLCAyMDAzLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKK200X2RlZmluZShbX0xUX0NPUFlJTkddLCBbZG5sCisjIENvcHlyaWdodCAoQykgMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KKyMgd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgR05VIExpYnRvb2wgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIG9yIGxpYnJhcnkgdGhhdCBpcyBidWlsdAorIyB1c2luZyBHTlUgTGlidG9vbCwgeW91IG1heSBpbmNsdWRlIHRoaXMgZmlsZSB1bmRlciB0aGUgIHNhbWUKKyMgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorXSkKKworIyBzZXJpYWwgNTggTFRfSU5JVAorCisKKyMgTFRfUFJFUkVRKFZFUlNJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBhbmQgZXhpdCBpZiB0aGlzIGxpYnRvb2wgdmVyc2lvbiBpcyBsZXNzIHRoYXQgVkVSU0lPTi4KK200X2RlZnVuKFtMVF9QUkVSRVFdLAorW200X2lmKG00X3ZlcnNpb25fY29tcGFyZShtNF9kZWZuKFtMVF9QQUNLQUdFX1ZFUlNJT05dKSwgWyQxXSksIC0xLAorICAgICAgIFttNF9kZWZhdWx0KFskM10sCisJCSAgIFttNF9mYXRhbChbTGlidG9vbCB2ZXJzaW9uICQxIG9yIGhpZ2hlciBpcyByZXF1aXJlZF0sCisJCSAgICAgICAgICAgICA2MyldKV0sCisgICAgICAgWyQyXSldKQorCisKKyMgX0xUX0NIRUNLX0JVSUxERElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBDb21wbGFpbiBpZiB0aGUgYWJzb2x1dGUgYnVpbGQgZGlyZWN0b3J5IG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzCittNF9kZWZ1bihbX0xUX0NIRUNLX0JVSUxERElSXSwKK1tjYXNlIGBwd2RgIGluCisgICpcICogfCAqXAkqKQorICAgIEFDX01TR19XQVJOKFtMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gYHB3ZGBdKSA7OworZXNhYworXSkKKworCisjIExUX0lOSVQoW09QVElPTlNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9JTklUXSwKK1tBQ19QUkVSRVEoWzIuNjJdKWRubCBXZSB1c2UgQUNfUEFUSF9QUk9HU19GRUFUVVJFX0NIRUNLCitBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRfTEFOR10pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xURExfSU5JVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfQlVJTERESVJdKWRubAorCitkbmwgQXV0b2NvbmYgZG9lc24ndCBjYXRjaCB1bmV4cGFuZGVkIExUXyBtYWNyb3MgYnkgZGVmYXVsdDoKK200X3BhdHRlcm5fZm9yYmlkKFteXz9MVF9bQS1aX10rJF0pZG5sCittNF9wYXR0ZXJuX2FsbG93KFteKF9MVF9FT0Z8TFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PV3xMVF9NVUxUSV9NT0RVTEUpJF0pZG5sCitkbmwgYWNsb2NhbCBkb2Vzbid0IHB1bGwgbHRvcHRpb25zLm00LCBsdHN1Z2FyLm00LCBvciBsdHZlcnNpb24ubTQKK2RubCB1bmxlc3Mgd2UgcmVxdWlyZSBhbiBBQ19ERUZVTmVkIG1hY3JvOgorQUNfUkVRVUlSRShbTFRPUFRJT05TX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRTVUdBUl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUVkVSU0lPTl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUT0JTT0xFVEVfVkVSU0lPTl0pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJPR19MVE1BSU5dKWRubAorCitfTFRfU0hFTExfSU5JVChbU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH1dKQorCitkbmwgUGFyc2UgT1BUSU9OUworX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKK0xJQlRPT0xfREVQUz0kbHRtYWluCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKK0FDX1NVQlNUKExJQlRPT0wpZG5sCisKK19MVF9TRVRVUAorCisjIE9ubHkgZXhwYW5kIG9uY2U6CittNF9kZWZpbmUoW0xUX0lOSVRdKQorXSkjIExUX0lOSVQKKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQUNfUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorQVVfQUxJQVMoW0FNX1BST0dfTElCVE9PTF0sIFtMVF9JTklUXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUFJPR19MSUJUT09MXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX1BST0dfTElCVE9PTF0sIFtdKQorCisKKyMgX0xUX1BSRVBBUkVfQ0NfQkFTRU5BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfUFJFUEFSRV9DQ19CQVNFTkFNRV0sIFsKKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorZnVuY19jY19iYXNlbmFtZSAoKQoreworICAgIGZvciBjY190ZW1wIGluIEBTfEAqIiI7IGRvCisgICAgICBjYXNlICRjY190ZW1wIGluCisgICAgICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7CisgICAgICAgIGRpc3RjYyB8ICpbW1xcL11dZGlzdGNjIHwgcHVyaWZ5IHwgKltbXFwvXV1wdXJpZnkgKSA7OworICAgICAgICBcLSopIDs7CisgICAgICAgICopIGJyZWFrOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisgICAgZnVuY19jY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCit9CitdKSMgX0xUX1BSRVBBUkVfQ0NfQkFTRU5BTUUKKworCisjIF9MVF9DQ19CQVNFTkFNRShDQykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJdCB3b3VsZCBiZSBjbGVhcmVyIHRvIGNhbGwgQUNfUkVRVUlSRXMgZnJvbSBfTFRfUFJFUEFSRV9DQ19CQVNFTkFNRSwKKyMgYnV0IHRoYXQgbWFjcm8gaXMgYWxzbyBleHBhbmRlZCBpbnRvIGdlbmVyYXRlZCBsaWJ0b29sIHNjcmlwdCwgd2hpY2gKKyMgYXJyYW5nZXMgZm9yICRTRUQgYW5kICRFQ0hPIHRvIGJlIHNldCBieSBkaWZmZXJlbnQgbWVhbnMuCittNF9kZWZ1bihbX0xUX0NDX0JBU0VOQU1FXSwKK1ttNF9yZXF1aXJlKFtfTFRfUFJFUEFSRV9DQ19CQVNFTkFNRV0pZG5sCitBQ19SRVFVSVJFKFtfTFRfREVDTF9TRURdKWRubAorQUNfUkVRVUlSRShbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdKWRubAorZnVuY19jY19iYXNlbmFtZSAkMQorY2NfYmFzZW5hbWU9JGZ1bmNfY2NfYmFzZW5hbWVfcmVzdWx0CitdKQorCisKKyMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEl0IGlzIG9rYXkgdG8gdXNlIHRoZXNlIGZpbGUgY29tbWFuZHMgYW5kIGFzc3VtZSB0aGV5IGhhdmUgYmVlbiBzZXQKKyMgc2Vuc2libHkgYWZ0ZXIgJ200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKScuCittNF9kZWZ1bihbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10sCitbOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorXSkjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKworCisjIF9MVF9TRVRVUAorIyAtLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfU0VUVVBdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitBQ19SRVFVSVJFKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10pZG5sCitBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCisKK19MVF9ERUNMKFtdLCBbUEFUSF9TRVBBUkFUT1JdLCBbMV0sIFtUaGUgUEFUSCBzZXBhcmF0b3IgZm9yIHRoZSBidWlsZCBzeXN0ZW1dKWRubAorZG5sCitfTFRfREVDTChbXSwgW2hvc3RfYWxpYXNdLCBbMF0sIFtUaGUgaG9zdCBzeXN0ZW1dKWRubAorX0xUX0RFQ0woW10sIFtob3N0XSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtob3N0X29zXSwgWzBdKWRubAorZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX2FsaWFzXSwgWzBdLCBbVGhlIGJ1aWxkIHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkXSwgWzBdKWRubAorX0xUX0RFQ0woW10sIFtidWlsZF9vc10sIFswXSlkbmwKK2RubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX0xEXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0xOX1NdKWRubAordGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgorX0xUX0RFQ0woW10sIFtMTl9TXSwgWzFdLCBbV2hldGhlciB3ZSBuZWVkIHNvZnQgb3IgaGFyZCBsaW5rc10pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0xUX0NNRF9NQVhfTEVOXSlkbmwKK19MVF9ERUNMKFtvYmpleHRdLCBbYWNfb2JqZXh0XSwgWzBdLCBbT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpXSlkbmwKK19MVF9ERUNMKFtdLCBbZXhlZXh0XSwgWzBdLCBbRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpXSlkbmwKK2RubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorbTRfcmVxdWlyZShbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9SRUxPQURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQl0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX09MRF9BUkNISVZFXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1dJVEhfU1lTUk9PVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX1RSVU5DQVRFXSlkbmwKKworX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCisjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorXSkKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCitfTFRfQ0hFQ0tfT0JKRElSCisKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgR2xvYmFsIHZhcmlhYmxlczoKK29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhICcuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKKword2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCisKK29sZF9DQz0kQ0MKK29sZF9DRkxBR1M9JENGTEFHUworCisjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCisKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0Cit0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQorY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KK2ZpbGVfbWFnaWMqKQorICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCisgICAgX0xUX1BBVEhfTUFHSUMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKK0xUX1NVUFBPUlRFRF9UQUcoW0NDXSkKK19MVF9MQU5HX0NfQ09ORklHCitfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworX0xUX0NPTkZJR19DT01NQU5EUworXSkjIF9MVF9TRVRVUAorCisKKyMgX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGEgZmV3IHNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwIHVzIGRvIHJvYnVzdCBxdW90aW5nLgorbTRfZGVmdW4oW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSwKK1sjIEJhY2tzbGFzaGlmeSBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluCisjIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtbImAkXFxdXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbWyJgXFxdXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaW5nbGUgcXVvdGUuCitkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3Q9J3MvJ1wnJy8nXCdcXFxcXFxcJ1wnJy9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworXSkKKworIyBfTFRfUFJPR19MVE1BSU4KKyMgLS0tLS0tLS0tLS0tLS0tCisjIE5vdGUgdGhhdCB0aGlzIGNvZGUgaXMgY2FsbGVkIGJvdGggZnJvbSAnY29uZmlndXJlJywgYW5kICdjb25maWcuc3RhdHVzJworIyBub3cgdGhhdCB3ZSB1c2UgQUNfQ09ORklHX0NPTU1BTkRTIHRvIGdlbmVyYXRlIGxpYnRvb2wuICBOb3RhYmx5LAorIyAnY29uZmlnLnN0YXR1cycgaGFzIG5vIHZhbHVlIGZvciBhY19hdXhfZGlyIHVubGVzcyB3ZSBhcmUgdXNpbmcgQXV0b21ha2UsCisjIHNvIHdlIHBhc3MgYSBjb3B5IGFsb25nIHRvIG1ha2Ugc3VyZSBpdCBoYXMgYSBzZW5zaWJsZSB2YWx1ZSBhbnl3YXkuCittNF9kZWZ1bihbX0xUX1BST0dfTFRNQUlOXSwKK1ttNF9pZmRlZihbQUNfUkVRVUlSRV9BVVhfRklMRV0sIFtBQ19SRVFVSVJFX0FVWF9GSUxFKFtsdG1haW4uc2hdKV0pZG5sCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInXSkKK2x0bWFpbj0kYWNfYXV4X2Rpci9sdG1haW4uc2gKK10pIyBfTFRfUFJPR19MVE1BSU4KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBBY2N1bXVsYXRlIGNvZGUgZm9yIGNyZWF0aW5nIGxpYnRvb2wuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgU28gdGhhdCB3ZSBjYW4gcmVjcmVhdGUgYSBmdWxsIGxpYnRvb2wgc2NyaXB0IGluY2x1ZGluZyBhZGRpdGlvbmFsCisjIHRhZ3MsIHdlIGFjY3VtdWxhdGUgdGhlIGNodW5rcyBvZiBjb2RlIHRvIHNlbmQgdG8gQUNfQ09ORklHX0NPTU1BTkRTCisjIGluIG1hY3JvcyBhbmQgdGhlbiBtYWtlIGEgc2luZ2xlIGNhbGwgYXQgdGhlIGVuZCB1c2luZyB0aGUgJ2xpYnRvb2wnCisjIGxhYmVsLgorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW0lOSVQtQ09NTUFORFNdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIElOSVQtQ09NTUFORFMgdG8gYmUgcGFzc2VkIHRvIEFDX0NPTkZJR19DT01NQU5EUyBsYXRlci4KK200X2RlZmluZShbX0xUX0NPTkZJR19MSUJUT09MX0lOSVRdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVF0pCisKKworIyBfTFRfQ09ORklHX0xJQlRPT0woW0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZ2lzdGVyIENPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF0sCitbbTRfaWZ2YWwoWyQxXSwKKyAgICAgICAgICBbbTRfYXBwZW5kKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLAorICAgICAgICAgICAgICAgICAgICAgWyQxCitdKV0pXSkKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdKQorCisKKyMgX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFtDT01NQU5EU10sIFtJTklUX0NPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09ORklHX1NBVkVfQ09NTUFORFNdLAorW19MVF9DT05GSUdfTElCVE9PTChbJDFdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWyQyXSkKK10pCisKKworIyBfTFRfRk9STUFUX0NPTU1FTlQoW0NPTU1FTlRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgbGVhZGluZyBjb21tZW50IG1hcmtzIHRvIHRoZSBzdGFydCBvZiBlYWNoIGxpbmUsIGFuZCBhIHRyYWlsaW5nCisjIGZ1bGwtc3RvcCB0byB0aGUgd2hvbGUgY29tbWVudCBpZiBvbmUgaXMgbm90IHByZXNlbnQgYWxyZWFkeS4KK200X2RlZmluZShbX0xUX0ZPUk1BVF9DT01NRU5UXSwKK1ttNF9pZnZhbChbJDFdLCBbCittNF9icGF0c3Vic3QoW200X2JwYXRzdWJzdChbJDFdLCBbXiAqXSwgWyMgXSldLAorICAgICAgICAgICAgICBbWydgJFxdXSwgW1xcXCZdKV1tNF9ibWF0Y2goWyQxXSwgW1shPy5dJF0sIFtdLCBbLl0pCispXSkKKworCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRklYTUU6IEVsaW1pbmF0ZSBWQVJOQU1FICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworCisjIF9MVF9ERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0sIFtJUy1UQUdHRUQ/XSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDT05GSUdOQU1FIGlzIHRoZSBuYW1lIGdpdmVuIHRvIHRoZSB2YWx1ZSBpbiB0aGUgbGlidG9vbCBzY3JpcHQuCisjIFZBUk5BTUUgaXMgdGhlIChiYXNlKSBuYW1lIHVzZWQgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisjIFZBTFVFIG1heSBiZSAwLCAxIG9yIDIgZm9yIGEgY29tcHV0ZWQgcXVvdGUgZXNjYXBlZCB2YWx1ZSBiYXNlZCBvbgorIyBWQVJOQU1FLiAgQW55IG90aGVyIHZhbHVlIHdpbGwgYmUgdXNlZCBkaXJlY3RseS4KK200X2RlZmluZShbX0xUX0RFQ0xdLAorW2x0X2lmX2FwcGVuZF91bmlxKFtsdF9kZWNsX3Zhcm5hbWVzXSwgWyQyXSwgWywgXSwKKyAgICBbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbbGlidG9vbF9uYW1lXSwKKwlbbTRfaWZ2YWwoWyQxXSwgWyQxXSwgWyQyXSldKQorICAgIGx0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW3ZhbHVlXSwgWyQzXSkKKyAgICBtNF9pZnZhbChbJDRdLAorCVtsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFtkZXNjcmlwdGlvbl0sIFskNF0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sCisJW3RhZ2dlZD9dLCBbbTRfaWZ2YWwoWyQ1XSwgW3llc10sIFtub10pXSldKQorXSkKKworCisjIF9MVF9UQUdERUNMKFtDT05GSUdOQU1FXSwgVkFSTkFNRSwgVkFMVUUsIFtERVNDUklQVElPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9UQUdERUNMXSwgW19MVF9ERUNMKFskMV0sIFskMl0sIFskM10sIFskNF0sIFt5ZXNdKV0pCisKKworIyBsdF9kZWNsX3RhZ192YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdGFnX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbeWVzXSwgJEApXSkKKworCisjIF9sdF9kZWNsX2ZpbHRlcihTVUJLRVksIFZBTFVFLCBbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX2x0X2RlY2xfZmlsdGVyXSwKK1ttNF9jYXNlKFskI10sCisgIFswXSwgW200X2ZhdGFsKFskMDogdG9vIGZldyBhcmd1bWVudHM6ICQjXSldLAorICBbMV0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkIzogJDFdKV0sCisgIFsyXSwgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbJDJdLCBbXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbM10sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgWyQzXSwgbHRfZGVjbF92YXJuYW1lcyldLAorICBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sICRAKV0pW11kbmwKK10pCisKKworIyBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzXSwKK1tfbHRfZGVjbF9maWx0ZXIoW3ZhbHVlXSwgWzFdLCAkQCldKQorCisKKyMgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX2RxdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsyXSwgJEApXSkKKworCisjIGx0X2RlY2xfdmFybmFtZXNfdGFnZ2VkKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF92YXJuYW1lc190YWdnZWRdLAorW200X2Fzc2VydChbJCMgPD0gMl0pZG5sCitfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICBtNF9pZnZhbChbJDJdLCBbWyQyXV0sIFttNF9kcXVvdGUobHRfZGVjbF90YWdfdmFybmFtZXMpXSksCisgICAgbTRfc3BsaXQobTRfbm9ybWFsaXplKG00X3F1b3RlKF9MVF9UQUdTKSksIFsgXSkpXSkKK200X2RlZmluZShbX2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9pZnZhbChbJDNdLCBbbHRfY29tYmluZShbJDFdLCBbJDJdLCBbX10sICQzKV0pXSkKKworCisjIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9hbGxfdmFybmFtZXNdLAorW18kMChtNF9xdW90ZShtNF9kZWZhdWx0KFskMV0sIFtbLCBdXSkpLAorICAgICBtNF9pZihbJDJdLCBbXSwKKwkgICBtNF9xdW90ZShsdF9kZWNsX3Zhcm5hbWVzKSwKKwltNF9xdW90ZShtNF9zaGlmdCgkQCkpKSlbXWRubAorXSkKK200X2RlZmluZShbX2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tsdF9qb2luKCRALCBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbJDFdLAorCQkJbHRfZGVjbF90YWdfdmFybmFtZXMoW1ssIF1dLCBtNF9zaGlmdCgkQCkpKSlkbmwKK10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJFKFtWQVJOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFF1b3RlIGEgdmFyaWFibGUgdmFsdWUsIGFuZCBmb3J3YXJkIGl0IHRvICdjb25maWcuc3RhdHVzJyBzbyB0aGF0IGl0cworIyBkZWNsYXJhdGlvbiB0aGVyZSB3aWxsIGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgaW4gJ2NvbmZpZ3VyZScuICBWQVJOQU1FCisjIG11c3QgaGF2ZSBhIHNpbmdsZSBxdW90ZSBkZWxpbWl0ZWQgdmFsdWUgZm9yIHRoaXMgdG8gd29yay4KK200X2RlZmluZShbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRV0sCitbJDE9J2AkRUNITyAiJF1bJDEiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJ10pCisKKworIyBfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdlIGRlbGltaXQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIHdpdGggc2luZ2xlIHF1b3Rlcywgc28gd2hlbgorIyB3ZSB3cml0ZSB0aGVtIHRvIGNvbmZpZy5zdGF0dXMsIHdlIGhhdmUgdG8gYmUgc3VyZSB0byBxdW90ZSBhbGwKKyMgZW1iZWRkZWQgc2luZ2xlIHF1b3RlcyBwcm9wZXJseS4gIEluIGNvbmZpZ3VyZSwgdGhpcyBtYWNybyBleHBhbmRzCisjIGVhY2ggdmFyaWFibGUgZGVjbGFyZWQgd2l0aCBfTFRfREVDTCAoYW5kIF9MVF9UQUdERUNMKSBpbnRvOgorIworIyAgICA8dmFyPj0nYCRFQ0hPICIkPHZhcj4iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbTRfZGVmdW4oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfYWxsX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShfbHRfdmFyKV0pXSldKQorCisKKyMgX0xUX0xJQlRPT0xfVEFHUworIyAtLS0tLS0tLS0tLS0tLS0tCisjIE91dHB1dCBjb21tZW50IGFuZCBsaXN0IG9mIHRhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBzY3JpcHQKK200X2RlZnVuKFtfTFRfTElCVE9PTF9UQUdTXSwKK1tfTFRfRk9STUFUX0NPTU1FTlQoW1RoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdF0pZG5sCithdmFpbGFibGVfdGFncz0nX0xUX1RBR1MnZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfREVDTEFSRShWQVJOQU1FLCBbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXh0cmFjdCB0aGUgZGljdGlvbmFyeSB2YWx1ZXMgZm9yIFZBUk5BTUUgKG9wdGlvbmFsbHkgd2l0aCBUQUcpIGFuZAorIyBleHBhbmQgdG8gYSBjb21tZW50ZWQgc2hlbGwgdmFyaWFibGUgc2V0dGluZzoKKyMKKyMgICAgIyBTb21lIGNvbW1lbnQgYWJvdXQgd2hhdCBWQVIgaXMgZm9yLgorIyAgICB2aXNpYmxlX25hbWU9JGx0X2ludGVybmFsX25hbWUKK200X2RlZmluZShbX0xUX0xJQlRPT0xfREVDTEFSRV0sCitbX0xUX0ZPUk1BVF9DT01NRU5UKG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sCisJCQkJCSAgIFtkZXNjcmlwdGlvbl0pKSlbXWRubAorbTRfcHVzaGRlZihbX2xpYnRvb2xfbmFtZV0sCisgICAgbTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW2xpYnRvb2xfbmFtZV0pKSlbXWRubAorbTRfY2FzZShtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLCBbdmFsdWVdKSksCisgICAgWzBdLCBbX2xpYnRvb2xfbmFtZT1bJF0kMV0sCisgICAgWzFdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgWzJdLCBbX2xpYnRvb2xfbmFtZT0kbHRfW10kMV0sCisgICAgW19saWJ0b29sX25hbWU9bHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSldKVtdZG5sCittNF9pZnZhbChbJDJdLCBbXyQyXSlbXW00X3BvcGRlZihbX2xpYnRvb2xfbmFtZV0pW11kbmwKK10pCisKKworIyBfTFRfTElCVE9PTF9DT05GSUdfVkFSUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQcm9kdWNlIGNvbW1lbnRlZCBkZWNsYXJhdGlvbnMgb2Ygbm9uLXRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMKKyMgc3VpdGFibGUgZm9yIGluc2VydGlvbiBpbiB0aGUgTElCVE9PTCBDT05GSUcgc2VjdGlvbiBvZiB0aGUgJ2xpYnRvb2wnCisjIHNjcmlwdC4gIFRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMgKGV2ZW4gZm9yIHRoZSBMSUJUT09MIENPTkZJRworIyBzZWN0aW9uKSBhcmUgcHJvZHVjZWQgYnkgX0xUX0xJQlRPT0xfVEFHX1ZBUlMuCittNF9kZWZ1bihbX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLAorICAgIG00X3F1b3RlKF9sdF9kZWNsX2ZpbHRlcihbdGFnZ2VkP10sIFtub10sIFtdLCBsdF9kZWNsX3Zhcm5hbWVzKSksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR19WQVJTKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfTElCVE9PTF9UQUdfVkFSU10sCitbbTRfZm9yZWFjaChbX2x0X3Zhcl0sIG00X3F1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKSwKKyAgICBbbTRfbihbX0xUX0xJQlRPT0xfREVDTEFSRShfbHRfdmFyLCBbJDFdKV0pXSldKQorCisKKyMgX0xUX1RBR1ZBUihWQVJOQU1FLCBbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHVkFSXSwgW200X2lmdmFsKFskMl0sIFskMV8kMl0sIFskMV0pXSkKKworCisjIF9MVF9DT05GSUdfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZW5kIGFjY3VtdWxhdGVkIG91dHB1dCB0byAkQ09ORklHX1NUQVRVUy4gIFRoYW5rcyB0byB0aGUgbGlzdHMgb2YKKyMgdmFyaWFibGVzIGZvciBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZSBlc2NhcGluZyB3ZSBzYXZlZCBmcm9tIGNhbGxzCisjIHRvIF9MVF9ERUNMLCB3ZSBjYW4gcHV0IHF1b3RlIGVzY2FwZWQgdmFyaWFibGVzIGRlY2xhcmF0aW9ucworIyBpbnRvICdjb25maWcuc3RhdHVzJywgYW5kIHRoZW4gdGhlIHNoZWxsIGNvZGUgdG8gcXVvdGUgZXNjYXBlIHRoZW0gaW4KKyMgZm9yIGxvb3BzIGluICdjb25maWcuc3RhdHVzJy4gIEZpbmFsbHksIGFueSBhZGRpdGlvbmFsIGNvZGUgYWNjdW11bGF0ZWQKKyMgZnJvbSBjYWxscyB0byBfTFRfQ09ORklHX0xJQlRPT0xfSU5JVCBpcyBleHBhbmRlZC4KK200X2RlZnVuKFtfTFRfQ09ORklHX0NPTU1BTkRTXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbTFRfT1VUUFVUXSwKKwlkbmwgSWYgdGhlIGxpYnRvb2wgZ2VuZXJhdGlvbiBjb2RlIGhhcyBiZWVuIHBsYWNlZCBpbiAkQ09ORklHX0xULAorCWRubCBpbnN0ZWFkIG9mIGR1cGxpY2F0aW5nIGl0IGFsbCBvdmVyIGFnYWluIGludG8gY29uZmlnLnN0YXR1cywKKwlkbmwgdGhlbiB3ZSB3aWxsIGhhdmUgY29uZmlnLnN0YXR1cyBydW4gJENPTkZJR19MVCBsYXRlciwgc28gaXQKKwlkbmwgbmVlZHMgdG8ga25vdyB3aGF0IG5hbWUgaXMgc3RvcmVkIHRoZXJlOgorICAgICAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgICAgIFskU0hFTEwgJENPTkZJR19MVCB8fCBBU19FWElUKDEpXSwgW0NPTkZJR19MVD0nJENPTkZJR19MVCddKV0sCisgICAgZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBpcyBkZXN0aW5lZCBmb3IgY29uZmlnLnN0YXR1cywKKyAgICBkbmwgZXhwYW5kIHRoZSBhY2N1bXVsYXRlZCBjb21tYW5kcyBhbmQgaW5pdCBjb2RlIG5vdzoKKyAgICBbQUNfQ09ORklHX0NPTU1BTkRTKFtsaWJ0b29sXSwKKyAgICAgICAgW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU10sIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0pXSkKK10pI19MVF9DT05GSUdfQ09NTUFORFMKKworCisjIEluaXRpYWxpemUuCittNF9kZWZpbmUoW19MVF9PVVRQVVRfTElCVE9PTF9DT01NQU5EU19JTklUXSwKK1sKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworc2VkX3F1b3RlX3N1YnN0PSckc2VkX3F1b3RlX3N1YnN0JworZG91YmxlX3F1b3RlX3N1YnN0PSckZG91YmxlX3F1b3RlX3N1YnN0JworZGVsYXlfdmFyaWFibGVfc3Vic3Q9JyRkZWxheV92YXJpYWJsZV9zdWJzdCcKK19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkFUSU9OUworTFRDQz0nJExUQ0MnCitMVENGTEFHUz0nJExUQ0ZMQUdTJworY29tcGlsZXI9JyRjb21waWxlcl9ERUZBVUxUJworCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKK1wkW10xCitfTFRFQ0hPX0VPRicKK30KKworIyBRdW90ZSBldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gbHRfZGVjbF9hbGxfdmFybmFtZXMoW1sgXAorXV0sIGx0X2RlY2xfcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCisjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX2RxdW90ZV92YXJuYW1lcyk7IGRvCisgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCisgICAgKltbXFxcXFxcXGBcXCJcXFwkXV0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK19MVF9PVVRQVVRfTElCVE9PTF9JTklUCitdKQorCisjIF9MVF9HRU5FUkFURURfRklMRV9JTklUKEZJTEUsIFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEdlbmVyYXRlIGEgY2hpbGQgc2NyaXB0IEZJTEUgd2l0aCBhbGwgaW5pdGlhbGl6YXRpb24gbmVjZXNzYXJ5IHRvCisjIHJldXNlIHRoZSBlbnZpcm9ubWVudCBsZWFybmVkIGJ5IHRoZSBwYXJlbnQgc2NyaXB0LCBhbmQgbWFrZSB0aGUKKyMgZmlsZSBleGVjdXRhYmxlLiAgSWYgQ09NTUVOVCBpcyBzdXBwbGllZCwgaXQgaXMgaW5zZXJ0ZWQgYWZ0ZXIgdGhlCisjICcjIScgc2VxdWVuY2UgYnV0IGJlZm9yZSBpbml0aWFsaXphdGlvbiB0ZXh0IGJlZ2lucy4gIEFmdGVyIHRoaXMKKyMgbWFjcm8sIGFkZGl0aW9uYWwgdGV4dCBjYW4gYmUgYXBwZW5kZWQgdG8gRklMRSB0byBmb3JtIHRoZSBib2R5IG9mCisjIHRoZSBjaGlsZCBzY3JpcHQuICBUaGUgbWFjcm8gZW5kcyB3aXRoIG5vbi16ZXJvIHN0YXR1cyBpZiB0aGUKKyMgZmlsZSBjb3VsZCBub3QgYmUgZnVsbHkgd3JpdHRlbiAoc3VjaCBhcyBpZiB0aGUgZGlzayBpcyBmdWxsKS4KK200X2lmZGVmKFtBU19JTklUX0dFTkVSQVRFRF0sCitbbTRfZGVmdW4oW19MVF9HRU5FUkFURURfRklMRV9JTklUXSxbQVNfSU5JVF9HRU5FUkFURUQoJEApXSldLAorW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sCitbbTRfcmVxdWlyZShbQVNfUFJFUEFSRV0pXWRubAorW200X3B1c2hkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSldZG5sCitbbHRfd3JpdGVfZmFpbD0wCitjYXQgPiQxIDw8X0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBieSAkYXNfbWUuCiskMgorU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KK2V4cG9ydCBTSEVMTAorX0FTRU9GCitjYXQgPj4kMSA8PFxfQVNFT0YgfHwgbHRfd3JpdGVfZmFpbD0xCitBU19TSEVMTF9TQU5JVElaRQorX0FTX1BSRVBBUkUKK2V4ZWMgQVNfTUVTU0FHRV9GRD4mMQorX0FTRU9GCit0ZXN0IDAgPSAiJGx0X3dyaXRlX2ZhaWwiICYmIGNobW9kICt4ICQxW11kbmwKK200X3BvcGRlZihbQVNfTUVTU0FHRV9MT0dfRkRdKV0pXSkjIF9MVF9HRU5FUkFURURfRklMRV9JTklUCisKKyMgTFRfT1VUUFVUCisjIC0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIGFsbG93cyBlYXJseSBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdCAoYmVmb3JlCisjIEFDX09VVFBVVCBpcyBjYWxsZWQpLCBpbmNhc2UgaXQgaXMgdXNlZCBpbiBjb25maWd1cmUgZm9yIGNvbXBpbGF0aW9uCisjIHRlc3RzLgorQUNfREVGVU4oW0xUX09VVFBVVF0sCitbOiAke0NPTkZJR19MVD0uL2NvbmZpZy5sdH0KK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRDT05GSUdfTFRdKQorX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQoWyIkQ09ORklHX0xUIl0sCitbIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIGEgbGlidG9vbCBzdHViIHdpdGggdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi5dKQorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitsdF9jbF9zaWxlbnQ9ZmFsc2UKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBBU19CT1goW1J1bm5pbmcgJGFzX21lLl0pCit9ID4mQVNfTUVTU0FHRV9MT0dfRkQKKworbHRfY2xfaGVscD0iXAorJyRhc19tZScgY3JlYXRlcyBhIGxvY2FsIGxpYnRvb2wgc3R1YiBmcm9tIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sCitmb3IgdXNlIGluIGZ1cnRoZXIgY29uZmlndXJlIHRpbWUgdGVzdHMgYmVmb3JlIHRoZSByZWFsIGxpYnRvb2wgaXMKK2dlbmVyYXRlZC4KKworVXNhZ2U6ICRbMF0gW1tPUFRJT05TXV0KKworICAtaCwgLS1oZWxwICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXEsIC0tcXVpZXQgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworCitSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uIgorCitsdF9jbF92ZXJzaW9uPSJcCittNF9pZnNldChbQUNfUEFDS0FHRV9OQU1FXSwgW0FDX1BBQ0tBR0VfTkFNRSBdKWNvbmZpZy5sdFtdZG5sCittNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKQorY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCisKK0NvcHlyaWdodCAoQykgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLmx0IHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisKK3doaWxlIHRlc3QgMCAhPSAkWyNdCitkbworICBjYXNlICRbMV0gaW4KKyAgICAtLXZlcnNpb24gfCAtLXYqIHwgLVYgKQorICAgICAgZWNobyAiJGx0X2NsX3ZlcnNpb24iOyBleGl0IDAgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgZWNobyAiJGx0X2NsX2hlbHAiOyBleGl0IDAgOzsKKyAgICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKyAgICAgIGRlYnVnPTogOzsKKyAgICAtLXF1aWV0IHwgLS1xKiB8IC0tc2lsZW50IHwgLS1zKiB8IC1xICkKKyAgICAgIGx0X2NsX3NpbGVudD06IDs7CisKKyAgICAtKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgb3B0aW9uOiAkWzFdCitUcnkgJyRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworCisgICAgKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgYXJndW1lbnQ6ICRbMV0KK1RyeSAnJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgJGx0X2NsX3NpbGVudDsgdGhlbgorICBleGVjIEFTX01FU1NBR0VfRkQ+L2Rldi9udWxsCitmaQorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PF9MVEVPRgorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVQKK19MVEVPRgorCitjYXQgPj4iJENPTkZJR19MVCIgPDxcX0xURU9GCitBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkb2ZpbGVdKQorX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTCitBU19FWElUKDApCitfTFRFT0YKK2NobW9kICt4ICIkQ09ORklHX0xUIgorCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGJ1dCBjb25maWcubHQgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLAorIyBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZywgd2hpY2ggZmFpbHMgb24gRE9TLCBhcyBjb25maWcubG9nIGlzIHN0aWxsIGtlcHQKKyMgb3BlbiBieSBjb25maWd1cmUuICBIZXJlIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVsbCwgZWZmZWN0aXZlbHkgY2xvc2luZworIyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVybHkgKHJlKW9wZW5lZCBhbmQgYXBwZW5kZWQgdG8gYnkgY29uZmlnLmx0LgorbHRfY2xfc3VjY2Vzcz06Cit0ZXN0IHllcyA9ICIkc2lsZW50IiAmJgorICBsdF9jb25maWdfbHRfYXJncz0iJGx0X2NvbmZpZ19sdF9hcmdzIC0tcXVpZXQiCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPi9kZXYvbnVsbAorJFNIRUxMICIkQ09ORklHX0xUIiAkbHRfY29uZmlnX2x0X2FyZ3MgfHwgbHRfY2xfc3VjY2Vzcz1mYWxzZQorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworJGx0X2NsX3N1Y2Nlc3MgfHwgQVNfRVhJVCgxKQorXSkjIExUX09VVFBVVAorCisKKyMgX0xUX0NPTkZJRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLQorIyBJZiBUQUcgaXMgdGhlIGJ1aWx0LWluIHRhZywgY3JlYXRlIGFuIGluaXRpYWwgbGlidG9vbCBzY3JpcHQgd2l0aCBhCisjIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmcm9tIHRoZSB1bnRhZ2dlZCBjb25maWcgdmFycy4gIE90aGVyd2lzZSBhZGQgY29kZQorIyB0byBjb25maWcuc3RhdHVzIGZvciBhcHBlbmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gbmFtZWQgYnkgVEFHIGZyb20gdGhlCisjIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KK200X2RlZnVuKFtfTFRfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK19MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbCisgIG00X2RlZmluZShbX0xUX1RBR10sIG00X2lmKFskMV0sIFtdLCBbQ10sIFskMV0pKWRubAorICBtNF9pZihfTFRfVEFHLCBbQ10sIFsKKyAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgdGhhdCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCisgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICAgIGZpCisKKyAgICBjZmdmaWxlPSR7b2ZpbGV9VAorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UpICRWRVJTSU9OCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisjIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KKworIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKyMgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCwgMTk5NgorCitfTFRfQ09QWUlORworX0xUX0xJQlRPT0xfVEFHUworCisjIENvbmZpZ3VyZWQgZGVmYXVsdHMgZm9yIHN5c19saWJfZGxzZWFyY2hfcGF0aCBtdW5naW5nLgorOiBcJHtMVF9TWVNfTElCUkFSWV9QQVRIPSIkY29uZmlndXJlX3RpbWVfbHRfc3lzX2xpYnJhcnlfcGF0aCJ9CisKKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCitfTFRfTElCVE9PTF9DT05GSUdfVkFSUworX0xUX0xJQlRPT0xfVEFHX1ZBUlMKKyMgIyMjIEVORCBMSUJUT09MIENPTkZJRworCitfTFRfRU9GCisKKyAgICBjYXQgPDwnX0xUX0VPRicgPj4gIiRjZmdmaWxlIgorCisjICMjIyBCRUdJTiBGVU5DVElPTlMgU0hBUkVEIFdJVEggQ09ORklHVVJFCisKK19MVF9QUkVQQVJFX01VTkdFX1BBVEhfTElTVAorX0xUX1BSRVBBUkVfQ0NfQkFTRU5BTUUKKworIyAjIyMgRU5EIEZVTkNUSU9OUyBTSEFSRUQgV0lUSCBDT05GSUdVUkUKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitfTFRfRU9GCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9QUk9HX0xUTUFJTgorCisgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgorICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CisgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCitdLAorW2NhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKKworZG5sIFVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byB1c2UgJDEgaGVyZSwgc2luY2UgX0xUX1RBRyBpcyBub3QgZXhwYW5kZWQKK2RubCBpbiBhIGNvbW1lbnQgKGllIGFmdGVyIGEgIykuCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfTElCVE9PTF9UQUdfVkFSUyhfTFRfVEFHKQorIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9FT0YKK10pZG5sIC9tNF9pZgorXSwKK1ttNF9pZihbJDFdLCBbXSwgWworICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworICAgIFZFUlNJT049JyRWRVJTSU9OJworICAgIFJNPSckUk0nCisgICAgb2ZpbGU9JyRvZmlsZSddLCBbXSkKK10pZG5sIC9fTFRfQ09ORklHX1NBVkVfQ09NTUFORFMKK10pIyBfTFRfQ09ORklHCisKKworIyBMVF9TVVBQT1JURURfVEFHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyYWNlIHRoaXMgbWFjcm8gdG8gZGlzY292ZXIgd2hhdCB0YWdzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGxpYnRvb2wKKyMgLS10YWcgb3B0aW9uLCB1c2luZzoKKyMgICAgYXV0b2NvbmYgLS10cmFjZSAnTFRfU1VQUE9SVEVEX1RBRzokMScKK0FDX0RFRlVOKFtMVF9TVVBQT1JURURfVEFHXSwgW10pCisKKworIyBDIHN1cHBvcnQgaXMgYnVpbHQtaW4gZm9yIG5vdworbTRfZGVmaW5lKFtfTFRfTEFOR19DX2VuYWJsZWRdLCBbXSkKK200X2RlZmluZShbX0xUX1RBR1NdLCBbXSkKKworCisjIExUX0xBTkcoTEFORykKKyMgLS0tLS0tLS0tLS0tLQorIyBFbmFibGUgbGlidG9vbCBzdXBwb3J0IGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaWYgbm90IGFscmVhZHkgZW5hYmxlZC4KK0FDX0RFRlVOKFtMVF9MQU5HXSwKK1tBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCittNF9jYXNlKFskMV0sCisgIFtDXSwJCQlbX0xUX0xBTkcoQyldLAorICBbQysrXSwJCVtfTFRfTEFORyhDWFgpXSwKKyAgW0dvXSwJCQlbX0xUX0xBTkcoR08pXSwKKyAgW0phdmFdLAkJW19MVF9MQU5HKEdDSildLAorICBbRm9ydHJhbiA3N10sCQlbX0xUX0xBTkcoRjc3KV0sCisgIFtGb3J0cmFuXSwJCVtfTFRfTEFORyhGQyldLAorICBbV2luZG93cyBSZXNvdXJjZV0sCVtfTFRfTEFORyhSQyldLAorICBbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfQ09ORklHXSwKKyAgICBbX0xUX0xBTkcoJDEpXSwKKyAgICBbbTRfZmF0YWwoWyQwOiB1bnN1cHBvcnRlZCBsYW5ndWFnZTogIiQxIl0pXSldKWRubAorXSkjIExUX0xBTkcKKworCisjIF9MVF9MQU5HKExBTkdOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR10sCitbbTRfaWZkZWYoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdLAorICBbTFRfU1VQUE9SVEVEX1RBRyhbJDFdKWRubAorICBtNF9hcHBlbmQoW19MVF9UQUdTXSwgWyQxIF0pZG5sCisgIG00X2RlZmluZShbX0xUX0xBTkdfXSQxW19lbmFibGVkXSwgW10pZG5sCisgIF9MVF9MQU5HXyQxX0NPTkZJRygkMSldKWRubAorXSkjIF9MVF9MQU5HCisKKworbTRfaWZuZGVmKFtBQ19QUk9HX0dPXSwgWworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX0dPLiAgV2hlbiBpdCBpcyBhdmFpbGFibGUgaW4gICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworbTRfZGVmdW4oW0FDX1BST0dfR09dLAorW0FDX0xBTkdfUFVTSChHbylkbmwKK0FDX0FSR19WQVIoW0dPQ10sICAgICBbR28gY29tcGlsZXIgY29tbWFuZF0pZG5sCitBQ19BUkdfVkFSKFtHT0ZMQUdTXSwgW0dvIGNvbXBpbGVyIGZsYWdzXSlkbmwKK19BQ19BUkdfVkFSX0xERkxBR1MoKWRubAorQUNfQ0hFQ0tfVE9PTChHT0MsIGdjY2dvKQoraWYgdGVzdCAteiAiJEdPQyI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIEFDX0NIRUNLX1BST0coR09DLCBbJHthY190b29sX3ByZWZpeH1nY2Nnb10sIFske2FjX3Rvb2xfcHJlZml4fWdjY2dvXSkKKyAgZmkKK2ZpCitpZiB0ZXN0IC16ICIkR09DIjsgdGhlbgorICBBQ19DSEVDS19QUk9HKEdPQywgZ2NjZ28sIGdjY2dvLCBmYWxzZSkKK2ZpCitdKSNtNF9kZWZ1bgorXSkjbTRfaWZuZGVmCisKKworIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9MQU5HX0RFRkFVTFRfQ09ORklHXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorICBbTFRfTEFORyhDWFgpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19DWFhdLCBkZWZuKFtBQ19QUk9HX0NYWF0pW0xUX0xBTkcoQ1hYKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRjc3XSwKKyAgW0xUX0xBTkcoRjc3KV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRjc3XSwgZGVmbihbQUNfUFJPR19GNzddKVtMVF9MQU5HKEY3NyldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0ZDXSwKKyAgW0xUX0xBTkcoRkMpXSwKKyAgW200X2RlZmluZShbQUNfUFJPR19GQ10sIGRlZm4oW0FDX1BST0dfRkNdKVtMVF9MQU5HKEZDKV0pXSkKKworZG5sIFRoZSBjYWxsIHRvIFtBXVtNX1BST0dfR0NKXSBpcyBxdW90ZWQgbGlrZSB0aGF0IHRvIHN0b3AgYWNsb2NhbAorZG5sIHB1bGxpbmcgdGhpbmdzIGluIG5lZWRsZXNzbHkuCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLAorICBbTFRfTEFORyhHQ0opXSwKKyAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSwKKyAgICBbTFRfTEFORyhHQ0opXSwKKyAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfR0NKXSwKKyAgICAgIFtMVF9MQU5HKEdDSildLAorICAgICAgW200X2lmZGVmKFtBQ19QUk9HX0dDSl0sCisJW200X2RlZmluZShbQUNfUFJPR19HQ0pdLCBkZWZuKFtBQ19QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSkKKyAgICAgICBtNF9pZmRlZihbQV1bTV9QUk9HX0dDSl0sCisJW200X2RlZmluZShbQV1bTV9QUk9HX0dDSl0sIGRlZm4oW0FdW01fUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0xUX1BST0dfR0NKXSwKKwlbbTRfZGVmaW5lKFtMVF9QUk9HX0dDSl0sIGRlZm4oW0xUX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKV0pXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HT10sCisgIFtMVF9MQU5HKEdPKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfR09dLCBkZWZuKFtBQ19QUk9HX0dPXSlbTFRfTEFORyhHTyldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX1JDXSwKKyAgW0xUX0xBTkcoUkMpXSwKKyAgW200X2RlZmluZShbTFRfUFJPR19SQ10sIGRlZm4oW0xUX1BST0dfUkNdKVtMVF9MQU5HKFJDKV0pXSkKK10pIyBfTFRfTEFOR19ERUZBVUxUX0NPTkZJRworCisjIE9ic29sZXRlIG1hY3JvczoKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtMVF9MQU5HKEMrKyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRjc3XSwgW0xUX0xBTkcoRm9ydHJhbiA3NyldKQorQVVfREVGVU4oW0FDX0xJQlRPT0xfRkNdLCBbTFRfTEFORyhGb3J0cmFuKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9HQ0pdLCBbTFRfTEFORyhKYXZhKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9SQ10sIFtMVF9MQU5HKFdpbmRvd3MgUmVzb3VyY2UpXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DWFhdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW10pCisKKworIyBfTFRfVEFHX0NPTVBJTEVSCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfVEFHX0NPTVBJTEVSXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKKworX0xUX0RFQ0woW0xUQ0NdLCBbQ0NdLCBbMV0sIFtBIEMgY29tcGlsZXJdKWRubAorX0xUX0RFQ0woW0xUQ0ZMQUdTXSwgW0NGTEFHU10sIFsxXSwgW0xUQ0MgY29tcGlsZXIgZmxhZ3NdKWRubAorX0xUX1RBR0RFQ0woW0NDXSwgW2NvbXBpbGVyXSwgWzFdLCBbQSBsYW5ndWFnZSBzcGVjaWZpYyBjb21waWxlcl0pZG5sCitfTFRfVEFHREVDTChbd2l0aF9nY2NdLCBbR0NDXSwgWzBdLCBbSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgY29tcGlsZXI/XSlkbmwKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworXSkjIF9MVF9UQUdfQ09NUElMRVIKKworCisjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGNvbXBpbGVyIGJvaWxlcnBsYXRlIG91dHB1dCBvciB3YXJuaW5ncyB3aXRoCisjIHRoZSBzaW1wbGUgY29tcGlsZXIgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIGNvbmZ0ZXN0KgorXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorCisKKyMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KK200X2RlZnVuKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJFJNIC1yIGNvbmZ0ZXN0KgorXSkjIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bl9vbmNlKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sWworICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luKikKKyAgICBBQ19DSEVDS19UT09MKFtEU1lNVVRJTF0sIFtkc3ltdXRpbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtOTUVESVRdLCBbbm1lZGl0XSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW0xJUE9dLCBbbGlwb10sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTF0sIFtvdG9vbF0sIFs6XSkKKyAgICBBQ19DSEVDS19UT09MKFtPVE9PTDY0XSwgW290b29sNjRdLCBbOl0pCisgICAgX0xUX0RFQ0woW10sIFtEU1lNVVRJTF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW05NRURJVF0sIFsxXSwKKyAgICAgIFtUb29sIHRvIGNoYW5nZSBnbG9iYWwgdG8gbG9jYWwgc3ltYm9scyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtMSVBPXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0xdLCBbMV0sCisgICAgICBbbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbT1RPT0w2NF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNF0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnXSxbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZF0sCisgICAgICBbbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubworICAgICAgaWYgdGVzdCAteiAiJExUX01VTFRJX01PRFVMRSI7IHRoZW4KKwkjIEJ5IGRlZmF1bHQgd2Ugd2lsbCBhZGQgdGhlIC1zaW5nbGVfbW9kdWxlIGZsYWcuIFlvdSBjYW4gb3ZlcnJpZGUKKwkjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKKwkjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCisJIyBsaW5rIGZsYWdzLgorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwllY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYworCWVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCistZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyIgPiZBU19NRVNTQUdFX0xPR19GRAorCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCisJICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorICAgICAgICBfbHRfcmVzdWx0PSQ/CisJIyBJZiB0aGVyZSBpcyBhIG5vbi1lbXB0eSBlcnJvciBsb2csIGFuZCAic2luZ2xlX21vZHVsZSIKKwkjIGFwcGVhcnMgaW4gaXQsIGFzc3VtZSB0aGUgZmxhZyBjYXVzZWQgYSBsaW5rZXIgd2FybmluZworICAgICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVyciAmJiAkR1JFUCBzaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisJIyBPdGhlcndpc2UsIGlmIHRoZSBvdXRwdXQgd2FzIGNyZWF0ZWQgd2l0aCBhIDAgZXhpdCBjb2RlIGZyb20KKwkjIHRoZSBjb21waWxlciwgaXQgd29ya2VkLgorCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0IDAgPSAiJF9sdF9yZXN1bHQiOyB0aGVuCisJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorCWZpCisJcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgorCXJtIC1mIGNvbmZ0ZXN0LioKKyAgICAgIGZpXSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZ10sCisgICAgICBbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0XSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KKyAgICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgICAgZWNobyAiX21haW4iID4gY29uZnRlc3Quc3ltCisgICAgICBMREZMQUdTPSIkTERGTEFHUyAtV2wsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCxjb25mdGVzdC5zeW0iCisgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLFtdKV0sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD15ZXNdLAorCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQorCUxERkxBR1M9JHNhdmVfTERGTEFHUworICAgIF0pCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnXSxbbHRfY3ZfbGRfZm9yY2VfbG9hZF0sCisgICAgICBbbHRfY3ZfbGRfZm9yY2VfbG9hZD1ubworICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgZm9yY2VkX2xvYWRlZCgpIHsgcmV0dXJuIDI7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZWNobyAiJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8iID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRBUiBjcnUgbGliY29uZnRlc3QuYSBjb25mdGVzdC5vIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICRSQU5MSUIgbGliY29uZnRlc3QuYSAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgY2F0ID4gY29uZnRlc3QuYyA8PCBfTFRfRU9GCitpbnQgbWFpbigpIHsgcmV0dXJuIDA7fQorX0xUX0VPRgorICAgICAgZWNobyAiJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSAyPmNvbmZ0ZXN0LmVycgorICAgICAgX2x0X3Jlc3VsdD0kPworICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgZm9yY2VfbG9hZCBjb25mdGVzdC5lcnI7IHRoZW4KKwljYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGVsaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0IDAgPSAiJF9sdF9yZXN1bHQiICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0ID4vZGV2L251bGwgMj4mMTsgdGhlbgorCWx0X2N2X2xkX2ZvcmNlX2xvYWQ9eWVzCisgICAgICBlbHNlCisJY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBmaQorICAgICAgICBybSAtZiBjb25mdGVzdC5lcnIgbGliY29uZnRlc3QuYSBjb25mdGVzdCBjb25mdGVzdC5jCisgICAgICAgIHJtIC1yZiBjb25mdGVzdC5kU1lNCisgICAgXSkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4xLiopCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLltbMDEyXV1bWywuXV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC1mbGF0X25hbWVzcGFjZSAkd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisJMTAuKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisgICAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHdsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8kbGlibmFtZS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8kbGlibmFtZS1zeW1ib2xzLmV4cHN5bSAkbGliJworICAgIGZpCisgICAgaWYgdGVzdCA6ICE9ICIkRFNZTVVUSUwiICYmIHRlc3Qgbm8gPSAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiOyB0aGVuCisgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JworICAgIGVsc2UKKyAgICAgIF9sdF9kc3ltdXRpbD0KKyAgICBmaQorICAgIDs7CisgIGVzYWMKK10pCisKKworIyBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrcyBmb3IgbGlua2VyIGFuZCBjb21waWxlciBmZWF0dXJlcyBvbiBkYXJ3aW4KK200X2RlZnVuKFtfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFU10sCitbCisgIG00X3JlcXVpcmUoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSkKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiOyB0aGVuCisgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHdsLWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisgICAgbTRfY2FzZShbJDFdLCBbRjc3XSwgW19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzXSwKKyAgICAgICAgICAgICAgICAgIFtGQ10sICBbX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXNdKQorICBlbHNlCisgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScnCisgIGZpCisgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KnxuYWdmb3IqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCB5ZXMgPSAiJF9sdF9kYXJfY2FuX3NoYXJlZCI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZHN5bXV0aWwiCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2RzeW11dGlsIgorICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICBtNF9pZihbJDFdLCBbQ1hYXSwKK1sgICBpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCRsaWItbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYi1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmckX2x0X2RzeW11dGlsIgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJGxpYi1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGliLW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICBmaQorXSxbXSkKKyAgZWxzZQorICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgIGZpCitdKQorCisjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaW5rcyBhIG1pbmltYWwgcHJvZ3JhbSBhbmQgY2hlY2tzIHRoZSBleGVjdXRhYmxlCisjIGZvciB0aGUgc3lzdGVtIGRlZmF1bHQgaGFyZGNvZGVkIGxpYnJhcnkgcGF0aC4gSW4gbW9zdCBjYXNlcywKKyMgdGhpcyBpcyAvdXNyL2xpYjovbGliLCBidXQgd2hlbiB0aGUgTVBJIGNvbXBpbGVycyBhcmUgdXNlZAorIyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvbW11bmljYXRpb24gYW5kIE1QSSBsaWJzIGFyZSBpbmNsdWRlZCB0b28uCisjIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIHVzZSB0aGUgZGVmYXVsdCBsaWJyYXJ5IHBhdGggYWNjb3JkaW5nCisjIHRvIHRoZSBhaXggbGQgbWFudWFsLgorIyBTdG9yZSB0aGUgcmVzdWx0cyBmcm9tIHRoZSBkaWZmZXJlbnQgY29tcGlsZXJzIGZvciBlYWNoIFRBR05BTUUuCisjIEFsbG93IHRvIG92ZXJyaWRlIHRoZW0gZm9yIGFsbCB0YWdzIHRocm91Z2ggbHRfY3ZfYWl4X2xpYnBhdGguCittNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBBQ19DQUNIRV9WQUwoW19MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pXSwKKyAgW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU1dLFsKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPSdbCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH1dJworICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgorICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpXSxbXSkKKyAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgorICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPS91c3IvbGliOi9saWIKKyAgZmkKKyAgXSkKKyAgYWl4X2xpYnBhdGg9JF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pCitmaQorXSkjIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYCisKKworIyBfTFRfU0hFTExfSU5JVChBUkcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1NIRUxMX0lOSVRdLAorW200X2RpdmVydF90ZXh0KFtNNFNILUlOSVRdLCBbJDEKK10pXSkjIF9MVF9TSEVMTF9JTklUCisKKworCisjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgaG93IHdlIGNhbiBmYWtlIGFuIGVjaG8gY29tbWFuZCB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2guCisjIEluIHBhcnRpY3VsYXIsIHdpdGggQXV0b2NvbmYgMi42MCBvciBsYXRlciB3ZSBhZGQgc29tZSBjb2RlIHRvIHRoZSBzdGFydAorIyBvZiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgdGhhdCB3aWxsIGZpbmQgYSBzaGVsbCB3aXRoIGEgYnVpbHRpbgorIyBwcmludGYgKHRoYXQgd2UgY2FuIHVzZSBhcyBhbiBlY2hvIGNvbW1hbmQpLgorbTRfZGVmdW4oW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwKK1tFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBwcmludCBzdHJpbmdzXSkKKyMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgoraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludCAtciAtLScKK2VsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50ZiAlc1xuJworZWxzZQorICAjIFVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZmFsbGJhY2sgdGhhdCBhbHdheXMgd29ya3MuCisgIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQorICB7CisgICAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyRbXTEKK19MVEVDSE9fRU9GJworICB9CisgIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKK2ZpCisKKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKyMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KK2Z1bmNfZWNob19hbGwgKCkKK3sKKyAgICAkRUNITyAiJCoiCit9CisKK2Nhc2UgJEVDSE8gaW4KKyAgcHJpbnRmKikgQUNfTVNHX1JFU1VMVChbcHJpbnRmXSkgOzsKKyAgcHJpbnQqKSBBQ19NU0dfUkVTVUxUKFtwcmludCAtcl0pIDs7CisgICopIEFDX01TR19SRVNVTFQoW2NhdF0pIDs7Citlc2FjCisKK200X2lmZGVmKFtfQVNfREVURUNUX1NVR0dFU1RFRF0sCitbX0FTX0RFVEVDVF9TVUdHRVNURUQoWworICB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0ke0JBU0hfVkVSU0lPTitzZXR9IiB8fCAoCisgICAgRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKyAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworICAgIFBBVEg9L2VtcHR5IEZQQVRIPS9lbXB0eTsgZXhwb3J0IFBBVEggRlBBVEgKKyAgICB0ZXN0ICJYYHByaW50ZiAlcyAkRUNIT2AiID0gIlgkRUNITyIgXAorICAgICAgfHwgdGVzdCAiWGBwcmludCAtciAtLSAkRUNIT2AiID0gIlgkRUNITyIgKV0pXSkKKworX0xUX0RFQ0woW10sIFtTSEVMTF0sIFsxXSwgW1NoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHNdKQorX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLCBbQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXNdKQorXSkjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisKKworIyBfTFRfV0lUSF9TWVNST09UCisjIC0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXNyb290XSkKK0FDX0FSR19XSVRIKFtzeXNyb290XSwKK1tBU19IRUxQX1NUUklORyhbLS13aXRoLXN5c3Jvb3RAPDpAPURJUkA6PkBdLAorICBbU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QKKyAgIGlmIG5vdCBzcGVjaWZpZWQpLl0pXSwKK1tdLCBbd2l0aF9zeXNyb290PW5vXSkKKworZG5sIGx0X3N5c3Jvb3Qgd2lsbCBhbHdheXMgYmUgcGFzc2VkIHVucXVvdGVkLiAgV2UgcXVvdGUgaXQgaGVyZQorZG5sIGluIGNhc2UgdGhlIHVzZXIgcGFzc2VkIGEgZGlyZWN0b3J5IG5hbWUuCitsdF9zeXNyb290PQorY2FzZSAkd2l0aF9zeXNyb290IGluICMoCisgeWVzKQorICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgbHRfc3lzcm9vdD1gJENDIC0tcHJpbnQtc3lzcm9vdCAyPi9kZXYvbnVsbGAKKyAgIGZpCisgICA7OyAjKAorIC8qKQorICAgbHRfc3lzcm9vdD1gZWNobyAiJHdpdGhfc3lzcm9vdCIgfCBzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgOzsgIygKKyBub3wnJykKKyAgIDs7ICMoCisgKikKKyAgIEFDX01TR19SRVNVTFQoWyR3aXRoX3N5c3Jvb3RdKQorICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKyAgIDs7Citlc2FjCisKKyBBQ19NU0dfUkVTVUxUKFske2x0X3N5c3Jvb3Q6LW5vfV0pCitfTFRfREVDTChbXSwgW2x0X3N5c3Jvb3RdLCBbMF0sIFtUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIF1kbmwKK1tkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgd2hlcmUgb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKKworIyBfTFRfRU5BQkxFX0xPQ0sKKyMgLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0VOQUJMRV9MT0NLXSwKK1tBQ19BUkdfRU5BQkxFKFtsaWJ0b29sLWxvY2tdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAorICAgIFthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQordGVzdCBubyA9ICIkZW5hYmxlX2xpYnRvb2xfbG9jayIgfHwgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisjIGxpYnRvb2wgc3VwcG9ydC4KK2Nhc2UgJGhvc3QgaW4KK2lhNjQtKi1ocHV4KikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IG1vZGUKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPTMyCisJOzsKKyAgICAgICpFTEYtNjQqKQorCUhQVVhfSUE2NF9NT0RFPTY0CisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgorICBlY2hvICdbI11saW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK21pcHM2NCotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJ1sjXWxpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBlbXVsPWVsZgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICozMi1iaXQqKQorCWVtdWw9IiR7ZW11bH0zMiIKKwk7OworICAgICAgKjY0LWJpdCopCisJZW11bD0iJHtlbXVsfTY0IgorCTs7CisgICAgZXNhYworICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpNU0IqKQorCWVtdWw9IiR7ZW11bH1idHNtaXAiCisJOzsKKyAgICAgICpMU0IqKQorCWVtdWw9IiR7ZW11bH1sdHNtaXAiCisJOzsKKyAgICBlc2FjCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKk4zMiopCisJZW11bD0iJHtlbXVsfW4zMiIKKwk7OworICAgIGVzYWMKKyAgICBMRD0iJHtMRC1sZH0gLW0gJGVtdWwiCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK3MzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LiAgTm90ZSB0aGF0IHRoZSBsaXN0ZWQgY2FzZXMgb25seSBjb3ZlciB0aGUKKyAgIyBzaXR1YXRpb25zIHdoZXJlIGFkZGl0aW9uYWwgbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCAoc3VjaCBhcyB3aGVuCisgICMgZG9pbmcgMzItYml0IGNvbXBpbGF0aW9uIGZvciBhIGhvc3Qgd2hlcmUgbGQgZGVmYXVsdHMgdG8gNjQtYml0LCBvcgorICAjIHZpY2UgdmVyc2EpOyB0aGUgY29tbW9uIGNhc2VzIHdoZXJlIG5vIGxpbmtlciBvcHRpb25zIGFyZSBuZWVkZWQgZG8KKyAgIyBub3QgYXBwZWFyIGluIHRoZSBsaXN0LgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KKyAgICAgICozMi1iaXQqKQorCWNhc2UgJGhvc3QgaW4KKwkgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorCSAgICAgICp4ODYtNjQqKQorCQlMRD0iJHtMRC1sZH0gLW0gZWxmMzJfeDg2XzY0IgorCQk7OworCSAgICAgICopCisJCUxEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkJOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgcG93ZXJwYzY0bGUtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMybHBwY2xpbnV4IgorCSAgICA7OworCSAgcG93ZXJwYzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorCSAgICA7OworCSAgczM5MHgtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorCSAgICA7OworCSAgc3BhcmM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqNjQtYml0KikKKwljYXNlICRob3N0IGluCisJICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0X2Zic2QiCisJICAgIDs7CisJICB4ODZfNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjQiCisJICAgIDs7CisJICBwb3dlcnBjbGUtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0bHBwYyIKKwkgICAgOzsKKwkgIHBvd2VycGMtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgorCSAgICA7OworCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3MzOTAiCisJICAgIDs7CisJICBzcGFyYyotKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCisqLSotc2NvMy4ydjUqKQorICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCisgIFNBVkVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCisgICAgW0FDX0xBTkdfUFVTSChDKQorICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sW1tdXSldLFtsdF9jdl9jY19uZWVkc19iZWxmPXllc10sW2x0X2N2X2NjX25lZWRzX2JlbGY9bm9dKQorICAgICBBQ19MQU5HX1BPUF0pCisgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfY2NfbmVlZHNfYmVsZiI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9JFNBVkVfQ0ZMQUdTCisgIGZpCisgIDs7CisqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICo2NC1iaXQqKQorICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KKyAgICAgIHllcyopCisgICAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAgaT84Ni0qLXNvbGFyaXMqfHg4Nl82NC0qLXNvbGFyaXMqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorICAgICAgICAgIDs7CisgICAgICAgIHNwYXJjKi0qLXNvbGFyaXMqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgICMgR05VIGxkIDIuMjEgaW50cm9kdWNlZCBfc29sMiBlbXVsYXRpb25zLiAgVXNlIHRoZW0gaWYgYXZhaWxhYmxlLgorICAgICAgICBpZiAke0xELWxkfSAtViB8IGdyZXAgX3NvbDIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgTEQ9JHtMRC1sZH1fc29sMgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKK2VzYWMKKworbmVlZF9sb2Nrcz0kZW5hYmxlX2xpYnRvb2xfbG9jaworXSkjIF9MVF9FTkFCTEVfTE9DSworCisKKyMgX0xUX1BST0dfQVIKKyMgLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfUFJPR19BUl0sCitbQUNfQ0hFQ0tfVE9PTFMoQVIsIFthcl0sIGZhbHNlKQorOiAke0FSPWFyfQorOiAke0FSX0ZMQUdTPWNydX0KK19MVF9ERUNMKFtdLCBbQVJdLCBbMV0sIFtUaGUgYXJjaGl2ZXJdKQorX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSwgW0ZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlXSkKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0XSwgW2x0X2N2X2FyX2F0X2ZpbGVdLAorICBbbHRfY3ZfYXJfYXRfZmlsZT1ubworICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sCisgICAgIFtlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiZBU19NRVNTQUdFX0xPR19GRCcKKyAgICAgIEFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorICAgICAgaWYgdGVzdCAwIC1lcSAiJGFjX3N0YXR1cyI7IHRoZW4KKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorCUFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorCWlmIHRlc3QgMCAtbmUgIiRhY19zdGF0dXMiOyB0aGVuCisgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisgICAgIF0pCisgIF0pCisKK2lmIHRlc3Qgbm8gPSAiJGx0X2N2X2FyX2F0X2ZpbGUiOyB0aGVuCisgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KK2Vsc2UKKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCitmaQorX0xUX0RFQ0woW10sIFthcmNoaXZlcl9saXN0X3NwZWNdLCBbMV0sCisgIFtIb3cgdG8gZmVlZCBhIGZpbGUgbGlzdGluZyB0byB0aGUgYXJjaGl2ZXJdKQorXSkjIF9MVF9QUk9HX0FSCisKKworIyBfTFRfQ01EX09MRF9BUkNISVZFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX09MRF9BUkNISVZFXSwKK1tfTFRfUFJPR19BUgorCitBQ19DSEVDS19UT09MKFNUUklQLCBzdHJpcCwgOikKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgorX0xUX0RFQ0woW10sIFtTVFJJUF0sIFsxXSwgW0Egc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtXSkKKworQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYiwgOikKK3Rlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06CitfTFRfREVDTChbXSwgW1JBTkxJQl0sIFsxXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlXSkKKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYml0cmlnKiB8IG9wZW5ic2QqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCR0b29sX29sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCR0b29sX29sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkdG9vbF9vbGRsaWIiCitmaQorCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPXllcyA7OworICAqKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj1ubyA7OworZXNhYworX0xUX0RFQ0woW10sIFtvbGRfcG9zdGluc3RhbGxfY21kc10sIFsyXSkKK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3R1bmluc3RhbGxfY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbiBvbGQtc3R5bGUgYXJjaGl2ZV0pCitfTFRfREVDTChbXSwgW2xvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbl0sIFswXSwKKyAgICBbV2hldGhlciB0byB1c2UgYSBsb2NrIGZvciBvbGQgYXJjaGl2ZSBleHRyYWN0aW9uXSkKK10pIyBfTFRfQ01EX09MRF9BUkNISVZFCisKKworIyBfTFRfQ09NUElMRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIwkJW09VVFBVVC1GSUxFXSwgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfQ09NUElMRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIG00X2lmKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiICAjIyBleGNsdWRlIGZyb20gc2NfdXNlbGVzc19xdW90ZXNfaW5fYXNzaWdubWVudAorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAkMj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCitdKQorCitpZiB0ZXN0IHllcyA9ICJbJF0kMiI7IHRoZW4KKyAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCitlbHNlCisgICAgbTRfaWYoWyQ2XSwgLCA6LCBbJDZdKQorZmkKK10pIyBfTFRfQ09NUElMRVJfT1BUSU9OCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbX0xUX0NPTVBJTEVSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwgW10pCisKKworIyBfTFRfTElOS0VSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKyMgICAgICAgICAgICAgICAgICBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxpbmtlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtfTFRfTElOS0VSX09QVElPTl0sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgIExERkxBR1M9IiRMREZMQUdTICQzIgorICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgJDI9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSAtciBjb25mdGVzdCoKKyAgIExERkxBR1M9JHNhdmVfTERGTEFHUworXSkKKworaWYgdGVzdCB5ZXMgPSAiWyRdJDIiOyB0aGVuCisgICAgbTRfaWYoWyQ0XSwgLCA6LCBbJDRdKQorZWxzZQorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2ZpCitdKSMgX0xUX0xJTktFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbX0xUX0xJTktFUl9PUFRJT05dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0xJTktFUl9PUFRJT05dLCBbXSkKKworCisjIExUX0NNRF9NQVhfTEVOCisjLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfQ01EX01BWF9MRU5dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKKyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworQUNfTVNHX0NIRUNLSU5HKFt0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50c10pCitBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19tYXhfY21kX2xlbl0sIFtkbmwKKyAgaT0wCisgIHRlc3RzdHJpbmc9QUJDRAorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBtaW50KikKKyAgICAjIE9uIE1pTlQgdGhpcyBjYW4gdGFrZSBhIGxvbmcgdGltZSBhbmQgcnVuIG91dCBvZiBtZW1vcnkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIGJpdHJpZyogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KiB8IGZyZWVic2QqIHwgbmV0YnNkKiB8IG9wZW5ic2QqKQorICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworICAgIGZpCisgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgOzsKKworICBpbnRlcml4KikKKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisgICAgOzsKKworICBvczIqKQorICAgICMgVGhlIHRlc3QgdGFrZXMgYSBsb25nIHRpbWUgb24gT1MvMi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MgorICAgIDs7CisKKyAgb3NmKikKKyAgICAjIERyLiBIYW5zIEVra2VoYXJkIFBsZXNzZXIgcmVwb3J0cyBzZWVpbmcgYSBrZXJuZWwgcGFuaWMgcnVubmluZyBjb25maWd1cmUKKyAgICAjIGR1ZSB0byB0aGlzIHRlc3Qgd2hlbiBleGVjX2Rpc2FibGVfYXJnX2xpbWl0IGlzIDEgb24gVHJ1NjQuIEl0IGlzIG5vdAorICAgICMgbmljZSB0byBjYXVzZSBrZXJuZWwgcGFuaWNzIHNvIGxldHMgYXZvaWQgdGhlIGxvb3AgYmVsb3cuCisgICAgIyBGaXJzdCBzZXQgYSByZWFzb25hYmxlIGRlZmF1bHQuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTE2Mzg0CisgICAgIworICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY29uZmlnOyB0aGVuCisgICAgICBjYXNlIGAvc2Jpbi9zeXNjb25maWcgLXEgcHJvYyBleGVjX2Rpc2FibGVfYXJnX2xpbWl0YCBpbgorICAgICAgICAqMSopIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMSA7OworICAgICAgZXNhYworICAgIGZpCisgICAgOzsKKyAgc2NvMy4ydjUqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xMDI0MDAKKyAgICA7OworICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCisgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qW1sJIF1dLy8nYAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0zMjc2OAorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiAmJiBcCisgICAgICAgdGVzdCB1bmRlZmluZWQgIT0gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDg7IGRvCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQorICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgorICAgICAgd2hpbGUgeyB0ZXN0IFhgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisJICAgICAgICAgPSAiWCR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciOyB9ID4vZGV2L251bGwgMj4mMSAmJgorCSAgICAgIHRlc3QgMTcgIT0gIiRpIiAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgICBkbworICAgICAgICBpPWBleHByICRpICsgMWAKKyAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgICBkb25lCisgICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKKyAgICAgIHRlc3RzdHJpbmc9CisgICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uCisgICAgICAjIG1hc3NpdmUgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZQorICAgICAgIyBsaW5rZXIuICBJdCBhcHBlYXJzIGFzIHRob3VnaCAxLzIgaXMgYSB1c2FibGUgdmFsdWUuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworXSkKK2lmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJGx0X2N2X3N5c19tYXhfY21kX2xlbikKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChub25lKQorZmkKK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KK19MVF9ERUNMKFtdLCBbbWF4X2NtZF9sZW5dLCBbMF0sCisgICAgW1doYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD9dKQorXSkjIExUX0NNRF9NQVhfTEVOCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbTFRfQ01EX01BWF9MRU5dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sIFtdKQorCisKKyMgX0xUX0hFQURFUl9ETEZDTgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0hFQURFUl9ETEZDTl0sCitbQUNfQ0hFQ0tfSEVBREVSUyhbZGxmY24uaF0sIFtdLCBbXSwgW0FDX0lOQ0xVREVTX0RFRkFVTFRdKWRubAorXSkjIF9MVF9IRUFERVJfRExGQ04KKworCisjIF9MVF9UUllfRExPUEVOX1NFTEYgKEFDVElPTi1JRi1UUlVFLCBBQ1RJT04tSUYtVFJVRS1XLVVTQ09SRSwKKyMgICAgICAgICAgICAgICAgICAgICAgQUNUSU9OLUlGLUZBTFNFLCBBQ1RJT04tSUYtQ1JPU1MtQ09NUElMSU5HKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1RSWV9ETE9QRU5fU0VMRl0sCitbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCitpZiB0ZXN0IHllcyA9ICIkY3Jvc3NfY29tcGlsaW5nIjsgdGhlbiA6CisgIFskNF0KK2Vsc2UKKyAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgorICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorWyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdoZW4gLWZ2aXNpYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOworI2VuZGlmCisKK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CisgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KKyAgICB9CisgIGVsc2UKKyAgICBwdXRzIChkbGVycm9yICgpKTsKKworICByZXR1cm4gc3RhdHVzOworfV0KK19MVF9FT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyAiY29uZnRlc3QkYWNfZXhlZXh0IiAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSAkMSA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OworICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgICQzCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorXSkjIF9MVF9UUllfRExPUEVOX1NFTEYKKworCisjIExUX1NZU19ETE9QRU5fU0VMRgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9TWVNfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCB5ZXMgIT0gIiRlbmFibGVfZGxvcGVuIjsgdGhlbgorICBlbmFibGVfZGxvcGVuPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCitlbHNlCisgIGx0X2N2X2Rsb3Blbj1ubworICBsdF9jdl9kbG9wZW5fbGlicz0KKworICBjYXNlICRob3N0X29zIGluCisgIGJlb3MqKQorICAgIGx0X2N2X2Rsb3Blbj1sb2FkX2FkZF9vbgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIDs7CisKKyAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgbHRfY3ZfZGxvcGVuPUxvYWRMaWJyYXJ5CisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgOzsKKworICBjeWd3aW4qKQorICAgIGx0X2N2X2Rsb3Blbj1kbG9wZW4KKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGRhcndpbiopCisgICAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxdLFsKKyAgICBsdF9jdl9kbG9wZW49ZHlsZAorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIF0pCisgICAgOzsKKworICB0cGYqKQorICAgICMgRG9uJ3QgdHJ5IHRvIHJ1biBhbnkgbGluayB0ZXN0cyBmb3IgVFBGLiAgV2Uga25vdyBpdCdzIGltcG9zc2libGUKKyAgICAjIGJlY2F1c2UgVFBGIGlzIGEgY3Jvc3MtY29tcGlsZXIsIGFuZCB3ZSBrbm93IGhvdyB3ZSBvcGVuIERTT3MuCisgICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vCisgICAgOzsKKworICAqKQorICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKKwkgIFtsdF9jdl9kbG9wZW49c2hsX2xvYWRdLAorICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW3NobF9sb2FkXSwKKwkgICAgW2x0X2N2X2Rsb3Blbj1zaGxfbG9hZCBsdF9jdl9kbG9wZW5fbGlicz0tbGRsZF0sCisJW0FDX0NIRUNLX0ZVTkMoW2Rsb3Blbl0sCisJICAgICAgW2x0X2N2X2Rsb3Blbj1kbG9wZW5dLAorCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbF0sCisJICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKKwkJICBbbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbHN2bGRdLAorCSAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtkbGRfbGlua10sCisJCSAgICBbbHRfY3ZfZGxvcGVuPWRsZF9saW5rIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxkXSkKKwkgICAgICBdKQorCSAgICBdKQorCSAgXSkKKwldKQorICAgICAgXSkKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCBubyA9ICIkbHRfY3ZfZGxvcGVuIjsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworICAgIHRlc3QgeWVzID0gIiRhY19jdl9oZWFkZXJfZGxmY25faCIgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0kTElCUworICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKworICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCisJICBsdF9jdl9kbG9wZW5fc2VsZiwgW2RubAorCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vLCBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcykKKyAgICBdKQorCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2Rsb3Blbl9zZWxmIjsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLCBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8sICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9Y3Jvc3MpCisgICAgICBdKQorICAgIGZpCisKKyAgICBDUFBGTEFHUz0kc2F2ZV9DUFBGTEFHUworICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIExJQlM9JHNhdmVfTElCUworICAgIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZiBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZj0kbHRfY3ZfZGxvcGVuX3NlbGYgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24gOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyBpbgorICB5ZXN8bm8pIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24gOzsKKyAgZXNhYworZmkKK19MVF9ERUNMKFtkbG9wZW5fc3VwcG9ydF0sIFtlbmFibGVfZGxvcGVuXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl0sIFtlbmFibGVfZGxvcGVuX3NlbGZdLCBbMF0sCisJIFtXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWRdKQorX0xUX0RFQ0woW2Rsb3Blbl9zZWxmX3N0YXRpY10sIFtlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK10pIyBMVF9TWVNfRExPUEVOX1NFTEYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW0xUX1NZU19ETE9QRU5fU0VMRl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9DX08oW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIG9wdGlvbnMgLWMgYW5kIC1vIGFyZSBzaW11bHRhbmVvdXNseSBzdXBwb3J0ZWQgYnkgY29tcGlsZXIuCisjIFRoaXMgbWFjcm8gZG9lcyBub3QgaGFyZCBjb2RlIHRoZSBjb21waWxlciBsaWtlIEFDX1BST0dfQ0NfQ19PLgorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9DX09dLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkRUNITyAiJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICRSTSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgICRSTSAtciBjb25mdGVzdAorICAgJFJNIGNvbmZ0ZXN0KgorXSkKK19MVF9UQUdERUNMKFtjb21waWxlcl9jX29dLCBbbHRfY3ZfcHJvZ19jb21waWxlcl9jX29dLCBbMV0sCisJW0RvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz9dKQorXSkjIF9MVF9DT01QSUxFUl9DX08KKworCisjIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgd2UgY2FuIGRvIGhhcmQgbGlua3MgdG8gbG9jayBzb21lIGZpbGVzIGlmIG5lZWRlZAorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9GSUxFX0xPQ0tTXSwKK1ttNF9yZXF1aXJlKFtfTFRfRU5BQkxFX0xPQ0tdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCitfTFRfQ09NUElMRVJfQ19PKFskMV0pCisKK2hhcmRfbGlua3M9bm90dGVzdGVkCitpZiB0ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiICYmIHRlc3Qgbm8gIT0gIiRuZWVkX2xvY2tzIjsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3NdKQorICBoYXJkX2xpbmtzPXllcworICAkUk0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICBBQ19NU0dfUkVTVUxUKFskaGFyZF9saW5rc10pCisgIGlmIHRlc3Qgbm8gPSAiJGhhcmRfbGlua3MiOyB0aGVuCisgICAgQUNfTVNHX1dBUk4oWyckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmVdKQorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorX0xUX0RFQ0woW10sIFtuZWVkX2xvY2tzXSwgWzFdLCBbTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/XSkKK10pIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUworCisKKyMgX0xUX0NIRUNLX09CSkRJUgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NIRUNLX09CSkRJUl0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBvYmpkaXJdLCBbbHRfY3Zfb2JqZGlyXSwKK1tybSAtZiAubGlicyAyPi9kZXYvbnVsbAorbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLmxpYnM7IHRoZW4KKyAgbHRfY3Zfb2JqZGlyPS5saWJzCitlbHNlCisgICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCisgIGx0X2N2X29iamRpcj1fbGlicworZmkKK3JtZGlyIC5saWJzIDI+L2Rldi9udWxsXSkKK29iamRpcj0kbHRfY3Zfb2JqZGlyCitfTFRfREVDTChbXSwgW29iamRpcl0sIFswXSwKKyAgICAgICAgIFtUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXNdKWRubAorbTRfcGF0dGVybl9hbGxvdyhbTFRfT0JKRElSXSlkbmwKK0FDX0RFRklORV9VTlFVT1RFRChbTFRfT0JKRElSXSwgIiRsdF9jdl9vYmpkaXIvIiwKKyAgW0RlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSB3aGVyZSBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuXSkKK10pIyBfTFRfQ0hFQ0tfT0JKRElSCisKKworIyBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBoYXJkY29kaW5nIGF0dHJpYnV0ZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXNdKQorX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwKKyAgIHRlc3QgLW4gIiRfTFRfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8CisgICB0ZXN0IHllcyA9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSI7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3Qgbm8gIT0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpIiAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkiICYmCisgICAgIHRlc3Qgbm8gIT0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKSI7IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9dW5zdXBwb3J0ZWQKK2ZpCitBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKV0pCisKK2lmIHRlc3QgcmVsaW5rID0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpIiB8fAorICAgdGVzdCB5ZXMgPSAiJF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpIjsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0IHllcyA9ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiB8fAorICAgICB0ZXN0IG5vID0gIiRlbmFibGVfc2hhcmVkIjsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYWN0aW9uXSwgWzBdLAorICAgIFtIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZV0pCitdKSMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRICisKKworIyBfTFRfQ01EX1NUUklQTElCCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX1NUUklQTElCXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCitzdHJpcGxpYj0KK29sZF9zdHJpcGxpYj0KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlXSkKK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgorICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgIGVsc2UKKyAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICBmaQorICAgIDs7CisgICopCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbXSwgW29sZF9zdHJpcGxpYl0sIFsxXSwgW0NvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N0cmlwbGliXSwgWzFdKQorXSkjIF9MVF9DTURfU1RSSVBMSUIKKworCisjIF9MVF9QUkVQQVJFX01VTkdFX1BBVEhfTElTVAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFrZSBzdXJlIGZ1bmNfbXVuZ2VfcGF0aF9saXN0KCkgaXMgZGVmaW5lZCBjb3JyZWN0bHkuCittNF9kZWZ1bihbX0xUX1BSRVBBUkVfTVVOR0VfUEFUSF9MSVNUXSwKK1tbIyBmdW5jX211bmdlX3BhdGhfbGlzdCBWQVJJQUJMRSBQQVRICisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFZBUklBQkxFIGlzIG5hbWUgb2YgdmFyaWFibGUgY29udGFpbmluZyBfc3BhY2VfIHNlcGFyYXRlZCBsaXN0IG9mCisjIGRpcmVjdG9yaWVzIHRvIGJlIG11bmdlZCBieSB0aGUgY29udGVudHMgb2YgUEFUSCwgd2hpY2ggaXMgc3RyaW5nCisjIGhhdmluZyBhIGZvcm1hdDoKKyMgIkRJUls6RElSXToiCisjICAgICAgIHN0cmluZyAiRElSWyBESVJdIiB3aWxsIGJlIHByZXBlbmRlZCB0byBWQVJJQUJMRQorIyAiOkRJUls6RElSXSIKKyMgICAgICAgc3RyaW5nICJESVJbIERJUl0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIkRJUlBbOkRJUlBdOjpbRElSQTpdRElSQSIKKyMgICAgICAgc3RyaW5nICJESVJQWyBESVJQXSIgd2lsbCBiZSBwcmVwZW5kZWQgdG8gVkFSSUFCTEUgYW5kIHN0cmluZworIyAgICAgICAiRElSQVsgRElSQV0iIHdpbGwgYmUgYXBwZW5kZWQgdG8gVkFSSUFCTEUKKyMgIkRJUls6RElSXSIKKyMgICAgICAgVkFSSUFCTEUgd2lsbCBiZSByZXBsYWNlZCBieSAiRElSWyBESVJdIgorZnVuY19tdW5nZV9wYXRoX2xpc3QgKCkKK3sKKyAgICBjYXNlIHhAU3xAMiBpbgorICAgIHgpCisgICAgICAgIDs7CisgICAgKjopCisgICAgICAgIGV2YWwgQFN8QDE9XCJgJEVDSE8gQFN8QDIgfCAkU0VEICdzLzovIC9nJ2AgXEBTfEBAU3xAMVwiCisgICAgICAgIDs7CisgICAgeDoqKQorICAgICAgICBldmFsIEBTfEAxPVwiXEBTfEBAU3xAMSBgJEVDSE8gQFN8QDIgfCAkU0VEICdzLzovIC9nJ2BcIgorICAgICAgICA7OworICAgICo6OiopCisgICAgICAgIGV2YWwgQFN8QDE9XCJcQFN8QEBTfEAxXCBgJEVDSE8gQFN8QDIgfCAkU0VEIC1lICdzLy4qOjovLycgLWUgJ3MvOi8gL2cnYFwiCisgICAgICAgIGV2YWwgQFN8QDE9XCJgJEVDSE8gQFN8QDIgfCAkU0VEIC1lICdzLzo6LiovLycgLWUgJ3MvOi8gL2cnYFwgXEBTfEBAU3xAMVwiCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgZXZhbCBAU3xAMT1cImAkRUNITyBAU3xAMiB8ICRTRUQgJ3MvOi8gL2cnYFwiCisgICAgICAgIDs7CisgICAgZXNhYworfQorXV0pIyBfTFRfUFJFUEFSRV9QQVRIX0xJU1QKKworCisjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBPUlRNRSBGaWxsIGluIHlvdXIgbGQuc28gY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX1NZU19EWU5BTUlDX0xJTktFUl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdKWRubAorbTRfcmVxdWlyZShbX0xUX1BSRVBBUkVfTVVOR0VfUEFUSF9MSVNUXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzXSkKK200X2lmKFskMV0sCisJW10sIFsKK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovLC9MUi8nIDs7CisgICAgKikgbHRfYXdrX2FyZz0nL15saWJyYXJpZXM6LycgOzsKKyAgZXNhYworICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9J3N8PVwoW1tBLVphLXpdXTpcKXxcMXxnJyA7OworICAgICopIGx0X3NlZF9zdHJpcF9lcT0nc3w9L3wvfGcnIDs7CisgIGVzYWMKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKKyAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgorICAqXDsqKQorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAncy87LyAvZydgCisgICAgOzsKKyAgKikKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICA7OworICBlc2FjCisgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5Li4uCisgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPQorICBsdF9tdWx0aV9vc19kaXI9L2AkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgIyAuLi5idXQgaWYgc29tZSBwYXRoIGNvbXBvbmVudCBhbHJlYWR5IGVuZHMgd2l0aCB0aGUgbXVsdGlsaWIgZGlyIHdlIGFzc3VtZQorICAjIHRoYXQgYWxsIGlzIGZpbmUgYW5kIHRydXN0IC1wcmludC1zZWFyY2gtZGlycyBhcyBpcyAoR0NDIDQuMj8gb3IgbmV3ZXIpLgorICBjYXNlICIkbHRfbXVsdGlfb3NfZGlyOyAkbHRfc2VhcmNoX3BhdGhfc3BlYyAiIGluCisgICIvOyAiKiB8ICIvLjsgIiogfCAiLy4vOyAiKiB8ICoiJGx0X211bHRpX29zX2RpciAiKiB8ICoiJGx0X211bHRpX29zX2Rpci8gIiopCisgICAgbHRfbXVsdGlfb3NfZGlyPQorICAgIDs7CisgIGVzYWMKKyAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCRsdF9tdWx0aV9vc19kaXIiCisgICAgZWxpZiB0ZXN0IC1uICIkbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCisJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCisgICAgZmkKKyAgZG9uZQorICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCitCRUdJTiB7UlMgPSAiICI7IEZTID0gIi98XG4iO30geworICBsdF9mb28gPSAiIjsKKyAgbHRfY291bnQgPSAwOworICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgeworICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKKyAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CisgICAgICAgIGx0X2NvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgeworICAgICAgICAgIGx0X2ZvbyA9ICIvIiAkbHRfaSBsdF9mb287CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgbHRfY291bnQtLTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorICBpZiAobHRfZm9vICE9ICIiKSB7IGx0X2ZyZXFbW2x0X2Zvb11dKys7IH0KKyAgaWYgKGx0X2ZyZXFbW2x0X2Zvb11dID09IDEpIHsgcHJpbnQgbHRfZm9vOyB9Cit9J2AKKyAgIyBBV0sgcHJvZ3JhbSBhYm92ZSBlcnJvbmVvdXNseSBwcmVwZW5kcyAnLycgdG8gQzovZG9zL3BhdGhzCisgICMgZm9yIHRoZXNlIGhvc3RzLgorICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCisgICAgICAkU0VEICdzfC9cKFtbQS1aYS16XV06XCl8XDF8ZydgIDs7CisgIGVzYWMKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJGx0X05MMlNQYAorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaV0pCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0uc28KK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitBQ19BUkdfVkFSKFtMVF9TWVNfTElCUkFSWV9QQVRIXSwKK1tVc2VyLWRlZmluZWQgcnVuLXRpbWUgbGlicmFyeSBzZWFyY2ggcGF0aC5dKQorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICA7OworCithaXhbWzQtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSAnIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uICcuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bWzAxXV0gfCBhaXg0LltbMDFdXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJENDIC1FIC0gfCAkR1JFUCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgVXNpbmcgSW1wb3J0IEZpbGVzIGFzIGFyY2hpdmUgbWVtYmVycywgaXQgaXMgcG9zc2libGUgdG8gc3VwcG9ydAorICAgICMgZmlsZW5hbWUtYmFzZWQgdmVyc2lvbmluZyBvZiBzaGFyZWQgbGlicmFyeSBhcmNoaXZlcyBvbiBBSVguIFdoaWxlCisgICAgIyB0aGlzIHdvdWxkIHdvcmsgZm9yIGJvdGggd2l0aCBhbmQgd2l0aG91dCBydW50aW1lIGxpbmtpbmcsIGl0IHdpbGwKKyAgICAjIHByZXZlbnQgc3RhdGljIGxpbmtpbmcgb2Ygc3VjaCBhcmNoaXZlcy4gU28gd2UgZG8gZmlsZW5hbWUtYmFzZWQKKyAgICAjIHNoYXJlZCBsaWJyYXJ5IHZlcnNpb25pbmcgd2l0aCAuc28gZXh0ZW5zaW9uIG9ubHksIHdoaWNoIGlzIHVzZWQKKyAgICAjIHdoZW4gYm90aCBydW50aW1lIGxpbmtpbmcgYW5kIHNoYXJlZCBsaW5raW5nIGlzIGVuYWJsZWQuCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBydW50aW1lIGxpbmtpbmcgbWF5IGltcGFjdCBwZXJmb3JtYW5jZSwgc28gd2UgZG8KKyAgICAjIG5vdCB3YW50IHRoaXMgdG8gYmUgdGhlIGRlZmF1bHQgZXZlbnR1YWxseS4gQWxzbywgd2UgdXNlIHRoZQorICAgICMgdmVyc2lvbmVkIC5zbyBsaWJzIGZvciBleGVjdXRhYmxlcyBvbmx5IGlmIHRoZXJlIGlzIHRoZSAtYnJ0bAorICAgICMgbGlua2VyIGZsYWcgaW4gTERGTEFHUyBhcyB3ZWxsLCBvciAtLXdpdGgtYWl4LXNvbmFtZT1zdnI0IG9ubHkuCisgICAgIyBUbyBhbGxvdyBmb3IgZmlsZW5hbWUtYmFzZWQgdmVyc2lvbmluZyBzdXBwb3J0LCB3ZSBuZWVkIHRvIGNyZWF0ZQorICAgICMgbGliTkFNRS5zby5WIGFzIGFuIGFyY2hpdmUgZmlsZSwgY29udGFpbmluZzoKKyAgICAjICopIGFuIEltcG9ydCBGaWxlLCByZWZlcnJpbmcgdG8gdGhlIHZlcnNpb25lZCBmaWxlbmFtZSBvZiB0aGUKKyAgICAjICAgIGFyY2hpdmUgYXMgd2VsbCBhcyB0aGUgc2hhcmVkIGFyY2hpdmUgbWVtYmVyLCB0ZWxsaW5nIHRoZQorICAgICMgICAgYml0d2lkdGggKDMyIG9yIDY0KSBvZiB0aGF0IHNoYXJlZCBvYmplY3QsIGFuZCBwcm92aWRpbmcgdGhlCisgICAgIyAgICBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMgb2YgdGhhdCBzaGFyZWQgb2JqZWN0LCBldmVudHVhbGx5CisgICAgIyAgICBkZWNvcmF0ZWQgd2l0aCB0aGUgJ3dlYWsnIGtleXdvcmQKKyAgICAjICopIHRoZSBzaGFyZWQgb2JqZWN0IHdpdGggdGhlIEZfTE9BRE9OTFkgZmxhZyBzZXQsIHRvIHJlYWxseSBhdm9pZAorICAgICMgICAgaXQgYmVpbmcgc2VlbiBieSB0aGUgbGlua2VyLgorICAgICMgQXQgcnVuIHRpbWUgd2UgYmV0dGVyIHVzZSB0aGUgcmVhbCBmaWxlIHJhdGhlciB0aGFuIGFub3RoZXIgc3ltbGluaywKKyAgICAjIGJ1dCBmb3IgbGluayB0aW1lIHdlIGNyZWF0ZSB0aGUgc3ltbGluayBsaWJOQU1FLnNvIC0+IGxpYk5BTUUuc28uVgorCisgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbm5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgYWl4LHllcykgIyB0cmFkaXRpb25hbCBsaWJ0b29sCisgICAgICBkeW5hbWljX2xpbmtlcj0nQUlYIHVudmVyc2lvbmFibGUgbGliLnNvJworICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgOzsKKyAgICBhaXgsbm8pICMgdHJhZGl0aW9uYWwgQUlYIG9ubHkKKyAgICAgIGR5bmFtaWNfbGlua2VyPSdBSVggbGliLmFbKF1saWIuc28uVlspXScKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgICAgOzsKKyAgICBzdnI0LCopICMgZnVsbCBzdnI0IG9ubHkKKyAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLnNvLlZbKF0kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub1spXSIKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgICAjIFdlIGRvIG5vdCBzcGVjaWZ5IGEgcGF0aCBpbiBJbXBvcnQgRmlsZXMsIHNvIExJQlBBVEggZmlyZXMuCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgICA7OworICAgICoseWVzKSAjIGJvdGgsIHByZWZlciBzdnI0CisgICAgICBkeW5hbWljX2xpbmtlcj0iQUlYIGxpYi5zby5WWyhdJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm9bKV0sIGxpYi5hWyhdbGliLnNvLlZbKV0iCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgIyB1bnByZWZlcnJlZCBzaGFyZWRsaWIgbGliTkFNRS5hIG5lZWRzIGV4dHJhIGhhbmRsaW5nCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSd0ZXN0IC1uICIkbGlua25hbWUiIHx8IGxpbmtuYW1lPSIkcmVhbG5hbWUifmZ1bmNfc3RyaXBuYW1lICIiICIuc28iICIkbGlua25hbWUifiRpbnN0YWxsX3NoYXJlZF9wcm9nICIkZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCIgIiRkZXN0ZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuJGxpYmV4dCJ+dGVzdCAteiAiJHRzdHJpcG1lIiB8fCB0ZXN0IC16ICIkc3RyaXBsaWIiIHx8ICRzdHJpcGxpYiAiJGRlc3RkaXIvJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC4kbGliZXh0IicKKyAgICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXMgJG9sZF9saWJyYXJ5OyBkbyA6OyBkb25lfmZ1bmNfc3RyaXBuYW1lICIiICIuc28iICIkbiJ+dGVzdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIgPSAiJG4iIHx8IGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kZnVuY19zdHJpcG5hbWVfcmVzdWx0LiRsaWJleHQiJworICAgICAgIyBXZSBkbyBub3Qgc3BlY2lmeSBhIHBhdGggaW4gSW1wb3J0IEZpbGVzLCBzbyBMSUJQQVRIIGZpcmVzLgorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgICAgOzsKKyAgICAqLG5vKSAjIGJvdGgsIHByZWZlciBhaXgKKyAgICAgIGR5bmFtaWNfbGlua2VyPSJBSVggbGliLmFbKF1saWIuc28uVlspXSwgbGliLnNvLlZbKF0kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub1spXSIKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgICAgIyB1bnByZWZlcnJlZCBzaGFyZWRsaWIgbGliTkFNRS5zby5WIGFuZCBzeW1saW5rIGxpYk5BTUUuc28gbmVlZCBleHRyYSBoYW5kbGluZworICAgICAgcG9zdGluc3RhbGxfY21kcz0ndGVzdCAteiAiJGRsbmFtZSIgfHwgJGluc3RhbGxfc2hhcmVkX3Byb2cgJGRpci8kZGxuYW1lICRkZXN0ZGlyLyRkbG5hbWV+dGVzdCAteiAiJHRzdHJpcG1lIiB8fCB0ZXN0IC16ICIkc3RyaXBsaWIiIHx8ICRzdHJpcGxpYiAkZGVzdGRpci8kZGxuYW1lfnRlc3QgLW4gIiRsaW5rbmFtZSIgfHwgbGlua25hbWU9JHJlYWxuYW1lfmZ1bmNfc3RyaXBuYW1lICIiICIuYSIgIiRsaW5rbmFtZSJ+KGNkICIkZGVzdGRpciIgJiYgJExOX1MgLWYgJGRsbmFtZSAkZnVuY19zdHJpcG5hbWVfcmVzdWx0LnNvKScKKyAgICAgIHBvc3R1bmluc3RhbGxfY21kcz0ndGVzdCAteiAiJGRsbmFtZSIgfHwgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRkbG5hbWUifmZvciBuIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8gOjsgZG9uZX5mdW5jX3N0cmlwbmFtZSAiIiAiLmEiICIkbiJ+ZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuc28iJworICAgICAgOzsKKyAgICBlc2FjCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIDs7CisgIG02OGspCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFtbXi9dXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIDs7CisgIGVzYWMKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpW1s0NV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9LmRsbAorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorICB5ZXMsKikKKyAgICAjIGdjYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgICBmaScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKK200X2lmKFskMV0sIFtdLFsKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiXSkKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICAgIDs7CisgICAgZXNhYworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKworICAqLGNsKikKKyAgICAjIE5hdGl2ZSBNU1ZDCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwubGliJworCisgICAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgICBtaW5ndyopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisgICAgICBsdF9zYXZlX2lmcz0kSUZTCisgICAgICBJRlM9JzsnCisgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisgICAgICBkbworICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW1thLXpBLVpdXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisgICAgICA7OworICAgIGN5Z3dpbiopCisgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kTElCCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsXTsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRSTSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxpbmsuZXhlJworICAgIDs7CisKKyAgKikKKyAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0ICRsaWJuYW1lLmxpYicKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisgIGVzYWMKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKK200X2lmKFskMV0sIFtdLFsKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbG9jYWwvbGliIl0pCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbWzIzXV0uKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIuKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1swMV1dKiB8IGZyZWVic2RlbGYzLltbMDFdXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzItOV1dKiB8IGZyZWVic2RlbGYzLltbMi05XV0qIHwgXAorICBmcmVlYnNkNC5bWzAtNV1dIHwgZnJlZWJzZGVsZjQuW1swLTVdXSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitoYWlrdSopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIGlmIHRlc3QgMzIgPSAiJEhQVVhfSUE2NF9NT0RFIjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIvaHB1eDMyCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIvaHB1eDY0CisgICAgZmkKKyAgICA7OworICBocHBhKjY0KikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CisgIDs7CisKK2ludGVyaXhbWzMtOV1dKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIC91c3IvbG9jYWwvbGliJGxpYnN1ZmYiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitsaW51eCphbmRyb2lkKikKKyAgdmVyc2lvbl90eXBlPW5vbmUgIyBBbmRyb2lkIGRvZXNuJ3Qgc3VwcG9ydCB2ZXJzaW9uZWQgbGlicmFyaWVzLgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBmaW5pc2hfY21kcz0KKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgIGR5bmFtaWNfbGlua2VyPSdBbmRyb2lkIGxpbmtlcicKKyAgIyBEb24ndCBlbWJlZCAtcnBhdGggZGlyZWN0b3JpZXMgc2luY2UgdGhlIGxpbmtlciBkb2Vzbid0IHN1cHBvcnQgdGhlbS4KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisKKyAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICisgIEFDX0NBQ0hFX1ZBTChbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwKKyAgICBbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgc2F2ZV9saWJkaXI9JGxpYmRpcgorICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKVwiOyBcCisJIExERkxBR1M9XCJcJExERkxBR1MgJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpXCIiCisgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorICAgICAgW0FTX0lGKFsgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsXSwKKwkgW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXNdKV0pCisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorICAgIF0pCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBJZGVhbGx5LCB3ZSBjb3VsZCB1c2UgbGRjb25maWcgdG8gcmVwb3J0ICphbGwqIGRpcmVjdG9yZXMgd2hpY2ggYXJlCisgICMgc2VhcmNoZWQgZm9yIGxpYnJhcmllcywgaG93ZXZlciB0aGlzIGlzIHN0aWxsIG5vdCBwb3NzaWJsZS4gIEFzaWRlIGZyb20gbm90CisgICMgYmVpbmcgY2VydGFpbiAvc2Jpbi9sZGNvbmZpZyBpcyBhdmFpbGFibGUsIGNvbW1hbmQKKyAgIyAnbGRjb25maWcgLU4gLVggLXYgfCBncmVwIF4vJyBvbiA2NGJpdCBGZWRvcmEgZG9lcyBub3QgcmVwb3J0IC91c3IvbGliNjQsCisgICMgZXZlbiB0aG91Z2ggaXQgaXMgc2VhcmNoZWQgYXQgcnVuLXRpbWUuICBUcnkgdG8gZG8gdGhlIGJlc3QgZ3Vlc3MgYnkKKyAgIyBhcHBlbmRpbmcgbGQuc28uY29uZiBjb250ZW50cyAoYW5kIGluY2x1ZGVzKSB0byB0aGUgc2VhcmNoIHBhdGguCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCisqbnRvKiB8ICpxbngqKQorICB2ZXJzaW9uX3R5cGU9cW54CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nbGRxbnguc28nCisgIDs7CisKK29wZW5ic2QqIHwgYml0cmlnKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KKyAgICBuZWVkX3ZlcnNpb249bm8KKyAgZWxzZQorICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgZmkKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK29zMiopCisgIGxpYm5hbWVfc3BlYz0nJG5hbWUnCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPS5kbGwKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworICAjIE9TLzIgY2FuIG9ubHkgbG9hZCBhIERMTCB3aXRoIGEgYmFzZSBuYW1lIG9mIDggY2hhcmFjdGVycyBvciBsZXNzLgorICBzb25hbWVfc3BlYz0nYHRlc3QgLW4gIiRvczJkbGxuYW1lIiAmJiBsaWJuYW1lPSIkb3MyZGxsbmFtZSI7CisgICAgdj0kKCRFQ0hPICRyZWxlYXNlJHZlcnN1ZmZpeCB8IHRyIC1kIC4tKTsKKyAgICBuPSQoJEVDSE8gJGxpYm5hbWUgfCBjdXQgLWIgLSQoKDggLSAkeyN2fSkpIHwgdHIgLiBfKTsKKyAgICAkRUNITyAkbiR2YCRzaGFyZWRfZXh0JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1fZGxsLiRsaWJleHQnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1CRUdJTkxJQlBBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+CisgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgIGlmIHRlc3QgLW4gJ1wnJyRzdHJpcG1lJ1wnJyAmJiB0ZXN0IC1uICdcJyckc3RyaXBsaWInXCcnOyB0aGVuCisgICAgICBldmFsICdcJyckc3RyaXBsaWIgXCRkbGRpci8kZGxuYW1lJ1wnJyB8fCBleGl0IFwkPzsKKyAgICBmaScKKyAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7ICRFQ0hPIFwkZGxuYW1lJ1wnJ2B+CisgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAkUk0gXCRkbHBhdGgnCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICA7OworCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPXNjbworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCit1dHM0KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQordGVzdCBubyA9ICIkZHluYW1pY19saW5rZXIiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworZmkKKworaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKK2ZpCisKKyMgcmVtZW1iZXIgdW5hdWdtZW50ZWQgc3lzX2xpYl9kbHNlYXJjaF9wYXRoIGNvbnRlbnQgZm9yIGxpYnRvb2wgc2NyaXB0IGRlY2xzLi4uCitjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoPSRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIC4uLiBidXQgaXQgbmVlZHMgTFRfU1lTX0xJQlJBUllfUEFUSCBtdW5naW5nIGZvciBvdGhlciBjb25maWd1cmUtdGltZSBjb2RlCitmdW5jX211bmdlX3BhdGhfbGlzdCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAiJExUX1NZU19MSUJSQVJZX1BBVEgiCisKKyMgdG8gYmUgdXNlZCBhcyBkZWZhdWx0IExUX1NZU19MSUJSQVJZX1BBVEggdmFsdWUgaW4gZ2VuZXJhdGVkIGxpYnRvb2wKK2NvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGg9JExUX1NZU19MSUJSQVJZX1BBVEgKKworX0xUX0RFQ0woW10sIFt2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGlua10sIFsxXSwKKyAgICBbVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisgICAgcmVzdG9yZWQgYXQgbGluayB0aW1lXSkKK19MVF9ERUNMKFtdLCBbbmVlZF9saWJfcHJlZml4XSwgWzBdLAorICAgIFtEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/XSkKK19MVF9ERUNMKFtdLCBbbmVlZF92ZXJzaW9uXSwgWzBdLCBbRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz9dKQorX0xUX0RFQ0woW10sIFt2ZXJzaW9uX3R5cGVdLCBbMF0sIFtMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZV0pCitfTFRfREVDTChbXSwgW3J1bnBhdGhfdmFyXSwgWzBdLCAgW1NoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF92YXJdLCBbMF0sW1NoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGVdKQorX0xUX0RFQ0woW10sIFtzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGhdLCBbMF0sCisgICAgW0lzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD9dKQorX0xUX0RFQ0woW10sIFtsaWJuYW1lX3NwZWNdLCBbMV0sIFtGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeF0pCitfTFRfREVDTChbXSwgW2xpYnJhcnlfbmFtZXNfc3BlY10sIFsxXSwKKyAgICBbW0xpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisgICAgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRV1dKQorX0xUX0RFQ0woW10sIFtzb25hbWVfc3BlY10sIFsxXSwKKyAgICBbW1RoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lXV0pCitfTFRfREVDTChbXSwgW2luc3RhbGxfb3ZlcnJpZGVfbW9kZV0sIFsxXSwKKyAgICBbUGVybWlzc2lvbiBtb2RlIG92ZXJyaWRlIGZvciBpbnN0YWxsYXRpb24gb2Ygc2hhcmVkIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIGluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbcG9zdHVuaW5zdGFsbF9jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeV0pCitfTFRfREVDTChbXSwgW2ZpbmlzaF9ldmFsXSwgWzFdLAorICAgIFtbQXMgImZpbmlzaF9jbWRzIiwgZXhjZXB0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0CisgICAgbm90IHNob3duXV0pCitfTFRfREVDTChbXSwgW2hhcmRjb2RlX2ludG9fbGlic10sIFswXSwKKyAgICBbV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW3N5c19saWJfc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKyAgICBbQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY10sIFtjb25maWd1cmVfdGltZV9kbHNlYXJjaF9wYXRoXSwgWzJdLAorICAgIFtEZXRlY3RlZCBydW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllc10pCitfTFRfREVDTChbXSwgW2NvbmZpZ3VyZV90aW1lX2x0X3N5c19saWJyYXJ5X3BhdGhdLCBbMl0sCisgICAgW0V4cGxpY2l0IExUX1NZU19MSUJSQVJZX1BBVEggc2V0IGR1cmluZyAuL2NvbmZpZ3VyZSB0aW1lXSkKK10pIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSCisKKworIyBfTFRfUEFUSF9UT09MX1BSRUZJWChUT09MKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHRoYXQgY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQorQUNfREVGVU4oW19MVF9QQVRIX1RPT0xfUFJFRklYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9NQUdJQ19DTUQsCitbY2FzZSAkTUFHSUNfQ01EIGluCitbW1xcLypdIHwgID86W1xcL10qXSkKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JE1BR0lDX0NNRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZG5sICRhY19kdW1teSBmb3JjZXMgc3BsaXR0aW5nIG9uIGNvbnN0YW50IHVzZXItc3VwcGxpZWQgcGF0aHMuCitkbmwgUE9TSVguMiB3b3JkIHNwbGl0dGluZyBpcyBkb25lIG9ubHkgb24gdGhlIG91dHB1dCBvZiB3b3JkIGV4cGFuc2lvbnMsCitkbmwgbm90IGV2ZXJ5IHdvcmQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eSBob2xlLgorICBhY19kdW1teT0ibTRfaWYoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJDEiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kYWNfZGlyLyIkMSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitfTFRfRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRsdF9zYXZlX2lmcworICBNQUdJQ19DTUQ9JGx0X3NhdmVfTUFHSUNfQ01ECisgIDs7Citlc2FjXSkKK01BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKK2lmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJE1BR0lDX0NNRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCitfTFRfREVDTChbXSwgW01BR0lDX0NNRF0sIFswXSwKKwkgW1VzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgd2l0aCAiZmlsZSJdKWRubAorXSkjIF9MVF9QQVRIX1RPT0xfUFJFRklYCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtfTFRfUEFUSF9UT09MX1BSRUZJWF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLCBbXSkKKworCisjIF9MVF9QQVRIX01BR0lDCisjIC0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gdGhhdCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKK200X2RlZnVuKFtfTFRfUEFUSF9NQUdJQ10sCitbX0xUX1BBVEhfVE9PTF9QUkVGSVgoJHthY190b29sX3ByZWZpeH1maWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQoraWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgX0xUX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorXSkjIF9MVF9QQVRIX01BR0lDCisKKworIyBMVF9QQVRIX0xECisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gdGhlIEdOVSBvciBub24tR05VIGxpbmtlcgorQUNfREVGVU4oW0xUX1BBVEhfTERdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCisKK0FDX0FSR19XSVRIKFtnbnUtbGRdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCisJW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCisgICAgW3Rlc3Qgbm8gPSAiJHdpdGh2YWwiIHx8IHdpdGhfZ251X2xkPXllc10sCisgICAgW3dpdGhfZ251X2xkPW5vXSlkbmwKKworYWNfcHJvZz1sZAoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiwgd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1tcXC9dXSogfCA/OltbXFwvXV0qKQorICAgICAgcmVfZGlyZWx0PScvW1teL11dW1teL11dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSRhY19wcm9nCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBHTlUgbGRdKQorZWxzZQorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBub24tR05VIGxkXSkKK2ZpCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9MRCwKK1tpZiB0ZXN0IC16ICIkTEQiOyB0aGVuCisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9JGFjX2Rpci8kYWNfcHJvZworICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAorICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KKyAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgorICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCisgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKKwl0ZXN0IG5vICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCisJOzsKKyAgICAgICopCisJdGVzdCB5ZXMgIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGRvbmUKKyAgSUZTPSRsdF9zYXZlX2lmcworZWxzZQorICBsdF9jdl9wYXRoX0xEPSRMRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpXSkKK0xEPSRsdF9jdl9wYXRoX0xECitpZiB0ZXN0IC1uICIkTEQiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJExEKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK3Rlc3QgLXogIiRMRCIgJiYgQUNfTVNHX0VSUk9SKFtubyBhY2NlcHRhYmxlIGxkIGZvdW5kIGluIFwkUEFUSF0pCitfTFRfUEFUSF9MRF9HTlUKK0FDX1NVQlNUKFtMRF0pCisKK19MVF9UQUdERUNMKFtdLCBbTERdLCBbMV0sIFtUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzXSkKK10pIyBMVF9QQVRIX0xECisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitBVV9BTElBUyhbQUNfUFJPR19MRF0sIFtMVF9QQVRIX0xEXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xEXSwgW10pCisKKworIyBfTFRfUEFUSF9MRF9HTlUKKyMtIC0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX1BBVEhfTERfR05VXSwKK1tBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCitdKSMgX0xUX1BBVEhfTERfR05VCisKKworIyBfTFRfQ01EX1JFTE9BRAorIyAtLS0tLS0tLS0tLS0tLQorIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKKyMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgorbTRfZGVmdW4oW19MVF9DTURfUkVMT0FEXSwKK1tBQ19DQUNIRV9DSEVDSyhbZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlc10sCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnLAorICBbbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJ10pCityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKyAgICBmaQorICAgIDs7CisgIGRhcndpbiopCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR3bC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKK19MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2ZsYWddLCBbMV0sIFtIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzXSlkbmwKK19MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2NtZHNdLCBbMl0pZG5sCitdKSMgX0xUX0NNRF9SRUxPQUQKKworCisjIF9MVF9QQVRIX0RECisjIC0tLS0tLS0tLS0tCisjIGZpbmQgYSB3b3JraW5nIGRkCittNF9kZWZ1bihbX0xUX1BBVEhfRERdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgYSB3b3JraW5nIGRkXSwgW2FjX2N2X3BhdGhfbHRfRERdLAorW3ByaW50ZiAwMTIzNDU2Nzg5YWJjZGVmMDEyMzQ1Njc4OWFiY2RlZiA+Y29uZnRlc3QuaQorY2F0IGNvbmZ0ZXN0LmkgY29uZnRlc3QuaSA+Y29uZnRlc3QyLmkKKzogJHtsdF9ERDo9JEREfQorQUNfUEFUSF9QUk9HU19GRUFUVVJFX0NIRUNLKFtsdF9ERF0sIFtkZF0sCitbaWYgIiRhY19wYXRoX2x0X0REIiBicz0zMiBjb3VudD0xIDxjb25mdGVzdDIuaSA+Y29uZnRlc3Qub3V0IDI+L2Rldi9udWxsOyB0aGVuCisgIGNtcCAtcyBjb25mdGVzdC5pIGNvbmZ0ZXN0Lm91dCBcCisgICYmIGFjX2N2X3BhdGhfbHRfREQ9IiRhY19wYXRoX2x0X0REIiBhY19wYXRoX2x0X0REX2ZvdW5kPToKK2ZpXSkKK3JtIC1mIGNvbmZ0ZXN0LmkgY29uZnRlc3QyLmkgY29uZnRlc3Qub3V0XSkKK10pIyBfTFRfUEFUSF9ERAorCisKKyMgX0xUX0NNRF9UUlVOQ0FURQorIyAtLS0tLS0tLS0tLS0tLS0tCisjIGZpbmQgY29tbWFuZCB0byB0cnVuY2F0ZSBhIGJpbmFyeSBwaXBlCittNF9kZWZ1bihbX0xUX0NNRF9UUlVOQ0FURV0sCitbbTRfcmVxdWlyZShbX0xUX1BBVEhfRERdKQorQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byB0cnVuY2F0ZSBiaW5hcnkgcGlwZXNdLCBbbHRfY3ZfdHJ1bmNhdGVfYmluXSwKK1twcmludGYgMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlhYmNkZWYgPmNvbmZ0ZXN0LmkKK2NhdCBjb25mdGVzdC5pIGNvbmZ0ZXN0LmkgPmNvbmZ0ZXN0Mi5pCitsdF9jdl90cnVuY2F0ZV9iaW49CitpZiAiJGFjX2N2X3BhdGhfbHRfREQiIGJzPTMyIGNvdW50PTEgPGNvbmZ0ZXN0Mi5pID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGw7IHRoZW4KKyAgY21wIC1zIGNvbmZ0ZXN0LmkgY29uZnRlc3Qub3V0IFwKKyAgJiYgbHRfY3ZfdHJ1bmNhdGVfYmluPSIkYWNfY3ZfcGF0aF9sdF9ERCBicz00MDk2IGNvdW50PTEiCitmaQorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdDIuaSBjb25mdGVzdC5vdXQKK3Rlc3QgLXogIiRsdF9jdl90cnVuY2F0ZV9iaW4iICYmIGx0X2N2X3RydW5jYXRlX2Jpbj0iJFNFRCAtZSA0cSJdKQorX0xUX0RFQ0woW2x0X3RydW5jYXRlX2Jpbl0sIFtsdF9jdl90cnVuY2F0ZV9iaW5dLCBbMV0sCisgIFtDb21tYW5kIHRvIHRydW5jYXRlIGEgYmluYXJ5IHBpcGVdKQorXSkjIF9MVF9DTURfVFJVTkNBVEUKKworCisjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzXSwKK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kLAorW2x0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKKyMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCisjICd1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKyMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KKyMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKyMgdGhhdCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgJ2ZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyICdwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4W1s0LTldXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpW1s0NV1dKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIGVsc2UKKyAgICAjIEtlZXAgdGhpcyBwYXR0ZXJuIGluIHN5bmMgd2l0aCB0aGUgb25lIGluIGZ1bmNfd2luMzJfbGliaWQuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgKHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/fHBlLWFybS13aW5jZXxwZS14ODYtNjQpJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgZmkKKyAgOzsKKworY2VnY2MqKQorICAjIHVzZSB0aGUgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLiBTZWUgbWluZ3cqLgorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZS1hcm0tLipsaXR0bGUoLiphcmNoaXRlY3R1cmU6IGFybSk/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbWzMtOV1dODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2hhaWt1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaHB1eDEwLjIwKiB8IGhwdXgxMSopCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18RUxGLVtbMC05XV1bWzAtOV1dKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgW2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRlsgLV1bMC05XVswLTldKSgtYml0KT8oIFtMTV1TQik/IHNoYXJlZCBvYmplY3QoIGZpbGUpP1ssIC1dKiBQQS1SSVNDIFswLTldXC5bMC05XSddCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxQQS1SSVNDW1swLTldXVwuW1swLTldXSkgc2hhcmVkIGxpYnJhcnknCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvbGliYy5zbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworaW50ZXJpeFtbMy05XV0qKQorICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc298XC5hKSQnCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJExEIGluCisgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CisgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICBlc2FjCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK25ldGJzZCopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKiB8IGJpdHJpZyopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK29zMiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCitdKQorCitmaWxlX21hZ2ljX2dsb2I9Cit3YW50X25vY2FzZWdsb2I9bm8KK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgbWluZ3cqIHwgcHczMiopCisgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworICAgIGVsc2UKKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1tcMV1dXC9bW1wxXV1cL2c7L2ciYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworZmkKKworZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKK3Rlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorCitfTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAorICAgIFtNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0c10pCitfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfY21kXSwgWzFdLAorICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19nbG9iXSwgWzFdLAorICAgIFtIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCitfTFRfREVDTChbXSwgW3dhbnRfbm9jYXNlZ2xvYl0sIFsxXSwKKyAgICBbRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKK10pIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECisKKworIyBMVF9QQVRIX05NCisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gYSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIKK0FDX0RFRlVOKFtMVF9QQVRIX05NXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSldLCBsdF9jdl9wYXRoX05NLAorW2lmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09JE5NCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSR7YWNfdG9vbF9wcmVmaXh9bm0KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IiAmJiB0ZXN0ICIkYnVpbGQiID0gIiRob3N0IjsgdGhlbgorICAgIGx0X25tX3RvX2NoZWNrPSIkbHRfbm1fdG9fY2hlY2sgbm0iCisgIGZpCisgIGZvciBsdF90bXBfbm0gaW4gJGx0X25tX3RvX2NoZWNrOyBkbworICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSRhY19kaXIvJGx0X3RtcF9ubQorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlICdzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJIyBNU1lTIGNvbnZlcnRzIC9kZXYvbnVsbCB0byBOVUwsIE1pbkdXIG5tIHRyZWF0cyBOVUwgYXMgZW1wdHkKKwljYXNlICRidWlsZF9vcyBpbgorCW1pbmd3KikgbHRfYmFkX2ZpbGU9Y29uZnRlc3Qubm0vbm9maWxlIDs7CisJKikgbHRfYmFkX2ZpbGU9L2Rldi9udWxsIDs7CisJZXNhYworCWNhc2UgYCIkdG1wX25tIiAtQiAkbHRfYmFkX2ZpbGUgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSokbHRfYmFkX2ZpbGUqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKKwkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCisJICBicmVhayAyCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhayAyCisJICAgIDs7CisJICAqKQorCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9JGx0X3NhdmVfaWZzCisgIGRvbmUKKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CitmaV0pCitpZiB0ZXN0IG5vICE9ICIkbHRfY3ZfcGF0aF9OTSI7IHRoZW4KKyAgTk09JGx0X2N2X3BhdGhfTk0KK2Vsc2UKKyAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCisgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbiA6CisgICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGVsc2UKKyAgICBBQ19DSEVDS19UT09MUyhEVU1QQklOLCBbZHVtcGJpbiAibGluayAtZHVtcCJdLCA6KQorICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC1oZWFkZXJzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisgICAgKkNPRkYqKQorICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMiCisgICAgICA7OworICAgICopCisgICAgICBEVU1QQklOPToKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBBQ19TVUJTVChbRFVNUEJJTl0pCisgIGlmIHRlc3QgOiAhPSAiJERVTVBCSU4iOyB0aGVuCisgICAgTk09JERVTVBCSU4KKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCitBQ19TVUJTVChbTk1dKQorX0xUX0RFQ0woW10sIFtOTV0sIFsxXSwgW0EgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyXSlkbmwKKworQUNfQ0FDSEVfQ0hFQ0soW3RoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2VdLCBbbHRfY3Zfbm1faW50ZXJmYWNlXSwKKyAgW2x0X2N2X25tX2ludGVyZmFjZT0iQlNEIG5tIgorICBlY2hvICJpbnQgc29tZV92YXJpYWJsZSA9IDA7IiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRhY19jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJE5NIFxcXCJjb25mdGVzdC4kYWNfb2JqZXh0XFxcIlwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAoZXZhbCAiJE5NIFwiY29uZnRlc3QuJGFjX29iamV4dFwiIiAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dCkKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgY2F0IGNvbmZ0ZXN0Lm91dCA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGlmICRHUkVQICdFeHRlcm5hbC4qc29tZV92YXJpYWJsZScgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3Zfbm1faW50ZXJmYWNlPSJNUyBkdW1wYmluIgorICBmaQorICBybSAtZiBjb25mdGVzdCpdKQorXSkjIExUX1BBVEhfTk0KKworIyBPbGQgbmFtZXM6CitBVV9BTElBUyhbQU1fUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKK0FVX0FMSUFTKFtBQ19QUk9HX05NXSwgW0xUX1BBVEhfTk1dKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9QUk9HX05NXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX1BST0dfTk1dLCBbXSkKKworIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gZGV0ZXJtaW5lIHRoZSBuYW1lIG9mIHRoZSBzaGFyZWQgbGlicmFyeQorIyBhc3NvY2lhdGVkIHdpdGggYSBzcGVjaWZpYyBsaW5rIGxpYnJhcnkuCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUJdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSkKK200X3JlcXVpcmUoW19MVF9ERUNMX09CSkRVTVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRExMVE9PTF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIGFzc29jaWF0ZSBydW50aW1lIGFuZCBsaW5rIGxpYnJhcmllc10sCitsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCwKK1tsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKworY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoOworICAjIGRlY2lkZSB3aGljaCBvbmUgdG8gdXNlIGJhc2VkIG9uIGNhcGFiaWxpdGllcyBvZiAkRExMVE9PTAorICBjYXNlIGAkRExMVE9PTCAtLWhlbHAgMj4mMWAgaW4KKyAgKi0taWRlbnRpZnktc3RyaWN0KikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIKKyAgICA7OworICAqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjaworICAgIDs7CisgIGVzYWMKKyAgOzsKKyopCisgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworICA7OworZXNhYworXSkKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAordGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworCitfTFRfREVDTChbXSwgW3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kXSwgWzFdLAorICAgIFtDb21tYW5kIHRvIGFzc29jaWF0ZSBzaGFyZWQgYW5kIGxpbmsgbGlicmFyaWVzXSkKK10pIyBfTFRfQ0hFQ0tfU0hBUkVETElCX0ZST01fTElOS0xJQgorCisKKyMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvY2F0ZSB0aGUgbWFuaWZlc3QgdG9vbAorbTRfZGVmdW4oW19MVF9QQVRIX01BTklGRVNUX1RPT0xdLAorW0FDX0NIRUNLX1RPT0woTUFOSUZFU1RfVE9PTCwgbXQsIDopCit0ZXN0IC16ICIkTUFOSUZFU1RfVE9PTCIgJiYgTUFOSUZFU1RfVE9PTD1tdAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbF0sIFtsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2xdLAorICBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICRNQU5JRkVTVF9UT09MICctPycgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgIGlmICRHUkVQICdNYW5pZmVzdCBUb29sJyBjb25mdGVzdC5vdXQgPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2w9eWVzCisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0Kl0pCitpZiB0ZXN0IHllcyAhPSAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCI7IHRoZW4KKyAgTUFOSUZFU1RfVE9PTD06CitmaQorX0xUX0RFQ0woW10sIFtNQU5JRkVTVF9UT09MXSwgWzFdLCBbTWFuaWZlc3QgdG9vbF0pZG5sCitdKSMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAorCisKKyMgX0xUX0RMTF9ERUZfUChbRklMRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgV2luZG93cyBETEwgJy5kZWYnIGZpbGUuCisjIEtlZXAgaW4gc3luYyB3aXRoIGZ1bmNfZGxsX2RlZl9wIGluIHRoZSBsaWJ0b29sIHNjcmlwdAorQUNfREVGVU4oW19MVF9ETExfREVGX1BdLAorW2RubAorICB0ZXN0IERFRiA9ICJgJFNFRCAtbiBkbmwKKyAgICAtZSAnXCcncy9eW1sJIF1dKi8vJ1wnJyBkbmwgU3RyaXAgbGVhZGluZyB3aGl0ZXNwYWNlCisgICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnIGRubCAgICAgIERlbGV0ZSBlbXB0eSBsaW5lcyBhbmQgY29tbWVudHMKKyAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFtbCSBdXS4qXCkqJC9ERUYvcCdcJycgZG5sCisgICAgLWUgcSBkbmwgICAgICAgICAgICAgICAgICAgICAgICAgIE9ubHkgY29uc2lkZXIgdGhlIGZpcnN0ICJyZWFsIiBsaW5lCisgICAgJDFgIiBkbmwKK10pIyBfTFRfRExMX0RFRl9QCisKKworIyBMVF9MSUJfTQorIyAtLS0tLS0tLQorIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5CitBQ19ERUZVTihbTFRfTElCX01dLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0xJQk09CitjYXNlICRob3N0IGluCisqLSotYmVvcyogfCAqLSotY2VnY2MqIHwgKi0qLWN5Z3dpbiogfCAqLSotaGFpa3UqIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCisgICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAorICA7OworKi1uY3Itc3lzdjQuMyopCisgIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09LWxtdykKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKKyAgOzsKKyopCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09LWxtKQorICA7OworZXNhYworQUNfU1VCU1QoW0xJQk1dKQorXSkjIExUX0xJQl9NCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfQ0hFQ0tfTElCTV0sIFtMVF9MSUJfTV0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLCBbXSkKKworCisjIF9MVF9DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9OT19SVFRJXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKKworX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBudmNjKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nIDs7CisgIGVzYWMKKworICBfTFRfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCisgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCisgICAgWy1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLCBbXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKK2ZpCitfTFRfVEFHREVDTChbbm9fYnVpbHRpbl9mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zXSkKK10pIyBfTFRfQ09NUElMRVJfTk9fUlRUSQorCisKKyMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0FXS10pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgorQUNfTVNHX0NIRUNLSU5HKFtjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0XSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sCitbCisjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KKyMgW1RoZXkgY29tZSBmcm9tIFVsdHJpeC4gIFdoYXQgY291bGQgYmUgb2xkZXIgdGhhbiBVbHRyaXg/ISEgOyldCisKKyMgQ2hhcmFjdGVyIGNsYXNzIGRlc2NyaWJpbmcgTk0gZ2xvYmFsIHN5bWJvbCBjb2Rlcy4KK3N5bWNvZGU9J1tbQkNERUdSU1RdXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW1tfQS1aYS16XV1bW19BLVphLXowLTldXSpcKScKKworIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeCopCisgIHN5bWNvZGU9J1tbQkNEVF1dJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJworICA7OworaHB1eCopCisgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisgICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworICA7Oworb3NmKikKKyAgc3ltY29kZT0nW1tCQ0RFR1FSU1RdXScKKyAgOzsKK3NvbGFyaXMqKQorICBzeW1jb2RlPSdbW0JEUlRdXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjQuMnV3MiopCisgIHN5bWNvZGU9J1tbRFRdXScKKyAgOzsKK3N5c3Y1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgIHN5bWNvZGU9J1tbQUJEVF1dJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tbREZOU1RVXV0nCisgIDs7Citlc2FjCisKKyMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgorY2FzZSBgJE5NIC1WIDI+JjFgIGluCisqR05VKiB8ICond2l0aCBCRkQnKikKKyAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7Citlc2FjCisKK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICMgR2V0cyBsaXN0IG9mIGRhdGEgc3ltYm9scyB0byBpbXBvcnQuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0ic2VkIC1uIC1lICdzL15JIC4qIFwoLipcKSQvXDEvcCciCisgICMgQWRqdXN0IHRoZSBiZWxvdyBnbG9iYWwgc3ltYm9sIHRyYW5zZm9ybXMgdG8gZml4dXAgaW1wb3J0ZWQgdmFyaWFibGVzLgorICBsdF9jZGVjbF9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC9leHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpIGNoYXIgXDE7L3AnIgorICBsdF9jX25hbWVfaG9vaz0iIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciCisgIGx0X2NfbmFtZV9saWJfaG9vaz0iXAorICAtZSAncy9eSSAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnXAorICAtZSAncy9eSSAuKiBcKC4qXCkkLyAge1wibGliXDFcIiwgKHZvaWQgKikgMH0sL3AnIgorZWxzZQorICAjIERpc2FibGUgaG9va3MgYnkgZGVmYXVsdC4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PQorICBsdF9jZGVjbF9ob29rPQorICBsdF9jX25hbWVfaG9vaz0KKyAgbHRfY19uYW1lX2xpYl9ob29rPQorZmkKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKyMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAorIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiJcCiskbHRfY2RlY2xfaG9va1wKKyIgLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4iXAorJGx0X2NfbmFtZV9ob29rXAorIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIHdpdGggbGliIHByZWZpeCBhbmQKKyMgc3ltYm9sIGFkZHJlc3MuCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4iXAorJGx0X2NfbmFtZV9saWJfaG9va1wKKyIgLWUgJ3MvXjogXCguKlwpIC4qJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorICA7OworZXNhYworCisjIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorCisgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KKyAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbiwKKyAgICAjIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUgYW5kIEkgZm9yIGFueSBpbXBvcnRlZCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgWyciXAorIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCisiICAgICAvXkNPRkYgU1lNQk9MIFRBQkxFL3tmb3IoaSBpbiBoaWRlKSBkZWxldGUgaGlkZVtpXX07IlwKKyIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAorIiAgICAgL14gKlN5bWJvbCBuYW1lICo6IC97c3BsaXQoXCQgMCxzbixcIjpcIik7IHNpPXN1YnN0cihzblsyXSwyKX07IlwKKyIgICAgIC9eICpUeXBlICo6IGNvZGUve3ByaW50IFwiVFwiLHNpLHN1YnN0cihzaSxsZW5ndGgocHJmeCkpfTsiXAorIiAgICAgL14gKlR5cGUgKjogZGF0YS97cHJpbnQgXCJJXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCisiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAorIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAorIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCisiICAgICB7Zj1cIkRcIn07IFwkIDB+L1woXCkuKlx8L3tmPVwiVFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsYSwvXHx8XHIvKTsgc3BsaXQoYVsyXSxzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBmLHNbMV0sc1sxXTsgbmV4dH07IlwKKyIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgZix0WzFdLHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKyIgICAgICcgcHJmeD1eJGFjX3N5bXByZnhdIgorICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbCSBdXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbCSBdXVtbCSBdXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgZmkKKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgorCisgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgorICBwaXBlX3dvcmtzPW5vCisKKyAgcm0gLWYgY29uZnRlc3QqCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitjaGFyIG5tX3Rlc3RfdmFyOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCk7Cit2b2lkIG5tX3Rlc3RfZnVuYyh2b2lkKXt9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgoraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KK19MVF9FT0YKKworICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgQUNfVFJZX0VWQUwoTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKyAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCisJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisgICAgICBlbHNlCisJcm0gLWYgIiRubGlzdCJUCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9XSU4zMl9XQ0UKKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY2FuJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisjZWxpZiBkZWZpbmVkIF9fb3NmX18KKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUIGNvbnN0CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitfTFRfRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JworCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworTFRAJnRAX0RMU1lNX0NPTlNUIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgICAgICAgKmFkZHJlc3M7Cit9CitsdF9fUFJPR1JBTV9fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW1tdXSA9Cit7CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorX0xUX0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworCSAgTElCUz1jb25mdHN0bS4kYWNfb2JqZXh0CisJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgorCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUworCSAgQ0ZMQUdTPSRsdF9nbG9ic3ltX3NhdmVfQ0ZMQUdTCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorCWZpCisgICAgICBlbHNlCisJZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKKworICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCisgIGlmIHRlc3QgeWVzID0gIiRwaXBlX3dvcmtzIjsgdGhlbgorICAgIGJyZWFrCisgIGVsc2UKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQorICBmaQorZG9uZQorXSkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVChmYWlsZWQpCitlbHNlCisgIEFDX01TR19SRVNVTFQob2spCitmaQorCisjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW1tAXV1GSUxFJyA+L2Rldi9udWxsOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZmkKKworX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfcGlwZV0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwgWzFdLAorICAgIFtUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnRdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGludG8gYSBsaXN0IG9mIHN5bWJvbHMgdG8gbWFudWFsbHkgcmVsb2NhdGVdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAorICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCitfTFRfREVDTChbbm1faW50ZXJmYWNlXSwgW2x0X2N2X25tX2ludGVyZmFjZV0sIFsxXSwKKyAgICBbVGhlIG5hbWUgbGlzdGVyIGludGVyZmFjZV0pCitfTFRfREVDTChbXSwgW25tX2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yICROTV0pCitdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKKworCisjIF9MVF9DT01QSUxFUl9QSUMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfUElDXSwKK1ttNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorCittNF9pZihbJDFdLCBbQ1hYXSwgWworICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSAnLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlICctbTY4MDQwJy4KKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvczIqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHdsLXN0YXRpYycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisgICAgKmRqZ3BwKikKKyAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICAgOzsKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisgICAgICA7OworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKnFueCogfCAqbnRvKikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbWzQtOV1dKikKKwkjIEFsbCBBSVggY29kZSBpcyBQSUMuCisJaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworCWZpCisJOzsKKyAgICAgIGNob3J1cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwljeGNoNjgqKQorCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKwltNF9pZihbJDFdLCBbR0NKXSwgW10sCisJICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtYSAke3dsfWFyY2hpdmUnCisJICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgIGZpCisJICAgIDs7CisJICBhQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtYSAke3dsfWFyY2hpdmUnCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgIGhwcGEqNjQqfGlhNjQqKQorCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGludGVyaXgqKQorCSMgVGhpcyBpcyBjODksIHdoaWNoIGlzIE1TIFZpc3VhbCBDKysgKG5vIHNoYXJlZCBsaWJzKQorCSMgQW55b25lIHdhbnRzIHRvIGRvIGEgcG9ydD8KKwk7OworICAgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgIyBDQyBwaWMgZmxhZyAtS1BJQyBpcyB0aGUgZGVmYXVsdC4KKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICA7OworCSAgZWNwYyogKQorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCwgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgaWNwYyogKQorCSAgICAjIEludGVsIEMrKywgdXNlZCB0byBiZSBpbmNvbXBhdGlibGUgd2l0aCBHQ0MuCisJICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgICA7OworCSAgcGdDQyogfCBwZ2NwcCopCisJICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICB4bGMqIHwgeGxDKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKQorCSAgICAjIElCTSBYTCA4LjAsIDkuMCBvbiBQUEMgYW5kIEJsdWVHZW5lCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1xcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKikKKwk7OworICAgICAgKnFueCogfCAqbnRvKikKKyAgICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICAgIDs7CisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgOzsKKwkgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgRGlnaXRhbC9Db21wYXEgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHBzb3MqKQorCTs7CisgICAgICBzb2xhcmlzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICAgIDs7CisJICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3Vub3M0KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB0YW5kZW0qKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB2eHdvcmtzKikKKwk7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCisJOzsKKyAgICBlc2FjCisgIGZpCitdLAorWworICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSAnLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlICctbTY4MDQwJy4KKyAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQorICAgICAgIyAoLS1kaXNhYmxlLWF1dG8taW1wb3J0KSBsaWJyYXJpZXMKKyAgICAgIG00X2lmKFskMV0sIFtHQ0pdLCBbXSwKKwlbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9zMiopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtc3RhdGljJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBudmNjKikgIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctWGxpbmtlciAnCisgICAgICBpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ii1YY29tcGlsZXIgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSIKKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIG5hZ2ZvciopCisgICAgICAgICMgTkFHIEZvcnRyYW4gY29tcGlsZXIKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwtV2wsLCcKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3MyKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR3bC1zdGF0aWMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtYSAke3dsfWFyY2hpdmUnCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQsIHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgIGVjYyopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy0tc2hhcmVkJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLS1zdGF0aWMnCisJOzsKKyAgICAgIG5hZ2ZvciopCisJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsLVdsLCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJOzsKKyAgICAgIHRjYyopCisJIyBGYWJyaWNlIEJlbGxhcmQgZXQgYWwncyBUaW55IEMgQ29tcGlsZXIKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSwgMTEuMSBvbiBQUEMgYW5kIEJsdWVHZW5lCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwk7OworICAgICAgKikKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDZXJlc1wgRm9ydHJhbiogfCAqU3VuKkZvcnRyYW4qXCBbWzEtN11dLiogfCAqU3VuKkZvcnRyYW4qXCA4LltbMC0zXV0qKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJworCSAgOzsKKwkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCisJICA7OworCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICA7OworICAgICAgICAqSW50ZWwqXCBbW0NGXV0qQ29tcGlsZXIqKQorCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCSAgOzsKKwkqUG9ydGxhbmRcIEdyb3VwKikKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICA7OworCWVzYWMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICByZG9zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgdW5pY29zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICA7OworICAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pIgorICAgIDs7Citlc2FjCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQ10sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSldLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgd29ya3NdLAorICAgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzLCAkMSldLAorICAgIFskX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpQCZ0QG00X2lmKFskMV0sW10sWyAtRFBJQ10sW200X2lmKFskMV0sW0NYWF0sWyAtRFBJQ10sW10pXSldLCBbXSwKKyAgICBbY2FzZSAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSIgOzsKKyAgICAgZXNhY10sCisgICAgW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ub10pCitmaQorX0xUX1RBR0RFQ0woW3BpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfcGljXSwgWzFdLAorCVtBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHNdKQorCitfTFRfVEFHREVDTChbd2xdLCBbbHRfcHJvZ19jb21waWxlcl93bF0sIFsxXSwKKwlbSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlcl0pCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpXCIKK19MVF9MSU5LRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrc10sCisgIF9MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MsICQxKSwKKyAgJGx0X3RtcF9zdGF0aWNfZmxhZywKKyAgW10sCisgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9XSkKK19MVF9UQUdERUNMKFtsaW5rX3N0YXRpY19mbGFnXSwgW2x0X3Byb2dfY29tcGlsZXJfc3RhdGljXSwgWzFdLAorCVtDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nXSkKK10pIyBfTFRfQ09NUElMRVJfUElDCisKKworIyBfTFRfTElOS0VSX1NITElCUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGlmIHRoZSBsaW5rZXIgc3VwcG9ydHMgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK200X2RlZnVuKFtfTFRfTElOS0VSX1NITElCU10sCitbQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCitBQ19SRVFVSVJFKFtMVF9QQVRIX05NXSlkbmwKK200X3JlcXVpcmUoW19MVF9QQVRIX01BTklGRVNUX1RPT0xdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKK200X2lmKFskMV0sIFtDWFhdLCBbCisgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQorICBjYXNlICRob3N0X29zIGluCisgIGFpeFtbNC05XV0qKQorICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gR05VIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgdG8gQUlYIG5tLgorICAgICMgV2l0aG91dCB0aGUgIi1sIiBvcHRpb24sIG9yIHdpdGggdGhlICItQiIgb3B0aW9uLCBBSVggbm0gdHJlYXRzCisgICAgIyB3ZWFrIGRlZmluZWQgc3ltYm9scyBsaWtlIG90aGVyIGdsb2JhbCBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMKKyAgICAjIEdOVSBubSBtYXJrcyB0aGVtIGFzICJXIi4KKyAgICAjIFdoaWxlIHRoZSAnd2Vhaycga2V5d29yZCBpcyBpZ25vcmVkIGluIHRoZSBFeHBvcnQgRmlsZSwgd2UgbmVlZAorICAgICMgaXQgaW4gdGhlIEltcG9ydCBGaWxlIGZvciB0aGUgJ2FpeC1zb25hbWUnIGZlYXR1cmUsIHNvIHdlIGhhdmUKKyAgICAjIHRvIHJlcGxhY2UgdGhlICItQiIgb3B0aW9uIHdpdGggIi1QIiBmb3IgQUlYIG5tLgorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgaWYgKFwkIDIgPT0gIlciKSB7IHByaW50IFwkIDMgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAzIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9J2BmdW5jX2VjaG9fYWxsICROTSB8ICRTRUQgLWUgJ1wnJ3MvQlwoW1teQl1dKlwpJC9QXDEvJ1wnJ2AgLVBDcGdsICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpIHx8IChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSAmJiAoW3N1YnN0cl0oXCQgMSwxLDEpICE9ICIuIikpIHsgaWYgKChcJCAyID09ICJXIikgfHwgKFwkIDIgPT0gIlYiKSB8fCAoXCQgMiA9PSAiWiIpKSB7IHByaW50IFwkIDEgIiB3ZWFrIiB9IGVsc2UgeyBwcmludCBcJCAxIH0gfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZmkKKyAgICA7OworICBwdzMyKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0kbHRkbGxfY21kcworICAgIDs7CisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBjbCopCisgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPSdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUnxfSU1QT1JUX0RFU0NSSVBUT1JfLionCisgICAgICA7OworICAgICopCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgIDs7CisgIGVzYWMKK10sIFsKKyAgcnVucGF0aF92YXI9CisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKyAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPW5vCisgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KKyAgX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKKyAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKKyAgX0xUX1RBR1ZBUihpbmNsdWRlX2V4cHN5bXMsICQxKT0KKyAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgJyAoJyBhbmQgJykkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogJ2F8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyAnYScgYW5kICdiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgJ2QnLgorICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgICMgRXhjbHVkZSBzaGFyZWQgbGlicmFyeSBpbml0aWFsaXphdGlvbi9maW5hbGl6YXRpb24gc3ltYm9scy4KK2RubCBOb3RlIGFsc28gYWRqdXN0IGV4Y2x1ZGVfZXhwc3ltcyBmb3IgQysrIGFib3ZlLgorICBleHRyYWN0X2V4cHN5bXNfY21kcz0KKworICBjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCogfCBiaXRyaWcqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisKKyAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCisgICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgorICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubworICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKwkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKKwkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCisJIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKKwkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgorCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgorCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bWzItOV1dKikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCBbWzMtOV1dKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0IHllcyA9ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHdsJworCisgICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KKyAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCisgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KKyAgICBjYXNlIGAkTEQgLXYgfCAkU0VEIC1lICdzLyhbXildXCspXHNcKy8vJyAyPiYxYCBpbgorICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCisgICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgorICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgorICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKKyAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4W1szLTldXSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjE5LCBpcyByZXBvcnRlZAorKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCisqKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKKyoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIGluc3RhbGwgYmludXRpbHMKKyoqKiAyLjIwIG9yIGFib3ZlLCBvciBtb2RpZnkgeW91ciBQQVRIIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZC4KKyoqKiBZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gcmVzdGFydCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgorCitfTFRfRU9GCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dW1sgXV0vcy8uKltbIF1dXChbW14gXV0qXCkvXDEgREFUQS87cy9eLipbWyBdXV9fbm1fX1woW1teIF1dKlwpW1sgXV1bW14gXV0qL1wxIERBVEEvOy9eSVtbIF1dL2Q7L15bW0FJVFddXVtbIF1dL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJ10KKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlLCB1c2UgaXQgYXMKKwkjIGlzOyBvdGhlcndpc2UsIHByZXBlbmQgRVhQT1JUUy4uLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgorICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgIGZpfgorICAgICAgICAkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBoYWlrdSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBzaHJleHRfY21kcz0uZGxsCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCXByZWZpeF9jbWRzPSIkU0VEIn4KKwlpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KKwkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgMWQiOworCWZpfgorCXByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgorCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkcHJlZml4X2NtZHMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworICAgICAgOzsKKworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCBsaW51eC1kaWV0bGliYyA9ICIkaG9zdF9vcyI7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCBubyA9ICIkdG1wX2RpZXQiCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJworCSAgOzsKKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7CisJZWNjKixpYTY0KiB8IGljYyosaWE2NCopCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworICAgICAgICBuYWdmb3IqKSAgICAgICAgICAgICAgICAgICAgICAgICMgTkFHRk9SIDUuMworICAgICAgICAgIHRtcF9zaGFyZWRmbGFnPSctV2wsLXNoYXJlZCcgOzsKKwl4bFtbY0NdXSogfCBiZ3hsW1tjQ11dKiB8IG1waXhsW1tjQ11dKikgIyBJQk0gWEwgQyA4LjAgb24gUFBDIChkZWFsIHdpdGggeGxmIGJlbG93KQorCSAgdG1wX3NoYXJlZGZsYWc9Jy1xbWtzaHJvYmonCisJICB0bXBfYWRkZmxhZz0gOzsKKwludmNjKikJIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCisJICA7OworCWVzYWMKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJZXNhYworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisgICAgICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXRjYyopCisJICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctcmR5bmFtaWMnCisJICA7OworCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisJICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgZmkKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIG5ldGJzZCopCisgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisJd2xhcmM9CisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBmaQorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgaWYgJExEIC12IDI+JjEgfCAkR1JFUCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQorKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjFbWzAtNV1dLiopCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2Fubm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisJICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKwkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgd2xhcmM9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3Qgbm8gPSAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiOyB0aGVuCisgICAgICBydW5wYXRoX3Zhcj0KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICBmaQorICBlbHNlCisgICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgzKikKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFpeFtbNC05XV0qKQorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0KKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEdOVSBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHRvIEFJWCBubS4KKwkjIFdpdGhvdXQgdGhlICItbCIgb3B0aW9uLCBvciB3aXRoIHRoZSAiLUIiIG9wdGlvbiwgQUlYIG5tIHRyZWF0cworCSMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwgZGVmaW5lZCBzeW1ib2xzLCB3aGVyZWFzCisJIyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisJIyBXaGlsZSB0aGUgJ3dlYWsnIGtleXdvcmQgaXMgaWdub3JlZCBpbiB0aGUgRXhwb3J0IEZpbGUsIHdlIG5lZWQKKwkjIGl0IGluIHRoZSBJbXBvcnQgRmlsZSBmb3IgdGhlICdhaXgtc29uYW1lJyBmZWF0dXJlLCBzbyB3ZSBoYXZlCisJIyB0byByZXBsYWNlIHRoZSAiLUIiIG9wdGlvbiB3aXRoICItUCIgZm9yIEFJWCBubS4KKwlpZiAkTk0gLVYgMj4mMSB8ICRHUkVQICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKFtzdWJzdHJdKFwkIDMsMSwxKSAhPSAiLiIpKSB7IGlmIChcJCAyID09ICJXIikgeyBwcmludCBcJCAzICIgd2VhayIgfSBlbHNlIHsgcHJpbnQgXCQgMyB9IH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWVsc2UKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSdgZnVuY19lY2hvX2FsbCAkTk0gfCAkU0VEIC1lICdcJydzL0JcKFtbXkJdXSpcKSQvUFwxLydcJydgIC1QQ3BnbCAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpIHx8IChcJCAyID09ICJWIikgfHwgKFwkIDIgPT0gIloiKSkgJiYgKFtzdWJzdHJdKFwkIDEsMSwxKSAhPSAiLiIpKSB7IGlmICgoXCQgMiA9PSAiVyIpIHx8IChcJCAyID09ICJWIikgfHwgKFwkIDIgPT0gIloiKSkgeyBwcmludCBcJCAxICIgd2VhayIgfSBlbHNlIHsgcHJpbnQgXCQgMSB9IH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworCWZpCisJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisJIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisJIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisJIyBoYXZlIHJ1bnRpbWUgbGlua2luZyBlbmFibGVkLCBhbmQgdXNlIGl0IGZvciBleGVjdXRhYmxlcy4KKwkjIEZvciBzaGFyZWQgbGlicmFyaWVzLCB3ZSBlbmFibGUvZGlzYWJsZSBydW50aW1lIGxpbmtpbmcKKwkjIGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgY3JlYXRlZCAtCisJIyB3aGVuICJ3aXRoX2FpeF9zb25hbWUsYWl4X3VzZV9ydW50aW1lbGlua2luZyIgaXM6CisJIyAiYWl4LG5vIiAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcworCSMgImFpeCx5ZXMiICBsaWIuc28gICAgICAgICAgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKwkjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCisJIyAiYm90aCxubyIgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMKKwkjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCisJIyAiYm90aCx5ZXMiIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworCSMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8KKwkjICJzdnI0LCoiICAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisJIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKKwkgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgaWYgKHRlc3QgeC1icnRsID0gIngkbGRfZmxhZyIgfHwgdGVzdCB4LVdsLC1icnRsID0gIngkbGRfZmxhZyIpOyB0aGVuCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIGJyZWFrCisJICBmaQorCSAgZG9uZQorCSAgaWYgdGVzdCBzdnI0LG5vID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICAgICMgV2l0aCBhaXgtc29uYW1lPXN2cjQsIHdlIGNyZWF0ZSB0aGUgbGliLnNvLlYgc2hhcmVkIGFyY2hpdmVzIG9ubHksCisJICAgICMgc28gd2UgZG9uJ3QgaGF2ZSBsaWIuYSBzaGFyZWQgbGlicyB0byBsaW5rIG91ciBleGVjdXRhYmxlcy4KKwkgICAgIyBXZSBoYXZlIHRvIGZvcmNlIHJ1bnRpbWUgbGlua2luZyBpbiB0aGlzIGNhc2UuCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtYnJ0bCIKKwkgIGZpCisJICA7OworCWVzYWMKKworCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgZmkKKworICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR3bC1mLCcKKyAgICAgIGNhc2UgJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgorICAgICAgYWl4LCopIDs7ICMgdHJhZGl0aW9uYWwsIG5vIGltcG9ydCBmaWxlCisgICAgICBzdnI0LCogfCAqLHllcykgIyB1c2UgaW1wb3J0IGZpbGUKKwkjIFRoZSBJbXBvcnQgRmlsZSBkZWZpbmVzIHdoYXQgdG8gaGFyZGNvZGUuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KKwk7OworICAgICAgZXNhYworCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAkQ0MgLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgOgorCSAgZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHdsLUcnCisJZmkKKwkjIE5lZWQgdG8gZW5zdXJlIHJ1bnRpbWUgbGlua2luZyBpcyBkaXNhYmxlZCBmb3IgdGhlIHRyYWRpdGlvbmFsCisJIyBzaGFyZWQgbGlicmFyeSwgb3IgdGhlIGxpbmtlciBtYXkgZXZlbnR1YWxseSBmaW5kIHNoYXJlZCBsaWJyYXJpZXMKKwkjIC93aXRoLyBJbXBvcnQgRmlsZSAtIHdlIGRvIG5vdCB3YW50IHRvIG1peCB0aGVtLgorCXNoYXJlZF9mbGFnX2FpeD0nLXNoYXJlZCcKKwlzaGFyZWRfZmxhZ19zdnI0PSctc2hhcmVkICR3bC1HJworICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPSckd2wtYk06U1JFJworCSAgZmkKKwkgIHNoYXJlZF9mbGFnX2FpeD0nJHdsLWJNOlNSRScKKwkgIHNoYXJlZF9mbGFnX3N2cjQ9JyR3bC1HJworCWZpCisgICAgICBmaQorCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtYmV4cGFsbCcKKyAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0IGFpeCx5ZXMgPSAiJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKwkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorICAgICAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bCckbm9fZW50cnlfZmxhZycgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0IC1uICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR3bCRhbGxvd191bmRlZmluZWRfZmxhZyI7IGVsc2UgOjsgZmlgICR3bCckZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMnICckc2hhcmVkX2ZsYWcKKyAgICAgIGVsc2UKKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwkd2wkbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJyJcJHdsJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKwkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1iZXJub3RvaycKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1iZXJvaycKKwkgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgZWxzZQorCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICBmaQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRSTSAtciAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZH4kTUtESVIgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQnCisJICAjIC1icnRsIGFmZmVjdHMgbXVsdGlwbGUgbGlua2VyIHNldHRpbmdzLCAtYmVyb2sgZG9lcyBub3QgYW5kIGlzIG92ZXJyaWRkZW4gbGF0ZXIKKwkgIGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkPSdgZnVuY19lY2hvX2FsbCAiJGNvbXBpbGVyX2ZsYWdzICIgfCAkU0VEIC1lICJzJS1icnRsXFwoW1ssIF1dXFwpJS1iZXJva1xcMSVnImAnCisJICBpZiB0ZXN0IHN2cjQgIT0gIiR3aXRoX2FpeF9zb25hbWUiOyB0aGVuCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kQ0MgJyRzaGFyZWRfZmxhZ19haXgnIC1vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICckY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQnJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lJworCSAgZmkKKwkgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JENDICckc2hhcmVkX2ZsYWdfc3ZyNCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8gJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICckY29tcGlsZXJfZmxhZ3NfZmlsdGVyZWQnJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kU1RSSVAgLWUgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm9+KCBmdW5jX2VjaG9fYWxsICIjISAkc29uYW1lKCRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vKSI7IGlmIHRlc3Qgc2hyXzY0ID0gIiRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiIyA2NCI7IGVsc2UgZnVuY19lY2hvX2FsbCAiIyAzMiI7IGZpOyBjYXQgJGV4cG9ydF9zeW1ib2xzICkgPiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMuaW1wfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMuaW1wJworCSAgZWxzZQorCSAgICAjIHVzZWQgYnkgLWRscHJlb3BlbiB0byBnZXQgdGhlIHN5bWJvbHMKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IiRfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSInfiRNViAgJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkb3V0cHV0X29iamRpcicKKwkgIGZpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYnNkaVtbNDVdXSopCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPS1yZHluYW1pYworICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBjbCopCisJIyBOYXRpdmUgTVNWQworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCV9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPS5kbGwKKwkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgorICAgICAgICAgICAgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmIjsKKyAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICRTRUQgLWUgJ1wnJ3MvXi8tbGluayAtRVhQT1JUOi8nXCcnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisgICAgICAgICAgZml+CisgICAgICAgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorICAgICAgICAgIGxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworCV9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKwkjIERvbid0IHVzZSByYW5saWIKKwlfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworCV9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKyAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisgICAgICAgICAgICAqLmV4ZXwqLkVYRSkgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0kbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWN+CisgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisgICAgICAgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworICAgICAgICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisgICAgICAgICAgZmknCisJOzsKKyAgICAgICopCisJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9LmRsbAorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGZ1bmNfZWNob19hbGwgIiRkZXBsaWJzIiB8ICRTRUQgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKwkjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgorCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCSMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKwlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICBfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFUygkMSkKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIuKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wrYiAkd2wkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKKyAgICAgIDs7CisKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdDQywkd2l0aF9nbnVfbGQiOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdDQywkd2l0aF9nbnVfbGQiOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwltNF9pZigkMSwgW10sIFsKKwkgICMgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIDExLjAwIGNvbXBpbGVyIGRvIG5vdCB1bmRlcnN0YW5kIC1iIHlldAorCSAgIyAoSFA5MjQ1My0wMSBBLjExLjAxLjIwIGRvZXNuJ3QsIEhQOTI0NTMtMDEgQi4xMS5YLjM1MTc1LTM1MTc2LkdQIGRvZXMpCisJICBfTFRfTElOS0VSX09QVElPTihbaWYgJENDIHVuZGVyc3RhbmRzIC1iXSwKKwkgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX19iLCAkMSksIFstYl0sCisJICAgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSwKKwkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnXSldLAorCSAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddKQorCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KnxpYTY0KikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworCisJICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKwlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbF0sCisJICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2xdLAorCSAgW3NhdmVfTERGTEFHUz0kTERGTEFHUworCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHdsLWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bC9kZXYvbnVsbCIKKwkgICBBQ19MSU5LX0lGRUxTRSgKKwkgICAgIFtBQ19MQU5HX1NPVVJDRSgKKwkgICAgICAgIFtBQ19MQU5HX0NBU0UoW0NdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtDKytdLCBbW2ludCBmb28gKHZvaWQpIHsgcmV0dXJuIDA7IH1dXSwKKwkJCSAgICAgIFtGb3J0cmFuIDc3XSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSwKKwkJCSAgICAgIFtGb3J0cmFuXSwgW1sKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBlbmRdXSldKV0sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPXllc10sCisJICAgICAgW2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vXSkKKyAgICAgICAgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTXSkKKwlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zICR3bC1leHBvcnRzX2ZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJZmkKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBsaW51eCopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgdGNjKikKKwkjIEZhYnJpY2UgQmVsbGFyZCBldCBhbCdzIFRpbnkgQyBDb21waWxlcgorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCogfCBiaXRyaWcqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCisJZWxzZQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCWZpCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvczIqKQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBzaHJleHRfY21kcz0uZGxsCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCWVteGltcCAtbyAkbGliICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckRUNITyAiTElCUkFSWSAke3NvbmFtZSUkc2hhcmVkX2V4dH0gSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRFQ0hPIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCXByZWZpeF9jbWRzPSIkU0VEIn4KKwlpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KKwkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgMWQiOworCWZpfgorCXByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgorCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkcHJlZml4X2NtZHMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9X2RsbC5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgcHJpbnRmICIlc1xcbiIgIi1oaWRkZW4iPj4gJGxpYi5leHB+CisgICAgICAgICAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHdsLWlucHV0ICR3bCRsaWIuZXhwICRjb21waWxlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9J25vJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXogZGVmcycKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJd2xhcmM9JyR3bCcKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgICAkTEQgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwkqKQorCSAgd2xhcmM9JyR3bCcKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKyAgICAgICopCisJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkjIGJ1dCB1bmRlcnN0YW5kcyAnLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgJyR3bCcsCisJIyBidXQgaXMgY2FyZWZ1bCBlbm91Z2ggbm90IHRvIHJlb3JkZXIuCisJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwlpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wteiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHdsLXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwllbHNlCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3Qgc2VxdWVudCA9ICIkaG9zdF92ZW5kb3IiOyB0aGVuCisJIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubworCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteixub2RlZnMnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtQmV4cG9ydCcKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3Qgc25pID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtQmxhcmdlZHluc3ltJworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZmkKK10pCitBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCit0ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK19MVF9UQUdWQVIod2l0aF9nbnVfbGQsICQxKT0kd2l0aF9nbnVfbGQKKworX0xUX0RFQ0woW10sIFtsaWJleHRdLCBbMF0sIFtPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIildKWRubAorX0xUX0RFQ0woW10sIFtzaHJleHRfY21kc10sIFsxXSwgW1NoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpXSlkbmwKK19MVF9ERUNMKFtdLCBbZXh0cmFjdF9leHBzeW1zX2NtZHNdLCBbMl0sCisgICAgW1RoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQorCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSIgaW4KK3h8eHllcykKKyAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisKKyAgaWYgdGVzdCB5ZXMseWVzID0gIiRHQ0MsJGVuYWJsZV9zaGFyZWQiOyB0aGVuCisgICAgY2FzZSAkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW5dLAorCVtsdF9jdl9dX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpLAorCVskUk0gY29uZnRlc3QqCisJZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKwlpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorCSAgc29uYW1lPWNvbmZ0ZXN0CisJICBsaWI9Y29uZnRlc3QKKwkgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorCSAgZGVwbGlicz0KKwkgIHdsPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQorCSAgcGljX2ZsYWc9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQorCSAgY29tcGlsZXJfZmxhZ3M9LXYKKwkgIGxpbmtlcl9mbGFncz0tdgorCSAgdmVyc3RyaW5nPQorCSAgb3V0cHV0X29iamRpcj0uCisJICBsaWJuYW1lPWNvbmZ0ZXN0CisJICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKwkgIGlmIEFDX1RSWV9FVkFMKF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpCisJICB0aGVuCisJICAgIGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJICBlbHNlCisJICAgIGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgZmkKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorCWZpCisJJFJNIGNvbmZ0ZXN0KgorCV0pCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9JGx0X2N2X1tdX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworX0xUX1RBR0RFQ0woW2J1aWxkX2xpYnRvb2xfbmVlZF9sY10sIFthcmNoaXZlX2NtZHNfbmVlZF9sY10sIFswXSwKKyAgICBbV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllc10pCitfTFRfVEFHREVDTChbYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzXSwKKyAgICBbZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc10sIFswXSwKKyAgICBbV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpY10pCitfTFRfVEFHREVDTChbXSwgW2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVuc10pCitfTFRfVEFHREVDTChbXSwgW3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXNdKQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9uZWVkc19vYmplY3RdLCBbMV0sCisgICAgW1doZXRoZXIgdGhlIGNvbXBpbGVyIGNvcGVzIHdpdGggcGFzc2luZyBubyBvYmplY3RzIGRpcmVjdGx5XSkKK19MVF9UQUdERUNMKFtdLCBbb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2NtZHNdLCBbMl0sIFtDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFthcmNoaXZlX2V4cHN5bV9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFttb2R1bGVfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworICAgIGEgc2hhcmVkIGFyY2hpdmUuXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2V4cHN5bV9jbWRzXSwgWzJdKQorX0xUX1RBR0RFQ0woW10sIFt3aXRoX2dudV9sZF0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90XSkKK19MVF9UQUdERUNMKFtdLCBbYWxsb3dfdW5kZWZpbmVkX2ZsYWddLCBbMV0sCisgICAgW0ZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0XSkKK19MVF9UQUdERUNMKFtdLCBbbm9fdW5kZWZpbmVkX2ZsYWddLCBbMV0sCisgICAgW0ZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9sc10pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNdLCBbMV0sCisgICAgW0ZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorICAgIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgJGxpYmRpciBkb2VzIG5vdCBleGlzdF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JdLCBbMV0sCisgICAgW1doZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnRdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9kaXJlY3RdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRSRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAkc2hsaWJwYXRoX3ZhciBpZiB0aGUKKyAgICBsaWJyYXJ5IGlzIHJlbG9jYXRlZF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX21pbnVzX0xdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisgICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX3NobGlicGF0aF92YXJdLCBbMF0sCisgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisgICAgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2F1dG9tYXRpY10sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisgICAgaW50byB0aGUgbGlicmFyeSBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQKKyAgICBhZ2FpbnN0IGl0XSkKK19MVF9UQUdERUNMKFtdLCBbaW5oZXJpdF9ycGF0aF0sIFswXSwKKyAgICBbU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyAgICB0byBydW50aW1lIHBhdGggbGlzdF0pCitfTFRfVEFHREVDTChbXSwgW2xpbmtfYWxsX2RlcGxpYnNdLCBbMF0sCisgICAgW1doZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllc10pCitfTFRfVEFHREVDTChbXSwgW2Fsd2F5c19leHBvcnRfc3ltYm9sc10sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkXSkKK19MVF9UQUdERUNMKFtdLCBbZXhwb3J0X3N5bWJvbHNfY21kc10sIFsyXSwKKyAgICBbVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9sc10pCitfTFRfVEFHREVDTChbXSwgW2V4Y2x1ZGVfZXhwc3ltc10sIFsxXSwKKyAgICBbU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9sc10pCitfTFRfVEFHREVDTChbXSwgW2luY2x1ZGVfZXhwc3ltc10sIFsxXSwKKyAgICBbU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkXSkKK19MVF9UQUdERUNMKFtdLCBbcHJlbGlua19jbWRzXSwgWzJdLAorICAgIFtDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlc10pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RsaW5rX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgZmluaXNoaW5nIGxpbmtpbmcgcHJvZ3JhbXNdKQorX0xUX1RBR0RFQ0woW10sIFtmaWxlX2xpc3Rfc3BlY10sIFsxXSwKKyAgICBbU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzXSkKK2RubCBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZAorZG5sIF9MVF9UQUdERUNMKFtdLCBbdGhyZWFkX3NhZmVfZmxhZ19zcGVjXSwgWzFdLAorZG5sICAgIFtDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZCBzYWZlIG9iamVjdHNdKQorXSkjIF9MVF9MSU5LRVJfU0hMSUJTCisKKworIyBfTFRfTEFOR19DX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDIGNvbXBpbGVyIGFyZSBzdWl0YWJseQorIyBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHIHRvIHdyaXRlCisjIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19DX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbHRfc2F2ZV9DQz0kQ0MKK0FDX0xBTkdfUFVTSChDKQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9YworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO30nCisKK19MVF9UQUdfQ09NUElMRVIKKyMgU2F2ZSB0aGUgZGVmYXVsdCBjb21waWxlciwgc2luY2UgaXQgZ2V0cyBvdmVyd3JpdHRlbiB3aGVuIHRoZSBvdGhlcgorIyB0YWdzIGFyZSBiZWluZyB0ZXN0ZWQsIGFuZCBfTFRfVEFHVkFSKGNvbXBpbGVyLCBbXSkgaXMgYSBOT1AuCitjb21waWxlcl9ERUZBVUxUPSRDQworCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisgIExUX1NZU19ETE9QRU5fU0VMRgorICBfTFRfQ01EX1NUUklQTElCCisKKyAgIyBSZXBvcnQgd2hhdCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICB0ZXN0IG5vID0gIiRjYW5fYnVpbGRfc2hhcmVkIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgZmkKKyAgICA7OworCisgIGFpeFtbNC05XV0qKQorICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICAgY2FzZSAkZW5hYmxlX3NoYXJlZCwkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgICB5ZXMsYWl4LHllcykgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQorICAgICAgeWVzLHN2cjQsKikgOzsJCQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKKyAgICAgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiB8fCBlbmFibGVfc3RhdGljPXllcworICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCitBQ19MQU5HX1BPUAorQ0M9JGx0X3NhdmVfQ0MKK10pIyBfTFRfTEFOR19DX0NPTkZJRworCisKKyMgX0xUX0xBTkdfQ1hYX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMrKyBjb21waWxlciBhcmUgc3VpdGFibHkKKyMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCBubyAhPSAiJENYWCIgJiYKKyAgICAoICh0ZXN0IGcrKyA9ICIkQ1hYIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0IGcrKyAhPSAiJENYWCIpKSk7IHRoZW4KKyAgQUNfUFJPR19DWFhDUFAKK2Vsc2UKKyAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCitmaQorCitBQ19MQU5HX1BVU0goQysrKQorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jcHAKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKKyMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKKyMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgoraWYgdGVzdCB5ZXMgIT0gIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciI7IHRoZW4KKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKKyAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCisgIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisgIF9MVF9UQUdfQ09NUElMRVIKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKKyAgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisgICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCisgIGx0X3NhdmVfQ0M9JENDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgbHRfc2F2ZV9MRD0kTEQKKyAgbHRfc2F2ZV9HQ0M9JEdDQworICBHQ0M9JEdYWAorICBsdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAorICBsdF9zYXZlX3BhdGhfTEQ9JGx0X2N2X3BhdGhfTEQKKyAgaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgorICAgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAorICBlbHNlCisgICAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCisgIGZpCisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcGF0aF9MRENYWCtzZXR9IjsgdGhlbgorICAgIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wYXRoX0xECisgIGZpCisgIHRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCisgIENDPSR7Q1hYLSJjKysifQorICBDRkxBR1M9JENYWEZMQUdTCisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCisgICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQorICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCisgICAgZWxzZQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQorICAgIGZpCisKKyAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KKworICAgICAgTFRfUEFUSF9MRAorCisgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisKKyAgICAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bworICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQorICAgICAgICB3bGFyYz0nJHdsJworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgIGVsc2UKKyAgICAgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICAgIHdsYXJjPQorCisgICAgICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCisgICAgICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCisgICAgICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCisgICAgICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgorICAgICAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgICAgICBmaQorCisgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisgICAgZWxzZQorICAgICAgR1hYPW5vCisgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgd2xhcmM9CisgICAgZmkKKworICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPQorICAgICAgICBlbHNlCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICAgIyBoYXZlIHJ1bnRpbWUgbGlua2luZyBlbmFibGVkLCBhbmQgdXNlIGl0IGZvciBleGVjdXRhYmxlcy4KKyAgICAgICAgICAjIEZvciBzaGFyZWQgbGlicmFyaWVzLCB3ZSBlbmFibGUvZGlzYWJsZSBydW50aW1lIGxpbmtpbmcKKyAgICAgICAgICAjIGRlcGVuZGluZyBvbiB0aGUga2luZCBvZiB0aGUgc2hhcmVkIGxpYnJhcnkgY3JlYXRlZCAtCisgICAgICAgICAgIyB3aGVuICJ3aXRoX2FpeF9zb25hbWUsYWl4X3VzZV9ydW50aW1lbGlua2luZyIgaXM6CisgICAgICAgICAgIyAiYWl4LG5vIiAgIGxpYi5hKGxpYi5zby5WKSBzaGFyZWQsIHJ0bDpubywgIGZvciBleGVjdXRhYmxlcworICAgICAgICAgICMgImFpeCx5ZXMiICBsaWIuc28gICAgICAgICAgc2hhcmVkLCBydGw6eWVzLCBmb3IgZXhlY3V0YWJsZXMKKyAgICAgICAgICAjICAgICAgICAgICAgbGliLmEgICAgICAgICAgIHN0YXRpYyBhcmNoaXZlCisgICAgICAgICAgIyAiYm90aCxubyIgIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMKKyAgICAgICAgICAjICAgICAgICAgICAgbGliLmEobGliLnNvLlYpIHNoYXJlZCwgcnRsOm5vLCAgZm9yIGV4ZWN1dGFibGVzCisgICAgICAgICAgIyAiYm90aCx5ZXMiIGxpYi5zby5WKHNoci5vKSBzaGFyZWQsIHJ0bDp5ZXMsIGZvciBleGVjdXRhYmxlcworICAgICAgICAgICMgICAgICAgICAgICBsaWIuYShsaWIuc28uVikgc2hhcmVkLCBydGw6bm8KKyAgICAgICAgICAjICJzdnI0LCoiICAgbGliLnNvLlYoc2hyLm8pIHNoYXJlZCwgcnRsOnllcywgZm9yIGV4ZWN1dGFibGVzCisgICAgICAgICAgIyAgICAgICAgICAgIGxpYi5hICAgICAgICAgICBzdGF0aWMgYXJjaGl2ZQorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKKwkgICAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICAgICAgY2FzZSAkbGRfZmxhZyBpbgorCSAgICAgICotYnJ0bCopCisJICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICAgICAgYnJlYWsKKwkgICAgICAgIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGlmIHRlc3Qgc3ZyNCxubyA9ICIkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICAgICMgV2l0aCBhaXgtc29uYW1lPXN2cjQsIHdlIGNyZWF0ZSB0aGUgbGliLnNvLlYgc2hhcmVkIGFyY2hpdmVzIG9ubHksCisJICAgICAgIyBzbyB3ZSBkb24ndCBoYXZlIGxpYi5hIHNoYXJlZCBsaWJzIHRvIGxpbmsgb3VyIGV4ZWN1dGFibGVzLgorCSAgICAgICMgV2UgaGF2ZSB0byBmb3JjZSBydW50aW1lIGxpbmtpbmcgaW4gdGhpcyBjYXNlLgorCSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1icnRsIgorCSAgICBmaQorCSAgICA7OworICAgICAgICAgIGVzYWMKKworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgICBmaQorCisgICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR3bC1mLCcKKyAgICAgICAgY2FzZSAkd2l0aF9haXhfc29uYW1lLCRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIGluCisgICAgICAgIGFpeCwqKSA7OwkjIG5vIGltcG9ydCBmaWxlCisgICAgICAgIHN2cjQsKiB8ICoseWVzKSAjIHVzZSBpbXBvcnQgZmlsZQorICAgICAgICAgICMgVGhlIEltcG9ydCBGaWxlIGRlZmluZXMgd2hhdCB0byBoYXJkY29kZS4KKyAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQorICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAkQ0MgLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorCSAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgICAgOgorCSAgZWxzZQorCSAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKyAgICAgICAgICBlc2FjCisgICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JHNoYXJlZF9mbGFnJyAkd2wtRycKKwkgIGZpCisJICAjIE5lZWQgdG8gZW5zdXJlIHJ1bnRpbWUgbGlua2luZyBpcyBkaXNhYmxlZCBmb3IgdGhlIHRyYWRpdGlvbmFsCisJICAjIHNoYXJlZCBsaWJyYXJ5LCBvciB0aGUgbGlua2VyIG1heSBldmVudHVhbGx5IGZpbmQgc2hhcmVkIGxpYnJhcmllcworCSAgIyAvd2l0aC8gSW1wb3J0IEZpbGUgLSB3ZSBkbyBub3Qgd2FudCB0byBtaXggdGhlbS4KKwkgIHNoYXJlZF9mbGFnX2FpeD0nLXNoYXJlZCcKKwkgIHNoYXJlZF9mbGFnX3N2cjQ9Jy1zaGFyZWQgJHdsLUcnCisgICAgICAgIGVsc2UKKyAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkgICMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisgICAgICAgICAgZWxzZQorCSAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCisJICAgIGVsc2UKKwkgICAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKKwkgICAgZmkKKwkgICAgc2hhcmVkX2ZsYWdfYWl4PSckd2wtYk06U1JFJworCSAgICBzaGFyZWRfZmxhZ19zdnI0PSckd2wtRycKKyAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1iZXhwYWxsJworICAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvCisJIyBleHBvcnQuCisgICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisJaWYgdGVzdCBhaXgseWVzID0gIiR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisgICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorICAgICAgICAgICMgVGhlICItRyIgbGlua2VyIGZsYWcgYWxsb3dzIHVuZGVmaW5lZCBzeW1ib2xzLgorICAgICAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm5vdG9rJworICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICMgZXhlY3V0YWJsZS4KKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKworICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwkd2wkbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJyJcJHdsJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorICAgICAgICAgIGVsc2UKKwkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1iZXJub3RvaycKKwkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm9rJworCSAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIGVsc2UKKwkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKKwkgICAgZmkKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kfiRNS0RJUiAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZCcKKwkgICAgIyAtYnJ0bCBhZmZlY3RzIG11bHRpcGxlIGxpbmtlciBzZXR0aW5ncywgLWJlcm9rIGRvZXMgbm90IGFuZCBpcyBvdmVycmlkZGVuIGxhdGVyCisJICAgIGNvbXBpbGVyX2ZsYWdzX2ZpbHRlcmVkPSdgZnVuY19lY2hvX2FsbCAiJGNvbXBpbGVyX2ZsYWdzICIgfCAkU0VEIC1lICJzJS1icnRsXFwoW1ssIF1dXFwpJS1iZXJva1xcMSVnImAnCisJICAgIGlmIHRlc3Qgc3ZyNCAhPSAiJHdpdGhfYWl4X3NvbmFtZSI7IHRoZW4KKwkgICAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKKwkgICAgICAjIGxpYnJhcmllcy4gTmVlZCAtYm5vcnRsIGxhdGUsIHdlIG1heSBoYXZlIC1icnRsIGluIExERkxBR1MuCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IiRfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSInfiRDQyAnJHNoYXJlZF9mbGFnX2FpeCcgLW8gJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lLmQvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzb25hbWUnCisJICAgIGZpCisJICAgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSIkX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkiJ34kQ0MgJyRzaGFyZWRfZmxhZ19zdnI0JyAtbyAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMubyAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJyRjb21waWxlcl9mbGFnc19maWx0ZXJlZCckd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRTVFJJUCAtZSAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWMub34oIGZ1bmNfZWNob19hbGwgIiMhICRzb25hbWUoJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjLm8pIjsgaWYgdGVzdCBzaHJfNjQgPSAiJHNoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIjIDY0IjsgZWxzZSBmdW5jX2VjaG9fYWxsICIjIDMyIjsgZmk7IGNhdCAkZXhwb3J0X3N5bWJvbHMgKSA+ICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXB+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kc29uYW1lICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5vICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kLyRzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYy5pbXAnCisJICAgIGVsc2UKKwkgICAgICAjIHVzZWQgYnkgLWRscHJlb3BlbiB0byBnZXQgdGhlIHN5bWJvbHMKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JE1WICAkb3V0cHV0X29iamRpci8kcmVhbG5hbWUuZC8kc29uYW1lICRvdXRwdXRfb2JqZGlyJworCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iJF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIid+JFJNIC1yICRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZS5kJworICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIDs7CisKKyAgICAgIGJlb3MqKQorCWlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKwksY2wqIHwgbm8sY2wqKQorCSAgIyBOYXRpdmUgTVNWQworCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworCSAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwkgIGxpYmV4dD1saWIKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCSAgc2hyZXh0X2NtZHM9LmRsbAorCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCisgICAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7CisgICAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworICAgICAgICAgICAgZml+CisgICAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisgICAgICAgICAgICBsaW5rbmFtZXM9JworCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCSAgIyBEb24ndCB1c2UgcmFubGliCisJICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworCSAgX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KKyAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisgICAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisgICAgICAgICAgICAgICouZXhlfCouRVhFKSA7OworICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWN+CisgICAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorICAgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisgICAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisgICAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworICAgICAgICAgICAgZmknCisJICA7OworCSopCisJICAjIGcrKworCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSwgdXNlIGl0IGFzCisJICAgICMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgorICAgICAgICAgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgICAgZml+CisgICAgICAgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgZWxzZQorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorCTs7CisKKyAgICAgIG9zMiopCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwlzaHJleHRfY21kcz0uZGxsCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJHtzb25hbWUlJHNoYXJlZF9leHR9IElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJEVDSE8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJEVDSE8gIkRBVEEgTVVMVElQTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkRUNITyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgIGVteGV4cCAkbGlib2JqcyB8ICRTRUQgLyJfRExMX0luaXRUZXJtIi9kID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRDQyAtWmRsbCAtWmNydGRsbCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICBlbXhpbXAgLW8gJGxpYiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRFQ0hPICJMSUJSQVJZICR7c29uYW1lJSRzaGFyZWRfZXh0fSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4KKwkgICRFQ0hPICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgJEVDSE8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICBwcmVmaXhfY21kcz0iJFNFRCJ+CisJICBpZiB0ZXN0IEVYUE9SVFMgPSAiYCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCI7IHRoZW4KKwkgICAgcHJlZml4X2NtZHM9IiRwcmVmaXhfY21kcyAtZSAxZCI7CisJICBmaX4KKwkgIHByZWZpeF9jbWRzPSIkcHJlZml4X2NtZHMgLWUgXCJzL15cKC4qXCkkL19cMS9nXCIifgorCSAgY2F0ICRleHBvcnRfc3ltYm9scyB8ICRwcmVmaXhfY21kcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+CisJICAkQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfgorCSAgZW14aW1wIC1vICRsaWIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworCV9MVF9UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfV9kbGwuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisJX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisJOzsKKworICAgICAgZGd1eCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgZWMrKyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBmcmVlYnNkMi4qKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlCisJIyBzd2l0Y2ggdG8gRUxGCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZC1lbGYqKQorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgICAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgorICAgICAgICAjIGNvbnZlbnRpb25zCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGhhaWt1KikKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDkqKQorICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkgICAgICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKyAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgOzsKKyAgICAgICAgICBhQ0MqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1iICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorICAgICAgICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorICAgICAgICAgICAgIyBkZXBlbmRlbmNpZXMuCisgICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBocHV4MTAqfGhwdXgxMSopCisgICAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKyAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJCSAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJCSAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgYUNDKikKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICBocHBhKjY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICBpYTY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEdSRVAgIlwtTCJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgICAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICAgIGlhNjQqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgKikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIDs7CisJICAgICAgICBlc2FjCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBpbnRlcml4W1szLTldXSopCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKwkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKwkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInN8XnxffCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCTs7CisgICAgICBpcml4NSogfCBpcml4NiopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFNHSSBDKysKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisJICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICBlbHNlCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgLW8gJGxpYicKKwkgICAgICBmaQorCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKwkgIGljcGMqIHwgZWNwYyogKQorCSAgICAjIEludGVsIEMrKworCSAgICB3aXRoX2dudV9sZD15ZXMKKwkgICAgIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKKwkgICAgIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKwkgICAgIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKwkgICAgY2FzZSBgJENDIC1WIDI+JjFgIGluCisJICAgICAgKiJWZXJzaW9uIDcuIiopCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCQk7OworCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCisJICAgICAgICB0bXBfaWR5bj0KKwkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisJCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OworCQllc2FjCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgICA7OworICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQorICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgY2FzZSBgJENDIC1WYCBpbgorCSAgICAqcGdDQ1wgW1sxLTVdXS4qIHwgKnBnY3BwXCBbWzEtNV1dLiopCisJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorICAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKwkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorICAgICAgICAgICAgICAgICRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgorICAgICAgICAgICAgICAgICRSQU5MSUIgJG9sZGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICBlc2FjCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC0tcnBhdGggJHdsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJworCSAgICA7OworCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCisJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICAkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwkgICAgZmkKKwkgICAgOzsKKwkgICopCisJICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSAgICAqU3VuXCBDKikKKwkgICAgICAjIFN1biBDKysgNS45CisJICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJworCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKworCSAgICAgICMgTm90IHN1cmUgd2hldGhlciBzb21ldGhpbmcgYmFzZWQgb24KKwkgICAgICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCisJICAgICAgIyB3b3VsZCBiZSBiZXR0ZXIuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbHlueG9zKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG04OGsqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG12cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgY3h4KikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwkgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIG5ldGJzZCopCisgICAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKwkgIHdsYXJjPQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCWZpCisJIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKKwk7OworCisgICAgICAqbnRvKiB8ICpxbngqKQorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworCTs7CisKKyAgICAgIG9wZW5ic2QqIHwgYml0cmlnKikKKwlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCI7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGZpCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisJZWxzZQorCSAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIEtDQyopCisJICAgICMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICIkbGliIiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCSAgICBjYXNlICRob3N0IGluCisJICAgICAgb3NmMyopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgICAqKSBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKyAgICAgICAgICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGN4eCopCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkJOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZX4KKyAgICAgICAgICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisgICAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR3bC1pbnB1dCAkd2wkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+CisgICAgICAgICAgICAgICAgICAkUk0gJGxpYi5leHAnCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJCTs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkIiB8ICRHUkVQIC12ICJsZDoiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0IHllcyxubyA9ICIkR1hYLCR3aXRoX2dudV9sZCI7IHRoZW4KKwkgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgb3NmMyopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgICAqKQorCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLW1zeW0gJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICBlc2FjCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHBzb3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBzdW5vczQqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHNvbGFyaXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywkMSk9eWVzCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnICR3bC1NICR3bCRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJICAgICAgKikKKwkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKKwkJIyBidXQgdW5kZXJzdGFuZHMgJy16IGxpbmtlcl9mbGFnJy4KKwkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwkgICAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2Z1bmNfZWNob19hbGwnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKKworCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCisJICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHWFgsJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC16ICR7d2x9ZGVmcycKKwkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAtdiAiXkNvbmZpZ3VyZWQgd2l0aDoiIHwgJEdSRVAgIlwtTCInCisJICAgICAgZWxzZQorCSAgICAgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSAnLUcnIE5PVCAnLXNoYXJlZCcgb24gdGhpcworCSAgICAgICAgIyBwbGF0Zm9ybS4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgICAgICAgICAgICAgICAgICAkQ0MgLUcgLW5vc3RkbGliICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBmaQorCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SICR3bCRsaWJkaXInCisJICAgICAgY2FzZSAkaG9zdF9vcyBpbgorCQlzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCQkqKQorCQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIENDKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKwkjIE5vdGU6IFdlIENBTk5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisJIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworCSMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorCSMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKwkjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKwkjIGFzIC16IGRlZnMuCisJX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPSckd2wteix0ZXh0JworCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHdsLXosbm9kZWZzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SLCRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisJX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisJX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUJleHBvcnQnCisJcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgorICAgICAgICAgICAgICAnIiRfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSIKKwkgICAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgorICAgICAgICAgICAgICAnIiRfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSkiCisJICAgIDs7CisJICAqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIDs7CisJZXNhYworICAgICAgOzsKKworICAgICAgdGFuZGVtKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIHZ4d29ya3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICAqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworICAgIGVzYWMKKworICAgIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKKyAgICB0ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRHWFgKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyAgTERDWFg9JExECisgIExEPSRsdF9zYXZlX0xECisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKyAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCitmaSAjIHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRworCisKKyMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZ1bmNfc3RyaXBuYW1lX2NuZiBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisjCisjIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSAobm9uLVhTSSkgdmVyc2lvbiBvZiBmdW5jX3N0cmlwbmFtZSwKKyMgZXhjZXB0IHRoaXMgb25lIGNhbiBiZSB1c2VkIGJ5IG00IGNvZGUgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgYnkgY29uZmlndXJlLAorIyByYXRoZXIgdGhhbiB0aGUgbGlidG9vbCBzY3JpcHQuCittNF9kZWZ1bihbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0sW2RubAorQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSkKK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKK2Z1bmNfc3RyaXBuYW1lX2NuZiAoKQoreworICBjYXNlIEBTfEAyIGluCisgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJAU3xAMyIgfCAkU0VEICJzJV5AU3xAMSUlOyBzJVxcXFxAU3xAMlwkJSUiYDs7CisgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICJAU3xAMyIgfCAkU0VEICJzJV5AU3xAMSUlOyBzJUBTfEAyXCQlJSJgOzsKKyAgZXNhYworfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorXSkjIF9MVF9GVU5DX1NUUklQTkFNRV9DTkYKKworCisjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKKyMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorbTRfZGVmdW4oW19MVF9TWVNfSElEREVOX0xJQkRFUFNdLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorQUNfUkVRVUlSRShbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0pZG5sCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KK19MVF9UQUdWQVIocHJlZGVwcywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KKworZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCitkbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAorZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAorZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKK2RubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgorbTRfaWYoWyQxXSwgW10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgoraW50IGE7Cit2b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQorX0xUX0VPRgorXSwgWyQxXSwgW0NYWF0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorY2xhc3MgRm9vCit7CitwdWJsaWM6CisgIEZvbyAodm9pZCkgeyBhID0gMDsgfQorcHJpdmF0ZToKKyAgaW50IGE7Cit9OworX0xUX0VPRgorXSwgWyQxXSwgW0Y3N10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIqNCBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitfTFRfRU9GCitdLCBbJDFdLCBbRkNdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBpbXBsaWNpdCBub25lCisgICAgICBpbnRlZ2VyIGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtHQ0pdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK3B1YmxpYyBjbGFzcyBmb28geworICBwcml2YXRlIGludCBhOworICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKKyAgICBhID0gMDsKKyAgfQorfTsKK19MVF9FT0YKK10sIFskMV0sIFtHT10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorcGFja2FnZSBmb28KK2Z1bmMgZm9vKCkgeworfQorX0xUX0VPRgorXSkKKworX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1M9JENGTEFHUworY2FzZSAiJENDICRDRkxBR1MgIiBpbiAjKAorKlwgLWZsdG8qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby1sdG8iIDs7CisqXCAtZndob3ByKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8td2hvcHIiIDs7CisqXCAtZnVzZS1saW5rZXItcGx1Z2luKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tdXNlLWxpbmtlci1wbHVnaW4iIDs7Citlc2FjCisKK2RubCBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKK2RubCBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCitpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKworICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCisgICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgorICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisKKyAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworICAgIGNhc2UgJHByZXYkcCBpbgorCisgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCisgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgorICAgICAgIGlmIHRlc3QgeC1MID0gIiRwIiB8fAorICAgICAgICAgIHRlc3QgeC1SID0gIiRwIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisgICAgICAgICBjYXNlICRwIGluCisgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICBlc2FjCisgICAgICAgZmkKKyAgICAgICBjYXNlICRwIGluCisgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICBlc2FjCisgICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KKwkgY2FzZSAkcHJldiBpbgorCSAtTCB8IC1SKQorCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorCSAgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0kcHJldiRwCisJICAgZWxzZQorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAkcHJldiRwIgorCSAgIGZpCisJICAgOzsKKwkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKKwkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCisJIGVzYWMKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSRwcmV2JHAKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICRwcmV2JHAiCisJIGZpCisgICAgICAgZmkKKyAgICAgICBwcmV2PQorICAgICAgIDs7CisKKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKKyAgICAqLiRvYmpleHQpCisgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCisgICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCisJIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3Qgbm8gPSAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiOyB0aGVuCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSRwCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSRwCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSAkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQ2xlYW4gdXAuCisgIHJtIC1mIGEub3V0IGEuZXhlCitlbHNlCisgIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyAkMSB0ZXN0IHByb2dyYW0iCitmaQorCiskUk0gLWYgY29uZmVzdC4kb2JqZXh0CitDRkxBR1M9JF9sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTCisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCittNF9pZihbJDFdLCBbQ1hYXSwKK1tjYXNlICRob3N0X29zIGluCitpbnRlcml4W1szLTldXSopCisgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKyAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKyAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywkMSk9CisgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9CisgIDs7Citlc2FjCitdKQorCitjYXNlICIgJF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKSAiIGluCisqIiAtbGMgIiopIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubyA7OworZXNhYworIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9CitpZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgorIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICRTRUQgLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCitmaQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX2RpcnNdLCBbMV0sCisgICAgW1RoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3ByZWRlcF9vYmplY3RzXSwgWzFdLAorICAgIFtEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyAgICBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBfb2JqZWN0c10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF0sIFsxXSwKKyAgICBbVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyAgICBhIHNoYXJlZCBsaWJyYXJ5XSkKK10pIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTCisKKworIyBfTFRfTEFOR19GNzdfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiA3NyBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfRjc3X0NPTkZJR10sCitbQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCitpZiB0ZXN0IC16ICIkRjc3IiB8fCB0ZXN0IG5vID0gIiRGNzciOyB0aGVuCisgIF9sdF9kaXNhYmxlX0Y3Nz15ZXMKK2ZpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KK2FjX2V4dD1mCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBGNzcgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgeWVzICE9ICIkX2x0X2Rpc2FibGVfRjc3IjsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0dDQz0kR0NDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0M9JHtGNzctImY3NyJ9CisgIENGTEFHUz0kRkZMQUdTCisgIGNvbXBpbGVyPSRDQworICBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKyAgR0NDPSRHNzcKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCBubyA9ICIkY2FuX2J1aWxkX3NoYXJlZCIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICAgIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisgICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgICAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKwlpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KKwkgIGNhc2UgJGVuYWJsZV9zaGFyZWQsJHdpdGhfYWl4X3NvbmFtZSwkYWl4X3VzZV9ydW50aW1lbGlua2luZyBpbgorCSAgeWVzLGFpeCx5ZXMpIDs7CQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGZpbGUgb25seQorCSAgeWVzLHN2cjQsKikgOzsJCSMgc2hhcmVkIG9iamVjdCBhcyBsaWIuc28gYXJjaGl2ZSBtZW1iZXIgb25seQorCSAgeWVzLCopIGVuYWJsZV9zdGF0aWM9bm8gOzsJIyBzaGFyZWQgb2JqZWN0IGluIGxpYi5hIGFyY2hpdmUgYXMgd2VsbAorCSAgZXNhYworCWZpCisgICAgICAgIDs7CisgICAgZXNhYworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyAgICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRHNzcKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK2ZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GNzciCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfRjc3X0NPTkZJRworCisKKyMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAorW0FDX0xBTkdfUFVTSChGb3J0cmFuKQorCitpZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3Qgbm8gPSAiJEZDIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GQz15ZXMKK2ZpCisKK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0IHllcyAhPSAiJF9sdF9kaXNhYmxlX0ZDIjsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0dDQz0kR0NDCisgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKKyAgQ0M9JHtGQy0iZjk1In0KKyAgQ0ZMQUdTPSRGQ0ZMQUdTCisgIGNvbXBpbGVyPSRDQworICBHQ0M9JGFjX2N2X2ZjX2NvbXBpbGVyX2dudQorCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisgIGlmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCisJICBjYXNlICRlbmFibGVfc2hhcmVkLCR3aXRoX2FpeF9zb25hbWUsJGFpeF91c2VfcnVudGltZWxpbmtpbmcgaW4KKwkgIHllcyxhaXgseWVzKSA7OwkJIyBzaGFyZWQgb2JqZWN0IGFzIGxpYi5zbyBmaWxlIG9ubHkKKwkgIHllcyxzdnI0LCopIDs7CQkjIHNoYXJlZCBvYmplY3QgYXMgbGliLnNvIGFyY2hpdmUgbWVtYmVyIG9ubHkKKwkgIHllcywqKSBlbmFibGVfc3RhdGljPW5vIDs7CSMgc2hhcmVkIG9iamVjdCBpbiBsaWIuYSBhcmNoaXZlIGFzIHdlbGwKKwkgIGVzYWMKKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSRMRAorCisgICAgIyMgQ0FWRUFUIEVNUFRPUjoKKyAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorICAgICMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisgICAgIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCisgICAgX0xUX1NZU19ISURERU5fTElCREVQUygkMSkKKyAgICBfTFRfQ09NUElMRVJfUElDKCQxKQorICAgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgICAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgICAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgICAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgICBfTFRfQ09ORklHKCQxKQorICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKKworICBHQ0M9JGx0X3NhdmVfR0NDCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK2ZpICMgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GQyIKKworQUNfTEFOR19QT1AKK10pIyBfTFRfTEFOR19GQ19DT05GSUcKKworCisjIF9MVF9MQU5HX0dDSl9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBKYXZhIENvbXBpbGVyIGNvbXBpbGVyCisjIGFyZSBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX0dDSl0pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWphdmEKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9UQUdfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0kQ0MKK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz15ZXMKK0NDPSR7R0NKLSJnY2oifQorQ0ZMQUdTPSRHQ0pGTEFHUworY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfVEFHVkFSKExELCAkMSk9JExECitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorCisgIF9MVF9DT05GSUcoJDEpCitmaQorCitBQ19MQU5HX1JFU1RPUkUKKworR0NDPSRsdF9zYXZlX0dDQworQ0M9JGx0X3NhdmVfQ0MKK0NGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKK10pIyBfTFRfTEFOR19HQ0pfQ09ORklHCisKKworIyBfTFRfTEFOR19HT19DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIEdOVSBHbyBjb21waWxlcgorIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfR09fQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtMVF9QUk9HX0dPXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgR28gdGVzdCBzb3VyY2VzLgorYWNfZXh0PWdvCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBHbyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9InBhY2thZ2UgbWFpbjsgZnVuYyBtYWluKCkgeyB9IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdwYWNrYWdlIG1haW47IGZ1bmMgbWFpbigpIHsgfScKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSRDQworbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworbHRfc2F2ZV9HQ0M9JEdDQworR0NDPXllcworQ0M9JHtHT0MtImdjY2dvIn0KK0NGTEFHUz0kR09GTEFHUworY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfVEFHVkFSKExELCAkMSk9JExECitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR28gZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgorX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisKK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCisKKyMjIENBVkVBVCBFTVBUT1I6CisjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQorIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgoraWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICBfTFRfQ09NUElMRVJfTk9fUlRUSSgkMSkKKyAgX0xUX0NPTVBJTEVSX1BJQygkMSkKKyAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgX0xUX0NPTVBJTEVSX0ZJTEVfTE9DS1MoJDEpCisgIF9MVF9MSU5LRVJfU0hMSUJTKCQxKQorICBfTFRfTElOS0VSX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKKyAgX0xUX0NPTkZJRygkMSkKK2ZpCisKK0FDX0xBTkdfUkVTVE9SRQorCitHQ0M9JGx0X3NhdmVfR0NDCitDQz0kbHRfc2F2ZV9DQworQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworXSkjIF9MVF9MQU5HX0dPX0NPTkZJRworCisKKyMgX0xUX0xBTkdfUkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gJ2xpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX1JDX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19SQ10pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1yYworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9JworCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSRDQworbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworbHRfc2F2ZV9HQ0M9JEdDQworR0NDPQorQ0M9JHtSQy0id2luZHJlcyJ9CitDRkxBR1M9Citjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKK19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKworaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICA6CisgIF9MVF9DT05GSUcoJDEpCitmaQorCitHQ0M9JGx0X3NhdmVfR0NDCitBQ19MQU5HX1JFU1RPUkUKK0NDPSRsdF9zYXZlX0NDCitDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitdKSMgX0xUX0xBTkdfUkNfQ09ORklHCisKKworIyBMVF9QUk9HX0dDSgorIyAtLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfR0NKXSwKK1ttNF9pZmRlZihbQUNfUFJPR19HQ0pdLCBbQUNfUFJPR19HQ0pdLAorICBbbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLCBbQV1bTV9QUk9HX0dDSl0sCisgICAgW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osKQorICAgICAgdGVzdCBzZXQgPSAiJHtHQ0pGTEFHUytzZXR9IiB8fCBHQ0pGTEFHUz0iLWcgLU8yIgorICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfR0NKXSwgW0xUX1BST0dfR0NKXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLCBbXSkKKworCisjIExUX1BST0dfR08KKyMgLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfR09dLAorW0FDX0NIRUNLX1RPT0woR09DLCBnY2NnbywpCitdKQorCisKKyMgTFRfUFJPR19SQworIyAtLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfUFJPR19SQ10sCitbQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywpCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfUkNdLCBbTFRfUFJPR19SQ10pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfUkNdLCBbXSkKKworCisjIF9MVF9ERUNMX0VHUkVQCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBncmVwCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX0VHUkVQXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0VHUkVQXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfRkdSRVBdKWRubAordGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorX0xUX0RFQ0woW10sIFtHUkVQXSwgWzFdLCBbQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXNdKQorX0xUX0RFQ0woW10sIFtFR1JFUF0sIFsxXSwgW0FuIEVSRSBtYXRjaGVyXSkKK19MVF9ERUNMKFtdLCBbRkdSRVBdLCBbMV0sIFtBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXJdKQorZG5sIE5vbi1ibGVlZGluZy1lZGdlIGF1dG9jb25mIGRvZXNuJ3Qgc3Vic3QgR1JFUCwgc28gZG8gaXQgaGVyZSB0b28KK0FDX1NVQlNUKFtHUkVQXSkKK10pCisKKworIyBfTFRfREVDTF9PQkpEVU1QCisjIC0tLS0tLS0tLS0tLS0tCisjIElmIHdlIGRvbid0IGhhdmUgYSBuZXcgZW5vdWdoIEF1dG9jb25mIHRvIGNob29zZSB0aGUgYmVzdCBvYmpkdW1wCisjIGF2YWlsYWJsZSwgY2hvb3NlIHRoZSBvbmUgZmlyc3QgaW4gdGhlIHVzZXIncyBQQVRILgorbTRfZGVmdW4oW19MVF9ERUNMX09CSkRVTVBdLAorW0FDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtBbiBvYmplY3Qgc3ltYm9sIGR1bXBlcl0pCitBQ19TVUJTVChbT0JKRFVNUF0pCitdKQorCisjIF9MVF9ERUNMX0RMTFRPT0wKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgRExMVE9PTCB2YXJpYWJsZSBpcyBzZXQuCittNF9kZWZ1bihbX0xUX0RFQ0xfRExMVE9PTF0sCitbQUNfQ0hFQ0tfVE9PTChETExUT09MLCBkbGx0b29sLCBmYWxzZSkKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKK19MVF9ERUNMKFtdLCBbRExMVE9PTF0sIFsxXSwgW0RMTCBjcmVhdGlvbiBwcm9ncmFtXSkKK0FDX1NVQlNUKFtETExUT09MXSkKK10pCisKKyMgX0xUX0RFQ0xfU0VECisjIC0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgYSBmdWxseS1mdW5jdGlvbmFsIHNlZCBwcm9ncmFtLCB0aGF0IHRydW5jYXRlcworIyBhcyBmZXcgY2hhcmFjdGVycyBhcyBwb3NzaWJsZS4gIFByZWZlciBHTlUgc2VkIGlmIGZvdW5kLgorbTRfZGVmdW4oW19MVF9ERUNMX1NFRF0sCitbQUNfUFJPR19TRUQKK3Rlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKK1hzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKK19MVF9ERUNMKFtdLCBbU0VEXSwgWzFdLCBbQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitfTFRfREVDTChbXSwgW1hzZWRdLCBbIlwkU0VEIC1lIDFzL15YLy8iXSwKKyAgICBbU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW5dKQorXSkjIF9MVF9ERUNMX1NFRAorCittNF9pZm5kZWYoW0FDX1BST0dfU0VEXSwgWworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCittNF9kZWZ1bihbQUNfUFJPR19TRURdLAorW0FDX01TR19DSEVDS0lORyhbZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX1NFRCwKK1sjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIHNlZCBhbmQgZ3NlZC4KKyMgVGhlbiB1c2UgdGhhdCBsaXN0IG9mIHNlZCdzIGFzIG9uZXMgdG8gdGVzdCBmb3IgdHJ1bmNhdGlvbi4KK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGx0X2FjX3Byb2cgaW4gc2VkIGdzZWQ7IGRvCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgICAgICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgICAgICBsdF9hY19zZWRfbGlzdD0iJGx0X2FjX3NlZF9saXN0ICRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICBmaQorICAgIGRvbmUKKyAgZG9uZQorZG9uZQorSUZTPSRhc19zYXZlX0lGUworbHRfYWNfbWF4PTAKK2x0X2FjX2NvdW50PTAKKyMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCisjIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgorZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCisgIHRlc3QgISAtZiAiJGx0X2FjX3NlZCIgJiYgY29udGludWUKKyAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCisgIGx0X2FjX2NvdW50PTAKKyAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCisgICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBicmVhaworICBmaQorICB3aGlsZSB0cnVlOyBkbworICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCisgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKKyAgICBlY2hvID4+Y29uZnRlc3QubmwKKyAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhaworICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKKyAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0IDEwIC1sdCAiJGx0X2FjX2NvdW50IiAmJiBicmVhaworICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCisgICAgaWYgdGVzdCAiJGx0X2FjX2NvdW50IiAtZ3QgIiRsdF9hY19tYXgiOyB0aGVuCisgICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50CisgICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgZmkKKyAgZG9uZQorZG9uZQorXSkKK1NFRD0kbHRfY3ZfcGF0aF9TRUQKK0FDX1NVQlNUKFtTRURdKQorQUNfTVNHX1JFU1VMVChbJFNFRF0pCitdKSNBQ19QUk9HX1NFRAorXSkjbTRfaWZuZGVmCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbTFRfQUNfUFJPR19TRURdLCBbQUNfUFJPR19TRURdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sIFtdKQorCisKKyMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIG91dCB3aGV0aGVyIHRoZSBzaGVsbCBpcyBCb3VybmUgb3IgWFNJIGNvbXBhdGlibGUsCisjIG9yIGhhcyBzb21lIG90aGVyIHVzZWZ1bCBmZWF0dXJlcy4KK200X2RlZnVuKFtfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVNdLAorW2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKK19MVF9ERUNMKFtdLCBbbHRfdW5zZXRdLCBbMF0sIFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiXSlkbmwKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKK19MVF9ERUNMKFtTUDJOTF0sIFtsdF9TUDJOTF0sIFsxXSwgW3R1cm4gc3BhY2VzIGludG8gbmV3bGluZXNdKWRubAorX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCitdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisKKworIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZXRlcm1pbmUgd2hhdCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKKyMgZnVuY190b19ob3N0X2ZpbGUgKGFuZCwgaW1wbGljaXRseSwgYnkgZnVuY190b19ob3N0X3BhdGgpLiAgVGhlc2UgYXJlIG5lZWRlZAorIyBmb3IgY2VydGFpbiBjcm9zcy1jb21waWxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuYXRpdmUgbWluZ3cuCittNF9kZWZ1bihbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfdG9faG9zdF9maWxlX2NtZCwKK1tjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqLSotY3lnd2luKiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgOzsKK2VzYWMKK10pCit0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCitBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0pCitfTFRfREVDTChbdG9faG9zdF9maWxlX2NtZF0sIFtsdF9jdl90b19ob3N0X2ZpbGVfY21kXSwKKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSlkbmwKKworQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl90b190b29sX2ZpbGVfY21kLAorWyNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7Citlc2FjCitdKQordG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdKQorX0xUX0RFQ0woW3RvX3Rvb2xfZmlsZV9jbWRdLCBbbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0sCisgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0XSlkbmwKK10pIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUwpkaWZmIC0tZ2l0IGEvZGlzdDIvbTQvbHRvcHRpb25zLm00IGIvZGlzdDIvbTQvbHRvcHRpb25zLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YjA4MjkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9tNC9sdG9wdGlvbnMubTQKQEAgLTAsMCArMSw0MzcgQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCAyMDA3LTIwMDksIDIwMTEtMjAxNSBGcmVlIFNvZnR3YXJlCisjICAgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgOCBsdG9wdGlvbnMubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9QVElPTlNfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworCisjIF9MVF9NQU5HTEVfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9PUFRJT05dLAorW1tfTFRfT1BUSU9OX11tNF9icGF0c3Vic3QoJDFfXyQyLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorCisKKyMgX0xUX1NFVF9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE9QVElPTi1OQU1FIGZvciBtYWNybyBNQUNSTy1OQU1FLCBhbmQgaWYgdGhlcmUgaXMgYQorIyBtYXRjaGluZyBoYW5kbGVyIGRlZmluZWQsIGRpc3BhdGNoIHRvIGl0LiAgT3RoZXIgT1BUSU9OLU5BTUVzIGFyZQorIyBzYXZlZCBhcyBhIGZsYWcuCittNF9kZWZpbmUoW19MVF9TRVRfT1BUSU9OXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSkpZG5sCittNF9pZmRlZihfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgICAgICBfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgIFttNF93YXJuaW5nKFtVbmtub3duICQxIG9wdGlvbiAnJDInXSldKVtdZG5sCitdKQorCisKKyMgX0xUX0lGX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLVNFVCBpZiBPUFRJT04gaXMgc2V0LCBJRi1OT1QtU0VUIG90aGVyd2lzZS4KK200X2RlZmluZShbX0xUX0lGX09QVElPTl0sCitbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSksIFskM10sIFskNF0pXSkKKworCisjIF9MVF9VTkxFU1NfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCwgSUYtTk9ULVNFVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLU5PVC1TRVQgdW5sZXNzIGFsbCBvcHRpb25zIGluIE9QVElPTi1MSVNUIGZvciBNQUNSTy1OQU1FCisjIGFyZSBzZXQuCittNF9kZWZpbmUoW19MVF9VTkxFU1NfT1BUSU9OU10sCitbbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisJICAgIFttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKSwKKwkJICAgICAgW200X2RlZmluZShbJDBfZm91bmRdKV0pXSlbXWRubAorbTRfaWZkZWYoWyQwX2ZvdW5kXSwgW200X3VuZGVmaW5lKFskMF9mb3VuZF0pXSwgWyQzCitdKVtdZG5sCitdKQorCisKKyMgX0xUX1NFVF9PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9QVElPTi1MSVNUIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgTGlidG9vbCBvcHRpb25zIGFzc29jaWF0ZWQKKyMgd2l0aCBNQUNSTy1OQU1FLiAgSWYgYW55IE9QVElPTiBoYXMgYSBtYXRjaGluZyBoYW5kbGVyIGRlY2xhcmVkIHdpdGgKKyMgTFRfT1BUSU9OX0RFRklORSwgZGlzcGF0Y2ggdG8gdGhhdCBtYWNybzsgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0CisjIHRoZSB1bmtub3duIG9wdGlvbiBhbmQgZXhpdC4KK200X2RlZnVuKFtfTFRfU0VUX09QVElPTlNdLAorWyMgU2V0IG9wdGlvbnMKK200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorICAgIFtfTFRfU0VUX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKV0pCisKK200X2lmKFskMV0sW0xUX0lOSVRdLFsKKyAgZG5sCisgIGRubCBTaW1wbHkgc2V0IHNvbWUgZGVmYXVsdCB2YWx1ZXMgKGkuZSBvZmYpIGlmIGJvb2xlYW4gb3B0aW9ucyB3ZXJlIG5vdAorICBkbmwgc3BlY2lmaWVkOgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49bm8KKyAgXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sIFtlbmFibGVfd2luMzJfZGxsPW5vCisgIF0pCisgIGRubAorICBkbmwgSWYgbm8gcmVmZXJlbmNlIHdhcyBtYWRlIHRvIHZhcmlvdXMgcGFpcnMgb2Ygb3Bwb3Npbmcgb3B0aW9ucywgdGhlbgorICBkbmwgd2UgcnVuIHRoZSBkZWZhdWx0IG1vZGUgaGFuZGxlciBmb3IgdGhlIHBhaXIuICBGb3IgZXhhbXBsZSwgaWYgbmVpdGhlcgorICBkbmwgJ3NoYXJlZCcgbm9yICdkaXNhYmxlLXNoYXJlZCcgd2FzIHBhc3NlZCwgd2UgZW5hYmxlIGJ1aWxkaW5nIG9mIHNoYXJlZAorICBkbmwgYXJjaGl2ZXMgYnkgZGVmYXVsdDoKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3NoYXJlZCBkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzdGF0aWMgZGlzYWJsZS1zdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUNdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbcGljLW9ubHkgbm8tcGljXSwgW19MVF9XSVRIX1BJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGwgZGlzYWJsZS1mYXN0LWluc3RhbGxdLAorCQkgICBbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbYWl4LXNvbmFtZT1haXggYWl4LXNvbmFtZT1ib3RoIGFpeC1zb25hbWU9c3ZyNF0sCisJCSAgIFtfTFRfV0lUSF9BSVhfU09OQU1FKFthaXhdKV0pCisgIF0pCitdKSMgX0xUX1NFVF9PUFRJT05TCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWNyb3MgdG8gaGFuZGxlIExUX0lOSVQgb3B0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIF9MVF9NQU5HTEVfREVGVU4oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9NQU5HTEVfREVGVU5dLAorW1tfTFRfT1BUSU9OX0RFRlVOX11tNF9icGF0c3Vic3QobTRfdG91cHBlcihbJDFfXyQyXSksIFtbXkEtWjAtOV9dXSwgW19dKV0pCisKKworIyBMVF9PUFRJT05fREVGSU5FKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBDT0RFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtMVF9PUFRJT05fREVGSU5FXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwgWyQzXSlbXWRubAorXSkjIExUX09QVElPTl9ERUZJTkUKKworCisjIGRsb3BlbgorIyAtLS0tLS0KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49eWVzCitdKQorCitBVV9ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rsb3Blbl0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSAnZGxvcGVuJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwgW10pCisKKworIyB3aW4zMi1kbGwKKyMgLS0tLS0tLS0tCisjIERlY2xhcmUgcGFja2FnZSBzdXBwb3J0IGZvciBidWlsZGluZyB3aW4zMiBkbGwncy4KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwKK1tlbmFibGVfd2luMzJfZGxsPXllcworCitjYXNlICRob3N0IGluCisqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotY2VnY2MqKQorICBBQ19DSEVDS19UT09MKEFTLCBhcywgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCisgIDs7Citlc2FjCisKK3Rlc3QgLXogIiRBUyIgJiYgQVM9YXMKK19MVF9ERUNMKFtdLCBbQVNdLCAgICAgIFsxXSwgW0Fzc2VtYmxlciBwcm9ncmFtXSlkbmwKKwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtPYmplY3QgZHVtcGVyIHByb2dyYW1dKWRubAorXSkjIHdpbjMyLWRsbAorCitBVV9ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSAnd2luMzItZGxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwgW10pCisKKworIyBfTFRfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZywgYW5kIHN1cHBvcnRzIHRoZSAnc2hhcmVkJyBhbmQKKyMgJ2Rpc2FibGUtc2hhcmVkJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyICd5ZXMnIG9yICdubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAneWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW3NoYXJlZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zaGFyZWRAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zaGFyZWQ9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zaGFyZWQ9XV9MVF9FTkFCTEVfU0hBUkVEX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfbGlidG9vbF9saWJzXSwgW2VuYWJsZV9zaGFyZWRdLCBbMF0sCisJW1doZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQorXSkjIF9MVF9FTkFCTEVfU0hBUkVECisKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFt5ZXNdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Rpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEKFtub10pXSkKKworIyBPbGQgbmFtZXM6CitBQ19ERUZVTihbQUNfRU5BQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBtNF9pZihbJDFdLCBbbm9dLCBbZGlzYWJsZS1dKVtzaGFyZWRdKQorXSkKKworQUNfREVGVU4oW0FDX0RJU0FCTEVfU0hBUkVEXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0pCitdKQorCitBVV9ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCitBVV9ERUZVTihbQU1fRElTQUJMRV9TSEFSRURdLCBbQUNfRElTQUJMRV9TSEFSRUQoJEApXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgW10pCitkbmwgQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW10pCisKKworCisjIF9MVF9FTkFCTEVfU1RBVElDKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXN0YXRpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgJ3N0YXRpYycgYW5kCisjICdkaXNhYmxlLXN0YXRpYycgTFRfSU5JVCBvcHRpb25zLgorIyBERUZBVUxUIGlzIGVpdGhlciAneWVzJyBvciAnbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gJ3llcycuCittNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDXSwKK1ttNF9kZWZpbmUoW19MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBbbTRfaWYoJDEsIG5vLCBubywgeWVzKV0pZG5sCitBQ19BUkdfRU5BQkxFKFtzdGF0aWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtc3RhdGljQDw6QD1QS0dTQDo+QF0sCisJW2J1aWxkIHN0YXRpYyBsaWJyYXJpZXMgQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9JGx0X3NhdmVfaWZzCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgIDs7CisgICAgZXNhY10sCisgICAgW2VuYWJsZV9zdGF0aWM9XV9MVF9FTkFCTEVfU1RBVElDX0RFRkFVTFQpCisKKyAgICBfTFRfREVDTChbYnVpbGRfb2xkX2xpYnNdLCBbZW5hYmxlX3N0YXRpY10sIFswXSwKKwlbV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCitdKSMgX0xUX0VOQUJMRV9TVEFUSUMKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtzdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUMoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGlzYWJsZS1zdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUMoW25vXSldKQorCisjIE9sZCBuYW1lczoKK0FDX0RFRlVOKFtBQ19FTkFCTEVfU1RBVElDXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW3N0YXRpY10pCitdKQorCitBQ19ERUZVTihbQUNfRElTQUJMRV9TVEFUSUNdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rpc2FibGUtc3RhdGljXSkKK10pCisKK0FVX0RFRlVOKFtBTV9FTkFCTEVfU1RBVElDXSwgW0FDX0VOQUJMRV9TVEFUSUMoJEApXSkKK0FVX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtBQ19ESVNBQkxFX1NUQVRJQygkQCldKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbXSkKKworCisKKyMgX0xUX0VOQUJMRV9GQVNUX0lOU1RBTEwoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtZmFzdC1pbnN0YWxsIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSAnZmFzdC1pbnN0YWxsJworIyBhbmQgJ2Rpc2FibGUtZmFzdC1pbnN0YWxsJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyICd5ZXMnIG9yICdubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAneWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW2Zhc3QtaW5zdGFsbF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mYXN0LWluc3RhbGxAPDpAPVBLR1NAOj5AXSwKKyAgICBbb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0kbHRfc2F2ZV9pZnMKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVCkKKworX0xUX0RFQ0woW2Zhc3RfaW5zdGFsbF0sIFtlbmFibGVfZmFzdF9pbnN0YWxsXSwgWzBdLAorCSBbV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uXSlkbmwKK10pIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTAorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQVVfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbZmFzdC1pbnN0YWxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAordGhlICdmYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK0FVX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1mYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgJ2Rpc2FibGUtZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKKworCisjIF9MVF9XSVRIX0FJWF9TT05BTUUoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS13aXRoLWFpeC1zb25hbWUgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBhaXgtc29uYW1lPWFpeCcKKyMgYW5kIGBhaXgtc29uYW1lPWJvdGgnIGFuZCBgYWl4LXNvbmFtZT1zdnI0JyBMVF9JTklUIG9wdGlvbnMuIERFRkFVTFQKKyMgaXMgZWl0aGVyIGBhaXgnLCBgYm90aCcgb3IgYHN2cjQnLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGFpeCcuCittNF9kZWZpbmUoW19MVF9XSVRIX0FJWF9TT05BTUVdLAorW200X2RlZmluZShbX0xUX1dJVEhfQUlYX1NPTkFNRV9ERUZBVUxUXSwgW200X2lmKCQxLCBzdnI0LCBzdnI0LCBtNF9pZigkMSwgYm90aCwgYm90aCwgYWl4KSldKWRubAorc2hhcmVkX2FyY2hpdmVfbWVtYmVyX3NwZWM9CitjYXNlICRob3N0LCRlbmFibGVfc2hhcmVkIGluCitwb3dlciotKi1haXhbWzUtOV1dKix5ZXMpCisgIEFDX01TR19DSEVDS0lORyhbd2hpY2ggdmFyaWFudCBvZiBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIHRvIHByb3ZpZGVdKQorICBBQ19BUkdfV0lUSChbYWl4LXNvbmFtZV0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtYWl4LXNvbmFtZT1haXh8c3ZyNHxib3RoXSwKKyAgICAgIFtzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIChha2EgIlNPTkFNRSIpIHZhcmlhbnQgdG8gcHJvdmlkZSBvbiBBSVgsIEA8OkBkZWZhdWx0PV1fTFRfV0lUSF9BSVhfU09OQU1FX0RFRkFVTFRbQDo+QC5dKV0sCisgICAgW2Nhc2UgJHdpdGh2YWwgaW4KKyAgICBhaXh8c3ZyNHxib3RoKQorICAgICAgOzsKKyAgICAqKQorICAgICAgQUNfTVNHX0VSUk9SKFtVbmtub3duIGFyZ3VtZW50IHRvIC0td2l0aC1haXgtc29uYW1lXSkKKyAgICAgIDs7CisgICAgZXNhYworICAgIGx0X2N2X3dpdGhfYWl4X3NvbmFtZT0kd2l0aF9haXhfc29uYW1lXSwKKyAgICBbQUNfQ0FDSEVfVkFMKFtsdF9jdl93aXRoX2FpeF9zb25hbWVdLAorICAgICAgW2x0X2N2X3dpdGhfYWl4X3NvbmFtZT1dX0xUX1dJVEhfQUlYX1NPTkFNRV9ERUZBVUxUKQorICAgIHdpdGhfYWl4X3NvbmFtZT0kbHRfY3Zfd2l0aF9haXhfc29uYW1lXSkKKyAgQUNfTVNHX1JFU1VMVChbJHdpdGhfYWl4X3NvbmFtZV0pCisgIGlmIHRlc3QgYWl4ICE9ICIkd2l0aF9haXhfc29uYW1lIjsgdGhlbgorICAgICMgRm9yIHRoZSBBSVggd2F5IG9mIG11bHRpbGliLCB3ZSBuYW1lIHRoZSBzaGFyZWQgYXJjaGl2ZSBtZW1iZXIKKyAgICAjIGJhc2VkIG9uIHRoZSBiaXR3aWR0aCB1c2VkLCB0cmFkaXRpb25hbGx5ICdzaHIubycgb3IgJ3Nocl82NC5vJywKKyAgICAjIGFuZCAnc2hyLmltcCcgb3IgJ3Nocl82NC5pbXAnLCByZXNwZWN0aXZlbHksIGZvciB0aGUgSW1wb3J0IEZpbGUuCisgICAgIyBFdmVuIHdoZW4gR05VIGNvbXBpbGVycyBpZ25vcmUgT0JKRUNUX01PREUgYnV0IG5lZWQgJy1tYWl4NjQnIGZsYWcsCisgICAgIyB0aGUgQUlYIHRvb2xjaGFpbiB3b3JrcyBiZXR0ZXIgd2l0aCBPQkpFQ1RfTU9ERSBzZXQgKGRlZmF1bHQgMzIpLgorICAgIGlmIHRlc3QgNjQgPSAiJHtPQkpFQ1RfTU9ERS0zMn0iOyB0aGVuCisgICAgICBzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz1zaHJfNjQKKyAgICBlbHNlCisgICAgICBzaGFyZWRfYXJjaGl2ZV9tZW1iZXJfc3BlYz1zaHIKKyAgICBmaQorICBmaQorICA7OworKikKKyAgd2l0aF9haXhfc29uYW1lPWFpeAorICA7OworZXNhYworCitfTFRfREVDTChbXSwgW3NoYXJlZF9hcmNoaXZlX21lbWJlcl9zcGVjXSwgWzBdLAorICAgIFtTaGFyZWQgYXJjaGl2ZSBtZW1iZXIgYmFzZW5hbWUsIGZvciBmaWxlbmFtZSBiYXNlZCBzaGFyZWQgbGlicmFyeSB2ZXJzaW9uaW5nIG9uIEFJWF0pZG5sCitdKSMgX0xUX1dJVEhfQUlYX1NPTkFNRQorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2FpeC1zb25hbWU9YWl4XSwgW19MVF9XSVRIX0FJWF9TT05BTUUoW2FpeF0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbYWl4LXNvbmFtZT1ib3RoXSwgW19MVF9XSVRIX0FJWF9TT05BTUUoW2JvdGhdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2FpeC1zb25hbWU9c3ZyNF0sIFtfTFRfV0lUSF9BSVhfU09OQU1FKFtzdnI0XSldKQorCisKKyMgX0xUX1dJVEhfUElDKFtNT0RFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSAncGljLW9ubHknIGFuZCAnbm8tcGljJworIyBMVF9JTklUIG9wdGlvbnMuCisjIE1PREUgaXMgZWl0aGVyICd5ZXMnIG9yICdubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAnYm90aCcuCittNF9kZWZpbmUoW19MVF9XSVRIX1BJQ10sCitbQUNfQVJHX1dJVEgoW3BpY10sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljQDw6QD1QS0dTQDo+QF0sCisJW3RyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIEA8OkBkZWZhdWx0PXVzZSBib3RoQDo+QF0pXSwKKyAgICBbbHRfcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICR3aXRodmFsIGluCisgICAgeWVzfG5vKSBwaWNfbW9kZT0kd2l0aHZhbCA7OworICAgICopCisgICAgICBwaWNfbW9kZT1kZWZhdWx0CisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKKyAgICAgIGZvciBsdF9wa2cgaW4gJHdpdGh2YWw7IGRvCisJSUZTPSRsdF9zYXZlX2lmcworCWlmIHRlc3QgIlgkbHRfcGtnIiA9ICJYJGx0X3AiOyB0aGVuCisJICBwaWNfbW9kZT15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbcGljX21vZGU9bTRfZGVmYXVsdChbJDFdLCBbZGVmYXVsdF0pXSkKKworX0xUX0RFQ0woW10sIFtwaWNfbW9kZV0sIFswXSwgW1doYXQgdHlwZSBvZiBvYmplY3RzIHRvIGJ1aWxkXSlkbmwKK10pIyBfTFRfV0lUSF9QSUMKKworTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtwaWMtb25seV0sIFtfTFRfV0lUSF9QSUMoW3llc10pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbbm8tcGljXSwgW19MVF9XSVRIX1BJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWU6CitBVV9ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKK1tfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtwaWMtb25seV0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSAncGljLW9ubHknIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwgW10pCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBMVERMX0lOSVQgT3B0aW9ucyAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbbm9ucmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbbm9ucmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3JlY3Vyc2l2ZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9NT0RFXSwgW3JlY3Vyc2l2ZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtzdWJwcm9qZWN0XSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbc3VicHJvamVjdF0pXSkKKworbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW10pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbaW5zdGFsbGFibGVdLAorCQkgW200X2RlZmluZShbX0xURExfVFlQRV0sIFtpbnN0YWxsYWJsZV0pXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtjb252ZW5pZW5jZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2NvbnZlbmllbmNlXSldKQpkaWZmIC0tZ2l0IGEvZGlzdDIvbTQvbHRzdWdhci5tNCBiL2Rpc3QyL200L2x0c3VnYXIubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhiYzkzNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL200L2x0c3VnYXIubTQKQEAgLTAsMCArMSwxMjQgQEAKKyMgbHRzdWdhci5tNCAtLSBsaWJ0b29sIG00IGJhc2UgbGF5ZXIuICAgICAgICAgICAgICAgICAgICAgICAgIC0qLUF1dG9jb25mLSotCisjCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCAyMDA3LTIwMDgsIDIwMTEtMjAxNSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKKyMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA2IGx0c3VnYXIubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVFNVR0FSX1ZFUlNJT05dLCBbbTRfaWYoWzAuMV0pXSkKKworCisjIGx0X2pvaW4oU0VQLCBBUkcxLCBbQVJHMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgQVJHMVNFUEFSRzIuLi5TRVBBUkduLCBvbWl0dGluZyBbXSBhcmd1bWVudHMgYW5kIHRoZWlyCisjIGFzc29jaWF0ZWQgc2VwYXJhdG9yLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfam9pbiBmcm9tIEF1dG9jb25mIDIuNjIsIHNpbmNlIGFsbCBlYXJsaWVyCisjIHZlcnNpb25zIGluIG00c3VnYXIgaGFkIGJ1Z3MuCittNF9kZWZpbmUoW2x0X2pvaW5dLAorW200X2lmKFskI10sIFsxXSwgW10sCisgICAgICAgWyQjXSwgWzJdLCBbWyQyXV0sCisgICAgICAgW200X2lmKFskMl0sIFtdLCBbXSwgW1skMl1fXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKK200X2RlZmluZShbX2x0X2pvaW5dLAorW200X2lmKFskIyQyXSwgWzJdLCBbXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQxJDJdXSkkMChbJDFdLCBtNF9zaGlmdChtNF9zaGlmdCgkQCkpKV0pXSkKKworCisjIGx0X2NhcihMSVNUKQorIyBsdF9jZHIoTElTVCkKKyMgLS0tLS0tLS0tLS0tCisjIE1hbmlwdWxhdGUgbTQgbGlzdHMuCisjIFRoZXNlIG1hY3JvcyBhcmUgbmVjZXNzYXJ5IGFzIGxvbmcgYXMgd2lsbCBzdGlsbCBuZWVkIHRvIHN1cHBvcnQKKyMgQXV0b2NvbmYtMi41OSwgd2hpY2ggcXVvdGVzIGRpZmZlcmVudGx5LgorbTRfZGVmaW5lKFtsdF9jYXJdLCBbWyQxXV0pCittNF9kZWZpbmUoW2x0X2Nkcl0sCitbbTRfaWYoWyQjXSwgMCwgW200X2ZhdGFsKFskMDogY2Fubm90IGJlIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50c10pXSwKKyAgICAgICBbJCNdLCAxLCBbXSwKKyAgICAgICBbbTRfZHF1b3RlKG00X3NoaWZ0KCRAKSldKV0pCittNF9kZWZpbmUoW2x0X3VucXVvdGVdLCAkMSkKKworCisjIGx0X2FwcGVuZChNQUNSTy1OQU1FLCBTVFJJTkcsIFtTRVBBUkFUT1JdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzICdTRVBBUkFUT1InJ1NUUklORycuCisjIE5vdGUgdGhhdCBuZWl0aGVyIFNFUEFSQVRPUiBub3IgU1RSSU5HIGFyZSBleHBhbmRlZDsgdGhleSBhcmUgYXBwZW5kZWQKKyMgdG8gTUFDUk8tTkFNRSBhcyBpcyAobGVhdmluZyB0aGUgZXhwYW5zaW9uIGZvciB3aGVuIE1BQ1JPLU5BTUUgaXMgaW52b2tlZCkuCisjIE5vIFNFUEFSQVRPUiBpcyBvdXRwdXQgaWYgTUFDUk8tTkFNRSB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQgKGRpZmZlcmVudAorIyB0aGFuIGRlZmluZWQgYW5kIGVtcHR5KS4KKyMKKyMgVGhpcyBtYWNybyBpcyBuZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gQXV0b2NvbmYgMi42Miwgc2luY2UgZWFybGllcgorIyB2ZXJzaW9ucyBvZiBtNHN1Z2FyIG1pc3Rha2VubHkgZXhwYW5kZWQgU0VQQVJBVE9SIGJ1dCBub3QgU1RSSU5HLgorbTRfZGVmaW5lKFtsdF9hcHBlbmRdLAorW200X2RlZmluZShbJDFdLAorCSAgIG00X2lmZGVmKFskMV0sIFttNF9kZWZuKFskMV0pWyQzXV0pWyQyXSldKQorCisKKworIyBsdF9jb21iaW5lKFNFUCwgUFJFRklYLUxJU1QsIElORklYLCBTVUZGSVgxLCBbU1VGRklYMi4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBhIFNFUCBkZWxpbWl0ZWQgbGlzdCBvZiBhbGwgcGFpcmVkIGNvbWJpbmF0aW9ucyBvZiBlbGVtZW50cyBvZgorIyBQUkVGSVgtTElTVCB3aXRoIFNVRkZJWDEgdGhyb3VnaCBTVUZGSVhuLiAgRWFjaCBlbGVtZW50IG9mIHRoZSBsaXN0CisjIGhhcyB0aGUgZm9ybSBQUkVGSVhtSU5GSVhTVUZGSVhuLgorIyBOZWVkZWQgdW50aWwgd2UgY2FuIHJlbHkgb24gbTRfY29tYmluZSBhZGRlZCBpbiBBdXRvY29uZiAyLjYyLgorbTRfZGVmaW5lKFtsdF9jb21iaW5lXSwKK1ttNF9pZihtNF9ldmFsKFskIyA+IDNdKSwgWzFdLAorICAgICAgIFttNF9wdXNoZGVmKFtfTHRfc2VwXSwgW200X2RlZmluZShbX0x0X3NlcF0sIG00X2RlZm4oW2x0X2Nhcl0pKV0pXV1kbmwKK1tbbTRfZm9yZWFjaChbX0x0X3ByZWZpeF0sIFskMl0sCisJICAgICBbbTRfZm9yZWFjaChbX0x0X3N1ZmZpeF0sCisJCV1tNF9kcXVvdGUobTRfZHF1b3RlKG00X3NoaWZ0KG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpKSlbLAorCVtfTHRfc2VwKFskMV0pW11tNF9kZWZuKFtfTHRfcHJlZml4XSlbJDNdbTRfZGVmbihbX0x0X3N1ZmZpeF0pXSldKV0pXSkKKworCisjIGx0X2lmX2FwcGVuZF91bmlxKE1BQ1JPLU5BTUUsIFZBUk5BTUUsIFtTRVBBUkFUT1JdLCBbVU5JUV0sIFtOT1QtVU5JUV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmZiBNQUNSTy1OQU1FIGRvZXMgbm90IHlldCBjb250YWluIFZBUk5BTUUsIHRoZW4gYXBwZW5kIGl0IChkZWxpbWl0ZWQKKyMgYnkgU0VQQVJBVE9SIGlmIHN1cHBsaWVkKSBhbmQgZXhwYW5kIFVOSVEsIGVsc2UgTk9ULVVOSVEuCittNF9kZWZpbmUoW2x0X2lmX2FwcGVuZF91bmlxXSwKK1ttNF9pZmRlZihbJDFdLAorCSAgW200X2lmKG00X2luZGV4KFskM11tNF9kZWZuKFskMV0pWyQzXSwgWyQzJDIkM10pLCBbLTFdLAorCQkgW2x0X2FwcGVuZChbJDFdLCBbJDJdLCBbJDNdKSQ0XSwKKwkJIFskNV0pXSwKKwkgIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0pXSkKKworCisjIGx0X2RpY3RfYWRkKERJQ1QsIEtFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkXSwKK1ttNF9kZWZpbmUoWyQxKCQyKV0sIFskM10pXSkKKworCisjIGx0X2RpY3RfYWRkX3N1YmtleShESUNULCBLRVksIFNVQktFWSwgVkFMVUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfYWRkX3N1YmtleV0sCitbbTRfZGVmaW5lKFskMSgkMjokMyldLCBbJDRdKV0pCisKKworIyBsdF9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9mZXRjaF0sCitbbTRfaWZ2YWwoWyQzXSwKKwltNF9pZmRlZihbJDEoJDI6JDMpXSwgW200X2RlZm4oWyQxKCQyOiQzKV0pXSksCisgICAgbTRfaWZkZWYoWyQxKCQyKV0sIFttNF9kZWZuKFskMSgkMildKV0pKV0pCisKKworIyBsdF9pZl9kaWN0X2ZldGNoKERJQ1QsIEtFWSwgW1NVQktFWV0sIFZBTFVFLCBJRi1UUlVFLCBbSUYtRkFMU0VdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9pZl9kaWN0X2ZldGNoXSwKK1ttNF9pZihsdF9kaWN0X2ZldGNoKFskMV0sIFskMl0sIFskM10pLCBbJDRdLAorCVskNV0sCisgICAgWyQ2XSldKQorCisKKyMgbHRfZGljdF9maWx0ZXIoRElDVCwgW1NVQktFWV0sIFZBTFVFLCBbU0VQQVJBVE9SXSwgS0VZLCBbLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGljdF9maWx0ZXJdLAorW200X2lmKFskNV0sIFtdLCBbXSwKKyAgW2x0X2pvaW4obTRfcXVvdGUobTRfZGVmYXVsdChbJDRdLCBbWywgXV0pKSwKKyAgICAgICAgICAgbHRfdW5xdW90ZShtNF9zcGxpdChtNF9ub3JtYWxpemUobTRfZm9yZWFjaChfTHRfa2V5LCBsdF9jYXIoW200X3NoaWZ0big0LCAkQCldKSwKKwkJICAgICAgW2x0X2lmX2RpY3RfZmV0Y2goWyQxXSwgX0x0X2tleSwgWyQyXSwgWyQzXSwgW19MdF9rZXkgXSldKSkpKSldKVtdZG5sCitdKQpkaWZmIC0tZ2l0IGEvZGlzdDIvbTQvbHR2ZXJzaW9uLm00IGIvZGlzdDIvbTQvbHR2ZXJzaW9uLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMDRiNTIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9tNC9sdHZlcnNpb24ubTQKQEAgLTAsMCArMSwyMyBAQAorIyBsdHZlcnNpb24ubTQgLS0gdmVyc2lvbiBudW1iZXJzCQkJLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAgIFdyaXR0ZW4gYnkgU2NvdHQgSmFtZXMgUmVtbmFudCwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBzZXJpYWwgNDE3OSBsdHZlcnNpb24ubTQKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wKKworbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40LjZdKQorbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzIuNC42XSkKKworQUNfREVGVU4oW0xUVkVSU0lPTl9WRVJTSU9OXSwKK1ttYWNyb192ZXJzaW9uPScyLjQuNicKK21hY3JvX3JldmlzaW9uPScyLjQuNicKK19MVF9ERUNMKCwgbWFjcm9fdmVyc2lvbiwgMCwgW1doaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD9dKQorX0xUX0RFQ0woLCBtYWNyb19yZXZpc2lvbiwgMCkKK10pCmRpZmYgLS1naXQgYS9kaXN0Mi9tNC9sdH5vYnNvbGV0ZS5tNCBiL2Rpc3QyL200L2x0fm9ic29sZXRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YjI2ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9tNC9sdH5vYnNvbGV0ZS5tNApAQCAtMCwwICsxLDk5IEBACisjIGx0fm9ic29sZXRlLm00IC0tIGFjbG9jYWwgc2F0aXNmeWluZyBvYnNvbGV0ZSBkZWZpbml0aW9ucy4gICAgLSotQXV0b2NvbmYtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSwgMjAwNywgMjAwOSwgMjAxMS0yMDE1IEZyZWUgU29mdHdhcmUKKyMgICBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0LgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDUgbHR+b2Jzb2xldGUubTQKKworIyBUaGVzZSBleGlzdCBlbnRpcmVseSB0byBmb29sIGFjbG9jYWwgd2hlbiBib290c3RyYXBwaW5nIGxpYnRvb2wuCisjCisjIEluIHRoZSBwYXN0IGxpYnRvb2wubTQgaGFzIHByb3ZpZGVkIG1hY3JvcyB2aWEgQUNfREVGVU4gKG9yIEFVX0RFRlVOKSwKKyMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCisjIGV4cG9ydGVkIEFQSSwgb3IgbW92ZWQgdG8gQXV0b2NvbmYgb3IgQXV0b21ha2Ugd2hlcmUgdGhleSBiZWxvbmcuCisjCisjIFRoZSB0cm91YmxlIGlzLCBhY2xvY2FsIGlzIGEgYml0IHRoaWNrLiAgSXQnbGwgc2VlIHRoZSBvbGQgQUNfREVGVU4KKyMgaW4gL3Vzci9zaGFyZS9hY2xvY2FsL2xpYnRvb2wubTQgYW5kIHJlbWVtYmVyIGl0LCB0aGVuIHdoZW4gaXQgc2VlcyB1cworIyB1c2luZyBhIG1hY3JvIHdpdGggdGhlIHNhbWUgbmFtZSBpbiBvdXIgbG9jYWwgbTQvbGlidG9vbC5tNCBpdCdsbAorIyBwdWxsIHRoZSBvbGQgbGlidG9vbC5tNCBpbiAoaXQgZG9lc24ndCBzZWUgb3VyIHNoaW55IG5ldyBtNF9kZWZpbmUKKyMgYW5kIGRvZXNuJ3Qga25vdyBhYm91dCBBdXRvY29uZiBtYWNyb3MgYXQgYWxsLikKKyMKKyMgU28gd2UgcHJvdmlkZSB0aGlzIGZpbGUsIHdoaWNoIGhhcyBhIHNpbGx5IGZpbGVuYW1lIHNvIGl0J3MgYWx3YXlzCisjIGluY2x1ZGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgcHJvdmlkZXMgYWNsb2NhbCB3aXRoIHRoZQorIyBBQ19ERUZVTnMgaXQgd2FudHMsIGJ1dCB3aGVuIG00IHByb2Nlc3NlcyBpdCwgaXQgZG9lc24ndCBkbyBhbnl0aGluZworIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgorIyBXZSB1c2UgQUNfREVGVU4gb3ZlciBBVV9ERUZVTiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFjbG9jYWwtMS42LgorIworIyBBbnl0aW1lIHdlIHdpdGhkcmF3IGFuIEFDX0RFRlVOIG9yIEFVX0RFRlVOLCByZW1lbWJlciB0byBhZGQgaXQgaGVyZS4KKyMgWWVzLCB0aGF0IG1lYW5zIGV2ZXJ5IG5hbWUgb25jZSB0YWtlbiB3aWxsIG5lZWQgdG8gcmVtYWluIGhlcmUgdW50aWwKKyMgd2UgZ2l2ZSB1cCBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbnMgYmVmb3JlIDEuNywgYXQgd2hpY2ggcG9pbnQKKyMgd2UgbmVlZCB0byBrZWVwIG9ubHkgdGhvc2UgbmFtZXMgd2hpY2ggd2Ugc3RpbGwgcmVmZXIgdG8uCisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRPQlNPTEVURV9WRVJTSU9OXSwgW200X2lmKFsxXSldKQorCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSldKQorbTRfaWZuZGVmKFtBQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbQUNfUFJPR19FR1JFUF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdLAlbQUNfREVGVU4oW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU0hFTExfSU5JVF0sCQlbQUNfREVGVU4oW19MVF9BQ19TSEVMTF9JTklUXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0xJQlBBVEhfQUlYXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0xJQlBBVEhfQUlYXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19MVE1BSU5dLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19MVE1BSU5dKV0pCittNF9pZm5kZWYoW19MVF9BQ19UQUdWQVJdLAkJW0FDX0RFRlVOKFtfTFRfQUNfVEFHVkFSXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX0VOQUJMRV9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19MVERMX0VOQUJMRV9JTlNUQUxMXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX1BSRU9QRU5dLAkJW0FDX0RFRlVOKFtBQ19MVERMX1BSRU9QRU5dKV0pCittNF9pZm5kZWYoW19MVF9BQ19TWVNfQ09NUElMRVJdLAlbQUNfREVGVU4oW19MVF9BQ19TWVNfQ09NUElMRVJdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MT0NLXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xPQ0tdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX09MRF9BUkNISVZFXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0sCVtBQ19ERUZVTihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NDX0NfT10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NDX0NfT10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfT0JKRElSXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9PQkpESVJdKV0pCittNF9pZm5kZWYoW0FDX0xURExfT0JKRElSXSwJCVtBQ19ERUZVTihbQUNfTFRETF9PQkpESVJdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdKV0pCittNF9pZm5kZWYoW0FDX1BBVEhfTUFHSUNdLAkJW0FDX0RFRlVOKFtBQ19QQVRIX01BR0lDXSldKQorbTRfaWZuZGVmKFtBQ19QUk9HX0xEX0dOVV0sCQlbQUNfREVGVU4oW0FDX1BST0dfTERfR05VXSldKQorbTRfaWZuZGVmKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSwJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSldKQorbTRfaWZuZGVmKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0sCVtBQ19ERUZVTihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUNdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUNdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19MRF9TSExJQlNdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9TSExJQlNdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUE9TVERFUF9QUkVERVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUE9TVERFUF9QUkVERVBdKV0pCittNF9pZm5kZWYoW0xUX0FDX1BST0dfRUdSRVBdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX0VHUkVQXSldKQorbTRfaWZuZGVmKFtMVF9BQ19QUk9HX1NFRF0sCQlbQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSldKQorbTRfaWZuZGVmKFtfTFRfQ0NfQkFTRU5BTUVdLAkJW0FDX0RFRlVOKFtfTFRfQ0NfQkFTRU5BTUVdKV0pCittNF9pZm5kZWYoW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSldKQorbTRfaWZuZGVmKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwJW0FDX0RFRlVOKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSldKQorbTRfaWZuZGVmKFtfQUNfUFJPR19MSUJUT09MXSwJCVtBQ19ERUZVTihbX0FDX1BST0dfTElCVE9PTF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TRVRVUF0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU0VUVVBdKV0pCittNF9pZm5kZWYoW19MVF9BQ19DSEVDS19ETEZDTl0sCQlbQUNfREVGVU4oW19MVF9BQ19DSEVDS19ETEZDTl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVEFHQ09ORklHXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAlbQUNfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N10sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX1JDX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9DT05GSUddLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0ZJTEVfTFRETExfQ10sCVtBQ19ERUZVTihbX0xUX0FDX0ZJTEVfTFRETExfQ10pXSkKK200X2lmbmRlZihbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdLAlbQUNfREVGVU4oW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfUFJPR19DWFhDUFBdLAkJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19DWFhDUFBdKV0pCittNF9pZm5kZWYoW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSwJW0FDX0RFRlVOKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAlbQUNfREVGVU4oW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19GNzddKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0ZDXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfRkNdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0NYWF0sCQlbQUNfREVGVU4oW19MVF9QUk9HX0NYWF0pXSkKZGlmZiAtLWdpdCBhL2Rpc3QyL200L3BjcmUyX3Zpc2liaWxpdHkubTQgYi9kaXN0Mi9tNC9wY3JlMl92aXNpYmlsaXR5Lm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MGYyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9tNC9wY3JlMl92aXNpYmlsaXR5Lm00CkBAIC0wLDAgKzEsODcgQEAKKyMgdmlzaWJpbGl0eS5tNCBzZXJpYWwgNCAoZ2V0dGV4dC0wLjE4LjIpCitkbmwgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA4LCAyMDEwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitkbmwgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2RubCBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorZG5sIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworZG5sIEZyb20gQnJ1bm8gSGFpYmxlLgorCitkbmwgVGVzdHMgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24KK2RubCAtZnZpc2liaWxpdHk9aGlkZGVuIGFuZCB0aGUgZnVuY3Rpb24gYW5kIHZhcmlhYmxlIGF0dHJpYnV0ZXMKK2RubCBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiaGlkZGVuIikpKSBhbmQKK2RubCBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiZGVmYXVsdCIpKSkuCitkbmwgRG9lcyAqbm90KiB0ZXN0IGZvciBfX3Zpc2liaWxpdHlfXygicHJvdGVjdGVkIikgLSB3aGljaCBoYXMgdHJpY2t5Citkbmwgc2VtYW50aWNzIChzZWUgdGhlICd2aXNtYWluJyB0ZXN0IGluIGdsaWJjKSBhbmQgZG9lcyBub3QgZXhpc3QgZS5nLiBvbgorZG5sIE1hY09TIFguCitkbmwgRG9lcyAqbm90KiB0ZXN0IGZvciBfX3Zpc2liaWxpdHlfXygiaW50ZXJuYWwiKSAtIHdoaWNoIGhhcyBwcm9jZXNzb3IKK2RubCBkZXBlbmRlbnQgc2VtYW50aWNzLgorZG5sIERvZXMgKm5vdCogdGVzdCBmb3IgI3ByYWdtYSBHQ0MgdmlzaWJpbGl0eSBwdXNoKGhpZGRlbikgLSB3aGljaCBpcworZG5sICJyZWFsbHkgb25seSByZWNvbW1lbmRlZCBmb3IgbGVnYWN5IGNvZGUiLgorZG5sIFNldCB0aGUgdmFyaWFibGUgQ0ZMQUdfVklTSUJJTElUWS4KK2RubCBEZWZpbmVzIGFuZCBzZXRzIHRoZSB2YXJpYWJsZSBIQVZFX1ZJU0lCSUxJVFkuCisKK2RubCBNb2RpZmllZCB0byBmaXQgd2l0aCBQQ1JFIGJ1aWxkIGVudmlyb25tZW50IGJ5IENyaXN0aWFuIFJvZHLDrWd1ZXouCitkbmwgQWRqdXN0ZWQgZm9yIFBDUkUyIGJ5IFBICisKK0FDX0RFRlVOKFtQQ1JFMl9WSVNJQklMSVRZXSwKK1sKKyAgQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pCisgIFZJU0lCSUxJVFlfQ0ZMQUdTPQorICBWSVNJQklMSVRZX0NYWEZMQUdTPQorICBIQVZFX1ZJU0lCSUxJVFk9MAorICBpZiB0ZXN0IC1uICIkR0NDIjsgdGhlbgorICAgIGRubCBGaXJzdCwgY2hlY2sgd2hldGhlciAtV2Vycm9yIGNhbiBiZSBhZGRlZCB0byB0aGUgY29tbWFuZCBsaW5lLCBvcgorICAgIGRubCB3aGV0aGVyIGl0IGxlYWRzIHRvIGFuIGVycm9yIGJlY2F1c2Ugb2Ygc29tZSBvdGhlciBvcHRpb24gdGhhdCB0aGUKKyAgICBkbmwgdXNlciBoYXMgcHV0IGludG8gJENDICRDRkxBR1MgJENQUEZMQUdTLgorICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgLVdlcnJvciBvcHRpb24gaXMgdXNhYmxlXSkKKyAgICBBQ19DQUNIRV9WQUwoW3BjcmUyX2N2X2NjX3Zpc193ZXJyb3JdLCBbCisgICAgICBwY3JlMl9zYXZlX0NGTEFHUz0iJENGTEFHUyIKKyAgICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIgorICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSldLAorICAgICAgICBbcGNyZTJfY3ZfY2NfdmlzX3dlcnJvcj15ZXNdLAorICAgICAgICBbcGNyZTJfY3ZfY2NfdmlzX3dlcnJvcj1ub10pCisgICAgICBDRkxBR1M9IiRwY3JlMl9zYXZlX0NGTEFHUyJdKQorICAgIEFDX01TR19SRVNVTFQoWyRwY3JlMl9jdl9jY192aXNfd2Vycm9yXSkKKyAgICBkbmwgTm93IGNoZWNrIHdoZXRoZXIgdmlzaWJpbGl0eSBkZWNsYXJhdGlvbnMgYXJlIHN1cHBvcnRlZC4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzaW1wbGUgdmlzaWJpbGl0eSBkZWNsYXJhdGlvbnNdKQorICAgIEFDX0NBQ0hFX1ZBTChbcGNyZTJfY3ZfY2NfdmlzaWJpbGl0eV0sIFsKKyAgICAgIHBjcmUyX3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1mdmlzaWJpbGl0eT1oaWRkZW4iCisgICAgICBkbmwgV2UgdXNlIHRoZSBvcHRpb24gLVdlcnJvciBhbmQgYSBmdW5jdGlvbiBkdW1teWZ1bmMsIGJlY2F1c2Ugb24gc29tZQorICAgICAgZG5sIHBsYXRmb3JtcyAoQ3lnd2luIDEuNykgdGhlIHVzZSBvZiAtZnZpc2liaWxpdHkgdHJpZ2dlcnMgYSB3YXJuaW5nCisgICAgICBkbmwgInZpc2liaWxpdHkgYXR0cmlidXRlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uOyBpZ25vcmVkIgorICAgICAgZG5sIGF0IHRoZSBmaXJzdCBmdW5jdGlvbiBkZWZpbml0aW9uIGluIGV2ZXJ5IGNvbXBpbGF0aW9uIHVuaXQsIGFuZCB3ZQorICAgICAgZG5sIGRvbid0IHdhbnQgdG8gdXNlIHRoZSBvcHRpb24gaW4gdGhpcyBjYXNlLgorICAgICAgaWYgdGVzdCAkcGNyZTJfY3ZfY2NfdmlzX3dlcnJvciA9IHllczsgdGhlbgorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciIKKyAgICAgIGZpCisgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgW1tleHRlcm4gX19hdHRyaWJ1dGVfXygoX192aXNpYmlsaXR5X18oImhpZGRlbiIpKSkgaW50IGhpZGRlbnZhcjsKKyAgICAgICAgICAgICBleHRlcm4gX19hdHRyaWJ1dGVfXygoX192aXNpYmlsaXR5X18oImRlZmF1bHQiKSkpIGludCBleHBvcnRlZHZhcjsKKyAgICAgICAgICAgICBleHRlcm4gX19hdHRyaWJ1dGVfXygoX192aXNpYmlsaXR5X18oImhpZGRlbiIpKSkgaW50IGhpZGRlbmZ1bmMgKHZvaWQpOworICAgICAgICAgICAgIGV4dGVybiBfX2F0dHJpYnV0ZV9fKChfX3Zpc2liaWxpdHlfXygiZGVmYXVsdCIpKSkgaW50IGV4cG9ydGVkZnVuYyAodm9pZCk7CisgICAgICAgICAgICAgdm9pZCBkdW1teWZ1bmMgKHZvaWQpIHt9CisgICAgICAgICAgIF1dLAorICAgICAgICAgICBbW11dKV0sCisgICAgICAgIFtwY3JlMl9jdl9jY192aXNpYmlsaXR5PXllc10sCisgICAgICAgIFtwY3JlMl9jdl9jY192aXNpYmlsaXR5PW5vXSkKKyAgICAgIENGTEFHUz0iJHBjcmUyX3NhdmVfQ0ZMQUdTIl0pCisgICAgQUNfTVNHX1JFU1VMVChbJHBjcmUyX2N2X2NjX3Zpc2liaWxpdHldKQorICAgIGlmIHRlc3QgJHBjcmUyX2N2X2NjX3Zpc2liaWxpdHkgPSB5ZXM7IHRoZW4KKyAgICAgIFZJU0lCSUxJVFlfQ0ZMQUdTPSItZnZpc2liaWxpdHk9aGlkZGVuIgorICAgICAgVklTSUJJTElUWV9DWFhGTEFHUz0iLWZ2aXNpYmlsaXR5PWhpZGRlbiAtZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4iCisgICAgICBIQVZFX1ZJU0lCSUxJVFk9MQorICAgICAgQUNfREVGSU5FKFBDUkUyX0VYUF9ERUNMLCBbZXh0ZXJuIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSldLCBbdG8gbWFrZSBhIHN5bWJvbCB2aXNpYmxlXSkKKyAgICAgIEFDX0RFRklORShQQ1JFMl9FWFBfREVGTiwgW19fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSldLCBbdG8gbWFrZSBhIHN5bWJvbCB2aXNpYmxlXSkKKyAgICAgIEFDX0RFRklORShQQ1JFMlBPU0lYX0VYUF9ERUNMLCBbZXh0ZXJuIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSldLCBbdG8gbWFrZSBhIHN5bWJvbCB2aXNpYmxlXSkKKyAgICAgIEFDX0RFRklORShQQ1JFMlBPU0lYX0VYUF9ERUZOLCBbZXh0ZXJuIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiZGVmYXVsdCIpKSldLCBbdG8gbWFrZSBhIHN5bWJvbCB2aXNpYmxlXSkKKyAgICBmaQorICBmaQorICBBQ19TVUJTVChbVklTSUJJTElUWV9DRkxBR1NdKQorICBBQ19TVUJTVChbVklTSUJJTElUWV9DWFhGTEFHU10pCisgIEFDX1NVQlNUKFtIQVZFX1ZJU0lCSUxJVFldKQorICBBQ19ERUZJTkVfVU5RVU9URUQoW0hBVkVfVklTSUJJTElUWV0sIFskSEFWRV9WSVNJQklMSVRZXSwKKyAgICBbRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHNpbXBsZSB2aXNpYmlsaXR5IGRlY2xhcmF0aW9ucy5dKQorXSkKZGlmZiAtLWdpdCBhL2Rpc3QyL21pc3NpbmcgYi9kaXN0Mi9taXNzaW5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY2MmJiYWUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9taXNzaW5nCkBAIC0wLDAgKzEsMjE1IEBACisjISAvYmluL3NoCisjIENvbW1vbiB3cmFwcGVyIGZvciBhIGZldyBwb3RlbnRpYWxseSBtaXNzaW5nIEdOVSBwcm9ncmFtcy4KKworc2NyaXB0dmVyc2lvbj0yMDEzLTEwLTI4LjEzOyAjIFVUQworCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgRnJhbixjb2lzIFBpbmFyZCA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+LCAxOTk2LgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgZWNobyAxPiYyICJUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgIGV4aXQgMQorZmkKKworY2FzZSAkMSBpbgorCisgIC0taXMtbGlnaHR3ZWlnaHQpCisgICAgIyBVc2VkIGJ5IG91ciBhdXRvY29uZiBtYWNyb3MgdG8gY2hlY2sgd2hldGhlciB0aGUgYXZhaWxhYmxlIG1pc3NpbmcKKyAgICAjIHNjcmlwdCBpcyBtb2Rlcm4gZW5vdWdoLgorICAgIGV4aXQgMAorICAgIDs7CisKKyAgLS1ydW4pCisgICAgIyBCYWNrLWNvbXBhdCB3aXRoIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24gdXNlZCBieSBvbGRlciBhdXRvbWFrZS4KKyAgICBzaGlmdAorICAgIDs7CisKKyAgLWh8LS1ofC0taGV8LS1oZWx8LS1oZWxwKQorICAgIGVjaG8gIlwKKyQwIFtPUFRJT05dLi4uIFBST0dSQU0gW0FSR1VNRU5UXS4uLgorCitSdW4gJ1BST0dSQU0gW0FSR1VNRU5UXS4uLicsIHJldHVybmluZyBhIHByb3BlciBhZHZpY2Ugd2hlbiB0aGlzIGZhaWxzIGR1ZQordG8gUFJPR1JBTSBiZWluZyBtaXNzaW5nIG9yIHRvbyBvbGQuCisKK09wdGlvbnM6CisgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdAorICAtdiwgLS12ZXJzaW9uICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKKworU3VwcG9ydGVkIFBST0dSQU0gdmFsdWVzOgorICBhY2xvY2FsICAgYXV0b2NvbmYgIGF1dG9oZWFkZXIgICBhdXRvbTR0ZSAgYXV0b21ha2UgIG1ha2VpbmZvCisgIGJpc29uICAgICB5YWNjICAgICAgZmxleCAgICAgICAgIGxleCAgICAgICBoZWxwMm1hbgorCitWZXJzaW9uIHN1ZmZpeGVzIHRvIFBST0dSQU0gYXMgd2VsbCBhcyB0aGUgcHJlZml4ZXMgJ2dudS0nLCAnZ251JywgYW5kCisnZycgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyB0aGUgbmFtZS4KKworU2VuZCBidWcgcmVwb3J0cyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtdnwtLXZ8LS12ZXwtLXZlcnwtLXZlcnN8LS12ZXJzaXwtLXZlcnNpb3wtLXZlcnNpb24pCisgICAgZWNobyAibWlzc2luZyAkc2NyaXB0dmVyc2lvbiAoR05VIEF1dG9tYWtlKSIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtKikKKyAgICBlY2hvIDE+JjIgIiQwOiB1bmtub3duICckMScgb3B0aW9uIgorICAgIGVjaG8gMT4mMiAiVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICAgIGV4aXQgMQorICAgIDs7CisKK2VzYWMKKworIyBSdW4gdGhlIGdpdmVuIHByb2dyYW0sIHJlbWVtYmVyIGl0cyBleGl0IHN0YXR1cy4KKyIkQCI7IHN0PSQ/CisKKyMgSWYgaXQgc3VjY2VlZGVkLCB3ZSBhcmUgZG9uZS4KK3Rlc3QgJHN0IC1lcSAwICYmIGV4aXQgMAorCisjIEFsc28gZXhpdCBub3cgaWYgd2UgaXQgZmFpbGVkIChvciB3YXNuJ3QgZm91bmQpLCBhbmQgJy0tdmVyc2lvbicgd2FzCisjIHBhc3NlZDsgc3VjaCBhbiBvcHRpb24gaXMgcGFzc2VkIG1vc3QgbGlrZWx5IHRvIGRldGVjdCB3aGV0aGVyIHRoZQorIyBwcm9ncmFtIGlzIHByZXNlbnQgYW5kIHdvcmtzLgorY2FzZSAkMiBpbiAtLXZlcnNpb258LS1oZWxwKSBleGl0ICRzdDs7IGVzYWMKKworIyBFeGl0IGNvZGUgNjMgbWVhbnMgdmVyc2lvbiBtaXNtYXRjaC4gIFRoaXMgb2Z0ZW4gaGFwcGVucyB3aGVuIHRoZSB1c2VyCisjIHRyaWVzIHRvIHVzZSBhbiBhbmNpZW50IHZlcnNpb24gb2YgYSB0b29sIG9uIGEgZmlsZSB0aGF0IHJlcXVpcmVzIGEKKyMgbWluaW11bSB2ZXJzaW9uLgoraWYgdGVzdCAkc3QgLWVxIDYzOyB0aGVuCisgIG1zZz0icHJvYmFibHkgdG9vIG9sZCIKK2VsaWYgdGVzdCAkc3QgLWVxIDEyNzsgdGhlbgorICAjIFByb2dyYW0gd2FzIG1pc3NpbmcuCisgIG1zZz0ibWlzc2luZyBvbiB5b3VyIHN5c3RlbSIKK2Vsc2UKKyAgIyBQcm9ncmFtIHdhcyBmb3VuZCBhbmQgZXhlY3V0ZWQsIGJ1dCBmYWlsZWQuICBHaXZlIHVwLgorICBleGl0ICRzdAorZmkKKworcGVybF9VUkw9aHR0cDovL3d3dy5wZXJsLm9yZy8KK2ZsZXhfVVJMPWh0dHA6Ly9mbGV4LnNvdXJjZWZvcmdlLm5ldC8KK2dudV9zb2Z0d2FyZV9VUkw9aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlCisKK3Byb2dyYW1fZGV0YWlscyAoKQoreworICBjYXNlICQxIGluCisgICAgYWNsb2NhbHxhdXRvbWFrZSkKKyAgICAgIGVjaG8gIlRoZSAnJDEnIHByb2dyYW0gaXMgcGFydCBvZiB0aGUgR05VIEF1dG9tYWtlIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2F1dG9tYWtlPiIKKyAgICAgIGVjaG8gIkl0IGFsc28gcmVxdWlyZXMgR05VIEF1dG9jb25mLCBHTlUgbTQgYW5kIFBlcmwgaW4gb3JkZXIgdG8gcnVuOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9hdXRvY29uZj4iCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbTQvPiIKKyAgICAgIGVjaG8gIjwkcGVybF9VUkw+IgorICAgICAgOzsKKyAgICBhdXRvY29uZnxhdXRvbTR0ZXxhdXRvaGVhZGVyKQorICAgICAgZWNobyAiVGhlICckMScgcHJvZ3JhbSBpcyBwYXJ0IG9mIHRoZSBHTlUgQXV0b2NvbmYgcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYXV0b2NvbmYvPiIKKyAgICAgIGVjaG8gIkl0IGFsc28gcmVxdWlyZXMgR05VIG00IGFuZCBQZXJsIGluIG9yZGVyIHRvIHJ1bjoiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbTQvPiIKKyAgICAgIGVjaG8gIjwkcGVybF9VUkw+IgorICAgICAgOzsKKyAgZXNhYworfQorCitnaXZlX2FkdmljZSAoKQoreworICAjIE5vcm1hbGl6ZSBwcm9ncmFtIG5hbWUgdG8gY2hlY2sgZm9yLgorICBub3JtYWxpemVkX3Byb2dyYW09YGVjaG8gIiQxIiB8IHNlZCAnCisgICAgcy9eZ251LS8vOyB0CisgICAgcy9eZ251Ly87IHQKKyAgICBzL15nLy87IHQnYAorCisgIHByaW50ZiAnJXNcbicgIickMScgaXMgJG1zZy4iCisKKyAgY29uZmlndXJlX2RlcHM9Iidjb25maWd1cmUuYWMnIG9yIG00IGZpbGVzIGluY2x1ZGVkIGJ5ICdjb25maWd1cmUuYWMnIgorICBjYXNlICRub3JtYWxpemVkX3Byb2dyYW0gaW4KKyAgICBhdXRvY29uZiopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2NvbmZpZ3VyZS5hYycsIgorICAgICAgZWNobyAib3IgbTQgZmlsZXMgaW5jbHVkZWQgYnkgaXQuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvY29uZicKKyAgICAgIDs7CisgICAgYXV0b2hlYWRlciopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2FjY29uZmlnLmgnIG9yIgorICAgICAgZWNobyAiJGNvbmZpZ3VyZV9kZXBzLiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b2hlYWRlcicKKyAgICAgIDs7CisgICAgYXV0b21ha2UqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdNYWtlZmlsZS5hbScgb3IiCisgICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvbWFrZScKKyAgICAgIDs7CisgICAgYWNsb2NhbCopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgJ2FjaW5jbHVkZS5tNCcgb3IiCisgICAgICBlY2hvICIkY29uZmlndXJlX2RlcHMuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhY2xvY2FsJworICAgICAgOzsKKyAgIGF1dG9tNHRlKikKKyAgICAgIGVjaG8gIllvdSBtaWdodCBoYXZlIG1vZGlmaWVkIHNvbWUgbWFpbnRhaW5lciBmaWxlcyB0aGF0IHJlcXVpcmUiCisgICAgICBlY2hvICJ0aGUgJ2F1dG9tNHRlJyBwcm9ncmFtIHRvIGJlIHJlYnVpbHQuIgorICAgICAgcHJvZ3JhbV9kZXRhaWxzICdhdXRvbTR0ZScKKyAgICAgIDs7CisgICAgYmlzb24qfHlhY2MqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy55JyBmaWxlLiIKKyAgICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBHTlUgQmlzb24gcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYmlzb24vPiIKKyAgICAgIDs7CisgICAgbGV4KnxmbGV4KikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhICcubCcgZmlsZS4iCisgICAgICBlY2hvICJZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgRmFzdCBMZXhpY2FsIEFuYWx5emVyIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRmbGV4X1VSTD4iCisgICAgICA7OworICAgIGhlbHAybWFuKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kiIFwKKyAgICAgICAgICAgIm9mIGEgbWFuIHBhZ2UuIgorICAgICAgZWNobyAiWW91IG1heSB3YW50IHRvIGluc3RhbGwgdGhlIEdOVSBIZWxwMm1hbiBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9oZWxwMm1hbi8+IgorICAgIDs7CisgICAgbWFrZWluZm8qKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy50ZXhpJyBmaWxlLCBvciIKKyAgICAgIGVjaG8gImFueSBvdGhlciBmaWxlIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4iCisgICAgICBlY2hvICJZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBUZXhpbmZvIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML3RleGluZm8vPiIKKyAgICAgIGVjaG8gIlRoZSBzcHVyaW91cyBtYWtlaW5mbyBjYWxsIG1pZ2h0IGFsc28gYmUgdGhlIGNvbnNlcXVlbmNlIG9mIgorICAgICAgZWNobyAidXNpbmcgYSBidWdneSAnbWFrZScgKEFJWCwgRFUsIElSSVgpLCBpbiB3aGljaCBjYXNlIHlvdSBtaWdodCIKKyAgICAgIGVjaG8gIndhbnQgdG8gaW5zdGFsbCBHTlUgbWFrZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvbWFrZS8+IgorICAgICAgOzsKKyAgICAqKQorICAgICAgZWNobyAiWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUgcHJvcGVyIgorICAgICAgZWNobyAidG9vbHMgZm9yIGZ1cnRoZXIgaGFuZGxpbmcgdGhlbS4gIENoZWNrIHRoZSAnUkVBRE1FJyBmaWxlLCBpdCIKKyAgICAgIGVjaG8gIm9mdGVuIHRlbGxzIHlvdSBhYm91dCB0aGUgbmVlZGVkIHByZXJlcXVpc2l0ZXMgZm9yIGluc3RhbGxpbmciCisgICAgICBlY2hvICJ0aGlzIHBhY2thZ2UuICBZb3UgbWF5IGFsc28gcGVlayBhdCBhbnkgR05VIGFyY2hpdmUgc2l0ZSwgaW4iCisgICAgICBlY2hvICJjYXNlIHNvbWUgb3RoZXIgcGFja2FnZSBjb250YWlucyB0aGlzIG1pc3NpbmcgJyQxJyBwcm9ncmFtLiIKKyAgICAgIDs7CisgIGVzYWMKK30KKworZ2l2ZV9hZHZpY2UgIiQxIiB8IHNlZCAtZSAnMXMvXi9XQVJOSU5HOiAvJyBcCisgICAgICAgICAgICAgICAgICAgICAgIC1lICcyLCRzL14vICAgICAgICAgLycgPiYyCisKKyMgUHJvcGFnYXRlIHRoZSBjb3JyZWN0IGV4aXQgc3RhdHVzIChleHBlY3RlZCB0byBiZSAxMjcgZm9yIGEgcHJvZ3JhbQorIyBub3QgZm91bmQsIDYzIGZvciBhIHByb2dyYW0gdGhhdCBmYWlsZWQgZHVlIHRvIHZlcnNpb24gbWlzbWF0Y2gpLgorZXhpdCAkc3QKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC10aW1lLXpvbmU6ICJVVEMiCisjIHRpbWUtc3RhbXAtZW5kOiAiOyAjIFVUQyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvZGlzdDIvcGNyZTItY29uZmlnLmluIGIvZGlzdDIvcGNyZTItY29uZmlnLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzMjE2MGUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9wY3JlMi1jb25maWcuaW4KQEAgLTAsMCArMSwxMjEgQEAKKyMhL2Jpbi9zaAorCitwcmVmaXg9QHByZWZpeEAKK2V4ZWNfcHJlZml4PUBleGVjX3ByZWZpeEAKK2V4ZWNfcHJlZml4X3NldD1ubworCitjZmxhZ3M9IlstLWNmbGFnc10iCitsaWJzPQorCitpZiB0ZXN0IEBlbmFibGVfcGNyZTJfMTZAID0geWVzIDsgdGhlbgorICBsaWJzPSJbLS1saWJzMTZdICRsaWJzIgorZmkKKworaWYgdGVzdCBAZW5hYmxlX3BjcmUyXzMyQCA9IHllcyA7IHRoZW4KKyAgbGlicz0iWy0tbGliczMyXSAkbGlicyIKK2ZpCisKK2lmIHRlc3QgQGVuYWJsZV9wY3JlMl84QCA9IHllcyA7IHRoZW4KKyAgbGlicz0iWy0tbGliczhdIFstLWxpYnMtcG9zaXhdICRsaWJzIgorICBjZmxhZ3M9IiRjZmxhZ3MgWy0tY2ZsYWdzLXBvc2l4XSIKK2ZpCisKK3VzYWdlPSJVc2FnZTogcGNyZTItY29uZmlnIFstLXByZWZpeF0gWy0tZXhlYy1wcmVmaXhdIFstLXZlcnNpb25dICRsaWJzICRjZmxhZ3MiCisKK2lmIHRlc3QgJCMgLWVxIDA7IHRoZW4KKyAgICAgIGVjaG8gIiR7dXNhZ2V9IiAxPiYyCisgICAgICBleGl0IDEKK2ZpCisKK2xpYlI9CitjYXNlIGB1bmFtZSAtc2AgaW4KKyAgKlN1bk9TKikKKyAgbGliUj0iIC1SQGxpYmRpckAiCisgIDs7CisgICpCU0QqKQorICBsaWJSPSIgLVdsLC1SQGxpYmRpckAiCisgIDs7Citlc2FjCisKK2xpYlM9CitpZiB0ZXN0IEBsaWJkaXJAICE9IC91c3IvbGliIDsgdGhlbgorICBsaWJTPS1MQGxpYmRpckAKK2ZpCisKK3doaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgIGNhc2UgIiQxIiBpbgorICAtKj0qKSBvcHRhcmc9YGVjaG8gIiQxIiB8IHNlZCAncy9bLV9hLXpBLVowLTldKj0vLydgIDs7CisgICopIG9wdGFyZz0gOzsKKyAgZXNhYworCisgIGNhc2UgJDEgaW4KKyAgICAtLXByZWZpeD0qKQorICAgICAgcHJlZml4PSRvcHRhcmcKKyAgICAgIGlmIHRlc3QgJGV4ZWNfcHJlZml4X3NldCA9IG5vIDsgdGhlbgorICAgICAgICBleGVjX3ByZWZpeD0kb3B0YXJnCisgICAgICBmaQorICAgICAgOzsKKyAgICAtLXByZWZpeCkKKyAgICAgIGVjaG8gJHByZWZpeAorICAgICAgOzsKKyAgICAtLWV4ZWMtcHJlZml4PSopCisgICAgICBleGVjX3ByZWZpeD0kb3B0YXJnCisgICAgICBleGVjX3ByZWZpeF9zZXQ9eWVzCisgICAgICA7OworICAgIC0tZXhlYy1wcmVmaXgpCisgICAgICBlY2hvICRleGVjX3ByZWZpeAorICAgICAgOzsKKyAgICAtLXZlcnNpb24pCisgICAgICBlY2hvIEBQQUNLQUdFX1ZFUlNJT05ACisgICAgICA7OworICAgIC0tY2ZsYWdzKQorICAgICAgaWYgdGVzdCBAaW5jbHVkZWRpckAgIT0gL3Vzci9pbmNsdWRlIDsgdGhlbgorICAgICAgICBpbmNsdWRlcz0tSUBpbmNsdWRlZGlyQAorICAgICAgZmkKKyAgICAgIGVjaG8gJGluY2x1ZGVzIEBQQ1JFMl9TVEFUSUNfQ0ZMQUdACisgICAgICA7OworICAgIC0tY2ZsYWdzLXBvc2l4KQorICAgICAgaWYgdGVzdCBAZW5hYmxlX3BjcmUyXzhAID0geWVzIDsgdGhlbgorICAgICAgICBpZiB0ZXN0IEBpbmNsdWRlZGlyQCAhPSAvdXNyL2luY2x1ZGUgOyB0aGVuCisgICAgICAgICAgaW5jbHVkZXM9LUlAaW5jbHVkZWRpckAKKyAgICAgICAgZmkKKyAgICAgICAgZWNobyAkaW5jbHVkZXMgQFBDUkUyX1NUQVRJQ19DRkxBR0AKKyAgICAgIGVsc2UKKyAgICAgICAgZWNobyAiJHt1c2FnZX0iIDE+JjIKKyAgICAgIGZpCisgICAgICA7OworICAgIC0tbGlicy1wb3NpeCkKKyAgICAgIGlmIHRlc3QgQGVuYWJsZV9wY3JlMl84QCA9IHllcyA7IHRoZW4KKyAgICAgICAgZWNobyAkbGliUyRsaWJSIC1scGNyZTJwb3NpeCAtbHBjcmUyLTgKKyAgICAgIGVsc2UKKyAgICAgICAgZWNobyAiJHt1c2FnZX0iIDE+JjIKKyAgICAgIGZpCisgICAgICA7OworICAgIC0tbGliczgpCisgICAgICBpZiB0ZXN0IEBlbmFibGVfcGNyZTJfOEAgPSB5ZXMgOyB0aGVuCisgICAgICAgIGVjaG8gJGxpYlMkbGliUiAtbHBjcmUyLTgKKyAgICAgIGVsc2UKKyAgICAgICAgZWNobyAiJHt1c2FnZX0iIDE+JjIKKyAgICAgIGZpCisgICAgICA7OworICAgIC0tbGliczE2KQorICAgICAgaWYgdGVzdCBAZW5hYmxlX3BjcmUyXzE2QCA9IHllcyA7IHRoZW4KKyAgICAgICAgZWNobyAkbGliUyRsaWJSIC1scGNyZTItMTYKKyAgICAgIGVsc2UKKyAgICAgICAgZWNobyAiJHt1c2FnZX0iIDE+JjIKKyAgICAgIGZpCisgICAgICA7OworICAgIC0tbGliczMyKQorICAgICAgaWYgdGVzdCBAZW5hYmxlX3BjcmUyXzMyQCA9IHllcyA7IHRoZW4KKyAgICAgICAgZWNobyAkbGliUyRsaWJSIC1scGNyZTItMzIKKyAgICAgIGVsc2UKKyAgICAgICAgZWNobyAiJHt1c2FnZX0iIDE+JjIKKyAgICAgIGZpCisgICAgICA7OworICAgICopCisgICAgICBlY2hvICIke3VzYWdlfSIgMT4mMgorICAgICAgZXhpdCAxCisgICAgICA7OworICBlc2FjCisgIHNoaWZ0Citkb25lCmRpZmYgLS1naXQgYS9kaXN0Mi9wZXJsdGVzdC5zaCBiL2Rpc3QyL3Blcmx0ZXN0LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjljZjdiMTcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9wZXJsdGVzdC5zaApAQCAtMCwwICsxLDI5NyBAQAorIyEgL2Jpbi9zaAorCisjIFNjcmlwdCBmb3IgdGVzdGluZyByZWd1bGFyIGV4cHJlc3Npb25zIHdpdGggcGVybCB0byBjaGVjayB0aGF0IFBDUkUyIGhhbmRsZXMKKyMgdGhlbSB0aGUgc2FtZS4gVGhlIFBlcmwgY29kZSBoYXMgdG8gaGF2ZSAidXNlIHV0ZjgiIGFuZCAicmVxdWlyZSBFbmNvZGUiIGF0CisjIHRoZSBzdGFydCB3aGVuIHJ1bm5pbmcgVVRGLTggdGVzdHMsIGJ1dCAqbm90KiBmb3Igbm9uLXV0ZjggdGVzdHMuIChUaGUKKyMgInJlcXVpcmUiIHdvdWxkIGFjdHVhbGx5IGJlIE9LIGZvciBub24tdXRmOC10ZXN0cywgYnV0IGlzIG5vdCBhbHdheXMKKyMgaW5zdGFsbGVkLCBzbyB0aGlzIHdheSB0aGUgc2NyaXB0IHdpbGwgYWx3YXlzIHJ1biBmb3IgdGhlc2UgdGVzdHMuKQorIworIyBUaGUgZGVzaXJlZCBlZmZlY3QgaXMgYWNoaWV2ZWQgYnkgbWFraW5nIHRoaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBwYXNzZXMgdGhlCisjIFBlcmwgc2NyaXB0IHRvIFBlcmwgdGhyb3VnaCBhIHBpcGUuIElmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyAiLXV0ZjgiLCBhCisjIHN1aXRhYmxlIHByZWZpeCBpcyBzZXQgdXAuCisjCisjIFRoZSByZW1haW5pbmcgYXJndW1lbnRzLCBpZiBhbnksIGFyZSBwYXNzZWQgdG8gUGVybC4gVGhleSBhcmUgYW4gaW5wdXQgZmlsZQorIyBhbmQgYW4gb3V0cHV0IGZpbGUuIElmIHRoZXJlIGlzIG9uZSBhcmd1bWVudCwgdGhlIG91dHB1dCBpcyB3cml0dGVuIHRvCisjIFNURE9VVC4gSWYgUGVybCByZWNlaXZlcyBubyBhcmd1bWVudHMsIGl0IG9wZW5zIC9kZXYvdHR5IGFzIGlucHV0LCBhbmQgd3JpdGVzCisjIG91dHB1dCB0byBTVERPVVQuIChJIGhhdmVuJ3QgZm91bmQgYSB3YXkgb2YgZ2V0dGluZyBpdCB0byB1c2UgU1RESU4sIGJlY2F1c2UKKyMgb2YgdGhlIGNvbnRvcnRlZCBwaXBpbmcgaW5wdXQuKQorCitwZXJsPXBlcmwKK3ByZWZpeD0nJworaWYgWyAkIyAtZ3QgMCAtYSAiJDEiID0gIi11dGY4IiBdIDsgdGhlbgorICBwcmVmaXg9InVzZSB1dGY4OyByZXF1aXJlIEVuY29kZTsiCisgIHNoaWZ0CitmaQorCisKKyMgVGhlIFBlcmwgc2NyaXB0IHRoYXQgZm9sbG93cyBoYXMgYSBzaW1pbGFyIHNwZWNpZmljYXRpb24gdG8gcGNyZTJ0ZXN0LCBhbmQgc28KKyMgY2FuIGJlIGdpdmVuIGlkZW50aWNhbCBpbnB1dCwgZXhjZXB0IHRoYXQgaW5wdXQgcGF0dGVybnMgY2FuIGJlIGZvbGxvd2VkIG9ubHkKKyMgYnkgUGVybCdzIGxvd2VyIGNhc2UgbW9kaWZpZXJzIGFuZCBjZXJ0YWluIG90aGVyIHBjcmUydGVzdCBtb2RpZmllcnMgdGhhdCBhcmUKKyMgZWl0aGVyIGhhbmRsZWQgb3IgaWdub3JlZDoKKyMKKyMgICBhZnRlcnRleHQgICAgICAgICAgaW50ZXJwcmV0ZWQgYXMgInByaW50ICQnIGFmdGVyd2FyZHMiCisjICAgYWZ0ZXJhbGx0ZXh0ICAgICAgIGlnbm9yZWQKKyMgICBkdXBuYW1lcyAgICAgICAgICAgaWdub3JlZCAoUGVybCBhbHdheXMgYWxsb3dzKQorIyAgIG1hcmsgICAgICAgICAgICAgICBpZ25vcmVkCisjICAgbm9fYXV0b19wb3NzZXNzICAgIGlnbm9yZWQKKyMgICBub19zdGFydF9vcHRpbWl6ZSAgaWdub3JlZAorIyAgIHVjcCAgICAgICAgICAgICAgICBzZXRzIFBlcmwncyAvdSBtb2RpZmllcgorIyAgIHV0ZiAgICAgICAgICAgICAgICBpbnZva2UgVVRGLTggZnVuY3Rpb25hbGl0eQorIworIyBUaGUgZGF0YSBsaW5lcyBtdXN0IG5vdCBoYXZlIGFueSBwY3JlMnRlc3QgbW9kaWZpZXJzLiBUaGV5IGFyZSBwcm9jZXNzZWQgYXMKKyMgUGVybCBkb3VibGUtcXVvdGVkIHN0cmluZ3MsIHNvIGlmIHRoZXkgY29udGFpbiAiICQgb3IgQCBjaGFyYWN0ZXJzLCB0aGVzZQorIyBoYXZlIHRvIGJlIGVzY2FwZWQuIEZvciB0aGlzIHJlYXNvbiwgYWxsIHN1Y2ggY2hhcmFjdGVycyBpbiB0aGUKKyMgUGVybC1jb21wYXRpYmxlIHRlc3RpbnB1dDEgYW5kIHRlc3RpbnB1dDQgZmlsZXMgYXJlIGVzY2FwZWQgc28gdGhhdCB0aGV5IGNhbgorIyBiZSB1c2VkIGZvciBwZXJsdGVzdCBhcyB3ZWxsIGFzIGZvciBwY3JlMnRlc3QuIFRoZSBvdXRwdXQgZnJvbSB0aGlzIHNjcmlwdAorIyBzaG91bGQgYmUgc2FtZSBhcyBmcm9tIHBjcmUydGVzdCwgYXBhcnQgZnJvbSB0aGUgaW5pdGlhbCBpZGVudGlmeWluZyBiYW5uZXIuCisjCisjIFRoZSBvdGhlciB0ZXN0aW5wdXQgZmlsZXMgYXJlIG5vdCBzdWl0YWJsZSBmb3IgZmVlZGluZyB0byBwZXJsdGVzdC5zaCwKKyMgYmVjYXVzZSB0aGV5IG1ha2UgdXNlIG9mIHRoZSBzcGVjaWFsIG1vZGlmaWVycyB0aGF0IHBjcmUydGVzdCB1c2VzIGZvcgorIyB0ZXN0aW5nIGZlYXR1cmVzIG9mIFBDUkUyLiBTb21lIG9mIHRoZXNlIGZpbGVzIGFsc28gY29udGFpbiBtYWxmb3JtZWQgcmVndWxhcgorIyBleHByZXNzaW9ucywgaW4gb3JkZXIgdG8gY2hlY2sgdGhhdCBQQ1JFMiBkaWFnbm9zZXMgdGhlbSBjb3JyZWN0bHkuCisKKyhlY2hvICIkcHJlZml4IiA7IGNhdCA8PCdQRVJMRU5EJworCisjIEZ1bmN0aW9uIGZvciB0dXJuaW5nIGEgc3RyaW5nIGludG8gYSBzdHJpbmcgb2YgcHJpbnRpbmcgY2hhcnMuCisKK3N1YiBwY2hhcnMgeworbXkoJHQpID0gIiI7CitpZiAoJHV0ZjgpCisgIHsKKyAgQHAgPSB1bnBhY2soJ1UqJywgJF9bMF0pOworICBmb3JlYWNoICRjIChAcCkKKyAgICB7CisgICAgaWYgKCRjID49IDMyICYmICRjIDwgMTI3KSB7ICR0IC49IGNociAkYzsgfQorICAgICAgZWxzZSB7ICR0IC49IHNwcmludGYoIlxceHslMDJ4fSIsICRjKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK2Vsc2UKKyAgeworICBmb3JlYWNoICRjIChzcGxpdCgvLywgJF9bMF0pKQorICAgIHsKKyAgICBpZiAob3JkICRjID49IDMyICYmIG9yZCAkYyA8IDEyNykgeyAkdCAuPSAkYzsgfQorICAgICAgZWxzZSB7ICR0IC49IHNwcmludGYoIlxceCUwMngiLCBvcmQgJGMpOyB9CisgICAgfQorICB9CiskdDsKK30KKworCisjIFJlYWQgbGluZXMgZnJvbSBhIG5hbWVkIGZpbGUgb3Igc3RkaW4gYW5kIHdyaXRlIHRvIGEgbmFtZWQgZmlsZSBvciBzdGRvdXQ7CisjIGxpbmVzIGNvbnNpc3Qgb2YgYSByZWd1bGFyIGV4cHJlc3Npb24sIGluIGRlbGltaXRlcnMgYW5kIG9wdGlvbmFsbHkgZm9sbG93ZWQKKyMgYnkgb3B0aW9ucywgZm9sbG93ZWQgYnkgYSBzZXQgb2YgdGVzdCBkYXRhLCB0ZXJtaW5hdGVkIGJ5IGFuIGVtcHR5IGxpbmUuCisKKyMgU29ydCBvdXQgdGhlIGlucHV0IGFuZCBvdXRwdXQgZmlsZXMKKworaWYgKEBBUkdWID4gMCkKKyAgeworICBvcGVuKElORklMRSwgIjwkQVJHVlswXSIpIHx8IGRpZSAiRmFpbGVkIHRvIG9wZW4gJEFSR1ZbMF1cbiI7CisgICRpbmZpbGUgPSAiSU5GSUxFIjsKKyAgJGludGVyYWN0ID0gMDsKKyAgfQorZWxzZQorICB7CisgIG9wZW4oSU5GSUxFLCAiPC9kZXYvdHR5IikgfHwgZGllICJGYWlsZWQgdG8gb3BlbiAvZGV2L3R0eVxuIjsKKyAgJGluZmlsZSA9ICJJTkZJTEUiOworICAkaW50ZXJhY3QgPSAxOworICB9CisKK2lmIChAQVJHViA+IDEpCisgIHsKKyAgb3BlbihPVVRGSUxFLCAiPiRBUkdWWzFdIikgfHwgZGllICJGYWlsZWQgdG8gb3BlbiAkQVJHVlsxXVxuIjsKKyAgJG91dGZpbGUgPSAiT1VURklMRSI7CisgIH0KK2Vsc2UgeyAkb3V0ZmlsZSA9ICJTVERPVVQiOyB9CisKK3ByaW50Zigkb3V0ZmlsZSAiUGVybCAkXSBSZWd1bGFyIEV4cHJlc3Npb25zXG5cbiIpOworCisjIE1haW4gbG9vcAorCitORVhUX1JFOgorZm9yICg7OykKKyAgeworICBwcmludGYgIiAgcmU+ICIgaWYgJGludGVyYWN0OworICBsYXN0IGlmICEgKCRfID0gPCRpbmZpbGU+KTsKKyAgcHJpbnRmICRvdXRmaWxlICIkXyIgaWYgISAkaW50ZXJhY3Q7CisgIG5leHQgaWYgKCRfID1+IC9eXHMqJC8gfHwgJF8gPX4gL14jLyk7CisKKyAgJHBhdHRlcm4gPSAkXzsKKworICB3aGlsZSAoJHBhdHRlcm4gIX4gL15ccyooLikuKlwxL3MpCisgICAgeworICAgIHByaW50ZiAiICAgID4gIiBpZiAkaW50ZXJhY3Q7CisgICAgbGFzdCBpZiAhICgkXyA9IDwkaW5maWxlPik7CisgICAgcHJpbnRmICRvdXRmaWxlICIkXyIgaWYgISAkaW50ZXJhY3Q7CisgICAgJHBhdHRlcm4gLj0gJF87CisgICAgfQorCisgIGNob21wKCRwYXR0ZXJuKTsKKyAgJHBhdHRlcm4gPX4gcy9ccyskLy87CisKKyAgIyBTcGxpdCB0aGUgcGF0dGVybiBmcm9tIHRoZSBtb2RpZmllcnMgYW5kIGFkanVzdCB0aGVtIGFzIG5lY2Vzc2FyeS4KKworICAkcGF0dGVybiA9fiAvXlxzKigoLikuKlwyKSguKikkL3M7CisgICRwYXQgPSAkMTsKKyAgJG1vZCA9ICQzOworCisgICMgVGhlIHByaXZhdGUgImFmdGVydGV4dCIgbW9kaWZpZXIgbWVhbnMgInByaW50ICQnIGFmdGVyd2FyZHMiLgorCisgICRzaG93cmVzdCA9ICgkbW9kID1+IHMvYWZ0ZXJ0ZXh0LD8vLyk7CisKKyAgIyAiYWxsYWZ0ZXJ0ZXh0IiBpcyB1c2VkIGJ5IHBjcmUydGVzdCB0byBwcmludCByZW1haW5kZXJzIGFmdGVyIGNhcHR1cmVzCisKKyAgJG1vZCA9fiBzL2FsbGFmdGVydGV4dCw/Ly87CisKKyAgIyBEZXRlY3QgdXRmCisKKyAgJHV0ZjggPSAkbW9kID1+IHMvdXRmLD8vLzsKKworICAjIFJlbW92ZSAiZHVwbmFtZXMiLgorCisgICRtb2QgPX4gcy9kdXBuYW1lcyw/Ly87CisKKyAgIyBSZW1vdmUgIm1hcmsiIChhc2tzIHBjcmUydGVzdCB0byBjaGVjayBNQVJLIGRhdGEpICovCisKKyAgJG1vZCA9fiBzL21hcmssPy8vOworCisgICMgInVjcCIgYXNrcyBwY3JlMnRlc3QgdG8gc2V0IFBDUkUyX1VDUDsgY2hhbmdlIHRoaXMgdG8gL3UgZm9yIFBlcmwKKworICAkbW9kID1+IHMvdWNwLD8vdS87CisKKyAgIyBSZW1vdmUgIm5vX2F1dG9fcG9zc2VzcyIgYW5kICJub19zdGFydF9vcHRpbWl6ZSIgKGRpc2FibGUgUENSRTIgb3B0aW1pemF0aW9ucykKKworICAkbW9kID1+IHMvbm9fYXV0b19wb3NzZXNzLD8vLzsKKyAgJG1vZCA9fiBzL25vX3N0YXJ0X29wdGltaXplLD8vLzsKKworICAjIEFkZCBiYWNrIHJldGFpbmVkIG1vZGlmaWVycyBhbmQgY2hlY2sgdGhhdCB0aGUgcGF0dGVybiBpcyB2YWxpZC4KKworICAkbW9kID1+IHMvLC8vZzsKKyAgJHBhdHRlcm4gPSAiJHBhdCRtb2QiOworICBldmFsICJcJF8gPX4gJHtwYXR0ZXJufSI7CisgIGlmICgkQCkKKyAgICB7CisgICAgcHJpbnRmICRvdXRmaWxlICJFcnJvcjogJEAiOworICAgIGlmICghICRpbnRlcmFjdCkKKyAgICAgIHsKKyAgICAgIGZvciAoOzspCisgICAgICAgIHsKKyAgICAgICAgbGFzdCBpZiAhICgkXyA9IDwkaW5maWxlPik7CisgICAgICAgIGxhc3QgaWYgJF8gPX4gL15ccyokLzsKKyAgICAgICAgfQorICAgICAgfQorICAgIG5leHQgTkVYVF9SRTsKKyAgICB9CisKKyAgIyBJZiB0aGUgL2cgbW9kaWZpZXIgaXMgcHJlc2VudCwgd2Ugd2FudCB0byBwdXQgYSBsb29wIHJvdW5kIHRoZSBtYXRjaGluZzsKKyAgIyBvdGhlcndpc2UganVzdCBhIHNpbmdsZSAiaWYiLgorCisgICRjbWQgPSAoJHBhdHRlcm4gPX4gL2dbYS16XSokLyk/ICJ3aGlsZSIgOiAiaWYiOworCisgICMgSWYgdGhlIHBhdHRlcm4gaXMgYWN0dWFsbHkgdGhlIG51bGwgc3RyaW5nLCBQZXJsIHVzZXMgdGhlIG1vc3QgcmVjZW50bHkKKyAgIyBleGVjdXRlZCAoYW5kIHN1Y2Nlc3NmdWxseSBjb21waWxlZCkgcmVnZXggaXMgdXNlZCBpbnN0ZWFkLiBUaGlzIGlzIGEKKyAgIyBuYXN0eSB0cmFwIGZvciB0aGUgdW53YXJ5ISBUaGUgUENSRTIgdGVzdCBzdWl0ZSBkb2VzIGNvbnRhaW4gbnVsbCBzdHJpbmdzCisgICMgaW4gcGxhY2VzIC0gaWYgdGhleSBhcmUgYWxsb3dlZCB0aHJvdWdoIGhlcmUgYWxsIHNvcnRzIG9mIHdlaXJkIGFuZAorICAjIHVuZXhwZWN0ZWQgZWZmZWN0cyBoYXBwZW4uIFRvIGF2b2lkIHRoaXMsIHdlIHJlcGxhY2Ugc3VjaCBwYXR0ZXJucyB3aXRoCisgICMgYSBub24tbnVsbCBwYXR0ZXJuIHRoYXQgaGFzIHRoZSBzYW1lIGVmZmVjdC4KKworICAkcGF0dGVybiA9ICIvKD8jKS8kMiIgaWYgKCRwYXR0ZXJuID1+IC9eKC4pXDEoLiopJC8pOworCisgICMgUmVhZCBkYXRhIGxpbmVzIGFuZCB0ZXN0IHRoZW0KKworICBmb3IgKDs7KQorICAgIHsKKyAgICBwcmludGYgImRhdGE+ICIgaWYgJGludGVyYWN0OworICAgIGxhc3QgTkVYVF9SRSBpZiAhICgkXyA9IDwkaW5maWxlPik7CisgICAgY2hvbXA7CisgICAgcHJpbnRmICRvdXRmaWxlICIlcyIsICIkX1xuIiBpZiAhICRpbnRlcmFjdDsKKworICAgIHMvXHMrJC8vOyAgIyBSZW1vdmUgdHJhaWxpbmcgc3BhY2UKKyAgICBzL15ccysvLzsgICMgUmVtb3ZlIGxlYWRpbmcgc3BhY2UKKworICAgIGxhc3QgaWYgKCRfIGVxICIiKTsKKyAgICBuZXh0IGlmICRfID1+IC9eXFw9KD86XHN8JCkvOyAgICMgQ29tbWVudCBsaW5lCisKKyAgICAkeCA9IGV2YWwgIlwiJF9cIiI7ICAgIyBUbyBnZXQgZXNjYXBlcyBwcm9jZXNzZWQKKworICAgICMgRW1wdHkgYXJyYXkgZm9yIGhvbGRpbmcgcmVzdWx0cywgZW5zdXJlICRSRUdFUlJPUiBhbmQgJFJFR01BUksgYXJlCisgICAgIyB1bnNldCwgdGhlbiBkbyB0aGUgbWF0Y2hpbmcuCisKKyAgICBAc3VicyA9ICgpOworCisgICAgJHB1c2hlcyA9ICJwdXNoIFxAc3VicyxcJCY7IiAuCisgICAgICAgICAicHVzaCBcQHN1YnMsXCQxOyIgLgorICAgICAgICAgInB1c2ggXEBzdWJzLFwkMjsiIC4KKyAgICAgICAgICJwdXNoIFxAc3VicyxcJDM7IiAuCisgICAgICAgICAicHVzaCBcQHN1YnMsXCQ0OyIgLgorICAgICAgICAgInB1c2ggXEBzdWJzLFwkNTsiIC4KKyAgICAgICAgICJwdXNoIFxAc3VicyxcJDY7IiAuCisgICAgICAgICAicHVzaCBcQHN1YnMsXCQ3OyIgLgorICAgICAgICAgInB1c2ggXEBzdWJzLFwkODsiIC4KKyAgICAgICAgICJwdXNoIFxAc3VicyxcJDk7IiAuCisgICAgICAgICAicHVzaCBcQHN1YnMsXCQxMDsiIC4KKyAgICAgICAgICJwdXNoIFxAc3VicyxcJDExOyIgLgorICAgICAgICAgInB1c2ggXEBzdWJzLFwkMTI7IiAuCisgICAgICAgICAicHVzaCBcQHN1YnMsXCQxMzsiIC4KKyAgICAgICAgICJwdXNoIFxAc3VicyxcJDE0OyIgLgorICAgICAgICAgInB1c2ggXEBzdWJzLFwkMTU7IiAuCisgICAgICAgICAicHVzaCBcQHN1YnMsXCQxNjsiIC4KKyAgICAgICAgICJwdXNoIFxAc3VicyxcJCc7IH0iOworCisgICAgdW5kZWYgJFJFR0VSUk9SOworICAgIHVuZGVmICRSRUdNQVJLOworCisgICAgZXZhbCAiJHtjbWR9IChcJHggPX4gJHtwYXR0ZXJufSkgeyIgLiAkcHVzaGVzOworCisgICAgaWYgKCRAKQorICAgICAgeworICAgICAgcHJpbnRmICRvdXRmaWxlICJFcnJvcjogJEBcbiI7CisgICAgICBuZXh0IE5FWFRfUkU7CisgICAgICB9CisgICAgZWxzaWYgKHNjYWxhcihAc3VicykgPT0gMCkKKyAgICAgIHsKKyAgICAgIHByaW50ZiAkb3V0ZmlsZSAiTm8gbWF0Y2giOworICAgICAgaWYgKGRlZmluZWQgJFJFR0VSUk9SICYmICRSRUdFUlJPUiAhPSAxKQorICAgICAgICB7IHByaW50ZiAkb3V0ZmlsZSAoIiwgbWFyayA9ICVzIiwgJnBjaGFycygkUkVHRVJST1IpKTsgfQorICAgICAgcHJpbnRmICRvdXRmaWxlICJcbiI7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgd2hpbGUgKHNjYWxhcihAc3VicykgIT0gMCkKKyAgICAgICAgeworICAgICAgICBwcmludGYgJG91dGZpbGUgKCIgMDogJXNcbiIsICZwY2hhcnMoJHN1YnNbMF0pKTsKKyAgICAgICAgcHJpbnRmICRvdXRmaWxlICgiIDArICVzXG4iLCAmcGNoYXJzKCRzdWJzWzE3XSkpIGlmICRzaG93cmVzdDsKKyAgICAgICAgJGxhc3RfcHJpbnRlZCA9IDA7CisgICAgICAgIGZvciAoJGkgPSAxOyAkaSA8PSAxNjsgJGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGRlZmluZWQgJHN1YnNbJGldKQorICAgICAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKCRsYXN0X3ByaW50ZWQrKyA8ICRpLTEpCisgICAgICAgICAgICAgIHsgcHJpbnRmICRvdXRmaWxlICgiJTJkOiA8dW5zZXQ+XG4iLCAkbGFzdF9wcmludGVkKTsgfQorICAgICAgICAgICAgcHJpbnRmICRvdXRmaWxlICgiJTJkOiAlc1xuIiwgJGksICZwY2hhcnMoJHN1YnNbJGldKSk7CisgICAgICAgICAgICAkbGFzdF9wcmludGVkID0gJGk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBzcGxpY2UoQHN1YnMsIDAsIDE4KTsKKyAgICAgICAgfQorCisgICAgICAjIEl0IHNlZW1zIHRoYXQgJFJFR01BUksgaXMgbm90IG1hcmtlZCBhcyBVVEYtOCBldmVuIHdoZW4gdXNlIHV0ZjggaXMKKyAgICAgICMgc2V0IGFuZCB0aGUgaW5wdXQgcGF0dGVybiB3YXMgYSBVVEYtOCBzdHJpbmcuIFdlIGNhbiwgaG93ZXZlciwgZm9yY2UKKyAgICAgICMgaXQgdG8gYmUgc28gbWFya2VkLgorCisgICAgICBpZiAoZGVmaW5lZCAkUkVHTUFSSyAmJiAkUkVHTUFSSyAhPSAxKQorICAgICAgICB7CisgICAgICAgICR4eCA9ICRSRUdNQVJLOworICAgICAgICAkeHggPSBFbmNvZGU6OmRlY29kZV91dGY4KCR4eCkgaWYgJHV0Zjg7CisgICAgICAgIHByaW50ZiAkb3V0ZmlsZSAoIk1LOiAlc1xuIiwgJnBjaGFycygkeHgpKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisjIHByaW50ZiAkb3V0ZmlsZSAiXG4iOworCitQRVJMRU5ECispIHwgJHBlcmwgLSAkQAorCisjIEVuZApkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL2NvbmZpZy5oLmdlbmVyaWMgYi9kaXN0Mi9zcmMvY29uZmlnLmguZ2VuZXJpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDRmMTk4Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL2NvbmZpZy5oLmdlbmVyaWMKQEAgLTAsMCArMSwzMDYgQEAKKy8qIHNyYy9jb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCisvKiBzcmMvY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisKKy8qIFBDUkUyIGlzIHdyaXR0ZW4gaW4gU3RhbmRhcmQgQywgYnV0IHRoZXJlIGFyZSBhIGZldyBub24tc3RhbmRhcmQgdGhpbmdzIGl0CitjYW4gY29wZSB3aXRoLCBhbGxvd2luZyBpdCB0byBydW4gb24gU3VuT1M0IGFuZCBvdGhlciAiY2xvc2UgdG8gc3RhbmRhcmQiCitzeXN0ZW1zLgorCitJbiBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IHRoZSBHTlUgYXV0b3Rvb2xzLCBjb25maWcuaC5pbiBpcyBjb252ZXJ0ZWQgaW50bworY29uZmlnLmggYnkgdGhlICJjb25maWd1cmUiIHNjcmlwdC4gSW4gZW52aXJvbm1lbnRzIHRoYXQgdXNlIENNYWtlLAorY29uZmlnLWNtYWtlLmluIGlzIGNvbnZlcnRlZCBpbnRvIGNvbmZpZy5oLiBJZiB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIFBDUkUyICJieQoraGFuZCIgd2l0aG91dCB1c2luZyAiY29uZmlndXJlIiBvciBDTWFrZSwgeW91IHNob3VsZCBjb3B5IHRoZSBkaXN0cmlidXRlZAorY29uZmlnLmguZ2VuZXJpYyB0byBjb25maWcuaCwgYW5kIGVkaXQgdGhlIG1hY3JvIGRlZmluaXRpb25zIHRvIGJlIHRoZSB3YXkgeW91CituZWVkIHRoZW0uIFlvdSBtdXN0IHRoZW4gYWRkIC1ESEFWRV9DT05GSUdfSCB0byBhbGwgb2YgeW91ciBjb21waWxlIGNvbW1hbmRzLAorc28gdGhhdCBjb25maWcuaCBpcyBpbmNsdWRlZCBhdCB0aGUgc3RhcnQgb2YgZXZlcnkgc291cmNlLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGF2b2lkIGVkaXRpbmcgYnkgdXNpbmcgLUQgb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZQordG8gc2V0IHRoZSBtYWNybyB2YWx1ZXMuIEluIHRoaXMgY2FzZSwgeW91IGRvIG5vdCBoYXZlIHRvIHNldCAtREhBVkVfQ09ORklHX0gsCitidXQgaWYgeW91IGRvLCBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHRha2VuIGZyb20gY29uZmlnLmggZm9yIG5vbi1ib29sZWFuCittYWNyb3MgdGhhdCBhcmUgbm90IGRlZmluZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworQm9vbGVhbiBtYWNyb3Mgc3VjaCBhcyBIQVZFX1NURExJQl9IIGFuZCBTVVBQT1JUX1BDUkUyXzggc2hvdWxkIGVpdGhlciBiZSBkZWZpbmVkCisoY29udmVudGlvbmFsbHkgdG8gMSkgZm9yIFRSVUUsIGFuZCBub3QgZGVmaW5lZCBhdCBhbGwgZm9yIEZBTFNFLiBBbGwgc3VjaAorbWFjcm9zIGFyZSBsaXN0ZWQgYXMgYSBjb21tZW50ZWQgI3VuZGVmIGluIGNvbmZpZy5oLmdlbmVyaWMuIE1hY3JvcyBzdWNoIGFzCitNQVRDSF9MSU1JVCwgd2hvc2UgYWN0dWFsIHZhbHVlIGlzIHJlbGV2YW50LCBoYXZlIGRlZmF1bHRzIGRlZmluZWQsIGJ1dCBhcmUKK3N1cnJvdW5kZWQgYnkgI2lmbmRlZi8jZW5kaWYgbGluZXMgc28gdGhhdCB0aGUgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgLUQuCisKK1BDUkUyIHVzZXMgbWVtbW92ZSgpIGlmIEhBVkVfTUVNTU9WRSBpcyBkZWZpbmVkOyBvdGhlcndpc2UgaXQgdXNlcyBiY29weSgpIGlmCitIQVZFX0JDT1BZIGlzIGRlZmluZWQuIElmIHlvdXIgc3lzdGVtIGhhcyBuZWl0aGVyIGJjb3B5KCkgbm9yIG1lbW1vdmUoKSwgbWFrZQorc3VyZSBib3RoIG1hY3JvcyBhcmUgdW5kZWZpbmVkOyBhbiBlbXVsYXRpb24gZnVuY3Rpb24gd2lsbCB0aGVuIGJlIHVzZWQuICovCisKKy8qIEJ5IGRlZmF1bHQsIHRoZSBcUiBlc2NhcGUgc2VxdWVuY2UgbWF0Y2hlcyBhbnkgVW5pY29kZSBsaW5lIGVuZGluZworICAgY2hhcmFjdGVyIG9yIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMuIElmIEJTUl9BTllDUkxGIGlzIGRlZmluZWQgKHRvIGFueQorICAgdmFsdWUpLCB0aGlzIGlzIGNoYW5nZWQgc28gdGhhdCBiYWNrc2xhc2gtUiBtYXRjaGVzIG9ubHkgQ1IsIExGLCBvciBDUkxGLgorICAgVGhlIGJ1aWxkLXRpbWUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgdXNlciBvZiBQQ1JFMiBhdCBydW50aW1lLgorICAgKi8KKy8qICN1bmRlZiBCU1JfQU5ZQ1JMRiAqLworCisvKiBJZiB5b3UgYXJlIGNvbXBpbGluZyBmb3IgYSBzeXN0ZW0gdGhhdCB1c2VzIEVCQ0RJQyBpbnN0ZWFkIG9mIEFTQ0lJCisgICBjaGFyYWN0ZXIgY29kZXMsIGRlZmluZSB0aGlzIG1hY3JvIHRvIGFueSB2YWx1ZS4gV2hlbiBFQkNESUMgaXMgc2V0LCBQQ1JFMgorICAgYXNzdW1lcyB0aGF0IGFsbCBpbnB1dCBzdHJpbmdzIGFyZSBpbiBFQkNESUMuIElmIHlvdSBkbyBub3QgZGVmaW5lIHRoaXMKKyAgIG1hY3JvLCBQQ1JFMiB3aWxsIGFzc3VtZSBpbnB1dCBzdHJpbmdzIGFyZSBBU0NJSSBvciBVVEYtOC8xNi8zMiBVbmljb2RlLiBJdAorICAgaXMgbm90IHBvc3NpYmxlIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBQQ1JFMiB0aGF0IHN1cHBvcnRzIGJvdGggRUJDRElDIGFuZAorICAgVVRGLTgvMTYvMzIuICovCisvKiAjdW5kZWYgRUJDRElDICovCisKKy8qIEluIGFuIEVCQ0RJQyBlbnZpcm9ubWVudCwgZGVmaW5lIHRoaXMgbWFjcm8gdG8gYW55IHZhbHVlIHRvIGFycmFuZ2UgZm9yIHRoZQorICAgTkwgY2hhcmFjdGVyIHRvIGJlIDB4MjUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAweDE1LiBOTCBwbGF5cyB0aGUgcm9sZSB0aGF0CisgICBMRiBkb2VzIGluIGFuIEFTQ0lJL1VuaWNvZGUgZW52aXJvbm1lbnQuICovCisvKiAjdW5kZWYgRUJDRElDX05MMjUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiY29weScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9CQ09QWSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGJ6bGliLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfQlpMSUJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0RJUkVOVF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9ETEZDTl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZWRpdGxpbmUvcmVhZGxpbmUuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9FRElUTElORV9SRUFETElORV9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZWRpdC9yZWFkbGluZS9yZWFkbGluZS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0VESVRfUkVBRExJTkVfUkVBRExJTkVfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfSU5UVFlQRVNfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0xJTUlUU19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtbW92ZScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9NRU1NT1ZFICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfTUVNT1JZX0ggKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIFBPU0lYIHRocmVhZHMgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMuICovCisvKiAjdW5kZWYgSEFWRV9QVEhSRUFEICovCisKKy8qIEhhdmUgUFRIUkVBRF9QUklPX0lOSEVSSVQuICovCisvKiAjdW5kZWYgSEFWRV9QVEhSRUFEX1BSSU9fSU5IRVJJVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHJlYWRsaW5lL2hpc3RvcnkuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9SRUFETElORV9ISVNUT1JZX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxyZWFkbGluZS9yZWFkbGluZS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1JFQURMSU5FX1JFQURMSU5FX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TVERJTlRfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NURExJQl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3InIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfU1RSRVJST1IgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1RSSU5HU19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1RSSU5HX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19TVEFUX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1VOSVNURF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBzaW1wbGUgdmlzaWJpbGl0eSBkZWNsYXJhdGlvbnMuICovCisvKiAjdW5kZWYgSEFWRV9WSVNJQklMSVRZICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luZG93cy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1dJTkRPV1NfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHpsaWIuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9aTElCX0ggKi8KKworLyogUENSRTIgdXNlcyByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMgdG8gaGFuZGxlIGJhY2t0cmFja2luZyB3aGlsZSBtYXRjaGluZy4KKyAgIFRoaXMgY2FuIHNvbWV0aW1lcyBiZSBhIHByb2JsZW0gb24gc3lzdGVtcyB0aGF0IGhhdmUgc3RhY2tzIG9mIGxpbWl0ZWQKKyAgIHNpemUuIERlZmluZSBIRUFQX01BVENIX1JFQ1VSU0UgdG8gYW55IHZhbHVlIHRvIGdldCBhIHZlcnNpb24gdGhhdCBkb2Vzbid0CisgICB1c2UgcmVjdXJzaW9uIGluIHRoZSBtYXRjaCgpIGZ1bmN0aW9uOyBpbnN0ZWFkIGl0IGNyZWF0ZXMgaXRzIG93biBzdGFjayBieQorICAgc3RlYW0gdXNpbmcgbWVtb3J5IGZyb20gdGhlIGhlYXAuIEZvciBtb3JlIGRldGFpbCwgc2VlIHRoZSBjb21tZW50cyBhbmQKKyAgIG90aGVyIHN0dWZmIGp1c3QgYWJvdmUgdGhlIG1hdGNoKCkgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEVBUF9NQVRDSF9SRUNVUlNFICovCisKKy8qIFRoZSB2YWx1ZSBvZiBMSU5LX1NJWkUgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVzZWQgdG8gc3RvcmUgbGlua3MKKyAgIGFzIG9mZnNldHMgd2l0aGluIHRoZSBjb21waWxlZCByZWdleC4gVGhlIGRlZmF1bHQgaXMgMiwgd2hpY2ggYWxsb3dzIGZvcgorICAgY29tcGlsZWQgcGF0dGVybnMgdXAgdG8gNjRLIGxvbmcuIFRoaXMgY292ZXJzIHRoZSB2YXN0IG1ham9yaXR5IG9mIGNhc2VzLgorICAgSG93ZXZlciwgUENSRTIgY2FuIGFsc28gYmUgY29tcGlsZWQgdG8gdXNlIDMgb3IgNCBieXRlcyBpbnN0ZWFkLiBUaGlzCisgICBhbGxvd3MgZm9yIGxvbmdlciBwYXR0ZXJucyBpbiBleHRyZW1lIGNhc2VzLiAqLworI2lmbmRlZiBMSU5LX1NJWkUKKyNkZWZpbmUgTElOS19TSVpFIDIKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLiAqLworLyogVGhpcyBpcyBpZ25vcmVkIHVubGVzcyB5b3UgYXJlIHVzaW5nIGxpYnRvb2wuICovCisjaWZuZGVmIExUX09CSkRJUgorI2RlZmluZSBMVF9PQkpESVIgIi5saWJzLyIKKyNlbmRpZgorCisvKiBUaGUgdmFsdWUgb2YgTUFUQ0hfTElNSVQgZGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBudW1iZXIgb2YgdGltZXMgdGhlCisgICBpbnRlcm5hbCBtYXRjaCgpIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZHVyaW5nIGEgc2luZ2xlIGV4ZWN1dGlvbiBvZgorICAgcGNyZTJfbWF0Y2goKS4gVGhlcmUgaXMgYSBydW50aW1lIGludGVyZmFjZSBmb3Igc2V0dGluZyBhIGRpZmZlcmVudCBsaW1pdC4KKyAgIFRoZSBsaW1pdCBleGlzdHMgaW4gb3JkZXIgdG8gY2F0Y2ggcnVuYXdheSByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgdGFrZQorICAgZm9yIGV2ZXIgdG8gZGV0ZXJtaW5lIHRoYXQgdGhleSBkbyBub3QgbWF0Y2guIFRoZSBkZWZhdWx0IGlzIHNldCB2ZXJ5IGxhcmdlCisgICBzbyB0aGF0IGl0IGRvZXMgbm90IGFjY2lkZW50YWxseSBjYXRjaCBsZWdpdGltYXRlIGNhc2VzLiAqLworI2lmbmRlZiBNQVRDSF9MSU1JVAorI2RlZmluZSBNQVRDSF9MSU1JVCAxMDAwMDAwMAorI2VuZGlmCisKKy8qIFRoZSBhYm92ZSBsaW1pdCBhcHBsaWVzIHRvIGFsbCBjYWxscyBvZiBtYXRjaCgpLCB3aGV0aGVyIG9yIG5vdCB0aGV5CisgICBpbmNyZWFzZSB0aGUgcmVjdXJzaW9uIGRlcHRoLiBJbiBzb21lIGVudmlyb25tZW50cyBpdCBpcyBkZXNpcmFibGUgdG8gbGltaXQKKyAgIHRoZSBkZXB0aCBvZiByZWN1cnNpdmUgY2FsbHMgb2YgbWF0Y2goKSBtb3JlIHN0cmljdGx5LCBpbiBvcmRlciB0byByZXN0cmljdAorICAgdGhlIG1heGltdW0gYW1vdW50IG9mIHN0YWNrIChvciBoZWFwLCBpZiBIRUFQX01BVENIX1JFQ1VSU0UgaXMgZGVmaW5lZCkKKyAgIHRoYXQgaXMgdXNlZC4gVGhlIHZhbHVlIG9mIE1BVENIX0xJTUlUX1JFQ1VSU0lPTiBhcHBsaWVzIG9ubHkgdG8gcmVjdXJzaXZlCisgICBjYWxscyBvZiBtYXRjaCgpLiBUbyBoYXZlIGFueSB1c2VmdWwgZWZmZWN0LCBpdCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgdmFsdWUKKyAgIG9mIE1BVENIX0xJTUlULiBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlIHNhbWUgdmFsdWUgYXMgTUFUQ0hfTElNSVQuIFRoZXJlCisgICBpcyBhIHJ1bnRpbWUgbWV0aG9kIGZvciBzZXR0aW5nIGEgZGlmZmVyZW50IGxpbWl0LiAqLworI2lmbmRlZiBNQVRDSF9MSU1JVF9SRUNVUlNJT04KKyNkZWZpbmUgTUFUQ0hfTElNSVRfUkVDVVJTSU9OIE1BVENIX0xJTUlUCisjZW5kaWYKKworLyogVGhpcyBsaW1pdCBpcyBwYXJhbWV0ZXJpemVkIGp1c3QgaW4gY2FzZSBhbnlib2R5IGV2ZXIgd2FudHMgdG8gY2hhbmdlIGl0LgorICAgQ2FyZSBtdXN0IGJlIHRha2VuIGlmIGl0IGlzIGluY3JlYXNlZCwgYmVjYXVzZSBpdCBndWFyZHMgYWdhaW5zdCBpbnRlZ2VyCisgICBvdmVyZmxvdyBjYXVzZWQgYnkgZW5vcm1vdXNseSBsYXJnZSBwYXR0ZXJucy4gKi8KKyNpZm5kZWYgTUFYX05BTUVfQ09VTlQKKyNkZWZpbmUgTUFYX05BTUVfQ09VTlQgMTAwMDAKKyNlbmRpZgorCisvKiBUaGlzIGxpbWl0IGlzIHBhcmFtZXRlcml6ZWQganVzdCBpbiBjYXNlIGFueWJvZHkgZXZlciB3YW50cyB0byBjaGFuZ2UgaXQuCisgICBDYXJlIG11c3QgYmUgdGFrZW4gaWYgaXQgaXMgaW5jcmVhc2VkLCBiZWNhdXNlIGl0IGd1YXJkcyBhZ2FpbnN0IGludGVnZXIKKyAgIG92ZXJmbG93IGNhdXNlZCBieSBlbm9ybW91c2x5IGxhcmdlIHBhdHRlcm5zLiAqLworI2lmbmRlZiBNQVhfTkFNRV9TSVpFCisjZGVmaW5lIE1BWF9OQU1FX1NJWkUgMzIKKyNlbmRpZgorCisvKiBEZWZpbmluZyBORVZFUl9CQUNLU0xBU0hfQyBsb2NrcyBvdXQgdGhlIHVzZSBvZiBcQyBpbiBhbGwgcGF0dGVybnMuICovCisvKiAjdW5kZWYgTkVWRVJfQkFDS1NMQVNIX0MgKi8KKworLyogVGhlIHZhbHVlIG9mIE5FV0xJTkVfREVGQVVMVCBkZXRlcm1pbmVzIHRoZSBkZWZhdWx0IG5ld2xpbmUgY2hhcmFjdGVyCisgICBzZXF1ZW5jZS4gUENSRTIgY2xpZW50IHByb2dyYW1zIGNhbiBvdmVycmlkZSB0aGlzIGJ5IHNlbGVjdGluZyBvdGhlciB2YWx1ZXMKKyAgIGF0IHJ1biB0aW1lLiBUaGUgdmFsaWQgdmFsdWVzIGFyZSAxIChDUiksIDIgKExGKSwgMyAoQ1JMRiksIDQgKEFOWSksIGFuZCA1CisgICAoQU5ZQ1JMRikuICovCisjaWZuZGVmIE5FV0xJTkVfREVGQVVMVAorI2RlZmluZSBORVdMSU5FX0RFRkFVTFQgMgorI2VuZGlmCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI2RlZmluZSBQQUNLQUdFICJwY3JlMiIKKworLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIiCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9OQU1FICJQQ1JFMiIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1NUUklORyAiUENSRTIgMTAuMjEiCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJwY3JlMiIKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9VUkwgIiIKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIxMC4yMSIKKworLyogVGhlIHZhbHVlIG9mIFBBUkVOU19ORVNUX0xJTUlUIHNwZWNpZmllcyB0aGUgbWF4aW11bSBkZXB0aCBvZiBuZXN0ZWQKKyAgIHBhcmVudGhlc2VzIChvZiBhbnkga2luZCkgaW4gYSBwYXR0ZXJuLiBUaGlzIGxpbWl0cyB0aGUgYW1vdW50IG9mIHN5c3RlbQorICAgc3RhY2sgdGhhdCBpcyB1c2VkIHdoaWxlIGNvbXBpbGluZyBhIHBhdHRlcm4uICovCisjaWZuZGVmIFBBUkVOU19ORVNUX0xJTUlUCisjZGVmaW5lIFBBUkVOU19ORVNUX0xJTUlUIDI1MAorI2VuZGlmCisKKy8qIFRoZSB2YWx1ZSBvZiBQQ1JFMkdSRVBfQlVGU0laRSBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIGJ1ZmZlciB1c2VkIGJ5CisgICBwY3JlMmdyZXAgdG8gaG9sZCBwYXJ0cyBvZiB0aGUgZmlsZSBpdCBpcyBzZWFyY2hpbmcuIFRoaXMgaXMgYWxzbyB0aGUKKyAgIG1pbmltdW0gdmFsdWUuIFRoZSBhY3R1YWwgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHBjcmUyZ3JlcCBpcyB0aHJlZSB0aW1lcworICAgdGhpcyBudW1iZXIsIGJlY2F1c2UgaXQgYWxsb3dzIGZvciB0aGUgYnVmZmVyaW5nIG9mICJiZWZvcmUiIGFuZCAiYWZ0ZXIiCisgICBsaW5lcy4gKi8KKyNpZm5kZWYgUENSRTJHUkVQX0JVRlNJWkUKKyNkZWZpbmUgUENSRTJHUkVQX0JVRlNJWkUgMjA0ODAKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gYW55IHZhbHVlIHRvIGluY2x1ZGUgZGVidWdnaW5nIGNvZGUuICovCisvKiAjdW5kZWYgUENSRTJfREVCVUcgKi8KKworLyogSWYgeW91IGFyZSBjb21waWxpbmcgZm9yIGEgc3lzdGVtIG90aGVyIHRoYW4gYSBVbml4LWxpa2Ugc3lzdGVtIG9yCisgICBXaW4zMiwgYW5kIGl0IG5lZWRzIHNvbWUgbWFnaWMgdG8gYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBkZWZpbml0aW9uCisgICBvZiBhIGZ1bmN0aW9uIHRoYXQgaXMgZXhwb3J0ZWQgYnkgdGhlIGxpYnJhcnksIGRlZmluZSB0aGlzIG1hY3JvIHRvCisgICBjb250YWluIHRoZSByZWxldmFudCBtYWdpYy4gSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgYSBzdWl0YWJsZQorICAgIF9fZGVjbHNwZWMgdmFsdWUgaXMgdXNlZCBmb3IgV2luZG93cyBzeXN0ZW1zOyBpbiBvdGhlciBlbnZpcm9ubWVudHMKKyAgICJleHRlcm4iIGlzIHVzZWQgZm9yIGEgQyBjb21waWxlciBhbmQgImV4dGVybiBDIiBmb3IgYSBDKysgY29tcGlsZXIuCisgICBUaGlzIG1hY3JvIGFwZWFycyBhdCB0aGUgc3RhcnQgb2YgZXZlcnkgZXhwb3J0ZWQgZnVuY3Rpb24gdGhhdCBpcyBwYXJ0CisgICBvZiB0aGUgZXh0ZXJuYWwgQVBJLiBJdCBkb2VzIG5vdCBhcHBlYXIgb24gZnVuY3Rpb25zIHRoYXQgYXJlICJleHRlcm5hbCIKKyAgIGluIHRoZSBDIHNlbnNlLCBidXQgd2hpY2ggYXJlIGludGVybmFsIHRvIHRoZSBsaWJyYXJ5LiAqLworLyogI3VuZGVmIFBDUkUyX0VYUF9ERUZOICovCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgaWYgbGlua2luZyBzdGF0aWNhbGx5IChUT0RPOiBtYWtlIG5pY2Ugd2l0aCBMaWJ0b29sKSAqLworLyogI3VuZGVmIFBDUkUyX1NUQVRJQyAqLworCisvKiBEZWZpbmUgdG8gbmVjZXNzYXJ5IHN5bWJvbCBpZiB0aGlzIGNvbnN0YW50IHVzZXMgYSBub24tc3RhbmRhcmQgbmFtZSBvbgorICAgeW91ciBzeXN0ZW0uICovCisvKiAjdW5kZWYgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisvKiAjdW5kZWYgU1REQ19IRUFERVJTICovCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIEp1c3QtSW4tVGltZSBjb21waWxpbmcuICovCisvKiAjdW5kZWYgU1VQUE9SVF9KSVQgKi8KKworLyogRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBhbGxvdyBwY3JlMmdyZXAgdG8gYmUgbGlua2VkIHdpdGggbGliYnoyLCBzbyB0aGF0IGl0CisgICBpcyBhYmxlIHRvIGhhbmRsZSAuYnoyIGZpbGVzLiAqLworLyogI3VuZGVmIFNVUFBPUlRfTElCQloyICovCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gYWxsb3cgcGNyZTJ0ZXN0IHRvIGJlIGxpbmtlZCB3aXRoIGxpYmVkaXQuICovCisvKiAjdW5kZWYgU1VQUE9SVF9MSUJFRElUICovCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gYWxsb3cgcGNyZTJ0ZXN0IHRvIGJlIGxpbmtlZCB3aXRoIGxpYnJlYWRsaW5lLiAqLworLyogI3VuZGVmIFNVUFBPUlRfTElCUkVBRExJTkUgKi8KKworLyogRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBhbGxvdyBwY3JlMmdyZXAgdG8gYmUgbGlua2VkIHdpdGggbGlieiwgc28gdGhhdCBpdAorICAgaXMgYWJsZSB0byBoYW5kbGUgLmd6IGZpbGVzLiAqLworLyogI3VuZGVmIFNVUFBPUlRfTElCWiAqLworCisvKiBEZWZpbmUgdG8gYW55IHZhbHVlIHRvIGVuYWJsZSBKSVQgc3VwcG9ydCBpbiBwY3JlMmdyZXAuICovCisvKiAjdW5kZWYgU1VQUE9SVF9QQ1JFMkdSRVBfSklUICovCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIHRoZSAxNiBiaXQgUENSRTIgbGlicmFyeS4gKi8KKy8qICN1bmRlZiBTVVBQT1JUX1BDUkUyXzE2ICovCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIHRoZSAzMiBiaXQgUENSRTIgbGlicmFyeS4gKi8KKy8qICN1bmRlZiBTVVBQT1JUX1BDUkUyXzMyICovCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIHRoZSA4IGJpdCBQQ1JFMiBsaWJyYXJ5LiAqLworLyogI3VuZGVmIFNVUFBPUlRfUENSRTJfOCAqLworCisvKiBEZWZpbmUgdG8gYW55IHZhbHVlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBVbmljb2RlIGFuZCBVVEYgZW5jb2RpbmcuIFRoaXMKKyAgIHdpbGwgd29yayBldmVuIGluIGFuIEVCQ0RJQyBlbnZpcm9ubWVudCwgYnV0IGl0IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQorICAgRUJDRElDIG1hY3JvLiBUaGF0IGlzLCBQQ1JFMiBjYW4gc3VwcG9ydCAqZWl0aGVyKiBFQkNESUMgY29kZSAqb3IqCisgICBBU0NJSS9Vbmljb2RlLCBidXQgbm90IGJvdGggYXQgb25jZS4gKi8KKy8qICN1bmRlZiBTVVBQT1JUX1VOSUNPREUgKi8KKworLyogRGVmaW5lIHRvIGFueSB2YWx1ZSBmb3IgdmFsZ3JpbmQgc3VwcG9ydCB0byBmaW5kIGludmFsaWQgbWVtb3J5IHJlYWRzLiAqLworLyogI3VuZGVmIFNVUFBPUlRfVkFMR1JJTkQgKi8KKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworI2RlZmluZSBWRVJTSU9OICIxMC4yMSIKKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCisvKiAjdW5kZWYgY29uc3QgKi8KKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDY0IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisvKiAjdW5kZWYgaW50NjRfdCAqLworCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgc2l6ZV90ICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvY29uZmlnLmguaW4gYi9kaXN0Mi9zcmMvY29uZmlnLmguaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTU1ZDBhMAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9jb25maWcuaC5pbgpAQCAtMCwwICsxLDI5NyBAQAorLyogc3JjL2NvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworCisKKy8qIFBDUkUyIGlzIHdyaXR0ZW4gaW4gU3RhbmRhcmQgQywgYnV0IHRoZXJlIGFyZSBhIGZldyBub24tc3RhbmRhcmQgdGhpbmdzIGl0CitjYW4gY29wZSB3aXRoLCBhbGxvd2luZyBpdCB0byBydW4gb24gU3VuT1M0IGFuZCBvdGhlciAiY2xvc2UgdG8gc3RhbmRhcmQiCitzeXN0ZW1zLgorCitJbiBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IHRoZSBHTlUgYXV0b3Rvb2xzLCBjb25maWcuaC5pbiBpcyBjb252ZXJ0ZWQgaW50bworY29uZmlnLmggYnkgdGhlICJjb25maWd1cmUiIHNjcmlwdC4gSW4gZW52aXJvbm1lbnRzIHRoYXQgdXNlIENNYWtlLAorY29uZmlnLWNtYWtlLmluIGlzIGNvbnZlcnRlZCBpbnRvIGNvbmZpZy5oLiBJZiB5b3UgYXJlIGdvaW5nIHRvIGJ1aWxkIFBDUkUyICJieQoraGFuZCIgd2l0aG91dCB1c2luZyAiY29uZmlndXJlIiBvciBDTWFrZSwgeW91IHNob3VsZCBjb3B5IHRoZSBkaXN0cmlidXRlZAorY29uZmlnLmguZ2VuZXJpYyB0byBjb25maWcuaCwgYW5kIGVkaXQgdGhlIG1hY3JvIGRlZmluaXRpb25zIHRvIGJlIHRoZSB3YXkgeW91CituZWVkIHRoZW0uIFlvdSBtdXN0IHRoZW4gYWRkIC1ESEFWRV9DT05GSUdfSCB0byBhbGwgb2YgeW91ciBjb21waWxlIGNvbW1hbmRzLAorc28gdGhhdCBjb25maWcuaCBpcyBpbmNsdWRlZCBhdCB0aGUgc3RhcnQgb2YgZXZlcnkgc291cmNlLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIGF2b2lkIGVkaXRpbmcgYnkgdXNpbmcgLUQgb24gdGhlIGNvbXBpbGVyIGNvbW1hbmQgbGluZQordG8gc2V0IHRoZSBtYWNybyB2YWx1ZXMuIEluIHRoaXMgY2FzZSwgeW91IGRvIG5vdCBoYXZlIHRvIHNldCAtREhBVkVfQ09ORklHX0gsCitidXQgaWYgeW91IGRvLCBkZWZhdWx0IHZhbHVlcyB3aWxsIGJlIHRha2VuIGZyb20gY29uZmlnLmggZm9yIG5vbi1ib29sZWFuCittYWNyb3MgdGhhdCBhcmUgbm90IGRlZmluZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworQm9vbGVhbiBtYWNyb3Mgc3VjaCBhcyBIQVZFX1NURExJQl9IIGFuZCBTVVBQT1JUX1BDUkUyXzggc2hvdWxkIGVpdGhlciBiZSBkZWZpbmVkCisoY29udmVudGlvbmFsbHkgdG8gMSkgZm9yIFRSVUUsIGFuZCBub3QgZGVmaW5lZCBhdCBhbGwgZm9yIEZBTFNFLiBBbGwgc3VjaAorbWFjcm9zIGFyZSBsaXN0ZWQgYXMgYSBjb21tZW50ZWQgI3VuZGVmIGluIGNvbmZpZy5oLmdlbmVyaWMuIE1hY3JvcyBzdWNoIGFzCitNQVRDSF9MSU1JVCwgd2hvc2UgYWN0dWFsIHZhbHVlIGlzIHJlbGV2YW50LCBoYXZlIGRlZmF1bHRzIGRlZmluZWQsIGJ1dCBhcmUKK3N1cnJvdW5kZWQgYnkgI2lmbmRlZi8jZW5kaWYgbGluZXMgc28gdGhhdCB0aGUgdmFsdWUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgLUQuCisKK1BDUkUyIHVzZXMgbWVtbW92ZSgpIGlmIEhBVkVfTUVNTU9WRSBpcyBkZWZpbmVkOyBvdGhlcndpc2UgaXQgdXNlcyBiY29weSgpIGlmCitIQVZFX0JDT1BZIGlzIGRlZmluZWQuIElmIHlvdXIgc3lzdGVtIGhhcyBuZWl0aGVyIGJjb3B5KCkgbm9yIG1lbW1vdmUoKSwgbWFrZQorc3VyZSBib3RoIG1hY3JvcyBhcmUgdW5kZWZpbmVkOyBhbiBlbXVsYXRpb24gZnVuY3Rpb24gd2lsbCB0aGVuIGJlIHVzZWQuICovCisKKy8qIEJ5IGRlZmF1bHQsIHRoZSBcUiBlc2NhcGUgc2VxdWVuY2UgbWF0Y2hlcyBhbnkgVW5pY29kZSBsaW5lIGVuZGluZworICAgY2hhcmFjdGVyIG9yIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMuIElmIEJTUl9BTllDUkxGIGlzIGRlZmluZWQgKHRvIGFueQorICAgdmFsdWUpLCB0aGlzIGlzIGNoYW5nZWQgc28gdGhhdCBiYWNrc2xhc2gtUiBtYXRjaGVzIG9ubHkgQ1IsIExGLCBvciBDUkxGLgorICAgVGhlIGJ1aWxkLXRpbWUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgdXNlciBvZiBQQ1JFMiBhdCBydW50aW1lLgorICAgKi8KKyN1bmRlZiBCU1JfQU5ZQ1JMRgorCisvKiBJZiB5b3UgYXJlIGNvbXBpbGluZyBmb3IgYSBzeXN0ZW0gdGhhdCB1c2VzIEVCQ0RJQyBpbnN0ZWFkIG9mIEFTQ0lJCisgICBjaGFyYWN0ZXIgY29kZXMsIGRlZmluZSB0aGlzIG1hY3JvIHRvIGFueSB2YWx1ZS4gV2hlbiBFQkNESUMgaXMgc2V0LCBQQ1JFMgorICAgYXNzdW1lcyB0aGF0IGFsbCBpbnB1dCBzdHJpbmdzIGFyZSBpbiBFQkNESUMuIElmIHlvdSBkbyBub3QgZGVmaW5lIHRoaXMKKyAgIG1hY3JvLCBQQ1JFMiB3aWxsIGFzc3VtZSBpbnB1dCBzdHJpbmdzIGFyZSBBU0NJSSBvciBVVEYtOC8xNi8zMiBVbmljb2RlLiBJdAorICAgaXMgbm90IHBvc3NpYmxlIHRvIGJ1aWxkIGEgdmVyc2lvbiBvZiBQQ1JFMiB0aGF0IHN1cHBvcnRzIGJvdGggRUJDRElDIGFuZAorICAgVVRGLTgvMTYvMzIuICovCisjdW5kZWYgRUJDRElDCisKKy8qIEluIGFuIEVCQ0RJQyBlbnZpcm9ubWVudCwgZGVmaW5lIHRoaXMgbWFjcm8gdG8gYW55IHZhbHVlIHRvIGFycmFuZ2UgZm9yIHRoZQorICAgTkwgY2hhcmFjdGVyIHRvIGJlIDB4MjUgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCAweDE1LiBOTCBwbGF5cyB0aGUgcm9sZSB0aGF0CisgICBMRiBkb2VzIGluIGFuIEFTQ0lJL1VuaWNvZGUgZW52aXJvbm1lbnQuICovCisjdW5kZWYgRUJDRElDX05MMjUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiY29weScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9CQ09QWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGJ6bGliLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfQlpMSUJfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0RJUkVOVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ETEZDTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZWRpdGxpbmUvcmVhZGxpbmUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9FRElUTElORV9SRUFETElORV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZWRpdC9yZWFkbGluZS9yZWFkbGluZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VESVRfUkVBRExJTkVfUkVBRExJTkVfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTUlUU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtbW92ZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9NRU1NT1ZFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUVNT1JZX0gKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIFBPU0lYIHRocmVhZHMgbGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMuICovCisjdW5kZWYgSEFWRV9QVEhSRUFECisKKy8qIEhhdmUgUFRIUkVBRF9QUklPX0lOSEVSSVQuICovCisjdW5kZWYgSEFWRV9QVEhSRUFEX1BSSU9fSU5IRVJJVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHJlYWRsaW5lL2hpc3RvcnkuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9SRUFETElORV9ISVNUT1JZX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxyZWFkbGluZS9yZWFkbGluZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1JFQURMSU5FX1JFQURMSU5FX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJTlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURExJQl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3InIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSRVJST1IKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19TVEFUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1VOSVNURF9ICisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBzaW1wbGUgdmlzaWJpbGl0eSBkZWNsYXJhdGlvbnMuICovCisjdW5kZWYgSEFWRV9WSVNJQklMSVRZCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luZG93cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1dJTkRPV1NfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHpsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9aTElCX0gKKworLyogUENSRTIgdXNlcyByZWN1cnNpdmUgZnVuY3Rpb24gY2FsbHMgdG8gaGFuZGxlIGJhY2t0cmFja2luZyB3aGlsZSBtYXRjaGluZy4KKyAgIFRoaXMgY2FuIHNvbWV0aW1lcyBiZSBhIHByb2JsZW0gb24gc3lzdGVtcyB0aGF0IGhhdmUgc3RhY2tzIG9mIGxpbWl0ZWQKKyAgIHNpemUuIERlZmluZSBIRUFQX01BVENIX1JFQ1VSU0UgdG8gYW55IHZhbHVlIHRvIGdldCBhIHZlcnNpb24gdGhhdCBkb2Vzbid0CisgICB1c2UgcmVjdXJzaW9uIGluIHRoZSBtYXRjaCgpIGZ1bmN0aW9uOyBpbnN0ZWFkIGl0IGNyZWF0ZXMgaXRzIG93biBzdGFjayBieQorICAgc3RlYW0gdXNpbmcgbWVtb3J5IGZyb20gdGhlIGhlYXAuIEZvciBtb3JlIGRldGFpbCwgc2VlIHRoZSBjb21tZW50cyBhbmQKKyAgIG90aGVyIHN0dWZmIGp1c3QgYWJvdmUgdGhlIG1hdGNoKCkgZnVuY3Rpb24uICovCisjdW5kZWYgSEVBUF9NQVRDSF9SRUNVUlNFCisKKy8qIFRoZSB2YWx1ZSBvZiBMSU5LX1NJWkUgZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHVzZWQgdG8gc3RvcmUgbGlua3MKKyAgIGFzIG9mZnNldHMgd2l0aGluIHRoZSBjb21waWxlZCByZWdleC4gVGhlIGRlZmF1bHQgaXMgMiwgd2hpY2ggYWxsb3dzIGZvcgorICAgY29tcGlsZWQgcGF0dGVybnMgdXAgdG8gNjRLIGxvbmcuIFRoaXMgY292ZXJzIHRoZSB2YXN0IG1ham9yaXR5IG9mIGNhc2VzLgorICAgSG93ZXZlciwgUENSRTIgY2FuIGFsc28gYmUgY29tcGlsZWQgdG8gdXNlIDMgb3IgNCBieXRlcyBpbnN0ZWFkLiBUaGlzCisgICBhbGxvd3MgZm9yIGxvbmdlciBwYXR0ZXJucyBpbiBleHRyZW1lIGNhc2VzLiAqLworI3VuZGVmIExJTktfU0laRQorCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3Rvcnkgd2hlcmUgbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLiAqLworI3VuZGVmIExUX09CSkRJUgorCisvKiBUaGUgdmFsdWUgb2YgTUFUQ0hfTElNSVQgZGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBudW1iZXIgb2YgdGltZXMgdGhlCisgICBpbnRlcm5hbCBtYXRjaCgpIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgZHVyaW5nIGEgc2luZ2xlIGV4ZWN1dGlvbiBvZgorICAgcGNyZTJfbWF0Y2goKS4gVGhlcmUgaXMgYSBydW50aW1lIGludGVyZmFjZSBmb3Igc2V0dGluZyBhIGRpZmZlcmVudCBsaW1pdC4KKyAgIFRoZSBsaW1pdCBleGlzdHMgaW4gb3JkZXIgdG8gY2F0Y2ggcnVuYXdheSByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgdGFrZQorICAgZm9yIGV2ZXIgdG8gZGV0ZXJtaW5lIHRoYXQgdGhleSBkbyBub3QgbWF0Y2guIFRoZSBkZWZhdWx0IGlzIHNldCB2ZXJ5IGxhcmdlCisgICBzbyB0aGF0IGl0IGRvZXMgbm90IGFjY2lkZW50YWxseSBjYXRjaCBsZWdpdGltYXRlIGNhc2VzLiAqLworI3VuZGVmIE1BVENIX0xJTUlUCisKKy8qIFRoZSBhYm92ZSBsaW1pdCBhcHBsaWVzIHRvIGFsbCBjYWxscyBvZiBtYXRjaCgpLCB3aGV0aGVyIG9yIG5vdCB0aGV5CisgICBpbmNyZWFzZSB0aGUgcmVjdXJzaW9uIGRlcHRoLiBJbiBzb21lIGVudmlyb25tZW50cyBpdCBpcyBkZXNpcmFibGUgdG8gbGltaXQKKyAgIHRoZSBkZXB0aCBvZiByZWN1cnNpdmUgY2FsbHMgb2YgbWF0Y2goKSBtb3JlIHN0cmljdGx5LCBpbiBvcmRlciB0byByZXN0cmljdAorICAgdGhlIG1heGltdW0gYW1vdW50IG9mIHN0YWNrIChvciBoZWFwLCBpZiBIRUFQX01BVENIX1JFQ1VSU0UgaXMgZGVmaW5lZCkKKyAgIHRoYXQgaXMgdXNlZC4gVGhlIHZhbHVlIG9mIE1BVENIX0xJTUlUX1JFQ1VSU0lPTiBhcHBsaWVzIG9ubHkgdG8gcmVjdXJzaXZlCisgICBjYWxscyBvZiBtYXRjaCgpLiBUbyBoYXZlIGFueSB1c2VmdWwgZWZmZWN0LCBpdCBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgdmFsdWUKKyAgIG9mIE1BVENIX0xJTUlULiBUaGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlIHNhbWUgdmFsdWUgYXMgTUFUQ0hfTElNSVQuIFRoZXJlCisgICBpcyBhIHJ1bnRpbWUgbWV0aG9kIGZvciBzZXR0aW5nIGEgZGlmZmVyZW50IGxpbWl0LiAqLworI3VuZGVmIE1BVENIX0xJTUlUX1JFQ1VSU0lPTgorCisvKiBUaGlzIGxpbWl0IGlzIHBhcmFtZXRlcml6ZWQganVzdCBpbiBjYXNlIGFueWJvZHkgZXZlciB3YW50cyB0byBjaGFuZ2UgaXQuCisgICBDYXJlIG11c3QgYmUgdGFrZW4gaWYgaXQgaXMgaW5jcmVhc2VkLCBiZWNhdXNlIGl0IGd1YXJkcyBhZ2FpbnN0IGludGVnZXIKKyAgIG92ZXJmbG93IGNhdXNlZCBieSBlbm9ybW91c2x5IGxhcmdlIHBhdHRlcm5zLiAqLworI3VuZGVmIE1BWF9OQU1FX0NPVU5UCisKKy8qIFRoaXMgbGltaXQgaXMgcGFyYW1ldGVyaXplZCBqdXN0IGluIGNhc2UgYW55Ym9keSBldmVyIHdhbnRzIHRvIGNoYW5nZSBpdC4KKyAgIENhcmUgbXVzdCBiZSB0YWtlbiBpZiBpdCBpcyBpbmNyZWFzZWQsIGJlY2F1c2UgaXQgZ3VhcmRzIGFnYWluc3QgaW50ZWdlcgorICAgb3ZlcmZsb3cgY2F1c2VkIGJ5IGVub3Jtb3VzbHkgbGFyZ2UgcGF0dGVybnMuICovCisjdW5kZWYgTUFYX05BTUVfU0laRQorCisvKiBEZWZpbmluZyBORVZFUl9CQUNLU0xBU0hfQyBsb2NrcyBvdXQgdGhlIHVzZSBvZiBcQyBpbiBhbGwgcGF0dGVybnMuICovCisjdW5kZWYgTkVWRVJfQkFDS1NMQVNIX0MKKworLyogVGhlIHZhbHVlIG9mIE5FV0xJTkVfREVGQVVMVCBkZXRlcm1pbmVzIHRoZSBkZWZhdWx0IG5ld2xpbmUgY2hhcmFjdGVyCisgICBzZXF1ZW5jZS4gUENSRTIgY2xpZW50IHByb2dyYW1zIGNhbiBvdmVycmlkZSB0aGlzIGJ5IHNlbGVjdGluZyBvdGhlciB2YWx1ZXMKKyAgIGF0IHJ1biB0aW1lLiBUaGUgdmFsaWQgdmFsdWVzIGFyZSAxIChDUiksIDIgKExGKSwgMyAoQ1JMRiksIDQgKEFOWSksIGFuZCA1CisgICAoQU5ZQ1JMRikuICovCisjdW5kZWYgTkVXTElORV9ERUZBVUxUCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI3VuZGVmIFBBQ0tBR0UKKworLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfTkFNRQorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9TVFJJTkcKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQorCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVVJMCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCisKKy8qIFRoZSB2YWx1ZSBvZiBQQVJFTlNfTkVTVF9MSU1JVCBzcGVjaWZpZXMgdGhlIG1heGltdW0gZGVwdGggb2YgbmVzdGVkCisgICBwYXJlbnRoZXNlcyAob2YgYW55IGtpbmQpIGluIGEgcGF0dGVybi4gVGhpcyBsaW1pdHMgdGhlIGFtb3VudCBvZiBzeXN0ZW0KKyAgIHN0YWNrIHRoYXQgaXMgdXNlZCB3aGlsZSBjb21waWxpbmcgYSBwYXR0ZXJuLiAqLworI3VuZGVmIFBBUkVOU19ORVNUX0xJTUlUCisKKy8qIFRoZSB2YWx1ZSBvZiBQQ1JFMkdSRVBfQlVGU0laRSBkZXRlcm1pbmVzIHRoZSBzaXplIG9mIGJ1ZmZlciB1c2VkIGJ5CisgICBwY3JlMmdyZXAgdG8gaG9sZCBwYXJ0cyBvZiB0aGUgZmlsZSBpdCBpcyBzZWFyY2hpbmcuIFRoaXMgaXMgYWxzbyB0aGUKKyAgIG1pbmltdW0gdmFsdWUuIFRoZSBhY3R1YWwgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHBjcmUyZ3JlcCBpcyB0aHJlZSB0aW1lcworICAgdGhpcyBudW1iZXIsIGJlY2F1c2UgaXQgYWxsb3dzIGZvciB0aGUgYnVmZmVyaW5nIG9mICJiZWZvcmUiIGFuZCAiYWZ0ZXIiCisgICBsaW5lcy4gKi8KKyN1bmRlZiBQQ1JFMkdSRVBfQlVGU0laRQorCisvKiB0byBtYWtlIGEgc3ltYm9sIHZpc2libGUgKi8KKyN1bmRlZiBQQ1JFMlBPU0lYX0VYUF9ERUNMCisKKy8qIHRvIG1ha2UgYSBzeW1ib2wgdmlzaWJsZSAqLworI3VuZGVmIFBDUkUyUE9TSVhfRVhQX0RFRk4KKworLyogRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBpbmNsdWRlIGRlYnVnZ2luZyBjb2RlLiAqLworI3VuZGVmIFBDUkUyX0RFQlVHCisKKy8qIHRvIG1ha2UgYSBzeW1ib2wgdmlzaWJsZSAqLworI3VuZGVmIFBDUkUyX0VYUF9ERUNMCisKKworLyogSWYgeW91IGFyZSBjb21waWxpbmcgZm9yIGEgc3lzdGVtIG90aGVyIHRoYW4gYSBVbml4LWxpa2Ugc3lzdGVtIG9yCisgICBXaW4zMiwgYW5kIGl0IG5lZWRzIHNvbWUgbWFnaWMgdG8gYmUgaW5zZXJ0ZWQgYmVmb3JlIHRoZSBkZWZpbml0aW9uCisgICBvZiBhIGZ1bmN0aW9uIHRoYXQgaXMgZXhwb3J0ZWQgYnkgdGhlIGxpYnJhcnksIGRlZmluZSB0aGlzIG1hY3JvIHRvCisgICBjb250YWluIHRoZSByZWxldmFudCBtYWdpYy4gSWYgeW91IGRvIG5vdCBkZWZpbmUgdGhpcyBtYWNybywgYSBzdWl0YWJsZQorICAgIF9fZGVjbHNwZWMgdmFsdWUgaXMgdXNlZCBmb3IgV2luZG93cyBzeXN0ZW1zOyBpbiBvdGhlciBlbnZpcm9ubWVudHMKKyAgICJleHRlcm4iIGlzIHVzZWQgZm9yIGEgQyBjb21waWxlciBhbmQgImV4dGVybiBDIiBmb3IgYSBDKysgY29tcGlsZXIuCisgICBUaGlzIG1hY3JvIGFwZWFycyBhdCB0aGUgc3RhcnQgb2YgZXZlcnkgZXhwb3J0ZWQgZnVuY3Rpb24gdGhhdCBpcyBwYXJ0CisgICBvZiB0aGUgZXh0ZXJuYWwgQVBJLiBJdCBkb2VzIG5vdCBhcHBlYXIgb24gZnVuY3Rpb25zIHRoYXQgYXJlICJleHRlcm5hbCIKKyAgIGluIHRoZSBDIHNlbnNlLCBidXQgd2hpY2ggYXJlIGludGVybmFsIHRvIHRoZSBsaWJyYXJ5LiAqLworI3VuZGVmIFBDUkUyX0VYUF9ERUZOCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgaWYgbGlua2luZyBzdGF0aWNhbGx5IChUT0RPOiBtYWtlIG5pY2Ugd2l0aCBMaWJ0b29sKSAqLworI3VuZGVmIFBDUkUyX1NUQVRJQworCisvKiBEZWZpbmUgdG8gbmVjZXNzYXJ5IHN5bWJvbCBpZiB0aGlzIGNvbnN0YW50IHVzZXMgYSBub24tc3RhbmRhcmQgbmFtZSBvbgorICAgeW91ciBzeXN0ZW0uICovCisjdW5kZWYgUFRIUkVBRF9DUkVBVEVfSk9JTkFCTEUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjdW5kZWYgU1REQ19IRUFERVJTCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIEp1c3QtSW4tVGltZSBjb21waWxpbmcuICovCisjdW5kZWYgU1VQUE9SVF9KSVQKKworLyogRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBhbGxvdyBwY3JlMmdyZXAgdG8gYmUgbGlua2VkIHdpdGggbGliYnoyLCBzbyB0aGF0IGl0CisgICBpcyBhYmxlIHRvIGhhbmRsZSAuYnoyIGZpbGVzLiAqLworI3VuZGVmIFNVUFBPUlRfTElCQloyCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gYWxsb3cgcGNyZTJ0ZXN0IHRvIGJlIGxpbmtlZCB3aXRoIGxpYmVkaXQuICovCisjdW5kZWYgU1VQUE9SVF9MSUJFRElUCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gYWxsb3cgcGNyZTJ0ZXN0IHRvIGJlIGxpbmtlZCB3aXRoIGxpYnJlYWRsaW5lLiAqLworI3VuZGVmIFNVUFBPUlRfTElCUkVBRExJTkUKKworLyogRGVmaW5lIHRvIGFueSB2YWx1ZSB0byBhbGxvdyBwY3JlMmdyZXAgdG8gYmUgbGlua2VkIHdpdGggbGlieiwgc28gdGhhdCBpdAorICAgaXMgYWJsZSB0byBoYW5kbGUgLmd6IGZpbGVzLiAqLworI3VuZGVmIFNVUFBPUlRfTElCWgorCisvKiBEZWZpbmUgdG8gYW55IHZhbHVlIHRvIGVuYWJsZSBKSVQgc3VwcG9ydCBpbiBwY3JlMmdyZXAuICovCisjdW5kZWYgU1VQUE9SVF9QQ1JFMkdSRVBfSklUCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIHRoZSAxNiBiaXQgUENSRTIgbGlicmFyeS4gKi8KKyN1bmRlZiBTVVBQT1JUX1BDUkUyXzE2CisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIHRoZSAzMiBiaXQgUENSRTIgbGlicmFyeS4gKi8KKyN1bmRlZiBTVVBQT1JUX1BDUkUyXzMyCisKKy8qIERlZmluZSB0byBhbnkgdmFsdWUgdG8gZW5hYmxlIHRoZSA4IGJpdCBQQ1JFMiBsaWJyYXJ5LiAqLworI3VuZGVmIFNVUFBPUlRfUENSRTJfOAorCisvKiBEZWZpbmUgdG8gYW55IHZhbHVlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBVbmljb2RlIGFuZCBVVEYgZW5jb2RpbmcuIFRoaXMKKyAgIHdpbGwgd29yayBldmVuIGluIGFuIEVCQ0RJQyBlbnZpcm9ubWVudCwgYnV0IGl0IGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZQorICAgRUJDRElDIG1hY3JvLiBUaGF0IGlzLCBQQ1JFMiBjYW4gc3VwcG9ydCAqZWl0aGVyKiBFQkNESUMgY29kZSAqb3IqCisgICBBU0NJSS9Vbmljb2RlLCBidXQgbm90IGJvdGggYXQgb25jZS4gKi8KKyN1bmRlZiBTVVBQT1JUX1VOSUNPREUKKworLyogRGVmaW5lIHRvIGFueSB2YWx1ZSBmb3IgdmFsZ3JpbmQgc3VwcG9ydCB0byBmaW5kIGludmFsaWQgbWVtb3J5IHJlYWRzLiAqLworI3VuZGVmIFNVUFBPUlRfVkFMR1JJTkQKKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworI3VuZGVmIFZFUlNJT04KKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCisjdW5kZWYgY29uc3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDY0IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgaW50NjRfdAorCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisjdW5kZWYgc2l6ZV90CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvZGZ0YWJsZXMuYyBiL2Rpc3QyL3NyYy9kZnRhYmxlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYjkwYjUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvZGZ0YWJsZXMuYwpAQCAtMCwwICsxLDIxNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQQ1JFIGlzIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHN5bnRheAorYW5kIHNlbWFudGljcyBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2Ugb2YgdGhlIFBlcmwgNSBsYW5ndWFnZS4KKworICAgICAgICAgICAgICAgICAgICAgICBXcml0dGVuIGJ5IFBoaWxpcCBIYXplbAorICAgICBPcmlnaW5hbCBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDE5OTctMjAxMiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorICAgICAgICAgTmV3IEFQSSBjb2RlIENvcHlyaWdodCAoYykgMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisKKy8qIFRoaXMgaXMgYSBmcmVlc3RhbmRpbmcgc3VwcG9ydCBwcm9ncmFtIHRvIGdlbmVyYXRlIGEgZmlsZSBjb250YWluaW5nCitjaGFyYWN0ZXIgdGFibGVzIGZvciBQQ1JFMi4gVGhlIHRhYmxlcyBhcmUgYnVpbHQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50Citsb2NhbGUgdXNpbmcgdGhlIHBjcmUyX21ha2V0YWJsZXMoKSBmdW5jdGlvbiwgd2hpY2ggaXMgcGFydCBvZiB0aGUgUENSRTIgQVBJLgorKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorCisjZGVmaW5lIFBDUkUyX0NPREVfVU5JVF9XSURUSCAwICAgLyogTXVzdCBiZSBzZXQsIGJ1dCBub3QgcmVsZXZhbnQgaGVyZSAqLworI2luY2x1ZGUgInBjcmUyX2ludGVybmFsLmgiCisKKyNkZWZpbmUgREZUQUJMRVMgICAgIC8qIHBjcmUyX21ha2V0YWJsZXMuYyBub3RpY2VzIHRoaXMgKi8KKyNpbmNsdWRlICJwY3JlMl9tYWtldGFibGVzLmMiCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKK0ZJTEUgKmY7CitpbnQgaSA9IDE7Citjb25zdCB1bnNpZ25lZCBjaGFyICp0YWJsZXM7Citjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlX29mX3RhYmxlczsKKworLyogQnkgZGVmYXVsdCwgdGhlIGRlZmF1bHQgQyBsb2NhbGUgaXMgdXNlZCByYXRoZXIgdGhhbiB3aGF0IHRoZSBidWlsZGluZyB1c2VyCitoYXBwZW5zIHRvIGhhdmUgc2V0LiBIb3dldmVyLCBpZiB0aGUgLUwgb3B0aW9uIGlzIGdpdmVuLCBzZXQgdGhlIGxvY2FsZSBmcm9tCit0aGUgTENfeHh4IGVudmlyb25tZW50IHZhcmlhYmxlcy4gKi8KKworaWYgKGFyZ2MgPiAxICYmIHN0cmNtcChhcmd2WzFdLCAiLUwiKSA9PSAwKQorICB7CisgIHNldGxvY2FsZShMQ19BTEwsICIiKTsgICAgICAgIC8qIFNldCBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcyAqLworICBpKys7CisgIH0KKworaWYgKGFyZ2MgPCBpICsgMSkKKyAgeworICBmcHJpbnRmKHN0ZGVyciwgImRmdGFibGVzOiBvbmUgZmlsZW5hbWUgYXJndW1lbnQgaXMgcmVxdWlyZWRcbiIpOworICByZXR1cm4gMTsKKyAgfQorCit0YWJsZXMgPSBtYWtldGFibGVzKCk7CitiYXNlX29mX3RhYmxlcyA9IHRhYmxlczsKKworZiA9IGZvcGVuKGFyZ3ZbaV0sICJ3YiIpOworaWYgKGYgPT0gTlVMTCkKKyAgeworICBmcHJpbnRmKHN0ZGVyciwgImRmdGFibGVzOiBmYWlsZWQgdG8gb3BlbiAlcyBmb3Igd3JpdGluZ1xuIiwgYXJndlsxXSk7CisgIHJldHVybiAxOworICB9CisKKy8qIFRoZXJlIGFyZSBzZXZlcmFsIGZwcmludGYoKSBjYWxscyBoZXJlLCBiZWNhdXNlIGdjYyBpbiBwZWRhbnRpYyBtb2RlCitjb21wbGFpbnMgYWJvdXQgdGhlIHZlcnkgbG9uZyBzdHJpbmcgb3RoZXJ3aXNlLiAqLworCitmcHJpbnRmKGYsCisgICIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuIgorICAiKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICpcbiIKKyAgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiIKKyAgIi8qIFRoaXMgZmlsZSB3YXMgYXV0b21hdGljYWxseSB3cml0dGVuIGJ5IHRoZSBkZnRhYmxlcyBhdXhpbGlhcnlcbiIKKyAgInByb2dyYW0uIEl0IGNvbnRhaW5zIGNoYXJhY3RlciB0YWJsZXMgdGhhdCBhcmUgdXNlZCB3aGVuIG5vIGV4dGVybmFsXG4iCisgICJ0YWJsZXMgYXJlIHBhc3NlZCB0byBQQ1JFMiBieSB0aGUgYXBwbGljYXRpb24gdGhhdCBjYWxscyBpdC4gVGhlIHRhYmxlc1xuIgorICAiYXJlIHVzZWQgb25seSBmb3IgY2hhcmFjdGVycyB3aG9zZSBjb2RlIHZhbHVlcyBhcmUgbGVzcyB0aGFuIDI1Ni4gKi9cblxuIik7CisKKy8qIEZvcmNlIGNvbmZpZy5oIGluIHovT1MgKi8KKworI2lmIGRlZmluZWQgTkFUSVZFX1pPUworZnByaW50ZihmLAorICAiLyogRm9yIHovT1MsIGNvbmZpZy5oIGlzIGZvcmNlZCAqL1xuIgorICAiI2lmbmRlZiBIQVZFX0NPTkZJR19IXG4iCisgICIjZGVmaW5lIEhBVkVfQ09ORklHX0ggMVxuIgorICAiI2VuZGlmXG5cbiIpOworI2VuZGlmCisKK2ZwcmludGYoZiwKKyAgIi8qIFRoZSBmb2xsb3dpbmcgI2luY2x1ZGVzIGFyZSBwcmVzZW50IGJlY2F1c2Ugd2l0aG91dCB0aGVtIGdjYyA0LnggbWF5IHJlbW92ZVxuIgorICAidGhlIGFycmF5IGRlZmluaXRpb24gZnJvbSB0aGUgZmluYWwgYmluYXJ5IGlmIFBDUkUyIGlzIGJ1aWx0IGludG8gYSBzdGF0aWNcbiIKKyAgImxpYnJhcnkgYW5kIGRlYWQgY29kZSBzdHJpcHBpbmcgaXMgYWN0aXZhdGVkLiBUaGlzIGxlYWRzIHRvIGxpbmsgZXJyb3JzLlxuIgorICAiUHVsbGluZyBpbiB0aGUgaGVhZGVyIGVuc3VyZXMgdGhhdCB0aGUgYXJyYXkgZ2V0cyBmbGFnZ2VkIGFzIFwic29tZW9uZVxuIgorICAib3V0c2lkZSB0aGlzIGNvbXBpbGF0aW9uIHVuaXQgbWlnaHQgcmVmZXJlbmNlIHRoaXNcIiBhbmQgc28gaXQgd2lsbCBhbHdheXNcbiIKKyAgImJlIHN1cHBsaWVkIHRvIHRoZSBsaW5rZXIuICovXG5cbiIpOworCitmcHJpbnRmKGYsCisgICIjaWZkZWYgSEFWRV9DT05GSUdfSFxuIgorICAiI2luY2x1ZGUgXCJjb25maWcuaFwiXG4iCisgICIjZW5kaWZcblxuIgorICAiI2luY2x1ZGUgXCJwY3JlMl9pbnRlcm5hbC5oXCJcblxuIik7CisKK2ZwcmludGYoZiwKKyAgImNvbnN0IHVpbnQ4X3QgUFJJVihkZWZhdWx0X3RhYmxlcylbXSA9IHtcblxuIgorICAiLyogVGhpcyB0YWJsZSBpcyBhIGxvd2VyIGNhc2luZyB0YWJsZS4gKi9cblxuIik7CisKK2ZwcmludGYoZiwgIiAgIik7Citmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgIHsKKyAgaWYgKChpICYgNykgPT0gMCAmJiBpICE9IDApIGZwcmludGYoZiwgIlxuICAiKTsKKyAgZnByaW50ZihmLCAiJTNkIiwgKnRhYmxlcysrKTsKKyAgaWYgKGkgIT0gMjU1KSBmcHJpbnRmKGYsICIsIik7CisgIH0KK2ZwcmludGYoZiwgIixcblxuIik7CisKK2ZwcmludGYoZiwgIi8qIFRoaXMgdGFibGUgaXMgYSBjYXNlIGZsaXBwaW5nIHRhYmxlLiAqL1xuXG4iKTsKKworZnByaW50ZihmLCAiICAiKTsKK2ZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgeworICBpZiAoKGkgJiA3KSA9PSAwICYmIGkgIT0gMCkgZnByaW50ZihmLCAiXG4gICIpOworICBmcHJpbnRmKGYsICIlM2QiLCAqdGFibGVzKyspOworICBpZiAoaSAhPSAyNTUpIGZwcmludGYoZiwgIiwiKTsKKyAgfQorZnByaW50ZihmLCAiLFxuXG4iKTsKKworZnByaW50ZihmLAorICAiLyogVGhpcyB0YWJsZSBjb250YWlucyBiaXQgbWFwcyBmb3IgdmFyaW91cyBjaGFyYWN0ZXIgY2xhc3Nlcy5cbiIKKyAgIkVhY2ggbWFwIGlzIDMyIGJ5dGVzIGxvbmcgYW5kIHRoZSBiaXRzIHJ1biBmcm9tIHRoZSBsZWFzdFxuIgorICAic2lnbmlmaWNhbnQgZW5kIG9mIGVhY2ggYnl0ZS4gVGhlIGNsYXNzZXMgdGhhdCBoYXZlIHRoZWlyIG93blxuIgorICAibWFwcyBhcmU6IHNwYWNlLCB4ZGlnaXQsIGRpZ2l0LCB1cHBlciwgbG93ZXIsIHdvcmQsIGdyYXBoXG4iCisgICJwcmludCwgcHVuY3QsIGFuZCBjbnRybC4gT3RoZXIgY2xhc3NlcyBhcmUgYnVpbHQgZnJvbSBjb21iaW5hdGlvbnMuICovXG5cbiIpOworCitmcHJpbnRmKGYsICIgICIpOworZm9yIChpID0gMDsgaSA8IGNiaXRfbGVuZ3RoOyBpKyspCisgIHsKKyAgaWYgKChpICYgNykgPT0gMCAmJiBpICE9IDApCisgICAgeworICAgIGlmICgoaSAmIDMxKSA9PSAwKSBmcHJpbnRmKGYsICJcbiIpOworICAgIGZwcmludGYoZiwgIlxuICAiKTsKKyAgICB9CisgIGZwcmludGYoZiwgIjB4JTAyeCIsICp0YWJsZXMrKyk7CisgIGlmIChpICE9IGNiaXRfbGVuZ3RoIC0gMSkgZnByaW50ZihmLCAiLCIpOworICB9CitmcHJpbnRmKGYsICIsXG5cbiIpOworCitmcHJpbnRmKGYsCisgICIvKiBUaGlzIHRhYmxlIGlkZW50aWZpZXMgdmFyaW91cyBjbGFzc2VzIG9mIGNoYXJhY3RlciBieSBpbmRpdmlkdWFsIGJpdHM6XG4iCisgICIgIDB4JTAyeCAgIHdoaXRlIHNwYWNlIGNoYXJhY3RlclxuIgorICAiICAweCUwMnggICBsZXR0ZXJcbiIKKyAgIiAgMHglMDJ4ICAgZGVjaW1hbCBkaWdpdFxuIgorICAiICAweCUwMnggICBoZXhhZGVjaW1hbCBkaWdpdFxuIgorICAiICAweCUwMnggICBhbHBoYW51bWVyaWMgb3IgJ18nXG4iCisgICIgIDB4JTAyeCAgIHJlZ3VsYXIgZXhwcmVzc2lvbiBtZXRhY2hhcmFjdGVyIG9yIGJpbmFyeSB6ZXJvXG4qL1xuXG4iLAorICBjdHlwZV9zcGFjZSwgY3R5cGVfbGV0dGVyLCBjdHlwZV9kaWdpdCwgY3R5cGVfeGRpZ2l0LCBjdHlwZV93b3JkLAorICBjdHlwZV9tZXRhKTsKKworZnByaW50ZihmLCAiICAiKTsKK2ZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgeworICBpZiAoKGkgJiA3KSA9PSAwICYmIGkgIT0gMCkKKyAgICB7CisgICAgZnByaW50ZihmLCAiIC8qICIpOworICAgIGlmIChpc3ByaW50KGktOCkpIGZwcmludGYoZiwgIiAlYyAtIiwgaS04KTsKKyAgICAgIGVsc2UgZnByaW50ZihmLCAiJTNkLSIsIGktOCk7CisgICAgaWYgKGlzcHJpbnQoaS0xKSkgZnByaW50ZihmLCAiICVjICIsIGktMSk7CisgICAgICBlbHNlIGZwcmludGYoZiwgIiUzZCIsIGktMSk7CisgICAgZnByaW50ZihmLCAiICovXG4gICIpOworICAgIH0KKyAgZnByaW50ZihmLCAiMHglMDJ4IiwgKnRhYmxlcysrKTsKKyAgaWYgKGkgIT0gMjU1KSBmcHJpbnRmKGYsICIsIik7CisgIH0KKworZnByaW50ZihmLCAifTsvKiAiKTsKK2lmIChpc3ByaW50KGktOCkpIGZwcmludGYoZiwgIiAlYyAtIiwgaS04KTsKKyAgZWxzZSBmcHJpbnRmKGYsICIlM2QtIiwgaS04KTsKK2lmIChpc3ByaW50KGktMSkpIGZwcmludGYoZiwgIiAlYyAiLCBpLTEpOworICBlbHNlIGZwcmludGYoZiwgIiUzZCIsIGktMSk7CitmcHJpbnRmKGYsICIgKi9cblxuLyogRW5kIG9mIHBjcmUyX2NoYXJ0YWJsZXMuYyAqL1xuIik7CisKK2ZjbG9zZShmKTsKK2ZyZWUoKHZvaWQgKiliYXNlX29mX3RhYmxlcyk7CityZXR1cm4gMDsKK30KKworLyogRW5kIG9mIGRmdGFibGVzLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMi5oLmdlbmVyaWMgYi9kaXN0Mi9zcmMvcGNyZTIuaC5nZW5lcmljCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOWJhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTIuaC5nZW5lcmljCkBAIC0wLDAgKzEsNzIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgaXMgdGhlIHB1YmxpYyBoZWFkZXIgZmlsZSBmb3IgdGhlIFBDUkUgbGlicmFyeSwgc2Vjb25kIEFQSSwgdG8gYmUKKyNpbmNsdWRlZCBieSBhcHBsaWNhdGlvbnMgdGhhdCBjYWxsIFBDUkUyIGZ1bmN0aW9ucy4KKworICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworI2lmbmRlZiBfUENSRTJfSAorI2RlZmluZSBfUENSRTJfSAorCisvKiBUaGUgY3VycmVudCBQQ1JFIHZlcnNpb24gaW5mb3JtYXRpb24uICovCisKKyNkZWZpbmUgUENSRTJfTUFKT1IgICAgICAgICAgMTAKKyNkZWZpbmUgUENSRTJfTUlOT1IgICAgICAgICAgMjEKKyNkZWZpbmUgUENSRTJfUFJFUkVMRUFTRSAgICAgCisjZGVmaW5lIFBDUkUyX0RBVEUgICAgICAgICAgIDIwMTYtMDEtMTIKKworLyogV2hlbiBhbiBhcHBsaWNhdGlvbiBsaW5rcyB0byBhIFBDUkUgRExMIGluIFdpbmRvd3MsIHRoZSBzeW1ib2xzIHRoYXQgYXJlCitpbXBvcnRlZCBoYXZlIHRvIGJlIGlkZW50aWZpZWQgYXMgc3VjaC4gV2hlbiBidWlsZGluZyBQQ1JFMiwgdGhlIGFwcHJvcHJpYXRlCitleHBvcnQgc2V0dGluZyBpcyBkZWZpbmVkIGluIHBjcmUyX2ludGVybmFsLmgsIHdoaWNoIGluY2x1ZGVzIHRoaXMgZmlsZS4gU28gd2UKK2Rvbid0IGNoYW5nZSBleGlzdGluZyBkZWZpbml0aW9ucyBvZiBQQ1JFMl9FWFBfREVDTC4gKi8KKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChQQ1JFMl9TVEFUSUMpCisjICBpZm5kZWYgUENSRTJfRVhQX0RFQ0wKKyMgICAgZGVmaW5lIFBDUkUyX0VYUF9ERUNMICBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjICBlbmRpZgorI2VuZGlmCisKKy8qIEJ5IGRlZmF1bHQsIHdlIHVzZSB0aGUgc3RhbmRhcmQgImV4dGVybiIgZGVjbGFyYXRpb25zLiAqLworCisjaWZuZGVmIFBDUkUyX0VYUF9ERUNMCisjICBpZmRlZiBfX2NwbHVzcGx1cworIyAgICBkZWZpbmUgUENSRTJfRVhQX0RFQ0wgIGV4dGVybiAiQyIKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFBDUkUyX0VYUF9ERUNMICBleHRlcm4KKyMgIGVuZGlmCisjZW5kaWYKKworLyogSGF2ZSB0byBpbmNsdWRlIGxpbWl0cy5oLCBzdGRsaWIuaCBhbmQgc3RkaW50LmggdG8gZW5zdXJlIHRoYXQgc2l6ZV90IGFuZAordWludDhfdCwgVUNIQVJfTUFYLCBldGMgYXJlIGRlZmluZWQuICovCisKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworLyogQWxsb3cgZm9yIEMrKyB1c2VycyBjb21waWxpbmcgdGhpcyBkaXJlY3RseS4gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBUaGUgZm9sbG93aW5nIG9wdGlvbiBiaXRzIGNhbiBiZSBwYXNzZWQgdG8gcGNyZTJfY29tcGlsZSgpLCBwY3JlMl9tYXRjaCgpLAorb3IgcGNyZTJfZGZhX21hdGNoKCkuIFBDUkUyX05PX1VURl9DSEVDSyBhZmZlY3RzIG9ubHkgdGhlIGZ1bmN0aW9uIHRvIHdoaWNoIGl0CitpcyBwYXNzZWQuIFB1dCB0aGVzZSBiaXRzIGF0IHRoZSBtb3N0IHNpZ25pZmljYW50IGVuZCBvZiB0aGUgb3B0aW9ucyB3b3JkIHNvCitvdGhlcnMgY2FuIGJlIGFkZGVkIG5leHQgdG8gdGhlbSAqLworCisjZGVmaW5lIFBDUkUyX0FOQ0hPUkVEICAgICAgICAgICAgMHg4MDAwMDAwMHUKKyNkZWZpbmUgUENSRTJfTk9fVVRGX0NIRUNLICAgICAgICAweDQwMDAwMDAwdQorCisvKiBUaGUgZm9sbG93aW5nIG9wdGlvbiBiaXRzIGNhbiBiZSBwYXNzZWQgb25seSB0byBwY3JlMl9jb21waWxlKCkuIEhvd2V2ZXIsCit0aGV5IG1heSBhZmZlY3QgY29tcGlsYXRpb24sIEpJVCBjb21waWxhdGlvbiwgYW5kL29yIGludGVycHJldGl2ZSBleGVjdXRpb24uCitUaGUgZm9sbG93aW5nIHRhZ3MgaW5kaWNhdGUgd2hpY2g6CisKK0MgICBhbHRlcnMgd2hhdCBpcyBjb21waWxlZCBieSBwY3JlMl9jb21waWxlKCkKK0ogICBhbHRlcnMgd2hhdCBpcyBjb21waWxlZCBieSBwY3JlMl9qaXRfY29tcGlsZSgpCitNICAgaXMgaW5zcGVjdGVkIGR1cmluZyBwY3JlMl9tYXRjaCgpIGV4ZWN1dGlvbgorRCAgIGlzIGluc3BlY3RlZCBkdXJpbmcgcGNyZTJfZGZhX21hdGNoKCkgZXhlY3V0aW9uCisqLworCisjZGVmaW5lIFBDUkUyX0FMTE9XX0VNUFRZX0NMQVNTICAgMHgwMDAwMDAwMXUgIC8qIEMgICAgICAgKi8KKyNkZWZpbmUgUENSRTJfQUxUX0JTVVggICAgICAgICAgICAweDAwMDAwMDAydSAgLyogQyAgICAgICAqLworI2RlZmluZSBQQ1JFMl9BVVRPX0NBTExPVVQgICAgICAgIDB4MDAwMDAwMDR1ICAvKiBDICAgICAgICovCisjZGVmaW5lIFBDUkUyX0NBU0VMRVNTICAgICAgICAgICAgMHgwMDAwMDAwOHUgIC8qIEMgICAgICAgKi8KKyNkZWZpbmUgUENSRTJfRE9MTEFSX0VORE9OTFkgICAgICAweDAwMDAwMDEwdSAgLyogICBKIE0gRCAqLworI2RlZmluZSBQQ1JFMl9ET1RBTEwgICAgICAgICAgICAgIDB4MDAwMDAwMjB1ICAvKiBDICAgICAgICovCisjZGVmaW5lIFBDUkUyX0RVUE5BTUVTICAgICAgICAgICAgMHgwMDAwMDA0MHUgIC8qIEMgICAgICAgKi8KKyNkZWZpbmUgUENSRTJfRVhURU5ERUQgICAgICAgICAgICAweDAwMDAwMDgwdSAgLyogQyAgICAgICAqLworI2RlZmluZSBQQ1JFMl9GSVJTVExJTkUgICAgICAgICAgIDB4MDAwMDAxMDB1ICAvKiAgIEogTSBEICovCisjZGVmaW5lIFBDUkUyX01BVENIX1VOU0VUX0JBQ0tSRUYgMHgwMDAwMDIwMHUgIC8qIEMgSiBNICAgKi8KKyNkZWZpbmUgUENSRTJfTVVMVElMSU5FICAgICAgICAgICAweDAwMDAwNDAwdSAgLyogQyAgICAgICAqLworI2RlZmluZSBQQ1JFMl9ORVZFUl9VQ1AgICAgICAgICAgIDB4MDAwMDA4MDB1ICAvKiBDICAgICAgICovCisjZGVmaW5lIFBDUkUyX05FVkVSX1VURiAgICAgICAgICAgMHgwMDAwMTAwMHUgIC8qIEMgICAgICAgKi8KKyNkZWZpbmUgUENSRTJfTk9fQVVUT19DQVBUVVJFICAgICAweDAwMDAyMDAwdSAgLyogQyAgICAgICAqLworI2RlZmluZSBQQ1JFMl9OT19BVVRPX1BPU1NFU1MgICAgIDB4MDAwMDQwMDB1ICAvKiBDICAgICAgICovCisjZGVmaW5lIFBDUkUyX05PX0RPVFNUQVJfQU5DSE9SICAgMHgwMDAwODAwMHUgIC8qIEMgICAgICAgKi8KKyNkZWZpbmUgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUgICAweDAwMDEwMDAwdSAgLyogICBKIE0gRCAqLworI2RlZmluZSBQQ1JFMl9VQ1AgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDB1ICAvKiBDIEogTSBEICovCisjZGVmaW5lIFBDUkUyX1VOR1JFRURZICAgICAgICAgICAgMHgwMDA0MDAwMHUgIC8qIEMgICAgICAgKi8KKyNkZWZpbmUgUENSRTJfVVRGICAgICAgICAgICAgICAgICAweDAwMDgwMDAwdSAgLyogQyBKIE0gRCAqLworI2RlZmluZSBQQ1JFMl9ORVZFUl9CQUNLU0xBU0hfQyAgIDB4MDAxMDAwMDB1ICAvKiBDICAgICAgICovCisjZGVmaW5lIFBDUkUyX0FMVF9DSVJDVU1GTEVYICAgICAgMHgwMDIwMDAwMHUgIC8qICAgSiBNIEQgKi8KKyNkZWZpbmUgUENSRTJfQUxUX1ZFUkJOQU1FUyAgICAgICAweDAwNDAwMDAwdSAgLyogQyAgICAgICAqLworI2RlZmluZSBQQ1JFMl9VU0VfT0ZGU0VUX0xJTUlUICAgIDB4MDA4MDAwMDB1ICAvKiAgIEogTSBEICovCisKKy8qIFRoZXNlIGFyZSBmb3IgcGNyZTJfaml0X2NvbXBpbGUoKS4gKi8KKworI2RlZmluZSBQQ1JFMl9KSVRfQ09NUExFVEUgICAgICAgIDB4MDAwMDAwMDF1ICAvKiBGb3IgZnVsbCBtYXRjaGluZyAqLworI2RlZmluZSBQQ1JFMl9KSVRfUEFSVElBTF9TT0ZUICAgIDB4MDAwMDAwMDJ1CisjZGVmaW5lIFBDUkUyX0pJVF9QQVJUSUFMX0hBUkQgICAgMHgwMDAwMDAwNHUKKworLyogVGhlc2UgYXJlIGZvciBwY3JlMl9tYXRjaCgpLCBwY3JlMl9kZmFfbWF0Y2goKSwgYW5kIHBjcmUyX2ppdF9tYXRjaCgpLiBOb3RlCit0aGF0IFBDUkUyX0FOQ0hPUkVEIGFuZCBQQ1JFMl9OT19VVEZfQ0hFQ0sgY2FuIGFsc28gYmUgcGFzc2VkIHRvIHRoZXNlCitmdW5jdGlvbnMgKHRob3VnaCBwY3JlMl9qaXRfbWF0Y2goKSBpZ25vcmVzIHRoZSBsYXR0ZXIgc2luY2UgaXQgYnlwYXNzZXMgYWxsCitzYW5pdHkgY2hlY2tzKS4gKi8KKworI2RlZmluZSBQQ1JFMl9OT1RCT0wgICAgICAgICAgICAgIDB4MDAwMDAwMDF1CisjZGVmaW5lIFBDUkUyX05PVEVPTCAgICAgICAgICAgICAgMHgwMDAwMDAwMnUKKyNkZWZpbmUgUENSRTJfTk9URU1QVFkgICAgICAgICAgICAweDAwMDAwMDA0dSAgLyogKSBUaGVzZSB0d28gbXVzdCBiZSBrZXB0ICovCisjZGVmaW5lIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQgICAgMHgwMDAwMDAwOHUgIC8qICkgYWRqYWNlbnQgdG8gZWFjaCBvdGhlci4gKi8KKyNkZWZpbmUgUENSRTJfUEFSVElBTF9TT0ZUICAgICAgICAweDAwMDAwMDEwdQorI2RlZmluZSBQQ1JFMl9QQVJUSUFMX0hBUkQgICAgICAgIDB4MDAwMDAwMjB1CisKKy8qIFRoZXNlIGFyZSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHBjcmUyX2RmYV9tYXRjaCgpLiAqLworCisjZGVmaW5lIFBDUkUyX0RGQV9SRVNUQVJUICAgICAgICAgMHgwMDAwMDA0MHUKKyNkZWZpbmUgUENSRTJfREZBX1NIT1JURVNUICAgICAgICAweDAwMDAwMDgwdQorCisvKiBUaGVzZSBhcmUgYWRkaXRpb25hbCBvcHRpb25zIGZvciBwY3JlMl9zdWJzdGl0dXRlKCkuICovCisKKyNkZWZpbmUgUENSRTJfU1VCU1RJVFVURV9HTE9CQUwgICAgICAgICAgIDB4MDAwMDAxMDB1CisjZGVmaW5lIFBDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUQgICAgICAgICAweDAwMDAwMjAwdQorI2RlZmluZSBQQ1JFMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZICAgICAgMHgwMDAwMDQwMHUKKyNkZWZpbmUgUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUICAgIDB4MDAwMDA4MDB1CisjZGVmaW5lIFBDUkUyX1NVQlNUSVRVVEVfT1ZFUkZMT1dfTEVOR1RIICAweDAwMDAxMDAwdQorCisvKiBOZXdsaW5lIGFuZCBcUiBzZXR0aW5ncywgZm9yIHVzZSBpbiBjb21waWxlIGNvbnRleHRzLiBUaGUgbmV3bGluZSB2YWx1ZXMKK211c3QgYmUga2VwdCBpbiBzdGVwIHdpdGggdmFsdWVzIHNldCBpbiBjb25maWcuaCBhbmQgYm90aCBzZXRzIG11c3QgYWxsIGJlCitncmVhdGVyIHRoYW4gemVyby4gKi8KKworI2RlZmluZSBQQ1JFMl9ORVdMSU5FX0NSICAgICAgICAgIDEKKyNkZWZpbmUgUENSRTJfTkVXTElORV9MRiAgICAgICAgICAyCisjZGVmaW5lIFBDUkUyX05FV0xJTkVfQ1JMRiAgICAgICAgMworI2RlZmluZSBQQ1JFMl9ORVdMSU5FX0FOWSAgICAgICAgIDQKKyNkZWZpbmUgUENSRTJfTkVXTElORV9BTllDUkxGICAgICA1CisKKyNkZWZpbmUgUENSRTJfQlNSX1VOSUNPREUgICAgICAgICAxCisjZGVmaW5lIFBDUkUyX0JTUl9BTllDUkxGICAgICAgICAgMgorCisvKiBFcnJvciBjb2Rlczogbm8gbWF0Y2ggYW5kIHBhcnRpYWwgbWF0Y2ggYXJlICJleHBlY3RlZCIgZXJyb3JzLiAqLworCisjZGVmaW5lIFBDUkUyX0VSUk9SX05PTUFUQ0ggICAgICAgICAgKC0xKQorI2RlZmluZSBQQ1JFMl9FUlJPUl9QQVJUSUFMICAgICAgICAgICgtMikKKworLyogRXJyb3IgY29kZXMgZm9yIFVURi04IHZhbGlkaXR5IGNoZWNrcyAqLworCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSMSAgICAgICAgKC0zKQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjIgICAgICAgICgtNCkKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlIzICAgICAgICAoLTUpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSNCAgICAgICAgKC02KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjUgICAgICAgICgtNykKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlI2ICAgICAgICAoLTgpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSNyAgICAgICAgKC05KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjggICAgICAgKC0xMCkKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlI5ICAgICAgICgtMTEpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSMTAgICAgICAoLTEyKQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjExICAgICAgKC0xMykKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlIxMiAgICAgICgtMTQpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSMTMgICAgICAoLTE1KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE0ICAgICAgKC0xNikKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlIxNSAgICAgICgtMTcpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSMTYgICAgICAoLTE4KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE3ICAgICAgKC0xOSkKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlIxOCAgICAgICgtMjApCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSMTkgICAgICAoLTIxKQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjIwICAgICAgKC0yMikKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlIyMSAgICAgICgtMjMpCisKKy8qIEVycm9yIGNvZGVzIGZvciBVVEYtMTYgdmFsaWRpdHkgY2hlY2tzICovCisKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGMTZfRVJSMSAgICAgICgtMjQpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjE2X0VSUjIgICAgICAoLTI1KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEYxNl9FUlIzICAgICAgKC0yNikKKworLyogRXJyb3IgY29kZXMgZm9yIFVURi0zMiB2YWxpZGl0eSBjaGVja3MgKi8KKworI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEYzMl9FUlIxICAgICAgKC0yNykKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGMzJfRVJSMiAgICAgICgtMjgpCisKKy8qIEVycm9yIGNvZGVzIGZvciBwY3JlMltfZGZhXV9tYXRjaCgpLCBzdWJzdHJpbmcgZXh0cmFjdGlvbiBmdW5jdGlvbnMsIGNvbnRleHQKK2Z1bmN0aW9ucywgYW5kIHNlcmlhbGl6aW5nIGZ1bmN0aW9ucy4gVGhleSBhcmUgaW4gbnVtZXJpY2FsIG9yZGVyLiBPcmlnaW5hbGx5Cit0aGV5IHdlcmUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyIHRvbywgYnV0IG5vdyB0aGF0IFBDUkUyIGlzIHJlbGVhc2VkLCB0aGUKK251bWJlcnMgbXVzdCBub3QgYmUgY2hhbmdlZC4gKi8KKworI2RlZmluZSBQQ1JFMl9FUlJPUl9CQUREQVRBICAgICAgICAgICAoLTI5KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9NSVhFRFRBQkxFUyAgICAgICAoLTMwKSAgLyogTmFtZSB3YXMgY2hhbmdlZCAqLworI2RlZmluZSBQQ1JFMl9FUlJPUl9CQURNQUdJQyAgICAgICAgICAoLTMxKQorI2RlZmluZSBQQ1JFMl9FUlJPUl9CQURNT0RFICAgICAgICAgICAoLTMyKQorI2RlZmluZSBQQ1JFMl9FUlJPUl9CQURPRkZTRVQgICAgICAgICAoLTMzKQorI2RlZmluZSBQQ1JFMl9FUlJPUl9CQURPUFRJT04gICAgICAgICAoLTM0KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9CQURSRVBMQUNFTUVOVCAgICAoLTM1KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9CQURVVEZPRkZTRVQgICAgICAoLTM2KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9DQUxMT1VUICAgICAgICAgICAoLTM3KSAgLyogTmV2ZXIgdXNlZCBieSBQQ1JFMiBpdHNlbGYgKi8KKyNkZWZpbmUgUENSRTJfRVJST1JfREZBX0JBRFJFU1RBUlQgICAgKC0zOCkKKyNkZWZpbmUgUENSRTJfRVJST1JfREZBX1JFQ1VSU0UgICAgICAgKC0zOSkKKyNkZWZpbmUgUENSRTJfRVJST1JfREZBX1VDT05EICAgICAgICAgKC00MCkKKyNkZWZpbmUgUENSRTJfRVJST1JfREZBX1VGVU5DICAgICAgICAgKC00MSkKKyNkZWZpbmUgUENSRTJfRVJST1JfREZBX1VJVEVNICAgICAgICAgKC00MikKKyNkZWZpbmUgUENSRTJfRVJST1JfREZBX1dTU0laRSAgICAgICAgKC00MykKKyNkZWZpbmUgUENSRTJfRVJST1JfSU5URVJOQUwgICAgICAgICAgKC00NCkKKyNkZWZpbmUgUENSRTJfRVJST1JfSklUX0JBRE9QVElPTiAgICAgKC00NSkKKyNkZWZpbmUgUENSRTJfRVJST1JfSklUX1NUQUNLTElNSVQgICAgKC00NikKKyNkZWZpbmUgUENSRTJfRVJST1JfTUFUQ0hMSU1JVCAgICAgICAgKC00NykKKyNkZWZpbmUgUENSRTJfRVJST1JfTk9NRU1PUlkgICAgICAgICAgKC00OCkKKyNkZWZpbmUgUENSRTJfRVJST1JfTk9TVUJTVFJJTkcgICAgICAgKC00OSkKKyNkZWZpbmUgUENSRTJfRVJST1JfTk9VTklRVUVTVUJTVFJJTkcgKC01MCkKKyNkZWZpbmUgUENSRTJfRVJST1JfTlVMTCAgICAgICAgICAgICAgKC01MSkKKyNkZWZpbmUgUENSRTJfRVJST1JfUkVDVVJTRUxPT1AgICAgICAgKC01MikKKyNkZWZpbmUgUENSRTJfRVJST1JfUkVDVVJTSU9OTElNSVQgICAgKC01MykKKyNkZWZpbmUgUENSRTJfRVJST1JfVU5BVkFJTEFCTEUgICAgICAgKC01NCkKKyNkZWZpbmUgUENSRTJfRVJST1JfVU5TRVQgICAgICAgICAgICAgKC01NSkKKyNkZWZpbmUgUENSRTJfRVJST1JfQkFET0ZGU0VUTElNSVQgICAgKC01NikKKyNkZWZpbmUgUENSRTJfRVJST1JfQkFEUkVQRVNDQVBFICAgICAgKC01NykKKyNkZWZpbmUgUENSRTJfRVJST1JfUkVQTUlTU0lOR0JSQUNFICAgKC01OCkKKyNkZWZpbmUgUENSRTJfRVJST1JfQkFEU1VCU1RJVFVUSU9OICAgKC01OSkKKyNkZWZpbmUgUENSRTJfRVJST1JfQkFEU1VCU1BBVFRFUk4gICAgKC02MCkKKyNkZWZpbmUgUENSRTJfRVJST1JfVE9PTUFOWVJFUExBQ0UgICAgKC02MSkKKworLyogUmVxdWVzdCB0eXBlcyBmb3IgcGNyZTJfcGF0dGVybl9pbmZvKCkgKi8KKworI2RlZmluZSBQQ1JFMl9JTkZPX0FMTE9QVElPTlMgICAgICAgICAgICAwCisjZGVmaW5lIFBDUkUyX0lORk9fQVJHT1BUSU9OUyAgICAgICAgICAgIDEKKyNkZWZpbmUgUENSRTJfSU5GT19CQUNLUkVGTUFYICAgICAgICAgICAgMgorI2RlZmluZSBQQ1JFMl9JTkZPX0JTUiAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFBDUkUyX0lORk9fQ0FQVFVSRUNPVU5UICAgICAgICAgIDQKKyNkZWZpbmUgUENSRTJfSU5GT19GSVJTVENPREVVTklUICAgICAgICAgNQorI2RlZmluZSBQQ1JFMl9JTkZPX0ZJUlNUQ09ERVRZUEUgICAgICAgICA2CisjZGVmaW5lIFBDUkUyX0lORk9fRklSU1RCSVRNQVAgICAgICAgICAgIDcKKyNkZWZpbmUgUENSRTJfSU5GT19IQVNDUk9STEYgICAgICAgICAgICAgOAorI2RlZmluZSBQQ1JFMl9JTkZPX0pDSEFOR0VEICAgICAgICAgICAgICA5CisjZGVmaW5lIFBDUkUyX0lORk9fSklUU0laRSAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUENSRTJfSU5GT19MQVNUQ09ERVVOSVQgICAgICAgICAxMQorI2RlZmluZSBQQ1JFMl9JTkZPX0xBU1RDT0RFVFlQRSAgICAgICAgIDEyCisjZGVmaW5lIFBDUkUyX0lORk9fTUFUQ0hFTVBUWSAgICAgICAgICAgMTMKKyNkZWZpbmUgUENSRTJfSU5GT19NQVRDSExJTUlUICAgICAgICAgICAxNAorI2RlZmluZSBQQ1JFMl9JTkZPX01BWExPT0tCRUhJTkQgICAgICAgIDE1CisjZGVmaW5lIFBDUkUyX0lORk9fTUlOTEVOR1RIICAgICAgICAgICAgMTYKKyNkZWZpbmUgUENSRTJfSU5GT19OQU1FQ09VTlQgICAgICAgICAgICAxNworI2RlZmluZSBQQ1JFMl9JTkZPX05BTUVFTlRSWVNJWkUgICAgICAgIDE4CisjZGVmaW5lIFBDUkUyX0lORk9fTkFNRVRBQkxFICAgICAgICAgICAgMTkKKyNkZWZpbmUgUENSRTJfSU5GT19ORVdMSU5FICAgICAgICAgICAgICAyMAorI2RlZmluZSBQQ1JFMl9JTkZPX1JFQ1VSU0lPTkxJTUlUICAgICAgIDIxCisjZGVmaW5lIFBDUkUyX0lORk9fU0laRSAgICAgICAgICAgICAgICAgMjIKKyNkZWZpbmUgUENSRTJfSU5GT19IQVNCQUNLU0xBU0hDICAgICAgICAyMworCisvKiBSZXF1ZXN0IHR5cGVzIGZvciBwY3JlMl9jb25maWcoKS4gKi8KKworI2RlZmluZSBQQ1JFMl9DT05GSUdfQlNSICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBQQ1JFMl9DT05GSUdfSklUICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBQQ1JFMl9DT05GSUdfSklUVEFSR0VUICAgICAgICAgICAgICAgMgorI2RlZmluZSBQQ1JFMl9DT05GSUdfTElOS1NJWkUgICAgICAgICAgICAgICAgMworI2RlZmluZSBQQ1JFMl9DT05GSUdfTUFUQ0hMSU1JVCAgICAgICAgICAgICAgNAorI2RlZmluZSBQQ1JFMl9DT05GSUdfTkVXTElORSAgICAgICAgICAgICAgICAgNQorI2RlZmluZSBQQ1JFMl9DT05GSUdfUEFSRU5TTElNSVQgICAgICAgICAgICAgNgorI2RlZmluZSBQQ1JFMl9DT05GSUdfUkVDVVJTSU9OTElNSVQgICAgICAgICAgNworI2RlZmluZSBQQ1JFMl9DT05GSUdfU1RBQ0tSRUNVUlNFICAgICAgICAgICAgOAorI2RlZmluZSBQQ1JFMl9DT05GSUdfVU5JQ09ERSAgICAgICAgICAgICAgICAgOQorI2RlZmluZSBQQ1JFMl9DT05GSUdfVU5JQ09ERV9WRVJTSU9OICAgICAgICAxMAorI2RlZmluZSBQQ1JFMl9DT05GSUdfVkVSU0lPTiAgICAgICAgICAgICAgICAxMQorCisvKiBUeXBlcyBmb3IgY29kZSB1bml0cyBpbiBwYXR0ZXJucyBhbmQgc3ViamVjdCBzdHJpbmdzLiAqLworCit0eXBlZGVmIHVpbnQ4X3QgIFBDUkUyX1VDSEFSODsKK3R5cGVkZWYgdWludDE2X3QgUENSRTJfVUNIQVIxNjsKK3R5cGVkZWYgdWludDMyX3QgUENSRTJfVUNIQVIzMjsKKwordHlwZWRlZiBjb25zdCBQQ1JFMl9VQ0hBUjggICpQQ1JFMl9TUFRSODsKK3R5cGVkZWYgY29uc3QgUENSRTJfVUNIQVIxNiAqUENSRTJfU1BUUjE2OwordHlwZWRlZiBjb25zdCBQQ1JFMl9VQ0hBUjMyICpQQ1JFMl9TUFRSMzI7CisKKy8qIFRoZSBQQ1JFMl9TSVpFIHR5cGUgaXMgdXNlZCBmb3IgYWxsIHN0cmluZyBsZW5ndGhzIGFuZCBvZmZzZXRzIGluIFBDUkUyLAoraW5jbHVkaW5nIHBhdHRlcm4gb2Zmc2V0cyBmb3IgZXJyb3JzIGFuZCBzdWJqZWN0IG9mZnNldHMgYWZ0ZXIgYSBtYXRjaC4gV2UKK2RlZmluZSBzcGVjaWFsIHZhbHVlcyB0byBpbmRpY2F0ZSB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5ncyBhbmQgdW5zZXQgb2Zmc2V0cyBpbgordGhlIG9mZnNldCB2ZWN0b3IgKG92ZWN0b3IpLiAqLworCisjZGVmaW5lIFBDUkUyX1NJWkUgICAgICAgICAgICBzaXplX3QKKyNkZWZpbmUgUENSRTJfU0laRV9NQVggICAgICAgIFNJWkVfTUFYCisjZGVmaW5lIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCAofihQQ1JFMl9TSVpFKTApCisjZGVmaW5lIFBDUkUyX1VOU0VUICAgICAgICAgICAofihQQ1JFMl9TSVpFKTApCisKKy8qIEdlbmVyaWMgdHlwZXMgZm9yIG9wYXF1ZSBzdHJ1Y3R1cmVzIGFuZCBKSVQgY2FsbGJhY2sgZnVuY3Rpb25zLiBUaGVzZQorZGVjbGFyYXRpb25zIGFyZSBkZWZpbmVkIGluIGEgbWFjcm8gdGhhdCBpcyBleHBhbmRlZCBmb3IgZWFjaCB3aWR0aCBsYXRlci4gKi8KKworI2RlZmluZSBQQ1JFMl9UWVBFU19MSVNUIFwKK3N0cnVjdCBwY3JlMl9yZWFsX2dlbmVyYWxfY29udGV4dDsgXAordHlwZWRlZiBzdHJ1Y3QgcGNyZTJfcmVhbF9nZW5lcmFsX2NvbnRleHQgcGNyZTJfZ2VuZXJhbF9jb250ZXh0OyBcCitcCitzdHJ1Y3QgcGNyZTJfcmVhbF9jb21waWxlX2NvbnRleHQ7IFwKK3R5cGVkZWYgc3RydWN0IHBjcmUyX3JlYWxfY29tcGlsZV9jb250ZXh0IHBjcmUyX2NvbXBpbGVfY29udGV4dDsgXAorXAorc3RydWN0IHBjcmUyX3JlYWxfbWF0Y2hfY29udGV4dDsgXAordHlwZWRlZiBzdHJ1Y3QgcGNyZTJfcmVhbF9tYXRjaF9jb250ZXh0IHBjcmUyX21hdGNoX2NvbnRleHQ7IFwKK1wKK3N0cnVjdCBwY3JlMl9yZWFsX2NvZGU7IFwKK3R5cGVkZWYgc3RydWN0IHBjcmUyX3JlYWxfY29kZSBwY3JlMl9jb2RlOyBcCitcCitzdHJ1Y3QgcGNyZTJfcmVhbF9tYXRjaF9kYXRhOyBcCit0eXBlZGVmIHN0cnVjdCBwY3JlMl9yZWFsX21hdGNoX2RhdGEgcGNyZTJfbWF0Y2hfZGF0YTsgXAorXAorc3RydWN0IHBjcmUyX3JlYWxfaml0X3N0YWNrOyBcCit0eXBlZGVmIHN0cnVjdCBwY3JlMl9yZWFsX2ppdF9zdGFjayBwY3JlMl9qaXRfc3RhY2s7IFwKK1wKK3R5cGVkZWYgcGNyZTJfaml0X3N0YWNrICooKnBjcmUyX2ppdF9jYWxsYmFjaykodm9pZCAqKTsKKworCisvKiBUaGUgc3RydWN0dXJlIGZvciBwYXNzaW5nIG91dCBkYXRhIHZpYSB0aGUgcGNyZV9jYWxsb3V0X2Z1bmN0aW9uLiBXZSB1c2UgYQorc3RydWN0dXJlIHNvIHRoYXQgbmV3IGZpZWxkcyBjYW4gYmUgYWRkZWQgb24gdGhlIGVuZCBpbiBmdXR1cmUgdmVyc2lvbnMsCit3aXRob3V0IGNoYW5naW5nIHRoZSBBUEkgb2YgdGhlIGZ1bmN0aW9uLCB0aGVyZWJ5IGFsbG93aW5nIG9sZCBjbGllbnRzIHRvIHdvcmsKK3dpdGhvdXQgbW9kaWZpY2F0aW9uLiBEZWZpbmUgdGhlIGdlbmVyaWMgdmVyc2lvbiBpbiBhIG1hY3JvOyB0aGUgd2lkdGgtc3BlY2lmaWMKK3ZlcnNpb25zIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGlzIG1hY3JvIGJlbG93LiAqLworCisjZGVmaW5lIFBDUkUyX1NUUlVDVFVSRV9MSVNUIFwKK3R5cGVkZWYgc3RydWN0IHBjcmUyX2NhbGxvdXRfYmxvY2sgeyBcCisgIHVpbnQzMl90ICAgICAgdmVyc2lvbjsgICAgICAgICAgIC8qIElkZW50aWZpZXMgdmVyc2lvbiBvZiBibG9jayAqLyBcCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBWZXJzaW9uIDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLyBcCisgIHVpbnQzMl90ICAgICAgY2FsbG91dF9udW1iZXI7ICAgIC8qIE51bWJlciBjb21waWxlZCBpbnRvIHBhdHRlcm4gKi8gXAorICB1aW50MzJfdCAgICAgIGNhcHR1cmVfdG9wOyAgICAgICAvKiBNYXggY3VycmVudCBjYXB0dXJlICovIFwKKyAgdWludDMyX3QgICAgICBjYXB0dXJlX2xhc3Q7ICAgICAgLyogTW9zdCByZWNlbnRseSBjbG9zZWQgY2FwdHVyZSAqLyBcCisgIFBDUkUyX1NJWkUgICAqb2Zmc2V0X3ZlY3RvcjsgICAgIC8qIFRoZSBvZmZzZXQgdmVjdG9yICovIFwKKyAgUENSRTJfU1BUUiAgICBtYXJrOyAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBjdXJyZW50IG1hcmsgb3IgTlVMTCAqLyBcCisgIFBDUkUyX1NQVFIgICAgc3ViamVjdDsgICAgICAgICAgIC8qIFRoZSBzdWJqZWN0IGJlaW5nIG1hdGNoZWQgKi8gXAorICBQQ1JFMl9TSVpFICAgIHN1YmplY3RfbGVuZ3RoOyAgICAvKiBUaGUgbGVuZ3RoIG9mIHRoZSBzdWJqZWN0ICovIFwKKyAgUENSRTJfU0laRSAgICBzdGFydF9tYXRjaDsgICAgICAgLyogT2Zmc2V0IHRvIHN0YXJ0IG9mIHRoaXMgbWF0Y2ggYXR0ZW1wdCAqLyBcCisgIFBDUkUyX1NJWkUgICAgY3VycmVudF9wb3NpdGlvbjsgIC8qIFdoZXJlIHdlIGN1cnJlbnRseSBhcmUgaW4gdGhlIHN1YmplY3QgKi8gXAorICBQQ1JFMl9TSVpFICAgIHBhdHRlcm5fcG9zaXRpb247ICAvKiBPZmZzZXQgdG8gbmV4dCBpdGVtIGluIHRoZSBwYXR0ZXJuICovIFwKKyAgUENSRTJfU0laRSAgICBuZXh0X2l0ZW1fbGVuZ3RoOyAgLyogTGVuZ3RoIG9mIG5leHQgaXRlbSBpbiB0aGUgcGF0dGVybiAqLyBcCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gQWRkZWQgZm9yIFZlcnNpb24gMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLyBcCisgIFBDUkUyX1NJWkUgICAgY2FsbG91dF9zdHJpbmdfb2Zmc2V0OyAvKiBPZmZzZXQgdG8gc3RyaW5nIHdpdGhpbiBwYXR0ZXJuICovIFwKKyAgUENSRTJfU0laRSAgICBjYWxsb3V0X3N0cmluZ19sZW5ndGg7IC8qIExlbmd0aCBvZiBzdHJpbmcgY29tcGlsZWQgaW50byBwYXR0ZXJuICovIFwKKyAgUENSRTJfU1BUUiAgICBjYWxsb3V0X3N0cmluZzsgICAgLyogU3RyaW5nIGNvbXBpbGVkIGludG8gcGF0dGVybiAqLyBcCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLyBcCit9IHBjcmUyX2NhbGxvdXRfYmxvY2s7IFwKK1wKK3R5cGVkZWYgc3RydWN0IHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrIHsgXAorICB1aW50MzJfdCAgICAgIHZlcnNpb247ICAgICAgICAgICAvKiBJZGVudGlmaWVzIHZlcnNpb24gb2YgYmxvY2sgKi8gXAorICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVmVyc2lvbiAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8gXAorICBQQ1JFMl9TSVpFICAgIHBhdHRlcm5fcG9zaXRpb247ICAvKiBPZmZzZXQgdG8gbmV4dCBpdGVtIGluIHRoZSBwYXR0ZXJuICovIFwKKyAgUENSRTJfU0laRSAgICBuZXh0X2l0ZW1fbGVuZ3RoOyAgLyogTGVuZ3RoIG9mIG5leHQgaXRlbSBpbiB0aGUgcGF0dGVybiAqLyBcCisgIHVpbnQzMl90ICAgICAgY2FsbG91dF9udW1iZXI7ICAgIC8qIE51bWJlciBjb21waWxlZCBpbnRvIHBhdHRlcm4gKi8gXAorICBQQ1JFMl9TSVpFICAgIGNhbGxvdXRfc3RyaW5nX29mZnNldDsgLyogT2Zmc2V0IHRvIHN0cmluZyB3aXRoaW4gcGF0dGVybiAqLyBcCisgIFBDUkUyX1NJWkUgICAgY2FsbG91dF9zdHJpbmdfbGVuZ3RoOyAvKiBMZW5ndGggb2Ygc3RyaW5nIGNvbXBpbGVkIGludG8gcGF0dGVybiAqLyBcCisgIFBDUkUyX1NQVFIgICAgY2FsbG91dF9zdHJpbmc7ICAgIC8qIFN0cmluZyBjb21waWxlZCBpbnRvIHBhdHRlcm4gKi8gXAorICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8gXAorfSBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9jazsKKworCisvKiBMaXN0IHRoZSBnZW5lcmljIGZvcm1zIG9mIGFsbCBvdGhlciBmdW5jdGlvbnMgaW4gbWFjcm9zLCB3aGljaCB3aWxsIGJlCitleHBhbmRlZCBmb3IgZWFjaCB3aWR0aCBiZWxvdy4gU3RhcnQgd2l0aCBmdW5jdGlvbnMgdGhhdCBnaXZlIGdlbmVyYWwKK2luZm9ybWF0aW9uLiAqLworCisjZGVmaW5lIFBDUkUyX0dFTkVSQUxfSU5GT19GVU5DVElPTlMgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX2NvbmZpZyh1aW50MzJfdCwgdm9pZCAqKTsKKworCisvKiBGdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBjb250ZXh0cy4gKi8KKworI2RlZmluZSBQQ1JFMl9HRU5FUkFMX0NPTlRFWFRfRlVOQ1RJT05TIFwKK1BDUkUyX0VYUF9ERUNMIFwKKyAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpwY3JlMl9nZW5lcmFsX2NvbnRleHRfY29weShwY3JlMl9nZW5lcmFsX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIFwKKyAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpwY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlKCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKikoUENSRTJfU0laRSwgdm9pZCAqKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKikodm9pZCAqLCB2b2lkICopLCB2b2lkICopOyBcCitQQ1JFMl9FWFBfREVDTCB2b2lkICAgICAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICopOworCisjZGVmaW5lIFBDUkUyX0NPTVBJTEVfQ09OVEVYVF9GVU5DVElPTlMgXAorUENSRTJfRVhQX0RFQ0wgXAorICBwY3JlMl9jb21waWxlX2NvbnRleHQgKnBjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5KHBjcmUyX2NvbXBpbGVfY29udGV4dCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgXAorICBwY3JlMl9jb21waWxlX2NvbnRleHQgKnBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICopO1wKK1BDUkUyX0VYUF9ERUNMIHZvaWQgICAgICBwY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZShwY3JlMl9jb21waWxlX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zZXRfYnNyKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqLCB1aW50MzJfdCk7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlcyhwY3JlMl9jb21waWxlX2NvbnRleHQgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3NldF9tYXhfcGF0dGVybl9sZW5ndGgocGNyZTJfY29tcGlsZV9jb250ZXh0ICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NJWkUpOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc2V0X25ld2xpbmUocGNyZTJfY29tcGlsZV9jb250ZXh0ICosIHVpbnQzMl90KTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3NldF9wYXJlbnNfbmVzdF9saW1pdChwY3JlMl9jb21waWxlX2NvbnRleHQgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QpOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkKFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqLCBpbnQgKCopKHVpbnQzMl90LCB2b2lkICopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopOworCisjZGVmaW5lIFBDUkUyX01BVENIX0NPTlRFWFRfRlVOQ1RJT05TIFwKK1BDUkUyX0VYUF9ERUNMIFwKKyAgcGNyZTJfbWF0Y2hfY29udGV4dCAgICpwY3JlMl9tYXRjaF9jb250ZXh0X2NvcHkocGNyZTJfbWF0Y2hfY29udGV4dCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgXAorICBwY3JlMl9tYXRjaF9jb250ZXh0ICAgKnBjcmUyX21hdGNoX2NvbnRleHRfY3JlYXRlKHBjcmUyX2dlbmVyYWxfY29udGV4dCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgdm9pZCAgICAgIHBjcmUyX21hdGNoX2NvbnRleHRfZnJlZShwY3JlMl9tYXRjaF9jb250ZXh0ICopOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc2V0X2NhbGxvdXQocGNyZTJfbWF0Y2hfY29udGV4dCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCopKHBjcmUyX2NhbGxvdXRfYmxvY2sgKiwgdm9pZCAqKSwgdm9pZCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3NldF9tYXRjaF9saW1pdChwY3JlMl9tYXRjaF9jb250ZXh0ICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3NldF9vZmZzZXRfbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TSVpFKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3NldF9yZWN1cnNpb25fbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCk7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50KCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3JlMl9tYXRjaF9jb250ZXh0ICosIHZvaWQgKigqKShQQ1JFMl9TSVpFLCB2b2lkICopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKik7CisKKworLyogRnVuY3Rpb25zIGNvbmNlcm5lZCB3aXRoIGNvbXBpbGluZyBhIHBhdHRlcm4gdG8gUENSRSBpbnRlcm5hbCBjb2RlLiAqLworCisjZGVmaW5lIFBDUkUyX0NPTVBJTEVfRlVOQ1RJT05TIFwKK1BDUkUyX0VYUF9ERUNMIFwKKyAgcGNyZTJfY29kZSAgICAgICAgICAgICpwY3JlMl9jb21waWxlKFBDUkUyX1NQVFIsIFBDUkUyX1NJWkUsIHVpbnQzMl90LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgUENSRTJfU0laRSAqLCBwY3JlMl9jb21waWxlX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIHZvaWQgICAgICBwY3JlMl9jb2RlX2ZyZWUocGNyZTJfY29kZSAqKTsKKworCisvKiBGdW5jdGlvbnMgdGhhdCBnaXZlIGluZm9ybWF0aW9uIGFib3V0IGEgY29tcGlsZWQgcGF0dGVybi4gKi8KKworI2RlZmluZSBQQ1JFMl9QQVRURVJOX0lORk9fRlVOQ1RJT05TIFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9wYXR0ZXJuX2luZm8oY29uc3QgcGNyZTJfY29kZSAqLCB1aW50MzJfdCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlKGNvbnN0IHBjcmUyX2NvZGUgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqKShwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9jayAqLCB2b2lkICopLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICopOworCisKKy8qIEZ1bmN0aW9ucyBmb3IgcnVubmluZyBhIG1hdGNoIGFuZCBpbnNwZWN0aW5nIHRoZSByZXN1bHQuICovCisKKyNkZWZpbmUgUENSRTJfTUFUQ0hfRlVOQ1RJT05TIFwKK1BDUkUyX0VYUF9ERUNMIFwKKyAgcGNyZTJfbWF0Y2hfZGF0YSAgICAgICAgKnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKHVpbnQzMl90LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgXAorICBwY3JlMl9tYXRjaF9kYXRhICAgICAgICAqcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuKFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGNyZTJfY29kZSAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgICAgcGNyZTJfZGZhX21hdGNoKGNvbnN0IHBjcmUyX2NvZGUgKiwgUENSRTJfU1BUUiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TSVpFLCBQQ1JFMl9TSVpFLCB1aW50MzJfdCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3JlMl9tYXRjaF9kYXRhICosIHBjcmUyX21hdGNoX2NvbnRleHQgKiwgaW50ICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU0laRSk7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICAgIHBjcmUyX21hdGNoKGNvbnN0IHBjcmUyX2NvZGUgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TUFRSLCBQQ1JFMl9TSVpFLCBQQ1JFMl9TSVpFLCB1aW50MzJfdCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3JlMl9tYXRjaF9kYXRhICosIHBjcmUyX21hdGNoX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIHZvaWQgICAgICAgIHBjcmUyX21hdGNoX2RhdGFfZnJlZShwY3JlMl9tYXRjaF9kYXRhICopOyBcCitQQ1JFMl9FWFBfREVDTCBQQ1JFMl9TUFRSICBwY3JlMl9nZXRfbWFyayhwY3JlMl9tYXRjaF9kYXRhICopOyBcCitQQ1JFMl9FWFBfREVDTCB1aW50MzJfdCAgICBwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudChwY3JlMl9tYXRjaF9kYXRhICopOyBcCitQQ1JFMl9FWFBfREVDTCBQQ1JFMl9TSVpFICpwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyKHBjcmUyX21hdGNoX2RhdGEgKik7IFwKK1BDUkUyX0VYUF9ERUNMIFBDUkUyX1NJWkUgIHBjcmUyX2dldF9zdGFydGNoYXIocGNyZTJfbWF0Y2hfZGF0YSAqKTsKKworCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIG1hdGNoZWQgc3Vic3RyaW5ncy4gKi8KKworI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfRlVOQ1RJT05TIFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TUFRSLCBQQ1JFMl9VQ0hBUiAqLCBQQ1JFMl9TSVpFICopOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIocGNyZTJfbWF0Y2hfZGF0YSAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgUENSRTJfVUNIQVIgKiwgUENSRTJfU0laRSAqKTsgXAorUENSRTJfRVhQX0RFQ0wgdm9pZCAgICAgIHBjcmUyX3N1YnN0cmluZ19mcmVlKFBDUkUyX1VDSEFSICopOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TUFRSLCBQQ1JFMl9VQ0hBUiAqKiwgUENSRTJfU0laRSAqKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIocGNyZTJfbWF0Y2hfZGF0YSAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgUENSRTJfVUNIQVIgKiosIFBDUkUyX1NJWkUgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZShwY3JlMl9tYXRjaF9kYXRhICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NQVFIsIFBDUkUyX1NJWkUgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsIFBDUkUyX1NJWkUgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4oY29uc3QgcGNyZTJfY29kZSAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TUFRSLCBQQ1JFMl9TUFRSICosIFBDUkUyX1NQVFIgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZShcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwY3JlMl9jb2RlICosIFBDUkUyX1NQVFIpOyBcCitQQ1JFMl9FWFBfREVDTCB2b2lkICAgICAgcGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZShQQ1JFMl9TUFRSICopOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0KHBjcmUyX21hdGNoX2RhdGEgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfVUNIQVIgKioqLCBQQ1JFMl9TSVpFICoqKTsKKworLyogRnVuY3Rpb25zIGZvciBzZXJpYWxpemluZyAvIGRlc2VyaWFsaXppbmcgY29tcGlsZWQgcGF0dGVybnMuICovCisKKyNkZWZpbmUgUENSRTJfU0VSSUFMSVpFX0ZVTkNUSU9OUyBcCitQQ1JFMl9FWFBfREVDTCBpbnQzMl90ICAgcGNyZTJfc2VyaWFsaXplX2VuY29kZShjb25zdCBwY3JlMl9jb2RlICoqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQzMl90LCB1aW50OF90ICoqLCBQQ1JFMl9TSVpFICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50MzJfdCAgIHBjcmUyX3NlcmlhbGl6ZV9kZWNvZGUocGNyZTJfY29kZSAqKiwgaW50MzJfdCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqLCBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludDMyX3QgICBwY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlcyhjb25zdCB1aW50OF90ICopOyBcCitQQ1JFMl9FWFBfREVDTCB2b2lkICAgICAgcGNyZTJfc2VyaWFsaXplX2ZyZWUodWludDhfdCAqKTsKKworCisvKiBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgbWF0Y2ggKyBzdWJzdGl0dXRlLiAqLworCisjZGVmaW5lIFBDUkUyX1NVQlNUSVRVVEVfRlVOQ1RJT04gXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3N1YnN0aXR1dGUoY29uc3QgcGNyZTJfY29kZSAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TUFRSLCBQQ1JFMl9TSVpFLCBQQ1JFMl9TSVpFLCB1aW50MzJfdCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNyZTJfbWF0Y2hfZGF0YSAqLCBwY3JlMl9tYXRjaF9jb250ZXh0ICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NQVFIsIFBDUkUyX1NJWkUsIFBDUkUyX1VDSEFSICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NJWkUgKik7CisKKworLyogRnVuY3Rpb25zIGZvciBKSVQgcHJvY2Vzc2luZyAqLworCisjZGVmaW5lIFBDUkUyX0pJVF9GVU5DVElPTlMgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX2ppdF9jb21waWxlKHBjcmUyX2NvZGUgKiwgdWludDMyX3QpOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfaml0X21hdGNoKGNvbnN0IHBjcmUyX2NvZGUgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1BUUiwgUENSRTJfU0laRSwgUENSRTJfU0laRSwgdWludDMyX3QsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjcmUyX21hdGNoX2RhdGEgKiwgcGNyZTJfbWF0Y2hfY29udGV4dCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgdm9pZCAgICAgIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICopOyBcCitQQ1JFMl9FWFBfREVDTCBcCisgIHBjcmUyX2ppdF9zdGFjayAgICAgICAqcGNyZTJfaml0X3N0YWNrX2NyZWF0ZShQQ1JFMl9TSVpFLCBQQ1JFMl9TSVpFLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIHZvaWQgICAgICBwY3JlMl9qaXRfc3RhY2tfYXNzaWduKHBjcmUyX21hdGNoX2NvbnRleHQgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNyZTJfaml0X2NhbGxiYWNrLCB2b2lkICopOyBcCitQQ1JFMl9FWFBfREVDTCB2b2lkICAgICAgcGNyZTJfaml0X3N0YWNrX2ZyZWUocGNyZTJfaml0X3N0YWNrICopOworCisKKy8qIE90aGVyIG1pc2NlbGxhbmVvdXMgZnVuY3Rpb25zLiAqLworCisjZGVmaW5lIFBDUkUyX09USEVSX0ZVTkNUSU9OUyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoaW50LCBQQ1JFMl9VQ0hBUiAqLCBQQ1JFMl9TSVpFKTsgXAorUENSRTJfRVhQX0RFQ0wgXAorICBjb25zdCB1aW50OF90ICAgICAgICAgKnBjcmUyX21ha2V0YWJsZXMocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICopOyBcCisKKworLyogRGVmaW5lIG1hY3JvcyB0aGF0IGdlbmVyYXRlIHdpZHRoLXNwZWNpZmljIG5hbWVzIGZyb20gZ2VuZXJpYyB2ZXJzaW9ucy4gVGhlCit0aHJlZS1sZXZlbCBtYWNybyBzY2hlbWUgaXMgbmVjZXNzYXJ5IHRvIGdldCB0aGUgbWFjcm9zIGV4cGFuZGVkIHdoZW4gd2Ugd2FudAordGhlbSB0byBiZS4gRmlyc3Qgd2UgZ2V0IHRoZSB3aWR0aCBmcm9tIFBDUkUyX0xPQ0FMX1dJRFRILCB3aGljaCBpcyB1c2VkIGZvcgorZ2VuZXJhdGluZyB0aHJlZSB2ZXJzaW9ucyBvZiBldmVyeXRoaW5nIGJlbG93LiBBZnRlciB0aGF0LCBQQ1JFMl9TVUZGSVggd2lsbCBiZQorcmUtZGVmaW5lZCB0byB1c2UgUENSRTJfQ09ERV9VTklUX1dJRFRILCBmb3IgdXNlIHdoZW4gbWFjcm9zIHN1Y2ggYXMKK3BjcmUyX2NvbXBpbGUgYXJlIGNhbGxlZCBieSBhcHBsaWNhdGlvbiBjb2RlLiAqLworCisjZGVmaW5lIFBDUkUyX0pPSU4oYSxiKSBhICMjIGIKKyNkZWZpbmUgUENSRTJfR0xVRShhLGIpIFBDUkUyX0pPSU4oYSxiKQorI2RlZmluZSBQQ1JFMl9TVUZGSVgoYSkgUENSRTJfR0xVRShhLFBDUkUyX0xPQ0FMX1dJRFRIKQorCisKKy8qIERhdGEgdHlwZXMgKi8KKworI2RlZmluZSBQQ1JFMl9VQ0hBUiAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKFBDUkUyX1VDSEFSKQorI2RlZmluZSBQQ1JFMl9TUFRSICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKFBDUkUyX1NQVFIpCisKKyNkZWZpbmUgcGNyZTJfY29kZSAgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9jb2RlXykKKyNkZWZpbmUgcGNyZTJfaml0X2NhbGxiYWNrICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9qaXRfY2FsbGJhY2tfKQorI2RlZmluZSBwY3JlMl9qaXRfc3RhY2sgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2ppdF9zdGFja18pCisKKyNkZWZpbmUgcGNyZTJfcmVhbF9jb2RlICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9yZWFsX2NvZGVfKQorI2RlZmluZSBwY3JlMl9yZWFsX2dlbmVyYWxfY29udGV4dCAgUENSRTJfU1VGRklYKHBjcmUyX3JlYWxfZ2VuZXJhbF9jb250ZXh0XykKKyNkZWZpbmUgcGNyZTJfcmVhbF9jb21waWxlX2NvbnRleHQgIFBDUkUyX1NVRkZJWChwY3JlMl9yZWFsX2NvbXBpbGVfY29udGV4dF8pCisjZGVmaW5lIHBjcmUyX3JlYWxfbWF0Y2hfY29udGV4dCAgICBQQ1JFMl9TVUZGSVgocGNyZTJfcmVhbF9tYXRjaF9jb250ZXh0XykKKyNkZWZpbmUgcGNyZTJfcmVhbF9qaXRfc3RhY2sgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9yZWFsX2ppdF9zdGFja18pCisjZGVmaW5lIHBjcmUyX3JlYWxfbWF0Y2hfZGF0YSAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfcmVhbF9tYXRjaF9kYXRhXykKKworCisvKiBEYXRhIGJsb2NrcyAqLworCisjZGVmaW5lIHBjcmUyX2NhbGxvdXRfYmxvY2sgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfY2FsbG91dF9ibG9ja18pCisjZGVmaW5lIHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrICBQQ1JFMl9TVUZGSVgocGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2tfKQorI2RlZmluZSBwY3JlMl9nZW5lcmFsX2NvbnRleHQgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2dlbmVyYWxfY29udGV4dF8pCisjZGVmaW5lIHBjcmUyX2NvbXBpbGVfY29udGV4dCAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfY29tcGlsZV9jb250ZXh0XykKKyNkZWZpbmUgcGNyZTJfbWF0Y2hfY29udGV4dCAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9tYXRjaF9jb250ZXh0XykKKyNkZWZpbmUgcGNyZTJfbWF0Y2hfZGF0YSAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9tYXRjaF9kYXRhXykKKworCisvKiBGdW5jdGlvbnM6IHRoZSBjb21wbGV0ZSBsaXN0IGluIGFscGhhYmV0aWNhbCBvcmRlciAqLworCisjZGVmaW5lIHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlXykKKyNkZWZpbmUgcGNyZTJfY29kZV9mcmVlICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfY29kZV9mcmVlXykKKyNkZWZpbmUgcGNyZTJfY29tcGlsZSAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfY29tcGlsZV8pCisjZGVmaW5lIHBjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5ICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NvbXBpbGVfY29udGV4dF9jb3B5XykKKyNkZWZpbmUgcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZSAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZV8pCisjZGVmaW5lIHBjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlXykKKyNkZWZpbmUgcGNyZTJfY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfY29uZmlnXykKKyNkZWZpbmUgcGNyZTJfZGZhX21hdGNoICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfZGZhX21hdGNoXykKKyNkZWZpbmUgcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHkgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHlfKQorI2RlZmluZSBwY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlXykKKyNkZWZpbmUgcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWVfKQorI2RlZmluZSBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZSAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZV8pCisjZGVmaW5lIHBjcmUyX2dldF9tYXJrICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2dldF9tYXJrXykKKyNkZWZpbmUgcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlciAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcl8pCisjZGVmaW5lIHBjcmUyX2dldF9vdmVjdG9yX2NvdW50ICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2dldF9vdmVjdG9yX2NvdW50XykKKyNkZWZpbmUgcGNyZTJfZ2V0X3N0YXJ0Y2hhciAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfZ2V0X3N0YXJ0Y2hhcl8pCisjZGVmaW5lIHBjcmUyX2ppdF9jb21waWxlICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2ppdF9jb21waWxlXykKKyNkZWZpbmUgcGNyZTJfaml0X21hdGNoICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfaml0X21hdGNoXykKKyNkZWZpbmUgcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeSAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeV8pCisjZGVmaW5lIHBjcmUyX2ppdF9zdGFja19hc3NpZ24gICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2ppdF9zdGFja19hc3NpZ25fKQorI2RlZmluZSBwY3JlMl9qaXRfc3RhY2tfY3JlYXRlICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9qaXRfc3RhY2tfY3JlYXRlXykKKyNkZWZpbmUgcGNyZTJfaml0X3N0YWNrX2ZyZWUgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfaml0X3N0YWNrX2ZyZWVfKQorI2RlZmluZSBwY3JlMl9tYWtldGFibGVzICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9tYWtldGFibGVzXykKKyNkZWZpbmUgcGNyZTJfbWF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfbWF0Y2hfKQorI2RlZmluZSBwY3JlMl9tYXRjaF9jb250ZXh0X2NvcHkgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9tYXRjaF9jb250ZXh0X2NvcHlfKQorI2RlZmluZSBwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZSAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZV8pCisjZGVmaW5lIHBjcmUyX21hdGNoX2NvbnRleHRfZnJlZSAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX21hdGNoX2NvbnRleHRfZnJlZV8pCisjZGVmaW5lIHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlXykKKyNkZWZpbmUgcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuICBQQ1JFMl9TVUZGSVgocGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuXykKKyNkZWZpbmUgcGNyZTJfbWF0Y2hfZGF0YV9mcmVlICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfbWF0Y2hfZGF0YV9mcmVlXykKKyNkZWZpbmUgcGNyZTJfcGF0dGVybl9pbmZvICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfcGF0dGVybl9pbmZvXykKKyNkZWZpbmUgcGNyZTJfc2VyaWFsaXplX2RlY29kZSAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc2VyaWFsaXplX2RlY29kZV8pCisjZGVmaW5lIHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGVfKQorI2RlZmluZSBwY3JlMl9zZXJpYWxpemVfZnJlZSAgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zZXJpYWxpemVfZnJlZV8pCisjZGVmaW5lIHBjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzICAgUENSRTJfU1VGRklYKHBjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzXykKKyNkZWZpbmUgcGNyZTJfc2V0X2JzciAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc2V0X2Jzcl8pCisjZGVmaW5lIHBjcmUyX3NldF9jYWxsb3V0ICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3NldF9jYWxsb3V0XykKKyNkZWZpbmUgcGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXMgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXNfKQorI2RlZmluZSBwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmRfKQorI2RlZmluZSBwY3JlMl9zZXRfbWF0Y2hfbGltaXQgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zZXRfbWF0Y2hfbGltaXRfKQorI2RlZmluZSBwY3JlMl9zZXRfbWF4X3BhdHRlcm5fbGVuZ3RoICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zZXRfbWF4X3BhdHRlcm5fbGVuZ3RoXykKKyNkZWZpbmUgcGNyZTJfc2V0X25ld2xpbmUgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc2V0X25ld2xpbmVfKQorI2RlZmluZSBwY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXRfKQorI2RlZmluZSBwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0ICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0XykKKyNkZWZpbmUgcGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdCAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdF8pCisjZGVmaW5lIHBjcmUyX3NldF9yZWN1cnNpb25fbWVtb3J5X21hbmFnZW1lbnQgUENSRTJfU1VGRklYKHBjcmUyX3NldF9yZWN1cnNpb25fbWVtb3J5X21hbmFnZW1lbnRfKQorI2RlZmluZSBwY3JlMl9zdWJzdGl0dXRlICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zdWJzdGl0dXRlXykKKyNkZWZpbmUgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lXykKKyNkZWZpbmUgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXJfKQorI2RlZmluZSBwY3JlMl9zdWJzdHJpbmdfZnJlZSAgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zdWJzdHJpbmdfZnJlZV8pCisjZGVmaW5lIHBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lXykKKyNkZWZpbmUgcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlciAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcl8pCisjZGVmaW5lIHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lXykKKyNkZWZpbmUgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlciAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlcl8pCisjZGVmaW5lIHBjcmUyX3N1YnN0cmluZ19saXN0X2dldCAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3N1YnN0cmluZ19saXN0X2dldF8pCisjZGVmaW5lIHBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWVfKQorI2RlZmluZSBwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4gICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW5fKQorI2RlZmluZSBwY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZSAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZV8pCisKKworLyogTm93IGdlbmVyYXRlIGFsbCB0aHJlZSBzZXRzIG9mIHdpZHRoLXNwZWNpZmljIHN0cnVjdHVyZXMgYW5kIGZ1bmN0aW9uCitwcm90b3R5cGVzLiAqLworCisjZGVmaW5lIFBDUkUyX1RZUEVTX1NUUlVDVFVSRVNfQU5EX0ZVTkNUSU9OUyBcCitQQ1JFMl9UWVBFU19MSVNUIFwKK1BDUkUyX1NUUlVDVFVSRV9MSVNUIFwKK1BDUkUyX0dFTkVSQUxfSU5GT19GVU5DVElPTlMgXAorUENSRTJfR0VORVJBTF9DT05URVhUX0ZVTkNUSU9OUyBcCitQQ1JFMl9DT01QSUxFX0NPTlRFWFRfRlVOQ1RJT05TIFwKK1BDUkUyX01BVENIX0NPTlRFWFRfRlVOQ1RJT05TIFwKK1BDUkUyX0NPTVBJTEVfRlVOQ1RJT05TIFwKK1BDUkUyX1BBVFRFUk5fSU5GT19GVU5DVElPTlMgXAorUENSRTJfTUFUQ0hfRlVOQ1RJT05TIFwKK1BDUkUyX1NVQlNUUklOR19GVU5DVElPTlMgXAorUENSRTJfU0VSSUFMSVpFX0ZVTkNUSU9OUyBcCitQQ1JFMl9TVUJTVElUVVRFX0ZVTkNUSU9OIFwKK1BDUkUyX0pJVF9GVU5DVElPTlMgXAorUENSRTJfT1RIRVJfRlVOQ1RJT05TCisKKyNkZWZpbmUgUENSRTJfTE9DQUxfV0lEVEggOAorUENSRTJfVFlQRVNfU1RSVUNUVVJFU19BTkRfRlVOQ1RJT05TCisjdW5kZWYgUENSRTJfTE9DQUxfV0lEVEgKKworI2RlZmluZSBQQ1JFMl9MT0NBTF9XSURUSCAxNgorUENSRTJfVFlQRVNfU1RSVUNUVVJFU19BTkRfRlVOQ1RJT05TCisjdW5kZWYgUENSRTJfTE9DQUxfV0lEVEgKKworI2RlZmluZSBQQ1JFMl9MT0NBTF9XSURUSCAzMgorUENSRTJfVFlQRVNfU1RSVUNUVVJFU19BTkRfRlVOQ1RJT05TCisjdW5kZWYgUENSRTJfTE9DQUxfV0lEVEgKKworLyogVW5kZWZpbmUgdGhlIGxpc3QgbWFjcm9zOyB0aGV5IGFyZSBubyBsb25nZXIgbmVlZGVkLiAqLworCisjdW5kZWYgUENSRTJfVFlQRVNfTElTVAorI3VuZGVmIFBDUkUyX1NUUlVDVFVSRV9MSVNUCisjdW5kZWYgUENSRTJfR0VORVJBTF9JTkZPX0ZVTkNUSU9OUworI3VuZGVmIFBDUkUyX0dFTkVSQUxfQ09OVEVYVF9GVU5DVElPTlMKKyN1bmRlZiBQQ1JFMl9DT01QSUxFX0NPTlRFWFRfRlVOQ1RJT05TCisjdW5kZWYgUENSRTJfTUFUQ0hfQ09OVEVYVF9GVU5DVElPTlMKKyN1bmRlZiBQQ1JFMl9DT01QSUxFX0ZVTkNUSU9OUworI3VuZGVmIFBDUkUyX1BBVFRFUk5fSU5GT19GVU5DVElPTlMKKyN1bmRlZiBQQ1JFMl9NQVRDSF9GVU5DVElPTlMKKyN1bmRlZiBQQ1JFMl9TVUJTVFJJTkdfRlVOQ1RJT05TCisjdW5kZWYgUENSRTJfU0VSSUFMSVpFX0ZVTkNUSU9OUworI3VuZGVmIFBDUkUyX1NVQlNUSVRVVEVfRlVOQ1RJT04KKyN1bmRlZiBQQ1JFMl9KSVRfRlVOQ1RJT05TCisjdW5kZWYgUENSRTJfT1RIRVJfRlVOQ1RJT05TCisjdW5kZWYgUENSRTJfVFlQRVNfU1RSVUNUVVJFU19BTkRfRlVOQ1RJT05TCisKKy8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCBtdXN0IGJlIGRlZmluZWQuIElmIGl0IGlzIDgsIDE2LCBvciAzMiwgcmVkZWZpbmUKK1BDUkUyX1NVRkZJWCB0byB1c2UgaXQuIElmIGl0IGlzIDAsIHVuZGVmaW5lIHRoZSBvdGhlciBtYWNyb3MgYW5kIG1ha2UKK1BDUkUyX1NVRkZJWCBhIG5vLW9wLiBPdGhlcndpc2UsIGdlbmVyYXRlIGFuIGVycm9yLiAqLworCisjdW5kZWYgUENSRTJfU1VGRklYCisjaWZuZGVmIFBDUkUyX0NPREVfVU5JVF9XSURUSAorI2Vycm9yIFBDUkUyX0NPREVfVU5JVF9XSURUSCBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyBwY3JlMi5oLgorI2Vycm9yIFVzZSA4LCAxNiwgb3IgMzI7IG9yIDAgZm9yIGEgbXVsdGktd2lkdGggYXBwbGljYXRpb24uCisjZWxzZSAgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIIGlzIGRlZmluZWQgKi8KKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOCB8fCBcCisgICAgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2IHx8IFwKKyAgICBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMzIKKyNkZWZpbmUgUENSRTJfU1VGRklYKGEpIFBDUkUyX0dMVUUoYSwgUENSRTJfQ09ERV9VTklUX1dJRFRIKQorI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDAKKyN1bmRlZiBQQ1JFMl9KT0lOCisjdW5kZWYgUENSRTJfR0xVRQorI2RlZmluZSBQQ1JFMl9TVUZGSVgoYSkgYQorI2Vsc2UKKyNlcnJvciBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggbXVzdCBiZSAwLCA4LCAxNiwgb3IgMzIuCisjZW5kaWYKKyNlbmRpZiAgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIIGlzIGRlZmluZWQgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9ICAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIEVuZCBvZiBwY3JlMi5oICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTIuaC5pbiBiL2Rpc3QyL3NyYy9wY3JlMi5oLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZjE5MDkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTIuaC5pbgpAQCAtMCwwICsxLDcyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgUGVybC1Db21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGlzIHRoZSBwdWJsaWMgaGVhZGVyIGZpbGUgZm9yIHRoZSBQQ1JFIGxpYnJhcnksIHNlY29uZCBBUEksIHRvIGJlCisjaW5jbHVkZWQgYnkgYXBwbGljYXRpb25zIHRoYXQgY2FsbCBQQ1JFMiBmdW5jdGlvbnMuCisKKyAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZm5kZWYgX1BDUkUyX0gKKyNkZWZpbmUgX1BDUkUyX0gKKworLyogVGhlIGN1cnJlbnQgUENSRSB2ZXJzaW9uIGluZm9ybWF0aW9uLiAqLworCisjZGVmaW5lIFBDUkUyX01BSk9SICAgICAgICAgIEBQQ1JFMl9NQUpPUkAKKyNkZWZpbmUgUENSRTJfTUlOT1IgICAgICAgICAgQFBDUkUyX01JTk9SQAorI2RlZmluZSBQQ1JFMl9QUkVSRUxFQVNFICAgICBAUENSRTJfUFJFUkVMRUFTRUAKKyNkZWZpbmUgUENSRTJfREFURSAgICAgICAgICAgQFBDUkUyX0RBVEVACisKKy8qIFdoZW4gYW4gYXBwbGljYXRpb24gbGlua3MgdG8gYSBQQ1JFIERMTCBpbiBXaW5kb3dzLCB0aGUgc3ltYm9scyB0aGF0IGFyZQoraW1wb3J0ZWQgaGF2ZSB0byBiZSBpZGVudGlmaWVkIGFzIHN1Y2guIFdoZW4gYnVpbGRpbmcgUENSRTIsIHRoZSBhcHByb3ByaWF0ZQorZXhwb3J0IHNldHRpbmcgaXMgZGVmaW5lZCBpbiBwY3JlMl9pbnRlcm5hbC5oLCB3aGljaCBpbmNsdWRlcyB0aGlzIGZpbGUuIFNvIHdlCitkb24ndCBjaGFuZ2UgZXhpc3RpbmcgZGVmaW5pdGlvbnMgb2YgUENSRTJfRVhQX0RFQ0wuICovCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoUENSRTJfU1RBVElDKQorIyAgaWZuZGVmIFBDUkUyX0VYUF9ERUNMCisjICAgIGRlZmluZSBQQ1JFMl9FWFBfREVDTCAgZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBCeSBkZWZhdWx0LCB3ZSB1c2UgdGhlIHN0YW5kYXJkICJleHRlcm4iIGRlY2xhcmF0aW9ucy4gKi8KKworI2lmbmRlZiBQQ1JFMl9FWFBfREVDTAorIyAgaWZkZWYgX19jcGx1c3BsdXMKKyMgICAgZGVmaW5lIFBDUkUyX0VYUF9ERUNMICBleHRlcm4gIkMiCisjICBlbHNlCisjICAgIGRlZmluZSBQQ1JFMl9FWFBfREVDTCAgZXh0ZXJuCisjICBlbmRpZgorI2VuZGlmCisKKy8qIEhhdmUgdG8gaW5jbHVkZSBsaW1pdHMuaCwgc3RkbGliLmggYW5kIHN0ZGludC5oIHRvIGVuc3VyZSB0aGF0IHNpemVfdCBhbmQKK3VpbnQ4X3QsIFVDSEFSX01BWCwgZXRjIGFyZSBkZWZpbmVkLiAqLworCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8qIEFsbG93IGZvciBDKysgdXNlcnMgY29tcGlsaW5nIHRoaXMgZGlyZWN0bHkuICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyBvcHRpb24gYml0cyBjYW4gYmUgcGFzc2VkIHRvIHBjcmUyX2NvbXBpbGUoKSwgcGNyZTJfbWF0Y2goKSwKK29yIHBjcmUyX2RmYV9tYXRjaCgpLiBQQ1JFMl9OT19VVEZfQ0hFQ0sgYWZmZWN0cyBvbmx5IHRoZSBmdW5jdGlvbiB0byB3aGljaCBpdAoraXMgcGFzc2VkLiBQdXQgdGhlc2UgYml0cyBhdCB0aGUgbW9zdCBzaWduaWZpY2FudCBlbmQgb2YgdGhlIG9wdGlvbnMgd29yZCBzbworb3RoZXJzIGNhbiBiZSBhZGRlZCBuZXh0IHRvIHRoZW0gKi8KKworI2RlZmluZSBQQ1JFMl9BTkNIT1JFRCAgICAgICAgICAgIDB4ODAwMDAwMDB1CisjZGVmaW5lIFBDUkUyX05PX1VURl9DSEVDSyAgICAgICAgMHg0MDAwMDAwMHUKKworLyogVGhlIGZvbGxvd2luZyBvcHRpb24gYml0cyBjYW4gYmUgcGFzc2VkIG9ubHkgdG8gcGNyZTJfY29tcGlsZSgpLiBIb3dldmVyLAordGhleSBtYXkgYWZmZWN0IGNvbXBpbGF0aW9uLCBKSVQgY29tcGlsYXRpb24sIGFuZC9vciBpbnRlcnByZXRpdmUgZXhlY3V0aW9uLgorVGhlIGZvbGxvd2luZyB0YWdzIGluZGljYXRlIHdoaWNoOgorCitDICAgYWx0ZXJzIHdoYXQgaXMgY29tcGlsZWQgYnkgcGNyZTJfY29tcGlsZSgpCitKICAgYWx0ZXJzIHdoYXQgaXMgY29tcGlsZWQgYnkgcGNyZTJfaml0X2NvbXBpbGUoKQorTSAgIGlzIGluc3BlY3RlZCBkdXJpbmcgcGNyZTJfbWF0Y2goKSBleGVjdXRpb24KK0QgICBpcyBpbnNwZWN0ZWQgZHVyaW5nIHBjcmUyX2RmYV9tYXRjaCgpIGV4ZWN1dGlvbgorKi8KKworI2RlZmluZSBQQ1JFMl9BTExPV19FTVBUWV9DTEFTUyAgIDB4MDAwMDAwMDF1ICAvKiBDICAgICAgICovCisjZGVmaW5lIFBDUkUyX0FMVF9CU1VYICAgICAgICAgICAgMHgwMDAwMDAwMnUgIC8qIEMgICAgICAgKi8KKyNkZWZpbmUgUENSRTJfQVVUT19DQUxMT1VUICAgICAgICAweDAwMDAwMDA0dSAgLyogQyAgICAgICAqLworI2RlZmluZSBQQ1JFMl9DQVNFTEVTUyAgICAgICAgICAgIDB4MDAwMDAwMDh1ICAvKiBDICAgICAgICovCisjZGVmaW5lIFBDUkUyX0RPTExBUl9FTkRPTkxZICAgICAgMHgwMDAwMDAxMHUgIC8qICAgSiBNIEQgKi8KKyNkZWZpbmUgUENSRTJfRE9UQUxMICAgICAgICAgICAgICAweDAwMDAwMDIwdSAgLyogQyAgICAgICAqLworI2RlZmluZSBQQ1JFMl9EVVBOQU1FUyAgICAgICAgICAgIDB4MDAwMDAwNDB1ICAvKiBDICAgICAgICovCisjZGVmaW5lIFBDUkUyX0VYVEVOREVEICAgICAgICAgICAgMHgwMDAwMDA4MHUgIC8qIEMgICAgICAgKi8KKyNkZWZpbmUgUENSRTJfRklSU1RMSU5FICAgICAgICAgICAweDAwMDAwMTAwdSAgLyogICBKIE0gRCAqLworI2RlZmluZSBQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGIDB4MDAwMDAyMDB1ICAvKiBDIEogTSAgICovCisjZGVmaW5lIFBDUkUyX01VTFRJTElORSAgICAgICAgICAgMHgwMDAwMDQwMHUgIC8qIEMgICAgICAgKi8KKyNkZWZpbmUgUENSRTJfTkVWRVJfVUNQICAgICAgICAgICAweDAwMDAwODAwdSAgLyogQyAgICAgICAqLworI2RlZmluZSBQQ1JFMl9ORVZFUl9VVEYgICAgICAgICAgIDB4MDAwMDEwMDB1ICAvKiBDICAgICAgICovCisjZGVmaW5lIFBDUkUyX05PX0FVVE9fQ0FQVFVSRSAgICAgMHgwMDAwMjAwMHUgIC8qIEMgICAgICAgKi8KKyNkZWZpbmUgUENSRTJfTk9fQVVUT19QT1NTRVNTICAgICAweDAwMDA0MDAwdSAgLyogQyAgICAgICAqLworI2RlZmluZSBQQ1JFMl9OT19ET1RTVEFSX0FOQ0hPUiAgIDB4MDAwMDgwMDB1ICAvKiBDICAgICAgICovCisjZGVmaW5lIFBDUkUyX05PX1NUQVJUX09QVElNSVpFICAgMHgwMDAxMDAwMHUgIC8qICAgSiBNIEQgKi8KKyNkZWZpbmUgUENSRTJfVUNQICAgICAgICAgICAgICAgICAweDAwMDIwMDAwdSAgLyogQyBKIE0gRCAqLworI2RlZmluZSBQQ1JFMl9VTkdSRUVEWSAgICAgICAgICAgIDB4MDAwNDAwMDB1ICAvKiBDICAgICAgICovCisjZGVmaW5lIFBDUkUyX1VURiAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMHUgIC8qIEMgSiBNIEQgKi8KKyNkZWZpbmUgUENSRTJfTkVWRVJfQkFDS1NMQVNIX0MgICAweDAwMTAwMDAwdSAgLyogQyAgICAgICAqLworI2RlZmluZSBQQ1JFMl9BTFRfQ0lSQ1VNRkxFWCAgICAgIDB4MDAyMDAwMDB1ICAvKiAgIEogTSBEICovCisjZGVmaW5lIFBDUkUyX0FMVF9WRVJCTkFNRVMgICAgICAgMHgwMDQwMDAwMHUgIC8qIEMgICAgICAgKi8KKyNkZWZpbmUgUENSRTJfVVNFX09GRlNFVF9MSU1JVCAgICAweDAwODAwMDAwdSAgLyogICBKIE0gRCAqLworCisvKiBUaGVzZSBhcmUgZm9yIHBjcmUyX2ppdF9jb21waWxlKCkuICovCisKKyNkZWZpbmUgUENSRTJfSklUX0NPTVBMRVRFICAgICAgICAweDAwMDAwMDAxdSAgLyogRm9yIGZ1bGwgbWF0Y2hpbmcgKi8KKyNkZWZpbmUgUENSRTJfSklUX1BBUlRJQUxfU09GVCAgICAweDAwMDAwMDAydQorI2RlZmluZSBQQ1JFMl9KSVRfUEFSVElBTF9IQVJEICAgIDB4MDAwMDAwMDR1CisKKy8qIFRoZXNlIGFyZSBmb3IgcGNyZTJfbWF0Y2goKSwgcGNyZTJfZGZhX21hdGNoKCksIGFuZCBwY3JlMl9qaXRfbWF0Y2goKS4gTm90ZQordGhhdCBQQ1JFMl9BTkNIT1JFRCBhbmQgUENSRTJfTk9fVVRGX0NIRUNLIGNhbiBhbHNvIGJlIHBhc3NlZCB0byB0aGVzZQorZnVuY3Rpb25zICh0aG91Z2ggcGNyZTJfaml0X21hdGNoKCkgaWdub3JlcyB0aGUgbGF0dGVyIHNpbmNlIGl0IGJ5cGFzc2VzIGFsbAorc2FuaXR5IGNoZWNrcykuICovCisKKyNkZWZpbmUgUENSRTJfTk9UQk9MICAgICAgICAgICAgICAweDAwMDAwMDAxdQorI2RlZmluZSBQQ1JFMl9OT1RFT0wgICAgICAgICAgICAgIDB4MDAwMDAwMDJ1CisjZGVmaW5lIFBDUkUyX05PVEVNUFRZICAgICAgICAgICAgMHgwMDAwMDAwNHUgIC8qICkgVGhlc2UgdHdvIG11c3QgYmUga2VwdCAqLworI2RlZmluZSBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUICAgIDB4MDAwMDAwMDh1ICAvKiApIGFkamFjZW50IHRvIGVhY2ggb3RoZXIuICovCisjZGVmaW5lIFBDUkUyX1BBUlRJQUxfU09GVCAgICAgICAgMHgwMDAwMDAxMHUKKyNkZWZpbmUgUENSRTJfUEFSVElBTF9IQVJEICAgICAgICAweDAwMDAwMDIwdQorCisvKiBUaGVzZSBhcmUgYWRkaXRpb25hbCBvcHRpb25zIGZvciBwY3JlMl9kZmFfbWF0Y2goKS4gKi8KKworI2RlZmluZSBQQ1JFMl9ERkFfUkVTVEFSVCAgICAgICAgIDB4MDAwMDAwNDB1CisjZGVmaW5lIFBDUkUyX0RGQV9TSE9SVEVTVCAgICAgICAgMHgwMDAwMDA4MHUKKworLyogVGhlc2UgYXJlIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgcGNyZTJfc3Vic3RpdHV0ZSgpLiAqLworCisjZGVmaW5lIFBDUkUyX1NVQlNUSVRVVEVfR0xPQkFMICAgICAgICAgICAweDAwMDAwMTAwdQorI2RlZmluZSBQQ1JFMl9TVUJTVElUVVRFX0VYVEVOREVEICAgICAgICAgMHgwMDAwMDIwMHUKKyNkZWZpbmUgUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWSAgICAgIDB4MDAwMDA0MDB1CisjZGVmaW5lIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCAgICAweDAwMDAwODAwdQorI2RlZmluZSBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCAgMHgwMDAwMTAwMHUKKworLyogTmV3bGluZSBhbmQgXFIgc2V0dGluZ3MsIGZvciB1c2UgaW4gY29tcGlsZSBjb250ZXh0cy4gVGhlIG5ld2xpbmUgdmFsdWVzCittdXN0IGJlIGtlcHQgaW4gc3RlcCB3aXRoIHZhbHVlcyBzZXQgaW4gY29uZmlnLmggYW5kIGJvdGggc2V0cyBtdXN0IGFsbCBiZQorZ3JlYXRlciB0aGFuIHplcm8uICovCisKKyNkZWZpbmUgUENSRTJfTkVXTElORV9DUiAgICAgICAgICAxCisjZGVmaW5lIFBDUkUyX05FV0xJTkVfTEYgICAgICAgICAgMgorI2RlZmluZSBQQ1JFMl9ORVdMSU5FX0NSTEYgICAgICAgIDMKKyNkZWZpbmUgUENSRTJfTkVXTElORV9BTlkgICAgICAgICA0CisjZGVmaW5lIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRiAgICAgNQorCisjZGVmaW5lIFBDUkUyX0JTUl9VTklDT0RFICAgICAgICAgMQorI2RlZmluZSBQQ1JFMl9CU1JfQU5ZQ1JMRiAgICAgICAgIDIKKworLyogRXJyb3IgY29kZXM6IG5vIG1hdGNoIGFuZCBwYXJ0aWFsIG1hdGNoIGFyZSAiZXhwZWN0ZWQiIGVycm9ycy4gKi8KKworI2RlZmluZSBQQ1JFMl9FUlJPUl9OT01BVENIICAgICAgICAgICgtMSkKKyNkZWZpbmUgUENSRTJfRVJST1JfUEFSVElBTCAgICAgICAgICAoLTIpCisKKy8qIEVycm9yIGNvZGVzIGZvciBVVEYtOCB2YWxpZGl0eSBjaGVja3MgKi8KKworI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjEgICAgICAgICgtMykKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlIyICAgICAgICAoLTQpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSMyAgICAgICAgKC01KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjQgICAgICAgICgtNikKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlI1ICAgICAgICAoLTcpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSNiAgICAgICAgKC04KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjcgICAgICAgICgtOSkKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlI4ICAgICAgICgtMTApCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSOSAgICAgICAoLTExKQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjEwICAgICAgKC0xMikKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlIxMSAgICAgICgtMTMpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSMTIgICAgICAoLTE0KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjEzICAgICAgKC0xNSkKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlIxNCAgICAgICgtMTYpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSMTUgICAgICAoLTE3KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE2ICAgICAgKC0xOCkKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlIxNyAgICAgICgtMTkpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSMTggICAgICAoLTIwKQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE5ICAgICAgKC0yMSkKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGOF9FUlIyMCAgICAgICgtMjIpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjhfRVJSMjEgICAgICAoLTIzKQorCisvKiBFcnJvciBjb2RlcyBmb3IgVVRGLTE2IHZhbGlkaXR5IGNoZWNrcyAqLworCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjE2X0VSUjEgICAgICAoLTI0KQorI2RlZmluZSBQQ1JFMl9FUlJPUl9VVEYxNl9FUlIyICAgICAgKC0yNSkKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGMTZfRVJSMyAgICAgICgtMjYpCisKKy8qIEVycm9yIGNvZGVzIGZvciBVVEYtMzIgdmFsaWRpdHkgY2hlY2tzICovCisKKyNkZWZpbmUgUENSRTJfRVJST1JfVVRGMzJfRVJSMSAgICAgICgtMjcpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VURjMyX0VSUjIgICAgICAoLTI4KQorCisvKiBFcnJvciBjb2RlcyBmb3IgcGNyZTJbX2RmYV1fbWF0Y2goKSwgc3Vic3RyaW5nIGV4dHJhY3Rpb24gZnVuY3Rpb25zLCBjb250ZXh0CitmdW5jdGlvbnMsIGFuZCBzZXJpYWxpemluZyBmdW5jdGlvbnMuIFRoZXkgYXJlIGluIG51bWVyaWNhbCBvcmRlci4gT3JpZ2luYWxseQordGhleSB3ZXJlIGluIGFscGhhYmV0aWNhbCBvcmRlciB0b28sIGJ1dCBub3cgdGhhdCBQQ1JFMiBpcyByZWxlYXNlZCwgdGhlCitudW1iZXJzIG11c3Qgbm90IGJlIGNoYW5nZWQuICovCisKKyNkZWZpbmUgUENSRTJfRVJST1JfQkFEREFUQSAgICAgICAgICAgKC0yOSkKKyNkZWZpbmUgUENSRTJfRVJST1JfTUlYRURUQUJMRVMgICAgICAgKC0zMCkgIC8qIE5hbWUgd2FzIGNoYW5nZWQgKi8KKyNkZWZpbmUgUENSRTJfRVJST1JfQkFETUFHSUMgICAgICAgICAgKC0zMSkKKyNkZWZpbmUgUENSRTJfRVJST1JfQkFETU9ERSAgICAgICAgICAgKC0zMikKKyNkZWZpbmUgUENSRTJfRVJST1JfQkFET0ZGU0VUICAgICAgICAgKC0zMykKKyNkZWZpbmUgUENSRTJfRVJST1JfQkFET1BUSU9OICAgICAgICAgKC0zNCkKKyNkZWZpbmUgUENSRTJfRVJST1JfQkFEUkVQTEFDRU1FTlQgICAgKC0zNSkKKyNkZWZpbmUgUENSRTJfRVJST1JfQkFEVVRGT0ZGU0VUICAgICAgKC0zNikKKyNkZWZpbmUgUENSRTJfRVJST1JfQ0FMTE9VVCAgICAgICAgICAgKC0zNykgIC8qIE5ldmVyIHVzZWQgYnkgUENSRTIgaXRzZWxmICovCisjZGVmaW5lIFBDUkUyX0VSUk9SX0RGQV9CQURSRVNUQVJUICAgICgtMzgpCisjZGVmaW5lIFBDUkUyX0VSUk9SX0RGQV9SRUNVUlNFICAgICAgICgtMzkpCisjZGVmaW5lIFBDUkUyX0VSUk9SX0RGQV9VQ09ORCAgICAgICAgICgtNDApCisjZGVmaW5lIFBDUkUyX0VSUk9SX0RGQV9VRlVOQyAgICAgICAgICgtNDEpCisjZGVmaW5lIFBDUkUyX0VSUk9SX0RGQV9VSVRFTSAgICAgICAgICgtNDIpCisjZGVmaW5lIFBDUkUyX0VSUk9SX0RGQV9XU1NJWkUgICAgICAgICgtNDMpCisjZGVmaW5lIFBDUkUyX0VSUk9SX0lOVEVSTkFMICAgICAgICAgICgtNDQpCisjZGVmaW5lIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04gICAgICgtNDUpCisjZGVmaW5lIFBDUkUyX0VSUk9SX0pJVF9TVEFDS0xJTUlUICAgICgtNDYpCisjZGVmaW5lIFBDUkUyX0VSUk9SX01BVENITElNSVQgICAgICAgICgtNDcpCisjZGVmaW5lIFBDUkUyX0VSUk9SX05PTUVNT1JZICAgICAgICAgICgtNDgpCisjZGVmaW5lIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HICAgICAgICgtNDkpCisjZGVmaW5lIFBDUkUyX0VSUk9SX05PVU5JUVVFU1VCU1RSSU5HICgtNTApCisjZGVmaW5lIFBDUkUyX0VSUk9SX05VTEwgICAgICAgICAgICAgICgtNTEpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1JFQ1VSU0VMT09QICAgICAgICgtNTIpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1JFQ1VSU0lPTkxJTUlUICAgICgtNTMpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFICAgICAgICgtNTQpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1VOU0VUICAgICAgICAgICAgICgtNTUpCisjZGVmaW5lIFBDUkUyX0VSUk9SX0JBRE9GRlNFVExJTUlUICAgICgtNTYpCisjZGVmaW5lIFBDUkUyX0VSUk9SX0JBRFJFUEVTQ0FQRSAgICAgICgtNTcpCisjZGVmaW5lIFBDUkUyX0VSUk9SX1JFUE1JU1NJTkdCUkFDRSAgICgtNTgpCisjZGVmaW5lIFBDUkUyX0VSUk9SX0JBRFNVQlNUSVRVVElPTiAgICgtNTkpCisjZGVmaW5lIFBDUkUyX0VSUk9SX0JBRFNVQlNQQVRURVJOICAgICgtNjApCisjZGVmaW5lIFBDUkUyX0VSUk9SX1RPT01BTllSRVBMQUNFICAgICgtNjEpCisKKy8qIFJlcXVlc3QgdHlwZXMgZm9yIHBjcmUyX3BhdHRlcm5faW5mbygpICovCisKKyNkZWZpbmUgUENSRTJfSU5GT19BTExPUFRJT05TICAgICAgICAgICAgMAorI2RlZmluZSBQQ1JFMl9JTkZPX0FSR09QVElPTlMgICAgICAgICAgICAxCisjZGVmaW5lIFBDUkUyX0lORk9fQkFDS1JFRk1BWCAgICAgICAgICAgIDIKKyNkZWZpbmUgUENSRTJfSU5GT19CU1IgICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBQQ1JFMl9JTkZPX0NBUFRVUkVDT1VOVCAgICAgICAgICA0CisjZGVmaW5lIFBDUkUyX0lORk9fRklSU1RDT0RFVU5JVCAgICAgICAgIDUKKyNkZWZpbmUgUENSRTJfSU5GT19GSVJTVENPREVUWVBFICAgICAgICAgNgorI2RlZmluZSBQQ1JFMl9JTkZPX0ZJUlNUQklUTUFQICAgICAgICAgICA3CisjZGVmaW5lIFBDUkUyX0lORk9fSEFTQ1JPUkxGICAgICAgICAgICAgIDgKKyNkZWZpbmUgUENSRTJfSU5GT19KQ0hBTkdFRCAgICAgICAgICAgICAgOQorI2RlZmluZSBQQ1JFMl9JTkZPX0pJVFNJWkUgICAgICAgICAgICAgIDEwCisjZGVmaW5lIFBDUkUyX0lORk9fTEFTVENPREVVTklUICAgICAgICAgMTEKKyNkZWZpbmUgUENSRTJfSU5GT19MQVNUQ09ERVRZUEUgICAgICAgICAxMgorI2RlZmluZSBQQ1JFMl9JTkZPX01BVENIRU1QVFkgICAgICAgICAgIDEzCisjZGVmaW5lIFBDUkUyX0lORk9fTUFUQ0hMSU1JVCAgICAgICAgICAgMTQKKyNkZWZpbmUgUENSRTJfSU5GT19NQVhMT09LQkVISU5EICAgICAgICAxNQorI2RlZmluZSBQQ1JFMl9JTkZPX01JTkxFTkdUSCAgICAgICAgICAgIDE2CisjZGVmaW5lIFBDUkUyX0lORk9fTkFNRUNPVU5UICAgICAgICAgICAgMTcKKyNkZWZpbmUgUENSRTJfSU5GT19OQU1FRU5UUllTSVpFICAgICAgICAxOAorI2RlZmluZSBQQ1JFMl9JTkZPX05BTUVUQUJMRSAgICAgICAgICAgIDE5CisjZGVmaW5lIFBDUkUyX0lORk9fTkVXTElORSAgICAgICAgICAgICAgMjAKKyNkZWZpbmUgUENSRTJfSU5GT19SRUNVUlNJT05MSU1JVCAgICAgICAyMQorI2RlZmluZSBQQ1JFMl9JTkZPX1NJWkUgICAgICAgICAgICAgICAgIDIyCisjZGVmaW5lIFBDUkUyX0lORk9fSEFTQkFDS1NMQVNIQyAgICAgICAgMjMKKworLyogUmVxdWVzdCB0eXBlcyBmb3IgcGNyZTJfY29uZmlnKCkuICovCisKKyNkZWZpbmUgUENSRTJfQ09ORklHX0JTUiAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgUENSRTJfQ09ORklHX0pJVCAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgUENSRTJfQ09ORklHX0pJVFRBUkdFVCAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgUENSRTJfQ09ORklHX0xJTktTSVpFICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgUENSRTJfQ09ORklHX01BVENITElNSVQgICAgICAgICAgICAgIDQKKyNkZWZpbmUgUENSRTJfQ09ORklHX05FV0xJTkUgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgUENSRTJfQ09ORklHX1BBUkVOU0xJTUlUICAgICAgICAgICAgIDYKKyNkZWZpbmUgUENSRTJfQ09ORklHX1JFQ1VSU0lPTkxJTUlUICAgICAgICAgIDcKKyNkZWZpbmUgUENSRTJfQ09ORklHX1NUQUNLUkVDVVJTRSAgICAgICAgICAgIDgKKyNkZWZpbmUgUENSRTJfQ09ORklHX1VOSUNPREUgICAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgUENSRTJfQ09ORklHX1VOSUNPREVfVkVSU0lPTiAgICAgICAgMTAKKyNkZWZpbmUgUENSRTJfQ09ORklHX1ZFUlNJT04gICAgICAgICAgICAgICAgMTEKKworLyogVHlwZXMgZm9yIGNvZGUgdW5pdHMgaW4gcGF0dGVybnMgYW5kIHN1YmplY3Qgc3RyaW5ncy4gKi8KKwordHlwZWRlZiB1aW50OF90ICBQQ1JFMl9VQ0hBUjg7Cit0eXBlZGVmIHVpbnQxNl90IFBDUkUyX1VDSEFSMTY7Cit0eXBlZGVmIHVpbnQzMl90IFBDUkUyX1VDSEFSMzI7CisKK3R5cGVkZWYgY29uc3QgUENSRTJfVUNIQVI4ICAqUENSRTJfU1BUUjg7Cit0eXBlZGVmIGNvbnN0IFBDUkUyX1VDSEFSMTYgKlBDUkUyX1NQVFIxNjsKK3R5cGVkZWYgY29uc3QgUENSRTJfVUNIQVIzMiAqUENSRTJfU1BUUjMyOworCisvKiBUaGUgUENSRTJfU0laRSB0eXBlIGlzIHVzZWQgZm9yIGFsbCBzdHJpbmcgbGVuZ3RocyBhbmQgb2Zmc2V0cyBpbiBQQ1JFMiwKK2luY2x1ZGluZyBwYXR0ZXJuIG9mZnNldHMgZm9yIGVycm9ycyBhbmQgc3ViamVjdCBvZmZzZXRzIGFmdGVyIGEgbWF0Y2guIFdlCitkZWZpbmUgc3BlY2lhbCB2YWx1ZXMgdG8gaW5kaWNhdGUgemVyby10ZXJtaW5hdGVkIHN0cmluZ3MgYW5kIHVuc2V0IG9mZnNldHMgaW4KK3RoZSBvZmZzZXQgdmVjdG9yIChvdmVjdG9yKS4gKi8KKworI2RlZmluZSBQQ1JFMl9TSVpFICAgICAgICAgICAgc2l6ZV90CisjZGVmaW5lIFBDUkUyX1NJWkVfTUFYICAgICAgICBTSVpFX01BWAorI2RlZmluZSBQQ1JFMl9aRVJPX1RFUk1JTkFURUQgKH4oUENSRTJfU0laRSkwKQorI2RlZmluZSBQQ1JFMl9VTlNFVCAgICAgICAgICAgKH4oUENSRTJfU0laRSkwKQorCisvKiBHZW5lcmljIHR5cGVzIGZvciBvcGFxdWUgc3RydWN0dXJlcyBhbmQgSklUIGNhbGxiYWNrIGZ1bmN0aW9ucy4gVGhlc2UKK2RlY2xhcmF0aW9ucyBhcmUgZGVmaW5lZCBpbiBhIG1hY3JvIHRoYXQgaXMgZXhwYW5kZWQgZm9yIGVhY2ggd2lkdGggbGF0ZXIuICovCisKKyNkZWZpbmUgUENSRTJfVFlQRVNfTElTVCBcCitzdHJ1Y3QgcGNyZTJfcmVhbF9nZW5lcmFsX2NvbnRleHQ7IFwKK3R5cGVkZWYgc3RydWN0IHBjcmUyX3JlYWxfZ2VuZXJhbF9jb250ZXh0IHBjcmUyX2dlbmVyYWxfY29udGV4dDsgXAorXAorc3RydWN0IHBjcmUyX3JlYWxfY29tcGlsZV9jb250ZXh0OyBcCit0eXBlZGVmIHN0cnVjdCBwY3JlMl9yZWFsX2NvbXBpbGVfY29udGV4dCBwY3JlMl9jb21waWxlX2NvbnRleHQ7IFwKK1wKK3N0cnVjdCBwY3JlMl9yZWFsX21hdGNoX2NvbnRleHQ7IFwKK3R5cGVkZWYgc3RydWN0IHBjcmUyX3JlYWxfbWF0Y2hfY29udGV4dCBwY3JlMl9tYXRjaF9jb250ZXh0OyBcCitcCitzdHJ1Y3QgcGNyZTJfcmVhbF9jb2RlOyBcCit0eXBlZGVmIHN0cnVjdCBwY3JlMl9yZWFsX2NvZGUgcGNyZTJfY29kZTsgXAorXAorc3RydWN0IHBjcmUyX3JlYWxfbWF0Y2hfZGF0YTsgXAordHlwZWRlZiBzdHJ1Y3QgcGNyZTJfcmVhbF9tYXRjaF9kYXRhIHBjcmUyX21hdGNoX2RhdGE7IFwKK1wKK3N0cnVjdCBwY3JlMl9yZWFsX2ppdF9zdGFjazsgXAordHlwZWRlZiBzdHJ1Y3QgcGNyZTJfcmVhbF9qaXRfc3RhY2sgcGNyZTJfaml0X3N0YWNrOyBcCitcCit0eXBlZGVmIHBjcmUyX2ppdF9zdGFjayAqKCpwY3JlMl9qaXRfY2FsbGJhY2spKHZvaWQgKik7CisKKworLyogVGhlIHN0cnVjdHVyZSBmb3IgcGFzc2luZyBvdXQgZGF0YSB2aWEgdGhlIHBjcmVfY2FsbG91dF9mdW5jdGlvbi4gV2UgdXNlIGEKK3N0cnVjdHVyZSBzbyB0aGF0IG5ldyBmaWVsZHMgY2FuIGJlIGFkZGVkIG9uIHRoZSBlbmQgaW4gZnV0dXJlIHZlcnNpb25zLAord2l0aG91dCBjaGFuZ2luZyB0aGUgQVBJIG9mIHRoZSBmdW5jdGlvbiwgdGhlcmVieSBhbGxvd2luZyBvbGQgY2xpZW50cyB0byB3b3JrCit3aXRob3V0IG1vZGlmaWNhdGlvbi4gRGVmaW5lIHRoZSBnZW5lcmljIHZlcnNpb24gaW4gYSBtYWNybzsgdGhlIHdpZHRoLXNwZWNpZmljCit2ZXJzaW9ucyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhpcyBtYWNybyBiZWxvdy4gKi8KKworI2RlZmluZSBQQ1JFMl9TVFJVQ1RVUkVfTElTVCBcCit0eXBlZGVmIHN0cnVjdCBwY3JlMl9jYWxsb3V0X2Jsb2NrIHsgXAorICB1aW50MzJfdCAgICAgIHZlcnNpb247ICAgICAgICAgICAvKiBJZGVudGlmaWVzIHZlcnNpb24gb2YgYmxvY2sgKi8gXAorICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVmVyc2lvbiAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8gXAorICB1aW50MzJfdCAgICAgIGNhbGxvdXRfbnVtYmVyOyAgICAvKiBOdW1iZXIgY29tcGlsZWQgaW50byBwYXR0ZXJuICovIFwKKyAgdWludDMyX3QgICAgICBjYXB0dXJlX3RvcDsgICAgICAgLyogTWF4IGN1cnJlbnQgY2FwdHVyZSAqLyBcCisgIHVpbnQzMl90ICAgICAgY2FwdHVyZV9sYXN0OyAgICAgIC8qIE1vc3QgcmVjZW50bHkgY2xvc2VkIGNhcHR1cmUgKi8gXAorICBQQ1JFMl9TSVpFICAgKm9mZnNldF92ZWN0b3I7ICAgICAvKiBUaGUgb2Zmc2V0IHZlY3RvciAqLyBcCisgIFBDUkUyX1NQVFIgICAgbWFyazsgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gY3VycmVudCBtYXJrIG9yIE5VTEwgKi8gXAorICBQQ1JFMl9TUFRSICAgIHN1YmplY3Q7ICAgICAgICAgICAvKiBUaGUgc3ViamVjdCBiZWluZyBtYXRjaGVkICovIFwKKyAgUENSRTJfU0laRSAgICBzdWJqZWN0X2xlbmd0aDsgICAgLyogVGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCAqLyBcCisgIFBDUkUyX1NJWkUgICAgc3RhcnRfbWF0Y2g7ICAgICAgIC8qIE9mZnNldCB0byBzdGFydCBvZiB0aGlzIG1hdGNoIGF0dGVtcHQgKi8gXAorICBQQ1JFMl9TSVpFICAgIGN1cnJlbnRfcG9zaXRpb247ICAvKiBXaGVyZSB3ZSBjdXJyZW50bHkgYXJlIGluIHRoZSBzdWJqZWN0ICovIFwKKyAgUENSRTJfU0laRSAgICBwYXR0ZXJuX3Bvc2l0aW9uOyAgLyogT2Zmc2V0IHRvIG5leHQgaXRlbSBpbiB0aGUgcGF0dGVybiAqLyBcCisgIFBDUkUyX1NJWkUgICAgbmV4dF9pdGVtX2xlbmd0aDsgIC8qIExlbmd0aCBvZiBuZXh0IGl0ZW0gaW4gdGhlIHBhdHRlcm4gKi8gXAorICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIEFkZGVkIGZvciBWZXJzaW9uIDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8gXAorICBQQ1JFMl9TSVpFICAgIGNhbGxvdXRfc3RyaW5nX29mZnNldDsgLyogT2Zmc2V0IHRvIHN0cmluZyB3aXRoaW4gcGF0dGVybiAqLyBcCisgIFBDUkUyX1NJWkUgICAgY2FsbG91dF9zdHJpbmdfbGVuZ3RoOyAvKiBMZW5ndGggb2Ygc3RyaW5nIGNvbXBpbGVkIGludG8gcGF0dGVybiAqLyBcCisgIFBDUkUyX1NQVFIgICAgY2FsbG91dF9zdHJpbmc7ICAgIC8qIFN0cmluZyBjb21waWxlZCBpbnRvIHBhdHRlcm4gKi8gXAorICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8gXAorfSBwY3JlMl9jYWxsb3V0X2Jsb2NrOyBcCitcCit0eXBlZGVmIHN0cnVjdCBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9jayB7IFwKKyAgdWludDMyX3QgICAgICB2ZXJzaW9uOyAgICAgICAgICAgLyogSWRlbnRpZmllcyB2ZXJzaW9uIG9mIGJsb2NrICovIFwKKyAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFZlcnNpb24gMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovIFwKKyAgUENSRTJfU0laRSAgICBwYXR0ZXJuX3Bvc2l0aW9uOyAgLyogT2Zmc2V0IHRvIG5leHQgaXRlbSBpbiB0aGUgcGF0dGVybiAqLyBcCisgIFBDUkUyX1NJWkUgICAgbmV4dF9pdGVtX2xlbmd0aDsgIC8qIExlbmd0aCBvZiBuZXh0IGl0ZW0gaW4gdGhlIHBhdHRlcm4gKi8gXAorICB1aW50MzJfdCAgICAgIGNhbGxvdXRfbnVtYmVyOyAgICAvKiBOdW1iZXIgY29tcGlsZWQgaW50byBwYXR0ZXJuICovIFwKKyAgUENSRTJfU0laRSAgICBjYWxsb3V0X3N0cmluZ19vZmZzZXQ7IC8qIE9mZnNldCB0byBzdHJpbmcgd2l0aGluIHBhdHRlcm4gKi8gXAorICBQQ1JFMl9TSVpFICAgIGNhbGxvdXRfc3RyaW5nX2xlbmd0aDsgLyogTGVuZ3RoIG9mIHN0cmluZyBjb21waWxlZCBpbnRvIHBhdHRlcm4gKi8gXAorICBQQ1JFMl9TUFRSICAgIGNhbGxvdXRfc3RyaW5nOyAgICAvKiBTdHJpbmcgY29tcGlsZWQgaW50byBwYXR0ZXJuICovIFwKKyAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovIFwKK30gcGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2s7CisKKworLyogTGlzdCB0aGUgZ2VuZXJpYyBmb3JtcyBvZiBhbGwgb3RoZXIgZnVuY3Rpb25zIGluIG1hY3Jvcywgd2hpY2ggd2lsbCBiZQorZXhwYW5kZWQgZm9yIGVhY2ggd2lkdGggYmVsb3cuIFN0YXJ0IHdpdGggZnVuY3Rpb25zIHRoYXQgZ2l2ZSBnZW5lcmFsCitpbmZvcm1hdGlvbi4gKi8KKworI2RlZmluZSBQQ1JFMl9HRU5FUkFMX0lORk9fRlVOQ1RJT05TIFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9jb25maWcodWludDMyX3QsIHZvaWQgKik7CisKKworLyogRnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpbmcgY29udGV4dHMuICovCisKKyNkZWZpbmUgUENSRTJfR0VORVJBTF9DT05URVhUX0ZVTkNUSU9OUyBcCitQQ1JFMl9FWFBfREVDTCBcCisgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHkocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICopOyBcCitQQ1JFMl9FWFBfREVDTCBcCisgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZSggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCopKFBDUkUyX1NJWkUsIHZvaWQgKiksIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCopKHZvaWQgKiwgdm9pZCAqKSwgdm9pZCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgdm9pZCAgICAgIHBjcmUyX2dlbmVyYWxfY29udGV4dF9mcmVlKHBjcmUyX2dlbmVyYWxfY29udGV4dCAqKTsKKworI2RlZmluZSBQQ1JFMl9DT01QSUxFX0NPTlRFWFRfRlVOQ1RJT05TIFwKK1BDUkUyX0VYUF9ERUNMIFwKKyAgcGNyZTJfY29tcGlsZV9jb250ZXh0ICpwY3JlMl9jb21waWxlX2NvbnRleHRfY29weShwY3JlMl9jb21waWxlX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIFwKKyAgcGNyZTJfY29tcGlsZV9jb250ZXh0ICpwY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlKHBjcmUyX2dlbmVyYWxfY29udGV4dCAqKTtcCitQQ1JFMl9FWFBfREVDTCB2b2lkICAgICAgcGNyZTJfY29tcGlsZV9jb250ZXh0X2ZyZWUocGNyZTJfY29tcGlsZV9jb250ZXh0ICopOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc2V0X2JzcihwY3JlMl9jb21waWxlX2NvbnRleHQgKiwgdWludDMyX3QpOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXMocGNyZTJfY29tcGlsZV9jb250ZXh0ICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zZXRfbWF4X3BhdHRlcm5fbGVuZ3RoKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TSVpFKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3NldF9uZXdsaW5lKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqLCB1aW50MzJfdCk7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQocGNyZTJfY29tcGlsZV9jb250ZXh0ICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90KTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZChcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3JlMl9jb21waWxlX2NvbnRleHQgKiwgaW50ICgqKSh1aW50MzJfdCwgdm9pZCAqKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKTsKKworI2RlZmluZSBQQ1JFMl9NQVRDSF9DT05URVhUX0ZVTkNUSU9OUyBcCitQQ1JFMl9FWFBfREVDTCBcCisgIHBjcmUyX21hdGNoX2NvbnRleHQgICAqcGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5KHBjcmUyX21hdGNoX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIFwKKyAgcGNyZTJfbWF0Y2hfY29udGV4dCAgICpwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZShwY3JlMl9nZW5lcmFsX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIHZvaWQgICAgICBwY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWUocGNyZTJfbWF0Y2hfY29udGV4dCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3NldF9jYWxsb3V0KHBjcmUyX21hdGNoX2NvbnRleHQgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqKShwY3JlMl9jYWxsb3V0X2Jsb2NrICosIHZvaWQgKiksIHZvaWQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zZXRfbWF0Y2hfbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCk7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU0laRSk7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zZXRfcmVjdXJzaW9uX2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QpOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc2V0X3JlY3Vyc2lvbl9tZW1vcnlfbWFuYWdlbWVudCggXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNyZTJfbWF0Y2hfY29udGV4dCAqLCB2b2lkICooKikoUENSRTJfU0laRSwgdm9pZCAqKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKikodm9pZCAqLCB2b2lkICopLCB2b2lkICopOworCisKKy8qIEZ1bmN0aW9ucyBjb25jZXJuZWQgd2l0aCBjb21waWxpbmcgYSBwYXR0ZXJuIHRvIFBDUkUgaW50ZXJuYWwgY29kZS4gKi8KKworI2RlZmluZSBQQ1JFMl9DT01QSUxFX0ZVTkNUSU9OUyBcCitQQ1JFMl9FWFBfREVDTCBcCisgIHBjcmUyX2NvZGUgICAgICAgICAgICAqcGNyZTJfY29tcGlsZShQQ1JFMl9TUFRSLCBQQ1JFMl9TSVpFLCB1aW50MzJfdCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICosIFBDUkUyX1NJWkUgKiwgcGNyZTJfY29tcGlsZV9jb250ZXh0ICopOyBcCitQQ1JFMl9FWFBfREVDTCB2b2lkICAgICAgcGNyZTJfY29kZV9mcmVlKHBjcmUyX2NvZGUgKik7CisKKworLyogRnVuY3Rpb25zIHRoYXQgZ2l2ZSBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbXBpbGVkIHBhdHRlcm4uICovCisKKyNkZWZpbmUgUENSRTJfUEFUVEVSTl9JTkZPX0ZVTkNUSU9OUyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfcGF0dGVybl9pbmZvKGNvbnN0IHBjcmUyX2NvZGUgKiwgdWludDMyX3QsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZShjb25zdCBwY3JlMl9jb2RlICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKikocGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2sgKiwgdm9pZCAqKSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKTsKKworCisvKiBGdW5jdGlvbnMgZm9yIHJ1bm5pbmcgYSBtYXRjaCBhbmQgaW5zcGVjdGluZyB0aGUgcmVzdWx0LiAqLworCisjZGVmaW5lIFBDUkUyX01BVENIX0ZVTkNUSU9OUyBcCitQQ1JFMl9FWFBfREVDTCBcCisgIHBjcmUyX21hdGNoX2RhdGEgICAgICAgICpwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSh1aW50MzJfdCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIFwKKyAgcGNyZTJfbWF0Y2hfZGF0YSAgICAgICAgKnBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybihcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBjcmUyX2NvZGUgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICAgIHBjcmUyX2RmYV9tYXRjaChjb25zdCBwY3JlMl9jb2RlICosIFBDUkUyX1NQVFIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU0laRSwgUENSRTJfU0laRSwgdWludDMyX3QsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNyZTJfbWF0Y2hfZGF0YSAqLCBwY3JlMl9tYXRjaF9jb250ZXh0ICosIGludCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NJWkUpOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgICBwY3JlMl9tYXRjaChjb25zdCBwY3JlMl9jb2RlICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1BUUiwgUENSRTJfU0laRSwgUENSRTJfU0laRSwgdWludDMyX3QsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNyZTJfbWF0Y2hfZGF0YSAqLCBwY3JlMl9tYXRjaF9jb250ZXh0ICopOyBcCitQQ1JFMl9FWFBfREVDTCB2b2lkICAgICAgICBwY3JlMl9tYXRjaF9kYXRhX2ZyZWUocGNyZTJfbWF0Y2hfZGF0YSAqKTsgXAorUENSRTJfRVhQX0RFQ0wgUENSRTJfU1BUUiAgcGNyZTJfZ2V0X21hcmsocGNyZTJfbWF0Y2hfZGF0YSAqKTsgXAorUENSRTJfRVhQX0RFQ0wgdWludDMyX3QgICAgcGNyZTJfZ2V0X292ZWN0b3JfY291bnQocGNyZTJfbWF0Y2hfZGF0YSAqKTsgXAorUENSRTJfRVhQX0RFQ0wgUENSRTJfU0laRSAqcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcihwY3JlMl9tYXRjaF9kYXRhICopOyBcCitQQ1JFMl9FWFBfREVDTCBQQ1JFMl9TSVpFICBwY3JlMl9nZXRfc3RhcnRjaGFyKHBjcmUyX21hdGNoX2RhdGEgKik7CisKKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBtYXRjaGVkIHN1YnN0cmluZ3MuICovCisKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0ZVTkNUSU9OUyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1BUUiwgUENSRTJfVUNIQVIgKiwgUENSRTJfU0laRSAqKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsIFBDUkUyX1VDSEFSICosIFBDUkUyX1NJWkUgKik7IFwKK1BDUkUyX0VYUF9ERUNMIHZvaWQgICAgICBwY3JlMl9zdWJzdHJpbmdfZnJlZShQQ1JFMl9VQ0hBUiAqKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1BUUiwgUENSRTJfVUNIQVIgKiosIFBDUkUyX1NJWkUgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyKHBjcmUyX21hdGNoX2RhdGEgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsIFBDUkUyX1VDSEFSICoqLCBQQ1JFMl9TSVpFICopOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TUFRSLCBQQ1JFMl9TSVpFICopOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCBQQ1JFMl9TSVpFICopOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuKGNvbnN0IHBjcmUyX2NvZGUgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1BUUiwgUENSRTJfU1BUUiAqLCBQQ1JFMl9TUFRSICopOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQgICAgICAgcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUoXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGNyZTJfY29kZSAqLCBQQ1JFMl9TUFRSKTsgXAorUENSRTJfRVhQX0RFQ0wgdm9pZCAgICAgIHBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWUoUENSRTJfU1BUUiAqKTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX3N1YnN0cmluZ19saXN0X2dldChwY3JlMl9tYXRjaF9kYXRhICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1VDSEFSICoqKiwgUENSRTJfU0laRSAqKik7CisKKy8qIEZ1bmN0aW9ucyBmb3Igc2VyaWFsaXppbmcgLyBkZXNlcmlhbGl6aW5nIGNvbXBpbGVkIHBhdHRlcm5zLiAqLworCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9GVU5DVElPTlMgXAorUENSRTJfRVhQX0RFQ0wgaW50MzJfdCAgIHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGUoY29uc3QgcGNyZTJfY29kZSAqKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJfdCwgdWludDhfdCAqKiwgUENSRTJfU0laRSAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIGludDMyX3QgICBwY3JlMl9zZXJpYWxpemVfZGVjb2RlKHBjcmUyX2NvZGUgKiosIGludDMyX3QsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKiwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICopOyBcCitQQ1JFMl9FWFBfREVDTCBpbnQzMl90ICAgcGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXMoY29uc3QgdWludDhfdCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgdm9pZCAgICAgIHBjcmUyX3NlcmlhbGl6ZV9mcmVlKHVpbnQ4X3QgKik7CisKKworLyogQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIG1hdGNoICsgc3Vic3RpdHV0ZS4gKi8KKworI2RlZmluZSBQQ1JFMl9TVUJTVElUVVRFX0ZVTkNUSU9OIFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9zdWJzdGl0dXRlKGNvbnN0IHBjcmUyX2NvZGUgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1BUUiwgUENSRTJfU0laRSwgUENSRTJfU0laRSwgdWludDMyX3QsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjcmUyX21hdGNoX2RhdGEgKiwgcGNyZTJfbWF0Y2hfY29udGV4dCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TUFRSLCBQQ1JFMl9TSVpFLCBQQ1JFMl9VQ0hBUiAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TSVpFICopOworCisKKy8qIEZ1bmN0aW9ucyBmb3IgSklUIHByb2Nlc3NpbmcgKi8KKworI2RlZmluZSBQQ1JFMl9KSVRfRlVOQ1RJT05TIFwKK1BDUkUyX0VYUF9ERUNMIGludCAgICAgICBwY3JlMl9qaXRfY29tcGlsZShwY3JlMl9jb2RlICosIHVpbnQzMl90KTsgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX2ppdF9tYXRjaChjb25zdCBwY3JlMl9jb2RlICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NQVFIsIFBDUkUyX1NJWkUsIFBDUkUyX1NJWkUsIHVpbnQzMl90LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwY3JlMl9tYXRjaF9kYXRhICosIHBjcmUyX21hdGNoX2NvbnRleHQgKik7IFwKK1BDUkUyX0VYUF9ERUNMIHZvaWQgICAgICBwY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5KHBjcmUyX2dlbmVyYWxfY29udGV4dCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgXAorICBwY3JlMl9qaXRfc3RhY2sgICAgICAgKnBjcmUyX2ppdF9zdGFja19jcmVhdGUoUENSRTJfU0laRSwgUENSRTJfU0laRSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICopOyBcCitQQ1JFMl9FWFBfREVDTCB2b2lkICAgICAgcGNyZTJfaml0X3N0YWNrX2Fzc2lnbihwY3JlMl9tYXRjaF9jb250ZXh0ICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBjcmUyX2ppdF9jYWxsYmFjaywgdm9pZCAqKTsgXAorUENSRTJfRVhQX0RFQ0wgdm9pZCAgICAgIHBjcmUyX2ppdF9zdGFja19mcmVlKHBjcmUyX2ppdF9zdGFjayAqKTsKKworCisvKiBPdGhlciBtaXNjZWxsYW5lb3VzIGZ1bmN0aW9ucy4gKi8KKworI2RlZmluZSBQQ1JFMl9PVEhFUl9GVU5DVElPTlMgXAorUENSRTJfRVhQX0RFQ0wgaW50ICAgICAgIHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlKGludCwgUENSRTJfVUNIQVIgKiwgUENSRTJfU0laRSk7IFwKK1BDUkUyX0VYUF9ERUNMIFwKKyAgY29uc3QgdWludDhfdCAgICAgICAgICpwY3JlMl9tYWtldGFibGVzKHBjcmUyX2dlbmVyYWxfY29udGV4dCAqKTsgXAorCisKKy8qIERlZmluZSBtYWNyb3MgdGhhdCBnZW5lcmF0ZSB3aWR0aC1zcGVjaWZpYyBuYW1lcyBmcm9tIGdlbmVyaWMgdmVyc2lvbnMuIFRoZQordGhyZWUtbGV2ZWwgbWFjcm8gc2NoZW1lIGlzIG5lY2Vzc2FyeSB0byBnZXQgdGhlIG1hY3JvcyBleHBhbmRlZCB3aGVuIHdlIHdhbnQKK3RoZW0gdG8gYmUuIEZpcnN0IHdlIGdldCB0aGUgd2lkdGggZnJvbSBQQ1JFMl9MT0NBTF9XSURUSCwgd2hpY2ggaXMgdXNlZCBmb3IKK2dlbmVyYXRpbmcgdGhyZWUgdmVyc2lvbnMgb2YgZXZlcnl0aGluZyBiZWxvdy4gQWZ0ZXIgdGhhdCwgUENSRTJfU1VGRklYIHdpbGwgYmUKK3JlLWRlZmluZWQgdG8gdXNlIFBDUkUyX0NPREVfVU5JVF9XSURUSCwgZm9yIHVzZSB3aGVuIG1hY3JvcyBzdWNoIGFzCitwY3JlMl9jb21waWxlIGFyZSBjYWxsZWQgYnkgYXBwbGljYXRpb24gY29kZS4gKi8KKworI2RlZmluZSBQQ1JFMl9KT0lOKGEsYikgYSAjIyBiCisjZGVmaW5lIFBDUkUyX0dMVUUoYSxiKSBQQ1JFMl9KT0lOKGEsYikKKyNkZWZpbmUgUENSRTJfU1VGRklYKGEpIFBDUkUyX0dMVUUoYSxQQ1JFMl9MT0NBTF9XSURUSCkKKworCisvKiBEYXRhIHR5cGVzICovCisKKyNkZWZpbmUgUENSRTJfVUNIQVIgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChQQ1JFMl9VQ0hBUikKKyNkZWZpbmUgUENSRTJfU1BUUiAgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChQQ1JFMl9TUFRSKQorCisjZGVmaW5lIHBjcmUyX2NvZGUgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfY29kZV8pCisjZGVmaW5lIHBjcmUyX2ppdF9jYWxsYmFjayAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfaml0X2NhbGxiYWNrXykKKyNkZWZpbmUgcGNyZTJfaml0X3N0YWNrICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9qaXRfc3RhY2tfKQorCisjZGVmaW5lIHBjcmUyX3JlYWxfY29kZSAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfcmVhbF9jb2RlXykKKyNkZWZpbmUgcGNyZTJfcmVhbF9nZW5lcmFsX2NvbnRleHQgIFBDUkUyX1NVRkZJWChwY3JlMl9yZWFsX2dlbmVyYWxfY29udGV4dF8pCisjZGVmaW5lIHBjcmUyX3JlYWxfY29tcGlsZV9jb250ZXh0ICBQQ1JFMl9TVUZGSVgocGNyZTJfcmVhbF9jb21waWxlX2NvbnRleHRfKQorI2RlZmluZSBwY3JlMl9yZWFsX21hdGNoX2NvbnRleHQgICAgUENSRTJfU1VGRklYKHBjcmUyX3JlYWxfbWF0Y2hfY29udGV4dF8pCisjZGVmaW5lIHBjcmUyX3JlYWxfaml0X3N0YWNrICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfcmVhbF9qaXRfc3RhY2tfKQorI2RlZmluZSBwY3JlMl9yZWFsX21hdGNoX2RhdGEgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3JlYWxfbWF0Y2hfZGF0YV8pCisKKworLyogRGF0YSBibG9ja3MgKi8KKworI2RlZmluZSBwY3JlMl9jYWxsb3V0X2Jsb2NrICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NhbGxvdXRfYmxvY2tfKQorI2RlZmluZSBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9jayAgUENSRTJfU1VGRklYKHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrXykKKyNkZWZpbmUgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9nZW5lcmFsX2NvbnRleHRfKQorI2RlZmluZSBwY3JlMl9jb21waWxlX2NvbnRleHQgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NvbXBpbGVfY29udGV4dF8pCisjZGVmaW5lIHBjcmUyX21hdGNoX2NvbnRleHQgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfbWF0Y2hfY29udGV4dF8pCisjZGVmaW5lIHBjcmUyX21hdGNoX2RhdGEgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfbWF0Y2hfZGF0YV8pCisKKworLyogRnVuY3Rpb25zOiB0aGUgY29tcGxldGUgbGlzdCBpbiBhbHBoYWJldGljYWwgb3JkZXIgKi8KKworI2RlZmluZSBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZSAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV8pCisjZGVmaW5lIHBjcmUyX2NvZGVfZnJlZSAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NvZGVfZnJlZV8pCisjZGVmaW5lIHBjcmUyX2NvbXBpbGUgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NvbXBpbGVfKQorI2RlZmluZSBwY3JlMl9jb21waWxlX2NvbnRleHRfY29weSAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9jb21waWxlX2NvbnRleHRfY29weV8pCisjZGVmaW5lIHBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGUgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGVfKQorI2RlZmluZSBwY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZSAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZV8pCisjZGVmaW5lIHBjcmUyX2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2NvbmZpZ18pCisjZGVmaW5lIHBjcmUyX2RmYV9tYXRjaCAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2RmYV9tYXRjaF8pCisjZGVmaW5lIHBjcmUyX2dlbmVyYWxfY29udGV4dF9jb3B5ICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2dlbmVyYWxfY29udGV4dF9jb3B5XykKKyNkZWZpbmUgcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZSAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NyZWF0ZV8pCisjZGVmaW5lIHBjcmUyX2dlbmVyYWxfY29udGV4dF9mcmVlICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2dlbmVyYWxfY29udGV4dF9mcmVlXykKKyNkZWZpbmUgcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2VfKQorI2RlZmluZSBwY3JlMl9nZXRfbWFyayAgICAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9nZXRfbWFya18pCisjZGVmaW5lIHBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXJfKQorI2RlZmluZSBwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudCAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudF8pCisjZGVmaW5lIHBjcmUyX2dldF9zdGFydGNoYXIgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2dldF9zdGFydGNoYXJfKQorI2RlZmluZSBwY3JlMl9qaXRfY29tcGlsZSAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9qaXRfY29tcGlsZV8pCisjZGVmaW5lIHBjcmUyX2ppdF9tYXRjaCAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2ppdF9tYXRjaF8pCisjZGVmaW5lIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnkgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnlfKQorI2RlZmluZSBwY3JlMl9qaXRfc3RhY2tfYXNzaWduICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9qaXRfc3RhY2tfYXNzaWduXykKKyNkZWZpbmUgcGNyZTJfaml0X3N0YWNrX2NyZWF0ZSAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfaml0X3N0YWNrX2NyZWF0ZV8pCisjZGVmaW5lIHBjcmUyX2ppdF9zdGFja19mcmVlICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX2ppdF9zdGFja19mcmVlXykKKyNkZWZpbmUgcGNyZTJfbWFrZXRhYmxlcyAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfbWFrZXRhYmxlc18pCisjZGVmaW5lIHBjcmUyX21hdGNoICAgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX21hdGNoXykKKyNkZWZpbmUgcGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5ICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5XykKKyNkZWZpbmUgcGNyZTJfbWF0Y2hfY29udGV4dF9jcmVhdGUgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfbWF0Y2hfY29udGV4dF9jcmVhdGVfKQorI2RlZmluZSBwY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWUgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWVfKQorI2RlZmluZSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZSAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV8pCisjZGVmaW5lIHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybiAgUENSRTJfU1VGRklYKHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybl8pCisjZGVmaW5lIHBjcmUyX21hdGNoX2RhdGFfZnJlZSAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX21hdGNoX2RhdGFfZnJlZV8pCisjZGVmaW5lIHBjcmUyX3BhdHRlcm5faW5mbyAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3BhdHRlcm5faW5mb18pCisjZGVmaW5lIHBjcmUyX3NlcmlhbGl6ZV9kZWNvZGUgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3NlcmlhbGl6ZV9kZWNvZGVfKQorI2RlZmluZSBwY3JlMl9zZXJpYWxpemVfZW5jb2RlICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zZXJpYWxpemVfZW5jb2RlXykKKyNkZWZpbmUgcGNyZTJfc2VyaWFsaXplX2ZyZWUgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc2VyaWFsaXplX2ZyZWVfKQorI2RlZmluZSBwY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2RlcyAgIFBDUkUyX1NVRkZJWChwY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlc18pCisjZGVmaW5lIHBjcmUyX3NldF9ic3IgICAgICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3NldF9ic3JfKQorI2RlZmluZSBwY3JlMl9zZXRfY2FsbG91dCAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zZXRfY2FsbG91dF8pCisjZGVmaW5lIHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzXykKKyNkZWZpbmUgcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkXykKKyNkZWZpbmUgcGNyZTJfc2V0X21hdGNoX2xpbWl0ICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc2V0X21hdGNoX2xpbWl0XykKKyNkZWZpbmUgcGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aCAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aF8pCisjZGVmaW5lIHBjcmUyX3NldF9uZXdsaW5lICAgICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3NldF9uZXdsaW5lXykKKyNkZWZpbmUgcGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0ICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0XykKKyNkZWZpbmUgcGNyZTJfc2V0X29mZnNldF9saW1pdCAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc2V0X29mZnNldF9saW1pdF8pCisjZGVmaW5lIHBjcmUyX3NldF9yZWN1cnNpb25fbGltaXQgICAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3NldF9yZWN1cnNpb25fbGltaXRfKQorI2RlZmluZSBwY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50IFBDUkUyX1NVRkZJWChwY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50XykKKyNkZWZpbmUgcGNyZTJfc3Vic3RpdHV0ZSAgICAgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc3Vic3RpdHV0ZV8pCisjZGVmaW5lIHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZSAgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZV8pCisjZGVmaW5lIHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyXykKKyNkZWZpbmUgcGNyZTJfc3Vic3RyaW5nX2ZyZWUgICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc3Vic3RyaW5nX2ZyZWVfKQorI2RlZmluZSBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZSAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZV8pCisjZGVmaW5lIHBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXIgICAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXJfKQorI2RlZmluZSBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZSAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZV8pCisjZGVmaW5lIHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXJfKQorI2RlZmluZSBwY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXQgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXRfKQorI2RlZmluZSBwY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlXykKKyNkZWZpbmUgcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuICAgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuXykKKyNkZWZpbmUgcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUgICAgICBQQ1JFMl9TVUZGSVgocGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWVfKQorCisKKy8qIE5vdyBnZW5lcmF0ZSBhbGwgdGhyZWUgc2V0cyBvZiB3aWR0aC1zcGVjaWZpYyBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbgorcHJvdG90eXBlcy4gKi8KKworI2RlZmluZSBQQ1JFMl9UWVBFU19TVFJVQ1RVUkVTX0FORF9GVU5DVElPTlMgXAorUENSRTJfVFlQRVNfTElTVCBcCitQQ1JFMl9TVFJVQ1RVUkVfTElTVCBcCitQQ1JFMl9HRU5FUkFMX0lORk9fRlVOQ1RJT05TIFwKK1BDUkUyX0dFTkVSQUxfQ09OVEVYVF9GVU5DVElPTlMgXAorUENSRTJfQ09NUElMRV9DT05URVhUX0ZVTkNUSU9OUyBcCitQQ1JFMl9NQVRDSF9DT05URVhUX0ZVTkNUSU9OUyBcCitQQ1JFMl9DT01QSUxFX0ZVTkNUSU9OUyBcCitQQ1JFMl9QQVRURVJOX0lORk9fRlVOQ1RJT05TIFwKK1BDUkUyX01BVENIX0ZVTkNUSU9OUyBcCitQQ1JFMl9TVUJTVFJJTkdfRlVOQ1RJT05TIFwKK1BDUkUyX1NFUklBTElaRV9GVU5DVElPTlMgXAorUENSRTJfU1VCU1RJVFVURV9GVU5DVElPTiBcCitQQ1JFMl9KSVRfRlVOQ1RJT05TIFwKK1BDUkUyX09USEVSX0ZVTkNUSU9OUworCisjZGVmaW5lIFBDUkUyX0xPQ0FMX1dJRFRIIDgKK1BDUkUyX1RZUEVTX1NUUlVDVFVSRVNfQU5EX0ZVTkNUSU9OUworI3VuZGVmIFBDUkUyX0xPQ0FMX1dJRFRICisKKyNkZWZpbmUgUENSRTJfTE9DQUxfV0lEVEggMTYKK1BDUkUyX1RZUEVTX1NUUlVDVFVSRVNfQU5EX0ZVTkNUSU9OUworI3VuZGVmIFBDUkUyX0xPQ0FMX1dJRFRICisKKyNkZWZpbmUgUENSRTJfTE9DQUxfV0lEVEggMzIKK1BDUkUyX1RZUEVTX1NUUlVDVFVSRVNfQU5EX0ZVTkNUSU9OUworI3VuZGVmIFBDUkUyX0xPQ0FMX1dJRFRICisKKy8qIFVuZGVmaW5lIHRoZSBsaXN0IG1hY3JvczsgdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4gKi8KKworI3VuZGVmIFBDUkUyX1RZUEVTX0xJU1QKKyN1bmRlZiBQQ1JFMl9TVFJVQ1RVUkVfTElTVAorI3VuZGVmIFBDUkUyX0dFTkVSQUxfSU5GT19GVU5DVElPTlMKKyN1bmRlZiBQQ1JFMl9HRU5FUkFMX0NPTlRFWFRfRlVOQ1RJT05TCisjdW5kZWYgUENSRTJfQ09NUElMRV9DT05URVhUX0ZVTkNUSU9OUworI3VuZGVmIFBDUkUyX01BVENIX0NPTlRFWFRfRlVOQ1RJT05TCisjdW5kZWYgUENSRTJfQ09NUElMRV9GVU5DVElPTlMKKyN1bmRlZiBQQ1JFMl9QQVRURVJOX0lORk9fRlVOQ1RJT05TCisjdW5kZWYgUENSRTJfTUFUQ0hfRlVOQ1RJT05TCisjdW5kZWYgUENSRTJfU1VCU1RSSU5HX0ZVTkNUSU9OUworI3VuZGVmIFBDUkUyX1NFUklBTElaRV9GVU5DVElPTlMKKyN1bmRlZiBQQ1JFMl9TVUJTVElUVVRFX0ZVTkNUSU9OCisjdW5kZWYgUENSRTJfSklUX0ZVTkNUSU9OUworI3VuZGVmIFBDUkUyX09USEVSX0ZVTkNUSU9OUworI3VuZGVmIFBDUkUyX1RZUEVTX1NUUlVDVFVSRVNfQU5EX0ZVTkNUSU9OUworCisvKiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggbXVzdCBiZSBkZWZpbmVkLiBJZiBpdCBpcyA4LCAxNiwgb3IgMzIsIHJlZGVmaW5lCitQQ1JFMl9TVUZGSVggdG8gdXNlIGl0LiBJZiBpdCBpcyAwLCB1bmRlZmluZSB0aGUgb3RoZXIgbWFjcm9zIGFuZCBtYWtlCitQQ1JFMl9TVUZGSVggYSBuby1vcC4gT3RoZXJ3aXNlLCBnZW5lcmF0ZSBhbiBlcnJvci4gKi8KKworI3VuZGVmIFBDUkUyX1NVRkZJWAorI2lmbmRlZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEgKKyNlcnJvciBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggbXVzdCBiZSBkZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgcGNyZTIuaC4KKyNlcnJvciBVc2UgOCwgMTYsIG9yIDMyOyBvciAwIGZvciBhIG11bHRpLXdpZHRoIGFwcGxpY2F0aW9uLgorI2Vsc2UgIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCBpcyBkZWZpbmVkICovCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDggfHwgXAorICAgIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNiB8fCBcCisgICAgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCisjZGVmaW5lIFBDUkUyX1NVRkZJWChhKSBQQ1JFMl9HTFVFKGEsIFBDUkUyX0NPREVfVU5JVF9XSURUSCkKKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAwCisjdW5kZWYgUENSRTJfSk9JTgorI3VuZGVmIFBDUkUyX0dMVUUKKyNkZWZpbmUgUENSRTJfU1VGRklYKGEpIGEKKyNlbHNlCisjZXJyb3IgUENSRTJfQ09ERV9VTklUX1dJRFRIIG11c3QgYmUgMCwgOCwgMTYsIG9yIDMyLgorI2VuZGlmCisjZW5kaWYgIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCBpcyBkZWZpbmVkICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBFbmQgb2YgcGNyZTIuaCAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jIGIvZGlzdDIvc3JjL3BjcmUyX2F1dG9fcG9zc2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0ZDIzMzQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJfYXV0b19wb3NzZXNzLmMKQEAgLTAsMCArMSwxMjg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyB0aGF0IHNjYW4gYSBjb21waWxlZCBwYXR0ZXJuIGFuZCBjaGFuZ2UKK3JlcGVhdHMgaW50byBwb3NzZXNzaXZlIHJlcGVhdHMgd2hlcmUgcG9zc2libGUuICovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisKKyNpbmNsdWRlICJwY3JlMl9pbnRlcm5hbC5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICBUYWJsZXMgZm9yIGF1dG8tcG9zc2Vzc2lmaWNhdGlvbiAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYXV0by1wb3NzZXNzaWZpY2F0aW9uIGlzIHBvc3NpYmxlCitiZXR3ZWVuIGFkamFjZW50IGNoYXJhY3Rlci10eXBlIG9wY29kZXMuIFRoZSBsZWZ0LWhhbmQgKHJlcGVhdGVkKSBvcGNvZGUgaXMKK3VzZWQgdG8gc2VsZWN0IHRoZSByb3csIGFuZCB0aGUgcmlnaHQtaGFuZCBvcGNvZGUgaXMgdXNlIHRvIHNlbGVjdCB0aGUgY29sdW1uLgorQSB2YWx1ZSBvZiAxIG1lYW5zIHRoYXQgYXV0by1wb3NzZXNzaWZpY2F0aW9uIGlzIE9LLiBGb3IgZXhhbXBsZSwgdGhlIHNlY29uZAordmFsdWUgaW4gdGhlIGZpcnN0IHJvdyBtZWFucyB0aGF0IFxEK1xkIGNhbiBiZSB0dXJuZWQgaW50byBcRCsrXGQuCisKK1RoZSBVbmljb2RlIHByb3BlcnR5IHR5cGVzIChcUCBhbmQgXHApIGhhdmUgdG8gYmUgcHJlc2VudCB0byBmaWxsIG91dCB0aGUgdGFibGUKK2JlY2F1c2Ugb2Ygd2hhdCB0aGVpciBvcGNvZGUgdmFsdWVzIGFyZSwgYnV0IHRoZSB0YWJsZSB2YWx1ZXMgc2hvdWxkIGFsd2F5cyBiZQoremVybyBiZWNhdXNlIHByb3BlcnR5IHR5cGVzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgaW4gdGhlIGNvZGUuIFRoZSBsYXN0IGZvdXIKK2NvbHVtbnMgYXBwbHkgdG8gaXRlbXMgdGhhdCBjYW5ub3QgYmUgcmVwZWF0ZWQsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gaGF2ZQorcm93cyBmb3IgdGhlbS4gTm90ZSB0aGF0IE9QX0RJR0lUIGV0Yy4gYXJlIGdlbmVyYXRlZCBvbmx5IHdoZW4gUENSRV9VQ1AgaXMKKypub3QqIHNldC4gV2hlbiBpdCBpcyBzZXQsIFxkIGV0Yy4gYXJlIGNvbnZlcnRlZCBpbnRvIE9QXyhOT1RfKVBST1AgY29kZXMuICovCisKKyNkZWZpbmUgQVBUUk9XUyAoTEFTVF9BVVRPVEFCX0xFRlRfT1AgLSBGSVJTVF9BVVRPVEFCX09QICsgMSkKKyNkZWZpbmUgQVBUQ09MUyAoTEFTVF9BVVRPVEFCX1JJR0hUX09QIC0gRklSU1RfQVVUT1RBQl9PUCArIDEpCisKK3N0YXRpYyBjb25zdCB1aW50OF90IGF1dG9wb3NzdGFiW0FQVFJPV1NdW0FQVENPTFNdID0geworLyogXEQgXGQgXFMgXHMgXFcgXHcgIC4gLisgXEMgXFAgXHAgXFIgXEggXGggXFYgXHYgXFggXFogXHogICQgJE0gKi8KKyAgeyAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwIH0sICAvKiBcRCAqLworICB7IDEsIDAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDEgfSwgIC8qIFxkICovCisgIHsgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMSB9LCAgLyogXFMgKi8KKyAgeyAwLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwIH0sICAvKiBccyAqLworICB7IDAsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAgfSwgIC8qIFxXICovCisgIHsgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMSB9LCAgLyogXHcgKi8KKyAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwIH0sICAvKiAuICAqLworICB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAgfSwgIC8qIC4rICovCisgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCB9LCAgLyogXEMgKi8KKyAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sICAvKiBcUCAqLworICB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwgIC8qIFxwICovCisgIHsgMCwgMSwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCB9LCAgLyogXFIgKi8KKyAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAxLCAwLCAwIH0sICAvKiBcSCAqLworICB7IDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAgfSwgIC8qIFxoICovCisgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCB9LCAgLyogXFYgKi8KKyAgeyAwLCAxLCAxLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAwLCAwLCAwLCAxLCAwLCAwIH0sICAvKiBcdiAqLworICB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAgfSAgIC8qIFxYICovCit9OworCisvKiBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gY2hlY2sgd2hldGhlciBhdXRvLXBvc3Nlc3NpZmljYXRpb24gaXMgcG9zc2libGUKK2JldHdlZW4gYWRqYWNlbnQgVW5pY29kZSBwcm9wZXJ0eSBvcGNvZGVzIChPUF9QUk9QIGFuZCBPUF9OT1RQUk9QKS4gVGhlCitsZWZ0LWhhbmQgKHJlcGVhdGVkKSBvcGNvZGUgaXMgdXNlZCB0byBzZWxlY3QgdGhlIHJvdywgYW5kIHRoZSByaWdodC1oYW5kCitvcGNvZGUgaXMgdXNlZCB0byBzZWxlY3QgdGhlIGNvbHVtbi4gVGhlIHZhbHVlcyBhcmUgYXMgZm9sbG93czoKKworICAwICAgQWx3YXlzIHJldHVybiBGQUxTRSAobmV2ZXIgYXV0by1wb3NzZXNzaWZ5KQorICAxICAgQ2hhcmFjdGVyIGdyb3VwcyBhcmUgZGlzdGluY3QgKHBvc3Nlc3NpZnkgaWYgYm90aCBhcmUgT1BfUFJPUCkKKyAgMiAgIENoZWNrIGNoYXJhY3RlciBjYXRlZ29yaWVzIGluIHRoZSBzYW1lIGdyb3VwIChnZW5lcmFsIG9yIHBhcnRpY3VsYXIpCisgIDMgICBUUlVFIGlmIHRoZSB0d28gb3Bjb2RlcyBhcmUgbm90IHRoZSBzYW1lIChQUk9QIHZzIE5PVFBST1ApCisKKyAgNCAgIENoZWNrIGxlZnQgZ2VuZXJhbCBjYXRlZ29yeSB2cyByaWdodCBwYXJ0aWN1bGFyIGNhdGVnb3J5CisgIDUgICBDaGVjayByaWdodCBnZW5lcmFsIGNhdGVnb3J5IHZzIGxlZnQgcGFydGljdWxhciBjYXRlZ29yeQorCisgIDYgICBMZWZ0IGFscGhhbnVtIHZzIHJpZ2h0IGdlbmVyYWwgY2F0ZWdvcnkKKyAgNyAgIExlZnQgc3BhY2UgdnMgcmlnaHQgZ2VuZXJhbCBjYXRlZ29yeQorICA4ICAgTGVmdCB3b3JkIHZzIHJpZ2h0IGdlbmVyYWwgY2F0ZWdvcnkKKworICA5ICAgUmlnaHQgYWxwaGFudW0gdnMgbGVmdCBnZW5lcmFsIGNhdGVnb3J5CisgMTAgICBSaWdodCBzcGFjZSB2cyBsZWZ0IGdlbmVyYWwgY2F0ZWdvcnkKKyAxMSAgIFJpZ2h0IHdvcmQgdnMgbGVmdCBnZW5lcmFsIGNhdGVnb3J5CisKKyAxMiAgIExlZnQgYWxwaGFudW0gdnMgcmlnaHQgcGFydGljdWxhciBjYXRlZ29yeQorIDEzICAgTGVmdCBzcGFjZSB2cyByaWdodCBwYXJ0aWN1bGFyIGNhdGVnb3J5CisgMTQgICBMZWZ0IHdvcmQgdnMgcmlnaHQgcGFydGljdWxhciBjYXRlZ29yeQorCisgMTUgICBSaWdodCBhbHBoYW51bSB2cyBsZWZ0IHBhcnRpY3VsYXIgY2F0ZWdvcnkKKyAxNiAgIFJpZ2h0IHNwYWNlIHZzIGxlZnQgcGFydGljdWxhciBjYXRlZ29yeQorIDE3ICAgUmlnaHQgd29yZCB2cyBsZWZ0IHBhcnRpY3VsYXIgY2F0ZWdvcnkKKyovCisKK3N0YXRpYyBjb25zdCB1aW50OF90IHByb3Bwb3NzdGFiW1BUX1RBQlNJWkVdW1BUX1RBQlNJWkVdID0geworLyogQU5ZIExBTVAgR0MgIFBDICBTQyBBTE5VTSBTUEFDRSBQWFNQQUNFIFdPUkQgQ0xJU1QgVUNOQyAqLworICB7IDAsICAwLCAgMCwgIDAsICAwLCAgICAwLCAgICAwLCAgICAgIDAsICAgMCwgICAgMCwgICAwIH0sICAvKiBQVF9BTlkgKi8KKyAgeyAwLCAgMywgIDAsICAwLCAgMCwgICAgMywgICAgMSwgICAgICAxLCAgIDAsICAgIDAsICAgMCB9LCAgLyogUFRfTEFNUCAqLworICB7IDAsICAwLCAgMiwgIDQsICAwLCAgICA5LCAgIDEwLCAgICAgMTAsICAxMSwgICAgMCwgICAwIH0sICAvKiBQVF9HQyAqLworICB7IDAsICAwLCAgNSwgIDIsICAwLCAgIDE1LCAgIDE2LCAgICAgMTYsICAxNywgICAgMCwgICAwIH0sICAvKiBQVF9QQyAqLworICB7IDAsICAwLCAgMCwgIDAsICAyLCAgICAwLCAgICAwLCAgICAgIDAsICAgMCwgICAgMCwgICAwIH0sICAvKiBQVF9TQyAqLworICB7IDAsICAzLCAgNiwgMTIsICAwLCAgICAzLCAgICAxLCAgICAgIDEsICAgMCwgICAgMCwgICAwIH0sICAvKiBQVF9BTE5VTSAqLworICB7IDAsICAxLCAgNywgMTMsICAwLCAgICAxLCAgICAzLCAgICAgIDMsICAgMSwgICAgMCwgICAwIH0sICAvKiBQVF9TUEFDRSAqLworICB7IDAsICAxLCAgNywgMTMsICAwLCAgICAxLCAgICAzLCAgICAgIDMsICAgMSwgICAgMCwgICAwIH0sICAvKiBQVF9QWFNQQUNFICovCisgIHsgMCwgIDAsICA4LCAxNCwgIDAsICAgIDAsICAgIDEsICAgICAgMSwgICAzLCAgICAwLCAgIDAgfSwgIC8qIFBUX1dPUkQgKi8KKyAgeyAwLCAgMCwgIDAsICAwLCAgMCwgICAgMCwgICAgMCwgICAgICAwLCAgIDAsICAgIDAsICAgMCB9LCAgLyogUFRfQ0xJU1QgKi8KKyAgeyAwLCAgMCwgIDAsICAwLCAgMCwgICAgMCwgICAgMCwgICAgICAwLCAgIDAsICAgIDAsICAgMyB9ICAgLyogUFRfVUNOQyAqLworfTsKKworLyogVGhpcyB0YWJsZSBpcyB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgYXV0by1wb3NzZXNzaWZpY2F0aW9uIGlzIHBvc3NpYmxlCitiZXR3ZWVuIGFkamFjZW50IFVuaWNvZGUgcHJvcGVydHkgb3Bjb2RlcyAoT1BfUFJPUCBhbmQgT1BfTk9UUFJPUCkgd2hlbiBvbmUKK3NwZWNpZmllcyBhIGdlbmVyYWwgY2F0ZWdvcnkgYW5kIHRoZSBvdGhlciBzcGVjaWZpZXMgYSBwYXJ0aWN1bGFyIGNhdGVnb3J5LiBUaGUKK3JvdyBpcyBzZWxlY3RlZCBieSB0aGUgZ2VuZXJhbCBjYXRlZ29yeSBhbmQgdGhlIGNvbHVtbiBieSB0aGUgcGFydGljdWxhcgorY2F0ZWdvcnkuIFRoZSB2YWx1ZSBpcyAxIGlmIHRoZSBwYXJ0aWN1bGFyIGNhdGVnb3J5IGlzIG5vdCBwYXJ0IG9mIHRoZSBnZW5lcmFsCitjYXRlZ29yeS4gKi8KKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgY2F0cG9zc3RhYls3XVszMF0gPSB7CisvKiBDYyBDZiBDbiBDbyBDcyBMbCBMbSBMbyBMdCBMdSBNYyBNZSBNbiBOZCBObCBObyBQYyBQZCBQZSBQZiBQaSBQbyBQcyBTYyBTayBTbSBTbyBabCBacCBacyAqLworICB7IDAsIDAsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfSwgIC8qIEMgKi8KKyAgeyAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxIH0sICAvKiBMICovCisgIHsgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSB9LCAgLyogTSAqLworICB7IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEgfSwgIC8qIE4gKi8KKyAgeyAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAxLCAxLCAxLCAxLCAxLCAxIH0sICAvKiBQICovCisgIHsgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgMSB9LCAgLyogUyAqLworICB7IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAgfSAgIC8qIFogKi8KK307CisKKy8qIFRoaXMgdGFibGUgaXMgdXNlZCB3aGVuIGNoZWNraW5nIEFMTlVNLCAoUFgpU1BBQ0UsIFNQQUNFLCBhbmQgV09SRCBhZ2FpbnN0CithIGdlbmVyYWwgb3IgcGFydGljdWxhciBjYXRlZ29yeS4gVGhlIHByb3BlcnRpZXMgaW4gZWFjaCByb3cgYXJlIHRob3NlCit0aGF0IGFwcGx5IHRvIHRoZSBjaGFyYWN0ZXIgc2V0IGluIHF1ZXN0aW9uLiBEdXBsaWNhdGlvbiBtZWFucyB0aGF0IGEgbGl0dGxlCit1bm5lY2Vzc2FyeSB3b3JrIGlzIGRvbmUgd2hlbiBjaGVja2luZywgYnV0IHRoaXMga2VlcHMgdGhpbmdzIG11Y2ggc2ltcGxlcgorYmVjYXVzZSB0aGV5IGNhbiBhbGwgdXNlIHRoZSBzYW1lIGNvZGUuIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBjb21tZW50IHdoZXJlCit0aGlzIHRhYmxlIGlzIHVzZWQuCisKK05vdGU6IFNQQUNFIGFuZCBQWFNQQUNFIHVzZWQgdG8gYmUgZGlmZmVyZW50IGJlY2F1c2UgUGVybCBleGNsdWRlZCBWVCBmcm9tCisic3BhY2UiLCBidXQgZnJvbSBQZXJsIDUuMTggaXQncyBpbmNsdWRlZCwgc28gYm90aCBjYXRlZ29yaWVzIGFyZSB0cmVhdGVkIHRoZQorc2FtZSBoZXJlLiAqLworCitzdGF0aWMgY29uc3QgdWludDhfdCBwb3NzcHJvcHN0YWJbM11bNF0gPSB7CisgIHsgdWNwX0wsIHVjcF9OLCB1Y3BfTiwgdWNwX05sIH0sICAvKiBBTE5VTSwgM3JkIGFuZCA0dGggdmFsdWVzIHJlZHVuZGFudCAqLworICB7IHVjcF9aLCB1Y3BfWiwgdWNwX0MsIHVjcF9DYyB9LCAgLyogU1BBQ0UgYW5kIFBYU1BBQ0UsIDJuZCB2YWx1ZSByZWR1bmRhbnQgKi8KKyAgeyB1Y3BfTCwgdWNwX04sIHVjcF9QLCB1Y3BfUG8gfSAgIC8qIFdPUkQgKi8KK307CisKKworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgQ2hlY2sgYSBjaGFyYWN0ZXIgYW5kIGEgcHJvcGVydHkgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGNvbXBhcmVfb3Bjb2RlcygpIHdoZW4gYSBwcm9wZXJ0eSBpdGVtIGlzCithZGphY2VudCB0byBhIGZpeGVkIGNoYXJhY3Rlci4KKworQXJndW1lbnRzOgorICBjICAgICAgICAgICAgdGhlIGNoYXJhY3RlcgorICBwdHlwZSAgICAgICAgdGhlIHByb3BlcnR5IHR5cGUKKyAgcGRhdGEgICAgICAgIHRoZSBkYXRhIGZvciB0aGUgdHlwZQorICBuZWdhdGVkICAgICAgVFJVRSBpZiBpdCdzIGEgbmVnYXRlZCBwcm9wZXJ0eSAoXFAgb3IgXHB7XikKKworUmV0dXJuczogICAgICAgVFJVRSBpZiBhdXRvLXBvc3Nlc3NpZnlpbmcgaXMgT0sKKyovCisKK3N0YXRpYyBCT09MCitjaGVja19jaGFyX3Byb3AodWludDMyX3QgYywgdW5zaWduZWQgaW50IHB0eXBlLCB1bnNpZ25lZCBpbnQgcGRhdGEsCisgIEJPT0wgbmVnYXRlZCkKK3sKK2NvbnN0IHVpbnQzMl90ICpwOworY29uc3QgdWNkX3JlY29yZCAqcHJvcCA9IEdFVF9VQ0QoYyk7CisKK3N3aXRjaChwdHlwZSkKKyAgeworICBjYXNlIFBUX0xBTVA6CisgIHJldHVybiAocHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0x1IHx8CisgICAgICAgICAgcHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0xsIHx8CisgICAgICAgICAgcHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0x0KSA9PSBuZWdhdGVkOworCisgIGNhc2UgUFRfR0M6CisgIHJldHVybiAocGRhdGEgPT0gUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdKSA9PSBuZWdhdGVkOworCisgIGNhc2UgUFRfUEM6CisgIHJldHVybiAocGRhdGEgPT0gcHJvcC0+Y2hhcnR5cGUpID09IG5lZ2F0ZWQ7CisKKyAgY2FzZSBQVF9TQzoKKyAgcmV0dXJuIChwZGF0YSA9PSBwcm9wLT5zY3JpcHQpID09IG5lZ2F0ZWQ7CisKKyAgLyogVGhlc2UgYXJlIHNwZWNpYWxzICovCisKKyAgY2FzZSBQVF9BTE5VTToKKyAgcmV0dXJuIChQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX0wgfHwKKyAgICAgICAgICBQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX04pID09IG5lZ2F0ZWQ7CisKKyAgLyogUGVybCBzcGFjZSB1c2VkIHRvIGV4Y2x1ZGUgVlQsIGJ1dCBmcm9tIFBlcmwgNS4xOCBpdCBpcyBpbmNsdWRlZCwgd2hpY2gKKyAgbWVhbnMgdGhhdCBQZXJsIHNwYWNlIGFuZCBQT1NJWCBzcGFjZSBhcmUgbm93IGlkZW50aWNhbC4gUENSRSB3YXMgY2hhbmdlZAorICBhdCByZWxlYXNlIDguMzQuICovCisKKyAgY2FzZSBQVF9TUEFDRTogICAgLyogUGVybCBzcGFjZSAqLworICBjYXNlIFBUX1BYU1BBQ0U6ICAvKiBQT1NJWCBzcGFjZSAqLworICBzd2l0Y2goYykKKyAgICB7CisgICAgSFNQQUNFX0NBU0VTOgorICAgIFZTUEFDRV9DQVNFUzoKKyAgICByZXR1cm4gbmVnYXRlZDsKKworICAgIGRlZmF1bHQ6CisgICAgcmV0dXJuIChQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX1opID09IG5lZ2F0ZWQ7CisgICAgfQorICBicmVhazsgIC8qIENvbnRyb2wgbmV2ZXIgcmVhY2hlcyBoZXJlICovCisKKyAgY2FzZSBQVF9XT1JEOgorICByZXR1cm4gKFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSB1Y3BfTCB8fAorICAgICAgICAgIFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSB1Y3BfTiB8fAorICAgICAgICAgIGMgPT0gQ0hBUl9VTkRFUlNDT1JFKSA9PSBuZWdhdGVkOworCisgIGNhc2UgUFRfQ0xJU1Q6CisgIHAgPSBQUklWKHVjZF9jYXNlbGVzc19zZXRzKSArIHByb3AtPmNhc2VzZXQ7CisgIGZvciAoOzspCisgICAgeworICAgIGlmIChjIDwgKnApIHJldHVybiAhbmVnYXRlZDsKKyAgICBpZiAoYyA9PSAqcCsrKSByZXR1cm4gbmVnYXRlZDsKKyAgICB9CisgIGJyZWFrOyAgLyogQ29udHJvbCBuZXZlciByZWFjaGVzIGhlcmUgKi8KKyAgfQorCityZXR1cm4gRkFMU0U7Cit9CisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgIEJhc2Ugb3Bjb2RlIG9mIHJlcGVhdGVkIG9wY29kZXMgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBSZXR1cm5zIHRoZSBiYXNlIG9wY29kZSBmb3IgcmVwZWF0ZWQgc2luZ2xlIGNoYXJhY3RlciB0eXBlIG9wY29kZXMuIElmIHRoZQorb3Bjb2RlIGlzIG5vdCBhIHJlcGVhdGVkIGNoYXJhY3RlciB0eXBlLCBpdCByZXR1cm5zIHdpdGggdGhlIG9yaWdpbmFsIHZhbHVlLgorCitBcmd1bWVudHM6ICBjIG9wY29kZQorUmV0dXJuczogICAgYmFzZSBvcGNvZGUgZm9yIHRoZSB0eXBlCisqLworCitzdGF0aWMgUENSRTJfVUNIQVIKK2dldF9yZXBlYXRfYmFzZShQQ1JFMl9VQ0hBUiBjKQoreworcmV0dXJuIChjID4gT1BfVFlQRVBPU1VQVE8pPyBjIDoKKyAgICAgICAoYyA+PSBPUF9UWVBFU1RBUik/ICAgT1BfVFlQRVNUQVIgOgorICAgICAgIChjID49IE9QX05PVFNUQVJJKT8gICBPUF9OT1RTVEFSSSA6CisgICAgICAgKGMgPj0gT1BfTk9UU1RBUik/ICAgIE9QX05PVFNUQVIgOgorICAgICAgIChjID49IE9QX1NUQVJJKT8gICAgICBPUF9TVEFSSSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QX1NUQVI7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgIEZpbGwgdGhlIGNoYXJhY3RlciBwcm9wZXJ0eSBsaXN0ICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDaGVja3Mgd2hldGhlciB0aGUgY29kZSBwb2ludHMgdG8gYW4gb3Bjb2RlIHRoYXQgY2FuIHRha2UgcGFydCBpbiBhdXRvLQorcG9zc2Vzc2lmaWNhdGlvbiwgYW5kIGlmIHNvLCBmaWxscyBhIGxpc3Qgd2l0aCBpdHMgcHJvcGVydGllcy4KKworQXJndW1lbnRzOgorICBjb2RlICAgICAgICBwb2ludHMgdG8gc3RhcnQgb2YgZXhwcmVzc2lvbgorICB1dGYgICAgICAgICBUUlVFIGlmIGluIFVURiBtb2RlCisgIGZjYyAgICAgICAgIHBvaW50cyB0byB0aGUgY2FzZS1mbGlwcGluZyB0YWJsZQorICBsaXN0ICAgICAgICBwb2ludHMgdG8gb3V0cHV0IGxpc3QKKyAgICAgICAgICAgICAgbGlzdFswXSB3aWxsIGJlIGZpbGxlZCB3aXRoIHRoZSBvcGNvZGUKKyAgICAgICAgICAgICAgbGlzdFsxXSB3aWxsIGJlIG5vbi16ZXJvIGlmIHRoaXMgb3Bjb2RlCisgICAgICAgICAgICAgICAgY2FuIG1hdGNoIGFuIGVtcHR5IGNoYXJhY3RlciBzdHJpbmcKKyAgICAgICAgICAgICAgbGlzdFsyLi43XSBkZXBlbmRzIG9uIHRoZSBvcGNvZGUKKworUmV0dXJuczogICAgICBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IG9wY29kZSBpZiAqY29kZSBpcyBhY2NlcHRlZAorICAgICAgICAgICAgICBOVUxMIGlmICpjb2RlIGlzIG5vdCBhY2NlcHRlZAorKi8KKworc3RhdGljIFBDUkUyX1NQVFIKK2dldF9jaHJfcHJvcGVydHlfbGlzdChQQ1JFMl9TUFRSIGNvZGUsIEJPT0wgdXRmLCBjb25zdCB1aW50OF90ICpmY2MsCisgIHVpbnQzMl90ICpsaXN0KQoreworUENSRTJfVUNIQVIgYyA9ICpjb2RlOworUENSRTJfVUNIQVIgYmFzZTsKK1BDUkUyX1NQVFIgZW5kOwordWludDMyX3QgY2hyOworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCit1aW50MzJfdCAqY2xpc3RfZGVzdDsKK2NvbnN0IHVpbnQzMl90ICpjbGlzdF9zcmM7CisjZWxzZQorKHZvaWQpdXRmOyAgICAvKiBTdXBwcmVzcyAidW51c2VkIHBhcmFtZXRlciIgY29tcGlsZXIgd2FybmluZyAqLworI2VuZGlmCisKK2xpc3RbMF0gPSBjOworbGlzdFsxXSA9IEZBTFNFOworY29kZSsrOworCitpZiAoYyA+PSBPUF9TVEFSICYmIGMgPD0gT1BfVFlQRVBPU1VQVE8pCisgIHsKKyAgYmFzZSA9IGdldF9yZXBlYXRfYmFzZShjKTsKKyAgYyAtPSAoYmFzZSAtIE9QX1NUQVIpOworCisgIGlmIChjID09IE9QX1VQVE8gfHwgYyA9PSBPUF9NSU5VUFRPIHx8IGMgPT0gT1BfRVhBQ1QgfHwgYyA9PSBPUF9QT1NVUFRPKQorICAgIGNvZGUgKz0gSU1NMl9TSVpFOworCisgIGxpc3RbMV0gPSAoYyAhPSBPUF9QTFVTICYmIGMgIT0gT1BfTUlOUExVUyAmJiBjICE9IE9QX0VYQUNUICYmCisgICAgICAgICAgICAgYyAhPSBPUF9QT1NQTFVTKTsKKworICBzd2l0Y2goYmFzZSkKKyAgICB7CisgICAgY2FzZSBPUF9TVEFSOgorICAgIGxpc3RbMF0gPSBPUF9DSEFSOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9TVEFSSToKKyAgICBsaXN0WzBdID0gT1BfQ0hBUkk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX05PVFNUQVI6CisgICAgbGlzdFswXSA9IE9QX05PVDsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfTk9UU1RBUkk6CisgICAgbGlzdFswXSA9IE9QX05PVEk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1RZUEVTVEFSOgorICAgIGxpc3RbMF0gPSAqY29kZTsKKyAgICBjb2RlKys7CisgICAgYnJlYWs7CisgICAgfQorICBjID0gbGlzdFswXTsKKyAgfQorCitzd2l0Y2goYykKKyAgeworICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgY2FzZSBPUF9ESUdJVDoKKyAgY2FzZSBPUF9OT1RfV0hJVEVTUEFDRToKKyAgY2FzZSBPUF9XSElURVNQQUNFOgorICBjYXNlIE9QX05PVF9XT1JEQ0hBUjoKKyAgY2FzZSBPUF9XT1JEQ0hBUjoKKyAgY2FzZSBPUF9BTlk6CisgIGNhc2UgT1BfQUxMQU5ZOgorICBjYXNlIE9QX0FOWU5MOgorICBjYXNlIE9QX05PVF9IU1BBQ0U6CisgIGNhc2UgT1BfSFNQQUNFOgorICBjYXNlIE9QX05PVF9WU1BBQ0U6CisgIGNhc2UgT1BfVlNQQUNFOgorICBjYXNlIE9QX0VYVFVOSToKKyAgY2FzZSBPUF9FT0ROOgorICBjYXNlIE9QX0VPRDoKKyAgY2FzZSBPUF9ET0xMOgorICBjYXNlIE9QX0RPTExNOgorICByZXR1cm4gY29kZTsKKworICBjYXNlIE9QX0NIQVI6CisgIGNhc2UgT1BfTk9UOgorICBHRVRDSEFSSU5DVEVTVChjaHIsIGNvZGUpOworICBsaXN0WzJdID0gY2hyOworICBsaXN0WzNdID0gTk9UQUNIQVI7CisgIHJldHVybiBjb2RlOworCisgIGNhc2UgT1BfQ0hBUkk6CisgIGNhc2UgT1BfTk9USToKKyAgbGlzdFswXSA9IChjID09IE9QX0NIQVJJKSA/IE9QX0NIQVIgOiBPUF9OT1Q7CisgIEdFVENIQVJJTkNURVNUKGNociwgY29kZSk7CisgIGxpc3RbMl0gPSBjaHI7CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgaWYgKGNociA8IDEyOCB8fCAoY2hyIDwgMjU2ICYmICF1dGYpKQorICAgIGxpc3RbM10gPSBmY2NbY2hyXTsKKyAgZWxzZQorICAgIGxpc3RbM10gPSBVQ0RfT1RIRVJDQVNFKGNocik7CisjZWxpZiBkZWZpbmVkIFNVUFBPUlRfV0lERV9DSEFSUworICBsaXN0WzNdID0gKGNociA8IDI1NikgPyBmY2NbY2hyXSA6IGNocjsKKyNlbHNlCisgIGxpc3RbM10gPSBmY2NbY2hyXTsKKyNlbmRpZgorCisgIC8qIFRoZSBvdGhlcmNhc2UgbWlnaHQgYmUgdGhlIHNhbWUgdmFsdWUuICovCisKKyAgaWYgKGNociA9PSBsaXN0WzNdKQorICAgIGxpc3RbM10gPSBOT1RBQ0hBUjsKKyAgZWxzZQorICAgIGxpc3RbNF0gPSBOT1RBQ0hBUjsKKyAgcmV0dXJuIGNvZGU7CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgY2FzZSBPUF9QUk9QOgorICBjYXNlIE9QX05PVFBST1A6CisgIGlmIChjb2RlWzBdICE9IFBUX0NMSVNUKQorICAgIHsKKyAgICBsaXN0WzJdID0gY29kZVswXTsKKyAgICBsaXN0WzNdID0gY29kZVsxXTsKKyAgICByZXR1cm4gY29kZSArIDI7CisgICAgfQorCisgIC8qIENvbnZlcnQgb25seSBpZiB3ZSBoYXZlIGVub3VnaCBzcGFjZS4gKi8KKworICBjbGlzdF9zcmMgPSBQUklWKHVjZF9jYXNlbGVzc19zZXRzKSArIGNvZGVbMV07CisgIGNsaXN0X2Rlc3QgPSBsaXN0ICsgMjsKKyAgY29kZSArPSAyOworCisgIGRvIHsKKyAgICAgaWYgKGNsaXN0X2Rlc3QgPj0gbGlzdCArIDgpCisgICAgICAgeworICAgICAgIC8qIEVhcmx5IHJldHVybiBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlLiBUaGlzIHNob3VsZCBuZXZlcgorICAgICAgIGhhcHBlbiwgc2luY2UgYWxsIGNsaXN0cyBhcmUgc2hvcnRlciB0aGFuIDUgY2hhcmFjdGVyIG5vdy4gKi8KKyAgICAgICBsaXN0WzJdID0gY29kZVswXTsKKyAgICAgICBsaXN0WzNdID0gY29kZVsxXTsKKyAgICAgICByZXR1cm4gY29kZTsKKyAgICAgICB9CisgICAgICpjbGlzdF9kZXN0KysgPSAqY2xpc3Rfc3JjOworICAgICB9CisgIHdoaWxlKCpjbGlzdF9zcmMrKyAhPSBOT1RBQ0hBUik7CisKKyAgLyogQWxsIGNoYXJhY3RlcnMgYXJlIHN0b3JlZC4gVGhlIHRlcm1pbmF0aW5nIE5PVEFDSEFSIGlzIGNvcGllZCBmcm9tIHRoZQorICBjbGlzdCBpdHNlbGYuICovCisKKyAgbGlzdFswXSA9IChjID09IE9QX1BST1ApID8gT1BfQ0hBUiA6IE9QX05PVDsKKyAgcmV0dXJuIGNvZGU7CisjZW5kaWYKKworICBjYXNlIE9QX05DTEFTUzoKKyAgY2FzZSBPUF9DTEFTUzoKKyNpZmRlZiBTVVBQT1JUX1dJREVfQ0hBUlMKKyAgY2FzZSBPUF9YQ0xBU1M6CisgIGlmIChjID09IE9QX1hDTEFTUykKKyAgICBlbmQgPSBjb2RlICsgR0VUKGNvZGUsIDApIC0gMTsKKyAgZWxzZQorI2VuZGlmCisgICAgZW5kID0gY29kZSArIDMyIC8gc2l6ZW9mKFBDUkUyX1VDSEFSKTsKKworICBzd2l0Y2goKmVuZCkKKyAgICB7CisgICAgY2FzZSBPUF9DUlNUQVI6CisgICAgY2FzZSBPUF9DUk1JTlNUQVI6CisgICAgY2FzZSBPUF9DUlFVRVJZOgorICAgIGNhc2UgT1BfQ1JNSU5RVUVSWToKKyAgICBjYXNlIE9QX0NSUE9TU1RBUjoKKyAgICBjYXNlIE9QX0NSUE9TUVVFUlk6CisgICAgbGlzdFsxXSA9IFRSVUU7CisgICAgZW5kKys7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NSUExVUzoKKyAgICBjYXNlIE9QX0NSTUlOUExVUzoKKyAgICBjYXNlIE9QX0NSUE9TUExVUzoKKyAgICBlbmQrKzsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQ1JSQU5HRToKKyAgICBjYXNlIE9QX0NSTUlOUkFOR0U6CisgICAgY2FzZSBPUF9DUlBPU1JBTkdFOgorICAgIGxpc3RbMV0gPSAoR0VUMihlbmQsIDEpID09IDApOworICAgIGVuZCArPSAxICsgMiAqIElNTTJfU0laRTsKKyAgICBicmVhazsKKyAgICB9CisgIGxpc3RbMl0gPSAodWludDMyX3QpKGVuZCAtIGNvZGUpOworICByZXR1cm4gZW5kOworICB9CityZXR1cm4gTlVMTDsgICAgLyogT3Bjb2RlIG5vdCBhY2NlcHRlZCAqLworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgU2NhbiBmdXJ0aGVyIGNoYXJhY3RlciBzZXRzIGZvciBtYXRjaCAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDaGVja3Mgd2hldGhlciB0aGUgYmFzZSBhbmQgdGhlIGN1cnJlbnQgb3Bjb2RlIGhhdmUgYSBjb21tb24gY2hhcmFjdGVyLCBpbgord2hpY2ggY2FzZSB0aGUgYmFzZSBjYW5ub3QgYmUgcG9zc2Vzc2lmaWVkLgorCitBcmd1bWVudHM6CisgIGNvZGUgICAgICAgIHBvaW50cyB0byB0aGUgYnl0ZSBjb2RlCisgIHV0ZiAgICAgICAgIFRSVUUgaW4gVVRGIG1vZGUKKyAgY2IgICAgICAgICAgY29tcGlsZSBkYXRhIGJsb2NrCisgIGJhc2VfbGlzdCAgIHRoZSBkYXRhIGxpc3Qgb2YgdGhlIGJhc2Ugb3Bjb2RlCisgIGJhc2VfZW5kICAgIHRoZSBlbmQgb2YgdGhlIGRhdGEgbGlzdAorICByZWNfbGltaXQgICBwb2ludHMgdG8gcmVjdXJzaW9uIGRlcHRoIGNvdW50ZXIKKworUmV0dXJuczogICAgICBUUlVFIGlmIHRoZSBhdXRvLXBvc3Nlc3NpZmljYXRpb24gaXMgcG9zc2libGUKKyovCisKK3N0YXRpYyBCT09MCitjb21wYXJlX29wY29kZXMoUENSRTJfU1BUUiBjb2RlLCBCT09MIHV0ZiwgY29uc3QgY29tcGlsZV9ibG9jayAqY2IsCisgIGNvbnN0IHVpbnQzMl90ICpiYXNlX2xpc3QsIFBDUkUyX1NQVFIgYmFzZV9lbmQsIGludCAqcmVjX2xpbWl0KQoreworUENSRTJfVUNIQVIgYzsKK3VpbnQzMl90IGxpc3RbOF07Citjb25zdCB1aW50MzJfdCAqY2hyX3B0cjsKK2NvbnN0IHVpbnQzMl90ICpvY2hyX3B0cjsKK2NvbnN0IHVpbnQzMl90ICpsaXN0X3B0cjsKK1BDUkUyX1NQVFIgbmV4dF9jb2RlOworI2lmZGVmIFNVUFBPUlRfV0lERV9DSEFSUworUENSRTJfU1BUUiB4Y2xhc3NfZmxhZ3M7CisjZW5kaWYKK2NvbnN0IHVpbnQ4X3QgKmNsYXNzX2JpdHNldDsKK2NvbnN0IHVpbnQ4X3QgKnNldDEsICpzZXQyLCAqc2V0X2VuZDsKK3VpbnQzMl90IGNocjsKK0JPT0wgYWNjZXB0ZWQsIGludmVydF9iaXRzOworQk9PTCBlbnRlcmVkX2FfZ3JvdXAgPSBGQUxTRTsKKworaWYgKC0tKCpyZWNfbGltaXQpIDw9IDApIHJldHVybiBGQUxTRTsgIC8qIFJlY3Vyc2lvbiBoYXMgZ29uZSB0b28gZGVlcCAqLworCisvKiBOb3RlOiB0aGUgYmFzZV9saXN0WzFdIGNvbnRhaW5zIHdoZXRoZXIgdGhlIGN1cnJlbnQgb3Bjb2RlIGhhcyBhIGdyZWVkeQorKHJlcHJlc2VudGVkIGJ5IGEgbm9uLXplcm8gdmFsdWUpIHF1YW50aWZpZXIuIFRoaXMgaXMgYSBkaWZmZXJlbnQgZnJvbQorb3RoZXIgY2hhcmFjdGVyIHR5cGUgbGlzdHMsIHdoaWNoIHN0b3JlIGhlcmUgdGhhdCB0aGUgY2hhcmFjdGVyIGl0ZXJhdG9yCittYXRjaGVzIHRvIGFuIGVtcHR5IHN0cmluZyAoYWxzbyByZXByZXNlbnRlZCBieSBhIG5vbi16ZXJvIHZhbHVlKS4gKi8KKworZm9yKDs7KQorICB7CisgIC8qIEFsbCBvcGVyYXRpb25zIG1vdmUgdGhlIGNvZGUgcG9pbnRlciBmb3J3YXJkLgorICBUaGVyZWZvcmUgaW5maW5pdGUgcmVjdXJzaW9ucyBhcmUgbm90IHBvc3NpYmxlLiAqLworCisgIGMgPSAqY29kZTsKKworICAvKiBTa2lwIG92ZXIgY2FsbG91dHMgKi8KKworICBpZiAoYyA9PSBPUF9DQUxMT1VUKQorICAgIHsKKyAgICBjb2RlICs9IFBSSVYoT1BfbGVuZ3RocylbY107CisgICAgY29udGludWU7CisgICAgfQorCisgIGlmIChjID09IE9QX0NBTExPVVRfU1RSKQorICAgIHsKKyAgICBjb2RlICs9IEdFVChjb2RlLCAxICsgMipMSU5LX1NJWkUpOworICAgIGNvbnRpbnVlOworICAgIH0KKworICBpZiAoYyA9PSBPUF9BTFQpCisgICAgeworICAgIGRvIGNvZGUgKz0gR0VUKGNvZGUsIDEpOyB3aGlsZSAoKmNvZGUgPT0gT1BfQUxUKTsKKyAgICBjID0gKmNvZGU7CisgICAgfQorCisgIHN3aXRjaChjKQorICAgIHsKKyAgICBjYXNlIE9QX0VORDoKKyAgICBjYXNlIE9QX0tFVFJQT1M6CisgICAgLyogVFJVRSBvbmx5IGluIGdyZWVkeSBjYXNlLiBUaGUgbm9uLWdyZWVkeSBjYXNlIGNvdWxkIGJlIHJlcGxhY2VkIGJ5CisgICAgYW4gT1BfRVhBQ1QsIGJ1dCBpdCBpcyBwcm9iYWJseSBub3Qgd29ydGggaXQuIChBbmQgbm90ZSB0aGF0IE9QX0VYQUNUCisgICAgdXNlcyBtb3JlIG1lbW9yeSwgd2hpY2ggd2UgY2Fubm90IGdldCBhdCB0aGlzIHN0YWdlLikgKi8KKworICAgIHJldHVybiBiYXNlX2xpc3RbMV0gIT0gMDsKKworICAgIGNhc2UgT1BfS0VUOgorICAgIC8qIElmIHRoZSBicmFja2V0IGlzIGNhcHR1cmluZywgYW5kIHJlZmVyZW5jZWQgYnkgYW4gT1BfUkVDVVJTRSwgb3IKKyAgICBpdCBpcyBhbiBhdG9taWMgc3ViLXBhdHRlcm4gKGFzc2VydCwgb25jZSwgZXRjLikgdGhlIG5vbi1ncmVlZHkgY2FzZQorICAgIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBwb3NzZXNzaXZlIGZvcm0uICovCisKKyAgICBpZiAoYmFzZV9saXN0WzFdID09IDApIHJldHVybiBGQUxTRTsKKworICAgIHN3aXRjaCgqKGNvZGUgLSBHRVQoY29kZSwgMSkpKQorICAgICAgeworICAgICAgY2FzZSBPUF9BU1NFUlQ6CisgICAgICBjYXNlIE9QX0FTU0VSVF9OT1Q6CisgICAgICBjYXNlIE9QX0FTU0VSVEJBQ0s6CisgICAgICBjYXNlIE9QX0FTU0VSVEJBQ0tfTk9UOgorICAgICAgY2FzZSBPUF9PTkNFOgorICAgICAgY2FzZSBPUF9PTkNFX05DOgorICAgICAgLyogQXRvbWljIHN1Yi1wYXR0ZXJucyBhbmQgYXNzZXJ0aW9ucyBjYW4gYWx3YXlzIGF1dG8tcG9zc2Vzc2lmeSB0aGVpcgorICAgICAgbGFzdCBpdGVyYXRvci4gSG93ZXZlciwgaWYgdGhlIGdyb3VwIHdhcyBlbnRlcmVkIGFzIGEgcmVzdWx0IG9mIGNoZWNraW5nCisgICAgICBhIHByZXZpb3VzIGl0ZXJhdG9yLCB0aGlzIGlzIG5vdCBwb3NzaWJsZS4gKi8KKworICAgICAgcmV0dXJuICFlbnRlcmVkX2FfZ3JvdXA7CisgICAgICB9CisKKyAgICBjb2RlICs9IFBSSVYoT1BfbGVuZ3RocylbY107CisgICAgY29udGludWU7CisKKyAgICBjYXNlIE9QX09OQ0U6CisgICAgY2FzZSBPUF9PTkNFX05DOgorICAgIGNhc2UgT1BfQlJBOgorICAgIGNhc2UgT1BfQ0JSQToKKyAgICBuZXh0X2NvZGUgPSBjb2RlICsgR0VUKGNvZGUsIDEpOworICAgIGNvZGUgKz0gUFJJVihPUF9sZW5ndGhzKVtjXTsKKworICAgIHdoaWxlICgqbmV4dF9jb2RlID09IE9QX0FMVCkKKyAgICAgIHsKKyAgICAgIGlmICghY29tcGFyZV9vcGNvZGVzKGNvZGUsIHV0ZiwgY2IsIGJhc2VfbGlzdCwgYmFzZV9lbmQsIHJlY19saW1pdCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIGNvZGUgPSBuZXh0X2NvZGUgKyAxICsgTElOS19TSVpFOworICAgICAgbmV4dF9jb2RlICs9IEdFVChuZXh0X2NvZGUsIDEpOworICAgICAgfQorCisgICAgZW50ZXJlZF9hX2dyb3VwID0gVFJVRTsKKyAgICBjb250aW51ZTsKKworICAgIGNhc2UgT1BfQlJBWkVSTzoKKyAgICBjYXNlIE9QX0JSQU1JTlpFUk86CisKKyAgICBuZXh0X2NvZGUgPSBjb2RlICsgMTsKKyAgICBpZiAoKm5leHRfY29kZSAhPSBPUF9CUkEgJiYgKm5leHRfY29kZSAhPSBPUF9DQlJBCisgICAgICAgICYmICpuZXh0X2NvZGUgIT0gT1BfT05DRSAmJiAqbmV4dF9jb2RlICE9IE9QX09OQ0VfTkMpIHJldHVybiBGQUxTRTsKKworICAgIGRvIG5leHRfY29kZSArPSBHRVQobmV4dF9jb2RlLCAxKTsgd2hpbGUgKCpuZXh0X2NvZGUgPT0gT1BfQUxUKTsKKworICAgIC8qIFRoZSBicmFja2V0IGNvbnRlbnQgd2lsbCBiZSBjaGVja2VkIGJ5IHRoZSBPUF9CUkEvT1BfQ0JSQSBjYXNlIGFib3ZlLiAqLworCisgICAgbmV4dF9jb2RlICs9IDEgKyBMSU5LX1NJWkU7CisgICAgaWYgKCFjb21wYXJlX29wY29kZXMobmV4dF9jb2RlLCB1dGYsIGNiLCBiYXNlX2xpc3QsIGJhc2VfZW5kLCByZWNfbGltaXQpKQorICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgY29kZSArPSBQUklWKE9QX2xlbmd0aHMpW2NdOworICAgIGNvbnRpbnVlOworCisgICAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgICB9CisKKyAgLyogQ2hlY2sgZm9yIGEgc3VwcG9ydGVkIG9wY29kZSwgYW5kIGxvYWQgaXRzIHByb3BlcnRpZXMuICovCisKKyAgY29kZSA9IGdldF9jaHJfcHJvcGVydHlfbGlzdChjb2RlLCB1dGYsIGNiLT5mY2MsIGxpc3QpOworICBpZiAoY29kZSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7ICAgIC8qIFVuc3VwcG9ydGVkICovCisKKyAgLyogSWYgZWl0aGVyIG9wY29kZSBpcyBhIHNtYWxsIGNoYXJhY3RlciBsaXN0LCBzZXQgcG9pbnRlcnMgZm9yIGNvbXBhcmluZworICBjaGFyYWN0ZXJzIGZyb20gdGhhdCBsaXN0IHdpdGggYW5vdGhlciBsaXN0LCBvciB3aXRoIGEgcHJvcGVydHkuICovCisKKyAgaWYgKGJhc2VfbGlzdFswXSA9PSBPUF9DSEFSKQorICAgIHsKKyAgICBjaHJfcHRyID0gYmFzZV9saXN0ICsgMjsKKyAgICBsaXN0X3B0ciA9IGxpc3Q7CisgICAgfQorICBlbHNlIGlmIChsaXN0WzBdID09IE9QX0NIQVIpCisgICAgeworICAgIGNocl9wdHIgPSBsaXN0ICsgMjsKKyAgICBsaXN0X3B0ciA9IGJhc2VfbGlzdDsKKyAgICB9CisKKyAgLyogQ2hhcmFjdGVyIGJpdHNldHMgY2FuIGFsc28gYmUgY29tcGFyZWQgdG8gY2VydGFpbiBvcGNvZGVzLiAqLworCisgIGVsc2UgaWYgKGJhc2VfbGlzdFswXSA9PSBPUF9DTEFTUyB8fCBsaXN0WzBdID09IE9QX0NMQVNTCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyAgICAgIC8qIEluIDggYml0LCBub24tVVRGIG1vZGUsIE9QX0NMQVNTIGFuZCBPUF9OQ0xBU1MgYXJlIHRoZSBzYW1lLiAqLworICAgICAgfHwgKCF1dGYgJiYgKGJhc2VfbGlzdFswXSA9PSBPUF9OQ0xBU1MgfHwgbGlzdFswXSA9PSBPUF9OQ0xBU1MpKQorI2VuZGlmCisgICAgICApCisgICAgeworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgICAgaWYgKGJhc2VfbGlzdFswXSA9PSBPUF9DTEFTUyB8fCAoIXV0ZiAmJiBiYXNlX2xpc3RbMF0gPT0gT1BfTkNMQVNTKSkKKyNlbHNlCisgICAgaWYgKGJhc2VfbGlzdFswXSA9PSBPUF9DTEFTUykKKyNlbmRpZgorICAgICAgeworICAgICAgc2V0MSA9ICh1aW50OF90ICopKGJhc2VfZW5kIC0gYmFzZV9saXN0WzJdKTsKKyAgICAgIGxpc3RfcHRyID0gbGlzdDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBzZXQxID0gKHVpbnQ4X3QgKikoY29kZSAtIGxpc3RbMl0pOworICAgICAgbGlzdF9wdHIgPSBiYXNlX2xpc3Q7CisgICAgICB9CisKKyAgICBpbnZlcnRfYml0cyA9IEZBTFNFOworICAgIHN3aXRjaChsaXN0X3B0clswXSkKKyAgICAgIHsKKyAgICAgIGNhc2UgT1BfQ0xBU1M6CisgICAgICBjYXNlIE9QX05DTEFTUzoKKyAgICAgIHNldDIgPSAodWludDhfdCAqKQorICAgICAgICAoKGxpc3RfcHRyID09IGxpc3QgPyBjb2RlIDogYmFzZV9lbmQpIC0gbGlzdF9wdHJbMl0pOworICAgICAgYnJlYWs7CisKKyNpZmRlZiBTVVBQT1JUX1dJREVfQ0hBUlMKKyAgICAgIGNhc2UgT1BfWENMQVNTOgorICAgICAgeGNsYXNzX2ZsYWdzID0gKGxpc3RfcHRyID09IGxpc3QgPyBjb2RlIDogYmFzZV9lbmQpIC0gbGlzdF9wdHJbMl0gKyBMSU5LX1NJWkU7CisgICAgICBpZiAoKCp4Y2xhc3NfZmxhZ3MgJiBYQ0xfSEFTUFJPUCkgIT0gMCkgcmV0dXJuIEZBTFNFOworICAgICAgaWYgKCgqeGNsYXNzX2ZsYWdzICYgWENMX01BUCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAvKiBObyBiaXRzIGFyZSBzZXQgZm9yIGNoYXJhY3RlcnMgPCAyNTYuICovCisgICAgICAgIGlmIChsaXN0WzFdID09IDApIHJldHVybiBUUlVFOworICAgICAgICAvKiBNaWdodCBiZSBhbiBlbXB0eSByZXBlYXQuICovCisgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICBzZXQyID0gKHVpbnQ4X3QgKikoeGNsYXNzX2ZsYWdzICsgMSk7CisgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgICAgIGludmVydF9iaXRzID0gVFJVRTsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgICAgY2FzZSBPUF9ESUdJVDoKKyAgICAgIHNldDIgPSAodWludDhfdCAqKShjYi0+Y2JpdHMgKyBjYml0X2RpZ2l0KTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX05PVF9XSElURVNQQUNFOgorICAgICAgaW52ZXJ0X2JpdHMgPSBUUlVFOworICAgICAgLyogRmFsbCB0aHJvdWdoICovCisgICAgICBjYXNlIE9QX1dISVRFU1BBQ0U6CisgICAgICBzZXQyID0gKHVpbnQ4X3QgKikoY2ItPmNiaXRzICsgY2JpdF9zcGFjZSk7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CisgICAgICBpbnZlcnRfYml0cyA9IFRSVUU7CisgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICAgIGNhc2UgT1BfV09SRENIQVI6CisgICAgICBzZXQyID0gKHVpbnQ4X3QgKikoY2ItPmNiaXRzICsgY2JpdF93b3JkKTsKKyAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorCisgICAgLyogQmVjYXVzZSB0aGUgYml0IHNldHMgYXJlIHVuYWxpZ25lZCBieXRlcywgd2UgbmVlZCB0byBwZXJmb3JtIGJ5dGUKKyAgICBjb21wYXJpc29uIGhlcmUuICovCisKKyAgICBzZXRfZW5kID0gc2V0MSArIDMyOworICAgIGlmIChpbnZlcnRfYml0cykKKyAgICAgIHsKKyAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgaWYgKCgqc2V0MSsrICYgfigqc2V0MisrKSkgIT0gMCkgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICB3aGlsZSAoc2V0MSA8IHNldF9lbmQpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgaWYgKCgqc2V0MSsrICYgKnNldDIrKykgIT0gMCkgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICB3aGlsZSAoc2V0MSA8IHNldF9lbmQpOworICAgICAgfQorCisgICAgaWYgKGxpc3RbMV0gPT0gMCkgcmV0dXJuIFRSVUU7CisgICAgLyogTWlnaHQgYmUgYW4gZW1wdHkgcmVwZWF0LiAqLworICAgIGNvbnRpbnVlOworICAgIH0KKworICAvKiBTb21lIHByb3BlcnR5IGNvbWJpbmF0aW9ucyBhbHNvIGFjY2VwdGFibGUuIFVuaWNvZGUgcHJvcGVydHkgb3Bjb2RlcyBhcmUKKyAgcHJvY2Vzc2VkIHNwZWNpYWxseTsgdGhlIHJlc3QgY2FuIGJlIGhhbmRsZWQgd2l0aCBhIGxvb2t1cCB0YWJsZS4gKi8KKworICBlbHNlCisgICAgeworICAgIHVpbnQzMl90IGxlZnRvcCwgcmlnaHRvcDsKKworICAgIGxlZnRvcCA9IGJhc2VfbGlzdFswXTsKKyAgICByaWdodG9wID0gbGlzdFswXTsKKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGFjY2VwdGVkID0gRkFMU0U7IC8qIEFsd2F5cyBzZXQgaW4gbm9uLXVuaWNvZGUgY2FzZS4gKi8KKyAgICBpZiAobGVmdG9wID09IE9QX1BST1AgfHwgbGVmdG9wID09IE9QX05PVFBST1ApCisgICAgICB7CisgICAgICBpZiAocmlnaHRvcCA9PSBPUF9FT0QpCisgICAgICAgIGFjY2VwdGVkID0gVFJVRTsKKyAgICAgIGVsc2UgaWYgKHJpZ2h0b3AgPT0gT1BfUFJPUCB8fCByaWdodG9wID09IE9QX05PVFBST1ApCisgICAgICAgIHsKKyAgICAgICAgaW50IG47CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnA7CisgICAgICAgIEJPT0wgc2FtZSA9IGxlZnRvcCA9PSByaWdodG9wOworICAgICAgICBCT09MIGxpc3Byb3AgPSBsZWZ0b3AgPT0gT1BfUFJPUDsKKyAgICAgICAgQk9PTCByaXNwcm9wID0gcmlnaHRvcCA9PSBPUF9QUk9QOworICAgICAgICBCT09MIGJvdGhwcm9wID0gbGlzcHJvcCAmJiByaXNwcm9wOworCisgICAgICAgIC8qIFRoZXJlJ3MgYSB0YWJsZSB0aGF0IHNwZWNpZmllcyBob3cgZWFjaCBjb21iaW5hdGlvbiBpcyB0byBiZQorICAgICAgICBwcm9jZXNzZWQ6CisgICAgICAgICAgMCAgIEFsd2F5cyByZXR1cm4gRkFMU0UgKG5ldmVyIGF1dG8tcG9zc2Vzc2lmeSkKKyAgICAgICAgICAxICAgQ2hhcmFjdGVyIGdyb3VwcyBhcmUgZGlzdGluY3QgKHBvc3Nlc3NpZnkgaWYgYm90aCBhcmUgT1BfUFJPUCkKKyAgICAgICAgICAyICAgQ2hlY2sgY2hhcmFjdGVyIGNhdGVnb3JpZXMgaW4gdGhlIHNhbWUgZ3JvdXAgKGdlbmVyYWwgb3IgcGFydGljdWxhcikKKyAgICAgICAgICAzICAgUmV0dXJuIFRSVUUgaWYgdGhlIHR3byBvcGNvZGVzIGFyZSBub3QgdGhlIHNhbWUKKyAgICAgICAgICAuLi4gc2VlIGNvbW1lbnRzIGJlbG93CisgICAgICAgICovCisKKyAgICAgICAgbiA9IHByb3Bwb3NzdGFiW2Jhc2VfbGlzdFsyXV1bbGlzdFsyXV07CisgICAgICAgIHN3aXRjaChuKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDA6IGJyZWFrOworICAgICAgICAgIGNhc2UgMTogYWNjZXB0ZWQgPSBib3RocHJvcDsgYnJlYWs7CisgICAgICAgICAgY2FzZSAyOiBhY2NlcHRlZCA9IChiYXNlX2xpc3RbM10gPT0gbGlzdFszXSkgIT0gc2FtZTsgYnJlYWs7CisgICAgICAgICAgY2FzZSAzOiBhY2NlcHRlZCA9ICFzYW1lOyBicmVhazsKKworICAgICAgICAgIGNhc2UgNDogIC8qIExlZnQgZ2VuZXJhbCBjYXRlZ29yeSwgcmlnaHQgcGFydGljdWxhciBjYXRlZ29yeSAqLworICAgICAgICAgIGFjY2VwdGVkID0gcmlzcHJvcCAmJiBjYXRwb3NzdGFiW2Jhc2VfbGlzdFszXV1bbGlzdFszXV0gPT0gc2FtZTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgNTogIC8qIFJpZ2h0IGdlbmVyYWwgY2F0ZWdvcnksIGxlZnQgcGFydGljdWxhciBjYXRlZ29yeSAqLworICAgICAgICAgIGFjY2VwdGVkID0gbGlzcHJvcCAmJiBjYXRwb3NzdGFiW2xpc3RbM11dW2Jhc2VfbGlzdFszXV0gPT0gc2FtZTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIC8qIFRoaXMgY29kZSBpcyBsb2dpY2FsbHkgdHJpY2t5LiBUaGluayBoYXJkIGJlZm9yZSBmaWRkbGluZyB3aXRoIGl0LgorICAgICAgICAgIFRoZSBwb3NzcHJvcHN0YWIgdGFibGUgaGFzIGZvdXIgZW50cmllcyBwZXIgcm93LiBFYWNoIHJvdyByZWxhdGVzIHRvCisgICAgICAgICAgb25lIG9mIFBDUkUncyBzcGVjaWFsIHByb3BlcnRpZXMgc3VjaCBhcyBBTE5VTSBvciBTUEFDRSBvciBXT1JELgorICAgICAgICAgIE9ubHkgV09SRCBhY3R1YWxseSBuZWVkcyBhbGwgZm91ciBlbnRyaWVzLCBidXQgdXNpbmcgcmVwZWF0cyBmb3IgdGhlCisgICAgICAgICAgb3RoZXJzIG1lYW5zIHRoZXkgY2FuIGFsbCB1c2UgdGhlIHNhbWUgY29kZSBiZWxvdy4KKworICAgICAgICAgIFRoZSBmaXJzdCB0d28gZW50cmllcyBpbiBlYWNoIHJvdyBhcmUgVW5pY29kZSBnZW5lcmFsIGNhdGVnb3JpZXMsIGFuZAorICAgICAgICAgIGFwcGx5IGFsd2F5cywgYmVjYXVzZSBhbGwgdGhlIGNoYXJhY3RlcnMgdGhleSBpbmNsdWRlIGFyZSBwYXJ0IG9mIHRoZQorICAgICAgICAgIFBDUkUgY2hhcmFjdGVyIHNldC4gVGhlIHRoaXJkIGFuZCBmb3VydGggZW50cmllcyBhcmUgYSBnZW5lcmFsIGFuZCBhCisgICAgICAgICAgcGFydGljdWxhciBjYXRlZ29yeSwgcmVzcGVjdGl2ZWx5LCB0aGF0IGluY2x1ZGUgb25lIG9yIG1vcmUgcmVsZXZhbnQKKyAgICAgICAgICBjaGFyYWN0ZXJzLiBPbmUgb3IgdGhlIG90aGVyIGlzIHVzZWQsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBjaGVjaworICAgICAgICAgIGlzIGZvciBhIGdlbmVyYWwgb3IgYSBwYXJ0aWN1bGFyIGNhdGVnb3J5LiBIb3dldmVyLCBpbiBib3RoIGNhc2VzIHRoZQorICAgICAgICAgIGNhdGVnb3J5IGNvbnRhaW5zIG1vcmUgY2hhcmFjdGVycyB0aGFuIHRoZSBzcGVjaWFscyB0aGF0IGFyZSBkZWZpbmVkCisgICAgICAgICAgZm9yIHRoZSBwcm9wZXJ0eSBiZWluZyB0ZXN0ZWQgYWdhaW5zdC4gVGhlcmVmb3JlLCBpdCBjYW5ub3QgYmUgdXNlZAorICAgICAgICAgIGluIGEgTk9UUFJPUCBjYXNlLgorCisgICAgICAgICAgRXhhbXBsZTogdGhlIHJvdyBmb3IgV09SRCBjb250YWlucyB1Y3BfTCwgdWNwX04sIHVjcF9QLCB1Y3BfUG8uCisgICAgICAgICAgVW5kZXJzY29yZSBpcyBjb3ZlcmVkIGJ5IHVjcF9QIG9yIHVjcF9Qby4gKi8KKworICAgICAgICAgIGNhc2UgNjogIC8qIExlZnQgYWxwaGFudW0gdnMgcmlnaHQgZ2VuZXJhbCBjYXRlZ29yeSAqLworICAgICAgICAgIGNhc2UgNzogIC8qIExlZnQgc3BhY2UgdnMgcmlnaHQgZ2VuZXJhbCBjYXRlZ29yeSAqLworICAgICAgICAgIGNhc2UgODogIC8qIExlZnQgd29yZCB2cyByaWdodCBnZW5lcmFsIGNhdGVnb3J5ICovCisgICAgICAgICAgcCA9IHBvc3Nwcm9wc3RhYltuLTZdOworICAgICAgICAgIGFjY2VwdGVkID0gcmlzcHJvcCAmJiBsaXNwcm9wID09CisgICAgICAgICAgICAobGlzdFszXSAhPSBwWzBdICYmCisgICAgICAgICAgICAgbGlzdFszXSAhPSBwWzFdICYmCisgICAgICAgICAgICAobGlzdFszXSAhPSBwWzJdIHx8ICFsaXNwcm9wKSk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIDk6ICAgLyogUmlnaHQgYWxwaGFudW0gdnMgbGVmdCBnZW5lcmFsIGNhdGVnb3J5ICovCisgICAgICAgICAgY2FzZSAxMDogIC8qIFJpZ2h0IHNwYWNlIHZzIGxlZnQgZ2VuZXJhbCBjYXRlZ29yeSAqLworICAgICAgICAgIGNhc2UgMTE6ICAvKiBSaWdodCB3b3JkIHZzIGxlZnQgZ2VuZXJhbCBjYXRlZ29yeSAqLworICAgICAgICAgIHAgPSBwb3NzcHJvcHN0YWJbbi05XTsKKyAgICAgICAgICBhY2NlcHRlZCA9IGxpc3Byb3AgJiYgcmlzcHJvcCA9PQorICAgICAgICAgICAgKGJhc2VfbGlzdFszXSAhPSBwWzBdICYmCisgICAgICAgICAgICAgYmFzZV9saXN0WzNdICE9IHBbMV0gJiYKKyAgICAgICAgICAgIChiYXNlX2xpc3RbM10gIT0gcFsyXSB8fCAhcmlzcHJvcCkpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAxMjogIC8qIExlZnQgYWxwaGFudW0gdnMgcmlnaHQgcGFydGljdWxhciBjYXRlZ29yeSAqLworICAgICAgICAgIGNhc2UgMTM6ICAvKiBMZWZ0IHNwYWNlIHZzIHJpZ2h0IHBhcnRpY3VsYXIgY2F0ZWdvcnkgKi8KKyAgICAgICAgICBjYXNlIDE0OiAgLyogTGVmdCB3b3JkIHZzIHJpZ2h0IHBhcnRpY3VsYXIgY2F0ZWdvcnkgKi8KKyAgICAgICAgICBwID0gcG9zc3Byb3BzdGFiW24tMTJdOworICAgICAgICAgIGFjY2VwdGVkID0gcmlzcHJvcCAmJiBsaXNwcm9wID09CisgICAgICAgICAgICAoY2F0cG9zc3RhYltwWzBdXVtsaXN0WzNdXSAmJgorICAgICAgICAgICAgIGNhdHBvc3N0YWJbcFsxXV1bbGlzdFszXV0gJiYKKyAgICAgICAgICAgIChsaXN0WzNdICE9IHBbM10gfHwgIWxpc3Byb3ApKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgMTU6ICAvKiBSaWdodCBhbHBoYW51bSB2cyBsZWZ0IHBhcnRpY3VsYXIgY2F0ZWdvcnkgKi8KKyAgICAgICAgICBjYXNlIDE2OiAgLyogUmlnaHQgc3BhY2UgdnMgbGVmdCBwYXJ0aWN1bGFyIGNhdGVnb3J5ICovCisgICAgICAgICAgY2FzZSAxNzogIC8qIFJpZ2h0IHdvcmQgdnMgbGVmdCBwYXJ0aWN1bGFyIGNhdGVnb3J5ICovCisgICAgICAgICAgcCA9IHBvc3Nwcm9wc3RhYltuLTE1XTsKKyAgICAgICAgICBhY2NlcHRlZCA9IGxpc3Byb3AgJiYgcmlzcHJvcCA9PQorICAgICAgICAgICAgKGNhdHBvc3N0YWJbcFswXV1bYmFzZV9saXN0WzNdXSAmJgorICAgICAgICAgICAgIGNhdHBvc3N0YWJbcFsxXV1bYmFzZV9saXN0WzNdXSAmJgorICAgICAgICAgICAgKGJhc2VfbGlzdFszXSAhPSBwWzNdIHx8ICFyaXNwcm9wKSk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICBlbHNlCisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCisgICAgYWNjZXB0ZWQgPSBsZWZ0b3AgPj0gRklSU1RfQVVUT1RBQl9PUCAmJiBsZWZ0b3AgPD0gTEFTVF9BVVRPVEFCX0xFRlRfT1AgJiYKKyAgICAgICAgICAgcmlnaHRvcCA+PSBGSVJTVF9BVVRPVEFCX09QICYmIHJpZ2h0b3AgPD0gTEFTVF9BVVRPVEFCX1JJR0hUX09QICYmCisgICAgICAgICAgIGF1dG9wb3NzdGFiW2xlZnRvcCAtIEZJUlNUX0FVVE9UQUJfT1BdW3JpZ2h0b3AgLSBGSVJTVF9BVVRPVEFCX09QXTsKKworICAgIGlmICghYWNjZXB0ZWQpIHJldHVybiBGQUxTRTsKKworICAgIGlmIChsaXN0WzFdID09IDApIHJldHVybiBUUlVFOworICAgIC8qIE1pZ2h0IGJlIGFuIGVtcHR5IHJlcGVhdC4gKi8KKyAgICBjb250aW51ZTsKKyAgICB9CisKKyAgLyogQ29udHJvbCByZWFjaGVzIGhlcmUgb25seSBpZiBvbmUgb2YgdGhlIGl0ZW1zIGlzIGEgc21hbGwgY2hhcmFjdGVyIGxpc3QuCisgIEFsbCBjaGFyYWN0ZXJzIGFyZSBjaGVja2VkIGFnYWluc3QgdGhlIG90aGVyIHNpZGUuICovCisKKyAgZG8KKyAgICB7CisgICAgY2hyID0gKmNocl9wdHI7CisKKyAgICBzd2l0Y2gobGlzdF9wdHJbMF0pCisgICAgICB7CisgICAgICBjYXNlIE9QX0NIQVI6CisgICAgICBvY2hyX3B0ciA9IGxpc3RfcHRyICsgMjsKKyAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgaWYgKGNociA9PSAqb2Nocl9wdHIpIHJldHVybiBGQUxTRTsKKyAgICAgICAgb2Nocl9wdHIrKzsKKyAgICAgICAgfQorICAgICAgd2hpbGUoKm9jaHJfcHRyICE9IE5PVEFDSEFSKTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX05PVDoKKyAgICAgIG9jaHJfcHRyID0gbGlzdF9wdHIgKyAyOworICAgICAgZG8KKyAgICAgICAgeworICAgICAgICBpZiAoY2hyID09ICpvY2hyX3B0cikKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgb2Nocl9wdHIrKzsKKyAgICAgICAgfQorICAgICAgd2hpbGUoKm9jaHJfcHRyICE9IE5PVEFDSEFSKTsKKyAgICAgIGlmICgqb2Nocl9wdHIgPT0gTk9UQUNIQVIpIHJldHVybiBGQUxTRTsgICAvKiBOb3QgZm91bmQgKi8KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBOb3RlIHRoYXQgT1BfRElHSVQgZXRjLiBhcmUgZ2VuZXJhdGVkIG9ubHkgd2hlbiBQQ1JFMl9VQ1AgaXMgKm5vdCoKKyAgICAgIHNldC4gV2hlbiBpdCBpcyBzZXQsIFxkIGV0Yy4gYXJlIGNvbnZlcnRlZCBpbnRvIE9QXyhOT1RfKVBST1AgY29kZXMuICovCisKKyAgICAgIGNhc2UgT1BfRElHSVQ6CisgICAgICBpZiAoY2hyIDwgMjU2ICYmIChjYi0+Y3R5cGVzW2Nocl0gJiBjdHlwZV9kaWdpdCkgIT0gMCkgcmV0dXJuIEZBTFNFOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfTk9UX0RJR0lUOgorICAgICAgaWYgKGNociA+IDI1NSB8fCAoY2ItPmN0eXBlc1tjaHJdICYgY3R5cGVfZGlnaXQpID09IDApIHJldHVybiBGQUxTRTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX1dISVRFU1BBQ0U6CisgICAgICBpZiAoY2hyIDwgMjU2ICYmIChjYi0+Y3R5cGVzW2Nocl0gJiBjdHlwZV9zcGFjZSkgIT0gMCkgcmV0dXJuIEZBTFNFOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6CisgICAgICBpZiAoY2hyID4gMjU1IHx8IChjYi0+Y3R5cGVzW2Nocl0gJiBjdHlwZV9zcGFjZSkgPT0gMCkgcmV0dXJuIEZBTFNFOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfV09SRENIQVI6CisgICAgICBpZiAoY2hyIDwgMjU1ICYmIChjYi0+Y3R5cGVzW2Nocl0gJiBjdHlwZV93b3JkKSAhPSAwKSByZXR1cm4gRkFMU0U7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CisgICAgICBpZiAoY2hyID4gMjU1IHx8IChjYi0+Y3R5cGVzW2Nocl0gJiBjdHlwZV93b3JkKSA9PSAwKSByZXR1cm4gRkFMU0U7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9IU1BBQ0U6CisgICAgICBzd2l0Y2goY2hyKQorICAgICAgICB7CisgICAgICAgIEhTUEFDRV9DQVNFUzogcmV0dXJuIEZBTFNFOworICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfTk9UX0hTUEFDRToKKyAgICAgIHN3aXRjaChjaHIpCisgICAgICAgIHsKKyAgICAgICAgSFNQQUNFX0NBU0VTOiBicmVhazsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9BTllOTDoKKyAgICAgIGNhc2UgT1BfVlNQQUNFOgorICAgICAgc3dpdGNoKGNocikKKyAgICAgICAgeworICAgICAgICBWU1BBQ0VfQ0FTRVM6IHJldHVybiBGQUxTRTsKKyAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX05PVF9WU1BBQ0U6CisgICAgICBzd2l0Y2goY2hyKQorICAgICAgICB7CisgICAgICAgIFZTUEFDRV9DQVNFUzogYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfRE9MTDoKKyAgICAgIGNhc2UgT1BfRU9ETjoKKyAgICAgIHN3aXRjaCAoY2hyKQorICAgICAgICB7CisgICAgICAgIGNhc2UgQ0hBUl9DUjoKKyAgICAgICAgY2FzZSBDSEFSX0xGOgorICAgICAgICBjYXNlIENIQVJfVlQ6CisgICAgICAgIGNhc2UgQ0hBUl9GRjoKKyAgICAgICAgY2FzZSBDSEFSX05FTDoKKyNpZm5kZWYgRUJDRElDCisgICAgICAgIGNhc2UgMHgyMDI4OgorICAgICAgICBjYXNlIDB4MjAyOToKKyNlbmRpZiAgLyogTm90IEVCQ0RJQyAqLworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX0VPRDogICAgLyogQ2FuIGFsd2F5cyBwb3NzZXNzaWZ5IGJlZm9yZSBceiAqLworICAgICAgYnJlYWs7CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgIGNhc2UgT1BfUFJPUDoKKyAgICAgIGNhc2UgT1BfTk9UUFJPUDoKKyAgICAgIGlmICghY2hlY2tfY2hhcl9wcm9wKGNociwgbGlzdF9wdHJbMl0sIGxpc3RfcHRyWzNdLAorICAgICAgICAgICAgbGlzdF9wdHJbMF0gPT0gT1BfTk9UUFJPUCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAgIGNhc2UgT1BfTkNMQVNTOgorICAgICAgaWYgKGNociA+IDI1NSkgcmV0dXJuIEZBTFNFOworICAgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICAgIGNhc2UgT1BfQ0xBU1M6CisgICAgICBpZiAoY2hyID4gMjU1KSBicmVhazsKKyAgICAgIGNsYXNzX2JpdHNldCA9ICh1aW50OF90ICopCisgICAgICAgICgobGlzdF9wdHIgPT0gbGlzdCA/IGNvZGUgOiBiYXNlX2VuZCkgLSBsaXN0X3B0clsyXSk7CisgICAgICBpZiAoKGNsYXNzX2JpdHNldFtjaHIgPj4gM10gJiAoMSA8PCAoY2hyICYgNykpKSAhPSAwKSByZXR1cm4gRkFMU0U7CisgICAgICBicmVhazsKKworI2lmZGVmIFNVUFBPUlRfV0lERV9DSEFSUworICAgICAgY2FzZSBPUF9YQ0xBU1M6CisgICAgICBpZiAoUFJJVih4Y2xhc3MpKGNociwgKGxpc3RfcHRyID09IGxpc3QgPyBjb2RlIDogYmFzZV9lbmQpIC0KKyAgICAgICAgICBsaXN0X3B0clsyXSArIExJTktfU0laRSwgdXRmKSkgcmV0dXJuIEZBTFNFOworICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgIH0KKworICAgIGNocl9wdHIrKzsKKyAgICB9CisgIHdoaWxlKCpjaHJfcHRyICE9IE5PVEFDSEFSKTsKKworICAvKiBBdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG11c3QgYmUgbWF0Y2hlZCBmcm9tIHRoaXMgb3Bjb2RlLiAqLworCisgIGlmIChsaXN0WzFdID09IDApIHJldHVybiBUUlVFOworICB9CisKKy8qIENvbnRyb2wgbmV2ZXIgcmVhY2hlcyBoZXJlLiBUaGVyZSB1c2VkIHRvIGJlIGEgZmFpbC1zYXZlIHJldHVybiBGQUxTRTsgaGVyZSwKK2J1dCBzb21lIGNvbXBpbGVycyBjb21wbGFpbiBhYm91dCBhbiB1bnJlYWNoYWJsZSBzdGF0ZW1lbnQuICovCit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICBTY2FuIGNvbXBpbGVkIHJlZ2V4IGZvciBhdXRvLXBvc3Nlc3Npb24gICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFJlcGxhY2VzIHNpbmdsZSBjaGFyYWN0ZXIgaXRlcmF0aW9ucyB3aXRoIHRoZWlyIHBvc3Nlc3NpdmUgYWx0ZXJuYXRpdmVzCitpZiBhcHByb3ByaWF0ZS4gVGhpcyBmdW5jdGlvbiBtb2RpZmllcyB0aGUgY29tcGlsZWQgb3Bjb2RlISBIaXR0aW5nIGEKK25vbi1leGlzdGFudCBvcGNvZGUgbWF5IGluZGljYXRlIGEgYnVnIGluIFBDUkUyLCBidXQgaXQgY2FuIGFsc28gYmUgY2F1c2VkIGlmIGEKK2JhZCBVVEYgc3RyaW5nIHdhcyBjb21waWxlZCB3aXRoIFBDUkUyX05PX1VURl9DSEVDSy4KKworQXJndW1lbnRzOgorICBjb2RlICAgICAgICBwb2ludHMgdG8gc3RhcnQgb2YgdGhlIGJ5dGUgY29kZQorICB1dGYgICAgICAgICBUUlVFIGluIFVURiBtb2RlCisgIGNiICAgICAgICAgIGNvbXBpbGUgZGF0YSBibG9jaworCitSZXR1cm5zOiAgICAgIDAgZm9yIHN1Y2Nlc3MKKyAgICAgICAgICAgICAgLTEgaWYgYSBub24tZXhpc3RhbnQgb3Bjb2RlIGlzIGVuY291bnRlcmVkCisqLworCitpbnQKK1BSSVYoYXV0b19wb3NzZXNzaWZ5KShQQ1JFMl9VQ0hBUiAqY29kZSwgQk9PTCB1dGYsIGNvbnN0IGNvbXBpbGVfYmxvY2sgKmNiKQoreworcmVnaXN0ZXIgUENSRTJfVUNIQVIgYzsKK1BDUkUyX1NQVFIgZW5kOworUENSRTJfVUNIQVIgKnJlcGVhdF9vcGNvZGU7Cit1aW50MzJfdCBsaXN0WzhdOworaW50IHJlY19saW1pdDsKKworZm9yICg7OykKKyAgeworICBjID0gKmNvZGU7CisKKyAgaWYgKGMgPiBPUF9UQUJMRV9MRU5HVEgpIHJldHVybiAtMTsgICAvKiBTb21ldGhpbmcgZ29uZSB3cm9uZyAqLworCisgIGlmIChjID49IE9QX1NUQVIgJiYgYyA8PSBPUF9UWVBFUE9TVVBUTykKKyAgICB7CisgICAgYyAtPSBnZXRfcmVwZWF0X2Jhc2UoYykgLSBPUF9TVEFSOworICAgIGVuZCA9IChjIDw9IE9QX01JTlVQVE8pID8KKyAgICAgIGdldF9jaHJfcHJvcGVydHlfbGlzdChjb2RlLCB1dGYsIGNiLT5mY2MsIGxpc3QpIDogTlVMTDsKKyAgICBsaXN0WzFdID0gYyA9PSBPUF9TVEFSIHx8IGMgPT0gT1BfUExVUyB8fCBjID09IE9QX1FVRVJZIHx8IGMgPT0gT1BfVVBUTzsKKworICAgIHJlY19saW1pdCA9IDEwMDA7CisgICAgaWYgKGVuZCAhPSBOVUxMICYmIGNvbXBhcmVfb3Bjb2RlcyhlbmQsIHV0ZiwgY2IsIGxpc3QsIGVuZCwgJnJlY19saW1pdCkpCisgICAgICB7CisgICAgICBzd2l0Y2goYykKKyAgICAgICAgeworICAgICAgICBjYXNlIE9QX1NUQVI6CisgICAgICAgICpjb2RlICs9IE9QX1BPU1NUQVIgLSBPUF9TVEFSOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX01JTlNUQVI6CisgICAgICAgICpjb2RlICs9IE9QX1BPU1NUQVIgLSBPUF9NSU5TVEFSOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX1BMVVM6CisgICAgICAgICpjb2RlICs9IE9QX1BPU1BMVVMgLSBPUF9QTFVTOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX01JTlBMVVM6CisgICAgICAgICpjb2RlICs9IE9QX1BPU1BMVVMgLSBPUF9NSU5QTFVTOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX1FVRVJZOgorICAgICAgICAqY29kZSArPSBPUF9QT1NRVUVSWSAtIE9QX1FVRVJZOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX01JTlFVRVJZOgorICAgICAgICAqY29kZSArPSBPUF9QT1NRVUVSWSAtIE9QX01JTlFVRVJZOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX1VQVE86CisgICAgICAgICpjb2RlICs9IE9QX1BPU1VQVE8gLSBPUF9VUFRPOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX01JTlVQVE86CisgICAgICAgICpjb2RlICs9IE9QX1BPU1VQVE8gLSBPUF9NSU5VUFRPOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorICAgIGMgPSAqY29kZTsKKyAgICB9CisgIGVsc2UgaWYgKGMgPT0gT1BfQ0xBU1MgfHwgYyA9PSBPUF9OQ0xBU1MgfHwgYyA9PSBPUF9YQ0xBU1MpCisgICAgeworI2lmZGVmIFNVUFBPUlRfV0lERV9DSEFSUworICAgIGlmIChjID09IE9QX1hDTEFTUykKKyAgICAgIHJlcGVhdF9vcGNvZGUgPSBjb2RlICsgR0VUKGNvZGUsIDEpOworICAgIGVsc2UKKyNlbmRpZgorICAgICAgcmVwZWF0X29wY29kZSA9IGNvZGUgKyAxICsgKDMyIC8gc2l6ZW9mKFBDUkUyX1VDSEFSKSk7CisKKyAgICBjID0gKnJlcGVhdF9vcGNvZGU7CisgICAgaWYgKGMgPj0gT1BfQ1JTVEFSICYmIGMgPD0gT1BfQ1JNSU5SQU5HRSkKKyAgICAgIHsKKyAgICAgIC8qIGVuZCBtdXN0IG5vdCBiZSBOVUxMLiAqLworICAgICAgZW5kID0gZ2V0X2Nocl9wcm9wZXJ0eV9saXN0KGNvZGUsIHV0ZiwgY2ItPmZjYywgbGlzdCk7CisKKyAgICAgIGxpc3RbMV0gPSAoYyAmIDEpID09IDA7CisKKyAgICAgIHJlY19saW1pdCA9IDEwMDA7CisgICAgICBpZiAoY29tcGFyZV9vcGNvZGVzKGVuZCwgdXRmLCBjYiwgbGlzdCwgZW5kLCAmcmVjX2xpbWl0KSkKKyAgICAgICAgeworICAgICAgICBzd2l0Y2ggKGMpCisgICAgICAgICAgeworICAgICAgICAgIGNhc2UgT1BfQ1JTVEFSOgorICAgICAgICAgIGNhc2UgT1BfQ1JNSU5TVEFSOgorICAgICAgICAgICpyZXBlYXRfb3Bjb2RlID0gT1BfQ1JQT1NTVEFSOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBPUF9DUlBMVVM6CisgICAgICAgICAgY2FzZSBPUF9DUk1JTlBMVVM6CisgICAgICAgICAgKnJlcGVhdF9vcGNvZGUgPSBPUF9DUlBPU1BMVVM7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIE9QX0NSUVVFUlk6CisgICAgICAgICAgY2FzZSBPUF9DUk1JTlFVRVJZOgorICAgICAgICAgICpyZXBlYXRfb3Bjb2RlID0gT1BfQ1JQT1NRVUVSWTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgT1BfQ1JSQU5HRToKKyAgICAgICAgICBjYXNlIE9QX0NSTUlOUkFOR0U6CisgICAgICAgICAgKnJlcGVhdF9vcGNvZGUgPSBPUF9DUlBPU1JBTkdFOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIGMgPSAqY29kZTsKKyAgICB9CisKKyAgc3dpdGNoKGMpCisgICAgeworICAgIGNhc2UgT1BfRU5EOgorICAgIHJldHVybiAwOworCisgICAgY2FzZSBPUF9UWVBFU1RBUjoKKyAgICBjYXNlIE9QX1RZUEVNSU5TVEFSOgorICAgIGNhc2UgT1BfVFlQRVBMVVM6CisgICAgY2FzZSBPUF9UWVBFTUlOUExVUzoKKyAgICBjYXNlIE9QX1RZUEVRVUVSWToKKyAgICBjYXNlIE9QX1RZUEVNSU5RVUVSWToKKyAgICBjYXNlIE9QX1RZUEVQT1NTVEFSOgorICAgIGNhc2UgT1BfVFlQRVBPU1BMVVM6CisgICAgY2FzZSBPUF9UWVBFUE9TUVVFUlk6CisgICAgaWYgKGNvZGVbMV0gPT0gT1BfUFJPUCB8fCBjb2RlWzFdID09IE9QX05PVFBST1ApIGNvZGUgKz0gMjsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfVFlQRVVQVE86CisgICAgY2FzZSBPUF9UWVBFTUlOVVBUTzoKKyAgICBjYXNlIE9QX1RZUEVFWEFDVDoKKyAgICBjYXNlIE9QX1RZUEVQT1NVUFRPOgorICAgIGlmIChjb2RlWzEgKyBJTU0yX1NJWkVdID09IE9QX1BST1AgfHwgY29kZVsxICsgSU1NMl9TSVpFXSA9PSBPUF9OT1RQUk9QKQorICAgICAgY29kZSArPSAyOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9DQUxMT1VUX1NUUjoKKyAgICBjb2RlICs9IEdFVChjb2RlLCAxICsgMipMSU5LX1NJWkUpOworICAgIGJyZWFrOworCisjaWZkZWYgU1VQUE9SVF9XSURFX0NIQVJTCisgICAgY2FzZSBPUF9YQ0xBU1M6CisgICAgY29kZSArPSBHRVQoY29kZSwgMSk7CisgICAgYnJlYWs7CisjZW5kaWYKKworICAgIGNhc2UgT1BfTUFSSzoKKyAgICBjYXNlIE9QX1BSVU5FX0FSRzoKKyAgICBjYXNlIE9QX1NLSVBfQVJHOgorICAgIGNhc2UgT1BfVEhFTl9BUkc6CisgICAgY29kZSArPSBjb2RlWzFdOworICAgIGJyZWFrOworICAgIH0KKworICAvKiBBZGQgaW4gdGhlIGZpeGVkIGxlbmd0aCBmcm9tIHRoZSB0YWJsZSAqLworCisgIGNvZGUgKz0gUFJJVihPUF9sZW5ndGhzKVtjXTsKKworICAvKiBJbiBVVEYtOCBhbmQgVVRGLTE2IG1vZGVzLCBvcGNvZGVzIHRoYXQgYXJlIGZvbGxvd2VkIGJ5IGEgY2hhcmFjdGVyIG1heSBiZQorICBmb2xsb3dlZCBieSBhIG11bHRpLWJ5dGUgY2hhcmFjdGVyLiBUaGUgbGVuZ3RoIGluIHRoZSB0YWJsZSBpcyBhIG1pbmltdW0sIHNvCisgIHdlIGhhdmUgdG8gYXJyYW5nZSB0byBza2lwIHRoZSBleHRyYSBjb2RlIHVuaXRzLiAqLworCisjaWZkZWYgTUFZQkVfVVRGX01VTFRJCisgIGlmICh1dGYpIHN3aXRjaChjKQorICAgIHsKKyAgICBjYXNlIE9QX0NIQVI6CisgICAgY2FzZSBPUF9DSEFSSToKKyAgICBjYXNlIE9QX05PVDoKKyAgICBjYXNlIE9QX05PVEk6CisgICAgY2FzZSBPUF9TVEFSOgorICAgIGNhc2UgT1BfTUlOU1RBUjoKKyAgICBjYXNlIE9QX1BMVVM6CisgICAgY2FzZSBPUF9NSU5QTFVTOgorICAgIGNhc2UgT1BfUVVFUlk6CisgICAgY2FzZSBPUF9NSU5RVUVSWToKKyAgICBjYXNlIE9QX1VQVE86CisgICAgY2FzZSBPUF9NSU5VUFRPOgorICAgIGNhc2UgT1BfRVhBQ1Q6CisgICAgY2FzZSBPUF9QT1NTVEFSOgorICAgIGNhc2UgT1BfUE9TUExVUzoKKyAgICBjYXNlIE9QX1BPU1FVRVJZOgorICAgIGNhc2UgT1BfUE9TVVBUTzoKKyAgICBjYXNlIE9QX1NUQVJJOgorICAgIGNhc2UgT1BfTUlOU1RBUkk6CisgICAgY2FzZSBPUF9QTFVTSToKKyAgICBjYXNlIE9QX01JTlBMVVNJOgorICAgIGNhc2UgT1BfUVVFUllJOgorICAgIGNhc2UgT1BfTUlOUVVFUllJOgorICAgIGNhc2UgT1BfVVBUT0k6CisgICAgY2FzZSBPUF9NSU5VUFRPSToKKyAgICBjYXNlIE9QX0VYQUNUSToKKyAgICBjYXNlIE9QX1BPU1NUQVJJOgorICAgIGNhc2UgT1BfUE9TUExVU0k6CisgICAgY2FzZSBPUF9QT1NRVUVSWUk6CisgICAgY2FzZSBPUF9QT1NVUFRPSToKKyAgICBjYXNlIE9QX05PVFNUQVI6CisgICAgY2FzZSBPUF9OT1RNSU5TVEFSOgorICAgIGNhc2UgT1BfTk9UUExVUzoKKyAgICBjYXNlIE9QX05PVE1JTlBMVVM6CisgICAgY2FzZSBPUF9OT1RRVUVSWToKKyAgICBjYXNlIE9QX05PVE1JTlFVRVJZOgorICAgIGNhc2UgT1BfTk9UVVBUTzoKKyAgICBjYXNlIE9QX05PVE1JTlVQVE86CisgICAgY2FzZSBPUF9OT1RFWEFDVDoKKyAgICBjYXNlIE9QX05PVFBPU1NUQVI6CisgICAgY2FzZSBPUF9OT1RQT1NQTFVTOgorICAgIGNhc2UgT1BfTk9UUE9TUVVFUlk6CisgICAgY2FzZSBPUF9OT1RQT1NVUFRPOgorICAgIGNhc2UgT1BfTk9UU1RBUkk6CisgICAgY2FzZSBPUF9OT1RNSU5TVEFSSToKKyAgICBjYXNlIE9QX05PVFBMVVNJOgorICAgIGNhc2UgT1BfTk9UTUlOUExVU0k6CisgICAgY2FzZSBPUF9OT1RRVUVSWUk6CisgICAgY2FzZSBPUF9OT1RNSU5RVUVSWUk6CisgICAgY2FzZSBPUF9OT1RVUFRPSToKKyAgICBjYXNlIE9QX05PVE1JTlVQVE9JOgorICAgIGNhc2UgT1BfTk9URVhBQ1RJOgorICAgIGNhc2UgT1BfTk9UUE9TU1RBUkk6CisgICAgY2FzZSBPUF9OT1RQT1NQTFVTSToKKyAgICBjYXNlIE9QX05PVFBPU1FVRVJZSToKKyAgICBjYXNlIE9QX05PVFBPU1VQVE9JOgorICAgIGlmIChIQVNfRVhUUkFMRU4oY29kZVstMV0pKSBjb2RlICs9IEdFVF9FWFRSQUxFTihjb2RlWy0xXSk7CisgICAgYnJlYWs7CisgICAgfQorI2Vsc2UKKyAgKHZvaWQpKHV0Zik7ICAvKiBLZWVwIGNvbXBpbGVyIGhhcHB5IGJ5IHJlZmVyZW5jaW5nIGZ1bmN0aW9uIGFyZ3VtZW50ICovCisjZW5kaWYgIC8qIFNVUFBPUlRfV0lERV9DSEFSUyAqLworICB9Cit9CisKKy8qIEVuZCBvZiBwY3JlMl9hdXRvX3Bvc3Nlc3MuYyAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX2NoYXJ0YWJsZXMuYyBiL2Rpc3QyL3NyYy9wY3JlMl9jaGFydGFibGVzLmMKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uYWNhNDcxYwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9jaGFydGFibGVzLmMKQEAgLTAsMCArMSBAQAorcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QgYi9kaXN0Mi9zcmMvcGNyZTJfY2hhcnRhYmxlcy5jLmRpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAzY2IxYQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9jaGFydGFibGVzLmMuZGlzdApAQCAtMCwwICsxLDE5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZpbGUgY29udGFpbnMgY2hhcmFjdGVyIHRhYmxlcyB0aGF0IGFyZSB1c2VkIHdoZW4gbm8gZXh0ZXJuYWwgdGFibGVzCithcmUgcGFzc2VkIHRvIFBDUkUyIGJ5IHRoZSBhcHBsaWNhdGlvbiB0aGF0IGNhbGxzIGl0LiBUaGUgdGFibGVzIGFyZSB1c2VkIG9ubHkKK2ZvciBjaGFyYWN0ZXJzIHdob3NlIGNvZGUgdmFsdWVzIGFyZSBsZXNzIHRoYW4gMjU2LgorCitUaGlzIGlzIGEgZGVmYXVsdCB2ZXJzaW9uIG9mIHRoZSB0YWJsZXMgdGhhdCBhc3N1bWVzIEFTQ0lJIGVuY29kaW5nLiBBIHByb2dyYW0KK2NhbGxlZCBkZnRhYmxlcyAod2hpY2ggaXMgZGlzdHJpYnV0ZWQgd2l0aCBQQ1JFMikgY2FuIGJlIHVzZWQgdG8gYnVpbGQKK2FsdGVybmF0aXZlIHZlcnNpb25zIG9mIHRoaXMgZmlsZS4gVGhpcyBpcyBuZWNlc3NhcnkgaWYgeW91IGFyZSBydW5uaW5nIGluIGFuCitFQkNESUMgZW52aXJvbm1lbnQsIG9yIGlmIHlvdSB3YW50IHRvIGRlZmF1bHQgdG8gYSBkaWZmZXJlbnQgZW5jb2RpbmcsIGZvcgorZXhhbXBsZSBJU08tODg1OS0xLiBXaGVuIGRmdGFibGVzIGlzIHJ1biwgaXQgY3JlYXRlcyB0aGVzZSB0YWJsZXMgaW4gdGhlCitjdXJyZW50IGxvY2FsZS4gSWYgUENSRTIgaXMgY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLXJlYnVpbGQtY2hhcnRhYmxlcywgdGhpcworaGFwcGVucyBhdXRvbWF0aWNhbGx5LgorCitUaGUgZm9sbG93aW5nICNpbmNsdWRlcyBhcmUgcHJlc2VudCBiZWNhdXNlIHdpdGhvdXQgdGhlbSBnY2MgNC54IG1heSByZW1vdmUgdGhlCithcnJheSBkZWZpbml0aW9uIGZyb20gdGhlIGZpbmFsIGJpbmFyeSBpZiBQQ1JFMiBpcyBidWlsdCBpbnRvIGEgc3RhdGljIGxpYnJhcnkKK2FuZCBkZWFkIGNvZGUgc3RyaXBwaW5nIGlzIGFjdGl2YXRlZC4gVGhpcyBsZWFkcyB0byBsaW5rIGVycm9ycy4gUHVsbGluZyBpbiB0aGUKK2hlYWRlciBlbnN1cmVzIHRoYXQgdGhlIGFycmF5IGdldHMgZmxhZ2dlZCBhcyAic29tZW9uZSBvdXRzaWRlIHRoaXMgY29tcGlsYXRpb24KK3VuaXQgbWlnaHQgcmVmZXJlbmNlIHRoaXMiIGFuZCBzbyBpdCB3aWxsIGFsd2F5cyBiZSBzdXBwbGllZCB0byB0aGUgbGlua2VyLiAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJwY3JlMl9pbnRlcm5hbC5oIgorCitjb25zdCB1aW50OF90IFBSSVYoZGVmYXVsdF90YWJsZXMpW10gPSB7CisKKy8qIFRoaXMgdGFibGUgaXMgYSBsb3dlciBjYXNpbmcgdGFibGUuICovCisKKyAgICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywKKyAgICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwKKyAgIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywKKyAgIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwKKyAgIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwKKyAgIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywKKyAgIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwKKyAgIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywKKyAgIDY0LCA5NywgOTgsIDk5LDEwMCwxMDEsMTAyLDEwMywKKyAgMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwKKyAgMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwKKyAgMTIwLDEyMSwxMjIsIDkxLCA5MiwgOTMsIDk0LCA5NSwKKyAgIDk2LCA5NywgOTgsIDk5LDEwMCwxMDEsMTAyLDEwMywKKyAgMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwKKyAgMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwKKyAgMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDEyNywKKyAgMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwKKyAgMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywKKyAgMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwKKyAgMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwKKyAgMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywKKyAgMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwKKyAgMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywKKyAgMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwKKyAgMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwKKyAgMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywKKyAgMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwKKyAgMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywKKyAgMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwKKyAgMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwKKyAgMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywKKyAgMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwKKworLyogVGhpcyB0YWJsZSBpcyBhIGNhc2UgZmxpcHBpbmcgdGFibGUuICovCisKKyAgICAwLCAgMSwgIDIsICAzLCAgNCwgIDUsICA2LCAgNywKKyAgICA4LCAgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwKKyAgIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywKKyAgIDI0LCAyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwKKyAgIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwKKyAgIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywKKyAgIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwKKyAgIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDYyLCA2MywKKyAgIDY0LCA5NywgOTgsIDk5LDEwMCwxMDEsMTAyLDEwMywKKyAgMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwKKyAgMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwKKyAgMTIwLDEyMSwxMjIsIDkxLCA5MiwgOTMsIDk0LCA5NSwKKyAgIDk2LCA2NSwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwKKyAgIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwKKyAgIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywKKyAgIDg4LCA4OSwgOTAsMTIzLDEyNCwxMjUsMTI2LDEyNywKKyAgMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwKKyAgMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywKKyAgMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwKKyAgMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwKKyAgMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywKKyAgMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwKKyAgMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywKKyAgMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwKKyAgMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwKKyAgMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywKKyAgMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwKKyAgMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywKKyAgMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwKKyAgMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwKKyAgMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywKKyAgMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwKKworLyogVGhpcyB0YWJsZSBjb250YWlucyBiaXQgbWFwcyBmb3IgdmFyaW91cyBjaGFyYWN0ZXIgY2xhc3Nlcy4gRWFjaCBtYXAgaXMgMzIKK2J5dGVzIGxvbmcgYW5kIHRoZSBiaXRzIHJ1biBmcm9tIHRoZSBsZWFzdCBzaWduaWZpY2FudCBlbmQgb2YgZWFjaCBieXRlLiBUaGUKK2NsYXNzZXMgdGhhdCBoYXZlIHRoZWlyIG93biBtYXBzIGFyZTogc3BhY2UsIHhkaWdpdCwgZGlnaXQsIHVwcGVyLCBsb3dlciwgd29yZCwKK2dyYXBoLCBwcmludCwgcHVuY3QsIGFuZCBjbnRybC4gT3RoZXIgY2xhc3NlcyBhcmUgYnVpbHQgZnJvbSBjb21iaW5hdGlvbnMuICovCisKKyAgMHgwMCwweDNlLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMywKKyAgMHg3ZSwweDAwLDB4MDAsMHgwMCwweDdlLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDMsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweGZlLDB4ZmYsMHhmZiwweDA3LDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweGZlLDB4ZmYsMHhmZiwweDA3LAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDMsCisgIDB4ZmUsMHhmZiwweGZmLDB4ODcsMHhmZSwweGZmLDB4ZmYsMHgwNywKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweGZlLDB4ZmYsMHhmZiwweGZmLAorICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4N2YsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4ZmYsMHhmZiwKKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmUsMHhmZiwweDAwLDB4ZmMsCisgIDB4MDEsMHgwMCwweDAwLDB4ZjgsMHgwMSwweDAwLDB4MDAsMHg3OCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisKKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCisvKiBUaGlzIHRhYmxlIGlkZW50aWZpZXMgdmFyaW91cyBjbGFzc2VzIG9mIGNoYXJhY3RlciBieSBpbmRpdmlkdWFsIGJpdHM6CisgIDB4MDEgICB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXIKKyAgMHgwMiAgIGxldHRlcgorICAweDA0ICAgZGVjaW1hbCBkaWdpdAorICAweDA4ICAgaGV4YWRlY2ltYWwgZGlnaXQKKyAgMHgxMCAgIGFscGhhbnVtZXJpYyBvciAnXycKKyAgMHg4MCAgIHJlZ3VsYXIgZXhwcmVzc2lvbiBtZXRhY2hhcmFjdGVyIG9yIGJpbmFyeSB6ZXJvCisqLworCisgIDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogICAwLSAgNyAqLworICAweDAwLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAwLDB4MDAsIC8qICAgOC0gMTUgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAgMTYtIDIzICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogIDI0LSAzMSAqLworICAweDAxLDB4MDAsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsIC8qICAgIC0gJyAgKi8KKyAgMHg4MCwweDgwLDB4ODAsMHg4MCwweDAwLDB4MDAsMHg4MCwweDAwLCAvKiAgKCAtIC8gICovCisgIDB4MWMsMHgxYywweDFjLDB4MWMsMHgxYywweDFjLDB4MWMsMHgxYywgLyogIDAgLSA3ICAqLworICAweDFjLDB4MWMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsIC8qICA4IC0gPyAgKi8KKyAgMHgwMCwweDFhLDB4MWEsMHgxYSwweDFhLDB4MWEsMHgxYSwweDEyLCAvKiAgQCAtIEcgICovCisgIDB4MTIsMHgxMiwweDEyLDB4MTIsMHgxMiwweDEyLDB4MTIsMHgxMiwgLyogIEggLSBPICAqLworICAweDEyLDB4MTIsMHgxMiwweDEyLDB4MTIsMHgxMiwweDEyLDB4MTIsIC8qICBQIC0gVyAgKi8KKyAgMHgxMiwweDEyLDB4MTIsMHg4MCwweDgwLDB4MDAsMHg4MCwweDEwLCAvKiAgWCAtIF8gICovCisgIDB4MDAsMHgxYSwweDFhLDB4MWEsMHgxYSwweDFhLDB4MWEsMHgxMiwgLyogIGAgLSBnICAqLworICAweDEyLDB4MTIsMHgxMiwweDEyLDB4MTIsMHgxMiwweDEyLDB4MTIsIC8qICBoIC0gbyAgKi8KKyAgMHgxMiwweDEyLDB4MTIsMHgxMiwweDEyLDB4MTIsMHgxMiwweDEyLCAvKiAgcCAtIHcgICovCisgIDB4MTIsMHgxMiwweDEyLDB4ODAsMHg4MCwweDAwLDB4MDAsMHgwMCwgLyogIHggLTEyNyAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDEyOC0xMzUgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAxMzYtMTQzICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogMTQ0LTE1MSAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDE1Mi0xNTkgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAxNjAtMTY3ICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogMTY4LTE3NSAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDE3Ni0xODMgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAxODQtMTkxICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogMTkyLTE5OSAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDIwMC0yMDcgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAyMDgtMjE1ICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogMjE2LTIyMyAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDIyNC0yMzEgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAyMzItMjM5ICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogMjQwLTI0NyAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9Oy8qIDI0OC0yNTUgKi8KKworLyogRW5kIG9mIHBjcmUyX2NoYXJ0YWJsZXMuYyAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX2NvbXBpbGUuYyBiL2Rpc3QyL3NyYy9wY3JlMl9jb21waWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg1MjgzNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9jb21waWxlLmMKQEAgLTAsMCArMSw5MDA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjZGVmaW5lIE5MQkxPQ0sgY2IgICAgICAgICAgICAgLyogQmxvY2sgY29udGFpbmluZyBuZXdsaW5lIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBTU1RBUlQgc3RhcnRfcGF0dGVybiAgLyogRmllbGQgY29udGFpbmluZyBwcm9jZXNzZWQgc3RyaW5nIHN0YXJ0ICovCisjZGVmaW5lIFBTRU5EICAgZW5kX3BhdHRlcm4gICAgLyogRmllbGQgY29udGFpbmluZyBwcm9jZXNzZWQgc3RyaW5nIGVuZCAqLworCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKworLyogSW4gcmFyZSBlcnJvciBjYXNlcyBkZWJ1Z2dpbmcgbWlnaHQgcmVxdWlyZSBjYWxsaW5nIHBjcmUyX3ByaW50aW50KCkuICovCisKKyNpZiAwCisjaWZkZWYgRUJDRElDCisjZGVmaW5lIFBSSU5UQUJMRShjKSAoKGMpID49IDY0ICYmIChjKSA8IDI1NSkKKyNlbHNlCisjZGVmaW5lIFBSSU5UQUJMRShjKSAoKGMpID49IDMyICYmIChjKSA8IDEyNykKKyNlbmRpZgorI2luY2x1ZGUgInBjcmUyX3ByaW50aW50LmMiCisjZGVmaW5lIENBTExfUFJJTlRJTlQKKyNlbmRpZgorCisvKiBUaGVyZSBhcmUgYSBmZXcgdGhpbmdzIHRoYXQgdmFyeSB3aXRoIGRpZmZlcmVudCBjb2RlIHVuaXQgc2l6ZXMuIEhhbmRsZSB0aGVtCitieSBkZWZpbmluZyBtYWNyb3MgaW4gb3JkZXIgdG8gbWluaW1pemUgI2lmIHVzYWdlLiAqLworCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyNkZWZpbmUgU1RSSU5HX1VURm5fUklHSFRQQVIgICAgIFNUUklOR19VVEY4X1JJR0hUUEFSLCA1CisjZGVmaW5lIFhESUdJVChjKSAgICAgICAgICAgICAgICB4ZGlnaXRhYltjXQorCisjZWxzZSAgLyogRWl0aGVyIDE2LWJpdCBvciAzMi1iaXQgKi8KKyNkZWZpbmUgWERJR0lUKGMpICAgICAgICAgICAgICAgIChNQVhfMjU1KGMpPyB4ZGlnaXRhYltjXSA6IDB4ZmYpCisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYKKyNkZWZpbmUgU1RSSU5HX1VURm5fUklHSFRQQVIgICAgIFNUUklOR19VVEYxNl9SSUdIVFBBUiwgNgorCisjZWxzZSAgLyogMzItYml0ICovCisjZGVmaW5lIFNUUklOR19VVEZuX1JJR0hUUEFSICAgICBTVFJJTkdfVVRGMzJfUklHSFRQQVIsIDYKKyNlbmRpZgorI2VuZGlmCisKKy8qIEZ1bmN0aW9uIGRlZmluaXRpb25zIHRvIGFsbG93IG11dHVhbCByZWN1cnNpb24gKi8KKworc3RhdGljIGludAorICBhZGRfbGlzdF90b19jbGFzcyh1aW50OF90ICosIFBDUkUyX1VDSEFSICoqLCB1aW50MzJfdCwgY29tcGlsZV9ibG9jayAqLAorICAgIGNvbnN0IHVpbnQzMl90ICosIHVuc2lnbmVkIGludCk7CisKK3N0YXRpYyBCT09MCisgIGNvbXBpbGVfcmVnZXgodWludDMyX3QsIFBDUkUyX1VDSEFSICoqLCBQQ1JFMl9TUFRSICosIGludCAqLCBCT09MLCBCT09MLAorICAgIHVpbnQzMl90LCBpbnQsIHVpbnQzMl90ICosIGludDMyX3QgKiwgdWludDMyX3QgKiwgaW50MzJfdCAqLAorICAgIGJyYW5jaF9jaGFpbiAqLCBjb21waWxlX2Jsb2NrICosIHNpemVfdCAqKTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgQ29kZSBwYXJhbWV0ZXJzIGFuZCBzdGF0aWMgdGFibGVzICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyB2YWx1ZSBzcGVjaWZpZXMgdGhlIHNpemUgb2Ygc3RhY2sgd29ya3NwYWNlLCB3aGljaCBpcyB1c2VkIGluIGRpZmZlcmVudAord2F5cyBpbiB0aGUgZGlmZmVyZW50IHBhdHRlcm4gc2NhbnMuIFRoZSBncm91cC1pZGVudGlmeWluZyBwcmUtc2NhbiB1c2VzIGl0IHRvCitoYW5kbGUgbmVzdGluZywgYW5kIG5lZWRzIGl0IHRvIGJlIDE2LWJpdCBhbGlnbmVkLgorCitEdXJpbmcgdGhlIGZpcnN0IGNvbXBpbGluZyBwaGFzZSwgd2hlbiBkZXRlcm1pbmluZyBob3cgbXVjaCBtZW1vcnkgaXMgcmVxdWlyZWQsCit0aGUgcmVnZXggaXMgcGFydGx5IGNvbXBpbGVkIGludG8gdGhpcyBzcGFjZSwgYnV0IHRoZSBjb21waWxlZCBwYXJ0cyBhcmUKK2Rpc2NhcmRlZCBhcyBzb29uIGFzIHRoZXkgY2FuIGJlLCBzbyB0aGF0IGhvcGVmdWxseSB0aGVyZSB3aWxsIG5ldmVyIGJlIGFuCitvdmVycnVuLiBUaGUgY29kZSBkb2VzLCBob3dldmVyLCBjaGVjayBmb3IgYW4gb3ZlcnJ1biwgd2hpY2ggY2FuIG9jY3VyIGZvcgorcGF0aG9sb2dpY2FsIHBhdHRlcm5zLiBUaGUgc2l6ZSBvZiB0aGUgd29ya3NwYWNlIGRlcGVuZHMgb24gTElOS19TSVpFIGJlY2F1c2UKK3RoZSBsZW5ndGggb2YgY29tcGlsZWQgaXRlbXMgdmFyaWVzIHdpdGggdGhpcy4KKworSW4gdGhlIHJlYWwgY29tcGlsZSBwaGFzZSwgdGhlIHdvcmtzcGFjZSBpcyB1c2VkIGZvciByZW1lbWJlcmluZyBkYXRhIGFib3V0CitudW1iZXJlZCBncm91cHMsIHByb3ZpZGVkIHRoZXJlIGFyZSBub3QgdG9vIG1hbnkgb2YgdGhlbSAoaWYgdGhlcmUgYXJlLCBleHRyYQorbWVtb3J5IGlzIGFjcXVpcmVkKS4gRm9yIHRoaXMgcGhhc2UgdGhlIG1lbW9yeSBtdXN0IGJlIDMyLWJpdCBhbGlnbmVkLiBIYXZpbmcKK2RlZmluZWQgdGhlIHNpemUgaW4gY29kZSB1bml0cywgd2Ugc2V0IHVwIEMzMl9XT1JLX1NJWkUgYXMgdGhlIG51bWJlciBvZgorZWxlbWVudHMgaW4gdGhlIDMyLWJpdCB2ZWN0b3IuICovCisKKyNkZWZpbmUgQ09NUElMRV9XT1JLX1NJWkUgKDIwNDgqTElOS19TSVpFKSAgIC8qIFNpemUgaW4gY29kZSB1bml0cyAqLworCisjZGVmaW5lIEMzMl9XT1JLX1NJWkUgXAorICAoKENPTVBJTEVfV09SS19TSVpFICogc2l6ZW9mKFBDUkUyX1VDSEFSKSkvc2l6ZW9mKHVpbnQzMl90KSkKKworLyogVGhlIG92ZXJydW4gdGVzdHMgY2hlY2sgZm9yIGEgc2xpZ2h0bHkgc21hbGxlciBzaXplIHNvIHRoYXQgdGhleSBkZXRlY3QgdGhlCitvdmVycnVuIGJlZm9yZSBpdCBhY3R1YWxseSBkb2VzIHJ1biBvZmYgdGhlIGVuZCBvZiB0aGUgZGF0YSBibG9jay4gKi8KKworI2RlZmluZSBXT1JLX1NJWkVfU0FGRVRZX01BUkdJTiAoMTAwKQorCisvKiBUaGlzIHZhbHVlIGRldGVybWluZXMgdGhlIHNpemUgb2YgdGhlIGluaXRpYWwgdmVjdG9yIHRoYXQgaXMgdXNlZCBmb3IKK3JlbWVtYmVyaW5nIG5hbWVkIGdyb3VwcyBkdXJpbmcgdGhlIHByZS1jb21waWxlLiBJdCBpcyBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrLAorYnV0IGlmIGl0IGlzIHRvbyBzbWFsbCwgaXQgaXMgZXhwYW5kZWQsIGluIGEgc2ltaWxhciB3YXkgdG8gdGhlIHdvcmtzcGFjZS4gVGhlCit2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIHNsb3RzIGluIHRoZSBsaXN0LiAqLworCisjZGVmaW5lIE5BTUVEX0dST1VQX0xJU1RfU0laRSAgMjAKKworLyogVGhlIG9yaWdpbmFsIFBDUkUgcmVxdWlyZWQgcGF0dGVybnMgdG8gYmUgemVyby10ZXJtaW5hdGVkLCBhbmQgaXQgc2ltcGxpZmllcwordGhlIGNvbXBpbGluZyBjb2RlIGlmIGl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGVyZSBpcyBhIHplcm8gY29kZSB1bml0IGF0IHRoZQorZW5kIG9mIHRoZSBwYXR0ZXJuLCBiZWNhdXNlIHRoaXMgbWVhbnMgdGhhdCB0ZXN0cyBmb3IgY29kaW5nIHNlcXVlbmNlcyBzdWNoIGFzCisoKlNLSVApIG9yIGV2ZW4ganVzdCAoPzw9IGNhbiBjaGVjayBhIHNlcXVlbmNlIG9mIGNvZGUgdW5pdHMgd2l0aG91dCBoYXZpbmcgdG8KK2tlZXAgY2hlY2tpbmcgZm9yIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4uIFRoZSBuZXcgUENSRTIgQVBJIGFsbG93cyB6ZXJvIGNvZGUKK3VuaXRzIHdpdGhpbiBwYXR0ZXJucyBpZiBhIHBvc2l0aXZlIGxlbmd0aCBpcyBnaXZlbiwgYnV0IGluIG9yZGVyIHRvIGtlZXAgbW9zdAorb2YgdGhlIGNvbXBpbGluZyBjb2RlIGFzIGl0IHdhcywgd2UgY29weSBzdWNoIHBhdHRlcm5zIGFuZCBhZGQgYSB6ZXJvIG9uIHRoZQorZW5kLiBUaGlzIHZhbHVlIGRldGVybWluZXMgdGhlIHNpemUgb2Ygc3BhY2Ugb24gdGhlIHN0YWNrIHRoYXQgaXMgdXNlZCBpZiB0aGUKK3BhdHRlcm4gZml0czsgaWYgbm90LCBoZWFwIG1lbW9yeSBpcyB1c2VkLiAqLworCisjZGVmaW5lIENPUElFRF9QQVRURVJOX1NJWkUgMTAyNAorCisvKiBNYXhpbXVtIGxlbmd0aCB2YWx1ZSB0byBjaGVjayBhZ2FpbnN0IHdoZW4gbWFraW5nIHN1cmUgdGhhdCB0aGUgdmFyaWFibGUKK3RoYXQgaG9sZHMgdGhlIGNvbXBpbGVkIHBhdHRlcm4gbGVuZ3RoIGRvZXMgbm90IG92ZXJmbG93LiBXZSBtYWtlIGl0IGEgYml0IGxlc3MKK3RoYW4gSU5UX01BWCB0byBhbGxvdyBmb3IgYWRkaW5nIGluIGdyb3VwIHRlcm1pbmF0aW5nIGJ5dGVzLCBzbyB0aGF0IHdlIGRvbid0CitoYXZlIHRvIGNoZWNrIHRoZW0gZXZlcnkgdGltZS4gKi8KKworI2RlZmluZSBPRkxPV19NQVggKElOVF9NQVggLSAyMCkKKworLyogTWFjcm8gZm9yIHNldHRpbmcgaW5kaXZpZHVhbCBiaXRzIGluIGNsYXNzIGJpdG1hcHMuICovCisKKyNkZWZpbmUgU0VUQklUKGEsYikgYVsoYikvOF0gfD0gKDEgPDwgKChiKSY3KSkKKworLyogUHJpdmF0ZSBmbGFncyBhZGRlZCB0byBmaXJzdGN1IGFuZCByZXFjdS4gKi8KKworI2RlZmluZSBSRVFfQ0FTRUxFU1MgICAgKDEgPDwgMCkgICAgICAgIC8qIEluZGljYXRlcyBjYXNlbGVzc25lc3MgKi8KKyNkZWZpbmUgUkVRX1ZBUlkgICAgICAgICgxIDw8IDEpICAgICAgICAvKiByZXFjdSBmb2xsb3dlZCBub24tbGl0ZXJhbCBpdGVtICovCisvKiBOZWdhdGl2ZSB2YWx1ZXMgZm9yIHRoZSBmaXJzdGN1IGFuZCByZXFjdSBmbGFncyAqLworI2RlZmluZSBSRVFfVU5TRVQgICAgICAgKC0yKSAgICAgICAgICAgIC8qIE5vdCB5ZXQgZm91bmQgYW55dGhpbmcgKi8KKyNkZWZpbmUgUkVRX05PTkUgICAgICAgICgtMSkgICAgICAgICAgICAvKiBGb3VuZCBub3QgZml4ZWQgY2hhciAqLworCisvKiBUaGVzZSBmbGFncyBhcmUgdXNlZCBpbiB0aGUgZ3JvdXBpbmZvIHZlY3Rvci4gKi8KKworI2RlZmluZSBHSV9TRVRfQ09VTERfQkVfRU1QVFkgIDB4ODAwMDAwMDB1CisjZGVmaW5lIEdJX0NPVUxEX0JFX0VNUFRZICAgICAgMHg0MDAwMDAwMHUKKyNkZWZpbmUgR0lfTk9UX0ZJWEVEX0xFTkdUSCAgICAweDIwMDAwMDAwdQorI2RlZmluZSBHSV9TRVRfRklYRURfTEVOR1RIICAgIDB4MTAwMDAwMDB1CisjZGVmaW5lIEdJX0ZJWEVEX0xFTkdUSF9NQVNLICAgMHgwMDAwZmZmZnUKKworLyogVGhpcyBiaXQgKHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiBhbnkgVVRGIHZhbHVlKSBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgYQordmFyaWFibGUgY29udGFpbnMgYSBudW1iZXIgb2YgY29kZSB1bml0cyBpbnN0ZWFkIG9mIGFuIGFjdHVhbCBjb2RlIHBvaW50LiAqLworCisjZGVmaW5lIFVURl9MRU5HVEggICAgIDB4MTAwMDAwMDBsCisKKy8qIFRoaXMgc2ltcGxlIHRlc3QgZm9yIGEgZGVjaW1hbCBkaWdpdCB3b3JrcyBmb3IgYm90aCBBU0NJSS9Vbmljb2RlIGFuZCBFQkNESUMKK2FuZCBpcyBmYXN0IChhIGdvb2QgY29tcGlsZXIgY2FuIHR1cm4gaXQgaW50byBhIHN1YnRyYWN0aW9uIGFuZCB1bnNpZ25lZAorY29tcGFyaXNvbikuICovCisKKyNkZWZpbmUgSVNfRElHSVQoeCkgKCh4KSA+PSBDSEFSXzAgJiYgKHgpIDw9IENIQVJfOSkKKworLyogVGFibGUgdG8gaWRlbnRpZnkgaGV4IGRpZ2l0cy4gVGhlIHRhYmxlcyBpbiBjaGFydGFibGVzIGFyZSBkZXBlbmRlbnQgb24gdGhlCitsb2NhbGUsIGFuZCBtYXkgbWFyayBhcmJpdHJhcnkgY2hhcmFjdGVycyBhcyBkaWdpdHMuIFdlIHdhbnQgdG8gcmVjb2duaXplIG9ubHkKKzAtOSwgYS16LCBhbmQgQS1aIGFzIGhleCBkaWdpdHMsIHdoaWNoIGlzIHdoeSB3ZSBoYXZlIGEgcHJpdmF0ZSB0YWJsZSBoZXJlLiBJdAorY29zdHMgMjU2IGJ5dGVzLCBidXQgaXQgaXMgYSBsb3QgZmFzdGVyIHRoYW4gZG9pbmcgY2hhcmFjdGVyIHZhbHVlIHRlc3RzIChhdAorbGVhc3QgaW4gc29tZSBzaW1wbGUgY2FzZXMgSSB0aW1lZCksIGFuZCBpbiBzb21lIGFwcGxpY2F0aW9ucyBvbmUgd2FudHMgUENSRSB0bworY29tcGlsZSBlZmZpY2llbnRseSBhcyB3ZWxsIGFzIG1hdGNoIGVmZmljaWVudGx5LiBUaGUgdmFsdWUgaW4gdGhlIHRhYmxlIGlzCit0aGUgYmluYXJ5IGhleCBkaWdpdCB2YWx1ZSwgb3IgMHhmZiBmb3Igbm9uLWhleCBkaWdpdHMuICovCisKKy8qIFRoaXMgaXMgdGhlICJub3JtYWwiIGNhc2UsIGZvciBBU0NJSSBzeXN0ZW1zLCBhbmQgRUJDRElDIHN5c3RlbXMgcnVubmluZyBpbgorVVRGLTggbW9kZS4gKi8KKworI2lmbmRlZiBFQkNESUMKK3N0YXRpYyBjb25zdCB1aW50OF90IHhkaWdpdGFiW10gPQorICB7CisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogICAwLSAgNyAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICAgOC0gMTUgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAgMTYtIDIzICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogIDI0LSAzMSAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICAgIC0gJyAgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAgKCAtIC8gICovCisgIDB4MDAsMHgwMSwweDAyLDB4MDMsMHgwNCwweDA1LDB4MDYsMHgwNywgLyogIDAgLSA3ICAqLworICAweDA4LDB4MDksMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICA4IC0gPyAgKi8KKyAgMHhmZiwweDBhLDB4MGIsMHgwYywweDBkLDB4MGUsMHgwZiwweGZmLCAvKiAgQCAtIEcgICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogIEggLSBPICAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICBQIC0gVyAgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAgWCAtIF8gICovCisgIDB4ZmYsMHgwYSwweDBiLDB4MGMsMHgwZCwweDBlLDB4MGYsMHhmZiwgLyogIGAgLSBnICAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICBoIC0gbyAgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAgcCAtIHcgICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogIHggLTEyNyAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qIDEyOC0xMzUgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAxMzYtMTQzICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogMTQ0LTE1MSAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qIDE1Mi0xNTkgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAxNjAtMTY3ICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogMTY4LTE3NSAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qIDE3Ni0xODMgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAxODQtMTkxICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogMTkyLTE5OSAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qIDJmZi0yMDcgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAyMDgtMjE1ICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogMjE2LTIyMyAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qIDIyNC0yMzEgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAyMzItMjM5ICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogMjQwLTI0NyAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmZ9Oy8qIDI0OC0yNTUgKi8KKworI2Vsc2UKKworLyogVGhpcyBpcyB0aGUgImFibm9ybWFsIiBjYXNlLCBmb3IgRUJDRElDIHN5c3RlbXMgbm90IHJ1bm5pbmcgaW4gVVRGLTggbW9kZS4gKi8KKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgeGRpZ2l0YWJbXSA9CisgIHsKKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAgIDAtICA3ICAwICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogICA4LSAxNSAgICAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICAxNi0gMjMgMTAgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAgMjQtIDMxICAgICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogIDMyLSAzOSAyMCAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICA0MC0gNDcgICAgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAgNDgtIDU1IDMwICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogIDU2LSA2MyAgICAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICAgIC0gNzEgNDAgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAgNzItIHwgICAgICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogICYgLSA4NyA1MCAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICA4OC0gOTUgICAgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAgLSAtMTAzIDYwICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogMTA0LSA/ICAgICAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qIDExMi0xMTkgNzAgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAxMjAtICIgICAgICovCisgIDB4ZmYsMHgwYSwweDBiLDB4MGMsMHgwZCwweDBlLDB4MGYsMHhmZiwgLyogMTI4LSBnICA4MCAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICBoIC0xNDMgICAgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAxNDQtIHAgIDkwICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogIHEgLTE1OSAgICAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qIDE2MC0geCAgQTAgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAgeSAtMTc1ICAgICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogIF4gLTE4MyBCMCAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qIDE4NC0xOTEgICAgKi8KKyAgMHhmZiwweDBhLDB4MGIsMHgwYywweDBkLDB4MGUsMHgwZiwweGZmLCAvKiAgeyAtIEcgIEMwICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogIEggLTIwNyAgICAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICB9IC0gUCAgRDAgKi8KKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLCAvKiAgUSAtMjIzICAgICovCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwgLyogIFwgLSBYICBFMCAqLworICAweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsIC8qICBZIC0yMzkgICAgKi8KKyAgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LCAvKiAgMCAtIDcgIEYwICovCisgIDB4MDgsMHgwOSwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn07LyogIDggLTI1NSAgICAqLworI2VuZGlmICAvKiBFQkNESUMgKi8KKworCisvKiBUYWJsZSBmb3IgaGFuZGxpbmcgYWxwaGFudW1lcmljIGVzY2FwZWQgY2hhcmFjdGVycy4gUG9zaXRpdmUgcmV0dXJucyBhcmUKK3NpbXBsZSBkYXRhIHZhbHVlczsgbmVnYXRpdmUgdmFsdWVzIGFyZSBmb3Igc3BlY2lhbCB0aGluZ3MgbGlrZSBcZCBhbmQgc28gb24uCitaZXJvIG1lYW5zIGZ1cnRoZXIgcHJvY2Vzc2luZyBpcyBuZWVkZWQgKGZvciB0aGluZ3MgbGlrZSBceCksIG9yIHRoZSBlc2NhcGUgaXMKK2ludmFsaWQuICovCisKKy8qIFRoaXMgaXMgdGhlICJub3JtYWwiIHRhYmxlIGZvciBBU0NJSSBzeXN0ZW1zIG9yIGZvciBFQkNESUMgc3lzdGVtcyBydW5uaW5nCitpbiBVVEYtOCBtb2RlLiBJdCBydW5zIGZyb20gJzAnIHRvICd6Jy4gKi8KKworI2lmbmRlZiBFQkNESUMKKyNkZWZpbmUgRVNDQVBFU19GSVJTVCAgICAgICBDSEFSXzAKKyNkZWZpbmUgRVNDQVBFU19MQVNUICAgICAgICBDSEFSX3oKKyNkZWZpbmUgVVBQRVJfQ0FTRShjKSAgICAgICAoYy0zMikKKworc3RhdGljIGNvbnN0IHNob3J0IGludCBlc2NhcGVzW10gPSB7CisgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgQ0hBUl9DT0xPTiwgICAgICAgICAgICAgIENIQVJfU0VNSUNPTE9OLAorICAgICBDSEFSX0xFU1NfVEhBTl9TSUdOLCAgICAgQ0hBUl9FUVVBTFNfU0lHTiwKKyAgICAgQ0hBUl9HUkVBVEVSX1RIQU5fU0lHTiwgIENIQVJfUVVFU1RJT05fTUFSSywKKyAgICAgQ0hBUl9DT01NRVJDSUFMX0FULCAgICAgIC1FU0NfQSwKKyAgICAgLUVTQ19CLCAgICAgICAgICAgICAgICAgIC1FU0NfQywKKyAgICAgLUVTQ19ELCAgICAgICAgICAgICAgICAgIC1FU0NfRSwKKyAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIC1FU0NfRywKKyAgICAgLUVTQ19ILCAgICAgICAgICAgICAgICAgIDAsCisgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAtRVNDX0ssCisgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAtRVNDX04sICAgICAgICAgICAgICAgICAgMCwKKyAgICAgLUVTQ19QLCAgICAgICAgICAgICAgICAgIC1FU0NfUSwKKyAgICAgLUVTQ19SLCAgICAgICAgICAgICAgICAgIC1FU0NfUywKKyAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgIC1FU0NfViwgICAgICAgICAgICAgICAgICAtRVNDX1csCisgICAgIC1FU0NfWCwgICAgICAgICAgICAgICAgICAwLAorICAgICAtRVNDX1osICAgICAgICAgICAgICAgICAgQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VULAorICAgICBDSEFSX0JBQ0tTTEFTSCwgICAgICAgICAgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCwKKyAgICAgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVCwgIENIQVJfVU5ERVJTQ09SRSwKKyAgICAgQ0hBUl9HUkFWRV9BQ0NFTlQsICAgICAgIEVTQ19hLAorICAgICAtRVNDX2IsICAgICAgICAgICAgICAgICAgMCwKKyAgICAgLUVTQ19kLCAgICAgICAgICAgICAgICAgIEVTQ19lLAorICAgICBFU0NfZiwgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgLUVTQ19oLCAgICAgICAgICAgICAgICAgIDAsCisgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAtRVNDX2ssCisgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICBFU0NfbiwgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgLUVTQ19wLCAgICAgICAgICAgICAgICAgIDAsCisgICAgIEVTQ19yLCAgICAgICAgICAgICAgICAgICAtRVNDX3MsCisgICAgIEVTQ190ZWUsICAgICAgICAgICAgICAgICAwLAorICAgICAtRVNDX3YsICAgICAgICAgICAgICAgICAgLUVTQ193LAorICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgLUVTQ196Cit9OworCisjZWxzZQorCisvKiBUaGlzIGlzIHRoZSAiYWJub3JtYWwiIHRhYmxlIGZvciBFQkNESUMgc3lzdGVtcyB3aXRob3V0IFVURi04IHN1cHBvcnQuCitJdCBydW5zIGZyb20gJ2EnIHRvICc5Jy4gRm9yIHNvbWUgbWluaW1hbCB0ZXN0aW5nIG9mIEVCQ0RJQyBmZWF0dXJlcywgdGhlIGNvZGUKK2lzIHNvbWV0aW1lcyBjb21waWxlZCBvbiBhbiBBU0NJSSBzeXN0ZW0uIEluIHRoaXMgY2FzZSwgd2UgbXVzdCBub3QgdXNlIENIQVJfYQorYmVjYXVzZSBpdCBpcyBkZWZpbmVkIGFzICdhJywgd2hpY2ggb2YgY291cnNlIHBpY2tzIHVwIHRoZSBBU0NJSSB2YWx1ZS4gKi8KKworI2lmICdhJyA9PSAweDgxICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBmb3IgYSByZWFsIEVCQ0RJQyBlbnZpcm9ubWVudCAqLworI2RlZmluZSBFU0NBUEVTX0ZJUlNUICAgICAgIENIQVJfYQorI2RlZmluZSBFU0NBUEVTX0xBU1QgICAgICAgIENIQVJfOQorI2RlZmluZSBVUFBFUl9DQVNFKGMpICAgICAgIChjKzY0KQorI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXN0aW5nIGluIGFuIEFTQ0lJIGVudmlyb25tZW50ICovCisjZGVmaW5lIEVTQ0FQRVNfRklSU1QgICgodW5zaWduZWQgY2hhciknXHg4MScpICAgLyogRUJDRElDICdhJyAqLworI2RlZmluZSBFU0NBUEVTX0xBU1QgICAoKHVuc2lnbmVkIGNoYXIpJ1x4ZjknKSAgIC8qIEVCQ0RJQyAnOScgKi8KKyNkZWZpbmUgVVBQRVJfQ0FTRShjKSAgKGMtMzIpCisjZW5kaWYKKworc3RhdGljIGNvbnN0IHNob3J0IGludCBlc2NhcGVzW10gPSB7CisvKiAgODAgKi8gICAgICAgIEVTQ19hLCAtRVNDX2IsICAgICAgIDAsIC1FU0NfZCwgRVNDX2UsICBFU0NfZiwgICAgICAwLAorLyogIDg4ICovLUVTQ19oLCAgICAgMCwgICAgICAwLCAgICAgJ3snLCAgICAgIDAsICAgICAwLCAgICAgIDAsICAgICAgMCwKKy8qICA5MCAqLyAgICAgMCwgICAgIDAsIC1FU0NfaywgICAgICAgMCwgICAgICAwLCBFU0NfbiwgICAgICAwLCAtRVNDX3AsCisvKiAgOTggKi8gICAgIDAsIEVTQ19yLCAgICAgIDAsICAgICAnfScsICAgICAgMCwgICAgIDAsICAgICAgMCwgICAgICAwLAorLyogIEEwICovICAgICAwLCAgICd+JywgLUVTQ19zLCBFU0NfdGVlLCAgICAgIDAsLUVTQ192LCAtRVNDX3csICAgICAgMCwKKy8qICBBOCAqLyAgICAgMCwtRVNDX3osICAgICAgMCwgICAgICAgMCwgICAgICAwLCAgICdbJywgICAgICAwLCAgICAgIDAsCisvKiAgQjAgKi8gICAgIDAsICAgICAwLCAgICAgIDAsICAgICAgIDAsICAgICAgMCwgICAgIDAsICAgICAgMCwgICAgICAwLAorLyogIEI4ICovICAgICAwLCAgICAgMCwgICAgICAwLCAgICAgICAwLCAgICAgIDAsICAgJ10nLCAgICAnPScsICAgICctJywKKy8qICBDMCAqLyAgICd7JywtRVNDX0EsIC1FU0NfQiwgIC1FU0NfQywgLUVTQ19ELC1FU0NfRSwgICAgICAwLCAtRVNDX0csCisvKiAgQzggKi8tRVNDX0gsICAgICAwLCAgICAgIDAsICAgICAgIDAsICAgICAgMCwgICAgIDAsICAgICAgMCwgICAgICAwLAorLyogIEQwICovICAgJ30nLCAgICAgMCwgLUVTQ19LLCAgICAgICAwLCAgICAgIDAsLUVTQ19OLCAgICAgIDAsIC1FU0NfUCwKKy8qICBEOCAqLy1FU0NfUSwtRVNDX1IsICAgICAgMCwgICAgICAgMCwgICAgICAwLCAgICAgMCwgICAgICAwLCAgICAgIDAsCisvKiAgRTAgKi8gICdcXCcsICAgICAwLCAtRVNDX1MsICAgICAgIDAsICAgICAgMCwtRVNDX1YsIC1FU0NfVywgLUVTQ19YLAorLyogIEU4ICovICAgICAwLC1FU0NfWiwgICAgICAwLCAgICAgICAwLCAgICAgIDAsICAgICAwLCAgICAgIDAsICAgICAgMCwKKy8qICBGMCAqLyAgICAgMCwgICAgIDAsICAgICAgMCwgICAgICAgMCwgICAgICAwLCAgICAgMCwgICAgICAwLCAgICAgIDAsCisvKiAgRjggKi8gICAgIDAsICAgICAwCit9OworCisvKiBXZSBhbHNvIG5lZWQgYSB0YWJsZSBvZiBjaGFyYWN0ZXJzIHRoYXQgbWF5IGZvbGxvdyBcYyBpbiBhbiBFQkNESUMKK2Vudmlyb25tZW50IGZvciBjaGFyYWN0ZXJzIDAtMzEuICovCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGViY2RpY19lc2NhcGVfY1tdID0gIkBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eXyI7CisKKyNlbmRpZiAgIC8qIEVCQ0RJQyAqLworCisKKy8qIFRhYmxlIG9mIHNwZWNpYWwgInZlcmJzIiBsaWtlICgqUFJVTkUpLiBUaGlzIGlzIGEgc2hvcnQgdGFibGUsIHNvIGl0IGlzCitzZWFyY2hlZCBsaW5lYXJseS4gUHV0IGFsbCB0aGUgbmFtZXMgaW50byBhIHNpbmdsZSBzdHJpbmcsIGluIG9yZGVyIHRvIHJlZHVjZQordGhlIG51bWJlciBvZiByZWxvY2F0aW9ucyB3aGVuIGEgc2hhcmVkIGxpYnJhcnkgaXMgZHluYW1pY2FsbHkgbGlua2VkLiBUaGUKK3N0cmluZyBpcyBidWlsdCBmcm9tIHN0cmluZyBtYWNyb3Mgc28gdGhhdCBpdCB3b3JrcyBpbiBVVEYtOCBtb2RlIG9uIEVCQ0RJQworcGxhdGZvcm1zLiAqLworCit0eXBlZGVmIHN0cnVjdCB2ZXJiaXRlbSB7CisgIGludCAgIGxlbjsgICAgICAgICAgICAgICAgIC8qIExlbmd0aCBvZiB2ZXJiIG5hbWUgKi8KKyAgaW50ICAgb3A7ICAgICAgICAgICAgICAgICAgLyogT3Agd2hlbiBubyBhcmcsIG9yIC0xIGlmIGFyZyBtYW5kYXRvcnkgKi8KKyAgaW50ICAgb3BfYXJnOyAgICAgICAgICAgICAgLyogT3Agd2hlbiBhcmcgcHJlc2VudCwgb3IgLTEgaWYgbm90IGFsbG93ZWQgKi8KK30gdmVyYml0ZW07CisKK3N0YXRpYyBjb25zdCBjaGFyIHZlcmJuYW1lc1tdID0KKyAgIlwwIiAgICAgICAgICAgICAgICAgICAgICAgLyogRW1wdHkgbmFtZSBpcyBhIHNob3J0aGFuZCBmb3IgTUFSSyAqLworICBTVFJJTkdfTUFSSzAKKyAgU1RSSU5HX0FDQ0VQVDAKKyAgU1RSSU5HX0NPTU1JVDAKKyAgU1RSSU5HX0YwCisgIFNUUklOR19GQUlMMAorICBTVFJJTkdfUFJVTkUwCisgIFNUUklOR19TS0lQMAorICBTVFJJTkdfVEhFTjsKKworc3RhdGljIGNvbnN0IHZlcmJpdGVtIHZlcmJzW10gPSB7CisgIHsgMCwgLTEsICAgICAgICBPUF9NQVJLIH0sCisgIHsgNCwgLTEsICAgICAgICBPUF9NQVJLIH0sCisgIHsgNiwgT1BfQUNDRVBULCAtMSB9LAorICB7IDYsIE9QX0NPTU1JVCwgLTEgfSwKKyAgeyAxLCBPUF9GQUlMLCAgIC0xIH0sCisgIHsgNCwgT1BfRkFJTCwgICAtMSB9LAorICB7IDUsIE9QX1BSVU5FLCAgT1BfUFJVTkVfQVJHIH0sCisgIHsgNCwgT1BfU0tJUCwgICBPUF9TS0lQX0FSRyAgfSwKKyAgeyA0LCBPUF9USEVOLCAgIE9QX1RIRU5fQVJHICB9Cit9OworCitzdGF0aWMgY29uc3QgaW50IHZlcmJjb3VudCA9IHNpemVvZih2ZXJicykvc2l6ZW9mKHZlcmJpdGVtKTsKKworCisvKiBTdWJzdGl0dXRlcyBmb3IgW1s6PDpdXSBhbmQgW1s6PjpdXSwgd2hpY2ggbWVhbiBzdGFydCBhbmQgZW5kIG9mIHdvcmQgaW4KK2Fub3RoZXIgcmVnZXggbGlicmFyeS4gKi8KKworc3RhdGljIGNvbnN0IFBDUkUyX1VDSEFSIHN1Yl9zdGFydF9vZl93b3JkW10gPSB7CisgIENIQVJfQkFDS1NMQVNILCBDSEFSX2IsIENIQVJfTEVGVF9QQVJFTlRIRVNJUywgQ0hBUl9RVUVTVElPTl9NQVJLLAorICBDSEFSX0VRVUFMU19TSUdOLCBDSEFSX0JBQ0tTTEFTSCwgQ0hBUl93LCBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTLCAnXDAnIH07CisKK3N0YXRpYyBjb25zdCBQQ1JFMl9VQ0hBUiBzdWJfZW5kX29mX3dvcmRbXSA9IHsKKyAgQ0hBUl9CQUNLU0xBU0gsIENIQVJfYiwgQ0hBUl9MRUZUX1BBUkVOVEhFU0lTLCBDSEFSX1FVRVNUSU9OX01BUkssCisgIENIQVJfTEVTU19USEFOX1NJR04sIENIQVJfRVFVQUxTX1NJR04sIENIQVJfQkFDS1NMQVNILCBDSEFSX3csCisgIENIQVJfUklHSFRfUEFSRU5USEVTSVMsICdcMCcgfTsKKworCisvKiBUYWJsZXMgb2YgbmFtZXMgb2YgUE9TSVggY2hhcmFjdGVyIGNsYXNzZXMgYW5kIHRoZWlyIGxlbmd0aHMuIFRoZSBuYW1lcyBhcmUKK25vdyBhbGwgaW4gYSBzaW5nbGUgc3RyaW5nLCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiByZWxvY2F0aW9ucyB3aGVuIGEgc2hhcmVkCitsaWJyYXJ5IGlzIGR5bmFtaWNhbGx5IGxvYWRlZC4gVGhlIGxpc3Qgb2YgbGVuZ3RocyBpcyB0ZXJtaW5hdGVkIGJ5IGEgemVybworbGVuZ3RoIGVudHJ5LiBUaGUgZmlyc3QgdGhyZWUgbXVzdCBiZSBhbHBoYSwgbG93ZXIsIHVwcGVyLCBhcyB0aGlzIGlzIGFzc3VtZWQKK2ZvciBoYW5kbGluZyBjYXNlIGluZGVwZW5kZW5jZS4gVGhlIGluZGljZXMgZm9yIGdyYXBoLCBwcmludCwgYW5kIHB1bmN0IGFyZQorbmVlZGVkLCBzbyBpZGVudGlmeSB0aGVtLiAqLworCitzdGF0aWMgY29uc3QgY2hhciBwb3NpeF9uYW1lc1tdID0KKyAgU1RSSU5HX2FscGhhMCBTVFJJTkdfbG93ZXIwIFNUUklOR191cHBlcjAgU1RSSU5HX2FsbnVtMAorICBTVFJJTkdfYXNjaWkwIFNUUklOR19ibGFuazAgU1RSSU5HX2NudHJsMCBTVFJJTkdfZGlnaXQwCisgIFNUUklOR19ncmFwaDAgU1RSSU5HX3ByaW50MCBTVFJJTkdfcHVuY3QwIFNUUklOR19zcGFjZTAKKyAgU1RSSU5HX3dvcmQwICBTVFJJTkdfeGRpZ2l0OworCitzdGF0aWMgY29uc3QgdWludDhfdCBwb3NpeF9uYW1lX2xlbmd0aHNbXSA9IHsKKyAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNCwgNiwgMCB9OworCisjZGVmaW5lIFBDX0dSQVBIICA4CisjZGVmaW5lIFBDX1BSSU5UICA5CisjZGVmaW5lIFBDX1BVTkNUIDEwCisKKworLyogVGFibGUgb2YgY2xhc3MgYml0IG1hcHMgZm9yIGVhY2ggUE9TSVggY2xhc3MuIEVhY2ggY2xhc3MgaXMgZm9ybWVkIGZyb20gYQorYmFzZSBtYXAsIHdpdGggYW4gb3B0aW9uYWwgYWRkaXRpb24gb3IgcmVtb3ZhbCBvZiBhbm90aGVyIG1hcC4gVGhlbiwgZm9yIHNvbWUKK2NsYXNzZXMsIHRoZXJlIGlzIHNvbWUgYWRkaXRpb25hbCB0d2Vha2luZzogZm9yIFs6Ymxhbms6XSB0aGUgdmVydGljYWwgc3BhY2UKK2NoYXJhY3RlcnMgYXJlIHJlbW92ZWQsIGFuZCBmb3IgWzphbHBoYTpdIGFuZCBbOmFsbnVtOl0gdGhlIHVuZGVyc2NvcmUKK2NoYXJhY3RlciBpcyByZW1vdmVkLiBUaGUgdHJpcGxlcyBpbiB0aGUgdGFibGUgY29uc2lzdCBvZiB0aGUgYmFzZSBtYXAgb2Zmc2V0LAorc2Vjb25kIG1hcCBvZmZzZXQgb3IgLTEgaWYgbm8gc2Vjb25kIG1hcCwgYW5kIGEgbm9uLW5lZ2F0aXZlIHZhbHVlIGZvciBtYXAKK2FkZGl0aW9uIG9yIGEgbmVnYXRpdmUgdmFsdWUgZm9yIG1hcCBzdWJ0cmFjdGlvbiAoaWYgdGhlcmUgYXJlIHR3byBtYXBzKS4gVGhlCithYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgdGhpcmQgZmllbGQgaGFzIHRoZXNlIG1lYW5pbmdzOiAwID0+IG5vIHR3ZWFraW5nLCAxID0+CityZW1vdmUgdmVydGljYWwgc3BhY2UgY2hhcmFjdGVycywgMiA9PiByZW1vdmUgdW5kZXJzY29yZS4gKi8KKworc3RhdGljIGNvbnN0IGludCBwb3NpeF9jbGFzc19tYXBzW10gPSB7CisgIGNiaXRfd29yZCwgIGNiaXRfZGlnaXQsIC0yLCAgICAgICAgICAgICAvKiBhbHBoYSAqLworICBjYml0X2xvd2VyLCAtMSwgICAgICAgICAgMCwgICAgICAgICAgICAgLyogbG93ZXIgKi8KKyAgY2JpdF91cHBlciwgLTEsICAgICAgICAgIDAsICAgICAgICAgICAgIC8qIHVwcGVyICovCisgIGNiaXRfd29yZCwgIC0xLCAgICAgICAgICAyLCAgICAgICAgICAgICAvKiBhbG51bSAtIHdvcmQgd2l0aG91dCB1bmRlcnNjb3JlICovCisgIGNiaXRfcHJpbnQsIGNiaXRfY250cmwsICAwLCAgICAgICAgICAgICAvKiBhc2NpaSAqLworICBjYml0X3NwYWNlLCAtMSwgICAgICAgICAgMSwgICAgICAgICAgICAgLyogYmxhbmsgLSBhIEdOVSBleHRlbnNpb24gKi8KKyAgY2JpdF9jbnRybCwgLTEsICAgICAgICAgIDAsICAgICAgICAgICAgIC8qIGNudHJsICovCisgIGNiaXRfZGlnaXQsIC0xLCAgICAgICAgICAwLCAgICAgICAgICAgICAvKiBkaWdpdCAqLworICBjYml0X2dyYXBoLCAtMSwgICAgICAgICAgMCwgICAgICAgICAgICAgLyogZ3JhcGggKi8KKyAgY2JpdF9wcmludCwgLTEsICAgICAgICAgIDAsICAgICAgICAgICAgIC8qIHByaW50ICovCisgIGNiaXRfcHVuY3QsIC0xLCAgICAgICAgICAwLCAgICAgICAgICAgICAvKiBwdW5jdCAqLworICBjYml0X3NwYWNlLCAtMSwgICAgICAgICAgMCwgICAgICAgICAgICAgLyogc3BhY2UgKi8KKyAgY2JpdF93b3JkLCAgLTEsICAgICAgICAgIDAsICAgICAgICAgICAgIC8qIHdvcmQgLSBhIFBlcmwgZXh0ZW5zaW9uICovCisgIGNiaXRfeGRpZ2l0LC0xLCAgICAgICAgICAwICAgICAgICAgICAgICAvKiB4ZGlnaXQgKi8KK307CisKKy8qIFRhYmxlIG9mIHN1YnN0aXR1dGVzIGZvciBcZCBldGMgd2hlbiBQQ1JFMl9VQ1AgaXMgc2V0LiBUaGV5IGFyZSByZXBsYWNlZCBieQorVW5pY29kZSBwcm9wZXJ0eSBlc2NhcGVzLiAqLworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCitzdGF0aWMgY29uc3QgUENSRTJfVUNIQVIgc3RyaW5nX1BOZFtdICA9IHsKKyAgQ0hBUl9CQUNLU0xBU0gsIENIQVJfUCwgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQsCisgIENIQVJfTiwgQ0hBUl9kLCBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQsICdcMCcgfTsKK3N0YXRpYyBjb25zdCBQQ1JFMl9VQ0hBUiBzdHJpbmdfcE5kW10gID0geworICBDSEFSX0JBQ0tTTEFTSCwgQ0hBUl9wLCBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCwKKyAgQ0hBUl9OLCBDSEFSX2QsIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCwgJ1wwJyB9Oworc3RhdGljIGNvbnN0IFBDUkUyX1VDSEFSIHN0cmluZ19QWHNwW10gPSB7CisgIENIQVJfQkFDS1NMQVNILCBDSEFSX1AsIENIQVJfTEVGVF9DVVJMWV9CUkFDS0VULAorICBDSEFSX1gsIENIQVJfcywgQ0hBUl9wLCBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQsICdcMCcgfTsKK3N0YXRpYyBjb25zdCBQQ1JFMl9VQ0hBUiBzdHJpbmdfcFhzcFtdID0geworICBDSEFSX0JBQ0tTTEFTSCwgQ0hBUl9wLCBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCwKKyAgQ0hBUl9YLCBDSEFSX3MsIENIQVJfcCwgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VULCAnXDAnIH07CitzdGF0aWMgY29uc3QgUENSRTJfVUNIQVIgc3RyaW5nX1BYd2RbXSA9IHsKKyAgQ0hBUl9CQUNLU0xBU0gsIENIQVJfUCwgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQsCisgIENIQVJfWCwgQ0hBUl93LCBDSEFSX2QsIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCwgJ1wwJyB9Oworc3RhdGljIGNvbnN0IFBDUkUyX1VDSEFSIHN0cmluZ19wWHdkW10gPSB7CisgIENIQVJfQkFDS1NMQVNILCBDSEFSX3AsIENIQVJfTEVGVF9DVVJMWV9CUkFDS0VULAorICBDSEFSX1gsIENIQVJfdywgQ0hBUl9kLCBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQsICdcMCcgfTsKKworc3RhdGljIFBDUkUyX1NQVFIgc3Vic3RpdHV0ZXNbXSA9IHsKKyAgc3RyaW5nX1BOZCwgICAgICAgICAgIC8qIFxEICovCisgIHN0cmluZ19wTmQsICAgICAgICAgICAvKiBcZCAqLworICBzdHJpbmdfUFhzcCwgICAgICAgICAgLyogXFMgKi8gICAvKiBYc3AgaXMgUGVybCBzcGFjZSwgYnV0IGZyb20gOC4zNCwgUGVybCAqLworICBzdHJpbmdfcFhzcCwgICAgICAgICAgLyogXHMgKi8gICAvKiBzcGFjZSBhbmQgUE9TSVggc3BhY2UgYXJlIHRoZSBzYW1lLiAqLworICBzdHJpbmdfUFh3ZCwgICAgICAgICAgLyogXFcgKi8KKyAgc3RyaW5nX3BYd2QgICAgICAgICAgIC8qIFx3ICovCit9OworCisvKiBUaGUgUE9TSVggY2xhc3Mgc3Vic3RpdHV0ZXMgbXVzdCBiZSBpbiB0aGUgb3JkZXIgb2YgdGhlIFBPU0lYIGNsYXNzIG5hbWVzLAorZGVmaW5lZCBhYm92ZSwgYW5kIHRoZXJlIGFyZSBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBjYXNlcy4gTlVMTCBtZWFucyBubworZ2VuZXJhbCBzdWJzdGl0dXRlIG9mIGEgVW5pY29kZSBwcm9wZXJ0eSBlc2NhcGUgKFxwIG9yIFxQKS4gSG93ZXZlciwgZm9yIHNvbWUKK1BPU0lYIGNsYXNzZXMgKGUuZy4gZ3JhcGgsIHByaW50LCBwdW5jdCkgYSBzcGVjaWFsIHByb3BlcnR5IGNvZGUgaXMgY29tcGlsZWQKK2RpcmVjdGx5LiAqLworCitzdGF0aWMgY29uc3QgUENSRTJfVUNIQVIgc3RyaW5nX3BDY1tdID0gIHsKKyAgQ0hBUl9CQUNLU0xBU0gsIENIQVJfcCwgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQsCisgIENIQVJfQywgQ0hBUl9jLCBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQsICdcMCcgfTsKK3N0YXRpYyBjb25zdCBQQ1JFMl9VQ0hBUiBzdHJpbmdfcExbXSA9ICAgeworICBDSEFSX0JBQ0tTTEFTSCwgQ0hBUl9wLCBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCwKKyAgQ0hBUl9MLCBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQsICdcMCcgfTsKK3N0YXRpYyBjb25zdCBQQ1JFMl9VQ0hBUiBzdHJpbmdfcExsW10gPSAgeworICBDSEFSX0JBQ0tTTEFTSCwgQ0hBUl9wLCBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCwKKyAgQ0hBUl9MLCBDSEFSX2wsIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCwgJ1wwJyB9Oworc3RhdGljIGNvbnN0IFBDUkUyX1VDSEFSIHN0cmluZ19wTHVbXSA9ICB7CisgIENIQVJfQkFDS1NMQVNILCBDSEFSX3AsIENIQVJfTEVGVF9DVVJMWV9CUkFDS0VULAorICBDSEFSX0wsIENIQVJfdSwgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VULCAnXDAnIH07CitzdGF0aWMgY29uc3QgUENSRTJfVUNIQVIgc3RyaW5nX3BYYW5bXSA9IHsKKyAgQ0hBUl9CQUNLU0xBU0gsIENIQVJfcCwgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQsCisgIENIQVJfWCwgQ0hBUl9hLCBDSEFSX24sIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCwgJ1wwJyB9Oworc3RhdGljIGNvbnN0IFBDUkUyX1VDSEFSIHN0cmluZ19oW10gPSAgICB7CisgIENIQVJfQkFDS1NMQVNILCBDSEFSX2gsICdcMCcgfTsKK3N0YXRpYyBjb25zdCBQQ1JFMl9VQ0hBUiBzdHJpbmdfcFhwc1tdID0geworICBDSEFSX0JBQ0tTTEFTSCwgQ0hBUl9wLCBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCwKKyAgQ0hBUl9YLCBDSEFSX3AsIENIQVJfcywgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VULCAnXDAnIH07CitzdGF0aWMgY29uc3QgUENSRTJfVUNIQVIgc3RyaW5nX1BDY1tdID0gIHsKKyAgQ0hBUl9CQUNLU0xBU0gsIENIQVJfUCwgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQsCisgIENIQVJfQywgQ0hBUl9jLCBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQsICdcMCcgfTsKK3N0YXRpYyBjb25zdCBQQ1JFMl9VQ0hBUiBzdHJpbmdfUExbXSA9ICAgeworICBDSEFSX0JBQ0tTTEFTSCwgQ0hBUl9QLCBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCwKKyAgQ0hBUl9MLCBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQsICdcMCcgfTsKK3N0YXRpYyBjb25zdCBQQ1JFMl9VQ0hBUiBzdHJpbmdfUExsW10gPSAgeworICBDSEFSX0JBQ0tTTEFTSCwgQ0hBUl9QLCBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCwKKyAgQ0hBUl9MLCBDSEFSX2wsIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCwgJ1wwJyB9Oworc3RhdGljIGNvbnN0IFBDUkUyX1VDSEFSIHN0cmluZ19QTHVbXSA9ICB7CisgIENIQVJfQkFDS1NMQVNILCBDSEFSX1AsIENIQVJfTEVGVF9DVVJMWV9CUkFDS0VULAorICBDSEFSX0wsIENIQVJfdSwgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VULCAnXDAnIH07CitzdGF0aWMgY29uc3QgUENSRTJfVUNIQVIgc3RyaW5nX1BYYW5bXSA9IHsKKyAgQ0hBUl9CQUNLU0xBU0gsIENIQVJfUCwgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQsCisgIENIQVJfWCwgQ0hBUl9hLCBDSEFSX24sIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCwgJ1wwJyB9Oworc3RhdGljIGNvbnN0IFBDUkUyX1VDSEFSIHN0cmluZ19IW10gPSAgICB7CisgIENIQVJfQkFDS1NMQVNILCBDSEFSX0gsICdcMCcgfTsKK3N0YXRpYyBjb25zdCBQQ1JFMl9VQ0hBUiBzdHJpbmdfUFhwc1tdID0geworICBDSEFSX0JBQ0tTTEFTSCwgQ0hBUl9QLCBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCwKKyAgQ0hBUl9YLCBDSEFSX3AsIENIQVJfcywgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VULCAnXDAnIH07CisKK3N0YXRpYyBQQ1JFMl9TUFRSIHBvc2l4X3N1YnN0aXR1dGVzW10gPSB7CisgIHN0cmluZ19wTCwgICAgICAgICAgICAvKiBhbHBoYSAqLworICBzdHJpbmdfcExsLCAgICAgICAgICAgLyogbG93ZXIgKi8KKyAgc3RyaW5nX3BMdSwgICAgICAgICAgIC8qIHVwcGVyICovCisgIHN0cmluZ19wWGFuLCAgICAgICAgICAvKiBhbG51bSAqLworICBOVUxMLCAgICAgICAgICAgICAgICAgLyogYXNjaWkgKi8KKyAgc3RyaW5nX2gsICAgICAgICAgICAgIC8qIGJsYW5rICovCisgIHN0cmluZ19wQ2MsICAgICAgICAgICAvKiBjbnRybCAqLworICBzdHJpbmdfcE5kLCAgICAgICAgICAgLyogZGlnaXQgKi8KKyAgTlVMTCwgICAgICAgICAgICAgICAgIC8qIGdyYXBoICovCisgIE5VTEwsICAgICAgICAgICAgICAgICAvKiBwcmludCAqLworICBOVUxMLCAgICAgICAgICAgICAgICAgLyogcHVuY3QgKi8KKyAgc3RyaW5nX3BYcHMsICAgICAgICAgIC8qIHNwYWNlICovICAgLyogWHBzIGlzIFBPU0lYIHNwYWNlLCBidXQgZnJvbSA4LjM0ICovCisgIHN0cmluZ19wWHdkLCAgICAgICAgICAvKiB3b3JkICAqLyAgIC8qIFBlcmwgYW5kIFBPU0lYIHNwYWNlIGFyZSB0aGUgc2FtZSAqLworICBOVUxMLCAgICAgICAgICAgICAgICAgLyogeGRpZ2l0ICovCisgIC8qIE5lZ2F0ZWQgY2FzZXMgKi8KKyAgc3RyaW5nX1BMLCAgICAgICAgICAgIC8qIF5hbHBoYSAqLworICBzdHJpbmdfUExsLCAgICAgICAgICAgLyogXmxvd2VyICovCisgIHN0cmluZ19QTHUsICAgICAgICAgICAvKiBedXBwZXIgKi8KKyAgc3RyaW5nX1BYYW4sICAgICAgICAgIC8qIF5hbG51bSAqLworICBOVUxMLCAgICAgICAgICAgICAgICAgLyogXmFzY2lpICovCisgIHN0cmluZ19ILCAgICAgICAgICAgICAvKiBeYmxhbmsgKi8KKyAgc3RyaW5nX1BDYywgICAgICAgICAgIC8qIF5jbnRybCAqLworICBzdHJpbmdfUE5kLCAgICAgICAgICAgLyogXmRpZ2l0ICovCisgIE5VTEwsICAgICAgICAgICAgICAgICAvKiBeZ3JhcGggKi8KKyAgTlVMTCwgICAgICAgICAgICAgICAgIC8qIF5wcmludCAqLworICBOVUxMLCAgICAgICAgICAgICAgICAgLyogXnB1bmN0ICovCisgIHN0cmluZ19QWHBzLCAgICAgICAgICAvKiBec3BhY2UgKi8gIC8qIFhwcyBpcyBQT1NJWCBzcGFjZSwgYnV0IGZyb20gOC4zNCAqLworICBzdHJpbmdfUFh3ZCwgICAgICAgICAgLyogXndvcmQgKi8gICAvKiBQZXJsIGFuZCBQT1NJWCBzcGFjZSBhcmUgdGhlIHNhbWUgKi8KKyAgTlVMTCAgICAgICAgICAgICAgICAgIC8qIF54ZGlnaXQgKi8KK307CisjZGVmaW5lIFBPU0lYX1NVQlNJWkUgKHNpemVvZihwb3NpeF9zdWJzdGl0dXRlcykgLyBzaXplb2YoUENSRTJfVUNIQVIgKikpCisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCisvKiBNYXNrcyBmb3IgY2hlY2tpbmcgb3B0aW9uIHNldHRpbmdzLiAqLworCisjZGVmaW5lIFBVQkxJQ19DT01QSUxFX09QVElPTlMgXAorICAoUENSRTJfQU5DSE9SRUR8UENSRTJfQUxMT1dfRU1QVFlfQ0xBU1N8UENSRTJfQUxUX0JTVVh8UENSRTJfQUxUX0NJUkNVTUZMRVh8IFwKKyAgIFBDUkUyX0FMVF9WRVJCTkFNRVN8UENSRTJfQVVUT19DQUxMT1VUfFBDUkUyX0NBU0VMRVNTfFBDUkUyX0RPTExBUl9FTkRPTkxZfCBcCisgICBQQ1JFMl9ET1RBTEx8UENSRTJfRFVQTkFNRVN8UENSRTJfRVhURU5ERUR8UENSRTJfRklSU1RMSU5FfCBcCisgICBQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGfFBDUkUyX01VTFRJTElORXxQQ1JFMl9ORVZFUl9CQUNLU0xBU0hfQ3wgXAorICAgUENSRTJfTkVWRVJfVUNQfFBDUkUyX05FVkVSX1VURnxQQ1JFMl9OT19BVVRPX0NBUFRVUkV8IFwKKyAgIFBDUkUyX05PX0FVVE9fUE9TU0VTU3xQQ1JFMl9OT19ET1RTVEFSX0FOQ0hPUnxQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRXwgXAorICAgUENSRTJfTk9fVVRGX0NIRUNLfFBDUkUyX1VDUHxQQ1JFMl9VTkdSRUVEWXxQQ1JFMl9VU0VfT0ZGU0VUX0xJTUlUfCBcCisgICBQQ1JFMl9VVEYpCisKKy8qIENvbXBpbGUgdGltZSBlcnJvciBjb2RlIG51bWJlcnMuIFRoZXkgYXJlIGdpdmVuIG5hbWVzIHNvIHRoYXQgdGhleSBjYW4gbW9yZQorZWFzaWx5IGJlIHRyYWNrZWQuIFdoZW4gYSBuZXcgbnVtYmVyIGlzIGFkZGVkLCB0aGUgdGFibGVzIGNhbGxlZCBlaW50MSBhbmQKK2VpbnQyIGluIHBjcmUycG9zaXguYyBtYXkgbmVlZCB0byBiZSB1cGRhdGVkLCBhbmQgYSBuZXcgZXJyb3IgdGV4dCBtdXN0IGJlCithZGRlZCB0byBjb21waWxlX2Vycm9yX3RleHRzIGluIHBjcmUyX2Vycm9yLmMuICovCisKK2VudW0geyBFUlIwID0gQ09NUElMRV9FUlJPUl9CQVNFLAorICAgICAgIEVSUjEsICBFUlIyLCAgRVJSMywgIEVSUjQsICBFUlI1LCAgRVJSNiwgIEVSUjcsICBFUlI4LCAgRVJSOSwgIEVSUjEwLAorICAgICAgIEVSUjExLCBFUlIxMiwgRVJSMTMsIEVSUjE0LCBFUlIxNSwgRVJSMTYsIEVSUjE3LCBFUlIxOCwgRVJSMTksIEVSUjIwLAorICAgICAgIEVSUjIxLCBFUlIyMiwgRVJSMjMsIEVSUjI0LCBFUlIyNSwgRVJSMjYsIEVSUjI3LCBFUlIyOCwgRVJSMjksIEVSUjMwLAorICAgICAgIEVSUjMxLCBFUlIzMiwgRVJSMzMsIEVSUjM0LCBFUlIzNSwgRVJSMzYsIEVSUjM3LCBFUlIzOCwgRVJSMzksIEVSUjQwLAorICAgICAgIEVSUjQxLCBFUlI0MiwgRVJSNDMsIEVSUjQ0LCBFUlI0NSwgRVJSNDYsIEVSUjQ3LCBFUlI0OCwgRVJSNDksIEVSUjUwLAorICAgICAgIEVSUjUxLCBFUlI1MiwgRVJSNTMsIEVSUjU0LCBFUlI1NSwgRVJSNTYsIEVSUjU3LCBFUlI1OCwgRVJSNTksIEVSUjYwLAorICAgICAgIEVSUjYxLCBFUlI2MiwgRVJSNjMsIEVSUjY0LCBFUlI2NSwgRVJSNjYsIEVSUjY3LCBFUlI2OCwgRVJSNjksIEVSUjcwLAorICAgICAgIEVSUjcxLCBFUlI3MiwgRVJSNzMsIEVSUjc0LCBFUlI3NSwgRVJSNzYsIEVSUjc3LCBFUlI3OCwgRVJSNzksIEVSUjgwLAorICAgICAgIEVSUjgxLCBFUlI4MiwgRVJSODMsIEVSUjg0LCBFUlI4NSwgRVJSODYsIEVSUjg3LCBFUlI4OCB9OworCisvKiBFcnJvciBjb2RlcyB0aGF0IGNvcnJlc3BvbmQgdG8gbmVnYXRpdmUgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkKK2ZpbmRfZml4ZWRsZW5ndGgoKS4gKi8KKworc3RhdGljIGludCBmaXhlZF9sZW5ndGhfZXJyb3JzW10gPQorICB7CisgIEVSUjAsICAgIC8qIE5vdCBhbiBlcnJvciAqLworICBFUlIwLCAgICAvKiBOb3QgYW4gZXJyb3I7IC0xIGlzIHVzZWQgZm9yICJwcm9jZXNzIGxhdGVyIiAqLworICBFUlIyNSwgICAvKiBMb29rYmVoaW5kIGlzIG5vdCBmaXhlZCBsZW5ndGggKi8KKyAgRVJSMzYsICAgLyogXEMgaW4gbG9va2JlaGluZCBpcyBub3QgYWxsb3dlZCAqLworICBFUlI4NywgICAvKiBMb29rYmVoaW5kIGlzIHRvbyBsb25nICovCisgIEVSUjg2LCAgIC8qIFBhdHRlcm4gdG9vIGNvbXBsaWNhdGVkICovCisgIEVSUjcwICAgIC8qIEludGVybmFsIGVycm9yOiB1bmtub3duIG9wY29kZSBlbmNvdW50ZXJlZCAqLworICB9OworCisvKiBUaGlzIGlzIGEgdGFibGUgb2Ygc3RhcnQtb2YtcGF0dGVybiBvcHRpb25zIHN1Y2ggYXMgKCpVVEYpIGFuZCBzZXR0aW5ncyBzdWNoCithcyAoKkxJTUlUX01BVENIPW5ubm4pIGFuZCAoKkNSTEYpLiBGb3IgY29tcGxldGVuZXNzIGFuZCBiYWNrd2FyZAorY29tcGF0aWJpbGl0eSwgKCpVVEZuKSBpcyBzdXBwb3J0ZWQgaW4gdGhlIHJlbGV2YW50IGxpYnJhcmllcywgYnV0ICgqVVRGKSBpcworZ2VuZXJpYyBhbmQgYWx3YXlzIHN1cHBvcnRlZC4gKi8KKworZW51bSB7IFBTT19PUFQsICAgICAvKiBWYWx1ZSBpcyBhbiBvcHRpb24gYml0ICovCisgICAgICAgUFNPX0ZMRywgICAgIC8qIFZhbHVlIGlzIGEgZmxhZyBiaXQgKi8KKyAgICAgICBQU09fTkwsICAgICAgLyogVmFsdWUgaXMgYSBuZXdsaW5lIHR5cGUgKi8KKyAgICAgICBQU09fQlNSLCAgICAgLyogVmFsdWUgaXMgYSBcUiB0eXBlICovCisgICAgICAgUFNPX0xJTU0sICAgIC8qIFJlYWQgaW50ZWdlciB2YWx1ZSBmb3IgbWF0Y2ggbGltaXQgKi8KKyAgICAgICBQU09fTElNUiB9OyAgLyogUmVhZCBpbnRlZ2VyIHZhbHVlIGZvciByZWN1cnNpb24gbGltaXQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgcHNvIHsKKyAgY29uc3QgdWludDhfdCAqbmFtZTsKKyAgdWludDE2X3QgbGVuZ3RoOworICB1aW50MTZfdCB0eXBlOworICB1aW50MzJfdCB2YWx1ZTsKK30gcHNvOworCisvKiBOQjogU1RSSU5HX1VURm5fUklHSFRQQVIgY29udGFpbnMgdGhlIGxlbmd0aCBhcyB3ZWxsICovCisKK3N0YXRpYyBwc28gcHNvX2xpc3RbXSA9IHsKKyAgeyAodWludDhfdCAqKVNUUklOR19VVEZuX1JJR0hUUEFSLCAgICAgICAgICAgICAgICAgIFBTT19PUFQsIFBDUkUyX1VURiB9LAorICB7ICh1aW50OF90ICopU1RSSU5HX1VURl9SSUdIVFBBUiwgICAgICAgICAgICAgICAgNCwgUFNPX09QVCwgUENSRTJfVVRGIH0sCisgIHsgKHVpbnQ4X3QgKilTVFJJTkdfVUNQX1JJR0hUUEFSLCAgICAgICAgICAgICAgICA0LCBQU09fT1BULCBQQ1JFMl9VQ1AgfSwKKyAgeyAodWludDhfdCAqKVNUUklOR19OT1RFTVBUWV9SSUdIVFBBUiwgICAgICAgICAgIDksIFBTT19GTEcsIFBDUkUyX05PVEVNUFRZX1NFVCB9LAorICB7ICh1aW50OF90ICopU1RSSU5HX05PVEVNUFRZX0FUU1RBUlRfUklHSFRQQVIsICAxNywgUFNPX0ZMRywgUENSRTJfTkVfQVRTVF9TRVQgfSwKKyAgeyAodWludDhfdCAqKVNUUklOR19OT19BVVRPX1BPU1NFU1NfUklHSFRQQVIsICAgMTYsIFBTT19PUFQsIFBDUkUyX05PX0FVVE9fUE9TU0VTUyB9LAorICB7ICh1aW50OF90ICopU1RSSU5HX05PX0RPVFNUQVJfQU5DSE9SX1JJR0hUUEFSLCAxOCwgUFNPX09QVCwgUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IgfSwKKyAgeyAodWludDhfdCAqKVNUUklOR19OT19KSVRfUklHSFRQQVIsICAgICAgICAgICAgIDcsIFBTT19GTEcsIFBDUkUyX05PSklUIH0sCisgIHsgKHVpbnQ4X3QgKilTVFJJTkdfTk9fU1RBUlRfT1BUX1JJR0hUUEFSLCAgICAgIDEzLCBQU09fT1BULCBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSB9LAorICB7ICh1aW50OF90ICopU1RSSU5HX0xJTUlUX01BVENIX0VRLCAgICAgICAgICAgICAxMiwgUFNPX0xJTU0sIDAgfSwKKyAgeyAodWludDhfdCAqKVNUUklOR19MSU1JVF9SRUNVUlNJT05fRVEsICAgICAgICAgMTYsIFBTT19MSU1SLCAwIH0sCisgIHsgKHVpbnQ4X3QgKilTVFJJTkdfQ1JfUklHSFRQQVIsICAgICAgICAgICAgICAgICAzLCBQU09fTkwsICBQQ1JFMl9ORVdMSU5FX0NSIH0sCisgIHsgKHVpbnQ4X3QgKilTVFJJTkdfTEZfUklHSFRQQVIsICAgICAgICAgICAgICAgICAzLCBQU09fTkwsICBQQ1JFMl9ORVdMSU5FX0xGIH0sCisgIHsgKHVpbnQ4X3QgKilTVFJJTkdfQ1JMRl9SSUdIVFBBUiwgICAgICAgICAgICAgICA1LCBQU09fTkwsICBQQ1JFMl9ORVdMSU5FX0NSTEYgfSwKKyAgeyAodWludDhfdCAqKVNUUklOR19BTllfUklHSFRQQVIsICAgICAgICAgICAgICAgIDQsIFBTT19OTCwgIFBDUkUyX05FV0xJTkVfQU5ZIH0sCisgIHsgKHVpbnQ4X3QgKilTVFJJTkdfQU5ZQ1JMRl9SSUdIVFBBUiwgICAgICAgICAgICA4LCBQU09fTkwsICBQQ1JFMl9ORVdMSU5FX0FOWUNSTEYgfSwKKyAgeyAodWludDhfdCAqKVNUUklOR19CU1JfQU5ZQ1JMRl9SSUdIVFBBUiwgICAgICAgMTIsIFBTT19CU1IsIFBDUkUyX0JTUl9BTllDUkxGIH0sCisgIHsgKHVpbnQ4X3QgKilTVFJJTkdfQlNSX1VOSUNPREVfUklHSFRQQVIsICAgICAgIDEyLCBQU09fQlNSLCBQQ1JFMl9CU1JfVU5JQ09ERSB9Cit9OworCisvKiBUaGlzIHRhYmxlIGlzIHVzZWQgd2hlbiBjb252ZXJ0aW5nIHJlcGVhdGluZyBvcGNvZGVzIGludG8gcG9zc2Vzc2lmaWVkCit2ZXJzaW9ucyBhcyBhIHJlc3VsdCBvZiBhbiBleHBsaWNpdCBwb3NzZXNzaXZlIHF1YW50aWZpZXIgc3VjaCBhcyArKy4gQSB6ZXJvCit2YWx1ZSBtZWFucyB0aGVyZSBpcyBubyBwb3NzZXNzaWZpZWQgdmVyc2lvbiAtIGluIHRob3NlIGNhc2VzIHRoZSBpdGVtIGluCitxdWVzdGlvbiBtdXN0IGJlIHdyYXBwZWQgaW4gT05DRSBicmFja2V0cy4gVGhlIHRhYmxlIGlzIHRydW5jYXRlZCBhdCBPUF9DQUxMT1VUCitiZWNhdXNlIGFsbCByZWxldmFudCBvcGNvZGVzIGFyZSBsZXNzIHRoYW4gdGhhdC4gKi8KKworc3RhdGljIGNvbnN0IHVpbnQ4X3Qgb3Bjb2RlX3Bvc3Nlc3NpZnlbXSA9IHsKKyAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgICAvKiAwIC0gMTUgICovCisgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsICAgLyogMTYgLSAzMSAqLworCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBOT1RJICovCisgIE9QX1BPU1NUQVIsIDAsICAgICAgICAgICAvKiBTVEFSLCBNSU5TVEFSICovCisgIE9QX1BPU1BMVVMsIDAsICAgICAgICAgICAvKiBQTFVTLCBNSU5QTFVTICovCisgIE9QX1BPU1FVRVJZLCAwLCAgICAgICAgICAvKiBRVUVSWSwgTUlOUVVFUlkgKi8KKyAgT1BfUE9TVVBUTywgMCwgICAgICAgICAgIC8qIFVQVE8sIE1JTlVQVE8gKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYQUNUICovCisgIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAvKiBQT1N7U1RBUixQTFVTLFFVRVJZLFVQVE99ICovCisKKyAgT1BfUE9TU1RBUkksIDAsICAgICAgICAgIC8qIFNUQVJJLCBNSU5TVEFSSSAqLworICBPUF9QT1NQTFVTSSwgMCwgICAgICAgICAgLyogUExVU0ksIE1JTlBMVVNJICovCisgIE9QX1BPU1FVRVJZSSwgMCwgICAgICAgICAvKiBRVUVSWUksIE1JTlFVRVJZSSAqLworICBPUF9QT1NVUFRPSSwgMCwgICAgICAgICAgLyogVVBUT0ksIE1JTlVQVE9JICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBFWEFDVEkgKi8KKyAgMCwgMCwgMCwgMCwgICAgICAgICAgICAgIC8qIFBPU3tTVEFSSSxQTFVTSSxRVUVSWUksVVBUT0l9ICovCisKKyAgT1BfTk9UUE9TU1RBUiwgMCwgICAgICAgIC8qIE5PVFNUQVIsIE5PVE1JTlNUQVIgKi8KKyAgT1BfTk9UUE9TUExVUywgMCwgICAgICAgIC8qIE5PVFBMVVMsIE5PVE1JTlBMVVMgKi8KKyAgT1BfTk9UUE9TUVVFUlksIDAsICAgICAgIC8qIE5PVFFVRVJZLCBOT1RNSU5RVUVSWSAqLworICBPUF9OT1RQT1NVUFRPLCAwLCAgICAgICAgLyogTk9UVVBUTywgTk9UTUlOVVBUTyAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogTk9URVhBQ1QgKi8KKyAgMCwgMCwgMCwgMCwgICAgICAgICAgICAgIC8qIE5PVFBPU3tTVEFSLFBMVVMsUVVFUlksVVBUT30gKi8KKworICBPUF9OT1RQT1NTVEFSSSwgMCwgICAgICAgLyogTk9UU1RBUkksIE5PVE1JTlNUQVJJICovCisgIE9QX05PVFBPU1BMVVNJLCAwLCAgICAgICAvKiBOT1RQTFVTSSwgTk9UTUlOUExVU0kgKi8KKyAgT1BfTk9UUE9TUVVFUllJLCAwLCAgICAgIC8qIE5PVFFVRVJZSSwgTk9UTUlOUVVFUllJICovCisgIE9QX05PVFBPU1VQVE9JLCAwLCAgICAgICAvKiBOT1RVUFRPSSwgTk9UTUlOVVBUT0kgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIE5PVEVYQUNUSSAqLworICAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgLyogTk9UUE9Te1NUQVJJLFBMVVNJLFFVRVJZSSxVUFRPSX0gKi8KKworICBPUF9UWVBFUE9TU1RBUiwgMCwgICAgICAgLyogVFlQRVNUQVIsIFRZUEVNSU5TVEFSICovCisgIE9QX1RZUEVQT1NQTFVTLCAwLCAgICAgICAvKiBUWVBFUExVUywgVFlQRU1JTlBMVVMgKi8KKyAgT1BfVFlQRVBPU1FVRVJZLCAwLCAgICAgIC8qIFRZUEVRVUVSWSwgVFlQRU1JTlFVRVJZICovCisgIE9QX1RZUEVQT1NVUFRPLCAwLCAgICAgICAvKiBUWVBFVVBUTywgVFlQRU1JTlVQVE8gKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIFRZUEVFWEFDVCAqLworICAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgLyogVFlQRVBPU3tTVEFSLFBMVVMsUVVFUlksVVBUT30gKi8KKworICBPUF9DUlBPU1NUQVIsIDAsICAgICAgICAgLyogQ1JTVEFSLCBDUk1JTlNUQVIgKi8KKyAgT1BfQ1JQT1NQTFVTLCAwLCAgICAgICAgIC8qIENSUExVUywgQ1JNSU5QTFVTICovCisgIE9QX0NSUE9TUVVFUlksIDAsICAgICAgICAvKiBDUlFVRVJZLCBDUk1JTlFVRVJZICovCisgIE9QX0NSUE9TUkFOR0UsIDAsICAgICAgICAvKiBDUlJBTkdFLCBDUk1JTlJBTkdFICovCisgIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAvKiBDUlBPU3tTVEFSLFBMVVMsUVVFUlksUkFOR0V9ICovCisKKyAgMCwgMCwgMCwgICAgICAgICAgICAgICAgIC8qIENMQVNTLCBOQ0xBU1MsIFhDTEFTUyAqLworICAwLCAwLCAgICAgICAgICAgICAgICAgICAgLyogUkVGLCBSRUZJICovCisgIDAsIDAsICAgICAgICAgICAgICAgICAgICAvKiBETlJFRiwgRE5SRUZJICovCisgIDAsIDAgICAgICAgICAgICAgICAgICAgICAvKiBSRUNVUlNFLCBDQUxMT1VUICovCit9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICBGcmVlIGNvbXBpbGVkIGNvZGUgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitQQ1JFMl9FWFBfREVGTiB2b2lkIFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfY29kZV9mcmVlKHBjcmUyX2NvZGUgKmNvZGUpCit7CitQQ1JFMl9TSVpFKiByZWZfY291bnQ7CisKK2lmIChjb2RlICE9IE5VTEwpCisgIHsKKyAgaWYgKGNvZGUtPmV4ZWN1dGFibGVfaml0ICE9IE5VTEwpCisgICAgUFJJVihqaXRfZnJlZSkoY29kZS0+ZXhlY3V0YWJsZV9qaXQsICZjb2RlLT5tZW1jdGwpOworCisgIGlmICgoY29kZS0+ZmxhZ3MgJiBQQ1JFMl9ERVJFRl9UQUJMRVMpICE9IDApCisgICAgeworICAgIC8qIERlY29kZWQgdGFibGVzIGJlbG9uZyB0byB0aGUgY29kZXMgYWZ0ZXIgZGVzZXJpYWxpemF0aW9uLCBhbmQgdGhleSBtdXN0CisgICAgYmUgZnJlZWQgd2hlbiB0aGVyZSBhcmUgbm8gbW9yZSByZWZlcmVuY2UgdG8gdGhlbS4gVGhlICpyZWZfY291bnQgc2hvdWxkCisgICAgYWx3YXlzIGJlID4gMC4gKi8KKworICAgIHJlZl9jb3VudCA9IChQQ1JFMl9TSVpFICopKGNvZGUtPnRhYmxlcyArIHRhYmxlc19sZW5ndGgpOworICAgIGlmICgqcmVmX2NvdW50ID4gMCkKKyAgICAgIHsKKyAgICAgICgqcmVmX2NvdW50KS0tOworICAgICAgaWYgKCpyZWZfY291bnQgPT0gMCkKKyAgICAgICAgY29kZS0+bWVtY3RsLmZyZWUoKHZvaWQgKiljb2RlLT50YWJsZXMsIGNvZGUtPm1lbWN0bC5tZW1vcnlfZGF0YSk7CisgICAgICB9CisgICAgfQorCisgIGNvZGUtPm1lbWN0bC5mcmVlKGNvZGUsIGNvZGUtPm1lbWN0bC5tZW1vcnlfZGF0YSk7CisgIH0KK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICBJbnNlcnQgYW4gYXV0b21hdGljIGNhbGxvdXQgcG9pbnQgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgUENSRTJfQVVUT19DQUxMT1VUIG9wdGlvbiBpcyBzZXQsIHRvIGluc2VydAorY2FsbG91dCBwb2ludHMgYmVmb3JlIGVhY2ggcGF0dGVybiBpdGVtLgorCitBcmd1bWVudHM6CisgIGNvZGUgICAgICAgICAgIGN1cnJlbnQgY29kZSBwb2ludGVyCisgIHB0ciAgICAgICAgICAgIGN1cnJlbnQgcGF0dGVybiBwb2ludGVyCisgIGNiICAgICAgICAgICAgIGdlbmVyYWwgY29tcGlsZS10aW1lIGRhdGEKKworUmV0dXJuczogICAgICAgICBuZXcgY29kZSBwb2ludGVyCisqLworCitzdGF0aWMgUENSRTJfVUNIQVIgKgorYXV0b19jYWxsb3V0KFBDUkUyX1VDSEFSICpjb2RlLCBQQ1JFMl9TUFRSIHB0ciwgY29tcGlsZV9ibG9jayAqY2IpCit7Citjb2RlWzBdID0gT1BfQ0FMTE9VVDsKK1BVVChjb2RlLCAxLCBwdHIgLSBjYi0+c3RhcnRfcGF0dGVybik7ICAvKiBQYXR0ZXJuIG9mZnNldCAqLworUFVUKGNvZGUsIDEgKyBMSU5LX1NJWkUsIDApOyAgICAgICAgICAgIC8qIERlZmF1bHQgbGVuZ3RoICovCitjb2RlWzEgKyAyKkxJTktfU0laRV0gPSAyNTU7CityZXR1cm4gY29kZSArIFBSSVYoT1BfbGVuZ3RocylbT1BfQ0FMTE9VVF07Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgIENvbXBsZXRlIGEgY2FsbG91dCBpdGVtICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEEgY2FsbG91dCBpdGVtIGNvbnRhaW5zIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgaXRlbSBpbiB0aGUgcGF0dGVybiwgd2hpY2gKK3dlIGNhbid0IGZpbGwgaW4gdGlsbCBhZnRlciB3ZSBoYXZlIHJlYWNoZWQgdGhlIHJlbGV2YW50IHBvaW50LiBUaGlzIGlzIHVzZWQKK2ZvciBib3RoIGF1dG9tYXRpYyBhbmQgbWFudWFsIGNhbGxvdXRzLgorCitBcmd1bWVudHM6CisgIHByZXZpb3VzX2NhbGxvdXQgICBwb2ludHMgdG8gcHJldmlvdXMgY2FsbG91dCBpdGVtCisgIHB0ciAgICAgICAgICAgICAgICBjdXJyZW50IHBhdHRlcm4gcG9pbnRlcgorICBjYiAgICAgICAgICAgICAgICAgZ2VuZXJhbCBjb21waWxlLXRpbWUgZGF0YQorCitSZXR1cm5zOiAgICAgICAgICAgICBub3RoaW5nCisqLworCitzdGF0aWMgdm9pZAorY29tcGxldGVfY2FsbG91dChQQ1JFMl9VQ0hBUiAqcHJldmlvdXNfY2FsbG91dCwgUENSRTJfU1BUUiBwdHIsCisgIGNvbXBpbGVfYmxvY2sgKmNiKQoreworc2l6ZV90IGxlbmd0aCA9IHB0ciAtIGNiLT5zdGFydF9wYXR0ZXJuIC0gR0VUKHByZXZpb3VzX2NhbGxvdXQsIDEpOworUFVUKHByZXZpb3VzX2NhbGxvdXQsIDEgKyBMSU5LX1NJWkUsIGxlbmd0aCk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgRmluZCB0aGUgZml4ZWQgbGVuZ3RoIG9mIGEgYnJhbmNoICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNjYW4gYSBicmFuY2ggYW5kIGNvbXB1dGUgdGhlIGZpeGVkIGxlbmd0aCBvZiBzdWJqZWN0IHRoYXQgd2lsbCBtYXRjaCBpdCwgaWYKK3RoZSBsZW5ndGggaXMgZml4ZWQuIFRoaXMgaXMgbmVlZGVkIGZvciBkZWFsaW5nIHdpdGggbG9va2JlaGluZCBhc3NlcnRpb25zLiBJbgorVVRGIG1vZGUsIHRoZSByZXN1bHQgaXMgaW4gY29kZSB1bml0cyByYXRoZXIgdGhhbiBieXRlcy4gVGhlIGJyYW5jaCBpcwordGVtcG9yYXJpbHkgdGVybWluYXRlZCB3aXRoIE9QX0VORCB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorCitUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgbG9va2JlaGluZCBhc3NlcnRpb24gaXMgZW5jb3VudGVyZWQsIHNvIHRoYXQgaWYKK2l0IGZhaWxzLCB0aGUgZXJyb3IgbWVzc2FnZSBjYW4gcG9pbnQgdG8gdGhlIGNvcnJlY3QgcGxhY2UgaW4gdGhlIHBhdHRlcm4uCitIb3dldmVyLCB3ZSBjYW5ub3QgZG8gdGhpcyB3aGVuIHRoZSBhc3NlcnRpb24gY29udGFpbnMgc3Vicm91dGluZSBjYWxscywKK2JlY2F1c2UgdGhleSBjYW4gYmUgZm9yd2FyZCByZWZlcmVuY2VzLiBXZSBzb2x2ZSB0aGlzIGJ5IHJlbWVtYmVyaW5nIHRoaXMgY2FzZQorYW5kIGRvaW5nIHRoZSBjaGVjayBhdCB0aGUgZW5kOyBhIGZsYWcgc3BlY2lmaWVzIHdoaWNoIG1vZGUgd2UgYXJlIHJ1bm5pbmcgaW4uCisKK0xvb2tiZWhpbmQgbGVuZ3RocyBhcmUgaGVsZCBpbiAxNi1iaXQgZmllbGRzIGFuZCB0aGUgbWF4aW11bSB2YWx1ZSBpcyBkZWZpbmVkCithcyBMT09LQkVISU5EX01BWC4KKworQXJndW1lbnRzOgorICBjb2RlICAgICAgICBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuICh0aGUgYnJhY2tldCkKKyAgdXRmICAgICAgICAgVFJVRSBpbiBVVEYgbW9kZQorICBhdGVuZCAgICAgICBUUlVFIGlmIGNhbGxlZCB3aGVuIHRoZSBwYXR0ZXJuIGlzIGNvbXBsZXRlCisgIGNiICAgICAgICAgIHRoZSAiY29tcGlsZSBkYXRhIiBzdHJ1Y3R1cmUKKyAgcmVjdXJzZXMgICAgY2hhaW4gb2YgcmVjdXJzZV9jaGVjayB0byBjYXRjaCBtdXR1YWwgcmVjdXJzaW9uCisgIGNvdW50cHRyICAgIHBvaW50ZXIgdG8gY291bnRlciwgdG8gY2F0Y2ggb3Zlci1jb21wbGV4aXR5CisKK1JldHVybnM6ICAgaWYgbm9uLW5lZ2F0aXZlLCB0aGUgZml4ZWQgbGVuZ3RoLAorICAgICAgICAgICAgIG9yIC0xIGlmIGFuIE9QX1JFQ1VSU0UgaXRlbSB3YXMgZW5jb3VudGVyZWQgYW5kIGF0ZW5kIGlzIEZBTFNFCisgICAgICAgICAgICAgb3IgLTIgaWYgdGhlcmUgaXMgbm8gZml4ZWQgbGVuZ3RoLAorICAgICAgICAgICAgIG9yIC0zIGlmIFxDIHdhcyBlbmNvdW50ZXJlZCAoaW4gVVRGLTggbW9kZSBvbmx5KQorICAgICAgICAgICAgIG9yIC00IGxlbmd0aCBpcyB0b28gbG9uZworICAgICAgICAgICAgIG9yIC01IGlmIGFuIHVua25vd24gb3Bjb2RlIHdhcyBlbmNvdW50ZXJlZCAoaW50ZXJuYWwgZXJyb3IpCisqLworCisjZGVmaW5lIEZGTF9MQVRFUiAgICAgICAgICAgKC0xKQorI2RlZmluZSBGRkxfTk9URklYRUQgICAgICAgICgtMikKKyNkZWZpbmUgRkZMX0JBQ0tTTEFTSEMgICAgICAoLTMpCisjZGVmaW5lIEZGTF9UT09MT05HICAgICAgICAgKC00KQorI2RlZmluZSBGRkxfVE9PQ09NUExJQ0FURUQgICgtNSkKKyNkZWZpbmUgRkZMX1VOS05PV05PUCAgICAgICAoLTYpCisKK3N0YXRpYyBpbnQKK2ZpbmRfZml4ZWRsZW5ndGgoUENSRTJfVUNIQVIgKmNvZGUsIEJPT0wgdXRmLCBCT09MIGF0ZW5kLCBjb21waWxlX2Jsb2NrICpjYiwKKyAgcmVjdXJzZV9jaGVjayAqcmVjdXJzZXMsIGludCAqY291bnRwdHIpCit7CitpbnQgbGVuZ3RoID0gLTE7Cit1aW50MzJfdCBncm91cCA9IDA7Cit1aW50MzJfdCBncm91cGluZm8gPSAwOworcmVjdXJzZV9jaGVjayB0aGlzX3JlY3Vyc2U7CityZWdpc3RlciBpbnQgYnJhbmNobGVuZ3RoID0gMDsKK3JlZ2lzdGVyIFBDUkUyX1VDSEFSICpjYyA9IGNvZGUgKyAxICsgTElOS19TSVpFOworCisvKiBJZiB0aGlzIGlzIGEgY2FwdHVyaW5nIGdyb3VwLCB3ZSBtYXkgaGF2ZSB0aGUgYW5zd2VyIGNhY2hlZCwgYnV0IHdlIGNhbiBvbmx5Cit1c2UgdGhpcyBpbmZvcm1hdGlvbiBpZiB0aGVyZSBhcmUgbm8gKD98IGdyb3VwcyBpbiB0aGUgcGF0dGVybiwgYmVjYXVzZQorb3RoZXJ3aXNlIGdyb3VwIG51bWJlcnMgYXJlIG5vdCB1bmlxdWUuICovCisKK2lmICgqY29kZSA9PSBPUF9DQlJBIHx8ICpjb2RlID09IE9QX0NCUkFQT1MgfHwgKmNvZGUgPT0gT1BfU0NCUkEgfHwKKyAgICAqY29kZSA9PSBPUF9TQ0JSQVBPUykKKyAgeworICBncm91cCA9IEdFVDIoY2MsIDApOworICBjYyArPSBJTU0yX1NJWkU7CisgIGdyb3VwaW5mbyA9IGNiLT5ncm91cGluZm9bZ3JvdXBdOworICBpZiAoKGNiLT5leHRlcm5hbF9mbGFncyAmIFBDUkUyX0RVUENBUFVTRUQpID09IDApCisgICAgeworICAgIGlmICgoZ3JvdXBpbmZvICYgR0lfTk9UX0ZJWEVEX0xFTkdUSCkgIT0gMCkgcmV0dXJuIEZGTF9OT1RGSVhFRDsKKyAgICBpZiAoKGdyb3VwaW5mbyAmIEdJX1NFVF9GSVhFRF9MRU5HVEgpICE9IDApCisgICAgICByZXR1cm4gZ3JvdXBpbmZvICYgR0lfRklYRURfTEVOR1RIX01BU0s7CisgICAgfQorICB9CisKKy8qIEEgbGFyZ2UgYW5kL29yIGNvbXBsZXggcmVnZXggY2FuIHRha2UgdG9vIGxvbmcgdG8gcHJvY2Vzcy4gVGhpcyBjYW4gaGFwcGVuCittb3JlIG9mdGVuIHdoZW4gKD98IGdyb3VwcyBhcmUgcHJlc2VudCBpbiB0aGUgcGF0dGVybi4gKi8KKworaWYgKCgqY291bnRwdHIpKysgPiAyMDAwKSByZXR1cm4gRkZMX1RPT0NPTVBMSUNBVEVEOworCisvKiBTY2FuIGFsb25nIHRoZSBvcGNvZGVzIGZvciB0aGlzIGJyYW5jaC4gSWYgd2UgZ2V0IHRvIHRoZSBlbmQgb2YgdGhlCiticmFuY2gsIGNoZWNrIHRoZSBsZW5ndGggYWdhaW5zdCB0aGF0IG9mIHRoZSBvdGhlciBicmFuY2hlcy4gKi8KKworZm9yICg7OykKKyAgeworICBpbnQgZDsKKyAgUENSRTJfVUNIQVIgKmNlLCAqY3M7CisgIHJlZ2lzdGVyIFBDUkUyX1VDSEFSIG9wID0gKmNjOworCisgIGlmIChicmFuY2hsZW5ndGggPiBMT09LQkVISU5EX01BWCkgcmV0dXJuIEZGTF9UT09MT05HOworCisgIHN3aXRjaCAob3ApCisgICAgeworICAgIC8qIFdlIG9ubHkgbmVlZCB0byBjb250aW51ZSBmb3IgT1BfQ0JSQSAobm9ybWFsIGNhcHR1cmluZyBicmFja2V0KSBhbmQKKyAgICBPUF9CUkEgKG5vcm1hbCBub24tY2FwdHVyaW5nIGJyYWNrZXQpIGJlY2F1c2UgdGhlIG90aGVyIHZhcmlhbnRzIG9mIHRoZXNlCisgICAgb3Bjb2RlcyBhcmUgYWxsIGNvbmNlcm5lZCB3aXRoIHVubGltaXRlZCByZXBlYXRlZCBncm91cHMsIHdoaWNoIG9mIGNvdXJzZQorICAgIGFyZSBub3Qgb2YgZml4ZWQgbGVuZ3RoLiAqLworCisgICAgY2FzZSBPUF9DQlJBOgorICAgIGNhc2UgT1BfQlJBOgorICAgIGNhc2UgT1BfT05DRToKKyAgICBjYXNlIE9QX09OQ0VfTkM6CisgICAgY2FzZSBPUF9DT05EOgorICAgIGQgPSBmaW5kX2ZpeGVkbGVuZ3RoKGNjLCB1dGYsIGF0ZW5kLCBjYiwgcmVjdXJzZXMsIGNvdW50cHRyKTsKKyAgICBpZiAoZCA8IDApIHJldHVybiBkOworICAgIGJyYW5jaGxlbmd0aCArPSBkOworICAgIGRvIGNjICs9IEdFVChjYywgMSk7IHdoaWxlICgqY2MgPT0gT1BfQUxUKTsKKyAgICBjYyArPSAxICsgTElOS19TSVpFOworICAgIGJyZWFrOworCisgICAgLyogUmVhY2hlZCBlbmQgb2YgYSBicmFuY2g7IGlmIGl0J3MgYSBrZXQgaXQgaXMgdGhlIGVuZCBvZiBhIG5lc3RlZCBjYWxsLgorICAgIElmIGl0J3MgQUxUIGl0IGlzIGFuIGFsdGVybmF0aW9uIGluIGEgbmVzdGVkIGNhbGwuIEFuIEFDQ0VQVCBpcyBlZmZlY3RpdmVseQorICAgIGFuIEFMVC4gSWYgaXQgaXMgRU5EIGl0J3MgdGhlIGVuZCBvZiB0aGUgb3V0ZXIgY2FsbC4gQWxsIGNhbiBiZSBoYW5kbGVkIGJ5CisgICAgdGhlIHNhbWUgY29kZS4gTm90ZSB0aGF0IHdlIG11c3Qgbm90IGluY2x1ZGUgdGhlIE9QX0tFVFJ4eHggb3Bjb2RlcyBoZXJlLAorICAgIGJlY2F1c2UgdGhleSBhbGwgaW1wbHkgYW4gdW5saW1pdGVkIHJlcGVhdC4gKi8KKworICAgIGNhc2UgT1BfQUxUOgorICAgIGNhc2UgT1BfS0VUOgorICAgIGNhc2UgT1BfRU5EOgorICAgIGNhc2UgT1BfQUNDRVBUOgorICAgIGNhc2UgT1BfQVNTRVJUX0FDQ0VQVDoKKyAgICBpZiAobGVuZ3RoIDwgMCkgbGVuZ3RoID0gYnJhbmNobGVuZ3RoOworICAgICAgZWxzZSBpZiAobGVuZ3RoICE9IGJyYW5jaGxlbmd0aCkgZ290byBJU05PVEZJWEVEOworICAgIGlmICgqY2MgIT0gT1BfQUxUKQorICAgICAgeworICAgICAgaWYgKGdyb3VwID4gMCkKKyAgICAgICAgeworICAgICAgICBncm91cGluZm8gfD0gKEdJX1NFVF9GSVhFRF9MRU5HVEggfCBsZW5ndGgpOworICAgICAgICBjYi0+Z3JvdXBpbmZvW2dyb3VwXSA9IGdyb3VwaW5mbzsKKyAgICAgICAgfQorICAgICAgcmV0dXJuIGxlbmd0aDsKKyAgICAgIH0KKyAgICBjYyArPSAxICsgTElOS19TSVpFOworICAgIGJyYW5jaGxlbmd0aCA9IDA7CisgICAgYnJlYWs7CisKKyAgICAvKiBBIHRydWUgcmVjdXJzaW9uIGltcGxpZXMgbm90IGZpeGVkIGxlbmd0aCwgYnV0IGEgc3Vicm91dGluZSBjYWxsIG1heQorICAgIGJlIE9LLiBJZiB0aGUgc3Vicm91dGluZSBpcyBhIGZvcndhcmQgcmVmZXJlbmNlLCB3ZSBjYW4ndCBkZWFsIHdpdGgKKyAgICBpdCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBzbyByZXR1cm4gRkZMX0xBVEVSLiAqLworCisgICAgY2FzZSBPUF9SRUNVUlNFOgorICAgIGlmICghYXRlbmQpIHJldHVybiBGRkxfTEFURVI7CisgICAgY3MgPSBjZSA9IChQQ1JFMl9VQ0hBUiAqKWNiLT5zdGFydF9jb2RlICsgR0VUKGNjLCAxKTsgLyogU3RhcnQgc3VicGF0dGVybiAqLworICAgIGRvIGNlICs9IEdFVChjZSwgMSk7IHdoaWxlICgqY2UgPT0gT1BfQUxUKTsgICAgICAgICAgIC8qIEVuZCBzdWJwYXR0ZXJuICovCisgICAgaWYgKGNjID4gY3MgJiYgY2MgPCBjZSkgZ290byBJU05PVEZJWEVEOyAgICAgICAgICAvKiBSZWN1cnNpb24gKi8KKyAgICBlbHNlICAgLyogQ2hlY2sgZm9yIG11dHVhbCByZWN1cnNpb24gKi8KKyAgICAgIHsKKyAgICAgIHJlY3Vyc2VfY2hlY2sgKnIgPSByZWN1cnNlczsKKyAgICAgIGZvciAociA9IHJlY3Vyc2VzOyByICE9IE5VTEw7IHIgPSByLT5wcmV2KSBpZiAoci0+Z3JvdXAgPT0gY3MpIGJyZWFrOworICAgICAgaWYgKHIgIT0gTlVMTCkgZ290byBJU05PVEZJWEVEOyAgIC8qIE11dHVhbCByZWN1cnNpb24gKi8KKyAgICAgIH0KKyAgICB0aGlzX3JlY3Vyc2UucHJldiA9IHJlY3Vyc2VzOworICAgIHRoaXNfcmVjdXJzZS5ncm91cCA9IGNzOworICAgIGQgPSBmaW5kX2ZpeGVkbGVuZ3RoKGNzLCB1dGYsIGF0ZW5kLCBjYiwgJnRoaXNfcmVjdXJzZSwgY291bnRwdHIpOworICAgIGlmIChkIDwgMCkgcmV0dXJuIGQ7CisgICAgYnJhbmNobGVuZ3RoICs9IGQ7CisgICAgY2MgKz0gMSArIExJTktfU0laRTsKKyAgICBicmVhazsKKworICAgIC8qIFNraXAgb3ZlciBhc3NlcnRpdmUgc3VicGF0dGVybnMuIE5vdGUgdGhhdCB3ZSBtdXN0IGluY3JlbWVudCBjYyBieQorICAgIDEgKyBMSU5LX1NJWkUgYXQgdGhlIGVuZCwgbm90IGJ5IE9QX2xlbmd0aFsqY2NdIGJlY2F1c2UgaW4gYSByZWN1cnNpdmUKKyAgICBzaXR1YXRpb24gdGhpcyBhc3NlcnRpb24gbWF5IGJlIHRoZSBvbmUgdGhhdCBpcyB1bHRpbWF0ZWx5IGJlaW5nIGNoZWNrZWQKKyAgICBmb3IgaGF2aW5nIGEgZml4ZWQgbGVuZ3RoLCBpbiB3aGljaCBjYXNlIGl0cyB0ZXJtaW5hdGluZyBPUF9LRVQgd2lsbCBoYXZlCisgICAgYmVlbiB0ZW1wb3JhcmlseSByZXBsYWNlZCBieSBPUF9FTkQuICovCisKKyAgICBjYXNlIE9QX0FTU0VSVDoKKyAgICBjYXNlIE9QX0FTU0VSVF9OT1Q6CisgICAgY2FzZSBPUF9BU1NFUlRCQUNLOgorICAgIGNhc2UgT1BfQVNTRVJUQkFDS19OT1Q6CisgICAgZG8gY2MgKz0gR0VUKGNjLCAxKTsgd2hpbGUgKCpjYyA9PSBPUF9BTFQpOworICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICAvKiBTa2lwIG92ZXIgdGhpbmdzIHRoYXQgZG9uJ3QgbWF0Y2ggY2hhcnMgKi8KKworICAgIGNhc2UgT1BfTUFSSzoKKyAgICBjYXNlIE9QX1BSVU5FX0FSRzoKKyAgICBjYXNlIE9QX1NLSVBfQVJHOgorICAgIGNhc2UgT1BfVEhFTl9BUkc6CisgICAgY2MgKz0gY2NbMV0gKyBQUklWKE9QX2xlbmd0aHMpWypjY107CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NBTExPVVQ6CisgICAgY2FzZSBPUF9DSVJDOgorICAgIGNhc2UgT1BfQ0lSQ006CisgICAgY2FzZSBPUF9DTE9TRToKKyAgICBjYXNlIE9QX0NPTU1JVDoKKyAgICBjYXNlIE9QX0NSRUY6CisgICAgY2FzZSBPUF9GQUxTRToKKyAgICBjYXNlIE9QX1RSVUU6CisgICAgY2FzZSBPUF9ETkNSRUY6CisgICAgY2FzZSBPUF9ETlJSRUY6CisgICAgY2FzZSBPUF9ET0xMOgorICAgIGNhc2UgT1BfRE9MTE06CisgICAgY2FzZSBPUF9FT0Q6CisgICAgY2FzZSBPUF9FT0ROOgorICAgIGNhc2UgT1BfRkFJTDoKKyAgICBjYXNlIE9QX05PVF9XT1JEX0JPVU5EQVJZOgorICAgIGNhc2UgT1BfUFJVTkU6CisgICAgY2FzZSBPUF9SRVZFUlNFOgorICAgIGNhc2UgT1BfUlJFRjoKKyAgICBjYXNlIE9QX1NFVF9TT006CisgICAgY2FzZSBPUF9TS0lQOgorICAgIGNhc2UgT1BfU09EOgorICAgIGNhc2UgT1BfU09NOgorICAgIGNhc2UgT1BfVEhFTjoKKyAgICBjYXNlIE9QX1dPUkRfQk9VTkRBUlk6CisgICAgY2MgKz0gUFJJVihPUF9sZW5ndGhzKVsqY2NdOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9DQUxMT1VUX1NUUjoKKyAgICBjYyArPSBHRVQoY2MsIDEgKyAyKkxJTktfU0laRSk7CisgICAgYnJlYWs7CisKKyAgICAvKiBIYW5kbGUgbGl0ZXJhbCBjaGFyYWN0ZXJzICovCisKKyAgICBjYXNlIE9QX0NIQVI6CisgICAgY2FzZSBPUF9DSEFSSToKKyAgICBjYXNlIE9QX05PVDoKKyAgICBjYXNlIE9QX05PVEk6CisgICAgYnJhbmNobGVuZ3RoKys7CisgICAgY2MgKz0gMjsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICBpZiAodXRmICYmIEhBU19FWFRSQUxFTihjY1stMV0pKSBjYyArPSBHRVRfRVhUUkFMRU4oY2NbLTFdKTsKKyNlbmRpZgorICAgIGJyZWFrOworCisgICAgLyogSGFuZGxlIGV4YWN0IHJlcGV0aXRpb25zLiBUaGUgY291bnQgaXMgYWxyZWFkeSBpbiBjaGFyYWN0ZXJzLCBidXQgd2UKKyAgICBuZWVkIHRvIHNraXAgb3ZlciBhIG11bHRpYnl0ZSBjaGFyYWN0ZXIgaW4gVVRGOCBtb2RlLiAgKi8KKworICAgIGNhc2UgT1BfRVhBQ1Q6CisgICAgY2FzZSBPUF9FWEFDVEk6CisgICAgY2FzZSBPUF9OT1RFWEFDVDoKKyAgICBjYXNlIE9QX05PVEVYQUNUSToKKyAgICBicmFuY2hsZW5ndGggKz0gKGludClHRVQyKGNjLDEpOworICAgIGNjICs9IDIgKyBJTU0yX1NJWkU7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgaWYgKHV0ZiAmJiBIQVNfRVhUUkFMRU4oY2NbLTFdKSkgY2MgKz0gR0VUX0VYVFJBTEVOKGNjWy0xXSk7CisjZW5kaWYKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfVFlQRUVYQUNUOgorICAgIGJyYW5jaGxlbmd0aCArPSBHRVQyKGNjLDEpOworICAgIGlmIChjY1sxICsgSU1NMl9TSVpFXSA9PSBPUF9QUk9QIHx8IGNjWzEgKyBJTU0yX1NJWkVdID09IE9QX05PVFBST1ApCisgICAgICBjYyArPSAyOworICAgIGNjICs9IDEgKyBJTU0yX1NJWkUgKyAxOworICAgIGJyZWFrOworCisgICAgLyogSGFuZGxlIHNpbmdsZS1jaGFyIG1hdGNoZXJzICovCisKKyAgICBjYXNlIE9QX1BST1A6CisgICAgY2FzZSBPUF9OT1RQUk9QOgorICAgIGNjICs9IDI7CisgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICBjYXNlIE9QX0hTUEFDRToKKyAgICBjYXNlIE9QX1ZTUEFDRToKKyAgICBjYXNlIE9QX05PVF9IU1BBQ0U6CisgICAgY2FzZSBPUF9OT1RfVlNQQUNFOgorICAgIGNhc2UgT1BfTk9UX0RJR0lUOgorICAgIGNhc2UgT1BfRElHSVQ6CisgICAgY2FzZSBPUF9OT1RfV0hJVEVTUEFDRToKKyAgICBjYXNlIE9QX1dISVRFU1BBQ0U6CisgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CisgICAgY2FzZSBPUF9XT1JEQ0hBUjoKKyAgICBjYXNlIE9QX0FOWToKKyAgICBjYXNlIE9QX0FMTEFOWToKKyAgICBicmFuY2hsZW5ndGgrKzsKKyAgICBjYysrOworICAgIGJyZWFrOworCisgICAgLyogVGhlIHNpbmdsZS1ieXRlIG1hdGNoZXIgaXNuJ3QgYWxsb3dlZC4gVGhpcyBvbmx5IGhhcHBlbnMgaW4gVVRGLTggbW9kZTsKKyAgICBvdGhlcndpc2UgXEMgaXMgY29kZWQgYXMgT1BfQUxMQU5ZLiAqLworCisgICAgY2FzZSBPUF9BTllCWVRFOgorICAgIHJldHVybiBGRkxfQkFDS1NMQVNIQzsKKworICAgIC8qIENoZWNrIGEgY2xhc3MgZm9yIHZhcmlhYmxlIHF1YW50aWZpY2F0aW9uICovCisKKyAgICBjYXNlIE9QX0NMQVNTOgorICAgIGNhc2UgT1BfTkNMQVNTOgorI2lmZGVmIFNVUFBPUlRfV0lERV9DSEFSUworICAgIGNhc2UgT1BfWENMQVNTOgorICAgIC8qIFRoZSBvcmlnaW5hbCBjb2RlIGNhdXNlZCBhbiB1bnNpZ25lZCBvdmVyZmxvdyBpbiA2NCBiaXQgc3lzdGVtcywKKyAgICBzbyBub3cgd2UgdXNlIGEgY29uZGl0aW9uYWwgc3RhdGVtZW50LiAqLworICAgIGlmIChvcCA9PSBPUF9YQ0xBU1MpCisgICAgICBjYyArPSBHRVQoY2MsIDEpOworICAgIGVsc2UKKyAgICAgIGNjICs9IFBSSVYoT1BfbGVuZ3RocylbT1BfQ0xBU1NdOworI2Vsc2UKKyAgICBjYyArPSBQUklWKE9QX2xlbmd0aHMpW09QX0NMQVNTXTsKKyNlbmRpZgorCisgICAgc3dpdGNoICgqY2MpCisgICAgICB7CisgICAgICBjYXNlIE9QX0NSU1RBUjoKKyAgICAgIGNhc2UgT1BfQ1JNSU5TVEFSOgorICAgICAgY2FzZSBPUF9DUlBMVVM6CisgICAgICBjYXNlIE9QX0NSTUlOUExVUzoKKyAgICAgIGNhc2UgT1BfQ1JRVUVSWToKKyAgICAgIGNhc2UgT1BfQ1JNSU5RVUVSWToKKyAgICAgIGNhc2UgT1BfQ1JQT1NTVEFSOgorICAgICAgY2FzZSBPUF9DUlBPU1BMVVM6CisgICAgICBjYXNlIE9QX0NSUE9TUVVFUlk6CisgICAgICBnb3RvIElTTk9URklYRUQ7CisKKyAgICAgIGNhc2UgT1BfQ1JSQU5HRToKKyAgICAgIGNhc2UgT1BfQ1JNSU5SQU5HRToKKyAgICAgIGNhc2UgT1BfQ1JQT1NSQU5HRToKKyAgICAgIGlmIChHRVQyKGNjLDEpICE9IEdFVDIoY2MsMStJTU0yX1NJWkUpKSBnb3RvIElTTk9URklYRUQ7CisgICAgICBicmFuY2hsZW5ndGggKz0gKGludClHRVQyKGNjLDEpOworICAgICAgY2MgKz0gMSArIDIgKiBJTU0yX1NJWkU7CisgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgIGJyYW5jaGxlbmd0aCsrOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgLyogQW55dGhpbmcgZWxzZSBpcyB2YXJpYWJsZSBsZW5ndGggKi8KKworICAgIGNhc2UgT1BfQU5ZTkw6CisgICAgY2FzZSBPUF9CUkFNSU5aRVJPOgorICAgIGNhc2UgT1BfQlJBUE9TOgorICAgIGNhc2UgT1BfQlJBUE9TWkVSTzoKKyAgICBjYXNlIE9QX0JSQVpFUk86CisgICAgY2FzZSBPUF9DQlJBUE9TOgorICAgIGNhc2UgT1BfRVhUVU5JOgorICAgIGNhc2UgT1BfS0VUUk1BWDoKKyAgICBjYXNlIE9QX0tFVFJNSU46CisgICAgY2FzZSBPUF9LRVRSUE9TOgorICAgIGNhc2UgT1BfTUlOUExVUzoKKyAgICBjYXNlIE9QX01JTlBMVVNJOgorICAgIGNhc2UgT1BfTUlOUVVFUlk6CisgICAgY2FzZSBPUF9NSU5RVUVSWUk6CisgICAgY2FzZSBPUF9NSU5TVEFSOgorICAgIGNhc2UgT1BfTUlOU1RBUkk6CisgICAgY2FzZSBPUF9NSU5VUFRPOgorICAgIGNhc2UgT1BfTUlOVVBUT0k6CisgICAgY2FzZSBPUF9OT1RNSU5QTFVTOgorICAgIGNhc2UgT1BfTk9UTUlOUExVU0k6CisgICAgY2FzZSBPUF9OT1RNSU5RVUVSWToKKyAgICBjYXNlIE9QX05PVE1JTlFVRVJZSToKKyAgICBjYXNlIE9QX05PVE1JTlNUQVI6CisgICAgY2FzZSBPUF9OT1RNSU5TVEFSSToKKyAgICBjYXNlIE9QX05PVE1JTlVQVE86CisgICAgY2FzZSBPUF9OT1RNSU5VUFRPSToKKyAgICBjYXNlIE9QX05PVFBMVVM6CisgICAgY2FzZSBPUF9OT1RQTFVTSToKKyAgICBjYXNlIE9QX05PVFBPU1BMVVM6CisgICAgY2FzZSBPUF9OT1RQT1NQTFVTSToKKyAgICBjYXNlIE9QX05PVFBPU1FVRVJZOgorICAgIGNhc2UgT1BfTk9UUE9TUVVFUllJOgorICAgIGNhc2UgT1BfTk9UUE9TU1RBUjoKKyAgICBjYXNlIE9QX05PVFBPU1NUQVJJOgorICAgIGNhc2UgT1BfTk9UUE9TVVBUTzoKKyAgICBjYXNlIE9QX05PVFBPU1VQVE9JOgorICAgIGNhc2UgT1BfTk9UUVVFUlk6CisgICAgY2FzZSBPUF9OT1RRVUVSWUk6CisgICAgY2FzZSBPUF9OT1RTVEFSOgorICAgIGNhc2UgT1BfTk9UU1RBUkk6CisgICAgY2FzZSBPUF9OT1RVUFRPOgorICAgIGNhc2UgT1BfTk9UVVBUT0k6CisgICAgY2FzZSBPUF9QTFVTOgorICAgIGNhc2UgT1BfUExVU0k6CisgICAgY2FzZSBPUF9QT1NQTFVTOgorICAgIGNhc2UgT1BfUE9TUExVU0k6CisgICAgY2FzZSBPUF9QT1NRVUVSWToKKyAgICBjYXNlIE9QX1BPU1FVRVJZSToKKyAgICBjYXNlIE9QX1BPU1NUQVI6CisgICAgY2FzZSBPUF9QT1NTVEFSSToKKyAgICBjYXNlIE9QX1BPU1VQVE86CisgICAgY2FzZSBPUF9QT1NVUFRPSToKKyAgICBjYXNlIE9QX1FVRVJZOgorICAgIGNhc2UgT1BfUVVFUllJOgorICAgIGNhc2UgT1BfUkVGOgorICAgIGNhc2UgT1BfUkVGSToKKyAgICBjYXNlIE9QX0ROUkVGOgorICAgIGNhc2UgT1BfRE5SRUZJOgorICAgIGNhc2UgT1BfU0JSQToKKyAgICBjYXNlIE9QX1NCUkFQT1M6CisgICAgY2FzZSBPUF9TQ0JSQToKKyAgICBjYXNlIE9QX1NDQlJBUE9TOgorICAgIGNhc2UgT1BfU0NPTkQ6CisgICAgY2FzZSBPUF9TS0lQWkVSTzoKKyAgICBjYXNlIE9QX1NUQVI6CisgICAgY2FzZSBPUF9TVEFSSToKKyAgICBjYXNlIE9QX1RZUEVNSU5QTFVTOgorICAgIGNhc2UgT1BfVFlQRU1JTlFVRVJZOgorICAgIGNhc2UgT1BfVFlQRU1JTlNUQVI6CisgICAgY2FzZSBPUF9UWVBFTUlOVVBUTzoKKyAgICBjYXNlIE9QX1RZUEVQTFVTOgorICAgIGNhc2UgT1BfVFlQRVBPU1BMVVM6CisgICAgY2FzZSBPUF9UWVBFUE9TUVVFUlk6CisgICAgY2FzZSBPUF9UWVBFUE9TU1RBUjoKKyAgICBjYXNlIE9QX1RZUEVQT1NVUFRPOgorICAgIGNhc2UgT1BfVFlQRVFVRVJZOgorICAgIGNhc2UgT1BfVFlQRVNUQVI6CisgICAgY2FzZSBPUF9UWVBFVVBUTzoKKyAgICBjYXNlIE9QX1VQVE86CisgICAgY2FzZSBPUF9VUFRPSToKKyAgICBnb3RvIElTTk9URklYRUQ7CisKKyAgICAvKiBDYXRjaCB1bnJlY29nbml6ZWQgb3Bjb2RlcyBzbyB0aGF0IHdoZW4gbmV3IG9uZXMgYXJlIGFkZGVkIHRoZXkKKyAgICBhcmUgbm90IGZvcmdvdHRlbiwgYXMgaGFzIGhhcHBlbmVkIGluIHRoZSBwYXN0LiAqLworCisgICAgZGVmYXVsdDoKKyAgICByZXR1cm4gRkZMX1VOS05PV05PUDsKKyAgICB9CisgIH0KKy8qIENvbnRyb2wgbmV2ZXIgZ2V0cyBoZXJlIGV4Y2VwdCBieSBnb3RvLiAqLworCitJU05PVEZJWEVEOgoraWYgKGdyb3VwID4gMCkKKyAgeworICBncm91cGluZm8gfD0gR0lfTk9UX0ZJWEVEX0xFTkdUSDsKKyAgY2ItPmdyb3VwaW5mb1tncm91cF0gPSBncm91cGluZm87CisgIH0KK3JldHVybiBGRkxfTk9URklYRUQ7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIEZpbmQgZmlyc3Qgc2lnbmlmaWNhbnQgb3AgY29kZSAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgaXMgY2FsbGVkIGJ5IHNldmVyYWwgZnVuY3Rpb25zIHRoYXQgc2NhbiBhIGNvbXBpbGVkIGV4cHJlc3Npb24gbG9va2luZworZm9yIGEgZml4ZWQgZmlyc3QgY2hhcmFjdGVyLCBvciBhbiBhbmNob3Jpbmcgb3AgY29kZSBldGMuIEl0IHNraXBzIG92ZXIgdGhpbmdzCit0aGF0IGRvIG5vdCBpbmZsdWVuY2UgdGhpcy4gRm9yIHNvbWUgY2FsbHMsIGl0IG1ha2VzIHNlbnNlIHRvIHNraXAgbmVnYXRpdmUKK2ZvcndhcmQgYW5kIGFsbCBiYWNrd2FyZCBhc3NlcnRpb25zLCBhbmQgYWxzbyB0aGUgXGIgYXNzZXJ0aW9uOyBmb3Igb3RoZXJzIGl0Citkb2VzIG5vdC4KKworQXJndW1lbnRzOgorICBjb2RlICAgICAgICAgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIGdyb3VwCisgIHNraXBhc3NlcnQgICBUUlVFIGlmIGNlcnRhaW4gYXNzZXJ0aW9ucyBhcmUgdG8gYmUgc2tpcHBlZAorCitSZXR1cm5zOiAgICAgICBwb2ludGVyIHRvIHRoZSBmaXJzdCBzaWduaWZpY2FudCBvcGNvZGUKKyovCisKK3N0YXRpYyBjb25zdCBQQ1JFMl9VQ0hBUioKK2ZpcnN0X3NpZ25pZmljYW50X2NvZGUoUENSRTJfU1BUUiBjb2RlLCBCT09MIHNraXBhc3NlcnQpCit7Citmb3IgKDs7KQorICB7CisgIHN3aXRjaCAoKGludCkqY29kZSkKKyAgICB7CisgICAgY2FzZSBPUF9BU1NFUlRfTk9UOgorICAgIGNhc2UgT1BfQVNTRVJUQkFDSzoKKyAgICBjYXNlIE9QX0FTU0VSVEJBQ0tfTk9UOgorICAgIGlmICghc2tpcGFzc2VydCkgcmV0dXJuIGNvZGU7CisgICAgZG8gY29kZSArPSBHRVQoY29kZSwgMSk7IHdoaWxlICgqY29kZSA9PSBPUF9BTFQpOworICAgIGNvZGUgKz0gUFJJVihPUF9sZW5ndGhzKVsqY29kZV07CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1dPUkRfQk9VTkRBUlk6CisgICAgY2FzZSBPUF9OT1RfV09SRF9CT1VOREFSWToKKyAgICBpZiAoIXNraXBhc3NlcnQpIHJldHVybiBjb2RlOworICAgIC8qIEZhbGwgdGhyb3VnaCAqLworCisgICAgY2FzZSBPUF9DQUxMT1VUOgorICAgIGNhc2UgT1BfQ1JFRjoKKyAgICBjYXNlIE9QX0ROQ1JFRjoKKyAgICBjYXNlIE9QX1JSRUY6CisgICAgY2FzZSBPUF9ETlJSRUY6CisgICAgY2FzZSBPUF9GQUxTRToKKyAgICBjYXNlIE9QX1RSVUU6CisgICAgY29kZSArPSBQUklWKE9QX2xlbmd0aHMpWypjb2RlXTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQ0FMTE9VVF9TVFI6CisgICAgY29kZSArPSBHRVQoY29kZSwgMSArIDIqTElOS19TSVpFKTsKKyAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgcmV0dXJuIGNvZGU7CisgICAgfQorICB9CisvKiBDb250cm9sIG5ldmVyIHJlYWNoZXMgaGVyZSAqLworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgU2NhbiBjb21waWxlZCBicmFuY2ggZm9yIG5vbi1lbXB0aW5lc3MgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIHNjYW5zIHRocm91Z2ggYSBicmFuY2ggb2YgYSBjb21waWxlZCBwYXR0ZXJuIHRvIHNlZSB3aGV0aGVyIGl0CitjYW4gbWF0Y2ggdGhlIGVtcHR5IHN0cmluZy4gSXQgaXMgY2FsbGVkIGF0IHRoZSBlbmQgb2YgY29tcGlsaW5nIHRvIGNoZWNrIHRoZQorZW50aXJlIHBhdHRlcm4sIGFuZCBmcm9tIGNvbXBpbGVfYnJhbmNoKCkgd2hlbiBjaGVja2luZyBmb3IgYW4gdW5saW1pdGVkIHJlcGVhdAorb2YgYSBncm91cCB0aGF0IGNhbiBtYXRjaCBub3RoaW5nLiBJbiB0aGUgbGF0dGVyIGNhc2UgaXQgaXMgY2FsbGVkIG9ubHkgd2hlbgorZG9pbmcgdGhlIHJlYWwgY29tcGlsZSwgbm90IGR1cmluZyB0aGUgcHJlLWNvbXBpbGUgdGhhdCBtZWFzdXJlcyB0aGUgc2l6ZSBvZgordGhlIGNvbXBpbGVkIHBhdHRlcm4uCisKK05vdGUgdGhhdCBmaXJzdF9zaWduaWZpY2FudF9jb2RlKCkgc2tpcHMgb3ZlciBiYWNrd2FyZCBhbmQgbmVnYXRpdmUgZm9yd2FyZAorYXNzZXJ0aW9ucyB3aGVuIGl0cyBmaW5hbCBhcmd1bWVudCBpcyBUUlVFLiBJZiB3ZSBoaXQgYW4gdW5jbG9zZWQgYnJhY2tldCwgd2UKK3JldHVybiAiZW1wdHkiIC0gdGhpcyBtZWFucyB3ZSd2ZSBzdHJ1Y2sgYW4gaW5uZXIgYnJhY2tldCB3aG9zZSBjdXJyZW50IGJyYW5jaAord2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBzY2FubmVkLgorCitBcmd1bWVudHM6CisgIGNvZGUgICAgICAgIHBvaW50cyB0byBzdGFydCBvZiBzZWFyY2gKKyAgZW5kY29kZSAgICAgcG9pbnRzIHRvIHdoZXJlIHRvIHN0b3AKKyAgdXRmICAgICAgICAgVFJVRSBpZiBpbiBVVEYgbW9kZQorICBjYiAgICAgICAgICBjb21waWxlIGRhdGEKKyAgYXRlbmQgICAgICAgVFJVRSBpZiBiZWluZyBjYWxsZWQgdG8gY2hlY2sgYW4gZW50aXJlIHBhdHRlcm4KKyAgcmVjdXJzZXMgICAgY2hhaW4gb2YgcmVjdXJzZV9jaGVjayB0byBjYXRjaCBtdXR1YWwgcmVjdXJzaW9uCisgIGNvdW50cHRyICAgIHBvaW50ZXIgdG8gY291bnQgdG8gY2F0Y2ggb3Zlci1jb21wbGljYXRlZCBwYXR0ZXJuCisKK1JldHVybnM6ICAgICAgMCBpZiB3aGF0IGlzIG1hdGNoZWQgY2Fubm90IGJlIGVtcHR5CisgICAgICAgICAgICAgIDEgaWYgd2hhdCBpcyBtYXRjaGVkIGNvdWxkIGJlIGVtcHR5CisgICAgICAgICAgICAgLTEgaWYgdGhlIHBhdHRlcm4gaXMgdG9vIGNvbXBsaWNhdGVkCisqLworCisjZGVmaW5lIENCRV9OT1RFTVBUWSAgICAgICAgICAwCisjZGVmaW5lIENCRV9FTVBUWSAgICAgICAgICAgICAxCisjZGVmaW5lIENCRV9UT09DT01QTElDQVRFRCAgKC0xKQorCisKK3N0YXRpYyBpbnQKK2NvdWxkX2JlX2VtcHR5X2JyYW5jaChQQ1JFMl9TUFRSIGNvZGUsIFBDUkUyX1NQVFIgZW5kY29kZSwgQk9PTCB1dGYsCisgIGNvbXBpbGVfYmxvY2sgKmNiLCBCT09MIGF0ZW5kLCByZWN1cnNlX2NoZWNrICpyZWN1cnNlcywgaW50ICpjb3VudHB0cikKK3sKK3VpbnQzMl90IGdyb3VwID0gMDsKK3VpbnQzMl90IGdyb3VwaW5mbyA9IDA7CityZWdpc3RlciBQQ1JFMl9VQ0hBUiBjOworcmVjdXJzZV9jaGVjayB0aGlzX3JlY3Vyc2U7CisKKy8qIElmIHdoYXQgd2UgYXJlIGNoZWNraW5nIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGFzICJjb3VsZCBiZSBlbXB0eSIsIHdlIGtub3cKK3RoZSBhbnN3ZXIuICovCisKK2lmICgqY29kZSA+PSBPUF9TQlJBICYmICpjb2RlIDw9IE9QX1NDT05EKSByZXR1cm4gQ0JFX0VNUFRZOworCisvKiBJZiB0aGlzIGlzIGEgY2FwdHVyaW5nIGdyb3VwLCB3ZSBtYXkgaGF2ZSB0aGUgYW5zd2VyIGNhY2hlZCwgYnV0IHdlIGNhbiBvbmx5Cit1c2UgdGhpcyBpbmZvcm1hdGlvbiBpZiB0aGVyZSBhcmUgbm8gKD98IGdyb3VwcyBpbiB0aGUgcGF0dGVybiwgYmVjYXVzZQorb3RoZXJ3aXNlIGdyb3VwIG51bWJlcnMgYXJlIG5vdCB1bmlxdWUuICovCisKK2lmICgoY2ItPmV4dGVybmFsX2ZsYWdzICYgUENSRTJfRFVQQ0FQVVNFRCkgPT0gMCAmJgorICAgICgqY29kZSA9PSBPUF9DQlJBIHx8ICpjb2RlID09IE9QX0NCUkFQT1MpKQorICB7CisgIGdyb3VwID0gR0VUMihjb2RlLCAxICsgTElOS19TSVpFKTsKKyAgZ3JvdXBpbmZvID0gY2ItPmdyb3VwaW5mb1tncm91cF07CisgIGlmICgoZ3JvdXBpbmZvICYgR0lfU0VUX0NPVUxEX0JFX0VNUFRZKSAhPSAwKQorICAgIHJldHVybiAoKGdyb3VwaW5mbyAmIEdJX0NPVUxEX0JFX0VNUFRZKSAhPSAwKT8gQ0JFX0VNUFRZIDogQ0JFX05PVEVNUFRZOworICB9CisKKy8qIEEgbGFyZ2UgYW5kL29yIGNvbXBsZXggcmVnZXggY2FuIHRha2UgdG9vIGxvbmcgdG8gcHJvY2Vzcy4gV2UgaGF2ZSB0byBhc3N1bWUKK2l0IGNhbiBtYXRjaCBhbiBlbXB0eSBzdHJpbmcuIFRoaXMgY2FuIGhhcHBlbiBtb3JlIG9mdGVuIHdoZW4gKD98IGdyb3VwcyBhcmUKK3ByZXNlbnQgaW4gdGhlIHBhdHRlcm4gYW5kIHRoZSBjYWNoaW5nIGlzIGRpc2FibGVkLiBTZXR0aW5nIHRoZSBjYXAgYXQgMTEwMAorYWxsb3dzIHRoZSB0ZXN0IGZvciBtb3JlIHRoYW4gMTAyMyBjYXB0dXJpbmcgcGF0dGVybnMgdG8gd29yay4gKi8KKworaWYgKCgqY291bnRwdHIpKysgPiAxMTAwKSByZXR1cm4gQ0JFX1RPT0NPTVBMSUNBVEVEOworCisvKiBTY2FuIHRoZSBvcGNvZGVzIGZvciB0aGlzIGJyYW5jaC4gKi8KKworZm9yIChjb2RlID0gZmlyc3Rfc2lnbmlmaWNhbnRfY29kZShjb2RlICsgUFJJVihPUF9sZW5ndGhzKVsqY29kZV0sIFRSVUUpOworICAgICBjb2RlIDwgZW5kY29kZTsKKyAgICAgY29kZSA9IGZpcnN0X3NpZ25pZmljYW50X2NvZGUoY29kZSArIFBSSVYoT1BfbGVuZ3RocylbY10sIFRSVUUpKQorICB7CisgIFBDUkUyX1NQVFIgY2NvZGU7CisKKyAgYyA9ICpjb2RlOworCisgIC8qIFNraXAgb3ZlciBmb3J3YXJkIGFzc2VydGlvbnM7IHRoZSBvdGhlciBhc3NlcnRpb25zIGFyZSBza2lwcGVkIGJ5CisgIGZpcnN0X3NpZ25pZmljYW50X2NvZGUoKSB3aXRoIGEgVFJVRSBmaW5hbCBhcmd1bWVudC4gKi8KKworICBpZiAoYyA9PSBPUF9BU1NFUlQpCisgICAgeworICAgIGRvIGNvZGUgKz0gR0VUKGNvZGUsIDEpOyB3aGlsZSAoKmNvZGUgPT0gT1BfQUxUKTsKKyAgICBjID0gKmNvZGU7CisgICAgY29udGludWU7CisgICAgfQorCisgIC8qIEZvciBhIHJlY3Vyc2lvbi9zdWJyb3V0aW5lIGNhbGwgd2UgY2FuIHNjYW4gdGhlIHJlY3Vyc2lvbiB3aGVuIHRoaXMKKyAgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHRoZSBlbmQsIHRvIGNoZWNrIGEgY29tcGxldGUgcGF0dGVybi4gQmVmb3JlIHRoZW4sCisgIHJlY3Vyc2lvbnMganVzdCBoYXZlIHRoZSBncm91cCBudW1iZXIgYXMgdGhlaXIgYXJndW1lbnQgYW5kIGluIGFueSBjYXNlIG1heQorICBiZSBmb3J3YXJkIHJlZmVyZW5jZXMuIEluIHRoYXQgc2l0dWF0aW9uLCB3ZSByZXR1cm4gQ0JFX0VNUFRZLCBqdXN0IGluIGNhc2UuCisgIEl0IG1lYW5zIHRoYXQgdW5saW1pdGVkIHJlcGVhdHMgb2YgZ3JvdXBzIHRoYXQgY29udGFpbiByZWN1cnNpb25zIGFyZSBhbHdheXMKKyAgdHJlYXRlZCBhcyAiY291bGQgYmUgZW1wdHkiIC0gd2hpY2gganVzdCBhZGRzIGEgYml0IG1vcmUgcHJvY2Vzc2luZyB0aW1lCisgIGJlY2F1c2Ugb2YgdGhlIHJ1bnRpbWUgY2hlY2suICovCisKKyAgaWYgKGMgPT0gT1BfUkVDVVJTRSkKKyAgICB7CisgICAgUENSRTJfU1BUUiBzY29kZSwgZW5kZ3JvdXA7CisgICAgQk9PTCBlbXB0eV9icmFuY2g7CisKKyAgICBpZiAoIWF0ZW5kKSBnb3RvIElTVFJVRTsKKyAgICBzY29kZSA9IGNiLT5zdGFydF9jb2RlICsgR0VUKGNvZGUsIDEpOworICAgIGVuZGdyb3VwID0gc2NvZGU7CisKKyAgICAvKiBXZSBuZWVkIHRvIGRldGVjdCB3aGV0aGVyIHRoaXMgaXMgYSByZWN1cnNpdmUgY2FsbCwgYXMgb3RoZXJ3aXNlIHRoZXJlCisgICAgd2lsbCBiZSBhbiBpbmZpbml0ZSBsb29wLiBJZiBpdCBpcyBhIHJlY3Vyc2lvbiwganVzdCBza2lwIG92ZXIgaXQuIFNpbXBsZQorICAgIHJlY3Vyc2lvbnMgYXJlIGVhc2lseSBkZXRlY3RlZC4gRm9yIG11dHVhbCByZWN1cnNpb25zIHdlIGtlZXAgYSBjaGFpbiBvbgorICAgIHRoZSBzdGFjay4gKi8KKworICAgIGRvIGVuZGdyb3VwICs9IEdFVChlbmRncm91cCwgMSk7IHdoaWxlICgqZW5kZ3JvdXAgPT0gT1BfQUxUKTsKKyAgICBpZiAoY29kZSA+PSBzY29kZSAmJiBjb2RlIDw9IGVuZGdyb3VwKSBjb250aW51ZTsgIC8qIFNpbXBsZSByZWN1cnNpb24gKi8KKyAgICBlbHNlCisgICAgICB7CisgICAgICByZWN1cnNlX2NoZWNrICpyID0gcmVjdXJzZXM7CisgICAgICBmb3IgKHIgPSByZWN1cnNlczsgciAhPSBOVUxMOyByID0gci0+cHJldikKKyAgICAgICAgaWYgKHItPmdyb3VwID09IHNjb2RlKSBicmVhazsKKyAgICAgIGlmIChyICE9IE5VTEwpIGNvbnRpbnVlOyAgIC8qIE11dHVhbCByZWN1cnNpb24gKi8KKyAgICAgIH0KKworICAgIC8qIFNjYW4gdGhlIHJlZmVyZW5jZWQgZ3JvdXAsIHJlbWVtYmVyaW5nIGl0IG9uIHRoZSBzdGFjayBjaGFpbiB0byBkZXRlY3QKKyAgICBtdXR1YWwgcmVjdXJzaW9ucy4gKi8KKworICAgIGVtcHR5X2JyYW5jaCA9IEZBTFNFOworICAgIHRoaXNfcmVjdXJzZS5wcmV2ID0gcmVjdXJzZXM7CisgICAgdGhpc19yZWN1cnNlLmdyb3VwID0gc2NvZGU7CisKKyAgICBkbworICAgICAgeworICAgICAgaW50IHJjID0gY291bGRfYmVfZW1wdHlfYnJhbmNoKHNjb2RlLCBlbmRjb2RlLCB1dGYsIGNiLCBhdGVuZCwKKyAgICAgICAgJnRoaXNfcmVjdXJzZSwgY291bnRwdHIpOworICAgICAgaWYgKHJjIDwgMCkgcmV0dXJuIHJjOworICAgICAgaWYgKHJjID4gMCkKKyAgICAgICAgeworICAgICAgICBlbXB0eV9icmFuY2ggPSBUUlVFOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgc2NvZGUgKz0gR0VUKHNjb2RlLCAxKTsKKyAgICAgIH0KKyAgICB3aGlsZSAoKnNjb2RlID09IE9QX0FMVCk7CisKKyAgICBpZiAoIWVtcHR5X2JyYW5jaCkgZ290byBJU0ZBTFNFOyAgLyogQWxsIGJyYW5jaGVzIGFyZSBub24tZW1wdHkgKi8KKyAgICBjb250aW51ZTsKKyAgICB9CisKKyAgLyogR3JvdXBzIHdpdGggemVybyByZXBlYXRzIGNhbiBvZiBjb3Vyc2UgYmUgZW1wdHk7IHNraXAgdGhlbS4gKi8KKworICBpZiAoYyA9PSBPUF9CUkFaRVJPIHx8IGMgPT0gT1BfQlJBTUlOWkVSTyB8fCBjID09IE9QX1NLSVBaRVJPIHx8CisgICAgICBjID09IE9QX0JSQVBPU1pFUk8pCisgICAgeworICAgIGNvZGUgKz0gUFJJVihPUF9sZW5ndGhzKVtjXTsKKyAgICBkbyBjb2RlICs9IEdFVChjb2RlLCAxKTsgd2hpbGUgKCpjb2RlID09IE9QX0FMVCk7CisgICAgYyA9ICpjb2RlOworICAgIGNvbnRpbnVlOworICAgIH0KKworICAvKiBBIG5lc3RlZCBncm91cCB0aGF0IGlzIGFscmVhZHkgbWFya2VkIGFzICJjb3VsZCBiZSBlbXB0eSIgY2FuIGp1c3QgYmUKKyAgc2tpcHBlZC4gKi8KKworICBpZiAoYyA9PSBPUF9TQlJBICB8fCBjID09IE9QX1NCUkFQT1MgfHwKKyAgICAgIGMgPT0gT1BfU0NCUkEgfHwgYyA9PSBPUF9TQ0JSQVBPUykKKyAgICB7CisgICAgZG8gY29kZSArPSBHRVQoY29kZSwgMSk7IHdoaWxlICgqY29kZSA9PSBPUF9BTFQpOworICAgIGMgPSAqY29kZTsKKyAgICBjb250aW51ZTsKKyAgICB9CisKKyAgLyogRm9yIG90aGVyIGdyb3Vwcywgc2NhbiB0aGUgYnJhbmNoZXMuICovCisKKyAgaWYgKGMgPT0gT1BfQlJBICB8fCBjID09IE9QX0JSQVBPUyB8fAorICAgICAgYyA9PSBPUF9DQlJBIHx8IGMgPT0gT1BfQ0JSQVBPUyB8fAorICAgICAgYyA9PSBPUF9PTkNFIHx8IGMgPT0gT1BfT05DRV9OQyB8fAorICAgICAgYyA9PSBPUF9DT05EIHx8IGMgPT0gT1BfU0NPTkQpCisgICAgeworICAgIEJPT0wgZW1wdHlfYnJhbmNoOworICAgIGlmIChHRVQoY29kZSwgMSkgPT0gMCkgZ290byBJU1RSVUU7ICAgIC8qIEhpdCB1bmNsb3NlZCBicmFja2V0ICovCisKKyAgICAvKiBJZiBhIGNvbmRpdGlvbmFsIGdyb3VwIGhhcyBvbmx5IG9uZSBicmFuY2gsIHRoZXJlIGlzIGEgc2Vjb25kLCBpbXBsaWVkLAorICAgIGVtcHR5IGJyYW5jaCwgc28ganVzdCBza2lwIG92ZXIgdGhlIGNvbmRpdGlvbmFsLCBiZWNhdXNlIGl0IGNvdWxkIGJlIGVtcHR5LgorICAgIE90aGVyd2lzZSwgc2NhbiB0aGUgaW5kaXZpZHVhbCBicmFuY2hlcyBvZiB0aGUgZ3JvdXAuICovCisKKyAgICBpZiAoYyA9PSBPUF9DT05EICYmIGNvZGVbR0VUKGNvZGUsIDEpXSAhPSBPUF9BTFQpCisgICAgICBjb2RlICs9IEdFVChjb2RlLCAxKTsKKyAgICBlbHNlCisgICAgICB7CisgICAgICBlbXB0eV9icmFuY2ggPSBGQUxTRTsKKyAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgaWYgKCFlbXB0eV9icmFuY2gpCisgICAgICAgICAgeworICAgICAgICAgIGludCByYyA9IGNvdWxkX2JlX2VtcHR5X2JyYW5jaChjb2RlLCBlbmRjb2RlLCB1dGYsIGNiLCBhdGVuZCwKKyAgICAgICAgICAgIHJlY3Vyc2VzLCBjb3VudHB0cik7CisgICAgICAgICAgaWYgKHJjIDwgMCkgcmV0dXJuIHJjOworICAgICAgICAgIGlmIChyYyA+IDApIGVtcHR5X2JyYW5jaCA9IFRSVUU7CisgICAgICAgICAgfQorICAgICAgICBjb2RlICs9IEdFVChjb2RlLCAxKTsKKyAgICAgICAgfQorICAgICAgd2hpbGUgKCpjb2RlID09IE9QX0FMVCk7CisgICAgICBpZiAoIWVtcHR5X2JyYW5jaCkgZ290byBJU0ZBTFNFOyAgIC8qIEFsbCBicmFuY2hlcyBhcmUgbm9uLWVtcHR5ICovCisgICAgICB9CisKKyAgICBjID0gKmNvZGU7CisgICAgY29udGludWU7CisgICAgfQorCisgIC8qIEhhbmRsZSB0aGUgb3RoZXIgb3Bjb2RlcyAqLworCisgIHN3aXRjaCAoYykKKyAgICB7CisgICAgLyogQ2hlY2sgZm9yIHF1YW50aWZpZXJzIGFmdGVyIGEgY2xhc3MuIFhDTEFTUyBpcyB1c2VkIGZvciBjbGFzc2VzIHRoYXQKKyAgICBjYW5ub3QgYmUgcmVwcmVzZW50ZWQganVzdCBieSBhIGJpdCBtYXAuIFRoaXMgaW5jbHVkZXMgbmVnYXRlZCBzaW5nbGUKKyAgICBoaWdoLXZhbHVlZCBjaGFyYWN0ZXJzLiBUaGUgbGVuZ3RoIGluIFBSSVYoT1BfbGVuZ3RocylbXSBpcyB6ZXJvOyB0aGUKKyAgICBhY3R1YWwgbGVuZ3RoIGlzIHN0b3JlZCBpbiB0aGUgY29tcGlsZWQgY29kZSwgc28gd2UgbXVzdCB1cGRhdGUgImNvZGUiCisgICAgaGVyZS4gKi8KKworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFIHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgY2FzZSBPUF9YQ0xBU1M6CisgICAgY2NvZGUgPSBjb2RlICs9IEdFVChjb2RlLCAxKTsKKyAgICBnb3RvIENIRUNLX0NMQVNTX1JFUEVBVDsKKyNlbmRpZgorCisgICAgY2FzZSBPUF9DTEFTUzoKKyAgICBjYXNlIE9QX05DTEFTUzoKKyAgICBjY29kZSA9IGNvZGUgKyBQUklWKE9QX2xlbmd0aHMpW09QX0NMQVNTXTsKKworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFIHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgQ0hFQ0tfQ0xBU1NfUkVQRUFUOgorI2VuZGlmCisKKyAgICBzd2l0Y2ggKCpjY29kZSkKKyAgICAgIHsKKyAgICAgIGNhc2UgT1BfQ1JTVEFSOiAgICAgICAgICAgIC8qIFRoZXNlIGNvdWxkIGJlIGVtcHR5OyBjb250aW51ZSAqLworICAgICAgY2FzZSBPUF9DUk1JTlNUQVI6CisgICAgICBjYXNlIE9QX0NSUVVFUlk6CisgICAgICBjYXNlIE9QX0NSTUlOUVVFUlk6CisgICAgICBjYXNlIE9QX0NSUE9TU1RBUjoKKyAgICAgIGNhc2UgT1BfQ1JQT1NRVUVSWToKKyAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgICAvKiBOb24tcmVwZWF0ID0+IGNsYXNzIG11c3QgbWF0Y2ggKi8KKyAgICAgIGNhc2UgT1BfQ1JQTFVTOiAgICAgICAgICAgIC8qIFRoZXNlIHJlcGVhdHMgYXJlbid0IGVtcHR5ICovCisgICAgICBjYXNlIE9QX0NSTUlOUExVUzoKKyAgICAgIGNhc2UgT1BfQ1JQT1NQTFVTOgorICAgICAgZ290byBJU0ZBTFNFOworCisgICAgICBjYXNlIE9QX0NSUkFOR0U6CisgICAgICBjYXNlIE9QX0NSTUlOUkFOR0U6CisgICAgICBjYXNlIE9QX0NSUE9TUkFOR0U6CisgICAgICBpZiAoR0VUMihjY29kZSwgMSkgPiAwKSBnb3RvIElTRkFMU0U7ICAvKiBNaW5pbXVtID4gMCAqLworICAgICAgYnJlYWs7CisgICAgICB9CisgICAgYnJlYWs7CisKKyAgICAvKiBPcGNvZGVzIHRoYXQgbXVzdCBtYXRjaCBhIGNoYXJhY3RlciAqLworCisgICAgY2FzZSBPUF9BTlk6CisgICAgY2FzZSBPUF9BTExBTlk6CisgICAgY2FzZSBPUF9BTllCWVRFOgorCisgICAgY2FzZSBPUF9QUk9QOgorICAgIGNhc2UgT1BfTk9UUFJPUDoKKyAgICBjYXNlIE9QX0FOWU5MOgorCisgICAgY2FzZSBPUF9OT1RfSFNQQUNFOgorICAgIGNhc2UgT1BfSFNQQUNFOgorICAgIGNhc2UgT1BfTk9UX1ZTUEFDRToKKyAgICBjYXNlIE9QX1ZTUEFDRToKKyAgICBjYXNlIE9QX0VYVFVOSToKKworICAgIGNhc2UgT1BfTk9UX0RJR0lUOgorICAgIGNhc2UgT1BfRElHSVQ6CisgICAgY2FzZSBPUF9OT1RfV0hJVEVTUEFDRToKKyAgICBjYXNlIE9QX1dISVRFU1BBQ0U6CisgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CisgICAgY2FzZSBPUF9XT1JEQ0hBUjoKKworICAgIGNhc2UgT1BfQ0hBUjoKKyAgICBjYXNlIE9QX0NIQVJJOgorICAgIGNhc2UgT1BfTk9UOgorICAgIGNhc2UgT1BfTk9USToKKworICAgIGNhc2UgT1BfUExVUzoKKyAgICBjYXNlIE9QX1BMVVNJOgorICAgIGNhc2UgT1BfTUlOUExVUzoKKyAgICBjYXNlIE9QX01JTlBMVVNJOgorCisgICAgY2FzZSBPUF9OT1RQTFVTOgorICAgIGNhc2UgT1BfTk9UUExVU0k6CisgICAgY2FzZSBPUF9OT1RNSU5QTFVTOgorICAgIGNhc2UgT1BfTk9UTUlOUExVU0k6CisKKyAgICBjYXNlIE9QX1BPU1BMVVM6CisgICAgY2FzZSBPUF9QT1NQTFVTSToKKyAgICBjYXNlIE9QX05PVFBPU1BMVVM6CisgICAgY2FzZSBPUF9OT1RQT1NQTFVTSToKKworICAgIGNhc2UgT1BfRVhBQ1Q6CisgICAgY2FzZSBPUF9FWEFDVEk6CisgICAgY2FzZSBPUF9OT1RFWEFDVDoKKyAgICBjYXNlIE9QX05PVEVYQUNUSToKKworICAgIGNhc2UgT1BfVFlQRVBMVVM6CisgICAgY2FzZSBPUF9UWVBFTUlOUExVUzoKKyAgICBjYXNlIE9QX1RZUEVQT1NQTFVTOgorICAgIGNhc2UgT1BfVFlQRUVYQUNUOgorICAgIGdvdG8gSVNGQUxTRTsKKworICAgIC8qIFRoZXNlIGFyZSBnb2luZyB0byBjb250aW51ZSwgYXMgdGhleSBtYXkgYmUgZW1wdHksIGJ1dCB3ZSBoYXZlIHRvCisgICAgZnVkZ2UgdGhlIGxlbmd0aCBmb3IgdGhlIFxwIGFuZCBcUCBjYXNlcy4gKi8KKworICAgIGNhc2UgT1BfVFlQRVNUQVI6CisgICAgY2FzZSBPUF9UWVBFTUlOU1RBUjoKKyAgICBjYXNlIE9QX1RZUEVQT1NTVEFSOgorICAgIGNhc2UgT1BfVFlQRVFVRVJZOgorICAgIGNhc2UgT1BfVFlQRU1JTlFVRVJZOgorICAgIGNhc2UgT1BfVFlQRVBPU1FVRVJZOgorICAgIGlmIChjb2RlWzFdID09IE9QX1BST1AgfHwgY29kZVsxXSA9PSBPUF9OT1RQUk9QKSBjb2RlICs9IDI7CisgICAgYnJlYWs7CisKKyAgICAvKiBTYW1lIGZvciB0aGVzZSAqLworCisgICAgY2FzZSBPUF9UWVBFVVBUTzoKKyAgICBjYXNlIE9QX1RZUEVNSU5VUFRPOgorICAgIGNhc2UgT1BfVFlQRVBPU1VQVE86CisgICAgaWYgKGNvZGVbMSArIElNTTJfU0laRV0gPT0gT1BfUFJPUCB8fCBjb2RlWzEgKyBJTU0yX1NJWkVdID09IE9QX05PVFBST1ApCisgICAgICBjb2RlICs9IDI7CisgICAgYnJlYWs7CisKKyAgICAvKiBFbmQgb2YgYnJhbmNoICovCisKKyAgICBjYXNlIE9QX0tFVDoKKyAgICBjYXNlIE9QX0tFVFJNQVg6CisgICAgY2FzZSBPUF9LRVRSTUlOOgorICAgIGNhc2UgT1BfS0VUUlBPUzoKKyAgICBjYXNlIE9QX0FMVDoKKyAgICBnb3RvIElTVFJVRTsKKworICAgIC8qIEluIFVURi04IG9yIFVURi0xNiBtb2RlLCBTVEFSLCBNSU5TVEFSLCBQT1NTVEFSLCBRVUVSWSwgTUlOUVVFUlksCisgICAgUE9TUVVFUlksIFVQVE8sIE1JTlVQVE8sIGFuZCBQT1NVUFRPIGFuZCB0aGVpciBjYXNlbGVzcyBhbmQgbmVnYXRpdmUKKyAgICB2ZXJzaW9ucyBtYXkgYmUgZm9sbG93ZWQgYnkgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyLiAqLworCisjaWZkZWYgTUFZQkVfVVRGX01VTFRJCisgICAgY2FzZSBPUF9TVEFSOgorICAgIGNhc2UgT1BfU1RBUkk6CisgICAgY2FzZSBPUF9OT1RTVEFSOgorICAgIGNhc2UgT1BfTk9UU1RBUkk6CisKKyAgICBjYXNlIE9QX01JTlNUQVI6CisgICAgY2FzZSBPUF9NSU5TVEFSSToKKyAgICBjYXNlIE9QX05PVE1JTlNUQVI6CisgICAgY2FzZSBPUF9OT1RNSU5TVEFSSToKKworICAgIGNhc2UgT1BfUE9TU1RBUjoKKyAgICBjYXNlIE9QX1BPU1NUQVJJOgorICAgIGNhc2UgT1BfTk9UUE9TU1RBUjoKKyAgICBjYXNlIE9QX05PVFBPU1NUQVJJOgorCisgICAgY2FzZSBPUF9RVUVSWToKKyAgICBjYXNlIE9QX1FVRVJZSToKKyAgICBjYXNlIE9QX05PVFFVRVJZOgorICAgIGNhc2UgT1BfTk9UUVVFUllJOgorCisgICAgY2FzZSBPUF9NSU5RVUVSWToKKyAgICBjYXNlIE9QX01JTlFVRVJZSToKKyAgICBjYXNlIE9QX05PVE1JTlFVRVJZOgorICAgIGNhc2UgT1BfTk9UTUlOUVVFUllJOgorCisgICAgY2FzZSBPUF9QT1NRVUVSWToKKyAgICBjYXNlIE9QX1BPU1FVRVJZSToKKyAgICBjYXNlIE9QX05PVFBPU1FVRVJZOgorICAgIGNhc2UgT1BfTk9UUE9TUVVFUllJOgorICAgIGlmICh1dGYgJiYgSEFTX0VYVFJBTEVOKGNvZGVbMV0pKSBjb2RlICs9IEdFVF9FWFRSQUxFTihjb2RlWzFdKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfVVBUTzoKKyAgICBjYXNlIE9QX1VQVE9JOgorICAgIGNhc2UgT1BfTk9UVVBUTzoKKyAgICBjYXNlIE9QX05PVFVQVE9JOgorCisgICAgY2FzZSBPUF9NSU5VUFRPOgorICAgIGNhc2UgT1BfTUlOVVBUT0k6CisgICAgY2FzZSBPUF9OT1RNSU5VUFRPOgorICAgIGNhc2UgT1BfTk9UTUlOVVBUT0k6CisKKyAgICBjYXNlIE9QX1BPU1VQVE86CisgICAgY2FzZSBPUF9QT1NVUFRPSToKKyAgICBjYXNlIE9QX05PVFBPU1VQVE86CisgICAgY2FzZSBPUF9OT1RQT1NVUFRPSToKKyAgICBpZiAodXRmICYmIEhBU19FWFRSQUxFTihjb2RlWzEgKyBJTU0yX1NJWkVdKSkgY29kZSArPSBHRVRfRVhUUkFMRU4oY29kZVsxICsgSU1NMl9TSVpFXSk7CisgICAgYnJlYWs7CisjZW5kaWYgIC8qIE1BWUJFX1VURl9NVUxUSSAqLworCisgICAgLyogTUFSSywgYW5kIFBSVU5FL1NLSVAvVEhFTiB3aXRoIGFuIGFyZ3VtZW50IG11c3Qgc2tpcCBvdmVyIHRoZSBhcmd1bWVudAorICAgIHN0cmluZy4gKi8KKworICAgIGNhc2UgT1BfTUFSSzoKKyAgICBjYXNlIE9QX1BSVU5FX0FSRzoKKyAgICBjYXNlIE9QX1NLSVBfQVJHOgorICAgIGNhc2UgT1BfVEhFTl9BUkc6CisgICAgY29kZSArPSBjb2RlWzFdOworICAgIGJyZWFrOworCisgICAgLyogTm9uZSBvZiB0aGUgcmVtYWluaW5nIG9wY29kZXMgYXJlIHJlcXVpcmVkIHRvIG1hdGNoIGEgY2hhcmFjdGVyLiAqLworCisgICAgZGVmYXVsdDoKKyAgICBicmVhazsKKyAgICB9CisgIH0KKworSVNUUlVFOgorZ3JvdXBpbmZvIHw9IEdJX0NPVUxEX0JFX0VNUFRZOworCitJU0ZBTFNFOgoraWYgKGdyb3VwID4gMCkgY2ItPmdyb3VwaW5mb1tncm91cF0gPSBncm91cGluZm8gfCBHSV9TRVRfQ09VTERfQkVfRU1QVFk7CisKK3JldHVybiAoKGdyb3VwaW5mbyAmIEdJX0NPVUxEX0JFX0VNUFRZKSAhPSAwKT8gQ0JFX0VNUFRZIDogQ0JFX05PVEVNUFRZOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICBDaGVjayBmb3IgY291bnRlZCByZXBlYXQgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgJ3snIGlzIGVuY291bnRlcmVkIGluIGEgcGxhY2Ugd2hlcmUgaXQgbWlnaHQKK3N0YXJ0IGEgcXVhbnRpZmllci4gSXQgbG9va3MgYWhlYWQgdG8gc2VlIGlmIGl0IHJlYWxseSBpcyBhIHF1YW50aWZpZXIsIHRoYXQKK2lzLCBvbmUgb2YgdGhlIGZvcm1zIHtkZGR9IHtkZGQsfSBvciB7ZGRkLGRkZH0gd2hlcmUgdGhlIGRkZHMgYXJlIGRpZ2l0cy4KKworQXJndW1lbnQ6ICAgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhciBhZnRlciAneycKK1JldHVybnM6ICAgIFRSVUUgb3IgRkFMU0UKKyovCisKK3N0YXRpYyBCT09MCitpc19jb3VudGVkX3JlcGVhdChQQ1JFMl9TUFRSIHApCit7CitpZiAoIUlTX0RJR0lUKCpwKSkgcmV0dXJuIEZBTFNFOworcCsrOword2hpbGUgKElTX0RJR0lUKCpwKSkgcCsrOworaWYgKCpwID09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCkgcmV0dXJuIFRSVUU7CisKK2lmICgqcCsrICE9IENIQVJfQ09NTUEpIHJldHVybiBGQUxTRTsKK2lmICgqcCA9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQpIHJldHVybiBUUlVFOworCitpZiAoIUlTX0RJR0lUKCpwKSkgcmV0dXJuIEZBTFNFOworcCsrOword2hpbGUgKElTX0RJR0lUKCpwKSkgcCsrOworCityZXR1cm4gKCpwID09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgIEhhbmRsZSBlc2NhcGVzICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBcIGhhcyBiZWVuIGVuY291bnRlcmVkLiBJdCBlaXRoZXIgcmV0dXJucyBhCitwb3NpdGl2ZSB2YWx1ZSBmb3IgYSBzaW1wbGUgZXNjYXBlIHN1Y2ggYXMgXGQsIG9yIDAgZm9yIGEgZGF0YSBjaGFyYWN0ZXIsIHdoaWNoCitpcyBwbGFjZWQgaW4gY2hwdHIuIEEgYmFja3JlZmVyZW5jZSB0byBncm91cCBuIGlzIHJldHVybmVkIGFzIG5lZ2F0aXZlIG4uIE9uCitlbnRyeSwgcHRyIGlzIHBvaW50aW5nIGF0IHRoZSBcLiBPbiBleGl0LCBpdCBwb2ludHMgdGhlIGZpbmFsIGNvZGUgdW5pdCBvZiB0aGUKK2VzY2FwZSBzZXF1ZW5jZS4KKworVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBmcm9tIHBjcmUyX3N1YnN0aXR1dGUoKSB0byBoYW5kbGUgZXNjYXBlIHNlcXVlbmNlcworaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4gSW4gdGhpcyBjYXNlLCB0aGUgY2IgYXJndW1lbnQgaXMgTlVMTCwgYW5kIG9ubHkKK3NlcXVlbmNlcyB0aGF0IGRlZmluZSBhIGRhdGEgY2hhcmFjdGVyIGFyZSByZWNvZ25pc2VkLiBUaGUgaXNjbGFzcyBhcmd1bWVudCBpcworbm90IHJlbGV2YW50LCBidXQgdGhlIG9wdGlvbnMgYXJndW1lbnQgaXMgdGhlIGZpbmFsIHZhbHVlIG9mIHRoZSBjb21waWxlZAorcGF0dGVybidzIG9wdGlvbnMuCisKK1RoZXJlIGlzIG9uZSAidHJpY2siIGNhc2U6IHdoZW4gYSBzZXF1ZW5jZSBzdWNoIGFzIFtbOj46XV0gb3IgXHMgaW4gVUNQIG1vZGUgaXMKK3Byb2Nlc3NlZCwgaXQgaXMgcmVwbGFjZWQgYnkgYSBuZXN0ZWQgYWx0ZXJuYXRpdmUgc2VxdWVuY2UuIElmIHRoaXMgY29udGFpbnMgYQorYmFja3NsYXNoICh3aGljaCBpcyB1c3VhbGx5IGRvZXMpLCBwdHJlbmQgZG9lcyBub3QgcG9pbnQgdG8gaXRzIGVuZCAtIGl0IHN0aWxsCitwb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUgd2hvbGUgcGF0dGVybi4gSG93ZXZlciwgd2UgY2FuIGRldGVjdCB0aGlzIGNhc2UKK2JlY2F1c2UgY2ItPm5lc3RwdHJbMF0gd2lsbCBiZSBub24tTlVMTC4gVGhlIG5lc3RlZCBzZXF1ZW5jZXMgYXJlIGFsbCB6ZXJvLQordGVybWluYXRlZCBhbmQgdGhlcmUgYXJlIG9ubHkgZXZlciB0d28gbGV2ZWxzIG9mIG5lc3RpbmcuCisKK0FyZ3VtZW50czoKKyAgcHRycHRyICAgICAgICAgcG9pbnRzIHRvIHRoZSBpbnB1dCBwb3NpdGlvbiBwb2ludGVyCisgIHB0cmVuZCAgICAgICAgIHBvaW50cyB0byB0aGUgZW5kIG9mIHRoZSBpbnB1dAorICBjaHB0ciAgICAgICAgICBwb2ludHMgdG8gYSByZXR1cm5lZCBkYXRhIGNoYXJhY3RlcgorICBlcnJvcmNvZGVwdHIgICBwb2ludHMgdG8gdGhlIGVycm9yY29kZSB2YXJpYWJsZSAoY29udGFpbmluZyB6ZXJvKQorICBvcHRpb25zICAgICAgICB0aGUgY3VycmVudCBvcHRpb25zIGJpdHMKKyAgaXNjbGFzcyAgICAgICAgVFJVRSBpZiBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MKKyAgY2IgICAgICAgICAgICAgY29tcGlsZSBkYXRhIGJsb2NrCisKK1JldHVybnM6ICAgICAgICAgemVybyA9PiBhIGRhdGEgY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgIHBvc2l0aXZlID0+IGEgc3BlY2lhbCBlc2NhcGUgc2VxdWVuY2UKKyAgICAgICAgICAgICAgICAgbmVnYXRpdmUgPT4gYSBiYWNrIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgICBvbiBlcnJvciwgZXJyb3Jjb2RlcHRyIGlzIHNldCBub24temVybworKi8KKworaW50CitQUklWKGNoZWNrX2VzY2FwZSkoUENSRTJfU1BUUiAqcHRycHRyLCBQQ1JFMl9TUFRSIHB0cmVuZCwgdWludDMyX3QgKmNocHRyLAorICBpbnQgKmVycm9yY29kZXB0ciwgdWludDMyX3Qgb3B0aW9ucywgQk9PTCBpc2NsYXNzLCBjb21waWxlX2Jsb2NrICpjYikKK3sKK0JPT0wgdXRmID0gKG9wdGlvbnMgJiBQQ1JFMl9VVEYpICE9IDA7CitQQ1JFMl9TUFRSIHB0ciA9ICpwdHJwdHIgKyAxOworcmVnaXN0ZXIgdWludDMyX3QgYywgY2M7CitpbnQgZXNjYXBlID0gMDsKK2ludCBpOworCisvKiBGaW5kIHRoZSBlbmQgb2YgYSBuZXN0ZWQgaW5zZXJ0LiAqLworCitpZiAoY2IgIT0gTlVMTCAmJiBjYi0+bmVzdHB0clswXSAhPSBOVUxMKQorICBwdHJlbmQgPSBwdHIgKyBQUklWKHN0cmxlbikocHRyKTsKKworLyogSWYgYmFja3NsYXNoIGlzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgaXQncyBhbiBlcnJvci4gKi8KKworaWYgKHB0ciA+PSBwdHJlbmQpCisgIHsKKyAgKmVycm9yY29kZXB0ciA9IEVSUjE7CisgIHJldHVybiAwOworICB9CisKK0dFVENIQVJJTkNURVNUKGMsIHB0cik7ICAgICAgICAgLyogR2V0IGNoYXJhY3RlciB2YWx1ZSwgaW5jcmVtZW50IHBvaW50ZXIgKi8KK3B0ci0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IHBvaW50ZXIgYmFjayB0byB0aGUgbGFzdCBjb2RlIHVuaXQgKi8KKworLyogTm9uLWFscGhhbnVtZXJpY3MgYXJlIGxpdGVyYWxzLCBzbyB3ZSBqdXN0IGxlYXZlIHRoZSB2YWx1ZSBpbiBjLiBBbiBpbml0aWFsCit2YWx1ZSB0ZXN0IHNhdmVzIGEgbWVtb3J5IGxvb2t1cCBmb3IgY29kZSBwb2ludHMgb3V0c2lkZSB0aGUgYWxwaGFudW1lcmljCityYW5nZS4gT3RoZXJ3aXNlLCBkbyBhIHRhYmxlIGxvb2t1cC4gQSBub24temVybyByZXN1bHQgaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlCityZXR1cm5lZCBpbW1lZGlhdGVseS4gT3RoZXJ3aXNlIGZ1cnRoZXIgcHJvY2Vzc2luZyBpcyByZXF1aXJlZC4gKi8KKworaWYgKGMgPCBFU0NBUEVTX0ZJUlNUIHx8IGMgPiBFU0NBUEVTX0xBU1QpIHt9ICAvKiBEZWZpbml0ZWx5IGxpdGVyYWwgKi8KKworZWxzZSBpZiAoKGkgPSBlc2NhcGVzW2MgLSBFU0NBUEVTX0ZJUlNUXSkgIT0gMCkKKyAgeworICBpZiAoaSA+IDApIGMgPSAodWludDMyX3QpaTsgZWxzZSAgLyogUG9zaXRpdmUgaXMgYSBkYXRhIGNoYXJhY3RlciAqLworICAgIHsKKyAgICBlc2NhcGUgPSAtaTsgICAgICAgICAgICAgICAgICAgIC8qIEVsc2UgcmV0dXJuIGEgc3BlY2lhbCBlc2NhcGUgKi8KKyAgICBpZiAoZXNjYXBlID09IEVTQ19QIHx8IGVzY2FwZSA9PSBFU0NfcCB8fCBlc2NhcGUgPT0gRVNDX1gpCisgICAgICBjYi0+ZXh0ZXJuYWxfZmxhZ3MgfD0gUENSRTJfSEFTQktQT1JYOyAgIC8qIE5vdGUgXFAsIFxwLCBvciBcWCAqLworICAgIH0KKyAgfQorCisvKiBFc2NhcGVzIHRoYXQgbmVlZCBmdXJ0aGVyIHByb2Nlc3NpbmcsIGluY2x1ZGluZyB0aG9zZSB0aGF0IGFyZSB1bmtub3duLgorV2hlbiBjYWxsZWQgZnJvbSBwY3JlMl9zdWJzdGl0dXRlKCksIG9ubHkgXGMsIFxvLCBhbmQgXHggYXJlIHJlY29nbml6ZWQgKGFuZCBcdQord2hlbiBCU1VYIGlzIHNldCkuICovCisKK2Vsc2UKKyAgeworICBQQ1JFMl9TUFRSIG9sZHB0cjsKKyAgQk9PTCBicmFjZWQsIG5lZ2F0ZWQsIG92ZXJmbG93OworICB1bnNpZ25lZCBpbnQgczsKKworICAvKiBGaWx0ZXIgY2FsbHMgZnJvbSBwY3JlMl9zdWJzdGl0dXRlKCkuICovCisKKyAgaWYgKGNiID09IE5VTEwgJiYgYyAhPSBDSEFSX2MgJiYgYyAhPSBDSEFSX28gJiYgYyAhPSBDSEFSX3ggJiYKKyAgICAgIChjICE9IENIQVJfdSB8fCAob3B0aW9ucyAmIFBDUkUyX0FMVF9CU1VYKSAhPSAwKSkKKyAgICB7CisgICAgKmVycm9yY29kZXB0ciA9IEVSUjM7CisgICAgcmV0dXJuIDA7CisgICAgfQorCisgIHN3aXRjaCAoYykKKyAgICB7CisgICAgLyogQSBudW1iZXIgb2YgUGVybCBlc2NhcGVzIGFyZSBub3QgaGFuZGxlZCBieSBQQ1JFLiBXZSBnaXZlIGFuIGV4cGxpY2l0CisgICAgZXJyb3IuICovCisKKyAgICBjYXNlIENIQVJfbDoKKyAgICBjYXNlIENIQVJfTDoKKyAgICAqZXJyb3Jjb2RlcHRyID0gRVJSMzc7CisgICAgYnJlYWs7CisKKyAgICAvKiBcdSBpcyB1bnJlY29nbml6ZWQgd2hlbiBQQ1JFMl9BTFRfQlNVWCBpcyBub3Qgc2V0LiBXaGVuIGl0IGlzIHRyZWF0ZWQKKyAgICBzcGVjaWFsbHksIFx1IG11c3QgYmUgZm9sbG93ZWQgYnkgZm91ciBoZXggZGlnaXRzLiBPdGhlcndpc2UgaXQgaXMgYQorICAgIGxvd2VyY2FzZSB1IGxldHRlci4gKi8KKworICAgIGNhc2UgQ0hBUl91OgorICAgIGlmICgob3B0aW9ucyAmIFBDUkUyX0FMVF9CU1VYKSA9PSAwKSAqZXJyb3Jjb2RlcHRyID0gRVJSMzc7IGVsc2UKKyAgICAgIHsKKyAgICAgIHVpbnQzMl90IHhjOworICAgICAgaWYgKChjYyA9IFhESUdJVChwdHJbMV0pKSA9PSAweGZmKSBicmVhazsgIC8qIE5vdCBhIGhleCBkaWdpdCAqLworICAgICAgaWYgKCh4YyA9IFhESUdJVChwdHJbMl0pKSA9PSAweGZmKSBicmVhazsgIC8qIE5vdCBhIGhleCBkaWdpdCAqLworICAgICAgY2MgPSAoY2MgPDwgNCkgfCB4YzsKKyAgICAgIGlmICgoeGMgPSBYRElHSVQocHRyWzNdKSkgPT0gMHhmZikgYnJlYWs7ICAvKiBOb3QgYSBoZXggZGlnaXQgKi8KKyAgICAgIGNjID0gKGNjIDw8IDQpIHwgeGM7CisgICAgICBpZiAoKHhjID0gWERJR0lUKHB0cls0XSkpID09IDB4ZmYpIGJyZWFrOyAgLyogTm90IGEgaGV4IGRpZ2l0ICovCisgICAgICBjID0gKGNjIDw8IDQpIHwgeGM7CisgICAgICBwdHIgKz0gNDsKKyAgICAgIGlmICh1dGYpCisgICAgICAgIHsKKyAgICAgICAgaWYgKGMgPiAweDEwZmZmZlUpICplcnJvcmNvZGVwdHIgPSBFUlI3NzsKKyAgICAgICAgICBlbHNlIGlmIChjID49IDB4ZDgwMCAmJiBjIDw9IDB4ZGZmZikgKmVycm9yY29kZXB0ciA9IEVSUjczOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChjID4gTUFYX05PTl9VVEZfQ0hBUikgKmVycm9yY29kZXB0ciA9IEVSUjc3OworICAgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSBDSEFSX1U6CisgICAgLyogXFUgaXMgdW5yZWNvZ25pemVkIHVubGVzcyBQQ1JFMl9BTFRfQlNVWCBpcyBzZXQsIGluIHdoaWNoIGNhc2UgaXQgaXMgYW4KKyAgICB1cHBlciBjYXNlIGxldHRlci4gKi8KKyAgICBpZiAoKG9wdGlvbnMgJiBQQ1JFMl9BTFRfQlNVWCkgPT0gMCkgKmVycm9yY29kZXB0ciA9IEVSUjM3OworICAgIGJyZWFrOworCisgICAgLyogSW4gYSBjaGFyYWN0ZXIgY2xhc3MsIFxnIGlzIGp1c3QgYSBsaXRlcmFsICJnIi4gT3V0c2lkZSBhIGNoYXJhY3RlcgorICAgIGNsYXNzLCBcZyBtdXN0IGJlIGZvbGxvd2VkIGJ5IG9uZSBvZiBhIG51bWJlciBvZiBzcGVjaWZpYyB0aGluZ3M6CisKKyAgICAoMSkgQSBudW1iZXIsIGVpdGhlciBwbGFpbiBvciBicmFjZWQuIElmIHBvc2l0aXZlLCBpdCBpcyBhbiBhYnNvbHV0ZQorICAgIGJhY2tyZWZlcmVuY2UuIElmIG5lZ2F0aXZlLCBpdCBpcyBhIHJlbGF0aXZlIGJhY2tyZWZlcmVuY2UuIFRoaXMgaXMgYSBQZXJsCisgICAgNS4xMCBmZWF0dXJlLgorCisgICAgKDIpIFBlcmwgNS4xMCBhbHNvIHN1cHBvcnRzIFxne25hbWV9IGFzIGEgcmVmZXJlbmNlIHRvIGEgbmFtZWQgZ3JvdXAuIFRoaXMKKyAgICBpcyBwYXJ0IG9mIFBlcmwncyBtb3ZlbWVudCB0b3dhcmRzIGEgdW5pZmllZCBzeW50YXggZm9yIGJhY2sgcmVmZXJlbmNlcy4gQXMKKyAgICB0aGlzIGlzIHN5bm9ueW1vdXMgd2l0aCBca3tuYW1lfSwgd2UgZnVkZ2UgaXQgdXAgYnkgcHJldGVuZGluZyBpdCByZWFsbHkKKyAgICB3YXMgXGsuCisKKyAgICAoMykgRm9yIE9uaWd1cnVtYSBjb21wYXRpYmlsaXR5IHdlIGFsc28gc3VwcG9ydCBcZyBmb2xsb3dlZCBieSBhIG5hbWUgb3IgYQorICAgIG51bWJlciBlaXRoZXIgaW4gYW5nbGUgYnJhY2tldHMgb3IgaW4gc2luZ2xlIHF1b3Rlcy4gSG93ZXZlciwgdGhlc2UgYXJlCisgICAgKHBvc3NpYmx5IHJlY3Vyc2l2ZSkgc3Vicm91dGluZSBjYWxscywgX25vdF8gYmFja3JlZmVyZW5jZXMuIEp1c3QgcmV0dXJuCisgICAgdGhlIEVTQ19nIGNvZGUgKGNmIFxrKS4gKi8KKworICAgIGNhc2UgQ0hBUl9nOgorICAgIGlmIChpc2NsYXNzKSBicmVhazsKKyAgICBpZiAocHRyWzFdID09IENIQVJfTEVTU19USEFOX1NJR04gfHwgcHRyWzFdID09IENIQVJfQVBPU1RST1BIRSkKKyAgICAgIHsKKyAgICAgIGVzY2FwZSA9IEVTQ19nOworICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAvKiBIYW5kbGUgdGhlIFBlcmwtY29tcGF0aWJsZSBjYXNlcyAqLworCisgICAgaWYgKHB0clsxXSA9PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCkKKyAgICAgIHsKKyAgICAgIFBDUkUyX1NQVFIgcDsKKyAgICAgIGZvciAocCA9IHB0cisyOyAqcCAhPSBDSEFSX05VTEwgJiYgKnAgIT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUOyBwKyspCisgICAgICAgIGlmICgqcCAhPSBDSEFSX01JTlVTICYmICFJU19ESUdJVCgqcCkpIGJyZWFrOworICAgICAgaWYgKCpwICE9IENIQVJfTlVMTCAmJiAqcCAhPSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQpCisgICAgICAgIHsKKyAgICAgICAgZXNjYXBlID0gRVNDX2s7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBicmFjZWQgPSBUUlVFOworICAgICAgcHRyKys7CisgICAgICB9CisgICAgZWxzZSBicmFjZWQgPSBGQUxTRTsKKworICAgIGlmIChwdHJbMV0gPT0gQ0hBUl9NSU5VUykKKyAgICAgIHsKKyAgICAgIG5lZ2F0ZWQgPSBUUlVFOworICAgICAgcHRyKys7CisgICAgICB9CisgICAgZWxzZSBuZWdhdGVkID0gRkFMU0U7CisKKyAgICAvKiBUaGUgaW50ZWdlciByYW5nZSBpcyBsaW1pdGVkIGJ5IHRoZSBtYWNoaW5lJ3MgaW50IHJlcHJlc2VudGF0aW9uLiAqLworICAgIHMgPSAwOworICAgIG92ZXJmbG93ID0gRkFMU0U7CisgICAgd2hpbGUgKElTX0RJR0lUKHB0clsxXSkpCisgICAgICB7CisgICAgICBpZiAocyA+IElOVF9NQVggLyAxMCAtIDEpIC8qIEludGVnZXIgb3ZlcmZsb3cgKi8KKyAgICAgICAgeworICAgICAgICBvdmVyZmxvdyA9IFRSVUU7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBzID0gcyAqIDEwICsgKGludCkoKigrK3B0cikgLSBDSEFSXzApOworICAgICAgfQorICAgIGlmIChvdmVyZmxvdykgLyogSW50ZWdlciBvdmVyZmxvdyAqLworICAgICAgeworICAgICAgd2hpbGUgKElTX0RJR0lUKHB0clsxXSkpIHB0cisrOworICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjYxOworICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICBpZiAoYnJhY2VkICYmICooKytwdHIpICE9IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCkKKyAgICAgIHsKKyAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI1NzsKKyAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgaWYgKHMgPT0gMCkKKyAgICAgIHsKKyAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI1ODsKKyAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgaWYgKG5lZ2F0ZWQpCisgICAgICB7CisgICAgICBpZiAocyA+IGNiLT5icmFjb3VudCkKKyAgICAgICAgeworICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSMTU7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBzID0gY2ItPmJyYWNvdW50IC0gKHMgLSAxKTsKKyAgICAgIH0KKworICAgIGVzY2FwZSA9IC0oaW50KXM7CisgICAgYnJlYWs7CisKKyAgICAvKiBUaGUgaGFuZGxpbmcgb2YgZXNjYXBlIHNlcXVlbmNlcyBjb25zaXN0aW5nIG9mIGEgc3RyaW5nIG9mIGRpZ2l0cworICAgIHN0YXJ0aW5nIHdpdGggb25lIHRoYXQgaXMgbm90IHplcm8gaXMgbm90IHN0cmFpZ2h0Zm9yd2FyZC4gUGVybCBoYXMgY2hhbmdlZAorICAgIG92ZXIgdGhlIHllYXJzLiBOb3dhZGF5cyBcZ3t9IGZvciBiYWNrcmVmZXJlbmNlcyBhbmQgXG97fSBmb3Igb2N0YWwgYXJlCisgICAgcmVjb21tZW5kZWQgdG8gYXZvaWQgdGhlIGFtYmlndWl0aWVzIGluIHRoZSBvbGQgc3ludGF4LgorCisgICAgT3V0c2lkZSBhIGNoYXJhY3RlciBjbGFzcywgdGhlIGRpZ2l0cyBhcmUgcmVhZCBhcyBhIGRlY2ltYWwgbnVtYmVyLiBJZiB0aGUKKyAgICBudW1iZXIgaXMgbGVzcyB0aGFuIDEwLCBvciBpZiB0aGVyZSBhcmUgdGhhdCBtYW55IHByZXZpb3VzIGV4dHJhY3RpbmcgbGVmdAorICAgIGJyYWNrZXRzLCBpdCBpcyBhIGJhY2sgcmVmZXJlbmNlLiBPdGhlcndpc2UsIHVwIHRvIHRocmVlIG9jdGFsIGRpZ2l0cyBhcmUKKyAgICByZWFkIHRvIGZvcm0gYW4gZXNjYXBlZCBjaGFyYWN0ZXIgY29kZS4gVGh1cyBcMTIzIGlzIGxpa2VseSB0byBiZSBvY3RhbCAxMjMKKyAgICAoY2YgXDAxMjMsIHdoaWNoIGlzIG9jdGFsIDAxMiBmb2xsb3dlZCBieSB0aGUgbGl0ZXJhbCAzKS4KKworICAgIEluc2lkZSBhIGNoYXJhY3RlciBjbGFzcywgXCBmb2xsb3dlZCBieSBhIGRpZ2l0IGlzIGFsd2F5cyBlaXRoZXIgYSBsaXRlcmFsCisgICAgOCBvciA5IG9yIGFuIG9jdGFsIG51bWJlci4gKi8KKworICAgIGNhc2UgQ0hBUl8xOiBjYXNlIENIQVJfMjogY2FzZSBDSEFSXzM6IGNhc2UgQ0hBUl80OiBjYXNlIENIQVJfNToKKyAgICBjYXNlIENIQVJfNjogY2FzZSBDSEFSXzc6IGNhc2UgQ0hBUl84OiBjYXNlIENIQVJfOToKKworICAgIGlmICghaXNjbGFzcykKKyAgICAgIHsKKyAgICAgIG9sZHB0ciA9IHB0cjsKKyAgICAgIC8qIFRoZSBpbnRlZ2VyIHJhbmdlIGlzIGxpbWl0ZWQgYnkgdGhlIG1hY2hpbmUncyBpbnQgcmVwcmVzZW50YXRpb24uICovCisgICAgICBzID0gYyAtIENIQVJfMDsKKyAgICAgIG92ZXJmbG93ID0gRkFMU0U7CisgICAgICB3aGlsZSAoSVNfRElHSVQocHRyWzFdKSkKKyAgICAgICAgeworICAgICAgICBpZiAocyA+IElOVF9NQVggLyAxMCAtIDEpIC8qIEludGVnZXIgb3ZlcmZsb3cgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgb3ZlcmZsb3cgPSBUUlVFOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgcyA9IHMgKiAxMCArIChpbnQpKCooKytwdHIpIC0gQ0hBUl8wKTsKKyAgICAgICAgfQorICAgICAgaWYgKG92ZXJmbG93KSAvKiBJbnRlZ2VyIG92ZXJmbG93ICovCisgICAgICAgIHsKKyAgICAgICAgd2hpbGUgKElTX0RJR0lUKHB0clsxXSkpIHB0cisrOworICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSNjE7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIC8qIFwxIHRvIFw5IGFyZSBhbHdheXMgYmFjayByZWZlcmVuY2VzLiBcOHggYW5kIFw5eCBhcmUgdG9vOyBcMXggdG8gXDd4CisgICAgICBhcmUgb2N0YWwgZXNjYXBlcyBpZiB0aGVyZSBhcmUgbm90IHRoYXQgbWFueSBwcmV2aW91cyBjYXB0dXJlcy4gKi8KKworICAgICAgaWYgKHMgPCAxMCB8fCAqb2xkcHRyID49IENIQVJfOCB8fCBzIDw9IGNiLT5icmFjb3VudCkKKyAgICAgICAgeworICAgICAgICBlc2NhcGUgPSAtKGludClzOyAgICAgLyogSW5kaWNhdGVzIGEgYmFjayByZWZlcmVuY2UgKi8KKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIHB0ciA9IG9sZHB0cjsgICAgICAvKiBQdXQgdGhlIHBvaW50ZXIgYmFjayBhbmQgZmFsbCB0aHJvdWdoICovCisgICAgICB9CisKKyAgICAvKiBIYW5kbGUgYSBkaWdpdCBmb2xsb3dpbmcgXCB3aGVuIHRoZSBudW1iZXIgaXMgbm90IGEgYmFjayByZWZlcmVuY2UsIG9yCisgICAgd2UgYXJlIHdpdGhpbiBhIGNoYXJhY3RlciBjbGFzcy4gSWYgdGhlIGZpcnN0IGRpZ2l0IGlzIDggb3IgOSwgUGVybCB1c2VkIHRvCisgICAgZ2VuZXJhdGUgYSBiaW5hcnkgemVybyBieXRlIGFuZCB0aGVuIHRyZWF0IHRoZSBkaWdpdCBhcyBhIGZvbGxvd2luZworICAgIGxpdGVyYWwuIEF0IGxlYXN0IGJ5IFBlcmwgNS4xOCB0aGlzIGNoYW5nZWQgc28gYXMgbm90IHRvIGluc2VydCB0aGUgYmluYXJ5CisgICAgemVyby4gKi8KKworICAgIGlmICgoYyA9ICpwdHIpID49IENIQVJfOCkgYnJlYWs7CisKKyAgICAvKiBGYWxsIHRocm91Z2ggd2l0aCBhIGRpZ2l0IGxlc3MgdGhhbiA4ICovCisKKyAgICAvKiBcMCBhbHdheXMgc3RhcnRzIGFuIG9jdGFsIG51bWJlciwgYnV0IHdlIG1heSBkcm9wIHRocm91Z2ggdG8gaGVyZSB3aXRoIGEKKyAgICBsYXJnZXIgZmlyc3Qgb2N0YWwgZGlnaXQuIFRoZSBvcmlnaW5hbCBjb2RlIHVzZWQganVzdCB0byB0YWtlIHRoZSBsZWFzdAorICAgIHNpZ25pZmljYW50IDggYml0cyBvZiBvY3RhbCBudW1iZXJzIChJIHRoaW5rIHRoaXMgaXMgd2hhdCBlYXJseSBQZXJscyB1c2VkCisgICAgdG8gZG8pLiBOb3dhZGF5cyB3ZSBhbGxvdyBmb3IgbGFyZ2VyIG51bWJlcnMgaW4gVVRGLTggbW9kZSBhbmQgMTYtYml0IG1vZGUsCisgICAgYnV0IG5vIG1vcmUgdGhhbiAzIG9jdGFsIGRpZ2l0cy4gKi8KKworICAgIGNhc2UgQ0hBUl8wOgorICAgIGMgLT0gQ0hBUl8wOworICAgIHdoaWxlKGkrKyA8IDIgJiYgcHRyWzFdID49IENIQVJfMCAmJiBwdHJbMV0gPD0gQ0hBUl83KQorICAgICAgICBjID0gYyAqIDggKyAqKCsrcHRyKSAtIENIQVJfMDsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgIGlmICghdXRmICYmIGMgPiAweGZmKSAqZXJyb3Jjb2RlcHRyID0gRVJSNTE7CisjZW5kaWYKKyAgICBicmVhazsKKworICAgIC8qIFxvIGlzIGEgcmVsYXRpdmVseSBuZXcgUGVybCBmZWF0dXJlLCBzdXBwb3J0aW5nIGEgbW9yZSBnZW5lcmFsIHdheSBvZgorICAgIHNwZWNpZnlpbmcgY2hhcmFjdGVyIGNvZGVzIGluIG9jdGFsLiBUaGUgb25seSBzdXBwb3J0ZWQgZm9ybSBpcyBcb3tkZGR9LiAqLworCisgICAgY2FzZSBDSEFSX286CisgICAgaWYgKHB0clsxXSAhPSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCkgKmVycm9yY29kZXB0ciA9IEVSUjU1OyBlbHNlCisgICAgaWYgKHB0clsyXSA9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQpICplcnJvcmNvZGVwdHIgPSBFUlI3ODsgZWxzZQorICAgICAgeworICAgICAgcHRyICs9IDI7CisgICAgICBjID0gMDsKKyAgICAgIG92ZXJmbG93ID0gRkFMU0U7CisgICAgICB3aGlsZSAoKnB0ciA+PSBDSEFSXzAgJiYgKnB0ciA8PSBDSEFSXzcpCisgICAgICAgIHsKKyAgICAgICAgY2MgPSAqcHRyKys7CisgICAgICAgIGlmIChjID09IDAgJiYgY2MgPT0gQ0hBUl8wKSBjb250aW51ZTsgICAgIC8qIExlYWRpbmcgemVyb2VzICovCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCisgICAgICAgIGlmIChjID49IDB4MjAwMDAwMDBsKSB7IG92ZXJmbG93ID0gVFJVRTsgYnJlYWs7IH0KKyNlbmRpZgorICAgICAgICBjID0gKGMgPDwgMykgKyAoY2MgLSBDSEFSXzApOworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgICAgICAgIGlmIChjID4gKHV0ZiA/IDB4MTBmZmZmVSA6IDB4ZmZVKSkgeyBvdmVyZmxvdyA9IFRSVUU7IGJyZWFrOyB9CisjZWxpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYKKyAgICAgICAgaWYgKGMgPiAodXRmID8gMHgxMGZmZmZVIDogMHhmZmZmVSkpIHsgb3ZlcmZsb3cgPSBUUlVFOyBicmVhazsgfQorI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCisgICAgICAgIGlmICh1dGYgJiYgYyA+IDB4MTBmZmZmVSkgeyBvdmVyZmxvdyA9IFRSVUU7IGJyZWFrOyB9CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgaWYgKG92ZXJmbG93KQorICAgICAgICB7CisgICAgICAgIHdoaWxlICgqcHRyID49IENIQVJfMCAmJiAqcHRyIDw9IENIQVJfNykgcHRyKys7CisgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIzNDsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoKnB0ciA9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQpCisgICAgICAgIHsKKyAgICAgICAgaWYgKHV0ZiAmJiBjID49IDB4ZDgwMCAmJiBjIDw9IDB4ZGZmZikgKmVycm9yY29kZXB0ciA9IEVSUjczOworICAgICAgICB9CisgICAgICBlbHNlICplcnJvcmNvZGVwdHIgPSBFUlI2NDsKKyAgICAgIH0KKyAgICBicmVhazsKKworICAgIC8qIFx4IGlzIGNvbXBsaWNhdGVkLiBXaGVuIFBDUkUyX0FMVF9CU1VYIGlzIHNldCwgXHggbXVzdCBiZSBmb2xsb3dlZCBieQorICAgIHR3byBoZXhhZGVjaW1hbCBkaWdpdHMuIE90aGVyd2lzZSBpdCBpcyBhIGxvd2VyY2FzZSB4IGxldHRlci4gKi8KKworICAgIGNhc2UgQ0hBUl94OgorICAgIGlmICgob3B0aW9ucyAmIFBDUkUyX0FMVF9CU1VYKSAhPSAwKQorICAgICAgeworICAgICAgdWludDMyX3QgeGM7CisgICAgICBpZiAoKGNjID0gWERJR0lUKHB0clsxXSkpID09IDB4ZmYpIGJyZWFrOyAgLyogTm90IGEgaGV4IGRpZ2l0ICovCisgICAgICBpZiAoKHhjID0gWERJR0lUKHB0clsyXSkpID09IDB4ZmYpIGJyZWFrOyAgLyogTm90IGEgaGV4IGRpZ2l0ICovCisgICAgICBjID0gKGNjIDw8IDQpIHwgeGM7CisgICAgICBwdHIgKz0gMjsKKyAgICAgIH0gICAgLyogRW5kIFBDUkUyX0FMVF9CU1VYIGhhbmRsaW5nICovCisKKyAgICAvKiBIYW5kbGUgXHggaW4gUGVybCdzIHN0eWxlLiBceHtkZGR9IGlzIGEgY2hhcmFjdGVyIG51bWJlciB3aGljaCBjYW4gYmUKKyAgICBncmVhdGVyIHRoYW4gMHhmZiBpbiBVVEYtOCBvciBub24tOGJpdCBtb2RlLCBidXQgb25seSBpZiB0aGUgZGRkIGFyZSBoZXgKKyAgICBkaWdpdHMuIElmIG5vdCwgeyB1c2VkIHRvIGJlIHRyZWF0ZWQgYXMgYSBkYXRhIGNoYXJhY3Rlci4gSG93ZXZlciwgUGVybAorICAgIHNlZW1zIHRvIHJlYWQgaGV4IGRpZ2l0cyB1cCB0byB0aGUgZmlyc3Qgbm9uLXN1Y2gsIGFuZCBpZ25vcmUgdGhlIHJlc3QsIHNvCisgICAgdGhhdCwgZm9yIGV4YW1wbGUgXHh7enp9IG1hdGNoZXMgYSBiaW5hcnkgemVyby4gVGhpcyBzZWVtcyBjcmF6eSwgc28gUENSRQorICAgIG5vdyBnaXZlcyBhbiBlcnJvci4gKi8KKworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGlmIChwdHJbMV0gPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQpCisgICAgICAgIHsKKyAgICAgICAgcHRyICs9IDI7CisgICAgICAgIGlmICgqcHRyID09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCkKKyAgICAgICAgICB7CisgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjc4OworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgYyA9IDA7CisgICAgICAgIG92ZXJmbG93ID0gRkFMU0U7CisKKyAgICAgICAgd2hpbGUgKChjYyA9IFhESUdJVCgqcHRyKSkgIT0gMHhmZikKKyAgICAgICAgICB7CisgICAgICAgICAgcHRyKys7CisgICAgICAgICAgaWYgKGMgPT0gMCAmJiBjYyA9PSAwKSBjb250aW51ZTsgICAvKiBMZWFkaW5nIHplcm9lcyAqLworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgorICAgICAgICAgIGlmIChjID49IDB4MTAwMDAwMDBsKSB7IG92ZXJmbG93ID0gVFJVRTsgYnJlYWs7IH0KKyNlbmRpZgorICAgICAgICAgIGMgPSAoYyA8PCA0KSB8IGNjOworICAgICAgICAgIGlmICgodXRmICYmIGMgPiAweDEwZmZmZlUpIHx8ICghdXRmICYmIGMgPiBNQVhfTk9OX1VURl9DSEFSKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIG92ZXJmbG93ID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICBpZiAob3ZlcmZsb3cpCisgICAgICAgICAgeworICAgICAgICAgIHdoaWxlIChYRElHSVQoKnB0cikgIT0gMHhmZikgcHRyKys7CisgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjM0OworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKnB0ciA9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQpCisgICAgICAgICAgeworICAgICAgICAgIGlmICh1dGYgJiYgYyA+PSAweGQ4MDAgJiYgYyA8PSAweGRmZmYpICplcnJvcmNvZGVwdHIgPSBFUlI3MzsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogSWYgdGhlIHNlcXVlbmNlIG9mIGhleCBkaWdpdHMgZG9lcyBub3QgZW5kIHdpdGggJ30nLCBnaXZlIGFuIGVycm9yLgorICAgICAgICBXZSB1c2VkIGp1c3QgdG8gcmVjb2duaXplIHRoaXMgY29uc3RydWN0IGFuZCBmYWxsIHRocm91Z2ggdG8gdGhlIG5vcm1hbAorICAgICAgICBceCBoYW5kbGluZywgYnV0IG5vd2FkYXlzIFBlcmwgZ2l2ZXMgYW4gZXJyb3IsIHdoaWNoIHNlZW1zIG11Y2ggbW9yZQorICAgICAgICBzZW5zaWJsZSwgc28gd2UgZG8gdG9vLiAqLworCisgICAgICAgIGVsc2UgKmVycm9yY29kZXB0ciA9IEVSUjY3OworICAgICAgICB9ICAgLyogRW5kIG9mIFx4e30gcHJvY2Vzc2luZyAqLworCisgICAgICAvKiBSZWFkIGEgc2luZ2xlLWJ5dGUgaGV4LWRlZmluZWQgY2hhciAodXAgdG8gdHdvIGhleCBkaWdpdHMgYWZ0ZXIgXHgpICovCisKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBjID0gMDsKKyAgICAgICAgaWYgKChjYyA9IFhESUdJVChwdHJbMV0pKSA9PSAweGZmKSBicmVhazsgIC8qIE5vdCBhIGhleCBkaWdpdCAqLworICAgICAgICBwdHIrKzsKKyAgICAgICAgYyA9IGNjOworICAgICAgICBpZiAoKGNjID0gWERJR0lUKHB0clsxXSkpID09IDB4ZmYpIGJyZWFrOyAgLyogTm90IGEgaGV4IGRpZ2l0ICovCisgICAgICAgIHB0cisrOworICAgICAgICBjID0gKGMgPDwgNCkgfCBjYzsKKyAgICAgICAgfSAgICAgLyogRW5kIG9mIFx4ZGQgaGFuZGxpbmcgKi8KKyAgICAgIH0gICAgICAgLyogRW5kIG9mIFBlcmwtc3R5bGUgXHggaGFuZGxpbmcgKi8KKyAgICBicmVhazsKKworICAgIC8qIFRoZSBoYW5kbGluZyBvZiBcYyBpcyBkaWZmZXJlbnQgaW4gQVNDSUkgYW5kIEVCQ0RJQyBlbnZpcm9ubWVudHMuIEluIGFuCisgICAgQVNDSUkgKG9yIFVuaWNvZGUpIGVudmlyb25tZW50LCBhbiBlcnJvciBpcyBnaXZlbiBpZiB0aGUgY2hhcmFjdGVyCisgICAgZm9sbG93aW5nIFxjIGlzIG5vdCBhIHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXIuIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZworICAgIGNoYXJhY3RlciBpcyB1cHBlci1jYXNlZCBpZiBpdCBpcyBhIGxldHRlciwgYW5kIGFmdGVyIHRoYXQgdGhlIDB4NDAgYml0IGlzCisgICAgZmxpcHBlZC4gVGhlIHJlc3VsdCBpcyB0aGUgdmFsdWUgb2YgdGhlIGVzY2FwZS4KKworICAgIEluIGFuIEVCQ0RJQyBlbnZpcm9ubWVudCB0aGUgaGFuZGxpbmcgb2YgXGMgaXMgY29tcGF0aWJsZSB3aXRoIHRoZQorICAgIHNwZWNpZmljYXRpb24gaW4gdGhlIHBlcmxlYmNkaWMgZG9jdW1lbnQuIFRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyIG11c3QgYmUKKyAgICBhIGxldHRlciBvciBvbmUgb2Ygc21hbGwgbnVtYmVyIG9mIHNwZWNpYWwgY2hhcmFjdGVycy4gVGhlc2UgcHJvdmlkZSBhCisgICAgbWVhbnMgb2YgZGVmaW5pbmcgdGhlIGNoYXJhY3RlciB2YWx1ZXMgMC0zMS4KKworICAgIEZvciB0ZXN0aW5nIHRoZSBFQkNESUMgaGFuZGxpbmcgb2YgXGMgaW4gYW4gQVNDSUkgZW52aXJvbm1lbnQsIHJlY29nbml6ZQorICAgIHRoZSBFQkNESUMgdmFsdWUgb2YgJ2MnIGV4cGxpY2l0bHkuICovCisKKyNpZiBkZWZpbmVkIEVCQ0RJQyAmJiAnYScgIT0gMHg4MQorICAgIGNhc2UgMHg4MzoKKyNlbHNlCisgICAgY2FzZSBDSEFSX2M6CisjZW5kaWYKKworICAgIGMgPSAqKCsrcHRyKTsKKyAgICBpZiAoYyA+PSBDSEFSX2EgJiYgYyA8PSBDSEFSX3opIGMgPSBVUFBFUl9DQVNFKGMpOworICAgIGlmIChjID09IENIQVJfTlVMTCAmJiBwdHIgPj0gcHRyZW5kKQorICAgICAgeworICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjI7CisgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIC8qIEhhbmRsZSBcYyBpbiBhbiBBU0NJSS9Vbmljb2RlIGVudmlyb25tZW50LiAqLworCisjaWZuZGVmIEVCQ0RJQyAgICAvKiBBU0NJSS9VVEYtOCBjb2RpbmcgKi8KKyAgICBpZiAoYyA8IDMyIHx8IGMgPiAxMjYpICAvKiBFeGNsdWRlcyBhbGwgbm9uLXByaW50YWJsZSBBU0NJSSAqLworICAgICAgeworICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjY4OworICAgICAgYnJlYWs7CisgICAgICB9CisgICAgYyBePSAweDQwOworCisgICAgLyogSGFuZGxlIFxjIGluIGFuIEVCQ0RJQyBlbnZpcm9ubWVudC4gVGhlIHNwZWNpYWwgY2FzZSBcYz8gaXMgY29udmVydGVkIHRvCisgICAgMjU1ICgweGZmKSBvciA5NSAoMHg1ZikgaWYgb3RoZXIgY2hhcmFjdGVyIHN1Z2dlc3Qgd2UgYXJlIHVzaW5nIHRoIFBPU0lYLUJDCisgICAgZW5jb2RpbmcuIChUaGlzIGlzIHRoZSB3YXkgUGVybCBpbmRpY2F0ZXMgdGhhdCBpdCBoYW5kbGVzIFxjPy4pIFRoZSBvdGhlcgorICAgIHZhbGlkIHNlcXVlbmNlcyBjb3JyZXNwb25kIHRvIGEgbGlzdCBvZiBzcGVjaWZpYyBjaGFyYWN0ZXJzLiAqLworCisjZWxzZQorICAgIGlmIChjID09IENIQVJfUVVFU1RJT05fTUFSSykKKyAgICAgIGMgPSAoJ1xcJyA9PSAxODggJiYgJ2AnID09IDc0KT8gMHg1ZiA6IDB4ZmY7CisgICAgZWxzZQorICAgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgaWYgKGMgPT0gZWJjZGljX2VzY2FwZV9jW2ldKSBicmVhazsKKyAgICAgICAgfQorICAgICAgaWYgKGkgPCAzMikgYyA9IGk7IGVsc2UgKmVycm9yY29kZXB0ciA9IEVSUjY4OworICAgICAgfQorI2VuZGlmICAvKiBFQkNESUMgKi8KKworICAgIGJyZWFrOworCisgICAgLyogQW55IG90aGVyIGFscGhhbnVtZXJpYyBmb2xsb3dpbmcgXCBpcyBhbiBlcnJvci4gUGVybCBnaXZlcyBhbiBlcnJvciBvbmx5CisgICAgaWYgaW4gd2FybmluZyBtb2RlLCBidXQgUENSRSBkb2Vzbid0IGhhdmUgYSB3YXJuaW5nIG1vZGUuICovCisKKyAgICBkZWZhdWx0OgorICAgICplcnJvcmNvZGVwdHIgPSBFUlIzOworICAgIGJyZWFrOworICAgIH0KKyAgfQorCisvKiBQZXJsIHN1cHBvcnRzIFxOe25hbWV9IGZvciBjaGFyYWN0ZXIgbmFtZXMsIGFzIHdlbGwgYXMgcGxhaW4gXE4gZm9yICJub3QKK25ld2xpbmUiLiBQQ1JFIGRvZXMgbm90IHN1cHBvcnQgXE57bmFtZX0uIEhvd2V2ZXIsIGl0IGRvZXMgc3VwcG9ydAorcXVhbnRpZmljYXRpb24gc3VjaCBhcyBcTnsyLDN9LiAqLworCitpZiAoZXNjYXBlID09IEVTQ19OICYmIHB0clsxXSA9PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCAmJgorICAgICAhaXNfY291bnRlZF9yZXBlYXQocHRyKzIpKQorICAqZXJyb3Jjb2RlcHRyID0gRVJSMzc7CisKKy8qIElmIFBDUkUyX1VDUCBpcyBzZXQsIHdlIGNoYW5nZSB0aGUgdmFsdWVzIGZvciBcZCBldGMuICovCisKK2lmICgob3B0aW9ucyAmIFBDUkUyX1VDUCkgIT0gMCAmJiBlc2NhcGUgPj0gRVNDX0QgJiYgZXNjYXBlIDw9IEVTQ193KQorICBlc2NhcGUgKz0gKEVTQ19EVSAtIEVTQ19EKTsKKworLyogU2V0IHRoZSBwb2ludGVyIHRvIHRoZSBmaW5hbCBjaGFyYWN0ZXIgYmVmb3JlIHJldHVybmluZy4gKi8KKworKnB0cnB0ciA9IHB0cjsKKypjaHB0ciA9IGM7CityZXR1cm4gZXNjYXBlOworfQorCisKKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICBIYW5kbGUgXFAgYW5kIFxwICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBcUCBvciBccCBoYXMgYmVlbiBlbmNvdW50ZXJlZCwgcHJvdmlkZWQgdGhhdAorUENSRTIgaXMgY29tcGlsZWQgd2l0aCBzdXBwb3J0IGZvciBVVEYgYW5kIFVuaWNvZGUgcHJvcGVydGllcy4gT24gZW50cnksIHRoZQorY29udGVudHMgb2YgcHRycHRyIGFyZSBwb2ludGluZyBhdCB0aGUgUCBvciBwLiBPbiBleGl0LCBpdCBpcyBsZWZ0IHBvaW50aW5nIGF0Cit0aGUgZmluYWwgY29kZSB1bml0IG9mIHRoZSBlc2NhcGUgc2VxdWVuY2UuCisKK0FyZ3VtZW50czoKKyAgcHRycHRyICAgICAgICAgdGhlIHBhdHRlcm4gcG9zaXRpb24gcG9pbnRlcgorICBuZWdwdHIgICAgICAgICBhIGJvb2xlYW4gdGhhdCBpcyBzZXQgVFJVRSBmb3IgbmVnYXRpb24gZWxzZSBGQUxTRQorICBwdHlwZXB0ciAgICAgICBhbiB1bnNpZ25lZCBpbnQgdGhhdCBpcyBzZXQgdG8gdGhlIHR5cGUgdmFsdWUKKyAgcGRhdGFwdHIgICAgICAgYW4gdW5zaWduZWQgaW50IHRoYXQgaXMgc2V0IHRvIHRoZSBkZXRhaWxlZCBwcm9wZXJ0eSB2YWx1ZQorICBlcnJvcmNvZGVwdHIgICB0aGUgZXJyb3IgY29kZSB2YXJpYWJsZQorICBjYiAgICAgICAgICAgICB0aGUgY29tcGlsZSBkYXRhCisKK1JldHVybnM6ICAgICAgICAgVFJVRSBpZiB0aGUgdHlwZSB2YWx1ZSB3YXMgZm91bmQsIG9yIEZBTFNFIGZvciBhbiBpbnZhbGlkIHR5cGUKKyovCisKK3N0YXRpYyBCT09MCitnZXRfdWNwKFBDUkUyX1NQVFIgKnB0cnB0ciwgQk9PTCAqbmVncHRyLCB1bnNpZ25lZCBpbnQgKnB0eXBlcHRyLAorICB1bnNpZ25lZCBpbnQgKnBkYXRhcHRyLCBpbnQgKmVycm9yY29kZXB0ciwgY29tcGlsZV9ibG9jayAqY2IpCit7CityZWdpc3RlciBQQ1JFMl9VQ0hBUiBjOworaW50IGksIGJvdCwgdG9wOworUENSRTJfU1BUUiBwdHIgPSAqcHRycHRyOworUENSRTJfVUNIQVIgbmFtZVszMl07CisKKypuZWdwdHIgPSBGQUxTRTsKK2MgPSAqKCsrcHRyKTsKKworLyogXFAgb3IgXHAgY2FuIGJlIGZvbGxvd2VkIGJ5IGEgbmFtZSBpbiB7fSwgb3B0aW9uYWxseSBwcmVjZWRlZCBieSBeIGZvcgorbmVnYXRpb24uICovCisKK2lmIChjID09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUKQorICB7CisgIGlmIChwdHJbMV0gPT0gQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVCkKKyAgICB7CisgICAgKm5lZ3B0ciA9IFRSVUU7CisgICAgcHRyKys7CisgICAgfQorICBmb3IgKGkgPSAwOyBpIDwgKGludCkoc2l6ZW9mKG5hbWUpIC8gc2l6ZW9mKFBDUkUyX1VDSEFSKSkgLSAxOyBpKyspCisgICAgeworICAgIGMgPSAqKCsrcHRyKTsKKyAgICBpZiAoYyA9PSBDSEFSX05VTEwpIGdvdG8gRVJST1JfUkVUVVJOOworICAgIGlmIChjID09IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCkgYnJlYWs7CisgICAgbmFtZVtpXSA9IGM7CisgICAgfQorICBpZiAoYyAhPSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQpIGdvdG8gRVJST1JfUkVUVVJOOworICBuYW1lW2ldID0gMDsKKyAgfQorCisvKiBPdGhlcndpc2UgdGhlcmUgaXMganVzdCBvbmUgZm9sbG93aW5nIGNoYXJhY3Rlciwgd2hpY2ggbXVzdCBiZSBhbiBBU0NJSQorbGV0dGVyLiAqLworCitlbHNlIGlmIChNQVhfMjU1KGMpICYmIChjYi0+Y3R5cGVzW2NdICYgY3R5cGVfbGV0dGVyKSAhPSAwKQorICB7CisgIG5hbWVbMF0gPSBjOworICBuYW1lWzFdID0gMDsKKyAgfQorZWxzZSBnb3RvIEVSUk9SX1JFVFVSTjsKKworKnB0cnB0ciA9IHB0cjsKKworLyogU2VhcmNoIGZvciBhIHJlY29nbml6ZWQgcHJvcGVydHkgbmFtZSB1c2luZyBiaW5hcnkgY2hvcC4gKi8KKworYm90ID0gMDsKK3RvcCA9IFBSSVYodXR0X3NpemUpOworCit3aGlsZSAoYm90IDwgdG9wKQorICB7CisgIGludCByOworICBpID0gKGJvdCArIHRvcCkgPj4gMTsKKyAgciA9IFBSSVYoc3RyY21wX2M4KShuYW1lLCBQUklWKHV0dF9uYW1lcykgKyBQUklWKHV0dClbaV0ubmFtZV9vZmZzZXQpOworICBpZiAociA9PSAwKQorICAgIHsKKyAgICAqcHR5cGVwdHIgPSBQUklWKHV0dClbaV0udHlwZTsKKyAgICAqcGRhdGFwdHIgPSBQUklWKHV0dClbaV0udmFsdWU7CisgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICBpZiAociA+IDApIGJvdCA9IGkgKyAxOyBlbHNlIHRvcCA9IGk7CisgIH0KKyplcnJvcmNvZGVwdHIgPSBFUlI0NzsgICAvKiBVbnJlY29nbml6ZWQgbmFtZSAqLworcmV0dXJuIEZBTFNFOworCitFUlJPUl9SRVRVUk46ICAgICAgICAgICAgLyogTWFsZm9ybWVkIFxQIG9yIFxwICovCisqZXJyb3Jjb2RlcHRyID0gRVJSNDY7CisqcHRycHRyID0gcHRyOworcmV0dXJuIEZBTFNFOworfQorI2VuZGlmCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgIFJlYWQgcmVwZWF0IGNvdW50cyAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFJlYWQgYW4gaXRlbSBvZiB0aGUgZm9ybSB7bixtfSBhbmQgcmV0dXJuIHRoZSB2YWx1ZXMuIFRoaXMgaXMgY2FsbGVkIG9ubHkKK2FmdGVyIGlzX2NvdW50ZWRfcmVwZWF0KCkgaGFzIGNvbmZpcm1lZCB0aGF0IGEgcmVwZWF0LWNvdW50IHF1YW50aWZpZXIgZXhpc3RzLAorc28gdGhlIHN5bnRheCBpcyBndWFyYW50ZWVkIHRvIGJlIGNvcnJlY3QsIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSB2YWx1ZXMuCisKK0FyZ3VtZW50czoKKyAgcCAgICAgICAgICAgICAgcG9pbnRlciB0byBmaXJzdCBjaGFyIGFmdGVyICd7JworICBtaW5wICAgICAgICAgICBwb2ludGVyIHRvIGludCBmb3IgbWluCisgIG1heHAgICAgICAgICAgIHBvaW50ZXIgdG8gaW50IGZvciBtYXgKKyAgICAgICAgICAgICAgICAgcmV0dXJuZWQgYXMgLTEgaWYgbm8gbWF4CisgIGVycm9yY29kZXB0ciAgIHBvaW50cyB0byBlcnJvciBjb2RlIHZhcmlhYmxlCisKK1JldHVybnM6ICAgICAgICAgcG9pbnRlciB0byAnfScgb24gc3VjY2VzczsKKyAgICAgICAgICAgICAgICAgY3VycmVudCBwdHIgb24gZXJyb3IsIHdpdGggZXJyb3Jjb2RlcHRyIHNldCBub24temVybworKi8KKworc3RhdGljIFBDUkUyX1NQVFIKK3JlYWRfcmVwZWF0X2NvdW50cyhQQ1JFMl9TUFRSIHAsIGludCAqbWlucCwgaW50ICptYXhwLCBpbnQgKmVycm9yY29kZXB0cikKK3sKK2ludCBtaW4gPSAwOworaW50IG1heCA9IC0xOworCit3aGlsZSAoSVNfRElHSVQoKnApKQorICB7CisgIG1pbiA9IG1pbiAqIDEwICsgKGludCkoKnArKyAtIENIQVJfMCk7CisgIGlmIChtaW4gPiA2NTUzNSkKKyAgICB7CisgICAgKmVycm9yY29kZXB0ciA9IEVSUjU7CisgICAgcmV0dXJuIHA7CisgICAgfQorICB9CisKK2lmICgqcCA9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQpIG1heCA9IG1pbjsgZWxzZQorICB7CisgIGlmICgqKCsrcCkgIT0gQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUKQorICAgIHsKKyAgICBtYXggPSAwOworICAgIHdoaWxlKElTX0RJR0lUKCpwKSkKKyAgICAgIHsKKyAgICAgIG1heCA9IG1heCAqIDEwICsgKGludCkoKnArKyAtIENIQVJfMCk7CisgICAgICBpZiAobWF4ID4gNjU1MzUpCisgICAgICAgIHsKKyAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjU7CisgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisgICAgICB9CisgICAgaWYgKG1heCA8IG1pbikKKyAgICAgIHsKKyAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI0OworICAgICAgcmV0dXJuIHA7CisgICAgICB9CisgICAgfQorICB9CisKKyptaW5wID0gbWluOworKm1heHAgPSBtYXg7CityZXR1cm4gcDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgU2NhbiBjb21waWxlZCByZWdleCBmb3IgcmVjdXJzaW9uIHJlZmVyZW5jZSAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiBzY2FucyB0aHJvdWdoIGEgY29tcGlsZWQgcGF0dGVybiB1bnRpbCBpdCBmaW5kcyBhbiBpbnN0YW5jZSBvZgorT1BfUkVDVVJTRS4KKworQXJndW1lbnRzOgorICBjb2RlICAgICAgICBwb2ludHMgdG8gc3RhcnQgb2YgZXhwcmVzc2lvbgorICB1dGYgICAgICAgICBUUlVFIGluIFVURiBtb2RlCisKK1JldHVybnM6ICAgICAgcG9pbnRlciB0byB0aGUgb3Bjb2RlIGZvciBPUF9SRUNVUlNFLCBvciBOVUxMIGlmIG5vdCBmb3VuZAorKi8KKworc3RhdGljIFBDUkUyX1NQVFIKK2ZpbmRfcmVjdXJzZShQQ1JFMl9TUFRSIGNvZGUsIEJPT0wgdXRmKQoreworZm9yICg7OykKKyAgeworICByZWdpc3RlciBQQ1JFMl9VQ0hBUiBjID0gKmNvZGU7CisgIGlmIChjID09IE9QX0VORCkgcmV0dXJuIE5VTEw7CisgIGlmIChjID09IE9QX1JFQ1VSU0UpIHJldHVybiBjb2RlOworCisgIC8qIFhDTEFTUyBpcyB1c2VkIGZvciBjbGFzc2VzIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGp1c3QgYnkgYSBiaXQgbWFwLgorICBUaGlzIGluY2x1ZGVzIG5lZ2F0ZWQgc2luZ2xlIGhpZ2gtdmFsdWVkIGNoYXJhY3RlcnMuIENBTExPVVRfU1RSIGlzIHVzZWQgZm9yCisgIGNhbGxvdXRzIHdpdGggc3RyaW5nIGFyZ3VtZW50cy4gSW4gYm90aCBjYXNlcyB0aGUgbGVuZ3RoIGluIHRoZSB0YWJsZSBpcworICB6ZXJvOyB0aGUgYWN0dWFsIGxlbmd0aCBpcyBzdG9yZWQgaW4gdGhlIGNvbXBpbGVkIGNvZGUuICovCisKKyAgaWYgKGMgPT0gT1BfWENMQVNTKSBjb2RlICs9IEdFVChjb2RlLCAxKTsKKyAgICBlbHNlIGlmIChjID09IE9QX0NBTExPVVRfU1RSKSBjb2RlICs9IEdFVChjb2RlLCAxICsgMipMSU5LX1NJWkUpOworCisgIC8qIE90aGVyd2lzZSwgd2UgY2FuIGdldCB0aGUgaXRlbSdzIGxlbmd0aCBmcm9tIHRoZSB0YWJsZSwgZXhjZXB0IHRoYXQgZm9yCisgIHJlcGVhdGVkIGNoYXJhY3RlciB0eXBlcywgd2UgaGF2ZSB0byB0ZXN0IGZvciBccCBhbmQgXFAsIHdoaWNoIGhhdmUgYW4gZXh0cmEKKyAgdHdvIGJ5dGVzIG9mIHBhcmFtZXRlcnMsIGFuZCBmb3IgTUFSSy9QUlVORS9TS0lQL1RIRU4gd2l0aCBhbiBhcmd1bWVudCwgd2UKKyAgbXVzdCBhZGQgaW4gaXRzIGxlbmd0aC4gKi8KKworICBlbHNlCisgICAgeworICAgIHN3aXRjaChjKQorICAgICAgeworICAgICAgY2FzZSBPUF9UWVBFU1RBUjoKKyAgICAgIGNhc2UgT1BfVFlQRU1JTlNUQVI6CisgICAgICBjYXNlIE9QX1RZUEVQTFVTOgorICAgICAgY2FzZSBPUF9UWVBFTUlOUExVUzoKKyAgICAgIGNhc2UgT1BfVFlQRVFVRVJZOgorICAgICAgY2FzZSBPUF9UWVBFTUlOUVVFUlk6CisgICAgICBjYXNlIE9QX1RZUEVQT1NTVEFSOgorICAgICAgY2FzZSBPUF9UWVBFUE9TUExVUzoKKyAgICAgIGNhc2UgT1BfVFlQRVBPU1FVRVJZOgorICAgICAgaWYgKGNvZGVbMV0gPT0gT1BfUFJPUCB8fCBjb2RlWzFdID09IE9QX05PVFBST1ApIGNvZGUgKz0gMjsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX1RZUEVQT1NVUFRPOgorICAgICAgY2FzZSBPUF9UWVBFVVBUTzoKKyAgICAgIGNhc2UgT1BfVFlQRU1JTlVQVE86CisgICAgICBjYXNlIE9QX1RZUEVFWEFDVDoKKyAgICAgIGlmIChjb2RlWzEgKyBJTU0yX1NJWkVdID09IE9QX1BST1AgfHwgY29kZVsxICsgSU1NMl9TSVpFXSA9PSBPUF9OT1RQUk9QKQorICAgICAgICBjb2RlICs9IDI7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9NQVJLOgorICAgICAgY2FzZSBPUF9QUlVORV9BUkc6CisgICAgICBjYXNlIE9QX1NLSVBfQVJHOgorICAgICAgY2FzZSBPUF9USEVOX0FSRzoKKyAgICAgIGNvZGUgKz0gY29kZVsxXTsKKyAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgLyogQWRkIGluIHRoZSBmaXhlZCBsZW5ndGggZnJvbSB0aGUgdGFibGUgKi8KKworICAgIGNvZGUgKz0gUFJJVihPUF9sZW5ndGhzKVtjXTsKKworICAgIC8qIEluIFVURi04IGFuZCBVVEYtMTYgbW9kZXMsIG9wY29kZXMgdGhhdCBhcmUgZm9sbG93ZWQgYnkgYSBjaGFyYWN0ZXIgbWF5CisgICAgYmUgZm9sbG93ZWQgYnkgYSBtdWx0aS11bml0IGNoYXJhY3Rlci4gVGhlIGxlbmd0aCBpbiB0aGUgdGFibGUgaXMgYQorICAgIG1pbmltdW0sIHNvIHdlIGhhdmUgdG8gYXJyYW5nZSB0byBza2lwIHRoZSBleHRyYSB1bml0cy4gKi8KKworI2lmZGVmIE1BWUJFX1VURl9NVUxUSQorICAgIGlmICh1dGYpIHN3aXRjaChjKQorICAgICAgeworICAgICAgY2FzZSBPUF9DSEFSOgorICAgICAgY2FzZSBPUF9DSEFSSToKKyAgICAgIGNhc2UgT1BfTk9UOgorICAgICAgY2FzZSBPUF9OT1RJOgorICAgICAgY2FzZSBPUF9FWEFDVDoKKyAgICAgIGNhc2UgT1BfRVhBQ1RJOgorICAgICAgY2FzZSBPUF9OT1RFWEFDVDoKKyAgICAgIGNhc2UgT1BfTk9URVhBQ1RJOgorICAgICAgY2FzZSBPUF9VUFRPOgorICAgICAgY2FzZSBPUF9VUFRPSToKKyAgICAgIGNhc2UgT1BfTk9UVVBUTzoKKyAgICAgIGNhc2UgT1BfTk9UVVBUT0k6CisgICAgICBjYXNlIE9QX01JTlVQVE86CisgICAgICBjYXNlIE9QX01JTlVQVE9JOgorICAgICAgY2FzZSBPUF9OT1RNSU5VUFRPOgorICAgICAgY2FzZSBPUF9OT1RNSU5VUFRPSToKKyAgICAgIGNhc2UgT1BfUE9TVVBUTzoKKyAgICAgIGNhc2UgT1BfUE9TVVBUT0k6CisgICAgICBjYXNlIE9QX05PVFBPU1VQVE86CisgICAgICBjYXNlIE9QX05PVFBPU1VQVE9JOgorICAgICAgY2FzZSBPUF9TVEFSOgorICAgICAgY2FzZSBPUF9TVEFSSToKKyAgICAgIGNhc2UgT1BfTk9UU1RBUjoKKyAgICAgIGNhc2UgT1BfTk9UU1RBUkk6CisgICAgICBjYXNlIE9QX01JTlNUQVI6CisgICAgICBjYXNlIE9QX01JTlNUQVJJOgorICAgICAgY2FzZSBPUF9OT1RNSU5TVEFSOgorICAgICAgY2FzZSBPUF9OT1RNSU5TVEFSSToKKyAgICAgIGNhc2UgT1BfUE9TU1RBUjoKKyAgICAgIGNhc2UgT1BfUE9TU1RBUkk6CisgICAgICBjYXNlIE9QX05PVFBPU1NUQVI6CisgICAgICBjYXNlIE9QX05PVFBPU1NUQVJJOgorICAgICAgY2FzZSBPUF9QTFVTOgorICAgICAgY2FzZSBPUF9QTFVTSToKKyAgICAgIGNhc2UgT1BfTk9UUExVUzoKKyAgICAgIGNhc2UgT1BfTk9UUExVU0k6CisgICAgICBjYXNlIE9QX01JTlBMVVM6CisgICAgICBjYXNlIE9QX01JTlBMVVNJOgorICAgICAgY2FzZSBPUF9OT1RNSU5QTFVTOgorICAgICAgY2FzZSBPUF9OT1RNSU5QTFVTSToKKyAgICAgIGNhc2UgT1BfUE9TUExVUzoKKyAgICAgIGNhc2UgT1BfUE9TUExVU0k6CisgICAgICBjYXNlIE9QX05PVFBPU1BMVVM6CisgICAgICBjYXNlIE9QX05PVFBPU1BMVVNJOgorICAgICAgY2FzZSBPUF9RVUVSWToKKyAgICAgIGNhc2UgT1BfUVVFUllJOgorICAgICAgY2FzZSBPUF9OT1RRVUVSWToKKyAgICAgIGNhc2UgT1BfTk9UUVVFUllJOgorICAgICAgY2FzZSBPUF9NSU5RVUVSWToKKyAgICAgIGNhc2UgT1BfTUlOUVVFUllJOgorICAgICAgY2FzZSBPUF9OT1RNSU5RVUVSWToKKyAgICAgIGNhc2UgT1BfTk9UTUlOUVVFUllJOgorICAgICAgY2FzZSBPUF9QT1NRVUVSWToKKyAgICAgIGNhc2UgT1BfUE9TUVVFUllJOgorICAgICAgY2FzZSBPUF9OT1RQT1NRVUVSWToKKyAgICAgIGNhc2UgT1BfTk9UUE9TUVVFUllJOgorICAgICAgaWYgKEhBU19FWFRSQUxFTihjb2RlWy0xXSkpIGNvZGUgKz0gR0VUX0VYVFJBTEVOKGNvZGVbLTFdKTsKKyAgICAgIGJyZWFrOworICAgICAgfQorI2Vsc2UKKyAgICAodm9pZCkodXRmKTsgIC8qIEtlZXAgY29tcGlsZXIgaGFwcHkgYnkgcmVmZXJlbmNpbmcgZnVuY3Rpb24gYXJndW1lbnQgKi8KKyNlbmRpZiAgLyogTUFZQkVfVVRGX01VTFRJICovCisgICAgfQorICB9Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgQ2hlY2sgZm9yIFBPU0lYIGNsYXNzIHN5bnRheCAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHNlcXVlbmNlICJbOiIgb3IgIlsuIiBvciAiWz0iIGlzCitlbmNvdW50ZXJlZCBpbiBhIGNoYXJhY3RlciBjbGFzcy4gSXQgY2hlY2tzIHdoZXRoZXIgdGhpcyBpcyBmb2xsb3dlZCBieSBhCitzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRlcm1pbmF0ZWQgYnkgYSBtYXRjaGluZyAiOl0iIG9yICIuXSIgb3IgIj1dIi4gSWYgd2UKK3JlYWNoIGFuIHVuZXNjYXBlZCAnXScgd2l0aG91dCB0aGUgc3BlY2lhbCBwcmVjZWRpbmcgY2hhcmFjdGVyLCByZXR1cm4gRkFMU0UuCisKK09yaWdpbmFsbHksIHRoaXMgZnVuY3Rpb24gb25seSByZWNvZ25pemVkIGEgc2VxdWVuY2Ugb2YgbGV0dGVycyBiZXR3ZWVuIHRoZQordGVybWluYXRvcnMsIGJ1dCBpdCBzZWVtcyB0aGF0IFBlcmwgcmVjb2duaXplcyBhbnkgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycywKK3Rob3VnaCBvZiBjb3Vyc2UgdW5rbm93biBQT1NJWCBuYW1lcyBhcmUgc3Vic2VxdWVudGx5IHJlamVjdGVkLiBQZXJsIGdpdmVzIGFuCisiVW5rbm93biBQT1NJWCBjbGFzcyIgZXJyb3IgZm9yIFs6ZlxvbzpdIGZvciBleGFtcGxlLCB3aGVyZSBwcmV2aW91c2x5IFBDUkUKK2RpZG4ndCBjb25zaWRlciB0aGlzIHRvIGJlIGEgUE9TSVggY2xhc3MuIExpa2V3aXNlIGZvciBbOjEyMzQ6XS4KKworVGhlIHByb2JsZW0gaW4gdHJ5aW5nIHRvIGJlIGV4YWN0bHkgbGlrZSBQZXJsIGlzIGluIHRoZSBoYW5kbGluZyBvZiBlc2NhcGVzLiBXZQoraGF2ZSB0byBiZSBzdXJlIHRoYXQgW2FiY1s6eFxdcHFyXSBpcyAqbm90KiB0cmVhdGVkIGFzIGNvbnRhaW5pbmcgYSBQT1NJWAorY2xhc3MsIGJ1dCBbYWJjWzp4XF1wcXI6XV0gaXMgKHNvIHRoYXQgYW4gZXJyb3IgY2FuIGJlIGdlbmVyYXRlZCkuIFRoZSBjb2RlCitiZWxvdyBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2VzIFxcIGFuZCBcXSwgYnV0IGRvZXMgbm90IHRyeSB0byBkbyBhbnkgb3RoZXIKK2VzY2FwZSBwcm9jZXNzaW5nLiBUaGlzIG1ha2VzIGl0IGRpZmZlcmVudCBmcm9tIFBlcmwgZm9yIGNhc2VzIHN1Y2ggYXMKK1s6bFxvd2VyOl0gd2hlcmUgUGVybCByZWNvZ25pemVzIGl0IGFzIHRoZSBQT1NJWCBjbGFzcyAibG93ZXIiIGJ1dCBQQ1JFIGRvZXMKK25vdCByZWNvZ25pemUgImxcb3dlciIuIFRoaXMgaXMgYSBsZXNzZXIgZXZpbCB0aGFuIG5vdCBkaWFnbm9zaW5nIGJhZCBjbGFzc2VzCit3aGVuIFBlcmwgZG9lcywgSSB0aGluay4KKworQSB1c2VyIHBvaW50ZWQgb3V0IHRoYXQgUENSRSB3YXMgcmVqZWN0aW5nIFs6YVs6ZGlnaXQ6XV0gd2hlcmVhcyBQZXJsIHdhcyBub3QuCitJdCBzZWVtcyB0aGF0IHRoZSBhcHBlYXJhbmNlIG9mIGEgbmVzdGVkIFBPU0lYIGNsYXNzIHN1cGVyc2VkZXMgYW4gYXBwYXJlbnQKK2V4dGVybmFsIGNsYXNzLiBGb3IgZXhhbXBsZSwgWzphWzpkaWdpdDpdYjpdIG1hdGNoZXMgImEiLCAiYiIsICI6Iiwgb3IKK2EgZGlnaXQuIFRoaXMgaXMgaGFuZGxlZCBieSByZXR1cm5pbmcgRkFMU0UgaWYgdGhlIHN0YXJ0IG9mIGEgbmV3IGdyb3VwIHdpdGgKK3RoZSBzYW1lIHRlcm1pbmF0b3IgaXMgZW5jb3VudGVyZWQsIHNpbmNlIHRoZSBuZXh0IGNsb3Npbmcgc2VxdWVuY2UgbXVzdCBjbG9zZQordGhlIG5lc3RlZCBncm91cCwgbm90IHRoZSBvdXRlciBvbmUuCisKK0luIFBlcmwsIHVuZXNjYXBlZCBzcXVhcmUgYnJhY2tldHMgbWF5IGFsc28gYXBwZWFyIGFzIHBhcnQgb2YgY2xhc3MgbmFtZXMuIEZvcgorZXhhbXBsZSwgWzphWzphYmNdYjpdIGdpdmVzIHVua25vd24gUE9TSVggY2xhc3MgIls6YWJjXWI6XSIuIEhvd2V2ZXIsIGZvcgorWzphWzphYmNdYl1bYjpdIGl0IGdpdmVzIHVua25vd24gUE9TSVggY2xhc3MgIls6YWJjXWJdW2I6XSIsIHdoaWNoIGRvZXMgbm90CitzZWVtIHJpZ2h0IGF0IGFsbC4gUENSRSBkb2VzIG5vdCBhbGxvdyBjbG9zaW5nIHNxdWFyZSBicmFja2V0cyBpbiBQT1NJWCBjbGFzcworbmFtZXMuCisKK0FyZ3VtZW50czoKKyAgcHRyICAgICAgcG9pbnRlciB0byB0aGUgaW5pdGlhbCBbCisgIGVuZHB0ciAgIHdoZXJlIHRvIHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHRlcm1pbmF0aW5nICc6JywgJy4nLCBvciAnPScKKworUmV0dXJuczogICBUUlVFIG9yIEZBTFNFCisqLworCitzdGF0aWMgQk9PTAorY2hlY2tfcG9zaXhfc3ludGF4KFBDUkUyX1NQVFIgcHRyLCBQQ1JFMl9TUFRSICplbmRwdHIpCit7CitQQ1JFMl9VQ0hBUiB0ZXJtaW5hdG9yOyAgLyogRG9uJ3QgY29tYmluZSB0aGVzZSBsaW5lczsgdGhlIFNvbGFyaXMgY2MgKi8KK3Rlcm1pbmF0b3IgPSAqKCsrcHRyKTsgICAvKiBjb21waWxlciB3YXJucyBhYm91dCAibm9uLWNvbnN0YW50IiBpbml0aWFsaXplci4gKi8KKworZm9yICgrK3B0cjsgKnB0ciAhPSBDSEFSX05VTEw7IHB0cisrKQorICB7CisgIGlmICgqcHRyID09IENIQVJfQkFDS1NMQVNIICYmCisgICAgICAocHRyWzFdID09IENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQgfHwgcHRyWzFdID09IENIQVJfQkFDS1NMQVNIKSkKKyAgICBwdHIrKzsKKyAgZWxzZSBpZiAoKCpwdHIgPT0gQ0hBUl9MRUZUX1NRVUFSRV9CUkFDS0VUICYmIHB0clsxXSA9PSB0ZXJtaW5hdG9yKSB8fAorICAgICAgICAgICAgKnB0ciA9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUKSByZXR1cm4gRkFMU0U7CisgIGVsc2UgaWYgKCpwdHIgPT0gdGVybWluYXRvciAmJiBwdHJbMV0gPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCkKKyAgICB7CisgICAgKmVuZHB0ciA9IHB0cjsKKyAgICByZXR1cm4gVFJVRTsKKyAgICB9CisgIH0KKworcmV0dXJuIEZBTFNFOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgQ2hlY2sgUE9TSVggY2xhc3MgbmFtZSAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBjaGVjayB0aGUgbmFtZSBnaXZlbiBpbiBhIFBPU0lYLXN0eWxlIGNsYXNzIGVudHJ5CitzdWNoIGFzIFs6YWxudW06XS4KKworQXJndW1lbnRzOgorICBwdHIgICAgICAgIHBvaW50cyB0byB0aGUgZmlyc3QgbGV0dGVyCisgIGxlbiAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgbmFtZQorCitSZXR1cm5zOiAgICAgYSB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIG5hbWUsIG9yIC0xIGlmIHVua25vd24KKyovCisKK3N0YXRpYyBpbnQKK2NoZWNrX3Bvc2l4X25hbWUoUENSRTJfU1BUUiBwdHIsIGludCBsZW4pCit7Citjb25zdCBjaGFyICpwbiA9IHBvc2l4X25hbWVzOworcmVnaXN0ZXIgaW50IHlpZWxkID0gMDsKK3doaWxlIChwb3NpeF9uYW1lX2xlbmd0aHNbeWllbGRdICE9IDApCisgIHsKKyAgaWYgKGxlbiA9PSBwb3NpeF9uYW1lX2xlbmd0aHNbeWllbGRdICYmCisgICAgUFJJVihzdHJuY21wX2M4KShwdHIsIHBuLCAodW5zaWduZWQgaW50KWxlbikgPT0gMCkgcmV0dXJuIHlpZWxkOworICBwbiArPSBwb3NpeF9uYW1lX2xlbmd0aHNbeWllbGRdICsgMTsKKyAgeWllbGQrKzsKKyAgfQorcmV0dXJuIC0xOworfQorCisKKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgIEdldCBvdGhlcmNhc2UgcmFuZ2UgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHBhc3NlZCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBhIGNsYXNzIHJhbmdlIGluIFVDVCBtb2RlLiBJdAorc2VhcmNoZXMgdXAgdGhlIGNoYXJhY3RlcnMsIGxvb2tpbmcgZm9yIHJhbmdlcyBvZiBjaGFyYWN0ZXJzIGluIHRoZSAib3RoZXIiCitjYXNlLiBFYWNoIGNhbGwgcmV0dXJucyB0aGUgbmV4dCBvbmUsIHVwZGF0aW5nIHRoZSBzdGFydCBhZGRyZXNzLiBBIGNoYXJhY3Rlcgord2l0aCBtdWx0aXBsZSBvdGhlciBjYXNlcyBpcyByZXR1cm5lZCBvbiBpdHMgb3duIHdpdGggYSBzcGVjaWFsIHJldHVybiB2YWx1ZS4KKworQXJndW1lbnRzOgorICBjcHRyICAgICAgICBwb2ludHMgdG8gc3RhcnRpbmcgY2hhcmFjdGVyIHZhbHVlOyB1cGRhdGVkCisgIGQgICAgICAgICAgIGVuZCB2YWx1ZQorICBvY3B0ciAgICAgICB3aGVyZSB0byBwdXQgc3RhcnQgb2Ygb3RoZXJjYXNlIHJhbmdlCisgIG9kcHRyICAgICAgIHdoZXJlIHRvIHB1dCBlbmQgb2Ygb3RoZXJjYXNlIHJhbmdlCisKK1lpZWxkOiAgICAgICAgLTEgd2hlbiBubyBtb3JlCisgICAgICAgICAgICAgICAwIHdoZW4gYSByYW5nZSBpcyByZXR1cm5lZAorICAgICAgICAgICAgICA+MCB0aGUgQ0FTRVNFVCBvZmZzZXQgZm9yIGNoYXIgd2l0aCBtdWx0aXBsZSBvdGhlciBjYXNlcworICAgICAgICAgICAgICAgIGluIHRoaXMgY2FzZSwgb2NwdHIgY29udGFpbnMgdGhlIG9yaWdpbmFsCisqLworCitzdGF0aWMgaW50CitnZXRfb3RoZXJjYXNlX3JhbmdlKHVpbnQzMl90ICpjcHRyLCB1aW50MzJfdCBkLCB1aW50MzJfdCAqb2NwdHIsCisgIHVpbnQzMl90ICpvZHB0cikKK3sKK3VpbnQzMl90IGMsIG90aGVyY2FzZSwgbmV4dDsKK3Vuc2lnbmVkIGludCBjbzsKKworLyogRmluZCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgaGFzIGFuIG90aGVyIGNhc2UuIElmIGl0IGhhcyBtdWx0aXBsZSBvdGhlcgorY2FzZXMsIHJldHVybiBpdHMgY2FzZSBvZmZzZXQgdmFsdWUuICovCisKK2ZvciAoYyA9ICpjcHRyOyBjIDw9IGQ7IGMrKykKKyAgeworICBpZiAoKGNvID0gVUNEX0NBU0VTRVQoYykpICE9IDApCisgICAgeworICAgICpvY3B0ciA9IGMrKzsgICAvKiBDaGFyYWN0ZXIgdGhhdCBoYXMgdGhlIHNldCAqLworICAgICpjcHRyID0gYzsgICAgICAvKiBSZXN0IG9mIGlucHV0IHJhbmdlICovCisgICAgcmV0dXJuIChpbnQpY287CisgICAgfQorICBpZiAoKG90aGVyY2FzZSA9IFVDRF9PVEhFUkNBU0UoYykpICE9IGMpIGJyZWFrOworICB9CisKK2lmIChjID4gZCkgcmV0dXJuIC0xOyAgLyogUmVhY2hlZCBlbmQgb2YgcmFuZ2UgKi8KKworLyogRm91bmQgYSBjaGFyYWN0ZXIgdGhhdCBoYXMgYSBzaW5nbGUgb3RoZXIgY2FzZS4gU2VhcmNoIGZvciB0aGUgZW5kIG9mIHRoZQorcmFuZ2UsIHdoaWNoIGlzIGVpdGhlciB0aGUgZW5kIG9mIHRoZSBpbnB1dCByYW5nZSwgb3IgYSBjaGFyYWN0ZXIgdGhhdCBoYXMgemVybworb3IgbW9yZSB0aGFuIG9uZSBvdGhlciBjYXNlcy4gKi8KKworKm9jcHRyID0gb3RoZXJjYXNlOworbmV4dCA9IG90aGVyY2FzZSArIDE7CisKK2ZvciAoKytjOyBjIDw9IGQ7IGMrKykKKyAgeworICBpZiAoKGNvID0gVUNEX0NBU0VTRVQoYykpICE9IDAgfHwgVUNEX09USEVSQ0FTRShjKSAhPSBuZXh0KSBicmVhazsKKyAgbmV4dCsrOworICB9CisKKypvZHB0ciA9IG5leHQgLSAxOyAgICAgLyogRW5kIG9mIG90aGVyY2FzZSByYW5nZSAqLworKmNwdHIgPSBjOyAgICAgICAgICAgICAvKiBSZXN0IG9mIGlucHV0IHJhbmdlICovCityZXR1cm4gMDsKK30KKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgQWRkIGEgY2hhcmFjdGVyIG9yIHJhbmdlIHRvIGEgY2xhc3MgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gcGFja2FnZXMgdXAgdGhlIGxvZ2ljIG9mIGFkZGluZyBhIGNoYXJhY3RlciBvciByYW5nZSBvZgorY2hhcmFjdGVycyB0byBhIGNsYXNzLiBUaGUgY2hhcmFjdGVyIHZhbHVlcyBpbiB0aGUgYXJndW1lbnRzIHdpbGwgYmUgd2l0aGluIHRoZQordmFsaWQgdmFsdWVzIGZvciB0aGUgY3VycmVudCBtb2RlICg4LWJpdCwgMTYtYml0LCBVVEYsIGV0YykuIFRoaXMgZnVuY3Rpb24gaXMKK211dHVhbGx5IHJlY3Vyc2l2ZSB3aXRoIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSBiZWxvdy4KKworQXJndW1lbnRzOgorICBjbGFzc2JpdHMgICAgIHRoZSBiaXQgbWFwIGZvciBjaGFyYWN0ZXJzIDwgMjU2CisgIHVjaGFyZHB0ciAgICAgcG9pbnRzIHRvIHRoZSBwb2ludGVyIGZvciBleHRyYSBkYXRhCisgIG9wdGlvbnMgICAgICAgdGhlIG9wdGlvbnMgd29yZAorICBjYiAgICAgICAgICAgIGNvbXBpbGUgZGF0YQorICBzdGFydCAgICAgICAgIHN0YXJ0IG9mIHJhbmdlIGNoYXJhY3RlcgorICBlbmQgICAgICAgICAgIGVuZCBvZiByYW5nZSBjaGFyYWN0ZXIKKworUmV0dXJuczogICAgICAgIHRoZSBudW1iZXIgb2YgPCAyNTYgY2hhcmFjdGVycyBhZGRlZAorICAgICAgICAgICAgICAgIHRoZSBwb2ludGVyIHRvIGV4dHJhIGRhdGEgaXMgdXBkYXRlZAorKi8KKworc3RhdGljIGludAorYWRkX3RvX2NsYXNzKHVpbnQ4X3QgKmNsYXNzYml0cywgUENSRTJfVUNIQVIgKip1Y2hhcmRwdHIsIHVpbnQzMl90IG9wdGlvbnMsCisgIGNvbXBpbGVfYmxvY2sgKmNiLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgZW5kKQorewordWludDMyX3QgYzsKK3VpbnQzMl90IGNsYXNzYml0c19lbmQgPSAoZW5kIDw9IDB4ZmYgPyBlbmQgOiAweGZmKTsKK2ludCBuOCA9IDA7CisKKy8qIElmIGNhc2VsZXNzIG1hdGNoaW5nIGlzIHJlcXVpcmVkLCBzY2FuIHRoZSByYW5nZSBhbmQgcHJvY2VzcyBhbHRlcm5hdGUKK2Nhc2VzLiBJbiBVbmljb2RlLCB0aGVyZSBhcmUgOC1iaXQgY2hhcmFjdGVycyB0aGF0IGhhdmUgYWx0ZXJuYXRlIGNhc2VzIHRoYXQKK2FyZSBncmVhdGVyIHRoYW4gMjU1IGFuZCB2aWNlLXZlcnNhLiBTb21ldGltZXMgd2UgY2FuIGp1c3QgZXh0ZW5kIHRoZSBvcmlnaW5hbAorcmFuZ2UuICovCisKK2lmICgob3B0aW9ucyAmIFBDUkUyX0NBU0VMRVNTKSAhPSAwKQorICB7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgIGlmICgob3B0aW9ucyAmIFBDUkUyX1VURikgIT0gMCkKKyAgICB7CisgICAgaW50IHJjOworICAgIHVpbnQzMl90IG9jLCBvZDsKKworICAgIG9wdGlvbnMgJj0gflBDUkUyX0NBU0VMRVNTOyAgIC8qIFJlbW92ZSBmb3IgcmVjdXJzaXZlIGNhbGxzICovCisgICAgYyA9IHN0YXJ0OworCisgICAgd2hpbGUgKChyYyA9IGdldF9vdGhlcmNhc2VfcmFuZ2UoJmMsIGVuZCwgJm9jLCAmb2QpKSA+PSAwKQorICAgICAgeworICAgICAgLyogSGFuZGxlIGEgc2luZ2xlIGNoYXJhY3RlciB0aGF0IGhhcyBtb3JlIHRoYW4gb25lIG90aGVyIGNhc2UuICovCisKKyAgICAgIGlmIChyYyA+IDApIG44ICs9IGFkZF9saXN0X3RvX2NsYXNzKGNsYXNzYml0cywgdWNoYXJkcHRyLCBvcHRpb25zLCBjYiwKKyAgICAgICAgUFJJVih1Y2RfY2FzZWxlc3Nfc2V0cykgKyByYywgb2MpOworCisgICAgICAvKiBEbyBub3RoaW5nIGlmIHRoZSBvdGhlciBjYXNlIHJhbmdlIGlzIHdpdGhpbiB0aGUgb3JpZ2luYWwgcmFuZ2UuICovCisKKyAgICAgIGVsc2UgaWYgKG9jID49IHN0YXJ0ICYmIG9kIDw9IGVuZCkgY29udGludWU7CisKKyAgICAgIC8qIEV4dGVuZCB0aGUgb3JpZ2luYWwgcmFuZ2UgaWYgdGhlcmUgaXMgb3ZlcmxhcCwgbm90aW5nIHRoYXQgaWYgb2MgPCBjLCB3ZQorICAgICAgY2FuJ3QgaGF2ZSBvZCA+IGVuZCBiZWNhdXNlIGEgc3VicmFuZ2UgaXMgYWx3YXlzIHNob3J0ZXIgdGhhbiB0aGUgYmFzaWMKKyAgICAgIHJhbmdlLiBPdGhlcndpc2UsIHVzZSBhIHJlY3Vyc2l2ZSBjYWxsIHRvIGFkZCB0aGUgYWRkaXRpb25hbCByYW5nZS4gKi8KKworICAgICAgZWxzZSBpZiAob2MgPCBzdGFydCAmJiBvZCA+PSBzdGFydCAtIDEpIHN0YXJ0ID0gb2M7IC8qIEV4dGVuZCBkb3dud2FyZHMgKi8KKyAgICAgIGVsc2UgaWYgKG9kID4gZW5kICYmIG9jIDw9IGVuZCArIDEpCisgICAgICAgIHsKKyAgICAgICAgZW5kID0gb2Q7ICAgICAgIC8qIEV4dGVuZCB1cHdhcmRzICovCisgICAgICAgIGlmIChlbmQgPiBjbGFzc2JpdHNfZW5kKSBjbGFzc2JpdHNfZW5kID0gKGVuZCA8PSAweGZmID8gZW5kIDogMHhmZik7CisgICAgICAgIH0KKyAgICAgIGVsc2UgbjggKz0gYWRkX3RvX2NsYXNzKGNsYXNzYml0cywgdWNoYXJkcHRyLCBvcHRpb25zLCBjYiwgb2MsIG9kKTsKKyAgICAgIH0KKyAgICB9CisgIGVsc2UKKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKyAgLyogTm90IFVURiBtb2RlICovCisKKyAgZm9yIChjID0gc3RhcnQ7IGMgPD0gY2xhc3NiaXRzX2VuZDsgYysrKQorICAgIHsKKyAgICBTRVRCSVQoY2xhc3NiaXRzLCBjYi0+ZmNjW2NdKTsKKyAgICBuOCsrOworICAgIH0KKyAgfQorCisvKiBOb3cgaGFuZGxlIHRoZSBvcmlnaW5hbCByYW5nZS4gQWRqdXN0IHRoZSBmaW5hbCB2YWx1ZSBhY2NvcmRpbmcgdG8gdGhlIGJpdAorbGVuZ3RoIC0gdGhpcyBtZWFucyB0aGF0IHRoZSBzYW1lIGxpc3RzIG9mIChlLmcuKSBob3Jpem9udGFsIHNwYWNlcyBjYW4gYmUgdXNlZAoraW4gYWxsIGNhc2VzLiAqLworCitpZiAoKG9wdGlvbnMgJiBQQ1JFMl9VVEYpID09IDAgJiYgZW5kID4gTUFYX05PTl9VVEZfQ0hBUikKKyAgZW5kID0gTUFYX05PTl9VVEZfQ0hBUjsKKworLyogVXNlIHRoZSBiaXRtYXAgZm9yIGNoYXJhY3RlcnMgPCAyNTYuIE90aGVyd2lzZSB1c2UgZXh0cmEgZGF0YS4qLworCitmb3IgKGMgPSBzdGFydDsgYyA8PSBjbGFzc2JpdHNfZW5kOyBjKyspCisgIHsKKyAgLyogUmVnYXJkbGVzcyBvZiBzdGFydCwgYyB3aWxsIGFsd2F5cyBiZSA8PSAyNTUuICovCisgIFNFVEJJVChjbGFzc2JpdHMsIGMpOworICBuOCsrOworICB9CisKKyNpZmRlZiBTVVBQT1JUX1dJREVfQ0hBUlMKK2lmIChzdGFydCA8PSAweGZmKSBzdGFydCA9IDB4ZmYgKyAxOworCitpZiAoZW5kID49IHN0YXJ0KQorICB7CisgIFBDUkUyX1VDSEFSICp1Y2hhcmRhdGEgPSAqdWNoYXJkcHRyOworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgIGlmICgob3B0aW9ucyAmIFBDUkUyX1VURikgIT0gMCkKKyAgICB7CisgICAgaWYgKHN0YXJ0IDwgZW5kKQorICAgICAgeworICAgICAgKnVjaGFyZGF0YSsrID0gWENMX1JBTkdFOworICAgICAgdWNoYXJkYXRhICs9IFBSSVYob3JkMnV0Zikoc3RhcnQsIHVjaGFyZGF0YSk7CisgICAgICB1Y2hhcmRhdGEgKz0gUFJJVihvcmQydXRmKShlbmQsIHVjaGFyZGF0YSk7CisgICAgICB9CisgICAgZWxzZSBpZiAoc3RhcnQgPT0gZW5kKQorICAgICAgeworICAgICAgKnVjaGFyZGF0YSsrID0gWENMX1NJTkdMRTsKKyAgICAgIHVjaGFyZGF0YSArPSBQUklWKG9yZDJ1dGYpKHN0YXJ0LCB1Y2hhcmRhdGEpOworICAgICAgfQorICAgIH0KKyAgZWxzZQorI2VuZGlmICAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKworICAvKiBXaXRob3V0IFVURiBzdXBwb3J0LCBjaGFyYWN0ZXIgdmFsdWVzIGFyZSBjb25zdHJhaW5lZCBieSB0aGUgYml0IGxlbmd0aCwKKyAgYW5kIGNhbiBvbmx5IGJlID4gMjU2IGZvciAxNi1iaXQgYW5kIDMyLWJpdCBsaWJyYXJpZXMuICovCisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgIHt9CisjZWxzZQorICBpZiAoc3RhcnQgPCBlbmQpCisgICAgeworICAgICp1Y2hhcmRhdGErKyA9IFhDTF9SQU5HRTsKKyAgICAqdWNoYXJkYXRhKysgPSBzdGFydDsKKyAgICAqdWNoYXJkYXRhKysgPSBlbmQ7CisgICAgfQorICBlbHNlIGlmIChzdGFydCA9PSBlbmQpCisgICAgeworICAgICp1Y2hhcmRhdGErKyA9IFhDTF9TSU5HTEU7CisgICAgKnVjaGFyZGF0YSsrID0gc3RhcnQ7CisgICAgfQorI2VuZGlmCisgICp1Y2hhcmRwdHIgPSB1Y2hhcmRhdGE7ICAgLyogVXBkYXRhIGV4dHJhIGRhdGEgcG9pbnRlciAqLworICB9CisjZWxzZQorICAodm9pZCl1Y2hhcmRwdHI7ICAgICAgICAgIC8qIEF2b2lkIGNvbXBpbGVyIHdhcm5pbmcgKi8KKyNlbmRpZiAvKiBTVVBQT1JUX1dJREVfQ0hBUlMgKi8KKworcmV0dXJuIG44OyAgICAvKiBOdW1iZXIgb2YgOC1iaXQgY2hhcmFjdGVycyAqLworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgIEFkZCBhIGxpc3Qgb2YgY2hhcmFjdGVycyB0byBhIGNsYXNzICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGFkZGluZyBhIGxpc3Qgb2YgY2FzZS1lcXVpdmFsZW50IGNoYXJhY3RlcnMgdG8gYQorY2xhc3MsIGFuZCBhbHNvIGZvciBhZGRpbmcgYSBsaXN0IG9mIGhvcml6b250YWwgb3IgdmVydGljYWwgd2hpdGVzcGFjZS4gSWYgdGhlCitsaXN0IGlzIGluIG9yZGVyICh3aGljaCBpdCBzaG91bGQgYmUpLCByYW5nZXMgb2YgY2hhcmFjdGVycyBhcmUgZGV0ZWN0ZWQgYW5kCitoYW5kbGVkIGFwcHJvcHJpYXRlbHkuIFRoaXMgZnVuY3Rpb24gaXMgbXV0dWFsbHkgcmVjdXJzaXZlIHdpdGggdGhlIGZ1bmN0aW9uCithYm92ZS4KKworQXJndW1lbnRzOgorICBjbGFzc2JpdHMgICAgIHRoZSBiaXQgbWFwIGZvciBjaGFyYWN0ZXJzIDwgMjU2CisgIHVjaGFyZHB0ciAgICAgcG9pbnRzIHRvIHRoZSBwb2ludGVyIGZvciBleHRyYSBkYXRhCisgIG9wdGlvbnMgICAgICAgdGhlIG9wdGlvbnMgd29yZAorICBjYiAgICAgICAgICAgIGNvbnRhaW5zIHBvaW50ZXJzIHRvIHRhYmxlcyBldGMuCisgIHAgICAgICAgICAgICAgcG9pbnRzIHRvIHJvdyBvZiAzMi1iaXQgdmFsdWVzLCB0ZXJtaW5hdGVkIGJ5IE5PVEFDSEFSCisgIGV4Y2VwdCAgICAgICAgY2hhcmFjdGVyIHRvIG9taXQ7IHRoaXMgaXMgdXNlZCB3aGVuIGFkZGluZyBsaXN0cyBvZgorICAgICAgICAgICAgICAgICAgY2FzZS1lcXVpdmFsZW50IGNoYXJhY3RlcnMgdG8gYXZvaWQgaW5jbHVkaW5nIHRoZSBvbmUgd2UKKyAgICAgICAgICAgICAgICAgIGFscmVhZHkga25vdyBhYm91dAorCitSZXR1cm5zOiAgICAgICAgdGhlIG51bWJlciBvZiA8IDI1NiBjaGFyYWN0ZXJzIGFkZGVkCisgICAgICAgICAgICAgICAgdGhlIHBvaW50ZXIgdG8gZXh0cmEgZGF0YSBpcyB1cGRhdGVkCisqLworCitzdGF0aWMgaW50CithZGRfbGlzdF90b19jbGFzcyh1aW50OF90ICpjbGFzc2JpdHMsIFBDUkUyX1VDSEFSICoqdWNoYXJkcHRyLCB1aW50MzJfdCBvcHRpb25zLAorICBjb21waWxlX2Jsb2NrICpjYiwgY29uc3QgdWludDMyX3QgKnAsIHVuc2lnbmVkIGludCBleGNlcHQpCit7CitpbnQgbjggPSAwOword2hpbGUgKHBbMF0gPCBOT1RBQ0hBUikKKyAgeworICBpbnQgbiA9IDA7CisgIGlmIChwWzBdICE9IGV4Y2VwdCkKKyAgICB7CisgICAgd2hpbGUocFtuKzFdID09IHBbMF0gKyBuICsgMSkgbisrOworICAgIG44ICs9IGFkZF90b19jbGFzcyhjbGFzc2JpdHMsIHVjaGFyZHB0ciwgb3B0aW9ucywgY2IsIHBbMF0sIHBbbl0pOworICAgIH0KKyAgcCArPSBuICsgMTsKKyAgfQorcmV0dXJuIG44OworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgQWRkIGNoYXJhY3RlcnMgbm90IGluIGEgbGlzdCB0byBhIGNsYXNzICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGFkZGluZyB0aGUgY29tcGxlbWVudCBvZiBhIGxpc3Qgb2YgaG9yaXpvbnRhbCBvcgordmVydGljYWwgd2hpdGVzcGFjZSB0byBhIGNsYXNzLiBUaGUgbGlzdCBtdXN0IGJlIGluIG9yZGVyLgorCitBcmd1bWVudHM6CisgIGNsYXNzYml0cyAgICAgdGhlIGJpdCBtYXAgZm9yIGNoYXJhY3RlcnMgPCAyNTYKKyAgdWNoYXJkcHRyICAgICBwb2ludHMgdG8gdGhlIHBvaW50ZXIgZm9yIGV4dHJhIGRhdGEKKyAgb3B0aW9ucyAgICAgICB0aGUgb3B0aW9ucyB3b3JkCisgIGNiICAgICAgICAgICAgY29udGFpbnMgcG9pbnRlcnMgdG8gdGFibGVzIGV0Yy4KKyAgcCAgICAgICAgICAgICBwb2ludHMgdG8gcm93IG9mIDMyLWJpdCB2YWx1ZXMsIHRlcm1pbmF0ZWQgYnkgTk9UQUNIQVIKKworUmV0dXJuczogICAgICAgIHRoZSBudW1iZXIgb2YgPCAyNTYgY2hhcmFjdGVycyBhZGRlZAorICAgICAgICAgICAgICAgIHRoZSBwb2ludGVyIHRvIGV4dHJhIGRhdGEgaXMgdXBkYXRlZAorKi8KKworc3RhdGljIGludAorYWRkX25vdF9saXN0X3RvX2NsYXNzKHVpbnQ4X3QgKmNsYXNzYml0cywgUENSRTJfVUNIQVIgKip1Y2hhcmRwdHIsCisgIHVpbnQzMl90IG9wdGlvbnMsIGNvbXBpbGVfYmxvY2sgKmNiLCBjb25zdCB1aW50MzJfdCAqcCkKK3sKK0JPT0wgdXRmID0gKG9wdGlvbnMgJiBQQ1JFMl9VVEYpICE9IDA7CitpbnQgbjggPSAwOworaWYgKHBbMF0gPiAwKQorICBuOCArPSBhZGRfdG9fY2xhc3MoY2xhc3NiaXRzLCB1Y2hhcmRwdHIsIG9wdGlvbnMsIGNiLCAwLCBwWzBdIC0gMSk7Cit3aGlsZSAocFswXSA8IE5PVEFDSEFSKQorICB7CisgIHdoaWxlIChwWzFdID09IHBbMF0gKyAxKSBwKys7CisgIG44ICs9IGFkZF90b19jbGFzcyhjbGFzc2JpdHMsIHVjaGFyZHB0ciwgb3B0aW9ucywgY2IsIHBbMF0gKyAxLAorICAgIChwWzFdID09IE5PVEFDSEFSKSA/ICh1dGYgPyAweDEwZmZmZnUgOiAweGZmZmZmZmZmdSkgOiBwWzFdIC0gMSk7CisgIHArKzsKKyAgfQorcmV0dXJuIG44OworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgUHJvY2VzcyAoKlZFUkIpIG5hbWUgZm9yIGVzY2FwZXMgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBQQ1JFMl9BTFRfVkVSQk5BTUVTIG9wdGlvbiBpcyBzZXQsIHRvCitwcm9jZXNzIHRoZSBjaGFyYWN0ZXJzIGluIGEgdmVyYidzIG5hbWUgYXJndW1lbnQuIEl0IGlzIGNhbGxlZCB0d2ljZSwgb25jZSB3aXRoCitjb2RlcHRyID09IE5VTEwsIHRvIGZpbmQgb3V0IHRoZSBsZW5ndGggb2YgdGhlIHByb2Nlc3NlZCBuYW1lLCBhbmQgYWdhaW4gdG8gcHV0Cit0aGUgbmFtZSBpbnRvIG1lbW9yeS4KKworQXJndW1lbnRzOgorICBwdHJwdHIgICAgICAgIHBvaW50ZXIgdG8gdGhlIGlucHV0IHBvaW50ZXIKKyAgY29kZXB0ciAgICAgICBwb2ludGVyIHRvIHRoZSBjb21waWxlZCBjb2RlIHBvaW50ZXIKKyAgZXJyb3Jjb2RlcHRyICBwb2ludGVyIHRvIHRoZSBlcnJvciBjb2RlCisgIG9wdGlvbnMgICAgICAgdGhlIG9wdGlvbnMgYml0cworICB1dGYgICAgICAgICAgIFRSVUUgaWYgcHJvY2Vzc2luZyBVVEYKKyAgY2IgICAgICAgICAgICBjb21waWxlIGRhdGEgYmxvY2sKKworUmV0dXJuczogICAgICAgIGxlbmd0aCBvZiB0aGUgcHJvY2Vzc2VkIG5hbWUsIG9yIDwgMCBvbiBlcnJvcgorKi8KKworc3RhdGljIGludAorcHJvY2Vzc192ZXJiX25hbWUoUENSRTJfU1BUUiAqcHRycHRyLCBQQ1JFMl9VQ0hBUiAqKmNvZGVwdHIsIGludCAqZXJyb3Jjb2RlcHRyLAorICB1aW50MzJfdCBvcHRpb25zLCBCT09MIHV0ZiwgY29tcGlsZV9ibG9jayAqY2IpCit7CitpbnQzMl90IGFyZ2xlbiA9IDA7CitCT09MIGluZXNjcSA9IEZBTFNFOworUENSRTJfU1BUUiBwdHIgPSAqcHRycHRyOworUENSRTJfVUNIQVIgKmNvZGUgPSAoY29kZXB0ciA9PSBOVUxMKT8gTlVMTCA6ICpjb2RlcHRyOworCitmb3IgKDsgcHRyIDwgY2ItPmVuZF9wYXR0ZXJuOyBwdHIrKykKKyAgeworICB1aW50MzJfdCB4ID0gKnB0cjsKKworICAvKiBTa2lwIG92ZXIgbGl0ZXJhbHMgKi8KKworICBpZiAoaW5lc2NxKQorICAgIHsKKyAgICBpZiAoeCA9PSBDSEFSX0JBQ0tTTEFTSCAmJiBwdHJbMV0gPT0gQ0hBUl9FKQorICAgICAgeworICAgICAgaW5lc2NxID0gRkFMU0U7CisgICAgICBwdHIrKzs7CisgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgZWxzZSAgLyogTm90IGEgbGl0ZXJhbCBjaGFyYWN0ZXIgKi8KKyAgICB7CisgICAgaWYgKHggPT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUykgYnJlYWs7CisKKyAgICAvKiBTa2lwIG92ZXIgY29tbWVudHMgYW5kIHdoaXRlc3BhY2UgaW4gZXh0ZW5kZWQgbW9kZS4gKi8KKworICAgIGlmICgob3B0aW9ucyAmIFBDUkUyX0VYVEVOREVEKSAhPSAwKQorICAgICAgeworICAgICAgUENSRTJfU1BUUiB3c2NwdHIgPSBwdHI7CisgICAgICB3aGlsZSAoTUFYXzI1NSh4KSAmJiAoY2ItPmN0eXBlc1t4XSAmIGN0eXBlX3NwYWNlKSAhPSAwKSB4ID0gKigrK3B0cik7CisgICAgICBpZiAoeCA9PSBDSEFSX05VTUJFUl9TSUdOKQorICAgICAgICB7CisgICAgICAgIHB0cisrOworICAgICAgICB3aGlsZSAoKnB0ciAhPSBDSEFSX05VTEwgfHwgcHRyIDwgY2ItPmVuZF9wYXR0ZXJuKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoSVNfTkVXTElORShwdHIpKSAgICAgICAvKiBGb3Igbm9uLWZpeGVkLWxlbmd0aCBuZXdsaW5lIGNhc2VzLCAqLworICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElTX05FV0xJTkUgc2V0cyBjYi0+bmxsZW4uICovCisgICAgICAgICAgICBwdHIgKz0gY2ItPm5sbGVuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgcHRyKys7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgICAgaWYgKHV0ZikgRk9SV0FSRENIQVIocHRyKTsKKyNlbmRpZgorICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBJZiB3ZSBoYXZlIHNraXBwZWQgYW55IGNoYXJhY3RlcnMsIHJlc3RhcnQgdGhlIGxvb3AuICovCisKKyAgICAgIGlmIChwdHIgPiB3c2NwdHIpCisgICAgICAgIHsKKyAgICAgICAgcHRyLS07CisgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICB9CisKKyAgICAvKiBQcm9jZXNzIGVzY2FwZXMgKi8KKworICAgIGlmICh4ID09ICdcXCcpCisgICAgICB7CisgICAgICBpbnQgcmM7CisgICAgICAqZXJyb3Jjb2RlcHRyID0gMDsKKyAgICAgIHJjID0gUFJJVihjaGVja19lc2NhcGUpKCZwdHIsIGNiLT5lbmRfcGF0dGVybiwgJngsIGVycm9yY29kZXB0ciwgb3B0aW9ucywKKyAgICAgICAgRkFMU0UsIGNiKTsKKyAgICAgICpwdHJwdHIgPSBwdHI7ICAgLyogRm9yIHBvc3NpYmxlIGVycm9yICovCisgICAgICBpZiAoKmVycm9yY29kZXB0ciAhPSAwKSByZXR1cm4gLTE7CisgICAgICBpZiAocmMgIT0gMCkKKyAgICAgICAgeworICAgICAgICBpZiAocmMgPT0gRVNDX1EpCisgICAgICAgICAgeworICAgICAgICAgIGluZXNjcSA9IFRSVUU7CisgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgICBpZiAocmMgPT0gRVNDX0UpIGNvbnRpbnVlOworICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSNDA7CisgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAvKiBXZSBoYXZlIHRoZSBuZXh0IGNoYXJhY3RlciBpbiB0aGUgbmFtZS4gKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICBpZiAodXRmKQorICAgIHsKKyAgICBpZiAoY29kZSA9PSBOVUxMKSAgIC8qIEp1c3Qgd2FudCB0aGUgbGVuZ3RoICovCisgICAgICB7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyAgICAgIGludCBpOworICAgICAgZm9yIChpID0gMDsgaSA8IFBSSVYodXRmOF90YWJsZTFfc2l6ZSk7IGkrKykKKyAgICAgICAgaWYgKChpbnQpeCA8PSBQUklWKHV0ZjhfdGFibGUxKVtpXSkgYnJlYWs7CisgICAgICBhcmdsZW4gKz0gaTsKKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgorICAgICAgaWYgKHggPiAweGZmZmYpIGFyZ2xlbisrOworI2VuZGlmCisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgUENSRTJfVUNIQVIgY2J1ZmZbOF07CisgICAgICB4ID0gUFJJVihvcmQydXRmKSh4LCBjYnVmZik7CisgICAgICBtZW1jcHkoY29kZSwgY2J1ZmYsIENVMkJZVEVTKHgpKTsKKyAgICAgIGNvZGUgKz0geDsKKyAgICAgIH0KKyAgICB9CisgIGVsc2UKKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKyAgLyogTm90IFVURiAqLworICAgIHsKKyAgICBpZiAoY29kZSAhPSBOVUxMKSAqY29kZSsrID0geDsKKyAgICB9CisKKyAgYXJnbGVuKys7CisKKyAgaWYgKCh1bnNpZ25lZCBpbnQpYXJnbGVuID4gTUFYX01BUkspCisgICAgeworICAgICplcnJvcmNvZGVwdHIgPSBFUlI3NjsKKyAgICAqcHRycHRyID0gcHRyOworICAgIHJldHVybiAtMTsKKyAgICB9CisgIH0KKworLyogVXBkYXRlIHRoZSBwb2ludGVycyBiZWZvcmUgcmV0dXJuaW5nLiAqLworCisqcHRycHRyID0gcHRyOworaWYgKGNvZGVwdHIgIT0gTlVMTCkgKmNvZGVwdHIgPSBjb2RlOworcmV0dXJuIGFyZ2xlbjsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgIE1hY3JvIGZvciB0aGUgbmV4dCB0d28gZnVuY3Rpb25zICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQm90aCBzY2FuX2Zvcl9jYXB0dXJlcygpIGFuZCBjb21waWxlX2JyYW5jaCgpIHVzZSB0aGlzIG1hY3JvIHRvIGdlbmVyYXRlIGEKK2ZyYWdtZW50IG9mIGNvZGUgdGhhdCByZWFkcyB0aGUgY2hhcmFjdGVycyBvZiBhIG5hbWUgYW5kIHNldHMgaXRzIGxlbmd0aAorKGNoZWNraW5nIGZvciBub3QgYmVpbmcgdG9vIGxvbmcpLiBDb3VudCB0aGUgY2hhcmFjdGVycyBkeW5hbWljYWxseSwgdG8gYXZvaWQKK3RoZSBwb3NzaWJpbGl0eSBvZiBpbnRlZ2VyIG92ZXJmbG93LiBUaGUgc2FtZSBtYWNybyBpcyB1c2VkIGZvciByZWFkaW5nICpWRVJCCituYW1lcy4gKi8KKworI2RlZmluZSBSRUFEX05BTUUoY3R5cGUsIGVycm5vLCBlcnJzZXQpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgbmFtZWxlbiA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdoaWxlIChNQVhfMjU1KCpwdHIpICYmIChjYi0+Y3R5cGVzWypwdHJdICYgY3R5cGUpICE9IDApICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBwdHIrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmFtZWxlbisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChuYW1lbGVuID4gTUFYX05BTUVfU0laRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBlcnJzZXQgPSBlcnJubzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgZ290byBGQUlMRUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBTY2FuIHJlZ2V4IHRvIGlkZW50aWZ5IG5hbWVkIGdyb3VwcyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmaXJzdCBvZiBhbGwsIHRvIHNjYW4gZm9yIG5hbWVkIGNhcHR1cmluZyBncm91cHMgc28KK3RoYXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlbSBpcyBmdWxseSBhdmFpbGFibGUgdG8gYm90aCB0aGUgY29tcGlsaW5nIHNjYW5zLgorSXQgc2tpcHMgb3ZlciBldmVyeXRoaW5nIGV4Y2VwdCBwYXJlbnRoZXNpemVkIGl0ZW1zLgorCitBcmd1bWVudHM6CisgIHB0cnB0ciAgIHBvaW50cyB0byBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybgorICBvcHRpb25zICBjb21waWxpbmcgZHluYW1pYyBvcHRpb25zCisgIGNiICAgICAgIHBvaW50ZXIgdG8gdGhlIGNvbXBpbGUgZGF0YSBibG9jaworCitSZXR1cm5zOiAgIHplcm8gb24gc3VjY2VzcyBvciBhIG5vbi16ZXJvIGVycm9yIGNvZGUsIHdpdGggcG9pbnRlciB1cGRhdGVkCisqLworCit0eXBlZGVmIHN0cnVjdCBuZXN0X3NhdmUgeworICB1aW50MTZfdCAgbmVzdF9kZXB0aDsKKyAgdWludDE2X3QgIHJlc2V0X2dyb3VwOworICB1aW50MTZfdCAgbWF4X2dyb3VwOworICB1aW50MTZfdCAgZmxhZ3M7Cit9IG5lc3Rfc2F2ZTsKKworI2RlZmluZSBOU0ZfUkVTRVQgICAgMHgwMDAxdQorI2RlZmluZSBOU0ZfRVhURU5ERUQgMHgwMDAydQorI2RlZmluZSBOU0ZfRFVQTkFNRVMgMHgwMDA0dQorCitzdGF0aWMgdWludDMyX3Qgc2Nhbl9mb3JfY2FwdHVyZXMoUENSRTJfU1BUUiAqcHRycHRyLCB1aW50MzJfdCBvcHRpb25zLAorICBjb21waWxlX2Jsb2NrICpjYikKK3sKK3VpbnQzMl90IGM7Cit1aW50MzJfdCBkZWxpbWl0ZXI7Cit1aW50MzJfdCBuZXN0X2RlcHRoID0gMDsKK3VpbnQzMl90IHNldCwgdW5zZXQsICpvcHRzZXQ7CitpbnQgZXJyb3Jjb2RlID0gMDsKK2ludCBlc2NhcGU7CitpbnQgbmFtZWxlbjsKK2ludCBpOworQk9PTCBpbmVzY3EgPSBGQUxTRTsKK0JPT0wgaXNkdXBuYW1lOworQk9PTCBza2lwdG9rZXQgPSBGQUxTRTsKK0JPT0wgdXRmID0gKG9wdGlvbnMgJiBQQ1JFMl9VVEYpICE9IDA7CitCT09MIG5lZ2F0ZV9jbGFzczsKK1BDUkUyX1NQVFIgbmFtZTsKK1BDUkUyX1NQVFIgc3RhcnQ7CitQQ1JFMl9TUFRSIHB0ciA9ICpwdHJwdHI7CituYW1lZF9ncm91cCAqbmc7CituZXN0X3NhdmUgKnRvcF9uZXN0ID0gTlVMTDsKK25lc3Rfc2F2ZSAqZW5kX25lc3RzID0gKG5lc3Rfc2F2ZSAqKShjYi0+c3RhcnRfd29ya3NwYWNlICsgY2ItPndvcmtzcGFjZV9zaXplKTsKKworLyogVGhlIHNpemUgb2YgdGhlIG5lc3Rfc2F2ZSBzdHJ1Y3R1cmUgbWlnaHQgbm90IGJlIGEgZmFjdG9yIG9mIHRoZSBzaXplIG9mIHRoZQord29ya3NwYWNlLiBUaGVyZWZvcmUgd2UgbXVzdCByb3VuZCBkb3duIGVuZF9uZXN0cyBzbyBhcyB0byBjb3JyZWN0bHkgYXZvaWQKK2NyZWF0aW5nIGEgbmVzdF9zYXZlIHRoYXQgc3BhbnMgdGhlIGVuZCBvZiB0aGUgd29ya3NwYWNlLiAqLworCitlbmRfbmVzdHMgPSAobmVzdF9zYXZlICopKChjaGFyICopZW5kX25lc3RzIC0KKyAgKChjYi0+d29ya3NwYWNlX3NpemUgKiBzaXplb2YoUENSRTJfVUNIQVIpKSAlIHNpemVvZihuZXN0X3NhdmUpKSk7CisKKy8qIE5vdyBzY2FuIHRoZSBwYXR0ZXJuICovCisKK2ZvciAoOyBwdHIgPCBjYi0+ZW5kX3BhdHRlcm47IHB0cisrKQorICB7CisgIGMgPSAqcHRyOworCisgIC8qIFBhcmVudGhlc2l6ZWQgZ3JvdXBzIHNldCBza2lwdG9rZXQgd2hlbiBhbGwgZm9sbG93aW5nIGNoYXJhY3RlcnMgdXAgdG8gdGhlCisgIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpcyBtdXN0IGJlIGlnbm9yZWQuIFRoZSBwYXJlbnRoZXNpcyBpdHNlbGYgbXVzdCBiZQorICBwcm9jZXNzZWQgKHRvIGVuZCB0aGUgbmVzdGVkIHBhcmVudGhlc2l6ZWQgaXRlbSkuICovCisKKyAgaWYgKHNraXB0b2tldCkKKyAgICB7CisgICAgaWYgKGMgIT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUykgY29udGludWU7CisgICAgc2tpcHRva2V0ID0gRkFMU0U7CisgICAgfQorCisgIC8qIFNraXAgb3ZlciBsaXRlcmFscyAqLworCisgIGlmIChpbmVzY3EpCisgICAgeworICAgIGlmIChjID09IENIQVJfQkFDS1NMQVNIICYmIHB0clsxXSA9PSBDSEFSX0UpCisgICAgICB7CisgICAgICBpbmVzY3EgPSBGQUxTRTsKKyAgICAgIHB0cisrOworICAgICAgfQorICAgIGNvbnRpbnVlOworICAgIH0KKworICAvKiBTa2lwIG92ZXIgY29tbWVudHMgYW5kIHdoaXRlc3BhY2UgaW4gZXh0ZW5kZWQgbW9kZS4gTmVlZCBhIGxvb3AgdG8gaGFuZGxlCisgIHdoaXRlc3BhY2UgYWZ0ZXIgYSBjb21tZW50LiAqLworCisgIGlmICgob3B0aW9ucyAmIFBDUkUyX0VYVEVOREVEKSAhPSAwKQorICAgIHsKKyAgICBmb3IgKDs7KQorICAgICAgeworICAgICAgd2hpbGUgKE1BWF8yNTUoYykgJiYgKGNiLT5jdHlwZXNbY10gJiBjdHlwZV9zcGFjZSkgIT0gMCkgYyA9ICooKytwdHIpOworICAgICAgaWYgKGMgIT0gQ0hBUl9OVU1CRVJfU0lHTikgYnJlYWs7CisgICAgICBwdHIrKzsKKyAgICAgIHdoaWxlICgqcHRyICE9IENIQVJfTlVMTCkKKyAgICAgICAgeworICAgICAgICBpZiAoSVNfTkVXTElORShwdHIpKSAgICAgICAgIC8qIEZvciBub24tZml4ZWQtbGVuZ3RoIG5ld2xpbmUgY2FzZXMsICovCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNfTkVXTElORSBzZXRzIGNiLT5ubGxlbi4gKi8KKyAgICAgICAgICBwdHIgKz0gY2ItPm5sbGVuOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgcHRyKys7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgIGlmICh1dGYpIEZPUldBUkRDSEFSKHB0cik7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgYyA9ICpwdHI7ICAgICAvKiBFaXRoZXIgTlVMTCBvciB0aGUgY2hhciBhZnRlciBhIG5ld2xpbmUgKi8KKyAgICAgIH0KKyAgICB9CisKKyAgLyogUHJvY2VzcyB0aGUgbmV4dCBwYXR0ZXJuIGl0ZW0uICovCisKKyAgc3dpdGNoKGMpCisgICAgeworICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAvKiBNb3N0IGNoYXJhY3RlcnMgYXJlIGp1c3Qgc2tpcHBlZCAqLworICAgIGJyZWFrOworCisgICAgLyogU2tpcCBlc2NhcGVzIGV4Y2VwdCBmb3IgXFEgKi8KKworICAgIGNhc2UgQ0hBUl9CQUNLU0xBU0g6CisgICAgZXJyb3Jjb2RlID0gMDsKKyAgICBlc2NhcGUgPSBQUklWKGNoZWNrX2VzY2FwZSkoJnB0ciwgY2ItPmVuZF9wYXR0ZXJuLCAmYywgJmVycm9yY29kZSwgb3B0aW9ucywKKyAgICAgIEZBTFNFLCBjYik7CisgICAgaWYgKGVycm9yY29kZSAhPSAwKSBnb3RvIEZBSUxFRDsKKyAgICBpZiAoZXNjYXBlID09IEVTQ19RKSBpbmVzY3EgPSBUUlVFOworICAgIGJyZWFrOworCisgICAgLyogU2tpcCBhIGNoYXJhY3RlciBjbGFzcy4gVGhlIHN5bnRheCBpcyBjb21wbGljYXRlZCBzbyB3ZSBoYXZlIHRvCisgICAgcmVwbGljYXRlIHNvbWUgb2Ygd2hhdCBoYXBwZW5zIHdoZW4gYSBjbGFzcyBpcyBwcm9jZXNzZWQgZm9yIHJlYWwuICovCisKKyAgICBjYXNlIENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVDoKKyAgICBpZiAoUFJJVihzdHJuY21wX2M4KShwdHIrMSwgU1RSSU5HX1dFSVJEX1NUQVJUV09SRCwgNikgPT0gMCB8fAorICAgICAgICBQUklWKHN0cm5jbXBfYzgpKHB0cisxLCBTVFJJTkdfV0VJUkRfRU5EV09SRCwgNikgPT0gMCkKKyAgICAgIHsKKyAgICAgIHB0ciArPSA2OworICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAvKiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzICdeJywgc2V0IHRoZSBuZWdhdGlvbiBmbGFnIChub3QgYWN0dWFsbHkgdXNlZAorICAgIGhlcmUsIGV4Y2VwdCB0byByZWNvZ25pemUgb25seSBvbmUgXikgYW5kIHNraXAgaXQuIElmIHRoZSBmaXJzdCBmZXcKKyAgICBjaGFyYWN0ZXJzIChlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIF4pIGFyZSBcUVxFIG9yIFxFIHdlIHNraXAgdGhlbSB0b28uIFRoaXMKKyAgICBtYWtlcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFBlcmwuICovCisKKyAgICBuZWdhdGVfY2xhc3MgPSBGQUxTRTsKKyAgICBmb3IgKDs7KQorICAgICAgeworICAgICAgYyA9ICooKytwdHIpOyAgIC8qIEZpcnN0IGNoYXJhY3RlciBpbiBjbGFzcyAqLworICAgICAgaWYgKGMgPT0gQ0hBUl9CQUNLU0xBU0gpCisgICAgICAgIHsKKyAgICAgICAgaWYgKHB0clsxXSA9PSBDSEFSX0UpCisgICAgICAgICAgcHRyKys7CisgICAgICAgIGVsc2UgaWYgKFBSSVYoc3RybmNtcF9jOCkocHRyICsgMSwgU1RSX1EgU1RSX0JBQ0tTTEFTSCBTVFJfRSwgMykgPT0gMCkKKyAgICAgICAgICBwdHIgKz0gMzsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBlbHNlIGlmICghbmVnYXRlX2NsYXNzICYmIGMgPT0gQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVCkKKyAgICAgICAgbmVnYXRlX2NsYXNzID0gVFJVRTsKKyAgICAgIGVsc2UgYnJlYWs7CisgICAgICB9CisKKyAgICBpZiAoYyA9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmCisgICAgICAgIChjYi0+ZXh0ZXJuYWxfb3B0aW9ucyAmIFBDUkUyX0FMTE9XX0VNUFRZX0NMQVNTKSAhPSAwKQorICAgICAgYnJlYWs7CisKKyAgICAvKiBMb29wIGZvciB0aGUgY29udGVudHMgb2YgdGhlIGNsYXNzICovCisKKyAgICBmb3IgKDs7KQorICAgICAgeworICAgICAgUENSRTJfU1BUUiB0ZW1wcHRyOworCisgICAgICBpZiAoYyA9PSBDSEFSX05VTEwgJiYgcHRyID49IGNiLT5lbmRfcGF0dGVybikKKyAgICAgICAgeworICAgICAgICBlcnJvcmNvZGUgPSBFUlI2OyAgLyogTWlzc2luZyB0ZXJtaW5hdGluZyAnXScgKi8KKyAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgIH0KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgaWYgKHV0ZiAmJiBIQVNfRVhUUkFMRU4oYykpCisgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCcmFjZXMgYXJlIHJlcXVpcmVkIGJlY2F1c2UgdGhlICovCisgICAgICAgIEdFVENIQVJMRU4oYywgcHRyLCBwdHIpOyAgICAvKiBtYWNybyBnZW5lcmF0ZXMgbXVsdGlwbGUgc3RhdGVtZW50cyAqLworICAgICAgICB9CisjZW5kaWYKKworICAgICAgLyogSW5zaWRlIFxRLi4uXEUgZXZlcnl0aGluZyBpcyBsaXRlcmFsIGV4Y2VwdCBcRSAqLworCisgICAgICBpZiAoaW5lc2NxKQorICAgICAgICB7CisgICAgICAgIGlmIChjID09IENIQVJfQkFDS1NMQVNIICYmIHB0clsxXSA9PSBDSEFSX0UpICAvKiBJZiB3ZSBhcmUgYXQgXEUgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgaW5lc2NxID0gRkFMU0U7ICAgICAgICAgICAgICAgICAgIC8qIFJlc2V0IGxpdGVyYWwgc3RhdGUgKi8KKyAgICAgICAgICBwdHIrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2tpcCB0aGUgJ0UnICovCisgICAgICAgICAgfQorICAgICAgICBnb3RvIENPTlRJTlVFX0NMQVNTOworICAgICAgICB9CisKKyAgICAgIC8qIFNraXAgUE9TSVggY2xhc3MgbmFtZXMuICovCisgICAgICBpZiAoYyA9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgJiYKKyAgICAgICAgICAocHRyWzFdID09IENIQVJfQ09MT04gfHwgcHRyWzFdID09IENIQVJfRE9UIHx8CisgICAgICAgICAgIHB0clsxXSA9PSBDSEFSX0VRVUFMU19TSUdOKSAmJiBjaGVja19wb3NpeF9zeW50YXgocHRyLCAmdGVtcHB0cikpCisgICAgICAgIHsKKyAgICAgICAgcHRyID0gdGVtcHB0ciArIDE7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGMgPT0gQ0hBUl9CQUNLU0xBU0gpCisgICAgICAgIHsKKyAgICAgICAgZXJyb3Jjb2RlID0gMDsKKyAgICAgICAgZXNjYXBlID0gUFJJVihjaGVja19lc2NhcGUpKCZwdHIsIGNiLT5lbmRfcGF0dGVybiwgJmMsICZlcnJvcmNvZGUsCisgICAgICAgICAgb3B0aW9ucywgVFJVRSwgY2IpOworICAgICAgICBpZiAoZXJyb3Jjb2RlICE9IDApIGdvdG8gRkFJTEVEOworICAgICAgICBpZiAoZXNjYXBlID09IEVTQ19RKSBpbmVzY3EgPSBUUlVFOworICAgICAgICB9CisKKyAgICAgIENPTlRJTlVFX0NMQVNTOgorICAgICAgYyA9ICooKytwdHIpOworICAgICAgaWYgKGMgPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAmJiAhaW5lc2NxKSBicmVhazsKKyAgICAgIH0gICAgIC8qIEVuZCBvZiBjbGFzcy1wcm9jZXNzaW5nIGxvb3AgKi8KKyAgICBicmVhazsKKworICAgIC8qIFRoaXMgaXMgdGhlIHJlYWwgd29yayBvZiB0aGlzIGZ1bmN0aW9uIC0gaGFuZGxpbmcgcGFyZW50aGVzZXMuICovCisKKyAgICBjYXNlIENIQVJfTEVGVF9QQVJFTlRIRVNJUzoKKyAgICBuZXN0X2RlcHRoKys7CisKKyAgICBpZiAocHRyWzFdICE9IENIQVJfUVVFU1RJT05fTUFSSykKKyAgICAgIHsKKyAgICAgIGlmIChwdHJbMV0gIT0gQ0hBUl9BU1RFUklTSykKKyAgICAgICAgeworICAgICAgICBpZiAoKG9wdGlvbnMgJiBQQ1JFMl9OT19BVVRPX0NBUFRVUkUpID09IDApIGNiLT5icmFjb3VudCsrOworICAgICAgICB9CisKKyAgICAgIC8qICgqc29tZXRoaW5nKSAtIGp1c3Qgc2tpcCB0byBjbG9zaW5nIGtldCB1bmxlc3MgUENSRTJfQUxUX1ZFUkJOQU1FUyBpcworICAgICAgc2V0LCBpbiB3aGljaCBjYXNlIHdlIGhhdmUgdG8gcHJvY2VzcyBlc2NhcGVzIGluIHRoZSBzdHJpbmcgYWZ0ZXIgdGhlCisgICAgICBuYW1lLiAqLworCisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgcHRyICs9IDI7CisgICAgICAgIHdoaWxlIChNQVhfMjU1KCpwdHIpICYmIChjYi0+Y3R5cGVzWypwdHJdICYgY3R5cGVfd29yZCkgIT0gMCkgcHRyKys7CisgICAgICAgIGlmICgqcHRyID09IENIQVJfQ09MT04pCisgICAgICAgICAgeworICAgICAgICAgIHB0cisrOworICAgICAgICAgIGlmICgob3B0aW9ucyAmIFBDUkUyX0FMVF9WRVJCTkFNRVMpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAocHJvY2Vzc192ZXJiX25hbWUoJnB0ciwgTlVMTCwgJmVycm9yY29kZSwgb3B0aW9ucywgdXRmLCBjYikgPCAwKQorICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAocHRyIDwgY2ItPmVuZF9wYXR0ZXJuICYmICpwdHIgIT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUykKKyAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBuZXN0X2RlcHRoLS07CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIC8qIEhhbmRsZSAoPy4uLikgZ3JvdXBzICovCisKKyAgICBlbHNlIHN3aXRjaChwdHJbMl0pCisgICAgICB7CisgICAgICBkZWZhdWx0OgorICAgICAgcHRyICs9IDI7CisgICAgICBpZiAocHRyWzBdID09IENIQVJfUiB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICg/UikgKi8KKyAgICAgICAgICBwdHJbMF0gPT0gQ0hBUl9OVU1CRVJfU0lHTiB8fCAgICAgICAgICAgICAgICAgLyogKD8jKSAqLworICAgICAgICAgIElTX0RJR0lUKHB0clswXSkgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAoP24pICovCisgICAgICAgICAgKHB0clswXSA9PSBDSEFSX01JTlVTICYmIElTX0RJR0lUKHB0clsxXSkpKSAgIC8qICg/LW4pICovCisgICAgICAgIHsKKyAgICAgICAgc2tpcHRva2V0ID0gVFJVRTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgLyogSGFuZGxlICg/fCBhbmQgKD9pbXN4SlU6IHdoaWNoIGFyZSB0aGUgb25seSBvdGhlciB2YWxpZCBmb3Jtcy4gQm90aAorICAgICAgbmVlZCBhIG5ldyBibG9jayBvbiB0aGUgbmVzdCBzdGFjay4gKi8KKworICAgICAgaWYgKHRvcF9uZXN0ID09IE5VTEwpIHRvcF9uZXN0ID0gKG5lc3Rfc2F2ZSAqKShjYi0+c3RhcnRfd29ya3NwYWNlKTsKKyAgICAgIGVsc2UgaWYgKCsrdG9wX25lc3QgPj0gZW5kX25lc3RzKQorICAgICAgICB7CisgICAgICAgIGVycm9yY29kZSA9IEVSUjg0OworICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgfQorICAgICAgdG9wX25lc3QtPm5lc3RfZGVwdGggPSBuZXN0X2RlcHRoOworICAgICAgdG9wX25lc3QtPmZsYWdzID0gMDsKKyAgICAgIGlmICgob3B0aW9ucyAmIFBDUkUyX0VYVEVOREVEKSAhPSAwKSB0b3BfbmVzdC0+ZmxhZ3MgfD0gTlNGX0VYVEVOREVEOworICAgICAgaWYgKChvcHRpb25zICYgUENSRTJfRFVQTkFNRVMpICE9IDApIHRvcF9uZXN0LT5mbGFncyB8PSBOU0ZfRFVQTkFNRVM7CisKKyAgICAgIGlmICgqcHRyID09IENIQVJfVkVSVElDQUxfTElORSkKKyAgICAgICAgeworICAgICAgICB0b3BfbmVzdC0+cmVzZXRfZ3JvdXAgPSBjYi0+YnJhY291bnQ7CisgICAgICAgIHRvcF9uZXN0LT5tYXhfZ3JvdXAgPSBjYi0+YnJhY291bnQ7CisgICAgICAgIHRvcF9uZXN0LT5mbGFncyB8PSBOU0ZfUkVTRVQ7CisgICAgICAgIGNiLT5leHRlcm5hbF9mbGFncyB8PSBQQ1JFMl9EVVBDQVBVU0VEOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAvKiBTY2FuIG9wdGlvbnMgKi8KKworICAgICAgdG9wX25lc3QtPnJlc2V0X2dyb3VwID0gMDsKKyAgICAgIHRvcF9uZXN0LT5tYXhfZ3JvdXAgPSAwOworCisgICAgICBzZXQgPSB1bnNldCA9IDA7CisgICAgICBvcHRzZXQgPSAmc2V0OworCisgICAgICAvKiBOZWVkIG9ubHkgdHJhY2sgKD94OiBhbmQgKD9KOiBhdCB0aGlzIHN0YWdlICovCisKKyAgICAgIHdoaWxlICgqcHRyICE9IENIQVJfUklHSFRfUEFSRU5USEVTSVMgJiYgKnB0ciAhPSBDSEFSX0NPTE9OKQorICAgICAgICB7CisgICAgICAgIHN3aXRjaCAoKnB0cisrKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIENIQVJfTUlOVVM6IG9wdHNldCA9ICZ1bnNldDsgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIENIQVJfeDogKm9wdHNldCB8PSBQQ1JFMl9FWFRFTkRFRDsgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIENIQVJfSjoKKyAgICAgICAgICAqb3B0c2V0IHw9IFBDUkUyX0RVUE5BTUVTOworICAgICAgICAgIGNiLT5leHRlcm5hbF9mbGFncyB8PSBQQ1JFMl9KQ0hBTkdFRDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgQ0hBUl9pOgorICAgICAgICAgIGNhc2UgQ0hBUl9tOgorICAgICAgICAgIGNhc2UgQ0hBUl9zOgorICAgICAgICAgIGNhc2UgQ0hBUl9VOgorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDogIGVycm9yY29kZSA9IEVSUjExOworICAgICAgICAgICAgICAgICAgICBwdHItLTsgICAgLyogQ29ycmVjdCB0aGUgb2Zmc2V0ICovCisgICAgICAgICAgICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBvcHRpb25zID0gKG9wdGlvbnMgfCBzZXQpICYgKH51bnNldCk7CisKKyAgICAgIC8qIElmIHRoZSBvcHRpb25zIGVuZGVkIHdpdGggJyknIHRoaXMgaXMgbm90IHRoZSBzdGFydCBvZiBhIG5lc3RlZAorICAgICAgZ3JvdXAgd2l0aCBvcHRpb24gY2hhbmdlcywgc28gdGhlIG9wdGlvbnMgY2hhbmdlIGF0IHRoaXMgbGV2ZWwuIElmIHRoZQorICAgICAgcHJldmlvdXMgbGV2ZWwgc2V0IHVwIGEgbmVzdCBibG9jaywgZGlzY2FyZCB0aGUgb25lIHdlIGhhdmUganVzdCBjcmVhdGVkLgorICAgICAgT3RoZXJ3aXNlIGFkanVzdCBpdCBmb3IgdGhlIHByZXZpb3VzIGxldmVsLiAqLworCisgICAgICBpZiAoKnB0ciA9PSBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTKQorICAgICAgICB7CisgICAgICAgIG5lc3RfZGVwdGgtLTsKKyAgICAgICAgaWYgKHRvcF9uZXN0ID4gKG5lc3Rfc2F2ZSAqKShjYi0+c3RhcnRfd29ya3NwYWNlKSAmJgorICAgICAgICAgICAgKHRvcF9uZXN0LTEpLT5uZXN0X2RlcHRoID09IG5lc3RfZGVwdGgpIHRvcF9uZXN0IC0tOworICAgICAgICBlbHNlIHRvcF9uZXN0LT5uZXN0X2RlcHRoID0gbmVzdF9kZXB0aDsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIFNraXAgb3ZlciBhIG51bWVyaWNhbCBvciBzdHJpbmcgYXJndW1lbnQgZm9yIGEgY2FsbG91dC4gKi8KKworICAgICAgY2FzZSBDSEFSX0M6CisgICAgICBwdHIgKz0gMjsKKyAgICAgIGlmIChwdHJbMV0gPT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUykgYnJlYWs7CisgICAgICBpZiAoSVNfRElHSVQocHRyWzFdKSkKKyAgICAgICAgeworICAgICAgICB3aGlsZSAoSVNfRElHSVQocHRyWzFdKSkgcHRyKys7CisgICAgICAgIH0KKworICAgICAgLyogSGFuZGxlIGEgc3RyaW5nIGFyZ3VtZW50ICovCisKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBwdHIrKzsKKyAgICAgICAgZGVsaW1pdGVyID0gMDsKKyAgICAgICAgZm9yIChpID0gMDsgUFJJVihjYWxsb3V0X3N0YXJ0X2RlbGltcylbaV0gIT0gMDsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoKnB0ciA9PSBQUklWKGNhbGxvdXRfc3RhcnRfZGVsaW1zKVtpXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGRlbGltaXRlciA9IFBSSVYoY2FsbG91dF9lbmRfZGVsaW1zKVtpXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICBpZiAoZGVsaW1pdGVyID09IDApCisgICAgICAgICAgeworICAgICAgICAgIGVycm9yY29kZSA9IEVSUjgyOworICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKworICAgICAgICBzdGFydCA9IHB0cjsKKyAgICAgICAgZG8KKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKCsrcHRyID49IGNiLT5lbmRfcGF0dGVybikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGVycm9yY29kZSA9IEVSUjgxOworICAgICAgICAgICAgcHRyID0gc3RhcnQ7ICAgLyogVG8gZ2l2ZSBhIG1vcmUgdXNlZnVsIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChwdHJbMF0gPT0gZGVsaW1pdGVyICYmIHB0clsxXSA9PSBkZWxpbWl0ZXIpIHB0ciArPSAyOworICAgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKHB0clswXSAhPSBkZWxpbWl0ZXIpOworICAgICAgICB9CisKKyAgICAgIC8qIENoZWNrIHRlcm1pbmF0aW5nICkgKi8KKworICAgICAgaWYgKHB0clsxXSAhPSBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTKQorICAgICAgICB7CisgICAgICAgIGVycm9yY29kZSA9IEVSUjM5OworICAgICAgICBwdHIrKzsKKyAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKiBDb25kaXRpb25hbCBncm91cCAqLworCisgICAgICBjYXNlIENIQVJfTEVGVF9QQVJFTlRIRVNJUzoKKyAgICAgIGlmIChwdHJbM10gIT0gQ0hBUl9RVUVTVElPTl9NQVJLKSAgIC8qIE5vdCBhc3NlcnRpb24gb3IgY2FsbG91dCAqLworICAgICAgICB7CisgICAgICAgIG5lc3RfZGVwdGgrKzsKKyAgICAgICAgcHRyICs9IDI7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIC8qIE11c3QgYmUgYW4gYXNzZXJ0aW9uIG9yIGEgY2FsbG91dCAqLworCisgICAgICBzd2l0Y2gocHRyWzRdKQorICAgICAgIHsKKyAgICAgICBjYXNlIENIQVJfTEVTU19USEFOX1NJR046CisgICAgICAgaWYgKHB0cls1XSAhPSBDSEFSX0VYQ0xBTUFUSU9OX01BUksgJiYgcHRyWzVdICE9IENIQVJfRVFVQUxTX1NJR04pCisgICAgICAgICBnb3RvIE1JU1NJTkdfQVNTRVJUSU9OOworICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworCisgICAgICAgY2FzZSBDSEFSX0M6CisgICAgICAgY2FzZSBDSEFSX0VYQ0xBTUFUSU9OX01BUks6CisgICAgICAgY2FzZSBDSEFSX0VRVUFMU19TSUdOOgorICAgICAgIHB0cisrOworICAgICAgIGJyZWFrOworCisgICAgICAgZGVmYXVsdDoKKyAgICAgICBNSVNTSU5HX0FTU0VSVElPTjoKKyAgICAgICBwdHIgKz0gMzsgICAgICAgICAgICAvKiBUbyBpbXByb3ZlIGVycm9yIG1lc3NhZ2UgKi8KKyAgICAgICBlcnJvcmNvZGUgPSBFUlIyODsKKyAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBDSEFSX0NPTE9OOgorICAgICAgY2FzZSBDSEFSX0dSRUFURVJfVEhBTl9TSUdOOgorICAgICAgY2FzZSBDSEFSX0VRVUFMU19TSUdOOgorICAgICAgY2FzZSBDSEFSX0VYQ0xBTUFUSU9OX01BUks6CisgICAgICBjYXNlIENIQVJfQU1QRVJTQU5EOgorICAgICAgY2FzZSBDSEFSX1BMVVM6CisgICAgICBwdHIgKz0gMjsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIENIQVJfUDoKKyAgICAgIGlmIChwdHJbM10gIT0gQ0hBUl9MRVNTX1RIQU5fU0lHTikKKyAgICAgICAgeworICAgICAgICBwdHIgKz0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIHB0cisrOworICAgICAgYyA9IENIQVJfR1JFQVRFUl9USEFOX1NJR047ICAgLyogVGVybWluYXRvciAqLworICAgICAgZ290byBERUZJTkVfTkFNRTsKKworICAgICAgY2FzZSBDSEFSX0xFU1NfVEhBTl9TSUdOOgorICAgICAgaWYgKHB0clszXSA9PSBDSEFSX0VRVUFMU19TSUdOIHx8IHB0clszXSA9PSBDSEFSX0VYQ0xBTUFUSU9OX01BUkspCisgICAgICAgIHsKKyAgICAgICAgcHRyICs9IDM7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBjID0gQ0hBUl9HUkVBVEVSX1RIQU5fU0lHTjsgICAvKiBUZXJtaW5hdG9yICovCisgICAgICBnb3RvIERFRklORV9OQU1FOworCisgICAgICBjYXNlIENIQVJfQVBPU1RST1BIRToKKyAgICAgIGMgPSBDSEFSX0FQT1NUUk9QSEU7ICAgIC8qIFRlcm1pbmF0b3IgKi8KKworICAgICAgREVGSU5FX05BTUU6CisgICAgICBuYW1lID0gcHRyID0gcHRyICsgMzsKKworICAgICAgaWYgKCpwdHIgPT0gYykgICAgICAgICAgLyogRW1wdHkgbmFtZSAqLworICAgICAgICB7CisgICAgICAgIGVycm9yY29kZSA9IEVSUjYyOworICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgfQorCisgICAgICBpZiAoSVNfRElHSVQoKnB0cikpCisgICAgICAgIHsKKyAgICAgICAgZXJyb3Jjb2RlID0gRVJSNDQ7ICAgLyogR3JvdXAgbmFtZSBtdXN0IHN0YXJ0IHdpdGggbm9uLWRpZ2l0ICovCisgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICB9CisKKyAgICAgIGlmIChNQVhfMjU1KCpwdHIpICYmIChjYi0+Y3R5cGVzWypwdHJdICYgY3R5cGVfd29yZCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICBlcnJvcmNvZGUgPSBFUlIyNDsKKyAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgIH0KKworICAgICAgLyogQWR2YW5jZSBwdHIsIHNldCBuYW1lbGVuIGFuZCBjaGVjayBpdHMgbGVuZ3RoLiAqLworICAgICAgUkVBRF9OQU1FKGN0eXBlX3dvcmQsIEVSUjQ4LCBlcnJvcmNvZGUpOworCisgICAgICBpZiAoKnB0ciAhPSBjKQorICAgICAgICB7CisgICAgICAgIGVycm9yY29kZSA9IEVSUjQyOworICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgfQorCisgICAgICBpZiAoY2ItPm5hbWVzX2ZvdW5kID49IE1BWF9OQU1FX0NPVU5UKQorICAgICAgICB7CisgICAgICAgIGVycm9yY29kZSA9IEVSUjQ5OworICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgfQorCisgICAgICBpZiAobmFtZWxlbiArIElNTTJfU0laRSArIDEgPiBjYi0+bmFtZV9lbnRyeV9zaXplKQorICAgICAgICBjYi0+bmFtZV9lbnRyeV9zaXplID0gbmFtZWxlbiArIElNTTJfU0laRSArIDE7CisKKyAgICAgIC8qIFdlIGhhdmUgYSB2YWxpZCBuYW1lIGZvciB0aGlzIGNhcHR1cmluZyBncm91cC4gKi8KKworICAgICAgY2ItPmJyYWNvdW50Kys7CisKKyAgICAgIC8qIFNjYW4gdGhlIGxpc3QgdG8gY2hlY2sgZm9yIGR1cGxpY2F0ZXMuIEZvciBkdXBsaWNhdGUgbmFtZXMsIGlmIHRoZQorICAgICAgbnVtYmVyIGlzIHRoZSBzYW1lLCBicmVhayB0aGUgbG9vcCwgd2hpY2ggY2F1c2VzIHRoZSBuYW1lIHRvIGJlCisgICAgICBkaXNjYXJkZWQ7IG90aGVyd2lzZSwgaWYgRFVQTkFNRVMgaXMgbm90IHNldCwgZ2l2ZSBhbiBlcnJvci4KKyAgICAgIElmIGl0IGlzIHNldCwgYWxsb3cgdGhlIG5hbWUgd2l0aCBhIGRpZmZlcmVudCBudW1iZXIsIGJ1dCBjb250aW51ZQorICAgICAgc2Nhbm5pbmcgaW4gY2FzZSB0aGlzIGlzIGEgZHVwbGljYXRlIHdpdGggdGhlIHNhbWUgbnVtYmVyLiBGb3IKKyAgICAgIG5vbi1kdXBsaWNhdGUgbmFtZXMsIGdpdmUgYW4gZXJyb3IgaWYgdGhlIG51bWJlciBpcyBkdXBsaWNhdGVkLiAqLworCisgICAgICBpc2R1cG5hbWUgPSBGQUxTRTsKKyAgICAgIG5nID0gY2ItPm5hbWVkX2dyb3VwczsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBjYi0+bmFtZXNfZm91bmQ7IGkrKywgbmcrKykKKyAgICAgICAgeworICAgICAgICBpZiAobmFtZWxlbiA9PSBuZy0+bGVuZ3RoICYmCisgICAgICAgICAgICBQUklWKHN0cm5jbXApKG5hbWUsIG5nLT5uYW1lLCBuYW1lbGVuKSA9PSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAobmctPm51bWJlciA9PSBjYi0+YnJhY291bnQpIGJyZWFrOworICAgICAgICAgIGlmICgob3B0aW9ucyAmIFBDUkUyX0RVUE5BTUVTKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgZXJyb3Jjb2RlID0gRVJSNDM7CisgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpc2R1cG5hbWUgPSBuZy0+aXNkdXAgPSBUUlVFOyAgICAgLyogTWFyayBhcyBhIGR1cGxpY2F0ZSAqLworICAgICAgICAgIGNiLT5kdXBuYW1lcyA9IFRSVUU7ICAgICAgICAgICAgICAvKiBEdXBsaWNhdGUgbmFtZXMgZXhpc3QgKi8KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG5nLT5udW1iZXIgPT0gY2ItPmJyYWNvdW50KQorICAgICAgICAgIHsKKyAgICAgICAgICBlcnJvcmNvZGUgPSBFUlI2NTsKKyAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgaWYgKGkgPCBjYi0+bmFtZXNfZm91bmQpIGJyZWFrOyAgIC8qIElnbm9yZSBkdXBsaWNhdGUgd2l0aCBzYW1lIG51bWJlciAqLworCisgICAgICAvKiBJbmNyZWFzZSB0aGUgbGlzdCBzaXplIGlmIG5lY2Vzc2FyeSAqLworCisgICAgICBpZiAoY2ItPm5hbWVzX2ZvdW5kID49IGNiLT5uYW1lZF9ncm91cF9saXN0X3NpemUpCisgICAgICAgIHsKKyAgICAgICAgaW50IG5ld3NpemUgPSBjYi0+bmFtZWRfZ3JvdXBfbGlzdF9zaXplICogMjsKKyAgICAgICAgbmFtZWRfZ3JvdXAgKm5ld3NwYWNlID0KKyAgICAgICAgICBjYi0+Y3gtPm1lbWN0bC5tYWxsb2MobmV3c2l6ZSAqIHNpemVvZihuYW1lZF9ncm91cCksCisgICAgICAgICAgY2ItPmN4LT5tZW1jdGwubWVtb3J5X2RhdGEpOworICAgICAgICBpZiAobmV3c3BhY2UgPT0gTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgZXJyb3Jjb2RlID0gRVJSMjE7CisgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgfQorCisgICAgICAgIG1lbWNweShuZXdzcGFjZSwgY2ItPm5hbWVkX2dyb3VwcywKKyAgICAgICAgICBjYi0+bmFtZWRfZ3JvdXBfbGlzdF9zaXplICogc2l6ZW9mKG5hbWVkX2dyb3VwKSk7CisgICAgICAgIGlmIChjYi0+bmFtZWRfZ3JvdXBfbGlzdF9zaXplID4gTkFNRURfR1JPVVBfTElTVF9TSVpFKQorICAgICAgICAgIGNiLT5jeC0+bWVtY3RsLmZyZWUoKHZvaWQgKiljYi0+bmFtZWRfZ3JvdXBzLAorICAgICAgICAgIGNiLT5jeC0+bWVtY3RsLm1lbW9yeV9kYXRhKTsKKyAgICAgICAgY2ItPm5hbWVkX2dyb3VwcyA9IG5ld3NwYWNlOworICAgICAgICBjYi0+bmFtZWRfZ3JvdXBfbGlzdF9zaXplID0gbmV3c2l6ZTsKKyAgICAgICAgfQorCisgICAgICAvKiBBZGQgdGhpcyBuYW1lIHRvIHRoZSBsaXN0ICovCisKKyAgICAgIGNiLT5uYW1lZF9ncm91cHNbY2ItPm5hbWVzX2ZvdW5kXS5uYW1lID0gbmFtZTsKKyAgICAgIGNiLT5uYW1lZF9ncm91cHNbY2ItPm5hbWVzX2ZvdW5kXS5sZW5ndGggPSBuYW1lbGVuOworICAgICAgY2ItPm5hbWVkX2dyb3Vwc1tjYi0+bmFtZXNfZm91bmRdLm51bWJlciA9IGNiLT5icmFjb3VudDsKKyAgICAgIGNiLT5uYW1lZF9ncm91cHNbY2ItPm5hbWVzX2ZvdW5kXS5pc2R1cCA9IGlzZHVwbmFtZTsKKyAgICAgIGNiLT5uYW1lc19mb3VuZCsrOworICAgICAgYnJlYWs7CisgICAgICB9ICAgICAgICAvKiBFbmQgb2YgKD8gc3dpdGNoICovCisgICAgYnJlYWs7ICAgICAvKiBFbmQgb2YgKCBoYW5kbGluZyAqLworCisgICAgLyogQXQgYW4gYWx0ZXJuYXRpb24sIHJlc2V0IHRoZSBjYXB0dXJlIGNvdW50IGlmIHdlIGFyZSBpbiBhICg/fCBncm91cC4gKi8KKworICAgIGNhc2UgQ0hBUl9WRVJUSUNBTF9MSU5FOgorICAgIGlmICh0b3BfbmVzdCAhPSBOVUxMICYmIHRvcF9uZXN0LT5uZXN0X2RlcHRoID09IG5lc3RfZGVwdGggJiYKKyAgICAgICAgKHRvcF9uZXN0LT5mbGFncyAmIE5TRl9SRVNFVCkgIT0gMCkKKyAgICAgIHsKKyAgICAgIGlmIChjYi0+YnJhY291bnQgPiB0b3BfbmVzdC0+bWF4X2dyb3VwKQorICAgICAgICB0b3BfbmVzdC0+bWF4X2dyb3VwID0gY2ItPmJyYWNvdW50OworICAgICAgY2ItPmJyYWNvdW50ID0gdG9wX25lc3QtPnJlc2V0X2dyb3VwOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgLyogQXQgYSByaWdodCBwYXJlbnRoZXNpcywgcmVzZXQgdGhlIGNhcHR1cmUgY291bnQgdG8gdGhlIG1heGltdW0gaWYgd2UKKyAgICBhcmUgaW4gYSAoP3wgZ3JvdXAgYW5kL29yIHJlc2V0IHRoZSBleHRlbmRlZCBvcHRpb24uICovCisKKyAgICBjYXNlIENIQVJfUklHSFRfUEFSRU5USEVTSVM6CisgICAgaWYgKHRvcF9uZXN0ICE9IE5VTEwgJiYgdG9wX25lc3QtPm5lc3RfZGVwdGggPT0gbmVzdF9kZXB0aCkKKyAgICAgIHsKKyAgICAgIGlmICgodG9wX25lc3QtPmZsYWdzICYgTlNGX1JFU0VUKSAhPSAwICYmCisgICAgICAgICAgdG9wX25lc3QtPm1heF9ncm91cCA+IGNiLT5icmFjb3VudCkKKyAgICAgICAgY2ItPmJyYWNvdW50ID0gdG9wX25lc3QtPm1heF9ncm91cDsKKyAgICAgIGlmICgodG9wX25lc3QtPmZsYWdzICYgTlNGX0VYVEVOREVEKSAhPSAwKSBvcHRpb25zIHw9IFBDUkUyX0VYVEVOREVEOworICAgICAgICBlbHNlIG9wdGlvbnMgJj0gflBDUkUyX0VYVEVOREVEOworICAgICAgaWYgKCh0b3BfbmVzdC0+ZmxhZ3MgJiBOU0ZfRFVQTkFNRVMpICE9IDApIG9wdGlvbnMgfD0gUENSRTJfRFVQTkFNRVM7CisgICAgICAgIGVsc2Ugb3B0aW9ucyAmPSB+UENSRTJfRFVQTkFNRVM7CisgICAgICBpZiAodG9wX25lc3QgPT0gKG5lc3Rfc2F2ZSAqKShjYi0+c3RhcnRfd29ya3NwYWNlKSkgdG9wX25lc3QgPSBOVUxMOworICAgICAgICBlbHNlIHRvcF9uZXN0LS07CisgICAgICB9CisgICAgaWYgKG5lc3RfZGVwdGggPiAwKSBuZXN0X2RlcHRoLS07ICAvKiBDYW4gYmUgMCBmb3IgdW5tYXRjaGVkICkgKi8KKyAgICBicmVhazsKKyAgICB9CisgIH0KKworY2ItPmZpbmFsX2JyYWNvdW50ID0gY2ItPmJyYWNvdW50OworcmV0dXJuIDA7CisKK0ZBSUxFRDoKKypwdHJwdHIgPSBwdHI7CityZXR1cm4gZXJyb3Jjb2RlOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgIENvbXBpbGUgb25lIGJyYW5jaCAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBTY2FuIHRoZSBwYXR0ZXJuLCBjb21waWxpbmcgaXQgaW50byB0aGUgYSB2ZWN0b3IuIElmIHRoZSBvcHRpb25zIGFyZQorY2hhbmdlZCBkdXJpbmcgdGhlIGJyYW5jaCwgdGhlIHBvaW50ZXIgaXMgdXNlZCB0byBjaGFuZ2UgdGhlIGV4dGVybmFsIG9wdGlvbnMKK2JpdHMuIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgdGhlIHByZS1jb21waWxlIHBoYXNlIHdoZW4gd2UgYXJlIHRyeWluZwordG8gZmluZCBvdXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkLCBhcyB3ZWxsIGFzIGR1cmluZyB0aGUgcmVhbCBjb21waWxlCitwaGFzZS4gVGhlIHZhbHVlIG9mIGxlbmd0aHB0ciBkaXN0aW5ndWlzaGVzIHRoZSB0d28gcGhhc2VzLgorCitBcmd1bWVudHM6CisgIG9wdGlvbnNwdHIgICAgICAgIHBvaW50ZXIgdG8gdGhlIG9wdGlvbiBiaXRzCisgIGNvZGVwdHIgICAgICAgICAgIHBvaW50cyB0byB0aGUgcG9pbnRlciB0byB0aGUgY3VycmVudCBjb2RlIHBvaW50CisgIHB0cnB0ciAgICAgICAgICAgIHBvaW50cyB0byB0aGUgY3VycmVudCBwYXR0ZXJuIHBvaW50ZXIKKyAgZXJyb3Jjb2RlcHRyICAgICAgcG9pbnRzIHRvIGVycm9yIGNvZGUgdmFyaWFibGUKKyAgZmlyc3RjdXB0ciAgICAgICAgcGxhY2UgdG8gcHV0IHRoZSBmaXJzdCByZXF1aXJlZCBjb2RlIHVuaXQKKyAgZmlyc3RjdWZsYWdzcHRyICAgcGxhY2UgdG8gcHV0IHRoZSBmaXJzdCBjb2RlIHVuaXQgZmxhZ3MsIG9yIGEgbmVnYXRpdmUgbnVtYmVyCisgIHJlcWN1cHRyICAgICAgICAgIHBsYWNlIHRvIHB1dCB0aGUgbGFzdCByZXF1aXJlZCBjb2RlIHVuaXQKKyAgcmVxY3VmbGFnc3B0ciAgICAgcGxhY2UgdG8gcHV0IHRoZSBsYXN0IHJlcXVpcmVkIGNvZGUgdW5pdCBmbGFncywgb3IgYSBuZWdhdGl2ZSBudW1iZXIKKyAgYmNwdHIgICAgICAgICAgICAgcG9pbnRzIHRvIGN1cnJlbnQgYnJhbmNoIGNoYWluCisgIGNvbmRfZGVwdGggICAgICAgIGNvbmRpdGlvbmFsIG5lc3RpbmcgZGVwdGgKKyAgY2IgICAgICAgICAgICAgICAgY29udGFpbnMgcG9pbnRlcnMgdG8gdGFibGVzIGV0Yy4KKyAgbGVuZ3RocHRyICAgICAgICAgTlVMTCBkdXJpbmcgdGhlIHJlYWwgY29tcGlsZSBwaGFzZQorICAgICAgICAgICAgICAgICAgICBwb2ludHMgdG8gbGVuZ3RoIGFjY3VtdWxhdG9yIGR1cmluZyBwcmUtY29tcGlsZSBwaGFzZQorCitSZXR1cm5zOiAgICAgICAgICAgIFRSVUUgb24gc3VjY2VzcworICAgICAgICAgICAgICAgICAgICBGQUxTRSwgd2l0aCAqZXJyb3Jjb2RlcHRyIHNldCBub24temVybyBvbiBlcnJvcgorKi8KKworc3RhdGljIEJPT0wKK2NvbXBpbGVfYnJhbmNoKHVpbnQzMl90ICpvcHRpb25zcHRyLCBQQ1JFMl9VQ0hBUiAqKmNvZGVwdHIsCisgIFBDUkUyX1NQVFIgKnB0cnB0ciwgaW50ICplcnJvcmNvZGVwdHIsCisgIHVpbnQzMl90ICpmaXJzdGN1cHRyLCBpbnQzMl90ICpmaXJzdGN1ZmxhZ3NwdHIsCisgIHVpbnQzMl90ICpyZXFjdXB0ciwgaW50MzJfdCAqcmVxY3VmbGFnc3B0ciwKKyAgYnJhbmNoX2NoYWluICpiY3B0ciwgaW50IGNvbmRfZGVwdGgsCisgIGNvbXBpbGVfYmxvY2sgKmNiLCBzaXplX3QgKmxlbmd0aHB0cikKK3sKK2ludCByZXBlYXRfbWluID0gMCwgcmVwZWF0X21heCA9IDA7ICAgICAgLyogVG8gcGxlYXNlIHBpY2t5IGNvbXBpbGVycyAqLworaW50IGJyYXZhbHVlID0gMDsKK3VpbnQzMl90IGdyZWVkeV9kZWZhdWx0LCBncmVlZHlfbm9uX2RlZmF1bHQ7Cit1aW50MzJfdCByZXBlYXRfdHlwZSwgb3BfdHlwZTsKK3VpbnQzMl90IG9wdGlvbnMgPSAqb3B0aW9uc3B0cjsgICAgICAgICAgICAgICAvKiBNYXkgY2hhbmdlIGR5bmFtaWNhbGx5ICovCit1aW50MzJfdCBmaXJzdGN1LCByZXFjdTsKK2ludDMyX3QgZmlyc3RjdWZsYWdzLCByZXFjdWZsYWdzOwordWludDMyX3QgemVyb3JlcWN1LCB6ZXJvZmlyc3RjdTsKK2ludDMyX3QgemVyb3JlcWN1ZmxhZ3MsIHplcm9maXJzdGN1ZmxhZ3M7CitpbnQzMl90IHJlcV9jYXNlb3B0LCByZXF2YXJ5LCB0ZW1wcmVxdmFyeTsKK2ludCBhZnRlcl9tYW51YWxfY2FsbG91dCA9IDA7CitpbnQgZXNjYXBlOworc2l6ZV90IGxlbmd0aF9wcmV2Z3JvdXAgPSAwOworcmVnaXN0ZXIgdWludDMyX3QgYzsKK3JlZ2lzdGVyIFBDUkUyX1VDSEFSICpjb2RlID0gKmNvZGVwdHI7CitQQ1JFMl9VQ0hBUiAqbGFzdF9jb2RlID0gY29kZTsKK1BDUkUyX1VDSEFSICpvcmlnX2NvZGUgPSBjb2RlOworUENSRTJfVUNIQVIgKnRlbXBjb2RlOworQk9PTCBpbmVzY3EgPSBGQUxTRTsKK0JPT0wgZ3JvdXBzZXRmaXJzdGN1ID0gRkFMU0U7CitQQ1JFMl9TUFRSIHB0ciA9ICpwdHJwdHI7CitQQ1JFMl9TUFRSIHRlbXBwdHI7CitQQ1JFMl9VQ0hBUiAqcHJldmlvdXMgPSBOVUxMOworUENSRTJfVUNIQVIgKnByZXZpb3VzX2NhbGxvdXQgPSBOVUxMOwordWludDhfdCBjbGFzc2JpdHNbMzJdOworCisvKiBXZSBjYW4gZmlzaCBvdXQgdGhlIFVURiBzZXR0aW5nIG9uY2UgYW5kIGZvciBhbGwgaW50byBhIEJPT0wsIGJ1dCB3ZSBtdXN0Citub3QgZG8gdGhpcyBmb3Igb3RoZXIgb3B0aW9ucyAoZS5nLiBQQ1JFMl9FWFRFTkRFRCkgYmVjYXVzZSB0aGV5IG1heSBjaGFuZ2UKK2R5bmFtaWNhbGx5IGFzIHdlIHByb2Nlc3MgdGhlIHBhdHRlcm4uICovCisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK0JPT0wgdXRmID0gKG9wdGlvbnMgJiBQQ1JFMl9VVEYpICE9IDA7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDMyCitQQ1JFMl9VQ0hBUiB1dGZfdW5pdHNbNl07ICAgICAgLyogRm9yIHNldHRpbmcgdXAgbXVsdGktY3UgY2hhcnMgKi8KKyNlbmRpZgorCisjZWxzZSAgLyogTm8gVVRGIHN1cHBvcnQgKi8KK0JPT0wgdXRmID0gRkFMU0U7CisjZW5kaWYKKworLyogSGVscGVyIHZhcmlhYmxlcyBmb3IgT1BfWENMQVNTIG9wY29kZSAoZm9yIGNoYXJhY3RlcnMgPiAyNTUpLiBXZSBkZWZpbmUKK2NsYXNzX3VjaGFyZGF0YSBhbHdheXMgc28gdGhhdCBpdCBjYW4gYmUgcGFzc2VkIHRvIGFkZF90b19jbGFzcygpIGFsd2F5cywKK3Rob3VnaCBpdCB3aWxsIG5vdCBiZSB1c2VkIGluIG5vbi1VVEYgOC1iaXQgY2FzZXMuIFRoaXMgYXZvaWRzIGhhdmluZyB0byBzdXBwbHkKK2FsdGVybmF0aXZlIGNhbGxzIGZvciB0aGUgZGlmZmVyZW50IGNhc2VzLiAqLworCitQQ1JFMl9VQ0hBUiAqY2xhc3NfdWNoYXJkYXRhOworI2lmZGVmIFNVUFBPUlRfV0lERV9DSEFSUworQk9PTCB4Y2xhc3M7CitQQ1JFMl9VQ0hBUiAqY2xhc3NfdWNoYXJkYXRhX2Jhc2U7CisjZW5kaWYKKworLyogU2V0IHVwIHRoZSBkZWZhdWx0IGFuZCBub24tZGVmYXVsdCBzZXR0aW5ncyBmb3IgZ3JlZWRpbmVzcyAqLworCitncmVlZHlfZGVmYXVsdCA9ICgob3B0aW9ucyAmIFBDUkUyX1VOR1JFRURZKSAhPSAwKTsKK2dyZWVkeV9ub25fZGVmYXVsdCA9IGdyZWVkeV9kZWZhdWx0IF4gMTsKKworLyogSW5pdGlhbGl6ZSBubyBmaXJzdCB1bml0LCBubyByZXF1aXJlZCB1bml0LiBSRVFfVU5TRVQgbWVhbnMgIm5vIGNoYXIKK21hdGNoaW5nIGVuY291bnRlcmVkIHlldCIuIEl0IGdldHMgY2hhbmdlZCB0byBSRVFfTk9ORSBpZiB3ZSBoaXQgc29tZXRoaW5nIHRoYXQKK21hdGNoZXMgYSBub24tZml4ZWQgZmlyc3QgdW5pdDsgcmVxY3UganVzdCByZW1haW5zIHVuc2V0IGlmIHdlIG5ldmVyIGZpbmQgb25lLgorCitXaGVuIHdlIGhpdCBhIHJlcGVhdCB3aG9zZSBtaW5pbXVtIGlzIHplcm8sIHdlIG1heSBoYXZlIHRvIGFkanVzdCB0aGVzZSB2YWx1ZXMKK3RvIHRha2UgdGhlIHplcm8gcmVwZWF0IGludG8gYWNjb3VudC4gVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBzZXR0aW5nIHRoZW0gdG8KK3plcm9maXJzdGN1IGFuZCB6ZXJvcmVxY3Ugd2hlbiBzdWNoIGEgcmVwZWF0IGlzIGVuY291bnRlcmVkLiBUaGUgaW5kaXZpZHVhbAoraXRlbSB0eXBlcyB0aGF0IGNhbiBiZSByZXBlYXRlZCBzZXQgdGhlc2UgYmFja29mZiB2YXJpYWJsZXMgYXBwcm9wcmlhdGVseS4gKi8KKworZmlyc3RjdSA9IHJlcWN1ID0gemVyb2ZpcnN0Y3UgPSB6ZXJvcmVxY3UgPSAwOworZmlyc3RjdWZsYWdzID0gcmVxY3VmbGFncyA9IHplcm9maXJzdGN1ZmxhZ3MgPSB6ZXJvcmVxY3VmbGFncyA9IFJFUV9VTlNFVDsKKworLyogVGhlIHZhcmlhYmxlIHJlcV9jYXNlb3B0IGNvbnRhaW5zIGVpdGhlciB0aGUgUkVRX0NBU0VMRVNTIHZhbHVlIG9yIHplcm8sCithY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgc2V0dGluZyBvZiB0aGUgY2FzZWxlc3MgZmxhZy4gVGhlIFJFUV9DQVNFTEVTUyB2YWx1ZQorbGVhdmVzIHRoZSBsb3dlciAyOCBiaXQgZW1wdHkuIEl0IGlzIGFkZGVkIGludG8gdGhlIGZpcnN0Y3Ugb3IgcmVxY3UgdmFyaWFibGVzCit0byByZWNvcmQgdGhlIGNhc2Ugc3RhdHVzIG9mIHRoZSB2YWx1ZS4gVGhpcyBpcyB1c2VkIG9ubHkgZm9yIEFTQ0lJIGNoYXJhY3RlcnMuCisqLworCityZXFfY2FzZW9wdCA9ICgob3B0aW9ucyAmIFBDUkUyX0NBU0VMRVNTKSAhPSAwKT8gUkVRX0NBU0VMRVNTOjA7CisKKy8qIFN3aXRjaCBvbiBuZXh0IGNoYXJhY3RlciB1bnRpbCB0aGUgZW5kIG9mIHRoZSBicmFuY2ggKi8KKworZm9yICg7OyBwdHIrKykKKyAgeworICBCT09MIG5lZ2F0ZV9jbGFzczsKKyAgQk9PTCBzaG91bGRfZmxpcF9uZWdhdGlvbjsKKyAgQk9PTCBtYXRjaF9hbGxfb3Jfbm9fd2lkZV9jaGFyczsKKyAgQk9PTCBwb3NzZXNzaXZlX3F1YW50aWZpZXI7CisgIEJPT0wgaXNfcXVhbnRpZmllcjsKKyAgQk9PTCBpc19yZWN1cnNlOworICBCT09MIGlzX2R1cG5hbWU7CisgIEJPT0wgcmVzZXRfYnJhY291bnQ7CisgIGludCBjbGFzc19oYXNfOGJpdGNoYXI7CisgIGludCBjbGFzc19vbmVfY2hhcjsKKyNpZmRlZiBTVVBQT1JUX1dJREVfQ0hBUlMKKyAgQk9PTCB4Y2xhc3NfaGFzX3Byb3A7CisjZW5kaWYKKyAgaW50IHJlY25vOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNdXN0IGJlIHNpZ25lZCAqLworICBpbnQgcmVmc2lnbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE11c3QgYmUgc2lnbmVkICovCisgIGludCB0ZXJtaW5hdG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTXVzdCBiZSBzaWduZWQgKi8KKyAgdW5zaWduZWQgaW50IG1jbGVuZ3RoOworICB1bnNpZ25lZCBpbnQgdGVtcGJyYWNvdW50OworICB1aW50MzJfdCBlYzsKKyAgdWludDMyX3QgbmV3b3B0aW9uczsKKyAgdWludDMyX3Qgc2tpcHVuaXRzOworICB1aW50MzJfdCBzdWJyZXFjdSwgc3ViZmlyc3RjdTsKKyAgaW50MzJfdCBzdWJyZXFjdWZsYWdzLCBzdWJmaXJzdGN1ZmxhZ3M7ICAvKiBNdXN0IGJlIHNpZ25lZCAqLworICBQQ1JFMl9VQ0hBUiBtY2J1ZmZlcls4XTsKKworICAvKiBHZXQgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHBhdHRlcm4gKi8KKworICBjID0gKnB0cjsKKworICAvKiBJZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiBhIG5lc3RlZCBzdWJzdGl0dXRpb24sIHJldmVydCB0byB0aGUgb3V0ZXIgbGV2ZWwKKyAgc3RyaW5nLiBOZXN0aW5nIG9ubHkgaGFwcGVucyBvbmUgb3IgdHdvIGxldmVscyBkZWVwLCBhbmQgdGhlIGluc2VydGVkIHN0cmluZworICBpcyBhbHdheXMgemVybyB0ZXJtaW5hdGVkLiAqLworCisgIGlmIChjID09IENIQVJfTlVMTCAmJiBjYi0+bmVzdHB0clswXSAhPSBOVUxMKQorICAgIHsKKyAgICBwdHIgPSBjYi0+bmVzdHB0clswXTsKKyAgICBjYi0+bmVzdHB0clswXSA9IGNiLT5uZXN0cHRyWzFdOworICAgIGNiLT5uZXN0cHRyWzFdID0gTlVMTDsKKyAgICBjID0gKnB0cjsKKyAgICB9CisKKyAgLyogSWYgd2UgYXJlIGluIHRoZSBwcmUtY29tcGlsZSBwaGFzZSwgYWNjdW11bGF0ZSB0aGUgbGVuZ3RoIHVzZWQgZm9yIHRoZQorICBwcmV2aW91cyBjeWNsZSBvZiB0aGlzIGxvb3AuICovCisKKyAgaWYgKGxlbmd0aHB0ciAhPSBOVUxMKQorICAgIHsKKyAgICBpZiAoY29kZSA+IGNiLT5zdGFydF93b3Jrc3BhY2UgKyBjYi0+d29ya3NwYWNlX3NpemUgLQorICAgICAgICBXT1JLX1NJWkVfU0FGRVRZX01BUkdJTikgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGZvciBvdmVycnVuICovCisgICAgICB7CisgICAgICAqZXJyb3Jjb2RlcHRyID0gKGNvZGUgPj0gY2ItPnN0YXJ0X3dvcmtzcGFjZSArIGNiLT53b3Jrc3BhY2Vfc2l6ZSk/CisgICAgICAgIEVSUjUyIDogRVJSODY7CisgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgIH0KKworICAgIC8qIFRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzaXR1YXRpb24gd2hlcmUgY29kZSBnb2VzIGJhY2t3YXJkczogdGhpcyBpcyB0aGUKKyAgICBjYXNlIG9mIGEgemVybyBxdWFudGlmaWVyIGFmdGVyIGEgY2xhc3MgKGUuZy4gW2FiXXswfSkuIEF0IGNvbXBpbGUgdGltZSwKKyAgICB0aGUgY2xhc3MgaXMgc2ltcGx5IGVsaW1pbmF0ZWQuIEhvd2V2ZXIsIGl0IGlzIGNyZWF0ZWQgZmlyc3QsIHNvIHdlIGhhdmUgdG8KKyAgICBhbGxvdyBtZW1vcnkgZm9yIGl0LiBUaGVyZWZvcmUsIGRvbid0IGV2ZXIgcmVkdWNlIHRoZSBsZW5ndGggYXQgdGhpcyBwb2ludC4KKyAgICAqLworCisgICAgaWYgKGNvZGUgPCBsYXN0X2NvZGUpIGNvZGUgPSBsYXN0X2NvZGU7CisKKyAgICAvKiBQYXJhbm9pZCBjaGVjayBmb3IgaW50ZWdlciBvdmVyZmxvdyAqLworCisgICAgaWYgKE9GTE9XX01BWCAtICpsZW5ndGhwdHIgPCAoc2l6ZV90KShjb2RlIC0gbGFzdF9jb2RlKSkKKyAgICAgIHsKKyAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIyMDsKKyAgICAgIGdvdG8gRkFJTEVEOworICAgICAgfQorICAgICpsZW5ndGhwdHIgKz0gY29kZSAtIGxhc3RfY29kZTsKKworICAgIC8qIElmICJwcmV2aW91cyIgaXMgc2V0IGFuZCBpdCBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3b3JrIHNwYWNlLCBtb3ZlCisgICAgaXQgYmFjayB0byB0aGVyZSwgaW4gb3JkZXIgdG8gYXZvaWQgZmlsbGluZyB1cCB0aGUgd29yayBzcGFjZS4gT3RoZXJ3aXNlLAorICAgIGlmICJwcmV2aW91cyIgaXMgTlVMTCwgcmVzZXQgdGhlIGN1cnJlbnQgY29kZSBwb2ludGVyIHRvIHRoZSBzdGFydC4gKi8KKworICAgIGlmIChwcmV2aW91cyAhPSBOVUxMKQorICAgICAgeworICAgICAgaWYgKHByZXZpb3VzID4gb3JpZ19jb2RlKQorICAgICAgICB7CisgICAgICAgIG1lbW1vdmUob3JpZ19jb2RlLCBwcmV2aW91cywgQ1UyQllURVMoY29kZSAtIHByZXZpb3VzKSk7CisgICAgICAgIGNvZGUgLT0gcHJldmlvdXMgLSBvcmlnX2NvZGU7CisgICAgICAgIHByZXZpb3VzID0gb3JpZ19jb2RlOworICAgICAgICB9CisgICAgICB9CisgICAgZWxzZSBjb2RlID0gb3JpZ19jb2RlOworCisgICAgLyogUmVtZW1iZXIgd2hlcmUgdGhpcyBjb2RlIGl0ZW0gc3RhcnRzIHNvIHdlIGNhbiBwaWNrIHVwIHRoZSBsZW5ndGgKKyAgICBuZXh0IHRpbWUgcm91bmQuICovCisKKyAgICBsYXN0X2NvZGUgPSBjb2RlOworICAgIH0KKworICAvKiBCZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSB3ZSBtdXN0IGhhbmRsZSBhbGwgdGhlIHNwZWNpYWwgaXRlbXMgdGhhdCBkbworICBub3RoaW5nLCBhbmQgd2hpY2ggbWF5IGNvbWUgYmV0d2VlbiBhbiBpdGVtIGFuZCBpdHMgcXVhbnRpZmllci4gT3RoZXJ3aXNlLAorICB3aGVuIGF1dG8tY2FsbG91dHMgYXJlIGVuYWJsZWQsIGEgY2FsbG91dCBnZXRzIGluY29ycmVjdGx5IGluc2VydGVkIGJlZm9yZQorICB0aGUgcXVhbnRpZmllciBpcyByZWNvZ25pemVkLiBBZnRlciByZWNvZ25pemluZyBhICJkbyBub3RoaW5nIiBpdGVtLCByZXN0YXJ0CisgIHRoZSBsb29wIGluIGNhc2UgYW5vdGhlciBvbmUgZm9sbG93cy4gKi8KKworICAvKiBJZiBjIGlzIG5vdCBOVUxMIHdlIGFyZSBub3QgYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gSWYgaXQgaXMgTlVMTCwgd2UKKyAgbWF5IHN0aWxsIGJlIGluIHRoZSBwYXR0ZXJuIHdpdGggYSBOVUxMIGRhdGEgaXRlbS4gSW4gdGhlc2UgY2FzZXMsIGlmIHdlIGFyZQorICBpbiBcUS4uLlxFLCBjaGVjayBmb3IgdGhlIFxFIHRoYXQgZW5kcyB0aGUgbGl0ZXJhbCBzdHJpbmc7IGlmIG5vdCwgd2UgaGF2ZSBhCisgIGxpdGVyYWwgY2hhcmFjdGVyLiBJZiBub3QgaW4gXFEuLi5cRSwgYW4gaXNvbGF0ZWQgXEUgaXMgaWdub3JlZC4gKi8KKworICBpZiAoYyAhPSBDSEFSX05VTEwgfHwgcHRyIDwgY2ItPmVuZF9wYXR0ZXJuKQorICAgIHsKKyAgICBpZiAoYyA9PSBDSEFSX0JBQ0tTTEFTSCAmJiBwdHJbMV0gPT0gQ0hBUl9FKQorICAgICAgeworICAgICAgaW5lc2NxID0gRkFMU0U7CisgICAgICBwdHIrKzsKKyAgICAgIGNvbnRpbnVlOworICAgICAgfQorICAgIGVsc2UgaWYgKGluZXNjcSkgICAvKiBMaXRlcmFsIGNoYXJhY3RlciAqLworICAgICAgeworICAgICAgaWYgKHByZXZpb3VzX2NhbGxvdXQgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICBpZiAobGVuZ3RocHRyID09IE5VTEwpICAvKiBEb24ndCBhdHRlbXB0IGluIHByZS1jb21waWxlIHBoYXNlICovCisgICAgICAgICAgY29tcGxldGVfY2FsbG91dChwcmV2aW91c19jYWxsb3V0LCBwdHIsIGNiKTsKKyAgICAgICAgcHJldmlvdXNfY2FsbG91dCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgIGlmICgob3B0aW9ucyAmIFBDUkUyX0FVVE9fQ0FMTE9VVCkgIT0gMCkKKyAgICAgICAgeworICAgICAgICBwcmV2aW91c19jYWxsb3V0ID0gY29kZTsKKyAgICAgICAgY29kZSA9IGF1dG9fY2FsbG91dChjb2RlLCBwdHIsIGNiKTsKKyAgICAgICAgfQorICAgICAgZ290byBOT1JNQUxfQ0hBUjsKKyAgICAgIH0KKworICAgIC8qIENoZWNrIGZvciB0aGUgc3RhcnQgb2YgYSBcUS4uLlxFIHNlcXVlbmNlLiBXZSBtdXN0IGRvIHRoaXMgaGVyZSByYXRoZXIKKyAgICB0aGFuIGxhdGVyIGluIGNhc2UgaXQgaXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXEUsIHdoaWNoIHR1cm5zIGl0IGludG8gYQorICAgICJkbyBub3RoaW5nIiBzZXF1ZW5jZS4gKi8KKworICAgIGlmIChjID09IENIQVJfQkFDS1NMQVNIICYmIHB0clsxXSA9PSBDSEFSX1EpCisgICAgICB7CisgICAgICBpbmVzY3EgPSBUUlVFOworICAgICAgcHRyKys7CisgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICB9CisKKyAgLyogSW4gZXh0ZW5kZWQgbW9kZSwgc2tpcCB3aGl0ZSBzcGFjZSBhbmQgIy1jb21tZW50cyB0aGF0IGVuZCBhdCBuZXdsaW5lLiAqLworCisgIGlmICgob3B0aW9ucyAmIFBDUkUyX0VYVEVOREVEKSAhPSAwKQorICAgIHsKKyAgICBQQ1JFMl9TUFRSIHdzY3B0ciA9IHB0cjsKKyAgICB3aGlsZSAoTUFYXzI1NShjKSAmJiAoY2ItPmN0eXBlc1tjXSAmIGN0eXBlX3NwYWNlKSAhPSAwKSBjID0gKigrK3B0cik7CisgICAgaWYgKGMgPT0gQ0hBUl9OVU1CRVJfU0lHTikKKyAgICAgIHsKKyAgICAgIHB0cisrOworICAgICAgd2hpbGUgKHB0ciA8IGNiLT5lbmRfcGF0dGVybikKKyAgICAgICAgeworICAgICAgICBpZiAoSVNfTkVXTElORShwdHIpKSAgICAgICAgIC8qIEZvciBub24tZml4ZWQtbGVuZ3RoIG5ld2xpbmUgY2FzZXMsICovCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVNfTkVXTElORSBzZXRzIGNiLT5ubGxlbi4gKi8KKyAgICAgICAgICBwdHIgKz0gY2ItPm5sbGVuOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgcHRyKys7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgIGlmICh1dGYpIEZPUldBUkRDSEFSKHB0cik7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogSWYgd2Ugc2tpcHBlZCBhbnkgY2hhcmFjdGVycywgcmVzdGFydCB0aGUgbG9vcC4gT3RoZXJ3aXNlLCB3ZSBkaWRuJ3Qgc2VlCisgICAgYSBjb21tZW50LiAqLworCisgICAgaWYgKHB0ciA+IHdzY3B0cikKKyAgICAgIHsKKyAgICAgIHB0ci0tOworICAgICAgY29udGludWU7CisgICAgICB9CisgICAgfQorCisgIC8qIFNraXAgb3ZlciAoPyMgY29tbWVudHMuICovCisKKyAgaWYgKGMgPT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0lTICYmIHB0clsxXSA9PSBDSEFSX1FVRVNUSU9OX01BUksgJiYKKyAgICAgIHB0clsyXSA9PSBDSEFSX05VTUJFUl9TSUdOKQorICAgIHsKKyAgICBwdHIgKz0gMzsKKyAgICB3aGlsZSAocHRyIDwgY2ItPmVuZF9wYXR0ZXJuICYmICpwdHIgIT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUykgcHRyKys7CisgICAgaWYgKCpwdHIgIT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUykKKyAgICAgIHsKKyAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIxODsKKyAgICAgIGdvdG8gRkFJTEVEOworICAgICAgfQorICAgIGNvbnRpbnVlOworICAgIH0KKworICAvKiBFbmQgb2YgcHJvY2Vzc2luZyAiZG8gbm90aGluZyIgaXRlbXMuIFNlZSBpZiB0aGUgbmV4dCB0aGluZyBpcyBhCisgIHF1YW50aWZpZXIuICovCisKKyAgaXNfcXVhbnRpZmllciA9CisgICAgYyA9PSBDSEFSX0FTVEVSSVNLIHx8IGMgPT0gQ0hBUl9QTFVTIHx8IGMgPT0gQ0hBUl9RVUVTVElPTl9NQVJLIHx8CisgICAgIChjID09IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUICYmIGlzX2NvdW50ZWRfcmVwZWF0KHB0cisxKSk7CisKKyAgLyogRmlsbCBpbiBsZW5ndGggb2YgYSBwcmV2aW91cyBjYWxsb3V0IGFuZCBjcmVhdGUgYW4gYXV0byBjYWxsb3V0IGlmCisgIHJlcXVpcmVkLCBleGNlcHQgd2hlbiB0aGUgbmV4dCB0aGluZyBpcyBhIHF1YW50aWZpZXIgb3Igd2hlbiBwcm9jZXNzaW5nIGEKKyAgcHJvcGVydHkgc3Vic3RpdHV0aW9uIHN0cmluZyBmb3IgXHcgZXRjIGluIFVDUCBtb2RlLiAqLworCisgIGlmICghaXNfcXVhbnRpZmllciAmJiBjYi0+bmVzdHB0clswXSA9PSBOVUxMKQorICAgIHsKKyAgICBpZiAocHJldmlvdXNfY2FsbG91dCAhPSBOVUxMICYmIGFmdGVyX21hbnVhbF9jYWxsb3V0LS0gPD0gMCkKKyAgICAgIHsKKyAgICAgIGlmIChsZW5ndGhwdHIgPT0gTlVMTCkgICAgICAvKiBEb24ndCBhdHRlbXB0IGluIHByZS1jb21waWxlIHBoYXNlICovCisgICAgICAgIGNvbXBsZXRlX2NhbGxvdXQocHJldmlvdXNfY2FsbG91dCwgcHRyLCBjYik7CisgICAgICBwcmV2aW91c19jYWxsb3V0ID0gTlVMTDsKKyAgICAgIH0KKworICAgIGlmICgob3B0aW9ucyAmIFBDUkUyX0FVVE9fQ0FMTE9VVCkgIT0gMCkKKyAgICAgIHsKKyAgICAgIHByZXZpb3VzX2NhbGxvdXQgPSBjb2RlOworICAgICAgY29kZSA9IGF1dG9fY2FsbG91dChjb2RlLCBwdHIsIGNiKTsKKyAgICAgIH0KKyAgICB9CisKKyAgLyogUHJvY2VzcyB0aGUgbmV4dCBwYXR0ZXJuIGl0ZW0uICovCisKKyAgc3dpdGNoKGMpCisgICAgeworICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworICAgIC8qIFRoZSBicmFuY2ggdGVybWluYXRlcyBhdCBzdHJpbmcgZW5kIG9yIHwgb3IgKSAqLworCisgICAgY2FzZSBDSEFSX05VTEw6CisgICAgaWYgKHB0ciA8IGNiLT5lbmRfcGF0dGVybikgZ290byBOT1JNQUxfQ0hBUjsgICAvKiBaZXJvIGRhdGEgY2hhcmFjdGVyICovCisgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICBjYXNlIENIQVJfVkVSVElDQUxfTElORToKKyAgICBjYXNlIENIQVJfUklHSFRfUEFSRU5USEVTSVM6CisgICAgKmZpcnN0Y3VwdHIgPSBmaXJzdGN1OworICAgICpmaXJzdGN1ZmxhZ3NwdHIgPSBmaXJzdGN1ZmxhZ3M7CisgICAgKnJlcWN1cHRyID0gcmVxY3U7CisgICAgKnJlcWN1ZmxhZ3NwdHIgPSByZXFjdWZsYWdzOworICAgICpjb2RlcHRyID0gY29kZTsKKyAgICAqcHRycHRyID0gcHRyOworICAgIGlmIChsZW5ndGhwdHIgIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIGlmIChPRkxPV19NQVggLSAqbGVuZ3RocHRyIDwgKHNpemVfdCkoY29kZSAtIGxhc3RfY29kZSkpCisgICAgICAgIHsKKyAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjIwOworICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgfQorICAgICAgKmxlbmd0aHB0ciArPSBjb2RlIC0gbGFzdF9jb2RlOyAgIC8qIFRvIGluY2x1ZGUgY2FsbG91dCBsZW5ndGggKi8KKyAgICAgIH0KKyAgICByZXR1cm4gVFJVRTsKKworCisgICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisgICAgLyogSGFuZGxlIHNpbmdsZS1jaGFyYWN0ZXIgbWV0YWNoYXJhY3RlcnMuIEluIG11bHRpbGluZSBtb2RlLCBeIGRpc2FibGVzCisgICAgdGhlIHNldHRpbmcgb2YgYW55IGZvbGxvd2luZyBjaGFyIGFzIGEgZmlyc3QgY2hhcmFjdGVyLiAqLworCisgICAgY2FzZSBDSEFSX0NJUkNVTUZMRVhfQUNDRU5UOgorICAgIHByZXZpb3VzID0gTlVMTDsKKyAgICBpZiAoKG9wdGlvbnMgJiBQQ1JFMl9NVUxUSUxJTkUpICE9IDApCisgICAgICB7CisgICAgICBpZiAoZmlyc3RjdWZsYWdzID09IFJFUV9VTlNFVCkKKyAgICAgICAgemVyb2ZpcnN0Y3VmbGFncyA9IGZpcnN0Y3VmbGFncyA9IFJFUV9OT05FOworICAgICAgKmNvZGUrKyA9IE9QX0NJUkNNOworICAgICAgfQorICAgIGVsc2UgKmNvZGUrKyA9IE9QX0NJUkM7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIENIQVJfRE9MTEFSX1NJR046CisgICAgcHJldmlvdXMgPSBOVUxMOworICAgICpjb2RlKysgPSAoKG9wdGlvbnMgJiBQQ1JFMl9NVUxUSUxJTkUpICE9IDApPyBPUF9ET0xMTSA6IE9QX0RPTEw7CisgICAgYnJlYWs7CisKKyAgICAvKiBUaGVyZSBjYW4gbmV2ZXIgYmUgYSBmaXJzdCBjaGFyIGlmICcuJyBpcyBmaXJzdCwgd2hhdGV2ZXIgaGFwcGVucyBhYm91dAorICAgIHJlcGVhdHMuIFRoZSB2YWx1ZSBvZiByZXFjdSBkb2Vzbid0IGNoYW5nZSBlaXRoZXIuICovCisKKyAgICBjYXNlIENIQVJfRE9UOgorICAgIGlmIChmaXJzdGN1ZmxhZ3MgPT0gUkVRX1VOU0VUKSBmaXJzdGN1ZmxhZ3MgPSBSRVFfTk9ORTsKKyAgICB6ZXJvZmlyc3RjdSA9IGZpcnN0Y3U7CisgICAgemVyb2ZpcnN0Y3VmbGFncyA9IGZpcnN0Y3VmbGFnczsKKyAgICB6ZXJvcmVxY3UgPSByZXFjdTsKKyAgICB6ZXJvcmVxY3VmbGFncyA9IHJlcWN1ZmxhZ3M7CisgICAgcHJldmlvdXMgPSBjb2RlOworICAgICpjb2RlKysgPSAoKG9wdGlvbnMgJiBQQ1JFMl9ET1RBTEwpICE9IDApPyBPUF9BTExBTlk6IE9QX0FOWTsKKyAgICBicmVhazsKKworCisgICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisgICAgLyogQ2hhcmFjdGVyIGNsYXNzZXMuIElmIHRoZSBpbmNsdWRlZCBjaGFyYWN0ZXJzIGFyZSBhbGwgPCAyNTYsIHdlIGJ1aWxkIGEKKyAgICAzMi1ieXRlIGJpdG1hcCBvZiB0aGUgcGVybWl0dGVkIGNoYXJhY3RlcnMsIGV4Y2VwdCBpbiB0aGUgc3BlY2lhbCBjYXNlCisgICAgd2hlcmUgdGhlcmUgaXMgb25seSBvbmUgc3VjaCBjaGFyYWN0ZXIuIEZvciBuZWdhdGVkIGNsYXNzZXMsIHdlIGJ1aWxkIHRoZQorICAgIG1hcCBhcyB1c3VhbCwgdGhlbiBpbnZlcnQgaXQgYXQgdGhlIGVuZC4gSG93ZXZlciwgd2UgdXNlIGEgZGlmZmVyZW50IG9wY29kZQorICAgIHNvIHRoYXQgZGF0YSBjaGFyYWN0ZXJzID4gMjU1IGNhbiBiZSBoYW5kbGVkIGNvcnJlY3RseS4KKworICAgIElmIHRoZSBjbGFzcyBjb250YWlucyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIDAtMjU1IHJhbmdlLCBhIGRpZmZlcmVudAorICAgIG9wY29kZSBpcyBjb21waWxlZC4gSXQgbWF5IG9wdGlvbmFsbHkgaGF2ZSBhIGJpdCBtYXAgZm9yIGNoYXJhY3RlcnMgPCAyNTYsCisgICAgYnV0IHRob3NlIGFib3ZlIGFyZSBhcmUgZXhwbGljaXRseSBsaXN0ZWQgYWZ0ZXJ3YXJkcy4gQSBmbGFnIGJ5dGUgdGVsbHMKKyAgICB3aGV0aGVyIHRoZSBiaXRtYXAgaXMgcHJlc2VudCwgYW5kIHdoZXRoZXIgdGhpcyBpcyBhIG5lZ2F0ZWQgY2xhc3Mgb3Igbm90LgorCisgICAgQW4gaXNvbGF0ZWQgJ10nIGNoYXJhY3RlciBpcyBub3QgdHJlYXRlZCBzcGVjaWFsbHksIHNvIGlzIGp1c3QgYW5vdGhlciBkYXRhCisgICAgY2hhcmFjdGVyLiBJbiBlYXJsaWVyIHZlcnNpb25zIG9mIFBDUkUgdGhhdCB1c2VkIHRoZSBvcmlnaW5hbCBBUEkgdGhlcmUgd2FzCisgICAgYSAiSmF2YVNjcmlwdCBjb21wYXRpYmlsaXR5IG1vZGUiIGluIHdoaWNoIGl0IGdhdmUgYW4gZXJyb3IuIEhvd2V2ZXIsCisgICAgSmF2YVNjcmlwdCBpdHNlbGYgaGFzIGNoYW5nZWQgaW4gdGhpcyByZXNwZWN0IHNvIHRoZXJlIGlzIG5vIGxvbmdlciBhbnkKKyAgICBuZWVkIGZvciB0aGlzIHNwZWNpYWwgaGFuZGxpbmcuCisKKyAgICBJbiBhbm90aGVyIChQT1NJWCkgcmVnZXggbGlicmFyeSwgdGhlIHVnbHkgc3ludGF4IFtbOjw6XV0gYW5kIFtbOj46XV0gaXMKKyAgICB1c2VkIGZvciAic3RhcnQgb2Ygd29yZCIgYW5kICJlbmQgb2Ygd29yZCIuIEFzIHRoZXNlIGFyZSBvdGhlcndpc2UgaWxsZWdhbAorICAgIHNlcXVlbmNlcywgd2UgZG9uJ3QgYnJlYWsgYW55dGhpbmcgYnkgcmVjb2duaXppbmcgdGhlbS4gVGhleSBhcmUgcmVwbGFjZWQKKyAgICBieSBcYig/PVx3KSBhbmQgXGIoPzw9XHcpIHJlc3BlY3RpdmVseS4gVGhpcyBjYW4gb25seSBoYXBwZW4gYXQgdGhlIHRvcAorICAgIG5lc3RpbmcgbGV2ZWwsIGFzIG5vIG90aGVyIGluc2VydGVkIHNlcXVlbmNlcyB3aWxsIGNvbnRhaW5zIHRoZXNlIG9kZGl0aWVzLgorICAgIFNlcXVlbmNlcyBsaWtlIFthWzo8Ol1dIGFyZSBlcnJvbmVvdXMgYW5kIGFyZSBoYW5kbGVkIGJ5IHRoZSBub3JtYWwgY29kZQorICAgIGJlbG93LiAqLworCisgICAgY2FzZSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQ6CisgICAgaWYgKFBSSVYoc3RybmNtcF9jOCkocHRyKzEsIFNUUklOR19XRUlSRF9TVEFSVFdPUkQsIDYpID09IDApCisgICAgICB7CisgICAgICBjYi0+bmVzdHB0clswXSA9IHB0ciArIDc7CisgICAgICBwdHIgPSBzdWJfc3RhcnRfb2Zfd29yZDsgIC8qIERvIG5vdCBjb21iaW5lIHRoZXNlIHN0YXRlbWVudHM7IGNsYW5nJ3MgKi8KKyAgICAgIHB0ci0tOyAgICAgICAgICAgICAgICAgICAgLyogc2FuaXRpemVyIG1vYW5zIGFib3V0IGEgbmVnYXRpdmUgaW5kZXguICovCisgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgIGlmIChQUklWKHN0cm5jbXBfYzgpKHB0cisxLCBTVFJJTkdfV0VJUkRfRU5EV09SRCwgNikgPT0gMCkKKyAgICAgIHsKKyAgICAgIGNiLT5uZXN0cHRyWzBdID0gcHRyICsgNzsKKyAgICAgIHB0ciA9IHN1Yl9lbmRfb2Zfd29yZDsgICAgLyogRG8gbm90IGNvbWJpbmUgdGhlc2Ugc3RhdGVtZW50czsgY2xhbmcncyAqLworICAgICAgcHRyLS07ICAgICAgICAgICAgICAgICAgICAvKiBzYW5pdGl6ZXIgbW9hbnMgYWJvdXQgYSBuZWdhdGl2ZSBpbmRleC4gKi8KKyAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgLyogSGFuZGxlIGEgcmVhbCBjaGFyYWN0ZXIgY2xhc3MuICovCisKKyAgICBwcmV2aW91cyA9IGNvZGU7CisKKyAgICAvKiBQQ1JFIHN1cHBvcnRzIFBPU0lYIGNsYXNzIHN0dWZmIGluc2lkZSBhIGNsYXNzLiBQZXJsIGdpdmVzIGFuIGVycm9yIGlmCisgICAgdGhleSBhcmUgZW5jb3VudGVyZWQgYXQgdGhlIHRvcCBsZXZlbCwgc28gd2UnbGwgZG8gdGhhdCB0b28uICovCisKKyAgICBpZiAoKHB0clsxXSA9PSBDSEFSX0NPTE9OIHx8IHB0clsxXSA9PSBDSEFSX0RPVCB8fAorICAgICAgICAgcHRyWzFdID09IENIQVJfRVFVQUxTX1NJR04pICYmCisgICAgICAgIGNoZWNrX3Bvc2l4X3N5bnRheChwdHIsICZ0ZW1wcHRyKSkKKyAgICAgIHsKKyAgICAgICplcnJvcmNvZGVwdHIgPSAocHRyWzFdID09IENIQVJfQ09MT04pPyBFUlIxMiA6IEVSUjEzOworICAgICAgZ290byBGQUlMRUQ7CisgICAgICB9CisKKyAgICAvKiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzICdeJywgc2V0IHRoZSBuZWdhdGlvbiBmbGFnIGFuZCBza2lwIGl0LiBBbHNvLAorICAgIGlmIHRoZSBmaXJzdCBmZXcgY2hhcmFjdGVycyAoZWl0aGVyIGJlZm9yZSBvciBhZnRlciBeKSBhcmUgXFFcRSBvciBcRSB3ZQorICAgIHNraXAgdGhlbSB0b28uIFRoaXMgbWFrZXMgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLiAqLworCisgICAgbmVnYXRlX2NsYXNzID0gRkFMU0U7CisgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgIGMgPSAqKCsrcHRyKTsKKyAgICAgIGlmIChjID09IENIQVJfQkFDS1NMQVNIKQorICAgICAgICB7CisgICAgICAgIGlmIChwdHJbMV0gPT0gQ0hBUl9FKQorICAgICAgICAgIHB0cisrOworICAgICAgICBlbHNlIGlmIChQUklWKHN0cm5jbXBfYzgpKHB0ciArIDEsIFNUUl9RIFNUUl9CQUNLU0xBU0ggU1RSX0UsIDMpID09IDApCisgICAgICAgICAgcHRyICs9IDM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoIW5lZ2F0ZV9jbGFzcyAmJiBjID09IENIQVJfQ0lSQ1VNRkxFWF9BQ0NFTlQpCisgICAgICAgIG5lZ2F0ZV9jbGFzcyA9IFRSVUU7CisgICAgICBlbHNlIGJyZWFrOworICAgICAgfQorCisgICAgLyogRW1wdHkgY2xhc3NlcyBhcmUgYWxsb3dlZCBpZiBQQ1JFMl9BTExPV19FTVBUWV9DTEFTUyBpcyBzZXQuIE90aGVyd2lzZSwKKyAgICBhbiBpbml0aWFsICddJyBpcyB0YWtlbiBhcyBhIGRhdGEgY2hhcmFjdGVyIC0tIHRoZSBjb2RlIGJlbG93IGhhbmRsZXMKKyAgICB0aGF0LiBXaGVuIGVtcHR5IGNsYXNzZXMgYXJlIGFsbG93ZWQsIFtdIG11c3QgYWx3YXlzIGZhaWwsIHNvIGdlbmVyYXRlCisgICAgT1BfRkFJTCwgd2hlcmVhcyBbXl0gbXVzdCBtYXRjaCBhbnkgY2hhcmFjdGVyLCBzbyBnZW5lcmF0ZSBPUF9BTExBTlkuICovCisKKyAgICBpZiAoYyA9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmCisgICAgICAgIChjYi0+ZXh0ZXJuYWxfb3B0aW9ucyAmIFBDUkUyX0FMTE9XX0VNUFRZX0NMQVNTKSAhPSAwKQorICAgICAgeworICAgICAgKmNvZGUrKyA9IG5lZ2F0ZV9jbGFzcz8gT1BfQUxMQU5ZIDogT1BfRkFJTDsKKyAgICAgIGlmIChmaXJzdGN1ZmxhZ3MgPT0gUkVRX1VOU0VUKSBmaXJzdGN1ZmxhZ3MgPSBSRVFfTk9ORTsKKyAgICAgIHplcm9maXJzdGN1ID0gZmlyc3RjdTsKKyAgICAgIHplcm9maXJzdGN1ZmxhZ3MgPSBmaXJzdGN1ZmxhZ3M7CisgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIC8qIElmIGEgbm9uLWV4dGVuZGVkIGNsYXNzIGNvbnRhaW5zIGEgbmVnYXRpdmUgc3BlY2lhbCBzdWNoIGFzIFxTLCB3ZSBuZWVkCisgICAgdG8gZmxpcCB0aGUgbmVnYXRpb24gZmxhZyBhdCB0aGUgZW5kLCBzbyB0aGF0IHN1cHBvcnQgZm9yIGNoYXJhY3RlcnMgPiAyNTUKKyAgICB3b3JrcyBjb3JyZWN0bHkgKHRoZXkgYXJlIGFsbCBpbmNsdWRlZCBpbiB0aGUgY2xhc3MpLiBBbiBleHRlbmRlZCBjbGFzcyBtYXkKKyAgICBuZWVkIHRvIGluc2VydCBzcGVjaWZpYyBtYXRjaGluZyBvciBub24tbWF0Y2hpbmcgY29kZSBmb3Igd2lkZSBjaGFyYWN0ZXJzLgorICAgICovCisKKyAgICBzaG91bGRfZmxpcF9uZWdhdGlvbiA9IG1hdGNoX2FsbF9vcl9ub193aWRlX2NoYXJzID0gRkFMU0U7CisKKyAgICAvKiBFeHRlbmRlZCBjbGFzcyAoeGNsYXNzKSB3aWxsIGJlIHVzZWQgd2hlbiBjaGFyYWN0ZXJzID4gMjU1CisgICAgbWlnaHQgbWF0Y2guICovCisKKyNpZmRlZiBTVVBQT1JUX1dJREVfQ0hBUlMKKyAgICB4Y2xhc3MgPSBGQUxTRTsKKyAgICBjbGFzc191Y2hhcmRhdGEgPSBjb2RlICsgTElOS19TSVpFICsgMjsgICAvKiBGb3IgWENMQVNTIGl0ZW1zICovCisgICAgY2xhc3NfdWNoYXJkYXRhX2Jhc2UgPSBjbGFzc191Y2hhcmRhdGE7ICAgLyogU2F2ZSB0aGUgc3RhcnQgKi8KKyNlbmRpZgorCisgICAgLyogRm9yIG9wdGltaXphdGlvbiBwdXJwb3Nlcywgd2UgdHJhY2sgc29tZSBwcm9wZXJ0aWVzIG9mIHRoZSBjbGFzczoKKyAgICBjbGFzc19oYXNfOGJpdGNoYXIgd2lsbCBiZSBub24temVybyBpZiB0aGUgY2xhc3MgY29udGFpbnMgYXQgbGVhc3Qgb25lIDI1NgorICAgIGNoYXJhY3RlciB3aXRoIGEgY29kZSBwb2ludCBsZXNzIHRoYW4gMjU2OyBjbGFzc19vbmVfY2hhciB3aWxsIGJlIDEgaWYgdGhlCisgICAgY2xhc3MgY29udGFpbnMganVzdCBvbmUgY2hhcmFjdGVyOyB4Y2xhc3NfaGFzX3Byb3Agd2lsbCBiZSBUUlVFIGlmIFVuaWNvZGUKKyAgICBwcm9wZXJ0eSBjaGVja3MgYXJlIHByZXNlbnQgaW4gdGhlIGNsYXNzLiAqLworCisgICAgY2xhc3NfaGFzXzhiaXRjaGFyID0gMDsKKyAgICBjbGFzc19vbmVfY2hhciA9IDA7CisjaWZkZWYgU1VQUE9SVF9XSURFX0NIQVJTCisgICAgeGNsYXNzX2hhc19wcm9wID0gRkFMU0U7CisjZW5kaWYKKworICAgIC8qIEluaXRpYWxpemUgdGhlIDI1Ni1iaXQgKDMyLWJ5dGUpIGJpdCBtYXAgdG8gYWxsIHplcm9zLiBXZSBidWlsZCB0aGUgbWFwCisgICAgaW4gYSB0ZW1wb3JhcnkgYml0IG9mIG1lbW9yeSwgaW4gY2FzZSB0aGUgY2xhc3MgY29udGFpbnMgZmV3ZXIgdGhhbiB0d28KKyAgICA4LWJpdCBjaGFyYWN0ZXJzIGJlY2F1c2UgaW4gdGhhdCBjYXNlIHRoZSBjb21waWxlZCBjb2RlIGRvZXNuJ3QgdXNlIHRoZSBiaXQKKyAgICBtYXAuICovCisKKyAgICBtZW1zZXQoY2xhc3NiaXRzLCAwLCAzMiAqIHNpemVvZih1aW50OF90KSk7CisKKyAgICAvKiBQcm9jZXNzIGNoYXJhY3RlcnMgdW50aWwgXSBpcyByZWFjaGVkLiBBcyB0aGUgdGVzdCBpcyBhdCB0aGUgZW5kIG9mIHRoZQorICAgIGxvb3AsIGFuIGluaXRpYWwgXSBpcyB0YWtlbiBhcyBhIGRhdGEgY2hhcmFjdGVyLiBBdCB0aGUgc3RhcnQgb2YgdGhlIGxvb3AsCisgICAgYyBjb250YWlucyB0aGUgZmlyc3QgY29kZSB1bml0IG9mIHRoZSBjaGFyYWN0ZXIuIElmIGl0IGlzIHplcm8sIGNoZWNrIGZvcgorICAgIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIHRvIGFsbG93IGJpbmFyeSB6ZXJvIGFzIGRhdGEuICovCisKKyAgICBmb3IoOzspCisgICAgICB7CisgICAgICBQQ1JFMl9TUFRSIG9sZHB0cjsKKyNpZmRlZiBFQkNESUMKKyAgICAgIEJPT0wgcmFuZ2VfaXNfbGl0ZXJhbCA9IFRSVUU7CisjZW5kaWYKKworICAgICAgaWYgKGMgPT0gQ0hBUl9OVUxMICYmIHB0ciA+PSBjYi0+ZW5kX3BhdHRlcm4pCisgICAgICAgIHsKKyAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjY7ICAvKiBNaXNzaW5nIHRlcm1pbmF0aW5nICddJyAqLworICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgfQorCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBpZiAodXRmICYmIEhBU19FWFRSQUxFTihjKSkKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJyYWNlcyBhcmUgcmVxdWlyZWQgYmVjYXVzZSB0aGUgKi8KKyAgICAgICAgR0VUQ0hBUkxFTihjLCBwdHIsIHB0cik7ICAgIC8qIG1hY3JvIGdlbmVyYXRlcyBtdWx0aXBsZSBzdGF0ZW1lbnRzICovCisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKiBJbnNpZGUgXFEuLi5cRSBldmVyeXRoaW5nIGlzIGxpdGVyYWwgZXhjZXB0IFxFICovCisKKyAgICAgIGlmIChpbmVzY3EpCisgICAgICAgIHsKKyAgICAgICAgaWYgKGMgPT0gQ0hBUl9CQUNLU0xBU0ggJiYgcHRyWzFdID09IENIQVJfRSkgIC8qIElmIHdlIGFyZSBhdCBcRSAqLworICAgICAgICAgIHsKKyAgICAgICAgICBpbmVzY3EgPSBGQUxTRTsgICAgICAgICAgICAgICAgICAgLyogUmVzZXQgbGl0ZXJhbCBzdGF0ZSAqLworICAgICAgICAgIHB0cisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIHRoZSAnRScgKi8KKyAgICAgICAgICBnb3RvIENPTlRJTlVFX0NMQVNTOyAgICAgICAgICAgICAgLyogQ2Fycnkgb24gd2l0aCBuZXh0IGNoYXIgKi8KKyAgICAgICAgICB9CisgICAgICAgIGdvdG8gQ0hFQ0tfUkFOR0U7ICAgICAgICAgICAgICAgICAgIC8qIENvdWxkIGJlIHJhbmdlIGlmIFxFIGZvbGxvd3MgKi8KKyAgICAgICAgfQorCisgICAgICAvKiBIYW5kbGUgUE9TSVggY2xhc3MgbmFtZXMuIFBlcmwgYWxsb3dzIGEgbmVnYXRpb24gZXh0ZW5zaW9uIG9mIHRoZQorICAgICAgZm9ybSBbOl5uYW1lOl0uIEEgc3F1YXJlIGJyYWNrZXQgdGhhdCBkb2Vzbid0IG1hdGNoIHRoZSBzeW50YXggaXMKKyAgICAgIHRyZWF0ZWQgYXMgYSBsaXRlcmFsLiBXZSBhbHNvIHJlY29nbml6ZSB0aGUgUE9TSVggY29uc3RydWN0aW9ucworICAgICAgWy5jaC5dIGFuZCBbPWNoPV0gKCJjb2xsYXRpbmcgZWxlbWVudHMiKSBhbmQgZmF1bHQgdGhlbSwgYXMgUGVybAorICAgICAgNS42IGFuZCA1LjggZG8uICovCisKKyAgICAgIGlmIChjID09IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCAmJgorICAgICAgICAgIChwdHJbMV0gPT0gQ0hBUl9DT0xPTiB8fCBwdHJbMV0gPT0gQ0hBUl9ET1QgfHwKKyAgICAgICAgICAgcHRyWzFdID09IENIQVJfRVFVQUxTX1NJR04pICYmIGNoZWNrX3Bvc2l4X3N5bnRheChwdHIsICZ0ZW1wcHRyKSkKKyAgICAgICAgeworICAgICAgICBCT09MIGxvY2FsX25lZ2F0ZSA9IEZBTFNFOworICAgICAgICBpbnQgcG9zaXhfY2xhc3MsIHRhYm9mZnNldCwgdGFib3B0OworICAgICAgICByZWdpc3RlciBjb25zdCB1aW50OF90ICpjYml0cyA9IGNiLT5jYml0czsKKyAgICAgICAgdWludDhfdCBwYml0c1szMl07CisKKyAgICAgICAgaWYgKHB0clsxXSAhPSBDSEFSX0NPTE9OKQorICAgICAgICAgIHsKKyAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSMTM7CisgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgfQorCisgICAgICAgIHB0ciArPSAyOworICAgICAgICBpZiAoKnB0ciA9PSBDSEFSX0NJUkNVTUZMRVhfQUNDRU5UKQorICAgICAgICAgIHsKKyAgICAgICAgICBsb2NhbF9uZWdhdGUgPSBUUlVFOworICAgICAgICAgIHNob3VsZF9mbGlwX25lZ2F0aW9uID0gVFJVRTsgIC8qIE5vdGUgbmVnYXRpdmUgc3BlY2lhbCAqLworICAgICAgICAgIHB0cisrOworICAgICAgICAgIH0KKworICAgICAgICBwb3NpeF9jbGFzcyA9IGNoZWNrX3Bvc2l4X25hbWUocHRyLCAoaW50KSh0ZW1wcHRyIC0gcHRyKSk7CisgICAgICAgIGlmIChwb3NpeF9jbGFzcyA8IDApCisgICAgICAgICAgeworICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIzMDsKKyAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogSWYgbWF0Y2hpbmcgaXMgY2FzZWxlc3MsIHVwcGVyIGFuZCBsb3dlciBhcmUgY29udmVydGVkIHRvCisgICAgICAgIGFscGhhLiBUaGlzIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IHRoZSBjbGFzcyB0YWJsZSBzdGFydHMgd2l0aAorICAgICAgICBhbHBoYSwgbG93ZXIsIHVwcGVyIGFzIHRoZSBmaXJzdCAzIGVudHJpZXMuICovCisKKyAgICAgICAgaWYgKChvcHRpb25zICYgUENSRTJfQ0FTRUxFU1MpICE9IDAgJiYgcG9zaXhfY2xhc3MgPD0gMikKKyAgICAgICAgICBwb3NpeF9jbGFzcyA9IDA7CisKKyAgICAgICAgLyogV2hlbiBQQ1JFMl9VQ1AgaXMgc2V0LCBzb21lIG9mIHRoZSBQT1NJWCBjbGFzc2VzIGFyZSBjb252ZXJ0ZWQgdG8KKyAgICAgICAgZGlmZmVyZW50IGVzY2FwZSBzZXF1ZW5jZXMgdGhhdCB1c2UgVW5pY29kZSBwcm9wZXJ0aWVzIFxwIG9yIFxQLiBPdGhlcnMKKyAgICAgICAgdGhhdCBhcmUgbm90IGF2YWlsYWJsZSB2aWEgXHAgb3IgXFAgZ2VuZXJhdGUgWENMX1BST1AvWENMX05PVFBST1AKKyAgICAgICAgZGlyZWN0bHkuIFVDUCBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUgdW5sZXNzIFVURiBzdXBwb3J0IGlzLiovCisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgaWYgKChvcHRpb25zICYgUENSRTJfVUNQKSAhPSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgcHR5cGUgPSAwOworICAgICAgICAgIGludCBwYyA9IHBvc2l4X2NsYXNzICsgKChsb2NhbF9uZWdhdGUpPyBQT1NJWF9TVUJTSVpFLzIgOiAwKTsKKworICAgICAgICAgIC8qIFRoZSBwb3NpeF9zdWJzdGl0dXRlcyB0YWJsZSBzcGVjaWZpZXMgd2hpY2ggUE9TSVggY2xhc3NlcyBjYW4gYmUKKyAgICAgICAgICBjb252ZXJ0ZWQgdG8gXHAgb3IgXFAgaXRlbXMuIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGF0IHRvcCBuZXN0bGluZworICAgICAgICAgIGxldmVsLCBhcyB0aGVyZSB3aWxsIG5ldmVyIGJlIGEgUE9TSVggY2xhc3MgaW4gYSBzdHJpbmcgdGhhdCBpcworICAgICAgICAgIHN1YnN0aXR1dGVkIGZvciBzb21ldGhpbmcgZWxzZS4gKi8KKworICAgICAgICAgIGlmIChwb3NpeF9zdWJzdGl0dXRlc1twY10gIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNiLT5uZXN0cHRyWzBdID0gdGVtcHB0ciArIDE7CisgICAgICAgICAgICBwdHIgPSBwb3NpeF9zdWJzdGl0dXRlc1twY10gLSAxOworICAgICAgICAgICAgZ290byBDT05USU5VRV9DTEFTUzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIFRoZXJlIGFyZSB0aHJlZSBvdGhlciBjbGFzc2VzIHRoYXQgZ2VuZXJhdGUgc3BlY2lhbCBwcm9wZXJ0eSBjYWxscworICAgICAgICAgIHRoYXQgYXJlIHJlY29nbml6ZWQgb25seSBpbiBhbiBYQ0xBU1MuICovCisKKyAgICAgICAgICBlbHNlIHN3aXRjaChwb3NpeF9jbGFzcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgUENfR1JBUEg6CisgICAgICAgICAgICBwdHlwZSA9IFBUX1BYR1JBUEg7CisgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgUENfUFJJTlQ6CisgICAgICAgICAgICBpZiAocHR5cGUgPT0gMCkgcHR5cGUgPSBQVF9QWFBSSU5UOworICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIFBDX1BVTkNUOgorICAgICAgICAgICAgaWYgKHB0eXBlID09IDApIHB0eXBlID0gUFRfUFhQVU5DVDsKKyAgICAgICAgICAgICpjbGFzc191Y2hhcmRhdGErKyA9IGxvY2FsX25lZ2F0ZT8gWENMX05PVFBST1AgOiBYQ0xfUFJPUDsKKyAgICAgICAgICAgICpjbGFzc191Y2hhcmRhdGErKyA9IHB0eXBlOworICAgICAgICAgICAgKmNsYXNzX3VjaGFyZGF0YSsrID0gMDsKKyAgICAgICAgICAgIHhjbGFzc19oYXNfcHJvcCA9IFRSVUU7CisgICAgICAgICAgICBwdHIgPSB0ZW1wcHRyICsgMTsKKyAgICAgICAgICAgIGdvdG8gQ09OVElOVUVfQ0xBU1M7CisKKyAgICAgICAgICAgIC8qIEZvciB0aGUgb3RoZXIgUE9TSVggY2xhc3NlcyAoYXNjaWksIHhkaWdpdCkgd2UgYXJlIGdvaW5nIHRvIGZhbGwKKyAgICAgICAgICAgIHRocm91Z2ggdG8gdGhlIG5vbi1VQ1AgY2FzZSBhbmQgYnVpbGQgYSBiaXQgbWFwIGZvciBjaGFyYWN0ZXJzIHdpdGgKKyAgICAgICAgICAgIGNvZGUgcG9pbnRzIGxlc3MgdGhhbiAyNTYuIEhvd2V2ZXIsIGlmIHdlIGFyZSBpbiBhIG5lZ2F0ZWQgUE9TSVgKKyAgICAgICAgICAgIGNsYXNzLCBjaGFyYWN0ZXJzIHdpdGggY29kZSBwb2ludHMgZ3JlYXRlciB0aGFuIDI1NSBtdXN0IGVpdGhlciBhbGwKKyAgICAgICAgICAgIG1hdGNoIG9yIGFsbCBub3QgbWF0Y2gsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSB3aG9sZSBjbGFzcyBpcyBub3QKKyAgICAgICAgICAgIG9yIGlzIG5lZ2F0ZWQuIEZvciBleGFtcGxlLCBmb3IgW1s6XmFzY2lpOl0uLi4gdGhleSBtdXN0IGFsbCBtYXRjaCwKKyAgICAgICAgICAgIHdoZXJlYXMgZm9yIFteWzpeeGRpZ2l0Ol0uLi4gdGhleSBtdXN0IG5vdC4KKworICAgICAgICAgICAgSW4gdGhlIHNwZWNpYWwgY2FzZSB3aGVyZSB0aGVyZSBhcmUgbm8geGNsYXNzIGl0ZW1zLCB0aGlzIGlzCisgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgYnkgdGhlIHVzZSBvZiBPUF9DTEFTUyBvciBPUF9OQ0xBU1MsIGJ1dCBhbgorICAgICAgICAgICAgZXhwbGljaXQgcmFuZ2UgaXMgbmVlZGVkIGZvciBPUF9YQ0xBU1MuIFNldHRpbmcgYSBmbGFnIGhlcmUgY2F1c2VzCisgICAgICAgICAgICB0aGUgcmFuZ2UgdG8gYmUgZ2VuZXJhdGVkIGxhdGVyIHdoZW4gaXQgaXMga25vd24gdGhhdCBPUF9YQ0xBU1MgaXMKKyAgICAgICAgICAgIHJlcXVpcmVkLiAqLworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbWF0Y2hfYWxsX29yX25vX3dpZGVfY2hhcnMgfD0gbG9jYWxfbmVnYXRlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorI2VuZGlmICAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKworICAgICAgICAvKiBJbiB0aGUgbm9uLVVDUCBjYXNlLCBvciB3aGVuIFVDUCBtYWtlcyBubyBkaWZmZXJlbmNlLCB3ZSBidWlsZCB0aGUKKyAgICAgICAgYml0IG1hcCBmb3IgdGhlIFBPU0lYIGNsYXNzIGluIGEgY2h1bmsgb2YgbG9jYWwgc3RvcmUgYmVjYXVzZSB3ZSBtYXkgYmUKKyAgICAgICAgYWRkaW5nIGFuZCBzdWJ0cmFjdGluZyBmcm9tIGl0LCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBzdWJ0cmFjdCBiaXRzIHRoYXQKKyAgICAgICAgbWF5IGJlIGluIHRoZSBtYWluIG1hcCBhbHJlYWR5LiBBdCB0aGUgZW5kIHdlIG9yIHRoZSByZXN1bHQgaW50byB0aGUKKyAgICAgICAgYml0IG1hcCB0aGF0IGlzIGJlaW5nIGJ1aWx0LiAqLworCisgICAgICAgIHBvc2l4X2NsYXNzICo9IDM7CisKKyAgICAgICAgLyogQ29weSBpbiB0aGUgZmlyc3QgdGFibGUgKGFsd2F5cyBwcmVzZW50KSAqLworCisgICAgICAgIG1lbWNweShwYml0cywgY2JpdHMgKyBwb3NpeF9jbGFzc19tYXBzW3Bvc2l4X2NsYXNzXSwKKyAgICAgICAgICAzMiAqIHNpemVvZih1aW50OF90KSk7CisKKyAgICAgICAgLyogSWYgdGhlcmUgaXMgYSBzZWNvbmQgdGFibGUsIGFkZCBvciByZW1vdmUgaXQgYXMgcmVxdWlyZWQuICovCisKKyAgICAgICAgdGFib2Zmc2V0ID0gcG9zaXhfY2xhc3NfbWFwc1twb3NpeF9jbGFzcyArIDFdOworICAgICAgICB0YWJvcHQgPSBwb3NpeF9jbGFzc19tYXBzW3Bvc2l4X2NsYXNzICsgMl07CisKKyAgICAgICAgaWYgKHRhYm9mZnNldCA+PSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAodGFib3B0ID49IDApCisgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMzI7IGMrKykgcGJpdHNbY10gfD0gY2JpdHNbYyArIHRhYm9mZnNldF07CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IDMyOyBjKyspIHBiaXRzW2NdICY9IH5jYml0c1tjICsgdGFib2Zmc2V0XTsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogTm93IHNlZSBpZiB3ZSBuZWVkIHRvIHJlbW92ZSBhbnkgc3BlY2lhbCBjaGFyYWN0ZXJzLiBBbiBvcHRpb24KKyAgICAgICAgdmFsdWUgb2YgMSByZW1vdmVzIHZlcnRpY2FsIHNwYWNlIGFuZCAyIHJlbW92ZXMgdW5kZXJzY29yZS4gKi8KKworICAgICAgICBpZiAodGFib3B0IDwgMCkgdGFib3B0ID0gLXRhYm9wdDsKKyAgICAgICAgaWYgKHRhYm9wdCA9PSAxKSBwYml0c1sxXSAmPSB+MHgzYzsKKyAgICAgICAgICBlbHNlIGlmICh0YWJvcHQgPT0gMikgcGJpdHNbMTFdICY9IDB4N2Y7CisKKyAgICAgICAgLyogQWRkIHRoZSBQT1NJWCB0YWJsZSBvciBpdHMgY29tcGxlbWVudCBpbnRvIHRoZSBtYWluIHRhYmxlIHRoYXQgaXMKKyAgICAgICAgYmVpbmcgYnVpbHQgYW5kIHdlIGFyZSBkb25lLiAqLworCisgICAgICAgIGlmIChsb2NhbF9uZWdhdGUpCisgICAgICAgICAgZm9yIChjID0gMDsgYyA8IDMyOyBjKyspIGNsYXNzYml0c1tjXSB8PSB+cGJpdHNbY107CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMzI7IGMrKykgY2xhc3NiaXRzW2NdIHw9IHBiaXRzW2NdOworCisgICAgICAgIHB0ciA9IHRlbXBwdHIgKyAxOworICAgICAgICAvKiBFdmVyeSBjbGFzcyBjb250YWlucyBhdCBsZWFzdCBvbmUgPCAyNTYgY2hhcmFjdGVyLiAqLworICAgICAgICBjbGFzc19oYXNfOGJpdGNoYXIgPSAxOworICAgICAgICAvKiBFdmVyeSBjbGFzcyBjb250YWlucyBhdCBsZWFzdCB0d28gY2hhcmFjdGVycy4gKi8KKyAgICAgICAgY2xhc3Nfb25lX2NoYXIgPSAyOworICAgICAgICBnb3RvIENPTlRJTlVFX0NMQVNTOyAgICAvKiBFbmQgb2YgUE9TSVggc3ludGF4IGhhbmRsaW5nICovCisgICAgICAgIH0KKworICAgICAgLyogQmFja3NsYXNoIG1heSBpbnRyb2R1Y2UgYSBzaW5nbGUgY2hhcmFjdGVyLCBvciBpdCBtYXkgaW50cm9kdWNlIG9uZQorICAgICAgb2YgdGhlIHNwZWNpYWxzLCB3aGljaCBqdXN0IHNldCBhIGZsYWcuIFRoZSBzZXF1ZW5jZSBcYiBpcyBhIHNwZWNpYWwKKyAgICAgIGNhc2UuIEluc2lkZSBhIGNsYXNzIChhbmQgb25seSB0aGVyZSkgaXQgaXMgdHJlYXRlZCBhcyBiYWNrc3BhY2UuIFdlCisgICAgICBhc3N1bWUgdGhhdCBvdGhlciBlc2NhcGVzIGhhdmUgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gdGhlbSwgc28KKyAgICAgIHNwZWN1bGF0aXZlbHkgc2V0IGJvdGggY2xhc3NfaGFzXzhiaXRjaGFyIGFuZCBjbGFzc19vbmVfY2hhciBiaWdnZXIKKyAgICAgIHRoYW4gb25lLiBVbnJlY29nbml6ZWQgZXNjYXBlcyBmYWxsIHRocm91Z2ggYW5kIGFyZSBmYXVsdGVkLiAqLworCisgICAgICBpZiAoYyA9PSBDSEFSX0JBQ0tTTEFTSCkKKyAgICAgICAgeworICAgICAgICBlc2NhcGUgPSBQUklWKGNoZWNrX2VzY2FwZSkoJnB0ciwgY2ItPmVuZF9wYXR0ZXJuLCAmZWMsIGVycm9yY29kZXB0ciwKKyAgICAgICAgICBvcHRpb25zLCBUUlVFLCBjYik7CisgICAgICAgIGlmICgqZXJyb3Jjb2RlcHRyICE9IDApIGdvdG8gRkFJTEVEOworICAgICAgICBpZiAoZXNjYXBlID09IDApICAgIC8qIEVzY2FwZWQgc2luZ2xlIGNoYXIgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgYyA9IGVjOworI2lmZGVmIEVCQ0RJQworICAgICAgICAgIHJhbmdlX2lzX2xpdGVyYWwgPSBGQUxTRTsKKyNlbmRpZgorICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXNjYXBlID09IEVTQ19iKSBjID0gQ0hBUl9CUzsgLyogXGIgaXMgYmFja3NwYWNlIGluIGEgY2xhc3MgKi8KKyAgICAgICAgZWxzZSBpZiAoZXNjYXBlID09IEVTQ19OKSAgICAgICAgICAvKiBcTiBpcyBub3Qgc3VwcG9ydGVkIGluIGEgY2xhc3MgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjcxOworICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZXNjYXBlID09IEVTQ19RKSAgICAgICAgICAgIC8qIEhhbmRsZSBzdGFydCBvZiBxdW90ZWQgc3RyaW5nICovCisgICAgICAgICAgeworICAgICAgICAgIGlmIChwdHJbMV0gPT0gQ0hBUl9CQUNLU0xBU0ggJiYgcHRyWzJdID09IENIQVJfRSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHB0ciArPSAyOyAvKiBhdm9pZCBlbXB0eSBzdHJpbmcgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGluZXNjcSA9IFRSVUU7CisgICAgICAgICAgZ290byBDT05USU5VRV9DTEFTUzsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGVzY2FwZSA9PSBFU0NfRSkgZ290byBDT05USU5VRV9DTEFTUzsgIC8qIElnbm9yZSBvcnBoYW4gXEUgKi8KKworICAgICAgICBlbHNlICAvKiBIYW5kbGUgXGQtdHlwZSBlc2NhcGVzICovCisgICAgICAgICAgeworICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVpbnQ4X3QgKmNiaXRzID0gY2ItPmNiaXRzOworICAgICAgICAgIC8qIEV2ZXJ5IGNsYXNzIGNvbnRhaW5zIGF0IGxlYXN0IHR3byA8IDI1NiBjaGFyYWN0ZXJzLiAqLworICAgICAgICAgIGNsYXNzX2hhc184Yml0Y2hhcisrOworICAgICAgICAgIC8qIEV2ZXJ5IGNsYXNzIGNvbnRhaW5zIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzLiAqLworICAgICAgICAgIGNsYXNzX29uZV9jaGFyICs9IDI7CisKKyAgICAgICAgICBzd2l0Y2ggKGVzY2FwZSkKKyAgICAgICAgICAgIHsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgICAgIGNhc2UgRVNDX2R1OiAgICAgLyogVGhlc2UgYXJlIHRoZSB2YWx1ZXMgZ2l2ZW4gZm9yIFxkIGV0YyAqLworICAgICAgICAgICAgY2FzZSBFU0NfRFU6ICAgICAvKiB3aGVuIFBDUkUyX1VDUCBpcyBzZXQuIFdlIHJlcGxhY2UgdGhlICovCisgICAgICAgICAgICBjYXNlIEVTQ193dTogICAgIC8qIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIGFuIGFwcHJvcHJpYXRlIFxwICovCisgICAgICAgICAgICBjYXNlIEVTQ19XVTogICAgIC8qIG9yIFxQIHRvIHRlc3QgVW5pY29kZSBwcm9wZXJ0aWVzIGluc3RlYWQgKi8KKyAgICAgICAgICAgIGNhc2UgRVNDX3N1OiAgICAgLyogb2YgdGhlIGRlZmF1bHQgQVNDSUkgdGVzdGluZy4gVGhpcyBtaWdodCBiZSAqLworICAgICAgICAgICAgY2FzZSBFU0NfU1U6ICAgICAvKiBhIDJuZC1sZXZlbCBuZXN0aW5nIGZvciBbWzo8Ol1dIG9yIFtbOj46XV0uICovCisgICAgICAgICAgICBjYi0+bmVzdHB0clsxXSA9IGNiLT5uZXN0cHRyWzBdOworICAgICAgICAgICAgY2ItPm5lc3RwdHJbMF0gPSBwdHI7CisgICAgICAgICAgICBwdHIgPSBzdWJzdGl0dXRlc1tlc2NhcGUgLSBFU0NfRFVdIC0gMTsgIC8qIEp1c3QgYmVmb3JlIHN1YnN0aXR1dGUgKi8KKyAgICAgICAgICAgIGNsYXNzX2hhc184Yml0Y2hhci0tOyAgICAgICAgICAgICAgICAvKiBVbmRvISAqLworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgIGNhc2UgRVNDX2Q6CisgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMzI7IGMrKykgY2xhc3NiaXRzW2NdIHw9IGNiaXRzW2MrY2JpdF9kaWdpdF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFU0NfRDoKKyAgICAgICAgICAgIHNob3VsZF9mbGlwX25lZ2F0aW9uID0gVFJVRTsKKyAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCAzMjsgYysrKSBjbGFzc2JpdHNbY10gfD0gfmNiaXRzW2MrY2JpdF9kaWdpdF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFU0NfdzoKKyAgICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCAzMjsgYysrKSBjbGFzc2JpdHNbY10gfD0gY2JpdHNbYytjYml0X3dvcmRdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRVNDX1c6CisgICAgICAgICAgICBzaG91bGRfZmxpcF9uZWdhdGlvbiA9IFRSVUU7CisgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMzI7IGMrKykgY2xhc3NiaXRzW2NdIHw9IH5jYml0c1tjK2NiaXRfd29yZF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogUGVybCA1LjAwNCBvbndhcmRzIG9taXR0ZWQgVlQgZnJvbSBccywgYnV0IHJlc3RvcmVkIGl0IGF0IFBlcmwKKyAgICAgICAgICAgIDUuMTguIEJlZm9yZSBQQ1JFIDguMzQsIHdlIGhhZCB0byBwcmVzZXJ2ZSB0aGUgVlQgYml0IGlmIGl0IHdhcworICAgICAgICAgICAgcHJldmlvdXNseSBzZXQgYnkgc29tZXRoaW5nIGVhcmxpZXIgaW4gdGhlIGNoYXJhY3RlciBjbGFzcy4KKyAgICAgICAgICAgIEx1Y2tpbHksIHRoZSB2YWx1ZSBvZiBDSEFSX1ZUIGlzIDB4MGIgaW4gYm90aCBBU0NJSSBhbmQgRUJDRElDLCBzbworICAgICAgICAgICAgd2UgY291bGQganVzdCBhZGp1c3QgdGhlIGFwcHJvcHJpYXRlIGJpdC4gRnJvbSBQQ1JFIDguMzQgd2Ugbm8KKyAgICAgICAgICAgIGxvbmdlciB0cmVhdCBccyBhbmQgXFMgc3BlY2lhbGx5LiAqLworCisgICAgICAgICAgICBjYXNlIEVTQ19zOgorICAgICAgICAgICAgZm9yIChjID0gMDsgYyA8IDMyOyBjKyspIGNsYXNzYml0c1tjXSB8PSBjYml0c1tjK2NiaXRfc3BhY2VdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgRVNDX1M6CisgICAgICAgICAgICBzaG91bGRfZmxpcF9uZWdhdGlvbiA9IFRSVUU7CisgICAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMzI7IGMrKykgY2xhc3NiaXRzW2NdIHw9IH5jYml0c1tjK2NiaXRfc3BhY2VdOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8qIFRoZSByZXN0IGFwcGx5IGluIGJvdGggVUNQIGFuZCBub24tVUNQIGNhc2VzLiAqLworCisgICAgICAgICAgICBjYXNlIEVTQ19oOgorICAgICAgICAgICAgKHZvaWQpYWRkX2xpc3RfdG9fY2xhc3MoY2xhc3NiaXRzLCAmY2xhc3NfdWNoYXJkYXRhLCBvcHRpb25zLCBjYiwKKyAgICAgICAgICAgICAgUFJJVihoc3BhY2VfbGlzdCksIE5PVEFDSEFSKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVTQ19IOgorICAgICAgICAgICAgKHZvaWQpYWRkX25vdF9saXN0X3RvX2NsYXNzKGNsYXNzYml0cywgJmNsYXNzX3VjaGFyZGF0YSwgb3B0aW9ucywKKyAgICAgICAgICAgICAgY2IsIFBSSVYoaHNwYWNlX2xpc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVTQ192OgorICAgICAgICAgICAgKHZvaWQpYWRkX2xpc3RfdG9fY2xhc3MoY2xhc3NiaXRzLCAmY2xhc3NfdWNoYXJkYXRhLCBvcHRpb25zLCBjYiwKKyAgICAgICAgICAgICAgUFJJVih2c3BhY2VfbGlzdCksIE5PVEFDSEFSKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVTQ19WOgorICAgICAgICAgICAgKHZvaWQpYWRkX25vdF9saXN0X3RvX2NsYXNzKGNsYXNzYml0cywgJmNsYXNzX3VjaGFyZGF0YSwgb3B0aW9ucywKKyAgICAgICAgICAgICAgY2IsIFBSSVYodnNwYWNlX2xpc3QpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVTQ19wOgorICAgICAgICAgICAgY2FzZSBFU0NfUDoKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBCT09MIG5lZ2F0ZWQ7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwdHlwZSA9IDAsIHBkYXRhID0gMDsKKyAgICAgICAgICAgICAgaWYgKCFnZXRfdWNwKCZwdHIsICZuZWdhdGVkLCAmcHR5cGUsICZwZGF0YSwgZXJyb3Jjb2RlcHRyLCBjYikpCisgICAgICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICAgICpjbGFzc191Y2hhcmRhdGErKyA9ICgoZXNjYXBlID09IEVTQ19wKSAhPSBuZWdhdGVkKT8KKyAgICAgICAgICAgICAgICBYQ0xfUFJPUCA6IFhDTF9OT1RQUk9QOworICAgICAgICAgICAgICAqY2xhc3NfdWNoYXJkYXRhKysgPSBwdHlwZTsKKyAgICAgICAgICAgICAgKmNsYXNzX3VjaGFyZGF0YSsrID0gcGRhdGE7CisgICAgICAgICAgICAgIHhjbGFzc19oYXNfcHJvcCA9IFRSVUU7CisgICAgICAgICAgICAgIGNsYXNzX2hhc184Yml0Y2hhci0tOyAgICAgICAgICAgICAgICAvKiBVbmRvISAqLworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyNlbHNlCisgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSNDU7CisgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyNlbmRpZgorICAgICAgICAgICAgLyogVW5yZWNvZ25pemVkIGVzY2FwZXMgYXJlIGZhdWx0ZWQuICovCisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSNzsKKyAgICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogSGFuZGxlZCBcZC10eXBlIGVzY2FwZSAqLworCisgICAgICAgICAgZ290byBDT05USU5VRV9DTEFTUzsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogQ29udHJvbCBnZXRzIGhlcmUgaWYgdGhlIGVzY2FwZSBqdXN0IGRlZmluZWQgYSBzaW5nbGUgY2hhcmFjdGVyLgorICAgICAgICBUaGlzIGlzIGluIGMgYW5kIG1heSBiZSBncmVhdGVyIHRoYW4gMjU2LiAqLworCisgICAgICAgIGVzY2FwZSA9IDA7CisgICAgICAgIH0gICAvKiBFbmQgb2YgYmFja3NsYXNoIGhhbmRsaW5nICovCisKKyAgICAgIC8qIEEgY2hhcmFjdGVyIG1heSBiZSBmb2xsb3dlZCBieSAnLScgdG8gZm9ybSBhIHJhbmdlLiBIb3dldmVyLCBQZXJsIGRvZXMKKyAgICAgIG5vdCBwZXJtaXQgJ10nIHRvIGJlIHRoZSBlbmQgb2YgdGhlIHJhbmdlLiBBICctJyBjaGFyYWN0ZXIgYXQgdGhlIGVuZCBpcworICAgICAgdHJlYXRlZCBhcyBhIGxpdGVyYWwuIFBlcmwgaWdub3JlcyBvcnBoYW5lZCBcRSBzZXF1ZW5jZXMgZW50aXJlbHkuIFRoZQorICAgICAgY29kZSBmb3IgaGFuZGxpbmcgXFEgYW5kIFxFIGlzIG1lc3N5LiAqLworCisgICAgICBDSEVDS19SQU5HRToKKyAgICAgIHdoaWxlIChwdHJbMV0gPT0gQ0hBUl9CQUNLU0xBU0ggJiYgcHRyWzJdID09IENIQVJfRSkKKyAgICAgICAgeworICAgICAgICBpbmVzY3EgPSBGQUxTRTsKKyAgICAgICAgcHRyICs9IDI7CisgICAgICAgIH0KKyAgICAgIG9sZHB0ciA9IHB0cjsKKworICAgICAgLyogUmVtZW1iZXIgaWYgXHIgb3IgXG4gd2VyZSBleHBsaWNpdGx5IHVzZWQgKi8KKworICAgICAgaWYgKGMgPT0gQ0hBUl9DUiB8fCBjID09IENIQVJfTkwpIGNiLT5leHRlcm5hbF9mbGFncyB8PSBQQ1JFMl9IQVNDUk9STEY7CisKKyAgICAgIC8qIENoZWNrIGZvciByYW5nZSAqLworCisgICAgICBpZiAoIWluZXNjcSAmJiBwdHJbMV0gPT0gQ0hBUl9NSU5VUykKKyAgICAgICAgeworICAgICAgICB1aW50MzJfdCBkOworICAgICAgICBwdHIgKz0gMjsKKyAgICAgICAgd2hpbGUgKCpwdHIgPT0gQ0hBUl9CQUNLU0xBU0ggJiYgcHRyWzFdID09IENIQVJfRSkgcHRyICs9IDI7CisKKyAgICAgICAgLyogSWYgd2UgaGl0IFxRIChub3QgZm9sbG93ZWQgYnkgXEUpIGF0IHRoaXMgcG9pbnQsIGdvIGludG8gZXNjYXBlZAorICAgICAgICBtb2RlLiAqLworCisgICAgICAgIHdoaWxlICgqcHRyID09IENIQVJfQkFDS1NMQVNIICYmIHB0clsxXSA9PSBDSEFSX1EpCisgICAgICAgICAgeworICAgICAgICAgIHB0ciArPSAyOworICAgICAgICAgIGlmICgqcHRyID09IENIQVJfQkFDS1NMQVNIICYmIHB0clsxXSA9PSBDSEFSX0UpCisgICAgICAgICAgICB7IHB0ciArPSAyOyBjb250aW51ZTsgfQorICAgICAgICAgIGluZXNjcSA9IFRSVUU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgIC8qIE1pbnVzIChoeXBoZW4pIGF0IHRoZSBlbmQgb2YgYSBjbGFzcyBpcyB0cmVhdGVkIGFzIGEgbGl0ZXJhbCwgc28gcHV0CisgICAgICAgIGJhY2sgdGhlIHBvaW50ZXIgYW5kIGp1bXAgdG8gaGFuZGxlIHRoZSBjaGFyYWN0ZXIgdGhhdCBwcmVjZWRlZCBpdC4gKi8KKworICAgICAgICBpZiAoKnB0ciA9PSBDSEFSX05VTEwgfHwgKCFpbmVzY3EgJiYgKnB0ciA9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUKSkKKyAgICAgICAgICB7CisgICAgICAgICAgcHRyID0gb2xkcHRyOworICAgICAgICAgIGdvdG8gQ0xBU1NfU0lOR0xFX0NIQVJBQ1RFUjsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgcG90ZW50aWFsIHJhbmdlOyBwaWNrIHVwIHRoZSBuZXh0IGNoYXJhY3RlciAqLworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJyYWNlcyBhcmUgcmVxdWlyZWQgYmVjYXVzZSB0aGUgKi8KKyAgICAgICAgICBHRVRDSEFSTEVOKGQsIHB0ciwgcHRyKTsgICAgLyogbWFjcm8gZ2VuZXJhdGVzIG11bHRpcGxlIHN0YXRlbWVudHMgKi8KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICBkID0gKnB0cjsgIC8qIE5vdCBVVEYgbW9kZSAqLworCisgICAgICAgIC8qIFRoZSBzZWNvbmQgcGFydCBvZiBhIHJhbmdlIGNhbiBiZSBhIHNpbmdsZS1jaGFyYWN0ZXIgZXNjYXBlCisgICAgICAgIHNlcXVlbmNlLCBidXQgbm90IGFueSBvZiB0aGUgb3RoZXIgZXNjYXBlcy4gUGVybCB0cmVhdHMgYSBoeXBoZW4gYXMgYQorICAgICAgICBsaXRlcmFsIGluIHN1Y2ggY2lyY3Vtc3RhbmNlcy4gSG93ZXZlciwgaW4gUGVybCdzIHdhcm5pbmcgbW9kZSwgYQorICAgICAgICB3YXJuaW5nIGlzIGdpdmVuLCBzbyBQQ1JFIG5vdyBmYXVsdHMgaXQgYXMgaXQgaXMgYWxtb3N0IGNlcnRhaW5seSBhCisgICAgICAgIG1pc3Rha2Ugb24gdGhlIHVzZXIncyBwYXJ0LiAqLworCisgICAgICAgIGlmICghaW5lc2NxKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZCA9PSBDSEFSX0JBQ0tTTEFTSCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBkZXNjYXBlOworICAgICAgICAgICAgZGVzY2FwZSA9IFBSSVYoY2hlY2tfZXNjYXBlKSgmcHRyLCBjYi0+ZW5kX3BhdHRlcm4sICZkLAorICAgICAgICAgICAgICBlcnJvcmNvZGVwdHIsIG9wdGlvbnMsIFRSVUUsIGNiKTsKKyAgICAgICAgICAgIGlmICgqZXJyb3Jjb2RlcHRyICE9IDApIGdvdG8gRkFJTEVEOworI2lmZGVmIEVCQ0RJQworICAgICAgICAgICAgcmFuZ2VfaXNfbGl0ZXJhbCA9IEZBTFNFOworI2VuZGlmCisgICAgICAgICAgICAvKiAwIG1lYW5zIGEgY2hhcmFjdGVyIHdhcyBwdXQgaW50byBkOyBcYiBpcyBiYWNrc3BhY2U7IGFueSBvdGhlcgorICAgICAgICAgICAgc3BlY2lhbCBjYXVzZXMgYW4gZXJyb3IuICovCisKKyAgICAgICAgICAgIGlmIChkZXNjYXBlICE9IDApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGRlc2NhcGUgPT0gRVNDX2IpIGQgPSBDSEFSX0JTOyBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI1MDsKKyAgICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIEEgaHlwaGVuIGZvbGxvd2VkIGJ5IGEgUE9TSVggY2xhc3MgaXMgdHJlYXRlZCBpbiB0aGUgc2FtZSB3YXkuICovCisKKyAgICAgICAgICBlbHNlIGlmIChkID09IENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCAmJgorICAgICAgICAgICAgICAgICAgIChwdHJbMV0gPT0gQ0hBUl9DT0xPTiB8fCBwdHJbMV0gPT0gQ0hBUl9ET1QgfHwKKyAgICAgICAgICAgICAgICAgICAgcHRyWzFdID09IENIQVJfRVFVQUxTX1NJR04pICYmCisgICAgICAgICAgICAgICAgICAgY2hlY2tfcG9zaXhfc3ludGF4KHB0ciwgJnRlbXBwdHIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjUwOworICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIHRoYXQgdGhlIHR3byB2YWx1ZXMgYXJlIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBPcHRpbWl6ZQorICAgICAgICBvbmUtY2hhcmFjdGVyIHJhbmdlcy4gKi8KKworICAgICAgICBpZiAoZCA8IGMpCisgICAgICAgICAgeworICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI4OworICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKGQgPT0gYykgZ290byBDTEFTU19TSU5HTEVfQ0hBUkFDVEVSOyAgLyogQSBmZXcgbGluZXMgYmVsb3cgKi8KKworICAgICAgICAvKiBXZSBoYXZlIGZvdW5kIGEgY2hhcmFjdGVyIHJhbmdlLCBzbyBzaW5nbGUgY2hhcmFjdGVyIG9wdGltaXphdGlvbnMKKyAgICAgICAgY2Fubm90IGJlIGRvbmUgYW55bW9yZS4gQW55IHZhbHVlIGdyZWF0ZXIgdGhhbiAxIGluZGljYXRlcyB0aGF0IHRoZXJlCisgICAgICAgIGlzIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyLiAqLworCisgICAgICAgIGNsYXNzX29uZV9jaGFyID0gMjsKKworICAgICAgICAvKiBSZW1lbWJlciBhbiBleHBsaWNpdCBcciBvciBcbiwgYW5kIGFkZCB0aGUgcmFuZ2UgdG8gdGhlIGNsYXNzLiAqLworCisgICAgICAgIGlmIChkID09IENIQVJfQ1IgfHwgZCA9PSBDSEFSX05MKSBjYi0+ZXh0ZXJuYWxfZmxhZ3MgfD0gUENSRTJfSEFTQ1JPUkxGOworCisgICAgICAgIC8qIEluIGFuIEVCQ0RJQyBlbnZpcm9ubWVudCwgUGVybCB0cmVhdHMgYWxwaGFiZXRpYyByYW5nZXMgc3BlY2lhbGx5CisgICAgICAgIGJlY2F1c2UgdGhlcmUgYXJlIGhvbGVzIGluIHRoZSBlbmNvZGluZywgYW5kIHNpbXBseSB1c2luZyB0aGUgcmFuZ2UgQS1aCisgICAgICAgIChmb3IgZXhhbXBsZSkgd291bGQgaW5jbHVkZSB0aGUgY2hhcmFjdGVycyBpbiB0aGUgaG9sZXMuIFRoaXMgYXBwbGllcworICAgICAgICBvbmx5IHRvIGxpdGVyYWwgcmFuZ2VzOyBbXHhDMS1ceEU5XSBpcyBkaWZmZXJlbnQgdG8gW0EtWl0uICovCisKKyNpZmRlZiBFQkNESUMKKyAgICAgICAgaWYgKHJhbmdlX2lzX2xpdGVyYWwgJiYKKyAgICAgICAgICAgICAoY2ItPmN0eXBlc1tjXSAmIGN0eXBlX2xldHRlcikgIT0gMCAmJgorICAgICAgICAgICAgIChjYi0+Y3R5cGVzW2RdICYgY3R5cGVfbGV0dGVyKSAhPSAwICYmCisgICAgICAgICAgICAgKGMgPD0gQ0hBUl96KSA9PSAoZCA8PSBDSEFSX3opKQorICAgICAgICAgIHsKKyAgICAgICAgICB1aW50MzJfdCB1YyA9IChjIDw9IENIQVJfeik/IDAgOiA2NDsKKyAgICAgICAgICB1aW50MzJfdCBDID0gYyAtIHVjOworICAgICAgICAgIHVpbnQzMl90IEQgPSBkIC0gdWM7CisKKyAgICAgICAgICBpZiAoQyA8PSBDSEFSX2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjbGFzc19oYXNfOGJpdGNoYXIgKz0KKyAgICAgICAgICAgICAgYWRkX3RvX2NsYXNzKGNsYXNzYml0cywgJmNsYXNzX3VjaGFyZGF0YSwgb3B0aW9ucywgY2IsIEMgKyB1YywKKyAgICAgICAgICAgICAgICAoKEQgPCBDSEFSX2kpPyBEIDogQ0hBUl9pKSArIHVjKTsKKyAgICAgICAgICAgIEMgPSBDSEFSX2o7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoQyA8PSBEICYmIEMgPD0gQ0hBUl9yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2xhc3NfaGFzXzhiaXRjaGFyICs9CisgICAgICAgICAgICAgIGFkZF90b19jbGFzcyhjbGFzc2JpdHMsICZjbGFzc191Y2hhcmRhdGEsIG9wdGlvbnMsIGNiLCBDICsgdWMsCisgICAgICAgICAgICAgICAgKChEIDwgQ0hBUl9yKT8gRCA6IENIQVJfcikgKyB1Yyk7CisgICAgICAgICAgICBDID0gQ0hBUl9zOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKEMgPD0gRCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNsYXNzX2hhc184Yml0Y2hhciArPQorICAgICAgICAgICAgICBhZGRfdG9fY2xhc3MoY2xhc3NiaXRzLCAmY2xhc3NfdWNoYXJkYXRhLCBvcHRpb25zLCBjYiwgQyArIHVjLAorICAgICAgICAgICAgICAgIEQgKyB1Yyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgY2xhc3NfaGFzXzhiaXRjaGFyICs9CisgICAgICAgICAgYWRkX3RvX2NsYXNzKGNsYXNzYml0cywgJmNsYXNzX3VjaGFyZGF0YSwgb3B0aW9ucywgY2IsIGMsIGQpOworICAgICAgICBnb3RvIENPTlRJTlVFX0NMQVNTOyAgIC8qIEdvIGdldCB0aGUgbmV4dCBjaGFyIGluIHRoZSBjbGFzcyAqLworICAgICAgICB9CisKKyAgICAgIC8qIEhhbmRsZSBhIHNpbmdsZSBjaGFyYWN0ZXIgLSB3ZSBjYW4gZ2V0IGhlcmUgZm9yIGEgbm9ybWFsIG5vbi1lc2NhcGUKKyAgICAgIGNoYXIsIG9yIGFmdGVyIFwgdGhhdCBpbnRyb2R1Y2VzIGEgc2luZ2xlIGNoYXJhY3RlciBvciBmb3IgYW4gYXBwYXJlbnQKKyAgICAgIHJhbmdlIHRoYXQgaXNuJ3QuIE9ubHkgdGhlIHZhbHVlIDEgbWF0dGVycyBmb3IgY2xhc3Nfb25lX2NoYXIsIHNvIGRvbid0CisgICAgICBpbmNyZWFzZSBpdCBpZiBpdCBpcyBhbHJlYWR5IDIgb3IgbW9yZSAuLi4ganVzdCBpbiBjYXNlIHRoZXJlJ3MgYSBjbGFzcworICAgICAgd2l0aCBhIHppbGxpb24gY2hhcmFjdGVycyBpbiBpdC4gKi8KKworICAgICAgQ0xBU1NfU0lOR0xFX0NIQVJBQ1RFUjoKKyAgICAgIGlmIChjbGFzc19vbmVfY2hhciA8IDIpIGNsYXNzX29uZV9jaGFyKys7CisKKyAgICAgIC8qIElmIGNsYXNzX29uZV9jaGFyIGlzIDEgYW5kIHhjbGFzc19oYXNfcHJvcCBpcyBmYWxzZSwgd2UgaGF2ZSB0aGUgZmlyc3QKKyAgICAgIHNpbmdsZSBjaGFyYWN0ZXIgaW4gdGhlIGNsYXNzLCBhbmQgdGhlcmUgaGF2ZSBiZWVuIG5vIHByaW9yIHJhbmdlcywgb3IKKyAgICAgIFhDTEFTUyBpdGVtcyBnZW5lcmF0ZWQgYnkgZXNjYXBlcy4gSWYgdGhpcyBpcyB0aGUgZmluYWwgY2hhcmFjdGVyIGluIHRoZQorICAgICAgY2xhc3MsIHdlIGNhbiBvcHRpbWl6ZSBieSB0dXJuaW5nIHRoZSBpdGVtIGludG8gYSAxLWNoYXJhY3RlciBPUF9DSEFSW0ldCisgICAgICBpZiBpdCdzIHBvc2l0aXZlLCBvciBPUF9OT1RbSV0gaWYgaXQncyBuZWdhdGl2ZS4gSW4gdGhlIHBvc2l0aXZlIGNhc2UsIGl0CisgICAgICBjYW4gY2F1c2UgZmlyc3RjdSB0byBiZSBzZXQuIE90aGVyd2lzZSwgdGhlcmUgY2FuIGJlIG5vIGZpcnN0IGNoYXIgaWYKKyAgICAgIHRoaXMgaXRlbSBpcyBmaXJzdCwgd2hhdGV2ZXIgcmVwZWF0IGNvdW50IG1heSBmb2xsb3cuIEluIHRoZSBjYXNlIG9mCisgICAgICByZXFjdSwgc2F2ZSB0aGUgcHJldmlvdXMgdmFsdWUgZm9yIHJlaW5zdGF0aW5nLiAqLworCisgICAgICBpZiAoIWluZXNjcSAmJgorI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICAgICF4Y2xhc3NfaGFzX3Byb3AgJiYKKyNlbmRpZgorICAgICAgICAgIGNsYXNzX29uZV9jaGFyID09IDEgJiYgcHRyWzFdID09IENIQVJfUklHSFRfU1FVQVJFX0JSQUNLRVQpCisgICAgICAgIHsKKyAgICAgICAgcHRyKys7CisgICAgICAgIHplcm9yZXFjdSA9IHJlcWN1OworICAgICAgICB6ZXJvcmVxY3VmbGFncyA9IHJlcWN1ZmxhZ3M7CisKKyAgICAgICAgaWYgKG5lZ2F0ZV9jbGFzcykKKyAgICAgICAgICB7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgICAgaW50IGQ7CisjZW5kaWYKKyAgICAgICAgICBpZiAoZmlyc3RjdWZsYWdzID09IFJFUV9VTlNFVCkgZmlyc3RjdWZsYWdzID0gUkVRX05PTkU7CisgICAgICAgICAgemVyb2ZpcnN0Y3UgPSBmaXJzdGN1OworICAgICAgICAgIHplcm9maXJzdGN1ZmxhZ3MgPSBmaXJzdGN1ZmxhZ3M7CisKKyAgICAgICAgICAvKiBGb3IgY2FzZWxlc3MgVVRGIG1vZGUsIGNoZWNrIHdoZXRoZXIgdGhpcyBjaGFyYWN0ZXIgaGFzIG1vcmUgdGhhbgorICAgICAgICAgIG9uZSBvdGhlciBjYXNlLiBJZiBzbywgZ2VuZXJhdGUgYSBzcGVjaWFsIE9QX05PVFBST1AgaXRlbSBpbnN0ZWFkIG9mCisgICAgICAgICAgT1BfTk9USS4gKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICAgIGlmICh1dGYgJiYgKG9wdGlvbnMgJiBQQ1JFMl9DQVNFTEVTUykgIT0gMCAmJgorICAgICAgICAgICAgICAoZCA9IFVDRF9DQVNFU0VUKGMpKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgKmNvZGUrKyA9IE9QX05PVFBST1A7CisgICAgICAgICAgICAqY29kZSsrID0gUFRfQ0xJU1Q7CisgICAgICAgICAgICAqY29kZSsrID0gZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAvKiBDaGFyIGhhcyBvbmx5IG9uZSBvdGhlciBjYXNlLCBvciBVQ1Agbm90IGF2YWlsYWJsZSAqLworCisgICAgICAgICAgICB7CisgICAgICAgICAgICAqY29kZSsrID0gKChvcHRpb25zICYgUENSRTJfQ0FTRUxFU1MpICE9IDApPyBPUF9OT1RJOiBPUF9OT1Q7CisgICAgICAgICAgICBjb2RlICs9IFBVVENIQVIoYywgY29kZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBXZSBhcmUgZmluaXNoZWQgd2l0aCB0aGlzIGNoYXJhY3RlciBjbGFzcyAqLworCisgICAgICAgICAgZ290byBFTkRfQ0xBU1M7CisgICAgICAgICAgfQorCisgICAgICAgIC8qIEZvciBhIHNpbmdsZSwgcG9zaXRpdmUgY2hhcmFjdGVyLCBnZXQgdGhlIHZhbHVlIGludG8gbWNidWZmZXIsIGFuZAorICAgICAgICB0aGVuIHdlIGNhbiBoYW5kbGUgdGhpcyB3aXRoIHRoZSBub3JtYWwgb25lLWNoYXJhY3RlciBjb2RlLiAqLworCisgICAgICAgIG1jbGVuZ3RoID0gUFVUQ0hBUihjLCBtY2J1ZmZlcik7CisgICAgICAgIGdvdG8gT05FX0NIQVI7CisgICAgICAgIH0gICAgICAgLyogRW5kIG9mIDEtY2hhciBvcHRpbWl6YXRpb24gKi8KKworICAgICAgLyogVGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIgaW4gdGhlIGNsYXNzLCBvciBhbiBYQ0xBU1MgaXRlbQorICAgICAgaGFzIGJlZW4gZ2VuZXJhdGVkLiBBZGQgdGhpcyBjaGFyYWN0ZXIgdG8gdGhlIGNsYXNzLiAqLworCisgICAgICBjbGFzc19oYXNfOGJpdGNoYXIgKz0KKyAgICAgICAgYWRkX3RvX2NsYXNzKGNsYXNzYml0cywgJmNsYXNzX3VjaGFyZGF0YSwgb3B0aW9ucywgY2IsIGMsIGMpOworCisgICAgICAvKiBDb250aW51ZSB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIGNsYXNzLiBDbG9zaW5nIHNxdWFyZSBicmFja2V0CisgICAgICBub3Qgd2l0aGluIFxRLi5cRSBlbmRzIHRoZSBjbGFzcy4gQSBOVUxMIGNoYXJhY3RlciB0ZXJtaW5hdGVzIGEKKyAgICAgIG5lc3RlZCBzdWJzdGl0dXRpb24gc3RyaW5nLCBidXQgbWF5IGJlIGEgZGF0YSBjaGFyYWN0ZXIgaW4gdGhlIG1haW4KKyAgICAgIHBhdHRlcm4gKHRlc3RlZCBhdCB0aGUgc3RhcnQgb2YgdGhpcyBsb29wKS4gKi8KKworICAgICAgQ09OVElOVUVfQ0xBU1M6CisgICAgICBjID0gKigrK3B0cik7CisgICAgICBpZiAoYyA9PSBDSEFSX05VTEwgJiYgY2ItPm5lc3RwdHJbMF0gIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICBwdHIgPSBjYi0+bmVzdHB0clswXTsKKyAgICAgICAgY2ItPm5lc3RwdHJbMF0gPSBjYi0+bmVzdHB0clsxXTsKKyAgICAgICAgY2ItPm5lc3RwdHJbMV0gPSBOVUxMOworICAgICAgICBjID0gKigrK3B0cik7CisgICAgICAgIH0KKworI2lmZGVmIFNVUFBPUlRfV0lERV9DSEFSUworICAgICAgLyogSWYgYW55IHdpZGUgY2hhcmFjdGVycyBoYXZlIGJlZW4gZW5jb3VudGVyZWQsIHNldCB4Y2xhc3MgPSBUUlVFLiBUaGVuLAorICAgICAgaW4gdGhlIHByZS1jb21waWxlIHBoYXNlLCBhY2N1bXVsYXRlIHRoZSBsZW5ndGggb2YgdGhlIHdpZGUgY2hhcmFjdGVycworICAgICAgYW5kIHJlc2V0IHRoZSBwb2ludGVyLiBUaGlzIGlzIHNvIHRoYXQgdmVyeSBsYXJnZSBjbGFzc2VzIHRoYXQgY29udGFpbiBhCisgICAgICB6aWxsaW9uIHdpZGUgY2hhcmFjdGVycyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB3b3JrIHNwYWNlICh3aGljaCBpcyBvbiB0aGUKKyAgICAgIHN0YWNrKS4gKi8KKworICAgICAgaWYgKGNsYXNzX3VjaGFyZGF0YSA+IGNsYXNzX3VjaGFyZGF0YV9iYXNlKQorICAgICAgICB7CisgICAgICAgIHhjbGFzcyA9IFRSVUU7CisgICAgICAgIGlmIChsZW5ndGhwdHIgIT0gTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgKmxlbmd0aHB0ciArPSBjbGFzc191Y2hhcmRhdGEgLSBjbGFzc191Y2hhcmRhdGFfYmFzZTsKKyAgICAgICAgICBjbGFzc191Y2hhcmRhdGEgPSBjbGFzc191Y2hhcmRhdGFfYmFzZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgLyogQW4gdW5lc2NhcGVkIF0gZW5kcyB0aGUgY2xhc3MgKi8KKworICAgICAgaWYgKGMgPT0gQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAmJiAhaW5lc2NxKSBicmVhazsKKyAgICAgIH0gICAvKiBFbmQgb2YgbWFpbiBjbGFzcy1wcm9jZXNzaW5nIGxvb3AgKi8KKworICAgIC8qIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRoaW5nIGluIHRoZSBicmFuY2gsIHRoZXJlIGNhbiBiZSBubyBmaXJzdCBjaGFyCisgICAgc2V0dGluZywgd2hhdGV2ZXIgdGhlIHJlcGVhdCBjb3VudC4gQW55IHJlcWN1IHNldHRpbmcgbXVzdCByZW1haW4KKyAgICB1bmNoYW5nZWQgYWZ0ZXIgYW55IGtpbmQgb2YgcmVwZWF0LiAqLworCisgICAgaWYgKGZpcnN0Y3VmbGFncyA9PSBSRVFfVU5TRVQpIGZpcnN0Y3VmbGFncyA9IFJFUV9OT05FOworICAgIHplcm9maXJzdGN1ID0gZmlyc3RjdTsKKyAgICB6ZXJvZmlyc3RjdWZsYWdzID0gZmlyc3RjdWZsYWdzOworICAgIHplcm9yZXFjdSA9IHJlcWN1OworICAgIHplcm9yZXFjdWZsYWdzID0gcmVxY3VmbGFnczsKKworICAgIC8qIElmIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIHdpdGggdmFsdWVzID4gMjU1LCBvciBVbmljb2RlIHByb3BlcnR5IHNldHRpbmdzCisgICAgKFxwIG9yIFxQKSwgd2UgaGF2ZSB0byBjb21waWxlIGFuIGV4dGVuZGVkIGNsYXNzLCB3aXRoIGl0cyBvd24gb3Bjb2RlLAorICAgIHVubGVzcyB0aGVyZSB3ZXJlIG5vIHByb3BlcnR5IHNldHRpbmdzIGFuZCB0aGVyZSB3YXMgYSBuZWdhdGVkIHNwZWNpYWwgc3VjaAorICAgIGFzIFxTIGluIHRoZSBjbGFzcywgYW5kIFBDUkUyX1VDUCBpcyBub3Qgc2V0LCBiZWNhdXNlIGluIHRoYXQgY2FzZSBhbGwKKyAgICBjaGFyYWN0ZXJzID4gMjU1IGFyZSBpbiBvciBub3QgaW4gdGhlIGNsYXNzLCBzbyBhbnkgdGhhdCB3ZXJlIGV4cGxpY2l0bHkKKyAgICBnaXZlbiBhcyB3ZWxsIGNhbiBiZSBpZ25vcmVkLgorCisgICAgSW4gdGhlIFVDUCBjYXNlLCBpZiBjZXJ0YWluIG5lZ2F0ZWQgUE9TSVggY2xhc3NlcyAoWzpeYXNjaWk6XSBvcgorICAgIFteOnhkaWdpdDpdKSB3ZXJlIHByZXNlbnQgaW4gYSBjbGFzcywgd2UgZWl0aGVyIGhhdmUgdG8gbWF0Y2ggb3Igbm90IG1hdGNoCisgICAgYWxsIHdpZGUgY2hhcmFjdGVycyAoZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHdob2xlIGNsYXNzIGlzIG9yIGlzIG5vdAorICAgIG5lZ2F0ZWQpLiBUaGlzIHJlcXVpcmVtZW50IGlzIGluZGljYXRlZCBieSBtYXRjaF9hbGxfb3Jfbm9fd2lkZV9jaGFycyBiZWluZworICAgIHRydWUuIFdlIGRvIHRoaXMgYnkgaW5jbHVkaW5nIGFuIGV4cGxpY2l0IHJhbmdlLCB3aGljaCB3b3JrcyBpbiBib3RoIGNhc2VzLgorCisgICAgSWYsIHdoZW4gZ2VuZXJhdGluZyBhbiB4Y2xhc3MsIHRoZXJlIGFyZSBubyBjaGFyYWN0ZXJzIDwgMjU2LCB3ZSBjYW4gb21pdAorICAgIHRoZSBiaXRtYXAgaW4gdGhlIGFjdHVhbCBjb21waWxlZCBjb2RlLiAqLworCisjaWZkZWYgU1VQUE9SVF9XSURFX0NIQVJTCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgaWYgKHhjbGFzcyAmJiAoeGNsYXNzX2hhc19wcm9wIHx8ICFzaG91bGRfZmxpcF9uZWdhdGlvbiB8fAorICAgICAgICAgKG9wdGlvbnMgJiBQQ1JFMl9VQ1ApICE9IDApKQorI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICBpZiAoeGNsYXNzICYmICh4Y2xhc3NfaGFzX3Byb3AgfHwgIXNob3VsZF9mbGlwX25lZ2F0aW9uKSkKKyNlbmRpZgorICAgICAgeworICAgICAgaWYgKG1hdGNoX2FsbF9vcl9ub193aWRlX2NoYXJzKQorICAgICAgICB7CisgICAgICAgICpjbGFzc191Y2hhcmRhdGErKyA9IFhDTF9SQU5HRTsKKyAgICAgICAgY2xhc3NfdWNoYXJkYXRhICs9IFBSSVYob3JkMnV0ZikoMHgxMDAsIGNsYXNzX3VjaGFyZGF0YSk7CisgICAgICAgIGNsYXNzX3VjaGFyZGF0YSArPSBQUklWKG9yZDJ1dGYpKE1BWF9VVEZfQ09ERV9QT0lOVCwgY2xhc3NfdWNoYXJkYXRhKTsKKyAgICAgICAgfQorICAgICAgKmNsYXNzX3VjaGFyZGF0YSsrID0gWENMX0VORDsgICAgLyogTWFya3MgdGhlIGVuZCBvZiBleHRyYSBkYXRhICovCisgICAgICAqY29kZSsrID0gT1BfWENMQVNTOworICAgICAgY29kZSArPSBMSU5LX1NJWkU7CisgICAgICAqY29kZSA9IG5lZ2F0ZV9jbGFzcz8gWENMX05PVDowOworICAgICAgaWYgKHhjbGFzc19oYXNfcHJvcCkgKmNvZGUgfD0gWENMX0hBU1BST1A7CisKKyAgICAgIC8qIElmIHRoZSBtYXAgaXMgcmVxdWlyZWQsIG1vdmUgdXAgdGhlIGV4dHJhIGRhdGEgdG8gbWFrZSByb29tIGZvciBpdDsKKyAgICAgIG90aGVyd2lzZSBqdXN0IG1vdmUgdGhlIGNvZGUgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBleHRyYSBkYXRhLiAqLworCisgICAgICBpZiAoY2xhc3NfaGFzXzhiaXRjaGFyID4gMCkKKyAgICAgICAgeworICAgICAgICAqY29kZSsrIHw9IFhDTF9NQVA7CisgICAgICAgIG1lbW1vdmUoY29kZSArICgzMiAvIHNpemVvZihQQ1JFMl9VQ0hBUikpLCBjb2RlLAorICAgICAgICAgIENVMkJZVEVTKGNsYXNzX3VjaGFyZGF0YSAtIGNvZGUpKTsKKyAgICAgICAgaWYgKG5lZ2F0ZV9jbGFzcyAmJiAheGNsYXNzX2hhc19wcm9wKQorICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCAzMjsgYysrKSBjbGFzc2JpdHNbY10gPSB+Y2xhc3NiaXRzW2NdOworICAgICAgICBtZW1jcHkoY29kZSwgY2xhc3NiaXRzLCAzMik7CisgICAgICAgIGNvZGUgPSBjbGFzc191Y2hhcmRhdGEgKyAoMzIgLyBzaXplb2YoUENSRTJfVUNIQVIpKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBjb2RlID0gY2xhc3NfdWNoYXJkYXRhOworCisgICAgICAvKiBOb3cgZmlsbCBpbiB0aGUgY29tcGxldGUgbGVuZ3RoIG9mIHRoZSBpdGVtICovCisKKyAgICAgIFBVVChwcmV2aW91cywgMSwgKGludCkoY29kZSAtIHByZXZpb3VzKSk7CisgICAgICBicmVhazsgICAvKiBFbmQgb2YgY2xhc3MgaGFuZGxpbmcgKi8KKyAgICAgIH0KKyNlbmRpZgorCisgICAgLyogSWYgdGhlcmUgYXJlIG5vIGNoYXJhY3RlcnMgPiAyNTUsIG9yIHRoZXkgYXJlIGFsbCB0byBiZSBpbmNsdWRlZCBvcgorICAgIGV4Y2x1ZGVkLCBzZXQgdGhlIG9wY29kZSB0byBPUF9DTEFTUyBvciBPUF9OQ0xBU1MsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZQorICAgIHdob2xlIGNsYXNzIHdhcyBuZWdhdGVkIGFuZCB3aGV0aGVyIHRoZXJlIHdlcmUgbmVnYXRpdmUgc3BlY2lhbHMgc3VjaCBhcyBcUworICAgIChub24tVUNQKSBpbiB0aGUgY2xhc3MuIFRoZW4gY29weSB0aGUgMzItYnl0ZSBtYXAgaW50byB0aGUgY29kZSB2ZWN0b3IsCisgICAgbmVnYXRpbmcgaXQgaWYgbmVjZXNzYXJ5LiAqLworCisgICAgKmNvZGUrKyA9IChuZWdhdGVfY2xhc3MgPT0gc2hvdWxkX2ZsaXBfbmVnYXRpb24pID8gT1BfQ0xBU1MgOiBPUF9OQ0xBU1M7CisgICAgaWYgKGxlbmd0aHB0ciA9PSBOVUxMKSAgICAvKiBTYXZlIHRpbWUgaW4gdGhlIHByZS1jb21waWxlIHBoYXNlICovCisgICAgICB7CisgICAgICBpZiAobmVnYXRlX2NsYXNzKQorICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMzI7IGMrKykgY2xhc3NiaXRzW2NdID0gfmNsYXNzYml0c1tjXTsKKyAgICAgIG1lbWNweShjb2RlLCBjbGFzc2JpdHMsIDMyKTsKKyAgICAgIH0KKyAgICBjb2RlICs9IDMyIC8gc2l6ZW9mKFBDUkUyX1VDSEFSKTsKKworICAgIEVORF9DTEFTUzoKKyAgICBicmVhazsKKworCisgICAgLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisgICAgLyogVmFyaW91cyBraW5kcyBvZiByZXBlYXQ7ICd7JyBpcyBub3QgbmVjZXNzYXJpbHkgYSBxdWFudGlmaWVyLCBidXQgdGhpcworICAgIGhhcyBiZWVuIHRlc3RlZCBhYm92ZS4gKi8KKworICAgIGNhc2UgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQ6CisgICAgaWYgKCFpc19xdWFudGlmaWVyKSBnb3RvIE5PUk1BTF9DSEFSOworICAgIHB0ciA9IHJlYWRfcmVwZWF0X2NvdW50cyhwdHIrMSwgJnJlcGVhdF9taW4sICZyZXBlYXRfbWF4LCBlcnJvcmNvZGVwdHIpOworICAgIGlmICgqZXJyb3Jjb2RlcHRyICE9IDApIGdvdG8gRkFJTEVEOworICAgIGdvdG8gUkVQRUFUOworCisgICAgY2FzZSBDSEFSX0FTVEVSSVNLOgorICAgIHJlcGVhdF9taW4gPSAwOworICAgIHJlcGVhdF9tYXggPSAtMTsKKyAgICBnb3RvIFJFUEVBVDsKKworICAgIGNhc2UgQ0hBUl9QTFVTOgorICAgIHJlcGVhdF9taW4gPSAxOworICAgIHJlcGVhdF9tYXggPSAtMTsKKyAgICBnb3RvIFJFUEVBVDsKKworICAgIGNhc2UgQ0hBUl9RVUVTVElPTl9NQVJLOgorICAgIHJlcGVhdF9taW4gPSAwOworICAgIHJlcGVhdF9tYXggPSAxOworCisgICAgUkVQRUFUOgorICAgIGlmIChwcmV2aW91cyA9PSBOVUxMKQorICAgICAgeworICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjk7CisgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgIH0KKworICAgIGlmIChyZXBlYXRfbWluID09IDApCisgICAgICB7CisgICAgICBmaXJzdGN1ID0gemVyb2ZpcnN0Y3U7ICAgIC8qIEFkanVzdCBmb3IgemVybyByZXBlYXQgKi8KKyAgICAgIGZpcnN0Y3VmbGFncyA9IHplcm9maXJzdGN1ZmxhZ3M7CisgICAgICByZXFjdSA9IHplcm9yZXFjdTsgICAgICAgIC8qIERpdHRvICovCisgICAgICByZXFjdWZsYWdzID0gemVyb3JlcWN1ZmxhZ3M7CisgICAgICB9CisKKyAgICAvKiBSZW1lbWJlciB3aGV0aGVyIHRoaXMgaXMgYSB2YXJpYWJsZSBsZW5ndGggcmVwZWF0ICovCisKKyAgICByZXF2YXJ5ID0gKHJlcGVhdF9taW4gPT0gcmVwZWF0X21heCk/IDAgOiBSRVFfVkFSWTsKKworICAgIG9wX3R5cGUgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogRGVmYXVsdCBzaW5nbGUtY2hhciBvcCBjb2RlcyAqLworICAgIHBvc3Nlc3NpdmVfcXVhbnRpZmllciA9IEZBTFNFOyAgLyogRGVmYXVsdCBub3QgcG9zc2Vzc2l2ZSBxdWFudGlmaWVyICovCisKKyAgICAvKiBTYXZlIHN0YXJ0IG9mIHByZXZpb3VzIGl0ZW0sIGluIGNhc2Ugd2UgaGF2ZSB0byBtb3ZlIGl0IHVwIGluIG9yZGVyIHRvCisgICAgaW5zZXJ0IHNvbWV0aGluZyBiZWZvcmUgaXQuICovCisKKyAgICB0ZW1wY29kZSA9IHByZXZpb3VzOworCisgICAgLyogQmVmb3JlIGNoZWNraW5nIGZvciBhIHBvc3Nlc3NpdmUgcXVhbnRpZmllciwgd2UgbXVzdCBza2lwIG92ZXIKKyAgICB3aGl0ZXNwYWNlIGFuZCBjb21tZW50cyBpbiBleHRlbmRlZCBtb2RlIGJlY2F1c2UgUGVybCBhbGxvd3Mgd2hpdGUgc3BhY2UgYXQKKyAgICB0aGlzIHBvaW50LiAqLworCisgICAgaWYgKChvcHRpb25zICYgUENSRTJfRVhURU5ERUQpICE9IDApCisgICAgICB7CisgICAgICBwdHIrKzsKKyAgICAgIGZvciAoOzspCisgICAgICAgIHsKKyAgICAgICAgd2hpbGUgKE1BWF8yNTUoKnB0cikgJiYgKGNiLT5jdHlwZXNbKnB0cl0gJiBjdHlwZV9zcGFjZSkgIT0gMCkgcHRyKys7CisgICAgICAgIGlmICgqcHRyICE9IENIQVJfTlVNQkVSX1NJR04pIGJyZWFrOworICAgICAgICBwdHIrKzsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGNiLT5lbmRfcGF0dGVybikKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKElTX05FV0xJTkUocHRyKSkgICAgICAgICAvKiBGb3Igbm9uLWZpeGVkLWxlbmd0aCBuZXdsaW5lIGNhc2VzLCAqLworICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgIC8qIElTX05FV0xJTkUgc2V0cyBjYi0+bmxsZW4uICovCisgICAgICAgICAgICBwdHIgKz0gY2ItPm5sbGVuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgcHRyKys7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgICAgaWYgKHV0ZikgRk9SV0FSRENIQVIocHRyKTsKKyNlbmRpZgorICAgICAgICAgIH0gICAgICAgICAgIC8qIExvb3AgZm9yIGNvbW1lbnQgY2hhcmFjdGVycyAqLworICAgICAgICB9ICAgICAgICAgICAgIC8qIExvb3AgZm9yIG11bHRpcGxlIGNvbW1lbnRzICovCisgICAgICBwdHItLTsgICAgICAgICAgLyogTGFzdCBjb2RlIHVuaXQgb2YgcHJldmlvdXMgY2hhcmFjdGVyLiAqLworICAgICAgfQorCisgICAgLyogSWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzICcrJywgd2UgaGF2ZSBhIHBvc3Nlc3NpdmUgcXVhbnRpZmllci4gVGhpcworICAgIGltcGxpZXMgZ3JlZWRpbmVzcywgd2hhdGV2ZXIgdGhlIHNldHRpbmcgb2YgdGhlIFBDUkUyX1VOR1JFRURZIG9wdGlvbi4KKyAgICBJZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgJz8nIHRoaXMgaXMgYSBtaW5pbWl6aW5nIHJlcGVhdCwgYnkgZGVmYXVsdCwKKyAgICBidXQgaWYgUENSRTJfVU5HUkVFRFkgaXMgc2V0LCBpdCB3b3JrcyB0aGUgb3RoZXIgd2F5IHJvdW5kLiBXZSBjaGFuZ2UgdGhlCisgICAgcmVwZWF0IHR5cGUgdG8gdGhlIG5vbi1kZWZhdWx0LiAqLworCisgICAgaWYgKHB0clsxXSA9PSBDSEFSX1BMVVMpCisgICAgICB7CisgICAgICByZXBlYXRfdHlwZSA9IDA7ICAgICAgICAgICAgICAgICAgLyogRm9yY2UgZ3JlZWR5ICovCisgICAgICBwb3NzZXNzaXZlX3F1YW50aWZpZXIgPSBUUlVFOworICAgICAgcHRyKys7CisgICAgICB9CisgICAgZWxzZSBpZiAocHRyWzFdID09IENIQVJfUVVFU1RJT05fTUFSSykKKyAgICAgIHsKKyAgICAgIHJlcGVhdF90eXBlID0gZ3JlZWR5X25vbl9kZWZhdWx0OworICAgICAgcHRyKys7CisgICAgICB9CisgICAgZWxzZSByZXBlYXRfdHlwZSA9IGdyZWVkeV9kZWZhdWx0OworCisgICAgLyogSWYgdGhlIHJlcGVhdCBpcyB7MX0gd2UgY2FuIGlnbm9yZSBpdC4gKi8KKworICAgIGlmIChyZXBlYXRfbWF4ID09IDEgJiYgcmVwZWF0X21pbiA9PSAxKSBnb3RvIEVORF9SRVBFQVQ7CisKKyAgICAvKiBJZiBwcmV2aW91cyB3YXMgYSByZWN1cnNpb24gY2FsbCwgd3JhcCBpdCBpbiBhdG9taWMgYnJhY2tldHMgc28gdGhhdAorICAgIHByZXZpb3VzIGJlY29tZXMgdGhlIGF0b21pYyBncm91cC4gQWxsIHJlY3Vyc2lvbnMgd2VyZSBzbyB3cmFwcGVkIGluIHRoZQorICAgIHBhc3QsIGJ1dCBpdCBubyBsb25nZXIgaGFwcGVucyBmb3Igbm9uLXJlcGVhdGVkIHJlY3Vyc2lvbnMuIEluIGZhY3QsIHRoZQorICAgIHJlcGVhdGVkIG9uZXMgY291bGQgYmUgcmUtaW1wbGVtZW50ZWQgaW5kZXBlbmRlbnRseSBzbyBhcyBub3QgdG8gbmVlZCB0aGlzLAorICAgIGJ1dCBmb3IgdGhlIG1vbWVudCB3ZSByZWx5IG9uIHRoZSBjb2RlIGZvciByZXBlYXRpbmcgZ3JvdXBzLiAqLworCisgICAgaWYgKCpwcmV2aW91cyA9PSBPUF9SRUNVUlNFKQorICAgICAgeworICAgICAgbWVtbW92ZShwcmV2aW91cyArIDEgKyBMSU5LX1NJWkUsIHByZXZpb3VzLCBDVTJCWVRFUygxICsgTElOS19TSVpFKSk7CisgICAgICAqcHJldmlvdXMgPSBPUF9PTkNFOworICAgICAgUFVUKHByZXZpb3VzLCAxLCAyICsgMipMSU5LX1NJWkUpOworICAgICAgcHJldmlvdXNbMiArIDIqTElOS19TSVpFXSA9IE9QX0tFVDsKKyAgICAgIFBVVChwcmV2aW91cywgMyArIDIqTElOS19TSVpFLCAyICsgMipMSU5LX1NJWkUpOworICAgICAgY29kZSArPSAyICsgMiAqIExJTktfU0laRTsKKyAgICAgIGxlbmd0aF9wcmV2Z3JvdXAgPSAzICsgMypMSU5LX1NJWkU7CisgICAgICB9CisKKyAgICAvKiBOb3cgaGFuZGxlIHJlcGV0aXRpb24gZm9yIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgaXRlbS4gKi8KKworICAgIC8qIElmIHByZXZpb3VzIHdhcyBhIGNoYXJhY3RlciBvciBuZWdhdGVkIGNoYXJhY3RlciBtYXRjaCwgYWJvbGlzaCB0aGUgaXRlbQorICAgIGFuZCBnZW5lcmF0ZSBhIHJlcGVhdCBpdGVtIGluc3RlYWQuIElmIGEgY2hhciBpdGVtIGhhcyBhIG1pbmltdW0gb2YgbW9yZQorICAgIHRoYW4gb25lLCBlbnN1cmUgdGhhdCBpdCBpcyBzZXQgaW4gcmVxY3UgLSBpdCBtaWdodCBub3QgYmUgaWYgYSBzZXF1ZW5jZQorICAgIHN1Y2ggYXMgeHszfSBpcyB0aGUgZmlyc3QgdGhpbmcgaW4gYSBicmFuY2ggYmVjYXVzZSB0aGUgeCB3aWxsIGhhdmUgZ29uZQorICAgIGludG8gZmlyc3RjdSBpbnN0ZWFkLiAgKi8KKworICAgIGlmICgqcHJldmlvdXMgPT0gT1BfQ0hBUiB8fCAqcHJldmlvdXMgPT0gT1BfQ0hBUkkKKyAgICAgICAgfHwgKnByZXZpb3VzID09IE9QX05PVCB8fCAqcHJldmlvdXMgPT0gT1BfTk9USSkKKyAgICAgIHsKKyAgICAgIHN3aXRjaCAoKnByZXZpb3VzKQorICAgICAgICB7CisgICAgICAgIGRlZmF1bHQ6IC8qIE1ha2UgY29tcGlsZXIgaGFwcHkuICovCisgICAgICAgIGNhc2UgT1BfQ0hBUjogIG9wX3R5cGUgPSBPUF9TVEFSIC0gT1BfU1RBUjsgYnJlYWs7CisgICAgICAgIGNhc2UgT1BfQ0hBUkk6IG9wX3R5cGUgPSBPUF9TVEFSSSAtIE9QX1NUQVI7IGJyZWFrOworICAgICAgICBjYXNlIE9QX05PVDogICBvcF90eXBlID0gT1BfTk9UU1RBUiAtIE9QX1NUQVI7IGJyZWFrOworICAgICAgICBjYXNlIE9QX05PVEk6ICBvcF90eXBlID0gT1BfTk9UU1RBUkkgLSBPUF9TVEFSOyBicmVhazsKKyAgICAgICAgfQorCisgICAgICAvKiBEZWFsIHdpdGggVVRGIGNoYXJhY3RlcnMgdGhhdCB0YWtlIHVwIG1vcmUgdGhhbiBvbmUgY29kZSB1bml0LiBJdCdzCisgICAgICBlYXNpZXIgdG8gd3JpdGUgdGhpcyBvdXQgc2VwYXJhdGVseSB0aGFuIHRyeSB0byBtYWNyaWZ5IGl0LiBVc2UgYyB0bworICAgICAgaG9sZCB0aGUgbGVuZ3RoIG9mIHRoZSBjaGFyYWN0ZXIgaW4gY29kZSB1bml0cywgcGx1cyBVVEZfTEVOR1RIIHRvIGZsYWcKKyAgICAgIHRoYXQgaXQncyBhIGxlbmd0aCByYXRoZXIgdGhhbiBhIHNtYWxsIGNoYXJhY3Rlci4gKi8KKworI2lmZGVmIE1BWUJFX1VURl9NVUxUSQorICAgICAgaWYgKHV0ZiAmJiBOT1RfRklSU1RDVShjb2RlWy0xXSkpCisgICAgICAgIHsKKyAgICAgICAgUENSRTJfVUNIQVIgKmxhc3RjaGFyID0gY29kZSAtIDE7CisgICAgICAgIEJBQ0tDSEFSKGxhc3RjaGFyKTsKKyAgICAgICAgYyA9IChpbnQpKGNvZGUgLSBsYXN0Y2hhcik7ICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIFVURiBjaGFyYWN0ZXIgKi8KKyAgICAgICAgbWVtY3B5KHV0Zl91bml0cywgbGFzdGNoYXIsIENVMkJZVEVTKGMpKTsgLyogU2F2ZSB0aGUgY2hhciAqLworICAgICAgICBjIHw9IFVURl9MRU5HVEg7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGbGFnIGMgYXMgYSBsZW5ndGggKi8KKyAgICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmICAvKiBNQVlCRV9VVEZfTVVMVEkgKi8KKworICAgICAgLyogSGFuZGxlIHRoZSBjYXNlIG9mIGEgc2luZ2xlIGNoYXJhdGVyIC0gZWl0aGVyIHdpdGggbm8gVVRGIHN1cHBvcnQsIG9yCisgICAgICB3aXRoIFVURiBkaXNhYmxlZCwgb3IgZm9yIGEgc2luZ2xlLWNvZGUtdW5pdCBVVEYgY2hhcmFjdGVyLiAqLworICAgICAgICB7CisgICAgICAgIGMgPSBjb2RlWy0xXTsKKyAgICAgICAgaWYgKCpwcmV2aW91cyA8PSBPUF9DSEFSSSAmJiByZXBlYXRfbWluID4gMSkKKyAgICAgICAgICB7CisgICAgICAgICAgcmVxY3UgPSBjOworICAgICAgICAgIHJlcWN1ZmxhZ3MgPSByZXFfY2FzZW9wdCB8IGNiLT5yZXFfdmFyeW9wdDsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgZ290byBPVVRQVVRfU0lOR0xFX1JFUEVBVDsgICAvKiBDb2RlIHNoYXJlZCB3aXRoIHNpbmdsZSBjaGFyYWN0ZXIgdHlwZXMgKi8KKyAgICAgIH0KKworICAgIC8qIElmIHByZXZpb3VzIHdhcyBhIGNoYXJhY3RlciB0eXBlIG1hdGNoIChcZCBvciBzaW1pbGFyKSwgYWJvbGlzaCBpdCBhbmQKKyAgICBjcmVhdGUgYSBzdWl0YWJsZSByZXBlYXQgaXRlbS4gVGhlIGNvZGUgaXMgc2hhcmVkIHdpdGggc2luZ2xlLWNoYXJhY3RlcgorICAgIHJlcGVhdHMgYnkgc2V0dGluZyBvcF90eXBlIHRvIGFkZCBhIHN1aXRhYmxlIG9mZnNldCBpbnRvIHJlcGVhdF90eXBlLiBOb3RlCisgICAgdGhlIHRoZSBVbmljb2RlIHByb3BlcnR5IHR5cGVzIHdpbGwgYmUgcHJlc2VudCBvbmx5IHdoZW4gU1VQUE9SVF9VTklDT0RFIGlzCisgICAgZGVmaW5lZCwgYnV0IHdlIGRvbid0IHdyYXAgdGhlIGxpdHRsZSBiaXRzIG9mIGNvZGUgaGVyZSBiZWNhdXNlIGl0IGp1c3QKKyAgICBtYWtlcyBpdCBob3JyaWJseSBtZXNzeS4gKi8KKworICAgIGVsc2UgaWYgKCpwcmV2aW91cyA8IE9QX0VPRE4pCisgICAgICB7CisgICAgICBQQ1JFMl9VQ0hBUiAqb2xkY29kZTsKKyAgICAgIGludCBwcm9wX3R5cGUsIHByb3BfdmFsdWU7CisgICAgICBvcF90eXBlID0gT1BfVFlQRVNUQVIgLSBPUF9TVEFSOyAgICAgIC8qIFVzZSB0eXBlIG9wY29kZXMgKi8KKyAgICAgIGMgPSAqcHJldmlvdXM7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU2F2ZSBwcmV2aW91cyBvcGNvZGUgKi8KKyAgICAgIGlmIChjID09IE9QX1BST1AgfHwgYyA9PSBPUF9OT1RQUk9QKQorICAgICAgICB7CisgICAgICAgIHByb3BfdHlwZSA9IHByZXZpb3VzWzFdOworICAgICAgICBwcm9wX3ZhbHVlID0gcHJldmlvdXNbMl07CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAvKiBDb21lIGhlcmUgZnJvbSBqdXN0IGFib3ZlIHdpdGggYSBjaGFyYWN0ZXIgaW4gYyAqLworICAgICAgICBPVVRQVVRfU0lOR0xFX1JFUEVBVDoKKyAgICAgICAgcHJvcF90eXBlID0gcHJvcF92YWx1ZSA9IC0xOworICAgICAgICB9CisKKyAgICAgIC8qIEF0IHRoaXMgcG9pbnQgd2UgZWl0aGVyIGhhdmUgcHJvcF90eXBlID09IHByb3BfdmFsdWUgPT0gLTEgYW5kIGVpdGhlcgorICAgICAgYSBjb2RlIHBvaW50IG9yIGEgY2hhcmFjdGVyIHR5cGUgdGhhdCBpcyBub3QgT1BfW05PVF1QUk9QIGluIGMsIG9yIHdlCisgICAgICBoYXZlIE9QX1tOT1RdUFJPUCBpbiBjIGFuZCBwcm9wX3R5cGUvcHJvcF92YWx1ZSBub3QgbmVnYXRpdmUuICovCisKKyAgICAgIG9sZGNvZGUgPSBjb2RlOyAgICAgICAgICAgICAgICAgICAvKiBTYXZlIHdoZXJlIHdlIHdlcmUgKi8KKyAgICAgIGNvZGUgPSBwcmV2aW91czsgICAgICAgICAgICAgICAgICAvKiBVc3VhbGx5IG92ZXJ3cml0ZSBwcmV2aW91cyBpdGVtICovCisKKyAgICAgIC8qIElmIHRoZSBtYXhpbXVtIGlzIHplcm8gdGhlbiB0aGUgbWluaW11bSBtdXN0IGFsc28gYmUgemVybzsgUGVybCBhbGxvd3MKKyAgICAgIHRoaXMgY2FzZSwgc28gd2UgZG8gdG9vIC0gYnkgc2ltcGx5IG9taXR0aW5nIHRoZSBpdGVtIGFsdG9nZXRoZXIuICovCisKKyAgICAgIGlmIChyZXBlYXRfbWF4ID09IDApIGdvdG8gRU5EX1JFUEVBVDsKKworICAgICAgLyogQ29tYmluZSB0aGUgb3BfdHlwZSB3aXRoIHRoZSByZXBlYXRfdHlwZSAqLworCisgICAgICByZXBlYXRfdHlwZSArPSBvcF90eXBlOworCisgICAgICAvKiBBIG1pbmltdW0gb2YgemVybyBpcyBoYW5kbGVkIGVpdGhlciBhcyB0aGUgc3BlY2lhbCBjYXNlICogb3IgPywgb3IgYXMKKyAgICAgIGFuIFVQVE8sIHdpdGggdGhlIG1heGltdW0gZ2l2ZW4uICovCisKKyAgICAgIGlmIChyZXBlYXRfbWluID09IDApCisgICAgICAgIHsKKyAgICAgICAgaWYgKHJlcGVhdF9tYXggPT0gLTEpICpjb2RlKysgPSBPUF9TVEFSICsgcmVwZWF0X3R5cGU7CisgICAgICAgICAgZWxzZSBpZiAocmVwZWF0X21heCA9PSAxKSAqY29kZSsrID0gT1BfUVVFUlkgKyByZXBlYXRfdHlwZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAqY29kZSsrID0gT1BfVVBUTyArIHJlcGVhdF90eXBlOworICAgICAgICAgIFBVVDJJTkMoY29kZSwgMCwgcmVwZWF0X21heCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIEEgcmVwZWF0IG1pbmltdW0gb2YgMSBpcyBvcHRpbWl6ZWQgaW50byBzb21lIHNwZWNpYWwgY2FzZXMuIElmIHRoZQorICAgICAgbWF4aW11bSBpcyB1bmxpbWl0ZWQsIHdlIHVzZSBPUF9QTFVTLiBPdGhlcndpc2UsIHRoZSBvcmlnaW5hbCBpdGVtIGlzCisgICAgICBsZWZ0IGluIHBsYWNlIGFuZCwgaWYgdGhlIG1heGltdW0gaXMgZ3JlYXRlciB0aGFuIDEsIHdlIHVzZSBPUF9VUFRPIHdpdGgKKyAgICAgIG9uZSBsZXNzIHRoYW4gdGhlIG1heGltdW0uICovCisKKyAgICAgIGVsc2UgaWYgKHJlcGVhdF9taW4gPT0gMSkKKyAgICAgICAgeworICAgICAgICBpZiAocmVwZWF0X21heCA9PSAtMSkKKyAgICAgICAgICAqY29kZSsrID0gT1BfUExVUyArIHJlcGVhdF90eXBlOworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgIGNvZGUgPSBvbGRjb2RlOyAgICAgICAgICAgICAgICAgLyogTGVhdmUgcHJldmlvdXMgaXRlbSBpbiBwbGFjZSAqLworICAgICAgICAgIGlmIChyZXBlYXRfbWF4ID09IDEpIGdvdG8gRU5EX1JFUEVBVDsKKyAgICAgICAgICAqY29kZSsrID0gT1BfVVBUTyArIHJlcGVhdF90eXBlOworICAgICAgICAgIFBVVDJJTkMoY29kZSwgMCwgcmVwZWF0X21heCAtIDEpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBUaGUgY2FzZSB7bixufSBpcyBqdXN0IGFuIEVYQUNULCB3aGlsZSB0aGUgZ2VuZXJhbCBjYXNlIHtuLG19IGlzCisgICAgICBoYW5kbGVkIGFzIGFuIEVYQUNUIGZvbGxvd2VkIGJ5IGFuIFVQVE8gb3IgU1RBUiBvciBRVUVSWS4gKi8KKworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICpjb2RlKysgPSBPUF9FWEFDVCArIG9wX3R5cGU7ICAvKiBOQiBFWEFDVCBkb2Vzbid0IGhhdmUgcmVwZWF0X3R5cGUgKi8KKyAgICAgICAgUFVUMklOQyhjb2RlLCAwLCByZXBlYXRfbWluKTsKKworICAgICAgICAvKiBVbmxlc3MgcmVwZWF0X21heCBlcXVhbHMgcmVwZWF0X21pbiwgZmlsbCBpbiB0aGUgZGF0YSBmb3IgRVhBQ1QsIGFuZAorICAgICAgICB0aGVuIGdlbmVyYXRlIHRoZSBzZWNvbmQgb3Bjb2RlLiBJbiBVVEYgbW9kZSwgbXVsdGktY29kZS11bml0CisgICAgICAgIGNoYXJhY3RlcnMgaGF2ZSB0aGVpciBsZW5ndGggaW4gYywgd2l0aCB0aGUgVVRGX0xFTkdUSCBiaXQgYXMgYSBmbGFnLAorICAgICAgICBhbmQgdGhlIGNvZGUgdW5pdHMgaW4gdXRmX3VuaXRzLiBGb3IgYSByZXBlYXRlZCBVbmljb2RlIHByb3BlcnR5IG1hdGNoLAorICAgICAgICB0aGVyZSBhcmUgdHdvIGV4dHJhIHZhbHVlcyB0aGF0IGRlZmluZSB0aGUgcmVxdWlyZWQgcHJvcGVydHksIGFuZCBjCisgICAgICAgIG5ldmVyIGhhcyB0aGUgVVRGX0xFTkdUSCBiaXQgc2V0LiAqLworCisgICAgICAgIGlmIChyZXBlYXRfbWF4ICE9IHJlcGVhdF9taW4pCisgICAgICAgICAgeworI2lmZGVmIE1BWUJFX1VURl9NVUxUSQorICAgICAgICAgIGlmICh1dGYgJiYgKGMgJiBVVEZfTEVOR1RIKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KGNvZGUsIHV0Zl91bml0cywgQ1UyQllURVMoYyAmIDcpKTsKKyAgICAgICAgICAgIGNvZGUgKz0gYyAmIDc7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorI2VuZGlmICAvKiBNQVlCRV9VVEZfTVVMVEkgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICpjb2RlKysgPSBjOworICAgICAgICAgICAgaWYgKHByb3BfdHlwZSA+PSAwKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICpjb2RlKysgPSBwcm9wX3R5cGU7CisgICAgICAgICAgICAgICpjb2RlKysgPSBwcm9wX3ZhbHVlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBOb3cgc2V0IHVwIHRoZSBmb2xsb3dpbmcgb3Bjb2RlICovCisKKyAgICAgICAgICBpZiAocmVwZWF0X21heCA8IDApICpjb2RlKysgPSBPUF9TVEFSICsgcmVwZWF0X3R5cGU7IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlcGVhdF9tYXggLT0gcmVwZWF0X21pbjsKKyAgICAgICAgICAgIGlmIChyZXBlYXRfbWF4ID09IDEpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmNvZGUrKyA9IE9QX1FVRVJZICsgcmVwZWF0X3R5cGU7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAqY29kZSsrID0gT1BfVVBUTyArIHJlcGVhdF90eXBlOworICAgICAgICAgICAgICBQVVQySU5DKGNvZGUsIDAsIHJlcGVhdF9tYXgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIEZpbGwgaW4gdGhlIGNoYXJhY3RlciBvciBjaGFyYWN0ZXIgdHlwZSBmb3IgdGhlIGZpbmFsIG9wY29kZS4gKi8KKworI2lmZGVmIE1BWUJFX1VURl9NVUxUSQorICAgICAgaWYgKHV0ZiAmJiAoYyAmIFVURl9MRU5HVEgpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgbWVtY3B5KGNvZGUsIHV0Zl91bml0cywgQ1UyQllURVMoYyAmIDcpKTsKKyAgICAgICAgY29kZSArPSBjICYgNzsKKyAgICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmICAvKiBNQVlCRVdfVVRGX01VTFRJICovCisgICAgICAgIHsKKyAgICAgICAgKmNvZGUrKyA9IGM7CisgICAgICAgIGlmIChwcm9wX3R5cGUgPj0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgKmNvZGUrKyA9IHByb3BfdHlwZTsKKyAgICAgICAgICAqY29kZSsrID0gcHJvcF92YWx1ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIC8qIElmIHByZXZpb3VzIHdhcyBhIGNoYXJhY3RlciBjbGFzcyBvciBhIGJhY2sgcmVmZXJlbmNlLCB3ZSBwdXQgdGhlIHJlcGVhdAorICAgIHN0dWZmIGFmdGVyIGl0LCBidXQganVzdCBza2lwIHRoZSBpdGVtIGlmIHRoZSByZXBlYXQgd2FzIHswLDB9LiAqLworCisgICAgZWxzZSBpZiAoKnByZXZpb3VzID09IE9QX0NMQVNTIHx8ICpwcmV2aW91cyA9PSBPUF9OQ0xBU1MgfHwKKyNpZmRlZiBTVVBQT1JUX1dJREVfQ0hBUlMKKyAgICAgICAgICAgICAqcHJldmlvdXMgPT0gT1BfWENMQVNTIHx8CisjZW5kaWYKKyAgICAgICAgICAgICAqcHJldmlvdXMgPT0gT1BfUkVGICAgfHwgKnByZXZpb3VzID09IE9QX1JFRkkgfHwKKyAgICAgICAgICAgICAqcHJldmlvdXMgPT0gT1BfRE5SRUYgfHwgKnByZXZpb3VzID09IE9QX0ROUkVGSSkKKyAgICAgIHsKKyAgICAgIGlmIChyZXBlYXRfbWF4ID09IDApCisgICAgICAgIHsKKyAgICAgICAgY29kZSA9IHByZXZpb3VzOworICAgICAgICBnb3RvIEVORF9SRVBFQVQ7CisgICAgICAgIH0KKworICAgICAgaWYgKHJlcGVhdF9taW4gPT0gMCAmJiByZXBlYXRfbWF4ID09IC0xKQorICAgICAgICAqY29kZSsrID0gT1BfQ1JTVEFSICsgcmVwZWF0X3R5cGU7CisgICAgICBlbHNlIGlmIChyZXBlYXRfbWluID09IDEgJiYgcmVwZWF0X21heCA9PSAtMSkKKyAgICAgICAgKmNvZGUrKyA9IE9QX0NSUExVUyArIHJlcGVhdF90eXBlOworICAgICAgZWxzZSBpZiAocmVwZWF0X21pbiA9PSAwICYmIHJlcGVhdF9tYXggPT0gMSkKKyAgICAgICAgKmNvZGUrKyA9IE9QX0NSUVVFUlkgKyByZXBlYXRfdHlwZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAqY29kZSsrID0gT1BfQ1JSQU5HRSArIHJlcGVhdF90eXBlOworICAgICAgICBQVVQySU5DKGNvZGUsIDAsIHJlcGVhdF9taW4pOworICAgICAgICBpZiAocmVwZWF0X21heCA9PSAtMSkgcmVwZWF0X21heCA9IDA7ICAvKiAyLWJ5dGUgZW5jb2RpbmcgZm9yIG1heCAqLworICAgICAgICBQVVQySU5DKGNvZGUsIDAsIHJlcGVhdF9tYXgpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAvKiBJZiBwcmV2aW91cyB3YXMgYSBicmFja2V0IGdyb3VwLCB3ZSBtYXkgaGF2ZSB0byByZXBsaWNhdGUgaXQgaW4gY2VydGFpbgorICAgIGNhc2VzLiBOb3RlIHRoYXQgYXQgdGhpcyBwb2ludCB3ZSBjYW4gZW5jb3VudGVyIG9ubHkgdGhlICJiYXNpYyIgYnJhY2tldAorICAgIG9wY29kZXMgc3VjaCBhcyBCUkEgYW5kIENCUkEsIGFzIHRoaXMgaXMgdGhlIHBsYWNlIHdoZXJlIHRoZXkgZ2V0IGNvbnZlcnRlZAorICAgIGludG8gdGhlIG1vcmUgc3BlY2lhbCB2YXJpZXRpZXMgc3VjaCBhcyBCUkFQT1MgYW5kIFNCUkEuIEEgdGVzdCBmb3IgPj0KKyAgICBPUF9BU1NFUlQgYW5kIDw9IE9QX0NPTkQgaW5jbHVkZXMgQVNTRVJULCBBU1NFUlRfTk9ULCBBU1NFUlRCQUNLLAorICAgIEFTU0VSVEJBQ0tfTk9ULCBPTkNFLCBPTkNFX05DLCBCUkEsIEJSQVBPUywgQ0JSQSwgQ0JSQVBPUywgYW5kIENPTkQuCisgICAgT3JpZ2luYWxseSwgUENSRSBkaWQgbm90IGFsbG93IHJlcGV0aXRpb24gb2YgYXNzZXJ0aW9ucywgYnV0IG5vdyBpdCBkb2VzLAorICAgIGZvciBQZXJsIGNvbXBhdGliaWxpdHkuICovCisKKyAgICBlbHNlIGlmICgqcHJldmlvdXMgPj0gT1BfQVNTRVJUICYmICpwcmV2aW91cyA8PSBPUF9DT05EKQorICAgICAgeworICAgICAgcmVnaXN0ZXIgaW50IGk7CisgICAgICBpbnQgbGVuID0gKGludCkoY29kZSAtIHByZXZpb3VzKTsKKyAgICAgIFBDUkUyX1VDSEFSICpicmFsaW5rID0gTlVMTDsKKyAgICAgIFBDUkUyX1VDSEFSICpicmF6ZXJvcHRyID0gTlVMTDsKKworICAgICAgLyogUmVwZWF0aW5nIGEgREVGSU5FIGdyb3VwIChvciBhbnkgZ3JvdXAgd2hlcmUgdGhlIGNvbmRpdGlvbiBpcyBhbHdheXMKKyAgICAgIEZBTFNFIGFuZCB0aGVyZSBpcyBvbmx5IG9uZSBicmFuY2gpIGlzIHBvaW50bGVzcywgYnV0IFBlcmwgYWxsb3dzIHRoZQorICAgICAgc3ludGF4LCBzbyB3ZSBqdXN0IGlnbm9yZSB0aGUgcmVwZWF0LiAqLworCisgICAgICBpZiAoKnByZXZpb3VzID09IE9QX0NPTkQgJiYgcHJldmlvdXNbTElOS19TSVpFKzFdID09IE9QX0ZBTFNFICYmCisgICAgICAgICAgcHJldmlvdXNbR0VUKHByZXZpb3VzLCAxKV0gIT0gT1BfQUxUKQorICAgICAgICBnb3RvIEVORF9SRVBFQVQ7CisKKyAgICAgIC8qIFRoZXJlIGlzIG5vIHNlbnNlIGluIGFjdHVhbGx5IHJlcGVhdGluZyBhc3NlcnRpb25zLiBUaGUgb25seSBwb3RlbnRpYWwKKyAgICAgIHVzZSBvZiByZXBldGl0aW9uIGlzIGluIGNhc2VzIHdoZW4gdGhlIGFzc2VydGlvbiBpcyBvcHRpb25hbC4gVGhlcmVmb3JlLAorICAgICAgaWYgdGhlIG1pbmltdW0gaXMgZ3JlYXRlciB0aGFuIHplcm8sIGp1c3QgaWdub3JlIHRoZSByZXBlYXQuIElmIHRoZQorICAgICAgbWF4aW11bSBpcyBub3QgemVybyBvciBvbmUsIHNldCBpdCB0byAxLiAqLworCisgICAgICBpZiAoKnByZXZpb3VzIDwgT1BfT05DRSkgICAgLyogQXNzZXJ0aW9uICovCisgICAgICAgIHsKKyAgICAgICAgaWYgKHJlcGVhdF9taW4gPiAwKSBnb3RvIEVORF9SRVBFQVQ7CisgICAgICAgIGlmIChyZXBlYXRfbWF4IDwgMCB8fCByZXBlYXRfbWF4ID4gMSkgcmVwZWF0X21heCA9IDE7CisgICAgICAgIH0KKworICAgICAgLyogVGhlIGNhc2Ugb2YgYSB6ZXJvIG1pbmltdW0gaXMgc3BlY2lhbCBiZWNhdXNlIG9mIHRoZSBuZWVkIHRvIHN0aWNrCisgICAgICBPUF9CUkFaRVJPIGluIGZyb250IG9mIGl0LCBhbmQgYmVjYXVzZSB0aGUgZ3JvdXAgYXBwZWFycyBvbmNlIGluIHRoZQorICAgICAgZGF0YSwgd2hlcmVhcyBpbiBvdGhlciBjYXNlcyBpdCBhcHBlYXJzIHRoZSBtaW5pbXVtIG51bWJlciBvZiB0aW1lcy4gRm9yCisgICAgICB0aGlzIHJlYXNvbiwgaXQgaXMgc2ltcGxlc3QgdG8gdHJlYXQgdGhpcyBjYXNlIHNlcGFyYXRlbHksIGFzIG90aGVyd2lzZQorICAgICAgdGhlIGNvZGUgZ2V0cyBmYXIgdG9vIG1lc3N5LiBUaGVyZSBhcmUgc2V2ZXJhbCBzcGVjaWFsIHN1YmNhc2VzIHdoZW4gdGhlCisgICAgICBtaW5pbXVtIGlzIHplcm8uICovCisKKyAgICAgIGlmIChyZXBlYXRfbWluID09IDApCisgICAgICAgIHsKKyAgICAgICAgLyogSWYgdGhlIG1heGltdW0gaXMgYWxzbyB6ZXJvLCB3ZSB1c2VkIHRvIGp1c3Qgb21pdCB0aGUgZ3JvdXAgZnJvbSB0aGUKKyAgICAgICAgb3V0cHV0IGFsdG9nZXRoZXIsIGxpa2UgdGhpczoKKworICAgICAgICAqKiBpZiAocmVwZWF0X21heCA9PSAwKQorICAgICAgICAqKiAgIHsKKyAgICAgICAgKiogICBjb2RlID0gcHJldmlvdXM7CisgICAgICAgICoqICAgZ290byBFTkRfUkVQRUFUOworICAgICAgICAqKiAgIH0KKworICAgICAgICBIb3dldmVyLCB0aGF0IGZhaWxzIHdoZW4gYSBncm91cCBvciBhIHN1Ymdyb3VwIHdpdGhpbiBpdCBpcyByZWZlcmVuY2VkCisgICAgICAgIGFzIGEgc3Vicm91dGluZSBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgcGF0dGVybiwgc28gbm93IHdlIHN0aWNrIGluCisgICAgICAgIE9QX1NLSVBaRVJPIGluIGZyb250IG9mIGl0IHNvIHRoYXQgaXQgaXMgc2tpcHBlZCBvbiBleGVjdXRpb24uIEFzIHdlCisgICAgICAgIGRvbid0IGhhdmUgYSBsaXN0IG9mIHdoaWNoIGdyb3VwcyBhcmUgcmVmZXJlbmNlZCwgd2UgY2Fubm90IGRvIHRoaXMKKyAgICAgICAgc2VsZWN0aXZlbHkuCisKKyAgICAgICAgSWYgdGhlIG1heGltdW0gaXMgMSBvciB1bmxpbWl0ZWQsIHdlIGp1c3QgaGF2ZSB0byBzdGljayBpbiB0aGUgQlJBWkVSTworICAgICAgICBhbmQgZG8gbm8gbW9yZSBhdCB0aGlzIHBvaW50LiAqLworCisgICAgICAgIGlmIChyZXBlYXRfbWF4IDw9IDEpICAgIC8qIENvdmVycyAwLCAxLCBhbmQgdW5saW1pdGVkICovCisgICAgICAgICAgeworICAgICAgICAgIG1lbW1vdmUocHJldmlvdXMgKyAxLCBwcmV2aW91cywgQ1UyQllURVMobGVuKSk7CisgICAgICAgICAgY29kZSsrOworICAgICAgICAgIGlmIChyZXBlYXRfbWF4ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAqcHJldmlvdXMrKyA9IE9QX1NLSVBaRVJPOworICAgICAgICAgICAgZ290byBFTkRfUkVQRUFUOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyYXplcm9wdHIgPSBwcmV2aW91czsgICAgLyogU2F2ZSBmb3IgcG9zc2Vzc2l2ZSBvcHRpbWl6aW5nICovCisgICAgICAgICAgKnByZXZpb3VzKysgPSBPUF9CUkFaRVJPICsgcmVwZWF0X3R5cGU7CisgICAgICAgICAgfQorCisgICAgICAgIC8qIElmIHRoZSBtYXhpbXVtIGlzIGdyZWF0ZXIgdGhhbiAxIGFuZCBsaW1pdGVkLCB3ZSBoYXZlIHRvIHJlcGxpY2F0ZQorICAgICAgICBpbiBhIG5lc3RlZCBmYXNoaW9uLCBzdGlja2luZyBPUF9CUkFaRVJPIGJlZm9yZSBlYWNoIHNldCBvZiBicmFja2V0cy4KKyAgICAgICAgVGhlIGZpcnN0IG9uZSBoYXMgdG8gYmUgaGFuZGxlZCBjYXJlZnVsbHkgYmVjYXVzZSBpdCdzIHRoZSBvcmlnaW5hbAorICAgICAgICBjb3B5LCB3aGljaCBoYXMgdG8gYmUgbW92ZWQgdXAuIFRoZSByZW1haW5kZXIgY2FuIGJlIGhhbmRsZWQgYnkgY29kZQorICAgICAgICB0aGF0IGlzIGNvbW1vbiB3aXRoIHRoZSBub24temVybyBtaW5pbXVtIGNhc2UgYmVsb3cuIFdlIGhhdmUgdG8KKyAgICAgICAgYWRqdXN0IHRoZSB2YWx1ZSBvciByZXBlYXRfbWF4LCBzaW5jZSBvbmUgbGVzcyBjb3B5IGlzIHJlcXVpcmVkLiAqLworCisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgaW50IG9mZnNldDsKKyAgICAgICAgICBtZW1tb3ZlKHByZXZpb3VzICsgMiArIExJTktfU0laRSwgcHJldmlvdXMsIENVMkJZVEVTKGxlbikpOworICAgICAgICAgIGNvZGUgKz0gMiArIExJTktfU0laRTsKKyAgICAgICAgICAqcHJldmlvdXMrKyA9IE9QX0JSQVpFUk8gKyByZXBlYXRfdHlwZTsKKyAgICAgICAgICAqcHJldmlvdXMrKyA9IE9QX0JSQTsKKworICAgICAgICAgIC8qIFdlIGNoYWluIHRvZ2V0aGVyIHRoZSBicmFja2V0IG9mZnNldCBmaWVsZHMgdGhhdCBoYXZlIHRvIGJlCisgICAgICAgICAgZmlsbGVkIGluIGxhdGVyIHdoZW4gdGhlIGVuZHMgb2YgdGhlIGJyYWNrZXRzIGFyZSByZWFjaGVkLiAqLworCisgICAgICAgICAgb2Zmc2V0ID0gKGJyYWxpbmsgPT0gTlVMTCk/IDAgOiAoaW50KShwcmV2aW91cyAtIGJyYWxpbmspOworICAgICAgICAgIGJyYWxpbmsgPSBwcmV2aW91czsKKyAgICAgICAgICBQVVRJTkMocHJldmlvdXMsIDAsIG9mZnNldCk7CisgICAgICAgICAgfQorCisgICAgICAgIHJlcGVhdF9tYXgtLTsKKyAgICAgICAgfQorCisgICAgICAvKiBJZiB0aGUgbWluaW11bSBpcyBncmVhdGVyIHRoYW4gemVybywgcmVwbGljYXRlIHRoZSBncm91cCBhcyBtYW55CisgICAgICB0aW1lcyBhcyBuZWNlc3NhcnksIGFuZCBhZGp1c3QgdGhlIG1heGltdW0gdG8gdGhlIG51bWJlciBvZiBzdWJzZXF1ZW50CisgICAgICBjb3BpZXMgdGhhdCB3ZSBuZWVkLiAqLworCisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgaWYgKHJlcGVhdF9taW4gPiAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAvKiBJbiB0aGUgcHJlLWNvbXBpbGUgcGhhc2UsIHdlIGRvbid0IGFjdHVhbGx5IGRvIHRoZSByZXBsaWNhdGlvbi4gV2UKKyAgICAgICAgICBqdXN0IGFkanVzdCB0aGUgbGVuZ3RoIGFzIGlmIHdlIGhhZC4gRG8gc29tZSBwYXJhbm9pZCBjaGVja3MgZm9yCisgICAgICAgICAgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cuIFRoZSBJTlQ2NF9PUl9ET1VCTEUgdHlwZSBpcyBhIDY0LWJpdAorICAgICAgICAgIGludGVnZXIgdHlwZSB3aGVuIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGRvdWJsZS4gKi8KKworICAgICAgICAgIGlmIChsZW5ndGhwdHIgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBkZWx0YSA9IChyZXBlYXRfbWluIC0gMSkqbGVuZ3RoX3ByZXZncm91cDsKKyAgICAgICAgICAgIGlmICgoSU5UNjRfT1JfRE9VQkxFKShyZXBlYXRfbWluIC0gMSkqCisgICAgICAgICAgICAgICAgICAoSU5UNjRfT1JfRE9VQkxFKWxlbmd0aF9wcmV2Z3JvdXAgPgorICAgICAgICAgICAgICAgICAgICAoSU5UNjRfT1JfRE9VQkxFKUlOVF9NQVggfHwKKyAgICAgICAgICAgICAgICBPRkxPV19NQVggLSAqbGVuZ3RocHRyIDwgZGVsdGEpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjIwOworICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgKmxlbmd0aHB0ciArPSBkZWx0YTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIFRoaXMgaXMgY29tcGlsaW5nIGZvciByZWFsLiBJZiB0aGVyZSBpcyBhIHNldCBmaXJzdCBieXRlIGZvcgorICAgICAgICAgIHRoZSBncm91cCwgYW5kIHdlIGhhdmUgbm90IHlldCBzZXQgYSAicmVxdWlyZWQgYnl0ZSIsIHNldCBpdC4gKi8KKworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChncm91cHNldGZpcnN0Y3UgJiYgcmVxY3VmbGFncyA8IDApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVxY3UgPSBmaXJzdGN1OworICAgICAgICAgICAgICByZXFjdWZsYWdzID0gZmlyc3RjdWZsYWdzOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgcmVwZWF0X21pbjsgaSsrKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1lbWNweShjb2RlLCBwcmV2aW91cywgQ1UyQllURVMobGVuKSk7CisgICAgICAgICAgICAgIGNvZGUgKz0gbGVuOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgIGlmIChyZXBlYXRfbWF4ID4gMCkgcmVwZWF0X21heCAtPSByZXBlYXRfbWluOworICAgICAgICB9CisKKyAgICAgIC8qIFRoaXMgY29kZSBpcyBjb21tb24gdG8gYm90aCB0aGUgemVybyBhbmQgbm9uLXplcm8gbWluaW11bSBjYXNlcy4gSWYKKyAgICAgIHRoZSBtYXhpbXVtIGlzIGxpbWl0ZWQsIGl0IHJlcGxpY2F0ZXMgdGhlIGdyb3VwIGluIGEgbmVzdGVkIGZhc2hpb24sCisgICAgICByZW1lbWJlcmluZyB0aGUgYnJhY2tldCBzdGFydHMgb24gYSBzdGFjay4gSW4gdGhlIGNhc2Ugb2YgYSB6ZXJvIG1pbmltdW0sCisgICAgICB0aGUgZmlyc3Qgb25lIHdhcyBzZXQgdXAgYWJvdmUuIEluIGFsbCBjYXNlcyB0aGUgcmVwZWF0X21heCBub3cgc3BlY2lmaWVzCisgICAgICB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY29waWVzIG5lZWRlZC4gQWdhaW4sIHdlIG11c3QgcmVtZW1iZXIgdG8KKyAgICAgIHJlcGxpY2F0ZSBlbnRyaWVzIG9uIHRoZSBmb3J3YXJkIHJlZmVyZW5jZSBsaXN0LiAqLworCisgICAgICBpZiAocmVwZWF0X21heCA+PSAwKQorICAgICAgICB7CisgICAgICAgIC8qIEluIHRoZSBwcmUtY29tcGlsZSBwaGFzZSwgd2UgZG9uJ3QgYWN0dWFsbHkgZG8gdGhlIHJlcGxpY2F0aW9uLiBXZQorICAgICAgICBqdXN0IGFkanVzdCB0aGUgbGVuZ3RoIGFzIGlmIHdlIGhhZC4gRm9yIGVhY2ggcmVwZXRpdGlvbiB3ZSBtdXN0IGFkZCAxCisgICAgICAgIHRvIHRoZSBsZW5ndGggZm9yIEJSQVpFUk8gYW5kIGZvciBhbGwgYnV0IHRoZSBsYXN0IHJlcGV0aXRpb24gd2UgbXVzdAorICAgICAgICBhZGQgMiArIDIqTElOS1NJWkUgdG8gYWxsb3cgZm9yIHRoZSBuZXN0aW5nIHRoYXQgb2NjdXJzLiBEbyBzb21lCisgICAgICAgIHBhcmFub2lkIGNoZWNrcyB0byBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93LiBUaGUgSU5UNjRfT1JfRE9VQkxFIHR5cGUgaXMKKyAgICAgICAgYSA2NC1iaXQgaW50ZWdlciB0eXBlIHdoZW4gYXZhaWxhYmxlLCBvdGhlcndpc2UgZG91YmxlLiAqLworCisgICAgICAgIGlmIChsZW5ndGhwdHIgIT0gTlVMTCAmJiByZXBlYXRfbWF4ID4gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgc2l6ZV90IGRlbHRhID0gcmVwZWF0X21heCoobGVuZ3RoX3ByZXZncm91cCArIDEgKyAyICsgMipMSU5LX1NJWkUpIC0KKyAgICAgICAgICAgICAgICAgICAgICAyIC0gMipMSU5LX1NJWkU7ICAgLyogTGFzdCBvbmUgZG9lc24ndCBuZXN0ICovCisgICAgICAgICAgaWYgKChJTlQ2NF9PUl9ET1VCTEUpcmVwZWF0X21heCAqCisgICAgICAgICAgICAgICAgKElOVDY0X09SX0RPVUJMRSkobGVuZ3RoX3ByZXZncm91cCArIDEgKyAyICsgMipMSU5LX1NJWkUpCisgICAgICAgICAgICAgICAgICA+IChJTlQ2NF9PUl9ET1VCTEUpSU5UX01BWCB8fAorICAgICAgICAgICAgICBPRkxPV19NQVggLSAqbGVuZ3RocHRyIDwgZGVsdGEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSMjA7CisgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAqbGVuZ3RocHRyICs9IGRlbHRhOworICAgICAgICAgIH0KKworICAgICAgICAvKiBUaGlzIGlzIGNvbXBpbGluZyBmb3IgcmVhbCAqLworCisgICAgICAgIGVsc2UgZm9yIChpID0gcmVwZWF0X21heCAtIDE7IGkgPj0gMDsgaS0tKQorICAgICAgICAgIHsKKyAgICAgICAgICAqY29kZSsrID0gT1BfQlJBWkVSTyArIHJlcGVhdF90eXBlOworCisgICAgICAgICAgLyogQWxsIGJ1dCB0aGUgZmluYWwgY29weSBzdGFydCBhIG5ldyBuZXN0aW5nLCBtYWludGFpbmluZyB0aGUKKyAgICAgICAgICBjaGFpbiBvZiBicmFja2V0cyBvdXRzdGFuZGluZy4gKi8KKworICAgICAgICAgIGlmIChpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgb2Zmc2V0OworICAgICAgICAgICAgKmNvZGUrKyA9IE9QX0JSQTsKKyAgICAgICAgICAgIG9mZnNldCA9IChicmFsaW5rID09IE5VTEwpPyAwIDogKGludCkoY29kZSAtIGJyYWxpbmspOworICAgICAgICAgICAgYnJhbGluayA9IGNvZGU7CisgICAgICAgICAgICBQVVRJTkMoY29kZSwgMCwgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIG1lbWNweShjb2RlLCBwcmV2aW91cywgQ1UyQllURVMobGVuKSk7CisgICAgICAgICAgY29kZSArPSBsZW47CisgICAgICAgICAgfQorCisgICAgICAgIC8qIE5vdyBjaGFpbiB0aHJvdWdoIHRoZSBwZW5kaW5nIGJyYWNrZXRzLCBhbmQgZmlsbCBpbiB0aGVpciBsZW5ndGgKKyAgICAgICAgZmllbGRzICh3aGljaCBhcmUgaG9sZGluZyB0aGUgY2hhaW4gbGlua3MgcHJvIHRlbSkuICovCisKKyAgICAgICAgd2hpbGUgKGJyYWxpbmsgIT0gTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgaW50IG9sZGxpbmtvZmZzZXQ7CisgICAgICAgICAgaW50IG9mZnNldCA9IChpbnQpKGNvZGUgLSBicmFsaW5rICsgMSk7CisgICAgICAgICAgUENSRTJfVUNIQVIgKmJyYSA9IGNvZGUgLSBvZmZzZXQ7CisgICAgICAgICAgb2xkbGlua29mZnNldCA9IEdFVChicmEsIDEpOworICAgICAgICAgIGJyYWxpbmsgPSAob2xkbGlua29mZnNldCA9PSAwKT8gTlVMTCA6IGJyYWxpbmsgLSBvbGRsaW5rb2Zmc2V0OworICAgICAgICAgICpjb2RlKysgPSBPUF9LRVQ7CisgICAgICAgICAgUFVUSU5DKGNvZGUsIDAsIG9mZnNldCk7CisgICAgICAgICAgUFVUKGJyYSwgMSwgb2Zmc2V0KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgLyogSWYgdGhlIG1heGltdW0gaXMgdW5saW1pdGVkLCBzZXQgYSByZXBlYXRlciBpbiB0aGUgZmluYWwgY29weS4gRm9yCisgICAgICBPTkNFIGJyYWNrZXRzLCB0aGF0J3MgYWxsIHdlIG5lZWQgdG8gZG8uIEhvd2V2ZXIsIHBvc3Nlc3NpdmVseSByZXBlYXRlZAorICAgICAgT05DRSBicmFja2V0cyBjYW4gYmUgY29udmVydGVkIGludG8gbm9uLWNhcHR1cmluZyBicmFja2V0cywgYXMgdGhlCisgICAgICBiZWhhdmlvdXIgb2YgKD86eHgpKysgaXMgdGhlIHNhbWUgYXMgKD8+eHgpKysgYW5kIHRoaXMgc2F2ZXMgaGF2aW5nIHRvCisgICAgICBkZWFsIHdpdGggcG9zc2Vzc2l2ZSBPTkNFcyBzcGVjaWFsbHkuCisKKyAgICAgIE90aGVyd2lzZSwgd2hlbiB3ZSBhcmUgZG9pbmcgdGhlIGFjdHVhbCBjb21waWxlIHBoYXNlLCBjaGVjayB0byBzZWUKKyAgICAgIHdoZXRoZXIgdGhpcyBncm91cCBpcyBvbmUgdGhhdCBjb3VsZCBtYXRjaCBhbiBlbXB0eSBzdHJpbmcuIElmIHNvLAorICAgICAgY29udmVydCB0aGUgaW5pdGlhbCBvcGVyYXRvciB0byB0aGUgUyBmb3JtIChlLmcuIE9QX0JSQSAtPiBPUF9TQlJBKSBzbworICAgICAgdGhhdCBydW50aW1lIGNoZWNraW5nIGNhbiBiZSBkb25lLiBbVGhpcyBjaGVjayBpcyBhbHNvIGFwcGxpZWQgdG8gT05DRQorICAgICAgZ3JvdXBzIGF0IHJ1bnRpbWUsIGJ1dCBpbiBhIGRpZmZlcmVudCB3YXkuXQorCisgICAgICBUaGVuLCBpZiB0aGUgcXVhbnRpZmllciB3YXMgcG9zc2Vzc2l2ZSBhbmQgdGhlIGJyYWNrZXQgaXMgbm90IGEKKyAgICAgIGNvbmRpdGlvbmFsLCB3ZSBjb252ZXJ0IHRoZSBCUkEgY29kZSB0byB0aGUgUE9TIGZvcm0sIGFuZCB0aGUgS0VUIGNvZGUgdG8KKyAgICAgIEtFVFJQT1MuIChJdCB0dXJucyBvdXQgdG8gYmUgY29udmVuaWVudCBhdCBydW50aW1lIHRvIGRldGVjdCB0aGlzIGtpbmQgb2YKKyAgICAgIHN1YnBhdHRlcm4gYXQgYm90aCB0aGUgc3RhcnQgYW5kIGF0IHRoZSBlbmQuKSBUaGUgdXNlIG9mIHNwZWNpYWwgb3Bjb2RlcworICAgICAgbWFrZXMgaXQgcG9zc2libGUgdG8gcmVkdWNlIGdyZWF0bHkgdGhlIHN0YWNrIHVzYWdlIGluIHBjcmUyX21hdGNoKCkuIElmCisgICAgICB0aGUgZ3JvdXAgaXMgcHJlY2VkZWQgYnkgT1BfQlJBWkVSTywgY29udmVydCB0aGlzIHRvIE9QX0JSQVBPU1pFUk8uCisKKyAgICAgIFRoZW4sIGlmIHRoZSBtaW5pbXVtIG51bWJlciBvZiBtYXRjaGVzIGlzIDEgb3IgMCwgY2FuY2VsIHRoZSBwb3NzZXNzaXZlCisgICAgICBmbGFnIHNvIHRoYXQgdGhlIGRlZmF1bHQgYWN0aW9uIGJlbG93LCBvZiB3cmFwcGluZyBldmVyeXRoaW5nIGluc2lkZQorICAgICAgYXRvbWljIGJyYWNrZXRzLCBkb2VzIG5vdCBoYXBwZW4uIFdoZW4gdGhlIG1pbmltdW0gaXMgZ3JlYXRlciB0aGFuIDEsCisgICAgICB0aGVyZSB3aWxsIGJlIGVhcmxpZXIgY29waWVzIG9mIHRoZSBncm91cCwgYW5kIHNvIHdlIHN0aWxsIGhhdmUgdG8gd3JhcAorICAgICAgdGhlIHdob2xlIHRoaW5nLiAqLworCisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgUENSRTJfVUNIQVIgKmtldGNvZGUgPSBjb2RlIC0gMSAtIExJTktfU0laRTsKKyAgICAgICAgUENSRTJfVUNIQVIgKmJyYWNvZGUgPSBrZXRjb2RlIC0gR0VUKGtldGNvZGUsIDEpOworCisgICAgICAgIC8qIENvbnZlcnQgcG9zc2Vzc2l2ZSBPTkNFIGJyYWNrZXRzIHRvIG5vbi1jYXB0dXJpbmcgKi8KKworICAgICAgICBpZiAoKCpicmFjb2RlID09IE9QX09OQ0UgfHwgKmJyYWNvZGUgPT0gT1BfT05DRV9OQykgJiYKKyAgICAgICAgICAgIHBvc3Nlc3NpdmVfcXVhbnRpZmllcikgKmJyYWNvZGUgPSBPUF9CUkE7CisKKyAgICAgICAgLyogRm9yIG5vbi1wb3NzZXNzaXZlIE9OQ0UgYnJhY2tldHMsIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIHRvCisgICAgICAgIHNldCB0aGUgS0VULiAqLworCisgICAgICAgIGlmICgqYnJhY29kZSA9PSBPUF9PTkNFIHx8ICpicmFjb2RlID09IE9QX09OQ0VfTkMpCisgICAgICAgICAgKmtldGNvZGUgPSBPUF9LRVRSTUFYICsgcmVwZWF0X3R5cGU7CisKKyAgICAgICAgLyogSGFuZGxlIG5vbi1PTkNFIGJyYWNrZXRzIGFuZCBwb3NzZXNzaXZlIE9OQ0VzICh3aGljaCBoYXZlIGJlZW4KKyAgICAgICAgY29udmVydGVkIHRvIG5vbi1jYXB0dXJpbmcgYWJvdmUpLiAqLworCisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgLyogSW4gdGhlIGNvbXBpbGUgcGhhc2UsIGNoZWNrIHdoZXRoZXIgdGhlIGdyb3VwIGNvdWxkIG1hdGNoIGFuIGVtcHR5CisgICAgICAgICAgc3RyaW5nLiAqLworCisgICAgICAgICAgaWYgKGxlbmd0aHB0ciA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgUENSRTJfVUNIQVIgKnNjb2RlID0gYnJhY29kZTsKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IGNvdW50ID0gMDsKKyAgICAgICAgICAgICAgaW50IHJjID0gY291bGRfYmVfZW1wdHlfYnJhbmNoKHNjb2RlLCBrZXRjb2RlLCB1dGYsIGNiLCBGQUxTRSwKKyAgICAgICAgICAgICAgICBOVUxMLCAmY291bnQpOworICAgICAgICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSODY7CisgICAgICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAocmMgPiAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqYnJhY29kZSArPSBPUF9TQlJBIC0gT1BfQlJBOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgc2NvZGUgKz0gR0VUKHNjb2RlLCAxKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKCpzY29kZSA9PSBPUF9BTFQpOworCisgICAgICAgICAgICAvKiBBIGNvbmRpdGlvbmFsIGdyb3VwIHdpdGggb25seSBvbmUgYnJhbmNoIGhhcyBhbiBpbXBsaWNpdCBlbXB0eQorICAgICAgICAgICAgYWx0ZXJuYXRpdmUgYnJhbmNoLiAqLworCisgICAgICAgICAgICBpZiAoKmJyYWNvZGUgPT0gT1BfQ09ORCAmJiBicmFjb2RlW0dFVChicmFjb2RlLDEpXSAhPSBPUF9BTFQpCisgICAgICAgICAgICAgICpicmFjb2RlID0gT1BfU0NPTkQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBIYW5kbGUgcG9zc2Vzc2l2ZSBxdWFudGlmaWVycy4gKi8KKworICAgICAgICAgIGlmIChwb3NzZXNzaXZlX3F1YW50aWZpZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAvKiBGb3IgQ09ORCBicmFja2V0cywgd2Ugd3JhcCB0aGUgd2hvbGUgdGhpbmcgaW4gYSBwb3NzZXNzaXZlbHkKKyAgICAgICAgICAgIHJlcGVhdGVkIG5vbi1jYXB0dXJpbmcgYnJhY2tldCwgYmVjYXVzZSB3ZSBoYXZlIG5vdCBpbnZlbnRlZCBQT1MKKyAgICAgICAgICAgIHZlcnNpb25zIG9mIHRoZSBDT05EIG9wY29kZXMuICovCisKKyAgICAgICAgICAgIGlmICgqYnJhY29kZSA9PSBPUF9DT05EIHx8ICpicmFjb2RlID09IE9QX1NDT05EKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGludCBubGVuID0gKGludCkoY29kZSAtIGJyYWNvZGUpOworICAgICAgICAgICAgICBtZW1tb3ZlKGJyYWNvZGUgKyAxICsgTElOS19TSVpFLCBicmFjb2RlLCBDVTJCWVRFUyhubGVuKSk7CisgICAgICAgICAgICAgIGNvZGUgKz0gMSArIExJTktfU0laRTsKKyAgICAgICAgICAgICAgbmxlbiArPSAxICsgTElOS19TSVpFOworICAgICAgICAgICAgICAqYnJhY29kZSA9ICgqYnJhY29kZSA9PSBPUF9DT05EKT8gT1BfQlJBUE9TIDogT1BfU0JSQVBPUzsKKyAgICAgICAgICAgICAgKmNvZGUrKyA9IE9QX0tFVFJQT1M7CisgICAgICAgICAgICAgIFBVVElOQyhjb2RlLCAwLCBubGVuKTsKKyAgICAgICAgICAgICAgUFVUKGJyYWNvZGUsIDEsIG5sZW4pOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIEZvciBub24tQ09ORCBicmFja2V0cywgd2UgbW9kaWZ5IHRoZSBCUkEgY29kZSBhbmQgdXNlIEtFVFJQT1MuICovCisKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAqYnJhY29kZSArPSAxOyAgICAgICAgICAgICAgLyogU3dpdGNoIHRvIHh4eFBPUyBvcGNvZGVzICovCisgICAgICAgICAgICAgICprZXRjb2RlID0gT1BfS0VUUlBPUzsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBJZiB0aGUgbWluaW11bSBpcyB6ZXJvLCBtYXJrIGl0IGFzIHBvc3Nlc3NpdmUsIHRoZW4gdW5zZXQgdGhlCisgICAgICAgICAgICBwb3NzZXNzaXZlIGZsYWcgd2hlbiB0aGUgbWluaW11bSBpcyAwIG9yIDEuICovCisKKyAgICAgICAgICAgIGlmIChicmF6ZXJvcHRyICE9IE5VTEwpICpicmF6ZXJvcHRyID0gT1BfQlJBUE9TWkVSTzsKKyAgICAgICAgICAgIGlmIChyZXBlYXRfbWluIDwgMikgcG9zc2Vzc2l2ZV9xdWFudGlmaWVyID0gRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBOb24tcG9zc2Vzc2l2ZSBxdWFudGlmaWVyICovCisKKyAgICAgICAgICBlbHNlICprZXRjb2RlID0gT1BfS0VUUk1BWCArIHJlcGVhdF90eXBlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogSWYgcHJldmlvdXMgaXMgT1BfRkFJTCwgaXQgd2FzIGdlbmVyYXRlZCBieSBhbiBlbXB0eSBjbGFzcyBbXQorICAgIChQQ1JFMl9BTExPV19FTVBUWV9DTEFTUyBpcyBzZXQpLiBUaGUgb3RoZXIgd2F5cyBpbiB3aGljaCBPUF9GQUlMIGNhbiBiZQorICAgIGdlbmVyYXRlZCwgdGhhdCBpcyBieSAoKkZBSUwpIG9yICg/ISksIHNldCBwcmV2aW91cyB0byBOVUxMLCB3aGljaCBnaXZlcyBhCisgICAgIm5vdGhpbmcgdG8gcmVwZWF0IiBlcnJvciBhYm92ZS4gV2UgY2FuIGp1c3QgaWdub3JlIHRoZSByZXBlYXQgaW4gZW1wdHkKKyAgICBjbGFzcyBjYXNlLiAqLworCisgICAgZWxzZSBpZiAoKnByZXZpb3VzID09IE9QX0ZBSUwpIGdvdG8gRU5EX1JFUEVBVDsKKworICAgIC8qIEVsc2UgdGhlcmUncyBzb21lIGtpbmQgb2Ygc2hhbWJsZXMgKi8KKworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIxMDsKKyAgICAgIGdvdG8gRkFJTEVEOworICAgICAgfQorCisgICAgLyogSWYgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcgYSByZXBlYXQgaXMgJysnLCBwb3NzZXNzaXZlX3F1YW50aWZpZXIgaXMKKyAgICBUUlVFLiBGb3Igc29tZSBvcGNvZGVzLCB0aGVyZSBhcmUgc3BlY2lhbCBhbHRlcm5hdGl2ZSBvcGNvZGVzIGZvciB0aGlzCisgICAgY2FzZS4gRm9yIGFueXRoaW5nIGVsc2UsIHdlIHdyYXAgdGhlIGVudGlyZSByZXBlYXRlZCBpdGVtIGluc2lkZSBPUF9PTkNFCisgICAgYnJhY2tldHMuIExvZ2ljYWxseSwgdGhlICcrJyBub3RhdGlvbiBpcyBqdXN0IHN5bnRhY3RpYyBzdWdhciwgdGFrZW4gZnJvbQorICAgIFN1bidzIEphdmEgcGFja2FnZSwgYnV0IHRoZSBzcGVjaWFsIG9wY29kZXMgY2FuIG9wdGltaXplIGl0LgorCisgICAgU29tZSAoYnV0IG5vdCBhbGwpIHBvc3Nlc3NpdmVseSByZXBlYXRlZCBzdWJwYXR0ZXJucyBoYXZlIGFscmVhZHkgYmVlbgorICAgIGNvbXBsZXRlbHkgaGFuZGxlZCBpbiB0aGUgY29kZSBqdXN0IGFib3ZlLiBGb3IgdGhlbSwgcG9zc2Vzc2l2ZV9xdWFudGlmaWVyCisgICAgaXMgYWx3YXlzIEZBTFNFIGF0IHRoaXMgc3RhZ2UuIE5vdGUgdGhhdCB0aGUgcmVwZWF0ZWQgaXRlbSBzdGFydHMgYXQKKyAgICB0ZW1wY29kZSwgbm90IGF0IHByZXZpb3VzLCB3aGljaCBtaWdodCBiZSB0aGUgZmlyc3QgcGFydCBvZiBhIHN0cmluZyB3aG9zZQorICAgIChmb3JtZXIpIGxhc3QgY2hhciB3ZSByZXBlYXRlZC4gKi8KKworICAgIGlmIChwb3NzZXNzaXZlX3F1YW50aWZpZXIpCisgICAgICB7CisgICAgICBpbnQgbGVuOworCisgICAgICAvKiBQb3NzZXNzaWZ5aW5nIGFuIEVYQUNUIHF1YW50aWZpZXIgaGFzIG5vIGVmZmVjdCwgc28gd2UgY2FuIGlnbm9yZSBpdC4KKyAgICAgIEhvd2V2ZXIsIFFVRVJZLCBTVEFSLCBvciBVUFRPIG1heSBmb2xsb3cgKGZvciBxdWFudGlmaWVycyBzdWNoIGFzIHs1LDZ9LAorICAgICAgezUsfSwgb3IgezUsMTB9KS4gV2Ugc2tpcCBvdmVyIGFuIEVYQUNUIGl0ZW07IGlmIHRoZSBsZW5ndGggb2Ygd2hhdAorICAgICAgcmVtYWlucyBpcyBncmVhdGVyIHRoYW4gemVybywgdGhlcmUncyBhIGZ1cnRoZXIgb3Bjb2RlIHRoYXQgY2FuIGJlCisgICAgICBoYW5kbGVkLiBJZiBub3QsIGRvIG5vdGhpbmcsIGxlYXZpbmcgdGhlIEVYQUNUIGFsb25lLiAqLworCisgICAgICBzd2l0Y2goKnRlbXBjb2RlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1BfVFlQRUVYQUNUOgorICAgICAgICB0ZW1wY29kZSArPSBQUklWKE9QX2xlbmd0aHMpWyp0ZW1wY29kZV0gKworICAgICAgICAgICgodGVtcGNvZGVbMSArIElNTTJfU0laRV0gPT0gT1BfUFJPUAorICAgICAgICAgIHx8IHRlbXBjb2RlWzEgKyBJTU0yX1NJWkVdID09IE9QX05PVFBST1ApPyAyIDogMCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIENIQVIgb3Bjb2RlcyBhcmUgdXNlZCBmb3IgZXhhY3RzIHdob3NlIGNvdW50IGlzIDEuICovCisKKyAgICAgICAgY2FzZSBPUF9DSEFSOgorICAgICAgICBjYXNlIE9QX0NIQVJJOgorICAgICAgICBjYXNlIE9QX05PVDoKKyAgICAgICAgY2FzZSBPUF9OT1RJOgorICAgICAgICBjYXNlIE9QX0VYQUNUOgorICAgICAgICBjYXNlIE9QX0VYQUNUSToKKyAgICAgICAgY2FzZSBPUF9OT1RFWEFDVDoKKyAgICAgICAgY2FzZSBPUF9OT1RFWEFDVEk6CisgICAgICAgIHRlbXBjb2RlICs9IFBSSVYoT1BfbGVuZ3RocylbKnRlbXBjb2RlXTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgaWYgKHV0ZiAmJiBIQVNfRVhUUkFMRU4odGVtcGNvZGVbLTFdKSkKKyAgICAgICAgICB0ZW1wY29kZSArPSBHRVRfRVhUUkFMRU4odGVtcGNvZGVbLTFdKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKworICAgICAgICAvKiBGb3IgdGhlIGNsYXNzIG9wY29kZXMsIHRoZSByZXBlYXQgb3BlcmF0b3IgYXBwZWFycyBhdCB0aGUgZW5kOworICAgICAgICBhZGp1c3QgdGVtcGNvZGUgdG8gcG9pbnQgdG8gaXQuICovCisKKyAgICAgICAgY2FzZSBPUF9DTEFTUzoKKyAgICAgICAgY2FzZSBPUF9OQ0xBU1M6CisgICAgICAgIHRlbXBjb2RlICs9IDEgKyAzMi9zaXplb2YoUENSRTJfVUNIQVIpOworICAgICAgICBicmVhazsKKworI2lmZGVmIFNVUFBPUlRfV0lERV9DSEFSUworICAgICAgICBjYXNlIE9QX1hDTEFTUzoKKyAgICAgICAgdGVtcGNvZGUgKz0gR0VUKHRlbXBjb2RlLCAxKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAvKiBJZiB0ZW1wY29kZSBpcyBlcXVhbCB0byBjb2RlICh3aGljaCBwb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUgcmVwZWF0ZWQKKyAgICAgIGl0ZW0pLCBpdCBtZWFucyB3ZSBoYXZlIHNraXBwZWQgYW4gRVhBQ1QgaXRlbSBidXQgdGhlcmUgaXMgbm8gZm9sbG93aW5nCisgICAgICBRVUVSWSwgU1RBUiwgb3IgVVBUTzsgdGhlIHZhbHVlIG9mIGxlbiB3aWxsIGJlIDAsIGFuZCB3ZSBkbyBub3RoaW5nLiBJbgorICAgICAgYWxsIG90aGVyIGNhc2VzLCB0ZW1wY29kZSB3aWxsIGJlIHBvaW50aW5nIHRvIHRoZSByZXBlYXQgb3Bjb2RlLCBhbmQgd2lsbAorICAgICAgYmUgbGVzcyB0aGFuIGNvZGUsIHNvIHRoZSB2YWx1ZSBvZiBsZW4gd2lsbCBiZSBncmVhdGVyIHRoYW4gMC4gKi8KKworICAgICAgbGVuID0gKGludCkoY29kZSAtIHRlbXBjb2RlKTsKKyAgICAgIGlmIChsZW4gPiAwKQorICAgICAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCByZXBjb2RlID0gKnRlbXBjb2RlOworCisgICAgICAgIC8qIFRoZXJlIGlzIGEgdGFibGUgZm9yIHBvc3Nlc3NpZnlpbmcgb3Bjb2RlcywgYWxsIG9mIHdoaWNoIGFyZSBsZXNzCisgICAgICAgIHRoYW4gT1BfQ0FMTE9VVC4gQSB6ZXJvIGVudHJ5IG1lYW5zIHRoZXJlIGlzIG5vIHBvc3Nlc3NpZmllZCB2ZXJzaW9uLgorICAgICAgICAqLworCisgICAgICAgIGlmIChyZXBjb2RlIDwgT1BfQ0FMTE9VVCAmJiBvcGNvZGVfcG9zc2Vzc2lmeVtyZXBjb2RlXSA+IDApCisgICAgICAgICAgKnRlbXBjb2RlID0gb3Bjb2RlX3Bvc3Nlc3NpZnlbcmVwY29kZV07CisKKyAgICAgICAgLyogRm9yIG9wY29kZSB3aXRob3V0IGEgc3BlY2lhbCBwb3NzZXNzaWZpZWQgdmVyc2lvbiwgd3JhcCB0aGUgaXRlbSBpbgorICAgICAgICBPTkNFIGJyYWNrZXRzLiAqLworCisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgbWVtbW92ZSh0ZW1wY29kZSArIDEgKyBMSU5LX1NJWkUsIHRlbXBjb2RlLCBDVTJCWVRFUyhsZW4pKTsKKyAgICAgICAgICBjb2RlICs9IDEgKyBMSU5LX1NJWkU7CisgICAgICAgICAgbGVuICs9IDEgKyBMSU5LX1NJWkU7CisgICAgICAgICAgdGVtcGNvZGVbMF0gPSBPUF9PTkNFOworICAgICAgICAgICpjb2RlKysgPSBPUF9LRVQ7CisgICAgICAgICAgUFVUSU5DKGNvZGUsIDAsIGxlbik7CisgICAgICAgICAgUFVUKHRlbXBjb2RlLCAxLCBsZW4pOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogSW4gYWxsIGNhc2Ugd2Ugbm8gbG9uZ2VyIGhhdmUgYSBwcmV2aW91cyBpdGVtLiBXZSBhbHNvIHNldCB0aGUKKyAgICAiZm9sbG93cyB2YXJ5aW5nIHN0cmluZyIgZmxhZyBmb3Igc3Vic2VxdWVudGx5IGVuY291bnRlcmVkIHJlcWN1cyBpZgorICAgIGl0IGlzbid0IGFscmVhZHkgc2V0IGFuZCB3ZSBoYXZlIGp1c3QgcGFzc2VkIGEgdmFyeWluZyBsZW5ndGggaXRlbS4gKi8KKworICAgIEVORF9SRVBFQVQ6CisgICAgcHJldmlvdXMgPSBOVUxMOworICAgIGNiLT5yZXFfdmFyeW9wdCB8PSByZXF2YXJ5OworICAgIGJyZWFrOworCisKKyAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyAgICAvKiBTdGFydCBvZiBuZXN0ZWQgcGFyZW50aGVzaXplZCBzdWItZXhwcmVzc2lvbiwgb3IgbG9va2FoZWFkIG9yIGxvb2tiZWhpbmQKKyAgICBvciBvcHRpb24gc2V0dGluZyBvciBjb25kaXRpb24gb3IgYWxsIHRoZSBvdGhlciBleHRlbmRlZCBwYXJlbnRoZXNpcyBmb3Jtcy4KKyAgICBXZSBtdXN0IHNhdmUgdGhlIGN1cnJlbnQgaGlnaC13YXRlci1tYXJrIGZvciB0aGUgZm9yd2FyZCByZWZlcmVuY2UgbGlzdCBzbworICAgIHRoYXQgd2Uga25vdyB3aGVyZSB0aGV5IHN0YXJ0IGZvciB0aGlzIGdyb3VwLiBIb3dldmVyLCBiZWNhdXNlIHRoZSBsaXN0IG1heQorICAgIGJlIGV4dGVuZGVkIHdoZW4gdGhlcmUgYXJlIHZlcnkgbWFueSBmb3J3YXJkIHJlZmVyZW5jZXMgKHVzdWFsbHkgdGhlIHJlc3VsdAorICAgIG9mIGEgcmVwbGljYXRlZCBpbm5lciBncm91cCksIHdlIG11c3QgdXNlIGFuIG9mZnNldCByYXRoZXIgdGhhbiBhbiBhYnNvbHV0ZQorICAgIGFkZHJlc3MuIE5vdGUgdGhhdCAoPyMgY29tbWVudHMgYXJlIGRlYWx0IHdpdGggYXQgdGhlIHRvcCBvZiB0aGUgbG9vcDsKKyAgICB0aGV5IGRvIG5vdCBnZXQgdGhpcyBmYXIuICovCisKKyAgICBjYXNlIENIQVJfTEVGVF9QQVJFTlRIRVNJUzoKKyAgICBwdHIrKzsKKworICAgIC8qIERlYWwgd2l0aCB2YXJpb3VzICJ2ZXJicyIgdGhhdCBjYW4gYmUgaW50cm9kdWNlZCBieSAnKicuICovCisKKyAgICBpZiAocHRyWzBdID09IENIQVJfQVNURVJJU0sgJiYgKHB0clsxXSA9PSAnOicKKyAgICAgICAgIHx8IChNQVhfMjU1KHB0clsxXSkgJiYgKChjYi0+Y3R5cGVzW3B0clsxXV0gJiBjdHlwZV9sZXR0ZXIpICE9IDApKSkpCisgICAgICB7CisgICAgICBpbnQgaSwgbmFtZWxlbjsKKyAgICAgIGludCBhcmdsZW4gPSAwOworICAgICAgY29uc3QgY2hhciAqdm4gPSB2ZXJibmFtZXM7CisgICAgICBQQ1JFMl9TUFRSIG5hbWUgPSBwdHIgKyAxOworICAgICAgUENSRTJfU1BUUiBhcmcgPSBOVUxMOworICAgICAgcHJldmlvdXMgPSBOVUxMOworICAgICAgcHRyKys7CisKKyAgICAgIC8qIEluY3JlbWVudCBwdHIsIHNldCBuYW1lbGVuLCBjaGVjayBsZW5ndGggKi8KKworICAgICAgUkVBRF9OQU1FKGN0eXBlX2xldHRlciwgRVJSNjAsICplcnJvcmNvZGVwdHIpOworCisgICAgICAvKiBJdCBhcHBlYXJzIHRoYXQgUGVybCBhbGxvd3MgYW55IGNoYXJhY3RlcnMgd2hhdHNvZXZlciwgb3RoZXIgdGhhbgorICAgICAgYSBjbG9zaW5nIHBhcmVudGhlc2lzLCB0byBhcHBlYXIgaW4gYXJndW1lbnRzLCBzbyB3ZSBubyBsb25nZXIgaW5zaXN0IG9uCisgICAgICBsZXR0ZXJzLCBkaWdpdHMsIGFuZCB1bmRlcnNjb3Jlcy4gUGVybCBkb2VzIG5vdCwgaG93ZXZlciwgZG8gYW55CisgICAgICBpbnRlcnByZXRhdGlvbiB3aXRoaW4gYXJndW1lbnRzLCBhbmQgaGFzIG5vIG1lYW5zIG9mIGluY2x1ZGluZyBhIGNsb3NpbmcKKyAgICAgIHBhcmVudGhlc2lzLiBQQ1JFIHN1cHBvcnRzIGVzY2FwZSBwcm9jZXNzaW5nIGJ1dCBvbmx5IHdoZW4gaXQgaXMKKyAgICAgIHJlcXVlc3RlZCBieSBhbiBvcHRpb24uIE5vdGUgdGhhdCBjaGVja19lc2NhcGUoKSB3aWxsIG5vdCByZXR1cm4gdmFsdWVzCisgICAgICBncmVhdGVyIHRoYW4gdGhlIGNvZGUgdW5pdCBtYXhpbXVtIHdoZW4gbm90IGluIFVURiBtb2RlLiAqLworCisgICAgICBpZiAoKnB0ciA9PSBDSEFSX0NPTE9OKQorICAgICAgICB7CisgICAgICAgIGFyZyA9ICsrcHRyOworCisgICAgICAgIGlmICgob3B0aW9ucyAmIFBDUkUyX0FMVF9WRVJCTkFNRVMpID09IDApCisgICAgICAgICAgeworICAgICAgICAgIGFyZ2xlbiA9IDA7CisgICAgICAgICAgd2hpbGUgKHB0ciA8IGNiLT5lbmRfcGF0dGVybiAmJiAqcHRyICE9IENIQVJfUklHSFRfUEFSRU5USEVTSVMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBwdHIrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGxlbmd0aCBhcyB3ZSBnbyAqLworICAgICAgICAgICAgYXJnbGVuKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBhbG9uZywgdG8gYXZvaWQgdGhlICAgKi8KKyAgICAgICAgICAgIGlmICgodW5zaWduZWQgaW50KWFyZ2xlbiA+IE1BWF9NQVJLKSAgLyogcG9zc2liaWxpdHkgb2Ygb3ZlcmZsb3cuICovCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjc2OworICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAvKiBUaGUgbGVuZ3RoIGNoZWNrIGlzIGluIHByb2Nlc3NfdmVyYl9uYW1lcygpICovCisgICAgICAgICAgYXJnbGVuID0gcHJvY2Vzc192ZXJiX25hbWUoJnB0ciwgTlVMTCwgZXJyb3Jjb2RlcHRyLCBvcHRpb25zLAorICAgICAgICAgICAgdXRmLCBjYik7CisgICAgICAgICAgaWYgKGFyZ2xlbiA8IDApIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBpZiAoKnB0ciAhPSBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTKQorICAgICAgICB7CisgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI2MDsKKyAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgIH0KKworICAgICAgLyogU2NhbiB0aGUgdGFibGUgb2YgdmVyYiBuYW1lcyAqLworCisgICAgICBmb3IgKGkgPSAwOyBpIDwgdmVyYmNvdW50OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgaWYgKG5hbWVsZW4gPT0gdmVyYnNbaV0ubGVuICYmCisgICAgICAgICAgICBQUklWKHN0cm5jbXBfYzgpKG5hbWUsIHZuLCBuYW1lbGVuKSA9PSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICBpbnQgc2V0dmVyYjsKKworICAgICAgICAgIC8qIENoZWNrIGZvciBvcGVuIGNhcHR1cmVzIGJlZm9yZSBBQ0NFUFQgYW5kIGNvbnZlcnQgaXQgdG8KKyAgICAgICAgICBBU1NFUlRfQUNDRVBUIGlmIGluIGFuIGFzc2VydGlvbi4gKi8KKworICAgICAgICAgIGlmICh2ZXJic1tpXS5vcCA9PSBPUF9BQ0NFUFQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBvcGVuX2NhcGl0ZW0gKm9jOworICAgICAgICAgICAgaWYgKGFyZ2xlbiAhPSAwKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI1OTsKKyAgICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNiLT5oYWRfYWNjZXB0ID0gVFJVRTsKKyAgICAgICAgICAgIGZvciAob2MgPSBjYi0+b3Blbl9jYXBzOyBvYyAhPSBOVUxMOyBvYyA9IG9jLT5uZXh0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICpjb2RlKysgPSBPUF9DTE9TRTsKKyAgICAgICAgICAgICAgUFVUMklOQyhjb2RlLCAwLCBvYy0+bnVtYmVyKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0dmVyYiA9ICpjb2RlKysgPQorICAgICAgICAgICAgICAoY2ItPmFzc2VydF9kZXB0aCA+IDApPyBPUF9BU1NFUlRfQUNDRVBUIDogT1BfQUNDRVBUOworCisgICAgICAgICAgICAvKiBEbyBub3Qgc2V0IGZpcnN0Y3UgYWZ0ZXIgKkFDQ0VQVCAqLworICAgICAgICAgICAgaWYgKGZpcnN0Y3VmbGFncyA9PSBSRVFfVU5TRVQpIGZpcnN0Y3VmbGFncyA9IFJFUV9OT05FOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogSGFuZGxlIG90aGVyIGNhc2VzIHdpdGgvd2l0aG91dCBhbiBhcmd1bWVudCAqLworCisgICAgICAgICAgZWxzZSBpZiAoYXJnbGVuID09IDApICAgIC8qIFRoZXJlIGlzIG5vIGFyZ3VtZW50ICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAodmVyYnNbaV0ub3AgPCAwKSAgIC8qIEFyZ3VtZW50IGlzIG1hbmRhdG9yeSAqLworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI2NjsKKyAgICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldHZlcmIgPSAqY29kZSsrID0gdmVyYnNbaV0ub3A7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgLyogQW4gYXJndW1lbnQgaXMgcHJlc2VudCAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHZlcmJzW2ldLm9wX2FyZyA8IDApICAvKiBBcmd1bWVudCBpcyBmb3JiaWRkZW4gKi8KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSNTk7CisgICAgICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBzZXR2ZXJiID0gKmNvZGUrKyA9IHZlcmJzW2ldLm9wX2FyZzsKKworICAgICAgICAgICAgLyogQXJndW1lbnRzIGNhbiBiZSB2ZXJ5IGxvbmcsIGVzcGVjaWFsbHkgaW4gMTYtIGFuZCAzMi1iaXQgbW9kZXMsCisgICAgICAgICAgICBhbmQgY2FuIG92ZXJmbG93IHRoZSB3b3Jrc3BhY2UgaW4gdGhlIGZpcnN0IHBhc3MuIEluc3RlYWQgb2YKKyAgICAgICAgICAgIHB1dHRpbmcgdGhlIGFyZ3VtZW50IGludG8gbWVtb3J5LCB3ZSBqdXN0IHVwZGF0ZSB0aGUgbGVuZ3RoIGNvdW50ZXIKKyAgICAgICAgICAgIGFuZCBzZXQgdXAgYW4gZW1wdHkgYXJndW1lbnQuICovCisKKyAgICAgICAgICAgIGlmIChsZW5ndGhwdHIgIT0gTlVMTCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAqbGVuZ3RocHRyICs9IGFyZ2xlbjsKKyAgICAgICAgICAgICAgKmNvZGUrKyA9IDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAqY29kZSsrID0gYXJnbGVuOworICAgICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiBQQ1JFMl9BTFRfVkVSQk5BTUVTKSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBQQ1JFMl9VQ0hBUiAqbWVtY29kZSA9IGNvZGU7ICAvKiBjb2RlIGlzICJyZWdpc3RlciIgKi8KKyAgICAgICAgICAgICAgICAodm9pZClwcm9jZXNzX3ZlcmJfbmFtZSgmYXJnLCAmbWVtY29kZSwgZXJyb3Jjb2RlcHRyLCBvcHRpb25zLAorICAgICAgICAgICAgICAgICAgdXRmLCBjYik7CisgICAgICAgICAgICAgICAgY29kZSA9IG1lbWNvZGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlICAgLyogTm8gYXJndW1lbnQgcHJvY2Vzc2luZyAqLworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoY29kZSwgYXJnLCBDVTJCWVRFUyhhcmdsZW4pKTsKKyAgICAgICAgICAgICAgICBjb2RlICs9IGFyZ2xlbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKmNvZGUrKyA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBzd2l0Y2ggKHNldHZlcmIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE9QX1RIRU46CisgICAgICAgICAgICBjYXNlIE9QX1RIRU5fQVJHOgorICAgICAgICAgICAgY2ItPmV4dGVybmFsX2ZsYWdzIHw9IFBDUkUyX0hBU1RIRU47CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPUF9QUlVORToKKyAgICAgICAgICAgIGNhc2UgT1BfUFJVTkVfQVJHOgorICAgICAgICAgICAgY2FzZSBPUF9TS0lQOgorICAgICAgICAgICAgY2FzZSBPUF9TS0lQX0FSRzoKKyAgICAgICAgICAgIGNiLT5oYWRfcHJ1bmVvcnNraXAgPSBUUlVFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBicmVhazsgIC8qIEZvdW5kIHZlcmIsIGV4aXQgbG9vcCAqLworICAgICAgICAgIH0KKworICAgICAgICB2biArPSB2ZXJic1tpXS5sZW4gKyAxOworICAgICAgICB9CisKKyAgICAgIGlmIChpIDwgdmVyYmNvdW50KSBjb250aW51ZTsgICAgLyogU3VjY2Vzc2Z1bGx5IGhhbmRsZWQgYSB2ZXJiICovCisgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSNjA7ICAgICAgICAgIC8qIFZlcmIgbm90IHJlY29nbml6ZWQgKi8KKyAgICAgIGdvdG8gRkFJTEVEOworICAgICAgfQorCisgICAgLyogSW5pdGlhbGl6YXRpb24gZm9yICJyZWFsIiBwYXJlbnRoZXNlcyAqLworCisgICAgbmV3b3B0aW9ucyA9IG9wdGlvbnM7CisgICAgc2tpcHVuaXRzID0gMDsKKyAgICBicmF2YWx1ZSA9IE9QX0NCUkE7CisgICAgcmVzZXRfYnJhY291bnQgPSBGQUxTRTsKKworICAgIC8qIERlYWwgd2l0aCB0aGUgZXh0ZW5kZWQgcGFyZW50aGVzZXM7IGFsbCBhcmUgaW50cm9kdWNlZCBieSAnPycsIGFuZCB0aGUKKyAgICBhcHBlYXJhbmNlIG9mIGFueSBvZiB0aGVtIG1lYW5zIHRoYXQgdGhpcyBpcyBub3QgYSBjYXB0dXJpbmcgZ3JvdXAuICovCisKKyAgICBpZiAoKnB0ciA9PSBDSEFSX1FVRVNUSU9OX01BUkspCisgICAgICB7CisgICAgICBpbnQgaSwgY291bnQ7CisgICAgICBpbnQgbmFtZWxlbjsgICAgICAgICAgICAgICAgLyogTXVzdCBiZSBzaWduZWQgKi8KKyAgICAgIHVpbnQzMl90IGluZGV4OworICAgICAgdWludDMyX3Qgc2V0LCB1bnNldCwgKm9wdHNldDsKKyAgICAgIG5hbWVkX2dyb3VwICpuZzsKKyAgICAgIFBDUkUyX1NQVFIgbmFtZTsKKyAgICAgIFBDUkUyX1VDSEFSICpzbG90OworCisgICAgICBzd2l0Y2ggKCooKytwdHIpKQorICAgICAgICB7CisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgICAgICBjYXNlIENIQVJfVkVSVElDQUxfTElORTogIC8qIFJlc2V0IGNhcHR1cmUgY291bnQgZm9yIGVhY2ggYnJhbmNoICovCisgICAgICAgIHJlc2V0X2JyYWNvdW50ID0gVFJVRTsKKyAgICAgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgICAgIGNhc2UgQ0hBUl9DT0xPTjogICAgICAgICAgLyogTm9uLWNhcHR1cmluZyBicmFja2V0ICovCisgICAgICAgIGJyYXZhbHVlID0gT1BfQlJBOworICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgICAgIGNhc2UgQ0hBUl9MRUZUX1BBUkVOVEhFU0lTOgorICAgICAgICBicmF2YWx1ZSA9IE9QX0NPTkQ7ICAgICAgIC8qIENvbmRpdGlvbmFsIGdyb3VwICovCisgICAgICAgIHRlbXBwdHIgPSBwdHI7CisKKyAgICAgICAgLyogQSBjb25kaXRpb24gY2FuIGJlIGFuIGFzc2VydGlvbiwgYSBudW1iZXIgKHJlZmVycmluZyB0byBhIG51bWJlcmVkCisgICAgICAgIGdyb3VwJ3MgaGF2aW5nIGJlZW4gc2V0KSwgYSBuYW1lIChyZWZlcnJpbmcgdG8gYSBuYW1lZCBncm91cCksIG9yICdSJywKKyAgICAgICAgcmVmZXJyaW5nIHRvIHJlY3Vyc2lvbi4gUjxkaWdpdHM+IGFuZCBSJm5hbWUgYXJlIGFsc28gcGVybWl0dGVkIGZvcgorICAgICAgICByZWN1cnNpb24gdGVzdHMuCisKKyAgICAgICAgVGhlcmUgYXJlIHdheXMgb2YgdGVzdGluZyBhIG5hbWVkIGdyb3VwOiAoPyhuYW1lKSkgaXMgdXNlZCBieSBQeXRob247CisgICAgICAgIFBlcmwgNS4xMCBvbndhcmRzIHVzZXMgKD8oPG5hbWU+KSBvciAoPygnbmFtZScpKS4KKworICAgICAgICBUaGVyZSBpcyBvbmUgdW5mb3J0dW5hdGUgYW1iaWd1aXR5LCBjYXVzZWQgYnkgaGlzdG9yeS4gJ1InIGNhbiBiZSB0aGUKKyAgICAgICAgcmVjdXJzaXZlIHRoaW5nIG9yIHRoZSBuYW1lICdSJyAoYW5kIHNpbWlsYXJseSBmb3IgJ1InIGZvbGxvd2VkIGJ5CisgICAgICAgIGRpZ2l0cykuIFdlIGxvb2sgZm9yIGEgbmFtZSBmaXJzdDsgaWYgbm90IGZvdW5kLCB3ZSB0cnkgdGhlIG90aGVyIGNhc2UuCisKKyAgICAgICAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhdXRvLWNhbGxvdXRzLCB3ZSBhbGxvdyBhIGNhbGxvdXQgdG8gYmUKKyAgICAgICAgc3BlY2lmaWVkIGJlZm9yZSBhIGNvbmRpdGlvbiB0aGF0IGlzIGFuIGFzc2VydGlvbi4gRmlyc3QsIGNoZWNrIGZvciB0aGUKKyAgICAgICAgc3ludGF4IG9mIGEgY2FsbG91dDsgaWYgZm91bmQsIGFkanVzdCB0aGUgdGVtcG9yYXJ5IHBvaW50ZXIgdGhhdCBpcworICAgICAgICB1c2VkIHRvIGNoZWNrIGZvciBhbiBhc3NlcnRpb24gY29uZGl0aW9uLiBUaGF0J3MgYWxsIHRoYXQgaXMgbmVlZGVkISAqLworCisgICAgICAgIGlmIChwdHJbMV0gPT0gQ0hBUl9RVUVTVElPTl9NQVJLICYmIHB0clsyXSA9PSBDSEFSX0MpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChJU19ESUdJVChwdHJbM10pIHx8IHB0clszXSA9PSBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgZm9yIChpID0gMzs7IGkrKykgaWYgKCFJU19ESUdJVChwdHJbaV0pKSBicmVhazsKKyAgICAgICAgICAgIGlmIChwdHJbaV0gPT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUykKKyAgICAgICAgICAgICAgdGVtcHB0ciArPSBpICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICB1aW50MzJfdCBkZWxpbWl0ZXIgPSAwOworICAgICAgICAgICAgZm9yIChpID0gMDsgUFJJVihjYWxsb3V0X3N0YXJ0X2RlbGltcylbaV0gIT0gMDsgaSsrKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChwdHJbM10gPT0gUFJJVihjYWxsb3V0X3N0YXJ0X2RlbGltcylbaV0pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRlbGltaXRlciA9IFBSSVYoY2FsbG91dF9lbmRfZGVsaW1zKVtpXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkZWxpbWl0ZXIgIT0gMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBmb3IgKGkgPSA0OyBwdHIgKyBpIDwgY2ItPmVuZF9wYXR0ZXJuOyBpKyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChwdHJbaV0gPT0gZGVsaW1pdGVyKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKHB0cltpKzFdID09IGRlbGltaXRlcikgaSsrOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwdHJbaSsxXSA9PSBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTKSB0ZW1wcHRyICs9IGkgKyAyOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogdGVtcHB0ciBzaG91bGQgbm93IGJlIHBvaW50aW5nIHRvIHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzIG9mIHRoZQorICAgICAgICAgIGFzc2VydGlvbiBjb25kaXRpb24uICovCisKKyAgICAgICAgICBpZiAoKnRlbXBwdHIgIT0gQ0hBUl9MRUZUX1BBUkVOVEhFU0lTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjI4OworICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgIC8qIEZvciBjb25kaXRpb25zIHRoYXQgYXJlIGFzc2VydGlvbnMsIGNoZWNrIHRoZSBzeW50YXgsIGFuZCB0aGVuIGV4aXQKKyAgICAgICAgdGhlIHN3aXRjaC4gVGhpcyB3aWxsIHRha2UgY29udHJvbCBkb3duIHRvIHdoZXJlIGJyYWNrZXRlZCBncm91cHMKKyAgICAgICAgYXJlIHByb2Nlc3NlZC4gVGhlIGFzc2VydGlvbiB3aWxsIGJlIGhhbmRsZWQgYXMgcGFydCBvZiB0aGUgZ3JvdXAsCisgICAgICAgIGJ1dCB3ZSBuZWVkIHRvIGlkZW50aWZ5IHRoaXMgY2FzZSBiZWNhdXNlIHRoZSBjb25kaXRpb25hbCBhc3NlcnRpb24gbWF5CisgICAgICAgIG5vdCBiZSBxdWFudGlmaWVyLiAqLworCisgICAgICAgIGlmICh0ZW1wcHRyWzFdID09IENIQVJfUVVFU1RJT05fTUFSSyAmJgorICAgICAgICAgICAgICAodGVtcHB0clsyXSA9PSBDSEFSX0VRVUFMU19TSUdOIHx8CisgICAgICAgICAgICAgICB0ZW1wcHRyWzJdID09IENIQVJfRVhDTEFNQVRJT05fTUFSSyB8fAorICAgICAgICAgICAgICAgICAodGVtcHB0clsyXSA9PSBDSEFSX0xFU1NfVEhBTl9TSUdOICYmCisgICAgICAgICAgICAgICAgICAgKHRlbXBwdHJbM10gPT0gQ0hBUl9FUVVBTFNfU0lHTiB8fAorICAgICAgICAgICAgICAgICAgICB0ZW1wcHRyWzNdID09IENIQVJfRVhDTEFNQVRJT05fTUFSSykpKSkKKyAgICAgICAgICB7CisgICAgICAgICAgY2ItPmlzY29uZGFzc2VydCA9IFRSVUU7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgIC8qIE90aGVyIGNvbmRpdGlvbnMgdXNlIE9QX0NSRUYvT1BfRE5DUkVGL09QX1JSRUYvT1BfRE5SUkVGLCBhbmQgYWxsCisgICAgICAgIG5lZWQgdG8gc2tpcCBhdCBsZWFzdCAxK0lNTTJfU0laRSBieXRlcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGdyb3VwLiAqLworCisgICAgICAgIGNvZGVbMStMSU5LX1NJWkVdID0gT1BfQ1JFRjsKKyAgICAgICAgc2tpcHVuaXRzID0gMStJTU0yX1NJWkU7CisgICAgICAgIHJlZnNpZ24gPSAtMTsgICAgIC8qID0+IG5vdCBhIG51bWJlciAqLworICAgICAgICBuYW1lbGVuID0gLTE7ICAgICAvKiA9PiBub3QgYSBuYW1lOyBtdXN0IHNldCB0byBhdm9pZCB3YXJuaW5nICovCisgICAgICAgIG5hbWUgPSBOVUxMOyAgICAgIC8qIEFsd2F5cyBzZXQgdG8gYXZvaWQgd2FybmluZyAqLworICAgICAgICByZWNubyA9IDA7ICAgICAgICAvKiBBbHdheXMgc2V0IHRvIGF2b2lkIHdhcm5pbmcgKi8KKworICAgICAgICAvKiBQb2ludCBhdCBjaGFyYWN0ZXIgYWZ0ZXIgKD8oICovCisKKyAgICAgICAgcHRyKys7CisKKyAgICAgICAgLyogQ2hlY2sgZm9yICg/KFZFUlNJT05bPl09bi5tKSwgd2hpY2ggaXMgYSBmYWNpbGl0eSB3aGVyZWJ5IGluZGlyZWN0CisgICAgICAgIHVzZXJzIG9mIFBDUkUyIHZpYSBhbiBhcHBsaWNhdGlvbiBjYW4gZGlzY292ZXIgd2hpY2ggcmVsZWFzZSBvZiBQQ1JFMgorICAgICAgICBpcyBiZWluZyB1c2VkLiAqLworCisgICAgICAgIGlmIChQUklWKHN0cm5jbXBfYzgpKHB0ciwgU1RSSU5HX1ZFUlNJT04sIDcpID09IDAgJiYKKyAgICAgICAgICAgIHB0cls3XSAhPSBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTKQorICAgICAgICAgIHsKKyAgICAgICAgICBCT09MIGdlID0gRkFMU0U7CisgICAgICAgICAgaW50IG1ham9yID0gMDsKKyAgICAgICAgICBpbnQgbWlub3IgPSAwOworCisgICAgICAgICAgcHRyICs9IDc7CisgICAgICAgICAgaWYgKCpwdHIgPT0gQ0hBUl9HUkVBVEVSX1RIQU5fU0lHTikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGdlID0gVFJVRTsKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogTk9URTogY2Fubm90IHdyaXRlIElTX0RJR0lUKCooKytwdHIpKSBoZXJlIGJlY2F1c2UgSVNfRElHSVQKKyAgICAgICAgICByZWZlcmVuY2VzIGl0cyBhcmd1bWVudCB0d2ljZS4gKi8KKworICAgICAgICAgIGlmICgqcHRyICE9IENIQVJfRVFVQUxTX1NJR04gfHwgKHB0cisrLCAhSVNfRElHSVQoKnB0cikpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjc5OworICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICB3aGlsZSAoSVNfRElHSVQoKnB0cikpIG1ham9yID0gbWFqb3IgKiAxMCArICpwdHIrKyAtICcwJzsKKyAgICAgICAgICBpZiAoKnB0ciA9PSBDSEFSX0RPVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgd2hpbGUgKElTX0RJR0lUKCpwdHIpKSBtaW5vciA9IG1pbm9yICogMTAgKyAqcHRyKysgLSAnMCc7CisgICAgICAgICAgICBpZiAobWlub3IgPCAxMCkgbWlub3IgKj0gMTA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoKnB0ciAhPSBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTIHx8IG1pbm9yID4gOTkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSNzk7CisgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChnZSkKKyAgICAgICAgICAgIGNvZGVbMStMSU5LX1NJWkVdID0gKChQQ1JFMl9NQUpPUiA+IG1ham9yKSB8fAorICAgICAgICAgICAgICAoUENSRTJfTUFKT1IgPT0gbWFqb3IgJiYgUENSRTJfTUlOT1IgPj0gbWlub3IpKT8KKyAgICAgICAgICAgICAgICBPUF9UUlVFIDogT1BfRkFMU0U7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZVsxK0xJTktfU0laRV0gPSAoUENSRTJfTUFKT1IgPT0gbWFqb3IgJiYgUENSRTJfTUlOT1IgPT0gbWlub3IpPworICAgICAgICAgICAgICBPUF9UUlVFIDogT1BfRkFMU0U7CisKKyAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICBza2lwdW5pdHMgPSAxOworICAgICAgICAgIGJyZWFrOyAgLyogRW5kIG9mIGNvbmRpdGlvbiBwcm9jZXNzaW5nICovCisgICAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGZvciBhIHRlc3QgZm9yIHJlY3Vyc2lvbiBpbiBhIG5hbWVkIGdyb3VwLiAqLworCisgICAgICAgIGlmICgqcHRyID09IENIQVJfUiAmJiBwdHJbMV0gPT0gQ0hBUl9BTVBFUlNBTkQpCisgICAgICAgICAgeworICAgICAgICAgIHRlcm1pbmF0b3IgPSAtMTsKKyAgICAgICAgICBwdHIgKz0gMjsKKyAgICAgICAgICBjb2RlWzErTElOS19TSVpFXSA9IE9QX1JSRUY7ICAgIC8qIENoYW5nZSB0aGUgdHlwZSBvZiB0ZXN0ICovCisgICAgICAgICAgfQorCisgICAgICAgIC8qIENoZWNrIGZvciBhIHRlc3QgZm9yIGEgbmFtZWQgZ3JvdXAncyBoYXZpbmcgYmVlbiBzZXQsIHVzaW5nIHRoZSBQZXJsCisgICAgICAgIHN5bnRheCAoPyg8bmFtZT4pIG9yICg/KCduYW1lJyksIGFuZCBhbHNvIGFsbG93IGZvciB0aGUgb3JpZ2luYWwgUENSRQorICAgICAgICBzeW50YXggb2YgKD8obmFtZSkgb3IgZm9yICg/KCtuKSwgKD8oLW4pLCBhbmQganVzdCAoPyhuKS4gKi8KKworICAgICAgICBlbHNlIGlmICgqcHRyID09IENIQVJfTEVTU19USEFOX1NJR04pCisgICAgICAgICAgeworICAgICAgICAgIHRlcm1pbmF0b3IgPSBDSEFSX0dSRUFURVJfVEhBTl9TSUdOOworICAgICAgICAgIHB0cisrOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKnB0ciA9PSBDSEFSX0FQT1NUUk9QSEUpCisgICAgICAgICAgeworICAgICAgICAgIHRlcm1pbmF0b3IgPSBDSEFSX0FQT1NUUk9QSEU7CisgICAgICAgICAgcHRyKys7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgIHRlcm1pbmF0b3IgPSBDSEFSX05VTEw7CisgICAgICAgICAgaWYgKCpwdHIgPT0gQ0hBUl9NSU5VUyB8fCAqcHRyID09IENIQVJfUExVUykgcmVmc2lnbiA9ICpwdHIrKzsKKyAgICAgICAgICAgIGVsc2UgaWYgKElTX0RJR0lUKCpwdHIpKSByZWZzaWduID0gMDsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogSGFuZGxlIGEgbnVtYmVyICovCisKKyAgICAgICAgaWYgKHJlZnNpZ24gPj0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgd2hpbGUgKElTX0RJR0lUKCpwdHIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlY25vID4gSU5UX01BWCAvIDEwIC0gMSkgIC8qIEludGVnZXIgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICB3aGlsZSAoSVNfRElHSVQoKnB0cikpIHB0cisrOworICAgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSNjE7CisgICAgICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICByZWNubyA9IHJlY25vICogMTAgKyAoaW50KSgqcHRyIC0gQ0hBUl8wKTsKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAvKiBPdGhlcndpc2Ugd2UgZXhwZWN0IHRvIHJlYWQgYSBuYW1lOyBhbnl0aGluZyBlbHNlIGlzIGFuIGVycm9yLiBXaGVuCisgICAgICAgIHRoZSByZWZlcmVuY2VkIG5hbWUgaXMgb25lIG9mIGEgbnVtYmVyIG9mIGR1cGxpY2F0ZXMsIGEgZGlmZmVyZW50CisgICAgICAgIG9wY29kZSBpcyB1c2VkIGFuZCBpdCBuZWVkcyBtb3JlIG1lbW9yeS4gVW5mb3J0dW5hdGVseSB3ZSBjYW5ub3QgdGVsbAorICAgICAgICB3aGV0aGVyIHRoaXMgaXMgdGhlIGNhc2UgaW4gdGhlIGZpcnN0IHBhc3MsIHNvIHdlIGhhdmUgdG8gYWxsb3cgZm9yCisgICAgICAgIG1vcmUgbWVtb3J5IGFsd2F5cy4gSW4gdGhlIHNlY29uZCBwYXNzLCB0aGUgYWRkaXRpb25hbCB0byBza2lwdW5pdHMKKyAgICAgICAgaGFwcGVucyBsYXRlci4gKi8KKworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgIGlmIChJU19ESUdJVCgqcHRyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI0NDsgIC8qIEdyb3VwIG5hbWUgbXVzdCBzdGFydCB3aXRoIG5vbi1kaWdpdCAqLworICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKCFNQVhfMjU1KCpwdHIpIHx8IChjYi0+Y3R5cGVzWypwdHJdICYgY3R5cGVfd29yZCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIyODsgICAvKiBBc3NlcnRpb24gZXhwZWN0ZWQgKi8KKyAgICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgICAgfQorICAgICAgICAgIG5hbWUgPSBwdHI7CisgICAgICAgICAgLyogSW5jcmVtZW50IHB0ciwgc2V0IG5hbWVsZW4sIGNoZWNrIGxlbmd0aCAqLworICAgICAgICAgIFJFQURfTkFNRShjdHlwZV93b3JkLCBFUlI0OCwgKmVycm9yY29kZXB0cik7CisgICAgICAgICAgaWYgKGxlbmd0aHB0ciAhPSBOVUxMKSBza2lwdW5pdHMgKz0gSU1NMl9TSVpFOworICAgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayB0aGUgdGVybWluYXRvciAqLworCisgICAgICAgIGlmICgodGVybWluYXRvciA+IDAgJiYgKnB0cisrICE9IChQQ1JFMl9VQ0hBUil0ZXJtaW5hdG9yKSB8fAorICAgICAgICAgICAgKnB0cisrICE9IENIQVJfUklHSFRfUEFSRU5USEVTSVMpCisgICAgICAgICAgeworICAgICAgICAgIHB0ci0tOyAgICAgICAgICAgICAgICAgIC8qIEVycm9yIG9mZnNldCAqLworICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIyNjsgIC8qIE1hbGZvcm1lZCBudW1iZXIgb3IgbmFtZSAqLworICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKworICAgICAgICAvKiBEbyBubyBmdXJ0aGVyIGNoZWNraW5nIGluIHRoZSBwcmUtY29tcGlsZSBwaGFzZS4gKi8KKworICAgICAgICBpZiAobGVuZ3RocHRyICE9IE5VTEwpIGJyZWFrOworCisgICAgICAgIC8qIEluIHRoZSByZWFsIGNvbXBpbGUgd2UgZG8gdGhlIHdvcmsgb2YgbG9va2luZyBmb3IgdGhlIGFjdHVhbAorICAgICAgICByZWZlcmVuY2UuIElmIHJlZnNpZ24gaXMgbm90IG5lZ2F0aXZlLCBpdCBtZWFucyB3ZSBoYXZlIGEgbnVtYmVyIGluCisgICAgICAgIHJlY25vLiAqLworCisgICAgICAgIGlmIChyZWZzaWduID49IDApCisgICAgICAgICAgeworICAgICAgICAgIGlmIChyZWNubyA8PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjM1OworICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKHJlZnNpZ24gIT0gMCkgcmVjbm8gPSAocmVmc2lnbiA9PSBDSEFSX01JTlVTKT8KKyAgICAgICAgICAgIChjYi0+YnJhY291bnQgKyAxKSAtIHJlY25vIDogcmVjbm8gKyBjYi0+YnJhY291bnQ7CisgICAgICAgICAgaWYgKHJlY25vIDw9IDAgfHwgKHVpbnQzMl90KXJlY25vID4gY2ItPmZpbmFsX2JyYWNvdW50KQorICAgICAgICAgICAgeworICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjE1OworICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgUFVUMihjb2RlLCAyK0xJTktfU0laRSwgcmVjbm8pOworICAgICAgICAgIGlmICgodWludDMyX3QpcmVjbm8gPiBjYi0+dG9wX2JhY2tyZWYpIGNiLT50b3BfYmFja3JlZiA9IHJlY25vOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICAvKiBPdGhlcndpc2UgbG9vayBmb3IgdGhlIG5hbWUuICovCisKKyAgICAgICAgc2xvdCA9IGNiLT5uYW1lX3RhYmxlOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2ItPm5hbWVzX2ZvdW5kOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIGlmIChQUklWKHN0cm5jbXApKG5hbWUsIHNsb3QrSU1NMl9TSVpFLCBuYW1lbGVuKSA9PSAwKSBicmVhazsKKyAgICAgICAgICBzbG90ICs9IGNiLT5uYW1lX2VudHJ5X3NpemU7CisgICAgICAgICAgfQorCisgICAgICAgIC8qIEZvdW5kIHRoZSBuYW1lZCBzdWJwYXR0ZXJuLiBJZiB0aGUgbmFtZSBpcyBkdXBsaWNhdGVkLCBhZGQgb25lIHRvCisgICAgICAgIHRoZSBvcGNvZGUgdG8gY2hhbmdlIENSRUYvUlJFRiBpbnRvIEROQ1JFRi9ETlJSRUYgYW5kIGluc2VydAorICAgICAgICBhcHByb3ByaWF0ZSBkYXRhIHZhbHVlcy4gT3RoZXJ3aXNlLCBqdXN0IGluc2VydCB0aGUgdW5pcXVlIHN1YnBhdHRlcm4KKyAgICAgICAgbnVtYmVyLiAqLworCisgICAgICAgIGlmIChpIDwgY2ItPm5hbWVzX2ZvdW5kKQorICAgICAgICAgIHsKKyAgICAgICAgICBpbnQgb2Zmc2V0ID0gaTsgICAgICAgICAgICAvKiBPZmZzZXQgb2YgZmlyc3QgbmFtZSBmb3VuZCAqLworCisgICAgICAgICAgY291bnQgPSAwOworICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICB7CisgICAgICAgICAgICByZWNubyA9IEdFVDIoc2xvdCwgMCk7ICAgLyogTnVtYmVyIGZvciBsYXN0IGZvdW5kICovCisgICAgICAgICAgICBpZiAoKHVpbnQzMl90KXJlY25vID4gY2ItPnRvcF9iYWNrcmVmKSBjYi0+dG9wX2JhY2tyZWYgPSByZWNubzsKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICBpZiAoKytpID49IGNiLT5uYW1lc19mb3VuZCkgYnJlYWs7CisgICAgICAgICAgICBzbG90ICs9IGNiLT5uYW1lX2VudHJ5X3NpemU7CisgICAgICAgICAgICBpZiAoUFJJVihzdHJuY21wKShuYW1lLCBzbG90K0lNTTJfU0laRSwgbmFtZWxlbikgIT0gMCB8fAorICAgICAgICAgICAgICAoc2xvdCtJTU0yX1NJWkUpW25hbWVsZW5dICE9IDApIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKGNvdW50ID4gMSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFBVVDIoY29kZSwgMitMSU5LX1NJWkUsIG9mZnNldCk7CisgICAgICAgICAgICBQVVQyKGNvZGUsIDIrTElOS19TSVpFK0lNTTJfU0laRSwgY291bnQpOworICAgICAgICAgICAgc2tpcHVuaXRzICs9IElNTTJfU0laRTsKKyAgICAgICAgICAgIGNvZGVbMStMSU5LX1NJWkVdKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSAgLyogTm90IGEgZHVwbGljYXRlZCBuYW1lICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICBQVVQyKGNvZGUsIDIrTElOS19TSVpFLCByZWNubyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgIC8qIElmIHRlcm1pbmF0b3IgPT0gQ0hBUl9OVUxMIGl0IG1lYW5zIHRoYXQgdGhlIG5hbWUgZm9sbG93ZWQgZGlyZWN0bHkKKyAgICAgICAgYWZ0ZXIgdGhlIG9wZW5pbmcgcGFyZW50aGVzaXMgW2UuZy4gKD8oYWJjKS4uLl0gYW5kIGluIHRoaXMgY2FzZSB0aGVyZQorICAgICAgICBhcmUgc29tZSBmdXJ0aGVyIGFsdGVybmF0aXZlcyB0byB0cnkuIEZvciB0aGUgY2FzZXMgd2hlcmUgdGVybWluYXRvciAhPQorICAgICAgICBDSEFSX05VTEwgW3RoaW5ncyBsaWtlICg/KDxuYW1lPi4uLiBvciAoPygnbmFtZScpLi4uIG9yICg/KFImbmFtZSkuLi4gXQorICAgICAgICB3ZSBoYXZlIG5vdyBjaGVja2VkIGFsbCB0aGUgcG9zc2liaWxpdGllcywgc28gZ2l2ZSBhbiBlcnJvci4gKi8KKworICAgICAgICBlbHNlIGlmICh0ZXJtaW5hdG9yICE9IENIQVJfTlVMTCkKKyAgICAgICAgICB7CisgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjE1OworICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKworICAgICAgICAvKiBDaGVjayBmb3IgKD8oUikgZm9yIHJlY3Vyc2lvbi4gQWxsb3cgZGlnaXRzIGFmdGVyIFIgdG8gc3BlY2lmeSBhCisgICAgICAgIHNwZWNpZmljIGdyb3VwIG51bWJlci4gKi8KKworICAgICAgICBlbHNlIGlmICgqbmFtZSA9PSBDSEFSX1IpCisgICAgICAgICAgeworICAgICAgICAgIHJlY25vID0gMDsKKyAgICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbmFtZWxlbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCFJU19ESUdJVChuYW1lW2ldKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSMTU7ICAgICAgICAvKiBOb24tZXhpc3RlbnQgc3VicGF0dGVybiAqLworICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHJlY25vID4gSU5UX01BWCAvIDEwIC0gMSkgICAvKiBJbnRlZ2VyIG92ZXJmbG93ICovCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjYxOworICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVjbm8gPSByZWNubyAqIDEwICsgbmFtZVtpXSAtIENIQVJfMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAocmVjbm8gPT0gMCkgcmVjbm8gPSBSUkVGX0FOWTsKKyAgICAgICAgICBjb2RlWzErTElOS19TSVpFXSA9IE9QX1JSRUY7ICAgICAgLyogQ2hhbmdlIHRlc3QgdHlwZSAqLworICAgICAgICAgIFBVVDIoY29kZSwgMitMSU5LX1NJWkUsIHJlY25vKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogU2ltaWxhcmx5LCBjaGVjayBmb3IgdGhlICg/KERFRklORSkgImNvbmRpdGlvbiIsIHdoaWNoIGlzIGFsd2F5cworICAgICAgICBmYWxzZS4gRHVyaW5nIGNvbXBpbGF0aW9uIHdlIHNldCBPUF9ERUZJTkUgdG8gZGlzdGluZ3Vpc2ggdGhpcyBmcm9tCisgICAgICAgIG90aGVyIE9QX0ZBTFNFIGNvbmRpdGlvbnMgc28gdGhhdCBpdCBjYW4gYmUgY2hlY2tlZCBmb3IgaGF2aW5nIG9ubHkgb25lCisgICAgICAgIGJyYW5jaCwgYnV0IGFmdGVyIHRoYXQgdGhlIG9wY29kZSBpcyBjaGFuZ2VkIHRvIE9QX0ZBTFNFLiAqLworCisgICAgICAgIGVsc2UgaWYgKG5hbWVsZW4gPT0gNiAmJiBQUklWKHN0cm5jbXBfYzgpKG5hbWUsIFNUUklOR19ERUZJTkUsIDYpID09IDApCisgICAgICAgICAgeworICAgICAgICAgIGNvZGVbMStMSU5LX1NJWkVdID0gT1BfREVGSU5FOworICAgICAgICAgIHNraXB1bml0cyA9IDE7CisgICAgICAgICAgfQorCisgICAgICAgIC8qIFJlZmVyZW5jZSB0byBhbiB1bmlkZW50aWZpZWQgc3VicGF0dGVybi4gKi8KKworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIxNTsKKyAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisKKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgICAgIGNhc2UgQ0hBUl9FUVVBTFNfU0lHTjogICAgICAgICAgICAgICAgIC8qIFBvc2l0aXZlIGxvb2thaGVhZCAqLworICAgICAgICBicmF2YWx1ZSA9IE9QX0FTU0VSVDsKKyAgICAgICAgY2ItPmFzc2VydF9kZXB0aCArPSAxOworICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogT3B0aW1pemUgKD8hKSB0byAoKkZBSUwpIHVubGVzcyBpdCBpcyBxdWFudGlmaWVkIC0gd2hpY2ggaXMgYSB3ZWlyZAorICAgICAgICB0aGluZyB0byBkbywgYnV0IFBlcmwgYWxsb3dzIGFsbCBhc3NlcnRpb25zIHRvIGJlIHF1YW50aWZpZWQsIGFuZCB3aGVuCisgICAgICAgIHRoZXkgY29udGFpbiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgdGhlcmUgbWF5IGJlIGEgcG90ZW50aWFsIHVzZSBmb3IKKyAgICAgICAgdGhpcyBmZWF0dXJlLiBOb3QgdGhhdCB0aGF0IGFwcGxpZXMgdG8gYSBxdWFudGlmaWVkICg/ISkgYnV0IHdlIGFsbG93CisgICAgICAgIGl0IGZvciB1bmlmb3JtaXR5LiAqLworCisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgICAgICBjYXNlIENIQVJfRVhDTEFNQVRJT05fTUFSSzogICAgICAgICAgICAvKiBOZWdhdGl2ZSBsb29rYWhlYWQgKi8KKyAgICAgICAgcHRyKys7CisgICAgICAgIGlmICgqcHRyID09IENIQVJfUklHSFRfUEFSRU5USEVTSVMgJiYgcHRyWzFdICE9IENIQVJfQVNURVJJU0sgJiYKKyAgICAgICAgICAgICBwdHJbMV0gIT0gQ0hBUl9QTFVTICYmIHB0clsxXSAhPSBDSEFSX1FVRVNUSU9OX01BUksgJiYKKyAgICAgICAgICAgIChwdHJbMV0gIT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgfHwgIWlzX2NvdW50ZWRfcmVwZWF0KHB0cisyKSkpCisgICAgICAgICAgeworICAgICAgICAgICpjb2RlKysgPSBPUF9GQUlMOworICAgICAgICAgIHByZXZpb3VzID0gTlVMTDsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisgICAgICAgIGJyYXZhbHVlID0gT1BfQVNTRVJUX05PVDsKKyAgICAgICAgY2ItPmFzc2VydF9kZXB0aCArPSAxOworICAgICAgICBicmVhazsKKworCisgICAgICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICAgICAgICBjYXNlIENIQVJfTEVTU19USEFOX1NJR046ICAgICAgICAgICAgICAvKiBMb29rYmVoaW5kIG9yIG5hbWVkIGRlZmluZSAqLworICAgICAgICBzd2l0Y2ggKHB0clsxXSkKKyAgICAgICAgICB7CisgICAgICAgICAgY2FzZSBDSEFSX0VRVUFMU19TSUdOOiAgICAgICAgICAgICAgIC8qIFBvc2l0aXZlIGxvb2tiZWhpbmQgKi8KKyAgICAgICAgICBicmF2YWx1ZSA9IE9QX0FTU0VSVEJBQ0s7CisgICAgICAgICAgY2ItPmFzc2VydF9kZXB0aCArPSAxOworICAgICAgICAgIHB0ciArPSAyOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBDSEFSX0VYQ0xBTUFUSU9OX01BUks6ICAgICAgICAgIC8qIE5lZ2F0aXZlIGxvb2tiZWhpbmQgKi8KKyAgICAgICAgICBicmF2YWx1ZSA9IE9QX0FTU0VSVEJBQ0tfTk9UOworICAgICAgICAgIGNiLT5hc3NlcnRfZGVwdGggKz0gMTsKKyAgICAgICAgICBwdHIgKz0gMjsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIC8qIE11c3QgYmUgYSBuYW1lIGRlZmluaXRpb24gLSBhcyB0aGUgc3ludGF4IHdhcyBjaGVja2VkIGluIHRoZQorICAgICAgICAgIHByZS1wYXNzLCB3ZSBjYW4gYXNzdW1lIGhlcmUgdGhhdCBpdCBpcyB2YWxpZC4gU2tpcCBvdmVyIHRoZSBuYW1lCisgICAgICAgICAgYW5kIGdvIHRvIGhhbmRsZSB0aGUgbnVtYmVyZWQgZ3JvdXAuICovCisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHdoaWxlICgqKCsrcHRyKSAhPSBDSEFSX0dSRUFURVJfVEhBTl9TSUdOKTsKKyAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICBnb3RvIE5VTUJFUkVEX0dST1VQOworICAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKworICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICAgICAgY2FzZSBDSEFSX0dSRUFURVJfVEhBTl9TSUdOOiAgICAgICAgICAgLyogT25lLXRpbWUgYnJhY2tldHMgKi8KKyAgICAgICAgYnJhdmFsdWUgPSBPUF9PTkNFOworICAgICAgICBwdHIrKzsKKyAgICAgICAgYnJlYWs7CisKKworICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICAgICAgY2FzZSBDSEFSX0M6ICAgICAgICAgICAgICAgICAvKiBDYWxsb3V0ICovCisgICAgICAgIHByZXZpb3VzX2NhbGxvdXQgPSBjb2RlOyAgICAgLyogU2F2ZSBmb3IgbGF0ZXIgY29tcGxldGlvbiAqLworICAgICAgICBhZnRlcl9tYW51YWxfY2FsbG91dCA9IDE7ICAgIC8qIFNraXAgb25lIGl0ZW0gYmVmb3JlIGNvbXBsZXRpbmcgKi8KKyAgICAgICAgcHRyKys7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgYWZ0ZXIgKD9DICovCisKKyAgICAgICAgLyogQSBjYWxsb3V0IG1heSBoYXZlIGEgc3RyaW5nIGFyZ3VtZW50LCBkZWxpbWl0ZWQgYnkgb25lIG9mIGEgZml4ZWQKKyAgICAgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMsIG9yIGFuIHVuZGVsaW1pdGVkIG51bWVyaWNhbCBhcmd1bWVudCwgb3Igbm8KKyAgICAgICAgYXJndW1lbnQsIHdoaWNoIGlzIHRoZSBzYW1lIGFzICg/QzApLiBEaWZmZXJlbnQgb3Bjb2RlcyBhcmUgdXNlZCBmb3IKKyAgICAgICAgdGhlIHR3byBjYXNlcy4gKi8KKworICAgICAgICBpZiAoKnB0ciAhPSBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTICYmICFJU19ESUdJVCgqcHRyKSkKKyAgICAgICAgICB7CisgICAgICAgICAgdWludDMyX3QgZGVsaW1pdGVyID0gMDsKKworICAgICAgICAgIGZvciAoaSA9IDA7IFBSSVYoY2FsbG91dF9zdGFydF9kZWxpbXMpW2ldICE9IDA7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgqcHRyID09IFBSSVYoY2FsbG91dF9zdGFydF9kZWxpbXMpW2ldKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGRlbGltaXRlciA9IFBSSVYoY2FsbG91dF9lbmRfZGVsaW1zKVtpXTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChkZWxpbWl0ZXIgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI4MjsKKyAgICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogRHVyaW5nIHRoZSBwcmUtY29tcGlsZSBwaGFzZSwgd2UgcGFyc2UgdGhlIHN0cmluZyBhbmQgdXBkYXRlIHRoZQorICAgICAgICAgIGxlbmd0aC4gVGhlcmUgaXMgbm8gbmVlZCB0byBnZW5lcmF0ZSBhbnkgY29kZS4gKEluIGZhY3QsIHRoZSBzdHJpbmcKKyAgICAgICAgICBoYXMgYWxyZWFkeSBiZWVuIHBhcnNlZCBpbiB0aGUgcHJlLXBhc3MgdGhhdCBsb29rcyBmb3IgbmFtZWQKKyAgICAgICAgICBwYXJlbnRoZXNlcywgYnV0IGl0IGRvZXMgbm8gaGFybSB0byBsZWF2ZSB0aGlzIGNvZGUgaW4uKSAqLworCisgICAgICAgICAgaWYgKGxlbmd0aHB0ciAhPSBOVUxMKSAgICAgLyogT25seSBjaGVjayB0aGUgc3RyaW5nICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICBQQ1JFMl9TUFRSIHN0YXJ0ID0gcHRyOworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoKytwdHIgPj0gY2ItPmVuZF9wYXR0ZXJuKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSODE7CisgICAgICAgICAgICAgICAgcHRyID0gc3RhcnQ7ICAgLyogVG8gZ2l2ZSBhIG1vcmUgdXNlZnVsIG1lc3NhZ2UgKi8KKyAgICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChwdHJbMF0gPT0gZGVsaW1pdGVyICYmIHB0clsxXSA9PSBkZWxpbWl0ZXIpIHB0ciArPSAyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAocHRyWzBdICE9IGRlbGltaXRlcik7CisKKyAgICAgICAgICAgIC8qIFN0YXJ0IHBvaW50cyB0byB0aGUgb3BlbmluZyBkZWxpbWl0ZXIsIHB0ciBwb2ludHMgdG8gdGhlCisgICAgICAgICAgICBjbG9zaW5nIGRlbGltaXRlci4gV2UgbXVzdCBhbGxvdyBmb3IgaW5jbHVkaW5nIHRoZSBkZWxpbWl0ZXIgYW5kCisgICAgICAgICAgICBmb3IgdGhlIHRlcm1pbmF0aW5nIHplcm8uIEFueSBkb3VibGVkIGRlbGltaXRlcnMgd2l0aGluIHRoZSBzdHJpbmcKKyAgICAgICAgICAgIG1ha2UgdGhpcyBhbiBvdmVyZXN0aW1hdGUsIGJ1dCBpdCBpcyBub3Qgd29ydGggYm90aGVyaW5nIGFib3V0LiAqLworCisgICAgICAgICAgICAoKmxlbmd0aHB0cikgKz0gKHB0ciAtIHN0YXJ0KSArIDIgKyAoMSArIDQqTElOS19TSVpFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIEluIHRoZSByZWFsIGNvbXBpbGUgd2UgY2FuIGNvcHkgdGhlIHN0cmluZywga25vd2luZyB0aGF0IGl0IGlzCisgICAgICAgICAgc3ludGFjdGljYWxseSBPSy4gVGhlIHN0YXJ0aW5nIGRlbGltaXRlciBpcyBpbmNsdWRlZCBzbyB0aGF0IHRoZQorICAgICAgICAgIGNsaWVudCBjYW4gZGlzY292ZXIgaXQgaWYgdGhleSB3YW50LiBXZSBhbHNvIHBhc3MgdGhlIHN0YXJ0IG9mZnNldCB0bworICAgICAgICAgIGhlbHAgYSBzY3JpcHQgbGFuZ3VhZ2UgZ2l2ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuICovCisKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICBQQ1JFMl9VQ0hBUiAqY2FsbG91dF9zdHJpbmcgPSBjb2RlICsgKDEgKyA0KkxJTktfU0laRSk7CisgICAgICAgICAgICAqY2FsbG91dF9zdHJpbmcrKyA9ICpwdHIrKzsKKyAgICAgICAgICAgIFBVVChjb2RlLCAxICsgMypMSU5LX1NJWkUsIChpbnQpKHB0ciAtIGNiLT5zdGFydF9wYXR0ZXJuKSk7IC8qIFN0YXJ0IG9mZnNldCAqLworICAgICAgICAgICAgZm9yKDs7KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmICgqcHRyID09IGRlbGltaXRlcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHB0clsxXSA9PSBkZWxpbWl0ZXIpIHB0cisrOyBlbHNlIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgKmNhbGxvdXRfc3RyaW5nKysgPSAqcHRyKys7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpjYWxsb3V0X3N0cmluZysrID0gQ0hBUl9OVUxMOworICAgICAgICAgICAgY29kZVswXSA9IE9QX0NBTExPVVRfU1RSOworICAgICAgICAgICAgUFVUKGNvZGUsIDEsIChpbnQpKHB0ciArIDIgLSBjYi0+c3RhcnRfcGF0dGVybikpOyAvKiBOZXh0IG9mZnNldCAqLworICAgICAgICAgICAgUFVUKGNvZGUsIDEgKyBMSU5LX1NJWkUsIDApOyAgICAgIC8qIERlZmF1bHQgbGVuZ3RoICovCisgICAgICAgICAgICBQVVQoY29kZSwgMSArIDIqTElOS19TSVpFLCAgICAgICAgLyogQ29tcHV0ZSBzaXplICovCisgICAgICAgICAgICAgICAgKGludCkoY2FsbG91dF9zdHJpbmcgLSBjb2RlKSk7CisgICAgICAgICAgICBjb2RlID0gY2FsbG91dF9zdHJpbmc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBBZHZhbmNlIHRvIHdoYXQgc2hvdWxkIGJlIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lzLCB3aGljaCBpcworICAgICAgICAgIGNoZWNrZWQgYmVsb3cuICovCisKKyAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogSGFuZGxlIGEgY2FsbG91dCB3aXRoIGFuIG9wdGlvbmFsIG51bWVyaWNhbCBhcmd1bWVudCwgd2hpY2ggbXVzdCBiZQorICAgICAgICBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMjU1LiBBIG1pc3NpbmcgYXJndW1lbnQgZ2l2ZXMgMC4gKi8KKworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgIGludCBuID0gMDsKKyAgICAgICAgICBjb2RlWzBdID0gT1BfQ0FMTE9VVDsgICAgIC8qIE51bWVyaWNhbCBjYWxsb3V0ICovCisgICAgICAgICAgd2hpbGUgKElTX0RJR0lUKCpwdHIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgbiA9IG4gKiAxMCArICpwdHIrKyAtIENIQVJfMDsKKyAgICAgICAgICAgIGlmIChuID4gMjU1KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIzODsKKyAgICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBQVVQoY29kZSwgMSwgKGludCkocHRyIC0gY2ItPnN0YXJ0X3BhdHRlcm4gKyAxKSk7ICAvKiBOZXh0IG9mZnNldCAqLworICAgICAgICAgIFBVVChjb2RlLCAxICsgTElOS19TSVpFLCAwKTsgICAgICAgICAgICAgICAgICAgIC8qIERlZmF1bHQgbGVuZ3RoICovCisgICAgICAgICAgY29kZVsxICsgMipMSU5LX1NJWkVdID0gbjsgICAgICAgICAgICAgICAgICAgICAgLyogQ2FsbG91dCBudW1iZXIgKi8KKyAgICAgICAgICBjb2RlICs9IFBSSVYoT1BfbGVuZ3RocylbT1BfQ0FMTE9VVF07CisgICAgICAgICAgfQorCisgICAgICAgIC8qIEJvdGggZm9ybWF0cyBtdXN0IGhhdmUgYSBjbG9zaW5nIHBhcmVudGhlc2lzICovCisKKyAgICAgICAgaWYgKCpwdHIgIT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUykKKyAgICAgICAgICB7CisgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjM5OworICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKworICAgICAgICAvKiBDYWxsb3V0cyBjYW5ub3QgYmUgcXVhbnRpZmllZC4gKi8KKworICAgICAgICBwcmV2aW91cyA9IE5VTEw7CisgICAgICAgIGNvbnRpbnVlOworCisKKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgICAgIGNhc2UgQ0hBUl9QOiAgICAgICAgICAgICAgLyogUHl0aG9uLXN0eWxlIG5hbWVkIHN1YnBhdHRlcm4gaGFuZGxpbmcgKi8KKyAgICAgICAgaWYgKCooKytwdHIpID09IENIQVJfRVFVQUxTX1NJR04gfHwKKyAgICAgICAgICAgICpwdHIgPT0gQ0hBUl9HUkVBVEVSX1RIQU5fU0lHTikgIC8qIFJlZmVyZW5jZSBvciByZWN1cnNpb24gKi8KKyAgICAgICAgICB7CisgICAgICAgICAgaXNfcmVjdXJzZSA9ICpwdHIgPT0gQ0hBUl9HUkVBVEVSX1RIQU5fU0lHTjsKKyAgICAgICAgICB0ZXJtaW5hdG9yID0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUzsKKyAgICAgICAgICBnb3RvIE5BTUVEX1JFRl9PUl9SRUNVUlNFOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKnB0ciAhPSBDSEFSX0xFU1NfVEhBTl9TSUdOKSAgLyogVGVzdCBmb3IgUHl0aG9uLXN0eWxlIGRlZm4gKi8KKyAgICAgICAgICB7CisgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjQxOworICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKyAgICAgICAgLyogRmFsbCB0aHJvdWdoIHRvIGhhbmRsZSAoP1A8IGFzICg/PCBpcyBoYW5kbGVkICovCisKKworICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICAgICAgY2FzZSBDSEFSX0FQT1NUUk9QSEU6ICAgLyogRGVmaW5lIGEgbmFtZSAtIG5vdGUgZmFsbCB0aHJvdWdoIGFib3ZlICovCisKKyAgICAgICAgLyogVGhlIHN5bnRheCB3YXMgY2hlY2tlZCBhbmQgdGhlIGxpc3Qgb2YgbmFtZXMgd2FzIHNldCB1cCBpbiB0aGUKKyAgICAgICAgcHJlLXBhc3MsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gYmUgZG9uZSBub3cgZXhjZXB0IHRvIHNraXAgb3ZlciB0aGUKKyAgICAgICAgbmFtZS4gKi8KKworICAgICAgICB0ZXJtaW5hdG9yID0gKCpwdHIgPT0gQ0hBUl9MRVNTX1RIQU5fU0lHTik/CisgICAgICAgICAgICAgICAgICBDSEFSX0dSRUFURVJfVEhBTl9TSUdOIDogQ0hBUl9BUE9TVFJPUEhFOworICAgICAgICB3aGlsZSAoKigrK3B0cikgIT0gKHVuc2lnbmVkIGludCl0ZXJtaW5hdG9yKTsKKyAgICAgICAgcHRyKys7CisgICAgICAgIGdvdG8gTlVNQkVSRURfR1JPVVA7ICAgICAgLyogU2V0IHVwIG51bWJlcmVkIGdyb3VwICovCisKKworICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICAgICAgY2FzZSBDSEFSX0FNUEVSU0FORDogICAgICAgICAgICAvKiBQZXJsIHJlY3Vyc2lvbi9zdWJyb3V0aW5lIHN5bnRheCAqLworICAgICAgICB0ZXJtaW5hdG9yID0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUzsKKyAgICAgICAgaXNfcmVjdXJzZSA9IFRSVUU7CisgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworCisgICAgICAgIC8qIFdlIGNvbWUgaGVyZSBmcm9tIHRoZSBQeXRob24gc3ludGF4IGFib3ZlIHRoYXQgaGFuZGxlcyBib3RoCisgICAgICAgIHJlZmVyZW5jZXMgKD9QPW5hbWUpIGFuZCByZWN1cnNpb24gKD9QPm5hbWUpLCBhcyB3ZWxsIGFzIGZhbGxpbmcKKyAgICAgICAgdGhyb3VnaCBmcm9tIHRoZSBQZXJsIHJlY3Vyc2lvbiBzeW50YXggKD8mbmFtZSkuIFdlIGFsc28gY29tZSBoZXJlIGZyb20KKyAgICAgICAgdGhlIFBlcmwgXGs8bmFtZT4gb3IgXGsnbmFtZScgYmFjayByZWZlcmVuY2Ugc3ludGF4IGFuZCB0aGUgXGt7bmFtZX0KKyAgICAgICAgLk5FVCBzeW50YXgsIGFuZCB0aGUgT25pZ3VydW1hIFxnPC4uLj4gYW5kIFxnJy4uLicgc3Vicm91dGluZSBzeW50YXguICovCisKKyAgICAgICAgTkFNRURfUkVGX09SX1JFQ1VSU0U6CisgICAgICAgIG5hbWUgPSArK3B0cjsKKyAgICAgICAgaWYgKElTX0RJR0lUKCpwdHIpKQorICAgICAgICAgIHsKKyAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSNDQ7ICAgLyogR3JvdXAgbmFtZSBtdXN0IHN0YXJ0IHdpdGggbm9uLWRpZ2l0ICovCisgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgfQorICAgICAgICAvKiBJbmNyZW1lbnQgcHRyLCBzZXQgbmFtZWxlbiwgY2hlY2sgbGVuZ3RoICovCisgICAgICAgIFJFQURfTkFNRShjdHlwZV93b3JkLCBFUlI0OCwgKmVycm9yY29kZXB0cik7CisKKyAgICAgICAgLyogSW4gdGhlIHByZS1jb21waWxlIHBoYXNlLCBkbyBhIHN5bnRheCBjaGVjay4gKi8KKworICAgICAgICBpZiAobGVuZ3RocHRyICE9IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChuYW1lbGVuID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSNjI7CisgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoKnB0ciAhPSAoUENSRTJfVUNIQVIpdGVybWluYXRvcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI0MjsKKyAgICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAvKiBTY2FuIHRoZSBsaXN0IG9mIG5hbWVzIGdlbmVyYXRlZCBpbiB0aGUgcHJlLXBhc3MgaW4gb3JkZXIgdG8gZ2V0CisgICAgICAgIGEgbnVtYmVyIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGlzIG5hbWUgaXMgZHVwbGljYXRlZC4gKi8KKworICAgICAgICByZWNubyA9IDA7CisgICAgICAgIGlzX2R1cG5hbWUgPSBGQUxTRTsKKyAgICAgICAgbmcgPSBjYi0+bmFtZWRfZ3JvdXBzOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjYi0+bmFtZXNfZm91bmQ7IGkrKywgbmcrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKG5hbWVsZW4gPT0gbmctPmxlbmd0aCAmJgorICAgICAgICAgICAgICBQUklWKHN0cm5jbXApKG5hbWUsIG5nLT5uYW1lLCBuYW1lbGVuKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgb3Blbl9jYXBpdGVtICpvYzsKKyAgICAgICAgICAgIGlzX2R1cG5hbWUgPSBuZy0+aXNkdXA7CisgICAgICAgICAgICByZWNubyA9IG5nLT5udW1iZXI7CisKKyAgICAgICAgICAgIC8qIEZvciBhIHJlY3Vyc2lvbiwgdGhhdCdzIGFsbCB0aGF0IGlzIG5lZWRlZC4gV2UgY2FuIG5vdyBnbyB0byB0aGUKKyAgICAgICAgICAgIGNvZGUgdGhhdCBoYW5kbGVzIG51bWVyaWNhbCByZWN1cnNpb24uICovCisKKyAgICAgICAgICAgIGlmIChpc19yZWN1cnNlKSBnb3RvIEhBTkRMRV9SRUNVUlNJT047CisKKyAgICAgICAgICAgIC8qIEZvciBhIGJhY2sgcmVmZXJlbmNlLCB1cGRhdGUgdGhlIGJhY2sgcmVmZXJlbmNlIG1hcCBhbmQgdGhlCisgICAgICAgICAgICBtYXhpbXVtIGJhY2sgcmVmZXJlbmNlLiBUaGVuIGZvciBlYWNoIGdyb3VwIHdlIG11c3QgY2hlY2sgdG8gc2VlIGlmCisgICAgICAgICAgICBpdCBpcyByZWN1cnNpdmUsIHRoYXQgaXMsIGl0IGlzIGluc2lkZSB0aGUgZ3JvdXAgdGhhdCBpdAorICAgICAgICAgICAgcmVmZXJlbmNlcy4gQSBmbGFnIGlzIHNldCBzbyB0aGF0IHRoZSBncm91cCBjYW4gYmUgbWFkZSBhdG9taWMuICovCisKKyAgICAgICAgICAgIGNiLT5iYWNrcmVmX21hcCB8PSAocmVjbm8gPCAzMik/ICgxdSA8PCByZWNubykgOiAxOworICAgICAgICAgICAgaWYgKCh1aW50MzJfdClyZWNubyA+IGNiLT50b3BfYmFja3JlZikgY2ItPnRvcF9iYWNrcmVmID0gcmVjbm87CisKKyAgICAgICAgICAgIGZvciAob2MgPSBjYi0+b3Blbl9jYXBzOyBvYyAhPSBOVUxMOyBvYyA9IG9jLT5uZXh0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChvYy0+bnVtYmVyID09IHJlY25vKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvYy0+ZmxhZyA9IFRSVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgIC8qIElmIHRoZSBuYW1lIHdhcyBub3QgZm91bmQgd2UgaGF2ZSBhIGJhZCByZWZlcmVuY2UuICovCisKKyAgICAgICAgaWYgKHJlY25vID09IDApCisgICAgICAgICAgeworICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIxNTsKKyAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogSWYgYSBiYWNrIHJlZmVyZW5jZSBuYW1lIGlzIG5vdCBkdXBsaWNhdGVkLCB3ZSBjYW4gaGFuZGxlIGl0IGFzIGEKKyAgICAgICAgbnVtZXJpY2FsIHJlZmVyZW5jZS4gKi8KKworICAgICAgICBpZiAoIWlzX2R1cG5hbWUpIGdvdG8gSEFORExFX1JFRkVSRU5DRTsKKworICAgICAgICAvKiBJZiBhIGJhY2sgcmVmZXJlbmNlIG5hbWUgaXMgZHVwbGljYXRlZCwgd2UgZ2VuZXJhdGUgYSBkaWZmZXJlbnQKKyAgICAgICAgb3Bjb2RlIHRvIGEgbnVtZXJpY2FsIGJhY2sgcmVmZXJlbmNlLiBJbiB0aGUgc2Vjb25kIHBhc3Mgd2UgbXVzdCBzZWFyY2gKKyAgICAgICAgZm9yIHRoZSBpbmRleCBhbmQgY291bnQgaW4gdGhlIGZpbmFsIG5hbWUgdGFibGUuICovCisKKyAgICAgICAgY291bnQgPSAwOworICAgICAgICBpbmRleCA9IDA7CisKKyAgICAgICAgaWYgKGxlbmd0aHB0ciA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICBzbG90ID0gY2ItPm5hbWVfdGFibGU7CisgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNiLT5uYW1lc19mb3VuZDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKFBSSVYoc3RybmNtcCkobmFtZSwgc2xvdCtJTU0yX1NJWkUsIG5hbWVsZW4pID09IDAgJiYKKyAgICAgICAgICAgICAgICBzbG90W0lNTTJfU0laRStuYW1lbGVuXSA9PSAwKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChjb3VudCA9PSAwKSBpbmRleCA9IGk7CisgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNsb3QgKz0gY2ItPm5hbWVfZW50cnlfc2l6ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChjb3VudCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjE1OworICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgIGlmIChmaXJzdGN1ZmxhZ3MgPT0gUkVRX1VOU0VUKSBmaXJzdGN1ZmxhZ3MgPSBSRVFfTk9ORTsKKyAgICAgICAgcHJldmlvdXMgPSBjb2RlOworICAgICAgICAqY29kZSsrID0gKChvcHRpb25zICYgUENSRTJfQ0FTRUxFU1MpICE9IDApPyBPUF9ETlJFRkkgOiBPUF9ETlJFRjsKKyAgICAgICAgUFVUMklOQyhjb2RlLCAwLCBpbmRleCk7CisgICAgICAgIFBVVDJJTkMoY29kZSwgMCwgY291bnQpOworICAgICAgICBjb250aW51ZTsgIC8qIEVuZCBvZiBiYWNrIHJlZiBoYW5kbGluZyAqLworCisKKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgICAgIGNhc2UgQ0hBUl9SOiAgICAgICAgICAgICAgLyogUmVjdXJzaW9uLCBzYW1lIGFzICg/MCkgKi8KKyAgICAgICAgcmVjbm8gPSAwOworICAgICAgICBpZiAoKigrK3B0cikgIT0gQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUykKKyAgICAgICAgICB7CisgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjI5OworICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKyAgICAgICAgZ290byBIQU5ETEVfUkVDVVJTSU9OOworCisKKyAgICAgICAgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisgICAgICAgIGNhc2UgQ0hBUl9NSU5VUzogY2FzZSBDSEFSX1BMVVM6ICAvKiBSZWN1cnNpb24gb3Igc3Vicm91dGluZSAqLworICAgICAgICBjYXNlIENIQVJfMDogY2FzZSBDSEFSXzE6IGNhc2UgQ0hBUl8yOiBjYXNlIENIQVJfMzogY2FzZSBDSEFSXzQ6CisgICAgICAgIGNhc2UgQ0hBUl81OiBjYXNlIENIQVJfNjogY2FzZSBDSEFSXzc6IGNhc2UgQ0hBUl84OiBjYXNlIENIQVJfOToKKyAgICAgICAgICB7CisgICAgICAgICAgdGVybWluYXRvciA9IENIQVJfUklHSFRfUEFSRU5USEVTSVM7CisKKyAgICAgICAgICAvKiBDb21lIGhlcmUgZnJvbSB0aGUgXGc8Li4uPiBhbmQgXGcnLi4uJyBjb2RlIChPbmlndXJ1bWEKKyAgICAgICAgICBjb21wYXRpYmlsaXR5KS4gSG93ZXZlciwgdGhlIHN5bnRheCBoYXMgYmVlbiBjaGVja2VkIHRvIGVuc3VyZSB0aGF0CisgICAgICAgICAgdGhlIC4uLiBhcmUgYSAoc2lnbmVkKSBudW1iZXIsIHNvIHRoYXQgbmVpdGhlciBFUlI2MyBub3IgRVJSMjkgd2lsbAorICAgICAgICAgIGJlIGNhbGxlZCBvbiB0aGlzIHBhdGgsIG5vciB3aXRoIHRoZSBqdW1wIHRvIE9USEVSX0NIQVJfQUZURVJfUVVFUlkKKyAgICAgICAgICBldmVyIGJlIHRha2VuLiAqLworCisgICAgICAgICAgSEFORExFX05VTUVSSUNBTF9SRUNVUlNJT046CisKKyAgICAgICAgICBpZiAoKHJlZnNpZ24gPSAqcHRyKSA9PSBDSEFSX1BMVVMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBwdHIrKzsKKyAgICAgICAgICAgIGlmICghSVNfRElHSVQoKnB0cikpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjYzOworICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHJlZnNpZ24gPT0gQ0hBUl9NSU5VUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghSVNfRElHSVQocHRyWzFdKSkKKyAgICAgICAgICAgICAgZ290byBPVEhFUl9DSEFSX0FGVEVSX1FVRVJZOworICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICByZWNubyA9IDA7CisgICAgICAgICAgd2hpbGUgKElTX0RJR0lUKCpwdHIpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlY25vID4gSU5UX01BWCAvIDEwIC0gMSkgLyogSW50ZWdlciBvdmVyZmxvdyAqLworICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHdoaWxlIChJU19ESUdJVCgqcHRyKSkgcHRyKys7CisgICAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI2MTsKKyAgICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlY25vID0gcmVjbm8gKiAxMCArICpwdHIrKyAtIENIQVJfMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmICgqcHRyICE9IChQQ1JFMl9VQ0hBUil0ZXJtaW5hdG9yKQorICAgICAgICAgICAgeworICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjI5OworICAgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAocmVmc2lnbiA9PSBDSEFSX01JTlVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlY25vID09IDApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjU4OworICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVjbm8gPSAoaW50KShjYi0+YnJhY291bnQgKyAxKSAtIHJlY25vOworICAgICAgICAgICAgaWYgKHJlY25vIDw9IDApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjE1OworICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgaWYgKHJlZnNpZ24gPT0gQ0hBUl9QTFVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHJlY25vID09IDApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjU4OworICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVjbm8gKz0gY2ItPmJyYWNvdW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYgKCh1aW50MzJfdClyZWNubyA+IGNiLT5maW5hbF9icmFjb3VudCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIxNTsKKyAgICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgICAgfQorCisgICAgICAgICAgLyogQ29tZSBoZXJlIGZyb20gY29kZSBhYm92ZSB0aGF0IGhhbmRsZXMgYSBuYW1lZCByZWN1cnNpb24uCisgICAgICAgICAgV2UgaW5zZXJ0IHRoZSBudW1iZXIgb2YgdGhlIGNhbGxlZCBncm91cCBhZnRlciBPUF9SRUNVUlNFLiBBdCB0aGUKKyAgICAgICAgICBlbmQgb2YgY29tcGlsaW5nIHRoZSBwYXR0ZXJuIGlzIHNjYW5uZWQgYW5kIHRoZXNlIG51bWJlcnMgYXJlCisgICAgICAgICAgcmVwbGFjZWQgYnkgb2Zmc2V0cyB3aXRoaW4gdGhlIHBhdHRlcm4uIEl0IGlzIGRvbmUgbGlrZSB0aGlzIHRvIGF2b2lkCisgICAgICAgICAgcHJvYmxlbXMgd2l0aCBmb3J3YXJkIHJlZmVyZW5jZXMgYW5kIGFkanVzdGluZyBvZmZzZXRzIHdoZW4gZ3JvdXBzCisgICAgICAgICAgYXJlIGR1cGxpY2F0ZWQgYW5kIG1vdmVkIChhcyBkaXNjb3ZlcmVkIGluIHByZXZpb3VzIGltcGxlbWVudGF0aW9ucykuCisgICAgICAgICAgTm90ZSB0aGF0IGEgcmVjdXJzaW9uIGRvZXMgbm90IGhhdmUgYSBzZXQgZmlyc3QgY2hhcmFjdGVyIChyZWxldmFudAorICAgICAgICAgIGlmIGl0IGlzIHJlcGVhdGVkLCBiZWNhdXNlIGl0IHdpbGwgdGhlbiBiZSB3cmFwcGVkIHdpdGggT05DRQorICAgICAgICAgIGJyYWNrZXRzKS4gKi8KKworICAgICAgICAgIEhBTkRMRV9SRUNVUlNJT046CisgICAgICAgICAgcHJldmlvdXMgPSBjb2RlOworICAgICAgICAgICpjb2RlID0gT1BfUkVDVVJTRTsKKyAgICAgICAgICBQVVQoY29kZSwgMSwgcmVjbm8pOworICAgICAgICAgIGNvZGUgKz0gMSArIExJTktfU0laRTsKKyAgICAgICAgICBncm91cHNldGZpcnN0Y3UgPSBGQUxTRTsKKyAgICAgICAgICBjYi0+aGFkX3JlY3Vyc2UgPSBUUlVFOworICAgICAgICAgIH0KKworICAgICAgICAvKiBDYW4ndCBkZXRlcm1pbmUgYSBmaXJzdCBieXRlIG5vdyAqLworCisgICAgICAgIGlmIChmaXJzdGN1ZmxhZ3MgPT0gUkVRX1VOU0VUKSBmaXJzdGN1ZmxhZ3MgPSBSRVFfTk9ORTsKKyAgICAgICAgY29udGludWU7CisKKworICAgICAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgIC8qIE90aGVyIGNoYXJhY3RlcnM6IGNoZWNrIG9wdGlvbiBzZXR0aW5nICovCisgICAgICAgIE9USEVSX0NIQVJfQUZURVJfUVVFUlk6CisgICAgICAgIHNldCA9IHVuc2V0ID0gMDsKKyAgICAgICAgb3B0c2V0ID0gJnNldDsKKworICAgICAgICB3aGlsZSAoKnB0ciAhPSBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTICYmICpwdHIgIT0gQ0hBUl9DT0xPTikKKyAgICAgICAgICB7CisgICAgICAgICAgc3dpdGNoICgqcHRyKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIENIQVJfTUlOVVM6IG9wdHNldCA9ICZ1bnNldDsgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQ0hBUl9KOiAgICAvKiBSZWNvcmQgdGhhdCBpdCBjaGFuZ2VkIGluIHRoZSBleHRlcm5hbCBvcHRpb25zICovCisgICAgICAgICAgICAqb3B0c2V0IHw9IFBDUkUyX0RVUE5BTUVTOworICAgICAgICAgICAgY2ItPmV4dGVybmFsX2ZsYWdzIHw9IFBDUkUyX0pDSEFOR0VEOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQ0hBUl9pOiAqb3B0c2V0IHw9IFBDUkUyX0NBU0VMRVNTOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ0hBUl9tOiAqb3B0c2V0IHw9IFBDUkUyX01VTFRJTElORTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENIQVJfczogKm9wdHNldCB8PSBQQ1JFMl9ET1RBTEw7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDSEFSX3g6ICpvcHRzZXQgfD0gUENSRTJfRVhURU5ERUQ7IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDSEFSX1U6ICpvcHRzZXQgfD0gUENSRTJfVU5HUkVFRFk7IGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OiAgKmVycm9yY29kZXB0ciA9IEVSUjExOworICAgICAgICAgICAgICAgICAgICAgIHB0ci0tOyAgICAvKiBDb3JyZWN0IHRoZSBvZmZzZXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgLyogU2V0IHVwIHRoZSBjaGFuZ2VkIG9wdGlvbiBiaXRzLCBidXQgZG9uJ3QgY2hhbmdlIGFueXRoaW5nIHlldC4gKi8KKworICAgICAgICBuZXdvcHRpb25zID0gKG9wdGlvbnMgfCBzZXQpICYgKH51bnNldCk7CisKKyAgICAgICAgLyogSWYgdGhlIG9wdGlvbnMgZW5kZWQgd2l0aCAnKScgdGhpcyBpcyBub3QgdGhlIHN0YXJ0IG9mIGEgbmVzdGVkCisgICAgICAgIGdyb3VwIHdpdGggb3B0aW9uIGNoYW5nZXMsIHNvIHRoZSBvcHRpb25zIGNoYW5nZSBhdCB0aGlzIGxldmVsLiBUaGV5CisgICAgICAgIG11c3QgYWxzbyBiZSBwYXNzZWQgYmFjayBmb3IgdXNlIGluIHN1YnNlcXVlbnQgYnJhbmNoZXMuIFJlc2V0IHRoZQorICAgICAgICBncmVlZHkgZGVmYXVsdHMgYW5kIHRoZSBjYXNlIHZhbHVlIGZvciBmaXJzdGN1IGFuZCByZXFjdS4gKi8KKworICAgICAgICBpZiAoKnB0ciA9PSBDSEFSX1JJR0hUX1BBUkVOVEhFU0lTKQorICAgICAgICAgIHsKKyAgICAgICAgICAqb3B0aW9uc3B0ciA9IG9wdGlvbnMgPSBuZXdvcHRpb25zOworICAgICAgICAgIGdyZWVkeV9kZWZhdWx0ID0gKChuZXdvcHRpb25zICYgUENSRTJfVU5HUkVFRFkpICE9IDApOworICAgICAgICAgIGdyZWVkeV9ub25fZGVmYXVsdCA9IGdyZWVkeV9kZWZhdWx0IF4gMTsKKyAgICAgICAgICByZXFfY2FzZW9wdCA9ICgobmV3b3B0aW9ucyAmIFBDUkUyX0NBU0VMRVNTKSAhPSAwKT8gUkVRX0NBU0VMRVNTOjA7CisgICAgICAgICAgcHJldmlvdXMgPSBOVUxMOyAgICAgICAvKiBUaGlzIGl0ZW0gY2FuJ3QgYmUgcmVwZWF0ZWQgKi8KKyAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgICAgIC8qIEl0IGlzIGNvbXBsZXRlICovCisgICAgICAgICAgfQorCisgICAgICAgIC8qIElmIHRoZSBvcHRpb25zIGVuZGVkIHdpdGggJzonIHdlIGFyZSBoZWFkaW5nIGludG8gYSBuZXN0ZWQgZ3JvdXAKKyAgICAgICAgd2l0aCBwb3NzaWJsZSBjaGFuZ2Ugb2Ygb3B0aW9ucy4gU3VjaCBncm91cHMgYXJlIG5vbi1jYXB0dXJpbmcgYW5kIGFyZQorICAgICAgICBub3QgYXNzZXJ0aW9ucyBvZiBhbnkga2luZC4gQWxsIHdlIG5lZWQgdG8gZG8gaXMgc2tpcCBvdmVyIHRoZSAnOic7CisgICAgICAgIHRoZSBuZXdvcHRpb25zIHZhbHVlIGlzIGhhbmRsZWQgYmVsb3cuICovCisKKyAgICAgICAgYnJhdmFsdWUgPSBPUF9CUkE7CisgICAgICAgIHB0cisrOworICAgICAgICB9ICAgICAvKiBFbmQgb2Ygc3dpdGNoIGZvciBjaGFyYWN0ZXIgZm9sbG93aW5nICg/ICovCisgICAgICB9ICAgICAgIC8qIEVuZCBvZiAoPyBoYW5kbGluZyAqLworCisgICAgLyogT3BlbmluZyBwYXJlbnRoZXNpcyBub3QgZm9sbG93ZWQgYnkgJyonIG9yICc/Jy4gSWYgUENSRTJfTk9fQVVUT19DQVBUVVJFCisgICAgaXMgc2V0LCBhbGwgdW5hZG9ybmVkIGJyYWNrZXRzIGJlY29tZSBub24tY2FwdHVyaW5nIGFuZCBiZWhhdmUgbGlrZSAoPzouLi4pCisgICAgYnJhY2tldHMuICovCisKKyAgICBlbHNlIGlmICgob3B0aW9ucyAmIFBDUkUyX05PX0FVVE9fQ0FQVFVSRSkgIT0gMCkKKyAgICAgIHsKKyAgICAgIGJyYXZhbHVlID0gT1BfQlJBOworICAgICAgfQorCisgICAgLyogRWxzZSB3ZSBoYXZlIGEgY2FwdHVyaW5nIGdyb3VwLiAqLworCisgICAgZWxzZQorICAgICAgeworICAgICAgTlVNQkVSRURfR1JPVVA6CisgICAgICBjYi0+YnJhY291bnQgKz0gMTsKKyAgICAgIFBVVDIoY29kZSwgMStMSU5LX1NJWkUsIGNiLT5icmFjb3VudCk7CisgICAgICBza2lwdW5pdHMgPSBJTU0yX1NJWkU7CisgICAgICB9CisKKyAgICAvKiBQcm9jZXNzIG5lc3RlZCBicmFja2V0ZWQgcmVnZXguIEZpcnN0IGNoZWNrIGZvciBwYXJlbnRoZXNlcyBuZXN0ZWQgdG9vCisgICAgZGVlcGx5LiAqLworCisgICAgaWYgKChjYi0+cGFyZW5zX2RlcHRoICs9IDEpID4gKGludCkoY2ItPmN4LT5wYXJlbnNfbmVzdF9saW1pdCkpCisgICAgICB7CisgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSMTk7CisgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgIH0KKworICAgIC8qIEFsbCBhc3NlcnRpb25zIHVzZWQgbm90IHRvIGJlIHJlcGVhdGFibGUsIGJ1dCB0aGlzIHdhcyBjaGFuZ2VkIGZvciBQZXJsCisgICAgY29tcGF0aWJpbGl0eS4gQWxsIGtpbmRzIGNhbiBub3cgYmUgcmVwZWF0ZWQgZXhjZXB0IGZvciBhc3NlcnRpb25zIHRoYXQgYXJlCisgICAgY29uZGl0aW9ucyAoUGVybCBhbHNvIGZvcmJpZHMgdGhlc2UgdG8gYmUgcmVwZWF0ZWQpLiBXZSBjb3B5IGNvZGUgaW50byBhCisgICAgbm9uLXJlZ2lzdGVyIHZhcmlhYmxlICh0ZW1wY29kZSkgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXNzIGl0cyBhZGRyZXNzCisgICAgYmVjYXVzZSBzb21lIGNvbXBpbGVycyBjb21wbGFpbiBvdGhlcndpc2UuIEF0IHRoZSBzdGFydCBvZiBhIGNvbmRpdGlvbmFsCisgICAgZ3JvdXAgd2hvc2UgY29uZGl0aW9uIGlzIGFuIGFzc2VydGlvbiwgY2ItPmlzY29uZGFzc2VydCBpcyBzZXQuIFdlIHVuc2V0IGl0CisgICAgaGVyZSBzbyBhcyB0byBhbGxvdyBhc3NlcnRpb25zIGxhdGVyIGluIHRoZSBncm91cCB0byBiZSBxdWFudGlmaWVkLiAqLworCisgICAgaWYgKGJyYXZhbHVlID49IE9QX0FTU0VSVCAmJiBicmF2YWx1ZSA8PSBPUF9BU1NFUlRCQUNLX05PVCAmJgorICAgICAgICBjYi0+aXNjb25kYXNzZXJ0KQorICAgICAgeworICAgICAgcHJldmlvdXMgPSBOVUxMOworICAgICAgY2ItPmlzY29uZGFzc2VydCA9IEZBTFNFOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIHByZXZpb3VzID0gY29kZTsKKyAgICAgIH0KKworICAgICpjb2RlID0gYnJhdmFsdWU7CisgICAgdGVtcGNvZGUgPSBjb2RlOworICAgIHRlbXByZXF2YXJ5ID0gY2ItPnJlcV92YXJ5b3B0OyAgICAgICAgLyogU2F2ZSB2YWx1ZSBiZWZvcmUgYnJhY2tldCAqLworICAgIHRlbXBicmFjb3VudCA9IGNiLT5icmFjb3VudDsgICAgICAgICAgLyogU2F2ZSB2YWx1ZSBiZWZvcmUgYnJhY2tldCAqLworICAgIGxlbmd0aF9wcmV2Z3JvdXAgPSAwOyAgICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBmb3IgcHJlLWNvbXBpbGUgcGhhc2UgKi8KKworICAgIGlmICghY29tcGlsZV9yZWdleCgKKyAgICAgICAgIG5ld29wdGlvbnMsICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBjb21wbGV0ZSBuZXcgb3B0aW9uIHN0YXRlICovCisgICAgICAgICAmdGVtcGNvZGUsICAgICAgICAgICAgICAgICAgICAgICAvKiBXaGVyZSB0byBwdXQgY29kZSAodXBkYXRlZCkgKi8KKyAgICAgICAgICZwdHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElucHV0IHBvaW50ZXIgKHVwZGF0ZWQpICovCisgICAgICAgICBlcnJvcmNvZGVwdHIsICAgICAgICAgICAgICAgICAgICAvKiBXaGVyZSB0byBwdXQgYW4gZXJyb3IgbWVzc2FnZSAqLworICAgICAgICAgKGJyYXZhbHVlID09IE9QX0FTU0VSVEJBQ0sgfHwKKyAgICAgICAgICBicmF2YWx1ZSA9PSBPUF9BU1NFUlRCQUNLX05PVCksIC8qIFRSVUUgaWYgYmFjayBhc3NlcnQgKi8KKyAgICAgICAgIHJlc2V0X2JyYWNvdW50LCAgICAgICAgICAgICAgICAgIC8qIFRydWUgaWYgKD98IGdyb3VwICovCisgICAgICAgICBza2lwdW5pdHMsICAgICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIG92ZXIgYnJhY2tldCBudW1iZXIgKi8KKyAgICAgICAgIGNvbmRfZGVwdGggKworICAgICAgICAgICAoKGJyYXZhbHVlID09IE9QX0NPTkQpPzE6MCksICAgLyogRGVwdGggb2YgY29uZGl0aW9uIHN1YnBhdHRlcm5zICovCisgICAgICAgICAmc3ViZmlyc3RjdSwgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgcG9zc2libGUgZmlyc3QgY2hhciAqLworICAgICAgICAgJnN1YmZpcnN0Y3VmbGFncywKKyAgICAgICAgICZzdWJyZXFjdSwgICAgICAgICAgICAgICAgICAgICAgIC8qIEZvciBwb3NzaWJsZSBsYXN0IGNoYXIgKi8KKyAgICAgICAgICZzdWJyZXFjdWZsYWdzLAorICAgICAgICAgYmNwdHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBicmFuY2ggY2hhaW4gKi8KKyAgICAgICAgIGNiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbXBpbGUgZGF0YSBibG9jayAqLworICAgICAgICAgKGxlbmd0aHB0ciA9PSBOVUxMKT8gTlVMTCA6ICAgICAgLyogQWN0dWFsIGNvbXBpbGUgcGhhc2UgKi8KKyAgICAgICAgICAgJmxlbmd0aF9wcmV2Z3JvdXAgICAgICAgICAgICAgIC8qIFByZS1jb21waWxlIHBoYXNlICovCisgICAgICAgICApKQorICAgICAgZ290byBGQUlMRUQ7CisKKyAgICBjYi0+cGFyZW5zX2RlcHRoIC09IDE7CisKKyAgICAvKiBJZiB0aGlzIHdhcyBhbiBhdG9taWMgZ3JvdXAgYW5kIHRoZXJlIGFyZSBubyBjYXB0dXJpbmcgZ3JvdXBzIHdpdGhpbiBpdCwKKyAgICBnZW5lcmF0ZSBPUF9PTkNFX05DIGluc3RlYWQgb2YgT1BfT05DRS4gKi8KKworICAgIGlmIChicmF2YWx1ZSA9PSBPUF9PTkNFICYmIGNiLT5icmFjb3VudCA8PSB0ZW1wYnJhY291bnQpCisgICAgICAqY29kZSA9IE9QX09OQ0VfTkM7CisKKyAgICBpZiAoYnJhdmFsdWUgPj0gT1BfQVNTRVJUICYmIGJyYXZhbHVlIDw9IE9QX0FTU0VSVEJBQ0tfTk9UKQorICAgICAgY2ItPmFzc2VydF9kZXB0aCAtPSAxOworCisgICAgLyogQXQgdGhlIGVuZCBvZiBjb21waWxpbmcsIGNvZGUgaXMgc3RpbGwgcG9pbnRpbmcgdG8gdGhlIHN0YXJ0IG9mIHRoZQorICAgIGdyb3VwLCB3aGlsZSB0ZW1wY29kZSBoYXMgYmVlbiB1cGRhdGVkIHRvIHBvaW50IHBhc3QgdGhlIGVuZCBvZiB0aGUgZ3JvdXAuCisgICAgVGhlIHBhdHRlcm4gcG9pbnRlciAocHRyKSBpcyBvbiB0aGUgYnJhY2tldC4KKworICAgIElmIHRoaXMgaXMgYSBjb25kaXRpb25hbCBicmFja2V0LCBjaGVjayB0aGF0IHRoZXJlIGFyZSBubyBtb3JlIHRoYW4KKyAgICB0d28gYnJhbmNoZXMgaW4gdGhlIGdyb3VwLCBvciBqdXN0IG9uZSBpZiBpdCdzIGEgREVGSU5FIGdyb3VwLiBXZSBkbyB0aGlzCisgICAgaW4gdGhlIHJlYWwgY29tcGlsZSBwaGFzZSwgbm90IGluIHRoZSBwcmUtcGFzcywgd2hlcmUgdGhlIHdob2xlIGdyb3VwIG1heQorICAgIG5vdCBiZSBhdmFpbGFibGUuICovCisKKyAgICBpZiAoYnJhdmFsdWUgPT0gT1BfQ09ORCAmJiBsZW5ndGhwdHIgPT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIFBDUkUyX1VDSEFSICp0YyA9IGNvZGU7CisgICAgICBpbnQgY29uZGNvdW50ID0gMDsKKworICAgICAgZG8geworICAgICAgICAgY29uZGNvdW50Kys7CisgICAgICAgICB0YyArPSBHRVQodGMsMSk7CisgICAgICAgICB9CisgICAgICB3aGlsZSAoKnRjICE9IE9QX0tFVCk7CisKKyAgICAgIC8qIEEgREVGSU5FIGdyb3VwIGlzIG5ldmVyIG9iZXllZCBpbmxpbmUgKHRoZSAiY29uZGl0aW9uIiBpcyBhbHdheXMKKyAgICAgIGZhbHNlKS4gSXQgbXVzdCBoYXZlIG9ubHkgb25lIGJyYW5jaC4gSGF2aW5nIGNoZWNrZWQgdGhpcywgY2hhbmdlIHRoZQorICAgICAgb3Bjb2RlIHRvIE9QX0ZBTFNFLiAqLworCisgICAgICBpZiAoY29kZVtMSU5LX1NJWkUrMV0gPT0gT1BfREVGSU5FKQorICAgICAgICB7CisgICAgICAgIGlmIChjb25kY291bnQgPiAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSNTQ7CisgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgICAgfQorICAgICAgICBjb2RlW0xJTktfU0laRSsxXSA9IE9QX0ZBTFNFOworICAgICAgICBicmF2YWx1ZSA9IE9QX0RFRklORTsgICAvKiBKdXN0IGEgZmxhZyB0byBzdXBwcmVzcyBjaGFyIGhhbmRsaW5nIGJlbG93ICovCisgICAgICAgIH0KKworICAgICAgLyogQSAibm9ybWFsIiBjb25kaXRpb25hbCBncm91cC4gSWYgdGhlcmUgaXMganVzdCBvbmUgYnJhbmNoLCB3ZSBtdXN0IG5vdAorICAgICAgbWFrZSB1c2Ugb2YgaXRzIGZpcnN0Y3Ugb3IgcmVxY3UsIGJlY2F1c2UgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGFuCisgICAgICBlbXB0eSBzZWNvbmQgYnJhbmNoLiAqLworCisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgaWYgKGNvbmRjb3VudCA+IDIpCisgICAgICAgICAgeworICAgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlIyNzsKKyAgICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgICB9CisgICAgICAgIGlmIChjb25kY291bnQgPT0gMSkgc3ViZmlyc3RjdWZsYWdzID0gc3VicmVxY3VmbGFncyA9IFJFUV9OT05FOworICAgICAgICB9CisgICAgICB9CisKKyAgICAvKiBFcnJvciBpZiBoaXQgZW5kIG9mIHBhdHRlcm4gKi8KKworICAgIGlmICgqcHRyICE9IENIQVJfUklHSFRfUEFSRU5USEVTSVMpCisgICAgICB7CisgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSMTQ7CisgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgIH0KKworICAgIC8qIEluIHRoZSBwcmUtY29tcGlsZSBwaGFzZSwgdXBkYXRlIHRoZSBsZW5ndGggYnkgdGhlIGxlbmd0aCBvZiB0aGUgZ3JvdXAsCisgICAgbGVzcyB0aGUgYnJhY2tldHMgYXQgZWl0aGVyIGVuZC4gVGhlbiByZWR1Y2UgdGhlIGNvbXBpbGVkIGNvZGUgdG8ganVzdCBhCisgICAgc2V0IG9mIG5vbi1jYXB0dXJpbmcgYnJhY2tldHMgc28gdGhhdCBpdCBkb2Vzbid0IHVzZSBtdWNoIG1lbW9yeSBpZiBpdCBpcworICAgIGR1cGxpY2F0ZWQgYnkgYSBxdWFudGlmaWVyLiovCisKKyAgICBpZiAobGVuZ3RocHRyICE9IE5VTEwpCisgICAgICB7CisgICAgICBpZiAoT0ZMT1dfTUFYIC0gKmxlbmd0aHB0ciA8IGxlbmd0aF9wcmV2Z3JvdXAgLSAyIC0gMipMSU5LX1NJWkUpCisgICAgICAgIHsKKyAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjIwOworICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgfQorICAgICAgKmxlbmd0aHB0ciArPSBsZW5ndGhfcHJldmdyb3VwIC0gMiAtIDIqTElOS19TSVpFOworICAgICAgY29kZSsrOyAgIC8qIFRoaXMgYWxyZWFkeSBjb250YWlucyBicmF2YWx1ZSAqLworICAgICAgUFVUSU5DKGNvZGUsIDAsIDEgKyBMSU5LX1NJWkUpOworICAgICAgKmNvZGUrKyA9IE9QX0tFVDsKKyAgICAgIFBVVElOQyhjb2RlLCAwLCAxICsgTElOS19TSVpFKTsKKyAgICAgIGJyZWFrOyAgICAvKiBObyBuZWVkIHRvIHdhc3RlIHRpbWUgd2l0aCBzcGVjaWFsIGNoYXJhY3RlciBoYW5kbGluZyAqLworICAgICAgfQorCisgICAgLyogT3RoZXJ3aXNlIHVwZGF0ZSB0aGUgbWFpbiBjb2RlIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgZ3JvdXAuICovCisKKyAgICBjb2RlID0gdGVtcGNvZGU7CisKKyAgICAvKiBGb3IgYSBERUZJTkUgZ3JvdXAsIHJlcXVpcmVkIGFuZCBmaXJzdCBjaGFyYWN0ZXIgc2V0dGluZ3MgYXJlIG5vdAorICAgIHJlbGV2YW50LiAqLworCisgICAgaWYgKGJyYXZhbHVlID09IE9QX0RFRklORSkgYnJlYWs7CisKKyAgICAvKiBIYW5kbGUgdXBkYXRpbmcgb2YgdGhlIHJlcXVpcmVkIGFuZCBmaXJzdCBjaGFyYWN0ZXJzIGZvciBvdGhlciB0eXBlcyBvZgorICAgIGdyb3VwLiBVcGRhdGUgZm9yIG5vcm1hbCBicmFja2V0cyBvZiBhbGwga2luZHMsIGFuZCBjb25kaXRpb25zIHdpdGggdHdvCisgICAgYnJhbmNoZXMgKHNlZSBjb2RlIGFib3ZlKS4gSWYgdGhlIGJyYWNrZXQgaXMgZm9sbG93ZWQgYnkgYSBxdWFudGlmaWVyIHdpdGgKKyAgICB6ZXJvIHJlcGVhdCwgd2UgaGF2ZSB0byBiYWNrIG9mZi4gSGVuY2UgdGhlIGRlZmluaXRpb24gb2YgemVyb3JlcWN1IGFuZAorICAgIHplcm9maXJzdGN1IG91dHNpZGUgdGhlIG1haW4gbG9vcCBzbyB0aGF0IHRoZXkgY2FuIGJlIGFjY2Vzc2VkIGZvciB0aGUKKyAgICBiYWNrIG9mZi4gKi8KKworICAgIHplcm9yZXFjdSA9IHJlcWN1OworICAgIHplcm9yZXFjdWZsYWdzID0gcmVxY3VmbGFnczsKKyAgICB6ZXJvZmlyc3RjdSA9IGZpcnN0Y3U7CisgICAgemVyb2ZpcnN0Y3VmbGFncyA9IGZpcnN0Y3VmbGFnczsKKyAgICBncm91cHNldGZpcnN0Y3UgPSBGQUxTRTsKKworICAgIGlmIChicmF2YWx1ZSA+PSBPUF9PTkNFKQorICAgICAgeworICAgICAgLyogSWYgd2UgaGF2ZSBub3QgeWV0IHNldCBhIGZpcnN0Y3UgaW4gdGhpcyBicmFuY2gsIHRha2UgaXQgZnJvbSB0aGUKKyAgICAgIHN1YnBhdHRlcm4sIHJlbWVtYmVyaW5nIHRoYXQgaXQgd2FzIHNldCBoZXJlIHNvIHRoYXQgYSByZXBlYXQgb2YgbW9yZQorICAgICAgdGhhbiBvbmUgY2FuIHJlcGxpY2F0ZSBpdCBhcyByZXFjdSBpZiBuZWNlc3NhcnkuIElmIHRoZSBzdWJwYXR0ZXJuIGhhcworICAgICAgbm8gZmlyc3RjdSwgc2V0ICJub25lIiBmb3IgdGhlIHdob2xlIGJyYW5jaC4gSW4gYm90aCBjYXNlcywgYSB6ZXJvCisgICAgICByZXBlYXQgZm9yY2VzIGZpcnN0Y3UgdG8gIm5vbmUiLiAqLworCisgICAgICBpZiAoZmlyc3RjdWZsYWdzID09IFJFUV9VTlNFVCAmJiBzdWJmaXJzdGN1ZmxhZ3MgIT0gUkVRX1VOU0VUKQorICAgICAgICB7CisgICAgICAgIGlmIChzdWJmaXJzdGN1ZmxhZ3MgPj0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgZmlyc3RjdSA9IHN1YmZpcnN0Y3U7CisgICAgICAgICAgZmlyc3RjdWZsYWdzID0gc3ViZmlyc3RjdWZsYWdzOworICAgICAgICAgIGdyb3Vwc2V0Zmlyc3RjdSA9IFRSVUU7CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGZpcnN0Y3VmbGFncyA9IFJFUV9OT05FOworICAgICAgICB6ZXJvZmlyc3RjdWZsYWdzID0gUkVRX05PTkU7CisgICAgICAgIH0KKworICAgICAgLyogSWYgZmlyc3RjdSB3YXMgcHJldmlvdXNseSBzZXQsIGNvbnZlcnQgdGhlIHN1YnBhdHRlcm4ncyBmaXJzdGN1CisgICAgICBpbnRvIHJlcWN1IGlmIHRoZXJlIHdhc24ndCBvbmUsIHVzaW5nIHRoZSB2YXJ5IGZsYWcgdGhhdCB3YXMgaW4KKyAgICAgIGV4aXN0ZW5jZSBiZWZvcmVoYW5kLiAqLworCisgICAgICBlbHNlIGlmIChzdWJmaXJzdGN1ZmxhZ3MgPj0gMCAmJiBzdWJyZXFjdWZsYWdzIDwgMCkKKyAgICAgICAgeworICAgICAgICBzdWJyZXFjdSA9IHN1YmZpcnN0Y3U7CisgICAgICAgIHN1YnJlcWN1ZmxhZ3MgPSBzdWJmaXJzdGN1ZmxhZ3MgfCB0ZW1wcmVxdmFyeTsKKyAgICAgICAgfQorCisgICAgICAvKiBJZiB0aGUgc3VicGF0dGVybiBzZXQgYSByZXF1aXJlZCBieXRlIChvciBzZXQgYSBmaXJzdCBieXRlIHRoYXQgaXNuJ3QKKyAgICAgIHJlYWxseSB0aGUgZmlyc3QgYnl0ZSAtIHNlZSBhYm92ZSksIHNldCBpdC4gKi8KKworICAgICAgaWYgKHN1YnJlcWN1ZmxhZ3MgPj0gMCkKKyAgICAgICAgeworICAgICAgICByZXFjdSA9IHN1YnJlcWN1OworICAgICAgICByZXFjdWZsYWdzID0gc3VicmVxY3VmbGFnczsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogRm9yIGEgZm9yd2FyZCBhc3NlcnRpb24sIHdlIHRha2UgdGhlIHJlcWN1LCBpZiBzZXQuIFRoaXMgY2FuIGJlCisgICAgaGVscGZ1bCBpZiB0aGUgcGF0dGVybiB0aGF0IGZvbGxvd3MgdGhlIGFzc2VydGlvbiBkb2Vzbid0IHNldCBhIGRpZmZlcmVudAorICAgIGNoYXIuIEZvciBleGFtcGxlLCBpdCdzIHVzZWZ1bCBmb3IgLyg/PWFiY2RlKS4rLy4gV2UgY2FuJ3Qgc2V0IGZpcnN0Y3UKKyAgICBmb3IgYW4gYXNzZXJ0aW9uLCBob3dldmVyIGJlY2F1c2UgaXQgbGVhZHMgdG8gaW5jb3JyZWN0IGVmZmVjdCBmb3IgcGF0dGVybnMKKyAgICBzdWNoIGFzIC8oPz1hKWEuKy8gd2hlbiB0aGUgInJlYWwiICJhIiB3b3VsZCB0aGVuIGJlY29tZSBhIHJlcWN1IGluc3RlYWQKKyAgICBvZiBhIGZpcnN0Y3UuIFRoaXMgaXMgb3ZlcmNvbWUgYnkgYSBzY2FuIGF0IHRoZSBlbmQgaWYgdGhlcmUncyBubworICAgIGZpcnN0Y3UsIGxvb2tpbmcgZm9yIGFuIGFzc2VydGVkIGZpcnN0IGNoYXIuICovCisKKyAgICBlbHNlIGlmIChicmF2YWx1ZSA9PSBPUF9BU1NFUlQgJiYgc3VicmVxY3VmbGFncyA+PSAwKQorICAgICAgeworICAgICAgcmVxY3UgPSBzdWJyZXFjdTsKKyAgICAgIHJlcWN1ZmxhZ3MgPSBzdWJyZXFjdWZsYWdzOworICAgICAgfQorICAgIGJyZWFrOyAgICAgLyogRW5kIG9mIHByb2Nlc3NpbmcgJygnICovCisKKworICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworICAgIC8qIEhhbmRsZSBtZXRhc2VxdWVuY2VzIGludHJvZHVjZWQgYnkgXC4gRm9yIG9uZXMgbGlrZSBcZCwgdGhlIEVTQ18gdmFsdWVzCisgICAgYXJlIGFycmFuZ2VkIHRvIGJlIHRoZSBuZWdhdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBPUF92YWx1ZXMgaW4gdGhlCisgICAgZGVmYXVsdCBjYXNlIHdoZW4gUENSRTJfVUNQIGlzIG5vdCBzZXQuIEZvciB0aGUgYmFjayByZWZlcmVuY2VzLCB0aGUgdmFsdWVzCisgICAgYXJlIG5lZ2F0aXZlIHRoZSByZWZlcmVuY2UgbnVtYmVyLiBPbmx5IGJhY2sgcmVmZXJlbmNlcyBhbmQgdGhvc2UgdHlwZXMKKyAgICB0aGF0IGNvbnN1bWUgYSBjaGFyYWN0ZXIgbWF5IGJlIHJlcGVhdGVkLiBXZSBjYW4gdGVzdCBmb3IgdmFsdWVzIGJldHdlZW4KKyAgICBFU0NfYiBhbmQgRVNDX1ogZm9yIHRoZSBsYXR0ZXI7IHRoaXMgbWF5IGhhdmUgdG8gY2hhbmdlIGlmIGFueSBuZXcgb25lcyBhcmUKKyAgICBldmVyIGNyZWF0ZWQuCisKKyAgICBOb3RlOiBcUSBhbmQgXEUgYXJlIGhhbmRsZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjaGFyYWN0ZXItcHJvY2Vzc2luZyBsb29wLAorICAgIG5vdCBoZXJlLiAqLworCisgICAgY2FzZSBDSEFSX0JBQ0tTTEFTSDoKKyAgICB0ZW1wcHRyID0gcHRyOworICAgIGVzY2FwZSA9IFBSSVYoY2hlY2tfZXNjYXBlKSgmcHRyLCBjYi0+ZW5kX3BhdHRlcm4sICZlYywgZXJyb3Jjb2RlcHRyLAorICAgICAgb3B0aW9ucywgRkFMU0UsIGNiKTsKKyAgICBpZiAoKmVycm9yY29kZXB0ciAhPSAwKSBnb3RvIEZBSUxFRDsKKworICAgIGlmIChlc2NhcGUgPT0gMCkgICAgICAgICAgICAgICAgICAvKiBUaGUgZXNjYXBlIGNvZGVkIGEgc2luZ2xlIGNoYXJhY3RlciAqLworICAgICAgYyA9IGVjOworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIC8qIEZvciBtZXRhc2VxdWVuY2VzIHRoYXQgYWN0dWFsbHkgbWF0Y2ggYSBjaGFyYWN0ZXIsIHdlIGRpc2FibGUgdGhlCisgICAgICBzZXR0aW5nIG9mIGEgZmlyc3QgY2hhcmFjdGVyIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gc2V0LiAqLworCisgICAgICBpZiAoZmlyc3RjdWZsYWdzID09IFJFUV9VTlNFVCAmJiBlc2NhcGUgPiBFU0NfYiAmJiBlc2NhcGUgPCBFU0NfWikKKyAgICAgICAgZmlyc3RjdWZsYWdzID0gUkVRX05PTkU7CisKKyAgICAgIC8qIFNldCB2YWx1ZXMgdG8gcmVzZXQgdG8gaWYgdGhpcyBpcyBmb2xsb3dlZCBieSBhIHplcm8gcmVwZWF0LiAqLworCisgICAgICB6ZXJvZmlyc3RjdSA9IGZpcnN0Y3U7CisgICAgICB6ZXJvZmlyc3RjdWZsYWdzID0gZmlyc3RjdWZsYWdzOworICAgICAgemVyb3JlcWN1ID0gcmVxY3U7CisgICAgICB6ZXJvcmVxY3VmbGFncyA9IHJlcWN1ZmxhZ3M7CisKKyAgICAgIC8qIFxnPG5hbWU+IG9yIFxnJ25hbWUnIGlzIGEgc3Vicm91dGluZSBjYWxsIGJ5IG5hbWUgYW5kIFxnPG4+IG9yIFxnJ24nCisgICAgICBpcyBhIHN1YnJvdXRpbmUgY2FsbCBieSBudW1iZXIgKE9uaWd1cnVtYSBzeW50YXgpLiBJbiBmYWN0LCB0aGUgdmFsdWUKKyAgICAgIEVTQ19nIGlzIHJldHVybmVkIG9ubHkgZm9yIHRoZXNlIGNhc2VzLiBTbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciA8CisgICAgICBvciAnIGlmIHRoZSB2YWx1ZSBpcyBFU0NfZy4gRm9yIHRoZSBQZXJsIHN5bnRheCBcZ3tufSB0aGUgdmFsdWUgaXMKKyAgICAgIC1uLCBhbmQgZm9yIHRoZSBQZXJsIHN5bnRheCBcZ3tuYW1lfSB0aGUgcmVzdWx0IGlzIEVTQ19rIChhcworICAgICAgdGhhdCBpcyBhIHN5bm9ueW0gZm9yIGEgbmFtZWQgYmFjayByZWZlcmVuY2UpLiAqLworCisgICAgICBpZiAoZXNjYXBlID09IEVTQ19nKQorICAgICAgICB7CisgICAgICAgIFBDUkUyX1NQVFIgcDsKKyAgICAgICAgdWludDMyX3QgY2Y7CisKKyAgICAgICAgdGVybWluYXRvciA9ICgqKCsrcHRyKSA9PSBDSEFSX0xFU1NfVEhBTl9TSUdOKT8KKyAgICAgICAgICBDSEFSX0dSRUFURVJfVEhBTl9TSUdOIDogQ0hBUl9BUE9TVFJPUEhFOworCisgICAgICAgIC8qIFRoZXNlIHR3byBzdGF0ZW1lbnRzIHN0b3AgdGhlIGNvbXBpbGVyIGZvciB3YXJuaW5nIGFib3V0IHBvc3NpYmx5CisgICAgICAgIHVuc2V0IHZhcmlhYmxlcyBjYXVzZWQgYnkgdGhlIGp1bXAgdG8gSEFORExFX05VTUVSSUNBTF9SRUNVUlNJT04uIEluCisgICAgICAgIGZhY3QsIGJlY2F1c2Ugd2UgZG8gdGhlIGNoZWNrIGZvciBhIG51bWJlciBiZWxvdywgdGhlIHBhdGhzIHRoYXQKKyAgICAgICAgd291bGQgYWN0dWFsbHkgYmUgaW4gZXJyb3IgYXJlIG5ldmVyIHRha2VuLiAqLworCisgICAgICAgIHNraXB1bml0cyA9IDA7CisgICAgICAgIHJlc2V0X2JyYWNvdW50ID0gRkFMU0U7CisKKyAgICAgICAgLyogSWYgaXQncyBub3QgYSBzaWduZWQgb3IgdW5zaWduZWQgbnVtYmVyLCB0cmVhdCBpdCBhcyBhIG5hbWUuICovCisKKyAgICAgICAgY2YgPSBwdHJbMV07CisgICAgICAgIGlmIChjZiAhPSBDSEFSX1BMVVMgJiYgY2YgIT0gQ0hBUl9NSU5VUyAmJiAhSVNfRElHSVQoY2YpKQorICAgICAgICAgIHsKKyAgICAgICAgICBpc19yZWN1cnNlID0gVFJVRTsKKyAgICAgICAgICBnb3RvIE5BTUVEX1JFRl9PUl9SRUNVUlNFOworICAgICAgICAgIH0KKworICAgICAgICAvKiBTaWduZWQgb3IgdW5zaWduZWQgbnVtYmVyIChjZiA9IHB0clsxXSkgaXMga25vd24gdG8gYmUgcGx1cyBvciBtaW51cworICAgICAgICBvciBhIGRpZ2l0LiAqLworCisgICAgICAgIHAgPSBwdHIgKyAyOworICAgICAgICB3aGlsZSAoSVNfRElHSVQoKnApKSBwKys7CisgICAgICAgIGlmICgqcCAhPSAoUENSRTJfVUNIQVIpdGVybWluYXRvcikKKyAgICAgICAgICB7CisgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjU3OworICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKyAgICAgICAgcHRyKys7CisgICAgICAgIGdvdG8gSEFORExFX05VTUVSSUNBTF9SRUNVUlNJT047CisgICAgICAgIH0KKworICAgICAgLyogXGs8bmFtZT4gb3IgXGsnbmFtZScgaXMgYSBiYWNrIHJlZmVyZW5jZSBieSBuYW1lIChQZXJsIHN5bnRheCkuCisgICAgICBXZSBhbHNvIHN1cHBvcnQgXGt7bmFtZX0gKC5ORVQgc3ludGF4KS4gICovCisKKyAgICAgIGlmIChlc2NhcGUgPT0gRVNDX2spCisgICAgICAgIHsKKyAgICAgICAgaWYgKChwdHJbMV0gIT0gQ0hBUl9MRVNTX1RIQU5fU0lHTiAmJgorICAgICAgICAgIHB0clsxXSAhPSBDSEFSX0FQT1NUUk9QSEUgJiYgcHRyWzFdICE9IENIQVJfTEVGVF9DVVJMWV9CUkFDS0VUKSkKKyAgICAgICAgICB7CisgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjY5OworICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKyAgICAgICAgaXNfcmVjdXJzZSA9IEZBTFNFOworICAgICAgICB0ZXJtaW5hdG9yID0gKCooKytwdHIpID09IENIQVJfTEVTU19USEFOX1NJR04pPworICAgICAgICAgIENIQVJfR1JFQVRFUl9USEFOX1NJR04gOiAoKnB0ciA9PSBDSEFSX0FQT1NUUk9QSEUpPworICAgICAgICAgIENIQVJfQVBPU1RST1BIRSA6IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVDsKKyAgICAgICAgZ290byBOQU1FRF9SRUZfT1JfUkVDVVJTRTsKKyAgICAgICAgfQorCisgICAgICAvKiBCYWNrIHJlZmVyZW5jZXMgYXJlIGhhbmRsZWQgc3BlY2lhbGx5OyBtdXN0IGRpc2FibGUgZmlyc3RjdSBpZgorICAgICAgbm90IHNldCB0byBjb3BlIHdpdGggY2FzZXMgbGlrZSAoPz0oXHcrKSlcMTogd2hpY2ggd291bGQgb3RoZXJ3aXNlIHNldAorICAgICAgJzonIGxhdGVyLiAqLworCisgICAgICBpZiAoZXNjYXBlIDwgMCkKKyAgICAgICAgeworICAgICAgICBvcGVuX2NhcGl0ZW0gKm9jOworICAgICAgICByZWNubyA9IC1lc2NhcGU7CisKKyAgICAgICAgLyogQ29tZSBoZXJlIGZyb20gbmFtZWQgYmFja3JlZiBoYW5kbGluZyB3aGVuIHRoZSByZWZlcmVuY2UgaXMgdG8gYQorICAgICAgICBzaW5nbGUgZ3JvdXAgKGkuZS4gbm90IHRvIGEgZHVwbGljYXRlZCBuYW1lKS4gKi8KKworICAgICAgICBIQU5ETEVfUkVGRVJFTkNFOgorICAgICAgICBpZiAocmVjbm8gPiAoaW50KWNiLT5maW5hbF9icmFjb3VudCkKKyAgICAgICAgICB7CisgICAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjE1OworICAgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKGZpcnN0Y3VmbGFncyA9PSBSRVFfVU5TRVQpIGZpcnN0Y3VmbGFncyA9IFJFUV9OT05FOworICAgICAgICBwcmV2aW91cyA9IGNvZGU7CisgICAgICAgICpjb2RlKysgPSAoKG9wdGlvbnMgJiBQQ1JFMl9DQVNFTEVTUykgIT0gMCk/IE9QX1JFRkkgOiBPUF9SRUY7CisgICAgICAgIFBVVDJJTkMoY29kZSwgMCwgcmVjbm8pOworICAgICAgICBjYi0+YmFja3JlZl9tYXAgfD0gKHJlY25vIDwgMzIpPyAoMXUgPDwgcmVjbm8pIDogMTsKKyAgICAgICAgaWYgKCh1aW50MzJfdClyZWNubyA+IGNiLT50b3BfYmFja3JlZikgY2ItPnRvcF9iYWNrcmVmID0gcmVjbm87CisKKyAgICAgICAgLyogQ2hlY2sgdG8gc2VlIGlmIHRoaXMgYmFjayByZWZlcmVuY2UgaXMgcmVjdXJzaXZlLCB0aGF0IGl0LCBpdAorICAgICAgICBpcyBpbnNpZGUgdGhlIGdyb3VwIHRoYXQgaXQgcmVmZXJlbmNlcy4gQSBmbGFnIGlzIHNldCBzbyB0aGF0IHRoZQorICAgICAgICBncm91cCBjYW4gYmUgbWFkZSBhdG9taWMuICovCisKKyAgICAgICAgZm9yIChvYyA9IGNiLT5vcGVuX2NhcHM7IG9jICE9IE5VTEw7IG9jID0gb2MtPm5leHQpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChvYy0+bnVtYmVyID09IHJlY25vKQorICAgICAgICAgICAgeworICAgICAgICAgICAgb2MtPmZsYWcgPSBUUlVFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIFNvIGFyZSBVbmljb2RlIHByb3BlcnR5IG1hdGNoZXMsIGlmIHN1cHBvcnRlZC4gKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgZWxzZSBpZiAoZXNjYXBlID09IEVTQ19QIHx8IGVzY2FwZSA9PSBFU0NfcCkKKyAgICAgICAgeworICAgICAgICBCT09MIG5lZ2F0ZWQ7CisgICAgICAgIHVuc2lnbmVkIGludCBwdHlwZSA9IDAsIHBkYXRhID0gMDsKKyAgICAgICAgaWYgKCFnZXRfdWNwKCZwdHIsICZuZWdhdGVkLCAmcHR5cGUsICZwZGF0YSwgZXJyb3Jjb2RlcHRyLCBjYikpCisgICAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgIHByZXZpb3VzID0gY29kZTsKKyAgICAgICAgKmNvZGUrKyA9ICgoZXNjYXBlID09IEVTQ19wKSAhPSBuZWdhdGVkKT8gT1BfUFJPUCA6IE9QX05PVFBST1A7CisgICAgICAgICpjb2RlKysgPSBwdHlwZTsKKyAgICAgICAgKmNvZGUrKyA9IHBkYXRhOworICAgICAgICB9CisjZWxzZQorCisgICAgICAvKiBJZiBVbmljb2RlIHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQsIFxYLCBcUCwgYW5kIFxwIGFyZSBub3QKKyAgICAgIGFsbG93ZWQuICovCisKKyAgICAgIGVsc2UgaWYgKGVzY2FwZSA9PSBFU0NfWCB8fCBlc2NhcGUgPT0gRVNDX1AgfHwgZXNjYXBlID09IEVTQ19wKQorICAgICAgICB7CisgICAgICAgICplcnJvcmNvZGVwdHIgPSBFUlI0NTsKKyAgICAgICAgZ290byBGQUlMRUQ7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAvKiBUaGUgdXNlIG9mIFxDIGNhbiBiZSBsb2NrZWQgb3V0LiAqLworCisjaWZkZWYgTkVWRVJfQkFDS1NMQVNIX0MKKyAgICAgIGVsc2UgaWYgKGVzY2FwZSA9PSBFU0NfQykKKyAgICAgICAgeworICAgICAgICAqZXJyb3Jjb2RlcHRyID0gRVJSODU7CisgICAgICAgIGdvdG8gRkFJTEVEOworICAgICAgICB9CisjZWxzZQorICAgICAgZWxzZSBpZiAoZXNjYXBlID09IEVTQ19DICYmIChvcHRpb25zICYgUENSRTJfTkVWRVJfQkFDS1NMQVNIX0MpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjgzOworICAgICAgICBnb3RvIEZBSUxFRDsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgIC8qIEZvciB0aGUgcmVzdCAoaW5jbHVkaW5nIFxYIHdoZW4gVW5pY29kZSBwcm9wZXJ0aWVzIGFyZSBzdXBwb3J0ZWQpLCB3ZQorICAgICAgY2FuIG9idGFpbiB0aGUgT1AgdmFsdWUgYnkgbmVnYXRpbmcgdGhlIGVzY2FwZSB2YWx1ZSBpbiB0aGUgZGVmYXVsdAorICAgICAgc2l0dWF0aW9uIHdoZW4gUENSRTJfVUNQIGlzIG5vdCBzZXQuIFdoZW4gaXQgKmlzKiBzZXQsIHdlIHN1YnN0aXR1dGUKKyAgICAgIFVuaWNvZGUgcHJvcGVydHkgdGVzdHMuIE5vdGUgdGhhdCBcYiBhbmQgXEIgZG8gYSBvbmUtY2hhcmFjdGVyCisgICAgICBsb29rYmVoaW5kLCBhbmQgXEEgYWxzbyBiZWhhdmVzIGFzIGlmIGl0IGRvZXMuICovCisKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBpZiAoZXNjYXBlID09IEVTQ19DKSBjYi0+ZXh0ZXJuYWxfZmxhZ3MgfD0gUENSRTJfSEFTQktDOyAvKiBSZWNvcmQgKi8KKyAgICAgICAgaWYgKChlc2NhcGUgPT0gRVNDX2IgfHwgZXNjYXBlID09IEVTQ19CIHx8IGVzY2FwZSA9PSBFU0NfQSkgJiYKKyAgICAgICAgICAgICBjYi0+bWF4X2xvb2tiZWhpbmQgPT0gMCkKKyAgICAgICAgICBjYi0+bWF4X2xvb2tiZWhpbmQgPSAxOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICBpZiAoZXNjYXBlID49IEVTQ19EVSAmJiBlc2NhcGUgPD0gRVNDX3d1KQorICAgICAgICAgIHsKKyAgICAgICAgICBjYi0+bmVzdHB0clsxXSA9IGNiLT5uZXN0cHRyWzBdOyAgICAgICAgIC8qIEJhY2sgdXAgaWYgYXQgMm5kIGxldmVsICovCisgICAgICAgICAgY2ItPm5lc3RwdHJbMF0gPSBwdHIgKyAxOyAgICAgICAgICAgICAgICAvKiBXaGVyZSB0byByZXN1bWUgKi8KKyAgICAgICAgICBwdHIgPSBzdWJzdGl0dXRlc1tlc2NhcGUgLSBFU0NfRFVdIC0gMTsgIC8qIEp1c3QgYmVmb3JlIHN1YnN0aXR1dGUgKi8KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAvKiBJbiBub24tVVRGIG1vZGUsIHdlIHR1cm4gXEMgaW50byBPUF9BTExBTlkgaW5zdGVhZCBvZiBPUF9BTllCWVRFCisgICAgICAgIHNvIHRoYXQgaXQgd29ya3MgaW4gREZBIG1vZGUgYW5kIGluIGxvb2tiZWhpbmRzLiAqLworCisgICAgICAgICAgeworICAgICAgICAgIHByZXZpb3VzID0gKGVzY2FwZSA+IEVTQ19iICYmIGVzY2FwZSA8IEVTQ19aKT8gY29kZSA6IE5VTEw7CisgICAgICAgICAgKmNvZGUrKyA9ICghdXRmICYmIGVzY2FwZSA9PSBFU0NfQyk/IE9QX0FMTEFOWSA6IGVzY2FwZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgLyogV2UgaGF2ZSBhIGRhdGEgY2hhcmFjdGVyIHdob3NlIHZhbHVlIGlzIGluIGMuIEluIFVURi04IG1vZGUgaXQgbWF5IGhhdmUKKyAgICBhIHZhbHVlID4gMTI3LiBXZSBzZXQgaXRzIHJlcHJlc2VudGF0aW9uIGluIHRoZSBsZW5ndGgvYnVmZmVyLCBhbmQgdGhlbgorICAgIGhhbmRsZSBpdCBhcyBhIGRhdGEgY2hhcmFjdGVyLiAqLworCisgICAgbWNsZW5ndGggPSBQVVRDSEFSKGMsIG1jYnVmZmVyKTsKKyAgICBnb3RvIE9ORV9DSEFSOworCisKKyAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyAgICAvKiBIYW5kbGUgYSBsaXRlcmFsIGNoYXJhY3Rlci4gSXQgaXMgZ3VhcmFudGVlZCBub3QgdG8gYmUgd2hpdGVzcGFjZSBvciAjCisgICAgd2hlbiB0aGUgZXh0ZW5kZWQgZmxhZyBpcyBzZXQuIElmIHdlIGFyZSBpbiBhIFVURiBtb2RlLCBpdCBtYXkgYmUgYQorICAgIG11bHRpLXVuaXQgbGl0ZXJhbCBjaGFyYWN0ZXIuICovCisKKyAgICBkZWZhdWx0OgorICAgIE5PUk1BTF9DSEFSOgorICAgIG1jbGVuZ3RoID0gMTsKKyAgICBtY2J1ZmZlclswXSA9IGM7CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICBpZiAodXRmICYmIEhBU19FWFRSQUxFTihjKSkKKyAgICAgIEFDUk9TU0NIQVIoVFJVRSwgcHRyWzFdLCBtY2J1ZmZlclttY2xlbmd0aCsrXSA9ICooKytwdHIpKTsKKyNlbmRpZgorCisgICAgLyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIHRoZSBjaGFyYWN0ZXIncyBieXRlcyBpbiBtY2J1ZmZlciwgYW5kIHRoZSBsZW5ndGgKKyAgICBpbiBtY2xlbmd0aC4gV2hlbiBub3QgaW4gVVRGIG1vZGUsIHRoZSBsZW5ndGggaXMgYWx3YXlzIDEuICovCisKKyAgICBPTkVfQ0hBUjoKKyAgICBwcmV2aW91cyA9IGNvZGU7CisKKyAgICAvKiBGb3IgY2FzZWxlc3MgVVRGIG1vZGUsIGNoZWNrIHdoZXRoZXIgdGhpcyBjaGFyYWN0ZXIgaGFzIG1vcmUgdGhhbiBvbmUKKyAgICBvdGhlciBjYXNlLiBJZiBzbywgZ2VuZXJhdGUgYSBzcGVjaWFsIE9QX1BST1AgaXRlbSBpbnN0ZWFkIG9mIE9QX0NIQVJJLiAqLworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgaWYgKHV0ZiAmJiAob3B0aW9ucyAmIFBDUkUyX0NBU0VMRVNTKSAhPSAwKQorICAgICAgeworICAgICAgR0VUQ0hBUihjLCBtY2J1ZmZlcik7CisgICAgICBpZiAoKGMgPSBVQ0RfQ0FTRVNFVChjKSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAqY29kZSsrID0gT1BfUFJPUDsKKyAgICAgICAgKmNvZGUrKyA9IFBUX0NMSVNUOworICAgICAgICAqY29kZSsrID0gYzsKKyAgICAgICAgaWYgKGZpcnN0Y3VmbGFncyA9PSBSRVFfVU5TRVQpCisgICAgICAgICAgZmlyc3RjdWZsYWdzID0gemVyb2ZpcnN0Y3VmbGFncyA9IFJFUV9OT05FOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorI2VuZGlmCisKKyAgICAvKiBDYXNlZnVsIG1hdGNoZXMsIG9yIG5vdCBvbmUgb2YgdGhlIG11bHRpY2FzZSBjaGFyYWN0ZXJzLiAqLworCisgICAgKmNvZGUrKyA9ICgob3B0aW9ucyAmIFBDUkUyX0NBU0VMRVNTKSAhPSAwKT8gT1BfQ0hBUkkgOiBPUF9DSEFSOworICAgIGZvciAoYyA9IDA7IGMgPCBtY2xlbmd0aDsgYysrKSAqY29kZSsrID0gbWNidWZmZXJbY107CisKKyAgICAvKiBSZW1lbWJlciBpZiBcciBvciBcbiB3ZXJlIHNlZW4gKi8KKworICAgIGlmIChtY2J1ZmZlclswXSA9PSBDSEFSX0NSIHx8IG1jYnVmZmVyWzBdID09IENIQVJfTkwpCisgICAgICBjYi0+ZXh0ZXJuYWxfZmxhZ3MgfD0gUENSRTJfSEFTQ1JPUkxGOworCisgICAgLyogU2V0IHRoZSBmaXJzdCBhbmQgcmVxdWlyZWQgYnl0ZXMgYXBwcm9wcmlhdGVseS4gSWYgbm8gcHJldmlvdXMgZmlyc3QKKyAgICBieXRlLCBzZXQgaXQgZnJvbSB0aGlzIGNoYXJhY3RlciwgYnV0IHJldmVydCB0byBub25lIG9uIGEgemVybyByZXBlYXQuCisgICAgT3RoZXJ3aXNlLCBsZWF2ZSB0aGUgZmlyc3RjdSB2YWx1ZSBhbG9uZSwgYW5kIGRvbid0IGNoYW5nZSBpdCBvbiBhIHplcm8KKyAgICByZXBlYXQuICovCisKKyAgICBpZiAoZmlyc3RjdWZsYWdzID09IFJFUV9VTlNFVCkKKyAgICAgIHsKKyAgICAgIHplcm9maXJzdGN1ZmxhZ3MgPSBSRVFfTk9ORTsKKyAgICAgIHplcm9yZXFjdSA9IHJlcWN1OworICAgICAgemVyb3JlcWN1ZmxhZ3MgPSByZXFjdWZsYWdzOworCisgICAgICAvKiBJZiB0aGUgY2hhcmFjdGVyIGlzIG1vcmUgdGhhbiBvbmUgYnl0ZSBsb25nLCB3ZSBjYW4gc2V0IGZpcnN0Y3UKKyAgICAgIG9ubHkgaWYgaXQgaXMgbm90IHRvIGJlIG1hdGNoZWQgY2FzZWxlc3NseS4gKi8KKworICAgICAgaWYgKG1jbGVuZ3RoID09IDEgfHwgcmVxX2Nhc2VvcHQgPT0gMCkKKyAgICAgICAgeworICAgICAgICBmaXJzdGN1ID0gbWNidWZmZXJbMF0gfCByZXFfY2FzZW9wdDsKKyAgICAgICAgZmlyc3RjdSA9IG1jYnVmZmVyWzBdOworICAgICAgICBmaXJzdGN1ZmxhZ3MgPSByZXFfY2FzZW9wdDsKKworICAgICAgICBpZiAobWNsZW5ndGggIT0gMSkKKyAgICAgICAgICB7CisgICAgICAgICAgcmVxY3UgPSBjb2RlWy0xXTsKKyAgICAgICAgICByZXFjdWZsYWdzID0gY2ItPnJlcV92YXJ5b3B0OworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBmaXJzdGN1ZmxhZ3MgPSByZXFjdWZsYWdzID0gUkVRX05PTkU7CisgICAgICB9CisKKyAgICAvKiBmaXJzdGN1IHdhcyBwcmV2aW91c2x5IHNldDsgd2UgY2FuIHNldCByZXFjdSBvbmx5IGlmIHRoZSBsZW5ndGggaXMKKyAgICAxIG9yIHRoZSBtYXRjaGluZyBpcyBjYXNlZnVsLiAqLworCisgICAgZWxzZQorICAgICAgeworICAgICAgemVyb2ZpcnN0Y3UgPSBmaXJzdGN1OworICAgICAgemVyb2ZpcnN0Y3VmbGFncyA9IGZpcnN0Y3VmbGFnczsKKyAgICAgIHplcm9yZXFjdSA9IHJlcWN1OworICAgICAgemVyb3JlcWN1ZmxhZ3MgPSByZXFjdWZsYWdzOworICAgICAgaWYgKG1jbGVuZ3RoID09IDEgfHwgcmVxX2Nhc2VvcHQgPT0gMCkKKyAgICAgICAgeworICAgICAgICByZXFjdSA9IGNvZGVbLTFdOworICAgICAgICByZXFjdWZsYWdzID0gcmVxX2Nhc2VvcHQgfCBjYi0+cmVxX3ZhcnlvcHQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIGJyZWFrOyAgICAgICAgICAgIC8qIEVuZCBvZiBsaXRlcmFsIGNoYXJhY3RlciBoYW5kbGluZyAqLworICAgIH0KKyAgfSAgICAgICAgICAgICAgICAgICAvKiBlbmQgb2YgYmlnIGxvb3AgKi8KKworLyogQ29udHJvbCBuZXZlciByZWFjaGVzIGhlcmUgYnkgZmFsbGluZyB0aHJvdWdoLCBvbmx5IGJ5IGEgZ290byBmb3IgYWxsIHRoZQorZXJyb3Igc3RhdGVzLiBQYXNzIGJhY2sgdGhlIHBvc2l0aW9uIGluIHRoZSBwYXR0ZXJuIHNvIHRoYXQgaXQgY2FuIGJlIGRpc3BsYXllZAordG8gdGhlIHVzZXIgZm9yIGRpYWdub3NpbmcgdGhlIGVycm9yLiAqLworCitGQUlMRUQ6CisqcHRycHRyID0gcHRyOworcmV0dXJuIEZBTFNFOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBDb21waWxlIHJlZ2V4OiBhIHNlcXVlbmNlIG9mIGFsdGVybmF0aXZlcyAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBPbiBlbnRyeSwgcHRyIGlzIHBvaW50aW5nIHBhc3QgdGhlIGJyYWNrZXQgY2hhcmFjdGVyLCBidXQgb24gcmV0dXJuIGl0Citwb2ludHMgdG8gdGhlIGNsb3NpbmcgYnJhY2tldCwgb3IgdmVydGljYWwgYmFyLCBvciBlbmQgb2Ygc3RyaW5nLiBUaGUgY29kZQordmFyaWFibGUgaXMgcG9pbnRpbmcgYXQgdGhlIGJ5dGUgaW50byB3aGljaCB0aGUgQlJBIG9wZXJhdG9yIGhhcyBiZWVuIHN0b3JlZC4KK1RoaXMgZnVuY3Rpb24gaXMgdXNlZCBkdXJpbmcgdGhlIHByZS1jb21waWxlIHBoYXNlIHdoZW4gd2UgYXJlIHRyeWluZyB0byBmaW5kCitvdXQgdGhlIGFtb3VudCBvZiBtZW1vcnkgbmVlZGVkLCBhcyB3ZWxsIGFzIGR1cmluZyB0aGUgcmVhbCBjb21waWxlIHBoYXNlLiBUaGUKK3ZhbHVlIG9mIGxlbmd0aHB0ciBkaXN0aW5ndWlzaGVzIHRoZSB0d28gcGhhc2VzLgorCitBcmd1bWVudHM6CisgIG9wdGlvbnMgICAgICAgICAgIG9wdGlvbiBiaXRzLCBpbmNsdWRpbmcgYW55IGNoYW5nZXMgZm9yIHRoaXMgc3VicGF0dGVybgorICBjb2RlcHRyICAgICAgICAgICAtPiB0aGUgYWRkcmVzcyBvZiB0aGUgY3VycmVudCBjb2RlIHBvaW50ZXIKKyAgcHRycHRyICAgICAgICAgICAgLT4gdGhlIGFkZHJlc3Mgb2YgdGhlIGN1cnJlbnQgcGF0dGVybiBwb2ludGVyCisgIGVycm9yY29kZXB0ciAgICAgIC0+IHBvaW50ZXIgdG8gZXJyb3IgY29kZSB2YXJpYWJsZQorICBsb29rYmVoaW5kICAgICAgICBUUlVFIGlmIHRoaXMgaXMgYSBsb29rYmVoaW5kIGFzc2VydGlvbgorICByZXNldF9icmFjb3VudCAgICBUUlVFIHRvIHJlc2V0IHRoZSBjb3VudCBmb3IgZWFjaCBicmFuY2gKKyAgc2tpcHVuaXRzICAgICAgICAgc2tpcCB0aGlzIG1hbnkgY29kZSB1bml0cyBhdCBzdGFydCAoZm9yIGJyYWNrZXRzIGFuZCBPUF9DT05EKQorICBjb25kX2RlcHRoICAgICAgICBkZXB0aCBvZiBuZXN0aW5nIGZvciBjb25kaXRpb25hbCBzdWJwYXR0ZXJucworICBmaXJzdGN1cHRyICAgICAgICBwbGFjZSB0byBwdXQgdGhlIGZpcnN0IHJlcXVpcmVkIGNvZGUgdW5pdAorICBmaXJzdGN1ZmxhZ3NwdHIgICBwbGFjZSB0byBwdXQgdGhlIGZpcnN0IGNvZGUgdW5pdCBmbGFncywgb3IgYSBuZWdhdGl2ZSBudW1iZXIKKyAgcmVxY3VwdHIgICAgICAgICAgcGxhY2UgdG8gcHV0IHRoZSBsYXN0IHJlcXVpcmVkIGNvZGUgdW5pdAorICByZXFjdWZsYWdzcHRyICAgICBwbGFjZSB0byBwdXQgdGhlIGxhc3QgcmVxdWlyZWQgY29kZSB1bml0IGZsYWdzLCBvciBhIG5lZ2F0aXZlIG51bWJlcgorICBiY3B0ciAgICAgICAgICAgICBwb2ludGVyIHRvIHRoZSBjaGFpbiBvZiBjdXJyZW50bHkgb3BlbiBicmFuY2hlcworICBjYiAgICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIGRhdGEgYmxvY2sgd2l0aCB0YWJsZXMgcG9pbnRlcnMgZXRjLgorICBsZW5ndGhwdHIgICAgICAgICBOVUxMIGR1cmluZyB0aGUgcmVhbCBjb21waWxlIHBoYXNlCisgICAgICAgICAgICAgICAgICAgIHBvaW50cyB0byBsZW5ndGggYWNjdW11bGF0b3IgZHVyaW5nIHByZS1jb21waWxlIHBoYXNlCisKK1JldHVybnM6ICAgICAgICAgICAgVFJVRSBvbiBzdWNjZXNzCisqLworCitzdGF0aWMgQk9PTAorY29tcGlsZV9yZWdleCh1aW50MzJfdCBvcHRpb25zLCBQQ1JFMl9VQ0hBUiAqKmNvZGVwdHIsIFBDUkUyX1NQVFIgKnB0cnB0ciwKKyAgaW50ICplcnJvcmNvZGVwdHIsIEJPT0wgbG9va2JlaGluZCwgQk9PTCByZXNldF9icmFjb3VudCwgdWludDMyX3Qgc2tpcHVuaXRzLAorICBpbnQgY29uZF9kZXB0aCwgdWludDMyX3QgKmZpcnN0Y3VwdHIsIGludDMyX3QgKmZpcnN0Y3VmbGFnc3B0ciwKKyAgdWludDMyX3QgKnJlcWN1cHRyLCBpbnQzMl90ICpyZXFjdWZsYWdzcHRyLCBicmFuY2hfY2hhaW4gKmJjcHRyLAorICBjb21waWxlX2Jsb2NrICpjYiwgc2l6ZV90ICpsZW5ndGhwdHIpCit7CitQQ1JFMl9TUFRSIHB0ciA9ICpwdHJwdHI7CitQQ1JFMl9VQ0hBUiAqY29kZSA9ICpjb2RlcHRyOworUENSRTJfVUNIQVIgKmxhc3RfYnJhbmNoID0gY29kZTsKK1BDUkUyX1VDSEFSICpzdGFydF9icmFja2V0ID0gY29kZTsKK1BDUkUyX1VDSEFSICpyZXZlcnNlX2NvdW50ID0gTlVMTDsKK29wZW5fY2FwaXRlbSBjYXBpdGVtOworaW50IGNhcG51bWJlciA9IDA7Cit1aW50MzJfdCBmaXJzdGN1LCByZXFjdTsKK2ludDMyX3QgZmlyc3RjdWZsYWdzLCByZXFjdWZsYWdzOwordWludDMyX3QgYnJhbmNoZmlyc3RjdSwgYnJhbmNocmVxY3U7CitpbnQzMl90IGJyYW5jaGZpcnN0Y3VmbGFncywgYnJhbmNocmVxY3VmbGFnczsKK3NpemVfdCBsZW5ndGg7Cit1bnNpZ25lZCBpbnQgb3JpZ19icmFjb3VudDsKK3Vuc2lnbmVkIGludCBtYXhfYnJhY291bnQ7CiticmFuY2hfY2hhaW4gYmM7CisKKy8qIElmIHNldCwgY2FsbCB0aGUgZXh0ZXJuYWwgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yIHN0YWNrIGF2YWlsYWJpbGl0eS4gKi8KKworaWYgKGNiLT5jeC0+c3RhY2tfZ3VhcmQgIT0gTlVMTCAmJgorICAgIGNiLT5jeC0+c3RhY2tfZ3VhcmQoY2ItPnBhcmVuc19kZXB0aCwgY2ItPmN4LT5zdGFja19ndWFyZF9kYXRhKSkKKyAgeworICAqZXJyb3Jjb2RlcHRyPSBFUlIzMzsKKyAgcmV0dXJuIEZBTFNFOworICB9CisKKy8qIE1pc2NlbGxhbmVvdXMgaW5pdGlhbGl6YXRpb24gKi8KKworYmMub3V0ZXIgPSBiY3B0cjsKK2JjLmN1cnJlbnRfYnJhbmNoID0gY29kZTsKKworZmlyc3RjdSA9IHJlcWN1ID0gMDsKK2ZpcnN0Y3VmbGFncyA9IHJlcWN1ZmxhZ3MgPSBSRVFfVU5TRVQ7CisKKy8qIEFjY3VtdWxhdGUgdGhlIGxlbmd0aCBmb3IgdXNlIGluIHRoZSBwcmUtY29tcGlsZSBwaGFzZS4gU3RhcnQgd2l0aCB0aGUKK2xlbmd0aCBvZiB0aGUgQlJBIGFuZCBLRVQgYW5kIGFueSBleHRyYSBjb2RlIHVuaXRzIHRoYXQgYXJlIHJlcXVpcmVkIGF0IHRoZQorYmVnaW5uaW5nLiBXZSBhY2N1bXVsYXRlIGluIGEgbG9jYWwgdmFyaWFibGUgdG8gc2F2ZSBmcmVxdWVudCB0ZXN0aW5nIG9mCitsZW5ndGhwdHIgZm9yIE5VTEwuIFdlIGNhbm5vdCBkbyB0aGlzIGJ5IGxvb2tpbmcgYXQgdGhlIHZhbHVlIG9mICdjb2RlJyBhdCB0aGUKK3N0YXJ0IGFuZCBlbmQgb2YgZWFjaCBhbHRlcm5hdGl2ZSwgYmVjYXVzZSBjb21waWxlZCBpdGVtcyBhcmUgZGlzY2FyZGVkIGR1cmluZwordGhlIHByZS1jb21waWxlIHBoYXNlIHNvIHRoYXQgdGhlIHdvcmsgc3BhY2UgaXMgbm90IGV4Y2VlZGVkLiAqLworCitsZW5ndGggPSAyICsgMipMSU5LX1NJWkUgKyBza2lwdW5pdHM7CisKKy8qIFdBUk5JTkc6IElmIHRoZSBhYm92ZSBsaW5lIGlzIGNoYW5nZWQgZm9yIGFueSByZWFzb24sIHlvdSBtdXN0IGFsc28gY2hhbmdlCit0aGUgY29kZSB0aGF0IGFic3RyYWN0cyBvcHRpb24gc2V0dGluZ3MgYXQgdGhlIHN0YXJ0IG9mIHRoZSBwYXR0ZXJuIGFuZCBtYWtlcwordGhlbSBnbG9iYWwuIEl0IHRlc3RzIHRoZSB2YWx1ZSBvZiBsZW5ndGggZm9yICgyICsgMipMSU5LX1NJWkUpIGluIHRoZQorcHJlLWNvbXBpbGUgcGhhc2UgdG8gZmluZCBvdXQgd2hldGhlciBvciBub3QgYW55dGhpbmcgaGFzIHlldCBiZWVuIGNvbXBpbGVkLgorCitJZiB0aGlzIGlzIGEgY2FwdHVyaW5nIHN1YnBhdHRlcm4sIGFkZCB0byB0aGUgY2hhaW4gb2Ygb3BlbiBjYXB0dXJpbmcgaXRlbXMKK3NvIHRoYXQgd2UgY2FuIGRldGVjdCB0aGVtIGlmICgqQUNDRVBUKSBpcyBlbmNvdW50ZXJlZC4gVGhpcyBpcyBhbHNvIHVzZWQgdG8KK2RldGVjdCBncm91cHMgdGhhdCBjb250YWluIHJlY3Vyc2l2ZSBiYWNrIHJlZmVyZW5jZXMgdG8gdGhlbXNlbHZlcy4gTm90ZSB0aGF0Citvbmx5IE9QX0NCUkEgbmVlZCBiZSB0ZXN0ZWQgaGVyZTsgY2hhbmdpbmcgdGhpcyBvcGNvZGUgdG8gb25lIG9mIGl0cyB2YXJpYW50cywKK2UuZy4gT1BfU0NCUkFQT1MsIGhhcHBlbnMgbGF0ZXIsIGFmdGVyIHRoZSBncm91cCBoYXMgYmVlbiBjb21waWxlZC4gKi8KKworaWYgKCpjb2RlID09IE9QX0NCUkEpCisgIHsKKyAgY2FwbnVtYmVyID0gR0VUMihjb2RlLCAxICsgTElOS19TSVpFKTsKKyAgY2FwaXRlbS5udW1iZXIgPSBjYXBudW1iZXI7CisgIGNhcGl0ZW0ubmV4dCA9IGNiLT5vcGVuX2NhcHM7CisgIGNhcGl0ZW0uZmxhZyA9IEZBTFNFOworICBjYi0+b3Blbl9jYXBzID0gJmNhcGl0ZW07CisgIH0KKworLyogT2Zmc2V0IGlzIHNldCB6ZXJvIHRvIG1hcmsgdGhhdCB0aGlzIGJyYWNrZXQgaXMgc3RpbGwgb3BlbiAqLworCitQVVQoY29kZSwgMSwgMCk7Citjb2RlICs9IDEgKyBMSU5LX1NJWkUgKyBza2lwdW5pdHM7CisKKy8qIExvb3AgZm9yIGVhY2ggYWx0ZXJuYXRpdmUgYnJhbmNoICovCisKK29yaWdfYnJhY291bnQgPSBtYXhfYnJhY291bnQgPSBjYi0+YnJhY291bnQ7CisKK2ZvciAoOzspCisgIHsKKyAgLyogRm9yIGEgKD98IGdyb3VwLCByZXNldCB0aGUgY2FwdHVyaW5nIGJyYWNrZXQgY291bnQgc28gdGhhdCBlYWNoIGJyYW5jaAorICB1c2VzIHRoZSBzYW1lIG51bWJlcnMuICovCisKKyAgaWYgKHJlc2V0X2JyYWNvdW50KSBjYi0+YnJhY291bnQgPSBvcmlnX2JyYWNvdW50OworCisgIC8qIFNldCB1cCBkdW1teSBPUF9SRVZFUlNFIGlmIGxvb2tiZWhpbmQgYXNzZXJ0aW9uICovCisKKyAgaWYgKGxvb2tiZWhpbmQpCisgICAgeworICAgICpjb2RlKysgPSBPUF9SRVZFUlNFOworICAgIHJldmVyc2VfY291bnQgPSBjb2RlOworICAgIFBVVElOQyhjb2RlLCAwLCAwKTsKKyAgICBsZW5ndGggKz0gMSArIExJTktfU0laRTsKKyAgICB9CisKKyAgLyogTm93IGNvbXBpbGUgdGhlIGJyYW5jaDsgaW4gdGhlIHByZS1jb21waWxlIHBoYXNlIGl0cyBsZW5ndGggZ2V0cyBhZGRlZAorICBpbnRvIHRoZSBsZW5ndGguICovCisKKyAgaWYgKCFjb21waWxlX2JyYW5jaCgmb3B0aW9ucywgJmNvZGUsICZwdHIsIGVycm9yY29kZXB0ciwgJmJyYW5jaGZpcnN0Y3UsCisgICAgICAgICZicmFuY2hmaXJzdGN1ZmxhZ3MsICZicmFuY2hyZXFjdSwgJmJyYW5jaHJlcWN1ZmxhZ3MsICZiYywKKyAgICAgICAgY29uZF9kZXB0aCwgY2IsIChsZW5ndGhwdHIgPT0gTlVMTCk/IE5VTEwgOiAmbGVuZ3RoKSkKKyAgICB7CisgICAgKnB0cnB0ciA9IHB0cjsKKyAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgIC8qIEtlZXAgdGhlIGhpZ2hlc3QgYnJhY2tldCBjb3VudCBpbiBjYXNlICg/fCB3YXMgdXNlZCBhbmQgc29tZSBicmFuY2gKKyAgaGFzIGZld2VyIHRoYW4gdGhlIHJlc3QuICovCisKKyAgaWYgKGNiLT5icmFjb3VudCA+IG1heF9icmFjb3VudCkgbWF4X2JyYWNvdW50ID0gY2ItPmJyYWNvdW50OworCisgIC8qIEluIHRoZSByZWFsIGNvbXBpbGUgcGhhc2UsIHRoZXJlIGlzIHNvbWUgcG9zdC1wcm9jZXNzaW5nIHRvIGJlIGRvbmUuICovCisKKyAgaWYgKGxlbmd0aHB0ciA9PSBOVUxMKQorICAgIHsKKyAgICAvKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBicmFuY2gsIHRoZSBmaXJzdGN1IGFuZCByZXFjdSB2YWx1ZXMgZm9yIHRoZQorICAgIGJyYW5jaCBiZWNvbWUgdGhlIHZhbHVlcyBmb3IgdGhlIHJlZ2V4LiAqLworCisgICAgaWYgKCpsYXN0X2JyYW5jaCAhPSBPUF9BTFQpCisgICAgICB7CisgICAgICBmaXJzdGN1ID0gYnJhbmNoZmlyc3RjdTsKKyAgICAgIGZpcnN0Y3VmbGFncyA9IGJyYW5jaGZpcnN0Y3VmbGFnczsKKyAgICAgIHJlcWN1ID0gYnJhbmNocmVxY3U7CisgICAgICByZXFjdWZsYWdzID0gYnJhbmNocmVxY3VmbGFnczsKKyAgICAgIH0KKworICAgIC8qIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBicmFuY2gsIHRoZSBmaXJzdCBjaGFyIGFuZCByZXFjdSBoYXZlIHRvCisgICAgbWF0Y2ggdGhlIHZhbHVlcyBmcm9tIGFsbCB0aGUgcHJldmlvdXMgYnJhbmNoZXMsIGV4Y2VwdCB0aGF0IGlmIHRoZQorICAgIHByZXZpb3VzIHZhbHVlIGZvciByZXFjdSBkaWRuJ3QgaGF2ZSBSRVFfVkFSWSBzZXQsIGl0IGNhbiBzdGlsbCBtYXRjaCwKKyAgICBhbmQgd2Ugc2V0IFJFUV9WQVJZIGZvciB0aGUgcmVnZXguICovCisKKyAgICBlbHNlCisgICAgICB7CisgICAgICAvKiBJZiB3ZSBwcmV2aW91c2x5IGhhZCBhIGZpcnN0Y3UsIGJ1dCBpdCBkb2Vzbid0IG1hdGNoIHRoZSBuZXcgYnJhbmNoLAorICAgICAgd2UgaGF2ZSB0byBhYmFuZG9uIHRoZSBmaXJzdGN1IGZvciB0aGUgcmVnZXgsIGJ1dCBpZiB0aGVyZSB3YXMKKyAgICAgIHByZXZpb3VzbHkgbm8gcmVxY3UsIGl0IHRha2VzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgb2xkIGZpcnN0Y3UuICovCisKKyAgICAgIGlmIChmaXJzdGN1ZmxhZ3MgIT0gYnJhbmNoZmlyc3RjdWZsYWdzIHx8IGZpcnN0Y3UgIT0gYnJhbmNoZmlyc3RjdSkKKyAgICAgICAgeworICAgICAgICBpZiAoZmlyc3RjdWZsYWdzID49IDApCisgICAgICAgICAgeworICAgICAgICAgIGlmIChyZXFjdWZsYWdzIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHJlcWN1ID0gZmlyc3RjdTsKKyAgICAgICAgICAgIHJlcWN1ZmxhZ3MgPSBmaXJzdGN1ZmxhZ3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBmaXJzdGN1ZmxhZ3MgPSBSRVFfTk9ORTsKKyAgICAgICAgfQorCisgICAgICAvKiBJZiB3ZSAobm93IG9yIGZyb20gYmVmb3JlKSBoYXZlIG5vIGZpcnN0Y3UsIGEgZmlyc3RjdSBmcm9tIHRoZQorICAgICAgYnJhbmNoIGJlY29tZXMgYSByZXFjdSBpZiB0aGVyZSBpc24ndCBhIGJyYW5jaCByZXFjdS4gKi8KKworICAgICAgaWYgKGZpcnN0Y3VmbGFncyA8IDAgJiYgYnJhbmNoZmlyc3RjdWZsYWdzID49IDAgJiYKKyAgICAgICAgICBicmFuY2hyZXFjdWZsYWdzIDwgMCkKKyAgICAgICAgeworICAgICAgICBicmFuY2hyZXFjdSA9IGJyYW5jaGZpcnN0Y3U7CisgICAgICAgIGJyYW5jaHJlcWN1ZmxhZ3MgPSBicmFuY2hmaXJzdGN1ZmxhZ3M7CisgICAgICAgIH0KKworICAgICAgLyogTm93IGVuc3VyZSB0aGF0IHRoZSByZXFjdXMgbWF0Y2ggKi8KKworICAgICAgaWYgKCgocmVxY3VmbGFncyAmIH5SRVFfVkFSWSkgIT0gKGJyYW5jaHJlcWN1ZmxhZ3MgJiB+UkVRX1ZBUlkpKSB8fAorICAgICAgICAgIHJlcWN1ICE9IGJyYW5jaHJlcWN1KQorICAgICAgICByZXFjdWZsYWdzID0gUkVRX05PTkU7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgcmVxY3UgPSBicmFuY2hyZXFjdTsKKyAgICAgICAgcmVxY3VmbGFncyB8PSBicmFuY2hyZXFjdWZsYWdzOyAvKiBUbyAib3IiIFJFUV9WQVJZICovCisgICAgICAgIH0KKyAgICAgIH0KKworICAgIC8qIElmIGxvb2tiZWhpbmQsIGNoZWNrIHRoYXQgdGhpcyBicmFuY2ggbWF0Y2hlcyBhIGZpeGVkLWxlbmd0aCBzdHJpbmcsIGFuZAorICAgIHB1dCB0aGUgbGVuZ3RoIGludG8gdGhlIE9QX1JFVkVSU0UgaXRlbS4gVGVtcG9yYXJpbHkgbWFyayB0aGUgZW5kIG9mIHRoZQorICAgIGJyYW5jaCB3aXRoIE9QX0VORC4gSWYgdGhlIGJyYW5jaCBjb250YWlucyBPUF9SRUNVUlNFLCB0aGUgcmVzdWx0IGlzCisgICAgRkZMX0xBVEVSIChhIG5lZ2F0aXZlIHZhbHVlKSBiZWNhdXNlIHRoZXJlIG1heSBiZSBmb3J3YXJkIHJlZmVyZW5jZXMgdGhhdAorICAgIHdlIGNhbid0IGNoZWNrIGhlcmUuIFNldCBhIGZsYWcgdG8gY2F1c2UgYW5vdGhlciBsb29rYmVoaW5kIGNoZWNrIGF0IHRoZQorICAgIGVuZC4gV2h5IG5vdCBkbyBpdCBhbGwgYXQgdGhlIGVuZD8gQmVjYXVzZSBjb21tb24gZXJyb3JzIGNhbiBiZSBwaWNrZWQgdXAKKyAgICBoZXJlIGFuZCB0aGUgb2Zmc2V0IG9mIHRoZSBwcm9ibGVtIGNhbiBiZSBzaG93bi4gKi8KKworICAgIGlmIChsb29rYmVoaW5kKQorICAgICAgeworICAgICAgaW50IGZpeGVkX2xlbmd0aDsKKyAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAqY29kZSA9IE9QX0VORDsKKyAgICAgIGZpeGVkX2xlbmd0aCA9IGZpbmRfZml4ZWRsZW5ndGgobGFzdF9icmFuY2gsICAob3B0aW9ucyAmIFBDUkUyX1VURikgIT0gMCwKKyAgICAgICAgRkFMU0UsIGNiLCBOVUxMLCAmY291bnQpOworICAgICAgaWYgKGZpeGVkX2xlbmd0aCA9PSBGRkxfTEFURVIpCisgICAgICAgIHsKKyAgICAgICAgY2ItPmNoZWNrX2xvb2tiZWhpbmQgPSBUUlVFOworICAgICAgICB9CisgICAgICBlbHNlIGlmIChmaXhlZF9sZW5ndGggPCAwKQorICAgICAgICB7CisgICAgICAgICplcnJvcmNvZGVwdHIgPSBmaXhlZF9sZW5ndGhfZXJyb3JzWy1maXhlZF9sZW5ndGhdOworICAgICAgICAqcHRycHRyID0gcHRyOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBpZiAoZml4ZWRfbGVuZ3RoID4gY2ItPm1heF9sb29rYmVoaW5kKQorICAgICAgICAgIGNiLT5tYXhfbG9va2JlaGluZCA9IGZpeGVkX2xlbmd0aDsKKyAgICAgICAgUFVUKHJldmVyc2VfY291bnQsIDAsIGZpeGVkX2xlbmd0aCk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisKKyAgLyogUmVhY2hlZCBlbmQgb2YgZXhwcmVzc2lvbiwgZWl0aGVyICcpJyBvciBlbmQgb2YgcGF0dGVybi4gSW4gdGhlIHJlYWwKKyAgY29tcGlsZSBwaGFzZSwgZ28gYmFjayB0aHJvdWdoIHRoZSBhbHRlcm5hdGl2ZSBicmFuY2hlcyBhbmQgcmV2ZXJzZSB0aGUgY2hhaW4KKyAgb2Ygb2Zmc2V0cywgd2l0aCB0aGUgZmllbGQgaW4gdGhlIEJSQSBpdGVtIG5vdyBiZWNvbWluZyBhbiBvZmZzZXQgdG8gdGhlCisgIGZpcnN0IGFsdGVybmF0aXZlLiBJZiB0aGVyZSBhcmUgbm8gYWx0ZXJuYXRpdmVzLCBpdCBwb2ludHMgdG8gdGhlIGVuZCBvZiB0aGUKKyAgZ3JvdXAuIFRoZSBsZW5ndGggaW4gdGhlIHRlcm1pbmF0aW5nIGtldCBpcyBhbHdheXMgdGhlIGxlbmd0aCBvZiB0aGUgd2hvbGUKKyAgYnJhY2tldGVkIGl0ZW0uIFJldHVybiBsZWF2aW5nIHRoZSBwb2ludGVyIGF0IHRoZSB0ZXJtaW5hdGluZyBjaGFyLiAqLworCisgIGlmICgqcHRyICE9IENIQVJfVkVSVElDQUxfTElORSkKKyAgICB7CisgICAgaWYgKGxlbmd0aHB0ciA9PSBOVUxMKQorICAgICAgeworICAgICAgc2l6ZV90IGJyYW5jaF9sZW5ndGggPSBjb2RlIC0gbGFzdF9icmFuY2g7CisgICAgICBkbworICAgICAgICB7CisgICAgICAgIHNpemVfdCBwcmV2X2xlbmd0aCA9IEdFVChsYXN0X2JyYW5jaCwgMSk7CisgICAgICAgIFBVVChsYXN0X2JyYW5jaCwgMSwgYnJhbmNoX2xlbmd0aCk7CisgICAgICAgIGJyYW5jaF9sZW5ndGggPSBwcmV2X2xlbmd0aDsKKyAgICAgICAgbGFzdF9icmFuY2ggLT0gYnJhbmNoX2xlbmd0aDsKKyAgICAgICAgfQorICAgICAgd2hpbGUgKGJyYW5jaF9sZW5ndGggPiAwKTsKKyAgICAgIH0KKworICAgIC8qIEZpbGwgaW4gdGhlIGtldCAqLworCisgICAgKmNvZGUgPSBPUF9LRVQ7CisgICAgUFVUKGNvZGUsIDEsIChpbnQpKGNvZGUgLSBzdGFydF9icmFja2V0KSk7CisgICAgY29kZSArPSAxICsgTElOS19TSVpFOworCisgICAgLyogSWYgaXQgd2FzIGEgY2FwdHVyaW5nIHN1YnBhdHRlcm4sIGNoZWNrIHRvIHNlZSBpZiBpdCBjb250YWluZWQgYW55CisgICAgcmVjdXJzaXZlIGJhY2sgcmVmZXJlbmNlcy4gSWYgc28sIHdlIG11c3Qgd3JhcCBpdCBpbiBhdG9taWMgYnJhY2tldHMuIEluCisgICAgYW55IGV2ZW50LCByZW1vdmUgdGhlIGJsb2NrIGZyb20gdGhlIGNoYWluLiAqLworCisgICAgaWYgKGNhcG51bWJlciA+IDApCisgICAgICB7CisgICAgICBpZiAoY2ItPm9wZW5fY2Fwcy0+ZmxhZykKKyAgICAgICAgeworICAgICAgICBtZW1tb3ZlKHN0YXJ0X2JyYWNrZXQgKyAxICsgTElOS19TSVpFLCBzdGFydF9icmFja2V0LAorICAgICAgICAgIENVMkJZVEVTKGNvZGUgLSBzdGFydF9icmFja2V0KSk7CisgICAgICAgICpzdGFydF9icmFja2V0ID0gT1BfT05DRTsKKyAgICAgICAgY29kZSArPSAxICsgTElOS19TSVpFOworICAgICAgICBQVVQoc3RhcnRfYnJhY2tldCwgMSwgKGludCkoY29kZSAtIHN0YXJ0X2JyYWNrZXQpKTsKKyAgICAgICAgKmNvZGUgPSBPUF9LRVQ7CisgICAgICAgIFBVVChjb2RlLCAxLCAoaW50KShjb2RlIC0gc3RhcnRfYnJhY2tldCkpOworICAgICAgICBjb2RlICs9IDEgKyBMSU5LX1NJWkU7CisgICAgICAgIGxlbmd0aCArPSAyICsgMipMSU5LX1NJWkU7CisgICAgICAgIH0KKyAgICAgIGNiLT5vcGVuX2NhcHMgPSBjYi0+b3Blbl9jYXBzLT5uZXh0OworICAgICAgfQorCisgICAgLyogUmV0YWluIHRoZSBoaWdoZXN0IGJyYWNrZXQgbnVtYmVyLCBpbiBjYXNlIHJlc2V0dGluZyB3YXMgdXNlZC4gKi8KKworICAgIGNiLT5icmFjb3VudCA9IG1heF9icmFjb3VudDsKKworICAgIC8qIFNldCB2YWx1ZXMgdG8gcGFzcyBiYWNrICovCisKKyAgICAqY29kZXB0ciA9IGNvZGU7CisgICAgKnB0cnB0ciA9IHB0cjsKKyAgICAqZmlyc3RjdXB0ciA9IGZpcnN0Y3U7CisgICAgKmZpcnN0Y3VmbGFnc3B0ciA9IGZpcnN0Y3VmbGFnczsKKyAgICAqcmVxY3VwdHIgPSByZXFjdTsKKyAgICAqcmVxY3VmbGFnc3B0ciA9IHJlcWN1ZmxhZ3M7CisgICAgaWYgKGxlbmd0aHB0ciAhPSBOVUxMKQorICAgICAgeworICAgICAgaWYgKE9GTE9XX01BWCAtICpsZW5ndGhwdHIgPCBsZW5ndGgpCisgICAgICAgIHsKKyAgICAgICAgKmVycm9yY29kZXB0ciA9IEVSUjIwOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICpsZW5ndGhwdHIgKz0gbGVuZ3RoOworICAgICAgfQorICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAvKiBBbm90aGVyIGJyYW5jaCBmb2xsb3dzLiBJbiB0aGUgcHJlLWNvbXBpbGUgcGhhc2UsIHdlIGNhbiBtb3ZlIHRoZSBjb2RlCisgIHBvaW50ZXIgYmFjayB0byB3aGVyZSBpdCB3YXMgZm9yIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgYnJhbmNoLiAoVGhhdCBpcywKKyAgcHJldGVuZCB0aGF0IGVhY2ggYnJhbmNoIGlzIHRoZSBvbmx5IG9uZS4pCisKKyAgSW4gdGhlIHJlYWwgY29tcGlsZSBwaGFzZSwgaW5zZXJ0IGFuIEFMVCBub2RlLiBJdHMgbGVuZ3RoIGZpZWxkIHBvaW50cyBiYWNrCisgIHRvIHRoZSBwcmV2aW91cyBicmFuY2ggd2hpbGUgdGhlIGJyYWNrZXQgcmVtYWlucyBvcGVuLiBBdCB0aGUgZW5kIHRoZSBjaGFpbgorICBpcyByZXZlcnNlZC4gSXQncyBkb25lIGxpa2UgdGhpcyBzbyB0aGF0IHRoZSBzdGFydCBvZiB0aGUgYnJhY2tldCBoYXMgYQorICB6ZXJvIG9mZnNldCB1bnRpbCBpdCBpcyBjbG9zZWQsIG1ha2luZyBpdCBwb3NzaWJsZSB0byBkZXRlY3QgcmVjdXJzaW9uLiAqLworCisgIGlmIChsZW5ndGhwdHIgIT0gTlVMTCkKKyAgICB7CisgICAgY29kZSA9ICpjb2RlcHRyICsgMSArIExJTktfU0laRSArIHNraXB1bml0czsKKyAgICBsZW5ndGggKz0gMSArIExJTktfU0laRTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgKmNvZGUgPSBPUF9BTFQ7CisgICAgUFVUKGNvZGUsIDEsIChpbnQpKGNvZGUgLSBsYXN0X2JyYW5jaCkpOworICAgIGJjLmN1cnJlbnRfYnJhbmNoID0gbGFzdF9icmFuY2ggPSBjb2RlOworICAgIGNvZGUgKz0gMSArIExJTktfU0laRTsKKyAgICB9CisKKyAgLyogQWR2YW5jZSBwYXN0IHRoZSB2ZXJ0aWNhbCBiYXIgKi8KKworICBwdHIrKzsKKyAgfQorLyogQ29udHJvbCBuZXZlciByZWFjaGVzIGhlcmUgKi8KK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgIENoZWNrIGZvciBhbmNob3JlZCBwYXR0ZXJuICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVHJ5IHRvIGZpbmQgb3V0IGlmIHRoaXMgaXMgYW4gYW5jaG9yZWQgcmVndWxhciBleHByZXNzaW9uLiBDb25zaWRlciBlYWNoCithbHRlcm5hdGl2ZSBicmFuY2guIElmIHRoZXkgYWxsIHN0YXJ0IHdpdGggT1BfU09EIG9yIE9QX0NJUkMsIG9yIHdpdGggYSBicmFja2V0CithbGwgb2Ygd2hvc2UgYWx0ZXJuYXRpdmVzIHN0YXJ0IHdpdGggT1BfU09EIG9yIE9QX0NJUkMgKHJlY3Vyc2UgYWQgbGliKSwgdGhlbgoraXQncyBhbmNob3JlZC4gSG93ZXZlciwgaWYgdGhpcyBpcyBhIG11bHRpbGluZSBwYXR0ZXJuLCB0aGVuIG9ubHkgT1BfU09EIHdpbGwKK2JlIGZvdW5kLCBiZWNhdXNlIF4gZ2VuZXJhdGVzIE9QX0NJUkNNIGluIHRoYXQgbW9kZS4KKworV2UgY2FuIGFsc28gY29uc2lkZXIgYSByZWdleCB0byBiZSBhbmNob3JlZCBpZiBPUF9TT00gc3RhcnRzIGFsbCBpdHMgYnJhbmNoZXMuCitUaGlzIGlzIHRoZSBjb2RlIGZvciBcRywgd2hpY2ggbWVhbnMgIm1hdGNoIGF0IHN0YXJ0IG9mIG1hdGNoIHBvc2l0aW9uLCB0YWtpbmcKK2ludG8gYWNjb3VudCB0aGUgbWF0Y2ggb2Zmc2V0Ii4KKworQSBicmFuY2ggaXMgYWxzbyBpbXBsaWNpdGx5IGFuY2hvcmVkIGlmIGl0IHN0YXJ0cyB3aXRoIC4qIGFuZCBET1RBTEwgaXMgc2V0LAorYmVjYXVzZSB0aGF0IHdpbGwgdHJ5IHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGF0IGFsbCBwb3NzaWJsZSBtYXRjaGluZyBwb2ludHMsCitzbyB0aGVyZSBpcyBubyBwb2ludCB0cnlpbmcgYWdhaW4uLi4uIGVyIC4uLi4KKworLi4uLiBleGNlcHQgd2hlbiB0aGUgLiogYXBwZWFycyBpbnNpZGUgY2FwdHVyaW5nIHBhcmVudGhlc2VzLCBhbmQgdGhlcmUgaXMgYQorc3Vic2VxdWVudCBiYWNrIHJlZmVyZW5jZSB0byB0aG9zZSBwYXJlbnRoZXNlcy4gV2UgaGF2ZW4ndCBlbm91Z2ggaW5mb3JtYXRpb24KK3RvIGNhdGNoIHRoYXQgY2FzZSBwcmVjaXNlbHkuCisKK0F0IGZpcnN0LCB0aGUgYmVzdCB3ZSBjb3VsZCBkbyB3YXMgdG8gZGV0ZWN0IHdoZW4gLiogd2FzIGluIGNhcHR1cmluZyBicmFja2V0cworYW5kIHRoZSBoaWdoZXN0IGJhY2sgcmVmZXJlbmNlIHdhcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhhdCBsZXZlbC4KK0hvd2V2ZXIsIGJ5IGtlZXBpbmcgYSBiaXRtYXAgb2YgdGhlIGZpcnN0IDMxIGJhY2sgcmVmZXJlbmNlcywgd2UgY2FuIGNhdGNoIHNvbWUKK29mIHRoZSBtb3JlIGNvbW1vbiBjYXNlcyBtb3JlIHByZWNpc2VseS4KKworLi4uIEEgc2Vjb25kIGV4Y2VwdGlvbiBpcyB3aGVuIHRoZSAuKiBhcHBlYXJzIGluc2lkZSBhbiBhdG9taWMgZ3JvdXAsIGJlY2F1c2UKK3RoaXMgcHJldmVudHMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGl0IG1hdGNoZXMgZnJvbSBiZWluZyBhZGp1c3RlZC4KKworQXJndW1lbnRzOgorICBjb2RlICAgICAgICAgICBwb2ludHMgdG8gc3RhcnQgb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm4KKyAgYnJhY2tldF9tYXAgICAgYSBiaXRtYXAgb2Ygd2hpY2ggYnJhY2tldHMgd2UgYXJlIGluc2lkZSB3aGlsZSB0ZXN0aW5nOyB0aGlzCisgICAgICAgICAgICAgICAgICAgaGFuZGxlcyB1cCB0byBzdWJzdHJpbmcgMzE7IGFmdGVyIHRoYXQgd2UganVzdCBoYXZlIHRvIHRha2UKKyAgICAgICAgICAgICAgICAgICB0aGUgbGVzcyBwcmVjaXNlIGFwcHJvYWNoCisgIGNiICAgICAgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGlsZSBkYXRhIGJsb2NrCisgIGF0b21jb3VudCAgICAgIGF0b21pYyBncm91cCBsZXZlbAorCitSZXR1cm5zOiAgICAgVFJVRSBvciBGQUxTRQorKi8KKworc3RhdGljIEJPT0wKK2lzX2FuY2hvcmVkKHJlZ2lzdGVyIFBDUkUyX1NQVFIgY29kZSwgdW5zaWduZWQgaW50IGJyYWNrZXRfbWFwLAorICBjb21waWxlX2Jsb2NrICpjYiwgaW50IGF0b21jb3VudCkKK3sKK2RvIHsKKyAgIFBDUkUyX1NQVFIgc2NvZGUgPSBmaXJzdF9zaWduaWZpY2FudF9jb2RlKAorICAgICBjb2RlICsgUFJJVihPUF9sZW5ndGhzKVsqY29kZV0sIEZBTFNFKTsKKyAgIHJlZ2lzdGVyIGludCBvcCA9ICpzY29kZTsKKworICAgLyogTm9uLWNhcHR1cmluZyBicmFja2V0cyAqLworCisgICBpZiAob3AgPT0gT1BfQlJBICB8fCBvcCA9PSBPUF9CUkFQT1MgfHwKKyAgICAgICBvcCA9PSBPUF9TQlJBIHx8IG9wID09IE9QX1NCUkFQT1MpCisgICAgIHsKKyAgICAgaWYgKCFpc19hbmNob3JlZChzY29kZSwgYnJhY2tldF9tYXAsIGNiLCBhdG9tY291bnQpKSByZXR1cm4gRkFMU0U7CisgICAgIH0KKworICAgLyogQ2FwdHVyaW5nIGJyYWNrZXRzICovCisKKyAgIGVsc2UgaWYgKG9wID09IE9QX0NCUkEgIHx8IG9wID09IE9QX0NCUkFQT1MgfHwKKyAgICAgICAgICAgIG9wID09IE9QX1NDQlJBIHx8IG9wID09IE9QX1NDQlJBUE9TKQorICAgICB7CisgICAgIGludCBuID0gR0VUMihzY29kZSwgMStMSU5LX1NJWkUpOworICAgICBpbnQgbmV3X21hcCA9IGJyYWNrZXRfbWFwIHwgKChuIDwgMzIpPyAoMXUgPDwgbikgOiAxKTsKKyAgICAgaWYgKCFpc19hbmNob3JlZChzY29kZSwgbmV3X21hcCwgY2IsIGF0b21jb3VudCkpIHJldHVybiBGQUxTRTsKKyAgICAgfQorCisgICAvKiBQb3NpdGl2ZSBmb3J3YXJkIGFzc2VydGlvbnMgYW5kIGNvbmRpdGlvbnMgKi8KKworICAgZWxzZSBpZiAob3AgPT0gT1BfQVNTRVJUIHx8IG9wID09IE9QX0NPTkQpCisgICAgIHsKKyAgICAgaWYgKCFpc19hbmNob3JlZChzY29kZSwgYnJhY2tldF9tYXAsIGNiLCBhdG9tY291bnQpKSByZXR1cm4gRkFMU0U7CisgICAgIH0KKworICAgLyogQXRvbWljIGdyb3VwcyAqLworCisgICBlbHNlIGlmIChvcCA9PSBPUF9PTkNFIHx8IG9wID09IE9QX09OQ0VfTkMpCisgICAgIHsKKyAgICAgaWYgKCFpc19hbmNob3JlZChzY29kZSwgYnJhY2tldF9tYXAsIGNiLCBhdG9tY291bnQgKyAxKSkKKyAgICAgICByZXR1cm4gRkFMU0U7CisgICAgIH0KKworICAgLyogLiogaXMgbm90IGFuY2hvcmVkIHVubGVzcyBET1RBTEwgaXMgc2V0ICh3aGljaCBnZW5lcmF0ZXMgT1BfQUxMQU5ZKSBhbmQKKyAgIGl0IGlzbid0IGluIGJyYWNrZXRzIHRoYXQgYXJlIG9yIG1heSBiZSByZWZlcmVuY2VkIG9yIGluc2lkZSBhbiBhdG9taWMKKyAgIGdyb3VwLiBUaGVyZSBpcyBhbHNvIGFuIG9wdGlvbiB0aGF0IGRpc2FibGVzIGF1dG8tYW5jaG9yaW5nLiAqLworCisgICBlbHNlIGlmICgob3AgPT0gT1BfVFlQRVNUQVIgfHwgb3AgPT0gT1BfVFlQRU1JTlNUQVIgfHwKKyAgICAgICAgICAgICBvcCA9PSBPUF9UWVBFUE9TU1RBUikpCisgICAgIHsKKyAgICAgaWYgKHNjb2RlWzFdICE9IE9QX0FMTEFOWSB8fCAoYnJhY2tldF9tYXAgJiBjYi0+YmFja3JlZl9tYXApICE9IDAgfHwKKyAgICAgICAgIGF0b21jb3VudCA+IDAgfHwgY2ItPmhhZF9wcnVuZW9yc2tpcCB8fAorICAgICAgICAgKGNiLT5leHRlcm5hbF9vcHRpb25zICYgUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IpICE9IDApCisgICAgICAgcmV0dXJuIEZBTFNFOworICAgICB9CisKKyAgIC8qIENoZWNrIGZvciBleHBsaWNpdCBhbmNob3JpbmcgKi8KKworICAgZWxzZSBpZiAob3AgIT0gT1BfU09EICYmIG9wICE9IE9QX1NPTSAmJiBvcCAhPSBPUF9DSVJDKSByZXR1cm4gRkFMU0U7CisKKyAgIGNvZGUgKz0gR0VUKGNvZGUsIDEpOworICAgfQord2hpbGUgKCpjb2RlID09IE9QX0FMVCk7ICAgLyogTG9vcCBmb3IgZWFjaCBhbHRlcm5hdGl2ZSAqLworcmV0dXJuIFRSVUU7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgIENoZWNrIGZvciBzdGFydGluZyB3aXRoIF4gb3IgLiogICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgaXMgY2FsbGVkIHRvIGZpbmQgb3V0IGlmIGV2ZXJ5IGJyYW5jaCBzdGFydHMgd2l0aCBeIG9yIC4qIHNvIHRoYXQKKyJmaXJzdCBjaGFyIiBwcm9jZXNzaW5nIGNhbiBiZSBkb25lIHRvIHNwZWVkIHRoaW5ncyB1cCBpbiBtdWx0aWxpbmUKK21hdGNoaW5nIGFuZCBmb3Igbm9uLURPVEFMTCBwYXR0ZXJucyB0aGF0IHN0YXJ0IHdpdGggLiogKHdoaWNoIG11c3Qgc3RhcnQgYXQKK3RoZSBiZWdpbm5pbmcgb3IgYWZ0ZXIgXG4pLiBBcyBpbiB0aGUgY2FzZSBvZiBpc19hbmNob3JlZCgpIChzZWUgYWJvdmUpLCB3ZQoraGF2ZSB0byB0YWtlIGFjY291bnQgb2YgYmFjayByZWZlcmVuY2VzIHRvIGNhcHR1cmluZyBicmFja2V0cyB0aGF0IGNvbnRhaW4gLioKK2JlY2F1c2UgaW4gdGhhdCBjYXNlIHdlIGNhbid0IG1ha2UgdGhlIGFzc3VtcHRpb24uIEFsc28sIHRoZSBhcHBlYXJhbmNlIG9mIC4qCitpbnNpZGUgYXRvbWljIGJyYWNrZXRzIG9yIGluIGEgcGF0dGVybiB0aGF0IGNvbnRhaW5zICpQUlVORSBvciAqU0tJUCBkb2VzIG5vdAorY291bnQsIGJlY2F1c2Ugb25jZSBhZ2FpbiB0aGUgYXNzdW1wdGlvbiBubyBsb25nZXIgaG9sZHMuCisKK0FyZ3VtZW50czoKKyAgY29kZSAgICAgICAgICAgcG9pbnRzIHRvIHN0YXJ0IG9mIHRoZSBjb21waWxlZCBwYXR0ZXJuIG9yIGEgZ3JvdXAKKyAgYnJhY2tldF9tYXAgICAgYSBiaXRtYXAgb2Ygd2hpY2ggYnJhY2tldHMgd2UgYXJlIGluc2lkZSB3aGlsZSB0ZXN0aW5nOyB0aGlzCisgICAgICAgICAgICAgICAgICAgaGFuZGxlcyB1cCB0byBzdWJzdHJpbmcgMzE7IGFmdGVyIHRoYXQgd2UganVzdCBoYXZlIHRvIHRha2UKKyAgICAgICAgICAgICAgICAgICB0aGUgbGVzcyBwcmVjaXNlIGFwcHJvYWNoCisgIGNiICAgICAgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGlsZSBkYXRhCisgIGF0b21jb3VudCAgICAgIGF0b21pYyBncm91cCBsZXZlbAorCitSZXR1cm5zOiAgICAgICAgIFRSVUUgb3IgRkFMU0UKKyovCisKK3N0YXRpYyBCT09MCitpc19zdGFydGxpbmUoUENSRTJfU1BUUiBjb2RlLCB1bnNpZ25lZCBpbnQgYnJhY2tldF9tYXAsIGNvbXBpbGVfYmxvY2sgKmNiLAorICBpbnQgYXRvbWNvdW50KQoreworZG8geworICAgUENSRTJfU1BUUiBzY29kZSA9IGZpcnN0X3NpZ25pZmljYW50X2NvZGUoCisgICAgIGNvZGUgKyBQUklWKE9QX2xlbmd0aHMpWypjb2RlXSwgRkFMU0UpOworICAgcmVnaXN0ZXIgaW50IG9wID0gKnNjb2RlOworCisgICAvKiBJZiB3ZSBhcmUgYXQgdGhlIHN0YXJ0IG9mIGEgY29uZGl0aW9uYWwgYXNzZXJ0aW9uIGdyb3VwLCAqYm90aCogdGhlCisgICBjb25kaXRpb25hbCBhc3NlcnRpb24gKmFuZCogd2hhdCBmb2xsb3dzIHRoZSBjb25kaXRpb24gbXVzdCBzYXRpc2Z5IHRoZSB0ZXN0CisgICBmb3Igc3RhcnQgb2YgbGluZS4gT3RoZXIga2luZHMgb2YgY29uZGl0aW9uIGZhaWwuIE5vdGUgdGhhdCB0aGVyZSBtYXkgYmUgYW4KKyAgIGF1dG8tY2FsbG91dCBhdCB0aGUgc3RhcnQgb2YgYSBjb25kaXRpb24uICovCisKKyAgIGlmIChvcCA9PSBPUF9DT05EKQorICAgICB7CisgICAgIHNjb2RlICs9IDEgKyBMSU5LX1NJWkU7CisKKyAgICAgaWYgKCpzY29kZSA9PSBPUF9DQUxMT1VUKSBzY29kZSArPSBQUklWKE9QX2xlbmd0aHMpW09QX0NBTExPVVRdOworICAgICAgIGVsc2UgaWYgKCpzY29kZSA9PSBPUF9DQUxMT1VUX1NUUikgc2NvZGUgKz0gR0VUKHNjb2RlLCAxICsgMipMSU5LX1NJWkUpOworCisgICAgIHN3aXRjaCAoKnNjb2RlKQorICAgICAgIHsKKyAgICAgICBjYXNlIE9QX0NSRUY6CisgICAgICAgY2FzZSBPUF9ETkNSRUY6CisgICAgICAgY2FzZSBPUF9SUkVGOgorICAgICAgIGNhc2UgT1BfRE5SUkVGOgorICAgICAgIGNhc2UgT1BfRkFJTDoKKyAgICAgICBjYXNlIE9QX0ZBTFNFOgorICAgICAgIGNhc2UgT1BfVFJVRToKKyAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAgICBkZWZhdWx0OiAgICAgLyogQXNzZXJ0aW9uICovCisgICAgICAgaWYgKCFpc19zdGFydGxpbmUoc2NvZGUsIGJyYWNrZXRfbWFwLCBjYiwgYXRvbWNvdW50KSkgcmV0dXJuIEZBTFNFOworICAgICAgIGRvIHNjb2RlICs9IEdFVChzY29kZSwgMSk7IHdoaWxlICgqc2NvZGUgPT0gT1BfQUxUKTsKKyAgICAgICBzY29kZSArPSAxICsgTElOS19TSVpFOworICAgICAgIGJyZWFrOworICAgICAgIH0KKyAgICAgc2NvZGUgPSBmaXJzdF9zaWduaWZpY2FudF9jb2RlKHNjb2RlLCBGQUxTRSk7CisgICAgIG9wID0gKnNjb2RlOworICAgICB9CisKKyAgIC8qIE5vbi1jYXB0dXJpbmcgYnJhY2tldHMgKi8KKworICAgaWYgKG9wID09IE9QX0JSQSAgfHwgb3AgPT0gT1BfQlJBUE9TIHx8CisgICAgICAgb3AgPT0gT1BfU0JSQSB8fCBvcCA9PSBPUF9TQlJBUE9TKQorICAgICB7CisgICAgIGlmICghaXNfc3RhcnRsaW5lKHNjb2RlLCBicmFja2V0X21hcCwgY2IsIGF0b21jb3VudCkpIHJldHVybiBGQUxTRTsKKyAgICAgfQorCisgICAvKiBDYXB0dXJpbmcgYnJhY2tldHMgKi8KKworICAgZWxzZSBpZiAob3AgPT0gT1BfQ0JSQSAgfHwgb3AgPT0gT1BfQ0JSQVBPUyB8fAorICAgICAgICAgICAgb3AgPT0gT1BfU0NCUkEgfHwgb3AgPT0gT1BfU0NCUkFQT1MpCisgICAgIHsKKyAgICAgaW50IG4gPSBHRVQyKHNjb2RlLCAxK0xJTktfU0laRSk7CisgICAgIGludCBuZXdfbWFwID0gYnJhY2tldF9tYXAgfCAoKG4gPCAzMik/ICgxdSA8PCBuKSA6IDEpOworICAgICBpZiAoIWlzX3N0YXJ0bGluZShzY29kZSwgbmV3X21hcCwgY2IsIGF0b21jb3VudCkpIHJldHVybiBGQUxTRTsKKyAgICAgfQorCisgICAvKiBQb3NpdGl2ZSBmb3J3YXJkIGFzc2VydGlvbnMgKi8KKworICAgZWxzZSBpZiAob3AgPT0gT1BfQVNTRVJUKQorICAgICB7CisgICAgIGlmICghaXNfc3RhcnRsaW5lKHNjb2RlLCBicmFja2V0X21hcCwgY2IsIGF0b21jb3VudCkpIHJldHVybiBGQUxTRTsKKyAgICAgfQorCisgICAvKiBBdG9taWMgYnJhY2tldHMgKi8KKworICAgZWxzZSBpZiAob3AgPT0gT1BfT05DRSB8fCBvcCA9PSBPUF9PTkNFX05DKQorICAgICB7CisgICAgIGlmICghaXNfc3RhcnRsaW5lKHNjb2RlLCBicmFja2V0X21hcCwgY2IsIGF0b21jb3VudCArIDEpKSByZXR1cm4gRkFMU0U7CisgICAgIH0KKworICAgLyogLiogbWVhbnMgInN0YXJ0IGF0IHN0YXJ0IG9yIGFmdGVyIFxuIiBpZiBpdCBpc24ndCBpbiBhdG9taWMgYnJhY2tldHMgb3IKKyAgIGJyYWNrZXRzIHRoYXQgbWF5IGJlIHJlZmVyZW5jZWQsIGFzIGxvbmcgYXMgdGhlIHBhdHRlcm4gZG9lcyBub3QgY29udGFpbgorICAgKlBSVU5FIG9yICpTS0lQLCBiZWNhdXNlIHRoZXNlIGJyZWFrIHRoZSBmZWF0dXJlLiBDb25zaWRlciwgZm9yIGV4YW1wbGUsCisgICAvLio/YSgqUFJVTkUpYi8gd2l0aCB0aGUgc3ViamVjdCAiYWFiIiwgd2hpY2ggbWF0Y2hlcyAiYWIiLCBpLmUuIG5vdCBhdCB0aGUKKyAgIHN0YXJ0IG9mIGEgbGluZS4gVGhlcmUgaXMgYWxzbyBhbiBvcHRpb24gdGhhdCBkaXNhYmxlcyB0aGlzIG9wdGltaXphdGlvbi4gKi8KKworICAgZWxzZSBpZiAob3AgPT0gT1BfVFlQRVNUQVIgfHwgb3AgPT0gT1BfVFlQRU1JTlNUQVIgfHwgb3AgPT0gT1BfVFlQRVBPU1NUQVIpCisgICAgIHsKKyAgICAgaWYgKHNjb2RlWzFdICE9IE9QX0FOWSB8fCAoYnJhY2tldF9tYXAgJiBjYi0+YmFja3JlZl9tYXApICE9IDAgfHwKKyAgICAgICAgIGF0b21jb3VudCA+IDAgfHwgY2ItPmhhZF9wcnVuZW9yc2tpcCB8fAorICAgICAgICAgKGNiLT5leHRlcm5hbF9vcHRpb25zICYgUENSRTJfTk9fRE9UU1RBUl9BTkNIT1IpICE9IDApCisgICAgICAgcmV0dXJuIEZBTFNFOworICAgICB9CisKKyAgIC8qIENoZWNrIGZvciBleHBsaWNpdCBjaXJjdW1mbGV4OyBhbnl0aGluZyBlbHNlIGdpdmVzIGEgRkFMU0UgcmVzdWx0LiBOb3RlCisgICBpbiBwYXJ0aWN1bGFyIHRoYXQgdGhpcyBpbmNsdWRlcyBhdG9taWMgYnJhY2tldHMgT1BfT05DRSBhbmQgT1BfT05DRV9OQworICAgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgbWF0Y2hlZCBieSAuKiBjYW5ub3QgYmUgYWRqdXN0ZWQgaW5zaWRlCisgICB0aGVtLiAqLworCisgICBlbHNlIGlmIChvcCAhPSBPUF9DSVJDICYmIG9wICE9IE9QX0NJUkNNKSByZXR1cm4gRkFMU0U7CisKKyAgIC8qIE1vdmUgb24gdG8gdGhlIG5leHQgYWx0ZXJuYXRpdmUgKi8KKworICAgY29kZSArPSBHRVQoY29kZSwgMSk7CisgICB9Cit3aGlsZSAoKmNvZGUgPT0gT1BfQUxUKTsgIC8qIExvb3AgZm9yIGVhY2ggYWx0ZXJuYXRpdmUgKi8KK3JldHVybiBUUlVFOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgQ2hlY2sgZm9yIGFzc2VydGVkIGZpeGVkIGZpcnN0IGNvZGUgdW5pdCAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEdXJpbmcgY29tcGlsYXRpb24sIHRoZSAiZmlyc3QgY29kZSB1bml0IiBzZXR0aW5ncyBmcm9tIGZvcndhcmQgYXNzZXJ0aW9ucworYXJlIGRpc2NhcmRlZCwgYmVjYXVzZSB0aGV5IGNhbiBjYXVzZSBjb25mbGljdHMgd2l0aCBhY3R1YWwgbGl0ZXJhbHMgdGhhdAorZm9sbG93LiBIb3dldmVyLCBpZiB3ZSBlbmQgdXAgd2l0aG91dCBhIGZpcnN0IGNvZGUgdW5pdCBzZXR0aW5nIGZvciBhbgordW5hbmNob3JlZCBwYXR0ZXJuLCBpdCBpcyB3b3J0aCBzY2FubmluZyB0aGUgcmVnZXggdG8gc2VlIGlmIHRoZXJlIGlzIGFuCitpbml0aWFsIGFzc2VydGVkIGZpcnN0IGNvZGUgdW5pdC4gSWYgYWxsIGJyYW5jaGVzIHN0YXJ0IHdpdGggdGhlIHNhbWUgYXNzZXJ0ZWQKK2NvZGUgdW5pdCwgb3Igd2l0aCBhIG5vbi1jb25kaXRpb25hbCBicmFja2V0IGFsbCBvZiB3aG9zZSBhbHRlcm5hdGl2ZXMgc3RhcnQKK3dpdGggdGhlIHNhbWUgYXNzZXJ0ZWQgY29kZSB1bml0IChyZWN1cnNlIGFkIGxpYiksIHRoZW4gd2UgcmV0dXJuIHRoYXQgY29kZQordW5pdCwgd2l0aCB0aGUgZmxhZ3Mgc2V0IHRvIHplcm8gb3IgUkVRX0NBU0VMRVNTOyBvdGhlcndpc2UgcmV0dXJuIHplcm8gd2l0aAorUkVRX05PTkUgaW4gdGhlIGZsYWdzLgorCitBcmd1bWVudHM6CisgIGNvZGUgICAgICAgcG9pbnRzIHRvIHN0YXJ0IG9mIGNvbXBpbGVkIHBhdHRlcm4KKyAgZmxhZ3MgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGNvZGUgdW5pdCBmbGFncworICBpbmFzc2VydCAgIFRSVUUgaWYgaW4gYW4gYXNzZXJ0aW9uCisKK1JldHVybnM6ICAgICB0aGUgZml4ZWQgZmlyc3QgY29kZSB1bml0LCBvciAwIHdpdGggUkVRX05PTkUgaW4gZmxhZ3MKKyovCisKK3N0YXRpYyB1aW50MzJfdAorZmluZF9maXJzdGFzc2VydGVkY3UoUENSRTJfU1BUUiBjb2RlLCBpbnQzMl90ICpmbGFncywgQk9PTCBpbmFzc2VydCkKK3sKK3JlZ2lzdGVyIHVpbnQzMl90IGMgPSAwOworaW50IGNmbGFncyA9IFJFUV9OT05FOworCisqZmxhZ3MgPSBSRVFfTk9ORTsKK2RvIHsKKyAgIHVpbnQzMl90IGQ7CisgICBpbnQgZGZsYWdzOworICAgaW50IHhsID0gKCpjb2RlID09IE9QX0NCUkEgfHwgKmNvZGUgPT0gT1BfU0NCUkEgfHwKKyAgICAgICAgICAgICAqY29kZSA9PSBPUF9DQlJBUE9TIHx8ICpjb2RlID09IE9QX1NDQlJBUE9TKT8gSU1NMl9TSVpFOjA7CisgICBQQ1JFMl9TUFRSIHNjb2RlID0gZmlyc3Rfc2lnbmlmaWNhbnRfY29kZShjb2RlICsgMStMSU5LX1NJWkUgKyB4bCwgVFJVRSk7CisgICByZWdpc3RlciBQQ1JFMl9VQ0hBUiBvcCA9ICpzY29kZTsKKworICAgc3dpdGNoKG9wKQorICAgICB7CisgICAgIGRlZmF1bHQ6CisgICAgIHJldHVybiAwOworCisgICAgIGNhc2UgT1BfQlJBOgorICAgICBjYXNlIE9QX0JSQVBPUzoKKyAgICAgY2FzZSBPUF9DQlJBOgorICAgICBjYXNlIE9QX1NDQlJBOgorICAgICBjYXNlIE9QX0NCUkFQT1M6CisgICAgIGNhc2UgT1BfU0NCUkFQT1M6CisgICAgIGNhc2UgT1BfQVNTRVJUOgorICAgICBjYXNlIE9QX09OQ0U6CisgICAgIGNhc2UgT1BfT05DRV9OQzoKKyAgICAgZCA9IGZpbmRfZmlyc3Rhc3NlcnRlZGN1KHNjb2RlLCAmZGZsYWdzLCBvcCA9PSBPUF9BU1NFUlQpOworICAgICBpZiAoZGZsYWdzIDwgMCkKKyAgICAgICByZXR1cm4gMDsKKyAgICAgaWYgKGNmbGFncyA8IDApIHsgYyA9IGQ7IGNmbGFncyA9IGRmbGFnczsgfQorICAgICAgIGVsc2UgaWYgKGMgIT0gZCB8fCBjZmxhZ3MgIT0gZGZsYWdzKSByZXR1cm4gMDsKKyAgICAgYnJlYWs7CisKKyAgICAgY2FzZSBPUF9FWEFDVDoKKyAgICAgc2NvZGUgKz0gSU1NMl9TSVpFOworICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKworICAgICBjYXNlIE9QX0NIQVI6CisgICAgIGNhc2UgT1BfUExVUzoKKyAgICAgY2FzZSBPUF9NSU5QTFVTOgorICAgICBjYXNlIE9QX1BPU1BMVVM6CisgICAgIGlmICghaW5hc3NlcnQpIHJldHVybiAwOworICAgICBpZiAoY2ZsYWdzIDwgMCkgeyBjID0gc2NvZGVbMV07IGNmbGFncyA9IDA7IH0KKyAgICAgICBlbHNlIGlmIChjICE9IHNjb2RlWzFdKSByZXR1cm4gMDsKKyAgICAgYnJlYWs7CisKKyAgICAgY2FzZSBPUF9FWEFDVEk6CisgICAgIHNjb2RlICs9IElNTTJfU0laRTsKKyAgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICAgY2FzZSBPUF9DSEFSSToKKyAgICAgY2FzZSBPUF9QTFVTSToKKyAgICAgY2FzZSBPUF9NSU5QTFVTSToKKyAgICAgY2FzZSBPUF9QT1NQTFVTSToKKyAgICAgaWYgKCFpbmFzc2VydCkgcmV0dXJuIDA7CisgICAgIGlmIChjZmxhZ3MgPCAwKSB7IGMgPSBzY29kZVsxXTsgY2ZsYWdzID0gUkVRX0NBU0VMRVNTOyB9CisgICAgICAgZWxzZSBpZiAoYyAhPSBzY29kZVsxXSkgcmV0dXJuIDA7CisgICAgIGJyZWFrOworICAgICB9CisKKyAgIGNvZGUgKz0gR0VUKGNvZGUsIDEpOworICAgfQord2hpbGUgKCpjb2RlID09IE9QX0FMVCk7CisKKypmbGFncyA9IGNmbGFnczsKK3JldHVybiBjOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgIEFkZCBhbiBlbnRyeSB0byB0aGUgbmFtZS9udW1iZXIgdGFibGUgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZXR3ZWVuIGNvbXBpbGluZyBwYXNzZXMgdG8gYWRkIGFuIGVudHJ5IHRvIHRoZQorbmFtZS9udW1iZXIgdGFibGUsIG1haW50YWluaW5nIGFscGhhYmV0aWNhbCBvcmRlci4gQ2hlY2tpbmcgZm9yIHBlcm1pdHRlZAorYW5kIGZvcmJpZGRlbiBkdXBsaWNhdGVzIGhhcyBhbHJlYWR5IGJlZW4gZG9uZS4KKworQXJndW1lbnRzOgorICBjYiAgICAgICAgICAgdGhlIGNvbXBpbGUgZGF0YSBibG9jaworICBuYW1lICAgICAgICAgdGhlIG5hbWUgdG8gYWRkCisgIGxlbmd0aCAgICAgICB0aGUgbGVuZ3RoIG9mIHRoZSBuYW1lCisgIGdyb3Vwbm8gICAgICB0aGUgZ3JvdXAgbnVtYmVyCisKK1JldHVybnM6ICAgICAgIG5vdGhpbmcKKyovCisKK3N0YXRpYyB2b2lkCithZGRfbmFtZV90b190YWJsZShjb21waWxlX2Jsb2NrICpjYiwgUENSRTJfU1BUUiBuYW1lLCBpbnQgbGVuZ3RoLAorICB1bnNpZ25lZCBpbnQgZ3JvdXBubykKK3sKK2ludCBpOworUENSRTJfVUNIQVIgKnNsb3QgPSBjYi0+bmFtZV90YWJsZTsKKworZm9yIChpID0gMDsgaSA8IGNiLT5uYW1lc19mb3VuZDsgaSsrKQorICB7CisgIGludCBjcmMgPSBtZW1jbXAobmFtZSwgc2xvdCtJTU0yX1NJWkUsIENVMkJZVEVTKGxlbmd0aCkpOworICBpZiAoY3JjID09IDAgJiYgc2xvdFtJTU0yX1NJWkUrbGVuZ3RoXSAhPSAwKQorICAgIGNyYyA9IC0xOyAvKiBDdXJyZW50IG5hbWUgaXMgYSBzdWJzdHJpbmcgKi8KKworICAvKiBNYWtlIHNwYWNlIGluIHRoZSB0YWJsZSBhbmQgYnJlYWsgdGhlIGxvb3AgZm9yIGFuIGVhcmxpZXIgbmFtZS4gRm9yIGEKKyAgZHVwbGljYXRlIG9yIGxhdGVyIG5hbWUsIGNhcnJ5IG9uLiBXZSBkbyB0aGlzIGZvciBkdXBsaWNhdGVzIHNvIHRoYXQgaW4gdGhlCisgIHNpbXBsZSBjYXNlICh3aGVuID8ofCBpcyBub3QgdXNlZCkgdGhleSBhcmUgaW4gb3JkZXIgb2YgdGhlaXIgbnVtYmVycy4gSW4gYWxsCisgIGNhc2VzIHRoZXkgYXJlIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IGFwcGVhciBpbiB0aGUgcGF0dGVybi4gKi8KKworICBpZiAoY3JjIDwgMCkKKyAgICB7CisgICAgbWVtbW92ZShzbG90ICsgY2ItPm5hbWVfZW50cnlfc2l6ZSwgc2xvdCwKKyAgICAgIENVMkJZVEVTKChjYi0+bmFtZXNfZm91bmQgLSBpKSAqIGNiLT5uYW1lX2VudHJ5X3NpemUpKTsKKyAgICBicmVhazsKKyAgICB9CisKKyAgLyogQ29udGludWUgdGhlIGxvb3AgZm9yIGEgbGF0ZXIgb3IgZHVwbGljYXRlIG5hbWUgKi8KKworICBzbG90ICs9IGNiLT5uYW1lX2VudHJ5X3NpemU7CisgIH0KKworUFVUMihzbG90LCAwLCBncm91cG5vKTsKK21lbWNweShzbG90ICsgSU1NMl9TSVpFLCBuYW1lLCBDVTJCWVRFUyhsZW5ndGgpKTsKK2NiLT5uYW1lc19mb3VuZCsrOworCisvKiBBZGQgYSB0ZXJtaW5hdGluZyB6ZXJvIGFuZCBmaWxsIHRoZSByZXN0IG9mIHRoZSBzbG90IHdpdGggemVyb2VzIHNvIHRoYXQKK3RoZSBtZW1vcnkgaXMgYWxsIGluaXRpYWxpemVkLiBPdGhlcndpc2UgdmFsZ3JpbmQgbW9hbnMgYWJvdXQgdW5pbml0aWFsaXplZAorbWVtb3J5IHdoZW4gc2F2aW5nIHNlcmlhbGl6ZWQgY29tcGlsZWQgcGF0dGVybnMuICovCisKK21lbXNldChzbG90ICsgSU1NMl9TSVpFICsgbGVuZ3RoLCAwLAorICBDVTJCWVRFUyhjYi0+bmFtZV9lbnRyeV9zaXplIC0gbGVuZ3RoIC0gSU1NMl9TSVpFKSk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgRXh0ZXJuYWwgZnVuY3Rpb24gdG8gY29tcGlsZSBhIHBhdHRlcm4gICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gcmVhZHMgYSByZWd1bGFyIGV4cHJlc3Npb24gaW4gdGhlIGZvcm0gb2YgYSBzdHJpbmcgYW5kIHJldHVybnMKK2EgcG9pbnRlciB0byBhIGJsb2NrIG9mIHN0b3JlIGhvbGRpbmcgYSBjb21waWxlZCB2ZXJzaW9uIG9mIHRoZSBleHByZXNzaW9uLgorCitBcmd1bWVudHM6CisgIHBhdHRlcm4gICAgICAgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbgorICBwYXRsZW4gICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4sIG9yIFBDUkUyX1pFUk9fVEVSTUlOQVRFRAorICBvcHRpb25zICAgICAgIG9wdGlvbiBiaXRzCisgIGVycm9ycHRyICAgICAgcG9pbnRlciB0byBlcnJvcmNvZGUKKyAgZXJyb3JvZmZzZXQgICBwb2ludGVyIHRvIGVycm9yIG9mZnNldAorICBjY29udGV4dCAgICAgIHBvaW50cyB0byBhIGNvbXBpbGUgY29udGV4dCBvciBpcyBOVUxMCisKK1JldHVybnM6ICAgICAgICBwb2ludGVyIHRvIGNvbXBpbGVkIGRhdGEgYmxvY2ssIG9yIE5VTEwgb24gZXJyb3IsCisgICAgICAgICAgICAgICAgd2l0aCBlcnJvcmNvZGUgYW5kIGVycm9yb2Zmc2V0IHNldAorKi8KKworUENSRTJfRVhQX0RFRk4gcGNyZTJfY29kZSAqIFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfY29tcGlsZShQQ1JFMl9TUFRSIHBhdHRlcm4sIFBDUkUyX1NJWkUgcGF0bGVuLCB1aW50MzJfdCBvcHRpb25zLAorICAgaW50ICplcnJvcnB0ciwgUENSRTJfU0laRSAqZXJyb3JvZmZzZXQsIHBjcmUyX2NvbXBpbGVfY29udGV4dCAqY2NvbnRleHQpCit7CitCT09MIHV0ZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU2V0IFRSVUUgZm9yIFVURiBtb2RlICovCitwY3JlMl9yZWFsX2NvZGUgKnJlID0gTlVMTDsgICAgICAgICAgICAgLyogV2hhdCB3ZSB3aWxsIHJldHVybiAqLworY29tcGlsZV9ibG9jayBjYjsgICAgICAgICAgICAgICAgICAgICAgIC8qICJTdGF0aWMiIGNvbXBpbGUtdGltZSBkYXRhICovCitjb25zdCB1aW50OF90ICp0YWJsZXM7ICAgICAgICAgICAgICAgICAgLyogQ2hhciB0YWJsZXMgYmFzZSBwb2ludGVyICovCisKK1BDUkUyX1VDSEFSICpjb2RlOyAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHBvaW50ZXIgaW4gY29tcGlsZWQgY29kZSAqLworUENSRTJfU1BUUiBjb2Rlc3RhcnQ7ICAgICAgICAgICAgICAgICAgIC8qIFN0YXJ0IG9mIGNvbXBpbGVkIGNvZGUgKi8KK1BDUkUyX1NQVFIgcHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IHBvaW50ZXIgaW4gcGF0dGVybiAqLworCitzaXplX3QgbGVuZ3RoID0gMTsgICAgICAgICAgICAgICAgICAgICAgLyogQWxsb3cgb3IgZmluYWwgRU5EIG9wY29kZSAqLworc2l6ZV90IHVzZWRsZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgIC8qIEFjdHVhbCBsZW5ndGggdXNlZCAqLworc2l6ZV90IHJlX2Jsb2Nrc2l6ZTsgICAgICAgICAgICAgICAgICAgIC8qIFNpemUgb2YgbWVtb3J5IGJsb2NrICovCisKK2ludDMyX3QgZmlyc3RjdWZsYWdzLCByZXFjdWZsYWdzOyAgICAgICAvKiBUeXBlIG9mIGZpcnN0L3JlcSBjb2RlIHVuaXQgKi8KK3VpbnQzMl90IGZpcnN0Y3UsIHJlcWN1OyAgICAgICAgICAgICAgICAvKiBWYWx1ZSBvZiBmaXJzdC9yZXEgY29kZSB1bml0ICovCit1aW50MzJfdCBzZXRmbGFncyA9IDA7ICAgICAgICAgICAgICAgICAgLyogTkwgYW5kIEJTUiBzZXQgZmxhZ3MgKi8KKwordWludDMyX3Qgc2tpcGF0c3RhcnQ7ICAgICAgICAgICAgICAgICAgIC8qIFdoZW4gY2hlY2tpbmcgKCpVVEYpIGV0YyAqLwordWludDMyX3QgbGltaXRfbWF0Y2ggPSBVSU5UMzJfTUFYOyAgICAgIC8qIFVuc2V0IG1hdGNoIGxpbWl0cyAqLwordWludDMyX3QgbGltaXRfcmVjdXJzaW9uID0gVUlOVDMyX01BWDsKKworaW50IG5ld2xpbmUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVuc2V0OyBjYW4gYmUgc2V0IGJ5IHRoZSBwYXR0ZXJuICovCitpbnQgYnNyID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVW5zZXQ7IGNhbiBiZSBzZXQgYnkgdGhlIHBhdHRlcm4gKi8KK2ludCBlcnJvcmNvZGUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAvKiBJbml0aWFsaXplIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm4gKi8KKworLyogQ29tbWVudHMgYXQgdGhlIGhlYWQgb2YgdGhpcyBmaWxlIGV4cGxhaW4gYWJvdXQgdGhlc2UgdmFyaWFibGVzLiAqLworCitQQ1JFMl9VQ0hBUiAqY29waWVkX3BhdHRlcm4gPSBOVUxMOworUENSRTJfVUNIQVIgc3RhY2tfY29waWVkX3BhdHRlcm5bQ09QSUVEX1BBVFRFUk5fU0laRV07CituYW1lZF9ncm91cCBuYW1lZF9ncm91cHNbTkFNRURfR1JPVVBfTElTVF9TSVpFXTsKKworLyogVGhlIHdvcmtzcGFjZSBpcyB1c2VkIGluIGRpZmZlcmVudCB3YXlzIGluIHRoZSBkaWZmZXJlbnQgY29tcGlsaW5nIHBoYXNlcy4KK0l0IG5lZWRzIHRvIGJlIDE2LWJpdCBhbGlnbmVkIGZvciB0aGUgcHJlbGltaW5hcnkgZ3JvdXAgc2NhbiwgYW5kIDMyLWJpdAorYWxpZ25lZCBmb3IgdGhlIGdyb3VwIGluZm9ybWF0aW9uIGNhY2hlLiAqLworCit1aW50MzJfdCBjMzJ3b3Jrc3BhY2VbQzMyX1dPUktfU0laRV07CitQQ1JFMl9VQ0hBUiAqY3dvcmtzcGFjZSA9IChQQ1JFMl9VQ0hBUiAqKWMzMndvcmtzcGFjZTsKKworCisvKiAtLS0tLS0tLS0tLS0tLSBDaGVjayBhcmd1bWVudHMgYW5kIHNldCB1cCB0aGUgcGF0dGVybiAtLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGVyZSBtdXN0IGJlIGVycm9yIGNvZGUgYW5kIG9mZnNldCBwb2ludGVycy4gKi8KKworaWYgKGVycm9ycHRyID09IE5VTEwgfHwgZXJyb3JvZmZzZXQgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisqZXJyb3JwdHIgPSBFUlIwOworKmVycm9yb2Zmc2V0ID0gMDsKKworLyogVGhlcmUgbXVzdCBiZSBhIHBhdHRlcm4hICovCisKK2lmIChwYXR0ZXJuID09IE5VTEwpCisgIHsKKyAgKmVycm9ycHRyID0gRVJSMTY7CisgIHJldHVybiBOVUxMOworICB9CisKKy8qIENoZWNrIHRoYXQgYWxsIHVuZGVmaW5lZCBwdWJsaWMgb3B0aW9uIGJpdHMgYXJlIHplcm8uICovCisKK2lmICgob3B0aW9ucyAmIH5QVUJMSUNfQ09NUElMRV9PUFRJT05TKSAhPSAwKQorICB7CisgICplcnJvcnB0ciA9IEVSUjE3OworICByZXR1cm4gTlVMTDsKKyAgfQorCisvKiBBIE5VTEwgY29tcGlsZSBjb250ZXh0IG1lYW5zICJ1c2UgYSBkZWZhdWx0IGNvbnRleHQiICovCisKK2lmIChjY29udGV4dCA9PSBOVUxMKQorICBjY29udGV4dCA9IChwY3JlMl9jb21waWxlX2NvbnRleHQgKikoJlBSSVYoZGVmYXVsdF9jb21waWxlX2NvbnRleHQpKTsKKworLyogQSB6ZXJvLXRlcm1pbmF0ZWQgcGF0dGVybiBpcyBpbmRpY2F0ZWQgYnkgdGhlIHNwZWNpYWwgbGVuZ3RoIHZhbHVlCitQQ1JFMl9aRVJPX1RFUk1JTkFURUQuIE90aGVyd2lzZSwgd2UgbWFrZSBhIGNvcHkgb2YgdGhlIHBhdHRlcm4gYW5kIGFkZCBhIHplcm8sCit0byBlbnN1cmUgdGhhdCBpdCBpcyBhbHdheXMgcG9zc2libGUgdG8gbG9vayBvbmUgY29kZSB1bml0IGJleW9uZCB0aGUgZW5kIG9mCit0aGUgcGF0dGVybidzIGNoYXJhY3RlcnMuIEluIGJvdGggY2FzZXMsIGNoZWNrIHRoYXQgdGhlIHBhdHRlcm4gaXMgb3ZlcmxvbmcuICovCisKK2lmIChwYXRsZW4gPT0gUENSRTJfWkVST19URVJNSU5BVEVEKQorICB7CisgIHBhdGxlbiA9IFBSSVYoc3RybGVuKShwYXR0ZXJuKTsKKyAgaWYgKHBhdGxlbiA+IGNjb250ZXh0LT5tYXhfcGF0dGVybl9sZW5ndGgpCisgICAgeworICAgICplcnJvcnB0ciA9IEVSUjg4OworICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgfQorZWxzZQorICB7CisgIGlmIChwYXRsZW4gPiBjY29udGV4dC0+bWF4X3BhdHRlcm5fbGVuZ3RoKQorICAgIHsKKyAgICAqZXJyb3JwdHIgPSBFUlI4ODsKKyAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGlmIChwYXRsZW4gPCBDT1BJRURfUEFUVEVSTl9TSVpFKQorICAgIGNvcGllZF9wYXR0ZXJuID0gc3RhY2tfY29waWVkX3BhdHRlcm47CisgIGVsc2UKKyAgICB7CisgICAgY29waWVkX3BhdHRlcm4gPSBjY29udGV4dC0+bWVtY3RsLm1hbGxvYyhDVTJCWVRFUyhwYXRsZW4gKyAxKSwKKyAgICAgIGNjb250ZXh0LT5tZW1jdGwubWVtb3J5X2RhdGEpOworICAgIGlmIChjb3BpZWRfcGF0dGVybiA9PSBOVUxMKQorICAgICAgeworICAgICAgKmVycm9ycHRyID0gRVJSMjE7CisgICAgICByZXR1cm4gTlVMTDsKKyAgICAgIH0KKyAgICB9CisgIG1lbWNweShjb3BpZWRfcGF0dGVybiwgcGF0dGVybiwgQ1UyQllURVMocGF0bGVuKSk7CisgIGNvcGllZF9wYXR0ZXJuW3BhdGxlbl0gPSAwOworICBwYXR0ZXJuID0gY29waWVkX3BhdHRlcm47CisgIH0KKworLyogLS0tLS0tLS0tLS0tIEluaXRpYWxpemUgdGhlICJzdGF0aWMiIGNvbXBpbGUgZGF0YSAtLS0tLS0tLS0tLS0tLSAqLworCit0YWJsZXMgPSAoY2NvbnRleHQtPnRhYmxlcyAhPSBOVUxMKT8gY2NvbnRleHQtPnRhYmxlcyA6IFBSSVYoZGVmYXVsdF90YWJsZXMpOworCitjYi5sY2MgPSB0YWJsZXMgKyBsY2Nfb2Zmc2V0OyAgICAgICAgICAvKiBJbmRpdmlkdWFsICovCitjYi5mY2MgPSB0YWJsZXMgKyBmY2Nfb2Zmc2V0OyAgICAgICAgICAvKiAgIGNoYXJhY3RlciAqLworY2IuY2JpdHMgPSB0YWJsZXMgKyBjYml0c19vZmZzZXQ7ICAgICAgLyogICAgICB0YWJsZXMgKi8KK2NiLmN0eXBlcyA9IHRhYmxlcyArIGN0eXBlc19vZmZzZXQ7CisKK2NiLmFzc2VydF9kZXB0aCA9IDA7CitjYi5icmFjb3VudCA9IGNiLmZpbmFsX2JyYWNvdW50ID0gMDsKK2NiLmN4ID0gY2NvbnRleHQ7CitjYi5kdXBuYW1lcyA9IEZBTFNFOworY2IuZW5kX3BhdHRlcm4gPSBwYXR0ZXJuICsgcGF0bGVuOworY2IubmVzdHB0clswXSA9IGNiLm5lc3RwdHJbMV0gPSBOVUxMOworY2IuZXh0ZXJuYWxfZmxhZ3MgPSAwOworY2IuZXh0ZXJuYWxfb3B0aW9ucyA9IG9wdGlvbnM7CitjYi5ncm91cGluZm8gPSBjMzJ3b3Jrc3BhY2U7CitjYi5oYWRfcmVjdXJzZSA9IEZBTFNFOworY2IuaXNjb25kYXNzZXJ0ID0gRkFMU0U7CitjYi5tYXhfbG9va2JlaGluZCA9IDA7CitjYi5uYW1lX2VudHJ5X3NpemUgPSAwOworY2IubmFtZV90YWJsZSA9IE5VTEw7CitjYi5uYW1lZF9ncm91cHMgPSBuYW1lZF9ncm91cHM7CitjYi5uYW1lZF9ncm91cF9saXN0X3NpemUgPSBOQU1FRF9HUk9VUF9MSVNUX1NJWkU7CitjYi5uYW1lc19mb3VuZCA9IDA7CitjYi5vcGVuX2NhcHMgPSBOVUxMOworY2IucGFyZW5zX2RlcHRoID0gMDsKK2NiLnJlcV92YXJ5b3B0ID0gMDsKK2NiLnN0YXJ0X2NvZGUgPSBjd29ya3NwYWNlOworY2Iuc3RhcnRfcGF0dGVybiA9IHBhdHRlcm47CitjYi5zdGFydF93b3Jrc3BhY2UgPSBjd29ya3NwYWNlOworY2Iud29ya3NwYWNlX3NpemUgPSBDT01QSUxFX1dPUktfU0laRTsKKworLyogTWF4aW11bSBiYWNrIHJlZmVyZW5jZSBhbmQgYmFja3JlZiBiaXRtYXAuIFRoZSBiaXRtYXAgcmVjb3JkcyB1cCB0byAzMSBiYWNrCityZWZlcmVuY2VzIHRvIGhlbHAgaW4gZGVjaWRpbmcgd2hldGhlciAoLiopIGNhbiBiZSB0cmVhdGVkIGFzIGFuY2hvcmVkIG9yIG5vdC4KKyovCisKK2NiLnRvcF9iYWNrcmVmID0gMDsKK2NiLmJhY2tyZWZfbWFwID0gMDsKKworLyogLS0tLS0tLS0tLS0tLS0tIFN0YXJ0IGxvb2tpbmcgYXQgdGhlIHBhdHRlcm4gLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENoZWNrIGZvciBnbG9iYWwgb25lLXRpbWUgb3B0aW9uIHNldHRpbmdzIGF0IHRoZSBzdGFydCBvZiB0aGUgcGF0dGVybiwgYW5kCityZW1lbWJlciB0aGUgb2Zmc2V0IHRvIHRoZSBhY3R1YWwgcmVnZXguICovCisKK3B0ciA9IHBhdHRlcm47Citza2lwYXRzdGFydCA9IDA7CisKK3doaWxlIChwdHJbc2tpcGF0c3RhcnRdID09IENIQVJfTEVGVF9QQVJFTlRIRVNJUyAmJgorICAgICAgIHB0cltza2lwYXRzdGFydCsxXSA9PSBDSEFSX0FTVEVSSVNLKQorICB7CisgIHVuc2lnbmVkIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHBzb19saXN0KS9zaXplb2YocHNvKTsgaSsrKQorICAgIHsKKyAgICBwc28gKnAgPSBwc29fbGlzdCArIGk7CisKKyAgICBpZiAoUFJJVihzdHJuY21wX2M4KShwdHIrc2tpcGF0c3RhcnQrMiwgKGNoYXIgKikocC0+bmFtZSksIHAtPmxlbmd0aCkgPT0gMCkKKyAgICAgIHsKKyAgICAgIHVpbnQzMl90IGMsIHBwOworCisgICAgICBza2lwYXRzdGFydCArPSBwLT5sZW5ndGggKyAyOworICAgICAgc3dpdGNoKHAtPnR5cGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBQU09fT1BUOgorICAgICAgICBjYi5leHRlcm5hbF9vcHRpb25zIHw9IHAtPnZhbHVlOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBTT19GTEc6CisgICAgICAgIHNldGZsYWdzIHw9IHAtPnZhbHVlOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBTT19OTDoKKyAgICAgICAgbmV3bGluZSA9IHAtPnZhbHVlOworICAgICAgICBzZXRmbGFncyB8PSBQQ1JFMl9OTF9TRVQ7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFNPX0JTUjoKKyAgICAgICAgYnNyID0gcC0+dmFsdWU7CisgICAgICAgIHNldGZsYWdzIHw9IFBDUkUyX0JTUl9TRVQ7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFNPX0xJTU06CisgICAgICAgIGNhc2UgUFNPX0xJTVI6CisgICAgICAgIGMgPSAwOworICAgICAgICBwcCA9IHNraXBhdHN0YXJ0OworICAgICAgICBpZiAoIUlTX0RJR0lUKHB0cltwcF0pKQorICAgICAgICAgIHsKKyAgICAgICAgICBlcnJvcmNvZGUgPSBFUlI2MDsKKyAgICAgICAgICBwdHIgKz0gcHA7CisgICAgICAgICAgZ290byBIQURfRVJST1I7CisgICAgICAgICAgfQorICAgICAgICB3aGlsZSAoSVNfRElHSVQocHRyW3BwXSkpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChjID4gVUlOVDMyX01BWCAvIDEwIC0gMSkgYnJlYWs7ICAgLyogSW50ZWdlciBvdmVyZmxvdyAqLworICAgICAgICAgIGMgPSBjKjEwICsgKHB0cltwcCsrXSAtIENIQVJfMCk7CisgICAgICAgICAgfQorICAgICAgICBpZiAocHRyW3BwKytdICE9IENIQVJfUklHSFRfUEFSRU5USEVTSVMpCisgICAgICAgICAgeworICAgICAgICAgIGVycm9yY29kZSA9IEVSUjYwOworICAgICAgICAgIHB0ciArPSBwcDsKKyAgICAgICAgICBnb3RvIEhBRF9FUlJPUjsKKyAgICAgICAgICB9CisgICAgICAgIGlmIChwLT50eXBlID09IFBTT19MSU1NKSBsaW1pdF9tYXRjaCA9IGM7CisgICAgICAgICAgZWxzZSBsaW1pdF9yZWN1cnNpb24gPSBjOworICAgICAgICBza2lwYXRzdGFydCArPSBwcCAtIHNraXBhdHN0YXJ0OworICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgYnJlYWs7ICAgLyogT3V0IG9mIHRoZSB0YWJsZSBzY2FuIGxvb3AgKi8KKyAgICAgIH0KKyAgICB9CisgIGlmIChpID49IHNpemVvZihwc29fbGlzdCkvc2l6ZW9mKHBzbykpIGJyZWFrOyAgIC8qIE91dCBvZiBwc28gbG9vcCAqLworICB9CisKKy8qIEVuZCBvZiBwYXR0ZXJuLXN0YXJ0IG9wdGlvbnM7IGFkdmFuY2UgdG8gc3RhcnQgb2YgcmVhbCByZWdleC4gKi8KKworcHRyICs9IHNraXBhdHN0YXJ0OworCisvKiBDYW4ndCBzdXBwb3J0IFVURiBvciBVQ1AgdW5sZXNzIFBDUkUyIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggVVRGIHN1cHBvcnQuICovCisKKyNpZm5kZWYgU1VQUE9SVF9VTklDT0RFCitpZiAoKGNiLmV4dGVybmFsX29wdGlvbnMgJiAoUENSRTJfVVRGfFBDUkUyX1VDUCkpICE9IDApCisgIHsKKyAgZXJyb3Jjb2RlID0gRVJSMzI7CisgIGdvdG8gSEFEX0VSUk9SOworICB9CisjZW5kaWYKKworLyogQ2hlY2sgVVRGLiBXZSBoYXZlIHRoZSBvcmlnaW5hbCBvcHRpb25zIGluICdvcHRpb25zJywgd2l0aCB0aGF0IHZhbHVlIGFzCittb2RpZmllZCBieSAoKlVURikgZXRjIGluIGNiLT5leHRlcm5hbF9vcHRpb25zLiAqLworCit1dGYgPSAoY2IuZXh0ZXJuYWxfb3B0aW9ucyAmIFBDUkUyX1VURikgIT0gMDsKK2lmICh1dGYpCisgIHsKKyAgaWYgKChvcHRpb25zICYgUENSRTJfTkVWRVJfVVRGKSAhPSAwKQorICAgIHsKKyAgICBlcnJvcmNvZGUgPSBFUlI3NDsKKyAgICBnb3RvIEhBRF9FUlJPUjsKKyAgICB9CisgIGlmICgob3B0aW9ucyAmIFBDUkUyX05PX1VURl9DSEVDSykgPT0gMCAmJgorICAgICAgIChlcnJvcmNvZGUgPSBQUklWKHZhbGlkX3V0ZikocGF0dGVybiwgcGF0bGVuLCBlcnJvcm9mZnNldCkpICE9IDApCisgICAgZ290byBIQURfVVRGX0VSUk9SOworICB9CisKKy8qIENoZWNrIFVDUCBsb2Nrb3V0LiAqLworCitpZiAoKGNiLmV4dGVybmFsX29wdGlvbnMgJiAoUENSRTJfVUNQfFBDUkUyX05FVkVSX1VDUCkpID09CisgICAgKFBDUkUyX1VDUHxQQ1JFMl9ORVZFUl9VQ1ApKQorICB7CisgIGVycm9yY29kZSA9IEVSUjc1OworICBnb3RvIEhBRF9FUlJPUjsKKyAgfQorCisvKiBQcm9jZXNzIHRoZSBCU1Igc2V0dGluZy4gKi8KKworaWYgKGJzciA9PSAwKSBic3IgPSBjY29udGV4dC0+YnNyX2NvbnZlbnRpb247CisKKy8qIFByb2Nlc3MgdGhlIG5ld2xpbmUgc2V0dGluZy4gKi8KKworaWYgKG5ld2xpbmUgPT0gMCkgbmV3bGluZSA9IGNjb250ZXh0LT5uZXdsaW5lX2NvbnZlbnRpb247CitjYi5ubHR5cGUgPSBOTFRZUEVfRklYRUQ7Citzd2l0Y2gobmV3bGluZSkKKyAgeworICBjYXNlIFBDUkUyX05FV0xJTkVfQ1I6CisgIGNiLm5sbGVuID0gMTsKKyAgY2IubmxbMF0gPSBDSEFSX0NSOworICBicmVhazsKKworICBjYXNlIFBDUkUyX05FV0xJTkVfTEY6CisgIGNiLm5sbGVuID0gMTsKKyAgY2IubmxbMF0gPSBDSEFSX05MOworICBicmVhazsKKworICBjYXNlIFBDUkUyX05FV0xJTkVfQ1JMRjoKKyAgY2IubmxsZW4gPSAyOworICBjYi5ubFswXSA9IENIQVJfQ1I7CisgIGNiLm5sWzFdID0gQ0hBUl9OTDsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9ORVdMSU5FX0FOWToKKyAgY2Iubmx0eXBlID0gTkxUWVBFX0FOWTsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9ORVdMSU5FX0FOWUNSTEY6CisgIGNiLm5sdHlwZSA9IE5MVFlQRV9BTllDUkxGOworICBicmVhazsKKworICBkZWZhdWx0OgorICBlcnJvcmNvZGUgPSBFUlI1NjsKKyAgZ290byBIQURfRVJST1I7CisgIH0KKworLyogQmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIGRvIGEgcHJlLXNjYW4gb2YgdGhlIHBhdHRlcm4gaW4gb3JkZXIgdG8KK2Rpc2NvdmVyIHRoZSBuYW1lZCBncm91cHMgYW5kIHRoZWlyIG51bWVyaWNhbCBlcXVpdmFsZW50cywgc28gdGhhdCB0aGlzCitpbmZvcm1hdGlvbiBpcyBhbHdheXMgYXZhaWxhYmxlIGZvciB0aGUgcmVtYWluaW5nIHByb2Nlc3NpbmcuICovCisKK2Vycm9yY29kZSA9IHNjYW5fZm9yX2NhcHR1cmVzKCZwdHIsIGNiLmV4dGVybmFsX29wdGlvbnMsICZjYik7CitpZiAoZXJyb3Jjb2RlICE9IDApIGdvdG8gSEFEX0VSUk9SOworCisvKiBGb3Igb2JzY3VyZSBkZWJ1Z2dpbmcgdGhpcyBjb2RlIGNhbiBiZSBlbmFibGVkLiAqLworCisjaWYgMAorICB7CisgIGludCBpOworICBuYW1lZF9ncm91cCAqbmcgPSBjYi5uYW1lZF9ncm91cHM7CisgIGZwcmludGYoc3RkZXJyLCAiKysrQ2FwdHVyZXM6ICVkXG4iLCBjYi5maW5hbF9icmFjb3VudCk7CisgIGZvciAoaSA9IDA7IGkgPCBjYi5uYW1lc19mb3VuZDsgaSsrLCBuZysrKQorICAgIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIisrKyUzZCAlLipzXG4iLCBuZy0+bnVtYmVyLCBuZy0+bGVuZ3RoLCBuZy0+bmFtZSk7CisgICAgfQorICB9CisjZW5kaWYKKworLyogUmVzZXQgY3VycmVudCBicmFja2V0IGNvdW50IHRvIHplcm8gYW5kIGN1cnJlbnQgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlCitwYXR0ZXJuLiAqLworCitjYi5icmFjb3VudCA9IDA7CitwdHIgPSBwYXR0ZXJuICsgc2tpcGF0c3RhcnQ7CisKKy8qIFByZXRlbmQgdG8gY29tcGlsZSB0aGUgcGF0dGVybiB3aGlsZSBhY3R1YWxseSBqdXN0IGFjY3VtdWxhdGluZyB0aGUgYW1vdW50CitvZiBtZW1vcnkgcmVxdWlyZWQgaW4gdGhlICdsZW5ndGgnIHZhcmlhYmxlLiBUaGlzIGJlaGF2aW91ciBpcyB0cmlnZ2VyZWQgYnkKK3Bhc3NpbmcgYSBub24tTlVMTCBmaW5hbCBhcmd1bWVudCB0byBjb21waWxlX3JlZ2V4KCkuIFdlIHBhc3MgYSBibG9jayBvZgord29ya3NwYWNlIChjd29ya3NwYWNlKSBmb3IgaXQgdG8gY29tcGlsZSBwYXJ0cyBvZiB0aGUgcGF0dGVybiBpbnRvOyB0aGUKK2NvbXBpbGVkIGNvZGUgaXMgZGlzY2FyZGVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZCwgc28gaG9wZWZ1bGx5IHRoaXMKK3dvcmtzcGFjZSB3aWxsIG5ldmVyIG92ZXJmbG93LCB0aG91Z2ggdGhlcmUgaXMgYSB0ZXN0IGZvciBpdHMgZG9pbmcgc28uCisKK09uIGVycm9yLCBlcnJvcmNvZGUgd2lsbCBiZSBzZXQgbm9uLXplcm8sIHNvIHdlIGRvbid0IG5lZWQgdG8gbG9vayBhdCB0aGUKK3Jlc3VsdCBvZiB0aGUgZnVuY3Rpb24uIFRoZSBpbml0aWFsIG9wdGlvbnMgaGF2ZSBiZWVuIHB1dCBpbnRvIHRoZSBjYiBibG9jayBzbwordGhhdCB0aGV5IGNhbiBiZSBjaGFuZ2VkIGlmIGFuIG9wdGlvbiBzZXR0aW5nIGlzIGZvdW5kIHdpdGhpbiB0aGUgcmVnZXggcmlnaHQKK2F0IHRoZSBiZWdpbm5pbmcuIEJyaW5naW5nIGluaXRpYWwgb3B0aW9uIHNldHRpbmdzIG91dHNpZGUgY2FuIGhlbHAgc3BlZWQgdXAKK3N0YXJ0aW5nIHBvaW50IGNoZWNrcy4gV2Ugc3RpbGwgaGF2ZSB0byBwYXNzIGEgc2VwYXJhdGUgb3B0aW9ucyB2YXJpYWJsZSAodGhlCitmaXJzdCBhcmd1bWVudCkgYmVjYXVzZSB0aGF0IG1heSBjaGFuZ2UgYXMgdGhlIHBhdHRlcm4gaXMgcHJvY2Vzc2VkLiAqLworCitjb2RlID0gY3dvcmtzcGFjZTsKKypjb2RlID0gT1BfQlJBOworCisodm9pZCljb21waWxlX3JlZ2V4KGNiLmV4dGVybmFsX29wdGlvbnMsICZjb2RlLCAmcHRyLCAmZXJyb3Jjb2RlLCBGQUxTRSwKKyAgRkFMU0UsIDAsIDAsICZmaXJzdGN1LCAmZmlyc3RjdWZsYWdzLCAmcmVxY3UsICZyZXFjdWZsYWdzLCBOVUxMLAorICAmY2IsICZsZW5ndGgpOworCitpZiAoZXJyb3Jjb2RlICE9IDApIGdvdG8gSEFEX0VSUk9SOworaWYgKGxlbmd0aCA+IE1BWF9QQVRURVJOX1NJWkUpCisgIHsKKyAgZXJyb3Jjb2RlID0gRVJSMjA7CisgIGdvdG8gSEFEX0VSUk9SOworICB9CisKKy8qIENvbXB1dGUgdGhlIHNpemUgb2YsIGFuZCB0aGVuIGdldCBhbmQgaW5pdGlhbGl6ZSwgdGhlIGRhdGEgYmxvY2sgZm9yIHN0b3JpbmcKK3RoZSBjb21waWxlZCBwYXR0ZXJuIGFuZCBuYW1lcyB0YWJsZS4gSW50ZWdlciBvdmVyZmxvdyBzaG91bGQgbm8gbG9uZ2VyIGJlCitwb3NzaWJsZSBiZWNhdXNlIG5vd2FkYXlzIHdlIGxpbWl0IHRoZSBtYXhpbXVtIHZhbHVlIG9mIGNiLm5hbWVzX2ZvdW5kIGFuZAorY2IubmFtZV9lbnRyeV9zaXplLiAqLworCityZV9ibG9ja3NpemUgPSBzaXplb2YocGNyZTJfcmVhbF9jb2RlKSArCisgIENVMkJZVEVTKGxlbmd0aCArIGNiLm5hbWVzX2ZvdW5kICogY2IubmFtZV9lbnRyeV9zaXplKTsKK3JlID0gKHBjcmUyX3JlYWxfY29kZSAqKQorICBjY29udGV4dC0+bWVtY3RsLm1hbGxvYyhyZV9ibG9ja3NpemUsIGNjb250ZXh0LT5tZW1jdGwubWVtb3J5X2RhdGEpOworaWYgKHJlID09IE5VTEwpCisgIHsKKyAgZXJyb3Jjb2RlID0gRVJSMjE7CisgIGdvdG8gSEFEX0VSUk9SOworICB9CisKK3JlLT5tZW1jdGwgPSBjY29udGV4dC0+bWVtY3RsOworcmUtPnRhYmxlcyA9IHRhYmxlczsKK3JlLT5leGVjdXRhYmxlX2ppdCA9IE5VTEw7CittZW1zZXQocmUtPnN0YXJ0X2JpdG1hcCwgMCwgMzIgKiBzaXplb2YodWludDhfdCkpOworcmUtPmJsb2Nrc2l6ZSA9IHJlX2Jsb2Nrc2l6ZTsKK3JlLT5tYWdpY19udW1iZXIgPSBNQUdJQ19OVU1CRVI7CityZS0+Y29tcGlsZV9vcHRpb25zID0gb3B0aW9uczsKK3JlLT5vdmVyYWxsX29wdGlvbnMgPSBjYi5leHRlcm5hbF9vcHRpb25zOworcmUtPmZsYWdzID0gUENSRTJfQ09ERV9VTklUX1dJRFRILzggfCBjYi5leHRlcm5hbF9mbGFncyB8IHNldGZsYWdzOworcmUtPmxpbWl0X21hdGNoID0gbGltaXRfbWF0Y2g7CityZS0+bGltaXRfcmVjdXJzaW9uID0gbGltaXRfcmVjdXJzaW9uOworcmUtPmZpcnN0X2NvZGV1bml0ID0gMDsKK3JlLT5sYXN0X2NvZGV1bml0ID0gMDsKK3JlLT5ic3JfY29udmVudGlvbiA9IGJzcjsKK3JlLT5uZXdsaW5lX2NvbnZlbnRpb24gPSBuZXdsaW5lOworcmUtPm1heF9sb29rYmVoaW5kID0gMDsKK3JlLT5taW5sZW5ndGggPSAwOworcmUtPnRvcF9icmFja2V0ID0gMDsKK3JlLT50b3BfYmFja3JlZiA9IDA7CityZS0+bmFtZV9lbnRyeV9zaXplID0gY2IubmFtZV9lbnRyeV9zaXplOworcmUtPm5hbWVfY291bnQgPSBjYi5uYW1lc19mb3VuZDsKKworLyogVGhlIGJhc2ljIGJsb2NrIGlzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IHRoZSBuYW1lIHRhYmxlLCBhbmQgdGhlIGNvbXBpbGVkCitjb2RlIGZvbGxvd3MgYWZ0ZXIgdGhhdC4gKi8KKworY29kZXN0YXJ0ID0gKFBDUkUyX1NQVFIpKCh1aW50OF90ICopcmUgKyBzaXplb2YocGNyZTJfcmVhbF9jb2RlKSkgKworICByZS0+bmFtZV9lbnRyeV9zaXplICogcmUtPm5hbWVfY291bnQ7CisKKy8qIFdvcmtzcGFjZSBpcyBuZWVkZWQgdG8gcmVtZW1iZXIgaW5mb3JtYXRpb24gYWJvdXQgbnVtYmVyZWQgZ3JvdXBzOiB3aGV0aGVyIGEKK2dyb3VwIGNhbiBtYXRjaCBhbiBlbXB0eSBzdHJpbmcgYW5kIHdoYXQgaXRzIGZpeGVkIGxlbmd0aCBpcy4gVGhpcyBpcyBkb25lIHRvCithdm9pZCB0aGUgcG9zc2liaWxpdHkgb2YgcmVjdXJzaXZlIHJlZmVyZW5jZXMgY2F1c2luZyB2ZXJ5IGxvbmcgY29tcGlsZSB0aW1lcword2hlbiBjaGVja2luZyB0aGVzZSBmZWF0dXJlcy4gVW5udW1iZXJlZCBncm91cHMgZG8gbm90IGhhdmUgdGhpcyBleHBvc3VyZSBzaW5jZQordGhleSBjYW5ub3QgYmUgcmVmZXJlbmNlZC4gV2UgdXNlIGFuIGluZGV4ZWQgdmVjdG9yIGZvciB0aGlzIHB1cnBvc2UuIElmIHRoZXJlCithcmUgc3VmZmljaWVudGx5IGZldyBncm91cHMsIGl0IGNhbiBiZSB0aGUgYzMyd29ya3NwYWNlIHZlY3RvciwgYXMgc2V0IHVwCithYm92ZS4gT3RoZXJ3aXNlIHdlIGhhdmUgdG8gZ2V0L2ZyZWUgYSBzcGVjaWFsIHZlY3Rvci4gVGhlIHZlY3RvciBtdXN0IGJlCitpbml0aWFsaXplZCB0byB6ZXJvLiAqLworCitpZiAoY2IuZmluYWxfYnJhY291bnQgPj0gQzMyX1dPUktfU0laRSkKKyAgeworICBjYi5ncm91cGluZm8gPSBjY29udGV4dC0+bWVtY3RsLm1hbGxvYygKKyAgICAoY2IuZmluYWxfYnJhY291bnQgKyAxKSpzaXplb2YodWludDMyX3QpLCBjY29udGV4dC0+bWVtY3RsLm1lbW9yeV9kYXRhKTsKKyAgaWYgKGNiLmdyb3VwaW5mbyA9PSBOVUxMKQorICAgIHsKKyAgICBlcnJvcmNvZGUgPSBFUlIyMTsKKyAgICBnb3RvIEhBRF9FUlJPUjsKKyAgICB9CisgIH0KK21lbXNldChjYi5ncm91cGluZm8sIDAsIChjYi5maW5hbF9icmFjb3VudCArIDEpICogc2l6ZW9mKHVpbnQzMl90KSk7CisKKy8qIFVwZGF0ZSB0aGUgY29tcGlsZSBkYXRhIGJsb2NrIGZvciB0aGUgYWN0dWFsIGNvbXBpbGUuIFRoZSBzdGFydGluZyBwb2ludHMgb2YKK3RoZSBuYW1lL251bWJlciB0cmFuc2xhdGlvbiB0YWJsZSBhbmQgb2YgdGhlIGNvZGUgYXJlIHBhc3NlZCBhcm91bmQgaW4gdGhlCitjb21waWxlIGRhdGEgYmxvY2suIFRoZSBzdGFydC9lbmQgcGF0dGVybiBhbmQgaW5pdGlhbCBvcHRpb25zIGFyZSBhbHJlYWR5IHNldAorZnJvbSB0aGUgcHJlLWNvbXBpbGUgcGhhc2UsIGFzIGlzIHRoZSBuYW1lX2VudHJ5X3NpemUgZmllbGQuIFJlc2V0IHRoZSBicmFja2V0Citjb3VudCBhbmQgdGhlIG5hbWVzX2ZvdW5kIGZpZWxkLiAqLworCitjYi5wYXJlbnNfZGVwdGggPSAwOworY2IuYXNzZXJ0X2RlcHRoID0gMDsKK2NiLmJyYWNvdW50ID0gMDsKK2NiLm1heF9sb29rYmVoaW5kID0gMDsKK2NiLm5hbWVfdGFibGUgPSAoUENSRTJfVUNIQVIgKikoKHVpbnQ4X3QgKilyZSArIHNpemVvZihwY3JlMl9yZWFsX2NvZGUpKTsKK2NiLnN0YXJ0X2NvZGUgPSBjb2Rlc3RhcnQ7CitjYi5pc2NvbmRhc3NlcnQgPSBGQUxTRTsKK2NiLnJlcV92YXJ5b3B0ID0gMDsKK2NiLmhhZF9hY2NlcHQgPSBGQUxTRTsKK2NiLmhhZF9wcnVuZW9yc2tpcCA9IEZBTFNFOworY2IuY2hlY2tfbG9va2JlaGluZCA9IEZBTFNFOworY2Iub3Blbl9jYXBzID0gTlVMTDsKKworLyogSWYgYW55IG5hbWVkIGdyb3VwcyB3ZXJlIGZvdW5kLCBjcmVhdGUgdGhlIG5hbWUvbnVtYmVyIHRhYmxlIGZyb20gdGhlIGxpc3QKK2NyZWF0ZWQgaW4gdGhlIHByZS1wYXNzLiAqLworCitpZiAoY2IubmFtZXNfZm91bmQgPiAwKQorICB7CisgIGludCBpID0gY2IubmFtZXNfZm91bmQ7CisgIG5hbWVkX2dyb3VwICpuZyA9IGNiLm5hbWVkX2dyb3VwczsKKyAgY2IubmFtZXNfZm91bmQgPSAwOworICBmb3IgKDsgaSA+IDA7IGktLSwgbmcrKykKKyAgICBhZGRfbmFtZV90b190YWJsZSgmY2IsIG5nLT5uYW1lLCBuZy0+bGVuZ3RoLCBuZy0+bnVtYmVyKTsKKyAgfQorCisvKiBTZXQgdXAgYSBzdGFydGluZywgbm9uLWV4dHJhY3RpbmcgYnJhY2tldCwgdGhlbiBjb21waWxlIHRoZSBleHByZXNzaW9uLiBPbgorZXJyb3IsIGVycm9yY29kZSB3aWxsIGJlIHNldCBub24temVybywgc28gd2UgZG9uJ3QgbmVlZCB0byBsb29rIGF0IHRoZSByZXN1bHQKK29mIHRoZSBmdW5jdGlvbiBoZXJlLiAqLworCitwdHIgPSBwYXR0ZXJuICsgc2tpcGF0c3RhcnQ7Citjb2RlID0gKFBDUkUyX1VDSEFSICopY29kZXN0YXJ0OworKmNvZGUgPSBPUF9CUkE7Cisodm9pZCljb21waWxlX3JlZ2V4KHJlLT5vdmVyYWxsX29wdGlvbnMsICZjb2RlLCAmcHRyLCAmZXJyb3Jjb2RlLCBGQUxTRSwgRkFMU0UsCisgICAwLCAwLCAmZmlyc3RjdSwgJmZpcnN0Y3VmbGFncywgJnJlcWN1LCAmcmVxY3VmbGFncywgTlVMTCwgJmNiLCBOVUxMKTsKKworcmUtPnRvcF9icmFja2V0ID0gY2IuYnJhY291bnQ7CityZS0+dG9wX2JhY2tyZWYgPSBjYi50b3BfYmFja3JlZjsKK3JlLT5tYXhfbG9va2JlaGluZCA9IGNiLm1heF9sb29rYmVoaW5kOworCitpZiAoY2IuaGFkX2FjY2VwdCkKKyAgeworICByZXFjdSA9IDA7ICAgICAgICAgICAgICAvKiBNdXN0IGRpc2FibGUgYWZ0ZXIgKCpBQ0NFUFQpICovCisgIHJlcWN1ZmxhZ3MgPSBSRVFfTk9ORTsKKyAgfQorCisvKiBJZiB3ZSBoYXZlIG5vdCByZWFjaGVkIGVuZCBvZiBwYXR0ZXJuIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjb21waWxlLCB0aGVyZSdzIGFuCitleGNlc3MgYnJhY2tldC4gRmlsbCBpbiB0aGUgZmluYWwgb3Bjb2RlIGFuZCBjaGVjayBmb3IgZGlzYXN0cm91cyBvdmVyZmxvdy4KK0lmIG5vIG92ZXJmbG93LCBidXQgdGhlIGVzdGltYXRlZCBsZW5ndGggZXhjZWVkcyB0aGUgcmVhbGx5IHVzZWQgbGVuZ3RoLCBhZGp1c3QKK3RoZSB2YWx1ZSBvZiByZS0+YmxvY2tzaXplLCBhbmQgaWYgdmFsZ3JpbmQgc3VwcG9ydCBpcyBjb25maWd1cmVkLCBtYXJrIHRoZQorZXh0cmEgYWxsb2NhdGVkIG1lbW9yeSBhcyB1bmFkZHJlc3NhYmxlLCBzbyB0aGF0IGFueSBvdXQtb2YtYm91bmQgcmVhZHMgY2FuIGJlCitkZXRlY3RlZC4gKi8KKworaWYgKGVycm9yY29kZSA9PSAwICYmIHB0ciA8IGNiLmVuZF9wYXR0ZXJuKSBlcnJvcmNvZGUgPSBFUlIyMjsKKypjb2RlKysgPSBPUF9FTkQ7Cit1c2VkbGVuZ3RoID0gY29kZSAtIGNvZGVzdGFydDsKK2lmICh1c2VkbGVuZ3RoID4gbGVuZ3RoKSBlcnJvcmNvZGUgPSBFUlIyMzsgZWxzZQorICB7CisgIHJlLT5ibG9ja3NpemUgLT0gQ1UyQllURVMobGVuZ3RoIC0gdXNlZGxlbmd0aCk7CisjaWZkZWYgU1VQUE9SVF9WQUxHUklORAorICBWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhjb2RlLCBDVTJCWVRFUyhsZW5ndGggLSB1c2VkbGVuZ3RoKSk7CisjZW5kaWYKKyAgfQorCisvKiBTY2FuIHRoZSBwYXR0ZXJuIGZvciByZWN1cnNpb24vc3Vicm91dGluZSBjYWxscyBhbmQgY29udmVydCB0aGUgZ3JvdXAKK251bWJlcnMgaW50byBvZmZzZXRzLiBNYWludGFpbiBhIHNtYWxsIGNhY2hlIHNvIHRoYXQgcmVwZWF0ZWQgZ3JvdXBzIGNvbnRhaW5pbmcKK3JlY3Vyc2lvbnMgYXJlIGVmZmljaWVudGx5IGhhbmRsZWQuICovCisKKyNkZWZpbmUgUlNDQU5fQ0FDSEVfU0laRSA4CisKK2lmIChlcnJvcmNvZGUgPT0gMCAmJiBjYi5oYWRfcmVjdXJzZSkKKyAgeworICBQQ1JFMl9VQ0hBUiAqcmNvZGU7CisgIFBDUkUyX1NQVFIgcmdyb3VwOworICBpbnQgY2NvdW50ID0gMDsKKyAgaW50IHN0YXJ0ID0gUlNDQU5fQ0FDSEVfU0laRTsKKyAgcmVjdXJzZV9jYWNoZSByY1tSU0NBTl9DQUNIRV9TSVpFXTsKKworICBmb3IgKHJjb2RlID0gKFBDUkUyX1VDSEFSICopZmluZF9yZWN1cnNlKGNvZGVzdGFydCwgdXRmKTsKKyAgICAgICByY29kZSAhPSBOVUxMOworICAgICAgIHJjb2RlID0gKFBDUkUyX1VDSEFSICopZmluZF9yZWN1cnNlKHJjb2RlICsgMSArIExJTktfU0laRSwgdXRmKSkKKyAgICB7CisgICAgaW50IGksIHAsIHJlY25vOworCisgICAgcmVjbm8gPSAoaW50KUdFVChyY29kZSwgMSk7CisgICAgaWYgKHJlY25vID09IDApIHJncm91cCA9IGNvZGVzdGFydDsgZWxzZQorICAgICAgeworICAgICAgUENSRTJfU1BUUiBzZWFyY2hfZnJvbSA9IGNvZGVzdGFydDsKKyAgICAgIHJncm91cCA9IE5VTEw7CisgICAgICBmb3IgKGkgPSAwLCBwID0gc3RhcnQ7IGkgPCBjY291bnQ7IGkrKywgcCA9IChwICsgMSkgJiA3KQorICAgICAgICB7CisgICAgICAgIGlmIChyZWNubyA9PSByY1twXS5yZWNubykKKyAgICAgICAgICB7CisgICAgICAgICAgcmdyb3VwID0gcmNbcF0uZ3JvdXA7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgIC8qIEdyb3VwIG4rMSBtdXN0IGFsd2F5cyBzdGFydCB0byB0aGUgcmlnaHQgb2YgZ3JvdXAgbiwgc28gd2UgY2FuIHNhdmUKKyAgICAgICAgc2VhcmNoIHRpbWUgYmVsb3cgd2hlbiB0aGUgbmV3IGdyb3VwIG51bWJlciBpcyBncmVhdGVyIHRoYW4gYW55IG9mIHRoZQorICAgICAgICBwcmV2aW91c2x5IGZvdW5kIGdyb3Vwcy4gKi8KKworICAgICAgICBpZiAocmVjbm8gPiByY1twXS5yZWNubykgc2VhcmNoX2Zyb20gPSByY1twXS5ncm91cDsKKyAgICAgICAgfQorCisgICAgICBpZiAocmdyb3VwID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgcmdyb3VwID0gUFJJVihmaW5kX2JyYWNrZXQpKHNlYXJjaF9mcm9tLCB1dGYsIHJlY25vKTsKKyAgICAgICAgaWYgKHJncm91cCA9PSBOVUxMKQorICAgICAgICAgIHsKKyAgICAgICAgICBlcnJvcmNvZGUgPSBFUlI1MzsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIGlmICgtLXN0YXJ0IDwgMCkgc3RhcnQgPSBSU0NBTl9DQUNIRV9TSVpFIC0gMTsKKyAgICAgICAgcmNbc3RhcnRdLnJlY25vID0gcmVjbm87CisgICAgICAgIHJjW3N0YXJ0XS5ncm91cCA9IHJncm91cDsKKyAgICAgICAgaWYgKGNjb3VudCA8IFJTQ0FOX0NBQ0hFX1NJWkUpIGNjb3VudCsrOworICAgICAgICB9CisgICAgICB9CisKKyAgICBQVVQocmNvZGUsIDEsIHJncm91cCAtIGNvZGVzdGFydCk7CisgICAgfQorICB9CisKKy8qIEluIHJhcmUgZGVidWdnaW5nIHNpdHVhdGlvbnMgd2Ugc29tZXRpbWVzIG5lZWQgdG8gbG9vayBhdCB0aGUgY29tcGlsZWQgY29kZQorYXQgdGhpcyBzdGFnZS4gKi8KKworI2lmZGVmIENBTExfUFJJTlRJTlQKK3BjcmUyX3ByaW50aW50KHJlLCBzdGRlcnIsIFRSVUUpOworZnByaW50ZihzdGRlcnIsICJMZW5ndGg9JWx1IFVzZWQ9JWx1XG4iLCBsZW5ndGgsIHVzZWRsZW5ndGgpOworI2VuZGlmCisKKy8qIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjb21waWxlLCBnaXZlIGFuIGVycm9yIGlmIHRoZXJlJ3MgYmFjayByZWZlcmVuY2UgdG8gYQorbm9uLWV4aXN0ZW50IGNhcHR1cmluZyBzdWJwYXR0ZXJuLiBUaGVuLCB1bmxlc3MgZGlzYWJsZWQsIGNoZWNrIHdoZXRoZXIgYW55CitzaW5nbGUgY2hhcmFjdGVyIGl0ZXJhdG9ycyBjYW4gYmUgYXV0by1wb3NzZXNzaWZpZWQuIFRoZSBmdW5jdGlvbiBvdmVyd3JpdGVzCit0aGUgYXBwcm9wcmlhdGUgb3Bjb2RlIHZhbHVlcywgc28gdGhlIHR5cGUgb2YgdGhlIHBvaW50ZXIgbXVzdCBiZSBjYXN0LiBOT1RFOgordGhlIGludGVybWVkaWF0ZSB2YXJpYWJsZSAidGVtcCIgaXMgdXNlZCBpbiB0aGlzIGNvZGUgYmVjYXVzZSBhdCBsZWFzdCBvbmUKK2NvbXBpbGVyIGdpdmVzIGEgd2FybmluZyBhYm91dCBsb3NzIG9mICJjb25zdCIgYXR0cmlidXRlIGlmIHRoZSBjYXN0CisoUENSRTJfVUNIQVIgKiljb2Rlc3RhcnQgaXMgdXNlZCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gY2FsbC4gKi8KKworaWYgKGVycm9yY29kZSA9PSAwKQorICB7CisgIGlmIChyZS0+dG9wX2JhY2tyZWYgPiByZS0+dG9wX2JyYWNrZXQpIGVycm9yY29kZSA9IEVSUjE1OworICBlbHNlIGlmICgocmUtPm92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX05PX0FVVE9fUE9TU0VTUykgPT0gMCkKKyAgICB7CisgICAgUENSRTJfVUNIQVIgKnRlbXAgPSAoUENSRTJfVUNIQVIgKiljb2Rlc3RhcnQ7CisgICAgaWYgKFBSSVYoYXV0b19wb3NzZXNzaWZ5KSh0ZW1wLCB1dGYsICZjYikgIT0gMCkgZXJyb3Jjb2RlID0gRVJSODA7CisgICAgfQorICB9CisKKy8qIElmIHRoZXJlIHdlcmUgYW55IGxvb2tiZWhpbmQgYXNzZXJ0aW9ucyB0aGF0IGNvbnRhaW5lZCBPUF9SRUNVUlNFCisocmVjdXJzaW9ucyBvciBzdWJyb3V0aW5lIGNhbGxzKSwgYSBmbGFnIGlzIHNldCBmb3IgdGhlbSB0byBiZSBjaGVja2VkIGhlcmUsCitiZWNhdXNlIHRoZXkgbWF5IGNvbnRhaW4gZm9yd2FyZCByZWZlcmVuY2VzLiBBY3R1YWwgcmVjdXJzaW9ucyBjYW5ub3QgYmUgZml4ZWQKK2xlbmd0aCwgYnV0IHN1YnJvdXRpbmUgY2FsbHMgY2FuLiBJdCBpcyBkb25lIGxpa2UgdGhpcyBzbyB0aGF0IHRob3NlIHdpdGhvdXQKK09QX1JFQ1VSU0UgdGhhdCBhcmUgbm90IGZpeGVkIGxlbmd0aCBnZXQgYSBkaWFnbm9zaWMgd2l0aCBhIHVzZWZ1bCBvZmZzZXQuIFRoZQorZXhjZXB0aW9uYWwgb25lcyBmb3JnbyB0aGlzLiBXZSBzY2FuIHRoZSBwYXR0ZXJuIHRvIGNoZWNrIHRoYXQgdGhleSBhcmUgZml4ZWQKK2xlbmd0aCwgYW5kIHNldCB0aGVpciBsZW5ndGhzLiAqLworCitpZiAoZXJyb3Jjb2RlID09IDAgJiYgY2IuY2hlY2tfbG9va2JlaGluZCkKKyAgeworICBQQ1JFMl9VQ0hBUiAqY2MgPSAoUENSRTJfVUNIQVIgKiljb2Rlc3RhcnQ7CisKKyAgLyogTG9vcCwgc2VhcmNoaW5nIGZvciBPUF9SRVZFUlNFIGl0ZW1zLCBhbmQgcHJvY2VzcyB0aG9zZSB0aGF0IGRvIG5vdCBoYXZlCisgIHRoZWlyIGxlbmd0aCBzZXQuIChBY3R1YWxseSwgaXQgd2lsbCBhbHNvIHJlLXByb2Nlc3MgYW55IHRoYXQgaGF2ZSBhIGxlbmd0aAorICBvZiB6ZXJvLCBidXQgdGhhdCBpcyBhIHBhdGhvbG9naWNhbCBjYXNlLCBhbmQgaXQgZG9lcyBubyBoYXJtLikgV2hlbiB3ZSBmaW5kCisgIG9uZSwgd2UgdGVtcG9yYXJpbHkgdGVybWluYXRlIHRoZSBicmFuY2ggaXQgaXMgaW4gd2hpbGUgd2Ugc2NhbiBpdC4gTm90ZSB0aGF0CisgIGNhbGxpbmcgZmluZF9icmFja2V0KCkgd2l0aCBhIG5lZ2F0aXZlIGdyb3VwIG51bWJlciByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUKKyAgT1BfUkVWRVJTRSBpdGVtLCBub3QgdGhlIGFjdHVhbCBsb29rYmVoaW5kLiAqLworCisgIGZvciAoY2MgPSAoUENSRTJfVUNIQVIgKilQUklWKGZpbmRfYnJhY2tldCkoY29kZXN0YXJ0LCB1dGYsIC0xKTsKKyAgICAgICBjYyAhPSBOVUxMOworICAgICAgIGNjID0gKFBDUkUyX1VDSEFSICopUFJJVihmaW5kX2JyYWNrZXQpKGNjLCB1dGYsIC0xKSkKKyAgICB7CisgICAgaWYgKEdFVChjYywgMSkgPT0gMCkKKyAgICAgIHsKKyAgICAgIGludCBmaXhlZF9sZW5ndGg7CisgICAgICBpbnQgY291bnQgPSAwOworICAgICAgUENSRTJfVUNIQVIgKmJlID0gY2MgLSAxIC0gTElOS19TSVpFICsgR0VUKGNjLCAtTElOS19TSVpFKTsKKyAgICAgIGludCBlbmRfb3AgPSAqYmU7CisgICAgICAqYmUgPSBPUF9FTkQ7CisgICAgICBmaXhlZF9sZW5ndGggPSBmaW5kX2ZpeGVkbGVuZ3RoKGNjLCB1dGYsIFRSVUUsICZjYiwgTlVMTCwgJmNvdW50KTsKKyAgICAgICpiZSA9IGVuZF9vcDsKKyAgICAgIGlmIChmaXhlZF9sZW5ndGggPCAwKQorICAgICAgICB7CisgICAgICAgIGVycm9yY29kZSA9IGZpeGVkX2xlbmd0aF9lcnJvcnNbLWZpeGVkX2xlbmd0aF07CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBpZiAoZml4ZWRfbGVuZ3RoID4gY2IubWF4X2xvb2tiZWhpbmQpIGNiLm1heF9sb29rYmVoaW5kID0gZml4ZWRfbGVuZ3RoOworICAgICAgUFVUKGNjLCAxLCBmaXhlZF9sZW5ndGgpOworICAgICAgfQorICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7CisgICAgfQorCisgIC8qIFRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgbWF4aW11bSBsb29rYmVoaW5kIHdhcyB0cmFuc2ZlcnJlZCB0byB0aGUKKyAgY29tcGlsZWQgcmVnZXggYmxvY2sgYWJvdmUuIFdlIGNvdWxkIGhhdmUgdXBkYXRlZCB0aGlzIHZhbHVlIGluIHRoZSBsb29wCisgIGFib3ZlLCBidXQga2VlcCB0aGUgdHdvIHZhbHVlcyBpbiBzdGVwLCBqdXN0IGluIGNhc2Ugc29tZSBsYXRlciBjb2RlIGJlbG93CisgIHVzZXMgdGhlIGNiIHZhbHVlLiAqLworCisgIHJlLT5tYXhfbG9va2JlaGluZCA9IGNiLm1heF9sb29rYmVoaW5kOworICB9CisKKy8qIEZhaWxlZCB0byBjb21waWxlLCBvciBlcnJvciB3aGlsZSBwb3N0LXByb2Nlc3NpbmcuIEVhcmxpZXIgZXJyb3JzIGdldCBoZXJlCit2aWEgdGhlIGRyZWFkZWQgZ290by4gKi8KKworaWYgKGVycm9yY29kZSAhPSAwKQorICB7CisgIEhBRF9FUlJPUjoKKyAgKmVycm9yb2Zmc2V0ID0gKGludCkocHRyIC0gcGF0dGVybik7CisgIEhBRF9VVEZfRVJST1I6CisgICplcnJvcnB0ciA9IGVycm9yY29kZTsKKyAgcGNyZTJfY29kZV9mcmVlKHJlKTsKKyAgcmUgPSBOVUxMOworICBnb3RvIEVYSVQ7CisgIH0KKworLyogU3VjY2Vzc2Z1bCBjb21waWxlLiBJZiB0aGUgYW5jaG9yZWQgb3B0aW9uIHdhcyBub3QgcGFzc2VkLCBzZXQgaXQgaWYKK3dlIGNhbiBkZXRlcm1pbmUgdGhhdCB0aGUgcGF0dGVybiBpcyBhbmNob3JlZCBieSB2aXJ0dWUgb2YgXiBjaGFyYWN0ZXJzIG9yIFxBCitvciBhbnl0aGluZyBlbHNlLCBzdWNoIGFzIHN0YXJ0aW5nIHdpdGggbm9uLWF0b21pYyAuKiB3aGVuIERPVEFMTCBpcyBzZXQgYW5kCit0aGVyZSBhcmUgbm8gb2NjdXJyZW5jZXMgb2YgKlBSVU5FIG9yICpTS0lQICh0aG91Z2ggdGhlcmUgaXMgYW4gb3B0aW9uIHRvCitkaXNhYmxlIHRoaXMgY2FzZSkuICovCisKK2lmICgocmUtPm92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX0FOQ0hPUkVEKSA9PSAwICYmCisgICAgIGlzX2FuY2hvcmVkKGNvZGVzdGFydCwgMCwgJmNiLCAwKSkKKyAgcmUtPm92ZXJhbGxfb3B0aW9ucyB8PSBQQ1JFMl9BTkNIT1JFRDsKKworLyogSWYgdGhlIHBhdHRlcm4gaXMgc3RpbGwgbm90IGFuY2hvcmVkIGFuZCB3ZSBkbyBub3QgaGF2ZSBhIGZpcnN0IGNvZGUgdW5pdCwKK3NlZSBpZiB0aGVyZSBpcyBvbmUgdGhhdCBpcyBhc3NlcnRlZCAodGhlc2UgYXJlIG5vdCBzYXZlZCBkdXJpbmcgdGhlIGNvbXBpbGUKK2JlY2F1c2UgdGhleSBjYW4gY2F1c2UgY29uZmxpY3RzIHdpdGggYWN0dWFsIGxpdGVyYWxzIHRoYXQgZm9sbG93KS4gVGhpcyBjb2RlCituZWVkIG5vdCBiZSBvYmV5ZWQgaWYgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUgaXMgc2V0LCBhcyB0aGUgZGF0YSBpdCB3b3VsZAorY3JlYXRlIHdpbGwgbm90IGJlIHVzZWQuICovCisKK2lmICgocmUtPm92ZXJhbGxfb3B0aW9ucyAmIChQQ1JFMl9BTkNIT1JFRHxQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSkpID09IDApCisgIHsKKyAgaWYgKGZpcnN0Y3VmbGFncyA8IDApCisgICAgZmlyc3RjdSA9IGZpbmRfZmlyc3Rhc3NlcnRlZGN1KGNvZGVzdGFydCwgJmZpcnN0Y3VmbGFncywgRkFMU0UpOworCisgIC8qIFNhdmUgdGhlIGRhdGEgZm9yIGEgZmlyc3QgY29kZSB1bml0LiAqLworCisgIGlmIChmaXJzdGN1ZmxhZ3MgPj0gMCkKKyAgICB7CisgICAgcmUtPmZpcnN0X2NvZGV1bml0ID0gZmlyc3RjdTsKKyAgICByZS0+ZmxhZ3MgfD0gUENSRTJfRklSU1RTRVQ7CisKKyAgICAvKiBIYW5kbGUgY2FzZWxlc3MgZmlyc3QgY29kZSB1bml0cy4gKi8KKworICAgIGlmICgoZmlyc3RjdWZsYWdzICYgUkVRX0NBU0VMRVNTKSAhPSAwKQorICAgICAgeworICAgICAgaWYgKGZpcnN0Y3UgPCAxMjggfHwgKCF1dGYgJiYgZmlyc3RjdSA8IDI1NSkpCisgICAgICAgIHsKKyAgICAgICAgaWYgKGNiLmZjY1tmaXJzdGN1XSAhPSBmaXJzdGN1KSByZS0+ZmxhZ3MgfD0gUENSRTJfRklSU1RDQVNFTEVTUzsKKyAgICAgICAgfQorCisgICAgICAvKiBUaGUgZmlyc3QgY29kZSB1bml0IGlzID4gMTI4IGluIFVURiBtb2RlLCBvciA+IDI1NSBvdGhlcndpc2UuIEluCisgICAgICA4LWJpdCBVVEYgbW9kZSwgY29kZXBvaW50cyBpbiB0aGUgcmFuZ2UgMTI4LTI1NSBhcmUgaW50cm9kdWN0b3J5IGNvZGUKKyAgICAgIHBvaW50cyBhbmQgY2Fubm90IGhhdmUgYW5vdGhlciBjYXNlLiBJbiAxNi1iaXQgYW5kIDMyLWJpdCBtb2Rlcywgd2UgY2FuCisgICAgICBjaGVjayB3aWRlIGNoYXJhY3RlcnMgd2hlbiBVVEYgKGFuZCB0aGVyZWZvcmUgVUNQKSBpcyBzdXBwb3J0ZWQuICovCisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgICAgZWxzZSBpZiAoZmlyc3RjdSA8PSBNQVhfVVRGX0NPREVfUE9JTlQgJiYKKyAgICAgICAgICAgICAgIFVDRF9PVEhFUkNBU0UoZmlyc3RjdSkgIT0gZmlyc3RjdSkKKyAgICAgICAgcmUtPmZsYWdzIHw9IFBDUkUyX0ZJUlNUQ0FTRUxFU1M7CisjZW5kaWYKKyAgICAgIH0KKyAgICB9CisKKyAgLyogV2hlbiB0aGVyZSBpcyBubyBmaXJzdCBjb2RlIHVuaXQsIHNlZSBpZiB3ZSBjYW4gc2V0IHRoZSBQQ1JFMl9TVEFSVExJTkUKKyAgZmxhZy4gVGhpcyBpcyBoZWxwZnVsIGZvciBtdWx0aWxpbmUgbWF0Y2hlcyB3aGVuIGFsbCBicmFuY2hlcyBzdGFydCB3aXRoIF4KKyAgYW5kIGFsc28gd2hlbiBhbGwgYnJhbmNoZXMgc3RhcnQgd2l0aCBub24tYXRvbWljIC4qIGZvciBub24tRE9UQUxMIG1hdGNoZXMKKyAgd2hlbiAqUFJVTkUgYW5kIFNLSVAgYXJlIG5vdCBwcmVzZW50LiAoVGhlcmUgaXMgYW4gb3B0aW9uIHRoYXQgZGlzYWJsZXMgdGhpcworICBjYXNlLikgKi8KKworICBlbHNlIGlmIChpc19zdGFydGxpbmUoY29kZXN0YXJ0LCAwLCAmY2IsIDApKSByZS0+ZmxhZ3MgfD0gUENSRTJfU1RBUlRMSU5FOworICB9CisKKy8qIEhhbmRsZSB0aGUgInJlcXVpcmVkIGNvZGUgdW5pdCIsIGlmIG9uZSBpcyBzZXQuIEluIHRoZSBjYXNlIG9mIGFuIGFuY2hvcmVkCitwYXR0ZXJuLCBkbyB0aGlzIG9ubHkgaWYgaXQgZm9sbG93cyBhIHZhcmlhYmxlIGxlbmd0aCBpdGVtIGluIHRoZSBwYXR0ZXJuLgorQWdhaW4sIHNraXAgdGhpcyBpZiBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSBpcyBzZXQuICovCisKK2lmIChyZXFjdWZsYWdzID49IDAgJiYKKyAgICAgKChyZS0+b3ZlcmFsbF9vcHRpb25zICYgKFBDUkUyX0FOQ0hPUkVEfFBDUkUyX05PX1NUQVJUX09QVElNSVpFKSkgPT0gMCB8fAorICAgICAgKHJlcWN1ZmxhZ3MgJiBSRVFfVkFSWSkgIT0gMCkpCisgIHsKKyAgcmUtPmxhc3RfY29kZXVuaXQgPSByZXFjdTsKKyAgcmUtPmZsYWdzIHw9IFBDUkUyX0xBU1RTRVQ7CisKKyAgLyogSGFuZGxlIGNhc2VsZXNzIHJlcXVpcmVkIGNvZGUgdW5pdHMgYXMgZm9yIGZpcnN0IGNvZGUgdW5pdHMgKGFib3ZlKS4gKi8KKworICBpZiAoKHJlcWN1ZmxhZ3MgJiBSRVFfQ0FTRUxFU1MpICE9IDApCisgICAgeworICAgIGlmIChyZXFjdSA8IDEyOCB8fCAoIXV0ZiAmJiByZXFjdSA8IDI1NSkpCisgICAgICB7CisgICAgICBpZiAoY2IuZmNjW3JlcWN1XSAhPSByZXFjdSkgcmUtPmZsYWdzIHw9IFBDUkUyX0xBU1RDQVNFTEVTUzsKKyAgICAgIH0KKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgIGVsc2UgaWYgKHJlcWN1IDw9IE1BWF9VVEZfQ09ERV9QT0lOVCAmJiBVQ0RfT1RIRVJDQVNFKHJlcWN1KSAhPSByZXFjdSkKKyAgICAgIHJlLT5mbGFncyB8PSBQQ1JFMl9MQVNUQ0FTRUxFU1M7CisjZW5kaWYKKyAgICB9CisgIH0KKworLyogQ2hlY2sgZm9yIGEgcGF0dGVybiB0aGFuIGNhbiBtYXRjaCBhbiBlbXB0eSBzdHJpbmcsIHNvIHRoYXQgdGhpcyBpbmZvcm1hdGlvbgorY2FuIGJlIHByb3ZpZGVkIHRvIGFwcGxpY2F0aW9ucy4gKi8KKworZG8KKyAgeworICBpbnQgY291bnQgPSAwOworICBpbnQgcmMgPSBjb3VsZF9iZV9lbXB0eV9icmFuY2goY29kZXN0YXJ0LCBjb2RlLCB1dGYsICZjYiwgVFJVRSwgTlVMTCwgJmNvdW50KTsKKyAgaWYgKHJjIDwgMCkKKyAgICB7CisgICAgZXJyb3Jjb2RlID0gRVJSODY7CisgICAgZ290byBIQURfRVJST1I7CisgICAgfQorICBpZiAocmMgPiAwKQorICAgIHsKKyAgICByZS0+ZmxhZ3MgfD0gUENSRTJfTUFUQ0hfRU1QVFk7CisgICAgYnJlYWs7CisgICAgfQorICBjb2Rlc3RhcnQgKz0gR0VUKGNvZGVzdGFydCwgMSk7CisgIH0KK3doaWxlICgqY29kZXN0YXJ0ID09IE9QX0FMVCk7CisKKy8qIEZpbmFsbHksIHVubGVzcyBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSBpcyBzZXQsIHN0dWR5IHRoZSBjb21waWxlZCBwYXR0ZXJuCit0byBzZXQgdXAgaW5mb3JtYXRpb24gc3VjaCBhcyBhIGJpdG1hcCBvZiBzdGFydGluZyBjb2RlIHVuaXRzIGFuZCBhIG1pbmltdW0KK21hdGNoaW5nIGxlbmd0aC4gKi8KKworaWYgKChyZS0+b3ZlcmFsbF9vcHRpb25zICYgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUpID09IDAgJiYKKyAgICBQUklWKHN0dWR5KShyZSkgIT0gMCkKKyAgeworICBlcnJvcmNvZGUgPSBFUlIzMTsKKyAgZ290byBIQURfRVJST1I7CisgIH0KKworLyogQ29udHJvbCBlbmRzIHVwIGhlcmUgaW4gYWxsIGNhc2VzLiBJZiBtZW1vcnkgd2FzIG9idGFpbmVkIGZvciBhCit6ZXJvLXRlcm1pbmF0ZWQgY29weSBvZiB0aGUgcGF0dGVybiwgcmVtZW1iZXIgdG8gZnJlZSBpdCBiZWZvcmUgcmV0dXJuaW5nLiBBbHNvCitmcmVlIHRoZSBsaXN0IG9mIG5hbWVkIGdyb3VwcyBpZiBhIGxhcmdlciBvbmUgaGFkIHRvIGJlIG9idGFpbmVkLCBhbmQgbGlrZXdpc2UKK3RoZSBncm91cCBpbmZvcm1hdGlvbiB2ZWN0b3IuICovCisKK0VYSVQ6CitpZiAoY29waWVkX3BhdHRlcm4gIT0gc3RhY2tfY29waWVkX3BhdHRlcm4pCisgIGNjb250ZXh0LT5tZW1jdGwuZnJlZShjb3BpZWRfcGF0dGVybiwgY2NvbnRleHQtPm1lbWN0bC5tZW1vcnlfZGF0YSk7CitpZiAoY2IubmFtZWRfZ3JvdXBfbGlzdF9zaXplID4gTkFNRURfR1JPVVBfTElTVF9TSVpFKQorICBjY29udGV4dC0+bWVtY3RsLmZyZWUoKHZvaWQgKiljYi5uYW1lZF9ncm91cHMsIGNjb250ZXh0LT5tZW1jdGwubWVtb3J5X2RhdGEpOworaWYgKGNiLmdyb3VwaW5mbyAhPSBjMzJ3b3Jrc3BhY2UpCisgIGNjb250ZXh0LT5tZW1jdGwuZnJlZSgodm9pZCAqKWNiLmdyb3VwaW5mbywgY2NvbnRleHQtPm1lbWN0bC5tZW1vcnlfZGF0YSk7CisKK3JldHVybiByZTsgICAgLyogV2lsbCBiZSBOVUxMIGFmdGVyIGFuIGVycm9yICovCit9CisKKy8qIEVuZCBvZiBwY3JlMl9jb21waWxlLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9jb25maWcuYyBiL2Rpc3QyL3NyYy9wY3JlMl9jb25maWcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjE4NDU5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3BjcmUyX2NvbmZpZy5jCkBAIC0wLDAgKzEsMjE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworLyogU2F2ZSB0aGUgY29uZmlndXJlZCBsaW5rIHNpemUsIHdoaWNoIGlzIGluIGJ5dGVzLiBJbiAxNi1iaXQgYW5kIDMyLWJpdCBtb2RlcworaXRzIHZhbHVlIGdldHMgY2hhbmdlZCBieSBwY3JlMl9pbnRlcm5hbC5oIHRvIGJlIGluIGNvZGUgdW5pdHMuICovCisKK3N0YXRpYyBpbnQgY29uZmlndXJlZF9saW5rX3NpemUgPSBMSU5LX1NJWkU7CisKKyNpbmNsdWRlICJwY3JlMl9pbnRlcm5hbC5oIgorCisvKiBUaGVzZSBtYWNyb3MgYXJlIHRoZSBzdGFuZGFyZCB3YXkgb2YgdHVybmluZyB1bnF1b3RlZCB0ZXh0IGludG8gQyBzdHJpbmdzLgorVGhleSBhbGxvdyBtYWNyb3MgbGlrZSBQQ1JFMl9NQUpPUiB0byBiZSBkZWZpbmVkIHdpdGhvdXQgcXVvdGVzLCB3aGljaCBpcworY29udmVuaWVudCBmb3IgdXNlciBwcm9ncmFtcyB0aGF0IHdhbnQgdG8gdGVzdCB0aGVpciB2YWx1ZXMuICovCisKKyNkZWZpbmUgU1RSSU5HKGEpICAjIGEKKyNkZWZpbmUgWFNUUklORyhzKSBTVFJJTkcocykKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBSZXR1cm4gaW5mbyBhYm91dCB3aGF0IGZlYXR1cmVzIGFyZSBjb25maWd1cmVkICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitBcmd1bWVudHM6CisgIHdoYXQgICAgICAgICAgICAgd2hhdCBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZAorICB3aGVyZSAgICAgICAgICAgIHdoZXJlIHRvIHB1dCB0aGUgaW5mb3JtYXRpb24KKworUmV0dXJuczogICAgICAgICAgIDAgaWYgZGF0YSByZXR1cm5lZAorICAgICAgICAgICAgICAgICAgID49IDAgaWYgd2hlcmUgaXMgTlVMTCwgZ2l2aW5nIGxlbmd0aCByZXF1aXJlZAorICAgICAgICAgICAgICAgICAgIFBDUkUyX0VSUk9SX0JBRE9QVElPTiBpZiAid2hlcmUiIG5vdCByZWNvZ25pemVkCisgICAgICAgICAgICAgICAgICAgb3IgSklUIHRhcmdldCByZXF1ZXN0ZWQgd2hlbiBKSVQgbm90IGVuYWJsZWQKKyovCisKK1BDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX2NvbmZpZyh1aW50MzJfdCB3aGF0LCB2b2lkICp3aGVyZSkKK3sKK2lmICh3aGVyZSA9PSBOVUxMKSAgLyogUmVxdWVzdHMgYSBsZW5ndGggKi8KKyAgeworICBzd2l0Y2god2hhdCkKKyAgICB7CisgICAgZGVmYXVsdDoKKyAgICByZXR1cm4gUENSRTJfRVJST1JfQkFET1BUSU9OOworCisgICAgY2FzZSBQQ1JFMl9DT05GSUdfQlNSOgorICAgIGNhc2UgUENSRTJfQ09ORklHX0pJVDoKKyAgICBjYXNlIFBDUkUyX0NPTkZJR19MSU5LU0laRToKKyAgICBjYXNlIFBDUkUyX0NPTkZJR19NQVRDSExJTUlUOgorICAgIGNhc2UgUENSRTJfQ09ORklHX05FV0xJTkU6CisgICAgY2FzZSBQQ1JFMl9DT05GSUdfUEFSRU5TTElNSVQ6CisgICAgY2FzZSBQQ1JFMl9DT05GSUdfUkVDVVJTSU9OTElNSVQ6CisgICAgY2FzZSBQQ1JFMl9DT05GSUdfU1RBQ0tSRUNVUlNFOgorICAgIGNhc2UgUENSRTJfQ09ORklHX1VOSUNPREU6CisgICAgcmV0dXJuIHNpemVvZih1aW50MzJfdCk7CisKKyAgICAvKiBUaGVzZSBhcmUgaGFuZGxlZCBiZWxvdyAqLworCisgICAgY2FzZSBQQ1JFMl9DT05GSUdfSklUVEFSR0VUOgorICAgIGNhc2UgUENSRTJfQ09ORklHX1VOSUNPREVfVkVSU0lPTjoKKyAgICBjYXNlIFBDUkUyX0NPTkZJR19WRVJTSU9OOgorICAgIGJyZWFrOworICAgIH0KKyAgfQorCitzd2l0Y2ggKHdoYXQpCisgIHsKKyAgZGVmYXVsdDoKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE9QVElPTjsKKworICBjYXNlIFBDUkUyX0NPTkZJR19CU1I6CisjaWZkZWYgQlNSX0FOWUNSTEYKKyAgKigodWludDMyX3QgKil3aGVyZSkgPSBQQ1JFMl9CU1JfQU5ZQ1JMRjsKKyNlbHNlCisgICooKHVpbnQzMl90ICopd2hlcmUpID0gUENSRTJfQlNSX1VOSUNPREU7CisjZW5kaWYKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9DT05GSUdfSklUOgorI2lmZGVmIFNVUFBPUlRfSklUCisgICooKHVpbnQzMl90ICopd2hlcmUpID0gMTsKKyNlbHNlCisgICooKHVpbnQzMl90ICopd2hlcmUpID0gMDsKKyNlbmRpZgorICBicmVhazsKKworICBjYXNlIFBDUkUyX0NPTkZJR19KSVRUQVJHRVQ6CisjaWZkZWYgU1VQUE9SVF9KSVQKKyAgICB7CisgICAgY29uc3QgY2hhciAqdiA9IFBSSVYoaml0X2dldF90YXJnZXQpKCk7CisgICAgcmV0dXJuIDEgKyAoKHdoZXJlID09IE5VTEwpPworICAgICAgc3RybGVuKHYpIDogUFJJVihzdHJjcHlfYzgpKChQQ1JFMl9VQ0hBUiAqKXdoZXJlLCB2KSk7CisgICAgfQorI2Vsc2UKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE9QVElPTjsKKyNlbmRpZgorCisgIGNhc2UgUENSRTJfQ09ORklHX0xJTktTSVpFOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IGNvbmZpZ3VyZWRfbGlua19zaXplOworICBicmVhazsKKworICBjYXNlIFBDUkUyX0NPTkZJR19NQVRDSExJTUlUOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IE1BVENIX0xJTUlUOworICBicmVhazsKKworICBjYXNlIFBDUkUyX0NPTkZJR19ORVdMSU5FOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IE5FV0xJTkVfREVGQVVMVDsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9DT05GSUdfUEFSRU5TTElNSVQ6CisgICooKHVpbnQzMl90ICopd2hlcmUpID0gUEFSRU5TX05FU1RfTElNSVQ7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfQ09ORklHX1JFQ1VSU0lPTkxJTUlUOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IE1BVENIX0xJTUlUX1JFQ1VSU0lPTjsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9DT05GSUdfU1RBQ0tSRUNVUlNFOgorI2lmZGVmIEhFQVBfTUFUQ0hfUkVDVVJTRQorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IDA7CisjZWxzZQorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IDE7CisjZW5kaWYKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9DT05GSUdfVU5JQ09ERV9WRVJTSU9OOgorICAgIHsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERQorICAgIGNvbnN0IGNoYXIgKnYgPSBQUklWKHVuaWNvZGVfdmVyc2lvbik7CisjZWxzZQorICAgIGNvbnN0IGNoYXIgKnYgPSAiVW5pY29kZSBub3Qgc3VwcG9ydGVkIjsKKyNlbmRpZgorICAgIHJldHVybiAxICsgKCh3aGVyZSA9PSBOVUxMKT8KKyAgICAgIHN0cmxlbih2KTogUFJJVihzdHJjcHlfYzgpKChQQ1JFMl9VQ0hBUiAqKXdoZXJlLCB2KSk7CisgICB9CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfQ09ORklHX1VOSUNPREU6CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUKKyAgKigodWludDMyX3QgKil3aGVyZSkgPSAxOworI2Vsc2UKKyAgKigodWludDMyX3QgKil3aGVyZSkgPSAwOworI2VuZGlmCisgIGJyZWFrOworCisgIC8qIFRoZSBoYWNrZXJ5IGluIHNldHRpbmcgInYiIGJlbG93IGlzIHRvIGNvcGUgd2l0aCB0aGUgY2FzZSB3aGVuCisgIFBDUkUyX1BSRVJFTEVBU0UgaXMgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyAod2hpY2ggaXQgaXMgZm9yIHJlYWwgcmVsZWFzZXMpLgorICBJZiB0aGUgc2Vjb25kIGFsdGVybmF0aXZlIGlzIHVzZWQgaW4gdGhpcyBjYXNlLCBpdCBkb2VzIG5vdCBsZWF2ZSBhIHNwYWNlCisgIGJlZm9yZSB0aGUgZGF0ZS4gT24gdGhlIG90aGVyIGhhbmQsIGlmIGFsbCBmb3VyIG1hY3JvcyBhcmUgcHV0IGludG8gYSBzaW5nbGUKKyAgWFNUUklORyB3aGVuIFBDUkUyX1BSRVJFTEVBU0UgaXMgbm90IGVtcHR5LCBhbiB1bndhbnRlZCBzcGFjZSBpcyBpbnNlcnRlZC4KKyAgVGhlcmUgYXJlIHByb2JsZW1zIHVzaW5nIGFuICJvYnZpb3VzIiBhcHByb2FjaCBsaWtlIHRoaXM6CisKKyAgICAgWFNUUklORyhQQ1JFMl9NQUpPUikgIi4iIFhTVFJJTkcoUENSRV9NSU5PUikKKyAgICAgWFNUUklORyhQQ1JFMl9QUkVSRUxFQVNFKSAiICIgWFNUUklORyhQQ1JFX0RBVEUpCisKKyAgYmVjYXVzZSwgd2hlbiBQQ1JFMl9QUkVSRUxFQVNFIGlzIGVtcHR5LCB0aGlzIGxlYWRzIHRvIGFuIGF0dGVtcHRlZCBleHBhbnNpb24KKyAgb2YgU1RSSU5HKCkuIFRoZSBDIHN0YW5kYXJkIHN0YXRlczogIklmIChiZWZvcmUgYXJndW1lbnQgc3Vic3RpdHV0aW9uKSBhbnkKKyAgYXJndW1lbnQgY29uc2lzdHMgb2Ygbm8gcHJlcHJvY2Vzc2luZyB0b2tlbnMsIHRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWQuIiBJdAorICB0dXJucyBvdXQgdGhlIGdjYyB0cmVhdHMgdGhpcyBjYXNlIGFzIGEgc2luZ2xlIGVtcHR5IHN0cmluZyAtIHdoaWNoIGlzIHdoYXQKKyAgd2UgcmVhbGx5IHdhbnQgLSBidXQgVmlzdWFsIEMgZ3J1bWJsZXMgYWJvdXQgdGhlIGxhY2sgb2YgYW4gYXJndW1lbnQgZm9yIHRoZQorICBtYWNyby4gVW5mb3J0dW5hdGVseSwgYm90aCBhcmUgd2l0aGluIHRoZWlyIHJpZ2h0cy4gQXMgdGhlcmUgc2VlbXMgdG8gYmUgbm8KKyAgd2F5IHRvIHRlc3QgZm9yIGEgbWFjcm8ncyB2YWx1ZSBiZWluZyBlbXB0eSBhdCBjb21waWxlIHRpbWUsIHdlIGhhdmUgdG8KKyAgcmVzb3J0IHRvIGEgcnVudGltZSB0ZXN0LiAqLworCisgIGNhc2UgUENSRTJfQ09ORklHX1ZFUlNJT046CisgICAgeworICAgIGNvbnN0IGNoYXIgKnYgPSAoWFNUUklORyhaIFBDUkUyX1BSRVJFTEVBU0UpWzFdID09IDApPworICAgICAgWFNUUklORyhQQ1JFMl9NQUpPUi5QQ1JFMl9NSU5PUiBQQ1JFMl9EQVRFKSA6CisgICAgICBYU1RSSU5HKFBDUkUyX01BSk9SLlBDUkUyX01JTk9SKSBYU1RSSU5HKFBDUkUyX1BSRVJFTEVBU0UgUENSRTJfREFURSk7CisgICAgcmV0dXJuIDEgKyAoKHdoZXJlID09IE5VTEwpPworICAgICAgc3RybGVuKHYpIDogUFJJVihzdHJjcHlfYzgpKChQQ1JFMl9VQ0hBUiAqKXdoZXJlLCB2KSk7CisgICAgfQorICB9CisKK3JldHVybiAwOworfQorCisvKiBFbmQgb2YgcGNyZTJfY29uZmlnLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9jb250ZXh0LmMgYi9kaXN0Mi9zcmMvcGNyZTJfY29udGV4dC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMDUwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJfY29udGV4dC5jCkBAIC0wLDAgKzEsMzkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgIERlZmF1bHQgbWFsbG9jL2ZyZWUgZnVuY3Rpb25zICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSWdub3JlIHRoZSAidXNlciBkYXRhIiBhcmd1bWVudCBpbiBlYWNoIGNhc2UuICovCisKK3N0YXRpYyB2b2lkICpkZWZhdWx0X21hbGxvYyhzaXplX3Qgc2l6ZSwgdm9pZCAqZGF0YSkKK3sKKyh2b2lkKWRhdGE7CityZXR1cm4gbWFsbG9jKHNpemUpOworfQorCisKK3N0YXRpYyB2b2lkIGRlZmF1bHRfZnJlZSh2b2lkICpibG9jaywgdm9pZCAqZGF0YSkKK3sKKyh2b2lkKWRhdGE7CitmcmVlKGJsb2NrKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICBHZXQgYSBibG9jayBhbmQgc2F2ZSBtZW1vcnkgY29udHJvbCAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpbnRlcm5hbCBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZ2V0IGEgYmxvY2sgb2YgbWVtb3J5IGluIHdoaWNoIHRoZQorbWVtb3J5IGNvbnRyb2wgZGF0YSBpcyB0byBiZSBzdG9yZWQgYXQgdGhlIHN0YXJ0IGZvciBmdXR1cmUgdXNlLgorCitBcmd1bWVudHM6CisgIHNpemUgICAgICAgIGFtb3VudCBvZiBtZW1vcnkgcmVxdWlyZWQKKyAgbWVtY3RsICAgICAgcG9pbnRlciB0byBhIG1lbWN0bCBibG9jayBvciBOVUxMCisKK1JldHVybnM6ICAgICAgcG9pbnRlciB0byBtZW1vcnkgb3IgTlVMTCBvbiBmYWlsdXJlCisqLworCitleHRlcm4gdm9pZCAqCitQUklWKG1lbWN0bF9tYWxsb2MpKHNpemVfdCBzaXplLCBwY3JlMl9tZW1jdGwgKm1lbWN0bCkKK3sKK3BjcmUyX21lbWN0bCAqbmV3bWVtY3RsOwordm9pZCAqeWllbGQgPSAobWVtY3RsID09IE5VTEwpPyBtYWxsb2Moc2l6ZSkgOgorICBtZW1jdGwtPm1hbGxvYyhzaXplLCBtZW1jdGwtPm1lbW9yeV9kYXRhKTsKK2lmICh5aWVsZCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKK25ld21lbWN0bCA9IChwY3JlMl9tZW1jdGwgKil5aWVsZDsKK2lmIChtZW1jdGwgPT0gTlVMTCkKKyAgeworICBuZXdtZW1jdGwtPm1hbGxvYyA9IGRlZmF1bHRfbWFsbG9jOworICBuZXdtZW1jdGwtPmZyZWUgPSBkZWZhdWx0X2ZyZWU7CisgIG5ld21lbWN0bC0+bWVtb3J5X2RhdGEgPSBOVUxMOworICB9CitlbHNlICpuZXdtZW1jdGwgPSAqbWVtY3RsOworcmV0dXJuIHlpZWxkOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgQ3JlYXRlIGFuZCBpbml0aWFsaXplIGNvbnRleHRzICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJbml0aWFsaXppbmcgZm9yIGNvbXBpbGUgYW5kIG1hdGNoIGNvbnRleHRzIGlzIGRvbmUgaW4gc2VwYXJhdGUsIHByaXZhdGUKK2Z1bmN0aW9ucyBzbyB0aGF0IHRoZXNlIGNhbiBiZSBjYWxsZWQgZnJvbSBmdW5jdGlvbnMgc3VjaCBhcyBwY3JlMl9jb21waWxlKCkKK3doZW4gYW4gZXh0ZXJuYWwgY29udGV4dCBpcyBub3Qgc3VwcGxpZWQuIFRoZSBpbml0aWFsaXppbmcgZnVuY3Rpb25zIGhhdmUgYW4KK29wdGlvbiB0byBzZXQgdXAgZGVmYXVsdCBtZW1vcnkgbWFuYWdlbWVudC4gKi8KKworUENSRTJfRVhQX0RFRk4gcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICogUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlKHZvaWQgKigqcHJpdmF0ZV9tYWxsb2MpKHNpemVfdCwgdm9pZCAqKSwKKyAgdm9pZCAoKnByaXZhdGVfZnJlZSkodm9pZCAqLCB2b2lkICopLCB2b2lkICptZW1vcnlfZGF0YSkKK3sKK3BjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQ7CitpZiAocHJpdmF0ZV9tYWxsb2MgPT0gTlVMTCkgcHJpdmF0ZV9tYWxsb2MgPSBkZWZhdWx0X21hbGxvYzsKK2lmIChwcml2YXRlX2ZyZWUgPT0gTlVMTCkgcHJpdmF0ZV9mcmVlID0gZGVmYXVsdF9mcmVlOworZ2NvbnRleHQgPSBwcml2YXRlX21hbGxvYyhzaXplb2YocGNyZTJfcmVhbF9nZW5lcmFsX2NvbnRleHQpLCBtZW1vcnlfZGF0YSk7CitpZiAoZ2NvbnRleHQgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CitnY29udGV4dC0+bWVtY3RsLm1hbGxvYyA9IHByaXZhdGVfbWFsbG9jOworZ2NvbnRleHQtPm1lbWN0bC5mcmVlID0gcHJpdmF0ZV9mcmVlOworZ2NvbnRleHQtPm1lbWN0bC5tZW1vcnlfZGF0YSA9IG1lbW9yeV9kYXRhOworcmV0dXJuIGdjb250ZXh0OworfQorCisKKy8qIEEgZGVmYXVsdCBjb21waWxlIGNvbnRleHQgaXMgc2V0IHVwIHRvIHNhdmUgaGF2aW5nIHRvIGluaXRpYWxpemUgYXQgcnVuIHRpbWUKK3doZW4gbm8gY29udGV4dCBpcyBzdXBwbGllZCB0byB0aGUgY29tcGlsZSBmdW5jdGlvbi4gKi8KKworY29uc3QgcGNyZTJfY29tcGlsZV9jb250ZXh0IFBSSVYoZGVmYXVsdF9jb21waWxlX2NvbnRleHQpID0geworICB7IGRlZmF1bHRfbWFsbG9jLCBkZWZhdWx0X2ZyZWUsIE5VTEwgfSwgICAgLyogRGVmYXVsdCBtZW1vcnkgaGFuZGxpbmcgKi8KKyAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFN0YWNrIGd1YXJkICovCisgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTdGFjayBndWFyZCBkYXRhICovCisgIFBSSVYoZGVmYXVsdF90YWJsZXMpLCAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyYWN0ZXIgdGFibGVzICovCisgIFBDUkUyX1VOU0VULCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYXggcGF0dGVybiBsZW5ndGggKi8KKyAgQlNSX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEJhY2tzbGFzaCBSIGRlZmF1bHQgKi8KKyAgTkVXTElORV9ERUZBVUxULCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5ld2xpbmUgY29udmVudGlvbiAqLworICBQQVJFTlNfTkVTVF9MSU1JVCB9OyAgICAgICAgICAgICAgICAgICAgICAgLyogQXMgaXQgc2F5cyAqLworCisvKiBUaGUgY3JlYXRlIGZ1bmN0aW9uIGNvcGllcyB0aGUgZGVmYXVsdCBpbnRvIHRoZSBuZXcgbWVtb3J5LCBidXQgbXVzdAorb3ZlcnJpZGUgdGhlIGRlZmF1bHQgbWVtb3J5IGhhbmRsaW5nIGZ1bmN0aW9ucyBpZiBhIGdjb250ZXh0IHdhcyBwcm92aWRlZC4gKi8KKworUENSRTJfRVhQX0RFRk4gcGNyZTJfY29tcGlsZV9jb250ZXh0ICogUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9jb21waWxlX2NvbnRleHRfY3JlYXRlKHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpCit7CitwY3JlMl9jb21waWxlX2NvbnRleHQgKmNjb250ZXh0ID0gUFJJVihtZW1jdGxfbWFsbG9jKSgKKyAgc2l6ZW9mKHBjcmUyX3JlYWxfY29tcGlsZV9jb250ZXh0KSwgKHBjcmUyX21lbWN0bCAqKWdjb250ZXh0KTsKK2lmIChjY29udGV4dCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKypjY29udGV4dCA9IFBSSVYoZGVmYXVsdF9jb21waWxlX2NvbnRleHQpOworaWYgKGdjb250ZXh0ICE9IE5VTEwpCisgICooKHBjcmUyX21lbWN0bCAqKWNjb250ZXh0KSA9ICooKHBjcmUyX21lbWN0bCAqKWdjb250ZXh0KTsKK3JldHVybiBjY29udGV4dDsKK30KKworCisvKiBBIGRlZmF1bHQgbWF0Y2ggY29udGV4dCBpcyBzZXQgdXAgdG8gc2F2ZSBoYXZpbmcgdG8gaW5pdGlhbGl6ZSBhdCBydW4gdGltZQord2hlbiBubyBjb250ZXh0IGlzIHN1cHBsaWVkIHRvIGEgbWF0Y2ggZnVuY3Rpb24uICovCisKK2NvbnN0IHBjcmUyX21hdGNoX2NvbnRleHQgUFJJVihkZWZhdWx0X21hdGNoX2NvbnRleHQpID0geworICB7IGRlZmF1bHRfbWFsbG9jLCBkZWZhdWx0X2ZyZWUsIE5VTEwgfSwKKyNpZmRlZiBIRUFQX01BVENIX1JFQ1VSU0UKKyAgeyBkZWZhdWx0X21hbGxvYywgZGVmYXVsdF9mcmVlLCBOVUxMIH0sCisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX0pJVAorICBOVUxMLAorICBOVUxMLAorI2VuZGlmCisgIE5VTEwsCisgIE5VTEwsCisgIFBDUkUyX1VOU0VULCAgIC8qIE9mZnNldCBsaW1pdCAqLworICBNQVRDSF9MSU1JVCwKKyAgTUFUQ0hfTElNSVRfUkVDVVJTSU9OIH07CisKKy8qIFRoZSBjcmVhdGUgZnVuY3Rpb24gY29waWVzIHRoZSBkZWZhdWx0IGludG8gdGhlIG5ldyBtZW1vcnksIGJ1dCBtdXN0CitvdmVycmlkZSB0aGUgZGVmYXVsdCBtZW1vcnkgaGFuZGxpbmcgZnVuY3Rpb25zIGlmIGEgZ2NvbnRleHQgd2FzIHByb3ZpZGVkLiAqLworCitQQ1JFMl9FWFBfREVGTiBwY3JlMl9tYXRjaF9jb250ZXh0ICogUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZShwY3JlMl9nZW5lcmFsX2NvbnRleHQgKmdjb250ZXh0KQoreworcGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQgPSBQUklWKG1lbWN0bF9tYWxsb2MpKAorICBzaXplb2YocGNyZTJfcmVhbF9tYXRjaF9jb250ZXh0KSwgKHBjcmUyX21lbWN0bCAqKWdjb250ZXh0KTsKK2lmIChtY29udGV4dCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKyptY29udGV4dCA9IFBSSVYoZGVmYXVsdF9tYXRjaF9jb250ZXh0KTsKK2lmIChnY29udGV4dCAhPSBOVUxMKQorICAqKChwY3JlMl9tZW1jdGwgKiltY29udGV4dCkgPSAqKChwY3JlMl9tZW1jdGwgKilnY29udGV4dCk7CityZXR1cm4gbWNvbnRleHQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgIENvbnRleHQgY29weSBmdW5jdGlvbnMgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitQQ1JFMl9FWFBfREVGTiBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKiBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX2dlbmVyYWxfY29udGV4dF9jb3B5KHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpCit7CitwY3JlMl9nZW5lcmFsX2NvbnRleHQgKm5ldyA9CisgIGdjb250ZXh0LT5tZW1jdGwubWFsbG9jKHNpemVvZihwY3JlMl9yZWFsX2dlbmVyYWxfY29udGV4dCksCisgIGdjb250ZXh0LT5tZW1jdGwubWVtb3J5X2RhdGEpOworaWYgKG5ldyA9PSBOVUxMKSByZXR1cm4gTlVMTDsKK21lbWNweShuZXcsIGdjb250ZXh0LCBzaXplb2YocGNyZTJfcmVhbF9nZW5lcmFsX2NvbnRleHQpKTsKK3JldHVybiBuZXc7Cit9CisKKworUENSRTJfRVhQX0RFRk4gcGNyZTJfY29tcGlsZV9jb250ZXh0ICogUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9jb21waWxlX2NvbnRleHRfY29weShwY3JlMl9jb21waWxlX2NvbnRleHQgKmNjb250ZXh0KQoreworcGNyZTJfY29tcGlsZV9jb250ZXh0ICpuZXcgPQorICBjY29udGV4dC0+bWVtY3RsLm1hbGxvYyhzaXplb2YocGNyZTJfcmVhbF9jb21waWxlX2NvbnRleHQpLAorICBjY29udGV4dC0+bWVtY3RsLm1lbW9yeV9kYXRhKTsKK2lmIChuZXcgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CittZW1jcHkobmV3LCBjY29udGV4dCwgc2l6ZW9mKHBjcmUyX3JlYWxfY29tcGlsZV9jb250ZXh0KSk7CityZXR1cm4gbmV3OworfQorCisKK1BDUkUyX0VYUF9ERUZOIHBjcmUyX21hdGNoX2NvbnRleHQgKiBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX21hdGNoX2NvbnRleHRfY29weShwY3JlMl9tYXRjaF9jb250ZXh0ICptY29udGV4dCkKK3sKK3BjcmUyX21hdGNoX2NvbnRleHQgKm5ldyA9CisgIG1jb250ZXh0LT5tZW1jdGwubWFsbG9jKHNpemVvZihwY3JlMl9yZWFsX21hdGNoX2NvbnRleHQpLAorICBtY29udGV4dC0+bWVtY3RsLm1lbW9yeV9kYXRhKTsKK2lmIChuZXcgPT0gTlVMTCkgcmV0dXJuIE5VTEw7CittZW1jcHkobmV3LCBtY29udGV4dCwgc2l6ZW9mKHBjcmUyX3JlYWxfbWF0Y2hfY29udGV4dCkpOworcmV0dXJuIG5ldzsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICBDb250ZXh0IGZyZWUgZnVuY3Rpb25zICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitQQ1JFMl9FWFBfREVGTiB2b2lkIFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWUocGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCkKK3sKK2lmIChnY29udGV4dCAhPSBOVUxMKQorICBnY29udGV4dC0+bWVtY3RsLmZyZWUoZ2NvbnRleHQsIGdjb250ZXh0LT5tZW1jdGwubWVtb3J5X2RhdGEpOworfQorCisKK1BDUkUyX0VYUF9ERUZOIHZvaWQgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZShwY3JlMl9jb21waWxlX2NvbnRleHQgKmNjb250ZXh0KQoreworaWYgKGNjb250ZXh0ICE9IE5VTEwpCisgIGNjb250ZXh0LT5tZW1jdGwuZnJlZShjY29udGV4dCwgY2NvbnRleHQtPm1lbWN0bC5tZW1vcnlfZGF0YSk7Cit9CisKKworUENSRTJfRVhQX0RFRk4gdm9pZCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX21hdGNoX2NvbnRleHRfZnJlZShwY3JlMl9tYXRjaF9jb250ZXh0ICptY29udGV4dCkKK3sKK2lmIChtY29udGV4dCAhPSBOVUxMKQorICBtY29udGV4dC0+bWVtY3RsLmZyZWUobWNvbnRleHQsIG1jb250ZXh0LT5tZW1jdGwubWVtb3J5X2RhdGEpOworfQorCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICBTZXQgdmFsdWVzIGluIGNvbnRleHRzICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEFsbCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIDAgZm9yIHN1Y2Nlc3Mgb3IgUENSRTJfRVJST1JfQkFEREFUQSBpZiBpbnZhbGlkCitkYXRhIGlzIGdpdmVuLiBPbmx5IHNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBhcmUgYWJsZSB0byB0ZXN0IHRoZSB2YWxpZGl0eSBvZiB0aGUKK2RhdGEuICovCisKKworLyogLS0tLS0tLS0tLS0tIENvbXBpbGUgY29udGV4dHMgLS0tLS0tLS0tLS0tICovCisKK1BDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKHBjcmUyX2NvbXBpbGVfY29udGV4dCAqY2NvbnRleHQsCisgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnRhYmxlcykKK3sKK2Njb250ZXh0LT50YWJsZXMgPSB0YWJsZXM7CityZXR1cm4gMDsKK30KKworUENSRTJfRVhQX0RFRk4gaW50IFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfc2V0X2JzcihwY3JlMl9jb21waWxlX2NvbnRleHQgKmNjb250ZXh0LCB1aW50MzJfdCB2YWx1ZSkKK3sKK3N3aXRjaCh2YWx1ZSkKKyAgeworICBjYXNlIFBDUkUyX0JTUl9BTllDUkxGOgorICBjYXNlIFBDUkUyX0JTUl9VTklDT0RFOgorICBjY29udGV4dC0+YnNyX2NvbnZlbnRpb24gPSB2YWx1ZTsKKyAgcmV0dXJuIDA7CisKKyAgZGVmYXVsdDoKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRERBVEE7CisgIH0KK30KKworUENSRTJfRVhQX0RFRk4gaW50IFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aChwY3JlMl9jb21waWxlX2NvbnRleHQgKmNjb250ZXh0LCBQQ1JFMl9TSVpFIGxlbmd0aCkKK3sKK2Njb250ZXh0LT5tYXhfcGF0dGVybl9sZW5ndGggPSBsZW5ndGg7CityZXR1cm4gMDsKK30KKworUENSRTJfRVhQX0RFRk4gaW50IFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfc2V0X25ld2xpbmUocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwgdWludDMyX3QgbmV3bGluZSkKK3sKK3N3aXRjaChuZXdsaW5lKQorICB7CisgIGNhc2UgUENSRTJfTkVXTElORV9DUjoKKyAgY2FzZSBQQ1JFMl9ORVdMSU5FX0xGOgorICBjYXNlIFBDUkUyX05FV0xJTkVfQ1JMRjoKKyAgY2FzZSBQQ1JFMl9ORVdMSU5FX0FOWToKKyAgY2FzZSBQQ1JFMl9ORVdMSU5FX0FOWUNSTEY6CisgIGNjb250ZXh0LT5uZXdsaW5lX2NvbnZlbnRpb24gPSBuZXdsaW5lOworICByZXR1cm4gMDsKKworICBkZWZhdWx0OgorICByZXR1cm4gUENSRTJfRVJST1JfQkFEREFUQTsKKyAgfQorfQorCitQQ1JFMl9FWFBfREVGTiBpbnQgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXQocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwgdWludDMyX3QgbGltaXQpCit7CitjY29udGV4dC0+cGFyZW5zX25lc3RfbGltaXQgPSBsaW1pdDsKK3JldHVybiAwOworfQorCitQQ1JFMl9FWFBfREVGTiBpbnQgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmQocGNyZTJfY29tcGlsZV9jb250ZXh0ICpjY29udGV4dCwKKyAgaW50ICgqZ3VhcmQpKHVpbnQzMl90LCB2b2lkICopLCB2b2lkICp1c2VyX2RhdGEpCit7CitjY29udGV4dC0+c3RhY2tfZ3VhcmQgPSBndWFyZDsKK2Njb250ZXh0LT5zdGFja19ndWFyZF9kYXRhID0gdXNlcl9kYXRhOworcmV0dXJuIDA7Cit9CisKKworLyogLS0tLS0tLS0tLS0tIE1hdGNoIGNvbnRleHRzIC0tLS0tLS0tLS0tLSAqLworCitQQ1JFMl9FWFBfREVGTiBpbnQgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9zZXRfY2FsbG91dChwY3JlMl9tYXRjaF9jb250ZXh0ICptY29udGV4dCwKKyAgaW50ICgqY2FsbG91dCkocGNyZTJfY2FsbG91dF9ibG9jayAqLCB2b2lkICopLCB2b2lkICpjYWxsb3V0X2RhdGEpCit7CittY29udGV4dC0+Y2FsbG91dCA9IGNhbGxvdXQ7CittY29udGV4dC0+Y2FsbG91dF9kYXRhID0gY2FsbG91dF9kYXRhOworcmV0dXJuIDA7Cit9CisKK1BDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX3NldF9tYXRjaF9saW1pdChwY3JlMl9tYXRjaF9jb250ZXh0ICptY29udGV4dCwgdWludDMyX3QgbGltaXQpCit7CittY29udGV4dC0+bWF0Y2hfbGltaXQgPSBsaW1pdDsKK3JldHVybiAwOworfQorCitQQ1JFMl9FWFBfREVGTiBpbnQgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0KHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0LCBQQ1JFMl9TSVpFIGxpbWl0KQoreworbWNvbnRleHQtPm9mZnNldF9saW1pdCA9IGxpbWl0OworcmV0dXJuIDA7Cit9CisKK1BDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX3NldF9yZWN1cnNpb25fbGltaXQocGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsIHVpbnQzMl90IGxpbWl0KQoreworbWNvbnRleHQtPnJlY3Vyc2lvbl9saW1pdCA9IGxpbWl0OworcmV0dXJuIDA7Cit9CisKK1BDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX3NldF9yZWN1cnNpb25fbWVtb3J5X21hbmFnZW1lbnQocGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsCisgIHZvaWQgKigqbXltYWxsb2MpKHNpemVfdCwgdm9pZCAqKSwgdm9pZCAoKm15ZnJlZSkodm9pZCAqLCB2b2lkICopLAorICB2b2lkICpteWRhdGEpCit7CisjaWZkZWYgSEVBUF9NQVRDSF9SRUNVUlNFCittY29udGV4dC0+c3RhY2tfbWVtY3RsLm1hbGxvYyA9IG15bWFsbG9jOworbWNvbnRleHQtPnN0YWNrX21lbWN0bC5mcmVlID0gbXlmcmVlOworbWNvbnRleHQtPnN0YWNrX21lbWN0bC5tZW1vcnlfZGF0YSA9IG15ZGF0YTsKKyNlbHNlCisodm9pZCltY29udGV4dDsKKyh2b2lkKW15bWFsbG9jOworKHZvaWQpbXlmcmVlOworKHZvaWQpbXlkYXRhOworI2VuZGlmCityZXR1cm4gMDsKK30KKworLyogRW5kIG9mIHBjcmUyX2NvbnRleHQuYyAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX2RmYV9tYXRjaC5jIGIvZGlzdDIvc3JjL3BjcmUyX2RmYV9tYXRjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YmMwODUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJfZGZhX21hdGNoLmMKQEAgLTAsMCArMSwzNjE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworLyogVGhpcyBtb2R1bGUgY29udGFpbnMgdGhlIGV4dGVybmFsIGZ1bmN0aW9uIHBjcmUyX2RmYV9tYXRjaCgpLCB3aGljaCBpcyBhbgorYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgZnVuY3Rpb24gdGhhdCB1c2VzIGEgc29ydCBvZiBERkEgYWxnb3JpdGhtIChub3QgYSB0cnVlCitGU00pLiBUaGlzIGlzIE5PVCBQZXJsLWNvbXBhdGlibGUsIGJ1dCBpdCBoYXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCithcHBsaWNhdGlvbnMuICovCisKKworLyogTk9URSBBQk9VVCBQRVJGT1JNQU5DRTogQSB1c2VyIG9mIHRoaXMgZnVuY3Rpb24gc2VudCBzb21lIGNvZGUgdGhhdCBpbXByb3ZlZAordGhlIHBlcmZvcm1hbmNlIG9mIGhpcyBwYXR0ZXJucyBncmVhdGx5LiBJIGNvdWxkIG5vdCB1c2UgaXQgYXMgaXQgc3Rvb2QsIGFzIGl0Cit3YXMgbm90IHRocmVhZCBzYWZlLCBhbmQgbWFkZSBhc3N1bXB0aW9ucyBhYm91dCBwYXR0ZXJuIHNpemVzLiBBbHNvLCBpdCBjYXVzZWQKK3Rlc3QgNyB0byBsb29wLCBhbmQgdGVzdCA5IHRvIGNyYXNoIHdpdGggYSBzZWdmYXVsdC4KKworVGhlIGlzc3VlIGlzIHRoZSBjaGVjayBmb3IgZHVwbGljYXRlIHN0YXRlcywgd2hpY2ggaXMgZG9uZSBieSBhIHNpbXBsZSBsaW5lYXIKK3NlYXJjaCB1cCB0aGUgc3RhdGUgbGlzdC4gKEdyZXAgZm9yICJkdXBsaWNhdGUiIGJlbG93IHRvIGZpbmQgdGhlIGNvZGUuKSBGb3IKK21hbnkgcGF0dGVybnMsIHRoZXJlIHdpbGwgbmV2ZXIgYmUgbWFueSBzdGF0ZXMgYWN0aXZlIGF0IG9uZSB0aW1lLCBzbyBhIHNpbXBsZQorbGluZWFyIHNlYXJjaCBpcyBmaW5lLiBJbiBwYXR0ZXJucyB0aGF0IGhhdmUgbWFueSBhY3RpdmUgc3RhdGVzLCBpdCBtaWdodCBiZSBhCitib3R0bGVuZWNrLiBUaGUgc3VnZ2VzdGVkIGNvZGUgdXNlZCBhbiBpbmRleGluZyBzY2hlbWUgdG8gcmVtZW1iZXIgd2hpY2ggc3RhdGVzCitoYWQgcHJldmlvdXNseSBiZWVuIHVzZWQgZm9yIGVhY2ggY2hhcmFjdGVyLCBhbmQgYXZvaWRlZCB0aGUgbGluZWFyIHNlYXJjaCB3aGVuCitpdCBrbmV3IHRoZXJlIHdhcyBubyBjaGFuY2Ugb2YgYSBkdXBsaWNhdGUuIFRoaXMgd2FzIGltcGxlbWVudGVkIHdoZW4gYWRkaW5nCitzdGF0ZXMgdG8gdGhlIHN0YXRlIGxpc3RzLgorCitJIHdyb3RlIHNvbWUgdGhyZWFkLXNhZmUsIG5vdC1saW1pdGVkIGNvZGUgdG8gdHJ5IHNvbWV0aGluZyBzaW1pbGFyIGF0IHRoZSB0aW1lCitvZiBjaGVja2luZyBmb3IgZHVwbGljYXRlcyAoaW5zdGVhZCBvZiB3aGVuIGFkZGluZyBzdGF0ZXMpLCB1c2luZyBpbmRleCB2ZWN0b3JzCitvbiB0aGUgc3RhY2suIEl0IGRpZCBnaXZlIGEgMTMlIGltcHJvdmVtZW50IHdpdGggb25lIHNwZWNpYWxseSBjb25zdHJ1Y3RlZAorcGF0dGVybiBmb3IgY2VydGFpbiBzdWJqZWN0IHN0cmluZ3MsIGJ1dCBvbiBvdGhlciBzdHJpbmdzIGFuZCBvbiBtYW55IG9mIHRoZQorc2ltcGxlciBwYXR0ZXJucyBpbiB0aGUgdGVzdCBzdWl0ZSBpdCBkaWQgd29yc2UuIFRoZSBtYWpvciBwcm9ibGVtLCBJIHRoaW5rLAord2FzIHRoZSBleHRyYSB0aW1lIHRvIGluaXRpYWxpemUgdGhlIGluZGV4LiBUaGlzIGhhZCB0byBiZSBkb25lIGZvciBlYWNoIGNhbGwKK29mIGludGVybmFsX2RmYV9tYXRjaCgpLiAoVGhlIHN1cHBsaWVkIHBhdGNoIHVzZWQgYSBzdGF0aWMgdmVjdG9yLCBpbml0aWFsaXplZAorb25seSBvbmNlIC0gSSBzdXNwZWN0IHRoaXMgd2FzIHRoZSBjYXVzZSBvZiB0aGUgcHJvYmxlbXMgd2l0aCB0aGUgdGVzdHMuKQorCitPdmVyYWxsLCBJIGNvbmNsdWRlZCB0aGF0IHRoZSBnYWlucyBpbiBzb21lIGNhc2VzIGRpZCBub3Qgb3V0d2VpZ2ggdGhlIGxvc3NlcworaW4gb3RoZXJzLCBzbyBJIGFiYW5kb25lZCB0aGlzIGNvZGUuICovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjZGVmaW5lIE5MQkxPQ0sgbWIgICAgICAgICAgICAgLyogQmxvY2sgY29udGFpbmluZyBuZXdsaW5lIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFBTU1RBUlQgc3RhcnRfc3ViamVjdCAgLyogRmllbGQgY29udGFpbmluZyBwcm9jZXNzZWQgc3RyaW5nIHN0YXJ0ICovCisjZGVmaW5lIFBTRU5EICAgZW5kX3N1YmplY3QgICAgLyogRmllbGQgY29udGFpbmluZyBwcm9jZXNzZWQgc3RyaW5nIGVuZCAqLworCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKworI2RlZmluZSBQVUJMSUNfREZBX01BVENIX09QVElPTlMgXAorICAoUENSRTJfQU5DSE9SRUR8UENSRTJfTk9UQk9MfFBDUkUyX05PVEVPTHxQQ1JFMl9OT1RFTVBUWXwgXAorICAgUENSRTJfTk9URU1QVFlfQVRTVEFSVHxQQ1JFMl9OT19VVEZfQ0hFQ0t8UENSRTJfUEFSVElBTF9IQVJEfCBcCisgICBQQ1JFMl9QQVJUSUFMX1NPRlR8UENSRTJfREZBX1NIT1JURVNUfFBDUkUyX0RGQV9SRVNUQVJUKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgQ29kZSBwYXJhbWV0ZXJzIGFuZCBzdGF0aWMgdGFibGVzICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhlc2UgYXJlIG9mZnNldHMgdGhhdCBhcmUgdXNlZCB0byB0dXJuIHRoZSBPUF9UWVBFU1RBUiBhbmQgZnJpZW5kcyBvcGNvZGVzCitpbnRvIG90aGVycywgdW5kZXIgc3BlY2lhbCBjb25kaXRpb25zLiBBIGdhcCBvZiAyMCBiZXR3ZWVuIHRoZSBibG9ja3Mgc2hvdWxkIGJlCitlbm91Z2guIFRoZSByZXN1bHRpbmcgb3Bjb2RlcyBkb24ndCBoYXZlIHRvIGJlIGxlc3MgdGhhbiAyNTYgYmVjYXVzZSB0aGV5IGFyZQorbmV2ZXIgc3RvcmVkLCBzbyB3ZSBwdXNoIHRoZW0gd2VsbCBjbGVhciBvZiB0aGUgbm9ybWFsIG9wY29kZXMuICovCisKKyNkZWZpbmUgT1BfUFJPUF9FWFRSQSAgICAgICAzMDAKKyNkZWZpbmUgT1BfRVhUVU5JX0VYVFJBICAgICAzMjAKKyNkZWZpbmUgT1BfQU5ZTkxfRVhUUkEgICAgICAzNDAKKyNkZWZpbmUgT1BfSFNQQUNFX0VYVFJBICAgICAzNjAKKyNkZWZpbmUgT1BfVlNQQUNFX0VYVFJBICAgICAzODAKKworCisvKiBUaGlzIHRhYmxlIGlkZW50aWZpZXMgdGhvc2Ugb3Bjb2RlcyB0aGF0IGFyZSBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSBhCitjaGFyYWN0ZXIgdGhhdCBpcyB0byBiZSB0ZXN0ZWQgaW4gc29tZSB3YXkuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8KK2NlbnRyYWxpemUgdGhlIGxvYWRpbmcgb2YgdGhlc2UgY2hhcmFjdGVycy4gSW4gdGhlIGNhc2Ugb2YgVHlwZSAqIGV0YywgdGhlCisiY2hhcmFjdGVyIiBpcyB0aGUgb3Bjb2RlIGZvciBcRCwgXGQsIFxTLCBccywgXFcsIG9yIFx3LCB3aGljaCB3aWxsIGFsd2F5cyBiZSBhCitzbWFsbCB2YWx1ZS4gTm9uLXplcm8gdmFsdWVzIGluIHRoZSB0YWJsZSBhcmUgdGhlIG9mZnNldHMgZnJvbSB0aGUgb3Bjb2RlIHdoZXJlCit0aGUgY2hhcmFjdGVyIGlzIHRvIGJlIGZvdW5kLiAqKipOT1RFKioqIElmIHRoZSBzdGFydCBvZiB0aGlzIHRhYmxlIGlzCittb2RpZmllZCwgdGhlIHRocmVlIHRhYmxlcyB0aGF0IGZvbGxvdyBtdXN0IGFsc28gYmUgbW9kaWZpZWQuICovCisKK3N0YXRpYyBjb25zdCB1aW50OF90IGNvcHRhYmxlW10gPSB7CisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgLyogXEEsIFxHLCBcSywgXEIsIFxiICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgIC8qIFxELCBcZCwgXFMsIFxzLCBcVywgXHcgICAgICAgICAgICAgICAgICovCisgIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBBbnksIEFsbEFueSwgQW55Ynl0ZSAgICAgICAgICAgICAgICAgICAqLworICAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXFAsIFxwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgIC8qIFxSLCBcSCwgXGgsIFxWLCBcdiAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgLyogXFosIFx6LCAkLCAkTSwgXiwgXk0gICAgICAgICAgICAgICAgICAgKi8KKyAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIC8qIFBvc2l0aXZlIHNpbmdsZS1jaGFyIHJlcGVhdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAxLCAxLCAxLCAgICAgICAgICAgICAgLyogKiwgKj8sICssICs/LCA/LCA/PyAgICAgICAgICAgICAgICAgICAgKi8KKyAgMStJTU0yX1NJWkUsIDErSU1NMl9TSVpFLCAgICAgIC8qIHVwdG8sIG1pbnVwdG8gICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDErSU1NMl9TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBleGFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAxK0lNTTJfU0laRSwgICAgICAgICAgLyogKissICsrLCA/KywgdXB0bysgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMSwgMSwgMSwgMSwgMSwgMSwgICAgICAgICAgICAgIC8qICpJLCAqP0ksICtJLCArP0ksID9JLCA/P0kgICAgICAgICAgICAgICovCisgIDErSU1NMl9TSVpFLCAxK0lNTTJfU0laRSwgICAgICAvKiB1cHRvIEksIG1pbnVwdG8gSSAgICAgICAgICAgICAgICAgICAgICAqLworICAxK0lNTTJfU0laRSwgICAgICAgICAgICAgICAgICAgLyogZXhhY3QgSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMSwgMSwgMSwgMStJTU0yX1NJWkUsICAgICAgICAgIC8qICorSSwgKytJLCA/K0ksIHVwdG8rSSAgICAgICAgICAgICAgICAgICovCisgIC8qIE5lZ2F0aXZlIHNpbmdsZS1jaGFyIHJlcGVhdHMgLSBvbmx5IGZvciBjaGFycyA8IDI1NiAgICAgICAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAxLCAxLCAxLCAgICAgICAgICAgICAgLyogTk9UICosICo/LCArLCArPywgPywgPz8gICAgICAgICAgICAgICAgKi8KKyAgMStJTU0yX1NJWkUsIDErSU1NMl9TSVpFLCAgICAgIC8qIE5PVCB1cHRvLCBtaW51cHRvICAgICAgICAgICAgICAgICAgICAgICovCisgIDErSU1NMl9TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBOT1QgZXhhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAxK0lNTTJfU0laRSwgICAgICAgICAgLyogTk9UICorLCArKywgPyssIHVwdG8rICAgICAgICAgICAgICAgICAgKi8KKyAgMSwgMSwgMSwgMSwgMSwgMSwgICAgICAgICAgICAgIC8qIE5PVCAqSSwgKj9JLCArSSwgKz9JLCA/SSwgPz9JICAgICAgICAgICovCisgIDErSU1NMl9TSVpFLCAxK0lNTTJfU0laRSwgICAgICAvKiBOT1QgdXB0byBJLCBtaW51cHRvIEkgICAgICAgICAgICAgICAgICAqLworICAxK0lNTTJfU0laRSwgICAgICAgICAgICAgICAgICAgLyogTk9UIGV4YWN0IEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMSwgMSwgMSwgMStJTU0yX1NJWkUsICAgICAgICAgIC8qIE5PVCAqK0ksICsrSSwgPytJLCB1cHRvK0kgICAgICAgICAgICAgICovCisgIC8qIFBvc2l0aXZlIHR5cGUgcmVwZWF0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAxLCAxLCAxLCAgICAgICAgICAgICAgLyogVHlwZSAqLCAqPywgKywgKz8sID8sID8/ICAgICAgICAgICAgICAgKi8KKyAgMStJTU0yX1NJWkUsIDErSU1NMl9TSVpFLCAgICAgIC8qIFR5cGUgdXB0bywgbWludXB0byAgICAgICAgICAgICAgICAgICAgICovCisgIDErSU1NMl9TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGV4YWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAxK0lNTTJfU0laRSwgICAgICAgICAgLyogVHlwZSAqKywgKyssID8rLCB1cHRvKyAgICAgICAgICAgICAgICAgKi8KKyAgLyogQ2hhcmFjdGVyIGNsYXNzICYgcmVmIHJlcGVhdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAvKiAqLCAqPywgKywgKz8sID8sID8/ICAgICAgICAgICAgICAgICAgICAqLworICAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ1JSQU5HRSwgQ1JNSU5SQU5HRSAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgIC8qIFBvc3Nlc3NpdmUgKissICsrLCA/KywgQ1JQT1NSQU5HRSAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDTEFTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkNMQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhDTEFTUyAtIHZhcmlhYmxlIGxlbmd0aCAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVGSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEROUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBETlJFRkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkVDVVJTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENBTExPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDQUxMT1VUX1NUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXRSbWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogS2V0Um1pbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtldFJwb3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXZlcnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzZXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFzc2VydCBub3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgYmVoaW5kICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzZXJ0IGJlaGluZCBub3QgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9OQ0UsIE9OQ0VfTkMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAvKiBCUkEsIEJSQVBPUywgQ0JSQSwgQ0JSQVBPUywgQ09ORCAgICAgICAqLworICAwLCAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgLyogU0JSQSwgU0JSQVBPUywgU0NCUkEsIFNDQlJBUE9TLCBTQ09ORCAgKi8KKyAgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENSRUYsIEROQ1JFRiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSUkVGLCBETlJSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRkFMU0UsIFRSVUUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIEJSQVpFUk8sIEJSQU1JTlpFUk8sIEJSQVBPU1pFUk8gICAgICAgICovCisgIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAvKiBNQVJLLCBQUlVORSwgUFJVTkVfQVJHICAgICAgICAgICAgICAgICAqLworICAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgLyogU0tJUCwgU0tJUF9BUkcsIFRIRU4sIFRIRU5fQVJHICAgICAgICAgKi8KKyAgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgIC8qIENPTU1JVCwgRkFJTCwgQUNDRVBULCBBU1NFUlRfQUNDRVBUICAgICovCisgIDAsIDAsIDAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDTE9TRSwgU0tJUFpFUk8sIERFRklORSAgICAgICAgICAgICAgICAqLworfTsKKworLyogVGhpcyB0YWJsZSBpZGVudGlmaWVzIHRob3NlIG9wY29kZXMgdGhhdCBpbnNwZWN0IGEgY2hhcmFjdGVyLiBJdCBpcyB1c2VkIHRvCityZW1lbWJlciB0aGUgZmFjdCB0aGF0IGEgY2hhcmFjdGVyIGNvdWxkIGhhdmUgYmVlbiBpbnNwZWN0ZWQgd2hlbiB0aGUgZW5kIG9mCit0aGUgc3ViamVjdCBpcyByZWFjaGVkLiAqKipOT1RFKioqIElmIHRoZSBzdGFydCBvZiB0aGlzIHRhYmxlIGlzIG1vZGlmaWVkLCB0aGUKK3R3byB0YWJsZXMgdGhhdCBmb2xsb3cgbXVzdCBhbHNvIGJlIG1vZGlmaWVkLiAqLworCitzdGF0aWMgY29uc3QgdWludDhfdCBwb3B0YWJsZVtdID0geworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgMCwgMCwgMSwgMSwgICAgICAgICAgICAgICAgIC8qIFxBLCBcRywgXEssIFxCLCBcYiAgICAgICAgICAgICAgICAgICAgICovCisgIDEsIDEsIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAvKiBcRCwgXGQsIFxTLCBccywgXFcsIFx3ICAgICAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgLyogQW55LCBBbGxBbnksIEFueWJ5dGUgICAgICAgICAgICAgICAgICAgKi8KKyAgMSwgMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFxQLCBccCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDEsIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAgICAvKiBcUiwgXEgsIFxoLCBcViwgXHYgICAgICAgICAgICAgICAgICAgICAqLworICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogXFggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgIC8qIFxaLCBceiwgJCwgJE0sIF4sIF5NICAgICAgICAgICAgICAgICAgICovCisgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ2hhcmkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3RpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAvKiBQb3NpdGl2ZSBzaW5nbGUtY2hhciByZXBlYXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMSwgMSwgMSwgMSwgMSwgMSwgICAgICAgICAgICAgIC8qICosICo/LCArLCArPywgPywgPz8gICAgICAgICAgICAgICAgICAgICovCisgIDEsIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAvKiB1cHRvLCBtaW51cHRvLCBleGFjdCAgICAgICAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAxLCAgICAgICAgICAgICAgICAgICAgLyogKissICsrLCA/KywgdXB0bysgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMSwgMSwgMSwgMSwgMSwgMSwgICAgICAgICAgICAgIC8qICpJLCAqP0ksICtJLCArP0ksID9JLCA/P0kgICAgICAgICAgICAgICovCisgIDEsIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAvKiB1cHRvIEksIG1pbnVwdG8gSSwgZXhhY3QgSSAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAxLCAgICAgICAgICAgICAgICAgICAgLyogKitJLCArK0ksID8rSSwgdXB0bytJICAgICAgICAgICAgICAgICAgKi8KKyAgLyogTmVnYXRpdmUgc2luZ2xlLWNoYXIgcmVwZWF0cyAtIG9ubHkgZm9yIGNoYXJzIDwgMjU2ICAgICAgICAgICAgICAgICAgICovCisgIDEsIDEsIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAvKiBOT1QgKiwgKj8sICssICs/LCA/LCA/PyAgICAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgLyogTk9UIHVwdG8sIG1pbnVwdG8sIGV4YWN0ICAgICAgICAgICAgICAgKi8KKyAgMSwgMSwgMSwgMSwgICAgICAgICAgICAgICAgICAgIC8qIE5PVCAqKywgKyssID8rLCB1cHRvKyAgICAgICAgICAgICAgICAgICovCisgIDEsIDEsIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAvKiBOT1QgKkksICo/SSwgK0ksICs/SSwgP0ksID8/SSAgICAgICAgICAqLworICAxLCAxLCAxLCAgICAgICAgICAgICAgICAgICAgICAgLyogTk9UIHVwdG8gSSwgbWludXB0byBJLCBleGFjdCBJICAgICAgICAgKi8KKyAgMSwgMSwgMSwgMSwgICAgICAgICAgICAgICAgICAgIC8qIE5PVCAqK0ksICsrSSwgPytJLCB1cHRvK0kgICAgICAgICAgICAgICovCisgIC8qIFBvc2l0aXZlIHR5cGUgcmVwZWF0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAxLCAxLCAxLCAgICAgICAgICAgICAgLyogVHlwZSAqLCAqPywgKywgKz8sID8sID8/ICAgICAgICAgICAgICAgKi8KKyAgMSwgMSwgMSwgICAgICAgICAgICAgICAgICAgICAgIC8qIFR5cGUgdXB0bywgbWludXB0bywgZXhhY3QgICAgICAgICAgICAgICovCisgIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAgICAgICAvKiBUeXBlICorLCArKywgPyssIHVwdG8rICAgICAgICAgICAgICAgICAqLworICAvKiBDaGFyYWN0ZXIgY2xhc3MgJiByZWYgcmVwZWF0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMSwgMSwgMSwgMSwgMSwgMSwgICAgICAgICAgICAgIC8qICosICo/LCArLCArPywgPywgPz8gICAgICAgICAgICAgICAgICAgICovCisgIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDUlJBTkdFLCBDUk1JTlJBTkdFICAgICAgICAgICAgICAgICAgICAqLworICAxLCAxLCAxLCAxLCAgICAgICAgICAgICAgICAgICAgLyogUG9zc2Vzc2l2ZSAqKywgKyssID8rLCBDUlBPU1JBTkdFICAgICAgKi8KKyAgMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENMQVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOQ0xBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWENMQVNTIC0gdmFyaWFibGUgbGVuZ3RoICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJFRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRUZJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE5SRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEROUkVGSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSRUNVUlNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ0FMTE9VVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENBTExPVVRfU1RSICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogS2V0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEtldFJtYXggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBLZXRSbWluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogS2V0UnBvcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldmVyc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQXNzZXJ0IG5vdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEFzc2VydCBiZWhpbmQgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgYmVoaW5kIG5vdCAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT05DRSwgT05DRV9OQyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgMCwgMCwgMCwgMCwgICAgICAgICAgICAgICAgIC8qIEJSQSwgQlJBUE9TLCBDQlJBLCBDQlJBUE9TLCBDT05EICAgICAgICovCisgIDAsIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAvKiBTQlJBLCBTQlJBUE9TLCBTQ0JSQSwgU0NCUkFQT1MsIFNDT05EICAqLworICAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ1JFRiwgRE5DUkVGICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJSRUYsIEROUlJFRiAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgIDAsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGQUxTRSwgVFJVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgICAgLyogQlJBWkVSTywgQlJBTUlOWkVSTywgQlJBUE9TWkVSTyAgICAgICAgKi8KKyAgMCwgMCwgMCwgICAgICAgICAgICAgICAgICAgICAgIC8qIE1BUkssIFBSVU5FLCBQUlVORV9BUkcgICAgICAgICAgICAgICAgICovCisgIDAsIDAsIDAsIDAsICAgICAgICAgICAgICAgICAgICAvKiBTS0lQLCBTS0lQX0FSRywgVEhFTiwgVEhFTl9BUkcgICAgICAgICAqLworICAwLCAwLCAwLCAwLCAgICAgICAgICAgICAgICAgICAgLyogQ09NTUlULCBGQUlMLCBBQ0NFUFQsIEFTU0VSVF9BQ0NFUFQgICAgKi8KKyAgMCwgMCwgMCAgICAgICAgICAgICAgICAgICAgICAgIC8qIENMT1NFLCBTS0lQWkVSTywgREVGSU5FICAgICAgICAgICAgICAgICovCit9OworCisvKiBUaGVzZSAyIHRhYmxlcyBhbGxvdyBmb3IgY29tcGFjdCBjb2RlIGZvciB0ZXN0aW5nIGZvciBcRCwgXGQsIFxTLCBccywgXFcsCithbmQgXHcgKi8KKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgdG9wdGFibGUxW10gPSB7CisgIDAsIDAsIDAsIDAsIDAsIDAsCisgIGN0eXBlX2RpZ2l0LCBjdHlwZV9kaWdpdCwKKyAgY3R5cGVfc3BhY2UsIGN0eXBlX3NwYWNlLAorICBjdHlwZV93b3JkLCAgY3R5cGVfd29yZCwKKyAgMCwgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBPUF9BTlksIE9QX0FMTEFOWSAqLworfTsKKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgdG9wdGFibGUyW10gPSB7CisgIDAsIDAsIDAsIDAsIDAsIDAsCisgIGN0eXBlX2RpZ2l0LCAwLAorICBjdHlwZV9zcGFjZSwgMCwKKyAgY3R5cGVfd29yZCwgIDAsCisgIDEsIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT1BfQU5ZLCBPUF9BTExBTlkgKi8KK307CisKKworLyogU3RydWN0dXJlIGZvciBob2xkaW5nIGRhdGEgYWJvdXQgYSBwYXJ0aWN1bGFyIHN0YXRlLCB3aGljaCBpcyBpbiBlZmZlY3QgdGhlCitjdXJyZW50IGRhdGEgZm9yIGFuIGFjdGl2ZSBwYXRoIHRocm91Z2ggdGhlIG1hdGNoIHRyZWUuIEl0IG11c3QgY29uc2lzdAorZW50aXJlbHkgb2YgaW50cyBiZWNhdXNlIHRoZSB3b3JraW5nIHZlY3RvciB3ZSBhcmUgcGFzc2VkLCBhbmQgd2hpY2ggd2UgcHV0Cit0aGVzZSBzdHJ1Y3R1cmVzIGluLCBpcyBhIHZlY3RvciBvZiBpbnRzLiAqLworCit0eXBlZGVmIHN0cnVjdCBzdGF0ZWJsb2NrIHsKKyAgaW50IG9mZnNldDsgICAgICAgICAgICAgICAgICAgICAvKiBPZmZzZXQgdG8gb3Bjb2RlICgtdmUgaGFzIG1lYW5pbmcpICovCisgIGludCBjb3VudDsgICAgICAgICAgICAgICAgICAgICAgLyogQ291bnQgZm9yIHJlcGVhdHMgKi8KKyAgaW50IGRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAvKiBTb21lIHVzZSBleHRyYSBkYXRhICovCit9IHN0YXRlYmxvY2s7CisKKyNkZWZpbmUgSU5UU19QRVJfU1RBVEVCTE9DSyAgKGludCkoc2l6ZW9mKHN0YXRlYmxvY2spL3NpemVvZihpbnQpKQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgIE1hdGNoIGEgUmVndWxhciBFeHByZXNzaW9uIC0gREZBIGVuZ2luZSAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGludGVybmFsIGZ1bmN0aW9uIGFwcGxpZXMgYSBjb21waWxlZCBwYXR0ZXJuIHRvIGEgc3ViamVjdCBzdHJpbmcsCitzdGFydGluZyBhdCBhIGdpdmVuIHBvaW50LCB1c2luZyBhIERGQSBlbmdpbmUuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlCitleHRlcm5hbCBvbmUsIHBvc3NpYmx5IG11bHRpcGxlIHRpbWVzIGlmIHRoZSBwYXR0ZXJuIGlzIG5vdCBhbmNob3JlZC4gVGhlCitmdW5jdGlvbiBjYWxscyBpdHNlbGYgcmVjdXJzaXZlbHkgZm9yIHNvbWUga2luZHMgb2Ygc3VicGF0dGVybi4KKworQXJndW1lbnRzOgorICBtYiAgICAgICAgICAgICAgICB0aGUgbWF0Y2hfZGF0YSBibG9jayB3aXRoIGZpeGVkIGluZm9ybWF0aW9uCisgIHRoaXNfc3RhcnRfY29kZSAgIHRoZSBvcGVuaW5nIGJyYWNrZXQgb2YgdGhpcyBzdWJleHByZXNzaW9uJ3MgY29kZQorICBjdXJyZW50X3N1YmplY3QgICB3aGVyZSB3ZSBjdXJyZW50bHkgYXJlIGluIHRoZSBzdWJqZWN0IHN0cmluZworICBzdGFydF9vZmZzZXQgICAgICBzdGFydCBvZmZzZXQgaW4gdGhlIHN1YmplY3Qgc3RyaW5nCisgIG9mZnNldHMgICAgICAgICAgIHZlY3RvciB0byBjb250YWluIHRoZSBtYXRjaGluZyBzdHJpbmcgb2Zmc2V0cworICBvZmZzZXRjb3VudCAgICAgICBzaXplIG9mIHNhbWUKKyAgd29ya3NwYWNlICAgICAgICAgdmVjdG9yIG9mIHdvcmtzcGFjZQorICB3c2NvdW50ICAgICAgICAgICBzaXplIG9mIHNhbWUKKyAgcmxldmVsICAgICAgICAgICAgZnVuY3Rpb24gY2FsbCByZWN1cnNpb24gbGV2ZWwKKworUmV0dXJuczogICAgICAgICAgICA+IDAgPT4gbnVtYmVyIG9mIG1hdGNoIG9mZnNldCBwYWlycyBwbGFjZWQgaW4gb2Zmc2V0cworICAgICAgICAgICAgICAgICAgICA9IDAgPT4gb2Zmc2V0cyBvdmVyZmxvd2VkOyBsb25nZXN0IG1hdGNoZXMgYXJlIHByZXNlbnQKKyAgICAgICAgICAgICAgICAgICAgIC0xID0+IGZhaWxlZCB0byBtYXRjaAorICAgICAgICAgICAgICAgICAgIDwgLTEgPT4gc29tZSBraW5kIG9mIHVuZXhwZWN0ZWQgcHJvYmxlbQorCitUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgdXNlZCBmb3IgYWRkaW5nIHN0YXRlcyB0byB0aGUgdHdvIHN0YXRlIHZlY3RvcnMgKG9uZQorZm9yIHRoZSBjdXJyZW50IGNoYXJhY3Rlciwgb25lIGZvciB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcikuICovCisKKyNkZWZpbmUgQUREX0FDVElWRSh4LHkpIFwKKyAgaWYgKGFjdGl2ZV9jb3VudCsrIDwgd3Njb3VudCkgXAorICAgIHsgXAorICAgIG5leHRfYWN0aXZlX3N0YXRlLT5vZmZzZXQgPSAoeCk7IFwKKyAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0+Y291bnQgID0gKHkpOyBcCisgICAgbmV4dF9hY3RpdmVfc3RhdGUrKzsgXAorICAgIH0gXAorICBlbHNlIHJldHVybiBQQ1JFMl9FUlJPUl9ERkFfV1NTSVpFCisKKyNkZWZpbmUgQUREX0FDVElWRV9EQVRBKHgseSx6KSBcCisgIGlmIChhY3RpdmVfY291bnQrKyA8IHdzY291bnQpIFwKKyAgICB7IFwKKyAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0+b2Zmc2V0ID0gKHgpOyBcCisgICAgbmV4dF9hY3RpdmVfc3RhdGUtPmNvdW50ICA9ICh5KTsgXAorICAgIG5leHRfYWN0aXZlX3N0YXRlLT5kYXRhICAgPSAoeik7IFwKKyAgICBuZXh0X2FjdGl2ZV9zdGF0ZSsrOyBcCisgICAgfSBcCisgIGVsc2UgcmV0dXJuIFBDUkUyX0VSUk9SX0RGQV9XU1NJWkUKKworI2RlZmluZSBBRERfTkVXKHgseSkgXAorICBpZiAobmV3X2NvdW50KysgPCB3c2NvdW50KSBcCisgICAgeyBcCisgICAgbmV4dF9uZXdfc3RhdGUtPm9mZnNldCA9ICh4KTsgXAorICAgIG5leHRfbmV3X3N0YXRlLT5jb3VudCAgPSAoeSk7IFwKKyAgICBuZXh0X25ld19zdGF0ZSsrOyBcCisgICAgfSBcCisgIGVsc2UgcmV0dXJuIFBDUkUyX0VSUk9SX0RGQV9XU1NJWkUKKworI2RlZmluZSBBRERfTkVXX0RBVEEoeCx5LHopIFwKKyAgaWYgKG5ld19jb3VudCsrIDwgd3Njb3VudCkgXAorICAgIHsgXAorICAgIG5leHRfbmV3X3N0YXRlLT5vZmZzZXQgPSAoeCk7IFwKKyAgICBuZXh0X25ld19zdGF0ZS0+Y291bnQgID0gKHkpOyBcCisgICAgbmV4dF9uZXdfc3RhdGUtPmRhdGEgICA9ICh6KTsgXAorICAgIG5leHRfbmV3X3N0YXRlKys7IFwKKyAgICB9IFwKKyAgZWxzZSByZXR1cm4gUENSRTJfRVJST1JfREZBX1dTU0laRQorCisvKiBBbmQgbm93LCBoZXJlIGlzIHRoZSBjb2RlICovCisKK3N0YXRpYyBpbnQKK2ludGVybmFsX2RmYV9tYXRjaCgKKyAgZGZhX21hdGNoX2Jsb2NrICptYiwKKyAgUENSRTJfU1BUUiB0aGlzX3N0YXJ0X2NvZGUsCisgIFBDUkUyX1NQVFIgY3VycmVudF9zdWJqZWN0LAorICBQQ1JFMl9TSVpFIHN0YXJ0X29mZnNldCwKKyAgUENSRTJfU0laRSAqb2Zmc2V0cywKKyAgdWludDMyX3Qgb2Zmc2V0Y291bnQsCisgIGludCAqd29ya3NwYWNlLAorICBpbnQgd3Njb3VudCwKKyAgaW50ICBybGV2ZWwpCit7CitzdGF0ZWJsb2NrICphY3RpdmVfc3RhdGVzLCAqbmV3X3N0YXRlcywgKnRlbXBfc3RhdGVzOworc3RhdGVibG9jayAqbmV4dF9hY3RpdmVfc3RhdGUsICpuZXh0X25ld19zdGF0ZTsKKworY29uc3QgdWludDhfdCAqY3R5cGVzLCAqbGNjLCAqZmNjOworUENSRTJfU1BUUiBwdHI7CitQQ1JFMl9TUFRSIGVuZF9jb2RlOworUENSRTJfU1BUUiBmaXJzdF9vcDsKKworZGZhX3JlY3Vyc2lvbl9pbmZvIG5ld19yZWN1cnNpdmU7CisKK2ludCBhY3RpdmVfY291bnQsIG5ld19jb3VudCwgbWF0Y2hfY291bnQ7CisKKy8qIFNvbWUgZmllbGRzIGluIHRoZSBtYiBibG9jayBhcmUgZnJlcXVlbnRseSByZWZlcmVuY2VkLCBzbyB3ZSBsb2FkIHRoZW0gaW50bworaW5kZXBlbmRlbnQgdmFyaWFibGVzIGluIHRoZSBob3BlIHRoYXQgdGhpcyB3aWxsIHBlcmZvcm0gYmV0dGVyLiAqLworCitQQ1JFMl9TUFRSIHN0YXJ0X3N1YmplY3QgPSBtYi0+c3RhcnRfc3ViamVjdDsKK1BDUkUyX1NQVFIgZW5kX3N1YmplY3QgPSBtYi0+ZW5kX3N1YmplY3Q7CitQQ1JFMl9TUFRSIHN0YXJ0X2NvZGUgPSBtYi0+c3RhcnRfY29kZTsKKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorQk9PTCB1dGYgPSAobWItPnBvcHRpb25zICYgUENSRTJfVVRGKSAhPSAwOworI2Vsc2UKK0JPT0wgdXRmID0gRkFMU0U7CisjZW5kaWYKKworQk9PTCByZXNldF9jb3VsZF9jb250aW51ZSA9IEZBTFNFOworCitybGV2ZWwrKzsKK29mZnNldGNvdW50ICY9ICgtMik7CisKK3dzY291bnQgLT0gMjsKK3dzY291bnQgPSAod3Njb3VudCAtICh3c2NvdW50ICUgKElOVFNfUEVSX1NUQVRFQkxPQ0sgKiAyKSkpIC8KKyAgICAgICAgICAoMiAqIElOVFNfUEVSX1NUQVRFQkxPQ0spOworCitjdHlwZXMgPSBtYi0+dGFibGVzICsgY3R5cGVzX29mZnNldDsKK2xjYyA9IG1iLT50YWJsZXMgKyBsY2Nfb2Zmc2V0OworZmNjID0gbWItPnRhYmxlcyArIGZjY19vZmZzZXQ7CisKK21hdGNoX2NvdW50ID0gUENSRTJfRVJST1JfTk9NQVRDSDsgICAvKiBBIG5lZ2F0aXZlIG51bWJlciAqLworCithY3RpdmVfc3RhdGVzID0gKHN0YXRlYmxvY2sgKikod29ya3NwYWNlICsgMik7CituZXh0X25ld19zdGF0ZSA9IG5ld19zdGF0ZXMgPSBhY3RpdmVfc3RhdGVzICsgd3Njb3VudDsKK25ld19jb3VudCA9IDA7CisKK2ZpcnN0X29wID0gdGhpc19zdGFydF9jb2RlICsgMSArIExJTktfU0laRSArCisgICgoKnRoaXNfc3RhcnRfY29kZSA9PSBPUF9DQlJBIHx8ICp0aGlzX3N0YXJ0X2NvZGUgPT0gT1BfU0NCUkEgfHwKKyAgICAqdGhpc19zdGFydF9jb2RlID09IE9QX0NCUkFQT1MgfHwgKnRoaXNfc3RhcnRfY29kZSA9PSBPUF9TQ0JSQVBPUykKKyAgICA/IElNTTJfU0laRTowKTsKKworLyogVGhlIGZpcnN0IHRoaW5nIGluIGFueSAoc3ViKSBwYXR0ZXJuIGlzIGEgYnJhY2tldCBvZiBzb21lIHNvcnQuIFB1c2ggYWxsCit0aGUgYWx0ZXJuYXRpdmUgc3RhdGVzIG9udG8gdGhlIGxpc3QsIGFuZCBmaW5kIG91dCB3aGVyZSB0aGUgZW5kIGlzLiBUaGlzCittYWtlcyBpcyBwb3NzaWJsZSB0byB1c2UgdGhpcyBmdW5jdGlvbiByZWN1cnNpdmVseSwgd2hlbiB3ZSB3YW50IHRvIHN0b3AgYXQgYQorbWF0Y2hpbmcgaW50ZXJuYWwga2V0IHJhdGhlciB0aGFuIGF0IHRoZSBlbmQuCisKK0lmIHRoZSBmaXJzdCBvcGNvZGUgaW4gdGhlIGZpcnN0IGFsdGVybmF0aXZlIGlzIE9QX1JFVkVSU0UsIHdlIGFyZSBkZWFsaW5nIHdpdGgKK2EgYmFja3dhcmQgYXNzZXJ0aW9uLiBJbiB0aGF0IGNhc2UsIHdlIGhhdmUgdG8gZmluZCBvdXQgdGhlIG1heGltdW0gYW1vdW50IHRvCittb3ZlIGJhY2ssIGFuZCBzZXQgdXAgZWFjaCBhbHRlcm5hdGl2ZSBhcHByb3ByaWF0ZWx5LiAqLworCitpZiAoKmZpcnN0X29wID09IE9QX1JFVkVSU0UpCisgIHsKKyAgc2l6ZV90IG1heF9iYWNrID0gMDsKKyAgc2l6ZV90IGdvbmVfYmFjazsKKworICBlbmRfY29kZSA9IHRoaXNfc3RhcnRfY29kZTsKKyAgZG8KKyAgICB7CisgICAgc2l6ZV90IGJhY2sgPSBHRVQoZW5kX2NvZGUsIDIrTElOS19TSVpFKTsKKyAgICBpZiAoYmFjayA+IG1heF9iYWNrKSBtYXhfYmFjayA9IGJhY2s7CisgICAgZW5kX2NvZGUgKz0gR0VUKGVuZF9jb2RlLCAxKTsKKyAgICB9CisgIHdoaWxlICgqZW5kX2NvZGUgPT0gT1BfQUxUKTsKKworICAvKiBJZiB3ZSBjYW4ndCBnbyBiYWNrIHRoZSBhbW91bnQgcmVxdWlyZWQgZm9yIHRoZSBsb25nZXN0IGxvb2tiZWhpbmQKKyAgcGF0dGVybiwgZ28gYmFjayBhcyBmYXIgYXMgd2UgY2FuOyBzb21lIGFsdGVybmF0aXZlcyBtYXkgc3RpbGwgYmUgdmlhYmxlLiAqLworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgIC8qIEluIGNoYXJhY3RlciBtb2RlIHdlIGhhdmUgdG8gc3RlcCBiYWNrIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIgKi8KKworICBpZiAodXRmKQorICAgIHsKKyAgICBmb3IgKGdvbmVfYmFjayA9IDA7IGdvbmVfYmFjayA8IG1heF9iYWNrOyBnb25lX2JhY2srKykKKyAgICAgIHsKKyAgICAgIGlmIChjdXJyZW50X3N1YmplY3QgPD0gc3RhcnRfc3ViamVjdCkgYnJlYWs7CisgICAgICBjdXJyZW50X3N1YmplY3QtLTsKKyAgICAgIEFDUk9TU0NIQVIoY3VycmVudF9zdWJqZWN0ID4gc3RhcnRfc3ViamVjdCwgKmN1cnJlbnRfc3ViamVjdCwgY3VycmVudF9zdWJqZWN0LS0pOworICAgICAgfQorICAgIH0KKyAgZWxzZQorI2VuZGlmCisKKyAgLyogSW4gYnl0ZS1tb2RlIHdlIGNhbiBkbyB0aGlzIHF1aWNrbHkuICovCisKKyAgICB7CisgICAgc2l6ZV90IGN1cnJlbnRfb2Zmc2V0ID0gKHNpemVfdCkoY3VycmVudF9zdWJqZWN0IC0gc3RhcnRfc3ViamVjdCk7CisgICAgZ29uZV9iYWNrID0gKGN1cnJlbnRfb2Zmc2V0IDwgbWF4X2JhY2spPyBjdXJyZW50X29mZnNldCA6IG1heF9iYWNrOworICAgIGN1cnJlbnRfc3ViamVjdCAtPSBnb25lX2JhY2s7CisgICAgfQorCisgIC8qIFNhdmUgdGhlIGVhcmxpZXN0IGNvbnN1bHRlZCBjaGFyYWN0ZXIgKi8KKworICBpZiAoY3VycmVudF9zdWJqZWN0IDwgbWItPnN0YXJ0X3VzZWRfcHRyKQorICAgIG1iLT5zdGFydF91c2VkX3B0ciA9IGN1cnJlbnRfc3ViamVjdDsKKworICAvKiBOb3cgd2UgY2FuIHByb2Nlc3MgdGhlIGluZGl2aWR1YWwgYnJhbmNoZXMuICovCisKKyAgZW5kX2NvZGUgPSB0aGlzX3N0YXJ0X2NvZGU7CisgIGRvCisgICAgeworICAgIHNpemVfdCBiYWNrID0gR0VUKGVuZF9jb2RlLCAyK0xJTktfU0laRSk7CisgICAgaWYgKGJhY2sgPD0gZ29uZV9iYWNrKQorICAgICAgeworICAgICAgaW50IGJzdGF0ZSA9IChpbnQpKGVuZF9jb2RlIC0gc3RhcnRfY29kZSArIDIgKyAyKkxJTktfU0laRSk7CisgICAgICBBRERfTkVXX0RBVEEoLWJzdGF0ZSwgMCwgZ29uZV9iYWNrIC0gYmFjayk7CisgICAgICB9CisgICAgZW5kX2NvZGUgKz0gR0VUKGVuZF9jb2RlLCAxKTsKKyAgICB9CisgIHdoaWxlICgqZW5kX2NvZGUgPT0gT1BfQUxUKTsKKyB9CisKKy8qIFRoaXMgaXMgdGhlIGNvZGUgZm9yIGEgIm5vcm1hbCIgc3VicGF0dGVybiAobm90IGEgYmFja3dhcmQgYXNzZXJ0aW9uKS4gVGhlCitzdGFydCBvZiBhIHdob2xlIHBhdHRlcm4gaXMgYWx3YXlzIG9uZSBvZiB0aGVzZS4gSWYgd2UgYXJlIGF0IHRoZSB0b3AgbGV2ZWwsCit3ZSBtYXkgYmUgYXNrZWQgdG8gcmVzdGFydCBtYXRjaGluZyBmcm9tIHRoZSBzYW1lIHBvaW50IHRoYXQgd2UgcmVhY2hlZCBmb3IgYQorcHJldmlvdXMgcGFydGlhbCBtYXRjaC4gV2Ugc3RpbGwgaGF2ZSB0byBzY2FuIHRocm91Z2ggdGhlIHRvcC1sZXZlbCBicmFuY2hlcyB0bworZmluZCB0aGUgZW5kIHN0YXRlLiAqLworCitlbHNlCisgIHsKKyAgZW5kX2NvZGUgPSB0aGlzX3N0YXJ0X2NvZGU7CisKKyAgLyogUmVzdGFydGluZyAqLworCisgIGlmIChybGV2ZWwgPT0gMSAmJiAobWItPm1vcHRpb25zICYgUENSRTJfREZBX1JFU1RBUlQpICE9IDApCisgICAgeworICAgIGRvIHsgZW5kX2NvZGUgKz0gR0VUKGVuZF9jb2RlLCAxKTsgfSB3aGlsZSAoKmVuZF9jb2RlID09IE9QX0FMVCk7CisgICAgbmV3X2NvdW50ID0gd29ya3NwYWNlWzFdOworICAgIGlmICghd29ya3NwYWNlWzBdKQorICAgICAgbWVtY3B5KG5ld19zdGF0ZXMsIGFjdGl2ZV9zdGF0ZXMsIG5ld19jb3VudCAqIHNpemVvZihzdGF0ZWJsb2NrKSk7CisgICAgfQorCisgIC8qIE5vdCByZXN0YXJ0aW5nICovCisKKyAgZWxzZQorICAgIHsKKyAgICBpbnQgbGVuZ3RoID0gMSArIExJTktfU0laRSArCisgICAgICAoKCp0aGlzX3N0YXJ0X2NvZGUgPT0gT1BfQ0JSQSB8fCAqdGhpc19zdGFydF9jb2RlID09IE9QX1NDQlJBIHx8CisgICAgICAgICp0aGlzX3N0YXJ0X2NvZGUgPT0gT1BfQ0JSQVBPUyB8fCAqdGhpc19zdGFydF9jb2RlID09IE9QX1NDQlJBUE9TKQorICAgICAgICA/IElNTTJfU0laRTowKTsKKyAgICBkbworICAgICAgeworICAgICAgQUREX05FVygoaW50KShlbmRfY29kZSAtIHN0YXJ0X2NvZGUgKyBsZW5ndGgpLCAwKTsKKyAgICAgIGVuZF9jb2RlICs9IEdFVChlbmRfY29kZSwgMSk7CisgICAgICBsZW5ndGggPSAxICsgTElOS19TSVpFOworICAgICAgfQorICAgIHdoaWxlICgqZW5kX2NvZGUgPT0gT1BfQUxUKTsKKyAgICB9CisgIH0KKword29ya3NwYWNlWzBdID0gMDsgICAgLyogQml0IGluZGljYXRpbmcgd2hpY2ggdmVjdG9yIGlzIGN1cnJlbnQgKi8KKworLyogTG9vcCBmb3Igc2Nhbm5pbmcgdGhlIHN1YmplY3QgKi8KKworcHRyID0gY3VycmVudF9zdWJqZWN0OworZm9yICg7OykKKyAgeworICBpbnQgaSwgajsKKyAgaW50IGNsZW4sIGRsZW47CisgIHVpbnQzMl90IGMsIGQ7CisgIGludCBmb3JjZWRfZmFpbCA9IDA7CisgIEJPT0wgcGFydGlhbF9uZXdsaW5lID0gRkFMU0U7CisgIEJPT0wgY291bGRfY29udGludWUgPSByZXNldF9jb3VsZF9jb250aW51ZTsKKyAgcmVzZXRfY291bGRfY29udGludWUgPSBGQUxTRTsKKworICBpZiAocHRyID4gbWItPmxhc3RfdXNlZF9wdHIpIG1iLT5sYXN0X3VzZWRfcHRyID0gcHRyOworCisgIC8qIE1ha2UgdGhlIG5ldyBzdGF0ZSBsaXN0IGludG8gdGhlIGFjdGl2ZSBzdGF0ZSBsaXN0IGFuZCBlbXB0eSB0aGUKKyAgbmV3IHN0YXRlIGxpc3QuICovCisKKyAgdGVtcF9zdGF0ZXMgPSBhY3RpdmVfc3RhdGVzOworICBhY3RpdmVfc3RhdGVzID0gbmV3X3N0YXRlczsKKyAgbmV3X3N0YXRlcyA9IHRlbXBfc3RhdGVzOworICBhY3RpdmVfY291bnQgPSBuZXdfY291bnQ7CisgIG5ld19jb3VudCA9IDA7CisKKyAgd29ya3NwYWNlWzBdIF49IDE7ICAgICAgICAgICAgICAvKiBSZW1lbWJlciBmb3IgdGhlIHJlc3RhcnRpbmcgZmVhdHVyZSAqLworICB3b3Jrc3BhY2VbMV0gPSBhY3RpdmVfY291bnQ7CisKKyAgLyogU2V0IHRoZSBwb2ludGVycyBmb3IgYWRkaW5nIG5ldyBzdGF0ZXMgKi8KKworICBuZXh0X2FjdGl2ZV9zdGF0ZSA9IGFjdGl2ZV9zdGF0ZXMgKyBhY3RpdmVfY291bnQ7CisgIG5leHRfbmV3X3N0YXRlID0gbmV3X3N0YXRlczsKKworICAvKiBMb2FkIHRoZSBjdXJyZW50IGNoYXJhY3RlciBmcm9tIHRoZSBzdWJqZWN0IG91dHNpZGUgdGhlIGxvb3AsIGFzIG1hbnkKKyAgZGlmZmVyZW50IHN0YXRlcyBtYXkgd2FudCB0byBsb29rIGF0IGl0LCBhbmQgd2UgYXNzdW1lIHRoYXQgYXQgbGVhc3Qgb25lCisgIHdpbGwuICovCisKKyAgaWYgKHB0ciA8IGVuZF9zdWJqZWN0KQorICAgIHsKKyAgICBjbGVuID0gMTsgICAgICAgIC8qIE51bWJlciBvZiBkYXRhIGl0ZW1zIGluIHRoZSBjaGFyYWN0ZXIgKi8KKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICBHRVRDSEFSTEVOVEVTVChjLCBwdHIsIGNsZW4pOworI2Vsc2UKKyAgICBjID0gKnB0cjsKKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisgICAgfQorICBlbHNlCisgICAgeworICAgIGNsZW4gPSAwOyAgICAgICAgLyogVGhpcyBpbmRpY2F0ZXMgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCAqLworICAgIGMgPSBOT1RBQ0hBUjsgICAgLyogVGhpcyB2YWx1ZSBzaG91bGQgbmV2ZXIgYWN0dWFsbHkgYmUgdXNlZCAqLworICAgIH0KKworICAvKiBTY2FuIHVwIHRoZSBhY3RpdmUgc3RhdGVzIGFuZCBhY3Qgb24gZWFjaCBvbmUuIFRoZSByZXN1bHQgb2YgYW4gYWN0aW9uCisgIG1heSBiZSB0byBhZGQgbW9yZSBzdGF0ZXMgdG8gdGhlIGN1cnJlbnRseSBhY3RpdmUgbGlzdCAoZS5nLiBvbiBoaXR0aW5nIGEKKyAgcGFyZW50aGVzaXMpIG9yIGl0IG1heSBiZSB0byBwdXQgc3RhdGVzIG9uIHRoZSBuZXcgbGlzdCwgZm9yIGNvbnNpZGVyaW5nCisgIHdoZW4gd2UgbW92ZSB0aGUgY2hhcmFjdGVyIHBvaW50ZXIgb24uICovCisKKyAgZm9yIChpID0gMDsgaSA8IGFjdGl2ZV9jb3VudDsgaSsrKQorICAgIHsKKyAgICBzdGF0ZWJsb2NrICpjdXJyZW50X3N0YXRlID0gYWN0aXZlX3N0YXRlcyArIGk7CisgICAgQk9PTCBjYXNlbGVzcyA9IEZBTFNFOworICAgIFBDUkUyX1NQVFIgY29kZTsKKyAgICBpbnQgc3RhdGVfb2Zmc2V0ID0gY3VycmVudF9zdGF0ZS0+b2Zmc2V0OworICAgIGludCBjb2RldmFsdWUsIHJyYzsKKyAgICBpbnQgY291bnQ7CisKKyAgICAvKiBBIG5lZ2F0aXZlIG9mZnNldCBpcyBhIHNwZWNpYWwgY2FzZSBtZWFuaW5nICJob2xkIG9mZiBnb2luZyB0byB0aGlzCisgICAgKG5lZ2F0ZWQpIHN0YXRlIHVudGlsIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgZGF0YSBmaWVsZCBoYXZlCisgICAgYmVlbiBza2lwcGVkIi4gSWYgdGhlIGNvdWxkX2NvbnRpbnVlIGZsYWcgd2FzIHBhc3NlZCBvdmVyIGZyb20gYSBwcmV2aW91cworICAgIHN0YXRlLCBhcnJhbmdlIGZvciBpdCB0byBwYXNzZWQgb24uICovCisKKyAgICBpZiAoc3RhdGVfb2Zmc2V0IDwgMCkKKyAgICAgIHsKKyAgICAgIGlmIChjdXJyZW50X3N0YXRlLT5kYXRhID4gMCkKKyAgICAgICAgeworICAgICAgICBBRERfTkVXX0RBVEEoc3RhdGVfb2Zmc2V0LCBjdXJyZW50X3N0YXRlLT5jb3VudCwKKyAgICAgICAgICBjdXJyZW50X3N0YXRlLT5kYXRhIC0gMSk7CisgICAgICAgIGlmIChjb3VsZF9jb250aW51ZSkgcmVzZXRfY291bGRfY29udGludWUgPSBUUlVFOworICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIGN1cnJlbnRfc3RhdGUtPm9mZnNldCA9IHN0YXRlX29mZnNldCA9IC1zdGF0ZV9vZmZzZXQ7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIC8qIENoZWNrIGZvciBhIGR1cGxpY2F0ZSBzdGF0ZSB3aXRoIHRoZSBzYW1lIGNvdW50LCBhbmQgc2tpcCBpZiBmb3VuZC4KKyAgICBTZWUgdGhlIG5vdGUgYXQgdGhlIGhlYWQgb2YgdGhpcyBtb2R1bGUgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGltcHJvdmluZworICAgIHBlcmZvcm1hbmNlIGhlcmUuICovCisKKyAgICBmb3IgKGogPSAwOyBqIDwgaTsgaisrKQorICAgICAgeworICAgICAgaWYgKGFjdGl2ZV9zdGF0ZXNbal0ub2Zmc2V0ID09IHN0YXRlX29mZnNldCAmJgorICAgICAgICAgIGFjdGl2ZV9zdGF0ZXNbal0uY291bnQgPT0gY3VycmVudF9zdGF0ZS0+Y291bnQpCisgICAgICAgIGdvdG8gTkVYVF9BQ1RJVkVfU1RBVEU7CisgICAgICB9CisKKyAgICAvKiBUaGUgc3RhdGUgb2Zmc2V0IGlzIHRoZSBvZmZzZXQgdG8gdGhlIG9wY29kZSAqLworCisgICAgY29kZSA9IHN0YXJ0X2NvZGUgKyBzdGF0ZV9vZmZzZXQ7CisgICAgY29kZXZhbHVlID0gKmNvZGU7CisKKyAgICAvKiBJZiB0aGlzIG9wY29kZSBpbnNwZWN0cyBhIGNoYXJhY3RlciwgYnV0IHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZQorICAgIHN1YmplY3QsIHJlbWVtYmVyIHRoZSBmYWN0IGZvciB1c2Ugd2hlbiB0ZXN0aW5nIGZvciBhIHBhcnRpYWwgbWF0Y2guICovCisKKyAgICBpZiAoY2xlbiA9PSAwICYmIHBvcHRhYmxlW2NvZGV2YWx1ZV0gIT0gMCkKKyAgICAgIGNvdWxkX2NvbnRpbnVlID0gVFJVRTsKKworICAgIC8qIElmIHRoaXMgb3Bjb2RlIGlzIGZvbGxvd2VkIGJ5IGFuIGlubGluZSBjaGFyYWN0ZXIsIGxvYWQgaXQuIEl0IGlzCisgICAgdGVtcHRpbmcgdG8gdGVzdCBmb3IgdGhlIHByZXNlbmNlIG9mIGEgc3ViamVjdCBjaGFyYWN0ZXIgaGVyZSwgYnV0IHRoYXQKKyAgICBpcyB3cm9uZywgYmVjYXVzZSBzb21ldGltZXMgemVybyByZXBldGl0aW9ucyBvZiB0aGUgc3ViamVjdCBhcmUKKyAgICBwZXJtaXR0ZWQuCisKKyAgICBXZSBhbHNvIHVzZSB0aGlzIG1lY2hhbmlzbSBmb3Igb3Bjb2RlcyBzdWNoIGFzIE9QX1RZUEVQTFVTIHRoYXQgdGFrZSBhbgorICAgIGFyZ3VtZW50IHRoYXQgaXMgbm90IGEgZGF0YSBjaGFyYWN0ZXIgLSBidXQgaXMgYWx3YXlzIG9uZSBieXRlIGxvbmcgYmVjYXVzZQorICAgIHRoZSB2YWx1ZXMgYXJlIHNtYWxsLiBXZSBoYXZlIHRvIHRha2Ugc3BlY2lhbCBhY3Rpb24gdG8gZGVhbCB3aXRoICBcUCwgXHAsCisgICAgXEgsIFxoLCBcViwgXHYgYW5kIFxYIGluIHRoaXMgY2FzZS4gVG8ga2VlcCB0aGUgb3RoZXIgY2FzZXMgZmFzdCwgY29udmVydAorICAgIHRoZXNlIG9uZXMgdG8gbmV3IG9wY29kZXMuICovCisKKyAgICBpZiAoY29wdGFibGVbY29kZXZhbHVlXSA+IDApCisgICAgICB7CisgICAgICBkbGVuID0gMTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgIGlmICh1dGYpIHsgR0VUQ0hBUkxFTihkLCAoY29kZSArIGNvcHRhYmxlW2NvZGV2YWx1ZV0pLCBkbGVuKTsgfSBlbHNlCisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworICAgICAgZCA9IGNvZGVbY29wdGFibGVbY29kZXZhbHVlXV07CisgICAgICBpZiAoY29kZXZhbHVlID49IE9QX1RZUEVTVEFSKQorICAgICAgICB7CisgICAgICAgIHN3aXRjaChkKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIE9QX0FOWUJZVEU6IHJldHVybiBQQ1JFMl9FUlJPUl9ERkFfVUlURU07CisgICAgICAgICAgY2FzZSBPUF9OT1RQUk9QOgorICAgICAgICAgIGNhc2UgT1BfUFJPUDogY29kZXZhbHVlICs9IE9QX1BST1BfRVhUUkE7IGJyZWFrOworICAgICAgICAgIGNhc2UgT1BfQU5ZTkw6IGNvZGV2YWx1ZSArPSBPUF9BTllOTF9FWFRSQTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBPUF9FWFRVTkk6IGNvZGV2YWx1ZSArPSBPUF9FWFRVTklfRVhUUkE7IGJyZWFrOworICAgICAgICAgIGNhc2UgT1BfTk9UX0hTUEFDRToKKyAgICAgICAgICBjYXNlIE9QX0hTUEFDRTogY29kZXZhbHVlICs9IE9QX0hTUEFDRV9FWFRSQTsgYnJlYWs7CisgICAgICAgICAgY2FzZSBPUF9OT1RfVlNQQUNFOgorICAgICAgICAgIGNhc2UgT1BfVlNQQUNFOiBjb2RldmFsdWUgKz0gT1BfVlNQQUNFX0VYVFJBOyBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBkbGVuID0gMDsgICAgICAgICAvKiBOb3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQgY29tcGlsZXJzIG1vYW4gKi8KKyAgICAgIGQgPSBOT1RBQ0hBUjsgICAgIC8qIGlmIHRoZXNlIHZhcmlhYmxlcyBhcmUgbm90IHNldC4gKi8KKyAgICAgIH0KKworCisgICAgLyogTm93IHByb2Nlc3MgdGhlIGluZGl2aWR1YWwgb3Bjb2RlcyAqLworCisgICAgc3dpdGNoIChjb2RldmFsdWUpCisgICAgICB7CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworICAgICAgLyogVGhlc2UgY2FzZXMgYXJlIG5ldmVyIG9iZXllZC4gVGhpcyBpcyBhIGZ1ZGdlIHRoYXQgY2F1c2VzIGEgY29tcGlsZS0KKyAgICAgIHRpbWUgZXJyb3IgaWYgdGhlIHZlY3RvcnMgY29wdGFibGUgb3IgcG9wdGFibGUsIHdoaWNoIGFyZSBpbmRleGVkIGJ5CisgICAgICBvcGNvZGUsIGFyZSBub3QgdGhlIGNvcnJlY3QgbGVuZ3RoLiBJdCBzZWVtcyB0byBiZSB0aGUgb25seSB3YXkgdG8gZG8KKyAgICAgIHN1Y2ggYSBjaGVjayBhdCBjb21waWxlIHRpbWUsIGFzIHRoZSBzaXplb2YoKSBvcGVyYXRvciBkb2VzIG5vdCB3b3JrCisgICAgICBpbiB0aGUgQyBwcmVwcm9jZXNzb3IuICovCisKKyAgICAgIGNhc2UgT1BfVEFCTEVfTEVOR1RIOgorICAgICAgY2FzZSBPUF9UQUJMRV9MRU5HVEggKworICAgICAgICAoKHNpemVvZihjb3B0YWJsZSkgPT0gT1BfVEFCTEVfTEVOR1RIKSAmJgorICAgICAgICAgKHNpemVvZihwb3B0YWJsZSkgPT0gT1BfVEFCTEVfTEVOR1RIKSk6CisgICAgICBicmVhazsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyAgICAgIC8qIFJlYWNoZWQgYSBjbG9zaW5nIGJyYWNrZXQuIElmIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBwYXR0ZXJuLCBjYXJyeQorICAgICAgb24gd2l0aCB0aGUgbmV4dCBvcGNvZGUuIEZvciByZXBlYXRpbmcgb3Bjb2RlcywgYWxzbyBhZGQgdGhlIHJlcGVhdAorICAgICAgc3RhdGUuIE5vdGUgdGhhdCBLRVRSUE9TIHdpbGwgYWx3YXlzIGJlIGVuY291bnRlcmVkIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgICBzdWJwYXR0ZXJuLCBiZWNhdXNlIHRoZSBwb3NzZXNzaXZlIHN1YnBhdHRlcm4gcmVwZWF0cyBhcmUgYWx3YXlzIGhhbmRsZWQKKyAgICAgIHVzaW5nIHJlY3Vyc2l2ZSBjYWxscy4gVGh1cywgaXQgbmV2ZXIgYWRkcyBhbnkgbmV3IHN0YXRlcy4KKworICAgICAgQXQgdGhlIGVuZCBvZiB0aGUgKHN1YilwYXR0ZXJuLCB1bmxlc3Mgd2UgaGF2ZSBhbiBlbXB0eSBzdHJpbmcgYW5kCisgICAgICBQQ1JFMl9OT1RFTVBUWSBpcyBzZXQsIG9yIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQgaXMgc2V0IGFuZCB3ZSBhcmUgYXQgdGhlCisgICAgICBzdGFydCBvZiB0aGUgc3ViamVjdCwgc2F2ZSB0aGUgbWF0Y2ggZGF0YSwgc2hpZnRpbmcgdXAgYWxsIHByZXZpb3VzCisgICAgICBtYXRjaGVzIHNvIHdlIGFsd2F5cyBoYXZlIHRoZSBsb25nZXN0IGZpcnN0LiAqLworCisgICAgICBjYXNlIE9QX0tFVDoKKyAgICAgIGNhc2UgT1BfS0VUUk1JTjoKKyAgICAgIGNhc2UgT1BfS0VUUk1BWDoKKyAgICAgIGNhc2UgT1BfS0VUUlBPUzoKKyAgICAgIGlmIChjb2RlICE9IGVuZF9jb2RlKQorICAgICAgICB7CisgICAgICAgIEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMSArIExJTktfU0laRSwgMCk7CisgICAgICAgIGlmIChjb2RldmFsdWUgIT0gT1BfS0VUKQorICAgICAgICAgIHsKKyAgICAgICAgICBBRERfQUNUSVZFKHN0YXRlX29mZnNldCAtIEdFVChjb2RlLCAxKSwgMCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgaWYgKHB0ciA+IGN1cnJlbnRfc3ViamVjdCB8fAorICAgICAgICAgICAgKChtYi0+bW9wdGlvbnMgJiBQQ1JFMl9OT1RFTVBUWSkgPT0gMCAmJgorICAgICAgICAgICAgICAoKG1iLT5tb3B0aW9ucyAmIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQpID09IDAgfHwKKyAgICAgICAgICAgICAgICBjdXJyZW50X3N1YmplY3QgPiBzdGFydF9zdWJqZWN0ICsgbWItPnN0YXJ0X29mZnNldCkpKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAobWF0Y2hfY291bnQgPCAwKSBtYXRjaF9jb3VudCA9IChvZmZzZXRjb3VudCA+PSAyKT8gMSA6IDA7CisgICAgICAgICAgICBlbHNlIGlmIChtYXRjaF9jb3VudCA+IDAgJiYgKyttYXRjaF9jb3VudCAqIDIgPiAoaW50KW9mZnNldGNvdW50KQorICAgICAgICAgICAgICBtYXRjaF9jb3VudCA9IDA7CisgICAgICAgICAgY291bnQgPSAoKG1hdGNoX2NvdW50ID09IDApPyAoaW50KW9mZnNldGNvdW50IDogbWF0Y2hfY291bnQgKiAyKSAtIDI7CisgICAgICAgICAgaWYgKGNvdW50ID4gMCkgbWVtbW92ZShvZmZzZXRzICsgMiwgb2Zmc2V0cywgY291bnQgKiBzaXplb2YoUENSRTJfU0laRSkpOworICAgICAgICAgIGlmIChvZmZzZXRjb3VudCA+PSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgb2Zmc2V0c1swXSA9IChpbnQpKGN1cnJlbnRfc3ViamVjdCAtIHN0YXJ0X3N1YmplY3QpOworICAgICAgICAgICAgb2Zmc2V0c1sxXSA9IChpbnQpKHB0ciAtIHN0YXJ0X3N1YmplY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmICgobWItPm1vcHRpb25zICYgUENSRTJfREZBX1NIT1JURVNUKSAhPSAwKSByZXR1cm4gbWF0Y2hfY291bnQ7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyAgICAgIC8qIFRoZXNlIG9wY29kZXMgYWRkIHRvIHRoZSBjdXJyZW50IGxpc3Qgb2Ygc3RhdGVzIHdpdGhvdXQgbG9va2luZworICAgICAgYXQgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLiAqLworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfQUxUOgorICAgICAgZG8geyBjb2RlICs9IEdFVChjb2RlLCAxKTsgfSB3aGlsZSAoKmNvZGUgPT0gT1BfQUxUKTsKKyAgICAgIEFERF9BQ1RJVkUoKGludCkoY29kZSAtIHN0YXJ0X2NvZGUpLCAwKTsKKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfQlJBOgorICAgICAgY2FzZSBPUF9TQlJBOgorICAgICAgZG8KKyAgICAgICAgeworICAgICAgICBBRERfQUNUSVZFKChpbnQpKGNvZGUgLSBzdGFydF9jb2RlICsgMSArIExJTktfU0laRSksIDApOworICAgICAgICBjb2RlICs9IEdFVChjb2RlLCAxKTsKKyAgICAgICAgfQorICAgICAgd2hpbGUgKCpjb2RlID09IE9QX0FMVCk7CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0NCUkE6CisgICAgICBjYXNlIE9QX1NDQlJBOgorICAgICAgQUREX0FDVElWRSgoaW50KShjb2RlIC0gc3RhcnRfY29kZSArIDEgKyBMSU5LX1NJWkUgKyBJTU0yX1NJWkUpLCAgMCk7CisgICAgICBjb2RlICs9IEdFVChjb2RlLCAxKTsKKyAgICAgIHdoaWxlICgqY29kZSA9PSBPUF9BTFQpCisgICAgICAgIHsKKyAgICAgICAgQUREX0FDVElWRSgoaW50KShjb2RlIC0gc3RhcnRfY29kZSArIDEgKyBMSU5LX1NJWkUpLCAgMCk7CisgICAgICAgIGNvZGUgKz0gR0VUKGNvZGUsIDEpOworICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0JSQVpFUk86CisgICAgICBjYXNlIE9QX0JSQU1JTlpFUk86CisgICAgICBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDEsIDApOworICAgICAgY29kZSArPSAxICsgR0VUKGNvZGUsIDIpOworICAgICAgd2hpbGUgKCpjb2RlID09IE9QX0FMVCkgY29kZSArPSBHRVQoY29kZSwgMSk7CisgICAgICBBRERfQUNUSVZFKChpbnQpKGNvZGUgLSBzdGFydF9jb2RlICsgMSArIExJTktfU0laRSksIDApOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBPUF9TS0lQWkVSTzoKKyAgICAgIGNvZGUgKz0gMSArIEdFVChjb2RlLCAyKTsKKyAgICAgIHdoaWxlICgqY29kZSA9PSBPUF9BTFQpIGNvZGUgKz0gR0VUKGNvZGUsIDEpOworICAgICAgQUREX0FDVElWRSgoaW50KShjb2RlIC0gc3RhcnRfY29kZSArIDEgKyBMSU5LX1NJWkUpLCAwKTsKKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfQ0lSQzoKKyAgICAgIGlmIChwdHIgPT0gc3RhcnRfc3ViamVjdCAmJiAobWItPm1vcHRpb25zICYgUENSRTJfTk9UQk9MKSA9PSAwKQorICAgICAgICB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7IH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfQ0lSQ006CisgICAgICBpZiAoKHB0ciA9PSBzdGFydF9zdWJqZWN0ICYmIChtYi0+bW9wdGlvbnMgJiBQQ1JFMl9OT1RCT0wpID09IDApIHx8CisgICAgICAgICAgKChwdHIgIT0gZW5kX3N1YmplY3QgfHwgKG1iLT5wb3B0aW9ucyAmIFBDUkUyX0FMVF9DSVJDVU1GTEVYKSAhPSAwICkKKyAgICAgICAgICAgICYmIFdBU19ORVdMSU5FKHB0cikpKQorICAgICAgICB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7IH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfRU9EOgorICAgICAgaWYgKHB0ciA+PSBlbmRfc3ViamVjdCkKKyAgICAgICAgeworICAgICAgICBpZiAoKG1iLT5tb3B0aW9ucyAmIFBDUkUyX1BBUlRJQUxfSEFSRCkgIT0gMCkKKyAgICAgICAgICBjb3VsZF9jb250aW51ZSA9IFRSVUU7CisgICAgICAgIGVsc2UgeyBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDEsIDApOyB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfU09EOgorICAgICAgaWYgKHB0ciA9PSBzdGFydF9zdWJqZWN0KSB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7IH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfU09NOgorICAgICAgaWYgKHB0ciA9PSBzdGFydF9zdWJqZWN0ICsgc3RhcnRfb2Zmc2V0KSB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7IH0KKyAgICAgIGJyZWFrOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisgICAgICAvKiBUaGVzZSBvcGNvZGVzIGluc3BlY3QgdGhlIG5leHQgc3ViamVjdCBjaGFyYWN0ZXIsIGFuZCBzb21ldGltZXMKKyAgICAgIHRoZSBwcmV2aW91cyBvbmUgYXMgd2VsbCwgYnV0IGRvIG5vdCBoYXZlIGFuIGFyZ3VtZW50LiBUaGUgdmFyaWFibGUKKyAgICAgIGNsZW4gY29udGFpbnMgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYW5kIGlzIHplcm8gaWYgd2UgYXJlCisgICAgICBhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0LiAqLworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfQU5ZOgorICAgICAgaWYgKGNsZW4gPiAwICYmICFJU19ORVdMSU5FKHB0cikpCisgICAgICAgIHsKKyAgICAgICAgaWYgKHB0ciArIDEgPj0gbWItPmVuZF9zdWJqZWN0ICYmCisgICAgICAgICAgICAobWItPm1vcHRpb25zICYgKFBDUkUyX1BBUlRJQUxfSEFSRCkpICE9IDAgJiYKKyAgICAgICAgICAgIE5MQkxPQ0stPm5sdHlwZSA9PSBOTFRZUEVfRklYRUQgJiYKKyAgICAgICAgICAgIE5MQkxPQ0stPm5sbGVuID09IDIgJiYKKyAgICAgICAgICAgIGMgPT0gTkxCTE9DSy0+bmxbMF0pCisgICAgICAgICAgeworICAgICAgICAgIGNvdWxkX2NvbnRpbnVlID0gcGFydGlhbF9uZXdsaW5lID0gVFJVRTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgQUREX05FVyhzdGF0ZV9vZmZzZXQgKyAxLCAwKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfQUxMQU5ZOgorICAgICAgaWYgKGNsZW4gPiAwKQorICAgICAgICB7IEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7IH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfRU9ETjoKKyAgICAgIGlmIChjbGVuID09IDAgJiYgKG1iLT5tb3B0aW9ucyAmIFBDUkUyX1BBUlRJQUxfSEFSRCkgIT0gMCkKKyAgICAgICAgY291bGRfY29udGludWUgPSBUUlVFOworICAgICAgZWxzZSBpZiAoY2xlbiA9PSAwIHx8IChJU19ORVdMSU5FKHB0cikgJiYgcHRyID09IGVuZF9zdWJqZWN0IC0gbWItPm5sbGVuKSkKKyAgICAgICAgeyBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDEsIDApOyB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0RPTEw6CisgICAgICBpZiAoKG1iLT5tb3B0aW9ucyAmIFBDUkUyX05PVEVPTCkgPT0gMCkKKyAgICAgICAgeworICAgICAgICBpZiAoY2xlbiA9PSAwICYmIChtYi0+bW9wdGlvbnMgJiBQQ1JFMl9QQVJUSUFMX0hBUkQpICE9IDApCisgICAgICAgICAgY291bGRfY29udGludWUgPSBUUlVFOworICAgICAgICBlbHNlIGlmIChjbGVuID09IDAgfHwKKyAgICAgICAgICAgICgobWItPnBvcHRpb25zICYgUENSRTJfRE9MTEFSX0VORE9OTFkpID09IDAgJiYgSVNfTkVXTElORShwdHIpICYmCisgICAgICAgICAgICAgICAocHRyID09IGVuZF9zdWJqZWN0IC0gbWItPm5sbGVuKQorICAgICAgICAgICAgKSkKKyAgICAgICAgICB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7IH0KKyAgICAgICAgZWxzZSBpZiAocHRyICsgMSA+PSBtYi0+ZW5kX3N1YmplY3QgJiYKKyAgICAgICAgICAgICAgICAgKG1iLT5tb3B0aW9ucyAmIChQQ1JFMl9QQVJUSUFMX0hBUkR8UENSRTJfUEFSVElBTF9TT0ZUKSkgIT0gMCAmJgorICAgICAgICAgICAgICAgICBOTEJMT0NLLT5ubHR5cGUgPT0gTkxUWVBFX0ZJWEVEICYmCisgICAgICAgICAgICAgICAgIE5MQkxPQ0stPm5sbGVuID09IDIgJiYKKyAgICAgICAgICAgICAgICAgYyA9PSBOTEJMT0NLLT5ubFswXSkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKChtYi0+bW9wdGlvbnMgJiBQQ1JFMl9QQVJUSUFMX0hBUkQpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICByZXNldF9jb3VsZF9jb250aW51ZSA9IFRSVUU7CisgICAgICAgICAgICBBRERfTkVXX0RBVEEoLShzdGF0ZV9vZmZzZXQgKyAxKSwgMCwgMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZSBjb3VsZF9jb250aW51ZSA9IHBhcnRpYWxfbmV3bGluZSA9IFRSVUU7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0RPTExNOgorICAgICAgaWYgKChtYi0+bW9wdGlvbnMgJiBQQ1JFMl9OT1RFT0wpID09IDApCisgICAgICAgIHsKKyAgICAgICAgaWYgKGNsZW4gPT0gMCAmJiAobWItPm1vcHRpb25zICYgUENSRTJfUEFSVElBTF9IQVJEKSAhPSAwKQorICAgICAgICAgIGNvdWxkX2NvbnRpbnVlID0gVFJVRTsKKyAgICAgICAgZWxzZSBpZiAoY2xlbiA9PSAwIHx8CisgICAgICAgICAgICAoKG1iLT5wb3B0aW9ucyAmIFBDUkUyX0RPTExBUl9FTkRPTkxZKSA9PSAwICYmIElTX05FV0xJTkUocHRyKSkpCisgICAgICAgICAgeyBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDEsIDApOyB9CisgICAgICAgIGVsc2UgaWYgKHB0ciArIDEgPj0gbWItPmVuZF9zdWJqZWN0ICYmCisgICAgICAgICAgICAgICAgIChtYi0+bW9wdGlvbnMgJiAoUENSRTJfUEFSVElBTF9IQVJEfFBDUkUyX1BBUlRJQUxfU09GVCkpICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgTkxCTE9DSy0+bmx0eXBlID09IE5MVFlQRV9GSVhFRCAmJgorICAgICAgICAgICAgICAgICBOTEJMT0NLLT5ubGxlbiA9PSAyICYmCisgICAgICAgICAgICAgICAgIGMgPT0gTkxCTE9DSy0+bmxbMF0pCisgICAgICAgICAgeworICAgICAgICAgIGlmICgobWItPm1vcHRpb25zICYgUENSRTJfUEFSVElBTF9IQVJEKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgcmVzZXRfY291bGRfY29udGludWUgPSBUUlVFOworICAgICAgICAgICAgQUREX05FV19EQVRBKC0oc3RhdGVfb2Zmc2V0ICsgMSksIDAsIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgY291bGRfY29udGludWUgPSBwYXJ0aWFsX25ld2xpbmUgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoSVNfTkVXTElORShwdHIpKQorICAgICAgICB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7IH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworICAgICAgY2FzZSBPUF9ESUdJVDoKKyAgICAgIGNhc2UgT1BfV0hJVEVTUEFDRToKKyAgICAgIGNhc2UgT1BfV09SRENIQVI6CisgICAgICBpZiAoY2xlbiA+IDAgJiYgYyA8IDI1NiAmJgorICAgICAgICAgICAgKChjdHlwZXNbY10gJiB0b3B0YWJsZTFbY29kZXZhbHVlXSkgXiB0b3B0YWJsZTJbY29kZXZhbHVlXSkgIT0gMCkKKyAgICAgICAgeyBBRERfTkVXKHN0YXRlX29mZnNldCArIDEsIDApOyB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgICAgIGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6CisgICAgICBjYXNlIE9QX05PVF9XT1JEQ0hBUjoKKyAgICAgIGlmIChjbGVuID4gMCAmJiAoYyA+PSAyNTYgfHwKKyAgICAgICAgICAgICgoY3R5cGVzW2NdICYgdG9wdGFibGUxW2NvZGV2YWx1ZV0pIF4gdG9wdGFibGUyW2NvZGV2YWx1ZV0pICE9IDApKQorICAgICAgICB7IEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7IH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfV09SRF9CT1VOREFSWToKKyAgICAgIGNhc2UgT1BfTk9UX1dPUkRfQk9VTkRBUlk6CisgICAgICAgIHsKKyAgICAgICAgaW50IGxlZnRfd29yZCwgcmlnaHRfd29yZDsKKworICAgICAgICBpZiAocHRyID4gc3RhcnRfc3ViamVjdCkKKyAgICAgICAgICB7CisgICAgICAgICAgUENSRTJfU1BUUiB0ZW1wID0gcHRyIC0gMTsKKyAgICAgICAgICBpZiAodGVtcCA8IG1iLT5zdGFydF91c2VkX3B0cikgbWItPnN0YXJ0X3VzZWRfcHRyID0gdGVtcDsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKKyAgICAgICAgICBpZiAodXRmKSB7IEJBQ0tDSEFSKHRlbXApOyB9CisjZW5kaWYKKyAgICAgICAgICBHRVRDSEFSVEVTVChkLCB0ZW1wKTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgICBpZiAoKG1iLT5wb3B0aW9ucyAmIFBDUkUyX1VDUCkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChkID09ICdfJykgbGVmdF93b3JkID0gVFJVRTsgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGludCBjYXQgPSBVQ0RfQ0FURUdPUlkoZCk7CisgICAgICAgICAgICAgIGxlZnRfd29yZCA9IChjYXQgPT0gdWNwX0wgfHwgY2F0ID09IHVjcF9OKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgIGxlZnRfd29yZCA9IGQgPCAyNTYgJiYgKGN0eXBlc1tkXSAmIGN0eXBlX3dvcmQpICE9IDA7CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGxlZnRfd29yZCA9IEZBTFNFOworCisgICAgICAgIGlmIChjbGVuID4gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKHB0ciA+PSBtYi0+bGFzdF91c2VkX3B0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFBDUkUyX1NQVFIgdGVtcCA9IHB0ciArIDE7CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDMyCisgICAgICAgICAgICBpZiAodXRmKSB7IEZPUldBUkRDSEFSVEVTVCh0ZW1wLCBtYi0+ZW5kX3N1YmplY3QpOyB9CisjZW5kaWYKKyAgICAgICAgICAgIG1iLT5sYXN0X3VzZWRfcHRyID0gdGVtcDsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgICBpZiAoKG1iLT5wb3B0aW9ucyAmIFBDUkUyX1VDUCkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjID09ICdfJykgcmlnaHRfd29yZCA9IFRSVUU7IGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgY2F0ID0gVUNEX0NBVEVHT1JZKGMpOworICAgICAgICAgICAgICByaWdodF93b3JkID0gKGNhdCA9PSB1Y3BfTCB8fCBjYXQgPT0gdWNwX04pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgcmlnaHRfd29yZCA9IGMgPCAyNTYgJiYgKGN0eXBlc1tjXSAmIGN0eXBlX3dvcmQpICE9IDA7CisgICAgICAgICAgfQorICAgICAgICBlbHNlIHJpZ2h0X3dvcmQgPSBGQUxTRTsKKworICAgICAgICBpZiAoKGxlZnRfd29yZCA9PSByaWdodF93b3JkKSA9PSAoY29kZXZhbHVlID09IE9QX05PVF9XT1JEX0JPVU5EQVJZKSkKKyAgICAgICAgICB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7IH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICAvKiBDaGVjayB0aGUgbmV4dCBjaGFyYWN0ZXIgYnkgVW5pY29kZSBwcm9wZXJ0eS4gV2Ugd2lsbCBnZXQgaGVyZSBvbmx5CisgICAgICBpZiB0aGUgc3VwcG9ydCBpcyBpbiB0aGUgYmluYXJ5OyBvdGhlcndpc2UgYSBjb21waWxlLXRpbWUgZXJyb3Igb2NjdXJzLgorICAgICAgKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgY2FzZSBPUF9QUk9QOgorICAgICAgY2FzZSBPUF9OT1RQUk9QOgorICAgICAgaWYgKGNsZW4gPiAwKQorICAgICAgICB7CisgICAgICAgIEJPT0wgT0s7CisgICAgICAgIGNvbnN0IHVpbnQzMl90ICpjcDsKKyAgICAgICAgY29uc3QgdWNkX3JlY29yZCAqIHByb3AgPSBHRVRfVUNEKGMpOworICAgICAgICBzd2l0Y2goY29kZVsxXSkKKyAgICAgICAgICB7CisgICAgICAgICAgY2FzZSBQVF9BTlk6CisgICAgICAgICAgT0sgPSBUUlVFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9MQU1QOgorICAgICAgICAgIE9LID0gcHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0x1IHx8IHByb3AtPmNoYXJ0eXBlID09IHVjcF9MbCB8fAorICAgICAgICAgICAgICAgcHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0x0OworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9HQzoKKyAgICAgICAgICBPSyA9IFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSBjb2RlWzJdOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9QQzoKKyAgICAgICAgICBPSyA9IHByb3AtPmNoYXJ0eXBlID09IGNvZGVbMl07CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX1NDOgorICAgICAgICAgIE9LID0gcHJvcC0+c2NyaXB0ID09IGNvZGVbMl07CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAvKiBUaGVzZSBhcmUgc3BlY2lhbHMgZm9yIGNvbWJpbmF0aW9uIGNhc2VzLiAqLworCisgICAgICAgICAgY2FzZSBQVF9BTE5VTToKKyAgICAgICAgICBPSyA9IFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSB1Y3BfTCB8fAorICAgICAgICAgICAgICAgUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9OOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgLyogUGVybCBzcGFjZSB1c2VkIHRvIGV4Y2x1ZGUgVlQsIGJ1dCBmcm9tIFBlcmwgNS4xOCBpdCBpcyBpbmNsdWRlZCwKKyAgICAgICAgICB3aGljaCBtZWFucyB0aGF0IFBlcmwgc3BhY2UgYW5kIFBPU0lYIHNwYWNlIGFyZSBub3cgaWRlbnRpY2FsLiBQQ1JFCisgICAgICAgICAgd2FzIGNoYW5nZWQgYXQgcmVsZWFzZSA4LjM0LiAqLworCisgICAgICAgICAgY2FzZSBQVF9TUEFDRTogICAgLyogUGVybCBzcGFjZSAqLworICAgICAgICAgIGNhc2UgUFRfUFhTUEFDRTogIC8qIFBPU0lYIHNwYWNlICovCisgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBIU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgICBWU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgICBPSyA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIE9LID0gUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9aOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX1dPUkQ6CisgICAgICAgICAgT0sgPSBQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX0wgfHwKKyAgICAgICAgICAgICAgIFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSB1Y3BfTiB8fAorICAgICAgICAgICAgICAgYyA9PSBDSEFSX1VOREVSU0NPUkU7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX0NMSVNUOgorICAgICAgICAgIGNwID0gUFJJVih1Y2RfY2FzZWxlc3Nfc2V0cykgKyBjb2RlWzJdOworICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoYyA8ICpjcCkgeyBPSyA9IEZBTFNFOyBicmVhazsgfQorICAgICAgICAgICAgaWYgKGMgPT0gKmNwKyspIHsgT0sgPSBUUlVFOyBicmVhazsgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9VQ05DOgorICAgICAgICAgIE9LID0gYyA9PSBDSEFSX0RPTExBUl9TSUdOIHx8IGMgPT0gQ0hBUl9DT01NRVJDSUFMX0FUIHx8CisgICAgICAgICAgICAgICBjID09IENIQVJfR1JBVkVfQUNDRU5UIHx8IChjID49IDB4YTAgJiYgYyA8PSAweGQ3ZmYpIHx8CisgICAgICAgICAgICAgICBjID49IDB4ZTAwMDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIC8qIFNob3VsZCBuZXZlciBvY2N1ciwgYnV0IGtlZXAgY29tcGlsZXJzIGZyb20gZ3J1bWJsaW5nLiAqLworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBPSyA9IGNvZGV2YWx1ZSAhPSBPUF9QUk9QOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICBpZiAoT0sgPT0gKGNvZGV2YWx1ZSA9PSBPUF9QUk9QKSkgeyBBRERfTkVXKHN0YXRlX29mZnNldCArIDMsIDApOyB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworI2VuZGlmCisKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworICAgICAgLyogVGhlc2Ugb3Bjb2RlcyBsaWtld2lzZSBpbnNwZWN0IHRoZSBzdWJqZWN0IGNoYXJhY3RlciwgYnV0IGhhdmUgYW4KKyAgICAgIGFyZ3VtZW50IHRoYXQgaXMgbm90IGEgZGF0YSBjaGFyYWN0ZXIuIEl0IGlzIG9uZSBvZiB0aGVzZSBvcGNvZGVzOgorICAgICAgT1BfQU5ZLCBPUF9BTExBTlksIE9QX0RJR0lULCBPUF9OT1RfRElHSVQsIE9QX1dISVRFU1BBQ0UsIE9QX05PVF9TUEFDRSwKKyAgICAgIE9QX1dPUkRDSEFSLCBPUF9OT1RfV09SRENIQVIuIFRoZSB2YWx1ZSBpcyBsb2FkZWQgaW50byBkLiAqLworCisgICAgICBjYXNlIE9QX1RZUEVQTFVTOgorICAgICAgY2FzZSBPUF9UWVBFTUlOUExVUzoKKyAgICAgIGNhc2UgT1BfVFlQRVBPU1BMVVM6CisgICAgICBjb3VudCA9IGN1cnJlbnRfc3RhdGUtPmNvdW50OyAgLyogQWxyZWFkeSBtYXRjaGVkICovCisgICAgICBpZiAoY291bnQgPiAwKSB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMiwgMCk7IH0KKyAgICAgIGlmIChjbGVuID4gMCkKKyAgICAgICAgeworICAgICAgICBpZiAoZCA9PSBPUF9BTlkgJiYgcHRyICsgMSA+PSBtYi0+ZW5kX3N1YmplY3QgJiYKKyAgICAgICAgICAgIChtYi0+bW9wdGlvbnMgJiAoUENSRTJfUEFSVElBTF9IQVJEKSkgIT0gMCAmJgorICAgICAgICAgICAgTkxCTE9DSy0+bmx0eXBlID09IE5MVFlQRV9GSVhFRCAmJgorICAgICAgICAgICAgTkxCTE9DSy0+bmxsZW4gPT0gMiAmJgorICAgICAgICAgICAgYyA9PSBOTEJMT0NLLT5ubFswXSkKKyAgICAgICAgICB7CisgICAgICAgICAgY291bGRfY29udGludWUgPSBwYXJ0aWFsX25ld2xpbmUgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGMgPj0gMjU2ICYmIGQgIT0gT1BfRElHSVQgJiYgZCAhPSBPUF9XSElURVNQQUNFICYmIGQgIT0gT1BfV09SRENIQVIpIHx8CisgICAgICAgICAgICAoYyA8IDI1NiAmJgorICAgICAgICAgICAgICAoZCAhPSBPUF9BTlkgfHwgIUlTX05FV0xJTkUocHRyKSkgJiYKKyAgICAgICAgICAgICAgKChjdHlwZXNbY10gJiB0b3B0YWJsZTFbZF0pIF4gdG9wdGFibGUyW2RdKSAhPSAwKSkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGNvdW50ID4gMCAmJiBjb2RldmFsdWUgPT0gT1BfVFlQRVBPU1BMVVMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBhY3RpdmVfY291bnQtLTsgICAgICAgICAgICAvKiBSZW1vdmUgbm9uLW1hdGNoIHBvc3NpYmlsaXR5ICovCisgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgQUREX05FVyhzdGF0ZV9vZmZzZXQsIGNvdW50KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfVFlQRVFVRVJZOgorICAgICAgY2FzZSBPUF9UWVBFTUlOUVVFUlk6CisgICAgICBjYXNlIE9QX1RZUEVQT1NRVUVSWToKKyAgICAgIEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMiwgMCk7CisgICAgICBpZiAoY2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgaWYgKGQgPT0gT1BfQU5ZICYmIHB0ciArIDEgPj0gbWItPmVuZF9zdWJqZWN0ICYmCisgICAgICAgICAgICAobWItPm1vcHRpb25zICYgKFBDUkUyX1BBUlRJQUxfSEFSRCkpICE9IDAgJiYKKyAgICAgICAgICAgIE5MQkxPQ0stPm5sdHlwZSA9PSBOTFRZUEVfRklYRUQgJiYKKyAgICAgICAgICAgIE5MQkxPQ0stPm5sbGVuID09IDIgJiYKKyAgICAgICAgICAgIGMgPT0gTkxCTE9DSy0+bmxbMF0pCisgICAgICAgICAgeworICAgICAgICAgIGNvdWxkX2NvbnRpbnVlID0gcGFydGlhbF9uZXdsaW5lID0gVFJVRTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKChjID49IDI1NiAmJiBkICE9IE9QX0RJR0lUICYmIGQgIT0gT1BfV0hJVEVTUEFDRSAmJiBkICE9IE9QX1dPUkRDSEFSKSB8fAorICAgICAgICAgICAgKGMgPCAyNTYgJiYKKyAgICAgICAgICAgICAgKGQgIT0gT1BfQU5ZIHx8ICFJU19ORVdMSU5FKHB0cikpICYmCisgICAgICAgICAgICAgICgoY3R5cGVzW2NdICYgdG9wdGFibGUxW2RdKSBeIHRvcHRhYmxlMltkXSkgIT0gMCkpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChjb2RldmFsdWUgPT0gT1BfVFlQRVBPU1FVRVJZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgYWN0aXZlX2NvdW50LS07ICAgICAgICAgICAgLyogUmVtb3ZlIG5vbi1tYXRjaCBwb3NzaWJpbGl0eSAqLworICAgICAgICAgICAgbmV4dF9hY3RpdmVfc3RhdGUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBBRERfTkVXKHN0YXRlX29mZnNldCArIDIsIDApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBPUF9UWVBFU1RBUjoKKyAgICAgIGNhc2UgT1BfVFlQRU1JTlNUQVI6CisgICAgICBjYXNlIE9QX1RZUEVQT1NTVEFSOgorICAgICAgQUREX0FDVElWRShzdGF0ZV9vZmZzZXQgKyAyLCAwKTsKKyAgICAgIGlmIChjbGVuID4gMCkKKyAgICAgICAgeworICAgICAgICBpZiAoZCA9PSBPUF9BTlkgJiYgcHRyICsgMSA+PSBtYi0+ZW5kX3N1YmplY3QgJiYKKyAgICAgICAgICAgIChtYi0+bW9wdGlvbnMgJiAoUENSRTJfUEFSVElBTF9IQVJEKSkgIT0gMCAmJgorICAgICAgICAgICAgTkxCTE9DSy0+bmx0eXBlID09IE5MVFlQRV9GSVhFRCAmJgorICAgICAgICAgICAgTkxCTE9DSy0+bmxsZW4gPT0gMiAmJgorICAgICAgICAgICAgYyA9PSBOTEJMT0NLLT5ubFswXSkKKyAgICAgICAgICB7CisgICAgICAgICAgY291bGRfY29udGludWUgPSBwYXJ0aWFsX25ld2xpbmUgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGMgPj0gMjU2ICYmIGQgIT0gT1BfRElHSVQgJiYgZCAhPSBPUF9XSElURVNQQUNFICYmIGQgIT0gT1BfV09SRENIQVIpIHx8CisgICAgICAgICAgICAoYyA8IDI1NiAmJgorICAgICAgICAgICAgICAoZCAhPSBPUF9BTlkgfHwgIUlTX05FV0xJTkUocHRyKSkgJiYKKyAgICAgICAgICAgICAgKChjdHlwZXNbY10gJiB0b3B0YWJsZTFbZF0pIF4gdG9wdGFibGUyW2RdKSAhPSAwKSkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGNvZGV2YWx1ZSA9PSBPUF9UWVBFUE9TU1RBUikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgIC8qIFJlbW92ZSBub24tbWF0Y2ggcG9zc2liaWxpdHkgKi8KKyAgICAgICAgICAgIG5leHRfYWN0aXZlX3N0YXRlLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgQUREX05FVyhzdGF0ZV9vZmZzZXQsIDApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBPUF9UWVBFRVhBQ1Q6CisgICAgICBjb3VudCA9IGN1cnJlbnRfc3RhdGUtPmNvdW50OyAgLyogTnVtYmVyIGFscmVhZHkgbWF0Y2hlZCAqLworICAgICAgaWYgKGNsZW4gPiAwKQorICAgICAgICB7CisgICAgICAgIGlmIChkID09IE9QX0FOWSAmJiBwdHIgKyAxID49IG1iLT5lbmRfc3ViamVjdCAmJgorICAgICAgICAgICAgKG1iLT5tb3B0aW9ucyAmIChQQ1JFMl9QQVJUSUFMX0hBUkQpKSAhPSAwICYmCisgICAgICAgICAgICBOTEJMT0NLLT5ubHR5cGUgPT0gTkxUWVBFX0ZJWEVEICYmCisgICAgICAgICAgICBOTEJMT0NLLT5ubGxlbiA9PSAyICYmCisgICAgICAgICAgICBjID09IE5MQkxPQ0stPm5sWzBdKQorICAgICAgICAgIHsKKyAgICAgICAgICBjb3VsZF9jb250aW51ZSA9IHBhcnRpYWxfbmV3bGluZSA9IFRSVUU7CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmICgoYyA+PSAyNTYgJiYgZCAhPSBPUF9ESUdJVCAmJiBkICE9IE9QX1dISVRFU1BBQ0UgJiYgZCAhPSBPUF9XT1JEQ0hBUikgfHwKKyAgICAgICAgICAgIChjIDwgMjU2ICYmCisgICAgICAgICAgICAgIChkICE9IE9QX0FOWSB8fCAhSVNfTkVXTElORShwdHIpKSAmJgorICAgICAgICAgICAgICAoKGN0eXBlc1tjXSAmIHRvcHRhYmxlMVtkXSkgXiB0b3B0YWJsZTJbZF0pICE9IDApKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoKytjb3VudCA+PSAoaW50KUdFVDIoY29kZSwgMSkpCisgICAgICAgICAgICB7IEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgMSArIElNTTJfU0laRSArIDEsIDApOyB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeyBBRERfTkVXKHN0YXRlX29mZnNldCwgY291bnQpOyB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX1RZUEVVUFRPOgorICAgICAgY2FzZSBPUF9UWVBFTUlOVVBUTzoKKyAgICAgIGNhc2UgT1BfVFlQRVBPU1VQVE86CisgICAgICBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDIgKyBJTU0yX1NJWkUsIDApOworICAgICAgY291bnQgPSBjdXJyZW50X3N0YXRlLT5jb3VudDsgIC8qIE51bWJlciBhbHJlYWR5IG1hdGNoZWQgKi8KKyAgICAgIGlmIChjbGVuID4gMCkKKyAgICAgICAgeworICAgICAgICBpZiAoZCA9PSBPUF9BTlkgJiYgcHRyICsgMSA+PSBtYi0+ZW5kX3N1YmplY3QgJiYKKyAgICAgICAgICAgIChtYi0+bW9wdGlvbnMgJiAoUENSRTJfUEFSVElBTF9IQVJEKSkgIT0gMCAmJgorICAgICAgICAgICAgTkxCTE9DSy0+bmx0eXBlID09IE5MVFlQRV9GSVhFRCAmJgorICAgICAgICAgICAgTkxCTE9DSy0+bmxsZW4gPT0gMiAmJgorICAgICAgICAgICAgYyA9PSBOTEJMT0NLLT5ubFswXSkKKyAgICAgICAgICB7CisgICAgICAgICAgY291bGRfY29udGludWUgPSBwYXJ0aWFsX25ld2xpbmUgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKGMgPj0gMjU2ICYmIGQgIT0gT1BfRElHSVQgJiYgZCAhPSBPUF9XSElURVNQQUNFICYmIGQgIT0gT1BfV09SRENIQVIpIHx8CisgICAgICAgICAgICAoYyA8IDI1NiAmJgorICAgICAgICAgICAgICAoZCAhPSBPUF9BTlkgfHwgIUlTX05FV0xJTkUocHRyKSkgJiYKKyAgICAgICAgICAgICAgKChjdHlwZXNbY10gJiB0b3B0YWJsZTFbZF0pIF4gdG9wdGFibGUyW2RdKSAhPSAwKSkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGNvZGV2YWx1ZSA9PSBPUF9UWVBFUE9TVVBUTykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgLyogUmVtb3ZlIG5vbi1tYXRjaCBwb3NzaWJpbGl0eSAqLworICAgICAgICAgICAgbmV4dF9hY3RpdmVfc3RhdGUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoKytjb3VudCA+PSAoaW50KUdFVDIoY29kZSwgMSkpCisgICAgICAgICAgICB7IEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgMiArIElNTTJfU0laRSwgMCk7IH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7IEFERF9ORVcoc3RhdGVfb2Zmc2V0LCBjb3VudCk7IH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworICAgICAgLyogVGhlc2UgYXJlIHZpcnR1YWwgb3Bjb2RlcyB0aGF0IGFyZSB1c2VkIHdoZW4gc29tZXRoaW5nIGxpa2UKKyAgICAgIE9QX1RZUEVQTFVTIGhhcyBPUF9QUk9QLCBPUF9OT1RQUk9QLCBPUF9BTllOTCwgb3IgT1BfRVhUVU5JIGFzIGl0cworICAgICAgYXJndW1lbnQuIEl0IGtlZXBzIHRoZSBjb2RlIGFib3ZlIGZhc3QgZm9yIHRoZSBvdGhlciBjYXNlcy4gVGhlIGFyZ3VtZW50CisgICAgICBpcyBpbiB0aGUgZCB2YXJpYWJsZS4gKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgY2FzZSBPUF9QUk9QX0VYVFJBICsgT1BfVFlQRVBMVVM6CisgICAgICBjYXNlIE9QX1BST1BfRVhUUkEgKyBPUF9UWVBFTUlOUExVUzoKKyAgICAgIGNhc2UgT1BfUFJPUF9FWFRSQSArIE9QX1RZUEVQT1NQTFVTOgorICAgICAgY291bnQgPSBjdXJyZW50X3N0YXRlLT5jb3VudDsgICAgICAgICAgIC8qIEFscmVhZHkgbWF0Y2hlZCAqLworICAgICAgaWYgKGNvdW50ID4gMCkgeyBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDQsIDApOyB9CisgICAgICBpZiAoY2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgQk9PTCBPSzsKKyAgICAgICAgY29uc3QgdWludDMyX3QgKmNwOworICAgICAgICBjb25zdCB1Y2RfcmVjb3JkICogcHJvcCA9IEdFVF9VQ0QoYyk7CisgICAgICAgIHN3aXRjaChjb2RlWzJdKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFBUX0FOWToKKyAgICAgICAgICBPSyA9IFRSVUU7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX0xBTVA6CisgICAgICAgICAgT0sgPSBwcm9wLT5jaGFydHlwZSA9PSB1Y3BfTHUgfHwgcHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0xsIHx8CisgICAgICAgICAgICBwcm9wLT5jaGFydHlwZSA9PSB1Y3BfTHQ7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX0dDOgorICAgICAgICAgIE9LID0gUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IGNvZGVbM107CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX1BDOgorICAgICAgICAgIE9LID0gcHJvcC0+Y2hhcnR5cGUgPT0gY29kZVszXTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFRfU0M6CisgICAgICAgICAgT0sgPSBwcm9wLT5zY3JpcHQgPT0gY29kZVszXTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIC8qIFRoZXNlIGFyZSBzcGVjaWFscyBmb3IgY29tYmluYXRpb24gY2FzZXMuICovCisKKyAgICAgICAgICBjYXNlIFBUX0FMTlVNOgorICAgICAgICAgIE9LID0gUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9MIHx8CisgICAgICAgICAgICAgICBQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX047CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAvKiBQZXJsIHNwYWNlIHVzZWQgdG8gZXhjbHVkZSBWVCwgYnV0IGZyb20gUGVybCA1LjE4IGl0IGlzIGluY2x1ZGVkLAorICAgICAgICAgIHdoaWNoIG1lYW5zIHRoYXQgUGVybCBzcGFjZSBhbmQgUE9TSVggc3BhY2UgYXJlIG5vdyBpZGVudGljYWwuIFBDUkUKKyAgICAgICAgICB3YXMgY2hhbmdlZCBhdCByZWxlYXNlIDguMzQuICovCisKKyAgICAgICAgICBjYXNlIFBUX1NQQUNFOiAgICAvKiBQZXJsIHNwYWNlICovCisgICAgICAgICAgY2FzZSBQVF9QWFNQQUNFOiAgLyogUE9TSVggc3BhY2UgKi8KKyAgICAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIEhTUEFDRV9DQVNFUzoKKyAgICAgICAgICAgIFZTUEFDRV9DQVNFUzoKKyAgICAgICAgICAgIE9LID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgT0sgPSBQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX1o7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFRfV09SRDoKKyAgICAgICAgICBPSyA9IFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSB1Y3BfTCB8fAorICAgICAgICAgICAgICAgUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9OIHx8CisgICAgICAgICAgICAgICBjID09IENIQVJfVU5ERVJTQ09SRTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFRfQ0xJU1Q6CisgICAgICAgICAgY3AgPSBQUklWKHVjZF9jYXNlbGVzc19zZXRzKSArIGNvZGVbM107CisgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjIDwgKmNwKSB7IE9LID0gRkFMU0U7IGJyZWFrOyB9CisgICAgICAgICAgICBpZiAoYyA9PSAqY3ArKykgeyBPSyA9IFRSVUU7IGJyZWFrOyB9CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX1VDTkM6CisgICAgICAgICAgT0sgPSBjID09IENIQVJfRE9MTEFSX1NJR04gfHwgYyA9PSBDSEFSX0NPTU1FUkNJQUxfQVQgfHwKKyAgICAgICAgICAgICAgIGMgPT0gQ0hBUl9HUkFWRV9BQ0NFTlQgfHwgKGMgPj0gMHhhMCAmJiBjIDw9IDB4ZDdmZikgfHwKKyAgICAgICAgICAgICAgIGMgPj0gMHhlMDAwOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgLyogU2hvdWxkIG5ldmVyIG9jY3VyLCBidXQga2VlcCBjb21waWxlcnMgZnJvbSBncnVtYmxpbmcuICovCisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIE9LID0gY29kZXZhbHVlICE9IE9QX1BST1A7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorCisgICAgICAgIGlmIChPSyA9PSAoZCA9PSBPUF9QUk9QKSkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGNvdW50ID4gMCAmJiBjb2RldmFsdWUgPT0gT1BfUFJPUF9FWFRSQSArIE9QX1RZUEVQT1NQTFVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgYWN0aXZlX2NvdW50LS07ICAgICAgICAgICAvKiBSZW1vdmUgbm9uLW1hdGNoIHBvc3NpYmlsaXR5ICovCisgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgQUREX05FVyhzdGF0ZV9vZmZzZXQsIGNvdW50KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfRVhUVU5JX0VYVFJBICsgT1BfVFlQRVBMVVM6CisgICAgICBjYXNlIE9QX0VYVFVOSV9FWFRSQSArIE9QX1RZUEVNSU5QTFVTOgorICAgICAgY2FzZSBPUF9FWFRVTklfRVhUUkEgKyBPUF9UWVBFUE9TUExVUzoKKyAgICAgIGNvdW50ID0gY3VycmVudF9zdGF0ZS0+Y291bnQ7ICAvKiBBbHJlYWR5IG1hdGNoZWQgKi8KKyAgICAgIGlmIChjb3VudCA+IDApIHsgQUREX0FDVElWRShzdGF0ZV9vZmZzZXQgKyAyLCAwKTsgfQorICAgICAgaWYgKGNsZW4gPiAwKQorICAgICAgICB7CisgICAgICAgIGludCBsZ2IsIHJnYjsKKyAgICAgICAgUENSRTJfU1BUUiBucHRyID0gcHRyICsgY2xlbjsKKyAgICAgICAgaW50IG5jb3VudCA9IDA7CisgICAgICAgIGlmIChjb3VudCA+IDAgJiYgY29kZXZhbHVlID09IE9QX0VYVFVOSV9FWFRSQSArIE9QX1RZUEVQT1NQTFVTKQorICAgICAgICAgIHsKKyAgICAgICAgICBhY3RpdmVfY291bnQtLTsgICAgICAgICAgIC8qIFJlbW92ZSBub24tbWF0Y2ggcG9zc2liaWxpdHkgKi8KKyAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgIH0KKyAgICAgICAgbGdiID0gVUNEX0dSQVBIQlJFQUsoYyk7CisgICAgICAgIHdoaWxlIChucHRyIDwgZW5kX3N1YmplY3QpCisgICAgICAgICAgeworICAgICAgICAgIGRsZW4gPSAxOworICAgICAgICAgIGlmICghdXRmKSBkID0gKm5wdHI7IGVsc2UgeyBHRVRDSEFSTEVOKGQsIG5wdHIsIGRsZW4pOyB9CisgICAgICAgICAgcmdiID0gVUNEX0dSQVBIQlJFQUsoZCk7CisgICAgICAgICAgaWYgKChQUklWKHVjcF9nYnRhYmxlKVtsZ2JdICYgKDEgPDwgcmdiKSkgPT0gMCkgYnJlYWs7CisgICAgICAgICAgbmNvdW50Kys7CisgICAgICAgICAgbGdiID0gcmdiOworICAgICAgICAgIG5wdHIgKz0gZGxlbjsKKyAgICAgICAgICB9CisgICAgICAgIGNvdW50Kys7CisgICAgICAgIEFERF9ORVdfREFUQSgtc3RhdGVfb2Zmc2V0LCBjb3VudCwgbmNvdW50KTsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0FOWU5MX0VYVFJBICsgT1BfVFlQRVBMVVM6CisgICAgICBjYXNlIE9QX0FOWU5MX0VYVFJBICsgT1BfVFlQRU1JTlBMVVM6CisgICAgICBjYXNlIE9QX0FOWU5MX0VYVFJBICsgT1BfVFlQRVBPU1BMVVM6CisgICAgICBjb3VudCA9IGN1cnJlbnRfc3RhdGUtPmNvdW50OyAgLyogQWxyZWFkeSBtYXRjaGVkICovCisgICAgICBpZiAoY291bnQgPiAwKSB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMiwgMCk7IH0KKyAgICAgIGlmIChjbGVuID4gMCkKKyAgICAgICAgeworICAgICAgICBpbnQgbmNvdW50ID0gMDsKKyAgICAgICAgc3dpdGNoIChjKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIENIQVJfVlQ6CisgICAgICAgICAgY2FzZSBDSEFSX0ZGOgorICAgICAgICAgIGNhc2UgQ0hBUl9ORUw6CisjaWZuZGVmIEVCQ0RJQworICAgICAgICAgIGNhc2UgMHgyMDI4OgorICAgICAgICAgIGNhc2UgMHgyMDI5OgorI2VuZGlmICAvKiBOb3QgRUJDRElDICovCisgICAgICAgICAgaWYgKG1iLT5ic3JfY29udmVudGlvbiA9PSBQQ1JFMl9CU1JfQU5ZQ1JMRikgYnJlYWs7CisgICAgICAgICAgZ290byBBTllOTDAxOworCisgICAgICAgICAgY2FzZSBDSEFSX0NSOgorICAgICAgICAgIGlmIChwdHIgKyAxIDwgZW5kX3N1YmplY3QgJiYgVUNIQVIyMVRFU1QocHRyICsgMSkgPT0gQ0hBUl9MRikgbmNvdW50ID0gMTsKKyAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKworICAgICAgICAgIEFOWU5MMDE6CisgICAgICAgICAgY2FzZSBDSEFSX0xGOgorICAgICAgICAgIGlmIChjb3VudCA+IDAgJiYgY29kZXZhbHVlID09IE9QX0FOWU5MX0VYVFJBICsgT1BfVFlQRVBPU1BMVVMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBhY3RpdmVfY291bnQtLTsgICAgICAgICAgIC8qIFJlbW92ZSBub24tbWF0Y2ggcG9zc2liaWxpdHkgKi8KKyAgICAgICAgICAgIG5leHRfYWN0aXZlX3N0YXRlLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICBBRERfTkVXX0RBVEEoLXN0YXRlX29mZnNldCwgY291bnQsIG5jb3VudCk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBPUF9WU1BBQ0VfRVhUUkEgKyBPUF9UWVBFUExVUzoKKyAgICAgIGNhc2UgT1BfVlNQQUNFX0VYVFJBICsgT1BfVFlQRU1JTlBMVVM6CisgICAgICBjYXNlIE9QX1ZTUEFDRV9FWFRSQSArIE9QX1RZUEVQT1NQTFVTOgorICAgICAgY291bnQgPSBjdXJyZW50X3N0YXRlLT5jb3VudDsgIC8qIEFscmVhZHkgbWF0Y2hlZCAqLworICAgICAgaWYgKGNvdW50ID4gMCkgeyBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDIsIDApOyB9CisgICAgICBpZiAoY2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgQk9PTCBPSzsKKyAgICAgICAgc3dpdGNoIChjKQorICAgICAgICAgIHsKKyAgICAgICAgICBWU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgT0sgPSBUUlVFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBPSyA9IEZBTFNFOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICBpZiAoT0sgPT0gKGQgPT0gT1BfVlNQQUNFKSkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGNvdW50ID4gMCAmJiBjb2RldmFsdWUgPT0gT1BfVlNQQUNFX0VYVFJBICsgT1BfVFlQRVBPU1BMVVMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBhY3RpdmVfY291bnQtLTsgICAgICAgICAgIC8qIFJlbW92ZSBub24tbWF0Y2ggcG9zc2liaWxpdHkgKi8KKyAgICAgICAgICAgIG5leHRfYWN0aXZlX3N0YXRlLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICBBRERfTkVXX0RBVEEoLXN0YXRlX29mZnNldCwgY291bnQsIDApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBPUF9IU1BBQ0VfRVhUUkEgKyBPUF9UWVBFUExVUzoKKyAgICAgIGNhc2UgT1BfSFNQQUNFX0VYVFJBICsgT1BfVFlQRU1JTlBMVVM6CisgICAgICBjYXNlIE9QX0hTUEFDRV9FWFRSQSArIE9QX1RZUEVQT1NQTFVTOgorICAgICAgY291bnQgPSBjdXJyZW50X3N0YXRlLT5jb3VudDsgIC8qIEFscmVhZHkgbWF0Y2hlZCAqLworICAgICAgaWYgKGNvdW50ID4gMCkgeyBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDIsIDApOyB9CisgICAgICBpZiAoY2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgQk9PTCBPSzsKKyAgICAgICAgc3dpdGNoIChjKQorICAgICAgICAgIHsKKyAgICAgICAgICBIU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgT0sgPSBUUlVFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBPSyA9IEZBTFNFOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICBpZiAoT0sgPT0gKGQgPT0gT1BfSFNQQUNFKSkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGNvdW50ID4gMCAmJiBjb2RldmFsdWUgPT0gT1BfSFNQQUNFX0VYVFJBICsgT1BfVFlQRVBPU1BMVVMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBhY3RpdmVfY291bnQtLTsgICAgICAgICAgIC8qIFJlbW92ZSBub24tbWF0Y2ggcG9zc2liaWxpdHkgKi8KKyAgICAgICAgICAgIG5leHRfYWN0aXZlX3N0YXRlLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICBBRERfTkVXX0RBVEEoLXN0YXRlX29mZnNldCwgY291bnQsIDApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgY2FzZSBPUF9QUk9QX0VYVFJBICsgT1BfVFlQRVFVRVJZOgorICAgICAgY2FzZSBPUF9QUk9QX0VYVFJBICsgT1BfVFlQRU1JTlFVRVJZOgorICAgICAgY2FzZSBPUF9QUk9QX0VYVFJBICsgT1BfVFlQRVBPU1FVRVJZOgorICAgICAgY291bnQgPSA0OworICAgICAgZ290byBRUzE7CisKKyAgICAgIGNhc2UgT1BfUFJPUF9FWFRSQSArIE9QX1RZUEVTVEFSOgorICAgICAgY2FzZSBPUF9QUk9QX0VYVFJBICsgT1BfVFlQRU1JTlNUQVI6CisgICAgICBjYXNlIE9QX1BST1BfRVhUUkEgKyBPUF9UWVBFUE9TU1RBUjoKKyAgICAgIGNvdW50ID0gMDsKKworICAgICAgUVMxOgorCisgICAgICBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDQsIDApOworICAgICAgaWYgKGNsZW4gPiAwKQorICAgICAgICB7CisgICAgICAgIEJPT0wgT0s7CisgICAgICAgIGNvbnN0IHVpbnQzMl90ICpjcDsKKyAgICAgICAgY29uc3QgdWNkX3JlY29yZCAqIHByb3AgPSBHRVRfVUNEKGMpOworICAgICAgICBzd2l0Y2goY29kZVsyXSkKKyAgICAgICAgICB7CisgICAgICAgICAgY2FzZSBQVF9BTlk6CisgICAgICAgICAgT0sgPSBUUlVFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9MQU1QOgorICAgICAgICAgIE9LID0gcHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0x1IHx8IHByb3AtPmNoYXJ0eXBlID09IHVjcF9MbCB8fAorICAgICAgICAgICAgcHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0x0OworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9HQzoKKyAgICAgICAgICBPSyA9IFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSBjb2RlWzNdOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9QQzoKKyAgICAgICAgICBPSyA9IHByb3AtPmNoYXJ0eXBlID09IGNvZGVbM107CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX1NDOgorICAgICAgICAgIE9LID0gcHJvcC0+c2NyaXB0ID09IGNvZGVbM107CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAvKiBUaGVzZSBhcmUgc3BlY2lhbHMgZm9yIGNvbWJpbmF0aW9uIGNhc2VzLiAqLworCisgICAgICAgICAgY2FzZSBQVF9BTE5VTToKKyAgICAgICAgICBPSyA9IFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSB1Y3BfTCB8fAorICAgICAgICAgICAgICAgUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9OOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgLyogUGVybCBzcGFjZSB1c2VkIHRvIGV4Y2x1ZGUgVlQsIGJ1dCBmcm9tIFBlcmwgNS4xOCBpdCBpcyBpbmNsdWRlZCwKKyAgICAgICAgICB3aGljaCBtZWFucyB0aGF0IFBlcmwgc3BhY2UgYW5kIFBPU0lYIHNwYWNlIGFyZSBub3cgaWRlbnRpY2FsLiBQQ1JFCisgICAgICAgICAgd2FzIGNoYW5nZWQgYXQgcmVsZWFzZSA4LjM0LiAqLworCisgICAgICAgICAgY2FzZSBQVF9TUEFDRTogICAgLyogUGVybCBzcGFjZSAqLworICAgICAgICAgIGNhc2UgUFRfUFhTUEFDRTogIC8qIFBPU0lYIHNwYWNlICovCisgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBIU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgICBWU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgICBPSyA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIE9LID0gUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9aOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX1dPUkQ6CisgICAgICAgICAgT0sgPSBQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX0wgfHwKKyAgICAgICAgICAgICAgIFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSB1Y3BfTiB8fAorICAgICAgICAgICAgICAgYyA9PSBDSEFSX1VOREVSU0NPUkU7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX0NMSVNUOgorICAgICAgICAgIGNwID0gUFJJVih1Y2RfY2FzZWxlc3Nfc2V0cykgKyBjb2RlWzNdOworICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoYyA8ICpjcCkgeyBPSyA9IEZBTFNFOyBicmVhazsgfQorICAgICAgICAgICAgaWYgKGMgPT0gKmNwKyspIHsgT0sgPSBUUlVFOyBicmVhazsgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9VQ05DOgorICAgICAgICAgIE9LID0gYyA9PSBDSEFSX0RPTExBUl9TSUdOIHx8IGMgPT0gQ0hBUl9DT01NRVJDSUFMX0FUIHx8CisgICAgICAgICAgICAgICBjID09IENIQVJfR1JBVkVfQUNDRU5UIHx8IChjID49IDB4YTAgJiYgYyA8PSAweGQ3ZmYpIHx8CisgICAgICAgICAgICAgICBjID49IDB4ZTAwMDsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIC8qIFNob3VsZCBuZXZlciBvY2N1ciwgYnV0IGtlZXAgY29tcGlsZXJzIGZyb20gZ3J1bWJsaW5nLiAqLworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBPSyA9IGNvZGV2YWx1ZSAhPSBPUF9QUk9QOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICBpZiAoT0sgPT0gKGQgPT0gT1BfUFJPUCkpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChjb2RldmFsdWUgPT0gT1BfUFJPUF9FWFRSQSArIE9QX1RZUEVQT1NTVEFSIHx8CisgICAgICAgICAgICAgIGNvZGV2YWx1ZSA9PSBPUF9QUk9QX0VYVFJBICsgT1BfVFlQRVBPU1FVRVJZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgYWN0aXZlX2NvdW50LS07ICAgICAgICAgICAvKiBSZW1vdmUgbm9uLW1hdGNoIHBvc3NpYmlsaXR5ICovCisgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgIEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgY291bnQsIDApOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBPUF9FWFRVTklfRVhUUkEgKyBPUF9UWVBFUVVFUlk6CisgICAgICBjYXNlIE9QX0VYVFVOSV9FWFRSQSArIE9QX1RZUEVNSU5RVUVSWToKKyAgICAgIGNhc2UgT1BfRVhUVU5JX0VYVFJBICsgT1BfVFlQRVBPU1FVRVJZOgorICAgICAgY291bnQgPSAyOworICAgICAgZ290byBRUzI7CisKKyAgICAgIGNhc2UgT1BfRVhUVU5JX0VYVFJBICsgT1BfVFlQRVNUQVI6CisgICAgICBjYXNlIE9QX0VYVFVOSV9FWFRSQSArIE9QX1RZUEVNSU5TVEFSOgorICAgICAgY2FzZSBPUF9FWFRVTklfRVhUUkEgKyBPUF9UWVBFUE9TU1RBUjoKKyAgICAgIGNvdW50ID0gMDsKKworICAgICAgUVMyOgorCisgICAgICBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDIsIDApOworICAgICAgaWYgKGNsZW4gPiAwKQorICAgICAgICB7CisgICAgICAgIGludCBsZ2IsIHJnYjsKKyAgICAgICAgUENSRTJfU1BUUiBucHRyID0gcHRyICsgY2xlbjsKKyAgICAgICAgaW50IG5jb3VudCA9IDA7CisgICAgICAgIGlmIChjb2RldmFsdWUgPT0gT1BfRVhUVU5JX0VYVFJBICsgT1BfVFlQRVBPU1NUQVIgfHwKKyAgICAgICAgICAgIGNvZGV2YWx1ZSA9PSBPUF9FWFRVTklfRVhUUkEgKyBPUF9UWVBFUE9TUVVFUlkpCisgICAgICAgICAgeworICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgLyogUmVtb3ZlIG5vbi1tYXRjaCBwb3NzaWJpbGl0eSAqLworICAgICAgICAgIG5leHRfYWN0aXZlX3N0YXRlLS07CisgICAgICAgICAgfQorICAgICAgICBsZ2IgPSBVQ0RfR1JBUEhCUkVBSyhjKTsKKyAgICAgICAgd2hpbGUgKG5wdHIgPCBlbmRfc3ViamVjdCkKKyAgICAgICAgICB7CisgICAgICAgICAgZGxlbiA9IDE7CisgICAgICAgICAgaWYgKCF1dGYpIGQgPSAqbnB0cjsgZWxzZSB7IEdFVENIQVJMRU4oZCwgbnB0ciwgZGxlbik7IH0KKyAgICAgICAgICByZ2IgPSBVQ0RfR1JBUEhCUkVBSyhkKTsKKyAgICAgICAgICBpZiAoKFBSSVYodWNwX2didGFibGUpW2xnYl0gJiAoMSA8PCByZ2IpKSA9PSAwKSBicmVhazsKKyAgICAgICAgICBuY291bnQrKzsKKyAgICAgICAgICBsZ2IgPSByZ2I7CisgICAgICAgICAgbnB0ciArPSBkbGVuOworICAgICAgICAgIH0KKyAgICAgICAgQUREX05FV19EQVRBKC0oc3RhdGVfb2Zmc2V0ICsgY291bnQpLCAwLCBuY291bnQpOworICAgICAgICB9CisgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfQU5ZTkxfRVhUUkEgKyBPUF9UWVBFUVVFUlk6CisgICAgICBjYXNlIE9QX0FOWU5MX0VYVFJBICsgT1BfVFlQRU1JTlFVRVJZOgorICAgICAgY2FzZSBPUF9BTllOTF9FWFRSQSArIE9QX1RZUEVQT1NRVUVSWToKKyAgICAgIGNvdW50ID0gMjsKKyAgICAgIGdvdG8gUVMzOworCisgICAgICBjYXNlIE9QX0FOWU5MX0VYVFJBICsgT1BfVFlQRVNUQVI6CisgICAgICBjYXNlIE9QX0FOWU5MX0VYVFJBICsgT1BfVFlQRU1JTlNUQVI6CisgICAgICBjYXNlIE9QX0FOWU5MX0VYVFJBICsgT1BfVFlQRVBPU1NUQVI6CisgICAgICBjb3VudCA9IDA7CisKKyAgICAgIFFTMzoKKyAgICAgIEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMiwgMCk7CisgICAgICBpZiAoY2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgaW50IG5jb3VudCA9IDA7CisgICAgICAgIHN3aXRjaCAoYykKKyAgICAgICAgICB7CisgICAgICAgICAgY2FzZSBDSEFSX1ZUOgorICAgICAgICAgIGNhc2UgQ0hBUl9GRjoKKyAgICAgICAgICBjYXNlIENIQVJfTkVMOgorI2lmbmRlZiBFQkNESUMKKyAgICAgICAgICBjYXNlIDB4MjAyODoKKyAgICAgICAgICBjYXNlIDB4MjAyOToKKyNlbmRpZiAgLyogTm90IEVCQ0RJQyAqLworICAgICAgICAgIGlmIChtYi0+YnNyX2NvbnZlbnRpb24gPT0gUENSRTJfQlNSX0FOWUNSTEYpIGJyZWFrOworICAgICAgICAgIGdvdG8gQU5ZTkwwMjsKKworICAgICAgICAgIGNhc2UgQ0hBUl9DUjoKKyAgICAgICAgICBpZiAocHRyICsgMSA8IGVuZF9zdWJqZWN0ICYmIFVDSEFSMjFURVNUKHB0ciArIDEpID09IENIQVJfTEYpIG5jb3VudCA9IDE7CisgICAgICAgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICAgICAgICBBTllOTDAyOgorICAgICAgICAgIGNhc2UgQ0hBUl9MRjoKKyAgICAgICAgICBpZiAoY29kZXZhbHVlID09IE9QX0FOWU5MX0VYVFJBICsgT1BfVFlQRVBPU1NUQVIgfHwKKyAgICAgICAgICAgICAgY29kZXZhbHVlID09IE9QX0FOWU5MX0VYVFJBICsgT1BfVFlQRVBPU1FVRVJZKQorICAgICAgICAgICAgeworICAgICAgICAgICAgYWN0aXZlX2NvdW50LS07ICAgICAgICAgICAvKiBSZW1vdmUgbm9uLW1hdGNoIHBvc3NpYmlsaXR5ICovCisgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgIEFERF9ORVdfREFUQSgtKHN0YXRlX29mZnNldCArIChpbnQpY291bnQpLCAwLCBuY291bnQpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfVlNQQUNFX0VYVFJBICsgT1BfVFlQRVFVRVJZOgorICAgICAgY2FzZSBPUF9WU1BBQ0VfRVhUUkEgKyBPUF9UWVBFTUlOUVVFUlk6CisgICAgICBjYXNlIE9QX1ZTUEFDRV9FWFRSQSArIE9QX1RZUEVQT1NRVUVSWToKKyAgICAgIGNvdW50ID0gMjsKKyAgICAgIGdvdG8gUVM0OworCisgICAgICBjYXNlIE9QX1ZTUEFDRV9FWFRSQSArIE9QX1RZUEVTVEFSOgorICAgICAgY2FzZSBPUF9WU1BBQ0VfRVhUUkEgKyBPUF9UWVBFTUlOU1RBUjoKKyAgICAgIGNhc2UgT1BfVlNQQUNFX0VYVFJBICsgT1BfVFlQRVBPU1NUQVI6CisgICAgICBjb3VudCA9IDA7CisKKyAgICAgIFFTNDoKKyAgICAgIEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMiwgMCk7CisgICAgICBpZiAoY2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgQk9PTCBPSzsKKyAgICAgICAgc3dpdGNoIChjKQorICAgICAgICAgIHsKKyAgICAgICAgICBWU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgT0sgPSBUUlVFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBPSyA9IEZBTFNFOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKE9LID09IChkID09IE9QX1ZTUEFDRSkpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChjb2RldmFsdWUgPT0gT1BfVlNQQUNFX0VYVFJBICsgT1BfVFlQRVBPU1NUQVIgfHwKKyAgICAgICAgICAgICAgY29kZXZhbHVlID09IE9QX1ZTUEFDRV9FWFRSQSArIE9QX1RZUEVQT1NRVUVSWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgLyogUmVtb3ZlIG5vbi1tYXRjaCBwb3NzaWJpbGl0eSAqLworICAgICAgICAgICAgbmV4dF9hY3RpdmVfc3RhdGUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBBRERfTkVXX0RBVEEoLShzdGF0ZV9vZmZzZXQgKyAoaW50KWNvdW50KSwgMCwgMCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0hTUEFDRV9FWFRSQSArIE9QX1RZUEVRVUVSWToKKyAgICAgIGNhc2UgT1BfSFNQQUNFX0VYVFJBICsgT1BfVFlQRU1JTlFVRVJZOgorICAgICAgY2FzZSBPUF9IU1BBQ0VfRVhUUkEgKyBPUF9UWVBFUE9TUVVFUlk6CisgICAgICBjb3VudCA9IDI7CisgICAgICBnb3RvIFFTNTsKKworICAgICAgY2FzZSBPUF9IU1BBQ0VfRVhUUkEgKyBPUF9UWVBFU1RBUjoKKyAgICAgIGNhc2UgT1BfSFNQQUNFX0VYVFJBICsgT1BfVFlQRU1JTlNUQVI6CisgICAgICBjYXNlIE9QX0hTUEFDRV9FWFRSQSArIE9QX1RZUEVQT1NTVEFSOgorICAgICAgY291bnQgPSAwOworCisgICAgICBRUzU6CisgICAgICBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDIsIDApOworICAgICAgaWYgKGNsZW4gPiAwKQorICAgICAgICB7CisgICAgICAgIEJPT0wgT0s7CisgICAgICAgIHN3aXRjaCAoYykKKyAgICAgICAgICB7CisgICAgICAgICAgSFNQQUNFX0NBU0VTOgorICAgICAgICAgIE9LID0gVFJVRTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgT0sgPSBGQUxTRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgaWYgKE9LID09IChkID09IE9QX0hTUEFDRSkpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChjb2RldmFsdWUgPT0gT1BfSFNQQUNFX0VYVFJBICsgT1BfVFlQRVBPU1NUQVIgfHwKKyAgICAgICAgICAgICAgY29kZXZhbHVlID09IE9QX0hTUEFDRV9FWFRSQSArIE9QX1RZUEVQT1NRVUVSWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgLyogUmVtb3ZlIG5vbi1tYXRjaCBwb3NzaWJpbGl0eSAqLworICAgICAgICAgICAgbmV4dF9hY3RpdmVfc3RhdGUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBBRERfTkVXX0RBVEEoLShzdGF0ZV9vZmZzZXQgKyAoaW50KWNvdW50KSwgMCwgMCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBjYXNlIE9QX1BST1BfRVhUUkEgKyBPUF9UWVBFRVhBQ1Q6CisgICAgICBjYXNlIE9QX1BST1BfRVhUUkEgKyBPUF9UWVBFVVBUTzoKKyAgICAgIGNhc2UgT1BfUFJPUF9FWFRSQSArIE9QX1RZUEVNSU5VUFRPOgorICAgICAgY2FzZSBPUF9QUk9QX0VYVFJBICsgT1BfVFlQRVBPU1VQVE86CisgICAgICBpZiAoY29kZXZhbHVlICE9IE9QX1BST1BfRVhUUkEgKyBPUF9UWVBFRVhBQ1QpCisgICAgICAgIHsgQUREX0FDVElWRShzdGF0ZV9vZmZzZXQgKyAxICsgSU1NMl9TSVpFICsgMywgMCk7IH0KKyAgICAgIGNvdW50ID0gY3VycmVudF9zdGF0ZS0+Y291bnQ7ICAvKiBOdW1iZXIgYWxyZWFkeSBtYXRjaGVkICovCisgICAgICBpZiAoY2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgQk9PTCBPSzsKKyAgICAgICAgY29uc3QgdWludDMyX3QgKmNwOworICAgICAgICBjb25zdCB1Y2RfcmVjb3JkICogcHJvcCA9IEdFVF9VQ0QoYyk7CisgICAgICAgIHN3aXRjaChjb2RlWzEgKyBJTU0yX1NJWkUgKyAxXSkKKyAgICAgICAgICB7CisgICAgICAgICAgY2FzZSBQVF9BTlk6CisgICAgICAgICAgT0sgPSBUUlVFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9MQU1QOgorICAgICAgICAgIE9LID0gcHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0x1IHx8IHByb3AtPmNoYXJ0eXBlID09IHVjcF9MbCB8fAorICAgICAgICAgICAgcHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0x0OworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9HQzoKKyAgICAgICAgICBPSyA9IFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSBjb2RlWzEgKyBJTU0yX1NJWkUgKyAyXTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFRfUEM6CisgICAgICAgICAgT0sgPSBwcm9wLT5jaGFydHlwZSA9PSBjb2RlWzEgKyBJTU0yX1NJWkUgKyAyXTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFRfU0M6CisgICAgICAgICAgT0sgPSBwcm9wLT5zY3JpcHQgPT0gY29kZVsxICsgSU1NMl9TSVpFICsgMl07CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAvKiBUaGVzZSBhcmUgc3BlY2lhbHMgZm9yIGNvbWJpbmF0aW9uIGNhc2VzLiAqLworCisgICAgICAgICAgY2FzZSBQVF9BTE5VTToKKyAgICAgICAgICBPSyA9IFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSB1Y3BfTCB8fAorICAgICAgICAgICAgICAgUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9OOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgLyogUGVybCBzcGFjZSB1c2VkIHRvIGV4Y2x1ZGUgVlQsIGJ1dCBmcm9tIFBlcmwgNS4xOCBpdCBpcyBpbmNsdWRlZCwKKyAgICAgICAgICB3aGljaCBtZWFucyB0aGF0IFBlcmwgc3BhY2UgYW5kIFBPU0lYIHNwYWNlIGFyZSBub3cgaWRlbnRpY2FsLiBQQ1JFCisgICAgICAgICAgd2FzIGNoYW5nZWQgYXQgcmVsZWFzZSA4LjM0LiAqLworCisgICAgICAgICAgY2FzZSBQVF9TUEFDRTogICAgLyogUGVybCBzcGFjZSAqLworICAgICAgICAgIGNhc2UgUFRfUFhTUEFDRTogIC8qIFBPU0lYIHNwYWNlICovCisgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBIU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgICBWU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgICBPSyA9IFRSVUU7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIE9LID0gUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9aOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX1dPUkQ6CisgICAgICAgICAgT0sgPSBQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX0wgfHwKKyAgICAgICAgICAgICAgIFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSA9PSB1Y3BfTiB8fAorICAgICAgICAgICAgICAgYyA9PSBDSEFSX1VOREVSU0NPUkU7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX0NMSVNUOgorICAgICAgICAgIGNwID0gUFJJVih1Y2RfY2FzZWxlc3Nfc2V0cykgKyBjb2RlWzEgKyBJTU0yX1NJWkUgKyAyXTsKKyAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGMgPCAqY3ApIHsgT0sgPSBGQUxTRTsgYnJlYWs7IH0KKyAgICAgICAgICAgIGlmIChjID09ICpjcCsrKSB7IE9LID0gVFJVRTsgYnJlYWs7IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFRfVUNOQzoKKyAgICAgICAgICBPSyA9IGMgPT0gQ0hBUl9ET0xMQVJfU0lHTiB8fCBjID09IENIQVJfQ09NTUVSQ0lBTF9BVCB8fAorICAgICAgICAgICAgICAgYyA9PSBDSEFSX0dSQVZFX0FDQ0VOVCB8fCAoYyA+PSAweGEwICYmIGMgPD0gMHhkN2ZmKSB8fAorICAgICAgICAgICAgICAgYyA+PSAweGUwMDA7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAvKiBTaG91bGQgbmV2ZXIgb2NjdXIsIGJ1dCBrZWVwIGNvbXBpbGVycyBmcm9tIGdydW1ibGluZy4gKi8KKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgT0sgPSBjb2RldmFsdWUgIT0gT1BfUFJPUDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgaWYgKE9LID09IChkID09IE9QX1BST1ApKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoY29kZXZhbHVlID09IE9QX1BST1BfRVhUUkEgKyBPUF9UWVBFUE9TVVBUTykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgLyogUmVtb3ZlIG5vbi1tYXRjaCBwb3NzaWJpbGl0eSAqLworICAgICAgICAgICAgbmV4dF9hY3RpdmVfc3RhdGUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoKytjb3VudCA+PSAoaW50KUdFVDIoY29kZSwgMSkpCisgICAgICAgICAgICB7IEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgMSArIElNTTJfU0laRSArIDMsIDApOyB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeyBBRERfTkVXKHN0YXRlX29mZnNldCwgY291bnQpOyB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0VYVFVOSV9FWFRSQSArIE9QX1RZUEVFWEFDVDoKKyAgICAgIGNhc2UgT1BfRVhUVU5JX0VYVFJBICsgT1BfVFlQRVVQVE86CisgICAgICBjYXNlIE9QX0VYVFVOSV9FWFRSQSArIE9QX1RZUEVNSU5VUFRPOgorICAgICAgY2FzZSBPUF9FWFRVTklfRVhUUkEgKyBPUF9UWVBFUE9TVVBUTzoKKyAgICAgIGlmIChjb2RldmFsdWUgIT0gT1BfRVhUVU5JX0VYVFJBICsgT1BfVFlQRUVYQUNUKQorICAgICAgICB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMiArIElNTTJfU0laRSwgMCk7IH0KKyAgICAgIGNvdW50ID0gY3VycmVudF9zdGF0ZS0+Y291bnQ7ICAvKiBOdW1iZXIgYWxyZWFkeSBtYXRjaGVkICovCisgICAgICBpZiAoY2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgaW50IGxnYiwgcmdiOworICAgICAgICBQQ1JFMl9TUFRSIG5wdHIgPSBwdHIgKyBjbGVuOworICAgICAgICBpbnQgbmNvdW50ID0gMDsKKyAgICAgICAgaWYgKGNvZGV2YWx1ZSA9PSBPUF9FWFRVTklfRVhUUkEgKyBPUF9UWVBFUE9TVVBUTykKKyAgICAgICAgICB7CisgICAgICAgICAgYWN0aXZlX2NvdW50LS07ICAgICAgICAgICAvKiBSZW1vdmUgbm9uLW1hdGNoIHBvc3NpYmlsaXR5ICovCisgICAgICAgICAgbmV4dF9hY3RpdmVfc3RhdGUtLTsKKyAgICAgICAgICB9CisgICAgICAgIGxnYiA9IFVDRF9HUkFQSEJSRUFLKGMpOworICAgICAgICB3aGlsZSAobnB0ciA8IGVuZF9zdWJqZWN0KQorICAgICAgICAgIHsKKyAgICAgICAgICBkbGVuID0gMTsKKyAgICAgICAgICBpZiAoIXV0ZikgZCA9ICpucHRyOyBlbHNlIHsgR0VUQ0hBUkxFTihkLCBucHRyLCBkbGVuKTsgfQorICAgICAgICAgIHJnYiA9IFVDRF9HUkFQSEJSRUFLKGQpOworICAgICAgICAgIGlmICgoUFJJVih1Y3BfZ2J0YWJsZSlbbGdiXSAmICgxIDw8IHJnYikpID09IDApIGJyZWFrOworICAgICAgICAgIG5jb3VudCsrOworICAgICAgICAgIGxnYiA9IHJnYjsKKyAgICAgICAgICBucHRyICs9IGRsZW47CisgICAgICAgICAgfQorICAgICAgICBpZiAobnB0ciA+PSBlbmRfc3ViamVjdCAmJiAobWItPm1vcHRpb25zICYgUENSRTJfUEFSVElBTF9IQVJEKSAhPSAwKQorICAgICAgICAgICAgcmVzZXRfY291bGRfY29udGludWUgPSBUUlVFOworICAgICAgICBpZiAoKytjb3VudCA+PSAoaW50KUdFVDIoY29kZSwgMSkpCisgICAgICAgICAgeyBBRERfTkVXX0RBVEEoLShzdGF0ZV9vZmZzZXQgKyAyICsgSU1NMl9TSVpFKSwgMCwgbmNvdW50KTsgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeyBBRERfTkVXX0RBVEEoLXN0YXRlX29mZnNldCwgY291bnQsIG5jb3VudCk7IH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0FOWU5MX0VYVFJBICsgT1BfVFlQRUVYQUNUOgorICAgICAgY2FzZSBPUF9BTllOTF9FWFRSQSArIE9QX1RZUEVVUFRPOgorICAgICAgY2FzZSBPUF9BTllOTF9FWFRSQSArIE9QX1RZUEVNSU5VUFRPOgorICAgICAgY2FzZSBPUF9BTllOTF9FWFRSQSArIE9QX1RZUEVQT1NVUFRPOgorICAgICAgaWYgKGNvZGV2YWx1ZSAhPSBPUF9BTllOTF9FWFRSQSArIE9QX1RZUEVFWEFDVCkKKyAgICAgICAgeyBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIDIgKyBJTU0yX1NJWkUsIDApOyB9CisgICAgICBjb3VudCA9IGN1cnJlbnRfc3RhdGUtPmNvdW50OyAgLyogTnVtYmVyIGFscmVhZHkgbWF0Y2hlZCAqLworICAgICAgaWYgKGNsZW4gPiAwKQorICAgICAgICB7CisgICAgICAgIGludCBuY291bnQgPSAwOworICAgICAgICBzd2l0Y2ggKGMpCisgICAgICAgICAgeworICAgICAgICAgIGNhc2UgQ0hBUl9WVDoKKyAgICAgICAgICBjYXNlIENIQVJfRkY6CisgICAgICAgICAgY2FzZSBDSEFSX05FTDoKKyNpZm5kZWYgRUJDRElDCisgICAgICAgICAgY2FzZSAweDIwMjg6CisgICAgICAgICAgY2FzZSAweDIwMjk6CisjZW5kaWYgIC8qIE5vdCBFQkNESUMgKi8KKyAgICAgICAgICBpZiAobWItPmJzcl9jb252ZW50aW9uID09IFBDUkUyX0JTUl9BTllDUkxGKSBicmVhazsKKyAgICAgICAgICBnb3RvIEFOWU5MMDM7CisKKyAgICAgICAgICBjYXNlIENIQVJfQ1I6CisgICAgICAgICAgaWYgKHB0ciArIDEgPCBlbmRfc3ViamVjdCAmJiBVQ0hBUjIxVEVTVChwdHIgKyAxKSA9PSBDSEFSX0xGKSBuY291bnQgPSAxOworICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworCisgICAgICAgICAgQU5ZTkwwMzoKKyAgICAgICAgICBjYXNlIENIQVJfTEY6CisgICAgICAgICAgaWYgKGNvZGV2YWx1ZSA9PSBPUF9BTllOTF9FWFRSQSArIE9QX1RZUEVQT1NVUFRPKQorICAgICAgICAgICAgeworICAgICAgICAgICAgYWN0aXZlX2NvdW50LS07ICAgICAgICAgICAvKiBSZW1vdmUgbm9uLW1hdGNoIHBvc3NpYmlsaXR5ICovCisgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmICgrK2NvdW50ID49IChpbnQpR0VUMihjb2RlLCAxKSkKKyAgICAgICAgICAgIHsgQUREX05FV19EQVRBKC0oc3RhdGVfb2Zmc2V0ICsgMiArIElNTTJfU0laRSksIDAsIG5jb3VudCk7IH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7IEFERF9ORVdfREFUQSgtc3RhdGVfb2Zmc2V0LCBjb3VudCwgbmNvdW50KTsgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfVlNQQUNFX0VYVFJBICsgT1BfVFlQRUVYQUNUOgorICAgICAgY2FzZSBPUF9WU1BBQ0VfRVhUUkEgKyBPUF9UWVBFVVBUTzoKKyAgICAgIGNhc2UgT1BfVlNQQUNFX0VYVFJBICsgT1BfVFlQRU1JTlVQVE86CisgICAgICBjYXNlIE9QX1ZTUEFDRV9FWFRSQSArIE9QX1RZUEVQT1NVUFRPOgorICAgICAgaWYgKGNvZGV2YWx1ZSAhPSBPUF9WU1BBQ0VfRVhUUkEgKyBPUF9UWVBFRVhBQ1QpCisgICAgICAgIHsgQUREX0FDVElWRShzdGF0ZV9vZmZzZXQgKyAyICsgSU1NMl9TSVpFLCAwKTsgfQorICAgICAgY291bnQgPSBjdXJyZW50X3N0YXRlLT5jb3VudDsgIC8qIE51bWJlciBhbHJlYWR5IG1hdGNoZWQgKi8KKyAgICAgIGlmIChjbGVuID4gMCkKKyAgICAgICAgeworICAgICAgICBCT09MIE9LOworICAgICAgICBzd2l0Y2ggKGMpCisgICAgICAgICAgeworICAgICAgICAgIFZTUEFDRV9DQVNFUzoKKyAgICAgICAgICBPSyA9IFRSVUU7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIE9LID0gRkFMU0U7CisgICAgICAgICAgfQorCisgICAgICAgIGlmIChPSyA9PSAoZCA9PSBPUF9WU1BBQ0UpKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoY29kZXZhbHVlID09IE9QX1ZTUEFDRV9FWFRSQSArIE9QX1RZUEVQT1NVUFRPKQorICAgICAgICAgICAgeworICAgICAgICAgICAgYWN0aXZlX2NvdW50LS07ICAgICAgICAgICAvKiBSZW1vdmUgbm9uLW1hdGNoIHBvc3NpYmlsaXR5ICovCisgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmICgrK2NvdW50ID49IChpbnQpR0VUMihjb2RlLCAxKSkKKyAgICAgICAgICAgIHsgQUREX05FV19EQVRBKC0oc3RhdGVfb2Zmc2V0ICsgMiArIElNTTJfU0laRSksIDAsIDApOyB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeyBBRERfTkVXX0RBVEEoLXN0YXRlX29mZnNldCwgY291bnQsIDApOyB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0hTUEFDRV9FWFRSQSArIE9QX1RZUEVFWEFDVDoKKyAgICAgIGNhc2UgT1BfSFNQQUNFX0VYVFJBICsgT1BfVFlQRVVQVE86CisgICAgICBjYXNlIE9QX0hTUEFDRV9FWFRSQSArIE9QX1RZUEVNSU5VUFRPOgorICAgICAgY2FzZSBPUF9IU1BBQ0VfRVhUUkEgKyBPUF9UWVBFUE9TVVBUTzoKKyAgICAgIGlmIChjb2RldmFsdWUgIT0gT1BfSFNQQUNFX0VYVFJBICsgT1BfVFlQRUVYQUNUKQorICAgICAgICB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgMiArIElNTTJfU0laRSwgMCk7IH0KKyAgICAgIGNvdW50ID0gY3VycmVudF9zdGF0ZS0+Y291bnQ7ICAvKiBOdW1iZXIgYWxyZWFkeSBtYXRjaGVkICovCisgICAgICBpZiAoY2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgQk9PTCBPSzsKKyAgICAgICAgc3dpdGNoIChjKQorICAgICAgICAgIHsKKyAgICAgICAgICBIU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgT0sgPSBUUlVFOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBPSyA9IEZBTFNFOworICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKworICAgICAgICBpZiAoT0sgPT0gKGQgPT0gT1BfSFNQQUNFKSkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGNvZGV2YWx1ZSA9PSBPUF9IU1BBQ0VfRVhUUkEgKyBPUF9UWVBFUE9TVVBUTykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgLyogUmVtb3ZlIG5vbi1tYXRjaCBwb3NzaWJpbGl0eSAqLworICAgICAgICAgICAgbmV4dF9hY3RpdmVfc3RhdGUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoKytjb3VudCA+PSAoaW50KUdFVDIoY29kZSwgMSkpCisgICAgICAgICAgICB7IEFERF9ORVdfREFUQSgtKHN0YXRlX29mZnNldCArIDIgKyBJTU0yX1NJWkUpLCAwLCAwKTsgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsgQUREX05FV19EQVRBKC1zdGF0ZV9vZmZzZXQsIGNvdW50LCAwKTsgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisgICAgICAvKiBUaGVzZSBvcGNvZGVzIGFyZSBmb2xsb3dlZCBieSBhIGNoYXJhY3RlciB0aGF0IGlzIHVzdWFsbHkgY29tcGFyZWQKKyAgICAgIHRvIHRoZSBjdXJyZW50IHN1YmplY3QgY2hhcmFjdGVyOyBpdCBpcyBsb2FkZWQgaW50byBkLiBXZSBzdGlsbCBnZXQKKyAgICAgIGhlcmUgZXZlbiBpZiB0aGVyZSBpcyBubyBzdWJqZWN0IGNoYXJhY3RlciwgYmVjYXVzZSBpbiBzb21lIGNhc2VzIHplcm8KKyAgICAgIHJlcGV0aXRpb25zIGFyZSBwZXJtaXR0ZWQuICovCisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBPUF9DSEFSOgorICAgICAgaWYgKGNsZW4gPiAwICYmIGMgPT0gZCkgeyBBRERfTkVXKHN0YXRlX29mZnNldCArIGRsZW4gKyAxLCAwKTsgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBPUF9DSEFSSToKKyAgICAgIGlmIChjbGVuID09IDApIGJyZWFrOworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBpZiAodXRmKQorICAgICAgICB7CisgICAgICAgIGlmIChjID09IGQpIHsgQUREX05FVyhzdGF0ZV9vZmZzZXQgKyBkbGVuICsgMSwgMCk7IH0gZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBpbnQgb3RoZXJjYXNlOworICAgICAgICAgIGlmIChjIDwgMTI4KQorICAgICAgICAgICAgb3RoZXJjYXNlID0gZmNjW2NdOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG90aGVyY2FzZSA9IFVDRF9PVEhFUkNBU0UoYyk7CisgICAgICAgICAgaWYgKGQgPT0gb3RoZXJjYXNlKSB7IEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgZGxlbiArIDEsIDApOyB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworICAgICAgLyogTm90IFVURiBtb2RlICovCisgICAgICAgIHsKKyAgICAgICAgaWYgKFRBQkxFX0dFVChjLCBsY2MsIGMpID09IFRBQkxFX0dFVChkLCBsY2MsIGQpKQorICAgICAgICAgIHsgQUREX05FVyhzdGF0ZV9vZmZzZXQgKyAyLCAwKTsgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIC8qIFRoaXMgaXMgYSB0cmlja3kgb25lIGJlY2F1c2UgaXQgY2FuIG1hdGNoIG1vcmUgdGhhbiBvbmUgY2hhcmFjdGVyLgorICAgICAgRmluZCBvdXQgaG93IG1hbnkgY2hhcmFjdGVycyB0byBza2lwLCBhbmQgdGhlbiBzZXQgdXAgYSBuZWdhdGl2ZSBzdGF0ZQorICAgICAgdG8gd2FpdCBmb3IgdGhlbSB0byBwYXNzIGJlZm9yZSBjb250aW51aW5nLiAqLworCisgICAgICBjYXNlIE9QX0VYVFVOSToKKyAgICAgIGlmIChjbGVuID4gMCkKKyAgICAgICAgeworICAgICAgICBpbnQgbGdiLCByZ2I7CisgICAgICAgIFBDUkUyX1NQVFIgbnB0ciA9IHB0ciArIGNsZW47CisgICAgICAgIGludCBuY291bnQgPSAwOworICAgICAgICBsZ2IgPSBVQ0RfR1JBUEhCUkVBSyhjKTsKKyAgICAgICAgd2hpbGUgKG5wdHIgPCBlbmRfc3ViamVjdCkKKyAgICAgICAgICB7CisgICAgICAgICAgZGxlbiA9IDE7CisgICAgICAgICAgaWYgKCF1dGYpIGQgPSAqbnB0cjsgZWxzZSB7IEdFVENIQVJMRU4oZCwgbnB0ciwgZGxlbik7IH0KKyAgICAgICAgICByZ2IgPSBVQ0RfR1JBUEhCUkVBSyhkKTsKKyAgICAgICAgICBpZiAoKFBSSVYodWNwX2didGFibGUpW2xnYl0gJiAoMSA8PCByZ2IpKSA9PSAwKSBicmVhazsKKyAgICAgICAgICBuY291bnQrKzsKKyAgICAgICAgICBsZ2IgPSByZ2I7CisgICAgICAgICAgbnB0ciArPSBkbGVuOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKG5wdHIgPj0gZW5kX3N1YmplY3QgJiYgKG1iLT5tb3B0aW9ucyAmIFBDUkUyX1BBUlRJQUxfSEFSRCkgIT0gMCkKKyAgICAgICAgICAgIHJlc2V0X2NvdWxkX2NvbnRpbnVlID0gVFJVRTsKKyAgICAgICAgQUREX05FV19EQVRBKC0oc3RhdGVfb2Zmc2V0ICsgMSksIDAsIG5jb3VudCk7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgLyogVGhpcyBpcyBhIHRyaWNreSBsaWtlIEVYVFVOSSBiZWNhdXNlIGl0IHRvbyBjYW4gbWF0Y2ggbW9yZSB0aGFuIG9uZQorICAgICAgY2hhcmFjdGVyICh3aGVuIENSIGlzIGZvbGxvd2VkIGJ5IExGKS4gSW4gdGhpcyBjYXNlLCBzZXQgdXAgYSBuZWdhdGl2ZQorICAgICAgc3RhdGUgdG8gd2FpdCBmb3Igb25lIGNoYXJhY3RlciB0byBwYXNzIGJlZm9yZSBjb250aW51aW5nLiAqLworCisgICAgICBjYXNlIE9QX0FOWU5MOgorICAgICAgaWYgKGNsZW4gPiAwKSBzd2l0Y2goYykKKyAgICAgICAgeworICAgICAgICBjYXNlIENIQVJfVlQ6CisgICAgICAgIGNhc2UgQ0hBUl9GRjoKKyAgICAgICAgY2FzZSBDSEFSX05FTDoKKyNpZm5kZWYgRUJDRElDCisgICAgICAgIGNhc2UgMHgyMDI4OgorICAgICAgICBjYXNlIDB4MjAyOToKKyNlbmRpZiAgLyogTm90IEVCQ0RJQyAqLworICAgICAgICBpZiAobWItPmJzcl9jb252ZW50aW9uID09IFBDUkUyX0JTUl9BTllDUkxGKSBicmVhazsKKworICAgICAgICBjYXNlIENIQVJfTEY6CisgICAgICAgIEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ0hBUl9DUjoKKyAgICAgICAgaWYgKHB0ciArIDEgPj0gZW5kX3N1YmplY3QpCisgICAgICAgICAgeworICAgICAgICAgIEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7CisgICAgICAgICAgaWYgKChtYi0+bW9wdGlvbnMgJiBQQ1JFMl9QQVJUSUFMX0hBUkQpICE9IDApCisgICAgICAgICAgICByZXNldF9jb3VsZF9jb250aW51ZSA9IFRSVUU7CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChVQ0hBUjIxVEVTVChwdHIgKyAxKSA9PSBDSEFSX0xGKQorICAgICAgICAgIHsKKyAgICAgICAgICBBRERfTkVXX0RBVEEoLShzdGF0ZV9vZmZzZXQgKyAxKSwgMCwgMSk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgIEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBPUF9OT1RfVlNQQUNFOgorICAgICAgaWYgKGNsZW4gPiAwKSBzd2l0Y2goYykKKyAgICAgICAgeworICAgICAgICBWU1BBQ0VfQ0FTRVM6CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX1ZTUEFDRToKKyAgICAgIGlmIChjbGVuID4gMCkgc3dpdGNoKGMpCisgICAgICAgIHsKKyAgICAgICAgVlNQQUNFX0NBU0VTOgorICAgICAgICBBRERfTkVXKHN0YXRlX29mZnNldCArIDEsIDApOworICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBPUF9OT1RfSFNQQUNFOgorICAgICAgaWYgKGNsZW4gPiAwKSBzd2l0Y2goYykKKyAgICAgICAgeworICAgICAgICBIU1BBQ0VfQ0FTRVM6CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgMSwgMCk7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0hTUEFDRToKKyAgICAgIGlmIChjbGVuID4gMCkgc3dpdGNoKGMpCisgICAgICAgIHsKKyAgICAgICAgSFNQQUNFX0NBU0VTOgorICAgICAgICBBRERfTkVXKHN0YXRlX29mZnNldCArIDEsIDApOworICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgLyogTWF0Y2ggYSBuZWdhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgY2FzZWZ1bGx5LiAqLworCisgICAgICBjYXNlIE9QX05PVDoKKyAgICAgIGlmIChjbGVuID4gMCAmJiBjICE9IGQpIHsgQUREX05FVyhzdGF0ZV9vZmZzZXQgKyBkbGVuICsgMSwgMCk7IH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIC8qIE1hdGNoIGEgbmVnYXRlZCBzaW5nbGUgY2hhcmFjdGVyIGNhc2VsZXNzbHkuICovCisKKyAgICAgIGNhc2UgT1BfTk9USToKKyAgICAgIGlmIChjbGVuID4gMCkKKyAgICAgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgb3RoZXJkOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICBpZiAodXRmICYmIGQgPj0gMTI4KQorICAgICAgICAgIG90aGVyZCA9IFVDRF9PVEhFUkNBU0UoZCk7CisgICAgICAgIGVsc2UKKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisgICAgICAgIG90aGVyZCA9IFRBQkxFX0dFVChkLCBmY2MsIGQpOworICAgICAgICBpZiAoYyAhPSBkICYmIGMgIT0gb3RoZXJkKQorICAgICAgICAgIHsgQUREX05FVyhzdGF0ZV9vZmZzZXQgKyBkbGVuICsgMSwgMCk7IH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworICAgICAgY2FzZSBPUF9QTFVTSToKKyAgICAgIGNhc2UgT1BfTUlOUExVU0k6CisgICAgICBjYXNlIE9QX1BPU1BMVVNJOgorICAgICAgY2FzZSBPUF9OT1RQTFVTSToKKyAgICAgIGNhc2UgT1BfTk9UTUlOUExVU0k6CisgICAgICBjYXNlIE9QX05PVFBPU1BMVVNJOgorICAgICAgY2FzZWxlc3MgPSBUUlVFOworICAgICAgY29kZXZhbHVlIC09IE9QX1NUQVJJIC0gT1BfU1RBUjsKKworICAgICAgLyogRmFsbCB0aHJvdWdoICovCisgICAgICBjYXNlIE9QX1BMVVM6CisgICAgICBjYXNlIE9QX01JTlBMVVM6CisgICAgICBjYXNlIE9QX1BPU1BMVVM6CisgICAgICBjYXNlIE9QX05PVFBMVVM6CisgICAgICBjYXNlIE9QX05PVE1JTlBMVVM6CisgICAgICBjYXNlIE9QX05PVFBPU1BMVVM6CisgICAgICBjb3VudCA9IGN1cnJlbnRfc3RhdGUtPmNvdW50OyAgLyogQWxyZWFkeSBtYXRjaGVkICovCisgICAgICBpZiAoY291bnQgPiAwKSB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgZGxlbiArIDEsIDApOyB9CisgICAgICBpZiAoY2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgdWludDMyX3Qgb3RoZXJkID0gTk9UQUNIQVI7CisgICAgICAgIGlmIChjYXNlbGVzcykKKyAgICAgICAgICB7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgICAgaWYgKHV0ZiAmJiBkID49IDEyOCkKKyAgICAgICAgICAgIG90aGVyZCA9IFVDRF9PVEhFUkNBU0UoZCk7CisgICAgICAgICAgZWxzZQorI2VuZGlmICAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKyAgICAgICAgICBvdGhlcmQgPSBUQUJMRV9HRVQoZCwgZmNjLCBkKTsKKyAgICAgICAgICB9CisgICAgICAgIGlmICgoYyA9PSBkIHx8IGMgPT0gb3RoZXJkKSA9PSAoY29kZXZhbHVlIDwgT1BfTk9UU1RBUikpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChjb3VudCA+IDAgJiYKKyAgICAgICAgICAgICAgKGNvZGV2YWx1ZSA9PSBPUF9QT1NQTFVTIHx8IGNvZGV2YWx1ZSA9PSBPUF9OT1RQT1NQTFVTKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgICAvKiBSZW1vdmUgbm9uLW1hdGNoIHBvc3NpYmlsaXR5ICovCisgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgQUREX05FVyhzdGF0ZV9vZmZzZXQsIGNvdW50KTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfUVVFUllJOgorICAgICAgY2FzZSBPUF9NSU5RVUVSWUk6CisgICAgICBjYXNlIE9QX1BPU1FVRVJZSToKKyAgICAgIGNhc2UgT1BfTk9UUVVFUllJOgorICAgICAgY2FzZSBPUF9OT1RNSU5RVUVSWUk6CisgICAgICBjYXNlIE9QX05PVFBPU1FVRVJZSToKKyAgICAgIGNhc2VsZXNzID0gVFJVRTsKKyAgICAgIGNvZGV2YWx1ZSAtPSBPUF9TVEFSSSAtIE9QX1NUQVI7CisgICAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICAgIGNhc2UgT1BfUVVFUlk6CisgICAgICBjYXNlIE9QX01JTlFVRVJZOgorICAgICAgY2FzZSBPUF9QT1NRVUVSWToKKyAgICAgIGNhc2UgT1BfTk9UUVVFUlk6CisgICAgICBjYXNlIE9QX05PVE1JTlFVRVJZOgorICAgICAgY2FzZSBPUF9OT1RQT1NRVUVSWToKKyAgICAgIEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgZGxlbiArIDEsIDApOworICAgICAgaWYgKGNsZW4gPiAwKQorICAgICAgICB7CisgICAgICAgIHVpbnQzMl90IG90aGVyZCA9IE5PVEFDSEFSOworICAgICAgICBpZiAoY2FzZWxlc3MpCisgICAgICAgICAgeworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICAgIGlmICh1dGYgJiYgZCA+PSAxMjgpCisgICAgICAgICAgICBvdGhlcmQgPSBVQ0RfT1RIRVJDQVNFKGQpOworICAgICAgICAgIGVsc2UKKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisgICAgICAgICAgb3RoZXJkID0gVEFCTEVfR0VUKGQsIGZjYywgZCk7CisgICAgICAgICAgfQorICAgICAgICBpZiAoKGMgPT0gZCB8fCBjID09IG90aGVyZCkgPT0gKGNvZGV2YWx1ZSA8IE9QX05PVFNUQVIpKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoY29kZXZhbHVlID09IE9QX1BPU1FVRVJZIHx8IGNvZGV2YWx1ZSA9PSBPUF9OT1RQT1NRVUVSWSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgIC8qIFJlbW92ZSBub24tbWF0Y2ggcG9zc2liaWxpdHkgKi8KKyAgICAgICAgICAgIG5leHRfYWN0aXZlX3N0YXRlLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgQUREX05FVyhzdGF0ZV9vZmZzZXQgKyBkbGVuICsgMSwgMCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX1NUQVJJOgorICAgICAgY2FzZSBPUF9NSU5TVEFSSToKKyAgICAgIGNhc2UgT1BfUE9TU1RBUkk6CisgICAgICBjYXNlIE9QX05PVFNUQVJJOgorICAgICAgY2FzZSBPUF9OT1RNSU5TVEFSSToKKyAgICAgIGNhc2UgT1BfTk9UUE9TU1RBUkk6CisgICAgICBjYXNlbGVzcyA9IFRSVUU7CisgICAgICBjb2RldmFsdWUgLT0gT1BfU1RBUkkgLSBPUF9TVEFSOworICAgICAgLyogRmFsbCB0aHJvdWdoICovCisgICAgICBjYXNlIE9QX1NUQVI6CisgICAgICBjYXNlIE9QX01JTlNUQVI6CisgICAgICBjYXNlIE9QX1BPU1NUQVI6CisgICAgICBjYXNlIE9QX05PVFNUQVI6CisgICAgICBjYXNlIE9QX05PVE1JTlNUQVI6CisgICAgICBjYXNlIE9QX05PVFBPU1NUQVI6CisgICAgICBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIGRsZW4gKyAxLCAwKTsKKyAgICAgIGlmIChjbGVuID4gMCkKKyAgICAgICAgeworICAgICAgICB1aW50MzJfdCBvdGhlcmQgPSBOT1RBQ0hBUjsKKyAgICAgICAgaWYgKGNhc2VsZXNzKQorICAgICAgICAgIHsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgICBpZiAodXRmICYmIGQgPj0gMTI4KQorICAgICAgICAgICAgb3RoZXJkID0gVUNEX09USEVSQ0FTRShkKTsKKyAgICAgICAgICBlbHNlCisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworICAgICAgICAgIG90aGVyZCA9IFRBQkxFX0dFVChkLCBmY2MsIGQpOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKChjID09IGQgfHwgYyA9PSBvdGhlcmQpID09IChjb2RldmFsdWUgPCBPUF9OT1RTVEFSKSkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGNvZGV2YWx1ZSA9PSBPUF9QT1NTVEFSIHx8IGNvZGV2YWx1ZSA9PSBPUF9OT1RQT1NTVEFSKQorICAgICAgICAgICAgeworICAgICAgICAgICAgYWN0aXZlX2NvdW50LS07ICAgICAgICAgICAgLyogUmVtb3ZlIG5vbi1tYXRjaCBwb3NzaWJpbGl0eSAqLworICAgICAgICAgICAgbmV4dF9hY3RpdmVfc3RhdGUtLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBBRERfTkVXKHN0YXRlX29mZnNldCwgMCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0VYQUNUSToKKyAgICAgIGNhc2UgT1BfTk9URVhBQ1RJOgorICAgICAgY2FzZWxlc3MgPSBUUlVFOworICAgICAgY29kZXZhbHVlIC09IE9QX1NUQVJJIC0gT1BfU1RBUjsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgICAgY2FzZSBPUF9FWEFDVDoKKyAgICAgIGNhc2UgT1BfTk9URVhBQ1Q6CisgICAgICBjb3VudCA9IGN1cnJlbnRfc3RhdGUtPmNvdW50OyAgLyogTnVtYmVyIGFscmVhZHkgbWF0Y2hlZCAqLworICAgICAgaWYgKGNsZW4gPiAwKQorICAgICAgICB7CisgICAgICAgIHVpbnQzMl90IG90aGVyZCA9IE5PVEFDSEFSOworICAgICAgICBpZiAoY2FzZWxlc3MpCisgICAgICAgICAgeworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICAgIGlmICh1dGYgJiYgZCA+PSAxMjgpCisgICAgICAgICAgICBvdGhlcmQgPSBVQ0RfT1RIRVJDQVNFKGQpOworICAgICAgICAgIGVsc2UKKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisgICAgICAgICAgb3RoZXJkID0gVEFCTEVfR0VUKGQsIGZjYywgZCk7CisgICAgICAgICAgfQorICAgICAgICBpZiAoKGMgPT0gZCB8fCBjID09IG90aGVyZCkgPT0gKGNvZGV2YWx1ZSA8IE9QX05PVFNUQVIpKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoKytjb3VudCA+PSAoaW50KUdFVDIoY29kZSwgMSkpCisgICAgICAgICAgICB7IEFERF9ORVcoc3RhdGVfb2Zmc2V0ICsgZGxlbiArIDEgKyBJTU0yX1NJWkUsIDApOyB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeyBBRERfTkVXKHN0YXRlX29mZnNldCwgY291bnQpOyB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX1VQVE9JOgorICAgICAgY2FzZSBPUF9NSU5VUFRPSToKKyAgICAgIGNhc2UgT1BfUE9TVVBUT0k6CisgICAgICBjYXNlIE9QX05PVFVQVE9JOgorICAgICAgY2FzZSBPUF9OT1RNSU5VUFRPSToKKyAgICAgIGNhc2UgT1BfTk9UUE9TVVBUT0k6CisgICAgICBjYXNlbGVzcyA9IFRSVUU7CisgICAgICBjb2RldmFsdWUgLT0gT1BfU1RBUkkgLSBPUF9TVEFSOworICAgICAgLyogRmFsbCB0aHJvdWdoICovCisgICAgICBjYXNlIE9QX1VQVE86CisgICAgICBjYXNlIE9QX01JTlVQVE86CisgICAgICBjYXNlIE9QX1BPU1VQVE86CisgICAgICBjYXNlIE9QX05PVFVQVE86CisgICAgICBjYXNlIE9QX05PVE1JTlVQVE86CisgICAgICBjYXNlIE9QX05PVFBPU1VQVE86CisgICAgICBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIGRsZW4gKyAxICsgSU1NMl9TSVpFLCAwKTsKKyAgICAgIGNvdW50ID0gY3VycmVudF9zdGF0ZS0+Y291bnQ7ICAvKiBOdW1iZXIgYWxyZWFkeSBtYXRjaGVkICovCisgICAgICBpZiAoY2xlbiA+IDApCisgICAgICAgIHsKKyAgICAgICAgdWludDMyX3Qgb3RoZXJkID0gTk9UQUNIQVI7CisgICAgICAgIGlmIChjYXNlbGVzcykKKyAgICAgICAgICB7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgICAgaWYgKHV0ZiAmJiBkID49IDEyOCkKKyAgICAgICAgICAgIG90aGVyZCA9IFVDRF9PVEhFUkNBU0UoZCk7CisgICAgICAgICAgZWxzZQorI2VuZGlmICAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKyAgICAgICAgICBvdGhlcmQgPSBUQUJMRV9HRVQoZCwgZmNjLCBkKTsKKyAgICAgICAgICB9CisgICAgICAgIGlmICgoYyA9PSBkIHx8IGMgPT0gb3RoZXJkKSA9PSAoY29kZXZhbHVlIDwgT1BfTk9UU1RBUikpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChjb2RldmFsdWUgPT0gT1BfUE9TVVBUTyB8fCBjb2RldmFsdWUgPT0gT1BfTk9UUE9TVVBUTykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgICAvKiBSZW1vdmUgbm9uLW1hdGNoIHBvc3NpYmlsaXR5ICovCisgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmICgrK2NvdW50ID49IChpbnQpR0VUMihjb2RlLCAxKSkKKyAgICAgICAgICAgIHsgQUREX05FVyhzdGF0ZV9vZmZzZXQgKyBkbGVuICsgMSArIElNTTJfU0laRSwgMCk7IH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7IEFERF9ORVcoc3RhdGVfb2Zmc2V0LCBjb3VudCk7IH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisgICAgICAvKiBUaGVzZSBhcmUgdGhlIGNsYXNzLWhhbmRsaW5nIG9wY29kZXMgKi8KKworICAgICAgY2FzZSBPUF9DTEFTUzoKKyAgICAgIGNhc2UgT1BfTkNMQVNTOgorICAgICAgY2FzZSBPUF9YQ0xBU1M6CisgICAgICAgIHsKKyAgICAgICAgQk9PTCBpc2luY2xhc3MgPSBGQUxTRTsKKyAgICAgICAgaW50IG5leHRfc3RhdGVfb2Zmc2V0OworICAgICAgICBQQ1JFMl9TUFRSIGVjb2RlOworCisgICAgICAgIC8qIEZvciBhIHNpbXBsZSBjbGFzcywgdGhlcmUgaXMgYWx3YXlzIGp1c3QgYSAzMi1ieXRlIHRhYmxlLCBhbmQgd2UKKyAgICAgICAgY2FuIHNldCBpc2luY2xhc3MgZnJvbSBpdC4gKi8KKworICAgICAgICBpZiAoY29kZXZhbHVlICE9IE9QX1hDTEFTUykKKyAgICAgICAgICB7CisgICAgICAgICAgZWNvZGUgPSBjb2RlICsgMSArICgzMiAvIHNpemVvZihQQ1JFMl9VQ0hBUikpOworICAgICAgICAgIGlmIChjbGVuID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlzaW5jbGFzcyA9IChjID4gMjU1KT8gKGNvZGV2YWx1ZSA9PSBPUF9OQ0xBU1MpIDoKKyAgICAgICAgICAgICAgKCgoKHVpbnQ4X3QgKikoY29kZSArIDEpKVtjLzhdICYgKDEgPDwgKGMmNykpKSAhPSAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgLyogQW4gZXh0ZW5kZWQgY2xhc3MgbWF5IGhhdmUgYSB0YWJsZSBvciBhIGxpc3Qgb2Ygc2luZ2xlIGNoYXJhY3RlcnMsCisgICAgICAgIHJhbmdlcywgb3IgYm90aCwgYW5kIGl0IG1heSBiZSBwb3NpdGl2ZSBvciBuZWdhdGl2ZS4gVGhlcmUncyBhCisgICAgICAgIGZ1bmN0aW9uIHRoYXQgc29ydHMgYWxsIHRoaXMgb3V0LiAqLworCisgICAgICAgIGVsc2UKKyAgICAgICAgIHsKKyAgICAgICAgIGVjb2RlID0gY29kZSArIEdFVChjb2RlLCAxKTsKKyAgICAgICAgIGlmIChjbGVuID4gMCkgaXNpbmNsYXNzID0gUFJJVih4Y2xhc3MpKGMsIGNvZGUgKyAxICsgTElOS19TSVpFLCB1dGYpOworICAgICAgICAgfQorCisgICAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIGlzaW5jbGFzcyBpcyBzZXQgZm9yIGFsbCBraW5kcyBvZiBjbGFzcywgYW5kIGVjb2RlCisgICAgICAgIHBvaW50cyB0byB0aGUgYnl0ZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBjbGFzcy4gSWYgdGhlcmUgaXMgYQorICAgICAgICBxdWFudGlmaWVyLCB0aGlzIGlzIHdoZXJlIGl0IHdpbGwgYmUuICovCisKKyAgICAgICAgbmV4dF9zdGF0ZV9vZmZzZXQgPSAoaW50KShlY29kZSAtIHN0YXJ0X2NvZGUpOworCisgICAgICAgIHN3aXRjaCAoKmVjb2RlKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIE9QX0NSU1RBUjoKKyAgICAgICAgICBjYXNlIE9QX0NSTUlOU1RBUjoKKyAgICAgICAgICBjYXNlIE9QX0NSUE9TU1RBUjoKKyAgICAgICAgICBBRERfQUNUSVZFKG5leHRfc3RhdGVfb2Zmc2V0ICsgMSwgMCk7CisgICAgICAgICAgaWYgKGlzaW5jbGFzcykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgqZWNvZGUgPT0gT1BfQ1JQT1NTVEFSKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgLyogUmVtb3ZlIG5vbi1tYXRjaCBwb3NzaWJpbGl0eSAqLworICAgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBBRERfTkVXKHN0YXRlX29mZnNldCwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIE9QX0NSUExVUzoKKyAgICAgICAgICBjYXNlIE9QX0NSTUlOUExVUzoKKyAgICAgICAgICBjYXNlIE9QX0NSUE9TUExVUzoKKyAgICAgICAgICBjb3VudCA9IGN1cnJlbnRfc3RhdGUtPmNvdW50OyAgLyogQWxyZWFkeSBtYXRjaGVkICovCisgICAgICAgICAgaWYgKGNvdW50ID4gMCkgeyBBRERfQUNUSVZFKG5leHRfc3RhdGVfb2Zmc2V0ICsgMSwgMCk7IH0KKyAgICAgICAgICBpZiAoaXNpbmNsYXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGNvdW50ID4gMCAmJiAqZWNvZGUgPT0gT1BfQ1JQT1NQTFVTKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgLyogUmVtb3ZlIG5vbi1tYXRjaCBwb3NzaWJpbGl0eSAqLworICAgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgQUREX05FVyhzdGF0ZV9vZmZzZXQsIGNvdW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgT1BfQ1JRVUVSWToKKyAgICAgICAgICBjYXNlIE9QX0NSTUlOUVVFUlk6CisgICAgICAgICAgY2FzZSBPUF9DUlBPU1FVRVJZOgorICAgICAgICAgIEFERF9BQ1RJVkUobmV4dF9zdGF0ZV9vZmZzZXQgKyAxLCAwKTsKKyAgICAgICAgICBpZiAoaXNpbmNsYXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKCplY29kZSA9PSBPUF9DUlBPU1FVRVJZKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGFjdGl2ZV9jb3VudC0tOyAgICAgICAgICAgLyogUmVtb3ZlIG5vbi1tYXRjaCBwb3NzaWJpbGl0eSAqLworICAgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZS0tOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBBRERfTkVXKG5leHRfc3RhdGVfb2Zmc2V0ICsgMSwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIE9QX0NSUkFOR0U6CisgICAgICAgICAgY2FzZSBPUF9DUk1JTlJBTkdFOgorICAgICAgICAgIGNhc2UgT1BfQ1JQT1NSQU5HRToKKyAgICAgICAgICBjb3VudCA9IGN1cnJlbnRfc3RhdGUtPmNvdW50OyAgLyogQWxyZWFkeSBtYXRjaGVkICovCisgICAgICAgICAgaWYgKGNvdW50ID49IChpbnQpR0VUMihlY29kZSwgMSkpCisgICAgICAgICAgICB7IEFERF9BQ1RJVkUobmV4dF9zdGF0ZV9vZmZzZXQgKyAxICsgMiAqIElNTTJfU0laRSwgMCk7IH0KKyAgICAgICAgICBpZiAoaXNpbmNsYXNzKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IG1heCA9IChpbnQpR0VUMihlY29kZSwgMSArIElNTTJfU0laRSk7CisgICAgICAgICAgICBpZiAoKmVjb2RlID09IE9QX0NSUE9TUkFOR0UpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgYWN0aXZlX2NvdW50LS07ICAgICAgICAgICAvKiBSZW1vdmUgbm9uLW1hdGNoIHBvc3NpYmlsaXR5ICovCisgICAgICAgICAgICAgIG5leHRfYWN0aXZlX3N0YXRlLS07CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgrK2NvdW50ID49IG1heCAmJiBtYXggIT0gMCkgICAvKiBNYXggMCA9PiBubyBsaW1pdCAqLworICAgICAgICAgICAgICB7IEFERF9ORVcobmV4dF9zdGF0ZV9vZmZzZXQgKyAxICsgMiAqIElNTTJfU0laRSwgMCk7IH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeyBBRERfTkVXKHN0YXRlX29mZnNldCwgY291bnQpOyB9CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIGlmIChpc2luY2xhc3MpIHsgQUREX05FVyhuZXh0X3N0YXRlX29mZnNldCwgMCk7IH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworICAgICAgLyogVGhlc2UgYXJlIHRoZSBvcGNvZGVzIGZvciBmYW5jeSBicmFja2V0cyBvZiB2YXJpb3VzIGtpbmRzLiBXZSBoYXZlCisgICAgICB0byB1c2UgcmVjdXJzaW9uIGluIG9yZGVyIHRvIGhhbmRsZSB0aGVtLiBUaGUgImFsd2F5cyBmYWlsaW5nIiBhc3NlcnRpb24KKyAgICAgICg/ISkgaXMgb3B0aW1pc2VkIHRvIE9QX0ZBSUwgd2hlbiBjb21waWxpbmcsIHNvIHdlIGhhdmUgdG8gc3VwcG9ydCB0aGF0LAorICAgICAgdGhvdWdoIHRoZSBvdGhlciAiYmFja3RyYWNraW5nIHZlcmJzIiBhcmUgbm90IHN1cHBvcnRlZC4gKi8KKworICAgICAgY2FzZSBPUF9GQUlMOgorICAgICAgZm9yY2VkX2ZhaWwrKzsgICAgLyogQ291bnQgRkFJTHMgZm9yIG11bHRpcGxlIHN0YXRlcyAqLworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfQVNTRVJUOgorICAgICAgY2FzZSBPUF9BU1NFUlRfTk9UOgorICAgICAgY2FzZSBPUF9BU1NFUlRCQUNLOgorICAgICAgY2FzZSBPUF9BU1NFUlRCQUNLX05PVDoKKyAgICAgICAgeworICAgICAgICBQQ1JFMl9TUFRSIGVuZGFzc2NvZGUgPSBjb2RlICsgR0VUKGNvZGUsIDEpOworICAgICAgICBQQ1JFMl9TSVpFIGxvY2FsX29mZnNldHNbMl07CisgICAgICAgIGludCByYzsKKyAgICAgICAgaW50IGxvY2FsX3dvcmtzcGFjZVsxMDAwXTsKKworICAgICAgICB3aGlsZSAoKmVuZGFzc2NvZGUgPT0gT1BfQUxUKSBlbmRhc3Njb2RlICs9IEdFVChlbmRhc3Njb2RlLCAxKTsKKworICAgICAgICByYyA9IGludGVybmFsX2RmYV9tYXRjaCgKKyAgICAgICAgICBtYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN0YXRpYyBtYXRjaCBkYXRhICovCisgICAgICAgICAgY29kZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIHN1YmV4cHJlc3Npb24ncyBjb2RlICovCisgICAgICAgICAgcHRyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3aGVyZSB3ZSBjdXJyZW50bHkgYXJlICovCisgICAgICAgICAgKGludCkocHRyIC0gc3RhcnRfc3ViamVjdCksICAgICAgICAgICAvKiBzdGFydCBvZmZzZXQgKi8KKyAgICAgICAgICBsb2NhbF9vZmZzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldCB2ZWN0b3IgKi8KKyAgICAgICAgICBzaXplb2YobG9jYWxfb2Zmc2V0cykvc2l6ZW9mKFBDUkUyX1NJWkUpLCAvKiBzaXplIG9mIHNhbWUgKi8KKyAgICAgICAgICBsb2NhbF93b3Jrc3BhY2UsICAgICAgICAgICAgICAgICAgICAgIC8qIHdvcmtzcGFjZSB2ZWN0b3IgKi8KKyAgICAgICAgICBzaXplb2YobG9jYWxfd29ya3NwYWNlKS9zaXplb2YoaW50KSwgIC8qIHNpemUgb2Ygc2FtZSAqLworICAgICAgICAgIHJsZXZlbCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVuY3Rpb24gcmVjdXJzaW9uIGxldmVsICovCisKKyAgICAgICAgaWYgKHJjID09IFBDUkUyX0VSUk9SX0RGQV9VSVRFTSkgcmV0dXJuIHJjOworICAgICAgICBpZiAoKHJjID49IDApID09IChjb2RldmFsdWUgPT0gT1BfQVNTRVJUIHx8IGNvZGV2YWx1ZSA9PSBPUF9BU1NFUlRCQUNLKSkKKyAgICAgICAgICAgIHsgQUREX0FDVElWRSgoaW50KShlbmRhc3Njb2RlICsgTElOS19TSVpFICsgMSAtIHN0YXJ0X2NvZGUpLCAwKTsgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX0NPTkQ6CisgICAgICBjYXNlIE9QX1NDT05EOgorICAgICAgICB7CisgICAgICAgIFBDUkUyX1NJWkUgbG9jYWxfb2Zmc2V0c1sxMDAwXTsKKyAgICAgICAgaW50IGxvY2FsX3dvcmtzcGFjZVsxMDAwXTsKKyAgICAgICAgaW50IGNvZGVsaW5rID0gR0VUKGNvZGUsIDEpOworICAgICAgICBpbnQgY29uZGNvZGU7CisKKyAgICAgICAgLyogQmVjYXVzZSBvZiB0aGUgd2F5IGF1dG8tY2FsbG91dCB3b3JrcyBkdXJpbmcgY29tcGlsZSwgYSBjYWxsb3V0IGl0ZW0KKyAgICAgICAgaXMgaW5zZXJ0ZWQgYmV0d2VlbiBPUF9DT05EIGFuZCBhbiBhc3NlcnRpb24gY29uZGl0aW9uLiBUaGlzIGRvZXMgbm90CisgICAgICAgIGhhcHBlbiBmb3IgdGhlIG90aGVyIGNvbmRpdGlvbnMuICovCisKKyAgICAgICAgaWYgKGNvZGVbTElOS19TSVpFICsgMV0gPT0gT1BfQ0FMTE9VVAorICAgICAgICAgICAgfHwgY29kZVtMSU5LX1NJWkUgKyAxXSA9PSBPUF9DQUxMT1VUX1NUUikKKyAgICAgICAgICB7CisgICAgICAgICAgdW5zaWduZWQgaW50IGNhbGxvdXRfbGVuZ3RoID0gKGNvZGVbTElOS19TSVpFICsgMV0gPT0gT1BfQ0FMTE9VVCkKKyAgICAgICAgICAgICAgPyBQUklWKE9QX2xlbmd0aHMpW09QX0NBTExPVVRdIDogR0VUKGNvZGUsIDIgKyAzKkxJTktfU0laRSk7CisgICAgICAgICAgcnJjID0gMDsKKyAgICAgICAgICBpZiAobWItPmNhbGxvdXQgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHBjcmUyX2NhbGxvdXRfYmxvY2sgY2I7CisgICAgICAgICAgICBjYi52ZXJzaW9uICAgICAgICAgID0gMTsKKyAgICAgICAgICAgIGNiLmNhcHR1cmVfdG9wICAgICAgPSAxOworICAgICAgICAgICAgY2IuY2FwdHVyZV9sYXN0ICAgICA9IDA7CisgICAgICAgICAgICBjYi5vZmZzZXRfdmVjdG9yICAgID0gb2Zmc2V0czsKKyAgICAgICAgICAgIGNiLm1hcmsgICAgICAgICAgICAgPSBOVUxMOyAgIC8qIE5vICgqTUFSSykgc3VwcG9ydCAqLworICAgICAgICAgICAgY2Iuc3ViamVjdCAgICAgICAgICA9IHN0YXJ0X3N1YmplY3Q7CisgICAgICAgICAgICBjYi5zdWJqZWN0X2xlbmd0aCAgID0gKFBDUkUyX1NJWkUpKGVuZF9zdWJqZWN0IC0gc3RhcnRfc3ViamVjdCk7CisgICAgICAgICAgICBjYi5zdGFydF9tYXRjaCAgICAgID0gKFBDUkUyX1NJWkUpKGN1cnJlbnRfc3ViamVjdCAtIHN0YXJ0X3N1YmplY3QpOworICAgICAgICAgICAgY2IuY3VycmVudF9wb3NpdGlvbiA9IChQQ1JFMl9TSVpFKShwdHIgLSBzdGFydF9zdWJqZWN0KTsKKyAgICAgICAgICAgIGNiLnBhdHRlcm5fcG9zaXRpb24gPSBHRVQoY29kZSwgTElOS19TSVpFICsgMik7CisgICAgICAgICAgICBjYi5uZXh0X2l0ZW1fbGVuZ3RoID0gR0VUKGNvZGUsIExJTktfU0laRSArIDIgKyBMSU5LX1NJWkUpOworCisgICAgICAgICAgICBpZiAoY29kZVtMSU5LX1NJWkUgKyAxXSA9PSBPUF9DQUxMT1VUKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNiLmNhbGxvdXRfbnVtYmVyID0gY29kZVsyICsgMypMSU5LX1NJWkVdOworICAgICAgICAgICAgICBjYi5jYWxsb3V0X3N0cmluZ19vZmZzZXQgPSAwOworICAgICAgICAgICAgICBjYi5jYWxsb3V0X3N0cmluZyA9IE5VTEw7CisgICAgICAgICAgICAgIGNiLmNhbGxvdXRfc3RyaW5nX2xlbmd0aCA9IDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYi5jYWxsb3V0X251bWJlciA9IDA7CisgICAgICAgICAgICAgIGNiLmNhbGxvdXRfc3RyaW5nX29mZnNldCA9IEdFVChjb2RlLCAyICsgNCpMSU5LX1NJWkUpOworICAgICAgICAgICAgICBjYi5jYWxsb3V0X3N0cmluZyA9IGNvZGUgKyAoMiArIDUqTElOS19TSVpFKSArIDE7CisgICAgICAgICAgICAgIGNiLmNhbGxvdXRfc3RyaW5nX2xlbmd0aCA9CisgICAgICAgICAgICAgICAgY2FsbG91dF9sZW5ndGggLSAoMSArIDQqTElOS19TSVpFKSAtIDI7CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChycmMgPSAobWItPmNhbGxvdXQpKCZjYiwgbWItPmNhbGxvdXRfZGF0YSkpIDwgMCkKKyAgICAgICAgICAgICAgcmV0dXJuIHJyYzsgICAvKiBBYmFuZG9uICovCisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKHJyYyA+IDApIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAvKiBGYWlsIHRoaXMgdGhyZWFkICovCisgICAgICAgICAgY29kZSArPSBjYWxsb3V0X2xlbmd0aDsgICAgICAgICAgICAgICAgICAvKiBTa2lwIGNhbGxvdXQgZGF0YSAqLworICAgICAgICAgIH0KKworICAgICAgICBjb25kY29kZSA9IGNvZGVbTElOS19TSVpFKzFdOworCisgICAgICAgIC8qIEJhY2sgcmVmZXJlbmNlIGNvbmRpdGlvbnMgYW5kIGR1cGxpY2F0ZSBuYW1lZCByZWN1cnNpb24gY29uZGl0aW9ucworICAgICAgICBhcmUgbm90IHN1cHBvcnRlZCAqLworCisgICAgICAgIGlmIChjb25kY29kZSA9PSBPUF9DUkVGIHx8IGNvbmRjb2RlID09IE9QX0ROQ1JFRiB8fAorICAgICAgICAgICAgY29uZGNvZGUgPT0gT1BfRE5SUkVGKQorICAgICAgICAgIHJldHVybiBQQ1JFMl9FUlJPUl9ERkFfVUNPTkQ7CisKKyAgICAgICAgLyogVGhlIERFRklORSBjb25kaXRpb24gaXMgYWx3YXlzIGZhbHNlLCBhbmQgdGhlIGFzc2VydGlvbiAoPyEpIGlzCisgICAgICAgIGNvbnZlcnRlZCB0byBPUF9GQUlMLiAqLworCisgICAgICAgIGlmIChjb25kY29kZSA9PSBPUF9GQUxTRSB8fCBjb25kY29kZSA9PSBPUF9GQUlMKQorICAgICAgICAgIHsgQUREX0FDVElWRShzdGF0ZV9vZmZzZXQgKyBjb2RlbGluayArIExJTktfU0laRSArIDEsIDApOyB9CisKKyAgICAgICAgLyogVGhlcmUgaXMgYWxzbyBhbiBhbHdheXMtdHJ1ZSBjb25kaXRpb24gKi8KKworICAgICAgICBlbHNlIGlmIChjb25kY29kZSA9PSBPUF9UUlVFKQorICAgICAgICAgIHsgQUREX0FDVElWRShzdGF0ZV9vZmZzZXQgKyBMSU5LX1NJWkUgKyAyICsgSU1NMl9TSVpFLCAwKTsgfQorCisgICAgICAgIC8qIFRoZSBvbmx5IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIE9QX1JSRUYgaXMgZm9yIHRoZSB2YWx1ZSBSUkVGX0FOWSwKKyAgICAgICAgd2hpY2ggbWVhbnMgInRlc3QgaWYgaW4gYW55IHJlY3Vyc2lvbiIuIFdlIGNhbid0IHRlc3QgZm9yIHNwZWNpZmljYWxseQorICAgICAgICByZWN1cnNlZCBncm91cHMuICovCisKKyAgICAgICAgZWxzZSBpZiAoY29uZGNvZGUgPT0gT1BfUlJFRikKKyAgICAgICAgICB7CisgICAgICAgICAgaW50IHZhbHVlID0gR0VUMihjb2RlLCBMSU5LX1NJWkUgKyAyKTsKKyAgICAgICAgICBpZiAodmFsdWUgIT0gUlJFRl9BTlkpIHJldHVybiBQQ1JFMl9FUlJPUl9ERkFfVUNPTkQ7CisgICAgICAgICAgaWYgKG1iLT5yZWN1cnNpdmUgIT0gTlVMTCkKKyAgICAgICAgICAgIHsgQUREX0FDVElWRShzdGF0ZV9vZmZzZXQgKyBMSU5LX1NJWkUgKyAyICsgSU1NMl9TSVpFLCAwKTsgfQorICAgICAgICAgIGVsc2UgeyBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIGNvZGVsaW5rICsgTElOS19TSVpFICsgMSwgMCk7IH0KKyAgICAgICAgICB9CisKKyAgICAgICAgLyogT3RoZXJ3aXNlLCB0aGUgY29uZGl0aW9uIGlzIGFuIGFzc2VydGlvbiAqLworCisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgaW50IHJjOworICAgICAgICAgIFBDUkUyX1NQVFIgYXNzY29kZSA9IGNvZGUgKyBMSU5LX1NJWkUgKyAxOworICAgICAgICAgIFBDUkUyX1NQVFIgZW5kYXNzY29kZSA9IGFzc2NvZGUgKyBHRVQoYXNzY29kZSwgMSk7CisKKyAgICAgICAgICB3aGlsZSAoKmVuZGFzc2NvZGUgPT0gT1BfQUxUKSBlbmRhc3Njb2RlICs9IEdFVChlbmRhc3Njb2RlLCAxKTsKKworICAgICAgICAgIHJjID0gaW50ZXJuYWxfZGZhX21hdGNoKAorICAgICAgICAgICAgbWIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmaXhlZCBtYXRjaCBkYXRhICovCisgICAgICAgICAgICBhc3Njb2RlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgc3ViZXhwcmVzc2lvbidzIGNvZGUgKi8KKyAgICAgICAgICAgIHB0ciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2hlcmUgd2UgY3VycmVudGx5IGFyZSAqLworICAgICAgICAgICAgKGludCkocHRyIC0gc3RhcnRfc3ViamVjdCksICAgICAgICAgICAvKiBzdGFydCBvZmZzZXQgKi8KKyAgICAgICAgICAgIGxvY2FsX29mZnNldHMsICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IHZlY3RvciAqLworICAgICAgICAgICAgc2l6ZW9mKGxvY2FsX29mZnNldHMpL3NpemVvZihQQ1JFMl9TSVpFKSwgLyogc2l6ZSBvZiBzYW1lICovCisgICAgICAgICAgICBsb2NhbF93b3Jrc3BhY2UsICAgICAgICAgICAgICAgICAgICAgIC8qIHdvcmtzcGFjZSB2ZWN0b3IgKi8KKyAgICAgICAgICAgIHNpemVvZihsb2NhbF93b3Jrc3BhY2UpL3NpemVvZihpbnQpLCAgLyogc2l6ZSBvZiBzYW1lICovCisgICAgICAgICAgICBybGV2ZWwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZ1bmN0aW9uIHJlY3Vyc2lvbiBsZXZlbCAqLworCisgICAgICAgICAgaWYgKHJjID09IFBDUkUyX0VSUk9SX0RGQV9VSVRFTSkgcmV0dXJuIHJjOworICAgICAgICAgIGlmICgocmMgPj0gMCkgPT0KKyAgICAgICAgICAgICAgICAoY29uZGNvZGUgPT0gT1BfQVNTRVJUIHx8IGNvbmRjb2RlID09IE9QX0FTU0VSVEJBQ0spKQorICAgICAgICAgICAgeyBBRERfQUNUSVZFKChpbnQpKGVuZGFzc2NvZGUgKyBMSU5LX1NJWkUgKyAxIC0gc3RhcnRfY29kZSksIDApOyB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeyBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIGNvZGVsaW5rICsgTElOS19TSVpFICsgMSwgMCk7IH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfUkVDVVJTRToKKyAgICAgICAgeworICAgICAgICBkZmFfcmVjdXJzaW9uX2luZm8gKnJpOworICAgICAgICBQQ1JFMl9TSVpFIGxvY2FsX29mZnNldHNbMTAwMF07CisgICAgICAgIGludCBsb2NhbF93b3Jrc3BhY2VbMTAwMF07CisgICAgICAgIFBDUkUyX1NQVFIgY2FsbHBhdCA9IHN0YXJ0X2NvZGUgKyBHRVQoY29kZSwgMSk7CisgICAgICAgIHVpbnQzMl90IHJlY25vID0gKGNhbGxwYXQgPT0gbWItPnN0YXJ0X2NvZGUpPyAwIDoKKyAgICAgICAgICBHRVQyKGNhbGxwYXQsIDEgKyBMSU5LX1NJWkUpOworICAgICAgICBpbnQgcmM7CisKKyAgICAgICAgLyogQ2hlY2sgZm9yIHJlcGVhdGluZyBhIHJlY3Vyc2lvbiB3aXRob3V0IGFkdmFuY2luZyB0aGUgc3ViamVjdAorICAgICAgICBwb2ludGVyLiBUaGlzIHNob3VsZCBjYXRjaCBjb252b2x1dGVkIG11dHVhbCByZWN1cnNpb25zLiAoU29tZSBzaW1wbGUKKyAgICAgICAgY2FzZXMgYXJlIGNhdWdodCBhdCBjb21waWxlIHRpbWUuKSAqLworCisgICAgICAgIGZvciAocmkgPSBtYi0+cmVjdXJzaXZlOyByaSAhPSBOVUxMOyByaSA9IHJpLT5wcmV2cmVjKQorICAgICAgICAgIGlmIChyZWNubyA9PSByaS0+Z3JvdXBfbnVtICYmIHB0ciA9PSByaS0+c3ViamVjdF9wb3NpdGlvbikKKyAgICAgICAgICAgIHJldHVybiBQQ1JFMl9FUlJPUl9SRUNVUlNFTE9PUDsKKworICAgICAgICAvKiBSZW1lbWJlciB0aGlzIHJlY3Vyc2lvbiBhbmQgd2hlcmUgd2Ugc3RhcnRlZCBpdCBzbyBhcyB0bworICAgICAgICBjYXRjaCBpbmZpbml0ZSBsb29wcy4gKi8KKworICAgICAgICBuZXdfcmVjdXJzaXZlLmdyb3VwX251bSA9IHJlY25vOworICAgICAgICBuZXdfcmVjdXJzaXZlLnN1YmplY3RfcG9zaXRpb24gPSBwdHI7CisgICAgICAgIG5ld19yZWN1cnNpdmUucHJldnJlYyA9IG1iLT5yZWN1cnNpdmU7CisgICAgICAgIG1iLT5yZWN1cnNpdmUgPSAmbmV3X3JlY3Vyc2l2ZTsKKworICAgICAgICByYyA9IGludGVybmFsX2RmYV9tYXRjaCgKKyAgICAgICAgICBtYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpeGVkIG1hdGNoIGRhdGEgKi8KKyAgICAgICAgICBjYWxscGF0LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgc3ViZXhwcmVzc2lvbidzIGNvZGUgKi8KKyAgICAgICAgICBwdHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoZXJlIHdlIGN1cnJlbnRseSBhcmUgKi8KKyAgICAgICAgICAoaW50KShwdHIgLSBzdGFydF9zdWJqZWN0KSwgICAgICAgICAgIC8qIHN0YXJ0IG9mZnNldCAqLworICAgICAgICAgIGxvY2FsX29mZnNldHMsICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IHZlY3RvciAqLworICAgICAgICAgIHNpemVvZihsb2NhbF9vZmZzZXRzKS9zaXplb2YoUENSRTJfU0laRSksIC8qIHNpemUgb2Ygc2FtZSAqLworICAgICAgICAgIGxvY2FsX3dvcmtzcGFjZSwgICAgICAgICAgICAgICAgICAgICAgLyogd29ya3NwYWNlIHZlY3RvciAqLworICAgICAgICAgIHNpemVvZihsb2NhbF93b3Jrc3BhY2UpL3NpemVvZihpbnQpLCAgLyogc2l6ZSBvZiBzYW1lICovCisgICAgICAgICAgcmxldmVsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdW5jdGlvbiByZWN1cnNpb24gbGV2ZWwgKi8KKworICAgICAgICBtYi0+cmVjdXJzaXZlID0gbmV3X3JlY3Vyc2l2ZS5wcmV2cmVjOyAgLyogRG9uZSB0aGlzIHJlY3Vyc2lvbiAqLworCisgICAgICAgIC8qIFJhbiBvdXQgb2YgaW50ZXJuYWwgb2Zmc2V0cyAqLworCisgICAgICAgIGlmIChyYyA9PSAwKSByZXR1cm4gUENSRTJfRVJST1JfREZBX1JFQ1VSU0U7CisKKyAgICAgICAgLyogRm9yIGVhY2ggc3VjY2Vzc2Z1bCBtYXRjaGVkIHN1YnN0cmluZywgc2V0IHVwIHRoZSBuZXh0IHN0YXRlIHdpdGggYQorICAgICAgICBjb3VudCBvZiBjaGFyYWN0ZXJzIHRvIHNraXAgYmVmb3JlIHRyeWluZyBpdC4gTm90ZSB0aGF0IHRoZSBjb3VudCBpcyBpbgorICAgICAgICBjaGFyYWN0ZXJzLCBub3QgYnl0ZXMuICovCisKKyAgICAgICAgaWYgKHJjID4gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgZm9yIChyYyA9IHJjKjIgLSAyOyByYyA+PSAwOyByYyAtPSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGNoYXJjb3VudCA9IGxvY2FsX29mZnNldHNbcmMrMV0gLSBsb2NhbF9vZmZzZXRzW3JjXTsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKKyAgICAgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgUENSRTJfU1BUUiBwID0gc3RhcnRfc3ViamVjdCArIGxvY2FsX29mZnNldHNbcmNdOworICAgICAgICAgICAgICBQQ1JFMl9TUFRSIHBwID0gc3RhcnRfc3ViamVjdCArIGxvY2FsX29mZnNldHNbcmMrMV07CisgICAgICAgICAgICAgIHdoaWxlIChwIDwgcHApIGlmIChOT1RfRklSU1RDVSgqcCsrKSkgY2hhcmNvdW50LS07CisgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgaWYgKGNoYXJjb3VudCA+IDApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQUREX05FV19EQVRBKC0oc3RhdGVfb2Zmc2V0ICsgTElOS19TSVpFICsgMSksIDAsIChjaGFyY291bnQgLSAxKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBBRERfQUNUSVZFKHN0YXRlX29mZnNldCArIExJTktfU0laRSArIDEsIDApOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChyYyAhPSBQQ1JFMl9FUlJPUl9OT01BVENIKSByZXR1cm4gcmM7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyAgICAgIGNhc2UgT1BfQlJBUE9TOgorICAgICAgY2FzZSBPUF9TQlJBUE9TOgorICAgICAgY2FzZSBPUF9DQlJBUE9TOgorICAgICAgY2FzZSBPUF9TQ0JSQVBPUzoKKyAgICAgIGNhc2UgT1BfQlJBUE9TWkVSTzoKKyAgICAgICAgeworICAgICAgICBpbnQgY2hhcmNvdW50LCBtYXRjaGVkX2NvdW50OworICAgICAgICBQQ1JFMl9TUFRSIGxvY2FsX3B0ciA9IHB0cjsKKyAgICAgICAgQk9PTCBhbGxvd196ZXJvOworCisgICAgICAgIGlmIChjb2RldmFsdWUgPT0gT1BfQlJBUE9TWkVSTykKKyAgICAgICAgICB7CisgICAgICAgICAgYWxsb3dfemVybyA9IFRSVUU7CisgICAgICAgICAgY29kZXZhbHVlID0gKigrK2NvZGUpOyAgLyogQ29kZXZhbHVlIHdpbGwgYmUgb25lIG9mIGFib3ZlIEJSQXMgKi8KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgYWxsb3dfemVybyA9IEZBTFNFOworCisgICAgICAgIC8qIExvb3AgdG8gbWF0Y2ggdGhlIHN1YnBhdHRlcm4gYXMgbWFueSB0aW1lcyBhcyBwb3NzaWJsZSBhcyBpZiBpdCB3ZXJlCisgICAgICAgIGEgY29tcGxldGUgcGF0dGVybi4gKi8KKworICAgICAgICBmb3IgKG1hdGNoZWRfY291bnQgPSAwOzsgbWF0Y2hlZF9jb3VudCsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBQQ1JFMl9TSVpFIGxvY2FsX29mZnNldHNbMl07CisgICAgICAgICAgaW50IGxvY2FsX3dvcmtzcGFjZVsxMDAwXTsKKworICAgICAgICAgIGludCByYyA9IGludGVybmFsX2RmYV9tYXRjaCgKKyAgICAgICAgICAgIG1iLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZml4ZWQgbWF0Y2ggZGF0YSAqLworICAgICAgICAgICAgY29kZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0aGlzIHN1YmV4cHJlc3Npb24ncyBjb2RlICovCisgICAgICAgICAgICBsb2NhbF9wdHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoZXJlIHdlIGN1cnJlbnRseSBhcmUgKi8KKyAgICAgICAgICAgIChpbnQpKHB0ciAtIHN0YXJ0X3N1YmplY3QpLCAgICAgICAgICAgLyogc3RhcnQgb2Zmc2V0ICovCisgICAgICAgICAgICBsb2NhbF9vZmZzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIG9mZnNldCB2ZWN0b3IgKi8KKyAgICAgICAgICAgIHNpemVvZihsb2NhbF9vZmZzZXRzKS9zaXplb2YoUENSRTJfU0laRSksIC8qIHNpemUgb2Ygc2FtZSAqLworICAgICAgICAgICAgbG9jYWxfd29ya3NwYWNlLCAgICAgICAgICAgICAgICAgICAgICAvKiB3b3Jrc3BhY2UgdmVjdG9yICovCisgICAgICAgICAgICBzaXplb2YobG9jYWxfd29ya3NwYWNlKS9zaXplb2YoaW50KSwgIC8qIHNpemUgb2Ygc2FtZSAqLworICAgICAgICAgICAgcmxldmVsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdW5jdGlvbiByZWN1cnNpb24gbGV2ZWwgKi8KKworICAgICAgICAgIC8qIEZhaWxlZCB0byBtYXRjaCAqLworCisgICAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyYyAhPSBQQ1JFMl9FUlJPUl9OT01BVENIKSByZXR1cm4gcmM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIE1hdGNoZWQ6IGJyZWFrIHRoZSBsb29wIGlmIHplcm8gY2hhcmFjdGVycyBtYXRjaGVkLiAqLworCisgICAgICAgICAgY2hhcmNvdW50ID0gbG9jYWxfb2Zmc2V0c1sxXSAtIGxvY2FsX29mZnNldHNbMF07CisgICAgICAgICAgaWYgKGNoYXJjb3VudCA9PSAwKSBicmVhazsKKyAgICAgICAgICBsb2NhbF9wdHIgKz0gY2hhcmNvdW50OyAgICAvKiBBZHZhbmNlIHRlbXBvcmFyeSBwb3NpdGlvbiBwdHIgKi8KKyAgICAgICAgICB9CisKKyAgICAgICAgLyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIG1hdGNoZWQgdGhlIHN1YnBhdHRlcm4gbWF0Y2hlZF9jb3VudAorICAgICAgICB0aW1lcywgYW5kIGxvY2FsX3B0ciBpcyBwb2ludGluZyB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZSBlbmQgb2YgdGhlCisgICAgICAgIGxhc3QgbWF0Y2guICovCisKKyAgICAgICAgaWYgKG1hdGNoZWRfY291bnQgPiAwIHx8IGFsbG93X3plcm8pCisgICAgICAgICAgeworICAgICAgICAgIFBDUkUyX1NQVFIgZW5kX3N1YnBhdHRlcm4gPSBjb2RlOworICAgICAgICAgIGludCBuZXh0X3N0YXRlX29mZnNldDsKKworICAgICAgICAgIGRvIHsgZW5kX3N1YnBhdHRlcm4gKz0gR0VUKGVuZF9zdWJwYXR0ZXJuLCAxKTsgfQorICAgICAgICAgICAgd2hpbGUgKCplbmRfc3VicGF0dGVybiA9PSBPUF9BTFQpOworICAgICAgICAgIG5leHRfc3RhdGVfb2Zmc2V0ID0KKyAgICAgICAgICAgIChpbnQpKGVuZF9zdWJwYXR0ZXJuIC0gc3RhcnRfY29kZSArIExJTktfU0laRSArIDEpOworCisgICAgICAgICAgLyogT3B0aW1pemF0aW9uOiBpZiB0aGVyZSBhcmUgbm8gbW9yZSBhY3RpdmUgc3RhdGVzLCBhbmQgdGhlcmUKKyAgICAgICAgICBhcmUgbm8gbmV3IHN0YXRlcyB5ZXQgc2V0IHVwLCB0aGVuIHNraXAgb3ZlciB0aGUgc3ViamVjdCBzdHJpbmcKKyAgICAgICAgICByaWdodCBoZXJlLCB0byBzYXZlIGxvb3BpbmcuIE90aGVyd2lzZSwgc2V0IHVwIHRoZSBuZXcgc3RhdGUgdG8gc3dpbmcKKyAgICAgICAgICBpbnRvIGFjdGlvbiB3aGVuIHRoZSBlbmQgb2YgdGhlIG1hdGNoZWQgc3Vic3RyaW5nIGlzIHJlYWNoZWQuICovCisKKyAgICAgICAgICBpZiAoaSArIDEgPj0gYWN0aXZlX2NvdW50ICYmIG5ld19jb3VudCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgcHRyID0gbG9jYWxfcHRyOworICAgICAgICAgICAgY2xlbiA9IDA7CisgICAgICAgICAgICBBRERfTkVXKG5leHRfc3RhdGVfb2Zmc2V0LCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICBQQ1JFMl9TUFRSIHAgPSBwdHI7CisgICAgICAgICAgICBQQ1JFMl9TUFRSIHBwID0gbG9jYWxfcHRyOworICAgICAgICAgICAgY2hhcmNvdW50ID0gKGludCkocHAgLSBwKTsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKKyAgICAgICAgICAgIGlmICh1dGYpIHdoaWxlIChwIDwgcHApIGlmIChOT1RfRklSU1RDVSgqcCsrKSkgY2hhcmNvdW50LS07CisjZW5kaWYKKyAgICAgICAgICAgIEFERF9ORVdfREFUQSgtbmV4dF9zdGF0ZV9vZmZzZXQsIDAsIChjaGFyY291bnQgLSAxKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgICBjYXNlIE9QX09OQ0U6CisgICAgICBjYXNlIE9QX09OQ0VfTkM6CisgICAgICAgIHsKKyAgICAgICAgUENSRTJfU0laRSBsb2NhbF9vZmZzZXRzWzJdOworICAgICAgICBpbnQgbG9jYWxfd29ya3NwYWNlWzEwMDBdOworCisgICAgICAgIGludCByYyA9IGludGVybmFsX2RmYV9tYXRjaCgKKyAgICAgICAgICBtYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpeGVkIG1hdGNoIGRhdGEgKi8KKyAgICAgICAgICBjb2RlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoaXMgc3ViZXhwcmVzc2lvbidzIGNvZGUgKi8KKyAgICAgICAgICBwdHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHdoZXJlIHdlIGN1cnJlbnRseSBhcmUgKi8KKyAgICAgICAgICAoaW50KShwdHIgLSBzdGFydF9zdWJqZWN0KSwgICAgICAgICAgIC8qIHN0YXJ0IG9mZnNldCAqLworICAgICAgICAgIGxvY2FsX29mZnNldHMsICAgICAgICAgICAgICAgICAgICAgICAgLyogb2Zmc2V0IHZlY3RvciAqLworICAgICAgICAgIHNpemVvZihsb2NhbF9vZmZzZXRzKS9zaXplb2YoUENSRTJfU0laRSksIC8qIHNpemUgb2Ygc2FtZSAqLworICAgICAgICAgIGxvY2FsX3dvcmtzcGFjZSwgICAgICAgICAgICAgICAgICAgICAgLyogd29ya3NwYWNlIHZlY3RvciAqLworICAgICAgICAgIHNpemVvZihsb2NhbF93b3Jrc3BhY2UpL3NpemVvZihpbnQpLCAgLyogc2l6ZSBvZiBzYW1lICovCisgICAgICAgICAgcmxldmVsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmdW5jdGlvbiByZWN1cnNpb24gbGV2ZWwgKi8KKworICAgICAgICBpZiAocmMgPj0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgUENSRTJfU1BUUiBlbmRfc3VicGF0dGVybiA9IGNvZGU7CisgICAgICAgICAgaW50IGNoYXJjb3VudCA9IGxvY2FsX29mZnNldHNbMV0gLSBsb2NhbF9vZmZzZXRzWzBdOworICAgICAgICAgIGludCBuZXh0X3N0YXRlX29mZnNldCwgcmVwZWF0X3N0YXRlX29mZnNldDsKKworICAgICAgICAgIGRvIHsgZW5kX3N1YnBhdHRlcm4gKz0gR0VUKGVuZF9zdWJwYXR0ZXJuLCAxKTsgfQorICAgICAgICAgICAgd2hpbGUgKCplbmRfc3VicGF0dGVybiA9PSBPUF9BTFQpOworICAgICAgICAgIG5leHRfc3RhdGVfb2Zmc2V0ID0KKyAgICAgICAgICAgIChpbnQpKGVuZF9zdWJwYXR0ZXJuIC0gc3RhcnRfY29kZSArIExJTktfU0laRSArIDEpOworCisgICAgICAgICAgLyogSWYgdGhlIGVuZCBvZiB0aGlzIHN1YnBhdHRlcm4gaXMgS0VUUk1BWCBvciBLRVRSTUlOLCB3ZSBtdXN0CisgICAgICAgICAgYXJyYW5nZSBmb3IgdGhlIHJlcGVhdCBzdGF0ZSBhbHNvIHRvIGJlIGFkZGVkIHRvIHRoZSByZWxldmFudCBsaXN0LgorICAgICAgICAgIENhbGN1bGF0ZSB0aGUgb2Zmc2V0LCBvciBzZXQgLTEgZm9yIG5vIHJlcGVhdC4gKi8KKworICAgICAgICAgIHJlcGVhdF9zdGF0ZV9vZmZzZXQgPSAoKmVuZF9zdWJwYXR0ZXJuID09IE9QX0tFVFJNQVggfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICplbmRfc3VicGF0dGVybiA9PSBPUF9LRVRSTUlOKT8KKyAgICAgICAgICAgIChpbnQpKGVuZF9zdWJwYXR0ZXJuIC0gc3RhcnRfY29kZSAtIEdFVChlbmRfc3VicGF0dGVybiwgMSkpIDogLTE7CisKKyAgICAgICAgICAvKiBJZiB3ZSBoYXZlIG1hdGNoZWQgYW4gZW1wdHkgc3RyaW5nLCBhZGQgdGhlIG5leHQgc3RhdGUgYXQgdGhlCisgICAgICAgICAgY3VycmVudCBjaGFyYWN0ZXIgcG9pbnRlci4gVGhpcyBpcyBpbXBvcnRhbnQgc28gdGhhdCB0aGUgZHVwbGljYXRlCisgICAgICAgICAgY2hlY2tpbmcga2lja3MgaW4sIHdoaWNoIGlzIHdoYXQgYnJlYWtzIGluZmluaXRlIGxvb3BzIHRoYXQgbWF0Y2ggYW4KKyAgICAgICAgICBlbXB0eSBzdHJpbmcuICovCisKKyAgICAgICAgICBpZiAoY2hhcmNvdW50ID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBBRERfQUNUSVZFKG5leHRfc3RhdGVfb2Zmc2V0LCAwKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIE9wdGltaXphdGlvbjogaWYgdGhlcmUgYXJlIG5vIG1vcmUgYWN0aXZlIHN0YXRlcywgYW5kIHRoZXJlCisgICAgICAgICAgYXJlIG5vIG5ldyBzdGF0ZXMgeWV0IHNldCB1cCwgdGhlbiBza2lwIG92ZXIgdGhlIHN1YmplY3Qgc3RyaW5nCisgICAgICAgICAgcmlnaHQgaGVyZSwgdG8gc2F2ZSBsb29waW5nLiBPdGhlcndpc2UsIHNldCB1cCB0aGUgbmV3IHN0YXRlIHRvIHN3aW5nCisgICAgICAgICAgaW50byBhY3Rpb24gd2hlbiB0aGUgZW5kIG9mIHRoZSBtYXRjaGVkIHN1YnN0cmluZyBpcyByZWFjaGVkLiAqLworCisgICAgICAgICAgZWxzZSBpZiAoaSArIDEgPj0gYWN0aXZlX2NvdW50ICYmIG5ld19jb3VudCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgcHRyICs9IGNoYXJjb3VudDsKKyAgICAgICAgICAgIGNsZW4gPSAwOworICAgICAgICAgICAgQUREX05FVyhuZXh0X3N0YXRlX29mZnNldCwgMCk7CisKKyAgICAgICAgICAgIC8qIElmIHdlIGFyZSBhZGRpbmcgYSByZXBlYXQgc3RhdGUgYXQgdGhlIG5ldyBjaGFyYWN0ZXIgcG9zaXRpb24sCisgICAgICAgICAgICB3ZSBtdXN0IGZ1ZGdlIHRoaW5ncyBzbyB0aGF0IGl0IGlzIHRoZSBvbmx5IGN1cnJlbnQgc3RhdGUuCisgICAgICAgICAgICBPdGhlcndpc2UsIGl0IG1pZ2h0IGJlIGEgZHVwbGljYXRlIG9mIG9uZSB3ZSBwcm9jZXNzZWQgYmVmb3JlLCBhbmQKKyAgICAgICAgICAgIHRoYXQgd291bGQgY2F1c2UgaXQgdG8gYmUgc2tpcHBlZC4gKi8KKworICAgICAgICAgICAgaWYgKHJlcGVhdF9zdGF0ZV9vZmZzZXQgPj0gMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBuZXh0X2FjdGl2ZV9zdGF0ZSA9IGFjdGl2ZV9zdGF0ZXM7CisgICAgICAgICAgICAgIGFjdGl2ZV9jb3VudCA9IDA7CisgICAgICAgICAgICAgIGkgPSAtMTsKKyAgICAgICAgICAgICAgQUREX0FDVElWRShyZXBlYXRfc3RhdGVfb2Zmc2V0LCAwKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKKyAgICAgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgUENSRTJfU1BUUiBwID0gc3RhcnRfc3ViamVjdCArIGxvY2FsX29mZnNldHNbMF07CisgICAgICAgICAgICAgIFBDUkUyX1NQVFIgcHAgPSBzdGFydF9zdWJqZWN0ICsgbG9jYWxfb2Zmc2V0c1sxXTsKKyAgICAgICAgICAgICAgd2hpbGUgKHAgPCBwcCkgaWYgKE5PVF9GSVJTVENVKCpwKyspKSBjaGFyY291bnQtLTsKKyAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICBBRERfTkVXX0RBVEEoLW5leHRfc3RhdGVfb2Zmc2V0LCAwLCAoY2hhcmNvdW50IC0gMSkpOworICAgICAgICAgICAgaWYgKHJlcGVhdF9zdGF0ZV9vZmZzZXQgPj0gMCkKKyAgICAgICAgICAgICAgeyBBRERfTkVXX0RBVEEoLXJlcGVhdF9zdGF0ZV9vZmZzZXQsIDAsIChjaGFyY291bnQgLSAxKSk7IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHJjICE9IFBDUkUyX0VSUk9SX05PTUFUQ0gpIHJldHVybiByYzsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKyAgICAgIC8qIEhhbmRsZSBjYWxsb3V0cyAqLworCisgICAgICBjYXNlIE9QX0NBTExPVVQ6CisgICAgICBjYXNlIE9QX0NBTExPVVRfU1RSOgorICAgICAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBjYWxsb3V0X2xlbmd0aCA9ICgqY29kZSA9PSBPUF9DQUxMT1VUKQorICAgICAgICAgICAgPyBQUklWKE9QX2xlbmd0aHMpW09QX0NBTExPVVRdIDogR0VUKGNvZGUsIDEgKyAyKkxJTktfU0laRSk7CisgICAgICAgIHJyYyA9IDA7CisKKyAgICAgICAgaWYgKG1iLT5jYWxsb3V0ICE9IE5VTEwpCisgICAgICAgICAgeworICAgICAgICAgIHBjcmUyX2NhbGxvdXRfYmxvY2sgY2I7CisgICAgICAgICAgY2IudmVyc2lvbiAgICAgICAgICA9IDE7CisgICAgICAgICAgY2IuY2FwdHVyZV90b3AgICAgICA9IDE7CisgICAgICAgICAgY2IuY2FwdHVyZV9sYXN0ICAgICA9IDA7CisgICAgICAgICAgY2Iub2Zmc2V0X3ZlY3RvciAgICA9IG9mZnNldHM7CisgICAgICAgICAgY2IubWFyayAgICAgICAgICAgICA9IE5VTEw7ICAgLyogTm8gKCpNQVJLKSBzdXBwb3J0ICovCisgICAgICAgICAgY2Iuc3ViamVjdCAgICAgICAgICA9IHN0YXJ0X3N1YmplY3Q7CisgICAgICAgICAgY2Iuc3ViamVjdF9sZW5ndGggICA9IChQQ1JFMl9TSVpFKShlbmRfc3ViamVjdCAtIHN0YXJ0X3N1YmplY3QpOworICAgICAgICAgIGNiLnN0YXJ0X21hdGNoICAgICAgPSAoUENSRTJfU0laRSkoY3VycmVudF9zdWJqZWN0IC0gc3RhcnRfc3ViamVjdCk7CisgICAgICAgICAgY2IuY3VycmVudF9wb3NpdGlvbiA9IChQQ1JFMl9TSVpFKShwdHIgLSBzdGFydF9zdWJqZWN0KTsKKyAgICAgICAgICBjYi5wYXR0ZXJuX3Bvc2l0aW9uID0gR0VUKGNvZGUsIDEpOworICAgICAgICAgIGNiLm5leHRfaXRlbV9sZW5ndGggPSBHRVQoY29kZSwgMSArIExJTktfU0laRSk7CisKKyAgICAgICAgICBpZiAoKmNvZGUgPT0gT1BfQ0FMTE9VVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNiLmNhbGxvdXRfbnVtYmVyID0gY29kZVsxICsgMipMSU5LX1NJWkVdOworICAgICAgICAgICAgY2IuY2FsbG91dF9zdHJpbmdfb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgIGNiLmNhbGxvdXRfc3RyaW5nID0gTlVMTDsKKyAgICAgICAgICAgIGNiLmNhbGxvdXRfc3RyaW5nX2xlbmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2IuY2FsbG91dF9udW1iZXIgPSAwOworICAgICAgICAgICAgY2IuY2FsbG91dF9zdHJpbmdfb2Zmc2V0ID0gR0VUKGNvZGUsIDEgKyAzKkxJTktfU0laRSk7CisgICAgICAgICAgICBjYi5jYWxsb3V0X3N0cmluZyA9IGNvZGUgKyAoMSArIDQqTElOS19TSVpFKSArIDE7CisgICAgICAgICAgICBjYi5jYWxsb3V0X3N0cmluZ19sZW5ndGggPQorICAgICAgICAgICAgICBjYWxsb3V0X2xlbmd0aCAtICgxICsgNCpMSU5LX1NJWkUpIC0gMjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmICgocnJjID0gKG1iLT5jYWxsb3V0KSgmY2IsIG1iLT5jYWxsb3V0X2RhdGEpKSA8IDApCisgICAgICAgICAgICByZXR1cm4gcnJjOyAgIC8qIEFiYW5kb24gKi8KKyAgICAgICAgICB9CisgICAgICAgIGlmIChycmMgPT0gMCkKKyAgICAgICAgICB7IEFERF9BQ1RJVkUoc3RhdGVfb2Zmc2V0ICsgY2FsbG91dF9sZW5ndGgsIDApOyB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisgICAgICBkZWZhdWx0OiAgICAgICAgLyogVW5zdXBwb3J0ZWQgb3Bjb2RlICovCisgICAgICByZXR1cm4gUENSRTJfRVJST1JfREZBX1VJVEVNOworICAgICAgfQorCisgICAgTkVYVF9BQ1RJVkVfU1RBVEU6IGNvbnRpbnVlOworCisgICAgfSAgICAgIC8qIEVuZCBvZiBsb29wIHNjYW5uaW5nIGFjdGl2ZSBzdGF0ZXMgKi8KKworICAvKiBXZSBoYXZlIGZpbmlzaGVkIHRoZSBwcm9jZXNzaW5nIGF0IHRoZSBjdXJyZW50IHN1YmplY3QgY2hhcmFjdGVyLiBJZiBubworICBuZXcgc3RhdGVzIGhhdmUgYmVlbiBzZXQgZm9yIHRoZSBuZXh0IGNoYXJhY3Rlciwgd2UgaGF2ZSBmb3VuZCBhbGwgdGhlCisgIG1hdGNoZXMgdGhhdCB3ZSBhcmUgZ29pbmcgdG8gZmluZC4gSWYgd2UgYXJlIGF0IHRoZSB0b3AgbGV2ZWwgYW5kIHBhcnRpYWwKKyAgbWF0Y2hpbmcgaGFzIGJlZW4gcmVxdWVzdGVkLCBjaGVjayBmb3IgYXBwcm9wcmlhdGUgY29uZGl0aW9ucy4KKworICBUaGUgImZvcmNlZF8gZmFpbCIgdmFyaWFibGUgY291bnRzIHRoZSBudW1iZXIgb2YgKCpGKSBlbmNvdW50ZXJlZCBmb3IgdGhlCisgIGNoYXJhY3Rlci4gSWYgaXQgaXMgZXF1YWwgdG8gdGhlIG9yaWdpbmFsIGFjdGl2ZV9jb3VudCAoc2F2ZWQgaW4KKyAgd29ya3NwYWNlWzFdKSBpdCBtZWFucyB0aGF0ICgqRikgd2FzIGZvdW5kIG9uIGV2ZXJ5IGFjdGl2ZSBzdGF0ZS4gSW4gdGhpcworICBjYXNlIHdlIGRvbid0IHdhbnQgdG8gZ2l2ZSBhIHBhcnRpYWwgbWF0Y2guCisKKyAgVGhlICJjb3VsZF9jb250aW51ZSIgdmFyaWFibGUgaXMgdHJ1ZSBpZiBhIHN0YXRlIGNvdWxkIGhhdmUgY29udGludWVkIGJ1dAorICBmb3IgdGhlIGZhY3QgdGhhdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IHdhcyByZWFjaGVkLiAqLworCisgIGlmIChuZXdfY291bnQgPD0gMCkKKyAgICB7CisgICAgaWYgKHJsZXZlbCA9PSAxICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRvcCBsZXZlbCwgYW5kICovCisgICAgICAgIGNvdWxkX2NvbnRpbnVlICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgY291bGQgZ28gb24sIGFuZCAqLworICAgICAgICBmb3JjZWRfZmFpbCAhPSB3b3Jrc3BhY2VbMV0gJiYgICAgICAgICAgICAgICAvKiBOb3QgYWxsIGZvcmNlZCBmYWlsICYgKi8KKyAgICAgICAgKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZWl0aGVyLi4uICovCisgICAgICAgIChtYi0+bW9wdGlvbnMgJiBQQ1JFMl9QQVJUSUFMX0hBUkQpICE9IDAgICAgICAvKiBIYXJkIHBhcnRpYWwgKi8KKyAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3IuLi4gKi8KKyAgICAgICAgKChtYi0+bW9wdGlvbnMgJiBQQ1JFMl9QQVJUSUFMX1NPRlQpICE9IDAgJiYgIC8qIFNvZnQgcGFydGlhbCBhbmQgKi8KKyAgICAgICAgIG1hdGNoX2NvdW50IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gbWF0Y2hlcyAqLworICAgICAgICApICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbmQuLi4gKi8KKyAgICAgICAgKAorICAgICAgICBwYXJ0aWFsX25ld2xpbmUgfHwgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFaXRoZXIgcGFydGlhbCBOTCAqLworICAgICAgICAgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBvciAuLi4gKi8KKyAgICAgICAgICBwdHIgPj0gZW5kX3N1YmplY3QgJiYgICAgICAgICAgICAgICAgLyogRW5kIG9mIHN1YmplY3QgYW5kICovCisgICAgICAgICAgcHRyID4gbWItPnN0YXJ0X3VzZWRfcHRyKSAgICAgICAgICAgIC8qIEluc3BlY3RlZCBub24tZW1wdHkgc3RyaW5nICovCisgICAgICAgICAgKQorICAgICAgICApCisgICAgICBtYXRjaF9jb3VudCA9IFBDUkUyX0VSUk9SX1BBUlRJQUw7CisgICAgYnJlYWs7ICAgICAgICAvKiBJbiBlZmZlY3QsICJyZXR1cm4iLCBidXQgc2VlIHRoZSBjb21tZW50IGJlbG93ICovCisgICAgfQorCisgIC8qIE9uZSBvciBtb3JlIHN0YXRlcyBhcmUgYWN0aXZlIGZvciB0aGUgbmV4dCBjaGFyYWN0ZXIuICovCisKKyAgcHRyICs9IGNsZW47ICAgIC8qIEFkdmFuY2UgdG8gbmV4dCBzdWJqZWN0IGNoYXJhY3RlciAqLworICB9ICAgICAgICAgICAgICAgLyogTG9vcCB0byBtb3ZlIGFsb25nIHRoZSBzdWJqZWN0IHN0cmluZyAqLworCisvKiBDb250cm9sIGdldHMgaGVyZSBmcm9tICJicmVhayIgYSBmZXcgbGluZXMgYWJvdmUuIFdlIGRvIGl0IHRoaXMgd2F5IGJlY2F1c2UKK2lmIHdlIHVzZSAicmV0dXJuIiBhYm92ZSwgd2UgaGF2ZSBjb21waWxlciB0cm91YmxlLiBTb21lIGNvbXBpbGVycyB3YXJuIGlmCit0aGVyZSdzIG5vdGhpbmcgaGVyZSBiZWNhdXNlIHRoZXkgdGhpbmsgdGhlIGZ1bmN0aW9uIGRvZXNuJ3QgcmV0dXJuIGEgdmFsdWUuIE9uCit0aGUgb3RoZXIgaGFuZCwgaWYgd2UgcHV0IGEgZHVtbXkgc3RhdGVtZW50IGhlcmUsIHNvbWUgbW9yZSBjbGV2ZXIgY29tcGlsZXJzCitjb21wbGFpbiB0aGF0IGl0IGNhbid0IGJlIHJlYWNoZWQuIFNpZ2guICovCisKK3JldHVybiBtYXRjaF9jb3VudDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICBNYXRjaCBhIHBhdHRlcm4gdXNpbmcgdGhlIERGQSBhbGdvcml0aG0gICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiBtYXRjaGVzIGEgY29tcGlsZWQgcGF0dGVybiB0byBhIHN1YmplY3Qgc3RyaW5nLCB1c2luZyB0aGUKK2FsdGVybmF0ZSBtYXRjaGluZyBhbGdvcml0aG0gdGhhdCBmaW5kcyBhbGwgbWF0Y2hlcyBhdCBvbmNlLgorCitBcmd1bWVudHM6CisgIGNvZGUgICAgICAgICAgcG9pbnRzIHRvIHRoZSBjb21waWxlZCBwYXR0ZXJuCisgIHN1YmplY3QgICAgICAgc3ViamVjdCBzdHJpbmcKKyAgbGVuZ3RoICAgICAgICBsZW5ndGggb2Ygc3ViamVjdCBzdHJpbmcKKyAgc3RhcnRvZmZzZXQgICB3aGVyZSB0byBzdGFydCBtYXRjaGluZyBpbiB0aGUgc3ViamVjdAorICBvcHRpb25zICAgICAgIG9wdGlvbiBiaXRzCisgIG1hdGNoX2RhdGEgICAgcG9pbnRzIHRvIGEgbWF0Y2ggZGF0YSBzdHJ1Y3R1cmUKKyAgZ2NvbnRleHQgICAgICBwb2ludHMgdG8gYSBtYXRjaCBjb250ZXh0CisgIHdvcmtzcGFjZSAgICAgcG9pbnRlciB0byB3b3Jrc3BhY2UKKyAgd3Njb3VudCAgICAgICBzaXplIG9mIHdvcmtzcGFjZQorCitSZXR1cm5zOiAgICAgICAgPiAwID0+IG51bWJlciBvZiBtYXRjaCBvZmZzZXQgcGFpcnMgcGxhY2VkIGluIG9mZnNldHMKKyAgICAgICAgICAgICAgICA9IDAgPT4gb2Zmc2V0cyBvdmVyZmxvd2VkOyBsb25nZXN0IG1hdGNoZXMgYXJlIHByZXNlbnQKKyAgICAgICAgICAgICAgICAgLTEgPT4gZmFpbGVkIHRvIG1hdGNoCisgICAgICAgICAgICAgICA8IC0xID0+IHNvbWUga2luZCBvZiB1bmV4cGVjdGVkIHByb2JsZW0KKyovCisKK1BDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX2RmYV9tYXRjaChjb25zdCBwY3JlMl9jb2RlICpjb2RlLCBQQ1JFMl9TUFRSIHN1YmplY3QsIFBDUkUyX1NJWkUgbGVuZ3RoLAorICBQQ1JFMl9TSVpFIHN0YXJ0X29mZnNldCwgdWludDMyX3Qgb3B0aW9ucywgcGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgcGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQsIGludCAqd29ya3NwYWNlLCBzaXplX3Qgd3Njb3VudCkKK3sKK2NvbnN0IHBjcmUyX3JlYWxfY29kZSAqcmUgPSAoY29uc3QgcGNyZTJfcmVhbF9jb2RlICopY29kZTsKKworUENSRTJfU1BUUiBzdGFydF9tYXRjaDsKK1BDUkUyX1NQVFIgZW5kX3N1YmplY3Q7CitQQ1JFMl9TUFRSIGJ1bXBhbG9uZ19saW1pdDsKK1BDUkUyX1NQVFIgcmVxX2N1X3B0cjsKKworQk9PTCB1dGYsIGFuY2hvcmVkLCBzdGFydGxpbmUsIGZpcnN0bGluZTsKKworQk9PTCBoYXNfZmlyc3RfY3UgPSBGQUxTRTsKK0JPT0wgaGFzX3JlcV9jdSA9IEZBTFNFOworUENSRTJfVUNIQVIgZmlyc3RfY3UgPSAwOworUENSRTJfVUNIQVIgZmlyc3RfY3UyID0gMDsKK1BDUkUyX1VDSEFSIHJlcV9jdSA9IDA7CitQQ1JFMl9VQ0hBUiByZXFfY3UyID0gMDsKKworY29uc3QgdWludDhfdCAqc3RhcnRfYml0cyA9IE5VTEw7CisKKy8qIFdlIG5lZWQgdG8gaGF2ZSBtYiBwb2ludGluZyB0byBhIG1hdGNoIGJsb2NrLCBiZWNhdXNlIHRoZSBJU19ORVdMSU5FIG1hY3JvCitpcyB1c2VkIGJlbG93LCBhbmQgaXQgZXhwZWN0cyBOTEJMT0NLIHRvIGJlIGRlZmluZWQgYXMgYSBwb2ludGVyLiAqLworCitkZmFfbWF0Y2hfYmxvY2sgYWN0dWFsX21hdGNoX2Jsb2NrOworZGZhX21hdGNoX2Jsb2NrICptYiA9ICZhY3R1YWxfbWF0Y2hfYmxvY2s7CisKKy8qIEEgbGVuZ3RoIGVxdWFsIHRvIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCBpbXBsaWVzIGEgemVyby10ZXJtaW5hdGVkCitzdWJqZWN0IHN0cmluZy4gKi8KKworaWYgKGxlbmd0aCA9PSBQQ1JFMl9aRVJPX1RFUk1JTkFURUQpIGxlbmd0aCA9IFBSSVYoc3RybGVuKShzdWJqZWN0KTsKKworLyogUGxhdXNpYmlsaXR5IGNoZWNrcyAqLworCitpZiAoKG9wdGlvbnMgJiB+UFVCTElDX0RGQV9NQVRDSF9PUFRJT05TKSAhPSAwKSByZXR1cm4gUENSRTJfRVJST1JfQkFET1BUSU9OOworaWYgKHJlID09IE5VTEwgfHwgc3ViamVjdCA9PSBOVUxMIHx8IHdvcmtzcGFjZSA9PSBOVUxMIHx8IG1hdGNoX2RhdGEgPT0gTlVMTCkKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX05VTEw7CitpZiAod3Njb3VudCA8IDIwKSByZXR1cm4gUENSRTJfRVJST1JfREZBX1dTU0laRTsKK2lmIChzdGFydF9vZmZzZXQgPiBsZW5ndGgpIHJldHVybiBQQ1JFMl9FUlJPUl9CQURPRkZTRVQ7CisKKy8qIENoZWNrIHRoYXQgdGhlIGZpcnN0IGZpZWxkIGluIHRoZSBibG9jayBpcyB0aGUgbWFnaWMgbnVtYmVyLiBJZiBpdCBpcyBub3QsCityZXR1cm4gd2l0aCBQQ1JFMl9FUlJPUl9CQURNQUdJQy4gKi8KKworaWYgKHJlLT5tYWdpY19udW1iZXIgIT0gTUFHSUNfTlVNQkVSKSByZXR1cm4gUENSRTJfRVJST1JfQkFETUFHSUM7CisKKy8qIENoZWNrIHRoZSBjb2RlIHVuaXQgd2lkdGguICovCisKK2lmICgocmUtPmZsYWdzICYgUENSRTJfTU9ERV9NQVNLKSAhPSBQQ1JFMl9DT0RFX1VOSVRfV0lEVEgvOCkKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE1PREU7CisKKy8qIFBDUkUyX05PVEVNUFRZIGFuZCBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIGFyZSBtYXRjaC10aW1lIGZsYWdzIGluIHRoZQorb3B0aW9ucyB2YXJpYWJsZSBmb3IgdGhpcyBmdW5jdGlvbi4gVXNlcnMgb2YgUENSRTIgd2hvIGFyZSBub3QgY2FsbGluZyB0aGUKK2Z1bmN0aW9uIGRpcmVjdGx5IHdvdWxkIGxpa2UgdG8gaGF2ZSBhIHdheSBvZiBzZXR0aW5nIHRoZXNlIGZsYWdzLCBpbiB0aGUgc2FtZQord2F5IHRoYXQgdGhleSBjYW4gc2V0IHBjcmUyX2NvbXBpbGUoKSBmbGFncyBsaWtlIFBDUkUyX05PX0FVVE9QT1NTRVNTIHdpdGgKK2NvbnN0cnVjdGlvbnMgbGlrZSAoKk5PX0FVVE9QT1NTRVNTKS4gVG8gZW5hYmxlIHRoaXMsICgqTk9URU1QVFkpIGFuZAorKCpOT1RFTVBUWV9BVFNUQVJUKSBzZXQgYml0cyBpbiB0aGUgcGF0dGVybidzICJmbGFnIiBmdW5jdGlvbiB3aGljaCBjYW4gbm93IGJlCit0cmFuc2ZlcnJlZCB0byB0aGUgb3B0aW9ucyBmb3IgdGhpcyBmdW5jdGlvbi4gVGhlIGJpdHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUKK2FkamFjZW50LCBidXQgZG8gbm90IGhhdmUgdGhlIHNhbWUgdmFsdWVzLiBUaGlzIGJpdCBvZiBCb29sZWFuIHRyaWNrZXJ5IGFzc3VtZXMKK3RoYXQgdGhlIG1hdGNoLXRpbWUgYml0cyBhcmUgbm90IG1vcmUgc2lnbmlmaWNhbnQgdGhhbiB0aGUgZmxhZyBiaXRzLiBJZiBieQorYWNjaWRlbnQgdGhpcyBpcyBub3QgdGhlIGNhc2UsIGEgY29tcGlsZS10aW1lIGRpdmlzaW9uIGJ5IHplcm8gZXJyb3Igd2lsbAorb2NjdXIuICovCisKKyNkZWZpbmUgRkYgKFBDUkUyX05PVEVNUFRZX1NFVHxQQ1JFMl9ORV9BVFNUX1NFVCkKKyNkZWZpbmUgT08gKFBDUkUyX05PVEVNUFRZfFBDUkUyX05PVEVNUFRZX0FUU1RBUlQpCitvcHRpb25zIHw9IChyZS0+ZmxhZ3MgJiBGRikgLyAoKEZGICYgKH5GRisxKSkgLyAoT08gJiAofk9PKzEpKSk7CisjdW5kZWYgRkYKKyN1bmRlZiBPTworCisvKiBJZiByZXN0YXJ0aW5nIGFmdGVyIGEgcGFydGlhbCBtYXRjaCwgZG8gc29tZSBzYW5pdHkgY2hlY2tzIG9uIHRoZSBjb250ZW50cworb2YgdGhlIHdvcmtzcGFjZS4gKi8KKworaWYgKChvcHRpb25zICYgUENSRTJfREZBX1JFU1RBUlQpICE9IDApCisgIHsKKyAgaWYgKCh3b3Jrc3BhY2VbMF0gJiAoLTIpKSAhPSAwIHx8IHdvcmtzcGFjZVsxXSA8IDEgfHwKKyAgICB3b3Jrc3BhY2VbMV0gPiAoaW50KSgod3Njb3VudCAtIDIpL0lOVFNfUEVSX1NUQVRFQkxPQ0spKQorICAgICAgcmV0dXJuIFBDUkUyX0VSUk9SX0RGQV9CQURSRVNUQVJUOworICB9CisKKy8qIFNldCBzb21lIGxvY2FsIHZhbHVlcyAqLworCit1dGYgPSAocmUtPm92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX1VURikgIT0gMDsKK3N0YXJ0X21hdGNoID0gc3ViamVjdCArIHN0YXJ0X29mZnNldDsKK2VuZF9zdWJqZWN0ID0gc3ViamVjdCArIGxlbmd0aDsKK3JlcV9jdV9wdHIgPSBzdGFydF9tYXRjaCAtIDE7CithbmNob3JlZCA9IChvcHRpb25zICYgKFBDUkUyX0FOQ0hPUkVEfFBDUkUyX0RGQV9SRVNUQVJUKSkgIT0gMCB8fAorICAocmUtPm92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX0FOQ0hPUkVEKSAhPSAwOworCisvKiBUaGUgIm11c3QgYmUgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZSIgZmxhZ3MgYXJlIHVzZWQgaW4gYSBsb29wIHdoZW4gZmluZGluZword2hlcmUgdG8gc3RhcnQuICovCisKK3N0YXJ0bGluZSA9IChyZS0+ZmxhZ3MgJiBQQ1JFMl9TVEFSVExJTkUpICE9IDA7CitmaXJzdGxpbmUgPSAocmUtPm92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX0ZJUlNUTElORSkgIT0gMDsKK2J1bXBhbG9uZ19saW1pdCA9IGVuZF9zdWJqZWN0OworCisvKiBHZXQgZGF0YSBmcm9tIHRoZSBtYXRjaCBjb250ZXh0LCBpZiBwcmVzZW50LCBhbmQgZmlsbCBpbiB0aGUgZmllbGRzIGluIHRoZQorbWF0Y2ggYmxvY2suIEl0IGlzIGFuIGVycm9yIHRvIHNldCBhbiBvZmZzZXQgbGltaXQgd2l0aG91dCBzZXR0aW5nIHRoZSBmbGFnIGF0Citjb21waWxlIHRpbWUuICovCisKK2lmIChtY29udGV4dCA9PSBOVUxMKQorICB7CisgIG1iLT5jYWxsb3V0ID0gTlVMTDsKKyAgbWItPm1lbWN0bCA9IHJlLT5tZW1jdGw7CisgIH0KK2Vsc2UKKyAgeworICBpZiAobWNvbnRleHQtPm9mZnNldF9saW1pdCAhPSBQQ1JFMl9VTlNFVCkKKyAgICB7CisgICAgaWYgKChyZS0+b3ZlcmFsbF9vcHRpb25zICYgUENSRTJfVVNFX09GRlNFVF9MSU1JVCkgPT0gMCkKKyAgICAgIHJldHVybiBQQ1JFMl9FUlJPUl9CQURPRkZTRVRMSU1JVDsKKyAgICBidW1wYWxvbmdfbGltaXQgPSBzdWJqZWN0ICsgbWNvbnRleHQtPm9mZnNldF9saW1pdDsKKyAgICB9CisgIG1iLT5jYWxsb3V0ID0gbWNvbnRleHQtPmNhbGxvdXQ7CisgIG1iLT5jYWxsb3V0X2RhdGEgPSBtY29udGV4dC0+Y2FsbG91dF9kYXRhOworICBtYi0+bWVtY3RsID0gbWNvbnRleHQtPm1lbWN0bDsKKyAgfQorCittYi0+c3RhcnRfY29kZSA9IChQQ1JFMl9VQ0hBUiAqKSgodWludDhfdCAqKXJlICsgc2l6ZW9mKHBjcmUyX3JlYWxfY29kZSkpICsKKyAgcmUtPm5hbWVfY291bnQgKiByZS0+bmFtZV9lbnRyeV9zaXplOworbWItPnRhYmxlcyA9IHJlLT50YWJsZXM7CittYi0+c3RhcnRfc3ViamVjdCA9IHN1YmplY3Q7CittYi0+ZW5kX3N1YmplY3QgPSBlbmRfc3ViamVjdDsKK21iLT5zdGFydF9vZmZzZXQgPSBzdGFydF9vZmZzZXQ7CittYi0+bW9wdGlvbnMgPSBvcHRpb25zOworbWItPnBvcHRpb25zID0gcmUtPm92ZXJhbGxfb3B0aW9uczsKKworLyogUHJvY2VzcyB0aGUgXFIgYW5kIG5ld2xpbmUgc2V0dGluZ3MuICovCisKK21iLT5ic3JfY29udmVudGlvbiA9IHJlLT5ic3JfY29udmVudGlvbjsKK21iLT5ubHR5cGUgPSBOTFRZUEVfRklYRUQ7Citzd2l0Y2gocmUtPm5ld2xpbmVfY29udmVudGlvbikKKyAgeworICBjYXNlIFBDUkUyX05FV0xJTkVfQ1I6CisgIG1iLT5ubGxlbiA9IDE7CisgIG1iLT5ubFswXSA9IENIQVJfQ1I7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfTkVXTElORV9MRjoKKyAgbWItPm5sbGVuID0gMTsKKyAgbWItPm5sWzBdID0gQ0hBUl9OTDsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9ORVdMSU5FX0NSTEY6CisgIG1iLT5ubGxlbiA9IDI7CisgIG1iLT5ubFswXSA9IENIQVJfQ1I7CisgIG1iLT5ubFsxXSA9IENIQVJfTkw7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfTkVXTElORV9BTlk6CisgIG1iLT5ubHR5cGUgPSBOTFRZUEVfQU5ZOworICBicmVhazsKKworICBjYXNlIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRjoKKyAgbWItPm5sdHlwZSA9IE5MVFlQRV9BTllDUkxGOworICBicmVhazsKKworICBkZWZhdWx0OiByZXR1cm4gUENSRTJfRVJST1JfSU5URVJOQUw7CisgIH0KKworLyogQ2hlY2sgYSBVVEYgc3RyaW5nIGZvciB2YWxpZGl0eSBpZiByZXF1aXJlZC4gRm9yIDgtYml0IGFuZCAxNi1iaXQgc3RyaW5ncywKK3dlIG11c3QgYWxzbyBjaGVjayB0aGF0IGEgc3RhcnRpbmcgb2Zmc2V0IGRvZXMgbm90IHBvaW50IGludG8gdGhlIG1pZGRsZSBvZiBhCittdWx0aXVuaXQgY2hhcmFjdGVyLiBXZSBjaGVjayBvbmx5IHRoZSBwb3J0aW9uIG9mIHRoZSBzdWJqZWN0IHRoYXQgaXMgZ29pbmcgdG8KK2JlIGluc3BlY3RlZCBkdXJpbmcgbWF0Y2hpbmcgLSBmcm9tIHRoZSBvZmZzZXQgbWludXMgdGhlIG1heGltdW0gYmFjayByZWZlcmVuY2UKK3RvIHRoZSBnaXZlbiBsZW5ndGguIFRoaXMgc2F2ZXMgdGltZSB3aGVuIGEgc21hbGwgcGFydCBvZiBhIGxhcmdlIHN1YmplY3QgaXMKK2JlaW5nIG1hdGNoZWQgYnkgdGhlIHVzZSBvZiBhIHN0YXJ0aW5nIG9mZnNldC4gTm90ZSB0aGF0IHRoZSBtYXhpbXVtIGxvb2tiZWhpbmQKK2lzIGEgbnVtYmVyIG9mIGNoYXJhY3RlcnMsIG5vdCBjb2RlIHVuaXRzLiAqLworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCitpZiAodXRmICYmIChvcHRpb25zICYgUENSRTJfTk9fVVRGX0NIRUNLKSA9PSAwKQorICB7CisgIFBDUkUyX1NQVFIgY2hlY2tfc3ViamVjdCA9IHN0YXJ0X21hdGNoOyAgLyogc3RhcnRfbWF0Y2ggaW5jbHVkZXMgb2Zmc2V0ICovCisKKyAgaWYgKHN0YXJ0X29mZnNldCA+IDApCisgICAgeworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSAzMgorICAgIHVuc2lnbmVkIGludCBpOworICAgIGlmIChzdGFydF9tYXRjaCA8IGVuZF9zdWJqZWN0ICYmIE5PVF9GSVJTVENVKCpzdGFydF9tYXRjaCkpCisgICAgICByZXR1cm4gUENSRTJfRVJST1JfQkFEVVRGT0ZGU0VUOworICAgIGZvciAoaSA9IHJlLT5tYXhfbG9va2JlaGluZDsgaSA+IDAgJiYgY2hlY2tfc3ViamVjdCA+IHN1YmplY3Q7IGktLSkKKyAgICAgIHsKKyAgICAgIGNoZWNrX3N1YmplY3QtLTsKKyAgICAgIHdoaWxlIChjaGVja19zdWJqZWN0ID4gc3ViamVjdCAmJgorI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgICAgICAoKmNoZWNrX3N1YmplY3QgJiAweGMwKSA9PSAweDgwKQorI2Vsc2UgIC8qIDE2LWJpdCAqLworICAgICAgKCpjaGVja19zdWJqZWN0ICYgMHhmYzAwKSA9PSAweGRjMDApCisjZW5kaWYgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDggKi8KKyAgICAgICAgY2hlY2tfc3ViamVjdC0tOworICAgICAgfQorI2Vsc2UgICAvKiBJbiB0aGUgMzItYml0IGxpYnJhcnksIG9uZSBjb2RlIHVuaXQgZXF1YWxzIG9uZSBjaGFyYWN0ZXIuICovCisgICAgY2hlY2tfc3ViamVjdCAtPSByZS0+bWF4X2xvb2tiZWhpbmQ7CisgICAgaWYgKGNoZWNrX3N1YmplY3QgPCBzdWJqZWN0KSBjaGVja19zdWJqZWN0ID0gc3ViamVjdDsKKyNlbmRpZiAgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDMyICovCisgICAgfQorCisgIC8qIFZhbGlkYXRlIHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoZSBzdWJqZWN0LiBBZnRlciBhbiBlcnJvciwgYWRqdXN0IHRoZQorICBvZmZzZXQgdG8gYmUgYW4gYWJzb2x1dGUgb2Zmc2V0IGluIHRoZSB3aG9sZSBzdHJpbmcuICovCisKKyAgbWF0Y2hfZGF0YS0+cmMgPSBQUklWKHZhbGlkX3V0ZikoY2hlY2tfc3ViamVjdCwKKyAgICBsZW5ndGggLSAoY2hlY2tfc3ViamVjdCAtIHN1YmplY3QpLCAmKG1hdGNoX2RhdGEtPnN0YXJ0Y2hhcikpOworICBpZiAobWF0Y2hfZGF0YS0+cmMgIT0gMCkKKyAgICB7CisgICAgbWF0Y2hfZGF0YS0+c3RhcnRjaGFyICs9IGNoZWNrX3N1YmplY3QgLSBzdWJqZWN0OworICAgIHJldHVybiBtYXRjaF9kYXRhLT5yYzsKKyAgICB9CisgIH0KKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKy8qIFNldCB1cCB0aGUgZmlyc3QgY29kZSB1bml0IHRvIG1hdGNoLCBpZiBhdmFpbGFibGUuIFRoZSBmaXJzdF9jb2RldW5pdCB2YWx1ZQoraXMgbmV2ZXIgc2V0IGZvciBhbiBhbmNob3JlZCByZWd1bGFyIGV4cHJlc3Npb24sIGJ1dCB0aGUgYW5jaG9yaW5nIG1heSBiZQorZm9yY2VkIGF0IHJ1biB0aW1lLCBzbyB3ZSBoYXZlIHRvIHRlc3QgZm9yIGFuY2hvcmluZy4gVGhlIGZpcnN0IGNvZGUgdW5pdCBtYXkKK2JlIHVuc2V0IGZvciBhbiB1bmFuY2hvcmVkIHBhdHRlcm4sIG9mIGNvdXJzZS4gSWYgdGhlcmUncyBubyBmaXJzdCBjb2RlIHVuaXQKK3RoZXJlIG1heSBiZSBhIGJpdG1hcCBvZiBwb3NzaWJsZSBmaXJzdCBjaGFyYWN0ZXJzLiAqLworCitpZiAoIWFuY2hvcmVkKQorICB7CisgIGlmICgocmUtPmZsYWdzICYgUENSRTJfRklSU1RTRVQpICE9IDApCisgICAgeworICAgIGhhc19maXJzdF9jdSA9IFRSVUU7CisgICAgZmlyc3RfY3UgPSBmaXJzdF9jdTIgPSAoUENSRTJfVUNIQVIpKHJlLT5maXJzdF9jb2RldW5pdCk7CisgICAgaWYgKChyZS0+ZmxhZ3MgJiBQQ1JFMl9GSVJTVENBU0VMRVNTKSAhPSAwKQorICAgICAgeworICAgICAgZmlyc3RfY3UyID0gVEFCTEVfR0VUKGZpcnN0X2N1LCBtYi0+dGFibGVzICsgZmNjX29mZnNldCwgZmlyc3RfY3UpOworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgICBpZiAodXRmICYmIGZpcnN0X2N1ID4gMTI3KSBmaXJzdF9jdTIgPSBVQ0RfT1RIRVJDQVNFKGZpcnN0X2N1KTsKKyNlbmRpZgorICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIGlmICghc3RhcnRsaW5lICYmIChyZS0+ZmxhZ3MgJiBQQ1JFMl9GSVJTVE1BUFNFVCkgIT0gMCkKKyAgICAgIHN0YXJ0X2JpdHMgPSByZS0+c3RhcnRfYml0bWFwOworICB9CisKKy8qIEZvciBhbmNob3JlZCBvciB1bmFuY2hvcmVkIG1hdGNoZXMsIHRoZXJlIG1heSBiZSBhICJsYXN0IGtub3duIHJlcXVpcmVkCitjaGFyYWN0ZXIiIHNldC4gKi8KKworaWYgKChyZS0+ZmxhZ3MgJiBQQ1JFMl9MQVNUU0VUKSAhPSAwKQorICB7CisgIGhhc19yZXFfY3UgPSBUUlVFOworICByZXFfY3UgPSByZXFfY3UyID0gKFBDUkUyX1VDSEFSKShyZS0+bGFzdF9jb2RldW5pdCk7CisgIGlmICgocmUtPmZsYWdzICYgUENSRTJfTEFTVENBU0VMRVNTKSAhPSAwKQorICAgIHsKKyAgICByZXFfY3UyID0gVEFCTEVfR0VUKHJlcV9jdSwgbWItPnRhYmxlcyArIGZjY19vZmZzZXQsIHJlcV9jdSk7CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICBpZiAodXRmICYmIHJlcV9jdSA+IDEyNykgcmVxX2N1MiA9IFVDRF9PVEhFUkNBU0UocmVxX2N1KTsKKyNlbmRpZgorICAgIH0KKyAgfQorCisvKiBGaWxsIGluIGZpZWxkcyB0aGF0IGFyZSBhbHdheXMgcmV0dXJuZWQgaW4gdGhlIG1hdGNoIGRhdGEuICovCisKK21hdGNoX2RhdGEtPmNvZGUgPSByZTsKK21hdGNoX2RhdGEtPnN1YmplY3QgPSBzdWJqZWN0OworbWF0Y2hfZGF0YS0+bWFyayA9IE5VTEw7CittYXRjaF9kYXRhLT5tYXRjaGVkYnkgPSBQQ1JFMl9NQVRDSEVEQllfREZBX0lOVEVSUFJFVEVSOworCisvKiBDYWxsIHRoZSBtYWluIG1hdGNoaW5nIGZ1bmN0aW9uLCBsb29waW5nIGZvciBhIG5vbi1hbmNob3JlZCByZWdleCBhZnRlciBhCitmYWlsZWQgbWF0Y2guIElmIG5vdCByZXN0YXJ0aW5nLCBwZXJmb3JtIGNlcnRhaW4gb3B0aW1pemF0aW9ucyBhdCB0aGUgc3RhcnQgb2YKK2EgbWF0Y2guICovCisKK2ZvciAoOzspCisgIHsKKyAgaW50IHJjOworCisgIC8qIC0tLS0tLS0tLS0tLS0tLS0tIFN0YXJ0IG9mIG1hdGNoIG9wdGltaXphdGlvbnMgLS0tLS0tLS0tLS0tLS0tLSAqLworCisgIC8qIFRoZXJlIGFyZSBzb21lIG9wdGltaXphdGlvbnMgdGhhdCBhdm9pZCBydW5uaW5nIHRoZSBtYXRjaCBpZiBhIGtub3duCisgIHN0YXJ0aW5nIHBvaW50IGlzIG5vdCBmb3VuZCwgb3IgaWYgYSBrbm93biBsYXRlciBjb2RlIHVuaXQgaXMgbm90IHByZXNlbnQuCisgIEhvd2V2ZXIsIHRoZXJlIGlzIGFuIG9wdGlvbiAoc2V0dGFibGUgYXQgY29tcGlsZSB0aW1lKSB0aGF0IGRpc2FibGVzCisgIHRoZXNlLCBmb3IgdGVzdGluZyBhbmQgZm9yIGVuc3VyaW5nIHRoYXQgYWxsIGNhbGxvdXRzIGRvIGFjdHVhbGx5IG9jY3VyLgorICBUaGUgb3B0aW1pemF0aW9ucyBtdXN0IGFsc28gYmUgYXZvaWRlZCB3aGVuIHJlc3RhcnRpbmcgYSBERkEgbWF0Y2guICovCisKKyAgaWYgKChyZS0+b3ZlcmFsbF9vcHRpb25zICYgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUpID09IDAgJiYKKyAgICAgIChvcHRpb25zICYgUENSRTJfREZBX1JFU1RBUlQpID09IDApCisgICAgeworICAgIFBDUkUyX1NQVFIgc2F2ZV9lbmRfc3ViamVjdCA9IGVuZF9zdWJqZWN0OworCisgICAgLyogSWYgZmlyc3RsaW5lIGlzIFRSVUUsIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2ggaXMgY29uc3RyYWluZWQgdG8gdGhlIGZpcnN0CisgICAgbGluZSBvZiBhIG11bHRpbGluZSBzdHJpbmcuIFRoYXQgaXMsIHRoZSBtYXRjaCBtdXN0IGJlIGJlZm9yZSBvciBhdCB0aGUKKyAgICBmaXJzdCBuZXdsaW5lLiBJbXBsZW1lbnQgdGhpcyBieSB0ZW1wb3JhcmlseSBhZGp1c3RpbmcgZW5kX3N1YmplY3Qgc28gdGhhdAorICAgIHdlIHN0b3AgdGhlIG9wdGltaXphdGlvbiBzY2FucyBhdCBhIG5ld2xpbmUuIElmIHRoZSBtYXRjaCBmYWlscyBhdCB0aGUKKyAgICBuZXdsaW5lLCBsYXRlciBjb2RlIGJyZWFrcyB0aGlzIGxvb3AuICovCisKKyAgICBpZiAoZmlyc3RsaW5lKQorICAgICAgeworICAgICAgUENSRTJfU1BUUiB0ID0gc3RhcnRfbWF0Y2g7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBpZiAodXRmKQorICAgICAgICB7CisgICAgICAgIHdoaWxlICh0IDwgbWItPmVuZF9zdWJqZWN0ICYmICFJU19ORVdMSU5FKHQpKQorICAgICAgICAgIHsKKyAgICAgICAgICB0Kys7CisgICAgICAgICAgQUNST1NTQ0hBUih0IDwgZW5kX3N1YmplY3QsICp0LCB0KyspOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICB3aGlsZSAodCA8IG1iLT5lbmRfc3ViamVjdCAmJiAhSVNfTkVXTElORSh0KSkgdCsrOworICAgICAgZW5kX3N1YmplY3QgPSB0OworICAgICAgfQorCisgICAgLyogQWR2YW5jZSB0byBhIHVuaXF1ZSBmaXJzdCBjb2RlIHVuaXQgaWYgdGhlcmUgaXMgb25lLiAqLworCisgICAgaWYgKGhhc19maXJzdF9jdSkKKyAgICAgIHsKKyAgICAgIFBDUkUyX1VDSEFSIHNtYzsKKyAgICAgIGlmIChmaXJzdF9jdSAhPSBmaXJzdF9jdTIpCisgICAgICAgIHdoaWxlIChzdGFydF9tYXRjaCA8IGVuZF9zdWJqZWN0ICYmCisgICAgICAgICAgKHNtYyA9IFVDSEFSMjFURVNUKHN0YXJ0X21hdGNoKSkgIT0gZmlyc3RfY3UgJiYgc21jICE9IGZpcnN0X2N1MikKKyAgICAgICAgICBzdGFydF9tYXRjaCsrOworICAgICAgZWxzZQorICAgICAgICB3aGlsZSAoc3RhcnRfbWF0Y2ggPCBlbmRfc3ViamVjdCAmJiBVQ0hBUjIxVEVTVChzdGFydF9tYXRjaCkgIT0gZmlyc3RfY3UpCisgICAgICAgICAgc3RhcnRfbWF0Y2grKzsKKyAgICAgIH0KKworICAgIC8qIE9yIHRvIGp1c3QgYWZ0ZXIgYSBsaW5lYnJlYWsgZm9yIGEgbXVsdGlsaW5lIG1hdGNoICovCisKKyAgICBlbHNlIGlmIChzdGFydGxpbmUpCisgICAgICB7CisgICAgICBpZiAoc3RhcnRfbWF0Y2ggPiBtYi0+c3RhcnRfc3ViamVjdCArIHN0YXJ0X29mZnNldCkKKyAgICAgICAgeworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICBpZiAodXRmKQorICAgICAgICAgIHsKKyAgICAgICAgICB3aGlsZSAoc3RhcnRfbWF0Y2ggPCBlbmRfc3ViamVjdCAmJiAhV0FTX05FV0xJTkUoc3RhcnRfbWF0Y2gpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgc3RhcnRfbWF0Y2grKzsKKyAgICAgICAgICAgIEFDUk9TU0NIQVIoc3RhcnRfbWF0Y2ggPCBlbmRfc3ViamVjdCwgKnN0YXJ0X21hdGNoLAorICAgICAgICAgICAgICBzdGFydF9tYXRjaCsrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB3aGlsZSAoc3RhcnRfbWF0Y2ggPCBlbmRfc3ViamVjdCAmJiAhV0FTX05FV0xJTkUoc3RhcnRfbWF0Y2gpKQorICAgICAgICAgIHN0YXJ0X21hdGNoKys7CisKKyAgICAgICAgLyogSWYgd2UgaGF2ZSBqdXN0IHBhc3NlZCBhIENSIGFuZCB0aGUgbmV3bGluZSBvcHRpb24gaXMgQU5ZIG9yCisgICAgICAgIEFOWUNSTEYsIGFuZCB3ZSBhcmUgbm93IGF0IGEgTEYsIGFkdmFuY2UgdGhlIG1hdGNoIHBvc2l0aW9uIGJ5IG9uZSBtb3JlCisgICAgICAgIGNvZGUgdW5pdC4gKi8KKworICAgICAgICBpZiAoc3RhcnRfbWF0Y2hbLTFdID09IENIQVJfQ1IgJiYKKyAgICAgICAgICAgICAobWItPm5sdHlwZSA9PSBOTFRZUEVfQU5ZIHx8IG1iLT5ubHR5cGUgPT0gTkxUWVBFX0FOWUNSTEYpICYmCisgICAgICAgICAgICAgc3RhcnRfbWF0Y2ggPCBlbmRfc3ViamVjdCAmJgorICAgICAgICAgICAgIFVDSEFSMjFURVNUKHN0YXJ0X21hdGNoKSA9PSBDSEFSX05MKQorICAgICAgICAgIHN0YXJ0X21hdGNoKys7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIC8qIE9yIHRvIGEgbm9uLXVuaXF1ZSBmaXJzdCBjb2RlIHVuaXQgaWYgYW55IGhhdmUgYmVlbiBpZGVudGlmaWVkLiBUaGUKKyAgICBiaXRtYXAgY29udGFpbnMgb25seSAyNTYgYml0cy4gV2hlbiBjb2RlIHVuaXRzIGFyZSAxNiBvciAzMiBiaXRzIHdpZGUsIGFsbAorICAgIGNvZGUgdW5pdHMgZ3JlYXRlciB0aGFuIDI1NCBzZXQgdGhlIDI1NSBiaXQuICovCisKKyAgICBlbHNlIGlmIChzdGFydF9iaXRzICE9IE5VTEwpCisgICAgICB7CisgICAgICB3aGlsZSAoc3RhcnRfbWF0Y2ggPCBlbmRfc3ViamVjdCkKKyAgICAgICAgeworICAgICAgICByZWdpc3RlciB1aW50MzJfdCBjID0gVUNIQVIyMVRFU1Qoc3RhcnRfbWF0Y2gpOworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgICAgIGlmIChjID4gMjU1KSBjID0gMjU1OworI2VuZGlmCisgICAgICAgIGlmICgoc3RhcnRfYml0c1tjLzhdICYgKDEgPDwgKGMmNykpKSAhPSAwKSBicmVhazsKKyAgICAgICAgc3RhcnRfbWF0Y2grKzsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogUmVzdG9yZSBmdWRnZWQgZW5kX3N1YmplY3QgKi8KKworICAgIGVuZF9zdWJqZWN0ID0gc2F2ZV9lbmRfc3ViamVjdDsKKworICAgIC8qIFRoZSBmb2xsb3dpbmcgdHdvIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkIGZvciBwYXJ0aWFsIG1hdGNoaW5nLiAqLworCisgICAgaWYgKChtYi0+bW9wdGlvbnMgJiAoUENSRTJfUEFSVElBTF9IQVJEfFBDUkUyX1BBUlRJQUxfU09GVCkpID09IDApCisgICAgICB7CisgICAgICAvKiBUaGUgbWluaW11bSBtYXRjaGluZyBsZW5ndGggaXMgYSBsb3dlciBib3VuZDsgbm8gYWN0dWFsIHN0cmluZyBvZiB0aGF0CisgICAgICBsZW5ndGggbWF5IGFjdHVhbGx5IG1hdGNoIHRoZSBwYXR0ZXJuLiBBbHRob3VnaCB0aGUgdmFsdWUgaXMsIHN0cmljdGx5LAorICAgICAgaW4gY2hhcmFjdGVycywgd2UgdHJlYXQgaXQgYXMgY29kZSB1bml0cyB0byBhdm9pZCBzcGVuZGluZyB0b28gbXVjaCB0aW1lCisgICAgICBpbiB0aGlzIG9wdGltaXphdGlvbi4gKi8KKworICAgICAgaWYgKGVuZF9zdWJqZWN0IC0gc3RhcnRfbWF0Y2ggPCByZS0+bWlubGVuZ3RoKSByZXR1cm4gUENSRTJfRVJST1JfTk9NQVRDSDsKKworICAgICAgLyogSWYgcmVxX2N1IGlzIHNldCwgd2Uga25vdyB0aGF0IHRoYXQgY29kZSB1bml0IG11c3QgYXBwZWFyIGluIHRoZQorICAgICAgc3ViamVjdCBmb3IgdGhlIG1hdGNoIHRvIHN1Y2NlZWQuIElmIHRoZSBmaXJzdCBjb2RlIHVuaXQgaXMgc2V0LCByZXFfY3UKKyAgICAgIG11c3QgYmUgbGF0ZXIgaW4gdGhlIHN1YmplY3Q7IG90aGVyd2lzZSB0aGUgdGVzdCBzdGFydHMgYXQgdGhlIG1hdGNoCisgICAgICBwb2ludC4gVGhpcyBvcHRpbWl6YXRpb24gY2FuIHNhdmUgYSBodWdlIGFtb3VudCBvZiBiYWNrdHJhY2tpbmcgaW4KKyAgICAgIHBhdHRlcm5zIHdpdGggbmVzdGVkIHVubGltaXRlZCByZXBlYXRzIHRoYXQgYXJlbid0IGdvaW5nIHRvIG1hdGNoLgorICAgICAgV3JpdGluZyBzZXBhcmF0ZSBjb2RlIGZvciBjYXNlZC9jYXNlbGVzcyB2ZXJzaW9ucyBtYWtlcyBpdCBnbyBmYXN0ZXIsIGFzCisgICAgICBkb2VzIHVzaW5nIGFuIGF1dG9pbmNyZW1lbnQgYW5kIGJhY2tpbmcgb2ZmIG9uIGEgbWF0Y2guCisKKyAgICAgIEhPV0VWRVI6IHdoZW4gdGhlIHN1YmplY3Qgc3RyaW5nIGlzIHZlcnksIHZlcnkgbG9uZywgc2VhcmNoaW5nIHRvIGl0cyBlbmQKKyAgICAgIGNhbiB0YWtlIGEgbG9uZyB0aW1lLCBhbmQgZ2l2ZSBiYWQgcGVyZm9ybWFuY2Ugb24gcXVpdGUgb3JkaW5hcnkKKyAgICAgIHBhdHRlcm5zLiBUaGlzIHNob3dlZCB1cCB3aGVuIHNvbWVib2R5IHdhcyBtYXRjaGluZyBzb21ldGhpbmcgbGlrZQorICAgICAgL15cZCtDLyBvbiBhIDMyLW1lZ2FieXRlIHN0cmluZy4uLiBzbyB3ZSBkb24ndCBkbyB0aGlzIHdoZW4gdGhlIHN0cmluZyBpcworICAgICAgc3VmZmljaWVudGx5IGxvbmcuICovCisKKyAgICAgIGlmIChoYXNfcmVxX2N1ICYmIGVuZF9zdWJqZWN0IC0gc3RhcnRfbWF0Y2ggPCBSRVFfQ1VfTUFYKQorICAgICAgICB7CisgICAgICAgIHJlZ2lzdGVyIFBDUkUyX1NQVFIgcCA9IHN0YXJ0X21hdGNoICsgKGhhc19maXJzdF9jdT8gMTowKTsKKworICAgICAgICAvKiBXZSBkb24ndCBuZWVkIHRvIHJlcGVhdCB0aGUgc2VhcmNoIGlmIHdlIGhhdmVuJ3QgeWV0IHJlYWNoZWQgdGhlCisgICAgICAgIHBsYWNlIHdlIGZvdW5kIGl0IGF0IGxhc3QgdGltZS4gKi8KKworICAgICAgICBpZiAocCA+IHJlcV9jdV9wdHIpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChyZXFfY3UgIT0gcmVxX2N1MikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChwIDwgZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVnaXN0ZXIgdWludDMyX3QgcHAgPSBVQ0hBUjIxSU5DVEVTVChwKTsKKyAgICAgICAgICAgICAgaWYgKHBwID09IHJlcV9jdSB8fCBwcCA9PSByZXFfY3UyKSB7IHAtLTsgYnJlYWs7IH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChwIDwgZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKFVDSEFSMjFJTkNURVNUKHApID09IHJlcV9jdSkgeyBwLS07IGJyZWFrOyB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIElmIHdlIGNhbid0IGZpbmQgdGhlIHJlcXVpcmVkIGNvZGUgdW5pdCwgYnJlYWsgdGhlIG1hdGNoaW5nIGxvb3AsCisgICAgICAgICAgZm9yY2luZyBhIG1hdGNoIGZhaWx1cmUuICovCisKKyAgICAgICAgICBpZiAocCA+PSBlbmRfc3ViamVjdCkgYnJlYWs7CisKKyAgICAgICAgICAvKiBJZiB3ZSBoYXZlIGZvdW5kIHRoZSByZXF1aXJlZCBjb2RlIHVuaXQsIHNhdmUgdGhlIHBvaW50IHdoZXJlIHdlCisgICAgICAgICAgZm91bmQgaXQsIHNvIHRoYXQgd2UgZG9uJ3Qgc2VhcmNoIGFnYWluIG5leHQgdGltZSByb3VuZCB0aGUgbG9vcCBpZgorICAgICAgICAgIHRoZSBzdGFydCBoYXNuJ3QgcGFzc2VkIHRoaXMgY29kZSB1bml0IHlldC4gKi8KKworICAgICAgICAgIHJlcV9jdV9wdHIgPSBwOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAvKiAtLS0tLS0tLS0tLS0gRW5kIG9mIHN0YXJ0IG9mIG1hdGNoIG9wdGltaXphdGlvbnMgLS0tLS0tLS0tLS0tICovCisKKyAgLyogR2l2ZSBubyBtYXRjaCBpZiB3ZSBoYXZlIHBhc3NlZCB0aGUgYnVtcGFsb25nIGxpbWl0LiAqLworCisgIGlmIChzdGFydF9tYXRjaCA+IGJ1bXBhbG9uZ19saW1pdCkgYnJlYWs7CisKKyAgLyogT0ssIG5vdyB3ZSBjYW4gZG8gdGhlIGJ1c2luZXNzICovCisKKyAgbWItPnN0YXJ0X3VzZWRfcHRyID0gc3RhcnRfbWF0Y2g7CisgIG1iLT5sYXN0X3VzZWRfcHRyID0gc3RhcnRfbWF0Y2g7CisgIG1iLT5yZWN1cnNpdmUgPSBOVUxMOworCisgIHJjID0gaW50ZXJuYWxfZGZhX21hdGNoKAorICAgIG1iLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpeGVkIG1hdGNoIGRhdGEgKi8KKyAgICBtYi0+c3RhcnRfY29kZSwgICAgICAgICAgICAgICAvKiB0aGlzIHN1YmV4cHJlc3Npb24ncyBjb2RlICovCisgICAgc3RhcnRfbWF0Y2gsICAgICAgICAgICAgICAgICAgLyogd2hlcmUgd2UgY3VycmVudGx5IGFyZSAqLworICAgIHN0YXJ0X29mZnNldCwgICAgICAgICAgICAgICAgIC8qIHN0YXJ0IG9mZnNldCBpbiBzdWJqZWN0ICovCisgICAgbWF0Y2hfZGF0YS0+b3ZlY3RvciwgICAgICAgICAgLyogb2Zmc2V0IHZlY3RvciAqLworICAgIG1hdGNoX2RhdGEtPm92ZWNjb3VudCAqIDIsICAgIC8qIGFjdHVhbCBzaXplIG9mIHNhbWUgKi8KKyAgICB3b3Jrc3BhY2UsICAgICAgICAgICAgICAgICAgICAvKiB3b3Jrc3BhY2UgdmVjdG9yICovCisgICAgd3Njb3VudCwgICAgICAgICAgICAgICAgICAgICAgLyogc2l6ZSBvZiBzYW1lICovCisgICAgMCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZnVuY3Rpb24gcmVjdXJzZSBsZXZlbCAqLworCisgIC8qIEFueXRoaW5nIG90aGVyIHRoYW4gIm5vIG1hdGNoIiBtZWFucyB3ZSBhcmUgZG9uZSwgYWx3YXlzOyBvdGhlcndpc2UsIGNhcnJ5CisgIG9uIG9ubHkgaWYgbm90IGFuY2hvcmVkLiAqLworCisgIGlmIChyYyAhPSBQQ1JFMl9FUlJPUl9OT01BVENIIHx8IGFuY2hvcmVkKQorICAgIHsKKyAgICBpZiAocmMgPT0gUENSRTJfRVJST1JfUEFSVElBTCAmJiBtYXRjaF9kYXRhLT5vdmVjY291bnQgPiAwKQorICAgICAgeworICAgICAgbWF0Y2hfZGF0YS0+b3ZlY3RvclswXSA9IChQQ1JFMl9TSVpFKShzdGFydF9tYXRjaCAtIHN1YmplY3QpOworICAgICAgbWF0Y2hfZGF0YS0+b3ZlY3RvclsxXSA9IChQQ1JFMl9TSVpFKShlbmRfc3ViamVjdCAtIHN1YmplY3QpOworICAgICAgfQorICAgIG1hdGNoX2RhdGEtPmxlZnRjaGFyID0gKFBDUkUyX1NJWkUpKG1iLT5zdGFydF91c2VkX3B0ciAtIHN1YmplY3QpOworICAgIG1hdGNoX2RhdGEtPnJpZ2h0Y2hhciA9IG1iLT5sYXN0X3VzZWRfcHRyIC0gc3ViamVjdDsKKyAgICBtYXRjaF9kYXRhLT5zdGFydGNoYXIgPSAoUENSRTJfU0laRSkoc3RhcnRfbWF0Y2ggLSBzdWJqZWN0KTsKKyAgICBtYXRjaF9kYXRhLT5yYyA9IHJjOworICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgLyogQWR2YW5jZSB0byB0aGUgbmV4dCBzdWJqZWN0IGNoYXJhY3RlciB1bmxlc3Mgd2UgYXJlIGF0IHRoZSBlbmQgb2YgYSBsaW5lCisgIGFuZCBmaXJzdGxpbmUgaXMgc2V0LiAqLworCisgIGlmIChmaXJzdGxpbmUgJiYgSVNfTkVXTElORShzdGFydF9tYXRjaCkpIGJyZWFrOworICBzdGFydF9tYXRjaCsrOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICBpZiAodXRmKQorICAgIHsKKyAgICBBQ1JPU1NDSEFSKHN0YXJ0X21hdGNoIDwgZW5kX3N1YmplY3QsICpzdGFydF9tYXRjaCwKKyAgICAgIHN0YXJ0X21hdGNoKyspOworICAgIH0KKyNlbmRpZgorICBpZiAoc3RhcnRfbWF0Y2ggPiBlbmRfc3ViamVjdCkgYnJlYWs7CisKKyAgLyogSWYgd2UgaGF2ZSBqdXN0IHBhc3NlZCBhIENSIGFuZCB3ZSBhcmUgbm93IGF0IGEgTEYsIGFuZCB0aGUgcGF0dGVybiBkb2VzCisgIG5vdCBjb250YWluIGFueSBleHBsaWNpdCBtYXRjaGVzIGZvciBcciBvciBcbiwgYW5kIHRoZSBuZXdsaW5lIG9wdGlvbiBpcyBDUkxGCisgIG9yIEFOWSBvciBBTllDUkxGLCBhZHZhbmNlIHRoZSBtYXRjaCBwb3NpdGlvbiBieSBvbmUgbW9yZSBjaGFyYWN0ZXIuICovCisKKyAgaWYgKFVDSEFSMjFURVNUKHN0YXJ0X21hdGNoIC0gMSkgPT0gQ0hBUl9DUiAmJgorICAgICAgc3RhcnRfbWF0Y2ggPCBlbmRfc3ViamVjdCAmJgorICAgICAgVUNIQVIyMVRFU1Qoc3RhcnRfbWF0Y2gpID09IENIQVJfTkwgJiYKKyAgICAgIChyZS0+ZmxhZ3MgJiBQQ1JFMl9IQVNDUk9STEYpID09IDAgJiYKKyAgICAgICAgKG1iLT5ubHR5cGUgPT0gTkxUWVBFX0FOWSB8fAorICAgICAgICAgbWItPm5sdHlwZSA9PSBOTFRZUEVfQU5ZQ1JMRiB8fAorICAgICAgICAgbWItPm5sbGVuID09IDIpKQorICAgIHN0YXJ0X21hdGNoKys7CisKKyAgfSAgIC8qICJCdW1wYWxvbmciIGxvb3AgKi8KKworCityZXR1cm4gUENSRTJfRVJST1JfTk9NQVRDSDsKK30KKworLyogRW5kIG9mIHBjcmUyX2RmYV9tYXRjaC5jICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfZXJyb3IuYyBiL2Rpc3QyL3NyYy9wY3JlMl9lcnJvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNDc1NmEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJfZXJyb3IuYwpAQCAtMCwwICsxLDMyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQQ1JFIGlzIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHN5bnRheAorYW5kIHNlbWFudGljcyBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2Ugb2YgdGhlIFBlcmwgNSBsYW5ndWFnZS4KKworICAgICAgICAgICAgICAgICAgICAgICBXcml0dGVuIGJ5IFBoaWxpcCBIYXplbAorICAgICBPcmlnaW5hbCBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDE5OTctMjAxMiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorICAgICAgICAgTmV3IEFQSSBjb2RlIENvcHlyaWdodCAoYykgMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInBjcmUyX2ludGVybmFsLmgiCisKKyNkZWZpbmUgU1RSSU5HKGEpICAjIGEKKyNkZWZpbmUgWFNUUklORyhzKSBTVFJJTkcocykKKworLyogVGhlIHRleHRzIG9mIGNvbXBpbGUtdGltZSBlcnJvciBtZXNzYWdlcy4gQ29tcGlsZS10aW1lIGVycm9yIG51bWJlcnMgc3RhcnQKK2F0IENPTVBJTEVfRVJST1JfQkFTRSAoMTAwKS4KKworVGhpcyB1c2VkIHRvIGJlIGEgdGFibGUgb2Ygc3RyaW5ncywgYnV0IGluIG9yZGVyIHRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mCityZWxvY2F0aW9ucyBuZWVkZWQgd2hlbiBhIHNoYXJlZCBsaWJyYXJ5IGlzIGxvYWRlZCBkeW5hbWljYWxseSwgaXQgaXMgbm93IG9uZQorbG9uZyBzdHJpbmcuIFdlIGNhbm5vdCB1c2UgYSB0YWJsZSBvZiBvZmZzZXRzLCBiZWNhdXNlIHRoZSBsZW5ndGhzIG9mIGluc2VydHMKK3N1Y2ggYXMgWFNUUklORyhNQVhfTkFNRV9TSVpFKSBhcmUgbm90IGtub3duLiBJbnN0ZWFkLAorcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoKSBjb3VudHMgdGhyb3VnaCB0byB0aGUgb25lIGl0IHdhbnRzIC0gdGhpcyBpc24ndCBhCitwZXJmb3JtYW5jZSBpc3N1ZSBiZWNhdXNlIHRoZXNlIHN0cmluZ3MgYXJlIHVzZWQgb25seSB3aGVuIHRoZXJlIGlzIGFuIGVycm9yLgorCitFYWNoIHN1YnN0cmluZyBlbmRzIHdpdGggXDAgdG8gaW5zZXJ0IGEgbnVsbCBjaGFyYWN0ZXIuIFRoaXMgaW5jbHVkZXMgdGhlIGZpbmFsCitzdWJzdHJpbmcsIHNvIHRoYXQgdGhlIHdob2xlIHN0cmluZyBlbmRzIHdpdGggXDBcMCwgd2hpY2ggY2FuIGJlIGRldGVjdGVkIHdoZW4KK2NvdW50aW5nIHRocm91Z2guICovCisKK3N0YXRpYyBjb25zdCBjaGFyIGNvbXBpbGVfZXJyb3JfdGV4dHNbXSA9CisgICJubyBlcnJvclwwIgorICAiXFwgYXQgZW5kIG9mIHBhdHRlcm5cMCIKKyAgIlxcYyBhdCBlbmQgb2YgcGF0dGVyblwwIgorICAidW5yZWNvZ25pemVkIGNoYXJhY3RlciBmb2xsb3dzIFxcXDAiCisgICJudW1iZXJzIG91dCBvZiBvcmRlciBpbiB7fSBxdWFudGlmaWVyXDAiCisgIC8qIDUgKi8KKyAgIm51bWJlciB0b28gYmlnIGluIHt9IHF1YW50aWZpZXJcMCIKKyAgIm1pc3NpbmcgdGVybWluYXRpbmcgXSBmb3IgY2hhcmFjdGVyIGNsYXNzXDAiCisgICJpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSBpbiBjaGFyYWN0ZXIgY2xhc3NcMCIKKyAgInJhbmdlIG91dCBvZiBvcmRlciBpbiBjaGFyYWN0ZXIgY2xhc3NcMCIKKyAgInF1YW50aWZpZXIgZG9lcyBub3QgZm9sbG93IGEgcmVwZWF0YWJsZSBpdGVtXDAiCisgIC8qIDEwICovCisgICJpbnRlcm5hbCBlcnJvcjogdW5leHBlY3RlZCByZXBlYXRcMCIKKyAgInVucmVjb2duaXplZCBjaGFyYWN0ZXIgYWZ0ZXIgKD8gb3IgKD8tXDAiCisgICJQT1NJWCBuYW1lZCBjbGFzc2VzIGFyZSBzdXBwb3J0ZWQgb25seSB3aXRoaW4gYSBjbGFzc1wwIgorICAiUE9TSVggY29sbGF0aW5nIGVsZW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkXDAiCisgICJtaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXNcMCIKKyAgLyogMTUgKi8KKyAgInJlZmVyZW5jZSB0byBub24tZXhpc3RlbnQgc3VicGF0dGVyblwwIgorICAicGF0dGVybiBwYXNzZWQgYXMgTlVMTFwwIgorICAidW5yZWNvZ25pc2VkIGNvbXBpbGUtdGltZSBvcHRpb24gYml0KHMpXDAiCisgICJtaXNzaW5nICkgYWZ0ZXIgKD8jIGNvbW1lbnRcMCIKKyAgInBhcmVudGhlc2VzIGFyZSB0b28gZGVlcGx5IG5lc3RlZFwwIgorICAvKiAyMCAqLworICAicmVndWxhciBleHByZXNzaW9uIGlzIHRvbyBsYXJnZVwwIgorICAiZmFpbGVkIHRvIGFsbG9jYXRlIGhlYXAgbWVtb3J5XDAiCisgICJ1bm1hdGNoZWQgY2xvc2luZyBwYXJlbnRoZXNpc1wwIgorICAiaW50ZXJuYWwgZXJyb3I6IGNvZGUgb3ZlcmZsb3dcMCIKKyAgImxldHRlciBvciB1bmRlcnNjb3JlIGV4cGVjdGVkIGFmdGVyICg/PCBvciAoPydcMCIKKyAgLyogMjUgKi8KKyAgImxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIG5vdCBmaXhlZCBsZW5ndGhcMCIKKyAgIm1hbGZvcm1lZCBudW1iZXIgb3IgbmFtZSBhZnRlciAoPyhcMCIKKyAgImNvbmRpdGlvbmFsIGdyb3VwIGNvbnRhaW5zIG1vcmUgdGhhbiB0d28gYnJhbmNoZXNcMCIKKyAgImFzc2VydGlvbiBleHBlY3RlZCBhZnRlciAoPyggb3IgKD8oP0MpXDAiCisgICIoP1Igb3IgKD9bKy1dZGlnaXRzIG11c3QgYmUgZm9sbG93ZWQgYnkgKVwwIgorICAvKiAzMCAqLworICAidW5rbm93biBQT1NJWCBjbGFzcyBuYW1lXDAiCisgICJpbnRlcm5hbCBlcnJvciBpbiBwY3JlMl9zdHVkeSgpOiBzaG91bGQgbm90IG9jY3VyXDAiCisgICJ0aGlzIHZlcnNpb24gb2YgUENSRTIgZG9lcyBub3QgaGF2ZSBVbmljb2RlIHN1cHBvcnRcMCIKKyAgInBhcmVudGhlc2VzIGFyZSB0b28gZGVlcGx5IG5lc3RlZCAoc3RhY2sgY2hlY2spXDAiCisgICJjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBcXHh7fSBvciBcXG97fSBpcyB0b28gbGFyZ2VcMCIKKyAgLyogMzUgKi8KKyAgImludmFsaWQgY29uZGl0aW9uICg/KDApXDAiCisgICJcXEMgaXMgbm90IGFsbG93ZWQgaW4gYSBsb29rYmVoaW5kIGFzc2VydGlvblwwIgorICAiUENSRSBkb2VzIG5vdCBzdXBwb3J0IFxcTCwgXFxsLCBcXE57bmFtZX0sIFxcVSwgb3IgXFx1XDAiCisgICJudW1iZXIgYWZ0ZXIgKD9DIGlzIGdyZWF0ZXIgdGhhbiAyNTVcMCIKKyAgImNsb3NpbmcgcGFyZW50aGVzaXMgZm9yICg/QyBleHBlY3RlZFwwIgorICAvKiA0MCAqLworICAiaW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgaW4gKCpWRVJCKSBuYW1lXDAiCisgICJ1bnJlY29nbml6ZWQgY2hhcmFjdGVyIGFmdGVyICg/UFwwIgorICAic3ludGF4IGVycm9yIGluIHN1YnBhdHRlcm4gbmFtZSAobWlzc2luZyB0ZXJtaW5hdG9yKVwwIgorICAidHdvIG5hbWVkIHN1YnBhdHRlcm5zIGhhdmUgdGhlIHNhbWUgbmFtZSAoUENSRTJfRFVQTkFNRVMgbm90IHNldClcMCIKKyAgImdyb3VwIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbm9uLWRpZ2l0XDAiCisgIC8qIDQ1ICovCisgICJ0aGlzIHZlcnNpb24gb2YgUENSRTIgZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciBcXFAsIFxccCwgb3IgXFxYXDAiCisgICJtYWxmb3JtZWQgXFxQIG9yIFxccCBzZXF1ZW5jZVwwIgorICAidW5rbm93biBwcm9wZXJ0eSBuYW1lIGFmdGVyIFxcUCBvciBcXHBcMCIKKyAgInN1YnBhdHRlcm4gbmFtZSBpcyB0b28gbG9uZyAobWF4aW11bSAiIFhTVFJJTkcoTUFYX05BTUVfU0laRSkgIiBjaGFyYWN0ZXJzKVwwIgorICAidG9vIG1hbnkgbmFtZWQgc3VicGF0dGVybnMgKG1heGltdW0gIiBYU1RSSU5HKE1BWF9OQU1FX0NPVU5UKSAiKVwwIgorICAvKiA1MCAqLworICAiaW52YWxpZCByYW5nZSBpbiBjaGFyYWN0ZXIgY2xhc3NcMCIKKyAgIm9jdGFsIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBcXDM3NyBpbiA4LWJpdCBub24tVVRGLTggbW9kZVwwIgorICAiaW50ZXJuYWwgZXJyb3I6IG92ZXJyYW4gY29tcGlsaW5nIHdvcmtzcGFjZVwwIgorICAiaW50ZXJuYWwgZXJyb3I6IHByZXZpb3VzbHktY2hlY2tlZCByZWZlcmVuY2VkIHN1YnBhdHRlcm4gbm90IGZvdW5kXDAiCisgICJERUZJTkUgZ3JvdXAgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBicmFuY2hcMCIKKyAgLyogNTUgKi8KKyAgIm1pc3Npbmcgb3BlbmluZyBicmFjZSBhZnRlciBcXG9cMCIKKyAgImludGVybmFsIGVycm9yOiB1bmtub3duIG5ld2xpbmUgc2V0dGluZ1wwIgorICAiXFxnIGlzIG5vdCBmb2xsb3dlZCBieSBhIGJyYWNlZCwgYW5nbGUtYnJhY2tldGVkLCBvciBxdW90ZWQgbmFtZS9udW1iZXIgb3IgYnkgYSBwbGFpbiBudW1iZXJcMCIKKyAgImEgbnVtYmVyZWQgcmVmZXJlbmNlIG11c3Qgbm90IGJlIHplcm9cMCIKKyAgImFuIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIGZvciAoKkFDQ0VQVCksICgqRkFJTCksIG9yICgqQ09NTUlUKVwwIgorICAvKiA2MCAqLworICAiKCpWRVJCKSBub3QgcmVjb2duaXplZCBvciBtYWxmb3JtZWRcMCIKKyAgIm51bWJlciBpcyB0b28gYmlnXDAiCisgICJzdWJwYXR0ZXJuIG5hbWUgZXhwZWN0ZWRcMCIKKyAgImRpZ2l0IGV4cGVjdGVkIGFmdGVyICg/K1wwIgorICAibm9uLW9jdGFsIGNoYXJhY3RlciBpbiBcXG97fSAoY2xvc2luZyBicmFjZSBtaXNzaW5nPylcMCIKKyAgLyogNjUgKi8KKyAgImRpZmZlcmVudCBuYW1lcyBmb3Igc3VicGF0dGVybnMgb2YgdGhlIHNhbWUgbnVtYmVyIGFyZSBub3QgYWxsb3dlZFwwIgorICAiKCpNQVJLKSBtdXN0IGhhdmUgYW4gYXJndW1lbnRcMCIKKyAgIm5vbi1oZXggY2hhcmFjdGVyIGluIFxceHt9IChjbG9zaW5nIGJyYWNlIG1pc3Npbmc/KVwwIgorI2lmbmRlZiBFQkNESUMKKyAgIlxcYyBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlclwwIgorI2Vsc2UKKyAgIlxcYyBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgbGV0dGVyIG9yIG9uZSBvZiBbXFxdXl8/XDAiCisjZW5kaWYKKyAgIlxcayBpcyBub3QgZm9sbG93ZWQgYnkgYSBicmFjZWQsIGFuZ2xlLWJyYWNrZXRlZCwgb3IgcXVvdGVkIG5hbWVcMCIKKyAgLyogNzAgKi8KKyAgImludGVybmFsIGVycm9yOiB1bmtub3duIG9wY29kZSBpbiBmaW5kX2ZpeGVkbGVuZ3RoKClcMCIKKyAgIlxcTiBpcyBub3Qgc3VwcG9ydGVkIGluIGEgY2xhc3NcMCIKKyAgIlNQQVJFIEVSUk9SXDAiCisgICJkaXNhbGxvd2VkIFVuaWNvZGUgY29kZSBwb2ludCAoPj0gMHhkODAwICYmIDw9IDB4ZGZmZilcMCIKKyAgInVzaW5nIFVURiBpcyBkaXNhYmxlZCBieSB0aGUgYXBwbGljYXRpb25cMCIKKyAgLyogNzUgKi8KKyAgInVzaW5nIFVDUCBpcyBkaXNhYmxlZCBieSB0aGUgYXBwbGljYXRpb25cMCIKKyAgIm5hbWUgaXMgdG9vIGxvbmcgaW4gKCpNQVJLKSwgKCpQUlVORSksICgqU0tJUCksIG9yICgqVEhFTilcMCIKKyAgImNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFxcdS4uLi4gc2VxdWVuY2UgaXMgdG9vIGxhcmdlXDAiCisgICJkaWdpdHMgbWlzc2luZyBpbiBcXHh7fSBvciBcXG97fVwwIgorICAic3ludGF4IGVycm9yIGluICg/KFZFUlNJT04gY29uZGl0aW9uXDAiCisgIC8qIDgwICovCisgICJpbnRlcm5hbCBlcnJvcjogdW5rbm93biBvcGNvZGUgaW4gYXV0b19wb3NzZXNzaWZ5KClcMCIKKyAgIm1pc3NpbmcgdGVybWluYXRpbmcgZGVsaW1pdGVyIGZvciBjYWxsb3V0IHdpdGggc3RyaW5nIGFyZ3VtZW50XDAiCisgICJ1bnJlY29nbml6ZWQgc3RyaW5nIGRlbGltaXRlciBmb2xsb3dzICg/Q1wwIgorICAidXNpbmcgXFxDIGlzIGRpc2FibGVkIGJ5IHRoZSBhcHBsaWNhdGlvblwwIgorICAiKD98IGFuZC9vciAoP0o6IG9yICg/eDogcGFyZW50aGVzZXMgYXJlIHRvbyBkZWVwbHkgbmVzdGVkXDAiCisgIC8qIDg1ICovCisgICJ1c2luZyBcXEMgaXMgZGlzYWJsZWQgaW4gdGhpcyBQQ1JFMiBsaWJyYXJ5XDAiCisgICJyZWd1bGFyIGV4cHJlc3Npb24gaXMgdG9vIGNvbXBsaWNhdGVkXDAiCisgICJsb29rYmVoaW5kIGFzc2VydGlvbiBpcyB0b28gbG9uZ1wwIgorICAicGF0dGVybiBzdHJpbmcgaXMgbG9uZ2VyIHRoYW4gdGhlIGxpbWl0IHNldCBieSB0aGUgYXBwbGljYXRpb25cMCIKKyAgOworCisvKiBNYXRjaC10aW1lIGFuZCBVVEYgZXJyb3IgdGV4dHMgYXJlIGluIHRoZSBzYW1lIGZvcm1hdC4gKi8KKworc3RhdGljIGNvbnN0IGNoYXIgbWF0Y2hfZXJyb3JfdGV4dHNbXSA9CisgICJubyBlcnJvclwwIgorICAibm8gbWF0Y2hcMCIKKyAgInBhcnRpYWwgbWF0Y2hcMCIKKyAgIlVURi04IGVycm9yOiAxIGJ5dGUgbWlzc2luZyBhdCBlbmRcMCIKKyAgIlVURi04IGVycm9yOiAyIGJ5dGVzIG1pc3NpbmcgYXQgZW5kXDAiCisgIC8qIDUgKi8KKyAgIlVURi04IGVycm9yOiAzIGJ5dGVzIG1pc3NpbmcgYXQgZW5kXDAiCisgICJVVEYtOCBlcnJvcjogNCBieXRlcyBtaXNzaW5nIGF0IGVuZFwwIgorICAiVVRGLTggZXJyb3I6IDUgYnl0ZXMgbWlzc2luZyBhdCBlbmRcMCIKKyAgIlVURi04IGVycm9yOiBieXRlIDIgdG9wIGJpdHMgbm90IDB4ODBcMCIKKyAgIlVURi04IGVycm9yOiBieXRlIDMgdG9wIGJpdHMgbm90IDB4ODBcMCIKKyAgLyogMTAgKi8KKyAgIlVURi04IGVycm9yOiBieXRlIDQgdG9wIGJpdHMgbm90IDB4ODBcMCIKKyAgIlVURi04IGVycm9yOiBieXRlIDUgdG9wIGJpdHMgbm90IDB4ODBcMCIKKyAgIlVURi04IGVycm9yOiBieXRlIDYgdG9wIGJpdHMgbm90IDB4ODBcMCIKKyAgIlVURi04IGVycm9yOiA1LWJ5dGUgY2hhcmFjdGVyIGlzIG5vdCBhbGxvd2VkIChSRkMgMzYyOSlcMCIKKyAgIlVURi04IGVycm9yOiA2LWJ5dGUgY2hhcmFjdGVyIGlzIG5vdCBhbGxvd2VkIChSRkMgMzYyOSlcMCIKKyAgLyogMTUgKi8KKyAgIlVURi04IGVycm9yOiBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gMHgxMGZmZmYgYXJlIG5vdCBkZWZpbmVkXDAiCisgICJVVEYtOCBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWRcMCIKKyAgIlVURi04IGVycm9yOiBvdmVybG9uZyAyLWJ5dGUgc2VxdWVuY2VcMCIKKyAgIlVURi04IGVycm9yOiBvdmVybG9uZyAzLWJ5dGUgc2VxdWVuY2VcMCIKKyAgIlVURi04IGVycm9yOiBvdmVybG9uZyA0LWJ5dGUgc2VxdWVuY2VcMCIKKyAgLyogMjAgKi8KKyAgIlVURi04IGVycm9yOiBvdmVybG9uZyA1LWJ5dGUgc2VxdWVuY2VcMCIKKyAgIlVURi04IGVycm9yOiBvdmVybG9uZyA2LWJ5dGUgc2VxdWVuY2VcMCIKKyAgIlVURi04IGVycm9yOiBpc29sYXRlZCBieXRlIHdpdGggMHg4MCBiaXQgc2V0XDAiCisgICJVVEYtOCBlcnJvcjogaWxsZWdhbCBieXRlICgweGZlIG9yIDB4ZmYpXDAiCisgICJVVEYtMTYgZXJyb3I6IG1pc3NpbmcgbG93IHN1cnJvZ2F0ZSBhdCBlbmRcMCIKKyAgLyogMjUgKi8KKyAgIlVURi0xNiBlcnJvcjogaW52YWxpZCBsb3cgc3Vycm9nYXRlXDAiCisgICJVVEYtMTYgZXJyb3I6IGlzb2xhdGVkIGxvdyBzdXJyb2dhdGVcMCIKKyAgIlVURi0zMiBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWRcMCIKKyAgIlVURi0zMiBlcnJvcjogY29kZSBwb2ludHMgZ3JlYXRlciB0aGFuIDB4MTBmZmZmIGFyZSBub3QgZGVmaW5lZFwwIgorICAiYmFkIGRhdGEgdmFsdWVcMCIKKyAgLyogMzAgKi8KKyAgInBhdHRlcm5zIGRvIG5vdCBhbGwgdXNlIHRoZSBzYW1lIGNoYXJhY3RlciB0YWJsZXNcMCIKKyAgIm1hZ2ljIG51bWJlciBtaXNzaW5nXDAiCisgICJwYXR0ZXJuIGNvbXBpbGVkIGluIHdyb25nIG1vZGU6IDgvMTYvMzItYml0IGVycm9yXDAiCisgICJiYWQgb2Zmc2V0IHZhbHVlXDAiCisgICJiYWQgb3B0aW9uIHZhbHVlXDAiCisgIC8qIDM1ICovCisgICJpbnZhbGlkIHJlcGxhY2VtZW50IHN0cmluZ1wwIgorICAiYmFkIG9mZnNldCBpbnRvIFVURiBzdHJpbmdcMCIKKyAgImNhbGxvdXQgZXJyb3IgY29kZVwwIiAgICAgICAgICAgICAgLyogTmV2ZXIgcmV0dXJuZWQgYnkgUENSRTIgaXRzZWxmICovCisgICJpbnZhbGlkIGRhdGEgaW4gd29ya3NwYWNlIGZvciBERkEgcmVzdGFydFwwIgorICAidG9vIG11Y2ggcmVjdXJzaW9uIGZvciBERkEgbWF0Y2hpbmdcMCIKKyAgLyogNDAgKi8KKyAgImJhY2tyZWZlcmVuY2UgY29uZGl0aW9uIG9yIHJlY3Vyc2lvbiB0ZXN0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIERGQSBtYXRjaGluZ1wwIgorICAiZnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBmb3IgREZBIG1hdGNoaW5nXDAiCisgICJwYXR0ZXJuIGNvbnRhaW5zIGFuIGl0ZW0gdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBERkEgbWF0Y2hpbmdcMCIKKyAgIndvcmtzcGFjZSBzaXplIGV4Y2VlZGVkIGluIERGQSBtYXRjaGluZ1wwIgorICAiaW50ZXJuYWwgZXJyb3IgLSBwYXR0ZXJuIG92ZXJ3cml0dGVuP1wwIgorICAvKiA0NSAqLworICAiYmFkIEpJVCBvcHRpb25cMCIKKyAgIkpJVCBzdGFjayBsaW1pdCByZWFjaGVkXDAiCisgICJtYXRjaCBsaW1pdCBleGNlZWRlZFwwIgorICAibm8gbW9yZSBtZW1vcnlcMCIKKyAgInVua25vd24gc3Vic3RyaW5nXDAiCisgIC8qIDUwICovCisgICJub24tdW5pcXVlIHN1YnN0cmluZyBuYW1lXDAiCisgICJOVUxMIGFyZ3VtZW50IHBhc3NlZFwwIgorICAibmVzdGVkIHJlY3Vyc2lvbiBhdCB0aGUgc2FtZSBzdWJqZWN0IHBvc2l0aW9uXDAiCisgICJyZWN1cnNpb24gbGltaXQgZXhjZWVkZWRcMCIKKyAgInJlcXVlc3RlZCB2YWx1ZSBpcyBub3QgYXZhaWxhYmxlXDAiCisgIC8qIDU1ICovCisgICJyZXF1ZXN0ZWQgdmFsdWUgaXMgbm90IHNldFwwIgorICAib2Zmc2V0IGxpbWl0IHNldCB3aXRob3V0IFBDUkUyX1VTRV9PRkZTRVRfTElNSVRcMCIKKyAgImJhZCBlc2NhcGUgc2VxdWVuY2UgaW4gcmVwbGFjZW1lbnQgc3RyaW5nXDAiCisgICJleHBlY3RlZCBjbG9zaW5nIGN1cmx5IGJyYWNrZXQgaW4gcmVwbGFjZW1lbnQgc3RyaW5nXDAiCisgICJiYWQgc3Vic3RpdHV0aW9uIGluIHJlcGxhY2VtZW50IHN0cmluZ1wwIgorICAvKiA2MCAqLworICAibWF0Y2ggd2l0aCBlbmQgYmVmb3JlIHN0YXJ0IGlzIG5vdCBzdXBwb3J0ZWRcMCIKKyAgInRvbyBtYW55IHJlcGxhY2VtZW50cyAobW9yZSB0aGFuIElOVF9NQVgpXDAiCisgIDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgIFJldHVybiBlcnJvciBtZXNzYWdlICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gY29waWVzIGFuIGVycm9yIG1lc3NhZ2UgaW50byBhIGJ1ZmZlciB3aG9zZSB1bml0cyBhcmUgb2YgYW4KK2FwcHJvcHJpYXRlIHdpZHRoLiBFcnJvciBudW1iZXJzIGFyZSBwb3NpdGl2ZSBmb3IgY29tcGlsZS10aW1lIGVycm9ycywgYW5kCituZWdhdGl2ZSBmb3IgbWF0Y2gtdGltZSBlcnJvcnMgKGV4Y2VwdCBmb3IgVVRGIGVycm9ycyksIGJ1dCB0aGUgbnVtYmVycyBhcmUgYWxsCitkaXN0aW5jdC4KKworQXJndW1lbnRzOgorICBlbnVtYmVyICAgICAgIGVycm9yIG51bWJlcgorICBidWZmZXIgICAgICAgIHdoZXJlIHRvIHB1dCB0aGUgbWVzc2FnZSAoemVybyB0ZXJtaW5hdGVkKQorICBzaXplICAgICAgICAgIHNpemUgb2YgdGhlIGJ1ZmZlcgorCitSZXR1cm5zOiAgICAgICAgbGVuZ3RoIG9mIG1lc3NhZ2UgaWYgYWxsIGlzIHdlbGwKKyAgICAgICAgICAgICAgICBuZWdhdGl2ZSBvbiBlcnJvcgorKi8KKworUENSRTJfRVhQX0RFRk4gaW50IFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2UoaW50IGVudW1iZXIsIFBDUkUyX1VDSEFSICpidWZmZXIsIHNpemVfdCBzaXplKQoreworY2hhciB4YnVmZlsxMjhdOworY29uc3QgY2hhciAqbWVzc2FnZTsKK3NpemVfdCBpOwordWludDMyX3QgbjsKKworaWYgKHNpemUgPT0gMCkgcmV0dXJuIFBDUkUyX0VSUk9SX05PTUVNT1JZOworCitpZiAoZW51bWJlciA+IENPTVBJTEVfRVJST1JfQkFTRSkgIC8qIENvbXBpbGUgZXJyb3IgKi8KKyAgeworICBtZXNzYWdlID0gY29tcGlsZV9lcnJvcl90ZXh0czsKKyAgbiA9IGVudW1iZXIgLSBDT01QSUxFX0VSUk9SX0JBU0U7CisgIH0KK2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTWF0Y2ggb3IgVVRGIGVycm9yICovCisgIHsKKyAgbWVzc2FnZSA9IG1hdGNoX2Vycm9yX3RleHRzOworICBuID0gLWVudW1iZXI7CisgIH0KKworZm9yICg7IG4gPiAwOyBuLS0pCisgIHsKKyAgd2hpbGUgKCptZXNzYWdlKysgIT0gQ0hBUl9OVUxMKSB7fTsKKyAgaWYgKCptZXNzYWdlID09IENIQVJfTlVMTCkKKyAgICB7CisgICAgc3ByaW50Zih4YnVmZiwgIk5vIHRleHQgZm9yIGVycm9yICVkIiwgZW51bWJlcik7CisgICAgYnJlYWs7CisgICAgfQorICB9CisKK2ZvciAoaSA9IDA7ICptZXNzYWdlICE9IDA7IGkrKykKKyAgeworICBpZiAoaSA+PSBzaXplIC0gMSkKKyAgICB7CisgICAgYnVmZmVyW2ldID0gMDsgICAgIC8qIFRlcm1pbmF0ZSBwYXJ0aWFsIG1lc3NhZ2UgKi8KKyAgICByZXR1cm4gUENSRTJfRVJST1JfTk9NRU1PUlk7CisgICAgfQorICBidWZmZXJbaV0gPSAqbWVzc2FnZSsrOworICB9CisKK2J1ZmZlcltpXSA9IDA7CityZXR1cm4gaTsKK30KKworLyogRW5kIG9mIHBjcmUyX2Vycm9yLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9maW5kX2JyYWNrZXQuYyBiL2Rpc3QyL3NyYy9wY3JlMl9maW5kX2JyYWNrZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDNlNzE5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3BjcmUyX2ZpbmRfYnJhY2tldC5jCkBAIC0wLDAgKzEsMjE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworLyogVGhpcyBtb2R1bGUgY29udGFpbnMgYSBzaW5nbGUgZnVuY3Rpb24gdGhhdCBzY2FucyB0aHJvdWdoIGEgY29tcGlsZWQgcGF0dGVybgordW50aWwgaXQgZmluZHMgYSBjYXB0dXJpbmcgYnJhY2tldCB3aXRoIHRoZSBnaXZlbiBudW1iZXIsIG9yLCBpZiB0aGUgbnVtYmVyIGlzCituZWdhdGl2ZSwgYW4gaW5zdGFuY2Ugb2YgT1BfUkVWRVJTRSBmb3IgYSBsb29rYmVoaW5kLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkCitmcm9tIHBjcmUyX2NvbXBpbGUuYyBhbmQgYWxzbyBmcm9tIHBjcmUyX3N0dWR5LmMgd2hlbiBmaW5kaW5nIHRoZSBtaW5pbXVtCittYXRjaGluZyBsZW5ndGguICovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICBTY2FuIGNvbXBpbGVkIHJlZ2V4IGZvciBzcGVjaWZpYyBicmFja2V0ICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitBcmd1bWVudHM6CisgIGNvZGUgICAgICAgIHBvaW50cyB0byBzdGFydCBvZiBleHByZXNzaW9uCisgIHV0ZiAgICAgICAgIFRSVUUgaW4gVVRGIG1vZGUKKyAgbnVtYmVyICAgICAgdGhlIHJlcXVpcmVkIGJyYWNrZXQgbnVtYmVyIG9yIG5lZ2F0aXZlIHRvIGZpbmQgYSBsb29rYmVoaW5kCisKK1JldHVybnM6ICAgICAgcG9pbnRlciB0byB0aGUgb3Bjb2RlIGZvciB0aGUgYnJhY2tldCwgb3IgTlVMTCBpZiBub3QgZm91bmQKKyovCisKK1BDUkUyX1NQVFIKK1BSSVYoZmluZF9icmFja2V0KShQQ1JFMl9TUFRSIGNvZGUsIEJPT0wgdXRmLCBpbnQgbnVtYmVyKQoreworZm9yICg7OykKKyAgeworICByZWdpc3RlciBQQ1JFMl9VQ0hBUiBjID0gKmNvZGU7CisKKyAgaWYgKGMgPT0gT1BfRU5EKSByZXR1cm4gTlVMTDsKKworICAvKiBYQ0xBU1MgaXMgdXNlZCBmb3IgY2xhc3NlcyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBqdXN0IGJ5IGEgYml0IG1hcC4KKyAgVGhpcyBpbmNsdWRlcyBuZWdhdGVkIHNpbmdsZSBoaWdoLXZhbHVlZCBjaGFyYWN0ZXJzLiBDQUxMT1VUX1NUUiBpcyB1c2VkIGZvcgorICBjYWxsb3V0cyB3aXRoIHN0cmluZyBhcmd1bWVudHMuIEluIGJvdGggY2FzZXMgdGhlIGxlbmd0aCBpbiB0aGUgdGFibGUgaXMKKyAgemVybzsgdGhlIGFjdHVhbCBsZW5ndGggaXMgc3RvcmVkIGluIHRoZSBjb21waWxlZCBjb2RlLiAqLworCisgIGlmIChjID09IE9QX1hDTEFTUykgY29kZSArPSBHRVQoY29kZSwgMSk7CisgICAgZWxzZSBpZiAoYyA9PSBPUF9DQUxMT1VUX1NUUikgY29kZSArPSBHRVQoY29kZSwgMSArIDIqTElOS19TSVpFKTsKKworICAvKiBIYW5kbGUgbG9va2JlaGluZCAqLworCisgIGVsc2UgaWYgKGMgPT0gT1BfUkVWRVJTRSkKKyAgICB7CisgICAgaWYgKG51bWJlciA8IDApIHJldHVybiAoUENSRTJfVUNIQVIgKiljb2RlOworICAgIGNvZGUgKz0gUFJJVihPUF9sZW5ndGhzKVtjXTsKKyAgICB9CisKKyAgLyogSGFuZGxlIGNhcHR1cmluZyBicmFja2V0ICovCisKKyAgZWxzZSBpZiAoYyA9PSBPUF9DQlJBIHx8IGMgPT0gT1BfU0NCUkEgfHwKKyAgICAgICAgICAgYyA9PSBPUF9DQlJBUE9TIHx8IGMgPT0gT1BfU0NCUkFQT1MpCisgICAgeworICAgIGludCBuID0gKGludClHRVQyKGNvZGUsIDErTElOS19TSVpFKTsKKyAgICBpZiAobiA9PSBudW1iZXIpIHJldHVybiAoUENSRTJfVUNIQVIgKiljb2RlOworICAgIGNvZGUgKz0gUFJJVihPUF9sZW5ndGhzKVtjXTsKKyAgICB9CisKKyAgLyogT3RoZXJ3aXNlLCB3ZSBjYW4gZ2V0IHRoZSBpdGVtJ3MgbGVuZ3RoIGZyb20gdGhlIHRhYmxlLCBleGNlcHQgdGhhdCBmb3IKKyAgcmVwZWF0ZWQgY2hhcmFjdGVyIHR5cGVzLCB3ZSBoYXZlIHRvIHRlc3QgZm9yIFxwIGFuZCBcUCwgd2hpY2ggaGF2ZSBhbiBleHRyYQorICB0d28gYnl0ZXMgb2YgcGFyYW1ldGVycywgYW5kIGZvciBNQVJLL1BSVU5FL1NLSVAvVEhFTiB3aXRoIGFuIGFyZ3VtZW50LCB3ZQorICBtdXN0IGFkZCBpbiBpdHMgbGVuZ3RoLiAqLworCisgIGVsc2UKKyAgICB7CisgICAgc3dpdGNoKGMpCisgICAgICB7CisgICAgICBjYXNlIE9QX1RZUEVTVEFSOgorICAgICAgY2FzZSBPUF9UWVBFTUlOU1RBUjoKKyAgICAgIGNhc2UgT1BfVFlQRVBMVVM6CisgICAgICBjYXNlIE9QX1RZUEVNSU5QTFVTOgorICAgICAgY2FzZSBPUF9UWVBFUVVFUlk6CisgICAgICBjYXNlIE9QX1RZUEVNSU5RVUVSWToKKyAgICAgIGNhc2UgT1BfVFlQRVBPU1NUQVI6CisgICAgICBjYXNlIE9QX1RZUEVQT1NQTFVTOgorICAgICAgY2FzZSBPUF9UWVBFUE9TUVVFUlk6CisgICAgICBpZiAoY29kZVsxXSA9PSBPUF9QUk9QIHx8IGNvZGVbMV0gPT0gT1BfTk9UUFJPUCkgY29kZSArPSAyOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfVFlQRVVQVE86CisgICAgICBjYXNlIE9QX1RZUEVNSU5VUFRPOgorICAgICAgY2FzZSBPUF9UWVBFRVhBQ1Q6CisgICAgICBjYXNlIE9QX1RZUEVQT1NVUFRPOgorICAgICAgaWYgKGNvZGVbMSArIElNTTJfU0laRV0gPT0gT1BfUFJPUCB8fCBjb2RlWzEgKyBJTU0yX1NJWkVdID09IE9QX05PVFBST1ApCisgICAgICAgIGNvZGUgKz0gMjsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX01BUks6CisgICAgICBjYXNlIE9QX1BSVU5FX0FSRzoKKyAgICAgIGNhc2UgT1BfU0tJUF9BUkc6CisgICAgICBjYXNlIE9QX1RIRU5fQVJHOgorICAgICAgY29kZSArPSBjb2RlWzFdOworICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAvKiBBZGQgaW4gdGhlIGZpeGVkIGxlbmd0aCBmcm9tIHRoZSB0YWJsZSAqLworCisgICAgY29kZSArPSBQUklWKE9QX2xlbmd0aHMpW2NdOworCisgIC8qIEluIFVURi04IGFuZCBVVEYtMTYgbW9kZXMsIG9wY29kZXMgdGhhdCBhcmUgZm9sbG93ZWQgYnkgYSBjaGFyYWN0ZXIgbWF5IGJlCisgIGZvbGxvd2VkIGJ5IGEgbXVsdGktYnl0ZSBjaGFyYWN0ZXIuIFRoZSBsZW5ndGggaW4gdGhlIHRhYmxlIGlzIGEgbWluaW11bSwgc28KKyAgd2UgaGF2ZSB0byBhcnJhbmdlIHRvIHNraXAgdGhlIGV4dHJhIGJ5dGVzLiAqLworCisjaWZkZWYgTUFZQkVfVVRGX01VTFRJCisgICAgaWYgKHV0Zikgc3dpdGNoKGMpCisgICAgICB7CisgICAgICBjYXNlIE9QX0NIQVI6CisgICAgICBjYXNlIE9QX0NIQVJJOgorICAgICAgY2FzZSBPUF9OT1Q6CisgICAgICBjYXNlIE9QX05PVEk6CisgICAgICBjYXNlIE9QX0VYQUNUOgorICAgICAgY2FzZSBPUF9FWEFDVEk6CisgICAgICBjYXNlIE9QX05PVEVYQUNUOgorICAgICAgY2FzZSBPUF9OT1RFWEFDVEk6CisgICAgICBjYXNlIE9QX1VQVE86CisgICAgICBjYXNlIE9QX1VQVE9JOgorICAgICAgY2FzZSBPUF9OT1RVUFRPOgorICAgICAgY2FzZSBPUF9OT1RVUFRPSToKKyAgICAgIGNhc2UgT1BfTUlOVVBUTzoKKyAgICAgIGNhc2UgT1BfTUlOVVBUT0k6CisgICAgICBjYXNlIE9QX05PVE1JTlVQVE86CisgICAgICBjYXNlIE9QX05PVE1JTlVQVE9JOgorICAgICAgY2FzZSBPUF9QT1NVUFRPOgorICAgICAgY2FzZSBPUF9QT1NVUFRPSToKKyAgICAgIGNhc2UgT1BfTk9UUE9TVVBUTzoKKyAgICAgIGNhc2UgT1BfTk9UUE9TVVBUT0k6CisgICAgICBjYXNlIE9QX1NUQVI6CisgICAgICBjYXNlIE9QX1NUQVJJOgorICAgICAgY2FzZSBPUF9OT1RTVEFSOgorICAgICAgY2FzZSBPUF9OT1RTVEFSSToKKyAgICAgIGNhc2UgT1BfTUlOU1RBUjoKKyAgICAgIGNhc2UgT1BfTUlOU1RBUkk6CisgICAgICBjYXNlIE9QX05PVE1JTlNUQVI6CisgICAgICBjYXNlIE9QX05PVE1JTlNUQVJJOgorICAgICAgY2FzZSBPUF9QT1NTVEFSOgorICAgICAgY2FzZSBPUF9QT1NTVEFSSToKKyAgICAgIGNhc2UgT1BfTk9UUE9TU1RBUjoKKyAgICAgIGNhc2UgT1BfTk9UUE9TU1RBUkk6CisgICAgICBjYXNlIE9QX1BMVVM6CisgICAgICBjYXNlIE9QX1BMVVNJOgorICAgICAgY2FzZSBPUF9OT1RQTFVTOgorICAgICAgY2FzZSBPUF9OT1RQTFVTSToKKyAgICAgIGNhc2UgT1BfTUlOUExVUzoKKyAgICAgIGNhc2UgT1BfTUlOUExVU0k6CisgICAgICBjYXNlIE9QX05PVE1JTlBMVVM6CisgICAgICBjYXNlIE9QX05PVE1JTlBMVVNJOgorICAgICAgY2FzZSBPUF9QT1NQTFVTOgorICAgICAgY2FzZSBPUF9QT1NQTFVTSToKKyAgICAgIGNhc2UgT1BfTk9UUE9TUExVUzoKKyAgICAgIGNhc2UgT1BfTk9UUE9TUExVU0k6CisgICAgICBjYXNlIE9QX1FVRVJZOgorICAgICAgY2FzZSBPUF9RVUVSWUk6CisgICAgICBjYXNlIE9QX05PVFFVRVJZOgorICAgICAgY2FzZSBPUF9OT1RRVUVSWUk6CisgICAgICBjYXNlIE9QX01JTlFVRVJZOgorICAgICAgY2FzZSBPUF9NSU5RVUVSWUk6CisgICAgICBjYXNlIE9QX05PVE1JTlFVRVJZOgorICAgICAgY2FzZSBPUF9OT1RNSU5RVUVSWUk6CisgICAgICBjYXNlIE9QX1BPU1FVRVJZOgorICAgICAgY2FzZSBPUF9QT1NRVUVSWUk6CisgICAgICBjYXNlIE9QX05PVFBPU1FVRVJZOgorICAgICAgY2FzZSBPUF9OT1RQT1NRVUVSWUk6CisgICAgICBpZiAoSEFTX0VYVFJBTEVOKGNvZGVbLTFdKSkgY29kZSArPSBHRVRfRVhUUkFMRU4oY29kZVstMV0pOworICAgICAgYnJlYWs7CisgICAgICB9CisjZWxzZQorICAgICh2b2lkKSh1dGYpOyAgLyogS2VlcCBjb21waWxlciBoYXBweSBieSByZWZlcmVuY2luZyBmdW5jdGlvbiBhcmd1bWVudCAqLworI2VuZGlmICAvKiBNQVlCRV9VVEZfTVVMVEkgKi8KKyAgICB9CisgIH0KK30KKworLyogRW5kIG9mIHBjcmUyX2ZpbmRfYnJhY2tldC5jICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfaW50ZXJuYWwuaCBiL2Rpc3QyL3NyYy9wY3JlMl9pbnRlcm5hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOWY2NmMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJfaW50ZXJuYWwuaApAQCAtMCwwICsxLDE5NDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgUGVybC1Db21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUENSRSBpcyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBzeW50YXgKK2FuZCBzZW1hbnRpY3MgYXJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIG9mIHRoZSBQZXJsIDUgbGFuZ3VhZ2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBQaGlsaXAgSGF6ZWwKKyAgICAgT3JpZ2luYWwgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTIgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKyAgICAgICAgIE5ldyBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworLyogV2UgZG8gbm90IHN1cHBvcnQgYm90aCBFQkNESUMgYW5kIFVuaWNvZGUgYXQgdGhlIHNhbWUgdGltZS4gVGhlICJjb25maWd1cmUiCitzY3JpcHQgcHJldmVudHMgYm90aCBiZWluZyBzZWxlY3RlZCwgYnV0IG5vdCBldmVyeWJvZHkgdXNlcyAiY29uZmlndXJlIi4gRUJDRElDCitpcyBvbmx5IHN1cHBvcnRlZCBmb3IgdGhlIDgtYml0IGxpYnJhcnksIGJ1dCB0aGUgY2hlY2sgZm9yIHRoaXMgaGFzIHRvIGJlIGxhdGVyCitpbiB0aGlzIGZpbGUsIGJlY2F1c2UgdGhlIGZpcnN0IHBhcnQgaXMgbm90IHdpZHRoLWRlcGVuZGVudCwgYW5kIGlzIGluY2x1ZGVkIGJ5CitwY3JlMnRlc3QuYyB3aXRoIENPREVfVU5JVF9XSURUSCA9PSAwLiAqLworCisjaWYgZGVmaW5lZCBFQkNESUMgJiYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUKKyNlcnJvciBUaGUgdXNlIG9mIGJvdGggRUJDRElDIGFuZCBTVVBQT1JUX1VOSUNPREUgaXMgbm90IHN1cHBvcnRlZC4KKyNlbmRpZgorCisvKiBTdGFuZGFyZCBDIGhlYWRlcnMgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogTWFjcm9zIHRvIG1ha2UgYm9vbGVhbiB2YWx1ZXMgbW9yZSBvYnZpb3VzLiBUaGUgI2lmbmRlZiBpcyB0byBwYWNpZnkKK2NvbXBpbGVyIHdhcm5pbmdzIGluIGVudmlyb25tZW50cyB3aGVyZSB0aGVzZSBtYWNyb3MgYXJlIGRlZmluZWQgZWxzZXdoZXJlLgorVW5mb3J0dW5hdGVseSwgdGhlcmUgaXMgbm8gd2F5IHRvIGRvIHRoZSBzYW1lIGZvciB0aGUgdHlwZWRlZi4gKi8KKwordHlwZWRlZiBpbnQgQk9PTDsKKyNpZm5kZWYgRkFMU0UKKyNkZWZpbmUgRkFMU0UgICAwCisjZGVmaW5lIFRSVUUgICAgMQorI2VuZGlmCisKKy8qIFZhbGdyaW5kIChtZW1jaGVjaykgc3VwcG9ydCAqLworCisjaWZkZWYgU1VQUE9SVF9WQUxHUklORAorI2luY2x1ZGUgPHZhbGdyaW5kL21lbWNoZWNrLmg+CisjZW5kaWYKKworLyogV2hlbiBjb21waWxpbmcgYSBETEwgZm9yIFdpbmRvd3MsIHRoZSBleHBvcnRlZCBzeW1ib2xzIGhhdmUgdG8gYmUgZGVjbGFyZWQKK3VzaW5nIHNvbWUgTVMgbWFnaWMuIEkgZm91bmQgc29tZSB1c2VmdWwgaW5mb3JtYXRpb24gb24gdGhpcyB3ZWIgcGFnZToKK2h0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveTRoN2JjeTYoVlMuODApLmFzcHguIEFjY29yZGluZyB0byB0aGUKK2luZm9ybWF0aW9uIHRoZXJlLCB1c2luZyBfX2RlY2xzcGVjKGRsbGV4cG9ydCkgd2l0aG91dCAiZXh0ZXJuIiB3ZSBoYXZlIGEKK2RlZmluaXRpb247IHdpdGggImV4dGVybiIgd2UgaGF2ZSBhIGRlY2xhcmF0aW9uLiBUaGUgc2V0dGluZ3MgaGVyZSBvdmVycmlkZSB0aGUKK3NldHRpbmcgaW4gcGNyZTIuaCAod2hpY2ggaXMgaW5jbHVkZWQgYmVsb3cpOyBpdCBkZWZpbmVzIG9ubHkgUENSRTJfRVhQX0RFQ0wsCit3aGljaCBpcyBhbGwgdGhhdCBpcyBuZWVkZWQgZm9yIGFwcGxpY2F0aW9ucyAodGhleSBqdXN0IGltcG9ydCB0aGUgc3ltYm9scykuIFdlCit1c2U6CisKKyAgUENSRTJfRVhQX0RFQ0wgICAgZm9yIGRlY2xhcmF0aW9ucworICBQQ1JFMl9FWFBfREVGTiAgICBmb3IgZGVmaW5pdGlvbnMKKworVGhlIHJlYXNvbiBmb3Igd3JhcHBpbmcgdGhpcyBpbiAjaWZuZGVmIFBDUkUyX0VYUF9ERUNMIGlzIHNvIHRoYXQgcGNyZTJ0ZXN0LAord2hpY2ggaXMgYW4gYXBwbGljYXRpb24sIGJ1dCBuZWVkcyB0byBpbXBvcnQgdGhpcyBmaWxlIGluIG9yZGVyIHRvICJwZWVrIiBhdAoraW50ZXJuYWxzLCBjYW4gI2luY2x1ZGUgcGNyZTIuaCBmaXJzdCB0byBnZXQgYW4gYXBwbGljYXRpb24ncy1leWUgdmlldy4KKworSW4gcHJpbmNpcGxlLCBwZW9wbGUgY29tcGlsaW5nIGZvciBub24tV2luZG93cywgbm9uLVVuaXgtbGlrZSAoaS5lLiB1bmNvbW1vbiwKK3NwZWNpYWwtcHVycG9zZSBlbnZpcm9ubWVudHMpIG1pZ2h0IHdhbnQgdG8gc3RpY2sgb3RoZXIgc3R1ZmYgaW4gZnJvbnQgb2YKK2V4cG9ydGVkIHN5bWJvbHMuIFRoYXQncyB3aHksIGluIHRoZSBub24tV2luZG93cyBjYXNlLCB3ZSBzZXQgUENSRTJfRVhQX0RFRk4KK29ubHkgaWYgaXQgaXMgbm90IGFscmVhZHkgc2V0LiAqLworCisjaWZuZGVmIFBDUkUyX0VYUF9ERUNMCisjICBpZmRlZiBfV0lOMzIKKyMgICAgaWZuZGVmIFBDUkUyX1NUQVRJQworIyAgICAgIGRlZmluZSBQQ1JFMl9FWFBfREVDTCAgICAgICBleHRlcm4gX19kZWNsc3BlYyhkbGxleHBvcnQpCisjICAgICAgZGVmaW5lIFBDUkUyX0VYUF9ERUZOICAgICAgIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIFBDUkUyX0VYUF9ERUNMICAgICAgIGV4dGVybgorIyAgICAgIGRlZmluZSBQQ1JFMl9FWFBfREVGTgorIyAgICBlbmRpZgorIyAgZWxzZQorIyAgICBpZmRlZiBfX2NwbHVzcGx1cworIyAgICAgIGRlZmluZSBQQ1JFMl9FWFBfREVDTCAgICAgICBleHRlcm4gIkMiCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgUENSRTJfRVhQX0RFQ0wgICAgICAgZXh0ZXJuCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiBQQ1JFMl9FWFBfREVGTgorIyAgICAgIGRlZmluZSBQQ1JFMl9FWFBfREVGTiAgICAgICBQQ1JFMl9FWFBfREVDTAorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBJbmNsdWRlIHRoZSBwdWJsaWMgUENSRTIgaGVhZGVyIGFuZCB0aGUgZGVmaW5pdGlvbnMgb2YgVUNQIGNoYXJhY3RlcgorcHJvcGVydHkgdmFsdWVzLiBUaGlzIG11c3QgZm9sbG93IHRoZSBzZXR0aW5nIG9mIFBDUkUyX0VYUF9ERUNMIGFib3ZlLiAqLworCisjaW5jbHVkZSAicGNyZTIuaCIKKyNpbmNsdWRlICJwY3JlMl91Y3AuaCIKKworLyogV2hlbiBQQ1JFMiBpcyBjb21waWxlZCBhcyBhIEMrKyBsaWJyYXJ5LCB0aGUgc3ViamVjdCBwb2ludGVyIGNhbiBiZSByZXBsYWNlZAord2l0aCBhIGN1c3RvbSB0eXBlLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlLCBmb3IgZXhhbXBsZSwgdG8gYWxsb3cgcGNyZTJfbWF0Y2goKQordG8gcHJvY2VzcyBzdWJqZWN0IHN0cmluZ3MgdGhhdCBhcmUgZGlzY29udGludW91cyBieSB1c2luZyBhIHNtYXJ0IHBvaW50ZXIKK2NsYXNzLiBJdCBtdXN0IGFsd2F5cyBiZSBwb3NzaWJsZSB0byBpbnNwZWN0IGFsbCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgaW4KK3BjcmUyX21hdGNoKCkgYmVjYXVzZSBvZiB0aGUgd2F5IGl0IGJhY2t0cmFja3MuICovCisKKy8qIFdBUk5JTkc6IFRoaXMgaXMgYXMgeWV0IHVudGVzdGVkIGZvciBQQ1JFMi4gKi8KKworI2lmZGVmIENVU1RPTV9TVUJKRUNUX1BUUgorI3VuZGVmIFBDUkUyX1NQVFIKKyNkZWZpbmUgUENSRTJfU1BUUiBDVVNUT01fU1VCSkVDVF9QVFIKKyNlbmRpZgorCisvKiBXaGVuIGNvbXBpbGluZyB3aXRoIHRoZSBNU1ZDIGNvbXBpbGVyLCBpdCBpcyBzb21ldGltZXMgbmVjZXNzYXJ5IHRvIGluY2x1ZGUKK2EgImNhbGxpbmcgY29udmVudGlvbiIgYmVmb3JlIGV4cG9ydGVkIGZ1bmN0aW9uIG5hbWVzLiAoVGhpcyBpcyBzZWNvbmRoYW5kCitpbmZvcm1hdGlvbjsgSSBrbm93IG5vdGhpbmcgYWJvdXQgTVNWQyBteXNlbGYpLiBGb3IgZXhhbXBsZSwgc29tZXRoaW5nIGxpa2UKKworICB2b2lkIF9fY2RlY2wgZnVuY3Rpb24oLi4uLikKKworbWlnaHQgYmUgbmVlZGVkLiBJbiBvcmRlciBzbyBtYWtlIHRoaXMgZWFzeSwgYWxsIHRoZSBleHBvcnRlZCBmdW5jdGlvbnMgaGF2ZQorUENSRTJfQ0FMTF9DT05WRU5USU9OIGp1c3QgYmVmb3JlIHRoZWlyIG5hbWVzLiBJdCBpcyByYXJlbHkgbmVlZGVkOyBpZiBub3QKK3NldCwgd2UgZW5zdXJlIGhlcmUgdGhhdCBpdCBoYXMgbm8gZWZmZWN0LiAqLworCisjaWZuZGVmIFBDUkUyX0NBTExfQ09OVkVOVElPTgorI2RlZmluZSBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KKyNlbmRpZgorCisvKiBXaGVuIGNoZWNraW5nIGZvciBpbnRlZ2VyIG92ZXJmbG93IGluIHBjcmUyX2NvbXBpbGUoKSwgd2UgbmVlZCB0byBoYW5kbGUKK2xhcmdlIGludGVnZXJzLiBJZiBhIDY0LWJpdCBpbnRlZ2VyIHR5cGUgaXMgYXZhaWxhYmxlLCB3ZSBjYW4gdXNlIHRoYXQuCitPdGhlcndpc2Ugd2UgaGF2ZSB0byBjYXN0IHRvIGRvdWJsZSwgd2hpY2ggb2YgY291cnNlIHJlcXVpcmVzIGZsb2F0aW5nIHBvaW50Cithcml0aG1ldGljLiBIYW5kbGUgdGhpcyBieSBkZWZpbmluZyBhIG1hY3JvIGZvciB0aGUgYXBwcm9wcmlhdGUgdHlwZS4gSWYKK3N0ZGludC5oIGlzIGF2YWlsYWJsZSwgaW5jbHVkZSBpdDsgaXQgbWF5IGRlZmluZSBJTlQ2NF9NQVguIFN5c3RlbXMgdGhhdCBkbyBub3QKK2hhdmUgc3RkaW50LmggKGUuZy4gU29sYXJpcykgbWF5IGhhdmUgaW50dHlwZXMuaC4gVGhlIG1hY3JvIGludDY0X3QgbWF5IGJlIHNldAorYnkgImNvbmZpZ3VyZSIuICovCisKKyNpZiBkZWZpbmVkIEhBVkVfU1RESU5UX0gKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbGlmIGRlZmluZWQgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZCBJTlQ2NF9NQVggfHwgZGVmaW5lZCBpbnQ2NF90CisjZGVmaW5lIElOVDY0X09SX0RPVUJMRSBpbnQ2NF90CisjZWxzZQorI2RlZmluZSBJTlQ2NF9PUl9ET1VCTEUgZG91YmxlCisjZW5kaWYKKworLyogV2hlbiBjb21waWxpbmcgZm9yIHVzZSB3aXRoIHRoZSBWaXJ0dWFsIFBhc2NhbCBjb21waWxlciwgdGhlc2UgZnVuY3Rpb25zCituZWVkIHRvIGhhdmUgdGhlaXIgbmFtZXMgY2hhbmdlZC4gUENSRSBtdXN0IGJlIGNvbXBpbGVkIHdpdGggdGhlIC1EVlBDT01QQVQKK29wdGlvbiBvbiB0aGUgY29tbWFuZCBsaW5lLiAqLworCisjaWZkZWYgVlBDT01QQVQKKyNkZWZpbmUgc3RybGVuKHMpICAgICAgICBfc3RybGVuKHMpCisjZGVmaW5lIHN0cm5jbXAoczEsczIsbSkgX3N0cm5jbXAoczEsczIsbSkKKyNkZWZpbmUgbWVtY21wKHMsYyxuKSAgICBfbWVtY21wKHMsYyxuKQorI2RlZmluZSBtZW1jcHkoZCxzLG4pICAgIF9tZW1jcHkoZCxzLG4pCisjZGVmaW5lIG1lbW1vdmUoZCxzLG4pICAgX21lbW1vdmUoZCxzLG4pCisjZGVmaW5lIG1lbXNldChzLGMsbikgICAgX21lbXNldChzLGMsbikKKyNlbHNlICAvKiBWUENPTVBBVCAqLworCisvKiBUbyBjb3BlIHdpdGggU3VuT1M0IGFuZCBvdGhlciBzeXN0ZW1zIHRoYXQgbGFjayBtZW1tb3ZlKCkgYnV0IGhhdmUgYmNvcHkoKSwKK2RlZmluZSBhIG1hY3JvIGZvciBtZW1tb3ZlKCkgaWYgSEFWRV9NRU1NT1ZFIGlzIGZhbHNlLCBwcm92aWRlZCB0aGF0IEhBVkVfQkNPUFkKK2lzIHNldC4gT3RoZXJ3aXNlLCBpbmNsdWRlIGFuIGVtdWxhdGluZyBmdW5jdGlvbiBmb3IgdGhvc2Ugc3lzdGVtcyB0aGF0IGhhdmUKK25laXRoZXIgKHRoZXJlIHNvbWUgbm9uLVVuaXggZW52aXJvbm1lbnRzIHdoZXJlIHRoaXMgaXMgdGhlIGNhc2UpLiAqLworCisjaWZuZGVmIEhBVkVfTUVNTU9WRQorI3VuZGVmICBtZW1tb3ZlICAgICAgICAvKiBzb21lIHN5c3RlbXMgbWF5IGhhdmUgYSBtYWNybyAqLworI2lmZGVmIEhBVkVfQkNPUFkKKyNkZWZpbmUgbWVtbW92ZShhLCBiLCBjKSBiY29weShiLCBhLCBjKQorI2Vsc2UgIC8qIEhBVkVfQkNPUFkgKi8KK3N0YXRpYyB2b2lkICoKK3BjcmVfbWVtbW92ZSh2b2lkICpkLCBjb25zdCB2b2lkICpzLCBzaXplX3QgbikKK3sKK3NpemVfdCBpOwordW5zaWduZWQgY2hhciAqZGVzdCA9ICh1bnNpZ25lZCBjaGFyICopZDsKK2NvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYyA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopczsKK2lmIChkZXN0ID4gc3JjKQorICB7CisgIGRlc3QgKz0gbjsKKyAgc3JjICs9IG47CisgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpICooLS1kZXN0KSA9ICooLS1zcmMpOworICByZXR1cm4gKHZvaWQgKilkZXN0OworICB9CitlbHNlCisgIHsKKyAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgKmRlc3QrKyA9ICpzcmMrKzsKKyAgcmV0dXJuICh2b2lkICopKGRlc3QgLSBuKTsKKyAgfQorfQorI2RlZmluZSBtZW1tb3ZlKGEsIGIsIGMpIHBjcmVfbWVtbW92ZShhLCBiLCBjKQorI2VuZGlmICAgLyogbm90IEhBVkVfQkNPUFkgKi8KKyNlbmRpZiAgIC8qIG5vdCBIQVZFX01FTU1PVkUgKi8KKyNlbmRpZiAgIC8qIG5vdCBWUENPTVBBVCAqLworCisvKiBFeHRlcm5hbCAoaW4gdGhlIEMgc2Vuc2UpIGZ1bmN0aW9ucyBhbmQgdGFibGVzIHRoYXQgYXJlIHByaXZhdGUgdG8gdGhlCitsaWJyYXJpZXMgYXJlIGFsd2F5cyByZWZlcmVuY2VkIHVzaW5nIHRoZSBQUklWIG1hY3JvLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlCitmb3IgcGNyZTJ0ZXN0LmMgdG8gaW5jbHVkZSBzb21lIG9mIHRoZSBzb3VyY2UgZmlsZXMgZnJvbSB0aGUgbGlicmFyaWVzIHVzaW5nIGEKK2RpZmZlcmVudCBQUklWIGRlZmluaXRpb24gdG8gYXZvaWQgbmFtZSBjbGFzaGVzLiBJdCBhbHNvIG1ha2VzIGl0IGNsZWFyIGluIHRoZQorY29kZSB0aGF0IGEgbm9uLXN0YXRpYyBvYmplY3QgaXMgYmVpbmcgcmVmZXJlbmNlZC4gKi8KKworI2lmbmRlZiBQUklWCisjZGVmaW5lIFBSSVYobmFtZSkgX3BjcmUyXyMjbmFtZQorI2VuZGlmCisKKy8qIFRoaXMgaXMgYW4gdW5zaWduZWQgaW50IHZhbHVlIHRoYXQgbm8gVVRGIGNoYXJhY3RlciBjYW4gZXZlciBoYXZlLCBhcworVW5pY29kZSBkb2Vzbid0IGdvIGJleW9uZCAweDAwMTBmZmZmLiAqLworCisjZGVmaW5lIE5PVEFDSEFSIDB4ZmZmZmZmZmYKKworLyogVGhpcyBpcyB0aGUgbGFyZ2VzdCB2YWxpZCBVVEYvVW5pY29kZSBjb2RlIHBvaW50LiAqLworCisjZGVmaW5lIE1BWF9VVEZfQ09ERV9QT0lOVCAweDEwZmZmZgorCisvKiBDb21waWxlLXRpbWUgZXJyb3JzIGFyZSBhZGRlZCB0byB0aGlzIHZhbHVlLiBBcyB0aGV5IGFyZSBkb2N1bWVudGVkLCBpdAorc2hvdWxkIHByb2JhYmx5IG5ldmVyIGJlIGNoYW5nZWQuICovCisKKyNkZWZpbmUgQ09NUElMRV9FUlJPUl9CQVNFIDEwMAorCisvKiBEZWZpbmUgdGhlIGRlZmF1bHQgQlNSIGNvbnZlbnRpb24uICovCisKKyNpZmRlZiBCU1JfQU5ZQ1JMRgorI2RlZmluZSBCU1JfREVGQVVMVCBQQ1JFMl9CU1JfQU5ZQ1JMRgorI2Vsc2UKKyNkZWZpbmUgQlNSX0RFRkFVTFQgUENSRTJfQlNSX1VOSUNPREUKKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0gQmFzaWMgVVRGLTggbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhlc2UgVVRGLTggbWFjcm9zIGFyZSBhbHdheXMgZGVmaW5lZCBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgaW4gcGNyZTJ0ZXN0IGZvcgoraGFuZGxpbmcgd2lkZSBjaGFyYWN0ZXJzIGluIDE2LWJpdCBhbmQgMzItYml0IG1vZGVzLCBldmVuIGlmIGFuIDgtYml0IGxpYnJhcnkKK2lzIG5vdCBzdXBwb3J0ZWQuICovCisKKy8qIFRlc3RzIHdoZXRoZXIgYSBVVEYtOCBjb2RlIHBvaW50IG5lZWRzIGV4dHJhIGJ5dGVzIHRvIGRlY29kZS4gKi8KKworI2RlZmluZSBIQVNVVEY4RVhUUkFMRU4oYykgKChjKSA+PSAweGMwKQorCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyB3ZXJlIG9yaWdpbmFsbHkgd3JpdHRlbiBpbiB0aGUgZm9ybSBvZiBsb29wcyB0aGF0IHVzZWQKK2RhdGEgZnJvbSB0aGUgdGFibGVzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggUFJJVih1dGY4X3RhYmxlKS4gVGhleSB3ZXJlCityZXdyaXR0ZW4gYnkgYSB1c2VyIHNvIGFzIG5vdCB0byB1c2UgbG9vcHMsIGJlY2F1c2UgaW4gc29tZSBlbnZpcm9ubWVudHMgdGhpcworZ2l2ZXMgYSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZSBhZHZhbnRhZ2UsIGFuZCBpdCBzZWVtcyBuZXZlciB0byBkbyBhbnkgaGFybS4KKyovCisKKy8qIEJhc2UgbWFjcm8gdG8gcGljayB1cCB0aGUgcmVtYWluaW5nIGJ5dGVzIG9mIGEgVVRGLTggY2hhcmFjdGVyLCBub3QKK2FkdmFuY2luZyB0aGUgcG9pbnRlci4gKi8KKworI2RlZmluZSBHRVRVVEY4KGMsIGVwdHIpIFwKKyAgICB7IFwKKyAgICBpZiAoKGMgJiAweDIwKSA9PSAwKSBcCisgICAgICBjID0gKChjICYgMHgxZikgPDwgNikgfCAoZXB0clsxXSAmIDB4M2YpOyBcCisgICAgZWxzZSBpZiAoKGMgJiAweDEwKSA9PSAwKSBcCisgICAgICBjID0gKChjICYgMHgwZikgPDwgMTIpIHwgKChlcHRyWzFdICYgMHgzZikgPDwgNikgfCAoZXB0clsyXSAmIDB4M2YpOyBcCisgICAgZWxzZSBpZiAoKGMgJiAweDA4KSA9PSAwKSBcCisgICAgICBjID0gKChjICYgMHgwNykgPDwgMTgpIHwgKChlcHRyWzFdICYgMHgzZikgPDwgMTIpIHwgXAorICAgICAgKChlcHRyWzJdICYgMHgzZikgPDwgNikgfCAoZXB0clszXSAmIDB4M2YpOyBcCisgICAgZWxzZSBpZiAoKGMgJiAweDA0KSA9PSAwKSBcCisgICAgICBjID0gKChjICYgMHgwMykgPDwgMjQpIHwgKChlcHRyWzFdICYgMHgzZikgPDwgMTgpIHwgXAorICAgICAgICAgICgoZXB0clsyXSAmIDB4M2YpIDw8IDEyKSB8ICgoZXB0clszXSAmIDB4M2YpIDw8IDYpIHwgXAorICAgICAgICAgIChlcHRyWzRdICYgMHgzZik7IFwKKyAgICBlbHNlIFwKKyAgICAgIGMgPSAoKGMgJiAweDAxKSA8PCAzMCkgfCAoKGVwdHJbMV0gJiAweDNmKSA8PCAyNCkgfCBcCisgICAgICAgICAgKChlcHRyWzJdICYgMHgzZikgPDwgMTgpIHwgKChlcHRyWzNdICYgMHgzZikgPDwgMTIpIHwgXAorICAgICAgICAgICgoZXB0cls0XSAmIDB4M2YpIDw8IDYpIHwgKGVwdHJbNV0gJiAweDNmKTsgXAorICAgIH0KKworLyogQmFzZSBtYWNybyB0byBwaWNrIHVwIHRoZSByZW1haW5pbmcgYnl0ZXMgb2YgYSBVVEYtOCBjaGFyYWN0ZXIsIGFkdmFuY2luZwordGhlIHBvaW50ZXIuICovCisKKyNkZWZpbmUgR0VUVVRGOElOQyhjLCBlcHRyKSBcCisgICAgeyBcCisgICAgaWYgKChjICYgMHgyMCkgPT0gMCkgXAorICAgICAgYyA9ICgoYyAmIDB4MWYpIDw8IDYpIHwgKCplcHRyKysgJiAweDNmKTsgXAorICAgIGVsc2UgaWYgKChjICYgMHgxMCkgPT0gMCkgXAorICAgICAgeyBcCisgICAgICBjID0gKChjICYgMHgwZikgPDwgMTIpIHwgKCgqZXB0ciAmIDB4M2YpIDw8IDYpIHwgKGVwdHJbMV0gJiAweDNmKTsgXAorICAgICAgZXB0ciArPSAyOyBcCisgICAgICB9IFwKKyAgICBlbHNlIGlmICgoYyAmIDB4MDgpID09IDApIFwKKyAgICAgIHsgXAorICAgICAgYyA9ICgoYyAmIDB4MDcpIDw8IDE4KSB8ICgoKmVwdHIgJiAweDNmKSA8PCAxMikgfCBcCisgICAgICAgICAgKChlcHRyWzFdICYgMHgzZikgPDwgNikgfCAoZXB0clsyXSAmIDB4M2YpOyBcCisgICAgICBlcHRyICs9IDM7IFwKKyAgICAgIH0gXAorICAgIGVsc2UgaWYgKChjICYgMHgwNCkgPT0gMCkgXAorICAgICAgeyBcCisgICAgICBjID0gKChjICYgMHgwMykgPDwgMjQpIHwgKCgqZXB0ciAmIDB4M2YpIDw8IDE4KSB8IFwKKyAgICAgICAgICAoKGVwdHJbMV0gJiAweDNmKSA8PCAxMikgfCAoKGVwdHJbMl0gJiAweDNmKSA8PCA2KSB8IFwKKyAgICAgICAgICAoZXB0clszXSAmIDB4M2YpOyBcCisgICAgICBlcHRyICs9IDQ7IFwKKyAgICAgIH0gXAorICAgIGVsc2UgXAorICAgICAgeyBcCisgICAgICBjID0gKChjICYgMHgwMSkgPDwgMzApIHwgKCgqZXB0ciAmIDB4M2YpIDw8IDI0KSB8IFwKKyAgICAgICAgICAoKGVwdHJbMV0gJiAweDNmKSA8PCAxOCkgfCAoKGVwdHJbMl0gJiAweDNmKSA8PCAxMikgfCBcCisgICAgICAgICAgKChlcHRyWzNdICYgMHgzZikgPDwgNikgfCAoZXB0cls0XSAmIDB4M2YpOyBcCisgICAgICBlcHRyICs9IDU7IFwKKyAgICAgIH0gXAorICAgIH0KKworLyogQmFzZSBtYWNybyB0byBwaWNrIHVwIHRoZSByZW1haW5pbmcgYnl0ZXMgb2YgYSBVVEYtOCBjaGFyYWN0ZXIsIG5vdAorYWR2YW5jaW5nIHRoZSBwb2ludGVyLCBpbmNyZW1lbnRpbmcgdGhlIGxlbmd0aC4gKi8KKworI2RlZmluZSBHRVRVVEY4TEVOKGMsIGVwdHIsIGxlbikgXAorICAgIHsgXAorICAgIGlmICgoYyAmIDB4MjApID09IDApIFwKKyAgICAgIHsgXAorICAgICAgYyA9ICgoYyAmIDB4MWYpIDw8IDYpIHwgKGVwdHJbMV0gJiAweDNmKTsgXAorICAgICAgbGVuKys7IFwKKyAgICAgIH0gXAorICAgIGVsc2UgaWYgKChjICYgMHgxMCkgID09IDApIFwKKyAgICAgIHsgXAorICAgICAgYyA9ICgoYyAmIDB4MGYpIDw8IDEyKSB8ICgoZXB0clsxXSAmIDB4M2YpIDw8IDYpIHwgKGVwdHJbMl0gJiAweDNmKTsgXAorICAgICAgbGVuICs9IDI7IFwKKyAgICAgIH0gXAorICAgIGVsc2UgaWYgKChjICYgMHgwOCkgID09IDApIFwKKyAgICAgIHtcCisgICAgICBjID0gKChjICYgMHgwNykgPDwgMTgpIHwgKChlcHRyWzFdICYgMHgzZikgPDwgMTIpIHwgXAorICAgICAgICAgICgoZXB0clsyXSAmIDB4M2YpIDw8IDYpIHwgKGVwdHJbM10gJiAweDNmKTsgXAorICAgICAgbGVuICs9IDM7IFwKKyAgICAgIH0gXAorICAgIGVsc2UgaWYgKChjICYgMHgwNCkgID09IDApIFwKKyAgICAgIHsgXAorICAgICAgYyA9ICgoYyAmIDB4MDMpIDw8IDI0KSB8ICgoZXB0clsxXSAmIDB4M2YpIDw8IDE4KSB8IFwKKyAgICAgICAgICAoKGVwdHJbMl0gJiAweDNmKSA8PCAxMikgfCAoKGVwdHJbM10gJiAweDNmKSA8PCA2KSB8IFwKKyAgICAgICAgICAoZXB0cls0XSAmIDB4M2YpOyBcCisgICAgICBsZW4gKz0gNDsgXAorICAgICAgfSBcCisgICAgZWxzZSBcCisgICAgICB7XAorICAgICAgYyA9ICgoYyAmIDB4MDEpIDw8IDMwKSB8ICgoZXB0clsxXSAmIDB4M2YpIDw8IDI0KSB8IFwKKyAgICAgICAgICAoKGVwdHJbMl0gJiAweDNmKSA8PCAxOCkgfCAoKGVwdHJbM10gJiAweDNmKSA8PCAxMikgfCBcCisgICAgICAgICAgKChlcHRyWzRdICYgMHgzZikgPDwgNikgfCAoZXB0cls1XSAmIDB4M2YpOyBcCisgICAgICBsZW4gKz0gNTsgXAorICAgICAgfSBcCisgICAgfQorCisvKiAtLS0tLS0tLS0tLS0tLS0gV2hpdGVzcGFjZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUZXN0cyBmb3IgVW5pY29kZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgbXVzdCBjaGVjayBhCitudW1iZXIgb2YgZGlmZmVyZW50IHZhbHVlcy4gVXNpbmcgYSBzd2l0Y2ggc3RhdGVtZW50IGZvciB0aGlzIGdlbmVyYXRlcyB0aGUKK2Zhc3Rlc3QgY29kZSAobm8gbG9vcCwgbm8gbWVtb3J5IGFjY2VzcyksIGFuZCB0aGVyZSBhcmUgc2V2ZXJhbCBwbGFjZXMgaW4gdGhlCitpbnRlcnByZXRlciBjb2RlIHdoZXJlIHRoaXMgaGFwcGVucy4gSW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIHRoZSBjYXNlIGxpc3RzCityZW1haW4gaW4gc3RlcCwgd2UgdXNlIG1hY3JvcyBzbyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIHBsYWNlIHdoZXJlIHRoZSBsaXN0cworYXJlIGRlZmluZWQuCisKK1RoZXNlIHZhbHVlcyBhcmUgYWxzbyByZXF1aXJlZCBhcyBsaXN0cyBpbiBwY3JlMl9jb21waWxlLmMgd2hlbiBwcm9jZXNzaW5nIFxoLAorXEgsIFx2IGFuZCBcViBpbiBhIGNoYXJhY3RlciBjbGFzcy4gVGhlIGxpc3RzIGFyZSBkZWZpbmVkIGluIHBjcmUyX3RhYmxlcy5jLAorYnV0IG1hY3JvcyB0aGF0IGRlZmluZSB0aGUgdmFsdWVzIGFyZSBoZXJlIHNvIHRoYXQgYWxsIHRoZSBkZWZpbml0aW9ucyBhcmUKK3RvZ2V0aGVyLiBUaGUgbGlzdHMgbXVzdCBiZSBpbiBhc2NlbmRpbmcgY2hhcmFjdGVyIG9yZGVyLCB0ZXJtaW5hdGVkIGJ5CitOT1RBQ0hBUiAod2hpY2ggaXMgMHhmZmZmZmZmZikuCisKK0FueSBjaGFuZ2VzIHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgdmFyaW91cyBtYWNyb3MgYXJlIGtlcHQgaW4gc3RlcCB3aXRoIGVhY2gKK290aGVyLiBOT1RFOiBUaGUgdmFsdWVzIGFsc28gYXBwZWFyIGluIHBjcmUyX2ppdF9jb21waWxlLmMuICovCisKKy8qIC0tLS0tLS0tLS0tLS0tIEFTQ0lJL1VuaWNvZGUgZW52aXJvbm1lbnRzIC0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgRUJDRElDCisKKy8qIENoYXJhY3RlciBVKzE4MEUgKE1vbmdvbGlhbiBWb3dlbCBTZXBhcmF0b3IpIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbGlzdCBvZgorc3BhY2VzIGluIHRoZSBVbmljb2RlIGZpbGUgUHJvcExpc3QudHh0LCBhbmQgUGVybCBkb2VzIG5vdCByZWNvZ25pemUgaXQgYXMgYQorc3BhY2UuIEhvd2V2ZXIsIGluIG1hbnkgb3RoZXIgc291cmNlcyBpdCBpcyBsaXN0ZWQgYXMgYSBzcGFjZSBhbmQgaGFzIGJlZW4gaW4KK1BDUkUgZm9yIGEgbG9uZyB0aW1lLiAqLworCisjZGVmaW5lIEhTUEFDRV9MSVNUIFwKKyAgQ0hBUl9IVCwgQ0hBUl9TUEFDRSwgQ0hBUl9OQlNQLCBcCisgIDB4MTY4MCwgMHgxODBlLCAweDIwMDAsIDB4MjAwMSwgMHgyMDAyLCAweDIwMDMsIDB4MjAwNCwgMHgyMDA1LCBcCisgIDB4MjAwNiwgMHgyMDA3LCAweDIwMDgsIDB4MjAwOSwgMHgyMDBBLCAweDIwMmYsIDB4MjA1ZiwgMHgzMDAwLCBcCisgIE5PVEFDSEFSCisKKyNkZWZpbmUgSFNQQUNFX01VTFRJQllURV9DQVNFUyBcCisgIGNhc2UgMHgxNjgwOiAgLyogT0dIQU0gU1BBQ0UgTUFSSyAqLyBcCisgIGNhc2UgMHgxODBlOiAgLyogTU9OR09MSUFOIFZPV0VMIFNFUEFSQVRPUiAqLyBcCisgIGNhc2UgMHgyMDAwOiAgLyogRU4gUVVBRCAqLyBcCisgIGNhc2UgMHgyMDAxOiAgLyogRU0gUVVBRCAqLyBcCisgIGNhc2UgMHgyMDAyOiAgLyogRU4gU1BBQ0UgKi8gXAorICBjYXNlIDB4MjAwMzogIC8qIEVNIFNQQUNFICovIFwKKyAgY2FzZSAweDIwMDQ6ICAvKiBUSFJFRS1QRVItRU0gU1BBQ0UgKi8gXAorICBjYXNlIDB4MjAwNTogIC8qIEZPVVItUEVSLUVNIFNQQUNFICovIFwKKyAgY2FzZSAweDIwMDY6ICAvKiBTSVgtUEVSLUVNIFNQQUNFICovIFwKKyAgY2FzZSAweDIwMDc6ICAvKiBGSUdVUkUgU1BBQ0UgKi8gXAorICBjYXNlIDB4MjAwODogIC8qIFBVTkNUVUFUSU9OIFNQQUNFICovIFwKKyAgY2FzZSAweDIwMDk6ICAvKiBUSElOIFNQQUNFICovIFwKKyAgY2FzZSAweDIwMEE6ICAvKiBIQUlSIFNQQUNFICovIFwKKyAgY2FzZSAweDIwMmY6ICAvKiBOQVJST1cgTk8tQlJFQUsgU1BBQ0UgKi8gXAorICBjYXNlIDB4MjA1ZjogIC8qIE1FRElVTSBNQVRIRU1BVElDQUwgU1BBQ0UgKi8gXAorICBjYXNlIDB4MzAwMCAgIC8qIElERU9HUkFQSElDIFNQQUNFICovCisKKyNkZWZpbmUgSFNQQUNFX0JZVEVfQ0FTRVMgXAorICBjYXNlIENIQVJfSFQ6IFwKKyAgY2FzZSBDSEFSX1NQQUNFOiBcCisgIGNhc2UgQ0hBUl9OQlNQCisKKyNkZWZpbmUgSFNQQUNFX0NBU0VTIFwKKyAgSFNQQUNFX0JZVEVfQ0FTRVM6IFwKKyAgSFNQQUNFX01VTFRJQllURV9DQVNFUworCisjZGVmaW5lIFZTUEFDRV9MSVNUIFwKKyAgQ0hBUl9MRiwgQ0hBUl9WVCwgQ0hBUl9GRiwgQ0hBUl9DUiwgQ0hBUl9ORUwsIDB4MjAyOCwgMHgyMDI5LCBOT1RBQ0hBUgorCisjZGVmaW5lIFZTUEFDRV9NVUxUSUJZVEVfQ0FTRVMgXAorICBjYXNlIDB4MjAyODogICAgLyogTElORSBTRVBBUkFUT1IgKi8gXAorICBjYXNlIDB4MjAyOSAgICAgLyogUEFSQUdSQVBIIFNFUEFSQVRPUiAqLworCisjZGVmaW5lIFZTUEFDRV9CWVRFX0NBU0VTIFwKKyAgY2FzZSBDSEFSX0xGOiBcCisgIGNhc2UgQ0hBUl9WVDogXAorICBjYXNlIENIQVJfRkY6IFwKKyAgY2FzZSBDSEFSX0NSOiBcCisgIGNhc2UgQ0hBUl9ORUwKKworI2RlZmluZSBWU1BBQ0VfQ0FTRVMgXAorICBWU1BBQ0VfQllURV9DQVNFUzogXAorICBWU1BBQ0VfTVVMVElCWVRFX0NBU0VTCisKKy8qIC0tLS0tLS0tLS0tLS0tIEVCQ0RJQyBlbnZpcm9ubWVudHMgLS0tLS0tLS0tLS0tLS0gKi8KKworI2Vsc2UKKyNkZWZpbmUgSFNQQUNFX0xJU1QgQ0hBUl9IVCwgQ0hBUl9TUEFDRSwgQ0hBUl9OQlNQLCBOT1RBQ0hBUgorCisjZGVmaW5lIEhTUEFDRV9CWVRFX0NBU0VTIFwKKyAgY2FzZSBDSEFSX0hUOiBcCisgIGNhc2UgQ0hBUl9TUEFDRTogXAorICBjYXNlIENIQVJfTkJTUAorCisjZGVmaW5lIEhTUEFDRV9DQVNFUyBIU1BBQ0VfQllURV9DQVNFUworCisjaWZkZWYgRUJDRElDX05MMjUKKyNkZWZpbmUgVlNQQUNFX0xJU1QgXAorICBDSEFSX1ZULCBDSEFSX0ZGLCBDSEFSX0NSLCBDSEFSX05FTCwgQ0hBUl9MRiwgTk9UQUNIQVIKKyNlbHNlCisjZGVmaW5lIFZTUEFDRV9MSVNUIFwKKyAgQ0hBUl9WVCwgQ0hBUl9GRiwgQ0hBUl9DUiwgQ0hBUl9MRiwgQ0hBUl9ORUwsIE5PVEFDSEFSCisjZW5kaWYKKworI2RlZmluZSBWU1BBQ0VfQllURV9DQVNFUyBcCisgIGNhc2UgQ0hBUl9MRjogXAorICBjYXNlIENIQVJfVlQ6IFwKKyAgY2FzZSBDSEFSX0ZGOiBcCisgIGNhc2UgQ0hBUl9DUjogXAorICBjYXNlIENIQVJfTkVMCisKKyNkZWZpbmUgVlNQQUNFX0NBU0VTIFZTUEFDRV9CWVRFX0NBU0VTCisjZW5kaWYgIC8qIEVCQ0RJQyAqLworCisvKiAtLS0tLS0tLS0tLS0tLSBFbmQgb2Ygd2hpdGVzcGFjZSBtYWNyb3MgLS0tLS0tLS0tLS0tLS0gKi8KKworCisvKiBQQ1JFMiBpcyBhYmxlIHRvIHN1cHBvcnQgc2V2ZXJhbCBkaWZmZXJlbnQga2luZHMgb2YgbmV3bGluZSAoQ1IsIExGLCBDUkxGLAorImFueSIgYW5kICJhbnljcmxmIiBhdCBwcmVzZW50KS4gVGhlIGZvbGxvd2luZyBtYWNyb3MgYXJlIHVzZWQgdG8gcGFja2FnZSB1cAordGVzdGluZyBmb3IgbmV3bGluZXMuIE5MQkxPQ0ssIFBTU1RBUlQsIGFuZCBQU0VORCBhcmUgZGVmaW5lZCBpbiB0aGUgdmFyaW91cworbW9kdWxlcyB0byBpbmRpY2F0ZSBpbiB3aGljaCBkYXRhYmxvY2sgdGhlIHBhcmFtZXRlcnMgZXhpc3QsIGFuZCB3aGF0IHRoZQorc3RhcnQvZW5kIG9mIHN0cmluZyBmaWVsZCBuYW1lcyBhcmUuICovCisKKyNkZWZpbmUgTkxUWVBFX0ZJWEVEICAgIDAgICAgIC8qIE5ld2xpbmUgaXMgYSBmaXhlZCBsZW5ndGggc3RyaW5nICovCisjZGVmaW5lIE5MVFlQRV9BTlkgICAgICAxICAgICAvKiBOZXdsaW5lIGlzIGFueSBVbmljb2RlIGxpbmUgZW5kaW5nICovCisjZGVmaW5lIE5MVFlQRV9BTllDUkxGICAyICAgICAvKiBOZXdsaW5lIGlzIENSLCBMRiwgb3IgQ1JMRiAqLworCisvKiBUaGlzIG1hY3JvIGNoZWNrcyBmb3IgYSBuZXdsaW5lIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAqLworCisjZGVmaW5lIElTX05FV0xJTkUocCkgXAorICAoKE5MQkxPQ0stPm5sdHlwZSAhPSBOTFRZUEVfRklYRUQpPyBcCisgICAgKChwKSA8IE5MQkxPQ0stPlBTRU5EICYmIFwKKyAgICAgUFJJVihpc19uZXdsaW5lKSgocCksIE5MQkxPQ0stPm5sdHlwZSwgTkxCTE9DSy0+UFNFTkQsIFwKKyAgICAgICAmKE5MQkxPQ0stPm5sbGVuKSwgdXRmKSkgXAorICAgIDogXAorICAgICgocCkgPD0gTkxCTE9DSy0+UFNFTkQgLSBOTEJMT0NLLT5ubGxlbiAmJiBcCisgICAgIFVDSEFSMjFURVNUKHApID09IE5MQkxPQ0stPm5sWzBdICYmIFwKKyAgICAgKE5MQkxPQ0stPm5sbGVuID09IDEgfHwgVUNIQVIyMVRFU1QocCsxKSA9PSBOTEJMT0NLLT5ubFsxXSkgICAgICAgXAorICAgICkgXAorICApCisKKy8qIFRoaXMgbWFjcm8gY2hlY2tzIGZvciBhIG5ld2xpbmUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSBnaXZlbiBwb3NpdGlvbiAqLworCisjZGVmaW5lIFdBU19ORVdMSU5FKHApIFwKKyAgKChOTEJMT0NLLT5ubHR5cGUgIT0gTkxUWVBFX0ZJWEVEKT8gXAorICAgICgocCkgPiBOTEJMT0NLLT5QU1NUQVJUICYmIFwKKyAgICAgUFJJVih3YXNfbmV3bGluZSkoKHApLCBOTEJMT0NLLT5ubHR5cGUsIE5MQkxPQ0stPlBTU1RBUlQsIFwKKyAgICAgICAmKE5MQkxPQ0stPm5sbGVuKSwgdXRmKSkgXAorICAgIDogXAorICAgICgocCkgPj0gTkxCTE9DSy0+UFNTVEFSVCArIE5MQkxPQ0stPm5sbGVuICYmIFwKKyAgICAgVUNIQVIyMVRFU1QocCAtIE5MQkxPQ0stPm5sbGVuKSA9PSBOTEJMT0NLLT5ubFswXSAmJiAgICAgICAgICAgICAgXAorICAgICAoTkxCTE9DSy0+bmxsZW4gPT0gMSB8fCBVQ0hBUjIxVEVTVChwIC0gTkxCTE9DSy0+bmxsZW4gKyAxKSA9PSBOTEJMT0NLLT5ubFsxXSkgXAorICAgICkgXAorICApCisKKy8qIFByaXZhdGUgZmxhZ3MgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZWQgcGF0dGVybi4gVGhlIGZpcnN0Cit0aHJlZSBtdXN0IG5vdCBiZSBjaGFuZ2VkLCBiZWNhdXNlIHdoaWNoZXZlciBpcyBzZXQgaXMgYWN0dWFsbHkgdGhlIG51bWJlciBvZgorYnl0ZXMgaW4gYSBjb2RlIHVuaXQgaW4gdGhhdCBtb2RlLiAqLworCisjZGVmaW5lIFBDUkUyX01PREU4ICAgICAgICAgMHgwMDAwMDAwMSAgLyogY29tcGlsZWQgaW4gOCBiaXQgbW9kZSAqLworI2RlZmluZSBQQ1JFMl9NT0RFMTYgICAgICAgIDB4MDAwMDAwMDIgIC8qIGNvbXBpbGVkIGluIDE2IGJpdCBtb2RlICovCisjZGVmaW5lIFBDUkUyX01PREUzMiAgICAgICAgMHgwMDAwMDAwNCAgLyogY29tcGlsZWQgaW4gMzIgYml0IG1vZGUgKi8KKyNkZWZpbmUgUENSRTJfRklSU1RTRVQgICAgICAweDAwMDAwMDEwICAvKiBmaXJzdF9jb2RlIHVuaXQgaXMgc2V0ICovCisjZGVmaW5lIFBDUkUyX0ZJUlNUQ0FTRUxFU1MgMHgwMDAwMDAyMCAgLyogY2FzZWxlc3MgZmlyc3QgY29kZSB1bml0ICovCisjZGVmaW5lIFBDUkUyX0ZJUlNUTUFQU0VUICAgMHgwMDAwMDA0MCAgLyogYml0bWFwIG9mIGZpcnN0IGNvZGUgdW5pdHMgaXMgc2V0ICovCisjZGVmaW5lIFBDUkUyX0xBU1RTRVQgICAgICAgMHgwMDAwMDA4MCAgLyogbGFzdCBjb2RlIHVuaXQgaXMgc2V0ICovCisjZGVmaW5lIFBDUkUyX0xBU1RDQVNFTEVTUyAgMHgwMDAwMDEwMCAgLyogY2FzZWxlc3MgbGFzdCBjb2RlIHVuaXQgKi8KKyNkZWZpbmUgUENSRTJfU1RBUlRMSU5FICAgICAweDAwMDAwMjAwICAvKiBzdGFydCBhZnRlciBcbiBmb3IgbXVsdGlsaW5lICovCisjZGVmaW5lIFBDUkUyX0pDSEFOR0VEICAgICAgMHgwMDAwMDQwMCAgLyogaiBvcHRpb24gdXNlZCBpbiBwYXR0ZXJuICovCisjZGVmaW5lIFBDUkUyX0hBU0NST1JMRiAgICAgMHgwMDAwMDgwMCAgLyogZXhwbGljaXQgXHIgb3IgXG4gaW4gcGF0dGVybiAqLworI2RlZmluZSBQQ1JFMl9IQVNUSEVOICAgICAgIDB4MDAwMDEwMDAgIC8qIHBhdHRlcm4gY29udGFpbnMgKCpUSEVOKSAqLworI2RlZmluZSBQQ1JFMl9NQVRDSF9FTVBUWSAgIDB4MDAwMDIwMDAgIC8qIHBhdHRlcm4gY2FuIG1hdGNoIGVtcHR5IHN0cmluZyAqLworI2RlZmluZSBQQ1JFMl9CU1JfU0VUICAgICAgIDB4MDAwMDQwMDAgIC8qIEJTUiB3YXMgc2V0IGluIHRoZSBwYXR0ZXJuICovCisjZGVmaW5lIFBDUkUyX05MX1NFVCAgICAgICAgMHgwMDAwODAwMCAgLyogbmV3bGluZSB3YXMgc2V0IGluIHRoZSBwYXR0ZXJuICovCisjZGVmaW5lIFBDUkUyX05PVEVNUFRZX1NFVCAgMHgwMDAxMDAwMCAgLyogKCpOT1RFTVBUWSkgdXNlZCAgICAgICAgKSBrZWVwICovCisjZGVmaW5lIFBDUkUyX05FX0FUU1RfU0VUICAgMHgwMDAyMDAwMCAgLyogKCpOT1RFTVBUWV9BVFNUQVJUKSB1c2VkKSB0b2dldGhlciAqLworI2RlZmluZSBQQ1JFMl9ERVJFRl9UQUJMRVMgIDB4MDAwNDAwMDAgIC8qIHJlbGVhc2UgY2hhcmFjdGVyIHRhYmxlcyAqLworI2RlZmluZSBQQ1JFMl9OT0pJVCAgICAgICAgIDB4MDAwODAwMDAgIC8qICgqTk9KSVQpIHVzZWQgKi8KKyNkZWZpbmUgUENSRTJfSEFTQktQT1JYICAgICAweDAwMTAwMDAwICAvKiBjb250YWlucyBcUCwgXHAsIG9yIFxYICovCisjZGVmaW5lIFBDUkUyX0RVUENBUFVTRUQgICAgMHgwMDIwMDAwMCAgLyogY29udGFpbnMgKD98ICovCisjZGVmaW5lIFBDUkUyX0hBU0JLQyAgICAgICAgMHgwMDQwMDAwMCAgLyogY29udGFpbnMgXEMgKi8KKworI2RlZmluZSBQQ1JFMl9NT0RFX01BU0sgICAgIChQQ1JFMl9NT0RFOCB8IFBDUkUyX01PREUxNiB8IFBDUkUyX01PREUzMikKKworLyogVmFsdWVzIGZvciB0aGUgbWF0Y2hlZGJ5IGZpZWxkIGluIGEgbWF0Y2ggZGF0YSBibG9jay4gKi8KKworZW51bSB7IFBDUkUyX01BVENIRURCWV9JTlRFUlBSRVRFUiwgICAgIC8qIHBjcmUyX21hdGNoKCkgKi8KKyAgICAgICBQQ1JFMl9NQVRDSEVEQllfREZBX0lOVEVSUFJFVEVSLCAvKiBwY3JlMl9kZmFfbWF0Y2goKSAqLworICAgICAgIFBDUkUyX01BVENIRURCWV9KSVQgfTsgICAgICAgICAgIC8qIHBjcmUyX2ppdF9tYXRjaCgpICovCisKKy8qIE1hZ2ljIG51bWJlciB0byBwcm92aWRlIGEgc21hbGwgY2hlY2sgYWdhaW5zdCBiZWluZyBoYW5kZWQganVuay4gKi8KKworI2RlZmluZSBNQUdJQ19OVU1CRVIgIDB4NTA0MzUyNDVVTCAgIC8qICdQQ1JFJyAqLworCisvKiBUaGUgbWF4aW11bSByZW1haW5pbmcgbGVuZ3RoIG9mIHN1YmplY3Qgd2UgYXJlIHByZXBhcmVkIHRvIHNlYXJjaCBmb3IgYQorcmVxX3VuaXQgbWF0Y2guICovCisKKyNkZWZpbmUgUkVRX0NVX01BWCAxMDAwCisKKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgZW50cmllcyBpbiB0aGUgcGNyZV9jdHlwZXMgdGFibGUuICovCisKKyNkZWZpbmUgY3R5cGVfc3BhY2UgICAweDAxCisjZGVmaW5lIGN0eXBlX2xldHRlciAgMHgwMgorI2RlZmluZSBjdHlwZV9kaWdpdCAgIDB4MDQKKyNkZWZpbmUgY3R5cGVfeGRpZ2l0ICAweDA4CisjZGVmaW5lIGN0eXBlX3dvcmQgICAgMHgxMCAgICAvKiBhbHBoYW51bWVyaWMgb3IgJ18nICovCisjZGVmaW5lIGN0eXBlX21ldGEgICAgMHg4MCAgICAvKiByZWdleHAgbWV0YSBjaGFyIG9yIHplcm8gKGVuZCBwYXR0ZXJuKSAqLworCisvKiBPZmZzZXRzIGZvciB0aGUgYml0bWFwIHRhYmxlcyBpbiBwY3JlX2NiaXRzLiBFYWNoIHRhYmxlIGNvbnRhaW5zIGEgc2V0CitvZiBiaXRzIGZvciBhIGNsYXNzIG1hcC4gU29tZSBjbGFzc2VzIGFyZSBidWlsdCBieSBjb21iaW5pbmcgdGhlc2UgdGFibGVzLiAqLworCisjZGVmaW5lIGNiaXRfc3BhY2UgICAgIDAgICAgICAvKiBbOnNwYWNlOl0gb3IgXHMgKi8KKyNkZWZpbmUgY2JpdF94ZGlnaXQgICAzMiAgICAgIC8qIFs6eGRpZ2l0Ol0gKi8KKyNkZWZpbmUgY2JpdF9kaWdpdCAgICA2NCAgICAgIC8qIFs6ZGlnaXQ6XSBvciBcZCAqLworI2RlZmluZSBjYml0X3VwcGVyICAgIDk2ICAgICAgLyogWzp1cHBlcjpdICovCisjZGVmaW5lIGNiaXRfbG93ZXIgICAxMjggICAgICAvKiBbOmxvd2VyOl0gKi8KKyNkZWZpbmUgY2JpdF93b3JkICAgIDE2MCAgICAgIC8qIFs6d29yZDpdIG9yIFx3ICovCisjZGVmaW5lIGNiaXRfZ3JhcGggICAxOTIgICAgICAvKiBbOmdyYXBoOl0gKi8KKyNkZWZpbmUgY2JpdF9wcmludCAgIDIyNCAgICAgIC8qIFs6cHJpbnQ6XSAqLworI2RlZmluZSBjYml0X3B1bmN0ICAgMjU2ICAgICAgLyogWzpwdW5jdDpdICovCisjZGVmaW5lIGNiaXRfY250cmwgICAyODggICAgICAvKiBbOmNudHJsOl0gKi8KKyNkZWZpbmUgY2JpdF9sZW5ndGggIDMyMCAgICAgIC8qIExlbmd0aCBvZiB0aGUgY2JpdHMgdGFibGUgKi8KKworLyogT2Zmc2V0cyBvZiB0aGUgdmFyaW91cyB0YWJsZXMgZnJvbSB0aGUgYmFzZSB0YWJsZXMgcG9pbnRlciwgYW5kCit0b3RhbCBsZW5ndGguICovCisKKyNkZWZpbmUgbGNjX29mZnNldCAgICAgIDAKKyNkZWZpbmUgZmNjX29mZnNldCAgICAyNTYKKyNkZWZpbmUgY2JpdHNfb2Zmc2V0ICA1MTIKKyNkZWZpbmUgY3R5cGVzX29mZnNldCAoY2JpdHNfb2Zmc2V0ICsgY2JpdF9sZW5ndGgpCisjZGVmaW5lIHRhYmxlc19sZW5ndGggKGN0eXBlc19vZmZzZXQgKyAyNTYpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2hhcmFjdGVyIGFuZCBzdHJpbmcgbmFtZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIElmIFBDUkUgaXMgdG8gc3VwcG9ydCBVVEYtOCBvbiBFQkNESUMgcGxhdGZvcm1zLCB3ZSBjYW5ub3QgdXNlIG5vcm1hbAorY2hhcmFjdGVyIGNvbnN0YW50cyBsaWtlICcqJyBiZWNhdXNlIHRoZSBjb21waWxlciB3b3VsZCBlbWl0IHRoZWlyIEVCQ0RJQyBjb2RlLAord2hpY2ggaXMgZGlmZmVyZW50IGZyb20gdGhlaXIgQVNDSUkvVVRGLTggY29kZS4gSW5zdGVhZCB3ZSBkZWZpbmUgbWFjcm9zIGZvcgordGhlIGNoYXJhY3RlcnMgc28gdGhhdCB0aGV5IGFsd2F5cyB1c2UgdGhlIEFTQ0lJL1VURi04IGNvZGUgd2hlbiBVVEYtOCBzdXBwb3J0CitpcyBlbmFibGVkLiBXaGVuIFVURi04IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQsIHRoZSBkZWZpbml0aW9ucyB1c2UgY2hhcmFjdGVyCitsaXRlcmFscy4gQm90aCBjaGFyYWN0ZXIgYW5kIHN0cmluZyB2ZXJzaW9ucyBvZiBlYWNoIGNoYXJhY3RlciBhcmUgbmVlZGVkLCBhbmQKK3RoZXJlIGFyZSBzb21lIGxvbmdlciBzdHJpbmdzIGFzIHdlbGwuCisKK1RoaXMgbWVhbnMgdGhhdCwgb24gRUJDRElDIHBsYXRmb3JtcywgdGhlIFBDUkUgbGlicmFyeSBjYW4gaGFuZGxlIGVpdGhlcgorRUJDRElDLCBvciBVVEYtOCwgYnV0IG5vdCBib3RoLiBUbyBzdXBwb3J0IGJvdGggaW4gdGhlIHNhbWUgY29tcGlsZWQgbGlicmFyeQord291bGQgbmVlZCBkaWZmZXJlbnQgbG9va3VwcyBkZXBlbmRpbmcgb24gd2hldGhlciBQQ1JFMl9VVEYgd2FzIHNldCBvciBub3QuCitUaGlzIHdvdWxkIG1ha2UgaXQgaW1wb3NzaWJsZSB0byB1c2UgY2hhcmFjdGVycyBpbiBzd2l0Y2gvY2FzZSBzdGF0ZW1lbnRzLAord2hpY2ggd291bGQgcmVkdWNlIHBlcmZvcm1hbmNlLiBGb3IgYSB0aGVvcmV0aWNhbCB1c2UgKHdoaWNoIG5vYm9keSBoYXMgYXNrZWQKK2ZvcikgaW4gYSBtaW5vcml0eSBhcmVhIChFQkNESUMgcGxhdGZvcm1zKSwgdGhpcyBpcyBub3Qgc2Vuc2libGUuIEFueQorYXBwbGljYXRpb24gdGhhdCBkaWQgbmVlZCBib3RoIGNvdWxkIGNvbXBpbGUgdHdvIHZlcnNpb25zIG9mIHRoZSBsaWJyYXJ5LCB1c2luZworbWFjcm9zIHRvIGdpdmUgdGhlIGZ1bmN0aW9ucyBkaXN0aW5jdCBuYW1lcy4gKi8KKworI2lmbmRlZiBTVVBQT1JUX1VOSUNPREUKKworLyogVVRGLTggc3VwcG9ydCBpcyBub3QgZW5hYmxlZDsgdXNlIHRoZSBwbGF0Zm9ybS1kZXBlbmRlbnQgY2hhcmFjdGVyIGxpdGVyYWxzCitzbyB0aGF0IFBDUkUgd29ya3MgaW4gYm90aCBBU0NJSSBhbmQgRUJDRElDIGVudmlyb25tZW50cywgYnV0IG9ubHkgaW4gbm9uLVVURgorbW9kZS4gTmV3bGluZSBjaGFyYWN0ZXJzIGFyZSBwcm9ibGVtYXRpYyBpbiBFQkNESUMuIFRob3VnaCBpdCBoYXMgQ1IgYW5kIExGCitjaGFyYWN0ZXJzLCBhIGNvbW1vbiBwcmFjdGljZSBoYXMgYmVlbiB0byB1c2UgaXRzIE5MICgweDE1KSBjaGFyYWN0ZXIgYXMgdGhlCitsaW5lIHRlcm1pbmF0b3IgaW4gQy1saWtlIHByb2Nlc3NpbmcgZW52aXJvbm1lbnRzLiBIb3dldmVyLCBzb21ldGltZXMgdGhlIExGCisoMHgyNSkgY2hhcmFjdGVyIGlzIHVzZWQgaW5zdGVhZCwgYWNjb3JkaW5nIHRvIHRoaXMgVW5pY29kZSBkb2N1bWVudDoKKworaHR0cDovL3VuaWNvZGUub3JnL3N0YW5kYXJkL3JlcG9ydHMvdHIxMy90cjEzLTUuaHRtbAorCitQQ1JFIGRlZmF1bHRzIEVCQ0RJQyBOTCB0byAweDE1LCBidXQgaGFzIGEgYnVpbGQtdGltZSBvcHRpb24gdG8gc2VsZWN0IDB4MjUKK2luc3RlYWQuIFdoaWNoZXZlciBpcyAqbm90KiBjaG9zZW4gaXMgZGVmaW5lZCBhcyBORUwuCisKK0luIGJvdGggQVNDSUkgYW5kIEVCQ0RJQyBlbnZpcm9ubWVudHMsIENIQVJfTkwgYW5kIENIQVJfTEYgYXJlIHN5bm9ueW1zIGZvciB0aGUKK3NhbWUgY29kZSBwb2ludC4gKi8KKworI2lmZGVmIEVCQ0RJQworCisjaWZuZGVmIEVCQ0RJQ19OTDI1CisjZGVmaW5lIENIQVJfTkwgICAgICAgICAgICAgICAgICAgICAnXHgxNScKKyNkZWZpbmUgQ0hBUl9ORUwgICAgICAgICAgICAgICAgICAgICdceDI1JworI2RlZmluZSBTVFJfTkwgICAgICAgICAgICAgICAgICAgICAgIlx4MTUiCisjZGVmaW5lIFNUUl9ORUwgICAgICAgICAgICAgICAgICAgICAiXHgyNSIKKyNlbHNlCisjZGVmaW5lIENIQVJfTkwgICAgICAgICAgICAgICAgICAgICAnXHgyNScKKyNkZWZpbmUgQ0hBUl9ORUwgICAgICAgICAgICAgICAgICAgICdceDE1JworI2RlZmluZSBTVFJfTkwgICAgICAgICAgICAgICAgICAgICAgIlx4MjUiCisjZGVmaW5lIFNUUl9ORUwgICAgICAgICAgICAgICAgICAgICAiXHgxNSIKKyNlbmRpZgorCisjZGVmaW5lIENIQVJfTEYgICAgICAgICAgICAgICAgICAgICBDSEFSX05MCisjZGVmaW5lIFNUUl9MRiAgICAgICAgICAgICAgICAgICAgICBTVFJfTkwKKworI2RlZmluZSBDSEFSX0VTQyAgICAgICAgICAgICAgICAgICAgJ1wwNDcnCisjZGVmaW5lIENIQVJfREVMICAgICAgICAgICAgICAgICAgICAnXDAwNycKKyNkZWZpbmUgQ0hBUl9OQlNQICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgY2hhciknXHg0MScpCisjZGVmaW5lIFNUUl9FU0MgICAgICAgICAgICAgICAgICAgICAiXDA0NyIKKyNkZWZpbmUgU1RSX0RFTCAgICAgICAgICAgICAgICAgICAgICJcMDA3IgorCisjZWxzZSAgLyogTm90IEVCQ0RJQyAqLworCisvKiBJbiBBU0NJSS9Vbmljb2RlLCBsaW5lZmVlZCBpcyAnXG4nIGFuZCB3ZSBlcXVhdGUgdGhpcyB0byBOTCBmb3IKK2NvbXBhdGliaWxpdHkuIE5FTCBpcyB0aGUgVW5pY29kZSBuZXdsaW5lIGNoYXJhY3RlcjsgbWFrZSBzdXJlIGl0IGlzCithIHBvc2l0aXZlIHZhbHVlLiAqLworCisjZGVmaW5lIENIQVJfTEYgICAgICAgICAgICAgICAgICAgICAnXG4nCisjZGVmaW5lIENIQVJfTkwgICAgICAgICAgICAgICAgICAgICBDSEFSX0xGCisjZGVmaW5lIENIQVJfTkVMICAgICAgICAgICAgICAgICAgICAoKHVuc2lnbmVkIGNoYXIpJ1x4ODUnKQorI2RlZmluZSBDSEFSX0VTQyAgICAgICAgICAgICAgICAgICAgJ1wwMzMnCisjZGVmaW5lIENIQVJfREVMICAgICAgICAgICAgICAgICAgICAnXDE3NycKKyNkZWZpbmUgQ0hBUl9OQlNQICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgY2hhciknXHhhMCcpCisKKyNkZWZpbmUgU1RSX0xGICAgICAgICAgICAgICAgICAgICAgICJcbiIKKyNkZWZpbmUgU1RSX05MICAgICAgICAgICAgICAgICAgICAgIFNUUl9MRgorI2RlZmluZSBTVFJfTkVMICAgICAgICAgICAgICAgICAgICAgIlx4ODUiCisjZGVmaW5lIFNUUl9FU0MgICAgICAgICAgICAgICAgICAgICAiXDAzMyIKKyNkZWZpbmUgU1RSX0RFTCAgICAgICAgICAgICAgICAgICAgICJcMTc3IgorCisjZW5kaWYgIC8qIEVCQ0RJQyAqLworCisvKiBUaGUgcmVtYWluaW5nIGRlZmluaXRpb25zIHdvcmsgaW4gYm90aCBlbnZpcm9ubWVudHMuICovCisKKyNkZWZpbmUgQ0hBUl9OVUxMICAgICAgICAgICAgICAgICAgICdcMCcKKyNkZWZpbmUgQ0hBUl9IVCAgICAgICAgICAgICAgICAgICAgICdcdCcKKyNkZWZpbmUgQ0hBUl9WVCAgICAgICAgICAgICAgICAgICAgICdcdicKKyNkZWZpbmUgQ0hBUl9GRiAgICAgICAgICAgICAgICAgICAgICdcZicKKyNkZWZpbmUgQ0hBUl9DUiAgICAgICAgICAgICAgICAgICAgICdccicKKyNkZWZpbmUgQ0hBUl9CUyAgICAgICAgICAgICAgICAgICAgICdcYicKKyNkZWZpbmUgQ0hBUl9CRUwgICAgICAgICAgICAgICAgICAgICdcYScKKworI2RlZmluZSBDSEFSX1NQQUNFICAgICAgICAgICAgICAgICAgJyAnCisjZGVmaW5lIENIQVJfRVhDTEFNQVRJT05fTUFSSyAgICAgICAnIScKKyNkZWZpbmUgQ0hBUl9RVU9UQVRJT05fTUFSSyAgICAgICAgICciJworI2RlZmluZSBDSEFSX05VTUJFUl9TSUdOICAgICAgICAgICAgJyMnCisjZGVmaW5lIENIQVJfRE9MTEFSX1NJR04gICAgICAgICAgICAnJCcKKyNkZWZpbmUgQ0hBUl9QRVJDRU5UX1NJR04gICAgICAgICAgICclJworI2RlZmluZSBDSEFSX0FNUEVSU0FORCAgICAgICAgICAgICAgJyYnCisjZGVmaW5lIENIQVJfQVBPU1RST1BIRSAgICAgICAgICAgICAnXCcnCisjZGVmaW5lIENIQVJfTEVGVF9QQVJFTlRIRVNJUyAgICAgICAnKCcKKyNkZWZpbmUgQ0hBUl9SSUdIVF9QQVJFTlRIRVNJUyAgICAgICcpJworI2RlZmluZSBDSEFSX0FTVEVSSVNLICAgICAgICAgICAgICAgJyonCisjZGVmaW5lIENIQVJfUExVUyAgICAgICAgICAgICAgICAgICAnKycKKyNkZWZpbmUgQ0hBUl9DT01NQSAgICAgICAgICAgICAgICAgICcsJworI2RlZmluZSBDSEFSX01JTlVTICAgICAgICAgICAgICAgICAgJy0nCisjZGVmaW5lIENIQVJfRE9UICAgICAgICAgICAgICAgICAgICAnLicKKyNkZWZpbmUgQ0hBUl9TTEFTSCAgICAgICAgICAgICAgICAgICcvJworI2RlZmluZSBDSEFSXzAgICAgICAgICAgICAgICAgICAgICAgJzAnCisjZGVmaW5lIENIQVJfMSAgICAgICAgICAgICAgICAgICAgICAnMScKKyNkZWZpbmUgQ0hBUl8yICAgICAgICAgICAgICAgICAgICAgICcyJworI2RlZmluZSBDSEFSXzMgICAgICAgICAgICAgICAgICAgICAgJzMnCisjZGVmaW5lIENIQVJfNCAgICAgICAgICAgICAgICAgICAgICAnNCcKKyNkZWZpbmUgQ0hBUl81ICAgICAgICAgICAgICAgICAgICAgICc1JworI2RlZmluZSBDSEFSXzYgICAgICAgICAgICAgICAgICAgICAgJzYnCisjZGVmaW5lIENIQVJfNyAgICAgICAgICAgICAgICAgICAgICAnNycKKyNkZWZpbmUgQ0hBUl84ICAgICAgICAgICAgICAgICAgICAgICc4JworI2RlZmluZSBDSEFSXzkgICAgICAgICAgICAgICAgICAgICAgJzknCisjZGVmaW5lIENIQVJfQ09MT04gICAgICAgICAgICAgICAgICAnOicKKyNkZWZpbmUgQ0hBUl9TRU1JQ09MT04gICAgICAgICAgICAgICc7JworI2RlZmluZSBDSEFSX0xFU1NfVEhBTl9TSUdOICAgICAgICAgJzwnCisjZGVmaW5lIENIQVJfRVFVQUxTX1NJR04gICAgICAgICAgICAnPScKKyNkZWZpbmUgQ0hBUl9HUkVBVEVSX1RIQU5fU0lHTiAgICAgICc+JworI2RlZmluZSBDSEFSX1FVRVNUSU9OX01BUksgICAgICAgICAgJz8nCisjZGVmaW5lIENIQVJfQ09NTUVSQ0lBTF9BVCAgICAgICAgICAnQCcKKyNkZWZpbmUgQ0hBUl9BICAgICAgICAgICAgICAgICAgICAgICdBJworI2RlZmluZSBDSEFSX0IgICAgICAgICAgICAgICAgICAgICAgJ0InCisjZGVmaW5lIENIQVJfQyAgICAgICAgICAgICAgICAgICAgICAnQycKKyNkZWZpbmUgQ0hBUl9EICAgICAgICAgICAgICAgICAgICAgICdEJworI2RlZmluZSBDSEFSX0UgICAgICAgICAgICAgICAgICAgICAgJ0UnCisjZGVmaW5lIENIQVJfRiAgICAgICAgICAgICAgICAgICAgICAnRicKKyNkZWZpbmUgQ0hBUl9HICAgICAgICAgICAgICAgICAgICAgICdHJworI2RlZmluZSBDSEFSX0ggICAgICAgICAgICAgICAgICAgICAgJ0gnCisjZGVmaW5lIENIQVJfSSAgICAgICAgICAgICAgICAgICAgICAnSScKKyNkZWZpbmUgQ0hBUl9KICAgICAgICAgICAgICAgICAgICAgICdKJworI2RlZmluZSBDSEFSX0sgICAgICAgICAgICAgICAgICAgICAgJ0snCisjZGVmaW5lIENIQVJfTCAgICAgICAgICAgICAgICAgICAgICAnTCcKKyNkZWZpbmUgQ0hBUl9NICAgICAgICAgICAgICAgICAgICAgICdNJworI2RlZmluZSBDSEFSX04gICAgICAgICAgICAgICAgICAgICAgJ04nCisjZGVmaW5lIENIQVJfTyAgICAgICAgICAgICAgICAgICAgICAnTycKKyNkZWZpbmUgQ0hBUl9QICAgICAgICAgICAgICAgICAgICAgICdQJworI2RlZmluZSBDSEFSX1EgICAgICAgICAgICAgICAgICAgICAgJ1EnCisjZGVmaW5lIENIQVJfUiAgICAgICAgICAgICAgICAgICAgICAnUicKKyNkZWZpbmUgQ0hBUl9TICAgICAgICAgICAgICAgICAgICAgICdTJworI2RlZmluZSBDSEFSX1QgICAgICAgICAgICAgICAgICAgICAgJ1QnCisjZGVmaW5lIENIQVJfVSAgICAgICAgICAgICAgICAgICAgICAnVScKKyNkZWZpbmUgQ0hBUl9WICAgICAgICAgICAgICAgICAgICAgICdWJworI2RlZmluZSBDSEFSX1cgICAgICAgICAgICAgICAgICAgICAgJ1cnCisjZGVmaW5lIENIQVJfWCAgICAgICAgICAgICAgICAgICAgICAnWCcKKyNkZWZpbmUgQ0hBUl9ZICAgICAgICAgICAgICAgICAgICAgICdZJworI2RlZmluZSBDSEFSX1ogICAgICAgICAgICAgICAgICAgICAgJ1onCisjZGVmaW5lIENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVCAgICAnWycKKyNkZWZpbmUgQ0hBUl9CQUNLU0xBU0ggICAgICAgICAgICAgICdcXCcKKyNkZWZpbmUgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAgICddJworI2RlZmluZSBDSEFSX0NJUkNVTUZMRVhfQUNDRU5UICAgICAgJ14nCisjZGVmaW5lIENIQVJfVU5ERVJTQ09SRSAgICAgICAgICAgICAnXycKKyNkZWZpbmUgQ0hBUl9HUkFWRV9BQ0NFTlQgICAgICAgICAgICdgJworI2RlZmluZSBDSEFSX2EgICAgICAgICAgICAgICAgICAgICAgJ2EnCisjZGVmaW5lIENIQVJfYiAgICAgICAgICAgICAgICAgICAgICAnYicKKyNkZWZpbmUgQ0hBUl9jICAgICAgICAgICAgICAgICAgICAgICdjJworI2RlZmluZSBDSEFSX2QgICAgICAgICAgICAgICAgICAgICAgJ2QnCisjZGVmaW5lIENIQVJfZSAgICAgICAgICAgICAgICAgICAgICAnZScKKyNkZWZpbmUgQ0hBUl9mICAgICAgICAgICAgICAgICAgICAgICdmJworI2RlZmluZSBDSEFSX2cgICAgICAgICAgICAgICAgICAgICAgJ2cnCisjZGVmaW5lIENIQVJfaCAgICAgICAgICAgICAgICAgICAgICAnaCcKKyNkZWZpbmUgQ0hBUl9pICAgICAgICAgICAgICAgICAgICAgICdpJworI2RlZmluZSBDSEFSX2ogICAgICAgICAgICAgICAgICAgICAgJ2onCisjZGVmaW5lIENIQVJfayAgICAgICAgICAgICAgICAgICAgICAnaycKKyNkZWZpbmUgQ0hBUl9sICAgICAgICAgICAgICAgICAgICAgICdsJworI2RlZmluZSBDSEFSX20gICAgICAgICAgICAgICAgICAgICAgJ20nCisjZGVmaW5lIENIQVJfbiAgICAgICAgICAgICAgICAgICAgICAnbicKKyNkZWZpbmUgQ0hBUl9vICAgICAgICAgICAgICAgICAgICAgICdvJworI2RlZmluZSBDSEFSX3AgICAgICAgICAgICAgICAgICAgICAgJ3AnCisjZGVmaW5lIENIQVJfcSAgICAgICAgICAgICAgICAgICAgICAncScKKyNkZWZpbmUgQ0hBUl9yICAgICAgICAgICAgICAgICAgICAgICdyJworI2RlZmluZSBDSEFSX3MgICAgICAgICAgICAgICAgICAgICAgJ3MnCisjZGVmaW5lIENIQVJfdCAgICAgICAgICAgICAgICAgICAgICAndCcKKyNkZWZpbmUgQ0hBUl91ICAgICAgICAgICAgICAgICAgICAgICd1JworI2RlZmluZSBDSEFSX3YgICAgICAgICAgICAgICAgICAgICAgJ3YnCisjZGVmaW5lIENIQVJfdyAgICAgICAgICAgICAgICAgICAgICAndycKKyNkZWZpbmUgQ0hBUl94ICAgICAgICAgICAgICAgICAgICAgICd4JworI2RlZmluZSBDSEFSX3kgICAgICAgICAgICAgICAgICAgICAgJ3knCisjZGVmaW5lIENIQVJfeiAgICAgICAgICAgICAgICAgICAgICAneicKKyNkZWZpbmUgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgICAgICd7JworI2RlZmluZSBDSEFSX1ZFUlRJQ0FMX0xJTkUgICAgICAgICAgJ3wnCisjZGVmaW5lIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCAgICAnfScKKyNkZWZpbmUgQ0hBUl9USUxERSAgICAgICAgICAgICAgICAgICd+JworCisjZGVmaW5lIFNUUl9IVCAgICAgICAgICAgICAgICAgICAgICAiXHQiCisjZGVmaW5lIFNUUl9WVCAgICAgICAgICAgICAgICAgICAgICAiXHYiCisjZGVmaW5lIFNUUl9GRiAgICAgICAgICAgICAgICAgICAgICAiXGYiCisjZGVmaW5lIFNUUl9DUiAgICAgICAgICAgICAgICAgICAgICAiXHIiCisjZGVmaW5lIFNUUl9CUyAgICAgICAgICAgICAgICAgICAgICAiXGIiCisjZGVmaW5lIFNUUl9CRUwgICAgICAgICAgICAgICAgICAgICAiXGEiCisKKyNkZWZpbmUgU1RSX1NQQUNFICAgICAgICAgICAgICAgICAgICIgIgorI2RlZmluZSBTVFJfRVhDTEFNQVRJT05fTUFSSyAgICAgICAgIiEiCisjZGVmaW5lIFNUUl9RVU9UQVRJT05fTUFSSyAgICAgICAgICAiXCIiCisjZGVmaW5lIFNUUl9OVU1CRVJfU0lHTiAgICAgICAgICAgICAiIyIKKyNkZWZpbmUgU1RSX0RPTExBUl9TSUdOICAgICAgICAgICAgICIkIgorI2RlZmluZSBTVFJfUEVSQ0VOVF9TSUdOICAgICAgICAgICAgIiUiCisjZGVmaW5lIFNUUl9BTVBFUlNBTkQgICAgICAgICAgICAgICAiJiIKKyNkZWZpbmUgU1RSX0FQT1NUUk9QSEUgICAgICAgICAgICAgICInIgorI2RlZmluZSBTVFJfTEVGVF9QQVJFTlRIRVNJUyAgICAgICAgIigiCisjZGVmaW5lIFNUUl9SSUdIVF9QQVJFTlRIRVNJUyAgICAgICAiKSIKKyNkZWZpbmUgU1RSX0FTVEVSSVNLICAgICAgICAgICAgICAgICIqIgorI2RlZmluZSBTVFJfUExVUyAgICAgICAgICAgICAgICAgICAgIisiCisjZGVmaW5lIFNUUl9DT01NQSAgICAgICAgICAgICAgICAgICAiLCIKKyNkZWZpbmUgU1RSX01JTlVTICAgICAgICAgICAgICAgICAgICItIgorI2RlZmluZSBTVFJfRE9UICAgICAgICAgICAgICAgICAgICAgIi4iCisjZGVmaW5lIFNUUl9TTEFTSCAgICAgICAgICAgICAgICAgICAiLyIKKyNkZWZpbmUgU1RSXzAgICAgICAgICAgICAgICAgICAgICAgICIwIgorI2RlZmluZSBTVFJfMSAgICAgICAgICAgICAgICAgICAgICAgIjEiCisjZGVmaW5lIFNUUl8yICAgICAgICAgICAgICAgICAgICAgICAiMiIKKyNkZWZpbmUgU1RSXzMgICAgICAgICAgICAgICAgICAgICAgICIzIgorI2RlZmluZSBTVFJfNCAgICAgICAgICAgICAgICAgICAgICAgIjQiCisjZGVmaW5lIFNUUl81ICAgICAgICAgICAgICAgICAgICAgICAiNSIKKyNkZWZpbmUgU1RSXzYgICAgICAgICAgICAgICAgICAgICAgICI2IgorI2RlZmluZSBTVFJfNyAgICAgICAgICAgICAgICAgICAgICAgIjciCisjZGVmaW5lIFNUUl84ICAgICAgICAgICAgICAgICAgICAgICAiOCIKKyNkZWZpbmUgU1RSXzkgICAgICAgICAgICAgICAgICAgICAgICI5IgorI2RlZmluZSBTVFJfQ09MT04gICAgICAgICAgICAgICAgICAgIjoiCisjZGVmaW5lIFNUUl9TRU1JQ09MT04gICAgICAgICAgICAgICAiOyIKKyNkZWZpbmUgU1RSX0xFU1NfVEhBTl9TSUdOICAgICAgICAgICI8IgorI2RlZmluZSBTVFJfRVFVQUxTX1NJR04gICAgICAgICAgICAgIj0iCisjZGVmaW5lIFNUUl9HUkVBVEVSX1RIQU5fU0lHTiAgICAgICAiPiIKKyNkZWZpbmUgU1RSX1FVRVNUSU9OX01BUksgICAgICAgICAgICI/IgorI2RlZmluZSBTVFJfQ09NTUVSQ0lBTF9BVCAgICAgICAgICAgIkAiCisjZGVmaW5lIFNUUl9BICAgICAgICAgICAgICAgICAgICAgICAiQSIKKyNkZWZpbmUgU1RSX0IgICAgICAgICAgICAgICAgICAgICAgICJCIgorI2RlZmluZSBTVFJfQyAgICAgICAgICAgICAgICAgICAgICAgIkMiCisjZGVmaW5lIFNUUl9EICAgICAgICAgICAgICAgICAgICAgICAiRCIKKyNkZWZpbmUgU1RSX0UgICAgICAgICAgICAgICAgICAgICAgICJFIgorI2RlZmluZSBTVFJfRiAgICAgICAgICAgICAgICAgICAgICAgIkYiCisjZGVmaW5lIFNUUl9HICAgICAgICAgICAgICAgICAgICAgICAiRyIKKyNkZWZpbmUgU1RSX0ggICAgICAgICAgICAgICAgICAgICAgICJIIgorI2RlZmluZSBTVFJfSSAgICAgICAgICAgICAgICAgICAgICAgIkkiCisjZGVmaW5lIFNUUl9KICAgICAgICAgICAgICAgICAgICAgICAiSiIKKyNkZWZpbmUgU1RSX0sgICAgICAgICAgICAgICAgICAgICAgICJLIgorI2RlZmluZSBTVFJfTCAgICAgICAgICAgICAgICAgICAgICAgIkwiCisjZGVmaW5lIFNUUl9NICAgICAgICAgICAgICAgICAgICAgICAiTSIKKyNkZWZpbmUgU1RSX04gICAgICAgICAgICAgICAgICAgICAgICJOIgorI2RlZmluZSBTVFJfTyAgICAgICAgICAgICAgICAgICAgICAgIk8iCisjZGVmaW5lIFNUUl9QICAgICAgICAgICAgICAgICAgICAgICAiUCIKKyNkZWZpbmUgU1RSX1EgICAgICAgICAgICAgICAgICAgICAgICJRIgorI2RlZmluZSBTVFJfUiAgICAgICAgICAgICAgICAgICAgICAgIlIiCisjZGVmaW5lIFNUUl9TICAgICAgICAgICAgICAgICAgICAgICAiUyIKKyNkZWZpbmUgU1RSX1QgICAgICAgICAgICAgICAgICAgICAgICJUIgorI2RlZmluZSBTVFJfVSAgICAgICAgICAgICAgICAgICAgICAgIlUiCisjZGVmaW5lIFNUUl9WICAgICAgICAgICAgICAgICAgICAgICAiViIKKyNkZWZpbmUgU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICJXIgorI2RlZmluZSBTVFJfWCAgICAgICAgICAgICAgICAgICAgICAgIlgiCisjZGVmaW5lIFNUUl9ZICAgICAgICAgICAgICAgICAgICAgICAiWSIKKyNkZWZpbmUgU1RSX1ogICAgICAgICAgICAgICAgICAgICAgICJaIgorI2RlZmluZSBTVFJfTEVGVF9TUVVBUkVfQlJBQ0tFVCAgICAgIlsiCisjZGVmaW5lIFNUUl9CQUNLU0xBU0ggICAgICAgICAgICAgICAiXFwiCisjZGVmaW5lIFNUUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAgICAiXSIKKyNkZWZpbmUgU1RSX0NJUkNVTUZMRVhfQUNDRU5UICAgICAgICJeIgorI2RlZmluZSBTVFJfVU5ERVJTQ09SRSAgICAgICAgICAgICAgIl8iCisjZGVmaW5lIFNUUl9HUkFWRV9BQ0NFTlQgICAgICAgICAgICAiYCIKKyNkZWZpbmUgU1RSX2EgICAgICAgICAgICAgICAgICAgICAgICJhIgorI2RlZmluZSBTVFJfYiAgICAgICAgICAgICAgICAgICAgICAgImIiCisjZGVmaW5lIFNUUl9jICAgICAgICAgICAgICAgICAgICAgICAiYyIKKyNkZWZpbmUgU1RSX2QgICAgICAgICAgICAgICAgICAgICAgICJkIgorI2RlZmluZSBTVFJfZSAgICAgICAgICAgICAgICAgICAgICAgImUiCisjZGVmaW5lIFNUUl9mICAgICAgICAgICAgICAgICAgICAgICAiZiIKKyNkZWZpbmUgU1RSX2cgICAgICAgICAgICAgICAgICAgICAgICJnIgorI2RlZmluZSBTVFJfaCAgICAgICAgICAgICAgICAgICAgICAgImgiCisjZGVmaW5lIFNUUl9pICAgICAgICAgICAgICAgICAgICAgICAiaSIKKyNkZWZpbmUgU1RSX2ogICAgICAgICAgICAgICAgICAgICAgICJqIgorI2RlZmluZSBTVFJfayAgICAgICAgICAgICAgICAgICAgICAgImsiCisjZGVmaW5lIFNUUl9sICAgICAgICAgICAgICAgICAgICAgICAibCIKKyNkZWZpbmUgU1RSX20gICAgICAgICAgICAgICAgICAgICAgICJtIgorI2RlZmluZSBTVFJfbiAgICAgICAgICAgICAgICAgICAgICAgIm4iCisjZGVmaW5lIFNUUl9vICAgICAgICAgICAgICAgICAgICAgICAibyIKKyNkZWZpbmUgU1RSX3AgICAgICAgICAgICAgICAgICAgICAgICJwIgorI2RlZmluZSBTVFJfcSAgICAgICAgICAgICAgICAgICAgICAgInEiCisjZGVmaW5lIFNUUl9yICAgICAgICAgICAgICAgICAgICAgICAiciIKKyNkZWZpbmUgU1RSX3MgICAgICAgICAgICAgICAgICAgICAgICJzIgorI2RlZmluZSBTVFJfdCAgICAgICAgICAgICAgICAgICAgICAgInQiCisjZGVmaW5lIFNUUl91ICAgICAgICAgICAgICAgICAgICAgICAidSIKKyNkZWZpbmUgU1RSX3YgICAgICAgICAgICAgICAgICAgICAgICJ2IgorI2RlZmluZSBTVFJfdyAgICAgICAgICAgICAgICAgICAgICAgInciCisjZGVmaW5lIFNUUl94ICAgICAgICAgICAgICAgICAgICAgICAieCIKKyNkZWZpbmUgU1RSX3kgICAgICAgICAgICAgICAgICAgICAgICJ5IgorI2RlZmluZSBTVFJfeiAgICAgICAgICAgICAgICAgICAgICAgInoiCisjZGVmaW5lIFNUUl9MRUZUX0NVUkxZX0JSQUNLRVQgICAgICAieyIKKyNkZWZpbmUgU1RSX1ZFUlRJQ0FMX0xJTkUgICAgICAgICAgICJ8IgorI2RlZmluZSBTVFJfUklHSFRfQ1VSTFlfQlJBQ0tFVCAgICAgIn0iCisjZGVmaW5lIFNUUl9USUxERSAgICAgICAgICAgICAgICAgICAifiIKKworI2RlZmluZSBTVFJJTkdfQUNDRVBUMCAgICAgICAgICAgICAgIkFDQ0VQVFwwIgorI2RlZmluZSBTVFJJTkdfQ09NTUlUMCAgICAgICAgICAgICAgIkNPTU1JVFwwIgorI2RlZmluZSBTVFJJTkdfRjAgICAgICAgICAgICAgICAgICAgIkZcMCIKKyNkZWZpbmUgU1RSSU5HX0ZBSUwwICAgICAgICAgICAgICAgICJGQUlMXDAiCisjZGVmaW5lIFNUUklOR19NQVJLMCAgICAgICAgICAgICAgICAiTUFSS1wwIgorI2RlZmluZSBTVFJJTkdfUFJVTkUwICAgICAgICAgICAgICAgIlBSVU5FXDAiCisjZGVmaW5lIFNUUklOR19TS0lQMCAgICAgICAgICAgICAgICAiU0tJUFwwIgorI2RlZmluZSBTVFJJTkdfVEhFTiAgICAgICAgICAgICAgICAgIlRIRU4iCisKKyNkZWZpbmUgU1RSSU5HX2FscGhhMCAgICAgICAgICAgICAgICJhbHBoYVwwIgorI2RlZmluZSBTVFJJTkdfbG93ZXIwICAgICAgICAgICAgICAgImxvd2VyXDAiCisjZGVmaW5lIFNUUklOR191cHBlcjAgICAgICAgICAgICAgICAidXBwZXJcMCIKKyNkZWZpbmUgU1RSSU5HX2FsbnVtMCAgICAgICAgICAgICAgICJhbG51bVwwIgorI2RlZmluZSBTVFJJTkdfYXNjaWkwICAgICAgICAgICAgICAgImFzY2lpXDAiCisjZGVmaW5lIFNUUklOR19ibGFuazAgICAgICAgICAgICAgICAiYmxhbmtcMCIKKyNkZWZpbmUgU1RSSU5HX2NudHJsMCAgICAgICAgICAgICAgICJjbnRybFwwIgorI2RlZmluZSBTVFJJTkdfZGlnaXQwICAgICAgICAgICAgICAgImRpZ2l0XDAiCisjZGVmaW5lIFNUUklOR19ncmFwaDAgICAgICAgICAgICAgICAiZ3JhcGhcMCIKKyNkZWZpbmUgU1RSSU5HX3ByaW50MCAgICAgICAgICAgICAgICJwcmludFwwIgorI2RlZmluZSBTVFJJTkdfcHVuY3QwICAgICAgICAgICAgICAgInB1bmN0XDAiCisjZGVmaW5lIFNUUklOR19zcGFjZTAgICAgICAgICAgICAgICAic3BhY2VcMCIKKyNkZWZpbmUgU1RSSU5HX3dvcmQwICAgICAgICAgICAgICAgICJ3b3JkXDAiCisjZGVmaW5lIFNUUklOR194ZGlnaXQgICAgICAgICAgICAgICAieGRpZ2l0IgorCisjZGVmaW5lIFNUUklOR19ERUZJTkUgICAgICAgICAgICAgICAiREVGSU5FIgorI2RlZmluZSBTVFJJTkdfVkVSU0lPTiAgICAgICAgICAgICAgIlZFUlNJT04iCisjZGVmaW5lIFNUUklOR19XRUlSRF9TVEFSVFdPUkQgICAgICAiWzo8Ol1dIgorI2RlZmluZSBTVFJJTkdfV0VJUkRfRU5EV09SRCAgICAgICAgIls6PjpdXSIKKworI2RlZmluZSBTVFJJTkdfQ1JfUklHSFRQQVIgICAgICAgICAgICAgICAgIkNSKSIKKyNkZWZpbmUgU1RSSU5HX0xGX1JJR0hUUEFSICAgICAgICAgICAgICAgICJMRikiCisjZGVmaW5lIFNUUklOR19DUkxGX1JJR0hUUEFSICAgICAgICAgICAgICAiQ1JMRikiCisjZGVmaW5lIFNUUklOR19BTllfUklHSFRQQVIgICAgICAgICAgICAgICAiQU5ZKSIKKyNkZWZpbmUgU1RSSU5HX0FOWUNSTEZfUklHSFRQQVIgICAgICAgICAgICJBTllDUkxGKSIKKyNkZWZpbmUgU1RSSU5HX0JTUl9BTllDUkxGX1JJR0hUUEFSICAgICAgICJCU1JfQU5ZQ1JMRikiCisjZGVmaW5lIFNUUklOR19CU1JfVU5JQ09ERV9SSUdIVFBBUiAgICAgICAiQlNSX1VOSUNPREUpIgorI2RlZmluZSBTVFJJTkdfVVRGOF9SSUdIVFBBUiAgICAgICAgICAgICAgIlVURjgpIgorI2RlZmluZSBTVFJJTkdfVVRGMTZfUklHSFRQQVIgICAgICAgICAgICAgIlVURjE2KSIKKyNkZWZpbmUgU1RSSU5HX1VURjMyX1JJR0hUUEFSICAgICAgICAgICAgICJVVEYzMikiCisjZGVmaW5lIFNUUklOR19VVEZfUklHSFRQQVIgICAgICAgICAgICAgICAiVVRGKSIKKyNkZWZpbmUgU1RSSU5HX1VDUF9SSUdIVFBBUiAgICAgICAgICAgICAgICJVQ1ApIgorI2RlZmluZSBTVFJJTkdfTk9fQVVUT19QT1NTRVNTX1JJR0hUUEFSICAgIk5PX0FVVE9fUE9TU0VTUykiCisjZGVmaW5lIFNUUklOR19OT19ET1RTVEFSX0FOQ0hPUl9SSUdIVFBBUiAiTk9fRE9UU1RBUl9BTkNIT1IpIgorI2RlZmluZSBTVFJJTkdfTk9fSklUX1JJR0hUUEFSICAgICAgICAgICAgIk5PX0pJVCkiCisjZGVmaW5lIFNUUklOR19OT19TVEFSVF9PUFRfUklHSFRQQVIgICAgICAiTk9fU1RBUlRfT1BUKSIKKyNkZWZpbmUgU1RSSU5HX05PVEVNUFRZX1JJR0hUUEFSICAgICAgICAgICJOT1RFTVBUWSkiCisjZGVmaW5lIFNUUklOR19OT1RFTVBUWV9BVFNUQVJUX1JJR0hUUEFSICAiTk9URU1QVFlfQVRTVEFSVCkiCisjZGVmaW5lIFNUUklOR19MSU1JVF9NQVRDSF9FUSAgICAgICAgICAgICAiTElNSVRfTUFUQ0g9IgorI2RlZmluZSBTVFJJTkdfTElNSVRfUkVDVVJTSU9OX0VRICAgICAgICAgIkxJTUlUX1JFQ1VSU0lPTj0iCisjZGVmaW5lIFNUUklOR19NQVJLICAgICAgICAgICAgICAgICAgICAgICAiTUFSSyIKKworI2Vsc2UgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCisvKiBVVEYtOCBzdXBwb3J0IGlzIGVuYWJsZWQ7IGFsd2F5cyB1c2UgVVRGLTggKD1BU0NJSSkgY2hhcmFjdGVyIGNvZGVzLiBUaGlzCit3b3JrcyBpbiBib3RoIG1vZGVzIG5vbi1FQkNESUMgcGxhdGZvcm1zLCBhbmQgb24gRUJDRElDIHBsYXRmb3JtcyBpbiBVVEYtOCBtb2RlCitvbmx5LiAqLworCisjZGVmaW5lIENIQVJfSFQgICAgICAgICAgICAgICAgICAgICAnXDAxMScKKyNkZWZpbmUgQ0hBUl9WVCAgICAgICAgICAgICAgICAgICAgICdcMDEzJworI2RlZmluZSBDSEFSX0ZGICAgICAgICAgICAgICAgICAgICAgJ1wwMTQnCisjZGVmaW5lIENIQVJfQ1IgICAgICAgICAgICAgICAgICAgICAnXDAxNScKKyNkZWZpbmUgQ0hBUl9MRiAgICAgICAgICAgICAgICAgICAgICdcMDEyJworI2RlZmluZSBDSEFSX05MICAgICAgICAgICAgICAgICAgICAgQ0hBUl9MRgorI2RlZmluZSBDSEFSX05FTCAgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyKSdceDg1JykKKyNkZWZpbmUgQ0hBUl9CUyAgICAgICAgICAgICAgICAgICAgICdcMDEwJworI2RlZmluZSBDSEFSX0JFTCAgICAgICAgICAgICAgICAgICAgJ1wwMDcnCisjZGVmaW5lIENIQVJfRVNDICAgICAgICAgICAgICAgICAgICAnXDAzMycKKyNkZWZpbmUgQ0hBUl9ERUwgICAgICAgICAgICAgICAgICAgICdcMTc3JworCisjZGVmaW5lIENIQVJfTlVMTCAgICAgICAgICAgICAgICAgICAnXDAnCisjZGVmaW5lIENIQVJfU1BBQ0UgICAgICAgICAgICAgICAgICAnXDA0MCcKKyNkZWZpbmUgQ0hBUl9FWENMQU1BVElPTl9NQVJLICAgICAgICdcMDQxJworI2RlZmluZSBDSEFSX1FVT1RBVElPTl9NQVJLICAgICAgICAgJ1wwNDInCisjZGVmaW5lIENIQVJfTlVNQkVSX1NJR04gICAgICAgICAgICAnXDA0MycKKyNkZWZpbmUgQ0hBUl9ET0xMQVJfU0lHTiAgICAgICAgICAgICdcMDQ0JworI2RlZmluZSBDSEFSX1BFUkNFTlRfU0lHTiAgICAgICAgICAgJ1wwNDUnCisjZGVmaW5lIENIQVJfQU1QRVJTQU5EICAgICAgICAgICAgICAnXDA0NicKKyNkZWZpbmUgQ0hBUl9BUE9TVFJPUEhFICAgICAgICAgICAgICdcMDQ3JworI2RlZmluZSBDSEFSX0xFRlRfUEFSRU5USEVTSVMgICAgICAgJ1wwNTAnCisjZGVmaW5lIENIQVJfUklHSFRfUEFSRU5USEVTSVMgICAgICAnXDA1MScKKyNkZWZpbmUgQ0hBUl9BU1RFUklTSyAgICAgICAgICAgICAgICdcMDUyJworI2RlZmluZSBDSEFSX1BMVVMgICAgICAgICAgICAgICAgICAgJ1wwNTMnCisjZGVmaW5lIENIQVJfQ09NTUEgICAgICAgICAgICAgICAgICAnXDA1NCcKKyNkZWZpbmUgQ0hBUl9NSU5VUyAgICAgICAgICAgICAgICAgICdcMDU1JworI2RlZmluZSBDSEFSX0RPVCAgICAgICAgICAgICAgICAgICAgJ1wwNTYnCisjZGVmaW5lIENIQVJfU0xBU0ggICAgICAgICAgICAgICAgICAnXDA1NycKKyNkZWZpbmUgQ0hBUl8wICAgICAgICAgICAgICAgICAgICAgICdcMDYwJworI2RlZmluZSBDSEFSXzEgICAgICAgICAgICAgICAgICAgICAgJ1wwNjEnCisjZGVmaW5lIENIQVJfMiAgICAgICAgICAgICAgICAgICAgICAnXDA2MicKKyNkZWZpbmUgQ0hBUl8zICAgICAgICAgICAgICAgICAgICAgICdcMDYzJworI2RlZmluZSBDSEFSXzQgICAgICAgICAgICAgICAgICAgICAgJ1wwNjQnCisjZGVmaW5lIENIQVJfNSAgICAgICAgICAgICAgICAgICAgICAnXDA2NScKKyNkZWZpbmUgQ0hBUl82ICAgICAgICAgICAgICAgICAgICAgICdcMDY2JworI2RlZmluZSBDSEFSXzcgICAgICAgICAgICAgICAgICAgICAgJ1wwNjcnCisjZGVmaW5lIENIQVJfOCAgICAgICAgICAgICAgICAgICAgICAnXDA3MCcKKyNkZWZpbmUgQ0hBUl85ICAgICAgICAgICAgICAgICAgICAgICdcMDcxJworI2RlZmluZSBDSEFSX0NPTE9OICAgICAgICAgICAgICAgICAgJ1wwNzInCisjZGVmaW5lIENIQVJfU0VNSUNPTE9OICAgICAgICAgICAgICAnXDA3MycKKyNkZWZpbmUgQ0hBUl9MRVNTX1RIQU5fU0lHTiAgICAgICAgICdcMDc0JworI2RlZmluZSBDSEFSX0VRVUFMU19TSUdOICAgICAgICAgICAgJ1wwNzUnCisjZGVmaW5lIENIQVJfR1JFQVRFUl9USEFOX1NJR04gICAgICAnXDA3NicKKyNkZWZpbmUgQ0hBUl9RVUVTVElPTl9NQVJLICAgICAgICAgICdcMDc3JworI2RlZmluZSBDSEFSX0NPTU1FUkNJQUxfQVQgICAgICAgICAgJ1wxMDAnCisjZGVmaW5lIENIQVJfQSAgICAgICAgICAgICAgICAgICAgICAnXDEwMScKKyNkZWZpbmUgQ0hBUl9CICAgICAgICAgICAgICAgICAgICAgICdcMTAyJworI2RlZmluZSBDSEFSX0MgICAgICAgICAgICAgICAgICAgICAgJ1wxMDMnCisjZGVmaW5lIENIQVJfRCAgICAgICAgICAgICAgICAgICAgICAnXDEwNCcKKyNkZWZpbmUgQ0hBUl9FICAgICAgICAgICAgICAgICAgICAgICdcMTA1JworI2RlZmluZSBDSEFSX0YgICAgICAgICAgICAgICAgICAgICAgJ1wxMDYnCisjZGVmaW5lIENIQVJfRyAgICAgICAgICAgICAgICAgICAgICAnXDEwNycKKyNkZWZpbmUgQ0hBUl9IICAgICAgICAgICAgICAgICAgICAgICdcMTEwJworI2RlZmluZSBDSEFSX0kgICAgICAgICAgICAgICAgICAgICAgJ1wxMTEnCisjZGVmaW5lIENIQVJfSiAgICAgICAgICAgICAgICAgICAgICAnXDExMicKKyNkZWZpbmUgQ0hBUl9LICAgICAgICAgICAgICAgICAgICAgICdcMTEzJworI2RlZmluZSBDSEFSX0wgICAgICAgICAgICAgICAgICAgICAgJ1wxMTQnCisjZGVmaW5lIENIQVJfTSAgICAgICAgICAgICAgICAgICAgICAnXDExNScKKyNkZWZpbmUgQ0hBUl9OICAgICAgICAgICAgICAgICAgICAgICdcMTE2JworI2RlZmluZSBDSEFSX08gICAgICAgICAgICAgICAgICAgICAgJ1wxMTcnCisjZGVmaW5lIENIQVJfUCAgICAgICAgICAgICAgICAgICAgICAnXDEyMCcKKyNkZWZpbmUgQ0hBUl9RICAgICAgICAgICAgICAgICAgICAgICdcMTIxJworI2RlZmluZSBDSEFSX1IgICAgICAgICAgICAgICAgICAgICAgJ1wxMjInCisjZGVmaW5lIENIQVJfUyAgICAgICAgICAgICAgICAgICAgICAnXDEyMycKKyNkZWZpbmUgQ0hBUl9UICAgICAgICAgICAgICAgICAgICAgICdcMTI0JworI2RlZmluZSBDSEFSX1UgICAgICAgICAgICAgICAgICAgICAgJ1wxMjUnCisjZGVmaW5lIENIQVJfViAgICAgICAgICAgICAgICAgICAgICAnXDEyNicKKyNkZWZpbmUgQ0hBUl9XICAgICAgICAgICAgICAgICAgICAgICdcMTI3JworI2RlZmluZSBDSEFSX1ggICAgICAgICAgICAgICAgICAgICAgJ1wxMzAnCisjZGVmaW5lIENIQVJfWSAgICAgICAgICAgICAgICAgICAgICAnXDEzMScKKyNkZWZpbmUgQ0hBUl9aICAgICAgICAgICAgICAgICAgICAgICdcMTMyJworI2RlZmluZSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgICAgJ1wxMzMnCisjZGVmaW5lIENIQVJfQkFDS1NMQVNIICAgICAgICAgICAgICAnXDEzNCcKKyNkZWZpbmUgQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCAgICdcMTM1JworI2RlZmluZSBDSEFSX0NJUkNVTUZMRVhfQUNDRU5UICAgICAgJ1wxMzYnCisjZGVmaW5lIENIQVJfVU5ERVJTQ09SRSAgICAgICAgICAgICAnXDEzNycKKyNkZWZpbmUgQ0hBUl9HUkFWRV9BQ0NFTlQgICAgICAgICAgICdcMTQwJworI2RlZmluZSBDSEFSX2EgICAgICAgICAgICAgICAgICAgICAgJ1wxNDEnCisjZGVmaW5lIENIQVJfYiAgICAgICAgICAgICAgICAgICAgICAnXDE0MicKKyNkZWZpbmUgQ0hBUl9jICAgICAgICAgICAgICAgICAgICAgICdcMTQzJworI2RlZmluZSBDSEFSX2QgICAgICAgICAgICAgICAgICAgICAgJ1wxNDQnCisjZGVmaW5lIENIQVJfZSAgICAgICAgICAgICAgICAgICAgICAnXDE0NScKKyNkZWZpbmUgQ0hBUl9mICAgICAgICAgICAgICAgICAgICAgICdcMTQ2JworI2RlZmluZSBDSEFSX2cgICAgICAgICAgICAgICAgICAgICAgJ1wxNDcnCisjZGVmaW5lIENIQVJfaCAgICAgICAgICAgICAgICAgICAgICAnXDE1MCcKKyNkZWZpbmUgQ0hBUl9pICAgICAgICAgICAgICAgICAgICAgICdcMTUxJworI2RlZmluZSBDSEFSX2ogICAgICAgICAgICAgICAgICAgICAgJ1wxNTInCisjZGVmaW5lIENIQVJfayAgICAgICAgICAgICAgICAgICAgICAnXDE1MycKKyNkZWZpbmUgQ0hBUl9sICAgICAgICAgICAgICAgICAgICAgICdcMTU0JworI2RlZmluZSBDSEFSX20gICAgICAgICAgICAgICAgICAgICAgJ1wxNTUnCisjZGVmaW5lIENIQVJfbiAgICAgICAgICAgICAgICAgICAgICAnXDE1NicKKyNkZWZpbmUgQ0hBUl9vICAgICAgICAgICAgICAgICAgICAgICdcMTU3JworI2RlZmluZSBDSEFSX3AgICAgICAgICAgICAgICAgICAgICAgJ1wxNjAnCisjZGVmaW5lIENIQVJfcSAgICAgICAgICAgICAgICAgICAgICAnXDE2MScKKyNkZWZpbmUgQ0hBUl9yICAgICAgICAgICAgICAgICAgICAgICdcMTYyJworI2RlZmluZSBDSEFSX3MgICAgICAgICAgICAgICAgICAgICAgJ1wxNjMnCisjZGVmaW5lIENIQVJfdCAgICAgICAgICAgICAgICAgICAgICAnXDE2NCcKKyNkZWZpbmUgQ0hBUl91ICAgICAgICAgICAgICAgICAgICAgICdcMTY1JworI2RlZmluZSBDSEFSX3YgICAgICAgICAgICAgICAgICAgICAgJ1wxNjYnCisjZGVmaW5lIENIQVJfdyAgICAgICAgICAgICAgICAgICAgICAnXDE2NycKKyNkZWZpbmUgQ0hBUl94ICAgICAgICAgICAgICAgICAgICAgICdcMTcwJworI2RlZmluZSBDSEFSX3kgICAgICAgICAgICAgICAgICAgICAgJ1wxNzEnCisjZGVmaW5lIENIQVJfeiAgICAgICAgICAgICAgICAgICAgICAnXDE3MicKKyNkZWZpbmUgQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgICAgICdcMTczJworI2RlZmluZSBDSEFSX1ZFUlRJQ0FMX0xJTkUgICAgICAgICAgJ1wxNzQnCisjZGVmaW5lIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCAgICAnXDE3NScKKyNkZWZpbmUgQ0hBUl9USUxERSAgICAgICAgICAgICAgICAgICdcMTc2JworI2RlZmluZSBDSEFSX05CU1AgICAgICAgICAgICAgICAgICAgKCh1bnNpZ25lZCBjaGFyKSdceGEwJykKKworI2RlZmluZSBTVFJfSFQgICAgICAgICAgICAgICAgICAgICAgIlwwMTEiCisjZGVmaW5lIFNUUl9WVCAgICAgICAgICAgICAgICAgICAgICAiXDAxMyIKKyNkZWZpbmUgU1RSX0ZGICAgICAgICAgICAgICAgICAgICAgICJcMDE0IgorI2RlZmluZSBTVFJfQ1IgICAgICAgICAgICAgICAgICAgICAgIlwwMTUiCisjZGVmaW5lIFNUUl9OTCAgICAgICAgICAgICAgICAgICAgICAiXDAxMiIKKyNkZWZpbmUgU1RSX0JTICAgICAgICAgICAgICAgICAgICAgICJcMDEwIgorI2RlZmluZSBTVFJfQkVMICAgICAgICAgICAgICAgICAgICAgIlwwMDciCisjZGVmaW5lIFNUUl9FU0MgICAgICAgICAgICAgICAgICAgICAiXDAzMyIKKyNkZWZpbmUgU1RSX0RFTCAgICAgICAgICAgICAgICAgICAgICJcMTc3IgorCisjZGVmaW5lIFNUUl9TUEFDRSAgICAgICAgICAgICAgICAgICAiXDA0MCIKKyNkZWZpbmUgU1RSX0VYQ0xBTUFUSU9OX01BUksgICAgICAgICJcMDQxIgorI2RlZmluZSBTVFJfUVVPVEFUSU9OX01BUksgICAgICAgICAgIlwwNDIiCisjZGVmaW5lIFNUUl9OVU1CRVJfU0lHTiAgICAgICAgICAgICAiXDA0MyIKKyNkZWZpbmUgU1RSX0RPTExBUl9TSUdOICAgICAgICAgICAgICJcMDQ0IgorI2RlZmluZSBTVFJfUEVSQ0VOVF9TSUdOICAgICAgICAgICAgIlwwNDUiCisjZGVmaW5lIFNUUl9BTVBFUlNBTkQgICAgICAgICAgICAgICAiXDA0NiIKKyNkZWZpbmUgU1RSX0FQT1NUUk9QSEUgICAgICAgICAgICAgICJcMDQ3IgorI2RlZmluZSBTVFJfTEVGVF9QQVJFTlRIRVNJUyAgICAgICAgIlwwNTAiCisjZGVmaW5lIFNUUl9SSUdIVF9QQVJFTlRIRVNJUyAgICAgICAiXDA1MSIKKyNkZWZpbmUgU1RSX0FTVEVSSVNLICAgICAgICAgICAgICAgICJcMDUyIgorI2RlZmluZSBTVFJfUExVUyAgICAgICAgICAgICAgICAgICAgIlwwNTMiCisjZGVmaW5lIFNUUl9DT01NQSAgICAgICAgICAgICAgICAgICAiXDA1NCIKKyNkZWZpbmUgU1RSX01JTlVTICAgICAgICAgICAgICAgICAgICJcMDU1IgorI2RlZmluZSBTVFJfRE9UICAgICAgICAgICAgICAgICAgICAgIlwwNTYiCisjZGVmaW5lIFNUUl9TTEFTSCAgICAgICAgICAgICAgICAgICAiXDA1NyIKKyNkZWZpbmUgU1RSXzAgICAgICAgICAgICAgICAgICAgICAgICJcMDYwIgorI2RlZmluZSBTVFJfMSAgICAgICAgICAgICAgICAgICAgICAgIlwwNjEiCisjZGVmaW5lIFNUUl8yICAgICAgICAgICAgICAgICAgICAgICAiXDA2MiIKKyNkZWZpbmUgU1RSXzMgICAgICAgICAgICAgICAgICAgICAgICJcMDYzIgorI2RlZmluZSBTVFJfNCAgICAgICAgICAgICAgICAgICAgICAgIlwwNjQiCisjZGVmaW5lIFNUUl81ICAgICAgICAgICAgICAgICAgICAgICAiXDA2NSIKKyNkZWZpbmUgU1RSXzYgICAgICAgICAgICAgICAgICAgICAgICJcMDY2IgorI2RlZmluZSBTVFJfNyAgICAgICAgICAgICAgICAgICAgICAgIlwwNjciCisjZGVmaW5lIFNUUl84ICAgICAgICAgICAgICAgICAgICAgICAiXDA3MCIKKyNkZWZpbmUgU1RSXzkgICAgICAgICAgICAgICAgICAgICAgICJcMDcxIgorI2RlZmluZSBTVFJfQ09MT04gICAgICAgICAgICAgICAgICAgIlwwNzIiCisjZGVmaW5lIFNUUl9TRU1JQ09MT04gICAgICAgICAgICAgICAiXDA3MyIKKyNkZWZpbmUgU1RSX0xFU1NfVEhBTl9TSUdOICAgICAgICAgICJcMDc0IgorI2RlZmluZSBTVFJfRVFVQUxTX1NJR04gICAgICAgICAgICAgIlwwNzUiCisjZGVmaW5lIFNUUl9HUkVBVEVSX1RIQU5fU0lHTiAgICAgICAiXDA3NiIKKyNkZWZpbmUgU1RSX1FVRVNUSU9OX01BUksgICAgICAgICAgICJcMDc3IgorI2RlZmluZSBTVFJfQ09NTUVSQ0lBTF9BVCAgICAgICAgICAgIlwxMDAiCisjZGVmaW5lIFNUUl9BICAgICAgICAgICAgICAgICAgICAgICAiXDEwMSIKKyNkZWZpbmUgU1RSX0IgICAgICAgICAgICAgICAgICAgICAgICJcMTAyIgorI2RlZmluZSBTVFJfQyAgICAgICAgICAgICAgICAgICAgICAgIlwxMDMiCisjZGVmaW5lIFNUUl9EICAgICAgICAgICAgICAgICAgICAgICAiXDEwNCIKKyNkZWZpbmUgU1RSX0UgICAgICAgICAgICAgICAgICAgICAgICJcMTA1IgorI2RlZmluZSBTVFJfRiAgICAgICAgICAgICAgICAgICAgICAgIlwxMDYiCisjZGVmaW5lIFNUUl9HICAgICAgICAgICAgICAgICAgICAgICAiXDEwNyIKKyNkZWZpbmUgU1RSX0ggICAgICAgICAgICAgICAgICAgICAgICJcMTEwIgorI2RlZmluZSBTVFJfSSAgICAgICAgICAgICAgICAgICAgICAgIlwxMTEiCisjZGVmaW5lIFNUUl9KICAgICAgICAgICAgICAgICAgICAgICAiXDExMiIKKyNkZWZpbmUgU1RSX0sgICAgICAgICAgICAgICAgICAgICAgICJcMTEzIgorI2RlZmluZSBTVFJfTCAgICAgICAgICAgICAgICAgICAgICAgIlwxMTQiCisjZGVmaW5lIFNUUl9NICAgICAgICAgICAgICAgICAgICAgICAiXDExNSIKKyNkZWZpbmUgU1RSX04gICAgICAgICAgICAgICAgICAgICAgICJcMTE2IgorI2RlZmluZSBTVFJfTyAgICAgICAgICAgICAgICAgICAgICAgIlwxMTciCisjZGVmaW5lIFNUUl9QICAgICAgICAgICAgICAgICAgICAgICAiXDEyMCIKKyNkZWZpbmUgU1RSX1EgICAgICAgICAgICAgICAgICAgICAgICJcMTIxIgorI2RlZmluZSBTVFJfUiAgICAgICAgICAgICAgICAgICAgICAgIlwxMjIiCisjZGVmaW5lIFNUUl9TICAgICAgICAgICAgICAgICAgICAgICAiXDEyMyIKKyNkZWZpbmUgU1RSX1QgICAgICAgICAgICAgICAgICAgICAgICJcMTI0IgorI2RlZmluZSBTVFJfVSAgICAgICAgICAgICAgICAgICAgICAgIlwxMjUiCisjZGVmaW5lIFNUUl9WICAgICAgICAgICAgICAgICAgICAgICAiXDEyNiIKKyNkZWZpbmUgU1RSX1cgICAgICAgICAgICAgICAgICAgICAgICJcMTI3IgorI2RlZmluZSBTVFJfWCAgICAgICAgICAgICAgICAgICAgICAgIlwxMzAiCisjZGVmaW5lIFNUUl9ZICAgICAgICAgICAgICAgICAgICAgICAiXDEzMSIKKyNkZWZpbmUgU1RSX1ogICAgICAgICAgICAgICAgICAgICAgICJcMTMyIgorI2RlZmluZSBTVFJfTEVGVF9TUVVBUkVfQlJBQ0tFVCAgICAgIlwxMzMiCisjZGVmaW5lIFNUUl9CQUNLU0xBU0ggICAgICAgICAgICAgICAiXDEzNCIKKyNkZWZpbmUgU1RSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICAgICJcMTM1IgorI2RlZmluZSBTVFJfQ0lSQ1VNRkxFWF9BQ0NFTlQgICAgICAgIlwxMzYiCisjZGVmaW5lIFNUUl9VTkRFUlNDT1JFICAgICAgICAgICAgICAiXDEzNyIKKyNkZWZpbmUgU1RSX0dSQVZFX0FDQ0VOVCAgICAgICAgICAgICJcMTQwIgorI2RlZmluZSBTVFJfYSAgICAgICAgICAgICAgICAgICAgICAgIlwxNDEiCisjZGVmaW5lIFNUUl9iICAgICAgICAgICAgICAgICAgICAgICAiXDE0MiIKKyNkZWZpbmUgU1RSX2MgICAgICAgICAgICAgICAgICAgICAgICJcMTQzIgorI2RlZmluZSBTVFJfZCAgICAgICAgICAgICAgICAgICAgICAgIlwxNDQiCisjZGVmaW5lIFNUUl9lICAgICAgICAgICAgICAgICAgICAgICAiXDE0NSIKKyNkZWZpbmUgU1RSX2YgICAgICAgICAgICAgICAgICAgICAgICJcMTQ2IgorI2RlZmluZSBTVFJfZyAgICAgICAgICAgICAgICAgICAgICAgIlwxNDciCisjZGVmaW5lIFNUUl9oICAgICAgICAgICAgICAgICAgICAgICAiXDE1MCIKKyNkZWZpbmUgU1RSX2kgICAgICAgICAgICAgICAgICAgICAgICJcMTUxIgorI2RlZmluZSBTVFJfaiAgICAgICAgICAgICAgICAgICAgICAgIlwxNTIiCisjZGVmaW5lIFNUUl9rICAgICAgICAgICAgICAgICAgICAgICAiXDE1MyIKKyNkZWZpbmUgU1RSX2wgICAgICAgICAgICAgICAgICAgICAgICJcMTU0IgorI2RlZmluZSBTVFJfbSAgICAgICAgICAgICAgICAgICAgICAgIlwxNTUiCisjZGVmaW5lIFNUUl9uICAgICAgICAgICAgICAgICAgICAgICAiXDE1NiIKKyNkZWZpbmUgU1RSX28gICAgICAgICAgICAgICAgICAgICAgICJcMTU3IgorI2RlZmluZSBTVFJfcCAgICAgICAgICAgICAgICAgICAgICAgIlwxNjAiCisjZGVmaW5lIFNUUl9xICAgICAgICAgICAgICAgICAgICAgICAiXDE2MSIKKyNkZWZpbmUgU1RSX3IgICAgICAgICAgICAgICAgICAgICAgICJcMTYyIgorI2RlZmluZSBTVFJfcyAgICAgICAgICAgICAgICAgICAgICAgIlwxNjMiCisjZGVmaW5lIFNUUl90ICAgICAgICAgICAgICAgICAgICAgICAiXDE2NCIKKyNkZWZpbmUgU1RSX3UgICAgICAgICAgICAgICAgICAgICAgICJcMTY1IgorI2RlZmluZSBTVFJfdiAgICAgICAgICAgICAgICAgICAgICAgIlwxNjYiCisjZGVmaW5lIFNUUl93ICAgICAgICAgICAgICAgICAgICAgICAiXDE2NyIKKyNkZWZpbmUgU1RSX3ggICAgICAgICAgICAgICAgICAgICAgICJcMTcwIgorI2RlZmluZSBTVFJfeSAgICAgICAgICAgICAgICAgICAgICAgIlwxNzEiCisjZGVmaW5lIFNUUl96ICAgICAgICAgICAgICAgICAgICAgICAiXDE3MiIKKyNkZWZpbmUgU1RSX0xFRlRfQ1VSTFlfQlJBQ0tFVCAgICAgICJcMTczIgorI2RlZmluZSBTVFJfVkVSVElDQUxfTElORSAgICAgICAgICAgIlwxNzQiCisjZGVmaW5lIFNUUl9SSUdIVF9DVVJMWV9CUkFDS0VUICAgICAiXDE3NSIKKyNkZWZpbmUgU1RSX1RJTERFICAgICAgICAgICAgICAgICAgICJcMTc2IgorCisjZGVmaW5lIFNUUklOR19BQ0NFUFQwICAgICAgICAgICAgICBTVFJfQSBTVFJfQyBTVFJfQyBTVFJfRSBTVFJfUCBTVFJfVCAiXDAiCisjZGVmaW5lIFNUUklOR19DT01NSVQwICAgICAgICAgICAgICBTVFJfQyBTVFJfTyBTVFJfTSBTVFJfTSBTVFJfSSBTVFJfVCAiXDAiCisjZGVmaW5lIFNUUklOR19GMCAgICAgICAgICAgICAgICAgICBTVFJfRiAiXDAiCisjZGVmaW5lIFNUUklOR19GQUlMMCAgICAgICAgICAgICAgICBTVFJfRiBTVFJfQSBTVFJfSSBTVFJfTCAiXDAiCisjZGVmaW5lIFNUUklOR19NQVJLMCAgICAgICAgICAgICAgICBTVFJfTSBTVFJfQSBTVFJfUiBTVFJfSyAiXDAiCisjZGVmaW5lIFNUUklOR19QUlVORTAgICAgICAgICAgICAgICBTVFJfUCBTVFJfUiBTVFJfVSBTVFJfTiBTVFJfRSAiXDAiCisjZGVmaW5lIFNUUklOR19TS0lQMCAgICAgICAgICAgICAgICBTVFJfUyBTVFJfSyBTVFJfSSBTVFJfUCAiXDAiCisjZGVmaW5lIFNUUklOR19USEVOICAgICAgICAgICAgICAgICBTVFJfVCBTVFJfSCBTVFJfRSBTVFJfTgorCisjZGVmaW5lIFNUUklOR19hbHBoYTAgICAgICAgICAgICAgICBTVFJfYSBTVFJfbCBTVFJfcCBTVFJfaCBTVFJfYSAiXDAiCisjZGVmaW5lIFNUUklOR19sb3dlcjAgICAgICAgICAgICAgICBTVFJfbCBTVFJfbyBTVFJfdyBTVFJfZSBTVFJfciAiXDAiCisjZGVmaW5lIFNUUklOR191cHBlcjAgICAgICAgICAgICAgICBTVFJfdSBTVFJfcCBTVFJfcCBTVFJfZSBTVFJfciAiXDAiCisjZGVmaW5lIFNUUklOR19hbG51bTAgICAgICAgICAgICAgICBTVFJfYSBTVFJfbCBTVFJfbiBTVFJfdSBTVFJfbSAiXDAiCisjZGVmaW5lIFNUUklOR19hc2NpaTAgICAgICAgICAgICAgICBTVFJfYSBTVFJfcyBTVFJfYyBTVFJfaSBTVFJfaSAiXDAiCisjZGVmaW5lIFNUUklOR19ibGFuazAgICAgICAgICAgICAgICBTVFJfYiBTVFJfbCBTVFJfYSBTVFJfbiBTVFJfayAiXDAiCisjZGVmaW5lIFNUUklOR19jbnRybDAgICAgICAgICAgICAgICBTVFJfYyBTVFJfbiBTVFJfdCBTVFJfciBTVFJfbCAiXDAiCisjZGVmaW5lIFNUUklOR19kaWdpdDAgICAgICAgICAgICAgICBTVFJfZCBTVFJfaSBTVFJfZyBTVFJfaSBTVFJfdCAiXDAiCisjZGVmaW5lIFNUUklOR19ncmFwaDAgICAgICAgICAgICAgICBTVFJfZyBTVFJfciBTVFJfYSBTVFJfcCBTVFJfaCAiXDAiCisjZGVmaW5lIFNUUklOR19wcmludDAgICAgICAgICAgICAgICBTVFJfcCBTVFJfciBTVFJfaSBTVFJfbiBTVFJfdCAiXDAiCisjZGVmaW5lIFNUUklOR19wdW5jdDAgICAgICAgICAgICAgICBTVFJfcCBTVFJfdSBTVFJfbiBTVFJfYyBTVFJfdCAiXDAiCisjZGVmaW5lIFNUUklOR19zcGFjZTAgICAgICAgICAgICAgICBTVFJfcyBTVFJfcCBTVFJfYSBTVFJfYyBTVFJfZSAiXDAiCisjZGVmaW5lIFNUUklOR193b3JkMCAgICAgICAgICAgICAgICBTVFJfdyBTVFJfbyBTVFJfciBTVFJfZCAgICAgICAiXDAiCisjZGVmaW5lIFNUUklOR194ZGlnaXQgICAgICAgICAgICAgICBTVFJfeCBTVFJfZCBTVFJfaSBTVFJfZyBTVFJfaSBTVFJfdAorCisjZGVmaW5lIFNUUklOR19ERUZJTkUgICAgICAgICAgICAgICBTVFJfRCBTVFJfRSBTVFJfRiBTVFJfSSBTVFJfTiBTVFJfRQorI2RlZmluZSBTVFJJTkdfVkVSU0lPTiAgICAgICAgICAgICAgU1RSX1YgU1RSX0UgU1RSX1IgU1RSX1MgU1RSX0kgU1RSX08gU1RSX04KKyNkZWZpbmUgU1RSSU5HX1dFSVJEX1NUQVJUV09SRCAgICAgIFNUUl9MRUZUX1NRVUFSRV9CUkFDS0VUIFNUUl9DT0xPTiBTVFJfTEVTU19USEFOX1NJR04gU1RSX0NPTE9OIFNUUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCBTVFJfUklHSFRfU1FVQVJFX0JSQUNLRVQKKyNkZWZpbmUgU1RSSU5HX1dFSVJEX0VORFdPUkQgICAgICAgIFNUUl9MRUZUX1NRVUFSRV9CUkFDS0VUIFNUUl9DT0xPTiBTVFJfR1JFQVRFUl9USEFOX1NJR04gU1RSX0NPTE9OIFNUUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVCBTVFJfUklHSFRfU1FVQVJFX0JSQUNLRVQKKworI2RlZmluZSBTVFJJTkdfQ1JfUklHSFRQQVIgICAgICAgICAgICAgICAgU1RSX0MgU1RSX1IgU1RSX1JJR0hUX1BBUkVOVEhFU0lTCisjZGVmaW5lIFNUUklOR19MRl9SSUdIVFBBUiAgICAgICAgICAgICAgICBTVFJfTCBTVFJfRiBTVFJfUklHSFRfUEFSRU5USEVTSVMKKyNkZWZpbmUgU1RSSU5HX0NSTEZfUklHSFRQQVIgICAgICAgICAgICAgIFNUUl9DIFNUUl9SIFNUUl9MIFNUUl9GIFNUUl9SSUdIVF9QQVJFTlRIRVNJUworI2RlZmluZSBTVFJJTkdfQU5ZX1JJR0hUUEFSICAgICAgICAgICAgICAgU1RSX0EgU1RSX04gU1RSX1kgU1RSX1JJR0hUX1BBUkVOVEhFU0lTCisjZGVmaW5lIFNUUklOR19BTllDUkxGX1JJR0hUUEFSICAgICAgICAgICBTVFJfQSBTVFJfTiBTVFJfWSBTVFJfQyBTVFJfUiBTVFJfTCBTVFJfRiBTVFJfUklHSFRfUEFSRU5USEVTSVMKKyNkZWZpbmUgU1RSSU5HX0JTUl9BTllDUkxGX1JJR0hUUEFSICAgICAgIFNUUl9CIFNUUl9TIFNUUl9SIFNUUl9VTkRFUlNDT1JFIFNUUl9BIFNUUl9OIFNUUl9ZIFNUUl9DIFNUUl9SIFNUUl9MIFNUUl9GIFNUUl9SSUdIVF9QQVJFTlRIRVNJUworI2RlZmluZSBTVFJJTkdfQlNSX1VOSUNPREVfUklHSFRQQVIgICAgICAgU1RSX0IgU1RSX1MgU1RSX1IgU1RSX1VOREVSU0NPUkUgU1RSX1UgU1RSX04gU1RSX0kgU1RSX0MgU1RSX08gU1RSX0QgU1RSX0UgU1RSX1JJR0hUX1BBUkVOVEhFU0lTCisjZGVmaW5lIFNUUklOR19VVEY4X1JJR0hUUEFSICAgICAgICAgICAgICBTVFJfVSBTVFJfVCBTVFJfRiBTVFJfOCBTVFJfUklHSFRfUEFSRU5USEVTSVMKKyNkZWZpbmUgU1RSSU5HX1VURjE2X1JJR0hUUEFSICAgICAgICAgICAgIFNUUl9VIFNUUl9UIFNUUl9GIFNUUl8xIFNUUl82IFNUUl9SSUdIVF9QQVJFTlRIRVNJUworI2RlZmluZSBTVFJJTkdfVVRGMzJfUklHSFRQQVIgICAgICAgICAgICAgU1RSX1UgU1RSX1QgU1RSX0YgU1RSXzMgU1RSXzIgU1RSX1JJR0hUX1BBUkVOVEhFU0lTCisjZGVmaW5lIFNUUklOR19VVEZfUklHSFRQQVIgICAgICAgICAgICAgICBTVFJfVSBTVFJfVCBTVFJfRiBTVFJfUklHSFRfUEFSRU5USEVTSVMKKyNkZWZpbmUgU1RSSU5HX1VDUF9SSUdIVFBBUiAgICAgICAgICAgICAgIFNUUl9VIFNUUl9DIFNUUl9QIFNUUl9SSUdIVF9QQVJFTlRIRVNJUworI2RlZmluZSBTVFJJTkdfTk9fQVVUT19QT1NTRVNTX1JJR0hUUEFSICAgU1RSX04gU1RSX08gU1RSX1VOREVSU0NPUkUgU1RSX0EgU1RSX1UgU1RSX1QgU1RSX08gU1RSX1VOREVSU0NPUkUgU1RSX1AgU1RSX08gU1RSX1MgU1RSX1MgU1RSX0UgU1RSX1MgU1RSX1MgU1RSX1JJR0hUX1BBUkVOVEhFU0lTCisjZGVmaW5lIFNUUklOR19OT19ET1RTVEFSX0FOQ0hPUl9SSUdIVFBBUiBTVFJfTiBTVFJfTyBTVFJfVU5ERVJTQ09SRSBTVFJfRCBTVFJfTyBTVFJfVCBTVFJfUyBTVFJfVCBTVFJfQSBTVFJfUiBTVFJfVU5ERVJTQ09SRSBTVFJfQSBTVFJfTiBTVFJfQyBTVFJfSCBTVFJfTyBTVFJfUiBTVFJfUklHSFRfUEFSRU5USEVTSVMKKyNkZWZpbmUgU1RSSU5HX05PX0pJVF9SSUdIVFBBUiAgICAgICAgICAgIFNUUl9OIFNUUl9PIFNUUl9VTkRFUlNDT1JFIFNUUl9KIFNUUl9JIFNUUl9UIFNUUl9SSUdIVF9QQVJFTlRIRVNJUworI2RlZmluZSBTVFJJTkdfTk9fU1RBUlRfT1BUX1JJR0hUUEFSICAgICAgU1RSX04gU1RSX08gU1RSX1VOREVSU0NPUkUgU1RSX1MgU1RSX1QgU1RSX0EgU1RSX1IgU1RSX1QgU1RSX1VOREVSU0NPUkUgU1RSX08gU1RSX1AgU1RSX1QgU1RSX1JJR0hUX1BBUkVOVEhFU0lTCisjZGVmaW5lIFNUUklOR19OT1RFTVBUWV9SSUdIVFBBUiAgICAgICAgICBTVFJfTiBTVFJfTyBTVFJfVCBTVFJfRSBTVFJfTSBTVFJfUCBTVFJfVCBTVFJfWSBTVFJfUklHSFRfUEFSRU5USEVTSVMKKyNkZWZpbmUgU1RSSU5HX05PVEVNUFRZX0FUU1RBUlRfUklHSFRQQVIgIFNUUl9OIFNUUl9PIFNUUl9UIFNUUl9FIFNUUl9NIFNUUl9QIFNUUl9UIFNUUl9ZIFNUUl9VTkRFUlNDT1JFIFNUUl9BIFNUUl9UIFNUUl9TIFNUUl9UIFNUUl9BIFNUUl9SIFNUUl9UIFNUUl9SSUdIVF9QQVJFTlRIRVNJUworI2RlZmluZSBTVFJJTkdfTElNSVRfTUFUQ0hfRVEgICAgICAgICAgICAgU1RSX0wgU1RSX0kgU1RSX00gU1RSX0kgU1RSX1QgU1RSX1VOREVSU0NPUkUgU1RSX00gU1RSX0EgU1RSX1QgU1RSX0MgU1RSX0ggU1RSX0VRVUFMU19TSUdOCisjZGVmaW5lIFNUUklOR19MSU1JVF9SRUNVUlNJT05fRVEgICAgICAgICBTVFJfTCBTVFJfSSBTVFJfTSBTVFJfSSBTVFJfVCBTVFJfVU5ERVJTQ09SRSBTVFJfUiBTVFJfRSBTVFJfQyBTVFJfVSBTVFJfUiBTVFJfUyBTVFJfSSBTVFJfTyBTVFJfTiBTVFJfRVFVQUxTX1NJR04KKyNkZWZpbmUgU1RSSU5HX01BUksgICAgICAgICAgICAgICAgICAgICAgIFNUUl9NIFNUUl9BIFNUUl9SIFNUUl9LCisKKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tIEVuZCBvZiBjaGFyYWN0ZXIgYW5kIHN0cmluZyBuYW1lcyAtLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmaW5pdGlvbnMgZm9yIGNvbXBpbGVkIHBhdHRlcm5zIC0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBDb2RlcyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIFVuaWNvZGUgcHJvcGVydHkgKi8KKworI2RlZmluZSBQVF9BTlkgICAgICAgIDAgICAgLyogQW55IHByb3BlcnR5IC0gbWF0Y2hlcyBhbGwgY2hhcnMgKi8KKyNkZWZpbmUgUFRfTEFNUCAgICAgICAxICAgIC8qIEwmIC0gdGhlIHVuaW9uIG9mIEx1LCBMbCwgTHQgKi8KKyNkZWZpbmUgUFRfR0MgICAgICAgICAyICAgIC8qIFNwZWNpZmllZCBnZW5lcmFsIGNoYXJhY3RlcmlzdGljIChlLmcuIEwpICovCisjZGVmaW5lIFBUX1BDICAgICAgICAgMyAgICAvKiBTcGVjaWZpZWQgcGFydGljdWxhciBjaGFyYWN0ZXJpc3RpYyAoZS5nLiBMdSkgKi8KKyNkZWZpbmUgUFRfU0MgICAgICAgICA0ICAgIC8qIFNjcmlwdCAoZS5nLiBIYW4pICovCisjZGVmaW5lIFBUX0FMTlVNICAgICAgNSAgICAvKiBBbHBoYW51bWVyaWMgLSB0aGUgdW5pb24gb2YgTCBhbmQgTiAqLworI2RlZmluZSBQVF9TUEFDRSAgICAgIDYgICAgLyogUGVybCBzcGFjZSAtIFogcGx1cyA5LDEwLDEyLDEzICovCisjZGVmaW5lIFBUX1BYU1BBQ0UgICAgNyAgICAvKiBQT1NJWCBzcGFjZSAtIFogcGx1cyA5LDEwLDExLDEyLDEzICovCisjZGVmaW5lIFBUX1dPUkQgICAgICAgOCAgICAvKiBXb3JkIC0gTCBwbHVzIE4gcGx1cyB1bmRlcnNjb3JlICovCisjZGVmaW5lIFBUX0NMSVNUICAgICAgOSAgICAvKiBQc2V1ZG8tcHJvcGVydHk6IG1hdGNoIGNoYXJhY3RlciBsaXN0ICovCisjZGVmaW5lIFBUX1VDTkMgICAgICAxMCAgICAvKiBVbml2ZXJzYWwgQ2hhcmFjdGVyIG5hbWVhYmxlIGNoYXJhY3RlciAqLworI2RlZmluZSBQVF9UQUJTSVpFICAgMTEgICAgLyogU2l6ZSBvZiBzcXVhcmUgdGFibGUgZm9yIGF1dG9wb3NzZXNzaWZ5IHRlc3RzICovCisKKy8qIFRoZSBmb2xsb3dpbmcgc3BlY2lhbCBwcm9wZXJ0aWVzIGFyZSB1c2VkIG9ubHkgaW4gWENMQVNTIGl0ZW1zLCB3aGVuIFBPU0lYCitjbGFzc2VzIGFyZSBzcGVjaWZpZWQgYW5kIFBDUkVfVUNQIGlzIHNldCAtIGluIG90aGVyIHdvcmRzLCBmb3IgVW5pY29kZQoraGFuZGxpbmcgb2YgdGhlc2UgY2xhc3Nlcy4gVGhleSBhcmUgbm90IGF2YWlsYWJsZSB2aWEgdGhlIFxwIG9yIFxQIGVzY2FwZXMgbGlrZQordGhvc2UgaW4gdGhlIGFib3ZlIGxpc3QsIGFuZCBzbyB0aGV5IGRvIG5vdCB0YWtlIHBhcnQgaW4gdGhlIGF1dG9wb3NzZXNzaWZ5aW5nCit0YWJsZS4gKi8KKworI2RlZmluZSBQVF9QWEdSQVBIICAgMTEgICAgLyogWzpncmFwaDpdIC0gY2hhcmFjdGVycyB0aGF0IG1hcmsgdGhlIHBhcGVyICovCisjZGVmaW5lIFBUX1BYUFJJTlQgICAxMiAgICAvKiBbOnByaW50Ol0gLSBbOmdyYXBoOl0gcGx1cyBub24tY29udHJvbCBzcGFjZXMgKi8KKyNkZWZpbmUgUFRfUFhQVU5DVCAgIDEzICAgIC8qIFs6cHVuY3Q6XSAtIHB1bmN0dWF0aW9uIGNoYXJhY3RlcnMgKi8KKworLyogRmxhZyBiaXRzIGFuZCBkYXRhIHR5cGVzIGZvciB0aGUgZXh0ZW5kZWQgY2xhc3MgKE9QX1hDTEFTUykgZm9yIGNsYXNzZXMgdGhhdAorY29udGFpbiBjaGFyYWN0ZXJzIHdpdGggdmFsdWVzIGdyZWF0ZXIgdGhhbiAyNTUuICovCisKKyNkZWZpbmUgWENMX05PVCAgICAgICAweDAxICAgIC8qIEZsYWc6IHRoaXMgaXMgYSBuZWdhdGl2ZSBjbGFzcyAqLworI2RlZmluZSBYQ0xfTUFQICAgICAgIDB4MDIgICAgLyogRmxhZzogYSAzMi1ieXRlIG1hcCBpcyBwcmVzZW50ICovCisjZGVmaW5lIFhDTF9IQVNQUk9QICAgMHgwNCAgICAvKiBGbGFnOiBwcm9wZXJ0eSBjaGVja3MgYXJlIHByZXNlbnQuICovCisKKyNkZWZpbmUgWENMX0VORCAgICAgICAwICAgIC8qIE1hcmtzIGVuZCBvZiBpbmRpdmlkdWFsIGl0ZW1zICovCisjZGVmaW5lIFhDTF9TSU5HTEUgICAgMSAgICAvKiBTaW5nbGUgaXRlbSAob25lIG11bHRpYnl0ZSBjaGFyKSBmb2xsb3dzICovCisjZGVmaW5lIFhDTF9SQU5HRSAgICAgMiAgICAvKiBBIHJhbmdlICh0d28gbXVsdGlieXRlIGNoYXJzKSBmb2xsb3dzICovCisjZGVmaW5lIFhDTF9QUk9QICAgICAgMyAgICAvKiBVbmljb2RlIHByb3BlcnR5ICgyLWJ5dGUgcHJvcGVydHkgY29kZSBmb2xsb3dzKSAqLworI2RlZmluZSBYQ0xfTk9UUFJPUCAgIDQgICAgLyogVW5pY29kZSBpbnZlcnRlZCBwcm9wZXJ0eSAoZGl0dG8pICovCisKKy8qIEVzY2FwZSBpdGVtcyB0aGF0IGFyZSBqdXN0IGFuIGVuY29kaW5nIG9mIGEgcGFydGljdWxhciBkYXRhIHZhbHVlLiBUaGVzZQorYXBwZWFyIGluIHRoZSBlc2NhcGVzW10gdGFibGUgaW4gcGNyZTJfY29tcGlsZS5jIGFzIHBvc2l0aXZlIG51bWJlcnMuICovCisKKyNpZm5kZWYgRVNDX2EKKyNkZWZpbmUgRVNDX2EgQ0hBUl9CRUwKKyNlbmRpZgorCisjaWZuZGVmIEVTQ19lCisjZGVmaW5lIEVTQ19lIENIQVJfRVNDCisjZW5kaWYKKworI2lmbmRlZiBFU0NfZgorI2RlZmluZSBFU0NfZiBDSEFSX0ZGCisjZW5kaWYKKworI2lmbmRlZiBFU0NfbgorI2RlZmluZSBFU0NfbiBDSEFSX0xGCisjZW5kaWYKKworI2lmbmRlZiBFU0NfcgorI2RlZmluZSBFU0NfciBDSEFSX0NSCisjZW5kaWYKKworLyogV2UgY2FuJ3Qgb2ZmaWNpYWxseSB1c2UgRVNDX3QgYmVjYXVzZSBpdCBpcyBhIFBPU0lYIHJlc2VydmVkIGlkZW50aWZpZXIKKyhwcmVzdW1hYmx5IGJlY2F1c2Ugb2YgYWxsIHRoZSBvdGhlcnMgbGlrZSBzaXplX3QpLiAqLworCisjaWZuZGVmIEVTQ190ZWUKKyNkZWZpbmUgRVNDX3RlZSBDSEFSX0hUCisjZW5kaWYKKworLyogVGhlc2UgYXJlIGVzY2FwZWQgaXRlbXMgdGhhdCBhcmVuJ3QganVzdCBhbiBlbmNvZGluZyBvZiBhIHBhcnRpY3VsYXIgZGF0YQordmFsdWUgc3VjaCBhcyBcbi4gVGhleSBtdXN0IGhhdmUgbm9uLXplcm8gdmFsdWVzLCBhcyBjaGVja19lc2NhcGUoKSByZXR1cm5zIDAKK2ZvciBhIGRhdGEgY2hhcmFjdGVyLiBJbiB0aGUgZXNjYXBlc1tdIHRhYmxlIGluIHBjcmUyX2NvbXBpbGUuYyB0aGVpciB2YWx1ZXMKK2FyZSBuZWdhdGVkIGluIG9yZGVyIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBkYXRhIHZhbHVlcy4KKworVGhleSBtdXN0IGFwcGVhciBoZXJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIGluIHRoZSBvcGNvZGUgZGVmaW5pdGlvbnMgYmVsb3csIHVwCit0byBFU0Nfei4gVGhlcmUncyBhIGR1bW15IGZvciBPUF9BTExBTlkgYmVjYXVzZSBpdCBjb3JyZXNwb25kcyB0byAiLiIgaW4gRE9UQUxMCittb2RlIHJhdGhlciB0aGFuIGFuIGVzY2FwZSBzZXF1ZW5jZS4gSXQgaXMgYWxzbyB1c2VkIGZvciBbXl0gaW4gSmF2YVNjcmlwdAorY29tcGF0aWJpbGl0eSBtb2RlLCBhbmQgZm9yIFxDIGluIG5vbi11dGYgbW9kZS4gSW4gbm9uLURPVEFMTCBtb2RlLCAiLiIgYmVoYXZlcworbGlrZSBcTi4KKworVGhlIHNwZWNpYWwgdmFsdWVzIEVTQ19EVSwgRVNDX2R1LCBldGMuIGFyZSB1c2VkIGluc3RlYWQgb2YgRVNDX0QsIEVTQ19kLCBldGMuCit3aGVuIFBDUkVfVUNQIGlzIHNldCBhbmQgcmVwbGFjZW1lbnQgb2YgXGQgZXRjIGJ5IFxwIHNlcXVlbmNlcyBpcyByZXF1aXJlZC4KK1RoZXkgbXVzdCBiZSBjb250aWd1b3VzLCBhbmQgcmVtYWluIGluIG9yZGVyIHNvIHRoYXQgdGhlIHJlcGxhY2VtZW50cyBjYW4gYmUKK2xvb2tlZCB1cCBmcm9tIGEgdGFibGUuCisKK05lZ2F0aXZlIG51bWJlcnMgYXJlIHVzZWQgdG8gZW5jb2RlIGEgYmFja3JlZmVyZW5jZSAoXDEsIFwyLCBcMywgZXRjLikgaW4KK2NoZWNrX2VzY2FwZSgpLiBUaGVyZSBhcmUgdHdvIHRlc3RzIGluIHRoZSBjb2RlIGZvciBhbiBlc2NhcGUKK2dyZWF0ZXIgdGhhbiBFU0NfYiBhbmQgbGVzcyB0aGFuIEVTQ19aIHRvIGRldGVjdCB0aGUgdHlwZXMgdGhhdCBtYXkgYmUKK3JlcGVhdGVkLiBUaGVzZSBhcmUgdGhlIHR5cGVzIHRoYXQgY29uc3VtZSBjaGFyYWN0ZXJzLiBJZiBhbnkgbmV3IGVzY2FwZXMgYXJlCitwdXQgaW4gYmV0d2VlbiB0aGF0IGRvbid0IGNvbnN1bWUgYSBjaGFyYWN0ZXIsIHRoYXQgY29kZSB3aWxsIGhhdmUgdG8gY2hhbmdlLgorKi8KKworZW51bSB7IEVTQ19BID0gMSwgRVNDX0csIEVTQ19LLCBFU0NfQiwgRVNDX2IsIEVTQ19ELCBFU0NfZCwgRVNDX1MsIEVTQ19zLAorICAgICAgIEVTQ19XLCBFU0NfdywgRVNDX04sIEVTQ19kdW0sIEVTQ19DLCBFU0NfUCwgRVNDX3AsIEVTQ19SLCBFU0NfSCwKKyAgICAgICBFU0NfaCwgRVNDX1YsIEVTQ192LCBFU0NfWCwgRVNDX1osIEVTQ196LAorICAgICAgIEVTQ19FLCBFU0NfUSwgRVNDX2csIEVTQ19rLAorICAgICAgIEVTQ19EVSwgRVNDX2R1LCBFU0NfU1UsIEVTQ19zdSwgRVNDX1dVLCBFU0Nfd3UgfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKiBPcGNvZGUgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKioqKioqLworCisvKioqKioqIE5PVEUgTk9URSBOT1RFICoqKioqKgorCitTdGFydGluZyBmcm9tIDEgKGkuZS4gYWZ0ZXIgT1BfRU5EKSwgdGhlIHZhbHVlcyB1cCB0byBPUF9FT0QgbXVzdCBjb3JyZXNwb25kIGluCitvcmRlciB0byB0aGUgbGlzdCBvZiBlc2NhcGVzIGltbWVkaWF0ZWx5IGFib3ZlLiBGdXJ0aGVybW9yZSwgdmFsdWVzIHVwIHRvCitPUF9ET0xMTSBtdXN0IG5vdCBiZSBjaGFuZ2VkIHdpdGhvdXQgYWRqdXN0aW5nIHRoZSB0YWJsZSBjYWxsZWQgYXV0b3Bvc3N0YWIgaW4KK3BjcmVfY29tcGlsZS5jCisKK1doZW5ldmVyIHRoaXMgbGlzdCBpcyB1cGRhdGVkLCB0aGUgdHdvIG1hY3JvIGRlZmluaXRpb25zIHRoYXQgZm9sbG93IG11c3QgYmUKK3VwZGF0ZWQgdG8gbWF0Y2guIFRoZSBwb3NzZXNzaWZpY2F0aW9uIHRhYmxlIGNhbGxlZCAib3Bjb2RlX3Bvc3Nlc3NpZnkiIGluCitwY3JlX2NvbXBpbGUuYyBtdXN0IGFsc28gYmUgdXBkYXRlZCwgYW5kIGFsc28gdGhlIHRhYmxlcyBjYWxsZWQgImNvcHRhYmxlIgorYW5kICJwb3B0YWJsZSIgaW4gcGNyZV9kZmFfZXhlYy5jLgorCisqKioqKiogTk9URSBOT1RFIE5PVEUgKioqKioqLworCisKKy8qIFRoZSB2YWx1ZXMgYmV0d2VlbiBGSVJTVF9BVVRPVEFCX09QIGFuZCBMQVNUX0FVVE9UQUJfUklHSFRfT1AsIGluY2x1c2l2ZSwKK2FyZSB1c2VkIGluIGEgdGFibGUgZm9yIGRlY2lkaW5nIHdoZXRoZXIgYSByZXBlYXRlZCBjaGFyYWN0ZXIgdHlwZSBjYW4gYmUKK2F1dG8tcG9zc2Vzc2lmaWVkLiAqLworCisjZGVmaW5lIEZJUlNUX0FVVE9UQUJfT1AgICAgICAgT1BfTk9UX0RJR0lUCisjZGVmaW5lIExBU1RfQVVUT1RBQl9MRUZUX09QICAgT1BfRVhUVU5JCisjZGVmaW5lIExBU1RfQVVUT1RBQl9SSUdIVF9PUCAgT1BfRE9MTE0KKworZW51bSB7CisgIE9QX0VORCwgICAgICAgICAgICAvKiAwIEVuZCBvZiBwYXR0ZXJuICovCisKKyAgLyogVmFsdWVzIGNvcnJlc3BvbmRpbmcgdG8gYmFja3NsYXNoZWQgbWV0YWNoYXJhY3RlcnMgKi8KKworICBPUF9TT0QsICAgICAgICAgICAgLyogMSBTdGFydCBvZiBkYXRhOiBcQSAqLworICBPUF9TT00sICAgICAgICAgICAgLyogMiBTdGFydCBvZiBtYXRjaCAoc3ViamVjdCArIG9mZnNldCk6IFxHICovCisgIE9QX1NFVF9TT00sICAgICAgICAvKiAzIFNldCBzdGFydCBvZiBtYXRjaCAoXEspICovCisgIE9QX05PVF9XT1JEX0JPVU5EQVJZLCAgLyogIDQgXEIgKi8KKyAgT1BfV09SRF9CT1VOREFSWSwgICAgICAvKiAgNSBcYiAqLworICBPUF9OT1RfRElHSVQsICAgICAgICAgIC8qICA2IFxEICovCisgIE9QX0RJR0lULCAgICAgICAgICAgICAgLyogIDcgXGQgKi8KKyAgT1BfTk9UX1dISVRFU1BBQ0UsICAgICAvKiAgOCBcUyAqLworICBPUF9XSElURVNQQUNFLCAgICAgICAgIC8qICA5IFxzICovCisgIE9QX05PVF9XT1JEQ0hBUiwgICAgICAgLyogMTAgXFcgKi8KKyAgT1BfV09SRENIQVIsICAgICAgICAgICAvKiAxMSBcdyAqLworCisgIE9QX0FOWSwgICAgICAgICAgICAvKiAxMiBNYXRjaCBhbnkgY2hhcmFjdGVyIGV4Y2VwdCBuZXdsaW5lIChcTikgKi8KKyAgT1BfQUxMQU5ZLCAgICAgICAgIC8qIDEzIE1hdGNoIGFueSBjaGFyYWN0ZXIgKi8KKyAgT1BfQU5ZQllURSwgICAgICAgIC8qIDE0IE1hdGNoIGFueSBieXRlIChcQyk7IGRpZmZlcmVudCB0byBPUF9BTlkgZm9yIFVURi04ICovCisgIE9QX05PVFBST1AsICAgICAgICAvKiAxNSBcUCAobm90IFVuaWNvZGUgcHJvcGVydHkpICovCisgIE9QX1BST1AsICAgICAgICAgICAvKiAxNiBccCAoVW5pY29kZSBwcm9wZXJ0eSkgKi8KKyAgT1BfQU5ZTkwsICAgICAgICAgIC8qIDE3IFxSIChhbnkgbmV3bGluZSBzZXF1ZW5jZSkgKi8KKyAgT1BfTk9UX0hTUEFDRSwgICAgIC8qIDE4IFxIIChub3QgaG9yaXpvbnRhbCB3aGl0ZXNwYWNlKSAqLworICBPUF9IU1BBQ0UsICAgICAgICAgLyogMTkgXGggKGhvcml6b250YWwgd2hpdGVzcGFjZSkgKi8KKyAgT1BfTk9UX1ZTUEFDRSwgICAgIC8qIDIwIFxWIChub3QgdmVydGljYWwgd2hpdGVzcGFjZSkgKi8KKyAgT1BfVlNQQUNFLCAgICAgICAgIC8qIDIxIFx2ICh2ZXJ0aWNhbCB3aGl0ZXNwYWNlKSAqLworICBPUF9FWFRVTkksICAgICAgICAgLyogMjIgXFggKGV4dGVuZGVkIFVuaWNvZGUgc2VxdWVuY2UgKi8KKyAgT1BfRU9ETiwgICAgICAgICAgIC8qIDIzIEVuZCBvZiBkYXRhIG9yIFxuIGF0IGVuZCBvZiBkYXRhIChcWikgKi8KKyAgT1BfRU9ELCAgICAgICAgICAgIC8qIDI0IEVuZCBvZiBkYXRhIChceikgKi8KKworICAvKiBMaW5lIGVuZCBhc3NlcnRpb25zICovCisKKyAgT1BfRE9MTCwgICAgICAgICAgIC8qIDI1IEVuZCBvZiBsaW5lIC0gbm90IG11bHRpbGluZSAqLworICBPUF9ET0xMTSwgICAgICAgICAgLyogMjYgRW5kIG9mIGxpbmUgLSBtdWx0aWxpbmUgKi8KKyAgT1BfQ0lSQywgICAgICAgICAgIC8qIDI3IFN0YXJ0IG9mIGxpbmUgLSBub3QgbXVsdGlsaW5lICovCisgIE9QX0NJUkNNLCAgICAgICAgICAvKiAyOCBTdGFydCBvZiBsaW5lIC0gbXVsdGlsaW5lICovCisKKyAgLyogU2luZ2xlIGNoYXJhY3RlcnM7IGNhc2VmdWwgbXVzdCBwcmVjZWRlIHRoZSBjYXNlbGVzcyBvbmVzICovCisKKyAgT1BfQ0hBUiwgICAgICAgICAgIC8qIDI5IE1hdGNoIG9uZSBjaGFyYWN0ZXIsIGNhc2VmdWxseSAqLworICBPUF9DSEFSSSwgICAgICAgICAgLyogMzAgTWF0Y2ggb25lIGNoYXJhY3RlciwgY2FzZWxlc3NseSAqLworICBPUF9OT1QsICAgICAgICAgICAgLyogMzEgTWF0Y2ggb25lIGNoYXJhY3Rlciwgbm90IHRoZSBnaXZlbiBvbmUsIGNhc2VmdWxseSAqLworICBPUF9OT1RJLCAgICAgICAgICAgLyogMzIgTWF0Y2ggb25lIGNoYXJhY3Rlciwgbm90IHRoZSBnaXZlbiBvbmUsIGNhc2VsZXNzbHkgKi8KKworICAvKiBUaGUgZm9sbG93aW5nIHNldHMgb2YgMTMgb3Bjb2RlcyBtdXN0IGFsd2F5cyBiZSBrZXB0IGluIHN0ZXAgYmVjYXVzZQorICB0aGUgb2Zmc2V0IGZyb20gdGhlIGZpcnN0IG9uZSBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBvdGhlcnMuICovCisKKyAgLyogUmVwZWF0ZWQgY2hhcmFjdGVyczsgY2FzZWZ1bCBtdXN0IHByZWNlZGUgdGhlIGNhc2VsZXNzIG9uZXMgKi8KKworICBPUF9TVEFSLCAgICAgICAgICAgLyogMzMgVGhlIG1heGltaXppbmcgYW5kIG1pbmltaXppbmcgdmVyc2lvbnMgb2YgKi8KKyAgT1BfTUlOU1RBUiwgICAgICAgIC8qIDM0IHRoZXNlIHNpeCBvcGNvZGVzIG11c3QgY29tZSBpbiBwYWlycywgd2l0aCAqLworICBPUF9QTFVTLCAgICAgICAgICAgLyogMzUgdGhlIG1pbmltaXppbmcgb25lIHNlY29uZC4gKi8KKyAgT1BfTUlOUExVUywgICAgICAgIC8qIDM2ICovCisgIE9QX1FVRVJZLCAgICAgICAgICAvKiAzNyAqLworICBPUF9NSU5RVUVSWSwgICAgICAgLyogMzggKi8KKworICBPUF9VUFRPLCAgICAgICAgICAgLyogMzkgRnJvbSAwIHRvIG4gbWF0Y2hlcyBvZiBvbmUgY2hhcmFjdGVyLCBjYXNlZnVsKi8KKyAgT1BfTUlOVVBUTywgICAgICAgIC8qIDQwICovCisgIE9QX0VYQUNULCAgICAgICAgICAvKiA0MSBFeGFjdGx5IG4gbWF0Y2hlcyAqLworCisgIE9QX1BPU1NUQVIsICAgICAgICAvKiA0MiBQb3NzZXNzaWZpZWQgc3RhciwgY2FzZWZ1bCAqLworICBPUF9QT1NQTFVTLCAgICAgICAgLyogNDMgUG9zc2Vzc2lmaWVkIHBsdXMsIGNhc2VmdWwgKi8KKyAgT1BfUE9TUVVFUlksICAgICAgIC8qIDQ0IFBvc2Vzc3NpZmllZCBxdWVyeSwgY2FzZWZ1bCAqLworICBPUF9QT1NVUFRPLCAgICAgICAgLyogNDUgUG9zc2Vzc2lmaWVkIHVwdG8sIGNhc2VmdWwgKi8KKworICAvKiBSZXBlYXRlZCBjaGFyYWN0ZXJzOyBjYXNlbGVzcyBtdXN0IGZvbGxvdyB0aGUgY2FzZWZ1bCBvbmVzICovCisKKyAgT1BfU1RBUkksICAgICAgICAgIC8qIDQ2ICovCisgIE9QX01JTlNUQVJJLCAgICAgICAvKiA0NyAqLworICBPUF9QTFVTSSwgICAgICAgICAgLyogNDggKi8KKyAgT1BfTUlOUExVU0ksICAgICAgIC8qIDQ5ICovCisgIE9QX1FVRVJZSSwgICAgICAgICAvKiA1MCAqLworICBPUF9NSU5RVUVSWUksICAgICAgLyogNTEgKi8KKworICBPUF9VUFRPSSwgICAgICAgICAgLyogNTIgRnJvbSAwIHRvIG4gbWF0Y2hlcyBvZiBvbmUgY2hhcmFjdGVyLCBjYXNlbGVzcyAqLworICBPUF9NSU5VUFRPSSwgICAgICAgLyogNTMgKi8KKyAgT1BfRVhBQ1RJLCAgICAgICAgIC8qIDU0ICovCisKKyAgT1BfUE9TU1RBUkksICAgICAgIC8qIDU1IFBvc3Nlc3NpZmllZCBzdGFyLCBjYXNlbGVzcyAqLworICBPUF9QT1NQTFVTSSwgICAgICAgLyogNTYgUG9zc2Vzc2lmaWVkIHBsdXMsIGNhc2VsZXNzICovCisgIE9QX1BPU1FVRVJZSSwgICAgICAvKiA1NyBQb3Nlc3NzaWZpZWQgcXVlcnksIGNhc2VsZXNzICovCisgIE9QX1BPU1VQVE9JLCAgICAgICAvKiA1OCBQb3NzZXNzaWZpZWQgdXB0bywgY2FzZWxlc3MgKi8KKworICAvKiBUaGUgbmVnYXRlZCBvbmVzIG11c3QgZm9sbG93IHRoZSBub24tbmVnYXRlZCBvbmVzLCBhbmQgbWF0Y2ggdGhlbSAqLworICAvKiBOZWdhdGVkIHJlcGVhdGVkIGNoYXJhY3RlciwgY2FzZWZ1bDsgbXVzdCBwcmVjZWRlIHRoZSBjYXNlbGVzcyBvbmVzICovCisKKyAgT1BfTk9UU1RBUiwgICAgICAgIC8qIDU5IFRoZSBtYXhpbWl6aW5nIGFuZCBtaW5pbWl6aW5nIHZlcnNpb25zIG9mICovCisgIE9QX05PVE1JTlNUQVIsICAgICAvKiA2MCB0aGVzZSBzaXggb3Bjb2RlcyBtdXN0IGNvbWUgaW4gcGFpcnMsIHdpdGggKi8KKyAgT1BfTk9UUExVUywgICAgICAgIC8qIDYxIHRoZSBtaW5pbWl6aW5nIG9uZSBzZWNvbmQuIFRoZXkgbXVzdCBiZSBpbiAqLworICBPUF9OT1RNSU5QTFVTLCAgICAgLyogNjIgZXhhY3RseSB0aGUgc2FtZSBvcmRlciBhcyB0aG9zZSBhYm92ZS4gKi8KKyAgT1BfTk9UUVVFUlksICAgICAgIC8qIDYzICovCisgIE9QX05PVE1JTlFVRVJZLCAgICAvKiA2NCAqLworCisgIE9QX05PVFVQVE8sICAgICAgICAvKiA2NSBGcm9tIDAgdG8gbiBtYXRjaGVzLCBjYXNlZnVsICovCisgIE9QX05PVE1JTlVQVE8sICAgICAvKiA2NiAqLworICBPUF9OT1RFWEFDVCwgICAgICAgLyogNjcgRXhhY3RseSBuIG1hdGNoZXMgKi8KKworICBPUF9OT1RQT1NTVEFSLCAgICAgLyogNjggUG9zc2Vzc2lmaWVkIHZlcnNpb25zLCBjYXNlZnVsICovCisgIE9QX05PVFBPU1BMVVMsICAgICAvKiA2OSAqLworICBPUF9OT1RQT1NRVUVSWSwgICAgLyogNzAgKi8KKyAgT1BfTk9UUE9TVVBUTywgICAgIC8qIDcxICovCisKKyAgLyogTmVnYXRlZCByZXBlYXRlZCBjaGFyYWN0ZXIsIGNhc2VsZXNzOyBtdXN0IGZvbGxvdyB0aGUgY2FzZWZ1bCBvbmVzICovCisKKyAgT1BfTk9UU1RBUkksICAgICAgIC8qIDcyICovCisgIE9QX05PVE1JTlNUQVJJLCAgICAvKiA3MyAqLworICBPUF9OT1RQTFVTSSwgICAgICAgLyogNzQgKi8KKyAgT1BfTk9UTUlOUExVU0ksICAgIC8qIDc1ICovCisgIE9QX05PVFFVRVJZSSwgICAgICAvKiA3NiAqLworICBPUF9OT1RNSU5RVUVSWUksICAgLyogNzcgKi8KKworICBPUF9OT1RVUFRPSSwgICAgICAgLyogNzggRnJvbSAwIHRvIG4gbWF0Y2hlcywgY2FzZWxlc3MgKi8KKyAgT1BfTk9UTUlOVVBUT0ksICAgIC8qIDc5ICovCisgIE9QX05PVEVYQUNUSSwgICAgICAvKiA4MCBFeGFjdGx5IG4gbWF0Y2hlcyAqLworCisgIE9QX05PVFBPU1NUQVJJLCAgICAvKiA4MSBQb3NzZXNzaWZpZWQgdmVyc2lvbnMsIGNhc2VsZXNzICovCisgIE9QX05PVFBPU1BMVVNJLCAgICAvKiA4MiAqLworICBPUF9OT1RQT1NRVUVSWUksICAgLyogODMgKi8KKyAgT1BfTk9UUE9TVVBUT0ksICAgIC8qIDg0ICovCisKKyAgLyogQ2hhcmFjdGVyIHR5cGVzICovCisKKyAgT1BfVFlQRVNUQVIsICAgICAgIC8qIDg1IFRoZSBtYXhpbWl6aW5nIGFuZCBtaW5pbWl6aW5nIHZlcnNpb25zIG9mICovCisgIE9QX1RZUEVNSU5TVEFSLCAgICAvKiA4NiB0aGVzZSBzaXggb3Bjb2RlcyBtdXN0IGNvbWUgaW4gcGFpcnMsIHdpdGggKi8KKyAgT1BfVFlQRVBMVVMsICAgICAgIC8qIDg3IHRoZSBtaW5pbWl6aW5nIG9uZSBzZWNvbmQuIFRoZXNlIGNvZGVzIG11c3QgKi8KKyAgT1BfVFlQRU1JTlBMVVMsICAgIC8qIDg4IGJlIGluIGV4YWN0bHkgdGhlIHNhbWUgb3JkZXIgYXMgdGhvc2UgYWJvdmUuICovCisgIE9QX1RZUEVRVUVSWSwgICAgICAvKiA4OSAqLworICBPUF9UWVBFTUlOUVVFUlksICAgLyogOTAgKi8KKworICBPUF9UWVBFVVBUTywgICAgICAgLyogOTEgRnJvbSAwIHRvIG4gbWF0Y2hlcyAqLworICBPUF9UWVBFTUlOVVBUTywgICAgLyogOTIgKi8KKyAgT1BfVFlQRUVYQUNULCAgICAgIC8qIDkzIEV4YWN0bHkgbiBtYXRjaGVzICovCisKKyAgT1BfVFlQRVBPU1NUQVIsICAgIC8qIDk0IFBvc3Nlc3NpZmllZCB2ZXJzaW9ucyAqLworICBPUF9UWVBFUE9TUExVUywgICAgLyogOTUgKi8KKyAgT1BfVFlQRVBPU1FVRVJZLCAgIC8qIDk2ICovCisgIE9QX1RZUEVQT1NVUFRPLCAgICAvKiA5NyAqLworCisgIC8qIFRoZXNlIGFyZSB1c2VkIGZvciBjaGFyYWN0ZXIgY2xhc3NlcyBhbmQgYmFjayByZWZlcmVuY2VzOyBvbmx5IHRoZQorICBmaXJzdCBzaXggYXJlIHRoZSBzYW1lIGFzIHRoZSBzZXRzIGFib3ZlLiAqLworCisgIE9QX0NSU1RBUiwgICAgICAgICAvKiA5OCBUaGUgbWF4aW1pemluZyBhbmQgbWluaW1pemluZyB2ZXJzaW9ucyBvZiAqLworICBPUF9DUk1JTlNUQVIsICAgICAgLyogOTkgYWxsIHRoZXNlIG9wY29kZXMgbXVzdCBjb21lIGluIHBhaXJzLCB3aXRoICovCisgIE9QX0NSUExVUywgICAgICAgICAvKiAxMDAgdGhlIG1pbmltaXppbmcgb25lIHNlY29uZC4gVGhlc2UgY29kZXMgbXVzdCAqLworICBPUF9DUk1JTlBMVVMsICAgICAgLyogMTAxIGJlIGluIGV4YWN0bHkgdGhlIHNhbWUgb3JkZXIgYXMgdGhvc2UgYWJvdmUuICovCisgIE9QX0NSUVVFUlksICAgICAgICAvKiAxMDIgKi8KKyAgT1BfQ1JNSU5RVUVSWSwgICAgIC8qIDEwMyAqLworCisgIE9QX0NSUkFOR0UsICAgICAgICAvKiAxMDQgVGhlc2UgYXJlIGRpZmZlcmVudCB0byB0aGUgdGhyZWUgc2V0cyBhYm92ZS4gKi8KKyAgT1BfQ1JNSU5SQU5HRSwgICAgIC8qIDEwNSAqLworCisgIE9QX0NSUE9TU1RBUiwgICAgICAvKiAxMDYgUG9zc2Vzc2lmaWVkIHZlcnNpb25zICovCisgIE9QX0NSUE9TUExVUywgICAgICAvKiAxMDcgKi8KKyAgT1BfQ1JQT1NRVUVSWSwgICAgIC8qIDEwOCAqLworICBPUF9DUlBPU1JBTkdFLCAgICAgLyogMTA5ICovCisKKyAgLyogRW5kIG9mIHF1YW50aWZpZXIgb3Bjb2RlcyAqLworCisgIE9QX0NMQVNTLCAgICAgICAgICAvKiAxMTAgTWF0Y2ggYSBjaGFyYWN0ZXIgY2xhc3MsIGNoYXJzIDwgMjU2IG9ubHkgKi8KKyAgT1BfTkNMQVNTLCAgICAgICAgIC8qIDExMSBTYW1lLCBidXQgdGhlIGJpdG1hcCB3YXMgY3JlYXRlZCBmcm9tIGEgbmVnYXRpdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIC0gdGhlIGRpZmZlcmVuY2UgaXMgcmVsZXZhbnQgb25seSB3aGVuIGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlciA+IDI1NSBpcyBlbmNvdW50ZXJlZC4gKi8KKyAgT1BfWENMQVNTLCAgICAgICAgIC8qIDExMiBFeHRlbmRlZCBjbGFzcyBmb3IgaGFuZGxpbmcgPiAyNTUgY2hhcnMgd2l0aGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MuIFRoaXMgZG9lcyBib3RoIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZS4gKi8KKyAgT1BfUkVGLCAgICAgICAgICAgIC8qIDExMyBNYXRjaCBhIGJhY2sgcmVmZXJlbmNlLCBjYXNlZnVsbHkgKi8KKyAgT1BfUkVGSSwgICAgICAgICAgIC8qIDExNCBNYXRjaCBhIGJhY2sgcmVmZXJlbmNlLCBjYXNlbGVzc2x5ICovCisgIE9QX0ROUkVGLCAgICAgICAgICAvKiAxMTUgTWF0Y2ggYSBkdXBsaWNhdGUgbmFtZSBiYWNrcmVmLCBjYXNlZnVsbHkgKi8KKyAgT1BfRE5SRUZJLCAgICAgICAgIC8qIDExNiBNYXRjaCBhIGR1cGxpY2F0ZSBuYW1lIGJhY2tyZWYsIGNhc2VsZXNzbHkgKi8KKyAgT1BfUkVDVVJTRSwgICAgICAgIC8qIDExNyBNYXRjaCBhIG51bWJlcmVkIHN1YnBhdHRlcm4gKHBvc3NpYmx5IHJlY3Vyc2l2ZSkgKi8KKyAgT1BfQ0FMTE9VVCwgICAgICAgIC8qIDExOCBDYWxsIG91dCB0byBleHRlcm5hbCBmdW5jdGlvbiBpZiBwcm92aWRlZCAqLworICBPUF9DQUxMT1VUX1NUUiwgICAgLyogMTE5IENhbGwgb3V0IHdpdGggc3RyaW5nIGFyZ3VtZW50ICovCisKKyAgT1BfQUxULCAgICAgICAgICAgIC8qIDEyMCBTdGFydCBvZiBhbHRlcm5hdGlvbiAqLworICBPUF9LRVQsICAgICAgICAgICAgLyogMTIxIEVuZCBvZiBncm91cCB0aGF0IGRvZXNuJ3QgaGF2ZSBhbiB1bmJvdW5kZWQgcmVwZWF0ICovCisgIE9QX0tFVFJNQVgsICAgICAgICAvKiAxMjIgVGhlc2UgdHdvIG11c3QgcmVtYWluIHRvZ2V0aGVyIGFuZCBpbiB0aGlzICovCisgIE9QX0tFVFJNSU4sICAgICAgICAvKiAxMjMgb3JkZXIuIFRoZXkgYXJlIGZvciBncm91cHMgdGhlIHJlcGVhdCBmb3IgZXZlci4gKi8KKyAgT1BfS0VUUlBPUywgICAgICAgIC8qIDEyNCBQb3NzZXNzaXZlIHVubGltaXRlZCByZXBlYXQuICovCisKKyAgLyogVGhlIGFzc2VydGlvbnMgbXVzdCBjb21lIGJlZm9yZSBCUkEsIENCUkEsIE9OQ0UsIGFuZCBDT05ELCBhbmQgdGhlIGZvdXIKKyAgYXNzZXJ0cyBtdXN0IHJlbWFpbiBpbiBvcmRlci4gKi8KKworICBPUF9SRVZFUlNFLCAgICAgICAgLyogMTI1IE1vdmUgcG9pbnRlciBiYWNrIC0gdXNlZCBpbiBsb29rYmVoaW5kIGFzc2VydGlvbnMgKi8KKyAgT1BfQVNTRVJULCAgICAgICAgIC8qIDEyNiBQb3NpdGl2ZSBsb29rYWhlYWQgKi8KKyAgT1BfQVNTRVJUX05PVCwgICAgIC8qIDEyNyBOZWdhdGl2ZSBsb29rYWhlYWQgKi8KKyAgT1BfQVNTRVJUQkFDSywgICAgIC8qIDEyOCBQb3NpdGl2ZSBsb29rYmVoaW5kICovCisgIE9QX0FTU0VSVEJBQ0tfTk9ULCAvKiAxMjkgTmVnYXRpdmUgbG9va2JlaGluZCAqLworCisgIC8qIE9OQ0UsIE9OQ0VfTkMsIEJSQSwgQlJBUE9TLCBDQlJBLCBDQlJBUE9TLCBhbmQgQ09ORCBtdXN0IGNvbWUgaW1tZWRpYXRlbHkKKyAgYWZ0ZXIgdGhlIGFzc2VydGlvbnMsIHdpdGggT05DRSBmaXJzdCwgYXMgdGhlcmUncyBhIHRlc3QgZm9yID49IE9OQ0UgZm9yIGEKKyAgc3VicGF0dGVybiB0aGF0IGlzbid0IGFuIGFzc2VydGlvbi4gVGhlIFBPUyB2ZXJzaW9ucyBtdXN0IGltbWVkaWF0ZWx5IGZvbGxvdworICB0aGUgbm9uLVBPUyB2ZXJzaW9ucyBpbiBlYWNoIGNhc2UuICovCisKKyAgT1BfT05DRSwgICAgICAgICAgIC8qIDEzMCBBdG9taWMgZ3JvdXAsIGNvbnRhaW5zIGNhcHR1cmVzICovCisgIE9QX09OQ0VfTkMsICAgICAgICAvKiAxMzEgQXRvbWljIGdyb3VwIGNvbnRhaW5pbmcgbm8gY2FwdHVyZXMgKi8KKyAgT1BfQlJBLCAgICAgICAgICAgIC8qIDEzMiBTdGFydCBvZiBub24tY2FwdHVyaW5nIGJyYWNrZXQgKi8KKyAgT1BfQlJBUE9TLCAgICAgICAgIC8qIDEzMyBEaXR0bywgd2l0aCB1bmxpbWl0ZWQsIHBvc3Nlc3NpdmUgcmVwZWF0ICovCisgIE9QX0NCUkEsICAgICAgICAgICAvKiAxMzQgU3RhcnQgb2YgY2FwdHVyaW5nIGJyYWNrZXQgKi8KKyAgT1BfQ0JSQVBPUywgICAgICAgIC8qIDEzNSBEaXR0bywgd2l0aCB1bmxpbWl0ZWQsIHBvc3Nlc3NpdmUgcmVwZWF0ICovCisgIE9QX0NPTkQsICAgICAgICAgICAvKiAxMzYgQ29uZGl0aW9uYWwgZ3JvdXAgKi8KKworICAvKiBUaGVzZSBmaXZlIG11c3QgZm9sbG93IHRoZSBwcmV2aW91cyBmaXZlLCBpbiB0aGUgc2FtZSBvcmRlci4gVGhlcmUncyBhCisgIGNoZWNrIGZvciA+PSBTQlJBIHRvIGRpc3Rpbmd1aXNoIHRoZSB0d28gc2V0cy4gKi8KKworICBPUF9TQlJBLCAgICAgICAgICAgLyogMTM3IFN0YXJ0IG9mIG5vbi1jYXB0dXJpbmcgYnJhY2tldCwgY2hlY2sgZW1wdHkgICovCisgIE9QX1NCUkFQT1MsICAgICAgICAvKiAxMzggRGl0dG8sIHdpdGggdW5saW1pdGVkLCBwb3NzZXNzaXZlIHJlcGVhdCAqLworICBPUF9TQ0JSQSwgICAgICAgICAgLyogMTM5IFN0YXJ0IG9mIGNhcHR1cmluZyBicmFja2V0LCBjaGVjayBlbXB0eSAqLworICBPUF9TQ0JSQVBPUywgICAgICAgLyogMTQwIERpdHRvLCB3aXRoIHVubGltaXRlZCwgcG9zc2Vzc2l2ZSByZXBlYXQgKi8KKyAgT1BfU0NPTkQsICAgICAgICAgIC8qIDE0MSBDb25kaXRpb25hbCBncm91cCwgY2hlY2sgZW1wdHkgKi8KKworICAvKiBUaGUgbmV4dCB0d28gcGFpcnMgbXVzdCAocmVzcGVjdGl2ZWx5KSBiZSBrZXB0IHRvZ2V0aGVyLiAqLworCisgIE9QX0NSRUYsICAgICAgICAgICAvKiAxNDIgVXNlZCB0byBob2xkIGEgY2FwdHVyZSBudW1iZXIgYXMgY29uZGl0aW9uICovCisgIE9QX0ROQ1JFRiwgICAgICAgICAvKiAxNDMgVXNlZCB0byBwb2ludCB0byBkdXBsaWNhdGUgbmFtZXMgYXMgYSBjb25kaXRpb24gKi8KKyAgT1BfUlJFRiwgICAgICAgICAgIC8qIDE0NCBVc2VkIHRvIGhvbGQgYSByZWN1cnNpb24gbnVtYmVyIGFzIGNvbmRpdGlvbiAqLworICBPUF9ETlJSRUYsICAgICAgICAgLyogMTQ1IFVzZWQgdG8gcG9pbnQgdG8gZHVwbGljYXRlIG5hbWVzIGFzIGEgY29uZGl0aW9uICovCisgIE9QX0ZBTFNFLCAgICAgICAgICAvKiAxNDYgQWx3YXlzIGZhbHNlICh1c2VkIGJ5IERFRklORSBhbmQgVkVSU0lPTikgKi8KKyAgT1BfVFJVRSwgICAgICAgICAgIC8qIDE0NyBBbHdheXMgdHJ1ZSAodXNlZCBieSBWRVJTSU9OKSAqLworCisgIE9QX0JSQVpFUk8sICAgICAgICAvKiAxNDggVGhlc2UgdHdvIG11c3QgcmVtYWluIHRvZ2V0aGVyIGFuZCBpbiB0aGlzICovCisgIE9QX0JSQU1JTlpFUk8sICAgICAvKiAxNDkgb3JkZXIuICovCisgIE9QX0JSQVBPU1pFUk8sICAgICAvKiAxNTAgKi8KKworICAvKiBUaGVzZSBhcmUgYmFja3RyYWNraW5nIGNvbnRyb2wgdmVyYnMgKi8KKworICBPUF9NQVJLLCAgICAgICAgICAgLyogMTUxIGFsd2F5cyBoYXMgYW4gYXJndW1lbnQgKi8KKyAgT1BfUFJVTkUsICAgICAgICAgIC8qIDE1MiAqLworICBPUF9QUlVORV9BUkcsICAgICAgLyogMTUzIHNhbWUsIGJ1dCB3aXRoIGFyZ3VtZW50ICovCisgIE9QX1NLSVAsICAgICAgICAgICAvKiAxNTQgKi8KKyAgT1BfU0tJUF9BUkcsICAgICAgIC8qIDE1NSBzYW1lLCBidXQgd2l0aCBhcmd1bWVudCAqLworICBPUF9USEVOLCAgICAgICAgICAgLyogMTU2ICovCisgIE9QX1RIRU5fQVJHLCAgICAgICAvKiAxNTcgc2FtZSwgYnV0IHdpdGggYXJndW1lbnQgKi8KKyAgT1BfQ09NTUlULCAgICAgICAgIC8qIDE1OCAqLworCisgIC8qIFRoZXNlIGFyZSBmb3JjZWQgZmFpbHVyZSBhbmQgc3VjY2VzcyB2ZXJicyAqLworCisgIE9QX0ZBSUwsICAgICAgICAgICAvKiAxNTkgKi8KKyAgT1BfQUNDRVBULCAgICAgICAgIC8qIDE2MCAqLworICBPUF9BU1NFUlRfQUNDRVBULCAgLyogMTYxIFVzZWQgaW5zaWRlIGFzc2VydGlvbnMgKi8KKyAgT1BfQ0xPU0UsICAgICAgICAgIC8qIDE2MiBVc2VkIGJlZm9yZSBPUF9BQ0NFUFQgdG8gY2xvc2Ugb3BlbiBjYXB0dXJlcyAqLworCisgIC8qIFRoaXMgaXMgdXNlZCB0byBza2lwIGEgc3VicGF0dGVybiB3aXRoIGEgezB9IHF1YW50aWZpZXIgKi8KKworICBPUF9TS0lQWkVSTywgICAgICAgLyogMTYzICovCisKKyAgLyogVGhpcyBpcyB1c2VkIHRvIGlkZW50aWZ5IGEgREVGSU5FIGdyb3VwIGR1cmluZyBjb21waWxhdGlvbiBzbyB0aGF0IGl0IGNhbgorICBiZSBjaGVja2VkIGZvciBoYXZpbmcgb25seSBvbmUgYnJhbmNoLiBJdCBpcyBjaGFuZ2VkIHRvIE9QX0ZBTFNFIGJlZm9yZQorICBjb21waWxhdGlvbiBmaW5pc2hlcy4gKi8KKworICBPUF9ERUZJTkUsICAgICAgICAgLyogMTY0ICovCisKKyAgLyogVGhpcyBpcyBub3QgYW4gb3Bjb2RlLCBidXQgaXMgdXNlZCB0byBjaGVjayB0aGF0IHRhYmxlcyBpbmRleGVkIGJ5IG9wY29kZQorICBhcmUgdGhlIGNvcnJlY3QgbGVuZ3RoLCBpbiBvcmRlciB0byBjYXRjaCB1cGRhdGluZyBlcnJvcnMgLSB0aGVyZSBoYXZlIGJlZW4KKyAgc29tZSBpbiB0aGUgcGFzdC4gKi8KKworICBPUF9UQUJMRV9MRU5HVEgKKworfTsKKworLyogKioqIE5PVEUgTk9URSBOT1RFICoqKiBXaGVuZXZlciB0aGUgbGlzdCBhYm92ZSBpcyB1cGRhdGVkLCB0aGUgdHdvIG1hY3JvCitkZWZpbml0aW9ucyB0aGF0IGZvbGxvdyBtdXN0IGFsc28gYmUgdXBkYXRlZCB0byBtYXRjaC4gVGhlcmUgYXJlIGFsc28gdGFibGVzCitjYWxsZWQgIm9wY29kZV9wb3NzZXNzaWZ5IiBpbiBwY3JlMl9jb21waWxlLmMgYW5kICJjb3B0YWJsZSIgYW5kICJwb3B0YWJsZSIgaW4KK3BjcmUyX2RmYV9leGVjLmMgdGhhdCBtdXN0IGJlIHVwZGF0ZWQuICovCisKKworLyogVGhpcyBtYWNybyBkZWZpbmVzIHRleHR1YWwgbmFtZXMgZm9yIGFsbCB0aGUgb3Bjb2Rlcy4gVGhlc2UgYXJlIHVzZWQgb25seQorZm9yIGRlYnVnZ2luZywgYW5kIHNvbWUgb2YgdGhlbSBhcmUgb25seSBwYXJ0aWFsIG5hbWVzLiBUaGUgbWFjcm8gaXMgcmVmZXJlbmNlZAorb25seSBpbiBwY3JlMl9wcmludGludC5jLCB3aGljaCBmaWxscyBvdXQgdGhlIGZ1bGwgbmFtZXMgaW4gbWFueSBjYXNlcyAoYW5kIGluCitzb21lIGNhc2VzIGRvZXNuJ3QgYWN0dWFsbHkgdXNlIHRoZXNlIG5hbWVzIGF0IGFsbCkuICovCisKKyNkZWZpbmUgT1BfTkFNRV9MSVNUIFwKKyAgIkVuZCIsICJcXEEiLCAiXFxHIiwgIlxcSyIsICJcXEIiLCAiXFxiIiwgIlxcRCIsICJcXGQiLCAgICAgICAgIFwKKyAgIlxcUyIsICJcXHMiLCAiXFxXIiwgIlxcdyIsICJBbnkiLCAiQWxsQW55IiwgIkFueWJ5dGUiLCAgICAgICAgIFwKKyAgIm5vdHByb3AiLCAicHJvcCIsICJcXFIiLCAiXFxIIiwgIlxcaCIsICJcXFYiLCAiXFx2IiwgICAgICAgICAgIFwKKyAgImV4dHVuaSIsICAiXFxaIiwgIlxceiIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIiQiLCAiJCIsICJeIiwgIl4iLCAiY2hhciIsICJjaGFyaSIsICJub3QiLCAibm90aSIsICAgICAgICAgICAgIFwKKyAgIioiLCAiKj8iLCAiKyIsICIrPyIsICI/IiwgIj8/IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgInsiLCAieyIsICJ7IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIiorIiwiKysiLCAiPysiLCAieyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIioiLCAiKj8iLCAiKyIsICIrPyIsICI/IiwgIj8/IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgInsiLCAieyIsICJ7IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIiorIiwiKysiLCAiPysiLCAieyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIioiLCAiKj8iLCAiKyIsICIrPyIsICI/IiwgIj8/IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgInsiLCAieyIsICJ7IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIiorIiwiKysiLCAiPysiLCAieyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIioiLCAiKj8iLCAiKyIsICIrPyIsICI/IiwgIj8/IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgInsiLCAieyIsICJ7IiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIiorIiwiKysiLCAiPysiLCAieyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIioiLCAiKj8iLCAiKyIsICIrPyIsICI/IiwgIj8/IiwgInsiLCAieyIsICJ7IiwgICAgICAgICAgICAgICAgIFwKKyAgIiorIiwiKysiLCAiPysiLCAieyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIioiLCAiKj8iLCAiKyIsICIrPyIsICI/IiwgIj8/IiwgInsiLCAieyIsICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIiorIiwiKysiLCAiPysiLCAieyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgImNsYXNzIiwgIm5jbGFzcyIsICJ4Y2xhc3MiLCAiUmVmIiwgIlJlZmkiLCAiRG5SZWYiLCAiRG5SZWZpIiwgIFwKKyAgIlJlY3Vyc2UiLCAiQ2FsbG91dCIsICJDYWxsb3V0U3RyIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIkFsdCIsICJLZXQiLCAiS2V0Um1heCIsICJLZXRSbWluIiwgIktldFJwb3MiLCAgICAgICAgICAgICAgICAgIFwKKyAgIlJldmVyc2UiLCAiQXNzZXJ0IiwgIkFzc2VydCBub3QiLCAiQXNzZXJ0QiIsICJBc3NlcnRCIG5vdCIsICAgIFwKKyAgIk9uY2UiLCAiT25jZV9OQyIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIkJyYSIsICJCcmFQb3MiLCAiQ0JyYSIsICJDQnJhUG9zIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIkNvbmQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIlNCcmEiLCAiU0JyYVBvcyIsICJTQ0JyYSIsICJTQ0JyYVBvcyIsICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIlNDb25kIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIkNvbmQgcmVmIiwgIkNvbmQgZG5yZWYiLCAiQ29uZCByZWMiLCAiQ29uZCBkbnJlYyIsICAgICAgICAgICAgIFwKKyAgIkNvbmQgZmFsc2UiLCAiQ29uZCB0cnVlIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIkJyYXplcm8iLCAiQnJhbWluemVybyIsICJCcmFwb3N6ZXJvIiwgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIipNQVJLIiwgIipQUlVORSIsICIqUFJVTkUiLCAiKlNLSVAiLCAiKlNLSVAiLCAgICAgICAgICAgICAgICAgIFwKKyAgIipUSEVOIiwgIipUSEVOIiwgIipDT01NSVQiLCAiKkZBSUwiLCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIipBQ0NFUFQiLCAiKkFTU0VSVF9BQ0NFUFQiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgIkNsb3NlIiwgIlNraXAgemVybyIsICJEZWZpbmUiCisKKworLyogVGhpcyBtYWNybyBkZWZpbmVzIHRoZSBsZW5ndGggb2YgZml4ZWQgbGVuZ3RoIG9wZXJhdGlvbnMgaW4gdGhlIGNvbXBpbGVkCityZWdleC4gVGhlIGxlbmd0aHMgYXJlIHVzZWQgd2hlbiBzZWFyY2hpbmcgZm9yIHNwZWNpZmljIHRoaW5ncywgYW5kIGFsc28gaW4gdGhlCitkZWJ1Z2dpbmcgcHJpbnRpbmcgb2YgYSBjb21waWxlZCByZWdleC4gV2UgdXNlIGEgbWFjcm8gc28gdGhhdCBpdCBjYW4gYmUKK2RlZmluZWQgY2xvc2UgdG8gdGhlIGRlZmluaXRpb25zIG9mIHRoZSBvcGNvZGVzIHRoZW1zZWx2ZXMuCisKK0FzIHRoaW5ncyBoYXZlIGJlZW4gZXh0ZW5kZWQsIHNvbWUgb2YgdGhlc2UgYXJlIG5vIGxvbmdlciBmaXhlZCBsZW50aHMsIGJ1dCBhcmUKK21pbmltYSBpbnN0ZWFkLiBGb3IgZXhhbXBsZSwgdGhlIGxlbmd0aCBvZiBhIHNpbmdsZS1jaGFyYWN0ZXIgcmVwZWF0IG1heSB2YXJ5CitpbiBVVEYtOCBtb2RlLiBUaGUgY29kZSB0aGF0IHVzZXMgdGhpcyB0YWJsZSBtdXN0IGtub3cgYWJvdXQgc3VjaCB0aGluZ3MuICovCisKKyNkZWZpbmUgT1BfTEVOR1RIUyBcCisgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAgICAvKiBcQSwgXEcsIFxLLCBcQiwgXGIgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDEsIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAvKiBcRCwgXGQsIFxTLCBccywgXFcsIFx3ICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAvKiBBbnksIEFsbEFueSwgQW55Ynl0ZSAgICAgICAgICAgICAgICAgICAqLyBcCisgIDMsIDMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcUCwgXHAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAgICAvKiBcUiwgXEgsIFxoLCBcViwgXHYgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBcWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDEsIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAvKiBcWiwgXHosICQsICRNIF4sIF5NICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyICAtIHRoZSBtaW5pbXVtIGxlbmd0aCAgICAgICAgICAgICAqLyBcCisgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaGFyaSAgLSB0aGUgbWluaW11bSBsZW5ndGggICAgICAgICAgICAqLyBcCisgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3RpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIC8qIFBvc2l0aXZlIHNpbmdsZS1jaGFyIHJlcGVhdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqIFRoZXNlIGFyZSAqLyBcCisgIDIsIDIsIDIsIDIsIDIsIDIsICAgICAgICAgICAgICAvKiAqLCAqPywgKywgKz8sID8sID8/ICAgICAgICoqIG1pbmltYSBpbiAqLyBcCisgIDIrSU1NMl9TSVpFLCAyK0lNTTJfU0laRSwgICAgICAvKiB1cHRvLCBtaW51cHRvICAgICAgICAgICAgICoqIG1vZGUgICAgICAqLyBcCisgIDIrSU1NMl9TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBleGFjdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIsIDIsIDIsIDIrSU1NMl9TSVpFLCAgICAgICAgICAvKiAqKywgKyssID8rLCB1cHRvKyAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIsIDIsIDIsIDIsIDIsIDIsICAgICAgICAgICAgICAvKiAqSSwgKj9JLCArSSwgKz9JLCA/SSwgPz9JICoqIFVURi04ICAgICAqLyBcCisgIDIrSU1NMl9TSVpFLCAyK0lNTTJfU0laRSwgICAgICAvKiB1cHRvIEksIG1pbnVwdG8gSSAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIrSU1NMl9TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBleGFjdCBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIsIDIsIDIsIDIrSU1NMl9TSVpFLCAgICAgICAgICAvKiAqK0ksICsrSSwgPytJLCB1cHRvK0kgICAgICAgICAgICAgICAgICAqLyBcCisgIC8qIE5lZ2F0aXZlIHNpbmdsZS1jaGFyIHJlcGVhdHMgLSBvbmx5IGZvciBjaGFycyA8IDI1NiAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIsIDIsIDIsIDIsIDIsIDIsICAgICAgICAgICAgICAvKiBOT1QgKiwgKj8sICssICs/LCA/LCA/PyAgICAgICAgICAgICAgICAqLyBcCisgIDIrSU1NMl9TSVpFLCAyK0lNTTJfU0laRSwgICAgICAvKiBOT1QgdXB0bywgbWludXB0byAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIrSU1NMl9TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBOT1QgZXhhY3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIsIDIsIDIsIDIrSU1NMl9TSVpFLCAgICAgICAgICAvKiBQb3NzZXNzaXZlIE5PVCAqLCArLCA/LCB1cHRvICAgICAgICAgICAqLyBcCisgIDIsIDIsIDIsIDIsIDIsIDIsICAgICAgICAgICAgICAvKiBOT1QgKkksICo/SSwgK0ksICs/SSwgP0ksID8/SSAgICAgICAgICAqLyBcCisgIDIrSU1NMl9TSVpFLCAyK0lNTTJfU0laRSwgICAgICAvKiBOT1QgdXB0byBJLCBtaW51cHRvIEkgICAgICAgICAgICAgICAgICAqLyBcCisgIDIrSU1NMl9TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBOT1QgZXhhY3QgSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIsIDIsIDIsIDIrSU1NMl9TSVpFLCAgICAgICAgICAvKiBQb3NzZXNzaXZlIE5PVCAqSSwgK0ksID9JLCB1cHRvIEkgICAgICAqLyBcCisgIC8qIFBvc2l0aXZlIHR5cGUgcmVwZWF0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIsIDIsIDIsIDIsIDIsIDIsICAgICAgICAgICAgICAvKiBUeXBlICosICo/LCArLCArPywgPywgPz8gICAgICAgICAgICAgICAqLyBcCisgIDIrSU1NMl9TSVpFLCAyK0lNTTJfU0laRSwgICAgICAvKiBUeXBlIHVwdG8sIG1pbnVwdG8gICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIrSU1NMl9TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGV4YWN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDIsIDIsIDIsIDIrSU1NMl9TSVpFLCAgICAgICAgICAvKiBQb3NzZXNzaXZlICorLCArKywgPyssIHVwdG8rICAgICAgICAgICAqLyBcCisgIC8qIENoYXJhY3RlciBjbGFzcyAmIHJlZiByZXBlYXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDEsIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAvKiAqLCAqPywgKywgKz8sID8sID8/ICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErMipJTU0yX1NJWkUsIDErMipJTU0yX1NJWkUsICAvKiBDUlJBTkdFLCBDUk1JTlJBTkdFICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDEsIDEsIDErMipJTU0yX1NJWkUsICAgICAgICAvKiBQb3NzZXNzaXZlICorLCArKywgPyssIENSUE9TUkFOR0UgICAgICAqLyBcCisgIDErKDMyL3NpemVvZihQQ1JFMl9VQ0hBUikpLCAgICAvKiBDTEFTUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErKDMyL3NpemVvZihQQ1JFMl9VQ0hBUikpLCAgICAvKiBOQ0xBU1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYQ0xBU1MgLSB2YXJpYWJsZSBsZW5ndGggICAgICAgICAgICAgICAqLyBcCisgIDErSU1NMl9TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErSU1NMl9TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBSRUZJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErMipJTU0yX1NJWkUsICAgICAgICAgICAgICAgICAvKiBETlJFRiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErMipJTU0yX1NJWkUsICAgICAgICAgICAgICAgICAvKiBETlJFRkkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBSRUNVUlNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErMipMSU5LX1NJWkUrMSwgICAgICAgICAgICAgICAvKiBDQUxMT1VUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDQUxMT1VUX1NUUiAtIHZhcmlhYmxlIGxlbmd0aCAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBBbHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBLZXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBLZXRSbWF4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBLZXRSbWluICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBLZXRScG9zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBSZXZlcnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgbm90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgYmVoaW5kICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBBc3NlcnQgYmVoaW5kIG5vdCAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBPTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBPTkNFX05DICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBCUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBCUkFQT1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFK0lNTTJfU0laRSwgICAgICAgICAvKiBDQlJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFK0lNTTJfU0laRSwgICAgICAgICAvKiBDQlJBUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBDT05EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBTQlJBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBTQlJBUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFK0lNTTJfU0laRSwgICAgICAgICAvKiBTQ0JSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFK0lNTTJfU0laRSwgICAgICAgICAvKiBTQ0JSQVBPUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErTElOS19TSVpFLCAgICAgICAgICAgICAgICAgICAvKiBTQ09ORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErSU1NMl9TSVpFLCAxKzIqSU1NMl9TSVpFLCAgICAvKiBDUkVGLCBETkNSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDErSU1NMl9TSVpFLCAxKzIqSU1NMl9TSVpFLCAgICAvKiBSUkVGLCBETlJSRUYgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGQUxTRSwgVFJVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDEsIDEsICAgICAgICAgICAgICAgICAgICAgICAvKiBCUkFaRVJPLCBCUkFNSU5aRVJPLCBCUkFQT1NaRVJPICAgICAgICAqLyBcCisgIDMsIDEsIDMsICAgICAgICAgICAgICAgICAgICAgICAvKiBNQVJLLCBQUlVORSwgUFJVTkVfQVJHICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTS0lQLCBTS0lQX0FSRyAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDMsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUSEVOLCBUSEVOX0FSRyAgICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEsIDEsIDEsIDEsICAgICAgICAgICAgICAgICAgICAvKiBDT01NSVQsIEZBSUwsIEFDQ0VQVCwgQVNTRVJUX0FDQ0VQVCAgICAqLyBcCisgIDErSU1NMl9TSVpFLCAxLCAgICAgICAgICAgICAgICAvKiBDTE9TRSwgU0tJUFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAqLyBcCisgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBERUZJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBBIG1hZ2ljIHZhbHVlIGZvciBPUF9SUkVGIHRvIGluZGljYXRlIHRoZSAiYW55IHJlY3Vyc2lvbiIgY29uZGl0aW9uLiAqLworCisjZGVmaW5lIFJSRUZfQU5ZICAweGZmZmYKKworCisvKiAtLS0tLS0tLS0tIFByaXZhdGUgc3RydWN0dXJlcyB0aGF0IGFyZSBtb2RlLWluZGVwZW5kZW50LiAtLS0tLS0tLS0tICovCisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGRhdGEgZm9yIGN1c3RvbSBtZW1vcnkgbWFuYWdlbWVudC4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgcGNyZTJfbWVtY3RsIHsKKyAgdm9pZCAqICAgICgqbWFsbG9jKShzaXplX3QsIHZvaWQgKik7CisgIHZvaWQgICAgICAoKmZyZWUpKHZvaWQgKiwgdm9pZCAqKTsKKyAgdm9pZCAgICAgICptZW1vcnlfZGF0YTsKK30gcGNyZTJfbWVtY3RsOworCisvKiBTdHJ1Y3R1cmUgZm9yIGJ1aWxkaW5nIGEgY2hhaW4gb2Ygb3BlbiBjYXB0dXJpbmcgc3VicGF0dGVybnMgZHVyaW5nCitjb21waWxpbmcsIHNvIHRoYXQgaW5zdHJ1Y3Rpb25zIHRvIGNsb3NlIHRoZW0gY2FuIGJlIGNvbXBpbGVkIHdoZW4gKCpBQ0NFUFQpIGlzCitlbmNvdW50ZXJlZC4gVGhpcyBpcyBhbHNvIHVzZWQgdG8gaWRlbnRpZnkgc3VicGF0dGVybnMgdGhhdCBjb250YWluIHJlY3Vyc2l2ZQorYmFjayByZWZlcmVuY2VzIHRvIHRoZW1zZWx2ZXMsIHNvIHRoYXQgdGhleSBjYW4gYmUgbWFkZSBhdG9taWMuICovCisKK3R5cGVkZWYgc3RydWN0IG9wZW5fY2FwaXRlbSB7CisgIHN0cnVjdCBvcGVuX2NhcGl0ZW0gKm5leHQ7ICAgIC8qIENoYWluIGxpbmsgKi8KKyAgdWludDE2X3QgbnVtYmVyOyAgICAgICAgICAgICAgLyogQ2FwdHVyZSBudW1iZXIgKi8KKyAgdWludDE2X3QgZmxhZzsgICAgICAgICAgICAgICAgLyogU2V0IFRSVUUgaWYgcmVjdXJzaXZlIGJhY2sgcmVmICovCit9IG9wZW5fY2FwaXRlbTsKKworLyogTGF5b3V0IG9mIHRoZSBVQ1AgdHlwZSB0YWJsZSB0aGF0IHRyYW5zbGF0ZXMgcHJvcGVydHkgbmFtZXMgaW50byB0eXBlcyBhbmQKK2NvZGVzLiBFYWNoIGVudHJ5IHVzZWQgdG8gcG9pbnQgZGlyZWN0bHkgdG8gYSBuYW1lLCBidXQgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YKK3JlbG9jYXRpb25zIGluIHNoYXJlZCBsaWJyYXJpZXMsIGl0IG5vdyBoYXMgYW4gb2Zmc2V0IGludG8gYSBzaW5nbGUgc3RyaW5nCitpbnN0ZWFkLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisgIHVpbnQxNl90IG5hbWVfb2Zmc2V0OworICB1aW50MTZfdCB0eXBlOworICB1aW50MTZfdCB2YWx1ZTsKK30gdWNwX3R5cGVfdGFibGU7CisKKy8qIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlIChVQ0QpIHJlY29yZCBmb3JtYXQgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICB1aW50OF90IHNjcmlwdDsgICAgIC8qIHVjcF9BcmFiaWMsIGV0Yy4gKi8KKyAgdWludDhfdCBjaGFydHlwZTsgICAvKiB1Y3BfQ2MsIGV0Yy4gKGdlbmVyYWwgY2F0ZWdvcmllcykgKi8KKyAgdWludDhfdCBnYnByb3A7ICAgICAvKiB1Y3BfZ2JDb250cm9sLCBldGMuIChncmFwaGVtZSBicmVhayBwcm9wZXJ0eSkgKi8KKyAgdWludDhfdCBjYXNlc2V0OyAgICAvKiBvZmZzZXQgdG8gbXVsdGljaGFyIG90aGVyIGNhc2VzIG9yIHplcm8gKi8KKyAgaW50MzJfdCBvdGhlcl9jYXNlOyAvKiBvZmZzZXQgdG8gb3RoZXIgY2FzZSwgb3IgemVybyBpZiBub25lICovCit9IHVjZF9yZWNvcmQ7CisKKy8qIFVDRCBhY2Nlc3MgbWFjcm9zICovCisKKyNkZWZpbmUgVUNEX0JMT0NLX1NJWkUgMTI4CisjZGVmaW5lIEdFVF9VQ0QoY2gpIChQUklWKHVjZF9yZWNvcmRzKSArIFwKKyAgICAgICAgUFJJVih1Y2Rfc3RhZ2UyKVtQUklWKHVjZF9zdGFnZTEpWyhpbnQpKGNoKSAvIFVDRF9CTE9DS19TSVpFXSAqIFwKKyAgICAgICAgVUNEX0JMT0NLX1NJWkUgKyAoaW50KShjaCkgJSBVQ0RfQkxPQ0tfU0laRV0pCisKKyNkZWZpbmUgVUNEX0NIQVJUWVBFKGNoKSAgICBHRVRfVUNEKGNoKS0+Y2hhcnR5cGUKKyNkZWZpbmUgVUNEX1NDUklQVChjaCkgICAgICBHRVRfVUNEKGNoKS0+c2NyaXB0CisjZGVmaW5lIFVDRF9DQVRFR09SWShjaCkgICAgUFJJVih1Y3BfZ2VudHlwZSlbVUNEX0NIQVJUWVBFKGNoKV0KKyNkZWZpbmUgVUNEX0dSQVBIQlJFQUsoY2gpICBHRVRfVUNEKGNoKS0+Z2Jwcm9wCisjZGVmaW5lIFVDRF9DQVNFU0VUKGNoKSAgICAgR0VUX1VDRChjaCktPmNhc2VzZXQKKyNkZWZpbmUgVUNEX09USEVSQ0FTRShjaCkgICAoKHVpbnQzMl90KSgoaW50KWNoICsgKGludCkoR0VUX1VDRChjaCktPm90aGVyX2Nhc2UpKSkKKworLyogSGVhZGVyIGZvciBzZXJpYWxpemVkIHBjcmUyIGNvZGVzLiAqLworCit0eXBlZGVmIHN0cnVjdCBwY3JlMl9zZXJpYWxpemVkX2RhdGEgeworICB1aW50MzJfdCBtYWdpYzsKKyAgdWludDMyX3QgdmVyc2lvbjsKKyAgdWludDMyX3QgY29uZmlnOworICBpbnQzMl90ICBudW1iZXJfb2ZfY29kZXM7Cit9IHBjcmUyX3NlcmlhbGl6ZWRfZGF0YTsKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIEl0ZW1zIHRoYXQgbmVlZCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogV2hlbiB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgcGNyZTJ0ZXN0LCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggaXMgZGVmaW5lZCBhcworMCwgc28gdGhlIGZvbGxvd2luZyBpdGVtcyBhcmUgb21pdHRlZC4gKi8KKworI2lmIGRlZmluZWQgUENSRTJfQ09ERV9VTklUX1dJRFRIICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSAwCisKKy8qIEVCQ0RJQyBpcyBzdXBwb3J0ZWQgb25seSBmb3IgdGhlIDgtYml0IGxpYnJhcnkuICovCisKKyNpZiBkZWZpbmVkIEVCQ0RJQyAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorI2Vycm9yIEVCQ0RJQyBpcyBub3Qgc3VwcG9ydGVkIGZvciB0aGUgMTYtYml0IG9yIDMyLWJpdCBsaWJyYXJpZXMKKyNlbmRpZgorCisvKiBUaGlzIGlzIHRoZSBsYXJnZXN0IG5vbi1VVEYgY29kZSBwb2ludC4gKi8KKworI2RlZmluZSBNQVhfTk9OX1VURl9DSEFSICgweGZmZmZmZmZmVSA+PiAoMzIgLSBQQ1JFMl9DT0RFX1VOSVRfV0lEVEgpKQorCisvKiBJbnRlcm5hbCBzaGFyZWQgZGF0YSB0YWJsZXMgYW5kIHZhcmlhYmxlcy4gVGhlc2UgYXJlIHVzZWQgYnkgbW9yZSB0aGFuIG9uZQorb2YgdGhlIGV4cG9ydGVkIHB1YmxpYyBmdW5jdGlvbnMuIFRoZXkgaGF2ZSB0byBiZSAiZXh0ZXJuYWwiIGluIHRoZSBDIHNlbnNlLAorYnV0IGFyZSBub3QgcGFydCBvZiB0aGUgUENSRTIgcHVibGljIEFQSS4gQWx0aG91Z2ggdGhlIGRhdGEgZm9yIHNvbWUgb2YgdGhlbSBpcworaWRlbnRpY2FsIGluIGFsbCBsaWJyYXJpZXMsIHRoZXkgbXVzdCBoYXZlIGRpZmZlcmVudCBuYW1lcyBzbyB0aGF0IG11bHRpcGxlCitsaWJyYXJpZXMgY2FuIGJlIHNpbXVsdGFuZW91c2x5IGxpbmtlZCB0byBhIHNpbmdsZSBhcHBsaWNhdGlvbi4gSG93ZXZlciwgVVRGLTgKK3RhYmxlcyBhcmUgbmVlZGVkIG9ubHkgd2hlbiBjb21waWxpbmcgdGhlIDgtYml0IGxpYnJhcnkuICovCisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorZXh0ZXJuIGNvbnN0IGludCAgICAgICAgICAgICAgUFJJVih1dGY4X3RhYmxlMSlbXTsKK2V4dGVybiBjb25zdCBpbnQgICAgICAgICAgICAgIFBSSVYodXRmOF90YWJsZTFfc2l6ZSk7CitleHRlcm4gY29uc3QgaW50ICAgICAgICAgICAgICBQUklWKHV0ZjhfdGFibGUyKVtdOworZXh0ZXJuIGNvbnN0IGludCAgICAgICAgICAgICAgUFJJVih1dGY4X3RhYmxlMylbXTsKK2V4dGVybiBjb25zdCB1aW50OF90ICAgICAgICAgIFBSSVYodXRmOF90YWJsZTQpW107CisjZW5kaWYKKworI2RlZmluZSBfcGNyZTJfT1BfbGVuZ3RocyAgICAgICAgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl9PUF9sZW5ndGhzXykKKyNkZWZpbmUgX3BjcmUyX2NhbGxvdXRfZW5kX2RlbGltcyAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfY2FsbG91dF9lbmRfZGVsaW1zXykKKyNkZWZpbmUgX3BjcmUyX2NhbGxvdXRfc3RhcnRfZGVsaW1zICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfY2FsbG91dF9zdGFydF9kZWxpbXNfKQorI2RlZmluZSBfcGNyZTJfZGVmYXVsdF9jb21waWxlX2NvbnRleHQgUENSRTJfU1VGRklYKF9wY3JlMl9kZWZhdWx0X2NvbXBpbGVfY29udGV4dF8pCisjZGVmaW5lIF9wY3JlMl9kZWZhdWx0X21hdGNoX2NvbnRleHQgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX2RlZmF1bHRfbWF0Y2hfY29udGV4dF8pCisjZGVmaW5lIF9wY3JlMl9kZWZhdWx0X3RhYmxlcyAgICAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX2RlZmF1bHRfdGFibGVzXykKKyNkZWZpbmUgX3BjcmUyX2hzcGFjZV9saXN0ICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfaHNwYWNlX2xpc3RfKQorI2RlZmluZSBfcGNyZTJfdnNwYWNlX2xpc3QgICAgICAgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl92c3BhY2VfbGlzdF8pCisjZGVmaW5lIF9wY3JlMl91Y2RfY2FzZWxlc3Nfc2V0cyAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX3VjZF9jYXNlbGVzc19zZXRzXykKKyNkZWZpbmUgX3BjcmUyX3VjZF9yZWNvcmRzICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfdWNkX3JlY29yZHNfKQorI2RlZmluZSBfcGNyZTJfdWNkX3N0YWdlMSAgICAgICAgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl91Y2Rfc3RhZ2UxXykKKyNkZWZpbmUgX3BjcmUyX3VjZF9zdGFnZTIgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfdWNkX3N0YWdlMl8pCisjZGVmaW5lIF9wY3JlMl91Y3BfZ2J0YWJsZSAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX3VjcF9nYnRhYmxlXykKKyNkZWZpbmUgX3BjcmUyX3VjcF9nZW50eXBlICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfdWNwX2dlbnR5cGVfKQorI2RlZmluZSBfcGNyZTJfdWNwX3R5cGVyYW5nZSAgICAgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl91Y3BfdHlwZXJhbmdlXykKKyNkZWZpbmUgX3BjcmUyX3VuaWNvZGVfdmVyc2lvbiAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfdW5pY29kZV92ZXJzaW9uXykKKyNkZWZpbmUgX3BjcmUyX3V0dCAgICAgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfdXR0XykKKyNkZWZpbmUgX3BjcmUyX3V0dF9uYW1lcyAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfdXR0X25hbWVzXykKKyNkZWZpbmUgX3BjcmUyX3V0dF9zaXplICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfdXR0X3NpemVfKQorCitleHRlcm4gY29uc3QgdWludDhfdCAgICAgICAgICAgICAgICAgICBQUklWKE9QX2xlbmd0aHMpW107CitleHRlcm4gY29uc3QgdWludDMyX3QgICAgICAgICAgICAgICAgICBQUklWKGNhbGxvdXRfZW5kX2RlbGltcylbXTsKK2V4dGVybiBjb25zdCB1aW50MzJfdCAgICAgICAgICAgICAgICAgIFBSSVYoY2FsbG91dF9zdGFydF9kZWxpbXMpW107CitleHRlcm4gY29uc3QgcGNyZTJfY29tcGlsZV9jb250ZXh0ICAgICBQUklWKGRlZmF1bHRfY29tcGlsZV9jb250ZXh0KTsKK2V4dGVybiBjb25zdCBwY3JlMl9tYXRjaF9jb250ZXh0ICAgICAgIFBSSVYoZGVmYXVsdF9tYXRjaF9jb250ZXh0KTsKK2V4dGVybiBjb25zdCB1aW50OF90ICAgICAgICAgICAgICAgICAgIFBSSVYoZGVmYXVsdF90YWJsZXMpW107CitleHRlcm4gY29uc3QgdWludDMyX3QgICAgICAgICAgICAgICAgICBQUklWKGhzcGFjZV9saXN0KVtdOworZXh0ZXJuIGNvbnN0IHVpbnQzMl90ICAgICAgICAgICAgICAgICAgUFJJVih2c3BhY2VfbGlzdClbXTsKK2V4dGVybiBjb25zdCB1aW50MzJfdCAgICAgICAgICAgICAgICAgIFBSSVYodWNkX2Nhc2VsZXNzX3NldHMpW107CitleHRlcm4gY29uc3QgdWNkX3JlY29yZCAgICAgICAgICAgICAgICBQUklWKHVjZF9yZWNvcmRzKVtdOworZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgUFJJVih1Y2Rfc3RhZ2UxKVtdOworZXh0ZXJuIGNvbnN0IHVpbnQxNl90ICAgICAgICAgICAgICAgICAgUFJJVih1Y2Rfc3RhZ2UyKVtdOworZXh0ZXJuIGNvbnN0IHVpbnQzMl90ICAgICAgICAgICAgICAgICAgUFJJVih1Y3BfZ2J0YWJsZSlbXTsKK2V4dGVybiBjb25zdCB1aW50MzJfdCAgICAgICAgICAgICAgICAgIFBSSVYodWNwX2dlbnR5cGUpW107CisjaWZkZWYgU1VQUE9SVF9KSVQKK2V4dGVybiBjb25zdCBpbnQgICAgICAgICAgICAgICAgICAgICAgIFBSSVYodWNwX3R5cGVyYW5nZSlbXTsKKyNlbmRpZgorZXh0ZXJuIGNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAqUFJJVih1bmljb2RlX3ZlcnNpb24pOworZXh0ZXJuIGNvbnN0IHVjcF90eXBlX3RhYmxlICAgICAgICAgICAgUFJJVih1dHQpW107CitleHRlcm4gY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICBQUklWKHV0dF9uYW1lcylbXTsKK2V4dGVybiBjb25zdCBzaXplX3QgICAgICAgICAgICAgICAgICAgIFBSSVYodXR0X3NpemUpOworCisvKiBNb2RlLWRlcGVuZGVudCBtYWNyb3MgYW5kIGhpZGRlbiBhbmQgcHJpdmF0ZSBzdHJ1Y3R1cmVzIGFyZSBkZWZpbmVkIGluIGEKK3NlcGFyYXRlIGZpbGUgc28gdGhhdCBwY3JlMnRlc3QgY2FuIGluY2x1ZGUgdGhlbSBhdCBhbGwgc3VwcG9ydGVkIHdpZHRocy4gV2hlbgorY29tcGlsaW5nIHRoZSBsaWJyYXJ5LCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggd2lsbCBiZSBkZWZpbmVkLCBhbmQgd2UgY2FuCitpbmNsdWRlIHRoZW0gYXQgdGhlIGFwcHJvcHJpYXRlIHdpZHRoLCBhZnRlciBzZXR0aW5nIHVwIHN1ZmZpeCBtYWNyb3MgZm9yIHRoZQorcHJpdmF0ZSBzdHJ1Y3R1cmVzLiAqLworCisjZGVmaW5lIGJyYW5jaF9jaGFpbiAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKGJyYW5jaF9jaGFpbl8pCisjZGVmaW5lIGNvbXBpbGVfYmxvY2sgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKGNvbXBpbGVfYmxvY2tfKQorI2RlZmluZSBkZmFfbWF0Y2hfYmxvY2sgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChkZmFfbWF0Y2hfYmxvY2tfKQorI2RlZmluZSBtYXRjaF9ibG9jayAgICAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChtYXRjaF9ibG9ja18pCisjZGVmaW5lIG5hbWVkX2dyb3VwICAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKG5hbWVkX2dyb3VwXykKKworI2luY2x1ZGUgInBjcmUyX2ludG1vZGVkZXAuaCIKKworLyogUHJpdmF0ZSAiZXh0ZXJuYWwiIGZ1bmN0aW9ucy4gVGhlc2UgYXJlIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQKK2Zyb20gbW9kdWxlcyBvdGhlciB0aGFuIHRoZSBvbmUgaW4gd2hpY2ggdGhleSBhcmUgZGVmaW5lZC4gVGhleSBoYXZlIHRvIGJlCisiZXh0ZXJuYWwiIGluIHRoZSBDIHNlbnNlLCBidXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQQ1JFIHB1YmxpYyBBUEkuIFRoZXkgYXJlCitub3QgcmVmZXJlbmNlZCBmcm9tIHBjcmUydGVzdCwgYW5kIG11c3Qgbm90IGJlIGRlZmluZWQgd2hlbiBubyBjb2RlIHVuaXQgd2lkdGgKK2lzIGF2YWlsYWJsZS4gKi8KKworI2RlZmluZSBfcGNyZTJfYXV0b19wb3NzZXNzaWZ5ICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfYXV0b19wb3NzZXNzaWZ5XykKKyNkZWZpbmUgX3BjcmUyX2NoZWNrX2VzY2FwZSAgICAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX2NoZWNrX2VzY2FwZV8pCisjZGVmaW5lIF9wY3JlMl9maW5kX2JyYWNrZXQgICAgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl9maW5kX2JyYWNrZXRfKQorI2RlZmluZSBfcGNyZTJfaXNfbmV3bGluZSAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfaXNfbmV3bGluZV8pCisjZGVmaW5lIF9wY3JlMl9qaXRfZnJlZV9yb2RhdGEgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl9qaXRfZnJlZV9yb2RhdGFfKQorI2RlZmluZSBfcGNyZTJfaml0X2ZyZWUgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfaml0X2ZyZWVfKQorI2RlZmluZSBfcGNyZTJfaml0X2dldF9zaXplICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfaml0X2dldF9zaXplXykKKyNkZWZpbmUgX3BjcmUyX2ppdF9nZXRfdGFyZ2V0ICAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX2ppdF9nZXRfdGFyZ2V0XykKKyNkZWZpbmUgX3BjcmUyX21lbWN0bF9tYWxsb2MgICAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX21lbWN0bF9tYWxsb2NfKQorI2RlZmluZSBfcGNyZTJfb3JkMnV0ZiAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfb3JkMnV0Zl8pCisjZGVmaW5lIF9wY3JlMl9zdHJjbXAgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl9zdHJjbXBfKQorI2RlZmluZSBfcGNyZTJfc3RyY21wX2M4ICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfc3RyY21wX2M4XykKKyNkZWZpbmUgX3BjcmUyX3N0cmNweV9jOCAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX3N0cmNweV9jOF8pCisjZGVmaW5lIF9wY3JlMl9zdHJsZW4gICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl9zdHJsZW5fKQorI2RlZmluZSBfcGNyZTJfc3RybmNtcCAgICAgICAgICAgICAgIFBDUkUyX1NVRkZJWChfcGNyZTJfc3RybmNtcF8pCisjZGVmaW5lIF9wY3JlMl9zdHJuY21wX2M4ICAgICAgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl9zdHJuY21wX2M4XykKKyNkZWZpbmUgX3BjcmUyX3N0dWR5ICAgICAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX3N0dWR5XykKKyNkZWZpbmUgX3BjcmUyX3ZhbGlkX3V0ZiAgICAgICAgICAgICBQQ1JFMl9TVUZGSVgoX3BjcmUyX3ZhbGlkX3V0Zl8pCisjZGVmaW5lIF9wY3JlMl93YXNfbmV3bGluZSAgICAgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl93YXNfbmV3bGluZV8pCisjZGVmaW5lIF9wY3JlMl94Y2xhc3MgICAgICAgICAgICAgICAgUENSRTJfU1VGRklYKF9wY3JlMl94Y2xhc3NfKQorCitleHRlcm4gaW50ICAgICAgICAgIF9wY3JlMl9hdXRvX3Bvc3Nlc3NpZnkoUENSRTJfVUNIQVIgKiwgQk9PTCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21waWxlX2Jsb2NrICopOworZXh0ZXJuIGludCAgICAgICAgICBfcGNyZTJfY2hlY2tfZXNjYXBlKFBDUkUyX1NQVFIgKiwgUENSRTJfU1BUUiwgdWludDMyX3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKiwgdWludDMyX3QsIEJPT0wsIGNvbXBpbGVfYmxvY2sgKik7CitleHRlcm4gUENSRTJfU1BUUiAgIF9wY3JlMl9maW5kX2JyYWNrZXQoUENSRTJfU1BUUiwgQk9PTCwgaW50KTsKK2V4dGVybiBCT09MICAgICAgICAgX3BjcmUyX2lzX25ld2xpbmUoUENSRTJfU1BUUiwgdWludDMyX3QsIFBDUkUyX1NQVFIsCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKiwgQk9PTCk7CitleHRlcm4gdm9pZCAgICAgICAgIF9wY3JlMl9qaXRfZnJlZV9yb2RhdGEodm9pZCAqLCB2b2lkICopOworZXh0ZXJuIHZvaWQgICAgICAgICBfcGNyZTJfaml0X2ZyZWUodm9pZCAqLCBwY3JlMl9tZW1jdGwgKik7CitleHRlcm4gc2l6ZV90ICAgICAgIF9wY3JlMl9qaXRfZ2V0X3NpemUodm9pZCAqKTsKK2NvbnN0IGNoYXIgKiAgICAgICAgX3BjcmUyX2ppdF9nZXRfdGFyZ2V0KHZvaWQpOworZXh0ZXJuIHZvaWQgKiAgICAgICBfcGNyZTJfbWVtY3RsX21hbGxvYyhzaXplX3QsIHBjcmUyX21lbWN0bCAqKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgX3BjcmUyX29yZDJ1dGYodWludDMyX3QsIFBDUkUyX1VDSEFSICopOworZXh0ZXJuIGludCAgICAgICAgICBfcGNyZTJfc3RyY21wKFBDUkUyX1NQVFIsIFBDUkUyX1NQVFIpOworZXh0ZXJuIGludCAgICAgICAgICBfcGNyZTJfc3RyY21wX2M4KFBDUkUyX1NQVFIsIGNvbnN0IGNoYXIgKik7CitleHRlcm4gUENSRTJfU0laRSAgIF9wY3JlMl9zdHJjcHlfYzgoUENSRTJfVUNIQVIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBQQ1JFMl9TSVpFICAgX3BjcmUyX3N0cmxlbihQQ1JFMl9TUFRSKTsKK2V4dGVybiBpbnQgICAgICAgICAgX3BjcmUyX3N0cm5jbXAoUENSRTJfU1BUUiwgUENSRTJfU1BUUiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgICAgICAgICAgX3BjcmUyX3N0cm5jbXBfYzgoUENSRTJfU1BUUiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworZXh0ZXJuIGludCAgICAgICAgICBfcGNyZTJfc3R1ZHkocGNyZTJfcmVhbF9jb2RlICopOworZXh0ZXJuIGludCAgICAgICAgICBfcGNyZTJfdmFsaWRfdXRmKFBDUkUyX1NQVFIsIFBDUkUyX1NJWkUsIFBDUkUyX1NJWkUgKik7CitleHRlcm4gQk9PTCAgICAgICAgIF9wY3JlMl93YXNfbmV3bGluZShQQ1JFMl9TUFRSLCB1aW50MzJfdCwgUENSRTJfU1BUUiwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCAqLCBCT09MKTsKK2V4dGVybiBCT09MICAgICAgICAgX3BjcmUyX3hjbGFzcyh1aW50MzJfdCwgUENSRTJfU1BUUiwgQk9PTCk7CisjZW5kaWYgIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCAqLworCisvKiBFbmQgb2YgcGNyZTJfaW50ZXJuYWwuaCAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX2ludG1vZGVkZXAuaCBiL2Rpc3QyL3NyYy9wY3JlMl9pbnRtb2RlZGVwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiNzk1OQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9pbnRtb2RlZGVwLmgKQEAgLTAsMCArMSw4NTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgUGVybC1Db21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUENSRSBpcyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBzeW50YXgKK2FuZCBzZW1hbnRpY3MgYXJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIG9mIHRoZSBQZXJsIDUgbGFuZ3VhZ2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBQaGlsaXAgSGF6ZWwKKyAgICAgT3JpZ2luYWwgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTIgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKyAgICAgICAgIE5ldyBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworCisvKiBUaGlzIG1vZHVsZSBjb250YWlucyBtb2RlLWRlcGVuZGVudCBtYWNybyBhbmQgc3RydWN0dXJlIGRlZmluaXRpb25zLiBUaGUKK2ZpbGUgaXMgI2luY2x1ZGVkIGJ5IHBjcmUyX2ludGVybmFsLmggaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIIGlzIGRlZmluZWQuCitUaGVzZSBtb2RlLWRlcGVuZGVudCBpdGVtcyBhcmUga2VwdCBpbiBhIHNlcGFyYXRlIGZpbGUgc28gdGhhdCB0aGV5IGNhbiBhbHNvIGJlCisjaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMgZm9yIGRpZmZlcmVudCBjb2RlIHVuaXQgd2lkdGhzIGJ5IHBjcmUydGVzdCBpbiBvcmRlcgordG8gaGF2ZSBhY2Nlc3MgdG8gdGhlIGhpZGRlbiBzdHJ1Y3R1cmVzIGF0IGFsbCBzdXBwb3J0ZWQgd2lkdGhzLgorCitTb21lIG9mIHRoZSBtb2RlLWRlcGVuZGVudCBtYWNyb3MgYXJlIHJlcXVpcmVkIGF0IGRpZmZlcmVudCB3aWR0aHMgZm9yCitkaWZmZXJlbnQgcGFydHMgb2YgdGhlIHBjcmUydGVzdCBjb2RlIChpbiBwYXJ0aWN1bGFyLCB0aGUgaW5jbHVkZWQKK3BjcmVfcHJpbnRpbnQuYyBmaWxlKS4gV2UgdW5kZWZpbmUgdGhlbSBoZXJlIHNvIHRoYXQgdGhleSBjYW4gYmUgcmUtZGVmaW5lZCBmb3IKK211bHRpcGxlIGluY2x1c2lvbnMuIE5vdCBhbGwgb2YgdGhlc2UgYXJlIHVzZWQgaW4gcGNyZTJ0ZXN0LCBidXQgaXQncyBlYXNpZXIKK2p1c3QgdG8gdW5kZWZpbmUgdGhlbSBhbGwuICovCisKKyN1bmRlZiBBQ1JPU1NDSEFSCisjdW5kZWYgQkFDS0NIQVIKKyN1bmRlZiBCWVRFUzJDVQorI3VuZGVmIENVMkJZVEVTCisjdW5kZWYgRk9SV0FSRENIQVIKKyN1bmRlZiBGT1JXQVJEQ0hBUlRFU1QKKyN1bmRlZiBHRVQKKyN1bmRlZiBHRVQyCisjdW5kZWYgR0VUQ0hBUgorI3VuZGVmIEdFVENIQVJJTkMKKyN1bmRlZiBHRVRDSEFSSU5DVEVTVAorI3VuZGVmIEdFVENIQVJMRU4KKyN1bmRlZiBHRVRDSEFSTEVOVEVTVAorI3VuZGVmIEdFVENIQVJURVNUCisjdW5kZWYgR0VUX0VYVFJBTEVOCisjdW5kZWYgSEFTX0VYVFJBTEVOCisjdW5kZWYgSU1NMl9TSVpFCisjdW5kZWYgTUFYXzI1NQorI3VuZGVmIE1BWF9NQVJLCisjdW5kZWYgTUFYX1BBVFRFUk5fU0laRQorI3VuZGVmIE1BWF9VVEZfU0lOR0xFX0NVCisjdW5kZWYgTk9UX0ZJUlNUQ1UKKyN1bmRlZiBQVVQKKyN1bmRlZiBQVVQyCisjdW5kZWYgUFVUMklOQworI3VuZGVmIFBVVENIQVIKKyN1bmRlZiBQVVRJTkMKKyN1bmRlZiBUQUJMRV9HRVQKKworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1BQ1JPUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBQQ1JFIGtlZXBzIG9mZnNldHMgaW4gaXRzIGNvbXBpbGVkIGNvZGUgYXMgYXQgbGVhc3QgMTYtYml0IHF1YW50aXRpZXMKKyhhbHdheXMgc3RvcmVkIGluIGJpZy1lbmRpYW4gb3JkZXIgaW4gOC1iaXQgbW9kZSkgYnkgZGVmYXVsdC4gVGhlc2UgYXJlIHVzZWQsCitmb3IgZXhhbXBsZSwgdG8gbGluayBmcm9tIHRoZSBzdGFydCBvZiBhIHN1YnBhdHRlcm4gdG8gaXRzIGFsdGVybmF0aXZlcyBhbmQgaXRzCitlbmQuIFRoZSB1c2Ugb2YgMTYgYml0cyBwZXIgb2Zmc2V0IGxpbWl0cyB0aGUgc2l6ZSBvZiBhbiA4LWJpdCBjb21waWxlZCByZWdleAordG8gYXJvdW5kIDY0Sywgd2hpY2ggaXMgYmlnIGVub3VnaCBmb3IgYWxtb3N0IGV2ZXJ5Ym9keS4gSG93ZXZlciwgSSByZWNlaXZlZCBhCityZXF1ZXN0IGZvciBhbiBldmVuIGJpZ2dlciBsaW1pdC4gRm9yIHRoaXMgcmVhc29uLCBhbmQgYWxzbyB0byBtYWtlIHRoZSBjb2RlCitlYXNpZXIgdG8gbWFpbnRhaW4sIHRoZSBzdG9yaW5nIGFuZCBsb2FkaW5nIG9mIG9mZnNldHMgZnJvbSB0aGUgY29tcGlsZWQgY29kZQordW5pdCBzdHJpbmcgaXMgbm93IGhhbmRsZWQgYnkgdGhlIG1hY3JvcyB0aGF0IGFyZSBkZWZpbmVkIGhlcmUuCisKK1RoZSBtYWNyb3MgYXJlIGNvbnRyb2xsZWQgYnkgdGhlIHZhbHVlIG9mIExJTktfU0laRS4gVGhpcyBkZWZhdWx0cyB0byAyLCBidXQKK3ZhbHVlcyBvZiAyIG9yIDQgYXJlIGFsc28gc3VwcG9ydGVkLiAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIDgtYml0IHN1cHBvcnQgIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKworI2lmIExJTktfU0laRSA9PSAyCisjZGVmaW5lIFBVVChhLG4sZCkgICBcCisgIChhW25dID0gKGQpID4+IDgpLCBcCisgIChhWyhuKSsxXSA9IChkKSAmIDI1NSkKKyNkZWZpbmUgR0VUKGEsbikgXAorICAoKChhKVtuXSA8PCA4KSB8IChhKVsobikrMV0pCisjZGVmaW5lIE1BWF9QQVRURVJOX1NJWkUgKDEgPDwgMTYpCisKKyNlbGlmIExJTktfU0laRSA9PSAzCisjZGVmaW5lIFBVVChhLG4sZCkgICAgICAgXAorICAoYVtuXSA9IChkKSA+PiAxNiksICAgIFwKKyAgKGFbKG4pKzFdID0gKGQpID4+IDgpLCBcCisgIChhWyhuKSsyXSA9IChkKSAmIDI1NSkKKyNkZWZpbmUgR0VUKGEsbikgXAorICAoKChhKVtuXSA8PCAxNikgfCAoKGEpWyhuKSsxXSA8PCA4KSB8IChhKVsobikrMl0pCisjZGVmaW5lIE1BWF9QQVRURVJOX1NJWkUgKDEgPDwgMjQpCisKKyNlbGlmIExJTktfU0laRSA9PSA0CisjZGVmaW5lIFBVVChhLG4sZCkgICAgICAgIFwKKyAgKGFbbl0gPSAoZCkgPj4gMjQpLCAgICAgXAorICAoYVsobikrMV0gPSAoZCkgPj4gMTYpLCBcCisgIChhWyhuKSsyXSA9IChkKSA+PiA4KSwgIFwKKyAgKGFbKG4pKzNdID0gKGQpICYgMjU1KQorI2RlZmluZSBHRVQoYSxuKSBcCisgICgoKGEpW25dIDw8IDI0KSB8ICgoYSlbKG4pKzFdIDw8IDE2KSB8ICgoYSlbKG4pKzJdIDw8IDgpIHwgKGEpWyhuKSszXSkKKyNkZWZpbmUgTUFYX1BBVFRFUk5fU0laRSAoMSA8PCAzMCkgICAvKiBLZWVwIGl0IHBvc2l0aXZlICovCisKKyNlbHNlCisjZXJyb3IgTElOS19TSVpFIG11c3QgYmUgMiwgMywgb3IgNAorI2VuZGlmCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAxNi1iaXQgc3VwcG9ydCAgLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgorCisjaWYgTElOS19TSVpFID09IDIKKyN1bmRlZiBMSU5LX1NJWkUKKyNkZWZpbmUgTElOS19TSVpFIDEKKyNkZWZpbmUgUFVUKGEsbixkKSAgIFwKKyAgKGFbbl0gPSAoZCkpCisjZGVmaW5lIEdFVChhLG4pIFwKKyAgKGFbbl0pCisjZGVmaW5lIE1BWF9QQVRURVJOX1NJWkUgKDEgPDwgMTYpCisKKyNlbGlmIExJTktfU0laRSA9PSAzIHx8IExJTktfU0laRSA9PSA0CisjdW5kZWYgTElOS19TSVpFCisjZGVmaW5lIExJTktfU0laRSAyCisjZGVmaW5lIFBVVChhLG4sZCkgICBcCisgIChhW25dID0gKGQpID4+IDE2KSwgXAorICAoYVsobikrMV0gPSAoZCkgJiA2NTUzNSkKKyNkZWZpbmUgR0VUKGEsbikgXAorICAoKChhKVtuXSA8PCAxNikgfCAoYSlbKG4pKzFdKQorI2RlZmluZSBNQVhfUEFUVEVSTl9TSVpFICgxIDw8IDMwKSAgLyogS2VlcCBpdCBwb3NpdGl2ZSAqLworCisjZWxzZQorI2Vycm9yIExJTktfU0laRSBtdXN0IGJlIDIsIDMsIG9yIDQKKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gMzItYml0IHN1cHBvcnQgIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZWxpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMzIKKyN1bmRlZiBMSU5LX1NJWkUKKyNkZWZpbmUgTElOS19TSVpFIDEKKyNkZWZpbmUgUFVUKGEsbixkKSAgIFwKKyAgKGFbbl0gPSAoZCkpCisjZGVmaW5lIEdFVChhLG4pIFwKKyAgKGFbbl0pCisjZGVmaW5lIE1BWF9QQVRURVJOX1NJWkUgKDEgPDwgMzApICAvKiBLZWVwIGl0IHBvc2l0aXZlICovCisKKyNlbHNlCisjZXJyb3IgVW5zdXBwb3J0ZWQgY29tcGlsaW5nIG1vZGUKKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLSBPdGhlciBtb2RlLXNwZWNpZmljIG1hY3JvcyAtLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBQQ1JFIHVzZXMgc29tZSBvdGhlciAoYXQgbGVhc3QpIDE2LWJpdCBxdWFudGl0aWVzIHRoYXQgZG8gbm90IGNoYW5nZSB3aGVuCit0aGUgc2l6ZSBvZiBvZmZzZXRzIGNoYW5nZXMuIFRoZXJlIGFyZSB1c2VkIGZvciByZXBlYXQgY291bnRzIGFuZCBmb3Igb3RoZXIKK3RoaW5ncyBzdWNoIGFzIGNhcHR1cmluZyBwYXJlbnRoZXNpcyBudW1iZXJzIGluIGJhY2sgcmVmZXJlbmNlcy4KKworRGVmaW5lIHRoZSBudW1iZXIgb2YgY29kZSB1bml0cyByZXF1aXJlZCB0byBob2xkIGEgMTYtYml0IGNvdW50L29mZnNldCwgYW5kCittYWNyb3MgdG8gbG9hZCBhbmQgc3RvcmUgc3VjaCBhIHZhbHVlLiBGb3IgcmVhc29ucyB0aGF0IEkgZG8gbm90IHVuZGVyc3RhbmQsCit0aGUgZXhwcmVzc2lvbiBpbiB0aGUgOC1iaXQgR0VUMiBtYWNybyBpcyB0cmVhdGVkIGJ5IGdjYyBhcyBhIHNpZ25lZAorZXhwcmVzc2lvbiwgZXZlbiB3aGVuIGEgaXMgZGVjbGFyZWQgYXMgdW5zaWduZWQuIEl0IHNlZW1zIHRoYXQgYW55IGtpbmQgb2YKK2FyaXRobWV0aWMgcmVzdWx0cyBpbiBhIHNpZ25lZCB2YWx1ZS4gSGVuY2UgdGhlIGNhc3QuICovCisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorI2RlZmluZSBJTU0yX1NJWkUgMgorI2RlZmluZSBHRVQyKGEsbikgKHVuc2lnbmVkIGludCkoKChhKVtuXSA8PCA4KSB8IChhKVsobikrMV0pCisjZGVmaW5lIFBVVDIoYSxuLGQpIGFbbl0gPSAoZCkgPj4gOCwgYVsobikrMV0gPSAoZCkgJiAyNTUKKworI2Vsc2UgIC8qIENvZGUgdW5pdHMgYXJlIDE2IG9yIDMyIGJpdHMgKi8KKyNkZWZpbmUgSU1NMl9TSVpFIDEKKyNkZWZpbmUgR0VUMihhLG4pIGFbbl0KKyNkZWZpbmUgUFVUMihhLG4sZCkgYVtuXSA9IGQKKyNlbmRpZgorCisvKiBPdGhlciBtYWNyb3MgdGhhdCBhcmUgZGlmZmVyZW50IGZvciA4LWJpdCBtb2RlLiBUaGUgTUFYXzI1NSBtYWNybyBjaGVja3MKK3doZXRoZXIgaXRzIGFyZ3VtZW50IGlzIGxlc3MgdGhhbiAyNTYuIFRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIE1BUksgbmFtZSBtdXN0CitmaXQgaW4gb25lIGNvZGUgdW5pdDsgY3VycmVudGx5IGl0IGlzIHNldCB0byAyNTUgb3IgNjU1MzUuIFRoZSBUQUJMRV9HRVQgbWFjcm8KK2lzIHVzZWQgdG8gYWNjZXNzIGVsZW1lbnRzIG9mIHRhYmxlcyBjb250YWluaW5nIGV4YWN0bHkgMjU2IGl0ZW1zLiBXaGVuIGNvZGUKK3BvaW50cyBjYW4gYmUgZ3JlYXRlciB0aGFuIDI1NSwgYSBjaGVjayBpcyBuZWVkZWQgYmVmb3JlIGFjY2Vzc2luZyB0aGVzZQordGFibGVzLiAqLworCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyNkZWZpbmUgTUFYXzI1NShjKSBUUlVFCisjZGVmaW5lIE1BWF9NQVJLICgoMXUgPDwgOCkgLSAxKQorI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorI2RlZmluZSBTVVBQT1JUX1dJREVfQ0hBUlMKKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisjZGVmaW5lIFRBQkxFX0dFVChjLCB0YWJsZSwgZGVmYXVsdCkgKCh0YWJsZSlbY10pCisKKyNlbHNlICAvKiBDb2RlIHVuaXRzIGFyZSAxNiBvciAzMiBiaXRzICovCisjZGVmaW5lIE1BWF8yNTUoYykgKChjKSA8PSAyNTV1KQorI2RlZmluZSBNQVhfTUFSSyAoKDF1IDw8IDE2KSAtIDEpCisjZGVmaW5lIFNVUFBPUlRfV0lERV9DSEFSUworI2RlZmluZSBUQUJMRV9HRVQoYywgdGFibGUsIGRlZmF1bHQpIChNQVhfMjU1KGMpPyAoKHRhYmxlKVtjXSk6KGRlZmF1bHQpKQorI2VuZGlmCisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBDaGFyYWN0ZXItaGFuZGxpbmcgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIFRoZXJlIGlzIGEgcHJvcG9zZWQgZnV0dXJlIHNwZWNpYWwgIlVURi0yMSIgbW9kZSwgaW4gd2hpY2ggb25seSB0aGUgbG93ZXN0CisyMSBiaXRzIG9mIGEgMzItYml0IGNoYXJhY3RlciBhcmUgaW50ZXJwcmV0ZWQgYXMgVVRGLCB3aXRoIHRoZSByZW1haW5pbmcgMTEKK2hpZ2gtb3JkZXIgYml0cyBhdmFpbGFibGUgdG8gdGhlIGFwcGxpY2F0aW9uIGZvciBvdGhlciB1c2VzLiBJbiBwcmVwYXJhdGlvbiBmb3IKK3RoZSBmdXR1cmUgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtb2RlLCB0aGVyZSBhcmUgbWFjcm9zIHRoYXQgbG9hZCBhIGRhdGEgaXRlbQorYW5kLCBpZiBpbiB0aGlzIHNwZWNpYWwgbW9kZSwgbWFzayBpdCB0byAyMSBiaXRzLiBUaGVzZSBtYWNyb3MgYWxsIGhhdmUgbmFtZXMKK3N0YXJ0aW5nIHdpdGggVUNIQVIyMS4gSW4gYWxsIG90aGVyIG1vZGVzLCBpbmNsdWRpbmcgdGhlIG5vcm1hbCAzMi1iaXQKK2xpYnJhcnksIHRoZSBtYWNyb3MgYWxsIGhhdmUgdGhlIHNhbWUgc2ltcGxlIGRlZmluaXRpb25zLiBXaGVuIHRoZSBuZXcgbW9kZSBpcworaW1wbGVtZW50ZWQsIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlc2UgZGVmaW5pdGlvbnMgd2lsbCBiZSB2YXJpZWQgYXBwcm9wcmlhdGVseQordXNpbmcgI2lmZGVmIHdoZW4gY29tcGlsaW5nIHRoZSBsaWJyYXJ5IHRoYXQgc3VwcG9ydHMgdGhlIHNwZWNpYWwgbW9kZS4gKi8KKworI2RlZmluZSBVQ0hBUjIxKGVwdHIpICAgICAgICAoKihlcHRyKSkKKyNkZWZpbmUgVUNIQVIyMVRFU1QoZXB0cikgICAgKCooZXB0cikpCisjZGVmaW5lIFVDSEFSMjFJTkMoZXB0cikgICAgICgqKGVwdHIpKyspCisjZGVmaW5lIFVDSEFSMjFJTkNURVNUKGVwdHIpICgqKGVwdHIpKyspCisKKy8qIFdoZW4gVVRGIGVuY29kaW5nIGlzIGJlaW5nIHVzZWQsIGEgY2hhcmFjdGVyIGlzIG5vIGxvbmdlciBqdXN0IGEgc2luZ2xlCitieXRlIGluIDgtYml0IG1vZGUgb3IgYSBzaW5nbGUgc2hvcnQgaW4gMTYtYml0IG1vZGUuIFRoZSBtYWNyb3MgZm9yIGNoYXJhY3RlcgoraGFuZGxpbmcgZ2VuZXJhdGUgc2ltcGxlIHNlcXVlbmNlcyB3aGVuIHVzZWQgaW4gdGhlIGJhc2ljIG1vZGUsIGFuZCBtb3JlCitjb21wbGljYXRlZCBvbmVzIGZvciBVVEYgY2hhcmFjdGVycy4gR0VUQ0hBUkxFTlRFU1QgYW5kIG90aGVyIG1hY3JvcyBhcmUgbm90Cit1c2VkIHdoZW4gVVRGIGlzIG5vdCBzdXBwb3J0ZWQuIFRvIG1ha2Ugc3VyZSB0aGV5IGNhbiBuZXZlciBldmVuIGFwcGVhciB3aGVuCitVVEYgc3VwcG9ydCBpcyBvbWl0dGVkLCB3ZSBkb24ndCBldmVuIGRlZmluZSB0aGVtLiAqLworCisjaWZuZGVmIFNVUFBPUlRfVU5JQ09ERQorCisvKiAjZGVmaW5lIE1BWF9VVEZfU0lOR0xFX0NVICovCisvKiAjZGVmaW5lIEhBU19FWFRSQUxFTihjKSAqLworLyogI2RlZmluZSBHRVRfRVhUUkFMRU4oYykgKi8KKy8qICNkZWZpbmUgTk9UX0ZJUlNUQ1UoYykgKi8KKyNkZWZpbmUgR0VUQ0hBUihjLCBlcHRyKSBjID0gKmVwdHI7CisjZGVmaW5lIEdFVENIQVJURVNUKGMsIGVwdHIpIGMgPSAqZXB0cjsKKyNkZWZpbmUgR0VUQ0hBUklOQyhjLCBlcHRyKSBjID0gKmVwdHIrKzsKKyNkZWZpbmUgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cikgYyA9ICplcHRyKys7CisjZGVmaW5lIEdFVENIQVJMRU4oYywgZXB0ciwgbGVuKSBjID0gKmVwdHI7CisjZGVmaW5lIFBVVENIQVIoYywgcCkgKCpwID0gYywgMSkKKy8qICNkZWZpbmUgR0VUQ0hBUkxFTlRFU1QoYywgZXB0ciwgbGVuKSAqLworLyogI2RlZmluZSBCQUNLQ0hBUihlcHRyKSAqLworLyogI2RlZmluZSBGT1JXQVJEQ0hBUihlcHRyKSAqLworLyogI2RlZmluZSBGT1JXQVJDQ0hBUlRFU1QoZXB0cixlbmQpICovCisvKiAjZGVmaW5lIEFDUk9TU0NIQVIoY29uZGl0aW9uLCBlcHRyLCBhY3Rpb24pICovCisKKyNlbHNlICAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gOC1iaXQgc3VwcG9ydCAgLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorI2RlZmluZSBNQVlCRV9VVEZfTVVMVEkgICAgICAgICAgLyogVVRGIGNoYXJzIG1heSB1c2UgbXVsdGlwbGUgY29kZSB1bml0cyAqLworCisvKiBUaGUgbGFyZ2VzdCBVVEYgY29kZSBwb2ludCB0aGF0IGNhbiBiZSBlbmNvZGVkIGFzIGEgc2luZ2xlIGNvZGUgdW5pdC4gKi8KKworI2RlZmluZSBNQVhfVVRGX1NJTkdMRV9DVSAxMjcKKworLyogVGVzdHMgd2hldGhlciB0aGUgY29kZSBwb2ludCBuZWVkcyBleHRyYSBjaGFyYWN0ZXJzIHRvIGRlY29kZS4gKi8KKworI2RlZmluZSBIQVNfRVhUUkFMRU4oYykgSEFTVVRGOEVYVFJBTEVOKGMpCisKKy8qIFJldHVybnMgd2l0aCB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgY2hhcmFjdGVycyBpZiBJU19NVUxUSUNIQVIoYykgaXMgVFJVRS4KK090aGVyd2lzZSBpdCBoYXMgYW4gdW5kZWZpbmVkIGJlaGF2aW91ci4gKi8KKworI2RlZmluZSBHRVRfRVhUUkFMRU4oYykgKFBSSVYodXRmOF90YWJsZTQpWyhjKSAmIDB4M2ZdKQorCisvKiBSZXR1cm5zIFRSVUUsIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBub3QgdGhlIGZpcnN0IGNvZGUgdW5pdCBvZiBhIFVURgorc2VxdWVuY2UuICovCisKKyNkZWZpbmUgTk9UX0ZJUlNUQ1UoYykgKCgoYykgJiAweGMwKSA9PSAweDgwKQorCisvKiBHZXQgdGhlIG5leHQgVVRGLTggY2hhcmFjdGVyLCBub3QgYWR2YW5jaW5nIHRoZSBwb2ludGVyLiBUaGlzIGlzIGNhbGxlZCB3aGVuCit3ZSBrbm93IHdlIGFyZSBpbiBVVEYtOCBtb2RlLiAqLworCisjZGVmaW5lIEdFVENIQVIoYywgZXB0cikgXAorICBjID0gKmVwdHI7IFwKKyAgaWYgKGMgPj0gMHhjMCkgR0VUVVRGOChjLCBlcHRyKTsKKworLyogR2V0IHRoZSBuZXh0IFVURi04IGNoYXJhY3RlciwgdGVzdGluZyBmb3IgVVRGLTggbW9kZSwgYW5kIG5vdCBhZHZhbmNpbmcgdGhlCitwb2ludGVyLiAqLworCisjZGVmaW5lIEdFVENIQVJURVNUKGMsIGVwdHIpIFwKKyAgYyA9ICplcHRyOyBcCisgIGlmICh1dGYgJiYgYyA+PSAweGMwKSBHRVRVVEY4KGMsIGVwdHIpOworCisvKiBHZXQgdGhlIG5leHQgVVRGLTggY2hhcmFjdGVyLCBhZHZhbmNpbmcgdGhlIHBvaW50ZXIuIFRoaXMgaXMgY2FsbGVkIHdoZW4gd2UKK2tub3cgd2UgYXJlIGluIFVURi04IG1vZGUuICovCisKKyNkZWZpbmUgR0VUQ0hBUklOQyhjLCBlcHRyKSBcCisgIGMgPSAqZXB0cisrOyBcCisgIGlmIChjID49IDB4YzApIEdFVFVURjhJTkMoYywgZXB0cik7CisKKy8qIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIsIHRlc3RpbmcgZm9yIFVURi04IG1vZGUsIGFuZCBhZHZhbmNpbmcgdGhlIHBvaW50ZXIuCitUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIGRvbid0IGtub3cgaWYgd2UgYXJlIGluIFVURi04IG1vZGUuICovCisKKyNkZWZpbmUgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cikgXAorICBjID0gKmVwdHIrKzsgXAorICBpZiAodXRmICYmIGMgPj0gMHhjMCkgR0VUVVRGOElOQyhjLCBlcHRyKTsKKworLyogR2V0IHRoZSBuZXh0IFVURi04IGNoYXJhY3Rlciwgbm90IGFkdmFuY2luZyB0aGUgcG9pbnRlciwgaW5jcmVtZW50aW5nIGxlbmd0aAoraWYgdGhlcmUgYXJlIGV4dHJhIGJ5dGVzLiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIGtub3cgd2UgYXJlIGluIFVURi04IG1vZGUuICovCisKKyNkZWZpbmUgR0VUQ0hBUkxFTihjLCBlcHRyLCBsZW4pIFwKKyAgYyA9ICplcHRyOyBcCisgIGlmIChjID49IDB4YzApIEdFVFVURjhMRU4oYywgZXB0ciwgbGVuKTsKKworLyogR2V0IHRoZSBuZXh0IFVURi04IGNoYXJhY3RlciwgdGVzdGluZyBmb3IgVVRGLTggbW9kZSwgbm90IGFkdmFuY2luZyB0aGUKK3BvaW50ZXIsIGluY3JlbWVudGluZyBsZW5ndGggaWYgdGhlcmUgYXJlIGV4dHJhIGJ5dGVzLiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlCitkbyBub3Qga25vdyBpZiB3ZSBhcmUgaW4gVVRGLTggbW9kZS4gKi8KKworI2RlZmluZSBHRVRDSEFSTEVOVEVTVChjLCBlcHRyLCBsZW4pIFwKKyAgYyA9ICplcHRyOyBcCisgIGlmICh1dGYgJiYgYyA+PSAweGMwKSBHRVRVVEY4TEVOKGMsIGVwdHIsIGxlbik7CisKKy8qIElmIHRoZSBwb2ludGVyIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgYSBjaGFyYWN0ZXIsIG1vdmUgaXQgYmFjayB1bnRpbAoraXQgaXMuIFRoaXMgaXMgY2FsbGVkIG9ubHkgaW4gVVRGLTggbW9kZSAtIHdlIGRvbid0IHB1dCBhIHRlc3Qgd2l0aGluIHRoZSBtYWNybworYmVjYXVzZSBhbG1vc3QgYWxsIGNhbGxzIGFyZSBhbHJlYWR5IHdpdGhpbiBhIGJsb2NrIG9mIFVURi04IG9ubHkgY29kZS4gKi8KKworI2RlZmluZSBCQUNLQ0hBUihlcHRyKSB3aGlsZSgoKmVwdHIgJiAweGMwKSA9PSAweDgwKSBlcHRyLS0KKworLyogU2FtZSBhcyBhYm92ZSwganVzdCBpbiB0aGUgb3RoZXIgZGlyZWN0aW9uLiAqLworI2RlZmluZSBGT1JXQVJEQ0hBUihlcHRyKSB3aGlsZSgoKmVwdHIgJiAweGMwKSA9PSAweDgwKSBlcHRyKysKKyNkZWZpbmUgRk9SV0FSRENIQVJURVNUKGVwdHIsZW5kKSB3aGlsZShlcHRyIDwgZW5kICYmICgqZXB0ciAmIDB4YzApID09IDB4ODApIGVwdHIrKworCisvKiBTYW1lIGFzIGFib3ZlLCBidXQgaXQgYWxsb3dzIGEgZnVsbHkgY3VzdG9taXphYmxlIGZvcm0uICovCisjZGVmaW5lIEFDUk9TU0NIQVIoY29uZGl0aW9uLCBlcHRyLCBhY3Rpb24pIFwKKyAgd2hpbGUoKGNvbmRpdGlvbikgJiYgKChlcHRyKSAmIDB4YzApID09IDB4ODApIGFjdGlvbgorCisvKiBEZXBvc2l0IGEgY2hhcmFjdGVyIGludG8gbWVtb3J5LCByZXR1cm5pbmcgdGhlIG51bWJlciBvZiBjb2RlIHVuaXRzLiAqLworCisjZGVmaW5lIFBVVENIQVIoYywgcCkgKCh1dGYgJiYgYyA+IE1BWF9VVEZfU0lOR0xFX0NVKT8gXAorICBQUklWKG9yZDJ1dGYpKGMscCkgOiAoKnAgPSBjLCAxKSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIDE2LWJpdCBzdXBwb3J0ICAtLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CisjZGVmaW5lIE1BWUJFX1VURl9NVUxUSSAgICAgICAgICAvKiBVVEYgY2hhcnMgbWF5IHVzZSBtdWx0aXBsZSBjb2RlIHVuaXRzICovCisKKy8qIFRoZSBsYXJnZXN0IFVURiBjb2RlIHBvaW50IHRoYXQgY2FuIGJlIGVuY29kZWQgYXMgYSBzaW5nbGUgY29kZSB1bml0LiAqLworCisjZGVmaW5lIE1BWF9VVEZfU0lOR0xFX0NVIDY1NTM1CisKKy8qIFRlc3RzIHdoZXRoZXIgdGhlIGNvZGUgcG9pbnQgbmVlZHMgZXh0cmEgY2hhcmFjdGVycyB0byBkZWNvZGUuICovCisKKyNkZWZpbmUgSEFTX0VYVFJBTEVOKGMpICgoKGMpICYgMHhmYzAwKSA9PSAweGQ4MDApCisKKy8qIFJldHVybnMgd2l0aCB0aGUgYWRkaXRpb25hbCBudW1iZXIgb2YgY2hhcmFjdGVycyBpZiBJU19NVUxUSUNIQVIoYykgaXMgVFJVRS4KK090aGVyd2lzZSBpdCBoYXMgYW4gdW5kZWZpbmVkIGJlaGF2aW91ci4gKi8KKworI2RlZmluZSBHRVRfRVhUUkFMRU4oYykgMQorCisvKiBSZXR1cm5zIFRSVUUsIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBub3QgdGhlIGZpcnN0IGNvZGUgdW5pdCBvZiBhIFVURgorc2VxdWVuY2UuICovCisKKyNkZWZpbmUgTk9UX0ZJUlNUQ1UoYykgKCgoYykgJiAweGZjMDApID09IDB4ZGMwMCkKKworLyogQmFzZSBtYWNybyB0byBwaWNrIHVwIHRoZSBsb3cgc3Vycm9nYXRlIG9mIGEgVVRGLTE2IGNoYXJhY3Rlciwgbm90CithZHZhbmNpbmcgdGhlIHBvaW50ZXIuICovCisKKyNkZWZpbmUgR0VUVVRGMTYoYywgZXB0cikgXAorICAgeyBjID0gKCgoYyAmIDB4M2ZmKSA8PCAxMCkgfCAoZXB0clsxXSAmIDB4M2ZmKSkgKyAweDEwMDAwOyB9CisKKy8qIEdldCB0aGUgbmV4dCBVVEYtMTYgY2hhcmFjdGVyLCBub3QgYWR2YW5jaW5nIHRoZSBwb2ludGVyLiBUaGlzIGlzIGNhbGxlZCB3aGVuCit3ZSBrbm93IHdlIGFyZSBpbiBVVEYtMTYgbW9kZS4gKi8KKworI2RlZmluZSBHRVRDSEFSKGMsIGVwdHIpIFwKKyAgYyA9ICplcHRyOyBcCisgIGlmICgoYyAmIDB4ZmMwMCkgPT0gMHhkODAwKSBHRVRVVEYxNihjLCBlcHRyKTsKKworLyogR2V0IHRoZSBuZXh0IFVURi0xNiBjaGFyYWN0ZXIsIHRlc3RpbmcgZm9yIFVURi0xNiBtb2RlLCBhbmQgbm90IGFkdmFuY2luZyB0aGUKK3BvaW50ZXIuICovCisKKyNkZWZpbmUgR0VUQ0hBUlRFU1QoYywgZXB0cikgXAorICBjID0gKmVwdHI7IFwKKyAgaWYgKHV0ZiAmJiAoYyAmIDB4ZmMwMCkgPT0gMHhkODAwKSBHRVRVVEYxNihjLCBlcHRyKTsKKworLyogQmFzZSBtYWNybyB0byBwaWNrIHVwIHRoZSBsb3cgc3Vycm9nYXRlIG9mIGEgVVRGLTE2IGNoYXJhY3RlciwgYWR2YW5jaW5nCit0aGUgcG9pbnRlci4gKi8KKworI2RlZmluZSBHRVRVVEYxNklOQyhjLCBlcHRyKSBcCisgICB7IGMgPSAoKChjICYgMHgzZmYpIDw8IDEwKSB8ICgqZXB0cisrICYgMHgzZmYpKSArIDB4MTAwMDA7IH0KKworLyogR2V0IHRoZSBuZXh0IFVURi0xNiBjaGFyYWN0ZXIsIGFkdmFuY2luZyB0aGUgcG9pbnRlci4gVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZQora25vdyB3ZSBhcmUgaW4gVVRGLTE2IG1vZGUuICovCisKKyNkZWZpbmUgR0VUQ0hBUklOQyhjLCBlcHRyKSBcCisgIGMgPSAqZXB0cisrOyBcCisgIGlmICgoYyAmIDB4ZmMwMCkgPT0gMHhkODAwKSBHRVRVVEYxNklOQyhjLCBlcHRyKTsKKworLyogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciwgdGVzdGluZyBmb3IgVVRGLTE2IG1vZGUsIGFuZCBhZHZhbmNpbmcgdGhlIHBvaW50ZXIuCitUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIGRvbid0IGtub3cgaWYgd2UgYXJlIGluIFVURi0xNiBtb2RlLiAqLworCisjZGVmaW5lIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpIFwKKyAgYyA9ICplcHRyKys7IFwKKyAgaWYgKHV0ZiAmJiAoYyAmIDB4ZmMwMCkgPT0gMHhkODAwKSBHRVRVVEYxNklOQyhjLCBlcHRyKTsKKworLyogQmFzZSBtYWNybyB0byBwaWNrIHVwIHRoZSBsb3cgc3Vycm9nYXRlIG9mIGEgVVRGLTE2IGNoYXJhY3Rlciwgbm90CithZHZhbmNpbmcgdGhlIHBvaW50ZXIsIGluY3JlbWVudGluZyB0aGUgbGVuZ3RoLiAqLworCisjZGVmaW5lIEdFVFVURjE2TEVOKGMsIGVwdHIsIGxlbikgXAorICAgeyBjID0gKCgoYyAmIDB4M2ZmKSA8PCAxMCkgfCAoZXB0clsxXSAmIDB4M2ZmKSkgKyAweDEwMDAwOyBsZW4rKzsgfQorCisvKiBHZXQgdGhlIG5leHQgVVRGLTE2IGNoYXJhY3Rlciwgbm90IGFkdmFuY2luZyB0aGUgcG9pbnRlciwgaW5jcmVtZW50aW5nCitsZW5ndGggaWYgdGhlcmUgaXMgYSBsb3cgc3Vycm9nYXRlLiBUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIGtub3cgd2UgYXJlIGluCitVVEYtMTYgbW9kZS4gKi8KKworI2RlZmluZSBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbikgXAorICBjID0gKmVwdHI7IFwKKyAgaWYgKChjICYgMHhmYzAwKSA9PSAweGQ4MDApIEdFVFVURjE2TEVOKGMsIGVwdHIsIGxlbik7CisKKy8qIEdldCB0aGUgbmV4dCBVVEYtODE2Y2hhcmFjdGVyLCB0ZXN0aW5nIGZvciBVVEYtMTYgbW9kZSwgbm90IGFkdmFuY2luZyB0aGUKK3BvaW50ZXIsIGluY3JlbWVudGluZyBsZW5ndGggaWYgdGhlcmUgaXMgYSBsb3cgc3Vycm9nYXRlLiBUaGlzIGlzIGNhbGxlZCB3aGVuCit3ZSBkbyBub3Qga25vdyBpZiB3ZSBhcmUgaW4gVVRGLTE2IG1vZGUuICovCisKKyNkZWZpbmUgR0VUQ0hBUkxFTlRFU1QoYywgZXB0ciwgbGVuKSBcCisgIGMgPSAqZXB0cjsgXAorICBpZiAodXRmICYmIChjICYgMHhmYzAwKSA9PSAweGQ4MDApIEdFVFVURjE2TEVOKGMsIGVwdHIsIGxlbik7CisKKy8qIElmIHRoZSBwb2ludGVyIGlzIG5vdCBhdCB0aGUgc3RhcnQgb2YgYSBjaGFyYWN0ZXIsIG1vdmUgaXQgYmFjayB1bnRpbAoraXQgaXMuIFRoaXMgaXMgY2FsbGVkIG9ubHkgaW4gVVRGLTE2IG1vZGUgLSB3ZSBkb24ndCBwdXQgYSB0ZXN0IHdpdGhpbiB0aGUKK21hY3JvIGJlY2F1c2UgYWxtb3N0IGFsbCBjYWxscyBhcmUgYWxyZWFkeSB3aXRoaW4gYSBibG9jayBvZiBVVEYtMTYgb25seQorY29kZS4gKi8KKworI2RlZmluZSBCQUNLQ0hBUihlcHRyKSBpZiAoKCplcHRyICYgMHhmYzAwKSA9PSAweGRjMDApIGVwdHItLQorCisvKiBTYW1lIGFzIGFib3ZlLCBqdXN0IGluIHRoZSBvdGhlciBkaXJlY3Rpb24uICovCisjZGVmaW5lIEZPUldBUkRDSEFSKGVwdHIpIGlmICgoKmVwdHIgJiAweGZjMDApID09IDB4ZGMwMCkgZXB0cisrCisjZGVmaW5lIEZPUldBUkRDSEFSVEVTVChlcHRyLGVuZCkgaWYgKGVwdHIgPCBlbmQgJiYgKCplcHRyICYgMHhmYzAwKSA9PSAweGRjMDApIGVwdHIrKworCisvKiBTYW1lIGFzIGFib3ZlLCBidXQgaXQgYWxsb3dzIGEgZnVsbHkgY3VzdG9taXphYmxlIGZvcm0uICovCisjZGVmaW5lIEFDUk9TU0NIQVIoY29uZGl0aW9uLCBlcHRyLCBhY3Rpb24pIFwKKyAgaWYgKChjb25kaXRpb24pICYmICgoZXB0cikgJiAweGZjMDApID09IDB4ZGMwMCkgYWN0aW9uCisKKy8qIERlcG9zaXQgYSBjaGFyYWN0ZXIgaW50byBtZW1vcnksIHJldHVybmluZyB0aGUgbnVtYmVyIG9mIGNvZGUgdW5pdHMuICovCisKKyNkZWZpbmUgUFVUQ0hBUihjLCBwKSAoKHV0ZiAmJiBjID4gTUFYX1VURl9TSU5HTEVfQ1UpPyBcCisgIFBSSVYob3JkMnV0ZikoYyxwKSA6ICgqcCA9IGMsIDEpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gMzItYml0IHN1cHBvcnQgIC0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZWxzZQorCisvKiBUaGVzZSBhcmUgdHJpdmlhbCBmb3IgdGhlIDMyLWJpdCBsaWJyYXJ5LCBzaW5jZSBhbGwgVVRGLTMyIGNoYXJhY3RlcnMgZml0CitpbnRvIG9uZSBQQ1JFMl9VQ0hBUiB1bml0LiAqLworCisjZGVmaW5lIE1BWF9VVEZfU0lOR0xFX0NVICgweDEwZmZmZnUpCisjZGVmaW5lIEhBU19FWFRSQUxFTihjKSAoMCkKKyNkZWZpbmUgR0VUX0VYVFJBTEVOKGMpICgwKQorI2RlZmluZSBOT1RfRklSU1RDVShjKSAoMCkKKworLyogR2V0IHRoZSBuZXh0IFVURi0zMiBjaGFyYWN0ZXIsIG5vdCBhZHZhbmNpbmcgdGhlIHBvaW50ZXIuIFRoaXMgaXMgY2FsbGVkIHdoZW4KK3dlIGtub3cgd2UgYXJlIGluIFVURi0zMiBtb2RlLiAqLworCisjZGVmaW5lIEdFVENIQVIoYywgZXB0cikgXAorICBjID0gKihlcHRyKTsKKworLyogR2V0IHRoZSBuZXh0IFVURi0zMiBjaGFyYWN0ZXIsIHRlc3RpbmcgZm9yIFVURi0zMiBtb2RlLCBhbmQgbm90IGFkdmFuY2luZyB0aGUKK3BvaW50ZXIuICovCisKKyNkZWZpbmUgR0VUQ0hBUlRFU1QoYywgZXB0cikgXAorICBjID0gKihlcHRyKTsKKworLyogR2V0IHRoZSBuZXh0IFVURi0zMiBjaGFyYWN0ZXIsIGFkdmFuY2luZyB0aGUgcG9pbnRlci4gVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZQora25vdyB3ZSBhcmUgaW4gVVRGLTMyIG1vZGUuICovCisKKyNkZWZpbmUgR0VUQ0hBUklOQyhjLCBlcHRyKSBcCisgIGMgPSAqKChlcHRyKSsrKTsKKworLyogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciwgdGVzdGluZyBmb3IgVVRGLTMyIG1vZGUsIGFuZCBhZHZhbmNpbmcgdGhlIHBvaW50ZXIuCitUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIGRvbid0IGtub3cgaWYgd2UgYXJlIGluIFVURi0zMiBtb2RlLiAqLworCisjZGVmaW5lIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpIFwKKyAgYyA9ICooKGVwdHIpKyspOworCisvKiBHZXQgdGhlIG5leHQgVVRGLTMyIGNoYXJhY3Rlciwgbm90IGFkdmFuY2luZyB0aGUgcG9pbnRlciwgbm90IGluY3JlbWVudGluZworbGVuZ3RoIChzaW5jZSBhbGwgVVRGLTMyIGlzIG9mIGxlbmd0aCAxKS4gVGhpcyBpcyBjYWxsZWQgd2hlbiB3ZSBrbm93IHdlIGFyZSBpbgorVVRGLTMyIG1vZGUuICovCisKKyNkZWZpbmUgR0VUQ0hBUkxFTihjLCBlcHRyLCBsZW4pIFwKKyAgR0VUQ0hBUihjLCBlcHRyKQorCisvKiBHZXQgdGhlIG5leHQgVVRGLTMyY2hhcmFjdGVyLCB0ZXN0aW5nIGZvciBVVEYtMzIgbW9kZSwgbm90IGFkdmFuY2luZyB0aGUKK3BvaW50ZXIsIG5vdCBpbmNyZW1lbnRpbmcgdGhlIGxlbmd0aCAoc2luY2UgYWxsIFVURi0zMiBpcyBvZiBsZW5ndGggMSkuCitUaGlzIGlzIGNhbGxlZCB3aGVuIHdlIGRvIG5vdCBrbm93IGlmIHdlIGFyZSBpbiBVVEYtMzIgbW9kZS4gKi8KKworI2RlZmluZSBHRVRDSEFSTEVOVEVTVChjLCBlcHRyLCBsZW4pIFwKKyAgR0VUQ0hBUlRFU1QoYywgZXB0cikKKworLyogSWYgdGhlIHBvaW50ZXIgaXMgbm90IGF0IHRoZSBzdGFydCBvZiBhIGNoYXJhY3RlciwgbW92ZSBpdCBiYWNrIHVudGlsCitpdCBpcy4gVGhpcyBpcyBjYWxsZWQgb25seSBpbiBVVEYtMzIgbW9kZSAtIHdlIGRvbid0IHB1dCBhIHRlc3Qgd2l0aGluIHRoZQorbWFjcm8gYmVjYXVzZSBhbG1vc3QgYWxsIGNhbGxzIGFyZSBhbHJlYWR5IHdpdGhpbiBhIGJsb2NrIG9mIFVURi0zMiBvbmx5Citjb2RlLgorCitUaGVzZSBhcmUgYWxsIG5vLW9wcyBzaW5jZSBhbGwgVVRGLTMyIGNoYXJhY3RlcnMgZml0IGludG8gb25lIHBjcmVfdWNoYXIuICovCisKKyNkZWZpbmUgQkFDS0NIQVIoZXB0cikgZG8geyB9IHdoaWxlICgwKQorCisvKiBTYW1lIGFzIGFib3ZlLCBqdXN0IGluIHRoZSBvdGhlciBkaXJlY3Rpb24uICovCisKKyNkZWZpbmUgRk9SV0FSRENIQVIoZXB0cikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBGT1JXQVJEQ0hBUlRFU1QoZXB0cixlbmQpIGRvIHsgfSB3aGlsZSAoMCkKKworLyogU2FtZSBhcyBhYm92ZSwgYnV0IGl0IGFsbG93cyBhIGZ1bGx5IGN1c3RvbWl6YWJsZSBmb3JtLiAqLworCisjZGVmaW5lIEFDUk9TU0NIQVIoY29uZGl0aW9uLCBlcHRyLCBhY3Rpb24pIGRvIHsgfSB3aGlsZSAoMCkKKworLyogRGVwb3NpdCBhIGNoYXJhY3RlciBpbnRvIG1lbW9yeSwgcmV0dXJuaW5nIHRoZSBudW1iZXIgb2YgY29kZSB1bml0cy4gKi8KKworI2RlZmluZSBQVVRDSEFSKGMsIHApICgqcCA9IGMsIDEpCisKKyNlbmRpZiAgLyogVVRGLTMyIGNoYXJhY3RlciBoYW5kbGluZyAqLworI2VuZGlmICAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKworCisvKiBNb2RlLWRlcGVuZGVudCBtYWNyb3MgdGhhdCBoYXZlIHRoZSBzYW1lIGRlZmluaXRpb24gaW4gYWxsIG1vZGVzLiAqLworCisjZGVmaW5lIENVMkJZVEVTKHgpICAgICAoKHgpKigoUENSRTJfQ09ERV9VTklUX1dJRFRILzgpKSkKKyNkZWZpbmUgQllURVMyQ1UoeCkgICAgICgoeCkvKChQQ1JFMl9DT0RFX1VOSVRfV0lEVEgvOCkpKQorI2RlZmluZSBQVVRJTkMoYSxuLGQpICAgUFVUKGEsbixkKSwgYSArPSBMSU5LX1NJWkUKKyNkZWZpbmUgUFVUMklOQyhhLG4sZCkgIFBVVDIoYSxuLGQpLCBhICs9IElNTTJfU0laRQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhJRERFTiBTVFJVQ1RVUkVTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE5PVEU6IEFsbCB0aGVzZSBzdHJ1Y3R1cmVzICptdXN0KiBzdGFydCB3aXRoIGEgcGNyZTJfbWVtY3RsIHN0cnVjdHVyZS4gVGhlCitjb2RlIHRoYXQgdXNlcyB0aGVtIGlzIHNpbXBsZXIgYmVjYXVzZSBpdCBhc3N1bWVzIHRoaXMuICovCisKKy8qIFRoZSByZWFsIGdlbmVyYWwgY29udGV4dCBzdHJ1Y3R1cmUuIEF0IHByZXNlbnQgaXQgaG9sZHMgb25seSBkYXRhIGZvciBjdXN0b20KK21lbW9yeSBjb250cm9sLiAqLworCit0eXBlZGVmIHN0cnVjdCBwY3JlMl9yZWFsX2dlbmVyYWxfY29udGV4dCB7CisgIHBjcmUyX21lbWN0bCBtZW1jdGw7Cit9IHBjcmUyX3JlYWxfZ2VuZXJhbF9jb250ZXh0OworCisvKiBUaGUgcmVhbCBjb21waWxlIGNvbnRleHQgc3RydWN0dXJlICovCisKK3R5cGVkZWYgc3RydWN0IHBjcmUyX3JlYWxfY29tcGlsZV9jb250ZXh0IHsKKyAgcGNyZTJfbWVtY3RsIG1lbWN0bDsKKyAgaW50ICgqc3RhY2tfZ3VhcmQpKHVpbnQzMl90LCB2b2lkICopOworICB2b2lkICpzdGFja19ndWFyZF9kYXRhOworICBjb25zdCB1aW50OF90ICp0YWJsZXM7CisgIFBDUkUyX1NJWkUgbWF4X3BhdHRlcm5fbGVuZ3RoOworICB1aW50MTZfdCBic3JfY29udmVudGlvbjsKKyAgdWludDE2X3QgbmV3bGluZV9jb252ZW50aW9uOworICB1aW50MzJfdCBwYXJlbnNfbmVzdF9saW1pdDsKK30gcGNyZTJfcmVhbF9jb21waWxlX2NvbnRleHQ7CisKKy8qIFRoZSByZWFsIG1hdGNoIGNvbnRleHQgc3RydWN0dXJlLiAqLworCit0eXBlZGVmIHN0cnVjdCBwY3JlMl9yZWFsX21hdGNoX2NvbnRleHQgeworICBwY3JlMl9tZW1jdGwgbWVtY3RsOworI2lmZGVmIEhFQVBfTUFUQ0hfUkVDVVJTRQorICBwY3JlMl9tZW1jdGwgc3RhY2tfbWVtY3RsOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9KSVQKKyAgcGNyZTJfaml0X2NhbGxiYWNrIGppdF9jYWxsYmFjazsKKyAgdm9pZCAqaml0X2NhbGxiYWNrX2RhdGE7CisjZW5kaWYKKyAgaW50ICAgICgqY2FsbG91dCkocGNyZTJfY2FsbG91dF9ibG9jayAqLCB2b2lkICopOworICB2b2lkICAgICpjYWxsb3V0X2RhdGE7CisgIFBDUkUyX1NJWkUgb2Zmc2V0X2xpbWl0OworICB1aW50MzJfdCBtYXRjaF9saW1pdDsKKyAgdWludDMyX3QgcmVjdXJzaW9uX2xpbWl0OworfSBwY3JlMl9yZWFsX21hdGNoX2NvbnRleHQ7CisKKy8qIFRoZSByZWFsIGNvbXBpbGVkIGNvZGUgc3RydWN0dXJlLiBUaGUgdHlwZSBmb3IgdGhlIGJsb2Nrc2l6ZSBmaWVsZCBpcworZGVmaW5lZCBzcGVjaWFsbHkgYmVjYXVzZSBpdCBpcyByZXF1aXJlZCBpbiBwY3JlMl9zZXJpYWxpemVfZGVjb2RlKCkgd2hlbgorY29weWluZyB0aGUgc2l6ZSBmcm9tIHBvc3NpYmx5IHVuYWxpZ25lZCBtZW1vcnkgaW50byBhIHZhcmlhYmxlIG9mIHRoZSBzYW1lCit0eXBlLiBVc2UgYSBtYWNybyByYXRoZXIgdGhhbiBhIHR5cGVkZWYgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3Mgd2hlbiB0aGlzCitmaWxlIGlzIGluY2x1ZGVkIG11bHRpcGxlIHRpbWVzIGJ5IHBjcmUydGVzdC4gTE9PS0JFSElORF9NQVggc3BlY2lmaWVzIHRoZQorbGFyZ2VzdCBsb29rYmVoaW5kIHRoYXQgaXMgc3VwcG9ydGVkLiAoT1BfUkVWRVJTRSBpbiBhIHBhdHRlcm4gaGFzIGEgMTYtYml0Cithcmd1bWVudCBpbiA4LWJpdCBhbmQgMTYtYml0IG1vZGVzLCBzbyB3ZSBuZWVkIG5vIG1vcmUgdGhhbiBhIDE2LWJpdCBmaWVsZAoraGVyZS4pICovCisKKyN1bmRlZiAgQ09ERV9CTE9DS1NJWkVfVFlQRQorI2RlZmluZSBDT0RFX0JMT0NLU0laRV9UWVBFIHNpemVfdAorCisjdW5kZWYgIExPT0tCRUhJTkRfTUFYCisjZGVmaW5lIExPT0tCRUhJTkRfTUFYIFVJTlQxNl9NQVgKKwordHlwZWRlZiBzdHJ1Y3QgcGNyZTJfcmVhbF9jb2RlIHsKKyAgcGNyZTJfbWVtY3RsIG1lbWN0bDsgICAgICAgICAgICAvKiBNZW1vcnkgY29udHJvbCBmaWVsZHMgKi8KKyAgY29uc3QgdWludDhfdCAqdGFibGVzOyAgICAgICAgICAvKiBUaGUgY2hhcmFjdGVyIHRhYmxlcyAqLworICB2b2lkICAgICpleGVjdXRhYmxlX2ppdDsgICAgICAgIC8qIFBvaW50ZXIgdG8gSklUIGNvZGUgKi8KKyAgdWludDhfdCAgc3RhcnRfYml0bWFwWzMyXTsgICAgICAvKiBCaXRtYXAgZm9yIHN0YXJ0aW5nIGNvZGUgdW5pdCA8IDI1NiAqLworICBDT0RFX0JMT0NLU0laRV9UWVBFIGJsb2Nrc2l6ZTsgIC8qIFRvdGFsIChieXRlcykgdGhhdCB3YXMgbWFsbG9jLWVkICovCisgIHVpbnQzMl90IG1hZ2ljX251bWJlcjsgICAgICAgICAgLyogUGFyYW5vaWQgYW5kIGVuZGlhbm5lc3MgY2hlY2sgKi8KKyAgdWludDMyX3QgY29tcGlsZV9vcHRpb25zOyAgICAgICAvKiBPcHRpb25zIHBhc3NlZCB0byBwY3JlMl9jb21waWxlKCkgKi8KKyAgdWludDMyX3Qgb3ZlcmFsbF9vcHRpb25zOyAgICAgICAvKiBPcHRpb25zIGFmdGVyIHByb2Nlc3NpbmcgdGhlIHBhdHRlcm4gKi8KKyAgdWludDMyX3QgZmxhZ3M7ICAgICAgICAgICAgICAgICAvKiBWYXJpb3VzIHN0YXRlIGZsYWdzICovCisgIHVpbnQzMl90IGxpbWl0X21hdGNoOyAgICAgICAgICAgLyogTGltaXQgc2V0IGluIHRoZSBwYXR0ZXJuICovCisgIHVpbnQzMl90IGxpbWl0X3JlY3Vyc2lvbjsgICAgICAgLyogTGltaXQgc2V0IGluIHRoZSBwYXR0ZXJuICovCisgIHVpbnQzMl90IGZpcnN0X2NvZGV1bml0OyAgICAgICAgLyogU3RhcnRpbmcgY29kZSB1bml0ICovCisgIHVpbnQzMl90IGxhc3RfY29kZXVuaXQ7ICAgICAgICAgLyogVGhpcyBjb2RldW5pdCBtdXN0IGJlIHNlZW4gKi8KKyAgdWludDE2X3QgYnNyX2NvbnZlbnRpb247ICAgICAgICAvKiBXaGF0IFxSIG1hdGNoZXMgKi8KKyAgdWludDE2X3QgbmV3bGluZV9jb252ZW50aW9uOyAgICAvKiBXaGF0IGlzIGEgbmV3bGluZT8gKi8KKyAgdWludDE2X3QgbWF4X2xvb2tiZWhpbmQ7ICAgICAgICAvKiBMb25nZXN0IGxvb2tiZWhpbmQgKGNoYXJhY3RlcnMpICovCisgIHVpbnQxNl90IG1pbmxlbmd0aDsgICAgICAgICAgICAgLyogTWluaW11bSBsZW5ndGggb2YgbWF0Y2ggKi8KKyAgdWludDE2X3QgdG9wX2JyYWNrZXQ7ICAgICAgICAgICAvKiBIaWdoZXN0IG51bWJlcmVkIGdyb3VwICovCisgIHVpbnQxNl90IHRvcF9iYWNrcmVmOyAgICAgICAgICAgLyogSGlnaGVzdCBudW1iZXJlZCBiYWNrIHJlZmVyZW5jZSAqLworICB1aW50MTZfdCBuYW1lX2VudHJ5X3NpemU7ICAgICAgIC8qIFNpemUgKGNvZGUgdW5pdHMpIG9mIHRhYmxlIGVudHJpZXMgKi8KKyAgdWludDE2X3QgbmFtZV9jb3VudDsgICAgICAgICAgICAvKiBOdW1iZXIgb2YgbmFtZSBlbnRyaWVzIGluIHRoZSB0YWJsZSAqLworfSBwY3JlMl9yZWFsX2NvZGU7CisKKy8qIFRoZSByZWFsIG1hdGNoIGRhdGEgc3RydWN0dXJlLiAqLworCit0eXBlZGVmIHN0cnVjdCBwY3JlMl9yZWFsX21hdGNoX2RhdGEgeworICBwY3JlMl9tZW1jdGwgICAgIG1lbWN0bDsKKyAgY29uc3QgcGNyZTJfcmVhbF9jb2RlICpjb2RlOyAgICAvKiBUaGUgcGF0dGVybiB1c2VkIGZvciB0aGUgbWF0Y2ggKi8KKyAgUENSRTJfU1BUUiAgICAgICBzdWJqZWN0OyAgICAgICAvKiBUaGUgc3ViamVjdCB0aGF0IHdhcyBtYXRjaGVkICovCisgIFBDUkUyX1NQVFIgICAgICAgbWFyazsgICAgICAgICAgLyogUG9pbnRlciB0byBsYXN0IG1hcmsgKi8KKyAgUENSRTJfU0laRSAgICAgICBsZWZ0Y2hhcjsgICAgICAvKiBPZmZzZXQgdG8gbGVmdG1vc3QgY29kZSB1bml0ICovCisgIFBDUkUyX1NJWkUgICAgICAgcmlnaHRjaGFyOyAgICAgLyogT2Zmc2V0IHRvIHJpZ2h0bW9zdCBjb2RlIHVuaXQgKi8KKyAgUENSRTJfU0laRSAgICAgICBzdGFydGNoYXI7ICAgICAvKiBPZmZzZXQgdG8gc3RhcnRpbmcgY29kZSB1bml0ICovCisgIHVpbnQxNl90ICAgICAgICAgbWF0Y2hlZGJ5OyAgICAgLyogVHlwZSBvZiBtYXRjaCAobm9ybWFsLCBKSVQsIERGQSkgKi8KKyAgdWludDE2X3QgICAgICAgICBvdmVjY291bnQ7ICAgICAvKiBOdW1iZXIgb2YgcGFpcnMgKi8KKyAgaW50ICAgICAgICAgICAgICByYzsgICAgICAgICAgICAvKiBUaGUgcmV0dXJuIGNvZGUgZnJvbSB0aGUgbWF0Y2ggKi8KKyAgUENSRTJfU0laRSAgICAgICBvdmVjdG9yWzFdOyAgICAvKiBUaGUgZmlyc3QgZmllbGQgKi8KK30gcGNyZTJfcmVhbF9tYXRjaF9kYXRhOworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBSSVZBVEUgU1RSVUNUVVJFUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBub3QgbmVlZGVkIGZvciBwY3JlMnRlc3QuICovCisKKyNpZm5kZWYgUENSRTJfUENSRTJURVNUCisKKy8qIFN0cnVjdHVyZSBmb3IgY2hlY2tpbmcgZm9yIG11dHVhbCByZWN1cnNpb24gd2hlbiBzY2FubmluZyBjb21waWxlZCBjb2RlLiAqLworCit0eXBlZGVmIHN0cnVjdCByZWN1cnNlX2NoZWNrIHsKKyAgc3RydWN0IHJlY3Vyc2VfY2hlY2sgKnByZXY7CisgIFBDUkUyX1NQVFIgZ3JvdXA7Cit9IHJlY3Vyc2VfY2hlY2s7CisKKy8qIFN0cnVjdHVyZSBmb3IgYnVpbGRpbmcgYSBjYWNoZSB3aGVuIGZpbGxpbmcgaW4gcmVjdXJzaW9uIG9mZnNldHMuICovCisKK3R5cGVkZWYgc3RydWN0IHJlY3Vyc2VfY2FjaGUgeworICBQQ1JFMl9TUFRSIGdyb3VwOworICBpbnQgcmVjbm87Cit9IHJlY3Vyc2VfY2FjaGU7CisKKy8qIFN0cnVjdHVyZSBmb3IgbWFpbnRhaW5pbmcgYSBjaGFpbiBvZiBwb2ludGVycyB0byB0aGUgY3VycmVudGx5IGluY29tcGxldGUKK2JyYW5jaGVzLCBmb3IgdGVzdGluZyBmb3IgbGVmdCByZWN1cnNpb24gd2hpbGUgY29tcGlsaW5nLiAqLworCit0eXBlZGVmIHN0cnVjdCBicmFuY2hfY2hhaW4geworICBzdHJ1Y3QgYnJhbmNoX2NoYWluICpvdXRlcjsKKyAgUENSRTJfVUNIQVIgKmN1cnJlbnRfYnJhbmNoOworfSBicmFuY2hfY2hhaW47CisKKy8qIFN0cnVjdHVyZSBmb3IgYnVpbGRpbmcgYSBsaXN0IG9mIG5hbWVkIGdyb3VwcyBkdXJpbmcgdGhlIGZpcnN0IHBhc3Mgb2YKK2NvbXBpbGluZy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgbmFtZWRfZ3JvdXAgeworICBQQ1JFMl9TUFRSICAgbmFtZTsgICAgICAgICAgLyogUG9pbnRzIHRvIHRoZSBuYW1lIGluIHRoZSBwYXR0ZXJuICovCisgIHVpbnQzMl90ICAgICBudW1iZXI7ICAgICAgICAvKiBHcm91cCBudW1iZXIgKi8KKyAgdWludDE2X3QgICAgIGxlbmd0aDsgICAgICAgIC8qIExlbmd0aCBvZiB0aGUgbmFtZSAqLworICB1aW50MTZfdCAgICAgaXNkdXA7ICAgICAgICAgLyogVFJVRSBpZiBhIGR1cGxpY2F0ZSAqLworfSBuYW1lZF9ncm91cDsKKworLyogU3RydWN0dXJlIGZvciBwYXNzaW5nICJzdGF0aWMiIGluZm9ybWF0aW9uIGFyb3VuZCBiZXR3ZWVuIHRoZSBmdW5jdGlvbnMKK2RvaW5nIHRoZSBjb21waWxpbmcsIHNvIHRoYXQgdGhleSBhcmUgdGhyZWFkLXNhZmUuICovCisKK3R5cGVkZWYgc3RydWN0IGNvbXBpbGVfYmxvY2sgeworICBwY3JlMl9yZWFsX2NvbXBpbGVfY29udGV4dCAqY3g7ICAvKiBQb2ludHMgdG8gdGhlIGNvbXBpbGUgY29udGV4dCAqLworICBjb25zdCB1aW50OF90ICpsY2M7ICAgICAgICAgICAgICAvKiBQb2ludHMgdG8gbG93ZXIgY2FzaW5nIHRhYmxlICovCisgIGNvbnN0IHVpbnQ4X3QgKmZjYzsgICAgICAgICAgICAgIC8qIFBvaW50cyB0byBjYXNlLWZsaXBwaW5nIHRhYmxlICovCisgIGNvbnN0IHVpbnQ4X3QgKmNiaXRzOyAgICAgICAgICAgIC8qIFBvaW50cyB0byBjaGFyYWN0ZXIgdHlwZSB0YWJsZSAqLworICBjb25zdCB1aW50OF90ICpjdHlwZXM7ICAgICAgICAgICAvKiBQb2ludHMgdG8gdGFibGUgb2YgdHlwZSBtYXBzICovCisgIFBDUkUyX1NQVFIgc3RhcnRfd29ya3NwYWNlOyAgICAgIC8qIFRoZSBzdGFydCBvZiB3b3JraW5nIHNwYWNlICovCisgIFBDUkUyX1NQVFIgc3RhcnRfY29kZTsgICAgICAgICAgIC8qIFRoZSBzdGFydCBvZiB0aGUgY29tcGlsZWQgY29kZSAqLworICBQQ1JFMl9TUFRSIHN0YXJ0X3BhdHRlcm47ICAgICAgICAvKiBUaGUgc3RhcnQgb2YgdGhlIHBhdHRlcm4gKi8KKyAgUENSRTJfU1BUUiBlbmRfcGF0dGVybjsgICAgICAgICAgLyogVGhlIGVuZCBvZiB0aGUgcGF0dGVybiAqLworICBQQ1JFMl9TUFRSIG5lc3RwdHJbMl07ICAgICAgICAgICAvKiBQb2ludGVyKHMpIHNhdmVkIGZvciBzdHJpbmcgc3Vic3RpdHV0aW9uICovCisgIFBDUkUyX1VDSEFSICpuYW1lX3RhYmxlOyAgICAgICAgIC8qIFRoZSBuYW1lL251bWJlciB0YWJsZSAqLworICBzaXplX3Qgd29ya3NwYWNlX3NpemU7ICAgICAgICAgICAvKiBTaXplIG9mIHdvcmtzcGFjZSAqLworICB1aW50MTZfdCBuYW1lc19mb3VuZDsgICAgICAgICAgICAvKiBOdW1iZXIgb2YgZW50cmllcyBzbyBmYXIgKi8KKyAgdWludDE2X3QgbmFtZV9lbnRyeV9zaXplOyAgICAgICAgLyogU2l6ZSBvZiBlYWNoIGVudHJ5ICovCisgIG9wZW5fY2FwaXRlbSAqb3Blbl9jYXBzOyAgICAgICAgIC8qIENoYWluIG9mIG9wZW4gY2FwdHVyZSBpdGVtcyAqLworICBuYW1lZF9ncm91cCAqbmFtZWRfZ3JvdXBzOyAgICAgICAvKiBQb2ludHMgdG8gdmVjdG9yIGluIHByZS1jb21waWxlICovCisgIHVpbnQzMl90IG5hbWVkX2dyb3VwX2xpc3Rfc2l6ZTsgIC8qIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBsaXN0ICovCisgIHVpbnQzMl90IGV4dGVybmFsX29wdGlvbnM7ICAgICAgIC8qIEV4dGVybmFsIChpbml0aWFsKSBvcHRpb25zICovCisgIHVpbnQzMl90IGV4dGVybmFsX2ZsYWdzOyAgICAgICAgIC8qIEV4dGVybmFsIGZsYWcgYml0cyB0byBiZSBzZXQgKi8KKyAgdWludDMyX3QgYnJhY291bnQ7ICAgICAgICAgICAgICAgLyogQ291bnQgb2YgY2FwdHVyaW5nIHBhcmVucyBhcyB3ZSBjb21waWxlICovCisgIHVpbnQzMl90IGZpbmFsX2JyYWNvdW50OyAgICAgICAgIC8qIFNhdmVkIHZhbHVlIGFmdGVyIGZpcnN0IHBhc3MgKi8KKyAgdWludDMyX3QgKmdyb3VwaW5mbzsgICAgICAgICAgICAgLyogR3JvdXAgaW5mbyB2ZWN0b3IgKi8KKyAgdWludDMyX3QgdG9wX2JhY2tyZWY7ICAgICAgICAgICAgLyogTWF4aW11bSBiYWNrIHJlZmVyZW5jZSAqLworICB1aW50MzJfdCBiYWNrcmVmX21hcDsgICAgICAgICAgICAvKiBCaXRtYXAgb2YgbG93IGJhY2sgcmVmcyAqLworICB1aW50MzJfdCBubHR5cGU7ICAgICAgICAgICAgICAgICAvKiBOZXdsaW5lIHR5cGUgKi8KKyAgdWludDMyX3QgbmxsZW47ICAgICAgICAgICAgICAgICAgLyogTmV3bGluZSBzdHJpbmcgbGVuZ3RoICovCisgIFBDUkUyX1VDSEFSIG5sWzRdOyAgICAgICAgICAgICAgIC8qIE5ld2xpbmUgc3RyaW5nIHdoZW4gZml4ZWQgbGVuZ3RoICovCisgIGludCAgbWF4X2xvb2tiZWhpbmQ7ICAgICAgICAgICAgIC8qIE1heGltdW0gbG9va2JlaGluZCAoY2hhcmFjdGVycykgKi8KKyAgaW50ICBwYXJlbnNfZGVwdGg7ICAgICAgICAgICAgICAgLyogRGVwdGggb2YgbmVzdGVkIHBhcmVudGhlc2VzICovCisgIGludCAgYXNzZXJ0X2RlcHRoOyAgICAgICAgICAgICAgIC8qIERlcHRoIG9mIG5lc3RlZCBhc3NlcnRpb25zICovCisgIGludCAgcmVxX3ZhcnlvcHQ7ICAgICAgICAgICAgICAgIC8qICJBZnRlciB2YXJpYWJsZSBpdGVtIiBmbGFnIGZvciByZXFieXRlICovCisgIEJPT0wgaGFkX2FjY2VwdDsgICAgICAgICAgICAgICAgIC8qICgqQUNDRVBUKSBlbmNvdW50ZXJlZCAqLworICBCT09MIGhhZF9wcnVuZW9yc2tpcDsgICAgICAgICAgICAvKiAoKlBSVU5FKSBvciAoKlNLSVApIGVuY291bnRlcmVkICovCisgIEJPT0wgaGFkX3JlY3Vyc2U7ICAgICAgICAgICAgICAgIC8qIEhhZCBhIHJlY3Vyc2lvbiBvciBzdWJyb3V0aW5lIGNhbGwgKi8KKyAgQk9PTCBjaGVja19sb29rYmVoaW5kOyAgICAgICAgICAgLyogTG9va2JlaGluZHMgbmVlZCBsYXRlciBjaGVja2luZyAqLworICBCT09MIGR1cG5hbWVzOyAgICAgICAgICAgICAgICAgICAvKiBEdXBsaWNhdGUgbmFtZXMgZXhpc3QgKi8KKyAgQk9PTCBpc2NvbmRhc3NlcnQ7ICAgICAgICAgICAgICAgLyogTmV4dCBhc3NlcnQgaXMgYSBjb25kaXRpb24gKi8KK30gY29tcGlsZV9ibG9jazsKKworLyogU3RydWN0dXJlIGZvciBrZWVwaW5nIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBpbi1tZW1vcnkgc3RhY2sgdXNlZAorYnkgdGhlIEpJVCBtYXRjaGVyLiAqLworCit0eXBlZGVmIHN0cnVjdCBwY3JlMl9yZWFsX2ppdF9zdGFjayB7CisgIHBjcmUyX21lbWN0bCBtZW1jdGw7CisgIHZvaWQqIHN0YWNrOworfSBwY3JlMl9yZWFsX2ppdF9zdGFjazsKKworLyogU3RydWN0dXJlIGZvciBrZWVwaW5nIGEgY2hhaW4gb2YgaGVhcCBibG9ja3MgdXNlZCBmb3Igc2F2aW5nIG92ZWN0b3JzCitkdXJpbmcgcGF0dGVybiByZWN1cnNpb24gd2hlbiB0aGUgb3ZlY3RvciBpcyBsYXJnZXIgdGhhbiBjYW4gYmUgc2F2ZWQgb24KK3RoZSBzeXN0ZW0gc3RhY2suICovCisKK3R5cGVkZWYgc3RydWN0IG92ZWNzYXZlX2ZyYW1lIHsKKyAgc3RydWN0IG92ZWNzYXZlX2ZyYW1lICpuZXh0OyAgICAgLyogTmV4dCBmcmFtZSBvbiBmcmVlIGNoYWluICovCisgIFBDUkUyX1NJWkUgc2F2ZWRfb3ZlY1sxXTsgICAgICAgIC8qIEZpcnN0IHZlY3RvciBlbGVtZW50ICovCit9IG92ZWNzYXZlX2ZyYW1lOworCisvKiBTdHJ1Y3R1cmUgZm9yIGl0ZW1zIGluIGEgbGlua2VkIGxpc3QgdGhhdCByZXByZXNlbnRzIGFuIGV4cGxpY2l0IHJlY3Vyc2l2ZQorY2FsbCB3aXRoaW4gdGhlIHBhdHRlcm47IHVzZWQgYnkgcGNyZV9tYXRjaCgpLiAqLworCit0eXBlZGVmIHN0cnVjdCByZWN1cnNpb25faW5mbyB7CisgIHN0cnVjdCByZWN1cnNpb25faW5mbyAqcHJldnJlYzsgIC8qIFByZXZpb3VzIHJlY3Vyc2lvbiByZWNvcmQgKG9yIE5VTEwpICovCisgIHVuc2lnbmVkIGludCBncm91cF9udW07ICAgICAgICAgIC8qIE51bWJlciBvZiBncm91cCB0aGF0IHdhcyBjYWxsZWQgKi8KKyAgUENSRTJfU0laRSAqb3ZlY19zYXZlOyAgICAgICAgICAgLyogUG9pbnRlciB0byBzYXZlZCBvdmVjdG9yIGZyYW1lICovCisgIHVpbnQzMl90IHNhdmVkX2NhcHR1cmVfbGFzdDsgICAgIC8qIExhc3QgY2FwdHVyZSBudW1iZXIgKi8KKyAgUENSRTJfU1BUUiBzdWJqZWN0X3Bvc2l0aW9uOyAgICAgLyogUG9zaXRpb24gYXQgc3RhcnQgb2YgcmVjdXJzaW9uICovCit9IHJlY3Vyc2lvbl9pbmZvOworCisvKiBBIHNpbWlsYXIgc3RydWN0dXJlIGZvciBwY3JlX2RmYV9tYXRjaCgpLiAqLworCit0eXBlZGVmIHN0cnVjdCBkZmFfcmVjdXJzaW9uX2luZm8geworICBzdHJ1Y3QgZGZhX3JlY3Vyc2lvbl9pbmZvICpwcmV2cmVjOworICBQQ1JFMl9TUFRSIHN1YmplY3RfcG9zaXRpb247CisgIHVpbnQzMl90IGdyb3VwX251bTsKK30gZGZhX3JlY3Vyc2lvbl9pbmZvOworCisvKiBTdHJ1Y3R1cmUgZm9yIGJ1aWxkaW5nIGEgY2hhaW4gb2YgZGF0YSBmb3IgaG9sZGluZyB0aGUgdmFsdWVzIG9mIHRoZSBzdWJqZWN0Citwb2ludGVyIGF0IHRoZSBzdGFydCBvZiBlYWNoIHN1YnBhdHRlcm4sIHNvIGFzIHRvIGRldGVjdCB3aGVuIGFuIGVtcHR5IHN0cmluZworaGFzIGJlZW4gbWF0Y2hlZCBieSBhIHN1YnBhdHRlcm4gLSB0byBicmVhayBpbmZpbml0ZSBsb29wczsgdXNlZCBieQorcGNyZTJfbWF0Y2goKS4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgZXB0cmJsb2NrIHsKKyAgc3RydWN0IGVwdHJibG9jayAqZXBiX3ByZXY7CisgIFBDUkUyX1NQVFIgZXBiX3NhdmVkX2VwdHI7Cit9IGVwdHJibG9jazsKKworLyogU3RydWN0dXJlIGZvciBwYXNzaW5nICJzdGF0aWMiIGluZm9ybWF0aW9uIGFyb3VuZCBiZXR3ZWVuIHRoZSBmdW5jdGlvbnMKK2RvaW5nIHRyYWRpdGlvbmFsIE5GQSBtYXRjaGluZyAocGNyZTJfbWF0Y2goKSBhbmQgZnJpZW5kcykuICovCisKK3R5cGVkZWYgc3RydWN0IG1hdGNoX2Jsb2NrIHsKKyAgcGNyZTJfbWVtY3RsIG1lbWN0bDsgICAgICAgICAgICAvKiBGb3IgZ2VuZXJhbCB1c2UgKi8KKyNpZmRlZiBIRUFQX01BVENIX1JFQ1VSU0UKKyAgcGNyZTJfbWVtY3RsIHN0YWNrX21lbWN0bDsgICAgICAvKiBGb3IgInN0YWNrIiBmcmFtZXMgKi8KKyNlbmRpZgorICB1aW50MzJfdCBtYXRjaF9jYWxsX2NvdW50OyAgICAgIC8qIEFzIGl0IHNheXMgKi8KKyAgdWludDMyX3QgbWF0Y2hfbGltaXQ7ICAgICAgICAgICAvKiBBcyBpdCBzYXlzICovCisgIHVpbnQzMl90IG1hdGNoX2xpbWl0X3JlY3Vyc2lvbjsgLyogQXMgaXQgc2F5cyAqLworICBCT09MIGhpdGVuZDsgICAgICAgICAgICAgICAgICAgIC8qIEhpdCB0aGUgZW5kIG9mIHRoZSBzdWJqZWN0IGF0IHNvbWUgcG9pbnQgKi8KKyAgQk9PTCBoYXN0aGVuOyAgICAgICAgICAgICAgICAgICAvKiBQYXR0ZXJuIGNvbnRhaW5zICgqVEhFTikgKi8KKyAgY29uc3QgdWludDhfdCAqbGNjOyAgICAgICAgICAgICAvKiBQb2ludHMgdG8gbG93ZXIgY2FzaW5nIHRhYmxlICovCisgIGNvbnN0IHVpbnQ4X3QgKmZjYzsgICAgICAgICAgICAgLyogUG9pbnRzIHRvIGNhc2UtZmxpcHBpbmcgdGFibGUgKi8KKyAgY29uc3QgdWludDhfdCAqY3R5cGVzOyAgICAgICAgICAvKiBQb2ludHMgdG8gdGFibGUgb2YgdHlwZSBtYXBzICovCisgIFBDUkUyX1NJWkUgKm92ZWN0b3I7ICAgICAgICAgICAgLyogUG9pbnRlciB0byB0aGUgb2Zmc2V0IHZlY3RvciAqLworICBQQ1JFMl9TSVpFIG9mZnNldF9lbmQ7ICAgICAgICAgIC8qIE9uZSBwYXN0IHRoZSBlbmQgKi8KKyAgUENSRTJfU0laRSBvZmZzZXRfbWF4OyAgICAgICAgICAvKiBUaGUgbWF4aW11bSB1c2FibGUgZm9yIHJldHVybiBkYXRhICovCisgIFBDUkUyX1NJWkUgc3RhcnRfb2Zmc2V0OyAgICAgICAgLyogVGhlIHN0YXJ0IG9mZnNldCB2YWx1ZSAqLworICBQQ1JFMl9TSVpFIGVuZF9vZmZzZXRfdG9wOyAgICAgIC8qIEhpZ2h3YXRlciBtYXJrIGF0IGVuZCBvZiBtYXRjaCAqLworICB1aW50MTZfdCBwYXJ0aWFsOyAgICAgICAgICAgICAgIC8qIFBBUlRJQUwgb3B0aW9ucyAqLworICB1aW50MTZfdCBic3JfY29udmVudGlvbjsgICAgICAgIC8qIFxSIGludGVycHJldGF0aW9uICovCisgIHVpbnQxNl90IG5hbWVfY291bnQ7ICAgICAgICAgICAgLyogTnVtYmVyIG9mIG5hbWVzIGluIG5hbWUgdGFibGUgKi8KKyAgdWludDE2X3QgbmFtZV9lbnRyeV9zaXplOyAgICAgICAvKiBTaXplIG9mIGVudHJ5IGluIG5hbWVzIHRhYmxlICovCisgIFBDUkUyX1NQVFIgbmFtZV90YWJsZTsgICAgICAgICAgLyogVGFibGUgb2YgZ3JvdXAgbmFtZXMgKi8KKyAgUENSRTJfU1BUUiBzdGFydF9jb2RlOyAgICAgICAgICAvKiBGb3IgdXNlIHdoZW4gcmVjdXJzaW5nICovCisgIFBDUkUyX1NQVFIgc3RhcnRfc3ViamVjdDsgICAgICAgLyogU3RhcnQgb2YgdGhlIHN1YmplY3Qgc3RyaW5nICovCisgIFBDUkUyX1NQVFIgZW5kX3N1YmplY3Q7ICAgICAgICAgLyogRW5kIG9mIHRoZSBzdWJqZWN0IHN0cmluZyAqLworICBQQ1JFMl9TUFRSIHN0YXJ0X21hdGNoX3B0cjsgICAgIC8qIFN0YXJ0IG9mIG1hdGNoZWQgc3RyaW5nICovCisgIFBDUkUyX1NQVFIgZW5kX21hdGNoX3B0cjsgICAgICAgLyogU3ViamVjdCBwb3NpdGlvbiBhdCBlbmQgbWF0Y2ggKi8KKyAgUENSRTJfU1BUUiBzdGFydF91c2VkX3B0cjsgICAgICAvKiBFYXJsaWVzdCBjb25zdWx0ZWQgY2hhcmFjdGVyICovCisgIFBDUkUyX1NQVFIgbGFzdF91c2VkX3B0cjsgICAgICAgLyogTGF0ZXN0IGNvbnN1bHRlZCBjaGFyYWN0ZXIgKi8KKyAgUENSRTJfU1BUUiBtYXJrOyAgICAgICAgICAgICAgICAvKiBNYXJrIHBvaW50ZXIgdG8gcGFzcyBiYWNrIG9uIHN1Y2Nlc3MgKi8KKyAgUENSRTJfU1BUUiBub21hdGNoX21hcms7ICAgICAgICAvKiBNYXJrIHBvaW50ZXIgdG8gcGFzcyBiYWNrIG9uIGZhaWx1cmUgKi8KKyAgUENSRTJfU1BUUiBvbmNlX3RhcmdldDsgICAgICAgICAvKiBXaGVyZSB0byBiYWNrIHVwIHRvIGZvciBhdG9taWMgZ3JvdXBzICovCisgIHVpbnQzMl90IG1vcHRpb25zOyAgICAgICAgICAgICAgLyogTWF0Y2ggb3B0aW9ucyAqLworICB1aW50MzJfdCBwb3B0aW9uczsgICAgICAgICAgICAgIC8qIFBhdHRlcm4gb3B0aW9ucyAqLworICB1aW50MzJfdCBjYXB0dXJlX2xhc3Q7ICAgICAgICAgIC8qIE1vc3QgcmVjZW50IGNhcHR1cmUgbnVtYmVyICsgb3ZlcmZsb3cgZmxhZyAqLworICB1aW50MzJfdCBza2lwX2FyZ19jb3VudDsgICAgICAgIC8qIEZvciBjb3VudGluZyBTS0lQX0FSR3MgKi8KKyAgdWludDMyX3QgaWdub3JlX3NraXBfYXJnOyAgICAgICAvKiBGb3IgcmUtcnVuIHdoZW4gU0tJUCBhcmcgbmFtZSBub3QgZm91bmQgKi8KKyAgdWludDMyX3QgbWF0Y2hfZnVuY3Rpb25fdHlwZTsgICAvKiBTZXQgZm9yIGNlcnRhaW4gc3BlY2lhbCBjYWxscyBvZiBtYXRjaCgpICovCisgIHVpbnQzMl90IG5sdHlwZTsgICAgICAgICAgICAgICAgLyogTmV3bGluZSB0eXBlICovCisgIHVpbnQzMl90IG5sbGVuOyAgICAgICAgICAgICAgICAgLyogTmV3bGluZSBzdHJpbmcgbGVuZ3RoICovCisgIFBDUkUyX1VDSEFSIG5sWzRdOyAgICAgICAgICAgICAgLyogTmV3bGluZSBzdHJpbmcgd2hlbiBmaXhlZCAqLworICBlcHRyYmxvY2sgKmVwdHJjaGFpbjsgICAgICAgICAgIC8qIENoYWluIG9mIGVwdHJibG9ja3MgZm9yIHRhaWwgcmVjdXJzaW9ucyAqLworICByZWN1cnNpb25faW5mbyAqcmVjdXJzaXZlOyAgICAgIC8qIExpbmtlZCBsaXN0IG9mIHJlY3Vyc2lvbiBkYXRhICovCisgIG92ZWNzYXZlX2ZyYW1lICpvdmVjc2F2ZV9jaGFpbjsgLyogTGlua2VkIGxpc3Qgb2YgZnJlZSBvdmVjc2F2ZSBibG9ja3MgKi8KKyAgdm9pZCAgKmNhbGxvdXRfZGF0YTsgICAgICAgICAgICAvKiBUbyBwYXNzIGJhY2sgdG8gY2FsbG91dHMgKi8KKyAgaW50ICgqY2FsbG91dCkocGNyZTJfY2FsbG91dF9ibG9jayAqLHZvaWQgKik7ICAvKiBDYWxsb3V0IGZ1bmN0aW9uIG9yIE5VTEwgKi8KKyNpZmRlZiBIRUFQX01BVENIX1JFQ1VSU0UKKyAgdm9pZCAgKm1hdGNoX2ZyYW1lc19iYXNlOyAgICAgICAvKiBGb3IgcmVtZW1iZXJpbmcgbWFsbG9jJ2QgZnJhbWVzICovCisjZW5kaWYKK30gbWF0Y2hfYmxvY2s7CisKKy8qIEEgc2ltaWxhciBzdHJ1Y3R1cmUgaXMgdXNlZCBmb3IgdGhlIHNhbWUgcHVycG9zZSBieSB0aGUgREZBIG1hdGNoaW5nCitmdW5jdGlvbnMuICovCisKK3R5cGVkZWYgc3RydWN0IGRmYV9tYXRjaF9ibG9jayB7CisgIHBjcmUyX21lbWN0bCBtZW1jdGw7ICAgICAgICAgICAgLyogRm9yIGdlbmVyYWwgdXNlICovCisgIFBDUkUyX1NQVFIgc3RhcnRfY29kZTsgICAgICAgICAgLyogU3RhcnQgb2YgdGhlIGNvbXBpbGVkIHBhdHRlcm4gKi8KKyAgUENSRTJfU1BUUiBzdGFydF9zdWJqZWN0IDsgICAgICAvKiBTdGFydCBvZiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgUENSRTJfU1BUUiBlbmRfc3ViamVjdDsgICAgICAgICAvKiBFbmQgb2Ygc3ViamVjdCBzdHJpbmcgKi8KKyAgUENSRTJfU1BUUiBzdGFydF91c2VkX3B0cjsgICAgICAvKiBFYXJsaWVzdCBjb25zdWx0ZWQgY2hhcmFjdGVyICovCisgIFBDUkUyX1NQVFIgbGFzdF91c2VkX3B0cjsgICAgICAgLyogTGF0ZXN0IGNvbnN1bHRlZCBjaGFyYWN0ZXIgKi8KKyAgY29uc3QgdWludDhfdCAqdGFibGVzOyAgICAgICAgICAvKiBDaGFyYWN0ZXIgdGFibGVzICovCisgIFBDUkUyX1NJWkUgc3RhcnRfb2Zmc2V0OyAgICAgICAgLyogVGhlIHN0YXJ0IG9mZnNldCB2YWx1ZSAqLworICB1aW50MzJfdCBtb3B0aW9uczsgICAgICAgICAgICAgIC8qIE1hdGNoIG9wdGlvbnMgKi8KKyAgdWludDMyX3QgcG9wdGlvbnM7ICAgICAgICAgICAgICAvKiBQYXR0ZXJuIG9wdGlvbnMgKi8KKyAgdWludDMyX3Qgbmx0eXBlOyAgICAgICAgICAgICAgICAvKiBOZXdsaW5lIHR5cGUgKi8KKyAgdWludDMyX3QgbmxsZW47ICAgICAgICAgICAgICAgICAvKiBOZXdsaW5lIHN0cmluZyBsZW5ndGggKi8KKyAgUENSRTJfVUNIQVIgbmxbNF07ICAgICAgICAgICAgICAvKiBOZXdsaW5lIHN0cmluZyB3aGVuIGZpeGVkICovCisgIHVpbnQxNl90IGJzcl9jb252ZW50aW9uOyAgICAgICAgLyogXFIgaW50ZXJwcmV0YXRpb24gKi8KKyAgdm9pZCAqY2FsbG91dF9kYXRhOyAgICAgICAgICAgICAvKiBUbyBwYXNzIGJhY2sgdG8gY2FsbG91dHMgKi8KKyAgaW50ICgqY2FsbG91dCkocGNyZTJfY2FsbG91dF9ibG9jayAqLHZvaWQgKik7ICAvKiBDYWxsb3V0IGZ1bmN0aW9uIG9yIE5VTEwgKi8KKyAgZGZhX3JlY3Vyc2lvbl9pbmZvICpyZWN1cnNpdmU7ICAvKiBMaW5rZWQgbGlzdCBvZiByZWN1cnNpb24gZGF0YSAqLworfSBkZmFfbWF0Y2hfYmxvY2s7CisKKyNlbmRpZiAgLyogUENSRTJfUENSRTJURVNUICovCisKKy8qIEVuZCBvZiBwY3JlMl9pbnRtb2RlZGVwLmggKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9qaXRfY29tcGlsZS5jIGIvZGlzdDIvc3JjL3BjcmUyX2ppdF9jb21waWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2ZjRlMwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9qaXRfY29tcGlsZS5jCkBAIC0wLDAgKzEsMTE1MDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgUGVybC1Db21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUENSRSBpcyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBzeW50YXgKK2FuZCBzZW1hbnRpY3MgYXJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIG9mIHRoZSBQZXJsIDUgbGFuZ3VhZ2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBQaGlsaXAgSGF6ZWwKKyAgICAgT3JpZ2luYWwgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTIgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKyAgICAgICAgIE5ldyBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJwY3JlMl9pbnRlcm5hbC5oIgorCisjaWZkZWYgU1VQUE9SVF9KSVQKKworLyogQWxsLWluLW9uZTogU2luY2Ugd2UgdXNlIHRoZSBKSVQgY29tcGlsZXIgb25seSBmcm9tIGhlcmUsCit3ZSBqdXN0IGluY2x1ZGUgaXQuIFRoaXMgd2F5IHdlIGRvbid0IG5lZWQgdG8gdG91Y2ggdGhlIGJ1aWxkCitzeXN0ZW0gZmlsZXMuICovCisKKyNkZWZpbmUgU0xKSVRfQ09ORklHX0FVVE8gMQorI2RlZmluZSBTTEpJVF9DT05GSUdfU1RBVElDIDEKKyNkZWZpbmUgU0xKSVRfVkVSQk9TRSAwCisKKyNpZmRlZiBQQ1JFMl9ERUJVRworI2RlZmluZSBTTEpJVF9ERUJVRyAxCisjZWxzZQorI2RlZmluZSBTTEpJVF9ERUJVRyAwCisjZW5kaWYKKworI2RlZmluZSBTTEpJVF9NQUxMT0Moc2l6ZSwgYWxsb2NhdG9yX2RhdGEpIHBjcmUyX2ppdF9tYWxsb2Moc2l6ZSwgYWxsb2NhdG9yX2RhdGEpCisjZGVmaW5lIFNMSklUX0ZSRUUocHRyLCBhbGxvY2F0b3JfZGF0YSkgcGNyZTJfaml0X2ZyZWUocHRyLCBhbGxvY2F0b3JfZGF0YSkKKworc3RhdGljIHZvaWQgKiBwY3JlMl9qaXRfbWFsbG9jKHNpemVfdCBzaXplLCB2b2lkICphbGxvY2F0b3JfZGF0YSkKK3sKK3BjcmUyX21lbWN0bCAqYWxsb2NhdG9yID0gKChwY3JlMl9tZW1jdGwqKWFsbG9jYXRvcl9kYXRhKTsKK3JldHVybiBhbGxvY2F0b3ItPm1hbGxvYyhzaXplLCBhbGxvY2F0b3ItPm1lbW9yeV9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgcGNyZTJfaml0X2ZyZWUodm9pZCAqcHRyLCB2b2lkICphbGxvY2F0b3JfZGF0YSkKK3sKK3BjcmUyX21lbWN0bCAqYWxsb2NhdG9yID0gKChwY3JlMl9tZW1jdGwqKWFsbG9jYXRvcl9kYXRhKTsKK2FsbG9jYXRvci0+ZnJlZShwdHIsIGFsbG9jYXRvci0+bWVtb3J5X2RhdGEpOworfQorCisjaW5jbHVkZSAic2xqaXQvc2xqaXRMaXIuYyIKKworI2lmIGRlZmluZWQgU0xKSVRfQ09ORklHX1VOU1VQUE9SVEVEICYmIFNMSklUX0NPTkZJR19VTlNVUFBPUlRFRAorI2Vycm9yIFVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZQorI2VuZGlmCisKKy8qIERlZmluZXMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4gKi8KKworLyogMSAtIFVzZSB1bm9wdGltaXplZCBjYXB0dXJpbmcgYnJhY2tldHMuCisgICAyIC0gRW5hYmxlIGNhcHR1cmVfbGFzdF9wdHIgKGluY2x1ZGVzIG9wdGlvbiAxKS4gKi8KKy8qICNkZWZpbmUgREVCVUdfRk9SQ0VfVU5PUFRJTUlaRURfQ0JSQVMgMiAqLworCisvKiAxIC0gQWx3YXlzIGhhdmUgYSBjb250cm9sIGhlYWQuICovCisvKiAjZGVmaW5lIERFQlVHX0ZPUkNFX0NPTlRST0xfSEVBRCAxICovCisKKy8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHJlZ2V4IHN0YWNrIG9uIHRoZSByZWFsIG1hY2hpbmUgc3RhY2suCitGYXN0LCBidXQgbGltaXRlZCBzaXplLiAqLworI2RlZmluZSBNQUNISU5FX1NUQUNLX1NJWkUgMzI3NjgKKworLyogR3Jvd3RoIHJhdGUgZm9yIHN0YWNrIGFsbG9jYXRlZCBieSB0aGUgT1MuIFNob3VsZCBiZSB0aGUgbXVsdGlwbHkKK29mIHBhZ2Ugc2l6ZS4gKi8KKyNkZWZpbmUgU1RBQ0tfR1JPV1RIX1JBVEUgODE5MgorCisvKiBFbmFibGUgdG8gY2hlY2sgdGhhdCB0aGUgYWxsb2NhdGlvbiBjb3VsZCBkZXN0cm95IHRlbXBvcmFyaWVzLiAqLworI2lmIGRlZmluZWQgU0xKSVRfREVCVUcgJiYgU0xKSVRfREVCVUcKKyNkZWZpbmUgREVTVFJPWV9SRUdJU1RFUlMgMQorI2VuZGlmCisKKy8qCitTaG9ydCBzdW1tYXJ5IGFib3V0IHRoZSBiYWNrdHJhY2tpbmcgbWVjaGFuaXNtIGVtcG9seWVkIGJ5IHRoZSBqaXQgY29kZSBnZW5lcmF0b3I6CisKK1RoZSBjb2RlIGdlbmVyYXRvciBmb2xsb3dzIHRoZSByZWN1cnNpdmUgbmF0dXJlIG9mIHRoZSBQRVJMIGNvbXBhdGlibGUgcmVndWxhcgorZXhwcmVzc2lvbnMuIFRoZSBiYXNpYyBibG9ja3Mgb2YgcmVndWxhciBleHByZXNzaW9ucyBhcmUgY29uZGl0aW9uIGNoZWNrZXJzCit3aG9zZSBleGVjdXRlIGRpZmZlcmVudCBjb21tYW5kcyBkZXBlbmRpbmcgb24gdGhlIHJlc3VsdCBvZiB0aGUgY29uZGl0aW9uIGNoZWNrLgorVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBvcGVyYXRvcnMgY2FuIGJlIGhvcml6b250YWwgKGNvbmNhdGVuYXRpb24pIGFuZAordmVydGljYWwgKHN1Yi1leHByZXNzaW9uKSAoU2VlIHN0cnVjdCBiYWNrdHJhY2tfY29tbW9uIGZvciBtb3JlIGRldGFpbHMpLgorCisgICdhYicgLSAnYScgYW5kICdiJyByZWdleHBzIGFyZSBjb25jYXRlbmF0ZWQKKyAgJ2ErJyAtICdhJyBpcyB0aGUgc3ViLWV4cHJlc3Npb24gb2YgdGhlICcrJyBvcGVyYXRvcgorCitUaGUgY29uZGl0aW9uIGNoZWNrZXJzIGFyZSBib29sZWFuICh0cnVlL2ZhbHNlKSBjaGVja2Vycy4gTWFjaGluZSBjb2RlIGlzIGdlbmVyYXRlZAorZm9yIHRoZSBjaGVja2VyIGl0c2VsZiBhbmQgZm9yIHRoZSBhY3Rpb25zIGRlcGVuZGluZyBvbiB0aGUgcmVzdWx0IG9mIHRoZSBjaGVja2VyLgorVGhlICd0cnVlJyBjYXNlIGlzIGNhbGxlZCBhcyB0aGUgbWF0Y2hpbmcgcGF0aCAoZXhwZWN0ZWQgcGF0aCksIGFuZCB0aGUgb3RoZXIgaXMgY2FsbGVkIGFzCit0aGUgJ2JhY2t0cmFjaycgcGF0aC4gQnJhbmNoIGluc3RydWN0aW9ucyBhcmUgZXhwZXNpdmUgZm9yIGFsbCBDUFVzLCBzbyB3ZSBhdm9pZCB0YWtlbgorYnJhbmNoZXMgb24gdGhlIG1hdGNoaW5nIHBhdGguCisKKyBHcmVlZHkgc3RhciBvcGVyYXRvciAoKikgOgorICAgTWF0Y2hpbmcgcGF0aDogbWF0Y2ggaGFwcGVucy4KKyAgIEJhY2t0cmFjayBwYXRoOiBtYXRjaCBmYWlsZWQuCisgTm9uLWdyZWVkeSBzdGFyIG9wZXJhdG9yICgqPykgOgorICAgTWF0Y2hpbmcgcGF0aDogbm8gbmVlZCB0byBwZXJmb3JtIGEgbWF0Y2guCisgICBCYWNrdHJhY2sgcGF0aDogbWF0Y2ggaXMgcmVxdWlyZWQuCisKK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBzaG93cyBob3cgdGhlIGNvZGUgZ2VuZXJhdGVkIGZvciBhIGNhcHR1cmluZyBicmFja2V0Cit3aXRoIHR3byBhbHRlcm5hdGl2ZXMuIExldCBBLCBCLCBDLCBEIGFyZSBhcmJpcmFyeSByZWd1bGFyIGV4cHJlc3Npb25zLCBhbmQKK3dlIGhhdmUgdGhlIGZvbGxvd2luZyByZWd1bGFyIGV4cHJlc3Npb246CisKKyAgIEEoQnxDKUQKKworVGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgYmUgdGhlIGZvbGxvd2luZzoKKworIEEgbWF0Y2hpbmcgcGF0aAorICcoJyBtYXRjaGluZyBwYXRoIChwdXNoaW5nIGFyZ3VtZW50cyB0byB0aGUgc3RhY2spCisgQiBtYXRjaGluZyBwYXRoCisgJyknIG1hdGNoaW5nIHBhdGggKHB1c2hpbmcgYXJndW1lbnRzIHRvIHRoZSBzdGFjaykKKyBEIG1hdGNoaW5nIHBhdGgKKyByZXR1cm4gd2l0aCBzdWNjZXNzZnVsIG1hdGNoCisKKyBEIGJhY2t0cmFjayBwYXRoCisgJyknIGJhY2t0cmFjayBwYXRoIChJZiB3ZSBhcnJpdmVkIGZyb20gIkMiIGp1bXAgdG8gdGhlIGJhY2t0cmFjayBvZiAiQyIpCisgQiBiYWNrdHJhY2sgcGF0aAorIEMgZXhwZWN0ZWQgcGF0aAorIGp1bXAgdG8gRCBtYXRjaGluZyBwYXRoCisgQyBiYWNrdHJhY2sgcGF0aAorIEEgYmFja3RyYWNrIHBhdGgKKworIE5vdGljZSwgdGhhdCB0aGUgb3JkZXIgb2YgYmFja3RyYWNrIGNvZGUgcGF0aHMgYXJlIHRoZSBvcHBvc2l0ZSBvZiB0aGUgZmFzdAorIGNvZGUgcGF0aHMuIEluIHRoaXMgd2F5IHRoZSB0b3Btb3N0IHZhbHVlIG9uIHRoZSBzdGFjayBpcyBhbHdheXMgYmVsb25nCisgdG8gdGhlIGN1cnJlbnQgYmFja3RyYWNrIGNvZGUgcGF0aC4gVGhlIGJhY2t0cmFjayBwYXRoIG11c3QgY2hlY2sKKyB3aGV0aGVyIHRoZXJlIGlzIGEgbmV4dCBhbHRlcm5hdGl2ZS4gSWYgc28sIGl0IG5lZWRzIHRvIGp1bXAgYmFjayB0bworIHRoZSBtYXRjaGluZyBwYXRoIGV2ZW50dWFsbHkuIE90aGVyd2lzZSBpdCBuZWVkcyB0byBjbGVhciBvdXQgaXRzIG93biBzdGFjaworIGZyYW1lIGFuZCBjb250aW51ZSB0aGUgZXhlY3V0aW9uIG9uIHRoZSBiYWNrdHJhY2sgY29kZSBwYXRocy4KKyovCisKKy8qCitTYXZlZCBzdGFjayBmcmFtZXM6CisKK0F0b21pYyBibG9ja3MgYW5kIGFzc2VydHMgcmVxdWlyZSByZWxvYWRpbmcgdGhlIHZhbHVlcyBvZiBwcml2YXRlIGRhdGEKK3doZW4gdGhlIGJhY2t0cmFjayBtZWNoYW5pc20gcGVyZm9ybWVkLiBCZWNhdXNlIG9mIE9QX1JFQ1VSU0UsIHRoZSBkYXRhCithcmUgbm90IG5lY2Vzc2FybHkga25vd24gaW4gY29tcGlsZSB0aW1lLCB0aHVzIHdlIG5lZWQgYSBkeW5hbWljIHJlc3RvcmUKK21lY2hhbmlzbS4KKworVGhlIHN0YWNrIGZyYW1lcyBhcmUgc3RvcmVkIGluIGEgY2hhaW4gbGlzdCwgYW5kIGhhdmUgdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisoWyBjYXB0dXJpbmcgYnJhY2tldCBvZmZzZXQgXVsgc3RhcnQgdmFsdWUgXVsgZW5kIHZhbHVlIF0pKyAuLi4gWyAwIF0gWyBwcmV2aW91cyBoZWFkIF0KKworVGh1cyB3ZSBjYW4gcmVzdG9yZSB0aGUgcHJpdmF0ZSBkYXRhIHRvIGEgcGFydGljdWxhciBwb2ludCBpbiB0aGUgc3RhY2suCisqLworCit0eXBlZGVmIHN0cnVjdCBqaXRfYXJndW1lbnRzIHsKKyAgLyogUG9pbnRlcnMgZmlyc3QuICovCisgIHN0cnVjdCBzbGppdF9zdGFjayAqc3RhY2s7CisgIFBDUkUyX1NQVFIgc3RyOworICBQQ1JFMl9TUFRSIGJlZ2luOworICBQQ1JFMl9TUFRSIGVuZDsKKyAgcGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YTsKKyAgUENSRTJfU1BUUiBzdGFydGNoYXJfcHRyOworICBQQ1JFMl9VQ0hBUiAqbWFya19wdHI7CisgIGludCAoKmNhbGxvdXQpKHBjcmUyX2NhbGxvdXRfYmxvY2sgKiwgdm9pZCAqKTsKKyAgdm9pZCAqY2FsbG91dF9kYXRhOworICAvKiBFdmVyeXRoaW5nIGVsc2UgYWZ0ZXIuICovCisgIHNsaml0X3V3IG9mZnNldF9saW1pdDsKKyAgc2xqaXRfdWkgbGltaXRfbWF0Y2g7CisgIHVpbnQzMl90IG92ZWNjb3VudDsKKyAgdWludDMyX3Qgb3B0aW9uczsKK30gaml0X2FyZ3VtZW50czsKKworI2RlZmluZSBKSVRfTlVNQkVSX09GX0NPTVBJTEVfTU9ERVMgMworCit0eXBlZGVmIHN0cnVjdCBleGVjdXRhYmxlX2Z1bmN0aW9ucyB7CisgIHZvaWQgKmV4ZWN1dGFibGVfZnVuY3NbSklUX05VTUJFUl9PRl9DT01QSUxFX01PREVTXTsKKyAgdm9pZCAqcmVhZF9vbmx5X2RhdGFfaGVhZHNbSklUX05VTUJFUl9PRl9DT01QSUxFX01PREVTXTsKKyAgc2xqaXRfdXcgZXhlY3V0YWJsZV9zaXplc1tKSVRfTlVNQkVSX09GX0NPTVBJTEVfTU9ERVNdOworICBzbGppdF91aSB0b3BfYnJhY2tldDsKKyAgc2xqaXRfdWkgbGltaXRfbWF0Y2g7Cit9IGV4ZWN1dGFibGVfZnVuY3Rpb25zOworCit0eXBlZGVmIHN0cnVjdCBqdW1wX2xpc3QgeworICBzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKyAgc3RydWN0IGp1bXBfbGlzdCAqbmV4dDsKK30ganVtcF9saXN0OworCit0eXBlZGVmIHN0cnVjdCBzdHViX2xpc3QgeworICBzdHJ1Y3Qgc2xqaXRfanVtcCAqc3RhcnQ7CisgIHN0cnVjdCBzbGppdF9sYWJlbCAqcXVpdDsKKyAgc3RydWN0IHN0dWJfbGlzdCAqbmV4dDsKK30gc3R1Yl9saXN0OworCit0eXBlZGVmIHN0cnVjdCBsYWJlbF9hZGRyX2xpc3QgeworICBzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOworICBzbGppdF91dyAqdXBkYXRlX2FkZHI7CisgIHN0cnVjdCBsYWJlbF9hZGRyX2xpc3QgKm5leHQ7Cit9IGxhYmVsX2FkZHJfbGlzdDsKKworZW51bSBmcmFtZV90eXBlcyB7CisgIG5vX2ZyYW1lID0gLTEsCisgIG5vX3N0YWNrID0gLTIKK307CisKK2VudW0gY29udHJvbF90eXBlcyB7CisgIHR5cGVfbWFyayA9IDAsCisgIHR5cGVfdGhlbl90cmFwID0gMQorfTsKKwordHlwZWRlZiBpbnQgKFNMSklUX0NBTEwgKmppdF9mdW5jdGlvbikoaml0X2FyZ3VtZW50cyAqYXJncyk7CisKKy8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlIGlzIHRoZSBrZXkgZGF0YSB0eXBlIGZvciB0aGUgcmVjdXJzaXZlCitjb2RlIGdlbmVyYXRvci4gSXQgaXMgYWxsb2NhdGVkIGJ5IGNvbXBpbGVfbWF0Y2hpbmdwYXRoLCBhbmQgY29udGFpbnMKK3RoZSBhcmd1bWVudHMgZm9yIGNvbXBpbGVfYmFja3RyYWNraW5ncGF0aC4gTXVzdCBiZSB0aGUgZmlyc3QgbWVtYmVyCitvZiBpdHMgZGVzY2VuZGFudHMuICovCit0eXBlZGVmIHN0cnVjdCBiYWNrdHJhY2tfY29tbW9uIHsKKyAgLyogQ29uY2F0ZW5hdGlvbiBzdGFjay4gKi8KKyAgc3RydWN0IGJhY2t0cmFja19jb21tb24gKnByZXY7CisgIGp1bXBfbGlzdCAqbmV4dGJhY2t0cmFja3M7CisgIC8qIEludGVybmFsIHN0YWNrIChmb3IgY29tcG9uZW50IG9wZXJhdG9ycykuICovCisgIHN0cnVjdCBiYWNrdHJhY2tfY29tbW9uICp0b3A7CisgIGp1bXBfbGlzdCAqdG9wYmFja3RyYWNrczsKKyAgLyogT3Bjb2RlIHBvaW50ZXIuICovCisgIFBDUkUyX1NQVFIgY2M7Cit9IGJhY2t0cmFja19jb21tb247CisKK3R5cGVkZWYgc3RydWN0IGFzc2VydF9iYWNrdHJhY2sgeworICBiYWNrdHJhY2tfY29tbW9uIGNvbW1vbjsKKyAganVtcF9saXN0ICpjb25kZmFpbGVkOworICAvKiBMZXNzIHRoYW4gMCBpZiBhIGZyYW1lIGlzIG5vdCBuZWVkZWQuICovCisgIGludCBmcmFtZXNpemU7CisgIC8qIFBvaW50cyB0byBvdXIgcHJpdmF0ZSBtZW1vcnkgd29yZCBvbiB0aGUgc3RhY2suICovCisgIGludCBwcml2YXRlX2RhdGFfcHRyOworICAvKiBGb3IgaXRlcmF0b3JzLiAqLworICBzdHJ1Y3Qgc2xqaXRfbGFiZWwgKm1hdGNoaW5ncGF0aDsKK30gYXNzZXJ0X2JhY2t0cmFjazsKKwordHlwZWRlZiBzdHJ1Y3QgYnJhY2tldF9iYWNrdHJhY2sgeworICBiYWNrdHJhY2tfY29tbW9uIGNvbW1vbjsKKyAgLyogV2hlcmUgdG8gY29uaW51ZSBpZiBhbiBhbHRlcm5hdGl2ZSBpcyBzdWNjZXNzZnVsbHkgbWF0Y2hlZC4gKi8KKyAgc3RydWN0IHNsaml0X2xhYmVsICphbHRlcm5hdGl2ZV9tYXRjaGluZ3BhdGg7CisgIC8qIEZvciBybWluIGFuZCBybWF4IGl0ZXJhdG9ycy4gKi8KKyAgc3RydWN0IHNsaml0X2xhYmVsICpyZWN1cnNpdmVfbWF0Y2hpbmdwYXRoOworICAvKiBGb3IgZ3JlZWR5ID8gb3BlcmF0b3IuICovCisgIHN0cnVjdCBzbGppdF9sYWJlbCAqemVyb19tYXRjaGluZ3BhdGg7CisgIC8qIENvbnRhaW5zIHRoZSBicmFuY2hlcyBvZiBhIGZhaWxlZCBjb25kaXRpb24uICovCisgIHVuaW9uIHsKKyAgICAvKiBCb3RoIGZvciBPUF9DT05ELCBPUF9TQ09ORC4gKi8KKyAgICBqdW1wX2xpc3QgKmNvbmRmYWlsZWQ7CisgICAgYXNzZXJ0X2JhY2t0cmFjayAqYXNzZXJ0OworICAgIC8qIEZvciBPUF9PTkNFLiBMZXNzIHRoYW4gMCBpZiBub3QgbmVlZGVkLiAqLworICAgIGludCBmcmFtZXNpemU7CisgIH0gdTsKKyAgLyogUG9pbnRzIHRvIG91ciBwcml2YXRlIG1lbW9yeSB3b3JkIG9uIHRoZSBzdGFjay4gKi8KKyAgaW50IHByaXZhdGVfZGF0YV9wdHI7Cit9IGJyYWNrZXRfYmFja3RyYWNrOworCit0eXBlZGVmIHN0cnVjdCBicmFja2V0cG9zX2JhY2t0cmFjayB7CisgIGJhY2t0cmFja19jb21tb24gY29tbW9uOworICAvKiBQb2ludHMgdG8gb3VyIHByaXZhdGUgbWVtb3J5IHdvcmQgb24gdGhlIHN0YWNrLiAqLworICBpbnQgcHJpdmF0ZV9kYXRhX3B0cjsKKyAgLyogUmV2ZXJ0aW5nIHN0YWNrIGlzIG5lZWRlZC4gKi8KKyAgaW50IGZyYW1lc2l6ZTsKKyAgLyogQWxsb2NhdGVkIHN0YWNrIHNpemUuICovCisgIGludCBzdGFja3NpemU7Cit9IGJyYWNrZXRwb3NfYmFja3RyYWNrOworCit0eXBlZGVmIHN0cnVjdCBicmFtaW56ZXJvX2JhY2t0cmFjayB7CisgIGJhY2t0cmFja19jb21tb24gY29tbW9uOworICBzdHJ1Y3Qgc2xqaXRfbGFiZWwgKm1hdGNoaW5ncGF0aDsKK30gYnJhbWluemVyb19iYWNrdHJhY2s7CisKK3R5cGVkZWYgc3RydWN0IGNoYXJfaXRlcmF0b3JfYmFja3RyYWNrIHsKKyAgYmFja3RyYWNrX2NvbW1vbiBjb21tb247CisgIC8qIE5leHQgaXRlcmF0aW9uLiAqLworICBzdHJ1Y3Qgc2xqaXRfbGFiZWwgKm1hdGNoaW5ncGF0aDsKKyAgdW5pb24geworICAgIGp1bXBfbGlzdCAqYmFja3RyYWNrczsKKyAgICBzdHJ1Y3QgeworICAgICAgdW5zaWduZWQgaW50IG90aGVyY2FzZWJpdDsKKyAgICAgIFBDUkUyX1VDSEFSIGNocjsKKyAgICAgIEJPT0wgZW5hYmxlZDsKKyAgICB9IGNoYXJwb3M7CisgIH0gdTsKK30gY2hhcl9pdGVyYXRvcl9iYWNrdHJhY2s7CisKK3R5cGVkZWYgc3RydWN0IHJlZl9pdGVyYXRvcl9iYWNrdHJhY2sgeworICBiYWNrdHJhY2tfY29tbW9uIGNvbW1vbjsKKyAgLyogTmV4dCBpdGVyYXRpb24uICovCisgIHN0cnVjdCBzbGppdF9sYWJlbCAqbWF0Y2hpbmdwYXRoOworfSByZWZfaXRlcmF0b3JfYmFja3RyYWNrOworCit0eXBlZGVmIHN0cnVjdCByZWN1cnNlX2VudHJ5IHsKKyAgc3RydWN0IHJlY3Vyc2VfZW50cnkgKm5leHQ7CisgIC8qIENvbnRhaW5zIHRoZSBmdW5jdGlvbiBlbnRyeS4gKi8KKyAgc3RydWN0IHNsaml0X2xhYmVsICplbnRyeTsKKyAgLyogQ29sbGVjdHMgdGhlIGNhbGxzIHVudGlsIHRoZSBmdW5jdGlvbiBpcyBub3QgY3JlYXRlZC4gKi8KKyAganVtcF9saXN0ICpjYWxsczsKKyAgLyogUG9pbnRzIHRvIHRoZSBzdGFydGluZyBvcGNvZGUuICovCisgIHNsaml0X3N3IHN0YXJ0OworfSByZWN1cnNlX2VudHJ5OworCit0eXBlZGVmIHN0cnVjdCByZWN1cnNlX2JhY2t0cmFjayB7CisgIGJhY2t0cmFja19jb21tb24gY29tbW9uOworICBCT09MIGlubGluZWRfcGF0dGVybjsKK30gcmVjdXJzZV9iYWNrdHJhY2s7CisKKyNkZWZpbmUgT1BfVEhFTl9UUkFQIE9QX1RBQkxFX0xFTkdUSAorCit0eXBlZGVmIHN0cnVjdCB0aGVuX3RyYXBfYmFja3RyYWNrIHsKKyAgYmFja3RyYWNrX2NvbW1vbiBjb21tb247CisgIC8qIElmIHRoZW5fdHJhcCBpcyBub3QgTlVMTCwgdGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgdGhlIHJlYWwKKyAgdGhlbl90cmFwIGZvciB0aGUgYmFja3RyYWNraW5nIHBhdGguICovCisgIHN0cnVjdCB0aGVuX3RyYXBfYmFja3RyYWNrICp0aGVuX3RyYXA7CisgIC8qIFBvaW50cyB0byB0aGUgc3RhcnRpbmcgb3Bjb2RlLiAqLworICBzbGppdF9zdyBzdGFydDsKKyAgLyogRXhpdCBwb2ludCBmb3IgdGhlIHRoZW4gb3Bjb2RlcyBvZiB0aGlzIGFsdGVybmF0aXZlLiAqLworICBqdW1wX2xpc3QgKnF1aXQ7CisgIC8qIEZyYW1lIHNpemUgb2YgdGhlIGN1cnJlbnQgYWx0ZXJuYXRpdmUuICovCisgIGludCBmcmFtZXNpemU7Cit9IHRoZW5fdHJhcF9iYWNrdHJhY2s7CisKKyNkZWZpbmUgTUFYX1JBTkdFX1NJWkUgNAorCit0eXBlZGVmIHN0cnVjdCBjb21waWxlcl9jb21tb24geworICAvKiBUaGUgc2xqaXQgY2VuZXJpYyBjb21waWxlci4gKi8KKyAgc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcjsKKyAgLyogRmlyc3QgYnl0ZSBjb2RlLiAqLworICBQQ1JFMl9TUFRSIHN0YXJ0OworICAvKiBNYXBzIHByaXZhdGUgZGF0YSBvZmZzZXQgdG8gZWFjaCBvcGNvZGUuICovCisgIHNsaml0X3NpICpwcml2YXRlX2RhdGFfcHRyczsKKyAgLyogQ2hhaW4gbGlzdCBvZiByZWFkLW9ubHkgZGF0YSBwdHJzLiAqLworICB2b2lkICpyZWFkX29ubHlfZGF0YV9oZWFkOworICAvKiBUZWxscyB3aGV0aGVyIHRoZSBjYXB0dXJpbmcgYnJhY2tldCBpcyBvcHRpbWl6ZWQuICovCisgIHNsaml0X3ViICpvcHRpbWl6ZWRfY2JyYWNrZXQ7CisgIC8qIFRlbGxzIHdoZXRoZXIgdGhlIHN0YXJ0aW5nIG9mZnNldCBpcyBhIHRhcmdldCBvZiB0aGVuLiAqLworICBzbGppdF91YiAqdGhlbl9vZmZzZXRzOworICAvKiBDdXJyZW50IHBvc2l0aW9uIHdoZXJlIGEgVEhFTiBtdXN0IGp1bXAuICovCisgIHRoZW5fdHJhcF9iYWNrdHJhY2sgKnRoZW5fdHJhcDsKKyAgLyogU3RhcnRpbmcgb2Zmc2V0IG9mIHByaXZhdGUgZGF0YSBmb3IgY2FwdHVyaW5nIGJyYWNrZXRzLiAqLworICBzbGppdF9zaSBjYnJhX3B0cjsKKyAgLyogT3V0cHV0IHZlY3RvciBzdGFydGluZyBwb2ludC4gTXVzdCBiZSBkaXZpc2libGUgYnkgMi4gKi8KKyAgc2xqaXRfc2kgb3ZlY3Rvcl9zdGFydDsKKyAgLyogUG9pbnRzIHRvIHRoZSBzdGFydGluZyBjaGFyYWN0ZXIgb2YgdGhlIGN1cnJlbnQgbWF0Y2guICovCisgIHNsaml0X3NpIHN0YXJ0X3B0cjsKKyAgLyogTGFzdCBrbm93biBwb3NpdGlvbiBvZiB0aGUgcmVxdWVzdGVkIGJ5dGUuICovCisgIHNsaml0X3NpIHJlcV9jaGFyX3B0cjsKKyAgLyogSGVhZCBvZiB0aGUgbGFzdCByZWN1cnNpb24uICovCisgIHNsaml0X3NpIHJlY3Vyc2l2ZV9oZWFkX3B0cjsKKyAgLyogRmlyc3QgaW5zcGVjdGVkIGNoYXJhY3RlciBmb3IgcGFydGlhbCBtYXRjaGluZy4KKyAgICAgKE5lZWRlZCBmb3IgYXZvaWRpbmcgemVybyBsZW5ndGggcGFydGlhbCBtYXRjaGVzLikgKi8KKyAgc2xqaXRfc2kgc3RhcnRfdXNlZF9wdHI7CisgIC8qIFN0YXJ0aW5nIHBvaW50ZXIgZm9yIHBhcnRpYWwgc29mdCBtYXRjaGVzLiAqLworICBzbGppdF9zaSBoaXRfc3RhcnQ7CisgIC8qIFBvaW50ZXIgb2YgdGhlIG1hdGNoIGVuZCBwb3NpdGlvbi4gKi8KKyAgc2xqaXRfc2kgbWF0Y2hfZW5kX3B0cjsKKyAgLyogUG9pbnRzIHRvIHRoZSBtYXJrZWQgc3RyaW5nLiAqLworICBzbGppdF9zaSBtYXJrX3B0cjsKKyAgLyogUmVjdXJzaXZlIGNvbnRyb2wgdmVyYiBtYW5hZ2VtZW50IGNoYWluLiAqLworICBzbGppdF9zaSBjb250cm9sX2hlYWRfcHRyOworICAvKiBQb2ludHMgdG8gdGhlIGxhc3QgbWF0Y2hlZCBjYXB0dXJlIGJsb2NrIGluZGV4LiAqLworICBzbGppdF9zaSBjYXB0dXJlX2xhc3RfcHRyOworICAvKiBGYXN0IGZvcndhcmQgc2tpcHBpbmcgYnl0ZSBjb2RlIHBvaW50ZXIuICovCisgIFBDUkUyX1NQVFIgZmFzdF9mb3J3YXJkX2JjX3B0cjsKKyAgLyogTG9jYWxzIHVzZWQgYnkgZmFzdCBmYWlsIG9wdGltaXphdGlvbi4gKi8KKyAgc2xqaXRfc2kgZmFzdF9mYWlsX3N0YXJ0X3B0cjsKKyAgc2xqaXRfc2kgZmFzdF9mYWlsX2VuZF9wdHI7CisKKyAgLyogRmxpcHBlZCBhbmQgbG93ZXIgY2FzZSB0YWJsZXMuICovCisgIGNvbnN0IHNsaml0X3ViICpmY2M7CisgIHNsaml0X3N3IGxjYzsKKyAgLyogTW9kZSBjYW4gYmUgUENSRTJfSklUX0NPTVBMRVRFIGFuZCBvdGhlcnMuICovCisgIGludCBtb2RlOworICAvKiBUUlVFLCB3aGVuIG1pbmxlbmd0aCBpcyBncmVhdGVyIHRoYW4gMC4gKi8KKyAgQk9PTCBtaWdodF9iZV9lbXB0eTsKKyAgLyogXEsgaXMgZm91bmQgaW4gdGhlIHBhdHRlcm4uICovCisgIEJPT0wgaGFzX3NldF9zb207CisgIC8qICgqU0tJUDphcmcpIGlzIGZvdW5kIGluIHRoZSBwYXR0ZXJuLiAqLworICBCT09MIGhhc19za2lwX2FyZzsKKyAgLyogKCpUSEVOKSBpcyBmb3VuZCBpbiB0aGUgcGF0dGVybi4gKi8KKyAgQk9PTCBoYXNfdGhlbjsKKyAgLyogKCpTS0lQKSBvciAoKlNLSVA6YXJnKSBpcyBmb3VuZCBpbiBsb29rYmVoaW5kIGFzc2VydGlvbi4gKi8KKyAgQk9PTCBoYXNfc2tpcF9pbl9hc3NlcnRfYmFjazsKKyAgLyogQ3VycmVudGx5IGluIHJlY3Vyc2Ugb3IgbmVnYXRpdmUgYXNzZXJ0LiAqLworICBCT09MIGxvY2FsX2V4aXQ7CisgIC8qIEN1cnJlbnRseSBpbiBhIHBvc2l0aXZlIGFzc2VydC4gKi8KKyAgQk9PTCBwb3NpdGl2ZV9hc3NlcnQ7CisgIC8qIE5ld2xpbmUgY29udHJvbC4gKi8KKyAgaW50IG5sdHlwZTsKKyAgc2xqaXRfdWkgbmxtYXg7CisgIHNsaml0X3VpIG5sbWluOworICBpbnQgbmV3bGluZTsKKyAgaW50IGJzcl9ubHR5cGU7CisgIHNsaml0X3VpIGJzcl9ubG1heDsKKyAgc2xqaXRfdWkgYnNyX25sbWluOworICAvKiBEb2xsYXIgZW5kb25seS4gKi8KKyAgaW50IGVuZG9ubHk7CisgIC8qIFRhYmxlcy4gKi8KKyAgc2xqaXRfc3cgY3R5cGVzOworICAvKiBOYW1lZCBjYXB0dXJpbmcgYnJhY2tldHMuICovCisgIFBDUkUyX1NQVFIgbmFtZV90YWJsZTsKKyAgc2xqaXRfc3cgbmFtZV9jb3VudDsKKyAgc2xqaXRfc3cgbmFtZV9lbnRyeV9zaXplOworCisgIC8qIExhYmVscyBhbmQganVtcCBsaXN0cy4gKi8KKyAgc3RydWN0IHNsaml0X2xhYmVsICpwYXJ0aWFsbWF0Y2hsYWJlbDsKKyAgc3RydWN0IHNsaml0X2xhYmVsICpxdWl0X2xhYmVsOworICBzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmZvcmNlZF9xdWl0X2xhYmVsOworICBzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmFjY2VwdF9sYWJlbDsKKyAgc3RydWN0IHNsaml0X2xhYmVsICpmZl9uZXdsaW5lX3Nob3J0Y3V0OworICBzdHViX2xpc3QgKnN0dWJzOworICBsYWJlbF9hZGRyX2xpc3QgKmxhYmVsX2FkZHJzOworICByZWN1cnNlX2VudHJ5ICplbnRyaWVzOworICByZWN1cnNlX2VudHJ5ICpjdXJyZW50ZW50cnk7CisgIGp1bXBfbGlzdCAqcGFydGlhbG1hdGNoOworICBqdW1wX2xpc3QgKnF1aXQ7CisgIGp1bXBfbGlzdCAqcG9zaXRpdmVfYXNzZXJ0X3F1aXQ7CisgIGp1bXBfbGlzdCAqZm9yY2VkX3F1aXQ7CisgIGp1bXBfbGlzdCAqYWNjZXB0OworICBqdW1wX2xpc3QgKmNhbGxsaW1pdDsKKyAganVtcF9saXN0ICpzdGFja2FsbG9jOworICBqdW1wX2xpc3QgKnJldmVydGZyYW1lczsKKyAganVtcF9saXN0ICp3b3JkYm91bmRhcnk7CisgIGp1bXBfbGlzdCAqYW55bmV3bGluZTsKKyAganVtcF9saXN0ICpoc3BhY2U7CisgIGp1bXBfbGlzdCAqdnNwYWNlOworICBqdW1wX2xpc3QgKmNhc2VmdWxjbXA7CisgIGp1bXBfbGlzdCAqY2FzZWxlc3NjbXA7CisgIGp1bXBfbGlzdCAqcmVzZXRfbWF0Y2g7CisgIEJPT0wgdW5zZXRfYmFja3JlZjsKKyAgQk9PTCBhbHRfY2lyY3VtZmxleDsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgQk9PTCB1dGY7CisgIEJPT0wgdXNlX3VjcDsKKyAganVtcF9saXN0ICpnZXR1Y2Q7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyAganVtcF9saXN0ICp1dGZyZWFkY2hhcjsKKyAganVtcF9saXN0ICp1dGZyZWFkY2hhcjE2OworICBqdW1wX2xpc3QgKnV0ZnJlYWR0eXBlODsKKyNlbmRpZgorI2VuZGlmIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworfSBjb21waWxlcl9jb21tb247CisKKy8qIEZvciBieXRlX3NlcXVlbmNlX2NvbXBhcmUuICovCisKK3R5cGVkZWYgc3RydWN0IGNvbXBhcmVfY29udGV4dCB7CisgIGludCBsZW5ndGg7CisgIGludCBzb3VyY2VyZWc7CisjaWYgZGVmaW5lZCBTTEpJVF9VTkFMSUdORUQgJiYgU0xKSVRfVU5BTElHTkVECisgIGludCB1Y2hhcnB0cjsKKyAgdW5pb24geworICAgIHNsaml0X3NpIGFzaW50OworICAgIHNsaml0X3VoIGFzdXNob3J0OworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgICAgc2xqaXRfdWIgYXNieXRlOworICAgIHNsaml0X3ViIGFzdWNoYXJzWzRdOworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CisgICAgc2xqaXRfdWggYXN1Y2hhcnNbMl07CisjZWxpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMzIKKyAgICBzbGppdF91aSBhc3VjaGFyc1sxXTsKKyNlbmRpZgorICB9IGM7CisgIHVuaW9uIHsKKyAgICBzbGppdF9zaSBhc2ludDsKKyAgICBzbGppdF91aCBhc3VzaG9ydDsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgIHNsaml0X3ViIGFzYnl0ZTsKKyAgICBzbGppdF91YiBhc3VjaGFyc1s0XTsKKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgorICAgIHNsaml0X3VoIGFzdWNoYXJzWzJdOworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCisgICAgc2xqaXRfdWkgYXN1Y2hhcnNbMV07CisjZW5kaWYKKyAgfSBvYzsKKyNlbmRpZgorfSBjb21wYXJlX2NvbnRleHQ7CisKKy8qIFVuZGVmaW5lIHNsaml0IG1hY3Jvcy4gKi8KKyN1bmRlZiBDTVAKKworLyogVXNlZCBmb3IgYWNjZXNzaW5nIHRoZSBlbGVtZW50cyBvZiB0aGUgc3RhY2suICovCisjZGVmaW5lIFNUQUNLKGkpICAgICAgKCgtKGkpIC0gMSkgKiAoaW50KXNpemVvZihzbGppdF9zdykpCisKKyNkZWZpbmUgVE1QMSAgICAgICAgICBTTEpJVF9SMAorI2RlZmluZSBUTVAyICAgICAgICAgIFNMSklUX1IyCisjZGVmaW5lIFRNUDMgICAgICAgICAgU0xKSVRfUjMKKyNkZWZpbmUgU1RSX1BUUiAgICAgICBTTEpJVF9TMAorI2RlZmluZSBTVFJfRU5EICAgICAgIFNMSklUX1MxCisjZGVmaW5lIFNUQUNLX1RPUCAgICAgU0xKSVRfUjEKKyNkZWZpbmUgU1RBQ0tfTElNSVQgICBTTEpJVF9TMgorI2RlZmluZSBDT1VOVF9NQVRDSCAgIFNMSklUX1MzCisjZGVmaW5lIEFSR1VNRU5UUyAgICAgU0xKSVRfUzQKKyNkZWZpbmUgUkVUVVJOX0FERFIgICBTTEpJVF9SNAorCisvKiBMb2NhbCBzcGFjZSBsYXlvdXQuICovCisvKiBUaGVzZSB0d28gbG9jYWxzIGNhbiBiZSB1c2VkIGJ5IHRoZSBjdXJyZW50IG9wY29kZS4gKi8KKyNkZWZpbmUgTE9DQUxTMCAgICAgICAgICAoMCAqIHNpemVvZihzbGppdF9zdykpCisjZGVmaW5lIExPQ0FMUzEgICAgICAgICAgKDEgKiBzaXplb2Yoc2xqaXRfc3cpKQorLyogVHdvIGxvY2FsIHZhcmlhYmxlcyBmb3IgcG9zc2Vzc2l2ZSBxdWFudGlmaWVycyAoY2hhcjEgY2Fubm90IHVzZSB0aGVtKS4gKi8KKyNkZWZpbmUgUE9TU0VTU0lWRTAgICAgICAoMiAqIHNpemVvZihzbGppdF9zdykpCisjZGVmaW5lIFBPU1NFU1NJVkUxICAgICAgKDMgKiBzaXplb2Yoc2xqaXRfc3cpKQorLyogTWF4IGxpbWl0IG9mIHJlY3Vyc2lvbnMuICovCisjZGVmaW5lIExJTUlUX01BVENIICAgICAgKDQgKiBzaXplb2Yoc2xqaXRfc3cpKQorLyogVGhlIG91dHB1dCB2ZWN0b3IgaXMgc3RvcmVkIG9uIHRoZSBzdGFjaywgYW5kIGNvbnRhaW5zIHBvaW50ZXJzCit0byBjaGFyYWN0ZXJzLiBUaGUgdmVjdG9yIGRhdGEgaXMgZGl2aWRlZCBpbnRvIHR3byBncm91cHM6IHRoZSBmaXJzdAorZ3JvdXAgY29udGFpbnMgdGhlIHN0YXJ0IC8gZW5kIGNoYXJhY3RlciBwb2ludGVycywgYW5kIHRoZSBzZWNvbmQgaXMKK3RoZSBzdGFydCBwb2ludGVycyB3aGVuIHRoZSBlbmQgb2YgdGhlIGNhcHR1cmluZyBncm91cCBoYXMgbm90IHlldCByZWFjaGVkLiAqLworI2RlZmluZSBPVkVDVE9SX1NUQVJUICAgIChjb21tb24tPm92ZWN0b3Jfc3RhcnQpCisjZGVmaW5lIE9WRUNUT1IoaSkgICAgICAgKE9WRUNUT1JfU1RBUlQgKyAoaSkgKiAoc2xqaXRfc3cpc2l6ZW9mKHNsaml0X3N3KSkKKyNkZWZpbmUgT1ZFQ1RPUl9QUklWKGkpICAoY29tbW9uLT5jYnJhX3B0ciArIChpKSAqIChzbGppdF9zdylzaXplb2Yoc2xqaXRfc3cpKQorI2RlZmluZSBQUklWQVRFX0RBVEEoY2MpIChjb21tb24tPnByaXZhdGVfZGF0YV9wdHJzWyhjYykgLSBjb21tb24tPnN0YXJ0XSkKKworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisjZGVmaW5lIE1PVl9VQ0hBUiAgU0xKSVRfTU9WX1VCCisjZGVmaW5lIE1PVlVfVUNIQVIgU0xKSVRfTU9WVV9VQgorI2RlZmluZSBJTl9VQ0hBUlMoeCkgKHgpCisjZWxpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYKKyNkZWZpbmUgTU9WX1VDSEFSICBTTEpJVF9NT1ZfVUgKKyNkZWZpbmUgTU9WVV9VQ0hBUiBTTEpJVF9NT1ZVX1VICisjZGVmaW5lIFVDSEFSX1NISUZUICgxKQorI2RlZmluZSBJTl9VQ0hBUlMoeCkgKCh4KSA8PCBVQ0hBUl9TSElGVCkKKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgorI2RlZmluZSBNT1ZfVUNIQVIgIFNMSklUX01PVl9VSQorI2RlZmluZSBNT1ZVX1VDSEFSIFNMSklUX01PVlVfVUkKKyNkZWZpbmUgVUNIQVJfU0hJRlQgKDIpCisjZGVmaW5lIElOX1VDSEFSUyh4KSAoKHgpIDw8IFVDSEFSX1NISUZUKQorI2Vsc2UKKyNlcnJvciBVbnN1cHBvcnRlZCBjb21waWxpbmcgbW9kZQorI2VuZGlmCisKKy8qIFNob3J0Y3V0cy4gKi8KKyNkZWZpbmUgREVGSU5FX0NPTVBJTEVSIFwKKyAgc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciA9IGNvbW1vbi0+Y29tcGlsZXIKKyNkZWZpbmUgT1AxKG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykgXAorICBzbGppdF9lbWl0X29wMShjb21waWxlciwgKG9wKSwgKGRzdCksIChkc3R3KSwgKHNyYyksIChzcmN3KSkKKyNkZWZpbmUgT1AyKG9wLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykgXAorICBzbGppdF9lbWl0X29wMihjb21waWxlciwgKG9wKSwgKGRzdCksIChkc3R3KSwgKHNyYzEpLCAoc3JjMXcpLCAoc3JjMiksIChzcmMydykpCisjZGVmaW5lIExBQkVMKCkgXAorICBzbGppdF9lbWl0X2xhYmVsKGNvbXBpbGVyKQorI2RlZmluZSBKVU1QKHR5cGUpIFwKKyAgc2xqaXRfZW1pdF9qdW1wKGNvbXBpbGVyLCAodHlwZSkpCisjZGVmaW5lIEpVTVBUTyh0eXBlLCBsYWJlbCkgXAorICBzbGppdF9zZXRfbGFiZWwoc2xqaXRfZW1pdF9qdW1wKGNvbXBpbGVyLCAodHlwZSkpLCAobGFiZWwpKQorI2RlZmluZSBKVU1QSEVSRShqdW1wKSBcCisgIHNsaml0X3NldF9sYWJlbCgoanVtcCksIHNsaml0X2VtaXRfbGFiZWwoY29tcGlsZXIpKQorI2RlZmluZSBTRVRfTEFCRUwoanVtcCwgbGFiZWwpIFwKKyAgc2xqaXRfc2V0X2xhYmVsKChqdW1wKSwgKGxhYmVsKSkKKyNkZWZpbmUgQ01QKHR5cGUsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykgXAorICBzbGppdF9lbWl0X2NtcChjb21waWxlciwgKHR5cGUpLCAoc3JjMSksIChzcmMxdyksIChzcmMyKSwgKHNyYzJ3KSkKKyNkZWZpbmUgQ01QVE8odHlwZSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3LCBsYWJlbCkgXAorICBzbGppdF9zZXRfbGFiZWwoc2xqaXRfZW1pdF9jbXAoY29tcGlsZXIsICh0eXBlKSwgKHNyYzEpLCAoc3JjMXcpLCAoc3JjMiksIChzcmMydykpLCAobGFiZWwpKQorI2RlZmluZSBPUF9GTEFHUyhvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3csIHR5cGUpIFwKKyAgc2xqaXRfZW1pdF9vcF9mbGFncyhjb21waWxlciwgKG9wKSwgKGRzdCksIChkc3R3KSwgKHNyYyksIChzcmN3KSwgKHR5cGUpKQorI2RlZmluZSBHRVRfTE9DQUxfQkFTRShkc3QsIGRzdHcsIG9mZnNldCkgXAorICBzbGppdF9nZXRfbG9jYWxfYmFzZShjb21waWxlciwgKGRzdCksIChkc3R3KSwgKG9mZnNldCkpCisKKyNkZWZpbmUgUkVBRF9DSEFSX01BWCAweDdmZmZmZmZmCisKK3N0YXRpYyBQQ1JFMl9TUFRSIGJyYWNrZXRlbmQoUENSRTJfU1BUUiBjYykKK3sKK1NMSklUX0FTU0VSVCgoKmNjID49IE9QX0FTU0VSVCAmJiAqY2MgPD0gT1BfQVNTRVJUQkFDS19OT1QpIHx8ICgqY2MgPj0gT1BfT05DRSAmJiAqY2MgPD0gT1BfU0NPTkQpKTsKK2RvIGNjICs9IEdFVChjYywgMSk7IHdoaWxlICgqY2MgPT0gT1BfQUxUKTsKK1NMSklUX0FTU0VSVCgqY2MgPj0gT1BfS0VUICYmICpjYyA8PSBPUF9LRVRSUE9TKTsKK2NjICs9IDEgKyBMSU5LX1NJWkU7CityZXR1cm4gY2M7Cit9CisKK3N0YXRpYyBpbnQgbm9fYWx0ZXJuYXRpdmVzKFBDUkUyX1NQVFIgY2MpCit7CitpbnQgY291bnQgPSAwOworU0xKSVRfQVNTRVJUKCgqY2MgPj0gT1BfQVNTRVJUICYmICpjYyA8PSBPUF9BU1NFUlRCQUNLX05PVCkgfHwgKCpjYyA+PSBPUF9PTkNFICYmICpjYyA8PSBPUF9TQ09ORCkpOworZG8KKyAgeworICBjYyArPSBHRVQoY2MsIDEpOworICBjb3VudCsrOworICB9Cit3aGlsZSAoKmNjID09IE9QX0FMVCk7CitTTEpJVF9BU1NFUlQoKmNjID49IE9QX0tFVCAmJiAqY2MgPD0gT1BfS0VUUlBPUyk7CityZXR1cm4gY291bnQ7Cit9CisKKy8qIEZ1bmN0aW9ucyB3aG9zZSBtaWdodCBuZWVkIG1vZGlmaWNhdGlvbiBmb3IgYWxsIG5ldyBzdXBwb3J0ZWQgb3Bjb2RlczoKKyBuZXh0X29wY29kZQorIGNoZWNrX29wY29kZV90eXBlcworIHNldF9wcml2YXRlX2RhdGFfcHRycworIGdldF9mcmFtZXNpemUKKyBpbml0X2ZyYW1lCisgZ2V0X3ByaXZhdGVfZGF0YV9jb3B5X2xlbmd0aAorIGNvcHlfcHJpdmF0ZV9kYXRhCisgY29tcGlsZV9tYXRjaGluZ3BhdGgKKyBjb21waWxlX2JhY2t0cmFja2luZ3BhdGgKKyovCisKK3N0YXRpYyBQQ1JFMl9TUFRSIG5leHRfb3Bjb2RlKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjKQoreworU0xKSVRfVU5VU0VEX0FSRyhjb21tb24pOworc3dpdGNoKCpjYykKKyAgeworICBjYXNlIE9QX1NPRDoKKyAgY2FzZSBPUF9TT006CisgIGNhc2UgT1BfU0VUX1NPTToKKyAgY2FzZSBPUF9OT1RfV09SRF9CT1VOREFSWToKKyAgY2FzZSBPUF9XT1JEX0JPVU5EQVJZOgorICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgY2FzZSBPUF9ESUdJVDoKKyAgY2FzZSBPUF9OT1RfV0hJVEVTUEFDRToKKyAgY2FzZSBPUF9XSElURVNQQUNFOgorICBjYXNlIE9QX05PVF9XT1JEQ0hBUjoKKyAgY2FzZSBPUF9XT1JEQ0hBUjoKKyAgY2FzZSBPUF9BTlk6CisgIGNhc2UgT1BfQUxMQU5ZOgorICBjYXNlIE9QX05PVFBST1A6CisgIGNhc2UgT1BfUFJPUDoKKyAgY2FzZSBPUF9BTllOTDoKKyAgY2FzZSBPUF9OT1RfSFNQQUNFOgorICBjYXNlIE9QX0hTUEFDRToKKyAgY2FzZSBPUF9OT1RfVlNQQUNFOgorICBjYXNlIE9QX1ZTUEFDRToKKyAgY2FzZSBPUF9FWFRVTkk6CisgIGNhc2UgT1BfRU9ETjoKKyAgY2FzZSBPUF9FT0Q6CisgIGNhc2UgT1BfQ0lSQzoKKyAgY2FzZSBPUF9DSVJDTToKKyAgY2FzZSBPUF9ET0xMOgorICBjYXNlIE9QX0RPTExNOgorICBjYXNlIE9QX0NSU1RBUjoKKyAgY2FzZSBPUF9DUk1JTlNUQVI6CisgIGNhc2UgT1BfQ1JQTFVTOgorICBjYXNlIE9QX0NSTUlOUExVUzoKKyAgY2FzZSBPUF9DUlFVRVJZOgorICBjYXNlIE9QX0NSTUlOUVVFUlk6CisgIGNhc2UgT1BfQ1JSQU5HRToKKyAgY2FzZSBPUF9DUk1JTlJBTkdFOgorICBjYXNlIE9QX0NSUE9TU1RBUjoKKyAgY2FzZSBPUF9DUlBPU1BMVVM6CisgIGNhc2UgT1BfQ1JQT1NRVUVSWToKKyAgY2FzZSBPUF9DUlBPU1JBTkdFOgorICBjYXNlIE9QX0NMQVNTOgorICBjYXNlIE9QX05DTEFTUzoKKyAgY2FzZSBPUF9SRUY6CisgIGNhc2UgT1BfUkVGSToKKyAgY2FzZSBPUF9ETlJFRjoKKyAgY2FzZSBPUF9ETlJFRkk6CisgIGNhc2UgT1BfUkVDVVJTRToKKyAgY2FzZSBPUF9DQUxMT1VUOgorICBjYXNlIE9QX0FMVDoKKyAgY2FzZSBPUF9LRVQ6CisgIGNhc2UgT1BfS0VUUk1BWDoKKyAgY2FzZSBPUF9LRVRSTUlOOgorICBjYXNlIE9QX0tFVFJQT1M6CisgIGNhc2UgT1BfUkVWRVJTRToKKyAgY2FzZSBPUF9BU1NFUlQ6CisgIGNhc2UgT1BfQVNTRVJUX05PVDoKKyAgY2FzZSBPUF9BU1NFUlRCQUNLOgorICBjYXNlIE9QX0FTU0VSVEJBQ0tfTk9UOgorICBjYXNlIE9QX09OQ0U6CisgIGNhc2UgT1BfT05DRV9OQzoKKyAgY2FzZSBPUF9CUkE6CisgIGNhc2UgT1BfQlJBUE9TOgorICBjYXNlIE9QX0NCUkE6CisgIGNhc2UgT1BfQ0JSQVBPUzoKKyAgY2FzZSBPUF9DT05EOgorICBjYXNlIE9QX1NCUkE6CisgIGNhc2UgT1BfU0JSQVBPUzoKKyAgY2FzZSBPUF9TQ0JSQToKKyAgY2FzZSBPUF9TQ0JSQVBPUzoKKyAgY2FzZSBPUF9TQ09ORDoKKyAgY2FzZSBPUF9DUkVGOgorICBjYXNlIE9QX0ROQ1JFRjoKKyAgY2FzZSBPUF9SUkVGOgorICBjYXNlIE9QX0ROUlJFRjoKKyAgY2FzZSBPUF9GQUxTRToKKyAgY2FzZSBPUF9UUlVFOgorICBjYXNlIE9QX0JSQVpFUk86CisgIGNhc2UgT1BfQlJBTUlOWkVSTzoKKyAgY2FzZSBPUF9CUkFQT1NaRVJPOgorICBjYXNlIE9QX1BSVU5FOgorICBjYXNlIE9QX1NLSVA6CisgIGNhc2UgT1BfVEhFTjoKKyAgY2FzZSBPUF9DT01NSVQ6CisgIGNhc2UgT1BfRkFJTDoKKyAgY2FzZSBPUF9BQ0NFUFQ6CisgIGNhc2UgT1BfQVNTRVJUX0FDQ0VQVDoKKyAgY2FzZSBPUF9DTE9TRToKKyAgY2FzZSBPUF9TS0lQWkVSTzoKKyAgcmV0dXJuIGNjICsgUFJJVihPUF9sZW5ndGhzKVsqY2NdOworCisgIGNhc2UgT1BfQ0hBUjoKKyAgY2FzZSBPUF9DSEFSSToKKyAgY2FzZSBPUF9OT1Q6CisgIGNhc2UgT1BfTk9USToKKyAgY2FzZSBPUF9TVEFSOgorICBjYXNlIE9QX01JTlNUQVI6CisgIGNhc2UgT1BfUExVUzoKKyAgY2FzZSBPUF9NSU5QTFVTOgorICBjYXNlIE9QX1FVRVJZOgorICBjYXNlIE9QX01JTlFVRVJZOgorICBjYXNlIE9QX1VQVE86CisgIGNhc2UgT1BfTUlOVVBUTzoKKyAgY2FzZSBPUF9FWEFDVDoKKyAgY2FzZSBPUF9QT1NTVEFSOgorICBjYXNlIE9QX1BPU1BMVVM6CisgIGNhc2UgT1BfUE9TUVVFUlk6CisgIGNhc2UgT1BfUE9TVVBUTzoKKyAgY2FzZSBPUF9TVEFSSToKKyAgY2FzZSBPUF9NSU5TVEFSSToKKyAgY2FzZSBPUF9QTFVTSToKKyAgY2FzZSBPUF9NSU5QTFVTSToKKyAgY2FzZSBPUF9RVUVSWUk6CisgIGNhc2UgT1BfTUlOUVVFUllJOgorICBjYXNlIE9QX1VQVE9JOgorICBjYXNlIE9QX01JTlVQVE9JOgorICBjYXNlIE9QX0VYQUNUSToKKyAgY2FzZSBPUF9QT1NTVEFSSToKKyAgY2FzZSBPUF9QT1NQTFVTSToKKyAgY2FzZSBPUF9QT1NRVUVSWUk6CisgIGNhc2UgT1BfUE9TVVBUT0k6CisgIGNhc2UgT1BfTk9UU1RBUjoKKyAgY2FzZSBPUF9OT1RNSU5TVEFSOgorICBjYXNlIE9QX05PVFBMVVM6CisgIGNhc2UgT1BfTk9UTUlOUExVUzoKKyAgY2FzZSBPUF9OT1RRVUVSWToKKyAgY2FzZSBPUF9OT1RNSU5RVUVSWToKKyAgY2FzZSBPUF9OT1RVUFRPOgorICBjYXNlIE9QX05PVE1JTlVQVE86CisgIGNhc2UgT1BfTk9URVhBQ1Q6CisgIGNhc2UgT1BfTk9UUE9TU1RBUjoKKyAgY2FzZSBPUF9OT1RQT1NQTFVTOgorICBjYXNlIE9QX05PVFBPU1FVRVJZOgorICBjYXNlIE9QX05PVFBPU1VQVE86CisgIGNhc2UgT1BfTk9UU1RBUkk6CisgIGNhc2UgT1BfTk9UTUlOU1RBUkk6CisgIGNhc2UgT1BfTk9UUExVU0k6CisgIGNhc2UgT1BfTk9UTUlOUExVU0k6CisgIGNhc2UgT1BfTk9UUVVFUllJOgorICBjYXNlIE9QX05PVE1JTlFVRVJZSToKKyAgY2FzZSBPUF9OT1RVUFRPSToKKyAgY2FzZSBPUF9OT1RNSU5VUFRPSToKKyAgY2FzZSBPUF9OT1RFWEFDVEk6CisgIGNhc2UgT1BfTk9UUE9TU1RBUkk6CisgIGNhc2UgT1BfTk9UUE9TUExVU0k6CisgIGNhc2UgT1BfTk9UUE9TUVVFUllJOgorICBjYXNlIE9QX05PVFBPU1VQVE9JOgorICBjYyArPSBQUklWKE9QX2xlbmd0aHMpWypjY107CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgIGlmIChjb21tb24tPnV0ZiAmJiBIQVNfRVhUUkFMRU4oY2NbLTFdKSkgY2MgKz0gR0VUX0VYVFJBTEVOKGNjWy0xXSk7CisjZW5kaWYKKyAgcmV0dXJuIGNjOworCisgIC8qIFNwZWNpYWwgY2FzZXMuICovCisgIGNhc2UgT1BfVFlQRVNUQVI6CisgIGNhc2UgT1BfVFlQRU1JTlNUQVI6CisgIGNhc2UgT1BfVFlQRVBMVVM6CisgIGNhc2UgT1BfVFlQRU1JTlBMVVM6CisgIGNhc2UgT1BfVFlQRVFVRVJZOgorICBjYXNlIE9QX1RZUEVNSU5RVUVSWToKKyAgY2FzZSBPUF9UWVBFVVBUTzoKKyAgY2FzZSBPUF9UWVBFTUlOVVBUTzoKKyAgY2FzZSBPUF9UWVBFRVhBQ1Q6CisgIGNhc2UgT1BfVFlQRVBPU1NUQVI6CisgIGNhc2UgT1BfVFlQRVBPU1BMVVM6CisgIGNhc2UgT1BfVFlQRVBPU1FVRVJZOgorICBjYXNlIE9QX1RZUEVQT1NVUFRPOgorICByZXR1cm4gY2MgKyBQUklWKE9QX2xlbmd0aHMpWypjY10gLSAxOworCisgIGNhc2UgT1BfQU5ZQllURToKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgaWYgKGNvbW1vbi0+dXRmKSByZXR1cm4gTlVMTDsKKyNlbmRpZgorICByZXR1cm4gY2MgKyAxOworCisgIGNhc2UgT1BfQ0FMTE9VVF9TVFI6CisgIHJldHVybiBjYyArIEdFVChjYywgMSArIDIqTElOS19TSVpFKTsKKworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFIHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgIGNhc2UgT1BfWENMQVNTOgorICByZXR1cm4gY2MgKyBHRVQoY2MsIDEpOworI2VuZGlmCisKKyAgY2FzZSBPUF9NQVJLOgorICBjYXNlIE9QX1BSVU5FX0FSRzoKKyAgY2FzZSBPUF9TS0lQX0FSRzoKKyAgY2FzZSBPUF9USEVOX0FSRzoKKyAgcmV0dXJuIGNjICsgMSArIDIgKyBjY1sxXTsKKworICBkZWZhdWx0OgorICAvKiBBbGwgb3Bjb2RlcyBhcmUgc3VwcG9ydGVkIG5vdyEgKi8KKyAgU0xKSVRfQVNTRVJUX1NUT1AoKTsKKyAgcmV0dXJuIE5VTEw7CisgIH0KK30KKworc3RhdGljIEJPT0wgY2hlY2tfb3Bjb2RlX3R5cGVzKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBQQ1JFMl9TUFRSIGNjZW5kKQoreworaW50IGNvdW50OworUENSRTJfU1BUUiBzbG90OworUENSRTJfU1BUUiBhc3NlcnRfYmFja19lbmQgPSBjYyAtIDE7CisKKy8qIENhbGN1bGF0ZSBpbXBvcnRhbnQgdmFyaWFibGVzIChsaWtlIHN0YWNrIHNpemUpIGFuZCBjaGVja3Mgd2hldGhlciBhbGwgb3Bjb2RlcyBhcmUgc3VwcG9ydGVkLiAqLword2hpbGUgKGNjIDwgY2NlbmQpCisgIHsKKyAgc3dpdGNoKCpjYykKKyAgICB7CisgICAgY2FzZSBPUF9TRVRfU09NOgorICAgIGNvbW1vbi0+aGFzX3NldF9zb20gPSBUUlVFOworICAgIGNvbW1vbi0+bWlnaHRfYmVfZW1wdHkgPSBUUlVFOworICAgIGNjICs9IDE7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1JFRjoKKyAgICBjYXNlIE9QX1JFRkk6CisgICAgY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXRbR0VUMihjYywgMSldID0gMDsKKyAgICBjYyArPSAxICsgSU1NMl9TSVpFOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9DQlJBUE9TOgorICAgIGNhc2UgT1BfU0NCUkFQT1M6CisgICAgY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXRbR0VUMihjYywgMSArIExJTktfU0laRSldID0gMDsKKyAgICBjYyArPSAxICsgTElOS19TSVpFICsgSU1NMl9TSVpFOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9DT05EOgorICAgIGNhc2UgT1BfU0NPTkQ6CisgICAgLyogT25seSBBVVRPX0NBTExPVVQgY2FuIGluc2VydCB0aGlzIG9wY29kZS4gV2UgZG8KKyAgICAgICBub3QgaW50ZW5kIHRvIHN1cHBvcnQgdGhpcyBjYXNlLiAqLworICAgIGlmIChjY1sxICsgTElOS19TSVpFXSA9PSBPUF9DQUxMT1VUIHx8IGNjWzEgKyBMSU5LX1NJWkVdID09IE9QX0NBTExPVVRfU1RSKQorICAgICAgcmV0dXJuIEZBTFNFOworICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NSRUY6CisgICAgY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXRbR0VUMihjYywgMSldID0gMDsKKyAgICBjYyArPSAxICsgSU1NMl9TSVpFOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9ETlJFRjoKKyAgICBjYXNlIE9QX0ROUkVGSToKKyAgICBjYXNlIE9QX0ROQ1JFRjoKKyAgICBjb3VudCA9IEdFVDIoY2MsIDEgKyBJTU0yX1NJWkUpOworICAgIHNsb3QgPSBjb21tb24tPm5hbWVfdGFibGUgKyBHRVQyKGNjLCAxKSAqIGNvbW1vbi0+bmFtZV9lbnRyeV9zaXplOworICAgIHdoaWxlIChjb3VudC0tID4gMCkKKyAgICAgIHsKKyAgICAgIGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0W0dFVDIoc2xvdCwgMCldID0gMDsKKyAgICAgIHNsb3QgKz0gY29tbW9uLT5uYW1lX2VudHJ5X3NpemU7CisgICAgICB9CisgICAgY2MgKz0gMSArIDIgKiBJTU0yX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1JFQ1VSU0U6CisgICAgLyogU2V0IGl0cyB2YWx1ZSBvbmx5IG9uY2UuICovCisgICAgaWYgKGNvbW1vbi0+cmVjdXJzaXZlX2hlYWRfcHRyID09IDApCisgICAgICB7CisgICAgICBjb21tb24tPnJlY3Vyc2l2ZV9oZWFkX3B0ciA9IGNvbW1vbi0+b3ZlY3Rvcl9zdGFydDsKKyAgICAgIGNvbW1vbi0+b3ZlY3Rvcl9zdGFydCArPSBzaXplb2Yoc2xqaXRfc3cpOworICAgICAgfQorICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NBTExPVVQ6CisgICAgY2FzZSBPUF9DQUxMT1VUX1NUUjoKKyAgICBpZiAoY29tbW9uLT5jYXB0dXJlX2xhc3RfcHRyID09IDApCisgICAgICB7CisgICAgICBjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgPSBjb21tb24tPm92ZWN0b3Jfc3RhcnQ7CisgICAgICBjb21tb24tPm92ZWN0b3Jfc3RhcnQgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKyAgICAgIH0KKyAgICBjYyArPSAoKmNjID09IE9QX0NBTExPVVQpID8gUFJJVihPUF9sZW5ndGhzKVtPUF9DQUxMT1VUXSA6IEdFVChjYywgMSArIDIqTElOS19TSVpFKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQVNTRVJUQkFDSzoKKyAgICBzbG90ID0gYnJhY2tldGVuZChjYyk7CisgICAgaWYgKHNsb3QgPiBhc3NlcnRfYmFja19lbmQpCisgICAgICBhc3NlcnRfYmFja19lbmQgPSBzbG90OworICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1RIRU5fQVJHOgorICAgIGNvbW1vbi0+aGFzX3RoZW4gPSBUUlVFOworICAgIGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0ciA9IDE7CisgICAgLyogRmFsbCB0aHJvdWdoLiAqLworCisgICAgY2FzZSBPUF9QUlVORV9BUkc6CisgICAgY2FzZSBPUF9NQVJLOgorICAgIGlmIChjb21tb24tPm1hcmtfcHRyID09IDApCisgICAgICB7CisgICAgICBjb21tb24tPm1hcmtfcHRyID0gY29tbW9uLT5vdmVjdG9yX3N0YXJ0OworICAgICAgY29tbW9uLT5vdmVjdG9yX3N0YXJ0ICs9IHNpemVvZihzbGppdF9zdyk7CisgICAgICB9CisgICAgY2MgKz0gMSArIDIgKyBjY1sxXTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfVEhFTjoKKyAgICBjb21tb24tPmhhc190aGVuID0gVFJVRTsKKyAgICBjb21tb24tPmNvbnRyb2xfaGVhZF9wdHIgPSAxOworICAgIGNjICs9IDE7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1NLSVA6CisgICAgaWYgKGNjIDwgYXNzZXJ0X2JhY2tfZW5kKQorICAgICAgY29tbW9uLT5oYXNfc2tpcF9pbl9hc3NlcnRfYmFjayA9IFRSVUU7CisgICAgY2MgKz0gMTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfU0tJUF9BUkc6CisgICAgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyID0gMTsKKyAgICBjb21tb24tPmhhc19za2lwX2FyZyA9IFRSVUU7CisgICAgaWYgKGNjIDwgYXNzZXJ0X2JhY2tfZW5kKQorICAgICAgY29tbW9uLT5oYXNfc2tpcF9pbl9hc3NlcnRfYmFjayA9IFRSVUU7CisgICAgY2MgKz0gMSArIDIgKyBjY1sxXTsKKyAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgY2MgPSBuZXh0X29wY29kZShjb21tb24sIGNjKTsKKyAgICBpZiAoY2MgPT0gTlVMTCkKKyAgICAgIHJldHVybiBGQUxTRTsKKyAgICBicmVhazsKKyAgICB9CisgIH0KK3JldHVybiBUUlVFOworfQorCitzdGF0aWMgQk9PTCBpc19hY2NlbGVyYXRlZF9yZXBlYXQoUENSRTJfU1BUUiBjYykKK3sKK3N3aXRjaCgqY2MpCisgIHsKKyAgY2FzZSBPUF9UWVBFU1RBUjoKKyAgY2FzZSBPUF9UWVBFTUlOU1RBUjoKKyAgY2FzZSBPUF9UWVBFUExVUzoKKyAgY2FzZSBPUF9UWVBFTUlOUExVUzoKKyAgY2FzZSBPUF9UWVBFUE9TU1RBUjoKKyAgY2FzZSBPUF9UWVBFUE9TUExVUzoKKyAgcmV0dXJuIChjY1sxXSAhPSBPUF9BTllOTCAmJiBjY1sxXSAhPSBPUF9FWFRVTkkpOworCisgIGNhc2UgT1BfU1RBUjoKKyAgY2FzZSBPUF9NSU5TVEFSOgorICBjYXNlIE9QX1BMVVM6CisgIGNhc2UgT1BfTUlOUExVUzoKKyAgY2FzZSBPUF9QT1NTVEFSOgorICBjYXNlIE9QX1BPU1BMVVM6CisKKyAgY2FzZSBPUF9TVEFSSToKKyAgY2FzZSBPUF9NSU5TVEFSSToKKyAgY2FzZSBPUF9QTFVTSToKKyAgY2FzZSBPUF9NSU5QTFVTSToKKyAgY2FzZSBPUF9QT1NTVEFSSToKKyAgY2FzZSBPUF9QT1NQTFVTSToKKworICBjYXNlIE9QX05PVFNUQVI6CisgIGNhc2UgT1BfTk9UTUlOU1RBUjoKKyAgY2FzZSBPUF9OT1RQTFVTOgorICBjYXNlIE9QX05PVE1JTlBMVVM6CisgIGNhc2UgT1BfTk9UUE9TU1RBUjoKKyAgY2FzZSBPUF9OT1RQT1NQTFVTOgorCisgIGNhc2UgT1BfTk9UU1RBUkk6CisgIGNhc2UgT1BfTk9UTUlOU1RBUkk6CisgIGNhc2UgT1BfTk9UUExVU0k6CisgIGNhc2UgT1BfTk9UTUlOUExVU0k6CisgIGNhc2UgT1BfTk9UUE9TU1RBUkk6CisgIGNhc2UgT1BfTk9UUE9TUExVU0k6CisgIHJldHVybiBUUlVFOworCisgIGNhc2UgT1BfQ0xBU1M6CisgIGNhc2UgT1BfTkNMQVNTOgorI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFIHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgIGNhc2UgT1BfWENMQVNTOgorICBjYyArPSAoKmNjID09IE9QX1hDTEFTUykgPyBHRVQoY2MsIDEpIDogKGludCkoMSArICgzMiAvIHNpemVvZihQQ1JFMl9VQ0hBUikpKTsKKyNlbHNlCisgIGNjICs9ICgxICsgKDMyIC8gc2l6ZW9mKFBDUkUyX1VDSEFSKSkpOworI2VuZGlmCisKKyAgc3dpdGNoKCpjYykKKyAgICB7CisgICAgY2FzZSBPUF9DUlNUQVI6CisgICAgY2FzZSBPUF9DUk1JTlNUQVI6CisgICAgY2FzZSBPUF9DUlBMVVM6CisgICAgY2FzZSBPUF9DUk1JTlBMVVM6CisgICAgY2FzZSBPUF9DUlBPU1NUQVI6CisgICAgY2FzZSBPUF9DUlBPU1BMVVM6CisgICAgcmV0dXJuIFRSVUU7CisgICAgfQorICBicmVhazsKKyAgfQorcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIEJPT0wgZGV0ZWN0X2Zhc3RfZm9yd2FyZF9za2lwKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBpbnQgKnByaXZhdGVfZGF0YV9zdGFydCkKK3sKK1BDUkUyX1NQVFIgY2MgPSBjb21tb24tPnN0YXJ0OworUENSRTJfU1BUUiBlbmQ7CisKKy8qIFNraXAgbm90IHJlcGVhdGVkIGJyYWNrZXRzLiAqLword2hpbGUgKFRSVUUpCisgIHsKKyAgc3dpdGNoKCpjYykKKyAgICB7CisgICAgY2FzZSBPUF9TT0Q6CisgICAgY2FzZSBPUF9TT006CisgICAgY2FzZSBPUF9TRVRfU09NOgorICAgIGNhc2UgT1BfTk9UX1dPUkRfQk9VTkRBUlk6CisgICAgY2FzZSBPUF9XT1JEX0JPVU5EQVJZOgorICAgIGNhc2UgT1BfRU9ETjoKKyAgICBjYXNlIE9QX0VPRDoKKyAgICBjYXNlIE9QX0NJUkM6CisgICAgY2FzZSBPUF9DSVJDTToKKyAgICBjYXNlIE9QX0RPTEw6CisgICAgY2FzZSBPUF9ET0xMTToKKyAgICAvKiBaZXJvIHdpZHRoIGFzc2VydGlvbnMuICovCisgICAgY2MrKzsKKyAgICBjb250aW51ZTsKKyAgICB9CisKKyAgaWYgKCpjYyAhPSBPUF9CUkEgJiYgKmNjICE9IE9QX0NCUkEpCisgICAgYnJlYWs7CisKKyAgZW5kID0gY2MgKyBHRVQoY2MsIDEpOworICBpZiAoKmVuZCAhPSBPUF9LRVQgfHwgUFJJVkFURV9EQVRBKGVuZCkgIT0gMCkKKyAgICByZXR1cm4gRkFMU0U7CisgIGlmICgqY2MgPT0gT1BfQ0JSQSkKKyAgICB7CisgICAgaWYgKGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0W0dFVDIoY2MsIDEgKyBMSU5LX1NJWkUpXSA9PSAwKQorICAgICAgcmV0dXJuIEZBTFNFOworICAgIGNjICs9IElNTTJfU0laRTsKKyAgICB9CisgIGNjICs9IDEgKyBMSU5LX1NJWkU7CisgIH0KKworaWYgKGlzX2FjY2VsZXJhdGVkX3JlcGVhdChjYykpCisgIHsKKyAgY29tbW9uLT5mYXN0X2ZvcndhcmRfYmNfcHRyID0gY2M7CisgIGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnNbKGNjICsgMSkgLSBjb21tb24tPnN0YXJ0XSA9ICpwcml2YXRlX2RhdGFfc3RhcnQ7CisgICpwcml2YXRlX2RhdGFfc3RhcnQgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKyAgcmV0dXJuIFRSVUU7CisgIH0KK3JldHVybiBGQUxTRTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGRldGVjdF9mYXN0X2ZhaWwoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIGludCAqcHJpdmF0ZV9kYXRhX3N0YXJ0LCBzbGppdF9zaSBkZXB0aCkKK3sKKyAgUENSRTJfU1BUUiBuZXh0X2FsdDsKKworICBTTEpJVF9BU1NFUlQoKmNjID09IE9QX0JSQSB8fCAqY2MgPT0gT1BfQ0JSQSk7CisKKyAgaWYgKCpjYyA9PSBPUF9DQlJBICYmIGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0W0dFVDIoY2MsIDEgKyBMSU5LX1NJWkUpXSA9PSAwKQorICAgIHJldHVybjsKKworICBuZXh0X2FsdCA9IGJyYWNrZXRlbmQoY2MpIC0gKDEgKyBMSU5LX1NJWkUpOworICBpZiAoKm5leHRfYWx0ICE9IE9QX0tFVCB8fCBQUklWQVRFX0RBVEEobmV4dF9hbHQpICE9IDApCisgICAgcmV0dXJuOworCisgIGRvCisgICAgeworICAgIG5leHRfYWx0ID0gY2MgKyBHRVQoY2MsIDEpOworCisgICAgY2MgKz0gMSArIExJTktfU0laRSArICgoKmNjID09IE9QX0NCUkEpID8gSU1NMl9TSVpFIDogMCk7CisKKyAgICB3aGlsZSAoVFJVRSkKKyAgICAgIHsKKyAgICAgIHN3aXRjaCgqY2MpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPUF9TT0Q6CisgICAgICAgIGNhc2UgT1BfU09NOgorICAgICAgICBjYXNlIE9QX1NFVF9TT006CisgICAgICAgIGNhc2UgT1BfTk9UX1dPUkRfQk9VTkRBUlk6CisgICAgICAgIGNhc2UgT1BfV09SRF9CT1VOREFSWToKKyAgICAgICAgY2FzZSBPUF9FT0ROOgorICAgICAgICBjYXNlIE9QX0VPRDoKKyAgICAgICAgY2FzZSBPUF9DSVJDOgorICAgICAgICBjYXNlIE9QX0NJUkNNOgorICAgICAgICBjYXNlIE9QX0RPTEw6CisgICAgICAgIGNhc2UgT1BfRE9MTE06CisgICAgICAgIC8qIFplcm8gd2lkdGggYXNzZXJ0aW9ucy4gKi8KKyAgICAgICAgY2MrKzsKKyAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgaWYgKGRlcHRoID4gMCAmJiAoKmNjID09IE9QX0JSQSB8fCAqY2MgPT0gT1BfQ0JSQSkpCisgICAgICBkZXRlY3RfZmFzdF9mYWlsKGNvbW1vbiwgY2MsIHByaXZhdGVfZGF0YV9zdGFydCwgZGVwdGggLSAxKTsKKworICAgIGlmIChpc19hY2NlbGVyYXRlZF9yZXBlYXQoY2MpKQorICAgICAgeworICAgICAgY29tbW9uLT5wcml2YXRlX2RhdGFfcHRyc1soY2MgKyAxKSAtIGNvbW1vbi0+c3RhcnRdID0gKnByaXZhdGVfZGF0YV9zdGFydDsKKworICAgICAgaWYgKGNvbW1vbi0+ZmFzdF9mYWlsX3N0YXJ0X3B0ciA9PSAwKQorICAgICAgICBjb21tb24tPmZhc3RfZmFpbF9zdGFydF9wdHIgPSAqcHJpdmF0ZV9kYXRhX3N0YXJ0OworCisgICAgICAqcHJpdmF0ZV9kYXRhX3N0YXJ0ICs9IHNpemVvZihzbGppdF9zdyk7CisgICAgICBjb21tb24tPmZhc3RfZmFpbF9lbmRfcHRyID0gKnByaXZhdGVfZGF0YV9zdGFydDsKKworICAgICAgaWYgKCpwcml2YXRlX2RhdGFfc3RhcnQgPiBTTEpJVF9NQVhfTE9DQUxfU0laRSkKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCisgICAgY2MgPSBuZXh0X2FsdDsKKyAgICB9CisgIHdoaWxlICgqY2MgPT0gT1BfQUxUKTsKK30KKworc3RhdGljIGludCBnZXRfY2xhc3NfaXRlcmF0b3Jfc2l6ZShQQ1JFMl9TUFRSIGNjKQoreworc2xqaXRfdWkgbWluOworc2xqaXRfdWkgbWF4Oworc3dpdGNoKCpjYykKKyAgeworICBjYXNlIE9QX0NSU1RBUjoKKyAgY2FzZSBPUF9DUlBMVVM6CisgIHJldHVybiAyOworCisgIGNhc2UgT1BfQ1JNSU5TVEFSOgorICBjYXNlIE9QX0NSTUlOUExVUzoKKyAgY2FzZSBPUF9DUlFVRVJZOgorICBjYXNlIE9QX0NSTUlOUVVFUlk6CisgIHJldHVybiAxOworCisgIGNhc2UgT1BfQ1JSQU5HRToKKyAgY2FzZSBPUF9DUk1JTlJBTkdFOgorICBtaW4gPSBHRVQyKGNjLCAxKTsKKyAgbWF4ID0gR0VUMihjYywgMSArIElNTTJfU0laRSk7CisgIGlmIChtYXggPT0gMCkKKyAgICByZXR1cm4gKCpjYyA9PSBPUF9DUlJBTkdFKSA/IDIgOiAxOworICBtYXggLT0gbWluOworICBpZiAobWF4ID4gMikKKyAgICBtYXggPSAyOworICByZXR1cm4gbWF4OworCisgIGRlZmF1bHQ6CisgIHJldHVybiAwOworICB9Cit9CisKK3N0YXRpYyBCT09MIGRldGVjdF9yZXBlYXQoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgYmVnaW4pCit7CitQQ1JFMl9TUFRSIGVuZCA9IGJyYWNrZXRlbmQoYmVnaW4pOworUENSRTJfU1BUUiBuZXh0OworUENSRTJfU1BUUiBuZXh0X2VuZDsKK1BDUkUyX1NQVFIgbWF4X2VuZDsKK1BDUkUyX1VDSEFSIHR5cGU7CitzbGppdF9zdyBsZW5ndGggPSBlbmQgLSBiZWdpbjsKK3Nsaml0X3NpIG1pbiwgbWF4LCBpOworCisvKiBEZXRlY3QgZml4ZWQgaXRlcmF0aW9ucyBmaXJzdC4gKi8KK2lmIChlbmRbLSgxICsgTElOS19TSVpFKV0gIT0gT1BfS0VUKQorICByZXR1cm4gRkFMU0U7CisKKy8qIEFscmVhZHkgZGV0ZWN0ZWQgcmVwZWF0LiAqLworaWYgKGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnNbZW5kIC0gY29tbW9uLT5zdGFydCAtIExJTktfU0laRV0gIT0gMCkKKyAgcmV0dXJuIFRSVUU7CisKK25leHQgPSBlbmQ7CittaW4gPSAxOword2hpbGUgKDEpCisgIHsKKyAgaWYgKCpuZXh0ICE9ICpiZWdpbikKKyAgICBicmVhazsKKyAgbmV4dF9lbmQgPSBicmFja2V0ZW5kKG5leHQpOworICBpZiAobmV4dF9lbmQgLSBuZXh0ICE9IGxlbmd0aCB8fCBtZW1jbXAoYmVnaW4sIG5leHQsIElOX1VDSEFSUyhsZW5ndGgpKSAhPSAwKQorICAgIGJyZWFrOworICBuZXh0ID0gbmV4dF9lbmQ7CisgIG1pbisrOworICB9CisKK2lmIChtaW4gPT0gMikKKyAgcmV0dXJuIEZBTFNFOworCittYXggPSAwOworbWF4X2VuZCA9IG5leHQ7CitpZiAoKm5leHQgPT0gT1BfQlJBWkVSTyB8fCAqbmV4dCA9PSBPUF9CUkFNSU5aRVJPKQorICB7CisgIHR5cGUgPSAqbmV4dDsKKyAgd2hpbGUgKDEpCisgICAgeworICAgIGlmIChuZXh0WzBdICE9IHR5cGUgfHwgbmV4dFsxXSAhPSBPUF9CUkEgfHwgbmV4dFsyICsgTElOS19TSVpFXSAhPSAqYmVnaW4pCisgICAgICBicmVhazsKKyAgICBuZXh0X2VuZCA9IGJyYWNrZXRlbmQobmV4dCArIDIgKyBMSU5LX1NJWkUpOworICAgIGlmIChuZXh0X2VuZCAtIG5leHQgIT0gKGxlbmd0aCArIDIgKyBMSU5LX1NJWkUpIHx8IG1lbWNtcChiZWdpbiwgbmV4dCArIDIgKyBMSU5LX1NJWkUsIElOX1VDSEFSUyhsZW5ndGgpKSAhPSAwKQorICAgICAgYnJlYWs7CisgICAgbmV4dCA9IG5leHRfZW5kOworICAgIG1heCsrOworICAgIH0KKworICBpZiAobmV4dFswXSA9PSB0eXBlICYmIG5leHRbMV0gPT0gKmJlZ2luICYmIG1heCA+PSAxKQorICAgIHsKKyAgICBuZXh0X2VuZCA9IGJyYWNrZXRlbmQobmV4dCArIDEpOworICAgIGlmIChuZXh0X2VuZCAtIG5leHQgPT0gKGxlbmd0aCArIDEpICYmIG1lbWNtcChiZWdpbiwgbmV4dCArIDEsIElOX1VDSEFSUyhsZW5ndGgpKSA9PSAwKQorICAgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IG1heDsgaSsrLCBuZXh0X2VuZCArPSAxICsgTElOS19TSVpFKQorICAgICAgICBpZiAoKm5leHRfZW5kICE9IE9QX0tFVCkKKyAgICAgICAgICBicmVhazsKKworICAgICAgaWYgKGkgPT0gbWF4KQorICAgICAgICB7CisgICAgICAgIGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnNbbWF4X2VuZCAtIGNvbW1vbi0+c3RhcnQgLSBMSU5LX1NJWkVdID0gbmV4dF9lbmQgLSBtYXhfZW5kOworICAgICAgICBjb21tb24tPnByaXZhdGVfZGF0YV9wdHJzW21heF9lbmQgLSBjb21tb24tPnN0YXJ0IC0gTElOS19TSVpFICsgMV0gPSAodHlwZSA9PSBPUF9CUkFaRVJPKSA/IE9QX1VQVE8gOiBPUF9NSU5VUFRPOworICAgICAgICAvKiArMiB0aGUgb3JpZ2luYWwgYW5kIHRoZSBsYXN0LiAqLworICAgICAgICBjb21tb24tPnByaXZhdGVfZGF0YV9wdHJzW21heF9lbmQgLSBjb21tb24tPnN0YXJ0IC0gTElOS19TSVpFICsgMl0gPSBtYXggKyAyOworICAgICAgICBpZiAobWluID09IDEpCisgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIG1pbi0tOworICAgICAgICBtYXhfZW5kIC09ICgxICsgTElOS19TSVpFKSArIEdFVChtYXhfZW5kLCAtTElOS19TSVpFKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCitpZiAobWluID49IDMpCisgIHsKKyAgY29tbW9uLT5wcml2YXRlX2RhdGFfcHRyc1tlbmQgLSBjb21tb24tPnN0YXJ0IC0gTElOS19TSVpFXSA9IG1heF9lbmQgLSBlbmQ7CisgIGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnNbZW5kIC0gY29tbW9uLT5zdGFydCAtIExJTktfU0laRSArIDFdID0gT1BfRVhBQ1Q7CisgIGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnNbZW5kIC0gY29tbW9uLT5zdGFydCAtIExJTktfU0laRSArIDJdID0gbWluOworICByZXR1cm4gVFJVRTsKKyAgfQorCityZXR1cm4gRkFMU0U7Cit9CisKKyNkZWZpbmUgQ0FTRV9JVEVSQVRPUl9QUklWQVRFX0RBVEFfMSBcCisgICAgY2FzZSBPUF9NSU5TVEFSOiBcCisgICAgY2FzZSBPUF9NSU5QTFVTOiBcCisgICAgY2FzZSBPUF9RVUVSWTogXAorICAgIGNhc2UgT1BfTUlOUVVFUlk6IFwKKyAgICBjYXNlIE9QX01JTlNUQVJJOiBcCisgICAgY2FzZSBPUF9NSU5QTFVTSTogXAorICAgIGNhc2UgT1BfUVVFUllJOiBcCisgICAgY2FzZSBPUF9NSU5RVUVSWUk6IFwKKyAgICBjYXNlIE9QX05PVE1JTlNUQVI6IFwKKyAgICBjYXNlIE9QX05PVE1JTlBMVVM6IFwKKyAgICBjYXNlIE9QX05PVFFVRVJZOiBcCisgICAgY2FzZSBPUF9OT1RNSU5RVUVSWTogXAorICAgIGNhc2UgT1BfTk9UTUlOU1RBUkk6IFwKKyAgICBjYXNlIE9QX05PVE1JTlBMVVNJOiBcCisgICAgY2FzZSBPUF9OT1RRVUVSWUk6IFwKKyAgICBjYXNlIE9QX05PVE1JTlFVRVJZSToKKworI2RlZmluZSBDQVNFX0lURVJBVE9SX1BSSVZBVEVfREFUQV8yQSBcCisgICAgY2FzZSBPUF9TVEFSOiBcCisgICAgY2FzZSBPUF9QTFVTOiBcCisgICAgY2FzZSBPUF9TVEFSSTogXAorICAgIGNhc2UgT1BfUExVU0k6IFwKKyAgICBjYXNlIE9QX05PVFNUQVI6IFwKKyAgICBjYXNlIE9QX05PVFBMVVM6IFwKKyAgICBjYXNlIE9QX05PVFNUQVJJOiBcCisgICAgY2FzZSBPUF9OT1RQTFVTSToKKworI2RlZmluZSBDQVNFX0lURVJBVE9SX1BSSVZBVEVfREFUQV8yQiBcCisgICAgY2FzZSBPUF9VUFRPOiBcCisgICAgY2FzZSBPUF9NSU5VUFRPOiBcCisgICAgY2FzZSBPUF9VUFRPSTogXAorICAgIGNhc2UgT1BfTUlOVVBUT0k6IFwKKyAgICBjYXNlIE9QX05PVFVQVE86IFwKKyAgICBjYXNlIE9QX05PVE1JTlVQVE86IFwKKyAgICBjYXNlIE9QX05PVFVQVE9JOiBcCisgICAgY2FzZSBPUF9OT1RNSU5VUFRPSToKKworI2RlZmluZSBDQVNFX0lURVJBVE9SX1RZUEVfUFJJVkFURV9EQVRBXzEgXAorICAgIGNhc2UgT1BfVFlQRU1JTlNUQVI6IFwKKyAgICBjYXNlIE9QX1RZUEVNSU5QTFVTOiBcCisgICAgY2FzZSBPUF9UWVBFUVVFUlk6IFwKKyAgICBjYXNlIE9QX1RZUEVNSU5RVUVSWToKKworI2RlZmluZSBDQVNFX0lURVJBVE9SX1RZUEVfUFJJVkFURV9EQVRBXzJBIFwKKyAgICBjYXNlIE9QX1RZUEVTVEFSOiBcCisgICAgY2FzZSBPUF9UWVBFUExVUzoKKworI2RlZmluZSBDQVNFX0lURVJBVE9SX1RZUEVfUFJJVkFURV9EQVRBXzJCIFwKKyAgICBjYXNlIE9QX1RZUEVVUFRPOiBcCisgICAgY2FzZSBPUF9UWVBFTUlOVVBUTzoKKworc3RhdGljIHZvaWQgc2V0X3ByaXZhdGVfZGF0YV9wdHJzKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBpbnQgKnByaXZhdGVfZGF0YV9zdGFydCwgUENSRTJfU1BUUiBjY2VuZCkKK3sKK1BDUkUyX1NQVFIgY2MgPSBjb21tb24tPnN0YXJ0OworUENSRTJfU1BUUiBhbHRlcm5hdGl2ZTsKK1BDUkUyX1NQVFIgZW5kID0gTlVMTDsKK2ludCBwcml2YXRlX2RhdGFfcHRyID0gKnByaXZhdGVfZGF0YV9zdGFydDsKK2ludCBzcGFjZSwgc2l6ZSwgYnJhY2tldGxlbjsKK0JPT0wgcmVwZWF0X2NoZWNrID0gVFJVRTsKKword2hpbGUgKGNjIDwgY2NlbmQpCisgIHsKKyAgc3BhY2UgPSAwOworICBzaXplID0gMDsKKyAgYnJhY2tldGxlbiA9IDA7CisgIGlmIChwcml2YXRlX2RhdGFfcHRyID4gU0xKSVRfTUFYX0xPQ0FMX1NJWkUpCisgICAgYnJlYWs7CisKKyAgaWYgKHJlcGVhdF9jaGVjayAmJiAoKmNjID09IE9QX09OQ0UgfHwgKmNjID09IE9QX09OQ0VfTkMgfHwgKmNjID09IE9QX0JSQSB8fCAqY2MgPT0gT1BfQ0JSQSB8fCAqY2MgPT0gT1BfQ09ORCkpCisgICAgeworICAgIGlmIChkZXRlY3RfcmVwZWF0KGNvbW1vbiwgY2MpKQorICAgICAgeworICAgICAgLyogVGhlc2UgYnJhY2tldHMgYXJlIGNvbnZlcnRlZCB0byByZXBlYXRzLCBzbyBubyBnbG9iYWwKKyAgICAgIGJhc2VkIHNpbmdsZSBjaGFyYWN0ZXIgcmVwZWF0IGlzIGFsbG93ZWQuICovCisgICAgICBpZiAoY2MgPj0gZW5kKQorICAgICAgICBlbmQgPSBicmFja2V0ZW5kKGNjKTsKKyAgICAgIH0KKyAgICB9CisgIHJlcGVhdF9jaGVjayA9IFRSVUU7CisKKyAgc3dpdGNoKCpjYykKKyAgICB7CisgICAgY2FzZSBPUF9LRVQ6CisgICAgaWYgKGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnNbY2MgKyAxIC0gY29tbW9uLT5zdGFydF0gIT0gMCkKKyAgICAgIHsKKyAgICAgIGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnNbY2MgLSBjb21tb24tPnN0YXJ0XSA9IHByaXZhdGVfZGF0YV9wdHI7CisgICAgICBwcml2YXRlX2RhdGFfcHRyICs9IHNpemVvZihzbGppdF9zdyk7CisgICAgICBjYyArPSBjb21tb24tPnByaXZhdGVfZGF0YV9wdHJzW2NjICsgMSAtIGNvbW1vbi0+c3RhcnRdOworICAgICAgfQorICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0FTU0VSVDoKKyAgICBjYXNlIE9QX0FTU0VSVF9OT1Q6CisgICAgY2FzZSBPUF9BU1NFUlRCQUNLOgorICAgIGNhc2UgT1BfQVNTRVJUQkFDS19OT1Q6CisgICAgY2FzZSBPUF9PTkNFOgorICAgIGNhc2UgT1BfT05DRV9OQzoKKyAgICBjYXNlIE9QX0JSQVBPUzoKKyAgICBjYXNlIE9QX1NCUkE6CisgICAgY2FzZSBPUF9TQlJBUE9TOgorICAgIGNhc2UgT1BfU0NPTkQ6CisgICAgY29tbW9uLT5wcml2YXRlX2RhdGFfcHRyc1tjYyAtIGNvbW1vbi0+c3RhcnRdID0gcHJpdmF0ZV9kYXRhX3B0cjsKKyAgICBwcml2YXRlX2RhdGFfcHRyICs9IHNpemVvZihzbGppdF9zdyk7CisgICAgYnJhY2tldGxlbiA9IDEgKyBMSU5LX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NCUkFQT1M6CisgICAgY2FzZSBPUF9TQ0JSQVBPUzoKKyAgICBjb21tb24tPnByaXZhdGVfZGF0YV9wdHJzW2NjIC0gY29tbW9uLT5zdGFydF0gPSBwcml2YXRlX2RhdGFfcHRyOworICAgIHByaXZhdGVfZGF0YV9wdHIgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKyAgICBicmFja2V0bGVuID0gMSArIExJTktfU0laRSArIElNTTJfU0laRTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQ09ORDoKKyAgICAvKiBNaWdodCBiZSBhIGhpZGRlbiBTQ09ORC4gKi8KKyAgICBhbHRlcm5hdGl2ZSA9IGNjICsgR0VUKGNjLCAxKTsKKyAgICBpZiAoKmFsdGVybmF0aXZlID09IE9QX0tFVFJNQVggfHwgKmFsdGVybmF0aXZlID09IE9QX0tFVFJNSU4pCisgICAgICB7CisgICAgICBjb21tb24tPnByaXZhdGVfZGF0YV9wdHJzW2NjIC0gY29tbW9uLT5zdGFydF0gPSBwcml2YXRlX2RhdGFfcHRyOworICAgICAgcHJpdmF0ZV9kYXRhX3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpOworICAgICAgfQorICAgIGJyYWNrZXRsZW4gPSAxICsgTElOS19TSVpFOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9CUkE6CisgICAgYnJhY2tldGxlbiA9IDEgKyBMSU5LX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NCUkE6CisgICAgY2FzZSBPUF9TQ0JSQToKKyAgICBicmFja2V0bGVuID0gMSArIExJTktfU0laRSArIElNTTJfU0laRTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQlJBWkVSTzoKKyAgICBjYXNlIE9QX0JSQU1JTlpFUk86CisgICAgY2FzZSBPUF9CUkFQT1NaRVJPOgorICAgIHJlcGVhdF9jaGVjayA9IEZBTFNFOworICAgIHNpemUgPSAxOworICAgIGJyZWFrOworCisgICAgQ0FTRV9JVEVSQVRPUl9QUklWQVRFX0RBVEFfMQorICAgIHNwYWNlID0gMTsKKyAgICBzaXplID0gLTI7CisgICAgYnJlYWs7CisKKyAgICBDQVNFX0lURVJBVE9SX1BSSVZBVEVfREFUQV8yQQorICAgIHNwYWNlID0gMjsKKyAgICBzaXplID0gLTI7CisgICAgYnJlYWs7CisKKyAgICBDQVNFX0lURVJBVE9SX1BSSVZBVEVfREFUQV8yQgorICAgIHNwYWNlID0gMjsKKyAgICBzaXplID0gLSgyICsgSU1NMl9TSVpFKTsKKyAgICBicmVhazsKKworICAgIENBU0VfSVRFUkFUT1JfVFlQRV9QUklWQVRFX0RBVEFfMQorICAgIHNwYWNlID0gMTsKKyAgICBzaXplID0gMTsKKyAgICBicmVhazsKKworICAgIENBU0VfSVRFUkFUT1JfVFlQRV9QUklWQVRFX0RBVEFfMkEKKyAgICBpZiAoY2NbMV0gIT0gT1BfQU5ZTkwgJiYgY2NbMV0gIT0gT1BfRVhUVU5JKQorICAgICAgc3BhY2UgPSAyOworICAgIHNpemUgPSAxOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9UWVBFVVBUTzoKKyAgICBpZiAoY2NbMSArIElNTTJfU0laRV0gIT0gT1BfQU5ZTkwgJiYgY2NbMSArIElNTTJfU0laRV0gIT0gT1BfRVhUVU5JKQorICAgICAgc3BhY2UgPSAyOworICAgIHNpemUgPSAxICsgSU1NMl9TSVpFOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9UWVBFTUlOVVBUTzoKKyAgICBzcGFjZSA9IDI7CisgICAgc2l6ZSA9IDEgKyBJTU0yX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NMQVNTOgorICAgIGNhc2UgT1BfTkNMQVNTOgorICAgIHNpemUgPSAxICsgMzIgLyBzaXplb2YoUENSRTJfVUNIQVIpOworICAgIHNwYWNlID0gZ2V0X2NsYXNzX2l0ZXJhdG9yX3NpemUoY2MgKyBzaXplKTsKKyAgICBicmVhazsKKworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFIHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgY2FzZSBPUF9YQ0xBU1M6CisgICAgc2l6ZSA9IEdFVChjYywgMSk7CisgICAgc3BhY2UgPSBnZXRfY2xhc3NfaXRlcmF0b3Jfc2l6ZShjYyArIHNpemUpOworICAgIGJyZWFrOworI2VuZGlmCisKKyAgICBkZWZhdWx0OgorICAgIGNjID0gbmV4dF9vcGNvZGUoY29tbW9uLCBjYyk7CisgICAgU0xKSVRfQVNTRVJUKGNjICE9IE5VTEwpOworICAgIGJyZWFrOworICAgIH0KKworICAvKiBDaGFyYWN0ZXIgaXRlcmF0b3JzLCB3aGljaCBhcmUgbm90IGluc2lkZSBhIHJlcGVhdGVkIGJyYWNrZXQsCisgICAgIGdldHMgYSBwcml2YXRlIHNsb3QgaW5zdGVhZCBvZiBhbGxvY2F0aW5nIGl0IG9uIHRoZSBzdGFjay4gKi8KKyAgaWYgKHNwYWNlID4gMCAmJiBjYyA+PSBlbmQpCisgICAgeworICAgIGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnNbY2MgLSBjb21tb24tPnN0YXJ0XSA9IHByaXZhdGVfZGF0YV9wdHI7CisgICAgcHJpdmF0ZV9kYXRhX3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpICogc3BhY2U7CisgICAgfQorCisgIGlmIChzaXplICE9IDApCisgICAgeworICAgIGlmIChzaXplIDwgMCkKKyAgICAgIHsKKyAgICAgIGNjICs9IC1zaXplOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgaWYgKGNvbW1vbi0+dXRmICYmIEhBU19FWFRSQUxFTihjY1stMV0pKSBjYyArPSBHRVRfRVhUUkFMRU4oY2NbLTFdKTsKKyNlbmRpZgorICAgICAgfQorICAgIGVsc2UKKyAgICAgIGNjICs9IHNpemU7CisgICAgfQorCisgIGlmIChicmFja2V0bGVuID4gMCkKKyAgICB7CisgICAgaWYgKGNjID49IGVuZCkKKyAgICAgIHsKKyAgICAgIGVuZCA9IGJyYWNrZXRlbmQoY2MpOworICAgICAgaWYgKGVuZFstMSAtIExJTktfU0laRV0gPT0gT1BfS0VUKQorICAgICAgICBlbmQgPSBOVUxMOworICAgICAgfQorICAgIGNjICs9IGJyYWNrZXRsZW47CisgICAgfQorICB9CisqcHJpdmF0ZV9kYXRhX3N0YXJ0ID0gcHJpdmF0ZV9kYXRhX3B0cjsKK30KKworLyogUmV0dXJucyB3aXRoIGEgZnJhbWVfdHlwZXMgKGFsd2F5cyA8IDApIGlmIG5vIG5lZWQgZm9yIGZyYW1lLiAqLworc3RhdGljIGludCBnZXRfZnJhbWVzaXplKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBQQ1JFMl9TUFRSIGNjZW5kLCBCT09MIHJlY3Vyc2l2ZSwgQk9PTCAqbmVlZHNfY29udHJvbF9oZWFkKQoreworaW50IGxlbmd0aCA9IDA7CitpbnQgcG9zc2Vzc2l2ZSA9IDA7CitCT09MIHN0YWNrX3Jlc3RvcmUgPSBGQUxTRTsKK0JPT0wgc2V0c29tX2ZvdW5kID0gcmVjdXJzaXZlOworQk9PTCBzZXRtYXJrX2ZvdW5kID0gcmVjdXJzaXZlOworLyogVGhlIGxhc3QgY2FwdHVyZSBpcyBhIGxvY2FsIHZhcmlhYmxlIGV2ZW4gZm9yIHJlY3Vyc2lvbnMuICovCitCT09MIGNhcHR1cmVfbGFzdF9mb3VuZCA9IEZBTFNFOworCisjaWYgZGVmaW5lZCBERUJVR19GT1JDRV9DT05UUk9MX0hFQUQgJiYgREVCVUdfRk9SQ0VfQ09OVFJPTF9IRUFECitTTEpJVF9BU1NFUlQoY29tbW9uLT5jb250cm9sX2hlYWRfcHRyICE9IDApOworKm5lZWRzX2NvbnRyb2xfaGVhZCA9IFRSVUU7CisjZWxzZQorKm5lZWRzX2NvbnRyb2xfaGVhZCA9IEZBTFNFOworI2VuZGlmCisKK2lmIChjY2VuZCA9PSBOVUxMKQorICB7CisgIGNjZW5kID0gYnJhY2tldGVuZChjYykgLSAoMSArIExJTktfU0laRSk7CisgIGlmICghcmVjdXJzaXZlICYmICgqY2MgPT0gT1BfQ0JSQVBPUyB8fCAqY2MgPT0gT1BfU0NCUkFQT1MpKQorICAgIHsKKyAgICBwb3NzZXNzaXZlID0gbGVuZ3RoID0gKGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0ciAhPSAwKSA/IDUgOiAzOworICAgIC8qIFRoaXMgaXMgY29ycmVjdCByZWdhcmRsZXNzIG9mIGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0ci4gKi8KKyAgICBjYXB0dXJlX2xhc3RfZm91bmQgPSBUUlVFOworICAgIH0KKyAgY2MgPSBuZXh0X29wY29kZShjb21tb24sIGNjKTsKKyAgfQorCitTTEpJVF9BU1NFUlQoY2MgIT0gTlVMTCk7Cit3aGlsZSAoY2MgPCBjY2VuZCkKKyAgc3dpdGNoKCpjYykKKyAgICB7CisgICAgY2FzZSBPUF9TRVRfU09NOgorICAgIFNMSklUX0FTU0VSVChjb21tb24tPmhhc19zZXRfc29tKTsKKyAgICBzdGFja19yZXN0b3JlID0gVFJVRTsKKyAgICBpZiAoIXNldHNvbV9mb3VuZCkKKyAgICAgIHsKKyAgICAgIGxlbmd0aCArPSAyOworICAgICAgc2V0c29tX2ZvdW5kID0gVFJVRTsKKyAgICAgIH0KKyAgICBjYyArPSAxOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9NQVJLOgorICAgIGNhc2UgT1BfUFJVTkVfQVJHOgorICAgIGNhc2UgT1BfVEhFTl9BUkc6CisgICAgU0xKSVRfQVNTRVJUKGNvbW1vbi0+bWFya19wdHIgIT0gMCk7CisgICAgc3RhY2tfcmVzdG9yZSA9IFRSVUU7CisgICAgaWYgKCFzZXRtYXJrX2ZvdW5kKQorICAgICAgeworICAgICAgbGVuZ3RoICs9IDI7CisgICAgICBzZXRtYXJrX2ZvdW5kID0gVFJVRTsKKyAgICAgIH0KKyAgICBpZiAoY29tbW9uLT5jb250cm9sX2hlYWRfcHRyICE9IDApCisgICAgICAqbmVlZHNfY29udHJvbF9oZWFkID0gVFJVRTsKKyAgICBjYyArPSAxICsgMiArIGNjWzFdOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9SRUNVUlNFOgorICAgIHN0YWNrX3Jlc3RvcmUgPSBUUlVFOworICAgIGlmIChjb21tb24tPmhhc19zZXRfc29tICYmICFzZXRzb21fZm91bmQpCisgICAgICB7CisgICAgICBsZW5ndGggKz0gMjsKKyAgICAgIHNldHNvbV9mb3VuZCA9IFRSVUU7CisgICAgICB9CisgICAgaWYgKGNvbW1vbi0+bWFya19wdHIgIT0gMCAmJiAhc2V0bWFya19mb3VuZCkKKyAgICAgIHsKKyAgICAgIGxlbmd0aCArPSAyOworICAgICAgc2V0bWFya19mb3VuZCA9IFRSVUU7CisgICAgICB9CisgICAgaWYgKGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0ciAhPSAwICYmICFjYXB0dXJlX2xhc3RfZm91bmQpCisgICAgICB7CisgICAgICBsZW5ndGggKz0gMjsKKyAgICAgIGNhcHR1cmVfbGFzdF9mb3VuZCA9IFRSVUU7CisgICAgICB9CisgICAgY2MgKz0gMSArIExJTktfU0laRTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQ0JSQToKKyAgICBjYXNlIE9QX0NCUkFQT1M6CisgICAgY2FzZSBPUF9TQ0JSQToKKyAgICBjYXNlIE9QX1NDQlJBUE9TOgorICAgIHN0YWNrX3Jlc3RvcmUgPSBUUlVFOworICAgIGlmIChjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgIT0gMCAmJiAhY2FwdHVyZV9sYXN0X2ZvdW5kKQorICAgICAgeworICAgICAgbGVuZ3RoICs9IDI7CisgICAgICBjYXB0dXJlX2xhc3RfZm91bmQgPSBUUlVFOworICAgICAgfQorICAgIGxlbmd0aCArPSAzOworICAgIGNjICs9IDEgKyBMSU5LX1NJWkUgKyBJTU0yX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1RIRU46CisgICAgc3RhY2tfcmVzdG9yZSA9IFRSVUU7CisgICAgaWYgKGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0ciAhPSAwKQorICAgICAgKm5lZWRzX2NvbnRyb2xfaGVhZCA9IFRSVUU7CisgICAgY2MgKys7CisgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgIHN0YWNrX3Jlc3RvcmUgPSBUUlVFOworICAgIC8qIEZhbGwgdGhyb3VnaC4gKi8KKworICAgIGNhc2UgT1BfTk9UX1dPUkRfQk9VTkRBUlk6CisgICAgY2FzZSBPUF9XT1JEX0JPVU5EQVJZOgorICAgIGNhc2UgT1BfTk9UX0RJR0lUOgorICAgIGNhc2UgT1BfRElHSVQ6CisgICAgY2FzZSBPUF9OT1RfV0hJVEVTUEFDRToKKyAgICBjYXNlIE9QX1dISVRFU1BBQ0U6CisgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CisgICAgY2FzZSBPUF9XT1JEQ0hBUjoKKyAgICBjYXNlIE9QX0FOWToKKyAgICBjYXNlIE9QX0FMTEFOWToKKyAgICBjYXNlIE9QX0FOWUJZVEU6CisgICAgY2FzZSBPUF9OT1RQUk9QOgorICAgIGNhc2UgT1BfUFJPUDoKKyAgICBjYXNlIE9QX0FOWU5MOgorICAgIGNhc2UgT1BfTk9UX0hTUEFDRToKKyAgICBjYXNlIE9QX0hTUEFDRToKKyAgICBjYXNlIE9QX05PVF9WU1BBQ0U6CisgICAgY2FzZSBPUF9WU1BBQ0U6CisgICAgY2FzZSBPUF9FWFRVTkk6CisgICAgY2FzZSBPUF9FT0ROOgorICAgIGNhc2UgT1BfRU9EOgorICAgIGNhc2UgT1BfQ0lSQzoKKyAgICBjYXNlIE9QX0NJUkNNOgorICAgIGNhc2UgT1BfRE9MTDoKKyAgICBjYXNlIE9QX0RPTExNOgorICAgIGNhc2UgT1BfQ0hBUjoKKyAgICBjYXNlIE9QX0NIQVJJOgorICAgIGNhc2UgT1BfTk9UOgorICAgIGNhc2UgT1BfTk9USToKKworICAgIGNhc2UgT1BfRVhBQ1Q6CisgICAgY2FzZSBPUF9QT1NTVEFSOgorICAgIGNhc2UgT1BfUE9TUExVUzoKKyAgICBjYXNlIE9QX1BPU1FVRVJZOgorICAgIGNhc2UgT1BfUE9TVVBUTzoKKworICAgIGNhc2UgT1BfRVhBQ1RJOgorICAgIGNhc2UgT1BfUE9TU1RBUkk6CisgICAgY2FzZSBPUF9QT1NQTFVTSToKKyAgICBjYXNlIE9QX1BPU1FVRVJZSToKKyAgICBjYXNlIE9QX1BPU1VQVE9JOgorCisgICAgY2FzZSBPUF9OT1RFWEFDVDoKKyAgICBjYXNlIE9QX05PVFBPU1NUQVI6CisgICAgY2FzZSBPUF9OT1RQT1NQTFVTOgorICAgIGNhc2UgT1BfTk9UUE9TUVVFUlk6CisgICAgY2FzZSBPUF9OT1RQT1NVUFRPOgorCisgICAgY2FzZSBPUF9OT1RFWEFDVEk6CisgICAgY2FzZSBPUF9OT1RQT1NTVEFSSToKKyAgICBjYXNlIE9QX05PVFBPU1BMVVNJOgorICAgIGNhc2UgT1BfTk9UUE9TUVVFUllJOgorICAgIGNhc2UgT1BfTk9UUE9TVVBUT0k6CisKKyAgICBjYXNlIE9QX1RZUEVFWEFDVDoKKyAgICBjYXNlIE9QX1RZUEVQT1NTVEFSOgorICAgIGNhc2UgT1BfVFlQRVBPU1BMVVM6CisgICAgY2FzZSBPUF9UWVBFUE9TUVVFUlk6CisgICAgY2FzZSBPUF9UWVBFUE9TVVBUTzoKKworICAgIGNhc2UgT1BfQ0xBU1M6CisgICAgY2FzZSBPUF9OQ0xBU1M6CisgICAgY2FzZSBPUF9YQ0xBU1M6CisKKyAgICBjYXNlIE9QX0NBTExPVVQ6CisgICAgY2FzZSBPUF9DQUxMT1VUX1NUUjoKKworICAgIGNjID0gbmV4dF9vcGNvZGUoY29tbW9uLCBjYyk7CisgICAgU0xKSVRfQVNTRVJUKGNjICE9IE5VTEwpOworICAgIGJyZWFrOworICAgIH0KKworLyogUG9zc2Vzc2l2ZSBxdWFudGlmaWVycyBjYW4gdXNlIGEgc3BlY2lhbCBjYXNlLiAqLworaWYgKFNMSklUX1VOTElLRUxZKHBvc3Nlc3NpdmUgPT0gbGVuZ3RoKSkKKyAgcmV0dXJuIHN0YWNrX3Jlc3RvcmUgPyBub19mcmFtZSA6IG5vX3N0YWNrOworCitpZiAobGVuZ3RoID4gMCkKKyAgcmV0dXJuIGxlbmd0aCArIDE7CityZXR1cm4gc3RhY2tfcmVzdG9yZSA/IG5vX2ZyYW1lIDogbm9fc3RhY2s7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfZnJhbWUoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIFBDUkUyX1NQVFIgY2NlbmQsIGludCBzdGFja3BvcywgaW50IHN0YWNrdG9wLCBCT09MIHJlY3Vyc2l2ZSkKK3sKK0RFRklORV9DT01QSUxFUjsKK0JPT0wgc2V0c29tX2ZvdW5kID0gcmVjdXJzaXZlOworQk9PTCBzZXRtYXJrX2ZvdW5kID0gcmVjdXJzaXZlOworLyogVGhlIGxhc3QgY2FwdHVyZSBpcyBhIGxvY2FsIHZhcmlhYmxlIGV2ZW4gZm9yIHJlY3Vyc2lvbnMuICovCitCT09MIGNhcHR1cmVfbGFzdF9mb3VuZCA9IEZBTFNFOworaW50IG9mZnNldDsKKworLyogPj0gMSArIHNob3J0ZXN0IGl0ZW0gc2l6ZSAoMikgKi8KK1NMSklUX1VOVVNFRF9BUkcoc3RhY2t0b3ApOworU0xKSVRfQVNTRVJUKHN0YWNrcG9zID49IHN0YWNrdG9wICsgMik7CisKK3N0YWNrcG9zID0gU1RBQ0soc3RhY2twb3MpOworaWYgKGNjZW5kID09IE5VTEwpCisgIHsKKyAgY2NlbmQgPSBicmFja2V0ZW5kKGNjKSAtICgxICsgTElOS19TSVpFKTsKKyAgaWYgKHJlY3Vyc2l2ZSB8fCAoKmNjICE9IE9QX0NCUkFQT1MgJiYgKmNjICE9IE9QX1NDQlJBUE9TKSkKKyAgICBjYyA9IG5leHRfb3Bjb2RlKGNvbW1vbiwgY2MpOworICB9CisKK1NMSklUX0FTU0VSVChjYyAhPSBOVUxMKTsKK3doaWxlIChjYyA8IGNjZW5kKQorICBzd2l0Y2goKmNjKQorICAgIHsKKyAgICBjYXNlIE9QX1NFVF9TT006CisgICAgU0xKSVRfQVNTRVJUKGNvbW1vbi0+aGFzX3NldF9zb20pOworICAgIGlmICghc2V0c29tX2ZvdW5kKQorICAgICAgeworICAgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1IoMCkpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3BvcywgU0xKSVRfSU1NLCAtT1ZFQ1RPUigwKSk7CisgICAgICBzdGFja3BvcyArPSAoaW50KXNpemVvZihzbGppdF9zdyk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIHN0YWNrcG9zLCBUTVAxLCAwKTsKKyAgICAgIHN0YWNrcG9zICs9IChpbnQpc2l6ZW9mKHNsaml0X3N3KTsKKyAgICAgIHNldHNvbV9mb3VuZCA9IFRSVUU7CisgICAgICB9CisgICAgY2MgKz0gMTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfTUFSSzoKKyAgICBjYXNlIE9QX1BSVU5FX0FSRzoKKyAgICBjYXNlIE9QX1RIRU5fQVJHOgorICAgIFNMSklUX0FTU0VSVChjb21tb24tPm1hcmtfcHRyICE9IDApOworICAgIGlmICghc2V0bWFya19mb3VuZCkKKyAgICAgIHsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hcmtfcHRyKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgc3RhY2twb3MsIFNMSklUX0lNTSwgLWNvbW1vbi0+bWFya19wdHIpOworICAgICAgc3RhY2twb3MgKz0gKGludClzaXplb2Yoc2xqaXRfc3cpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3BvcywgVE1QMSwgMCk7CisgICAgICBzdGFja3BvcyArPSAoaW50KXNpemVvZihzbGppdF9zdyk7CisgICAgICBzZXRtYXJrX2ZvdW5kID0gVFJVRTsKKyAgICAgIH0KKyAgICBjYyArPSAxICsgMiArIGNjWzFdOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9SRUNVUlNFOgorICAgIGlmIChjb21tb24tPmhhc19zZXRfc29tICYmICFzZXRzb21fZm91bmQpCisgICAgICB7CisgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUigwKSk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIHN0YWNrcG9zLCBTTEpJVF9JTU0sIC1PVkVDVE9SKDApKTsKKyAgICAgIHN0YWNrcG9zICs9IChpbnQpc2l6ZW9mKHNsaml0X3N3KTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgc3RhY2twb3MsIFRNUDEsIDApOworICAgICAgc3RhY2twb3MgKz0gKGludClzaXplb2Yoc2xqaXRfc3cpOworICAgICAgc2V0c29tX2ZvdW5kID0gVFJVRTsKKyAgICAgIH0KKyAgICBpZiAoY29tbW9uLT5tYXJrX3B0ciAhPSAwICYmICFzZXRtYXJrX2ZvdW5kKQorICAgICAgeworICAgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+bWFya19wdHIpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3BvcywgU0xKSVRfSU1NLCAtY29tbW9uLT5tYXJrX3B0cik7CisgICAgICBzdGFja3BvcyArPSAoaW50KXNpemVvZihzbGppdF9zdyk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIHN0YWNrcG9zLCBUTVAxLCAwKTsKKyAgICAgIHN0YWNrcG9zICs9IChpbnQpc2l6ZW9mKHNsaml0X3N3KTsKKyAgICAgIHNldG1hcmtfZm91bmQgPSBUUlVFOworICAgICAgfQorICAgIGlmIChjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgIT0gMCAmJiAhY2FwdHVyZV9sYXN0X2ZvdW5kKQorICAgICAgeworICAgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0cik7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIHN0YWNrcG9zLCBTTEpJVF9JTU0sIC1jb21tb24tPmNhcHR1cmVfbGFzdF9wdHIpOworICAgICAgc3RhY2twb3MgKz0gKGludClzaXplb2Yoc2xqaXRfc3cpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3BvcywgVE1QMSwgMCk7CisgICAgICBzdGFja3BvcyArPSAoaW50KXNpemVvZihzbGppdF9zdyk7CisgICAgICBjYXB0dXJlX2xhc3RfZm91bmQgPSBUUlVFOworICAgICAgfQorICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NCUkE6CisgICAgY2FzZSBPUF9DQlJBUE9TOgorICAgIGNhc2UgT1BfU0NCUkE6CisgICAgY2FzZSBPUF9TQ0JSQVBPUzoKKyAgICBpZiAoY29tbW9uLT5jYXB0dXJlX2xhc3RfcHRyICE9IDAgJiYgIWNhcHR1cmVfbGFzdF9mb3VuZCkKKyAgICAgIHsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3BvcywgU0xKSVRfSU1NLCAtY29tbW9uLT5jYXB0dXJlX2xhc3RfcHRyKTsKKyAgICAgIHN0YWNrcG9zICs9IChpbnQpc2l6ZW9mKHNsaml0X3N3KTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgc3RhY2twb3MsIFRNUDEsIDApOworICAgICAgc3RhY2twb3MgKz0gKGludClzaXplb2Yoc2xqaXRfc3cpOworICAgICAgY2FwdHVyZV9sYXN0X2ZvdW5kID0gVFJVRTsKKyAgICAgIH0KKyAgICBvZmZzZXQgPSAoR0VUMihjYywgMSArIExJTktfU0laRSkpIDw8IDE7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3BvcywgU0xKSVRfSU1NLCBPVkVDVE9SKG9mZnNldCkpOworICAgIHN0YWNrcG9zICs9IChpbnQpc2l6ZW9mKHNsaml0X3N3KTsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQpKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQgKyAxKSk7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3BvcywgVE1QMSwgMCk7CisgICAgc3RhY2twb3MgKz0gKGludClzaXplb2Yoc2xqaXRfc3cpOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgc3RhY2twb3MsIFRNUDIsIDApOworICAgIHN0YWNrcG9zICs9IChpbnQpc2l6ZW9mKHNsaml0X3N3KTsKKworICAgIGNjICs9IDEgKyBMSU5LX1NJWkUgKyBJTU0yX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgIGNjID0gbmV4dF9vcGNvZGUoY29tbW9uLCBjYyk7CisgICAgU0xKSVRfQVNTRVJUKGNjICE9IE5VTEwpOworICAgIGJyZWFrOworICAgIH0KKworT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3BvcywgU0xKSVRfSU1NLCAwKTsKK1NMSklUX0FTU0VSVChzdGFja3BvcyA9PSBTVEFDSyhzdGFja3RvcCkpOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIGludCBnZXRfcHJpdmF0ZV9kYXRhX2NvcHlfbGVuZ3RoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBQQ1JFMl9TUFRSIGNjZW5kLCBCT09MIG5lZWRzX2NvbnRyb2xfaGVhZCkKK3sKK2ludCBwcml2YXRlX2RhdGFfbGVuZ3RoID0gbmVlZHNfY29udHJvbF9oZWFkID8gMyA6IDI7CitpbnQgc2l6ZTsKK1BDUkUyX1NQVFIgYWx0ZXJuYXRpdmU7CisvKiBDYWxjdWxhdGUgdGhlIHN1bSBvZiB0aGUgcHJpdmF0ZSBtYWNoaW5lIHdvcmRzLiAqLword2hpbGUgKGNjIDwgY2NlbmQpCisgIHsKKyAgc2l6ZSA9IDA7CisgIHN3aXRjaCgqY2MpCisgICAgeworICAgIGNhc2UgT1BfS0VUOgorICAgIGlmIChQUklWQVRFX0RBVEEoY2MpICE9IDApCisgICAgICB7CisgICAgICBwcml2YXRlX2RhdGFfbGVuZ3RoKys7CisgICAgICBTTEpJVF9BU1NFUlQoUFJJVkFURV9EQVRBKGNjICsgMSkgIT0gMCk7CisgICAgICBjYyArPSBQUklWQVRFX0RBVEEoY2MgKyAxKTsKKyAgICAgIH0KKyAgICBjYyArPSAxICsgTElOS19TSVpFOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9BU1NFUlQ6CisgICAgY2FzZSBPUF9BU1NFUlRfTk9UOgorICAgIGNhc2UgT1BfQVNTRVJUQkFDSzoKKyAgICBjYXNlIE9QX0FTU0VSVEJBQ0tfTk9UOgorICAgIGNhc2UgT1BfT05DRToKKyAgICBjYXNlIE9QX09OQ0VfTkM6CisgICAgY2FzZSBPUF9CUkFQT1M6CisgICAgY2FzZSBPUF9TQlJBOgorICAgIGNhc2UgT1BfU0JSQVBPUzoKKyAgICBjYXNlIE9QX1NDT05EOgorICAgIHByaXZhdGVfZGF0YV9sZW5ndGgrKzsKKyAgICBTTEpJVF9BU1NFUlQoUFJJVkFURV9EQVRBKGNjKSAhPSAwKTsKKyAgICBjYyArPSAxICsgTElOS19TSVpFOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9DQlJBOgorICAgIGNhc2UgT1BfU0NCUkE6CisgICAgaWYgKGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0W0dFVDIoY2MsIDEgKyBMSU5LX1NJWkUpXSA9PSAwKQorICAgICAgcHJpdmF0ZV9kYXRhX2xlbmd0aCsrOworICAgIGNjICs9IDEgKyBMSU5LX1NJWkUgKyBJTU0yX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NCUkFQT1M6CisgICAgY2FzZSBPUF9TQ0JSQVBPUzoKKyAgICBwcml2YXRlX2RhdGFfbGVuZ3RoICs9IDI7CisgICAgY2MgKz0gMSArIExJTktfU0laRSArIElNTTJfU0laRTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQ09ORDoKKyAgICAvKiBNaWdodCBiZSBhIGhpZGRlbiBTQ09ORC4gKi8KKyAgICBhbHRlcm5hdGl2ZSA9IGNjICsgR0VUKGNjLCAxKTsKKyAgICBpZiAoKmFsdGVybmF0aXZlID09IE9QX0tFVFJNQVggfHwgKmFsdGVybmF0aXZlID09IE9QX0tFVFJNSU4pCisgICAgICBwcml2YXRlX2RhdGFfbGVuZ3RoKys7CisgICAgY2MgKz0gMSArIExJTktfU0laRTsKKyAgICBicmVhazsKKworICAgIENBU0VfSVRFUkFUT1JfUFJJVkFURV9EQVRBXzEKKyAgICBpZiAoUFJJVkFURV9EQVRBKGNjKSkKKyAgICAgIHByaXZhdGVfZGF0YV9sZW5ndGgrKzsKKyAgICBjYyArPSAyOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmIChjb21tb24tPnV0ZiAmJiBIQVNfRVhUUkFMRU4oY2NbLTFdKSkgY2MgKz0gR0VUX0VYVFJBTEVOKGNjWy0xXSk7CisjZW5kaWYKKyAgICBicmVhazsKKworICAgIENBU0VfSVRFUkFUT1JfUFJJVkFURV9EQVRBXzJBCisgICAgaWYgKFBSSVZBVEVfREFUQShjYykpCisgICAgICBwcml2YXRlX2RhdGFfbGVuZ3RoICs9IDI7CisgICAgY2MgKz0gMjsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICBpZiAoY29tbW9uLT51dGYgJiYgSEFTX0VYVFJBTEVOKGNjWy0xXSkpIGNjICs9IEdFVF9FWFRSQUxFTihjY1stMV0pOworI2VuZGlmCisgICAgYnJlYWs7CisKKyAgICBDQVNFX0lURVJBVE9SX1BSSVZBVEVfREFUQV8yQgorICAgIGlmIChQUklWQVRFX0RBVEEoY2MpKQorICAgICAgcHJpdmF0ZV9kYXRhX2xlbmd0aCArPSAyOworICAgIGNjICs9IDIgKyBJTU0yX1NJWkU7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgaWYgKGNvbW1vbi0+dXRmICYmIEhBU19FWFRSQUxFTihjY1stMV0pKSBjYyArPSBHRVRfRVhUUkFMRU4oY2NbLTFdKTsKKyNlbmRpZgorICAgIGJyZWFrOworCisgICAgQ0FTRV9JVEVSQVRPUl9UWVBFX1BSSVZBVEVfREFUQV8xCisgICAgaWYgKFBSSVZBVEVfREFUQShjYykpCisgICAgICBwcml2YXRlX2RhdGFfbGVuZ3RoKys7CisgICAgY2MgKz0gMTsKKyAgICBicmVhazsKKworICAgIENBU0VfSVRFUkFUT1JfVFlQRV9QUklWQVRFX0RBVEFfMkEKKyAgICBpZiAoUFJJVkFURV9EQVRBKGNjKSkKKyAgICAgIHByaXZhdGVfZGF0YV9sZW5ndGggKz0gMjsKKyAgICBjYyArPSAxOworICAgIGJyZWFrOworCisgICAgQ0FTRV9JVEVSQVRPUl9UWVBFX1BSSVZBVEVfREFUQV8yQgorICAgIGlmIChQUklWQVRFX0RBVEEoY2MpKQorICAgICAgcHJpdmF0ZV9kYXRhX2xlbmd0aCArPSAyOworICAgIGNjICs9IDEgKyBJTU0yX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NMQVNTOgorICAgIGNhc2UgT1BfTkNMQVNTOgorI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFIHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgY2FzZSBPUF9YQ0xBU1M6CisgICAgc2l6ZSA9ICgqY2MgPT0gT1BfWENMQVNTKSA/IEdFVChjYywgMSkgOiAxICsgMzIgLyAoaW50KXNpemVvZihQQ1JFMl9VQ0hBUik7CisjZWxzZQorICAgIHNpemUgPSAxICsgMzIgLyAoaW50KXNpemVvZihQQ1JFMl9VQ0hBUik7CisjZW5kaWYKKyAgICBpZiAoUFJJVkFURV9EQVRBKGNjKSkKKyAgICAgIHByaXZhdGVfZGF0YV9sZW5ndGggKz0gZ2V0X2NsYXNzX2l0ZXJhdG9yX3NpemUoY2MgKyBzaXplKTsKKyAgICBjYyArPSBzaXplOworICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICBjYyA9IG5leHRfb3Bjb2RlKGNvbW1vbiwgY2MpOworICAgIFNMSklUX0FTU0VSVChjYyAhPSBOVUxMKTsKKyAgICBicmVhazsKKyAgICB9CisgIH0KK1NMSklUX0FTU0VSVChjYyA9PSBjY2VuZCk7CityZXR1cm4gcHJpdmF0ZV9kYXRhX2xlbmd0aDsKK30KKworc3RhdGljIHZvaWQgY29weV9wcml2YXRlX2RhdGEoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIFBDUkUyX1NQVFIgY2NlbmQsCisgIEJPT0wgc2F2ZSwgaW50IHN0YWNrcHRyLCBpbnQgc3RhY2t0b3AsIEJPT0wgbmVlZHNfY29udHJvbF9oZWFkKQoreworREVGSU5FX0NPTVBJTEVSOworaW50IHNyY3dbMl07CitpbnQgY291bnQsIHNpemU7CitCT09MIHRtcDFuZXh0ID0gVFJVRTsKK0JPT0wgdG1wMWVtcHR5ID0gVFJVRTsKK0JPT0wgdG1wMmVtcHR5ID0gVFJVRTsKK1BDUkUyX1NQVFIgYWx0ZXJuYXRpdmU7CitlbnVtIHsKKyAgc3RhcnQsCisgIGxvb3AsCisgIGVuZAorfSBzdGF0dXM7CisKK3N0YXR1cyA9IHNhdmUgPyBzdGFydCA6IGxvb3A7CitzdGFja3B0ciA9IFNUQUNLKHN0YWNrcHRyIC0gMik7CitzdGFja3RvcCA9IFNUQUNLKHN0YWNrdG9wIC0gMSk7CisKK2lmICghc2F2ZSkKKyAgeworICBzdGFja3B0ciArPSAobmVlZHNfY29udHJvbF9oZWFkID8gMiA6IDEpICogc2l6ZW9mKHNsaml0X3N3KTsKKyAgaWYgKHN0YWNrcHRyIDwgc3RhY2t0b3ApCisgICAgeworICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgc3RhY2twdHIpOworICAgIHN0YWNrcHRyICs9IHNpemVvZihzbGppdF9zdyk7CisgICAgdG1wMWVtcHR5ID0gRkFMU0U7CisgICAgfQorICBpZiAoc3RhY2twdHIgPCBzdGFja3RvcCkKKyAgICB7CisgICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3B0cik7CisgICAgc3RhY2twdHIgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKyAgICB0bXAyZW1wdHkgPSBGQUxTRTsKKyAgICB9CisgIC8qIFRoZSB0bXAxbmV4dCBtdXN0IGJlIFRSVUUgaW4gZWl0aGVyIHdheS4gKi8KKyAgfQorCitkbworICB7CisgIGNvdW50ID0gMDsKKyAgc3dpdGNoKHN0YXR1cykKKyAgICB7CisgICAgY2FzZSBzdGFydDoKKyAgICBTTEpJVF9BU1NFUlQoc2F2ZSAmJiBjb21tb24tPnJlY3Vyc2l2ZV9oZWFkX3B0ciAhPSAwKTsKKyAgICBjb3VudCA9IDE7CisgICAgc3Jjd1swXSA9IGNvbW1vbi0+cmVjdXJzaXZlX2hlYWRfcHRyOworICAgIGlmIChuZWVkc19jb250cm9sX2hlYWQpCisgICAgICB7CisgICAgICBTTEpJVF9BU1NFUlQoY29tbW9uLT5jb250cm9sX2hlYWRfcHRyICE9IDApOworICAgICAgY291bnQgPSAyOworICAgICAgc3Jjd1sxXSA9IGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0cjsKKyAgICAgIH0KKyAgICBzdGF0dXMgPSBsb29wOworICAgIGJyZWFrOworCisgICAgY2FzZSBsb29wOgorICAgIGlmIChjYyA+PSBjY2VuZCkKKyAgICAgIHsKKyAgICAgIHN0YXR1cyA9IGVuZDsKKyAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgc3dpdGNoKCpjYykKKyAgICAgIHsKKyAgICAgIGNhc2UgT1BfS0VUOgorICAgICAgaWYgKFBSSVZBVEVfREFUQShjYykgIT0gMCkKKyAgICAgICAgeworICAgICAgICBjb3VudCA9IDE7CisgICAgICAgIHNyY3dbMF0gPSBQUklWQVRFX0RBVEEoY2MpOworICAgICAgICBTTEpJVF9BU1NFUlQoUFJJVkFURV9EQVRBKGNjICsgMSkgIT0gMCk7CisgICAgICAgIGNjICs9IFBSSVZBVEVfREFUQShjYyArIDEpOworICAgICAgICB9CisgICAgICBjYyArPSAxICsgTElOS19TSVpFOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfQVNTRVJUOgorICAgICAgY2FzZSBPUF9BU1NFUlRfTk9UOgorICAgICAgY2FzZSBPUF9BU1NFUlRCQUNLOgorICAgICAgY2FzZSBPUF9BU1NFUlRCQUNLX05PVDoKKyAgICAgIGNhc2UgT1BfT05DRToKKyAgICAgIGNhc2UgT1BfT05DRV9OQzoKKyAgICAgIGNhc2UgT1BfQlJBUE9TOgorICAgICAgY2FzZSBPUF9TQlJBOgorICAgICAgY2FzZSBPUF9TQlJBUE9TOgorICAgICAgY2FzZSBPUF9TQ09ORDoKKyAgICAgIGNvdW50ID0gMTsKKyAgICAgIHNyY3dbMF0gPSBQUklWQVRFX0RBVEEoY2MpOworICAgICAgU0xKSVRfQVNTRVJUKHNyY3dbMF0gIT0gMCk7CisgICAgICBjYyArPSAxICsgTElOS19TSVpFOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfQ0JSQToKKyAgICAgIGNhc2UgT1BfU0NCUkE6CisgICAgICBpZiAoY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXRbR0VUMihjYywgMSArIExJTktfU0laRSldID09IDApCisgICAgICAgIHsKKyAgICAgICAgY291bnQgPSAxOworICAgICAgICBzcmN3WzBdID0gT1ZFQ1RPUl9QUklWKEdFVDIoY2MsIDEgKyBMSU5LX1NJWkUpKTsKKyAgICAgICAgfQorICAgICAgY2MgKz0gMSArIExJTktfU0laRSArIElNTTJfU0laRTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX0NCUkFQT1M6CisgICAgICBjYXNlIE9QX1NDQlJBUE9TOgorICAgICAgY291bnQgPSAyOworICAgICAgc3Jjd1swXSA9IFBSSVZBVEVfREFUQShjYyk7CisgICAgICBzcmN3WzFdID0gT1ZFQ1RPUl9QUklWKEdFVDIoY2MsIDEgKyBMSU5LX1NJWkUpKTsKKyAgICAgIFNMSklUX0FTU0VSVChzcmN3WzBdICE9IDAgJiYgc3Jjd1sxXSAhPSAwKTsKKyAgICAgIGNjICs9IDEgKyBMSU5LX1NJWkUgKyBJTU0yX1NJWkU7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9DT05EOgorICAgICAgLyogTWlnaHQgYmUgYSBoaWRkZW4gU0NPTkQuICovCisgICAgICBhbHRlcm5hdGl2ZSA9IGNjICsgR0VUKGNjLCAxKTsKKyAgICAgIGlmICgqYWx0ZXJuYXRpdmUgPT0gT1BfS0VUUk1BWCB8fCAqYWx0ZXJuYXRpdmUgPT0gT1BfS0VUUk1JTikKKyAgICAgICAgeworICAgICAgICBjb3VudCA9IDE7CisgICAgICAgIHNyY3dbMF0gPSBQUklWQVRFX0RBVEEoY2MpOworICAgICAgICBTTEpJVF9BU1NFUlQoc3Jjd1swXSAhPSAwKTsKKyAgICAgICAgfQorICAgICAgY2MgKz0gMSArIExJTktfU0laRTsKKyAgICAgIGJyZWFrOworCisgICAgICBDQVNFX0lURVJBVE9SX1BSSVZBVEVfREFUQV8xCisgICAgICBpZiAoUFJJVkFURV9EQVRBKGNjKSkKKyAgICAgICAgeworICAgICAgICBjb3VudCA9IDE7CisgICAgICAgIHNyY3dbMF0gPSBQUklWQVRFX0RBVEEoY2MpOworICAgICAgICB9CisgICAgICBjYyArPSAyOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgaWYgKGNvbW1vbi0+dXRmICYmIEhBU19FWFRSQUxFTihjY1stMV0pKSBjYyArPSBHRVRfRVhUUkFMRU4oY2NbLTFdKTsKKyNlbmRpZgorICAgICAgYnJlYWs7CisKKyAgICAgIENBU0VfSVRFUkFUT1JfUFJJVkFURV9EQVRBXzJBCisgICAgICBpZiAoUFJJVkFURV9EQVRBKGNjKSkKKyAgICAgICAgeworICAgICAgICBjb3VudCA9IDI7CisgICAgICAgIHNyY3dbMF0gPSBQUklWQVRFX0RBVEEoY2MpOworICAgICAgICBzcmN3WzFdID0gUFJJVkFURV9EQVRBKGNjKSArIHNpemVvZihzbGppdF9zdyk7CisgICAgICAgIH0KKyAgICAgIGNjICs9IDI7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBpZiAoY29tbW9uLT51dGYgJiYgSEFTX0VYVFJBTEVOKGNjWy0xXSkpIGNjICs9IEdFVF9FWFRSQUxFTihjY1stMV0pOworI2VuZGlmCisgICAgICBicmVhazsKKworICAgICAgQ0FTRV9JVEVSQVRPUl9QUklWQVRFX0RBVEFfMkIKKyAgICAgIGlmIChQUklWQVRFX0RBVEEoY2MpKQorICAgICAgICB7CisgICAgICAgIGNvdW50ID0gMjsKKyAgICAgICAgc3Jjd1swXSA9IFBSSVZBVEVfREFUQShjYyk7CisgICAgICAgIHNyY3dbMV0gPSBQUklWQVRFX0RBVEEoY2MpICsgc2l6ZW9mKHNsaml0X3N3KTsKKyAgICAgICAgfQorICAgICAgY2MgKz0gMiArIElNTTJfU0laRTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgIGlmIChjb21tb24tPnV0ZiAmJiBIQVNfRVhUUkFMRU4oY2NbLTFdKSkgY2MgKz0gR0VUX0VYVFJBTEVOKGNjWy0xXSk7CisjZW5kaWYKKyAgICAgIGJyZWFrOworCisgICAgICBDQVNFX0lURVJBVE9SX1RZUEVfUFJJVkFURV9EQVRBXzEKKyAgICAgIGlmIChQUklWQVRFX0RBVEEoY2MpKQorICAgICAgICB7CisgICAgICAgIGNvdW50ID0gMTsKKyAgICAgICAgc3Jjd1swXSA9IFBSSVZBVEVfREFUQShjYyk7CisgICAgICAgIH0KKyAgICAgIGNjICs9IDE7CisgICAgICBicmVhazsKKworICAgICAgQ0FTRV9JVEVSQVRPUl9UWVBFX1BSSVZBVEVfREFUQV8yQQorICAgICAgaWYgKFBSSVZBVEVfREFUQShjYykpCisgICAgICAgIHsKKyAgICAgICAgY291bnQgPSAyOworICAgICAgICBzcmN3WzBdID0gUFJJVkFURV9EQVRBKGNjKTsKKyAgICAgICAgc3Jjd1sxXSA9IHNyY3dbMF0gKyBzaXplb2Yoc2xqaXRfc3cpOworICAgICAgICB9CisgICAgICBjYyArPSAxOworICAgICAgYnJlYWs7CisKKyAgICAgIENBU0VfSVRFUkFUT1JfVFlQRV9QUklWQVRFX0RBVEFfMkIKKyAgICAgIGlmIChQUklWQVRFX0RBVEEoY2MpKQorICAgICAgICB7CisgICAgICAgIGNvdW50ID0gMjsKKyAgICAgICAgc3Jjd1swXSA9IFBSSVZBVEVfREFUQShjYyk7CisgICAgICAgIHNyY3dbMV0gPSBzcmN3WzBdICsgc2l6ZW9mKHNsaml0X3N3KTsKKyAgICAgICAgfQorICAgICAgY2MgKz0gMSArIElNTTJfU0laRTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX0NMQVNTOgorICAgICAgY2FzZSBPUF9OQ0xBU1M6CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgfHwgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICAgIGNhc2UgT1BfWENMQVNTOgorICAgICAgc2l6ZSA9ICgqY2MgPT0gT1BfWENMQVNTKSA/IEdFVChjYywgMSkgOiAxICsgMzIgLyAoaW50KXNpemVvZihQQ1JFMl9VQ0hBUik7CisjZWxzZQorICAgICAgc2l6ZSA9IDEgKyAzMiAvIChpbnQpc2l6ZW9mKFBDUkUyX1VDSEFSKTsKKyNlbmRpZgorICAgICAgaWYgKFBSSVZBVEVfREFUQShjYykpCisgICAgICAgIHN3aXRjaChnZXRfY2xhc3NfaXRlcmF0b3Jfc2l6ZShjYyArIHNpemUpKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgY291bnQgPSAxOworICAgICAgICAgIHNyY3dbMF0gPSBQUklWQVRFX0RBVEEoY2MpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgIGNvdW50ID0gMjsKKyAgICAgICAgICBzcmN3WzBdID0gUFJJVkFURV9EQVRBKGNjKTsKKyAgICAgICAgICBzcmN3WzFdID0gc3Jjd1swXSArIHNpemVvZihzbGppdF9zdyk7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIFNMSklUX0FTU0VSVF9TVE9QKCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgY2MgKz0gc2l6ZTsKKyAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgY2MgPSBuZXh0X29wY29kZShjb21tb24sIGNjKTsKKyAgICAgIFNMSklUX0FTU0VSVChjYyAhPSBOVUxMKTsKKyAgICAgIGJyZWFrOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSBlbmQ6CisgICAgU0xKSVRfQVNTRVJUX1NUT1AoKTsKKyAgICBicmVhazsKKyAgICB9CisKKyAgd2hpbGUgKGNvdW50ID4gMCkKKyAgICB7CisgICAgY291bnQtLTsKKyAgICBpZiAoc2F2ZSkKKyAgICAgIHsKKyAgICAgIGlmICh0bXAxbmV4dCkKKyAgICAgICAgeworICAgICAgICBpZiAoIXRtcDFlbXB0eSkKKyAgICAgICAgICB7CisgICAgICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3B0ciwgVE1QMSwgMCk7CisgICAgICAgICAgc3RhY2twdHIgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKyAgICAgICAgICB9CisgICAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBzcmN3W2NvdW50XSk7CisgICAgICAgIHRtcDFlbXB0eSA9IEZBTFNFOworICAgICAgICB0bXAxbmV4dCA9IEZBTFNFOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgaWYgKCF0bXAyZW1wdHkpCisgICAgICAgICAgeworICAgICAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgc3RhY2twdHIsIFRNUDIsIDApOworICAgICAgICAgIHN0YWNrcHRyICs9IHNpemVvZihzbGppdF9zdyk7CisgICAgICAgICAgfQorICAgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgc3Jjd1tjb3VudF0pOworICAgICAgICB0bXAyZW1wdHkgPSBGQUxTRTsKKyAgICAgICAgdG1wMW5leHQgPSBUUlVFOworICAgICAgICB9CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgaWYgKHRtcDFuZXh0KQorICAgICAgICB7CisgICAgICAgIFNMSklUX0FTU0VSVCghdG1wMWVtcHR5KTsKKyAgICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHNyY3dbY291bnRdLCBUTVAxLCAwKTsKKyAgICAgICAgdG1wMWVtcHR5ID0gc3RhY2twdHIgPj0gc3RhY2t0b3A7CisgICAgICAgIGlmICghdG1wMWVtcHR5KQorICAgICAgICAgIHsKKyAgICAgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIHN0YWNrcHRyKTsKKyAgICAgICAgICBzdGFja3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpOworICAgICAgICAgIH0KKyAgICAgICAgdG1wMW5leHQgPSBGQUxTRTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIFNMSklUX0FTU0VSVCghdG1wMmVtcHR5KTsKKyAgICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHNyY3dbY291bnRdLCBUTVAyLCAwKTsKKyAgICAgICAgdG1wMmVtcHR5ID0gc3RhY2twdHIgPj0gc3RhY2t0b3A7CisgICAgICAgIGlmICghdG1wMmVtcHR5KQorICAgICAgICAgIHsKKyAgICAgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIHN0YWNrcHRyKTsKKyAgICAgICAgICBzdGFja3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpOworICAgICAgICAgIH0KKyAgICAgICAgdG1wMW5leHQgPSBUUlVFOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICB9Cit3aGlsZSAoc3RhdHVzICE9IGVuZCk7CisKK2lmIChzYXZlKQorICB7CisgIGlmICh0bXAxbmV4dCkKKyAgICB7CisgICAgaWYgKCF0bXAxZW1wdHkpCisgICAgICB7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIHN0YWNrcHRyLCBUTVAxLCAwKTsKKyAgICAgIHN0YWNrcHRyICs9IHNpemVvZihzbGppdF9zdyk7CisgICAgICB9CisgICAgaWYgKCF0bXAyZW1wdHkpCisgICAgICB7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIHN0YWNrcHRyLCBUTVAyLCAwKTsKKyAgICAgIHN0YWNrcHRyICs9IHNpemVvZihzbGppdF9zdyk7CisgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgIGlmICghdG1wMmVtcHR5KQorICAgICAgeworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3B0ciwgVE1QMiwgMCk7CisgICAgICBzdGFja3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpOworICAgICAgfQorICAgIGlmICghdG1wMWVtcHR5KQorICAgICAgeworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBzdGFja3B0ciwgVE1QMSwgMCk7CisgICAgICBzdGFja3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpOworICAgICAgfQorICAgIH0KKyAgfQorU0xKSVRfQVNTRVJUKGNjID09IGNjZW5kICYmIHN0YWNrcHRyID09IHN0YWNrdG9wICYmIChzYXZlIHx8ICh0bXAxZW1wdHkgJiYgdG1wMmVtcHR5KSkpOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIFBDUkUyX1NQVFIgc2V0X3RoZW5fb2Zmc2V0cyhjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfU1BUUiBjYywgc2xqaXRfdWIgKmN1cnJlbnRfb2Zmc2V0KQoreworUENSRTJfU1BUUiBlbmQgPSBicmFja2V0ZW5kKGNjKTsKK0JPT0wgaGFzX2FsdGVybmF0aXZlcyA9IGNjW0dFVChjYywgMSldID09IE9QX0FMVDsKKworLyogQXNzZXJ0IGNhcHR1cmVzIHRoZW4uICovCitpZiAoKmNjID49IE9QX0FTU0VSVCAmJiAqY2MgPD0gT1BfQVNTRVJUQkFDS19OT1QpCisgIGN1cnJlbnRfb2Zmc2V0ID0gTlVMTDsKKy8qIENvbmRpdGlvbmFsIGJsb2NrIGRvZXMgbm90LiAqLworaWYgKCpjYyA9PSBPUF9DT05EIHx8ICpjYyA9PSBPUF9TQ09ORCkKKyAgaGFzX2FsdGVybmF0aXZlcyA9IEZBTFNFOworCitjYyA9IG5leHRfb3Bjb2RlKGNvbW1vbiwgY2MpOworaWYgKGhhc19hbHRlcm5hdGl2ZXMpCisgIGN1cnJlbnRfb2Zmc2V0ID0gY29tbW9uLT50aGVuX29mZnNldHMgKyAoY2MgLSBjb21tb24tPnN0YXJ0KTsKKword2hpbGUgKGNjIDwgZW5kKQorICB7CisgIGlmICgoKmNjID49IE9QX0FTU0VSVCAmJiAqY2MgPD0gT1BfQVNTRVJUQkFDS19OT1QpIHx8ICgqY2MgPj0gT1BfT05DRSAmJiAqY2MgPD0gT1BfU0NPTkQpKQorICAgIGNjID0gc2V0X3RoZW5fb2Zmc2V0cyhjb21tb24sIGNjLCBjdXJyZW50X29mZnNldCk7CisgIGVsc2UKKyAgICB7CisgICAgaWYgKCpjYyA9PSBPUF9BTFQgJiYgaGFzX2FsdGVybmF0aXZlcykKKyAgICAgIGN1cnJlbnRfb2Zmc2V0ID0gY29tbW9uLT50aGVuX29mZnNldHMgKyAoY2MgKyAxICsgTElOS19TSVpFIC0gY29tbW9uLT5zdGFydCk7CisgICAgaWYgKCpjYyA+PSBPUF9USEVOICYmICpjYyA8PSBPUF9USEVOX0FSRyAmJiBjdXJyZW50X29mZnNldCAhPSBOVUxMKQorICAgICAgKmN1cnJlbnRfb2Zmc2V0ID0gMTsKKyAgICBjYyA9IG5leHRfb3Bjb2RlKGNvbW1vbiwgY2MpOworICAgIH0KKyAgfQorCityZXR1cm4gZW5kOworfQorCisjdW5kZWYgQ0FTRV9JVEVSQVRPUl9QUklWQVRFX0RBVEFfMQorI3VuZGVmIENBU0VfSVRFUkFUT1JfUFJJVkFURV9EQVRBXzJBCisjdW5kZWYgQ0FTRV9JVEVSQVRPUl9QUklWQVRFX0RBVEFfMkIKKyN1bmRlZiBDQVNFX0lURVJBVE9SX1RZUEVfUFJJVkFURV9EQVRBXzEKKyN1bmRlZiBDQVNFX0lURVJBVE9SX1RZUEVfUFJJVkFURV9EQVRBXzJBCisjdW5kZWYgQ0FTRV9JVEVSQVRPUl9UWVBFX1BSSVZBVEVfREFUQV8yQgorCitzdGF0aWMgU0xKSVRfSU5MSU5FIEJPT0wgaXNfcG93ZXJvZjIodW5zaWduZWQgaW50IHZhbHVlKQoreworcmV0dXJuICh2YWx1ZSAmICh2YWx1ZSAtIDEpKSA9PSAwOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgc2V0X2p1bXBzKGp1bXBfbGlzdCAqbGlzdCwgc3RydWN0IHNsaml0X2xhYmVsICpsYWJlbCkKK3sKK3doaWxlIChsaXN0KQorICB7CisgIC8qIHNsaml0X3NldF9sYWJlbCBpcyBjbGV2ZXIgZW5vdWdoIHRvIGRvIG5vdGhpbmcKKyAgaWYgZWl0aGVyIHRoZSBqdW1wIG9yIHRoZSBsYWJlbCBpcyBOVUxMLiAqLworICBTRVRfTEFCRUwobGlzdC0+anVtcCwgbGFiZWwpOworICBsaXN0ID0gbGlzdC0+bmV4dDsKKyAgfQorfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgYWRkX2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwganVtcF9saXN0ICoqbGlzdCwgc3RydWN0IHNsaml0X2p1bXAgKmp1bXApCit7CitqdW1wX2xpc3QgKmxpc3RfaXRlbSA9IHNsaml0X2FsbG9jX21lbW9yeShjb21waWxlciwgc2l6ZW9mKGp1bXBfbGlzdCkpOworaWYgKGxpc3RfaXRlbSkKKyAgeworICBsaXN0X2l0ZW0tPm5leHQgPSAqbGlzdDsKKyAgbGlzdF9pdGVtLT5qdW1wID0ganVtcDsKKyAgKmxpc3QgPSBsaXN0X2l0ZW07CisgIH0KK30KKworc3RhdGljIHZvaWQgYWRkX3N0dWIoY29tcGlsZXJfY29tbW9uICpjb21tb24sIHN0cnVjdCBzbGppdF9qdW1wICpzdGFydCkKK3sKK0RFRklORV9DT01QSUxFUjsKK3N0dWJfbGlzdCAqbGlzdF9pdGVtID0gc2xqaXRfYWxsb2NfbWVtb3J5KGNvbXBpbGVyLCBzaXplb2Yoc3R1Yl9saXN0KSk7CisKK2lmIChsaXN0X2l0ZW0pCisgIHsKKyAgbGlzdF9pdGVtLT5zdGFydCA9IHN0YXJ0OworICBsaXN0X2l0ZW0tPnF1aXQgPSBMQUJFTCgpOworICBsaXN0X2l0ZW0tPm5leHQgPSBjb21tb24tPnN0dWJzOworICBjb21tb24tPnN0dWJzID0gbGlzdF9pdGVtOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGZsdXNoX3N0dWJzKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uKQoreworREVGSU5FX0NPTVBJTEVSOworc3R1Yl9saXN0ICpsaXN0X2l0ZW0gPSBjb21tb24tPnN0dWJzOworCit3aGlsZSAobGlzdF9pdGVtKQorICB7CisgIEpVTVBIRVJFKGxpc3RfaXRlbS0+c3RhcnQpOworICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+c3RhY2thbGxvYywgSlVNUChTTEpJVF9GQVNUX0NBTEwpKTsKKyAgSlVNUFRPKFNMSklUX0pVTVAsIGxpc3RfaXRlbS0+cXVpdCk7CisgIGxpc3RfaXRlbSA9IGxpc3RfaXRlbS0+bmV4dDsKKyAgfQorY29tbW9uLT5zdHVicyA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9sYWJlbF9hZGRyKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBzbGppdF91dyAqdXBkYXRlX2FkZHIpCit7CitERUZJTkVfQ09NUElMRVI7CitsYWJlbF9hZGRyX2xpc3QgKmxhYmVsX2FkZHI7CisKK2xhYmVsX2FkZHIgPSBzbGppdF9hbGxvY19tZW1vcnkoY29tcGlsZXIsIHNpemVvZihsYWJlbF9hZGRyX2xpc3QpKTsKK2lmIChsYWJlbF9hZGRyID09IE5VTEwpCisgIHJldHVybjsKK2xhYmVsX2FkZHItPmxhYmVsID0gTEFCRUwoKTsKK2xhYmVsX2FkZHItPnVwZGF0ZV9hZGRyID0gdXBkYXRlX2FkZHI7CitsYWJlbF9hZGRyLT5uZXh0ID0gY29tbW9uLT5sYWJlbF9hZGRyczsKK2NvbW1vbi0+bGFiZWxfYWRkcnMgPSBsYWJlbF9hZGRyOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgY291bnRfbWF0Y2goY29tcGlsZXJfY29tbW9uICpjb21tb24pCit7CitERUZJTkVfQ09NUElMRVI7CisKK09QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgQ09VTlRfTUFUQ0gsIDAsIENPVU5UX01BVENILCAwLCBTTEpJVF9JTU0sIDEpOworYWRkX2p1bXAoY29tcGlsZXIsICZjb21tb24tPmNhbGxsaW1pdCwgSlVNUChTTEpJVF9aRVJPKSk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBhbGxvY2F0ZV9zdGFjayhjb21waWxlcl9jb21tb24gKmNvbW1vbiwgaW50IHNpemUpCit7CisvKiBNYXkgZGVzdHJveSBhbGwgbG9jYWxzIGFuZCByZWdpc3RlcnMgZXhjZXB0IFRNUDIuICovCitERUZJTkVfQ09NUElMRVI7CisKK1NMSklUX0FTU0VSVChzaXplID4gMCk7CitPUDIoU0xKSVRfQURELCBTVEFDS19UT1AsIDAsIFNUQUNLX1RPUCwgMCwgU0xKSVRfSU1NLCBzaXplICogc2l6ZW9mKHNsaml0X3N3KSk7CisjaWZkZWYgREVTVFJPWV9SRUdJU1RFUlMKK09QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX0lNTSwgMTIzNDUpOworT1AxKFNMSklUX01PViwgVE1QMywgMCwgVE1QMSwgMCk7CitPUDEoU0xKSVRfTU9WLCBSRVRVUk5fQUREUiwgMCwgVE1QMSwgMCk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMCwgVE1QMSwgMCk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMSwgVE1QMSwgMCk7CisjZW5kaWYKK2FkZF9zdHViKGNvbW1vbiwgQ01QKFNMSklUX0dSRUFURVIsIFNUQUNLX1RPUCwgMCwgU1RBQ0tfTElNSVQsIDApKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGZyZWVfc3RhY2soY29tcGlsZXJfY29tbW9uICpjb21tb24sIGludCBzaXplKQoreworREVGSU5FX0NPTVBJTEVSOworU0xKSVRfQVNTRVJUKHNpemUgPiAwKTsKK09QMihTTEpJVF9TVUIsIFNUQUNLX1RPUCwgMCwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9JTU0sIHNpemUgKiBzaXplb2Yoc2xqaXRfc3cpKTsKK30KKworc3RhdGljIHNsaml0X3V3ICogYWxsb2NhdGVfcmVhZF9vbmx5X2RhdGEoY29tcGlsZXJfY29tbW9uICpjb21tb24sIHNsaml0X3V3IHNpemUpCit7CitERUZJTkVfQ09NUElMRVI7CitzbGppdF91dyAqcmVzdWx0OworCitpZiAoU0xKSVRfVU5MSUtFTFkoc2xqaXRfZ2V0X2NvbXBpbGVyX2Vycm9yKGNvbXBpbGVyKSkpCisgIHJldHVybiBOVUxMOworCityZXN1bHQgPSAoc2xqaXRfdXcgKilTTEpJVF9NQUxMT0Moc2l6ZSArIHNpemVvZihzbGppdF91dyksIGNvbXBpbGVyLT5hbGxvY2F0b3JfZGF0YSk7CitpZiAoU0xKSVRfVU5MSUtFTFkocmVzdWx0ID09IE5VTEwpKQorICB7CisgIHNsaml0X3NldF9jb21waWxlcl9tZW1vcnlfZXJyb3IoY29tcGlsZXIpOworICByZXR1cm4gTlVMTDsKKyAgfQorCisqKHZvaWQqKilyZXN1bHQgPSBjb21tb24tPnJlYWRfb25seV9kYXRhX2hlYWQ7Citjb21tb24tPnJlYWRfb25seV9kYXRhX2hlYWQgPSAodm9pZCAqKXJlc3VsdDsKK3JldHVybiByZXN1bHQgKyAxOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgcmVzZXRfb3ZlY3Rvcihjb21waWxlcl9jb21tb24gKmNvbW1vbiwgaW50IGxlbmd0aCkKK3sKK0RFRklORV9DT01QSUxFUjsKK3N0cnVjdCBzbGppdF9sYWJlbCAqbG9vcDsKK3Nsaml0X3NpIGk7CisKKy8qIEF0IHRoaXMgcG9pbnQgd2UgY2FuIGZyZWVseSB1c2UgYWxsIHRlbXBvcmFyeSByZWdpc3RlcnMuICovCitTTEpJVF9BU1NFUlQobGVuZ3RoID4gMSk7CisvKiBUTVAxIHJldHVybnMgd2l0aCBiZWdpbiAtIDEuICovCitPUDIoU0xKSVRfU1VCLCBTTEpJVF9SMCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TMCksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIGJlZ2luKSwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworaWYgKGxlbmd0aCA8IDgpCisgIHsKKyAgZm9yIChpID0gMTsgaSA8IGxlbmd0aDsgaSsrKQorICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKGkpLCBTTEpJVF9SMCwgMCk7CisgIH0KK2Vsc2UKKyAgeworICBHRVRfTE9DQUxfQkFTRShTTEpJVF9SMSwgMCwgT1ZFQ1RPUl9TVEFSVCk7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX1IyLCAwLCBTTEpJVF9JTU0sIGxlbmd0aCAtIDEpOworICBsb29wID0gTEFCRUwoKTsKKyAgT1AxKFNMSklUX01PVlUsIFNMSklUX01FTTEoU0xKSVRfUjEpLCBzaXplb2Yoc2xqaXRfc3cpLCBTTEpJVF9SMCwgMCk7CisgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgU0xKSVRfUjIsIDAsIFNMSklUX1IyLCAwLCBTTEpJVF9JTU0sIDEpOworICBKVU1QVE8oU0xKSVRfTk9UX1pFUk8sIGxvb3ApOworICB9Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCByZXNldF9mYXN0X2ZhaWwoY29tcGlsZXJfY29tbW9uICpjb21tb24pCit7CitERUZJTkVfQ09NUElMRVI7CitzbGppdF9zaSBpOworCitTTEpJVF9BU1NFUlQoY29tbW9uLT5mYXN0X2ZhaWxfc3RhcnRfcHRyIDwgY29tbW9uLT5mYXN0X2ZhaWxfZW5kX3B0cik7CisKK09QMihTTEpJVF9TVUIsIFRNUDEsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKK2ZvciAoaSA9IGNvbW1vbi0+ZmFzdF9mYWlsX3N0YXJ0X3B0cjsgaSA8IGNvbW1vbi0+ZmFzdF9mYWlsX2VuZF9wdHI7IGkgKz0gc2l6ZW9mKHNsaml0X3N3KSkKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGksIFRNUDEsIDApOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgZG9fcmVzZXRfbWF0Y2goY29tcGlsZXJfY29tbW9uICpjb21tb24sIGludCBsZW5ndGgpCit7CitERUZJTkVfQ09NUElMRVI7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxvb3A7CitpbnQgaTsKKworU0xKSVRfQVNTRVJUKGxlbmd0aCA+IDEpOworLyogT1ZFQ1RPUigxKSBjb250YWlucyB0aGUgInN0cmluZyBiZWdpbiAtIDEiIGNvbnN0YW50LiAqLworaWYgKGxlbmd0aCA+IDIpCisgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKDEpKTsKK2lmIChsZW5ndGggPCA4KQorICB7CisgIGZvciAoaSA9IDI7IGkgPCBsZW5ndGg7IGkrKykKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihpKSwgVE1QMSwgMCk7CisgIH0KK2Vsc2UKKyAgeworICBHRVRfTE9DQUxfQkFTRShUTVAyLCAwLCBPVkVDVE9SX1NUQVJUICsgc2l6ZW9mKHNsaml0X3N3KSk7CisgIE9QMShTTEpJVF9NT1YsIFNUQUNLX1RPUCwgMCwgU0xKSVRfSU1NLCBsZW5ndGggLSAyKTsKKyAgbG9vcCA9IExBQkVMKCk7CisgIE9QMShTTEpJVF9NT1ZVLCBTTEpJVF9NRU0xKFRNUDIpLCBzaXplb2Yoc2xqaXRfc3cpLCBUTVAxLCAwKTsKKyAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTVEFDS19UT1AsIDAsIFNUQUNLX1RPUCwgMCwgU0xKSVRfSU1NLCAxKTsKKyAgSlVNUFRPKFNMSklUX05PVF9aRVJPLCBsb29wKTsKKyAgfQorCitPUDEoU0xKSVRfTU9WLCBTVEFDS19UT1AsIDAsIEFSR1VNRU5UUywgMCk7CitpZiAoY29tbW9uLT5tYXJrX3B0ciAhPSAwKQorICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5tYXJrX3B0ciwgU0xKSVRfSU1NLCAwKTsKK2lmIChjb21tb24tPmNvbnRyb2xfaGVhZF9wdHIgIT0gMCkKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0ciwgU0xKSVRfSU1NLCAwKTsKK09QMShTTEpJVF9NT1YsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBzdGFjaykpOworT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+c3RhcnRfcHRyKTsKK09QMShTTEpJVF9NT1YsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTTEpJVF9PRkZTRVRPRihzdHJ1Y3Qgc2xqaXRfc3RhY2ssIGJhc2UpKTsKK30KKworc3RhdGljIHNsaml0X3N3IFNMSklUX0NBTEwgZG9fc2VhcmNoX21hcmsoc2xqaXRfc3cgKmN1cnJlbnQsIFBDUkUyX1NQVFIgc2tpcF9hcmcpCit7Cit3aGlsZSAoY3VycmVudCAhPSBOVUxMKQorICB7CisgIHN3aXRjaCAoY3VycmVudFstMl0pCisgICAgeworICAgIGNhc2UgdHlwZV90aGVuX3RyYXA6CisgICAgYnJlYWs7CisKKyAgICBjYXNlIHR5cGVfbWFyazoKKyAgICBpZiAoUFJJVihzdHJjbXApKHNraXBfYXJnLCAoUENSRTJfU1BUUiljdXJyZW50Wy0zXSkgPT0gMCkKKyAgICAgIHJldHVybiBjdXJyZW50Wy00XTsKKyAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgU0xKSVRfQVNTRVJUX1NUT1AoKTsKKyAgICBicmVhazsKKyAgICB9CisgIFNMSklUX0FTU0VSVChjdXJyZW50ID4gKHNsaml0X3N3KiljdXJyZW50Wy0xXSk7CisgIGN1cnJlbnQgPSAoc2xqaXRfc3cqKWN1cnJlbnRbLTFdOworICB9CityZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBjb3B5X292ZWN0b3IoY29tcGlsZXJfY29tbW9uICpjb21tb24sIGludCB0b3BicmFja2V0KQoreworREVGSU5FX0NPTVBJTEVSOworc3RydWN0IHNsaml0X2xhYmVsICpsb29wOworCisvKiBBdCB0aGlzIHBvaW50IHdlIGNhbiBmcmVlbHkgdXNlIGFsbCByZWdpc3RlcnMuICovCitPUDEoU0xKSVRfTU9WLCBTTEpJVF9TMiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1IoMSkpOworT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1IoMSksIFNUUl9QVFIsIDApOworCitPUDEoU0xKSVRfTU9WLCBTTEpJVF9SMCwgMCwgQVJHVU1FTlRTLCAwKTsKK09QMShTTEpJVF9NT1YsIFNMSklUX1MwLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5zdGFydF9wdHIpOworaWYgKGNvbW1vbi0+bWFya19wdHIgIT0gMCkKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfUjIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hcmtfcHRyKTsKK09QMShTTEpJVF9NT1ZfVUksIFNMSklUX1IxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1IwKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgb3ZlY2NvdW50KSk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1IwKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgc3RhcnRjaGFyX3B0ciksIFNMSklUX1MwLCAwKTsKK2lmIChjb21tb24tPm1hcmtfcHRyICE9IDApCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfUjApLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBtYXJrX3B0ciksIFNMSklUX1IyLCAwKTsKK09QMihTTEpJVF9BREQsIFNMSklUX1IyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1IwKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgbWF0Y2hfZGF0YSksCisgIFNMSklUX0lNTSwgU0xKSVRfT0ZGU0VUT0YocGNyZTJfbWF0Y2hfZGF0YSwgb3ZlY3RvcikgLSBzaXplb2YoUENSRTJfU0laRSkpOworCitHRVRfTE9DQUxfQkFTRShTTEpJVF9TMCwgMCwgT1ZFQ1RPUl9TVEFSVCk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9SMCwgMCwgU0xKSVRfTUVNMShTTEpJVF9SMCksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIGJlZ2luKSk7CisKK2xvb3AgPSBMQUJFTCgpOworT1AyKFNMSklUX1NVQiwgU0xKSVRfUzEsIDAsIFNMSklUX01FTTEoU0xKSVRfUzApLCAwLCBTTEpJVF9SMCwgMCk7CitPUDIoU0xKSVRfQURELCBTTEpJVF9TMCwgMCwgU0xKSVRfUzAsIDAsIFNMSklUX0lNTSwgc2l6ZW9mKHNsaml0X3N3KSk7CisvKiBDb3B5IHRoZSBpbnRlZ2VyIHZhbHVlIHRvIHRoZSBvdXRwdXQgYnVmZmVyICovCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2IHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgorT1AyKFNMSklUX0FTSFIsIFNMSklUX1MxLCAwLCBTTEpJVF9TMSwgMCwgU0xKSVRfSU1NLCBVQ0hBUl9TSElGVCk7CisjZW5kaWYKK1NMSklUX0FTU0VSVChzaXplb2YoUENSRTJfU0laRSkgPT0gNCB8fCBzaXplb2YoUENSRTJfU0laRSkgPT0gOCk7CitpZiAoc2l6ZW9mKFBDUkUyX1NJWkUpID09IDQpCisgIE9QMShTTEpJVF9NT1ZVX1VJLCBTTEpJVF9NRU0xKFNMSklUX1IyKSwgc2l6ZW9mKFBDUkUyX1NJWkUpLCBTTEpJVF9TMSwgMCk7CitlbHNlCisgIE9QMShTTEpJVF9NT1ZVLCBTTEpJVF9NRU0xKFNMSklUX1IyKSwgc2l6ZW9mKFBDUkUyX1NJWkUpLCBTTEpJVF9TMSwgMCk7CitPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1IxLCAwLCBTTEpJVF9SMSwgMCwgU0xKSVRfSU1NLCAxKTsKK0pVTVBUTyhTTEpJVF9OT1RfWkVSTywgbG9vcCk7CisKKy8qIENhbGN1bGF0ZSB0aGUgcmV0dXJuIHZhbHVlLCB3aGljaCBpcyB0aGUgbWF4aW11bSBvdmVjdG9yIHZhbHVlLiAqLworaWYgKHRvcGJyYWNrZXQgPiAxKQorICB7CisgIEdFVF9MT0NBTF9CQVNFKFNMSklUX1IwLCAwLCBPVkVDVE9SX1NUQVJUICsgdG9wYnJhY2tldCAqIDIgKiBzaXplb2Yoc2xqaXRfc3cpKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfUjEsIDAsIFNMSklUX0lNTSwgdG9wYnJhY2tldCArIDEpOworCisgIC8qIE9WRUNUT1IoMCkgaXMgbmV2ZXIgZXF1YWwgdG8gU0xKSVRfUzIuICovCisgIGxvb3AgPSBMQUJFTCgpOworICBPUDEoU0xKSVRfTU9WVSwgU0xKSVRfUjIsIDAsIFNMSklUX01FTTEoU0xKSVRfUjApLCAtKDIgKiAoc2xqaXRfc3cpc2l6ZW9mKHNsaml0X3N3KSkpOworICBPUDIoU0xKSVRfU1VCLCBTTEpJVF9SMSwgMCwgU0xKSVRfUjEsIDAsIFNMSklUX0lNTSwgMSk7CisgIENNUFRPKFNMSklUX0VRVUFMLCBTTEpJVF9SMiwgMCwgU0xKSVRfUzIsIDAsIGxvb3ApOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9SRVRVUk5fUkVHLCAwLCBTTEpJVF9SMSwgMCk7CisgIH0KK2Vsc2UKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfUkVUVVJOX1JFRywgMCwgU0xKSVRfSU1NLCAxKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIHJldHVybl93aXRoX3BhcnRpYWxfbWF0Y2goY29tcGlsZXJfY29tbW9uICpjb21tb24sIHN0cnVjdCBzbGppdF9sYWJlbCAqcXVpdCkKK3sKK0RFRklORV9DT01QSUxFUjsKK3Nsaml0X3NpIG1vdl9vcGNvZGU7CisKK1NMSklUX0NPTVBJTEVfQVNTRVJUKFNUUl9FTkQgPT0gU0xKSVRfUzEsIHN0cl9lbmRfbXVzdF9iZV9zYXZlZF9yZWcyKTsKK1NMSklUX0FTU0VSVChjb21tb24tPnN0YXJ0X3VzZWRfcHRyICE9IDAgJiYgY29tbW9uLT5zdGFydF9wdHIgIT0gMAorICAmJiAoY29tbW9uLT5tb2RlID09IFBDUkUyX0pJVF9QQVJUSUFMX1NPRlQgPyBjb21tb24tPmhpdF9zdGFydCAhPSAwIDogY29tbW9uLT5oaXRfc3RhcnQgPT0gMCkpOworCitPUDEoU0xKSVRfTU9WLCBTTEpJVF9SMSwgMCwgQVJHVU1FTlRTLCAwKTsKK09QMShTTEpJVF9NT1YsIFNMSklUX1IyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwKKyAgY29tbW9uLT5tb2RlID09IFBDUkUyX0pJVF9QQVJUSUFMX1NPRlQgPyBjb21tb24tPmhpdF9zdGFydCA6IGNvbW1vbi0+c3RhcnRfcHRyKTsKK09QMShTTEpJVF9NT1YsIFNMSklUX1JFVFVSTl9SRUcsIDAsIFNMSklUX0lNTSwgUENSRTJfRVJST1JfUEFSVElBTCk7CisKKy8qIFN0b3JlIG1hdGNoIGJlZ2luIGFuZCBlbmQuICovCitPUDEoU0xKSVRfTU9WLCBTTEpJVF9TMCwgMCwgU0xKSVRfTUVNMShTTEpJVF9SMSksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIGJlZ2luKSk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1IxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgc3RhcnRjaGFyX3B0ciksIFNMSklUX1IyLCAwKTsKK09QMShTTEpJVF9NT1YsIFNMSklUX1IxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1IxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgbWF0Y2hfZGF0YSkpOworCittb3Zfb3Bjb2RlID0gKHNpemVvZihQQ1JFMl9TSVpFKSA9PSA0KSA/IFNMSklUX01PVl9VSSA6IFNMSklUX01PVjsKKworT1AyKFNMSklUX1NVQiwgU0xKSVRfUjIsIDAsIFNMSklUX1IyLCAwLCBTTEpJVF9TMCwgMCk7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2IHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgorT1AyKFNMSklUX0FTSFIsIFNMSklUX1IyLCAwLCBTTEpJVF9SMiwgMCwgU0xKSVRfSU1NLCBVQ0hBUl9TSElGVCk7CisjZW5kaWYKK09QMShtb3Zfb3Bjb2RlLCBTTEpJVF9NRU0xKFNMSklUX1IxKSwgU0xKSVRfT0ZGU0VUT0YocGNyZTJfbWF0Y2hfZGF0YSwgb3ZlY3RvciksIFNMSklUX1IyLCAwKTsKKworT1AyKFNMSklUX1NVQiwgU1RSX0VORCwgMCwgU1RSX0VORCwgMCwgU0xKSVRfUzAsIDApOworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNiB8fCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMzIKK09QMihTTEpJVF9BU0hSLCBTVFJfRU5ELCAwLCBTVFJfRU5ELCAwLCBTTEpJVF9JTU0sIFVDSEFSX1NISUZUKTsKKyNlbmRpZgorT1AxKG1vdl9vcGNvZGUsIFNMSklUX01FTTEoU0xKSVRfUjEpLCBTTEpJVF9PRkZTRVRPRihwY3JlMl9tYXRjaF9kYXRhLCBvdmVjdG9yKSArIHNpemVvZihQQ1JFMl9TSVpFKSwgU1RSX0VORCwgMCk7CisKK0pVTVBUTyhTTEpJVF9KVU1QLCBxdWl0KTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGNoZWNrX3N0YXJ0X3VzZWRfcHRyKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uKQoreworLyogTWF5IGRlc3Ryb3kgVE1QMS4gKi8KK0RFRklORV9DT01QSUxFUjsKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wOworCitpZiAoY29tbW9uLT5tb2RlID09IFBDUkUyX0pJVF9QQVJUSUFMX1NPRlQpCisgIHsKKyAgLyogVGhlIHZhbHVlIG9mIC0xIG11c3QgYmUga2VwdCBmb3Igc3RhcnRfdXNlZF9wdHIhICovCisgIE9QMihTTEpJVF9BREQsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPnN0YXJ0X3VzZWRfcHRyLCBTTEpJVF9JTU0sIDEpOworICAvKiBKdW1wcyBpZiBzdGFydF91c2VkX3B0ciA8IFNUUl9QVFIsIG9yIHN0YXJ0X3VzZWRfcHRyID09IC0xLiBBbHRob3VnaCBvdmVyd3JpdGluZworICBpcyBub3QgbmVjZXNzYXJ5IGlmIHN0YXJ0X3VzZWRfcHRyID09IFNUUl9QVFIsIGl0IGRvZXMgbm90IGh1cnQgYXMgd2VsbC4gKi8KKyAganVtcCA9IENNUChTTEpJVF9MRVNTX0VRVUFMLCBUTVAxLCAwLCBTVFJfUFRSLCAwKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+c3RhcnRfdXNlZF9wdHIsIFNUUl9QVFIsIDApOworICBKVU1QSEVSRShqdW1wKTsKKyAgfQorZWxzZSBpZiAoY29tbW9uLT5tb2RlID09IFBDUkUyX0pJVF9QQVJUSUFMX0hBUkQpCisgIHsKKyAganVtcCA9IENNUChTTEpJVF9MRVNTX0VRVUFMLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5zdGFydF91c2VkX3B0ciwgU1RSX1BUUiwgMCk7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPnN0YXJ0X3VzZWRfcHRyLCBTVFJfUFRSLCAwKTsKKyAgSlVNUEhFUkUoanVtcCk7CisgIH0KK30KKworc3RhdGljIFNMSklUX0lOTElORSBCT09MIGNoYXJfaGFzX290aGVyY2FzZShjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfU1BUUiBjYykKK3sKKy8qIERldGVjdHMgaWYgdGhlIGNoYXJhY3RlciBoYXMgYW4gb3RoZXJjYXNlLiAqLwordW5zaWduZWQgaW50IGM7CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK2lmIChjb21tb24tPnV0ZikKKyAgeworICBHRVRDSEFSKGMsIGNjKTsKKyAgaWYgKGMgPiAxMjcpCisgICAgeworICAgIHJldHVybiBjICE9IFVDRF9PVEhFUkNBU0UoYyk7CisgICAgfQorI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgIHJldHVybiBjb21tb24tPmZjY1tjXSAhPSBjOworI2VuZGlmCisgIH0KK2Vsc2UKKyNlbmRpZgorICBjID0gKmNjOworcmV0dXJuIE1BWF8yNTUoYykgPyBjb21tb24tPmZjY1tjXSAhPSBjIDogRkFMU0U7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdW5zaWduZWQgaW50IGNoYXJfb3RoZXJjYXNlKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCB1bnNpZ25lZCBpbnQgYykKK3sKKy8qIFJldHVybnMgd2l0aCB0aGUgb3RoZXJjYXNlLiAqLworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQoraWYgKGNvbW1vbi0+dXRmICYmIGMgPiAxMjcpCisgIHsKKyAgcmV0dXJuIFVDRF9PVEhFUkNBU0UoYyk7CisgIH0KKyNlbmRpZgorcmV0dXJuIFRBQkxFX0dFVChjLCBjb21tb24tPmZjYywgYyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2hhcl9nZXRfb3RoZXJjYXNlX2JpdChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfU1BUUiBjYykKK3sKKy8qIERldGVjdHMgaWYgdGhlIGNoYXJhY3RlciBhbmQgaXRzIG90aGVyY2FzZSBoYXMgb25seSAxIGJpdCBkaWZmZXJlbmNlLiAqLwordW5zaWduZWQgaW50IGMsIG9jLCBiaXQ7CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKK2ludCBuOworI2VuZGlmCisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK2lmIChjb21tb24tPnV0ZikKKyAgeworICBHRVRDSEFSKGMsIGNjKTsKKyAgaWYgKGMgPD0gMTI3KQorICAgIG9jID0gY29tbW9uLT5mY2NbY107CisgIGVsc2UKKyAgICB7CisgICAgb2MgPSBVQ0RfT1RIRVJDQVNFKGMpOworICAgIH0KKyAgfQorZWxzZQorICB7CisgIGMgPSAqY2M7CisgIG9jID0gVEFCTEVfR0VUKGMsIGNvbW1vbi0+ZmNjLCBjKTsKKyAgfQorI2Vsc2UKK2MgPSAqY2M7CitvYyA9IFRBQkxFX0dFVChjLCBjb21tb24tPmZjYywgYyk7CisjZW5kaWYKKworU0xKSVRfQVNTRVJUKGMgIT0gb2MpOworCitiaXQgPSBjIF4gb2M7CisvKiBPcHRpbWl6ZWQgZm9yIEVuZ2xpc2ggYWxwaGFiZXQuICovCitpZiAoYyA8PSAxMjcgJiYgYml0ID09IDB4MjApCisgIHJldHVybiAoMCA8PCA4KSB8IDB4MjA7CisKKy8qIFNpbmNlIGMgIT0gb2MsIHRoZXkgbXVzdCBoYXZlIGF0IGxlYXN0IDEgYml0IGRpZmZlcmVuY2UuICovCitpZiAoIWlzX3Bvd2Vyb2YyKGJpdCkpCisgIHJldHVybiAwOworCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQoraWYgKGNvbW1vbi0+dXRmICYmIGMgPiAxMjcpCisgIHsKKyAgbiA9IEdFVF9FWFRSQUxFTigqY2MpOworICB3aGlsZSAoKGJpdCAmIDB4M2YpID09IDApCisgICAgeworICAgIG4tLTsKKyAgICBiaXQgPj49IDY7CisgICAgfQorICByZXR1cm4gKG4gPDwgOCkgfCBiaXQ7CisgIH0KKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgKi8KK3JldHVybiAoMCA8PCA4KSB8IGJpdDsKKworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2IHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgorCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCitpZiAoY29tbW9uLT51dGYgJiYgYyA+IDY1NTM1KQorICB7CisgIGlmIChiaXQgPj0gKDEgPDwgMTApKQorICAgIGJpdCA+Pj0gMTA7CisgIGVsc2UKKyAgICByZXR1cm4gKGJpdCA8IDI1NikgPyAoKDIgPDwgOCkgfCBiaXQpIDogKCgzIDw8IDgpIHwgKGJpdCA+PiA4KSk7CisgIH0KKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgKi8KK3JldHVybiAoYml0IDwgMjU2KSA/ICgoMCA8PCA4KSB8IGJpdCkgOiAoKDEgPDwgOCkgfCAoYml0ID4+IDgpKTsKKworI2VuZGlmIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSBbOHwxNnwzMl0gKi8KK30KKworc3RhdGljIHZvaWQgY2hlY2tfcGFydGlhbChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgQk9PTCBmb3JjZSkKK3sKKy8qIENoZWNrcyB3aGV0aGVyIGEgcGFydGlhbCBtYXRjaGluZyBpcyBvY2N1cnJlZC4gRG9lcyBub3QgbW9kaWZ5IHJlZ2lzdGVycy4gKi8KK0RFRklORV9DT01QSUxFUjsKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wID0gTlVMTDsKKworU0xKSVRfQVNTRVJUKCFmb3JjZSB8fCBjb21tb24tPm1vZGUgIT0gUENSRTJfSklUX0NPTVBMRVRFKTsKKworaWYgKGNvbW1vbi0+bW9kZSA9PSBQQ1JFMl9KSVRfQ09NUExFVEUpCisgIHJldHVybjsKKworaWYgKCFmb3JjZSkKKyAganVtcCA9IENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5zdGFydF91c2VkX3B0ciwgU1RSX1BUUiwgMCk7CitlbHNlIGlmIChjb21tb24tPm1vZGUgPT0gUENSRTJfSklUX1BBUlRJQUxfU09GVCkKKyAganVtcCA9IENNUChTTEpJVF9FUVVBTCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+c3RhcnRfdXNlZF9wdHIsIFNMSklUX0lNTSwgLTEpOworCitpZiAoY29tbW9uLT5tb2RlID09IFBDUkUyX0pJVF9QQVJUSUFMX1NPRlQpCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmhpdF9zdGFydCwgU0xKSVRfSU1NLCAwKTsKK2Vsc2UKKyAgeworICBpZiAoY29tbW9uLT5wYXJ0aWFsbWF0Y2hsYWJlbCAhPSBOVUxMKQorICAgIEpVTVBUTyhTTEpJVF9KVU1QLCBjb21tb24tPnBhcnRpYWxtYXRjaGxhYmVsKTsKKyAgZWxzZQorICAgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5wYXJ0aWFsbWF0Y2gsIEpVTVAoU0xKSVRfSlVNUCkpOworICB9CisKK2lmIChqdW1wICE9IE5VTEwpCisgIEpVTVBIRVJFKGp1bXApOworfQorCitzdGF0aWMgdm9pZCBjaGVja19zdHJfZW5kKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBqdW1wX2xpc3QgKiplbmRfcmVhY2hlZCkKK3sKKy8qIERvZXMgbm90IGFmZmVjdCByZWdpc3RlcnMuIFVzdWFsbHkgdXNlZCBpbiBhIHRpZ2h0IHNwb3QuICovCitERUZJTkVfQ09NUElMRVI7CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKworaWYgKGNvbW1vbi0+bW9kZSA9PSBQQ1JFMl9KSVRfQ09NUExFVEUpCisgIHsKKyAgYWRkX2p1bXAoY29tcGlsZXIsIGVuZF9yZWFjaGVkLCBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCkpOworICByZXR1cm47CisgIH0KKworanVtcCA9IENNUChTTEpJVF9MRVNTLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKTsKK2lmIChjb21tb24tPm1vZGUgPT0gUENSRTJfSklUX1BBUlRJQUxfU09GVCkKKyAgeworICBhZGRfanVtcChjb21waWxlciwgZW5kX3JlYWNoZWQsIENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5zdGFydF91c2VkX3B0ciwgU1RSX1BUUiwgMCkpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5oaXRfc3RhcnQsIFNMSklUX0lNTSwgMCk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCBlbmRfcmVhY2hlZCwgSlVNUChTTEpJVF9KVU1QKSk7CisgIH0KK2Vsc2UKKyAgeworICBhZGRfanVtcChjb21waWxlciwgZW5kX3JlYWNoZWQsIENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5zdGFydF91c2VkX3B0ciwgU1RSX1BUUiwgMCkpOworICBpZiAoY29tbW9uLT5wYXJ0aWFsbWF0Y2hsYWJlbCAhPSBOVUxMKQorICAgIEpVTVBUTyhTTEpJVF9KVU1QLCBjb21tb24tPnBhcnRpYWxtYXRjaGxhYmVsKTsKKyAgZWxzZQorICAgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5wYXJ0aWFsbWF0Y2gsIEpVTVAoU0xKSVRfSlVNUCkpOworICB9CitKVU1QSEVSRShqdW1wKTsKK30KKworc3RhdGljIHZvaWQgZGV0ZWN0X3BhcnRpYWxfbWF0Y2goY29tcGlsZXJfY29tbW9uICpjb21tb24sIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MpCit7CitERUZJTkVfQ09NUElMRVI7CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKworaWYgKGNvbW1vbi0+bW9kZSA9PSBQQ1JFMl9KSVRfQ09NUExFVEUpCisgIHsKKyAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKSk7CisgIHJldHVybjsKKyAgfQorCisvKiBQYXJ0aWFsIG1hdGNoaW5nIG1vZGUuICovCitqdW1wID0gQ01QKFNMSklUX0xFU1MsIFNUUl9QVFIsIDAsIFNUUl9FTkQsIDApOworYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5zdGFydF91c2VkX3B0ciwgU1RSX1BUUiwgMCkpOworaWYgKGNvbW1vbi0+bW9kZSA9PSBQQ1JFMl9KSVRfUEFSVElBTF9TT0ZUKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmhpdF9zdGFydCwgU0xKSVRfSU1NLCAwKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIEpVTVAoU0xKSVRfSlVNUCkpOworICB9CitlbHNlCisgIHsKKyAgaWYgKGNvbW1vbi0+cGFydGlhbG1hdGNobGFiZWwgIT0gTlVMTCkKKyAgICBKVU1QVE8oU0xKSVRfSlVNUCwgY29tbW9uLT5wYXJ0aWFsbWF0Y2hsYWJlbCk7CisgIGVsc2UKKyAgICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+cGFydGlhbG1hdGNoLCBKVU1QKFNMSklUX0pVTVApKTsKKyAgfQorSlVNUEhFUkUoanVtcCk7Cit9CisKK3N0YXRpYyB2b2lkIHBlZWtfY2hhcihjb21waWxlcl9jb21tb24gKmNvbW1vbiwgc2xqaXRfdWkgbWF4KQoreworLyogUmVhZHMgdGhlIGNoYXJhY3RlciBpbnRvIFRNUDEsIGtlZXBzIFNUUl9QVFIuCitEb2VzIG5vdCBjaGVjayBTVFJfRU5ELiBUTVAyIERlc3Ryb3llZC4gKi8KK0RFRklORV9DT01QSUxFUjsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wOworI2VuZGlmCisKK1NMSklUX1VOVVNFRF9BUkcobWF4KTsKKworT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgMCk7CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKK2lmIChjb21tb24tPnV0ZikKKyAgeworICBpZiAobWF4IDwgMTI4KSByZXR1cm47CisKKyAganVtcCA9IENNUChTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4YzApOworICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT51dGZyZWFkY2hhciwgSlVNUChTTEpJVF9GQVNUX0NBTEwpKTsKKyAgT1AyKFNMSklUX1NVQiwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgVE1QMiwgMCk7CisgIEpVTVBIRVJFKGp1bXApOworICB9CisjZW5kaWYgLyogU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSAzMiAqLworCisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CitpZiAoY29tbW9uLT51dGYpCisgIHsKKyAgaWYgKG1heCA8IDB4ZDgwMCkgcmV0dXJuOworCisgIE9QMihTTEpJVF9TVUIsIFRNUDIsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhkODAwKTsKKyAganVtcCA9IENNUChTTEpJVF9HUkVBVEVSLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDB4ZGMwMCAtIDB4ZDgwMCAtIDEpOworICAvKiBUTVAyIGNvbnRhaW5zIHRoZSBoaWdoIHN1cnJvZ2F0ZS4gKi8KKyAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDApKTsKKyAgT1AyKFNMSklUX0FERCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAweDQwKTsKKyAgT1AyKFNMSklUX1NITCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAxMCk7CisgIE9QMihTTEpJVF9BTkQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgzZmYpOworICBPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFRNUDIsIDApOworICBKVU1QSEVSRShqdW1wKTsKKyAgfQorI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorCitzdGF0aWMgQk9PTCBpc19jaGFyN19iaXRzZXQoY29uc3Qgc2xqaXRfdWIgKmJpdHNldCwgQk9PTCBuY2xhc3MpCit7CisvKiBUZWxscyB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgY29kZXMgYmVsb3cgMTI4IGFyZSBlbm91Z2gKK3RvIGRldGVybWluZSBhIG1hdGNoLiAqLworY29uc3Qgc2xqaXRfdWIgdmFsdWUgPSBuY2xhc3MgPyAweGZmIDogMDsKK2NvbnN0IHNsaml0X3ViICplbmQgPSBiaXRzZXQgKyAzMjsKKworYml0c2V0ICs9IDE2OworZG8KKyAgeworICBpZiAoKmJpdHNldCsrICE9IHZhbHVlKQorICAgIHJldHVybiBGQUxTRTsKKyAgfQord2hpbGUgKGJpdHNldCA8IGVuZCk7CityZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9jaGFyN190eXBlKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBCT09MIGZ1bGxfcmVhZCkKK3sKKy8qIFJlYWRzIHRoZSBwcmVjaXNlIGNoYXJhY3RlciB0eXBlIG9mIGEgY2hhcmFjdGVyIGludG8gVE1QMSwgaWYgdGhlIGNoYXJhY3RlcgoraXMgbGVzcyB0aGFuIDEyOC4gT3RoZXJ3aXNlIGl0IHJldHVybnMgd2l0aCB6ZXJvLiBEb2VzIG5vdCBjaGVjayBTVFJfRU5ELiBUaGUKK2Z1bGxfcmVhZCBhcmd1bWVudCB0ZWxscyB3aGV0aGVyIGNoYXJhY3RlcnMgYWJvdmUgbWF4IGFyZSBhY2NlcHRlZCBvciBub3QuICovCitERUZJTkVfQ09NUElMRVI7CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKworU0xKSVRfQVNTRVJUKGNvbW1vbi0+dXRmKTsKKworT1AxKE1PVl9VQ0hBUiwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgMCk7CitPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisKK09QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIGNvbW1vbi0+Y3R5cGVzKTsKKworaWYgKGZ1bGxfcmVhZCkKKyAgeworICBqdW1wID0gQ01QKFNMSklUX0xFU1MsIFRNUDIsIDAsIFNMSklUX0lNTSwgMHhjMCk7CisgIE9QMShTTEpJVF9NT1ZfVUIsIFRNUDIsIDAsIFNMSklUX01FTTEoVE1QMiksIChzbGppdF9zdylQUklWKHV0ZjhfdGFibGU0KSAtIDB4YzApOworICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBUTVAyLCAwKTsKKyAgSlVNUEhFUkUoanVtcCk7CisgIH0KK30KKworI2VuZGlmIC8qIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOCAqLworCitzdGF0aWMgdm9pZCByZWFkX2NoYXJfcmFuZ2UoY29tcGlsZXJfY29tbW9uICpjb21tb24sIHNsaml0X3VpIG1pbiwgc2xqaXRfdWkgbWF4LCBCT09MIHVwZGF0ZV9zdHJfcHRyKQoreworLyogUmVhZHMgdGhlIHByZWNpc2UgdmFsdWUgb2YgYSBjaGFyYWN0ZXIgaW50byBUTVAxLCBpZiB0aGUgY2hhcmFjdGVyIGlzCitiZXR3ZWVuIG1pbiBhbmQgbWF4IChjID49IG1pbiAmJiBjIDw9IG1heCkuIE90aGVyd2lzZSBpdCByZXR1cm5zIHdpdGggYSB2YWx1ZQorb3V0c2lkZSB0aGUgcmFuZ2UuIERvZXMgbm90IGNoZWNrIFNUUl9FTkQuICovCitERUZJTkVfQ09NUElMRVI7CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDMyCitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKyNlbmRpZgorI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDI7CisjZW5kaWYKKworU0xKSVRfVU5VU0VEX0FSRyh1cGRhdGVfc3RyX3B0cik7CitTTEpJVF9VTlVTRURfQVJHKG1pbik7CitTTEpJVF9VTlVTRURfQVJHKG1heCk7CitTTEpJVF9BU1NFUlQobWluIDw9IG1heCk7CisKK09QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygwKSk7CitPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAoraWYgKGNvbW1vbi0+dXRmKQorICB7CisgIGlmIChtYXggPCAxMjggJiYgIXVwZGF0ZV9zdHJfcHRyKSByZXR1cm47CisKKyAganVtcCA9IENNUChTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4YzApOworICBpZiAobWluID49IDB4MTAwMDApCisgICAgeworICAgIE9QMihTTEpJVF9TVUIsIFRNUDIsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhmMCk7CisgICAgaWYgKHVwZGF0ZV9zdHJfcHRyKQorICAgICAgT1AxKFNMSklUX01PVl9VQiwgUkVUVVJOX0FERFIsIDAsIFNMSklUX01FTTEoVE1QMSksIChzbGppdF9zdylQUklWKHV0ZjhfdGFibGU0KSAtIDB4YzApOworICAgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygwKSk7CisgICAganVtcDIgPSBDTVAoU0xKSVRfR1JFQVRFUiwgVE1QMiwgMCwgU0xKSVRfSU1NLCAweDcpOworICAgIE9QMihTTEpJVF9TSEwsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgNik7CisgICAgT1AyKFNMSklUX0FORCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDNmKTsKKyAgICBPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFRNUDIsIDApOworICAgIE9QMShNT1ZfVUNIQVIsIFRNUDIsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygxKSk7CisgICAgT1AyKFNMSklUX1NITCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCA2KTsKKyAgICBPUDIoU0xKSVRfQU5ELCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDB4M2YpOworICAgIE9QMihTTEpJVF9PUiwgVE1QMSwgMCwgVE1QMSwgMCwgVE1QMiwgMCk7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDIpKTsKKyAgICBpZiAoIXVwZGF0ZV9zdHJfcHRyKQorICAgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMykpOworICAgIE9QMihTTEpJVF9TSEwsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgNik7CisgICAgT1AyKFNMSklUX0FORCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAweDNmKTsKKyAgICBPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFRNUDIsIDApOworICAgIEpVTVBIRVJFKGp1bXAyKTsKKyAgICBpZiAodXBkYXRlX3N0cl9wdHIpCisgICAgICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBSRVRVUk5fQUREUiwgMCk7CisgICAgfQorICBlbHNlIGlmIChtaW4gPj0gMHg4MDAgJiYgbWF4IDw9IDB4ZmZmZikKKyAgICB7CisgICAgT1AyKFNMSklUX1NVQiwgVE1QMiwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweGUwKTsKKyAgICBpZiAodXBkYXRlX3N0cl9wdHIpCisgICAgICBPUDEoU0xKSVRfTU9WX1VCLCBSRVRVUk5fQUREUiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDApKTsKKyAgICBqdW1wMiA9IENNUChTTEpJVF9HUkVBVEVSLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDB4Zik7CisgICAgT1AyKFNMSklUX1NITCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCA2KTsKKyAgICBPUDIoU0xKSVRfQU5ELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4M2YpOworICAgIE9QMihTTEpJVF9PUiwgVE1QMSwgMCwgVE1QMSwgMCwgVE1QMiwgMCk7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDEpKTsKKyAgICBpZiAoIXVwZGF0ZV9zdHJfcHRyKQorICAgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMikpOworICAgIE9QMihTTEpJVF9TSEwsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgNik7CisgICAgT1AyKFNMSklUX0FORCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAweDNmKTsKKyAgICBPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFRNUDIsIDApOworICAgIEpVTVBIRVJFKGp1bXAyKTsKKyAgICBpZiAodXBkYXRlX3N0cl9wdHIpCisgICAgICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBSRVRVUk5fQUREUiwgMCk7CisgICAgfQorICBlbHNlIGlmIChtYXggPj0gMHg4MDApCisgICAgYWRkX2p1bXAoY29tcGlsZXIsIChtYXggPCAweDEwMDAwKSA/ICZjb21tb24tPnV0ZnJlYWRjaGFyMTYgOiAmY29tbW9uLT51dGZyZWFkY2hhciwgSlVNUChTTEpJVF9GQVNUX0NBTEwpKTsKKyAgZWxzZSBpZiAobWF4IDwgMTI4KQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpUFJJVih1dGY4X3RhYmxlNCkgLSAweGMwKTsKKyAgICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBUTVAyLCAwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDApKTsKKyAgICBpZiAoIXVwZGF0ZV9zdHJfcHRyKQorICAgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICAgIGVsc2UKKyAgICAgIE9QMShTTEpJVF9NT1ZfVUIsIFJFVFVSTl9BRERSLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpUFJJVih1dGY4X3RhYmxlNCkgLSAweGMwKTsKKyAgICBPUDIoU0xKSVRfQU5ELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4M2YpOworICAgIE9QMihTTEpJVF9TSEwsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgNik7CisgICAgT1AyKFNMSklUX0FORCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAweDNmKTsKKyAgICBPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFRNUDIsIDApOworICAgIGlmICh1cGRhdGVfc3RyX3B0cikKKyAgICAgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFJFVFVSTl9BRERSLCAwKTsKKyAgICB9CisgIEpVTVBIRVJFKGp1bXApOworICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgoraWYgKGNvbW1vbi0+dXRmKQorICB7CisgIGlmIChtYXggPj0gMHgxMDAwMCkKKyAgICB7CisgICAgT1AyKFNMSklUX1NVQiwgVE1QMiwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweGQ4MDApOworICAgIGp1bXAgPSBDTVAoU0xKSVRfR1JFQVRFUiwgVE1QMiwgMCwgU0xKSVRfSU1NLCAweGRjMDAgLSAweGQ4MDAgLSAxKTsKKyAgICAvKiBUTVAyIGNvbnRhaW5zIHRoZSBoaWdoIHN1cnJvZ2F0ZS4gKi8KKyAgICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCBJTl9VQ0hBUlMoMCkpOworICAgIE9QMihTTEpJVF9BREQsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgMHg0MCk7CisgICAgT1AyKFNMSklUX1NITCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAxMCk7CisgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICAgIE9QMihTTEpJVF9BTkQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgzZmYpOworICAgIE9QMihTTEpJVF9PUiwgVE1QMSwgMCwgVE1QMSwgMCwgVE1QMiwgMCk7CisgICAgSlVNUEhFUkUoanVtcCk7CisgICAgcmV0dXJuOworICAgIH0KKworICBpZiAobWF4IDwgMHhkODAwICYmICF1cGRhdGVfc3RyX3B0cikgcmV0dXJuOworCisgIC8qIFNraXAgbG93IHN1cnJvZ2F0ZSBpZiBuZWNlc3NhcnkuICovCisgIE9QMihTTEpJVF9TVUIsIFRNUDIsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhkODAwKTsKKyAganVtcCA9IENNUChTTEpJVF9HUkVBVEVSLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDB4ZGMwMCAtIDB4ZDgwMCAtIDEpOworICBpZiAodXBkYXRlX3N0cl9wdHIpCisgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICBpZiAobWF4ID49IDB4ZDgwMCkKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4MTAwMDApOworICBKVU1QSEVSRShqdW1wKTsKKyAgfQorI2VuZGlmCit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCByZWFkX2NoYXIoY29tcGlsZXJfY29tbW9uICpjb21tb24pCit7CityZWFkX2NoYXJfcmFuZ2UoY29tbW9uLCAwLCBSRUFEX0NIQVJfTUFYLCBUUlVFKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9jaGFyOF90eXBlKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBCT09MIHVwZGF0ZV9zdHJfcHRyKQoreworLyogUmVhZHMgdGhlIGNoYXJhY3RlciB0eXBlIGludG8gVE1QMSwgdXBkYXRlcyBTVFJfUFRSLiBEb2VzIG5vdCBjaGVjayBTVFJfRU5ELiAqLworREVGSU5FX0NPTVBJTEVSOworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFIHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKyNlbmRpZgorI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDI7CisjZW5kaWYKKworU0xKSVRfVU5VU0VEX0FSRyh1cGRhdGVfc3RyX3B0cik7CisKK09QMShNT1ZfVUNIQVIsIFRNUDIsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIDApOworT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworCisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKK2lmIChjb21tb24tPnV0ZikKKyAgeworICAvKiBUaGlzIGNhbiBiZSBhbiBleHRyYSByZWFkIGluIHNvbWUgc2l0dWF0aW9ucywgYnV0IGhvcGVmdWxseQorICBpdCBpcyBuZWVkZWQgaW4gbW9zdCBjYXNlcy4gKi8KKyAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAyKSwgY29tbW9uLT5jdHlwZXMpOworICBqdW1wID0gQ01QKFNMSklUX0xFU1MsIFRNUDIsIDAsIFNMSklUX0lNTSwgMHhjMCk7CisgIGlmICghdXBkYXRlX3N0cl9wdHIpCisgICAgeworICAgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygwKSk7CisgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICAgIE9QMihTTEpJVF9BTkQsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgMHgzZik7CisgICAgT1AyKFNMSklUX1NITCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCA2KTsKKyAgICBPUDIoU0xKSVRfQU5ELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4M2YpOworICAgIE9QMihTTEpJVF9PUiwgVE1QMiwgMCwgVE1QMiwgMCwgVE1QMSwgMCk7CisgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfSU1NLCAwKTsKKyAgICBqdW1wMiA9IENNUChTTEpJVF9HUkVBVEVSLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDI1NSk7CisgICAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAyKSwgY29tbW9uLT5jdHlwZXMpOworICAgIEpVTVBIRVJFKGp1bXAyKTsKKyAgICB9CisgIGVsc2UKKyAgICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+dXRmcmVhZHR5cGU4LCBKVU1QKFNMSklUX0ZBU1RfQ0FMTCkpOworICBKVU1QSEVSRShqdW1wKTsKKyAgcmV0dXJuOworICB9CisjZW5kaWYgLyogU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4ICovCisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorLyogVGhlIGN0eXBlcyBhcnJheSBjb250YWlucyBvbmx5IDI1NiB2YWx1ZXMuICovCitPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDApOworanVtcCA9IENNUChTTEpJVF9HUkVBVEVSLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDI1NSk7CisjZW5kaWYKK09QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIGNvbW1vbi0+Y3R5cGVzKTsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorSlVNUEhFUkUoanVtcCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgoraWYgKGNvbW1vbi0+dXRmICYmIHVwZGF0ZV9zdHJfcHRyKQorICB7CisgIC8qIFNraXAgbG93IHN1cnJvZ2F0ZSBpZiBuZWNlc3NhcnkuICovCisgIE9QMihTTEpJVF9TVUIsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgMHhkODAwKTsKKyAganVtcCA9IENNUChTTEpJVF9HUkVBVEVSLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDB4ZGMwMCAtIDB4ZDgwMCAtIDEpOworICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisgIEpVTVBIRVJFKGp1bXApOworICB9CisjZW5kaWYgLyogU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNiAqLworfQorCitzdGF0aWMgdm9pZCBza2lwX2NoYXJfYmFjayhjb21waWxlcl9jb21tb24gKmNvbW1vbikKK3sKKy8qIEdvZXMgb25lIGNoYXJhY3RlciBiYWNrLiBBZmZlY3RzIFNUUl9QVFIgYW5kIFRNUDEuIERvZXMgbm90IGNoZWNrIGJlZ2luLiAqLworREVGSU5FX0NPTVBJTEVSOworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSAzMgorI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOworCitpZiAoY29tbW9uLT51dGYpCisgIHsKKyAgbGFiZWwgPSBMQUJFTCgpOworICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAtSU5fVUNIQVJTKDEpKTsKKyAgT1AyKFNMSklUX1NVQiwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICBPUDIoU0xKSVRfQU5ELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4YzApOworICBDTVBUTyhTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDgwLCBsYWJlbCk7CisgIHJldHVybjsKKyAgfQorI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CitpZiAoY29tbW9uLT51dGYpCisgIHsKKyAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgLUlOX1VDSEFSUygxKSk7CisgIE9QMihTTEpJVF9TVUIsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKKyAgLyogU2tpcCBsb3cgc3Vycm9nYXRlIGlmIG5lY2Vzc2FyeS4gKi8KKyAgT1AyKFNMSklUX0FORCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweGZjMDApOworICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweGRjMDApOworICBPUF9GTEFHUyhTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX1VOVVNFRCwgMCwgU0xKSVRfRVFVQUwpOworICBPUDIoU0xKSVRfU0hMLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDEpOworICBPUDIoU0xKSVRfU1VCLCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBUTVAxLCAwKTsKKyAgcmV0dXJuOworICB9CisjZW5kaWYgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIID09IFs4fDE2XSAqLworI2VuZGlmIC8qIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIgKi8KK09QMihTTEpJVF9TVUIsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfbmV3bGluZWNoYXIoY29tcGlsZXJfY29tbW9uICpjb21tb24sIGludCBubHR5cGUsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MsIEJPT0wganVtcGlmbWF0Y2gpCit7CisvKiBDaGFyYWN0ZXIgY29tZXMgaW4gVE1QMS4gQ2hlY2tzIGlmIGl0IGlzIGEgbmV3bGluZS4gVE1QMiBtYXkgYmUgZGVzdHJveWVkLiAqLworREVGSU5FX0NPTVBJTEVSOworc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CisKK2lmIChubHR5cGUgPT0gTkxUWVBFX0FOWSkKKyAgeworICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+YW55bmV3bGluZSwgSlVNUChTTEpJVF9GQVNUX0NBTEwpKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIEpVTVAoanVtcGlmbWF0Y2ggPyBTTEpJVF9OT1RfWkVSTyA6IFNMSklUX1pFUk8pKTsKKyAgfQorZWxzZSBpZiAobmx0eXBlID09IE5MVFlQRV9BTllDUkxGKQorICB7CisgIGlmIChqdW1waWZtYXRjaCkKKyAgICB7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBDSEFSX0NSKSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBDSEFSX05MKSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgIGp1bXAgPSBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgQ0hBUl9DUik7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgQ0hBUl9OTCkpOworICAgIEpVTVBIRVJFKGp1bXApOworICAgIH0KKyAgfQorZWxzZQorICB7CisgIFNMSklUX0FTU0VSVChubHR5cGUgPT0gTkxUWVBFX0ZJWEVEICYmIGNvbW1vbi0+bmV3bGluZSA8IDI1Nik7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoanVtcGlmbWF0Y2ggPyBTTEpJVF9FUVVBTCA6IFNMSklUX05PVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBjb21tb24tPm5ld2xpbmUpKTsKKyAgfQorfQorCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorc3RhdGljIHZvaWQgZG9fdXRmcmVhZGNoYXIoY29tcGlsZXJfY29tbW9uICpjb21tb24pCit7CisvKiBGYXN0IGRlY29kaW5nIGEgVVRGLTggY2hhcmFjdGVyLiBUTVAxIGNvbnRhaW5zIHRoZSBmaXJzdCBieXRlCitvZiB0aGUgY2hhcmFjdGVyICg+PSAweGMwKS4gUmV0dXJuIGNoYXIgdmFsdWUgaW4gVE1QMSwgbGVuZ3RoIGluIFRNUDIuICovCitERUZJTkVfQ09NUElMRVI7CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKworc2xqaXRfZW1pdF9mYXN0X2VudGVyKGNvbXBpbGVyLCBSRVRVUk5fQUREUiwgMCk7CitPUDEoTU9WX1VDSEFSLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCBJTl9VQ0hBUlMoMCkpOworT1AyKFNMSklUX0FORCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDNmKTsKK09QMihTTEpJVF9TSEwsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgNik7CitPUDIoU0xKSVRfQU5ELCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDB4M2YpOworT1AyKFNMSklUX09SLCBUTVAxLCAwLCBUTVAxLCAwLCBUTVAyLCAwKTsKKworLyogU2VhcmNoaW5nIGZvciB0aGUgZmlyc3QgemVyby4gKi8KK09QMihTTEpJVF9BTkQgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ODAwKTsKK2p1bXAgPSBKVU1QKFNMSklUX05PVF9aRVJPKTsKKy8qIFR3byBieXRlIHNlcXVlbmNlLiAqLworT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMikpOworc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgUkVUVVJOX0FERFIsIDApOworCitKVU1QSEVSRShqdW1wKTsKK09QMShNT1ZfVUNIQVIsIFRNUDIsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygxKSk7CitPUDIoU0xKSVRfWE9SLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ODAwKTsKK09QMihTTEpJVF9TSEwsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgNik7CitPUDIoU0xKSVRfQU5ELCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDB4M2YpOworT1AyKFNMSklUX09SLCBUTVAxLCAwLCBUTVAxLCAwLCBUTVAyLCAwKTsKKworT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgxMDAwMCk7CitqdW1wID0gSlVNUChTTEpJVF9OT1RfWkVSTyk7CisvKiBUaHJlZSBieXRlIHNlcXVlbmNlLiAqLworT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMikpOworT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMykpOworc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgUkVUVVJOX0FERFIsIDApOworCisvKiBGb3VyIGJ5dGUgc2VxdWVuY2UuICovCitKVU1QSEVSRShqdW1wKTsKK09QMShNT1ZfVUNIQVIsIFRNUDIsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygyKSk7CitPUDIoU0xKSVRfWE9SLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4MTAwMDApOworT1AyKFNMSklUX1NITCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCA2KTsKK09QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDMpKTsKK09QMihTTEpJVF9BTkQsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgMHgzZik7CitPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFRNUDIsIDApOworT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoNCkpOworc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgUkVUVVJOX0FERFIsIDApOworfQorCitzdGF0aWMgdm9pZCBkb191dGZyZWFkY2hhcjE2KGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uKQoreworLyogRmFzdCBkZWNvZGluZyBhIFVURi04IGNoYXJhY3Rlci4gVE1QMSBjb250YWlucyB0aGUgZmlyc3QgYnl0ZQorb2YgdGhlIGNoYXJhY3RlciAoPj0gMHhjMCkuIFJldHVybiB2YWx1ZSBpbiBUTVAxLiAqLworREVGSU5FX0NPTVBJTEVSOworc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CisKK3Nsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgUkVUVVJOX0FERFIsIDApOworT1AxKE1PVl9VQ0hBUiwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDApKTsKK09QMihTTEpJVF9BTkQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgzZik7CitPUDIoU0xKSVRfU0hMLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDYpOworT1AyKFNMSklUX0FORCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAweDNmKTsKK09QMihTTEpJVF9PUiwgVE1QMSwgMCwgVE1QMSwgMCwgVE1QMiwgMCk7CisKKy8qIFNlYXJjaGluZyBmb3IgdGhlIGZpcnN0IHplcm8uICovCitPUDIoU0xKSVRfQU5EIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDgwMCk7CitqdW1wID0gSlVNUChTTEpJVF9OT1RfWkVSTyk7CisvKiBUd28gYnl0ZSBzZXF1ZW5jZS4gKi8KK09QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKK3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKKworSlVNUEhFUkUoanVtcCk7CitPUDIoU0xKSVRfQU5EIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDQwMCk7CitPUF9GTEFHUyhTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX1VOVVNFRCwgMCwgU0xKSVRfTk9UX1pFUk8pOworLyogVGhpcyBjb2RlIHJ1bnMgb25seSBpbiA4IGJpdCBtb2RlLiBObyBuZWVkIHRvIHNoaWZ0IHRoZSB2YWx1ZS4gKi8KK09QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDIsIDApOworT1AxKE1PVl9VQ0hBUiwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDEpKTsKK09QMihTTEpJVF9YT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHg4MDApOworT1AyKFNMSklUX1NITCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCA2KTsKK09QMihTTEpJVF9BTkQsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgMHgzZik7CitPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFRNUDIsIDApOworLyogVGhyZWUgYnl0ZSBzZXF1ZW5jZS4gKi8KK09QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDIpKTsKK3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKK30KKworc3RhdGljIHZvaWQgZG9fdXRmcmVhZHR5cGU4KGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uKQoreworLyogRmFzdCBkZWNvZGluZyBhIFVURi04IGNoYXJhY3RlciB0eXBlLiBUTVAyIGNvbnRhaW5zIHRoZSBmaXJzdCBieXRlCitvZiB0aGUgY2hhcmFjdGVyICg+PSAweGMwKS4gUmV0dXJuIHZhbHVlIGluIFRNUDEuICovCitERUZJTkVfQ09NUElMRVI7CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKK3N0cnVjdCBzbGppdF9qdW1wICpjb21wYXJlOworCitzbGppdF9lbWl0X2Zhc3RfZW50ZXIoY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKKworT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgMHgyMCk7CitqdW1wID0gSlVNUChTTEpJVF9OT1RfWkVSTyk7CisvKiBUd28gYnl0ZSBzZXF1ZW5jZS4gKi8KK09QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygwKSk7CitPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CitPUDIoU0xKSVRfQU5ELCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDB4MWYpOworLyogVGhlIHVwcGVyIDUgYml0cyBhcmUga25vd24gYXQgdGhpcyBwb2ludC4gKi8KK2NvbXBhcmUgPSBDTVAoU0xKSVRfR1JFQVRFUiwgVE1QMiwgMCwgU0xKSVRfSU1NLCAweDMpOworT1AyKFNMSklUX1NITCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCA2KTsKK09QMihTTEpJVF9BTkQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgzZik7CitPUDIoU0xKSVRfT1IsIFRNUDIsIDAsIFRNUDIsIDAsIFRNUDEsIDApOworT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAyKSwgY29tbW9uLT5jdHlwZXMpOworc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgUkVUVVJOX0FERFIsIDApOworCitKVU1QSEVSRShjb21wYXJlKTsKK09QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX0lNTSwgMCk7CitzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKGNvbXBpbGVyLCBSRVRVUk5fQUREUiwgMCk7CisKKy8qIFdlIG9ubHkgaGF2ZSB0eXBlcyBmb3IgY2hhcmFjdGVycyBsZXNzIHRoYW4gMjU2LiAqLworSlVNUEhFUkUoanVtcCk7CitPUDEoU0xKSVRfTU9WX1VCLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCAoc2xqaXRfc3cpUFJJVih1dGY4X3RhYmxlNCkgLSAweGMwKTsKK09QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX0lNTSwgMCk7CitPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBUTVAyLCAwKTsKK3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKK30KKworI2VuZGlmIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4ICovCisKKy8qIFVDRF9CTE9DS19TSVpFIG11c3QgYmUgMTI4IChzZWUgdGhlIGFzc2VydCBiZWxvdykuICovCisjZGVmaW5lIFVDRF9CTE9DS19NQVNLIDEyNworI2RlZmluZSBVQ0RfQkxPQ0tfU0hJRlQgNworCitzdGF0aWMgdm9pZCBkb19nZXR1Y2QoY29tcGlsZXJfY29tbW9uICpjb21tb24pCit7CisvKiBTZWFyY2ggdGhlIFVDRCByZWNvcmQgZm9yIHRoZSBjaGFyYWN0ZXIgY29tZXMgaW4gVE1QMS4KK1JldHVybnMgY2hhcnR5cGUgaW4gVE1QMSBhbmQgVUNEIG9mZnNldCBpbiBUTVAyLiAqLworREVGSU5FX0NPTVBJTEVSOworCitTTEpJVF9BU1NFUlQoVUNEX0JMT0NLX1NJWkUgPT0gMTI4ICYmIHNpemVvZih1Y2RfcmVjb3JkKSA9PSA4KTsKKworc2xqaXRfZW1pdF9mYXN0X2VudGVyKGNvbXBpbGVyLCBSRVRVUk5fQUREUiwgMCk7CitPUDIoU0xKSVRfTFNIUiwgVE1QMiwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBVQ0RfQkxPQ0tfU0hJRlQpOworT1AxKFNMSklUX01PVl9VQiwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAyKSwgKHNsaml0X3N3KVBSSVYodWNkX3N0YWdlMSkpOworT1AyKFNMSklUX0FORCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBVQ0RfQkxPQ0tfTUFTSyk7CitPUDIoU0xKSVRfU0hMLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIFVDRF9CTE9DS19TSElGVCk7CitPUDIoU0xKSVRfQURELCBUTVAxLCAwLCBUTVAxLCAwLCBUTVAyLCAwKTsKK09QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KVBSSVYodWNkX3N0YWdlMikpOworT1AxKFNMSklUX01PVl9VSCwgVE1QMiwgMCwgU0xKSVRfTUVNMihUTVAyLCBUTVAxKSwgMSk7CitPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdylQUklWKHVjZF9yZWNvcmRzKSArIFNMSklUX09GRlNFVE9GKHVjZF9yZWNvcmQsIGNoYXJ0eXBlKSk7CitPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0yKFRNUDEsIFRNUDIpLCAzKTsKK3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKK30KKworI2VuZGlmIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCitzdGF0aWMgU0xKSVRfSU5MSU5FIHN0cnVjdCBzbGppdF9sYWJlbCAqbWFpbmxvb3BfZW50cnkoY29tcGlsZXJfY29tbW9uICpjb21tb24sIEJPT0wgaGFzY3JvcmxmLCB1aW50MzJfdCBvdmVyYWxsX29wdGlvbnMpCit7CitERUZJTkVfQ09NUElMRVI7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKm1haW5sb29wOworc3RydWN0IHNsaml0X2xhYmVsICpuZXdsaW5lbGFiZWwgPSBOVUxMOworc3RydWN0IHNsaml0X2p1bXAgKnN0YXJ0Oworc3RydWN0IHNsaml0X2p1bXAgKmVuZCA9IE5VTEw7CitzdHJ1Y3Qgc2xqaXRfanVtcCAqZW5kMiA9IE5VTEw7CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDMyCitzdHJ1Y3Qgc2xqaXRfanVtcCAqc2luZ2xlY2hhcjsKKyNlbmRpZgoranVtcF9saXN0ICpuZXdsaW5lID0gTlVMTDsKK0JPT0wgbmV3bGluZWNoZWNrID0gRkFMU0U7CitCT09MIHJlYWR1Y2hhciA9IEZBTFNFOworCitpZiAoIShoYXNjcm9ybGYgfHwgKG92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX0ZJUlNUTElORSkgIT0gMCkKKyAgICAmJiAoY29tbW9uLT5ubHR5cGUgPT0gTkxUWVBFX0FOWSB8fCBjb21tb24tPm5sdHlwZSA9PSBOTFRZUEVfQU5ZQ1JMRiB8fCBjb21tb24tPm5ld2xpbmUgPiAyNTUpKQorICBuZXdsaW5lY2hlY2sgPSBUUlVFOworCitTTEpJVF9BU1NFUlQoY29tbW9uLT5mb3JjZWRfcXVpdF9sYWJlbCA9PSBOVUxMKTsKKworaWYgKChvdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9GSVJTVExJTkUpICE9IDApCisgIHsKKyAgLyogU2VhcmNoIGZvciB0aGUgZW5kIG9mIHRoZSBmaXJzdCBsaW5lLiAqLworICBTTEpJVF9BU1NFUlQoY29tbW9uLT5tYXRjaF9lbmRfcHRyICE9IDApOworICBPUDEoU0xKSVRfTU9WLCBUTVAzLCAwLCBTVFJfUFRSLCAwKTsKKworICBpZiAoY29tbW9uLT5ubHR5cGUgPT0gTkxUWVBFX0ZJWEVEICYmIGNvbW1vbi0+bmV3bGluZSA+IDI1NSkKKyAgICB7CisgICAgbWFpbmxvb3AgPSBMQUJFTCgpOworICAgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKKyAgICBlbmQgPSBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCk7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKC0xKSk7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDApKTsKKyAgICBDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgKGNvbW1vbi0+bmV3bGluZSA+PiA4KSAmIDB4ZmYsIG1haW5sb29wKTsKKyAgICBDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFRNUDIsIDAsIFNMSklUX0lNTSwgY29tbW9uLT5uZXdsaW5lICYgMHhmZiwgbWFpbmxvb3ApOworICAgIEpVTVBIRVJFKGVuZCk7CisgICAgT1AyKFNMSklUX1NVQiwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+bWF0Y2hfZW5kX3B0ciwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBlbmQgPSBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCk7CisgICAgbWFpbmxvb3AgPSBMQUJFTCgpOworICAgIC8qIENvbnRpbnVhbCBzdG9yZXMgZG9lcyBub3QgY2F1c2UgZGF0YSBkZXBlbmRlbmN5LiAqLworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hdGNoX2VuZF9wdHIsIFNUUl9QVFIsIDApOworICAgIHJlYWRfY2hhcl9yYW5nZShjb21tb24sIGNvbW1vbi0+bmxtaW4sIGNvbW1vbi0+bmxtYXgsIFRSVUUpOworICAgIGNoZWNrX25ld2xpbmVjaGFyKGNvbW1vbiwgY29tbW9uLT5ubHR5cGUsICZuZXdsaW5lLCBUUlVFKTsKKyAgICBDTVBUTyhTTEpJVF9MRVNTLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwLCBtYWlubG9vcCk7CisgICAgSlVNUEhFUkUoZW5kKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5tYXRjaF9lbmRfcHRyLCBTVFJfUFRSLCAwKTsKKyAgICBzZXRfanVtcHMobmV3bGluZSwgTEFCRUwoKSk7CisgICAgfQorCisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFRNUDMsIDApOworICB9CitlbHNlIGlmICgob3ZlcmFsbF9vcHRpb25zICYgUENSRTJfVVNFX09GRlNFVF9MSU1JVCkgIT0gMCkKKyAgeworICAvKiBDaGVjayB3aGV0aGVyIG9mZnNldCBsaW1pdCBpcyBzZXQgYW5kIHZhbGlkLiAqLworICBTTEpJVF9BU1NFUlQoY29tbW9uLT5tYXRjaF9lbmRfcHRyICE9IDApOworCisgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIEFSR1VNRU5UUywgMCk7CisgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMSksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIG9mZnNldF9saW1pdCkpOworICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTVFJfRU5ELCAwKTsKKyAgZW5kID0gQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdykgUENSRTJfVU5TRVQpOworICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBBUkdVTUVOVFMsIDApOworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgorICBPUDIoU0xKSVRfU0hMLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDEpOworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCisgIE9QMihTTEpJVF9TSEwsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMik7CisjZW5kaWYKKyAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAyKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgYmVnaW4pKTsKKyAgT1AyKFNMSklUX0FERCwgVE1QMiwgMCwgVE1QMiwgMCwgVE1QMSwgMCk7CisgIGVuZDIgPSBDTVAoU0xKSVRfTEVTU19FUVVBTCwgVE1QMiwgMCwgU1RSX0VORCwgMCk7CisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNUUl9FTkQsIDApOworICBKVU1QSEVSRShlbmQyKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfUkVUVVJOX1JFRywgMCwgU0xKSVRfSU1NLCBQQ1JFMl9FUlJPUl9OT01BVENIKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsICZjb21tb24tPmZvcmNlZF9xdWl0LCBDTVAoU0xKSVRfTEVTUywgVE1QMiwgMCwgU1RSX1BUUiwgMCkpOworICBKVU1QSEVSRShlbmQpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5tYXRjaF9lbmRfcHRyLCBUTVAyLCAwKTsKKyAgfQorCitzdGFydCA9IEpVTVAoU0xKSVRfSlVNUCk7CisKK2lmIChuZXdsaW5lY2hlY2spCisgIHsKKyAgbmV3bGluZWxhYmVsID0gTEFCRUwoKTsKKyAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICBlbmQgPSBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCk7CisgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIDApOworICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBjb21tb24tPm5ld2xpbmUgJiAweGZmKTsKKyAgT1BfRkxBR1MoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX0VRVUFMKTsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYgfHwgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCisgIE9QMihTTEpJVF9TSEwsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgVUNIQVJfU0hJRlQpOworI2VuZGlmCisgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworICBlbmQyID0gSlVNUChTTEpJVF9KVU1QKTsKKyAgfQorCittYWlubG9vcCA9IExBQkVMKCk7CisKKy8qIEluY3JlYXNpbmcgdGhlIFNUUl9QVFIgaGVyZSByZXF1aXJlcyBvbmUgbGVzcyBqdW1wIGluIHRoZSBtb3N0IGNvbW1vbiBjYXNlLiAqLworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQoraWYgKGNvbW1vbi0+dXRmKSByZWFkdWNoYXIgPSBUUlVFOworI2VuZGlmCitpZiAobmV3bGluZWNoZWNrKSByZWFkdWNoYXIgPSBUUlVFOworCitpZiAocmVhZHVjaGFyKQorICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAwKTsKKworaWYgKG5ld2xpbmVjaGVjaykKKyAgQ01QVE8oU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgKGNvbW1vbi0+bmV3bGluZSA+PiA4KSAmIDB4ZmYsIG5ld2xpbmVsYWJlbCk7CisKK09QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAoraWYgKGNvbW1vbi0+dXRmKQorICB7CisgIHNpbmdsZWNoYXIgPSBDTVAoU0xKSVRfTEVTUywgVE1QMSwgMCwgU0xKSVRfSU1NLCAweGMwKTsKKyAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CisgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworICBKVU1QSEVSRShzaW5nbGVjaGFyKTsKKyAgfQorI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CitpZiAoY29tbW9uLT51dGYpCisgIHsKKyAgc2luZ2xlY2hhciA9IENNUChTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ZDgwMCk7CisgIE9QMihTTEpJVF9BTkQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhmYzAwKTsKKyAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhkODAwKTsKKyAgT1BfRkxBR1MoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX0VRVUFMKTsKKyAgT1AyKFNMSklUX1NITCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAxKTsKKyAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgVE1QMSwgMCk7CisgIEpVTVBIRVJFKHNpbmdsZWNoYXIpOworICB9CisjZW5kaWYgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIID09IFs4fDE2XSAqLworI2VuZGlmIC8qIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIgKi8KK0pVTVBIRVJFKHN0YXJ0KTsKKworaWYgKG5ld2xpbmVjaGVjaykKKyAgeworICBKVU1QSEVSRShlbmQpOworICBKVU1QSEVSRShlbmQyKTsKKyAgfQorCityZXR1cm4gbWFpbmxvb3A7Cit9CisKKyNkZWZpbmUgTUFYX05fQ0hBUlMgMTYKKyNkZWZpbmUgTUFYX0RJRkZfQ0hBUlMgNgorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgYWRkX3ByZWZpeF9jaGFyKFBDUkUyX1VDSEFSIGNociwgUENSRTJfVUNIQVIgKmNoYXJzKQoreworUENSRTJfVUNIQVIgaSwgbGVuOworCitsZW4gPSBjaGFyc1swXTsKK2lmIChsZW4gPT0gMjU1KQorICByZXR1cm47CisKK2lmIChsZW4gPT0gMCkKKyAgeworICBjaGFyc1swXSA9IDE7CisgIGNoYXJzWzFdID0gY2hyOworICByZXR1cm47CisgIH0KKworZm9yIChpID0gbGVuOyBpID4gMDsgaS0tKQorICBpZiAoY2hhcnNbaV0gPT0gY2hyKQorICAgIHJldHVybjsKKworaWYgKGxlbiA+PSBNQVhfRElGRl9DSEFSUyAtIDEpCisgIHsKKyAgY2hhcnNbMF0gPSAyNTU7CisgIHJldHVybjsKKyAgfQorCitsZW4rKzsKK2NoYXJzW2xlbl0gPSBjaHI7CitjaGFyc1swXSA9IGxlbjsKK30KKworc3RhdGljIGludCBzY2FuX3ByZWZpeChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfU1BUUiBjYywgUENSRTJfVUNIQVIgKmNoYXJzLCBpbnQgbWF4X2NoYXJzLCB1aW50MzJfdCAqcmVjX2NvdW50KQoreworLyogUmVjdXJzaXZlIGZ1bmN0aW9uLCB3aGljaCBzY2FucyBwcmVmaXggbGl0ZXJhbHMuICovCitCT09MIGxhc3QsIGFueSwgY2xhc3MsIGNhc2VsZXNzOworaW50IGxlbiwgcmVwZWF0LCBsZW5fc2F2ZSwgY29uc3VtZWQgPSAwOworc2xqaXRfdWkgY2hyOyAvKiBBbnkgdW5pY29kZSBjaGFyYWN0ZXIuICovCitzbGppdF91YiAqYnl0ZXMsICpieXRlc19lbmQsIGJ5dGU7CitQQ1JFMl9TUFRSIGFsdGVybmF0aXZlLCBjY19zYXZlLCBvYzsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorUENSRTJfVUNIQVIgb3RoZXJjYXNlWzhdOworI2VsaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CitQQ1JFMl9VQ0hBUiBvdGhlcmNhc2VbMl07CisjZWxzZQorUENSRTJfVUNIQVIgb3RoZXJjYXNlWzFdOworI2VuZGlmCisKK3JlcGVhdCA9IDE7Cit3aGlsZSAoVFJVRSkKKyAgeworICBpZiAoKnJlY19jb3VudCA9PSAwKQorICAgIHJldHVybiAwOworICAoKnJlY19jb3VudCktLTsKKworICBsYXN0ID0gVFJVRTsKKyAgYW55ID0gRkFMU0U7CisgIGNsYXNzID0gRkFMU0U7CisgIGNhc2VsZXNzID0gRkFMU0U7CisKKyAgc3dpdGNoICgqY2MpCisgICAgeworICAgIGNhc2UgT1BfQ0hBUkk6CisgICAgY2FzZWxlc3MgPSBUUlVFOworICAgIGNhc2UgT1BfQ0hBUjoKKyAgICBsYXN0ID0gRkFMU0U7CisgICAgY2MrKzsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfU09EOgorICAgIGNhc2UgT1BfU09NOgorICAgIGNhc2UgT1BfU0VUX1NPTToKKyAgICBjYXNlIE9QX05PVF9XT1JEX0JPVU5EQVJZOgorICAgIGNhc2UgT1BfV09SRF9CT1VOREFSWToKKyAgICBjYXNlIE9QX0VPRE46CisgICAgY2FzZSBPUF9FT0Q6CisgICAgY2FzZSBPUF9DSVJDOgorICAgIGNhc2UgT1BfQ0lSQ006CisgICAgY2FzZSBPUF9ET0xMOgorICAgIGNhc2UgT1BfRE9MTE06CisgICAgLyogWmVybyB3aWR0aCBhc3NlcnRpb25zLiAqLworICAgIGNjKys7CisgICAgY29udGludWU7CisKKyAgICBjYXNlIE9QX0FTU0VSVDoKKyAgICBjYXNlIE9QX0FTU0VSVF9OT1Q6CisgICAgY2FzZSBPUF9BU1NFUlRCQUNLOgorICAgIGNhc2UgT1BfQVNTRVJUQkFDS19OT1Q6CisgICAgY2MgPSBicmFja2V0ZW5kKGNjKTsKKyAgICBjb250aW51ZTsKKworICAgIGNhc2UgT1BfUExVU0k6CisgICAgY2FzZSBPUF9NSU5QTFVTSToKKyAgICBjYXNlIE9QX1BPU1BMVVNJOgorICAgIGNhc2VsZXNzID0gVFJVRTsKKyAgICBjYXNlIE9QX1BMVVM6CisgICAgY2FzZSBPUF9NSU5QTFVTOgorICAgIGNhc2UgT1BfUE9TUExVUzoKKyAgICBjYysrOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9FWEFDVEk6CisgICAgY2FzZWxlc3MgPSBUUlVFOworICAgIGNhc2UgT1BfRVhBQ1Q6CisgICAgcmVwZWF0ID0gR0VUMihjYywgMSk7CisgICAgbGFzdCA9IEZBTFNFOworICAgIGNjICs9IDEgKyBJTU0yX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1FVRVJZSToKKyAgICBjYXNlIE9QX01JTlFVRVJZSToKKyAgICBjYXNlIE9QX1BPU1FVRVJZSToKKyAgICBjYXNlbGVzcyA9IFRSVUU7CisgICAgY2FzZSBPUF9RVUVSWToKKyAgICBjYXNlIE9QX01JTlFVRVJZOgorICAgIGNhc2UgT1BfUE9TUVVFUlk6CisgICAgbGVuID0gMTsKKyAgICBjYysrOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmIChjb21tb24tPnV0ZiAmJiBIQVNfRVhUUkFMRU4oKmNjKSkgbGVuICs9IEdFVF9FWFRSQUxFTigqY2MpOworI2VuZGlmCisgICAgbWF4X2NoYXJzID0gc2Nhbl9wcmVmaXgoY29tbW9uLCBjYyArIGxlbiwgY2hhcnMsIG1heF9jaGFycywgcmVjX2NvdW50KTsKKyAgICBpZiAobWF4X2NoYXJzID09IDApCisgICAgICByZXR1cm4gY29uc3VtZWQ7CisgICAgbGFzdCA9IEZBTFNFOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9LRVQ6CisgICAgY2MgKz0gMSArIExJTktfU0laRTsKKyAgICBjb250aW51ZTsKKworICAgIGNhc2UgT1BfQUxUOgorICAgIGNjICs9IEdFVChjYywgMSk7CisgICAgY29udGludWU7CisKKyAgICBjYXNlIE9QX09OQ0U6CisgICAgY2FzZSBPUF9PTkNFX05DOgorICAgIGNhc2UgT1BfQlJBOgorICAgIGNhc2UgT1BfQlJBUE9TOgorICAgIGNhc2UgT1BfQ0JSQToKKyAgICBjYXNlIE9QX0NCUkFQT1M6CisgICAgYWx0ZXJuYXRpdmUgPSBjYyArIEdFVChjYywgMSk7CisgICAgd2hpbGUgKCphbHRlcm5hdGl2ZSA9PSBPUF9BTFQpCisgICAgICB7CisgICAgICBtYXhfY2hhcnMgPSBzY2FuX3ByZWZpeChjb21tb24sIGFsdGVybmF0aXZlICsgMSArIExJTktfU0laRSwgY2hhcnMsIG1heF9jaGFycywgcmVjX2NvdW50KTsKKyAgICAgIGlmIChtYXhfY2hhcnMgPT0gMCkKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVkOworICAgICAgYWx0ZXJuYXRpdmUgKz0gR0VUKGFsdGVybmF0aXZlLCAxKTsKKyAgICAgIH0KKworICAgIGlmICgqY2MgPT0gT1BfQ0JSQSB8fCAqY2MgPT0gT1BfQ0JSQVBPUykKKyAgICAgIGNjICs9IElNTTJfU0laRTsKKyAgICBjYyArPSAxICsgTElOS19TSVpFOworICAgIGNvbnRpbnVlOworCisgICAgY2FzZSBPUF9DTEFTUzoKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgIGlmIChjb21tb24tPnV0ZiAmJiAhaXNfY2hhcjdfYml0c2V0KChjb25zdCBzbGppdF91YiAqKShjYyArIDEpLCBGQUxTRSkpIHJldHVybiBjb25zdW1lZDsKKyNlbmRpZgorICAgIGNsYXNzID0gVFJVRTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfTkNMQVNTOgorI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSAzMgorICAgIGlmIChjb21tb24tPnV0ZikgcmV0dXJuIGNvbnN1bWVkOworI2VuZGlmCisgICAgY2xhc3MgPSBUUlVFOworICAgIGJyZWFrOworCisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgfHwgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICBjYXNlIE9QX1hDTEFTUzoKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKKyAgICBpZiAoY29tbW9uLT51dGYpIHJldHVybiBjb25zdW1lZDsKKyNlbmRpZgorICAgIGFueSA9IFRSVUU7CisgICAgY2MgKz0gR0VUKGNjLCAxKTsKKyAgICBicmVhazsKKyNlbmRpZgorCisgICAgY2FzZSBPUF9ESUdJVDoKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgIGlmIChjb21tb24tPnV0ZiAmJiAhaXNfY2hhcjdfYml0c2V0KChjb25zdCBzbGppdF91YiAqKWNvbW1vbi0+Y3R5cGVzIC0gY2JpdF9sZW5ndGggKyBjYml0X2RpZ2l0LCBGQUxTRSkpCisgICAgICByZXR1cm4gY29uc3VtZWQ7CisjZW5kaWYKKyAgICBhbnkgPSBUUlVFOworICAgIGNjKys7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1dISVRFU1BBQ0U6CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyAgICBpZiAoY29tbW9uLT51dGYgJiYgIWlzX2NoYXI3X2JpdHNldCgoY29uc3Qgc2xqaXRfdWIgKiljb21tb24tPmN0eXBlcyAtIGNiaXRfbGVuZ3RoICsgY2JpdF9zcGFjZSwgRkFMU0UpKQorICAgICAgcmV0dXJuIGNvbnN1bWVkOworI2VuZGlmCisgICAgYW55ID0gVFJVRTsKKyAgICBjYysrOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9XT1JEQ0hBUjoKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgIGlmIChjb21tb24tPnV0ZiAmJiAhaXNfY2hhcjdfYml0c2V0KChjb25zdCBzbGppdF91YiAqKWNvbW1vbi0+Y3R5cGVzIC0gY2JpdF9sZW5ndGggKyBjYml0X3dvcmQsIEZBTFNFKSkKKyAgICAgIHJldHVybiBjb25zdW1lZDsKKyNlbmRpZgorICAgIGFueSA9IFRSVUU7CisgICAgY2MrKzsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfTk9UOgorICAgIGNhc2UgT1BfTk9USToKKyAgICBjYysrOworICAgIC8qIEZhbGwgdGhyb3VnaC4gKi8KKyAgICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgICBjYXNlIE9QX05PVF9XSElURVNQQUNFOgorICAgIGNhc2UgT1BfTk9UX1dPUkRDSEFSOgorICAgIGNhc2UgT1BfQU5ZOgorICAgIGNhc2UgT1BfQUxMQU5ZOgorI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSAzMgorICAgIGlmIChjb21tb24tPnV0ZikgcmV0dXJuIGNvbnN1bWVkOworI2VuZGlmCisgICAgYW55ID0gVFJVRTsKKyAgICBjYysrOworICAgIGJyZWFrOworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgY2FzZSBPUF9OT1RQUk9QOgorICAgIGNhc2UgT1BfUFJPUDoKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKKyAgICBpZiAoY29tbW9uLT51dGYpIHJldHVybiBjb25zdW1lZDsKKyNlbmRpZgorICAgIGFueSA9IFRSVUU7CisgICAgY2MgKz0gMSArIDI7CisgICAgYnJlYWs7CisjZW5kaWYKKworICAgIGNhc2UgT1BfVFlQRUVYQUNUOgorICAgIHJlcGVhdCA9IEdFVDIoY2MsIDEpOworICAgIGNjICs9IDEgKyBJTU0yX1NJWkU7CisgICAgY29udGludWU7CisKKyAgICBjYXNlIE9QX05PVEVYQUNUOgorICAgIGNhc2UgT1BfTk9URVhBQ1RJOgorI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSAzMgorICAgIGlmIChjb21tb24tPnV0ZikgcmV0dXJuIGNvbnN1bWVkOworI2VuZGlmCisgICAgYW55ID0gVFJVRTsKKyAgICByZXBlYXQgPSBHRVQyKGNjLCAxKTsKKyAgICBjYyArPSAxICsgSU1NMl9TSVpFICsgMTsKKyAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgcmV0dXJuIGNvbnN1bWVkOworICAgIH0KKworICBpZiAoYW55KQorICAgIHsKKyAgICBkbworICAgICAgeworICAgICAgY2hhcnNbMF0gPSAyNTU7CisKKyAgICAgIGNvbnN1bWVkKys7CisgICAgICBpZiAoLS1tYXhfY2hhcnMgPT0gMCkKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVkOworICAgICAgY2hhcnMgKz0gTUFYX0RJRkZfQ0hBUlM7CisgICAgICB9CisgICAgd2hpbGUgKC0tcmVwZWF0ID4gMCk7CisKKyAgICByZXBlYXQgPSAxOworICAgIGNvbnRpbnVlOworICAgIH0KKworICBpZiAoY2xhc3MpCisgICAgeworICAgIGJ5dGVzID0gKHNsaml0X3ViKikgKGNjICsgMSk7CisgICAgY2MgKz0gMSArIDMyIC8gc2l6ZW9mKFBDUkUyX1VDSEFSKTsKKworICAgIHN3aXRjaCAoKmNjKQorICAgICAgeworICAgICAgY2FzZSBPUF9DUlNUQVI6CisgICAgICBjYXNlIE9QX0NSTUlOU1RBUjoKKyAgICAgIGNhc2UgT1BfQ1JQT1NTVEFSOgorICAgICAgY2FzZSBPUF9DUlFVRVJZOgorICAgICAgY2FzZSBPUF9DUk1JTlFVRVJZOgorICAgICAgY2FzZSBPUF9DUlBPU1FVRVJZOgorICAgICAgbWF4X2NoYXJzID0gc2Nhbl9wcmVmaXgoY29tbW9uLCBjYyArIDEsIGNoYXJzLCBtYXhfY2hhcnMsIHJlY19jb3VudCk7CisgICAgICBpZiAobWF4X2NoYXJzID09IDApCisgICAgICAgIHJldHVybiBjb25zdW1lZDsKKyAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgY2FzZSBPUF9DUlBMVVM6CisgICAgICBjYXNlIE9QX0NSTUlOUExVUzoKKyAgICAgIGNhc2UgT1BfQ1JQT1NQTFVTOgorICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfQ1JSQU5HRToKKyAgICAgIGNhc2UgT1BfQ1JNSU5SQU5HRToKKyAgICAgIGNhc2UgT1BfQ1JQT1NSQU5HRToKKyAgICAgIHJlcGVhdCA9IEdFVDIoY2MsIDEpOworICAgICAgaWYgKHJlcGVhdCA8PSAwKQorICAgICAgICByZXR1cm4gY29uc3VtZWQ7CisgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIGRvCisgICAgICB7CisgICAgICBpZiAoYnl0ZXNbMzFdICYgMHg4MCkKKyAgICAgICAgY2hhcnNbMF0gPSAyNTU7CisgICAgICBlbHNlIGlmIChjaGFyc1swXSAhPSAyNTUpCisgICAgICAgIHsKKyAgICAgICAgYnl0ZXNfZW5kID0gYnl0ZXMgKyAzMjsKKyAgICAgICAgY2hyID0gMDsKKyAgICAgICAgZG8KKyAgICAgICAgICB7CisgICAgICAgICAgYnl0ZSA9ICpieXRlcysrOworICAgICAgICAgIFNMSklUX0FTU0VSVCgoY2hyICYgMHg3KSA9PSAwKTsKKyAgICAgICAgICBpZiAoYnl0ZSA9PSAwKQorICAgICAgICAgICAgY2hyICs9IDg7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoKGJ5dGUgJiAweDEpICE9IDApCisgICAgICAgICAgICAgICAgYWRkX3ByZWZpeF9jaGFyKGNociwgY2hhcnMpOworICAgICAgICAgICAgICBieXRlID4+PSAxOworICAgICAgICAgICAgICBjaHIrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKGJ5dGUgIT0gMCk7CisgICAgICAgICAgICBjaHIgPSAoY2hyICsgNykgJiB+NzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIHdoaWxlIChjaGFyc1swXSAhPSAyNTUgJiYgYnl0ZXMgPCBieXRlc19lbmQpOworICAgICAgICBieXRlcyA9IGJ5dGVzX2VuZCAtIDMyOworICAgICAgICB9CisKKyAgICAgIGNvbnN1bWVkKys7CisgICAgICBpZiAoLS1tYXhfY2hhcnMgPT0gMCkKKyAgICAgICAgcmV0dXJuIGNvbnN1bWVkOworICAgICAgY2hhcnMgKz0gTUFYX0RJRkZfQ0hBUlM7CisgICAgICB9CisgICAgd2hpbGUgKC0tcmVwZWF0ID4gMCk7CisKKyAgICBzd2l0Y2ggKCpjYykKKyAgICAgIHsKKyAgICAgIGNhc2UgT1BfQ1JTVEFSOgorICAgICAgY2FzZSBPUF9DUk1JTlNUQVI6CisgICAgICBjYXNlIE9QX0NSUE9TU1RBUjoKKyAgICAgIHJldHVybiBjb25zdW1lZDsKKworICAgICAgY2FzZSBPUF9DUlFVRVJZOgorICAgICAgY2FzZSBPUF9DUk1JTlFVRVJZOgorICAgICAgY2FzZSBPUF9DUlBPU1FVRVJZOgorICAgICAgY2MrKzsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX0NSUkFOR0U6CisgICAgICBjYXNlIE9QX0NSTUlOUkFOR0U6CisgICAgICBjYXNlIE9QX0NSUE9TUkFOR0U6CisgICAgICBpZiAoR0VUMihjYywgMSkgIT0gR0VUMihjYywgMSArIElNTTJfU0laRSkpCisgICAgICAgIHJldHVybiBjb25zdW1lZDsKKyAgICAgIGNjICs9IDEgKyAyICogSU1NMl9TSVpFOworICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICByZXBlYXQgPSAxOworICAgIGNvbnRpbnVlOworICAgIH0KKworICBsZW4gPSAxOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICBpZiAoY29tbW9uLT51dGYgJiYgSEFTX0VYVFJBTEVOKCpjYykpIGxlbiArPSBHRVRfRVhUUkFMRU4oKmNjKTsKKyNlbmRpZgorCisgIGlmIChjYXNlbGVzcyAmJiBjaGFyX2hhc19vdGhlcmNhc2UoY29tbW9uLCBjYykpCisgICAgeworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmIChjb21tb24tPnV0ZikKKyAgICAgIHsKKyAgICAgIEdFVENIQVIoY2hyLCBjYyk7CisgICAgICBpZiAoKGludClQUklWKG9yZDJ1dGYpKGNoYXJfb3RoZXJjYXNlKGNvbW1vbiwgY2hyKSwgb3RoZXJjYXNlKSAhPSBsZW4pCisgICAgICAgIHJldHVybiBjb25zdW1lZDsKKyAgICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICAgIHsKKyAgICAgIGNociA9ICpjYzsKKyAgICAgIG90aGVyY2FzZVswXSA9IFRBQkxFX0dFVChjaHIsIGNvbW1vbi0+ZmNjLCBjaHIpOworICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBjYXNlbGVzcyA9IEZBTFNFOworICAgIG90aGVyY2FzZVswXSA9IDA7IC8qIFN0b3BzIGNvbXBpbGVyIHdhcm5pbmcgLSBQSCAqLworICAgIH0KKworICBsZW5fc2F2ZSA9IGxlbjsKKyAgY2Nfc2F2ZSA9IGNjOworICB3aGlsZSAoVFJVRSkKKyAgICB7CisgICAgb2MgPSBvdGhlcmNhc2U7CisgICAgZG8KKyAgICAgIHsKKyAgICAgIGNociA9ICpjYzsKKyAgICAgIGFkZF9wcmVmaXhfY2hhcigqY2MsIGNoYXJzKTsKKworICAgICAgaWYgKGNhc2VsZXNzKQorICAgICAgICBhZGRfcHJlZml4X2NoYXIoKm9jLCBjaGFycyk7CisKKyAgICAgIGxlbi0tOworICAgICAgY29uc3VtZWQrKzsKKyAgICAgIGlmICgtLW1heF9jaGFycyA9PSAwKQorICAgICAgICByZXR1cm4gY29uc3VtZWQ7CisgICAgICBjaGFycyArPSBNQVhfRElGRl9DSEFSUzsKKyAgICAgIGNjKys7CisgICAgICBvYysrOworICAgICAgfQorICAgIHdoaWxlIChsZW4gPiAwKTsKKworICAgIGlmICgtLXJlcGVhdCA9PSAwKQorICAgICAgYnJlYWs7CisKKyAgICBsZW4gPSBsZW5fc2F2ZTsKKyAgICBjYyA9IGNjX3NhdmU7CisgICAgfQorCisgIHJlcGVhdCA9IDE7CisgIGlmIChsYXN0KQorICAgIHJldHVybiBjb25zdW1lZDsKKyAgfQorfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4NiAmJiBTTEpJVF9DT05GSUdfWDg2KQorCitzdGF0aWMgc2xqaXRfc2kgY2hhcmFjdGVyX3RvX2ludDMyKFBDUkUyX1VDSEFSIGNocikKK3sKK3Nsaml0X3NpIHZhbHVlID0gKHNsaml0X3NpKWNocjsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorI2RlZmluZSBTU0UyX0NPTVBBUkVfVFlQRV9JTkRFWCAwCityZXR1cm4gKHZhbHVlIDw8IDI0KSB8ICh2YWx1ZSA8PCAxNikgfCAodmFsdWUgPDwgOCkgfCB2YWx1ZTsKKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgorI2RlZmluZSBTU0UyX0NPTVBBUkVfVFlQRV9JTkRFWCAxCityZXR1cm4gKHZhbHVlIDw8IDE2KSB8IHZhbHVlOworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCisjZGVmaW5lIFNTRTJfQ09NUEFSRV9UWVBFX0lOREVYIDIKK3JldHVybiB2YWx1ZTsKKyNlbHNlCisjZXJyb3IgIlVuc3VwcG9ydGVkIHVuaXQgd2lkdGgiCisjZW5kaWYKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGZhc3RfZm9yd2FyZF9maXJzdF9jaGFyMl9zc2UyKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9VQ0hBUiBjaGFyMSwgUENSRTJfVUNIQVIgY2hhcjIpCit7CitERUZJTkVfQ09NUElMRVI7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKnN0YXJ0Oworc3RydWN0IHNsaml0X2p1bXAgKnF1aXRbM107CitzdHJ1Y3Qgc2xqaXRfanVtcCAqbm9tYXRjaDsKK3Nsaml0X3ViIGluc3RydWN0aW9uWzhdOworc2xqaXRfc2kgdG1wMV9pbmQgPSBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoVE1QMSk7CitzbGppdF9zaSB0bXAyX2luZCA9IHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChUTVAyKTsKK3Nsaml0X3NpIHN0cl9wdHJfaW5kID0gc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KFNUUl9QVFIpOworQk9PTCBsb2FkX3R3aWNlID0gRkFMU0U7CitQQ1JFMl9VQ0hBUiBiaXQ7CisKK2JpdCA9IGNoYXIxIF4gY2hhcjI7CitpZiAoIWlzX3Bvd2Vyb2YyKGJpdCkpCisgIGJpdCA9IDA7CisKK2lmICgoY2hhcjEgIT0gY2hhcjIpICYmIGJpdCA9PSAwKQorICBsb2FkX3R3aWNlID0gVFJVRTsKKworcXVpdFswXSA9IENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKTsKKworLyogRmlyc3QgcGFydCAodW5hbGlnbmVkIHN0YXJ0KSAqLworCitPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9JTU0sIGNoYXJhY3Rlcl90b19pbnQzMihjaGFyMSB8IGJpdCkpOworCitTTEpJVF9BU1NFUlQodG1wMV9pbmQgPCA4ICYmIHRtcDJfaW5kID09IDEpOworCisvKiBNT1ZEIHhtbSwgci9tMzIgKi8KK2luc3RydWN0aW9uWzBdID0gMHg2NjsKK2luc3RydWN0aW9uWzFdID0gMHgwZjsKK2luc3RydWN0aW9uWzJdID0gMHg2ZTsKK2luc3RydWN0aW9uWzNdID0gMHhjMCB8ICgyIDw8IDMpIHwgdG1wMV9pbmQ7CitzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworCitpZiAoY2hhcjEgIT0gY2hhcjIpCisgIHsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfSU1NLCBjaGFyYWN0ZXJfdG9faW50MzIoYml0ICE9IDAgPyBiaXQgOiBjaGFyMikpOworCisgIC8qIE1PVkQgeG1tLCByL20zMiAqLworICBpbnN0cnVjdGlvblszXSA9IDB4YzAgfCAoMyA8PCAzKSB8IHRtcDFfaW5kOworICBzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworICB9CisKKy8qIFBTSFVGRCB4bW0xLCB4bW0yL20xMjgsIGltbTggKi8KK2luc3RydWN0aW9uWzJdID0gMHg3MDsKK2luc3RydWN0aW9uWzNdID0gMHhjMCB8ICgyIDw8IDMpIHwgMjsKK2luc3RydWN0aW9uWzRdID0gMDsKK3Nsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgNSk7CisKK2lmIChjaGFyMSAhPSBjaGFyMikKKyAgeworICAvKiBQU0hVRkQgeG1tMSwgeG1tMi9tMTI4LCBpbW04ICovCisgIGluc3RydWN0aW9uWzNdID0gMHhjMCB8ICgzIDw8IDMpIHwgMzsKKyAgaW5zdHJ1Y3Rpb25bNF0gPSAwOworICBzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDUpOworICB9CisKK09QMihTTEpJVF9BTkQsIFRNUDIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgMHhmKTsKK09QMihTTEpJVF9BTkQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgfjB4Zik7CisKKy8qIE1PVkRRQSB4bW0xLCB4bW0yL20xMjggKi8KKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisKK2lmIChzdHJfcHRyX2luZCA8IDgpCisgIHsKKyAgaW5zdHJ1Y3Rpb25bMl0gPSAweDZmOworICBpbnN0cnVjdGlvblszXSA9ICgwIDw8IDMpIHwgc3RyX3B0cl9pbmQ7CisgIHNsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgNCk7CisKKyAgaWYgKGxvYWRfdHdpY2UpCisgICAgeworICAgIGluc3RydWN0aW9uWzNdID0gKDEgPDwgMykgfCBzdHJfcHRyX2luZDsKKyAgICBzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworICAgIH0KKyAgfQorZWxzZQorICB7CisgIGluc3RydWN0aW9uWzFdID0gMHg0MTsKKyAgaW5zdHJ1Y3Rpb25bMl0gPSAweDBmOworICBpbnN0cnVjdGlvblszXSA9IDB4NmY7CisgIGluc3RydWN0aW9uWzRdID0gKDAgPDwgMykgfCAoc3RyX3B0cl9pbmQgJiAweDcpOworICBzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDUpOworCisgIGlmIChsb2FkX3R3aWNlKQorICAgIHsKKyAgICBpbnN0cnVjdGlvbls0XSA9ICgxIDw8IDMpIHwgc3RyX3B0cl9pbmQ7CisgICAgc2xqaXRfZW1pdF9vcF9jdXN0b20oY29tcGlsZXIsIGluc3RydWN0aW9uLCA1KTsKKyAgICB9CisgIGluc3RydWN0aW9uWzFdID0gMHgwZjsKKyAgfQorCisjZWxzZQorCitpbnN0cnVjdGlvblsyXSA9IDB4NmY7CitpbnN0cnVjdGlvblszXSA9ICgwIDw8IDMpIHwgc3RyX3B0cl9pbmQ7CitzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworCitpZiAobG9hZF90d2ljZSkKKyAgeworICBpbnN0cnVjdGlvblszXSA9ICgxIDw8IDMpIHwgc3RyX3B0cl9pbmQ7CisgIHNsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgNCk7CisgIH0KKworI2VuZGlmCisKK2lmIChiaXQgIT0gMCkKKyAgeworICAvKiBQT1IgeG1tMSwgeG1tMi9tMTI4ICovCisgIGluc3RydWN0aW9uWzJdID0gMHhlYjsKKyAgaW5zdHJ1Y3Rpb25bM10gPSAweGMwIHwgKDAgPDwgMykgfCAzOworICBzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworICB9CisKKy8qIFBDTVBFUUIvVy9EIHhtbTEsIHhtbTIvbTEyOCAqLworaW5zdHJ1Y3Rpb25bMl0gPSAweDc0ICsgU1NFMl9DT01QQVJFX1RZUEVfSU5ERVg7CitpbnN0cnVjdGlvblszXSA9IDB4YzAgfCAoMCA8PCAzKSB8IDI7CitzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworCitpZiAobG9hZF90d2ljZSkKKyAgeworICBpbnN0cnVjdGlvblszXSA9IDB4YzAgfCAoMSA8PCAzKSB8IDM7CisgIHNsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgNCk7CisgIH0KKworLyogUE1PVk1TS0IgcmVnLCB4bW0gKi8KK2luc3RydWN0aW9uWzJdID0gMHhkNzsKK2luc3RydWN0aW9uWzNdID0gMHhjMCB8ICh0bXAxX2luZCA8PCAzKSB8IDA7CitzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworCitpZiAobG9hZF90d2ljZSkKKyAgeworICBPUDEoU0xKSVRfTU9WLCBUTVAzLCAwLCBUTVAyLCAwKTsKKyAgaW5zdHJ1Y3Rpb25bM10gPSAweGMwIHwgKHRtcDJfaW5kIDw8IDMpIHwgMTsKKyAgc2xqaXRfZW1pdF9vcF9jdXN0b20oY29tcGlsZXIsIGluc3RydWN0aW9uLCA0KTsKKworICBPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFRNUDIsIDApOworICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBUTVAzLCAwKTsKKyAgfQorCitPUDIoU0xKSVRfQVNIUiwgVE1QMSwgMCwgVE1QMSwgMCwgVE1QMiwgMCk7CisKKy8qIEJTRiByMzIsIHIvbTMyICovCitpbnN0cnVjdGlvblswXSA9IDB4MGY7CitpbnN0cnVjdGlvblsxXSA9IDB4YmM7CitpbnN0cnVjdGlvblsyXSA9IDB4YzAgfCAodG1wMV9pbmQgPDwgMykgfCB0bXAxX2luZDsKK3Nsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgMyk7CisKK25vbWF0Y2ggPSBKVU1QKFNMSklUX1pFUk8pOworCitPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBUTVAyLCAwKTsKK09QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworcXVpdFsxXSA9IEpVTVAoU0xKSVRfSlVNUCk7CisKK0pVTVBIRVJFKG5vbWF0Y2gpOworCitzdGFydCA9IExBQkVMKCk7CitPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIDE2KTsKK3F1aXRbMl0gPSBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCk7CisKKy8qIFNlY29uZCBwYXJ0IChhbGlnbmVkKSAqLworCitpbnN0cnVjdGlvblswXSA9IDB4NjY7CitpbnN0cnVjdGlvblsxXSA9IDB4MGY7CisKKy8qIE1PVkRRQSB4bW0xLCB4bW0yL20xMjggKi8KKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisKK2lmIChzdHJfcHRyX2luZCA8IDgpCisgIHsKKyAgaW5zdHJ1Y3Rpb25bMl0gPSAweDZmOworICBpbnN0cnVjdGlvblszXSA9ICgwIDw8IDMpIHwgc3RyX3B0cl9pbmQ7CisgIHNsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgNCk7CisKKyAgaWYgKGxvYWRfdHdpY2UpCisgICAgeworICAgIGluc3RydWN0aW9uWzNdID0gKDEgPDwgMykgfCBzdHJfcHRyX2luZDsKKyAgICBzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworICAgIH0KKyAgfQorZWxzZQorICB7CisgIGluc3RydWN0aW9uWzFdID0gMHg0MTsKKyAgaW5zdHJ1Y3Rpb25bMl0gPSAweDBmOworICBpbnN0cnVjdGlvblszXSA9IDB4NmY7CisgIGluc3RydWN0aW9uWzRdID0gKDAgPDwgMykgfCAoc3RyX3B0cl9pbmQgJiAweDcpOworICBzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDUpOworCisgIGlmIChsb2FkX3R3aWNlKQorICAgIHsKKyAgICBpbnN0cnVjdGlvbls0XSA9ICgxIDw8IDMpIHwgc3RyX3B0cl9pbmQ7CisgICAgc2xqaXRfZW1pdF9vcF9jdXN0b20oY29tcGlsZXIsIGluc3RydWN0aW9uLCA1KTsKKyAgICB9CisgIGluc3RydWN0aW9uWzFdID0gMHgwZjsKKyAgfQorCisjZWxzZQorCitpbnN0cnVjdGlvblsyXSA9IDB4NmY7CitpbnN0cnVjdGlvblszXSA9ICgwIDw8IDMpIHwgc3RyX3B0cl9pbmQ7CitzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworCitpZiAobG9hZF90d2ljZSkKKyAgeworICBpbnN0cnVjdGlvblszXSA9ICgxIDw8IDMpIHwgc3RyX3B0cl9pbmQ7CisgIHNsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgNCk7CisgIH0KKworI2VuZGlmCisKK2lmIChiaXQgIT0gMCkKKyAgeworICAvKiBQT1IgeG1tMSwgeG1tMi9tMTI4ICovCisgIGluc3RydWN0aW9uWzJdID0gMHhlYjsKKyAgaW5zdHJ1Y3Rpb25bM10gPSAweGMwIHwgKDAgPDwgMykgfCAzOworICBzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworICB9CisKKy8qIFBDTVBFUUIvVy9EIHhtbTEsIHhtbTIvbTEyOCAqLworaW5zdHJ1Y3Rpb25bMl0gPSAweDc0ICsgU1NFMl9DT01QQVJFX1RZUEVfSU5ERVg7CitpbnN0cnVjdGlvblszXSA9IDB4YzAgfCAoMCA8PCAzKSB8IDI7CitzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworCitpZiAobG9hZF90d2ljZSkKKyAgeworICBpbnN0cnVjdGlvblszXSA9IDB4YzAgfCAoMSA8PCAzKSB8IDM7CisgIHNsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgNCk7CisgIH0KKworLyogUE1PVk1TS0IgcmVnLCB4bW0gKi8KK2luc3RydWN0aW9uWzJdID0gMHhkNzsKK2luc3RydWN0aW9uWzNdID0gMHhjMCB8ICh0bXAxX2luZCA8PCAzKSB8IDA7CitzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworCitpZiAobG9hZF90d2ljZSkKKyAgeworICBpbnN0cnVjdGlvblszXSA9IDB4YzAgfCAodG1wMl9pbmQgPDwgMykgfCAxOworICBzbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIDQpOworCisgIE9QMihTTEpJVF9PUiwgVE1QMSwgMCwgVE1QMSwgMCwgVE1QMiwgMCk7CisgIH0KKworLyogQlNGIHIzMiwgci9tMzIgKi8KK2luc3RydWN0aW9uWzBdID0gMHgwZjsKK2luc3RydWN0aW9uWzFdID0gMHhiYzsKK2luc3RydWN0aW9uWzJdID0gMHhjMCB8ICh0bXAxX2luZCA8PCAzKSB8IHRtcDFfaW5kOworc2xqaXRfZW1pdF9vcF9jdXN0b20oY29tcGlsZXIsIGluc3RydWN0aW9uLCAzKTsKKworSlVNUFRPKFNMSklUX1pFUk8sIHN0YXJ0KTsKKworT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgVE1QMSwgMCk7CisKK3N0YXJ0ID0gTEFCRUwoKTsKK1NFVF9MQUJFTChxdWl0WzBdLCBzdGFydCk7CitTRVRfTEFCRUwocXVpdFsxXSwgc3RhcnQpOworU0VUX0xBQkVMKHF1aXRbMl0sIHN0YXJ0KTsKK30KKworI3VuZGVmIFNTRTJfQ09NUEFSRV9UWVBFX0lOREVYCisKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBmYXN0X2ZvcndhcmRfZmlyc3RfY2hhcjIoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1VDSEFSIGNoYXIxLCBQQ1JFMl9VQ0hBUiBjaGFyMiwgc2xqaXRfc2kgb2Zmc2V0KQoreworREVGSU5FX0NPTVBJTEVSOworc3RydWN0IHNsaml0X2xhYmVsICpzdGFydDsKK3N0cnVjdCBzbGppdF9qdW1wICpxdWl0Oworc3RydWN0IHNsaml0X2p1bXAgKmZvdW5kOworUENSRTJfVUNIQVIgbWFzazsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKK3N0cnVjdCBzbGppdF9sYWJlbCAqdXRmX3N0YXJ0ID0gTlVMTDsKK3N0cnVjdCBzbGppdF9qdW1wICp1dGZfcXVpdCA9IE5VTEw7CisjZW5kaWYKK0JPT0wgaGFzX21hdGNoX2VuZCA9IChjb21tb24tPm1hdGNoX2VuZF9wdHIgIT0gMCk7CisKK2lmIChvZmZzZXQgPiAwKQorICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUyhvZmZzZXQpKTsKKworaWYgKGhhc19tYXRjaF9lbmQpCisgIHsKKyAgT1AxKFNMSklUX01PViwgVE1QMywgMCwgU1RSX0VORCwgMCk7CisKKyAgT1AyKFNMSklUX0FERCwgU1RSX0VORCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+bWF0Y2hfZW5kX3B0ciwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMob2Zmc2V0ICsgMSkpOworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODYgJiYgU0xKSVRfQ09ORklHX1g4NikKKyAgaWYgKHNsaml0X3g4Nl9pc19jbW92X2F2YWlsYWJsZSgpKQorICAgIHsKKyAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgU1RSX0VORCwgMCwgVE1QMywgMCk7CisgICAgc2xqaXRfeDg2X2VtaXRfY21vdihjb21waWxlciwgU0xKSVRfR1JFQVRFUiwgU1RSX0VORCwgVE1QMywgMCk7CisgICAgfQorI2VuZGlmCisgICAgeworICAgIHF1aXQgPSBDTVAoU0xKSVRfTEVTU19FUVVBTCwgU1RSX0VORCwgMCwgVE1QMywgMCk7CisgICAgT1AxKFNMSklUX01PViwgU1RSX0VORCwgMCwgVE1QMywgMCk7CisgICAgSlVNUEhFUkUocXVpdCk7CisgICAgfQorICB9CisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKK2lmIChjb21tb24tPnV0ZiAmJiBvZmZzZXQgPiAwKQorICB1dGZfc3RhcnQgPSBMQUJFTCgpOworI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2ICYmIFNMSklUX0NPTkZJR19YODYpCisKKy8qIFNTRTIgYWNjZWxlcmF0ZWQgZmlyc3QgY2hhcmFjdGVyIHNlYXJjaC4gKi8KKworaWYgKHNsaml0X3g4Nl9pc19zc2UyX2F2YWlsYWJsZSgpKQorICB7CisgIGZhc3RfZm9yd2FyZF9maXJzdF9jaGFyMl9zc2UyKGNvbW1vbiwgY2hhcjEsIGNoYXIyKTsKKworICBTTEpJVF9BU1NFUlQoY29tbW9uLT5tb2RlID09IFBDUkUyX0pJVF9DT01QTEVURSB8fCBvZmZzZXQgPT0gMCk7CisgIGlmIChjb21tb24tPm1vZGUgPT0gUENSRTJfSklUX0NPTVBMRVRFKQorICAgIHsKKyAgICAvKiBJbiBjb21wbGV0ZSBtb2RlLCB3ZSBkb24ndCBuZWVkIHRvIHJ1biBhIG1hdGNoIHdoZW4gU1RSX1BUUiA9PSBTVFJfRU5ELiAqLworICAgIFNMSklUX0FTU0VSVChjb21tb24tPmZvcmNlZF9xdWl0X2xhYmVsID09IE5VTEwpOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX1JFVFVSTl9SRUcsIDAsIFNMSklUX0lNTSwgUENSRTJfRVJST1JfTk9NQVRDSCk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsICZjb21tb24tPmZvcmNlZF9xdWl0LCBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCkpOworCisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDMyCisgICAgaWYgKGNvbW1vbi0+dXRmICYmIG9mZnNldCA+IDApCisgICAgICB7CisgICAgICBTTEpJVF9BU1NFUlQoY29tbW9uLT5tb2RlID09IFBDUkUyX0pJVF9DT01QTEVURSk7CisKKyAgICAgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygtb2Zmc2V0KSk7CisgICAgICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyAgICAgIE9QMihTTEpJVF9BTkQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhjMCk7CisgICAgICBDTVBUTyhTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDgwLCB1dGZfc3RhcnQpOworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CisgICAgICBPUDIoU0xKSVRfQU5ELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ZmMwMCk7CisgICAgICBDTVBUTyhTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweGRjMDAsIHV0Zl9zdGFydCk7CisjZWxzZQorI2Vycm9yICJVbmtub3duIGNvZGUgd2lkdGgiCisjZW5kaWYKKyAgICAgIE9QMihTTEpJVF9TVUIsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKKyAgICAgIH0KKyNlbmRpZgorCisgICAgaWYgKG9mZnNldCA+IDApCisgICAgICBPUDIoU0xKSVRfU1VCLCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUyhvZmZzZXQpKTsKKyAgICB9CisgIGVsc2UgaWYgKHNsaml0X3g4Nl9pc19jbW92X2F2YWlsYWJsZSgpKQorICAgIHsKKyAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCk7CisgICAgc2xqaXRfeDg2X2VtaXRfY21vdihjb21waWxlciwgU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgaGFzX21hdGNoX2VuZCA/IFNMSklUX01FTTEoU0xKSVRfU1ApIDogU1RSX0VORCwgaGFzX21hdGNoX2VuZCA/IGNvbW1vbi0+bWF0Y2hfZW5kX3B0ciA6IDApOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBxdWl0ID0gQ01QKFNMSklUX0xFU1MsIFNUUl9QVFIsIDAsIFNUUl9FTkQsIDApOworICAgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIGhhc19tYXRjaF9lbmQgPyBTTEpJVF9NRU0xKFNMSklUX1NQKSA6IFNUUl9FTkQsIGhhc19tYXRjaF9lbmQgPyBjb21tb24tPm1hdGNoX2VuZF9wdHIgOiAwKTsKKyAgICBKVU1QSEVSRShxdWl0KTsKKyAgICB9CisKKyAgaWYgKGhhc19tYXRjaF9lbmQpCisgICAgT1AxKFNMSklUX01PViwgU1RSX0VORCwgMCwgVE1QMywgMCk7CisgIHJldHVybjsKKyAgfQorCisjZW5kaWYKKworcXVpdCA9IENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKTsKKworc3RhcnQgPSBMQUJFTCgpOworT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgMCk7CisKK2lmIChjaGFyMSA9PSBjaGFyMikKKyAgZm91bmQgPSBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgY2hhcjEpOworZWxzZQorICB7CisgIG1hc2sgPSBjaGFyMSBeIGNoYXIyOworICBpZiAoaXNfcG93ZXJvZjIobWFzaykpCisgICAgeworICAgIE9QMihTTEpJVF9PUiwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBtYXNrKTsKKyAgICBmb3VuZCA9IENNUChTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBjaGFyMSB8IG1hc2spOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBjaGFyMSk7CisgICAgT1BfRkxBR1MoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX0VRVUFMKTsKKyAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBjaGFyMik7CisgICAgT1BfRkxBR1MoU0xKSVRfT1IgfCBTTEpJVF9TRVRfRSwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfRVFVQUwpOworICAgIGZvdW5kID0gSlVNUChTTEpJVF9OT1RfWkVSTyk7CisgICAgfQorICB9CisKK09QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKK0NNUFRPKFNMSklUX0xFU1MsIFNUUl9QVFIsIDAsIFNUUl9FTkQsIDAsIHN0YXJ0KTsKKworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSAzMgoraWYgKGNvbW1vbi0+dXRmICYmIG9mZnNldCA+IDApCisgIHV0Zl9xdWl0ID0gSlVNUChTTEpJVF9KVU1QKTsKKyNlbmRpZgorCitKVU1QSEVSRShmb3VuZCk7CisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKK2lmIChjb21tb24tPnV0ZiAmJiBvZmZzZXQgPiAwKQorICB7CisgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygtb2Zmc2V0KSk7CisgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICBPUDIoU0xKSVRfQU5ELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4YzApOworICBDTVBUTyhTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDgwLCB1dGZfc3RhcnQpOworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CisgIE9QMihTTEpJVF9BTkQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhmYzAwKTsKKyAgQ01QVE8oU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhkYzAwLCB1dGZfc3RhcnQpOworI2Vsc2UKKyNlcnJvciAiVW5rbm93biBjb2RlIHdpZHRoIgorI2VuZGlmCisgIE9QMihTTEpJVF9TVUIsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKKyAgSlVNUEhFUkUodXRmX3F1aXQpOworICB9CisjZW5kaWYKKworSlVNUEhFUkUocXVpdCk7CisKK2lmIChoYXNfbWF0Y2hfZW5kKQorICB7CisgIHF1aXQgPSBDTVAoU0xKSVRfTEVTUywgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCk7CisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hdGNoX2VuZF9wdHIpOworICBpZiAob2Zmc2V0ID4gMCkKKyAgICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUyhvZmZzZXQpKTsKKyAgSlVNUEhFUkUocXVpdCk7CisgIE9QMShTTEpJVF9NT1YsIFNUUl9FTkQsIDAsIFRNUDMsIDApOworICB9CisKK2lmIChvZmZzZXQgPiAwKQorICBPUDIoU0xKSVRfU1VCLCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUyhvZmZzZXQpKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBCT09MIGZhc3RfZm9yd2FyZF9maXJzdF9uX2NoYXJzKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uKQoreworREVGSU5FX0NPTVBJTEVSOworc3RydWN0IHNsaml0X2xhYmVsICpzdGFydDsKK3N0cnVjdCBzbGppdF9qdW1wICpxdWl0Oworc3RydWN0IHNsaml0X2p1bXAgKm1hdGNoOworLyogYnl0ZXNbMF0gcmVwcmVzZW50IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBiZXR3ZWVuIDAKK2FuZCBNQVhfTl9CWVRFUyAtIDEsIDI1NSByZXByZXNlbnRzIGFueSBjaGFyYWN0ZXIuICovCitQQ1JFMl9VQ0hBUiBjaGFyc1tNQVhfTl9DSEFSUyAqIE1BWF9ESUZGX0NIQVJTXTsKK3Nsaml0X3NpIG9mZnNldDsKK1BDUkUyX1VDSEFSIG1hc2s7CitQQ1JFMl9VQ0hBUiAqY2hhcl9zZXQsICpjaGFyX3NldF9lbmQ7CitpbnQgaSwgbWF4LCBmcm9tOworaW50IHJhbmdlX3JpZ2h0ID0gLTEsIHJhbmdlX2xlbjsKK3Nsaml0X3ViICp1cGRhdGVfdGFibGUgPSBOVUxMOworQk9PTCBpbl9yYW5nZTsKK3VpbnQzMl90IHJlY19jb3VudDsKKworZm9yIChpID0gMDsgaSA8IE1BWF9OX0NIQVJTOyBpKyspCisgIGNoYXJzW2kgKiBNQVhfRElGRl9DSEFSU10gPSAwOworCityZWNfY291bnQgPSAxMDAwMDsKK21heCA9IHNjYW5fcHJlZml4KGNvbW1vbiwgY29tbW9uLT5zdGFydCwgY2hhcnMsIE1BWF9OX0NIQVJTLCAmcmVjX2NvdW50KTsKKworaWYgKG1heCA8IDEpCisgIHJldHVybiBGQUxTRTsKKworaW5fcmFuZ2UgPSBGQUxTRTsKKy8qIFByZXZlbnQgY29tcGlsZXIgInVuaW5pdGlhbGl6ZWQiIHdhcm5pbmcgKi8KK2Zyb20gPSAwOworcmFuZ2VfbGVuID0gNCAvKiBtaW5pbXVtIGxlbmd0aCAqLyAtIDE7Citmb3IgKGkgPSAwOyBpIDw9IG1heDsgaSsrKQorICB7CisgIGlmIChpbl9yYW5nZSAmJiAoaSAtIGZyb20pID4gcmFuZ2VfbGVuICYmIChjaGFyc1soaSAtIDEpICogTUFYX0RJRkZfQ0hBUlNdIDwgMjU1KSkKKyAgICB7CisgICAgcmFuZ2VfbGVuID0gaSAtIGZyb207CisgICAgcmFuZ2VfcmlnaHQgPSBpIC0gMTsKKyAgICB9CisKKyAgaWYgKGkgPCBtYXggJiYgY2hhcnNbaSAqIE1BWF9ESUZGX0NIQVJTXSA8IDI1NSkKKyAgICB7CisgICAgU0xKSVRfQVNTRVJUKGNoYXJzW2kgKiBNQVhfRElGRl9DSEFSU10gPiAwKTsKKyAgICBpZiAoIWluX3JhbmdlKQorICAgICAgeworICAgICAgaW5fcmFuZ2UgPSBUUlVFOworICAgICAgZnJvbSA9IGk7CisgICAgICB9CisgICAgfQorICBlbHNlCisgICAgaW5fcmFuZ2UgPSBGQUxTRTsKKyAgfQorCitpZiAocmFuZ2VfcmlnaHQgPj0gMCkKKyAgeworICB1cGRhdGVfdGFibGUgPSAoc2xqaXRfdWIgKilhbGxvY2F0ZV9yZWFkX29ubHlfZGF0YShjb21tb24sIDI1Nik7CisgIGlmICh1cGRhdGVfdGFibGUgPT0gTlVMTCkKKyAgICByZXR1cm4gVFJVRTsKKyAgbWVtc2V0KHVwZGF0ZV90YWJsZSwgSU5fVUNIQVJTKHJhbmdlX2xlbiksIDI1Nik7CisKKyAgZm9yIChpID0gMDsgaSA8IHJhbmdlX2xlbjsgaSsrKQorICAgIHsKKyAgICBjaGFyX3NldCA9IGNoYXJzICsgKChyYW5nZV9yaWdodCAtIGkpICogTUFYX0RJRkZfQ0hBUlMpOworICAgIFNMSklUX0FTU0VSVChjaGFyX3NldFswXSA+IDAgJiYgY2hhcl9zZXRbMF0gPCAyNTUpOworICAgIGNoYXJfc2V0X2VuZCA9IGNoYXJfc2V0ICsgY2hhcl9zZXRbMF07CisgICAgY2hhcl9zZXQrKzsKKyAgICB3aGlsZSAoY2hhcl9zZXQgPD0gY2hhcl9zZXRfZW5kKQorICAgICAgeworICAgICAgaWYgKHVwZGF0ZV90YWJsZVsoKmNoYXJfc2V0KSAmIDB4ZmZdID4gSU5fVUNIQVJTKGkpKQorICAgICAgICB1cGRhdGVfdGFibGVbKCpjaGFyX3NldCkgJiAweGZmXSA9IElOX1VDSEFSUyhpKTsKKyAgICAgIGNoYXJfc2V0Kys7CisgICAgICB9CisgICAgfQorICB9CisKK29mZnNldCA9IC0xOworLyogU2NhbiBmb3J3YXJkLiAqLworZm9yIChpID0gMDsgaSA8IG1heDsgaSsrKQorICB7CisgIGlmIChvZmZzZXQgPT0gLTEpCisgICAgeworICAgIGlmIChjaGFyc1tpICogTUFYX0RJRkZfQ0hBUlNdIDw9IDIpCisgICAgICBvZmZzZXQgPSBpOworICAgIH0KKyAgZWxzZSBpZiAoY2hhcnNbb2Zmc2V0ICogTUFYX0RJRkZfQ0hBUlNdID09IDIgJiYgY2hhcnNbaSAqIE1BWF9ESUZGX0NIQVJTXSA8PSAyKQorICAgIHsKKyAgICBpZiAoY2hhcnNbaSAqIE1BWF9ESUZGX0NIQVJTXSA9PSAxKQorICAgICAgb2Zmc2V0ID0gaTsKKyAgICBlbHNlCisgICAgICB7CisgICAgICBtYXNrID0gY2hhcnNbb2Zmc2V0ICogTUFYX0RJRkZfQ0hBUlMgKyAxXSBeIGNoYXJzW29mZnNldCAqIE1BWF9ESUZGX0NIQVJTICsgMl07CisgICAgICBpZiAoIWlzX3Bvd2Vyb2YyKG1hc2spKQorICAgICAgICB7CisgICAgICAgIG1hc2sgPSBjaGFyc1tpICogTUFYX0RJRkZfQ0hBUlMgKyAxXSBeIGNoYXJzW2kgKiBNQVhfRElGRl9DSEFSUyArIDJdOworICAgICAgICBpZiAoaXNfcG93ZXJvZjIobWFzaykpCisgICAgICAgICAgb2Zmc2V0ID0gaTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCitpZiAocmFuZ2VfcmlnaHQgPCAwKQorICB7CisgIGlmIChvZmZzZXQgPCAwKQorICAgIHJldHVybiBGQUxTRTsKKyAgU0xKSVRfQVNTRVJUKGNoYXJzW29mZnNldCAqIE1BWF9ESUZGX0NIQVJTXSA+PSAxICYmIGNoYXJzW29mZnNldCAqIE1BWF9ESUZGX0NIQVJTXSA8PSAyKTsKKyAgLyogV29ya3MgcmVnYXJkbGVzcyB0aGUgdmFsdWUgaXMgMSBvciAyLiAqLworICBtYXNrID0gY2hhcnNbb2Zmc2V0ICogTUFYX0RJRkZfQ0hBUlMgKyBjaGFyc1tvZmZzZXQgKiBNQVhfRElGRl9DSEFSU11dOworICBmYXN0X2ZvcndhcmRfZmlyc3RfY2hhcjIoY29tbW9uLCBjaGFyc1tvZmZzZXQgKiBNQVhfRElGRl9DSEFSUyArIDFdLCBtYXNrLCBvZmZzZXQpOworICByZXR1cm4gVFJVRTsKKyAgfQorCitpZiAocmFuZ2VfcmlnaHQgPT0gb2Zmc2V0KQorICBvZmZzZXQgPSAtMTsKKworU0xKSVRfQVNTRVJUKG9mZnNldCA9PSAtMSB8fCAoY2hhcnNbb2Zmc2V0ICogTUFYX0RJRkZfQ0hBUlNdID49IDEgJiYgY2hhcnNbb2Zmc2V0ICogTUFYX0RJRkZfQ0hBUlNdIDw9IDIpKTsKKworbWF4IC09IDE7CitTTEpJVF9BU1NFUlQobWF4ID4gMCk7CitpZiAoY29tbW9uLT5tYXRjaF9lbmRfcHRyICE9IDApCisgIHsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+bWF0Y2hfZW5kX3B0cik7CisgIE9QMShTTEpJVF9NT1YsIFRNUDMsIDAsIFNUUl9FTkQsIDApOworICBPUDIoU0xKSVRfU1VCLCBTVFJfRU5ELCAwLCBTVFJfRU5ELCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUyhtYXgpKTsKKyAgcXVpdCA9IENNUChTTEpJVF9MRVNTX0VRVUFMLCBTVFJfRU5ELCAwLCBUTVAxLCAwKTsKKyAgT1AxKFNMSklUX01PViwgU1RSX0VORCwgMCwgVE1QMSwgMCk7CisgIEpVTVBIRVJFKHF1aXQpOworICB9CitlbHNlCisgIE9QMihTTEpJVF9TVUIsIFNUUl9FTkQsIDAsIFNUUl9FTkQsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKG1heCkpOworCitTTEpJVF9BU1NFUlQocmFuZ2VfcmlnaHQgPj0gMCk7CisKKyNpZiAhKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQorT1AxKFNMSklUX01PViwgUkVUVVJOX0FERFIsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KXVwZGF0ZV90YWJsZSk7CisjZW5kaWYKKworc3RhcnQgPSBMQUJFTCgpOworcXVpdCA9IENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKTsKKworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4IHx8IChkZWZpbmVkIFNMSklUX0xJVFRMRV9FTkRJQU4gJiYgU0xKSVRfTElUVExFX0VORElBTikKK09QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUyhyYW5nZV9yaWdodCkpOworI2Vsc2UKK09QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUyhyYW5nZV9yaWdodCArIDEpIC0gMSk7CisjZW5kaWYKKworI2lmICEoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCitPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0yKFJFVFVSTl9BRERSLCBUTVAxKSwgMCk7CisjZWxzZQorT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KXVwZGF0ZV90YWJsZSk7CisjZW5kaWYKK09QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworQ01QVE8oU0xKSVRfTk9UX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDAsIHN0YXJ0KTsKKworaWYgKG9mZnNldCA+PSAwKQorICB7CisgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUyhvZmZzZXQpKTsKKyAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworCisgIGlmIChjaGFyc1tvZmZzZXQgKiBNQVhfRElGRl9DSEFSU10gPT0gMSkKKyAgICBDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgY2hhcnNbb2Zmc2V0ICogTUFYX0RJRkZfQ0hBUlMgKyAxXSwgc3RhcnQpOworICBlbHNlCisgICAgeworICAgIG1hc2sgPSBjaGFyc1tvZmZzZXQgKiBNQVhfRElGRl9DSEFSUyArIDFdIF4gY2hhcnNbb2Zmc2V0ICogTUFYX0RJRkZfQ0hBUlMgKyAyXTsKKyAgICBpZiAoaXNfcG93ZXJvZjIobWFzaykpCisgICAgICB7CisgICAgICBPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgbWFzayk7CisgICAgICBDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgY2hhcnNbb2Zmc2V0ICogTUFYX0RJRkZfQ0hBUlMgKyAxXSB8IG1hc2ssIHN0YXJ0KTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBtYXRjaCA9IENNUChTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBjaGFyc1tvZmZzZXQgKiBNQVhfRElGRl9DSEFSUyArIDFdKTsKKyAgICAgIENNUFRPKFNMSklUX05PVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBjaGFyc1tvZmZzZXQgKiBNQVhfRElGRl9DSEFSUyArIDJdLCBzdGFydCk7CisgICAgICBKVU1QSEVSRShtYXRjaCk7CisgICAgICB9CisgICAgfQorICB9CisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKK2lmIChjb21tb24tPnV0ZiAmJiBvZmZzZXQgIT0gMCkKKyAgeworICBpZiAob2Zmc2V0IDwgMCkKKyAgICB7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgMCk7CisgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICAgIH0KKyAgZWxzZQorICAgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygtMSkpOworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgIE9QMihTTEpJVF9BTkQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhjMCk7CisgIENNUFRPKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ODAsIHN0YXJ0KTsKKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgorICBPUDIoU0xKSVRfQU5ELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ZmMwMCk7CisgIENNUFRPKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ZGMwMCwgc3RhcnQpOworI2Vsc2UKKyNlcnJvciAiVW5rbm93biBjb2RlIHdpZHRoIgorI2VuZGlmCisgIGlmIChvZmZzZXQgPCAwKQorICAgIE9QMihTTEpJVF9TVUIsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKKyAgfQorI2VuZGlmCisKK2lmIChvZmZzZXQgPj0gMCkKKyAgT1AyKFNMSklUX1NVQiwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworCitKVU1QSEVSRShxdWl0KTsKKworaWYgKGNvbW1vbi0+bWF0Y2hfZW5kX3B0ciAhPSAwKQorICB7CisgIGlmIChyYW5nZV9yaWdodCA+PSAwKQorICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hdGNoX2VuZF9wdHIpOworICBPUDEoU0xKSVRfTU9WLCBTVFJfRU5ELCAwLCBUTVAzLCAwKTsKKyAgaWYgKHJhbmdlX3JpZ2h0ID49IDApCisgICAgeworICAgIHF1aXQgPSBDTVAoU0xKSVRfTEVTU19FUVVBTCwgU1RSX1BUUiwgMCwgVE1QMSwgMCk7CisgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgVE1QMSwgMCk7CisgICAgSlVNUEhFUkUocXVpdCk7CisgICAgfQorICB9CitlbHNlCisgIE9QMihTTEpJVF9BREQsIFNUUl9FTkQsIDAsIFNUUl9FTkQsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKG1heCkpOworcmV0dXJuIFRSVUU7Cit9CisKKyN1bmRlZiBNQVhfTl9DSEFSUworI3VuZGVmIE1BWF9OX0JZVEVTCisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBmYXN0X2ZvcndhcmRfZmlyc3RfY2hhcihjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfVUNIQVIgZmlyc3RfY2hhciwgQk9PTCBjYXNlbGVzcykKK3sKK1BDUkUyX1VDSEFSIG9jOworCitvYyA9IGZpcnN0X2NoYXI7CitpZiAoY2FzZWxlc3MpCisgIHsKKyAgb2MgPSBUQUJMRV9HRVQoZmlyc3RfY2hhciwgY29tbW9uLT5mY2MsIGZpcnN0X2NoYXIpOworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgIGlmIChmaXJzdF9jaGFyID4gMTI3ICYmIGNvbW1vbi0+dXRmKQorICAgIG9jID0gVUNEX09USEVSQ0FTRShmaXJzdF9jaGFyKTsKKyNlbmRpZgorICB9CisKK2Zhc3RfZm9yd2FyZF9maXJzdF9jaGFyMihjb21tb24sIGZpcnN0X2NoYXIsIG9jLCAwKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGZhc3RfZm9yd2FyZF9uZXdsaW5lKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uKQoreworREVGSU5FX0NPTVBJTEVSOworc3RydWN0IHNsaml0X2xhYmVsICpsb29wOworc3RydWN0IHNsaml0X2p1bXAgKmxhc3RjaGFyOworc3RydWN0IHNsaml0X2p1bXAgKmZpcnN0Y2hhcjsKK3N0cnVjdCBzbGppdF9qdW1wICpxdWl0Oworc3RydWN0IHNsaml0X2p1bXAgKmZvdW5kY3IgPSBOVUxMOworc3RydWN0IHNsaml0X2p1bXAgKm5vdGZvdW5kbmw7CitqdW1wX2xpc3QgKm5ld2xpbmUgPSBOVUxMOworCitpZiAoY29tbW9uLT5tYXRjaF9lbmRfcHRyICE9IDApCisgIHsKKyAgT1AxKFNMSklUX01PViwgVE1QMywgMCwgU1RSX0VORCwgMCk7CisgIE9QMShTTEpJVF9NT1YsIFNUUl9FTkQsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hdGNoX2VuZF9wdHIpOworICB9CisKK2lmIChjb21tb24tPm5sdHlwZSA9PSBOTFRZUEVfRklYRUQgJiYgY29tbW9uLT5uZXdsaW5lID4gMjU1KQorICB7CisgIGxhc3RjaGFyID0gQ01QKFNMSklUX0dSRUFURVJfRVFVQUwsIFNUUl9QVFIsIDAsIFNUUl9FTkQsIDApOworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBBUkdVTUVOVFMsIDApOworICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBzdHIpKTsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgYmVnaW4pKTsKKyAgZmlyc3RjaGFyID0gQ01QKFNMSklUX0xFU1NfRVFVQUwsIFNUUl9QVFIsIDAsIFRNUDIsIDApOworCisgIE9QMihTTEpJVF9BREQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDIpKTsKKyAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9VLCBTTEpJVF9VTlVTRUQsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworICBPUF9GTEFHUyhTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX1VOVVNFRCwgMCwgU0xKSVRfR1JFQVRFUl9FUVVBTCk7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2IHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgorICBPUDIoU0xKSVRfU0hMLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIFVDSEFSX1NISUZUKTsKKyNlbmRpZgorICBPUDIoU0xKSVRfU1VCLCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBUTVAyLCAwKTsKKworICBsb29wID0gTEFCRUwoKTsKKyAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICBxdWl0ID0gQ01QKFNMSklUX0dSRUFURVJfRVFVQUwsIFNUUl9QVFIsIDAsIFNUUl9FTkQsIDApOworICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCBJTl9VQ0hBUlMoLTIpKTsKKyAgT1AxKE1PVl9VQ0hBUiwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKC0xKSk7CisgIENNUFRPKFNMSklUX05PVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoY29tbW9uLT5uZXdsaW5lID4+IDgpICYgMHhmZiwgbG9vcCk7CisgIENNUFRPKFNMSklUX05PVF9FUVVBTCwgVE1QMiwgMCwgU0xKSVRfSU1NLCBjb21tb24tPm5ld2xpbmUgJiAweGZmLCBsb29wKTsKKworICBKVU1QSEVSRShxdWl0KTsKKyAgSlVNUEhFUkUoZmlyc3RjaGFyKTsKKyAgSlVNUEhFUkUobGFzdGNoYXIpOworCisgIGlmIChjb21tb24tPm1hdGNoX2VuZF9wdHIgIT0gMCkKKyAgICBPUDEoU0xKSVRfTU9WLCBTVFJfRU5ELCAwLCBUTVAzLCAwKTsKKyAgcmV0dXJuOworICB9CisKK09QMShTTEpJVF9NT1YsIFRNUDEsIDAsIEFSR1VNRU5UUywgMCk7CitPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBzdHIpKTsKK2ZpcnN0Y2hhciA9IENNUChTTEpJVF9MRVNTX0VRVUFMLCBTVFJfUFRSLCAwLCBUTVAyLCAwKTsKK3NraXBfY2hhcl9iYWNrKGNvbW1vbik7CisKK2xvb3AgPSBMQUJFTCgpOworY29tbW9uLT5mZl9uZXdsaW5lX3Nob3J0Y3V0ID0gbG9vcDsKKworcmVhZF9jaGFyX3JhbmdlKGNvbW1vbiwgY29tbW9uLT5ubG1pbiwgY29tbW9uLT5ubG1heCwgVFJVRSk7CitsYXN0Y2hhciA9IENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKTsKK2lmIChjb21tb24tPm5sdHlwZSA9PSBOTFRZUEVfQU5ZIHx8IGNvbW1vbi0+bmx0eXBlID09IE5MVFlQRV9BTllDUkxGKQorICBmb3VuZGNyID0gQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIENIQVJfQ1IpOworY2hlY2tfbmV3bGluZWNoYXIoY29tbW9uLCBjb21tb24tPm5sdHlwZSwgJm5ld2xpbmUsIEZBTFNFKTsKK3NldF9qdW1wcyhuZXdsaW5lLCBsb29wKTsKKworaWYgKGNvbW1vbi0+bmx0eXBlID09IE5MVFlQRV9BTlkgfHwgY29tbW9uLT5ubHR5cGUgPT0gTkxUWVBFX0FOWUNSTEYpCisgIHsKKyAgcXVpdCA9IEpVTVAoU0xKSVRfSlVNUCk7CisgIEpVTVBIRVJFKGZvdW5kY3IpOworICBub3Rmb3VuZG5sID0gQ01QKFNMSklUX0dSRUFURVJfRVFVQUwsIFNUUl9QVFIsIDAsIFNUUl9FTkQsIDApOworICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAwKTsKKyAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgQ0hBUl9OTCk7CisgIE9QX0ZMQUdTKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9FUVVBTCk7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2IHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgorICBPUDIoU0xKSVRfU0hMLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIFVDSEFSX1NISUZUKTsKKyNlbmRpZgorICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBUTVAxLCAwKTsKKyAgSlVNUEhFUkUobm90Zm91bmRubCk7CisgIEpVTVBIRVJFKHF1aXQpOworICB9CitKVU1QSEVSRShsYXN0Y2hhcik7CitKVU1QSEVSRShmaXJzdGNoYXIpOworCitpZiAoY29tbW9uLT5tYXRjaF9lbmRfcHRyICE9IDApCisgIE9QMShTTEpJVF9NT1YsIFNUUl9FTkQsIDAsIFRNUDMsIDApOworfQorCitzdGF0aWMgQk9PTCBjaGVja19jbGFzc19yYW5nZXMoY29tcGlsZXJfY29tbW9uICpjb21tb24sIGNvbnN0IHNsaml0X3ViICpiaXRzLCBCT09MIG5jbGFzcywgQk9PTCBpbnZlcnQsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MpOworCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgZmFzdF9mb3J3YXJkX3N0YXJ0X2JpdHMoY29tcGlsZXJfY29tbW9uICpjb21tb24sIGNvbnN0IHNsaml0X3ViICpzdGFydF9iaXRzKQoreworREVGSU5FX0NPTVBJTEVSOworc3RydWN0IHNsaml0X2xhYmVsICpzdGFydDsKK3N0cnVjdCBzbGppdF9qdW1wICpxdWl0Oworc3RydWN0IHNsaml0X2p1bXAgKmZvdW5kID0gTlVMTDsKK2p1bXBfbGlzdCAqbWF0Y2hlcyA9IE5VTEw7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wOworI2VuZGlmCisKK2lmIChjb21tb24tPm1hdGNoX2VuZF9wdHIgIT0gMCkKKyAgeworICBPUDEoU0xKSVRfTU9WLCBSRVRVUk5fQUREUiwgMCwgU1RSX0VORCwgMCk7CisgIE9QMShTTEpJVF9NT1YsIFNUUl9FTkQsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hdGNoX2VuZF9wdHIpOworICB9CisKK3N0YXJ0ID0gTEFCRUwoKTsKK3F1aXQgPSBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCk7CitPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAwKTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK2lmIChjb21tb24tPnV0ZikKKyAgT1AxKFNMSklUX01PViwgVE1QMywgMCwgVE1QMSwgMCk7CisjZW5kaWYKKworaWYgKCFjaGVja19jbGFzc19yYW5nZXMoY29tbW9uLCBzdGFydF9iaXRzLCAoc3RhcnRfYml0c1szMV0gJiAweDgwKSAhPSAwLCBUUlVFLCAmbWF0Y2hlcykpCisgIHsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICBqdW1wID0gQ01QKFNMSklUX0xFU1MsIFRNUDEsIDAsIFNMSklUX0lNTSwgMjU1KTsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfSU1NLCAyNTUpOworICBKVU1QSEVSRShqdW1wKTsKKyNlbmRpZgorICBPUDIoU0xKSVRfQU5ELCBUTVAyLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4Nyk7CisgIE9QMihTTEpJVF9MU0hSLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDMpOworICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpc3RhcnRfYml0cyk7CisgIE9QMihTTEpJVF9TSEwsIFRNUDIsIDAsIFNMSklUX0lNTSwgMSwgVE1QMiwgMCk7CisgIE9QMihTTEpJVF9BTkQgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBUTVAyLCAwKTsKKyAgZm91bmQgPSBKVU1QKFNMSklUX05PVF9aRVJPKTsKKyAgfQorCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCitpZiAoY29tbW9uLT51dGYpCisgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFRNUDMsIDApOworI2VuZGlmCitPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKK2lmIChjb21tb24tPnV0ZikKKyAgeworICBDTVBUTyhTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4YzAsIHN0YXJ0KTsKKyAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KVBSSVYodXRmOF90YWJsZTQpIC0gMHhjMCk7CisgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworICB9CisjZWxpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYKK2lmIChjb21tb24tPnV0ZikKKyAgeworICBDTVBUTyhTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ZDgwMCwgc3RhcnQpOworICBPUDIoU0xKSVRfQU5ELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ZmMwMCk7CisgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ZDgwMCk7CisgIE9QX0ZMQUdTKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9FUVVBTCk7CisgIE9QMihTTEpJVF9TSEwsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMSk7CisgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworICB9CisjZW5kaWYgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIID09IFs4fDE2XSAqLworI2VuZGlmIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworSlVNUFRPKFNMSklUX0pVTVAsIHN0YXJ0KTsKK2lmIChmb3VuZCAhPSBOVUxMKQorICBKVU1QSEVSRShmb3VuZCk7CitpZiAobWF0Y2hlcyAhPSBOVUxMKQorICBzZXRfanVtcHMobWF0Y2hlcywgTEFCRUwoKSk7CitKVU1QSEVSRShxdWl0KTsKKworaWYgKGNvbW1vbi0+bWF0Y2hfZW5kX3B0ciAhPSAwKQorICBPUDEoU0xKSVRfTU9WLCBTVFJfRU5ELCAwLCBSRVRVUk5fQUREUiwgMCk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc3RydWN0IHNsaml0X2p1bXAgKnNlYXJjaF9yZXF1ZXN0ZWRfY2hhcihjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfVUNIQVIgcmVxX2NoYXIsIEJPT0wgY2FzZWxlc3MsIEJPT0wgaGFzX2ZpcnN0Y2hhcikKK3sKK0RFRklORV9DT01QSUxFUjsKK3N0cnVjdCBzbGppdF9sYWJlbCAqbG9vcDsKK3N0cnVjdCBzbGppdF9qdW1wICp0b29sb25nOworc3RydWN0IHNsaml0X2p1bXAgKmFscmVhZHlmb3VuZDsKK3N0cnVjdCBzbGppdF9qdW1wICpmb3VuZDsKK3N0cnVjdCBzbGppdF9qdW1wICpmb3VuZG9jID0gTlVMTDsKK3N0cnVjdCBzbGppdF9qdW1wICpub3Rmb3VuZDsKK3Nsaml0X3VpIG9jLCBiaXQ7CisKK1NMSklUX0FTU0VSVChjb21tb24tPnJlcV9jaGFyX3B0ciAhPSAwKTsKK09QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPnJlcV9jaGFyX3B0cik7CitPUDIoU0xKSVRfQURELCBUTVAxLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIFJFUV9DVV9NQVgpOwordG9vbG9uZyA9IENNUChTTEpJVF9MRVNTLCBUTVAxLCAwLCBTVFJfRU5ELCAwKTsKK2FscmVhZHlmb3VuZCA9IENNUChTTEpJVF9MRVNTLCBTVFJfUFRSLCAwLCBUTVAyLCAwKTsKKworaWYgKGhhc19maXJzdGNoYXIpCisgIE9QMihTTEpJVF9BREQsIFRNUDEsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKK2Vsc2UKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU1RSX1BUUiwgMCk7CisKK2xvb3AgPSBMQUJFTCgpOworbm90Zm91bmQgPSBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgVE1QMSwgMCwgU1RSX0VORCwgMCk7CisKK09QMShNT1ZfVUNIQVIsIFRNUDIsIDAsIFNMSklUX01FTTEoVE1QMSksIDApOworb2MgPSByZXFfY2hhcjsKK2lmIChjYXNlbGVzcykKKyAgeworICBvYyA9IFRBQkxFX0dFVChyZXFfY2hhciwgY29tbW9uLT5mY2MsIHJlcV9jaGFyKTsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICBpZiAocmVxX2NoYXIgPiAxMjcgJiYgY29tbW9uLT51dGYpCisgICAgb2MgPSBVQ0RfT1RIRVJDQVNFKHJlcV9jaGFyKTsKKyNlbmRpZgorICB9CitpZiAocmVxX2NoYXIgPT0gb2MpCisgIGZvdW5kID0gQ01QKFNMSklUX0VRVUFMLCBUTVAyLCAwLCBTTEpJVF9JTU0sIHJlcV9jaGFyKTsKK2Vsc2UKKyAgeworICBiaXQgPSByZXFfY2hhciBeIG9jOworICBpZiAoaXNfcG93ZXJvZjIoYml0KSkKKyAgICB7CisgICAgT1AyKFNMSklUX09SLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIGJpdCk7CisgICAgZm91bmQgPSBDTVAoU0xKSVRfRVFVQUwsIFRNUDIsIDAsIFNMSklUX0lNTSwgcmVxX2NoYXIgfCBiaXQpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBmb3VuZCA9IENNUChTTEpJVF9FUVVBTCwgVE1QMiwgMCwgU0xKSVRfSU1NLCByZXFfY2hhcik7CisgICAgZm91bmRvYyA9IENNUChTTEpJVF9FUVVBTCwgVE1QMiwgMCwgU0xKSVRfSU1NLCBvYyk7CisgICAgfQorICB9CitPUDIoU0xKSVRfQURELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CitKVU1QVE8oU0xKSVRfSlVNUCwgbG9vcCk7CisKK0pVTVBIRVJFKGZvdW5kKTsKK2lmIChmb3VuZG9jKQorICBKVU1QSEVSRShmb3VuZG9jKTsKK09QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPnJlcV9jaGFyX3B0ciwgVE1QMSwgMCk7CitKVU1QSEVSRShhbHJlYWR5Zm91bmQpOworSlVNUEhFUkUodG9vbG9uZyk7CityZXR1cm4gbm90Zm91bmQ7Cit9CisKK3N0YXRpYyB2b2lkIGRvX3JldmVydGZyYW1lcyhjb21waWxlcl9jb21tb24gKmNvbW1vbikKK3sKK0RFRklORV9DT01QSUxFUjsKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wOworc3RydWN0IHNsaml0X2xhYmVsICptYWlubG9vcDsKKworc2xqaXRfZW1pdF9mYXN0X2VudGVyKGNvbXBpbGVyLCBSRVRVUk5fQUREUiwgMCk7CitPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTVEFDS19UT1AsIDApOworR0VUX0xPQ0FMX0JBU0UoVE1QMywgMCwgMCk7CisKKy8qIERyb3AgZnJhbWVzIHVudGlsIHdlIHJlYWNoIFNUQUNLX1RPUC4gKi8KK21haW5sb29wID0gTEFCRUwoKTsKK09QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoVE1QMSksIDApOworT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9TLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgMCk7CitqdW1wID0gSlVNUChTTEpJVF9TSUdfTEVTU19FUVVBTCk7CisKK09QMihTTEpJVF9BREQsIFRNUDIsIDAsIFRNUDIsIDAsIFRNUDMsIDApOworT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShUTVAyKSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgc2l6ZW9mKHNsaml0X3N3KSk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFRNUDIpLCBzaXplb2Yoc2xqaXRfc3cpLCBTTEpJVF9NRU0xKFRNUDEpLCAyICogc2l6ZW9mKHNsaml0X3N3KSk7CitPUDIoU0xKSVRfQURELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDMgKiBzaXplb2Yoc2xqaXRfc3cpKTsKK0pVTVBUTyhTTEpJVF9KVU1QLCBtYWlubG9vcCk7CisKK0pVTVBIRVJFKGp1bXApOworanVtcCA9IEpVTVAoU0xKSVRfU0lHX0xFU1MpOworLyogRW5kIG9mIGRyb3BwaW5nIGZyYW1lcy4gKi8KK3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKKworSlVNUEhFUkUoanVtcCk7CitPUDEoU0xKSVRfTkVHLCBUTVAyLCAwLCBUTVAyLCAwKTsKK09QMihTTEpJVF9BREQsIFRNUDIsIDAsIFRNUDIsIDAsIFRNUDMsIDApOworT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShUTVAyKSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgc2l6ZW9mKHNsaml0X3N3KSk7CitPUDIoU0xKSVRfQURELCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDIgKiBzaXplb2Yoc2xqaXRfc3cpKTsKK0pVTVBUTyhTTEpJVF9KVU1QLCBtYWlubG9vcCk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX3dvcmRib3VuZGFyeShjb21waWxlcl9jb21tb24gKmNvbW1vbikKK3sKK0RFRklORV9DT01QSUxFUjsKK3N0cnVjdCBzbGppdF9qdW1wICpza2lwcmVhZDsKK2p1bXBfbGlzdCAqc2tpcHJlYWRfbGlzdCA9IE5VTEw7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDggfHwgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wOworI2VuZGlmCisKK1NMSklUX0NPTVBJTEVfQVNTRVJUKGN0eXBlX3dvcmQgPT0gMHgxMCwgY3R5cGVfd29yZF9tdXN0X2JlXzE2KTsKKworc2xqaXRfZW1pdF9mYXN0X2VudGVyKGNvbXBpbGVyLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMCk7CisvKiBHZXQgdHlwZSBvZiB0aGUgcHJldmlvdXMgY2hhciwgYW5kIHB1dCBpdCB0byBMT0NBTFMxLiAqLworT1AxKFNMSklUX01PViwgVE1QMSwgMCwgQVJHVU1FTlRTLCAwKTsKK09QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMSksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIGJlZ2luKSk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMSwgU0xKSVRfSU1NLCAwKTsKK3NraXByZWFkID0gQ01QKFNMSklUX0xFU1NfRVFVQUwsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworc2tpcF9jaGFyX2JhY2soY29tbW9uKTsKK2NoZWNrX3N0YXJ0X3VzZWRfcHRyKGNvbW1vbik7CityZWFkX2NoYXIoY29tbW9uKTsKKworLyogVGVzdGluZyBjaGFyIHR5cGUuICovCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCitpZiAoY29tbW9uLT51c2VfdWNwKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX0lNTSwgMSk7CisgIGp1bXAgPSBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgQ0hBUl9VTkRFUlNDT1JFKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsICZjb21tb24tPmdldHVjZCwgSlVNUChTTEpJVF9GQVNUX0NBTEwpKTsKKyAgT1AyKFNMSklUX1NVQiwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCB1Y3BfTGwpOworICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCB1Y3BfTHUgLSB1Y3BfTGwpOworICBPUF9GTEFHUyhTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX1VOVVNFRCwgMCwgU0xKSVRfTEVTU19FUVVBTCk7CisgIE9QMihTTEpJVF9TVUIsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgdWNwX05kIC0gdWNwX0xsKTsKKyAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9VLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgdWNwX05vIC0gdWNwX05kKTsKKyAgT1BfRkxBR1MoU0xKSVRfT1IsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0xFU1NfRVFVQUwpOworICBKVU1QSEVSRShqdW1wKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIExPQ0FMUzEsIFRNUDIsIDApOworICB9CitlbHNlCisjZW5kaWYKKyAgeworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgIGp1bXAgPSBDTVAoU0xKSVRfR1JFQVRFUiwgVE1QMSwgMCwgU0xKSVRfSU1NLCAyNTUpOworI2VsaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUKKyAgLyogSGVyZSBMT0NBTFMxIGhhcyBhbHJlYWR5IGJlZW4gemVyb2VkLiAqLworICBqdW1wID0gTlVMTDsKKyAgaWYgKGNvbW1vbi0+dXRmKQorICAgIGp1bXAgPSBDTVAoU0xKSVRfR1JFQVRFUiwgVE1QMSwgMCwgU0xKSVRfSU1NLCAyNTUpOworI2VuZGlmIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4ICovCisgIE9QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMSksIGNvbW1vbi0+Y3R5cGVzKTsKKyAgT1AyKFNMSklUX0xTSFIsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgNCAvKiBjdHlwZV93b3JkICovKTsKKyAgT1AyKFNMSklUX0FORCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAxKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIExPQ0FMUzEsIFRNUDEsIDApOworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgIEpVTVBIRVJFKGp1bXApOworI2VsaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUKKyAgaWYgKGp1bXAgIT0gTlVMTCkKKyAgICBKVU1QSEVSRShqdW1wKTsKKyNlbmRpZiAvKiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOCAqLworICB9CitKVU1QSEVSRShza2lwcmVhZCk7CisKK09QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX0lNTSwgMCk7CitjaGVja19zdHJfZW5kKGNvbW1vbiwgJnNraXByZWFkX2xpc3QpOworcGVla19jaGFyKGNvbW1vbiwgUkVBRF9DSEFSX01BWCk7CisKKy8qIFRlc3RpbmcgY2hhciB0eXBlLiBUaGlzIGlzIGEgY29kZSBkdXBsaWNhdGlvbi4gKi8KKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK2lmIChjb21tb24tPnVzZV91Y3ApCisgIHsKKyAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfSU1NLCAxKTsKKyAganVtcCA9IENNUChTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBDSEFSX1VOREVSU0NPUkUpOworICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+Z2V0dWNkLCBKVU1QKFNMSklUX0ZBU1RfQ0FMTCkpOworICBPUDIoU0xKSVRfU1VCLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHVjcF9MbCk7CisgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfVSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHVjcF9MdSAtIHVjcF9MbCk7CisgIE9QX0ZMQUdTKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9MRVNTX0VRVUFMKTsKKyAgT1AyKFNMSklUX1NVQiwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCB1Y3BfTmQgLSB1Y3BfTGwpOworICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCB1Y3BfTm8gLSB1Y3BfTmQpOworICBPUF9GTEFHUyhTTEpJVF9PUiwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfTEVTU19FUVVBTCk7CisgIEpVTVBIRVJFKGp1bXApOworICB9CitlbHNlCisjZW5kaWYKKyAgeworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgIC8qIFRNUDIgbWF5IGJlIGRlc3Ryb3llZCBieSBwZWVrX2NoYXIuICovCisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX0lNTSwgMCk7CisgIGp1bXAgPSBDTVAoU0xKSVRfR1JFQVRFUiwgVE1QMSwgMCwgU0xKSVRfSU1NLCAyNTUpOworI2VsaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUKKyAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfSU1NLCAwKTsKKyAganVtcCA9IE5VTEw7CisgIGlmIChjb21tb24tPnV0ZikKKyAgICBqdW1wID0gQ01QKFNMSklUX0dSRUFURVIsIFRNUDEsIDAsIFNMSklUX0lNTSwgMjU1KTsKKyNlbmRpZgorICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBjb21tb24tPmN0eXBlcyk7CisgIE9QMihTTEpJVF9MU0hSLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDQgLyogY3R5cGVfd29yZCAqLyk7CisgIE9QMihTTEpJVF9BTkQsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgMSk7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgSlVNUEhFUkUoanVtcCk7CisjZWxpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERQorICBpZiAoanVtcCAhPSBOVUxMKQorICAgIEpVTVBIRVJFKGp1bXApOworI2VuZGlmIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4ICovCisgIH0KK3NldF9qdW1wcyhza2lwcmVhZF9saXN0LCBMQUJFTCgpKTsKKworT1AyKFNMSklUX1hPUiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBMT0NBTFMxKTsKK3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBMT0NBTFMwKTsKK30KKworc3RhdGljIEJPT0wgY2hlY2tfY2xhc3NfcmFuZ2VzKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBjb25zdCBzbGppdF91YiAqYml0cywgQk9PTCBuY2xhc3MsIEJPT0wgaW52ZXJ0LCBqdW1wX2xpc3QgKipiYWNrdHJhY2tzKQoreworLyogTWF5IGRlc3Ryb3kgVE1QMS4gKi8KK0RFRklORV9DT01QSUxFUjsKK2ludCByYW5nZXNbTUFYX1JBTkdFX1NJWkVdOworc2xqaXRfdWIgYml0LCBjYml0LCBhbGw7CitpbnQgaSwgYnl0ZSwgbGVuZ3RoID0gMDsKKworYml0ID0gYml0c1swXSAmIDB4MTsKKy8qIEFsbCBiaXRzIHdpbGwgYmUgemVybyBvciBvbmUgKHNpbmNlIGJpdCBpcyB6ZXJvIG9yIG9uZSkuICovCithbGwgPSAtYml0OworCitmb3IgKGkgPSAwOyBpIDwgMjU2OyApCisgIHsKKyAgYnl0ZSA9IGkgPj4gMzsKKyAgaWYgKChpICYgMHg3KSA9PSAwICYmIGJpdHNbYnl0ZV0gPT0gYWxsKQorICAgIGkgKz0gODsKKyAgZWxzZQorICAgIHsKKyAgICBjYml0ID0gKGJpdHNbYnl0ZV0gPj4gKGkgJiAweDcpKSAmIDB4MTsKKyAgICBpZiAoY2JpdCAhPSBiaXQpCisgICAgICB7CisgICAgICBpZiAobGVuZ3RoID49IE1BWF9SQU5HRV9TSVpFKQorICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICByYW5nZXNbbGVuZ3RoXSA9IGk7CisgICAgICBsZW5ndGgrKzsKKyAgICAgIGJpdCA9IGNiaXQ7CisgICAgICBhbGwgPSAtY2JpdDsKKyAgICAgIH0KKyAgICBpKys7CisgICAgfQorICB9CisKK2lmICgoKGJpdCA9PSAwKSAmJiBuY2xhc3MpIHx8ICgoYml0ID09IDEpICYmICFuY2xhc3MpKQorICB7CisgIGlmIChsZW5ndGggPj0gTUFYX1JBTkdFX1NJWkUpCisgICAgcmV0dXJuIEZBTFNFOworICByYW5nZXNbbGVuZ3RoXSA9IDI1NjsKKyAgbGVuZ3RoKys7CisgIH0KKworaWYgKGxlbmd0aCA8IDAgfHwgbGVuZ3RoID4gNCkKKyAgcmV0dXJuIEZBTFNFOworCitiaXQgPSBiaXRzWzBdICYgMHgxOworaWYgKGludmVydCkgYml0IF49IDB4MTsKKworLyogTm8gY2hhcmFjdGVyIGlzIGFjY2VwdGVkLiAqLworaWYgKGxlbmd0aCA9PSAwICYmIGJpdCA9PSAwKQorICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUChTTEpJVF9KVU1QKSk7CisKK3N3aXRjaChsZW5ndGgpCisgIHsKKyAgY2FzZSAwOgorICAvKiBXaGVuIGJpdCAhPSAwLCBhbGwgY2hhcmFjdGVycyBhcmUgYWNjZXB0ZWQuICovCisgIHJldHVybiBUUlVFOworCisgIGNhc2UgMToKKyAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChiaXQgPT0gMCA/IFNMSklUX0xFU1MgOiBTTEpJVF9HUkVBVEVSX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1swXSkpOworICByZXR1cm4gVFJVRTsKKworICBjYXNlIDI6CisgIGlmIChyYW5nZXNbMF0gKyAxICE9IHJhbmdlc1sxXSkKKyAgICB7CisgICAgT1AyKFNMSklUX1NVQiwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCByYW5nZXNbMF0pOworICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoYml0ICE9IDAgPyBTTEpJVF9MRVNTIDogU0xKSVRfR1JFQVRFUl9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCByYW5nZXNbMV0gLSByYW5nZXNbMF0pKTsKKyAgICB9CisgIGVsc2UKKyAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKGJpdCAhPSAwID8gU0xKSVRfRVFVQUwgOiBTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgcmFuZ2VzWzBdKSk7CisgIHJldHVybiBUUlVFOworCisgIGNhc2UgMzoKKyAgaWYgKGJpdCAhPSAwKQorICAgIHsKKyAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX0dSRUFURVJfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgcmFuZ2VzWzJdKSk7CisgICAgaWYgKHJhbmdlc1swXSArIDEgIT0gcmFuZ2VzWzFdKQorICAgICAgeworICAgICAgT1AyKFNMSklUX1NVQiwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCByYW5nZXNbMF0pOworICAgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1sxXSAtIHJhbmdlc1swXSkpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgcmFuZ2VzWzBdKSk7CisgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTEVTUywgVE1QMSwgMCwgU0xKSVRfSU1NLCByYW5nZXNbMF0pKTsKKyAgaWYgKHJhbmdlc1sxXSArIDEgIT0gcmFuZ2VzWzJdKQorICAgIHsKKyAgICBPUDIoU0xKSVRfU1VCLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1sxXSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1syXSAtIHJhbmdlc1sxXSkpOworICAgIH0KKyAgZWxzZQorICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgcmFuZ2VzWzFdKSk7CisgIHJldHVybiBUUlVFOworCisgIGNhc2UgNDoKKyAgaWYgKChyYW5nZXNbMV0gLSByYW5nZXNbMF0pID09IChyYW5nZXNbM10gLSByYW5nZXNbMl0pCisgICAgICAmJiAocmFuZ2VzWzBdIHwgKHJhbmdlc1syXSAtIHJhbmdlc1swXSkpID09IHJhbmdlc1syXQorICAgICAgJiYgKHJhbmdlc1sxXSAmIChyYW5nZXNbMl0gLSByYW5nZXNbMF0pKSA9PSAwCisgICAgICAmJiBpc19wb3dlcm9mMihyYW5nZXNbMl0gLSByYW5nZXNbMF0pKQorICAgIHsKKyAgICBTTEpJVF9BU1NFUlQoKHJhbmdlc1swXSAmIChyYW5nZXNbMl0gLSByYW5nZXNbMF0pKSA9PSAwICYmIChyYW5nZXNbMl0gJiByYW5nZXNbM10gJiAocmFuZ2VzWzJdIC0gcmFuZ2VzWzBdKSkgIT0gMCk7CisgICAgT1AyKFNMSklUX09SLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1syXSAtIHJhbmdlc1swXSk7CisgICAgaWYgKHJhbmdlc1syXSArIDEgIT0gcmFuZ2VzWzNdKQorICAgICAgeworICAgICAgT1AyKFNMSklUX1NVQiwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCByYW5nZXNbMl0pOworICAgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChiaXQgIT0gMCA/IFNMSklUX0xFU1MgOiBTTEpJVF9HUkVBVEVSX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1szXSAtIHJhbmdlc1syXSkpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoYml0ICE9IDAgPyBTTEpJVF9FUVVBTCA6IFNMSklUX05PVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCByYW5nZXNbMl0pKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgaWYgKGJpdCAhPSAwKQorICAgIHsKKyAgICBpID0gMDsKKyAgICBpZiAocmFuZ2VzWzBdICsgMSAhPSByYW5nZXNbMV0pCisgICAgICB7CisgICAgICBPUDIoU0xKSVRfU1VCLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1swXSk7CisgICAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX0xFU1MsIFRNUDEsIDAsIFNMSklUX0lNTSwgcmFuZ2VzWzFdIC0gcmFuZ2VzWzBdKSk7CisgICAgICBpID0gcmFuZ2VzWzBdOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgcmFuZ2VzWzBdKSk7CisKKyAgICBpZiAocmFuZ2VzWzJdICsgMSAhPSByYW5nZXNbM10pCisgICAgICB7CisgICAgICBPUDIoU0xKSVRfU1VCLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1syXSAtIGkpOworICAgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1szXSAtIHJhbmdlc1syXSkpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgcmFuZ2VzWzJdIC0gaSkpOworICAgIHJldHVybiBUUlVFOworICAgIH0KKworICBPUDIoU0xKSVRfU1VCLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1swXSk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCByYW5nZXNbM10gLSByYW5nZXNbMF0pKTsKKyAgaWYgKHJhbmdlc1sxXSArIDEgIT0gcmFuZ2VzWzJdKQorICAgIHsKKyAgICBPUDIoU0xKSVRfU1VCLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1sxXSAtIHJhbmdlc1swXSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHJhbmdlc1syXSAtIHJhbmdlc1sxXSkpOworICAgIH0KKyAgZWxzZQorICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgcmFuZ2VzWzFdIC0gcmFuZ2VzWzBdKSk7CisgIHJldHVybiBUUlVFOworCisgIGRlZmF1bHQ6CisgIFNMSklUX0FTU0VSVF9TVE9QKCk7CisgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCBjaGVja19hbnluZXdsaW5lKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uKQoreworLyogQ2hlY2sgd2hldGhlciBUTVAxIGNvbnRhaW5zIGEgbmV3bGluZSBjaGFyYWN0ZXIuIFRNUDIgZGVzdHJveWVkLiAqLworREVGSU5FX0NPTVBJTEVSOworCitzbGppdF9lbWl0X2Zhc3RfZW50ZXIoY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKKworT1AyKFNMSklUX1NVQiwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDBhKTsKK09QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfVSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4MGQgLSAweDBhKTsKK09QX0ZMQUdTKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9MRVNTX0VRVUFMKTsKK09QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ODUgLSAweDBhKTsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSB8fCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYgfHwgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKK2lmIChjb21tb24tPnV0ZikKKyAgeworI2VuZGlmCisgIE9QX0ZMQUdTKFNMSklUX09SLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9FUVVBTCk7CisgIE9QMihTTEpJVF9PUiwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDEpOworICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDIwMjkgLSAweDBhKTsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICB9CisjZW5kaWYKKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgfHwgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IFsxNnwzMl0gKi8KK09QX0ZMQUdTKFNMSklUX09SIHwgU0xKSVRfU0VUX0UsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0VRVUFMKTsKK3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfaHNwYWNlKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uKQoreworLyogQ2hlY2sgd2hldGhlciBUTVAxIGNvbnRhaW5zIGEgbmV3bGluZSBjaGFyYWN0ZXIuIFRNUDIgZGVzdHJveWVkLiAqLworREVGSU5FX0NPTVBJTEVSOworCitzbGppdF9lbWl0X2Zhc3RfZW50ZXIoY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKKworT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgwOSk7CitPUF9GTEFHUyhTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX1VOVVNFRCwgMCwgU0xKSVRfRVFVQUwpOworT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgyMCk7CitPUF9GTEFHUyhTTEpJVF9PUiwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfRVFVQUwpOworT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhhMCk7CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgfHwgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2IHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgorI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CitpZiAoY29tbW9uLT51dGYpCisgIHsKKyNlbmRpZgorICBPUF9GTEFHUyhTTEpJVF9PUiwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfRVFVQUwpOworICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDE2ODApOworICBPUF9GTEFHUyhTTEpJVF9PUiwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfRVFVQUwpOworICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDE4MGUpOworICBPUF9GTEFHUyhTTEpJVF9PUiwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfRVFVQUwpOworICBPUDIoU0xKSVRfU1VCLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4MjAwMCk7CisgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfVSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4MjAwQSAtIDB4MjAwMCk7CisgIE9QX0ZMQUdTKFNMSklUX09SLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9MRVNTX0VRVUFMKTsKKyAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgyMDJmIC0gMHgyMDAwKTsKKyAgT1BfRkxBR1MoU0xKSVRfT1IsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0VRVUFMKTsKKyAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgyMDVmIC0gMHgyMDAwKTsKKyAgT1BfRkxBR1MoU0xKSVRfT1IsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0VRVUFMKTsKKyAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgzMDAwIC0gMHgyMDAwKTsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICB9CisjZW5kaWYKKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgfHwgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IFsxNnwzMl0gKi8KK09QX0ZMQUdTKFNMSklUX09SIHwgU0xKSVRfU0VUX0UsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0VRVUFMKTsKKworc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgUkVUVVJOX0FERFIsIDApOworfQorCitzdGF0aWMgdm9pZCBjaGVja192c3BhY2UoY29tcGlsZXJfY29tbW9uICpjb21tb24pCit7CisvKiBDaGVjayB3aGV0aGVyIFRNUDEgY29udGFpbnMgYSBuZXdsaW5lIGNoYXJhY3Rlci4gVE1QMiBkZXN0cm95ZWQuICovCitERUZJTkVfQ09NUElMRVI7CisKK3Nsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgUkVUVVJOX0FERFIsIDApOworCitPUDIoU0xKSVRfU1VCLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4MGEpOworT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9VLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgwZCAtIDB4MGEpOworT1BfRkxBR1MoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX0xFU1NfRVFVQUwpOworT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHg4NSAtIDB4MGEpOworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFIHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNiB8fCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMzIKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAoraWYgKGNvbW1vbi0+dXRmKQorICB7CisjZW5kaWYKKyAgT1BfRkxBR1MoU0xKSVRfT1IgfCBTTEpJVF9TRVRfRSwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfRVFVQUwpOworICBPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgxKTsKKyAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgyMDI5IC0gMHgwYSk7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyAgfQorI2VuZGlmCisjZW5kaWYgLyogU1VQUE9SVF9VTklDT0RFIHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSBbMTZ8MzJdICovCitPUF9GTEFHUyhTTEpJVF9PUiB8IFNMSklUX1NFVF9FLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9FUVVBTCk7CisKK3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKK30KKworI2RlZmluZSBDSEFSMSBTVFJfRU5ECisjZGVmaW5lIENIQVIyIFNUQUNLX1RPUAorCitzdGF0aWMgdm9pZCBkb19jYXNlZnVsY21wKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uKQoreworREVGSU5FX0NPTVBJTEVSOworc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOworCitzbGppdF9lbWl0X2Zhc3RfZW50ZXIoY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKK09QMihTTEpJVF9TVUIsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDIsIDApOworT1AxKFNMSklUX01PViwgVE1QMywgMCwgQ0hBUjEsIDApOworT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIExPQ0FMUzAsIENIQVIyLCAwKTsKK09QMihTTEpJVF9TVUIsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKK09QMihTTEpJVF9TVUIsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKKworbGFiZWwgPSBMQUJFTCgpOworT1AxKE1PVlVfVUNIQVIsIENIQVIxLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBJTl9VQ0hBUlMoMSkpOworT1AxKE1PVlVfVUNIQVIsIENIQVIyLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCBJTl9VQ0hBUlMoMSkpOworanVtcCA9IENNUChTTEpJVF9OT1RfRVFVQUwsIENIQVIxLCAwLCBDSEFSMiwgMCk7CitPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKK0pVTVBUTyhTTEpJVF9OT1RfWkVSTywgbGFiZWwpOworCitKVU1QSEVSRShqdW1wKTsKK09QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKK09QMShTTEpJVF9NT1YsIENIQVIxLCAwLCBUTVAzLCAwKTsKK09QMShTTEpJVF9NT1YsIENIQVIyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMCk7CitzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKGNvbXBpbGVyLCBSRVRVUk5fQUREUiwgMCk7Cit9CisKKyNkZWZpbmUgTENDX1RBQkxFIFNUQUNLX0xJTUlUCisKK3N0YXRpYyB2b2lkIGRvX2Nhc2VsZXNzY21wKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uKQoreworREVGSU5FX0NPTVBJTEVSOworc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOworCitzbGppdF9lbWl0X2Zhc3RfZW50ZXIoY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKK09QMihTTEpJVF9TVUIsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDIsIDApOworCitPUDEoU0xKSVRfTU9WLCBUTVAzLCAwLCBMQ0NfVEFCTEUsIDApOworT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIExPQ0FMUzAsIENIQVIxLCAwKTsKK09QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBMT0NBTFMxLCBDSEFSMiwgMCk7CitPUDEoU0xKSVRfTU9WLCBMQ0NfVEFCTEUsIDAsIFNMSklUX0lNTSwgY29tbW9uLT5sY2MpOworT1AyKFNMSklUX1NVQiwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworT1AyKFNMSklUX1NVQiwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworCitsYWJlbCA9IExBQkVMKCk7CitPUDEoTU9WVV9VQ0hBUiwgQ0hBUjEsIDAsIFNMSklUX01FTTEoVE1QMSksIElOX1VDSEFSUygxKSk7CitPUDEoTU9WVV9VQ0hBUiwgQ0hBUjIsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygxKSk7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKK2p1bXAgPSBDTVAoU0xKSVRfR1JFQVRFUiwgQ0hBUjEsIDAsIFNMSklUX0lNTSwgMjU1KTsKKyNlbmRpZgorT1AxKFNMSklUX01PVl9VQiwgQ0hBUjEsIDAsIFNMSklUX01FTTIoTENDX1RBQkxFLCBDSEFSMSksIDApOworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CitKVU1QSEVSRShqdW1wKTsKK2p1bXAgPSBDTVAoU0xKSVRfR1JFQVRFUiwgQ0hBUjIsIDAsIFNMSklUX0lNTSwgMjU1KTsKKyNlbmRpZgorT1AxKFNMSklUX01PVl9VQiwgQ0hBUjIsIDAsIFNMSklUX01FTTIoTENDX1RBQkxFLCBDSEFSMiksIDApOworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CitKVU1QSEVSRShqdW1wKTsKKyNlbmRpZgoranVtcCA9IENNUChTTEpJVF9OT1RfRVFVQUwsIENIQVIxLCAwLCBDSEFSMiwgMCk7CitPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKK0pVTVBUTyhTTEpJVF9OT1RfWkVSTywgbGFiZWwpOworCitKVU1QSEVSRShqdW1wKTsKK09QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKK09QMShTTEpJVF9NT1YsIExDQ19UQUJMRSwgMCwgVE1QMywgMCk7CitPUDEoU0xKSVRfTU9WLCBDSEFSMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIExPQ0FMUzApOworT1AxKFNMSklUX01PViwgQ0hBUjIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBMT0NBTFMxKTsKK3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIFJFVFVSTl9BRERSLCAwKTsKK30KKworI3VuZGVmIExDQ19UQUJMRQorI3VuZGVmIENIQVIxCisjdW5kZWYgQ0hBUjIKKworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFCisKK3N0YXRpYyBQQ1JFMl9TUFRSIFNMSklUX0NBTEwgZG9fdXRmX2Nhc2VsZXNzY21wKFBDUkUyX1NQVFIgc3JjMSwgaml0X2FyZ3VtZW50cyAqYXJncywgUENSRTJfU1BUUiBlbmQxKQoreworLyogVGhpcyBmdW5jdGlvbiB3b3VsZCBiZSBpbmVmZmVjdGl2ZSB0byBkbyBpbiBKSVQgbGV2ZWwuICovCitzbGppdF91aSBjMSwgYzI7CitQQ1JFMl9TUFRSIHNyYzIgPSBhcmdzLT5zdGFydGNoYXJfcHRyOworUENSRTJfU1BUUiBlbmQyID0gYXJncy0+ZW5kOworY29uc3QgdWNkX3JlY29yZCAqdXI7Citjb25zdCBzbGppdF91aSAqcHA7CisKK3doaWxlIChzcmMxIDwgZW5kMSkKKyAgeworICBpZiAoc3JjMiA+PSBlbmQyKQorICAgIHJldHVybiAoUENSRTJfU1BUUikxOworICBHRVRDSEFSSU5DKGMxLCBzcmMxKTsKKyAgR0VUQ0hBUklOQyhjMiwgc3JjMik7CisgIHVyID0gR0VUX1VDRChjMik7CisgIGlmIChjMSAhPSBjMiAmJiBjMSAhPSBjMiArIHVyLT5vdGhlcl9jYXNlKQorICAgIHsKKyAgICBwcCA9IFBSSVYodWNkX2Nhc2VsZXNzX3NldHMpICsgdXItPmNhc2VzZXQ7CisgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgIGlmIChjMSA8ICpwcCkgcmV0dXJuIE5VTEw7CisgICAgICBpZiAoYzEgPT0gKnBwKyspIGJyZWFrOworICAgICAgfQorICAgIH0KKyAgfQorcmV0dXJuIHNyYzI7Cit9CisKKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKworc3RhdGljIFBDUkUyX1NQVFIgY29tcGlsZV9jaGFyMV9tYXRjaGluZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1VDSEFSIHR5cGUsIFBDUkUyX1NQVFIgY2MsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MsIEJPT0wgY2hlY2tfc3RyX3B0cik7CisKK3N0YXRpYyBQQ1JFMl9TUFRSIGJ5dGVfc2VxdWVuY2VfY29tcGFyZShjb21waWxlcl9jb21tb24gKmNvbW1vbiwgQk9PTCBjYXNlbGVzcywgUENSRTJfU1BUUiBjYywKKyAgICBjb21wYXJlX2NvbnRleHQgKmNvbnRleHQsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MpCit7CitERUZJTkVfQ09NUElMRVI7Cit1bnNpZ25lZCBpbnQgb3RoZXJjYXNlYml0ID0gMDsKK1BDUkUyX1NQVFIgb3RoZXJjYXNlY2hhciA9IE5VTEw7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCitpbnQgdXRmbGVuZ3RoOworI2VuZGlmCisKK2lmIChjYXNlbGVzcyAmJiBjaGFyX2hhc19vdGhlcmNhc2UoY29tbW9uLCBjYykpCisgIHsKKyAgb3RoZXJjYXNlYml0ID0gY2hhcl9nZXRfb3RoZXJjYXNlX2JpdChjb21tb24sIGNjKTsKKyAgU0xKSVRfQVNTRVJUKG90aGVyY2FzZWJpdCk7CisgIC8qIEV4dHJhY3RpbmcgYml0IGRpZmZlcmVuY2UgaW5mby4gKi8KKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICBvdGhlcmNhc2VjaGFyID0gY2MgKyAob3RoZXJjYXNlYml0ID4+IDgpOworICBvdGhlcmNhc2ViaXQgJj0gMHhmZjsKKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNiB8fCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMzIKKyAgLyogTm90ZSB0aGF0IHRoaXMgY29kZSBvbmx5IGhhbmRsZXMgY2hhcmFjdGVycyBpbiB0aGUgQk1QLiBJZiB0aGVyZQorICBldmVyIGFyZSBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEJNUCB3aG9zZSBvdGhlcmNhc2UgZGlmZmVycyBpbiBvbmx5IG9uZQorICBiaXQgZnJvbSBpdHNlbGYgKHRoZXJlIGN1cnJlbnRseSBhcmUgbm9uZSksIHRoaXMgY29kZSB3aWxsIG5lZWQgdG8gYmUKKyAgcmV2aXNlZCBmb3IgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyLiAqLworICBvdGhlcmNhc2VjaGFyID0gY2MgKyAob3RoZXJjYXNlYml0ID4+IDkpOworICBpZiAoKG90aGVyY2FzZWJpdCAmIDB4MTAwKSAhPSAwKQorICAgIG90aGVyY2FzZWJpdCA9IChvdGhlcmNhc2ViaXQgJiAweGZmKSA8PCA4OworICBlbHNlCisgICAgb3RoZXJjYXNlYml0ICY9IDB4ZmY7CisjZW5kaWYgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIID09IFs4fDE2fDMyXSAqLworICB9CisKK2lmIChjb250ZXh0LT5zb3VyY2VyZWcgPT0gLTEpCisgIHsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorI2lmIGRlZmluZWQgU0xKSVRfVU5BTElHTkVEICYmIFNMSklUX1VOQUxJR05FRAorICBpZiAoY29udGV4dC0+bGVuZ3RoID49IDQpCisgICAgT1AxKFNMSklUX01PVl9TSSwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgLWNvbnRleHQtPmxlbmd0aCk7CisgIGVsc2UgaWYgKGNvbnRleHQtPmxlbmd0aCA+PSAyKQorICAgIE9QMShTTEpJVF9NT1ZfVUgsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIC1jb250ZXh0LT5sZW5ndGgpOworICBlbHNlCisjZW5kaWYKKyAgICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAtY29udGV4dC0+bGVuZ3RoKTsKKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgorI2lmIGRlZmluZWQgU0xKSVRfVU5BTElHTkVEICYmIFNMSklUX1VOQUxJR05FRAorICBpZiAoY29udGV4dC0+bGVuZ3RoID49IDQpCisgICAgT1AxKFNMSklUX01PVl9TSSwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgLWNvbnRleHQtPmxlbmd0aCk7CisgIGVsc2UKKyNlbmRpZgorICAgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIC1jb250ZXh0LT5sZW5ndGgpOworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCisgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIC1jb250ZXh0LT5sZW5ndGgpOworI2VuZGlmIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSBbOHwxNnwzMl0gKi8KKyAgY29udGV4dC0+c291cmNlcmVnID0gVE1QMjsKKyAgfQorCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCit1dGZsZW5ndGggPSAxOworaWYgKGNvbW1vbi0+dXRmICYmIEhBU19FWFRSQUxFTigqY2MpKQorICB1dGZsZW5ndGggKz0gR0VUX0VYVFJBTEVOKCpjYyk7CisKK2RvCisgIHsKKyNlbmRpZgorCisgIGNvbnRleHQtPmxlbmd0aCAtPSBJTl9VQ0hBUlMoMSk7CisjaWYgKGRlZmluZWQgU0xKSVRfVU5BTElHTkVEICYmIFNMSklUX1VOQUxJR05FRCkgJiYgKFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4IHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNikKKworICAvKiBVbmFsaWduZWQgcmVhZCBpcyBzdXBwb3J0ZWQuICovCisgIGlmIChvdGhlcmNhc2ViaXQgIT0gMCAmJiBvdGhlcmNhc2VjaGFyID09IGNjKQorICAgIHsKKyAgICBjb250ZXh0LT5jLmFzdWNoYXJzW2NvbnRleHQtPnVjaGFycHRyXSA9ICpjYyB8IG90aGVyY2FzZWJpdDsKKyAgICBjb250ZXh0LT5vYy5hc3VjaGFyc1tjb250ZXh0LT51Y2hhcnB0cl0gPSBvdGhlcmNhc2ViaXQ7CisgICAgfQorICBlbHNlCisgICAgeworICAgIGNvbnRleHQtPmMuYXN1Y2hhcnNbY29udGV4dC0+dWNoYXJwdHJdID0gKmNjOworICAgIGNvbnRleHQtPm9jLmFzdWNoYXJzW2NvbnRleHQtPnVjaGFycHRyXSA9IDA7CisgICAgfQorICBjb250ZXh0LT51Y2hhcnB0cisrOworCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyAgaWYgKGNvbnRleHQtPnVjaGFycHRyID49IDQgfHwgY29udGV4dC0+bGVuZ3RoID09IDAgfHwgKGNvbnRleHQtPnVjaGFycHRyID09IDIgJiYgY29udGV4dC0+bGVuZ3RoID09IDEpKQorI2Vsc2UKKyAgaWYgKGNvbnRleHQtPnVjaGFycHRyID49IDIgfHwgY29udGV4dC0+bGVuZ3RoID09IDApCisjZW5kaWYKKyAgICB7CisgICAgaWYgKGNvbnRleHQtPmxlbmd0aCA+PSA0KQorICAgICAgT1AxKFNMSklUX01PVl9TSSwgY29udGV4dC0+c291cmNlcmVnLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAtY29udGV4dC0+bGVuZ3RoKTsKKyAgICBlbHNlIGlmIChjb250ZXh0LT5sZW5ndGggPj0gMikKKyAgICAgIE9QMShTTEpJVF9NT1ZfVUgsIGNvbnRleHQtPnNvdXJjZXJlZywgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgLWNvbnRleHQtPmxlbmd0aCk7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyAgICBlbHNlIGlmIChjb250ZXh0LT5sZW5ndGggPj0gMSkKKyAgICAgIE9QMShTTEpJVF9NT1ZfVUIsIGNvbnRleHQtPnNvdXJjZXJlZywgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgLWNvbnRleHQtPmxlbmd0aCk7CisjZW5kaWYgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDggKi8KKyAgICBjb250ZXh0LT5zb3VyY2VyZWcgPSBjb250ZXh0LT5zb3VyY2VyZWcgPT0gVE1QMSA/IFRNUDIgOiBUTVAxOworCisgICAgc3dpdGNoKGNvbnRleHQtPnVjaGFycHRyKQorICAgICAgeworICAgICAgY2FzZSA0IC8gc2l6ZW9mKFBDUkUyX1VDSEFSKToKKyAgICAgIGlmIChjb250ZXh0LT5vYy5hc2ludCAhPSAwKQorICAgICAgICBPUDIoU0xKSVRfT1IsIGNvbnRleHQtPnNvdXJjZXJlZywgMCwgY29udGV4dC0+c291cmNlcmVnLCAwLCBTTEpJVF9JTU0sIGNvbnRleHQtPm9jLmFzaW50KTsKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBjb250ZXh0LT5zb3VyY2VyZWcsIDAsIFNMSklUX0lNTSwgY29udGV4dC0+Yy5hc2ludCB8IGNvbnRleHQtPm9jLmFzaW50KSk7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSAyIC8gc2l6ZW9mKFBDUkUyX1VDSEFSKToKKyAgICAgIGlmIChjb250ZXh0LT5vYy5hc3VzaG9ydCAhPSAwKQorICAgICAgICBPUDIoU0xKSVRfT1IsIGNvbnRleHQtPnNvdXJjZXJlZywgMCwgY29udGV4dC0+c291cmNlcmVnLCAwLCBTTEpJVF9JTU0sIGNvbnRleHQtPm9jLmFzdXNob3J0KTsKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBjb250ZXh0LT5zb3VyY2VyZWcsIDAsIFNMSklUX0lNTSwgY29udGV4dC0+Yy5hc3VzaG9ydCB8IGNvbnRleHQtPm9jLmFzdXNob3J0KSk7CisgICAgICBicmVhazsKKworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgICAgICBjYXNlIDE6CisgICAgICBpZiAoY29udGV4dC0+b2MuYXNieXRlICE9IDApCisgICAgICAgIE9QMihTTEpJVF9PUiwgY29udGV4dC0+c291cmNlcmVnLCAwLCBjb250ZXh0LT5zb3VyY2VyZWcsIDAsIFNMSklUX0lNTSwgY29udGV4dC0+b2MuYXNieXRlKTsKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBjb250ZXh0LT5zb3VyY2VyZWcsIDAsIFNMSklUX0lNTSwgY29udGV4dC0+Yy5hc2J5dGUgfCBjb250ZXh0LT5vYy5hc2J5dGUpKTsKKyAgICAgIGJyZWFrOworI2VuZGlmCisKKyAgICAgIGRlZmF1bHQ6CisgICAgICBTTEpJVF9BU1NFUlRfU1RPUCgpOworICAgICAgYnJlYWs7CisgICAgICB9CisgICAgY29udGV4dC0+dWNoYXJwdHIgPSAwOworICAgIH0KKworI2Vsc2UKKworICAvKiBVbmFsaWduZWQgcmVhZCBpcyB1bnN1cHBvcnRlZCBvciBpbiAzMiBiaXQgbW9kZS4gKi8KKyAgaWYgKGNvbnRleHQtPmxlbmd0aCA+PSAxKQorICAgIE9QMShNT1ZfVUNIQVIsIGNvbnRleHQtPnNvdXJjZXJlZywgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgLWNvbnRleHQtPmxlbmd0aCk7CisKKyAgY29udGV4dC0+c291cmNlcmVnID0gY29udGV4dC0+c291cmNlcmVnID09IFRNUDEgPyBUTVAyIDogVE1QMTsKKworICBpZiAob3RoZXJjYXNlYml0ICE9IDAgJiYgb3RoZXJjYXNlY2hhciA9PSBjYykKKyAgICB7CisgICAgT1AyKFNMSklUX09SLCBjb250ZXh0LT5zb3VyY2VyZWcsIDAsIGNvbnRleHQtPnNvdXJjZXJlZywgMCwgU0xKSVRfSU1NLCBvdGhlcmNhc2ViaXQpOworICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBjb250ZXh0LT5zb3VyY2VyZWcsIDAsIFNMSklUX0lNTSwgKmNjIHwgb3RoZXJjYXNlYml0KSk7CisgICAgfQorICBlbHNlCisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9OT1RfRVFVQUwsIGNvbnRleHQtPnNvdXJjZXJlZywgMCwgU0xKSVRfSU1NLCAqY2MpKTsKKworI2VuZGlmCisKKyAgY2MrKzsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgdXRmbGVuZ3RoLS07CisgIH0KK3doaWxlICh1dGZsZW5ndGggPiAwKTsKKyNlbmRpZgorCityZXR1cm4gY2M7Cit9CisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSB8fCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorCisjZGVmaW5lIFNFVF9UWVBFX09GRlNFVCh2YWx1ZSkgXAorICBpZiAoKHZhbHVlKSAhPSB0eXBlb2Zmc2V0KSBcCisgICAgeyBcCisgICAgaWYgKCh2YWx1ZSkgPCB0eXBlb2Zmc2V0KSBcCisgICAgICBPUDIoU0xKSVRfQURELCB0eXBlcmVnLCAwLCB0eXBlcmVnLCAwLCBTTEpJVF9JTU0sIHR5cGVvZmZzZXQgLSAodmFsdWUpKTsgXAorICAgIGVsc2UgXAorICAgICAgT1AyKFNMSklUX1NVQiwgdHlwZXJlZywgMCwgdHlwZXJlZywgMCwgU0xKSVRfSU1NLCAodmFsdWUpIC0gdHlwZW9mZnNldCk7IFwKKyAgICB9IFwKKyAgdHlwZW9mZnNldCA9ICh2YWx1ZSk7CisKKyNkZWZpbmUgU0VUX0NIQVJfT0ZGU0VUKHZhbHVlKSBcCisgIGlmICgodmFsdWUpICE9IGNoYXJvZmZzZXQpIFwKKyAgICB7IFwKKyAgICBpZiAoKHZhbHVlKSA8IGNoYXJvZmZzZXQpIFwKKyAgICAgIE9QMihTTEpJVF9BREQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KShjaGFyb2Zmc2V0IC0gKHZhbHVlKSkpOyBcCisgICAgZWxzZSBcCisgICAgICBPUDIoU0xKSVRfU1VCLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdykoKHZhbHVlKSAtIGNoYXJvZmZzZXQpKTsgXAorICAgIH0gXAorICBjaGFyb2Zmc2V0ID0gKHZhbHVlKTsKKworc3RhdGljIHZvaWQgY29tcGlsZV94Y2xhc3NfbWF0Y2hpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBqdW1wX2xpc3QgKipiYWNrdHJhY2tzKQoreworREVGSU5FX0NPTVBJTEVSOworanVtcF9saXN0ICpmb3VuZCA9IE5VTEw7CitqdW1wX2xpc3QgKipsaXN0ID0gKGNjWzBdICYgWENMX05PVCkgPT0gMCA/ICZmb3VuZCA6IGJhY2t0cmFja3M7CitzbGppdF91dyBjLCBjaGFyb2Zmc2V0LCBtYXggPSAyNTYsIG1pbiA9IFJFQURfQ0hBUl9NQVg7CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCA9IE5VTEw7CitQQ1JFMl9TUFRSIGNjYmVnaW47CitpbnQgY29tcGFyZXMsIGludmVydGNtcCwgbnVtYmVyb2ZjbXBzOworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIChQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOCB8fCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYpCitCT09MIHV0ZiA9IGNvbW1vbi0+dXRmOworI2VuZGlmCisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK0JPT0wgbmVlZHN0eXBlID0gRkFMU0UsIG5lZWRzc2NyaXB0ID0gRkFMU0UsIG5lZWRzY2hhciA9IEZBTFNFOworQk9PTCBjaGFyc2F2ZWQgPSBGQUxTRTsKK2ludCB0eXBlcmVnID0gVE1QMTsKK2NvbnN0IHNsaml0X3VpICpvdGhlcl9jYXNlczsKK3Nsaml0X3V3IHR5cGVvZmZzZXQ7CisjZW5kaWYKKworLyogU2Nhbm5pbmcgdGhlIG5lY2Vzc2FyeSBpbmZvLiAqLworY2MrKzsKK2NjYmVnaW4gPSBjYzsKK2NvbXBhcmVzID0gMDsKKworaWYgKGNjWy0xXSAmIFhDTF9NQVApCisgIHsKKyAgbWluID0gMDsKKyAgY2MgKz0gMzIgLyBzaXplb2YoUENSRTJfVUNIQVIpOworICB9CisKK3doaWxlICgqY2MgIT0gWENMX0VORCkKKyAgeworICBjb21wYXJlcysrOworICBpZiAoKmNjID09IFhDTF9TSU5HTEUpCisgICAgeworICAgIGNjICsrOworICAgIEdFVENIQVJJTkNURVNUKGMsIGNjKTsKKyAgICBpZiAoYyA+IG1heCkgbWF4ID0gYzsKKyAgICBpZiAoYyA8IG1pbikgbWluID0gYzsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICBuZWVkc2NoYXIgPSBUUlVFOworI2VuZGlmCisgICAgfQorICBlbHNlIGlmICgqY2MgPT0gWENMX1JBTkdFKQorICAgIHsKKyAgICBjYyArKzsKKyAgICBHRVRDSEFSSU5DVEVTVChjLCBjYyk7CisgICAgaWYgKGMgPCBtaW4pIG1pbiA9IGM7CisgICAgR0VUQ0hBUklOQ1RFU1QoYywgY2MpOworICAgIGlmIChjID4gbWF4KSBtYXggPSBjOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIG5lZWRzY2hhciA9IFRSVUU7CisjZW5kaWYKKyAgICB9CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgIGVsc2UKKyAgICB7CisgICAgU0xKSVRfQVNTRVJUKCpjYyA9PSBYQ0xfUFJPUCB8fCAqY2MgPT0gWENMX05PVFBST1ApOworICAgIGNjKys7CisgICAgaWYgKCpjYyA9PSBQVF9DTElTVCkKKyAgICAgIHsKKyAgICAgIG90aGVyX2Nhc2VzID0gUFJJVih1Y2RfY2FzZWxlc3Nfc2V0cykgKyBjY1sxXTsKKyAgICAgIHdoaWxlICgqb3RoZXJfY2FzZXMgIT0gTk9UQUNIQVIpCisgICAgICAgIHsKKyAgICAgICAgaWYgKCpvdGhlcl9jYXNlcyA+IG1heCkgbWF4ID0gKm90aGVyX2Nhc2VzOworICAgICAgICBpZiAoKm90aGVyX2Nhc2VzIDwgbWluKSBtaW4gPSAqb3RoZXJfY2FzZXM7CisgICAgICAgIG90aGVyX2Nhc2VzKys7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBtYXggPSBSRUFEX0NIQVJfTUFYOworICAgICAgbWluID0gMDsKKyAgICAgIH0KKworICAgIHN3aXRjaCgqY2MpCisgICAgICB7CisgICAgICBjYXNlIFBUX0FOWToKKyAgICAgIC8qIEFueSBlaXRoZXIgYWNjZXB0cyBldmVyeXRoaW5nIG9yIGlnbm9yZWQuICovCisgICAgICBpZiAoY2NbLTFdID09IFhDTF9QUk9QKQorICAgICAgICB7CisgICAgICAgIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgT1BfQUxMQU5ZLCBjYywgYmFja3RyYWNrcywgRkFMU0UpOworICAgICAgICBpZiAobGlzdCA9PSBiYWNrdHJhY2tzKQorICAgICAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBKVU1QKFNMSklUX0pVTVApKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBQVF9MQU1QOgorICAgICAgY2FzZSBQVF9HQzoKKyAgICAgIGNhc2UgUFRfUEM6CisgICAgICBjYXNlIFBUX0FMTlVNOgorICAgICAgbmVlZHN0eXBlID0gVFJVRTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBUX1NDOgorICAgICAgbmVlZHNzY3JpcHQgPSBUUlVFOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFRfU1BBQ0U6CisgICAgICBjYXNlIFBUX1BYU1BBQ0U6CisgICAgICBjYXNlIFBUX1dPUkQ6CisgICAgICBjYXNlIFBUX1BYR1JBUEg6CisgICAgICBjYXNlIFBUX1BYUFJJTlQ6CisgICAgICBjYXNlIFBUX1BYUFVOQ1Q6CisgICAgICBuZWVkc3R5cGUgPSBUUlVFOworICAgICAgbmVlZHNjaGFyID0gVFJVRTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBUX0NMSVNUOgorICAgICAgY2FzZSBQVF9VQ05DOgorICAgICAgbmVlZHNjaGFyID0gVFJVRTsKKyAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgU0xKSVRfQVNTRVJUX1NUT1AoKTsKKyAgICAgIGJyZWFrOworICAgICAgfQorICAgIGNjICs9IDI7CisgICAgfQorI2VuZGlmCisgIH0KK1NMSklUX0FTU0VSVChjb21wYXJlcyA+IDApOworCisvKiBXZSBhcmUgbm90IG5lY2Vzc2FyeSBpbiB1dGYgbW9kZSBldmVuIGluIDggYml0IG1vZGUuICovCitjYyA9IGNjYmVnaW47CityZWFkX2NoYXJfcmFuZ2UoY29tbW9uLCBtaW4sIG1heCwgKGNjWy0xXSAmIFhDTF9OT1QpICE9IDApOworCitpZiAoKGNjWy0xXSAmIFhDTF9IQVNQUk9QKSA9PSAwKQorICB7CisgIGlmICgoY2NbLTFdICYgWENMX01BUCkgIT0gMCkKKyAgICB7CisgICAganVtcCA9IENNUChTTEpJVF9HUkVBVEVSLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDI1NSk7CisgICAgaWYgKCFjaGVja19jbGFzc19yYW5nZXMoY29tbW9uLCAoY29uc3Qgc2xqaXRfdWIgKiljYywgKCgoY29uc3Qgc2xqaXRfdWIgKiljYylbMzFdICYgMHg4MCkgIT0gMCwgVFJVRSwgJmZvdW5kKSkKKyAgICAgIHsKKyAgICAgIE9QMihTTEpJVF9BTkQsIFRNUDIsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHg3KTsKKyAgICAgIE9QMihTTEpJVF9MU0hSLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDMpOworICAgICAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KWNjKTsKKyAgICAgIE9QMihTTEpJVF9TSEwsIFRNUDIsIDAsIFNMSklUX0lNTSwgMSwgVE1QMiwgMCk7CisgICAgICBPUDIoU0xKSVRfQU5EIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgVE1QMiwgMCk7CisgICAgICBhZGRfanVtcChjb21waWxlciwgJmZvdW5kLCBKVU1QKFNMSklUX05PVF9aRVJPKSk7CisgICAgICB9CisKKyAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUChTTEpJVF9KVU1QKSk7CisgICAgSlVNUEhFUkUoanVtcCk7CisKKyAgICBjYyArPSAzMiAvIHNpemVvZihQQ1JFMl9VQ0hBUik7CisgICAgfQorICBlbHNlCisgICAgeworICAgIE9QMihTTEpJVF9TVUIsIFRNUDIsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgbWluKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgKGNjWy0xXSAmIFhDTF9OT1QpID09IDAgPyBiYWNrdHJhY2tzIDogJmZvdW5kLCBDTVAoU0xKSVRfR1JFQVRFUiwgVE1QMiwgMCwgU0xKSVRfSU1NLCBtYXggLSBtaW4pKTsKKyAgICB9CisgIH0KK2Vsc2UgaWYgKChjY1stMV0gJiBYQ0xfTUFQKSAhPSAwKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFJFVFVSTl9BRERSLCAwLCBUTVAxLCAwKTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgY2hhcnNhdmVkID0gVFJVRTsKKyNlbmRpZgorICBpZiAoIWNoZWNrX2NsYXNzX3Jhbmdlcyhjb21tb24sIChjb25zdCBzbGppdF91YiAqKWNjLCBGQUxTRSwgVFJVRSwgbGlzdCkpCisgICAgeworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgICAganVtcCA9IE5VTEw7CisgICAgaWYgKGNvbW1vbi0+dXRmKQorI2VuZGlmCisgICAgICBqdW1wID0gQ01QKFNMSklUX0dSRUFURVIsIFRNUDEsIDAsIFNMSklUX0lNTSwgMjU1KTsKKworICAgIE9QMihTTEpJVF9BTkQsIFRNUDIsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHg3KTsKKyAgICBPUDIoU0xKSVRfTFNIUiwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAzKTsKKyAgICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpY2MpOworICAgIE9QMihTTEpJVF9TSEwsIFRNUDIsIDAsIFNMSklUX0lNTSwgMSwgVE1QMiwgMCk7CisgICAgT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFRNUDIsIDApOworICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBsaXN0LCBKVU1QKFNMSklUX05PVF9aRVJPKSk7CisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgIGlmIChjb21tb24tPnV0ZikKKyNlbmRpZgorICAgICAgSlVNUEhFUkUoanVtcCk7CisgICAgfQorCisgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFJFVFVSTl9BRERSLCAwKTsKKyAgY2MgKz0gMzIgLyBzaXplb2YoUENSRTJfVUNIQVIpOworICB9CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK2lmIChuZWVkc3R5cGUgfHwgbmVlZHNzY3JpcHQpCisgIHsKKyAgaWYgKG5lZWRzY2hhciAmJiAhY2hhcnNhdmVkKQorICAgIE9QMShTTEpJVF9NT1YsIFJFVFVSTl9BRERSLCAwLCBUTVAxLCAwKTsKKworICBPUDIoU0xKSVRfTFNIUiwgVE1QMiwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBVQ0RfQkxPQ0tfU0hJRlQpOworICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCAoc2xqaXRfc3cpUFJJVih1Y2Rfc3RhZ2UxKSk7CisgIE9QMihTTEpJVF9BTkQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgVUNEX0JMT0NLX01BU0spOworICBPUDIoU0xKSVRfU0hMLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIFVDRF9CTE9DS19TSElGVCk7CisgIE9QMihTTEpJVF9BREQsIFRNUDEsIDAsIFRNUDEsIDAsIFRNUDIsIDApOworICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdylQUklWKHVjZF9zdGFnZTIpKTsKKyAgT1AxKFNMSklUX01PVl9VSCwgVE1QMiwgMCwgU0xKSVRfTUVNMihUTVAyLCBUTVAxKSwgMSk7CisKKyAgLyogQmVmb3JlIGFueXRoaW5nIGVsc2UsIHdlIGRlYWwgd2l0aCBzY3JpcHRzLiAqLworICBpZiAobmVlZHNzY3JpcHQpCisgICAgeworICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KVBSSVYodWNkX3JlY29yZHMpICsgU0xKSVRfT0ZGU0VUT0YodWNkX3JlY29yZCwgc2NyaXB0KSk7CisgICAgT1AxKFNMSklUX01PVl9VQiwgVE1QMSwgMCwgU0xKSVRfTUVNMihUTVAxLCBUTVAyKSwgMyk7CisKKyAgICBjY2JlZ2luID0gY2M7CisKKyAgICB3aGlsZSAoKmNjICE9IFhDTF9FTkQpCisgICAgICB7CisgICAgICBpZiAoKmNjID09IFhDTF9TSU5HTEUpCisgICAgICAgIHsKKyAgICAgICAgY2MgKys7CisgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGNjKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoKmNjID09IFhDTF9SQU5HRSkKKyAgICAgICAgeworICAgICAgICBjYyArKzsKKyAgICAgICAgR0VUQ0hBUklOQ1RFU1QoYywgY2MpOworICAgICAgICBHRVRDSEFSSU5DVEVTVChjLCBjYyk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBTTEpJVF9BU1NFUlQoKmNjID09IFhDTF9QUk9QIHx8ICpjYyA9PSBYQ0xfTk9UUFJPUCk7CisgICAgICAgIGNjKys7CisgICAgICAgIGlmICgqY2MgPT0gUFRfU0MpCisgICAgICAgICAgeworICAgICAgICAgIGNvbXBhcmVzLS07CisgICAgICAgICAgaW52ZXJ0Y21wID0gKGNvbXBhcmVzID09IDAgJiYgbGlzdCAhPSBiYWNrdHJhY2tzKTsKKyAgICAgICAgICBpZiAoY2NbLTFdID09IFhDTF9OT1RQUk9QKQorICAgICAgICAgICAgaW52ZXJ0Y21wIF49IDB4MTsKKyAgICAgICAgICBqdW1wID0gQ01QKFNMSklUX0VRVUFMIF4gaW52ZXJ0Y21wLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChpbnQpY2NbMV0pOworICAgICAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBjb21wYXJlcyA+IDAgPyBsaXN0IDogYmFja3RyYWNrcywganVtcCk7CisgICAgICAgICAgfQorICAgICAgICBjYyArPSAyOworICAgICAgICB9CisgICAgICB9CisKKyAgICBjYyA9IGNjYmVnaW47CisgICAgfQorCisgIGlmIChuZWVkc2NoYXIpCisgICAgeworICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFJFVFVSTl9BRERSLCAwKTsKKyAgICB9CisKKyAgaWYgKG5lZWRzdHlwZSkKKyAgICB7CisgICAgaWYgKCFuZWVkc2NoYXIpCisgICAgICB7CisgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdylQUklWKHVjZF9yZWNvcmRzKSArIFNMSklUX09GRlNFVE9GKHVjZF9yZWNvcmQsIGNoYXJ0eXBlKSk7CisgICAgICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0yKFRNUDEsIFRNUDIpLCAzKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBPUDIoU0xKSVRfU0hMLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDMpOworICAgICAgT1AxKFNMSklUX01PVl9VQiwgUkVUVVJOX0FERFIsIDAsIFNMSklUX01FTTEoVE1QMiksIChzbGppdF9zdylQUklWKHVjZF9yZWNvcmRzKSArIFNMSklUX09GRlNFVE9GKHVjZF9yZWNvcmQsIGNoYXJ0eXBlKSk7CisgICAgICB0eXBlcmVnID0gUkVUVVJOX0FERFI7CisgICAgICB9CisgICAgfQorICB9CisjZW5kaWYKKworLyogR2VuZXJhdGluZyBjb2RlLiAqLworY2hhcm9mZnNldCA9IDA7CitudW1iZXJvZmNtcHMgPSAwOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQordHlwZW9mZnNldCA9IDA7CisjZW5kaWYKKword2hpbGUgKCpjYyAhPSBYQ0xfRU5EKQorICB7CisgIGNvbXBhcmVzLS07CisgIGludmVydGNtcCA9IChjb21wYXJlcyA9PSAwICYmIGxpc3QgIT0gYmFja3RyYWNrcyk7CisgIGp1bXAgPSBOVUxMOworCisgIGlmICgqY2MgPT0gWENMX1NJTkdMRSkKKyAgICB7CisgICAgY2MgKys7CisgICAgR0VUQ0hBUklOQ1RFU1QoYywgY2MpOworCisgICAgaWYgKG51bWJlcm9mY21wcyA8IDMgJiYgKCpjYyA9PSBYQ0xfU0lOR0xFIHx8ICpjYyA9PSBYQ0xfUkFOR0UpKQorICAgICAgeworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KShjIC0gY2hhcm9mZnNldCkpOworICAgICAgT1BfRkxBR1MobnVtYmVyb2ZjbXBzID09IDAgPyBTTEpJVF9NT1YgOiBTTEpJVF9PUiwgVE1QMiwgMCwgbnVtYmVyb2ZjbXBzID09IDAgPyBTTEpJVF9VTlVTRUQgOiBUTVAyLCAwLCBTTEpJVF9FUVVBTCk7CisgICAgICBudW1iZXJvZmNtcHMrKzsKKyAgICAgIH0KKyAgICBlbHNlIGlmIChudW1iZXJvZmNtcHMgPiAwKQorICAgICAgeworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KShjIC0gY2hhcm9mZnNldCkpOworICAgICAgT1BfRkxBR1MoU0xKSVRfT1IgfCBTTEpJVF9TRVRfRSwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfRVFVQUwpOworICAgICAganVtcCA9IEpVTVAoU0xKSVRfTk9UX1pFUk8gXiBpbnZlcnRjbXApOworICAgICAgbnVtYmVyb2ZjbXBzID0gMDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBqdW1wID0gQ01QKFNMSklUX0VRVUFMIF4gaW52ZXJ0Y21wLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdykoYyAtIGNoYXJvZmZzZXQpKTsKKyAgICAgIG51bWJlcm9mY21wcyA9IDA7CisgICAgICB9CisgICAgfQorICBlbHNlIGlmICgqY2MgPT0gWENMX1JBTkdFKQorICAgIHsKKyAgICBjYyArKzsKKyAgICBHRVRDSEFSSU5DVEVTVChjLCBjYyk7CisgICAgU0VUX0NIQVJfT0ZGU0VUKGMpOworICAgIEdFVENIQVJJTkNURVNUKGMsIGNjKTsKKworICAgIGlmIChudW1iZXJvZmNtcHMgPCAzICYmICgqY2MgPT0gWENMX1NJTkdMRSB8fCAqY2MgPT0gWENMX1JBTkdFKSkKKyAgICAgIHsKKyAgICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfVSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdykoYyAtIGNoYXJvZmZzZXQpKTsKKyAgICAgIE9QX0ZMQUdTKG51bWJlcm9mY21wcyA9PSAwID8gU0xKSVRfTU9WIDogU0xKSVRfT1IsIFRNUDIsIDAsIG51bWJlcm9mY21wcyA9PSAwID8gU0xKSVRfVU5VU0VEIDogVE1QMiwgMCwgU0xKSVRfTEVTU19FUVVBTCk7CisgICAgICBudW1iZXJvZmNtcHMrKzsKKyAgICAgIH0KKyAgICBlbHNlIGlmIChudW1iZXJvZmNtcHMgPiAwKQorICAgICAgeworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9VLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KShjIC0gY2hhcm9mZnNldCkpOworICAgICAgT1BfRkxBR1MoU0xKSVRfT1IgfCBTTEpJVF9TRVRfRSwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfTEVTU19FUVVBTCk7CisgICAgICBqdW1wID0gSlVNUChTTEpJVF9OT1RfWkVSTyBeIGludmVydGNtcCk7CisgICAgICBudW1iZXJvZmNtcHMgPSAwOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGp1bXAgPSBDTVAoU0xKSVRfTEVTU19FUVVBTCBeIGludmVydGNtcCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoc2xqaXRfc3cpKGMgLSBjaGFyb2Zmc2V0KSk7CisgICAgICBudW1iZXJvZmNtcHMgPSAwOworICAgICAgfQorICAgIH0KKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgZWxzZQorICAgIHsKKyAgICBTTEpJVF9BU1NFUlQoKmNjID09IFhDTF9QUk9QIHx8ICpjYyA9PSBYQ0xfTk9UUFJPUCk7CisgICAgaWYgKCpjYyA9PSBYQ0xfTk9UUFJPUCkKKyAgICAgIGludmVydGNtcCBePSAweDE7CisgICAgY2MrKzsKKyAgICBzd2l0Y2goKmNjKQorICAgICAgeworICAgICAgY2FzZSBQVF9BTlk6CisgICAgICBpZiAoIWludmVydGNtcCkKKyAgICAgICAganVtcCA9IEpVTVAoU0xKSVRfSlVNUCk7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBQVF9MQU1QOgorICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIHR5cGVyZWcsIDAsIFNMSklUX0lNTSwgdWNwX0x1IC0gdHlwZW9mZnNldCk7CisgICAgICBPUF9GTEFHUyhTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX1VOVVNFRCwgMCwgU0xKSVRfRVFVQUwpOworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIHR5cGVyZWcsIDAsIFNMSklUX0lNTSwgdWNwX0xsIC0gdHlwZW9mZnNldCk7CisgICAgICBPUF9GTEFHUyhTTEpJVF9PUiwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfRVFVQUwpOworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIHR5cGVyZWcsIDAsIFNMSklUX0lNTSwgdWNwX0x0IC0gdHlwZW9mZnNldCk7CisgICAgICBPUF9GTEFHUyhTTEpJVF9PUiB8IFNMSklUX1NFVF9FLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9FUVVBTCk7CisgICAgICBqdW1wID0gSlVNUChTTEpJVF9OT1RfWkVSTyBeIGludmVydGNtcCk7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBQVF9HQzoKKyAgICAgIGMgPSBQUklWKHVjcF90eXBlcmFuZ2UpWyhpbnQpY2NbMV0gKiAyXTsKKyAgICAgIFNFVF9UWVBFX09GRlNFVChjKTsKKyAgICAgIGp1bXAgPSBDTVAoU0xKSVRfTEVTU19FUVVBTCBeIGludmVydGNtcCwgdHlwZXJlZywgMCwgU0xKSVRfSU1NLCBQUklWKHVjcF90eXBlcmFuZ2UpWyhpbnQpY2NbMV0gKiAyICsgMV0gLSBjKTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBUX1BDOgorICAgICAganVtcCA9IENNUChTTEpJVF9FUVVBTCBeIGludmVydGNtcCwgdHlwZXJlZywgMCwgU0xKSVRfSU1NLCAoaW50KWNjWzFdIC0gdHlwZW9mZnNldCk7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBQVF9TQzoKKyAgICAgIGNvbXBhcmVzKys7CisgICAgICAvKiBEbyBub3RoaW5nLiAqLworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFRfU1BBQ0U6CisgICAgICBjYXNlIFBUX1BYU1BBQ0U6CisgICAgICBTRVRfQ0hBUl9PRkZTRVQoOSk7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweGQgLSAweDkpOworICAgICAgT1BfRkxBR1MoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX0xFU1NfRVFVQUwpOworCisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDg1IC0gMHg5KTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX09SIHwgU0xKSVRfU0VUX0UsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0VRVUFMKTsKKworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgxODBlIC0gMHg5KTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX09SIHwgU0xKSVRfU0VUX0UsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0VRVUFMKTsKKworICAgICAgU0VUX1RZUEVfT0ZGU0VUKHVjcF9abCk7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgdHlwZXJlZywgMCwgU0xKSVRfSU1NLCB1Y3BfWnMgLSB1Y3BfWmwpOworICAgICAgT1BfRkxBR1MoU0xKSVRfT1IgfCBTTEpJVF9TRVRfRSwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfTEVTU19FUVVBTCk7CisgICAgICBqdW1wID0gSlVNUChTTEpJVF9OT1RfWkVSTyBeIGludmVydGNtcCk7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBQVF9XT1JEOgorICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KShDSEFSX1VOREVSU0NPUkUgLSBjaGFyb2Zmc2V0KSk7CisgICAgICBPUF9GTEFHUyhTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX1VOVVNFRCwgMCwgU0xKSVRfRVFVQUwpOworICAgICAgLyogRmFsbCB0aHJvdWdoLiAqLworCisgICAgICBjYXNlIFBUX0FMTlVNOgorICAgICAgU0VUX1RZUEVfT0ZGU0VUKHVjcF9MbCk7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgdHlwZXJlZywgMCwgU0xKSVRfSU1NLCB1Y3BfTHUgLSB1Y3BfTGwpOworICAgICAgT1BfRkxBR1MoKCpjYyA9PSBQVF9BTE5VTSkgPyBTTEpJVF9NT1YgOiBTTEpJVF9PUiwgVE1QMiwgMCwgKCpjYyA9PSBQVF9BTE5VTSkgPyBTTEpJVF9VTlVTRUQgOiBUTVAyLCAwLCBTTEpJVF9MRVNTX0VRVUFMKTsKKyAgICAgIFNFVF9UWVBFX09GRlNFVCh1Y3BfTmQpOworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9VLCBTTEpJVF9VTlVTRUQsIDAsIHR5cGVyZWcsIDAsIFNMSklUX0lNTSwgdWNwX05vIC0gdWNwX05kKTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX09SIHwgU0xKSVRfU0VUX0UsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0xFU1NfRVFVQUwpOworICAgICAganVtcCA9IEpVTVAoU0xKSVRfTk9UX1pFUk8gXiBpbnZlcnRjbXApOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFRfQ0xJU1Q6CisgICAgICBvdGhlcl9jYXNlcyA9IFBSSVYodWNkX2Nhc2VsZXNzX3NldHMpICsgY2NbMV07CisKKyAgICAgIC8qIEF0IGxlYXN0IHRocmVlIGNoYXJhY3RlcnMgYXJlIHJlcXVpcmVkLgorICAgICAgICAgT3RoZXJ3aXNlIHRoaXMgY2FzZSB3b3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSBub3JtYWwgY29kZSBwYXRoLiAqLworICAgICAgU0xKSVRfQVNTRVJUKG90aGVyX2Nhc2VzWzBdICE9IE5PVEFDSEFSICYmIG90aGVyX2Nhc2VzWzFdICE9IE5PVEFDSEFSICYmIG90aGVyX2Nhc2VzWzJdICE9IE5PVEFDSEFSKTsKKyAgICAgIFNMSklUX0FTU0VSVChvdGhlcl9jYXNlc1swXSA8IG90aGVyX2Nhc2VzWzFdICYmIG90aGVyX2Nhc2VzWzFdIDwgb3RoZXJfY2FzZXNbMl0pOworCisgICAgICAvKiBPcHRpbWl6aW5nIGNoYXJhY3RlciBwYWlycywgaWYgdGhlaXIgZGlmZmVyZW5jZSBpcyBwb3dlciBvZiAyLiAqLworICAgICAgaWYgKGlzX3Bvd2Vyb2YyKG90aGVyX2Nhc2VzWzFdIF4gb3RoZXJfY2FzZXNbMF0pKQorICAgICAgICB7CisgICAgICAgIGlmIChjaGFyb2Zmc2V0ID09IDApCisgICAgICAgICAgT1AyKFNMSklUX09SLCBUTVAyLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIG90aGVyX2Nhc2VzWzFdIF4gb3RoZXJfY2FzZXNbMF0pOworICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgIE9QMihTTEpJVF9BREQsIFRNUDIsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KWNoYXJvZmZzZXQpOworICAgICAgICAgIE9QMihTTEpJVF9PUiwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCBvdGhlcl9jYXNlc1sxXSBeIG90aGVyX2Nhc2VzWzBdKTsKKyAgICAgICAgICB9CisgICAgICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIG90aGVyX2Nhc2VzWzFdKTsKKyAgICAgICAgT1BfRkxBR1MoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX0VRVUFMKTsKKyAgICAgICAgb3RoZXJfY2FzZXMgKz0gMjsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoaXNfcG93ZXJvZjIob3RoZXJfY2FzZXNbMl0gXiBvdGhlcl9jYXNlc1sxXSkpCisgICAgICAgIHsKKyAgICAgICAgaWYgKGNoYXJvZmZzZXQgPT0gMCkKKyAgICAgICAgICBPUDIoU0xKSVRfT1IsIFRNUDIsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgb3RoZXJfY2FzZXNbMl0gXiBvdGhlcl9jYXNlc1sxXSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgT1AyKFNMSklUX0FERCwgVE1QMiwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoc2xqaXRfc3cpY2hhcm9mZnNldCk7CisgICAgICAgICAgT1AyKFNMSklUX09SLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIG90aGVyX2Nhc2VzWzFdIF4gb3RoZXJfY2FzZXNbMF0pOworICAgICAgICAgIH0KKyAgICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgb3RoZXJfY2FzZXNbMl0pOworICAgICAgICBPUF9GTEFHUyhTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX1VOVVNFRCwgMCwgU0xKSVRfRVFVQUwpOworCisgICAgICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdykob3RoZXJfY2FzZXNbMF0gLSBjaGFyb2Zmc2V0KSk7CisgICAgICAgIE9QX0ZMQUdTKFNMSklUX09SIHwgKChvdGhlcl9jYXNlc1szXSA9PSBOT1RBQ0hBUikgPyBTTEpJVF9TRVRfRSA6IDApLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9FUVVBTCk7CisKKyAgICAgICAgb3RoZXJfY2FzZXMgKz0gMzsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdykoKm90aGVyX2Nhc2VzKysgLSBjaGFyb2Zmc2V0KSk7CisgICAgICAgIE9QX0ZMQUdTKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9FUVVBTCk7CisgICAgICAgIH0KKworICAgICAgd2hpbGUgKCpvdGhlcl9jYXNlcyAhPSBOT1RBQ0hBUikKKyAgICAgICAgeworICAgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoc2xqaXRfc3cpKCpvdGhlcl9jYXNlcysrIC0gY2hhcm9mZnNldCkpOworICAgICAgICBPUF9GTEFHUyhTTEpJVF9PUiB8ICgoKm90aGVyX2Nhc2VzID09IE5PVEFDSEFSKSA/IFNMSklUX1NFVF9FIDogMCksIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0VRVUFMKTsKKyAgICAgICAgfQorICAgICAganVtcCA9IEpVTVAoU0xKSVRfTk9UX1pFUk8gXiBpbnZlcnRjbXApOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFRfVUNOQzoKKyAgICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdykoQ0hBUl9ET0xMQVJfU0lHTiAtIGNoYXJvZmZzZXQpKTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9FUVVBTCk7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoc2xqaXRfc3cpKENIQVJfQ09NTUVSQ0lBTF9BVCAtIGNoYXJvZmZzZXQpKTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX09SLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9FUVVBTCk7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoc2xqaXRfc3cpKENIQVJfR1JBVkVfQUNDRU5UIC0gY2hhcm9mZnNldCkpOworICAgICAgT1BfRkxBR1MoU0xKSVRfT1IsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0VRVUFMKTsKKworICAgICAgU0VUX0NIQVJfT0ZGU0VUKDB4YTApOworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9VLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KSgweGQ3ZmYgLSBjaGFyb2Zmc2V0KSk7CisgICAgICBPUF9GTEFHUyhTTEpJVF9PUiwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfTEVTU19FUVVBTCk7CisgICAgICBTRVRfQ0hBUl9PRkZTRVQoMCk7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweGUwMDAgLSAwKTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX09SIHwgU0xKSVRfU0VUX0UsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0dSRUFURVJfRVFVQUwpOworICAgICAganVtcCA9IEpVTVAoU0xKSVRfTk9UX1pFUk8gXiBpbnZlcnRjbXApOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFRfUFhHUkFQSDoKKyAgICAgIC8qIEMgYW5kIFogZ3JvdXBzIGFyZSB0aGUgZmFydGhlc3QgdHdvIGdyb3Vwcy4gKi8KKyAgICAgIFNFVF9UWVBFX09GRlNFVCh1Y3BfTGwpOworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9VLCBTTEpJVF9VTlVTRUQsIDAsIHR5cGVyZWcsIDAsIFNMSklUX0lNTSwgdWNwX1NvIC0gdWNwX0xsKTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9HUkVBVEVSKTsKKworICAgICAganVtcCA9IENNUChTTEpJVF9OT1RfRVFVQUwsIHR5cGVyZWcsIDAsIFNMSklUX0lNTSwgdWNwX0NmIC0gdWNwX0xsKTsKKworICAgICAgLyogSW4gY2FzZSBvZiB1Y3BfQ2YsIHdlIG92ZXJ3cml0ZSB0aGUgcmVzdWx0LiAqLworICAgICAgU0VUX0NIQVJfT0ZGU0VUKDB4MjA2Nik7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDIwNjkgLSAweDIwNjYpOworICAgICAgT1BfRkxBR1MoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX0xFU1NfRVFVQUwpOworCisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDA2MWMgLSAweDIwNjYpOworICAgICAgT1BfRkxBR1MoU0xKSVRfT1IsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0VRVUFMKTsKKworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHgxODBlIC0gMHgyMDY2KTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX09SLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9FUVVBTCk7CisKKyAgICAgIEpVTVBIRVJFKGp1bXApOworICAgICAganVtcCA9IENNUChTTEpJVF9aRVJPIF4gaW52ZXJ0Y21wLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDApOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFRfUFhQUklOVDoKKyAgICAgIC8qIEMgYW5kIFogZ3JvdXBzIGFyZSB0aGUgZmFydGhlc3QgdHdvIGdyb3Vwcy4gKi8KKyAgICAgIFNFVF9UWVBFX09GRlNFVCh1Y3BfTGwpOworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9VLCBTTEpJVF9VTlVTRUQsIDAsIHR5cGVyZWcsIDAsIFNMSklUX0lNTSwgdWNwX1NvIC0gdWNwX0xsKTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9HUkVBVEVSKTsKKworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIHR5cGVyZWcsIDAsIFNMSklUX0lNTSwgdWNwX1pzIC0gdWNwX0xsKTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX0FORCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfTk9UX0VRVUFMKTsKKworICAgICAganVtcCA9IENNUChTTEpJVF9OT1RfRVFVQUwsIHR5cGVyZWcsIDAsIFNMSklUX0lNTSwgdWNwX0NmIC0gdWNwX0xsKTsKKworICAgICAgLyogSW4gY2FzZSBvZiB1Y3BfQ2YsIHdlIG92ZXJ3cml0ZSB0aGUgcmVzdWx0LiAqLworICAgICAgU0VUX0NIQVJfT0ZGU0VUKDB4MjA2Nik7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDIwNjkgLSAweDIwNjYpOworICAgICAgT1BfRkxBR1MoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX0xFU1NfRVFVQUwpOworCisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDA2MWMgLSAweDIwNjYpOworICAgICAgT1BfRkxBR1MoU0xKSVRfT1IsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0VRVUFMKTsKKworICAgICAgSlVNUEhFUkUoanVtcCk7CisgICAgICBqdW1wID0gQ01QKFNMSklUX1pFUk8gXiBpbnZlcnRjbXAsIFRNUDIsIDAsIFNMSklUX0lNTSwgMCk7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBQVF9QWFBVTkNUOgorICAgICAgU0VUX1RZUEVfT0ZGU0VUKHVjcF9TYyk7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgdHlwZXJlZywgMCwgU0xKSVRfSU1NLCB1Y3BfU28gLSB1Y3BfU2MpOworICAgICAgT1BfRkxBR1MoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX0xFU1NfRVFVQUwpOworCisgICAgICBTRVRfQ0hBUl9PRkZTRVQoMCk7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweDdmKTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX0FORCwgVE1QMiwgMCwgVE1QMiwgMCwgU0xKSVRfTEVTU19FUVVBTCk7CisKKyAgICAgIFNFVF9UWVBFX09GRlNFVCh1Y3BfUGMpOworICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9VLCBTTEpJVF9VTlVTRUQsIDAsIHR5cGVyZWcsIDAsIFNMSklUX0lNTSwgdWNwX1BzIC0gdWNwX1BjKTsKKyAgICAgIE9QX0ZMQUdTKFNMSklUX09SIHwgU0xKSVRfU0VUX0UsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0xFU1NfRVFVQUwpOworICAgICAganVtcCA9IEpVTVAoU0xKSVRfTk9UX1pFUk8gXiBpbnZlcnRjbXApOworICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICBTTEpJVF9BU1NFUlRfU1RPUCgpOworICAgICAgYnJlYWs7CisgICAgICB9CisgICAgY2MgKz0gMjsKKyAgICB9CisjZW5kaWYKKworICBpZiAoanVtcCAhPSBOVUxMKQorICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBjb21wYXJlcyA+IDAgPyBsaXN0IDogYmFja3RyYWNrcywganVtcCk7CisgIH0KKworaWYgKGZvdW5kICE9IE5VTEwpCisgIHNldF9qdW1wcyhmb3VuZCwgTEFCRUwoKSk7Cit9CisKKyN1bmRlZiBTRVRfVFlQRV9PRkZTRVQKKyN1bmRlZiBTRVRfQ0hBUl9PRkZTRVQKKworI2VuZGlmCisKK3N0YXRpYyBQQ1JFMl9TUFRSIGNvbXBpbGVfc2ltcGxlX2Fzc2VydGlvbl9tYXRjaGluZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1VDSEFSIHR5cGUsIFBDUkUyX1NQVFIgY2MsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MpCit7CitERUZJTkVfQ09NUElMRVI7CitpbnQgbGVuZ3RoOworc3RydWN0IHNsaml0X2p1bXAgKmp1bXBbNF07CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOworI2VuZGlmIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCitzd2l0Y2godHlwZSkKKyAgeworICBjYXNlIE9QX1NPRDoKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgQVJHVU1FTlRTLCAwKTsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgYmVnaW4pKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9OT1RfRVFVQUwsIFNUUl9QVFIsIDAsIFRNUDEsIDApKTsKKyAgcmV0dXJuIGNjOworCisgIGNhc2UgT1BfU09NOgorICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBBUkdVTUVOVFMsIDApOworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBzdHIpKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9OT1RfRVFVQUwsIFNUUl9QVFIsIDAsIFRNUDEsIDApKTsKKyAgcmV0dXJuIGNjOworCisgIGNhc2UgT1BfTk9UX1dPUkRfQk9VTkRBUlk6CisgIGNhc2UgT1BfV09SRF9CT1VOREFSWToKKyAgYWRkX2p1bXAoY29tcGlsZXIsICZjb21tb24tPndvcmRib3VuZGFyeSwgSlVNUChTTEpJVF9GQVNUX0NBTEwpKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIEpVTVAodHlwZSA9PSBPUF9OT1RfV09SRF9CT1VOREFSWSA/IFNMSklUX05PVF9aRVJPIDogU0xKSVRfWkVSTykpOworICByZXR1cm4gY2M7CisKKyAgY2FzZSBPUF9FT0ROOgorICAvKiBSZXF1aXJlcyByYXRoZXIgY29tcGxleCBjaGVja3MuICovCisgIGp1bXBbMF0gPSBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCk7CisgIGlmIChjb21tb24tPm5sdHlwZSA9PSBOTFRZUEVfRklYRUQgJiYgY29tbW9uLT5uZXdsaW5lID4gMjU1KQorICAgIHsKKyAgICBPUDIoU0xKSVRfQURELCBUTVAyLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygyKSk7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDApKTsKKyAgICBpZiAoY29tbW9uLT5tb2RlID09IFBDUkUyX0pJVF9DT01QTEVURSkKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBUTVAyLCAwLCBTVFJfRU5ELCAwKSk7CisgICAgZWxzZQorICAgICAgeworICAgICAganVtcFsxXSA9IENNUChTTEpJVF9FUVVBTCwgVE1QMiwgMCwgU1RSX0VORCwgMCk7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMiwgMCwgU1RSX0VORCwgMCk7CisgICAgICBPUF9GTEFHUyhTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX1VOVVNFRCwgMCwgU0xKSVRfTEVTUyk7CisgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoY29tbW9uLT5uZXdsaW5lID4+IDgpICYgMHhmZik7CisgICAgICBPUF9GTEFHUyhTTEpJVF9PUiB8IFNMSklUX1NFVF9FLCBUTVAyLCAwLCBUTVAyLCAwLCBTTEpJVF9OT1RfRVFVQUwpOworICAgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIEpVTVAoU0xKSVRfTk9UX0VRVUFMKSk7CisgICAgICBjaGVja19wYXJ0aWFsKGNvbW1vbiwgVFJVRSk7CisgICAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUChTTEpJVF9KVU1QKSk7CisgICAgICBKVU1QSEVSRShqdW1wWzFdKTsKKyAgICAgIH0KKyAgICBPUDEoTU9WX1VDSEFSLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCBJTl9VQ0hBUlMoMSkpOworICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChjb21tb24tPm5ld2xpbmUgPj4gOCkgJiAweGZmKSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9OT1RfRVFVQUwsIFRNUDIsIDAsIFNMSklUX0lNTSwgY29tbW9uLT5uZXdsaW5lICYgMHhmZikpOworICAgIH0KKyAgZWxzZSBpZiAoY29tbW9uLT5ubHR5cGUgPT0gTkxUWVBFX0ZJWEVEKQorICAgIHsKKyAgICBPUDIoU0xKSVRfQURELCBUTVAyLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDApKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX05PVF9FUVVBTCwgVE1QMiwgMCwgU1RSX0VORCwgMCkpOworICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIGNvbW1vbi0+bmV3bGluZSkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCBJTl9VQ0hBUlMoMCkpOworICAgIGp1bXBbMV0gPSBDTVAoU0xKSVRfTk9UX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIENIQVJfQ1IpOworICAgIE9QMihTTEpJVF9BREQsIFRNUDIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDIpKTsKKyAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX1UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMiwgMCwgU1RSX0VORCwgMCk7CisgICAganVtcFsyXSA9IEpVTVAoU0xKSVRfR1JFQVRFUik7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIEpVTVAoU0xKSVRfTEVTUykpOworICAgIC8qIEVxdWFsLiAqLworICAgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygxKSk7CisgICAganVtcFszXSA9IENNUChTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBDSEFSX05MKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUChTTEpJVF9KVU1QKSk7CisKKyAgICBKVU1QSEVSRShqdW1wWzFdKTsKKyAgICBpZiAoY29tbW9uLT5ubHR5cGUgPT0gTkxUWVBFX0FOWUNSTEYpCisgICAgICB7CisgICAgICBPUDIoU0xKSVRfQURELCBUTVAyLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisgICAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX0xFU1MsIFRNUDIsIDAsIFNUUl9FTkQsIDApKTsKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIENIQVJfTkwpKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMSwgU1RSX1BUUiwgMCk7CisgICAgICByZWFkX2NoYXJfcmFuZ2UoY29tbW9uLCBjb21tb24tPm5sbWluLCBjb21tb24tPm5sbWF4LCBUUlVFKTsKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKSk7CisgICAgICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+YW55bmV3bGluZSwgSlVNUChTTEpJVF9GQVNUX0NBTEwpKTsKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBKVU1QKFNMSklUX1pFUk8pKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBMT0NBTFMxKTsKKyAgICAgIH0KKyAgICBKVU1QSEVSRShqdW1wWzJdKTsKKyAgICBKVU1QSEVSRShqdW1wWzNdKTsKKyAgICB9CisgIEpVTVBIRVJFKGp1bXBbMF0pOworICBjaGVja19wYXJ0aWFsKGNvbW1vbiwgRkFMU0UpOworICByZXR1cm4gY2M7CisKKyAgY2FzZSBPUF9FT0Q6CisgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTEVTUywgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCkpOworICBjaGVja19wYXJ0aWFsKGNvbW1vbiwgRkFMU0UpOworICByZXR1cm4gY2M7CisKKyAgY2FzZSBPUF9DSVJDOgorICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBBUkdVTUVOVFMsIDApOworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBiZWdpbikpOworICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX0dSRUFURVIsIFNUUl9QVFIsIDAsIFRNUDEsIDApKTsKKyAgT1AyKFNMSklUX0lBTkQgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBvcHRpb25zKSwgU0xKSVRfSU1NLCBQQ1JFMl9OT1RCT0wpOworICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUChTTEpJVF9OT1RfWkVSTykpOworICByZXR1cm4gY2M7CisKKyAgY2FzZSBPUF9DSVJDTToKKyAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgQVJHVU1FTlRTLCAwKTsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAyKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgYmVnaW4pKTsKKyAganVtcFsxXSA9IENNUChTTEpJVF9HUkVBVEVSLCBTVFJfUFRSLCAwLCBUTVAxLCAwKTsKKyAgT1AyKFNMSklUX0lBTkQgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBvcHRpb25zKSwgU0xKSVRfSU1NLCBQQ1JFMl9OT1RCT0wpOworICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUChTTEpJVF9OT1RfWkVSTykpOworICBqdW1wWzBdID0gSlVNUChTTEpJVF9KVU1QKTsKKyAgSlVNUEhFUkUoanVtcFsxXSk7CisKKyAgaWYgKCFjb21tb24tPmFsdF9jaXJjdW1mbGV4KQorICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCkpOworCisgIGlmIChjb21tb24tPm5sdHlwZSA9PSBOTFRZUEVfRklYRUQgJiYgY29tbW9uLT5uZXdsaW5lID4gMjU1KQorICAgIHsKKyAgICBPUDIoU0xKSVRfU1VCLCBUTVAyLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygyKSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9MRVNTLCBUTVAyLCAwLCBUTVAxLCAwKSk7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKC0yKSk7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKC0xKSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgKGNvbW1vbi0+bmV3bGluZSA+PiA4KSAmIDB4ZmYpKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX05PVF9FUVVBTCwgVE1QMiwgMCwgU0xKSVRfSU1NLCBjb21tb24tPm5ld2xpbmUgJiAweGZmKSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgIHNraXBfY2hhcl9iYWNrKGNvbW1vbik7CisgICAgcmVhZF9jaGFyX3JhbmdlKGNvbW1vbiwgY29tbW9uLT5ubG1pbiwgY29tbW9uLT5ubG1heCwgVFJVRSk7CisgICAgY2hlY2tfbmV3bGluZWNoYXIoY29tbW9uLCBjb21tb24tPm5sdHlwZSwgYmFja3RyYWNrcywgRkFMU0UpOworICAgIH0KKyAgSlVNUEhFUkUoanVtcFswXSk7CisgIHJldHVybiBjYzsKKworICBjYXNlIE9QX0RPTEw6CisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIEFSR1VNRU5UUywgMCk7CisgIE9QMihTTEpJVF9JQU5EIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgU0xKSVRfTUVNMShUTVAyKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgb3B0aW9ucyksIFNMSklUX0lNTSwgUENSRTJfTk9URU9MKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIEpVTVAoU0xKSVRfTk9UX1pFUk8pKTsKKworICBpZiAoIWNvbW1vbi0+ZW5kb25seSkKKyAgICBjb21waWxlX3NpbXBsZV9hc3NlcnRpb25fbWF0Y2hpbmdwYXRoKGNvbW1vbiwgT1BfRU9ETiwgY2MsIGJhY2t0cmFja3MpOworICBlbHNlCisgICAgeworICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTEVTUywgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCkpOworICAgIGNoZWNrX3BhcnRpYWwoY29tbW9uLCBGQUxTRSk7CisgICAgfQorICByZXR1cm4gY2M7CisKKyAgY2FzZSBPUF9ET0xMTToKKyAganVtcFsxXSA9IENNUChTTEpJVF9MRVNTLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKTsKKyAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgQVJHVU1FTlRTLCAwKTsKKyAgT1AyKFNMSklUX0lBTkQgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBvcHRpb25zKSwgU0xKSVRfSU1NLCBQQ1JFMl9OT1RFT0wpOworICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUChTTEpJVF9OT1RfWkVSTykpOworICBjaGVja19wYXJ0aWFsKGNvbW1vbiwgRkFMU0UpOworICBqdW1wWzBdID0gSlVNUChTTEpJVF9KVU1QKTsKKyAgSlVNUEhFUkUoanVtcFsxXSk7CisKKyAgaWYgKGNvbW1vbi0+bmx0eXBlID09IE5MVFlQRV9GSVhFRCAmJiBjb21tb24tPm5ld2xpbmUgPiAyNTUpCisgICAgeworICAgIE9QMihTTEpJVF9BREQsIFRNUDIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDIpKTsKKyAgICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCBJTl9VQ0hBUlMoMCkpOworICAgIGlmIChjb21tb24tPm1vZGUgPT0gUENSRTJfSklUX0NPTVBMRVRFKQorICAgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9HUkVBVEVSLCBUTVAyLCAwLCBTVFJfRU5ELCAwKSk7CisgICAgZWxzZQorICAgICAgeworICAgICAganVtcFsxXSA9IENNUChTTEpJVF9MRVNTX0VRVUFMLCBUTVAyLCAwLCBTVFJfRU5ELCAwKTsKKyAgICAgIC8qIFNUUl9QVFIgPSBTVFJfRU5EIC0gSU5fVUNIQVJTKDEpICovCisgICAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX05PVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoY29tbW9uLT5uZXdsaW5lID4+IDgpICYgMHhmZikpOworICAgICAgY2hlY2tfcGFydGlhbChjb21tb24sIFRSVUUpOworICAgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIEpVTVAoU0xKSVRfSlVNUCkpOworICAgICAgSlVNUEhFUkUoanVtcFsxXSk7CisgICAgICB9CisKKyAgICBPUDEoTU9WX1VDSEFSLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCBJTl9VQ0hBUlMoMSkpOworICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChjb21tb24tPm5ld2xpbmUgPj4gOCkgJiAweGZmKSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9OT1RfRVFVQUwsIFRNUDIsIDAsIFNMSklUX0lNTSwgY29tbW9uLT5uZXdsaW5lICYgMHhmZikpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBwZWVrX2NoYXIoY29tbW9uLCBjb21tb24tPm5sbWF4KTsKKyAgICBjaGVja19uZXdsaW5lY2hhcihjb21tb24sIGNvbW1vbi0+bmx0eXBlLCBiYWNrdHJhY2tzLCBGQUxTRSk7CisgICAgfQorICBKVU1QSEVSRShqdW1wWzBdKTsKKyAgcmV0dXJuIGNjOworCisgIGNhc2UgT1BfUkVWRVJTRToKKyAgbGVuZ3RoID0gR0VUKGNjLCAwKTsKKyAgaWYgKGxlbmd0aCA9PSAwKQorICAgIHJldHVybiBjYyArIExJTktfU0laRTsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgQVJHVU1FTlRTLCAwKTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgaWYgKGNvbW1vbi0+dXRmKQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAzLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBiZWdpbikpOworICAgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX0lNTSwgbGVuZ3RoKTsKKyAgICBsYWJlbCA9IExBQkVMKCk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9MRVNTX0VRVUFMLCBTVFJfUFRSLCAwLCBUTVAzLCAwKSk7CisgICAgc2tpcF9jaGFyX2JhY2soY29tbW9uKTsKKyAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIFRNUDIsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgMSk7CisgICAgSlVNUFRPKFNMSklUX05PVF9aRVJPLCBsYWJlbCk7CisgICAgfQorICBlbHNlCisjZW5kaWYKKyAgICB7CisgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgYmVnaW4pKTsKKyAgICBPUDIoU0xKSVRfU1VCLCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUyhsZW5ndGgpKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX0xFU1MsIFNUUl9QVFIsIDAsIFRNUDEsIDApKTsKKyAgICB9CisgIGNoZWNrX3N0YXJ0X3VzZWRfcHRyKGNvbW1vbik7CisgIHJldHVybiBjYyArIExJTktfU0laRTsKKyAgfQorU0xKSVRfQVNTRVJUX1NUT1AoKTsKK3JldHVybiBjYzsKK30KKworc3RhdGljIFBDUkUyX1NQVFIgY29tcGlsZV9jaGFyMV9tYXRjaGluZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1VDSEFSIHR5cGUsIFBDUkUyX1NQVFIgY2MsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MsIEJPT0wgY2hlY2tfc3RyX3B0cikKK3sKK0RFRklORV9DT01QSUxFUjsKK2ludCBsZW5ndGg7Cit1bnNpZ25lZCBpbnQgYywgb2MsIGJpdDsKK2NvbXBhcmVfY29udGV4dCBjb250ZXh0Oworc3RydWN0IHNsaml0X2p1bXAgKmp1bXBbM107CitqdW1wX2xpc3QgKmVuZF9saXN0OworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorc3RydWN0IHNsaml0X2xhYmVsICpsYWJlbDsKK1BDUkUyX1VDSEFSIHByb3BkYXRhWzVdOworI2VuZGlmIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCitzd2l0Y2godHlwZSkKKyAgeworICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgY2FzZSBPUF9ESUdJVDoKKyAgLyogRGlnaXRzIGFyZSB1c3VhbGx5IDAtOSwgc28gaXQgaXMgd29ydGggdG8gb3B0aW1pemUgdGhlbS4gKi8KKyAgaWYgKGNoZWNrX3N0cl9wdHIpCisgICAgZGV0ZWN0X3BhcnRpYWxfbWF0Y2goY29tbW9uLCBiYWNrdHJhY2tzKTsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICBpZiAoY29tbW9uLT51dGYgJiYgaXNfY2hhcjdfYml0c2V0KChjb25zdCBzbGppdF91YiopY29tbW9uLT5jdHlwZXMgLSBjYml0X2xlbmd0aCArIGNiaXRfZGlnaXQsIEZBTFNFKSkKKyAgICByZWFkX2NoYXI3X3R5cGUoY29tbW9uLCB0eXBlID09IE9QX05PVF9ESUdJVCk7CisgIGVsc2UKKyNlbmRpZgorICAgIHJlYWRfY2hhcjhfdHlwZShjb21tb24sIHR5cGUgPT0gT1BfTk9UX0RJR0lUKTsKKyAgICAvKiBGbGlwIHRoZSBzdGFydGluZyBiaXQgaW4gdGhlIG5lZ2F0aXZlIGNhc2UuICovCisgIE9QMihTTEpJVF9BTkQgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIGN0eXBlX2RpZ2l0KTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIEpVTVAodHlwZSA9PSBPUF9ESUdJVCA/IFNMSklUX1pFUk8gOiBTTEpJVF9OT1RfWkVSTykpOworICByZXR1cm4gY2M7CisKKyAgY2FzZSBPUF9OT1RfV0hJVEVTUEFDRToKKyAgY2FzZSBPUF9XSElURVNQQUNFOgorICBpZiAoY2hlY2tfc3RyX3B0cikKKyAgICBkZXRlY3RfcGFydGlhbF9tYXRjaChjb21tb24sIGJhY2t0cmFja3MpOworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgIGlmIChjb21tb24tPnV0ZiAmJiBpc19jaGFyN19iaXRzZXQoKGNvbnN0IHNsaml0X3ViKiljb21tb24tPmN0eXBlcyAtIGNiaXRfbGVuZ3RoICsgY2JpdF9zcGFjZSwgRkFMU0UpKQorICAgIHJlYWRfY2hhcjdfdHlwZShjb21tb24sIHR5cGUgPT0gT1BfTk9UX1dISVRFU1BBQ0UpOworICBlbHNlCisjZW5kaWYKKyAgICByZWFkX2NoYXI4X3R5cGUoY29tbW9uLCB0eXBlID09IE9QX05PVF9XSElURVNQQUNFKTsKKyAgT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgY3R5cGVfc3BhY2UpOworICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUCh0eXBlID09IE9QX1dISVRFU1BBQ0UgPyBTTEpJVF9aRVJPIDogU0xKSVRfTk9UX1pFUk8pKTsKKyAgcmV0dXJuIGNjOworCisgIGNhc2UgT1BfTk9UX1dPUkRDSEFSOgorICBjYXNlIE9QX1dPUkRDSEFSOgorICBpZiAoY2hlY2tfc3RyX3B0cikKKyAgICBkZXRlY3RfcGFydGlhbF9tYXRjaChjb21tb24sIGJhY2t0cmFja3MpOworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgIGlmIChjb21tb24tPnV0ZiAmJiBpc19jaGFyN19iaXRzZXQoKGNvbnN0IHNsaml0X3ViKiljb21tb24tPmN0eXBlcyAtIGNiaXRfbGVuZ3RoICsgY2JpdF93b3JkLCBGQUxTRSkpCisgICAgcmVhZF9jaGFyN190eXBlKGNvbW1vbiwgdHlwZSA9PSBPUF9OT1RfV09SRENIQVIpOworICBlbHNlCisjZW5kaWYKKyAgICByZWFkX2NoYXI4X3R5cGUoY29tbW9uLCB0eXBlID09IE9QX05PVF9XT1JEQ0hBUik7CisgIE9QMihTTEpJVF9BTkQgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIGN0eXBlX3dvcmQpOworICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgSlVNUCh0eXBlID09IE9QX1dPUkRDSEFSID8gU0xKSVRfWkVSTyA6IFNMSklUX05PVF9aRVJPKSk7CisgIHJldHVybiBjYzsKKworICBjYXNlIE9QX0FOWToKKyAgaWYgKGNoZWNrX3N0cl9wdHIpCisgICAgZGV0ZWN0X3BhcnRpYWxfbWF0Y2goY29tbW9uLCBiYWNrdHJhY2tzKTsKKyAgcmVhZF9jaGFyX3JhbmdlKGNvbW1vbiwgY29tbW9uLT5ubG1pbiwgY29tbW9uLT5ubG1heCwgVFJVRSk7CisgIGlmIChjb21tb24tPm5sdHlwZSA9PSBOTFRZUEVfRklYRUQgJiYgY29tbW9uLT5uZXdsaW5lID4gMjU1KQorICAgIHsKKyAgICBqdW1wWzBdID0gQ01QKFNMSklUX05PVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoY29tbW9uLT5uZXdsaW5lID4+IDgpICYgMHhmZik7CisgICAgZW5kX2xpc3QgPSBOVUxMOworICAgIGlmIChjb21tb24tPm1vZGUgIT0gUENSRTJfSklUX1BBUlRJQUxfSEFSRCkKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCAmZW5kX2xpc3QsIENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKSk7CisgICAgZWxzZQorICAgICAgY2hlY2tfc3RyX2VuZChjb21tb24sICZlbmRfbGlzdCk7CisKKyAgICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUUl9QVFIpLCAwKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIGNvbW1vbi0+bmV3bGluZSAmIDB4ZmYpKTsKKyAgICBzZXRfanVtcHMoZW5kX2xpc3QsIExBQkVMKCkpOworICAgIEpVTVBIRVJFKGp1bXBbMF0pOworICAgIH0KKyAgZWxzZQorICAgIGNoZWNrX25ld2xpbmVjaGFyKGNvbW1vbiwgY29tbW9uLT5ubHR5cGUsIGJhY2t0cmFja3MsIFRSVUUpOworICByZXR1cm4gY2M7CisKKyAgY2FzZSBPUF9BTExBTlk6CisgIGlmIChjaGVja19zdHJfcHRyKQorICAgIGRldGVjdF9wYXJ0aWFsX21hdGNoKGNvbW1vbiwgYmFja3RyYWNrcyk7CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDMyCisgIGlmIChjb21tb24tPnV0ZikKKyAgICB7CisgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgMCk7CisgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4IHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgorI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgICAganVtcFswXSA9IENNUChTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4YzApOworICAgIE9QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMSksIChzbGppdF9zdylQUklWKHV0ZjhfdGFibGU0KSAtIDB4YzApOworICAgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CisgICAganVtcFswXSA9IENNUChTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ZDgwMCk7CisgICAgT1AyKFNMSklUX0FORCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAweGZjMDApOworICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4ZDgwMCk7CisgICAgT1BfRkxBR1MoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9VTlVTRUQsIDAsIFNMSklUX0VRVUFMKTsKKyAgICBPUDIoU0xKSVRfU0hMLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDEpOworICAgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworI2VuZGlmCisgICAgSlVNUEhFUkUoanVtcFswXSk7CisjZW5kaWYgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIID09IFs4fDE2XSAqLworICAgIHJldHVybiBjYzsKKyAgICB9CisjZW5kaWYKKyAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICByZXR1cm4gY2M7CisKKyAgY2FzZSBPUF9BTllCWVRFOgorICBpZiAoY2hlY2tfc3RyX3B0cikKKyAgICBkZXRlY3RfcGFydGlhbF9tYXRjaChjb21tb24sIGJhY2t0cmFja3MpOworICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisgIHJldHVybiBjYzsKKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICBjYXNlIE9QX05PVFBST1A6CisgIGNhc2UgT1BfUFJPUDoKKyAgcHJvcGRhdGFbMF0gPSBYQ0xfSEFTUFJPUDsKKyAgcHJvcGRhdGFbMV0gPSB0eXBlID09IE9QX05PVFBST1AgPyBYQ0xfTk9UUFJPUCA6IFhDTF9QUk9QOworICBwcm9wZGF0YVsyXSA9IGNjWzBdOworICBwcm9wZGF0YVszXSA9IGNjWzFdOworICBwcm9wZGF0YVs0XSA9IFhDTF9FTkQ7CisgIGlmIChjaGVja19zdHJfcHRyKQorICAgIGRldGVjdF9wYXJ0aWFsX21hdGNoKGNvbW1vbiwgYmFja3RyYWNrcyk7CisgIGNvbXBpbGVfeGNsYXNzX21hdGNoaW5ncGF0aChjb21tb24sIHByb3BkYXRhLCBiYWNrdHJhY2tzKTsKKyAgcmV0dXJuIGNjICsgMjsKKyNlbmRpZgorCisgIGNhc2UgT1BfQU5ZTkw6CisgIGlmIChjaGVja19zdHJfcHRyKQorICAgIGRldGVjdF9wYXJ0aWFsX21hdGNoKGNvbW1vbiwgYmFja3RyYWNrcyk7CisgIHJlYWRfY2hhcl9yYW5nZShjb21tb24sIGNvbW1vbi0+YnNyX25sbWluLCBjb21tb24tPmJzcl9ubG1heCwgRkFMU0UpOworICBqdW1wWzBdID0gQ01QKFNMSklUX05PVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBDSEFSX0NSKTsKKyAgLyogV2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgc29mdCBwYXJ0aWFsIG1hdGNoaW5nIGNhc2UuICovCisgIGVuZF9saXN0ID0gTlVMTDsKKyAgaWYgKGNvbW1vbi0+bW9kZSAhPSBQQ1JFMl9KSVRfUEFSVElBTF9IQVJEKQorICAgIGFkZF9qdW1wKGNvbXBpbGVyLCAmZW5kX2xpc3QsIENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKSk7CisgIGVsc2UKKyAgICBjaGVja19zdHJfZW5kKGNvbW1vbiwgJmVuZF9saXN0KTsKKyAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgMCk7CisgIGp1bXBbMV0gPSBDTVAoU0xKSVRfTk9UX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIENIQVJfTkwpOworICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisgIGp1bXBbMl0gPSBKVU1QKFNMSklUX0pVTVApOworICBKVU1QSEVSRShqdW1wWzBdKTsKKyAgY2hlY2tfbmV3bGluZWNoYXIoY29tbW9uLCBjb21tb24tPmJzcl9ubHR5cGUsIGJhY2t0cmFja3MsIEZBTFNFKTsKKyAgc2V0X2p1bXBzKGVuZF9saXN0LCBMQUJFTCgpKTsKKyAgSlVNUEhFUkUoanVtcFsxXSk7CisgIEpVTVBIRVJFKGp1bXBbMl0pOworICByZXR1cm4gY2M7CisKKyAgY2FzZSBPUF9OT1RfSFNQQUNFOgorICBjYXNlIE9QX0hTUEFDRToKKyAgaWYgKGNoZWNrX3N0cl9wdHIpCisgICAgZGV0ZWN0X3BhcnRpYWxfbWF0Y2goY29tbW9uLCBiYWNrdHJhY2tzKTsKKyAgcmVhZF9jaGFyX3JhbmdlKGNvbW1vbiwgMHg5LCAweDMwMDAsIHR5cGUgPT0gT1BfTk9UX0hTUEFDRSk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5oc3BhY2UsIEpVTVAoU0xKSVRfRkFTVF9DQUxMKSk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBKVU1QKHR5cGUgPT0gT1BfTk9UX0hTUEFDRSA/IFNMSklUX05PVF9aRVJPIDogU0xKSVRfWkVSTykpOworICByZXR1cm4gY2M7CisKKyAgY2FzZSBPUF9OT1RfVlNQQUNFOgorICBjYXNlIE9QX1ZTUEFDRToKKyAgaWYgKGNoZWNrX3N0cl9wdHIpCisgICAgZGV0ZWN0X3BhcnRpYWxfbWF0Y2goY29tbW9uLCBiYWNrdHJhY2tzKTsKKyAgcmVhZF9jaGFyX3JhbmdlKGNvbW1vbiwgMHhhLCAweDIwMjksIHR5cGUgPT0gT1BfTk9UX1ZTUEFDRSk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT52c3BhY2UsIEpVTVAoU0xKSVRfRkFTVF9DQUxMKSk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBKVU1QKHR5cGUgPT0gT1BfTk9UX1ZTUEFDRSA/IFNMSklUX05PVF9aRVJPIDogU0xKSVRfWkVSTykpOworICByZXR1cm4gY2M7CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgY2FzZSBPUF9FWFRVTkk6CisgIGlmIChjaGVja19zdHJfcHRyKQorICAgIGRldGVjdF9wYXJ0aWFsX21hdGNoKGNvbW1vbiwgYmFja3RyYWNrcyk7CisgIHJlYWRfY2hhcihjb21tb24pOworICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+Z2V0dWNkLCBKVU1QKFNMSklUX0ZBU1RfQ0FMTCkpOworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9JTU0sIChzbGppdF9zdylQUklWKHVjZF9yZWNvcmRzKSArIFNMSklUX09GRlNFVE9GKHVjZF9yZWNvcmQsIGdicHJvcCkpOworICAvKiBPcHRpbWl6ZSByZWdpc3RlciBhbGxvY2F0aW9uOiB1c2UgYSByZWFsIHJlZ2lzdGVyLiAqLworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMCwgU1RBQ0tfVE9QLCAwKTsKKyAgT1AxKFNMSklUX01PVl9VQiwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0yKFRNUDEsIFRNUDIpLCAzKTsKKworICBsYWJlbCA9IExBQkVMKCk7CisgIGp1bXBbMF0gPSBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCk7CisgIE9QMShTTEpJVF9NT1YsIFRNUDMsIDAsIFNUUl9QVFIsIDApOworICByZWFkX2NoYXIoY29tbW9uKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsICZjb21tb24tPmdldHVjZCwgSlVNUChTTEpJVF9GQVNUX0NBTEwpKTsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfSU1NLCAoc2xqaXRfc3cpUFJJVih1Y2RfcmVjb3JkcykgKyBTTEpJVF9PRkZTRVRPRih1Y2RfcmVjb3JkLCBnYnByb3ApKTsKKyAgT1AxKFNMSklUX01PVl9VQiwgVE1QMiwgMCwgU0xKSVRfTUVNMihUTVAxLCBUTVAyKSwgMyk7CisKKyAgT1AyKFNMSklUX1NITCwgU1RBQ0tfVE9QLCAwLCBTVEFDS19UT1AsIDAsIFNMSklUX0lNTSwgMik7CisgIE9QMShTTEpJVF9NT1ZfVUksIFRNUDEsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgKHNsaml0X3N3KVBSSVYodWNwX2didGFibGUpKTsKKyAgT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBUTVAyLCAwKTsKKyAgT1AyKFNMSklUX1NITCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAxLCBUTVAyLCAwKTsKKyAgT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDEsIDAsIFRNUDIsIDApOworICBKVU1QVE8oU0xKSVRfTk9UX1pFUk8sIGxhYmVsKTsKKworICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBUTVAzLCAwKTsKKyAgSlVNUEhFUkUoanVtcFswXSk7CisgIE9QMShTTEpJVF9NT1YsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIExPQ0FMUzApOworCisgIGlmIChjb21tb24tPm1vZGUgPT0gUENSRTJfSklUX1BBUlRJQUxfSEFSRCkKKyAgICB7CisgICAganVtcFswXSA9IENNUChTTEpJVF9MRVNTLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKTsKKyAgICAvKiBTaW5jZSB3ZSBzdWNjZXNzZnVsbHkgcmVhZCBhIGNoYXIgYWJvdmUsIHBhcnRpYWwgbWF0Y2hpbmcgbXVzdCBvY2N1cmUuICovCisgICAgY2hlY2tfcGFydGlhbChjb21tb24sIFRSVUUpOworICAgIEpVTVBIRVJFKGp1bXBbMF0pOworICAgIH0KKyAgcmV0dXJuIGNjOworI2VuZGlmCisKKyAgY2FzZSBPUF9DSEFSOgorICBjYXNlIE9QX0NIQVJJOgorICBsZW5ndGggPSAxOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICBpZiAoY29tbW9uLT51dGYgJiYgSEFTX0VYVFJBTEVOKCpjYykpIGxlbmd0aCArPSBHRVRfRVhUUkFMRU4oKmNjKTsKKyNlbmRpZgorICBpZiAoY29tbW9uLT5tb2RlID09IFBDUkUyX0pJVF9DT01QTEVURSAmJiBjaGVja19zdHJfcHRyCisgICAgICAmJiAodHlwZSA9PSBPUF9DSEFSIHx8ICFjaGFyX2hhc19vdGhlcmNhc2UoY29tbW9uLCBjYykgfHwgY2hhcl9nZXRfb3RoZXJjYXNlX2JpdChjb21tb24sIGNjKSAhPSAwKSkKKyAgICB7CisgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMobGVuZ3RoKSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9HUkVBVEVSLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKSk7CisKKyAgICBjb250ZXh0Lmxlbmd0aCA9IElOX1VDSEFSUyhsZW5ndGgpOworICAgIGNvbnRleHQuc291cmNlcmVnID0gLTE7CisjaWYgZGVmaW5lZCBTTEpJVF9VTkFMSUdORUQgJiYgU0xKSVRfVU5BTElHTkVECisgICAgY29udGV4dC51Y2hhcnB0ciA9IDA7CisjZW5kaWYKKyAgICByZXR1cm4gYnl0ZV9zZXF1ZW5jZV9jb21wYXJlKGNvbW1vbiwgdHlwZSA9PSBPUF9DSEFSSSwgY2MsICZjb250ZXh0LCBiYWNrdHJhY2tzKTsKKyAgICB9CisKKyAgaWYgKGNoZWNrX3N0cl9wdHIpCisgICAgZGV0ZWN0X3BhcnRpYWxfbWF0Y2goY29tbW9uLCBiYWNrdHJhY2tzKTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgaWYgKGNvbW1vbi0+dXRmKQorICAgIHsKKyAgICBHRVRDSEFSKGMsIGNjKTsKKyAgICB9CisgIGVsc2UKKyNlbmRpZgorICAgIGMgPSAqY2M7CisKKyAgaWYgKHR5cGUgPT0gT1BfQ0hBUiB8fCAhY2hhcl9oYXNfb3RoZXJjYXNlKGNvbW1vbiwgY2MpKQorICAgIHsKKyAgICByZWFkX2NoYXJfcmFuZ2UoY29tbW9uLCBjLCBjLCBGQUxTRSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgYykpOworICAgIHJldHVybiBjYyArIGxlbmd0aDsKKyAgICB9CisgIG9jID0gY2hhcl9vdGhlcmNhc2UoY29tbW9uLCBjKTsKKyAgcmVhZF9jaGFyX3JhbmdlKGNvbW1vbiwgYyA8IG9jID8gYyA6IG9jLCBjID4gb2MgPyBjIDogb2MsIEZBTFNFKTsKKyAgYml0ID0gYyBeIG9jOworICBpZiAoaXNfcG93ZXJvZjIoYml0KSkKKyAgICB7CisgICAgT1AyKFNMSklUX09SLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIGJpdCk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgYyB8IGJpdCkpOworICAgIHJldHVybiBjYyArIGxlbmd0aDsKKyAgICB9CisgIGp1bXBbMF0gPSBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgYyk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIG9jKSk7CisgIEpVTVBIRVJFKGp1bXBbMF0pOworICByZXR1cm4gY2MgKyBsZW5ndGg7CisKKyAgY2FzZSBPUF9OT1Q6CisgIGNhc2UgT1BfTk9USToKKyAgaWYgKGNoZWNrX3N0cl9wdHIpCisgICAgZGV0ZWN0X3BhcnRpYWxfbWF0Y2goY29tbW9uLCBiYWNrdHJhY2tzKTsKKworICBsZW5ndGggPSAxOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICBpZiAoY29tbW9uLT51dGYpCisgICAgeworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgICAgYyA9ICpjYzsKKyAgICBpZiAoYyA8IDEyOCkKKyAgICAgIHsKKyAgICAgIE9QMShTTEpJVF9NT1ZfVUIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIDApOworICAgICAgaWYgKHR5cGUgPT0gT1BfTk9UIHx8ICFjaGFyX2hhc19vdGhlcmNhc2UoY29tbW9uLCBjYykpCisgICAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgYykpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIC8qIFNpbmNlIFVURjggY29kZSBwYWdlIGlzIGZpeGVkLCB3ZSBrbm93IHRoYXQgYyBpcyBpbiBbYS16XSBvciBbQS1aXSByYW5nZS4gKi8KKyAgICAgICAgT1AyKFNMSklUX09SLCBUTVAyLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4MjApOworICAgICAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX0VRVUFMLCBUTVAyLCAwLCBTTEpJVF9JTU0sIGMgfCAweDIwKSk7CisgICAgICAgIH0KKyAgICAgIC8qIFNraXAgdGhlIHZhcmlhYmxlLWxlbmd0aCBjaGFyYWN0ZXIuICovCisgICAgICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisgICAgICBqdW1wWzBdID0gQ01QKFNMSklUX0xFU1MsIFRNUDEsIDAsIFNMSklUX0lNTSwgMHhjMCk7CisgICAgICBPUDEoTU9WX1VDSEFSLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpUFJJVih1dGY4X3RhYmxlNCkgLSAweGMwKTsKKyAgICAgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworICAgICAgSlVNUEhFUkUoanVtcFswXSk7CisgICAgICByZXR1cm4gY2MgKyAxOworICAgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOCAqLworICAgICAgeworICAgICAgR0VUQ0hBUkxFTihjLCBjYywgbGVuZ3RoKTsKKyAgICAgIH0KKyAgICB9CisgIGVsc2UKKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKyAgICBjID0gKmNjOworCisgIGlmICh0eXBlID09IE9QX05PVCB8fCAhY2hhcl9oYXNfb3RoZXJjYXNlKGNvbW1vbiwgY2MpKQorICAgIHsKKyAgICByZWFkX2NoYXJfcmFuZ2UoY29tbW9uLCBjLCBjLCBUUlVFKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIGMpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgb2MgPSBjaGFyX290aGVyY2FzZShjb21tb24sIGMpOworICAgIHJlYWRfY2hhcl9yYW5nZShjb21tb24sIGMgPCBvYyA/IGMgOiBvYywgYyA+IG9jID8gYyA6IG9jLCBUUlVFKTsKKyAgICBiaXQgPSBjIF4gb2M7CisgICAgaWYgKGlzX3Bvd2Vyb2YyKGJpdCkpCisgICAgICB7CisgICAgICBPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgYml0KTsKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgYyB8IGJpdCkpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgYykpOworICAgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBvYykpOworICAgICAgfQorICAgIH0KKyAgcmV0dXJuIGNjICsgbGVuZ3RoOworCisgIGNhc2UgT1BfQ0xBU1M6CisgIGNhc2UgT1BfTkNMQVNTOgorICBpZiAoY2hlY2tfc3RyX3B0cikKKyAgICBkZXRlY3RfcGFydGlhbF9tYXRjaChjb21tb24sIGJhY2t0cmFja3MpOworCisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyAgYml0ID0gKGNvbW1vbi0+dXRmICYmIGlzX2NoYXI3X2JpdHNldCgoY29uc3Qgc2xqaXRfdWIgKiljYywgdHlwZSA9PSBPUF9OQ0xBU1MpKSA/IDEyNyA6IDI1NTsKKyAgcmVhZF9jaGFyX3JhbmdlKGNvbW1vbiwgMCwgYml0LCB0eXBlID09IE9QX05DTEFTUyk7CisjZWxzZQorICByZWFkX2NoYXJfcmFuZ2UoY29tbW9uLCAwLCAyNTUsIHR5cGUgPT0gT1BfTkNMQVNTKTsKKyNlbmRpZgorCisgIGlmIChjaGVja19jbGFzc19yYW5nZXMoY29tbW9uLCAoY29uc3Qgc2xqaXRfdWIgKiljYywgdHlwZSA9PSBPUF9OQ0xBU1MsIEZBTFNFLCBiYWNrdHJhY2tzKSkKKyAgICByZXR1cm4gY2MgKyAzMiAvIHNpemVvZihQQ1JFMl9VQ0hBUik7CisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICBqdW1wWzBdID0gTlVMTDsKKyAgaWYgKGNvbW1vbi0+dXRmKQorICAgIHsKKyAgICBqdW1wWzBdID0gQ01QKFNMSklUX0dSRUFURVIsIFRNUDEsIDAsIFNMSklUX0lNTSwgYml0KTsKKyAgICBpZiAodHlwZSA9PSBPUF9DTEFTUykKKyAgICAgIHsKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBqdW1wWzBdKTsKKyAgICAgIGp1bXBbMF0gPSBOVUxMOworICAgICAgfQorICAgIH0KKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgIGp1bXBbMF0gPSBDTVAoU0xKSVRfR1JFQVRFUiwgVE1QMSwgMCwgU0xKSVRfSU1NLCAyNTUpOworICBpZiAodHlwZSA9PSBPUF9DTEFTUykKKyAgICB7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIGp1bXBbMF0pOworICAgIGp1bXBbMF0gPSBOVUxMOworICAgIH0KKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDggKi8KKworICBPUDIoU0xKSVRfQU5ELCBUTVAyLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDB4Nyk7CisgIE9QMihTTEpJVF9MU0hSLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDMpOworICBPUDEoU0xKSVRfTU9WX1VCLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoc2xqaXRfc3cpY2MpOworICBPUDIoU0xKSVRfU0hMLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDEsIFRNUDIsIDApOworICBPUDIoU0xKSVRfQU5EIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMSwgMCwgVE1QMiwgMCk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBKVU1QKFNMSklUX1pFUk8pKTsKKworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFIHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgIGlmIChqdW1wWzBdICE9IE5VTEwpCisgICAgSlVNUEhFUkUoanVtcFswXSk7CisjZW5kaWYKKyAgcmV0dXJuIGNjICsgMzIgLyBzaXplb2YoUENSRTJfVUNIQVIpOworCisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgfHwgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2IHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAzMgorICBjYXNlIE9QX1hDTEFTUzoKKyAgaWYgKGNoZWNrX3N0cl9wdHIpCisgICAgZGV0ZWN0X3BhcnRpYWxfbWF0Y2goY29tbW9uLCBiYWNrdHJhY2tzKTsKKyAgY29tcGlsZV94Y2xhc3NfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgY2MgKyBMSU5LX1NJWkUsIGJhY2t0cmFja3MpOworICByZXR1cm4gY2MgKyBHRVQoY2MsIDApIC0gMTsKKyNlbmRpZgorICB9CitTTEpJVF9BU1NFUlRfU1RPUCgpOworcmV0dXJuIGNjOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIFBDUkUyX1NQVFIgY29tcGlsZV9jaGFybl9tYXRjaGluZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIFBDUkUyX1NQVFIgY2NlbmQsIGp1bXBfbGlzdCAqKmJhY2t0cmFja3MpCit7CisvKiBUaGlzIGZ1bmN0aW9uIGNvbnN1bWVzIGF0IGxlYXN0IG9uZSBpbnB1dCBjaGFyYWN0ZXIuICovCisvKiBUbyBkZWNyZWFzZSB0aGUgbnVtYmVyIG9mIGxlbmd0aCBjaGVja3MsIHdlIHRyeSB0byBjb25jYXRlbmF0ZSB0aGUgZml4ZWQgbGVuZ3RoIGNoYXJhY3RlciBzZXF1ZW5jZXMuICovCitERUZJTkVfQ09NUElMRVI7CitQQ1JFMl9TUFRSIGNjYmVnaW4gPSBjYzsKK2NvbXBhcmVfY29udGV4dCBjb250ZXh0OworaW50IHNpemU7CisKK2NvbnRleHQubGVuZ3RoID0gMDsKK2RvCisgIHsKKyAgaWYgKGNjID49IGNjZW5kKQorICAgIGJyZWFrOworCisgIGlmICgqY2MgPT0gT1BfQ0hBUikKKyAgICB7CisgICAgc2l6ZSA9IDE7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgaWYgKGNvbW1vbi0+dXRmICYmIEhBU19FWFRSQUxFTihjY1sxXSkpCisgICAgICBzaXplICs9IEdFVF9FWFRSQUxFTihjY1sxXSk7CisjZW5kaWYKKyAgICB9CisgIGVsc2UgaWYgKCpjYyA9PSBPUF9DSEFSSSkKKyAgICB7CisgICAgc2l6ZSA9IDE7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgaWYgKGNvbW1vbi0+dXRmKQorICAgICAgeworICAgICAgaWYgKGNoYXJfaGFzX290aGVyY2FzZShjb21tb24sIGNjICsgMSkgJiYgY2hhcl9nZXRfb3RoZXJjYXNlX2JpdChjb21tb24sIGNjICsgMSkgPT0gMCkKKyAgICAgICAgc2l6ZSA9IDA7CisgICAgICBlbHNlIGlmIChIQVNfRVhUUkFMRU4oY2NbMV0pKQorICAgICAgICBzaXplICs9IEdFVF9FWFRSQUxFTihjY1sxXSk7CisgICAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgaWYgKGNoYXJfaGFzX290aGVyY2FzZShjb21tb24sIGNjICsgMSkgJiYgY2hhcl9nZXRfb3RoZXJjYXNlX2JpdChjb21tb24sIGNjICsgMSkgPT0gMCkKKyAgICAgIHNpemUgPSAwOworICAgIH0KKyAgZWxzZQorICAgIHNpemUgPSAwOworCisgIGNjICs9IDEgKyBzaXplOworICBjb250ZXh0Lmxlbmd0aCArPSBJTl9VQ0hBUlMoc2l6ZSk7CisgIH0KK3doaWxlIChzaXplID4gMCAmJiBjb250ZXh0Lmxlbmd0aCA8PSAxMjgpOworCitjYyA9IGNjYmVnaW47CitpZiAoY29udGV4dC5sZW5ndGggPiAwKQorICB7CisgIC8qIFdlIGhhdmUgYSBmaXhlZC1sZW5ndGggYnl0ZSBzZXF1ZW5jZS4gKi8KKyAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBjb250ZXh0Lmxlbmd0aCk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfR1JFQVRFUiwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCkpOworCisgIGNvbnRleHQuc291cmNlcmVnID0gLTE7CisjaWYgZGVmaW5lZCBTTEpJVF9VTkFMSUdORUQgJiYgU0xKSVRfVU5BTElHTkVECisgIGNvbnRleHQudWNoYXJwdHIgPSAwOworI2VuZGlmCisgIGRvIGNjID0gYnl0ZV9zZXF1ZW5jZV9jb21wYXJlKGNvbW1vbiwgKmNjID09IE9QX0NIQVJJLCBjYyArIDEsICZjb250ZXh0LCBiYWNrdHJhY2tzKTsgd2hpbGUgKGNvbnRleHQubGVuZ3RoID4gMCk7CisgIHJldHVybiBjYzsKKyAgfQorCisvKiBBIG5vbi1maXhlZCBsZW5ndGggY2hhcmFjdGVyIHdpbGwgYmUgY2hlY2tlZCBpZiBsZW5ndGggPT0gMC4gKi8KK3JldHVybiBjb21waWxlX2NoYXIxX21hdGNoaW5ncGF0aChjb21tb24sICpjYywgY2MgKyAxLCBiYWNrdHJhY2tzLCBUUlVFKTsKK30KKworLyogRm9yd2FyZCBkZWZpbml0aW9ucy4gKi8KK3N0YXRpYyB2b2lkIGNvbXBpbGVfbWF0Y2hpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqLCBQQ1JFMl9TUFRSLCBQQ1JFMl9TUFRSLCBiYWNrdHJhY2tfY29tbW9uICopOworc3RhdGljIHZvaWQgY29tcGlsZV9iYWNrdHJhY2tpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqLCBzdHJ1Y3QgYmFja3RyYWNrX2NvbW1vbiAqKTsKKworI2RlZmluZSBQVVNIX0JBQ0tUUkFDSyhzaXplLCBjY3N0YXJ0LCBlcnJvcikgXAorICBkbyBcCisgICAgeyBcCisgICAgYmFja3RyYWNrID0gc2xqaXRfYWxsb2NfbWVtb3J5KGNvbXBpbGVyLCAoc2l6ZSkpOyBcCisgICAgaWYgKFNMSklUX1VOTElLRUxZKHNsaml0X2dldF9jb21waWxlcl9lcnJvcihjb21waWxlcikpKSBcCisgICAgICByZXR1cm4gZXJyb3I7IFwKKyAgICBtZW1zZXQoYmFja3RyYWNrLCAwLCBzaXplKTsgXAorICAgIGJhY2t0cmFjay0+cHJldiA9IHBhcmVudC0+dG9wOyBcCisgICAgYmFja3RyYWNrLT5jYyA9IChjY3N0YXJ0KTsgXAorICAgIHBhcmVudC0+dG9wID0gYmFja3RyYWNrOyBcCisgICAgfSBcCisgIHdoaWxlICgwKQorCisjZGVmaW5lIFBVU0hfQkFDS1RSQUNLX05PVkFMVUUoc2l6ZSwgY2NzdGFydCkgXAorICBkbyBcCisgICAgeyBcCisgICAgYmFja3RyYWNrID0gc2xqaXRfYWxsb2NfbWVtb3J5KGNvbXBpbGVyLCAoc2l6ZSkpOyBcCisgICAgaWYgKFNMSklUX1VOTElLRUxZKHNsaml0X2dldF9jb21waWxlcl9lcnJvcihjb21waWxlcikpKSBcCisgICAgICByZXR1cm47IFwKKyAgICBtZW1zZXQoYmFja3RyYWNrLCAwLCBzaXplKTsgXAorICAgIGJhY2t0cmFjay0+cHJldiA9IHBhcmVudC0+dG9wOyBcCisgICAgYmFja3RyYWNrLT5jYyA9IChjY3N0YXJ0KTsgXAorICAgIHBhcmVudC0+dG9wID0gYmFja3RyYWNrOyBcCisgICAgfSBcCisgIHdoaWxlICgwKQorCisjZGVmaW5lIEJBQ0tUUkFDS19BUyh0eXBlKSAoKHR5cGUgKiliYWNrdHJhY2spCisKK3N0YXRpYyB2b2lkIGNvbXBpbGVfZG5yZWZfc2VhcmNoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBqdW1wX2xpc3QgKipiYWNrdHJhY2tzKQoreworLyogVGhlIE9WRUNUT1Igb2Zmc2V0IGdvZXMgdG8gVE1QMi4gKi8KK0RFRklORV9DT01QSUxFUjsKK2ludCBjb3VudCA9IEdFVDIoY2MsIDEgKyBJTU0yX1NJWkUpOworUENSRTJfU1BUUiBzbG90ID0gY29tbW9uLT5uYW1lX3RhYmxlICsgR0VUMihjYywgMSkgKiBjb21tb24tPm5hbWVfZW50cnlfc2l6ZTsKK3Vuc2lnbmVkIGludCBvZmZzZXQ7CitqdW1wX2xpc3QgKmZvdW5kID0gTlVMTDsKKworU0xKSVRfQVNTRVJUKCpjYyA9PSBPUF9ETlJFRiB8fCAqY2MgPT0gT1BfRE5SRUZJKTsKKworT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1IoMSkpOworCitjb3VudC0tOword2hpbGUgKGNvdW50LS0gPiAwKQorICB7CisgIG9mZnNldCA9IEdFVDIoc2xvdCwgMCkgPDwgMTsKKyAgR0VUX0xPQ0FMX0JBU0UoVE1QMiwgMCwgT1ZFQ1RPUihvZmZzZXQpKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsICZmb3VuZCwgQ01QKFNMSklUX05PVF9FUVVBTCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1Iob2Zmc2V0KSwgVE1QMSwgMCkpOworICBzbG90ICs9IGNvbW1vbi0+bmFtZV9lbnRyeV9zaXplOworICB9CisKK29mZnNldCA9IEdFVDIoc2xvdCwgMCkgPDwgMTsKK0dFVF9MT0NBTF9CQVNFKFRNUDIsIDAsIE9WRUNUT1Iob2Zmc2V0KSk7CitpZiAoYmFja3RyYWNrcyAhPSBOVUxMICYmICFjb21tb24tPnVuc2V0X2JhY2tyZWYpCisgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfRVFVQUwsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKG9mZnNldCksIFRNUDEsIDApKTsKKworc2V0X2p1bXBzKGZvdW5kLCBMQUJFTCgpKTsKK30KKworc3RhdGljIHZvaWQgY29tcGlsZV9yZWZfbWF0Y2hpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBqdW1wX2xpc3QgKipiYWNrdHJhY2tzLCBCT09MIHdpdGhjaGVja3MsIEJPT0wgZW1wdHlmYWlsKQoreworREVGSU5FX0NPTVBJTEVSOworQk9PTCByZWYgPSAoKmNjID09IE9QX1JFRiB8fCAqY2MgPT0gT1BfUkVGSSk7CitpbnQgb2Zmc2V0ID0gMDsKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wID0gTlVMTDsKK3N0cnVjdCBzbGppdF9qdW1wICpwYXJ0aWFsOworc3RydWN0IHNsaml0X2p1bXAgKm5vcGFydGlhbDsKKworaWYgKHJlZikKKyAgeworICBvZmZzZXQgPSBHRVQyKGNjLCAxKSA8PCAxOworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQpKTsKKyAgLyogT1ZFQ1RPUigxKSBjb250YWlucyB0aGUgInN0cmluZyBiZWdpbiAtIDEiIGNvbnN0YW50LiAqLworICBpZiAod2l0aGNoZWNrcyAmJiAhY29tbW9uLT51bnNldF9iYWNrcmVmKQorICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKDEpKSk7CisgIH0KK2Vsc2UKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAyKSwgMCk7CisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERQoraWYgKGNvbW1vbi0+dXRmICYmICpjYyA9PSBPUF9SRUZJKQorICB7CisgIFNMSklUX0FTU0VSVChUTVAxID09IFNMSklUX1IwICYmIFNUQUNLX1RPUCA9PSBTTEpJVF9SMSAmJiBUTVAyID09IFNMSklUX1IyKTsKKyAgaWYgKHJlZikKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQgKyAxKSk7CisgIGVsc2UKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBzaXplb2Yoc2xqaXRfc3cpKTsKKworICBpZiAod2l0aGNoZWNrcykKKyAgICBqdW1wID0gQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBUTVAyLCAwKTsKKworICAvKiBOZWVkZWQgdG8gc2F2ZSBpbXBvcnRhbnQgdGVtcG9yYXJ5IHJlZ2lzdGVycy4gKi8KKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIExPQ0FMUzAsIFNUQUNLX1RPUCwgMCk7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX1IxLCAwLCBBUkdVTUVOVFMsIDApOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1IxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgc3RhcnRjaGFyX3B0ciksIFNUUl9QVFIsIDApOworICBzbGppdF9lbWl0X2lqdW1wKGNvbXBpbGVyLCBTTEpJVF9DQUxMMywgU0xKSVRfSU1NLCBTTEpJVF9GVU5DX09GRlNFVChkb191dGZfY2FzZWxlc3NjbXApKTsKKyAgT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMCk7CisgIGlmIChjb21tb24tPm1vZGUgPT0gUENSRTJfSklUX0NPTVBMRVRFKQorICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTEVTU19FUVVBTCwgU0xKSVRfUkVUVVJOX1JFRywgMCwgU0xKSVRfSU1NLCAxKSk7CisgIGVsc2UKKyAgICB7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9FUVVBTCwgU0xKSVRfUkVUVVJOX1JFRywgMCwgU0xKSVRfSU1NLCAwKSk7CisgICAgbm9wYXJ0aWFsID0gQ01QKFNMSklUX05PVF9FUVVBTCwgU0xKSVRfUkVUVVJOX1JFRywgMCwgU0xKSVRfSU1NLCAxKTsKKyAgICBjaGVja19wYXJ0aWFsKGNvbW1vbiwgRkFMU0UpOworICAgIGFkZF9qdW1wKGNvbXBpbGVyLCBiYWNrdHJhY2tzLCBKVU1QKFNMSklUX0pVTVApKTsKKyAgICBKVU1QSEVSRShub3BhcnRpYWwpOworICAgIH0KKyAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfUkVUVVJOX1JFRywgMCk7CisgIH0KK2Vsc2UKKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKyAgeworICBpZiAocmVmKQorICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgVE1QMiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1Iob2Zmc2V0ICsgMSksIFRNUDEsIDApOworICBlbHNlCisgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBzaXplb2Yoc2xqaXRfc3cpLCBUTVAxLCAwKTsKKworICBpZiAod2l0aGNoZWNrcykKKyAgICBqdW1wID0gSlVNUChTTEpJVF9aRVJPKTsKKworICBPUDIoU0xKSVRfQURELCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBUTVAyLCAwKTsKKyAgcGFydGlhbCA9IENNUChTTEpJVF9HUkVBVEVSLCBTVFJfUFRSLCAwLCBTVFJfRU5ELCAwKTsKKyAgaWYgKGNvbW1vbi0+bW9kZSA9PSBQQ1JFMl9KSVRfQ09NUExFVEUpCisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIHBhcnRpYWwpOworCisgIGFkZF9qdW1wKGNvbXBpbGVyLCAqY2MgPT0gT1BfUkVGID8gJmNvbW1vbi0+Y2FzZWZ1bGNtcCA6ICZjb21tb24tPmNhc2VsZXNzY21wLCBKVU1QKFNMSklUX0ZBU1RfQ0FMTCkpOworICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywgQ01QKFNMSklUX05PVF9FUVVBTCwgVE1QMiwgMCwgU0xKSVRfSU1NLCAwKSk7CisKKyAgaWYgKGNvbW1vbi0+bW9kZSAhPSBQQ1JFMl9KSVRfQ09NUExFVEUpCisgICAgeworICAgIG5vcGFydGlhbCA9IEpVTVAoU0xKSVRfSlVNUCk7CisgICAgSlVNUEhFUkUocGFydGlhbCk7CisgICAgLyogVE1QMiAtPSBTVFJfRU5EIC0gU1RSX1BUUiAqLworICAgIE9QMihTTEpJVF9TVUIsIFRNUDIsIDAsIFRNUDIsIDAsIFNUUl9QVFIsIDApOworICAgIE9QMihTTEpJVF9BREQsIFRNUDIsIDAsIFRNUDIsIDAsIFNUUl9FTkQsIDApOworICAgIHBhcnRpYWwgPSBDTVAoU0xKSVRfRVFVQUwsIFRNUDIsIDAsIFNMSklUX0lNTSwgMCk7CisgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsICpjYyA9PSBPUF9SRUYgPyAmY29tbW9uLT5jYXNlZnVsY21wIDogJmNvbW1vbi0+Y2FzZWxlc3NjbXAsIEpVTVAoU0xKSVRfRkFTVF9DQUxMKSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIENNUChTTEpJVF9OT1RfRVFVQUwsIFRNUDIsIDAsIFNMSklUX0lNTSwgMCkpOworICAgIEpVTVBIRVJFKHBhcnRpYWwpOworICAgIGNoZWNrX3BhcnRpYWwoY29tbW9uLCBGQUxTRSk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsIGJhY2t0cmFja3MsIEpVTVAoU0xKSVRfSlVNUCkpOworICAgIEpVTVBIRVJFKG5vcGFydGlhbCk7CisgICAgfQorICB9CisKK2lmIChqdW1wICE9IE5VTEwpCisgIHsKKyAgaWYgKGVtcHR5ZmFpbCkKKyAgICBhZGRfanVtcChjb21waWxlciwgYmFja3RyYWNrcywganVtcCk7CisgIGVsc2UKKyAgICBKVU1QSEVSRShqdW1wKTsKKyAgfQorfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIFBDUkUyX1NQVFIgY29tcGlsZV9yZWZfaXRlcmF0b3JfbWF0Y2hpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBiYWNrdHJhY2tfY29tbW9uICpwYXJlbnQpCit7CitERUZJTkVfQ09NUElMRVI7CitCT09MIHJlZiA9ICgqY2MgPT0gT1BfUkVGIHx8ICpjYyA9PSBPUF9SRUZJKTsKK2JhY2t0cmFja19jb21tb24gKmJhY2t0cmFjazsKK1BDUkUyX1VDSEFSIHR5cGU7CitpbnQgb2Zmc2V0ID0gMDsKK3N0cnVjdCBzbGppdF9sYWJlbCAqbGFiZWw7CitzdHJ1Y3Qgc2xqaXRfanVtcCAqemVyb2xlbmd0aDsKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wID0gTlVMTDsKK1BDUkUyX1NQVFIgY2NiZWdpbiA9IGNjOworaW50IG1pbiA9IDAsIG1heCA9IDA7CitCT09MIG1pbmltaXplOworCitQVVNIX0JBQ0tUUkFDSyhzaXplb2YocmVmX2l0ZXJhdG9yX2JhY2t0cmFjayksIGNjLCBOVUxMKTsKKworaWYgKHJlZikKKyAgb2Zmc2V0ID0gR0VUMihjYywgMSkgPDwgMTsKK2Vsc2UKKyAgY2MgKz0gSU1NMl9TSVpFOwordHlwZSA9IGNjWzEgKyBJTU0yX1NJWkVdOworCitTTEpJVF9DT01QSUxFX0FTU0VSVCgoT1BfQ1JTVEFSICYgMHgxKSA9PSAwLCBjcnN0YXJfb3Bjb2RlX211c3RfYmVfZXZlbik7CittaW5pbWl6ZSA9ICh0eXBlICYgMHgxKSAhPSAwOworc3dpdGNoKHR5cGUpCisgIHsKKyAgY2FzZSBPUF9DUlNUQVI6CisgIGNhc2UgT1BfQ1JNSU5TVEFSOgorICBtaW4gPSAwOworICBtYXggPSAwOworICBjYyArPSAxICsgSU1NMl9TSVpFICsgMTsKKyAgYnJlYWs7CisgIGNhc2UgT1BfQ1JQTFVTOgorICBjYXNlIE9QX0NSTUlOUExVUzoKKyAgbWluID0gMTsKKyAgbWF4ID0gMDsKKyAgY2MgKz0gMSArIElNTTJfU0laRSArIDE7CisgIGJyZWFrOworICBjYXNlIE9QX0NSUVVFUlk6CisgIGNhc2UgT1BfQ1JNSU5RVUVSWToKKyAgbWluID0gMDsKKyAgbWF4ID0gMTsKKyAgY2MgKz0gMSArIElNTTJfU0laRSArIDE7CisgIGJyZWFrOworICBjYXNlIE9QX0NSUkFOR0U6CisgIGNhc2UgT1BfQ1JNSU5SQU5HRToKKyAgbWluID0gR0VUMihjYywgMSArIElNTTJfU0laRSArIDEpOworICBtYXggPSBHRVQyKGNjLCAxICsgSU1NMl9TSVpFICsgMSArIElNTTJfU0laRSk7CisgIGNjICs9IDEgKyBJTU0yX1NJWkUgKyAxICsgMiAqIElNTTJfU0laRTsKKyAgYnJlYWs7CisgIGRlZmF1bHQ6CisgIFNMSklUX0FTU0VSVF9TVE9QKCk7CisgIGJyZWFrOworICB9CisKK2lmICghbWluaW1pemUpCisgIHsKKyAgaWYgKG1pbiA9PSAwKQorICAgIHsKKyAgICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIDIpOworICAgIGlmIChyZWYpCisgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQpKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTVFJfUFRSLCAwKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpLCBTTEpJVF9JTU0sIDApOworICAgIC8qIFRlbXBvcmFyeSByZWxlYXNlIG9mIFNUUl9QVFIuICovCisgICAgT1AyKFNMSklUX1NVQiwgU1RBQ0tfVE9QLCAwLCBTVEFDS19UT1AsIDAsIFNMSklUX0lNTSwgc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgLyogSGFuZGxlcyBib3RoIGludmFsaWQgYW5kIGVtcHR5IGNhc2VzLiBTaW5jZSB0aGUgbWluaW11bSByZXBlYXQsCisgICAgaXMgemVybyB0aGUgaW52YWxpZCBjYXNlIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBhbiBlbXB0eSBjYXNlLiAqLworICAgIGlmIChyZWYpCisgICAgICB6ZXJvbGVuZ3RoID0gQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQgKyAxKSk7CisgICAgZWxzZQorICAgICAgeworICAgICAgY29tcGlsZV9kbnJlZl9zZWFyY2goY29tbW9uLCBjY2JlZ2luLCBOVUxMKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIDApOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIFBPU1NFU1NJVkUxLCBUTVAyLCAwKTsKKyAgICAgIHplcm9sZW5ndGggPSBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIHNpemVvZihzbGppdF9zdykpOworICAgICAgfQorICAgIC8qIFJlc3RvcmUgaWYgbm90IHplcm8gbGVuZ3RoLiAqLworICAgIE9QMihTTEpJVF9BREQsIFNUQUNLX1RPUCwgMCwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9JTU0sIHNpemVvZihzbGppdF9zdykpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIDEpOworICAgIGlmIChyZWYpCisgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQpKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTTEpJVF9JTU0sIDApOworICAgIGlmIChyZWYpCisgICAgICB7CisgICAgICBhZGRfanVtcChjb21waWxlciwgJmJhY2t0cmFjay0+dG9wYmFja3RyYWNrcywgQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUigxKSkpOworICAgICAgemVyb2xlbmd0aCA9IENNUChTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1Iob2Zmc2V0ICsgMSkpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGNvbXBpbGVfZG5yZWZfc2VhcmNoKGNvbW1vbiwgY2NiZWdpbiwgJmJhY2t0cmFjay0+dG9wYmFja3RyYWNrcyk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCAwKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBQT1NTRVNTSVZFMSwgVE1QMiwgMCk7CisgICAgICB6ZXJvbGVuZ3RoID0gQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBzaXplb2Yoc2xqaXRfc3cpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgaWYgKG1pbiA+IDEgfHwgbWF4ID4gMSkKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgUE9TU0VTU0lWRTAsIFNMSklUX0lNTSwgMCk7CisKKyAgbGFiZWwgPSBMQUJFTCgpOworICBpZiAoIXJlZikKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgUE9TU0VTU0lWRTEpOworICBjb21waWxlX3JlZl9tYXRjaGluZ3BhdGgoY29tbW9uLCBjY2JlZ2luLCAmYmFja3RyYWNrLT50b3BiYWNrdHJhY2tzLCBGQUxTRSwgRkFMU0UpOworCisgIGlmIChtaW4gPiAxIHx8IG1heCA+IDEpCisgICAgeworICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBQT1NTRVNTSVZFMCk7CisgICAgT1AyKFNMSklUX0FERCwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAxKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgUE9TU0VTU0lWRTAsIFRNUDEsIDApOworICAgIGlmIChtaW4gPiAxKQorICAgICAgQ01QVE8oU0xKSVRfTEVTUywgVE1QMSwgMCwgU0xKSVRfSU1NLCBtaW4sIGxhYmVsKTsKKyAgICBpZiAobWF4ID4gMSkKKyAgICAgIHsKKyAgICAgIGp1bXAgPSBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBtYXgpOworICAgICAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCAxKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFNUUl9QVFIsIDApOworICAgICAgSlVNUFRPKFNMSklUX0pVTVAsIGxhYmVsKTsKKyAgICAgIEpVTVBIRVJFKGp1bXApOworICAgICAgfQorICAgIH0KKworICBpZiAobWF4ID09IDApCisgICAgeworICAgIC8qIEluY2x1ZGVzIG1pbiA+IDEgY2FzZSBhcyB3ZWxsLiAqLworICAgIGFsbG9jYXRlX3N0YWNrKGNvbW1vbiwgMSk7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSwgU1RSX1BUUiwgMCk7CisgICAgSlVNUFRPKFNMSklUX0pVTVAsIGxhYmVsKTsKKyAgICB9CisKKyAgSlVNUEhFUkUoemVyb2xlbmd0aCk7CisgIEJBQ0tUUkFDS19BUyhyZWZfaXRlcmF0b3JfYmFja3RyYWNrKS0+bWF0Y2hpbmdwYXRoID0gTEFCRUwoKTsKKworICBjb3VudF9tYXRjaChjb21tb24pOworICByZXR1cm4gY2M7CisgIH0KKworYWxsb2NhdGVfc3RhY2soY29tbW9uLCByZWYgPyAyIDogMyk7CitpZiAocmVmKQorICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQpKTsKK09QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFNMSklUX0lNTSwgMCk7CitpZiAodHlwZSAhPSBPUF9DUk1JTlNUQVIpCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMSksIFNMSklUX0lNTSwgMCk7CisKK2lmIChtaW4gPT0gMCkKKyAgeworICAvKiBIYW5kbGVzIGJvdGggaW52YWxpZCBhbmQgZW1wdHkgY2FzZXMuIFNpbmNlIHRoZSBtaW5pbXVtIHJlcGVhdCwKKyAgaXMgemVybyB0aGUgaW52YWxpZCBjYXNlIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBhcyBhbiBlbXB0eSBjYXNlLiAqLworICBpZiAocmVmKQorICAgIHplcm9sZW5ndGggPSBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKG9mZnNldCArIDEpKTsKKyAgZWxzZQorICAgIHsKKyAgICBjb21waWxlX2RucmVmX3NlYXJjaChjb21tb24sIGNjYmVnaW4sIE5VTEwpOworICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIDApOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMiksIFRNUDIsIDApOworICAgIHplcm9sZW5ndGggPSBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIHNpemVvZihzbGppdF9zdykpOworICAgIH0KKyAgLyogTGVuZ3RoIGlzIG5vbi16ZXJvLCB3ZSBjYW4gbWF0Y2ggcmVhbCByZXBlYXRzLiAqLworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTVFJfUFRSLCAwKTsKKyAganVtcCA9IEpVTVAoU0xKSVRfSlVNUCk7CisgIH0KK2Vsc2UKKyAgeworICBpZiAocmVmKQorICAgIHsKKyAgICBhZGRfanVtcChjb21waWxlciwgJmJhY2t0cmFjay0+dG9wYmFja3RyYWNrcywgQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUigxKSkpOworICAgIHplcm9sZW5ndGggPSBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKG9mZnNldCArIDEpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgY29tcGlsZV9kbnJlZl9zZWFyY2goY29tbW9uLCBjY2JlZ2luLCAmYmFja3RyYWNrLT50b3BiYWNrdHJhY2tzKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCAwKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDIpLCBUTVAyLCAwKTsKKyAgICB6ZXJvbGVuZ3RoID0gQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFRNUDIpLCBzaXplb2Yoc2xqaXRfc3cpKTsKKyAgICB9CisgIH0KKworQkFDS1RSQUNLX0FTKHJlZl9pdGVyYXRvcl9iYWNrdHJhY2spLT5tYXRjaGluZ3BhdGggPSBMQUJFTCgpOworaWYgKG1heCA+IDApCisgIGFkZF9qdW1wKGNvbXBpbGVyLCAmYmFja3RyYWNrLT50b3BiYWNrdHJhY2tzLCBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygxKSwgU0xKSVRfSU1NLCBtYXgpKTsKKworaWYgKCFyZWYpCisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMikpOworY29tcGlsZV9yZWZfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgY2NiZWdpbiwgJmJhY2t0cmFjay0+dG9wYmFja3RyYWNrcywgVFJVRSwgVFJVRSk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTVFJfUFRSLCAwKTsKKworaWYgKG1pbiA+IDEpCisgIHsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygxKSk7CisgIE9QMihTTEpJVF9BREQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMSk7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMSksIFRNUDEsIDApOworICBDTVBUTyhTTEpJVF9MRVNTLCBUTVAxLCAwLCBTTEpJVF9JTU0sIG1pbiwgQkFDS1RSQUNLX0FTKHJlZl9pdGVyYXRvcl9iYWNrdHJhY2spLT5tYXRjaGluZ3BhdGgpOworICB9CitlbHNlIGlmIChtYXggPiAwKQorICBPUDIoU0xKSVRfQURELCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpLCBTTEpJVF9JTU0sIDEpOworCitpZiAoanVtcCAhPSBOVUxMKQorICBKVU1QSEVSRShqdW1wKTsKK0pVTVBIRVJFKHplcm9sZW5ndGgpOworCitjb3VudF9tYXRjaChjb21tb24pOworcmV0dXJuIGNjOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIFBDUkUyX1NQVFIgY29tcGlsZV9yZWN1cnNlX21hdGNoaW5ncGF0aChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfU1BUUiBjYywgYmFja3RyYWNrX2NvbW1vbiAqcGFyZW50KQoreworREVGSU5FX0NPTVBJTEVSOworYmFja3RyYWNrX2NvbW1vbiAqYmFja3RyYWNrOworcmVjdXJzZV9lbnRyeSAqZW50cnkgPSBjb21tb24tPmVudHJpZXM7CityZWN1cnNlX2VudHJ5ICpwcmV2ID0gTlVMTDsKK3Nsaml0X3N3IHN0YXJ0ID0gR0VUKGNjLCAxKTsKK1BDUkUyX1NQVFIgc3RhcnRfY2M7CitCT09MIG5lZWRzX2NvbnRyb2xfaGVhZDsKKworUFVTSF9CQUNLVFJBQ0soc2l6ZW9mKHJlY3Vyc2VfYmFja3RyYWNrKSwgY2MsIE5VTEwpOworCisvKiBJbmxpbmluZyBzaW1wbGUgcGF0dGVybnMuICovCitpZiAoZ2V0X2ZyYW1lc2l6ZShjb21tb24sIGNvbW1vbi0+c3RhcnQgKyBzdGFydCwgTlVMTCwgVFJVRSwgJm5lZWRzX2NvbnRyb2xfaGVhZCkgPT0gbm9fc3RhY2spCisgIHsKKyAgc3RhcnRfY2MgPSBjb21tb24tPnN0YXJ0ICsgc3RhcnQ7CisgIGNvbXBpbGVfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgbmV4dF9vcGNvZGUoY29tbW9uLCBzdGFydF9jYyksIGJyYWNrZXRlbmQoc3RhcnRfY2MpIC0gKDEgKyBMSU5LX1NJWkUpLCBiYWNrdHJhY2spOworICBCQUNLVFJBQ0tfQVMocmVjdXJzZV9iYWNrdHJhY2spLT5pbmxpbmVkX3BhdHRlcm4gPSBUUlVFOworICByZXR1cm4gY2MgKyAxICsgTElOS19TSVpFOworICB9CisKK3doaWxlIChlbnRyeSAhPSBOVUxMKQorICB7CisgIGlmIChlbnRyeS0+c3RhcnQgPT0gc3RhcnQpCisgICAgYnJlYWs7CisgIHByZXYgPSBlbnRyeTsKKyAgZW50cnkgPSBlbnRyeS0+bmV4dDsKKyAgfQorCitpZiAoZW50cnkgPT0gTlVMTCkKKyAgeworICBlbnRyeSA9IHNsaml0X2FsbG9jX21lbW9yeShjb21waWxlciwgc2l6ZW9mKHJlY3Vyc2VfZW50cnkpKTsKKyAgaWYgKFNMSklUX1VOTElLRUxZKHNsaml0X2dldF9jb21waWxlcl9lcnJvcihjb21waWxlcikpKQorICAgIHJldHVybiBOVUxMOworICBlbnRyeS0+bmV4dCA9IE5VTEw7CisgIGVudHJ5LT5lbnRyeSA9IE5VTEw7CisgIGVudHJ5LT5jYWxscyA9IE5VTEw7CisgIGVudHJ5LT5zdGFydCA9IHN0YXJ0OworCisgIGlmIChwcmV2ICE9IE5VTEwpCisgICAgcHJldi0+bmV4dCA9IGVudHJ5OworICBlbHNlCisgICAgY29tbW9uLT5lbnRyaWVzID0gZW50cnk7CisgIH0KKworaWYgKGNvbW1vbi0+aGFzX3NldF9zb20gJiYgY29tbW9uLT5tYXJrX3B0ciAhPSAwKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKDApKTsKKyAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCAyKTsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+bWFya19wdHIpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBUTVAyLCAwKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygxKSwgVE1QMSwgMCk7CisgIH0KK2Vsc2UgaWYgKGNvbW1vbi0+aGFzX3NldF9zb20gfHwgY29tbW9uLT5tYXJrX3B0ciAhPSAwKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmhhc19zZXRfc29tID8gKGludCkoT1ZFQ1RPUigwKSkgOiBjb21tb24tPm1hcmtfcHRyKTsKKyAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCAxKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSwgVE1QMiwgMCk7CisgIH0KKworaWYgKGVudHJ5LT5lbnRyeSA9PSBOVUxMKQorICBhZGRfanVtcChjb21waWxlciwgJmVudHJ5LT5jYWxscywgSlVNUChTTEpJVF9GQVNUX0NBTEwpKTsKK2Vsc2UKKyAgSlVNUFRPKFNMSklUX0ZBU1RfQ0FMTCwgZW50cnktPmVudHJ5KTsKKy8qIExlYXZlIGlmIHRoZSBtYXRjaCBpcyBmYWlsZWQuICovCithZGRfanVtcChjb21waWxlciwgJmJhY2t0cmFjay0+dG9wYmFja3RyYWNrcywgQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDApKTsKK3JldHVybiBjYyArIDEgKyBMSU5LX1NJWkU7Cit9CisKK3N0YXRpYyBpbnQgU0xKSVRfQ0FMTCBkb19jYWxsb3V0KHN0cnVjdCBqaXRfYXJndW1lbnRzICphcmd1bWVudHMsIHBjcmUyX2NhbGxvdXRfYmxvY2sgKmNhbGxvdXRfYmxvY2ssIFBDUkUyX1NQVFIgKmppdF9vdmVjdG9yKQoreworUENSRTJfU1BUUiBiZWdpbiA9IGFyZ3VtZW50cy0+YmVnaW47CitQQ1JFMl9TSVpFICpvdmVjdG9yID0gYXJndW1lbnRzLT5tYXRjaF9kYXRhLT5vdmVjdG9yOwordWludDMyX3Qgb3ZlY2NvdW50ID0gYXJndW1lbnRzLT5vdmVjY291bnQ7Cit1aW50MzJfdCBpOworCitpZiAoYXJndW1lbnRzLT5jYWxsb3V0ID09IE5VTEwpCisgIHJldHVybiAwOworCitjYWxsb3V0X2Jsb2NrLT52ZXJzaW9uID0gMTsKKworLyogT2Zmc2V0cyBpbiBzdWJqZWN0LiAqLworY2FsbG91dF9ibG9jay0+c3ViamVjdF9sZW5ndGggPSBhcmd1bWVudHMtPmVuZCAtIGFyZ3VtZW50cy0+YmVnaW47CitjYWxsb3V0X2Jsb2NrLT5zdGFydF9tYXRjaCA9IChQQ1JFMl9TUFRSKWNhbGxvdXRfYmxvY2stPnN1YmplY3QgLSBhcmd1bWVudHMtPmJlZ2luOworY2FsbG91dF9ibG9jay0+Y3VycmVudF9wb3NpdGlvbiA9IChQQ1JFMl9TUFRSKWNhbGxvdXRfYmxvY2stPm9mZnNldF92ZWN0b3IgLSBhcmd1bWVudHMtPmJlZ2luOworY2FsbG91dF9ibG9jay0+c3ViamVjdCA9IGJlZ2luOworCisvKiBDb252ZXJ0IGFuZCBjb3B5IHRoZSBKSVQgb2Zmc2V0IHZlY3RvciB0byB0aGUgb3ZlY3RvciBhcnJheS4gKi8KK2NhbGxvdXRfYmxvY2stPmNhcHR1cmVfdG9wID0gMDsKK2NhbGxvdXRfYmxvY2stPm9mZnNldF92ZWN0b3IgPSBvdmVjdG9yOworZm9yIChpID0gMjsgaSA8IG92ZWNjb3VudDsgaSArPSAyKQorICB7CisgIG92ZWN0b3JbaV0gPSBqaXRfb3ZlY3RvcltpXSAtIGJlZ2luOworICBvdmVjdG9yW2kgKyAxXSA9IGppdF9vdmVjdG9yW2kgKyAxXSAtIGJlZ2luOworICBpZiAoaml0X292ZWN0b3JbaV0gPj0gYmVnaW4pCisgICAgY2FsbG91dF9ibG9jay0+Y2FwdHVyZV90b3AgPSBpOworICB9CisKK2NhbGxvdXRfYmxvY2stPmNhcHR1cmVfdG9wID0gKGNhbGxvdXRfYmxvY2stPmNhcHR1cmVfdG9wID4+IDEpICsgMTsKK292ZWN0b3JbMF0gPSBQQ1JFMl9VTlNFVDsKK292ZWN0b3JbMV0gPSBQQ1JFMl9VTlNFVDsKK3JldHVybiAoYXJndW1lbnRzLT5jYWxsb3V0KShjYWxsb3V0X2Jsb2NrLCBhcmd1bWVudHMtPmNhbGxvdXRfZGF0YSk7Cit9CisKKy8qIEFsaWduaW5nIHRvIDggYnl0ZS4gKi8KKyNkZWZpbmUgQ0FMTE9VVF9BUkdfU0laRSBcCisgICAgKCgoaW50KXNpemVvZihwY3JlMl9jYWxsb3V0X2Jsb2NrKSArIDcpICYgfjcpCisKKyNkZWZpbmUgQ0FMTE9VVF9BUkdfT0ZGU0VUKGFyZykgXAorICAgICgtQ0FMTE9VVF9BUkdfU0laRSArIFNMSklUX09GRlNFVE9GKHBjcmUyX2NhbGxvdXRfYmxvY2ssIGFyZykpCisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgUENSRTJfU1BUUiBjb21waWxlX2NhbGxvdXRfbWF0Y2hpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBiYWNrdHJhY2tfY29tbW9uICpwYXJlbnQpCit7CitERUZJTkVfQ09NUElMRVI7CitiYWNrdHJhY2tfY29tbW9uICpiYWNrdHJhY2s7CitzbGppdF9zaSBtb3Zfb3Bjb2RlOwordW5zaWduZWQgaW50IGNhbGxvdXRfbGVuZ3RoID0gKCpjYyA9PSBPUF9DQUxMT1VUKQorICAgID8gUFJJVihPUF9sZW5ndGhzKVtPUF9DQUxMT1VUXSA6IEdFVChjYywgMSArIDIgKiBMSU5LX1NJWkUpOworc2xqaXRfc3cgdmFsdWUxOworc2xqaXRfc3cgdmFsdWUyOworc2xqaXRfc3cgdmFsdWUzOworCitQVVNIX0JBQ0tUUkFDSyhzaXplb2YoYmFja3RyYWNrX2NvbW1vbiksIGNjLCBOVUxMKTsKKworYWxsb2NhdGVfc3RhY2soY29tbW9uLCBDQUxMT1VUX0FSR19TSVpFIC8gc2l6ZW9mKHNsaml0X3N3KSk7CisKK1NMSklUX0FTU0VSVChjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgIT0gMCk7CitPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jYXB0dXJlX2xhc3RfcHRyKTsKK09QMShTTEpJVF9NT1YsIFRNUDEsIDAsIEFSR1VNRU5UUywgMCk7Cit2YWx1ZTEgPSAoKmNjID09IE9QX0NBTExPVVQpID8gY2NbMSArIDIgKiBMSU5LX1NJWkVdIDogMDsKK09QMShTTEpJVF9NT1ZfVUksIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgQ0FMTE9VVF9BUkdfT0ZGU0VUKGNhbGxvdXRfbnVtYmVyKSwgU0xKSVRfSU1NLCB2YWx1ZTEpOworT1AxKFNMSklUX01PVl9VSSwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBDQUxMT1VUX0FSR19PRkZTRVQoY2FwdHVyZV9sYXN0KSwgVE1QMiwgMCk7CisKKy8qIFRoZXNlIHBvaW50ZXIgc2l6ZWQgZmllbGRzIHRlbXBvcmFybHkgc3RvcmVzIGludGVybmFsIHZhcmlhYmxlcy4gKi8KK09QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKDApKTsKK09QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgQ0FMTE9VVF9BUkdfT0ZGU0VUKG9mZnNldF92ZWN0b3IpLCBTVFJfUFRSLCAwKTsKK09QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgQ0FMTE9VVF9BUkdfT0ZGU0VUKHN1YmplY3QpLCBUTVAyLCAwKTsKKworaWYgKGNvbW1vbi0+bWFya19wdHIgIT0gMCkKKyAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgbWFya19wdHIpKTsKK21vdl9vcGNvZGUgPSAoc2l6ZW9mKFBDUkUyX1NJWkUpID09IDQpID8gU0xKSVRfTU9WX1VJIDogU0xKSVRfTU9WOworT1AxKG1vdl9vcGNvZGUsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgQ0FMTE9VVF9BUkdfT0ZGU0VUKHBhdHRlcm5fcG9zaXRpb24pLCBTTEpJVF9JTU0sIEdFVChjYywgMSkpOworT1AxKG1vdl9vcGNvZGUsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgQ0FMTE9VVF9BUkdfT0ZGU0VUKG5leHRfaXRlbV9sZW5ndGgpLCBTTEpJVF9JTU0sIEdFVChjYywgMSArIExJTktfU0laRSkpOworCitpZiAoKmNjID09IE9QX0NBTExPVVQpCisgIHsKKyAgdmFsdWUxID0gMDsKKyAgdmFsdWUyID0gMDsKKyAgdmFsdWUzID0gMDsKKyAgfQorZWxzZQorICB7CisgIHZhbHVlMSA9IChzbGppdF9zdykgKGNjICsgKDEgKyA0KkxJTktfU0laRSkgKyAxKTsKKyAgdmFsdWUyID0gKGNhbGxvdXRfbGVuZ3RoIC0gKDEgKyA0KkxJTktfU0laRSArIDIpKTsKKyAgdmFsdWUzID0gKHNsaml0X3N3KSAoR0VUKGNjLCAxICsgMypMSU5LX1NJWkUpKTsKKyAgfQorCitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIENBTExPVVRfQVJHX09GRlNFVChjYWxsb3V0X3N0cmluZyksIFNMSklUX0lNTSwgdmFsdWUxKTsKK09QMShtb3Zfb3Bjb2RlLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIENBTExPVVRfQVJHX09GRlNFVChjYWxsb3V0X3N0cmluZ19sZW5ndGgpLCBTTEpJVF9JTU0sIHZhbHVlMik7CitPUDEobW92X29wY29kZSwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBDQUxMT1VUX0FSR19PRkZTRVQoY2FsbG91dF9zdHJpbmdfb2Zmc2V0KSwgU0xKSVRfSU1NLCB2YWx1ZTMpOworT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBDQUxMT1VUX0FSR19PRkZTRVQobWFyayksIChjb21tb24tPm1hcmtfcHRyICE9IDApID8gVE1QMiA6IFNMSklUX0lNTSwgMCk7CisKKy8qIE5lZWRlZCB0byBzYXZlIGltcG9ydGFudCB0ZW1wb3JhcnkgcmVnaXN0ZXJzLiAqLworT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIExPQ0FMUzAsIFNUQUNLX1RPUCwgMCk7CitPUDIoU0xKSVRfU1VCLCBTTEpJVF9SMSwgMCwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9JTU0sIENBTExPVVRfQVJHX1NJWkUpOworR0VUX0xPQ0FMX0JBU0UoU0xKSVRfUjIsIDAsIE9WRUNUT1JfU1RBUlQpOworc2xqaXRfZW1pdF9panVtcChjb21waWxlciwgU0xKSVRfQ0FMTDMsIFNMSklUX0lNTSwgU0xKSVRfRlVOQ19PRkZTRVQoZG9fY2FsbG91dCkpOworT1AxKFNMSklUX01PVl9TSSwgU0xKSVRfUkVUVVJOX1JFRywgMCwgU0xKSVRfUkVUVVJOX1JFRywgMCk7CitPUDEoU0xKSVRfTU9WLCBTVEFDS19UT1AsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBMT0NBTFMwKTsKK2ZyZWVfc3RhY2soY29tbW9uLCBDQUxMT1VUX0FSR19TSVpFIC8gc2l6ZW9mKHNsaml0X3N3KSk7CisKKy8qIENoZWNrIHJldHVybiB2YWx1ZS4gKi8KK09QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfUywgU0xKSVRfVU5VU0VELCAwLCBTTEpJVF9SRVRVUk5fUkVHLCAwLCBTTEpJVF9JTU0sIDApOworYWRkX2p1bXAoY29tcGlsZXIsICZiYWNrdHJhY2stPnRvcGJhY2t0cmFja3MsIEpVTVAoU0xKSVRfU0lHX0dSRUFURVIpKTsKK2lmIChjb21tb24tPmZvcmNlZF9xdWl0X2xhYmVsID09IE5VTEwpCisgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5mb3JjZWRfcXVpdCwgSlVNUChTTEpJVF9TSUdfTEVTUykpOworZWxzZQorICBKVU1QVE8oU0xKSVRfU0lHX0xFU1MsIGNvbW1vbi0+Zm9yY2VkX3F1aXRfbGFiZWwpOworcmV0dXJuIGNjICsgY2FsbG91dF9sZW5ndGg7Cit9CisKKyN1bmRlZiBDQUxMT1VUX0FSR19TSVpFCisjdW5kZWYgQ0FMTE9VVF9BUkdfT0ZGU0VUCisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQk9PTCBhc3NlcnRfbmVlZHNfc3RyX3B0cl9zYXZpbmcoUENSRTJfU1BUUiBjYykKK3sKK3doaWxlIChUUlVFKQorICB7CisgIHN3aXRjaCAoKmNjKQorICAgIHsKKyAgICBjYXNlIE9QX0NBTExPVVRfU1RSOgorICAgIGNjICs9IEdFVChjYywgMSArIDIqTElOS19TSVpFKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfTk9UX1dPUkRfQk9VTkRBUlk6CisgICAgY2FzZSBPUF9XT1JEX0JPVU5EQVJZOgorICAgIGNhc2UgT1BfQ0FMTE9VVDoKKyAgICBjYXNlIE9QX0FMVDoKKyAgICBjYyArPSBQUklWKE9QX2xlbmd0aHMpWypjY107CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0tFVDoKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgICBkZWZhdWx0OgorICAgIHJldHVybiBUUlVFOworICAgIH0KKyAgfQorfQorCitzdGF0aWMgUENSRTJfU1BUUiBjb21waWxlX2Fzc2VydF9tYXRjaGluZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIGFzc2VydF9iYWNrdHJhY2sgKmJhY2t0cmFjaywgQk9PTCBjb25kaXRpb25hbCkKK3sKK0RFRklORV9DT01QSUxFUjsKK2ludCBmcmFtZXNpemU7CitpbnQgZXh0cmFzaXplOworQk9PTCBuZWVkc19jb250cm9sX2hlYWQ7CitpbnQgcHJpdmF0ZV9kYXRhX3B0cjsKK2JhY2t0cmFja19jb21tb24gYWx0YmFja3RyYWNrOworUENSRTJfU1BUUiBjY2JlZ2luOworUENSRTJfVUNIQVIgb3Bjb2RlOworUENSRTJfVUNIQVIgYnJhID0gT1BfQlJBOworanVtcF9saXN0ICp0bXAgPSBOVUxMOworanVtcF9saXN0ICoqdGFyZ2V0ID0gKGNvbmRpdGlvbmFsKSA/ICZiYWNrdHJhY2stPmNvbmRmYWlsZWQgOiAmYmFja3RyYWNrLT5jb21tb24udG9wYmFja3RyYWNrczsKK2p1bXBfbGlzdCAqKmZvdW5kOworLyogU2F2aW5nIHByZXZpb3VzIGFjY2VwdCB2YXJpYWJsZXMuICovCitCT09MIHNhdmVfbG9jYWxfZXhpdCA9IGNvbW1vbi0+bG9jYWxfZXhpdDsKK0JPT0wgc2F2ZV9wb3NpdGl2ZV9hc3NlcnQgPSBjb21tb24tPnBvc2l0aXZlX2Fzc2VydDsKK3RoZW5fdHJhcF9iYWNrdHJhY2sgKnNhdmVfdGhlbl90cmFwID0gY29tbW9uLT50aGVuX3RyYXA7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKnNhdmVfcXVpdF9sYWJlbCA9IGNvbW1vbi0+cXVpdF9sYWJlbDsKK3N0cnVjdCBzbGppdF9sYWJlbCAqc2F2ZV9hY2NlcHRfbGFiZWwgPSBjb21tb24tPmFjY2VwdF9sYWJlbDsKK2p1bXBfbGlzdCAqc2F2ZV9xdWl0ID0gY29tbW9uLT5xdWl0OworanVtcF9saXN0ICpzYXZlX3Bvc2l0aXZlX2Fzc2VydF9xdWl0ID0gY29tbW9uLT5wb3NpdGl2ZV9hc3NlcnRfcXVpdDsKK2p1bXBfbGlzdCAqc2F2ZV9hY2NlcHQgPSBjb21tb24tPmFjY2VwdDsKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wOworc3RydWN0IHNsaml0X2p1bXAgKmJyYWp1bXAgPSBOVUxMOworCisvKiBBc3NlcnQgY2FwdHVyZXMgdGhlbi4gKi8KK2NvbW1vbi0+dGhlbl90cmFwID0gTlVMTDsKKworaWYgKCpjYyA9PSBPUF9CUkFaRVJPIHx8ICpjYyA9PSBPUF9CUkFNSU5aRVJPKQorICB7CisgIFNMSklUX0FTU0VSVCghY29uZGl0aW9uYWwpOworICBicmEgPSAqY2M7CisgIGNjKys7CisgIH0KK3ByaXZhdGVfZGF0YV9wdHIgPSBQUklWQVRFX0RBVEEoY2MpOworU0xKSVRfQVNTRVJUKHByaXZhdGVfZGF0YV9wdHIgIT0gMCk7CitmcmFtZXNpemUgPSBnZXRfZnJhbWVzaXplKGNvbW1vbiwgY2MsIE5VTEwsIEZBTFNFLCAmbmVlZHNfY29udHJvbF9oZWFkKTsKK2JhY2t0cmFjay0+ZnJhbWVzaXplID0gZnJhbWVzaXplOworYmFja3RyYWNrLT5wcml2YXRlX2RhdGFfcHRyID0gcHJpdmF0ZV9kYXRhX3B0cjsKK29wY29kZSA9ICpjYzsKK1NMSklUX0FTU0VSVChvcGNvZGUgPj0gT1BfQVNTRVJUICYmIG9wY29kZSA8PSBPUF9BU1NFUlRCQUNLX05PVCk7Citmb3VuZCA9IChvcGNvZGUgPT0gT1BfQVNTRVJUIHx8IG9wY29kZSA9PSBPUF9BU1NFUlRCQUNLKSA/ICZ0bXAgOiB0YXJnZXQ7CitjY2JlZ2luID0gY2M7CitjYyArPSBHRVQoY2MsIDEpOworCitpZiAoYnJhID09IE9QX0JSQU1JTlpFUk8pCisgIHsKKyAgLyogVGhpcyBpcyBhIGJyYW1pbnplcm8gYmFja3RyYWNrIHBhdGguICovCisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCkpOworICBmcmVlX3N0YWNrKGNvbW1vbiwgMSk7CisgIGJyYWp1bXAgPSBDTVAoU0xKSVRfRVFVQUwsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgMCk7CisgIH0KKworaWYgKGZyYW1lc2l6ZSA8IDApCisgIHsKKyAgZXh0cmFzaXplID0gMTsKKyAgaWYgKGJyYSA9PSBPUF9CUkEgJiYgIWFzc2VydF9uZWVkc19zdHJfcHRyX3NhdmluZyhjY2JlZ2luICsgMSArIExJTktfU0laRSkpCisgICAgZXh0cmFzaXplID0gMDsKKworICBpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICAgIGV4dHJhc2l6ZSsrOworCisgIGlmIChmcmFtZXNpemUgPT0gbm9fZnJhbWUpCisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNUQUNLX1RPUCwgMCk7CisKKyAgaWYgKGV4dHJhc2l6ZSA+IDApCisgICAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCBleHRyYXNpemUpOworCisgIGlmIChuZWVkc19jb250cm9sX2hlYWQpCisgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0cik7CisKKyAgaWYgKGV4dHJhc2l6ZSA+IDApCisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSwgU1RSX1BUUiwgMCk7CisKKyAgaWYgKG5lZWRzX2NvbnRyb2xfaGVhZCkKKyAgICB7CisgICAgU0xKSVRfQVNTRVJUKGV4dHJhc2l6ZSA9PSAyKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyLCBTTEpJVF9JTU0sIDApOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMSksIFRNUDEsIDApOworICAgIH0KKyAgfQorZWxzZQorICB7CisgIGV4dHJhc2l6ZSA9IG5lZWRzX2NvbnRyb2xfaGVhZCA/IDMgOiAyOworICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIGZyYW1lc2l6ZSArIGV4dHJhc2l6ZSk7CisKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIpOworICBPUDIoU0xKSVRfU1VCLCBUTVAyLCAwLCBTVEFDS19UT1AsIDAsIFNMSklUX0lNTSwgKGZyYW1lc2l6ZSArIGV4dHJhc2l6ZSkgKiBzaXplb2Yoc2xqaXRfc3cpKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFRNUDIsIDApOworICBpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICAgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmNvbnRyb2xfaGVhZF9wdHIpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTVFJfUFRSLCAwKTsKKworICBpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDIpLCBUTVAxLCAwKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpLCBUTVAyLCAwKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyLCBTTEpJVF9JTU0sIDApOworICAgIH0KKyAgZWxzZQorICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMSksIFRNUDEsIDApOworCisgIGluaXRfZnJhbWUoY29tbW9uLCBjY2JlZ2luLCBOVUxMLCBmcmFtZXNpemUgKyBleHRyYXNpemUgLSAxLCBleHRyYXNpemUsIEZBTFNFKTsKKyAgfQorCittZW1zZXQoJmFsdGJhY2t0cmFjaywgMCwgc2l6ZW9mKGJhY2t0cmFja19jb21tb24pKTsKK2lmIChvcGNvZGUgPT0gT1BfQVNTRVJUX05PVCB8fCBvcGNvZGUgPT0gT1BfQVNTRVJUQkFDS19OT1QpCisgIHsKKyAgLyogTmVnYXRpdmUgYXNzZXJ0IGlzIHN0cm9uZ2VyIHRoYW4gcG9zaXRpdmUgYXNzZXJ0LiAqLworICBjb21tb24tPmxvY2FsX2V4aXQgPSBUUlVFOworICBjb21tb24tPnF1aXRfbGFiZWwgPSBOVUxMOworICBjb21tb24tPnF1aXQgPSBOVUxMOworICBjb21tb24tPnBvc2l0aXZlX2Fzc2VydCA9IEZBTFNFOworICB9CitlbHNlCisgIGNvbW1vbi0+cG9zaXRpdmVfYXNzZXJ0ID0gVFJVRTsKK2NvbW1vbi0+cG9zaXRpdmVfYXNzZXJ0X3F1aXQgPSBOVUxMOworCit3aGlsZSAoMSkKKyAgeworICBjb21tb24tPmFjY2VwdF9sYWJlbCA9IE5VTEw7CisgIGNvbW1vbi0+YWNjZXB0ID0gTlVMTDsKKyAgYWx0YmFja3RyYWNrLnRvcCA9IE5VTEw7CisgIGFsdGJhY2t0cmFjay50b3BiYWNrdHJhY2tzID0gTlVMTDsKKworICBpZiAoKmNjYmVnaW4gPT0gT1BfQUxUICYmIGV4dHJhc2l6ZSA+IDApCisgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisKKyAgYWx0YmFja3RyYWNrLmNjID0gY2NiZWdpbjsKKyAgY29tcGlsZV9tYXRjaGluZ3BhdGgoY29tbW9uLCBjY2JlZ2luICsgMSArIExJTktfU0laRSwgY2MsICZhbHRiYWNrdHJhY2spOworICBpZiAoU0xKSVRfVU5MSUtFTFkoc2xqaXRfZ2V0X2NvbXBpbGVyX2Vycm9yKGNvbXBpbGVyKSkpCisgICAgeworICAgIGlmIChvcGNvZGUgPT0gT1BfQVNTRVJUX05PVCB8fCBvcGNvZGUgPT0gT1BfQVNTRVJUQkFDS19OT1QpCisgICAgICB7CisgICAgICBjb21tb24tPmxvY2FsX2V4aXQgPSBzYXZlX2xvY2FsX2V4aXQ7CisgICAgICBjb21tb24tPnF1aXRfbGFiZWwgPSBzYXZlX3F1aXRfbGFiZWw7CisgICAgICBjb21tb24tPnF1aXQgPSBzYXZlX3F1aXQ7CisgICAgICB9CisgICAgY29tbW9uLT5wb3NpdGl2ZV9hc3NlcnQgPSBzYXZlX3Bvc2l0aXZlX2Fzc2VydDsKKyAgICBjb21tb24tPnRoZW5fdHJhcCA9IHNhdmVfdGhlbl90cmFwOworICAgIGNvbW1vbi0+YWNjZXB0X2xhYmVsID0gc2F2ZV9hY2NlcHRfbGFiZWw7CisgICAgY29tbW9uLT5wb3NpdGl2ZV9hc3NlcnRfcXVpdCA9IHNhdmVfcG9zaXRpdmVfYXNzZXJ0X3F1aXQ7CisgICAgY29tbW9uLT5hY2NlcHQgPSBzYXZlX2FjY2VwdDsKKyAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIGNvbW1vbi0+YWNjZXB0X2xhYmVsID0gTEFCRUwoKTsKKyAgaWYgKGNvbW1vbi0+YWNjZXB0ICE9IE5VTEwpCisgICAgc2V0X2p1bXBzKGNvbW1vbi0+YWNjZXB0LCBjb21tb24tPmFjY2VwdF9sYWJlbCk7CisKKyAgLyogUmVzZXQgc3RhY2suICovCisgIGlmIChmcmFtZXNpemUgPCAwKQorICAgIHsKKyAgICBpZiAoZnJhbWVzaXplID09IG5vX2ZyYW1lKQorICAgICAgT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0cik7CisgICAgZWxzZSBpZiAoZXh0cmFzaXplID4gMCkKKyAgICAgIGZyZWVfc3RhY2soY29tbW9uLCBleHRyYXNpemUpOworCisgICAgaWYgKG5lZWRzX2NvbnRyb2xfaGVhZCkKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmNvbnRyb2xfaGVhZF9wdHIsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgMCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgIGlmICgob3Bjb2RlICE9IE9QX0FTU0VSVF9OT1QgJiYgb3Bjb2RlICE9IE9QX0FTU0VSVEJBQ0tfTk9UKSB8fCBjb25kaXRpb25hbCkKKyAgICAgIHsKKyAgICAgIC8qIFdlIGRvbid0IG5lZWQgdG8ga2VlcCB0aGUgU1RSX1BUUiwgb25seSB0aGUgcHJldmlvdXMgcHJpdmF0ZV9kYXRhX3B0ci4gKi8KKyAgICAgIE9QMihTTEpJVF9BREQsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNMSklUX0lNTSwgKGZyYW1lc2l6ZSArIDEpICogc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgICBpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICAgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIDApOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIpOworICAgICAgaWYgKG5lZWRzX2NvbnRyb2xfaGVhZCkKKyAgICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0ciwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCAoZnJhbWVzaXplICsgMSkgKiBzaXplb2Yoc2xqaXRfc3cpKTsKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5yZXZlcnRmcmFtZXMsIEpVTVAoU0xKSVRfRkFTVF9DQUxMKSk7CisgICAgICB9CisgICAgfQorCisgIGlmIChvcGNvZGUgPT0gT1BfQVNTRVJUX05PVCB8fCBvcGNvZGUgPT0gT1BfQVNTRVJUQkFDS19OT1QpCisgICAgeworICAgIC8qIFdlIGtub3cgdGhhdCBTVFJfUFRSIHdhcyBzdG9yZWQgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2suICovCisgICAgaWYgKGNvbmRpdGlvbmFsKQorICAgICAgeworICAgICAgaWYgKGV4dHJhc2l6ZSA+IDApCisgICAgICAgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgbmVlZHNfY29udHJvbF9oZWFkID8gc2l6ZW9mKHNsaml0X3N3KSA6IDApOworICAgICAgfQorICAgIGVsc2UgaWYgKGJyYSA9PSBPUF9CUkFaRVJPKQorICAgICAgeworICAgICAgaWYgKGZyYW1lc2l6ZSA8IDApCisgICAgICAgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgKGV4dHJhc2l6ZSAtIDEpICogc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBmcmFtZXNpemUgKiBzaXplb2Yoc2xqaXRfc3cpKTsKKyAgICAgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCAoZnJhbWVzaXplICsgZXh0cmFzaXplIC0gMSkgKiBzaXplb2Yoc2xqaXRfc3cpKTsKKyAgICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFRNUDEsIDApOworICAgICAgICB9CisgICAgICBPUDIoU0xKSVRfQURELCBTVEFDS19UT1AsIDAsIFNUQUNLX1RPUCwgMCwgU0xKSVRfSU1NLCBzaXplb2Yoc2xqaXRfc3cpKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFNMSklUX0lNTSwgMCk7CisgICAgICB9CisgICAgZWxzZSBpZiAoZnJhbWVzaXplID49IDApCisgICAgICB7CisgICAgICAvKiBGb3IgT1BfQlJBIGFuZCBPUF9CUkFNSU5aRVJPLiAqLworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgZnJhbWVzaXplICogc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgICB9CisgICAgfQorICBhZGRfanVtcChjb21waWxlciwgZm91bmQsIEpVTVAoU0xKSVRfSlVNUCkpOworCisgIGNvbXBpbGVfYmFja3RyYWNraW5ncGF0aChjb21tb24sIGFsdGJhY2t0cmFjay50b3ApOworICBpZiAoU0xKSVRfVU5MSUtFTFkoc2xqaXRfZ2V0X2NvbXBpbGVyX2Vycm9yKGNvbXBpbGVyKSkpCisgICAgeworICAgIGlmIChvcGNvZGUgPT0gT1BfQVNTRVJUX05PVCB8fCBvcGNvZGUgPT0gT1BfQVNTRVJUQkFDS19OT1QpCisgICAgICB7CisgICAgICBjb21tb24tPmxvY2FsX2V4aXQgPSBzYXZlX2xvY2FsX2V4aXQ7CisgICAgICBjb21tb24tPnF1aXRfbGFiZWwgPSBzYXZlX3F1aXRfbGFiZWw7CisgICAgICBjb21tb24tPnF1aXQgPSBzYXZlX3F1aXQ7CisgICAgICB9CisgICAgY29tbW9uLT5wb3NpdGl2ZV9hc3NlcnQgPSBzYXZlX3Bvc2l0aXZlX2Fzc2VydDsKKyAgICBjb21tb24tPnRoZW5fdHJhcCA9IHNhdmVfdGhlbl90cmFwOworICAgIGNvbW1vbi0+YWNjZXB0X2xhYmVsID0gc2F2ZV9hY2NlcHRfbGFiZWw7CisgICAgY29tbW9uLT5wb3NpdGl2ZV9hc3NlcnRfcXVpdCA9IHNhdmVfcG9zaXRpdmVfYXNzZXJ0X3F1aXQ7CisgICAgY29tbW9uLT5hY2NlcHQgPSBzYXZlX2FjY2VwdDsKKyAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgIHNldF9qdW1wcyhhbHRiYWNrdHJhY2sudG9wYmFja3RyYWNrcywgTEFCRUwoKSk7CisKKyAgaWYgKCpjYyAhPSBPUF9BTFQpCisgICAgYnJlYWs7CisKKyAgY2NiZWdpbiA9IGNjOworICBjYyArPSBHRVQoY2MsIDEpOworICB9CisKK2lmIChvcGNvZGUgPT0gT1BfQVNTRVJUX05PVCB8fCBvcGNvZGUgPT0gT1BfQVNTRVJUQkFDS19OT1QpCisgIHsKKyAgU0xKSVRfQVNTRVJUKGNvbW1vbi0+cG9zaXRpdmVfYXNzZXJ0X3F1aXQgPT0gTlVMTCk7CisgIC8qIE1ha2VzIHRoZSBjaGVjayBsZXNzIGNvbXBsaWNhdGVkIGJlbG93LiAqLworICBjb21tb24tPnBvc2l0aXZlX2Fzc2VydF9xdWl0ID0gY29tbW9uLT5xdWl0OworICB9CisKKy8qIE5vbmUgb2YgdGhlbSBtYXRjaGVkLiAqLworaWYgKGNvbW1vbi0+cG9zaXRpdmVfYXNzZXJ0X3F1aXQgIT0gTlVMTCkKKyAgeworICBqdW1wID0gSlVNUChTTEpJVF9KVU1QKTsKKyAgc2V0X2p1bXBzKGNvbW1vbi0+cG9zaXRpdmVfYXNzZXJ0X3F1aXQsIExBQkVMKCkpOworICBTTEpJVF9BU1NFUlQoZnJhbWVzaXplICE9IG5vX3N0YWNrKTsKKyAgaWYgKGZyYW1lc2l6ZSA8IDApCisgICAgT1AyKFNMSklUX0FERCwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0ciwgU0xKSVRfSU1NLCBleHRyYXNpemUgKiBzaXplb2Yoc2xqaXRfc3cpKTsKKyAgZWxzZQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WLCBTVEFDS19UT1AsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+cmV2ZXJ0ZnJhbWVzLCBKVU1QKFNMSklUX0ZBU1RfQ0FMTCkpOworICAgIE9QMihTTEpJVF9BREQsIFNUQUNLX1RPUCwgMCwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9JTU0sIChmcmFtZXNpemUgKyBleHRyYXNpemUpICogc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgfQorICBKVU1QSEVSRShqdW1wKTsKKyAgfQorCitpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpKTsKKworaWYgKG9wY29kZSA9PSBPUF9BU1NFUlQgfHwgb3Bjb2RlID09IE9QX0FTU0VSVEJBQ0spCisgIHsKKyAgLyogQXNzZXJ0IGlzIGZhaWxlZC4gKi8KKyAgaWYgKChjb25kaXRpb25hbCAmJiBleHRyYXNpemUgPiAwKSB8fCBicmEgPT0gT1BfQlJBWkVSTykKKyAgICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKKworICBpZiAoZnJhbWVzaXplIDwgMCkKKyAgICB7CisgICAgLyogVGhlIHRvcG1vc3QgaXRlbSBzaG91bGQgYmUgMC4gKi8KKyAgICBpZiAoYnJhID09IE9QX0JSQVpFUk8pCisgICAgICB7CisgICAgICBpZiAoZXh0cmFzaXplID09IDIpCisgICAgICAgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFNMSklUX0lNTSwgMCk7CisgICAgICB9CisgICAgZWxzZSBpZiAoZXh0cmFzaXplID4gMCkKKyAgICAgIGZyZWVfc3RhY2soY29tbW9uLCBleHRyYXNpemUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKGV4dHJhc2l6ZSAtIDEpKTsKKyAgICAvKiBUaGUgdG9wbW9zdCBpdGVtIHNob3VsZCBiZSAwLiAqLworICAgIGlmIChicmEgPT0gT1BfQlJBWkVSTykKKyAgICAgIHsKKyAgICAgIGZyZWVfc3RhY2soY29tbW9uLCBmcmFtZXNpemUgKyBleHRyYXNpemUgLSAxKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFNMSklUX0lNTSwgMCk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgZnJlZV9zdGFjayhjb21tb24sIGZyYW1lc2l6ZSArIGV4dHJhc2l6ZSk7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFRNUDEsIDApOworICAgIH0KKyAganVtcCA9IEpVTVAoU0xKSVRfSlVNUCk7CisgIGlmIChicmEgIT0gT1BfQlJBWkVSTykKKyAgICBhZGRfanVtcChjb21waWxlciwgdGFyZ2V0LCBqdW1wKTsKKworICAvKiBBc3NlcnQgaXMgc3VjY2Vzc2Z1bC4gKi8KKyAgc2V0X2p1bXBzKHRtcCwgTEFCRUwoKSk7CisgIGlmIChmcmFtZXNpemUgPCAwKQorICAgIHsKKyAgICAvKiBXZSBrbm93IHRoYXQgU1RSX1BUUiB3YXMgc3RvcmVkIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrLiAqLworICAgIGlmIChleHRyYXNpemUgPiAwKQorICAgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCAoZXh0cmFzaXplIC0gMSkgKiBzaXplb2Yoc2xqaXRfc3cpKTsKKworICAgIC8qIEtlZXAgdGhlIFNUUl9QVFIgb24gdGhlIHRvcCBvZiB0aGUgc3RhY2suICovCisgICAgaWYgKGJyYSA9PSBPUF9CUkFaRVJPKQorICAgICAgeworICAgICAgT1AyKFNMSklUX0FERCwgU1RBQ0tfVE9QLCAwLCBTVEFDS19UT1AsIDAsIFNMSklUX0lNTSwgc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgICBpZiAoZXh0cmFzaXplID09IDIpCisgICAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFNUUl9QVFIsIDApOworICAgICAgfQorICAgIGVsc2UgaWYgKGJyYSA9PSBPUF9CUkFNSU5aRVJPKQorICAgICAgeworICAgICAgT1AyKFNMSklUX0FERCwgU1RBQ0tfVE9QLCAwLCBTVEFDS19UT1AsIDAsIFNMSklUX0lNTSwgc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTTEpJVF9JTU0sIDApOworICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBpZiAoYnJhID09IE9QX0JSQSkKKyAgICAgIHsKKyAgICAgIC8qIFdlIGRvbid0IG5lZWQgdG8ga2VlcCB0aGUgU1RSX1BUUiwgb25seSB0aGUgcHJldmlvdXMgcHJpdmF0ZV9kYXRhX3B0ci4gKi8KKyAgICAgIE9QMihTTEpJVF9BREQsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNMSklUX0lNTSwgKGZyYW1lc2l6ZSArIDEpICogc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIChleHRyYXNpemUgLSAyKSAqIHNpemVvZihzbGppdF9zdykpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIC8qIFdlIGRvbid0IG5lZWQgdG8ga2VlcCB0aGUgU1RSX1BUUiwgb25seSB0aGUgcHJldmlvdXMgcHJpdmF0ZV9kYXRhX3B0ci4gKi8KKyAgICAgIE9QMihTTEpJVF9BREQsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNMSklUX0lNTSwgKGZyYW1lc2l6ZSArIDIpICogc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgICBpZiAoZXh0cmFzaXplID09IDIpCisgICAgICAgIHsKKyAgICAgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisgICAgICAgIGlmIChicmEgPT0gT1BfQlJBTUlOWkVSTykKKyAgICAgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTTEpJVF9JTU0sIDApOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCAwKTsKKyAgICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSwgYnJhID09IE9QX0JSQVpFUk8gPyBTVFJfUFRSIDogU0xKSVRfSU1NLCAwKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICBpZiAoYnJhID09IE9QX0JSQVpFUk8pCisgICAgeworICAgIGJhY2t0cmFjay0+bWF0Y2hpbmdwYXRoID0gTEFCRUwoKTsKKyAgICBTRVRfTEFCRUwoanVtcCwgYmFja3RyYWNrLT5tYXRjaGluZ3BhdGgpOworICAgIH0KKyAgZWxzZSBpZiAoYnJhID09IE9QX0JSQU1JTlpFUk8pCisgICAgeworICAgIEpVTVBUTyhTTEpJVF9KVU1QLCBiYWNrdHJhY2stPm1hdGNoaW5ncGF0aCk7CisgICAgSlVNUEhFUkUoYnJhanVtcCk7CisgICAgaWYgKGZyYW1lc2l6ZSA+PSAwKQorICAgICAgeworICAgICAgT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0cik7CisgICAgICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+cmV2ZXJ0ZnJhbWVzLCBKVU1QKFNMSklUX0ZBU1RfQ0FMTCkpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgZnJhbWVzaXplICogc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgICB9CisgICAgc2V0X2p1bXBzKGJhY2t0cmFjay0+Y29tbW9uLnRvcGJhY2t0cmFja3MsIExBQkVMKCkpOworICAgIH0KKyAgfQorZWxzZQorICB7CisgIC8qIEFzc2VydE5vdCBpcyBzdWNjZXNzZnVsLiAqLworICBpZiAoZnJhbWVzaXplIDwgMCkKKyAgICB7CisgICAgaWYgKGV4dHJhc2l6ZSA+IDApCisgICAgICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKKworICAgIGlmIChicmEgIT0gT1BfQlJBKQorICAgICAgeworICAgICAgaWYgKGV4dHJhc2l6ZSA9PSAyKQorICAgICAgICBmcmVlX3N0YWNrKGNvbW1vbiwgMSk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTTEpJVF9JTU0sIDApOworICAgICAgfQorICAgIGVsc2UgaWYgKGV4dHJhc2l6ZSA+IDApCisgICAgICBmcmVlX3N0YWNrKGNvbW1vbiwgZXh0cmFzaXplKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSyhleHRyYXNpemUgLSAxKSk7CisgICAgLyogVGhlIHRvcG1vc3QgaXRlbSBzaG91bGQgYmUgMC4gKi8KKyAgICBpZiAoYnJhICE9IE9QX0JSQSkKKyAgICAgIHsKKyAgICAgIGZyZWVfc3RhY2soY29tbW9uLCBmcmFtZXNpemUgKyBleHRyYXNpemUgLSAxKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFNMSklUX0lNTSwgMCk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgZnJlZV9zdGFjayhjb21tb24sIGZyYW1lc2l6ZSArIGV4dHJhc2l6ZSk7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFRNUDEsIDApOworICAgIH0KKworICBpZiAoYnJhID09IE9QX0JSQVpFUk8pCisgICAgYmFja3RyYWNrLT5tYXRjaGluZ3BhdGggPSBMQUJFTCgpOworICBlbHNlIGlmIChicmEgPT0gT1BfQlJBTUlOWkVSTykKKyAgICB7CisgICAgSlVNUFRPKFNMSklUX0pVTVAsIGJhY2t0cmFjay0+bWF0Y2hpbmdwYXRoKTsKKyAgICBKVU1QSEVSRShicmFqdW1wKTsKKyAgICB9CisKKyAgaWYgKGJyYSAhPSBPUF9CUkEpCisgICAgeworICAgIFNMSklUX0FTU0VSVChmb3VuZCA9PSAmYmFja3RyYWNrLT5jb21tb24udG9wYmFja3RyYWNrcyk7CisgICAgc2V0X2p1bXBzKGJhY2t0cmFjay0+Y29tbW9uLnRvcGJhY2t0cmFja3MsIExBQkVMKCkpOworICAgIGJhY2t0cmFjay0+Y29tbW9uLnRvcGJhY2t0cmFja3MgPSBOVUxMOworICAgIH0KKyAgfQorCitpZiAob3Bjb2RlID09IE9QX0FTU0VSVF9OT1QgfHwgb3Bjb2RlID09IE9QX0FTU0VSVEJBQ0tfTk9UKQorICB7CisgIGNvbW1vbi0+bG9jYWxfZXhpdCA9IHNhdmVfbG9jYWxfZXhpdDsKKyAgY29tbW9uLT5xdWl0X2xhYmVsID0gc2F2ZV9xdWl0X2xhYmVsOworICBjb21tb24tPnF1aXQgPSBzYXZlX3F1aXQ7CisgIH0KK2NvbW1vbi0+cG9zaXRpdmVfYXNzZXJ0ID0gc2F2ZV9wb3NpdGl2ZV9hc3NlcnQ7Citjb21tb24tPnRoZW5fdHJhcCA9IHNhdmVfdGhlbl90cmFwOworY29tbW9uLT5hY2NlcHRfbGFiZWwgPSBzYXZlX2FjY2VwdF9sYWJlbDsKK2NvbW1vbi0+cG9zaXRpdmVfYXNzZXJ0X3F1aXQgPSBzYXZlX3Bvc2l0aXZlX2Fzc2VydF9xdWl0OworY29tbW9uLT5hY2NlcHQgPSBzYXZlX2FjY2VwdDsKK3JldHVybiBjYyArIDEgKyBMSU5LX1NJWkU7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBtYXRjaF9vbmNlX2NvbW1vbihjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfVUNIQVIga2V0LCBpbnQgZnJhbWVzaXplLCBpbnQgcHJpdmF0ZV9kYXRhX3B0ciwgQk9PTCBoYXNfYWx0ZXJuYXRpdmVzLCBCT09MIG5lZWRzX2NvbnRyb2xfaGVhZCkKK3sKK0RFRklORV9DT01QSUxFUjsKK2ludCBzdGFja3NpemU7CisKK2lmIChmcmFtZXNpemUgPCAwKQorICB7CisgIGlmIChmcmFtZXNpemUgPT0gbm9fZnJhbWUpCisgICAgT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0cik7CisgIGVsc2UKKyAgICB7CisgICAgc3RhY2tzaXplID0gbmVlZHNfY29udHJvbF9oZWFkID8gMSA6IDA7CisgICAgaWYgKGtldCAhPSBPUF9LRVQgfHwgaGFzX2FsdGVybmF0aXZlcykKKyAgICAgIHN0YWNrc2l6ZSsrOworCisgICAgaWYgKHN0YWNrc2l6ZSA+IDApCisgICAgICBmcmVlX3N0YWNrKGNvbW1vbiwgc3RhY2tzaXplKTsKKyAgICB9CisKKyAgaWYgKG5lZWRzX2NvbnRyb2xfaGVhZCkKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIChrZXQgIT0gT1BfS0VUIHx8IGhhc19hbHRlcm5hdGl2ZXMpID8gc2l6ZW9mKHNsaml0X3N3KSA6IDApOworCisgIC8qIFRNUDIgd2hpY2ggaXMgc2V0IGhlcmUgdXNlZCBieSBPUF9LRVRSTUFYIGJlbG93LiAqLworICBpZiAoa2V0ID09IE9QX0tFVFJNQVgpCisgICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCAwKTsKKyAgZWxzZSBpZiAoa2V0ID09IE9QX0tFVFJNSU4pCisgICAgeworICAgIC8qIE1vdmUgdGhlIFNUUl9QVFIgdG8gdGhlIHByaXZhdGVfZGF0YV9wdHIuICovCisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgMCk7CisgICAgfQorICB9CitlbHNlCisgIHsKKyAgc3RhY2tzaXplID0gKGtldCAhPSBPUF9LRVQgfHwgaGFzX2FsdGVybmF0aXZlcykgPyAyIDogMTsKKyAgT1AyKFNMSklUX0FERCwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0ciwgU0xKSVRfSU1NLCAoZnJhbWVzaXplICsgc3RhY2tzaXplKSAqIHNpemVvZihzbGppdF9zdykpOworICBpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgMCk7CisKKyAgaWYgKGtldCA9PSBPUF9LRVRSTUFYKQorICAgIHsKKyAgICAvKiBUTVAyIHdoaWNoIGlzIHNldCBoZXJlIHVzZWQgYnkgT1BfS0VUUk1BWCBiZWxvdy4gKi8KKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKKyAgICB9CisgIH0KK2lmIChuZWVkc19jb250cm9sX2hlYWQpCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmNvbnRyb2xfaGVhZF9wdHIsIFRNUDEsIDApOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIGludCBtYXRjaF9jYXB0dXJlX2NvbW1vbihjb21waWxlcl9jb21tb24gKmNvbW1vbiwgaW50IHN0YWNrc2l6ZSwgaW50IG9mZnNldCwgaW50IHByaXZhdGVfZGF0YV9wdHIpCit7CitERUZJTkVfQ09NUElMRVI7CisKK2lmIChjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgIT0gMCkKKyAgeworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jYXB0dXJlX2xhc3RfcHRyKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0ciwgU0xKSVRfSU1NLCBvZmZzZXQgPj4gMSk7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2tzaXplKSwgVE1QMSwgMCk7CisgIHN0YWNrc2l6ZSsrOworICB9CitpZiAoY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXRbb2Zmc2V0ID4+IDFdID09IDApCisgIHsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1Iob2Zmc2V0KSk7CisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKG9mZnNldCArIDEpKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSyhzdGFja3NpemUpLCBUTVAxLCAwKTsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrc2l6ZSArIDEpLCBUTVAyLCAwKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1Iob2Zmc2V0ICsgMSksIFNUUl9QVFIsIDApOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQpLCBUTVAxLCAwKTsKKyAgc3RhY2tzaXplICs9IDI7CisgIH0KK3JldHVybiBzdGFja3NpemU7Cit9CisKKy8qCisgIEhhbmRsaW5nIGJyYWNrZXRlZCBleHByZXNzaW9ucyBpcyBwcm9iYWJseSB0aGUgbW9zdCBjb21wbGV4IHBhcnQuCisKKyAgU3RhY2sgbGF5b3V0IG5hbWluZyBjaGFyYWN0ZXJzOgorICAgIFMgLSBQdXNoIHRoZSBjdXJyZW50IFNUUl9QVFIKKyAgICAwIC0gUHVzaCBhIDAgKE5VTEwpCisgICAgQSAtIFB1c2ggdGhlIGN1cnJlbnQgU1RSX1BUUi4gTmVlZGVkIGZvciByZXN0b3JpbmcgdGhlIFNUUl9QVFIKKyAgICAgICAgYmVmb3JlIHRoZSBuZXh0IGFsdGVybmF0aXZlLiBOb3QgcHVzaGVkIGlmIHRoZXJlIGFyZSBubyBhbHRlcm5hdGl2ZXMuCisgICAgTSAtIEFueSB2YWx1ZXMgcHVzaGVkIGJ5IHRoZSBjdXJyZW50IGFsdGVybmF0aXZlLiBDYW4gYmUgZW1wdHksIG9yIGFueXRoaW5nLgorICAgIEMgLSBQdXNoIHRoZSBwcmV2aW91cyBPVkVDVE9SKGkpLCBPVkVDVE9SKGkrMSkgYW5kIE9WRUNUT1JfUFJJVihpKSB0byB0aGUgc3RhY2suCisgICAgTCAtIFB1c2ggdGhlIHByZXZpb3VzIGxvY2FsIChwb2ludGVkIGJ5IGxvY2FscHRyKSB0byB0aGUgc3RhY2sKKyAgICgpIC0gb3Bpb25hbCB2YWx1ZXMgc3RvcmVkIG9uIHRoZSBzdGFjaworICAoKSogLSBvcHRvbmFsLCBjYW4gYmUgc3RvcmVkIG11bHRpcGxlIHRpbWVzCisKKyAgVGhlIGZvbGxvd2luZyBsaXN0IHNob3dzIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gdGVtcGxhdGVzLCB0aGVpciBQQ1JFIGJ5dGUgY29kZXMKKyAgYW5kIHN0YWNrIGxheW91dCBzdXBwb3J0ZWQgYnkgcGNyZS1zbGppdC4KKworICAoPzopICAgICAgICAgICAgICAgICAgICAgT1BfQlJBICAgICB8IE9QX0tFVCAgICAgICAgICAgICAgICBBIE0KKyAgKCkgICAgICAgICAgICAgICAgICAgICAgIE9QX0NCUkEgICAgfCBPUF9LRVQgICAgICAgICAgICAgICAgQyBNCisgICg/OikrICAgICAgICAgICAgICAgICAgICBPUF9CUkEgICAgIHwgT1BfS0VUUk1BWCAgICAgICAgMCAgIEEgTSBTICAgKCBBIE0gUyApKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BfU0JSQSAgICB8IE9QX0tFVFJNQVggICAgICAgIDAgICBMIE0gUyAgICggTCBNIFMgKSoKKyAgKD86KSs/ICAgICAgICAgICAgICAgICAgIE9QX0JSQSAgICAgfCBPUF9LRVRSTUlOICAgICAgICAwICAgQSBNIFMgICAoIEEgTSBTICkqCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPUF9TQlJBICAgIHwgT1BfS0VUUk1JTiAgICAgICAgMCAgIEwgTSBTICAgKCBMIE0gUyApKgorICAoKSsgICAgICAgICAgICAgICAgICAgICAgT1BfQ0JSQSAgICB8IE9QX0tFVFJNQVggICAgICAgIDAgICBDIE0gUyAgICggQyBNIFMgKSoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QX1NDQlJBICAgfCBPUF9LRVRSTUFYICAgICAgICAwICAgQyBNIFMgICAoIEMgTSBTICkqCisgICgpKz8gICAgICAgICAgICAgICAgICAgICBPUF9DQlJBICAgIHwgT1BfS0VUUk1JTiAgICAgICAgMCAgIEMgTSBTICAgKCBDIE0gUyApKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgT1BfU0NCUkEgICB8IE9QX0tFVFJNSU4gICAgICAgIDAgICBDIE0gUyAgICggQyBNIFMgKSoKKyAgKD86KT8gICAgT1BfQlJBWkVSTyAgICB8IE9QX0JSQSAgICAgfCBPUF9LRVQgICAgICAgICAgICBTICggQSBNIDAgKQorICAoPzopPz8gICBPUF9CUkFNSU5aRVJPIHwgT1BfQlJBICAgICB8IE9QX0tFVCAgICAgICAgICAgIFMgKCBBIE0gMCApCisgICgpPyAgICAgIE9QX0JSQVpFUk8gICAgfCBPUF9DQlJBICAgIHwgT1BfS0VUICAgICAgICAgICAgUyAoIEMgTSAwICkKKyAgKCk/PyAgICAgT1BfQlJBTUlOWkVSTyB8IE9QX0NCUkEgICAgfCBPUF9LRVQgICAgICAgICAgICBTICggQyBNIDAgKQorICAoPzopKiAgICBPUF9CUkFaRVJPICAgIHwgT1BfQlJBICAgICB8IE9QX0tFVFJNQVggICAgICBTIDAgKCBBIE0gUyApKgorICAgICAgICAgICBPUF9CUkFaRVJPICAgIHwgT1BfU0JSQSAgICB8IE9QX0tFVFJNQVggICAgICBTIDAgKCBMIE0gUyApKgorICAoPzopKj8gICBPUF9CUkFNSU5aRVJPIHwgT1BfQlJBICAgICB8IE9QX0tFVFJNSU4gICAgICBTIDAgKCBBIE0gUyApKgorICAgICAgICAgICBPUF9CUkFNSU5aRVJPIHwgT1BfU0JSQSAgICB8IE9QX0tFVFJNSU4gICAgICBTIDAgKCBMIE0gUyApKgorICAoKSogICAgICBPUF9CUkFaRVJPICAgIHwgT1BfQ0JSQSAgICB8IE9QX0tFVFJNQVggICAgICBTIDAgKCBDIE0gUyApKgorICAgICAgICAgICBPUF9CUkFaRVJPICAgIHwgT1BfU0NCUkEgICB8IE9QX0tFVFJNQVggICAgICBTIDAgKCBDIE0gUyApKgorICAoKSo/ICAgICBPUF9CUkFNSU5aRVJPIHwgT1BfQ0JSQSAgICB8IE9QX0tFVFJNSU4gICAgICBTIDAgKCBDIE0gUyApKgorICAgICAgICAgICBPUF9CUkFNSU5aRVJPIHwgT1BfU0NCUkEgICB8IE9QX0tFVFJNSU4gICAgICBTIDAgKCBDIE0gUyApKgorCisKKyAgU3RhY2sgbGF5b3V0IG5hbWluZyBjaGFyYWN0ZXJzOgorICAgIEEgLSBQdXNoIHRoZSBhbHRlcm5hdGl2ZSBpbmRleCAoc3RhcnRpbmcgZnJvbSAwKSBvbiB0aGUgc3RhY2suCisgICAgICAgIE5vdCBwdXNoZWQgaWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRpdmVzLgorICAgIE0gLSBBbnkgdmFsdWVzIHB1c2hlZCBieSB0aGUgY3VycmVudCBhbHRlcm5hdGl2ZS4gQ2FuIGJlIGVtcHR5LCBvciBhbnl0aGluZy4KKworICBUaGUgbmV4dCBsaXN0IHNob3dzIHRoZSBwb3NzaWJsZSBjb250ZW50IG9mIGEgYnJhY2tldDoKKyAgKHwpICAgICBPUF8qQlJBICAgIHwgT1BfQUxUIC4uLiAgICAgICAgIE0gQQorICAoPygpfCkgIE9QXypDT05EICAgfCBPUF9BTFQgICAgICAgICAgICAgTSBBCisgICg/PnwpICAgT1BfT05DRSAgICB8IE9QX0FMVCAuLi4gICAgICAgICBbc3RhY2sgdHJhY2VdIE0gQQorICAoPz58KSAgIE9QX09OQ0VfTkMgfCBPUF9BTFQgLi4uICAgICAgICAgW3N0YWNrIHRyYWNlXSBNIEEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yIG5vdGhpbmcsIGlmIHRyYWNlIGlzIHVubmVjZXNzYXJ5CisqLworCitzdGF0aWMgUENSRTJfU1BUUiBjb21waWxlX2JyYWNrZXRfbWF0Y2hpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBiYWNrdHJhY2tfY29tbW9uICpwYXJlbnQpCit7CitERUZJTkVfQ09NUElMRVI7CitiYWNrdHJhY2tfY29tbW9uICpiYWNrdHJhY2s7CitQQ1JFMl9VQ0hBUiBvcGNvZGU7CitpbnQgcHJpdmF0ZV9kYXRhX3B0ciA9IDA7CitpbnQgb2Zmc2V0ID0gMDsKK2ludCBpLCBzdGFja3NpemU7CitpbnQgcmVwZWF0X3B0ciA9IDAsIHJlcGVhdF9sZW5ndGggPSAwOworaW50IHJlcGVhdF90eXBlID0gMCwgcmVwZWF0X2NvdW50ID0gMDsKK1BDUkUyX1NQVFIgY2NiZWdpbjsKK1BDUkUyX1NQVFIgbWF0Y2hpbmdwYXRoOworUENSRTJfU1BUUiBzbG90OworUENSRTJfVUNIQVIgYnJhID0gT1BfQlJBOworUENSRTJfVUNIQVIga2V0OworYXNzZXJ0X2JhY2t0cmFjayAqYXNzZXJ0OworQk9PTCBoYXNfYWx0ZXJuYXRpdmVzOworQk9PTCBuZWVkc19jb250cm9sX2hlYWQgPSBGQUxTRTsKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wOworc3RydWN0IHNsaml0X2p1bXAgKnNraXA7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKnJtYXhfbGFiZWwgPSBOVUxMOworc3RydWN0IHNsaml0X2p1bXAgKmJyYW1pbnplcm8gPSBOVUxMOworCitQVVNIX0JBQ0tUUkFDSyhzaXplb2YoYnJhY2tldF9iYWNrdHJhY2spLCBjYywgTlVMTCk7CisKK2lmICgqY2MgPT0gT1BfQlJBWkVSTyB8fCAqY2MgPT0gT1BfQlJBTUlOWkVSTykKKyAgeworICBicmEgPSAqY2M7CisgIGNjKys7CisgIG9wY29kZSA9ICpjYzsKKyAgfQorCitvcGNvZGUgPSAqY2M7CitjY2JlZ2luID0gY2M7CittYXRjaGluZ3BhdGggPSBicmFja2V0ZW5kKGNjKSAtIDEgLSBMSU5LX1NJWkU7CitrZXQgPSAqbWF0Y2hpbmdwYXRoOworaWYgKGtldCA9PSBPUF9LRVQgJiYgUFJJVkFURV9EQVRBKG1hdGNoaW5ncGF0aCkgIT0gMCkKKyAgeworICByZXBlYXRfcHRyID0gUFJJVkFURV9EQVRBKG1hdGNoaW5ncGF0aCk7CisgIHJlcGVhdF9sZW5ndGggPSBQUklWQVRFX0RBVEEobWF0Y2hpbmdwYXRoICsgMSk7CisgIHJlcGVhdF90eXBlID0gUFJJVkFURV9EQVRBKG1hdGNoaW5ncGF0aCArIDIpOworICByZXBlYXRfY291bnQgPSBQUklWQVRFX0RBVEEobWF0Y2hpbmdwYXRoICsgMyk7CisgIFNMSklUX0FTU0VSVChyZXBlYXRfbGVuZ3RoICE9IDAgJiYgcmVwZWF0X3R5cGUgIT0gMCAmJiByZXBlYXRfY291bnQgIT0gMCk7CisgIGlmIChyZXBlYXRfdHlwZSA9PSBPUF9VUFRPKQorICAgIGtldCA9IE9QX0tFVFJNQVg7CisgIGlmIChyZXBlYXRfdHlwZSA9PSBPUF9NSU5VUFRPKQorICAgIGtldCA9IE9QX0tFVFJNSU47CisgIH0KKworbWF0Y2hpbmdwYXRoID0gY2NiZWdpbiArIDEgKyBMSU5LX1NJWkU7CitTTEpJVF9BU1NFUlQoa2V0ID09IE9QX0tFVCB8fCBrZXQgPT0gT1BfS0VUUk1BWCB8fCBrZXQgPT0gT1BfS0VUUk1JTik7CitTTEpJVF9BU1NFUlQoISgoYnJhID09IE9QX0JSQVpFUk8gJiYga2V0ID09IE9QX0tFVFJNSU4pIHx8IChicmEgPT0gT1BfQlJBTUlOWkVSTyAmJiBrZXQgPT0gT1BfS0VUUk1BWCkpKTsKK2NjICs9IEdFVChjYywgMSk7CisKK2hhc19hbHRlcm5hdGl2ZXMgPSAqY2MgPT0gT1BfQUxUOworaWYgKFNMSklUX1VOTElLRUxZKG9wY29kZSA9PSBPUF9DT05EIHx8IG9wY29kZSA9PSBPUF9TQ09ORCkpCisgIHsKKyAgU0xKSVRfQ09NUElMRV9BU1NFUlQoT1BfRE5SUkVGID09IE9QX1JSRUYgKyAxICYmIE9QX0ZBTFNFID09IE9QX1JSRUYgKyAyICYmIE9QX1RSVUUgPT0gT1BfUlJFRiArIDMsCisgICAgY29tcGlsZV90aW1lX2NoZWNrc19tdXN0X2JlX2dyb3VwZWRfdG9nZXRoZXIpOworICBoYXNfYWx0ZXJuYXRpdmVzID0gKCgqbWF0Y2hpbmdwYXRoID49IE9QX1JSRUYgJiYgKm1hdGNoaW5ncGF0aCA8PSBPUF9UUlVFKSB8fCAqbWF0Y2hpbmdwYXRoID09IE9QX0ZBSUwpID8gRkFMU0UgOiBUUlVFOworICB9CisKK2lmIChTTEpJVF9VTkxJS0VMWShvcGNvZGUgPT0gT1BfQ09ORCkgJiYgKCpjYyA9PSBPUF9LRVRSTUFYIHx8ICpjYyA9PSBPUF9LRVRSTUlOKSkKKyAgb3Bjb2RlID0gT1BfU0NPTkQ7CitpZiAoU0xKSVRfVU5MSUtFTFkob3Bjb2RlID09IE9QX09OQ0VfTkMpKQorICBvcGNvZGUgPSBPUF9PTkNFOworCitpZiAob3Bjb2RlID09IE9QX0NCUkEgfHwgb3Bjb2RlID09IE9QX1NDQlJBKQorICB7CisgIC8qIENhcHR1cmluZyBicmFja2V0cyBoYXMgYSBwcmUtYWxsb2NhdGVkIHNwYWNlLiAqLworICBvZmZzZXQgPSBHRVQyKGNjYmVnaW4sIDEgKyBMSU5LX1NJWkUpOworICBpZiAoY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXRbb2Zmc2V0XSA9PSAwKQorICAgIHsKKyAgICBwcml2YXRlX2RhdGFfcHRyID0gT1ZFQ1RPUl9QUklWKG9mZnNldCk7CisgICAgb2Zmc2V0IDw8PSAxOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBvZmZzZXQgPDw9IDE7CisgICAgcHJpdmF0ZV9kYXRhX3B0ciA9IE9WRUNUT1Iob2Zmc2V0KTsKKyAgICB9CisgIEJBQ0tUUkFDS19BUyhicmFja2V0X2JhY2t0cmFjayktPnByaXZhdGVfZGF0YV9wdHIgPSBwcml2YXRlX2RhdGFfcHRyOworICBtYXRjaGluZ3BhdGggKz0gSU1NMl9TSVpFOworICB9CitlbHNlIGlmIChvcGNvZGUgPT0gT1BfT05DRSB8fCBvcGNvZGUgPT0gT1BfU0JSQSB8fCBvcGNvZGUgPT0gT1BfU0NPTkQpCisgIHsKKyAgLyogT3RoZXIgYnJhY2tldHMgc2ltcGx5IGFsbG9jYXRlIHRoZSBuZXh0IGVudHJ5LiAqLworICBwcml2YXRlX2RhdGFfcHRyID0gUFJJVkFURV9EQVRBKGNjYmVnaW4pOworICBTTEpJVF9BU1NFUlQocHJpdmF0ZV9kYXRhX3B0ciAhPSAwKTsKKyAgQkFDS1RSQUNLX0FTKGJyYWNrZXRfYmFja3RyYWNrKS0+cHJpdmF0ZV9kYXRhX3B0ciA9IHByaXZhdGVfZGF0YV9wdHI7CisgIGlmIChvcGNvZGUgPT0gT1BfT05DRSkKKyAgICBCQUNLVFJBQ0tfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmZyYW1lc2l6ZSA9IGdldF9mcmFtZXNpemUoY29tbW9uLCBjY2JlZ2luLCBOVUxMLCBGQUxTRSwgJm5lZWRzX2NvbnRyb2xfaGVhZCk7CisgIH0KKworLyogSW5zdHJ1Y3Rpb25zIGJlZm9yZSB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUuICovCitzdGFja3NpemUgPSAwOworaWYgKGtldCA9PSBPUF9LRVRSTUFYIHx8IChrZXQgPT0gT1BfS0VUUk1JTiAmJiBicmEgIT0gT1BfQlJBTUlOWkVSTykpCisgIHN0YWNrc2l6ZSsrOworaWYgKGJyYSA9PSBPUF9CUkFaRVJPKQorICBzdGFja3NpemUrKzsKKworaWYgKHN0YWNrc2l6ZSA+IDApCisgIGFsbG9jYXRlX3N0YWNrKGNvbW1vbiwgc3RhY2tzaXplKTsKKworc3RhY2tzaXplID0gMDsKK2lmIChrZXQgPT0gT1BfS0VUUk1BWCB8fCAoa2V0ID09IE9QX0tFVFJNSU4gJiYgYnJhICE9IE9QX0JSQU1JTlpFUk8pKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2tzaXplKSwgU0xKSVRfSU1NLCAwKTsKKyAgc3RhY2tzaXplKys7CisgIH0KKworaWYgKGJyYSA9PSBPUF9CUkFaRVJPKQorICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrc2l6ZSksIFNUUl9QVFIsIDApOworCitpZiAoYnJhID09IE9QX0JSQU1JTlpFUk8pCisgIHsKKyAgLyogVGhpcyBpcyBhIGJhY2t0cmFjayBwYXRoISAoU2luY2UgdGhlIHRyeS1wYXRoIG9mIE9QX0JSQU1JTlpFUk8gbWF0Y2hlcyB0byB0aGUgZW1wdHkgc3RyaW5nKSAqLworICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKKyAgaWYgKGtldCAhPSBPUF9LRVRSTUlOKQorICAgIHsKKyAgICBmcmVlX3N0YWNrKGNvbW1vbiwgMSk7CisgICAgYnJhbWluemVybyA9IENNUChTTEpJVF9FUVVBTCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCAwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgaWYgKG9wY29kZSA9PSBPUF9PTkNFIHx8IG9wY29kZSA+PSBPUF9TQlJBKQorICAgICAgeworICAgICAganVtcCA9IENNUChTTEpJVF9OT1RfRVFVQUwsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgMCk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpKTsKKyAgICAgIC8qIE5vdGhpbmcgc3RvcmVkIGR1cmluZyB0aGUgZmlyc3QgcnVuLiAqLworICAgICAgc2tpcCA9IEpVTVAoU0xKSVRfSlVNUCk7CisgICAgICBKVU1QSEVSRShqdW1wKTsKKyAgICAgIC8qIENoZWNraW5nIHplcm8tbGVuZ3RoIGl0ZXJhdGlvbi4gKi8KKyAgICAgIGlmIChvcGNvZGUgIT0gT1BfT05DRSB8fCBCQUNLVFJBQ0tfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmZyYW1lc2l6ZSA8IDApCisgICAgICAgIHsKKyAgICAgICAgLyogV2hlbiB3ZSBjb21lIGZyb20gb3V0c2lkZSwgcHJpdmF0ZV9kYXRhX3B0ciBjb250YWlucyB0aGUgcHJldmlvdXMgU1RSX1BUUi4gKi8KKyAgICAgICAgYnJhbWluemVybyA9IENNUChTTEpJVF9FUVVBTCwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgLyogRXhjZXB0IHdoZW4gdGhlIHdob2xlIHN0YWNrIGZyYW1lIG11c3QgYmUgc2F2ZWQuICovCisgICAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyKTsKKyAgICAgICAgYnJhbWluemVybyA9IENNUChTTEpJVF9FUVVBTCwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgKEJBQ0tUUkFDS19BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplICsgMSkgKiBzaXplb2Yoc2xqaXRfc3cpKTsKKyAgICAgICAgfQorICAgICAgSlVNUEhFUkUoc2tpcCk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAganVtcCA9IENNUChTTEpJVF9OT1RfRVFVQUwsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgMCk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpKTsKKyAgICAgIEpVTVBIRVJFKGp1bXApOworICAgICAgfQorICAgIH0KKyAgfQorCitpZiAocmVwZWF0X3R5cGUgIT0gMCkKKyAgeworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcmVwZWF0X3B0ciwgU0xKSVRfSU1NLCByZXBlYXRfY291bnQpOworICBpZiAocmVwZWF0X3R5cGUgPT0gT1BfRVhBQ1QpCisgICAgcm1heF9sYWJlbCA9IExBQkVMKCk7CisgIH0KKworaWYgKGtldCA9PSBPUF9LRVRSTUlOKQorICBCQUNLVFJBQ0tfQVMoYnJhY2tldF9iYWNrdHJhY2spLT5yZWN1cnNpdmVfbWF0Y2hpbmdwYXRoID0gTEFCRUwoKTsKKworaWYgKGtldCA9PSBPUF9LRVRSTUFYKQorICB7CisgIHJtYXhfbGFiZWwgPSBMQUJFTCgpOworICBpZiAoaGFzX2FsdGVybmF0aXZlcyAmJiBvcGNvZGUgIT0gT1BfT05DRSAmJiBvcGNvZGUgPCBPUF9TQlJBICYmIHJlcGVhdF90eXBlID09IDApCisgICAgQkFDS1RSQUNLX0FTKGJyYWNrZXRfYmFja3RyYWNrKS0+YWx0ZXJuYXRpdmVfbWF0Y2hpbmdwYXRoID0gcm1heF9sYWJlbDsKKyAgfQorCisvKiBIYW5kbGluZyBjYXB0dXJpbmcgYnJhY2tldHMgYW5kIGFsdGVybmF0aXZlcy4gKi8KK2lmIChvcGNvZGUgPT0gT1BfT05DRSkKKyAgeworICBzdGFja3NpemUgPSAwOworICBpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyKTsKKyAgICBzdGFja3NpemUrKzsKKyAgICB9CisKKyAgaWYgKEJBQ0tUUkFDS19BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplIDwgMCkKKyAgICB7CisgICAgLyogTmVpdGhlciBjYXB0dXJpbmcgYnJhY2tldHMgbm9yIHJlY3Vyc2lvbnMgYXJlIGZvdW5kIGluIHRoZSBibG9jay4gKi8KKyAgICBpZiAoa2V0ID09IE9QX0tFVFJNSU4pCisgICAgICB7CisgICAgICBzdGFja3NpemUgKz0gMjsKKyAgICAgIGlmICghbmVlZHNfY29udHJvbF9oZWFkKQorICAgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0cik7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgaWYgKEJBQ0tUUkFDS19BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplID09IG5vX2ZyYW1lKQorICAgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0ciwgU1RBQ0tfVE9QLCAwKTsKKyAgICAgIGlmIChrZXQgPT0gT1BfS0VUUk1BWCB8fCBoYXNfYWx0ZXJuYXRpdmVzKQorICAgICAgICBzdGFja3NpemUrKzsKKyAgICAgIH0KKworICAgIGlmIChzdGFja3NpemUgPiAwKQorICAgICAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCBzdGFja3NpemUpOworCisgICAgc3RhY2tzaXplID0gMDsKKyAgICBpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICAgICAgeworICAgICAgc3RhY2tzaXplKys7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBUTVAyLCAwKTsKKyAgICAgIH0KKworICAgIGlmIChrZXQgPT0gT1BfS0VUUk1JTikKKyAgICAgIHsKKyAgICAgIGlmIChuZWVkc19jb250cm9sX2hlYWQpCisgICAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2tzaXplKSwgU1RSX1BUUiwgMCk7CisgICAgICBpZiAoQkFDS1RSQUNLX0FTKGJyYWNrZXRfYmFja3RyYWNrKS0+dS5mcmFtZXNpemUgPT0gbm9fZnJhbWUpCisgICAgICAgIE9QMihTTEpJVF9TVUIsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyLCBTVEFDS19UT1AsIDAsIFNMSklUX0lNTSwgbmVlZHNfY29udHJvbF9oZWFkID8gKDIgKiBzaXplb2Yoc2xqaXRfc3cpKSA6IHNpemVvZihzbGppdF9zdykpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSyhzdGFja3NpemUgKyAxKSwgVE1QMiwgMCk7CisgICAgICB9CisgICAgZWxzZSBpZiAoa2V0ID09IE9QX0tFVFJNQVggfHwgaGFzX2FsdGVybmF0aXZlcykKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2tzaXplKSwgU1RSX1BUUiwgMCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgIGlmIChrZXQgIT0gT1BfS0VUIHx8IGhhc19hbHRlcm5hdGl2ZXMpCisgICAgICBzdGFja3NpemUrKzsKKworICAgIHN0YWNrc2l6ZSArPSBCQUNLVFJBQ0tfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmZyYW1lc2l6ZSArIDE7CisgICAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCBzdGFja3NpemUpOworCisgICAgaWYgKG5lZWRzX2NvbnRyb2xfaGVhZCkKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFRNUDIsIDApOworCisgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIpOworICAgIE9QMihTTEpJVF9TVUIsIFRNUDIsIDAsIFNUQUNLX1RPUCwgMCwgU0xKSVRfSU1NLCBzdGFja3NpemUgKiBzaXplb2Yoc2xqaXRfc3cpKTsKKworICAgIHN0YWNrc2l6ZSA9IG5lZWRzX2NvbnRyb2xfaGVhZCA/IDEgOiAwOworICAgIGlmIChrZXQgIT0gT1BfS0VUIHx8IGhhc19hbHRlcm5hdGl2ZXMpCisgICAgICB7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrc2l6ZSksIFNUUl9QVFIsIDApOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFRNUDIsIDApOworICAgICAgc3RhY2tzaXplKys7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrc2l6ZSksIFRNUDEsIDApOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyLCBUTVAyLCAwKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2tzaXplKSwgVE1QMSwgMCk7CisgICAgICB9CisgICAgaW5pdF9mcmFtZShjb21tb24sIGNjYmVnaW4sIE5VTEwsIEJBQ0tUUkFDS19BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplICsgc3RhY2tzaXplLCBzdGFja3NpemUgKyAxLCBGQUxTRSk7CisgICAgfQorICB9CitlbHNlIGlmIChvcGNvZGUgPT0gT1BfQ0JSQSB8fCBvcGNvZGUgPT0gT1BfU0NCUkEpCisgIHsKKyAgLyogU2F2aW5nIHRoZSBwcmV2aW91cyB2YWx1ZXMuICovCisgIGlmIChjb21tb24tPm9wdGltaXplZF9jYnJhY2tldFtvZmZzZXQgPj4gMV0gIT0gMCkKKyAgICB7CisgICAgU0xKSVRfQVNTRVJUKHByaXZhdGVfZGF0YV9wdHIgPT0gT1ZFQ1RPUihvZmZzZXQpKTsKKyAgICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIDIpOworICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0ciArIHNpemVvZihzbGppdF9zdykpOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyLCBTVFJfUFRSLCAwKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBUTVAxLCAwKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpLCBUTVAyLCAwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIpOworICAgIGFsbG9jYXRlX3N0YWNrKGNvbW1vbiwgMSk7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNUUl9QVFIsIDApOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFRNUDIsIDApOworICAgIH0KKyAgfQorZWxzZSBpZiAob3Bjb2RlID09IE9QX1NCUkEgfHwgb3Bjb2RlID09IE9QX1NDT05EKQorICB7CisgIC8qIFNhdmluZyB0aGUgcHJldmlvdXMgdmFsdWUuICovCisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyKTsKKyAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCAxKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNUUl9QVFIsIDApOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBUTVAyLCAwKTsKKyAgfQorZWxzZSBpZiAoaGFzX2FsdGVybmF0aXZlcykKKyAgeworICAvKiBQdXNoaW5nIHRoZSBzdGFydGluZyBzdHJpbmcgcG9pbnRlci4gKi8KKyAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCAxKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSwgU1RSX1BUUiwgMCk7CisgIH0KKworLyogR2VuZXJhdGluZyBjb2RlIGZvciB0aGUgZmlyc3QgYWx0ZXJuYXRpdmUuICovCitpZiAob3Bjb2RlID09IE9QX0NPTkQgfHwgb3Bjb2RlID09IE9QX1NDT05EKQorICB7CisgIGlmICgqbWF0Y2hpbmdwYXRoID09IE9QX0NSRUYpCisgICAgeworICAgIFNMSklUX0FTU0VSVChoYXNfYWx0ZXJuYXRpdmVzKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgJihCQUNLVFJBQ0tfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmNvbmRmYWlsZWQpLAorICAgICAgQ01QKFNMSklUX0VRVUFMLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihHRVQyKG1hdGNoaW5ncGF0aCwgMSkgPDwgMSksIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKDEpKSk7CisgICAgbWF0Y2hpbmdwYXRoICs9IDEgKyBJTU0yX1NJWkU7CisgICAgfQorICBlbHNlIGlmICgqbWF0Y2hpbmdwYXRoID09IE9QX0ROQ1JFRikKKyAgICB7CisgICAgU0xKSVRfQVNTRVJUKGhhc19hbHRlcm5hdGl2ZXMpOworCisgICAgaSA9IEdFVDIobWF0Y2hpbmdwYXRoLCAxICsgSU1NMl9TSVpFKTsKKyAgICBzbG90ID0gY29tbW9uLT5uYW1lX3RhYmxlICsgR0VUMihtYXRjaGluZ3BhdGgsIDEpICogY29tbW9uLT5uYW1lX2VudHJ5X3NpemU7CisgICAgT1AxKFNMSklUX01PViwgVE1QMywgMCwgU1RSX1BUUiwgMCk7CisgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1IoMSkpOworICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgVE1QMiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1IoR0VUMihzbG90LCAwKSA8PCAxKSwgVE1QMSwgMCk7CisgICAgc2xvdCArPSBjb21tb24tPm5hbWVfZW50cnlfc2l6ZTsKKyAgICBpLS07CisgICAgd2hpbGUgKGktLSA+IDApCisgICAgICB7CisgICAgICBPUDIoU0xKSVRfU1VCLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihHRVQyKHNsb3QsIDApIDw8IDEpLCBUTVAxLCAwKTsKKyAgICAgIE9QMihTTEpJVF9PUiB8IFNMSklUX1NFVF9FLCBUTVAyLCAwLCBUTVAyLCAwLCBTVFJfUFRSLCAwKTsKKyAgICAgIHNsb3QgKz0gY29tbW9uLT5uYW1lX2VudHJ5X3NpemU7CisgICAgICB9CisgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgVE1QMywgMCk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsICYoQkFDS1RSQUNLX0FTKGJyYWNrZXRfYmFja3RyYWNrKS0+dS5jb25kZmFpbGVkKSwgSlVNUChTTEpJVF9aRVJPKSk7CisgICAgbWF0Y2hpbmdwYXRoICs9IDEgKyAyICogSU1NMl9TSVpFOworICAgIH0KKyAgZWxzZSBpZiAoKCptYXRjaGluZ3BhdGggPj0gT1BfUlJFRiAmJiAqbWF0Y2hpbmdwYXRoIDw9IE9QX1RSVUUpIHx8ICptYXRjaGluZ3BhdGggPT0gT1BfRkFJTCkKKyAgICB7CisgICAgLyogTmV2ZXIgaGFzIG90aGVyIGNhc2UuICovCisgICAgQkFDS1RSQUNLX0FTKGJyYWNrZXRfYmFja3RyYWNrKS0+dS5jb25kZmFpbGVkID0gTlVMTDsKKyAgICBTTEpJVF9BU1NFUlQoIWhhc19hbHRlcm5hdGl2ZXMpOworCisgICAgaWYgKCptYXRjaGluZ3BhdGggPT0gT1BfVFJVRSkKKyAgICAgIHsKKyAgICAgIHN0YWNrc2l6ZSA9IDE7CisgICAgICBtYXRjaGluZ3BhdGgrKzsKKyAgICAgIH0KKyAgICBlbHNlIGlmICgqbWF0Y2hpbmdwYXRoID09IE9QX0ZBTFNFIHx8ICptYXRjaGluZ3BhdGggPT0gT1BfRkFJTCkKKyAgICAgIHN0YWNrc2l6ZSA9IDA7CisgICAgZWxzZSBpZiAoKm1hdGNoaW5ncGF0aCA9PSBPUF9SUkVGKQorICAgICAgeworICAgICAgc3RhY2tzaXplID0gR0VUMihtYXRjaGluZ3BhdGgsIDEpOworICAgICAgaWYgKGNvbW1vbi0+Y3VycmVudGVudHJ5ID09IE5VTEwpCisgICAgICAgIHN0YWNrc2l6ZSA9IDA7CisgICAgICBlbHNlIGlmIChzdGFja3NpemUgPT0gUlJFRl9BTlkpCisgICAgICAgIHN0YWNrc2l6ZSA9IDE7CisgICAgICBlbHNlIGlmIChjb21tb24tPmN1cnJlbnRlbnRyeS0+c3RhcnQgPT0gMCkKKyAgICAgICAgc3RhY2tzaXplID0gc3RhY2tzaXplID09IDA7CisgICAgICBlbHNlCisgICAgICAgIHN0YWNrc2l6ZSA9IHN0YWNrc2l6ZSA9PSAoaW50KUdFVDIoY29tbW9uLT5zdGFydCwgY29tbW9uLT5jdXJyZW50ZW50cnktPnN0YXJ0ICsgMSArIExJTktfU0laRSk7CisKKyAgICAgIGlmIChzdGFja3NpemUgIT0gMCkKKyAgICAgICAgbWF0Y2hpbmdwYXRoICs9IDEgKyBJTU0yX1NJWkU7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgaWYgKGNvbW1vbi0+Y3VycmVudGVudHJ5ID09IE5VTEwgfHwgY29tbW9uLT5jdXJyZW50ZW50cnktPnN0YXJ0ID09IDApCisgICAgICAgIHN0YWNrc2l6ZSA9IDA7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgc3RhY2tzaXplID0gR0VUMihtYXRjaGluZ3BhdGgsIDEgKyBJTU0yX1NJWkUpOworICAgICAgICBzbG90ID0gY29tbW9uLT5uYW1lX3RhYmxlICsgR0VUMihtYXRjaGluZ3BhdGgsIDEpICogY29tbW9uLT5uYW1lX2VudHJ5X3NpemU7CisgICAgICAgIGkgPSAoaW50KUdFVDIoY29tbW9uLT5zdGFydCwgY29tbW9uLT5jdXJyZW50ZW50cnktPnN0YXJ0ICsgMSArIExJTktfU0laRSk7CisgICAgICAgIHdoaWxlIChzdGFja3NpemUgPiAwKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoKGludClHRVQyKHNsb3QsIDApID09IGkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBzbG90ICs9IGNvbW1vbi0+bmFtZV9lbnRyeV9zaXplOworICAgICAgICAgIHN0YWNrc2l6ZS0tOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBpZiAoc3RhY2tzaXplICE9IDApCisgICAgICAgIG1hdGNoaW5ncGF0aCArPSAxICsgMiAqIElNTTJfU0laRTsKKyAgICAgIH0KKworICAgICAgLyogVGhlIHN0YWNrc2l6ZSA9PSAwIGlzIGEgY29tbW9uICJlbHNlIiBjYXNlLiAqLworICAgICAgaWYgKHN0YWNrc2l6ZSA9PSAwKQorICAgICAgICB7CisgICAgICAgIGlmICgqY2MgPT0gT1BfQUxUKQorICAgICAgICAgIHsKKyAgICAgICAgICBtYXRjaGluZ3BhdGggPSBjYyArIDEgKyBMSU5LX1NJWkU7CisgICAgICAgICAgY2MgKz0gR0VUKGNjLCAxKTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBtYXRjaGluZ3BhdGggPSBjYzsKKyAgICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBTTEpJVF9BU1NFUlQoaGFzX2FsdGVybmF0aXZlcyAmJiAqbWF0Y2hpbmdwYXRoID49IE9QX0FTU0VSVCAmJiAqbWF0Y2hpbmdwYXRoIDw9IE9QX0FTU0VSVEJBQ0tfTk9UKTsKKyAgICAvKiBTaW1pbGFyIGNvZGUgYXMgUFVTSF9CQUNLVFJBQ0sgbWFjcm8uICovCisgICAgYXNzZXJ0ID0gc2xqaXRfYWxsb2NfbWVtb3J5KGNvbXBpbGVyLCBzaXplb2YoYXNzZXJ0X2JhY2t0cmFjaykpOworICAgIGlmIChTTEpJVF9VTkxJS0VMWShzbGppdF9nZXRfY29tcGlsZXJfZXJyb3IoY29tcGlsZXIpKSkKKyAgICAgIHJldHVybiBOVUxMOworICAgIG1lbXNldChhc3NlcnQsIDAsIHNpemVvZihhc3NlcnRfYmFja3RyYWNrKSk7CisgICAgYXNzZXJ0LT5jb21tb24uY2MgPSBtYXRjaGluZ3BhdGg7CisgICAgQkFDS1RSQUNLX0FTKGJyYWNrZXRfYmFja3RyYWNrKS0+dS5hc3NlcnQgPSBhc3NlcnQ7CisgICAgbWF0Y2hpbmdwYXRoID0gY29tcGlsZV9hc3NlcnRfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgbWF0Y2hpbmdwYXRoLCBhc3NlcnQsIFRSVUUpOworICAgIH0KKyAgfQorCitjb21waWxlX21hdGNoaW5ncGF0aChjb21tb24sIG1hdGNoaW5ncGF0aCwgY2MsIGJhY2t0cmFjayk7CitpZiAoU0xKSVRfVU5MSUtFTFkoc2xqaXRfZ2V0X2NvbXBpbGVyX2Vycm9yKGNvbXBpbGVyKSkpCisgIHJldHVybiBOVUxMOworCitpZiAob3Bjb2RlID09IE9QX09OQ0UpCisgIG1hdGNoX29uY2VfY29tbW9uKGNvbW1vbiwga2V0LCBCQUNLVFJBQ0tfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmZyYW1lc2l6ZSwgcHJpdmF0ZV9kYXRhX3B0ciwgaGFzX2FsdGVybmF0aXZlcywgbmVlZHNfY29udHJvbF9oZWFkKTsKKworc3RhY2tzaXplID0gMDsKK2lmIChyZXBlYXRfdHlwZSA9PSBPUF9NSU5VUFRPKQorICB7CisgIC8qIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIGNvdW50ZXIuIFRNUDIgd2lsbCBiZSB1c2VkIGJlbG93LiAqLworICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcmVwZWF0X3B0cik7CisgIHN0YWNrc2l6ZSsrOworICB9CitpZiAoa2V0ICE9IE9QX0tFVCB8fCBicmEgIT0gT1BfQlJBKQorICBzdGFja3NpemUrKzsKK2lmIChvZmZzZXQgIT0gMCkKKyAgeworICBpZiAoY29tbW9uLT5jYXB0dXJlX2xhc3RfcHRyICE9IDApCisgICAgc3RhY2tzaXplKys7CisgIGlmIChjb21tb24tPm9wdGltaXplZF9jYnJhY2tldFtvZmZzZXQgPj4gMV0gPT0gMCkKKyAgICBzdGFja3NpemUgKz0gMjsKKyAgfQoraWYgKGhhc19hbHRlcm5hdGl2ZXMgJiYgb3Bjb2RlICE9IE9QX09OQ0UpCisgIHN0YWNrc2l6ZSsrOworCitpZiAoc3RhY2tzaXplID4gMCkKKyAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCBzdGFja3NpemUpOworCitzdGFja3NpemUgPSAwOworaWYgKHJlcGVhdF90eXBlID09IE9QX01JTlVQVE8pCisgIHsKKyAgLyogVE1QMiB3YXMgc2V0IGFib3ZlLiAqLworICBPUDIoU0xKSVRfU1VCLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrc2l6ZSksIFRNUDIsIDAsIFNMSklUX0lNTSwgMSk7CisgIHN0YWNrc2l6ZSsrOworICB9CisKK2lmIChrZXQgIT0gT1BfS0VUIHx8IGJyYSAhPSBPUF9CUkEpCisgIHsKKyAgaWYgKGtldCAhPSBPUF9LRVQpCisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSyhzdGFja3NpemUpLCBTVFJfUFRSLCAwKTsKKyAgZWxzZQorICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2tzaXplKSwgU0xKSVRfSU1NLCAwKTsKKyAgc3RhY2tzaXplKys7CisgIH0KKworaWYgKG9mZnNldCAhPSAwKQorICBzdGFja3NpemUgPSBtYXRjaF9jYXB0dXJlX2NvbW1vbihjb21tb24sIHN0YWNrc2l6ZSwgb2Zmc2V0LCBwcml2YXRlX2RhdGFfcHRyKTsKKworaWYgKGhhc19hbHRlcm5hdGl2ZXMpCisgIHsKKyAgaWYgKG9wY29kZSAhPSBPUF9PTkNFKQorICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2tzaXplKSwgU0xKSVRfSU1NLCAwKTsKKyAgaWYgKGtldCAhPSBPUF9LRVRSTUFYKQorICAgIEJBQ0tUUkFDS19BUyhicmFja2V0X2JhY2t0cmFjayktPmFsdGVybmF0aXZlX21hdGNoaW5ncGF0aCA9IExBQkVMKCk7CisgIH0KKworLyogTXVzdCBiZSBhZnRlciB0aGUgbWF0Y2hpbmdwYXRoIGxhYmVsLiAqLworaWYgKG9mZnNldCAhPSAwICYmIGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0W29mZnNldCA+PiAxXSAhPSAwKQorICB7CisgIFNMSklUX0FTU0VSVChwcml2YXRlX2RhdGFfcHRyID09IE9WRUNUT1Iob2Zmc2V0ICsgMCkpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQgKyAxKSwgU1RSX1BUUiwgMCk7CisgIH0KKworaWYgKGtldCA9PSBPUF9LRVRSTUFYKQorICB7CisgIGlmIChyZXBlYXRfdHlwZSAhPSAwKQorICAgIHsKKyAgICBpZiAoaGFzX2FsdGVybmF0aXZlcykKKyAgICAgIEJBQ0tUUkFDS19BUyhicmFja2V0X2JhY2t0cmFjayktPmFsdGVybmF0aXZlX21hdGNoaW5ncGF0aCA9IExBQkVMKCk7CisgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcmVwZWF0X3B0ciwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHJlcGVhdF9wdHIsIFNMSklUX0lNTSwgMSk7CisgICAgSlVNUFRPKFNMSklUX05PVF9aRVJPLCBybWF4X2xhYmVsKTsKKyAgICAvKiBEcm9wIFNUUl9QVFIgZm9yIGdyZWVkeSBwbHVzIHF1YW50aWZpZXIuICovCisgICAgaWYgKG9wY29kZSAhPSBPUF9PTkNFKQorICAgICAgZnJlZV9zdGFjayhjb21tb24sIDEpOworICAgIH0KKyAgZWxzZSBpZiAob3Bjb2RlID09IE9QX09OQ0UgfHwgb3Bjb2RlID49IE9QX1NCUkEpCisgICAgeworICAgIGlmIChoYXNfYWx0ZXJuYXRpdmVzKQorICAgICAgQkFDS1RSQUNLX0FTKGJyYWNrZXRfYmFja3RyYWNrKS0+YWx0ZXJuYXRpdmVfbWF0Y2hpbmdwYXRoID0gTEFCRUwoKTsKKyAgICAvKiBDaGVja2luZyB6ZXJvLWxlbmd0aCBpdGVyYXRpb24uICovCisgICAgaWYgKG9wY29kZSAhPSBPUF9PTkNFKQorICAgICAgeworICAgICAgQ01QVE8oU0xKSVRfTk9UX0VRVUFMLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0ciwgU1RSX1BUUiwgMCwgcm1heF9sYWJlbCk7CisgICAgICAvKiBEcm9wIFNUUl9QVFIgZm9yIGdyZWVkeSBwbHVzIHF1YW50aWZpZXIuICovCisgICAgICBpZiAoYnJhICE9IE9QX0JSQVpFUk8pCisgICAgICAgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICAvKiBUTVAyIG11c3QgY29udGFpbiB0aGUgc3RhcnRpbmcgU1RSX1BUUi4gKi8KKyAgICAgIENNUFRPKFNMSklUX05PVF9FUVVBTCwgVE1QMiwgMCwgU1RSX1BUUiwgMCwgcm1heF9sYWJlbCk7CisgICAgfQorICBlbHNlCisgICAgSlVNUFRPKFNMSklUX0pVTVAsIHJtYXhfbGFiZWwpOworICBCQUNLVFJBQ0tfQVMoYnJhY2tldF9iYWNrdHJhY2spLT5yZWN1cnNpdmVfbWF0Y2hpbmdwYXRoID0gTEFCRUwoKTsKKyAgfQorCitpZiAocmVwZWF0X3R5cGUgPT0gT1BfRVhBQ1QpCisgIHsKKyAgY291bnRfbWF0Y2goY29tbW9uKTsKKyAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcmVwZWF0X3B0ciwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHJlcGVhdF9wdHIsIFNMSklUX0lNTSwgMSk7CisgIEpVTVBUTyhTTEpJVF9OT1RfWkVSTywgcm1heF9sYWJlbCk7CisgIH0KK2Vsc2UgaWYgKHJlcGVhdF90eXBlID09IE9QX1VQVE8pCisgIHsKKyAgLyogV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgY291bnRlci4gKi8KKyAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHJlcGVhdF9wdHIpOworICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIDEpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBUTVAyLCAwKTsKKyAgfQorCitpZiAoYnJhID09IE9QX0JSQVpFUk8pCisgIEJBQ0tUUkFDS19BUyhicmFja2V0X2JhY2t0cmFjayktPnplcm9fbWF0Y2hpbmdwYXRoID0gTEFCRUwoKTsKKworaWYgKGJyYSA9PSBPUF9CUkFNSU5aRVJPKQorICB7CisgIC8qIFRoaXMgaXMgYSBiYWNrdHJhY2sgcGF0aCEgKEZyb20gdGhlIHZpZXdwb2ludCBvZiBPUF9CUkFNSU5aRVJPKSAqLworICBKVU1QVE8oU0xKSVRfSlVNUCwgKChicmFtaW56ZXJvX2JhY2t0cmFjayAqKXBhcmVudCktPm1hdGNoaW5ncGF0aCk7CisgIGlmIChicmFtaW56ZXJvICE9IE5VTEwpCisgICAgeworICAgIEpVTVBIRVJFKGJyYW1pbnplcm8pOworICAgIC8qIFdlIG5lZWQgdG8gcmVsZWFzZSB0aGUgZW5kIHBvaW50ZXIgdG8gcGVyZm9ybSB0aGUKKyAgICBiYWNrdHJhY2sgZm9yIHRoZSB6ZXJvLWxlbmd0aCBpdGVyYXRpb24uIFdoZW4KKyAgICBmcmFtZXNpemUgaXMgPCAwLCBPUF9PTkNFIHdpbGwgZG8gdGhlIHJlbGVhc2UgaXRzZWxmLiAqLworICAgIGlmIChvcGNvZGUgPT0gT1BfT05DRSAmJiBCQUNLVFJBQ0tfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmZyYW1lc2l6ZSA+PSAwKQorICAgICAgeworICAgICAgT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0cik7CisgICAgICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+cmV2ZXJ0ZnJhbWVzLCBKVU1QKFNMSklUX0ZBU1RfQ0FMTCkpOworICAgICAgfQorICAgIGVsc2UgaWYgKGtldCA9PSBPUF9LRVRSTUlOICYmIG9wY29kZSAhPSBPUF9PTkNFKQorICAgICAgZnJlZV9zdGFjayhjb21tb24sIDEpOworICAgIH0KKyAgLyogQ29udGludWUgdG8gdGhlIG5vcm1hbCBiYWNrdHJhY2suICovCisgIH0KKworaWYgKChrZXQgIT0gT1BfS0VUICYmIGJyYSAhPSBPUF9CUkFNSU5aRVJPKSB8fCBicmEgPT0gT1BfQlJBWkVSTykKKyAgY291bnRfbWF0Y2goY29tbW9uKTsKKworLyogU2tpcCB0aGUgb3RoZXIgYWx0ZXJuYXRpdmVzLiAqLword2hpbGUgKCpjYyA9PSBPUF9BTFQpCisgIGNjICs9IEdFVChjYywgMSk7CitjYyArPSAxICsgTElOS19TSVpFOworCitpZiAob3Bjb2RlID09IE9QX09OQ0UpCisgIHsKKyAgLyogV2UgdGVtcG9yYXJpbHkgZW5jb2RlIHRoZSBuZWVkc19jb250cm9sX2hlYWQgaW4gdGhlIGxvd2VzdCBiaXQuCisgICAgIE5vdGU6IG9uIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlcyBvZiBTTEpJVCB0aGUgKCh4IDw8IDEpID4+IDEpIHJldHVybnMKKyAgICAgdGhlIHNhbWUgdmFsdWUgZm9yIHNtYWxsIHNpZ25lZCBudW1iZXJzIChpbmNsdWRpbmcgbmVnYXRpdmUgbnVtYmVycykuICovCisgIEJBQ0tUUkFDS19BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplID0gKEJBQ0tUUkFDS19BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplIDw8IDEpIHwgKG5lZWRzX2NvbnRyb2xfaGVhZCA/IDEgOiAwKTsKKyAgfQorcmV0dXJuIGNjICsgcmVwZWF0X2xlbmd0aDsKK30KKworc3RhdGljIFBDUkUyX1NQVFIgY29tcGlsZV9icmFja2V0cG9zX21hdGNoaW5ncGF0aChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfU1BUUiBjYywgYmFja3RyYWNrX2NvbW1vbiAqcGFyZW50KQoreworREVGSU5FX0NPTVBJTEVSOworYmFja3RyYWNrX2NvbW1vbiAqYmFja3RyYWNrOworUENSRTJfVUNIQVIgb3Bjb2RlOworaW50IHByaXZhdGVfZGF0YV9wdHI7CitpbnQgY2JyYXByaXZwdHIgPSAwOworQk9PTCBuZWVkc19jb250cm9sX2hlYWQ7CitpbnQgZnJhbWVzaXplOworaW50IHN0YWNrc2l6ZTsKK2ludCBvZmZzZXQgPSAwOworQk9PTCB6ZXJvID0gRkFMU0U7CitQQ1JFMl9TUFRSIGNjYmVnaW4gPSBOVUxMOworaW50IHN0YWNrOyAvKiBBbHNvIGNvbnRhaW5zIHRoZSBvZmZzZXQgb2YgY29udHJvbCBoZWFkLiAqLworc3RydWN0IHNsaml0X2xhYmVsICpsb29wID0gTlVMTDsKK3N0cnVjdCBqdW1wX2xpc3QgKmVtcHR5bWF0Y2ggPSBOVUxMOworCitQVVNIX0JBQ0tUUkFDSyhzaXplb2YoYnJhY2tldHBvc19iYWNrdHJhY2spLCBjYywgTlVMTCk7CitpZiAoKmNjID09IE9QX0JSQVBPU1pFUk8pCisgIHsKKyAgemVybyA9IFRSVUU7CisgIGNjKys7CisgIH0KKworb3Bjb2RlID0gKmNjOworcHJpdmF0ZV9kYXRhX3B0ciA9IFBSSVZBVEVfREFUQShjYyk7CitTTEpJVF9BU1NFUlQocHJpdmF0ZV9kYXRhX3B0ciAhPSAwKTsKK0JBQ0tUUkFDS19BUyhicmFja2V0cG9zX2JhY2t0cmFjayktPnByaXZhdGVfZGF0YV9wdHIgPSBwcml2YXRlX2RhdGFfcHRyOworc3dpdGNoKG9wY29kZSkKKyAgeworICBjYXNlIE9QX0JSQVBPUzoKKyAgY2FzZSBPUF9TQlJBUE9TOgorICBjY2JlZ2luID0gY2MgKyAxICsgTElOS19TSVpFOworICBicmVhazsKKworICBjYXNlIE9QX0NCUkFQT1M6CisgIGNhc2UgT1BfU0NCUkFQT1M6CisgIG9mZnNldCA9IEdFVDIoY2MsIDEgKyBMSU5LX1NJWkUpOworICAvKiBUaGlzIGNhc2UgY2Fubm90IGJlIG9wdGltaXplZCBpbiB0aGUgc2FtZSB3YXMgYXMKKyAgbm9ybWFsIGNhcHR1cmluZyBicmFja2V0cy4gKi8KKyAgU0xKSVRfQVNTRVJUKGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0W29mZnNldF0gPT0gMCk7CisgIGNicmFwcml2cHRyID0gT1ZFQ1RPUl9QUklWKG9mZnNldCk7CisgIG9mZnNldCA8PD0gMTsKKyAgY2NiZWdpbiA9IGNjICsgMSArIExJTktfU0laRSArIElNTTJfU0laRTsKKyAgYnJlYWs7CisKKyAgZGVmYXVsdDoKKyAgU0xKSVRfQVNTRVJUX1NUT1AoKTsKKyAgYnJlYWs7CisgIH0KKworZnJhbWVzaXplID0gZ2V0X2ZyYW1lc2l6ZShjb21tb24sIGNjLCBOVUxMLCBGQUxTRSwgJm5lZWRzX2NvbnRyb2xfaGVhZCk7CitCQUNLVFJBQ0tfQVMoYnJhY2tldHBvc19iYWNrdHJhY2spLT5mcmFtZXNpemUgPSBmcmFtZXNpemU7CitpZiAoZnJhbWVzaXplIDwgMCkKKyAgeworICBpZiAob2Zmc2V0ICE9IDApCisgICAgeworICAgIHN0YWNrc2l6ZSA9IDI7CisgICAgaWYgKGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0ciAhPSAwKQorICAgICAgc3RhY2tzaXplKys7CisgICAgfQorICBlbHNlCisgICAgc3RhY2tzaXplID0gMTsKKworICBpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICAgIHN0YWNrc2l6ZSsrOworICBpZiAoIXplcm8pCisgICAgc3RhY2tzaXplKys7CisKKyAgQkFDS1RSQUNLX0FTKGJyYWNrZXRwb3NfYmFja3RyYWNrKS0+c3RhY2tzaXplID0gc3RhY2tzaXplOworICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIHN0YWNrc2l6ZSk7CisgIGlmIChmcmFtZXNpemUgPT0gbm9fZnJhbWUpCisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNUQUNLX1RPUCwgMCk7CisKKyAgc3RhY2sgPSAwOworICBpZiAob2Zmc2V0ICE9IDApCisgICAgeworICAgIHN0YWNrID0gMjsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQpKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQgKyAxKSk7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSwgVE1QMSwgMCk7CisgICAgaWYgKGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0ciAhPSAwKQorICAgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0cik7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygxKSwgVE1QMiwgMCk7CisgICAgaWYgKG5lZWRzX2NvbnRyb2xfaGVhZCkKKyAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmNvbnRyb2xfaGVhZF9wdHIpOworICAgIGlmIChjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgIT0gMCkKKyAgICAgIHsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMiksIFRNUDEsIDApOworICAgICAgc3RhY2sgPSAzOworICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICAgICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0cik7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSwgU1RSX1BUUiwgMCk7CisgICAgc3RhY2sgPSAxOworICAgIH0KKworICBpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICAgIHN0YWNrKys7CisgIGlmICghemVybykKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrKSwgU0xKSVRfSU1NLCAxKTsKKyAgaWYgKG5lZWRzX2NvbnRyb2xfaGVhZCkKKyAgICB7CisgICAgc3RhY2stLTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrKSwgVE1QMiwgMCk7CisgICAgfQorICB9CitlbHNlCisgIHsKKyAgc3RhY2tzaXplID0gZnJhbWVzaXplICsgMTsKKyAgaWYgKCF6ZXJvKQorICAgIHN0YWNrc2l6ZSsrOworICBpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICAgIHN0YWNrc2l6ZSsrOworICBpZiAob2Zmc2V0ID09IDApCisgICAgc3RhY2tzaXplKys7CisgIEJBQ0tUUkFDS19BUyhicmFja2V0cG9zX2JhY2t0cmFjayktPnN0YWNrc2l6ZSA9IHN0YWNrc2l6ZTsKKworICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIHN0YWNrc2l6ZSk7CisgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyKTsKKyAgaWYgKG5lZWRzX2NvbnRyb2xfaGVhZCkKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyKTsKKyAgT1AyKFNMSklUX1NVQiwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNUQUNLX1RPUCwgMCwgU0xKSVRfSU1NLCAtU1RBQ0soc3RhY2tzaXplIC0gMSkpOworCisgIHN0YWNrID0gMDsKKyAgaWYgKCF6ZXJvKQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTTEpJVF9JTU0sIDEpOworICAgIHN0YWNrID0gMTsKKyAgICB9CisgIGlmIChuZWVkc19jb250cm9sX2hlYWQpCisgICAgeworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2spLCBUTVAyLCAwKTsKKyAgICBzdGFjaysrOworICAgIH0KKyAgaWYgKG9mZnNldCA9PSAwKQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrKSwgU1RSX1BUUiwgMCk7CisgICAgc3RhY2srKzsKKyAgICB9CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2spLCBUTVAxLCAwKTsKKyAgaW5pdF9mcmFtZShjb21tb24sIGNjLCBOVUxMLCBzdGFja3NpemUgLSAxLCBzdGFja3NpemUgLSBmcmFtZXNpemUsIEZBTFNFKTsKKyAgc3RhY2sgLT0gMSArIChvZmZzZXQgPT0gMCk7CisgIH0KKworaWYgKG9mZnNldCAhPSAwKQorICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY2JyYXByaXZwdHIsIFNUUl9QVFIsIDApOworCitsb29wID0gTEFCRUwoKTsKK3doaWxlICgqY2MgIT0gT1BfS0VUUlBPUykKKyAgeworICBiYWNrdHJhY2stPnRvcCA9IE5VTEw7CisgIGJhY2t0cmFjay0+dG9wYmFja3RyYWNrcyA9IE5VTEw7CisgIGNjICs9IEdFVChjYywgMSk7CisKKyAgY29tcGlsZV9tYXRjaGluZ3BhdGgoY29tbW9uLCBjY2JlZ2luLCBjYywgYmFja3RyYWNrKTsKKyAgaWYgKFNMSklUX1VOTElLRUxZKHNsaml0X2dldF9jb21waWxlcl9lcnJvcihjb21waWxlcikpKQorICAgIHJldHVybiBOVUxMOworCisgIGlmIChmcmFtZXNpemUgPCAwKQorICAgIHsKKyAgICBpZiAoZnJhbWVzaXplID09IG5vX2ZyYW1lKQorICAgICAgT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0cik7CisKKyAgICBpZiAob2Zmc2V0ICE9IDApCisgICAgICB7CisgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY2JyYXByaXZwdHIpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1Iob2Zmc2V0ICsgMSksIFNUUl9QVFIsIDApOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNicmFwcml2cHRyLCBTVFJfUFRSLCAwKTsKKyAgICAgIGlmIChjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgIT0gMCkKKyAgICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0ciwgU0xKSVRfSU1NLCBvZmZzZXQgPj4gMSk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQpLCBUTVAxLCAwKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBpZiAob3Bjb2RlID09IE9QX1NCUkFQT1MpCisgICAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCkpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSwgU1RSX1BUUiwgMCk7CisgICAgICB9CisKKyAgICAvKiBFdmVuIGlmIHRoZSBtYXRjaCBpcyBlbXB0eSwgd2UgbmVlZCB0byByZXNldCB0aGUgY29udHJvbCBoZWFkLiAqLworICAgIGlmIChuZWVkc19jb250cm9sX2hlYWQpCisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrKSk7CisKKyAgICBpZiAob3Bjb2RlID09IE9QX1NCUkFQT1MgfHwgb3Bjb2RlID09IE9QX1NDQlJBUE9TKQorICAgICAgYWRkX2p1bXAoY29tcGlsZXIsICZlbXB0eW1hdGNoLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNUUl9QVFIsIDApKTsKKworICAgIGlmICghemVybykKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2tzaXplIC0gMSksIFNMSklUX0lNTSwgMCk7CisgICAgfQorICBlbHNlCisgICAgeworICAgIGlmIChvZmZzZXQgIT0gMCkKKyAgICAgIHsKKyAgICAgIE9QMihTTEpJVF9BREQsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNMSklUX0lNTSwgc3RhY2tzaXplICogc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY2JyYXByaXZwdHIpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1Iob2Zmc2V0ICsgMSksIFNUUl9QVFIsIDApOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNicmFwcml2cHRyLCBTVFJfUFRSLCAwKTsKKyAgICAgIGlmIChjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgIT0gMCkKKyAgICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0ciwgU0xKSVRfSU1NLCBvZmZzZXQgPj4gMSk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQpLCBUTVAxLCAwKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0cik7CisgICAgICBPUDIoU0xKSVRfQURELCBTVEFDS19UT1AsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgc3RhY2tzaXplICogc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgICBpZiAob3Bjb2RlID09IE9QX1NCUkFQT1MpCisgICAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMiksIChmcmFtZXNpemUgKyAxKSAqIHNpemVvZihzbGppdF9zdykpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShUTVAyKSwgKGZyYW1lc2l6ZSArIDEpICogc2l6ZW9mKHNsaml0X3N3KSwgU1RSX1BUUiwgMCk7CisgICAgICB9CisKKyAgICAvKiBFdmVuIGlmIHRoZSBtYXRjaCBpcyBlbXB0eSwgd2UgbmVlZCB0byByZXNldCB0aGUgY29udHJvbCBoZWFkLiAqLworICAgIGlmIChuZWVkc19jb250cm9sX2hlYWQpCisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrKSk7CisKKyAgICBpZiAob3Bjb2RlID09IE9QX1NCUkFQT1MgfHwgb3Bjb2RlID09IE9QX1NDQlJBUE9TKQorICAgICAgYWRkX2p1bXAoY29tcGlsZXIsICZlbXB0eW1hdGNoLCBDTVAoU0xKSVRfRVFVQUwsIFRNUDEsIDAsIFNUUl9QVFIsIDApKTsKKworICAgIGlmICghemVybykKKyAgICAgIHsKKyAgICAgIGlmIChmcmFtZXNpemUgPCAwKQorICAgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrc2l6ZSAtIDEpLCBTTEpJVF9JTU0sIDApOworICAgICAgZWxzZQorICAgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTTEpJVF9JTU0sIDApOworICAgICAgfQorICAgIH0KKworICBKVU1QVE8oU0xKSVRfSlVNUCwgbG9vcCk7CisgIGZsdXNoX3N0dWJzKGNvbW1vbik7CisKKyAgY29tcGlsZV9iYWNrdHJhY2tpbmdwYXRoKGNvbW1vbiwgYmFja3RyYWNrLT50b3ApOworICBpZiAoU0xKSVRfVU5MSUtFTFkoc2xqaXRfZ2V0X2NvbXBpbGVyX2Vycm9yKGNvbXBpbGVyKSkpCisgICAgcmV0dXJuIE5VTEw7CisgIHNldF9qdW1wcyhiYWNrdHJhY2stPnRvcGJhY2t0cmFja3MsIExBQkVMKCkpOworCisgIGlmIChmcmFtZXNpemUgPCAwKQorICAgIHsKKyAgICBpZiAob2Zmc2V0ICE9IDApCisgICAgICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY2JyYXByaXZwdHIpOworICAgIGVsc2UKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBpZiAob2Zmc2V0ICE9IDApCisgICAgICB7CisgICAgICAvKiBMYXN0IGFsdGVybmF0aXZlLiAqLworICAgICAgaWYgKCpjYyA9PSBPUF9LRVRSUE9TKQorICAgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0cik7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY2JyYXByaXZwdHIpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoVE1QMiksIChmcmFtZXNpemUgKyAxKSAqIHNpemVvZihzbGppdF9zdykpOworICAgICAgfQorICAgIH0KKworICBpZiAoKmNjID09IE9QX0tFVFJQT1MpCisgICAgYnJlYWs7CisgIGNjYmVnaW4gPSBjYyArIDEgKyBMSU5LX1NJWkU7CisgIH0KKworLyogV2UgZG9uJ3QgaGF2ZSB0byByZXN0b3JlIHRoZSBjb250cm9sIGhlYWQgaW4gY2FzZSBvZiBhIGZhaWxlZCBtYXRjaC4gKi8KKworYmFja3RyYWNrLT50b3BiYWNrdHJhY2tzID0gTlVMTDsKK2lmICghemVybykKKyAgeworICBpZiAoZnJhbWVzaXplIDwgMCkKKyAgICBhZGRfanVtcChjb21waWxlciwgJmJhY2t0cmFjay0+dG9wYmFja3RyYWNrcywgQ01QKFNMSklUX05PVF9FUVVBTCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSyhzdGFja3NpemUgLSAxKSwgU0xKSVRfSU1NLCAwKSk7CisgIGVsc2UgLyogVE1QMiBpcyBzZXQgdG8gW3ByaXZhdGVfZGF0YV9wdHJdIGFib3ZlLiAqLworICAgIGFkZF9qdW1wKGNvbXBpbGVyLCAmYmFja3RyYWNrLT50b3BiYWNrdHJhY2tzLCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBTTEpJVF9NRU0xKFRNUDIpLCAoc3RhY2tzaXplIC0gMSkgKiBzaXplb2Yoc2xqaXRfc3cpLCBTTEpJVF9JTU0sIDApKTsKKyAgfQorCisvKiBOb25lIG9mIHRoZW0gbWF0Y2hlZC4gKi8KK3NldF9qdW1wcyhlbXB0eW1hdGNoLCBMQUJFTCgpKTsKK2NvdW50X21hdGNoKGNvbW1vbik7CityZXR1cm4gY2MgKyAxICsgTElOS19TSVpFOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIFBDUkUyX1NQVFIgZ2V0X2l0ZXJhdG9yX3BhcmFtZXRlcnMoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIFBDUkUyX1VDSEFSICpvcGNvZGUsIFBDUkUyX1VDSEFSICp0eXBlLCBzbGppdF91aSAqbWF4LCBzbGppdF91aSAqZXhhY3QsIFBDUkUyX1NQVFIgKmVuZCkKK3sKK2ludCBjbGFzc19sZW47CisKKypvcGNvZGUgPSAqY2M7CisqZXhhY3QgPSAwOworCitpZiAoKm9wY29kZSA+PSBPUF9TVEFSICYmICpvcGNvZGUgPD0gT1BfUE9TVVBUTykKKyAgeworICBjYysrOworICAqdHlwZSA9IE9QX0NIQVI7CisgIH0KK2Vsc2UgaWYgKCpvcGNvZGUgPj0gT1BfU1RBUkkgJiYgKm9wY29kZSA8PSBPUF9QT1NVUFRPSSkKKyAgeworICBjYysrOworICAqdHlwZSA9IE9QX0NIQVJJOworICAqb3Bjb2RlIC09IE9QX1NUQVJJIC0gT1BfU1RBUjsKKyAgfQorZWxzZSBpZiAoKm9wY29kZSA+PSBPUF9OT1RTVEFSICYmICpvcGNvZGUgPD0gT1BfTk9UUE9TVVBUTykKKyAgeworICBjYysrOworICAqdHlwZSA9IE9QX05PVDsKKyAgKm9wY29kZSAtPSBPUF9OT1RTVEFSIC0gT1BfU1RBUjsKKyAgfQorZWxzZSBpZiAoKm9wY29kZSA+PSBPUF9OT1RTVEFSSSAmJiAqb3Bjb2RlIDw9IE9QX05PVFBPU1VQVE9JKQorICB7CisgIGNjKys7CisgICp0eXBlID0gT1BfTk9USTsKKyAgKm9wY29kZSAtPSBPUF9OT1RTVEFSSSAtIE9QX1NUQVI7CisgIH0KK2Vsc2UgaWYgKCpvcGNvZGUgPj0gT1BfVFlQRVNUQVIgJiYgKm9wY29kZSA8PSBPUF9UWVBFUE9TVVBUTykKKyAgeworICBjYysrOworICAqb3Bjb2RlIC09IE9QX1RZUEVTVEFSIC0gT1BfU1RBUjsKKyAgKnR5cGUgPSBPUF9FTkQ7CisgIH0KK2Vsc2UKKyAgeworICBTTEpJVF9BU1NFUlQoKm9wY29kZSA9PSBPUF9DTEFTUyB8fCAqb3Bjb2RlID09IE9QX05DTEFTUyB8fCAqb3Bjb2RlID09IE9QX1hDTEFTUyk7CisgICp0eXBlID0gKm9wY29kZTsKKyAgY2MrKzsKKyAgY2xhc3NfbGVuID0gKCp0eXBlIDwgT1BfWENMQVNTKSA/IChpbnQpKDEgKyAoMzIgLyBzaXplb2YoUENSRTJfVUNIQVIpKSkgOiBHRVQoY2MsIDApOworICAqb3Bjb2RlID0gY2NbY2xhc3NfbGVuIC0gMV07CisKKyAgaWYgKCpvcGNvZGUgPj0gT1BfQ1JTVEFSICYmICpvcGNvZGUgPD0gT1BfQ1JNSU5RVUVSWSkKKyAgICB7CisgICAgKm9wY29kZSAtPSBPUF9DUlNUQVIgLSBPUF9TVEFSOworICAgICplbmQgPSBjYyArIGNsYXNzX2xlbjsKKworICAgIGlmICgqb3Bjb2RlID09IE9QX1BMVVMgfHwgKm9wY29kZSA9PSBPUF9NSU5QTFVTKQorICAgICAgeworICAgICAgKmV4YWN0ID0gMTsKKyAgICAgICpvcGNvZGUgLT0gT1BfUExVUyAtIE9QX1NUQVI7CisgICAgICB9CisgICAgfQorICBlbHNlIGlmICgqb3Bjb2RlID49IE9QX0NSUE9TU1RBUiAmJiAqb3Bjb2RlIDw9IE9QX0NSUE9TUVVFUlkpCisgICAgeworICAgICpvcGNvZGUgLT0gT1BfQ1JQT1NTVEFSIC0gT1BfUE9TU1RBUjsKKyAgICAqZW5kID0gY2MgKyBjbGFzc19sZW47CisKKyAgICBpZiAoKm9wY29kZSA9PSBPUF9QT1NQTFVTKQorICAgICAgeworICAgICAgKmV4YWN0ID0gMTsKKyAgICAgICpvcGNvZGUgPSBPUF9QT1NTVEFSOworICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBTTEpJVF9BU1NFUlQoKm9wY29kZSA9PSBPUF9DUlJBTkdFIHx8ICpvcGNvZGUgPT0gT1BfQ1JNSU5SQU5HRSB8fCAqb3Bjb2RlID09IE9QX0NSUE9TUkFOR0UpOworICAgICptYXggPSBHRVQyKGNjLCAoY2xhc3NfbGVuICsgSU1NMl9TSVpFKSk7CisgICAgKmV4YWN0ID0gR0VUMihjYywgY2xhc3NfbGVuKTsKKworICAgIGlmICgqbWF4ID09IDApCisgICAgICB7CisgICAgICBpZiAoKm9wY29kZSA9PSBPUF9DUlBPU1JBTkdFKQorICAgICAgICAqb3Bjb2RlID0gT1BfUE9TU1RBUjsKKyAgICAgIGVsc2UKKyAgICAgICAgKm9wY29kZSAtPSBPUF9DUlJBTkdFIC0gT1BfU1RBUjsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICAqbWF4IC09ICpleGFjdDsKKyAgICAgIGlmICgqbWF4ID09IDApCisgICAgICAgICpvcGNvZGUgPSBPUF9FWEFDVDsKKyAgICAgIGVsc2UgaWYgKCptYXggPT0gMSkKKyAgICAgICAgeworICAgICAgICBpZiAoKm9wY29kZSA9PSBPUF9DUlBPU1JBTkdFKQorICAgICAgICAgICpvcGNvZGUgPSBPUF9QT1NRVUVSWTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICpvcGNvZGUgLT0gT1BfQ1JSQU5HRSAtIE9QX1FVRVJZOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgaWYgKCpvcGNvZGUgPT0gT1BfQ1JQT1NSQU5HRSkKKyAgICAgICAgICAqb3Bjb2RlID0gT1BfUE9TVVBUTzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICpvcGNvZGUgLT0gT1BfQ1JSQU5HRSAtIE9QX1VQVE87CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAqZW5kID0gY2MgKyBjbGFzc19sZW4gKyAyICogSU1NMl9TSVpFOworICAgIH0KKyAgcmV0dXJuIGNjOworICB9CisKK3N3aXRjaCgqb3Bjb2RlKQorICB7CisgIGNhc2UgT1BfRVhBQ1Q6CisgICpleGFjdCA9IEdFVDIoY2MsIDApOworICBjYyArPSBJTU0yX1NJWkU7CisgIGJyZWFrOworCisgIGNhc2UgT1BfUExVUzoKKyAgY2FzZSBPUF9NSU5QTFVTOgorICAqZXhhY3QgPSAxOworICAqb3Bjb2RlIC09IE9QX1BMVVMgLSBPUF9TVEFSOworICBicmVhazsKKworICBjYXNlIE9QX1BPU1BMVVM6CisgICpleGFjdCA9IDE7CisgICpvcGNvZGUgPSBPUF9QT1NTVEFSOworICBicmVhazsKKworICBjYXNlIE9QX1VQVE86CisgIGNhc2UgT1BfTUlOVVBUTzoKKyAgY2FzZSBPUF9QT1NVUFRPOgorICAqbWF4ID0gR0VUMihjYywgMCk7CisgIGNjICs9IElNTTJfU0laRTsKKyAgYnJlYWs7CisgIH0KKworaWYgKCp0eXBlID09IE9QX0VORCkKKyAgeworICAqdHlwZSA9ICpjYzsKKyAgKmVuZCA9IG5leHRfb3Bjb2RlKGNvbW1vbiwgY2MpOworICBjYysrOworICByZXR1cm4gY2M7CisgIH0KKworKmVuZCA9IGNjICsgMTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK2lmIChjb21tb24tPnV0ZiAmJiBIQVNfRVhUUkFMRU4oKmNjKSkgKmVuZCArPSBHRVRfRVhUUkFMRU4oKmNjKTsKKyNlbmRpZgorcmV0dXJuIGNjOworfQorCitzdGF0aWMgUENSRTJfU1BUUiBjb21waWxlX2l0ZXJhdG9yX21hdGNoaW5ncGF0aChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfU1BUUiBjYywgYmFja3RyYWNrX2NvbW1vbiAqcGFyZW50KQoreworREVGSU5FX0NPTVBJTEVSOworYmFja3RyYWNrX2NvbW1vbiAqYmFja3RyYWNrOworUENSRTJfVUNIQVIgb3Bjb2RlOworUENSRTJfVUNIQVIgdHlwZTsKK3Nsaml0X3VpIG1heCA9IDAsIGV4YWN0OworQk9PTCBmYXN0X2ZhaWw7CitzbGppdF9zaSBmYXN0X3N0cl9wdHI7CitCT09MIGNoYXJwb3NfZW5hYmxlZDsKK1BDUkUyX1VDSEFSIGNoYXJwb3NfY2hhcjsKK3Vuc2lnbmVkIGludCBjaGFycG9zX290aGVyY2FzZWJpdDsKK1BDUkUyX1NQVFIgZW5kOworanVtcF9saXN0ICpub19tYXRjaCA9IE5VTEw7CitqdW1wX2xpc3QgKm5vX2NoYXIxX21hdGNoID0gTlVMTDsKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wID0gTlVMTDsKK3N0cnVjdCBzbGppdF9sYWJlbCAqbGFiZWw7CitpbnQgcHJpdmF0ZV9kYXRhX3B0ciA9IFBSSVZBVEVfREFUQShjYyk7CitpbnQgYmFzZSA9IChwcml2YXRlX2RhdGFfcHRyID09IDApID8gU0xKSVRfTUVNMShTVEFDS19UT1ApIDogU0xKSVRfTUVNMShTTEpJVF9TUCk7CitpbnQgb2Zmc2V0MCA9IChwcml2YXRlX2RhdGFfcHRyID09IDApID8gU1RBQ0soMCkgOiBwcml2YXRlX2RhdGFfcHRyOworaW50IG9mZnNldDEgPSAocHJpdmF0ZV9kYXRhX3B0ciA9PSAwKSA/IFNUQUNLKDEpIDogcHJpdmF0ZV9kYXRhX3B0ciArIChpbnQpc2l6ZW9mKHNsaml0X3N3KTsKK2ludCB0bXBfYmFzZSwgdG1wX29mZnNldDsKKworUFVTSF9CQUNLVFJBQ0soc2l6ZW9mKGNoYXJfaXRlcmF0b3JfYmFja3RyYWNrKSwgY2MsIE5VTEwpOworCitmYXN0X3N0cl9wdHIgPSBQUklWQVRFX0RBVEEoY2MgKyAxKTsKK2Zhc3RfZmFpbCA9IFRSVUU7CisKK1NMSklUX0FTU0VSVChjb21tb24tPmZhc3RfZm9yd2FyZF9iY19wdHIgPT0gTlVMTCB8fCBmYXN0X3N0cl9wdHIgPT0gMCB8fCBjYyA9PSBjb21tb24tPmZhc3RfZm9yd2FyZF9iY19wdHIpOworCitpZiAoY2MgPT0gY29tbW9uLT5mYXN0X2ZvcndhcmRfYmNfcHRyKQorICBmYXN0X2ZhaWwgPSBGQUxTRTsKK2Vsc2UgaWYgKGNvbW1vbi0+ZmFzdF9mYWlsX3N0YXJ0X3B0ciA9PSAwKQorICBmYXN0X3N0cl9wdHIgPSAwOworCitTTEpJVF9BU1NFUlQoY29tbW9uLT5mYXN0X2ZvcndhcmRfYmNfcHRyICE9IE5VTEwgfHwgZmFzdF9zdHJfcHRyID09IDAKKyAgfHwgKGZhc3Rfc3RyX3B0ciA+PSBjb21tb24tPmZhc3RfZmFpbF9zdGFydF9wdHIgJiYgZmFzdF9zdHJfcHRyIDw9IGNvbW1vbi0+ZmFzdF9mYWlsX2VuZF9wdHIpKTsKKworY2MgPSBnZXRfaXRlcmF0b3JfcGFyYW1ldGVycyhjb21tb24sIGNjLCAmb3Bjb2RlLCAmdHlwZSwgJm1heCwgJmV4YWN0LCAmZW5kKTsKKworaWYgKHR5cGUgIT0gT1BfRVhUVU5JKQorICB7CisgIHRtcF9iYXNlID0gVE1QMzsKKyAgdG1wX29mZnNldCA9IDA7CisgIH0KK2Vsc2UKKyAgeworICB0bXBfYmFzZSA9IFNMSklUX01FTTEoU0xKSVRfU1ApOworICB0bXBfb2Zmc2V0ID0gUE9TU0VTU0lWRTA7CisgIH0KKworaWYgKGZhc3RfZmFpbCAmJiBmYXN0X3N0cl9wdHIgIT0gMCkKKyAgYWRkX2p1bXAoY29tcGlsZXIsICZiYWNrdHJhY2stPnRvcGJhY2t0cmFja3MsIENNUChTTEpJVF9MRVNTX0VRVUFMLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgZmFzdF9zdHJfcHRyKSk7CisKKy8qIEhhbmRsZSBmaXhlZCBwYXJ0IGZpcnN0LiAqLworaWYgKGV4YWN0ID4gMSkKKyAgeworICBTTEpJVF9BU1NFUlQoZmFzdF9zdHJfcHRyID09IDApOworICBpZiAoY29tbW9uLT5tb2RlID09IFBDUkUyX0pJVF9DT01QTEVURQorI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgJiYgIWNvbW1vbi0+dXRmCisjZW5kaWYKKyAgICAgICkKKyAgICB7CisgICAgT1AyKFNMSklUX0FERCwgVE1QMSwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoZXhhY3QpKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgJmJhY2t0cmFjay0+dG9wYmFja3RyYWNrcywgQ01QKFNMSklUX0dSRUFURVIsIFRNUDEsIDAsIFNUUl9FTkQsIDApKTsKKyAgICBPUDEoU0xKSVRfTU9WLCB0bXBfYmFzZSwgdG1wX29mZnNldCwgU0xKSVRfSU1NLCBleGFjdCk7CisgICAgbGFiZWwgPSBMQUJFTCgpOworICAgIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgdHlwZSwgY2MsICZiYWNrdHJhY2stPnRvcGJhY2t0cmFja3MsIEZBTFNFKTsKKyAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCB0bXBfYmFzZSwgdG1wX29mZnNldCwgU0xKSVRfSU1NLCAxKTsKKyAgICBKVU1QVE8oU0xKSVRfTk9UX1pFUk8sIGxhYmVsKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgT1AxKFNMSklUX01PViwgdG1wX2Jhc2UsIHRtcF9vZmZzZXQsIFNMSklUX0lNTSwgZXhhY3QpOworICAgIGxhYmVsID0gTEFCRUwoKTsKKyAgICBjb21waWxlX2NoYXIxX21hdGNoaW5ncGF0aChjb21tb24sIHR5cGUsIGNjLCAmYmFja3RyYWNrLT50b3BiYWNrdHJhY2tzLCBUUlVFKTsKKyAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCB0bXBfYmFzZSwgdG1wX29mZnNldCwgU0xKSVRfSU1NLCAxKTsKKyAgICBKVU1QVE8oU0xKSVRfTk9UX1pFUk8sIGxhYmVsKTsKKyAgICB9CisgIH0KK2Vsc2UgaWYgKGV4YWN0ID09IDEpCisgIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgdHlwZSwgY2MsICZiYWNrdHJhY2stPnRvcGJhY2t0cmFja3MsIFRSVUUpOworCitzd2l0Y2gob3Bjb2RlKQorICB7CisgIGNhc2UgT1BfU1RBUjoKKyAgY2FzZSBPUF9VUFRPOgorICBTTEpJVF9BU1NFUlQoZmFzdF9zdHJfcHRyID09IDAgfHwgb3Bjb2RlID09IE9QX1NUQVIpOworCisgIGlmICh0eXBlID09IE9QX0FOWU5MIHx8IHR5cGUgPT0gT1BfRVhUVU5JKQorICAgIHsKKyAgICBTTEpJVF9BU1NFUlQocHJpdmF0ZV9kYXRhX3B0ciA9PSAwKTsKKyAgICBTTEpJVF9BU1NFUlQoZmFzdF9zdHJfcHRyID09IDApOworCisgICAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCAyKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTVFJfUFRSLCAwKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpLCBTTEpJVF9JTU0sIDApOworCisgICAgaWYgKG9wY29kZSA9PSBPUF9VUFRPKQorICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIFBPU1NFU1NJVkUwLCBTTEpJVF9JTU0sIG1heCk7CisKKyAgICBsYWJlbCA9IExBQkVMKCk7CisgICAgY29tcGlsZV9jaGFyMV9tYXRjaGluZ3BhdGgoY29tbW9uLCB0eXBlLCBjYywgJkJBQ0tUUkFDS19BUyhjaGFyX2l0ZXJhdG9yX2JhY2t0cmFjayktPnUuYmFja3RyYWNrcywgVFJVRSk7CisgICAgaWYgKG9wY29kZSA9PSBPUF9VUFRPKQorICAgICAgeworICAgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIFBPU1NFU1NJVkUwKTsKKyAgICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAxKTsKKyAgICAgIGp1bXAgPSBKVU1QKFNMSklUX1pFUk8pOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIFBPU1NFU1NJVkUwLCBUTVAxLCAwKTsKKyAgICAgIH0KKworICAgIC8qIFdlIGNhbm5vdCB1c2UgVE1QMyBiZWNhdXNlIG9mIHRoaXMgYWxsb2NhdGVfc3RhY2suICovCisgICAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCAxKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTVFJfUFRSLCAwKTsKKyAgICBKVU1QVE8oU0xKSVRfSlVNUCwgbGFiZWwpOworICAgIGlmIChqdW1wICE9IE5VTEwpCisgICAgICBKVU1QSEVSRShqdW1wKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgY2hhcnBvc19lbmFibGVkID0gRkFMU0U7CisgICAgY2hhcnBvc19jaGFyID0gMDsKKyAgICBjaGFycG9zX290aGVyY2FzZWJpdCA9IDA7CisKKyAgICBpZiAoKHR5cGUgIT0gT1BfQ0hBUiAmJiB0eXBlICE9IE9QX0NIQVJJKSAmJiAoKmVuZCA9PSBPUF9DSEFSIHx8ICplbmQgPT0gT1BfQ0hBUkkpKQorICAgICAgeworICAgICAgY2hhcnBvc19lbmFibGVkID0gVFJVRTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgIGNoYXJwb3NfZW5hYmxlZCA9ICFjb21tb24tPnV0ZiB8fCAhSEFTX0VYVFJBTEVOKGVuZFsxXSk7CisjZW5kaWYKKyAgICAgIGlmIChjaGFycG9zX2VuYWJsZWQgJiYgKmVuZCA9PSBPUF9DSEFSSSAmJiBjaGFyX2hhc19vdGhlcmNhc2UoY29tbW9uLCBlbmQgKyAxKSkKKyAgICAgICAgeworICAgICAgICBjaGFycG9zX290aGVyY2FzZWJpdCA9IGNoYXJfZ2V0X290aGVyY2FzZV9iaXQoY29tbW9uLCBlbmQgKyAxKTsKKyAgICAgICAgaWYgKGNoYXJwb3Nfb3RoZXJjYXNlYml0ID09IDApCisgICAgICAgICAgY2hhcnBvc19lbmFibGVkID0gRkFMU0U7CisgICAgICAgIH0KKworICAgICAgaWYgKGNoYXJwb3NfZW5hYmxlZCkKKyAgICAgICAgeworICAgICAgICBjaGFycG9zX2NoYXIgPSBlbmRbMV07CisgICAgICAgIC8qIENvbnN1bXBlIHRoZSBPUF9DSEFSIG9wY29kZS4gKi8KKyAgICAgICAgZW5kICs9IDI7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKKyAgICAgICAgU0xKSVRfQVNTRVJUKChjaGFycG9zX290aGVyY2FzZWJpdCA+PiA4KSA9PSAwKTsKKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNiB8fCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMzIKKyAgICAgICAgU0xKSVRfQVNTRVJUKChjaGFycG9zX290aGVyY2FzZWJpdCA+PiA5KSA9PSAwKTsKKyAgICAgICAgaWYgKChjaGFycG9zX290aGVyY2FzZWJpdCAmIDB4MTAwKSAhPSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICBjaGFycG9zX290aGVyY2FzZWJpdCA9IChjaGFycG9zX290aGVyY2FzZWJpdCAmIDB4ZmYpIDw8IDg7CisgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChjaGFycG9zX290aGVyY2FzZWJpdCAhPSAwKQorICAgICAgICAgIGNoYXJwb3NfY2hhciB8PSBjaGFycG9zX290aGVyY2FzZWJpdDsKKworICAgICAgICBCQUNLVFJBQ0tfQVMoY2hhcl9pdGVyYXRvcl9iYWNrdHJhY2spLT51LmNoYXJwb3MuZW5hYmxlZCA9IFRSVUU7CisgICAgICAgIEJBQ0tUUkFDS19BUyhjaGFyX2l0ZXJhdG9yX2JhY2t0cmFjayktPnUuY2hhcnBvcy5jaHIgPSBjaGFycG9zX2NoYXI7CisgICAgICAgIEJBQ0tUUkFDS19BUyhjaGFyX2l0ZXJhdG9yX2JhY2t0cmFjayktPnUuY2hhcnBvcy5vdGhlcmNhc2ViaXQgPSBjaGFycG9zX290aGVyY2FzZWJpdDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgaWYgKGNoYXJwb3NfZW5hYmxlZCkKKyAgICAgIHsKKyAgICAgIGlmIChvcGNvZGUgPT0gT1BfVVBUTykKKyAgICAgICAgT1AxKFNMSklUX01PViwgdG1wX2Jhc2UsIHRtcF9vZmZzZXQsIFNMSklUX0lNTSwgbWF4ICsgMSk7CisKKyAgICAgIC8qIFNlYXJjaCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgY2hhcnBvc19jaGFyLiAqLworICAgICAganVtcCA9IEpVTVAoU0xKSVRfSlVNUCk7CisgICAgICBsYWJlbCA9IExBQkVMKCk7CisgICAgICBpZiAob3Bjb2RlID09IE9QX1VQVE8pCisgICAgICAgIHsKKyAgICAgICAgT1AyKFNMSklUX1NVQiB8IFNMSklUX1NFVF9FLCB0bXBfYmFzZSwgdG1wX29mZnNldCwgdG1wX2Jhc2UsIHRtcF9vZmZzZXQsIFNMSklUX0lNTSwgMSk7CisgICAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCAmYmFja3RyYWNrLT50b3BiYWNrdHJhY2tzLCBKVU1QKFNMSklUX1pFUk8pKTsKKyAgICAgICAgfQorICAgICAgY29tcGlsZV9jaGFyMV9tYXRjaGluZ3BhdGgoY29tbW9uLCB0eXBlLCBjYywgJmJhY2t0cmFjay0+dG9wYmFja3RyYWNrcywgRkFMU0UpOworICAgICAgaWYgKGZhc3Rfc3RyX3B0ciAhPSAwKQorICAgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgZmFzdF9zdHJfcHRyLCBTVFJfUFRSLCAwKTsKKyAgICAgIEpVTVBIRVJFKGp1bXApOworCisgICAgICBkZXRlY3RfcGFydGlhbF9tYXRjaChjb21tb24sICZiYWNrdHJhY2stPnRvcGJhY2t0cmFja3MpOworICAgICAgT1AxKE1PVl9VQ0hBUiwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVFJfUFRSKSwgSU5fVUNIQVJTKDApKTsKKyAgICAgIGlmIChjaGFycG9zX290aGVyY2FzZWJpdCAhPSAwKQorICAgICAgICBPUDIoU0xKSVRfT1IsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgY2hhcnBvc19vdGhlcmNhc2ViaXQpOworICAgICAgQ01QVE8oU0xKSVRfTk9UX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIGNoYXJwb3NfY2hhciwgbGFiZWwpOworCisgICAgICBpZiAocHJpdmF0ZV9kYXRhX3B0ciA9PSAwKQorICAgICAgICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIDIpOworICAgICAgT1AxKFNMSklUX01PViwgYmFzZSwgb2Zmc2V0MCwgU1RSX1BUUiwgMCk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBiYXNlLCBvZmZzZXQxLCBTVFJfUFRSLCAwKTsKKyAgICAgIGlmIChvcGNvZGUgPT0gT1BfVVBUTykKKyAgICAgICAgeworICAgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCB0bXBfYmFzZSwgdG1wX29mZnNldCwgU0xKSVRfSU1NLCAxKTsKKyAgICAgICAgYWRkX2p1bXAoY29tcGlsZXIsICZub19tYXRjaCwgSlVNUChTTEpJVF9aRVJPKSk7CisgICAgICAgIH0KKworICAgICAgLyogU2VhcmNoIHRoZSBsYXN0IGluc3RhbmNlIG9mIGNoYXJwb3NfY2hhci4gKi8KKyAgICAgIGxhYmVsID0gTEFCRUwoKTsKKyAgICAgIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgdHlwZSwgY2MsICZub19tYXRjaCwgRkFMU0UpOworICAgICAgaWYgKGZhc3Rfc3RyX3B0ciAhPSAwKQorICAgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgZmFzdF9zdHJfcHRyLCBTVFJfUFRSLCAwKTsKKyAgICAgIGRldGVjdF9wYXJ0aWFsX21hdGNoKGNvbW1vbiwgJm5vX21hdGNoKTsKKyAgICAgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygwKSk7CisgICAgICBpZiAoY2hhcnBvc19vdGhlcmNhc2ViaXQgIT0gMCkKKyAgICAgICAgT1AyKFNMSklUX09SLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIGNoYXJwb3Nfb3RoZXJjYXNlYml0KTsKKyAgICAgIGlmIChvcGNvZGUgPT0gT1BfU1RBUikKKyAgICAgICAgeworICAgICAgICBDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgY2hhcnBvc19jaGFyLCBsYWJlbCk7CisgICAgICAgIE9QMShTTEpJVF9NT1YsIGJhc2UsIG9mZnNldDAsIFNUUl9QVFIsIDApOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAganVtcCA9IENNUChTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgY2hhcnBvc19jaGFyKTsKKyAgICAgICAgT1AxKFNMSklUX01PViwgYmFzZSwgb2Zmc2V0MCwgU1RSX1BUUiwgMCk7CisgICAgICAgIEpVTVBIRVJFKGp1bXApOworICAgICAgICB9CisKKyAgICAgIGlmIChvcGNvZGUgPT0gT1BfVVBUTykKKyAgICAgICAgeworICAgICAgICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCB0bXBfYmFzZSwgdG1wX29mZnNldCwgU0xKSVRfSU1NLCAxKTsKKyAgICAgICAgSlVNUFRPKFNMSklUX05PVF9aRVJPLCBsYWJlbCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgSlVNUFRPKFNMSklUX0pVTVAsIGxhYmVsKTsKKworICAgICAgc2V0X2p1bXBzKG5vX21hdGNoLCBMQUJFTCgpKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIGJhc2UsIG9mZnNldDApOworICAgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICAgICAgT1AxKFNMSklUX01PViwgYmFzZSwgb2Zmc2V0MCwgU1RSX1BUUiwgMCk7CisgICAgICB9CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgJiYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDMyCisgICAgZWxzZSBpZiAoY29tbW9uLT51dGYpCisgICAgICB7CisgICAgICBpZiAocHJpdmF0ZV9kYXRhX3B0ciA9PSAwKQorICAgICAgICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIDIpOworCisgICAgICBPUDEoU0xKSVRfTU9WLCBiYXNlLCBvZmZzZXQwLCBTVFJfUFRSLCAwKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIGJhc2UsIG9mZnNldDEsIFNUUl9QVFIsIDApOworCisgICAgICBpZiAob3Bjb2RlID09IE9QX1VQVE8pCisgICAgICAgIE9QMShTTEpJVF9NT1YsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCBTTEpJVF9JTU0sIG1heCk7CisKKyAgICAgIGxhYmVsID0gTEFCRUwoKTsKKyAgICAgIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgdHlwZSwgY2MsICZub19tYXRjaCwgVFJVRSk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBiYXNlLCBvZmZzZXQwLCBTVFJfUFRSLCAwKTsKKworICAgICAgaWYgKG9wY29kZSA9PSBPUF9VUFRPKQorICAgICAgICB7CisgICAgICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgdG1wX2Jhc2UsIHRtcF9vZmZzZXQsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCBTTEpJVF9JTU0sIDEpOworICAgICAgICBKVU1QVE8oU0xKSVRfTk9UX1pFUk8sIGxhYmVsKTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBKVU1QVE8oU0xKSVRfSlVNUCwgbGFiZWwpOworCisgICAgICBzZXRfanVtcHMobm9fbWF0Y2gsIExBQkVMKCkpOworICAgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgYmFzZSwgb2Zmc2V0MCk7CisgICAgICBpZiAoZmFzdF9zdHJfcHRyICE9IDApCisgICAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBmYXN0X3N0cl9wdHIsIFNUUl9QVFIsIDApOworICAgICAgfQorI2VuZGlmCisgICAgZWxzZQorICAgICAgeworICAgICAgaWYgKHByaXZhdGVfZGF0YV9wdHIgPT0gMCkKKyAgICAgICAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCAyKTsKKworICAgICAgT1AxKFNMSklUX01PViwgYmFzZSwgb2Zmc2V0MSwgU1RSX1BUUiwgMCk7CisgICAgICBpZiAob3Bjb2RlID09IE9QX1VQVE8pCisgICAgICAgIE9QMShTTEpJVF9NT1YsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCBTTEpJVF9JTU0sIG1heCk7CisKKyAgICAgIGxhYmVsID0gTEFCRUwoKTsKKyAgICAgIGRldGVjdF9wYXJ0aWFsX21hdGNoKGNvbW1vbiwgJm5vX21hdGNoKTsKKyAgICAgIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgdHlwZSwgY2MsICZub19jaGFyMV9tYXRjaCwgRkFMU0UpOworICAgICAgaWYgKG9wY29kZSA9PSBPUF9VUFRPKQorICAgICAgICB7CisgICAgICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgdG1wX2Jhc2UsIHRtcF9vZmZzZXQsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCBTTEpJVF9JTU0sIDEpOworICAgICAgICBKVU1QVE8oU0xKSVRfTk9UX1pFUk8sIGxhYmVsKTsKKyAgICAgICAgT1AyKFNMSklUX0FERCwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIEpVTVBUTyhTTEpJVF9KVU1QLCBsYWJlbCk7CisKKyAgICAgIHNldF9qdW1wcyhub19jaGFyMV9tYXRjaCwgTEFCRUwoKSk7CisgICAgICBPUDIoU0xKSVRfU1VCLCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisgICAgICBzZXRfanVtcHMobm9fbWF0Y2gsIExBQkVMKCkpOworICAgICAgT1AxKFNMSklUX01PViwgYmFzZSwgb2Zmc2V0MCwgU1RSX1BUUiwgMCk7CisgICAgICBpZiAoZmFzdF9zdHJfcHRyICE9IDApCisgICAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBmYXN0X3N0cl9wdHIsIFNUUl9QVFIsIDApOworICAgICAgfQorICAgIH0KKyAgQkFDS1RSQUNLX0FTKGNoYXJfaXRlcmF0b3JfYmFja3RyYWNrKS0+bWF0Y2hpbmdwYXRoID0gTEFCRUwoKTsKKyAgYnJlYWs7CisKKyAgY2FzZSBPUF9NSU5TVEFSOgorICBpZiAocHJpdmF0ZV9kYXRhX3B0ciA9PSAwKQorICAgIGFsbG9jYXRlX3N0YWNrKGNvbW1vbiwgMSk7CisgIE9QMShTTEpJVF9NT1YsIGJhc2UsIG9mZnNldDAsIFNUUl9QVFIsIDApOworICBCQUNLVFJBQ0tfQVMoY2hhcl9pdGVyYXRvcl9iYWNrdHJhY2spLT5tYXRjaGluZ3BhdGggPSBMQUJFTCgpOworICBpZiAoZmFzdF9zdHJfcHRyICE9IDApCisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGZhc3Rfc3RyX3B0ciwgU1RSX1BUUiwgMCk7CisgIGJyZWFrOworCisgIGNhc2UgT1BfTUlOVVBUTzoKKyAgU0xKSVRfQVNTRVJUKGZhc3Rfc3RyX3B0ciA9PSAwKTsKKyAgaWYgKHByaXZhdGVfZGF0YV9wdHIgPT0gMCkKKyAgICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIDIpOworICBPUDEoU0xKSVRfTU9WLCBiYXNlLCBvZmZzZXQwLCBTVFJfUFRSLCAwKTsKKyAgT1AxKFNMSklUX01PViwgYmFzZSwgb2Zmc2V0MSwgU0xKSVRfSU1NLCBtYXggKyAxKTsKKyAgQkFDS1RSQUNLX0FTKGNoYXJfaXRlcmF0b3JfYmFja3RyYWNrKS0+bWF0Y2hpbmdwYXRoID0gTEFCRUwoKTsKKyAgYnJlYWs7CisKKyAgY2FzZSBPUF9RVUVSWToKKyAgY2FzZSBPUF9NSU5RVUVSWToKKyAgU0xKSVRfQVNTRVJUKGZhc3Rfc3RyX3B0ciA9PSAwKTsKKyAgaWYgKHByaXZhdGVfZGF0YV9wdHIgPT0gMCkKKyAgICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIDEpOworICBPUDEoU0xKSVRfTU9WLCBiYXNlLCBvZmZzZXQwLCBTVFJfUFRSLCAwKTsKKyAgaWYgKG9wY29kZSA9PSBPUF9RVUVSWSkKKyAgICBjb21waWxlX2NoYXIxX21hdGNoaW5ncGF0aChjb21tb24sIHR5cGUsIGNjLCAmQkFDS1RSQUNLX0FTKGNoYXJfaXRlcmF0b3JfYmFja3RyYWNrKS0+dS5iYWNrdHJhY2tzLCBUUlVFKTsKKyAgQkFDS1RSQUNLX0FTKGNoYXJfaXRlcmF0b3JfYmFja3RyYWNrKS0+bWF0Y2hpbmdwYXRoID0gTEFCRUwoKTsKKyAgYnJlYWs7CisKKyAgY2FzZSBPUF9FWEFDVDoKKyAgYnJlYWs7CisKKyAgY2FzZSBPUF9QT1NTVEFSOgorI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSAzMgorICBpZiAoY29tbW9uLT51dGYpCisgICAgeworICAgIE9QMShTTEpJVF9NT1YsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCBTVFJfUFRSLCAwKTsKKyAgICBsYWJlbCA9IExBQkVMKCk7CisgICAgY29tcGlsZV9jaGFyMV9tYXRjaGluZ3BhdGgoY29tbW9uLCB0eXBlLCBjYywgJm5vX21hdGNoLCBUUlVFKTsKKyAgICBPUDEoU0xKSVRfTU9WLCB0bXBfYmFzZSwgdG1wX29mZnNldCwgU1RSX1BUUiwgMCk7CisgICAgSlVNUFRPKFNMSklUX0pVTVAsIGxhYmVsKTsKKyAgICBzZXRfanVtcHMobm9fbWF0Y2gsIExBQkVMKCkpOworICAgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0KTsKKyAgICBpZiAoZmFzdF9zdHJfcHRyICE9IDApCisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgZmFzdF9zdHJfcHRyLCBTVFJfUFRSLCAwKTsKKyAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKyAgbGFiZWwgPSBMQUJFTCgpOworICBkZXRlY3RfcGFydGlhbF9tYXRjaChjb21tb24sICZub19tYXRjaCk7CisgIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgdHlwZSwgY2MsICZub19jaGFyMV9tYXRjaCwgRkFMU0UpOworICBKVU1QVE8oU0xKSVRfSlVNUCwgbGFiZWwpOworICBzZXRfanVtcHMobm9fY2hhcjFfbWF0Y2gsIExBQkVMKCkpOworICBPUDIoU0xKSVRfU1VCLCBTVFJfUFRSLCAwLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIElOX1VDSEFSUygxKSk7CisgIHNldF9qdW1wcyhub19tYXRjaCwgTEFCRUwoKSk7CisgIGlmIChmYXN0X3N0cl9wdHIgIT0gMCkKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgZmFzdF9zdHJfcHRyLCBTVFJfUFRSLCAwKTsKKyAgYnJlYWs7CisKKyAgY2FzZSBPUF9QT1NVUFRPOgorICBTTEpJVF9BU1NFUlQoZmFzdF9zdHJfcHRyID09IDApOworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSAzMgorICBpZiAoY29tbW9uLT51dGYpCisgICAgeworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBQT1NTRVNTSVZFMSwgU1RSX1BUUiwgMCk7CisgICAgT1AxKFNMSklUX01PViwgdG1wX2Jhc2UsIHRtcF9vZmZzZXQsIFNMSklUX0lNTSwgbWF4KTsKKyAgICBsYWJlbCA9IExBQkVMKCk7CisgICAgY29tcGlsZV9jaGFyMV9tYXRjaGluZ3BhdGgoY29tbW9uLCB0eXBlLCBjYywgJm5vX21hdGNoLCBUUlVFKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgUE9TU0VTU0lWRTEsIFNUUl9QVFIsIDApOworICAgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgdG1wX2Jhc2UsIHRtcF9vZmZzZXQsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCBTTEpJVF9JTU0sIDEpOworICAgIEpVTVBUTyhTTEpJVF9OT1RfWkVSTywgbGFiZWwpOworICAgIHNldF9qdW1wcyhub19tYXRjaCwgTEFCRUwoKSk7CisgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIFBPU1NFU1NJVkUxKTsKKyAgICBicmVhazsKKyAgICB9CisjZW5kaWYKKyAgT1AxKFNMSklUX01PViwgdG1wX2Jhc2UsIHRtcF9vZmZzZXQsIFNMSklUX0lNTSwgbWF4KTsKKyAgbGFiZWwgPSBMQUJFTCgpOworICBkZXRlY3RfcGFydGlhbF9tYXRjaChjb21tb24sICZub19tYXRjaCk7CisgIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgdHlwZSwgY2MsICZub19jaGFyMV9tYXRjaCwgRkFMU0UpOworICBPUDIoU0xKSVRfU1VCIHwgU0xKSVRfU0VUX0UsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCB0bXBfYmFzZSwgdG1wX29mZnNldCwgU0xKSVRfSU1NLCAxKTsKKyAgSlVNUFRPKFNMSklUX05PVF9aRVJPLCBsYWJlbCk7CisgIE9QMihTTEpJVF9BREQsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKKyAgc2V0X2p1bXBzKG5vX2NoYXIxX21hdGNoLCBMQUJFTCgpKTsKKyAgT1AyKFNMSklUX1NVQiwgU1RSX1BUUiwgMCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCBJTl9VQ0hBUlMoMSkpOworICBzZXRfanVtcHMobm9fbWF0Y2gsIExBQkVMKCkpOworICBicmVhazsKKworICBjYXNlIE9QX1BPU1FVRVJZOgorICBTTEpJVF9BU1NFUlQoZmFzdF9zdHJfcHRyID09IDApOworICBPUDEoU0xKSVRfTU9WLCB0bXBfYmFzZSwgdG1wX29mZnNldCwgU1RSX1BUUiwgMCk7CisgIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgdHlwZSwgY2MsICZub19tYXRjaCwgVFJVRSk7CisgIE9QMShTTEpJVF9NT1YsIHRtcF9iYXNlLCB0bXBfb2Zmc2V0LCBTVFJfUFRSLCAwKTsKKyAgc2V0X2p1bXBzKG5vX21hdGNoLCBMQUJFTCgpKTsKKyAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgdG1wX2Jhc2UsIHRtcF9vZmZzZXQpOworICBicmVhazsKKworICBkZWZhdWx0OgorICBTTEpJVF9BU1NFUlRfU1RPUCgpOworICBicmVhazsKKyAgfQorCitjb3VudF9tYXRjaChjb21tb24pOworcmV0dXJuIGVuZDsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBQQ1JFMl9TUFRSIGNvbXBpbGVfZmFpbF9hY2NlcHRfbWF0Y2hpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBiYWNrdHJhY2tfY29tbW9uICpwYXJlbnQpCit7CitERUZJTkVfQ09NUElMRVI7CitiYWNrdHJhY2tfY29tbW9uICpiYWNrdHJhY2s7CisKK1BVU0hfQkFDS1RSQUNLKHNpemVvZihiYWNrdHJhY2tfY29tbW9uKSwgY2MsIE5VTEwpOworCitpZiAoKmNjID09IE9QX0ZBSUwpCisgIHsKKyAgYWRkX2p1bXAoY29tcGlsZXIsICZiYWNrdHJhY2stPnRvcGJhY2t0cmFja3MsIEpVTVAoU0xKSVRfSlVNUCkpOworICByZXR1cm4gY2MgKyAxOworICB9CisKK2lmICgqY2MgPT0gT1BfQVNTRVJUX0FDQ0VQVCB8fCBjb21tb24tPmN1cnJlbnRlbnRyeSAhPSBOVUxMIHx8ICFjb21tb24tPm1pZ2h0X2JlX2VtcHR5KQorICB7CisgIC8qIE5vIG5lZWQgdG8gY2hlY2sgbm90ZW1wdHkgY29uZGl0aW9ucy4gKi8KKyAgaWYgKGNvbW1vbi0+YWNjZXB0X2xhYmVsID09IE5VTEwpCisgICAgYWRkX2p1bXAoY29tcGlsZXIsICZjb21tb24tPmFjY2VwdCwgSlVNUChTTEpJVF9KVU1QKSk7CisgIGVsc2UKKyAgICBKVU1QVE8oU0xKSVRfSlVNUCwgY29tbW9uLT5hY2NlcHRfbGFiZWwpOworICByZXR1cm4gY2MgKyAxOworICB9CisKK2lmIChjb21tb24tPmFjY2VwdF9sYWJlbCA9PSBOVUxMKQorICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+YWNjZXB0LCBDTVAoU0xKSVRfTk9UX0VRVUFMLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUigwKSkpOworZWxzZQorICBDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKDApLCBjb21tb24tPmFjY2VwdF9sYWJlbCk7CitPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBBUkdVTUVOVFMsIDApOworT1AxKFNMSklUX01PVl9VSSwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgb3B0aW9ucykpOworT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgUENSRTJfTk9URU1QVFkpOworYWRkX2p1bXAoY29tcGlsZXIsICZiYWNrdHJhY2stPnRvcGJhY2t0cmFja3MsIEpVTVAoU0xKSVRfTk9UX1pFUk8pKTsKK09QMihTTEpJVF9BTkQgfCBTTEpJVF9TRVRfRSwgU0xKSVRfVU5VU0VELCAwLCBUTVAyLCAwLCBTTEpJVF9JTU0sIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQpOworaWYgKGNvbW1vbi0+YWNjZXB0X2xhYmVsID09IE5VTEwpCisgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5hY2NlcHQsIEpVTVAoU0xKSVRfWkVSTykpOworZWxzZQorICBKVU1QVE8oU0xKSVRfWkVSTywgY29tbW9uLT5hY2NlcHRfbGFiZWwpOworT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgc3RyKSk7CitpZiAoY29tbW9uLT5hY2NlcHRfbGFiZWwgPT0gTlVMTCkKKyAgYWRkX2p1bXAoY29tcGlsZXIsICZjb21tb24tPmFjY2VwdCwgQ01QKFNMSklUX05PVF9FUVVBTCwgVE1QMiwgMCwgU1RSX1BUUiwgMCkpOworZWxzZQorICBDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFRNUDIsIDAsIFNUUl9QVFIsIDAsIGNvbW1vbi0+YWNjZXB0X2xhYmVsKTsKK2FkZF9qdW1wKGNvbXBpbGVyLCAmYmFja3RyYWNrLT50b3BiYWNrdHJhY2tzLCBKVU1QKFNMSklUX0pVTVApKTsKK3JldHVybiBjYyArIDE7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgUENSRTJfU1BUUiBjb21waWxlX2Nsb3NlX21hdGNoaW5ncGF0aChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfU1BUUiBjYykKK3sKK0RFRklORV9DT01QSUxFUjsKK2ludCBvZmZzZXQgPSBHRVQyKGNjLCAxKTsKK0JPT0wgb3B0aW1pemVkX2NicmFja2V0ID0gY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXRbb2Zmc2V0XSAhPSAwOworCisvKiBEYXRhIHdpbGwgYmUgZGlzY2FyZGVkIGFueXdheS4uLiAqLworaWYgKGNvbW1vbi0+Y3VycmVudGVudHJ5ICE9IE5VTEwpCisgIHJldHVybiBjYyArIDEgKyBJTU0yX1NJWkU7CisKK2lmICghb3B0aW1pemVkX2NicmFja2V0KQorICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUl9QUklWKG9mZnNldCkpOworb2Zmc2V0IDw8PSAxOworT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1Iob2Zmc2V0ICsgMSksIFNUUl9QVFIsIDApOworaWYgKCFvcHRpbWl6ZWRfY2JyYWNrZXQpCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKG9mZnNldCksIFRNUDEsIDApOworcmV0dXJuIGNjICsgMSArIElNTTJfU0laRTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBQQ1JFMl9TUFRSIGNvbXBpbGVfY29udHJvbF92ZXJiX21hdGNoaW5ncGF0aChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgUENSRTJfU1BUUiBjYywgYmFja3RyYWNrX2NvbW1vbiAqcGFyZW50KQoreworREVGSU5FX0NPTVBJTEVSOworYmFja3RyYWNrX2NvbW1vbiAqYmFja3RyYWNrOworUENSRTJfVUNIQVIgb3Bjb2RlID0gKmNjOworUENSRTJfU1BUUiBjY2VuZCA9IGNjICsgMTsKKworaWYgKG9wY29kZSA9PSBPUF9QUlVORV9BUkcgfHwgb3Bjb2RlID09IE9QX1NLSVBfQVJHIHx8IG9wY29kZSA9PSBPUF9USEVOX0FSRykKKyAgY2NlbmQgKz0gMiArIGNjWzFdOworCitQVVNIX0JBQ0tUUkFDSyhzaXplb2YoYmFja3RyYWNrX2NvbW1vbiksIGNjLCBOVUxMKTsKKworaWYgKG9wY29kZSA9PSBPUF9TS0lQKQorICB7CisgIGFsbG9jYXRlX3N0YWNrKGNvbW1vbiwgMSk7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFNUUl9QVFIsIDApOworICByZXR1cm4gY2NlbmQ7CisgIH0KKworaWYgKG9wY29kZSA9PSBPUF9QUlVORV9BUkcgfHwgb3Bjb2RlID09IE9QX1RIRU5fQVJHKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIEFSR1VNRU5UUywgMCk7CisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KShjYyArIDIpKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+bWFya19wdHIsIFRNUDIsIDApOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBtYXJrX3B0ciksIFRNUDIsIDApOworICB9CisKK3JldHVybiBjY2VuZDsKK30KKworc3RhdGljIFBDUkUyX1VDSEFSIHRoZW5fdHJhcF9vcGNvZGVbMV0gPSB7IE9QX1RIRU5fVFJBUCB9OworCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgY29tcGlsZV90aGVuX3RyYXBfbWF0Y2hpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBQQ1JFMl9TUFRSIGNjLCBQQ1JFMl9TUFRSIGNjZW5kLCBiYWNrdHJhY2tfY29tbW9uICpwYXJlbnQpCit7CitERUZJTkVfQ09NUElMRVI7CitiYWNrdHJhY2tfY29tbW9uICpiYWNrdHJhY2s7CitCT09MIG5lZWRzX2NvbnRyb2xfaGVhZDsKK2ludCBzaXplOworCitQVVNIX0JBQ0tUUkFDS19OT1ZBTFVFKHNpemVvZih0aGVuX3RyYXBfYmFja3RyYWNrKSwgY2MpOworY29tbW9uLT50aGVuX3RyYXAgPSBCQUNLVFJBQ0tfQVModGhlbl90cmFwX2JhY2t0cmFjayk7CitCQUNLVFJBQ0tfQVModGhlbl90cmFwX2JhY2t0cmFjayktPmNvbW1vbi5jYyA9IHRoZW5fdHJhcF9vcGNvZGU7CitCQUNLVFJBQ0tfQVModGhlbl90cmFwX2JhY2t0cmFjayktPnN0YXJ0ID0gKHNsaml0X3N3KShjYyAtIGNvbW1vbi0+c3RhcnQpOworQkFDS1RSQUNLX0FTKHRoZW5fdHJhcF9iYWNrdHJhY2spLT5mcmFtZXNpemUgPSBnZXRfZnJhbWVzaXplKGNvbW1vbiwgY2MsIGNjZW5kLCBGQUxTRSwgJm5lZWRzX2NvbnRyb2xfaGVhZCk7CisKK3NpemUgPSBCQUNLVFJBQ0tfQVModGhlbl90cmFwX2JhY2t0cmFjayktPmZyYW1lc2l6ZTsKK3NpemUgPSAzICsgKHNpemUgPCAwID8gMCA6IHNpemUpOworCitPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyKTsKK2FsbG9jYXRlX3N0YWNrKGNvbW1vbiwgc2l6ZSk7CitpZiAoc2l6ZSA+IDMpCisgIE9QMihTTEpJVF9TVUIsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmNvbnRyb2xfaGVhZF9wdHIsIFNUQUNLX1RPUCwgMCwgU0xKSVRfSU1NLCAoc2l6ZSAtIDMpICogc2l6ZW9mKHNsaml0X3N3KSk7CitlbHNlCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmNvbnRyb2xfaGVhZF9wdHIsIFNUQUNLX1RPUCwgMCk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHNpemUgLSAxKSwgU0xKSVRfSU1NLCBCQUNLVFJBQ0tfQVModGhlbl90cmFwX2JhY2t0cmFjayktPnN0YXJ0KTsKK09QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc2l6ZSAtIDIpLCBTTEpJVF9JTU0sIHR5cGVfdGhlbl90cmFwKTsKK09QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc2l6ZSAtIDMpLCBUTVAyLCAwKTsKKworc2l6ZSA9IEJBQ0tUUkFDS19BUyh0aGVuX3RyYXBfYmFja3RyYWNrKS0+ZnJhbWVzaXplOworaWYgKHNpemUgPj0gMCkKKyAgaW5pdF9mcmFtZShjb21tb24sIGNjLCBjY2VuZCwgc2l6ZSAtIDEsIDAsIEZBTFNFKTsKK30KKworc3RhdGljIHZvaWQgY29tcGlsZV9tYXRjaGluZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIFBDUkUyX1NQVFIgY2MsIFBDUkUyX1NQVFIgY2NlbmQsIGJhY2t0cmFja19jb21tb24gKnBhcmVudCkKK3sKK0RFRklORV9DT01QSUxFUjsKK2JhY2t0cmFja19jb21tb24gKmJhY2t0cmFjazsKK0JPT0wgaGFzX3RoZW5fdHJhcCA9IEZBTFNFOwordGhlbl90cmFwX2JhY2t0cmFjayAqc2F2ZV90aGVuX3RyYXAgPSBOVUxMOworCitTTEpJVF9BU1NFUlQoKmNjZW5kID09IE9QX0VORCB8fCAoKmNjZW5kID49IE9QX0FMVCAmJiAqY2NlbmQgPD0gT1BfS0VUUlBPUykpOworCitpZiAoY29tbW9uLT5oYXNfdGhlbiAmJiBjb21tb24tPnRoZW5fb2Zmc2V0c1tjYyAtIGNvbW1vbi0+c3RhcnRdICE9IDApCisgIHsKKyAgU0xKSVRfQVNTRVJUKCpjY2VuZCAhPSBPUF9FTkQgJiYgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyICE9IDApOworICBoYXNfdGhlbl90cmFwID0gVFJVRTsKKyAgc2F2ZV90aGVuX3RyYXAgPSBjb21tb24tPnRoZW5fdHJhcDsKKyAgLyogVGFpbCBpdGVtIG9uIGJhY2t0cmFjay4gKi8KKyAgY29tcGlsZV90aGVuX3RyYXBfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgY2MsIGNjZW5kLCBwYXJlbnQpOworICB9CisKK3doaWxlIChjYyA8IGNjZW5kKQorICB7CisgIHN3aXRjaCgqY2MpCisgICAgeworICAgIGNhc2UgT1BfU09EOgorICAgIGNhc2UgT1BfU09NOgorICAgIGNhc2UgT1BfTk9UX1dPUkRfQk9VTkRBUlk6CisgICAgY2FzZSBPUF9XT1JEX0JPVU5EQVJZOgorICAgIGNhc2UgT1BfRU9ETjoKKyAgICBjYXNlIE9QX0VPRDoKKyAgICBjYXNlIE9QX0NJUkM6CisgICAgY2FzZSBPUF9DSVJDTToKKyAgICBjYXNlIE9QX0RPTEw6CisgICAgY2FzZSBPUF9ET0xMTToKKyAgICBjYXNlIE9QX1JFVkVSU0U6CisgICAgY2MgPSBjb21waWxlX3NpbXBsZV9hc3NlcnRpb25fbWF0Y2hpbmdwYXRoKGNvbW1vbiwgKmNjLCBjYyArIDEsIHBhcmVudC0+dG9wICE9IE5VTEwgPyAmcGFyZW50LT50b3AtPm5leHRiYWNrdHJhY2tzIDogJnBhcmVudC0+dG9wYmFja3RyYWNrcyk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgICBjYXNlIE9QX0RJR0lUOgorICAgIGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6CisgICAgY2FzZSBPUF9XSElURVNQQUNFOgorICAgIGNhc2UgT1BfTk9UX1dPUkRDSEFSOgorICAgIGNhc2UgT1BfV09SRENIQVI6CisgICAgY2FzZSBPUF9BTlk6CisgICAgY2FzZSBPUF9BTExBTlk6CisgICAgY2FzZSBPUF9BTllCWVRFOgorICAgIGNhc2UgT1BfTk9UUFJPUDoKKyAgICBjYXNlIE9QX1BST1A6CisgICAgY2FzZSBPUF9BTllOTDoKKyAgICBjYXNlIE9QX05PVF9IU1BBQ0U6CisgICAgY2FzZSBPUF9IU1BBQ0U6CisgICAgY2FzZSBPUF9OT1RfVlNQQUNFOgorICAgIGNhc2UgT1BfVlNQQUNFOgorICAgIGNhc2UgT1BfRVhUVU5JOgorICAgIGNhc2UgT1BfTk9UOgorICAgIGNhc2UgT1BfTk9USToKKyAgICBjYyA9IGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgKmNjLCBjYyArIDEsIHBhcmVudC0+dG9wICE9IE5VTEwgPyAmcGFyZW50LT50b3AtPm5leHRiYWNrdHJhY2tzIDogJnBhcmVudC0+dG9wYmFja3RyYWNrcywgVFJVRSk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1NFVF9TT006CisgICAgUFVTSF9CQUNLVFJBQ0tfTk9WQUxVRShzaXplb2YoYmFja3RyYWNrX2NvbW1vbiksIGNjKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUigwKSk7CisgICAgYWxsb2NhdGVfc3RhY2soY29tbW9uLCAxKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUigwKSwgU1RSX1BUUiwgMCk7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSwgVE1QMiwgMCk7CisgICAgY2MrKzsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQ0hBUjoKKyAgICBjYXNlIE9QX0NIQVJJOgorICAgIGlmIChjb21tb24tPm1vZGUgPT0gUENSRTJfSklUX0NPTVBMRVRFKQorICAgICAgY2MgPSBjb21waWxlX2NoYXJuX21hdGNoaW5ncGF0aChjb21tb24sIGNjLCBjY2VuZCwgcGFyZW50LT50b3AgIT0gTlVMTCA/ICZwYXJlbnQtPnRvcC0+bmV4dGJhY2t0cmFja3MgOiAmcGFyZW50LT50b3BiYWNrdHJhY2tzKTsKKyAgICBlbHNlCisgICAgICBjYyA9IGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgKmNjLCBjYyArIDEsIHBhcmVudC0+dG9wICE9IE5VTEwgPyAmcGFyZW50LT50b3AtPm5leHRiYWNrdHJhY2tzIDogJnBhcmVudC0+dG9wYmFja3RyYWNrcywgVFJVRSk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1NUQVI6CisgICAgY2FzZSBPUF9NSU5TVEFSOgorICAgIGNhc2UgT1BfUExVUzoKKyAgICBjYXNlIE9QX01JTlBMVVM6CisgICAgY2FzZSBPUF9RVUVSWToKKyAgICBjYXNlIE9QX01JTlFVRVJZOgorICAgIGNhc2UgT1BfVVBUTzoKKyAgICBjYXNlIE9QX01JTlVQVE86CisgICAgY2FzZSBPUF9FWEFDVDoKKyAgICBjYXNlIE9QX1BPU1NUQVI6CisgICAgY2FzZSBPUF9QT1NQTFVTOgorICAgIGNhc2UgT1BfUE9TUVVFUlk6CisgICAgY2FzZSBPUF9QT1NVUFRPOgorICAgIGNhc2UgT1BfU1RBUkk6CisgICAgY2FzZSBPUF9NSU5TVEFSSToKKyAgICBjYXNlIE9QX1BMVVNJOgorICAgIGNhc2UgT1BfTUlOUExVU0k6CisgICAgY2FzZSBPUF9RVUVSWUk6CisgICAgY2FzZSBPUF9NSU5RVUVSWUk6CisgICAgY2FzZSBPUF9VUFRPSToKKyAgICBjYXNlIE9QX01JTlVQVE9JOgorICAgIGNhc2UgT1BfRVhBQ1RJOgorICAgIGNhc2UgT1BfUE9TU1RBUkk6CisgICAgY2FzZSBPUF9QT1NQTFVTSToKKyAgICBjYXNlIE9QX1BPU1FVRVJZSToKKyAgICBjYXNlIE9QX1BPU1VQVE9JOgorICAgIGNhc2UgT1BfTk9UU1RBUjoKKyAgICBjYXNlIE9QX05PVE1JTlNUQVI6CisgICAgY2FzZSBPUF9OT1RQTFVTOgorICAgIGNhc2UgT1BfTk9UTUlOUExVUzoKKyAgICBjYXNlIE9QX05PVFFVRVJZOgorICAgIGNhc2UgT1BfTk9UTUlOUVVFUlk6CisgICAgY2FzZSBPUF9OT1RVUFRPOgorICAgIGNhc2UgT1BfTk9UTUlOVVBUTzoKKyAgICBjYXNlIE9QX05PVEVYQUNUOgorICAgIGNhc2UgT1BfTk9UUE9TU1RBUjoKKyAgICBjYXNlIE9QX05PVFBPU1BMVVM6CisgICAgY2FzZSBPUF9OT1RQT1NRVUVSWToKKyAgICBjYXNlIE9QX05PVFBPU1VQVE86CisgICAgY2FzZSBPUF9OT1RTVEFSSToKKyAgICBjYXNlIE9QX05PVE1JTlNUQVJJOgorICAgIGNhc2UgT1BfTk9UUExVU0k6CisgICAgY2FzZSBPUF9OT1RNSU5QTFVTSToKKyAgICBjYXNlIE9QX05PVFFVRVJZSToKKyAgICBjYXNlIE9QX05PVE1JTlFVRVJZSToKKyAgICBjYXNlIE9QX05PVFVQVE9JOgorICAgIGNhc2UgT1BfTk9UTUlOVVBUT0k6CisgICAgY2FzZSBPUF9OT1RFWEFDVEk6CisgICAgY2FzZSBPUF9OT1RQT1NTVEFSSToKKyAgICBjYXNlIE9QX05PVFBPU1BMVVNJOgorICAgIGNhc2UgT1BfTk9UUE9TUVVFUllJOgorICAgIGNhc2UgT1BfTk9UUE9TVVBUT0k6CisgICAgY2FzZSBPUF9UWVBFU1RBUjoKKyAgICBjYXNlIE9QX1RZUEVNSU5TVEFSOgorICAgIGNhc2UgT1BfVFlQRVBMVVM6CisgICAgY2FzZSBPUF9UWVBFTUlOUExVUzoKKyAgICBjYXNlIE9QX1RZUEVRVUVSWToKKyAgICBjYXNlIE9QX1RZUEVNSU5RVUVSWToKKyAgICBjYXNlIE9QX1RZUEVVUFRPOgorICAgIGNhc2UgT1BfVFlQRU1JTlVQVE86CisgICAgY2FzZSBPUF9UWVBFRVhBQ1Q6CisgICAgY2FzZSBPUF9UWVBFUE9TU1RBUjoKKyAgICBjYXNlIE9QX1RZUEVQT1NQTFVTOgorICAgIGNhc2UgT1BfVFlQRVBPU1FVRVJZOgorICAgIGNhc2UgT1BfVFlQRVBPU1VQVE86CisgICAgY2MgPSBjb21waWxlX2l0ZXJhdG9yX21hdGNoaW5ncGF0aChjb21tb24sIGNjLCBwYXJlbnQpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9DTEFTUzoKKyAgICBjYXNlIE9QX05DTEFTUzoKKyAgICBpZiAoY2NbMSArICgzMiAvIHNpemVvZihQQ1JFMl9VQ0hBUikpXSA+PSBPUF9DUlNUQVIgJiYgY2NbMSArICgzMiAvIHNpemVvZihQQ1JFMl9VQ0hBUikpXSA8PSBPUF9DUlBPU1JBTkdFKQorICAgICAgY2MgPSBjb21waWxlX2l0ZXJhdG9yX21hdGNoaW5ncGF0aChjb21tb24sIGNjLCBwYXJlbnQpOworICAgIGVsc2UKKyAgICAgIGNjID0gY29tcGlsZV9jaGFyMV9tYXRjaGluZ3BhdGgoY29tbW9uLCAqY2MsIGNjICsgMSwgcGFyZW50LT50b3AgIT0gTlVMTCA/ICZwYXJlbnQtPnRvcC0+bmV4dGJhY2t0cmFja3MgOiAmcGFyZW50LT50b3BiYWNrdHJhY2tzLCBUUlVFKTsKKyAgICBicmVhazsKKworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFIHx8IFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNiB8fCBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMzIKKyAgICBjYXNlIE9QX1hDTEFTUzoKKyAgICBpZiAoKihjYyArIEdFVChjYywgMSkpID49IE9QX0NSU1RBUiAmJiAqKGNjICsgR0VUKGNjLCAxKSkgPD0gT1BfQ1JQT1NSQU5HRSkKKyAgICAgIGNjID0gY29tcGlsZV9pdGVyYXRvcl9tYXRjaGluZ3BhdGgoY29tbW9uLCBjYywgcGFyZW50KTsKKyAgICBlbHNlCisgICAgICBjYyA9IGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgKmNjLCBjYyArIDEsIHBhcmVudC0+dG9wICE9IE5VTEwgPyAmcGFyZW50LT50b3AtPm5leHRiYWNrdHJhY2tzIDogJnBhcmVudC0+dG9wYmFja3RyYWNrcywgVFJVRSk7CisgICAgYnJlYWs7CisjZW5kaWYKKworICAgIGNhc2UgT1BfUkVGOgorICAgIGNhc2UgT1BfUkVGSToKKyAgICBpZiAoY2NbMSArIElNTTJfU0laRV0gPj0gT1BfQ1JTVEFSICYmIGNjWzEgKyBJTU0yX1NJWkVdIDw9IE9QX0NSUE9TUkFOR0UpCisgICAgICBjYyA9IGNvbXBpbGVfcmVmX2l0ZXJhdG9yX21hdGNoaW5ncGF0aChjb21tb24sIGNjLCBwYXJlbnQpOworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGNvbXBpbGVfcmVmX21hdGNoaW5ncGF0aChjb21tb24sIGNjLCBwYXJlbnQtPnRvcCAhPSBOVUxMID8gJnBhcmVudC0+dG9wLT5uZXh0YmFja3RyYWNrcyA6ICZwYXJlbnQtPnRvcGJhY2t0cmFja3MsIFRSVUUsIEZBTFNFKTsKKyAgICAgIGNjICs9IDEgKyBJTU0yX1NJWkU7CisgICAgICB9CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0ROUkVGOgorICAgIGNhc2UgT1BfRE5SRUZJOgorICAgIGlmIChjY1sxICsgMiAqIElNTTJfU0laRV0gPj0gT1BfQ1JTVEFSICYmIGNjWzEgKyAyICogSU1NMl9TSVpFXSA8PSBPUF9DUlBPU1JBTkdFKQorICAgICAgY2MgPSBjb21waWxlX3JlZl9pdGVyYXRvcl9tYXRjaGluZ3BhdGgoY29tbW9uLCBjYywgcGFyZW50KTsKKyAgICBlbHNlCisgICAgICB7CisgICAgICBjb21waWxlX2RucmVmX3NlYXJjaChjb21tb24sIGNjLCBwYXJlbnQtPnRvcCAhPSBOVUxMID8gJnBhcmVudC0+dG9wLT5uZXh0YmFja3RyYWNrcyA6ICZwYXJlbnQtPnRvcGJhY2t0cmFja3MpOworICAgICAgY29tcGlsZV9yZWZfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgY2MsIHBhcmVudC0+dG9wICE9IE5VTEwgPyAmcGFyZW50LT50b3AtPm5leHRiYWNrdHJhY2tzIDogJnBhcmVudC0+dG9wYmFja3RyYWNrcywgVFJVRSwgRkFMU0UpOworICAgICAgY2MgKz0gMSArIDIgKiBJTU0yX1NJWkU7CisgICAgICB9CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1JFQ1VSU0U6CisgICAgY2MgPSBjb21waWxlX3JlY3Vyc2VfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgY2MsIHBhcmVudCk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NBTExPVVQ6CisgICAgY2FzZSBPUF9DQUxMT1VUX1NUUjoKKyAgICBjYyA9IGNvbXBpbGVfY2FsbG91dF9tYXRjaGluZ3BhdGgoY29tbW9uLCBjYywgcGFyZW50KTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQVNTRVJUOgorICAgIGNhc2UgT1BfQVNTRVJUX05PVDoKKyAgICBjYXNlIE9QX0FTU0VSVEJBQ0s6CisgICAgY2FzZSBPUF9BU1NFUlRCQUNLX05PVDoKKyAgICBQVVNIX0JBQ0tUUkFDS19OT1ZBTFVFKHNpemVvZihhc3NlcnRfYmFja3RyYWNrKSwgY2MpOworICAgIGNjID0gY29tcGlsZV9hc3NlcnRfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgY2MsIEJBQ0tUUkFDS19BUyhhc3NlcnRfYmFja3RyYWNrKSwgRkFMU0UpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9CUkFNSU5aRVJPOgorICAgIFBVU0hfQkFDS1RSQUNLX05PVkFMVUUoc2l6ZW9mKGJyYW1pbnplcm9fYmFja3RyYWNrKSwgY2MpOworICAgIGNjID0gYnJhY2tldGVuZChjYyArIDEpOworICAgIGlmICgqKGNjIC0gMSAtIExJTktfU0laRSkgIT0gT1BfS0VUUk1JTikKKyAgICAgIHsKKyAgICAgIGFsbG9jYXRlX3N0YWNrKGNvbW1vbiwgMSk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTVFJfUFRSLCAwKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIDIpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSwgU0xKSVRfSU1NLCAwKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMSksIFNUUl9QVFIsIDApOworICAgICAgfQorICAgIEJBQ0tUUkFDS19BUyhicmFtaW56ZXJvX2JhY2t0cmFjayktPm1hdGNoaW5ncGF0aCA9IExBQkVMKCk7CisgICAgY291bnRfbWF0Y2goY29tbW9uKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfT05DRToKKyAgICBjYXNlIE9QX09OQ0VfTkM6CisgICAgY2FzZSBPUF9CUkE6CisgICAgY2FzZSBPUF9DQlJBOgorICAgIGNhc2UgT1BfQ09ORDoKKyAgICBjYXNlIE9QX1NCUkE6CisgICAgY2FzZSBPUF9TQ0JSQToKKyAgICBjYXNlIE9QX1NDT05EOgorICAgIGNjID0gY29tcGlsZV9icmFja2V0X21hdGNoaW5ncGF0aChjb21tb24sIGNjLCBwYXJlbnQpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9CUkFaRVJPOgorICAgIGlmIChjY1sxXSA+IE9QX0FTU0VSVEJBQ0tfTk9UKQorICAgICAgY2MgPSBjb21waWxlX2JyYWNrZXRfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgY2MsIHBhcmVudCk7CisgICAgZWxzZQorICAgICAgeworICAgICAgUFVTSF9CQUNLVFJBQ0tfTk9WQUxVRShzaXplb2YoYXNzZXJ0X2JhY2t0cmFjayksIGNjKTsKKyAgICAgIGNjID0gY29tcGlsZV9hc3NlcnRfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgY2MsIEJBQ0tUUkFDS19BUyhhc3NlcnRfYmFja3RyYWNrKSwgRkFMU0UpOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9CUkFQT1M6CisgICAgY2FzZSBPUF9DQlJBUE9TOgorICAgIGNhc2UgT1BfU0JSQVBPUzoKKyAgICBjYXNlIE9QX1NDQlJBUE9TOgorICAgIGNhc2UgT1BfQlJBUE9TWkVSTzoKKyAgICBjYyA9IGNvbXBpbGVfYnJhY2tldHBvc19tYXRjaGluZ3BhdGgoY29tbW9uLCBjYywgcGFyZW50KTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfTUFSSzoKKyAgICBQVVNIX0JBQ0tUUkFDS19OT1ZBTFVFKHNpemVvZihiYWNrdHJhY2tfY29tbW9uKSwgY2MpOworICAgIFNMSklUX0FTU0VSVChjb21tb24tPm1hcmtfcHRyICE9IDApOworICAgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hcmtfcHRyKTsKKyAgICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIGNvbW1vbi0+aGFzX3NraXBfYXJnID8gNSA6IDEpOworICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIEFSR1VNRU5UUywgMCk7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSyhjb21tb24tPmhhc19za2lwX2FyZyA/IDQgOiAwKSwgVE1QMiwgMCk7CisgICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfSU1NLCAoc2xqaXRfc3cpKGNjICsgMikpOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hcmtfcHRyLCBUTVAyLCAwKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBtYXJrX3B0ciksIFRNUDIsIDApOworICAgIGlmIChjb21tb24tPmhhc19za2lwX2FyZykKKyAgICAgIHsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmNvbnRyb2xfaGVhZF9wdHIpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0ciwgU1RBQ0tfVE9QLCAwKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMSksIFNMSklUX0lNTSwgdHlwZV9tYXJrKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMiksIFNMSklUX0lNTSwgKHNsaml0X3N3KShjYyArIDIpKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMyksIFNUUl9QVFIsIDApOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSwgVE1QMSwgMCk7CisgICAgICB9CisgICAgY2MgKz0gMSArIDIgKyBjY1sxXTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfUFJVTkU6CisgICAgY2FzZSBPUF9QUlVORV9BUkc6CisgICAgY2FzZSBPUF9TS0lQOgorICAgIGNhc2UgT1BfU0tJUF9BUkc6CisgICAgY2FzZSBPUF9USEVOOgorICAgIGNhc2UgT1BfVEhFTl9BUkc6CisgICAgY2FzZSBPUF9DT01NSVQ6CisgICAgY2MgPSBjb21waWxlX2NvbnRyb2xfdmVyYl9tYXRjaGluZ3BhdGgoY29tbW9uLCBjYywgcGFyZW50KTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfRkFJTDoKKyAgICBjYXNlIE9QX0FDQ0VQVDoKKyAgICBjYXNlIE9QX0FTU0VSVF9BQ0NFUFQ6CisgICAgY2MgPSBjb21waWxlX2ZhaWxfYWNjZXB0X21hdGNoaW5ncGF0aChjb21tb24sIGNjLCBwYXJlbnQpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9DTE9TRToKKyAgICBjYyA9IGNvbXBpbGVfY2xvc2VfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgY2MpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9TS0lQWkVSTzoKKyAgICBjYyA9IGJyYWNrZXRlbmQoY2MgKyAxKTsKKyAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgU0xKSVRfQVNTRVJUX1NUT1AoKTsKKyAgICByZXR1cm47CisgICAgfQorICBpZiAoY2MgPT0gTlVMTCkKKyAgICByZXR1cm47CisgIH0KKworaWYgKGhhc190aGVuX3RyYXApCisgIHsKKyAgLyogSGVhZCBpdGVtIG9uIGJhY2t0cmFjay4gKi8KKyAgUFVTSF9CQUNLVFJBQ0tfTk9WQUxVRShzaXplb2YodGhlbl90cmFwX2JhY2t0cmFjayksIGNjKTsKKyAgQkFDS1RSQUNLX0FTKHRoZW5fdHJhcF9iYWNrdHJhY2spLT5jb21tb24uY2MgPSB0aGVuX3RyYXBfb3Bjb2RlOworICBCQUNLVFJBQ0tfQVModGhlbl90cmFwX2JhY2t0cmFjayktPnRoZW5fdHJhcCA9IGNvbW1vbi0+dGhlbl90cmFwOworICBjb21tb24tPnRoZW5fdHJhcCA9IHNhdmVfdGhlbl90cmFwOworICB9CitTTEpJVF9BU1NFUlQoY2MgPT0gY2NlbmQpOworfQorCisjdW5kZWYgUFVTSF9CQUNLVFJBQ0sKKyN1bmRlZiBQVVNIX0JBQ0tUUkFDS19OT1ZBTFVFCisjdW5kZWYgQkFDS1RSQUNLX0FTCisKKyNkZWZpbmUgQ09NUElMRV9CQUNLVFJBQ0tJTkdQQVRIKGN1cnJlbnQpIFwKKyAgZG8gXAorICAgIHsgXAorICAgIGNvbXBpbGVfYmFja3RyYWNraW5ncGF0aChjb21tb24sIChjdXJyZW50KSk7IFwKKyAgICBpZiAoU0xKSVRfVU5MSUtFTFkoc2xqaXRfZ2V0X2NvbXBpbGVyX2Vycm9yKGNvbXBpbGVyKSkpIFwKKyAgICAgIHJldHVybjsgXAorICAgIH0gXAorICB3aGlsZSAoMCkKKworI2RlZmluZSBDVVJSRU5UX0FTKHR5cGUpICgodHlwZSAqKWN1cnJlbnQpCisKK3N0YXRpYyB2b2lkIGNvbXBpbGVfaXRlcmF0b3JfYmFja3RyYWNraW5ncGF0aChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgc3RydWN0IGJhY2t0cmFja19jb21tb24gKmN1cnJlbnQpCit7CitERUZJTkVfQ09NUElMRVI7CitQQ1JFMl9TUFRSIGNjID0gY3VycmVudC0+Y2M7CitQQ1JFMl9VQ0hBUiBvcGNvZGU7CitQQ1JFMl9VQ0hBUiB0eXBlOworc2xqaXRfdWkgbWF4ID0gMCwgZXhhY3Q7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsID0gTlVMTDsKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wID0gTlVMTDsKK2p1bXBfbGlzdCAqanVtcGxpc3QgPSBOVUxMOworUENSRTJfU1BUUiBlbmQ7CitpbnQgcHJpdmF0ZV9kYXRhX3B0ciA9IFBSSVZBVEVfREFUQShjYyk7CitpbnQgYmFzZSA9IChwcml2YXRlX2RhdGFfcHRyID09IDApID8gU0xKSVRfTUVNMShTVEFDS19UT1ApIDogU0xKSVRfTUVNMShTTEpJVF9TUCk7CitpbnQgb2Zmc2V0MCA9IChwcml2YXRlX2RhdGFfcHRyID09IDApID8gU1RBQ0soMCkgOiBwcml2YXRlX2RhdGFfcHRyOworaW50IG9mZnNldDEgPSAocHJpdmF0ZV9kYXRhX3B0ciA9PSAwKSA/IFNUQUNLKDEpIDogcHJpdmF0ZV9kYXRhX3B0ciArIChpbnQpc2l6ZW9mKHNsaml0X3N3KTsKKworY2MgPSBnZXRfaXRlcmF0b3JfcGFyYW1ldGVycyhjb21tb24sIGNjLCAmb3Bjb2RlLCAmdHlwZSwgJm1heCwgJmV4YWN0LCAmZW5kKTsKKworc3dpdGNoKG9wY29kZSkKKyAgeworICBjYXNlIE9QX1NUQVI6CisgIGNhc2UgT1BfVVBUTzoKKyAgaWYgKHR5cGUgPT0gT1BfQU5ZTkwgfHwgdHlwZSA9PSBPUF9FWFRVTkkpCisgICAgeworICAgIFNMSklUX0FTU0VSVChwcml2YXRlX2RhdGFfcHRyID09IDApOworICAgIHNldF9qdW1wcyhDVVJSRU5UX0FTKGNoYXJfaXRlcmF0b3JfYmFja3RyYWNrKS0+dS5iYWNrdHJhY2tzLCBMQUJFTCgpKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKKyAgICBmcmVlX3N0YWNrKGNvbW1vbiwgMSk7CisgICAgQ01QVE8oU0xKSVRfTk9UX0VRVUFMLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIDAsIENVUlJFTlRfQVMoY2hhcl9pdGVyYXRvcl9iYWNrdHJhY2spLT5tYXRjaGluZ3BhdGgpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBpZiAoQ1VSUkVOVF9BUyhjaGFyX2l0ZXJhdG9yX2JhY2t0cmFjayktPnUuY2hhcnBvcy5lbmFibGVkKQorICAgICAgeworICAgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgYmFzZSwgb2Zmc2V0MCk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBiYXNlLCBvZmZzZXQxKTsKKyAgICAgIE9QMihTTEpJVF9TVUIsIFNUUl9QVFIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKDEpKTsKKworICAgICAganVtcCA9IENNUChTTEpJVF9MRVNTX0VRVUFMLCBTVFJfUFRSLCAwLCBUTVAyLCAwKTsKKyAgICAgIGxhYmVsID0gTEFCRUwoKTsKKyAgICAgIE9QMShNT1ZfVUNIQVIsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RSX1BUUiksIElOX1VDSEFSUygtMSkpOworICAgICAgT1AxKFNMSklUX01PViwgYmFzZSwgb2Zmc2V0MCwgU1RSX1BUUiwgMCk7CisgICAgICBpZiAoQ1VSUkVOVF9BUyhjaGFyX2l0ZXJhdG9yX2JhY2t0cmFjayktPnUuY2hhcnBvcy5vdGhlcmNhc2ViaXQgIT0gMCkKKyAgICAgICAgT1AyKFNMSklUX09SLCBUTVAxLCAwLCBUTVAxLCAwLCBTTEpJVF9JTU0sIENVUlJFTlRfQVMoY2hhcl9pdGVyYXRvcl9iYWNrdHJhY2spLT51LmNoYXJwb3Mub3RoZXJjYXNlYml0KTsKKyAgICAgIENNUFRPKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIENVUlJFTlRfQVMoY2hhcl9pdGVyYXRvcl9iYWNrdHJhY2spLT51LmNoYXJwb3MuY2hyLCBDVVJSRU5UX0FTKGNoYXJfaXRlcmF0b3JfYmFja3RyYWNrKS0+bWF0Y2hpbmdwYXRoKTsKKyAgICAgIHNraXBfY2hhcl9iYWNrKGNvbW1vbik7CisgICAgICBDTVBUTyhTTEpJVF9HUkVBVEVSLCBTVFJfUFRSLCAwLCBUTVAyLCAwLCBsYWJlbCk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgYmFzZSwgb2Zmc2V0MCk7CisgICAgICBqdW1wID0gQ01QKFNMSklUX0xFU1NfRVFVQUwsIFNUUl9QVFIsIDAsIGJhc2UsIG9mZnNldDEpOworICAgICAgc2tpcF9jaGFyX2JhY2soY29tbW9uKTsKKyAgICAgIE9QMShTTEpJVF9NT1YsIGJhc2UsIG9mZnNldDAsIFNUUl9QVFIsIDApOworICAgICAgSlVNUFRPKFNMSklUX0pVTVAsIENVUlJFTlRfQVMoY2hhcl9pdGVyYXRvcl9iYWNrdHJhY2spLT5tYXRjaGluZ3BhdGgpOworICAgICAgfQorICAgIEpVTVBIRVJFKGp1bXApOworICAgIGlmIChwcml2YXRlX2RhdGFfcHRyID09IDApCisgICAgICBmcmVlX3N0YWNrKGNvbW1vbiwgMik7CisgICAgfQorICBicmVhazsKKworICBjYXNlIE9QX01JTlNUQVI6CisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIGJhc2UsIG9mZnNldDApOworICBjb21waWxlX2NoYXIxX21hdGNoaW5ncGF0aChjb21tb24sIHR5cGUsIGNjLCAmanVtcGxpc3QsIFRSVUUpOworICBPUDEoU0xKSVRfTU9WLCBiYXNlLCBvZmZzZXQwLCBTVFJfUFRSLCAwKTsKKyAgSlVNUFRPKFNMSklUX0pVTVAsIENVUlJFTlRfQVMoY2hhcl9pdGVyYXRvcl9iYWNrdHJhY2spLT5tYXRjaGluZ3BhdGgpOworICBzZXRfanVtcHMoanVtcGxpc3QsIExBQkVMKCkpOworICBpZiAocHJpdmF0ZV9kYXRhX3B0ciA9PSAwKQorICAgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKyAgYnJlYWs7CisKKyAgY2FzZSBPUF9NSU5VUFRPOgorICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBiYXNlLCBvZmZzZXQxKTsKKyAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgYmFzZSwgb2Zmc2V0MCk7CisgIE9QMihTTEpJVF9TVUIgfCBTTEpJVF9TRVRfRSwgVE1QMSwgMCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAxKTsKKyAgYWRkX2p1bXAoY29tcGlsZXIsICZqdW1wbGlzdCwgSlVNUChTTEpJVF9aRVJPKSk7CisKKyAgT1AxKFNMSklUX01PViwgYmFzZSwgb2Zmc2V0MSwgVE1QMSwgMCk7CisgIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgdHlwZSwgY2MsICZqdW1wbGlzdCwgVFJVRSk7CisgIE9QMShTTEpJVF9NT1YsIGJhc2UsIG9mZnNldDAsIFNUUl9QVFIsIDApOworICBKVU1QVE8oU0xKSVRfSlVNUCwgQ1VSUkVOVF9BUyhjaGFyX2l0ZXJhdG9yX2JhY2t0cmFjayktPm1hdGNoaW5ncGF0aCk7CisKKyAgc2V0X2p1bXBzKGp1bXBsaXN0LCBMQUJFTCgpKTsKKyAgaWYgKHByaXZhdGVfZGF0YV9wdHIgPT0gMCkKKyAgICBmcmVlX3N0YWNrKGNvbW1vbiwgMik7CisgIGJyZWFrOworCisgIGNhc2UgT1BfUVVFUlk6CisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIGJhc2UsIG9mZnNldDApOworICBPUDEoU0xKSVRfTU9WLCBiYXNlLCBvZmZzZXQwLCBTTEpJVF9JTU0sIDApOworICBDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgMCwgQ1VSUkVOVF9BUyhjaGFyX2l0ZXJhdG9yX2JhY2t0cmFjayktPm1hdGNoaW5ncGF0aCk7CisgIGp1bXAgPSBKVU1QKFNMSklUX0pVTVApOworICBzZXRfanVtcHMoQ1VSUkVOVF9BUyhjaGFyX2l0ZXJhdG9yX2JhY2t0cmFjayktPnUuYmFja3RyYWNrcywgTEFCRUwoKSk7CisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIGJhc2UsIG9mZnNldDApOworICBPUDEoU0xKSVRfTU9WLCBiYXNlLCBvZmZzZXQwLCBTTEpJVF9JTU0sIDApOworICBKVU1QVE8oU0xKSVRfSlVNUCwgQ1VSUkVOVF9BUyhjaGFyX2l0ZXJhdG9yX2JhY2t0cmFjayktPm1hdGNoaW5ncGF0aCk7CisgIEpVTVBIRVJFKGp1bXApOworICBpZiAocHJpdmF0ZV9kYXRhX3B0ciA9PSAwKQorICAgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKyAgYnJlYWs7CisKKyAgY2FzZSBPUF9NSU5RVUVSWToKKyAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgYmFzZSwgb2Zmc2V0MCk7CisgIE9QMShTTEpJVF9NT1YsIGJhc2UsIG9mZnNldDAsIFNMSklUX0lNTSwgMCk7CisgIGp1bXAgPSBDTVAoU0xKSVRfRVFVQUwsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgMCk7CisgIGNvbXBpbGVfY2hhcjFfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgdHlwZSwgY2MsICZqdW1wbGlzdCwgVFJVRSk7CisgIEpVTVBUTyhTTEpJVF9KVU1QLCBDVVJSRU5UX0FTKGNoYXJfaXRlcmF0b3JfYmFja3RyYWNrKS0+bWF0Y2hpbmdwYXRoKTsKKyAgc2V0X2p1bXBzKGp1bXBsaXN0LCBMQUJFTCgpKTsKKyAgSlVNUEhFUkUoanVtcCk7CisgIGlmIChwcml2YXRlX2RhdGFfcHRyID09IDApCisgICAgZnJlZV9zdGFjayhjb21tb24sIDEpOworICBicmVhazsKKworICBjYXNlIE9QX0VYQUNUOgorICBjYXNlIE9QX1BPU1NUQVI6CisgIGNhc2UgT1BfUE9TUVVFUlk6CisgIGNhc2UgT1BfUE9TVVBUTzoKKyAgYnJlYWs7CisKKyAgZGVmYXVsdDoKKyAgU0xKSVRfQVNTRVJUX1NUT1AoKTsKKyAgYnJlYWs7CisgIH0KKworICBzZXRfanVtcHMoY3VycmVudC0+dG9wYmFja3RyYWNrcywgTEFCRUwoKSk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBjb21waWxlX3JlZl9pdGVyYXRvcl9iYWNrdHJhY2tpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3QgYmFja3RyYWNrX2NvbW1vbiAqY3VycmVudCkKK3sKK0RFRklORV9DT01QSUxFUjsKK1BDUkUyX1NQVFIgY2MgPSBjdXJyZW50LT5jYzsKK0JPT0wgcmVmID0gKCpjYyA9PSBPUF9SRUYgfHwgKmNjID09IE9QX1JFRkkpOworUENSRTJfVUNIQVIgdHlwZTsKKwordHlwZSA9IGNjW3JlZiA/IDEgKyBJTU0yX1NJWkUgOiAxICsgMiAqIElNTTJfU0laRV07CisKK2lmICgodHlwZSAmIDB4MSkgPT0gMCkKKyAgeworICAvKiBNYXhpbWl6ZSBjYXNlLiAqLworICBzZXRfanVtcHMoY3VycmVudC0+dG9wYmFja3RyYWNrcywgTEFCRUwoKSk7CisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCkpOworICBmcmVlX3N0YWNrKGNvbW1vbiwgMSk7CisgIENNUFRPKFNMSklUX05PVF9FUVVBTCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCAwLCBDVVJSRU5UX0FTKHJlZl9pdGVyYXRvcl9iYWNrdHJhY2spLT5tYXRjaGluZ3BhdGgpOworICByZXR1cm47CisgIH0KKworT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CitDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgMCwgQ1VSUkVOVF9BUyhyZWZfaXRlcmF0b3JfYmFja3RyYWNrKS0+bWF0Y2hpbmdwYXRoKTsKK3NldF9qdW1wcyhjdXJyZW50LT50b3BiYWNrdHJhY2tzLCBMQUJFTCgpKTsKK2ZyZWVfc3RhY2soY29tbW9uLCByZWYgPyAyIDogMyk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBjb21waWxlX3JlY3Vyc2VfYmFja3RyYWNraW5ncGF0aChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgc3RydWN0IGJhY2t0cmFja19jb21tb24gKmN1cnJlbnQpCit7CitERUZJTkVfQ09NUElMRVI7CisKK2lmIChDVVJSRU5UX0FTKHJlY3Vyc2VfYmFja3RyYWNrKS0+aW5saW5lZF9wYXR0ZXJuKQorICBjb21waWxlX2JhY2t0cmFja2luZ3BhdGgoY29tbW9uLCBjdXJyZW50LT50b3ApOworc2V0X2p1bXBzKGN1cnJlbnQtPnRvcGJhY2t0cmFja3MsIExBQkVMKCkpOworaWYgKENVUlJFTlRfQVMocmVjdXJzZV9iYWNrdHJhY2spLT5pbmxpbmVkX3BhdHRlcm4pCisgIHJldHVybjsKKworaWYgKGNvbW1vbi0+aGFzX3NldF9zb20gJiYgY29tbW9uLT5tYXJrX3B0ciAhPSAwKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCkpOworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpKTsKKyAgZnJlZV9zdGFjayhjb21tb24sIDIpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUigwKSwgVE1QMiwgMCk7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hcmtfcHRyLCBUTVAxLCAwKTsKKyAgfQorZWxzZSBpZiAoY29tbW9uLT5oYXNfc2V0X3NvbSB8fCBjb21tb24tPm1hcmtfcHRyICE9IDApCisgIHsKKyAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+aGFzX3NldF9zb20gPyAoaW50KShPVkVDVE9SKDApKSA6IGNvbW1vbi0+bWFya19wdHIsIFRNUDIsIDApOworICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBpbGVfYXNzZXJ0X2JhY2t0cmFja2luZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIHN0cnVjdCBiYWNrdHJhY2tfY29tbW9uICpjdXJyZW50KQoreworREVGSU5FX0NPTVBJTEVSOworUENSRTJfU1BUUiBjYyA9IGN1cnJlbnQtPmNjOworUENSRTJfVUNIQVIgYnJhID0gT1BfQlJBOworc3RydWN0IHNsaml0X2p1bXAgKmJyYWp1bXAgPSBOVUxMOworCitTTEpJVF9BU1NFUlQoKmNjICE9IE9QX0JSQU1JTlpFUk8pOworaWYgKCpjYyA9PSBPUF9CUkFaRVJPKQorICB7CisgIGJyYSA9ICpjYzsKKyAgY2MrKzsKKyAgfQorCitpZiAoYnJhID09IE9QX0JSQVpFUk8pCisgIHsKKyAgU0xKSVRfQVNTRVJUKGN1cnJlbnQtPnRvcGJhY2t0cmFja3MgPT0gTlVMTCk7CisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCkpOworICB9CisKK2lmIChDVVJSRU5UX0FTKGFzc2VydF9iYWNrdHJhY2spLT5mcmFtZXNpemUgPCAwKQorICB7CisgIHNldF9qdW1wcyhjdXJyZW50LT50b3BiYWNrdHJhY2tzLCBMQUJFTCgpKTsKKworICBpZiAoYnJhID09IE9QX0JSQVpFUk8pCisgICAgeworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFNMSklUX0lNTSwgMCk7CisgICAgQ01QVE8oU0xKSVRfTk9UX0VRVUFMLCBTVFJfUFRSLCAwLCBTTEpJVF9JTU0sIDAsIENVUlJFTlRfQVMoYXNzZXJ0X2JhY2t0cmFjayktPm1hdGNoaW5ncGF0aCk7CisgICAgZnJlZV9zdGFjayhjb21tb24sIDEpOworICAgIH0KKyAgcmV0dXJuOworICB9CisKK2lmIChicmEgPT0gT1BfQlJBWkVSTykKKyAgeworICBpZiAoKmNjID09IE9QX0FTU0VSVF9OT1QgfHwgKmNjID09IE9QX0FTU0VSVEJBQ0tfTk9UKQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTTEpJVF9JTU0sIDApOworICAgIENNUFRPKFNMSklUX05PVF9FUVVBTCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCAwLCBDVVJSRU5UX0FTKGFzc2VydF9iYWNrdHJhY2spLT5tYXRjaGluZ3BhdGgpOworICAgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKyAgICByZXR1cm47CisgICAgfQorICBmcmVlX3N0YWNrKGNvbW1vbiwgMSk7CisgIGJyYWp1bXAgPSBDTVAoU0xKSVRfRVFVQUwsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgMCk7CisgIH0KKworaWYgKCpjYyA9PSBPUF9BU1NFUlQgfHwgKmNjID09IE9QX0FTU0VSVEJBQ0spCisgIHsKKyAgT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgQ1VSUkVOVF9BUyhhc3NlcnRfYmFja3RyYWNrKS0+cHJpdmF0ZV9kYXRhX3B0cik7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5yZXZlcnRmcmFtZXMsIEpVTVAoU0xKSVRfRkFTVF9DQUxMKSk7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBDVVJSRU5UX0FTKGFzc2VydF9iYWNrdHJhY2spLT5wcml2YXRlX2RhdGFfcHRyLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIENVUlJFTlRfQVMoYXNzZXJ0X2JhY2t0cmFjayktPmZyYW1lc2l6ZSAqIHNpemVvZihzbGppdF9zdykpOworCisgIHNldF9qdW1wcyhjdXJyZW50LT50b3BiYWNrdHJhY2tzLCBMQUJFTCgpKTsKKyAgfQorZWxzZQorICBzZXRfanVtcHMoY3VycmVudC0+dG9wYmFja3RyYWNrcywgTEFCRUwoKSk7CisKK2lmIChicmEgPT0gT1BfQlJBWkVSTykKKyAgeworICAvKiBXZSBrbm93IHRoZXJlIGlzIGVub3VnaCBwbGFjZSBvbiB0aGUgc3RhY2suICovCisgIE9QMihTTEpJVF9BREQsIFNUQUNLX1RPUCwgMCwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9JTU0sIHNpemVvZihzbGppdF9zdykpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApLCBTTEpJVF9JTU0sIDApOworICBKVU1QVE8oU0xKSVRfSlVNUCwgQ1VSUkVOVF9BUyhhc3NlcnRfYmFja3RyYWNrKS0+bWF0Y2hpbmdwYXRoKTsKKyAgSlVNUEhFUkUoYnJhanVtcCk7CisgIH0KK30KKworc3RhdGljIHZvaWQgY29tcGlsZV9icmFja2V0X2JhY2t0cmFja2luZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIHN0cnVjdCBiYWNrdHJhY2tfY29tbW9uICpjdXJyZW50KQoreworREVGSU5FX0NPTVBJTEVSOworaW50IG9wY29kZSwgc3RhY2tzaXplLCBhbHRfY291bnQsIGFsdF9tYXg7CitpbnQgb2Zmc2V0ID0gMDsKK2ludCBwcml2YXRlX2RhdGFfcHRyID0gQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnByaXZhdGVfZGF0YV9wdHI7CitpbnQgcmVwZWF0X3B0ciA9IDAsIHJlcGVhdF90eXBlID0gMCwgcmVwZWF0X2NvdW50ID0gMDsKK1BDUkUyX1NQVFIgY2MgPSBjdXJyZW50LT5jYzsKK1BDUkUyX1NQVFIgY2NiZWdpbjsKK1BDUkUyX1NQVFIgY2NwcmV2OworUENSRTJfVUNIQVIgYnJhID0gT1BfQlJBOworUENSRTJfVUNIQVIga2V0OworYXNzZXJ0X2JhY2t0cmFjayAqYXNzZXJ0Oworc2xqaXRfdXcgKm5leHRfdXBkYXRlX2FkZHIgPSBOVUxMOworQk9PTCBoYXNfYWx0ZXJuYXRpdmVzOworQk9PTCBuZWVkc19jb250cm9sX2hlYWQgPSBGQUxTRTsKK3N0cnVjdCBzbGppdF9qdW1wICpicmF6ZXJvID0gTlVMTDsKK3N0cnVjdCBzbGppdF9qdW1wICphbHQxID0gTlVMTDsKK3N0cnVjdCBzbGppdF9qdW1wICphbHQyID0gTlVMTDsKK3N0cnVjdCBzbGppdF9qdW1wICpvbmNlID0gTlVMTDsKK3N0cnVjdCBzbGppdF9qdW1wICpjb25kID0gTlVMTDsKK3N0cnVjdCBzbGppdF9sYWJlbCAqcm1pbl9sYWJlbCA9IE5VTEw7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmV4YWN0X2xhYmVsID0gTlVMTDsKKworaWYgKCpjYyA9PSBPUF9CUkFaRVJPIHx8ICpjYyA9PSBPUF9CUkFNSU5aRVJPKQorICB7CisgIGJyYSA9ICpjYzsKKyAgY2MrKzsKKyAgfQorCitvcGNvZGUgPSAqY2M7CitjY2JlZ2luID0gYnJhY2tldGVuZChjYykgLSAxIC0gTElOS19TSVpFOwora2V0ID0gKmNjYmVnaW47CitpZiAoa2V0ID09IE9QX0tFVCAmJiBQUklWQVRFX0RBVEEoY2NiZWdpbikgIT0gMCkKKyAgeworICByZXBlYXRfcHRyID0gUFJJVkFURV9EQVRBKGNjYmVnaW4pOworICByZXBlYXRfdHlwZSA9IFBSSVZBVEVfREFUQShjY2JlZ2luICsgMik7CisgIHJlcGVhdF9jb3VudCA9IFBSSVZBVEVfREFUQShjY2JlZ2luICsgMyk7CisgIFNMSklUX0FTU0VSVChyZXBlYXRfdHlwZSAhPSAwICYmIHJlcGVhdF9jb3VudCAhPSAwKTsKKyAgaWYgKHJlcGVhdF90eXBlID09IE9QX1VQVE8pCisgICAga2V0ID0gT1BfS0VUUk1BWDsKKyAgaWYgKHJlcGVhdF90eXBlID09IE9QX01JTlVQVE8pCisgICAga2V0ID0gT1BfS0VUUk1JTjsKKyAgfQorY2NiZWdpbiA9IGNjOworY2MgKz0gR0VUKGNjLCAxKTsKK2hhc19hbHRlcm5hdGl2ZXMgPSAqY2MgPT0gT1BfQUxUOworaWYgKFNMSklUX1VOTElLRUxZKG9wY29kZSA9PSBPUF9DT05EKSB8fCBTTEpJVF9VTkxJS0VMWShvcGNvZGUgPT0gT1BfU0NPTkQpKQorICBoYXNfYWx0ZXJuYXRpdmVzID0gKGNjYmVnaW5bMSArIExJTktfU0laRV0gPj0gT1BfQVNTRVJUICYmIGNjYmVnaW5bMSArIExJTktfU0laRV0gPD0gT1BfQVNTRVJUQkFDS19OT1QpIHx8IENVUlJFTlRfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmNvbmRmYWlsZWQgIT0gTlVMTDsKK2lmIChvcGNvZGUgPT0gT1BfQ0JSQSB8fCBvcGNvZGUgPT0gT1BfU0NCUkEpCisgIG9mZnNldCA9IChHRVQyKGNjYmVnaW4sIDEgKyBMSU5LX1NJWkUpKSA8PCAxOworaWYgKFNMSklUX1VOTElLRUxZKG9wY29kZSA9PSBPUF9DT05EKSAmJiAoKmNjID09IE9QX0tFVFJNQVggfHwgKmNjID09IE9QX0tFVFJNSU4pKQorICBvcGNvZGUgPSBPUF9TQ09ORDsKK2lmIChTTEpJVF9VTkxJS0VMWShvcGNvZGUgPT0gT1BfT05DRV9OQykpCisgIG9wY29kZSA9IE9QX09OQ0U7CisKK2FsdF9tYXggPSBoYXNfYWx0ZXJuYXRpdmVzID8gbm9fYWx0ZXJuYXRpdmVzKGNjYmVnaW4pIDogMDsKKworLyogRGVjb2RpbmcgdGhlIG5lZWRzX2NvbnRyb2xfaGVhZCBpbiBmcmFtZXNpemUuICovCitpZiAob3Bjb2RlID09IE9QX09OQ0UpCisgIHsKKyAgbmVlZHNfY29udHJvbF9oZWFkID0gKENVUlJFTlRfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmZyYW1lc2l6ZSAmIDB4MSkgIT0gMDsKKyAgQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplID4+PSAxOworICB9CisKK2lmIChrZXQgIT0gT1BfS0VUICYmIHJlcGVhdF90eXBlICE9IDApCisgIHsKKyAgLyogVE1QMSBpcyB1c2VkIGluIE9QX0tFVFJNSU4gYmVsb3cuICovCisgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCkpOworICBmcmVlX3N0YWNrKGNvbW1vbiwgMSk7CisgIGlmIChyZXBlYXRfdHlwZSA9PSBPUF9VUFRPKQorICAgIE9QMihTTEpJVF9BREQsIFNMSklUX01FTTEoU0xKSVRfU1ApLCByZXBlYXRfcHRyLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDEpOworICBlbHNlCisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHJlcGVhdF9wdHIsIFRNUDEsIDApOworICB9CisKK2lmIChrZXQgPT0gT1BfS0VUUk1BWCkKKyAgeworICBpZiAoYnJhID09IE9QX0JSQVpFUk8pCisgICAgeworICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCkpOworICAgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKyAgICBicmF6ZXJvID0gQ01QKFNMSklUX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDApOworICAgIH0KKyAgfQorZWxzZSBpZiAoa2V0ID09IE9QX0tFVFJNSU4pCisgIHsKKyAgaWYgKGJyYSAhPSBPUF9CUkFNSU5aRVJPKQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKKyAgICBpZiAocmVwZWF0X3R5cGUgIT0gMCkKKyAgICAgIHsKKyAgICAgIC8qIFRNUDEgd2FzIHNldCBhIGZldyBsaW5lcyBhYm92ZS4gKi8KKyAgICAgIENNUFRPKFNMSklUX05PVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAwLCBDVVJSRU5UX0FTKGJyYWNrZXRfYmFja3RyYWNrKS0+cmVjdXJzaXZlX21hdGNoaW5ncGF0aCk7CisgICAgICAvKiBEcm9wIFNUUl9QVFIgZm9yIG5vbi1ncmVlZHkgcGx1cyBxdWFudGlmaWVyLiAqLworICAgICAgaWYgKG9wY29kZSAhPSBPUF9PTkNFKQorICAgICAgICBmcmVlX3N0YWNrKGNvbW1vbiwgMSk7CisgICAgICB9CisgICAgZWxzZSBpZiAob3Bjb2RlID49IE9QX1NCUkEgfHwgb3Bjb2RlID09IE9QX09OQ0UpCisgICAgICB7CisgICAgICAvKiBDaGVja2luZyB6ZXJvLWxlbmd0aCBpdGVyYXRpb24uICovCisgICAgICBpZiAob3Bjb2RlICE9IE9QX09OQ0UgfHwgQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplIDwgMCkKKyAgICAgICAgQ01QVE8oU0xKSVRfTk9UX0VRVUFMLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0ciwgQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnJlY3Vyc2l2ZV9tYXRjaGluZ3BhdGgpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyKTsKKyAgICAgICAgQ01QVE8oU0xKSVRfTk9UX0VRVUFMLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCAoQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplICsgMSkgKiBzaXplb2Yoc2xqaXRfc3cpLCBDVVJSRU5UX0FTKGJyYWNrZXRfYmFja3RyYWNrKS0+cmVjdXJzaXZlX21hdGNoaW5ncGF0aCk7CisgICAgICAgIH0KKyAgICAgIC8qIERyb3AgU1RSX1BUUiBmb3Igbm9uLWdyZWVkeSBwbHVzIHF1YW50aWZpZXIuICovCisgICAgICBpZiAob3Bjb2RlICE9IE9QX09OQ0UpCisgICAgICAgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICBKVU1QVE8oU0xKSVRfSlVNUCwgQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnJlY3Vyc2l2ZV9tYXRjaGluZ3BhdGgpOworICAgIH0KKyAgcm1pbl9sYWJlbCA9IExBQkVMKCk7CisgIGlmIChyZXBlYXRfdHlwZSAhPSAwKQorICAgIE9QMihTTEpJVF9BREQsIFNMSklUX01FTTEoU0xKSVRfU1ApLCByZXBlYXRfcHRyLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcmVwZWF0X3B0ciwgU0xKSVRfSU1NLCAxKTsKKyAgfQorZWxzZSBpZiAoYnJhID09IE9QX0JSQVpFUk8pCisgIHsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKyAgYnJhemVybyA9IENNUChTTEpJVF9OT1RfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgMCk7CisgIH0KK2Vsc2UgaWYgKHJlcGVhdF90eXBlID09IE9QX0VYQUNUKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCByZXBlYXRfcHRyLCBTTEpJVF9JTU0sIDEpOworICBleGFjdF9sYWJlbCA9IExBQkVMKCk7CisgIH0KKworaWYgKG9mZnNldCAhPSAwKQorICB7CisgIGlmIChjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgIT0gMCkKKyAgICB7CisgICAgU0xKSVRfQVNTRVJUKGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0W29mZnNldCA+PiAxXSA9PSAwKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jYXB0dXJlX2xhc3RfcHRyLCBUTVAxLCAwKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDIpKTsKKyAgICBmcmVlX3N0YWNrKGNvbW1vbiwgMyk7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1Iob2Zmc2V0KSwgVE1QMiwgMCk7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1Iob2Zmc2V0ICsgMSksIFRNUDEsIDApOworICAgIH0KKyAgZWxzZSBpZiAoY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXRbb2Zmc2V0ID4+IDFdID09IDApCisgICAgeworICAgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCkpOworICAgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMSkpOworICAgIGZyZWVfc3RhY2soY29tbW9uLCAyKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQpLCBUTVAxLCAwKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQgKyAxKSwgVE1QMiwgMCk7CisgICAgfQorICB9CisKK2lmIChTTEpJVF9VTkxJS0VMWShvcGNvZGUgPT0gT1BfT05DRSkpCisgIHsKKyAgaWYgKENVUlJFTlRfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmZyYW1lc2l6ZSA+PSAwKQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WLCBTVEFDS19UT1AsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+cmV2ZXJ0ZnJhbWVzLCBKVU1QKFNMSklUX0ZBU1RfQ0FMTCkpOworICAgIH0KKyAgb25jZSA9IEpVTVAoU0xKSVRfSlVNUCk7CisgIH0KK2Vsc2UgaWYgKFNMSklUX1VOTElLRUxZKG9wY29kZSA9PSBPUF9DT05EKSB8fCBTTEpJVF9VTkxJS0VMWShvcGNvZGUgPT0gT1BfU0NPTkQpKQorICB7CisgIGlmIChoYXNfYWx0ZXJuYXRpdmVzKQorICAgIHsKKyAgICAvKiBBbHdheXMgZXhhY3RseSBvbmUgYWx0ZXJuYXRpdmUuICovCisgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisgICAgZnJlZV9zdGFjayhjb21tb24sIDEpOworCisgICAgYWx0X21heCA9IDI7CisgICAgYWx0MSA9IENNUChTTEpJVF9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCBzaXplb2Yoc2xqaXRfdXcpKTsKKyAgICB9CisgIH0KK2Vsc2UgaWYgKGhhc19hbHRlcm5hdGl2ZXMpCisgIHsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKworICBpZiAoYWx0X21heCA+IDQpCisgICAgeworICAgIC8qIFRhYmxlIGp1bXAgaWYgYWx0X21heCBpcyBncmVhdGVyIHRoYW4gNC4gKi8KKyAgICBuZXh0X3VwZGF0ZV9hZGRyID0gYWxsb2NhdGVfcmVhZF9vbmx5X2RhdGEoY29tbW9uLCBhbHRfbWF4ICogc2l6ZW9mKHNsaml0X3V3KSk7CisgICAgaWYgKFNMSklUX1VOTElLRUxZKG5leHRfdXBkYXRlX2FkZHIgPT0gTlVMTCkpCisgICAgICByZXR1cm47CisgICAgc2xqaXRfZW1pdF9panVtcChjb21waWxlciwgU0xKSVRfSlVNUCwgU0xKSVRfTUVNMShUTVAxKSwgKHNsaml0X3N3KW5leHRfdXBkYXRlX2FkZHIpOworICAgIGFkZF9sYWJlbF9hZGRyKGNvbW1vbiwgbmV4dF91cGRhdGVfYWRkcisrKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgaWYgKGFsdF9tYXggPT0gNCkKKyAgICAgIGFsdDIgPSBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAyICogc2l6ZW9mKHNsaml0X3V3KSk7CisgICAgYWx0MSA9IENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIHNpemVvZihzbGppdF91dykpOworICAgIH0KKyAgfQorCitDT01QSUxFX0JBQ0tUUkFDS0lOR1BBVEgoY3VycmVudC0+dG9wKTsKK2lmIChjdXJyZW50LT50b3BiYWNrdHJhY2tzKQorICBzZXRfanVtcHMoY3VycmVudC0+dG9wYmFja3RyYWNrcywgTEFCRUwoKSk7CisKK2lmIChTTEpJVF9VTkxJS0VMWShvcGNvZGUgPT0gT1BfQ09ORCkgfHwgU0xKSVRfVU5MSUtFTFkob3Bjb2RlID09IE9QX1NDT05EKSkKKyAgeworICAvKiBDb25kaXRpb25hbCBibG9jayBhbHdheXMgaGFzIGF0IG1vc3Qgb25lIGFsdGVybmF0aXZlLiAqLworICBpZiAoY2NiZWdpblsxICsgTElOS19TSVpFXSA+PSBPUF9BU1NFUlQgJiYgY2NiZWdpblsxICsgTElOS19TSVpFXSA8PSBPUF9BU1NFUlRCQUNLX05PVCkKKyAgICB7CisgICAgU0xKSVRfQVNTRVJUKGhhc19hbHRlcm5hdGl2ZXMpOworICAgIGFzc2VydCA9IENVUlJFTlRfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmFzc2VydDsKKyAgICBpZiAoYXNzZXJ0LT5mcmFtZXNpemUgPj0gMCAmJiAoY2NiZWdpblsxICsgTElOS19TSVpFXSA9PSBPUF9BU1NFUlQgfHwgY2NiZWdpblsxICsgTElOS19TSVpFXSA9PSBPUF9BU1NFUlRCQUNLKSkKKyAgICAgIHsKKyAgICAgIE9QMShTTEpJVF9NT1YsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGFzc2VydC0+cHJpdmF0ZV9kYXRhX3B0cik7CisgICAgICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+cmV2ZXJ0ZnJhbWVzLCBKVU1QKFNMSklUX0ZBU1RfQ0FMTCkpOworICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGFzc2VydC0+cHJpdmF0ZV9kYXRhX3B0ciwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBhc3NlcnQtPmZyYW1lc2l6ZSAqIHNpemVvZihzbGppdF9zdykpOworICAgICAgfQorICAgIGNvbmQgPSBKVU1QKFNMSklUX0pVTVApOworICAgIHNldF9qdW1wcyhDVVJSRU5UX0FTKGJyYWNrZXRfYmFja3RyYWNrKS0+dS5hc3NlcnQtPmNvbmRmYWlsZWQsIExBQkVMKCkpOworICAgIH0KKyAgZWxzZSBpZiAoQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnUuY29uZGZhaWxlZCAhPSBOVUxMKQorICAgIHsKKyAgICBTTEpJVF9BU1NFUlQoaGFzX2FsdGVybmF0aXZlcyk7CisgICAgY29uZCA9IEpVTVAoU0xKSVRfSlVNUCk7CisgICAgc2V0X2p1bXBzKENVUlJFTlRfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmNvbmRmYWlsZWQsIExBQkVMKCkpOworICAgIH0KKyAgZWxzZQorICAgIFNMSklUX0FTU0VSVCghaGFzX2FsdGVybmF0aXZlcyk7CisgIH0KKworaWYgKGhhc19hbHRlcm5hdGl2ZXMpCisgIHsKKyAgYWx0X2NvdW50ID0gc2l6ZW9mKHNsaml0X3V3KTsKKyAgZG8KKyAgICB7CisgICAgY3VycmVudC0+dG9wID0gTlVMTDsKKyAgICBjdXJyZW50LT50b3BiYWNrdHJhY2tzID0gTlVMTDsKKyAgICBjdXJyZW50LT5uZXh0YmFja3RyYWNrcyA9IE5VTEw7CisgICAgLyogQ29uZGl0aW9uYWwgYmxvY2tzIGFsd2F5cyBoYXZlIGFuIGFkZGl0aW9uYWwgYWx0ZXJuYXRpdmUsIGV2ZW4gaWYgaXQgaXMgZW1wdHkuICovCisgICAgaWYgKCpjYyA9PSBPUF9BTFQpCisgICAgICB7CisgICAgICBjY3ByZXYgPSBjYyArIDEgKyBMSU5LX1NJWkU7CisgICAgICBjYyArPSBHRVQoY2MsIDEpOworICAgICAgaWYgKG9wY29kZSAhPSBPUF9DT05EICYmIG9wY29kZSAhPSBPUF9TQ09ORCkKKyAgICAgICAgeworICAgICAgICBpZiAob3Bjb2RlICE9IE9QX09OQ0UpCisgICAgICAgICAgeworICAgICAgICAgIGlmIChwcml2YXRlX2RhdGFfcHRyICE9IDApCisgICAgICAgICAgICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0cik7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSyhuZWVkc19jb250cm9sX2hlYWQgPyAxIDogMCkpOworICAgICAgICB9CisgICAgICBjb21waWxlX21hdGNoaW5ncGF0aChjb21tb24sIGNjcHJldiwgY2MsIGN1cnJlbnQpOworICAgICAgaWYgKFNMSklUX1VOTElLRUxZKHNsaml0X2dldF9jb21waWxlcl9lcnJvcihjb21waWxlcikpKQorICAgICAgICByZXR1cm47CisgICAgICB9CisKKyAgICAvKiBJbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIGN1cnJlbnQgYWx0ZXJuYXRpdmUgaXMgc3VjY2Vzc2Z1bGx5IG1hdGNoZWQuICovCisgICAgLyogVGhlcmUgaXMgYSBzaW1pbGFyIGNvZGUgaW4gY29tcGlsZV9icmFja2V0X21hdGNoaW5ncGF0aC4gKi8KKyAgICBpZiAob3Bjb2RlID09IE9QX09OQ0UpCisgICAgICBtYXRjaF9vbmNlX2NvbW1vbihjb21tb24sIGtldCwgQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplLCBwcml2YXRlX2RhdGFfcHRyLCBoYXNfYWx0ZXJuYXRpdmVzLCBuZWVkc19jb250cm9sX2hlYWQpOworCisgICAgc3RhY2tzaXplID0gMDsKKyAgICBpZiAocmVwZWF0X3R5cGUgPT0gT1BfTUlOVVBUTykKKyAgICAgIHsKKyAgICAgIC8qIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIGNvdW50ZXIuIFRNUDIgd2lsbCBiZSB1c2VkIGJlbG93LiAqLworICAgICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHJlcGVhdF9wdHIpOworICAgICAgc3RhY2tzaXplKys7CisgICAgICB9CisgICAgaWYgKGtldCAhPSBPUF9LRVQgfHwgYnJhICE9IE9QX0JSQSkKKyAgICAgIHN0YWNrc2l6ZSsrOworICAgIGlmIChvZmZzZXQgIT0gMCkKKyAgICAgIHsKKyAgICAgIGlmIChjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgIT0gMCkKKyAgICAgICAgc3RhY2tzaXplKys7CisgICAgICBpZiAoY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXRbb2Zmc2V0ID4+IDFdID09IDApCisgICAgICAgIHN0YWNrc2l6ZSArPSAyOworICAgICAgfQorICAgIGlmIChvcGNvZGUgIT0gT1BfT05DRSkKKyAgICAgIHN0YWNrc2l6ZSsrOworCisgICAgaWYgKHN0YWNrc2l6ZSA+IDApCisgICAgICBhbGxvY2F0ZV9zdGFjayhjb21tb24sIHN0YWNrc2l6ZSk7CisKKyAgICBzdGFja3NpemUgPSAwOworICAgIGlmIChyZXBlYXRfdHlwZSA9PSBPUF9NSU5VUFRPKQorICAgICAgeworICAgICAgLyogVE1QMiB3YXMgc2V0IGFib3ZlLiAqLworICAgICAgT1AyKFNMSklUX1NVQiwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSyhzdGFja3NpemUpLCBUTVAyLCAwLCBTTEpJVF9JTU0sIDEpOworICAgICAgc3RhY2tzaXplKys7CisgICAgICB9CisKKyAgICBpZiAoa2V0ICE9IE9QX0tFVCB8fCBicmEgIT0gT1BfQlJBKQorICAgICAgeworICAgICAgaWYgKGtldCAhPSBPUF9LRVQpCisgICAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2tzaXplKSwgU1RSX1BUUiwgMCk7CisgICAgICBlbHNlCisgICAgICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc3RhY2tzaXplKSwgU0xKSVRfSU1NLCAwKTsKKyAgICAgIHN0YWNrc2l6ZSsrOworICAgICAgfQorCisgICAgaWYgKG9mZnNldCAhPSAwKQorICAgICAgc3RhY2tzaXplID0gbWF0Y2hfY2FwdHVyZV9jb21tb24oY29tbW9uLCBzdGFja3NpemUsIG9mZnNldCwgcHJpdmF0ZV9kYXRhX3B0cik7CisKKyAgICBpZiAob3Bjb2RlICE9IE9QX09OQ0UpCisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHN0YWNrc2l6ZSksIFNMSklUX0lNTSwgYWx0X2NvdW50KTsKKworICAgIGlmIChvZmZzZXQgIT0gMCAmJiBrZXQgPT0gT1BfS0VUUk1BWCAmJiBjb21tb24tPm9wdGltaXplZF9jYnJhY2tldFtvZmZzZXQgPj4gMV0gIT0gMCkKKyAgICAgIHsKKyAgICAgIC8qIElmIGtldCBpcyBub3QgT1BfS0VUUk1BWCwgdGhpcyBjb2RlIHBhdGggaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGp1bXAgdG8gYWx0ZXJuYXRpdmVfbWF0Y2hpbmdwYXRoLiAqLworICAgICAgU0xKSVRfQVNTRVJUKHByaXZhdGVfZGF0YV9wdHIgPT0gT1ZFQ1RPUihvZmZzZXQgKyAwKSk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQgKyAxKSwgU1RSX1BUUiwgMCk7CisgICAgICB9CisKKyAgICBKVU1QVE8oU0xKSVRfSlVNUCwgQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPmFsdGVybmF0aXZlX21hdGNoaW5ncGF0aCk7CisKKyAgICBpZiAob3Bjb2RlICE9IE9QX09OQ0UpCisgICAgICB7CisgICAgICBpZiAoYWx0X21heCA+IDQpCisgICAgICAgIGFkZF9sYWJlbF9hZGRyKGNvbW1vbiwgbmV4dF91cGRhdGVfYWRkcisrKTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBpZiAoYWx0X2NvdW50ICE9IDIgKiBzaXplb2Yoc2xqaXRfdXcpKQorICAgICAgICAgIHsKKyAgICAgICAgICBKVU1QSEVSRShhbHQxKTsKKyAgICAgICAgICBpZiAoYWx0X21heCA9PSAzICYmIGFsdF9jb3VudCA9PSBzaXplb2Yoc2xqaXRfdXcpKQorICAgICAgICAgICAgYWx0MiA9IENNUChTTEpJVF9HUkVBVEVSX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDIgKiBzaXplb2Yoc2xqaXRfdXcpKTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgSlVNUEhFUkUoYWx0Mik7CisgICAgICAgICAgaWYgKGFsdF9tYXggPT0gNCkKKyAgICAgICAgICAgIGFsdDEgPSBDTVAoU0xKSVRfR1JFQVRFUl9FUVVBTCwgVE1QMSwgMCwgU0xKSVRfSU1NLCAzICogc2l6ZW9mKHNsaml0X3V3KSk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBhbHRfY291bnQgKz0gc2l6ZW9mKHNsaml0X3V3KTsKKyAgICAgIH0KKworICAgIENPTVBJTEVfQkFDS1RSQUNLSU5HUEFUSChjdXJyZW50LT50b3ApOworICAgIGlmIChjdXJyZW50LT50b3BiYWNrdHJhY2tzKQorICAgICAgc2V0X2p1bXBzKGN1cnJlbnQtPnRvcGJhY2t0cmFja3MsIExBQkVMKCkpOworICAgIFNMSklUX0FTU0VSVCghY3VycmVudC0+bmV4dGJhY2t0cmFja3MpOworICAgIH0KKyAgd2hpbGUgKCpjYyA9PSBPUF9BTFQpOworCisgIGlmIChjb25kICE9IE5VTEwpCisgICAgeworICAgIFNMSklUX0FTU0VSVChvcGNvZGUgPT0gT1BfQ09ORCB8fCBvcGNvZGUgPT0gT1BfU0NPTkQpOworICAgIGFzc2VydCA9IENVUlJFTlRfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmFzc2VydDsKKyAgICBpZiAoKGNjYmVnaW5bMSArIExJTktfU0laRV0gPT0gT1BfQVNTRVJUX05PVCB8fCBjY2JlZ2luWzEgKyBMSU5LX1NJWkVdID09IE9QX0FTU0VSVEJBQ0tfTk9UKSAmJiBhc3NlcnQtPmZyYW1lc2l6ZSA+PSAwKQorICAgICAgeworICAgICAgT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgYXNzZXJ0LT5wcml2YXRlX2RhdGFfcHRyKTsKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5yZXZlcnRmcmFtZXMsIEpVTVAoU0xKSVRfRkFTVF9DQUxMKSk7CisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgYXNzZXJ0LT5wcml2YXRlX2RhdGFfcHRyLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIGFzc2VydC0+ZnJhbWVzaXplICogc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgICB9CisgICAgSlVNUEhFUkUoY29uZCk7CisgICAgfQorCisgIC8qIEZyZWUgdGhlIFNUUl9QVFIuICovCisgIGlmIChwcml2YXRlX2RhdGFfcHRyID09IDApCisgICAgZnJlZV9zdGFjayhjb21tb24sIDEpOworICB9CisKK2lmIChvZmZzZXQgIT0gMCkKKyAgeworICAvKiBVc2luZyBib3RoIHRtcCByZWdpc3RlciBpcyBiZXR0ZXIgZm9yIGluc3RydWN0aW9uIHNjaGVkdWxpbmcuICovCisgIGlmIChjb21tb24tPm9wdGltaXplZF9jYnJhY2tldFtvZmZzZXQgPj4gMV0gIT0gMCkKKyAgICB7CisgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisgICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygxKSk7CisgICAgZnJlZV9zdGFjayhjb21tb24sIDIpOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKG9mZnNldCksIFRNUDEsIDApOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKG9mZnNldCArIDEpLCBUTVAyLCAwKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisgICAgZnJlZV9zdGFjayhjb21tb24sIDEpOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyLCBUTVAxLCAwKTsKKyAgICB9CisgIH0KK2Vsc2UgaWYgKG9wY29kZSA9PSBPUF9TQlJBIHx8IG9wY29kZSA9PSBPUF9TQ09ORCkKKyAgeworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcHJpdmF0ZV9kYXRhX3B0ciwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKyAgfQorZWxzZSBpZiAob3Bjb2RlID09IE9QX09OQ0UpCisgIHsKKyAgY2MgPSBjY2JlZ2luICsgR0VUKGNjYmVnaW4sIDEpOworICBzdGFja3NpemUgPSBuZWVkc19jb250cm9sX2hlYWQgPyAxIDogMDsKKworICBpZiAoQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplID49IDApCisgICAgeworICAgIC8qIFJlc2V0IGhlYWQgYW5kIGRyb3Agc2F2ZWQgZnJhbWUuICovCisgICAgc3RhY2tzaXplICs9IENVUlJFTlRfQVMoYnJhY2tldF9iYWNrdHJhY2spLT51LmZyYW1lc2l6ZSArICgoa2V0ICE9IE9QX0tFVCB8fCAqY2MgPT0gT1BfQUxUKSA/IDIgOiAxKTsKKyAgICB9CisgIGVsc2UgaWYgKGtldCA9PSBPUF9LRVRSTUFYIHx8ICgqY2MgPT0gT1BfQUxUICYmIGtldCAhPSBPUF9LRVRSTUlOKSkKKyAgICB7CisgICAgLyogVGhlIFNUUl9QVFIgbXVzdCBiZSByZWxlYXNlZC4gKi8KKyAgICBzdGFja3NpemUrKzsKKyAgICB9CisKKyAgaWYgKHN0YWNrc2l6ZSA+IDApCisgICAgZnJlZV9zdGFjayhjb21tb24sIHN0YWNrc2l6ZSk7CisKKyAgSlVNUEhFUkUob25jZSk7CisgIC8qIFJlc3RvcmUgcHJldmlvdXMgcHJpdmF0ZV9kYXRhX3B0ciAqLworICBpZiAoQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplID49IDApCisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHByaXZhdGVfZGF0YV9wdHIsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnUuZnJhbWVzaXplICogc2l6ZW9mKHNsaml0X3N3KSk7CisgIGVsc2UgaWYgKGtldCA9PSBPUF9LRVRSTUlOKQorICAgIHsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpKTsKKyAgICAvKiBTZWUgdGhlIGNvbW1lbnQgYmVsb3cuICovCisgICAgZnJlZV9zdGFjayhjb21tb24sIDIpOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBwcml2YXRlX2RhdGFfcHRyLCBUTVAxLCAwKTsKKyAgICB9CisgIH0KKworaWYgKHJlcGVhdF90eXBlID09IE9QX0VYQUNUKQorICB7CisgIE9QMihTTEpJVF9BREQsIFRNUDEsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCByZXBlYXRfcHRyLCBTTEpJVF9JTU0sIDEpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgcmVwZWF0X3B0ciwgVE1QMSwgMCk7CisgIENNUFRPKFNMSklUX0xFU1NfRVFVQUwsIFRNUDEsIDAsIFNMSklUX0lNTSwgcmVwZWF0X2NvdW50LCBleGFjdF9sYWJlbCk7CisgIH0KK2Vsc2UgaWYgKGtldCA9PSBPUF9LRVRSTUFYKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCkpOworICBpZiAoYnJhICE9IE9QX0JSQVpFUk8pCisgICAgZnJlZV9zdGFjayhjb21tb24sIDEpOworCisgIENNUFRPKFNMSklUX05PVF9FUVVBTCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCAwLCBDVVJSRU5UX0FTKGJyYWNrZXRfYmFja3RyYWNrKS0+cmVjdXJzaXZlX21hdGNoaW5ncGF0aCk7CisgIGlmIChicmEgPT0gT1BfQlJBWkVSTykKKyAgICB7CisgICAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygxKSk7CisgICAgSlVNUFRPKFNMSklUX0pVTVAsIENVUlJFTlRfQVMoYnJhY2tldF9iYWNrdHJhY2spLT56ZXJvX21hdGNoaW5ncGF0aCk7CisgICAgSlVNUEhFUkUoYnJhemVybyk7CisgICAgZnJlZV9zdGFjayhjb21tb24sIDEpOworICAgIH0KKyAgfQorZWxzZSBpZiAoa2V0ID09IE9QX0tFVFJNSU4pCisgIHsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisKKyAgLyogT1BfT05DRSByZW1vdmVzIGV2ZXJ5dGhpbmcgaW4gY2FzZSBvZiBhIGJhY2t0cmFjaywgc28gd2UgZG9uJ3QKKyAgbmVlZCB0byBleHBsaWNpdGx5IHJlbGVhc2UgdGhlIFNUUl9QVFIuIFRoZSBleHRyYSByZWxlYXNlIHdvdWxkCisgIGFmZmVjdCBiYWRseSB0aGUgZnJlZV9zdGFjaygyKSBhYm92ZS4gKi8KKyAgaWYgKG9wY29kZSAhPSBPUF9PTkNFKQorICAgIGZyZWVfc3RhY2soY29tbW9uLCAxKTsKKyAgQ01QVE8oU0xKSVRfTk9UX0VRVUFMLCBUTVAxLCAwLCBTTEpJVF9JTU0sIDAsIHJtaW5fbGFiZWwpOworICBpZiAob3Bjb2RlID09IE9QX09OQ0UpCisgICAgZnJlZV9zdGFjayhjb21tb24sIGJyYSA9PSBPUF9CUkFNSU5aRVJPID8gMiA6IDEpOworICBlbHNlIGlmIChicmEgPT0gT1BfQlJBTUlOWkVSTykKKyAgICBmcmVlX3N0YWNrKGNvbW1vbiwgMSk7CisgIH0KK2Vsc2UgaWYgKGJyYSA9PSBPUF9CUkFaRVJPKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCkpOworICBKVU1QVE8oU0xKSVRfSlVNUCwgQ1VSUkVOVF9BUyhicmFja2V0X2JhY2t0cmFjayktPnplcm9fbWF0Y2hpbmdwYXRoKTsKKyAgSlVNUEhFUkUoYnJhemVybyk7CisgIH0KK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGNvbXBpbGVfYnJhY2tldHBvc19iYWNrdHJhY2tpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3QgYmFja3RyYWNrX2NvbW1vbiAqY3VycmVudCkKK3sKK0RFRklORV9DT01QSUxFUjsKK2ludCBvZmZzZXQ7CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKworaWYgKENVUlJFTlRfQVMoYnJhY2tldHBvc19iYWNrdHJhY2spLT5mcmFtZXNpemUgPCAwKQorICB7CisgIGlmICgqY3VycmVudC0+Y2MgPT0gT1BfQ0JSQVBPUyB8fCAqY3VycmVudC0+Y2MgPT0gT1BfU0NCUkFQT1MpCisgICAgeworICAgIG9mZnNldCA9IChHRVQyKGN1cnJlbnQtPmNjLCAxICsgTElOS19TSVpFKSkgPDwgMTsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDEpKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQpLCBUTVAxLCAwKTsKKyAgICBpZiAoY29tbW9uLT5jYXB0dXJlX2xhc3RfcHRyICE9IDApCisgICAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDIpKTsKKyAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgT1ZFQ1RPUihvZmZzZXQgKyAxKSwgVE1QMiwgMCk7CisgICAgaWYgKGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0ciAhPSAwKQorICAgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y2FwdHVyZV9sYXN0X3B0ciwgVE1QMSwgMCk7CisgICAgfQorICBzZXRfanVtcHMoY3VycmVudC0+dG9wYmFja3RyYWNrcywgTEFCRUwoKSk7CisgIGZyZWVfc3RhY2soY29tbW9uLCBDVVJSRU5UX0FTKGJyYWNrZXRwb3NfYmFja3RyYWNrKS0+c3RhY2tzaXplKTsKKyAgcmV0dXJuOworICB9CisKK09QMShTTEpJVF9NT1YsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIENVUlJFTlRfQVMoYnJhY2tldHBvc19iYWNrdHJhY2spLT5wcml2YXRlX2RhdGFfcHRyKTsKK2FkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5yZXZlcnRmcmFtZXMsIEpVTVAoU0xKSVRfRkFTVF9DQUxMKSk7CisKK2lmIChjdXJyZW50LT50b3BiYWNrdHJhY2tzKQorICB7CisgIGp1bXAgPSBKVU1QKFNMSklUX0pVTVApOworICBzZXRfanVtcHMoY3VycmVudC0+dG9wYmFja3RyYWNrcywgTEFCRUwoKSk7CisgIC8qIERyb3AgdGhlIHN0YWNrIGZyYW1lLiAqLworICBmcmVlX3N0YWNrKGNvbW1vbiwgQ1VSUkVOVF9BUyhicmFja2V0cG9zX2JhY2t0cmFjayktPnN0YWNrc2l6ZSk7CisgIEpVTVBIRVJFKGp1bXApOworICB9CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgQ1VSUkVOVF9BUyhicmFja2V0cG9zX2JhY2t0cmFjayktPnByaXZhdGVfZGF0YV9wdHIsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgQ1VSUkVOVF9BUyhicmFja2V0cG9zX2JhY2t0cmFjayktPmZyYW1lc2l6ZSAqIHNpemVvZihzbGppdF9zdykpOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgY29tcGlsZV9icmFtaW56ZXJvX2JhY2t0cmFja2luZ3BhdGgoY29tcGlsZXJfY29tbW9uICpjb21tb24sIHN0cnVjdCBiYWNrdHJhY2tfY29tbW9uICpjdXJyZW50KQoreworYXNzZXJ0X2JhY2t0cmFjayBiYWNrdHJhY2s7CisKK2N1cnJlbnQtPnRvcCA9IE5VTEw7CitjdXJyZW50LT50b3BiYWNrdHJhY2tzID0gTlVMTDsKK2N1cnJlbnQtPm5leHRiYWNrdHJhY2tzID0gTlVMTDsKK2lmIChjdXJyZW50LT5jY1sxXSA+IE9QX0FTU0VSVEJBQ0tfTk9UKQorICB7CisgIC8qIE1hbnVhbCBjYWxsIG9mIGNvbXBpbGVfYnJhY2tldF9tYXRjaGluZ3BhdGggYW5kIGNvbXBpbGVfYnJhY2tldF9iYWNrdHJhY2tpbmdwYXRoLiAqLworICBjb21waWxlX2JyYWNrZXRfbWF0Y2hpbmdwYXRoKGNvbW1vbiwgY3VycmVudC0+Y2MsIGN1cnJlbnQpOworICBjb21waWxlX2JyYWNrZXRfYmFja3RyYWNraW5ncGF0aChjb21tb24sIGN1cnJlbnQtPnRvcCk7CisgIH0KK2Vsc2UKKyAgeworICBtZW1zZXQoJmJhY2t0cmFjaywgMCwgc2l6ZW9mKGJhY2t0cmFjaykpOworICBiYWNrdHJhY2suY29tbW9uLmNjID0gY3VycmVudC0+Y2M7CisgIGJhY2t0cmFjay5tYXRjaGluZ3BhdGggPSBDVVJSRU5UX0FTKGJyYW1pbnplcm9fYmFja3RyYWNrKS0+bWF0Y2hpbmdwYXRoOworICAvKiBNYW51YWwgY2FsbCBvZiBjb21waWxlX2Fzc2VydF9tYXRjaGluZ3BhdGguICovCisgIGNvbXBpbGVfYXNzZXJ0X21hdGNoaW5ncGF0aChjb21tb24sIGN1cnJlbnQtPmNjLCAmYmFja3RyYWNrLCBGQUxTRSk7CisgIH0KK1NMSklUX0FTU0VSVCghY3VycmVudC0+bmV4dGJhY2t0cmFja3MgJiYgIWN1cnJlbnQtPnRvcGJhY2t0cmFja3MpOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgY29tcGlsZV9jb250cm9sX3ZlcmJfYmFja3RyYWNraW5ncGF0aChjb21waWxlcl9jb21tb24gKmNvbW1vbiwgc3RydWN0IGJhY2t0cmFja19jb21tb24gKmN1cnJlbnQpCit7CitERUZJTkVfQ09NUElMRVI7CitQQ1JFMl9VQ0hBUiBvcGNvZGUgPSAqY3VycmVudC0+Y2M7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxvb3A7CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKworaWYgKG9wY29kZSA9PSBPUF9USEVOIHx8IG9wY29kZSA9PSBPUF9USEVOX0FSRykKKyAgeworICBpZiAoY29tbW9uLT50aGVuX3RyYXAgIT0gTlVMTCkKKyAgICB7CisgICAgU0xKSVRfQVNTRVJUKGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0ciAhPSAwKTsKKworICAgIE9QMShTTEpJVF9NT1YsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0cik7CisgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfSU1NLCB0eXBlX3RoZW5fdHJhcCk7CisgICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfSU1NLCBjb21tb24tPnRoZW5fdHJhcC0+c3RhcnQpOworICAgIGp1bXAgPSBKVU1QKFNMSklUX0pVTVApOworCisgICAgbG9vcCA9IExBQkVMKCk7CisgICAgT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIC0oaW50KXNpemVvZihzbGppdF9zdykpOworICAgIEpVTVBIRVJFKGp1bXApOworICAgIENNUFRPKFNMSklUX05PVF9FUVVBTCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCAtKGludCkoMiAqIHNpemVvZihzbGppdF9zdykpLCBUTVAxLCAwLCBsb29wKTsKKyAgICBDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgLShpbnQpKDMgKiBzaXplb2Yoc2xqaXRfc3cpKSwgVE1QMiwgMCwgbG9vcCk7CisgICAgYWRkX2p1bXAoY29tcGlsZXIsICZjb21tb24tPnRoZW5fdHJhcC0+cXVpdCwgSlVNUChTTEpJVF9KVU1QKSk7CisgICAgcmV0dXJuOworICAgIH0KKyAgZWxzZSBpZiAoY29tbW9uLT5wb3NpdGl2ZV9hc3NlcnQpCisgICAgeworICAgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5wb3NpdGl2ZV9hc3NlcnRfcXVpdCwgSlVNUChTTEpJVF9KVU1QKSk7CisgICAgcmV0dXJuOworICAgIH0KKyAgfQorCitpZiAoY29tbW9uLT5sb2NhbF9leGl0KQorICB7CisgIGlmIChjb21tb24tPnF1aXRfbGFiZWwgPT0gTlVMTCkKKyAgICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+cXVpdCwgSlVNUChTTEpJVF9KVU1QKSk7CisgIGVsc2UKKyAgICBKVU1QVE8oU0xKSVRfSlVNUCwgY29tbW9uLT5xdWl0X2xhYmVsKTsKKyAgcmV0dXJuOworICB9CisKK2lmIChvcGNvZGUgPT0gT1BfU0tJUF9BUkcpCisgIHsKKyAgU0xKSVRfQVNTRVJUKGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0ciAhPSAwKTsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0cik7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBMT0NBTFMwLCBTVEFDS19UT1AsIDApOworICBPUDEoU0xKSVRfTU9WLCBTVEFDS19UT1AsIDAsIFNMSklUX0lNTSwgKHNsaml0X3N3KShjdXJyZW50LT5jYyArIDIpKTsKKyAgc2xqaXRfZW1pdF9panVtcChjb21waWxlciwgU0xKSVRfQ0FMTDIsIFNMSklUX0lNTSwgU0xKSVRfRlVOQ19PRkZTRVQoZG9fc2VhcmNoX21hcmspKTsKKyAgT1AxKFNMSklUX01PViwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMCk7CisKKyAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgVE1QMSwgMCk7CisgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5yZXNldF9tYXRjaCwgQ01QKFNMSklUX05PVF9FUVVBTCwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCAtMSkpOworICByZXR1cm47CisgIH0KKworaWYgKG9wY29kZSA9PSBPUF9TS0lQKQorICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKK2Vsc2UKKyAgT1AxKFNMSklUX01PViwgU1RSX1BUUiwgMCwgU0xKSVRfSU1NLCAwKTsKK2FkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5yZXNldF9tYXRjaCwgSlVNUChTTEpJVF9KVU1QKSk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBjb21waWxlX3RoZW5fdHJhcF9iYWNrdHJhY2tpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3QgYmFja3RyYWNrX2NvbW1vbiAqY3VycmVudCkKK3sKK0RFRklORV9DT01QSUxFUjsKK3N0cnVjdCBzbGppdF9qdW1wICpqdW1wOworaW50IHNpemU7CisKK2lmIChDVVJSRU5UX0FTKHRoZW5fdHJhcF9iYWNrdHJhY2spLT50aGVuX3RyYXApCisgIHsKKyAgY29tbW9uLT50aGVuX3RyYXAgPSBDVVJSRU5UX0FTKHRoZW5fdHJhcF9iYWNrdHJhY2spLT50aGVuX3RyYXA7CisgIHJldHVybjsKKyAgfQorCitzaXplID0gQ1VSUkVOVF9BUyh0aGVuX3RyYXBfYmFja3RyYWNrKS0+ZnJhbWVzaXplOworc2l6ZSA9IDMgKyAoc2l6ZSA8IDAgPyAwIDogc2l6ZSk7CisKK09QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soc2l6ZSAtIDMpKTsKK2ZyZWVfc3RhY2soY29tbW9uLCBzaXplKTsKK2p1bXAgPSBKVU1QKFNMSklUX0pVTVApOworCitzZXRfanVtcHMoQ1VSUkVOVF9BUyh0aGVuX3RyYXBfYmFja3RyYWNrKS0+cXVpdCwgTEFCRUwoKSk7CisvKiBTVEFDS19UT1AgaXMgc2V0IGJ5IFRIRU4uICovCitpZiAoQ1VSUkVOVF9BUyh0aGVuX3RyYXBfYmFja3RyYWNrKS0+ZnJhbWVzaXplID49IDApCisgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5yZXZlcnRmcmFtZXMsIEpVTVAoU0xKSVRfRkFTVF9DQUxMKSk7CitPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKK2ZyZWVfc3RhY2soY29tbW9uLCAzKTsKKworSlVNUEhFUkUoanVtcCk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyLCBUTVAxLCAwKTsKK30KKworc3RhdGljIHZvaWQgY29tcGlsZV9iYWNrdHJhY2tpbmdwYXRoKGNvbXBpbGVyX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3QgYmFja3RyYWNrX2NvbW1vbiAqY3VycmVudCkKK3sKK0RFRklORV9DT01QSUxFUjsKK3RoZW5fdHJhcF9iYWNrdHJhY2sgKnNhdmVfdGhlbl90cmFwID0gY29tbW9uLT50aGVuX3RyYXA7CisKK3doaWxlIChjdXJyZW50KQorICB7CisgIGlmIChjdXJyZW50LT5uZXh0YmFja3RyYWNrcyAhPSBOVUxMKQorICAgIHNldF9qdW1wcyhjdXJyZW50LT5uZXh0YmFja3RyYWNrcywgTEFCRUwoKSk7CisgIHN3aXRjaCgqY3VycmVudC0+Y2MpCisgICAgeworICAgIGNhc2UgT1BfU0VUX1NPTToKKyAgICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKKyAgICBmcmVlX3N0YWNrKGNvbW1vbiwgMSk7CisgICAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1IoMCksIFRNUDEsIDApOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9TVEFSOgorICAgIGNhc2UgT1BfTUlOU1RBUjoKKyAgICBjYXNlIE9QX1BMVVM6CisgICAgY2FzZSBPUF9NSU5QTFVTOgorICAgIGNhc2UgT1BfUVVFUlk6CisgICAgY2FzZSBPUF9NSU5RVUVSWToKKyAgICBjYXNlIE9QX1VQVE86CisgICAgY2FzZSBPUF9NSU5VUFRPOgorICAgIGNhc2UgT1BfRVhBQ1Q6CisgICAgY2FzZSBPUF9QT1NTVEFSOgorICAgIGNhc2UgT1BfUE9TUExVUzoKKyAgICBjYXNlIE9QX1BPU1FVRVJZOgorICAgIGNhc2UgT1BfUE9TVVBUTzoKKyAgICBjYXNlIE9QX1NUQVJJOgorICAgIGNhc2UgT1BfTUlOU1RBUkk6CisgICAgY2FzZSBPUF9QTFVTSToKKyAgICBjYXNlIE9QX01JTlBMVVNJOgorICAgIGNhc2UgT1BfUVVFUllJOgorICAgIGNhc2UgT1BfTUlOUVVFUllJOgorICAgIGNhc2UgT1BfVVBUT0k6CisgICAgY2FzZSBPUF9NSU5VUFRPSToKKyAgICBjYXNlIE9QX0VYQUNUSToKKyAgICBjYXNlIE9QX1BPU1NUQVJJOgorICAgIGNhc2UgT1BfUE9TUExVU0k6CisgICAgY2FzZSBPUF9QT1NRVUVSWUk6CisgICAgY2FzZSBPUF9QT1NVUFRPSToKKyAgICBjYXNlIE9QX05PVFNUQVI6CisgICAgY2FzZSBPUF9OT1RNSU5TVEFSOgorICAgIGNhc2UgT1BfTk9UUExVUzoKKyAgICBjYXNlIE9QX05PVE1JTlBMVVM6CisgICAgY2FzZSBPUF9OT1RRVUVSWToKKyAgICBjYXNlIE9QX05PVE1JTlFVRVJZOgorICAgIGNhc2UgT1BfTk9UVVBUTzoKKyAgICBjYXNlIE9QX05PVE1JTlVQVE86CisgICAgY2FzZSBPUF9OT1RFWEFDVDoKKyAgICBjYXNlIE9QX05PVFBPU1NUQVI6CisgICAgY2FzZSBPUF9OT1RQT1NQTFVTOgorICAgIGNhc2UgT1BfTk9UUE9TUVVFUlk6CisgICAgY2FzZSBPUF9OT1RQT1NVUFRPOgorICAgIGNhc2UgT1BfTk9UU1RBUkk6CisgICAgY2FzZSBPUF9OT1RNSU5TVEFSSToKKyAgICBjYXNlIE9QX05PVFBMVVNJOgorICAgIGNhc2UgT1BfTk9UTUlOUExVU0k6CisgICAgY2FzZSBPUF9OT1RRVUVSWUk6CisgICAgY2FzZSBPUF9OT1RNSU5RVUVSWUk6CisgICAgY2FzZSBPUF9OT1RVUFRPSToKKyAgICBjYXNlIE9QX05PVE1JTlVQVE9JOgorICAgIGNhc2UgT1BfTk9URVhBQ1RJOgorICAgIGNhc2UgT1BfTk9UUE9TU1RBUkk6CisgICAgY2FzZSBPUF9OT1RQT1NQTFVTSToKKyAgICBjYXNlIE9QX05PVFBPU1FVRVJZSToKKyAgICBjYXNlIE9QX05PVFBPU1VQVE9JOgorICAgIGNhc2UgT1BfVFlQRVNUQVI6CisgICAgY2FzZSBPUF9UWVBFTUlOU1RBUjoKKyAgICBjYXNlIE9QX1RZUEVQTFVTOgorICAgIGNhc2UgT1BfVFlQRU1JTlBMVVM6CisgICAgY2FzZSBPUF9UWVBFUVVFUlk6CisgICAgY2FzZSBPUF9UWVBFTUlOUVVFUlk6CisgICAgY2FzZSBPUF9UWVBFVVBUTzoKKyAgICBjYXNlIE9QX1RZUEVNSU5VUFRPOgorICAgIGNhc2UgT1BfVFlQRUVYQUNUOgorICAgIGNhc2UgT1BfVFlQRVBPU1NUQVI6CisgICAgY2FzZSBPUF9UWVBFUE9TUExVUzoKKyAgICBjYXNlIE9QX1RZUEVQT1NRVUVSWToKKyAgICBjYXNlIE9QX1RZUEVQT1NVUFRPOgorICAgIGNhc2UgT1BfQ0xBU1M6CisgICAgY2FzZSBPUF9OQ0xBU1M6CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgfHwgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICBjYXNlIE9QX1hDTEFTUzoKKyNlbmRpZgorICAgIGNvbXBpbGVfaXRlcmF0b3JfYmFja3RyYWNraW5ncGF0aChjb21tb24sIGN1cnJlbnQpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9SRUY6CisgICAgY2FzZSBPUF9SRUZJOgorICAgIGNhc2UgT1BfRE5SRUY6CisgICAgY2FzZSBPUF9ETlJFRkk6CisgICAgY29tcGlsZV9yZWZfaXRlcmF0b3JfYmFja3RyYWNraW5ncGF0aChjb21tb24sIGN1cnJlbnQpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9SRUNVUlNFOgorICAgIGNvbXBpbGVfcmVjdXJzZV9iYWNrdHJhY2tpbmdwYXRoKGNvbW1vbiwgY3VycmVudCk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0FTU0VSVDoKKyAgICBjYXNlIE9QX0FTU0VSVF9OT1Q6CisgICAgY2FzZSBPUF9BU1NFUlRCQUNLOgorICAgIGNhc2UgT1BfQVNTRVJUQkFDS19OT1Q6CisgICAgY29tcGlsZV9hc3NlcnRfYmFja3RyYWNraW5ncGF0aChjb21tb24sIGN1cnJlbnQpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9PTkNFOgorICAgIGNhc2UgT1BfT05DRV9OQzoKKyAgICBjYXNlIE9QX0JSQToKKyAgICBjYXNlIE9QX0NCUkE6CisgICAgY2FzZSBPUF9DT05EOgorICAgIGNhc2UgT1BfU0JSQToKKyAgICBjYXNlIE9QX1NDQlJBOgorICAgIGNhc2UgT1BfU0NPTkQ6CisgICAgY29tcGlsZV9icmFja2V0X2JhY2t0cmFja2luZ3BhdGgoY29tbW9uLCBjdXJyZW50KTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQlJBWkVSTzoKKyAgICBpZiAoY3VycmVudC0+Y2NbMV0gPiBPUF9BU1NFUlRCQUNLX05PVCkKKyAgICAgIGNvbXBpbGVfYnJhY2tldF9iYWNrdHJhY2tpbmdwYXRoKGNvbW1vbiwgY3VycmVudCk7CisgICAgZWxzZQorICAgICAgY29tcGlsZV9hc3NlcnRfYmFja3RyYWNraW5ncGF0aChjb21tb24sIGN1cnJlbnQpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9CUkFQT1M6CisgICAgY2FzZSBPUF9DQlJBUE9TOgorICAgIGNhc2UgT1BfU0JSQVBPUzoKKyAgICBjYXNlIE9QX1NDQlJBUE9TOgorICAgIGNhc2UgT1BfQlJBUE9TWkVSTzoKKyAgICBjb21waWxlX2JyYWNrZXRwb3NfYmFja3RyYWNraW5ncGF0aChjb21tb24sIGN1cnJlbnQpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9CUkFNSU5aRVJPOgorICAgIGNvbXBpbGVfYnJhbWluemVyb19iYWNrdHJhY2tpbmdwYXRoKGNvbW1vbiwgY3VycmVudCk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX01BUks6CisgICAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSyhjb21tb24tPmhhc19za2lwX2FyZyA/IDQgOiAwKSk7CisgICAgaWYgKGNvbW1vbi0+aGFzX3NraXBfYXJnKQorICAgICAgT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCBTVEFDSygwKSk7CisgICAgZnJlZV9zdGFjayhjb21tb24sIGNvbW1vbi0+aGFzX3NraXBfYXJnID8gNSA6IDEpOworICAgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPm1hcmtfcHRyLCBUTVAxLCAwKTsKKyAgICBpZiAoY29tbW9uLT5oYXNfc2tpcF9hcmcpCisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5jb250cm9sX2hlYWRfcHRyLCBUTVAyLCAwKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfVEhFTjoKKyAgICBjYXNlIE9QX1RIRU5fQVJHOgorICAgIGNhc2UgT1BfUFJVTkU6CisgICAgY2FzZSBPUF9QUlVORV9BUkc6CisgICAgY2FzZSBPUF9TS0lQOgorICAgIGNhc2UgT1BfU0tJUF9BUkc6CisgICAgY29tcGlsZV9jb250cm9sX3ZlcmJfYmFja3RyYWNraW5ncGF0aChjb21tb24sIGN1cnJlbnQpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9DT01NSVQ6CisgICAgaWYgKCFjb21tb24tPmxvY2FsX2V4aXQpCisgICAgICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9SRVRVUk5fUkVHLCAwLCBTTEpJVF9JTU0sIFBDUkUyX0VSUk9SX05PTUFUQ0gpOworICAgIGlmIChjb21tb24tPnF1aXRfbGFiZWwgPT0gTlVMTCkKKyAgICAgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5xdWl0LCBKVU1QKFNMSklUX0pVTVApKTsKKyAgICBlbHNlCisgICAgICBKVU1QVE8oU0xKSVRfSlVNUCwgY29tbW9uLT5xdWl0X2xhYmVsKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQ0FMTE9VVDoKKyAgICBjYXNlIE9QX0NBTExPVVRfU1RSOgorICAgIGNhc2UgT1BfRkFJTDoKKyAgICBjYXNlIE9QX0FDQ0VQVDoKKyAgICBjYXNlIE9QX0FTU0VSVF9BQ0NFUFQ6CisgICAgc2V0X2p1bXBzKGN1cnJlbnQtPnRvcGJhY2t0cmFja3MsIExBQkVMKCkpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9USEVOX1RSQVA6CisgICAgLyogQSB2aXJ0dWFsIG9wY29kZSBmb3IgdGhlbiB0cmFwcy4gKi8KKyAgICBjb21waWxlX3RoZW5fdHJhcF9iYWNrdHJhY2tpbmdwYXRoKGNvbW1vbiwgY3VycmVudCk7CisgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgIFNMSklUX0FTU0VSVF9TVE9QKCk7CisgICAgYnJlYWs7CisgICAgfQorICBjdXJyZW50ID0gY3VycmVudC0+cHJldjsKKyAgfQorY29tbW9uLT50aGVuX3RyYXAgPSBzYXZlX3RoZW5fdHJhcDsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGNvbXBpbGVfcmVjdXJzZShjb21waWxlcl9jb21tb24gKmNvbW1vbikKK3sKK0RFRklORV9DT01QSUxFUjsKK1BDUkUyX1NQVFIgY2MgPSBjb21tb24tPnN0YXJ0ICsgY29tbW9uLT5jdXJyZW50ZW50cnktPnN0YXJ0OworUENSRTJfU1BUUiBjY2JlZ2luID0gY2MgKyAxICsgTElOS19TSVpFICsgKCpjYyA9PSBPUF9CUkEgPyAwIDogSU1NMl9TSVpFKTsKK1BDUkUyX1NQVFIgY2NlbmQgPSBicmFja2V0ZW5kKGNjKSAtICgxICsgTElOS19TSVpFKTsKK0JPT0wgbmVlZHNfY29udHJvbF9oZWFkOworaW50IGZyYW1lc2l6ZSA9IGdldF9mcmFtZXNpemUoY29tbW9uLCBjYywgTlVMTCwgVFJVRSwgJm5lZWRzX2NvbnRyb2xfaGVhZCk7CitpbnQgcHJpdmF0ZV9kYXRhX3NpemUgPSBnZXRfcHJpdmF0ZV9kYXRhX2NvcHlfbGVuZ3RoKGNvbW1vbiwgY2NiZWdpbiwgY2NlbmQsIG5lZWRzX2NvbnRyb2xfaGVhZCk7CitpbnQgYWx0ZXJuYXRpdmVzaXplOworQk9PTCBuZWVkc19mcmFtZTsKK2JhY2t0cmFja19jb21tb24gYWx0YmFja3RyYWNrOworc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CisKKy8qIFJlY3Vyc2UgY2FwdHVyZXMgdGhlbi4gKi8KK2NvbW1vbi0+dGhlbl90cmFwID0gTlVMTDsKKworU0xKSVRfQVNTRVJUKCpjYyA9PSBPUF9CUkEgfHwgKmNjID09IE9QX0NCUkEgfHwgKmNjID09IE9QX0NCUkFQT1MgfHwgKmNjID09IE9QX1NDQlJBIHx8ICpjYyA9PSBPUF9TQ0JSQVBPUyk7CituZWVkc19mcmFtZSA9IGZyYW1lc2l6ZSA+PSAwOworaWYgKCFuZWVkc19mcmFtZSkKKyAgZnJhbWVzaXplID0gMDsKK2FsdGVybmF0aXZlc2l6ZSA9ICooY2MgKyBHRVQoY2MsIDEpKSA9PSBPUF9BTFQgPyAxIDogMDsKKworU0xKSVRfQVNTRVJUKGNvbW1vbi0+Y3VycmVudGVudHJ5LT5lbnRyeSA9PSBOVUxMICYmIGNvbW1vbi0+cmVjdXJzaXZlX2hlYWRfcHRyICE9IDApOworY29tbW9uLT5jdXJyZW50ZW50cnktPmVudHJ5ID0gTEFCRUwoKTsKK3NldF9qdW1wcyhjb21tb24tPmN1cnJlbnRlbnRyeS0+Y2FsbHMsIGNvbW1vbi0+Y3VycmVudGVudHJ5LT5lbnRyeSk7CisKK3Nsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgVE1QMiwgMCk7Citjb3VudF9tYXRjaChjb21tb24pOworYWxsb2NhdGVfc3RhY2soY29tbW9uLCBwcml2YXRlX2RhdGFfc2l6ZSArIGZyYW1lc2l6ZSArIGFsdGVybmF0aXZlc2l6ZSk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKHByaXZhdGVfZGF0YV9zaXplICsgZnJhbWVzaXplICsgYWx0ZXJuYXRpdmVzaXplIC0gMSksIFRNUDIsIDApOworY29weV9wcml2YXRlX2RhdGEoY29tbW9uLCBjY2JlZ2luLCBjY2VuZCwgVFJVRSwgcHJpdmF0ZV9kYXRhX3NpemUgKyBmcmFtZXNpemUgKyBhbHRlcm5hdGl2ZXNpemUsIGZyYW1lc2l6ZSArIGFsdGVybmF0aXZlc2l6ZSwgbmVlZHNfY29udHJvbF9oZWFkKTsKK2lmIChuZWVkc19jb250cm9sX2hlYWQpCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmNvbnRyb2xfaGVhZF9wdHIsIFNMSklUX0lNTSwgMCk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5yZWN1cnNpdmVfaGVhZF9wdHIsIFNUQUNLX1RPUCwgMCk7CitpZiAobmVlZHNfZnJhbWUpCisgIGluaXRfZnJhbWUoY29tbW9uLCBjYywgTlVMTCwgZnJhbWVzaXplICsgYWx0ZXJuYXRpdmVzaXplIC0gMSwgYWx0ZXJuYXRpdmVzaXplLCBUUlVFKTsKKworaWYgKGFsdGVybmF0aXZlc2l6ZSA+IDApCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgU1RBQ0soMCksIFNUUl9QVFIsIDApOworCittZW1zZXQoJmFsdGJhY2t0cmFjaywgMCwgc2l6ZW9mKGJhY2t0cmFja19jb21tb24pKTsKK2NvbW1vbi0+cXVpdF9sYWJlbCA9IE5VTEw7Citjb21tb24tPmFjY2VwdF9sYWJlbCA9IE5VTEw7Citjb21tb24tPnF1aXQgPSBOVUxMOworY29tbW9uLT5hY2NlcHQgPSBOVUxMOworYWx0YmFja3RyYWNrLmNjID0gY2NiZWdpbjsKK2NjICs9IEdFVChjYywgMSk7Cit3aGlsZSAoMSkKKyAgeworICBhbHRiYWNrdHJhY2sudG9wID0gTlVMTDsKKyAgYWx0YmFja3RyYWNrLnRvcGJhY2t0cmFja3MgPSBOVUxMOworCisgIGlmIChhbHRiYWNrdHJhY2suY2MgIT0gY2NiZWdpbikKKyAgICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIFNUQUNLKDApKTsKKworICBjb21waWxlX21hdGNoaW5ncGF0aChjb21tb24sIGFsdGJhY2t0cmFjay5jYywgY2MsICZhbHRiYWNrdHJhY2spOworICBpZiAoU0xKSVRfVU5MSUtFTFkoc2xqaXRfZ2V0X2NvbXBpbGVyX2Vycm9yKGNvbXBpbGVyKSkpCisgICAgcmV0dXJuOworCisgIGFkZF9qdW1wKGNvbXBpbGVyLCAmY29tbW9uLT5hY2NlcHQsIEpVTVAoU0xKSVRfSlVNUCkpOworCisgIGNvbXBpbGVfYmFja3RyYWNraW5ncGF0aChjb21tb24sIGFsdGJhY2t0cmFjay50b3ApOworICBpZiAoU0xKSVRfVU5MSUtFTFkoc2xqaXRfZ2V0X2NvbXBpbGVyX2Vycm9yKGNvbXBpbGVyKSkpCisgICAgcmV0dXJuOworICBzZXRfanVtcHMoYWx0YmFja3RyYWNrLnRvcGJhY2t0cmFja3MsIExBQkVMKCkpOworCisgIGlmICgqY2MgIT0gT1BfQUxUKQorICAgIGJyZWFrOworCisgIGFsdGJhY2t0cmFjay5jYyA9IGNjICsgMSArIExJTktfU0laRTsKKyAgY2MgKz0gR0VUKGNjLCAxKTsKKyAgfQorCisvKiBOb25lIG9mIHRoZW0gbWF0Y2hlZC4gKi8KK09QMShTTEpJVF9NT1YsIFRNUDMsIDAsIFNMSklUX0lNTSwgMCk7CitqdW1wID0gSlVNUChTTEpJVF9KVU1QKTsKKworaWYgKGNvbW1vbi0+cXVpdCAhPSBOVUxMKQorICB7CisgIHNldF9qdW1wcyhjb21tb24tPnF1aXQsIExBQkVMKCkpOworICBPUDEoU0xKSVRfTU9WLCBTVEFDS19UT1AsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPnJlY3Vyc2l2ZV9oZWFkX3B0cik7CisgIGlmIChuZWVkc19mcmFtZSkKKyAgICB7CisgICAgT1AyKFNMSklUX1NVQiwgU1RBQ0tfVE9QLCAwLCBTVEFDS19UT1AsIDAsIFNMSklUX0lNTSwgKGZyYW1lc2l6ZSArIGFsdGVybmF0aXZlc2l6ZSkgKiBzaXplb2Yoc2xqaXRfc3cpKTsKKyAgICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+cmV2ZXJ0ZnJhbWVzLCBKVU1QKFNMSklUX0ZBU1RfQ0FMTCkpOworICAgIE9QMihTTEpJVF9BREQsIFNUQUNLX1RPUCwgMCwgU1RBQ0tfVE9QLCAwLCBTTEpJVF9JTU0sIChmcmFtZXNpemUgKyBhbHRlcm5hdGl2ZXNpemUpICogc2l6ZW9mKHNsaml0X3N3KSk7CisgICAgfQorICBPUDEoU0xKSVRfTU9WLCBUTVAzLCAwLCBTTEpJVF9JTU0sIDApOworICBjb21tb24tPnF1aXQgPSBOVUxMOworICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+cXVpdCwgSlVNUChTTEpJVF9KVU1QKSk7CisgIH0KKworc2V0X2p1bXBzKGNvbW1vbi0+YWNjZXB0LCBMQUJFTCgpKTsKK09QMShTTEpJVF9NT1YsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+cmVjdXJzaXZlX2hlYWRfcHRyKTsKK2lmIChuZWVkc19mcmFtZSkKKyAgeworICBPUDIoU0xKSVRfU1VCLCBTVEFDS19UT1AsIDAsIFNUQUNLX1RPUCwgMCwgU0xKSVRfSU1NLCAoZnJhbWVzaXplICsgYWx0ZXJuYXRpdmVzaXplKSAqIHNpemVvZihzbGppdF9zdykpOworICBhZGRfanVtcChjb21waWxlciwgJmNvbW1vbi0+cmV2ZXJ0ZnJhbWVzLCBKVU1QKFNMSklUX0ZBU1RfQ0FMTCkpOworICBPUDIoU0xKSVRfQURELCBTVEFDS19UT1AsIDAsIFNUQUNLX1RPUCwgMCwgU0xKSVRfSU1NLCAoZnJhbWVzaXplICsgYWx0ZXJuYXRpdmVzaXplKSAqIHNpemVvZihzbGppdF9zdykpOworICB9CitPUDEoU0xKSVRfTU9WLCBUTVAzLCAwLCBTTEpJVF9JTU0sIDEpOworCitKVU1QSEVSRShqdW1wKTsKK2lmIChjb21tb24tPnF1aXQgIT0gTlVMTCkKKyAgc2V0X2p1bXBzKGNvbW1vbi0+cXVpdCwgTEFCRUwoKSk7Citjb3B5X3ByaXZhdGVfZGF0YShjb21tb24sIGNjYmVnaW4sIGNjZW5kLCBGQUxTRSwgcHJpdmF0ZV9kYXRhX3NpemUgKyBmcmFtZXNpemUgKyBhbHRlcm5hdGl2ZXNpemUsIGZyYW1lc2l6ZSArIGFsdGVybmF0aXZlc2l6ZSwgbmVlZHNfY29udHJvbF9oZWFkKTsKK2ZyZWVfc3RhY2soY29tbW9uLCBwcml2YXRlX2RhdGFfc2l6ZSArIGZyYW1lc2l6ZSArIGFsdGVybmF0aXZlc2l6ZSk7CitpZiAobmVlZHNfY29udHJvbF9oZWFkKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoU1RBQ0tfVE9QKSwgMiAqIHNpemVvZihzbGppdF9zdykpOworICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIHNpemVvZihzbGppdF9zdykpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5yZWN1cnNpdmVfaGVhZF9wdHIsIFRNUDEsIDApOworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBUTVAzLCAwKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0ciwgVE1QMiwgMCk7CisgIH0KK2Vsc2UKKyAgeworICBPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNUQUNLX1RPUCksIHNpemVvZihzbGppdF9zdykpOworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBUTVAzLCAwKTsKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+cmVjdXJzaXZlX2hlYWRfcHRyLCBUTVAyLCAwKTsKKyAgfQorc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgU0xKSVRfTUVNMShTVEFDS19UT1ApLCAwKTsKK30KKworI3VuZGVmIENPTVBJTEVfQkFDS1RSQUNLSU5HUEFUSAorI3VuZGVmIENVUlJFTlRfQVMKKworc3RhdGljIGludCBqaXRfY29tcGlsZShwY3JlMl9jb2RlICpjb2RlLCB1aW50MzJfdCBtb2RlKQoreworcGNyZTJfcmVhbF9jb2RlICpyZSA9IChwY3JlMl9yZWFsX2NvZGUgKiljb2RlOworc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcjsKK2JhY2t0cmFja19jb21tb24gcm9vdGJhY2t0cmFjazsKK2NvbXBpbGVyX2NvbW1vbiBjb21tb25fZGF0YTsKK2NvbXBpbGVyX2NvbW1vbiAqY29tbW9uID0gJmNvbW1vbl9kYXRhOworY29uc3Qgc2xqaXRfdWIgKnRhYmxlcyA9IHJlLT50YWJsZXM7Cit2b2lkICphbGxvY2F0b3JfZGF0YSA9ICZyZS0+bWVtY3RsOworaW50IHByaXZhdGVfZGF0YV9zaXplOworUENSRTJfU1BUUiBjY2VuZDsKK2V4ZWN1dGFibGVfZnVuY3Rpb25zICpmdW5jdGlvbnM7Cit2b2lkICpleGVjdXRhYmxlX2Z1bmM7CitzbGppdF91dyBleGVjdXRhYmxlX3NpemU7CitzbGppdF91dyB0b3RhbF9sZW5ndGg7CitsYWJlbF9hZGRyX2xpc3QgKmxhYmVsX2FkZHI7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKm1haW5sb29wX2xhYmVsID0gTlVMTDsKK3N0cnVjdCBzbGppdF9sYWJlbCAqY29udGludWVfbWF0Y2hfbGFiZWw7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmVtcHR5X21hdGNoX2ZvdW5kX2xhYmVsID0gTlVMTDsKK3N0cnVjdCBzbGppdF9sYWJlbCAqZW1wdHlfbWF0Y2hfYmFja3RyYWNrX2xhYmVsID0gTlVMTDsKK3N0cnVjdCBzbGppdF9sYWJlbCAqcmVzZXRfbWF0Y2hfbGFiZWw7CitzdHJ1Y3Qgc2xqaXRfbGFiZWwgKnF1aXRfbGFiZWw7CitzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKK3N0cnVjdCBzbGppdF9qdW1wICptaW5sZW5ndGhfY2hlY2tfZmFpbGVkID0gTlVMTDsKK3N0cnVjdCBzbGppdF9qdW1wICpyZXFieXRlX25vdGZvdW5kID0gTlVMTDsKK3N0cnVjdCBzbGppdF9qdW1wICplbXB0eV9tYXRjaCA9IE5VTEw7CisKK1NMSklUX0FTU0VSVCh0YWJsZXMpOworCittZW1zZXQoJnJvb3RiYWNrdHJhY2ssIDAsIHNpemVvZihiYWNrdHJhY2tfY29tbW9uKSk7CittZW1zZXQoY29tbW9uLCAwLCBzaXplb2YoY29tcGlsZXJfY29tbW9uKSk7Citjb21tb24tPm5hbWVfdGFibGUgPSAoUENSRTJfU1BUUikoKHVpbnQ4X3QgKilyZSArIHNpemVvZihwY3JlMl9yZWFsX2NvZGUpKTsKK3Jvb3RiYWNrdHJhY2suY2MgPSBjb21tb24tPm5hbWVfdGFibGUgKyByZS0+bmFtZV9jb3VudCAqIHJlLT5uYW1lX2VudHJ5X3NpemU7CisKK2NvbW1vbi0+c3RhcnQgPSByb290YmFja3RyYWNrLmNjOworY29tbW9uLT5yZWFkX29ubHlfZGF0YV9oZWFkID0gTlVMTDsKK2NvbW1vbi0+ZmNjID0gdGFibGVzICsgZmNjX29mZnNldDsKK2NvbW1vbi0+bGNjID0gKHNsaml0X3N3KSh0YWJsZXMgKyBsY2Nfb2Zmc2V0KTsKK2NvbW1vbi0+bW9kZSA9IG1vZGU7Citjb21tb24tPm1pZ2h0X2JlX2VtcHR5ID0gcmUtPm1pbmxlbmd0aCA9PSAwOworY29tbW9uLT5ubHR5cGUgPSBOTFRZUEVfRklYRUQ7Citzd2l0Y2gocmUtPm5ld2xpbmVfY29udmVudGlvbikKKyAgeworICBjYXNlIFBDUkUyX05FV0xJTkVfQ1I6IGNvbW1vbi0+bmV3bGluZSA9IENIQVJfQ1I7IGJyZWFrOworICBjYXNlIFBDUkUyX05FV0xJTkVfTEY6IGNvbW1vbi0+bmV3bGluZSA9IENIQVJfTkw7IGJyZWFrOworICBjYXNlIFBDUkUyX05FV0xJTkVfQ1JMRjogY29tbW9uLT5uZXdsaW5lID0gKENIQVJfQ1IgPDwgOCkgfCBDSEFSX05MOyBicmVhazsKKyAgY2FzZSBQQ1JFMl9ORVdMSU5FX0FOWTogY29tbW9uLT5uZXdsaW5lID0gKENIQVJfQ1IgPDwgOCkgfCBDSEFSX05MOyBjb21tb24tPm5sdHlwZSA9IE5MVFlQRV9BTlk7IGJyZWFrOworICBjYXNlIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRjogY29tbW9uLT5uZXdsaW5lID0gKENIQVJfQ1IgPDwgOCkgfCBDSEFSX05MOyBjb21tb24tPm5sdHlwZSA9IE5MVFlQRV9BTllDUkxGOyBicmVhazsKKyAgZGVmYXVsdDogcmV0dXJuIFBDUkUyX0VSUk9SX0lOVEVSTkFMOworICB9Citjb21tb24tPm5sbWF4ID0gUkVBRF9DSEFSX01BWDsKK2NvbW1vbi0+bmxtaW4gPSAwOworaWYgKHJlLT5ic3JfY29udmVudGlvbiA9PSBQQ1JFMl9CU1JfVU5JQ09ERSkKKyAgY29tbW9uLT5ic3Jfbmx0eXBlID0gTkxUWVBFX0FOWTsKK2Vsc2UgaWYgKHJlLT5ic3JfY29udmVudGlvbiA9PSBQQ1JFMl9CU1JfQU5ZQ1JMRikKKyAgY29tbW9uLT5ic3Jfbmx0eXBlID0gTkxUWVBFX0FOWUNSTEY7CitlbHNlCisgIHsKKyNpZmRlZiBCU1JfQU5ZQ1JMRgorICBjb21tb24tPmJzcl9ubHR5cGUgPSBOTFRZUEVfQU5ZQ1JMRjsKKyNlbHNlCisgIGNvbW1vbi0+YnNyX25sdHlwZSA9IE5MVFlQRV9BTlk7CisjZW5kaWYKKyAgfQorY29tbW9uLT5ic3JfbmxtYXggPSBSRUFEX0NIQVJfTUFYOworY29tbW9uLT5ic3JfbmxtaW4gPSAwOworY29tbW9uLT5lbmRvbmx5ID0gKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9ET0xMQVJfRU5ET05MWSkgIT0gMDsKK2NvbW1vbi0+Y3R5cGVzID0gKHNsaml0X3N3KSh0YWJsZXMgKyBjdHlwZXNfb2Zmc2V0KTsKK2NvbW1vbi0+bmFtZV9jb3VudCA9IHJlLT5uYW1lX2NvdW50OworY29tbW9uLT5uYW1lX2VudHJ5X3NpemUgPSByZS0+bmFtZV9lbnRyeV9zaXplOworY29tbW9uLT51bnNldF9iYWNrcmVmID0gKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGKSAhPSAwOworY29tbW9uLT5hbHRfY2lyY3VtZmxleCA9IChyZS0+b3ZlcmFsbF9vcHRpb25zICYgUENSRTJfQUxUX0NJUkNVTUZMRVgpICE9IDA7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisvKiBQQ1JFX1VURlsxNnwzMl0gaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyBQQ1JFX1VURjguICovCitjb21tb24tPnV0ZiA9IChyZS0+b3ZlcmFsbF9vcHRpb25zICYgUENSRTJfVVRGKSAhPSAwOworY29tbW9uLT51c2VfdWNwID0gKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9VQ1ApICE9IDA7CitpZiAoY29tbW9uLT51dGYpCisgIHsKKyAgaWYgKGNvbW1vbi0+bmx0eXBlID09IE5MVFlQRV9BTlkpCisgICAgY29tbW9uLT5ubG1heCA9IDB4MjAyOTsKKyAgZWxzZSBpZiAoY29tbW9uLT5ubHR5cGUgPT0gTkxUWVBFX0FOWUNSTEYpCisgICAgY29tbW9uLT5ubG1heCA9IChDSEFSX0NSID4gQ0hBUl9OTCkgPyBDSEFSX0NSIDogQ0hBUl9OTDsKKyAgZWxzZQorICAgIHsKKyAgICAvKiBXZSBvbmx5IGNhcmUgYWJvdXQgdGhlIGZpcnN0IG5ld2xpbmUgY2hhcmFjdGVyLiAqLworICAgIGNvbW1vbi0+bmxtYXggPSBjb21tb24tPm5ld2xpbmUgJiAweGZmOworICAgIH0KKworICBpZiAoY29tbW9uLT5ubHR5cGUgPT0gTkxUWVBFX0ZJWEVEKQorICAgIGNvbW1vbi0+bmxtaW4gPSBjb21tb24tPm5ld2xpbmUgJiAweGZmOworICBlbHNlCisgICAgY29tbW9uLT5ubG1pbiA9IChDSEFSX0NSIDwgQ0hBUl9OTCkgPyBDSEFSX0NSIDogQ0hBUl9OTDsKKworICBpZiAoY29tbW9uLT5ic3Jfbmx0eXBlID09IE5MVFlQRV9BTlkpCisgICAgY29tbW9uLT5ic3JfbmxtYXggPSAweDIwMjk7CisgIGVsc2UKKyAgICBjb21tb24tPmJzcl9ubG1heCA9IChDSEFSX0NSID4gQ0hBUl9OTCkgPyBDSEFSX0NSIDogQ0hBUl9OTDsKKyAgY29tbW9uLT5ic3JfbmxtaW4gPSAoQ0hBUl9DUiA8IENIQVJfTkwpID8gQ0hBUl9DUiA6IENIQVJfTkw7CisgIH0KKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgKi8KK2NjZW5kID0gYnJhY2tldGVuZChjb21tb24tPnN0YXJ0KTsKKworLyogQ2FsY3VsYXRlIHRoZSBsb2NhbCBzcGFjZSBzaXplIG9uIHRoZSBzdGFjay4gKi8KK2NvbW1vbi0+b3ZlY3Rvcl9zdGFydCA9IExJTUlUX01BVENIICsgc2l6ZW9mKHNsaml0X3N3KTsKK2NvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0ID0gKHNsaml0X3ViICopU0xKSVRfTUFMTE9DKHJlLT50b3BfYnJhY2tldCArIDEsIGFsbG9jYXRvcl9kYXRhKTsKK2lmICghY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXQpCisgIHJldHVybiBQQ1JFMl9FUlJPUl9OT01FTU9SWTsKKyNpZiBkZWZpbmVkIERFQlVHX0ZPUkNFX1VOT1BUSU1JWkVEX0NCUkFTICYmIERFQlVHX0ZPUkNFX1VOT1BUSU1JWkVEX0NCUkFTID09IDEKK21lbXNldChjb21tb24tPm9wdGltaXplZF9jYnJhY2tldCwgMCwgcmUtPnRvcF9icmFja2V0ICsgMSk7CisjZWxzZQorbWVtc2V0KGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0LCAxLCByZS0+dG9wX2JyYWNrZXQgKyAxKTsKKyNlbmRpZgorCitTTEpJVF9BU1NFUlQoKmNvbW1vbi0+c3RhcnQgPT0gT1BfQlJBICYmIGNjZW5kWy0oMSArIExJTktfU0laRSldID09IE9QX0tFVCk7CisjaWYgZGVmaW5lZCBERUJVR19GT1JDRV9VTk9QVElNSVpFRF9DQlJBUyAmJiBERUJVR19GT1JDRV9VTk9QVElNSVpFRF9DQlJBUyA9PSAyCitjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgPSBjb21tb24tPm92ZWN0b3Jfc3RhcnQ7Citjb21tb24tPm92ZWN0b3Jfc3RhcnQgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKyNlbmRpZgoraWYgKCFjaGVja19vcGNvZGVfdHlwZXMoY29tbW9uLCBjb21tb24tPnN0YXJ0LCBjY2VuZCkpCisgIHsKKyAgU0xKSVRfRlJFRShjb21tb24tPm9wdGltaXplZF9jYnJhY2tldCwgYWxsb2NhdG9yX2RhdGEpOworICByZXR1cm4gUENSRTJfRVJST1JfTk9NRU1PUlk7CisgIH0KKworLyogQ2hlY2tpbmcgZmxhZ3MgYW5kIHVwZGF0aW5nIG92ZWN0b3Jfc3RhcnQuICovCitpZiAobW9kZSA9PSBQQ1JFMl9KSVRfQ09NUExFVEUgJiYgKHJlLT5mbGFncyAmIFBDUkUyX0xBU1RTRVQpICE9IDAgJiYgKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSkgPT0gMCkKKyAgeworICBjb21tb24tPnJlcV9jaGFyX3B0ciA9IGNvbW1vbi0+b3ZlY3Rvcl9zdGFydDsKKyAgY29tbW9uLT5vdmVjdG9yX3N0YXJ0ICs9IHNpemVvZihzbGppdF9zdyk7CisgIH0KK2lmIChtb2RlICE9IFBDUkUyX0pJVF9DT01QTEVURSkKKyAgeworICBjb21tb24tPnN0YXJ0X3VzZWRfcHRyID0gY29tbW9uLT5vdmVjdG9yX3N0YXJ0OworICBjb21tb24tPm92ZWN0b3Jfc3RhcnQgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKyAgaWYgKG1vZGUgPT0gUENSRTJfSklUX1BBUlRJQUxfU09GVCkKKyAgICB7CisgICAgY29tbW9uLT5oaXRfc3RhcnQgPSBjb21tb24tPm92ZWN0b3Jfc3RhcnQ7CisgICAgY29tbW9uLT5vdmVjdG9yX3N0YXJ0ICs9IHNpemVvZihzbGppdF9zdyk7CisgICAgfQorICB9CitpZiAoKHJlLT5vdmVyYWxsX29wdGlvbnMgJiAoUENSRTJfRklSU1RMSU5FIHwgUENSRTJfVVNFX09GRlNFVF9MSU1JVCkpICE9IDApCisgIHsKKyAgY29tbW9uLT5tYXRjaF9lbmRfcHRyID0gY29tbW9uLT5vdmVjdG9yX3N0YXJ0OworICBjb21tb24tPm92ZWN0b3Jfc3RhcnQgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKyAgfQorI2lmIGRlZmluZWQgREVCVUdfRk9SQ0VfQ09OVFJPTF9IRUFEICYmIERFQlVHX0ZPUkNFX0NPTlRST0xfSEVBRAorY29tbW9uLT5jb250cm9sX2hlYWRfcHRyID0gMTsKKyNlbmRpZgoraWYgKGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0ciAhPSAwKQorICB7CisgIGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0ciA9IGNvbW1vbi0+b3ZlY3Rvcl9zdGFydDsKKyAgY29tbW9uLT5vdmVjdG9yX3N0YXJ0ICs9IHNpemVvZihzbGppdF9zdyk7CisgIH0KK2lmIChjb21tb24tPmhhc19zZXRfc29tKQorICB7CisgIC8qIFNhdmluZyB0aGUgcmVhbCBzdGFydCBwb2ludGVyIGlzIG5lY2Vzc2FyeS4gKi8KKyAgY29tbW9uLT5zdGFydF9wdHIgPSBjb21tb24tPm92ZWN0b3Jfc3RhcnQ7CisgIGNvbW1vbi0+b3ZlY3Rvcl9zdGFydCArPSBzaXplb2Yoc2xqaXRfc3cpOworICB9CisKKy8qIEFsaWduaW5nIG92ZWN0b3IgdG8gZXZlbiBudW1iZXIgb2Ygc2xqaXQgd29yZHMuICovCitpZiAoKGNvbW1vbi0+b3ZlY3Rvcl9zdGFydCAmIHNpemVvZihzbGppdF9zdykpICE9IDApCisgIGNvbW1vbi0+b3ZlY3Rvcl9zdGFydCArPSBzaXplb2Yoc2xqaXRfc3cpOworCitpZiAoY29tbW9uLT5zdGFydF9wdHIgPT0gMCkKKyAgY29tbW9uLT5zdGFydF9wdHIgPSBPVkVDVE9SKDApOworCisvKiBDYXB0dXJpbmcgYnJhY2tldHMgY2Fubm90IGJlIG9wdGltaXplZCBpZiBjYWxsb3V0cyBhcmUgYWxsb3dlZC4gKi8KK2lmIChjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIgIT0gMCkKKyAgbWVtc2V0KGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0LCAwLCByZS0+dG9wX2JyYWNrZXQgKyAxKTsKKworU0xKSVRfQVNTRVJUKCEoY29tbW9uLT5yZXFfY2hhcl9wdHIgIT0gMCAmJiBjb21tb24tPnN0YXJ0X3VzZWRfcHRyICE9IDApKTsKK2NvbW1vbi0+Y2JyYV9wdHIgPSBPVkVDVE9SX1NUQVJUICsgKHJlLT50b3BfYnJhY2tldCArIDEpICogMiAqIHNpemVvZihzbGppdF9zdyk7CisKK3RvdGFsX2xlbmd0aCA9IGNjZW5kIC0gY29tbW9uLT5zdGFydDsKK2NvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnMgPSAoc2xqaXRfc2kgKilTTEpJVF9NQUxMT0ModG90YWxfbGVuZ3RoICogKHNpemVvZihzbGppdF9zaSkgKyAoY29tbW9uLT5oYXNfdGhlbiA/IDEgOiAwKSksIGFsbG9jYXRvcl9kYXRhKTsKK2lmICghY29tbW9uLT5wcml2YXRlX2RhdGFfcHRycykKKyAgeworICBTTEpJVF9GUkVFKGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0LCBhbGxvY2F0b3JfZGF0YSk7CisgIHJldHVybiBQQ1JFMl9FUlJPUl9OT01FTU9SWTsKKyAgfQorbWVtc2V0KGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnMsIDAsIHRvdGFsX2xlbmd0aCAqIHNpemVvZihzbGppdF9zaSkpOworCitwcml2YXRlX2RhdGFfc2l6ZSA9IGNvbW1vbi0+Y2JyYV9wdHIgKyAocmUtPnRvcF9icmFja2V0ICsgMSkgKiBzaXplb2Yoc2xqaXRfc3cpOworc2V0X3ByaXZhdGVfZGF0YV9wdHJzKGNvbW1vbiwgJnByaXZhdGVfZGF0YV9zaXplLCBjY2VuZCk7CitpZiAoKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9BTkNIT1JFRCkgPT0gMCAmJiAocmUtPm92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX05PX1NUQVJUX09QVElNSVpFKSA9PSAwKQorICB7CisgIGlmICghZGV0ZWN0X2Zhc3RfZm9yd2FyZF9za2lwKGNvbW1vbiwgJnByaXZhdGVfZGF0YV9zaXplKSAmJiAhY29tbW9uLT5oYXNfc2tpcF9pbl9hc3NlcnRfYmFjaykKKyAgICBkZXRlY3RfZmFzdF9mYWlsKGNvbW1vbiwgY29tbW9uLT5zdGFydCwgJnByaXZhdGVfZGF0YV9zaXplLCA0KTsKKyAgfQorCitTTEpJVF9BU1NFUlQoY29tbW9uLT5mYXN0X2ZhaWxfc3RhcnRfcHRyIDw9IGNvbW1vbi0+ZmFzdF9mYWlsX2VuZF9wdHIpOworCitpZiAocHJpdmF0ZV9kYXRhX3NpemUgPiBTTEpJVF9NQVhfTE9DQUxfU0laRSkKKyAgeworICBTTEpJVF9GUkVFKGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnMsIGFsbG9jYXRvcl9kYXRhKTsKKyAgU0xKSVRfRlJFRShjb21tb24tPm9wdGltaXplZF9jYnJhY2tldCwgYWxsb2NhdG9yX2RhdGEpOworICByZXR1cm4gUENSRTJfRVJST1JfTk9NRU1PUlk7CisgIH0KKworaWYgKGNvbW1vbi0+aGFzX3RoZW4pCisgIHsKKyAgY29tbW9uLT50aGVuX29mZnNldHMgPSAoc2xqaXRfdWIgKikoY29tbW9uLT5wcml2YXRlX2RhdGFfcHRycyArIHRvdGFsX2xlbmd0aCk7CisgIG1lbXNldChjb21tb24tPnRoZW5fb2Zmc2V0cywgMCwgdG90YWxfbGVuZ3RoKTsKKyAgc2V0X3RoZW5fb2Zmc2V0cyhjb21tb24sIGNvbW1vbi0+c3RhcnQsIE5VTEwpOworICB9CisKK2NvbXBpbGVyID0gc2xqaXRfY3JlYXRlX2NvbXBpbGVyKGFsbG9jYXRvcl9kYXRhKTsKK2lmICghY29tcGlsZXIpCisgIHsKKyAgU0xKSVRfRlJFRShjb21tb24tPm9wdGltaXplZF9jYnJhY2tldCwgYWxsb2NhdG9yX2RhdGEpOworICBTTEpJVF9GUkVFKGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnMsIGFsbG9jYXRvcl9kYXRhKTsKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX05PTUVNT1JZOworICB9Citjb21tb24tPmNvbXBpbGVyID0gY29tcGlsZXI7CisKKy8qIE1haW4gcGNyZV9qaXRfZXhlYyBlbnRyeS4gKi8KK3Nsaml0X2VtaXRfZW50ZXIoY29tcGlsZXIsIDAsIDEsIDUsIDUsIDAsIDAsIHByaXZhdGVfZGF0YV9zaXplKTsKKworLyogUmVnaXN0ZXIgaW5pdC4gKi8KK3Jlc2V0X292ZWN0b3IoY29tbW9uLCAocmUtPnRvcF9icmFja2V0ICsgMSkgKiAyKTsKK2lmIChjb21tb24tPnJlcV9jaGFyX3B0ciAhPSAwKQorICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5yZXFfY2hhcl9wdHIsIFNMSklUX1IwLCAwKTsKKworT1AxKFNMSklUX01PViwgQVJHVU1FTlRTLCAwLCBTTEpJVF9TMCwgMCk7CitPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9TMCwgMCk7CitPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihqaXRfYXJndW1lbnRzLCBzdHIpKTsKK09QMShTTEpJVF9NT1YsIFNUUl9FTkQsIDAsIFNMSklUX01FTTEoVE1QMSksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIGVuZCkpOworT1AxKFNMSklUX01PViwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgc3RhY2spKTsKK09QMShTTEpJVF9NT1ZfVUksIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMSksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIGxpbWl0X21hdGNoKSk7CitPUDEoU0xKSVRfTU9WLCBTVEFDS19UT1AsIDAsIFNMSklUX01FTTEoVE1QMiksIFNMSklUX09GRlNFVE9GKHN0cnVjdCBzbGppdF9zdGFjaywgYmFzZSkpOworT1AxKFNMSklUX01PViwgU1RBQ0tfTElNSVQsIDAsIFNMSklUX01FTTEoVE1QMiksIFNMSklUX09GRlNFVE9GKHN0cnVjdCBzbGppdF9zdGFjaywgbGltaXQpKTsKK09QMihTTEpJVF9BREQsIFRNUDEsIDAsIFRNUDEsIDAsIFNMSklUX0lNTSwgMSk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTElNSVRfTUFUQ0gsIFRNUDEsIDApOworCitpZiAoY29tbW9uLT5mYXN0X2ZhaWxfc3RhcnRfcHRyIDwgY29tbW9uLT5mYXN0X2ZhaWxfZW5kX3B0cikKKyAgcmVzZXRfZmFzdF9mYWlsKGNvbW1vbik7CisKK2lmIChtb2RlID09IFBDUkUyX0pJVF9QQVJUSUFMX1NPRlQpCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmhpdF9zdGFydCwgU0xKSVRfSU1NLCAtMSk7CitpZiAoY29tbW9uLT5tYXJrX3B0ciAhPSAwKQorICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5tYXJrX3B0ciwgU0xKSVRfSU1NLCAwKTsKK2lmIChjb21tb24tPmNvbnRyb2xfaGVhZF9wdHIgIT0gMCkKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+Y29udHJvbF9oZWFkX3B0ciwgU0xKSVRfSU1NLCAwKTsKKworLyogTWFpbiBwYXJ0IG9mIHRoZSBtYXRjaGluZyAqLworaWYgKChyZS0+b3ZlcmFsbF9vcHRpb25zICYgUENSRTJfQU5DSE9SRUQpID09IDApCisgIHsKKyAgbWFpbmxvb3BfbGFiZWwgPSBtYWlubG9vcF9lbnRyeShjb21tb24sIChyZS0+ZmxhZ3MgJiBQQ1JFMl9IQVNDUk9STEYpICE9IDAsIHJlLT5vdmVyYWxsX29wdGlvbnMpOworICBjb250aW51ZV9tYXRjaF9sYWJlbCA9IExBQkVMKCk7CisgIC8qIEZvcndhcmQgc2VhcmNoIGlmIHBvc3NpYmxlLiAqLworICBpZiAoKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSkgPT0gMCkKKyAgICB7CisgICAgaWYgKG1vZGUgPT0gUENSRTJfSklUX0NPTVBMRVRFICYmIGZhc3RfZm9yd2FyZF9maXJzdF9uX2NoYXJzKGNvbW1vbikpCisgICAgICA7CisgICAgZWxzZSBpZiAoKHJlLT5mbGFncyAmIFBDUkUyX0ZJUlNUU0VUKSAhPSAwKQorICAgICAgZmFzdF9mb3J3YXJkX2ZpcnN0X2NoYXIoY29tbW9uLCAoUENSRTJfVUNIQVIpKHJlLT5maXJzdF9jb2RldW5pdCksIChyZS0+ZmxhZ3MgJiBQQ1JFMl9GSVJTVENBU0VMRVNTKSAhPSAwKTsKKyAgICBlbHNlIGlmICgocmUtPmZsYWdzICYgUENSRTJfU1RBUlRMSU5FKSAhPSAwKQorICAgICAgZmFzdF9mb3J3YXJkX25ld2xpbmUoY29tbW9uKTsKKyAgICBlbHNlIGlmICgocmUtPmZsYWdzICYgUENSRTJfRklSU1RNQVBTRVQpICE9IDApCisgICAgICBmYXN0X2ZvcndhcmRfc3RhcnRfYml0cyhjb21tb24sIHJlLT5zdGFydF9iaXRtYXApOworICAgIH0KKyAgfQorZWxzZQorICBjb250aW51ZV9tYXRjaF9sYWJlbCA9IExBQkVMKCk7CisKK2lmIChtb2RlID09IFBDUkUyX0pJVF9DT01QTEVURSAmJiByZS0+bWlubGVuZ3RoID4gMCAmJiAocmUtPm92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX05PX1NUQVJUX09QVElNSVpFKSA9PSAwKQorICB7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX1JFVFVSTl9SRUcsIDAsIFNMSklUX0lNTSwgUENSRTJfRVJST1JfTk9NQVRDSCk7CisgIE9QMihTTEpJVF9BREQsIFRNUDIsIDAsIFNUUl9QVFIsIDAsIFNMSklUX0lNTSwgSU5fVUNIQVJTKHJlLT5taW5sZW5ndGgpKTsKKyAgbWlubGVuZ3RoX2NoZWNrX2ZhaWxlZCA9IENNUChTTEpJVF9HUkVBVEVSLCBUTVAyLCAwLCBTVFJfRU5ELCAwKTsKKyAgfQoraWYgKGNvbW1vbi0+cmVxX2NoYXJfcHRyICE9IDApCisgIHJlcWJ5dGVfbm90Zm91bmQgPSBzZWFyY2hfcmVxdWVzdGVkX2NoYXIoY29tbW9uLCAoUENSRTJfVUNIQVIpKHJlLT5sYXN0X2NvZGV1bml0KSwgKHJlLT5mbGFncyAmIFBDUkUyX0xBU1RDQVNFTEVTUykgIT0gMCwgKHJlLT5mbGFncyAmIFBDUkUyX0ZJUlNUU0VUKSAhPSAwKTsKKworLyogU3RvcmUgdGhlIGN1cnJlbnQgU1RSX1BUUiBpbiBPVkVDVE9SKDApLiAqLworT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIE9WRUNUT1IoMCksIFNUUl9QVFIsIDApOworLyogQ29weSB0aGUgbGltaXQgb2YgYWxsb3dlZCByZWN1cnNpb25zLiAqLworT1AxKFNMSklUX01PViwgQ09VTlRfTUFUQ0gsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBMSU1JVF9NQVRDSCk7CitpZiAoY29tbW9uLT5jYXB0dXJlX2xhc3RfcHRyICE9IDApCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmNhcHR1cmVfbGFzdF9wdHIsIFNMSklUX0lNTSwgMCk7CitpZiAoY29tbW9uLT5mYXN0X2ZvcndhcmRfYmNfcHRyICE9IE5VTEwpCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBQUklWQVRFX0RBVEEoY29tbW9uLT5mYXN0X2ZvcndhcmRfYmNfcHRyICsgMSksIFNUUl9QVFIsIDApOworCitpZiAoY29tbW9uLT5zdGFydF9wdHIgIT0gT1ZFQ1RPUigwKSkKKyAgT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+c3RhcnRfcHRyLCBTVFJfUFRSLCAwKTsKKworLyogQ29weSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcuICovCitpZiAobW9kZSA9PSBQQ1JFMl9KSVRfUEFSVElBTF9TT0ZUKQorICB7CisgIGp1bXAgPSBDTVAoU0xKSVRfTk9UX0VRVUFMLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5oaXRfc3RhcnQsIFNMSklUX0lNTSwgLTEpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5zdGFydF91c2VkX3B0ciwgU1RSX1BUUiwgMCk7CisgIEpVTVBIRVJFKGp1bXApOworICB9CitlbHNlIGlmIChtb2RlID09IFBDUkUyX0pJVF9QQVJUSUFMX0hBUkQpCisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPnN0YXJ0X3VzZWRfcHRyLCBTVFJfUFRSLCAwKTsKKworY29tcGlsZV9tYXRjaGluZ3BhdGgoY29tbW9uLCBjb21tb24tPnN0YXJ0LCBjY2VuZCwgJnJvb3RiYWNrdHJhY2spOworaWYgKFNMSklUX1VOTElLRUxZKHNsaml0X2dldF9jb21waWxlcl9lcnJvcihjb21waWxlcikpKQorICB7CisgIHNsaml0X2ZyZWVfY29tcGlsZXIoY29tcGlsZXIpOworICBTTEpJVF9GUkVFKGNvbW1vbi0+b3B0aW1pemVkX2NicmFja2V0LCBhbGxvY2F0b3JfZGF0YSk7CisgIFNMSklUX0ZSRUUoY29tbW9uLT5wcml2YXRlX2RhdGFfcHRycywgYWxsb2NhdG9yX2RhdGEpOworICBQUklWKGppdF9mcmVlX3JvZGF0YSkoY29tbW9uLT5yZWFkX29ubHlfZGF0YV9oZWFkLCBjb21waWxlci0+YWxsb2NhdG9yX2RhdGEpOworICByZXR1cm4gUENSRTJfRVJST1JfTk9NRU1PUlk7CisgIH0KKworaWYgKGNvbW1vbi0+bWlnaHRfYmVfZW1wdHkpCisgIHsKKyAgZW1wdHlfbWF0Y2ggPSBDTVAoU0xKSVRfRVFVQUwsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBPVkVDVE9SKDApKTsKKyAgZW1wdHlfbWF0Y2hfZm91bmRfbGFiZWwgPSBMQUJFTCgpOworICB9CisKK2NvbW1vbi0+YWNjZXB0X2xhYmVsID0gTEFCRUwoKTsKK2lmIChjb21tb24tPmFjY2VwdCAhPSBOVUxMKQorICBzZXRfanVtcHMoY29tbW9uLT5hY2NlcHQsIGNvbW1vbi0+YWNjZXB0X2xhYmVsKTsKKworLyogVGhpcyBtZWFucyB3ZSBoYXZlIGEgbWF0Y2guIFVwZGF0ZSB0aGUgb3ZlY3Rvci4gKi8KK2NvcHlfb3ZlY3Rvcihjb21tb24sIHJlLT50b3BfYnJhY2tldCArIDEpOworY29tbW9uLT5xdWl0X2xhYmVsID0gY29tbW9uLT5mb3JjZWRfcXVpdF9sYWJlbCA9IExBQkVMKCk7CitpZiAoY29tbW9uLT5xdWl0ICE9IE5VTEwpCisgIHNldF9qdW1wcyhjb21tb24tPnF1aXQsIGNvbW1vbi0+cXVpdF9sYWJlbCk7CitpZiAoY29tbW9uLT5mb3JjZWRfcXVpdCAhPSBOVUxMKQorICBzZXRfanVtcHMoY29tbW9uLT5mb3JjZWRfcXVpdCwgY29tbW9uLT5mb3JjZWRfcXVpdF9sYWJlbCk7CitpZiAobWlubGVuZ3RoX2NoZWNrX2ZhaWxlZCAhPSBOVUxMKQorICBTRVRfTEFCRUwobWlubGVuZ3RoX2NoZWNrX2ZhaWxlZCwgY29tbW9uLT5mb3JjZWRfcXVpdF9sYWJlbCk7CitzbGppdF9lbWl0X3JldHVybihjb21waWxlciwgU0xKSVRfTU9WLCBTTEpJVF9SRVRVUk5fUkVHLCAwKTsKKworaWYgKG1vZGUgIT0gUENSRTJfSklUX0NPTVBMRVRFKQorICB7CisgIGNvbW1vbi0+cGFydGlhbG1hdGNobGFiZWwgPSBMQUJFTCgpOworICBzZXRfanVtcHMoY29tbW9uLT5wYXJ0aWFsbWF0Y2gsIGNvbW1vbi0+cGFydGlhbG1hdGNobGFiZWwpOworICByZXR1cm5fd2l0aF9wYXJ0aWFsX21hdGNoKGNvbW1vbiwgY29tbW9uLT5xdWl0X2xhYmVsKTsKKyAgfQorCitpZiAoY29tbW9uLT5taWdodF9iZV9lbXB0eSkKKyAgZW1wdHlfbWF0Y2hfYmFja3RyYWNrX2xhYmVsID0gTEFCRUwoKTsKK2NvbXBpbGVfYmFja3RyYWNraW5ncGF0aChjb21tb24sIHJvb3RiYWNrdHJhY2sudG9wKTsKK2lmIChTTEpJVF9VTkxJS0VMWShzbGppdF9nZXRfY29tcGlsZXJfZXJyb3IoY29tcGlsZXIpKSkKKyAgeworICBzbGppdF9mcmVlX2NvbXBpbGVyKGNvbXBpbGVyKTsKKyAgU0xKSVRfRlJFRShjb21tb24tPm9wdGltaXplZF9jYnJhY2tldCwgYWxsb2NhdG9yX2RhdGEpOworICBTTEpJVF9GUkVFKGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnMsIGFsbG9jYXRvcl9kYXRhKTsKKyAgUFJJVihqaXRfZnJlZV9yb2RhdGEpKGNvbW1vbi0+cmVhZF9vbmx5X2RhdGFfaGVhZCwgY29tcGlsZXItPmFsbG9jYXRvcl9kYXRhKTsKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX05PTUVNT1JZOworICB9CisKK1NMSklUX0FTU0VSVChyb290YmFja3RyYWNrLnByZXYgPT0gTlVMTCk7CityZXNldF9tYXRjaF9sYWJlbCA9IExBQkVMKCk7CisKK2lmIChtb2RlID09IFBDUkUyX0pJVF9QQVJUSUFMX1NPRlQpCisgIHsKKyAgLyogVXBkYXRlIGhpdF9zdGFydCBvbmx5IGluIHRoZSBmaXJzdCB0aW1lLiAqLworICBqdW1wID0gQ01QKFNMSklUX05PVF9FUVVBTCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGNvbW1vbi0+aGl0X3N0YXJ0LCBTTEpJVF9JTU0sIDApOworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5zdGFydF9wdHIpOworICBPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5zdGFydF91c2VkX3B0ciwgU0xKSVRfSU1NLCAtMSk7CisgIE9QMShTTEpJVF9NT1YsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBjb21tb24tPmhpdF9zdGFydCwgVE1QMSwgMCk7CisgIEpVTVBIRVJFKGp1bXApOworICB9CisKKy8qIENoZWNrIHdlIGhhdmUgcmVtYWluaW5nIGNoYXJhY3RlcnMuICovCitpZiAoKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9BTkNIT1JFRCkgPT0gMCAmJiBjb21tb24tPm1hdGNoX2VuZF9wdHIgIT0gMCkKKyAgeworICBPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5tYXRjaF9lbmRfcHRyKTsKKyAgfQorCitpZiAoY29tbW9uLT5mYXN0X2ZvcndhcmRfYmNfcHRyICE9IE5VTEwpCisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBQUklWQVRFX0RBVEEoY29tbW9uLT5mYXN0X2ZvcndhcmRfYmNfcHRyICsgMSkpOworZWxzZQorICBPUDEoU0xKSVRfTU9WLCBTVFJfUFRSLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5zdGFydF9wdHIpOworCitpZiAoKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9BTkNIT1JFRCkgPT0gMCkKKyAgeworICBpZiAoY29tbW9uLT5mZl9uZXdsaW5lX3Nob3J0Y3V0ICE9IE5VTEwpCisgICAgeworICAgIC8qIFRoZXJlIGNhbm5vdCBiZSBtb3JlIG5ld2xpbmVzIGlmIFBDUkUyX0ZJUlNUTElORSBpcyBzZXQuICovCisgICAgaWYgKChyZS0+b3ZlcmFsbF9vcHRpb25zICYgUENSRTJfRklSU1RMSU5FKSA9PSAwKQorICAgICAgeworICAgICAgaWYgKGNvbW1vbi0+bWF0Y2hfZW5kX3B0ciAhPSAwKQorICAgICAgICB7CisgICAgICAgIE9QMShTTEpJVF9NT1YsIFRNUDMsIDAsIFNUUl9FTkQsIDApOworICAgICAgICBPUDEoU0xKSVRfTU9WLCBTVFJfRU5ELCAwLCBUTVAxLCAwKTsKKyAgICAgICAgQ01QVE8oU0xKSVRfTEVTUywgU1RSX1BUUiwgMCwgVE1QMSwgMCwgY29tbW9uLT5mZl9uZXdsaW5lX3Nob3J0Y3V0KTsKKyAgICAgICAgT1AxKFNMSklUX01PViwgU1RSX0VORCwgMCwgVE1QMywgMCk7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgQ01QVE8oU0xKSVRfTEVTUywgU1RSX1BUUiwgMCwgU1RSX0VORCwgMCwgY29tbW9uLT5mZl9uZXdsaW5lX3Nob3J0Y3V0KTsKKyAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgQ01QVE8oU0xKSVRfTEVTUywgU1RSX1BUUiwgMCwgKGNvbW1vbi0+bWF0Y2hfZW5kX3B0ciA9PSAwKSA/IFNUUl9FTkQgOiBUTVAxLCAwLCBtYWlubG9vcF9sYWJlbCk7CisgICAgfQorICB9CisKKy8qIE5vIG1vcmUgcmVtYWluaW5nIGNoYXJhY3RlcnMuICovCitpZiAocmVxYnl0ZV9ub3Rmb3VuZCAhPSBOVUxMKQorICBKVU1QSEVSRShyZXFieXRlX25vdGZvdW5kKTsKKworaWYgKG1vZGUgPT0gUENSRTJfSklUX1BBUlRJQUxfU09GVCkKKyAgQ01QVE8oU0xKSVRfTk9UX0VRVUFMLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgY29tbW9uLT5oaXRfc3RhcnQsIFNMSklUX0lNTSwgLTEsIGNvbW1vbi0+cGFydGlhbG1hdGNobGFiZWwpOworCitPUDEoU0xKSVRfTU9WLCBTTEpJVF9SRVRVUk5fUkVHLCAwLCBTTEpJVF9JTU0sIFBDUkUyX0VSUk9SX05PTUFUQ0gpOworSlVNUFRPKFNMSklUX0pVTVAsIGNvbW1vbi0+cXVpdF9sYWJlbCk7CisKK2ZsdXNoX3N0dWJzKGNvbW1vbik7CisKK2lmIChjb21tb24tPm1pZ2h0X2JlX2VtcHR5KQorICB7CisgIEpVTVBIRVJFKGVtcHR5X21hdGNoKTsKKyAgT1AxKFNMSklUX01PViwgVE1QMSwgMCwgQVJHVU1FTlRTLCAwKTsKKyAgT1AxKFNMSklUX01PVl9VSSwgVE1QMiwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgb3B0aW9ucykpOworICBPUDIoU0xKSVRfQU5EIHwgU0xKSVRfU0VUX0UsIFNMSklUX1VOVVNFRCwgMCwgVE1QMiwgMCwgU0xKSVRfSU1NLCBQQ1JFMl9OT1RFTVBUWSk7CisgIEpVTVBUTyhTTEpJVF9OT1RfWkVSTywgZW1wdHlfbWF0Y2hfYmFja3RyYWNrX2xhYmVsKTsKKyAgT1AyKFNMSklUX0FORCB8IFNMSklUX1NFVF9FLCBTTEpJVF9VTlVTRUQsIDAsIFRNUDIsIDAsIFNMSklUX0lNTSwgUENSRTJfTk9URU1QVFlfQVRTVEFSVCk7CisgIEpVTVBUTyhTTEpJVF9aRVJPLCBlbXB0eV9tYXRjaF9mb3VuZF9sYWJlbCk7CisgIE9QMShTTEpJVF9NT1YsIFRNUDIsIDAsIFNMSklUX01FTTEoVE1QMSksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIHN0cikpOworICBDTVBUTyhTTEpJVF9OT1RfRVFVQUwsIFRNUDIsIDAsIFNUUl9QVFIsIDAsIGVtcHR5X21hdGNoX2ZvdW5kX2xhYmVsKTsKKyAgSlVNUFRPKFNMSklUX0pVTVAsIGVtcHR5X21hdGNoX2JhY2t0cmFja19sYWJlbCk7CisgIH0KKworY29tbW9uLT5mYXN0X2ZvcndhcmRfYmNfcHRyID0gTlVMTDsKK2NvbW1vbi0+ZmFzdF9mYWlsX3N0YXJ0X3B0ciA9IDA7Citjb21tb24tPmZhc3RfZmFpbF9lbmRfcHRyID0gMDsKK2NvbW1vbi0+Y3VycmVudGVudHJ5ID0gY29tbW9uLT5lbnRyaWVzOworY29tbW9uLT5sb2NhbF9leGl0ID0gVFJVRTsKK3F1aXRfbGFiZWwgPSBjb21tb24tPnF1aXRfbGFiZWw7Cit3aGlsZSAoY29tbW9uLT5jdXJyZW50ZW50cnkgIT0gTlVMTCkKKyAgeworICAvKiBNaWdodCBhZGQgbmV3IGVudHJpZXMuICovCisgIGNvbXBpbGVfcmVjdXJzZShjb21tb24pOworICBpZiAoU0xKSVRfVU5MSUtFTFkoc2xqaXRfZ2V0X2NvbXBpbGVyX2Vycm9yKGNvbXBpbGVyKSkpCisgICAgeworICAgIHNsaml0X2ZyZWVfY29tcGlsZXIoY29tcGlsZXIpOworICAgIFNMSklUX0ZSRUUoY29tbW9uLT5vcHRpbWl6ZWRfY2JyYWNrZXQsIGFsbG9jYXRvcl9kYXRhKTsKKyAgICBTTEpJVF9GUkVFKGNvbW1vbi0+cHJpdmF0ZV9kYXRhX3B0cnMsIGFsbG9jYXRvcl9kYXRhKTsKKyAgICBQUklWKGppdF9mcmVlX3JvZGF0YSkoY29tbW9uLT5yZWFkX29ubHlfZGF0YV9oZWFkLCBjb21waWxlci0+YWxsb2NhdG9yX2RhdGEpOworICAgIHJldHVybiBQQ1JFMl9FUlJPUl9OT01FTU9SWTsKKyAgICB9CisgIGZsdXNoX3N0dWJzKGNvbW1vbik7CisgIGNvbW1vbi0+Y3VycmVudGVudHJ5ID0gY29tbW9uLT5jdXJyZW50ZW50cnktPm5leHQ7CisgIH0KK2NvbW1vbi0+bG9jYWxfZXhpdCA9IEZBTFNFOworY29tbW9uLT5xdWl0X2xhYmVsID0gcXVpdF9sYWJlbDsKKworLyogQWxsb2NhdGluZyBzdGFjaywgcmV0dXJucyB3aXRoIFBDUkVfRVJST1JfSklUX1NUQUNLTElNSVQgaWYgZmFpbHMuICovCisvKiBUaGlzIGlzIGEgKHJlYWxseSkgcmFyZSBjYXNlLiAqLworc2V0X2p1bXBzKGNvbW1vbi0+c3RhY2thbGxvYywgTEFCRUwoKSk7CisvKiBSRVRVUk5fQUREUiBpcyBub3QgYSBzYXZlZCByZWdpc3Rlci4gKi8KK3Nsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgU0xKSVRfTUVNMShTTEpJVF9TUCksIExPQ0FMUzApOworT1AxKFNMSklUX01PViwgU0xKSVRfTUVNMShTTEpJVF9TUCksIExPQ0FMUzEsIFRNUDIsIDApOworT1AxKFNMSklUX01PViwgVE1QMSwgMCwgQVJHVU1FTlRTLCAwKTsKK09QMShTTEpJVF9NT1YsIFRNUDEsIDAsIFNMSklUX01FTTEoVE1QMSksIFNMSklUX09GRlNFVE9GKGppdF9hcmd1bWVudHMsIHN0YWNrKSk7CitPUDEoU0xKSVRfTU9WLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihzdHJ1Y3Qgc2xqaXRfc3RhY2ssIHRvcCksIFNUQUNLX1RPUCwgMCk7CitPUDIoU0xKSVRfQURELCBUTVAyLCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihzdHJ1Y3Qgc2xqaXRfc3RhY2ssIGxpbWl0KSwgU0xKSVRfSU1NLCBTVEFDS19HUk9XVEhfUkFURSk7CisKK3Nsaml0X2VtaXRfaWp1bXAoY29tcGlsZXIsIFNMSklUX0NBTEwyLCBTTEpJVF9JTU0sIFNMSklUX0ZVTkNfT0ZGU0VUKHNsaml0X3N0YWNrX3Jlc2l6ZSkpOworanVtcCA9IENNUChTTEpJVF9OT1RfRVFVQUwsIFNMSklUX1JFVFVSTl9SRUcsIDAsIFNMSklUX0lNTSwgMCk7CitPUDEoU0xKSVRfTU9WLCBUTVAxLCAwLCBBUkdVTUVOVFMsIDApOworT1AxKFNMSklUX01PViwgVE1QMSwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoaml0X2FyZ3VtZW50cywgc3RhY2spKTsKK09QMShTTEpJVF9NT1YsIFNUQUNLX1RPUCwgMCwgU0xKSVRfTUVNMShUTVAxKSwgU0xKSVRfT0ZGU0VUT0Yoc3RydWN0IHNsaml0X3N0YWNrLCB0b3ApKTsKK09QMShTTEpJVF9NT1YsIFNUQUNLX0xJTUlULCAwLCBTTEpJVF9NRU0xKFRNUDEpLCBTTEpJVF9PRkZTRVRPRihzdHJ1Y3Qgc2xqaXRfc3RhY2ssIGxpbWl0KSk7CitPUDEoU0xKSVRfTU9WLCBUTVAyLCAwLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMSk7CitzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKGNvbXBpbGVyLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgTE9DQUxTMCk7CisKKy8qIEFsbG9jYXRpb24gZmFpbGVkLiAqLworSlVNUEhFUkUoanVtcCk7CisvKiBXZSBicmVhayB0aGUgcmV0dXJuIGFkZHJlc3MgY2FjaGUgaGVyZSwgYnV0IHRoaXMgaXMgYSByZWFsbHkgcmFyZSBjYXNlLiAqLworT1AxKFNMSklUX01PViwgU0xKSVRfUkVUVVJOX1JFRywgMCwgU0xKSVRfSU1NLCBQQ1JFMl9FUlJPUl9KSVRfU1RBQ0tMSU1JVCk7CitKVU1QVE8oU0xKSVRfSlVNUCwgY29tbW9uLT5xdWl0X2xhYmVsKTsKKworLyogQ2FsbCBsaW1pdCByZWFjaGVkLiAqLworc2V0X2p1bXBzKGNvbW1vbi0+Y2FsbGxpbWl0LCBMQUJFTCgpKTsKK09QMShTTEpJVF9NT1YsIFNMSklUX1JFVFVSTl9SRUcsIDAsIFNMSklUX0lNTSwgUENSRTJfRVJST1JfTUFUQ0hMSU1JVCk7CitKVU1QVE8oU0xKSVRfSlVNUCwgY29tbW9uLT5xdWl0X2xhYmVsKTsKKworaWYgKGNvbW1vbi0+cmV2ZXJ0ZnJhbWVzICE9IE5VTEwpCisgIHsKKyAgc2V0X2p1bXBzKGNvbW1vbi0+cmV2ZXJ0ZnJhbWVzLCBMQUJFTCgpKTsKKyAgZG9fcmV2ZXJ0ZnJhbWVzKGNvbW1vbik7CisgIH0KK2lmIChjb21tb24tPndvcmRib3VuZGFyeSAhPSBOVUxMKQorICB7CisgIHNldF9qdW1wcyhjb21tb24tPndvcmRib3VuZGFyeSwgTEFCRUwoKSk7CisgIGNoZWNrX3dvcmRib3VuZGFyeShjb21tb24pOworICB9CitpZiAoY29tbW9uLT5hbnluZXdsaW5lICE9IE5VTEwpCisgIHsKKyAgc2V0X2p1bXBzKGNvbW1vbi0+YW55bmV3bGluZSwgTEFCRUwoKSk7CisgIGNoZWNrX2FueW5ld2xpbmUoY29tbW9uKTsKKyAgfQoraWYgKGNvbW1vbi0+aHNwYWNlICE9IE5VTEwpCisgIHsKKyAgc2V0X2p1bXBzKGNvbW1vbi0+aHNwYWNlLCBMQUJFTCgpKTsKKyAgY2hlY2tfaHNwYWNlKGNvbW1vbik7CisgIH0KK2lmIChjb21tb24tPnZzcGFjZSAhPSBOVUxMKQorICB7CisgIHNldF9qdW1wcyhjb21tb24tPnZzcGFjZSwgTEFCRUwoKSk7CisgIGNoZWNrX3ZzcGFjZShjb21tb24pOworICB9CitpZiAoY29tbW9uLT5jYXNlZnVsY21wICE9IE5VTEwpCisgIHsKKyAgc2V0X2p1bXBzKGNvbW1vbi0+Y2FzZWZ1bGNtcCwgTEFCRUwoKSk7CisgIGRvX2Nhc2VmdWxjbXAoY29tbW9uKTsKKyAgfQoraWYgKGNvbW1vbi0+Y2FzZWxlc3NjbXAgIT0gTlVMTCkKKyAgeworICBzZXRfanVtcHMoY29tbW9uLT5jYXNlbGVzc2NtcCwgTEFCRUwoKSk7CisgIGRvX2Nhc2VsZXNzY21wKGNvbW1vbik7CisgIH0KK2lmIChjb21tb24tPnJlc2V0X21hdGNoICE9IE5VTEwpCisgIHsKKyAgc2V0X2p1bXBzKGNvbW1vbi0+cmVzZXRfbWF0Y2gsIExBQkVMKCkpOworICBkb19yZXNldF9tYXRjaChjb21tb24sIChyZS0+dG9wX2JyYWNrZXQgKyAxKSAqIDIpOworICBDTVBUTyhTTEpJVF9HUkVBVEVSLCBTVFJfUFRSLCAwLCBUTVAxLCAwLCBjb250aW51ZV9tYXRjaF9sYWJlbCk7CisgIE9QMShTTEpJVF9NT1YsIFNUUl9QVFIsIDAsIFRNUDEsIDApOworICBKVU1QVE8oU0xKSVRfSlVNUCwgcmVzZXRfbWF0Y2hfbGFiZWwpOworICB9CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgKK2lmIChjb21tb24tPnV0ZnJlYWRjaGFyICE9IE5VTEwpCisgIHsKKyAgc2V0X2p1bXBzKGNvbW1vbi0+dXRmcmVhZGNoYXIsIExBQkVMKCkpOworICBkb191dGZyZWFkY2hhcihjb21tb24pOworICB9CitpZiAoY29tbW9uLT51dGZyZWFkY2hhcjE2ICE9IE5VTEwpCisgIHsKKyAgc2V0X2p1bXBzKGNvbW1vbi0+dXRmcmVhZGNoYXIxNiwgTEFCRUwoKSk7CisgIGRvX3V0ZnJlYWRjaGFyMTYoY29tbW9uKTsKKyAgfQoraWYgKGNvbW1vbi0+dXRmcmVhZHR5cGU4ICE9IE5VTEwpCisgIHsKKyAgc2V0X2p1bXBzKGNvbW1vbi0+dXRmcmVhZHR5cGU4LCBMQUJFTCgpKTsKKyAgZG9fdXRmcmVhZHR5cGU4KGNvbW1vbik7CisgIH0KKyNlbmRpZiAvKiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOCAqLworaWYgKGNvbW1vbi0+Z2V0dWNkICE9IE5VTEwpCisgIHsKKyAgc2V0X2p1bXBzKGNvbW1vbi0+Z2V0dWNkLCBMQUJFTCgpKTsKKyAgZG9fZ2V0dWNkKGNvbW1vbik7CisgIH0KKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKworU0xKSVRfRlJFRShjb21tb24tPm9wdGltaXplZF9jYnJhY2tldCwgYWxsb2NhdG9yX2RhdGEpOworU0xKSVRfRlJFRShjb21tb24tPnByaXZhdGVfZGF0YV9wdHJzLCBhbGxvY2F0b3JfZGF0YSk7CisKK2V4ZWN1dGFibGVfZnVuYyA9IHNsaml0X2dlbmVyYXRlX2NvZGUoY29tcGlsZXIpOworZXhlY3V0YWJsZV9zaXplID0gc2xqaXRfZ2V0X2dlbmVyYXRlZF9jb2RlX3NpemUoY29tcGlsZXIpOworbGFiZWxfYWRkciA9IGNvbW1vbi0+bGFiZWxfYWRkcnM7Cit3aGlsZSAobGFiZWxfYWRkciAhPSBOVUxMKQorICB7CisgICpsYWJlbF9hZGRyLT51cGRhdGVfYWRkciA9IHNsaml0X2dldF9sYWJlbF9hZGRyKGxhYmVsX2FkZHItPmxhYmVsKTsKKyAgbGFiZWxfYWRkciA9IGxhYmVsX2FkZHItPm5leHQ7CisgIH0KK3Nsaml0X2ZyZWVfY29tcGlsZXIoY29tcGlsZXIpOworaWYgKGV4ZWN1dGFibGVfZnVuYyA9PSBOVUxMKQorICB7CisgIFBSSVYoaml0X2ZyZWVfcm9kYXRhKShjb21tb24tPnJlYWRfb25seV9kYXRhX2hlYWQsIGNvbXBpbGVyLT5hbGxvY2F0b3JfZGF0YSk7CisgIHJldHVybiBQQ1JFMl9FUlJPUl9OT01FTU9SWTsKKyAgfQorCisvKiBSZXVzZSB0aGUgZnVuY3Rpb24gZGVzY3JpcHRvciBpZiBwb3NzaWJsZS4gKi8KK2lmIChyZS0+ZXhlY3V0YWJsZV9qaXQgIT0gTlVMTCkKKyAgZnVuY3Rpb25zID0gKGV4ZWN1dGFibGVfZnVuY3Rpb25zICopcmUtPmV4ZWN1dGFibGVfaml0OworZWxzZQorICB7CisgIGZ1bmN0aW9ucyA9IFNMSklUX01BTExPQyhzaXplb2YoZXhlY3V0YWJsZV9mdW5jdGlvbnMpLCBhbGxvY2F0b3JfZGF0YSk7CisgIGlmIChmdW5jdGlvbnMgPT0gTlVMTCkKKyAgICB7CisgICAgLyogVGhpcyBjYXNlIGlzIGhpZ2hseSB1bmxpa2VseSBzaW5jZSB3ZSBqdXN0IHJlY2VudGx5CisgICAgZnJlZWQgYSBsb3Qgb2YgbWVtb3J5LiBOb3QgaW1wb3NzaWJsZSB0aG91Z2guICovCisgICAgc2xqaXRfZnJlZV9jb2RlKGV4ZWN1dGFibGVfZnVuYyk7CisgICAgUFJJVihqaXRfZnJlZV9yb2RhdGEpKGNvbW1vbi0+cmVhZF9vbmx5X2RhdGFfaGVhZCwgY29tcGlsZXItPmFsbG9jYXRvcl9kYXRhKTsKKyAgICByZXR1cm4gUENSRTJfRVJST1JfTk9NRU1PUlk7CisgICAgfQorICBtZW1zZXQoZnVuY3Rpb25zLCAwLCBzaXplb2YoZXhlY3V0YWJsZV9mdW5jdGlvbnMpKTsKKyAgZnVuY3Rpb25zLT50b3BfYnJhY2tldCA9IHJlLT50b3BfYnJhY2tldCArIDE7CisgIGZ1bmN0aW9ucy0+bGltaXRfbWF0Y2ggPSByZS0+bGltaXRfbWF0Y2g7CisgIHJlLT5leGVjdXRhYmxlX2ppdCA9IGZ1bmN0aW9uczsKKyAgfQorCisvKiBUdXJuIG1vZGUgaW50byBhbiBpbmRleC4gKi8KK2lmIChtb2RlID09IFBDUkUyX0pJVF9DT01QTEVURSkKKyAgbW9kZSA9IDA7CitlbHNlCisgIG1vZGUgPSAobW9kZSA9PSBQQ1JFMl9KSVRfUEFSVElBTF9TT0ZUKSA/IDEgOiAyOworCitTTEpJVF9BU1NFUlQobW9kZSA8IEpJVF9OVU1CRVJfT0ZfQ09NUElMRV9NT0RFUyk7CitmdW5jdGlvbnMtPmV4ZWN1dGFibGVfZnVuY3NbbW9kZV0gPSBleGVjdXRhYmxlX2Z1bmM7CitmdW5jdGlvbnMtPnJlYWRfb25seV9kYXRhX2hlYWRzW21vZGVdID0gY29tbW9uLT5yZWFkX29ubHlfZGF0YV9oZWFkOworZnVuY3Rpb25zLT5leGVjdXRhYmxlX3NpemVzW21vZGVdID0gZXhlY3V0YWJsZV9zaXplOworcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgSklUIGNvbXBpbGUgYSBSZWd1bGFyIEV4cHJlc3Npb24gICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gdXNlZCBKSVQgdG8gY29udmVydCBhIHByZXZpb3VzbHktY29tcGlsZWQgcGF0dGVybiBpbnRvIG1hY2hpbmUKK2NvZGUuCisKK0FyZ3VtZW50czoKKyAgY29kZSAgICAgICAgICBhIGNvbXBpbGVkIHBhdHRlcm4KKyAgb3B0aW9ucyAgICAgICBKSVQgb3B0aW9uIGJpdHMKKworUmV0dXJuczogICAgICAgIDA6IHN1Y2Nlc3Mgb3IgKCpOT0pJVCkgd2FzIHVzZWQKKyAgICAgICAgICAgICAgIDwwOiBhbiBlcnJvciBjb2RlCisqLworCisjZGVmaW5lIFBVQkxJQ19KSVRfQ09NUElMRV9PUFRJT05TIFwKKyAgKFBDUkUyX0pJVF9DT01QTEVURXxQQ1JFMl9KSVRfUEFSVElBTF9TT0ZUfFBDUkUyX0pJVF9QQVJUSUFMX0hBUkQpCisKK1BDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX2ppdF9jb21waWxlKHBjcmUyX2NvZGUgKmNvZGUsIHVpbnQzMl90IG9wdGlvbnMpCit7CisjaWZuZGVmIFNVUFBPUlRfSklUCisKKyh2b2lkKWNvZGU7Cisodm9pZClvcHRpb25zOworcmV0dXJuIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT047CisKKyNlbHNlICAvKiBTVVBQT1JUX0pJVCAqLworCitwY3JlMl9yZWFsX2NvZGUgKnJlID0gKHBjcmUyX3JlYWxfY29kZSAqKWNvZGU7CitleGVjdXRhYmxlX2Z1bmN0aW9ucyAqZnVuY3Rpb25zOworaW50IHJlc3VsdDsKKworaWYgKGNvZGUgPT0gTlVMTCkKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX05VTEw7CisKK2lmICgob3B0aW9ucyAmIH5QVUJMSUNfSklUX0NPTVBJTEVfT1BUSU9OUykgIT0gMCkKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT047CisKK2lmICgocmUtPmZsYWdzICYgUENSRTJfTk9KSVQpICE9IDApIHJldHVybiAwOworCitmdW5jdGlvbnMgPSAoZXhlY3V0YWJsZV9mdW5jdGlvbnMgKilyZS0+ZXhlY3V0YWJsZV9qaXQ7CisKK2lmICgob3B0aW9ucyAmIFBDUkUyX0pJVF9DT01QTEVURSkgIT0gMCAmJiAoZnVuY3Rpb25zID09IE5VTEwKKyAgICB8fCBmdW5jdGlvbnMtPmV4ZWN1dGFibGVfZnVuY3NbMF0gPT0gTlVMTCkpIHsKKyAgcmVzdWx0ID0gaml0X2NvbXBpbGUoY29kZSwgUENSRTJfSklUX0NPTVBMRVRFKTsKKyAgaWYgKHJlc3VsdCAhPSAwKQorICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworaWYgKChvcHRpb25zICYgUENSRTJfSklUX1BBUlRJQUxfU09GVCkgIT0gMCAmJiAoZnVuY3Rpb25zID09IE5VTEwKKyAgICB8fCBmdW5jdGlvbnMtPmV4ZWN1dGFibGVfZnVuY3NbMV0gPT0gTlVMTCkpIHsKKyAgcmVzdWx0ID0gaml0X2NvbXBpbGUoY29kZSwgUENSRTJfSklUX1BBUlRJQUxfU09GVCk7CisgIGlmIChyZXN1bHQgIT0gMCkKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKK2lmICgob3B0aW9ucyAmIFBDUkUyX0pJVF9QQVJUSUFMX0hBUkQpICE9IDAgJiYgKGZ1bmN0aW9ucyA9PSBOVUxMCisgICAgfHwgZnVuY3Rpb25zLT5leGVjdXRhYmxlX2Z1bmNzWzJdID09IE5VTEwpKSB7CisgIHJlc3VsdCA9IGppdF9jb21waWxlKGNvZGUsIFBDUkUyX0pJVF9QQVJUSUFMX0hBUkQpOworICBpZiAocmVzdWx0ICE9IDApCisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCityZXR1cm4gMDsKKworI2VuZGlmICAvKiBTVVBQT1JUX0pJVCAqLworfQorCisvKiBKSVQgY29tcGlsZXIgdXNlcyBhbiBhbGwtaW4tb25lIGFwcHJvYWNoLiBUaGlzIGltcHJvdmVzIHNlY3VyaXR5LAorICAgc2luY2UgdGhlIGNvZGUgZ2VuZXJhdG9yIGZ1bmN0aW9ucyBhcmUgbm90IGV4cG9ydGVkLiAqLworCisjZGVmaW5lIElOQ0xVREVEX0ZST01fUENSRTJfSklUX0NPTVBJTEUKKworI2luY2x1ZGUgInBjcmUyX2ppdF9tYXRjaC5jIgorI2luY2x1ZGUgInBjcmUyX2ppdF9taXNjLmMiCisKKy8qIEVuZCBvZiBwY3JlMl9qaXRfY29tcGlsZS5jICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfaml0X21hdGNoLmMgYi9kaXN0Mi9zcmMvcGNyZTJfaml0X21hdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgwNGNmZQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9qaXRfbWF0Y2guYwpAQCAtMCwwICsxLDE4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQQ1JFIGlzIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHN5bnRheAorYW5kIHNlbWFudGljcyBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2Ugb2YgdGhlIFBlcmwgNSBsYW5ndWFnZS4KKworICAgICAgICAgICAgICAgICAgICAgICBXcml0dGVuIGJ5IFBoaWxpcCBIYXplbAorICAgICBPcmlnaW5hbCBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDE5OTctMjAxMiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorICAgICAgICAgTmV3IEFQSSBjb2RlIENvcHlyaWdodCAoYykgMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZuZGVmIElOQ0xVREVEX0ZST01fUENSRTJfSklUX0NPTVBJTEUKKyNlcnJvciBUaGlzIGZpbGUgbXVzdCBiZSBpbmNsdWRlZCBmcm9tIHBjcmUyX2ppdF9jb21waWxlLmMuCisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfSklUCisKK3N0YXRpYyBTTEpJVF9OT0lOTElORSBpbnQgaml0X21hY2hpbmVfc3RhY2tfZXhlYyhqaXRfYXJndW1lbnRzICphcmd1bWVudHMsIGppdF9mdW5jdGlvbiBleGVjdXRhYmxlX2Z1bmMpCit7CitzbGppdF91YiBsb2NhbF9zcGFjZVtNQUNISU5FX1NUQUNLX1NJWkVdOworc3RydWN0IHNsaml0X3N0YWNrIGxvY2FsX3N0YWNrOworCitsb2NhbF9zdGFjay50b3AgPSAoc2xqaXRfc3cpJmxvY2FsX3NwYWNlOworbG9jYWxfc3RhY2suYmFzZSA9IGxvY2FsX3N0YWNrLnRvcDsKK2xvY2FsX3N0YWNrLmxpbWl0ID0gbG9jYWxfc3RhY2suYmFzZSArIE1BQ0hJTkVfU1RBQ0tfU0laRTsKK2xvY2FsX3N0YWNrLm1heF9saW1pdCA9IGxvY2FsX3N0YWNrLmxpbWl0OworYXJndW1lbnRzLT5zdGFjayA9ICZsb2NhbF9zdGFjazsKK3JldHVybiBleGVjdXRhYmxlX2Z1bmMoYXJndW1lbnRzKTsKK30KKworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgIERvIGEgSklUIHBhdHRlcm4gbWF0Y2ggICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIHJ1bnMgYSBKSVQgcGF0dGVybiBtYXRjaC4KKworQXJndW1lbnRzOgorICBjb2RlICAgICAgICAgICAgcG9pbnRzIHRvIHRoZSBjb21waWxlZCBleHByZXNzaW9uCisgIHN1YmplY3QgICAgICAgICBwb2ludHMgdG8gdGhlIHN1YmplY3Qgc3RyaW5nCisgIGxlbmd0aCAgICAgICAgICBsZW5ndGggb2Ygc3ViamVjdCBzdHJpbmcgKG1heSBjb250YWluIGJpbmFyeSB6ZXJvcykKKyAgc3RhcnRfb2Zmc2V0ICAgIHdoZXJlIHRvIHN0YXJ0IGluIHRoZSBzdWJqZWN0IHN0cmluZworICBvcHRpb25zICAgICAgICAgb3B0aW9uIGJpdHMKKyAgbWF0Y2hfZGF0YSAgICAgIHBvaW50cyB0byBhIG1hdGNoX2RhdGEgYmxvY2sKKyAgbWNvbnRleHQgICAgICAgIHBvaW50cyB0byBhIG1hdGNoIGNvbnRleHQKKyAgaml0X3N0YWNrICAgICAgIHBvaW50cyB0byBhIEpJVCBzdGFjaworCitSZXR1cm5zOiAgICAgICAgICA+IDAgPT4gc3VjY2VzczsgdmFsdWUgaXMgdGhlIG51bWJlciBvZiBvdmVjdG9yIHBhaXJzIGZpbGxlZAorICAgICAgICAgICAgICAgICAgPSAwID0+IHN1Y2Nlc3MsIGJ1dCBvdmVjdG9yIGlzIG5vdCBiaWcgZW5vdWdoCisgICAgICAgICAgICAgICAgICAgLTEgPT4gZmFpbGVkIHRvIG1hdGNoIChQQ1JFX0VSUk9SX05PTUFUQ0gpCisgICAgICAgICAgICAgICAgIDwgLTEgPT4gc29tZSBraW5kIG9mIHVuZXhwZWN0ZWQgcHJvYmxlbQorKi8KKworUENSRTJfRVhQX0RFRk4gaW50IFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfaml0X21hdGNoKGNvbnN0IHBjcmUyX2NvZGUgKmNvZGUsIFBDUkUyX1NQVFIgc3ViamVjdCwgUENSRTJfU0laRSBsZW5ndGgsCisgIFBDUkUyX1NJWkUgc3RhcnRfb2Zmc2V0LCB1aW50MzJfdCBvcHRpb25zLCBwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLAorICBwY3JlMl9tYXRjaF9jb250ZXh0ICptY29udGV4dCkKK3sKKyNpZm5kZWYgU1VQUE9SVF9KSVQKKworKHZvaWQpY29kZTsKKyh2b2lkKXN1YmplY3Q7Cisodm9pZClsZW5ndGg7Cisodm9pZClzdGFydF9vZmZzZXQ7Cisodm9pZClvcHRpb25zOworKHZvaWQpbWF0Y2hfZGF0YTsKKyh2b2lkKW1jb250ZXh0OworcmV0dXJuIFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT047CisKKyNlbHNlICAvKiBTVVBQT1JUX0pJVCAqLworCitwY3JlMl9yZWFsX2NvZGUgKnJlID0gKHBjcmUyX3JlYWxfY29kZSAqKWNvZGU7CitleGVjdXRhYmxlX2Z1bmN0aW9ucyAqZnVuY3Rpb25zID0gKGV4ZWN1dGFibGVfZnVuY3Rpb25zICopcmUtPmV4ZWN1dGFibGVfaml0OworcGNyZTJfaml0X3N0YWNrICpqaXRfc3RhY2s7Cit1aW50MzJfdCBvdmVjY291bnQgPSBtYXRjaF9kYXRhLT5vdmVjY291bnQ7Cit1aW50MzJfdCBtYXhfb3ZlY2NvdW50OwordW5pb24geworICAgdm9pZCAqZXhlY3V0YWJsZV9mdW5jOworICAgaml0X2Z1bmN0aW9uIGNhbGxfZXhlY3V0YWJsZV9mdW5jOworfSBjb252ZXJ0X2V4ZWN1dGFibGVfZnVuYzsKK2ppdF9hcmd1bWVudHMgYXJndW1lbnRzOworaW50IHJjOworaW50IGluZGV4ID0gMDsKKworaWYgKChvcHRpb25zICYgUENSRTJfUEFSVElBTF9IQVJEKSAhPSAwKQorICBpbmRleCA9IDI7CitlbHNlIGlmICgob3B0aW9ucyAmIFBDUkUyX1BBUlRJQUxfU09GVCkgIT0gMCkKKyAgaW5kZXggPSAxOworCitpZiAoZnVuY3Rpb25zLT5leGVjdXRhYmxlX2Z1bmNzW2luZGV4XSA9PSBOVUxMKQorICByZXR1cm4gUENSRTJfRVJST1JfSklUX0JBRE9QVElPTjsKKworLyogU2FuaXR5IGNoZWNrcyBzaG91bGQgYmUgaGFuZGxlZCBieSBwY3JlX2V4ZWMuICovCithcmd1bWVudHMuc3RyID0gc3ViamVjdCArIHN0YXJ0X29mZnNldDsKK2FyZ3VtZW50cy5iZWdpbiA9IHN1YmplY3Q7Cithcmd1bWVudHMuZW5kID0gc3ViamVjdCArIGxlbmd0aDsKK2FyZ3VtZW50cy5tYXRjaF9kYXRhID0gbWF0Y2hfZGF0YTsKK2FyZ3VtZW50cy5zdGFydGNoYXJfcHRyID0gc3ViamVjdDsKK2FyZ3VtZW50cy5tYXJrX3B0ciA9IE5VTEw7Cithcmd1bWVudHMub3B0aW9ucyA9IG9wdGlvbnM7CisKK2lmIChtY29udGV4dCAhPSBOVUxMKQorICB7CisgIGFyZ3VtZW50cy5jYWxsb3V0ID0gbWNvbnRleHQtPmNhbGxvdXQ7CisgIGFyZ3VtZW50cy5jYWxsb3V0X2RhdGEgPSBtY29udGV4dC0+Y2FsbG91dF9kYXRhOworICBhcmd1bWVudHMub2Zmc2V0X2xpbWl0ID0gbWNvbnRleHQtPm9mZnNldF9saW1pdDsKKyAgYXJndW1lbnRzLmxpbWl0X21hdGNoID0gKG1jb250ZXh0LT5tYXRjaF9saW1pdCA8IHJlLT5saW1pdF9tYXRjaCk/CisgICAgbWNvbnRleHQtPm1hdGNoX2xpbWl0IDogcmUtPmxpbWl0X21hdGNoOworICBpZiAobWNvbnRleHQtPmppdF9jYWxsYmFjayAhPSBOVUxMKQorICAgIGppdF9zdGFjayA9IG1jb250ZXh0LT5qaXRfY2FsbGJhY2sobWNvbnRleHQtPmppdF9jYWxsYmFja19kYXRhKTsKKyAgZWxzZQorICAgIGppdF9zdGFjayA9IChwY3JlMl9qaXRfc3RhY2sgKiltY29udGV4dC0+aml0X2NhbGxiYWNrX2RhdGE7CisgIH0KK2Vsc2UKKyAgeworICBhcmd1bWVudHMuY2FsbG91dCA9IE5VTEw7CisgIGFyZ3VtZW50cy5jYWxsb3V0X2RhdGEgPSBOVUxMOworICBhcmd1bWVudHMub2Zmc2V0X2xpbWl0ID0gUENSRTJfVU5TRVQ7CisgIGFyZ3VtZW50cy5saW1pdF9tYXRjaCA9IChNQVRDSF9MSU1JVCA8IHJlLT5saW1pdF9tYXRjaCk/CisgICAgTUFUQ0hfTElNSVQgOiByZS0+bGltaXRfbWF0Y2g7CisgIGppdF9zdGFjayA9IE5VTEw7CisgIH0KKworLyogSklUIG9ubHkgbmVlZCB0d28gb2Zmc2V0cyBmb3IgZWFjaCBvdmVjdG9yIGVudHJ5LiBIZW5jZQorICAgdGhlIGxhc3QgMS8zIG9mIHRoZSBvdmVjdG9yIHdpbGwgbmV2ZXIgYmUgdG91Y2hlZC4gKi8KKworbWF4X292ZWNjb3VudCA9IGZ1bmN0aW9ucy0+dG9wX2JyYWNrZXQ7CitpZiAob3ZlY2NvdW50ID4gbWF4X292ZWNjb3VudCkKKyAgb3ZlY2NvdW50ID0gbWF4X292ZWNjb3VudDsKK2FyZ3VtZW50cy5vdmVjY291bnQgPSBvdmVjY291bnQgPDwgMTsKKworCitjb252ZXJ0X2V4ZWN1dGFibGVfZnVuYy5leGVjdXRhYmxlX2Z1bmMgPSBmdW5jdGlvbnMtPmV4ZWN1dGFibGVfZnVuY3NbaW5kZXhdOworaWYgKGppdF9zdGFjayAhPSBOVUxMKQorICB7CisgIGFyZ3VtZW50cy5zdGFjayA9IChzdHJ1Y3Qgc2xqaXRfc3RhY2sgKikoaml0X3N0YWNrLT5zdGFjayk7CisgIHJjID0gY29udmVydF9leGVjdXRhYmxlX2Z1bmMuY2FsbF9leGVjdXRhYmxlX2Z1bmMoJmFyZ3VtZW50cyk7CisgIH0KK2Vsc2UKKyAgcmMgPSBqaXRfbWFjaGluZV9zdGFja19leGVjKCZhcmd1bWVudHMsIGNvbnZlcnRfZXhlY3V0YWJsZV9mdW5jLmNhbGxfZXhlY3V0YWJsZV9mdW5jKTsKKworaWYgKHJjID4gKGludClvdmVjY291bnQpCisgIHJjID0gMDsKK21hdGNoX2RhdGEtPmNvZGUgPSByZTsKK21hdGNoX2RhdGEtPnN1YmplY3QgPSBzdWJqZWN0OworbWF0Y2hfZGF0YS0+cmMgPSByYzsKK21hdGNoX2RhdGEtPnN0YXJ0Y2hhciA9IGFyZ3VtZW50cy5zdGFydGNoYXJfcHRyIC0gc3ViamVjdDsKK21hdGNoX2RhdGEtPmxlZnRjaGFyID0gMDsKK21hdGNoX2RhdGEtPnJpZ2h0Y2hhciA9IDA7CittYXRjaF9kYXRhLT5tYXJrID0gYXJndW1lbnRzLm1hcmtfcHRyOworbWF0Y2hfZGF0YS0+bWF0Y2hlZGJ5ID0gUENSRTJfTUFUQ0hFREJZX0pJVDsKKworcmV0dXJuIG1hdGNoX2RhdGEtPnJjOworCisjZW5kaWYgIC8qIFNVUFBPUlRfSklUICovCit9CisKKy8qIEVuZCBvZiBwY3JlMl9qaXRfbWF0Y2guYyAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX2ppdF9taXNjLmMgYi9kaXN0Mi9zcmMvcGNyZTJfaml0X21pc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmRiMDU1Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3BjcmUyX2ppdF9taXNjLmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgUGVybC1Db21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUENSRSBpcyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBzeW50YXgKK2FuZCBzZW1hbnRpY3MgYXJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIG9mIHRoZSBQZXJsIDUgbGFuZ3VhZ2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBQaGlsaXAgSGF6ZWwKKyAgICAgT3JpZ2luYWwgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTIgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKyAgICAgICAgIE5ldyBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworCisjaWZuZGVmIElOQ0xVREVEX0ZST01fUENSRTJfSklUX0NPTVBJTEUKKyNlcnJvciBUaGlzIGZpbGUgbXVzdCBiZSBpbmNsdWRlZCBmcm9tIHBjcmUyX2ppdF9jb21waWxlLmMuCisjZW5kaWYKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICBGcmVlIEpJVCByZWFkLW9ubHkgZGF0YSAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordm9pZAorUFJJVihqaXRfZnJlZV9yb2RhdGEpKHZvaWQgKmN1cnJlbnQsIHZvaWQgKmFsbG9jYXRvcl9kYXRhKQoreworI2lmbmRlZiBTVVBQT1JUX0pJVAorKHZvaWQpY3VycmVudDsKKyh2b2lkKWFsbG9jYXRvcl9kYXRhOworI2Vsc2UgIC8qIFNVUFBPUlRfSklUICovCit2b2lkICpuZXh0OworCitTTEpJVF9VTlVTRURfQVJHKGFsbG9jYXRvcl9kYXRhKTsKKword2hpbGUgKGN1cnJlbnQgIT0gTlVMTCkKKyAgeworICBuZXh0ID0gKih2b2lkKiopY3VycmVudDsKKyAgU0xKSVRfRlJFRShjdXJyZW50LCBhbGxvY2F0b3JfZGF0YSk7CisgIGN1cnJlbnQgPSBuZXh0OworICB9CisKKyNlbmRpZiAvKiBTVVBQT1JUX0pJVCAqLworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgRnJlZSBKSVQgY29tcGlsZWQgY29kZSAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3ZvaWQKK1BSSVYoaml0X2ZyZWUpKHZvaWQgKmV4ZWN1dGFibGVfaml0LCBwY3JlMl9tZW1jdGwgKm1lbWN0bCkKK3sKKyNpZm5kZWYgU1VQUE9SVF9KSVQKKyh2b2lkKWV4ZWN1dGFibGVfaml0OworKHZvaWQpbWVtY3RsOworI2Vsc2UgIC8qIFNVUFBPUlRfSklUICovCisKK2V4ZWN1dGFibGVfZnVuY3Rpb25zICpmdW5jdGlvbnMgPSAoZXhlY3V0YWJsZV9mdW5jdGlvbnMgKilleGVjdXRhYmxlX2ppdDsKK3ZvaWQgKmFsbG9jYXRvcl9kYXRhID0gbWVtY3RsOworaW50IGk7CisKK2ZvciAoaSA9IDA7IGkgPCBKSVRfTlVNQkVSX09GX0NPTVBJTEVfTU9ERVM7IGkrKykKKyAgeworICBpZiAoZnVuY3Rpb25zLT5leGVjdXRhYmxlX2Z1bmNzW2ldICE9IE5VTEwpCisgICAgc2xqaXRfZnJlZV9jb2RlKGZ1bmN0aW9ucy0+ZXhlY3V0YWJsZV9mdW5jc1tpXSk7CisgIFBSSVYoaml0X2ZyZWVfcm9kYXRhKShmdW5jdGlvbnMtPnJlYWRfb25seV9kYXRhX2hlYWRzW2ldLCBhbGxvY2F0b3JfZGF0YSk7CisgIH0KKworU0xKSVRfRlJFRShmdW5jdGlvbnMsIGFsbG9jYXRvcl9kYXRhKTsKKworI2VuZGlmIC8qIFNVUFBPUlRfSklUICovCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICBGcmVlIHVudXNlZCBKSVQgbWVtb3J5ICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitQQ1JFMl9FWFBfREVGTiB2b2lkIFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeShwY3JlMl9nZW5lcmFsX2NvbnRleHQgKmdjb250ZXh0KQoreworI2lmbmRlZiBTVVBQT1JUX0pJVAorKHZvaWQpZ2NvbnRleHQ7ICAgICAvKiBTdXBwcmVzcyB3YXJuaW5nICovCisjZWxzZSAgLyogU1VQUE9SVF9KSVQgKi8KK1NMSklUX1VOVVNFRF9BUkcoZ2NvbnRleHQpOworc2xqaXRfZnJlZV91bnVzZWRfbWVtb3J5X2V4ZWMoKTsKKyNlbmRpZiAgLyogU1VQUE9SVF9KSVQgKi8KK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgQWxsb2NhdGUgYSBKSVQgc3RhY2sgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworUENSRTJfRVhQX0RFRk4gcGNyZTJfaml0X3N0YWNrICogUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9qaXRfc3RhY2tfY3JlYXRlKHNpemVfdCBzdGFydHNpemUsIHNpemVfdCBtYXhzaXplLAorICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKmdjb250ZXh0KQoreworI2lmbmRlZiBTVVBQT1JUX0pJVAorCisodm9pZClnY29udGV4dDsKKyh2b2lkKXN0YXJ0c2l6ZTsKKyh2b2lkKW1heHNpemU7CityZXR1cm4gTlVMTDsKKworI2Vsc2UgIC8qIFNVUFBPUlRfSklUICovCisKK3BjcmUyX2ppdF9zdGFjayAqaml0X3N0YWNrOworCitpZiAoc3RhcnRzaXplIDwgMSB8fCBtYXhzaXplIDwgMSkKKyAgcmV0dXJuIE5VTEw7CitpZiAoc3RhcnRzaXplID4gbWF4c2l6ZSkKKyAgc3RhcnRzaXplID0gbWF4c2l6ZTsKK3N0YXJ0c2l6ZSA9IChzdGFydHNpemUgKyBTVEFDS19HUk9XVEhfUkFURSAtIDEpICYgfihTVEFDS19HUk9XVEhfUkFURSAtIDEpOworbWF4c2l6ZSA9IChtYXhzaXplICsgU1RBQ0tfR1JPV1RIX1JBVEUgLSAxKSAmIH4oU1RBQ0tfR1JPV1RIX1JBVEUgLSAxKTsKKworaml0X3N0YWNrID0gUFJJVihtZW1jdGxfbWFsbG9jKShzaXplb2YocGNyZTJfcmVhbF9qaXRfc3RhY2spLCAocGNyZTJfbWVtY3RsICopZ2NvbnRleHQpOworaWYgKGppdF9zdGFjayA9PSBOVUxMKSByZXR1cm4gTlVMTDsKK2ppdF9zdGFjay0+c3RhY2sgPSBzbGppdF9hbGxvY2F0ZV9zdGFjayhzdGFydHNpemUsIG1heHNpemUsICZqaXRfc3RhY2stPm1lbWN0bCk7CityZXR1cm4gaml0X3N0YWNrOworCisjZW5kaWYKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgIEFzc2lnbiBhIEpJVCBzdGFjayB0byBhIHBhdHRlcm4gICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK1BDUkUyX0VYUF9ERUZOIHZvaWQgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9qaXRfc3RhY2tfYXNzaWduKHBjcmUyX21hdGNoX2NvbnRleHQgKm1jb250ZXh0LCBwY3JlMl9qaXRfY2FsbGJhY2sgY2FsbGJhY2ssCisgIHZvaWQgKmNhbGxiYWNrX2RhdGEpCit7CisjaWZuZGVmIFNVUFBPUlRfSklUCisodm9pZCltY29udGV4dDsKKyh2b2lkKWNhbGxiYWNrOworKHZvaWQpY2FsbGJhY2tfZGF0YTsKKyNlbHNlICAvKiBTVVBQT1JUX0pJVCAqLworCitpZiAobWNvbnRleHQgPT0gTlVMTCkgcmV0dXJuOworbWNvbnRleHQtPmppdF9jYWxsYmFjayA9IGNhbGxiYWNrOworbWNvbnRleHQtPmppdF9jYWxsYmFja19kYXRhID0gY2FsbGJhY2tfZGF0YTsKKworI2VuZGlmICAvKiBTVVBQT1JUX0pJVCAqLworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgRnJlZSBhIEpJVCBzdGFjayAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworUENSRTJfRVhQX0RFRk4gdm9pZCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX2ppdF9zdGFja19mcmVlKHBjcmUyX2ppdF9zdGFjayAqaml0X3N0YWNrKQoreworI2lmbmRlZiBTVVBQT1JUX0pJVAorKHZvaWQpaml0X3N0YWNrOworI2Vsc2UgIC8qIFNVUFBPUlRfSklUICovCitpZiAoaml0X3N0YWNrICE9IE5VTEwpCisgIHsKKyAgc2xqaXRfZnJlZV9zdGFjaygoc3RydWN0IHNsaml0X3N0YWNrICopKGppdF9zdGFjay0+c3RhY2spLCAmaml0X3N0YWNrLT5tZW1jdGwpOworICBqaXRfc3RhY2stPm1lbWN0bC5mcmVlKGppdF9zdGFjaywgaml0X3N0YWNrLT5tZW1jdGwubWVtb3J5X2RhdGEpOworICB9CisjZW5kaWYgIC8qIFNVUFBPUlRfSklUICovCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICBHZXQgdGFyZ2V0IENQVSB0eXBlICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitjb25zdCBjaGFyKgorUFJJVihqaXRfZ2V0X3RhcmdldCkodm9pZCkKK3sKKyNpZm5kZWYgU1VQUE9SVF9KSVQKK3JldHVybiAiSklUIGlzIG5vdCBzdXBwb3J0ZWQiOworI2Vsc2UgIC8qIFNVUFBPUlRfSklUICovCityZXR1cm4gc2xqaXRfZ2V0X3BsYXRmb3JtX25hbWUoKTsKKyNlbmRpZiAgLyogU1VQUE9SVF9KSVQgKi8KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgR2V0IHNpemUgb2YgSklUIGNvZGUgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3NpemVfdAorUFJJVihqaXRfZ2V0X3NpemUpKHZvaWQgKmV4ZWN1dGFibGVfaml0KQoreworI2lmbmRlZiBTVVBQT1JUX0pJVAorKHZvaWQpZXhlY3V0YWJsZV9qaXQ7CityZXR1cm4gMDsKKyNlbHNlICAvKiBTVVBQT1JUX0pJVCAqLworc2xqaXRfdXcgKmV4ZWN1dGFibGVfc2l6ZXMgPSAoKGV4ZWN1dGFibGVfZnVuY3Rpb25zICopZXhlY3V0YWJsZV9qaXQpLT5leGVjdXRhYmxlX3NpemVzOworU0xKSVRfQ09NUElMRV9BU1NFUlQoSklUX05VTUJFUl9PRl9DT01QSUxFX01PREVTID09IDMsIG51bWJlcl9vZl9jb21waWxlX21vZGVzX2NoYW5nZWQpOworcmV0dXJuIGV4ZWN1dGFibGVfc2l6ZXNbMF0gKyBleGVjdXRhYmxlX3NpemVzWzFdICsgZXhlY3V0YWJsZV9zaXplc1syXTsKKyNlbmRpZgorfQorCisvKiBFbmQgb2YgcGNyZTJfaml0X21pc2MuYyAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX2ppdF90ZXN0LmMgYi9kaXN0Mi9zcmMvcGNyZTJfaml0X3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODgzN2NmCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3BjcmUyX2ppdF90ZXN0LmMKQEAgLTAsMCArMSwxNzM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgUENSRTJfQ09ERV9VTklUX1dJRFRIIDAKKyNpbmNsdWRlICJwY3JlMi5oIgorCisvKgorIExldHRlciBjaGFyYWN0ZXJzOgorICAgXHhlNlx4OTJceGFkID0gMHg2NGFkID0gMjU3NzMgKGthbmppKQorIE5vbi1sZXR0ZXIgY2hhcmFjdGVyczoKKyAgIFx4YzJceGExID0gMHhhMSA9ICAoSW52ZXJ0ZWQgRXhjbGFtYXRpb24gTWFyaykKKyAgIFx4ZjNceGE5XHhiN1x4ODAgPSAweGU5ZGMwID0gOTU3ODg4CisgICBceGVkXHhhMFx4ODAgPSA1NTI5NiA9IDB4ZDgwMCAoSW52YWxpZCBVVEYgY2hhcmFjdGVyKQorICAgXHhlZFx4YjBceDgwID0gNTYzMjAgPSAweGRjMDAgKEludmFsaWQgVVRGIGNoYXJhY3RlcikKKyBOZXdsaW5lczoKKyAgIFx4YzJceDg1ID0gMHg4NSA9IDEzMyAoTkV4dCBMaW5lID0gTkVMKQorICAgXHhlMlx4ODBceGE4ID0gMHgyMDI4ID0gODIzMiAoTGluZSBTZXBhcmF0b3IpCisgT3RoZXJjYXNlIHBhaXJzOgorICAgXHhjM1x4YTkgPSAweGU5ID0gMjMzIChlJykKKyAgICAgIFx4YzNceDg5ID0gMHhjOSA9IDIwMSAoRScpCisgICBceGMzXHhhMSA9IDB4ZTEgPSAyMjUgKGEnKQorICAgICAgXHhjM1x4ODEgPSAweGMxID0gMTkzIChBJykKKyAgIFx4NTMgPSAweDUzID0gUworICAgICBceDczID0gMHg3MyA9IHMKKyAgICAgXHhjNVx4YmYgPSAweDE3ZiA9IDM4MyAobG9uZyBTKQorICAgXHhjOFx4YmEgPSAweDIzYSA9IDU3MAorICAgICAgXHhlMlx4YjFceGE1ID0gMHgyYzY1ID0gMTEzNjUKKyAgIFx4ZTFceGJkXHhiOCA9IDB4MWY3OCA9IDgwNTYKKyAgICAgIFx4ZTFceGJmXHhiOCA9IDB4MWZmOCA9IDgxODQKKyAgIFx4ZjBceDkwXHg5MFx4ODAgPSAweDEwNDAwID0gNjY1NjAKKyAgICAgIFx4ZjBceDkwXHg5MFx4YTggPSAweDEwNDI4ID0gNjY2MDAKKyAgIFx4YzdceDg0ID0gMHgxYzQgPSA0NTIKKyAgICAgXHhjN1x4ODUgPSAweDFjNSA9IDQ1MworICAgICBceGM3XHg4NiA9IDB4MWM2ID0gNDU0CisgQ2FzZWxlc3Mgc2V0czoKKyAgIHVjcF9Bcm1lbmlhbiAtIFx4ezUzMX0tXHh7NTU2fSAtPiBceHs1NjF9LVx4ezU4Nn0KKyAgIHVjcF9Db3B0aWMgLSBceHsyYzgwfS1ceHsyY2UzfSAtPiBjYXNlbGVzczogWE9SIDB4MQorICAgdWNwX0xhdGluIC0gXHh7ZmYyMX0tXHh7ZmYzYX0gLT4gXHh7ZmY0MV0tXHh7ZmY1YX0KKworIE1hcmsgcHJvcGVydHk6CisgICBceGNjXHg4ZCA9IDB4MzBkID0gNzgxCisgU3BlY2lhbDoKKyAgIFx4YzJceDgwID0gMHg4MCA9IDEyOCAobG93ZXN0IDIgYnl0ZSBjaGFyYWN0ZXIpCisgICBceGRmXHhiZiA9IDB4N2ZmID0gMjA0NyAoaGlnaGVzdCAyIGJ5dGUgY2hhcmFjdGVyKQorICAgXHhlMFx4YTBceDgwID0gMHg4MDAgPSAyMDQ4IChsb3dlc3QgMiBieXRlIGNoYXJhY3RlcikKKyAgIFx4ZWZceGJmXHhiZiA9IDB4ZmZmZiA9IDY1NTM1IChoaWdoZXN0IDMgYnl0ZSBjaGFyYWN0ZXIpCisgICBceGYwXHg5MFx4ODBceDgwID0gMHgxMDAwMCA9IDY1NTM2IChsb3dlc3QgNCBieXRlIGNoYXJhY3RlcikKKyAgIFx4ZjRceDhmXHhiZlx4YmYgPSAweDEwZmZmZiA9IDExMTQxMTEgKGhpZ2hlc3QgYWxsb3dlZCB1dGYgY2hhcmFjdGVyKQorKi8KKworc3RhdGljIGludCByZWdyZXNzaW9uX3Rlc3RzKHZvaWQpOworCitpbnQgbWFpbih2b2lkKQoreworCWludCBqaXQgPSAwOworI2lmIGRlZmluZWQgU1VQUE9SVF9QQ1JFMl84CisJcGNyZTJfY29uZmlnXzgoUENSRTJfQ09ORklHX0pJVCwgJmppdCk7CisjZWxpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMTYKKwlwY3JlMl9jb25maWdfMTYoUENSRTJfQ09ORklHX0pJVCwgJmppdCk7CisjZWxpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMzIKKwlwY3JlMl9jb25maWdfMzIoUENSRTJfQ09ORklHX0pJVCwgJmppdCk7CisjZW5kaWYKKwlpZiAoIWppdCkgeworCQlwcmludGYoIkpJVCBtdXN0IGJlIGVuYWJsZWQgdG8gcnVuIHBjcmVfaml0X3Rlc3RcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIHJlZ3Jlc3Npb25fdGVzdHMoKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhKGRlZmluZWQgU1VQUE9SVF9QQ1JFMl84KSAmJiAhKGRlZmluZWQgU1VQUE9SVF9QQ1JFMl8xNikgJiYgIShkZWZpbmVkIFNVUFBPUlRfUENSRTJfMzIpCisjZXJyb3IgU1VQUE9SVF9QQ1JFMl84IG9yIFNVUFBPUlRfUENSRTJfMTYgb3IgU1VQUE9SVF9QQ1JFMl8zMiBtdXN0IGJlIGRlZmluZWQKKyNlbmRpZgorCisjZGVmaW5lIE1VCShQQ1JFMl9NVUxUSUxJTkUgfCBQQ1JFMl9VVEYpCisjZGVmaW5lIE1VUAkoUENSRTJfTVVMVElMSU5FIHwgUENSRTJfVVRGIHwgUENSRTJfVUNQKQorI2RlZmluZSBDTVUJKFBDUkUyX0NBU0VMRVNTIHwgUENSRTJfTVVMVElMSU5FIHwgUENSRTJfVVRGKQorI2RlZmluZSBDTVVQCShQQ1JFMl9DQVNFTEVTUyB8IFBDUkUyX01VTFRJTElORSB8IFBDUkUyX1VURiB8IFBDUkUyX1VDUCkKKyNkZWZpbmUgTQkoUENSRTJfTVVMVElMSU5FKQorI2RlZmluZSBNUAkoUENSRTJfTVVMVElMSU5FIHwgUENSRTJfVUNQKQorI2RlZmluZSBVCShQQ1JFMl9VVEYpCisjZGVmaW5lIENNCShQQ1JFMl9DQVNFTEVTUyB8IFBDUkUyX01VTFRJTElORSkKKworI2RlZmluZSBCU1IoeCkJKCh4KSA8PCAxNikKKyNkZWZpbmUgQQlQQ1JFMl9ORVdMSU5FX0FOWUNSTEYKKworI2RlZmluZSBHRVRfTkVXTElORSh4KQkoKHgpICYgMHhmZmZmKQorI2RlZmluZSBHRVRfQlNSKHgpCSgoeCkgPj4gMTYpCisKKyNkZWZpbmUgT0ZGU0VUX01BU0sJMHgwMGZmZmYKKyNkZWZpbmUgRl9OTzgJCTB4MDEwMDAwCisjZGVmaW5lIEZfTk8xNgkJMHgwMjAwMDAKKyNkZWZpbmUgRl9OTzMyCQkweDAyMDAwMAorI2RlZmluZSBGX05PTUFUQ0gJMHgwNDAwMDAKKyNkZWZpbmUgRl9ESUZGCQkweDA4MDAwMAorI2RlZmluZSBGX0ZPUkNFQ09OVgkweDEwMDAwMAorI2RlZmluZSBGX1BST1BFUlRZCTB4MjAwMDAwCisjZGVmaW5lIEZfU1RVRFkJCTB4NDAwMDAwCisKK3N0cnVjdCByZWdyZXNzaW9uX3Rlc3RfY2FzZSB7CisJaW50IGNvbXBpbGVfb3B0aW9uczsKKwlpbnQgbmV3bGluZTsKKwlpbnQgbWF0Y2hfb3B0aW9uczsKKwlpbnQgc3RhcnRfb2Zmc2V0OworCWNvbnN0IGNoYXIgKnBhdHRlcm47CisJY29uc3QgY2hhciAqaW5wdXQ7Cit9OworCitzdGF0aWMgc3RydWN0IHJlZ3Jlc3Npb25fdGVzdF9jYXNlIHJlZ3Jlc3Npb25fdGVzdF9jYXNlc1tdID0geworCS8qIENvbnN0YW50IHN0cmluZ3MuICovCisJeyBNVSwgQSwgMCwgMCwgIkFiQyIsICJBYkFiQyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiQUNDRVBUIiwgIkFBQ0FDQ0FDQ0VBQ0NFUEFDQ0VQVEFDQ0VQVFQiIH0sCisJeyBDTVUsIEEsIDAsIDAsICJhQSNceGMzXHhhOVx4YzNceDgxIiwgImFBI0FhI1x4YzNceDg5XHhjM1x4YTEiIH0sCisJeyBNLCBBLCAwLCAwLCAiW15hXSIsICJhQWJCIiB9LAorCXsgQ00sIEEsIDAsIDAsICJbXm1dIiwgIm1Nbk4iIH0sCisJeyBNLCBBLCAwLCAwLCAiYVteYl1bXiNdIiwgImFiYWNkIiB9LAorCXsgQ00sIEEsIDAsIDAsICJBW15CXVteRV0iLCAiYWJhY2QiIH0sCisJeyBDTVUsIEEsIDAsIDAsICJbXnhdW14jXSIsICJYeEJsbCIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiW15hXSIsICJhYWFceGMzXHhhMSNBYiIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIlteQV0iLCAiYUFceGU2XHg5Mlx4YWQiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlxcVyhcXFcpP1xcdyIsICJcclxuK2JjIiB9LAorCXsgTVUsIEEsIDAsIDAsICJcXFcoXFxXKT9cXHciLCAiXG5ccitiYyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiXFxXKFxcVyk/XFx3IiwgIlxyXHIrYmMiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlxcVyhcXFcpP1xcdyIsICJcblxuK2JjIiB9LAorCXsgTVUsIEEsIDAsIDAsICJbYXhkXSIsICJzQVhkIiB9LAorCXsgQ01VLCBBLCAwLCAwLCAiW2F4ZF0iLCAic0FYZCIgfSwKKwl7IENNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIlteYXhkXSIsICJEeEEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlthLWRBLUNdIiwgIlx4ZTZceDkyXHhhZFx4YzNceGE5LkIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlteYS1kQS1DXSIsICJceGU2XHg5Mlx4YWRceGMzXHhhOSIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIlteXHhjM1x4YTldIiwgIlx4YzNceGE5XHhjM1x4ODkuIiB9LAorCXsgTVUsIEEsIDAsIDAsICJbXlx4YzNceGE5XSIsICJceGMzXHhhOVx4YzNceDg5LiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiW15hXSIsICJceGMyXHg4MFtdIiB9LAorCXsgQ01VLCBBLCAwLCAwLCAiXHhmMFx4OTBceDkwXHhhNyIsICJceGYwXHg5MFx4OTFceDhmIiB9LAorCXsgQ00sIEEsIDAsIDAsICIxYTJiM2M0IiwgIjFhMkIzYzUxQTJCM0M0IiB9LAorCXsgUENSRTJfQ0FTRUxFU1MsIDAsIDAsIDAsICJceGZmI2EiLCAiXHhmZiNceGZmXHhmZSMjXHhmZiNBIiB9LAorCXsgUENSRTJfQ0FTRUxFU1MsIDAsIDAsIDAsICJceGZlIiwgIlx4ZmZceGZjI1x4ZmVceGZlIiB9LAorCXsgUENSRTJfQ0FTRUxFU1MsIDAsIDAsIDAsICJhMSIsICJBYTEiIH0sCisJeyBNLCBBLCAwLCAwLCAiXFxDYSIsICJjZGEiIH0sCisJeyBDTSwgQSwgMCwgMCwgIlxcQ2EiLCAiQ0RBIiB9LAorCXsgTSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIlxcQ3giLCAiY2RhIiB9LAorCXsgQ00sIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJcXEN4IiwgIkNEQSIgfSwKKwl7IENNVVAsIEEsIDAsIDAsICJceGYwXHg5MFx4OTBceDgwXHhmMFx4OTBceDkwXHhhOCIsICJceGYwXHg5MFx4OTBceGE4XHhmMFx4OTBceDkwXHg4MCIgfSwKKwl7IENNVVAsIEEsIDAsIDAsICJceGYwXHg5MFx4OTBceDgwezJ9IiwgIlx4ZjBceDkwXHg5MFx4ODAjXHhmMFx4OTBceDkwXHhhOFx4ZjBceDkwXHg5MFx4ODAiIH0sCisJeyBDTVVQLCBBLCAwLCAwLCAiXHhmMFx4OTBceDkwXHhhOHsyfSIsICJceGYwXHg5MFx4OTBceDgwI1x4ZjBceDkwXHg5MFx4YThceGYwXHg5MFx4OTBceDgwIiB9LAorCXsgQ01VUCwgQSwgMCwgMCwgIlx4ZTFceGJkXHhiOFx4ZTFceGJmXHhiOCIsICJceGUxXHhiZlx4YjhceGUxXHhiZFx4YjgiIH0sCisJeyBNLCBBLCAwLCAwLCAiWzMtNTctOV0iLCAiNSIgfSwKKworCS8qIEFzc2VydGlvbnMuICovCisJeyBNVSwgQSwgMCwgMCwgIlxcYlteQV0iLCAiQV9CIyIgfSwKKwl7IE0sIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJcXGJcXFciLCAiXG4qIiB9LAorCXsgTVUsIEEsIDAsIDAsICJcXEJbXixdXFxiW15zXVxcYiIsICIjWCIgfSwKKwl7IE1QLCBBLCAwLCAwLCAiXFxCIiwgIl9ceGExIiB9LAorCXsgTVAsIEEsIDAsIDAgfCBGX1BST1BFUlRZLCAiXFxiX1xcYlssQV1cXEIiLCAiXywiIH0sCisJeyBNVVAsIEEsIDAsIDAsICJcXGIiLCAiXHhlNlx4OTJceGFkISIgfSwKKwl7IE1VUCwgQSwgMCwgMCwgIlxcQiIsICJfXHhjMlx4YTFceGMzXHhhMVx4YzJceDg1IiB9LAorCXsgTVVQLCBBLCAwLCAwLCAiXFxiW15BXVxcQlteY11cXGJbXl9dXFxCIiwgIl9ceGMzXHhhMVx4ZTJceDgwXHhhOCIgfSwKKwl7IE1VUCwgQSwgMCwgMCwgIlxcYlxcdytcXEIiLCAiXHhjM1x4ODlceGMyXHhhMVx4ZTZceDkyXHhhZFx4YzNceDgxXHhjM1x4YTEiIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIlxcYi4iLCAiXHhjZFx4YmUiIH0sCisJeyBDTVVQLCBBLCAwLCAwLCAiXFxCeSIsICJceGYwXHg5MFx4OTBceGE4eSIgfSwKKwl7IE0sIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJcXFJeIiwgIlxuIiB9LAorCXsgTSwgQSwgMCwgMSB8IEZfTk9NQVRDSCwgIl4iLCAiXG4iIH0sCisJeyAwLCAwLCAwLCAwLCAiXmFiIiwgImFiIiB9LAorCXsgMCwgMCwgMCwgMCB8IEZfTk9NQVRDSCwgIl5hYiIsICJhYWIiIH0sCisJeyBNLCBQQ1JFMl9ORVdMSU5FX0NSTEYsIDAsIDAsICJeYSIsICJcclxyYWFcblxuYWFcclxuYWEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIl4tIiwgIlx4ZTJceDgwXHhhOC0tXHhjMlx4ODUtXHJcbi0iIH0sCisJeyBNLCBQQ1JFMl9ORVdMSU5FX0FOWSwgMCwgMCwgIl4tIiwgImEtLWItLVx4ODUtLSIgfSwKKwl7IE1VLCBQQ1JFMl9ORVdMSU5FX0FOWSwgMCwgMCwgIl4tIiwgImEtLVx4ZTJceDgwXHhhOC0tIiB9LAorCXsgTVUsIFBDUkUyX05FV0xJTkVfQU5ZLCAwLCAwLCAiXi0iLCAiYS0tXHhjMlx4ODUtLSIgfSwKKwl7IDAsIDAsIDAsIDAsICJhYiQiLCAiYWIiIH0sCisJeyAwLCAwLCAwLCAwIHwgRl9OT01BVENILCAiYWIkIiwgImFiYWJcblxuIiB9LAorCXsgUENSRTJfRE9MTEFSX0VORE9OTFksIDAsIDAsIDAgfCBGX05PTUFUQ0gsICJhYiQiLCAiYWJhYlxyXG4iIH0sCisJeyBNLCBQQ1JFMl9ORVdMSU5FX0NSTEYsIDAsIDAsICJhJCIsICJcclxyYWFcblxuYWFcclxuYWEiIH0sCisJeyBNLCBQQ1JFMl9ORVdMSU5FX0FOWSwgMCwgMCwgImEkIiwgImFhYSIgfSwKKwl7IE1VLCBQQ1JFMl9ORVdMSU5FX0FOWUNSTEYsIDAsIDAsICIjJCIsICIjXHhjMlx4ODUjIyNcciMiIH0sCisJeyBNVSwgUENSRTJfTkVXTElORV9BTlksIDAsIDAsICIjJCIsICIjXHhlMlx4ODBceGE5IiB9LAorCXsgMCwgUENSRTJfTkVXTElORV9BTlksIFBDUkUyX05PVEJPTCwgMCB8IEZfTk9NQVRDSCwgIl5hIiwgImFhXG5hYSIgfSwKKwl7IE0sIFBDUkUyX05FV0xJTkVfQU5ZLCBQQ1JFMl9OT1RCT0wsIDAsICJeYSIsICJhYVxuYWEiIH0sCisJeyAwLCBQQ1JFMl9ORVdMSU5FX0FOWSwgUENSRTJfTk9URU9MLCAwIHwgRl9OT01BVENILCAiYSQiLCAiYWFcbmFhIiB9LAorCXsgMCwgUENSRTJfTkVXTElORV9BTlksIFBDUkUyX05PVEVPTCwgMCB8IEZfTk9NQVRDSCwgImEkIiwgImFhXHJcbiIgfSwKKwl7IFUgfCBQQ1JFMl9ET0xMQVJfRU5ET05MWSwgUENSRTJfTkVXTElORV9BTlksIDAsIDAgfCBGX1BST1BFUlRZLCAiXFxwe0FueX17Mix9JCIsICJhYVxyXG4iIH0sCisJeyBNLCBQQ1JFMl9ORVdMSU5FX0FOWSwgUENSRTJfTk9URU9MLCAwLCAiYSQiLCAiYWFcbmFhIiB9LAorCXsgMCwgUENSRTJfTkVXTElORV9DUiwgMCwgMCwgIi5cXFoiLCAiYWFhIiB9LAorCXsgVSwgUENSRTJfTkVXTElORV9DUiwgMCwgMCwgImFcXFoiLCAiYWFhXHIiIH0sCisJeyAwLCBQQ1JFMl9ORVdMSU5FX0NSLCAwLCAwLCAiLlxcWiIsICJhYWFcbiIgfSwKKwl7IDAsIFBDUkUyX05FV0xJTkVfQ1JMRiwgMCwgMCwgIi5cXFoiLCAiYWFhXHIiIH0sCisJeyBVLCBQQ1JFMl9ORVdMSU5FX0NSTEYsIDAsIDAsICIuXFxaIiwgImFhYVxuIiB9LAorCXsgMCwgUENSRTJfTkVXTElORV9DUkxGLCAwLCAwLCAiLlxcWiIsICJhYWFcclxuIiB9LAorCXsgVSwgUENSRTJfTkVXTElORV9BTllDUkxGLCAwLCAwLCAiLlxcWiIsICJhYWEiIH0sCisJeyBVLCBQQ1JFMl9ORVdMSU5FX0FOWUNSTEYsIDAsIDAsICIuXFxaIiwgImFhYVxyIiB9LAorCXsgVSwgUENSRTJfTkVXTElORV9BTllDUkxGLCAwLCAwLCAiLlxcWiIsICJhYWFcbiIgfSwKKwl7IFUsIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRiwgMCwgMCwgIi5cXFoiLCAiYWFhXHJcbiIgfSwKKwl7IFUsIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRiwgMCwgMCwgIi5cXFoiLCAiYWFhXHhlMlx4ODBceGE4IiB9LAorCXsgVSwgUENSRTJfTkVXTElORV9BTllDUkxGLCAwLCAwLCAiLlxcWiIsICJhYWEiIH0sCisJeyBVLCBQQ1JFMl9ORVdMSU5FX0FOWUNSTEYsIDAsIDAsICIuXFxaIiwgImFhYVxyIiB9LAorCXsgVSwgUENSRTJfTkVXTElORV9BTllDUkxGLCAwLCAwLCAiLlxcWiIsICJhYWFcbiIgfSwKKwl7IFUsIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRiwgMCwgMCwgIi5cXFoiLCAiYWFhXHJcbiIgfSwKKwl7IFUsIFBDUkUyX05FV0xJTkVfQU5ZLCAwLCAwLCAiLlxcWiIsICJhYWFceGMyXHg4NSIgfSwKKwl7IFUsIFBDUkUyX05FV0xJTkVfQU5ZLCAwLCAwLCAiLlxcWiIsICJhYWFceGUyXHg4MFx4YTgiIH0sCisJeyBNLCBBLCAwLCAwLCAiXFxBYSIsICJhYWEiIH0sCisJeyBNLCBBLCAwLCAxIHwgRl9OT01BVENILCAiXFxBYSIsICJhYWEiIH0sCisJeyBNLCBBLCAwLCAxLCAiXFxHYSIsICJhYWEiIH0sCisJeyBNLCBBLCAwLCAxIHwgRl9OT01BVENILCAiXFxHYSIsICJhYmEiIH0sCisJeyBNLCBBLCAwLCAwLCAiYVxceiIsICJhYWEiIH0sCisJeyBNLCBBLCAwLCAwIHwgRl9OT01BVENILCAiYVxceiIsICJhYWIiIH0sCisKKwkvKiBCcmFja2V0cyBhbmQgYWx0ZXJuYXRpdmVzLiAqLworCXsgTVUsIEEsIDAsIDAsICIoYWJ8YmJ8Y2QpIiwgImJhY2RlIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzphYnxhKShiY3xjKSIsICJhYmFiYyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKChhYnwoY2MpKXwoYmIpfCg/OmNkfGVmZykpIiwgImFiYWMiIH0sCisJeyBDTVUsIEEsIDAsIDAsICIoKGFCfChDYykpfChiQil8KD86Y2R8RUZnKSkiLCAiQWNDZSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKChhYnwoY2MpKXwoYmIpfCg/OmNkfGViZykpIiwgImFjZWJlYmciIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OihhKXwoPzpiKSkoY2N8KD86ZHxlKSkoYXxiKWsiLCAiYWNjYWJkYmJjY2JrIiB9LAorCXsgTVUsIEEsIDAsIDAsICJceGM3XHg4MnxceGM2XHg4MiIsICJceGYxXHg4M1x4ODJceDgyXHhjN1x4ODJceGM3XHg4MyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiPVx4YzdceDgyfCNceGM2XHg4MiIsICJceGYxXHg4M1x4ODJceDgyPVx4YzdceDgyXHhjN1x4ODMiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlx4YzdceDgyXHhjN1x4ODN8XHhjNlx4ODJceGM2XHg4MiIsICJceGYxXHg4M1x4ODJceDgyXHhjN1x4ODJceGM3XHg4MyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiXHhjNlx4ODJceGM2XHg4MnxceGM3XHg4M1x4YzdceDgzfFx4YzhceDg0XHhjOFx4ODQiLCAiXHhmMVx4ODNceDgyXHg4Mlx4YzhceDg0XHhjOFx4ODQiIH0sCisKKwkvKiBHcmVlZHkgYW5kIG5vbi1ncmVlZHkgPyBvcGVyYXRvcnMuICovCisJeyBNVSwgQSwgMCwgMCwgIig/OmEpP2EiLCAibGFhYiIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIihBKT9BIiwgImxsYWFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYSk/XD9hIiwgImFhYiIgfSwgLyogPz8gaXMgdGhlIHByZWZpeCBvZiB0cnlncmFwaHMgaW4gR0NDLiAqLworCXsgTVUsIEEsIDAsIDAsICIoYSk/YSIsICJtYW5tIiB9LAorCXsgQ01VLCBBLCAwLCAwLCAiKGF8Yik/XD9kKCg/OmUpPykiLCAiQUJBQmR4IiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYXxiKT9cP2QoKD86ZSk/KSIsICJhYmNkZSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKCg/OmFiKT9cP2d8Yig/Omcobm58ZCk/XD8pPyk/XD8oPzpuKT9tIiwgImFiZ25iZ25uYmdkbm1tIiB9LAorCisJLyogR3JlZWR5IGFuZCBub24tZ3JlZWR5ICsgb3BlcmF0b3JzICovCisJeyBNVSwgQSwgMCwgMCwgIihhYSkrYWEiLCAiYWFhYWFhYSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGFhKSs/YWEiLCAiYWFhYWFhYSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD86YWJhfGFifGEpK2wiLCAiYWJhYmFtYWJhYmFsIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzphYmF8YWJ8YSkrP2wiLCAiYWJhYmFtYWJhYmFsIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYSg/OmJjfGNifGJ8YykrP3xzcykrZSIsICJhY2Nzc2FiY2NiY2FjYmNjYmJYYWNjc3NhYmNjYmNhY2JjY2JiZSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGEoPzpiY3xjYnxifGMpK3xzcykrP2UiLCAiYWNjc3NhYmNjYmNhY2JjY2JiWGFjY3NzYWJjY2JjYWNiY2NiYmUiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OihiKGMpKz8pKyk/XD8oPzooYmMpK3woY2IpKykrKD86bSkrIiwgImJjY2JjY2NiY2JjY2JjYlBiY2NiY2NjYmNiY2NiY2JtbW4iIH0sCisKKwkvKiBHcmVlZHkgYW5kIG5vbi1ncmVlZHkgKiBvcGVyYXRvcnMgKi8KKwl7IENNVSwgQSwgMCwgMCwgIig/OkFBKSpBQiIsICJhYWFhYWFhbWFhYWFhYWFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzphYSkqP2FiIiwgImFhYWFhYWFtYWFhYWFhYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhYXxhYikqYWIiLCAiYWFhYmFhYWIiIH0sCisJeyBDTVUsIEEsIDAsIDAsICIoYWF8QWIpKj9hQiIsICJhYWFiYWFhYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGF8YikqKD86YSkqKD86YikqbSIsICJhYmJiYWFhYmFiYW5hYmJiYWFhYmFiYW1tIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYXxiKSo/KD86YSkqPyg/OmIpKj9tIiwgImFiYmJhYWFiYWJhbmFiYmJhYWFiYWJhbW0iIH0sCisJeyBNLCBBLCAwLCAwLCAiYShhKFxcMSopYXwoYiliKyl7MH1hIiwgImFhIiB9LAorCXsgTSwgQSwgMCwgMCwgIigoPzphfCkqKXswfWEiLCAiYSIgfSwKKworCS8qIENvbWJpbmluZyA/ICsgKiBvcGVyYXRvcnMgKi8KKwl7IE1VLCBBLCAwLCAwLCAiKChibSkrKT9cPyg/OmEpKihibSkrbnwoKGFtKSs/KT8oPzphKSsoYW0pKm4iLCAiYm1ibWFibWFtYWFhbWFtYm1hbWFuIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKChhYik/Y2QpKmVmKStnIiwgImFiY2RjZGVmY2RlZmVmbWFiY2RjZGVmY2RlZmVmZ2ciIH0sCisJeyBNVSwgQSwgMCwgMCwgIigoKGFiKT9cP2NkKSo/ZWYpKz9nIiwgImFiY2RjZGVmY2RlZmVmbWFiY2RjZGVmY2RlZmVmZ2ciIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OihhYik/Y3woPzphYikrP2QpKmciLCAiYWJhYmNkY2NhYmFiZGRnIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzooPzphYik/XD9jfChhYikrZCkqP2ciLCAiYWJhYmNkY2NhYmFiZGRnIiB9LAorCisJLyogU2luZ2xlIGNoYXJhY3RlciBpdGVyYXRvcnMuICovCisJeyBNVSwgQSwgMCwgMCwgIihhK2FhYikrYWFhYWIiLCAiYWFhYWJjYWFhYWJhYWJjYWFiY2FhYWJhYWFhYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGEqYSphYWIpK3giLCAiYWFhYWFiYWFiYWFhYm1hYWJ4IiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYSo/KGJ8YWIpYSo/KSt4IiwgImFhYWFiY3hiYmFhYmFhY2JhYWFiYWFiYXgiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhKyhhYnxhZClhKykreCIsICJhYWFiYWFhYWRhYWJhYWFiYWFhYWRhYWF4IiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYT8oYSlhPykrKGFhYSkiLCAiYWJhYWFiYWFhYWFhYWEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhP1w/KGEpYT9cPykrKGIpIiwgImFhYWFjYWFhY2FhY2FjYmFhYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhezAsNH0oYikpK2QiLCAiYWFhYWFhYmFhYmNhYWFhYWJhYWFhYWJkIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYXswLDR9P1teYl0pK2QrKGF7MCw0fVteYl0pZCsiLCAiYWFhYWFkYWFhYWNhYWRkZGFhZGRkIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYmF7Mn0pK2MiLCAiYmFhYmFhYWJhY2JhYWJhYWMiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhKitiYysrKSsiLCAiYWFhYmJjYWFhYmNjY2FiIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYT8rW15iXSkrIiwgImJhYmFhY2FjYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGF7MCwzfStiKShhezAsM30rYikoYXswLDN9KylbXmNdIiwgImFiYWFiYWFhY2JhYWJhYWFhYyIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIihbYS1jXStbZC1mXSs/KSs/ZyIsICJhQmRhY2RlaEFiRGFGZ0EiIH0sCisJeyBDTVUsIEEsIDAsIDAsICJbYy1mXStrIiwgIkRlbW1Ga2UiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihbREdIXXswLDR9TSkrIiwgIkdHREdIREdNTUhNREhIR0hNIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoW2EtY117NCx9cykrIiwgImFiYXNhYmJhc2JiYWFic2JiYSIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIlthY2VdezMsN30iLCAiQWNiREFjRUVjRWQiIH0sCisJeyBDTVUsIEEsIDAsIDAsICJbYWNlXXszLDd9PyIsICJBY2JEQWNFRWNFZCIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIlthY2VdezMsfSIsICJBY2JEQWNFRWNFZCIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIlthY2VdezMsfT8iLCAiQWNiREFjRUVjRWQiIH0sCisJeyBNVSwgQSwgMCwgMCwgIltja2xdezIsfT9nIiwgImNka2ttbGdsZ2xrY2ciIH0sCisJeyBDTVUsIEEsIDAsIDAsICJbYWNlXXs1fT8iLCAiQWNDZWJEQWNFRWNFZCIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKFtBYkNdezMsNX0/ZCkrIiwgIkJBQ2FBYmJBRUFBQ0NiZENDYmRDQ0FBYmIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihbXmFiXXswLH1zKXsyfSIsICJhYmFhYmNkc0FCYW1zRERzIiB9LAorCXsgTVUsIEEsIDAsIDAsICJcXGJcXHcrXFxCIiwgIngsYV9jZCIgfSwKKwl7IE1VUCwgQSwgMCwgMCwgIlxcYlteXHhjMlx4YTFdK1xcQiIsICJceGMzXHg4OVx4YzJceGExXHhlNlx4OTJceGFkXHhjM1x4ODFceGMzXHhhMSIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIlteYl0rKGEqKShbXmNdP2R7M30pIiwgImFhYWFkZGQiIH0sCisJeyBDTVVQLCBBLCAwLCAwLCAiXHhlMVx4YmRceGI4ezJ9IiwgIlx4ZTFceGJmXHhiOCNceGUxXHhiZlx4YjhceGUxXHhiZFx4YjgiIH0sCisJeyBDTVUsIEEsIDAsIDAsICJbXlx4ZjBceDkwXHg5MFx4ODBdezIsNH1AIiwgIlx4ZjBceDkwXHg5MFx4YThceGYwXHg5MFx4OTBceDgwIyMjXHhmMFx4OTBceDkwXHg4MEBAQCIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIlteXHhlMVx4YmRceGI4XVteXHhjM1x4YTldIiwgIlx4ZTFceGJkXHhiOFx4ZTFceGJmXHhiOFx4YzNceGE5XHhjM1x4ODkjIiB9LAorCXsgTVUsIEEsIDAsIDAsICJbXlx4ZTFceGJkXHhiOF1bXlx4YzNceGE5XSIsICJceGUxXHhiZFx4YjhceGUxXHhiZlx4YjhceGMzXHhhOVx4YzNceDg5IyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiW15ceGUxXHhiZFx4YjhdezMsfT8iLCAiIyNceGUxXHhiZFx4YjgjXHhlMVx4YmRceGI4I1x4YzNceDg5I1x4ZTFceGJkXHhiOCIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiXFxkKzEyMyIsICI5ODc2NTQzMjEsMDEyMzQiIH0sCisJeyBNVSwgQSwgMCwgMCwgImFiY2QqfFxcdyt4eSIsICJhYWFhYSxhYnh5eiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD86YWJjfCgoPzphbWN8XFxiXFx3Knh5KSkpIiwgImFhYWFhLGFieHl6IiB9LAorCXsgTVUsIEEsIDAsIDAsICJhKD9SKXwoW2Etel0rKykjIiwgIi5hYmNkLmFiY2QjLiJ9LAorCXsgTVUsIEEsIDAsIDAsICJhKD9SKXwoW2Etel0rKykjIiwgIi5hYmNkLm1iY2QjLiJ9LAorCXsgTVUsIEEsIDAsIDAsICIuW2FiXSouIiwgInh4IiB9LAorCXsgTVUsIEEsIDAsIDAsICIuW2FiXSphIiwgInh4YSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiLlthYl0/LiIsICJ4eCIgfSwKKworCS8qIEJyYWNrZXQgcmVwZWF0cyB3aXRoIGxpbWl0LiAqLworCXsgTVUsIEEsIDAsIDAsICIoPzooYWIpezJ9KXs1fU0iLCAiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYk0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OmFifGFiYWIpezEsNX1NIiwgImFiYWJhYmFiYWJhYmFiYWJhYmFiYWJNIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPz5hYnxhYmFiKXsxLDV9TSIsICJhYmFiYWJhYmFiYWJhYmFiYWJhYmFiTSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD86YWJ8YWJhYil7MSw1fT9NIiwgImFiYWJhYmFiYWJhYmFiYWJhYmFiYWJNIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPz5hYnxhYmFiKXsxLDV9P00iLCAiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYk0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OihhYil7MSw0fT8pezEsM30/TSIsICJhYmFiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYk0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OihhYil7MSw0fSl7MSwzfWFiYWJhYmFiYWJhYmFiYWJhYmFiYWJNIiwgImFiYWJhYmFiYWJhYmFiYWJhYmFiYWJhYk0iIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIig/OihhYil7MSw0fSl7MSwzfWFiYWJhYmFiYWJhYmFiYWJhYmFiYWJNIiwgImFiYWJhYmFiYWJhYmFiYWJhYmFiYWJNIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYWIpezQsNn0/TSIsICJhYmFiYWJhYmFiYWJhYk0iIH0sCisKKwkvKiBCYXNpYyBjaGFyYWN0ZXIgc2V0cy4gKi8KKwl7IE1VLCBBLCAwLCAwLCAiKD86XFxzKSsoPzpcXFMpKyIsICJhYiBcdFx4YzNceGE5XHhlNlx4OTJceGFkICIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKFxcdykqKGspKFxcVyk/XD8iLCAiYWJjZGVmIGFiY2sxMSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiXFwoKFxcZCkrXFwpXFxEIiwgImEoKSAoODMgKDgpMiAoOSlhYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiXFx3KFxcc3woPzpcXGQpKiwpK1xcd1xcd2IiLCAiYSA1LCA0LCwgYmIgNSwgNCwsIGFhYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKFxcdispKFxcVispIiwgIlx4MGVceGMyXHg4NVx4ZTJceDgwXHhhOFx4MGJceDA5XHhlMlx4ODBceGE5IiB9LAorCXsgTVUsIEEsIDAsIDAsICIoXFxoKykoXFxIKykiLCAiXHhlMlx4ODBceGE4XHhlMlx4ODBceDgwXHgyMFx4ZTJceDgwXHg4YVx4ZTJceDgxXHg5Zlx4ZTNceDgwXHg4MFx4MDlceDIwXHhjMlx4YTBceDBhIiB9LAorCXsgTVUsIEEsIDAsIDAsICJ4W2JjZWZdKyIsICJ4YXhkeGVjYmZnIiB9LAorCXsgTVUsIEEsIDAsIDAsICJ4W2JjZGdoaWpdKyIsICJ4YXhleGZ4ZGdiamsiIH0sCisJeyBNVSwgQSwgMCwgMCwgInhbXmJlZmddKyIsICJ4YnhleGFjZGhnIiB9LAorCXsgTVUsIEEsIDAsIDAsICJ4W15iY2RsXSsiLCAieGx4YnhhZWttZCIgfSwKKwl7IE1VLCBBLCAwLCAwLCAieFteYmNkZ2hpXSsiLCAieGJ4ZHhneGFlZmppIiB9LAorCXsgTVUsIEEsIDAsIDAsICJ4W0ItRmItZl0rIiwgInhheEF4Z3hiZkJGRyIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIlxceHtlOX0rIiwgIiNceGYwXHg5MFx4OTBceGE4XHhjM1x4YThceGMzXHhhOVx4YzNceDg5XHhjM1x4ODgiIH0sCisJeyBDTVUsIEEsIDAsIDAsICJbXlxceHtlOX1dKyIsICJceGMzXHhhOSNceGYwXHg5MFx4OTBceGE4XHhjM1x4YThceGMzXHg4OFx4YzNceDg5IiB9LAorCXsgTVUsIEEsIDAsIDAsICJbXFx4MDJcXHg3ZV0rIiwgIlx4YzNceDgxXHhlMVx4YmZceGI4XHhmMFx4OTBceDkwXHhhOFx4MDFceDAyXHg3ZVx4N2YiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlteXFx4MDJcXHg3ZV0rIiwgIlx4MDJceGMzXHg4MVx4ZTFceGJmXHhiOFx4ZjBceDkwXHg5MFx4YThceDAxXHg3Zlx4N2UiIH0sCisJeyBNVSwgQSwgMCwgMCwgIltcXHh7ODF9LVxceHs3ZmV9XSsiLCAiI1x4ZTFceGJmXHhiOFx4ZjBceDkwXHg5MFx4YThceGMyXHg4MFx4YzJceDgxXHhkZlx4YmVceGRmXHhiZiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiW15cXHh7ODF9LVxceHs3ZmV9XSsiLCAiXHhjMlx4ODEjXHhlMVx4YmZceGI4XHhmMFx4OTBceDkwXHhhOFx4YzJceDgwXHhkZlx4YmZceGRmXHhiZSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiW1xceHs4MDF9LVxceHtmZmZlfV0rIiwgIiNceGMzXHhhOVx4ZjBceDkwXHg5MFx4ODBceGUwXHhhMFx4ODBceGUwXHhhMFx4ODFceGVmXHhiZlx4YmVceGVmXHhiZlx4YmYiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlteXFx4ezgwMX0tXFx4e2ZmZmV9XSsiLCAiXHhlMFx4YTBceDgxI1x4YzNceGE5XHhmMFx4OTBceDkwXHg4MFx4ZTBceGEwXHg4MFx4ZWZceGJmXHhiZlx4ZWZceGJmXHhiZSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiW1xceHsxMDAwMX0tXFx4ezEwZmZmZX1dKyIsICIjXHhjM1x4YTlceGUyXHhiMVx4YTVceGYwXHg5MFx4ODBceDgwXHhmMFx4OTBceDgwXHg4MVx4ZjRceDhmXHhiZlx4YmVceGY0XHg4Zlx4YmZceGJmIiB9LAorCXsgTVUsIEEsIDAsIDAsICJbXlxceHsxMDAwMX0tXFx4ezEwZmZmZX1dKyIsICJceGYwXHg5MFx4ODBceDgxI1x4YzNceGE5XHhlMlx4YjFceGE1XHhmMFx4OTBceDgwXHg4MFx4ZjRceDhmXHhiZlx4YmZceGY0XHg4Zlx4YmZceGJlIiB9LAorCisJLyogVW5pY29kZSBwcm9wZXJ0aWVzLiAqLworCXsgTVVQLCBBLCAwLCAwLCAiWzEtNVx4YzNceGE5XFx3XSIsICJceGMzXHhhMV8iIH0sCisJeyBNVVAsIEEsIDAsIDAgfCBGX1BST1BFUlRZLCAiW1x4YzNceDgxXFxwe0xsfV0iLCAiQV9ceGMzXHg4OVx4YzNceGExIiB9LAorCXsgTVVQLCBBLCAwLCAwLCAiW1xcV2QtaF94LXpdKyIsICJhXHhjMlx4YTEjX3loemR4aSIgfSwKKwl7IE1VUCwgQSwgMCwgMCB8IEZfTk9NQVRDSCB8IEZfUFJPUEVSVFksICJbXFxQe0FueX1dIiwgImFiYyIgfSwKKwl7IE1VUCwgQSwgMCwgMCB8IEZfTk9NQVRDSCB8IEZfUFJPUEVSVFksICJbXlxccHtBbnl9XSIsICJhYmMiIH0sCisJeyBNVVAsIEEsIDAsIDAgfCBGX05PTUFUQ0ggfCBGX1BST1BFUlRZLCAiW1xcUHtBbnl9XHhjM1x4YTEtXHhjM1x4YThdIiwgImFiYyIgfSwKKwl7IE1VUCwgQSwgMCwgMCB8IEZfTk9NQVRDSCB8IEZfUFJPUEVSVFksICJbXlxccHtBbnl9XHhjM1x4YTEtXHhjM1x4YThdIiwgImFiYyIgfSwKKwl7IE1VUCwgQSwgMCwgMCB8IEZfTk9NQVRDSCB8IEZfUFJPUEVSVFksICJbXHhjM1x4YTEtXHhjM1x4YThcXFB7QW55fV0iLCAiYWJjIiB9LAorCXsgTVVQLCBBLCAwLCAwIHwgRl9OT01BVENIIHwgRl9QUk9QRVJUWSwgIlteXHhjM1x4YTEtXHhjM1x4YThcXHB7QW55fV0iLCAiYWJjIiB9LAorCXsgTVVQLCBBLCAwLCAwIHwgRl9QUk9QRVJUWSwgIltceGMzXHhhMS1ceGMzXHhhOFxccHtBbnl9XSIsICJhYmMiIH0sCisJeyBNVVAsIEEsIDAsIDAgfCBGX1BST1BFUlRZLCAiW15ceGMzXHhhMS1ceGMzXHhhOFxcUHtBbnl9XSIsICJhYmMiIH0sCisJeyBNVVAsIEEsIDAsIDAsICJbYi1ceGMzXHhhOVxcc10iLCAiYVx4Y1x4ZTZceDkyXHhhZCIgfSwKKwl7IENNVVAsIEEsIDAsIDAsICJbXHhjMlx4ODUtXHhjMlx4ODlceGMzXHg4OV0iLCAiXHhjMlx4ODRceGMzXHhhOSIgfSwKKwl7IE1VUCwgQSwgMCwgMCwgIlteYi1kXiZcXHNdezMsfSIsICJkYl4gIWFceGUyXHg4MFx4YThfYWUiIH0sCisJeyBNVVAsIEEsIDAsIDAgfCBGX1BST1BFUlRZLCAiW15cXFNcXFB7QW55fV1bXFxzTl17MSwzfVtcXFB7Tn1dezR9IiwgIlx4ZTJceDgwXHhhYVx4YSBOXHg5XHhjM1x4YTlfMCIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9QUk9QRVJUWSwgIlteXFxQe0x9XHg5IUQtRlx4YV17MiwzfSIsICJceDksLkRGXHhhLkNHXHhjM1x4ODEiIH0sCisJeyBDTVVQLCBBLCAwLCAwLCAiW1x4YzNceGExLVx4YzNceGE5X1x4ZTJceDgwXHhhMC1ceGUyXHg4MFx4YWZdezEsNX1bXlx4ZTJceDgwXHhhMC1ceGUyXHg4MFx4YWZdIiwgIlx4YzJceGExXHhjM1x4ODlceGMzXHg4OVx4ZTJceDgwXHhhZl9ceGUyXHg4MFx4YTAiIH0sCisJeyBNVVAsIEEsIDAsIDAgfCBGX1BST1BFUlRZLCAiW1x4YzNceGEyLVx4YzNceGE2XHhjM1x4ODEtXHhjM1x4ODRceGUyXHg4MFx4YTgtXHhlMlx4ODBceGE5XHhlNlx4OTJceGFkXFxwe1pzfV17Mix9IiwgIlx4ZTJceDgwXHhhN1x4ZTJceDgwXHhhOVx4ZTZceDkyXHhhZCBceGU2XHg5Mlx4YWUiIH0sCisJeyBNVVAsIEEsIDAsIDAgfCBGX1BST1BFUlRZLCAiW1xcUHtMJn1dezJ9W15ceGMyXHg4NS1ceGMyXHg4OVxccHtMbH1cXHB7THV9XXsyfSIsICJceGMzXHhhOVx4ZTZceDkyXHhhZC5hXHhlNlx4OTJceGFkfFx4YzJceDhhIyIgfSwKKwl7IFBDUkUyX1VDUCwgMCwgMCwgMCB8IEZfUFJPUEVSVFksICJbYS1iXFxzXXsyLDV9W15hXSIsICJBQiAgYmFhYSIgfSwKKworCS8qIFBvc3NpYmxlIGVtcHR5IGJyYWNrZXRzLiAqLworCXsgTVUsIEEsIDAsIDAsICIoPzp8YWJ8fGJjfGEpK2QiLCAiYWJjeGFiY2FiZCIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKHxhYnx8YmN8YSkrZCIsICJhYmN4YWJjYWJkIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzp8YWJ8fGJjfGEpKmQiLCAiYWJjeGFiY2FiZCIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKHxhYnx8YmN8YSkqZCIsICJhYmN4YWJjYWJkIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzp8YWJ8fGJjfGEpKz9kIiwgImFiY3hhYmNhYmQiIH0sCisJeyBNVSwgQSwgMCwgMCwgIih8YWJ8fGJjfGEpKz9kIiwgImFiY3hhYmNhYmQiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OnxhYnx8YmN8YSkqP2QiLCAiYWJjeGFiY2FiZCIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKHxhYnx8YmN8YSkqP2QiLCAiYWJjeGFiY2FiZCIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKCgoYSkqP3woPzpiYSkrKSs/fCg/OnxjfGNhKSopKm0iLCAiYWJhYWNhY2NhYmFjYWJhbGFiYWFjYWNjYWJhY2FiYW1tIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzooKD86YSkqfChiYSkrPykrfCh8Y3xjYSkqPykqP20iLCAiYWJhYWNhY2NhYmFjYWJhbGFiYWFjYWNjYWJhY2FiYW1tIiB9LAorCisJLyogU3RhcnQgb2Zmc2V0LiAqLworCXsgTVUsIEEsIDAsIDMsICIoXFxkfCg/OlxcdykqXFx3KSsiLCAiMGFjMDFIYiIgfSwKKwl7IE1VLCBBLCAwLCA0IHwgRl9OT01BVENILCAiKFxcd1xcV1xcdykrIiwgImFiI2QiIH0sCisJeyBNVSwgQSwgMCwgMiB8IEZfTk9NQVRDSCwgIihcXHdcXFdcXHcpKyIsICJhYiNkIiB9LAorCXsgTVUsIEEsIDAsIDEsICIoXFx3XFxXXFx3KSsiLCAiYWIjZCIgfSwKKworCS8qIE5ld2xpbmUuICovCisJeyBNLCBQQ1JFMl9ORVdMSU5FX0NSTEYsIDAsIDAsICJcXFd7MCwyfVteI117M30iLCAiXHJcbiMuLi4uLiIgfSwKKwl7IE0sIFBDUkUyX05FV0xJTkVfQ1IsIDAsIDAsICJcXFd7MCwyfVteI117M30iLCAiXHJcbiMuLi4uLiIgfSwKKwl7IE0sIFBDUkUyX05FV0xJTkVfQ1JMRiwgMCwgMCwgIlxcV3sxLDN9W14jXSIsICJcclxuIyMuLi4uIiB9LAorCXsgTVUsIEEsIFBDUkUyX05PX1VURl9DSEVDSywgMSwgIl4uYSIsICJcblx4ODBcbnhhIiB9LAorCXsgTVUsIEEsIDAsIDEsICJeIiwgIlxyXG4iIH0sCisJeyBNLCBQQ1JFMl9ORVdMSU5FX0NSTEYsIDAsIDEgfCBGX05PTUFUQ0gsICJeIiwgIlxyXG4iIH0sCisJeyBNLCBQQ1JFMl9ORVdMSU5FX0NSTEYsIDAsIDEsICJeIiwgIlxyXG5hIiB9LAorCisJLyogQW55IGNoYXJhY3RlciBleGNlcHQgbmV3bGluZSBvciBhbnkgbmV3bGluZS4gKi8KKwl7IDAsIFBDUkUyX05FV0xJTkVfQ1JMRiwgMCwgMCwgIi4iLCAiXHIiIH0sCisJeyBVLCBQQ1JFMl9ORVdMSU5FX0NSTEYsIDAsIDAsICIuKC4pLiIsICJhXHhjM1x4YTFcclxuXG5cclxyIiB9LAorCXsgMCwgUENSRTJfTkVXTElORV9BTllDUkxGLCAwLCAwLCAiLiguKSIsICJhXHJiXG5jXHJcblx4YzJceDg1XHhlMlx4ODBceGE4IiB9LAorCXsgVSwgUENSRTJfTkVXTElORV9BTllDUkxGLCAwLCAwLCAiLiguKSIsICJhXHJiXG5jXHJcblx4YzJceDg1XHhlMlx4ODBceGE4IiB9LAorCXsgVSwgUENSRTJfTkVXTElORV9BTlksIDAsIDAsICIoLikuIiwgImFccmJcbmNcclxuXHhjMlx4ODVceGUyXHg4MFx4YTkkZGUiIH0sCisJeyBVLCBQQ1JFMl9ORVdMSU5FX0FOWUNSTEYsIDAsIDAgfCBGX05PTUFUQ0gsICIuKC4pLiIsICJceGUyXHg4MFx4YThcbmJcciIgfSwKKwl7IDAsIFBDUkUyX05FV0xJTkVfQU5ZLCAwLCAwLCAiKC4pKC4pIiwgIiNceDg1I1xyI1xuI1xyXG4jXHg4NCIgfSwKKwl7IFUsIFBDUkUyX05FV0xJTkVfQU5ZLCAwLCAwLCAiKC4rKSMiLCAiI1xyTW5ceGMyXHg4NSNcbiMjIyIgfSwKKwl7IDAsIEJTUihQQ1JFMl9CU1JfQU5ZQ1JMRiksIDAsIDAsICJcXFIiLCAiXHIiIH0sCisJeyAwLCBCU1IoUENSRTJfQlNSX0FOWUNSTEYpLCAwLCAwLCAiXFxSIiwgIlx4ODUjXHJcbiMiIH0sCisJeyBVLCBCU1IoUENSRTJfQlNSX1VOSUNPREUpLCAwLCAwLCAiXFxSIiwgImFiXHhlMlx4ODBceGE4I2MiIH0sCisJeyBVLCBCU1IoUENSRTJfQlNSX1VOSUNPREUpLCAwLCAwLCAiXFxSIiwgImFiXHJcbmMiIH0sCisJeyBVLCBQQ1JFMl9ORVdMSU5FX0NSTEYgfCBCU1IoUENSRTJfQlNSX1VOSUNPREUpLCAwLCAwLCAiKFxcUi4pKyIsICJceGMyXHg4NVxyXG4jXHhlMlx4ODBceGE4XG5cclxuXHIiIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIlxcUisiLCAiYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlxcUisiLCAiYWJcclxuXHIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlxcUioiLCAiYWJcclxuXHIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlxcUioiLCAiXHJcblxyIiB9LAorCXsgTVUsIEEsIDAsIDAsICJcXFJ7Miw0fSIsICJcclxuYWJcclxyIiB9LAorCXsgTVUsIEEsIDAsIDAsICJcXFJ7Miw0fSIsICJcclxuYWJcblxuXG5cclxyXHIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlxcUnsyLH0iLCAiXHJcbmFiXG5cblxuXHJcclxyIiB9LAorCXsgTVUsIEEsIDAsIDAsICJcXFJ7MCwzfSIsICJcclxuXHJcblxyXG5cclxuXHJcbiIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiXFxSK1xcUlxcUiIsICJcclxuXHJcbiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiXFxSK1xcUlxcUiIsICJcclxyXHIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIlxcUipcXFJcXFIiLCAiXG5cciIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiXFxSezIsNH1cXFJcXFIiLCAiXHJcclxyIiB9LAorCXsgTVUsIEEsIDAsIDAsICJcXFJ7Miw0fVxcUlxcUiIsICJcclxyXHJcciIgfSwKKworCS8qIEF0b21pYyBncm91cHMgKG5vIGZhbGxiYWNrIGZyb20gIm5leHQiIGRpcmVjdGlvbikuICovCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIig/PmFiKWFiIiwgImJhYiIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKD8+KGFiKSlhYiIsICJiYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PmFiKSthYmMoPz5kZSkqZGVmKD8+Z2gpP2doZSg/PmlqKSs/ayg/PmxtKSo/big/Pm9wKT9cP29wIiwKKwkJCSJiYWJhYmNkZWRlZmdoZWlqaWprbG1sbW5vcCIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8+YShiKSthfChhYik/XD8oYikpYW4iLCAiYWJiYW4iIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PmFiK2F8KD86YWIpP1w/YilhbiIsICJhYmJhbiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKCg/PmFifGFkfCkqPykoPz58YykqYWJhZCIsICJhYmFiYWJjYWJhYmFkIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPz4oYWF8YnwpKisoPz4oIyMpfCMjIykqZHwoYWEpKD8+KGJhYSk/KW0pIiwgImFhYmFhIyMjIyNkYSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKCg/PmF8KSs/KWIiLCAiYWFhY2FhYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/Pnh8KSokIiwgImFhYSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8+KHgpfCkqJCIsICJhYWEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/Pnh8KCkpKiQiLCAiYWFhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKD8+W2N4eV1hfFthLWRdKSo/KWIiLCAiYWFhKyBhYWFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKD8+W2N4eV0oYSl8W2EtZF0pKj8pYiIsICJhYWErIGFhYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PigoPz4oYSspKSkpYmFifCg/PigoPz4oYSspKSkpYmIiLCAiYWFhYWJhYWFiYWFiYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/Pig/PmErKSliYWJ8KD8+KD8+YSspKWJiIiwgImFhYWFiYWFhYmFhYmFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPz4oYSljfCg/PihjKXwoYSkpYSliKj9iYWIiLCAiYWFhYWJhYWFiYWFiYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PmFjfCg/PmN8YSlhKWIqP2JhYiIsICJhYWFhYmFhYWJhYWJhYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8+KGIpYnwoYSkpKmIoPz4oYyl8ZCk/eCIsICJhYmFiY2FhYWJkYngiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PmJifGEpKmIoPz5jfGQpP3giLCAiYWJhYmNhYWFiZGJ4IiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPz4oYmIpfGEpKmIoPz5jfChkKSk/eCIsICJhYmFiY2FhYWJkYngiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PihhKSkqPyg/PihhKSkrPyg/PihhKSk/P3giLCAiYWFhYWFhY2NjYWFhYWFiYXgiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PmEpKj8oPz5hKSs/KD8+YSk/P3giLCAiYWFhYWFhY2NjYWFhYWFiYXgiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PihhKXwpKj8oPz4oYSl8KSs/KD8+KGEpfCk/P3giLCAiYWFhYWFhY2NjYWFhYWFiYXgiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PmF8KSo/KD8+YXwpKz8oPz5hfCk/P3giLCAiYWFhYWFhY2NjYWFhYWFiYXgiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PmEoPz4oYXswLDJ9KSkqP2J8YWFjKStiIiwgImFhYWFhYWFjYWFhYWJhYWFhYWNhYWFhYmFhY2FhYWJiIiB9LAorCXsgQ00sIEEsIDAsIDAsICIoPz4oKD8+YXszMn18Yit8KGEqKSk/KD8+Yyt8ZCopP1w/KStlKSs/ZiIsICJhYWNjZWJiZGRlIGJiZGFhYWNjZWJiZGVlIGJiZGFhYWNjZWJiZGVlZiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8+KD86KD8+YWF8YXx8eCkrP2J8KD8+YWF8YXx8KHgpKSs/Yyk/KD8+W2FkXXswLDJ9KSo/ZCkrZCIsICJhYWFjZGJhYWJkY2FiZGJhYWFjZCBhYWNhYWJkYmRjZGNhYWFhZGFhYmNiYWFkZCIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8+KD86KD8+YWF8YXx8KHgpKSs/YnwoPz5hYXxhfHx4KSs/Yyk/KD8+W2FkXXswLDJ9KSo/ZCkrZCIsICJhYWFjZGJhYWJkY2FiZGJhYWFjZCBhYWNhYWJkYmRjZGNhYWFhZGFhYmNiYWFkZCIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9QUk9QRVJUWSwgIlxcWCIsICJceGNjXHg4ZFx4Y2NceDhkIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX1BST1BFUlRZLCAiXFxYIiwgIlx4Y2NceDhkXHhjY1x4OGQjXHhjY1x4OGRceGNjXHg4ZCIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9QUk9QRVJUWSwgIlxcWCsuLiIsICJceGNjXHg4ZCNceGNjXHg4ZCNceGNjXHg4ZFx4Y2NceDhkIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX1BST1BFUlRZLCAiXFxYezIsNH0iLCAiYWJjZGVmIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX1BST1BFUlRZLCAiXFxYezIsNH0/IiwgImFiY2RlZiIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENIIHwgRl9QUk9QRVJUWSwgIlxcWHsyLDR9Li4iLCAiI1x4Y2NceDhkIyMiIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfUFJPUEVSVFksICJcXFh7Miw0fS4uIiwgIiNceGNjXHg4ZCNceGNjXHg4ZCMjIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYyhhYik/K2FiKSsiLCAiY2FiY2FiYWJjYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PihhKyliKSthYWJhYiIsICJhYWFhYmFhYWJhYWJhYiIgfSwKKworCS8qIFBvc3Nlc3NpdmUgcXVhbnRpZmllcnMuICovCisJeyBNVSwgQSwgMCwgMCwgIig/OmF8YikrK20iLCAibWFiYWJiYWF4YWJhYmJhYW0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OmF8YikqK20iLCAibWFiYWJiYWF4YWJhYmJhYW0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OmF8YikqK20iLCAiYWJhYmJhYXhhYmFiYmFhbSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGF8YikrK20iLCAibWFiYWJiYWF4YWJhYmJhYW0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhfGIpKittIiwgIm1hYmFiYmFheGFiYWJiYWFtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYXxiKSorbSIsICJhYmFiYmFheGFiYWJiYWFtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYXxiKCpBQ0NFUFQpKSsrbSIsICJtYWF4YWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OmIqKSsrbSIsICJieGJieGJiYnhtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzpiKikrK20iLCAiYnhiYnhiYmJ4YmJtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzpiKikqK20iLCAiYnhiYnhiYmJ4bSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD86YiopKittIiwgImJ4YmJ4YmJieGJibSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGIqKSsrbSIsICJieGJieGJiYnhtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYiopKyttIiwgImJ4YmJ4YmJieGJibSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGIqKSorbSIsICJieGJieGJiYnhtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYiopKittIiwgImJ4YmJ4YmJieGJibSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD86YXwoYikpKyttIiwgIm1hYmFiYmFheGFiYWJiYWFtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzooYSl8YikqK20iLCAibWFiYWJiYWF4YWJhYmJhYW0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OihhKXwoYikpKittIiwgImFiYWJiYWF4YWJhYmJhYW0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhfChiKSkrK20iLCAibWFiYWJiYWF4YWJhYmJhYW0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIigoYSl8YikqK20iLCAibWFiYWJiYWF4YWJhYmJhYW0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIigoYSl8KGIpKSorbSIsICJhYmFiYmFheGFiYWJiYWFtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYXwoYikoKkFDQ0VQVCkpKyttIiwgIm1hYXhhYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD86KGIqKSkrK20iLCAiYnhiYnhiYmJ4bSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD86KGIqKSkrK20iLCAiYnhiYnhiYmJ4YmJtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzooYiopKSorbSIsICJieGJieGJiYnhtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzooYiopKSorbSIsICJieGJieGJiYnhiYm0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIigoYiopKSsrbSIsICJieGJieGJiYnhtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKGIqKSkrK20iLCAiYnhiYnhiYmJ4YmJtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKGIqKSkqK20iLCAiYnhiYnhiYmJ4bSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKChiKikpKittIiwgImJ4YmJ4YmJieGJibSIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKD8+KGJ7Miw0fSkpKD86KD86KGFhfGMpKSsrbXwoPzooYWF8YykpK24pIiwgImJiYWFjYWFjY2FhYWFjeGJiYm1ibiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKCg/OmIpKythKSsoY2QpKittIiwgImJiYWJhYmJhY2RjZG5iYmFiYWJiYWNkY2RtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKD86KGIpKSsrYSkrKChjKWQpKittIiwgImJiYWJhYmJhY2RjZG5iYmFiYWJiYWNkY2RtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzooPzooPzphYikqK2spKysoPzpuKD86Y2QpKyspKispKittIiwgImFiYWJra1hhYmFia2thYmtuY1hhYmFia2thYmtuY2RjZG5jZFhhYmFia2thYmtuY2RjZG5jZGtrYWJrbmNkWGFiYWJra2Fia25jZGNkbmNka2thYmtuY2RtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzooKGFiKSorKGspKSsrKG4oPzpjKGQpKSsrKSorKSorbSIsICJhYmFia2tYYWJhYmtrYWJrbmNYYWJhYmtrYWJrbmNkY2RuY2RYYWJhYmtrYWJrbmNkY2RuY2Rra2Fia25jZFhhYmFia2thYmtuY2RjZG5jZGtrYWJrbmNkbSIgfSwKKworCS8qIEJhY2sgcmVmZXJlbmNlcy4gKi8KKwl7IE1VLCBBLCAwLCAwLCAiKGFhfGJiKShcXDEqKShsbHwpKFxcMyopYmJiYmJiYyIsICJhYWFhYWFiYmJiYmJiYmMiIH0sCisJeyBDTVUsIEEsIDAsIDAsICIoYWF8YmIpKFxcMSspKGxsfCkoXFwzKyliYmJiYmJjIiwgImJCYmJCYkNiQmJiYkJiYmNiYkJiYmJCQmJiQyIgfSwKKwl7IENNLCBBLCAwLCAwLCAiKGF7Miw0fSlcXDEiLCAiQWFBYWFBYUEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhYXxiYikoXFwxPylhYShcXDE/KShsbHwpKFxcNCspYmJjIiwgImFhYWFhYWFhYmJhYWJiYmJhYWJiYmJjIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYWF8YmIpKFxcMXswLDV9KShsbHwpKFxcM3swLDV9KWNjIiwgImJieHhiYmJieHhhYWFhYWFhYWFhYWFhYWFhY2MiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhYXxiYikoXFwxezMsNX0pKGxsfCkoXFwzezMsNX0pY2MiLCAiYmJiYmJiYmJiYmJiYWFhYWFhY2NiYmJiYmJiYmJiYmJiYmNjIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYWF8YmIpKFxcMXszLH0pKGxsfCkoXFwzezMsfSljYyIsICJiYmJiYmJiYmJiYmJhYWFhYWFjY2JiYmJiYmJiYmJiYmJiY2MiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihcXHcrKWIoXFwxKyljIiwgIkdhYkdhR2FEYkdhREdhRGMiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OihhYSl8YilcXDE/YiIsICJiYiIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIihhYXxiYikoXFwxKj8pYWEoXFwxKz8pIiwgImJCQmJhYUFBYWFBQWFhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYWF8YmIpKFxcMSo/KShkZHwpY2MoXFwzKz8pIiwgImFhYWFhY2NkZCIgfSwKKwl7IENNVSwgQSwgMCwgMCwgIig/OihhYXxiYikoXFwxP1w/KWNjKXsyfShcXDE/XD8pIiwgImFBYUFCQmJiQUFhQWNDYUFjQ2FBIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzooYWF8YmIpKFxcMXszLDV9PykpezJ9KGRkfCkoXFwzezMsNX0/KSIsICJhYWFhYWFiYmJiYmJiYmJiYWFhYWFhYWFhYWFhYWEiIH0sCisJeyBDTSwgQSwgMCwgMCwgIig/OihhYXxiYikoXFwxezMsfT8pKXsyfShkZHwpKFxcM3szLH0/KSIsICJhYWFhYWFiYmJiYmJiYmJiYWFhYWFhYWFhYWFhYWEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OihhYXxiYikoXFwxezAsM30/KSl7Mn0oZGR8KShcXDN7MCwzfT8pYihcXDF7MCwzfT8pKFxcMXswLDN9KSIsICJhYWFhYWFhYWFhYWFhYWFiYWFhYWEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhKD86XFwxfClhKXszfWIiLCAiYWFhYWFhYWFhYWFiIiB9LAorCXsgTSwgQSwgMCwgMCwgIihhPyliKFxcMVxcMSpcXDErXFwxP1xcMSo/XFwxKz9cXDE/P1xcMSorXFwxKytcXDE/K1xcMXs0fVxcMXszLDV9XFwxezQsfVxcMXswLDV9XFwxezMsNX0/XFwxezQsfT9cXDF7MCw1fT9cXDF7Myw1fStcXDF7NCx9K1xcMXswLDV9KyMpezJ9ZCIsICJiYiNiIyNkIiB9LAorCXsgTVVQLCBBLCAwLCAwIHwgRl9QUk9QRVJUWSwgIihcXFB7Tn0pXFwxezIsfSIsICIud3d3LiIgfSwKKwl7IE1VUCwgQSwgMCwgMCB8IEZfUFJPUEVSVFksICIoXFxQe059KVxcMXswLDJ9IiwgInd3d3d3LiIgfSwKKwl7IE1VUCwgQSwgMCwgMCB8IEZfUFJPUEVSVFksICIoXFxQe059KVxcMXsxLDJ9d3ciLCAid3d3dyIgfSwKKwl7IE1VUCwgQSwgMCwgMCB8IEZfUFJPUEVSVFksICIoXFxQe059KVxcMXsxLDJ9d3ciLCAid3d3d3ciIH0sCisJeyBQQ1JFMl9VQ1AsIDAsIDAsIDAgfCBGX1BST1BFUlRZLCAiKFxcUHtOfSlcXDF7Mix9IiwgIi53d3cuIiB9LAorCXsgQ01VUCwgQSwgMCwgMCwgIihceGYwXHg5MFx4OTBceDgwKVxcMSIsICJceGYwXHg5MFx4OTBceGE4XHhmMFx4OTBceDkwXHhhOCIgfSwKKwl7IE1VIHwgUENSRTJfRFVQTkFNRVMsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJcXGs8QT57MSwzfSg/PEE+YWEpKD88QT5iYikiLCAiYWFiYiIgfSwKKwl7IE1VIHwgUENSRTJfRFVQTkFNRVMgfCBQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGLCBBLCAwLCAwLCAiXFxrPEE+ezEsM30oPzxBPmFhKSg/PEE+YmIpIiwgImFhYmIiIH0sCisJeyBNVSB8IFBDUkUyX0RVUE5BTUVTIHwgUENSRTJfTUFUQ0hfVU5TRVRfQkFDS1JFRiwgQSwgMCwgMCwgIlxcazxBPiooPzxBPmFhKSg/PEE+YmIpIiwgImFhYmIiIH0sCisJeyBNVSB8IFBDUkUyX0RVUE5BTUVTLCBBLCAwLCAwLCAiKD88QT5hYSkoPzxBPmJiKVxcazxBPnswLDN9YWFhYWFhIiwgImFhYmJhYWFhYWEiIH0sCisJeyBNVSB8IFBDUkUyX0RVUE5BTUVTLCBBLCAwLCAwLCAiKD88QT5hYSkoPzxBPmJiKVxcazxBPnsyLDV9YmIiLCAiYWFiYmFhYWFiYiIgfSwKKwl7IE1VIHwgUENSRTJfRFVQTkFNRVMsIEEsIDAsIDAsICIoPzooPzxBPmFhKXwoPzxBPmJiKSlcXGs8QT57MCwzfW0iLCAiYWFhYWFhYWFiYmJiYWFiYmJibSIgfSwKKwl7IE1VIHwgUENSRTJfRFVQTkFNRVMsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJcXGs8QT57MSwzfT8oPzxBPmFhKSg/PEE+YmIpIiwgImFhYmIiIH0sCisJeyBNVSB8IFBDUkUyX0RVUE5BTUVTIHwgUENSRTJfTUFUQ0hfVU5TRVRfQkFDS1JFRiwgQSwgMCwgMCwgIlxcazxBPnsxLDN9Pyg/PEE+YWEpKD88QT5iYikiLCAiYWFiYiIgfSwKKwl7IE1VIHwgUENSRTJfRFVQTkFNRVMsIEEsIDAsIDAsICJcXGs8QT4qPyg/PEE+YWEpKD88QT5iYikiLCAiYWFiYiIgfSwKKwl7IE1VIHwgUENSRTJfRFVQTkFNRVMsIEEsIDAsIDAsICIoPzooPzxBPmFhKXwoPzxBPmJiKSlcXGs8QT57MCwzfT9tIiwgImFhYWFhYWJiYmJiYmFhYmJiYmJiYmJiYm0iIH0sCisJeyBNVSB8IFBDUkUyX0RVUE5BTUVTLCBBLCAwLCAwLCAiKD86KD88QT5hYSl8KD88QT5iYikpXFxrPEE+Kj9tIiwgImFhYWFhYWJiYmJiYmFhYmJiYmJiYmJiYm0iIH0sCisJeyBNVSB8IFBDUkUyX0RVUE5BTUVTLCBBLCAwLCAwLCAiKD86KD88QT5hYSl8KD88QT5iYikpXFxrPEE+ezIsM30/IiwgImFhYWFiYmJiYWFhYWJiYmJiYmJiYmIiIH0sCisJeyBDTVUgfCBQQ1JFMl9EVVBOQU1FUywgQSwgMCwgMCwgIig/Oig/PEE+QUEpfCg/PEE+QkIpKVxcazxBPnswLDN9TSIsICJhYWFhYWFhYWJiYmJhYWJiYmJtIiB9LAorCXsgQ01VIHwgUENSRTJfRFVQTkFNRVMsIEEsIDAsIDAsICIoPzooPzxBPkFBKXwoPzxBPkJCKSlcXGs8QT57MSwzfU0iLCAiYWFhYWFhYWFiYmJiYWFiYmJibSIgfSwKKwl7IENNVSB8IFBDUkUyX0RVUE5BTUVTLCBBLCAwLCAwLCAiKD86KD88QT5BQSl8KD88QT5CQikpXFxrPEE+ezAsM30/TSIsICJhYWFhYWFiYmJiYmJhYWJiYmJiYmJiYmJtIiB9LAorCXsgQ01VIHwgUENSRTJfRFVQTkFNRVMsIEEsIDAsIDAsICIoPzooPzxBPkFBKXwoPzxBPkJCKSlcXGs8QT57MiwzfT8iLCAiYWFhYWJiYmJhYWFhYmJiYmJiYmJiYiIgfSwKKworCS8qIEFzc2VydGlvbnMuICovCisJeyBNVSwgQSwgMCwgMCwgIig/PXh4fHl5fHp6KVxcd3s0fSIsICJhYmN6emRlZmciIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PSgoXFx3KyliKXszfXxhYikiLCAiZGJiYmIgYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/IWFifGJjfGNkKVthLXpdezJ9IiwgIlhhYmNkZWYiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PD1hYWF8YWF8YSlhIiwgImFhYSIgfSwKKwl7IE1VLCBBLCAwLCAyLCAiKD88PWFhYXxhYXxhKWEiLCAiYWFhIiB9LAorCXsgTSwgQSwgMCwgMCwgIig/PD1hYWF8YWF8YSlhIiwgImFhYSIgfSwKKwl7IE0sIEEsIDAsIDIsICIoPzw9YWFhfGFhfGEpYSIsICJhYWEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihcXGR7Mn0pKD8hXFx3K2N8KCgoXFx3PyltKXsyfW4pK3xcXDEpIiwgIng1NjU2IiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKD89KChcXGR7Miw2fVxcdyl7Mix9KSlcXHd7NSwyMH1LKXsyLH0iLCAiNTY3djA5NzA4SzEybDAwTTAwIDU2N3YwOTcwOEsxMmwwME0wMEs0NUsiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PSg/Oig/PVxcUythKVxcdyooYikpezN9KVxcdytcXGQiLCAiYmJhIGJiYWIgbmJia2JhIG5iYmtiYTBrbCIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8+YSg/PihiKykpYSg/PSguLikpKSo/ayIsICJhY2FiYmNhYmJhYWJhY2FiYWFiYmFrayIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKCg/KD89KGEpKWEpK2spIiwgImJiYWsiIH0sCisJeyBNVSwgQSwgMCwgMCwgIigoPyg/PWEpYSkraykiLCAiYmJhayIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKD89KD8+KGEpKW0pYW1rIiwgImEgayIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKD8hKD8+KGEpKW0pYW1rIiwgImEgayIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKD8+KD89KGEpKWFtKWFtayIsICJhIGsiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PSg/PmF8KD89KD8+KGIrKSlhfGMpW2EtY10rKSo/bSlbYS1jbV0rayIsICJhYWFtIGJiYW0gYmFhYW1iYWFtIGFiYmFiYmEgYmFhYW1iYWFtayIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8+ID9cP1xcYig/KD89XFx3ezEsNH0oYSkpbSlcXHd7MCw4fWJjKXsyLH0/IiwgImJjYSBzc2JjIG1hYmQgc3NiYyBtYWJjIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzooPz1hYik/W15uXVtebl0pK20iLCAiYWJhYmNkYWJjZGNkYWJuYWJhYmNkYWJjZGNkYWJtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzooPz1hKGIpKT9bXm5dW15uXSkrbSIsICJhYmFiY2RhYmNkY2RhYm5hYmFiY2RhYmNkY2RhYm0iIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/Oig/PS4oLikpPz9cXDEuKSttIiwgImFhYmJiY2JhY2NjYW5hYWJiYmNiYWNjY2FtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzooPz0uKT8/W2EtY10pK20iLCAiYWJhY2RjYmFjYWNkY2FjY2FtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKD8hYSk/KD8hKFteYV0pKT8pKyQiLCAiYWNiYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIigoPyFhKT9cPyg/IShbXmFdKSk/XD8pKyQiLCAiYWNiYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgImEoPz0oP0MpXFxCKD9DYHhgKSliIiwgImFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICJhKD8hKD9DKVxcQig/Q2B4YCkpYmJ8YWIiLCAiYWJiIiB9LAorCXsgTVUsIEEsIDAsIDAsICJhKD89XFxifCg/QylcXEIoP0NgeGApKWIiLCAiYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgImEoPyFcXGJ8KD9DKVxcQig/Q2B4YCkpYmJ8YWIiLCAiYWJiIiB9LAorCXsgTVUsIEEsIDAsIDAsICJjKD8oPz0oP0MpXFxCKD9DYHhgKSlhYnxhKSIsICJjYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgImMoPyg/ISg/QylcXEIoP0NgeGApKWFifGEpIiwgImNhYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiYyg/KD89XFxifCg/QylcXEIoP0NgeGApKWFifGEpIiwgImNhYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiYyg/KD8hXFxifCg/QylcXEIoP0NgeGApKWFifGEpIiwgImNhYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiYSg/PSliIiwgImFiIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJhKD8hKWIiLCAiYWIiIH0sCisKKwkvKiBOb3QgZW1wdHksIEFDQ0VQVCwgRkFJTCAqLworCXsgTVUsIEEsIFBDUkUyX05PVEVNUFRZLCAwIHwgRl9OT01BVENILCAiYSoiLCAiYmN4IiB9LAorCXsgTVUsIEEsIFBDUkUyX05PVEVNUFRZLCAwLCAiYSoiLCAiYmNhYWQiIH0sCisJeyBNVSwgQSwgUENSRTJfTk9URU1QVFksIDAsICJhKj8iLCAiYmNhYWQiIH0sCisJeyBNVSwgQSwgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwgMCwgImEqIiwgImJjYWFkIiB9LAorCXsgTVUsIEEsIDAsIDAsICJhKCpBQ0NFUFQpYiIsICJhYiIgfSwKKwl7IE1VLCBBLCBQQ1JFMl9OT1RFTVBUWSwgMCB8IEZfTk9NQVRDSCwgImEqKCpBQ0NFUFQpYiIsICJiY3giIH0sCisJeyBNVSwgQSwgUENSRTJfTk9URU1QVFksIDAsICJhKigqQUNDRVBUKWIiLCAiYmNhYWQiIH0sCisJeyBNVSwgQSwgUENSRTJfTk9URU1QVFksIDAsICJhKj8oKkFDQ0VQVCliIiwgImJjYWFkIiB9LAorCXsgTVUsIEEsIFBDUkUyX05PVEVNUFRZLCAwIHwgRl9OT01BVENILCAiKD86enxhKigqQUNDRVBUKWIpIiwgImJjeCIgfSwKKwl7IE1VLCBBLCBQQ1JFMl9OT1RFTVBUWSwgMCwgIig/Onp8YSooKkFDQ0VQVCliKSIsICJiY2FhZCIgfSwKKwl7IE1VLCBBLCBQQ1JFMl9OT1RFTVBUWSwgMCwgIig/Onp8YSo/KCpBQ0NFUFQpYikiLCAiYmNhYWQiIH0sCisJeyBNVSwgQSwgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwgMCwgImEqKCpBQ0NFUFQpYiIsICJiY3giIH0sCisJeyBNVSwgQSwgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwgMCB8IEZfTk9NQVRDSCwgImEqKCpBQ0NFUFQpYiIsICIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIigoYSgqQUNDRVBUKWIpKSIsICJhYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGEoKkZBSUwpYXxhKSIsICJhYWEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PWFiKCpBQ0NFUFQpYilhIiwgImFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPz0oPzp4fGFiKCpBQ0NFUFQpYikpIiwgImFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPz0oYShiKCpBQ0NFUFQpYikpKWEiLCAiYWIiIH0sCisJeyBNVSwgQSwgUENSRTJfTk9URU1QVFksIDAsICIoPz1hKigqQUNDRVBUKSljIiwgImMiIH0sCisKKwkvKiBDb25kaXRpb25hbCBibG9ja3MuICovCisJeyBNVSwgQSwgMCwgMCwgIig/KD89KGEpKWF8YikrayIsICJhYmFiYmFsYmJhZGFiYWsiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD8hKGIpKWF8YikrayIsICJhYmFiYmFsYmJhZGFiYWsiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD89YSlhfGIpK2siLCAiYWJhYmJhbGJiYWRhYmFrIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPyg/IWIpYXxiKStrIiwgImFiYWJiYWxiYmFkYWJhayIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8oPz0oYSkpYSp8YiopK2siLCAiYWJhYmJhbGJiYWRhYmFrIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPyg/IShiKSlhKnxiKikrayIsICJhYmFiYmFsYmJhZGFiYWsiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD8hKGIpKSg/OmFhYWFhYXxhKXwoPzpiYmJiYmJ8YikpK2FhYWFrIiwgImFhYWFhYWFhYWFhYWFhIGJiYmJiYmJiYmJiYmJiYiBhYWFhYWFhayIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8oPyFiKSg/OmFhYWFhYXxhKXwoPzpiYmJiYmJ8YikpK2FhYWFrIiwgImFhYWFhYWFhYWFhYWFhIGJiYmJiYmJiYmJiYmJiYiBhYWFhYWFhayIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9ESUZGLCAiKD8oPyEoYikpKD86YWFhYWFhfGEpfCg/OmJiYmJiYnxiKSkrYmJiYmsiLCAiYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiIGJiYmJiYmJrIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPyg/IWIpKD86YWFhYWFhfGEpfCg/OmJiYmJiYnxiKSkrYmJiYmsiLCAiYWFhYWFhYWFhYWFhYWEgYmJiYmJiYmJiYmJiYmJiIGJiYmJiYmJrIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPyg/PWEpYSp8YiopK2siLCAiYWJhYmJhbGJiYWRhYmFrIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPyg/IWIpYSp8YiopK2siLCAiYWJhYmJhbGJiYWRhYmFrIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPyg/PWEpYWIpIiwgImEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD88IWIpYykiLCAiYiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8oREVGSU5FKWEoYikpIiwgImEiIH0sCisJeyBNVSwgQSwgMCwgMCwgImEoPyhERUZJTkUpKD86YnwoPzpjPykrKSopIiwgImEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD89LlthLWNdKVtrLWxdfFtBLURdKSIsICJrZEIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD8hLnswLDR9W2NkXSkoYWF8YmIpfChjY3xkZCkpKyIsICJhYWJiY2NkZGFhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPyg/PVteI0BdKkApKGFhYWJ8YWF8YWJhKXwoYWJhfGFhYikpezMsfSIsICJhYWFiYWFhYmEjYWFhYmFhYWJhI2FhYWJhYWFiYUAiIH0sCisJeyBNVSwgQSwgMCwgMCwgIigoPz1cXHd7NX0pXFx3KD8oPz1cXHcqaylcXGR8W2EtZl9dKSpcXHdcXHMpKyIsICJtb2wgbTEwa2sgbTA4OGsgX2ZfYV8gbWJra2wiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihjKT9cPyg/KDEpYXxiKSIsICJjZGNhYSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGMpP1w/KD8oMSlhfGIpIiwgImNiYiIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9ESUZGLCAiKD8oPz0oYSkpKGFhYWF8YT8pKSthYWsiLCAiYWFhYWFiIGFhYWFhayIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8oPz1hKShhYWFhfGE/KSkrYWFrIiwgImFhYWFhYiBhYWFhYWsiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD8hKGIpKShhYWFhfGE/KSkrYWFrIiwgImFhYWFhYiBhYWFhYWsiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD8hYikoYWFhYXxhPykpK2FhayIsICJhYWFhYWIgYWFhYWFrIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX0RJRkYsICIoPyg/PShhKSlhKikrYWFrIiwgImFhYWFhYiBhYWFhYWsiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD89YSlhKikrYWFrIiwgImFhYWFhYiBhYWFhYWsiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD8hKGIpKWEqKSthYWsiLCAiYWFhYWFiIGFhYWFhayIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8oPyFiKWEqKSthYWsiLCAiYWFhYWFiIGFhYWFhayIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8oPz0oPz0oPyEoeCkpYSlhYSlhYWF8KD8oPz0oPyF5KWJiKWJiYikpKmsiLCAiYWJhYWJiYWFhYmJiYWFhYmJiIGFiYWFiYmFhYWJiYmFhYWJiYmsiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/UDxOYW1lPmEpPyg/UDxOYW1lMj5iKT8oPyhOYW1lKWN8ZCkqbCIsICJiYyBkZGQgYWJjY2FiY2NsIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoP1A8TmFtZT5hKT8oP1A8TmFtZTI+Yik/KD8oTmFtZSljfGQpKz9kZCIsICJiY2FiY2FjZGIgYmRkZGQiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/UDxOYW1lPmEpPyg/UDxOYW1lMj5iKT8oPyhOYW1lKWN8ZCkrbCIsICJhYmFiY2NkZGFiZGJjY2QgYWJjY2NsIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKD86YXxhYSkoPygxKWFhYSkpeCIsICJhYXgiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD8hKWF8YikiLCAiYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/KD8hKWEpIiwgImFiIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoPyg/ISlhfGIpIiwgImFjIiB9LAorCisJLyogU2V0IHN0YXJ0IG9mIG1hdGNoLiAqLworCXsgTVUsIEEsIDAsIDAsICIoPzpcXEthKSphYWFhYiIsICJhYWFhYWFhYSBhYWFhYWFhYmIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PlxcS2FcXEthKSphYWFhYiIsICJhYWFhYWFhYSBhYWFhYWFhYWFhYmIiIH0sCisJeyBNVSwgQSwgMCwgMCwgImErXFxLKD88PVxcR2FhKWEiLCAiYWFhYWFhIiB9LAorCXsgTVUsIEEsIFBDUkUyX05PVEVNUFRZLCAwIHwgRl9OT01BVENILCAiYVxcSygqQUNDRVBUKWIiLCAiYWEiIH0sCisJeyBNVSwgQSwgUENSRTJfTk9URU1QVFlfQVRTVEFSVCwgMCwgImFcXEsoKkFDQ0VQVCliIiwgImFhIiB9LAorCisJLyogRmlyc3QgbGluZS4gKi8KKwl7IE1VIHwgUENSRTJfRklSU1RMSU5FLCBBLCAwLCAwIHwgRl9QUk9QRVJUWSwgIlxccHtBbnl9YSIsICJiYlxuYWFhIiB9LAorCXsgTVUgfCBQQ1JFMl9GSVJTVExJTkUsIEEsIDAsIDAgfCBGX05PTUFUQ0ggfCBGX1BST1BFUlRZLCAiXFxwe0FueX1hIiwgImJiXHJcbmFhYSIgfSwKKwl7IE1VIHwgUENSRTJfRklSU1RMSU5FLCBBLCAwLCAwLCAiKD88PWEpIiwgImEiIH0sCisJeyBNVSB8IFBDUkUyX0ZJUlNUTElORSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIlteYV1bXmJdIiwgImFiIiB9LAorCXsgTVUgfCBQQ1JFMl9GSVJTVExJTkUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJhIiwgIlxuYSIgfSwKKwl7IE1VIHwgUENSRTJfRklSU1RMSU5FLCBBLCAwLCAwIHwgRl9OT01BVENILCAiW2FiY10iLCAiXG5hIiB9LAorCXsgTVUgfCBQQ1JFMl9GSVJTVExJTkUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJeYSIsICJcbmEiIH0sCisJeyBNVSB8IFBDUkUyX0ZJUlNUTElORSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIl4oPzw9XG4pIiwgIlxuYSIgfSwKKwl7IE1VIHwgUENSRTJfRklSU1RMSU5FLCBBLCAwLCAwLCAiXHhmMFx4OTBceDkwXHg4MCIsICJceGYwXHg5MFx4OTBceDgwIiB9LAorCXsgTVUgfCBQQ1JFMl9GSVJTVExJTkUsIFBDUkUyX05FV0xJTkVfQU5ZLCAwLCAwIHwgRl9OT01BVENILCAiIyIsICJceGMyXHg4NSMiIH0sCisJeyBNIHwgUENSRTJfRklSU1RMSU5FLCBQQ1JFMl9ORVdMSU5FX0FOWSwgMCwgMCB8IEZfTk9NQVRDSCwgIiMiLCAiXHg4NSMiIH0sCisJeyBNVSB8IFBDUkUyX0ZJUlNUTElORSwgUENSRTJfTkVXTElORV9BTlksIDAsIDAgfCBGX05PTUFUQ0gsICJeIyIsICJceGUyXHg4MFx4YTgjIiB9LAorCXsgTVUgfCBQQ1JFMl9GSVJTVExJTkUsIFBDUkUyX05FV0xJTkVfQ1JMRiwgMCwgMCB8IEZfUFJPUEVSVFksICJcXHB7QW55fSIsICJcclxuYSIgfSwKKwl7IE1VIHwgUENSRTJfRklSU1RMSU5FLCBQQ1JFMl9ORVdMSU5FX0NSTEYsIDAsIDAsICIuIiwgIlxyIiB9LAorCXsgTVUgfCBQQ1JFMl9GSVJTVExJTkUsIFBDUkUyX05FV0xJTkVfQ1JMRiwgMCwgMCwgImEiLCAiXHJhIiB9LAorCXsgTVUgfCBQQ1JFMl9GSVJTVExJTkUsIFBDUkUyX05FV0xJTkVfQ1JMRiwgMCwgMCB8IEZfTk9NQVRDSCwgImJhIiwgImJiYlxyXG5iYSIgfSwKKwl7IE1VIHwgUENSRTJfRklSU1RMSU5FLCBQQ1JFMl9ORVdMSU5FX0NSTEYsIDAsIDAgfCBGX05PTUFUQ0ggfCBGX1BST1BFUlRZLCAiXFxwe0FueX17NH18YSIsICJcclxuYSIgfSwKKwl7IE1VIHwgUENSRTJfRklSU1RMSU5FLCBQQ1JFMl9ORVdMSU5FX0NSTEYsIDAsIDEsICIuIiwgIlxyXG4iIH0sCisJeyBQQ1JFMl9GSVJTVExJTkUgfCBQQ1JFMl9ET1RBTEwsIFBDUkUyX05FV0xJTkVfTEYsIDAsIDAgfCBGX05PTUFUQ0gsICJhYi4iLCAiYWIiIH0sCisJeyBNVSB8IFBDUkUyX0ZJUlNUTElORSwgQSwgMCwgMSB8IEZfTk9NQVRDSCwgIl5bYS1kMC05XSIsICJcbnh4XG5kIiB9LAorCXsgUENSRTJfRklSU1RMSU5FIHwgUENSRTJfRE9UQUxMLCBQQ1JFMl9ORVdMSU5FX0FOWSwgMCwgMCwgIi4uLi5hIiwgIjAxMlxuMGEiIH0sCisKKwkvKiBSZWN1cnNlLiAqLworCXsgTVUsIEEsIDAsIDAsICIoYSkoPzEpIiwgImFhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKGEpKSg/MSkiLCAiYWEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihifGEpKD8xKSIsICJhYSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGJ8KGEpKSg/MSkiLCAiYWEiIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIigoYSkoYikoPzphKikpKD8xKSIsICJhYmEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIigoYSkoYikoPzphKikpKD8xKSIsICJhYmFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKGErKWMoPzIpKWIoPzEpIiwgImFhY2FhYmFjYSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKCg/MilifChhKSl7Mn0oPzEpIiwgImFhYmFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzEpKGEpKisoPzIpKGIoPzEpKSIsICJhYWJhYmEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/MSkoKChhKCpBQ0NFUFQpKSliKSIsICJheGFhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPzEpKD8oREVGSU5FKSAoKChhYygqQUNDRVBUKSkpYikgKSIsICJha2FhYyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGErKWIoPzEpYlxcMSIsICJhYmFhYWJhYWFhYSIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKD8oREVGSU5FKShhYXxhKSkoPzEpYWIiLCAiYWFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPyhERUZJTkUpKGFcXEtiKSkoPzEpK2FiYWJjIiwgImFiYWJhYnhhYmFiYWJjIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYVxcS2IpKD8xKSthYmFiYyIsICJhYmFiYWJ4YWJhYmFiYWJjIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoYVxcS2IpKD8xKSthYmFiYyIsICJhYmFiYWJ4YWJhYmFiYWJ4YyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiYnw8KD9SKSo+IiwgIjw8Yj4iIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhXFxLKXswfSg/Oig/MSlifGFjKSIsICJhYyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8oREVGSU5FKShhKD8yKXxiKShiKD8xKXwoYSkpKSg/Oig/MSl8KD8yKSltIiwgImFiYWJhYmFibmFiYWJhYmFiYWFtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYSkoKD8oUilhfGIpKSg/MikiLCAiYWFiYmFiYWEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhKSgoPyhSMilhfGIpKSg/MikiLCAiYWFiYmFiYWEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhKSgoPyhSMSlhfGIpKSg/MikiLCAiYWJhYmJhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPyhSMClhYXxiYig/UikpIiwgImFiYmEgYWFiYiBiYmFhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKD8oUikoPzphYWFhfGEpfCg/OihhYWFhKXwoYSkpKSspKD8xKSQiLCAiYWFhYWFhYWFhYSBhYWFhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoP1A8TmFtZT5hKD8oUiZOYW1lKWF8YikpKD8xKSIsICJhYWIgYWJiIGFiYWEiIH0sCisJeyBNVSwgQSwgMCwgMCwgIigoPyhSKWF8KD8xKSl7M30pIiwgIlhhYWFhYWFhYWFYIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKD86KD8oUilhfCg/MSkpKXszfSkiLCAiWGFhYWFhYWFhYVgiIH0sCisJeyBNVSwgQSwgMCwgMCwgIigoPyhSKWF8KD8xKSl7MSwzfSlhYWFhYWEiLCAiYWFhYWFhYWFYYWFhYWFhYWFhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKD8oUilhfCg/MSkpezEsM30/KU0iLCAiYWFhTSIgfSwKKworCS8qIDE2IGJpdCBzcGVjaWZpYyB0ZXN0cy4gKi8KKwl7IENNLCBBLCAwLCAwIHwgRl9GT1JDRUNPTlYsICJceGMzXHhhMSIsICJceGMzXHg4MVx4YzNceGExIiB9LAorCXsgQ00sIEEsIDAsIDAgfCBGX0ZPUkNFQ09OViwgIlx4ZTFceGJkXHhiOCIsICJceGUxXHhiZlx4YjhceGUxXHhiZFx4YjgiIH0sCisJeyBDTSwgQSwgMCwgMCB8IEZfRk9SQ0VDT05WLCAiW1x4YzNceGExXSIsICJceGMzXHg4MVx4YzNceGExIiB9LAorCXsgQ00sIEEsIDAsIDAgfCBGX0ZPUkNFQ09OViwgIltceGUxXHhiZFx4YjhdIiwgIlx4ZTFceGJmXHhiOFx4ZTFceGJkXHhiOCIgfSwKKwl7IENNLCBBLCAwLCAwIHwgRl9GT1JDRUNPTlYsICJbYS1ceGVkXHhiMFx4ODBdIiwgIkEiIH0sCisJeyBDTSwgQSwgMCwgMCB8IEZfTk84IHwgRl9GT1JDRUNPTlYsICJbYS1cXHh7ZGMwMH1dIiwgIkIiIH0sCisJeyBDTSwgQSwgMCwgMCB8IEZfTk84IHwgRl9OT01BVENIIHwgRl9GT1JDRUNPTlYsICJbYi1cXHh7ZGMwMH1dIiwgImEiIH0sCisJeyBDTSwgQSwgMCwgMCB8IEZfTk84IHwgRl9GT1JDRUNPTlYsICJceGVkXHhhMFx4ODBcXHh7ZDgwMH1ceGVkXHhiMFx4ODBcXHh7ZGMwMH0iLCAiXHhlZFx4YTBceDgwXHhlZFx4YTBceDgwXHhlZFx4YjBceDgwXHhlZFx4YjBceDgwIiB9LAorCXsgQ00sIEEsIDAsIDAgfCBGX05POCB8IEZfRk9SQ0VDT05WLCAiW1x4ZWRceGEwXHg4MFxceHtkODAwfV17MSwyfT9bXHhlZFx4YjBceDgwXFx4e2RjMDB9XXsxLDJ9PyMiLCAiXHhlZFx4YTBceDgwXHhlZFx4YTBceDgwXHhlZFx4YjBceDgwXHhlZFx4YjBceDgwIyIgfSwKKwl7IENNLCBBLCAwLCAwIHwgRl9GT1JDRUNPTlYsICJbXHhlZFx4YTBceDgwXHhlZFx4YjBceDgwI117MCwzfSg/PD1ceGVkXHhiMFx4ODAuKSIsICJceGVkXHhhMFx4ODAjXHhlZFx4YTBceDgwIyNceGVkXHhiMFx4ODBceGVkXHhhMFx4ODAiIH0sCisJeyBDTSwgQSwgMCwgMCB8IEZfRk9SQ0VDT05WLCAiW1x4ZWRceGEwXHg4MC1ceGVkXHhiM1x4YmZdIiwgIlx4ZWRceDlmXHhiZlx4ZWRceGEwXHg4MyIgfSwKKwl7IENNLCBBLCAwLCAwIHwgRl9GT1JDRUNPTlYsICJbXHhlZFx4YTBceDgwLVx4ZWRceGIzXHhiZl0iLCAiXHhlZFx4YjRceDgwXHhlZFx4YjNceGIwIiB9LAorCXsgQ00sIEEsIDAsIDAgfCBGX05POCB8IEZfRk9SQ0VDT05WLCAiW1xceHtkODAwfS1cXHh7ZGNmZn1dIiwgIlx4ZWRceDlmXHhiZlx4ZWRceGEwXHg4MyIgfSwKKwl7IENNLCBBLCAwLCAwIHwgRl9OTzggfCBGX0ZPUkNFQ09OViwgIltcXHh7ZDgwMH0tXFx4e2RjZmZ9XSIsICJceGVkXHhiNFx4ODBceGVkXHhiM1x4YjAiIH0sCisJeyBDTSwgQSwgMCwgMCB8IEZfRk9SQ0VDT05WLCAiW1x4ZWRceGEwXHg4MC1ceGVmXHhiZlx4YmZdK1tceDEtXHhlZFx4YjBceDgwXSsjIiwgIlx4ZWRceGEwXHg4NVx4YzNceDgxXHhlZFx4YTBceDg1XHhlZlx4YmZceGIwXHhjMlx4ODVceGVkXHhhOVx4ODkjIiB9LAorCXsgQ00sIEEsIDAsIDAgfCBGX0ZPUkNFQ09OViwgIltceGVkXHhhMFx4ODBdW1x4ZWRceGIwXHg4MF17Mix9IiwgIlx4ZWRceGEwXHg4MFx4ZWRceGIwXHg4MFx4ZWRceGEwXHg4MFx4ZWRceGIwXHg4MFx4ZWRceGIwXHg4MFx4ZWRceGIwXHg4MCIgfSwKKwl7IE0sIEEsIDAsIDAgfCBGX0ZPUkNFQ09OViwgIlteXHhlZFx4YjBceDgwXXszLH0/IiwgIiMjXHhlZFx4YjBceDgwI1x4ZWRceGIwXHg4MCNceGMzXHg4OSNceGVkXHhiMFx4ODAiIH0sCisJeyBNLCBBLCAwLCAwIHwgRl9OTzggfCBGX0ZPUkNFQ09OViwgIlteXFx4e2RjMDB9XXszLH0/IiwgIiMjXHhlZFx4YjBceDgwI1x4ZWRceGIwXHg4MCNceGMzXHg4OSNceGVkXHhiMFx4ODAiIH0sCisJeyBDTSwgQSwgMCwgMCB8IEZfRk9SQ0VDT05WLCAiLlxcQi4iLCAiXHhlZFx4YTBceDgwXHhlZFx4YjBceDgwIiB9LAorCXsgQ00sIEEsIDAsIDAgfCBGX0ZPUkNFQ09OViwgIlxcRCsoPzpcXGQrfC4pXFxTKyg/Olxccyt8LilcXFcrKD86XFx3K3wuKVx4ZWRceGEwXHg4MFx4ZWRceGEwXHg4MCIsICJceGVkXHhhMFx4ODBceGVkXHhhMFx4ODBceGVkXHhhMFx4ODBceGVkXHhhMFx4ODBceGVkXHhhMFx4ODBceGVkXHhhMFx4ODBceGVkXHhhMFx4ODBceGVkXHhhMFx4ODAiIH0sCisJeyBDTSwgQSwgMCwgMCB8IEZfRk9SQ0VDT05WLCAiXFxkKlxccypcXHcqXHhlZFx4YTBceDgwXHhlZFx4YTBceDgwIiwgIlx4ZWRceGEwXHg4MFx4ZWRceGEwXHg4MCIgfSwKKwl7IENNLCBBLCAwLCAwIHwgRl9GT1JDRUNPTlYgfCBGX05PTUFUQ0gsICJcXGQqP1xcRCo/XFxzKj9cXFMqP1xcdyo/XFxXKj8jIyIsICJceGVkXHhhMFx4ODBceGVkXHhhMFx4ODBceGVkXHhhMFx4ODBceGVkXHhhMFx4ODAjIiB9LAorCXsgQ00gfCBQQ1JFMl9FWFRFTkRFRCwgQSwgMCwgMCB8IEZfRk9SQ0VDT05WLCAiXHhlZFx4YTBceDgwIFx4ZWRceGIwXHg4MCAhIiwgIlx4ZWRceGEwXHg4MFx4ZWRceGIwXHg4MCEiIH0sCisJeyBDTSwgQSwgMCwgMCB8IEZfRk9SQ0VDT05WLCAiXHhlZFx4YTBceDgwKyNbXiNdK1x4ZWRceGEwXHg4MCIsICJceGVkXHhhMFx4ODAjYVx4ZWRceGEwXHg4MCIgfSwKKwl7IENNLCBBLCAwLCAwIHwgRl9GT1JDRUNPTlYsICIoXHhlZFx4YTBceDgwKykjXFwxIiwgIlx4ZWRceGEwXHg4MFx4ZWRceGEwXHg4MCNceGVkXHhhMFx4ODBceGVkXHhhMFx4ODAiIH0sCisJeyBNLCBQQ1JFMl9ORVdMSU5FX0FOWSwgMCwgMCB8IEZfTk84IHwgRl9GT1JDRUNPTlYsICJeLSIsICJhLS1ceGUyXHg4MFx4YTgtLSIgfSwKKwl7IDAsIEJTUihQQ1JFMl9CU1JfVU5JQ09ERSksIDAsIDAgfCBGX05POCB8IEZfRk9SQ0VDT05WLCAiXFxSIiwgImFiXHhlMlx4ODBceGE4IiB9LAorCXsgMCwgMCwgMCwgMCB8IEZfTk84IHwgRl9GT1JDRUNPTlYsICJcXHYiLCAiYWJceGUyXHg4MFx4YTkiIH0sCisJeyAwLCAwLCAwLCAwIHwgRl9OTzggfCBGX0ZPUkNFQ09OViwgIlxcaCIsICJhYlx4ZTFceGEwXHg4ZSIgfSwKKwl7IDAsIDAsIDAsIDAgfCBGX05POCB8IEZfRk9SQ0VDT05WLCAiXFx2Kz9cXFYrPyMiLCAiXHhlMlx4ODBceGE5XHhlMlx4ODBceGE5XHhlZlx4YmZceGJmXHhlZlx4YmZceGJmIyIgfSwKKwl7IDAsIDAsIDAsIDAgfCBGX05POCB8IEZfRk9SQ0VDT05WLCAiXFxoKz9cXEgrPyMiLCAiXHhlMVx4YTBceDhlXHhlMVx4YTBceDhlXHhlZlx4YmZceGJmXHhlZlx4YmZceGJmIyIgfSwKKworCS8qIFBhcnRpYWwgbWF0Y2hpbmcuICovCisJeyBNVSwgQSwgUENSRTJfUEFSVElBTF9TT0ZULCAwLCAiYWIiLCAiYSIgfSwKKwl7IE1VLCBBLCBQQ1JFMl9QQVJUSUFMX1NPRlQsIDAsICJhYnxhIiwgImEiIH0sCisJeyBNVSwgQSwgUENSRTJfUEFSVElBTF9IQVJELCAwLCAiYWJ8YSIsICJhIiB9LAorCXsgTVUsIEEsIFBDUkUyX1BBUlRJQUxfU09GVCwgMCwgIlxcYiMiLCAiYSIgfSwKKwl7IE1VLCBBLCBQQ1JFMl9QQVJUSUFMX1NPRlQsIDAsICIoPzw9YSliIiwgImEiIH0sCisJeyBNVSwgQSwgUENSRTJfUEFSVElBTF9TT0ZULCAwLCAiYWJjfCg/PD14eGEpYmMiLCAieHhhYiIgfSwKKwl7IE1VLCBBLCBQQ1JFMl9QQVJUSUFMX1NPRlQsIDAsICJhXFxCIiwgImEiIH0sCisJeyBNVSwgQSwgUENSRTJfUEFSVElBTF9IQVJELCAwLCAiYVxcYiIsICJhIiB9LAorCisJLyogKCpNQVJLKSB2ZXJiLiAqLworCXsgTVUsIEEsIDAsIDAsICJhKCpNQVJLOmFhKWEiLCAiYWJhYmFhIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJhKCo6YWEpYSIsICJhYmFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICJhKCo6YWEpKGIoKjpiYilifGJjKSIsICJhYmMiIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgImEoKjoxKXh8YigqOjIpeSIsICJhYmMiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PmEoKjphYSkpYnxhYyIsICJhYyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8oREVGSU5FKShhKCo6YWEpKSkoPzEpIiwgImEiIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIig/KERFRklORSkoKGEpKCo6YWEpKSkoPzEpYiIsICJhYSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8oREVGSU5FKShhKCo6YWEpKSlhKD8xKWJ8YWFjIiwgImFhYyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKGEoKjphYSkpezB9KD86Yig/MSlifGMpK2MiLCAiYmFiYmFiIGNjIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYSgqOmFhKSl7MH0oPzpiKD8xKWIpKyIsICJiYWJiYSIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENIIHwgRl9TVFVEWSwgIihhKCo6YWEpKXswfSg/OmIoPzEpYikrIiwgImJhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYVxcSygqOmFhKSl7MH0oPzpiKD8xKWJ8YykrYyIsICJiYWJiYWIgY2MiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhXFxLKCo6YWEpKXswfSg/OmIoPzEpYikrIiwgImJhYmJhIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0ggfCBGX1NUVURZLCAiKGFcXEsoKjphYSkpezB9KD86Yig/MSliKSsiLCAiYmEiIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCB8IEZfU1RVRFksICIoKjptYXJrKW0iLCAiYSIgfSwKKworCS8qICgqQ09NTUlUKSB2ZXJiLiAqLworCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJhKCpDT01NSVQpYiIsICJhYyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiYWEoKkNPTU1JVCliIiwgInhheGFhYiIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiYSgqQ09NTUlUKSgqOm1zZylifGFjIiwgImFjIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoYSgqQ09NTUlUKWIpKysiLCAiYWJhYyIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKChhKSgqQ09NTUlUKWIpKysiLCAiYWJhYyIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKD89YSgqQ09NTUlUKWIpYWJ8YWQiLCAiYWQiIH0sCisKKwkvKiAoKlBSVU5FKSB2ZXJiLiAqLworCXsgTVUsIEEsIDAsIDAsICJhYVxcSygqUFJVTkUpYiIsICJhYWFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICJhYSgqUFJVTkU6YmIpYnxhIiwgImFhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYSkoYSkoKlBSVU5FKWJ8KGEpIiwgImFhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoKlBSVU5FKWJ8KGEpIiwgImFhYWFhYWFhIiB9LAorCXsgTVUsIEEsIFBDUkUyX1BBUlRJQUxfU09GVCwgMCwgImEoKlBSVU5FKWF8IiwgImEiIH0sCisJeyBNVSwgQSwgUENSRTJfUEFSVElBTF9TT0ZULCAwLCAiYSgqUFJVTkUpYXxtIiwgImEiIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIig/PWEoKlBSVU5FKWIpYWJ8YWQiLCAiYWQiIH0sCisJeyBNVSwgQSwgMCwgMCwgImEoKkNPTU1JVCkoKlBSVU5FKWR8YmMiLCAiYWJjIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPz1hKCpDT01NSVQpYilhKCpQUlVORSljfGJjIiwgImFiYyIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKCpDT01NSVQpKD89YSgqQ09NTUlUKWIpYSgqUFJVTkUpY3xiYyIsICJhYmMiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PShhKSgqQ09NTUlUKWIpYSgqUFJVTkUpY3xiYyIsICJhYmMiIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIigqQ09NTUlUKSg/PShhKSgqQ09NTUlUKWIpYSgqUFJVTkUpY3xiYyIsICJhYmMiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhKCpDT01NSVQpYil7MH1hKD8xKSgqUFJVTkUpY3xiYyIsICJhYmMiIH0sCisJeyBNVSwgQSwgMCwgMCB8IEZfTk9NQVRDSCwgIihhKCpDT01NSVQpYil7MH1hKCpDT01NSVQpKD8xKSgqUFJVTkUpY3xiYyIsICJhYmMiIH0sCisJeyBNVSwgQSwgMCwgMCwgIihhKCpDT01NSVQpYikrKygqUFJVTkUpZHxjIiwgImFiYWJjIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoKkNPTU1JVCkoYSgqQ09NTUlUKWIpKysoKlBSVU5FKWR8YyIsICJhYmFiYyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKChhKSgqQ09NTUlUKWIpKysoKlBSVU5FKWR8YyIsICJhYmFiYyIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKCpDT01NSVQpKChhKSgqQ09NTUlUKWIpKysoKlBSVU5FKWR8YyIsICJhYmFiYyIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8+YSgqQ09NTUlUKWIpKmFiYWIoKlBSVU5FKWR8YmEiLCAiYWJhYmFiIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoKkNPTU1JVCkoPz5hKCpDT01NSVQpYikqYWJhYigqUFJVTkUpZHxiYSIsICJhYmFiYWIiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PmEoKkNPTU1JVCliKSthYmFiKCpQUlVORSlkfGJhIiwgImFiYWJhYiIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKCpDT01NSVQpKD8+YSgqQ09NTUlUKWIpK2FiYWIoKlBSVU5FKWR8YmEiLCAiYWJhYmFiIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPz5hKCpDT01NSVQpYik/YWIoKlBSVU5FKWR8YmEiLCAiYWJhIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoKkNPTU1JVCkoPz5hKCpDT01NSVQpYik/YWIoKlBSVU5FKWR8YmEiLCAiYWJhIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPz5hKCpDT01NSVQpYikqP24oKlBSVU5FKWR8YmEiLCAiYWJhYmFibiIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKCpDT01NSVQpKD8+YSgqQ09NTUlUKWIpKj9uKCpQUlVORSlkfGJhIiwgImFiYWJhYm4iIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/PmEoKkNPTU1JVCliKSs/bigqUFJVTkUpZHxiYSIsICJhYmFiYWJuIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoKkNPTU1JVCkoPz5hKCpDT01NSVQpYikrP24oKlBSVU5FKWR8YmEiLCAiYWJhYmFibiIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8+YSgqQ09NTUlUKWIpPz9uKCpQUlVORSlkfGJuIiwgImFibiIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKCpDT01NSVQpKD8+YSgqQ09NTUlUKWIpPz9uKCpQUlVORSlkfGJuIiwgImFibiIgfSwKKworCS8qICgqU0tJUCkgdmVyYi4gKi8KKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKD89YSgqU0tJUCliKWFifGFkIiwgImFkIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoXFx3KygqU0tJUCkjKSIsICJhYmNkLHh5eiMsIiB9LAorCXsgTVUsIEEsIDAsIDAsICJcXHcrKCpTS0lQKSN8bW0iLCAiYWJjZCx4eXojLCIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiYisoPzw9KCpTS0lQKSNjKXxiKyIsICIjYmJiIiB9LAorCisJLyogKCpUSEVOKSB2ZXJiLiAqLworCXsgTVUsIEEsIDAsIDAsICIoKD86YSgqVEhFTil8YWFiKSgqVEhFTiljfGErKSttIiwgImFhYmNhYWJjYWFiY2FhYmNuYWNtIiB9LAorCXsgTVUsIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoKD86YSgqVEhFTil8YWFiKSgqVEhFTiljfGErKSttIiwgImFhYmNtIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKD86YSgqVEhFTil8YWFiKWN8YSspK20iLCAiYWFiY2FhYmNubWFhYmNhYWJjbSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKCg/OmF8YWFiKSgqVEhFTiljfGErKSttIiwgImFhbSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKCg/OmEoKkNPTU1JVCl8YWFiKSgqVEhFTiljfGErKSttIiwgImFhbSIgfSwKKwl7IE1VLCBBLCAwLCAwLCAiKD8oPz1hKCpUSEVOKWIpYWJ8YWQpIiwgImFkIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoPyg/IWEoKlRIRU4pYilhZHxhZGQpIiwgImFkZCIgfSwKKwl7IE1VLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKD8oPz1hKWEoKlRIRU4pYnxhZCkiLCAiYWQiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/ISg/KD89YSlhYnxiKCpUSEVOKWQpKWJufGJubiIsICJibm4iIH0sCisKKwkvKiBEZWVwIHJlY3Vyc2lvbi4gKi8KKwl7IE1VLCBBLCAwLCAwLCAiKCgoKD86KD86KD86XFx3KSspPykqfCg/PlxcdykrPykrfCg/Plxcdyk/XD8pKik/XFxzIiwgImFhYWFhKyAiIH0sCisJeyBNVSwgQSwgMCwgMCwgIig/OigoPzooPzooPzpcXHcqPykrKT8/fCg/Plxcdyk/fFxcdyorKSopKykrP1xccyIsICJhYSsgIiB9LAorCXsgTVUsIEEsIDAsIDAsICIoKGE/KSspK2IiLCAiYWFhYWFhYWFhYWFhIGIiIH0sCisKKwkvKiBEZWVwIHJlY3Vyc2lvbjogU3RhY2sgbGltaXQgcmVhY2hlZC4gKi8KKwl7IE0sIEEsIDAsIDAgfCBGX05PTUFUQ0gsICJhP2E/YT9hP2E/YT9hP2E/YT9hP2E/YT9hP2E/YT9hP2E/YT9hP2E/YT9hP2E/YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiLCAiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEiIH0sCisJeyBNLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKD86YSspK2IiLCAiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIGIiIH0sCisJeyBNLCBBLCAwLCAwIHwgRl9OT01BVENILCAiKD86YSs/KSs/YiIsICJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYiIgfSwKKwl7IE0sIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoPzphKikqYiIsICJhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgYiIgfSwKKwl7IE0sIEEsIDAsIDAgfCBGX05PTUFUQ0gsICIoPzphKj8pKj9iIiwgImFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSBiIiB9LAorCisJeyAwLCAwLCAwLCAwLCBOVUxMLCBOVUxMIH0KK307CisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKK3N0YXRpYyBwY3JlMl9qaXRfc3RhY2tfOCogY2FsbGJhY2s4KHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gKHBjcmUyX2ppdF9zdGFja184ICopYXJnOworfQorI2VuZGlmCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CitzdGF0aWMgcGNyZTJfaml0X3N0YWNrXzE2KiBjYWxsYmFjazE2KHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gKHBjcmUyX2ppdF9zdGFja18xNiAqKWFyZzsKK30KKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorc3RhdGljIHBjcmUyX2ppdF9zdGFja18zMiogY2FsbGJhY2szMih2b2lkICphcmcpCit7CisJcmV0dXJuIChwY3JlMl9qaXRfc3RhY2tfMzIgKilhcmc7Cit9CisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorc3RhdGljIHBjcmUyX2ppdF9zdGFja184ICpzdGFjazg7CisKK3N0YXRpYyBwY3JlMl9qaXRfc3RhY2tfOCAqZ2V0c3RhY2s4KHZvaWQpCit7CisJaWYgKCFzdGFjazgpCisJCXN0YWNrOCA9IHBjcmUyX2ppdF9zdGFja19jcmVhdGVfOCgxLCAxMDI0ICogMTAyNCwgTlVMTCk7CisJcmV0dXJuIHN0YWNrODsKK30KKworc3RhdGljIHZvaWQgc2V0c3RhY2s4KHBjcmUyX21hdGNoX2NvbnRleHRfOCAqbWNvbnRleHQpCit7CisJaWYgKCFtY29udGV4dCkgeworCQlpZiAoc3RhY2s4KQorCQkJcGNyZTJfaml0X3N0YWNrX2ZyZWVfOChzdGFjazgpOworCQlzdGFjazggPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJcGNyZTJfaml0X3N0YWNrX2Fzc2lnbl84KG1jb250ZXh0LCBjYWxsYmFjazgsIGdldHN0YWNrOCgpKTsKK30KKyNlbmRpZiAvKiBTVVBQT1JUX1BDUkUyXzggKi8KKworI2lmZGVmIFNVUFBPUlRfUENSRTJfMTYKK3N0YXRpYyBwY3JlMl9qaXRfc3RhY2tfMTYgKnN0YWNrMTY7CisKK3N0YXRpYyBwY3JlMl9qaXRfc3RhY2tfMTYgKmdldHN0YWNrMTYodm9pZCkKK3sKKwlpZiAoIXN0YWNrMTYpCisJCXN0YWNrMTYgPSBwY3JlMl9qaXRfc3RhY2tfY3JlYXRlXzE2KDEsIDEwMjQgKiAxMDI0LCBOVUxMKTsKKwlyZXR1cm4gc3RhY2sxNjsKK30KKworc3RhdGljIHZvaWQgc2V0c3RhY2sxNihwY3JlMl9tYXRjaF9jb250ZXh0XzE2ICptY29udGV4dCkKK3sKKwlpZiAoIW1jb250ZXh0KSB7CisJCWlmIChzdGFjazE2KQorCQkJcGNyZTJfaml0X3N0YWNrX2ZyZWVfMTYoc3RhY2sxNik7CisJCXN0YWNrMTYgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJcGNyZTJfaml0X3N0YWNrX2Fzc2lnbl8xNihtY29udGV4dCwgY2FsbGJhY2sxNiwgZ2V0c3RhY2sxNigpKTsKK30KKyNlbmRpZiAvKiBTVVBQT1JUX1BDUkUyXzE2ICovCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzMyCitzdGF0aWMgcGNyZTJfaml0X3N0YWNrXzMyICpzdGFjazMyOworCitzdGF0aWMgcGNyZTJfaml0X3N0YWNrXzMyICpnZXRzdGFjazMyKHZvaWQpCit7CisJaWYgKCFzdGFjazMyKQorCQlzdGFjazMyID0gcGNyZTJfaml0X3N0YWNrX2NyZWF0ZV8zMigxLCAxMDI0ICogMTAyNCwgTlVMTCk7CisJcmV0dXJuIHN0YWNrMzI7Cit9CisKK3N0YXRpYyB2b2lkIHNldHN0YWNrMzIocGNyZTJfbWF0Y2hfY29udGV4dF8zMiAqbWNvbnRleHQpCit7CisJaWYgKCFtY29udGV4dCkgeworCQlpZiAoc3RhY2szMikKKwkJCXBjcmUyX2ppdF9zdGFja19mcmVlXzMyKHN0YWNrMzIpOworCQlzdGFjazMyID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCXBjcmUyX2ppdF9zdGFja19hc3NpZ25fMzIobWNvbnRleHQsIGNhbGxiYWNrMzIsIGdldHN0YWNrMzIoKSk7Cit9CisjZW5kaWYgLyogU1VQUE9SVF9QQ1JFMl8zMiAqLworCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorCitzdGF0aWMgaW50IGNvbnZlcnRfdXRmOF90b191dGYxNihQQ1JFMl9TUFRSOCBpbnB1dCwgUENSRTJfVUNIQVIxNiAqb3V0cHV0LCBpbnQgKm9mZnNldG1hcCwgaW50IG1heF9sZW5ndGgpCit7CisJUENSRTJfU1BUUjggaXB0ciA9IGlucHV0OworCVBDUkUyX1VDSEFSMTYgKm9wdHIgPSBvdXRwdXQ7CisJdW5zaWduZWQgaW50IGM7CisKKwlpZiAobWF4X2xlbmd0aCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgqaXB0ciAmJiBtYXhfbGVuZ3RoID4gMSkgeworCQljID0gMDsKKwkJaWYgKG9mZnNldG1hcCkKKwkJCSpvZmZzZXRtYXArKyA9IChpbnQpKGlwdHIgLSAodW5zaWduZWQgY2hhciopaW5wdXQpOworCisJCWlmICgqaXB0ciA8IDB4YzApCisJCQljID0gKmlwdHIrKzsKKwkJZWxzZSBpZiAoISgqaXB0ciAmIDB4MjApKSB7CisJCQljID0gKChpcHRyWzBdICYgMHgxZikgPDwgNikgfCAoaXB0clsxXSAmIDB4M2YpOworCQkJaXB0ciArPSAyOworCQl9IGVsc2UgaWYgKCEoKmlwdHIgJiAweDEwKSkgeworCQkJYyA9ICgoaXB0clswXSAmIDB4MGYpIDw8IDEyKSB8ICgoaXB0clsxXSAmIDB4M2YpIDw8IDYpIHwgKGlwdHJbMl0gJiAweDNmKTsKKwkJCWlwdHIgKz0gMzsKKwkJfSBlbHNlIGlmICghKCppcHRyICYgMHgwOCkpIHsKKwkJCWMgPSAoKGlwdHJbMF0gJiAweDA3KSA8PCAxOCkgfCAoKGlwdHJbMV0gJiAweDNmKSA8PCAxMikgfCAoKGlwdHJbMl0gJiAweDNmKSA8PCA2KSB8IChpcHRyWzNdICYgMHgzZik7CisJCQlpcHRyICs9IDQ7CisJCX0KKworCQlpZiAoYyA8IDY1NTM2KSB7CisJCQkqb3B0cisrID0gYzsKKwkJCW1heF9sZW5ndGgtLTsKKwkJfSBlbHNlIGlmIChtYXhfbGVuZ3RoIDw9IDIpIHsKKwkJCSpvcHRyID0gJ1wwJzsKKwkJCXJldHVybiAoaW50KShvcHRyIC0gb3V0cHV0KTsKKwkJfSBlbHNlIHsKKwkJCWMgLT0gMHgxMDAwMDsKKwkJCSpvcHRyKysgPSAweGQ4MDAgfCAoKGMgPj4gMTApICYgMHgzZmYpOworCQkJKm9wdHIrKyA9IDB4ZGMwMCB8IChjICYgMHgzZmYpOworCQkJbWF4X2xlbmd0aCAtPSAyOworCQkJaWYgKG9mZnNldG1hcCkKKwkJCQlvZmZzZXRtYXArKzsKKwkJfQorCX0KKwlpZiAob2Zmc2V0bWFwKQorCQkqb2Zmc2V0bWFwID0gKGludCkoaXB0ciAtICh1bnNpZ25lZCBjaGFyKilpbnB1dCk7CisJKm9wdHIgPSAnXDAnOworCXJldHVybiAoaW50KShvcHRyIC0gb3V0cHV0KTsKK30KKworc3RhdGljIGludCBjb3B5X2NoYXI4X3RvX2NoYXIxNihQQ1JFMl9TUFRSOCBpbnB1dCwgUENSRTJfVUNIQVIxNiAqb3V0cHV0LCBpbnQgbWF4X2xlbmd0aCkKK3sKKwlQQ1JFMl9TUFRSOCBpcHRyID0gaW5wdXQ7CisJUENSRTJfVUNIQVIxNiAqb3B0ciA9IG91dHB1dDsKKworCWlmIChtYXhfbGVuZ3RoID09IDApCisJCXJldHVybiAwOworCisJd2hpbGUgKCppcHRyICYmIG1heF9sZW5ndGggPiAxKSB7CisJCSpvcHRyKysgPSAqaXB0cisrOworCQltYXhfbGVuZ3RoLS07CisJfQorCSpvcHRyID0gJ1wwJzsKKwlyZXR1cm4gKGludCkob3B0ciAtIG91dHB1dCk7Cit9CisKKyNkZWZpbmUgUkVHVEVTVF9NQVhfTEVOR1RIMTYgNDA5Ngorc3RhdGljIFBDUkUyX1VDSEFSMTYgcmVndGVzdF9idWYxNltSRUdURVNUX01BWF9MRU5HVEgxNl07CitzdGF0aWMgaW50IHJlZ3Rlc3Rfb2Zmc2V0bWFwMTZbUkVHVEVTVF9NQVhfTEVOR1RIMTZdOworCisjZW5kaWYgLyogU1VQUE9SVF9QQ1JFMl8xNiAqLworCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorCitzdGF0aWMgaW50IGNvbnZlcnRfdXRmOF90b191dGYzMihQQ1JFMl9TUFRSOCBpbnB1dCwgUENSRTJfVUNIQVIzMiAqb3V0cHV0LCBpbnQgKm9mZnNldG1hcCwgaW50IG1heF9sZW5ndGgpCit7CisJUENSRTJfU1BUUjggaXB0ciA9IGlucHV0OworCVBDUkUyX1VDSEFSMzIgKm9wdHIgPSBvdXRwdXQ7CisJdW5zaWduZWQgaW50IGM7CisKKwlpZiAobWF4X2xlbmd0aCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgqaXB0ciAmJiBtYXhfbGVuZ3RoID4gMSkgeworCQljID0gMDsKKwkJaWYgKG9mZnNldG1hcCkKKwkJCSpvZmZzZXRtYXArKyA9IChpbnQpKGlwdHIgLSAodW5zaWduZWQgY2hhciopaW5wdXQpOworCisJCWlmICgqaXB0ciA8IDB4YzApCisJCQljID0gKmlwdHIrKzsKKwkJZWxzZSBpZiAoISgqaXB0ciAmIDB4MjApKSB7CisJCQljID0gKChpcHRyWzBdICYgMHgxZikgPDwgNikgfCAoaXB0clsxXSAmIDB4M2YpOworCQkJaXB0ciArPSAyOworCQl9IGVsc2UgaWYgKCEoKmlwdHIgJiAweDEwKSkgeworCQkJYyA9ICgoaXB0clswXSAmIDB4MGYpIDw8IDEyKSB8ICgoaXB0clsxXSAmIDB4M2YpIDw8IDYpIHwgKGlwdHJbMl0gJiAweDNmKTsKKwkJCWlwdHIgKz0gMzsKKwkJfSBlbHNlIGlmICghKCppcHRyICYgMHgwOCkpIHsKKwkJCWMgPSAoKGlwdHJbMF0gJiAweDA3KSA8PCAxOCkgfCAoKGlwdHJbMV0gJiAweDNmKSA8PCAxMikgfCAoKGlwdHJbMl0gJiAweDNmKSA8PCA2KSB8IChpcHRyWzNdICYgMHgzZik7CisJCQlpcHRyICs9IDQ7CisJCX0KKworCQkqb3B0cisrID0gYzsKKwkJbWF4X2xlbmd0aC0tOworCX0KKwlpZiAob2Zmc2V0bWFwKQorCQkqb2Zmc2V0bWFwID0gKGludCkoaXB0ciAtICh1bnNpZ25lZCBjaGFyKilpbnB1dCk7CisJKm9wdHIgPSAwOworCXJldHVybiAoaW50KShvcHRyIC0gb3V0cHV0KTsKK30KKworc3RhdGljIGludCBjb3B5X2NoYXI4X3RvX2NoYXIzMihQQ1JFMl9TUFRSOCBpbnB1dCwgUENSRTJfVUNIQVIzMiAqb3V0cHV0LCBpbnQgbWF4X2xlbmd0aCkKK3sKKwlQQ1JFMl9TUFRSOCBpcHRyID0gaW5wdXQ7CisJUENSRTJfVUNIQVIzMiAqb3B0ciA9IG91dHB1dDsKKworCWlmIChtYXhfbGVuZ3RoID09IDApCisJCXJldHVybiAwOworCisJd2hpbGUgKCppcHRyICYmIG1heF9sZW5ndGggPiAxKSB7CisJCSpvcHRyKysgPSAqaXB0cisrOworCQltYXhfbGVuZ3RoLS07CisJfQorCSpvcHRyID0gJ1wwJzsKKwlyZXR1cm4gKGludCkob3B0ciAtIG91dHB1dCk7Cit9CisKKyNkZWZpbmUgUkVHVEVTVF9NQVhfTEVOR1RIMzIgNDA5Ngorc3RhdGljIFBDUkUyX1VDSEFSMzIgcmVndGVzdF9idWYzMltSRUdURVNUX01BWF9MRU5HVEgzMl07CitzdGF0aWMgaW50IHJlZ3Rlc3Rfb2Zmc2V0bWFwMzJbUkVHVEVTVF9NQVhfTEVOR1RIMzJdOworCisjZW5kaWYgLyogU1VQUE9SVF9QQ1JFMl8zMiAqLworCitzdGF0aWMgaW50IGNoZWNrX2FzY2lpKGNvbnN0IGNoYXIgKmlucHV0KQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciA9ICh1bnNpZ25lZCBjaGFyICopaW5wdXQ7CisJd2hpbGUgKCpwdHIpIHsKKwkJaWYgKCpwdHIgPiAxMjcpCisJCQlyZXR1cm4gMDsKKwkJcHRyKys7CisJfQorCXJldHVybiAxOworfQorCisjZGVmaW5lIE9WRUNUT1JfU0laRSAxNQorCitzdGF0aWMgaW50IHJlZ3Jlc3Npb25fdGVzdHModm9pZCkKK3sKKwlzdHJ1Y3QgcmVncmVzc2lvbl90ZXN0X2Nhc2UgKmN1cnJlbnQgPSByZWdyZXNzaW9uX3Rlc3RfY2FzZXM7CisJaW50IGVycm9yOworCVBDUkUyX1NJWkUgZXJyX29mZnM7CisJaW50IGlzX3N1Y2Nlc3NmdWw7CisJaW50IGlzX2FzY2lpOworCWludCB0b3RhbCA9IDA7CisJaW50IHN1Y2Nlc3NmdWwgPSAwOworCWludCBzdWNjZXNzZnVsX3JvdyA9IDA7CisJaW50IGNvdW50ZXIgPSAwOworCWludCBqaXRfY29tcGlsZV9tb2RlOworCWludCB1dGYgPSAwOworCWludCBkaXNhYmxlZF9vcHRpb25zID0gMDsKKwlpbnQgaTsKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKKwlwY3JlMl9jb2RlXzggKnJlODsKKwlwY3JlMl9jb21waWxlX2NvbnRleHRfOCAqY2NvbnRleHQ4OworCXBjcmUyX21hdGNoX2RhdGFfOCAqbWRhdGE4XzE7CisJcGNyZTJfbWF0Y2hfZGF0YV84ICptZGF0YThfMjsKKwlwY3JlMl9tYXRjaF9jb250ZXh0XzggKm1jb250ZXh0ODsKKwlQQ1JFMl9TSVpFICpvdmVjdG9yOF8xID0gTlVMTDsKKwlQQ1JFMl9TSVpFICpvdmVjdG9yOF8yID0gTlVMTDsKKwlpbnQgcmV0dXJuX3ZhbHVlOFsyXTsKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMTYKKwlwY3JlMl9jb2RlXzE2ICpyZTE2OworCXBjcmUyX2NvbXBpbGVfY29udGV4dF8xNiAqY2NvbnRleHQxNjsKKwlwY3JlMl9tYXRjaF9kYXRhXzE2ICptZGF0YTE2XzE7CisJcGNyZTJfbWF0Y2hfZGF0YV8xNiAqbWRhdGExNl8yOworCXBjcmUyX21hdGNoX2NvbnRleHRfMTYgKm1jb250ZXh0MTY7CisJUENSRTJfU0laRSAqb3ZlY3RvcjE2XzEgPSBOVUxMOworCVBDUkUyX1NJWkUgKm92ZWN0b3IxNl8yID0gTlVMTDsKKwlpbnQgcmV0dXJuX3ZhbHVlMTZbMl07CisJaW50IGxlbmd0aDE2OworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorCXBjcmUyX2NvZGVfMzIgKnJlMzI7CisJcGNyZTJfY29tcGlsZV9jb250ZXh0XzMyICpjY29udGV4dDMyOworCXBjcmUyX21hdGNoX2RhdGFfMzIgKm1kYXRhMzJfMTsKKwlwY3JlMl9tYXRjaF9kYXRhXzMyICptZGF0YTMyXzI7CisJcGNyZTJfbWF0Y2hfY29udGV4dF8zMiAqbWNvbnRleHQzMjsKKwlQQ1JFMl9TSVpFICpvdmVjdG9yMzJfMSA9IE5VTEw7CisJUENSRTJfU0laRSAqb3ZlY3RvcjMyXzIgPSBOVUxMOworCWludCByZXR1cm5fdmFsdWUzMlsyXTsKKwlpbnQgbGVuZ3RoMzI7CisjZW5kaWYKKworI2lmIGRlZmluZWQgU1VQUE9SVF9QQ1JFMl84CisJUENSRTJfVUNIQVI4IGNwdV9pbmZvWzEyOF07CisjZWxpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMTYKKwlQQ1JFMl9VQ0hBUjE2IGNwdV9pbmZvWzEyOF07CisjZWxpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMzIKKwlQQ1JFMl9VQ0hBUjMyIGNwdV9pbmZvWzEyOF07CisjZW5kaWYKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVVRGICYmICgoZGVmaW5lZChTVVBQT1JUX1BDUkUyXzgpICsgZGVmaW5lZChTVVBQT1JUX1BDUkUyXzE2KSArIGRlZmluZWQoU1VQUE9SVF9QQ1JFMl8zMikpID49IDIpCisJaW50IHJldHVybl92YWx1ZTsKKyNlbmRpZgorCisJLyogVGhpcyB0ZXN0IGNvbXBhcmVzIHRoZSBiZWhhdmlvdXIgb2YgaW50ZXJwcmV0ZXIgYW5kIEpJVC4gQWx0aG91Z2ggZGlzYWJsaW5nCisJdXRmIG9yIHVjcCBtYXkgbWFrZSB0ZXN0cyBmYWlsLCBpZiB0aGUgcGNyZV9leGVjIHJlc3VsdCBpcyB0aGUgU0FNRSwgaXQgaXMKKwlzdGlsbCBjb25zaWRlcmVkIHN1Y2Nlc3NmdWwgZnJvbSBwY3JlX2ppdF90ZXN0IHBvaW50IG9mIHZpZXcuICovCisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfOAorCXBjcmUyX2NvbmZpZ184KFBDUkUyX0NPTkZJR19KSVRUQVJHRVQsICZjcHVfaW5mbyk7CisjZWxpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMTYKKwlwY3JlMl9jb25maWdfMTYoUENSRTJfQ09ORklHX0pJVFRBUkdFVCwgJmNwdV9pbmZvKTsKKyNlbGlmIGRlZmluZWQgU1VQUE9SVF9QQ1JFMl8zMgorCXBjcmUyX2NvbmZpZ18zMihQQ1JFMl9DT05GSUdfSklUVEFSR0VULCAmY3B1X2luZm8pOworI2VuZGlmCisKKwlwcmludGYoIlJ1bm5pbmcgSklUIHJlZ3Jlc3Npb24gdGVzdHNcbiIpOworCXByaW50ZigiICB0YXJnZXQgQ1BVIG9mIFNMSklUIGNvbXBpbGVyOiAiKTsKKwlmb3IgKGkgPSAwOyBjcHVfaW5mb1tpXTsgaSsrKQorCQlwcmludGYoIiVjIiwgKGNoYXIpKGNwdV9pbmZvW2ldKSk7CisJcHJpbnRmKCJcbiIpOworCisjaWYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzgKKwlwY3JlMl9jb25maWdfOChQQ1JFMl9DT05GSUdfVU5JQ09ERSwgJnV0Zik7CisjZWxpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMTYKKwlwY3JlMl9jb25maWdfMTYoUENSRTJfQ09ORklHX1VOSUNPREUsICZ1dGYpOworI2VsaWYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzMyCisJcGNyZTJfY29uZmlnXzMyKFBDUkUyX0NPTkZJR19VTklDT0RFLCAmdXRmKTsKKyNlbmRpZgorCisJaWYgKCF1dGYpCisJCWRpc2FibGVkX29wdGlvbnMgfD0gUENSRTJfVVRGOworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorCXByaW50ZigiICBpbiAgOCBiaXQgbW9kZSB3aXRoIFVURi04ICAlczpcbiIsIHV0ZiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorCXByaW50ZigiICBpbiAxNiBiaXQgbW9kZSB3aXRoIFVURi0xNiAlczpcbiIsIHV0ZiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorCXByaW50ZigiICBpbiAzMiBiaXQgbW9kZSB3aXRoIFVURi0zMiAlczpcbiIsIHV0ZiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworI2VuZGlmCisKKwl3aGlsZSAoY3VycmVudC0+cGF0dGVybikgeworCQkvKiBwcmludGYoIlxuUGF0dGVybjogJXMgOlxuIiwgY3VycmVudC0+cGF0dGVybik7ICovCisJCXRvdGFsKys7CisJCWlzX2FzY2lpID0gMDsKKwkJaWYgKCEoY3VycmVudC0+c3RhcnRfb2Zmc2V0ICYgRl9QUk9QRVJUWSkpCisJCQlpc19hc2NpaSA9IGNoZWNrX2FzY2lpKGN1cnJlbnQtPnBhdHRlcm4pICYmIGNoZWNrX2FzY2lpKGN1cnJlbnQtPmlucHV0KTsKKworCQlpZiAoY3VycmVudC0+bWF0Y2hfb3B0aW9ucyAmIFBDUkUyX1BBUlRJQUxfU09GVCkKKwkJCWppdF9jb21waWxlX21vZGUgPSBQQ1JFMl9KSVRfUEFSVElBTF9TT0ZUOworCQllbHNlIGlmIChjdXJyZW50LT5tYXRjaF9vcHRpb25zICYgUENSRTJfUEFSVElBTF9IQVJEKQorCQkJaml0X2NvbXBpbGVfbW9kZSA9IFBDUkUyX0pJVF9QQVJUSUFMX0hBUkQ7CisJCWVsc2UKKwkJCWppdF9jb21waWxlX21vZGUgPSBQQ1JFMl9KSVRfQ09NUExFVEU7CisJCWVycm9yID0gMDsKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKKwkJcmU4ID0gTlVMTDsKKwkJY2NvbnRleHQ4ID0gcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZV84KE5VTEwpOworCQlpZiAoY2NvbnRleHQ4KSB7CisJCQlpZiAoR0VUX05FV0xJTkUoY3VycmVudC0+bmV3bGluZSkpCisJCQkJcGNyZTJfc2V0X25ld2xpbmVfOChjY29udGV4dDgsIEdFVF9ORVdMSU5FKGN1cnJlbnQtPm5ld2xpbmUpKTsKKwkJCWlmIChHRVRfQlNSKGN1cnJlbnQtPm5ld2xpbmUpKQorCQkJCXBjcmUyX3NldF9ic3JfOChjY29udGV4dDgsIEdFVF9CU1IoY3VycmVudC0+bmV3bGluZSkpOworCisJCQlpZiAoIShjdXJyZW50LT5zdGFydF9vZmZzZXQgJiBGX05POCkpIHsKKwkJCQlyZTggPSBwY3JlMl9jb21waWxlXzgoKFBDUkUyX1NQVFI4KWN1cnJlbnQtPnBhdHRlcm4sIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCwKKwkJCQkJY3VycmVudC0+Y29tcGlsZV9vcHRpb25zICYgfmRpc2FibGVkX29wdGlvbnMsCisJCQkJCSZlcnJvciwgJmVycl9vZmZzLCBjY29udGV4dDgpOworCisJCQkJaWYgKCFyZTggJiYgKHV0ZiB8fCBpc19hc2NpaSkpCisJCQkJCXByaW50ZigiXG44IGJpdDogQ2Fubm90IGNvbXBpbGUgcGF0dGVybiBcIiVzXCI6ICVkXG4iLCBjdXJyZW50LT5wYXR0ZXJuLCBlcnJvcik7CisJCQl9CisJCQlwY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZV84KGNjb250ZXh0OCk7CisJCX0KKwkJZWxzZQorCQkJcHJpbnRmKCJcbjggYml0OiBDYW5ub3QgYWxsb2NhdGUgY29tcGlsZSBjb250ZXh0XG4iKTsKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMTYKKwkJaWYgKChjdXJyZW50LT5jb21waWxlX29wdGlvbnMgJiBQQ1JFMl9VVEYpIHx8IChjdXJyZW50LT5zdGFydF9vZmZzZXQgJiBGX0ZPUkNFQ09OVikpCisJCQljb252ZXJ0X3V0ZjhfdG9fdXRmMTYoKFBDUkUyX1NQVFI4KWN1cnJlbnQtPnBhdHRlcm4sIHJlZ3Rlc3RfYnVmMTYsIE5VTEwsIFJFR1RFU1RfTUFYX0xFTkdUSDE2KTsKKwkJZWxzZQorCQkJY29weV9jaGFyOF90b19jaGFyMTYoKFBDUkUyX1NQVFI4KWN1cnJlbnQtPnBhdHRlcm4sIHJlZ3Rlc3RfYnVmMTYsIFJFR1RFU1RfTUFYX0xFTkdUSDE2KTsKKworCQlyZTE2ID0gTlVMTDsKKwkJY2NvbnRleHQxNiA9IHBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGVfMTYoTlVMTCk7CisJCWlmIChjY29udGV4dDE2KSB7CisJCQlpZiAoR0VUX05FV0xJTkUoY3VycmVudC0+bmV3bGluZSkpCisJCQkJcGNyZTJfc2V0X25ld2xpbmVfMTYoY2NvbnRleHQxNiwgR0VUX05FV0xJTkUoY3VycmVudC0+bmV3bGluZSkpOworCQkJaWYgKEdFVF9CU1IoY3VycmVudC0+bmV3bGluZSkpCisJCQkJcGNyZTJfc2V0X2Jzcl8xNihjY29udGV4dDE2LCBHRVRfQlNSKGN1cnJlbnQtPm5ld2xpbmUpKTsKKworCQkJaWYgKCEoY3VycmVudC0+c3RhcnRfb2Zmc2V0ICYgRl9OTzE2KSkgeworCQkJCXJlMTYgPSBwY3JlMl9jb21waWxlXzE2KHJlZ3Rlc3RfYnVmMTYsIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCwKKwkJCQkJY3VycmVudC0+Y29tcGlsZV9vcHRpb25zICYgfmRpc2FibGVkX29wdGlvbnMsCisJCQkJCSZlcnJvciwgJmVycl9vZmZzLCBjY29udGV4dDE2KTsKKworCQkJCWlmICghcmUxNiAmJiAodXRmIHx8IGlzX2FzY2lpKSkKKwkJCQkJcHJpbnRmKCJcbjE2IGJpdDogQ2Fubm90IGNvbXBpbGUgcGF0dGVybiBcIiVzXCI6ICVkXG4iLCBjdXJyZW50LT5wYXR0ZXJuLCBlcnJvcik7CisJCQl9CisJCQlwY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZV8xNihjY29udGV4dDE2KTsKKwkJfQorCQllbHNlCisJCQlwcmludGYoIlxuMTYgYml0OiBDYW5ub3QgYWxsb2NhdGUgY29tcGlsZSBjb250ZXh0XG4iKTsKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKwkJaWYgKChjdXJyZW50LT5jb21waWxlX29wdGlvbnMgJiBQQ1JFMl9VVEYpIHx8IChjdXJyZW50LT5zdGFydF9vZmZzZXQgJiBGX0ZPUkNFQ09OVikpCisJCQljb252ZXJ0X3V0ZjhfdG9fdXRmMzIoKFBDUkUyX1NQVFI4KWN1cnJlbnQtPnBhdHRlcm4sIHJlZ3Rlc3RfYnVmMzIsIE5VTEwsIFJFR1RFU1RfTUFYX0xFTkdUSDMyKTsKKwkJZWxzZQorCQkJY29weV9jaGFyOF90b19jaGFyMzIoKFBDUkUyX1NQVFI4KWN1cnJlbnQtPnBhdHRlcm4sIHJlZ3Rlc3RfYnVmMzIsIFJFR1RFU1RfTUFYX0xFTkdUSDMyKTsKKworCQlyZTMyID0gTlVMTDsKKwkJY2NvbnRleHQzMiA9IHBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGVfMzIoTlVMTCk7CisJCWlmIChjY29udGV4dDMyKSB7CisJCQlpZiAoR0VUX05FV0xJTkUoY3VycmVudC0+bmV3bGluZSkpCisJCQkJcGNyZTJfc2V0X25ld2xpbmVfMzIoY2NvbnRleHQzMiwgR0VUX05FV0xJTkUoY3VycmVudC0+bmV3bGluZSkpOworCQkJaWYgKEdFVF9CU1IoY3VycmVudC0+bmV3bGluZSkpCisJCQkJcGNyZTJfc2V0X2Jzcl8zMihjY29udGV4dDMyLCBHRVRfQlNSKGN1cnJlbnQtPm5ld2xpbmUpKTsKKworCQkJaWYgKCEoY3VycmVudC0+c3RhcnRfb2Zmc2V0ICYgRl9OTzMyKSkgeworCQkJCXJlMzIgPSBwY3JlMl9jb21waWxlXzMyKHJlZ3Rlc3RfYnVmMzIsIFBDUkUyX1pFUk9fVEVSTUlOQVRFRCwKKwkJCQkJY3VycmVudC0+Y29tcGlsZV9vcHRpb25zICYgfmRpc2FibGVkX29wdGlvbnMsCisJCQkJCSZlcnJvciwgJmVycl9vZmZzLCBjY29udGV4dDMyKTsKKworCQkJCWlmICghcmUzMiAmJiAodXRmIHx8IGlzX2FzY2lpKSkKKwkJCQkJcHJpbnRmKCJcbjMyIGJpdDogQ2Fubm90IGNvbXBpbGUgcGF0dGVybiBcIiVzXCI6ICVkXG4iLCBjdXJyZW50LT5wYXR0ZXJuLCBlcnJvcik7CisJCQl9CisJCQlwY3JlMl9jb21waWxlX2NvbnRleHRfZnJlZV8zMihjY29udGV4dDMyKTsKKwkJfQorCQllbHNlCisJCQlwcmludGYoIlxuMzIgYml0OiBDYW5ub3QgYWxsb2NhdGUgY29tcGlsZSBjb250ZXh0XG4iKTsKKyNlbmRpZgorCisJCWNvdW50ZXIrKzsKKwkJaWYgKChjb3VudGVyICYgMHgzKSAhPSAwKSB7CisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84CisJCQlzZXRzdGFjazgoTlVMTCk7CisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CisJCQlzZXRzdGFjazE2KE5VTEwpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorCQkJc2V0c3RhY2szMihOVUxMKTsKKyNlbmRpZgorCQl9CisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKKwkJcmV0dXJuX3ZhbHVlOFswXSA9IC0xMDAwOworCQlyZXR1cm5fdmFsdWU4WzFdID0gLTEwMDA7CisJCW1kYXRhOF8xID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfOChPVkVDVE9SX1NJWkUsIE5VTEwpOworCQltZGF0YThfMiA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlXzgoT1ZFQ1RPUl9TSVpFLCBOVUxMKTsKKwkJbWNvbnRleHQ4ID0gcGNyZTJfbWF0Y2hfY29udGV4dF9jcmVhdGVfOChOVUxMKTsKKwkJaWYgKCFtZGF0YThfMSB8fCAhbWRhdGE4XzIgfHwgIW1jb250ZXh0OCkgeworCQkJcHJpbnRmKCJcbjggYml0OiBDYW5ub3QgYWxsb2NhdGUgbWF0Y2ggZGF0YVxuIik7CisJCQlwY3JlMl9tYXRjaF9kYXRhX2ZyZWVfOChtZGF0YThfMSk7CisJCQlwY3JlMl9tYXRjaF9kYXRhX2ZyZWVfOChtZGF0YThfMik7CisJCQlwY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWVfOChtY29udGV4dDgpOworCQkJcGNyZTJfY29kZV9mcmVlXzgocmU4KTsKKwkJCXJlOCA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlvdmVjdG9yOF8xID0gcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcl84KG1kYXRhOF8xKTsKKwkJCW92ZWN0b3I4XzIgPSBwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyXzgobWRhdGE4XzIpOworCQkJZm9yIChpID0gMDsgaSA8IE9WRUNUT1JfU0laRSAqIDM7ICsraSkKKwkJCQlvdmVjdG9yOF8xW2ldID0gLTI7CisJCQlmb3IgKGkgPSAwOyBpIDwgT1ZFQ1RPUl9TSVpFICogMzsgKytpKQorCQkJCW92ZWN0b3I4XzJbaV0gPSAtMjsKKwkJfQorCQlpZiAocmU4KSB7CisJCQlyZXR1cm5fdmFsdWU4WzFdID0gcGNyZTJfbWF0Y2hfOChyZTgsIChQQ1JFMl9TUFRSOCljdXJyZW50LT5pbnB1dCwgc3RybGVuKGN1cnJlbnQtPmlucHV0KSwKKwkJCQljdXJyZW50LT5zdGFydF9vZmZzZXQgJiBPRkZTRVRfTUFTSywgY3VycmVudC0+bWF0Y2hfb3B0aW9ucywgbWRhdGE4XzIsIE5VTEwpOworCisJCQlpZiAocGNyZTJfaml0X2NvbXBpbGVfOChyZTgsIGppdF9jb21waWxlX21vZGUpKSB7CisJCQkJcHJpbnRmKCJcbjggYml0OiBKSVQgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcIiVzXCJcbiIsIGN1cnJlbnQtPnBhdHRlcm4pOworCQkJfSBlbHNlIGlmICgoY291bnRlciAmIDB4MSkgIT0gMCkgeworCQkJCXNldHN0YWNrOChtY29udGV4dDgpOworCQkJCXJldHVybl92YWx1ZThbMF0gPSBwY3JlMl9tYXRjaF84KHJlOCwgKFBDUkUyX1NQVFI4KWN1cnJlbnQtPmlucHV0LCBzdHJsZW4oY3VycmVudC0+aW5wdXQpLAorCQkJCQljdXJyZW50LT5zdGFydF9vZmZzZXQgJiBPRkZTRVRfTUFTSywgY3VycmVudC0+bWF0Y2hfb3B0aW9ucywgbWRhdGE4XzEsIG1jb250ZXh0OCk7CisJCQl9IGVsc2UgeworCQkJCXBjcmUyX2ppdF9zdGFja19hc3NpZ25fOChtY29udGV4dDgsIE5VTEwsIGdldHN0YWNrOCgpKTsKKwkJCQlyZXR1cm5fdmFsdWU4WzBdID0gcGNyZTJfaml0X21hdGNoXzgocmU4LCAoUENSRTJfU1BUUjgpY3VycmVudC0+aW5wdXQsIHN0cmxlbihjdXJyZW50LT5pbnB1dCksCisJCQkJCWN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIE9GRlNFVF9NQVNLLCBjdXJyZW50LT5tYXRjaF9vcHRpb25zLCBtZGF0YThfMSwgbWNvbnRleHQ4KTsKKwkJCX0KKwkJfQorI2VuZGlmCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CisJCXJldHVybl92YWx1ZTE2WzBdID0gLTEwMDA7CisJCXJldHVybl92YWx1ZTE2WzFdID0gLTEwMDA7CisJCW1kYXRhMTZfMSA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlXzE2KE9WRUNUT1JfU0laRSwgTlVMTCk7CisJCW1kYXRhMTZfMiA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlXzE2KE9WRUNUT1JfU0laRSwgTlVMTCk7CisJCW1jb250ZXh0MTYgPSBwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZV8xNihOVUxMKTsKKwkJaWYgKCFtZGF0YTE2XzEgfHwgIW1kYXRhMTZfMiB8fCAhbWNvbnRleHQxNikgeworCQkJcHJpbnRmKCJcbjE2IGJpdDogQ2Fubm90IGFsbG9jYXRlIG1hdGNoIGRhdGFcbiIpOworCQkJcGNyZTJfbWF0Y2hfZGF0YV9mcmVlXzE2KG1kYXRhMTZfMSk7CisJCQlwY3JlMl9tYXRjaF9kYXRhX2ZyZWVfMTYobWRhdGExNl8yKTsKKwkJCXBjcmUyX21hdGNoX2NvbnRleHRfZnJlZV8xNihtY29udGV4dDE2KTsKKwkJCXBjcmUyX2NvZGVfZnJlZV8xNihyZTE2KTsKKwkJCXJlMTYgPSBOVUxMOworCQl9IGVsc2UgeworCQkJb3ZlY3RvcjE2XzEgPSBwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyXzE2KG1kYXRhMTZfMSk7CisJCQlvdmVjdG9yMTZfMiA9IHBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXJfMTYobWRhdGExNl8yKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBPVkVDVE9SX1NJWkUgKiAzOyArK2kpCisJCQkJb3ZlY3RvcjE2XzFbaV0gPSAtMjsKKwkJCWZvciAoaSA9IDA7IGkgPCBPVkVDVE9SX1NJWkUgKiAzOyArK2kpCisJCQkJb3ZlY3RvcjE2XzJbaV0gPSAtMjsKKwkJfQorCQlpZiAocmUxNikgeworCQkJaWYgKChjdXJyZW50LT5jb21waWxlX29wdGlvbnMgJiBQQ1JFMl9VVEYpIHx8IChjdXJyZW50LT5zdGFydF9vZmZzZXQgJiBGX0ZPUkNFQ09OVikpCisJCQkJbGVuZ3RoMTYgPSBjb252ZXJ0X3V0ZjhfdG9fdXRmMTYoKFBDUkUyX1NQVFI4KWN1cnJlbnQtPmlucHV0LCByZWd0ZXN0X2J1ZjE2LCByZWd0ZXN0X29mZnNldG1hcDE2LCBSRUdURVNUX01BWF9MRU5HVEgxNik7CisJCQllbHNlCisJCQkJbGVuZ3RoMTYgPSBjb3B5X2NoYXI4X3RvX2NoYXIxNigoUENSRTJfU1BUUjgpY3VycmVudC0+aW5wdXQsIHJlZ3Rlc3RfYnVmMTYsIFJFR1RFU1RfTUFYX0xFTkdUSDE2KTsKKworCQkJcmV0dXJuX3ZhbHVlMTZbMV0gPSBwY3JlMl9tYXRjaF8xNihyZTE2LCByZWd0ZXN0X2J1ZjE2LCBsZW5ndGgxNiwKKwkJCQljdXJyZW50LT5zdGFydF9vZmZzZXQgJiBPRkZTRVRfTUFTSywgY3VycmVudC0+bWF0Y2hfb3B0aW9ucywgbWRhdGExNl8yLCBOVUxMKTsKKworCQkJaWYgKHBjcmUyX2ppdF9jb21waWxlXzE2KHJlMTYsIGppdF9jb21waWxlX21vZGUpKSB7CisJCQkJcHJpbnRmKCJcbjE2IGJpdDogSklUIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgXCIlc1wiXG4iLCBjdXJyZW50LT5wYXR0ZXJuKTsKKwkJCX0gZWxzZSBpZiAoKGNvdW50ZXIgJiAweDEpICE9IDApIHsKKwkJCQlzZXRzdGFjazE2KG1jb250ZXh0MTYpOworCQkJCXJldHVybl92YWx1ZTE2WzBdID0gcGNyZTJfbWF0Y2hfMTYocmUxNiwgcmVndGVzdF9idWYxNiwgbGVuZ3RoMTYsCisJCQkJCWN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIE9GRlNFVF9NQVNLLCBjdXJyZW50LT5tYXRjaF9vcHRpb25zLCBtZGF0YTE2XzEsIG1jb250ZXh0MTYpOworCQkJfSBlbHNlIHsKKwkJCQlwY3JlMl9qaXRfc3RhY2tfYXNzaWduXzE2KG1jb250ZXh0MTYsIE5VTEwsIGdldHN0YWNrMTYoKSk7CisJCQkJcmV0dXJuX3ZhbHVlMTZbMF0gPSBwY3JlMl9qaXRfbWF0Y2hfMTYocmUxNiwgcmVndGVzdF9idWYxNiwgbGVuZ3RoMTYsCisJCQkJCWN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIE9GRlNFVF9NQVNLLCBjdXJyZW50LT5tYXRjaF9vcHRpb25zLCBtZGF0YTE2XzEsIG1jb250ZXh0MTYpOworCQkJfQorCQl9CisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKwkJcmV0dXJuX3ZhbHVlMzJbMF0gPSAtMTAwMDsKKwkJcmV0dXJuX3ZhbHVlMzJbMV0gPSAtMTAwMDsKKwkJbWRhdGEzMl8xID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfMzIoT1ZFQ1RPUl9TSVpFLCBOVUxMKTsKKwkJbWRhdGEzMl8yID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfMzIoT1ZFQ1RPUl9TSVpFLCBOVUxMKTsKKwkJbWNvbnRleHQzMiA9IHBjcmUyX21hdGNoX2NvbnRleHRfY3JlYXRlXzMyKE5VTEwpOworCQlpZiAoIW1kYXRhMzJfMSB8fCAhbWRhdGEzMl8yIHx8ICFtY29udGV4dDMyKSB7CisJCQlwcmludGYoIlxuMzIgYml0OiBDYW5ub3QgYWxsb2NhdGUgbWF0Y2ggZGF0YVxuIik7CisJCQlwY3JlMl9tYXRjaF9kYXRhX2ZyZWVfMzIobWRhdGEzMl8xKTsKKwkJCXBjcmUyX21hdGNoX2RhdGFfZnJlZV8zMihtZGF0YTMyXzIpOworCQkJcGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlXzMyKG1jb250ZXh0MzIpOworCQkJcGNyZTJfY29kZV9mcmVlXzMyKHJlMzIpOworCQkJcmUzMiA9IE5VTEw7CisJCX0gZWxzZSB7CisJCQlvdmVjdG9yMzJfMSA9IHBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXJfMzIobWRhdGEzMl8xKTsKKwkJCW92ZWN0b3IzMl8yID0gcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcl8zMihtZGF0YTMyXzIpOworCQkJZm9yIChpID0gMDsgaSA8IE9WRUNUT1JfU0laRSAqIDM7ICsraSkKKwkJCQlvdmVjdG9yMzJfMVtpXSA9IC0yOworCQkJZm9yIChpID0gMDsgaSA8IE9WRUNUT1JfU0laRSAqIDM7ICsraSkKKwkJCQlvdmVjdG9yMzJfMltpXSA9IC0yOworCQl9CisJCWlmIChyZTMyKSB7CisJCQlpZiAoKGN1cnJlbnQtPmNvbXBpbGVfb3B0aW9ucyAmIFBDUkUyX1VURikgfHwgKGN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIEZfRk9SQ0VDT05WKSkKKwkJCQlsZW5ndGgzMiA9IGNvbnZlcnRfdXRmOF90b191dGYzMigoUENSRTJfU1BUUjgpY3VycmVudC0+aW5wdXQsIHJlZ3Rlc3RfYnVmMzIsIHJlZ3Rlc3Rfb2Zmc2V0bWFwMzIsIFJFR1RFU1RfTUFYX0xFTkdUSDMyKTsKKwkJCWVsc2UKKwkJCQlsZW5ndGgzMiA9IGNvcHlfY2hhcjhfdG9fY2hhcjMyKChQQ1JFMl9TUFRSOCljdXJyZW50LT5pbnB1dCwgcmVndGVzdF9idWYzMiwgUkVHVEVTVF9NQVhfTEVOR1RIMzIpOworCisJCQlyZXR1cm5fdmFsdWUzMlsxXSA9IHBjcmUyX21hdGNoXzMyKHJlMzIsIHJlZ3Rlc3RfYnVmMzIsIGxlbmd0aDMyLAorCQkJCWN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIE9GRlNFVF9NQVNLLCBjdXJyZW50LT5tYXRjaF9vcHRpb25zLCBtZGF0YTMyXzIsIE5VTEwpOworCisJCQlpZiAocGNyZTJfaml0X2NvbXBpbGVfMzIocmUzMiwgaml0X2NvbXBpbGVfbW9kZSkpIHsKKwkJCQlwcmludGYoIlxuMzIgYml0OiBKSVQgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcIiVzXCJcbiIsIGN1cnJlbnQtPnBhdHRlcm4pOworCQkJfSBlbHNlIGlmICgoY291bnRlciAmIDB4MSkgIT0gMCkgeworCQkJCXNldHN0YWNrMzIobWNvbnRleHQzMik7CisJCQkJcmV0dXJuX3ZhbHVlMzJbMF0gPSBwY3JlMl9tYXRjaF8zMihyZTMyLCByZWd0ZXN0X2J1ZjMyLCBsZW5ndGgzMiwKKwkJCQkJY3VycmVudC0+c3RhcnRfb2Zmc2V0ICYgT0ZGU0VUX01BU0ssIGN1cnJlbnQtPm1hdGNoX29wdGlvbnMsIG1kYXRhMzJfMSwgbWNvbnRleHQzMik7CisJCQl9IGVsc2UgeworCQkJCXBjcmUyX2ppdF9zdGFja19hc3NpZ25fMzIobWNvbnRleHQzMiwgTlVMTCwgZ2V0c3RhY2szMigpKTsKKwkJCQlyZXR1cm5fdmFsdWUzMlswXSA9IHBjcmUyX2ppdF9tYXRjaF8zMihyZTMyLCByZWd0ZXN0X2J1ZjMyLCBsZW5ndGgzMiwKKwkJCQkJY3VycmVudC0+c3RhcnRfb2Zmc2V0ICYgT0ZGU0VUX01BU0ssIGN1cnJlbnQtPm1hdGNoX29wdGlvbnMsIG1kYXRhMzJfMSwgbWNvbnRleHQzMik7CisJCQl9CisJCX0KKyNlbmRpZgorCisJCS8qIHByaW50ZigiWyVkLSVkLSVkfCVkLSVkfCVkLSVkfCVkLSVkXSVzIiwKKwkJCXJldHVybl92YWx1ZThbMF0sIHJldHVybl92YWx1ZTE2WzBdLCByZXR1cm5fdmFsdWUzMlswXSwKKwkJCShpbnQpb3ZlY3RvcjhfMVswXSwgKGludClvdmVjdG9yOF8xWzFdLAorCQkJKGludClvdmVjdG9yMTZfMVswXSwgKGludClvdmVjdG9yMTZfMVsxXSwKKwkJCShpbnQpb3ZlY3RvcjMyXzFbMF0sIChpbnQpb3ZlY3RvcjMyXzFbMV0sCisJCQkoY3VycmVudC0+Y29tcGlsZV9vcHRpb25zICYgUENSRTJfQ0FTRUxFU1MpID8gIkMiIDogIiIpOyAqLworCisJCS8qIElmIEZfRElGRiBpcyBzZXQsIGp1c3QgcnVuIHRoZSB0ZXN0LCBidXQgZG8gbm90IGNvbXBhcmUgdGhlIHJlc3VsdHMuCisJCVNlZ2ZhdWx0cyBjYW4gc3RpbGwgYmUgY2FwdHVyZWQuICovCisKKwkJaXNfc3VjY2Vzc2Z1bCA9IDE7CisJCWlmICghKGN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIEZfRElGRikpIHsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVVRGICYmICgoZGVmaW5lZChTVVBQT1JUX1BDUkUyXzgpICsgZGVmaW5lZChTVVBQT1JUX1BDUkUyXzE2KSArIGRlZmluZWQoU1VQUE9SVF9QQ1JFMl8zMikpID49IDIpCisJCQlpZiAoIShjdXJyZW50LT5zdGFydF9vZmZzZXQgJiBGX0ZPUkNFQ09OVikpIHsKKworCQkJCS8qIEFsbCByZXN1bHRzIG11c3QgYmUgdGhlIHNhbWUuICovCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84CisJCQkJaWYgKChyZXR1cm5fdmFsdWUgPSByZXR1cm5fdmFsdWU4WzBdKSAhPSByZXR1cm5fdmFsdWU4WzFdKSB7CisJCQkJCXByaW50ZigiXG44IGJpdDogUmV0dXJuIHZhbHVlIGRpZmZlcnMoSjg6JWQsSTg6JWQpOiBbJWRdICclcycgQCAnJXMnXG4iLAorCQkJCQkJcmV0dXJuX3ZhbHVlOFswXSwgcmV0dXJuX3ZhbHVlOFsxXSwgdG90YWwsIGN1cnJlbnQtPnBhdHRlcm4sIGN1cnJlbnQtPmlucHV0KTsKKwkJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQkJfSBlbHNlCisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CisJCQkJaWYgKChyZXR1cm5fdmFsdWUgPSByZXR1cm5fdmFsdWUxNlswXSkgIT0gcmV0dXJuX3ZhbHVlMTZbMV0pIHsKKwkJCQkJcHJpbnRmKCJcbjE2IGJpdDogUmV0dXJuIHZhbHVlIGRpZmZlcnMoSjE2OiVkLEkxNjolZCk6IFslZF0gJyVzJyBAICclcydcbiIsCisJCQkJCQlyZXR1cm5fdmFsdWUxNlswXSwgcmV0dXJuX3ZhbHVlMTZbMV0sIHRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJCWlzX3N1Y2Nlc3NmdWwgPSAwOworCQkJCX0gZWxzZQorI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorCQkJCWlmICgocmV0dXJuX3ZhbHVlID0gcmV0dXJuX3ZhbHVlMzJbMF0pICE9IHJldHVybl92YWx1ZTMyWzFdKSB7CisJCQkJCXByaW50ZigiXG4zMiBiaXQ6IFJldHVybiB2YWx1ZSBkaWZmZXJzKEozMjolZCxJMzI6JWQpOiBbJWRdICclcycgQCAnJXMnXG4iLAorCQkJCQkJcmV0dXJuX3ZhbHVlMzJbMF0sIHJldHVybl92YWx1ZTMyWzFdLCB0b3RhbCwgY3VycmVudC0+cGF0dGVybiwgY3VycmVudC0+aW5wdXQpOworCQkJCQlpc19zdWNjZXNzZnVsID0gMDsKKwkJCQl9IGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQgU1VQUE9SVF9QQ1JFMl84ICYmIGRlZmluZWQgU1VQUE9SVF9QQ1JFMl8xNgorCQkJCWlmIChyZXR1cm5fdmFsdWU4WzBdICE9IHJldHVybl92YWx1ZTE2WzBdKSB7CisJCQkJCXByaW50ZigiXG44IGFuZCAxNiBiaXQ6IFJldHVybiB2YWx1ZSBkaWZmZXJzKEo4OiVkLEoxNjolZCk6IFslZF0gJyVzJyBAICclcydcbiIsCisJCQkJCQlyZXR1cm5fdmFsdWU4WzBdLCByZXR1cm5fdmFsdWUxNlswXSwKKwkJCQkJCXRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJCWlzX3N1Y2Nlc3NmdWwgPSAwOworCQkJCX0gZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzggJiYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzMyCisJCQkJaWYgKHJldHVybl92YWx1ZThbMF0gIT0gcmV0dXJuX3ZhbHVlMzJbMF0pIHsKKwkJCQkJcHJpbnRmKCJcbjggYW5kIDMyIGJpdDogUmV0dXJuIHZhbHVlIGRpZmZlcnMoSjg6JWQsSjMyOiVkKTogWyVkXSAnJXMnIEAgJyVzJ1xuIiwKKwkJCQkJCXJldHVybl92YWx1ZThbMF0sIHJldHVybl92YWx1ZTMyWzBdLAorCQkJCQkJdG90YWwsIGN1cnJlbnQtPnBhdHRlcm4sIGN1cnJlbnQtPmlucHV0KTsKKwkJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQkJfSBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMTYgJiYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzMyCisJCQkJaWYgKHJldHVybl92YWx1ZTE2WzBdICE9IHJldHVybl92YWx1ZTMyWzBdKSB7CisJCQkJCXByaW50ZigiXG4xNiBhbmQgMzIgYml0OiBSZXR1cm4gdmFsdWUgZGlmZmVycyhKMTY6JWQsSjMyOiVkKTogWyVkXSAnJXMnIEAgJyVzJ1xuIiwKKwkJCQkJCXJldHVybl92YWx1ZTE2WzBdLCByZXR1cm5fdmFsdWUzMlswXSwKKwkJCQkJCXRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJCWlzX3N1Y2Nlc3NmdWwgPSAwOworCQkJCX0gZWxzZQorI2VuZGlmCisJCQkJaWYgKHJldHVybl92YWx1ZSA+PSAwIHx8IHJldHVybl92YWx1ZSA9PSBQQ1JFX0VSUk9SX1BBUlRJQUwpIHsKKwkJCQkJaWYgKHJldHVybl92YWx1ZSA9PSBQQ1JFX0VSUk9SX1BBUlRJQUwpIHsKKwkJCQkJCXJldHVybl92YWx1ZSA9IDI7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlyZXR1cm5fdmFsdWUgKj0gMjsKKwkJCQkJfQorI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorCQkJCQlyZXR1cm5fdmFsdWU4WzBdID0gcmV0dXJuX3ZhbHVlOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorCQkJCQlyZXR1cm5fdmFsdWUxNlswXSA9IHJldHVybl92YWx1ZTsKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKwkJCQkJcmV0dXJuX3ZhbHVlMzJbMF0gPSByZXR1cm5fdmFsdWU7CisjZW5kaWYKKwkJCQkJLyogVHJhbnNmb3JtIGJhY2sgdGhlIHJlc3VsdHMuICovCisJCQkJCWlmIChjdXJyZW50LT5mbGFncyAmIFBDUkVfVVRGOCkgeworI2lmZGVmIFNVUFBPUlRfUENSRTJfMTYKKwkJCQkJCWZvciAoaSA9IDA7IGkgPCByZXR1cm5fdmFsdWU7ICsraSkgeworCQkJCQkJCWlmIChvdmVjdG9yMTZfMVtpXSA+PSAwKQorCQkJCQkJCQlvdmVjdG9yMTZfMVtpXSA9IHJlZ3Rlc3Rfb2Zmc2V0bWFwMTZbb3ZlY3RvcjE2XzFbaV1dOworCQkJCQkJCWlmIChvdmVjdG9yMTZfMltpXSA+PSAwKQorCQkJCQkJCQlvdmVjdG9yMTZfMltpXSA9IHJlZ3Rlc3Rfb2Zmc2V0bWFwMTZbb3ZlY3RvcjE2XzJbaV1dOworCQkJCQkJfQorI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorCQkJCQkJZm9yIChpID0gMDsgaSA8IHJldHVybl92YWx1ZTsgKytpKSB7CisJCQkJCQkJaWYgKG92ZWN0b3IzMl8xW2ldID49IDApCisJCQkJCQkJCW92ZWN0b3IzMl8xW2ldID0gcmVndGVzdF9vZmZzZXRtYXAzMltvdmVjdG9yMzJfMVtpXV07CisJCQkJCQkJaWYgKG92ZWN0b3IzMl8yW2ldID49IDApCisJCQkJCQkJCW92ZWN0b3IzMl8yW2ldID0gcmVndGVzdF9vZmZzZXRtYXAzMltvdmVjdG9yMzJfMltpXV07CisJCQkJCQl9CisjZW5kaWYKKwkJCQkJfQorCisJCQkJCWZvciAoaSA9IDA7IGkgPCByZXR1cm5fdmFsdWU7ICsraSkgeworI2lmIGRlZmluZWQgU1VQUE9SVF9QQ1JFMl84ICYmIGRlZmluZWQgU1VQUE9SVF9QQ1JFMl8xNgorCQkJCQkJaWYgKG92ZWN0b3I4XzFbaV0gIT0gb3ZlY3RvcjhfMltpXSB8fCBvdmVjdG9yOF8xW2ldICE9IG92ZWN0b3IxNl8xW2ldIHx8IG92ZWN0b3I4XzFbaV0gIT0gb3ZlY3RvcjE2XzJbaV0pIHsKKwkJCQkJCQlwcmludGYoIlxuOCBhbmQgMTYgYml0OiBPdmVjdG9yWyVkXSB2YWx1ZSBkaWZmZXJzKEo4OiVkLEk4OiVkLEoxNjolZCxJMTY6JWQpOiBbJWRdICclcycgQCAnJXMnIFxuIiwKKwkJCQkJCQkJaSwgb3ZlY3RvcjhfMVtpXSwgb3ZlY3RvcjhfMltpXSwgb3ZlY3RvcjE2XzFbaV0sIG92ZWN0b3IxNl8yW2ldLAorCQkJCQkJCQl0b3RhbCwgY3VycmVudC0+cGF0dGVybiwgY3VycmVudC0+aW5wdXQpOworCQkJCQkJCWlzX3N1Y2Nlc3NmdWwgPSAwOworCQkJCQkJfQorI2VuZGlmCisjaWYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzggJiYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzMyCisJCQkJCQlpZiAob3ZlY3RvcjhfMVtpXSAhPSBvdmVjdG9yOF8yW2ldIHx8IG92ZWN0b3I4XzFbaV0gIT0gb3ZlY3RvcjMyXzFbaV0gfHwgb3ZlY3RvcjhfMVtpXSAhPSBvdmVjdG9yMzJfMltpXSkgeworCQkJCQkJCXByaW50ZigiXG44IGFuZCAzMiBiaXQ6IE92ZWN0b3JbJWRdIHZhbHVlIGRpZmZlcnMoSjg6JWQsSTg6JWQsSjMyOiVkLEkzMjolZCk6IFslZF0gJyVzJyBAICclcycgXG4iLAorCQkJCQkJCQlpLCBvdmVjdG9yOF8xW2ldLCBvdmVjdG9yOF8yW2ldLCBvdmVjdG9yMzJfMVtpXSwgb3ZlY3RvcjMyXzJbaV0sCisJCQkJCQkJCXRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQkJCQl9CisjZW5kaWYKKyNpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMTYgJiYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzE2CisJCQkJCQlpZiAob3ZlY3RvcjE2XzFbaV0gIT0gb3ZlY3RvcjE2XzJbaV0gfHwgb3ZlY3RvcjE2XzFbaV0gIT0gb3ZlY3RvcjE2XzFbaV0gfHwgb3ZlY3RvcjE2XzFbaV0gIT0gb3ZlY3RvcjE2XzJbaV0pIHsKKwkJCQkJCQlwcmludGYoIlxuMTYgYW5kIDE2IGJpdDogT3ZlY3RvclslZF0gdmFsdWUgZGlmZmVycyhKMTY6JWQsSTE2OiVkLEozMjolZCxJMzI6JWQpOiBbJWRdICclcycgQCAnJXMnIFxuIiwKKwkJCQkJCQkJaSwgb3ZlY3RvcjE2XzFbaV0sIG92ZWN0b3IxNl8yW2ldLCBvdmVjdG9yMTZfMVtpXSwgb3ZlY3RvcjE2XzJbaV0sCisJCQkJCQkJCXRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQkJCQl9CisjZW5kaWYKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlmIC8qIG1vcmUgdGhhbiBvbmUgb2YgU1VQUE9SVF9QQ1JFMl84LCBTVVBQT1JUX1BDUkUyXzE2IGFuZCBTVVBQT1JUX1BDUkUyXzMyICovCisJCQl7CisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84CisJCQkJaWYgKHJldHVybl92YWx1ZThbMF0gIT0gcmV0dXJuX3ZhbHVlOFsxXSkgeworCQkJCQlwcmludGYoIlxuOCBiaXQ6IFJldHVybiB2YWx1ZSBkaWZmZXJzKCVkOiVkKTogWyVkXSAnJXMnIEAgJyVzJ1xuIiwKKwkJCQkJCXJldHVybl92YWx1ZThbMF0sIHJldHVybl92YWx1ZThbMV0sIHRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJCWlzX3N1Y2Nlc3NmdWwgPSAwOworCQkJCX0gZWxzZSBpZiAocmV0dXJuX3ZhbHVlOFswXSA+PSAwIHx8IHJldHVybl92YWx1ZThbMF0gPT0gUENSRTJfRVJST1JfUEFSVElBTCkgeworCQkJCQlpZiAocmV0dXJuX3ZhbHVlOFswXSA9PSBQQ1JFMl9FUlJPUl9QQVJUSUFMKQorCQkJCQkJcmV0dXJuX3ZhbHVlOFswXSA9IDI7CisJCQkJCWVsc2UKKwkJCQkJCXJldHVybl92YWx1ZThbMF0gKj0gMjsKKworCQkJCQlmb3IgKGkgPSAwOyBpIDwgcmV0dXJuX3ZhbHVlOFswXTsgKytpKQorCQkJCQkJaWYgKG92ZWN0b3I4XzFbaV0gIT0gb3ZlY3RvcjhfMltpXSkgeworCQkJCQkJCXByaW50ZigiXG44IGJpdDogT3ZlY3RvclslZF0gdmFsdWUgZGlmZmVycyglZDolZCk6IFslZF0gJyVzJyBAICclcydcbiIsCisJCQkJCQkJCWksIChpbnQpb3ZlY3RvcjhfMVtpXSwgKGludClvdmVjdG9yOF8yW2ldLCB0b3RhbCwgY3VycmVudC0+cGF0dGVybiwgY3VycmVudC0+aW5wdXQpOworCQkJCQkJCWlzX3N1Y2Nlc3NmdWwgPSAwOworCQkJCQkJfQorCQkJCX0KKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorCQkJCWlmIChyZXR1cm5fdmFsdWUxNlswXSAhPSByZXR1cm5fdmFsdWUxNlsxXSkgeworCQkJCQlwcmludGYoIlxuMTYgYml0OiBSZXR1cm4gdmFsdWUgZGlmZmVycyglZDolZCk6IFslZF0gJyVzJyBAICclcydcbiIsCisJCQkJCQlyZXR1cm5fdmFsdWUxNlswXSwgcmV0dXJuX3ZhbHVlMTZbMV0sIHRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJCWlzX3N1Y2Nlc3NmdWwgPSAwOworCQkJCX0gZWxzZSBpZiAocmV0dXJuX3ZhbHVlMTZbMF0gPj0gMCB8fCByZXR1cm5fdmFsdWUxNlswXSA9PSBQQ1JFMl9FUlJPUl9QQVJUSUFMKSB7CisJCQkJCWlmIChyZXR1cm5fdmFsdWUxNlswXSA9PSBQQ1JFMl9FUlJPUl9QQVJUSUFMKQorCQkJCQkJcmV0dXJuX3ZhbHVlMTZbMF0gPSAyOworCQkJCQllbHNlCisJCQkJCQlyZXR1cm5fdmFsdWUxNlswXSAqPSAyOworCisJCQkJCWZvciAoaSA9IDA7IGkgPCByZXR1cm5fdmFsdWUxNlswXTsgKytpKQorCQkJCQkJaWYgKG92ZWN0b3IxNl8xW2ldICE9IG92ZWN0b3IxNl8yW2ldKSB7CisJCQkJCQkJcHJpbnRmKCJcbjE2IGJpdDogT3ZlY3RvclslZF0gdmFsdWUgZGlmZmVycyglZDolZCk6IFslZF0gJyVzJyBAICclcydcbiIsCisJCQkJCQkJCWksIChpbnQpb3ZlY3RvcjE2XzFbaV0sIChpbnQpb3ZlY3RvcjE2XzJbaV0sIHRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQkJCQl9CisJCQkJfQorI2VuZGlmCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzMyCisJCQkJaWYgKHJldHVybl92YWx1ZTMyWzBdICE9IHJldHVybl92YWx1ZTMyWzFdKSB7CisJCQkJCXByaW50ZigiXG4zMiBiaXQ6IFJldHVybiB2YWx1ZSBkaWZmZXJzKCVkOiVkKTogWyVkXSAnJXMnIEAgJyVzJ1xuIiwKKwkJCQkJCXJldHVybl92YWx1ZTMyWzBdLCByZXR1cm5fdmFsdWUzMlsxXSwgdG90YWwsIGN1cnJlbnQtPnBhdHRlcm4sIGN1cnJlbnQtPmlucHV0KTsKKwkJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQkJfSBlbHNlIGlmIChyZXR1cm5fdmFsdWUzMlswXSA+PSAwIHx8IHJldHVybl92YWx1ZTMyWzBdID09IFBDUkUyX0VSUk9SX1BBUlRJQUwpIHsKKwkJCQkJaWYgKHJldHVybl92YWx1ZTMyWzBdID09IFBDUkUyX0VSUk9SX1BBUlRJQUwpCisJCQkJCQlyZXR1cm5fdmFsdWUzMlswXSA9IDI7CisJCQkJCWVsc2UKKwkJCQkJCXJldHVybl92YWx1ZTMyWzBdICo9IDI7CisKKwkJCQkJZm9yIChpID0gMDsgaSA8IHJldHVybl92YWx1ZTMyWzBdOyArK2kpCisJCQkJCQlpZiAob3ZlY3RvcjMyXzFbaV0gIT0gb3ZlY3RvcjMyXzJbaV0pIHsKKwkJCQkJCQlwcmludGYoIlxuMzIgYml0OiBPdmVjdG9yWyVkXSB2YWx1ZSBkaWZmZXJzKCVkOiVkKTogWyVkXSAnJXMnIEAgJyVzJ1xuIiwKKwkJCQkJCQkJaSwgKGludClvdmVjdG9yMzJfMVtpXSwgKGludClvdmVjdG9yMzJfMltpXSwgdG90YWwsIGN1cnJlbnQtPnBhdHRlcm4sIGN1cnJlbnQtPmlucHV0KTsKKwkJCQkJCQlpc19zdWNjZXNzZnVsID0gMDsKKwkJCQkJCX0KKwkJCQl9CisjZW5kaWYKKwkJCX0KKwkJfQorCisJCWlmIChpc19zdWNjZXNzZnVsKSB7CisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84CisJCQlpZiAoIShjdXJyZW50LT5zdGFydF9vZmZzZXQgJiBGX05POCkgJiYgKHV0ZiB8fCBpc19hc2NpaSkpIHsKKwkJCQlpZiAocmV0dXJuX3ZhbHVlOFswXSA8IDAgJiYgIShjdXJyZW50LT5zdGFydF9vZmZzZXQgJiBGX05PTUFUQ0gpKSB7CisJCQkJCXByaW50ZigiOCBiaXQ6IFRlc3Qgc2hvdWxkIG1hdGNoOiBbJWRdICclcycgQCAnJXMnXG4iLAorCQkJCQkJdG90YWwsIGN1cnJlbnQtPnBhdHRlcm4sIGN1cnJlbnQtPmlucHV0KTsKKwkJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQkJfQorCisJCQkJaWYgKHJldHVybl92YWx1ZThbMF0gPj0gMCAmJiAoY3VycmVudC0+c3RhcnRfb2Zmc2V0ICYgRl9OT01BVENIKSkgeworCQkJCQlwcmludGYoIjggYml0OiBUZXN0IHNob3VsZCBub3QgbWF0Y2g6IFslZF0gJyVzJyBAICclcydcbiIsCisJCQkJCQl0b3RhbCwgY3VycmVudC0+cGF0dGVybiwgY3VycmVudC0+aW5wdXQpOworCQkJCQlpc19zdWNjZXNzZnVsID0gMDsKKwkJCQl9CisJCQl9CisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CisJCQlpZiAoIShjdXJyZW50LT5zdGFydF9vZmZzZXQgJiBGX05PMTYpICYmICh1dGYgfHwgaXNfYXNjaWkpKSB7CisJCQkJaWYgKHJldHVybl92YWx1ZTE2WzBdIDwgMCAmJiAhKGN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIEZfTk9NQVRDSCkpIHsKKwkJCQkJcHJpbnRmKCIxNiBiaXQ6IFRlc3Qgc2hvdWxkIG1hdGNoOiBbJWRdICclcycgQCAnJXMnXG4iLAorCQkJCQkJdG90YWwsIGN1cnJlbnQtPnBhdHRlcm4sIGN1cnJlbnQtPmlucHV0KTsKKwkJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQkJfQorCisJCQkJaWYgKHJldHVybl92YWx1ZTE2WzBdID49IDAgJiYgKGN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIEZfTk9NQVRDSCkpIHsKKwkJCQkJcHJpbnRmKCIxNiBiaXQ6IFRlc3Qgc2hvdWxkIG5vdCBtYXRjaDogWyVkXSAnJXMnIEAgJyVzJ1xuIiwKKwkJCQkJCXRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJCWlzX3N1Y2Nlc3NmdWwgPSAwOworCQkJCX0KKwkJCX0KKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKwkJCWlmICghKGN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIEZfTk8zMikgJiYgKHV0ZiB8fCBpc19hc2NpaSkpIHsKKwkJCQlpZiAocmV0dXJuX3ZhbHVlMzJbMF0gPCAwICYmICEoY3VycmVudC0+c3RhcnRfb2Zmc2V0ICYgRl9OT01BVENIKSkgeworCQkJCQlwcmludGYoIjMyIGJpdDogVGVzdCBzaG91bGQgbWF0Y2g6IFslZF0gJyVzJyBAICclcydcbiIsCisJCQkJCQl0b3RhbCwgY3VycmVudC0+cGF0dGVybiwgY3VycmVudC0+aW5wdXQpOworCQkJCQlpc19zdWNjZXNzZnVsID0gMDsKKwkJCQl9CisKKwkJCQlpZiAocmV0dXJuX3ZhbHVlMzJbMF0gPj0gMCAmJiAoY3VycmVudC0+c3RhcnRfb2Zmc2V0ICYgRl9OT01BVENIKSkgeworCQkJCQlwcmludGYoIjMyIGJpdDogVGVzdCBzaG91bGQgbm90IG1hdGNoOiBbJWRdICclcycgQCAnJXMnXG4iLAorCQkJCQkJdG90YWwsIGN1cnJlbnQtPnBhdHRlcm4sIGN1cnJlbnQtPmlucHV0KTsKKwkJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQkJfQorCQkJfQorI2VuZGlmCisJCX0KKworCQlpZiAoaXNfc3VjY2Vzc2Z1bCkgeworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorCQkJaWYgKHJlOCAmJiAhKGN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIEZfTk84KSAmJiBwY3JlMl9nZXRfbWFya184KG1kYXRhOF8xKSAhPSBwY3JlMl9nZXRfbWFya184KG1kYXRhOF8yKSkgeworCQkJCXByaW50ZigiOCBiaXQ6IE1hcmsgdmFsdWUgbWlzbWF0Y2g6IFslZF0gJyVzJyBAICclcydcbiIsCisJCQkJCXRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQl9CisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CisJCQlpZiAocmUxNiAmJiAhKGN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIEZfTk8xNikgJiYgcGNyZTJfZ2V0X21hcmtfMTYobWRhdGExNl8xKSAhPSBwY3JlMl9nZXRfbWFya18xNihtZGF0YTE2XzIpKSB7CisJCQkJcHJpbnRmKCIxNiBiaXQ6IE1hcmsgdmFsdWUgbWlzbWF0Y2g6IFslZF0gJyVzJyBAICclcydcbiIsCisJCQkJCXRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQl9CisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzMyCisJCQlpZiAocmUzMiAmJiAhKGN1cnJlbnQtPnN0YXJ0X29mZnNldCAmIEZfTk8zMikgJiYgcGNyZTJfZ2V0X21hcmtfMzIobWRhdGEzMl8xKSAhPSBwY3JlMl9nZXRfbWFya18zMihtZGF0YTMyXzIpKSB7CisJCQkJcHJpbnRmKCIzMiBiaXQ6IE1hcmsgdmFsdWUgbWlzbWF0Y2g6IFslZF0gJyVzJyBAICclcydcbiIsCisJCQkJCXRvdGFsLCBjdXJyZW50LT5wYXR0ZXJuLCBjdXJyZW50LT5pbnB1dCk7CisJCQkJaXNfc3VjY2Vzc2Z1bCA9IDA7CisJCQl9CisjZW5kaWYKKwkJfQorCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84CisJCXBjcmUyX2NvZGVfZnJlZV84KHJlOCk7CisJCXBjcmUyX21hdGNoX2RhdGFfZnJlZV84KG1kYXRhOF8xKTsKKwkJcGNyZTJfbWF0Y2hfZGF0YV9mcmVlXzgobWRhdGE4XzIpOworCQlwY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWVfOChtY29udGV4dDgpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorCQlwY3JlMl9jb2RlX2ZyZWVfMTYocmUxNik7CisJCXBjcmUyX21hdGNoX2RhdGFfZnJlZV8xNihtZGF0YTE2XzEpOworCQlwY3JlMl9tYXRjaF9kYXRhX2ZyZWVfMTYobWRhdGExNl8yKTsKKwkJcGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlXzE2KG1jb250ZXh0MTYpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorCQlwY3JlMl9jb2RlX2ZyZWVfMzIocmUzMik7CisJCXBjcmUyX21hdGNoX2RhdGFfZnJlZV8zMihtZGF0YTMyXzEpOworCQlwY3JlMl9tYXRjaF9kYXRhX2ZyZWVfMzIobWRhdGEzMl8yKTsKKwkJcGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlXzMyKG1jb250ZXh0MzIpOworI2VuZGlmCisKKwkJaWYgKGlzX3N1Y2Nlc3NmdWwpIHsKKwkJCXN1Y2Nlc3NmdWwrKzsKKwkJCXN1Y2Nlc3NmdWxfcm93Kys7CisJCQlwcmludGYoIi4iKTsKKwkJCWlmIChzdWNjZXNzZnVsX3JvdyA+PSA2MCkgeworCQkJCXN1Y2Nlc3NmdWxfcm93ID0gMDsKKwkJCQlwcmludGYoIlxuIik7CisJCQl9CisJCX0gZWxzZQorCQkJc3VjY2Vzc2Z1bF9yb3cgPSAwOworCisJCWZmbHVzaChzdGRvdXQpOworCQljdXJyZW50Kys7CisJfQorI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorCXNldHN0YWNrOChOVUxMKTsKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMTYKKwlzZXRzdGFjazE2KE5VTEwpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorCXNldHN0YWNrMzIoTlVMTCk7CisjZW5kaWYKKworCWlmICh0b3RhbCA9PSBzdWNjZXNzZnVsKSB7CisJCXByaW50ZigiXG5BbGwgSklUIHJlZ3Jlc3Npb24gdGVzdHMgYXJlIHN1Y2Nlc3NmdWxseSBwYXNzZWQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJcblN1Y2Nlc3NmdWwgdGVzdCByYXRpbzogJWQlJSAoJWQgZmFpbGVkKVxuIiwgc3VjY2Vzc2Z1bCAqIDEwMCAvIHRvdGFsLCB0b3RhbCAtIHN1Y2Nlc3NmdWwpOworCQlyZXR1cm4gMTsKKwl9Cit9CisKKy8qIEVuZCBvZiBwY3JlMl9qaXRfdGVzdC5jICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfbWFrZXRhYmxlcy5jIGIvZGlzdDIvc3JjL3BjcmUyX21ha2V0YWJsZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzdhZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3BjcmUyX21ha2V0YWJsZXMuYwpAQCAtMCwwICsxLDE1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQQ1JFIGlzIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHN5bnRheAorYW5kIHNlbWFudGljcyBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2Ugb2YgdGhlIFBlcmwgNSBsYW5ndWFnZS4KKworICAgICAgICAgICAgICAgICAgICAgICBXcml0dGVuIGJ5IFBoaWxpcCBIYXplbAorICAgICBPcmlnaW5hbCBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDE5OTctMjAxMiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorICAgICAgICAgTmV3IEFQSSBjb2RlIENvcHlyaWdodCAoYykgMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisKKy8qIFRoaXMgbW9kdWxlIGNvbnRhaW5zIHRoZSBleHRlcm5hbCBmdW5jdGlvbiBwY3JlMl9tYWtldGFibGVzKCksIHdoaWNoIGJ1aWxkcworY2hhcmFjdGVyIHRhYmxlcyBmb3IgUENSRTIgaW4gdGhlIGN1cnJlbnQgbG9jYWxlLiBUaGUgZmlsZSBpcyBjb21waWxlZCBvbiBpdHMKK293biBhcyBwYXJ0IG9mIHRoZSBQQ1JFMiBsaWJyYXJ5LiBIb3dldmVyLCBpdCBpcyBhbHNvIGluY2x1ZGVkIGluIHRoZQorY29tcGlsYXRpb24gb2YgZGZ0YWJsZXMuYywgaW4gd2hpY2ggY2FzZSB0aGUgbWFjcm8gREZUQUJMRVMgaXMgZGVmaW5lZC4gKi8KKworI2lmbmRlZiBERlRBQkxFUworIyAgaWZkZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSAiY29uZmlnLmgiCisjICBlbmRpZgorIyAgaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKyNlbmRpZgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgIENyZWF0ZSBQQ1JFMiBjaGFyYWN0ZXIgdGFibGVzICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGJ1aWxkcyBhIHNldCBvZiBjaGFyYWN0ZXIgdGFibGVzIGZvciB1c2UgYnkgUENSRTIgYW5kIHJldHVybnMKK2EgcG9pbnRlciB0byB0aGVtLiBUaGV5IGFyZSBidWlsZCB1c2luZyB0aGUgY3R5cGUgZnVuY3Rpb25zLCBhbmQgY29uc2VxdWVudGx5Cit0aGVpciBjb250ZW50cyB3aWxsIGRlcGVuZCB1cG9uIHRoZSBjdXJyZW50IGxvY2FsZSBzZXR0aW5nLiBXaGVuIGNvbXBpbGVkIGFzCitwYXJ0IG9mIHRoZSBsaWJyYXJ5LCB0aGUgc3RvcmUgaXMgb2J0YWluZWQgdmlhIGEgZ2VuZXJhbCBjb250ZXh0IG1hbGxvYywgaWYKK3N1cHBsaWVkLCBidXQgd2hlbiBERlRBQkxFUyBpcyBkZWZpbmVkICh3aGVuIGNvbXBpbGluZyB0aGUgZGZ0YWJsZXMgYXV4aWxpYXJ5Citwcm9ncmFtKSBtYWxsb2MoKSBpcyB1c2VkLCBhbmQgdGhlIGZ1bmN0aW9uIGhhcyBhIGRpZmZlcmVudCBuYW1lIHNvIGFzIG5vdCB0bworY2xhc2ggd2l0aCB0aGUgcHJvdG90eXBlIGluIHBjcmUyLmguCisKK0FyZ3VtZW50czogICBub25lIHdoZW4gREZUQUJMRVMgaXMgZGVmaW5lZAorICAgICAgICAgICAgIGVsc2UgYSBQQ1JFMiBnZW5lcmFsIGNvbnRleHQgb3IgTlVMTAorUmV0dXJuczogICAgIHBvaW50ZXIgdG8gdGhlIGNvbnRpZ3VvdXMgYmxvY2sgb2YgZGF0YQorKi8KKworI2lmZGVmIERGVEFCTEVTICAvKiBJbmNsdWRlZCBpbiBmcmVlc3RhbmRpbmcgZGZ0YWJsZXMuYyBwcm9ncmFtICovCitzdGF0aWMgY29uc3QgdWludDhfdCAqbWFrZXRhYmxlcyh2b2lkKQorewordWludDhfdCAqeWllbGQgPSAodWludDhfdCAqKW1hbGxvYyh0YWJsZXNfbGVuZ3RoKTsKKworI2Vsc2UgIC8qIE5vdCBERlRBQkxFUywgY29tcGlsaW5nIHRoZSBsaWJyYXJ5ICovCitQQ1JFMl9FWFBfREVGTiBjb25zdCB1aW50OF90ICogUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9tYWtldGFibGVzKHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpCit7Cit1aW50OF90ICp5aWVsZCA9ICh1aW50OF90ICopKChnY29udGV4dCAhPSBOVUxMKT8KKyAgZ2NvbnRleHQtPm1lbWN0bC5tYWxsb2ModGFibGVzX2xlbmd0aCwgZ2NvbnRleHQtPm1lbWN0bC5tZW1vcnlfZGF0YSkgOgorICBtYWxsb2ModGFibGVzX2xlbmd0aCkpOworI2VuZGlmICAvKiBERlRBQkxFUyAqLworCitpbnQgaTsKK3VpbnQ4X3QgKnA7CisKK2lmICh5aWVsZCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKK3AgPSB5aWVsZDsKKworLyogRmlyc3QgY29tZXMgdGhlIGxvd2VyIGNhc2luZyB0YWJsZSAqLworCitmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspICpwKysgPSB0b2xvd2VyKGkpOworCisvKiBOZXh0IHRoZSBjYXNlLWZsaXBwaW5nIHRhYmxlICovCisKK2ZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgKnArKyA9IGlzbG93ZXIoaSk/IHRvdXBwZXIoaSkgOiB0b2xvd2VyKGkpOworCisvKiBUaGVuIHRoZSBjaGFyYWN0ZXIgY2xhc3MgdGFibGVzLiBEb24ndCB0cnkgdG8gYmUgY2xldmVyIGFuZCBzYXZlIGVmZm9ydCBvbgorZXhjbHVzaXZlIG9uZXMgLSBpbiBzb21lIGxvY2FsZXMgdGhpbmdzIG1heSBiZSBkaWZmZXJlbnQuCisKK05vdGUgdGhhdCB0aGUgdGFibGUgZm9yICJzcGFjZSIgaW5jbHVkZXMgZXZlcnl0aGluZyAiaXNzcGFjZSIgZ2l2ZXMsIGluY2x1ZGluZworVlQgaW4gdGhlIGRlZmF1bHQgbG9jYWxlLiBUaGlzIG1ha2VzIGl0IHdvcmsgZm9yIHRoZSBQT1NJWCBjbGFzcyBbOnNwYWNlOl0uCitGcm9tIHJlbGVhc2UgOC4zNCBpcyBpcyBhbHNvIGNvcnJlY3QgZm9yIFBlcmwgc3BhY2UsIGJlY2F1c2UgUGVybCBhZGRlZCBWVCBhdAorcmVsZWFzZSA1LjE4LgorCitOb3RlIGFsc28gdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBjaGFyYWN0ZXIgdG8gYmUgYWxudW0gb3IgYWxwaGEgd2l0aG91dAorYmVpbmcgbG93ZXIgb3IgdXBwZXIsIHN1Y2ggYXMgIm1hbGUgYW5kIGZlbWFsZSBvcmRpbmFscyIgKFx4QUEgYW5kIFx4QkEpIGluIHRoZQorZnJfRlIgbG9jYWxlIChhdCBsZWFzdCB1bmRlciBEZWJpYW4gTGludXgncyBsb2NhbGVzIGFzIG9mIDEyLzIwMDUpLiBTbyB3ZSBtdXN0Cit0ZXN0IGZvciBhbG51bSBzcGVjaWFsbHkuICovCisKK21lbXNldChwLCAwLCBjYml0X2xlbmd0aCk7Citmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgIHsKKyAgaWYgKGlzZGlnaXQoaSkpIHBbY2JpdF9kaWdpdCAgKyBpLzhdIHw9IDEgPDwgKGkmNyk7CisgIGlmIChpc3VwcGVyKGkpKSBwW2NiaXRfdXBwZXIgICsgaS84XSB8PSAxIDw8IChpJjcpOworICBpZiAoaXNsb3dlcihpKSkgcFtjYml0X2xvd2VyICArIGkvOF0gfD0gMSA8PCAoaSY3KTsKKyAgaWYgKGlzYWxudW0oaSkpIHBbY2JpdF93b3JkICAgKyBpLzhdIHw9IDEgPDwgKGkmNyk7CisgIGlmIChpID09ICdfJykgICBwW2NiaXRfd29yZCAgICsgaS84XSB8PSAxIDw8IChpJjcpOworICBpZiAoaXNzcGFjZShpKSkgcFtjYml0X3NwYWNlICArIGkvOF0gfD0gMSA8PCAoaSY3KTsKKyAgaWYgKGlzeGRpZ2l0KGkpKXBbY2JpdF94ZGlnaXQgKyBpLzhdIHw9IDEgPDwgKGkmNyk7CisgIGlmIChpc2dyYXBoKGkpKSBwW2NiaXRfZ3JhcGggICsgaS84XSB8PSAxIDw8IChpJjcpOworICBpZiAoaXNwcmludChpKSkgcFtjYml0X3ByaW50ICArIGkvOF0gfD0gMSA8PCAoaSY3KTsKKyAgaWYgKGlzcHVuY3QoaSkpIHBbY2JpdF9wdW5jdCAgKyBpLzhdIHw9IDEgPDwgKGkmNyk7CisgIGlmIChpc2NudHJsKGkpKSBwW2NiaXRfY250cmwgICsgaS84XSB8PSAxIDw8IChpJjcpOworICB9CitwICs9IGNiaXRfbGVuZ3RoOworCisvKiBGaW5hbGx5LCB0aGUgY2hhcmFjdGVyIHR5cGUgdGFibGUuIEluIHRoaXMsIHdlIHVzZWQgdG8gZXhjbHVkZSBWVCBmcm9tIHRoZQord2hpdGUgc3BhY2UgY2hhcnMsIGJlY2F1c2UgUGVybCBkaWRuJ3QgcmVjb2duaXplIGl0IGFzIHN1Y2ggZm9yIFxzIGFuZCBmb3IKK2NvbW1lbnRzIHdpdGhpbiByZWdleGVzLiBIb3dldmVyLCBQZXJsIGNoYW5nZWQgYXQgcmVsZWFzZSA1LjE4LCBzbyBQQ1JFIGNoYW5nZWQKK2F0IHJlbGVhc2UgOC4zNC4gKi8KKworZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICB7CisgIGludCB4ID0gMDsKKyAgaWYgKGlzc3BhY2UoaSkpIHggKz0gY3R5cGVfc3BhY2U7CisgIGlmIChpc2FscGhhKGkpKSB4ICs9IGN0eXBlX2xldHRlcjsKKyAgaWYgKGlzZGlnaXQoaSkpIHggKz0gY3R5cGVfZGlnaXQ7CisgIGlmIChpc3hkaWdpdChpKSkgeCArPSBjdHlwZV94ZGlnaXQ7CisgIGlmIChpc2FsbnVtKGkpIHx8IGkgPT0gJ18nKSB4ICs9IGN0eXBlX3dvcmQ7CisKKyAgLyogTm90ZTogc3RyY2hyIGluY2x1ZGVzIHRoZSB0ZXJtaW5hdGluZyB6ZXJvIGluIHRoZSBjaGFyYWN0ZXJzIGl0IGNvbnNpZGVycy4KKyAgSW4gdGhpcyBpbnN0YW5jZSwgdGhhdCBpcyBvayBiZWNhdXNlIHdlIHdhbnQgYmluYXJ5IHplcm8gdG8gYmUgZmxhZ2dlZCBhcyBhCisgIG1ldGEtY2hhcmFjdGVyLCB3aGljaCBpbiB0aGlzIHNlbnNlIGlzIGFueSBjaGFyYWN0ZXIgdGhhdCB0ZXJtaW5hdGVzIGEgcnVuCisgIG9mIGRhdGEgY2hhcmFjdGVycy4gKi8KKworICBpZiAoc3RyY2hyKCJcXCorP3teLiR8KClbIiwgaSkgIT0gMCkgeCArPSBjdHlwZV9tZXRhOworICAqcCsrID0geDsKKyAgfQorCityZXR1cm4geWllbGQ7Cit9CisKKy8qIEVuZCBvZiBwY3JlMl9tYWtldGFibGVzLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9tYXRjaC5jIGIvZGlzdDIvc3JjL3BjcmUyX21hdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUyNzVjNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9tYXRjaC5jCkBAIC0wLDAgKzEsNzI0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQQ1JFIGlzIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHN5bnRheAorYW5kIHNlbWFudGljcyBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2Ugb2YgdGhlIFBlcmwgNSBsYW5ndWFnZS4KKworICAgICAgICAgICAgICAgICAgICAgICBXcml0dGVuIGJ5IFBoaWxpcCBIYXplbAorICAgICBPcmlnaW5hbCBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDE5OTctMjAxMiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorICAgICAgICAgTmV3IEFQSSBjb2RlIENvcHlyaWdodCAoYykgMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2RlZmluZSBOTEJMT0NLIG1iICAgICAgICAgICAgIC8qIEJsb2NrIGNvbnRhaW5pbmcgbmV3bGluZSBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBQU1NUQVJUIHN0YXJ0X3N1YmplY3QgIC8qIEZpZWxkIGNvbnRhaW5pbmcgcHJvY2Vzc2VkIHN0cmluZyBzdGFydCAqLworI2RlZmluZSBQU0VORCAgIGVuZF9zdWJqZWN0ICAgIC8qIEZpZWxkIGNvbnRhaW5pbmcgcHJvY2Vzc2VkIHN0cmluZyBlbmQgKi8KKworI2luY2x1ZGUgInBjcmUyX2ludGVybmFsLmgiCisKKy8qIE1hc2tzIGZvciBpZGVudGlmeWluZyB0aGUgcHVibGljIG9wdGlvbnMgdGhhdCBhcmUgcGVybWl0dGVkIGF0IG1hdGNoIHRpbWUuCisqLworCisjZGVmaW5lIFBVQkxJQ19NQVRDSF9PUFRJT05TIFwKKyAgKFBDUkUyX0FOQ0hPUkVEfFBDUkUyX05PVEJPTHxQQ1JFMl9OT1RFT0x8UENSRTJfTk9URU1QVFl8IFwKKyAgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlR8UENSRTJfTk9fVVRGX0NIRUNLfFBDUkUyX1BBUlRJQUxfSEFSRHwgXAorICAgUENSRTJfUEFSVElBTF9TT0ZUKQorCisjZGVmaW5lIFBVQkxJQ19KSVRfTUFUQ0hfT1BUSU9OUyBcCisgICAoUENSRTJfTk9fVVRGX0NIRUNLfFBDUkUyX05PVEJPTHxQQ1JFMl9OT1RFT0x8UENSRTJfTk9URU1QVFl8XAorICAgIFBDUkUyX05PVEVNUFRZX0FUU1RBUlR8UENSRTJfUEFSVElBTF9TT0ZUfFBDUkUyX1BBUlRJQUxfSEFSRCkKKworLyogVGhlIG1iLT5jYXB0dXJlX2xhc3QgZmllbGQgdXNlcyB0aGUgbG93ZXIgMTYgYml0cyBmb3IgdGhlIGxhc3QgY2FwdHVyZWQKK3N1YnN0cmluZyAod2hpY2ggY2FuIG5ldmVyIGJlIGdyZWF0ZXIgdGhhbiA2NTUzNSkgYW5kIGEgYml0IGluIHRoZSB0b3AgaGFsZgordG8gbWVhbiAiY2FwdHVyZSB2ZWN0b3Igb3ZlcmZsb3dlZCIuIFRoaXMgb2RkIHdheSBvZiBkb2luZyB0aGluZ3Mgd2FzCitpbXBsZW1lbnRlZCB3aGVuIGl0IHdhcyByZWFsaXplZCB0aGF0IHByZXNlcnZpbmcgYW5kIHJlc3RvcmluZyB0aGUgb3ZlcmZsb3cgYml0Cit3aGVuZXZlciB0aGUgbGFzdCBjYXB0dXJlIG51bWJlciB3YXMgc2F2ZWQvcmVzdG9yZWQgbWFkZSBmb3IgYSBuZWF0ZXIKK2ludGVyZmFjZSwgYW5kIGRvaW5nIGl0IHRoaXMgd2F5IHNhdmVkIG9uIChhKSBhbm90aGVyIHZhcmlhYmxlLCB3aGljaCB3b3VsZAoraGF2ZSBpbmNyZWFzZWQgdGhlIHN0YWNrIGZyYW1lIHNpemUgKGEgYmlnIE5PLU5PIGluIFBDUkUpIGFuZCAoYikgYW5vdGhlcgorc2VwYXJhdGUgc2V0IG9mIHNhdmUvcmVzdG9yZSBpbnN0cnVjdGlvbnMuIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBhcmUgdXNlZCBpbgoraW1wbGVtZW50aW5nIHRoaXMuICovCisKKyNkZWZpbmUgQ0FQTE1BU0sgICAgMHgwMDAwZmZmZiAgICAvKiBUaGUgYml0cyB1c2VkIGZvciBsYXN0X2NhcHR1cmUgKi8KKyNkZWZpbmUgT1ZGTE1BU0sgICAgMHhmZmZmMDAwMCAgICAvKiBUaGUgYml0cyB1c2VkIGZvciB0aGUgb3ZlcmZsb3cgZmxhZyAqLworI2RlZmluZSBPVkZMQklUICAgICAweDAwMDEwMDAwICAgIC8qIFRoZSBiaXQgdGhhdCBpcyBzZXQgZm9yIG92ZXJmbG93ICovCisKKy8qIEJpdHMgZm9yIHNldHRpbmcgaW4gbWItPm1hdGNoX2Z1bmN0aW9uX3R5cGUgdG8gaW5kaWNhdGUgdHdvIHNwZWNpYWwgdHlwZXMKK29mIGNhbGwgdG8gbWF0Y2goKS4gV2UgZG8gaXQgdGhpcyB3YXkgdG8gc2F2ZSBvbiB1c2luZyBhbm90aGVyIHN0YWNrIHZhcmlhYmxlLAorYXMgc3RhY2sgdXNhZ2UgaXMgdG8gYmUgZGlzY291cmFnZWQuICovCisKKyNkZWZpbmUgTUFUQ0hfQ09OREFTU0VSVCAgICAgMSAgLyogQ2FsbGVkIHRvIGNoZWNrIGEgY29uZGl0aW9uIGFzc2VydGlvbiAqLworI2RlZmluZSBNQVRDSF9DQkVHUk9VUCAgICAgICAyICAvKiBDb3VsZC1iZS1lbXB0eSB1bmxpbWl0ZWQgcmVwZWF0IGdyb3VwICovCisKKy8qIE5vbi1lcnJvciByZXR1cm5zIGZyb20gdGhlIG1hdGNoKCkgZnVuY3Rpb24uIEVycm9yIHJldHVybnMgYXJlIGV4dGVybmFsbHkKK2RlZmluZWQgUENSRTJfRVJST1JfeHh4IGNvZGVzLCB3aGljaCBhcmUgYWxsIG5lZ2F0aXZlLiAqLworCisjZGVmaW5lIE1BVENIX01BVENIICAgICAgICAxCisjZGVmaW5lIE1BVENIX05PTUFUQ0ggICAgICAwCisKKy8qIFNwZWNpYWwgaW50ZXJuYWwgcmV0dXJucyBmcm9tIHRoZSBtYXRjaCgpIGZ1bmN0aW9uLiBNYWtlIHRoZW0gc3VmZmljaWVudGx5CituZWdhdGl2ZSB0byBhdm9pZCB0aGUgZXh0ZXJuYWwgZXJyb3IgY29kZXMuICovCisKKyNkZWZpbmUgTUFUQ0hfQUNDRVBUICAgICAgICgtOTk5KQorI2RlZmluZSBNQVRDSF9LRVRSUE9TICAgICAgKC05OTgpCisjZGVmaW5lIE1BVENIX09OQ0UgICAgICAgICAoLTk5NykKKy8qIFRoZSBuZXh0IDUgbXVzdCBiZSBrZXB0IHRvZ2V0aGVyIGFuZCBpbiBzZXF1ZW5jZSBzbyB0aGF0IGEgdGVzdCB0aGF0IGNoZWNrcworZm9yIGFueSBvbmUgb2YgdGhlbSBjYW4gdXNlIGEgcmFuZ2UuICovCisjZGVmaW5lIE1BVENIX0NPTU1JVCAgICAgICAoLTk5NikKKyNkZWZpbmUgTUFUQ0hfUFJVTkUgICAgICAgICgtOTk1KQorI2RlZmluZSBNQVRDSF9TS0lQICAgICAgICAgKC05OTQpCisjZGVmaW5lIE1BVENIX1NLSVBfQVJHICAgICAoLTk5MykKKyNkZWZpbmUgTUFUQ0hfVEhFTiAgICAgICAgICgtOTkyKQorI2RlZmluZSBNQVRDSF9CQUNLVFJBQ0tfTUFYIE1BVENIX1RIRU4KKyNkZWZpbmUgTUFUQ0hfQkFDS1RSQUNLX01JTiBNQVRDSF9DT01NSVQKKworLyogTWluIGFuZCBtYXggdmFsdWVzIGZvciB0aGUgY29tbW9uIHJlcGVhdHM7IGZvciB0aGUgbWF4aW1hLCAwID0+IGluZmluaXR5ICovCisKK3N0YXRpYyBjb25zdCBjaGFyIHJlcF9taW5bXSA9IHsgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgfTsKK3N0YXRpYyBjb25zdCBjaGFyIHJlcF9tYXhbXSA9IHsgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgfTsKKworLyogTWF4aW11bSBudW1iZXIgb2Ygb3ZlY3RvciBlbGVtZW50cyB0aGF0IGNhbiBiZSBzYXZlZCBvbiB0aGUgc3lzdGVtIHN0YWNrCit3aGVuIHByb2Nlc3NpbmcgT1BfUkVDVVJTRSBpbiBub24tSEVBUF9NQVRDSF9SRUNVUlNFIG1vZGUuIElmIHRoZSBvdmVjdG9yIGlzCitiaWdnZXIsIG1hbGxvYygpIGlzIHVzZWQuIFRoaXMgdmFsdWUgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgMywgYmVjYXVzZSB0aGUKK292ZWN0b3IgbGVuZ3RoIGlzIGFsd2F5cyBhIG11bHRpcGxlIG9mIDMuICovCisKKyNkZWZpbmUgT1BfUkVDVVJTRV9TVEFDS19TQVZFX01BWCA0NQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgTWF0Y2ggYSBiYWNrLXJlZmVyZW5jZSAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gaXQgaXMga25vd24gdGhhdCB0aGUgb2Zmc2V0IGxpZXMgd2l0aGluCit0aGUgb2Zmc2V0cyB0aGF0IGhhdmUgc28gZmFyIGJlZW4gdXNlZCBpbiB0aGUgbWF0Y2guIE5vdGUgdGhhdCBpbiBjYXNlbGVzcworVVRGLTggbW9kZSwgdGhlIG51bWJlciBvZiBzdWJqZWN0IGJ5dGVzIG1hdGNoZWQgbWF5IGJlIGRpZmZlcmVudCB0byB0aGUgbnVtYmVyCitvZiByZWZlcmVuY2UgYnl0ZXMuIChJbiB0aGVvcnkgdGhpcyBjb3VsZCBhbHNvIGhhcHBlbiBpbiBVVEYtMTYgbW9kZSwgYnV0IGl0CitzZWVtcyB1bmxpa2VseS4pCisKK0FyZ3VtZW50czoKKyAgb2Zmc2V0ICAgICAgaW5kZXggaW50byB0aGUgb2Zmc2V0IHZlY3RvcgorICBvZmZzZXRfdG9wICB0b3Agb2YgdGhlIHVzZWQgb2Zmc2V0IHZlY3RvcgorICBlcHRyICAgICAgICBwb2ludGVyIGludG8gdGhlIHN1YmplY3QKKyAgbWIgICAgICAgICAgcG9pbnRzIHRvIG1hdGNoIGJsb2NrCisgIGNhc2VsZXNzICAgIFRSVUUgaWYgY2FzZWxlc3MKKyAgbGVuZ3RocHRyICAgcG9pbnRlciBmb3IgcmV0dXJuaW5nIHRoZSBsZW5ndGggbWF0Y2hlZAorCitSZXR1cm5zOiAgICAgID0gMCBzdWNlc3NmdWwgbWF0Y2g7IG51bWJlciBvZiBjb2RlIHVuaXRzIG1hdGNoZWQgaXMgc2V0CisgICAgICAgICAgICAgIDwgMCBubyBtYXRjaAorICAgICAgICAgICAgICA+IDAgcGFydGlhbCBtYXRjaAorKi8KKworc3RhdGljIGludAorbWF0Y2hfcmVmKFBDUkUyX1NJWkUgb2Zmc2V0LCBQQ1JFMl9TSVpFIG9mZnNldF90b3AsIHJlZ2lzdGVyIFBDUkUyX1NQVFIgZXB0ciwKKyAgbWF0Y2hfYmxvY2sgKm1iLCBCT09MIGNhc2VsZXNzLCBQQ1JFMl9TSVpFICpsZW5ndGhwdHIpCit7CisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUKK0JPT0wgdXRmID0gKG1iLT5wb3B0aW9ucyAmIFBDUkUyX1VURikgIT0gMDsKKyNlbmRpZgorCityZWdpc3RlciBQQ1JFMl9TUFRSIHA7CitQQ1JFMl9TSVpFIGxlbmd0aDsKK1BDUkUyX1NQVFIgZXB0cl9zdGFydCA9IGVwdHI7CisKKy8qIERlYWwgd2l0aCBhbiB1bnNldCBncm91cC4gVGhlIGRlZmF1bHQgaXMgbm8gbWF0Y2gsIGJ1dCB0aGVyZSBpcyBhbiBvcHRpb24gdG8KK21hdGNoIGFuIGVtcHR5IHN0cmluZy4gKi8KKworaWYgKG9mZnNldCA+PSBvZmZzZXRfdG9wIHx8IG1iLT5vdmVjdG9yW29mZnNldF0gPT0gUENSRTJfVU5TRVQpCisgIHsKKyAgaWYgKChtYi0+cG9wdGlvbnMgJiBQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGKSAhPSAwKQorICAgIHsKKyAgICAqbGVuZ3RocHRyID0gMDsKKyAgICByZXR1cm4gMDsgICAgICAvKiBNYXRjaCAqLworICAgIH0KKyAgZWxzZSByZXR1cm4gLTE7ICAvKiBObyBtYXRjaCAqLworICB9CisKKy8qIFNlcGFyYXRlIHRoZSBjYXNlbGVzcyBhbmQgVVRGIGNhc2VzIGZvciBzcGVlZC4gKi8KKworcCA9IG1iLT5zdGFydF9zdWJqZWN0ICsgbWItPm92ZWN0b3Jbb2Zmc2V0XTsKK2xlbmd0aCA9IG1iLT5vdmVjdG9yW29mZnNldCsxXSAtIG1iLT5vdmVjdG9yW29mZnNldF07CisKK2lmIChjYXNlbGVzcykKKyAgeworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFCisgIGlmICh1dGYpCisgICAgeworICAgIC8qIE1hdGNoIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgcmVmZXJlbmNlLiBOT1RFOiB0aGUgbnVtYmVyIG9mCisgICAgY29kZSB1bml0cyBtYXRjaGVkIG1heSBkaWZmZXIsIGJlY2F1c2UgaW4gVVRGLTggdGhlcmUgYXJlIHNvbWUgY2hhcmFjdGVycworICAgIHdob3NlIHVwcGVyIGFuZCBsb3dlciBjYXNlIHZlcnNpb25zIGNvZGUgaGF2ZSBkaWZmZXJlbnQgbnVtYmVycyBvZiBieXRlcy4KKyAgICBGb3IgZXhhbXBsZSwgVSswMjNBICgyIGJ5dGVzIGluIFVURi04KSBpcyB0aGUgdXBwZXIgY2FzZSB2ZXJzaW9uIG9mIFUrMkM2NQorICAgICgzIGJ5dGVzIGluIFVURi04KTsgYSBzZXF1ZW5jZSBvZiAzIG9mIHRoZSBmb3JtZXIgdXNlcyA2IGJ5dGVzLCBhcyBkb2VzIGEKKyAgICBzZXF1ZW5jZSBvZiB0d28gb2YgdGhlIGxhdHRlci4gSXQgaXMgaW1wb3J0YW50LCB0aGVyZWZvcmUsIHRvIGNoZWNrIHRoZQorICAgIGxlbmd0aCBhbG9uZyB0aGUgcmVmZXJlbmNlLCBub3QgYWxvbmcgdGhlIHN1YmplY3QgKGVhcmxpZXIgY29kZSBkaWQgdGhpcworICAgIHdyb25nKS4gKi8KKworICAgIFBDUkUyX1NQVFIgZW5kcHRyID0gcCArIGxlbmd0aDsKKyAgICB3aGlsZSAocCA8IGVuZHB0cikKKyAgICAgIHsKKyAgICAgIHVpbnQzMl90IGMsIGQ7CisgICAgICBjb25zdCB1Y2RfcmVjb3JkICp1cjsKKyAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkgcmV0dXJuIDE7ICAgLyogUGFydGlhbCBtYXRjaCAqLworICAgICAgR0VUQ0hBUklOQyhjLCBlcHRyKTsKKyAgICAgIEdFVENIQVJJTkMoZCwgcCk7CisgICAgICB1ciA9IEdFVF9VQ0QoZCk7CisgICAgICBpZiAoYyAhPSBkICYmIGMgIT0gKHVpbnQzMl90KSgoaW50KWQgKyB1ci0+b3RoZXJfY2FzZSkpCisgICAgICAgIHsKKyAgICAgICAgY29uc3QgdWludDMyX3QgKnBwID0gUFJJVih1Y2RfY2FzZWxlc3Nfc2V0cykgKyB1ci0+Y2FzZXNldDsKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGMgPCAqcHApIHJldHVybiAtMTsgIC8qIE5vIG1hdGNoICovCisgICAgICAgICAgaWYgKGMgPT0gKnBwKyspIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgZWxzZQorI2VuZGlmCisKKyAgICAvKiBOb3QgaW4gVVRGIG1vZGUgKi8KKworICAgIHsKKyAgICBmb3IgKDsgbGVuZ3RoID4gMDsgbGVuZ3RoLS0pCisgICAgICB7CisgICAgICB1aW50MzJfdCBjYywgY3A7CisgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpIHJldHVybiAxOyAgIC8qIFBhcnRpYWwgbWF0Y2ggKi8KKyAgICAgIGNjID0gVUNIQVIyMVRFU1QoZXB0cik7CisgICAgICBjcCA9IFVDSEFSMjFURVNUKHApOworICAgICAgaWYgKFRBQkxFX0dFVChjcCwgbWItPmxjYywgY3ApICE9IFRBQkxFX0dFVChjYywgbWItPmxjYywgY2MpKQorICAgICAgICByZXR1cm4gLTE7ICAvKiBObyBtYXRjaCAqLworICAgICAgcCsrOworICAgICAgZXB0cisrOworICAgICAgfQorICAgIH0KKyAgfQorCisvKiBJbiB0aGUgY2FzZWZ1bCBjYXNlLCB3ZSBjYW4ganVzdCBjb21wYXJlIHRoZSBjb2RlIHVuaXRzLCB3aGV0aGVyIG9yIG5vdCB3ZQorYXJlIGluIFVURiBtb2RlLiAqLworCitlbHNlCisgIHsKKyAgZm9yICg7IGxlbmd0aCA+IDA7IGxlbmd0aC0tKQorICAgIHsKKyAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpIHJldHVybiAxOyAgIC8qIFBhcnRpYWwgbWF0Y2ggKi8KKyAgICBpZiAoVUNIQVIyMUlOQ1RFU1QocCkgIT0gVUNIQVIyMUlOQ1RFU1QoZXB0cikpIHJldHVybiAtMTsgIC8qTm8gbWF0Y2ggKi8KKyAgICB9CisgIH0KKworKmxlbmd0aHB0ciA9IGVwdHIgLSBlcHRyX3N0YXJ0OworcmV0dXJuIDA7ICAvKiBNYXRjaCAqLworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgIFJFQ1VSU0lPTiBJTiBUSEUgbWF0Y2goKSBGVU5DVElPTgorCitUaGUgbWF0Y2goKSBmdW5jdGlvbiBpcyBoaWdobHkgcmVjdXJzaXZlLCB0aG91Z2ggbm90IGV2ZXJ5IHJlY3Vyc2l2ZSBjYWxsCitpbmNyZWFzZXMgdGhlIHJlY3Vyc2lvbiBkZXB0aC4gTmV2ZXJ0aGVsZXNzLCBzb21lIHJlZ3VsYXIgZXhwcmVzc2lvbnMgY2FuIGNhdXNlCitpdCB0byByZWN1cnNlIHRvIGEgZ3JlYXQgZGVwdGguIEkgd2FzIHdyaXRpbmcgZm9yIFVuaXgsIHNvIEkganVzdCBsZXQgaXQgY2FsbAoraXRzZWxmIHJlY3Vyc2l2ZWx5LiBUaGlzIHVzZXMgdGhlIHN0YWNrIGZvciBzYXZpbmcgZXZlcnl0aGluZyB0aGF0IGhhcyB0byBiZQorc2F2ZWQgZm9yIGEgcmVjdXJzaXZlIGNhbGwuIE9uIFVuaXgsIHRoZSBzdGFjayBjYW4gYmUgbGFyZ2UsIGFuZCB0aGlzIHdvcmtzCitmaW5lLgorCitJdCB0dXJucyBvdXQgdGhhdCBvbiBzb21lIG5vbi1Vbml4LWxpa2Ugc3lzdGVtcyB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aAorcHJvZ3JhbXMgdGhhdCB1c2UgYSBsb3Qgb2Ygc3RhY2suIChUaGlzIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBldmVyeSBsYXN0IGNoaXAKK2hhcyBvb2RsZXMgb2YgbWVtb3J5IHRoZXNlIGRheXMsIGFuZCB0ZWNobmlxdWVzIGZvciBleHRlbmRpbmcgdGhlIHN0YWNrIGhhdmUKK2JlZW4ga25vd24gZm9yIGRlY2FkZXMuKSBTby4uLi4KKworVGhlcmUgaXMgYSBmdWRnZSwgdHJpZ2dlcmVkIGJ5IGRlZmluaW5nIEhFQVBfTUFUQ0hfUkVDVVJTRSwgd2hpY2ggYXZvaWRzCityZWN1cnNpdmUgY2FsbHMgYnkga2VlcGluZyBsb2NhbCB2YXJpYWJsZXMgdGhhdCBuZWVkIHRvIGJlIHByZXNlcnZlZCBpbiBibG9ja3MKK29mIG1lbW9yeSBvbiB0aGUgaGVhcCBpbnN0ZWFkIGluc3RlYWQgb2Ygb24gdGhlIHN0YWNrLiBNYWNyb3MgYXJlIHVzZWQgdG8KK2FjaGlldmUgdGhpcyBzbyB0aGF0IHRoZSBhY3R1YWwgY29kZSBkb2Vzbid0IGxvb2sgdmVyeSBkaWZmZXJlbnQgdG8gd2hhdCBpdAorYWx3YXlzIHVzZWQgdG8uCisKK1RoZSBvcmlnaW5hbCBoZWFwLXJlY3Vyc2l2ZSBjb2RlIHVzZWQgbG9uZ2ptcCgpLiBIb3dldmVyLCBpdCBzZWVtcyB0aGF0IHRoaXMKK2NhbiBiZSB2ZXJ5IHNsb3cgb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4gRm9sbG93aW5nIGEgc3VnZ2VzdGlvbiBmcm9tIFN0YW4KK1N3aXR6ZXIsIHRoZSB1c2Ugb2YgbG9uZ2ptcCgpIGhhcyBiZWVuIGFib2xpc2hlZCwgYXQgdGhlIGNvc3Qgb2YgaGF2aW5nIHRvCitwcm92aWRlIGEgdW5pcXVlIG51bWJlciBmb3IgZWFjaCBjYWxsIHRvIFJNQVRDSC4gVGhlcmUgaXMgbm8gd2F5IG9mIGdlbmVyYXRpbmcKK2Egc2VxdWVuY2Ugb2YgbnVtYmVycyBhdCBjb21waWxlIHRpbWUgaW4gQy4gSSBoYXZlIGdpdmVuIHRoZW0gbmFtZXMsIHRvIG1ha2UKK3RoZW0gc3RhbmQgb3V0IG1vcmUgY2xlYXJseS4KKworQ3J1ZGUgdGVzdHMgb24geDg2IExpbnV4IHNob3cgYSBzbWFsbCBzcGVlZHVwIG9mIGFyb3VuZCA1LTglLiBIb3dldmVyLCBvbgorRnJlZUJTRCwgYXZvaWRpbmcgbG9uZ2ptcCgpIG1vcmUgdGhhbiBoYWx2ZXMgdGhlIHRpbWUgdGFrZW4gdG8gcnVuIHRoZSBzdGFuZGFyZAordGVzdHMuIEZ1cnRoZXJtb3JlLCBub3QgdXNpbmcgbG9uZ2ptcCgpIG1lYW5zIHRoYXQgbG9jYWwgZHluYW1pYyB2YXJpYWJsZXMKK2Rvbid0IGhhdmUgaW5kZXRlcm1pbmF0ZSB2YWx1ZXM7IHRoaXMgaGFzIG1lYW50IHRoYXQgdGhlIGZyYW1lIHNpemUgY2FuIGJlCityZWR1Y2VkIGJlY2F1c2UgdGhlIHJlc3VsdCBjYW4gYmUgInBhc3NlZCBiYWNrIiBieSBzdHJhaWdodCBzZXR0aW5nIG9mIHRoZQordmFyaWFibGUgaW5zdGVhZCBvZiBiZWluZyBwYXNzZWQgaW4gdGhlIGZyYW1lLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBOdW1iZXJzIGZvciBSTUFUQ0ggY2FsbHMuIFdoZW4gdGhpcyBsaXN0IGlzIGNoYW5nZWQsIHRoZSBjb2RlIGF0IEhFQVBfUkVUVVJOCitiZWxvdyBtdXN0IGJlIHVwZGF0ZWQgaW4gc3luYy4gICovCisKK2VudW0geyBSTTE9MSwgUk0yLCAgUk0zLCAgUk00LCAgUk01LCAgUk02LCAgUk03LCAgUk04LCAgUk05LCAgUk0xMCwKKyAgICAgICBSTTExLCAgUk0xMiwgUk0xMywgUk0xNCwgUk0xNSwgUk0xNiwgUk0xNywgUk0xOCwgUk0xOSwgUk0yMCwKKyAgICAgICBSTTIxLCAgUk0yMiwgUk0yMywgUk0yNCwgUk0yNSwgUk0yNiwgUk0yNywgUk0yOCwgUk0yOSwgUk0zMCwKKyAgICAgICBSTTMxLCAgUk0zMiwgUk0zMywgUk0zNCwgUk0zNSwgUk0zNiwgUk0zNywgUk0zOCwgUk0zOSwgUk00MCwKKyAgICAgICBSTTQxLCAgUk00MiwgUk00MywgUk00NCwgUk00NSwgUk00NiwgUk00NywgUk00OCwgUk00OSwgUk01MCwKKyAgICAgICBSTTUxLCAgUk01MiwgUk01MywgUk01NCwgUk01NSwgUk01NiwgUk01NywgUk01OCwgUk01OSwgUk02MCwKKyAgICAgICBSTTYxLCAgUk02MiwgUk02MywgUk02NCwgUk02NSwgUk02NiwgUk02NywgUk02OCB9OworCisvKiBUaGVzZSB2ZXJzaW9ucyBvZiB0aGUgbWFjcm9zIHVzZSB0aGUgc3RhY2ssIGFzIG5vcm1hbC4gTm90ZSB0aGF0IHRoZSAicnciCithcmd1bWVudCBvZiBSTUFUQ0ggaXNuJ3QgYWN0dWFsbHkgdXNlZCBpbiB0aGlzIGRlZmluaXRpb24uICovCisKKyNpZm5kZWYgSEVBUF9NQVRDSF9SRUNVUlNFCisjZGVmaW5lIFJFR0lTVEVSIHJlZ2lzdGVyCisjZGVmaW5lIFJNQVRDSChyYSxyYixyYyxyZCxyZSxydykgXAorICBycmMgPSBtYXRjaChyYSxyYixtc3RhcnQscmMscmQscmUscmRlcHRoKzEpCisjZGVmaW5lIFJSRVRVUk4ocmEpIHJldHVybiByYQorI2Vsc2UKKworLyogVGhlc2UgdmVyc2lvbnMgb2YgdGhlIG1hY3JvcyBtYW5hZ2UgYSBwcml2YXRlIHN0YWNrIG9uIHRoZSBoZWFwLiBOb3RlIHRoYXQKK3RoZSAicmQiIGFyZ3VtZW50IG9mIFJNQVRDSCBpc24ndCBhY3R1YWxseSB1c2VkIGluIHRoaXMgZGVmaW5pdGlvbi4gSXQncyB0aGUgbWIKK2FyZ3VtZW50IG9mIG1hdGNoKCksIHdoaWNoIG5ldmVyIGNoYW5nZXMuICovCisKKyNkZWZpbmUgUkVHSVNURVIKKworI2RlZmluZSBSTUFUQ0gocmEscmIscmMscmQscmUscncpXAorICB7XAorICBoZWFwZnJhbWUgKm5ld2ZyYW1lID0gZnJhbWUtPlhuZXh0ZnJhbWU7XAorICBpZiAobmV3ZnJhbWUgPT0gTlVMTClcCisgICAge1wKKyAgICBuZXdmcmFtZSA9IChoZWFwZnJhbWUgKikobWItPnN0YWNrX21lbWN0bC5tYWxsb2MpXAorICAgICAgKHNpemVvZihoZWFwZnJhbWUpLCBtYi0+c3RhY2tfbWVtY3RsLm1lbW9yeV9kYXRhKTtcCisgICAgaWYgKG5ld2ZyYW1lID09IE5VTEwpIFJSRVRVUk4oUENSRTJfRVJST1JfTk9NRU1PUlkpO1wKKyAgICBuZXdmcmFtZS0+WG5leHRmcmFtZSA9IE5VTEw7XAorICAgIGZyYW1lLT5YbmV4dGZyYW1lID0gbmV3ZnJhbWU7XAorICAgIH1cCisgIGZyYW1lLT5Yd2hlcmUgPSBydztcCisgIG5ld2ZyYW1lLT5YZXB0ciA9IHJhO1wKKyAgbmV3ZnJhbWUtPlhlY29kZSA9IHJiO1wKKyAgbmV3ZnJhbWUtPlhtc3RhcnQgPSBtc3RhcnQ7XAorICBuZXdmcmFtZS0+WG9mZnNldF90b3AgPSByYztcCisgIG5ld2ZyYW1lLT5YZXB0cmIgPSByZTtcCisgIG5ld2ZyYW1lLT5YcmRlcHRoID0gZnJhbWUtPlhyZGVwdGggKyAxO1wKKyAgbmV3ZnJhbWUtPlhwcmV2ZnJhbWUgPSBmcmFtZTtcCisgIGZyYW1lID0gbmV3ZnJhbWU7XAorICBnb3RvIEhFQVBfUkVDVVJTRTtcCisgIExfIyNydzo7XAorICB9CisKKyNkZWZpbmUgUlJFVFVSTihyYSlcCisgIHtcCisgIGhlYXBmcmFtZSAqb2xkZnJhbWUgPSBmcmFtZTtcCisgIGZyYW1lID0gb2xkZnJhbWUtPlhwcmV2ZnJhbWU7XAorICBpZiAoZnJhbWUgIT0gTlVMTClcCisgICAge1wKKyAgICBycmMgPSByYTtcCisgICAgZ290byBIRUFQX1JFVFVSTjtcCisgICAgfVwKKyAgcmV0dXJuIHJhO1wKKyAgfQorCisKKy8qIFN0cnVjdHVyZSBmb3IgcmVtZW1iZXJpbmcgdGhlIGxvY2FsIHZhcmlhYmxlcyBpbiBhIHByaXZhdGUgZnJhbWUuIEFycmFuZ2UgaXQKK3NvIGFzIHRvIG1pbmltaXplIHRoZSBudW1iZXIgb2YgaG9sZXMuICovCisKK3R5cGVkZWYgc3RydWN0IGhlYXBmcmFtZSB7CisgIHN0cnVjdCBoZWFwZnJhbWUgKlhwcmV2ZnJhbWU7CisgIHN0cnVjdCBoZWFwZnJhbWUgKlhuZXh0ZnJhbWU7CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgUENSRTJfU1BUUiBYY2hhcnB0cjsKKyNlbmRpZgorICBQQ1JFMl9TUFRSIFhlcHRyOworICBQQ1JFMl9TUFRSIFhlY29kZTsKKyAgUENSRTJfU1BUUiBYbXN0YXJ0OworICBQQ1JFMl9TUFRSIFhjYWxscGF0OworICBQQ1JFMl9TUFRSIFhkYXRhOworICBQQ1JFMl9TUFRSIFhuZXh0X2Vjb2RlOworICBQQ1JFMl9TUFRSIFhwcDsKKyAgUENSRTJfU1BUUiBYcHJldjsKKyAgUENSRTJfU1BUUiBYc2F2ZWRfZXB0cjsKKworICBlcHRyYmxvY2sgKlhlcHRyYjsKKworICBQQ1JFMl9TSVpFIFhsZW5ndGg7CisgIFBDUkUyX1NJWkUgWG9mZnNldDsKKyAgUENSRTJfU0laRSBYb2Zmc2V0X3RvcDsKKyAgUENSRTJfU0laRSBYc2F2ZV9vZmZzZXQxLCBYc2F2ZV9vZmZzZXQyLCBYc2F2ZV9vZmZzZXQzOworCisgIHVpbnQzMl90IFhmYzsKKyAgdWludDMyX3QgWG51bWJlcjsKKyAgdWludDMyX3QgWHJkZXB0aDsKKyAgdWludDMyX3QgWG9wOworICB1aW50MzJfdCBYc2F2ZV9jYXB0dXJlX2xhc3Q7CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgdWludDMyX3QgWHByb3BfdmFsdWU7CisgIGludCBYcHJvcF90eXBlOworICBpbnQgWHByb3BfZmFpbF9yZXN1bHQ7CisgIGludCBYb2NsZW5ndGg7CisjZW5kaWYKKworICBpbnQgWGNvZGVsaW5rOworICBpbnQgWGN0eXBlOworICBpbnQgWGZpOworICBpbnQgWG1heDsKKyAgaW50IFhtaW47CisgIGludCBYd2hlcmU7ICAgIC8qIFdoZXJlIHRvIGp1bXAgYmFjayB0byAqLworCisgIEJPT0wgWGNvbmRpdGlvbjsKKyAgQk9PTCBYY3VyX2lzX3dvcmQ7CisgIEJPT0wgWHByZXZfaXNfd29yZDsKKworICBlcHRyYmxvY2sgWG5ld3B0cmI7CisgIHJlY3Vyc2lvbl9pbmZvIFhuZXdfcmVjdXJzaXZlOworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgIFBDUkUyX1VDSEFSIFhvY2NoYXJzWzZdOworI2VuZGlmCit9IGhlYXBmcmFtZTsKKworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qIFdoZW4gSEVBUF9NQVRDSF9SRUNVUlNFIGlzIG5vdCBkZWZpbmVkLCB0aGUgbWF0Y2goKSBmdW5jdGlvbiBpbXBsZW1lbnRzCitiYWNrdHJhY2sgcG9pbnRzIGJ5IGNhbGxpbmcgaXRzZWxmIHJlY3Vyc2l2ZWx5IGluIGFsbCBidXQgb25lIGNhc2UuIFRoZSBvbmUKK3NwZWNpYWwgY2FzZSBpcyB3aGVuIHByb2Nlc3NpbmcgT1BfUkVDVVJTRSwgd2hpY2ggc3BlY2lmaWVzIHJlY3Vyc2lvbiBpbiB0aGUKK3BhdHRlcm4uIFRoZSBlbnRpcmUgb3ZlY3RvciBtdXN0IGJlIHNhdmVkIGFuZCByZXN0b3JlZCB3aGlsZSBwcm9jZXNzaW5nCitPUF9SRUNVUlNFLiBJZiB0aGUgb3ZlY3RvciBpcyBzbWFsbCBlbm91Z2gsIGluc3RlYWQgb2YgY2FsbGluZyBtYXRjaCgpCitkaXJlY3RseSwgb3BfcmVjdXJzZV9vdmVjc2F2ZSgpIGlzIGNhbGxlZC4gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBzeXN0ZW0gc3RhY2sKK3RvIHNhdmUgdGhlIG92ZWN0b3Igd2hpbGUgY2FsbGluZyBtYXRjaCgpIHRvIHByb2Nlc3MgdGhlIHBhdHRlcm4gcmVjdXJzaW9uLiAqLworCisjaWZuZGVmIEhFQVBfTUFUQ0hfUkVDVVJTRQorCisvKiBXZSBuZWVkIGEgcHJvdG90eXBlIGZvciBtYXRjaCgpIGJlY2F1c2UgaXQgaXMgbXV0dWFsbHkgcmVjdXJzaXZlIHdpdGgKK29wX3JlY3Vyc2Vfb3ZlY3NhdmUoKS4gKi8KKworc3RhdGljIGludAorbWF0Y2goUkVHSVNURVIgUENSRTJfU1BUUiBlcHRyLCBSRUdJU1RFUiBQQ1JFMl9TUFRSIGVjb2RlLCBQQ1JFMl9TUFRSIG1zdGFydCwKKyAgUENSRTJfU0laRSBvZmZzZXRfdG9wLCBtYXRjaF9ibG9jayAqbWIsIGVwdHJibG9jayAqZXB0cmIsIHVpbnQzMl90IHJkZXB0aCk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBQcm9jZXNzIE9QX1JFQ1VSU0UsIHN0YWNraW5nIG92ZWN0b3IgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBtYi0+cmVjdXJzaXZlIGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCB0bworcG9pbnQgdG8gYSBuZXcgcmVjdXJzaW9uIGRhdGEgYmxvY2ssIGFuZCBhbGwgaXRzIGZpZWxkcyBvdGhlciB0aGFuIG92ZWNfc2F2ZQoraGF2ZSBiZWVuIHNldC4KKworVGhpcyBmdW5jdGlvbiBleGlzdHMgc28gdGhhdCB0aGUgbG9jYWwgdmVjdG9yIHZhcmlhYmxlIG92ZWNzYXZlIGlzIG5vIGxvbmdlcgorZGVmaW5lZCBpbiB0aGUgbWF0Y2goKSBmdW5jdGlvbiwgYXMgaXQgd2FzIGluIFBDUkUxLiBJdCBpcyB1c2VkIG9ubHkgd2hlbiB0aGVyZQoraXMgcmVjdXJzaW9uIGluIHRoZSBwYXR0ZXJuLCBzbyBpdCB3YXN0ZXMgYSBsb3Qgb2Ygc3RhY2sgdG8gaGF2ZSBpdCBkZWZpbmVkIGZvcgorZXZlcnkgY2FsbCBvZiBtYXRjaCgpLiBXZSBub3cgdXNlIHRoaXMgZnVuY3Rpb24gYXMgYW4gaW5kaXJlY3Qgd2F5IG9mIGNhbGxpbmcKK21hdGNoKCkgb25seSBpbiB0aGUgY2FzZSB3aGVuIG92ZWNzYXZlIGlzIG5lZWRlZC4gKERhdmlkIFdoZWVsZXIgdXNlZCB0byBzYXkKKyJBbGwgcHJvYmxlbXMgaW4gY29tcHV0ZXIgc2NpZW5jZSBjYW4gYmUgc29sdmVkIGJ5IGFub3RoZXIgbGV2ZWwgb2YKK2luZGlyZWN0aW9uLiIpCisKK0hPV0VWRVI6IHdoZW4gdGhpcyBmaWxlIGlzIGNvbXBpbGVkIGJ5IGdjYyBpbiBhbiBvcHRpbWl6aW5nIG1vZGUsIGJlY2F1c2UgdGhpcworZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgb25jZSwgYW5kIG9ubHkgZnJvbSB3aXRoaW4gbWF0Y2goKSwgZ2NjIHdpbGwgImlubGluZSIKK2l0IC0gdGhhdCBpcywgbW92ZSBpdCBpbnNpZGUgbWF0Y2goKSAtIGFuZCB0aGlzIGNvbXBsZXRlbHkgbmVnYXRlcyBpdHMgcmVhc29uCitmb3IgZXhpc3RlbmNlLiBUaGVyZWZvcmUsIHdlIG1hcmsgaXQgYXMgbm9uLWlubGluZSB3aGVuIGdjYyBpcyBpbiB1c2UuCisKK0FyZ3VtZW50czoKKyAgZXB0ciAgICAgICAgcG9pbnRlciB0byBjdXJyZW50IGNoYXJhY3RlciBpbiBzdWJqZWN0CisgIGNhbGxwYXQgICAgIHRoZSByZWN1cnNpb24gcG9pbnQgaW4gdGhlIHBhdHRlcm4KKyAgbXN0YXJ0ICAgICAgcG9pbnRlciB0byB0aGUgY3VycmVudCBtYXRjaCBzdGFydCBwb3NpdGlvbiAoY2FuIGJlIG1vZGlmaWVkCisgICAgICAgICAgICAgICAgYnkgZW5jb3VudGVyaW5nIFxLKQorICBvZmZzZXRfdG9wICBjdXJyZW50IHRvcCBwb2ludGVyIChoaWdoZXN0IG92ZWN0b3Igb2Zmc2V0IHVzZWQgKyAxKQorICBtYiAgICAgICAgICBwb2ludGVyIHRvICJzdGF0aWMiIGluZm8gYmxvY2sgZm9yIHRoZSBtYXRjaAorICBlcHRyYiAgICAgICBwb2ludGVyIHRvIGNoYWluIG9mIGJsb2NrcyBjb250YWluaW5nIGVwdHIgYXQgc3RhcnQgb2YKKyAgICAgICAgICAgICAgICBicmFja2V0cyAtIGZvciB0ZXN0aW5nIGZvciBlbXB0eSBtYXRjaGVzCisgIHJkZXB0aCAgICAgIHRoZSByZWN1cnNpb24gZGVwdGgKKworUmV0dXJuczogICAgICBhIG1hdGNoKCkgcmV0dXJuIGNvZGUKKyovCisKK3N0YXRpYyBpbnQKKyNpZmRlZiBfX0dOVUNfXworX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyNlbmRpZgorb3BfcmVjdXJzZV9vdmVjc2F2ZShSRUdJU1RFUiBQQ1JFMl9TUFRSIGVwdHIsIFBDUkUyX1NQVFIgY2FsbHBhdCwKKyAgUENSRTJfU1BUUiBtc3RhcnQsIFBDUkUyX1NJWkUgb2Zmc2V0X3RvcCwgbWF0Y2hfYmxvY2sgKm1iLCBlcHRyYmxvY2sgKmVwdHJiLAorICB1aW50MzJfdCByZGVwdGgpCit7CityZWdpc3RlciBpbnQgcnJjOworQk9PTCBjYmVncm91cCA9ICpjYWxscGF0ID49IE9QX1NCUkE7CityZWN1cnNpb25faW5mbyAqbmV3X3JlY3Vyc2l2ZSA9IG1iLT5yZWN1cnNpdmU7CitQQ1JFMl9TSVpFIG92ZWNzYXZlW09QX1JFQ1VSU0VfU1RBQ0tfU0FWRV9NQVhdOworCisvKiBTYXZlIHRoZSBvdmVjdG9yICovCisKK25ld19yZWN1cnNpdmUtPm92ZWNfc2F2ZSA9IG92ZWNzYXZlOworbWVtY3B5KG92ZWNzYXZlLCBtYi0+b3ZlY3RvciwgbWItPm9mZnNldF9lbmQgKiBzaXplb2YoUENSRTJfU0laRSkpOworCisvKiBEbyB0aGUgcmVjdXJzaW9uLiBBZnRlciBwcm9jZXNzaW5nIGVhY2ggYWx0ZXJuYXRpdmUsIHJlc3RvcmUgdGhlIG92ZWN0b3IKK2RhdGEgYW5kIHRoZSBsYXN0IGNhcHR1cmVkIHZhbHVlLiAqLworCitkbworICB7CisgIGlmIChjYmVncm91cCkgbWItPm1hdGNoX2Z1bmN0aW9uX3R5cGUgfD0gTUFUQ0hfQ0JFR1JPVVA7CisgIHJyYyA9IG1hdGNoKGVwdHIsIGNhbGxwYXQgKyBQUklWKE9QX2xlbmd0aHMpWypjYWxscGF0XSwgbXN0YXJ0LCBvZmZzZXRfdG9wLAorICAgIG1iLCBlcHRyYiwgcmRlcHRoICsgMSk7CisgIG1lbWNweShtYi0+b3ZlY3RvciwgbmV3X3JlY3Vyc2l2ZS0+b3ZlY19zYXZlLAorICAgICAgbWItPm9mZnNldF9lbmQgKiBzaXplb2YoUENSRTJfU0laRSkpOworICBtYi0+Y2FwdHVyZV9sYXN0ID0gbmV3X3JlY3Vyc2l2ZS0+c2F2ZWRfY2FwdHVyZV9sYXN0OworICBpZiAocnJjID09IE1BVENIX01BVENIIHx8IHJyYyA9PSBNQVRDSF9BQ0NFUFQpIHJldHVybiBycmM7CisKKyAgLyogUENSRSBkb2VzIG5vdCBhbGxvdyBUSEVOLCBTS0lQLCBQUlVORSBvciBDT01NSVQgdG8gZXNjYXBlIGJleW9uZCBhCisgIHJlY3Vyc2lvbjsgdGhleSBjYXVzZSBhIE5PTUFUQ0ggZm9yIHRoZSBlbnRpcmUgcmVjdXJzaW9uLiBUaGVzZSBjb2RlcworICBhcmUgZGVmaW5lZCBpbiBhIHJhbmdlIHRoYXQgY2FuIGJlIHRlc3RlZCBmb3IuICovCisKKyAgaWYgKHJyYyA+PSBNQVRDSF9CQUNLVFJBQ0tfTUlOICYmIHJyYyA8PSBNQVRDSF9CQUNLVFJBQ0tfTUFYKQorICAgIHJldHVybiBNQVRDSF9OT01BVENIOworCisgIC8qIEFueSByZXR1cm4gY29kZSBvdGhlciB0aGFuIE5PTUFUQ0ggaXMgYW4gZXJyb3IuIE90aGVyd2lzZSwgYWR2YW5jZSB0byB0aGUKKyAgbmV4dCBhbHRlcm5hdGl2ZSBvciB0byB0aGUgZW5kIG9mIHRoZSByZWN1cnNpbmcgc3VicGF0dGVybi4gSWYgdGhlcmUgd2VyZQorICBuZXN0ZWQgcmVjdXJzaW9ucywgbWItPnJlY3Vyc2l2ZSBtaWdodCBiZSBjaGFuZ2VkLCBzbyByZXNldCBpdCBiZWZvcmUKKyAgbG9vcGluZy4gKi8KKworICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIHJldHVybiBycmM7CisgIG1iLT5yZWN1cnNpdmUgPSBuZXdfcmVjdXJzaXZlOworICBjYWxscGF0ICs9IEdFVChjYWxscGF0LCAxKTsKKyAgfQord2hpbGUgKCpjYWxscGF0ID09IE9QX0FMVCk7ICAvKiBMb29wIGZvciB0aGUgYWx0ZXJuYXRpdmVzICovCisKKy8qIE5vbmUgb2YgdGhlIGFsdGVybmF0aXZlcyBtYXRjaGVkLiAqLworCityZXR1cm4gTUFUQ0hfTk9NQVRDSDsKK30KKyNlbmRpZiAgLyogSEVBUF9NQVRDSF9SRUNVUlNFICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgIE1hdGNoIGZyb20gY3VycmVudCBwb3NpdGlvbiAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5IGluIG1hbnkgY2lyY3Vtc3RhbmNlcy4gV2hlbmV2ZXIgaXQKK3JldHVybnMgYSBuZWdhdGl2ZSAoZXJyb3IpIHJlc3BvbnNlLCB0aGUgb3V0ZXIgaW5jYXJuYXRpb24gbXVzdCBhbHNvIHJldHVybiB0aGUKK3NhbWUgcmVzcG9uc2UuICovCisKKy8qIFRoZXNlIG1hY3JvcyBwYWNrIHVwIHRlc3RzIHRoYXQgYXJlIHVzZWQgZm9yIHBhcnRpYWwgbWF0Y2hpbmcsIGFuZCB3aGljaAorYXBwZWFyIHNldmVyYWwgdGltZXMgaW4gdGhlIGNvZGUuIFdlIHNldCB0aGUgImhpdCBlbmQiIGZsYWcgaWYgdGhlIHBvaW50ZXIgaXMKK2F0IHRoZSBlbmQgb2YgdGhlIHN1YmplY3QgYW5kIGFsc28gcGFzdCB0aGUgZWFybGllc3QgaW5zcGVjdGVkIGNoYXJhY3RlciAoaS5lLgorc29tZXRoaW5nIGhhcyBiZWVuIG1hdGNoZWQsIGV2ZW4gaWYgbm90IHBhcnQgb2YgdGhlIGFjdHVhbCBtYXRjaGVkIHN0cmluZykuIEZvcgoraGFyZCBwYXJ0aWFsIG1hdGNoaW5nLCB3ZSB0aGVuIHJldHVybiBpbW1lZGlhdGVseS4gVGhlIHNlY29uZCBvbmUgaXMgdXNlZCB3aGVuCit3ZSBhbHJlYWR5IGtub3cgd2UgYXJlIHBhc3QgdGhlIGVuZCBvZiB0aGUgc3ViamVjdC4gKi8KKworI2RlZmluZSBDSEVDS19QQVJUSUFMKClcCisgIGlmIChtYi0+cGFydGlhbCAhPSAwICYmIGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0ICYmIFwKKyAgICAgIGVwdHIgPiBtYi0+c3RhcnRfdXNlZF9wdHIpIFwKKyAgICB7IFwKKyAgICBtYi0+aGl0ZW5kID0gVFJVRTsgXAorICAgIGlmIChtYi0+cGFydGlhbCA+IDEpIFJSRVRVUk4oUENSRTJfRVJST1JfUEFSVElBTCk7IFwKKyAgICB9CisKKyNkZWZpbmUgU0NIRUNLX1BBUlRJQUwoKVwKKyAgaWYgKG1iLT5wYXJ0aWFsICE9IDAgJiYgZXB0ciA+IG1iLT5zdGFydF91c2VkX3B0cikgXAorICAgIHsgXAorICAgIG1iLT5oaXRlbmQgPSBUUlVFOyBcCisgICAgaWYgKG1iLT5wYXJ0aWFsID4gMSkgUlJFVFVSTihQQ1JFMl9FUlJPUl9QQVJUSUFMKTsgXAorICAgIH0KKworCisvKiBQZXJmb3JtYW5jZSBub3RlOiBJdCBtaWdodCBiZSB0ZW1wdGluZyB0byBleHRyYWN0IGNvbW1vbmx5IHVzZWQgZmllbGRzIGZyb20KK3RoZSBtYiBzdHJ1Y3R1cmUgKGUuZy4gdXRmLCBlbmRfc3ViamVjdCkgaW50byBpbmRpdmlkdWFsIHZhcmlhYmxlcyB0byBpbXByb3ZlCitwZXJmb3JtYW5jZS4gVGVzdHMgdXNpbmcgZ2NjIG9uIGEgU1BBUkMgZGlzcHJvdmVkIHRoaXM7IGluIHRoZSBmaXJzdCBjYXNlLCBpdAorbWFkZSBwZXJmb3JtYW5jZSB3b3JzZS4KKworQXJndW1lbnRzOgorICAgZXB0ciAgICAgICAgcG9pbnRlciB0byBjdXJyZW50IGNoYXJhY3RlciBpbiBzdWJqZWN0CisgICBlY29kZSAgICAgICBwb2ludGVyIHRvIGN1cnJlbnQgcG9zaXRpb24gaW4gY29tcGlsZWQgY29kZQorICAgbXN0YXJ0ICAgICAgcG9pbnRlciB0byB0aGUgY3VycmVudCBtYXRjaCBzdGFydCBwb3NpdGlvbiAoY2FuIGJlIG1vZGlmaWVkCisgICAgICAgICAgICAgICAgIGJ5IGVuY291bnRlcmluZyBcSykKKyAgIG9mZnNldF90b3AgIGN1cnJlbnQgdG9wIHBvaW50ZXIgKGhpZ2hlc3Qgb3ZlY3RvciBvZmZzZXQgdXNlZCArIDEpCisgICBtYiAgICAgICAgICBwb2ludGVyIHRvICJzdGF0aWMiIGluZm8gYmxvY2sgZm9yIHRoZSBtYXRjaAorICAgZXB0cmIgICAgICAgcG9pbnRlciB0byBjaGFpbiBvZiBibG9ja3MgY29udGFpbmluZyBlcHRyIGF0IHN0YXJ0IG9mCisgICAgICAgICAgICAgICAgIGJyYWNrZXRzIC0gZm9yIHRlc3RpbmcgZm9yIGVtcHR5IG1hdGNoZXMKKyAgIHJkZXB0aCAgICAgIHRoZSByZWN1cnNpb24gZGVwdGgKKworUmV0dXJuczogICAgICAgTUFUQ0hfTUFUQ0ggaWYgbWF0Y2hlZCAgICAgICAgICAgICkgIHRoZXNlIHZhbHVlcyBhcmUgPj0gMAorICAgICAgICAgICAgICAgTUFUQ0hfTk9NQVRDSCBpZiBmYWlsZWQgdG8gbWF0Y2ggICkKKyAgICAgICAgICAgICAgIGEgbmVnYXRpdmUgTUFUQ0hfeHh4IHZhbHVlIGZvciBQUlVORSwgU0tJUCwgZXRjCisgICAgICAgICAgICAgICBhIG5lZ2F0aXZlIFBDUkUyX0VSUk9SX3h4eCB2YWx1ZSBpZiBhYm9ydGVkIGJ5IGFuIGVycm9yIGNvbmRpdGlvbgorICAgICAgICAgICAgICAgICAoZS5nLiBzdG9wcGVkIGJ5IHJlcGVhdGVkIGNhbGwgb3IgcmVjdXJzaW9uIGxpbWl0KQorKi8KKworc3RhdGljIGludAorbWF0Y2goUkVHSVNURVIgUENSRTJfU1BUUiBlcHRyLCBSRUdJU1RFUiBQQ1JFMl9TUFRSIGVjb2RlLCBQQ1JFMl9TUFRSIG1zdGFydCwKKyAgUENSRTJfU0laRSBvZmZzZXRfdG9wLCBtYXRjaF9ibG9jayAqbWIsIGVwdHJibG9jayAqZXB0cmIsIHVpbnQzMl90IHJkZXB0aCkKK3sKKy8qIFRoZXNlIHZhcmlhYmxlcyBkbyBub3QgbmVlZCB0byBiZSBwcmVzZXJ2ZWQgb3ZlciByZWN1cnNpb24gaW4gdGhpcyBmdW5jdGlvbiwKK3NvIHRoZXkgY2FuIGJlIG9yZGluYXJ5IHZhcmlhYmxlcyBpbiBhbGwgY2FzZXMuIE1hcmsgc29tZSBvZiB0aGVtIHdpdGgKKyJyZWdpc3RlciIgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIGEgbG90IGluIGxvb3BzLiAqLworCityZWdpc3RlciBpbnQgIHJyYzsgICAgICAgICAvKiBSZXR1cm5zIGZyb20gcmVjdXJzaXZlIGNhbGxzICovCityZWdpc3RlciBpbnQgIGk7ICAgICAgICAgICAvKiBVc2VkIGZvciBsb29wcyBub3QgaW52b2x2aW5nIGNhbGxzIHRvIFJNQVRDSCgpICovCityZWdpc3RlciB1aW50MzJfdCBjOyAgICAgICAvKiBDaGFyYWN0ZXIgdmFsdWVzIG5vdCBrZXB0IG92ZXIgUk1BVENIKCkgY2FsbHMgKi8KK3JlZ2lzdGVyIEJPT0wgdXRmOyAgICAgICAgIC8qIExvY2FsIGNvcHkgb2YgVVRGIGZsYWcgZm9yIHNwZWVkICovCisKK0JPT0wgbWluaW1pemUsIHBvc3Nlc3NpdmU7IC8qIFF1YW50aWZpZXIgb3B0aW9ucyAqLworQk9PTCBjYXNlbGVzczsKK2ludCBjb25kY29kZTsKKworLyogV2hlbiByZWN1cnNpb24gaXMgbm90IGJlaW5nIHVzZWQsIGFsbCAibG9jYWwiIHZhcmlhYmxlcyB0aGF0IGhhdmUgdG8gYmUKK3ByZXNlcnZlZCBvdmVyIGNhbGxzIHRvIFJNQVRDSCgpIGFyZSBwYXJ0IG9mIGEgImZyYW1lIi4gV2Ugc2V0IHVwIHRoZSB0b3AtbGV2ZWwKK2ZyYW1lIG9uIHRoZSBzdGFjayBoZXJlOyBzdWJzZXF1ZW50IGluc3RhbnRpYXRpb25zIGFyZSBvYnRhaW5lZCBmcm9tIHRoZSBoZWFwCit3aGVuZXZlciBSTUFUQ0goKSBkb2VzIGEgInJlY3Vyc2lvbiIuIFNlZSB0aGUgbWFjcm8gZGVmaW5pdGlvbnMgYWJvdmUuIFB1dHRpbmcKK3RoZSB0b3AtbGV2ZWwgb24gdGhlIHN0YWNrIHJhdGhlciB0aGFuIG1hbGxvYy1pbmcgdGhlbSBhbGwgZ2l2ZXMgYSBwZXJmb3JtYW5jZQorYm9vc3QgaW4gbWFueSBjYXNlcyB3aGVyZSB0aGVyZSBpcyBub3QgbXVjaCAicmVjdXJzaW9uIi4gKi8KKworI2lmZGVmIEhFQVBfTUFUQ0hfUkVDVVJTRQoraGVhcGZyYW1lICpmcmFtZSA9IChoZWFwZnJhbWUgKiltYi0+bWF0Y2hfZnJhbWVzX2Jhc2U7CisKKy8qIENvcHkgaW4gdGhlIG9yaWdpbmFsIGFyZ3VtZW50IHZhcmlhYmxlcyAqLworCitmcmFtZS0+WGVwdHIgPSBlcHRyOworZnJhbWUtPlhlY29kZSA9IGVjb2RlOworZnJhbWUtPlhtc3RhcnQgPSBtc3RhcnQ7CitmcmFtZS0+WG9mZnNldF90b3AgPSBvZmZzZXRfdG9wOworZnJhbWUtPlhlcHRyYiA9IGVwdHJiOworZnJhbWUtPlhyZGVwdGggPSByZGVwdGg7CisKKy8qIFRoaXMgaXMgd2hlcmUgY29udHJvbCBqdW1wcyBiYWNrIHRvIHRvIGVmZmVjdCAicmVjdXJzaW9uIiAqLworCitIRUFQX1JFQ1VSU0U6CisKKy8qIE1hY3JvcyBtYWtlIHRoZSBhcmd1bWVudCB2YXJpYWJsZXMgY29tZSBmcm9tIHRoZSBjdXJyZW50IGZyYW1lICovCisKKyNkZWZpbmUgZXB0ciAgICAgICAgICAgICAgIGZyYW1lLT5YZXB0cgorI2RlZmluZSBlY29kZSAgICAgICAgICAgICAgZnJhbWUtPlhlY29kZQorI2RlZmluZSBtc3RhcnQgICAgICAgICAgICAgZnJhbWUtPlhtc3RhcnQKKyNkZWZpbmUgb2Zmc2V0X3RvcCAgICAgICAgIGZyYW1lLT5Yb2Zmc2V0X3RvcAorI2RlZmluZSBlcHRyYiAgICAgICAgICAgICAgZnJhbWUtPlhlcHRyYgorI2RlZmluZSByZGVwdGggICAgICAgICAgICAgZnJhbWUtPlhyZGVwdGgKKworLyogRGl0dG8gZm9yIHRoZSBsb2NhbCB2YXJpYWJsZXMgKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorI2RlZmluZSBjaGFycHRyICAgICAgICAgICAgZnJhbWUtPlhjaGFycHRyCisjZGVmaW5lIHByb3BfdmFsdWUgICAgICAgICBmcmFtZS0+WHByb3BfdmFsdWUKKyNkZWZpbmUgcHJvcF90eXBlICAgICAgICAgIGZyYW1lLT5YcHJvcF90eXBlCisjZGVmaW5lIHByb3BfZmFpbF9yZXN1bHQgICBmcmFtZS0+WHByb3BfZmFpbF9yZXN1bHQKKyNkZWZpbmUgb2NsZW5ndGggICAgICAgICAgIGZyYW1lLT5Yb2NsZW5ndGgKKyNkZWZpbmUgb2NjaGFycyAgICAgICAgICAgIGZyYW1lLT5Yb2NjaGFycworI2VuZGlmCisKKworI2RlZmluZSBjYWxscGF0ICAgICAgICAgICAgZnJhbWUtPlhjYWxscGF0CisjZGVmaW5lIGNvZGVsaW5rICAgICAgICAgICBmcmFtZS0+WGNvZGVsaW5rCisjZGVmaW5lIGRhdGEgICAgICAgICAgICAgICBmcmFtZS0+WGRhdGEKKyNkZWZpbmUgbmV4dF9lY29kZSAgICAgICAgIGZyYW1lLT5YbmV4dF9lY29kZQorI2RlZmluZSBwcCAgICAgICAgICAgICAgICAgZnJhbWUtPlhwcAorI2RlZmluZSBwcmV2ICAgICAgICAgICAgICAgZnJhbWUtPlhwcmV2CisjZGVmaW5lIHNhdmVkX2VwdHIgICAgICAgICBmcmFtZS0+WHNhdmVkX2VwdHIKKworI2RlZmluZSBuZXdfcmVjdXJzaXZlICAgICAgZnJhbWUtPlhuZXdfcmVjdXJzaXZlCisKKyNkZWZpbmUgY3R5cGUgICAgICAgICAgICAgIGZyYW1lLT5YY3R5cGUKKyNkZWZpbmUgZmMgICAgICAgICAgICAgICAgIGZyYW1lLT5YZmMKKyNkZWZpbmUgZmkgICAgICAgICAgICAgICAgIGZyYW1lLT5YZmkKKyNkZWZpbmUgbGVuZ3RoICAgICAgICAgICAgIGZyYW1lLT5YbGVuZ3RoCisjZGVmaW5lIG1heCAgICAgICAgICAgICAgICBmcmFtZS0+WG1heAorI2RlZmluZSBtaW4gICAgICAgICAgICAgICAgZnJhbWUtPlhtaW4KKyNkZWZpbmUgbnVtYmVyICAgICAgICAgICAgIGZyYW1lLT5YbnVtYmVyCisjZGVmaW5lIG9mZnNldCAgICAgICAgICAgICBmcmFtZS0+WG9mZnNldAorI2RlZmluZSBvcCAgICAgICAgICAgICAgICAgZnJhbWUtPlhvcAorI2RlZmluZSBzYXZlX2NhcHR1cmVfbGFzdCAgZnJhbWUtPlhzYXZlX2NhcHR1cmVfbGFzdAorI2RlZmluZSBzYXZlX29mZnNldDEgICAgICAgZnJhbWUtPlhzYXZlX29mZnNldDEKKyNkZWZpbmUgc2F2ZV9vZmZzZXQyICAgICAgIGZyYW1lLT5Yc2F2ZV9vZmZzZXQyCisjZGVmaW5lIHNhdmVfb2Zmc2V0MyAgICAgICBmcmFtZS0+WHNhdmVfb2Zmc2V0MworCisjZGVmaW5lIGNvbmRpdGlvbiAgICAgICAgICBmcmFtZS0+WGNvbmRpdGlvbgorI2RlZmluZSBjdXJfaXNfd29yZCAgICAgICAgZnJhbWUtPlhjdXJfaXNfd29yZAorI2RlZmluZSBwcmV2X2lzX3dvcmQgICAgICAgZnJhbWUtPlhwcmV2X2lzX3dvcmQKKworI2RlZmluZSBuZXdwdHJiICAgICAgICAgICAgZnJhbWUtPlhuZXdwdHJiCisKKy8qIFdoZW4gbm9ybWFsIHN0YWNrLWJhc2VkIHJlY3Vyc2lvbiBpcyBiZWluZyB1c2VkIGZvciBtYXRjaCgpLCBsb2NhbCB2YXJpYWJsZXMKK2FyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBnZXQgcHJlc2VydmVkIGR1cmluZyByZWN1cnNpb24gaW4gdGhlIHVzdWFsIHdheS4KK0luIHRoaXMgZW52aXJvbm1lbnQsIGZpIGFuZCBpLCBhbmQgZmMgYW5kIGMsIGNhbiBiZSB0aGUgc2FtZSB2YXJpYWJsZXMuICovCisKKyNlbHNlICAgICAgICAgLyogSEVBUF9NQVRDSF9SRUNVUlNFIG5vdCBkZWZpbmVkICovCisjZGVmaW5lIGZpIGkKKyNkZWZpbmUgZmMgYworCisvKiBNYW55IG9mIHRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSB1c2VkIG9ubHkgaW4gc21hbGwgYmxvY2tzIG9mIHRoZSBjb2RlLgorTXkgbm9ybWFsIHN0eWxlIG9mIGNvZGluZyB3b3VsZCBoYXZlIGRlY2xhcmVkIHRoZW0gd2l0aGluIGVhY2ggb2YgdGhvc2UgYmxvY2tzLgorSG93ZXZlciwgaW4gb3JkZXIgdG8gYWNjb21tb2RhdGUgdGhlIHZlcnNpb24gb2YgdGhpcyBjb2RlIHRoYXQgdXNlcyBhbiBleHRlcm5hbAorInN0YWNrIiBpbXBsZW1lbnRlZCBvbiB0aGUgaGVhcCwgaXQgaXMgZWFzaWVyIHRvIGRlY2xhcmUgdGhlbSBhbGwgaGVyZSwgc28gdGhlCitkZWNsYXJhdGlvbnMgY2FuIGJlIGN1dCBvdXQgaW4gYSBibG9jay4gVGhlIG9ubHkgZGVjbGFyYXRpb25zIHdpdGhpbiBibG9ja3MKK2JlbG93IGFyZSBmb3IgdmFyaWFibGVzIHRoYXQgZG8gbm90IGhhdmUgdG8gYmUgcHJlc2VydmVkIG92ZXIgYSByZWN1cnNpdmUgY2FsbAordG8gUk1BVENIKCkuICovCisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK1BDUkUyX1NQVFIgY2hhcnB0cjsKKyNlbmRpZgorUENSRTJfU1BUUiBjYWxscGF0OworUENSRTJfU1BUUiBkYXRhOworUENSRTJfU1BUUiBuZXh0X2Vjb2RlOworUENSRTJfU1BUUiBwcDsKK1BDUkUyX1NQVFIgcHJldjsKK1BDUkUyX1NQVFIgc2F2ZWRfZXB0cjsKKworUENSRTJfU0laRSBsZW5ndGg7CitQQ1JFMl9TSVpFIG9mZnNldDsKK1BDUkUyX1NJWkUgc2F2ZV9vZmZzZXQxLCBzYXZlX29mZnNldDIsIHNhdmVfb2Zmc2V0MzsKKwordWludDMyX3QgbnVtYmVyOwordWludDMyX3Qgb3A7Cit1aW50MzJfdCBzYXZlX2NhcHR1cmVfbGFzdDsKKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQordWludDMyX3QgcHJvcF92YWx1ZTsKK2ludCBwcm9wX3R5cGU7CitpbnQgcHJvcF9mYWlsX3Jlc3VsdDsKK2ludCBvY2xlbmd0aDsKK1BDUkUyX1VDSEFSIG9jY2hhcnNbNl07CisjZW5kaWYKKworaW50IGNvZGVsaW5rOworaW50IGN0eXBlOworaW50IG1heDsKK2ludCBtaW47CisKK0JPT0wgY29uZGl0aW9uOworQk9PTCBjdXJfaXNfd29yZDsKK0JPT0wgcHJldl9pc193b3JkOworCitlcHRyYmxvY2sgbmV3cHRyYjsKK3JlY3Vyc2lvbl9pbmZvIG5ld19yZWN1cnNpdmU7CisjZW5kaWYgIC8qIEhFQVBfTUFUQ0hfUkVDVVJTRSBub3QgZGVmaW5lZCAqLworCisvKiBUbyBzYXZlIHNwYWNlIG9uIHRoZSBzdGFjayBhbmQgaW4gdGhlIGhlYXAgZnJhbWUsIEkgaGF2ZSBkb3VibGVkIHVwIG9uIHNvbWUKK29mIHRoZSBsb2NhbCB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBvbmx5IGluIGxvY2FsaXNlZCBwYXJ0cyBvZiB0aGUgY29kZSwgYnV0CitzdGlsbCBuZWVkIHRvIGJlIHByZXNlcnZlZCBvdmVyIHJlY3Vyc2l2ZSBjYWxscyBvZiBtYXRjaCgpLiBUaGVzZSBtYWNyb3MgZGVmaW5lCit0aGUgYWx0ZXJuYXRpdmUgbmFtZXMgdGhhdCBhcmUgdXNlZC4gKi8KKworI2RlZmluZSBhbGxvd196ZXJvICAgICAgY3VyX2lzX3dvcmQKKyNkZWZpbmUgY2JlZ3JvdXAgICAgICAgIGNvbmRpdGlvbgorI2RlZmluZSBjb2RlX29mZnNldCAgICAgY29kZWxpbmsKKyNkZWZpbmUgY29uZGFzc2VydCAgICAgIGNvbmRpdGlvbgorI2RlZmluZSBmb2MgICAgICAgICAgICAgbnVtYmVyCisjZGVmaW5lIG1hdGNoZWRfb25jZSAgICBwcmV2X2lzX3dvcmQKKyNkZWZpbmUgc2F2ZV9tYXJrICAgICAgIGRhdGEKKworLyogVGhlc2Ugc3RhdGVtZW50cyBhcmUgaGVyZSB0byBzdG9wIHRoZSBjb21waWxlciBjb21wbGFpbmluZyBhYm91dCB1bml0aWFsaXplZAordmFyaWFibGVzLiAqLworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCitwcm9wX3ZhbHVlID0gMDsKK3Byb3BfZmFpbF9yZXN1bHQgPSAwOworI2VuZGlmCisKKworLyogVGhpcyBsYWJlbCBpcyB1c2VkIGZvciB0YWlsIHJlY3Vyc2lvbiwgd2hpY2ggaXMgdXNlZCBpbiBhIGZldyBjYXNlcyBldmVuCit3aGVuIEhFQVBfTUFUQ0hfUkVDVVJTRSBpcyBub3QgZGVmaW5lZCwgaW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2Ygc3RhY2sKK3RoYXQgaXMgdXNlZC4gVGhhbmtzIHRvIElhbiBUYXlsb3IgZm9yIG5vdGljaW5nIHRoaXMgcG9zc2liaWxpdHkgYW5kIHNlbmRpbmcKK3RoZSBvcmlnaW5hbCBwYXRjaC4gKi8KKworVEFJTF9SRUNVUlNFOgorCisvKiBPSywgbm93IHdlIGNhbiBnZXQgb24gd2l0aCB0aGUgcmVhbCBjb2RlIG9mIHRoZSBmdW5jdGlvbi4gUmVjdXJzaXZlIGNhbGxzCithcmUgc3BlY2lmaWVkIGJ5IHRoZSBtYWNybyBSTUFUQ0ggYW5kIFJSRVRVUk4gaXMgdXNlZCB0byByZXR1cm4uIFdoZW4KK0hFQVBfTUFUQ0hfUkVDVVJTRSBpcyAqbm90KiBkZWZpbmVkLCB0aGVzZSBqdXN0IHR1cm4gaW50byBhIHJlY3Vyc2l2ZSBjYWxsIHRvCittYXRjaCgpIGFuZCBhICJyZXR1cm4iLCByZXNwZWN0aXZlbHkuIEhvd2V2ZXIsIFJNQVRDSCBpc24ndCBsaWtlIGEgZnVuY3Rpb24KK2NhbGwgYmVjYXVzZSBpdCdzIHF1aXRlIGEgY29tcGxpY2F0ZWQgbWFjcm8uIEl0IGhhcyB0byBiZSB1c2VkIGluIG9uZQorcGFydGljdWxhciB3YXkuIFRoaXMgc2hvdWxkbid0LCBob3dldmVyLCBpbXBhY3QgcGVyZm9ybWFuY2Ugd2hlbiB0cnVlIHJlY3Vyc2lvbgoraXMgYmVpbmcgdXNlZC4gKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQordXRmID0gKG1iLT5wb3B0aW9ucyAmIFBDUkUyX1VURikgIT0gMDsKKyNlbHNlCit1dGYgPSBGQUxTRTsKKyNlbmRpZgorCisvKiBGaXJzdCBjaGVjayB0aGF0IHdlIGhhdmVuJ3QgY2FsbGVkIG1hdGNoKCkgdG9vIG1hbnkgdGltZXMsIG9yIHRoYXQgd2UKK2hhdmVuJ3QgZXhjZWVkZWQgdGhlIHJlY3Vyc2l2ZSBjYWxsIGxpbWl0LiAqLworCitpZiAobWItPm1hdGNoX2NhbGxfY291bnQrKyA+PSBtYi0+bWF0Y2hfbGltaXQpIFJSRVRVUk4oUENSRTJfRVJST1JfTUFUQ0hMSU1JVCk7CitpZiAocmRlcHRoID49IG1iLT5tYXRjaF9saW1pdF9yZWN1cnNpb24pIFJSRVRVUk4oUENSRTJfRVJST1JfUkVDVVJTSU9OTElNSVQpOworCisvKiBBdCB0aGUgc3RhcnQgb2YgYSBncm91cCB3aXRoIGFuIHVubGltaXRlZCByZXBlYXQgdGhhdCBtYXkgbWF0Y2ggYW4gZW1wdHkKK3N0cmluZywgdGhlIHZhcmlhYmxlIG1iLT5tYXRjaF9mdW5jdGlvbl90eXBlIGNvbnRhaW5zIHRoZSBNQVRDSF9DQkVHUk9VUCBiaXQuCitJdCBpcyBkb25lIHRoaXMgd2F5IHRvIHNhdmUgaGF2aW5nIHRvIHVzZSBhbm90aGVyIGZ1bmN0aW9uIGFyZ3VtZW50LCB3aGljaAord291bGQgdGFrZSB1cCBzcGFjZSBvbiB0aGUgc3RhY2suIFNlZSBhbHNvIE1BVENIX0NPTkRBU1NFUlQgYmVsb3cuCisKK1doZW4gTUFUQ0hfQ0JFR1JPVVAgaXMgc2V0LCBhZGQgdGhlIGN1cnJlbnQgc3ViamVjdCBwb2ludGVyIHRvIHRoZSBjaGFpbiBvZgorc3VjaCByZW1lbWJlcmVkIHBvaW50ZXJzLCB0byBiZSBjaGVja2VkIHdoZW4gd2UgaGl0IHRoZSBjbG9zaW5nIGtldCwgaW4gb3JkZXIKK3RvIGJyZWFrIGluZmluaXRlIGxvb3BzIHRoYXQgbWF0Y2ggbm8gY2hhcmFjdGVycy4gV2hlbiBtYXRjaCgpIGlzIGNhbGxlZCBpbgorb3RoZXIgY2lyY3Vtc3RhbmNlcywgZG9uJ3QgYWRkIHRvIHRoZSBjaGFpbi4gVGhlIE1BVENIX0NCRUdST1VQIGZlYXR1cmUgbXVzdAorTk9UIGJlIHVzZWQgd2l0aCB0YWlsIHJlY3Vyc2lvbiwgYmVjYXVzZSB0aGUgbWVtb3J5IGJsb2NrIHRoYXQgaXMgdXNlZCBpcyBvbgordGhlIHN0YWNrLCBzbyBhIG5ldyBvbmUgbWF5IGJlIHJlcXVpcmVkIGZvciBlYWNoIG1hdGNoKCkuICovCisKK2lmICgobWItPm1hdGNoX2Z1bmN0aW9uX3R5cGUgJiBNQVRDSF9DQkVHUk9VUCkgIT0gMCkKKyAgeworICBuZXdwdHJiLmVwYl9zYXZlZF9lcHRyID0gZXB0cjsKKyAgbmV3cHRyYi5lcGJfcHJldiA9IGVwdHJiOworICBlcHRyYiA9ICZuZXdwdHJiOworICBtYi0+bWF0Y2hfZnVuY3Rpb25fdHlwZSAmPSB+TUFUQ0hfQ0JFR1JPVVA7CisgIH0KKworLyogTm93LCBhdCBsYXN0LCB3ZSBjYW4gc3RhcnQgcHJvY2Vzc2luZyB0aGUgb3Bjb2Rlcy4gKi8KKworZm9yICg7OykKKyAgeworICBtaW5pbWl6ZSA9IHBvc3Nlc3NpdmUgPSBGQUxTRTsKKyAgb3AgPSAqZWNvZGU7CisKKyAgc3dpdGNoKG9wKQorICAgIHsKKyAgICBjYXNlIE9QX01BUks6CisgICAgbWItPm5vbWF0Y2hfbWFyayA9IGVjb2RlICsgMjsKKyAgICBtYi0+bWFyayA9IE5VTEw7ICAgIC8qIEluIGNhc2UgcHJldmlvdXNseSBzZXQgYnkgYXNzZXJ0aW9uICovCisgICAgUk1BVENIKGVwdHIsIGVjb2RlICsgUFJJVihPUF9sZW5ndGhzKVsqZWNvZGVdICsgZWNvZGVbMV0sIG9mZnNldF90b3AsIG1iLAorICAgICAgZXB0cmIsIFJNNTUpOworICAgIGlmICgocnJjID09IE1BVENIX01BVENIIHx8IHJyYyA9PSBNQVRDSF9BQ0NFUFQpICYmCisgICAgICAgICBtYi0+bWFyayA9PSBOVUxMKSBtYi0+bWFyayA9IGVjb2RlICsgMjsKKworICAgIC8qIEEgcmV0dXJuIG9mIE1BVENIX1NLSVBfQVJHIG1lYW5zIHRoYXQgbWF0Y2hpbmcgZmFpbGVkIGF0IFNLSVAgd2l0aCBhbgorICAgIGFyZ3VtZW50LCBhbmQgd2UgbXVzdCBjaGVjayB3aGV0aGVyIHRoYXQgYXJndW1lbnQgbWF0Y2hlcyB0aGlzIE1BUksncworICAgIGFyZ3VtZW50LiBJdCBpcyBwYXNzZWQgYmFjayBpbiBtYi0+c3RhcnRfbWF0Y2hfcHRyIChhbiBvdmVybG9hZGluZyBvZiB0aGF0CisgICAgdmFyaWFibGUpLiBJZiBpdCBkb2VzIG1hdGNoLCB3ZSByZXNldCB0aGF0IHZhcmlhYmxlIHRvIHRoZSBjdXJyZW50IHN1YmplY3QKKyAgICBwb3NpdGlvbiBhbmQgcmV0dXJuIE1BVENIX1NLSVAuIE90aGVyd2lzZSwgcGFzcyBiYWNrIHRoZSByZXR1cm4gY29kZQorICAgIHVuYWx0ZXJlZC4gKi8KKworICAgIGVsc2UgaWYgKHJyYyA9PSBNQVRDSF9TS0lQX0FSRyAmJgorICAgICAgICBQUklWKHN0cmNtcCkoZWNvZGUgKyAyLCBtYi0+c3RhcnRfbWF0Y2hfcHRyKSA9PSAwKQorICAgICAgeworICAgICAgbWItPnN0YXJ0X21hdGNoX3B0ciA9IGVwdHI7CisgICAgICBSUkVUVVJOKE1BVENIX1NLSVApOworICAgICAgfQorICAgIFJSRVRVUk4ocnJjKTsKKworICAgIGNhc2UgT1BfRkFJTDoKKyAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworCisgICAgY2FzZSBPUF9DT01NSVQ6CisgICAgUk1BVENIKGVwdHIsIGVjb2RlICsgUFJJVihPUF9sZW5ndGhzKVsqZWNvZGVdLCBvZmZzZXRfdG9wLCBtYiwKKyAgICAgIGVwdHJiLCBSTTUyKTsKKyAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICBSUkVUVVJOKE1BVENIX0NPTU1JVCk7CisKKyAgICBjYXNlIE9QX1BSVU5FOgorICAgIFJNQVRDSChlcHRyLCBlY29kZSArIFBSSVYoT1BfbGVuZ3RocylbKmVjb2RlXSwgb2Zmc2V0X3RvcCwgbWIsCisgICAgICBlcHRyYiwgUk01MSk7CisgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgUlJFVFVSTihNQVRDSF9QUlVORSk7CisKKyAgICBjYXNlIE9QX1BSVU5FX0FSRzoKKyAgICBtYi0+bm9tYXRjaF9tYXJrID0gZWNvZGUgKyAyOworICAgIG1iLT5tYXJrID0gTlVMTDsgICAgLyogSW4gY2FzZSBwcmV2aW91c2x5IHNldCBieSBhc3NlcnRpb24gKi8KKyAgICBSTUFUQ0goZXB0ciwgZWNvZGUgKyBQUklWKE9QX2xlbmd0aHMpWyplY29kZV0gKyBlY29kZVsxXSwgb2Zmc2V0X3RvcCwgbWIsCisgICAgICBlcHRyYiwgUk01Nik7CisgICAgaWYgKChycmMgPT0gTUFUQ0hfTUFUQ0ggfHwgcnJjID09IE1BVENIX0FDQ0VQVCkgJiYKKyAgICAgICAgIG1iLT5tYXJrID09IE5VTEwpIG1iLT5tYXJrID0gZWNvZGUgKyAyOworICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgIFJSRVRVUk4oTUFUQ0hfUFJVTkUpOworCisgICAgY2FzZSBPUF9TS0lQOgorICAgIFJNQVRDSChlcHRyLCBlY29kZSArIFBSSVYoT1BfbGVuZ3RocylbKmVjb2RlXSwgb2Zmc2V0X3RvcCwgbWIsCisgICAgICBlcHRyYiwgUk01Myk7CisgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgbWItPnN0YXJ0X21hdGNoX3B0ciA9IGVwdHI7ICAgLyogUGFzcyBiYWNrIGN1cnJlbnQgcG9zaXRpb24gKi8KKyAgICBSUkVUVVJOKE1BVENIX1NLSVApOworCisgICAgLyogTm90ZSB0aGF0LCBmb3IgUGVybCBjb21wYXRpYmlsaXR5LCBTS0lQIHdpdGggYW4gYXJndW1lbnQgZG9lcyBOT1Qgc2V0CisgICAgbm9tYXRjaF9tYXJrLiBXaGVuIGEgcGF0dGVybiBtYXRjaCBlbmRzIHdpdGggYSBTS0lQX0FSRyBmb3Igd2hpY2ggdGhlcmUgd2FzCisgICAgbm90IGEgbWF0Y2hpbmcgbWFyaywgd2UgaGF2ZSB0byByZS1ydW4gdGhlIG1hdGNoLCBpZ25vcmluZyB0aGUgU0tJUF9BUkcKKyAgICB0aGF0IGZhaWxlZCBhbmQgYW55IHRoYXQgcHJlY2VkZSBpdCAoZWl0aGVyIHRoZXkgYWxzbyBmYWlsZWQsIG9yIHdlcmUgbm90CisgICAgdHJpZ2dlcmVkKS4gVG8gZG8gdGhpcywgd2UgbWFpbnRhaW4gYSBjb3VudCBvZiBleGVjdXRlZCBTS0lQX0FSR3MuIElmIGEKKyAgICBTS0lQX0FSRyBnZXRzIHRvIHRvcCBsZXZlbCwgdGhlIG1hdGNoIGlzIHJlLXJ1biB3aXRoIG1iLT5pZ25vcmVfc2tpcF9hcmcKKyAgICBzZXQgdG8gdGhlIGNvdW50IG9mIHRoZSBvbmUgdGhhdCBmYWlsZWQuICovCisKKyAgICBjYXNlIE9QX1NLSVBfQVJHOgorICAgIG1iLT5za2lwX2FyZ19jb3VudCsrOworICAgIGlmIChtYi0+c2tpcF9hcmdfY291bnQgPD0gbWItPmlnbm9yZV9za2lwX2FyZykKKyAgICAgIHsKKyAgICAgIGVjb2RlICs9IFBSSVYoT1BfbGVuZ3RocylbKmVjb2RlXSArIGVjb2RlWzFdOworICAgICAgYnJlYWs7CisgICAgICB9CisgICAgUk1BVENIKGVwdHIsIGVjb2RlICsgUFJJVihPUF9sZW5ndGhzKVsqZWNvZGVdICsgZWNvZGVbMV0sIG9mZnNldF90b3AsIG1iLAorICAgICAgZXB0cmIsIFJNNTcpOworICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworCisgICAgLyogUGFzcyBiYWNrIHRoZSBjdXJyZW50IHNraXAgbmFtZSBieSBvdmVybG9hZGluZyBtYi0+c3RhcnRfbWF0Y2hfcHRyIGFuZAorICAgIHJldHVybmluZyB0aGUgc3BlY2lhbCBNQVRDSF9TS0lQX0FSRyByZXR1cm4gY29kZS4gVGhpcyB3aWxsIGVpdGhlciBiZQorICAgIGNhdWdodCBieSBhIG1hdGNoaW5nIE1BUkssIG9yIGdldCB0byB0aGUgdG9wLCB3aGVyZSBpdCBjYXVzZXMgYSByZW1hdGNoCisgICAgd2l0aCBtYi0+aWdub3JlX3NraXBfYXJnIHNldCB0byB0aGUgdmFsdWUgb2YgbWItPnNraXBfYXJnX2NvdW50LiAqLworCisgICAgbWItPnN0YXJ0X21hdGNoX3B0ciA9IGVjb2RlICsgMjsKKyAgICBSUkVUVVJOKE1BVENIX1NLSVBfQVJHKTsKKworICAgIC8qIEZvciBUSEVOIChhbmQgVEhFTl9BUkcpIHdlIHBhc3MgYmFjayB0aGUgYWRkcmVzcyBvZiB0aGUgb3Bjb2RlLCBzbyB0aGF0CisgICAgdGhlIGJyYW5jaCBpbiB3aGljaCBpdCBvY2N1cnMgY2FuIGJlIGRldGVybWluZWQuIE92ZXJsb2FkIHRoZSBzdGFydCBvZgorICAgIG1hdGNoIHBvaW50ZXIgdG8gZG8gdGhpcy4gKi8KKworICAgIGNhc2UgT1BfVEhFTjoKKyAgICBSTUFUQ0goZXB0ciwgZWNvZGUgKyBQUklWKE9QX2xlbmd0aHMpWyplY29kZV0sIG9mZnNldF90b3AsIG1iLAorICAgICAgZXB0cmIsIFJNNTQpOworICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgIG1iLT5zdGFydF9tYXRjaF9wdHIgPSBlY29kZTsKKyAgICBSUkVUVVJOKE1BVENIX1RIRU4pOworCisgICAgY2FzZSBPUF9USEVOX0FSRzoKKyAgICBtYi0+bm9tYXRjaF9tYXJrID0gZWNvZGUgKyAyOworICAgIG1iLT5tYXJrID0gTlVMTDsgICAgLyogSW4gY2FzZSBwcmV2aW91c2x5IHNldCBieSBhc3NlcnRpb24gKi8KKyAgICBSTUFUQ0goZXB0ciwgZWNvZGUgKyBQUklWKE9QX2xlbmd0aHMpWyplY29kZV0gKyBlY29kZVsxXSwgb2Zmc2V0X3RvcCwKKyAgICAgIG1iLCBlcHRyYiwgUk01OCk7CisgICAgaWYgKChycmMgPT0gTUFUQ0hfTUFUQ0ggfHwgcnJjID09IE1BVENIX0FDQ0VQVCkgJiYKKyAgICAgICAgIG1iLT5tYXJrID09IE5VTEwpIG1iLT5tYXJrID0gZWNvZGUgKyAyOworICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgIG1iLT5zdGFydF9tYXRjaF9wdHIgPSBlY29kZTsKKyAgICBSUkVUVVJOKE1BVENIX1RIRU4pOworCisgICAgLyogSGFuZGxlIGFuIGF0b21pYyBncm91cCB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IGNhcHR1cmluZyBwYXJlbnRoZXNlcy4KKyAgICBUaGlzIGNhbiBiZSBoYW5kbGVkIGxpa2UgYW4gYXNzZXJ0aW9uLiBQcmlvciB0byA4LjEzLCBhbGwgYXRvbWljIGdyb3VwcworICAgIHdlcmUgaGFuZGxlZCB0aGlzIHdheS4gSW4gOC4xMywgdGhlIGNvZGUgd2FzIGNoYW5nZWQgYXMgYmVsb3cgZm9yIE9OQ0UsIHNvCisgICAgdGhhdCBiYWNrdXBzIHBhc3MgdGhyb3VnaCB0aGUgZ3JvdXAgYW5kIHRoZXJlYnkgcmVzZXQgY2FwdHVyZWQgdmFsdWVzLgorICAgIEhvd2V2ZXIsIHRoaXMgdXNlcyBhIGxvdCBtb3JlIHN0YWNrLCBzbyBpbiA4LjIwLCBhdG9taWMgZ3JvdXBzIHRoYXQgZG8gbm90CisgICAgY29udGFpbiBhbnkgY2FwdHVyZXMgZ2VuZXJhdGUgT1BfT05DRV9OQywgd2hpY2ggY2FuIGJlIGhhbmRsZWQgaW4gdGhlIG9sZCwKKyAgICBsZXNzIHN0YWNrIGludGVuc2l2ZSB3YXkuCisKKyAgICBDaGVjayB0aGUgYWx0ZXJuYXRpdmUgYnJhbmNoZXMgaW4gdHVybiAtIHRoZSBtYXRjaGluZyB3b24ndCBwYXNzIHRoZSBLRVQKKyAgICBmb3IgdGhpcyBraW5kIG9mIHN1YnBhdHRlcm4uIElmIGFueSBvbmUgYnJhbmNoIG1hdGNoZXMsIHdlIGNhcnJ5IG9uIGFzIGF0CisgICAgdGhlIGVuZCBvZiBhIG5vcm1hbCBicmFja2V0LCBsZWF2aW5nIHRoZSBzdWJqZWN0IHBvaW50ZXIsIGJ1dCByZXNldHRpbmcKKyAgICB0aGUgc3RhcnQtb2YtbWF0Y2ggdmFsdWUgaW4gY2FzZSBpdCB3YXMgY2hhbmdlZCBieSBcSy4gKi8KKworICAgIGNhc2UgT1BfT05DRV9OQzoKKyAgICBwcmV2ID0gZWNvZGU7CisgICAgc2F2ZWRfZXB0ciA9IGVwdHI7CisgICAgc2F2ZV9tYXJrID0gbWItPm1hcms7CisgICAgZG8KKyAgICAgIHsKKyAgICAgIFJNQVRDSChlcHRyLCBlY29kZSArIDEgKyBMSU5LX1NJWkUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk02NCk7CisgICAgICBpZiAocnJjID09IE1BVENIX01BVENIKSAgLyogTm90ZTogX25vdF8gTUFUQ0hfQUNDRVBUICovCisgICAgICAgIHsKKyAgICAgICAgbXN0YXJ0ID0gbWItPnN0YXJ0X21hdGNoX3B0cjsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGlmIChycmMgPT0gTUFUQ0hfVEhFTikKKyAgICAgICAgeworICAgICAgICBuZXh0X2Vjb2RlID0gZWNvZGUgKyBHRVQoZWNvZGUsMSk7CisgICAgICAgIGlmIChtYi0+c3RhcnRfbWF0Y2hfcHRyIDwgbmV4dF9lY29kZSAmJgorICAgICAgICAgICAgKCplY29kZSA9PSBPUF9BTFQgfHwgKm5leHRfZWNvZGUgPT0gT1BfQUxUKSkKKyAgICAgICAgICBycmMgPSBNQVRDSF9OT01BVENIOworICAgICAgICB9CisKKyAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgZWNvZGUgKz0gR0VUKGVjb2RlLDEpOworICAgICAgbWItPm1hcmsgPSBzYXZlX21hcms7CisgICAgICB9CisgICAgd2hpbGUgKCplY29kZSA9PSBPUF9BTFQpOworCisgICAgLyogSWYgaGl0IHRoZSBlbmQgb2YgdGhlIGdyb3VwICh3aGljaCBjb3VsZCBiZSByZXBlYXRlZCksIGZhaWwgKi8KKworICAgIGlmICgqZWNvZGUgIT0gT1BfT05DRV9OQyAmJiAqZWNvZGUgIT0gT1BfQUxUKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworCisgICAgLyogQ29udGludWUgYXMgZnJvbSBhZnRlciB0aGUgZ3JvdXAsIHVwZGF0aW5nIHRoZSBvZmZzZXRzIGhpZ2ggd2F0ZXIKKyAgICBtYXJrLCBzaW5jZSBleHRyYWN0cyBtYXkgaGF2ZSBiZWVuIHRha2VuLiAqLworCisgICAgZG8gZWNvZGUgKz0gR0VUKGVjb2RlLCAxKTsgd2hpbGUgKCplY29kZSA9PSBPUF9BTFQpOworCisgICAgb2Zmc2V0X3RvcCA9IG1iLT5lbmRfb2Zmc2V0X3RvcDsKKyAgICBlcHRyID0gbWItPmVuZF9tYXRjaF9wdHI7CisKKyAgICAvKiBGb3IgYSBub24tcmVwZWF0aW5nIGtldCwganVzdCBjb250aW51ZSBhdCB0aGlzIGxldmVsLiBUaGlzIGFsc28KKyAgICBoYXBwZW5zIGZvciBhIHJlcGVhdGluZyBrZXQgaWYgbm8gY2hhcmFjdGVycyB3ZXJlIG1hdGNoZWQgaW4gdGhlIGdyb3VwLgorICAgIFRoaXMgaXMgdGhlIGZvcmNpYmxlIGJyZWFraW5nIG9mIGluZmluaXRlIGxvb3BzIGFzIGltcGxlbWVudGVkIGluIFBlcmwKKyAgICA1LjAwNS4gKi8KKworICAgIGlmICgqZWNvZGUgPT0gT1BfS0VUIHx8IGVwdHIgPT0gc2F2ZWRfZXB0cikKKyAgICAgIHsKKyAgICAgIGVjb2RlICs9IDErTElOS19TSVpFOworICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAvKiBUaGUgcmVwZWF0aW5nIGtldHMgdHJ5IHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIG9yIHJlc3RhcnQgZnJvbSB0aGUKKyAgICBwcmVjZWRpbmcgYnJhY2tldCwgaW4gdGhlIGFwcHJvcHJpYXRlIG9yZGVyLiBUaGUgc2Vjb25kICJjYWxsIiBvZiBtYXRjaCgpCisgICAgdXNlcyB0YWlsIHJlY3Vyc2lvbiwgdG8gYXZvaWQgdXNpbmcgYW5vdGhlciBzdGFjayBmcmFtZS4gKi8KKworICAgIGlmICgqZWNvZGUgPT0gT1BfS0VUUk1JTikKKyAgICAgIHsKKyAgICAgIFJNQVRDSChlcHRyLCBlY29kZSArIDEgKyBMSU5LX1NJWkUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk02NSk7CisgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgIGVjb2RlID0gcHJldjsKKyAgICAgIGdvdG8gVEFJTF9SRUNVUlNFOworICAgICAgfQorICAgIGVsc2UgIC8qIE9QX0tFVFJNQVggKi8KKyAgICAgIHsKKyAgICAgIFJNQVRDSChlcHRyLCBwcmV2LCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNNjYpOworICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICBlY29kZSArPSAxICsgTElOS19TSVpFOworICAgICAgZ290byBUQUlMX1JFQ1VSU0U7CisgICAgICB9CisgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKworICAgIC8qIEhhbmRsZSBhIGNhcHR1cmluZyBicmFja2V0LCBvdGhlciB0aGFuIHRob3NlIHRoYXQgYXJlIHBvc3Nlc3NpdmUgd2l0aCBhbgorICAgIHVubGltaXRlZCByZXBlYXQuIElmIHRoZXJlIGlzIHNwYWNlIGluIHRoZSBvZmZzZXQgdmVjdG9yLCBzYXZlIHRoZSBjdXJyZW50CisgICAgc3ViamVjdCBwb3NpdGlvbiBpbiB0aGUgd29ya2luZyBzbG90IGF0IHRoZSB0b3Agb2YgdGhlIHZlY3Rvci4gV2UgbXVzdG4ndAorICAgIGNoYW5nZSB0aGUgY3VycmVudCB2YWx1ZXMgb2YgdGhlIGRhdGEgc2xvdCwgYmVjYXVzZSB0aGV5IG1heSBiZSBzZXQgZnJvbSBhCisgICAgcHJldmlvdXMgaXRlcmF0aW9uIG9mIHRoaXMgZ3JvdXAsIGFuZCBiZSByZWZlcnJlZCB0byBieSBhIHJlZmVyZW5jZSBpbnNpZGUKKyAgICB0aGUgZ3JvdXAuIEEgZmFpbHVyZSB0byBtYXRjaCBtaWdodCBvY2N1ciBhZnRlciB0aGUgZ3JvdXAgaGFzIHN1Y2NlZWRlZCwKKyAgICBpZiBzb21ldGhpbmcgbGF0ZXIgb24gZG9lc24ndCBtYXRjaC4gRm9yIHRoaXMgcmVhc29uLCB3ZSBuZWVkIHRvIHJlc3RvcmUKKyAgICB0aGUgd29ya2luZyB2YWx1ZSBhbmQgYWxzbyB0aGUgdmFsdWVzIG9mIHRoZSBmaW5hbCBvZmZzZXRzLCBpbiBjYXNlIHRoZXkKKyAgICB3ZXJlIHNldCBieSBhIHByZXZpb3VzIGl0ZXJhdGlvbiBvZiB0aGUgc2FtZSBicmFja2V0LgorCisgICAgSWYgdGhlcmUgaXNuJ3QgZW5vdWdoIHNwYWNlIGluIHRoZSBvZmZzZXQgdmVjdG9yLCB0cmVhdCB0aGlzIGFzIGlmIGl0IHdlcmUKKyAgICBhIG5vbi1jYXB0dXJpbmcgYnJhY2tldC4gRG9uJ3Qgd29ycnkgYWJvdXQgc2V0dGluZyB0aGUgZmxhZyBmb3IgdGhlIGVycm9yCisgICAgY2FzZSBoZXJlOyB0aGF0IGlzIGhhbmRsZWQgaW4gdGhlIGNvZGUgZm9yIEtFVC4gKi8KKworICAgIGNhc2UgT1BfQ0JSQToKKyAgICBjYXNlIE9QX1NDQlJBOgorICAgIG51bWJlciA9IEdFVDIoZWNvZGUsIDErTElOS19TSVpFKTsKKyAgICBvZmZzZXQgPSBudW1iZXIgPDwgMTsKKworICAgIGlmIChvZmZzZXQgPCBtYi0+b2Zmc2V0X21heCkKKyAgICAgIHsKKyAgICAgIHNhdmVfb2Zmc2V0MSA9IG1iLT5vdmVjdG9yW29mZnNldF07CisgICAgICBzYXZlX29mZnNldDIgPSBtYi0+b3ZlY3RvcltvZmZzZXQrMV07CisgICAgICBzYXZlX29mZnNldDMgPSBtYi0+b3ZlY3RvclttYi0+b2Zmc2V0X2VuZCAtIG51bWJlcl07CisgICAgICBzYXZlX2NhcHR1cmVfbGFzdCA9IG1iLT5jYXB0dXJlX2xhc3Q7CisgICAgICBzYXZlX21hcmsgPSBtYi0+bWFyazsKKworICAgICAgbWItPm92ZWN0b3JbbWItPm9mZnNldF9lbmQgLSBudW1iZXJdID0gZXB0ciAtIG1iLT5zdGFydF9zdWJqZWN0OworCisgICAgICBmb3IgKDs7KQorICAgICAgICB7CisgICAgICAgIGlmIChvcCA+PSBPUF9TQlJBKSBtYi0+bWF0Y2hfZnVuY3Rpb25fdHlwZSB8PSBNQVRDSF9DQkVHUk9VUDsKKyAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlICsgUFJJVihPUF9sZW5ndGhzKVsqZWNvZGVdLCBvZmZzZXRfdG9wLCBtYiwKKyAgICAgICAgICBlcHRyYiwgUk0xKTsKKyAgICAgICAgaWYgKHJyYyA9PSBNQVRDSF9PTkNFKSBicmVhazsgIC8qIEJhY2tpbmcgdXAgdGhyb3VnaCBhbiBhdG9taWMgZ3JvdXAgKi8KKworICAgICAgICAvKiBJZiB3ZSBiYWNrZWQgdXAgdG8gYSBUSEVOLCBjaGVjayB3aGV0aGVyIGl0IGlzIHdpdGhpbiB0aGUgY3VycmVudAorICAgICAgICBicmFuY2ggYnkgY29tcGFyaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBUSEVOIHRoYXQgaXMgcGFzc2VkIGJhY2sgd2l0aAorICAgICAgICB0aGUgZW5kIG9mIHRoZSBicmFuY2guIElmIGl0IGlzIHdpdGhpbiB0aGUgY3VycmVudCBicmFuY2gsIGFuZCB0aGUKKyAgICAgICAgYnJhbmNoIGlzIG9uZSBvZiB0d28gb3IgbW9yZSBhbHRlcm5hdGl2ZXMgKGl0IGVpdGhlciBzdGFydHMgb3IgZW5kcworICAgICAgICB3aXRoIE9QX0FMVCksIHdlIGhhdmUgcmVhY2hlZCB0aGUgbGltaXQgb2YgVEhFTidzIGFjdGlvbiwgc28gY29udmVydAorICAgICAgICB0aGUgcmV0dXJuIGNvZGUgdG8gTk9NQVRDSCwgd2hpY2ggd2lsbCBjYXVzZSBub3JtYWwgYmFja3RyYWNraW5nIHRvCisgICAgICAgIGhhcHBlbiBmcm9tIG5vdyBvbi4gT3RoZXJ3aXNlLCBUSEVOIGlzIHBhc3NlZCBiYWNrIHRvIGFuIG91dGVyCisgICAgICAgIGFsdGVybmF0aXZlLiBUaGlzIGltcGxlbWVudHMgUGVybCdzIHRyZWF0bWVudCBvZiBwYXJlbnRoZXNpemVkIGdyb3VwcywKKyAgICAgICAgd2hlcmUgYSBncm91cCBub3QgY29udGFpbmluZyB8IGRvZXMgbm90IGFmZmVjdCB0aGUgY3VycmVudCBhbHRlcm5hdGl2ZSwKKyAgICAgICAgdGhhdCBpcywgKFgpIGlzIE5PVCB0aGUgc2FtZSBhcyAoWHwoKkYpKS4gKi8KKworICAgICAgICBpZiAocnJjID09IE1BVENIX1RIRU4pCisgICAgICAgICAgeworICAgICAgICAgIG5leHRfZWNvZGUgPSBlY29kZSArIEdFVChlY29kZSwxKTsKKyAgICAgICAgICBpZiAobWItPnN0YXJ0X21hdGNoX3B0ciA8IG5leHRfZWNvZGUgJiYKKyAgICAgICAgICAgICAgKCplY29kZSA9PSBPUF9BTFQgfHwgKm5leHRfZWNvZGUgPT0gT1BfQUxUKSkKKyAgICAgICAgICAgIHJyYyA9IE1BVENIX05PTUFUQ0g7CisgICAgICAgICAgfQorCisgICAgICAgIC8qIEFueXRoaW5nIG90aGVyIHRoYW4gTk9NQVRDSCBpcyBwYXNzZWQgYmFjay4gKi8KKworICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgbWItPmNhcHR1cmVfbGFzdCA9IHNhdmVfY2FwdHVyZV9sYXN0OworICAgICAgICBlY29kZSArPSBHRVQoZWNvZGUsIDEpOworICAgICAgICBtYi0+bWFyayA9IHNhdmVfbWFyazsKKyAgICAgICAgaWYgKCplY29kZSAhPSBPUF9BTFQpIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIG1iLT5vdmVjdG9yW29mZnNldF0gPSBzYXZlX29mZnNldDE7CisgICAgICBtYi0+b3ZlY3RvcltvZmZzZXQrMV0gPSBzYXZlX29mZnNldDI7CisgICAgICBtYi0+b3ZlY3RvclttYi0+b2Zmc2V0X2VuZCAtIG51bWJlcl0gPSBzYXZlX29mZnNldDM7CisKKyAgICAgIC8qIEF0IHRoaXMgcG9pbnQsIHJyYyB3aWxsIGJlIG9uZSBvZiBNQVRDSF9PTkNFIG9yIE1BVENIX05PTUFUQ0guICovCisKKyAgICAgIFJSRVRVUk4ocnJjKTsKKyAgICAgIH0KKworICAgIC8qIEZBTEwgVEhST1VHSCAuLi4gSW5zdWZmaWNpZW50IHJvb20gZm9yIHNhdmluZyBjYXB0dXJlZCBjb250ZW50cy4gVHJlYXQKKyAgICBhcyBhIG5vbi1jYXB0dXJpbmcgYnJhY2tldC4gKi8KKworICAgIC8qIFZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlYgKi8KKyAgICAvKiBWVlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWICovCisKKyAgICAvKiBOb24tY2FwdHVyaW5nIG9yIGF0b21pYyBncm91cCwgZXhjZXB0IGZvciBwb3NzZXNzaXZlIHdpdGggdW5saW1pdGVkCisgICAgcmVwZWF0IGFuZCBPTkNFIGdyb3VwIHdpdGggbm8gY2FwdHVyZXMuIExvb3AgZm9yIGFsbCB0aGUgYWx0ZXJuYXRpdmVzLgorCisgICAgV2hlbiB3ZSBnZXQgdG8gdGhlIGZpbmFsIGFsdGVybmF0aXZlIHdpdGhpbiB0aGUgYnJhY2tldHMsIHdlIHVzZWQgdG8gcmV0dXJuCisgICAgdGhlIHJlc3VsdCBvZiBhIHJlY3Vyc2l2ZSBjYWxsIHRvIG1hdGNoKCkgd2hhdGV2ZXIgaGFwcGVuZWQgc28gaXQgd2FzCisgICAgcG9zc2libGUgdG8gcmVkdWNlIHN0YWNrIHVzYWdlIGJ5IHR1cm5pbmcgdGhpcyBpbnRvIGEgdGFpbCByZWN1cnNpb24sCisgICAgZXhjZXB0IGluIHRoZSBjYXNlIG9mIGEgcG9zc2libHkgZW1wdHkgZ3JvdXAuIEhvd2V2ZXIsIG5vdyB0aGF0IHRoZXJlIGlzCisgICAgdGhlIHBvc3NpYmxpdHkgb2YgKCpUSEVOKSBvY2N1cnJpbmcgaW4gdGhlIGZpbmFsIGFsdGVybmF0aXZlLCB0aGlzCisgICAgb3B0aW1pemF0aW9uIGlzIG5vIGxvbmdlciBhbHdheXMgcG9zc2libGUuCisKKyAgICBXZSBjYW4gb3B0aW1pemUgaWYgd2Uga25vdyB0aGVyZSBhcmUgbm8gKCpUSEVOKXMgaW4gdGhlIHBhdHRlcm47IGF0IHByZXNlbnQKKyAgICB0aGlzIGlzIHRoZSBiZXN0IHRoYXQgY2FuIGJlIGRvbmUuCisKKyAgICBNQVRDSF9PTkNFIGlzIHJldHVybmVkIHdoZW4gdGhlIGVuZCBvZiBhbiBhdG9taWMgZ3JvdXAgaXMgc3VjY2Vzc2Z1bGx5CisgICAgcmVhY2hlZCwgYnV0IHN1YnNlcXVlbnQgbWF0Y2hpbmcgZmFpbHMuIEl0IHBhc3NlcyBiYWNrIHVwIHRoZSB0cmVlIChjYXVzaW5nCisgICAgY2FwdHVyZWQgdmFsdWVzIHRvIGJlIHJlc2V0KSB1bnRpbCB0aGUgb3JpZ2luYWwgYXRvbWljIGdyb3VwIGxldmVsIGlzCisgICAgcmVhY2hlZC4gVGhpcyBpcyB0ZXN0ZWQgYnkgY29tcGFyaW5nIG1iLT5vbmNlX3RhcmdldCB3aXRoIHRoZSBzdGFydCBvZiB0aGUKKyAgICBncm91cC4gQXQgdGhpcyBwb2ludCwgdGhlIHJldHVybiBpcyBjb252ZXJ0ZWQgaW50byBNQVRDSF9OT01BVENIIHNvIHRoYXQKKyAgICBwcmV2aW91cyBiYWNrdXAgcG9pbnRzIGNhbiBiZSB0YWtlbi4gKi8KKworICAgIGNhc2UgT1BfT05DRToKKyAgICBjYXNlIE9QX0JSQToKKyAgICBjYXNlIE9QX1NCUkE6CisKKyAgICBmb3IgKDs7KQorICAgICAgeworICAgICAgaWYgKG9wID49IE9QX1NCUkEgfHwgb3AgPT0gT1BfT05DRSkKKyAgICAgICAgbWItPm1hdGNoX2Z1bmN0aW9uX3R5cGUgfD0gTUFUQ0hfQ0JFR1JPVVA7CisKKyAgICAgIC8qIElmIHRoaXMgaXMgbm90IGEgcG9zc2libHkgZW1wdHkgZ3JvdXAsIGFuZCB0aGVyZSBhcmUgbm8gKCpUSEVOKXMgaW4KKyAgICAgIHRoZSBwYXR0ZXJuLCBhbmQgdGhpcyBpcyB0aGUgZmluYWwgYWx0ZXJuYXRpdmUsIG9wdGltaXplIGFzIGRlc2NyaWJlZAorICAgICAgYWJvdmUuICovCisKKyAgICAgIGVsc2UgaWYgKCFtYi0+aGFzdGhlbiAmJiBlY29kZVtHRVQoZWNvZGUsIDEpXSAhPSBPUF9BTFQpCisgICAgICAgIHsKKyAgICAgICAgZWNvZGUgKz0gUFJJVihPUF9sZW5ndGhzKVsqZWNvZGVdOworICAgICAgICBnb3RvIFRBSUxfUkVDVVJTRTsKKyAgICAgICAgfQorCisgICAgICAvKiBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlIGhhdmUgdG8gbWFrZSBhbm90aGVyIGNhbGwgdG8gbWF0Y2goKS4gKi8KKworICAgICAgc2F2ZV9tYXJrID0gbWItPm1hcms7CisgICAgICBzYXZlX2NhcHR1cmVfbGFzdCA9IG1iLT5jYXB0dXJlX2xhc3Q7CisgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUgKyBQUklWKE9QX2xlbmd0aHMpWyplY29kZV0sIG9mZnNldF90b3AsIG1iLCBlcHRyYiwKKyAgICAgICAgUk0yKTsKKworICAgICAgLyogU2VlIGNvbW1lbnQgaW4gdGhlIGNvZGUgZm9yIGNhcHR1cmluZyBncm91cHMgYWJvdmUgYWJvdXQgaGFuZGxpbmcKKyAgICAgIFRIRU4uICovCisKKyAgICAgIGlmIChycmMgPT0gTUFUQ0hfVEhFTikKKyAgICAgICAgeworICAgICAgICBuZXh0X2Vjb2RlID0gZWNvZGUgKyBHRVQoZWNvZGUsMSk7CisgICAgICAgIGlmIChtYi0+c3RhcnRfbWF0Y2hfcHRyIDwgbmV4dF9lY29kZSAmJgorICAgICAgICAgICAgKCplY29kZSA9PSBPUF9BTFQgfHwgKm5leHRfZWNvZGUgPT0gT1BfQUxUKSkKKyAgICAgICAgICBycmMgPSBNQVRDSF9OT01BVENIOworICAgICAgICB9CisKKyAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkKKyAgICAgICAgeworICAgICAgICBpZiAocnJjID09IE1BVENIX09OQ0UpCisgICAgICAgICAgeworICAgICAgICAgIFBDUkUyX1NQVFIgc2NvZGUgPSBlY29kZTsKKyAgICAgICAgICBpZiAoKnNjb2RlICE9IE9QX09OQ0UpICAgICAgICAgICAvKiBJZiBub3QgYXQgc3RhcnQsIGZpbmQgaXQgKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlICgqc2NvZGUgPT0gT1BfQUxUKSBzY29kZSArPSBHRVQoc2NvZGUsIDEpOworICAgICAgICAgICAgc2NvZGUgLT0gR0VUKHNjb2RlLCAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAobWItPm9uY2VfdGFyZ2V0ID09IHNjb2RlKSBycmMgPSBNQVRDSF9OT01BVENIOworICAgICAgICAgIH0KKyAgICAgICAgUlJFVFVSTihycmMpOworICAgICAgICB9CisgICAgICBlY29kZSArPSBHRVQoZWNvZGUsIDEpOworICAgICAgbWItPm1hcmsgPSBzYXZlX21hcms7CisgICAgICBpZiAoKmVjb2RlICE9IE9QX0FMVCkgYnJlYWs7CisgICAgICBtYi0+Y2FwdHVyZV9sYXN0ID0gc2F2ZV9jYXB0dXJlX2xhc3Q7CisgICAgICB9CisKKyAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworCisgICAgLyogSGFuZGxlIHBvc3Nlc3NpdmUgY2FwdHVyaW5nIGJyYWNrZXRzIHdpdGggYW4gdW5saW1pdGVkIHJlcGVhdC4gV2UgY29tZQorICAgIGhlcmUgZnJvbSBCUkFaRVJPIHdpdGggYWxsb3dfemVybyBzZXQgVFJVRS4gVGhlIG92ZWN0b3IgdmFsdWVzIGFyZQorICAgIGhhbmRsZWQgc2ltaWxhcmx5IHRvIHRoZSBub3JtYWwgY2FzZSBhYm92ZS4gSG93ZXZlciwgdGhlIG1hdGNoaW5nIGlzCisgICAgZGlmZmVyZW50LiBUaGUgZW5kIG9mIHRoZXNlIGJyYWNrZXRzIHdpbGwgYWx3YXlzIGJlIE9QX0tFVFJQT1MsIHdoaWNoCisgICAgcmV0dXJucyBNQVRDSF9LRVRSUE9TIHdpdGhvdXQgZ29pbmcgZnVydGhlciBpbiB0aGUgcGF0dGVybi4gQnkgdGhpcyBtZWFucworICAgIHdlIGNhbiBoYW5kbGUgdGhlIGdyb3VwIGJ5IGl0ZXJhdGlvbiByYXRoZXIgdGhhbiByZWN1cnNpb24sIHRoZXJlYnkKKyAgICByZWR1Y2luZyB0aGUgYW1vdW50IG9mIHN0YWNrIG5lZWRlZC4gSWYgdGhlIG92ZWN0b3IgaXMgdG9vIHNtYWxsIGZvcgorICAgIGNhcHR1cmluZywgdHJlYXQgYXMgbm9uLWNhcHR1cmluZy4gKi8KKworICAgIGNhc2UgT1BfQ0JSQVBPUzoKKyAgICBjYXNlIE9QX1NDQlJBUE9TOgorICAgIGFsbG93X3plcm8gPSBGQUxTRTsKKworICAgIFBPU1NFU1NJVkVfQ0FQVFVSRToKKyAgICBudW1iZXIgPSBHRVQyKGVjb2RlLCAxK0xJTktfU0laRSk7CisgICAgb2Zmc2V0ID0gbnVtYmVyIDw8IDE7CisgICAgaWYgKG9mZnNldCA+PSBtYi0+b2Zmc2V0X21heCkgZ290byBQT1NTRVNTSVZFX05PTl9DQVBUVVJFOworCisgICAgbWF0Y2hlZF9vbmNlID0gRkFMU0U7CisgICAgY29kZV9vZmZzZXQgPSAoaW50KShlY29kZSAtIG1iLT5zdGFydF9jb2RlKTsKKworICAgIHNhdmVfb2Zmc2V0MSA9IG1iLT5vdmVjdG9yW29mZnNldF07CisgICAgc2F2ZV9vZmZzZXQyID0gbWItPm92ZWN0b3Jbb2Zmc2V0KzFdOworICAgIHNhdmVfb2Zmc2V0MyA9IG1iLT5vdmVjdG9yW21iLT5vZmZzZXRfZW5kIC0gbnVtYmVyXTsKKyAgICBzYXZlX2NhcHR1cmVfbGFzdCA9IG1iLT5jYXB0dXJlX2xhc3Q7CisKKyAgICAvKiBFYWNoIHRpbWUgcm91bmQgdGhlIGxvb3AsIHNhdmUgdGhlIGN1cnJlbnQgc3ViamVjdCBwb3NpdGlvbiBmb3IgdXNlCisgICAgd2hlbiB0aGUgZ3JvdXAgbWF0Y2hlcy4gRm9yIE1BVENIX01BVENILCB0aGUgZ3JvdXAgaGFzIG1hdGNoZWQsIHNvIHdlCisgICAgcmVzdGFydCBpdCB3aXRoIGEgbmV3IHN1YmplY3Qgc3RhcnRpbmcgcG9zaXRpb24sIHJlbWVtYmVyaW5nIHRoYXQgd2UgaGFkCisgICAgYXQgbGVhc3Qgb25lIG1hdGNoLiBGb3IgTUFUQ0hfTk9NQVRDSCwgY2Fycnkgb24gd2l0aCB0aGUgYWx0ZXJuYXRpdmVzLCBhcworICAgIHVzdWFsLiBJZiB3ZSBoYXZlbid0IG1hdGNoZWQgYW55IGFsdGVybmF0aXZlcyBpbiBhbnkgaXRlcmF0aW9uLCBjaGVjayB0bworICAgIHNlZSBpZiBhIHByZXZpb3VzIGl0ZXJhdGlvbiBtYXRjaGVkLiBJZiBzbywgdGhlIGdyb3VwIGhhcyBtYXRjaGVkOworICAgIGNvbnRpbnVlIGZyb20gYWZ0ZXJ3YXJkcy4gT3RoZXJ3aXNlIGl0IGhhcyBmYWlsZWQ7IHJlc3RvcmUgdGhlIHByZXZpb3VzCisgICAgY2FwdHVyZSB2YWx1ZXMgYmVmb3JlIHJldHVybmluZyBOT01BVENILiAqLworCisgICAgZm9yICg7OykKKyAgICAgIHsKKyAgICAgIG1iLT5vdmVjdG9yW21iLT5vZmZzZXRfZW5kIC0gbnVtYmVyXSA9IGVwdHIgLSBtYi0+c3RhcnRfc3ViamVjdDsKKyAgICAgIGlmIChvcCA+PSBPUF9TQlJBKSBtYi0+bWF0Y2hfZnVuY3Rpb25fdHlwZSB8PSBNQVRDSF9DQkVHUk9VUDsKKyAgICAgIFJNQVRDSChlcHRyLCBlY29kZSArIFBSSVYoT1BfbGVuZ3RocylbKmVjb2RlXSwgb2Zmc2V0X3RvcCwgbWIsCisgICAgICAgIGVwdHJiLCBSTTYzKTsKKyAgICAgIGlmIChycmMgPT0gTUFUQ0hfS0VUUlBPUykKKyAgICAgICAgeworICAgICAgICBvZmZzZXRfdG9wID0gbWItPmVuZF9vZmZzZXRfdG9wOworICAgICAgICBlY29kZSA9IG1iLT5zdGFydF9jb2RlICsgY29kZV9vZmZzZXQ7CisgICAgICAgIHNhdmVfY2FwdHVyZV9sYXN0ID0gbWItPmNhcHR1cmVfbGFzdDsKKyAgICAgICAgbWF0Y2hlZF9vbmNlID0gVFJVRTsKKyAgICAgICAgbXN0YXJ0ID0gbWItPnN0YXJ0X21hdGNoX3B0cjsgICAgLyogSW4gY2FzZSBcSyBjaGFuZ2VkIGl0ICovCisgICAgICAgIGlmIChlcHRyID09IG1iLT5lbmRfbWF0Y2hfcHRyKSAgIC8qIE1hdGNoZWQgYW4gZW1wdHkgc3RyaW5nICovCisgICAgICAgICAgeworICAgICAgICAgIGRvIGVjb2RlICs9IEdFVChlY29kZSwgMSk7IHdoaWxlICgqZWNvZGUgPT0gT1BfQUxUKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIGVwdHIgPSBtYi0+ZW5kX21hdGNoX3B0cjsKKyAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgLyogU2VlIGNvbW1lbnQgaW4gdGhlIGNvZGUgZm9yIGNhcHR1cmluZyBncm91cHMgYWJvdmUgYWJvdXQgaGFuZGxpbmcKKyAgICAgIFRIRU4uICovCisKKyAgICAgIGlmIChycmMgPT0gTUFUQ0hfVEhFTikKKyAgICAgICAgeworICAgICAgICBuZXh0X2Vjb2RlID0gZWNvZGUgKyBHRVQoZWNvZGUsMSk7CisgICAgICAgIGlmIChtYi0+c3RhcnRfbWF0Y2hfcHRyIDwgbmV4dF9lY29kZSAmJgorICAgICAgICAgICAgKCplY29kZSA9PSBPUF9BTFQgfHwgKm5leHRfZWNvZGUgPT0gT1BfQUxUKSkKKyAgICAgICAgICBycmMgPSBNQVRDSF9OT01BVENIOworICAgICAgICB9CisKKyAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgbWItPmNhcHR1cmVfbGFzdCA9IHNhdmVfY2FwdHVyZV9sYXN0OworICAgICAgZWNvZGUgKz0gR0VUKGVjb2RlLCAxKTsKKyAgICAgIGlmICgqZWNvZGUgIT0gT1BfQUxUKSBicmVhazsKKyAgICAgIH0KKworICAgIGlmICghbWF0Y2hlZF9vbmNlKQorICAgICAgeworICAgICAgbWItPm92ZWN0b3Jbb2Zmc2V0XSA9IHNhdmVfb2Zmc2V0MTsKKyAgICAgIG1iLT5vdmVjdG9yW29mZnNldCsxXSA9IHNhdmVfb2Zmc2V0MjsKKyAgICAgIG1iLT5vdmVjdG9yW21iLT5vZmZzZXRfZW5kIC0gbnVtYmVyXSA9IHNhdmVfb2Zmc2V0MzsKKyAgICAgIH0KKworICAgIGlmIChhbGxvd196ZXJvIHx8IG1hdGNoZWRfb25jZSkKKyAgICAgIHsKKyAgICAgIGVjb2RlICs9IDEgKyBMSU5LX1NJWkU7CisgICAgICBicmVhazsKKyAgICAgIH0KKyAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworCisgICAgLyogTm9uLWNhcHR1cmluZyBwb3NzZXNzaXZlIGJyYWNrZXQgd2l0aCB1bmxpbWl0ZWQgcmVwZWF0LiBXZSBjb21lIGhlcmUKKyAgICBmcm9tIEJSQVpFUk8gd2l0aCBhbGxvd196ZXJvID0gVFJVRS4gVGhlIGNvZGUgaXMgc2ltaWxhciB0byB0aGUgYWJvdmUsCisgICAgd2l0aG91dCB0aGUgY2FwdHVyaW5nIGNvbXBsaWNhdGlvbi4gSXQgaXMgd3JpdHRlbiBvdXQgc2VwYXJhdGVseSBmb3Igc3BlZWQKKyAgICBhbmQgY2xlYW5saW5lc3MuICovCisKKyAgICBjYXNlIE9QX0JSQVBPUzoKKyAgICBjYXNlIE9QX1NCUkFQT1M6CisgICAgYWxsb3dfemVybyA9IEZBTFNFOworCisgICAgUE9TU0VTU0lWRV9OT05fQ0FQVFVSRToKKyAgICBtYXRjaGVkX29uY2UgPSBGQUxTRTsKKyAgICBjb2RlX29mZnNldCA9IChpbnQpKGVjb2RlIC0gbWItPnN0YXJ0X2NvZGUpOworICAgIHNhdmVfY2FwdHVyZV9sYXN0ID0gbWItPmNhcHR1cmVfbGFzdDsKKworICAgIGZvciAoOzspCisgICAgICB7CisgICAgICBpZiAob3AgPj0gT1BfU0JSQSkgbWItPm1hdGNoX2Z1bmN0aW9uX3R5cGUgfD0gTUFUQ0hfQ0JFR1JPVVA7CisgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUgKyBQUklWKE9QX2xlbmd0aHMpWyplY29kZV0sIG9mZnNldF90b3AsIG1iLAorICAgICAgICBlcHRyYiwgUk00OCk7CisgICAgICBpZiAocnJjID09IE1BVENIX0tFVFJQT1MpCisgICAgICAgIHsKKyAgICAgICAgb2Zmc2V0X3RvcCA9IG1iLT5lbmRfb2Zmc2V0X3RvcDsKKyAgICAgICAgZWNvZGUgPSBtYi0+c3RhcnRfY29kZSArIGNvZGVfb2Zmc2V0OworICAgICAgICBtYXRjaGVkX29uY2UgPSBUUlVFOworICAgICAgICBtc3RhcnQgPSBtYi0+c3RhcnRfbWF0Y2hfcHRyOyAgIC8qIEluIGNhc2UgXEsgcmVzZXQgaXQgKi8KKyAgICAgICAgaWYgKGVwdHIgPT0gbWItPmVuZF9tYXRjaF9wdHIpICAvKiBNYXRjaGVkIGFuIGVtcHR5IHN0cmluZyAqLworICAgICAgICAgIHsKKyAgICAgICAgICBkbyBlY29kZSArPSBHRVQoZWNvZGUsIDEpOyB3aGlsZSAoKmVjb2RlID09IE9QX0FMVCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICBlcHRyID0gbWItPmVuZF9tYXRjaF9wdHI7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgIC8qIFNlZSBjb21tZW50IGluIHRoZSBjb2RlIGZvciBjYXB0dXJpbmcgZ3JvdXBzIGFib3ZlIGFib3V0IGhhbmRsaW5nCisgICAgICBUSEVOLiAqLworCisgICAgICBpZiAocnJjID09IE1BVENIX1RIRU4pCisgICAgICAgIHsKKyAgICAgICAgbmV4dF9lY29kZSA9IGVjb2RlICsgR0VUKGVjb2RlLDEpOworICAgICAgICBpZiAobWItPnN0YXJ0X21hdGNoX3B0ciA8IG5leHRfZWNvZGUgJiYKKyAgICAgICAgICAgICgqZWNvZGUgPT0gT1BfQUxUIHx8ICpuZXh0X2Vjb2RlID09IE9QX0FMVCkpCisgICAgICAgICAgcnJjID0gTUFUQ0hfTk9NQVRDSDsKKyAgICAgICAgfQorCisgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgIGVjb2RlICs9IEdFVChlY29kZSwgMSk7CisgICAgICBpZiAoKmVjb2RlICE9IE9QX0FMVCkgYnJlYWs7CisgICAgICBtYi0+Y2FwdHVyZV9sYXN0ID0gc2F2ZV9jYXB0dXJlX2xhc3Q7CisgICAgICB9CisKKyAgICBpZiAobWF0Y2hlZF9vbmNlIHx8IGFsbG93X3plcm8pCisgICAgICB7CisgICAgICBlY29kZSArPSAxICsgTElOS19TSVpFOworICAgICAgYnJlYWs7CisgICAgICB9CisgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKworICAgIC8qIENvbnRyb2wgbmV2ZXIgcmVhY2hlcyBoZXJlLiAqLworCisgICAgLyogQ29uZGl0aW9uYWwgZ3JvdXA6IGNvbXBpbGF0aW9uIGNoZWNrZWQgdGhhdCB0aGVyZSBhcmUgbm8gbW9yZSB0aGFuIHR3bworICAgIGJyYW5jaGVzLiBJZiB0aGUgY29uZGl0aW9uIGlzIGZhbHNlLCBza2lwcGluZyB0aGUgZmlyc3QgYnJhbmNoIHRha2VzIHVzCisgICAgcGFzdCB0aGUgZW5kIG9mIHRoZSBpdGVtIGlmIHRoZXJlIGlzIG9ubHkgb25lIGJyYW5jaCwgYnV0IHRoYXQncyBleGFjdGx5CisgICAgd2hhdCB3ZSB3YW50LiAqLworCisgICAgY2FzZSBPUF9DT05EOgorICAgIGNhc2UgT1BfU0NPTkQ6CisKKyAgICAvKiBUaGUgdmFyaWFibGUgY29kZWxpbmsgd2lsbCBiZSBhZGRlZCB0byBlY29kZSB3aGVuIHRoZSBjb25kaXRpb24gaXMKKyAgICBmYWxzZSwgdG8gZ2V0IHRvIHRoZSBzZWNvbmQgYnJhbmNoLiBTZXR0aW5nIGl0IHRvIHRoZSBvZmZzZXQgdG8gdGhlIEFMVAorICAgIG9yIEtFVCwgdGhlbiBpbmNyZW1lbnRpbmcgZWNvZGUgYWNoaWV2ZXMgdGhpcyBlZmZlY3QuIFdlIG5vdyBoYXZlIGVjb2RlCisgICAgcG9pbnRpbmcgdG8gdGhlIGNvbmRpdGlvbiBvciBjYWxsb3V0LiAqLworCisgICAgY29kZWxpbmsgPSBHRVQoZWNvZGUsIDEpOyAgIC8qIE9mZnNldCB0byB0aGUgc2Vjb25kIGJyYW5jaCAqLworICAgIGVjb2RlICs9IDEgKyBMSU5LX1NJWkU7ICAgICAvKiBGcm9tIHRoaXMgb3Bjb2RlICovCisKKyAgICAvKiBCZWNhdXNlIG9mIHRoZSB3YXkgYXV0by1jYWxsb3V0IHdvcmtzIGR1cmluZyBjb21waWxlLCBhIGNhbGxvdXQgaXRlbSBpcworICAgIGluc2VydGVkIGJldHdlZW4gT1BfQ09ORCBhbmQgYW4gYXNzZXJ0aW9uIGNvbmRpdGlvbi4gKi8KKworICAgIGlmICgqZWNvZGUgPT0gT1BfQ0FMTE9VVCB8fCAqZWNvZGUgPT0gT1BfQ0FMTE9VVF9TVFIpCisgICAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgY2FsbG91dF9sZW5ndGggPSAoKmVjb2RlID09IE9QX0NBTExPVVQpCisgICAgICAgICAgPyBQUklWKE9QX2xlbmd0aHMpW09QX0NBTExPVVRdIDogR0VUKGVjb2RlLCAxICsgMipMSU5LX1NJWkUpOworCisgICAgICBpZiAobWItPmNhbGxvdXQgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICBwY3JlMl9jYWxsb3V0X2Jsb2NrIGNiOworICAgICAgICBjYi52ZXJzaW9uICAgICAgICAgID0gMTsKKyAgICAgICAgY2IuY2FwdHVyZV90b3AgICAgICA9IG9mZnNldF90b3AvMjsKKyAgICAgICAgY2IuY2FwdHVyZV9sYXN0ICAgICA9IG1iLT5jYXB0dXJlX2xhc3QgJiBDQVBMTUFTSzsKKyAgICAgICAgY2Iub2Zmc2V0X3ZlY3RvciAgICA9IG1iLT5vdmVjdG9yOworICAgICAgICBjYi5tYXJrICAgICAgICAgICAgID0gbWItPm5vbWF0Y2hfbWFyazsKKyAgICAgICAgY2Iuc3ViamVjdCAgICAgICAgICA9IG1iLT5zdGFydF9zdWJqZWN0OworICAgICAgICBjYi5zdWJqZWN0X2xlbmd0aCAgID0gKFBDUkUyX1NJWkUpKG1iLT5lbmRfc3ViamVjdCAtIG1iLT5zdGFydF9zdWJqZWN0KTsKKyAgICAgICAgY2Iuc3RhcnRfbWF0Y2ggICAgICA9IChQQ1JFMl9TSVpFKShtc3RhcnQgLSBtYi0+c3RhcnRfc3ViamVjdCk7CisgICAgICAgIGNiLmN1cnJlbnRfcG9zaXRpb24gPSAoUENSRTJfU0laRSkoZXB0ciAtIG1iLT5zdGFydF9zdWJqZWN0KTsKKyAgICAgICAgY2IucGF0dGVybl9wb3NpdGlvbiA9IEdFVChlY29kZSwgMSk7CisgICAgICAgIGNiLm5leHRfaXRlbV9sZW5ndGggPSBHRVQoZWNvZGUsIDEgKyBMSU5LX1NJWkUpOworCisgICAgICAgIGlmICgqZWNvZGUgPT0gT1BfQ0FMTE9VVCkKKyAgICAgICAgICB7CisgICAgICAgICAgY2IuY2FsbG91dF9udW1iZXIgPSBlY29kZVsxICsgMipMSU5LX1NJWkVdOworICAgICAgICAgIGNiLmNhbGxvdXRfc3RyaW5nX29mZnNldCA9IDA7CisgICAgICAgICAgY2IuY2FsbG91dF9zdHJpbmcgPSBOVUxMOworICAgICAgICAgIGNiLmNhbGxvdXRfc3RyaW5nX2xlbmd0aCA9IDA7CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeworICAgICAgICAgIGNiLmNhbGxvdXRfbnVtYmVyID0gMDsKKyAgICAgICAgICBjYi5jYWxsb3V0X3N0cmluZ19vZmZzZXQgPSBHRVQoZWNvZGUsIDEgKyAzKkxJTktfU0laRSk7CisgICAgICAgICAgY2IuY2FsbG91dF9zdHJpbmcgPSBlY29kZSArICgxICsgNCpMSU5LX1NJWkUpICsgMTsKKyAgICAgICAgICBjYi5jYWxsb3V0X3N0cmluZ19sZW5ndGggPQorICAgICAgICAgICAgY2FsbG91dF9sZW5ndGggLSAoMSArIDQqTElOS19TSVpFKSAtIDI7CisgICAgICAgICAgfQorCisgICAgICAgIGlmICgocnJjID0gbWItPmNhbGxvdXQoJmNiLCBtYi0+Y2FsbG91dF9kYXRhKSkgPiAwKQorICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIGlmIChycmMgPCAwKSBSUkVUVVJOKHJyYyk7CisgICAgICAgIH0KKworICAgICAgLyogQWR2YW5jZSBlY29kZSBwYXN0IHRoZSBjYWxsb3V0LCBzbyBpdCBub3cgcG9pbnRzIHRvIHRoZSBjb25kaXRpb24uIFdlCisgICAgICBtdXN0IGFkanVzdCBjb2RlbGluayBzbyB0aGF0IHRoZSB2YWx1ZSBvZiBlY29kZStjb2RlbGluayBpcyB1bmNoYW5nZWQuICovCisKKyAgICAgIGVjb2RlICs9IGNhbGxvdXRfbGVuZ3RoOworICAgICAgY29kZWxpbmsgLT0gY2FsbG91dF9sZW5ndGg7CisgICAgICB9CisKKyAgICAvKiBUZXN0IHRoZSB2YXJpb3VzIHBvc3NpYmxlIGNvbmRpdGlvbnMgKi8KKworICAgIGNvbmRpdGlvbiA9IEZBTFNFOworICAgIHN3aXRjaChjb25kY29kZSA9ICplY29kZSkKKyAgICAgIHsKKyAgICAgIGNhc2UgT1BfUlJFRjogICAgICAgICAgICAgICAgICAvKiBOdW1iZXJlZCBncm91cCByZWN1cnNpb24gdGVzdCAqLworICAgICAgaWYgKG1iLT5yZWN1cnNpdmUgIT0gTlVMTCkgICAgIC8qIE5vdCByZWN1cnNpbmcgPT4gRkFMU0UgKi8KKyAgICAgICAgeworICAgICAgICB1aW50MzJfdCByZWNubyA9IEdFVDIoZWNvZGUsIDEpOyAgIC8qIFJlY3Vyc2lvbiBncm91cCBudW1iZXIqLworICAgICAgICBjb25kaXRpb24gPSAocmVjbm8gPT0gUlJFRl9BTlkgfHwgcmVjbm8gPT0gbWItPnJlY3Vyc2l2ZS0+Z3JvdXBfbnVtKTsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfRE5SUkVGOiAgICAgICAvKiBEdXBsaWNhdGUgbmFtZWQgZ3JvdXAgcmVjdXJzaW9uIHRlc3QgKi8KKyAgICAgIGlmIChtYi0+cmVjdXJzaXZlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgaW50IGNvdW50ID0gR0VUMihlY29kZSwgMSArIElNTTJfU0laRSk7CisgICAgICAgIFBDUkUyX1NQVFIgc2xvdCA9IG1iLT5uYW1lX3RhYmxlICsgR0VUMihlY29kZSwgMSkgKiBtYi0+bmFtZV9lbnRyeV9zaXplOworICAgICAgICB3aGlsZSAoY291bnQtLSA+IDApCisgICAgICAgICAgeworICAgICAgICAgIHVpbnQzMl90IHJlY25vID0gR0VUMihzbG90LCAwKTsKKyAgICAgICAgICBjb25kaXRpb24gPSByZWNubyA9PSBtYi0+cmVjdXJzaXZlLT5ncm91cF9udW07CisgICAgICAgICAgaWYgKGNvbmRpdGlvbikgYnJlYWs7CisgICAgICAgICAgc2xvdCArPSBtYi0+bmFtZV9lbnRyeV9zaXplOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfQ1JFRjogICAgICAgICAgICAgICAgICAvKiBOdW1iZXJlZCBncm91cCB1c2VkIHRlc3QgKi8KKyAgICAgIG9mZnNldCA9IEdFVDIoZWNvZGUsIDEpIDw8IDE7ICAvKiBEb3VibGVkIHJlZiBudW1iZXIgKi8KKyAgICAgIGNvbmRpdGlvbiA9IG9mZnNldCA8IG9mZnNldF90b3AgJiYKKyAgICAgICAgbWItPm92ZWN0b3Jbb2Zmc2V0XSAhPSBQQ1JFMl9VTlNFVDsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX0ROQ1JFRjogICAgICAvKiBEdXBsaWNhdGUgbmFtZWQgZ3JvdXAgdXNlZCB0ZXN0ICovCisgICAgICAgIHsKKyAgICAgICAgaW50IGNvdW50ID0gR0VUMihlY29kZSwgMSArIElNTTJfU0laRSk7CisgICAgICAgIFBDUkUyX1NQVFIgc2xvdCA9IG1iLT5uYW1lX3RhYmxlICsgR0VUMihlY29kZSwgMSkgKiBtYi0+bmFtZV9lbnRyeV9zaXplOworICAgICAgICB3aGlsZSAoY291bnQtLSA+IDApCisgICAgICAgICAgeworICAgICAgICAgIG9mZnNldCA9IEdFVDIoc2xvdCwgMCkgPDwgMTsKKyAgICAgICAgICBjb25kaXRpb24gPSBvZmZzZXQgPCBvZmZzZXRfdG9wICYmCisgICAgICAgICAgICBtYi0+b3ZlY3RvcltvZmZzZXRdICE9IFBDUkUyX1VOU0VUOworICAgICAgICAgIGlmIChjb25kaXRpb24pIGJyZWFrOworICAgICAgICAgIHNsb3QgKz0gbWItPm5hbWVfZW50cnlfc2l6ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX0ZBTFNFOgorICAgICAgY2FzZSBPUF9GQUlMOiAgIC8qIFRoZSBhc3NlcnRpb24gKD8hKSBiZWNvbWVzIE9QX0ZBSUwgKi8KKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX1RSVUU6CisgICAgICBjb25kaXRpb24gPSBUUlVFOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qIFRoZSBjb25kaXRpb24gaXMgYW4gYXNzZXJ0aW9uLiBDYWxsIG1hdGNoKCkgdG8gZXZhbHVhdGUgaXQgLSBzZXR0aW5nCisgICAgICB0aGUgTUFUQ0hfQ09OREFTU0VSVCBiaXQgaW4gbWItPm1hdGNoX2Z1bmN0aW9uX3R5cGUgY2F1c2VzIGl0IHRvIHN0b3AgYXQKKyAgICAgIHRoZSBlbmQgb2YgYW4gYXNzZXJ0aW9uLiAqLworCisgICAgICBkZWZhdWx0OgorICAgICAgbWItPm1hdGNoX2Z1bmN0aW9uX3R5cGUgfD0gTUFUQ0hfQ09OREFTU0VSVDsKKyAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIE5VTEwsIFJNMyk7CisgICAgICBpZiAocnJjID09IE1BVENIX01BVENIKQorICAgICAgICB7CisgICAgICAgIGlmIChtYi0+ZW5kX29mZnNldF90b3AgPiBvZmZzZXRfdG9wKQorICAgICAgICAgIG9mZnNldF90b3AgPSBtYi0+ZW5kX29mZnNldF90b3A7ICAvKiBDYXB0dXJlcyBtYXkgaGF2ZSBoYXBwZW5lZCAqLworICAgICAgICBjb25kaXRpb24gPSBUUlVFOworCisgICAgICAgIC8qIEFkdmFuY2UgZWNvZGUgcGFzdCB0aGUgYXNzZXJ0aW9uIHRvIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgYnJhbmNoLAorICAgICAgICBidXQgYWRqdXN0IGl0IHNvIHRoYXQgdGhlIGdlbmVyYWwgY2hvb3NpbmcgY29kZSBiZWxvdyB3b3Jrcy4gSWYgdGhlCisgICAgICAgIGFzc2VydGlvbiBoYXMgYSBxdWFudGlmaWVyIHRoYXQgYWxsb3dzIHplcm8gcmVwZWF0cyB3ZSBtdXN0IHNraXAgb3ZlcgorICAgICAgICB0aGUgQlJBWkVSTy4gVGhpcyBpcyBhIGx1bmF0aWMgdGhpbmcgdG8gZG8sIGJ1dCBzb21lYm9keSBkaWQhICovCisKKyAgICAgICAgaWYgKCplY29kZSA9PSBPUF9CUkFaRVJPKSBlY29kZSsrOworICAgICAgICBlY29kZSArPSBHRVQoZWNvZGUsIDEpOworICAgICAgICB3aGlsZSAoKmVjb2RlID09IE9QX0FMVCkgZWNvZGUgKz0gR0VUKGVjb2RlLCAxKTsKKyAgICAgICAgZWNvZGUgKz0gMSArIExJTktfU0laRSAtIFBSSVYoT1BfbGVuZ3RocylbY29uZGNvZGVdOworICAgICAgICB9CisKKyAgICAgIC8qIFBDUkUgZG9lc24ndCBhbGxvdyB0aGUgZWZmZWN0IG9mICgqVEhFTikgdG8gZXNjYXBlIGJleW9uZCBhbgorICAgICAgYXNzZXJ0aW9uOyBpdCBpcyB0aGVyZWZvcmUgdHJlYXRlZCBhcyBOT01BVENILiBBbnkgb3RoZXIgcmV0dXJuIGlzIGFuCisgICAgICBlcnJvci4gKi8KKworICAgICAgZWxzZSBpZiAocnJjICE9IE1BVENIX05PTUFUQ0ggJiYgcnJjICE9IE1BVENIX1RIRU4pCisgICAgICAgIHsKKyAgICAgICAgUlJFVFVSTihycmMpOyAgICAgICAgIC8qIE5lZWQgYnJhY2VzIGJlY2F1c2Ugb2YgZm9sbG93aW5nIGVsc2UgKi8KKyAgICAgICAgfQorICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICAvKiBDaG9vc2UgYnJhbmNoIGFjY29yZGluZyB0byB0aGUgY29uZGl0aW9uICovCisKKyAgICBlY29kZSArPSBjb25kaXRpb24/IFBSSVYoT1BfbGVuZ3RocylbY29uZGNvZGVdIDogY29kZWxpbms7CisKKyAgICAvKiBXZSBhcmUgbm93IGF0IHRoZSBicmFuY2ggdGhhdCBpcyB0byBiZSBvYmV5ZWQuIEFzIHRoZXJlIGlzIG9ubHkgb25lLCB3ZQorICAgIGNhbiB1c2UgdGFpbCByZWN1cnNpb24gdG8gYXZvaWQgdXNpbmcgYW5vdGhlciBzdGFjayBmcmFtZSwgZXhjZXB0IHdoZW4KKyAgICB0aGVyZSBpcyB1bmxpbWl0ZWQgcmVwZWF0IG9mIGEgcG9zc2libHkgZW1wdHkgZ3JvdXAuIEluIHRoZSBsYXR0ZXIgY2FzZSwgYQorICAgIHJlY3Vyc2l2ZSBjYWxsIHRvIG1hdGNoKCkgaXMgYWx3YXlzIHJlcXVpcmVkLCB1bmxlc3MgdGhlIHNlY29uZCBhbHRlcm5hdGl2ZQorICAgIGRvZXNuJ3QgZXhpc3QsIGluIHdoaWNoIGNhc2Ugd2UgY2FuIGp1c3QgcGxvdWdoIG9uLiBOb3RlIHRoYXQsIGZvcgorICAgIGNvbXBhdGliaWxpdHkgd2l0aCBQZXJsLCB0aGUgfCBpbiBhIGNvbmRpdGlvbmFsIGdyb3VwIGlzIE5PVCB0cmVhdGVkIGFzCisgICAgY3JlYXRpbmcgdHdvIGFsdGVybmF0aXZlcy4gSWYgYSBUSEVOIGlzIGVuY291bnRlcmVkIGluIHRoZSBicmFuY2gsIGl0CisgICAgcHJvcGFnYXRlcyBvdXQgdG8gdGhlIGVuY2xvc2luZyBhbHRlcm5hdGl2ZSAodW5sZXNzIG5lc3RlZCBpbiBhIGRlZXBlciBzZXQKKyAgICBvZiBhbHRlcm5hdGl2ZXMsIG9mIGNvdXJzZSkuICovCisKKyAgICBpZiAoY29uZGl0aW9uIHx8IGVjb2RlWy0oMStMSU5LX1NJWkUpXSA9PSBPUF9BTFQpCisgICAgICB7CisgICAgICBpZiAob3AgIT0gT1BfU0NPTkQpCisgICAgICAgIHsKKyAgICAgICAgZ290byBUQUlMX1JFQ1VSU0U7CisgICAgICAgIH0KKworICAgICAgbWItPm1hdGNoX2Z1bmN0aW9uX3R5cGUgfD0gTUFUQ0hfQ0JFR1JPVVA7CisgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk00OSk7CisgICAgICBSUkVUVVJOKHJyYyk7CisgICAgICB9CisKKyAgICAgLyogQ29uZGl0aW9uIGZhbHNlICYgbm8gYWx0ZXJuYXRpdmU7IGNvbnRpbnVlIGFmdGVyIHRoZSBncm91cC4gKi8KKworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIH0KKyAgICBicmVhazsKKworCisgICAgLyogQmVmb3JlIE9QX0FDQ0VQVCB0aGVyZSBtYXkgYmUgYW55IG51bWJlciBvZiBPUF9DTE9TRSBvcGNvZGVzLAorICAgIHRvIGNsb3NlIGFueSBjdXJyZW50bHkgb3BlbiBjYXB0dXJpbmcgYnJhY2tldHMuICovCisKKyAgICBjYXNlIE9QX0NMT1NFOgorICAgIG51bWJlciA9IEdFVDIoZWNvZGUsIDEpOyAgIC8qIE11c3QgYmUgbGVzcyB0aGFuIDY1NTM2ICovCisgICAgb2Zmc2V0ID0gbnVtYmVyIDw8IDE7CisgICAgbWItPmNhcHR1cmVfbGFzdCA9IChtYi0+Y2FwdHVyZV9sYXN0ICYgT1ZGTE1BU0spIHwgbnVtYmVyOworICAgIGlmIChvZmZzZXQgPj0gbWItPm9mZnNldF9tYXgpIG1iLT5jYXB0dXJlX2xhc3QgfD0gT1ZGTEJJVDsgZWxzZQorICAgICAgeworICAgICAgbWItPm92ZWN0b3Jbb2Zmc2V0XSA9CisgICAgICAgIG1iLT5vdmVjdG9yW21iLT5vZmZzZXRfZW5kIC0gbnVtYmVyXTsKKyAgICAgIG1iLT5vdmVjdG9yW29mZnNldCsxXSA9IGVwdHIgLSBtYi0+c3RhcnRfc3ViamVjdDsKKworICAgICAgLyogSWYgdGhpcyBncm91cCBpcyBhdCBvciBhYm92ZSB0aGUgY3VycmVudCBoaWdod2F0ZXIgbWFyaywgZW5zdXJlIHRoYXQKKyAgICAgIGFueSBncm91cHMgYmV0d2VlbiB0aGUgY3VycmVudCBoaWdoIHdhdGVyIG1hcmsgYW5kIHRoaXMgZ3JvdXAgYXJlIG1hcmtlZAorICAgICAgdW5zZXQgYW5kIHRoZW4gdXBkYXRlIHRoZSBoaWdoIHdhdGVyIG1hcmsuICovCisKKyAgICAgIGlmIChvZmZzZXQgPj0gb2Zmc2V0X3RvcCkKKyAgICAgICAgeworICAgICAgICByZWdpc3RlciBQQ1JFMl9TSVpFICppcHRyID0gbWItPm92ZWN0b3IgKyBvZmZzZXRfdG9wOworICAgICAgICByZWdpc3RlciBQQ1JFMl9TSVpFICppZW5kID0gbWItPm92ZWN0b3IgKyBvZmZzZXQ7CisgICAgICAgIHdoaWxlIChpcHRyIDwgaWVuZCkgKmlwdHIrKyA9IFBDUkUyX1VOU0VUOworICAgICAgICBvZmZzZXRfdG9wID0gb2Zmc2V0ICsgMjsKKyAgICAgICAgfQorICAgICAgfQorICAgIGVjb2RlICs9IDEgKyBJTU0yX1NJWkU7CisgICAgYnJlYWs7CisKKworICAgIC8qIEVuZCBvZiB0aGUgcGF0dGVybiwgZWl0aGVyIHJlYWwgb3IgZm9yY2VkLiBJbiBhbiBhc3NlcnRpb24gQUNDRVBULAorICAgIHVwZGF0ZSB0aGUgbGFzdCB1c2VkIHBvaW50ZXIuICovCisKKyAgICBjYXNlIE9QX0FTU0VSVF9BQ0NFUFQ6CisgICAgaWYgKGVwdHIgPiBtYi0+bGFzdF91c2VkX3B0cikgbWItPmxhc3RfdXNlZF9wdHIgPSBlcHRyOworCisgICAgY2FzZSBPUF9BQ0NFUFQ6CisgICAgY2FzZSBPUF9FTkQ6CisKKyAgICAvKiBJZiB3ZSBoYXZlIG1hdGNoZWQgYW4gZW1wdHkgc3RyaW5nLCBmYWlsIGlmIG5vdCBpbiBhbiBhc3NlcnRpb24gYW5kIG5vdAorICAgIGluIGEgcmVjdXJzaW9uIGlmIGVpdGhlciBQQ1JFMl9OT1RFTVBUWSBpcyBzZXQsIG9yIGlmIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQKKyAgICBpcyBzZXQgYW5kIHdlIGhhdmUgbWF0Y2hlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3QuIEluIGJvdGggY2FzZXMsCisgICAgYmFja3RyYWNraW5nIHdpbGwgdGhlbiB0cnkgb3RoZXIgYWx0ZXJuYXRpdmVzLCBpZiBhbnkuICovCisKKyAgICBpZiAoZXB0ciA9PSBtc3RhcnQgJiYgb3AgIT0gT1BfQVNTRVJUX0FDQ0VQVCAmJgorICAgICAgICAgbWItPnJlY3Vyc2l2ZSA9PSBOVUxMICYmCisgICAgICAgICAoKG1iLT5tb3B0aW9ucyAmIFBDUkUyX05PVEVNUFRZKSAhPSAwIHx8CisgICAgICAgICAgICgobWItPm1vcHRpb25zICYgUENSRTJfTk9URU1QVFlfQVRTVEFSVCkgIT0gMCAmJgorICAgICAgICAgICAgIG1zdGFydCA9PSBtYi0+c3RhcnRfc3ViamVjdCArIG1iLT5zdGFydF9vZmZzZXQpKSkKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisKKyAgICAvKiBPdGhlcndpc2UsIHdlIGhhdmUgYSBtYXRjaC4gKi8KKworICAgIG1iLT5lbmRfbWF0Y2hfcHRyID0gZXB0cjsgICAgICAgICAgIC8qIFJlY29yZCB3aGVyZSB3ZSBlbmRlZCAqLworICAgIG1iLT5lbmRfb2Zmc2V0X3RvcCA9IG9mZnNldF90b3A7ICAgIC8qIGFuZCBob3cgbWFueSBleHRyYWN0cyB3ZXJlIHRha2VuICovCisgICAgbWItPnN0YXJ0X21hdGNoX3B0ciA9IG1zdGFydDsgICAgICAgLyogYW5kIHRoZSBzdGFydCAoXEsgY2FuIG1vZGlmeSkgKi8KKworICAgIC8qIEZvciBzb21lIHJlYXNvbiwgdGhlIG1hY3JvcyBkb24ndCB3b3JrIHByb3Blcmx5IGlmIGFuIGV4cHJlc3Npb24gaXMKKyAgICBnaXZlbiBhcyB0aGUgYXJndW1lbnQgdG8gUlJFVFVSTiB3aGVuIHRoZSBoZWFwIGlzIGluIHVzZS4gKi8KKworICAgIHJyYyA9IChvcCA9PSBPUF9FTkQpPyBNQVRDSF9NQVRDSCA6IE1BVENIX0FDQ0VQVDsKKyAgICBSUkVUVVJOKHJyYyk7CisKKyAgICAvKiBBc3NlcnRpb24gYnJhY2tldHMuIENoZWNrIHRoZSBhbHRlcm5hdGl2ZSBicmFuY2hlcyBpbiB0dXJuIC0gdGhlCisgICAgbWF0Y2hpbmcgd29uJ3QgcGFzcyB0aGUgS0VUIGZvciBhbiBhc3NlcnRpb24uIElmIGFueSBvbmUgYnJhbmNoIG1hdGNoZXMsCisgICAgdGhlIGFzc2VydGlvbiBpcyB0cnVlLiBMb29rYmVoaW5kIGFzc2VydGlvbnMgaGF2ZSBhbiBPUF9SRVZFUlNFIGl0ZW0gYXQgdGhlCisgICAgc3RhcnQgb2YgZWFjaCBicmFuY2ggdG8gbW92ZSB0aGUgY3VycmVudCBwb2ludCBiYWNrd2FyZHMsIHNvIHRoZSBjb2RlIGF0CisgICAgdGhpcyBsZXZlbCBpcyBpZGVudGljYWwgdG8gdGhlIGxvb2thaGVhZCBjYXNlLiBXaGVuIHRoZSBhc3NlcnRpb24gaXMgcGFydAorICAgIG9mIGEgY29uZGl0aW9uLCB3ZSB3YW50IHRvIHJldHVybiBpbW1lZGlhdGVseSBhZnRlcndhcmRzLiBUaGUgY2FsbGVyIG9mCisgICAgdGhpcyBpbmNhcm5hdGlvbiBvZiB0aGUgbWF0Y2goKSBmdW5jdGlvbiB3aWxsIGhhdmUgc2V0IE1BVENIX0NPTkRBU1NFUlQgaW4KKyAgICBtYi0+bWF0Y2hfZnVuY3Rpb24gdHlwZSwgYW5kIG9uZSBvZiB0aGVzZSBvcGNvZGVzIHdpbGwgYmUgdGhlIGZpcnN0IG9wY29kZQorICAgIHRoYXQgaXMgcHJvY2Vzc2VkLiBXZSB1c2UgYSBsb2NhbCB2YXJpYWJsZSB0aGF0IGlzIHByZXNlcnZlZCBvdmVyIGNhbGxzIHRvCisgICAgbWF0Y2goKSB0byByZW1lbWJlciB0aGlzIGNhc2UuICovCisKKyAgICBjYXNlIE9QX0FTU0VSVDoKKyAgICBjYXNlIE9QX0FTU0VSVEJBQ0s6CisgICAgc2F2ZV9tYXJrID0gbWItPm1hcms7CisgICAgaWYgKChtYi0+bWF0Y2hfZnVuY3Rpb25fdHlwZSAmIE1BVENIX0NPTkRBU1NFUlQpICE9IDApCisgICAgICB7CisgICAgICBjb25kYXNzZXJ0ID0gVFJVRTsKKyAgICAgIG1iLT5tYXRjaF9mdW5jdGlvbl90eXBlICY9IH5NQVRDSF9DT05EQVNTRVJUOworICAgICAgfQorICAgIGVsc2UgY29uZGFzc2VydCA9IEZBTFNFOworCisgICAgLyogTG9vcCBmb3IgZWFjaCBicmFuY2ggKi8KKworICAgIGRvCisgICAgICB7CisgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUgKyAxICsgTElOS19TSVpFLCBvZmZzZXRfdG9wLCBtYiwgTlVMTCwgUk00KTsKKworICAgICAgLyogQSBtYXRjaCBtZWFucyB0aGF0IHRoZSBhc3NlcnRpb24gaXMgdHJ1ZTsgYnJlYWsgb3V0IG9mIHRoZSBsb29wCisgICAgICB0aGF0IG1hdGNoZXMgaXRzIGFsdGVybmF0aXZlcy4gKi8KKworICAgICAgaWYgKHJyYyA9PSBNQVRDSF9NQVRDSCB8fCBycmMgPT0gTUFUQ0hfQUNDRVBUKQorICAgICAgICB7CisgICAgICAgIG1zdGFydCA9IG1iLT5zdGFydF9tYXRjaF9wdHI7ICAgLyogSW4gY2FzZSBcSyByZXNldCBpdCAqLworICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAvKiBJZiBub3QgbWF0Y2hlZCwgcmVzdG9yZSB0aGUgcHJldmlvdXMgbWFyayBzZXR0aW5nLiAqLworCisgICAgICBtYi0+bWFyayA9IHNhdmVfbWFyazsKKworICAgICAgLyogU2VlIGNvbW1lbnQgaW4gdGhlIGNvZGUgZm9yIGNhcHR1cmluZyBncm91cHMgYWJvdmUgYWJvdXQgaGFuZGxpbmcKKyAgICAgIFRIRU4uICovCisKKyAgICAgIGlmIChycmMgPT0gTUFUQ0hfVEhFTikKKyAgICAgICAgeworICAgICAgICBuZXh0X2Vjb2RlID0gZWNvZGUgKyBHRVQoZWNvZGUsMSk7CisgICAgICAgIGlmIChtYi0+c3RhcnRfbWF0Y2hfcHRyIDwgbmV4dF9lY29kZSAmJgorICAgICAgICAgICAgKCplY29kZSA9PSBPUF9BTFQgfHwgKm5leHRfZWNvZGUgPT0gT1BfQUxUKSkKKyAgICAgICAgICBycmMgPSBNQVRDSF9OT01BVENIOworICAgICAgICB9CisKKyAgICAgIC8qIEFueXRoaW5nIG90aGVyIHRoYW4gTk9NQVRDSCBjYXVzZXMgdGhlIGVudGlyZSBhc3NlcnRpb24gdG8gZmFpbCwKKyAgICAgIHBhc3NpbmcgYmFjayB0aGUgcmV0dXJuIGNvZGUuIFRoaXMgaW5jbHVkZXMgQ09NTUlULCBTS0lQLCBQUlVORSBhbmQgYW4KKyAgICAgIHVuY2FwdHVyZWQgVEhFTiwgd2hpY2ggbWVhbnMgdGhleSB0YWtlIHRoZWlyIG5vcm1hbCBlZmZlY3QuIFRoaXMKKyAgICAgIGNvbnNpc3RlbnQgYXBwcm9hY2ggZG9lcyBub3QgYWx3YXlzIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBlZmZlY3QgYXMgaW4KKyAgICAgIFBlcmwuICovCisKKyAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgZWNvZGUgKz0gR0VUKGVjb2RlLCAxKTsKKyAgICAgIH0KKyAgICB3aGlsZSAoKmVjb2RlID09IE9QX0FMVCk7ICAgLyogQ29udGludWUgZm9yIG5leHQgYWx0ZXJuYXRpdmUgKi8KKworICAgIC8qIElmIHdlIGhhdmUgdHJpZWQgYWxsIHRoZSBhbHRlcm5hdGl2ZSBicmFuY2hlcywgdGhlIGFzc2VydGlvbiBoYXMKKyAgICBmYWlsZWQuIElmIG5vdCwgd2UgYnJva2Ugb3V0IGFmdGVyIGEgbWF0Y2guICovCisKKyAgICBpZiAoKmVjb2RlID09IE9QX0tFVCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKworICAgIC8qIElmIGNoZWNraW5nIGFuIGFzc2VydGlvbiBmb3IgYSBjb25kaXRpb24sIHJldHVybiBNQVRDSF9NQVRDSC4gKi8KKworICAgIGlmIChjb25kYXNzZXJ0KSBSUkVUVVJOKE1BVENIX01BVENIKTsKKworICAgIC8qIENvbnRpbnVlIGZyb20gYWZ0ZXIgYSBzdWNjZXNzZnVsIGFzc2VydGlvbiwgdXBkYXRpbmcgdGhlIG9mZnNldHMgaGlnaAorICAgIHdhdGVyIG1hcmssIHNpbmNlIGV4dHJhY3RzIG1heSBoYXZlIGJlZW4gdGFrZW4gZHVyaW5nIHRoZSBhc3NlcnRpb24uICovCisKKyAgICBkbyBlY29kZSArPSBHRVQoZWNvZGUsMSk7IHdoaWxlICgqZWNvZGUgPT0gT1BfQUxUKTsKKyAgICBlY29kZSArPSAxICsgTElOS19TSVpFOworICAgIG9mZnNldF90b3AgPSBtYi0+ZW5kX29mZnNldF90b3A7CisgICAgY29udGludWU7CisKKyAgICAvKiBOZWdhdGl2ZSBhc3NlcnRpb246IGFsbCBicmFuY2hlcyBtdXN0IGZhaWwgdG8gbWF0Y2ggZm9yIHRoZSBhc3NlcnRpb24gdG8KKyAgICBzdWNjZWVkLiAqLworCisgICAgY2FzZSBPUF9BU1NFUlRfTk9UOgorICAgIGNhc2UgT1BfQVNTRVJUQkFDS19OT1Q6CisgICAgc2F2ZV9tYXJrID0gbWItPm1hcms7CisgICAgaWYgKChtYi0+bWF0Y2hfZnVuY3Rpb25fdHlwZSAmIE1BVENIX0NPTkRBU1NFUlQpICE9IDApCisgICAgICB7CisgICAgICBjb25kYXNzZXJ0ID0gVFJVRTsKKyAgICAgIG1iLT5tYXRjaF9mdW5jdGlvbl90eXBlICY9IH5NQVRDSF9DT05EQVNTRVJUOworICAgICAgfQorICAgIGVsc2UgY29uZGFzc2VydCA9IEZBTFNFOworCisgICAgLyogTG9vcCBmb3IgZWFjaCBhbHRlcm5hdGl2ZSBicmFuY2guICovCisKKyAgICBkbworICAgICAgeworICAgICAgUk1BVENIKGVwdHIsIGVjb2RlICsgMSArIExJTktfU0laRSwgb2Zmc2V0X3RvcCwgbWIsIE5VTEwsIFJNNSk7CisgICAgICBtYi0+bWFyayA9IHNhdmVfbWFyazsgICAvKiBBbHdheXMgcmVzdG9yZSB0aGUgbWFyayBzZXR0aW5nICovCisKKyAgICAgIHN3aXRjaChycmMpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBNQVRDSF9NQVRDSDogICAgICAgICAgICAvKiBBIHN1Y2Nlc3NmdWwgbWF0Y2ggbWVhbnMgKi8KKyAgICAgICAgY2FzZSBNQVRDSF9BQ0NFUFQ6ICAgICAgICAgICAvKiB0aGUgYXNzZXJ0aW9uIGhhcyBmYWlsZWQuICovCisgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisKKyAgICAgICAgY2FzZSBNQVRDSF9OT01BVENIOiAgICAgICAgICAvKiBDYXJyeSBvbiB3aXRoIG5leHQgYnJhbmNoICovCisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIFNlZSBjb21tZW50IGluIHRoZSBjb2RlIGZvciBjYXB0dXJpbmcgZ3JvdXBzIGFib3ZlIGFib3V0IGhhbmRsaW5nCisgICAgICAgIFRIRU4uICovCisKKyAgICAgICAgY2FzZSBNQVRDSF9USEVOOgorICAgICAgICBuZXh0X2Vjb2RlID0gZWNvZGUgKyBHRVQoZWNvZGUsMSk7CisgICAgICAgIGlmIChtYi0+c3RhcnRfbWF0Y2hfcHRyIDwgbmV4dF9lY29kZSAmJgorICAgICAgICAgICAgKCplY29kZSA9PSBPUF9BTFQgfHwgKm5leHRfZWNvZGUgPT0gT1BfQUxUKSkKKyAgICAgICAgICB7CisgICAgICAgICAgcnJjID0gTUFUQ0hfTk9NQVRDSDsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIC8qIE90aGVyd2lzZSBmYWxsIHRocm91Z2guICovCisKKyAgICAgICAgLyogQ09NTUlULCBTS0lQLCBQUlVORSwgYW5kIGFuIHVuY2FwdHVyZWQgVEhFTiBjYXVzZSB0aGUgd2hvbGUKKyAgICAgICAgYXNzZXJ0aW9uIHRvIGZhaWwgdG8gbWF0Y2gsIHdpdGhvdXQgY29uc2lkZXJpbmcgYW55IG1vcmUgYWx0ZXJuYXRpdmVzLgorICAgICAgICBGYWlsaW5nIHRvIG1hdGNoIG1lYW5zIHRoZSBhc3NlcnRpb24gaXMgdHJ1ZS4gVGhpcyBpcyBhIGNvbnNpc3RlbnQKKyAgICAgICAgYXBwcm9hY2gsIGJ1dCBkb2VzIG5vdCBhbHdheXMgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMgaW4gUGVybC4gKi8KKworICAgICAgICBjYXNlIE1BVENIX0NPTU1JVDoKKyAgICAgICAgY2FzZSBNQVRDSF9TS0lQOgorICAgICAgICBjYXNlIE1BVENIX1NLSVBfQVJHOgorICAgICAgICBjYXNlIE1BVENIX1BSVU5FOgorICAgICAgICBkbyBlY29kZSArPSBHRVQoZWNvZGUsMSk7IHdoaWxlICgqZWNvZGUgPT0gT1BfQUxUKTsKKyAgICAgICAgZ290byBORUdfQVNTRVJUX1RSVUU7ICAgLyogQnJlYWsgb3V0IG9mIGFsdGVybmF0aW9uIGxvb3AgKi8KKworICAgICAgICAvKiBBbnl0aGluZyBlbHNlIGlzIGFuIGVycm9yICovCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgUlJFVFVSTihycmMpOworICAgICAgICB9CisKKyAgICAgIC8qIENvbnRpbnVlIHdpdGggbmV4dCBicmFuY2ggKi8KKworICAgICAgZWNvZGUgKz0gR0VUKGVjb2RlLDEpOworICAgICAgfQorICAgIHdoaWxlICgqZWNvZGUgPT0gT1BfQUxUKTsKKworICAgIC8qIEFsbCBicmFuY2hlcyBpbiB0aGUgYXNzZXJ0aW9uIGZhaWxlZCB0byBtYXRjaC4gKi8KKworICAgIE5FR19BU1NFUlRfVFJVRToKKyAgICBpZiAoY29uZGFzc2VydCkgUlJFVFVSTihNQVRDSF9NQVRDSCk7ICAvKiBDb25kaXRpb24gYXNzZXJ0aW9uICovCisgICAgZWNvZGUgKz0gMSArIExJTktfU0laRTsgICAgICAgICAgICAgICAgLyogQ29udGludWUgd2l0aCBjdXJyZW50IGJyYW5jaCAqLworICAgIGNvbnRpbnVlOworCisgICAgLyogTW92ZSB0aGUgc3ViamVjdCBwb2ludGVyIGJhY2suIFRoaXMgb2NjdXJzIG9ubHkgYXQgdGhlIHN0YXJ0IG9mCisgICAgZWFjaCBicmFuY2ggb2YgYSBsb29rYmVoaW5kIGFzc2VydGlvbi4gSWYgd2UgYXJlIHRvbyBjbG9zZSB0byB0aGUgc3RhcnQgdG8KKyAgICBtb3ZlIGJhY2ssIHRoaXMgbWF0Y2ggZnVuY3Rpb24gZmFpbHMuIFdoZW4gd29ya2luZyB3aXRoIFVURi04IHdlIG1vdmUKKyAgICBiYWNrIGEgbnVtYmVyIG9mIGNoYXJhY3RlcnMsIG5vdCBieXRlcy4gKi8KKworICAgIGNhc2UgT1BfUkVWRVJTRToKKyAgICBpID0gR0VUKGVjb2RlLCAxKTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICBpZiAodXRmKQorICAgICAgeworICAgICAgd2hpbGUgKGktLSA+IDApCisgICAgICAgIHsKKyAgICAgICAgaWYgKGVwdHIgPD0gbWItPnN0YXJ0X3N1YmplY3QpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIGVwdHItLTsKKyAgICAgICAgQkFDS0NIQVIoZXB0cik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKworICAgIC8qIE5vIFVURi04IHN1cHBvcnQsIG9yIG5vdCBpbiBVVEYtOCBtb2RlOiBjb3VudCBpcyBieXRlIGNvdW50ICovCisKKyAgICAgIHsKKyAgICAgIGlmIChpID4gZXB0ciAtIG1iLT5zdGFydF9zdWJqZWN0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgZXB0ciAtPSBpOworICAgICAgfQorCisgICAgLyogU2F2ZSB0aGUgZWFybGllc3QgY29uc3VsdGVkIGNoYXJhY3RlciwgdGhlbiBza2lwIHRvIG5leHQgb3AgY29kZSAqLworCisgICAgaWYgKGVwdHIgPCBtYi0+c3RhcnRfdXNlZF9wdHIpIG1iLT5zdGFydF91c2VkX3B0ciA9IGVwdHI7CisgICAgZWNvZGUgKz0gMSArIExJTktfU0laRTsKKyAgICBicmVhazsKKworICAgIC8qIFRoZSBjYWxsb3V0IGl0ZW0gY2FsbHMgYW4gZXh0ZXJuYWwgZnVuY3Rpb24sIGlmIG9uZSBpcyBwcm92aWRlZCwgcGFzc2luZworICAgIGRldGFpbHMgb2YgdGhlIG1hdGNoIHNvIGZhci4gVGhpcyBpcyBtYWlubHkgZm9yIGRlYnVnZ2luZywgdGhvdWdoIHRoZQorICAgIGZ1bmN0aW9uIGlzIGFibGUgdG8gZm9yY2UgYSBmYWlsdXJlLiAqLworCisgICAgY2FzZSBPUF9DQUxMT1VUOgorICAgIGNhc2UgT1BfQ0FMTE9VVF9TVFI6CisgICAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgY2FsbG91dF9sZW5ndGggPSAoKmVjb2RlID09IE9QX0NBTExPVVQpCisgICAgICAgICAgPyBQUklWKE9QX2xlbmd0aHMpW09QX0NBTExPVVRdIDogR0VUKGVjb2RlLCAxICsgMipMSU5LX1NJWkUpOworCisgICAgICBpZiAobWItPmNhbGxvdXQgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICBwY3JlMl9jYWxsb3V0X2Jsb2NrIGNiOworICAgICAgICBjYi52ZXJzaW9uICAgICAgICAgID0gMTsKKyAgICAgICAgY2IuY2FsbG91dF9udW1iZXIgICA9IGVjb2RlW0xJTktfU0laRSArIDFdOworICAgICAgICBjYi5jYXB0dXJlX3RvcCAgICAgID0gb2Zmc2V0X3RvcC8yOworICAgICAgICBjYi5jYXB0dXJlX2xhc3QgICAgID0gbWItPmNhcHR1cmVfbGFzdCAmIENBUExNQVNLOworICAgICAgICBjYi5vZmZzZXRfdmVjdG9yICAgID0gbWItPm92ZWN0b3I7CisgICAgICAgIGNiLm1hcmsgICAgICAgICAgICAgPSBtYi0+bm9tYXRjaF9tYXJrOworICAgICAgICBjYi5zdWJqZWN0ICAgICAgICAgID0gbWItPnN0YXJ0X3N1YmplY3Q7CisgICAgICAgIGNiLnN1YmplY3RfbGVuZ3RoICAgPSAoUENSRTJfU0laRSkobWItPmVuZF9zdWJqZWN0IC0gbWItPnN0YXJ0X3N1YmplY3QpOworICAgICAgICBjYi5zdGFydF9tYXRjaCAgICAgID0gKFBDUkUyX1NJWkUpKG1zdGFydCAtIG1iLT5zdGFydF9zdWJqZWN0KTsKKyAgICAgICAgY2IuY3VycmVudF9wb3NpdGlvbiA9IChQQ1JFMl9TSVpFKShlcHRyIC0gbWItPnN0YXJ0X3N1YmplY3QpOworICAgICAgICBjYi5wYXR0ZXJuX3Bvc2l0aW9uID0gR0VUKGVjb2RlLCAxKTsKKyAgICAgICAgY2IubmV4dF9pdGVtX2xlbmd0aCA9IEdFVChlY29kZSwgMSArIExJTktfU0laRSk7CisKKyAgICAgICAgaWYgKCplY29kZSA9PSBPUF9DQUxMT1VUKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYi5jYWxsb3V0X251bWJlciA9IGVjb2RlWzEgKyAyKkxJTktfU0laRV07CisgICAgICAgICAgY2IuY2FsbG91dF9zdHJpbmdfb2Zmc2V0ID0gMDsKKyAgICAgICAgICBjYi5jYWxsb3V0X3N0cmluZyA9IE5VTEw7CisgICAgICAgICAgY2IuY2FsbG91dF9zdHJpbmdfbGVuZ3RoID0gMDsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgY2IuY2FsbG91dF9udW1iZXIgPSAwOworICAgICAgICAgIGNiLmNhbGxvdXRfc3RyaW5nX29mZnNldCA9IEdFVChlY29kZSwgMSArIDMqTElOS19TSVpFKTsKKyAgICAgICAgICBjYi5jYWxsb3V0X3N0cmluZyA9IGVjb2RlICsgKDEgKyA0KkxJTktfU0laRSkgKyAxOworICAgICAgICAgIGNiLmNhbGxvdXRfc3RyaW5nX2xlbmd0aCA9CisgICAgICAgICAgICBjYWxsb3V0X2xlbmd0aCAtICgxICsgNCpMSU5LX1NJWkUpIC0gMjsKKyAgICAgICAgICB9CisKKyAgICAgICAgaWYgKChycmMgPSBtYi0+Y2FsbG91dCgmY2IsIG1iLT5jYWxsb3V0X2RhdGEpKSA+IDApCisgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgaWYgKHJyYyA8IDApIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgfQorICAgICAgZWNvZGUgKz0gY2FsbG91dF9sZW5ndGg7CisgICAgICB9CisgICAgYnJlYWs7CisKKyAgICAvKiBSZWN1cnNpb24gZWl0aGVyIG1hdGNoZXMgdGhlIGN1cnJlbnQgcmVnZXgsIG9yIHNvbWUgc3ViZXhwcmVzc2lvbi4gVGhlCisgICAgb2Zmc2V0IGRhdGEgaXMgdGhlIG9mZnNldCB0byB0aGUgc3RhcnRpbmcgYnJhY2tldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUKKyAgICB3aG9sZSBwYXR0ZXJuLiAoVGhpcyBpcyBzbyB0aGF0IGl0IHdvcmtzIGZyb20gZHVwbGljYXRlZCBzdWJwYXR0ZXJucy4pCisKKyAgICBUaGUgc3RhdGUgb2YgdGhlIGNhcHR1cmluZyBncm91cHMgaXMgcHJlc2VydmVkIG92ZXIgcmVjdXJzaW9uLCBhbmQKKyAgICByZS1pbnN0YXRlZCBhZnRlcndhcmRzLiBXZSBkb24ndCBrbm93IGhvdyBtYW55IGFyZSBzdGFydGVkIGFuZCBub3QgeWV0CisgICAgZmluaXNoZWQgKG9mZnNldF90b3AgcmVjb3JkcyB0aGUgY29tcGxldGVkIHRvdGFsKSBzbyB3ZSBqdXN0IGhhdmUgdG8gc2F2ZQorICAgIGFsbCB0aGUgcG90ZW50aWFsIGRhdGEuIFRoZXJlIG1heSBiZSB1cCB0byA2NTUzNSBzdWNoIHZhbHVlcywgd2hpY2ggaXMgdG9vCisgICAgbGFyZ2UgdG8gcHV0IG9uIHRoZSBzdGFjaywgYnV0IHVzaW5nIG1hbGxvYyBmb3Igc21hbGwgbnVtYmVycyBzZWVtcworICAgIGV4cGVuc2l2ZS4gQXMgYSBjb21wcm9taXNlLCB0aGUgc3RhY2sgaXMgdXNlZCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIHRoYW4KKyAgICBPUF9SRUNVUlNFX1NUQUNLX1NBVkVfTUFYIHZhbHVlcyB0byBzdG9yZTsgb3RoZXJ3aXNlIG1hbGxvYyBpcyB1c2VkLgorCisgICAgVGhlcmUgYXJlIGFsc28gb3RoZXIgdmFsdWVzIHRoYXQgaGF2ZSB0byBiZSBzYXZlZC4gV2UgdXNlIGEgY2hhaW5lZAorICAgIHNlcXVlbmNlIG9mIGJsb2NrcyB0aGF0IGFjdHVhbGx5IGxpdmUgb24gdGhlIHN0YWNrLiBUaGFua3MgdG8gUm9iaW4gSG91c3RvbgorICAgIGZvciB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIGxvZ2ljLiBJdCBoYXMsIGhvd2V2ZXIsIGJlZW4gaGFja2VkIGFyb3VuZAorICAgIGEgbG90LCBzbyBoZSBpcyBub3QgdG8gYmxhbWUgZm9yIHRoZSBjdXJyZW50IHdheSBpdCB3b3Jrcy4gKi8KKworICAgIGNhc2UgT1BfUkVDVVJTRToKKyAgICAgIHsKKyAgICAgIG92ZWNzYXZlX2ZyYW1lICpmcjsKKyAgICAgIHJlY3Vyc2lvbl9pbmZvICpyaTsKKyAgICAgIHVpbnQzMl90IHJlY25vOworCisgICAgICBjYWxscGF0ID0gbWItPnN0YXJ0X2NvZGUgKyBHRVQoZWNvZGUsIDEpOworICAgICAgcmVjbm8gPSAoY2FsbHBhdCA9PSBtYi0+c3RhcnRfY29kZSk/IDAgOiBHRVQyKGNhbGxwYXQsIDEgKyBMSU5LX1NJWkUpOworCisgICAgICAvKiBDaGVjayBmb3IgcmVwZWF0aW5nIGEgcGF0dGVybiByZWN1cnNpb24gd2l0aG91dCBhZHZhbmNpbmcgdGhlIHN1YmplY3QKKyAgICAgIHBvaW50ZXIuIFRoaXMgc2hvdWxkIGNhdGNoIGNvbnZvbHV0ZWQgbXV0dWFsIHJlY3Vyc2lvbnMuIChTb21lIHNpbXBsZQorICAgICAgY2FzZXMgYXJlIGNhdWdodCBhdCBjb21waWxlIHRpbWUuKSAqLworCisgICAgICBmb3IgKHJpID0gbWItPnJlY3Vyc2l2ZTsgcmkgIT0gTlVMTDsgcmkgPSByaS0+cHJldnJlYykKKyAgICAgICAgaWYgKHJlY25vID09IHJpLT5ncm91cF9udW0gJiYgZXB0ciA9PSByaS0+c3ViamVjdF9wb3NpdGlvbikKKyAgICAgICAgICBSUkVUVVJOKFBDUkUyX0VSUk9SX1JFQ1VSU0VMT09QKTsKKworICAgICAgLyogQWRkIHRvICJyZWN1cnNpbmcgc3RhY2siICovCisKKyAgICAgIG5ld19yZWN1cnNpdmUuZ3JvdXBfbnVtID0gcmVjbm87CisgICAgICBuZXdfcmVjdXJzaXZlLnNhdmVkX2NhcHR1cmVfbGFzdCA9IG1iLT5jYXB0dXJlX2xhc3Q7CisgICAgICBuZXdfcmVjdXJzaXZlLnN1YmplY3RfcG9zaXRpb24gPSBlcHRyOworICAgICAgbmV3X3JlY3Vyc2l2ZS5wcmV2cmVjID0gbWItPnJlY3Vyc2l2ZTsKKyAgICAgIG1iLT5yZWN1cnNpdmUgPSAmbmV3X3JlY3Vyc2l2ZTsKKworICAgICAgLyogV2hlcmUgdG8gY29udGludWUgZnJvbSBhZnRlcndhcmRzICovCisKKyAgICAgIGVjb2RlICs9IDEgKyBMSU5LX1NJWkU7CisKKyAgICAgIC8qIFdoZW4gd2UgYXJlIHVzaW5nIHRoZSBzeXN0ZW0gc3RhY2sgZm9yIG1hdGNoKCkgcmVjdXJzaW9uIHdlIGNhbiBjYWxsIGEKKyAgICAgIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUgc3lzdGVtIHN0YWNrIGZvciBwcmVzZXJ2aW5nIHRoZSBvdmVjdG9yIHdoaWxlCisgICAgICBwcm9jZXNzaW5nIHRoZSBwYXR0ZXJuIHJlY3Vyc2lvbiwgYnV0IG9ubHkgaWYgdGhlIG92ZWN0b3IgaXMgc21hbGwKKyAgICAgIGVub3VnaC4gKi8KKworI2lmbmRlZiBIRUFQX01BVENIX1JFQ1VSU0UKKyAgICAgIGlmIChtYi0+b2Zmc2V0X2VuZCA8PSBPUF9SRUNVUlNFX1NUQUNLX1NBVkVfTUFYKQorICAgICAgICB7CisgICAgICAgIHJyYyA9IG9wX3JlY3Vyc2Vfb3ZlY3NhdmUoZXB0ciwgY2FsbHBhdCwgbXN0YXJ0LCBvZmZzZXRfdG9wLCBtYiwKKyAgICAgICAgICBlcHRyYiwgcmRlcHRoKTsKKyAgICAgICAgbWItPnJlY3Vyc2l2ZSA9IG5ld19yZWN1cnNpdmUucHJldnJlYzsKKyAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9NQVRDSCAmJiBycmMgIT0gTUFUQ0hfQUNDRVBUKSBSUkVUVVJOKHJyYyk7CisKKyAgICAgICAgLyogU2V0IHdoZXJlIHdlIGdvdCB0byBpbiB0aGUgc3ViamVjdCwgYW5kIHJlc2V0IHRoZSBzdGFydCwgaW4gY2FzZQorICAgICAgICBpdCB3YXMgY2hhbmdlZCBieSBcSy4gVGhpcyAqaXMqIHByb3BhZ2F0ZWQgYmFjayBvdXQgb2YgYSByZWN1cnNpb24sCisgICAgICAgIGZvciBQZXJsIGNvbXBhdGliaWxpdHkuICovCisKKyAgICAgICAgZXB0ciA9IG1iLT5lbmRfbWF0Y2hfcHRyOworICAgICAgICBtc3RhcnQgPSBtYi0+c3RhcnRfbWF0Y2hfcHRyOworICAgICAgICBicmVhazsgICAvKiBFbmQgb2YgcHJvY2Vzc2luZyBPUF9SRUNVUlNFICovCisgICAgICAgIH0KKyNlbmRpZgorICAgICAgLyogSWYgdGhlIG92ZWN0b3IgaXMgdG9vIGJpZywgb3IgaWYgd2UgYXJlIHVzaW5nIHRoZSBoZWFwIGZvciBtYXRjaCgpCisgICAgICByZWN1cnNpb24sIHdlIGhhdmUgdG8gdXNlIHRoZSBoZWFwIGZvciBzYXZpbmcgdGhlIG92ZWN0b3IuIFVzZWQgb3ZlY3NhdmUKKyAgICAgIGZyYW1lcyBhcmUga2VwdCBvbiBhIGNoYWluIGFuZCByZS11c2VkLiBUaGlzIG1ha2VzIGEgc21hbGwgaW1wcm92ZW1lbnQgaW4KKyAgICAgIGV4ZWN1dGlvbiB0aW1lIG9uIExpbnV4LiAqLworCisgICAgICBpZiAobWItPm92ZWNzYXZlX2NoYWluICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgbmV3X3JlY3Vyc2l2ZS5vdmVjX3NhdmUgPSBtYi0+b3ZlY3NhdmVfY2hhaW4tPnNhdmVkX292ZWM7CisgICAgICAgIG1iLT5vdmVjc2F2ZV9jaGFpbiA9IG1iLT5vdmVjc2F2ZV9jaGFpbi0+bmV4dDsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIGZyID0gKG92ZWNzYXZlX2ZyYW1lICopKG1iLT5tZW1jdGwubWFsbG9jKHNpemVvZihvdmVjc2F2ZV9mcmFtZSAqKSArCisgICAgICAgICAgbWItPm9mZnNldF9lbmQgKiBzaXplb2YoUENSRTJfU0laRSksIG1iLT5tZW1jdGwubWVtb3J5X2RhdGEpKTsKKyAgICAgICAgaWYgKGZyID09IE5VTEwpIFJSRVRVUk4oUENSRTJfRVJST1JfTk9NRU1PUlkpOworICAgICAgICBuZXdfcmVjdXJzaXZlLm92ZWNfc2F2ZSA9IGZyLT5zYXZlZF9vdmVjOworICAgICAgICB9CisKKyAgICAgIG1lbWNweShuZXdfcmVjdXJzaXZlLm92ZWNfc2F2ZSwgbWItPm92ZWN0b3IsCisgICAgICAgIG1iLT5vZmZzZXRfZW5kICogc2l6ZW9mKFBDUkUyX1NJWkUpKTsKKworICAgICAgLyogRG8gdGhlIHJlY3Vyc2lvbi4gQWZ0ZXIgcHJvY2Vzc2luZyBlYWNoIGFsdGVybmF0aXZlLCByZXN0b3JlIHRoZQorICAgICAgb3ZlY3RvciBkYXRhIGFuZCB0aGUgbGFzdCBjYXB0dXJlZCB2YWx1ZS4gVGhpcyBjb2RlIGhhcyB0aGUgc2FtZSBvdmVyYWxsCisgICAgICBsb2dpYyBhcyB0aGUgY29kZSBpbiB0aGUgb3BfcmVjdXJzZV9vdmVjc2F2ZSgpIGZ1bmN0aW9uLCBidXQgaXMgYWRhcHRlZAorICAgICAgdG8gdXNlIFJNQVRDSC9SUkVUVVJOIGFuZCB0byByZWxlYXNlIHRoZSBoZWFwIGJsb2NrIGNvbnRhaW5pbmcgdGhlIHNhdmVkCisgICAgICBvdmVjdG9yLiAqLworCisgICAgICBjYmVncm91cCA9ICgqY2FsbHBhdCA+PSBPUF9TQlJBKTsKKyAgICAgIGRvCisgICAgICAgIHsKKyAgICAgICAgaWYgKGNiZWdyb3VwKSBtYi0+bWF0Y2hfZnVuY3Rpb25fdHlwZSB8PSBNQVRDSF9DQkVHUk9VUDsKKyAgICAgICAgUk1BVENIKGVwdHIsIGNhbGxwYXQgKyBQUklWKE9QX2xlbmd0aHMpWypjYWxscGF0XSwgb2Zmc2V0X3RvcCwKKyAgICAgICAgICBtYiwgZXB0cmIsIFJNNik7CisgICAgICAgIG1lbWNweShtYi0+b3ZlY3RvciwgbmV3X3JlY3Vyc2l2ZS5vdmVjX3NhdmUsCisgICAgICAgICAgICBtYi0+b2Zmc2V0X2VuZCAqIHNpemVvZihQQ1JFMl9TSVpFKSk7CisgICAgICAgIG1iLT5jYXB0dXJlX2xhc3QgPSBuZXdfcmVjdXJzaXZlLnNhdmVkX2NhcHR1cmVfbGFzdDsKKyAgICAgICAgbWItPnJlY3Vyc2l2ZSA9IG5ld19yZWN1cnNpdmUucHJldnJlYzsKKworICAgICAgICBpZiAocnJjID09IE1BVENIX01BVENIIHx8IHJyYyA9PSBNQVRDSF9BQ0NFUFQpCisgICAgICAgICAgeworICAgICAgICAgIGZyID0gKG92ZWNzYXZlX2ZyYW1lICopCisgICAgICAgICAgICAoKHVpbnQ4X3QgKiluZXdfcmVjdXJzaXZlLm92ZWNfc2F2ZSAtIHNpemVvZihvdmVjc2F2ZV9mcmFtZSAqKSk7CisgICAgICAgICAgZnItPm5leHQgPSBtYi0+b3ZlY3NhdmVfY2hhaW47CisgICAgICAgICAgbWItPm92ZWNzYXZlX2NoYWluID0gZnI7CisKKyAgICAgICAgICAvKiBTZXQgd2hlcmUgd2UgZ290IHRvIGluIHRoZSBzdWJqZWN0LCBhbmQgcmVzZXQgdGhlIHN0YXJ0LCBpbiBjYXNlCisgICAgICAgICAgaXQgd2FzIGNoYW5nZWQgYnkgXEsuIFRoaXMgKmlzKiBwcm9wYWdhdGVkIGJhY2sgb3V0IG9mIGEgcmVjdXJzaW9uLAorICAgICAgICAgIGZvciBQZXJsIGNvbXBhdGliaWxpdHkuICovCisKKyAgICAgICAgICBlcHRyID0gbWItPmVuZF9tYXRjaF9wdHI7CisgICAgICAgICAgbXN0YXJ0ID0gbWItPnN0YXJ0X21hdGNoX3B0cjsKKyAgICAgICAgICBnb3RvIFJFQ1VSU0lPTl9NQVRDSEVEOyAgICAgICAgLyogRXhpdCBsb29wOyBlbmQgcHJvY2Vzc2luZyAqLworICAgICAgICAgIH0KKworICAgICAgICAvKiBQQ1JFIGRvZXMgbm90IGFsbG93IFRIRU4sIFNLSVAsIFBSVU5FIG9yIENPTU1JVCB0byBlc2NhcGUgYmV5b25kIGEKKyAgICAgICAgcmVjdXJzaW9uOyB0aGV5IGNhdXNlIGEgTk9NQVRDSCBmb3IgdGhlIGVudGlyZSByZWN1cnNpb24uIFRoZXNlIGNvZGVzCisgICAgICAgIGFyZSBkZWZpbmVkIGluIGEgcmFuZ2UgdGhhdCBjYW4gYmUgdGVzdGVkIGZvci4gKi8KKworICAgICAgICBpZiAocnJjID49IE1BVENIX0JBQ0tUUkFDS19NSU4gJiYgcnJjIDw9IE1BVENIX0JBQ0tUUkFDS19NQVgpCisgICAgICAgICAgeworICAgICAgICAgIHJyYyA9IE1BVENIX05PTUFUQ0g7CisgICAgICAgICAgZ290byBSRUNVUlNJT05fUkVUVVJOOworICAgICAgICAgIH0KKworICAgICAgICAvKiBBbnkgcmV0dXJuIGNvZGUgb3RoZXIgdGhhbiBOT01BVENIIGlzIGFuIGVycm9yLiAqLworCisgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgZ290byBSRUNVUlNJT05fUkVUVVJOOworICAgICAgICBtYi0+cmVjdXJzaXZlID0gJm5ld19yZWN1cnNpdmU7CisgICAgICAgIGNhbGxwYXQgKz0gR0VUKGNhbGxwYXQsIDEpOworICAgICAgICB9CisgICAgICB3aGlsZSAoKmNhbGxwYXQgPT0gT1BfQUxUKTsKKworICAgICAgUkVDVVJTSU9OX1JFVFVSTjoKKyAgICAgIG1iLT5yZWN1cnNpdmUgPSBuZXdfcmVjdXJzaXZlLnByZXZyZWM7CisgICAgICBmciA9IChvdmVjc2F2ZV9mcmFtZSAqKQorICAgICAgICAoKHVpbnQ4X3QgKiluZXdfcmVjdXJzaXZlLm92ZWNfc2F2ZSAtIHNpemVvZihvdmVjc2F2ZV9mcmFtZSAqKSk7CisgICAgICBmci0+bmV4dCA9IG1iLT5vdmVjc2F2ZV9jaGFpbjsKKyAgICAgIG1iLT5vdmVjc2F2ZV9jaGFpbiA9IGZyOworICAgICAgUlJFVFVSTihycmMpOworICAgICAgfQorCisgICAgUkVDVVJTSU9OX01BVENIRUQ6CisgICAgYnJlYWs7CisKKyAgICAvKiBBbiBhbHRlcm5hdGlvbiBpcyB0aGUgZW5kIG9mIGEgYnJhbmNoOyBzY2FuIGFsb25nIHRvIGZpbmQgdGhlIGVuZCBvZiB0aGUKKyAgICBicmFja2V0ZWQgZ3JvdXAgYW5kIGdvIHRvIHRoZXJlLiAqLworCisgICAgY2FzZSBPUF9BTFQ6CisgICAgZG8gZWNvZGUgKz0gR0VUKGVjb2RlLDEpOyB3aGlsZSAoKmVjb2RlID09IE9QX0FMVCk7CisgICAgYnJlYWs7CisKKyAgICAvKiBCUkFaRVJPLCBCUkFNSU5aRVJPIGFuZCBTS0lQWkVSTyBvY2N1ciBqdXN0IGJlZm9yZSBhIGJyYWNrZXQgZ3JvdXAsCisgICAgaW5kaWNhdGluZyB0aGF0IGl0IG1heSBvY2N1ciB6ZXJvIHRpbWVzLiBJdCBtYXkgcmVwZWF0IGluZmluaXRlbHksIG9yIG5vdAorICAgIGF0IGFsbCAtIGkuZS4gaXQgY291bGQgYmUgKCkqIG9yICgpPyBvciBldmVuICgpezB9IGluIHRoZSBwYXR0ZXJuLiBCcmFja2V0cworICAgIHdpdGggZml4ZWQgdXBwZXIgcmVwZWF0IGxpbWl0cyBhcmUgY29tcGlsZWQgYXMgYSBudW1iZXIgb2YgY29waWVzLCB3aXRoIHRoZQorICAgIG9wdGlvbmFsIG9uZXMgcHJlY2VkZWQgYnkgQlJBWkVSTyBvciBCUkFNSU5aRVJPLiAqLworCisgICAgY2FzZSBPUF9CUkFaRVJPOgorICAgIG5leHRfZWNvZGUgPSBlY29kZSArIDE7CisgICAgUk1BVENIKGVwdHIsIG5leHRfZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0xMCk7CisgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgZG8gbmV4dF9lY29kZSArPSBHRVQobmV4dF9lY29kZSwgMSk7IHdoaWxlICgqbmV4dF9lY29kZSA9PSBPUF9BTFQpOworICAgIGVjb2RlID0gbmV4dF9lY29kZSArIDEgKyBMSU5LX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0JSQU1JTlpFUk86CisgICAgbmV4dF9lY29kZSA9IGVjb2RlICsgMTsKKyAgICBkbyBuZXh0X2Vjb2RlICs9IEdFVChuZXh0X2Vjb2RlLCAxKTsgd2hpbGUgKCpuZXh0X2Vjb2RlID09IE9QX0FMVCk7CisgICAgUk1BVENIKGVwdHIsIG5leHRfZWNvZGUgKyAxK0xJTktfU0laRSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTExKTsKKyAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICBlY29kZSsrOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9TS0lQWkVSTzoKKyAgICBuZXh0X2Vjb2RlID0gZWNvZGUrMTsKKyAgICBkbyBuZXh0X2Vjb2RlICs9IEdFVChuZXh0X2Vjb2RlLDEpOyB3aGlsZSAoKm5leHRfZWNvZGUgPT0gT1BfQUxUKTsKKyAgICBlY29kZSA9IG5leHRfZWNvZGUgKyAxICsgTElOS19TSVpFOworICAgIGJyZWFrOworCisgICAgLyogQlJBUE9TWkVSTyBvY2N1cnMgYmVmb3JlIGEgcG9zc2Vzc2l2ZSBicmFja2V0IGdyb3VwLiBEb24ndCBkbyBhbnl0aGluZworICAgIGhlcmU7IGp1c3QganVtcCB0byB0aGUgZ3JvdXAsIHdpdGggYWxsb3dfemVybyBzZXQgVFJVRS4gKi8KKworICAgIGNhc2UgT1BfQlJBUE9TWkVSTzoKKyAgICBvcCA9ICooKytlY29kZSk7CisgICAgYWxsb3dfemVybyA9IFRSVUU7CisgICAgaWYgKG9wID09IE9QX0NCUkFQT1MgfHwgb3AgPT0gT1BfU0NCUkFQT1MpIGdvdG8gUE9TU0VTU0lWRV9DQVBUVVJFOworICAgICAgZ290byBQT1NTRVNTSVZFX05PTl9DQVBUVVJFOworCisgICAgLyogRW5kIG9mIGEgZ3JvdXAsIHJlcGVhdGVkIG9yIG5vbi1yZXBlYXRpbmcuICovCisKKyAgICBjYXNlIE9QX0tFVDoKKyAgICBjYXNlIE9QX0tFVFJNSU46CisgICAgY2FzZSBPUF9LRVRSTUFYOgorICAgIGNhc2UgT1BfS0VUUlBPUzoKKyAgICBwcmV2ID0gZWNvZGUgLSBHRVQoZWNvZGUsIDEpOworCisgICAgLyogSWYgdGhpcyB3YXMgYSBncm91cCB0aGF0IHJlbWVtYmVyZWQgdGhlIHN1YmplY3Qgc3RhcnQsIGluIG9yZGVyIHRvIGJyZWFrCisgICAgaW5maW5pdGUgcmVwZWF0cyBvZiBlbXB0eSBzdHJpbmcgbWF0Y2hlcywgcmV0cmlldmUgdGhlIHN1YmplY3Qgc3RhcnQgZnJvbQorICAgIHRoZSBjaGFpbi4gT3RoZXJ3aXNlLCBzZXQgaXQgTlVMTC4gKi8KKworICAgIGlmICgqcHJldiA+PSBPUF9TQlJBIHx8ICpwcmV2ID09IE9QX09OQ0UpCisgICAgICB7CisgICAgICBzYXZlZF9lcHRyID0gZXB0cmItPmVwYl9zYXZlZF9lcHRyOyAgIC8qIFZhbHVlIGF0IHN0YXJ0IG9mIGdyb3VwICovCisgICAgICBlcHRyYiA9IGVwdHJiLT5lcGJfcHJldjsgICAgICAgICAgICAgIC8qIEJhY2t1cCB0byBwcmV2aW91cyBncm91cCAqLworICAgICAgfQorICAgIGVsc2Ugc2F2ZWRfZXB0ciA9IE5VTEw7CisKKyAgICAvKiBJZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiBhbiBhc3NlcnRpb24gZ3JvdXAgb3IgYSBub24tY2FwdHVyaW5nIGF0b21pYworICAgIGdyb3VwLCBzdG9wIG1hdGNoaW5nIGFuZCByZXR1cm4gTUFUQ0hfTUFUQ0gsIGJ1dCByZWNvcmQgdGhlIGN1cnJlbnQgaGlnaAorICAgIHdhdGVyIG1hcmsgZm9yIHVzZSBieSBwb3NpdGl2ZSBhc3NlcnRpb25zLiBXZSBhbHNvIG5lZWQgdG8gcmVjb3JkIHRoZSBtYXRjaAorICAgIHN0YXJ0IGluIGNhc2UgaXQgd2FzIGNoYW5nZWQgYnkgXEsuICovCisKKyAgICBpZiAoKCpwcmV2ID49IE9QX0FTU0VSVCAmJiAqcHJldiA8PSBPUF9BU1NFUlRCQUNLX05PVCkgfHwKKyAgICAgICAgICpwcmV2ID09IE9QX09OQ0VfTkMpCisgICAgICB7CisgICAgICBtYi0+ZW5kX21hdGNoX3B0ciA9IGVwdHI7ICAgICAgLyogRm9yIE9OQ0VfTkMgKi8KKyAgICAgIG1iLT5lbmRfb2Zmc2V0X3RvcCA9IG9mZnNldF90b3A7CisgICAgICBtYi0+c3RhcnRfbWF0Y2hfcHRyID0gbXN0YXJ0OworICAgICAgaWYgKGVwdHIgPiBtYi0+bGFzdF91c2VkX3B0cikgbWItPmxhc3RfdXNlZF9wdHIgPSBlcHRyOworICAgICAgUlJFVFVSTihNQVRDSF9NQVRDSCk7ICAgICAgICAgLyogU2V0cyBtYi0+bWFyayAqLworICAgICAgfQorCisgICAgLyogRm9yIGNhcHR1cmluZyBncm91cHMgd2UgaGF2ZSB0byBjaGVjayB0aGUgZ3JvdXAgbnVtYmVyIGJhY2sgYXQgdGhlIHN0YXJ0CisgICAgYW5kIGlmIG5lY2Vzc2FyeSBjb21wbGV0ZSBoYW5kbGluZyBhbiBleHRyYWN0aW9uIGJ5IHNldHRpbmcgdGhlIG9mZnNldHMgYW5kCisgICAgYnVtcGluZyB0aGUgaGlnaCB3YXRlciBtYXJrLiBXaG9sZS1wYXR0ZXJuIHJlY3Vyc2lvbiBpcyBjb2RlZCBhcyBhIHJlY3Vyc2UKKyAgICBpbnRvIGdyb3VwIDAsIHNvIGl0IHdvbid0IGJlIHBpY2tlZCB1cCBoZXJlLiBJbnN0ZWFkLCB3ZSBjYXRjaCBpdCB3aGVuIHRoZQorICAgIE9QX0VORCBpcyByZWFjaGVkLiBPdGhlciByZWN1cnNpb24gaXMgaGFuZGxlZCBoZXJlLiBXZSBqdXN0IGhhdmUgdG8gcmVjb3JkCisgICAgdGhlIGN1cnJlbnQgc3ViamVjdCBwb3NpdGlvbiBhbmQgc3RhcnQgbWF0Y2ggcG9pbnRlciBhbmQgZ2l2ZSBhIE1BVENICisgICAgcmV0dXJuLiAqLworCisgICAgaWYgKCpwcmV2ID09IE9QX0NCUkEgfHwgKnByZXYgPT0gT1BfU0NCUkEgfHwKKyAgICAgICAgKnByZXYgPT0gT1BfQ0JSQVBPUyB8fCAqcHJldiA9PSBPUF9TQ0JSQVBPUykKKyAgICAgIHsKKyAgICAgIG51bWJlciA9IEdFVDIocHJldiwgMStMSU5LX1NJWkUpOworICAgICAgb2Zmc2V0ID0gbnVtYmVyIDw8IDE7CisKKyAgICAgIC8qIEhhbmRsZSBhIHJlY3Vyc2l2ZWx5IGNhbGxlZCBncm91cC4gKi8KKworICAgICAgaWYgKG1iLT5yZWN1cnNpdmUgIT0gTlVMTCAmJiBtYi0+cmVjdXJzaXZlLT5ncm91cF9udW0gPT0gbnVtYmVyKQorICAgICAgICB7CisgICAgICAgIG1iLT5lbmRfbWF0Y2hfcHRyID0gZXB0cjsKKyAgICAgICAgbWItPnN0YXJ0X21hdGNoX3B0ciA9IG1zdGFydDsKKyAgICAgICAgaWYgKGVwdHIgPiBtYi0+bGFzdF91c2VkX3B0cikgbWItPmxhc3RfdXNlZF9wdHIgPSBlcHRyOworICAgICAgICBSUkVUVVJOKE1BVENIX01BVENIKTsKKyAgICAgICAgfQorCisgICAgICAvKiBEZWFsIHdpdGggY2FwdHVyaW5nICovCisKKyAgICAgIG1iLT5jYXB0dXJlX2xhc3QgPSAobWItPmNhcHR1cmVfbGFzdCAmIE9WRkxNQVNLKSB8IG51bWJlcjsKKyAgICAgIGlmIChvZmZzZXQgPj0gbWItPm9mZnNldF9tYXgpIG1iLT5jYXB0dXJlX2xhc3QgfD0gT1ZGTEJJVDsgZWxzZQorICAgICAgICB7CisgICAgICAgIC8qIElmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gb2Zmc2V0X3RvcCwgaXQgbWVhbnMgdGhhdCB3ZSBhcmUKKyAgICAgICAgInNraXBwaW5nIiBhIGNhcHR1cmluZyBncm91cCwgYW5kIHRoYXQgZ3JvdXAncyBvZmZzZXRzIG11c3QgYmUgbWFya2VkCisgICAgICAgIHVuc2V0LiBJbiBlYXJsaWVyIHZlcnNpb25zIG9mIFBDUkUsIGFsbCB0aGUgb2Zmc2V0cyB3ZXJlIHVuc2V0IGF0IHRoZQorICAgICAgICBzdGFydCBvZiBtYXRjaGluZywgYnV0IHRoaXMgZG9lc24ndCB3b3JrIGJlY2F1c2UgYXRvbWljIGdyb3VwcyBhbmQKKyAgICAgICAgYXNzZXJ0aW9ucyBjYW4gY2F1c2UgYSB2YWx1ZSB0byBiZSBzZXQgdGhhdCBzaG91bGQgbGF0ZXIgYmUgdW5zZXQuCisgICAgICAgIEV4YW1wbGU6IG1hdGNoaW5nIC8oPz4oYSkpYnwoYSljLyBhZ2FpbnN0ICJhYyIuIFRoaXMgc2V0cyBncm91cCAxIGFzCisgICAgICAgIHBhcnQgb2YgdGhlIGF0b21pYyBncm91cCwgYnV0IHRoaXMgaXMgbm90IG9uIHRoZSBmaW5hbCBtYXRjaGluZyBwYXRoLAorICAgICAgICBzbyBtdXN0IGJlIHVuc2V0IHdoZW4gMiBpcyBzZXQuIChJZiB0aGVyZSBpcyBubyBncm91cCAyLCB0aGVyZSBpcyBubworICAgICAgICBwcm9ibGVtLCBiZWNhdXNlIG9mZnNldF90b3Agd2lsbCB0aGVuIGJlIDIsIGluZGljYXRpbmcgbm8gY2FwdHVyZS4pICovCisKKyAgICAgICAgaWYgKG9mZnNldCA+IG9mZnNldF90b3ApCisgICAgICAgICAgeworICAgICAgICAgIHJlZ2lzdGVyIFBDUkUyX1NJWkUgKmlwdHIgPSBtYi0+b3ZlY3RvciArIG9mZnNldF90b3A7CisgICAgICAgICAgcmVnaXN0ZXIgUENSRTJfU0laRSAqaWVuZCA9IG1iLT5vdmVjdG9yICsgb2Zmc2V0OworICAgICAgICAgIHdoaWxlIChpcHRyIDwgaWVuZCkgKmlwdHIrKyA9IFBDUkUyX1VOU0VUOworICAgICAgICAgIH0KKworICAgICAgICAvKiBOb3cgbWFrZSB0aGUgZXh0cmFjdGlvbiAqLworCisgICAgICAgIG1iLT5vdmVjdG9yW29mZnNldF0gPSBtYi0+b3ZlY3RvclttYi0+b2Zmc2V0X2VuZCAtIG51bWJlcl07CisgICAgICAgIG1iLT5vdmVjdG9yW29mZnNldCsxXSA9IGVwdHIgLSBtYi0+c3RhcnRfc3ViamVjdDsKKyAgICAgICAgaWYgKG9mZnNldF90b3AgPD0gb2Zmc2V0KSBvZmZzZXRfdG9wID0gb2Zmc2V0ICsgMjsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogT1BfS0VUUlBPUyBpcyBhIHBvc3Nlc3NpdmUgcmVwZWF0aW5nIGtldC4gUmVtZW1iZXIgdGhlIGN1cnJlbnQgcG9zaXRpb24sCisgICAgYW5kIHJldHVybiB0aGUgTUFUQ0hfS0VUUlBPUy4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBkbyB0aGUgcmVwZWF0cyBvbmUKKyAgICBhdCBhIHRpbWUgZnJvbSB0aGUgb3V0ZXIgbGV2ZWwsIHRodXMgc2F2aW5nIHN0YWNrLiBUaGlzIG11c3QgcHJlY2VkZSB0aGUKKyAgICBlbXB0eSBzdHJpbmcgdGVzdCAtIGluIHRoaXMgY2FzZSB0aGF0IHRlc3QgaXMgZG9uZSBhdCB0aGUgb3V0ZXIgbGV2ZWwuICovCisKKyAgICBpZiAoKmVjb2RlID09IE9QX0tFVFJQT1MpCisgICAgICB7CisgICAgICBtYi0+c3RhcnRfbWF0Y2hfcHRyID0gbXN0YXJ0OyAgICAvKiBJbiBjYXNlIFxLIHJlc2V0IGl0ICovCisgICAgICBtYi0+ZW5kX21hdGNoX3B0ciA9IGVwdHI7CisgICAgICBtYi0+ZW5kX29mZnNldF90b3AgPSBvZmZzZXRfdG9wOworICAgICAgaWYgKGVwdHIgPiBtYi0+bGFzdF91c2VkX3B0cikgbWItPmxhc3RfdXNlZF9wdHIgPSBlcHRyOworICAgICAgUlJFVFVSTihNQVRDSF9LRVRSUE9TKTsKKyAgICAgIH0KKworICAgIC8qIEZvciBhbiBvcmRpbmFyeSBub24tcmVwZWF0aW5nIGtldCwganVzdCBjb250aW51ZSBhdCB0aGlzIGxldmVsLiBUaGlzCisgICAgYWxzbyBoYXBwZW5zIGZvciBhIHJlcGVhdGluZyBrZXQgaWYgbm8gY2hhcmFjdGVycyB3ZXJlIG1hdGNoZWQgaW4gdGhlCisgICAgZ3JvdXAuIFRoaXMgaXMgdGhlIGZvcmNpYmxlIGJyZWFraW5nIG9mIGluZmluaXRlIGxvb3BzIGFzIGltcGxlbWVudGVkIGluCisgICAgUGVybCA1LjAwNS4gRm9yIGEgbm9uLXJlcGVhdGluZyBhdG9taWMgZ3JvdXAgdGhhdCBpbmNsdWRlcyBjYXB0dXJlcywKKyAgICBlc3RhYmxpc2ggYSBiYWNrdXAgcG9pbnQgYnkgcHJvY2Vzc2luZyB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhdCBhIGxvd2VyCisgICAgbGV2ZWwuIElmIHRoaXMgcmVzdWx0cyBpbiBhIE5PTUFUQ0ggcmV0dXJuLCBwYXNzIE1BVENIX09OQ0UgYmFjayB0byB0aGUKKyAgICBvcmlnaW5hbCBPUF9PTkNFIGxldmVsLCB0aGVyZWJ5IGJ5cGFzc2luZyBpbnRlcm1lZGlhdGUgYmFja3VwIHBvaW50cywgYnV0CisgICAgcmVzZXR0aW5nIGFueSBjYXB0dXJlcyB0aGF0IGhhcHBlbmVkIGFsb25nIHRoZSB3YXkuICovCisKKyAgICBpZiAoKmVjb2RlID09IE9QX0tFVCB8fCBlcHRyID09IHNhdmVkX2VwdHIpCisgICAgICB7CisgICAgICBpZiAoKnByZXYgPT0gT1BfT05DRSkKKyAgICAgICAgeworICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUgKyAxICsgTElOS19TSVpFLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNMTIpOworICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgbWItPm9uY2VfdGFyZ2V0ID0gcHJldjsgIC8qIExldmVsIGF0IHdoaWNoIHRvIGNoYW5nZSB0byBNQVRDSF9OT01BVENIICovCisgICAgICAgIFJSRVRVUk4oTUFUQ0hfT05DRSk7CisgICAgICAgIH0KKyAgICAgIGVjb2RlICs9IDEgKyBMSU5LX1NJWkU7ICAgIC8qIENhcnJ5IG9uIGF0IHRoaXMgbGV2ZWwgKi8KKyAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgLyogVGhlIG5vcm1hbCByZXBlYXRpbmcga2V0cyB0cnkgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gb3IgcmVzdGFydCBmcm9tCisgICAgdGhlIHByZWNlZGluZyBicmFja2V0LCBpbiB0aGUgYXBwcm9wcmlhdGUgb3JkZXIuIEluIHRoZSBzZWNvbmQgY2FzZSwgd2UgY2FuCisgICAgdXNlIHRhaWwgcmVjdXJzaW9uIHRvIGF2b2lkIHVzaW5nIGFub3RoZXIgc3RhY2sgZnJhbWUsIHVubGVzcyB3ZSBoYXZlIGFuCisgICAgYW4gYXRvbWljIGdyb3VwIG9yIGFuIHVubGltaXRlZCByZXBlYXQgb2YgYSBncm91cCB0aGF0IGNhbiBtYXRjaCBhbiBlbXB0eQorICAgIHN0cmluZy4gKi8KKworICAgIGlmICgqZWNvZGUgPT0gT1BfS0VUUk1JTikKKyAgICAgIHsKKyAgICAgIFJNQVRDSChlcHRyLCBlY29kZSArIDEgKyBMSU5LX1NJWkUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk03KTsKKyAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgaWYgKCpwcmV2ID09IE9QX09OQ0UpCisgICAgICAgIHsKKyAgICAgICAgUk1BVENIKGVwdHIsIHByZXYsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk04KTsKKyAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgIG1iLT5vbmNlX3RhcmdldCA9IHByZXY7ICAvKiBMZXZlbCBhdCB3aGljaCB0byBjaGFuZ2UgdG8gTUFUQ0hfTk9NQVRDSCAqLworICAgICAgICBSUkVUVVJOKE1BVENIX09OQ0UpOworICAgICAgICB9CisgICAgICBpZiAoKnByZXYgPj0gT1BfU0JSQSkgICAgLyogQ291bGQgbWF0Y2ggYW4gZW1wdHkgc3RyaW5nICovCisgICAgICAgIHsKKyAgICAgICAgUk1BVENIKGVwdHIsIHByZXYsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk01MCk7CisgICAgICAgIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgfQorICAgICAgZWNvZGUgPSBwcmV2OworICAgICAgZ290byBUQUlMX1JFQ1VSU0U7CisgICAgICB9CisgICAgZWxzZSAgLyogT1BfS0VUUk1BWCAqLworICAgICAgeworICAgICAgUk1BVENIKGVwdHIsIHByZXYsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0xMyk7CisgICAgICBpZiAocnJjID09IE1BVENIX09OQ0UgJiYgbWItPm9uY2VfdGFyZ2V0ID09IHByZXYpIHJyYyA9IE1BVENIX05PTUFUQ0g7CisgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgIGlmICgqcHJldiA9PSBPUF9PTkNFKQorICAgICAgICB7CisgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSArIDEgKyBMSU5LX1NJWkUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk05KTsKKyAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgIG1iLT5vbmNlX3RhcmdldCA9IHByZXY7CisgICAgICAgIFJSRVRVUk4oTUFUQ0hfT05DRSk7CisgICAgICAgIH0KKyAgICAgIGVjb2RlICs9IDEgKyBMSU5LX1NJWkU7CisgICAgICBnb3RvIFRBSUxfUkVDVVJTRTsKKyAgICAgIH0KKyAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworCisgICAgLyogTm90IG11bHRpbGluZSBtb2RlOiBzdGFydCBvZiBzdWJqZWN0IGFzc2VydGlvbiwgdW5sZXNzIG5vdGJvbC4gKi8KKworICAgIGNhc2UgT1BfQ0lSQzoKKyAgICBpZiAoKG1iLT5tb3B0aW9ucyAmIFBDUkUyX05PVEJPTCkgIT0gMCAmJiBlcHRyID09IG1iLT5zdGFydF9zdWJqZWN0KQorICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKworICAgIC8qIFN0YXJ0IG9mIHN1YmplY3QgYXNzZXJ0aW9uICovCisKKyAgICBjYXNlIE9QX1NPRDoKKyAgICBpZiAoZXB0ciAhPSBtYi0+c3RhcnRfc3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICBlY29kZSsrOworICAgIGJyZWFrOworCisgICAgLyogTXVsdGlsaW5lIG1vZGU6IHN0YXJ0IG9mIHN1YmplY3QgdW5sZXNzIG5vdGJvbCwgb3IgYWZ0ZXIgYW55IG5ld2xpbmUKKyAgICBleGNlcHQgZm9yIG9uZSBhdCB0aGUgdmVyeSBlbmQsIHVubGVzcyBQQ1JFMl9BTFRfQ0lSQ1VNRkxFWCBpcyBzZXQuICovCisKKyAgICBjYXNlIE9QX0NJUkNNOgorICAgIGlmICgobWItPm1vcHRpb25zICYgUENSRTJfTk9UQk9MKSAhPSAwICYmIGVwdHIgPT0gbWItPnN0YXJ0X3N1YmplY3QpCisgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgIGlmIChlcHRyICE9IG1iLT5zdGFydF9zdWJqZWN0ICYmCisgICAgICAgICgoZXB0ciA9PSBtYi0+ZW5kX3N1YmplY3QgJiYKKyAgICAgICAgICAgKG1iLT5wb3B0aW9ucyAmIFBDUkUyX0FMVF9DSVJDVU1GTEVYKSA9PSAwKSB8fAorICAgICAgICAgIVdBU19ORVdMSU5FKGVwdHIpKSkKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgZWNvZGUrKzsKKyAgICBicmVhazsKKworICAgIC8qIFN0YXJ0IG9mIG1hdGNoIGFzc2VydGlvbiAqLworCisgICAgY2FzZSBPUF9TT006CisgICAgaWYgKGVwdHIgIT0gbWItPnN0YXJ0X3N1YmplY3QgKyBtYi0+c3RhcnRfb2Zmc2V0KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgIGVjb2RlKys7CisgICAgYnJlYWs7CisKKyAgICAvKiBSZXNldCB0aGUgc3RhcnQgb2YgbWF0Y2ggcG9pbnQgKi8KKworICAgIGNhc2UgT1BfU0VUX1NPTToKKyAgICBtc3RhcnQgPSBlcHRyOworICAgIGVjb2RlKys7CisgICAgYnJlYWs7CisKKyAgICAvKiBNdWx0aWxpbmUgbW9kZTogYXNzZXJ0IGJlZm9yZSBhbnkgbmV3bGluZSwgb3IgYmVmb3JlIGVuZCBvZiBzdWJqZWN0CisgICAgdW5sZXNzIG5vdGVvbCBpcyBzZXQuICovCisKKyAgICBjYXNlIE9QX0RPTExNOgorICAgIGlmIChlcHRyIDwgbWItPmVuZF9zdWJqZWN0KQorICAgICAgeworICAgICAgaWYgKCFJU19ORVdMSU5FKGVwdHIpKQorICAgICAgICB7CisgICAgICAgIGlmIChtYi0+cGFydGlhbCAhPSAwICYmCisgICAgICAgICAgICBlcHRyICsgMSA+PSBtYi0+ZW5kX3N1YmplY3QgJiYKKyAgICAgICAgICAgIE5MQkxPQ0stPm5sdHlwZSA9PSBOTFRZUEVfRklYRUQgJiYKKyAgICAgICAgICAgIE5MQkxPQ0stPm5sbGVuID09IDIgJiYKKyAgICAgICAgICAgIFVDSEFSMjFURVNUKGVwdHIpID09IE5MQkxPQ0stPm5sWzBdKQorICAgICAgICAgIHsKKyAgICAgICAgICBtYi0+aGl0ZW5kID0gVFJVRTsKKyAgICAgICAgICBpZiAobWItPnBhcnRpYWwgPiAxKSBSUkVUVVJOKFBDUkUyX0VSUk9SX1BBUlRJQUwpOworICAgICAgICAgIH0KKyAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGlmICgobWItPm1vcHRpb25zICYgUENSRTJfTk9URU9MKSAhPSAwKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIH0KKyAgICBlY29kZSsrOworICAgIGJyZWFrOworCisgICAgLyogTm90IG11bHRpbGluZSBtb2RlOiBhc3NlcnQgYmVmb3JlIGEgdGVybWluYXRpbmcgbmV3bGluZSBvciBiZWZvcmUgZW5kIG9mCisgICAgc3ViamVjdCB1bmxlc3Mgbm90ZW9sIGlzIHNldC4gKi8KKworICAgIGNhc2UgT1BfRE9MTDoKKyAgICBpZiAoKG1iLT5tb3B0aW9ucyAmIFBDUkUyX05PVEVPTCkgIT0gMCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICBpZiAoKG1iLT5wb3B0aW9ucyAmIFBDUkUyX0RPTExBUl9FTkRPTkxZKSA9PSAwKSBnb3RvIEFTU0VSVF9OTF9PUl9FT1M7CisKKyAgICAvKiAuLi4gZWxzZSBmYWxsIHRocm91Z2ggZm9yIGVuZG9ubHkgKi8KKworICAgIC8qIEVuZCBvZiBzdWJqZWN0IGFzc2VydGlvbiAoXHopICovCisKKyAgICBjYXNlIE9QX0VPRDoKKyAgICBpZiAoZXB0ciA8IG1iLT5lbmRfc3ViamVjdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgIGVjb2RlKys7CisgICAgYnJlYWs7CisKKyAgICAvKiBFbmQgb2Ygc3ViamVjdCBvciBlbmRpbmcgXG4gYXNzZXJ0aW9uIChcWikgKi8KKworICAgIGNhc2UgT1BfRU9ETjoKKyAgICBBU1NFUlRfTkxfT1JfRU9TOgorICAgIGlmIChlcHRyIDwgbWItPmVuZF9zdWJqZWN0ICYmCisgICAgICAgICghSVNfTkVXTElORShlcHRyKSB8fCBlcHRyICE9IG1iLT5lbmRfc3ViamVjdCAtIG1iLT5ubGxlbikpCisgICAgICB7CisgICAgICBpZiAobWItPnBhcnRpYWwgIT0gMCAmJgorICAgICAgICAgIGVwdHIgKyAxID49IG1iLT5lbmRfc3ViamVjdCAmJgorICAgICAgICAgIE5MQkxPQ0stPm5sdHlwZSA9PSBOTFRZUEVfRklYRUQgJiYKKyAgICAgICAgICBOTEJMT0NLLT5ubGxlbiA9PSAyICYmCisgICAgICAgICAgVUNIQVIyMVRFU1QoZXB0cikgPT0gTkxCTE9DSy0+bmxbMF0pCisgICAgICAgIHsKKyAgICAgICAgbWItPmhpdGVuZCA9IFRSVUU7CisgICAgICAgIGlmIChtYi0+cGFydGlhbCA+IDEpIFJSRVRVUk4oUENSRTJfRVJST1JfUEFSVElBTCk7CisgICAgICAgIH0KKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisKKyAgICAvKiBFaXRoZXIgYXQgZW5kIG9mIHN0cmluZyBvciBcbiBiZWZvcmUgZW5kLiAqLworCisgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICBlY29kZSsrOworICAgIGJyZWFrOworCisgICAgLyogV29yZCBib3VuZGFyeSBhc3NlcnRpb25zICovCisKKyAgICBjYXNlIE9QX05PVF9XT1JEX0JPVU5EQVJZOgorICAgIGNhc2UgT1BfV09SRF9CT1VOREFSWToKKyAgICAgIHsKKworICAgICAgLyogRmluZCBvdXQgaWYgdGhlIHByZXZpb3VzIGFuZCBjdXJyZW50IGNoYXJhY3RlcnMgYXJlICJ3b3JkIiBjaGFyYWN0ZXJzLgorICAgICAgSXQgdGFrZXMgYSBiaXQgbW9yZSB3b3JrIGluIFVURi04IG1vZGUuIENoYXJhY3RlcnMgPiAyNTUgYXJlIGFzc3VtZWQgdG8KKyAgICAgIGJlICJub24td29yZCIgY2hhcmFjdGVycy4gUmVtZW1iZXIgdGhlIGVhcmxpZXN0IGNvbnN1bHRlZCBjaGFyYWN0ZXIgZm9yCisgICAgICBwYXJ0aWFsIG1hdGNoaW5nLiAqLworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBpZiAodXRmKQorICAgICAgICB7CisgICAgICAgIC8qIEdldCBzdGF0dXMgb2YgcHJldmlvdXMgY2hhcmFjdGVyICovCisKKyAgICAgICAgaWYgKGVwdHIgPT0gbWItPnN0YXJ0X3N1YmplY3QpIHByZXZfaXNfd29yZCA9IEZBTFNFOyBlbHNlCisgICAgICAgICAgeworICAgICAgICAgIFBDUkUyX1NQVFIgbGFzdHB0ciA9IGVwdHIgLSAxOworICAgICAgICAgIEJBQ0tDSEFSKGxhc3RwdHIpOworICAgICAgICAgIGlmIChsYXN0cHRyIDwgbWItPnN0YXJ0X3VzZWRfcHRyKSBtYi0+c3RhcnRfdXNlZF9wdHIgPSBsYXN0cHRyOworICAgICAgICAgIEdFVENIQVIoYywgbGFzdHB0cik7CisgICAgICAgICAgaWYgKChtYi0+cG9wdGlvbnMgJiBQQ1JFMl9VQ1ApICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoYyA9PSAnXycpIHByZXZfaXNfd29yZCA9IFRSVUU7IGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgY2F0ID0gVUNEX0NBVEVHT1JZKGMpOworICAgICAgICAgICAgICBwcmV2X2lzX3dvcmQgPSAoY2F0ID09IHVjcF9MIHx8IGNhdCA9PSB1Y3BfTik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgcHJldl9pc193b3JkID0gYyA8IDI1NiAmJiAobWItPmN0eXBlc1tjXSAmIGN0eXBlX3dvcmQpICE9IDA7CisgICAgICAgICAgfQorCisgICAgICAgIC8qIEdldCBzdGF0dXMgb2YgbmV4dCBjaGFyYWN0ZXIgKi8KKworICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgeworICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgY3VyX2lzX3dvcmQgPSBGQUxTRTsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgUENSRTJfU1BUUiBuZXh0cHRyID0gZXB0ciArIDE7CisgICAgICAgICAgRk9SV0FSRENIQVJURVNUKG5leHRwdHIsIG1iLT5lbmRfc3ViamVjdCk7CisgICAgICAgICAgaWYgKG5leHRwdHIgPiBtYi0+bGFzdF91c2VkX3B0cikgbWItPmxhc3RfdXNlZF9wdHIgPSBuZXh0cHRyOworICAgICAgICAgIEdFVENIQVIoYywgZXB0cik7CisgICAgICAgICAgaWYgKChtYi0+cG9wdGlvbnMgJiBQQ1JFMl9VQ1ApICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoYyA9PSAnXycpIGN1cl9pc193b3JkID0gVFJVRTsgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGludCBjYXQgPSBVQ0RfQ0FURUdPUlkoYyk7CisgICAgICAgICAgICAgIGN1cl9pc193b3JkID0gKGNhdCA9PSB1Y3BfTCB8fCBjYXQgPT0gdWNwX04pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgIGN1cl9pc193b3JkID0gYyA8IDI1NiAmJiAobWItPmN0eXBlc1tjXSAmIGN0eXBlX3dvcmQpICE9IDA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgIC8qIFNVUFBPUlQgVVRGICovCisKKyAgICAgIC8qIE5vdCBpbiBVVEYtOCBtb2RlLCBidXQgd2UgbWF5IHN0aWxsIGhhdmUgUENSRTJfVUNQIHNldCwgYW5kIGZvcgorICAgICAgY29uc2lzdGVuY3kgd2l0aCB0aGUgYmVoYXZpb3VyIG9mIFx3IHdlIGRvIHVzZSBpdCBpbiB0aGlzIGNhc2UuICovCisKKyAgICAgICAgeworICAgICAgICAvKiBHZXQgc3RhdHVzIG9mIHByZXZpb3VzIGNoYXJhY3RlciAqLworCisgICAgICAgIGlmIChlcHRyID09IG1iLT5zdGFydF9zdWJqZWN0KSBwcmV2X2lzX3dvcmQgPSBGQUxTRTsgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA8PSBtYi0+c3RhcnRfdXNlZF9wdHIpIG1iLT5zdGFydF91c2VkX3B0ciA9IGVwdHIgLSAxOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICAgIGlmICgobWItPnBvcHRpb25zICYgUENSRTJfVUNQKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgYyA9IGVwdHJbLTFdOworICAgICAgICAgICAgaWYgKGMgPT0gJ18nKSBwcmV2X2lzX3dvcmQgPSBUUlVFOyBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IGNhdCA9IFVDRF9DQVRFR09SWShjKTsKKyAgICAgICAgICAgICAgcHJldl9pc193b3JkID0gKGNhdCA9PSB1Y3BfTCB8fCBjYXQgPT0gdWNwX04pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgcHJldl9pc193b3JkID0gTUFYXzI1NShlcHRyWy0xXSkKKyAgICAgICAgICAgICYmICgobWItPmN0eXBlc1tlcHRyWy0xXV0gJiBjdHlwZV93b3JkKSAhPSAwKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogR2V0IHN0YXR1cyBvZiBuZXh0IGNoYXJhY3RlciAqLworCisgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICB7CisgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICBjdXJfaXNfd29yZCA9IEZBTFNFOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+bGFzdF91c2VkX3B0cikgbWItPmxhc3RfdXNlZF9wdHIgPSBlcHRyICsgMTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgICBpZiAoKG1iLT5wb3B0aW9ucyAmIFBDUkUyX1VDUCkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGMgPSAqZXB0cjsKKyAgICAgICAgICAgIGlmIChjID09ICdfJykgY3VyX2lzX3dvcmQgPSBUUlVFOyBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IGNhdCA9IFVDRF9DQVRFR09SWShjKTsKKyAgICAgICAgICAgICAgY3VyX2lzX3dvcmQgPSAoY2F0ID09IHVjcF9MIHx8IGNhdCA9PSB1Y3BfTik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICBjdXJfaXNfd29yZCA9IE1BWF8yNTUoKmVwdHIpCisgICAgICAgICAgICAmJiAoKG1iLT5jdHlwZXNbKmVwdHJdICYgY3R5cGVfd29yZCkgIT0gMCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIE5vdyBzZWUgaWYgdGhlIHNpdHVhdGlvbiBpcyB3aGF0IHdlIHdhbnQgKi8KKworICAgICAgaWYgKCgqZWNvZGUrKyA9PSBPUF9XT1JEX0JPVU5EQVJZKT8KKyAgICAgICAgICAgY3VyX2lzX3dvcmQgPT0gcHJldl9pc193b3JkIDogY3VyX2lzX3dvcmQgIT0gcHJldl9pc193b3JkKQorICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgLyogTWF0Y2ggYW55IHNpbmdsZSBjaGFyYWN0ZXIgdHlwZSBleGNlcHQgbmV3bGluZTsgaGF2ZSB0byB0YWtlIGNhcmUgd2l0aAorICAgIENSTEYgbmV3bGluZXMgYW5kIHBhcnRpYWwgbWF0Y2hpbmcuICovCisKKyAgICBjYXNlIE9QX0FOWToKKyAgICBpZiAoSVNfTkVXTElORShlcHRyKSkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICBpZiAobWItPnBhcnRpYWwgIT0gMCAmJgorICAgICAgICBlcHRyICsgMSA+PSBtYi0+ZW5kX3N1YmplY3QgJiYKKyAgICAgICAgTkxCTE9DSy0+bmx0eXBlID09IE5MVFlQRV9GSVhFRCAmJgorICAgICAgICBOTEJMT0NLLT5ubGxlbiA9PSAyICYmCisgICAgICAgIFVDSEFSMjFURVNUKGVwdHIpID09IE5MQkxPQ0stPm5sWzBdKQorICAgICAgeworICAgICAgbWItPmhpdGVuZCA9IFRSVUU7CisgICAgICBpZiAobWItPnBhcnRpYWwgPiAxKSBSUkVUVVJOKFBDUkUyX0VSUk9SX1BBUlRJQUwpOworICAgICAgfQorCisgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICAvKiBNYXRjaCBhbnkgc2luZ2xlIGNoYXJhY3RlciB3aGF0c29ldmVyLiAqLworCisgICAgY2FzZSBPUF9BTExBTlk6CisgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KSAgIC8qIERPIE5PVCBtZXJnZSB0aGUgZXB0cisrIGhlcmU7IGl0IG11c3QgKi8KKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IGJlIHVwZGF0ZWQgYmVmb3JlIFNDSEVDS19QQVJUSUFMLiAqLworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisgICAgZXB0cisrOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmICh1dGYpIEFDUk9TU0NIQVIoZXB0ciA8IG1iLT5lbmRfc3ViamVjdCwgKmVwdHIsIGVwdHIrKyk7CisjZW5kaWYKKyAgICBlY29kZSsrOworICAgIGJyZWFrOworCisgICAgLyogTWF0Y2ggYSBzaW5nbGUgY29kZSB1bml0LCBldmVuIGluIFVURi04IG1vZGUuIFRoaXMgb3Bjb2RlIHJlYWxseSBkb2VzCisgICAgbWF0Y2ggYW55IGNvZGUgdW5pdCwgZXZlbiBuZXdsaW5lLiAoSXQgcmVhbGx5IHNob3VsZCBiZSBjYWxsZWQgQU5ZQ09ERVVOSVQsCisgICAgb2YgY291cnNlIC0gdGhlIGJ5dGUgbmFtZSBpcyBmcm9tIHByZS0xNiBiaXQgZGF5cy4pICovCisKKyAgICBjYXNlIE9QX0FOWUJZVEU6CisgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KSAgIC8qIERPIE5PVCBtZXJnZSB0aGUgZXB0cisrIGhlcmU7IGl0IG11c3QgKi8KKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IGJlIHVwZGF0ZWQgYmVmb3JlIFNDSEVDS19QQVJUSUFMLiAqLworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisgICAgZXB0cisrOworICAgIGVjb2RlKys7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICB7CisgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgIH0KKyAgICBHRVRDSEFSSU5DVEVTVChjLCBlcHRyKTsKKyAgICBpZiAoCisjaWZkZWYgU1VQUE9SVF9XSURFX0NIQVJTCisgICAgICAgYyA8IDI1NiAmJgorI2VuZGlmCisgICAgICAgKG1iLT5jdHlwZXNbY10gJiBjdHlwZV9kaWdpdCkgIT0gMAorICAgICAgICkKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgZWNvZGUrKzsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfRElHSVQ6CisgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgeworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgaWYgKAorI2lmZGVmIFNVUFBPUlRfV0lERV9DSEFSUworICAgICAgIGMgPiAyNTUgfHwKKyNlbmRpZgorICAgICAgIChtYi0+Y3R5cGVzW2NdICYgY3R5cGVfZGlnaXQpID09IDAKKyAgICAgICApCisgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgIGVjb2RlKys7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX05PVF9XSElURVNQQUNFOgorICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgIHsKKyAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgfQorICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgIGlmICgKKyNpZmRlZiBTVVBQT1JUX1dJREVfQ0hBUlMKKyAgICAgICBjIDwgMjU2ICYmCisjZW5kaWYKKyAgICAgICAobWItPmN0eXBlc1tjXSAmIGN0eXBlX3NwYWNlKSAhPSAwCisgICAgICAgKQorICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICBlY29kZSsrOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9XSElURVNQQUNFOgorICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgIHsKKyAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgfQorICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgIGlmICgKKyNpZmRlZiBTVVBQT1JUX1dJREVfQ0hBUlMKKyAgICAgICBjID4gMjU1IHx8CisjZW5kaWYKKyAgICAgICAobWItPmN0eXBlc1tjXSAmIGN0eXBlX3NwYWNlKSA9PSAwCisgICAgICAgKQorICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICBlY29kZSsrOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CisgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgeworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgaWYgKAorI2lmZGVmIFNVUFBPUlRfV0lERV9DSEFSUworICAgICAgIGMgPCAyNTYgJiYKKyNlbmRpZgorICAgICAgIChtYi0+Y3R5cGVzW2NdICYgY3R5cGVfd29yZCkgIT0gMAorICAgICAgICkKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgZWNvZGUrKzsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfV09SRENIQVI6CisgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgeworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgaWYgKAorI2lmZGVmIFNVUFBPUlRfV0lERV9DSEFSUworICAgICAgIGMgPiAyNTUgfHwKKyNlbmRpZgorICAgICAgIChtYi0+Y3R5cGVzW2NdICYgY3R5cGVfd29yZCkgPT0gMAorICAgICAgICkKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgZWNvZGUrKzsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQU5ZTkw6CisgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgeworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgc3dpdGNoKGMpCisgICAgICB7CisgICAgICBkZWZhdWx0OiBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworCisgICAgICBjYXNlIENIQVJfQ1I6CisgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgIHsKKyAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoVUNIQVIyMVRFU1QoZXB0cikgPT0gQ0hBUl9MRikgZXB0cisrOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgQ0hBUl9MRjoKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIENIQVJfVlQ6CisgICAgICBjYXNlIENIQVJfRkY6CisgICAgICBjYXNlIENIQVJfTkVMOgorI2lmbmRlZiBFQkNESUMKKyAgICAgIGNhc2UgMHgyMDI4OgorICAgICAgY2FzZSAweDIwMjk6CisjZW5kaWYgIC8qIE5vdCBFQkNESUMgKi8KKyAgICAgIGlmIChtYi0+YnNyX2NvbnZlbnRpb24gPT0gUENSRTJfQlNSX0FOWUNSTEYpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICBicmVhazsKKyAgICAgIH0KKyAgICBlY29kZSsrOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9OT1RfSFNQQUNFOgorICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgIHsKKyAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgfQorICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgIHN3aXRjaChjKQorICAgICAgeworICAgICAgSFNQQUNFX0NBU0VTOiBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOyAgLyogQnl0ZSBhbmQgbXVsdGlieXRlIGNhc2VzICovCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgIH0KKyAgICBlY29kZSsrOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9IU1BBQ0U6CisgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgeworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgc3dpdGNoKGMpCisgICAgICB7CisgICAgICBIU1BBQ0VfQ0FTRVM6IGJyZWFrOyAgLyogQnl0ZSBhbmQgbXVsdGlieXRlIGNhc2VzICovCisgICAgICBkZWZhdWx0OiBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgfQorICAgIGVjb2RlKys7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX05PVF9WU1BBQ0U6CisgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgeworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgc3dpdGNoKGMpCisgICAgICB7CisgICAgICBWU1BBQ0VfQ0FTRVM6IFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgIH0KKyAgICBlY29kZSsrOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9WU1BBQ0U6CisgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgeworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgc3dpdGNoKGMpCisgICAgICB7CisgICAgICBWU1BBQ0VfQ0FTRVM6IGJyZWFrOworICAgICAgZGVmYXVsdDogUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgIH0KKyAgICBlY29kZSsrOworICAgIGJyZWFrOworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgLyogQ2hlY2sgdGhlIG5leHQgY2hhcmFjdGVyIGJ5IFVuaWNvZGUgcHJvcGVydHkuIFdlIHdpbGwgZ2V0IGhlcmUgb25seQorICAgIGlmIHRoZSBzdXBwb3J0IGlzIGluIHRoZSBiaW5hcnk7IG90aGVyd2lzZSBhIGNvbXBpbGUtdGltZSBlcnJvciBvY2N1cnMuICovCisKKyAgICBjYXNlIE9QX1BST1A6CisgICAgY2FzZSBPUF9OT1RQUk9QOgorICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgIHsKKyAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgfQorICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgeworICAgICAgY29uc3QgdWludDMyX3QgKmNwOworICAgICAgY29uc3QgdWNkX3JlY29yZCAqcHJvcCA9IEdFVF9VQ0QoYyk7CisKKyAgICAgIHN3aXRjaChlY29kZVsxXSkKKyAgICAgICAgeworICAgICAgICBjYXNlIFBUX0FOWToKKyAgICAgICAgaWYgKG9wID09IE9QX05PVFBST1ApIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFRfTEFNUDoKKyAgICAgICAgaWYgKChwcm9wLT5jaGFydHlwZSA9PSB1Y3BfTHUgfHwKKyAgICAgICAgICAgICBwcm9wLT5jaGFydHlwZSA9PSB1Y3BfTGwgfHwKKyAgICAgICAgICAgICBwcm9wLT5jaGFydHlwZSA9PSB1Y3BfTHQpID09IChvcCA9PSBPUF9OT1RQUk9QKSkKKyAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBUX0dDOgorICAgICAgICBpZiAoKGVjb2RlWzJdICE9IFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSkgPT0gKG9wID09IE9QX1BST1ApKQorICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUFRfUEM6CisgICAgICAgIGlmICgoZWNvZGVbMl0gIT0gcHJvcC0+Y2hhcnR5cGUpID09IChvcCA9PSBPUF9QUk9QKSkKKyAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBUX1NDOgorICAgICAgICBpZiAoKGVjb2RlWzJdICE9IHByb3AtPnNjcmlwdCkgPT0gKG9wID09IE9QX1BST1ApKQorICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIFRoZXNlIGFyZSBzcGVjaWFscyAqLworCisgICAgICAgIGNhc2UgUFRfQUxOVU06CisgICAgICAgIGlmICgoUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9MIHx8CisgICAgICAgICAgICAgUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9OKSA9PSAob3AgPT0gT1BfTk9UUFJPUCkpCisgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogUGVybCBzcGFjZSB1c2VkIHRvIGV4Y2x1ZGUgVlQsIGJ1dCBmcm9tIFBlcmwgNS4xOCBpdCBpcyBpbmNsdWRlZCwKKyAgICAgICAgd2hpY2ggbWVhbnMgdGhhdCBQZXJsIHNwYWNlIGFuZCBQT1NJWCBzcGFjZSBhcmUgbm93IGlkZW50aWNhbC4gUENSRQorICAgICAgICB3YXMgY2hhbmdlZCBhdCByZWxlYXNlIDguMzQuICovCisKKyAgICAgICAgY2FzZSBQVF9TUEFDRTogICAgLyogUGVybCBzcGFjZSAqLworICAgICAgICBjYXNlIFBUX1BYU1BBQ0U6ICAvKiBQT1NJWCBzcGFjZSAqLworICAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICB7CisgICAgICAgICAgSFNQQUNFX0NBU0VTOgorICAgICAgICAgIFZTUEFDRV9DQVNFUzoKKyAgICAgICAgICBpZiAob3AgPT0gT1BfTk9UUFJPUCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgaWYgKChQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX1opID09CisgICAgICAgICAgICAob3AgPT0gT1BfTk9UUFJPUCkpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBUX1dPUkQ6CisgICAgICAgIGlmICgoUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9MIHx8CisgICAgICAgICAgICAgUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9OIHx8CisgICAgICAgICAgICAgYyA9PSBDSEFSX1VOREVSU0NPUkUpID09IChvcCA9PSBPUF9OT1RQUk9QKSkKKyAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBUX0NMSVNUOgorICAgICAgICBjcCA9IFBSSVYodWNkX2Nhc2VsZXNzX3NldHMpICsgZWNvZGVbMl07CisgICAgICAgIGZvciAoOzspCisgICAgICAgICAgeworICAgICAgICAgIGlmIChjIDwgKmNwKQorICAgICAgICAgICAgeyBpZiAob3AgPT0gT1BfUFJPUCkgeyBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOyB9IGVsc2UgYnJlYWs7IH0KKyAgICAgICAgICBpZiAoYyA9PSAqY3ArKykKKyAgICAgICAgICAgIHsgaWYgKG9wID09IE9QX1BST1ApIGJyZWFrOyBlbHNlIHsgUlJFVFVSTihNQVRDSF9OT01BVENIKTsgfSB9CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFBUX1VDTkM6CisgICAgICAgIGlmICgoYyA9PSBDSEFSX0RPTExBUl9TSUdOIHx8IGMgPT0gQ0hBUl9DT01NRVJDSUFMX0FUIHx8CisgICAgICAgICAgICAgYyA9PSBDSEFSX0dSQVZFX0FDQ0VOVCB8fCAoYyA+PSAweGEwICYmIGMgPD0gMHhkN2ZmKSB8fAorICAgICAgICAgICAgIGMgPj0gMHhlMDAwKSA9PSAob3AgPT0gT1BfTk9UUFJPUCkpCisgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICBSUkVUVVJOKFBDUkUyX0VSUk9SX0lOVEVSTkFMKTsKKyAgICAgICAgfQorCisgICAgICBlY29kZSArPSAzOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgLyogTWF0Y2ggYW4gZXh0ZW5kZWQgVW5pY29kZSBzZXF1ZW5jZS4gV2Ugd2lsbCBnZXQgaGVyZSBvbmx5IGlmIHRoZSBzdXBwb3J0CisgICAgaXMgaW4gdGhlIGJpbmFyeTsgb3RoZXJ3aXNlIGEgY29tcGlsZS10aW1lIGVycm9yIG9jY3Vycy4gKi8KKworICAgIGNhc2UgT1BfRVhUVU5JOgorICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgIHsKKyAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGludCBsZ2IsIHJnYjsKKyAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgbGdiID0gVUNEX0dSQVBIQlJFQUsoYyk7CisgICAgICB3aGlsZSAoZXB0ciA8IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgeworICAgICAgICBpbnQgbGVuID0gMTsKKyAgICAgICAgaWYgKCF1dGYpIGMgPSAqZXB0cjsgZWxzZSB7IEdFVENIQVJMRU4oYywgZXB0ciwgbGVuKTsgfQorICAgICAgICByZ2IgPSBVQ0RfR1JBUEhCUkVBSyhjKTsKKyAgICAgICAgaWYgKChQUklWKHVjcF9nYnRhYmxlKVtsZ2JdICYgKDEgPDwgcmdiKSkgPT0gMCkgYnJlYWs7CisgICAgICAgIGxnYiA9IHJnYjsKKyAgICAgICAgZXB0ciArPSBsZW47CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBDSEVDS19QQVJUSUFMKCk7CisgICAgZWNvZGUrKzsKKyAgICBicmVhazsKKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKworICAgIC8qIE1hdGNoIGEgYmFjayByZWZlcmVuY2UsIHBvc3NpYmx5IHJlcGVhdGVkbHkuIExvb2sgcGFzdCB0aGUgZW5kIG9mIHRoZQorICAgIGl0ZW0gdG8gc2VlIGlmIHRoZXJlIGlzIHJlcGVhdCBpbmZvcm1hdGlvbiBmb2xsb3dpbmcuCisKKyAgICBUaGUgT1BfUkVGIGFuZCBPUF9SRUZJIG9wY29kZXMgYXJlIHVzZWQgZm9yIGEgcmVmZXJlbmNlIHRvIGEgbnVtYmVyZWQgZ3JvdXAKKyAgICBvciB0byBhIG5vbi1kdXBsaWNhdGVkIG5hbWVkIGdyb3VwLiBGb3IgYSBkdXBsaWNhdGVkIG5hbWVkIGdyb3VwLCBPUF9ETlJFRgorICAgIGFuZCBPUF9ETlJFRkkgYXJlIHVzZWQuIEluIHRoaXMgY2FzZSB3ZSBtdXN0IHNjYW4gdGhlIGxpc3Qgb2YgZ3JvdXBzIHRvCisgICAgd2hpY2ggdGhlIG5hbWUgcmVmZXJzLCBhbmQgdXNlIHRoZSBmaXJzdCBvbmUgdGhhdCBpcyBzZXQuICovCisKKyAgICBjYXNlIE9QX0ROUkVGOgorICAgIGNhc2UgT1BfRE5SRUZJOgorICAgIGNhc2VsZXNzID0gb3AgPT0gT1BfRE5SRUZJOworICAgICAgeworICAgICAgaW50IGNvdW50ID0gR0VUMihlY29kZSwgMStJTU0yX1NJWkUpOworICAgICAgUENSRTJfU1BUUiBzbG90ID0gbWItPm5hbWVfdGFibGUgKyBHRVQyKGVjb2RlLCAxKSAqIG1iLT5uYW1lX2VudHJ5X3NpemU7CisgICAgICBlY29kZSArPSAxICsgMipJTU0yX1NJWkU7CisKKyAgICAgIC8qIEluaXRpYWxpemluZyAnb2Zmc2V0JyBhdm9pZHMgYSBjb21waWxlciB3YXJuaW5nIGluIHRoZSBSRUZfUkVQRUFUCisgICAgICBjb2RlLiAqLworCisgICAgICBvZmZzZXQgPSAwOworICAgICAgd2hpbGUgKGNvdW50LS0gPiAwKQorICAgICAgICB7CisgICAgICAgIG9mZnNldCA9IEdFVDIoc2xvdCwgMCkgPDwgMTsKKyAgICAgICAgaWYgKG9mZnNldCA8IG9mZnNldF90b3AgJiYgbWItPm92ZWN0b3Jbb2Zmc2V0XSAhPSBQQ1JFMl9VTlNFVCkgYnJlYWs7CisgICAgICAgIHNsb3QgKz0gbWItPm5hbWVfZW50cnlfc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIGdvdG8gUkVGX1JFUEVBVDsKKworICAgIGNhc2UgT1BfUkVGOgorICAgIGNhc2UgT1BfUkVGSToKKyAgICBjYXNlbGVzcyA9IG9wID09IE9QX1JFRkk7CisgICAgb2Zmc2V0ID0gR0VUMihlY29kZSwgMSkgPDwgMTsgICAgICAgICAgICAgICAvKiBEb3VibGVkIHJlZiBudW1iZXIgKi8KKyAgICBlY29kZSArPSAxICsgSU1NMl9TSVpFOworCisgICAgLyogU2V0IHVwIGZvciByZXBldGl0aW9uLCBvciBoYW5kbGUgdGhlIG5vbi1yZXBlYXRlZCBjYXNlICovCisKKyAgICBSRUZfUkVQRUFUOgorICAgIHN3aXRjaCAoKmVjb2RlKQorICAgICAgeworICAgICAgY2FzZSBPUF9DUlNUQVI6CisgICAgICBjYXNlIE9QX0NSTUlOU1RBUjoKKyAgICAgIGNhc2UgT1BfQ1JQTFVTOgorICAgICAgY2FzZSBPUF9DUk1JTlBMVVM6CisgICAgICBjYXNlIE9QX0NSUVVFUlk6CisgICAgICBjYXNlIE9QX0NSTUlOUVVFUlk6CisgICAgICBjID0gKmVjb2RlKysgLSBPUF9DUlNUQVI7CisgICAgICBtaW5pbWl6ZSA9IChjICYgMSkgIT0gMDsKKyAgICAgIG1pbiA9IHJlcF9taW5bY107ICAgICAgICAgICAgICAgICAvKiBQaWNrIHVwIHZhbHVlcyBmcm9tIHRhYmxlczsgKi8KKyAgICAgIG1heCA9IHJlcF9tYXhbY107ICAgICAgICAgICAgICAgICAvKiB6ZXJvIGZvciBtYXggPT4gaW5maW5pdHkgKi8KKyAgICAgIGlmIChtYXggPT0gMCkgbWF4ID0gSU5UX01BWDsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX0NSUkFOR0U6CisgICAgICBjYXNlIE9QX0NSTUlOUkFOR0U6CisgICAgICBtaW5pbWl6ZSA9ICgqZWNvZGUgPT0gT1BfQ1JNSU5SQU5HRSk7CisgICAgICBtaW4gPSBHRVQyKGVjb2RlLCAxKTsKKyAgICAgIG1heCA9IEdFVDIoZWNvZGUsIDEgKyBJTU0yX1NJWkUpOworICAgICAgaWYgKG1heCA9PSAwKSBtYXggPSBJTlRfTUFYOworICAgICAgZWNvZGUgKz0gMSArIDIgKiBJTU0yX1NJWkU7CisgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAgICAvKiBObyByZXBlYXQgZm9sbG93cyAqLworICAgICAgICB7CisgICAgICAgIGludCByYyA9IG1hdGNoX3JlZihvZmZzZXQsIG9mZnNldF90b3AsIGVwdHIsIG1iLCBjYXNlbGVzcywgJmxlbmd0aCk7CisgICAgICAgIGlmIChyYyAhPSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAocmMgPiAwKSBlcHRyID0gbWItPmVuZF9zdWJqZWN0OyAgIC8qIFBhcnRpYWwgbWF0Y2ggKi8KKyAgICAgICAgICBDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVwdHIgKz0gbGVuZ3RoOworICAgICAgY29udGludWU7ICAgICAgICAgICAgICAvKiBXaXRoIHRoZSBtYWluIGxvb3AgKi8KKyAgICAgIH0KKworICAgIC8qIEhhbmRsZSByZXBlYXRlZCBiYWNrIHJlZmVyZW5jZXMuIElmIGEgc2V0IGdyb3VwIGhhcyBsZW5ndGggemVybywganVzdAorICAgIGNvbnRpbnVlIHdpdGggdGhlIG1haW4gbG9vcCwgYmVjYXVzZSBpdCBtYXRjaGVzIGhvd2V2ZXIgbWFueSB0aW1lcy4gRm9yIGFuCisgICAgdW5zZXQgcmVmZXJlbmNlLCBpZiB0aGUgbWluaW11bSBpcyB6ZXJvLCB3ZSBjYW4gYWxzbyBqdXN0IGNvbnRpbnVlLiBXZSBhbgorICAgIGFsc28gY29udGludWUgaWYgUENSRTJfTUFUQ0hfVU5TRVRfQkFDS1JFRiBpcyBzZXQsIGJlY2F1c2UgdGhpcyBtYWtlcyB1bnNldAorICAgIGdyb3VwIGJlIGhhdmUgYXMgYSB6ZXJvLWxlbmd0aCBncm91cC4gRm9yIGFueSBvdGhlciB1bnNldCBjYXNlcywgY2FycnlpbmcKKyAgICBvbiB3aWxsIHJlc3VsdCBpbiBOT01BVENILiAqLworCisgICAgaWYgKG9mZnNldCA8IG9mZnNldF90b3AgJiYgbWItPm92ZWN0b3Jbb2Zmc2V0XSAhPSBQQ1JFMl9VTlNFVCkKKyAgICAgIHsKKyAgICAgIGlmIChtYi0+b3ZlY3RvcltvZmZzZXRdID09IG1iLT5vdmVjdG9yW29mZnNldCArIDFdKSBjb250aW51ZTsKKyAgICAgIH0KKyAgICBlbHNlICAvKiBHcm91cCBpcyBub3Qgc2V0ICovCisgICAgICB7CisgICAgICBpZiAobWluID09IDAgfHwgKG1iLT5wb3B0aW9ucyAmIFBDUkUyX01BVENIX1VOU0VUX0JBQ0tSRUYpICE9IDApCisgICAgICAgIGNvbnRpbnVlOworICAgICAgfQorCisgICAgLyogRmlyc3QsIGVuc3VyZSB0aGUgbWluaW11bSBudW1iZXIgb2YgbWF0Y2hlcyBhcmUgcHJlc2VudC4gV2UgZ2V0IGJhY2sKKyAgICB0aGUgbGVuZ3RoIG9mIHRoZSByZWZlcmVuY2Ugc3RyaW5nIGV4cGxpY2l0bHkgcmF0aGVyIHRoYW4gcGFzc2luZyB0aGUKKyAgICBhZGRyZXNzIG9mIGVwdHIsIHNvIHRoYXQgZXB0ciBjYW4gYmUgYSByZWdpc3RlciB2YXJpYWJsZS4gKi8KKworICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICB7CisgICAgICBQQ1JFMl9TSVpFIHNsZW5ndGg7CisgICAgICBpbnQgcmMgPSBtYXRjaF9yZWYob2Zmc2V0LCBvZmZzZXRfdG9wLCBlcHRyLCBtYiwgY2FzZWxlc3MsICZzbGVuZ3RoKTsKKyAgICAgIGlmIChyYyAhPSAwKQorICAgICAgICB7CisgICAgICAgIGlmIChyYyA+IDApIGVwdHIgPSBtYi0+ZW5kX3N1YmplY3Q7ICAgLyogUGFydGlhbCBtYXRjaCAqLworICAgICAgICBDSEVDS19QQVJUSUFMKCk7CisgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIH0KKyAgICAgIGVwdHIgKz0gc2xlbmd0aDsKKyAgICAgIH0KKworICAgIC8qIElmIG1pbiA9IG1heCwgY29udGludWUgYXQgdGhlIHNhbWUgbGV2ZWwgd2l0aG91dCByZWN1cnNpb24uCisgICAgVGhleSBhcmUgbm90IGJvdGggYWxsb3dlZCB0byBiZSB6ZXJvLiAqLworCisgICAgaWYgKG1pbiA9PSBtYXgpIGNvbnRpbnVlOworCisgICAgLyogSWYgbWluaW1pemluZywga2VlcCB0cnlpbmcgYW5kIGFkdmFuY2luZyB0aGUgcG9pbnRlciAqLworCisgICAgaWYgKG1pbmltaXplKQorICAgICAgeworICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCisgICAgICAgIHsKKyAgICAgICAgaW50IHJjOworICAgICAgICBQQ1JFMl9TSVpFIHNsZW5ndGg7CisgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTE0KTsKKyAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgIGlmIChmaSA+PSBtYXgpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIHJjID0gbWF0Y2hfcmVmKG9mZnNldCwgb2Zmc2V0X3RvcCwgZXB0ciwgbWIsIGNhc2VsZXNzLCAmc2xlbmd0aCk7CisgICAgICAgIGlmIChyYyAhPSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAocmMgPiAwKSBlcHRyID0gbWItPmVuZF9zdWJqZWN0OyAgIC8qIFBhcnRpYWwgbWF0Y2ggKi8KKyAgICAgICAgICBDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICB9CisgICAgICAgIGVwdHIgKz0gc2xlbmd0aDsKKyAgICAgICAgfQorICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKyAgICAgIH0KKworICAgIC8qIElmIG1heGltaXppbmcsIGZpbmQgdGhlIGxvbmdlc3Qgc3RyaW5nIGFuZCB3b3JrIGJhY2t3YXJkcywgYXMgbG9uZyBhcworICAgIHRoZSBtYXRjaGVkIGxlbmd0aHMgZm9yIGVhY2ggaXRlcmF0aW9uIGFyZSB0aGUgc2FtZS4gKi8KKworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIEJPT0wgc2FtZWxlbmd0aHMgPSBUUlVFOworICAgICAgcHAgPSBlcHRyOworICAgICAgbGVuZ3RoID0gbWItPm92ZWN0b3Jbb2Zmc2V0KzFdIC0gbWItPm92ZWN0b3Jbb2Zmc2V0XTsKKworICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgIHsKKyAgICAgICAgUENSRTJfU0laRSBzbGVuZ3RoOworICAgICAgICBpbnQgcmMgPSBtYXRjaF9yZWYob2Zmc2V0LCBvZmZzZXRfdG9wLCBlcHRyLCBtYiwgY2FzZWxlc3MsICZzbGVuZ3RoKTsKKworICAgICAgICBpZiAocmMgIT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgLyogQ2FuJ3QgdXNlIENIRUNLX1BBUlRJQUwgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBlcHRyIGluCisgICAgICAgICAgdGhlIHNvZnQgcGFydGlhbCBtYXRjaGluZyBjYXNlLiAqLworCisgICAgICAgICAgaWYgKHJjID4gMCAmJiBtYi0+cGFydGlhbCAhPSAwICYmCisgICAgICAgICAgICAgIG1iLT5lbmRfc3ViamVjdCA+IG1iLT5zdGFydF91c2VkX3B0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIG1iLT5oaXRlbmQgPSBUUlVFOworICAgICAgICAgICAgaWYgKG1iLT5wYXJ0aWFsID4gMSkgUlJFVFVSTihQQ1JFMl9FUlJPUl9QQVJUSUFMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisKKyAgICAgICAgaWYgKHNsZW5ndGggIT0gbGVuZ3RoKSBzYW1lbGVuZ3RocyA9IEZBTFNFOworICAgICAgICBlcHRyICs9IHNsZW5ndGg7CisgICAgICAgIH0KKworICAgICAgLyogSWYgdGhlIGxlbmd0aCBtYXRjaGVkIGZvciBlYWNoIHJlcGV0aXRpb24gaXMgdGhlIHNhbWUgYXMgdGhlIGxlbmd0aCBvZgorICAgICAgdGhlIGNhcHR1cmVkIGdyb3VwLCB3ZSBjYW4gZWFzaWx5IHdvcmsgYmFja3dhcmRzLiBUaGlzIGlzIHRoZSBub3JtYWwKKyAgICAgIGNhc2UuIEhvd2V2ZXIsIGluIGNhc2VsZXNzIFVURi04IG1vZGUgdGhlcmUgYXJlIHBhaXJzIG9mIGNhc2UtZXF1aXZhbGVudAorICAgICAgY2hhcmFjdGVycyB3aG9zZSBsZW5ndGhzIChpbiB0ZXJtcyBvZiBjb2RlIHVuaXRzKSBkaWZmZXIuIEhvd2V2ZXIsIHRoaXMKKyAgICAgIGlzIHZlcnkgcmFyZSwgc28gd2UgaGFuZGxlIGl0IGJ5IHJlLW1hdGNoaW5nIGZld2VyIGFuZCBmZXdlciB0aW1lcy4gKi8KKworICAgICAgaWYgKHNhbWVsZW5ndGhzKQorICAgICAgICB7CisgICAgICAgIHdoaWxlIChlcHRyID49IHBwKQorICAgICAgICAgIHsKKyAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0xNSk7CisgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgZXB0ciAtPSBsZW5ndGg7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIFRoZSByYXJlIGNhc2Ugb2Ygbm9uLW1hdGNoaW5nIGxlbmd0aHMuIFJlLXNjYW4gdGhlIHJlcGV0aXRpb24gZm9yIGVhY2gKKyAgICAgIGl0ZXJhdGlvbi4gV2Uga25vdyB0aGF0IG1hdGNoX3JlZigpIHdpbGwgc3VjY2VlZCBldmVyeSB0aW1lLiAqLworCisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgbWF4ID0gaTsKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgICB7CisgICAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNNjgpOworICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgIGlmIChlcHRyID09IHBwKSBicmVhazsgIC8qIEZhaWxlZCBhZnRlciBtaW5pbWFsIHJlcGV0aXRpb24gKi8KKyAgICAgICAgICBlcHRyID0gcHA7CisgICAgICAgICAgbWF4LS07CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBQQ1JFMl9TSVpFIHNsZW5ndGg7CisgICAgICAgICAgICAodm9pZCltYXRjaF9yZWYob2Zmc2V0LCBvZmZzZXRfdG9wLCBlcHRyLCBtYiwgY2FzZWxlc3MsICZzbGVuZ3RoKTsKKyAgICAgICAgICAgIGVwdHIgKz0gc2xlbmd0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgIH0KKyAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworCisgICAgLyogTWF0Y2ggYSBiaXQtbWFwcGVkIGNoYXJhY3RlciBjbGFzcywgcG9zc2libHkgcmVwZWF0ZWRseS4gVGhpcyBvcCBjb2RlIGlzCisgICAgdXNlZCB3aGVuIGFsbCB0aGUgY2hhcmFjdGVycyBpbiB0aGUgY2xhc3MgaGF2ZSB2YWx1ZXMgaW4gdGhlIHJhbmdlIDAtMjU1LAorICAgIGFuZCBlaXRoZXIgdGhlIG1hdGNoaW5nIGlzIGNhc2VmdWwsIG9yIHRoZSBjaGFyYWN0ZXJzIGFyZSBpbiB0aGUgcmFuZ2UKKyAgICAwLTEyNyB3aGVuIFVURi04IHByb2Nlc3NpbmcgaXMgZW5hYmxlZC4gVGhlIG9ubHkgZGlmZmVyZW5jZSBiZXR3ZWVuCisgICAgT1BfQ0xBU1MgYW5kIE9QX05DTEFTUyBvY2N1cnMgd2hlbiBhIGRhdGEgY2hhcmFjdGVyIG91dHNpZGUgdGhlIHJhbmdlIGlzCisgICAgZW5jb3VudGVyZWQuCisKKyAgICBGaXJzdCwgbG9vayBwYXN0IHRoZSBlbmQgb2YgdGhlIGl0ZW0gdG8gc2VlIGlmIHRoZXJlIGlzIHJlcGVhdCBpbmZvcm1hdGlvbgorICAgIGZvbGxvd2luZy4gVGhlbiBvYmV5IHNpbWlsYXIgY29kZSB0byBjaGFyYWN0ZXIgdHlwZSByZXBlYXRzIC0gd3JpdHRlbiBvdXQKKyAgICBhZ2FpbiBmb3Igc3BlZWQuICovCisKKyAgICBjYXNlIE9QX05DTEFTUzoKKyAgICBjYXNlIE9QX0NMQVNTOgorICAgICAgeworICAgICAgLyogVGhlIGRhdGEgdmFyaWFibGUgaXMgc2F2ZWQgYWNyb3NzIGZyYW1lcywgc28gdGhlIGJ5dGUgbWFwIG5lZWRzIHRvCisgICAgICBiZSBzdG9yZWQgdGhlcmUuICovCisjZGVmaW5lIEJZVEVfTUFQICgodWludDhfdCAqKWRhdGEpCisgICAgICBkYXRhID0gZWNvZGUgKyAxOyAgICAgICAgICAgICAgICAvKiBTYXZlIGZvciBtYXRjaGluZyAqLworICAgICAgZWNvZGUgKz0gMSArICgzMiAvIHNpemVvZihQQ1JFMl9VQ0hBUikpOyAvKiBBZHZhbmNlIHBhc3QgdGhlIGl0ZW0gKi8KKworICAgICAgc3dpdGNoICgqZWNvZGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPUF9DUlNUQVI6CisgICAgICAgIGNhc2UgT1BfQ1JNSU5TVEFSOgorICAgICAgICBjYXNlIE9QX0NSUExVUzoKKyAgICAgICAgY2FzZSBPUF9DUk1JTlBMVVM6CisgICAgICAgIGNhc2UgT1BfQ1JRVUVSWToKKyAgICAgICAgY2FzZSBPUF9DUk1JTlFVRVJZOgorICAgICAgICBjYXNlIE9QX0NSUE9TU1RBUjoKKyAgICAgICAgY2FzZSBPUF9DUlBPU1BMVVM6CisgICAgICAgIGNhc2UgT1BfQ1JQT1NRVUVSWToKKyAgICAgICAgYyA9ICplY29kZSsrIC0gT1BfQ1JTVEFSOworICAgICAgICBpZiAoYyA8IE9QX0NSUE9TU1RBUiAtIE9QX0NSU1RBUikgbWluaW1pemUgPSAoYyAmIDEpICE9IDA7CisgICAgICAgIGVsc2UgcG9zc2Vzc2l2ZSA9IFRSVUU7CisgICAgICAgIG1pbiA9IHJlcF9taW5bY107ICAgICAgICAgICAgICAgICAvKiBQaWNrIHVwIHZhbHVlcyBmcm9tIHRhYmxlczsgKi8KKyAgICAgICAgbWF4ID0gcmVwX21heFtjXTsgICAgICAgICAgICAgICAgIC8qIHplcm8gZm9yIG1heCA9PiBpbmZpbml0eSAqLworICAgICAgICBpZiAobWF4ID09IDApIG1heCA9IElOVF9NQVg7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfQ1JSQU5HRToKKyAgICAgICAgY2FzZSBPUF9DUk1JTlJBTkdFOgorICAgICAgICBjYXNlIE9QX0NSUE9TUkFOR0U6CisgICAgICAgIG1pbmltaXplID0gKCplY29kZSA9PSBPUF9DUk1JTlJBTkdFKTsKKyAgICAgICAgcG9zc2Vzc2l2ZSA9ICgqZWNvZGUgPT0gT1BfQ1JQT1NSQU5HRSk7CisgICAgICAgIG1pbiA9IEdFVDIoZWNvZGUsIDEpOworICAgICAgICBtYXggPSBHRVQyKGVjb2RlLCAxICsgSU1NMl9TSVpFKTsKKyAgICAgICAgaWYgKG1heCA9PSAwKSBtYXggPSBJTlRfTUFYOworICAgICAgICBlY29kZSArPSAxICsgMiAqIElNTTJfU0laRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgICAgICAvKiBObyByZXBlYXQgZm9sbG93cyAqLworICAgICAgICBtaW4gPSBtYXggPSAxOworICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAvKiBGaXJzdCwgZW5zdXJlIHRoZSBtaW5pbXVtIG51bWJlciBvZiBtYXRjaGVzIGFyZSBwcmVzZW50LiAqLworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBpZiAodXRmKQorICAgICAgICB7CisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIEdFVENIQVJJTkMoYywgZXB0cik7CisgICAgICAgICAgaWYgKGMgPiAyNTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAob3AgPT0gT1BfQ0xBU1MpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKChCWVRFX01BUFtjLzhdICYgKDEgPDwgKGMmNykpKSA9PSAwKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICAvKiBOb3QgVVRGIG1vZGUgKi8KKyAgICAgICAgeworICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjID0gKmVwdHIrKzsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgICAgICAgIGlmIChjID4gMjU1KQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKG9wID09IE9QX0NMQVNTKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgaWYgKChCWVRFX01BUFtjLzhdICYgKDEgPDwgKGMmNykpKSA9PSAwKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBJZiBtYXggPT0gbWluIHdlIGNhbiBjb250aW51ZSB3aXRoIHRoZSBtYWluIGxvb3Agd2l0aG91dCB0aGUKKyAgICAgIG5lZWQgdG8gcmVjdXJzZS4gKi8KKworICAgICAgaWYgKG1pbiA9PSBtYXgpIGNvbnRpbnVlOworCisgICAgICAvKiBJZiBtaW5pbWl6aW5nLCBrZWVwIHRlc3RpbmcgdGhlIHJlc3Qgb2YgdGhlIGV4cHJlc3Npb24gYW5kIGFkdmFuY2luZworICAgICAgdGhlIHBvaW50ZXIgd2hpbGUgaXQgbWF0Y2hlcyB0aGUgY2xhc3MuICovCisKKyAgICAgIGlmIChtaW5pbWl6ZSkKKyAgICAgICAgeworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICBpZiAodXRmKQorICAgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGZpID0gbWluOzsgZmkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTE2KTsKKyAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgICAgaWYgKGZpID49IG1heCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSSU5DKGMsIGVwdHIpOworICAgICAgICAgICAgaWYgKGMgPiAyNTUpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKG9wID09IE9QX0NMQVNTKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGlmICgoQllURV9NQVBbYy84XSAmICgxIDw8IChjJjcpKSkgPT0gMCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAvKiBOb3QgVVRGIG1vZGUgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0xNyk7CisgICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICAgIGlmIChmaSA+PSBtYXgpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYyA9ICplcHRyKys7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICAgICAgICAgIGlmIChjID4gMjU1KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChvcCA9PSBPUF9DTEFTUykgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgIGlmICgoQllURV9NQVBbYy84XSAmICgxIDw8IChjJjcpKSkgPT0gMCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIC8qIENvbnRyb2wgbmV2ZXIgZ2V0cyBoZXJlICovCisgICAgICAgIH0KKworICAgICAgLyogSWYgbWF4aW1pemluZywgZmluZCB0aGUgbG9uZ2VzdCBwb3NzaWJsZSBydW4sIHRoZW4gd29yayBiYWNrd2FyZHMuICovCisKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBwcCA9IGVwdHI7CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgaWYgKHV0ZikKKyAgICAgICAgICB7CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVuID0gMTsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUkxFTihjLCBlcHRyLCBsZW4pOworICAgICAgICAgICAgaWYgKGMgPiAyNTUpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKG9wID09IE9QX0NMQVNTKSBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBpZiAoKEJZVEVfTUFQW2MvOF0gJiAoMSA8PCAoYyY3KSkpID09IDApIGJyZWFrOworICAgICAgICAgICAgZXB0ciArPSBsZW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAocG9zc2Vzc2l2ZSkgY29udGludWU7ICAgIC8qIE5vIGJhY2t0cmFja2luZyAqLworCisgICAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTE4KTsKKyAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgICAgaWYgKGVwdHItLSA9PSBwcCkgYnJlYWs7ICAgICAgICAvKiBTdG9wIGlmIHRyaWVkIGF0IG9yaWdpbmFsIHBvcyAqLworICAgICAgICAgICAgQkFDS0NIQVIoZXB0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAvKiBOb3QgVVRGIG1vZGUgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGMgPSAqZXB0cjsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgICAgICAgICAgaWYgKGMgPiAyNTUpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKG9wID09IE9QX0NMQVNTKSBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgIGlmICgoQllURV9NQVBbYy84XSAmICgxIDw8IChjJjcpKSkgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAocG9zc2Vzc2l2ZSkgY29udGludWU7ICAgIC8qIE5vIGJhY2t0cmFja2luZyAqLworCisgICAgICAgICAgd2hpbGUgKGVwdHIgPj0gcHApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0xOSk7CisgICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICAgIGVwdHItLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgfQorI3VuZGVmIEJZVEVfTUFQCisgICAgICB9CisgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKworCisgICAgLyogTWF0Y2ggYW4gZXh0ZW5kZWQgY2hhcmFjdGVyIGNsYXNzLiBJbiB0aGUgOC1iaXQgbGlicmFyeSwgdGhpcyBvcGNvZGUgaXMKKyAgICBlbmNvdW50ZXJlZCBvbmx5IHdoZW4gVVRGLTggbW9kZSBtb2RlIGlzIHN1cHBvcnRlZC4gSW4gdGhlIDE2LWJpdCBhbmQKKyAgICAzMi1iaXQgbGlicmFyaWVzLCBjb2RlcG9pbnRzIGdyZWF0ZXIgdGhhbiAyNTUgbWF5IGJlIGVuY291bnRlcmVkIGV2ZW4gd2hlbgorICAgIFVURiBpcyBub3Qgc3VwcG9ydGVkLiAqLworCisjaWZkZWYgU1VQUE9SVF9XSURFX0NIQVJTCisgICAgY2FzZSBPUF9YQ0xBU1M6CisgICAgICB7CisgICAgICBkYXRhID0gZWNvZGUgKyAxICsgTElOS19TSVpFOyAgICAgICAgICAgICAgICAvKiBTYXZlIGZvciBtYXRjaGluZyAqLworICAgICAgZWNvZGUgKz0gR0VUKGVjb2RlLCAxKTsgICAgICAgICAgICAgICAgICAgICAgLyogQWR2YW5jZSBwYXN0IHRoZSBpdGVtICovCisKKyAgICAgIHN3aXRjaCAoKmVjb2RlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1BfQ1JTVEFSOgorICAgICAgICBjYXNlIE9QX0NSTUlOU1RBUjoKKyAgICAgICAgY2FzZSBPUF9DUlBMVVM6CisgICAgICAgIGNhc2UgT1BfQ1JNSU5QTFVTOgorICAgICAgICBjYXNlIE9QX0NSUVVFUlk6CisgICAgICAgIGNhc2UgT1BfQ1JNSU5RVUVSWToKKyAgICAgICAgY2FzZSBPUF9DUlBPU1NUQVI6CisgICAgICAgIGNhc2UgT1BfQ1JQT1NQTFVTOgorICAgICAgICBjYXNlIE9QX0NSUE9TUVVFUlk6CisgICAgICAgIGMgPSAqZWNvZGUrKyAtIE9QX0NSU1RBUjsKKyAgICAgICAgaWYgKGMgPCBPUF9DUlBPU1NUQVIgLSBPUF9DUlNUQVIpIG1pbmltaXplID0gKGMgJiAxKSAhPSAwOworICAgICAgICBlbHNlIHBvc3Nlc3NpdmUgPSBUUlVFOworICAgICAgICBtaW4gPSByZXBfbWluW2NdOyAgICAgICAgICAgICAgICAgLyogUGljayB1cCB2YWx1ZXMgZnJvbSB0YWJsZXM7ICovCisgICAgICAgIG1heCA9IHJlcF9tYXhbY107ICAgICAgICAgICAgICAgICAvKiB6ZXJvIGZvciBtYXggPT4gaW5maW5pdHkgKi8KKyAgICAgICAgaWYgKG1heCA9PSAwKSBtYXggPSBJTlRfTUFYOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX0NSUkFOR0U6CisgICAgICAgIGNhc2UgT1BfQ1JNSU5SQU5HRToKKyAgICAgICAgY2FzZSBPUF9DUlBPU1JBTkdFOgorICAgICAgICBtaW5pbWl6ZSA9ICgqZWNvZGUgPT0gT1BfQ1JNSU5SQU5HRSk7CisgICAgICAgIHBvc3Nlc3NpdmUgPSAoKmVjb2RlID09IE9QX0NSUE9TUkFOR0UpOworICAgICAgICBtaW4gPSBHRVQyKGVjb2RlLCAxKTsKKyAgICAgICAgbWF4ID0gR0VUMihlY29kZSwgMSArIElNTTJfU0laRSk7CisgICAgICAgIGlmIChtYXggPT0gMCkgbWF4ID0gSU5UX01BWDsKKyAgICAgICAgZWNvZGUgKz0gMSArIDIgKiBJTU0yX1NJWkU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgICAgLyogTm8gcmVwZWF0IGZvbGxvd3MgKi8KKyAgICAgICAgbWluID0gbWF4ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgLyogRmlyc3QsIGVuc3VyZSB0aGUgbWluaW11bSBudW1iZXIgb2YgbWF0Y2hlcyBhcmUgcHJlc2VudC4gKi8KKworICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgeworICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgeworICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICB9CisgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgICBpZiAoIVBSSVYoeGNsYXNzKShjLCBkYXRhLCB1dGYpKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICB9CisKKyAgICAgIC8qIElmIG1heCA9PSBtaW4gd2UgY2FuIGNvbnRpbnVlIHdpdGggdGhlIG1haW4gbG9vcCB3aXRob3V0IHRoZQorICAgICAgbmVlZCB0byByZWN1cnNlLiAqLworCisgICAgICBpZiAobWluID09IG1heCkgY29udGludWU7CisKKyAgICAgIC8qIElmIG1pbmltaXppbmcsIGtlZXAgdGVzdGluZyB0aGUgcmVzdCBvZiB0aGUgZXhwcmVzc2lvbiBhbmQgYWR2YW5jaW5nCisgICAgICB0aGUgcG9pbnRlciB3aGlsZSBpdCBtYXRjaGVzIHRoZSBjbGFzcy4gKi8KKworICAgICAgaWYgKG1pbmltaXplKQorICAgICAgICB7CisgICAgICAgIGZvciAoZmkgPSBtaW47OyBmaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0yMCk7CisgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgaWYgKGZpID49IG1heCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBHRVRDSEFSSU5DVEVTVChjLCBlcHRyKTsKKyAgICAgICAgICBpZiAoIVBSSVYoeGNsYXNzKShjLCBkYXRhLCB1dGYpKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIH0KKyAgICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKyAgICAgICAgfQorCisgICAgICAvKiBJZiBtYXhpbWl6aW5nLCBmaW5kIHRoZSBsb25nZXN0IHBvc3NpYmxlIHJ1biwgdGhlbiB3b3JrIGJhY2t3YXJkcy4gKi8KKworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIHBwID0gZXB0cjsKKyAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgICBHRVRDSEFSTEVOVEVTVChjLCBlcHRyLCBsZW4pOworI2Vsc2UKKyAgICAgICAgICBjID0gKmVwdHI7CisjZW5kaWYKKyAgICAgICAgICBpZiAoIVBSSVYoeGNsYXNzKShjLCBkYXRhLCB1dGYpKSBicmVhazsKKyAgICAgICAgICBlcHRyICs9IGxlbjsKKyAgICAgICAgICB9CisKKyAgICAgICAgaWYgKHBvc3Nlc3NpdmUpIGNvbnRpbnVlOyAgICAvKiBObyBiYWNrdHJhY2tpbmcgKi8KKworICAgICAgICBmb3IoOzspCisgICAgICAgICAgeworICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTIxKTsKKyAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICBpZiAoZXB0ci0tID09IHBwKSBicmVhazsgICAgICAgIC8qIFN0b3AgaWYgdHJpZWQgYXQgb3JpZ2luYWwgcG9zICovCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgICAgaWYgKHV0ZikgQkFDS0NIQVIoZXB0cik7CisjZW5kaWYKKyAgICAgICAgICB9CisgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIH0KKworICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKyAgICAgIH0KKyNlbmRpZiAgICAvKiBFbmQgb2YgWENMQVNTICovCisKKyAgICAvKiBNYXRjaCBhIHNpbmdsZSBjaGFyYWN0ZXIsIGNhc2VmdWxseSAqLworCisgICAgY2FzZSBPUF9DSEFSOgorI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmICh1dGYpCisgICAgICB7CisgICAgICBsZW5ndGggPSAxOworICAgICAgZWNvZGUrKzsKKyAgICAgIEdFVENIQVJMRU4oZmMsIGVjb2RlLCBsZW5ndGgpOworICAgICAgaWYgKGxlbmd0aCA+IChQQ1JFMl9TSVpFKShtYi0+ZW5kX3N1YmplY3QgLSBlcHRyKSkKKyAgICAgICAgeworICAgICAgICBDSEVDS19QQVJUSUFMKCk7ICAgICAgICAgICAgIC8qIE5vdCBTQ0hFQ0tfUEFSVElBTCgpICovCisgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIH0KKyAgICAgIGZvciAoOyBsZW5ndGggPiAwOyBsZW5ndGgtLSkKKyAgICAgICAgeworICAgICAgICBpZiAoKmVjb2RlKysgIT0gVUNIQVIyMUlOQyhlcHRyKSkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIC8qIE5vdCBVVEYgbW9kZSAqLworICAgICAgeworICAgICAgaWYgKG1iLT5lbmRfc3ViamVjdCAtIGVwdHIgPCAxKQorICAgICAgICB7CisgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7ICAgICAgICAgICAgLyogVGhpcyBvbmUgY2FuIHVzZSBTQ0hFQ0tfUEFSVElBTCgpICovCisgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIH0KKyAgICAgIGlmIChlY29kZVsxXSAhPSAqZXB0cisrKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgZWNvZGUgKz0gMjsKKyAgICAgIH0KKyAgICBicmVhazsKKworICAgIC8qIE1hdGNoIGEgc2luZ2xlIGNoYXJhY3RlciwgY2FzZWxlc3NseS4gSWYgd2UgYXJlIGF0IHRoZSBlbmQgb2YgdGhlCisgICAgc3ViamVjdCwgZ2l2ZSB1cCBpbW1lZGlhdGVseS4gKi8KKworICAgIGNhc2UgT1BfQ0hBUkk6CisgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgeworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICBpZiAodXRmKQorICAgICAgeworICAgICAgbGVuZ3RoID0gMTsKKyAgICAgIGVjb2RlKys7CisgICAgICBHRVRDSEFSTEVOKGZjLCBlY29kZSwgbGVuZ3RoKTsKKworICAgICAgLyogSWYgdGhlIHBhdHRlcm4gY2hhcmFjdGVyJ3MgdmFsdWUgaXMgPCAxMjgsIHdlIGhhdmUgb25seSBvbmUgYnl0ZSwgYW5kCisgICAgICB3ZSBrbm93IHRoYXQgaXRzIG90aGVyIGNhc2UgbXVzdCBhbHNvIGJlIG9uZSBieXRlIGxvbmcsIHNvIHdlIGNhbiB1c2UgdGhlCisgICAgICBmYXN0IGxvb2t1cCB0YWJsZS4gV2Uga25vdyB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBieXRlIGxlZnQgaW4gdGhlCisgICAgICBzdWJqZWN0LiAqLworCisgICAgICBpZiAoZmMgPCAxMjgpCisgICAgICAgIHsKKyAgICAgICAgdWludDMyX3QgY2MgPSBVQ0hBUjIxKGVwdHIpOworICAgICAgICBpZiAobWItPmxjY1tmY10gIT0gVEFCTEVfR0VUKGNjLCBtYi0+bGNjLCBjYykpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIGVjb2RlKys7CisgICAgICAgIGVwdHIrKzsKKyAgICAgICAgfQorCisgICAgICAvKiBPdGhlcndpc2Ugd2UgbXVzdCBwaWNrIHVwIHRoZSBzdWJqZWN0IGNoYXJhY3Rlci4gTm90ZSB0aGF0IHdlIGNhbm5vdAorICAgICAgdXNlIHRoZSB2YWx1ZSBvZiAibGVuZ3RoIiB0byBjaGVjayBmb3Igc3VmZmljaWVudCBieXRlcyBsZWZ0LCBiZWNhdXNlIHRoZQorICAgICAgb3RoZXIgY2FzZSBvZiB0aGUgY2hhcmFjdGVyIG1heSBoYXZlIG1vcmUgb3IgZmV3ZXIgYnl0ZXMuICAqLworCisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgdWludDMyX3QgZGM7CisgICAgICAgIEdFVENIQVJJTkMoZGMsIGVwdHIpOworICAgICAgICBlY29kZSArPSBsZW5ndGg7CisKKyAgICAgICAgLyogSWYgd2UgaGF2ZSBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQsIHdlIGNhbiB1c2UgaXQgdG8gdGVzdCB0aGUgb3RoZXIKKyAgICAgICAgY2FzZSBvZiB0aGUgY2hhcmFjdGVyLCBpZiB0aGVyZSBpcyBvbmUuICovCisKKyAgICAgICAgaWYgKGZjICE9IGRjKQorICAgICAgICAgIHsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgICBpZiAoZGMgIT0gVUNEX09USEVSQ0FTRShmYykpCisjZW5kaWYKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgZWxzZQorI2VuZGlmICAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKyAgICAvKiBOb3QgVVRGIG1vZGUgKi8KKyAgICAgIHsKKyAgICAgIGlmIChUQUJMRV9HRVQoZWNvZGVbMV0sIG1iLT5sY2MsIGVjb2RlWzFdKQorICAgICAgICAgICE9IFRBQkxFX0dFVCgqZXB0ciwgbWItPmxjYywgKmVwdHIpKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgZXB0cisrOworICAgICAgZWNvZGUgKz0gMjsKKyAgICAgIH0KKyAgICBicmVhazsKKworICAgIC8qIE1hdGNoIGEgc2luZ2xlIGNoYXJhY3RlciByZXBlYXRlZGx5LiAqLworCisgICAgY2FzZSBPUF9FWEFDVDoKKyAgICBjYXNlIE9QX0VYQUNUSToKKyAgICBtaW4gPSBtYXggPSBHRVQyKGVjb2RlLCAxKTsKKyAgICBlY29kZSArPSAxICsgSU1NMl9TSVpFOworICAgIGdvdG8gUkVQRUFUQ0hBUjsKKworICAgIGNhc2UgT1BfUE9TVVBUTzoKKyAgICBjYXNlIE9QX1BPU1VQVE9JOgorICAgIHBvc3Nlc3NpdmUgPSBUUlVFOworICAgIC8qIEZhbGwgdGhyb3VnaCAqLworCisgICAgY2FzZSBPUF9VUFRPOgorICAgIGNhc2UgT1BfVVBUT0k6CisgICAgY2FzZSBPUF9NSU5VUFRPOgorICAgIGNhc2UgT1BfTUlOVVBUT0k6CisgICAgbWluID0gMDsKKyAgICBtYXggPSBHRVQyKGVjb2RlLCAxKTsKKyAgICBtaW5pbWl6ZSA9ICplY29kZSA9PSBPUF9NSU5VUFRPIHx8ICplY29kZSA9PSBPUF9NSU5VUFRPSTsKKyAgICBlY29kZSArPSAxICsgSU1NMl9TSVpFOworICAgIGdvdG8gUkVQRUFUQ0hBUjsKKworICAgIGNhc2UgT1BfUE9TU1RBUjoKKyAgICBjYXNlIE9QX1BPU1NUQVJJOgorICAgIHBvc3Nlc3NpdmUgPSBUUlVFOworICAgIG1pbiA9IDA7CisgICAgbWF4ID0gSU5UX01BWDsKKyAgICBlY29kZSsrOworICAgIGdvdG8gUkVQRUFUQ0hBUjsKKworICAgIGNhc2UgT1BfUE9TUExVUzoKKyAgICBjYXNlIE9QX1BPU1BMVVNJOgorICAgIHBvc3Nlc3NpdmUgPSBUUlVFOworICAgIG1pbiA9IDE7CisgICAgbWF4ID0gSU5UX01BWDsKKyAgICBlY29kZSsrOworICAgIGdvdG8gUkVQRUFUQ0hBUjsKKworICAgIGNhc2UgT1BfUE9TUVVFUlk6CisgICAgY2FzZSBPUF9QT1NRVUVSWUk6CisgICAgcG9zc2Vzc2l2ZSA9IFRSVUU7CisgICAgbWluID0gMDsKKyAgICBtYXggPSAxOworICAgIGVjb2RlKys7CisgICAgZ290byBSRVBFQVRDSEFSOworCisgICAgY2FzZSBPUF9TVEFSOgorICAgIGNhc2UgT1BfU1RBUkk6CisgICAgY2FzZSBPUF9NSU5TVEFSOgorICAgIGNhc2UgT1BfTUlOU1RBUkk6CisgICAgY2FzZSBPUF9QTFVTOgorICAgIGNhc2UgT1BfUExVU0k6CisgICAgY2FzZSBPUF9NSU5QTFVTOgorICAgIGNhc2UgT1BfTUlOUExVU0k6CisgICAgY2FzZSBPUF9RVUVSWToKKyAgICBjYXNlIE9QX1FVRVJZSToKKyAgICBjYXNlIE9QX01JTlFVRVJZOgorICAgIGNhc2UgT1BfTUlOUVVFUllJOgorICAgIGMgPSAqZWNvZGUrKyAtICgob3AgPCBPUF9TVEFSSSk/IE9QX1NUQVIgOiBPUF9TVEFSSSk7CisgICAgbWluaW1pemUgPSAoYyAmIDEpICE9IDA7CisgICAgbWluID0gcmVwX21pbltjXTsgICAgICAgICAgICAgICAgIC8qIFBpY2sgdXAgdmFsdWVzIGZyb20gdGFibGVzOyAqLworICAgIG1heCA9IHJlcF9tYXhbY107ICAgICAgICAgICAgICAgICAvKiB6ZXJvIGZvciBtYXggPT4gaW5maW5pdHkgKi8KKyAgICBpZiAobWF4ID09IDApIG1heCA9IElOVF9NQVg7CisKKyAgICAvKiBDb21tb24gY29kZSBmb3IgYWxsIHJlcGVhdGVkIHNpbmdsZS1jaGFyYWN0ZXIgbWF0Y2hlcy4gV2UgZmlyc3QgY2hlY2sKKyAgICBmb3IgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMuIElmIHRoZSBtaW5pbXVtIGVxdWFscyB0aGUgbWF4aW11bSwgd2UKKyAgICBhcmUgZG9uZS4gT3RoZXJ3aXNlLCBpZiBtaW5pbWl6aW5nLCBjaGVjayB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBmb3IgYQorICAgIG1hdGNoOyBpZiB0aGVyZSBpc24ndCBvbmUsIGFkdmFuY2UgdXAgdG8gdGhlIG1heGltdW0sIG9uZSBjaGFyYWN0ZXIgYXQgYQorICAgIHRpbWUuCisKKyAgICBJZiBtYXhpbWl6aW5nLCBhZHZhbmNlIHVwIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBtYXRjaGluZyBjaGFyYWN0ZXJzLAorICAgIHVudGlsIGVwdHIgaXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBtYXhpbXVtIHJ1bi4gSWYgcG9zc2Vzc2l2ZSwgd2UgYXJlCisgICAgdGhlbiBkb25lIChubyBiYWNraW5nIHVwKS4gT3RoZXJ3aXNlLCBtYXRjaCBhdCB0aGlzIHBvc2l0aW9uOyBhbnl0aGluZworICAgIG90aGVyIHRoYW4gbm8gbWF0Y2ggaXMgaW1tZWRpYXRlbHkgcmV0dXJuZWQuIEZvciBub21hdGNoLCBiYWNrIHVwIG9uZQorICAgIGNoYXJhY3RlciwgdW5sZXNzIHdlIGFyZSBtYXRjaGluZyBcUiBhbmQgdGhlIGxhc3QgdGhpbmcgbWF0Y2hlZCB3YXMKKyAgICBcclxuLCBpbiB3aGljaCBjYXNlLCBiYWNrIHVwIHR3byBieXRlcy4gV2hlbiB3ZSByZWFjaCB0aGUgZmlyc3Qgb3B0aW9uYWwKKyAgICBjaGFyYWN0ZXIgcG9zaXRpb24sIHdlIGNhbiBzYXZlIHN0YWNrIGJ5IGRvaW5nIGEgdGFpbCByZWN1cnNlLgorCisgICAgVGhlIHZhcmlvdXMgVVRGL25vbi1VVEYgYW5kIGNhc2VmdWwvY2FzZWxlc3MgY2FzZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSwKKyAgICBmb3Igc3BlZWQuICovCisKKyAgICBSRVBFQVRDSEFSOgorI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmICh1dGYpCisgICAgICB7CisgICAgICBsZW5ndGggPSAxOworICAgICAgY2hhcnB0ciA9IGVjb2RlOworICAgICAgR0VUQ0hBUkxFTihmYywgZWNvZGUsIGxlbmd0aCk7CisgICAgICBlY29kZSArPSBsZW5ndGg7CisKKyAgICAgIC8qIEhhbmRsZSBtdWx0aWJ5dGUgY2hhcmFjdGVyIG1hdGNoaW5nIHNwZWNpYWxseSBoZXJlLiBUaGVyZSBpcworICAgICAgc3VwcG9ydCBmb3IgY2FzZWxlc3MgbWF0Y2hpbmcgaWYgVUNQIHN1cHBvcnQgaXMgcHJlc2VudC4gKi8KKworICAgICAgaWYgKGxlbmd0aCA+IDEpCisgICAgICAgIHsKKyAgICAgICAgdWludDMyX3Qgb3RoZXJjYXNlOworICAgICAgICBpZiAob3AgPj0gT1BfU1RBUkkgJiYgICAgIC8qIENhc2VsZXNzICovCisgICAgICAgICAgICAob3RoZXJjYXNlID0gVUNEX09USEVSQ0FTRShmYykpICE9IGZjKQorICAgICAgICAgIG9jbGVuZ3RoID0gUFJJVihvcmQydXRmKShvdGhlcmNhc2UsIG9jY2hhcnMpOworICAgICAgICBlbHNlIG9jbGVuZ3RoID0gMDsKKworICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA8PSBtYi0+ZW5kX3N1YmplY3QgLSBsZW5ndGggJiYKKyAgICAgICAgICAgIG1lbWNtcChlcHRyLCBjaGFycHRyLCBDVTJCWVRFUyhsZW5ndGgpKSA9PSAwKSBlcHRyICs9IGxlbmd0aDsKKyAgICAgICAgICBlbHNlIGlmIChvY2xlbmd0aCA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICBlcHRyIDw9IG1iLT5lbmRfc3ViamVjdCAtIG9jbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgICAgbWVtY21wKGVwdHIsIG9jY2hhcnMsIENVMkJZVEVTKG9jbGVuZ3RoKSkgPT0gMCkgZXB0ciArPSBvY2xlbmd0aDsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICBDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICBpZiAobWluID09IG1heCkgY29udGludWU7CisKKyAgICAgICAgaWYgKG1pbmltaXplKQorICAgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGZpID0gbWluOzsgZmkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTIyKTsKKyAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgICAgaWYgKGZpID49IG1heCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIGlmIChlcHRyIDw9IG1iLT5lbmRfc3ViamVjdCAtIGxlbmd0aCAmJgorICAgICAgICAgICAgICBtZW1jbXAoZXB0ciwgY2hhcnB0ciwgQ1UyQllURVMobGVuZ3RoKSkgPT0gMCkgZXB0ciArPSBsZW5ndGg7CisgICAgICAgICAgICBlbHNlIGlmIChvY2xlbmd0aCA+IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgIGVwdHIgPD0gbWItPmVuZF9zdWJqZWN0IC0gb2NsZW5ndGggJiYKKyAgICAgICAgICAgICAgICAgICAgIG1lbWNtcChlcHRyLCBvY2NoYXJzLCBDVTJCWVRFUyhvY2xlbmd0aCkpID09IDApIGVwdHIgKz0gb2NsZW5ndGg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKyAgICAgICAgICB9CisKKyAgICAgICAgZWxzZSAgLyogTWF4aW1pemUgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgcHAgPSBlcHRyOworICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGVwdHIgPD0gbWItPmVuZF9zdWJqZWN0IC0gbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgbWVtY21wKGVwdHIsIGNoYXJwdHIsIENVMkJZVEVTKGxlbmd0aCkpID09IDApIGVwdHIgKz0gbGVuZ3RoOworICAgICAgICAgICAgZWxzZSBpZiAob2NsZW5ndGggPiAwICYmCisgICAgICAgICAgICAgICAgICAgICBlcHRyIDw9IG1iLT5lbmRfc3ViamVjdCAtIG9jbGVuZ3RoICYmCisgICAgICAgICAgICAgICAgICAgICBtZW1jbXAoZXB0ciwgb2NjaGFycywgQ1UyQllURVMob2NsZW5ndGgpKSA9PSAwKSBlcHRyICs9IG9jbGVuZ3RoOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIENIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChwb3NzZXNzaXZlKSBjb250aW51ZTsgICAgLyogTm8gYmFja3RyYWNraW5nICovCisKKyAgICAgICAgICAvKiBBZnRlciBcQyBpbiBVVEYgbW9kZSwgcHAgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIFVuaWNvZGUKKyAgICAgICAgICBjaGFyYWN0ZXIuIFVzZSA8PSBwcCB0byBlbnN1cmUgYmFja3RyYWNraW5nIGRvZXNuJ3QgZ28gdG9vIGZhci4gKi8KKworICAgICAgICAgIGZvcig7OykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcHRyIDw9IHBwKSBnb3RvIFRBSUxfUkVDVVJTRTsKKyAgICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTIzKTsKKyAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgICAgZXB0ci0tOworICAgICAgICAgICAgQkFDS0NIQVIoZXB0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworICAgICAgICB9CisKKyAgICAgIC8qIElmIHRoZSBsZW5ndGggb2YgYSBVVEYtOCBjaGFyYWN0ZXIgaXMgMSwgd2UgZmFsbCB0aHJvdWdoIGhlcmUsIGFuZAorICAgICAgb2JleSB0aGUgY29kZSBhcyBmb3Igbm9uLVVURi04IGNoYXJhY3RlcnMgYmVsb3csIHRob3VnaCBpbiB0aGlzIGNhc2UgdGhlCisgICAgICB2YWx1ZSBvZiBmYyB3aWxsIGFsd2F5cyBiZSA8IDEyOC4gKi8KKyAgICAgIH0KKyAgICBlbHNlCisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCisgICAgICAvKiBXaGVuIG5vdCBpbiBVVEYtOCBtb2RlLCBsb2FkIGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyLiAqLworICAgICAgZmMgPSAqZWNvZGUrKzsKKworICAgIC8qIFRoZSB2YWx1ZSBvZiBmYyBhdCB0aGlzIHBvaW50IGlzIGFsd2F5cyBvbmUgY2hhcmFjdGVyLCB0aG91Z2ggd2UgbWF5CisgICAgb3IgbWF5IG5vdCBiZSBpbiBVVEYgbW9kZS4gVGhlIGNvZGUgaXMgZHVwbGljYXRlZCBmb3IgdGhlIGNhc2VsZXNzIGFuZAorICAgIGNhc2VmdWwgY2FzZXMsIGZvciBzcGVlZCwgc2luY2UgbWF0Y2hpbmcgY2hhcmFjdGVycyBpcyBsaWtlbHkgdG8gYmUgcXVpdGUKKyAgICBjb21tb24uIEZpcnN0LCBlbnN1cmUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG1hdGNoZXMgYXJlIHByZXNlbnQuIElmIG1pbiA9CisgICAgbWF4LCBjb250aW51ZSBhdCB0aGUgc2FtZSBsZXZlbCB3aXRob3V0IHJlY3Vyc2luZy4gT3RoZXJ3aXNlLCBpZgorICAgIG1pbmltaXppbmcsIGtlZXAgdHJ5aW5nIHRoZSByZXN0IG9mIHRoZSBleHByZXNzaW9uIGFuZCBhZHZhbmNpbmcgb25lCisgICAgbWF0Y2hpbmcgY2hhcmFjdGVyIGlmIGZhaWxpbmcsIHVwIHRvIHRoZSBtYXhpbXVtLiBBbHRlcm5hdGl2ZWx5LCBpZgorICAgIG1heGltaXppbmcsIGZpbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYW5kIHdvcmsgYmFja3dhcmRzLiAqLworCisgICAgaWYgKG9wID49IE9QX1NUQVJJKSAgLyogQ2FzZWxlc3MgKi8KKyAgICAgIHsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgICAgLyogZmMgbXVzdCBiZSA8IDEyOCBpZiBVVEYgaXMgZW5hYmxlZC4gKi8KKyAgICAgIGZvYyA9IG1iLT5mY2NbZmNdOworI2Vsc2UKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgIGlmICh1dGYgJiYgZmMgPiAxMjcpCisgICAgICAgIGZvYyA9IFVDRF9PVEhFUkNBU0UoZmMpOworICAgICAgZWxzZQorI2VuZGlmIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworICAgICAgICBmb2MgPSBUQUJMRV9HRVQoZmMsIG1iLT5mY2MsIGZjKTsKKyNlbmRpZiAvKiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOCAqLworCisgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICB7CisgICAgICAgIHVpbnQzMl90IGNjOyAgICAgICAgICAgICAgICAgLyogRmFzdGVyIHRoYW4gUENSRTJfVUNIQVIgKi8KKyAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgIHsKKyAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgfQorICAgICAgICBjYyA9IFVDSEFSMjFURVNUKGVwdHIpOworICAgICAgICBpZiAoZmMgIT0gY2MgJiYgZm9jICE9IGNjKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICBlcHRyKys7CisgICAgICAgIH0KKyAgICAgIGlmIChtaW4gPT0gbWF4KSBjb250aW51ZTsKKyAgICAgIGlmIChtaW5pbWl6ZSkKKyAgICAgICAgeworICAgICAgICBmb3IgKGZpID0gbWluOzsgZmkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgdWludDMyX3QgY2M7ICAgICAgICAgICAgICAgLyogRmFzdGVyIHRoYW4gUENSRTJfVUNIQVIgKi8KKyAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0yNCk7CisgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgaWYgKGZpID49IG1heCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYyA9IFVDSEFSMjFURVNUKGVwdHIpOworICAgICAgICAgIGlmIChmYyAhPSBjYyAmJiBmb2MgIT0gY2MpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgZXB0cisrOworICAgICAgICAgIH0KKyAgICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKyAgICAgICAgfQorICAgICAgZWxzZSAgLyogTWF4aW1pemUgKi8KKyAgICAgICAgeworICAgICAgICBwcCA9IGVwdHI7CisgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICB1aW50MzJfdCBjYzsgICAgICAgICAgICAgICAvKiBGYXN0ZXIgdGhhbiBQQ1JFMl9VQ0hBUiAqLworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYyA9IFVDSEFSMjFURVNUKGVwdHIpOworICAgICAgICAgIGlmIChmYyAhPSBjYyAmJiBmb2MgIT0gY2MpIGJyZWFrOworICAgICAgICAgIGVwdHIrKzsKKyAgICAgICAgICB9CisgICAgICAgIGlmIChwb3NzZXNzaXZlKSBjb250aW51ZTsgICAgICAgLyogTm8gYmFja3RyYWNraW5nICovCisgICAgICAgIGZvciAoOzspCisgICAgICAgICAgeworICAgICAgICAgIGlmIChlcHRyID09IHBwKSBnb3RvIFRBSUxfUkVDVVJTRTsKKyAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0yNSk7CisgICAgICAgICAgZXB0ci0tOworICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgIH0KKyAgICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogQ2FzZWZ1bCBjb21wYXJpc29ucyAoaW5jbHVkZXMgYWxsIG11bHRpLWJ5dGUgY2hhcmFjdGVycykgKi8KKworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgIHsKKyAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgfQorICAgICAgICBpZiAoZmMgIT0gVUNIQVIyMUlOQ1RFU1QoZXB0cikpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIH0KKworICAgICAgaWYgKG1pbiA9PSBtYXgpIGNvbnRpbnVlOworCisgICAgICBpZiAobWluaW1pemUpCisgICAgICAgIHsKKyAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCisgICAgICAgICAgeworICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTI2KTsKKyAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICBpZiAoZmkgPj0gbWF4KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChmYyAhPSBVQ0hBUjIxSU5DVEVTVChlcHRyKSkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICB9CisgICAgICAgIC8qIENvbnRyb2wgbmV2ZXIgZ2V0cyBoZXJlICovCisgICAgICAgIH0KKyAgICAgIGVsc2UgIC8qIE1heGltaXplICovCisgICAgICAgIHsKKyAgICAgICAgcHAgPSBlcHRyOworICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChmYyAhPSBVQ0hBUjIxVEVTVChlcHRyKSkgYnJlYWs7CisgICAgICAgICAgZXB0cisrOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKHBvc3Nlc3NpdmUpIGNvbnRpbnVlOyAgICAvKiBObyBiYWNrdHJhY2tpbmcgKi8KKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGVwdHIgPT0gcHApIGdvdG8gVEFJTF9SRUNVUlNFOworICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTI3KTsKKyAgICAgICAgICBlcHRyLS07CisgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgfQorICAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworICAgICAgICB9CisgICAgICB9CisgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKworICAgIC8qIE1hdGNoIGEgbmVnYXRlZCBzaW5nbGUgb25lLWJ5dGUgY2hhcmFjdGVyLiBUaGUgY2hhcmFjdGVyIHdlIGFyZQorICAgIGNoZWNraW5nIGNhbiBiZSBtdWx0aWJ5dGUuICovCisKKyAgICBjYXNlIE9QX05PVDoKKyAgICBjYXNlIE9QX05PVEk6CisgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgeworICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICB9CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgaWYgKHV0ZikKKyAgICAgIHsKKyAgICAgIHJlZ2lzdGVyIHVpbnQzMl90IGNoLCBvY2g7CisKKyAgICAgIGVjb2RlKys7CisgICAgICBHRVRDSEFSSU5DKGNoLCBlY29kZSk7CisgICAgICBHRVRDSEFSSU5DKGMsIGVwdHIpOworCisgICAgICBpZiAob3AgPT0gT1BfTk9UKQorICAgICAgICB7CisgICAgICAgIGlmIChjaCA9PSBjKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgaWYgKGNoID4gMTI3KQorICAgICAgICAgIG9jaCA9IFVDRF9PVEhFUkNBU0UoY2gpOworICAgICAgICBlbHNlCisgICAgICAgICAgb2NoID0gVEFCTEVfR0VUKGNoLCBtYi0+ZmNjLCBjaCk7CisgICAgICAgIGlmIChjaCA9PSBjIHx8IG9jaCA9PSBjKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICB9CisgICAgICB9CisgICAgZWxzZQorI2VuZGlmICAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKyAgICAgIHsKKyAgICAgIHJlZ2lzdGVyIHVpbnQzMl90IGNoID0gZWNvZGVbMV07CisgICAgICBjID0gKmVwdHIrKzsKKyAgICAgIGlmIChjaCA9PSBjIHx8IChvcCA9PSBPUF9OT1RJICYmIFRBQkxFX0dFVChjaCwgbWItPmZjYywgY2gpID09IGMpKQorICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgZWNvZGUgKz0gMjsKKyAgICAgIH0KKyAgICBicmVhazsKKworICAgIC8qIE1hdGNoIGEgbmVnYXRlZCBzaW5nbGUgb25lLWJ5dGUgY2hhcmFjdGVyIHJlcGVhdGVkbHkuIFRoaXMgaXMgYWxtb3N0IGEKKyAgICByZXBlYXQgb2YgdGhlIGNvZGUgZm9yIGEgcmVwZWF0ZWQgc2luZ2xlIGNoYXJhY3RlciwgYnV0IEkgaGF2ZW4ndCBmb3VuZCBhCisgICAgbmljZSB3YXkgb2YgY29tbW9uaW5nIHRoZXNlIHVwIHRoYXQgZG9lc24ndCByZXF1aXJlIGEgdGVzdCBvZiB0aGUKKyAgICBwb3NpdGl2ZS9uZWdhdGl2ZSBvcHRpb24gZm9yIGVhY2ggY2hhcmFjdGVyIG1hdGNoLiBNYXliZSB0aGF0IHdvdWxkbid0IGFkZAorICAgIHZlcnkgbXVjaCB0byB0aGUgdGltZSB0YWtlbiwgYnV0IGNoYXJhY3RlciBtYXRjaGluZyAqaXMqIHdoYXQgdGhpcyBpcyBhbGwKKyAgICBhYm91dC4uLiAqLworCisgICAgY2FzZSBPUF9OT1RFWEFDVDoKKyAgICBjYXNlIE9QX05PVEVYQUNUSToKKyAgICBtaW4gPSBtYXggPSBHRVQyKGVjb2RlLCAxKTsKKyAgICBlY29kZSArPSAxICsgSU1NMl9TSVpFOworICAgIGdvdG8gUkVQRUFUTk9UQ0hBUjsKKworICAgIGNhc2UgT1BfTk9UVVBUTzoKKyAgICBjYXNlIE9QX05PVFVQVE9JOgorICAgIGNhc2UgT1BfTk9UTUlOVVBUTzoKKyAgICBjYXNlIE9QX05PVE1JTlVQVE9JOgorICAgIG1pbiA9IDA7CisgICAgbWF4ID0gR0VUMihlY29kZSwgMSk7CisgICAgbWluaW1pemUgPSAqZWNvZGUgPT0gT1BfTk9UTUlOVVBUTyB8fCAqZWNvZGUgPT0gT1BfTk9UTUlOVVBUT0k7CisgICAgZWNvZGUgKz0gMSArIElNTTJfU0laRTsKKyAgICBnb3RvIFJFUEVBVE5PVENIQVI7CisKKyAgICBjYXNlIE9QX05PVFBPU1NUQVI6CisgICAgY2FzZSBPUF9OT1RQT1NTVEFSSToKKyAgICBwb3NzZXNzaXZlID0gVFJVRTsKKyAgICBtaW4gPSAwOworICAgIG1heCA9IElOVF9NQVg7CisgICAgZWNvZGUrKzsKKyAgICBnb3RvIFJFUEVBVE5PVENIQVI7CisKKyAgICBjYXNlIE9QX05PVFBPU1BMVVM6CisgICAgY2FzZSBPUF9OT1RQT1NQTFVTSToKKyAgICBwb3NzZXNzaXZlID0gVFJVRTsKKyAgICBtaW4gPSAxOworICAgIG1heCA9IElOVF9NQVg7CisgICAgZWNvZGUrKzsKKyAgICBnb3RvIFJFUEVBVE5PVENIQVI7CisKKyAgICBjYXNlIE9QX05PVFBPU1FVRVJZOgorICAgIGNhc2UgT1BfTk9UUE9TUVVFUllJOgorICAgIHBvc3Nlc3NpdmUgPSBUUlVFOworICAgIG1pbiA9IDA7CisgICAgbWF4ID0gMTsKKyAgICBlY29kZSsrOworICAgIGdvdG8gUkVQRUFUTk9UQ0hBUjsKKworICAgIGNhc2UgT1BfTk9UUE9TVVBUTzoKKyAgICBjYXNlIE9QX05PVFBPU1VQVE9JOgorICAgIHBvc3Nlc3NpdmUgPSBUUlVFOworICAgIG1pbiA9IDA7CisgICAgbWF4ID0gR0VUMihlY29kZSwgMSk7CisgICAgZWNvZGUgKz0gMSArIElNTTJfU0laRTsKKyAgICBnb3RvIFJFUEVBVE5PVENIQVI7CisKKyAgICBjYXNlIE9QX05PVFNUQVI6CisgICAgY2FzZSBPUF9OT1RTVEFSSToKKyAgICBjYXNlIE9QX05PVE1JTlNUQVI6CisgICAgY2FzZSBPUF9OT1RNSU5TVEFSSToKKyAgICBjYXNlIE9QX05PVFBMVVM6CisgICAgY2FzZSBPUF9OT1RQTFVTSToKKyAgICBjYXNlIE9QX05PVE1JTlBMVVM6CisgICAgY2FzZSBPUF9OT1RNSU5QTFVTSToKKyAgICBjYXNlIE9QX05PVFFVRVJZOgorICAgIGNhc2UgT1BfTk9UUVVFUllJOgorICAgIGNhc2UgT1BfTk9UTUlOUVVFUlk6CisgICAgY2FzZSBPUF9OT1RNSU5RVUVSWUk6CisgICAgYyA9ICplY29kZSsrIC0gKChvcCA+PSBPUF9OT1RTVEFSSSk/IE9QX05PVFNUQVJJOiBPUF9OT1RTVEFSKTsKKyAgICBtaW5pbWl6ZSA9IChjICYgMSkgIT0gMDsKKyAgICBtaW4gPSByZXBfbWluW2NdOyAgICAgICAgICAgICAgICAgLyogUGljayB1cCB2YWx1ZXMgZnJvbSB0YWJsZXM7ICovCisgICAgbWF4ID0gcmVwX21heFtjXTsgICAgICAgICAgICAgICAgIC8qIHplcm8gZm9yIG1heCA9PiBpbmZpbml0eSAqLworICAgIGlmIChtYXggPT0gMCkgbWF4ID0gSU5UX01BWDsKKworICAgIC8qIENvbW1vbiBjb2RlIGZvciBhbGwgcmVwZWF0ZWQgc2luZ2xlLWJ5dGUgbWF0Y2hlcy4gKi8KKworICAgIFJFUEVBVE5PVENIQVI6CisgICAgR0VUQ0hBUklOQ1RFU1QoZmMsIGVjb2RlKTsKKworICAgIC8qIFRoZSBjb2RlIGlzIGR1cGxpY2F0ZWQgZm9yIHRoZSBjYXNlbGVzcyBhbmQgY2FzZWZ1bCBjYXNlcywgZm9yIHNwZWVkLAorICAgIHNpbmNlIG1hdGNoaW5nIGNoYXJhY3RlcnMgaXMgbGlrZWx5IHRvIGJlIHF1aXRlIGNvbW1vbi4gRmlyc3QsIGVuc3VyZSB0aGUKKyAgICBtaW5pbXVtIG51bWJlciBvZiBtYXRjaGVzIGFyZSBwcmVzZW50LiBJZiBtaW4gPSBtYXgsIGNvbnRpbnVlIGF0IHRoZSBzYW1lCisgICAgbGV2ZWwgd2l0aG91dCByZWN1cnNpbmcuIE90aGVyd2lzZSwgaWYgbWluaW1pemluZywga2VlcCB0cnlpbmcgdGhlIHJlc3Qgb2YKKyAgICB0aGUgZXhwcmVzc2lvbiBhbmQgYWR2YW5jaW5nIG9uZSBtYXRjaGluZyBjaGFyYWN0ZXIgaWYgZmFpbGluZywgdXAgdG8gdGhlCisgICAgbWF4aW11bS4gQWx0ZXJuYXRpdmVseSwgaWYgbWF4aW1pemluZywgZmluZCB0aGUgbWF4aW11bSBudW1iZXIgb2YKKyAgICBjaGFyYWN0ZXJzIGFuZCB3b3JrIGJhY2t3YXJkcy4gKi8KKworICAgIGlmIChvcCA+PSBPUF9OT1RTVEFSSSkgICAgIC8qIENhc2VsZXNzICovCisgICAgICB7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBpZiAodXRmICYmIGZjID4gMTI3KQorICAgICAgICBmb2MgPSBVQ0RfT1RIRVJDQVNFKGZjKTsKKyAgICAgIGVsc2UKKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKyAgICAgICAgZm9jID0gVEFCTEVfR0VUKGZjLCBtYi0+ZmNjLCBmYyk7CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgIGlmICh1dGYpCisgICAgICAgIHsKKyAgICAgICAgcmVnaXN0ZXIgdWludDMyX3QgZDsKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgR0VUQ0hBUklOQyhkLCBlcHRyKTsKKyAgICAgICAgICBpZiAoZmMgPT0gZCB8fCAodWludDMyX3QpZm9jID09IGQpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworICAgICAgLyogTm90IFVURiBtb2RlICovCisgICAgICAgIHsKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKGZjID09ICplcHRyIHx8IGZvYyA9PSAqZXB0cikgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGlmIChtaW4gPT0gbWF4KSBjb250aW51ZTsKKworICAgICAgaWYgKG1pbmltaXplKQorICAgICAgICB7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgeworICAgICAgICAgIHJlZ2lzdGVyIHVpbnQzMl90IGQ7CisgICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0yOCk7CisgICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICAgIGlmIChmaSA+PSBtYXgpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUklOQyhkLCBlcHRyKTsKKyAgICAgICAgICAgIGlmIChmYyA9PSBkIHx8ICh1aW50MzJfdClmb2MgPT0gZCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZiAgLypTVVBQT1JUX1VOSUNPREUgKi8KKyAgICAgICAgLyogTm90IFVURiBtb2RlICovCisgICAgICAgICAgeworICAgICAgICAgIGZvciAoZmkgPSBtaW47OyBmaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNMjkpOworICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgICBpZiAoZmkgPj0gbWF4KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmYyA9PSAqZXB0ciB8fCBmb2MgPT0gKmVwdHIpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworICAgICAgICB9CisKKyAgICAgIC8qIE1heGltaXplIGNhc2UgKi8KKworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIHBwID0gZXB0cjsKKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICBpZiAodXRmKQorICAgICAgICAgIHsKKyAgICAgICAgICByZWdpc3RlciB1aW50MzJfdCBkOworICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGxlbiA9IDE7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJMRU4oZCwgZXB0ciwgbGVuKTsKKyAgICAgICAgICAgIGlmIChmYyA9PSBkIHx8ICh1aW50MzJfdClmb2MgPT0gZCkgYnJlYWs7CisgICAgICAgICAgICBlcHRyICs9IGxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAocG9zc2Vzc2l2ZSkgY29udGludWU7ICAgIC8qIE5vIGJhY2t0cmFja2luZyAqLworCisgICAgICAgICAgLyogQWZ0ZXIgXEMgaW4gVVRGIG1vZGUsIHBwIG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSBVbmljb2RlCisgICAgICAgICAgY2hhcmFjdGVyLiBVc2UgPD0gcHAgdG8gZW5zdXJlIGJhY2t0cmFja2luZyBkb2Vzbid0IGdvIHRvbyBmYXIuICovCisKKyAgICAgICAgICBmb3IoOzspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA8PSBwcCkgZ290byBUQUlMX1JFQ1VSU0U7CisgICAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0zMCk7CisgICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICAgIGVwdHItLTsKKyAgICAgICAgICAgIEJBQ0tDSEFSKGVwdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmICAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKyAgICAgICAgLyogTm90IFVURiBtb2RlICovCisgICAgICAgICAgeworICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmMgPT0gKmVwdHIgfHwgZm9jID09ICplcHRyKSBicmVhazsKKyAgICAgICAgICAgIGVwdHIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAocG9zc2Vzc2l2ZSkgY29udGludWU7ICAgIC8qIE5vIGJhY2t0cmFja2luZyAqLworICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA9PSBwcCkgZ290byBUQUlMX1JFQ1VSU0U7CisgICAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0zMSk7CisgICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICAgIGVwdHItLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIC8qIENvbnRyb2wgbmV2ZXIgZ2V0cyBoZXJlICovCisgICAgICAgIH0KKyAgICAgIH0KKworICAgIC8qIENhc2VmdWwgY29tcGFyaXNvbnMgKi8KKworICAgIGVsc2UKKyAgICAgIHsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgIGlmICh1dGYpCisgICAgICAgIHsKKyAgICAgICAgcmVnaXN0ZXIgdWludDMyX3QgZDsKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgR0VUQ0hBUklOQyhkLCBlcHRyKTsKKyAgICAgICAgICBpZiAoZmMgPT0gZCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgLyogTm90IFVURiBtb2RlICovCisgICAgICAgIHsKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKGZjID09ICplcHRyKyspIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIGlmIChtaW4gPT0gbWF4KSBjb250aW51ZTsKKworICAgICAgaWYgKG1pbmltaXplKQorICAgICAgICB7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgeworICAgICAgICAgIHJlZ2lzdGVyIHVpbnQzMl90IGQ7CisgICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0zMik7CisgICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICAgIGlmIChmaSA+PSBtYXgpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUklOQyhkLCBlcHRyKTsKKyAgICAgICAgICAgIGlmIChmYyA9PSBkKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIC8qIE5vdCBVVEYgbW9kZSAqLworICAgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGZpID0gbWluOzsgZmkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTMzKTsKKyAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgICAgaWYgKGZpID49IG1heCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZmMgPT0gKmVwdHIrKykgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIC8qIENvbnRyb2wgbmV2ZXIgZ2V0cyBoZXJlICovCisgICAgICAgIH0KKworICAgICAgLyogTWF4aW1pemUgY2FzZSAqLworCisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgcHAgPSBlcHRyOworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgeworICAgICAgICAgIHJlZ2lzdGVyIHVpbnQzMl90IGQ7CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVuID0gMTsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUkxFTihkLCBlcHRyLCBsZW4pOworICAgICAgICAgICAgaWYgKGZjID09IGQpIGJyZWFrOworICAgICAgICAgICAgZXB0ciArPSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKHBvc3Nlc3NpdmUpIGNvbnRpbnVlOyAgICAvKiBObyBiYWNrdHJhY2tpbmcgKi8KKworICAgICAgICAgIC8qIEFmdGVyIFxDIGluIFVURiBtb2RlLCBwcCBtaWdodCBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgVW5pY29kZQorICAgICAgICAgIGNoYXJhY3Rlci4gVXNlIDw9IHBwIHRvIGVuc3VyZSBiYWNrdHJhY2tpbmcgZG9lc24ndCBnbyB0b28gZmFyLiAqLworCisgICAgICAgICAgZm9yKDs7KQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGVwdHIgPD0gcHApIGdvdG8gVEFJTF9SRUNVUlNFOworICAgICAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNMzQpOworICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgICBlcHRyLS07CisgICAgICAgICAgICBCQUNLQ0hBUihlcHRyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAvKiBOb3QgVVRGIG1vZGUgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmYyA9PSAqZXB0cikgYnJlYWs7CisgICAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKHBvc3Nlc3NpdmUpIGNvbnRpbnVlOyAgICAvKiBObyBiYWNrdHJhY2tpbmcgKi8KKyAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGVwdHIgPT0gcHApIGdvdG8gVEFJTF9SRUNVUlNFOworICAgICAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNMzUpOworICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgICBlcHRyLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworICAgICAgICB9CisgICAgICB9CisgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKworICAgIC8qIE1hdGNoIGEgc2luZ2xlIGNoYXJhY3RlciB0eXBlIHJlcGVhdGVkbHk7IHNldmVyYWwgZGlmZmVyZW50IG9wY29kZXMKKyAgICBzaGFyZSBjb2RlLiBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgY29kZSBmb3Igc2luZ2xlIGNoYXJhY3RlcnMsIGJ1dCB3ZQorICAgIHJlcGVhdCBpdCBpbiB0aGUgaW50ZXJlc3RzIG9mIGVmZmljaWVuY3kuICovCisKKyAgICBjYXNlIE9QX1RZUEVFWEFDVDoKKyAgICBtaW4gPSBtYXggPSBHRVQyKGVjb2RlLCAxKTsKKyAgICBtaW5pbWl6ZSA9IFRSVUU7CisgICAgZWNvZGUgKz0gMSArIElNTTJfU0laRTsKKyAgICBnb3RvIFJFUEVBVFRZUEU7CisKKyAgICBjYXNlIE9QX1RZUEVVUFRPOgorICAgIGNhc2UgT1BfVFlQRU1JTlVQVE86CisgICAgbWluID0gMDsKKyAgICBtYXggPSBHRVQyKGVjb2RlLCAxKTsKKyAgICBtaW5pbWl6ZSA9ICplY29kZSA9PSBPUF9UWVBFTUlOVVBUTzsKKyAgICBlY29kZSArPSAxICsgSU1NMl9TSVpFOworICAgIGdvdG8gUkVQRUFUVFlQRTsKKworICAgIGNhc2UgT1BfVFlQRVBPU1NUQVI6CisgICAgcG9zc2Vzc2l2ZSA9IFRSVUU7CisgICAgbWluID0gMDsKKyAgICBtYXggPSBJTlRfTUFYOworICAgIGVjb2RlKys7CisgICAgZ290byBSRVBFQVRUWVBFOworCisgICAgY2FzZSBPUF9UWVBFUE9TUExVUzoKKyAgICBwb3NzZXNzaXZlID0gVFJVRTsKKyAgICBtaW4gPSAxOworICAgIG1heCA9IElOVF9NQVg7CisgICAgZWNvZGUrKzsKKyAgICBnb3RvIFJFUEVBVFRZUEU7CisKKyAgICBjYXNlIE9QX1RZUEVQT1NRVUVSWToKKyAgICBwb3NzZXNzaXZlID0gVFJVRTsKKyAgICBtaW4gPSAwOworICAgIG1heCA9IDE7CisgICAgZWNvZGUrKzsKKyAgICBnb3RvIFJFUEVBVFRZUEU7CisKKyAgICBjYXNlIE9QX1RZUEVQT1NVUFRPOgorICAgIHBvc3Nlc3NpdmUgPSBUUlVFOworICAgIG1pbiA9IDA7CisgICAgbWF4ID0gR0VUMihlY29kZSwgMSk7CisgICAgZWNvZGUgKz0gMSArIElNTTJfU0laRTsKKyAgICBnb3RvIFJFUEVBVFRZUEU7CisKKyAgICBjYXNlIE9QX1RZUEVTVEFSOgorICAgIGNhc2UgT1BfVFlQRU1JTlNUQVI6CisgICAgY2FzZSBPUF9UWVBFUExVUzoKKyAgICBjYXNlIE9QX1RZUEVNSU5QTFVTOgorICAgIGNhc2UgT1BfVFlQRVFVRVJZOgorICAgIGNhc2UgT1BfVFlQRU1JTlFVRVJZOgorICAgIGMgPSAqZWNvZGUrKyAtIE9QX1RZUEVTVEFSOworICAgIG1pbmltaXplID0gKGMgJiAxKSAhPSAwOworICAgIG1pbiA9IHJlcF9taW5bY107ICAgICAgICAgICAgICAgICAvKiBQaWNrIHVwIHZhbHVlcyBmcm9tIHRhYmxlczsgKi8KKyAgICBtYXggPSByZXBfbWF4W2NdOyAgICAgICAgICAgICAgICAgLyogemVybyBmb3IgbWF4ID0+IGluZmluaXR5ICovCisgICAgaWYgKG1heCA9PSAwKSBtYXggPSBJTlRfTUFYOworCisgICAgLyogQ29tbW9uIGNvZGUgZm9yIGFsbCByZXBlYXRlZCBzaW5nbGUgY2hhcmFjdGVyIHR5cGUgbWF0Y2hlcy4gTm90ZSB0aGF0CisgICAgaW4gVVRGLTggbW9kZSwgJy4nIG1hdGNoZXMgYSBjaGFyYWN0ZXIgb2YgYW55IGxlbmd0aCwgYnV0IGZvciB0aGUgb3RoZXIKKyAgICBjaGFyYWN0ZXIgdHlwZXMsIHRoZSB2YWxpZCBjaGFyYWN0ZXJzIGFyZSBhbGwgb25lLWJ5dGUgbG9uZy4gKi8KKworICAgIFJFUEVBVFRZUEU6CisgICAgY3R5cGUgPSAqZWNvZGUrKzsgICAgICAvKiBDb2RlIGZvciB0aGUgY2hhcmFjdGVyIHR5cGUgKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmIChjdHlwZSA9PSBPUF9QUk9QIHx8IGN0eXBlID09IE9QX05PVFBST1ApCisgICAgICB7CisgICAgICBwcm9wX2ZhaWxfcmVzdWx0ID0gY3R5cGUgPT0gT1BfTk9UUFJPUDsKKyAgICAgIHByb3BfdHlwZSA9ICplY29kZSsrOworICAgICAgcHJvcF92YWx1ZSA9ICplY29kZSsrOworICAgICAgfQorICAgIGVsc2UgcHJvcF90eXBlID0gLTE7CisjZW5kaWYKKworICAgIC8qIEZpcnN0LCBlbnN1cmUgdGhlIG1pbmltdW0gbnVtYmVyIG9mIG1hdGNoZXMgYXJlIHByZXNlbnQuIFVzZSBpbmxpbmUKKyAgICBjb2RlIGZvciBtYXhpbWl6aW5nIHRoZSBzcGVlZCwgYW5kIGRvIHRoZSB0eXBlIHRlc3Qgb25jZSBhdCB0aGUgc3RhcnQKKyAgICAoaS5lLiBrZWVwIGl0IG91dCBvZiB0aGUgbG9vcCkuIFNlcGFyYXRlIHRoZSBVVEYtOCBjb2RlIGNvbXBsZXRlbHkgYXMgdGhhdAorICAgIGlzIHRpZGllci4gQWxzbyBzZXBhcmF0ZSB0aGUgVUNQIGNvZGUsIHdoaWNoIGNhbiBiZSB0aGUgc2FtZSBmb3IgYm90aCBVVEYtOAorICAgIGFuZCBzaW5nbGUtYnl0ZXMuICovCisKKyAgICBpZiAobWluID4gMCkKKyAgICAgIHsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgIGlmIChwcm9wX3R5cGUgPj0gMCkKKyAgICAgICAgeworICAgICAgICBzd2l0Y2gocHJvcF90eXBlKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFBUX0FOWToKKyAgICAgICAgICBpZiAocHJvcF9mYWlsX3Jlc3VsdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9MQU1QOgorICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgY2hhcnR5cGU7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgICAgICAgICBjaGFydHlwZSA9IFVDRF9DSEFSVFlQRShjKTsKKyAgICAgICAgICAgIGlmICgoY2hhcnR5cGUgPT0gdWNwX0x1IHx8CisgICAgICAgICAgICAgICAgIGNoYXJ0eXBlID09IHVjcF9MbCB8fAorICAgICAgICAgICAgICAgICBjaGFydHlwZSA9PSB1Y3BfTHQpID09IHByb3BfZmFpbF9yZXN1bHQpCisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX0dDOgorICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgICAgICAgICBpZiAoKFVDRF9DQVRFR09SWShjKSA9PSBwcm9wX3ZhbHVlKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9QQzoKKyAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgICAgICAgaWYgKChVQ0RfQ0hBUlRZUEUoYykgPT0gcHJvcF92YWx1ZSkgPT0gcHJvcF9mYWlsX3Jlc3VsdCkKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFRfU0M6CisgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSSU5DVEVTVChjLCBlcHRyKTsKKyAgICAgICAgICAgIGlmICgoVUNEX1NDUklQVChjKSA9PSBwcm9wX3ZhbHVlKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9BTE5VTToKKyAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGNhdGVnb3J5OworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgICAgICAgY2F0ZWdvcnkgPSBVQ0RfQ0FURUdPUlkoYyk7CisgICAgICAgICAgICBpZiAoKGNhdGVnb3J5ID09IHVjcF9MIHx8IGNhdGVnb3J5ID09IHVjcF9OKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgLyogUGVybCBzcGFjZSB1c2VkIHRvIGV4Y2x1ZGUgVlQsIGJ1dCBmcm9tIFBlcmwgNS4xOCBpdCBpcyBpbmNsdWRlZCwKKyAgICAgICAgICB3aGljaCBtZWFucyB0aGF0IFBlcmwgc3BhY2UgYW5kIFBPU0lYIHNwYWNlIGFyZSBub3cgaWRlbnRpY2FsLiBQQ1JFCisgICAgICAgICAgd2FzIGNoYW5nZWQgYXQgcmVsZWFzZSA4LjM0LiAqLworCisgICAgICAgICAgY2FzZSBQVF9TUEFDRTogICAgLyogUGVybCBzcGFjZSAqLworICAgICAgICAgIGNhc2UgUFRfUFhTUEFDRTogIC8qIFBPU0lYIHNwYWNlICovCisgICAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSSU5DVEVTVChjLCBlcHRyKTsKKyAgICAgICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIEhTUEFDRV9DQVNFUzoKKyAgICAgICAgICAgICAgVlNQQUNFX0NBU0VTOgorICAgICAgICAgICAgICBpZiAocHJvcF9mYWlsX3Jlc3VsdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgaWYgKChVQ0RfQ0FURUdPUlkoYykgPT0gdWNwX1opID09IHByb3BfZmFpbF9yZXN1bHQpCisgICAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFRfV09SRDoKKyAgICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGNhdGVnb3J5OworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgICAgICAgY2F0ZWdvcnkgPSBVQ0RfQ0FURUdPUlkoYyk7CisgICAgICAgICAgICBpZiAoKGNhdGVnb3J5ID09IHVjcF9MIHx8IGNhdGVnb3J5ID09IHVjcF9OIHx8IGMgPT0gQ0hBUl9VTkRFUlNDT1JFKQorICAgICAgICAgICAgICAgICAgID09IHByb3BfZmFpbF9yZXN1bHQpCisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX0NMSVNUOgorICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjb25zdCB1aW50MzJfdCAqY3A7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgICAgICAgICBjcCA9IFBSSVYodWNkX2Nhc2VsZXNzX3NldHMpICsgcHJvcF92YWx1ZTsKKyAgICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGMgPCAqY3ApCisgICAgICAgICAgICAgICAgeyBpZiAocHJvcF9mYWlsX3Jlc3VsdCkgYnJlYWs7IGVsc2UgeyBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOyB9IH0KKyAgICAgICAgICAgICAgaWYgKGMgPT0gKmNwKyspCisgICAgICAgICAgICAgICAgeyBpZiAocHJvcF9mYWlsX3Jlc3VsdCkgeyBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOyB9IGVsc2UgYnJlYWs7IH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9VQ05DOgorICAgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgICAgICAgICBpZiAoKGMgPT0gQ0hBUl9ET0xMQVJfU0lHTiB8fCBjID09IENIQVJfQ09NTUVSQ0lBTF9BVCB8fAorICAgICAgICAgICAgICAgICBjID09IENIQVJfR1JBVkVfQUNDRU5UIHx8IChjID49IDB4YTAgJiYgYyA8PSAweGQ3ZmYpIHx8CisgICAgICAgICAgICAgICAgIGMgPj0gMHhlMDAwKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgLyogVGhpcyBzaG91bGQgbm90IG9jY3VyICovCisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIFJSRVRVUk4oUENSRTJfRVJST1JfSU5URVJOQUwpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBNYXRjaCBleHRlbmRlZCBVbmljb2RlIHNlcXVlbmNlcy4gV2Ugd2lsbCBnZXQgaGVyZSBvbmx5IGlmIHRoZQorICAgICAgc3VwcG9ydCBpcyBpbiB0aGUgYmluYXJ5OyBvdGhlcndpc2UgYSBjb21waWxlLXRpbWUgZXJyb3Igb2NjdXJzLiAqLworCisgICAgICBlbHNlIGlmIChjdHlwZSA9PSBPUF9FWFRVTkkpCisgICAgICAgIHsKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGxnYiwgcmdiOworICAgICAgICAgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgICAgICAgICBsZ2IgPSBVQ0RfR1JBUEhCUkVBSyhjKTsKKyAgICAgICAgICAgd2hpbGUgKGVwdHIgPCBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaW50IGxlbiA9IDE7CisgICAgICAgICAgICAgIGlmICghdXRmKSBjID0gKmVwdHI7IGVsc2UgeyBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbik7IH0KKyAgICAgICAgICAgICAgcmdiID0gVUNEX0dSQVBIQlJFQUsoYyk7CisgICAgICAgICAgICAgIGlmICgoUFJJVih1Y3BfZ2J0YWJsZSlbbGdiXSAmICgxIDw8IHJnYikpID09IDApIGJyZWFrOworICAgICAgICAgICAgICBsZ2IgPSByZ2I7CisgICAgICAgICAgICAgIGVwdHIgKz0gbGVuOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICBlbHNlCisjZW5kaWYgICAgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCisvKiBIYW5kbGUgYWxsIG90aGVyIGNhc2VzIHdoZW4gdGhlIGNvZGluZyBpcyBVVEYtOCAqLworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBpZiAodXRmKSBzd2l0Y2goY3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPUF9BTlk6CisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChJU19ORVdMSU5FKGVwdHIpKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIGlmIChtYi0+cGFydGlhbCAhPSAwICYmCisgICAgICAgICAgICAgIGVwdHIgKyAxID49IG1iLT5lbmRfc3ViamVjdCAmJgorICAgICAgICAgICAgICBOTEJMT0NLLT5ubHR5cGUgPT0gTkxUWVBFX0ZJWEVEICYmCisgICAgICAgICAgICAgIE5MQkxPQ0stPm5sbGVuID09IDIgJiYKKyAgICAgICAgICAgICAgVUNIQVIyMShlcHRyKSA9PSBOTEJMT0NLLT5ubFswXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIG1iLT5oaXRlbmQgPSBUUlVFOworICAgICAgICAgICAgaWYgKG1iLT5wYXJ0aWFsID4gMSkgUlJFVFVSTihQQ1JFMl9FUlJPUl9QQVJUSUFMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgQUNST1NTQ0hBUihlcHRyIDwgbWItPmVuZF9zdWJqZWN0LCAqZXB0ciwgZXB0cisrKTsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfQUxMQU5ZOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgQUNST1NTQ0hBUihlcHRyIDwgbWItPmVuZF9zdWJqZWN0LCAqZXB0ciwgZXB0cisrKTsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfQU5ZQllURToKKyAgICAgICAgaWYgKGVwdHIgPiBtYi0+ZW5kX3N1YmplY3QgLSBtaW4pIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgIGVwdHIgKz0gbWluOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX0FOWU5MOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBHRVRDSEFSSU5DKGMsIGVwdHIpOworICAgICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgZGVmYXVsdDogUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKworICAgICAgICAgICAgY2FzZSBDSEFSX0NSOgorICAgICAgICAgICAgaWYgKGVwdHIgPCBtYi0+ZW5kX3N1YmplY3QgJiYgVUNIQVIyMShlcHRyKSA9PSBDSEFSX0xGKSBlcHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBDSEFSX0xGOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQ0hBUl9WVDoKKyAgICAgICAgICAgIGNhc2UgQ0hBUl9GRjoKKyAgICAgICAgICAgIGNhc2UgQ0hBUl9ORUw6CisjaWZuZGVmIEVCQ0RJQworICAgICAgICAgICAgY2FzZSAweDIwMjg6CisgICAgICAgICAgICBjYXNlIDB4MjAyOToKKyNlbmRpZiAgLyogTm90IEVCQ0RJQyAqLworICAgICAgICAgICAgaWYgKG1iLT5ic3JfY29udmVudGlvbiA9PSBQQ1JFMl9CU1JfQU5ZQ1JMRikgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9OT1RfSFNQQUNFOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBHRVRDSEFSSU5DKGMsIGVwdHIpOworICAgICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgSFNQQUNFX0NBU0VTOiBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOyAgLyogQnl0ZSBhbmQgbXVsdGlieXRlIGNhc2VzICovCisgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfSFNQQUNFOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBHRVRDSEFSSU5DKGMsIGVwdHIpOworICAgICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgSFNQQUNFX0NBU0VTOiBicmVhazsgIC8qIEJ5dGUgYW5kIG11bHRpYnl0ZSBjYXNlcyAqLworICAgICAgICAgICAgZGVmYXVsdDogUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfTk9UX1ZTUEFDRToKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgR0VUQ0hBUklOQyhjLCBlcHRyKTsKKyAgICAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFZTUEFDRV9DQVNFUzogUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9WU1BBQ0U6CisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIEdFVENIQVJJTkMoYywgZXB0cik7CisgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBWU1BBQ0VfQ0FTRVM6IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfTk9UX0RJR0lUOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBHRVRDSEFSSU5DKGMsIGVwdHIpOworICAgICAgICAgIGlmIChjIDwgMTI4ICYmIChtYi0+Y3R5cGVzW2NdICYgY3R5cGVfZGlnaXQpICE9IDApCisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9ESUdJVDoKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgdWludDMyX3QgY2M7CisgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgY2MgPSBVQ0hBUjIxKGVwdHIpOworICAgICAgICAgIGlmIChjYyA+PSAxMjggfHwgKG1iLT5jdHlwZXNbY2NdICYgY3R5cGVfZGlnaXQpID09IDApCisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIGVwdHIrKzsKKyAgICAgICAgICAvKiBObyBuZWVkIHRvIHNraXAgbW9yZSBieXRlcyAtIHdlIGtub3cgaXQncyBhIDEtYnl0ZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6CisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIHVpbnQzMl90IGNjOworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGNjID0gVUNIQVIyMShlcHRyKTsKKyAgICAgICAgICBpZiAoY2MgPCAxMjggJiYgKG1iLT5jdHlwZXNbY2NdICYgY3R5cGVfc3BhY2UpICE9IDApCisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIGVwdHIrKzsKKyAgICAgICAgICBBQ1JPU1NDSEFSKGVwdHIgPCBtYi0+ZW5kX3N1YmplY3QsICplcHRyLCBlcHRyKyspOworICAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9XSElURVNQQUNFOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICB1aW50MzJfdCBjYzsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYyA9IFVDSEFSMjEoZXB0cik7CisgICAgICAgICAgaWYgKGNjID49IDEyOCB8fCAobWItPmN0eXBlc1tjY10gJiBjdHlwZV9zcGFjZSkgPT0gMCkKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgZXB0cisrOworICAgICAgICAgIC8qIE5vIG5lZWQgdG8gc2tpcCBtb3JlIGJ5dGVzIC0gd2Uga25vdyBpdCdzIGEgMS1ieXRlIGNoYXJhY3RlciAqLworICAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIHVpbnQzMl90IGNjOworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGNjID0gVUNIQVIyMShlcHRyKTsKKyAgICAgICAgICBpZiAoY2MgPCAxMjggJiYgKG1iLT5jdHlwZXNbY2NdICYgY3R5cGVfd29yZCkgIT0gMCkKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgZXB0cisrOworICAgICAgICAgIEFDUk9TU0NIQVIoZXB0ciA8IG1iLT5lbmRfc3ViamVjdCwgKmVwdHIsIGVwdHIrKyk7CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX1dPUkRDSEFSOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICB1aW50MzJfdCBjYzsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjYyA9IFVDSEFSMjEoZXB0cik7CisgICAgICAgICAgaWYgKGNjID49IDEyOCB8fCAobWItPmN0eXBlc1tjY10gJiBjdHlwZV93b3JkKSA9PSAwKQorICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgLyogTm8gbmVlZCB0byBza2lwIG1vcmUgYnl0ZXMgLSB3ZSBrbm93IGl0J3MgYSAxLWJ5dGUgY2hhcmFjdGVyICovCisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICBSUkVUVVJOKFBDUkUyX0VSUk9SX0lOVEVSTkFMKTsKKyAgICAgICAgfSAgLyogRW5kIHN3aXRjaChjdHlwZSkgKi8KKworICAgICAgZWxzZQorI2VuZGlmICAgICAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKworICAgICAgLyogQ29kZSBmb3IgdGhlIG5vbi1VVEYtOCBjYXNlIGZvciBtaW5pbXVtIG1hdGNoaW5nIG9mIG9wZXJhdG9ycyBvdGhlcgorICAgICAgdGhhbiBPUF9QUk9QIGFuZCBPUF9OT1RQUk9QLiAqLworCisgICAgICBzd2l0Y2goY3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPUF9BTlk6CisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChJU19ORVdMSU5FKGVwdHIpKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIGlmIChtYi0+cGFydGlhbCAhPSAwICYmCisgICAgICAgICAgICAgIGVwdHIgKyAxID49IG1iLT5lbmRfc3ViamVjdCAmJgorICAgICAgICAgICAgICBOTEJMT0NLLT5ubHR5cGUgPT0gTkxUWVBFX0ZJWEVEICYmCisgICAgICAgICAgICAgIE5MQkxPQ0stPm5sbGVuID09IDIgJiYKKyAgICAgICAgICAgICAgKmVwdHIgPT0gTkxCTE9DSy0+bmxbMF0pCisgICAgICAgICAgICB7CisgICAgICAgICAgICBtYi0+aGl0ZW5kID0gVFJVRTsKKyAgICAgICAgICAgIGlmIChtYi0+cGFydGlhbCA+IDEpIFJSRVRVUk4oUENSRTJfRVJST1JfUEFSVElBTCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZXB0cisrOworICAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9BTExBTlk6CisgICAgICAgIGlmIChlcHRyID4gbWItPmVuZF9zdWJqZWN0IC0gbWluKQorICAgICAgICAgIHsKKyAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgfQorICAgICAgICBlcHRyICs9IG1pbjsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9BTllCWVRFOgorICAgICAgICBpZiAoZXB0ciA+IG1iLT5lbmRfc3ViamVjdCAtIG1pbikKKyAgICAgICAgICB7CisgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIH0KKyAgICAgICAgZXB0ciArPSBtaW47CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfQU5ZTkw6CisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIHN3aXRjaCgqZXB0cisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgZGVmYXVsdDogUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKworICAgICAgICAgICAgY2FzZSBDSEFSX0NSOgorICAgICAgICAgICAgaWYgKGVwdHIgPCBtYi0+ZW5kX3N1YmplY3QgJiYgKmVwdHIgPT0gQ0hBUl9MRikgZXB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgQ0hBUl9MRjoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIENIQVJfVlQ6CisgICAgICAgICAgICBjYXNlIENIQVJfRkY6CisgICAgICAgICAgICBjYXNlIENIQVJfTkVMOgorI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgICAgICAgICBjYXNlIDB4MjAyODoKKyAgICAgICAgICAgIGNhc2UgMHgyMDI5OgorI2VuZGlmCisgICAgICAgICAgICBpZiAobWItPmJzcl9jb252ZW50aW9uID09IFBDUkUyX0JTUl9BTllDUkxGKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX05PVF9IU1BBQ0U6CisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIHN3aXRjaCgqZXB0cisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgICAgICBIU1BBQ0VfQllURV9DQVNFUzoKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgICAgICAgICAgSFNQQUNFX01VTFRJQllURV9DQVNFUzoKKyNlbmRpZgorICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfSFNQQUNFOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBzd2l0Y2goKmVwdHIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6IFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBIU1BBQ0VfQllURV9DQVNFUzoKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgICAgICAgICAgSFNQQUNFX01VTFRJQllURV9DQVNFUzoKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX05PVF9WU1BBQ0U6CisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIHN3aXRjaCgqZXB0cisrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgVlNQQUNFX0JZVEVfQ0FTRVM6CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICAgICAgICAgIFZTUEFDRV9NVUxUSUJZVEVfQ0FTRVM6CisjZW5kaWYKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfVlNQQUNFOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBzd2l0Y2goKmVwdHIrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6IFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBWU1BBQ0VfQllURV9DQVNFUzoKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgICAgICAgICAgVlNQQUNFX01VTFRJQllURV9DQVNFUzoKKyNlbmRpZgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKE1BWF8yNTUoKmVwdHIpICYmIChtYi0+Y3R5cGVzWyplcHRyXSAmIGN0eXBlX2RpZ2l0KSAhPSAwKQorICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX0RJR0lUOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIU1BWF8yNTUoKmVwdHIpIHx8IChtYi0+Y3R5cGVzWyplcHRyXSAmIGN0eXBlX2RpZ2l0KSA9PSAwKQorICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX05PVF9XSElURVNQQUNFOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoTUFYXzI1NSgqZXB0cikgJiYgKG1iLT5jdHlwZXNbKmVwdHJdICYgY3R5cGVfc3BhY2UpICE9IDApCisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIGVwdHIrKzsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfV0hJVEVTUEFDRToKKyAgICAgICAgZm9yIChpID0gMTsgaSA8PSBtaW47IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKCFNQVhfMjU1KCplcHRyKSB8fCAobWItPmN0eXBlc1sqZXB0cl0gJiBjdHlwZV9zcGFjZSkgPT0gMCkKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgZXB0cisrOworICAgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CisgICAgICAgIGZvciAoaSA9IDE7IGkgPD0gbWluOyBpKyspCisgICAgICAgICAgeworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChNQVhfMjU1KCplcHRyKSAmJiAobWItPmN0eXBlc1sqZXB0cl0gJiBjdHlwZV93b3JkKSAhPSAwKQorICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX1dPUkRDSEFSOgorICAgICAgICBmb3IgKGkgPSAxOyBpIDw9IG1pbjsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoIU1BWF8yNTUoKmVwdHIpIHx8IChtYi0+Y3R5cGVzWyplcHRyXSAmIGN0eXBlX3dvcmQpID09IDApCisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIGVwdHIrKzsKKyAgICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIFJSRVRVUk4oUENSRTJfRVJST1JfSU5URVJOQUwpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAvKiBJZiBtaW4gPSBtYXgsIGNvbnRpbnVlIGF0IHRoZSBzYW1lIGxldmVsIHdpdGhvdXQgcmVjdXJzaW5nICovCisKKyAgICBpZiAobWluID09IG1heCkgY29udGludWU7CisKKyAgICAvKiBJZiBtaW5pbWl6aW5nLCB3ZSBoYXZlIHRvIHRlc3QgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gYmVmb3JlIGVhY2gKKyAgICBzdWJzZXF1ZW50IG1hdGNoLiBBZ2Fpbiwgc2VwYXJhdGUgdGhlIFVURi04IGNhc2UgZm9yIHNwZWVkLCBhbmQgYWxzbworICAgIHNlcGFyYXRlIHRoZSBVQ1AgY2FzZXMuICovCisKKyAgICBpZiAobWluaW1pemUpCisgICAgICB7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBpZiAocHJvcF90eXBlID49IDApCisgICAgICAgIHsKKyAgICAgICAgc3dpdGNoKHByb3BfdHlwZSkKKyAgICAgICAgICB7CisgICAgICAgICAgY2FzZSBQVF9BTlk6CisgICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk0zNik7CisgICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICAgIGlmIChmaSA+PSBtYXgpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgICAgICAgICBpZiAocHJvcF9mYWlsX3Jlc3VsdCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworCisgICAgICAgICAgY2FzZSBQVF9MQU1QOgorICAgICAgICAgIGZvciAoZmkgPSBtaW47OyBmaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGNoYXJ0eXBlOworICAgICAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNMzcpOworICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgICBpZiAoZmkgPj0gbWF4KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgICAgICAgY2hhcnR5cGUgPSBVQ0RfQ0hBUlRZUEUoYyk7CisgICAgICAgICAgICBpZiAoKGNoYXJ0eXBlID09IHVjcF9MdSB8fAorICAgICAgICAgICAgICAgICBjaGFydHlwZSA9PSB1Y3BfTGwgfHwKKyAgICAgICAgICAgICAgICAgY2hhcnR5cGUgPT0gdWNwX0x0KSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIC8qIENvbnRyb2wgbmV2ZXIgZ2V0cyBoZXJlICovCisKKyAgICAgICAgICBjYXNlIFBUX0dDOgorICAgICAgICAgIGZvciAoZmkgPSBtaW47OyBmaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNMzgpOworICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgICBpZiAoZmkgPj0gbWF4KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgICAgICAgaWYgKChVQ0RfQ0FURUdPUlkoYykgPT0gcHJvcF92YWx1ZSkgPT0gcHJvcF9mYWlsX3Jlc3VsdCkKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworCisgICAgICAgICAgY2FzZSBQVF9QQzoKKyAgICAgICAgICBmb3IgKGZpID0gbWluOzsgZmkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTM5KTsKKyAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgICAgaWYgKGZpID49IG1heCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSSU5DVEVTVChjLCBlcHRyKTsKKyAgICAgICAgICAgIGlmICgoVUNEX0NIQVJUWVBFKGMpID09IHByb3BfdmFsdWUpID09IHByb3BfZmFpbF9yZXN1bHQpCisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKworICAgICAgICAgIGNhc2UgUFRfU0M6CisgICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk00MCk7CisgICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICAgIGlmIChmaSA+PSBtYXgpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgICAgICAgICBpZiAoKFVDRF9TQ1JJUFQoYykgPT0gcHJvcF92YWx1ZSkgPT0gcHJvcF9mYWlsX3Jlc3VsdCkKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworCisgICAgICAgICAgY2FzZSBQVF9BTE5VTToKKyAgICAgICAgICBmb3IgKGZpID0gbWluOzsgZmkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBjYXRlZ29yeTsKKyAgICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTU5KTsKKyAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgICAgaWYgKGZpID49IG1heCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSSU5DVEVTVChjLCBlcHRyKTsKKyAgICAgICAgICAgIGNhdGVnb3J5ID0gVUNEX0NBVEVHT1JZKGMpOworICAgICAgICAgICAgaWYgKChjYXRlZ29yeSA9PSB1Y3BfTCB8fCBjYXRlZ29yeSA9PSB1Y3BfTikgPT0gcHJvcF9mYWlsX3Jlc3VsdCkKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworCisgICAgICAgICAgLyogUGVybCBzcGFjZSB1c2VkIHRvIGV4Y2x1ZGUgVlQsIGJ1dCBmcm9tIFBlcmwgNS4xOCBpdCBpcyBpbmNsdWRlZCwKKyAgICAgICAgICB3aGljaCBtZWFucyB0aGF0IFBlcmwgc3BhY2UgYW5kIFBPU0lYIHNwYWNlIGFyZSBub3cgaWRlbnRpY2FsLiBQQ1JFCisgICAgICAgICAgd2FzIGNoYW5nZWQgYXQgcmVsZWFzZSA4LjM0LiAqLworCisgICAgICAgICAgY2FzZSBQVF9TUEFDRTogICAgLyogUGVybCBzcGFjZSAqLworICAgICAgICAgIGNhc2UgUFRfUFhTUEFDRTogIC8qIFBPU0lYIHNwYWNlICovCisgICAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk02MSk7CisgICAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICAgIGlmIChmaSA+PSBtYXgpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgICAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBIU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgICAgIFZTUEFDRV9DQVNFUzoKKyAgICAgICAgICAgICAgaWYgKHByb3BfZmFpbF9yZXN1bHQpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGlmICgoVUNEX0NBVEVHT1JZKGMpID09IHVjcF9aKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKworICAgICAgICAgIGNhc2UgUFRfV09SRDoKKyAgICAgICAgICBmb3IgKGZpID0gbWluOzsgZmkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBjYXRlZ29yeTsKKyAgICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTYyKTsKKyAgICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgICAgaWYgKGZpID49IG1heCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSSU5DVEVTVChjLCBlcHRyKTsKKyAgICAgICAgICAgIGNhdGVnb3J5ID0gVUNEX0NBVEVHT1JZKGMpOworICAgICAgICAgICAgaWYgKChjYXRlZ29yeSA9PSB1Y3BfTCB8fAorICAgICAgICAgICAgICAgICBjYXRlZ29yeSA9PSB1Y3BfTiB8fAorICAgICAgICAgICAgICAgICBjID09IENIQVJfVU5ERVJTQ09SRSkKKyAgICAgICAgICAgICAgICAgICA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIC8qIENvbnRyb2wgbmV2ZXIgZ2V0cyBoZXJlICovCisKKyAgICAgICAgICBjYXNlIFBUX0NMSVNUOgorICAgICAgICAgIGZvciAoZmkgPSBtaW47OyBmaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgKmNwOworICAgICAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNNjcpOworICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgICBpZiAoZmkgPj0gbWF4KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgICAgICAgY3AgPSBQUklWKHVjZF9jYXNlbGVzc19zZXRzKSArIHByb3BfdmFsdWU7CisgICAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChjIDwgKmNwKQorICAgICAgICAgICAgICAgIHsgaWYgKHByb3BfZmFpbF9yZXN1bHQpIGJyZWFrOyBlbHNlIHsgUlJFVFVSTihNQVRDSF9OT01BVENIKTsgfSB9CisgICAgICAgICAgICAgIGlmIChjID09ICpjcCsrKQorICAgICAgICAgICAgICAgIHsgaWYgKHByb3BfZmFpbF9yZXN1bHQpIHsgUlJFVFVSTihNQVRDSF9OT01BVENIKTsgfSBlbHNlIGJyZWFrOyB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworCisgICAgICAgICAgY2FzZSBQVF9VQ05DOgorICAgICAgICAgIGZvciAoZmkgPSBtaW47OyBmaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNNjApOworICAgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgICBpZiAoZmkgPj0gbWF4KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgICAgICAgaWYgKChjID09IENIQVJfRE9MTEFSX1NJR04gfHwgYyA9PSBDSEFSX0NPTU1FUkNJQUxfQVQgfHwKKyAgICAgICAgICAgICAgICAgYyA9PSBDSEFSX0dSQVZFX0FDQ0VOVCB8fCAoYyA+PSAweGEwICYmIGMgPD0gMHhkN2ZmKSB8fAorICAgICAgICAgICAgICAgICBjID49IDB4ZTAwMCkgPT0gcHJvcF9mYWlsX3Jlc3VsdCkKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworCisgICAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgb2NjdXIgKi8KKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIFJSRVRVUk4oUENSRTJfRVJST1JfSU5URVJOQUwpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBNYXRjaCBleHRlbmRlZCBVbmljb2RlIHNlcXVlbmNlcy4gV2Ugd2lsbCBnZXQgaGVyZSBvbmx5IGlmIHRoZQorICAgICAgc3VwcG9ydCBpcyBpbiB0aGUgYmluYXJ5OyBvdGhlcndpc2UgYSBjb21waWxlLXRpbWUgZXJyb3Igb2NjdXJzLiAqLworCisgICAgICBlbHNlIGlmIChjdHlwZSA9PSBPUF9FWFRVTkkpCisgICAgICAgIHsKKyAgICAgICAgZm9yIChmaSA9IG1pbjs7IGZpKyspCisgICAgICAgICAgeworICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTQxKTsKKyAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICBpZiAoZmkgPj0gbWF4KSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZ2IsIHJnYjsKKyAgICAgICAgICAgIEdFVENIQVJJTkNURVNUKGMsIGVwdHIpOworICAgICAgICAgICAgbGdiID0gVUNEX0dSQVBIQlJFQUsoYyk7CisgICAgICAgICAgICB3aGlsZSAoZXB0ciA8IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgbGVuID0gMTsKKyAgICAgICAgICAgICAgaWYgKCF1dGYpIGMgPSAqZXB0cjsgZWxzZSB7IEdFVENIQVJMRU4oYywgZXB0ciwgbGVuKTsgfQorICAgICAgICAgICAgICByZ2IgPSBVQ0RfR1JBUEhCUkVBSyhjKTsKKyAgICAgICAgICAgICAgaWYgKChQUklWKHVjcF9nYnRhYmxlKVtsZ2JdICYgKDEgPDwgcmdiKSkgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICAgIGxnYiA9IHJnYjsKKyAgICAgICAgICAgICAgZXB0ciArPSBsZW47CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgICAgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBpZiAodXRmKQorICAgICAgICB7CisgICAgICAgIGZvciAoZmkgPSBtaW47OyBmaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk00Mik7CisgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisgICAgICAgICAgaWYgKGZpID49IG1heCkgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBpZiAoY3R5cGUgPT0gT1BfQU5ZICYmIElTX05FV0xJTkUoZXB0cikpCisgICAgICAgICAgICBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgIEdFVENIQVJJTkMoYywgZXB0cik7CisgICAgICAgICAgc3dpdGNoKGN0eXBlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBPUF9BTlk6ICAgICAgICAgICAgICAgLyogVGhpcyBpcyB0aGUgbm9uLU5MIGNhc2UgKi8KKyAgICAgICAgICAgIGlmIChtYi0+cGFydGlhbCAhPSAwICYmICAgIC8qIFRha2UgY2FyZSB3aXRoIENSTEYgcGFydGlhbCAqLworICAgICAgICAgICAgICAgIGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0ICYmCisgICAgICAgICAgICAgICAgTkxCTE9DSy0+bmx0eXBlID09IE5MVFlQRV9GSVhFRCAmJgorICAgICAgICAgICAgICAgIE5MQkxPQ0stPm5sbGVuID09IDIgJiYKKyAgICAgICAgICAgICAgICBjID09IE5MQkxPQ0stPm5sWzBdKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1iLT5oaXRlbmQgPSBUUlVFOworICAgICAgICAgICAgICBpZiAobWItPnBhcnRpYWwgPiAxKSBSUkVUVVJOKFBDUkUyX0VSUk9SX1BBUlRJQUwpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPUF9BTExBTlk6CisgICAgICAgICAgICBjYXNlIE9QX0FOWUJZVEU6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPUF9BTllOTDoKKyAgICAgICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIGNhc2UgQ0hBUl9DUjoKKyAgICAgICAgICAgICAgaWYgKGVwdHIgPCBtYi0+ZW5kX3N1YmplY3QgJiYgVUNIQVIyMShlcHRyKSA9PSBDSEFSX0xGKSBlcHRyKys7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgQ0hBUl9MRjoKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBDSEFSX1ZUOgorICAgICAgICAgICAgICBjYXNlIENIQVJfRkY6CisgICAgICAgICAgICAgIGNhc2UgQ0hBUl9ORUw6CisjaWZuZGVmIEVCQ0RJQworICAgICAgICAgICAgICBjYXNlIDB4MjAyODoKKyAgICAgICAgICAgICAgY2FzZSAweDIwMjk6CisjZW5kaWYgIC8qIE5vdCBFQkNESUMgKi8KKyAgICAgICAgICAgICAgaWYgKG1iLT5ic3JfY29udmVudGlvbiA9PSBQQ1JFMl9CU1JfQU5ZQ1JMRikgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9QX05PVF9IU1BBQ0U6CisgICAgICAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBIU1BBQ0VfQ0FTRVM6IFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPUF9IU1BBQ0U6CisgICAgICAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBIU1BBQ0VfQ0FTRVM6IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OiBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPUF9OT1RfVlNQQUNFOgorICAgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgVlNQQUNFX0NBU0VTOiBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1BfVlNQQUNFOgorICAgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgVlNQQUNFX0NBU0VTOiBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDogUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1BfTk9UX0RJR0lUOgorICAgICAgICAgICAgaWYgKGMgPCAyNTYgJiYgKG1iLT5jdHlwZXNbY10gJiBjdHlwZV9kaWdpdCkgIT0gMCkKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9QX0RJR0lUOgorICAgICAgICAgICAgaWYgKGMgPj0gMjU2IHx8IChtYi0+Y3R5cGVzW2NdICYgY3R5cGVfZGlnaXQpID09IDApCisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPUF9OT1RfV0hJVEVTUEFDRToKKyAgICAgICAgICAgIGlmIChjIDwgMjU2ICYmIChtYi0+Y3R5cGVzW2NdICYgY3R5cGVfc3BhY2UpICE9IDApCisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPUF9XSElURVNQQUNFOgorICAgICAgICAgICAgaWYgKGMgPj0gMjU2IHx8IChtYi0+Y3R5cGVzW2NdICYgY3R5cGVfc3BhY2UpID09IDApCisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CisgICAgICAgICAgICBpZiAoYyA8IDI1NiAmJiAobWItPmN0eXBlc1tjXSAmIGN0eXBlX3dvcmQpICE9IDApCisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPUF9XT1JEQ0hBUjoKKyAgICAgICAgICAgIGlmIChjID49IDI1NiB8fCAobWItPmN0eXBlc1tjXSAmIGN0eXBlX3dvcmQpID09IDApCisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJSRVRVUk4oUENSRTJfRVJST1JfSU5URVJOQUwpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmCisgICAgICAvKiBOb3QgVVRGIG1vZGUgKi8KKyAgICAgICAgeworICAgICAgICBmb3IgKGZpID0gbWluOzsgZmkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNNDMpOworICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgIGlmIChmaSA+PSBtYXgpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYgKGN0eXBlID09IE9QX0FOWSAmJiBJU19ORVdMSU5FKGVwdHIpKQorICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICBjID0gKmVwdHIrKzsKKyAgICAgICAgICBzd2l0Y2goY3R5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBjYXNlIE9QX0FOWTogICAgICAgICAgICAgICAvKiBUaGlzIGlzIHRoZSBub24tTkwgY2FzZSAqLworICAgICAgICAgICAgaWYgKG1iLT5wYXJ0aWFsICE9IDAgJiYgICAgLyogVGFrZSBjYXJlIHdpdGggQ1JMRiBwYXJ0aWFsICovCisgICAgICAgICAgICAgICAgZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QgJiYKKyAgICAgICAgICAgICAgICBOTEJMT0NLLT5ubHR5cGUgPT0gTkxUWVBFX0ZJWEVEICYmCisgICAgICAgICAgICAgICAgTkxCTE9DSy0+bmxsZW4gPT0gMiAmJgorICAgICAgICAgICAgICAgIGMgPT0gTkxCTE9DSy0+bmxbMF0pCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWItPmhpdGVuZCA9IFRSVUU7CisgICAgICAgICAgICAgIGlmIChtYi0+cGFydGlhbCA+IDEpIFJSRVRVUk4oUENSRTJfRVJST1JfUEFSVElBTCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9QX0FMTEFOWToKKyAgICAgICAgICAgIGNhc2UgT1BfQU5ZQllURToKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9QX0FOWU5MOgorICAgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZGVmYXVsdDogUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgY2FzZSBDSEFSX0NSOgorICAgICAgICAgICAgICBpZiAoZXB0ciA8IG1iLT5lbmRfc3ViamVjdCAmJiAqZXB0ciA9PSBDSEFSX0xGKSBlcHRyKys7CisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGNhc2UgQ0hBUl9MRjoKKyAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgY2FzZSBDSEFSX1ZUOgorICAgICAgICAgICAgICBjYXNlIENIQVJfRkY6CisgICAgICAgICAgICAgIGNhc2UgQ0hBUl9ORUw6CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICAgICAgICAgICAgY2FzZSAweDIwMjg6CisgICAgICAgICAgICAgIGNhc2UgMHgyMDI5OgorI2VuZGlmCisgICAgICAgICAgICAgIGlmIChtYi0+YnNyX2NvbnZlbnRpb24gPT0gUENSRTJfQlNSX0FOWUNSTEYpIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPUF9OT1RfSFNQQUNFOgorICAgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgICAgICAgIEhTUEFDRV9CWVRFX0NBU0VTOgorI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgICAgICAgICAgIEhTUEFDRV9NVUxUSUJZVEVfQ0FTRVM6CisjZW5kaWYKKyAgICAgICAgICAgICAgUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1BfSFNQQUNFOgorICAgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZGVmYXVsdDogUlJFVFVSTihNQVRDSF9OT01BVENIKTsKKyAgICAgICAgICAgICAgSFNQQUNFX0JZVEVfQ0FTRVM6CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICAgICAgICAgICAgSFNQQUNFX01VTFRJQllURV9DQVNFUzoKKyNlbmRpZgorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1BfTk9UX1ZTUEFDRToKKyAgICAgICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgICBWU1BBQ0VfQllURV9DQVNFUzoKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgICAgICAgICAgICBWU1BBQ0VfTVVMVElCWVRFX0NBU0VTOgorI2VuZGlmCisgICAgICAgICAgICAgIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9QX1ZTUEFDRToKKyAgICAgICAgICAgIHN3aXRjaChjKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICAgIFZTUEFDRV9CWVRFX0NBU0VTOgorI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgICAgICAgICAgIFZTUEFDRV9NVUxUSUJZVEVfQ0FTRVM6CisjZW5kaWYKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgICAgICAgICAgIGlmIChNQVhfMjU1KGMpICYmIChtYi0+Y3R5cGVzW2NdICYgY3R5cGVfZGlnaXQpICE9IDApIFJSRVRVUk4oTUFUQ0hfTk9NQVRDSCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBPUF9ESUdJVDoKKyAgICAgICAgICAgIGlmICghTUFYXzI1NShjKSB8fCAobWItPmN0eXBlc1tjXSAmIGN0eXBlX2RpZ2l0KSA9PSAwKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6CisgICAgICAgICAgICBpZiAoTUFYXzI1NShjKSAmJiAobWItPmN0eXBlc1tjXSAmIGN0eXBlX3NwYWNlKSAhPSAwKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1BfV0hJVEVTUEFDRToKKyAgICAgICAgICAgIGlmICghTUFYXzI1NShjKSB8fCAobWItPmN0eXBlc1tjXSAmIGN0eXBlX3NwYWNlKSA9PSAwKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1BfTk9UX1dPUkRDSEFSOgorICAgICAgICAgICAgaWYgKE1BWF8yNTUoYykgJiYgKG1iLT5jdHlwZXNbY10gJiBjdHlwZV93b3JkKSAhPSAwKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgT1BfV09SRENIQVI6CisgICAgICAgICAgICBpZiAoIU1BWF8yNTUoYykgfHwgKG1iLT5jdHlwZXNbY10gJiBjdHlwZV93b3JkKSA9PSAwKSBSUkVUVVJOKE1BVENIX05PTUFUQ0gpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSUkVUVVJOKFBDUkUyX0VSUk9SX0lOVEVSTkFMKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIC8qIENvbnRyb2wgbmV2ZXIgZ2V0cyBoZXJlICovCisgICAgICB9CisKKyAgICAvKiBJZiBtYXhpbWl6aW5nLCBpdCBpcyB3b3J0aCB1c2luZyBpbmxpbmUgY29kZSBmb3Igc3BlZWQsIGRvaW5nIHRoZSB0eXBlCisgICAgdGVzdCBvbmNlIGF0IHRoZSBzdGFydCAoaS5lLiBrZWVwIGl0IG91dCBvZiB0aGUgbG9vcCkuIEFnYWluLCBrZWVwIHRoZQorICAgIFVURi04IGFuZCBVQ1Agc3R1ZmYgc2VwYXJhdGUuICovCisKKyAgICBlbHNlCisgICAgICB7CisgICAgICBwcCA9IGVwdHI7ICAvKiBSZW1lbWJlciB3aGVyZSB3ZSBzdGFydGVkICovCisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgIGlmIChwcm9wX3R5cGUgPj0gMCkKKyAgICAgICAgeworICAgICAgICBzd2l0Y2gocHJvcF90eXBlKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIFBUX0FOWToKKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSTEVOVEVTVChjLCBlcHRyLCBsZW4pOworICAgICAgICAgICAgaWYgKHByb3BfZmFpbF9yZXN1bHQpIGJyZWFrOworICAgICAgICAgICAgZXB0cis9IGxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFRfTEFNUDoKKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBjaGFydHlwZTsKKyAgICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSTEVOVEVTVChjLCBlcHRyLCBsZW4pOworICAgICAgICAgICAgY2hhcnR5cGUgPSBVQ0RfQ0hBUlRZUEUoYyk7CisgICAgICAgICAgICBpZiAoKGNoYXJ0eXBlID09IHVjcF9MdSB8fAorICAgICAgICAgICAgICAgICBjaGFydHlwZSA9PSB1Y3BfTGwgfHwKKyAgICAgICAgICAgICAgICAgY2hhcnR5cGUgPT0gdWNwX0x0KSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVwdHIrPSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX0dDOgorICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGxlbiA9IDE7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJMRU5URVNUKGMsIGVwdHIsIGxlbik7CisgICAgICAgICAgICBpZiAoKFVDRF9DQVRFR09SWShjKSA9PSBwcm9wX3ZhbHVlKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KSBicmVhazsKKyAgICAgICAgICAgIGVwdHIrPSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX1BDOgorICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGxlbiA9IDE7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJMRU5URVNUKGMsIGVwdHIsIGxlbik7CisgICAgICAgICAgICBpZiAoKFVDRF9DSEFSVFlQRShjKSA9PSBwcm9wX3ZhbHVlKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KSBicmVhazsKKyAgICAgICAgICAgIGVwdHIrPSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX1NDOgorICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGxlbiA9IDE7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJMRU5URVNUKGMsIGVwdHIsIGxlbik7CisgICAgICAgICAgICBpZiAoKFVDRF9TQ1JJUFQoYykgPT0gcHJvcF92YWx1ZSkgPT0gcHJvcF9mYWlsX3Jlc3VsdCkgYnJlYWs7CisgICAgICAgICAgICBlcHRyKz0gbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9BTE5VTToKKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBjYXRlZ29yeTsKKyAgICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSTEVOVEVTVChjLCBlcHRyLCBsZW4pOworICAgICAgICAgICAgY2F0ZWdvcnkgPSBVQ0RfQ0FURUdPUlkoYyk7CisgICAgICAgICAgICBpZiAoKGNhdGVnb3J5ID09IHVjcF9MIHx8IGNhdGVnb3J5ID09IHVjcF9OKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVwdHIrPSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAvKiBQZXJsIHNwYWNlIHVzZWQgdG8gZXhjbHVkZSBWVCwgYnV0IGZyb20gUGVybCA1LjE4IGl0IGlzIGluY2x1ZGVkLAorICAgICAgICAgIHdoaWNoIG1lYW5zIHRoYXQgUGVybCBzcGFjZSBhbmQgUE9TSVggc3BhY2UgYXJlIG5vdyBpZGVudGljYWwuIFBDUkUKKyAgICAgICAgICB3YXMgY2hhbmdlZCBhdCByZWxlYXNlIDguMzQuICovCisKKyAgICAgICAgICBjYXNlIFBUX1NQQUNFOiAgICAvKiBQZXJsIHNwYWNlICovCisgICAgICAgICAgY2FzZSBQVF9QWFNQQUNFOiAgLyogUE9TSVggc3BhY2UgKi8KKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSTEVOVEVTVChjLCBlcHRyLCBsZW4pOworICAgICAgICAgICAgc3dpdGNoKGMpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgSFNQQUNFX0NBU0VTOgorICAgICAgICAgICAgICBWU1BBQ0VfQ0FTRVM6CisgICAgICAgICAgICAgIGlmIChwcm9wX2ZhaWxfcmVzdWx0KSBnb3RvIEVORExPT1A5OTsgIC8qIEJyZWFrIHRoZSBsb29wICovCisgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgIGlmICgoVUNEX0NBVEVHT1JZKGMpID09IHVjcF9aKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICAgIGdvdG8gRU5ETE9PUDk5OyAgIC8qIEJyZWFrIHRoZSBsb29wICovCisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlcHRyKz0gbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIEVORExPT1A5OToKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgUFRfV09SRDoKKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBjYXRlZ29yeTsKKyAgICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSTEVOVEVTVChjLCBlcHRyLCBsZW4pOworICAgICAgICAgICAgY2F0ZWdvcnkgPSBVQ0RfQ0FURUdPUlkoYyk7CisgICAgICAgICAgICBpZiAoKGNhdGVnb3J5ID09IHVjcF9MIHx8IGNhdGVnb3J5ID09IHVjcF9OIHx8CisgICAgICAgICAgICAgICAgIGMgPT0gQ0hBUl9VTkRFUlNDT1JFKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVwdHIrPSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIFBUX0NMSVNUOgorICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgKmNwOworICAgICAgICAgICAgaW50IGxlbiA9IDE7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJMRU5URVNUKGMsIGVwdHIsIGxlbik7CisgICAgICAgICAgICBjcCA9IFBSSVYodWNkX2Nhc2VsZXNzX3NldHMpICsgcHJvcF92YWx1ZTsKKyAgICAgICAgICAgIGZvciAoOzspCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGMgPCAqY3ApCisgICAgICAgICAgICAgICAgeyBpZiAocHJvcF9mYWlsX3Jlc3VsdCkgYnJlYWs7IGVsc2UgZ290byBHT1RfTUFYOyB9CisgICAgICAgICAgICAgIGlmIChjID09ICpjcCsrKQorICAgICAgICAgICAgICAgIHsgaWYgKHByb3BfZmFpbF9yZXN1bHQpIGdvdG8gR09UX01BWDsgZWxzZSBicmVhazsgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlcHRyICs9IGxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBHT1RfTUFYOgorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBQVF9VQ05DOgorICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGxlbiA9IDE7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJMRU5URVNUKGMsIGVwdHIsIGxlbik7CisgICAgICAgICAgICBpZiAoKGMgPT0gQ0hBUl9ET0xMQVJfU0lHTiB8fCBjID09IENIQVJfQ09NTUVSQ0lBTF9BVCB8fAorICAgICAgICAgICAgICAgICBjID09IENIQVJfR1JBVkVfQUNDRU5UIHx8IChjID49IDB4YTAgJiYgYyA8PSAweGQ3ZmYpIHx8CisgICAgICAgICAgICAgICAgIGMgPj0gMHhlMDAwKSA9PSBwcm9wX2ZhaWxfcmVzdWx0KQorICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGVwdHIgKz0gbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBSUkVUVVJOKFBDUkUyX0VSUk9SX0lOVEVSTkFMKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogZXB0ciBpcyBub3cgcGFzdCB0aGUgZW5kIG9mIHRoZSBtYXhpbXVtIHJ1biAqLworCisgICAgICAgIGlmIChwb3NzZXNzaXZlKSBjb250aW51ZTsgICAgLyogTm8gYmFja3RyYWNraW5nICovCisKKyAgICAgICAgLyogQWZ0ZXIgXEMgaW4gVVRGIG1vZGUsIHBwIG1pZ2h0IGJlIGluIHRoZSBtaWRkbGUgb2YgYSBVbmljb2RlCisgICAgICAgIGNoYXJhY3Rlci4gVXNlIDw9IHBwIHRvIGVuc3VyZSBiYWNrdHJhY2tpbmcgZG9lc24ndCBnbyB0b28gZmFyLiAqLworCisgICAgICAgIGZvcig7OykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKGVwdHIgPD0gcHApIGdvdG8gVEFJTF9SRUNVUlNFOworICAgICAgICAgIFJNQVRDSChlcHRyLCBlY29kZSwgb2Zmc2V0X3RvcCwgbWIsIGVwdHJiLCBSTTQ0KTsKKyAgICAgICAgICBpZiAocnJjICE9IE1BVENIX05PTUFUQ0gpIFJSRVRVUk4ocnJjKTsKKyAgICAgICAgICBlcHRyLS07CisgICAgICAgICAgaWYgKHV0ZikgQkFDS0NIQVIoZXB0cik7CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIE1hdGNoIGV4dGVuZGVkIFVuaWNvZGUgZ3JhcGhlbWUgY2x1c3RlcnMuIFdlIHdpbGwgZ2V0IGhlcmUgb25seSBpZiB0aGUKKyAgICAgIHN1cHBvcnQgaXMgaW4gdGhlIGJpbmFyeTsgb3RoZXJ3aXNlIGEgY29tcGlsZS10aW1lIGVycm9yIG9jY3Vycy4gKi8KKworICAgICAgZWxzZSBpZiAoY3R5cGUgPT0gT1BfRVhUVU5JKQorICAgICAgICB7CisgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGxnYiwgcmdiOworICAgICAgICAgICAgR0VUQ0hBUklOQ1RFU1QoYywgZXB0cik7CisgICAgICAgICAgICBsZ2IgPSBVQ0RfR1JBUEhCUkVBSyhjKTsKKyAgICAgICAgICAgIHdoaWxlIChlcHRyIDwgbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgICAgICBpZiAoIXV0ZikgYyA9ICplcHRyOyBlbHNlIHsgR0VUQ0hBUkxFTihjLCBlcHRyLCBsZW4pOyB9CisgICAgICAgICAgICAgIHJnYiA9IFVDRF9HUkFQSEJSRUFLKGMpOworICAgICAgICAgICAgICBpZiAoKFBSSVYodWNwX2didGFibGUpW2xnYl0gJiAoMSA8PCByZ2IpKSA9PSAwKSBicmVhazsKKyAgICAgICAgICAgICAgbGdiID0gcmdiOworICAgICAgICAgICAgICBlcHRyICs9IGxlbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIENIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogZXB0ciBpcyBub3cgcGFzdCB0aGUgZW5kIG9mIHRoZSBtYXhpbXVtIHJ1biAqLworCisgICAgICAgIGlmIChwb3NzZXNzaXZlKSBjb250aW51ZTsgICAgLyogTm8gYmFja3RyYWNraW5nICovCisKKyAgICAgICAgLyogV2UgdXNlIDw9IHBwIHJhdGhlciB0aGFuID09IHBwIHRvIGRldGVjdCB0aGUgc3RhcnQgb2YgdGhlIHJ1biB3aGlsZQorICAgICAgICBiYWNrdHJhY2tpbmcgYmVjYXVzZSB0aGUgdXNlIG9mIFxDIGluIFVURiBtb2RlIGNhbiBjYXVzZSBCQUNLQ0hBUiB0bworICAgICAgICBtb3ZlIGJhY2sgcGFzdCBwcC4gVGhpcyBpcyBqdXN0IHBhbGxpYXRpdmU7IHRoZSB1c2Ugb2YgXEMgaW4gVVRGIG1vZGUKKyAgICAgICAgaXMgZnJhdWdodCB3aXRoIGRhbmdlci4gKi8KKworICAgICAgICBmb3IoOzspCisgICAgICAgICAgeworICAgICAgICAgIGludCBsZ2IsIHJnYjsKKyAgICAgICAgICBQQ1JFMl9TUFRSIGZwdHI7CisKKyAgICAgICAgICBpZiAoZXB0ciA8PSBwcCkgZ290byBUQUlMX1JFQ1VSU0U7ICAgLyogQXQgc3RhcnQgb2YgY2hhciBydW4gKi8KKyAgICAgICAgICBSTUFUQ0goZXB0ciwgZWNvZGUsIG9mZnNldF90b3AsIG1iLCBlcHRyYiwgUk00NSk7CisgICAgICAgICAgaWYgKHJyYyAhPSBNQVRDSF9OT01BVENIKSBSUkVUVVJOKHJyYyk7CisKKyAgICAgICAgICAvKiBCYWNrdHJhY2tpbmcgb3ZlciBhbiBleHRlbmRlZCBncmFwaGVtZSBjbHVzdGVyIGludm9sdmVzIGluc3BlY3RpbmcKKyAgICAgICAgICB0aGUgcHJldmlvdXMgdHdvIGNoYXJhY3RlcnMgKGlmIHByZXNlbnQpIHRvIHNlZSBpZiBhIGJyZWFrIGlzCisgICAgICAgICAgcGVybWl0dGVkIGJldHdlZW4gdGhlbS4gKi8KKworICAgICAgICAgIGVwdHItLTsKKyAgICAgICAgICBpZiAoIXV0ZikgYyA9ICplcHRyOyBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICBCQUNLQ0hBUihlcHRyKTsKKyAgICAgICAgICAgIEdFVENIQVIoYywgZXB0cik7CisgICAgICAgICAgICB9CisgICAgICAgICAgcmdiID0gVUNEX0dSQVBIQlJFQUsoYyk7CisKKyAgICAgICAgICBmb3IgKDs7KQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGVwdHIgPD0gcHApIGdvdG8gVEFJTF9SRUNVUlNFOyAgIC8qIEF0IHN0YXJ0IG9mIGNoYXIgcnVuICovCisgICAgICAgICAgICBmcHRyID0gZXB0ciAtIDE7CisgICAgICAgICAgICBpZiAoIXV0ZikgYyA9ICpmcHRyOyBlbHNlCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgQkFDS0NIQVIoZnB0cik7CisgICAgICAgICAgICAgIEdFVENIQVIoYywgZnB0cik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxnYiA9IFVDRF9HUkFQSEJSRUFLKGMpOworICAgICAgICAgICAgaWYgKChQUklWKHVjcF9nYnRhYmxlKVtsZ2JdICYgKDEgPDwgcmdiKSkgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBlcHRyID0gZnB0cjsKKyAgICAgICAgICAgIHJnYiA9IGxnYjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgZWxzZQorI2VuZGlmICAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgIGlmICh1dGYpCisgICAgICAgIHsKKyAgICAgICAgc3dpdGNoKGN0eXBlKQorICAgICAgICAgIHsKKyAgICAgICAgICBjYXNlIE9QX0FOWToKKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKElTX05FV0xJTkUoZXB0cikpIGJyZWFrOworICAgICAgICAgICAgaWYgKG1iLT5wYXJ0aWFsICE9IDAgJiYgICAgLyogVGFrZSBjYXJlIHdpdGggQ1JMRiBwYXJ0aWFsICovCisgICAgICAgICAgICAgICAgZXB0ciArIDEgPj0gbWItPmVuZF9zdWJqZWN0ICYmCisgICAgICAgICAgICAgICAgTkxCTE9DSy0+bmx0eXBlID09IE5MVFlQRV9GSVhFRCAmJgorICAgICAgICAgICAgICAgIE5MQkxPQ0stPm5sbGVuID09IDIgJiYKKyAgICAgICAgICAgICAgICBVQ0hBUjIxKGVwdHIpID09IE5MQkxPQ0stPm5sWzBdKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIG1iLT5oaXRlbmQgPSBUUlVFOworICAgICAgICAgICAgICBpZiAobWItPnBhcnRpYWwgPiAxKSBSUkVUVVJOKFBDUkUyX0VSUk9SX1BBUlRJQUwpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgICBBQ1JPU1NDSEFSKGVwdHIgPCBtYi0+ZW5kX3N1YmplY3QsICplcHRyLCBlcHRyKyspOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBPUF9BTExBTlk6CisgICAgICAgICAgaWYgKG1heCA8IElOVF9NQVgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgICAgIEFDUk9TU0NIQVIoZXB0ciA8IG1iLT5lbmRfc3ViamVjdCwgKmVwdHIsIGVwdHIrKyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICBlcHRyID0gbWItPmVuZF9zdWJqZWN0OyAgIC8qIFVubGltaXRlZCBVVEYtOCByZXBlYXQgKi8KKyAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAvKiBUaGUgYnl0ZSBjYXNlIGlzIHRoZSBzYW1lIGFzIG5vbi1VVEY4ICovCisKKyAgICAgICAgICBjYXNlIE9QX0FOWUJZVEU6CisgICAgICAgICAgYyA9IG1heCAtIG1pbjsKKyAgICAgICAgICBpZiAoYyA+ICh1aW50MzJfdCkobWItPmVuZF9zdWJqZWN0IC0gZXB0cikpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBlcHRyID0gbWItPmVuZF9zdWJqZWN0OworICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGVwdHIgKz0gYzsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgT1BfQU5ZTkw6CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVuID0gMTsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUkxFTihjLCBlcHRyLCBsZW4pOworICAgICAgICAgICAgaWYgKGMgPT0gQ0hBUl9DUikKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoKytlcHRyID49IG1iLT5lbmRfc3ViamVjdCkgYnJlYWs7CisgICAgICAgICAgICAgIGlmIChVQ0hBUjIxKGVwdHIpID09IENIQVJfTEYpIGVwdHIrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChjICE9IENIQVJfTEYgJiYKKyAgICAgICAgICAgICAgICAgIChtYi0+YnNyX2NvbnZlbnRpb24gPT0gUENSRTJfQlNSX0FOWUNSTEYgfHwKKyAgICAgICAgICAgICAgICAgICAoYyAhPSBDSEFSX1ZUICYmIGMgIT0gQ0hBUl9GRiAmJiBjICE9IENIQVJfTkVMCisjaWZuZGVmIEVCQ0RJQworICAgICAgICAgICAgICAgICAgICAmJiBjICE9IDB4MjAyOCAmJiBjICE9IDB4MjAyOQorI2VuZGlmICAvKiBOb3QgRUJDRElDICovCisgICAgICAgICAgICAgICAgICAgICkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBlcHRyICs9IGxlbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBPUF9OT1RfSFNQQUNFOgorICAgICAgICAgIGNhc2UgT1BfSFNQQUNFOgorICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgQk9PTCBnb3RzcGFjZTsKKyAgICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbik7CisgICAgICAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBIU1BBQ0VfQ0FTRVM6IGdvdHNwYWNlID0gVFJVRTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IGdvdHNwYWNlID0gRkFMU0U7IGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZ290c3BhY2UgPT0gKGN0eXBlID09IE9QX05PVF9IU1BBQ0UpKSBicmVhazsKKyAgICAgICAgICAgIGVwdHIgKz0gbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBPUF9OT1RfVlNQQUNFOgorICAgICAgICAgIGNhc2UgT1BfVlNQQUNFOgorICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgQk9PTCBnb3RzcGFjZTsKKyAgICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbik7CisgICAgICAgICAgICBzd2l0Y2goYykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBWU1BBQ0VfQ0FTRVM6IGdvdHNwYWNlID0gVFJVRTsgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IGdvdHNwYWNlID0gRkFMU0U7IGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZ290c3BhY2UgPT0gKGN0eXBlID09IE9QX05PVF9WU1BBQ0UpKSBicmVhazsKKyAgICAgICAgICAgIGVwdHIgKz0gbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBPUF9OT1RfRElHSVQ6CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVuID0gMTsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUkxFTihjLCBlcHRyLCBsZW4pOworICAgICAgICAgICAgaWYgKGMgPCAyNTYgJiYgKG1iLT5jdHlwZXNbY10gJiBjdHlwZV9kaWdpdCkgIT0gMCkgYnJlYWs7CisgICAgICAgICAgICBlcHRyKz0gbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBPUF9ESUdJVDoKKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbik7CisgICAgICAgICAgICBpZiAoYyA+PSAyNTYgfHwobWItPmN0eXBlc1tjXSAmIGN0eXBlX2RpZ2l0KSA9PSAwKSBicmVhazsKKyAgICAgICAgICAgIGVwdHIrPSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIE9QX05PVF9XSElURVNQQUNFOgorICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaW50IGxlbiA9IDE7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVENIQVJMRU4oYywgZXB0ciwgbGVuKTsKKyAgICAgICAgICAgIGlmIChjIDwgMjU2ICYmIChtYi0+Y3R5cGVzW2NdICYgY3R5cGVfc3BhY2UpICE9IDApIGJyZWFrOworICAgICAgICAgICAgZXB0cis9IGxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgT1BfV0hJVEVTUEFDRToKKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbik7CisgICAgICAgICAgICBpZiAoYyA+PSAyNTYgfHwobWItPmN0eXBlc1tjXSAmIGN0eXBlX3NwYWNlKSA9PSAwKSBicmVhazsKKyAgICAgICAgICAgIGVwdHIrPSBsZW47CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIE9QX05PVF9XT1JEQ0hBUjoKKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsZW4gPSAxOworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVRDSEFSTEVOKGMsIGVwdHIsIGxlbik7CisgICAgICAgICAgICBpZiAoYyA8IDI1NiAmJiAobWItPmN0eXBlc1tjXSAmIGN0eXBlX3dvcmQpICE9IDApIGJyZWFrOworICAgICAgICAgICAgZXB0cis9IGxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgT1BfV09SRENIQVI6CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgbGVuID0gMTsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUQ0hBUkxFTihjLCBlcHRyLCBsZW4pOworICAgICAgICAgICAgaWYgKGMgPj0gMjU2IHx8IChtYi0+Y3R5cGVzW2NdICYgY3R5cGVfd29yZCkgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBlcHRyKz0gbGVuOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICBSUkVUVVJOKFBDUkUyX0VSUk9SX0lOVEVSTkFMKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgaWYgKHBvc3Nlc3NpdmUpIGNvbnRpbnVlOyAgICAvKiBObyBiYWNrdHJhY2tpbmcgKi8KKworICAgICAgICAvKiBBZnRlciBcQyBpbiBVVEYgbW9kZSwgcHAgbWlnaHQgYmUgaW4gdGhlIG1pZGRsZSBvZiBhIFVuaWNvZGUKKyAgICAgICAgY2hhcmFjdGVyLiBVc2UgPD0gcHAgdG8gZW5zdXJlIGJhY2t0cmFja2luZyBkb2Vzbid0IGdvIHRvbyBmYXIuICovCisKKyAgICAgICAgZm9yKDs7KQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA8PSBwcCkgZ290byBUQUlMX1JFQ1VSU0U7CisgICAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNNDYpOworICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgIGVwdHItLTsKKyAgICAgICAgICBCQUNLQ0hBUihlcHRyKTsKKyAgICAgICAgICBpZiAoY3R5cGUgPT0gT1BfQU5ZTkwgJiYgZXB0ciA+IHBwICAmJiBVQ0hBUjIxKGVwdHIpID09IENIQVJfTkwgJiYKKyAgICAgICAgICAgICAgVUNIQVIyMShlcHRyIC0gMSkgPT0gQ0hBUl9DUikgZXB0ci0tOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorI2VuZGlmICAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKyAgICAgIC8qIE5vdCBVVEYgbW9kZSAqLworICAgICAgICB7CisgICAgICAgIHN3aXRjaChjdHlwZSkKKyAgICAgICAgICB7CisgICAgICAgICAgY2FzZSBPUF9BTlk6CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChJU19ORVdMSU5FKGVwdHIpKSBicmVhazsKKyAgICAgICAgICAgIGlmIChtYi0+cGFydGlhbCAhPSAwICYmICAgIC8qIFRha2UgY2FyZSB3aXRoIENSTEYgcGFydGlhbCAqLworICAgICAgICAgICAgICAgIGVwdHIgKyAxID49IG1iLT5lbmRfc3ViamVjdCAmJgorICAgICAgICAgICAgICAgIE5MQkxPQ0stPm5sdHlwZSA9PSBOTFRZUEVfRklYRUQgJiYKKyAgICAgICAgICAgICAgICBOTEJMT0NLLT5ubGxlbiA9PSAyICYmCisgICAgICAgICAgICAgICAgKmVwdHIgPT0gTkxCTE9DSy0+bmxbMF0pCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWItPmhpdGVuZCA9IFRSVUU7CisgICAgICAgICAgICAgIGlmIChtYi0+cGFydGlhbCA+IDEpIFJSRVRVUk4oUENSRTJfRVJST1JfUEFSVElBTCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVwdHIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgT1BfQUxMQU5ZOgorICAgICAgICAgIGNhc2UgT1BfQU5ZQllURToKKyAgICAgICAgICBjID0gbWF4IC0gbWluOworICAgICAgICAgIGlmIChjID4gKHVpbnQzMl90KShtYi0+ZW5kX3N1YmplY3QgLSBlcHRyKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGVwdHIgPSBtYi0+ZW5kX3N1YmplY3Q7CisgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgZXB0ciArPSBjOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBPUF9BTllOTDoKKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYyA9ICplcHRyOworICAgICAgICAgICAgaWYgKGMgPT0gQ0hBUl9DUikKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoKytlcHRyID49IG1iLT5lbmRfc3ViamVjdCkgYnJlYWs7CisgICAgICAgICAgICAgIGlmICgqZXB0ciA9PSBDSEFSX0xGKSBlcHRyKys7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoYyAhPSBDSEFSX0xGICYmIChtYi0+YnNyX2NvbnZlbnRpb24gPT0gUENSRTJfQlNSX0FOWUNSTEYgfHwKKyAgICAgICAgICAgICAgICAgKGMgIT0gQ0hBUl9WVCAmJiBjICE9IENIQVJfRkYgJiYgYyAhPSBDSEFSX05FTAorI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgICAgICAgICAgICAgICYmIGMgIT0gMHgyMDI4ICYmIGMgIT0gMHgyMDI5CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgKSkpIGJyZWFrOworICAgICAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgT1BfTk9UX0hTUEFDRToKKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoKCplcHRyKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IGVwdHIrKzsgYnJlYWs7CisgICAgICAgICAgICAgIEhTUEFDRV9CWVRFX0NBU0VTOgorI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgICAgICAgICAgIEhTUEFDRV9NVUxUSUJZVEVfQ0FTRVM6CisjZW5kaWYKKyAgICAgICAgICAgICAgZ290byBFTkRMT09QMDA7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBFTkRMT09QMDA6CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIE9QX0hTUEFDRToKKyAgICAgICAgICBmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChlcHRyID49IG1iLT5lbmRfc3ViamVjdCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBTQ0hFQ0tfUEFSVElBTCgpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoKCplcHRyKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGRlZmF1bHQ6IGdvdG8gRU5ETE9PUDAxOworICAgICAgICAgICAgICBIU1BBQ0VfQllURV9DQVNFUzoKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgICAgICAgICAgICBIU1BBQ0VfTVVMVElCWVRFX0NBU0VTOgorI2VuZGlmCisgICAgICAgICAgICAgIGVwdHIrKzsgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBFTkRMT09QMDE6CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIE9QX05PVF9WU1BBQ0U6CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCgqZXB0cikKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBkZWZhdWx0OiBlcHRyKys7IGJyZWFrOworICAgICAgICAgICAgICBWU1BBQ0VfQllURV9DQVNFUzoKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgICAgICAgICAgICBWU1BBQ0VfTVVMVElCWVRFX0NBU0VTOgorI2VuZGlmCisgICAgICAgICAgICAgIGdvdG8gRU5ETE9PUDAyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgRU5ETE9PUDAyOgorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBPUF9WU1BBQ0U6CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN3aXRjaCgqZXB0cikKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBkZWZhdWx0OiBnb3RvIEVORExPT1AwMzsKKyAgICAgICAgICAgICAgVlNQQUNFX0JZVEVfQ0FTRVM6CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICAgICAgICAgICAgVlNQQUNFX01VTFRJQllURV9DQVNFUzoKKyNlbmRpZgorICAgICAgICAgICAgICBlcHRyKys7IGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgRU5ETE9PUDAzOgorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBPUF9OT1RfRElHSVQ6CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChNQVhfMjU1KCplcHRyKSAmJiAobWItPmN0eXBlc1sqZXB0cl0gJiBjdHlwZV9kaWdpdCkgIT0gMCkgYnJlYWs7CisgICAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIE9QX0RJR0lUOgorICAgICAgICAgIGZvciAoaSA9IG1pbjsgaSA8IG1heDsgaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKGVwdHIgPj0gbWItPmVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIFNDSEVDS19QQVJUSUFMKCk7CisgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIU1BWF8yNTUoKmVwdHIpIHx8IChtYi0+Y3R5cGVzWyplcHRyXSAmIGN0eXBlX2RpZ2l0KSA9PSAwKSBicmVhazsKKyAgICAgICAgICAgIGVwdHIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChNQVhfMjU1KCplcHRyKSAmJiAobWItPmN0eXBlc1sqZXB0cl0gJiBjdHlwZV9zcGFjZSkgIT0gMCkgYnJlYWs7CisgICAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlIE9QX1dISVRFU1BBQ0U6CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghTUFYXzI1NSgqZXB0cikgfHwgKG1iLT5jdHlwZXNbKmVwdHJdICYgY3R5cGVfc3BhY2UpID09IDApIGJyZWFrOworICAgICAgICAgICAgZXB0cisrOworICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgY2FzZSBPUF9OT1RfV09SRENIQVI6CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChNQVhfMjU1KCplcHRyKSAmJiAobWItPmN0eXBlc1sqZXB0cl0gJiBjdHlwZV93b3JkKSAhPSAwKSBicmVhazsKKyAgICAgICAgICAgIGVwdHIrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBicmVhazsKKworICAgICAgICAgIGNhc2UgT1BfV09SRENIQVI6CisgICAgICAgICAgZm9yIChpID0gbWluOyBpIDwgbWF4OyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXB0ciA+PSBtYi0+ZW5kX3N1YmplY3QpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgU0NIRUNLX1BBUlRJQUwoKTsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghTUFYXzI1NSgqZXB0cikgfHwgKG1iLT5jdHlwZXNbKmVwdHJdICYgY3R5cGVfd29yZCkgPT0gMCkgYnJlYWs7CisgICAgICAgICAgICBlcHRyKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIFJSRVRVUk4oUENSRTJfRVJST1JfSU5URVJOQUwpOworICAgICAgICAgIH0KKworICAgICAgICBpZiAocG9zc2Vzc2l2ZSkgY29udGludWU7ICAgIC8qIE5vIGJhY2t0cmFja2luZyAqLworICAgICAgICBmb3IgKDs7KQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoZXB0ciA9PSBwcCkgZ290byBUQUlMX1JFQ1VSU0U7CisgICAgICAgICAgUk1BVENIKGVwdHIsIGVjb2RlLCBvZmZzZXRfdG9wLCBtYiwgZXB0cmIsIFJNNDcpOworICAgICAgICAgIGlmIChycmMgIT0gTUFUQ0hfTk9NQVRDSCkgUlJFVFVSTihycmMpOworICAgICAgICAgIGVwdHItLTsKKyAgICAgICAgICBpZiAoY3R5cGUgPT0gT1BfQU5ZTkwgJiYgZXB0ciA+IHBwICAmJiAqZXB0ciA9PSBDSEFSX0xGICYmCisgICAgICAgICAgICAgIGVwdHJbLTFdID09IENIQVJfQ1IpIGVwdHItLTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgLyogQ29udHJvbCBuZXZlciBnZXRzIGhlcmUgKi8KKyAgICAgIH0KKworICAgIC8qIFRoZXJlJ3MgYmVlbiBzb21lIGhvcnJpYmxlIGRpc2FzdGVyLiBBcnJpdmFsIGhlcmUgY2FuIG9ubHkgbWVhbiB0aGVyZSBpcworICAgIHNvbWV0aGluZyBzZXJpb3VzbHkgd3JvbmcgaW4gdGhlIGNvZGUgYWJvdmUgb3IgdGhlIE9QX3h4eCBkZWZpbml0aW9ucy4gKi8KKworICAgIGRlZmF1bHQ6CisgICAgUlJFVFVSTihQQ1JFMl9FUlJPUl9JTlRFUk5BTCk7CisgICAgfQorCisgIC8qIERvIG5vdCBzdGljayBhbnkgY29kZSBpbiBoZXJlIHdpdGhvdXQgbXVjaCB0aG91Z2h0OyBpdCBpcyBhc3N1bWVkCisgIHRoYXQgImNvbnRpbnVlIiBpbiB0aGUgY29kZSBhYm92ZSBjb21lcyBvdXQgdG8gaGVyZSB0byByZXBlYXQgdGhlIG1haW4KKyAgbG9vcC4gKi8KKworICB9ICAgICAgICAgICAgIC8qIEVuZCBvZiBtYWluIGxvb3AgKi8KKy8qIENvbnRyb2wgbmV2ZXIgcmVhY2hlcyBoZXJlICovCisKKworLyogV2hlbiBjb21waWxpbmcgdG8gdXNlIHRoZSBoZWFwIHJhdGhlciB0aGFuIHRoZSBzdGFjayBmb3IgcmVjdXJzaXZlIGNhbGxzIHRvCittYXRjaCgpLCB0aGUgUlJFVFVSTigpIG1hY3JvIGp1bXBzIGhlcmUuIFRoZSBudW1iZXIgdGhhdCBpcyBzYXZlZCBpbgorZnJhbWUtPlh3aGVyZSBpbmRpY2F0ZXMgd2hpY2ggbGFiZWwgd2UgYWN0dWFsbHkgd2FudCB0byByZXR1cm4gdG8uICovCisKKyNpZmRlZiBIRUFQX01BVENIX1JFQ1VSU0UKKyNkZWZpbmUgTEJMKHZhbCkgY2FzZSB2YWw6IGdvdG8gTF9STSMjdmFsOworSEVBUF9SRVRVUk46Citzd2l0Y2ggKGZyYW1lLT5Yd2hlcmUpCisgIHsKKyAgTEJMKCAxKSBMQkwoIDIpIExCTCggMykgTEJMKCA0KSBMQkwoIDUpIExCTCggNikgTEJMKCA3KSBMQkwoIDgpCisgIExCTCggOSkgTEJMKDEwKSBMQkwoMTEpIExCTCgxMikgTEJMKDEzKSBMQkwoMTQpIExCTCgxNSkgTEJMKDE3KQorICBMQkwoMTkpIExCTCgyNCkgTEJMKDI1KSBMQkwoMjYpIExCTCgyNykgTEJMKDI5KSBMQkwoMzEpIExCTCgzMykKKyAgTEJMKDM1KSBMQkwoNDMpIExCTCg0NykgTEJMKDQ4KSBMQkwoNDkpIExCTCg1MCkgTEJMKDUxKSBMQkwoNTIpCisgIExCTCg1MykgTEJMKDU0KSBMQkwoNTUpIExCTCg1NikgTEJMKDU3KSBMQkwoNTgpIExCTCg2MykgTEJMKDY0KQorICBMQkwoNjUpIExCTCg2NikgTEJMKDY4KQorI2lmZGVmIFNVUFBPUlRfV0lERV9DSEFSUworICBMQkwoMjApIExCTCgyMSkKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICBMQkwoMTYpIExCTCgxOCkKKyAgTEJMKDIyKSBMQkwoMjMpIExCTCgyOCkgTEJMKDMwKQorICBMQkwoMzIpIExCTCgzNCkgTEJMKDQyKSBMQkwoNDYpCisgIExCTCgzNikgTEJMKDM3KSBMQkwoMzgpIExCTCgzOSkgTEJMKDQwKSBMQkwoNDEpIExCTCg0NCkgTEJMKDQ1KQorICBMQkwoNTkpIExCTCg2MCkgTEJMKDYxKSBMQkwoNjIpIExCTCg2NykKKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisgIGRlZmF1bHQ6CisgIHJldHVybiBQQ1JFMl9FUlJPUl9JTlRFUk5BTDsKKyAgfQorI3VuZGVmIExCTAorI2VuZGlmICAvKiBIRUFQX01BVENIX1JFQ1VSU0UgKi8KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgUkVDVVJTSU9OIElOIFRIRSBtYXRjaCgpIEZVTkNUSU9OCisKK1VuZGVmaW5lIGFsbCB0aGUgbWFjcm9zIHRoYXQgd2VyZSBkZWZpbmVkIGFib3ZlIHRvIGhhbmRsZSB0aGlzLiAqLworCisjaWZkZWYgSEVBUF9NQVRDSF9SRUNVUlNFCisjdW5kZWYgZXB0cgorI3VuZGVmIGVjb2RlCisjdW5kZWYgbXN0YXJ0CisjdW5kZWYgb2Zmc2V0X3RvcAorI3VuZGVmIGVwdHJiCisjdW5kZWYgZmxhZ3MKKworI3VuZGVmIGNhbGxwYXQKKyN1bmRlZiBjaGFycHRyCisjdW5kZWYgZGF0YQorI3VuZGVmIG5leHRfZWNvZGUKKyN1bmRlZiBwcAorI3VuZGVmIHByZXYKKyN1bmRlZiBzYXZlZF9lcHRyCisKKyN1bmRlZiBuZXdfcmVjdXJzaXZlCisKKyN1bmRlZiBjdXJfaXNfd29yZAorI3VuZGVmIGNvbmRpdGlvbgorI3VuZGVmIHByZXZfaXNfd29yZAorCisjdW5kZWYgY3R5cGUKKyN1bmRlZiBsZW5ndGgKKyN1bmRlZiBtYXgKKyN1bmRlZiBtaW4KKyN1bmRlZiBudW1iZXIKKyN1bmRlZiBvZmZzZXQKKyN1bmRlZiBvcAorI3VuZGVmIHNhdmVfY2FwdHVyZV9sYXN0CisjdW5kZWYgc2F2ZV9vZmZzZXQxCisjdW5kZWYgc2F2ZV9vZmZzZXQyCisjdW5kZWYgc2F2ZV9vZmZzZXQzCisKKyN1bmRlZiBuZXdwdHJiCisjZW5kaWYgIC8qIEhFQVBfTUFUQ0hfUkVDVVJTRSAqLworCisvKiBUaGVzZSB0d28gYXJlIGRlZmluZWQgYXMgbWFjcm9zIGluIGJvdGggY2FzZXMgKi8KKworI3VuZGVmIGZjCisjdW5kZWYgZmkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZmRlZiBIRUFQX01BVENIX1JFQ1VSU0UKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgIFJlbGVhc2UgYWxsb2NhdGVkIGhlYXAgZnJhbWVzICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiByZWxlYXNlcyBhbGwgdGhlIGFsbG9jYXRlZCBmcmFtZXMuIFRoZSBiYXNlIGZyYW1lIGlzIG9uIHRoZQorbWFjaGluZSBzdGFjaywgYW5kIHNvIG11c3Qgbm90IGJlIGZyZWVkLgorCitBcmd1bWVudDoKKyAgZnJhbWVfYmFzZSAgICB0aGUgYWRkcmVzcyBvZiB0aGUgYmFzZSBmcmFtZQorICBtYiAgICAgICAgICAgIHRoZSBtYXRjaCBibG9jaworCitSZXR1cm5zOiAgbm90aGluZworKi8KKworc3RhdGljIHZvaWQKK3JlbGVhc2VfbWF0Y2hfaGVhcGZyYW1lcyAoaGVhcGZyYW1lICpmcmFtZV9iYXNlLCBtYXRjaF9ibG9jayAqbWIpCit7CitoZWFwZnJhbWUgKm5leHRmcmFtZSA9IGZyYW1lX2Jhc2UtPlhuZXh0ZnJhbWU7Cit3aGlsZSAobmV4dGZyYW1lICE9IE5VTEwpCisgIHsKKyAgaGVhcGZyYW1lICpvbGRmcmFtZSA9IG5leHRmcmFtZTsKKyAgbmV4dGZyYW1lID0gbmV4dGZyYW1lLT5YbmV4dGZyYW1lOworICBtYi0+c3RhY2tfbWVtY3RsLmZyZWUob2xkZnJhbWUsIG1iLT5zdGFja19tZW1jdGwubWVtb3J5X2RhdGEpOworICB9Cit9CisjZW5kaWYgIC8qIEhFQVBfTUFUQ0hfUkVDVVJTRSAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgIE1hdGNoIGEgUmVndWxhciBFeHByZXNzaW9uICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGFwcGxpZXMgYSBjb21waWxlZCBwYXR0ZXJuIHRvIGEgc3ViamVjdCBzdHJpbmcgYW5kIHBpY2tzIG91dAorcG9ydGlvbnMgb2YgdGhlIHN0cmluZyBpZiBpdCBtYXRjaGVzLiBUd28gZWxlbWVudHMgaW4gdGhlIHZlY3RvciBhcmUgc2V0IGZvcgorZWFjaCBzdWJzdHJpbmc6IHRoZSBvZmZzZXRzIHRvIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBzdWJzdHJpbmcuCisKK0FyZ3VtZW50czoKKyAgY29kZSAgICAgICAgICAgIHBvaW50cyB0byB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbgorICBzdWJqZWN0ICAgICAgICAgcG9pbnRzIHRvIHRoZSBzdWJqZWN0IHN0cmluZworICBsZW5ndGggICAgICAgICAgbGVuZ3RoIG9mIHN1YmplY3Qgc3RyaW5nIChtYXkgY29udGFpbiBiaW5hcnkgemVyb3MpCisgIHN0YXJ0X29mZnNldCAgICB3aGVyZSB0byBzdGFydCBpbiB0aGUgc3ViamVjdCBzdHJpbmcKKyAgb3B0aW9ucyAgICAgICAgIG9wdGlvbiBiaXRzCisgIG1hdGNoX2RhdGEgICAgICBwb2ludHMgdG8gYSBtYXRjaF9kYXRhIGJsb2NrCisgIG1jb250ZXh0ICAgICAgICBwb2ludHMgYSBQQ1JFMiBjb250ZXh0CisKK1JldHVybnM6ICAgICAgICAgID4gMCA9PiBzdWNjZXNzOyB2YWx1ZSBpcyB0aGUgbnVtYmVyIG9mIG92ZWN0b3IgcGFpcnMgZmlsbGVkCisgICAgICAgICAgICAgICAgICA9IDAgPT4gc3VjY2VzcywgYnV0IG92ZWN0b3IgaXMgbm90IGJpZyBlbm91Z2gKKyAgICAgICAgICAgICAgICAgICAtMSA9PiBmYWlsZWQgdG8gbWF0Y2ggKFBDUkUyX0VSUk9SX05PTUFUQ0gpCisgICAgICAgICAgICAgICAgICAgLTIgPT4gcGFydGlhbCBtYXRjaCAoUENSRTJfRVJST1JfUEFSVElBTCkKKyAgICAgICAgICAgICAgICAgPCAtMiA9PiBzb21lIGtpbmQgb2YgdW5leHBlY3RlZCBwcm9ibGVtCisqLworCitQQ1JFMl9FWFBfREVGTiBpbnQgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9tYXRjaChjb25zdCBwY3JlMl9jb2RlICpjb2RlLCBQQ1JFMl9TUFRSIHN1YmplY3QsIFBDUkUyX1NJWkUgbGVuZ3RoLAorICBQQ1JFMl9TSVpFIHN0YXJ0X29mZnNldCwgdWludDMyX3Qgb3B0aW9ucywgcGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgcGNyZTJfbWF0Y2hfY29udGV4dCAqbWNvbnRleHQpCit7CitpbnQgcmM7CitpbnQgb2NvdW50OworCitjb25zdCB1aW50OF90ICpzdGFydF9iaXRzID0gTlVMTDsKKworY29uc3QgcGNyZTJfcmVhbF9jb2RlICpyZSA9IChjb25zdCBwY3JlMl9yZWFsX2NvZGUgKiljb2RlOworCitCT09MIGFuY2hvcmVkOworQk9PTCBmaXJzdGxpbmU7CitCT09MIGhhc19maXJzdF9jdSA9IEZBTFNFOworQk9PTCBoYXNfcmVxX2N1ID0gRkFMU0U7CitCT09MIHN0YXJ0bGluZTsKK0JPT0wgdXNpbmdfdGVtcG9yYXJ5X29mZnNldHMgPSBGQUxTRTsKK0JPT0wgdXRmOworCitQQ1JFMl9VQ0hBUiBmaXJzdF9jdSA9IDA7CitQQ1JFMl9VQ0hBUiBmaXJzdF9jdTIgPSAwOworUENSRTJfVUNIQVIgcmVxX2N1ID0gMDsKK1BDUkUyX1VDSEFSIHJlcV9jdTIgPSAwOworCitQQ1JFMl9TUFRSIGJ1bXBhbG9uZ19saW1pdDsKK1BDUkUyX1NQVFIgZW5kX3N1YmplY3Q7CitQQ1JFMl9TUFRSIHN0YXJ0X21hdGNoID0gc3ViamVjdCArIHN0YXJ0X29mZnNldDsKK1BDUkUyX1NQVFIgcmVxX2N1X3B0ciA9IHN0YXJ0X21hdGNoIC0gMTsKK1BDUkUyX1NQVFIgc3RhcnRfcGFydGlhbCA9IE5VTEw7CitQQ1JFMl9TUFRSIG1hdGNoX3BhcnRpYWwgPSBOVUxMOworCisvKiBXZSBuZWVkIHRvIGhhdmUgbWIgcG9pbnRpbmcgdG8gYSBtYXRjaCBibG9jaywgYmVjYXVzZSB0aGUgSVNfTkVXTElORSBtYWNybworaXMgdXNlZCBiZWxvdywgYW5kIGl0IGV4cGVjdHMgTkxCTE9DSyB0byBiZSBkZWZpbmVkIGFzIGEgcG9pbnRlci4gKi8KKworbWF0Y2hfYmxvY2sgYWN0dWFsX21hdGNoX2Jsb2NrOworbWF0Y2hfYmxvY2sgKm1iID0gJmFjdHVhbF9tYXRjaF9ibG9jazsKKworI2lmZGVmIEhFQVBfTUFUQ0hfUkVDVVJTRQoraGVhcGZyYW1lIGZyYW1lX3plcm87CitmcmFtZV96ZXJvLlhwcmV2ZnJhbWUgPSBOVUxMOyAgICAgICAgICAgIC8qIE1hcmtzIHRoZSB0b3AgbGV2ZWwgKi8KK2ZyYW1lX3plcm8uWG5leHRmcmFtZSA9IE5VTEw7ICAgICAgICAgICAgLyogTm9uZSBhcmUgYWxsb2NhdGVkIHlldCAqLworbWItPm1hdGNoX2ZyYW1lc19iYXNlID0gJmZyYW1lX3plcm87CisjZW5kaWYKKworLyogQSBsZW5ndGggZXF1YWwgdG8gUENSRTJfWkVST19URVJNSU5BVEVEIGltcGxpZXMgYSB6ZXJvLXRlcm1pbmF0ZWQKK3N1YmplY3Qgc3RyaW5nLiAqLworCitpZiAobGVuZ3RoID09IFBDUkUyX1pFUk9fVEVSTUlOQVRFRCkgbGVuZ3RoID0gUFJJVihzdHJsZW4pKHN1YmplY3QpOworZW5kX3N1YmplY3QgPSBzdWJqZWN0ICsgbGVuZ3RoOworCisvKiBQbGF1c2liaWxpdHkgY2hlY2tzICovCisKK2lmICgob3B0aW9ucyAmIH5QVUJMSUNfTUFUQ0hfT1BUSU9OUykgIT0gMCkgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE9QVElPTjsKK2lmIChjb2RlID09IE5VTEwgfHwgc3ViamVjdCA9PSBOVUxMIHx8IG1hdGNoX2RhdGEgPT0gTlVMTCkKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX05VTEw7CitpZiAoc3RhcnRfb2Zmc2V0ID4gbGVuZ3RoKSByZXR1cm4gUENSRTJfRVJST1JfQkFET0ZGU0VUOworCisvKiBDaGVjayB0aGF0IHRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgYmxvY2sgaXMgdGhlIG1hZ2ljIG51bWJlci4gKi8KKworaWYgKHJlLT5tYWdpY19udW1iZXIgIT0gTUFHSUNfTlVNQkVSKSByZXR1cm4gUENSRTJfRVJST1JfQkFETUFHSUM7CisKKy8qIENoZWNrIHRoZSBjb2RlIHVuaXQgd2lkdGguICovCisKK2lmICgocmUtPmZsYWdzICYgUENSRTJfTU9ERV9NQVNLKSAhPSBQQ1JFMl9DT0RFX1VOSVRfV0lEVEgvOCkKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE1PREU7CisKKy8qIFBDUkUyX05PVEVNUFRZIGFuZCBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIGFyZSBtYXRjaC10aW1lIGZsYWdzIGluIHRoZQorb3B0aW9ucyB2YXJpYWJsZSBmb3IgdGhpcyBmdW5jdGlvbi4gVXNlcnMgb2YgUENSRTIgd2hvIGFyZSBub3QgY2FsbGluZyB0aGUKK2Z1bmN0aW9uIGRpcmVjdGx5IHdvdWxkIGxpa2UgdG8gaGF2ZSBhIHdheSBvZiBzZXR0aW5nIHRoZXNlIGZsYWdzLCBpbiB0aGUgc2FtZQord2F5IHRoYXQgdGhleSBjYW4gc2V0IHBjcmUyX2NvbXBpbGUoKSBmbGFncyBsaWtlIFBDUkUyX05PX0FVVE9QT1NTRVNTIHdpdGgKK2NvbnN0cnVjdGlvbnMgbGlrZSAoKk5PX0FVVE9QT1NTRVNTKS4gVG8gZW5hYmxlIHRoaXMsICgqTk9URU1QVFkpIGFuZAorKCpOT1RFTVBUWV9BVFNUQVJUKSBzZXQgYml0cyBpbiB0aGUgcGF0dGVybidzICJmbGFnIiBmdW5jdGlvbiB3aGljaCBjYW4gbm93IGJlCit0cmFuc2ZlcnJlZCB0byB0aGUgb3B0aW9ucyBmb3IgdGhpcyBmdW5jdGlvbi4gVGhlIGJpdHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUKK2FkamFjZW50LCBidXQgZG8gbm90IGhhdmUgdGhlIHNhbWUgdmFsdWVzLiBUaGlzIGJpdCBvZiBCb29sZWFuIHRyaWNrZXJ5IGFzc3VtZXMKK3RoYXQgdGhlIG1hdGNoLXRpbWUgYml0cyBhcmUgbm90IG1vcmUgc2lnbmlmaWNhbnQgdGhhbiB0aGUgZmxhZyBiaXRzLiBJZiBieQorYWNjaWRlbnQgdGhpcyBpcyBub3QgdGhlIGNhc2UsIGEgY29tcGlsZS10aW1lIGRpdmlzaW9uIGJ5IHplcm8gZXJyb3Igd2lsbAorb2NjdXIuICovCisKKyNkZWZpbmUgRkYgKFBDUkUyX05PVEVNUFRZX1NFVHxQQ1JFMl9ORV9BVFNUX1NFVCkKKyNkZWZpbmUgT08gKFBDUkUyX05PVEVNUFRZfFBDUkUyX05PVEVNUFRZX0FUU1RBUlQpCitvcHRpb25zIHw9IChyZS0+ZmxhZ3MgJiBGRikgLyAoKEZGICYgKH5GRisxKSkgLyAoT08gJiAofk9PKzEpKSk7CisjdW5kZWYgRkYKKyN1bmRlZiBPTworCisvKiBBIE5VTEwgbWF0Y2ggY29udGV4dCBtZWFucyAidXNlIGEgZGVmYXVsdCBjb250ZXh0IiAqLworCitpZiAobWNvbnRleHQgPT0gTlVMTCkKKyAgbWNvbnRleHQgPSAocGNyZTJfbWF0Y2hfY29udGV4dCAqKSgmUFJJVihkZWZhdWx0X21hdGNoX2NvbnRleHQpKTsKKworLyogVGhlc2UgdHdvIHNldHRpbmdzIGFyZSB1c2VkIGluIHRoZSBjb2RlIGZvciBjaGVja2luZyBhIFVURiBzdHJpbmcgdGhhdAorZm9sbG93cyBpbW1lZGlhdGVseSBhZnRlcndhcmRzLiBPdGhlciB2YWx1ZXMgaW4gdGhlIG1iIGJsb2NrIGFyZSB1c2VkIG9ubHkKK2R1cmluZyBpbnRlcnByZXRpdmUgcGNyZV9tYXRjaCgpIHByb2Nlc3NpbmcsIG5vdCB3aGVuIHRoZSBKSVQgc3VwcG9ydCBpcyBpbgordXNlLCBzbyB0aGV5IGFyZSBzZXQgdXAgbGF0ZXIuICovCisKK3V0ZiA9IChyZS0+b3ZlcmFsbF9vcHRpb25zICYgUENSRTJfVVRGKSAhPSAwOworbWItPnBhcnRpYWwgPSAoKG9wdGlvbnMgJiBQQ1JFMl9QQVJUSUFMX0hBUkQpICE9IDApPyAyIDoKKyAgICAgICAgICAgICAgKChvcHRpb25zICYgUENSRTJfUEFSVElBTF9TT0ZUKSAhPSAwKT8gMSA6IDA7CisKKy8qIENoZWNrIGEgVVRGIHN0cmluZyBmb3IgdmFsaWRpdHkgaWYgcmVxdWlyZWQuIEZvciA4LWJpdCBhbmQgMTYtYml0IHN0cmluZ3MsCit3ZSBtdXN0IGFsc28gY2hlY2sgdGhhdCBhIHN0YXJ0aW5nIG9mZnNldCBkb2VzIG5vdCBwb2ludCBpbnRvIHRoZSBtaWRkbGUgb2YgYQorbXVsdGl1bml0IGNoYXJhY3Rlci4gV2UgY2hlY2sgb25seSB0aGUgcG9ydGlvbiBvZiB0aGUgc3ViamVjdCB0aGF0IGlzIGdvaW5nIHRvCitiZSBpbnNwZWN0ZWQgZHVyaW5nIG1hdGNoaW5nIC0gZnJvbSB0aGUgb2Zmc2V0IG1pbnVzIHRoZSBtYXhpbXVtIGJhY2sgcmVmZXJlbmNlCit0byB0aGUgZ2l2ZW4gbGVuZ3RoLiBUaGlzIHNhdmVzIHRpbWUgd2hlbiBhIHNtYWxsIHBhcnQgb2YgYSBsYXJnZSBzdWJqZWN0IGlzCitiZWluZyBtYXRjaGVkIGJ5IHRoZSB1c2Ugb2YgYSBzdGFydGluZyBvZmZzZXQuIE5vdGUgdGhhdCB0aGUgbWF4aW11bSBsb29rYmVoaW5kCitpcyBhIG51bWJlciBvZiBjaGFyYWN0ZXJzLCBub3QgY29kZSB1bml0cy4gKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQoraWYgKHV0ZiAmJiAob3B0aW9ucyAmIFBDUkUyX05PX1VURl9DSEVDSykgPT0gMCkKKyAgeworICBQQ1JFMl9TUFRSIGNoZWNrX3N1YmplY3QgPSBzdGFydF9tYXRjaDsgIC8qIHN0YXJ0X21hdGNoIGluY2x1ZGVzIG9mZnNldCAqLworCisgIGlmIChzdGFydF9vZmZzZXQgPiAwKQorICAgIHsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gMzIKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBpZiAoc3RhcnRfbWF0Y2ggPCBlbmRfc3ViamVjdCAmJiBOT1RfRklSU1RDVSgqc3RhcnRfbWF0Y2gpKQorICAgICAgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRFVURk9GRlNFVDsKKyAgICBmb3IgKGkgPSByZS0+bWF4X2xvb2tiZWhpbmQ7IGkgPiAwICYmIGNoZWNrX3N1YmplY3QgPiBzdWJqZWN0OyBpLS0pCisgICAgICB7CisgICAgICBjaGVja19zdWJqZWN0LS07CisgICAgICB3aGlsZSAoY2hlY2tfc3ViamVjdCA+IHN1YmplY3QgJiYKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgICAgKCpjaGVja19zdWJqZWN0ICYgMHhjMCkgPT0gMHg4MCkKKyNlbHNlICAvKiAxNi1iaXQgKi8KKyAgICAgICgqY2hlY2tfc3ViamVjdCAmIDB4ZmMwMCkgPT0gMHhkYzAwKQorI2VuZGlmIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4ICovCisgICAgICAgIGNoZWNrX3N1YmplY3QtLTsKKyAgICAgIH0KKyNlbHNlCisgICAgLyogSW4gdGhlIDMyLWJpdCBsaWJyYXJ5LCBvbmUgY29kZSB1bml0IGVxdWFscyBvbmUgY2hhcmFjdGVyLiBIb3dldmVyLAorICAgIHdlIGNhbm5vdCBqdXN0IHN1YnRyYWN0IHRoZSBsb29rYmVoaW5kIGFuZCB0aGVuIGNvbXBhcmUgcG9pbnRlcnMsIGJlY2F1c2UKKyAgICBhIHZlcnkgbGFyZ2UgbG9va2JlaGluZCBjb3VsZCBjcmVhdGUgYW4gaW52YWxpZCBwb2ludGVyLiAqLworCisgICAgaWYgKHN0YXJ0X29mZnNldCA+PSByZS0+bWF4X2xvb2tiZWhpbmQpCisgICAgICBjaGVja19zdWJqZWN0IC09IHJlLT5tYXhfbG9va2JlaGluZDsKKyAgICBlbHNlCisgICAgICBjaGVja19zdWJqZWN0ID0gc3ViamVjdDsKKyNlbmRpZiAgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDMyICovCisgICAgfQorCisgIC8qIFZhbGlkYXRlIHRoZSByZWxldmFudCBwb3J0aW9uIG9mIHRoZSBzdWJqZWN0LiBBZnRlciBhbiBlcnJvciwgYWRqdXN0IHRoZQorICBvZmZzZXQgdG8gYmUgYW4gYWJzb2x1dGUgb2Zmc2V0IGluIHRoZSB3aG9sZSBzdHJpbmcuICovCisKKyAgbWF0Y2hfZGF0YS0+cmMgPSBQUklWKHZhbGlkX3V0ZikoY2hlY2tfc3ViamVjdCwKKyAgICBsZW5ndGggLSAoY2hlY2tfc3ViamVjdCAtIHN1YmplY3QpLCAmKG1hdGNoX2RhdGEtPnN0YXJ0Y2hhcikpOworICBpZiAobWF0Y2hfZGF0YS0+cmMgIT0gMCkKKyAgICB7CisgICAgbWF0Y2hfZGF0YS0+c3RhcnRjaGFyICs9IGNoZWNrX3N1YmplY3QgLSBzdWJqZWN0OworICAgIHJldHVybiBtYXRjaF9kYXRhLT5yYzsKKyAgICB9CisgIH0KKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKy8qIEl0IGlzIGFuIGVycm9yIHRvIHNldCBhbiBvZmZzZXQgbGltaXQgd2l0aG91dCBzZXR0aW5nIHRoZSBmbGFnIGF0IGNvbXBpbGUKK3RpbWUuICovCisKK2lmIChtY29udGV4dC0+b2Zmc2V0X2xpbWl0ICE9IFBDUkUyX1VOU0VUICYmCisgICAgIChyZS0+b3ZlcmFsbF9vcHRpb25zICYgUENSRTJfVVNFX09GRlNFVF9MSU1JVCkgPT0gMCkKKyAgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE9GRlNFVExJTUlUOworCisvKiBJZiB0aGUgcGF0dGVybiB3YXMgc3VjY2Vzc2Z1bGx5IHN0dWRpZWQgd2l0aCBKSVQgc3VwcG9ydCwgcnVuIHRoZSBKSVQKK2V4ZWN1dGFibGUgaW5zdGVhZCBvZiB0aGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uLiBNb3N0IG9wdGlvbnMgbXVzdCBiZSBzZXQgYXQKK2NvbXBpbGUgdGltZSBmb3IgdGhlIEpJVCBjb2RlIHRvIGJlIHVzYWJsZS4gRmFsbGJhY2sgdG8gdGhlIG5vcm1hbCBjb2RlIHBhdGggaWYKK2FuIHVuc3VwcG9ydGVkIG9wdGlvbiBpcyBzZXQgb3IgaWYgSklUIHJldHVybnMgQkFET1BUSU9OICh3aGljaCBtZWFucyB0aGF0IHRoZQorc2VsZWN0ZWQgbm9ybWFsIG9yIHBhcnRpYWwgbWF0Y2hpbmcgbW9kZSB3YXMgbm90IGNvbXBpbGVkKS4gKi8KKworI2lmZGVmIFNVUFBPUlRfSklUCitpZiAocmUtPmV4ZWN1dGFibGVfaml0ICE9IE5VTEwgJiYgKG9wdGlvbnMgJiB+UFVCTElDX0pJVF9NQVRDSF9PUFRJT05TKSA9PSAwKQorICB7CisgIHJjID0gcGNyZTJfaml0X21hdGNoKGNvZGUsIHN1YmplY3QsIGxlbmd0aCwgc3RhcnRfb2Zmc2V0LCBvcHRpb25zLAorICAgIG1hdGNoX2RhdGEsIG1jb250ZXh0KTsKKyAgaWYgKHJjICE9IFBDUkUyX0VSUk9SX0pJVF9CQURPUFRJT04pIHJldHVybiByYzsKKyAgfQorI2VuZGlmCisKKy8qIENhcnJ5IG9uIHdpdGggbm9uLUpJVCBtYXRjaGluZy4gKi8KKworYW5jaG9yZWQgPSAoKHJlLT5vdmVyYWxsX29wdGlvbnMgfCBvcHRpb25zKSAmIFBDUkUyX0FOQ0hPUkVEKSAhPSAwOworZmlyc3RsaW5lID0gKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9GSVJTVExJTkUpICE9IDA7CitzdGFydGxpbmUgPSAocmUtPmZsYWdzICYgUENSRTJfU1RBUlRMSU5FKSAhPSAwOworYnVtcGFsb25nX2xpbWl0ID0gIChtY29udGV4dC0+b2Zmc2V0X2xpbWl0ID09IFBDUkUyX1VOU0VUKT8KKyAgZW5kX3N1YmplY3QgOiBzdWJqZWN0ICsgbWNvbnRleHQtPm9mZnNldF9saW1pdDsKKworLyogRmlsbCBpbiB0aGUgZmllbGRzIGluIHRoZSBtYXRjaCBibG9jay4gKi8KKworbWItPmNhbGxvdXQgPSBtY29udGV4dC0+Y2FsbG91dDsKK21iLT5jYWxsb3V0X2RhdGEgPSBtY29udGV4dC0+Y2FsbG91dF9kYXRhOworbWItPm1lbWN0bCA9IG1jb250ZXh0LT5tZW1jdGw7CisjaWZkZWYgSEVBUF9NQVRDSF9SRUNVUlNFCittYi0+c3RhY2tfbWVtY3RsID0gbWNvbnRleHQtPnN0YWNrX21lbWN0bDsKKyNlbmRpZgorCittYi0+c3RhcnRfc3ViamVjdCA9IHN1YmplY3Q7CittYi0+c3RhcnRfb2Zmc2V0ID0gc3RhcnRfb2Zmc2V0OworbWItPmVuZF9zdWJqZWN0ID0gZW5kX3N1YmplY3Q7CittYi0+aGFzdGhlbiA9IChyZS0+ZmxhZ3MgJiBQQ1JFMl9IQVNUSEVOKSAhPSAwOworCittYi0+bW9wdGlvbnMgPSBvcHRpb25zOyAgICAgICAgICAgICAgICAgLyogTWF0Y2ggb3B0aW9ucyAqLworbWItPnBvcHRpb25zID0gcmUtPm92ZXJhbGxfb3B0aW9uczsgICAgIC8qIFBhdHRlcm4gb3B0aW9ucyAqLworCittYi0+aWdub3JlX3NraXBfYXJnID0gMDsKK21iLT5tYXJrID0gbWItPm5vbWF0Y2hfbWFyayA9IE5VTEw7ICAgICAvKiBJbiBjYXNlIG5ldmVyIHNldCAqLworbWItPnJlY3Vyc2l2ZSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgIC8qIE5vIHJlY3Vyc2lvbiBhdCB0b3AgbGV2ZWwgKi8KK21iLT5vdmVjc2F2ZV9jaGFpbiA9IE5VTEw7ICAgICAgICAgICAgICAvKiBObyBvdmVjc2F2ZSBibG9ja3MgeWV0ICovCittYi0+aGl0ZW5kID0gRkFMU0U7CisKKy8qIFRoZSBuYW1lIHRhYmxlIGlzIG5lZWRlZCBmb3IgZmluZGluZyBhbGwgdGhlIG51bWJlcnMgYXNzb2NpYXRlZCB3aXRoIGEKK2dpdmVuIG5hbWUsIGZvciBjb25kaXRpb24gdGVzdGluZy4gVGhlIGNvZGUgZm9sbG93cyB0aGUgbmFtZSB0YWJsZS4gKi8KKworbWItPm5hbWVfdGFibGUgPSAoUENSRTJfVUNIQVIgKikoKHVpbnQ4X3QgKilyZSArIHNpemVvZihwY3JlMl9yZWFsX2NvZGUpKTsKK21iLT5uYW1lX2NvdW50ID0gcmUtPm5hbWVfY291bnQ7CittYi0+bmFtZV9lbnRyeV9zaXplID0gcmUtPm5hbWVfZW50cnlfc2l6ZTsKK21iLT5zdGFydF9jb2RlID0gbWItPm5hbWVfdGFibGUgKyByZS0+bmFtZV9jb3VudCAqIHJlLT5uYW1lX2VudHJ5X3NpemU7CisKKy8qIExpbWl0cyBzZXQgaW4gdGhlIHBhdHRlcm4gb3ZlcnJpZGUgdGhlIG1hdGNoIGNvbnRleHQgb25seSBpZiB0aGV5IGFyZQorc21hbGxlci4gKi8KKworbWItPm1hdGNoX2xpbWl0ID0gKG1jb250ZXh0LT5tYXRjaF9saW1pdCA8IHJlLT5saW1pdF9tYXRjaCk/CisgICAgICAgICAgICAgICAgICBtY29udGV4dC0+bWF0Y2hfbGltaXQgOiByZS0+bGltaXRfbWF0Y2g7CittYi0+bWF0Y2hfbGltaXRfcmVjdXJzaW9uID0gKG1jb250ZXh0LT5yZWN1cnNpb25fbGltaXQgPCByZS0+bGltaXRfcmVjdXJzaW9uKT8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtY29udGV4dC0+cmVjdXJzaW9uX2xpbWl0IDogcmUtPmxpbWl0X3JlY3Vyc2lvbjsKKworLyogUG9pbnRlcnMgdG8gdGhlIGluZGl2aWR1YWwgY2hhcmFjdGVyIHRhYmxlcyAqLworCittYi0+bGNjID0gcmUtPnRhYmxlcyArIGxjY19vZmZzZXQ7CittYi0+ZmNjID0gcmUtPnRhYmxlcyArIGZjY19vZmZzZXQ7CittYi0+Y3R5cGVzID0gcmUtPnRhYmxlcyArIGN0eXBlc19vZmZzZXQ7CisKKy8qIFByb2Nlc3MgdGhlIFxSIGFuZCBuZXdsaW5lIHNldHRpbmdzLiAqLworCittYi0+YnNyX2NvbnZlbnRpb24gPSByZS0+YnNyX2NvbnZlbnRpb247CittYi0+bmx0eXBlID0gTkxUWVBFX0ZJWEVEOworc3dpdGNoKHJlLT5uZXdsaW5lX2NvbnZlbnRpb24pCisgIHsKKyAgY2FzZSBQQ1JFMl9ORVdMSU5FX0NSOgorICBtYi0+bmxsZW4gPSAxOworICBtYi0+bmxbMF0gPSBDSEFSX0NSOworICBicmVhazsKKworICBjYXNlIFBDUkUyX05FV0xJTkVfTEY6CisgIG1iLT5ubGxlbiA9IDE7CisgIG1iLT5ubFswXSA9IENIQVJfTkw7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfTkVXTElORV9DUkxGOgorICBtYi0+bmxsZW4gPSAyOworICBtYi0+bmxbMF0gPSBDSEFSX0NSOworICBtYi0+bmxbMV0gPSBDSEFSX05MOworICBicmVhazsKKworICBjYXNlIFBDUkUyX05FV0xJTkVfQU5ZOgorICBtYi0+bmx0eXBlID0gTkxUWVBFX0FOWTsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9ORVdMSU5FX0FOWUNSTEY6CisgIG1iLT5ubHR5cGUgPSBOTFRZUEVfQU5ZQ1JMRjsKKyAgYnJlYWs7CisKKyAgZGVmYXVsdDogcmV0dXJuIFBDUkUyX0VSUk9SX0lOVEVSTkFMOworICB9CisKKy8qIElmIHRoZSBleHByZXNzaW9uIGhhcyBnb3QgbW9yZSBiYWNrIHJlZmVyZW5jZXMgdGhhbiB0aGUgb2Zmc2V0cyBzdXBwbGllZCBjYW4KK2hvbGQsIHdlIGdldCBhIHRlbXBvcmFyeSBjaHVuayBvZiBtZW1vcnkgdG8gdXNlIGR1cmluZyB0aGUgbWF0Y2hpbmcuIE90aGVyd2lzZSwKK3dlIGNhbiB1c2UgdGhlIHZlY3RvciBzdXBwbGllZC4gVGhlIHNpemUgb2YgdGhlIG92ZWN0b3IgaXMgdGhyZWUgdGltZXMgdGhlCit2YWx1ZSBpbiB0aGUgb3ZlY2NvdW50IGZpZWxkLiBUd28tdGhpcmRzIG9mIGl0IGlzIHBhaXJzIGZvciBzdG9yaW5nIG1hdGNoaW5nCitvZmZzZXRzLCBhbmQgdGhlIHRvcCB0aGlyZCBpcyB3b3JraW5nIHNwYWNlLiAqLworCitpZiAocmUtPnRvcF9iYWNrcmVmID49IG1hdGNoX2RhdGEtPm92ZWNjb3VudCkKKyAgeworICBvY291bnQgPSByZS0+dG9wX2JhY2tyZWYgKiAzICsgMzsKKyAgbWItPm92ZWN0b3IgPSAoUENSRTJfU0laRSAqKShtYi0+bWVtY3RsLm1hbGxvYyhvY291bnQgKiBzaXplb2YoUENSRTJfU0laRSksCisgICAgbWItPm1lbWN0bC5tZW1vcnlfZGF0YSkpOworICBpZiAobWItPm92ZWN0b3IgPT0gTlVMTCkgcmV0dXJuIFBDUkUyX0VSUk9SX05PTUVNT1JZOworICB1c2luZ190ZW1wb3Jhcnlfb2Zmc2V0cyA9IFRSVUU7CisgIH0KK2Vsc2UKKyAgeworICBvY291bnQgPSAzICogbWF0Y2hfZGF0YS0+b3ZlY2NvdW50OworICBtYi0+b3ZlY3RvciA9IG1hdGNoX2RhdGEtPm92ZWN0b3I7CisgIH0KKworbWItPm9mZnNldF9lbmQgPSBvY291bnQ7CittYi0+b2Zmc2V0X21heCA9ICgyKm9jb3VudCkvMzsKKworLyogUmVzZXQgdGhlIHdvcmtpbmcgdmFyaWFibGUgYXNzb2NpYXRlZCB3aXRoIGVhY2ggZXh0cmFjdGlvbi4gVGhlc2Ugc2hvdWxkCituZXZlciBiZSB1c2VkIHVubGVzcyBwcmV2aW91c2x5IHNldCwgYnV0IHRoZXkgZ2V0IHNhdmVkIGFuZCByZXN0b3JlZCwgYW5kIHNvIHdlCitpbml0aWFsaXplIHRoZW0gdG8gYXZvaWQgcmVhZGluZyB1bmluaXRpYWxpemVkIGxvY2F0aW9ucy4gQWxzbywgdW5zZXQgdGhlCitvZmZzZXRzIGZvciB0aGUgbWF0Y2hlZCBzdHJpbmcuIFRoaXMgaXMgcmVhbGx5IGp1c3QgZm9yIHRpZGluZXNzIHdpdGggY2FsbG91dHMsCitpbiBjYXNlIHRoZXkgaW5zcGVjdCB0aGVzZSBmaWVsZHMuICovCisKK2lmIChvY291bnQgPiAwKQorICB7CisgIHJlZ2lzdGVyIFBDUkUyX1NJWkUgKmlwdHIgPSBtYi0+b3ZlY3RvciArIG9jb3VudDsKKyAgcmVnaXN0ZXIgUENSRTJfU0laRSAqaWVuZCA9IGlwdHIgLSByZS0+dG9wX2JyYWNrZXQ7CisgIGlmIChpZW5kIDwgbWItPm92ZWN0b3IgKyAyKSBpZW5kID0gbWItPm92ZWN0b3IgKyAyOworICB3aGlsZSAoLS1pcHRyID49IGllbmQpICppcHRyID0gUENSRTJfVU5TRVQ7CisgIG1iLT5vdmVjdG9yWzBdID0gbWItPm92ZWN0b3JbMV0gPSBQQ1JFMl9VTlNFVDsKKyAgfQorCisvKiBTZXQgdXAgdGhlIGZpcnN0IGNvZGUgdW5pdCB0byBtYXRjaCwgaWYgYXZhaWxhYmxlLiBUaGUgZmlyc3RfY29kZXVuaXQgdmFsdWUKK2lzIG5ldmVyIHNldCBmb3IgYW4gYW5jaG9yZWQgcmVndWxhciBleHByZXNzaW9uLCBidXQgdGhlIGFuY2hvcmluZyBtYXkgYmUKK2ZvcmNlZCBhdCBydW4gdGltZSwgc28gd2UgaGF2ZSB0byB0ZXN0IGZvciBhbmNob3JpbmcuIFRoZSBmaXJzdCBjb2RlIHVuaXQgbWF5CitiZSB1bnNldCBmb3IgYW4gdW5hbmNob3JlZCBwYXR0ZXJuLCBvZiBjb3Vyc2UuIElmIHRoZXJlJ3Mgbm8gZmlyc3QgY29kZSB1bml0Cit0aGVyZSBtYXkgYmUgYSBiaXRtYXAgb2YgcG9zc2libGUgZmlyc3QgY2hhcmFjdGVycy4gKi8KKworaWYgKCFhbmNob3JlZCkKKyAgeworICBpZiAoKHJlLT5mbGFncyAmIFBDUkUyX0ZJUlNUU0VUKSAhPSAwKQorICAgIHsKKyAgICBoYXNfZmlyc3RfY3UgPSBUUlVFOworICAgIGZpcnN0X2N1ID0gZmlyc3RfY3UyID0gKFBDUkUyX1VDSEFSKShyZS0+Zmlyc3RfY29kZXVuaXQpOworICAgIGlmICgocmUtPmZsYWdzICYgUENSRTJfRklSU1RDQVNFTEVTUykgIT0gMCkKKyAgICAgIHsKKyAgICAgIGZpcnN0X2N1MiA9IFRBQkxFX0dFVChmaXJzdF9jdSwgbWItPmZjYywgZmlyc3RfY3UpOworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgICBpZiAodXRmICYmIGZpcnN0X2N1ID4gMTI3KSBmaXJzdF9jdTIgPSBVQ0RfT1RIRVJDQVNFKGZpcnN0X2N1KTsKKyNlbmRpZgorICAgICAgfQorICAgIH0KKyAgZWxzZQorICAgIGlmICghc3RhcnRsaW5lICYmIChyZS0+ZmxhZ3MgJiBQQ1JFMl9GSVJTVE1BUFNFVCkgIT0gMCkKKyAgICAgIHN0YXJ0X2JpdHMgPSByZS0+c3RhcnRfYml0bWFwOworICB9CisKKy8qIEZvciBhbmNob3JlZCBvciB1bmFuY2hvcmVkIG1hdGNoZXMsIHRoZXJlIG1heSBiZSBhICJsYXN0IGtub3duIHJlcXVpcmVkCitjaGFyYWN0ZXIiIHNldC4gKi8KKworaWYgKChyZS0+ZmxhZ3MgJiBQQ1JFMl9MQVNUU0VUKSAhPSAwKQorICB7CisgIGhhc19yZXFfY3UgPSBUUlVFOworICByZXFfY3UgPSByZXFfY3UyID0gKFBDUkUyX1VDSEFSKShyZS0+bGFzdF9jb2RldW5pdCk7CisgIGlmICgocmUtPmZsYWdzICYgUENSRTJfTEFTVENBU0VMRVNTKSAhPSAwKQorICAgIHsKKyAgICByZXFfY3UyID0gVEFCTEVfR0VUKHJlcV9jdSwgbWItPmZjYywgcmVxX2N1KTsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgIGlmICh1dGYgJiYgcmVxX2N1ID4gMTI3KSByZXFfY3UyID0gVUNEX09USEVSQ0FTRShyZXFfY3UpOworI2VuZGlmCisgICAgfQorICB9CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKiBMb29wIGZvciBoYW5kbGluZyB1bmFuY2hvcmVkIHJlcGVhdGVkIG1hdGNoaW5nIGF0dGVtcHRzOyBmb3IgYW5jaG9yZWQgcmVnZXhzCit0aGUgbG9vcCBydW5zIGp1c3Qgb25jZS4gKi8KKworZm9yKDs7KQorICB7CisgIFBDUkUyX1NQVFIgbmV3X3N0YXJ0X21hdGNoOworICBtYi0+Y2FwdHVyZV9sYXN0ID0gMDsKKworICAvKiAtLS0tLS0tLS0tLS0tLS0tLSBTdGFydCBvZiBtYXRjaCBvcHRpbWl6YXRpb25zIC0tLS0tLS0tLS0tLS0tLS0gKi8KKworICAvKiBUaGVyZSBhcmUgc29tZSBvcHRpbWl6YXRpb25zIHRoYXQgYXZvaWQgcnVubmluZyB0aGUgbWF0Y2ggaWYgYSBrbm93bgorICBzdGFydGluZyBwb2ludCBpcyBub3QgZm91bmQsIG9yIGlmIGEga25vd24gbGF0ZXIgY29kZSB1bml0IGlzIG5vdCBwcmVzZW50LgorICBIb3dldmVyLCB0aGVyZSBpcyBhbiBvcHRpb24gKHNldHRhYmxlIGF0IGNvbXBpbGUgdGltZSkgdGhhdCBkaXNhYmxlcyB0aGVzZSwKKyAgZm9yIHRlc3RpbmcgYW5kIGZvciBlbnN1cmluZyB0aGF0IGFsbCBjYWxsb3V0cyBkbyBhY3R1YWxseSBvY2N1ci4gKi8KKworICBpZiAoKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9OT19TVEFSVF9PUFRJTUlaRSkgPT0gMCkKKyAgICB7CisgICAgUENSRTJfU1BUUiBzYXZlX2VuZF9zdWJqZWN0ID0gZW5kX3N1YmplY3Q7CisKKyAgICAvKiBJZiBmaXJzdGxpbmUgaXMgVFJVRSwgdGhlIHN0YXJ0IG9mIHRoZSBtYXRjaCBpcyBjb25zdHJhaW5lZCB0byB0aGUgZmlyc3QKKyAgICBsaW5lIG9mIGEgbXVsdGlsaW5lIHN0cmluZy4gVGhhdCBpcywgdGhlIG1hdGNoIG11c3QgYmUgYmVmb3JlIG9yIGF0IHRoZQorICAgIGZpcnN0IG5ld2xpbmUuIEltcGxlbWVudCB0aGlzIGJ5IHRlbXBvcmFyaWx5IGFkanVzdGluZyBlbmRfc3ViamVjdCBzbyB0aGF0CisgICAgd2Ugc3RvcCB0aGUgb3B0aW1pemF0aW9uIHNjYW5zIGF0IGEgbmV3bGluZS4gSWYgdGhlIG1hdGNoIGZhaWxzIGF0IHRoZQorICAgIG5ld2xpbmUsIGxhdGVyIGNvZGUgYnJlYWtzIHRoaXMgbG9vcC4gKi8KKworICAgIGlmIChmaXJzdGxpbmUpCisgICAgICB7CisgICAgICBQQ1JFMl9TUFRSIHQgPSBzdGFydF9tYXRjaDsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgIGlmICh1dGYpCisgICAgICAgIHsKKyAgICAgICAgd2hpbGUgKHQgPCBtYi0+ZW5kX3N1YmplY3QgJiYgIUlTX05FV0xJTkUodCkpCisgICAgICAgICAgeworICAgICAgICAgIHQrKzsKKyAgICAgICAgICBBQ1JPU1NDSEFSKHQgPCBlbmRfc3ViamVjdCwgKnQsIHQrKyk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgIHdoaWxlICh0IDwgbWItPmVuZF9zdWJqZWN0ICYmICFJU19ORVdMSU5FKHQpKSB0Kys7CisgICAgICBlbmRfc3ViamVjdCA9IHQ7CisgICAgICB9CisKKyAgICAvKiBBZHZhbmNlIHRvIGEgdW5pcXVlIGZpcnN0IGNvZGUgdW5pdCBpZiB0aGVyZSBpcyBvbmUuIEluIDgtYml0IG1vZGUsIHRoZQorICAgIHVzZSBvZiBtZW1jaHIoKSBnaXZlcyBhIGJpZyBzcGVlZCB1cC4gKi8KKworICAgIGlmIChoYXNfZmlyc3RfY3UpCisgICAgICB7CisgICAgICBQQ1JFMl9VQ0hBUiBzbWM7CisgICAgICBpZiAoZmlyc3RfY3UgIT0gZmlyc3RfY3UyKQorICAgICAgICB3aGlsZSAoc3RhcnRfbWF0Y2ggPCBlbmRfc3ViamVjdCAmJgorICAgICAgICAgIChzbWMgPSBVQ0hBUjIxVEVTVChzdGFydF9tYXRjaCkpICE9IGZpcnN0X2N1ICYmIHNtYyAhPSBmaXJzdF9jdTIpCisgICAgICAgICAgc3RhcnRfbWF0Y2grKzsKKyAgICAgIGVsc2UKKyAgICAgICAgeworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgICAgIHdoaWxlIChzdGFydF9tYXRjaCA8IGVuZF9zdWJqZWN0ICYmIFVDSEFSMjFURVNUKHN0YXJ0X21hdGNoKSAhPSBmaXJzdF9jdSkKKyAgICAgICAgICBzdGFydF9tYXRjaCsrOworI2Vsc2UKKyAgICAgICAgc3RhcnRfbWF0Y2ggPSBtZW1jaHIoc3RhcnRfbWF0Y2gsIGZpcnN0X2N1LCBlbmRfc3ViamVjdCAtIHN0YXJ0X21hdGNoKTsKKyAgICAgICAgaWYgKHN0YXJ0X21hdGNoID09IE5VTEwpIHN0YXJ0X21hdGNoID0gZW5kX3N1YmplY3Q7CisjZW5kaWYKKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogT3IgdG8ganVzdCBhZnRlciBhIGxpbmVicmVhayBmb3IgYSBtdWx0aWxpbmUgbWF0Y2ggKi8KKworICAgIGVsc2UgaWYgKHN0YXJ0bGluZSkKKyAgICAgIHsKKyAgICAgIGlmIChzdGFydF9tYXRjaCA+IG1iLT5zdGFydF9zdWJqZWN0ICsgc3RhcnRfb2Zmc2V0KQorICAgICAgICB7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgeworICAgICAgICAgIHdoaWxlIChzdGFydF9tYXRjaCA8IGVuZF9zdWJqZWN0ICYmICFXQVNfTkVXTElORShzdGFydF9tYXRjaCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBzdGFydF9tYXRjaCsrOworICAgICAgICAgICAgQUNST1NTQ0hBUihzdGFydF9tYXRjaCA8IGVuZF9zdWJqZWN0LCAqc3RhcnRfbWF0Y2gsCisgICAgICAgICAgICAgIHN0YXJ0X21hdGNoKyspOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHdoaWxlIChzdGFydF9tYXRjaCA8IGVuZF9zdWJqZWN0ICYmICFXQVNfTkVXTElORShzdGFydF9tYXRjaCkpCisgICAgICAgICAgc3RhcnRfbWF0Y2grKzsKKworICAgICAgICAvKiBJZiB3ZSBoYXZlIGp1c3QgcGFzc2VkIGEgQ1IgYW5kIHRoZSBuZXdsaW5lIG9wdGlvbiBpcyBBTlkgb3IKKyAgICAgICAgQU5ZQ1JMRiwgYW5kIHdlIGFyZSBub3cgYXQgYSBMRiwgYWR2YW5jZSB0aGUgbWF0Y2ggcG9zaXRpb24gYnkgb25lIG1vcmUKKyAgICAgICAgY29kZSB1bml0LiAqLworCisgICAgICAgIGlmIChzdGFydF9tYXRjaFstMV0gPT0gQ0hBUl9DUiAmJgorICAgICAgICAgICAgIChtYi0+bmx0eXBlID09IE5MVFlQRV9BTlkgfHwgbWItPm5sdHlwZSA9PSBOTFRZUEVfQU5ZQ1JMRikgJiYKKyAgICAgICAgICAgICBzdGFydF9tYXRjaCA8IGVuZF9zdWJqZWN0ICYmCisgICAgICAgICAgICAgVUNIQVIyMVRFU1Qoc3RhcnRfbWF0Y2gpID09IENIQVJfTkwpCisgICAgICAgICAgc3RhcnRfbWF0Y2grKzsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogT3IgdG8gYSBub24tdW5pcXVlIGZpcnN0IGNvZGUgdW5pdCBpZiBhbnkgaGF2ZSBiZWVuIGlkZW50aWZpZWQuIFRoZQorICAgIGJpdG1hcCBjb250YWlucyBvbmx5IDI1NiBiaXRzLiBXaGVuIGNvZGUgdW5pdHMgYXJlIDE2IG9yIDMyIGJpdHMgd2lkZSwgYWxsCisgICAgY29kZSB1bml0cyBncmVhdGVyIHRoYW4gMjU0IHNldCB0aGUgMjU1IGJpdC4gKi8KKworICAgIGVsc2UgaWYgKHN0YXJ0X2JpdHMgIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIHdoaWxlIChzdGFydF9tYXRjaCA8IGVuZF9zdWJqZWN0KQorICAgICAgICB7CisgICAgICAgIHJlZ2lzdGVyIHVpbnQzMl90IGMgPSBVQ0hBUjIxVEVTVChzdGFydF9tYXRjaCk7CisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICAgICAgaWYgKGMgPiAyNTUpIGMgPSAyNTU7CisjZW5kaWYKKyAgICAgICAgaWYgKChzdGFydF9iaXRzW2MvOF0gJiAoMSA8PCAoYyY3KSkpICE9IDApIGJyZWFrOworICAgICAgICBzdGFydF9tYXRjaCsrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAvKiBSZXN0b3JlIGZ1ZGdlZCBlbmRfc3ViamVjdCAqLworCisgICAgZW5kX3N1YmplY3QgPSBzYXZlX2VuZF9zdWJqZWN0OworCisgICAgLyogVGhlIGZvbGxvd2luZyB0d28gb3B0aW1pemF0aW9ucyBhcmUgZGlzYWJsZWQgZm9yIHBhcnRpYWwgbWF0Y2hpbmcuICovCisKKyAgICBpZiAoIW1iLT5wYXJ0aWFsKQorICAgICAgeworICAgICAgLyogVGhlIG1pbmltdW0gbWF0Y2hpbmcgbGVuZ3RoIGlzIGEgbG93ZXIgYm91bmQ7IG5vIGFjdHVhbCBzdHJpbmcgb2YgdGhhdAorICAgICAgbGVuZ3RoIG1heSBhY3R1YWxseSBtYXRjaCB0aGUgcGF0dGVybi4gQWx0aG91Z2ggdGhlIHZhbHVlIGlzLCBzdHJpY3RseSwKKyAgICAgIGluIGNoYXJhY3RlcnMsIHdlIHRyZWF0IGl0IGFzIGNvZGUgdW5pdHMgdG8gYXZvaWQgc3BlbmRpbmcgdG9vIG11Y2ggdGltZQorICAgICAgaW4gdGhpcyBvcHRpbWl6YXRpb24uICovCisKKyAgICAgIGlmIChlbmRfc3ViamVjdCAtIHN0YXJ0X21hdGNoIDwgcmUtPm1pbmxlbmd0aCkKKyAgICAgICAgeworICAgICAgICByYyA9IE1BVENIX05PTUFUQ0g7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIC8qIElmIHJlcV9jdSBpcyBzZXQsIHdlIGtub3cgdGhhdCB0aGF0IGNvZGUgdW5pdCBtdXN0IGFwcGVhciBpbiB0aGUKKyAgICAgIHN1YmplY3QgZm9yIHRoZSBtYXRjaCB0byBzdWNjZWVkLiBJZiB0aGUgZmlyc3QgY29kZSB1bml0IGlzIHNldCwgcmVxX2N1CisgICAgICBtdXN0IGJlIGxhdGVyIGluIHRoZSBzdWJqZWN0OyBvdGhlcndpc2UgdGhlIHRlc3Qgc3RhcnRzIGF0IHRoZSBtYXRjaAorICAgICAgcG9pbnQuIFRoaXMgb3B0aW1pemF0aW9uIGNhbiBzYXZlIGEgaHVnZSBhbW91bnQgb2YgYmFja3RyYWNraW5nIGluCisgICAgICBwYXR0ZXJucyB3aXRoIG5lc3RlZCB1bmxpbWl0ZWQgcmVwZWF0cyB0aGF0IGFyZW4ndCBnb2luZyB0byBtYXRjaC4KKyAgICAgIFdyaXRpbmcgc2VwYXJhdGUgY29kZSBmb3IgY2FzZWQvY2FzZWxlc3MgdmVyc2lvbnMgbWFrZXMgaXQgZ28gZmFzdGVyLCBhcworICAgICAgZG9lcyB1c2luZyBhbiBhdXRvaW5jcmVtZW50IGFuZCBiYWNraW5nIG9mZiBvbiBhIG1hdGNoLgorCisgICAgICBIT1dFVkVSOiB3aGVuIHRoZSBzdWJqZWN0IHN0cmluZyBpcyB2ZXJ5LCB2ZXJ5IGxvbmcsIHNlYXJjaGluZyB0byBpdHMgZW5kCisgICAgICBjYW4gdGFrZSBhIGxvbmcgdGltZSwgYW5kIGdpdmUgYmFkIHBlcmZvcm1hbmNlIG9uIHF1aXRlIG9yZGluYXJ5CisgICAgICBwYXR0ZXJucy4gVGhpcyBzaG93ZWQgdXAgd2hlbiBzb21lYm9keSB3YXMgbWF0Y2hpbmcgc29tZXRoaW5nIGxpa2UKKyAgICAgIC9eXGQrQy8gb24gYSAzMi1tZWdhYnl0ZSBzdHJpbmcuLi4gc28gd2UgZG9uJ3QgZG8gdGhpcyB3aGVuIHRoZSBzdHJpbmcgaXMKKyAgICAgIHN1ZmZpY2llbnRseSBsb25nLiAqLworCisgICAgICBpZiAoaGFzX3JlcV9jdSAmJiBlbmRfc3ViamVjdCAtIHN0YXJ0X21hdGNoIDwgUkVRX0NVX01BWCkKKyAgICAgICAgeworICAgICAgICByZWdpc3RlciBQQ1JFMl9TUFRSIHAgPSBzdGFydF9tYXRjaCArIChoYXNfZmlyc3RfY3U/IDE6MCk7CisKKyAgICAgICAgLyogV2UgZG9uJ3QgbmVlZCB0byByZXBlYXQgdGhlIHNlYXJjaCBpZiB3ZSBoYXZlbid0IHlldCByZWFjaGVkIHRoZQorICAgICAgICBwbGFjZSB3ZSBmb3VuZCBpdCBhdCBsYXN0IHRpbWUuICovCisKKyAgICAgICAgaWYgKHAgPiByZXFfY3VfcHRyKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAocmVxX2N1ICE9IHJlcV9jdTIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAocCA8IGVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJlZ2lzdGVyIHVpbnQzMl90IHBwID0gVUNIQVIyMUlOQ1RFU1QocCk7CisgICAgICAgICAgICAgIGlmIChwcCA9PSByZXFfY3UgfHwgcHAgPT0gcmVxX2N1MikgeyBwLS07IGJyZWFrOyB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAocCA8IGVuZF9zdWJqZWN0KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGlmIChVQ0hBUjIxSU5DVEVTVChwKSA9PSByZXFfY3UpIHsgcC0tOyBicmVhazsgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBJZiB3ZSBjYW4ndCBmaW5kIHRoZSByZXF1aXJlZCBjb2RlIHVuaXQsIGJyZWFrIHRoZSBtYXRjaGluZyBsb29wLAorICAgICAgICAgIGZvcmNpbmcgYSBtYXRjaCBmYWlsdXJlLiAqLworCisgICAgICAgICAgaWYgKHAgPj0gZW5kX3N1YmplY3QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICByYyA9IE1BVENIX05PTUFUQ0g7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgIC8qIElmIHdlIGhhdmUgZm91bmQgdGhlIHJlcXVpcmVkIGNvZGUgdW5pdCwgc2F2ZSB0aGUgcG9pbnQgd2hlcmUgd2UKKyAgICAgICAgICBmb3VuZCBpdCwgc28gdGhhdCB3ZSBkb24ndCBzZWFyY2ggYWdhaW4gbmV4dCB0aW1lIHJvdW5kIHRoZSBsb29wIGlmCisgICAgICAgICAgdGhlIHN0YXJ0IGhhc24ndCBwYXNzZWQgdGhpcyBjb2RlIHVuaXQgeWV0LiAqLworCisgICAgICAgICAgcmVxX2N1X3B0ciA9IHA7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQorCisgIC8qIC0tLS0tLS0tLS0tLSBFbmQgb2Ygc3RhcnQgb2YgbWF0Y2ggb3B0aW1pemF0aW9ucyAtLS0tLS0tLS0tLS0gKi8KKworICAvKiBHaXZlIG5vIG1hdGNoIGlmIHdlIGhhdmUgcGFzc2VkIHRoZSBidW1wYWxvbmcgbGltaXQuICovCisKKyAgaWYgKHN0YXJ0X21hdGNoID4gYnVtcGFsb25nX2xpbWl0KQorICAgIHsKKyAgICByYyA9IE1BVENIX05PTUFUQ0g7CisgICAgYnJlYWs7CisgICAgfQorCisgIC8qIE9LLCB3ZSBjYW4gbm93IHJ1biB0aGUgbWF0Y2guIElmICJoaXRlbmQiIGlzIHNldCBhZnRlcndhcmRzLCByZW1lbWJlciB0aGUKKyAgZmlyc3Qgc3RhcnRpbmcgcG9pbnQgZm9yIHdoaWNoIGEgcGFydGlhbCBtYXRjaCB3YXMgZm91bmQuICovCisKKyAgbWItPnN0YXJ0X21hdGNoX3B0ciA9IHN0YXJ0X21hdGNoOworICBtYi0+c3RhcnRfdXNlZF9wdHIgPSBzdGFydF9tYXRjaDsKKyAgbWItPmxhc3RfdXNlZF9wdHIgPSBzdGFydF9tYXRjaDsKKyAgbWItPm1hdGNoX2NhbGxfY291bnQgPSAwOworICBtYi0+bWF0Y2hfZnVuY3Rpb25fdHlwZSA9IDA7CisgIG1iLT5lbmRfb2Zmc2V0X3RvcCA9IDA7CisgIG1iLT5za2lwX2FyZ19jb3VudCA9IDA7CisgIHJjID0gbWF0Y2goc3RhcnRfbWF0Y2gsIG1iLT5zdGFydF9jb2RlLCBzdGFydF9tYXRjaCwgMiwgbWIsIE5VTEwsIDApOworCisgIGlmIChtYi0+aGl0ZW5kICYmIHN0YXJ0X3BhcnRpYWwgPT0gTlVMTCkKKyAgICB7CisgICAgc3RhcnRfcGFydGlhbCA9IG1iLT5zdGFydF91c2VkX3B0cjsKKyAgICBtYXRjaF9wYXJ0aWFsID0gc3RhcnRfbWF0Y2g7CisgICAgfQorCisgIHN3aXRjaChyYykKKyAgICB7CisgICAgLyogSWYgTUFUQ0hfU0tJUF9BUkcgcmVhY2hlcyB0aGlzIGxldmVsIGl0IG1lYW5zIHRoYXQgYSBNQVJLIHRoYXQgbWF0Y2hlZAorICAgIHRoZSBTS0lQJ3MgYXJnIHdhcyBub3QgZm91bmQuIEluIHRoaXMgY2lyY3Vtc3RhbmNlLCBQZXJsIGlnbm9yZXMgdGhlIFNLSVAKKyAgICBlbnRpcmVseS4gVGhlIG9ubHkgd2F5IHdlIGNhbiBkbyB0aGF0IGlzIHRvIHJlLWRvIHRoZSBtYXRjaCBhdCB0aGUgc2FtZQorICAgIHBvaW50LCB3aXRoIGEgZmxhZyB0byBmb3JjZSBTS0lQIHdpdGggYW4gYXJndW1lbnQgdG8gYmUgaWdub3JlZC4gSnVzdAorICAgIHRyZWF0aW5nIHRoaXMgY2FzZSBhcyBOT01BVENIIGRvZXMgbm90IHdvcmsgYmVjYXVzZSBpdCBkb2VzIG5vdCBjaGVjayBvdGhlcgorICAgIGFsdGVybmF0aXZlcyBpbiBwYXR0ZXJucyBzdWNoIGFzIEEoKlNLSVA6QSlCfEFDIHdoZW4gdGhlIHN1YmplY3QgaXMgQUMuICovCisKKyAgICBjYXNlIE1BVENIX1NLSVBfQVJHOgorICAgIG5ld19zdGFydF9tYXRjaCA9IHN0YXJ0X21hdGNoOworICAgIG1iLT5pZ25vcmVfc2tpcF9hcmcgPSBtYi0+c2tpcF9hcmdfY291bnQ7CisgICAgYnJlYWs7CisKKyAgICAvKiBTS0lQIHBhc3NlcyBiYWNrIHRoZSBuZXh0IHN0YXJ0aW5nIHBvaW50IGV4cGxpY2l0bHksIGJ1dCBpZiBpdCBpcyBubworICAgIGdyZWF0ZXIgdGhhbiB0aGUgbWF0Y2ggd2UgaGF2ZSBqdXN0IGRvbmUsIHRyZWF0IGl0IGFzIE5PTUFUQ0guICovCisKKyAgICBjYXNlIE1BVENIX1NLSVA6CisgICAgaWYgKG1iLT5zdGFydF9tYXRjaF9wdHIgPiBzdGFydF9tYXRjaCkKKyAgICAgIHsKKyAgICAgIG5ld19zdGFydF9tYXRjaCA9IG1iLT5zdGFydF9tYXRjaF9wdHI7CisgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAvKiBGYWxsIHRocm91Z2ggKi8KKworICAgIC8qIE5PTUFUQ0ggYW5kIFBSVU5FIGFkdmFuY2UgYnkgb25lIGNoYXJhY3Rlci4gVEhFTiBhdCB0aGlzIGxldmVsIGFjdHMKKyAgICBleGFjdGx5IGxpa2UgUFJVTkUuIFVuc2V0IGlnbm9yZSBTS0lQLXdpdGgtYXJndW1lbnQuICovCisKKyAgICBjYXNlIE1BVENIX05PTUFUQ0g6CisgICAgY2FzZSBNQVRDSF9QUlVORToKKyAgICBjYXNlIE1BVENIX1RIRU46CisgICAgbWItPmlnbm9yZV9za2lwX2FyZyA9IDA7CisgICAgbmV3X3N0YXJ0X21hdGNoID0gc3RhcnRfbWF0Y2ggKyAxOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmICh1dGYpCisgICAgICBBQ1JPU1NDSEFSKG5ld19zdGFydF9tYXRjaCA8IGVuZF9zdWJqZWN0LCAqbmV3X3N0YXJ0X21hdGNoLAorICAgICAgICBuZXdfc3RhcnRfbWF0Y2grKyk7CisjZW5kaWYKKyAgICBicmVhazsKKworICAgIC8qIENPTU1JVCBkaXNhYmxlcyB0aGUgYnVtcGFsb25nLCBidXQgb3RoZXJ3aXNlIGJlaGF2ZXMgYXMgTk9NQVRDSC4gKi8KKworICAgIGNhc2UgTUFUQ0hfQ09NTUlUOgorICAgIHJjID0gTUFUQ0hfTk9NQVRDSDsKKyAgICBnb3RvIEVORExPT1A7CisKKyAgICAvKiBBbnkgb3RoZXIgcmV0dXJuIGlzIGVpdGhlciBhIG1hdGNoLCBvciBzb21lIGtpbmQgb2YgZXJyb3IuICovCisKKyAgICBkZWZhdWx0OgorICAgIGdvdG8gRU5ETE9PUDsKKyAgICB9CisKKyAgLyogQ29udHJvbCByZWFjaGVzIGhlcmUgZm9yIHRoZSB2YXJpb3VzIHR5cGVzIG9mICJubyBtYXRjaCBhdCB0aGlzIHBvaW50IgorICByZXN1bHQuIFJlc2V0IHRoZSBjb2RlIHRvIE1BVENIX05PTUFUQ0ggZm9yIHN1YnNlcXVlbnQgY2hlY2tpbmcuICovCisKKyAgcmMgPSBNQVRDSF9OT01BVENIOworCisgIC8qIElmIFBDUkUyX0ZJUlNUTElORSBpcyBzZXQsIHRoZSBtYXRjaCBtdXN0IGhhcHBlbiBiZWZvcmUgb3IgYXQgdGhlIGZpcnN0CisgIG5ld2xpbmUgaW4gdGhlIHN1YmplY3QgKHRob3VnaCBpdCBtYXkgY29udGludWUgb3ZlciB0aGUgbmV3bGluZSkuIFRoZXJlZm9yZSwKKyAgaWYgd2UgaGF2ZSBqdXN0IGZhaWxlZCB0byBtYXRjaCwgc3RhcnRpbmcgYXQgYSBuZXdsaW5lLCBkbyBub3QgY29udGludWUuICovCisKKyAgaWYgKGZpcnN0bGluZSAmJiBJU19ORVdMSU5FKHN0YXJ0X21hdGNoKSkgYnJlYWs7CisKKyAgLyogQWR2YW5jZSB0byBuZXcgbWF0Y2hpbmcgcG9zaXRpb24gKi8KKworICBzdGFydF9tYXRjaCA9IG5ld19zdGFydF9tYXRjaDsKKworICAvKiBCcmVhayB0aGUgbG9vcCBpZiB0aGUgcGF0dGVybiBpcyBhbmNob3JlZCBvciBpZiB3ZSBoYXZlIHBhc3NlZCB0aGUgZW5kIG9mCisgIHRoZSBzdWJqZWN0LiAqLworCisgIGlmIChhbmNob3JlZCB8fCBzdGFydF9tYXRjaCA+IGVuZF9zdWJqZWN0KSBicmVhazsKKworICAvKiBJZiB3ZSBoYXZlIGp1c3QgcGFzc2VkIGEgQ1IgYW5kIHdlIGFyZSBub3cgYXQgYSBMRiwgYW5kIHRoZSBwYXR0ZXJuIGRvZXMKKyAgbm90IGNvbnRhaW4gYW55IGV4cGxpY2l0IG1hdGNoZXMgZm9yIFxyIG9yIFxuLCBhbmQgdGhlIG5ld2xpbmUgb3B0aW9uIGlzIENSTEYKKyAgb3IgQU5ZIG9yIEFOWUNSTEYsIGFkdmFuY2UgdGhlIG1hdGNoIHBvc2l0aW9uIGJ5IG9uZSBtb3JlIGNvZGUgdW5pdC4gSW4KKyAgbm9ybWFsIG1hdGNoaW5nIHN0YXJ0X21hdGNoIHdpbGwgYXdheXMgYmUgZ3JlYXRlciB0aGFuIHRoZSBmaXJzdCBwb3NpdGlvbiBhdAorICB0aGlzIHN0YWdlLCBidXQgYSBmYWlsZWQgKlNLSVAgY2FuIGNhdXNlIGEgcmV0dXJuIGF0IHRoZSBzYW1lIHBvaW50LCB3aGljaCBpcworICB3aHkgdGhlIGZpcnN0IHRlc3QgZXhpc3RzLiAqLworCisgIGlmIChzdGFydF9tYXRjaCA+IHN1YmplY3QgKyBzdGFydF9vZmZzZXQgJiYKKyAgICAgIHN0YXJ0X21hdGNoWy0xXSA9PSBDSEFSX0NSICYmCisgICAgICBzdGFydF9tYXRjaCA8IGVuZF9zdWJqZWN0ICYmCisgICAgICAqc3RhcnRfbWF0Y2ggPT0gQ0hBUl9OTCAmJgorICAgICAgKHJlLT5mbGFncyAmIFBDUkUyX0hBU0NST1JMRikgPT0gMCAmJgorICAgICAgICAobWItPm5sdHlwZSA9PSBOTFRZUEVfQU5ZIHx8CisgICAgICAgICBtYi0+bmx0eXBlID09IE5MVFlQRV9BTllDUkxGIHx8CisgICAgICAgICBtYi0+bmxsZW4gPT0gMikpCisgICAgc3RhcnRfbWF0Y2grKzsKKworICBtYi0+bWFyayA9IE5VTEw7ICAgLyogUmVzZXQgZm9yIHN0YXJ0IG9mIG5leHQgbWF0Y2ggYXR0ZW1wdCAqLworICB9ICAgICAgICAgICAgICAgICAgLyogRW5kIG9mIGZvcig7OykgImJ1bXBhbG9uZyIgbG9vcCAqLworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qIFdoZW4gd2UgcmVhY2ggaGVyZSwgb25lIG9mIHRoZSBzdG9wcGluZyBjb25kaXRpb25zIGlzIHRydWU6CisKKygxKSBUaGUgbWF0Y2ggc3VjY2VlZGVkLCBlaXRoZXIgY29tcGxldGVseSwgb3IgcGFydGlhbGx5OworCisoMikgVGhlIHBhdHRlcm4gaXMgYW5jaG9yZWQgb3IgdGhlIG1hdGNoIHdhcyBmYWlsZWQgYnkgKCpDT01NSVQpOworCisoMykgV2UgYXJlIHBhc3QgdGhlIGVuZCBvZiB0aGUgc3ViamVjdCBvciB0aGUgYnVtcGFsb25nIGxpbWl0OworCisoNCkgUENSRTJfRklSU1RMSU5FIGlzIHNldCBhbmQgd2UgaGF2ZSBmYWlsZWQgdG8gbWF0Y2ggYXQgYSBuZXdsaW5lLCBiZWNhdXNlCisgICAgdGhpcyBvcHRpb24gcmVxdWVzdHMgdGhhdCBhIG1hdGNoIG9jY3VyIGF0IG9yIGJlZm9yZSB0aGUgZmlyc3QgbmV3bGluZSBpbgorICAgIHRoZSBzdWJqZWN0LgorCisoNSkgU29tZSBraW5kIG9mIGVycm9yIG9jY3VycmVkLgorCisqLworCitFTkRMT09QOgorCisjaWZkZWYgSEVBUF9NQVRDSF9SRUNVUlNFCityZWxlYXNlX21hdGNoX2hlYXBmcmFtZXMoJmZyYW1lX3plcm8sIG1iKTsKKyNlbmRpZgorCisvKiBSZWxlYXNlIGFueSBmcmFtZXMgdGhhdCB3ZXJlIHNhdmVkIGZyb20gcmVjdXJzaW9ucy4gKi8KKword2hpbGUgKG1iLT5vdmVjc2F2ZV9jaGFpbiAhPSBOVUxMKQorICB7CisgIG92ZWNzYXZlX2ZyYW1lICp0aGlzID0gbWItPm92ZWNzYXZlX2NoYWluOworICBtYi0+b3ZlY3NhdmVfY2hhaW4gPSB0aGlzLT5uZXh0OworICBtYi0+bWVtY3RsLmZyZWUodGhpcywgbWItPm1lbWN0bC5tZW1vcnlfZGF0YSk7CisgIH0KKworLyogRmlsbCBpbiBmaWVsZHMgdGhhdCBhcmUgYWx3YXlzIHJldHVybmVkIGluIHRoZSBtYXRjaCBkYXRhLiAqLworCittYXRjaF9kYXRhLT5jb2RlID0gcmU7CittYXRjaF9kYXRhLT5zdWJqZWN0ID0gc3ViamVjdDsKK21hdGNoX2RhdGEtPm1hcmsgPSBtYi0+bWFyazsKK21hdGNoX2RhdGEtPm1hdGNoZWRieSA9IFBDUkUyX01BVENIRURCWV9JTlRFUlBSRVRFUjsKKworLyogSGFuZGxlIGEgZnVsbHkgc3VjY2Vzc2Z1bCBtYXRjaC4gKi8KKworaWYgKHJjID09IE1BVENIX01BVENIIHx8IHJjID09IE1BVENIX0FDQ0VQVCkKKyAgeworICB1aW50MzJfdCBhcmdfb2Zmc2V0X21heCA9IDIgKiBtYXRjaF9kYXRhLT5vdmVjY291bnQ7CisKKyAgLyogV2hlbiB0aGUgb2Zmc2V0IHZlY3RvciBpcyBiaWcgZW5vdWdoIHRvIGRlYWwgd2l0aCBhbnkgYmFja3JlZmVyZW5jZXMsCisgIGNhcHR1cmVkIHN1YnN0cmluZyBvZmZzZXRzIHdpbGwgYWxyZWFkeSBiZSBzZXQgdXAuIEluIHRoZSBjYXNlIHdoZXJlIHdlIGhhZAorICB0byBnZXQgc29tZSBsb2NhbCBtZW1vcnkgdG8gaG9sZCBvZmZzZXRzIGZvciBiYWNrcmVmZXJlbmNlIHByb2Nlc3NpbmcsIGNvcHkKKyAgdGhvc2UgdGhhdCB3ZSBjYW4uIEluIHRoaXMgY2FzZSB0aGVyZSBuZWVkIG5vdCBiZSBvdmVyZmxvdyBpZiBjZXJ0YWluIHBhcnRzCisgIG9mIHRoZSBwYXR0ZXJuIHdlcmUgbm90IHVzZWQsIGV2ZW4gdGhvdWdoIHRoZXJlIGFyZSBtb3JlIGNhcHR1cmluZworICBwYXJlbnRoZXNlcyB0aGFuIHZlY3RvciBzbG90cy4gKi8KKworICBpZiAodXNpbmdfdGVtcG9yYXJ5X29mZnNldHMpCisgICAgeworICAgIGlmIChhcmdfb2Zmc2V0X21heCA+PSA0KQorICAgICAgeworICAgICAgbWVtY3B5KG1hdGNoX2RhdGEtPm92ZWN0b3IgKyAyLCBtYi0+b3ZlY3RvciArIDIsCisgICAgICAgIChhcmdfb2Zmc2V0X21heCAtIDIpICogc2l6ZW9mKFBDUkUyX1NJWkUpKTsKKyAgICAgIH0KKyAgICBpZiAobWItPmVuZF9vZmZzZXRfdG9wID4gYXJnX29mZnNldF9tYXgpIG1iLT5jYXB0dXJlX2xhc3QgfD0gT1ZGTEJJVDsKKyAgICBtYi0+bWVtY3RsLmZyZWUobWItPm92ZWN0b3IsIG1iLT5tZW1jdGwubWVtb3J5X2RhdGEpOworICAgIH0KKworICAvKiBTZXQgdGhlIHJldHVybiBjb2RlIHRvIHRoZSBudW1iZXIgb2YgY2FwdHVyZWQgc3RyaW5ncywgb3IgMCBpZiB0aGVyZSB3ZXJlCisgIHRvbyBtYW55IHRvIGZpdCBpbnRvIHRoZSBvdmVjdG9yLiAqLworCisgIG1hdGNoX2RhdGEtPnJjID0gKChtYi0+Y2FwdHVyZV9sYXN0ICYgT1ZGTEJJVCkgIT0gMCk/CisgICAgMCA6IG1iLT5lbmRfb2Zmc2V0X3RvcC8yOworCisgIC8qIElmIHRoZXJlIGlzIHNwYWNlIGluIHRoZSBvZmZzZXQgdmVjdG9yLCBzZXQgYW55IHBhaXJzIHRoYXQgZm9sbG93IHRoZQorICBoaWdoZXN0LW51bWJlcmVkIGNhcHR1cmVkIHN0cmluZyBidXQgYXJlIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGNhcHR1cmluZworICBncm91cHMgaW4gdGhlIHBhdHRlcm4gKGFuZCBhcmUgd2l0aGluIHRoZSBvdmVjdG9yKSB0byBQQ1JFMl9VTlNFVC4gSXQgaXMKKyAgZG9jdW1lbnRlZCB0aGF0IHRoaXMgaGFwcGVucy4gSW4gZWFybGllciB2ZXJzaW9ucywgdGhlIHdob2xlIHNldCBvZiBwb3RlbnRpYWwKKyAgY2FwdHVyaW5nIG9mZnNldHMgd2FzIGluaXRpYWxpemVkIGVhY2ggdGltZSByb3VuZCB0aGUgbG9vcCwgYnV0IHRoaXMgaXMKKyAgaGFuZGxlZCBkaWZmZXJlbnRseSBub3cuICJHYXBzIiBhcmUgc2V0IHRvIFBDUkUyX1VOU0VUIGR5bmFtaWNhbGx5IGluc3RlYWQKKyAgKHRoaXMgZml4ZWQgYSBidWcpLiBUaHVzLCBpdCBpcyBvbmx5IHRob3NlIGF0IHRoZSBlbmQgdGhhdCBuZWVkIHNldHRpbmcgaGVyZS4KKyAgV2UgY2FuJ3QganVzdCBtYXJrIHRoZW0gYWxsIHVuc2V0IGF0IHRoZSBzdGFydCBvZiB0aGUgd2hvbGUgdGhpbmcgYmVjYXVzZQorICB0aGV5IG1heSBnZXQgc2V0IGluIG9uZSBicmFuY2ggdGhhdCBpcyBub3QgdGhlIGZpbmFsIG1hdGNoaW5nIGJyYW5jaC4gKi8KKworICBpZiAobWItPmVuZF9vZmZzZXRfdG9wLzIgPD0gcmUtPnRvcF9icmFja2V0KQorICAgIHsKKyAgICByZWdpc3RlciBQQ1JFMl9TSVpFICppcHRyLCAqaWVuZDsKKyAgICBpbnQgcmVzZXRjb3VudCA9IHJlLT50b3BfYnJhY2tldCArIDE7CisgICAgaWYgKHJlc2V0Y291bnQgPiBtYXRjaF9kYXRhLT5vdmVjY291bnQpIHJlc2V0Y291bnQgPSBtYXRjaF9kYXRhLT5vdmVjY291bnQ7CisgICAgaXB0ciA9IG1hdGNoX2RhdGEtPm92ZWN0b3IgKyBtYi0+ZW5kX29mZnNldF90b3A7CisgICAgaWVuZCA9IG1hdGNoX2RhdGEtPm92ZWN0b3IgKyAyICogcmVzZXRjb3VudDsKKyAgICB3aGlsZSAoaXB0ciA8IGllbmQpICppcHRyKysgPSBQQ1JFMl9VTlNFVDsKKyAgICB9CisKKyAgLyogSWYgdGhlcmUgaXMgc3BhY2UsIHNldCB1cCB0aGUgd2hvbGUgdGhpbmcgYXMgc3Vic3RyaW5nIDAuIFRoZSB2YWx1ZSBvZgorICBtYi0+c3RhcnRfbWF0Y2hfcHRyIG1pZ2h0IGJlIG1vZGlmaWVkIGlmIFxLIHdhcyBlbmNvdW50ZXJlZCBvbiB0aGUgc3VjY2VzcworICBtYXRjaGluZyBwYXRoLiAqLworCisgIGlmIChtYXRjaF9kYXRhLT5vdmVjY291bnQgPCAxKSByYyA9IDA7IGVsc2UKKyAgICB7CisgICAgbWF0Y2hfZGF0YS0+b3ZlY3RvclswXSA9IG1iLT5zdGFydF9tYXRjaF9wdHIgLSBtYi0+c3RhcnRfc3ViamVjdDsKKyAgICBtYXRjaF9kYXRhLT5vdmVjdG9yWzFdID0gbWItPmVuZF9tYXRjaF9wdHIgLSBtYi0+c3RhcnRfc3ViamVjdDsKKyAgICB9CisKKyAgLyogU2V0IHRoZSByZW1haW5pbmcgcmV0dXJuZWQgdmFsdWVzICovCisKKyAgbWF0Y2hfZGF0YS0+c3RhcnRjaGFyID0gc3RhcnRfbWF0Y2ggLSBzdWJqZWN0OworICBtYXRjaF9kYXRhLT5sZWZ0Y2hhciA9IG1iLT5zdGFydF91c2VkX3B0ciAtIHN1YmplY3Q7CisgIG1hdGNoX2RhdGEtPnJpZ2h0Y2hhciA9ICgobWItPmxhc3RfdXNlZF9wdHIgPiBtYi0+ZW5kX21hdGNoX3B0cik/CisgICAgbWItPmxhc3RfdXNlZF9wdHIgOiBtYi0+ZW5kX21hdGNoX3B0cikgLSBzdWJqZWN0OworICByZXR1cm4gbWF0Y2hfZGF0YS0+cmM7CisgIH0KKworLyogQ29udHJvbCBnZXRzIGhlcmUgaWYgdGhlcmUgaGFzIGJlZW4gYSBwYXJ0aWFsIG1hdGNoLCBhbiBlcnJvciwgb3IgaWYgdGhlCitvdmVyYWxsIG1hdGNoIGF0dGVtcHQgaGFzIGZhaWxlZCBhdCBhbGwgcGVybWl0dGVkIHN0YXJ0aW5nIHBvc2l0aW9ucy4gQW55IG1hcmsKK2RhdGEgaXMgaW4gdGhlIG5vbWF0Y2hfbWFyayBmaWVsZC4gKi8KKworbWF0Y2hfZGF0YS0+bWFyayA9IG1iLT5ub21hdGNoX21hcms7CisKKy8qIEZvciBhbnl0aGluZyBvdGhlciB0aGFuIG5vbWF0Y2ggb3IgcGFydGlhbCBtYXRjaCwganVzdCByZXR1cm4gdGhlIGNvZGUuICovCisKK2lmIChyYyAhPSBNQVRDSF9OT01BVENIICYmIHJjICE9IFBDUkUyX0VSUk9SX1BBUlRJQUwpCisgIG1hdGNoX2RhdGEtPnJjID0gcmM7CisKKy8qIEVsc2UgaGFuZGxlIGEgcGFydGlhbCBtYXRjaC4gKi8KKworZWxzZSBpZiAobWF0Y2hfcGFydGlhbCAhPSBOVUxMKQorICB7CisgIGlmIChtYXRjaF9kYXRhLT5vdmVjY291bnQgPiAwKQorICAgIHsKKyAgICBtYXRjaF9kYXRhLT5vdmVjdG9yWzBdID0gbWF0Y2hfcGFydGlhbCAtIHN1YmplY3Q7CisgICAgbWF0Y2hfZGF0YS0+b3ZlY3RvclsxXSA9IGVuZF9zdWJqZWN0IC0gc3ViamVjdDsKKyAgICB9CisgIG1hdGNoX2RhdGEtPnN0YXJ0Y2hhciA9IG1hdGNoX3BhcnRpYWwgLSBzdWJqZWN0OworICBtYXRjaF9kYXRhLT5sZWZ0Y2hhciA9IHN0YXJ0X3BhcnRpYWwgLSBzdWJqZWN0OworICBtYXRjaF9kYXRhLT5yaWdodGNoYXIgPSBlbmRfc3ViamVjdCAtIHN1YmplY3Q7CisgIG1hdGNoX2RhdGEtPnJjID0gUENSRTJfRVJST1JfUEFSVElBTDsKKyAgfQorCisvKiBFbHNlIHRoaXMgaXMgdGhlIGNsYXNzaWMgbm9tYXRjaCBjYXNlLiAqLworCitlbHNlIG1hdGNoX2RhdGEtPnJjID0gUENSRTJfRVJST1JfTk9NQVRDSDsKKworLyogRnJlZSBhbnkgdGVtcG9yYXJ5IG9mZnNldHMuICovCisKK2lmICh1c2luZ190ZW1wb3Jhcnlfb2Zmc2V0cykKKyAgbWItPm1lbWN0bC5mcmVlKG1iLT5vdmVjdG9yLCBtYi0+bWVtY3RsLm1lbW9yeV9kYXRhKTsKK3JldHVybiBtYXRjaF9kYXRhLT5yYzsKK30KKworLyogRW5kIG9mIHBjcmUyX21hdGNoLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9tYXRjaF9kYXRhLmMgYi9kaXN0Mi9zcmMvcGNyZTJfbWF0Y2hfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YWM5OTgKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJfbWF0Y2hfZGF0YS5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDcmVhdGUgYSBtYXRjaCBkYXRhIGJsb2NrIGdpdmVuIG92ZWN0b3Igc2l6ZSAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQSBtaW5pbXVtIG9mIDEgaXMgaW1wb3NlZCBvbiB0aGUgbnVtYmVyIG9mIG92ZWN0b3IgdHJpcGxldHMuICovCisKK1BDUkUyX0VYUF9ERUZOIHBjcmUyX21hdGNoX2RhdGEgKiBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX21hdGNoX2RhdGFfY3JlYXRlKHVpbnQzMl90IG92ZWNjb3VudCwgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCkKK3sKK3BjcmUyX21hdGNoX2RhdGEgKnlpZWxkOworaWYgKG92ZWNjb3VudCA8IDEpIG92ZWNjb3VudCA9IDE7Cit5aWVsZCA9IFBSSVYobWVtY3RsX21hbGxvYykoCisgIHNpemVvZihwY3JlMl9tYXRjaF9kYXRhKSArIDMqb3ZlY2NvdW50KnNpemVvZihQQ1JFMl9TSVpFKSwKKyAgKHBjcmUyX21lbWN0bCAqKWdjb250ZXh0KTsKK2lmICh5aWVsZCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKK3lpZWxkLT5vdmVjY291bnQgPSBvdmVjY291bnQ7CityZXR1cm4geWllbGQ7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ3JlYXRlIGEgbWF0Y2ggZGF0YSBibG9jayB1c2luZyBwYXR0ZXJuIGRhdGEgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIElmIG5vIGNvbnRleHQgaXMgc3VwcGxpZWQsIHVzZSB0aGUgbWVtb3J5IGFsbG9jYXRvciBmcm9tIHRoZSBjb2RlLiAqLworCitQQ1JFMl9FWFBfREVGTiBwY3JlMl9tYXRjaF9kYXRhICogUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4oY29uc3QgcGNyZTJfY29kZSAqY29kZSwKKyAgcGNyZTJfZ2VuZXJhbF9jb250ZXh0ICpnY29udGV4dCkKK3sKK2lmIChnY29udGV4dCA9PSBOVUxMKSBnY29udGV4dCA9IChwY3JlMl9nZW5lcmFsX2NvbnRleHQgKiljb2RlOworcmV0dXJuIHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlKCgocGNyZTJfcmVhbF9jb2RlICopY29kZSktPnRvcF9icmFja2V0ICsgMSwKKyAgZ2NvbnRleHQpOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICBGcmVlIGEgbWF0Y2ggZGF0YSBibG9jayAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitQQ1JFMl9FWFBfREVGTiB2b2lkIFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEpCit7CitpZiAobWF0Y2hfZGF0YSAhPSBOVUxMKQorICBtYXRjaF9kYXRhLT5tZW1jdGwuZnJlZShtYXRjaF9kYXRhLCBtYXRjaF9kYXRhLT5tZW1jdGwubWVtb3J5X2RhdGEpOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICBHZXQgbGFzdCBtYXJrIGluIG1hdGNoICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitQQ1JFMl9FWFBfREVGTiBQQ1JFMl9TUFRSIFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfZ2V0X21hcmsocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSkKK3sKK3JldHVybiBtYXRjaF9kYXRhLT5tYXJrOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgR2V0IHBvaW50ZXIgdG8gb3ZlY3RvciAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitQQ1JFMl9FWFBfREVGTiBQQ1JFMl9TSVpFICogUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyKHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEpCit7CityZXR1cm4gbWF0Y2hfZGF0YS0+b3ZlY3RvcjsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgIEdldCBudW1iZXIgb2Ygb3ZlY3RvciBzbG90cyAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworUENSRTJfRVhQX0RFRk4gdWludDMyX3QgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudChwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhKQoreworcmV0dXJuIG1hdGNoX2RhdGEtPm92ZWNjb3VudDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgR2V0IHN0YXJ0aW5nIGNvZGUgdW5pdCBpbiBtYXRjaCAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworUENSRTJfRVhQX0RFRk4gUENSRTJfU0laRSBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX2dldF9zdGFydGNoYXIocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSkKK3sKK3JldHVybiBtYXRjaF9kYXRhLT5zdGFydGNoYXI7Cit9CisKKy8qIEVuZCBvZiBwY3JlMl9tYXRjaF9kYXRhLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9uZXdsaW5lLmMgYi9kaXN0Mi9zcmMvcGNyZTJfbmV3bGluZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlOTM2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJfbmV3bGluZS5jCkBAIC0wLDAgKzEsMjQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworLyogVGhpcyBtb2R1bGUgY29udGFpbnMgaW50ZXJuYWwgZnVuY3Rpb25zIGZvciB0ZXN0aW5nIG5ld2xpbmVzIHdoZW4gbW9yZSB0aGFuCitvbmUga2luZCBvZiBuZXdsaW5lIGlzIHRvIGJlIHJlY29nbml6ZWQuIFdoZW4gYSBuZXdsaW5lIGlzIGZvdW5kLCBpdHMgbGVuZ3RoIGlzCityZXR1cm5lZC4gSW4gcHJpbmNpcGxlLCB3ZSBjb3VsZCBpbXBsZW1lbnQgc2V2ZXJhbCBuZXdsaW5lICJ0eXBlcyIsIGVhY2gKK3JlZmVycmluZyB0byBhIGRpZmZlcmVudCBzZXQgb2YgbmV3bGluZSBjaGFyYWN0ZXJzLiBBdCBwcmVzZW50LCBQQ1JFMiBzdXBwb3J0cworb25seSBOTFRZUEVfRklYRUQsIHdoaWNoIGdldHMgaGFuZGxlZCB3aXRob3V0IHRoZXNlIGZ1bmN0aW9ucywgTkxUWVBFX0FOWUNSTEYsCithbmQgTkxUWVBFX0FOWS4gVGhlIGZ1bGwgbGlzdCBvZiBVbmljb2RlIG5ld2xpbmUgY2hhcmFjdGVycyBpcyB0YWtlbiBmcm9tCitodHRwOi8vdW5pY29kZS5vcmcvdW5pY29kZS9yZXBvcnRzL3RyMTgvLiAqLworCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInBjcmUyX2ludGVybmFsLmgiCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIENoZWNrIGZvciBuZXdsaW5lIGF0IGdpdmVuIHBvc2l0aW9uICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkgdmlhIHRoZSBJU19ORVdMSU5FIG1hY3JvLCB3aGljaCBkb2VzIHNvIG9ubHkKK3doZW4gdGhlIG5ld2xpbmUgdHlwZSBpcyBOTFRZUEVfQU5ZIG9yIE5MVFlQRV9BTllDUkxGLiBUaGUgY2FzZSBvZiBhIGZpeGVkCituZXdsaW5lIChOTFRZUEVfRklYRUQpIGlzIGhhbmRsZWQgaW5saW5lLiBJdCBpcyBndWFyYW50ZWVkIHRoYXQgdGhlIGNvZGUgdW5pdAorcG9pbnRlZCB0byBieSBwdHIgaXMgbGVzcyB0aGFuIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4KKworQXJndW1lbnRzOgorICBwdHIgICAgICAgICAgcG9pbnRlciB0byBwb3NzaWJsZSBuZXdsaW5lCisgIHR5cGUgICAgICAgICB0aGUgbmV3bGluZSB0eXBlCisgIGVuZHB0ciAgICAgICBwb2ludGVyIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZworICBsZW5wdHIgICAgICAgd2hlcmUgdG8gcmV0dXJuIHRoZSBsZW5ndGgKKyAgdXRmICAgICAgICAgIFRSVUUgaWYgaW4gdXRmIG1vZGUKKworUmV0dXJuczogICAgICAgVFJVRSBvciBGQUxTRQorKi8KKworQk9PTAorUFJJVihpc19uZXdsaW5lKShQQ1JFMl9TUFRSIHB0ciwgdWludDMyX3QgdHlwZSwgUENSRTJfU1BUUiBlbmRwdHIsCisgIHVpbnQzMl90ICpsZW5wdHIsIEJPT0wgdXRmKQorewordWludDMyX3QgYzsKKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQoraWYgKHV0ZikgeyBHRVRDSEFSKGMsIHB0cik7IH0gZWxzZSBjID0gKnB0cjsKKyNlbHNlCisodm9pZCl1dGY7CitjID0gKnB0cjsKKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisKK2lmICh0eXBlID09IE5MVFlQRV9BTllDUkxGKSBzd2l0Y2goYykKKyAgeworICBjYXNlIENIQVJfTEY6CisgICpsZW5wdHIgPSAxOworICByZXR1cm4gVFJVRTsKKworICBjYXNlIENIQVJfQ1I6CisgICpsZW5wdHIgPSAocHRyIDwgZW5kcHRyIC0gMSAmJiBwdHJbMV0gPT0gQ0hBUl9MRik/IDIgOiAxOworICByZXR1cm4gVFJVRTsKKworICBkZWZhdWx0OgorICByZXR1cm4gRkFMU0U7CisgIH0KKworLyogTkxUWVBFX0FOWSAqLworCitlbHNlIHN3aXRjaChjKQorICB7CisjaWZkZWYgRUJDRElDCisgIGNhc2UgQ0hBUl9ORUw6CisjZW5kaWYKKyAgY2FzZSBDSEFSX0xGOgorICBjYXNlIENIQVJfVlQ6CisgIGNhc2UgQ0hBUl9GRjoKKyAgKmxlbnB0ciA9IDE7CisgIHJldHVybiBUUlVFOworCisgIGNhc2UgQ0hBUl9DUjoKKyAgKmxlbnB0ciA9IChwdHIgPCBlbmRwdHIgLSAxICYmIHB0clsxXSA9PSBDSEFSX0xGKT8gMiA6IDE7CisgIHJldHVybiBUUlVFOworCisjaWZuZGVmIEVCQ0RJQworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgIGNhc2UgQ0hBUl9ORUw6CisgICpsZW5wdHIgPSB1dGY/IDIgOiAxOworICByZXR1cm4gVFJVRTsKKworICBjYXNlIDB4MjAyODogICAvKiBMUyAqLworICBjYXNlIDB4MjAyOTogICAvKiBQUyAqLworICAqbGVucHRyID0gMzsKKyAgcmV0dXJuIFRSVUU7CisKKyNlbHNlICAvKiAxNi1iaXQgb3IgMzItYml0IGNvZGUgdW5pdHMgKi8KKyAgY2FzZSBDSEFSX05FTDoKKyAgY2FzZSAweDIwMjg6ICAgLyogTFMgKi8KKyAgY2FzZSAweDIwMjk6ICAgLyogUFMgKi8KKyAgKmxlbnB0ciA9IDE7CisgIHJldHVybiBUUlVFOworI2VuZGlmCisjZW5kaWYgLyogTm90IEVCQ0RJQyAqLworCisgIGRlZmF1bHQ6CisgIHJldHVybiBGQUxTRTsKKyAgfQorfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgIENoZWNrIGZvciBuZXdsaW5lIGF0IHByZXZpb3VzIHBvc2l0aW9uICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHZpYSB0aGUgV0FTX05FV0xJTkUgbWFjcm8sIHdoaWNoIGRvZXMgc28gb25seQord2hlbiB0aGUgbmV3bGluZSB0eXBlIGlzIE5MVFlQRV9BTlkgb3IgTkxUWVBFX0FOWUNSTEYuIFRoZSBjYXNlIG9mIGEgZml4ZWQKK25ld2xpbmUgKE5MVFlQRV9GSVhFRCkgaXMgaGFuZGxlZCBpbmxpbmUuIEl0IGlzIGd1YXJhbnRlZWQgdGhhdCB0aGUgaW5pdGlhbAordmFsdWUgb2YgcHRyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyB0aGF0IGlzIGJlaW5nIHByb2Nlc3NlZC4KKworQXJndW1lbnRzOgorICBwdHIgICAgICAgICAgcG9pbnRlciB0byBwb3NzaWJsZSBuZXdsaW5lCisgIHR5cGUgICAgICAgICB0aGUgbmV3bGluZSB0eXBlCisgIHN0YXJ0cHRyICAgICBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nCisgIGxlbnB0ciAgICAgICB3aGVyZSB0byByZXR1cm4gdGhlIGxlbmd0aAorICB1dGYgICAgICAgICAgVFJVRSBpZiBpbiB1dGYgbW9kZQorCitSZXR1cm5zOiAgICAgICBUUlVFIG9yIEZBTFNFCisqLworCitCT09MCitQUklWKHdhc19uZXdsaW5lKShQQ1JFMl9TUFRSIHB0ciwgdWludDMyX3QgdHlwZSwgUENSRTJfU1BUUiBzdGFydHB0ciwKKyAgdWludDMyX3QgKmxlbnB0ciwgQk9PTCB1dGYpCit7Cit1aW50MzJfdCBjOworcHRyLS07CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK2lmICh1dGYpCisgIHsKKyAgQkFDS0NIQVIocHRyKTsKKyAgR0VUQ0hBUihjLCBwdHIpOworICB9CitlbHNlIGMgPSAqcHRyOworI2Vsc2UKKyh2b2lkKXV0ZjsKK2MgPSAqcHRyOworI2VuZGlmICAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKworaWYgKHR5cGUgPT0gTkxUWVBFX0FOWUNSTEYpIHN3aXRjaChjKQorICB7CisgIGNhc2UgQ0hBUl9MRjoKKyAgKmxlbnB0ciA9IChwdHIgPiBzdGFydHB0ciAmJiBwdHJbLTFdID09IENIQVJfQ1IpPyAyIDogMTsKKyAgcmV0dXJuIFRSVUU7CisKKyAgY2FzZSBDSEFSX0NSOgorICAqbGVucHRyID0gMTsKKyAgcmV0dXJuIFRSVUU7CisKKyAgZGVmYXVsdDoKKyAgcmV0dXJuIEZBTFNFOworICB9CisKKy8qIE5MVFlQRV9BTlkgKi8KKworZWxzZSBzd2l0Y2goYykKKyAgeworICBjYXNlIENIQVJfTEY6CisgICpsZW5wdHIgPSAocHRyID4gc3RhcnRwdHIgJiYgcHRyWy0xXSA9PSBDSEFSX0NSKT8gMiA6IDE7CisgIHJldHVybiBUUlVFOworCisjaWZkZWYgRUJDRElDCisgIGNhc2UgQ0hBUl9ORUw6CisjZW5kaWYKKyAgY2FzZSBDSEFSX1ZUOgorICBjYXNlIENIQVJfRkY6CisgIGNhc2UgQ0hBUl9DUjoKKyAgKmxlbnB0ciA9IDE7CisgIHJldHVybiBUUlVFOworCisjaWZuZGVmIEVCQ0RJQworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgIGNhc2UgQ0hBUl9ORUw6CisgICpsZW5wdHIgPSB1dGY/IDIgOiAxOworICByZXR1cm4gVFJVRTsKKworICBjYXNlIDB4MjAyODogICAvKiBMUyAqLworICBjYXNlIDB4MjAyOTogICAvKiBQUyAqLworICAqbGVucHRyID0gMzsKKyAgcmV0dXJuIFRSVUU7CisKKyNlbHNlIC8qIDE2LWJpdCBvciAzMi1iaXQgY29kZSB1bml0cyAqLworICBjYXNlIENIQVJfTkVMOgorICBjYXNlIDB4MjAyODogICAvKiBMUyAqLworICBjYXNlIDB4MjAyOTogICAvKiBQUyAqLworICAqbGVucHRyID0gMTsKKyAgcmV0dXJuIFRSVUU7CisjZW5kaWYKKyNlbmRpZiAvKiBOb3QgRUJDRElDICovCisKKyAgZGVmYXVsdDoKKyAgcmV0dXJuIEZBTFNFOworICB9Cit9CisKKy8qIEVuZCBvZiBwY3JlMl9uZXdsaW5lLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9vcmQydXRmLmMgYi9kaXN0Mi9zcmMvcGNyZTJfb3JkMnV0Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MjUyYjcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJfb3JkMnV0Zi5jCkBAIC0wLDAgKzEsMTIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIGEgZnVuY3Rpb24gdGhhdCBjb252ZXJ0cyBhIFVuaWNvZGUgY2hhcmFjdGVyIGNvZGUgcG9pbnQKK2ludG8gYSBVVEYgc3RyaW5nLiBUaGUgYmVoYXZpb3VyIGlzIGRpZmZlcmVudCBmb3IgZWFjaCBjb2RlIHVuaXQgd2lkdGguICovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKworCisvKiBJZiBTVVBQT1JUX1VOSUNPREUgaXMgbm90IGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciBiZSBjYWxsZWQuCitTdXBwbHkgYSBkdW1teSBmdW5jdGlvbiBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIGRvIG5vdCBsaWtlIGVtcHR5IHNvdXJjZQorbW9kdWxlcy4gKi8KKworI2lmbmRlZiBTVVBQT1JUX1VOSUNPREUKK3Vuc2lnbmVkIGludAorUFJJVihvcmQydXRmKSh1aW50MzJfdCBjdmFsdWUsIFBDUkUyX1VDSEFSICpidWZmZXIpCit7Cisodm9pZCkoY3ZhbHVlKTsKKyh2b2lkKShidWZmZXIpOworcmV0dXJuIDA7Cit9CisjZWxzZSAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgQ29udmVydCBjb2RlIHBvaW50IHRvIFVURiAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorQXJndW1lbnRzOgorICBjdmFsdWUgICAgIHRoZSBjaGFyYWN0ZXIgdmFsdWUKKyAgYnVmZmVyICAgICBwb2ludGVyIHRvIGJ1ZmZlciBmb3IgcmVzdWx0CisKK1JldHVybnM6ICAgICBudW1iZXIgb2YgY29kZSB1bml0cyBwbGFjZWQgaW4gdGhlIGJ1ZmZlcgorKi8KKwordW5zaWduZWQgaW50CitQUklWKG9yZDJ1dGYpKHVpbnQzMl90IGN2YWx1ZSwgUENSRTJfVUNIQVIgKmJ1ZmZlcikKK3sKKy8qIENvbnZlcnQgdG8gVVRGLTggKi8KKworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CityZWdpc3RlciBpbnQgaSwgajsKK2ZvciAoaSA9IDA7IGkgPCBQUklWKHV0ZjhfdGFibGUxX3NpemUpOyBpKyspCisgIGlmICgoaW50KWN2YWx1ZSA8PSBQUklWKHV0ZjhfdGFibGUxKVtpXSkgYnJlYWs7CitidWZmZXIgKz0gaTsKK2ZvciAoaiA9IGk7IGogPiAwOyBqLS0pCisgeworICpidWZmZXItLSA9IDB4ODAgfCAoY3ZhbHVlICYgMHgzZik7CisgY3ZhbHVlID4+PSA2OworIH0KKypidWZmZXIgPSBQUklWKHV0ZjhfdGFibGUyKVtpXSB8IGN2YWx1ZTsKK3JldHVybiBpICsgMTsKKworLyogQ29udmVydCB0byBVVEYtMTYgKi8KKworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CitpZiAoY3ZhbHVlIDw9IDB4ZmZmZikKKyAgeworICAqYnVmZmVyID0gKFBDUkUyX1VDSEFSKWN2YWx1ZTsKKyAgcmV0dXJuIDE7CisgIH0KK2N2YWx1ZSAtPSAweDEwMDAwOworKmJ1ZmZlcisrID0gMHhkODAwIHwgKGN2YWx1ZSA+PiAxMCk7CisqYnVmZmVyID0gMHhkYzAwIHwgKGN2YWx1ZSAmIDB4M2ZmKTsKK3JldHVybiAyOworCisvKiBDb252ZXJ0IHRvIFVURi0zMiAqLworCisjZWxzZQorKmJ1ZmZlciA9IChQQ1JFMl9VQ0hBUiljdmFsdWU7CityZXR1cm4gMTsKKyNlbmRpZgorfQorI2VuZGlmICAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKworLyogRW5kIG9mIHBjcmVfb3JkMnV0Zi5jICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfcGF0dGVybl9pbmZvLmMgYi9kaXN0Mi9zcmMvcGNyZTJfcGF0dGVybl9pbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIzMmE5MAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9wYXR0ZXJuX2luZm8uYwpAQCAtMCwwICsxLDQxMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQQ1JFIGlzIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHN5bnRheAorYW5kIHNlbWFudGljcyBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2Ugb2YgdGhlIFBlcmwgNSBsYW5ndWFnZS4KKworICAgICAgICAgICAgICAgICAgICAgICBXcml0dGVuIGJ5IFBoaWxpcCBIYXplbAorICAgICBPcmlnaW5hbCBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDE5OTctMjAxMiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorICAgICAgICAgTmV3IEFQSSBjb2RlIENvcHlyaWdodCAoYykgMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgInBjcmUyX2ludGVybmFsLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgIFJldHVybiBpbmZvIGFib3V0IGNvbXBpbGVkIHBhdHRlcm4gICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorQXJndW1lbnRzOgorICBjb2RlICAgICAgICAgIHBvaW50cyB0byBjb21waWxlZCBjb2RlCisgIHdoYXQgICAgICAgICAgd2hhdCBpbmZvcm1hdGlvbiBpcyByZXF1aXJlZAorICB3aGVyZSAgICAgICAgIHdoZXJlIHRvIHB1dCB0aGUgaW5mb3JtYXRpb247IGlmIE5VTEwsIHJldHVybiBsZW5ndGgKKworUmV0dXJuczogICAgICAgIDAgd2hlbiBkYXRhIHJldHVybmVkCisgICAgICAgICAgICAgICAgPiAwIHdoZW4gbGVuZ3RoIHJlcXVlc3RlZAorICAgICAgICAgICAgICAgIDwgMCBvbiBlcnJvciBvciB1bnNldCB2YWx1ZQorKi8KKworUENSRTJfRVhQX0RFRk4gaW50IFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfcGF0dGVybl9pbmZvKGNvbnN0IHBjcmUyX2NvZGUgKmNvZGUsIHVpbnQzMl90IHdoYXQsIHZvaWQgKndoZXJlKQoreworY29uc3QgcGNyZTJfcmVhbF9jb2RlICpyZSA9IChwY3JlMl9yZWFsX2NvZGUgKiljb2RlOworCitpZiAod2hlcmUgPT0gTlVMTCkgICAvKiBSZXF1ZXN0cyBmaWVsZCBsZW5ndGggKi8KKyAgeworICBzd2l0Y2god2hhdCkKKyAgICB7CisgICAgY2FzZSBQQ1JFMl9JTkZPX0FMTE9QVElPTlM6CisgICAgY2FzZSBQQ1JFMl9JTkZPX0FSR09QVElPTlM6CisgICAgY2FzZSBQQ1JFMl9JTkZPX0JBQ0tSRUZNQVg6CisgICAgY2FzZSBQQ1JFMl9JTkZPX0JTUjoKKyAgICBjYXNlIFBDUkUyX0lORk9fQ0FQVFVSRUNPVU5UOgorICAgIGNhc2UgUENSRTJfSU5GT19GSVJTVENPREVUWVBFOgorICAgIGNhc2UgUENSRTJfSU5GT19GSVJTVENPREVVTklUOgorICAgIGNhc2UgUENSRTJfSU5GT19IQVNCQUNLU0xBU0hDOgorICAgIGNhc2UgUENSRTJfSU5GT19IQVNDUk9STEY6CisgICAgY2FzZSBQQ1JFMl9JTkZPX0pDSEFOR0VEOgorICAgIGNhc2UgUENSRTJfSU5GT19MQVNUQ09ERVRZUEU6CisgICAgY2FzZSBQQ1JFMl9JTkZPX0xBU1RDT0RFVU5JVDoKKyAgICBjYXNlIFBDUkUyX0lORk9fTUFUQ0hFTVBUWToKKyAgICBjYXNlIFBDUkUyX0lORk9fTUFUQ0hMSU1JVDoKKyAgICBjYXNlIFBDUkUyX0lORk9fTUFYTE9PS0JFSElORDoKKyAgICBjYXNlIFBDUkUyX0lORk9fTUlOTEVOR1RIOgorICAgIGNhc2UgUENSRTJfSU5GT19OQU1FRU5UUllTSVpFOgorICAgIGNhc2UgUENSRTJfSU5GT19OQU1FQ09VTlQ6CisgICAgY2FzZSBQQ1JFMl9JTkZPX05FV0xJTkU6CisgICAgY2FzZSBQQ1JFMl9JTkZPX1JFQ1VSU0lPTkxJTUlUOgorICAgIHJldHVybiBzaXplb2YodWludDMyX3QpOworCisgICAgY2FzZSBQQ1JFMl9JTkZPX0ZJUlNUQklUTUFQOgorICAgIHJldHVybiBzaXplb2YoY29uc3QgdWludDhfdCAqKTsKKworICAgIGNhc2UgUENSRTJfSU5GT19KSVRTSVpFOgorICAgIGNhc2UgUENSRTJfSU5GT19TSVpFOgorICAgIHJldHVybiBzaXplb2Yoc2l6ZV90KTsKKworICAgIGNhc2UgUENSRTJfSU5GT19OQU1FVEFCTEU6CisgICAgcmV0dXJuIHNpemVvZihQQ1JFMl9TUFRSKTsKKyAgICB9CisgIH0KKworaWYgKHJlID09IE5VTEwpIHJldHVybiBQQ1JFMl9FUlJPUl9OVUxMOworCisvKiBDaGVjayB0aGF0IHRoZSBmaXJzdCBmaWVsZCBpbiB0aGUgYmxvY2sgaXMgdGhlIG1hZ2ljIG51bWJlci4gSWYgaXQgaXMgbm90LAorcmV0dXJuIHdpdGggUENSRTJfRVJST1JfQkFETUFHSUMuICovCisKK2lmIChyZS0+bWFnaWNfbnVtYmVyICE9IE1BR0lDX05VTUJFUikgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE1BR0lDOworCisvKiBDaGVjayB0aGF0IHRoaXMgcGF0dGVybiB3YXMgY29tcGlsZWQgaW4gdGhlIGNvcnJlY3QgYml0IG1vZGUgKi8KKworaWYgKChyZS0+ZmxhZ3MgJiAoUENSRTJfQ09ERV9VTklUX1dJRFRILzgpKSA9PSAwKSByZXR1cm4gUENSRTJfRVJST1JfQkFETU9ERTsKKworc3dpdGNoKHdoYXQpCisgIHsKKyAgY2FzZSBQQ1JFMl9JTkZPX0FMTE9QVElPTlM6CisgICooKHVpbnQzMl90ICopd2hlcmUpID0gcmUtPm92ZXJhbGxfb3B0aW9uczsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9JTkZPX0FSR09QVElPTlM6CisgICooKHVpbnQzMl90ICopd2hlcmUpID0gcmUtPmNvbXBpbGVfb3B0aW9uczsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9JTkZPX0JBQ0tSRUZNQVg6CisgICooKHVpbnQzMl90ICopd2hlcmUpID0gcmUtPnRvcF9iYWNrcmVmOworICBicmVhazsKKworICBjYXNlIFBDUkUyX0lORk9fQlNSOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IHJlLT5ic3JfY29udmVudGlvbjsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9JTkZPX0NBUFRVUkVDT1VOVDoKKyAgKigodWludDMyX3QgKil3aGVyZSkgPSByZS0+dG9wX2JyYWNrZXQ7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfSU5GT19GSVJTVENPREVUWVBFOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9ICgocmUtPmZsYWdzICYgUENSRTJfRklSU1RTRVQpICE9IDApPyAxIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKHJlLT5mbGFncyAmIFBDUkUyX1NUQVJUTElORSkgIT0gMCk/IDIgOiAwOworICBicmVhazsKKworICBjYXNlIFBDUkUyX0lORk9fRklSU1RDT0RFVU5JVDoKKyAgKigodWludDMyX3QgKil3aGVyZSkgPSAoKHJlLT5mbGFncyAmIFBDUkUyX0ZJUlNUU0VUKSAhPSAwKT8KKyAgICByZS0+Zmlyc3RfY29kZXVuaXQgOiAwOworICBicmVhazsKKworICBjYXNlIFBDUkUyX0lORk9fRklSU1RCSVRNQVA6CisgICooKGNvbnN0IHVpbnQ4X3QgKiopd2hlcmUpID0gKChyZS0+ZmxhZ3MgJiBQQ1JFMl9GSVJTVE1BUFNFVCkgIT0gMCk/CisgICAgJihyZS0+c3RhcnRfYml0bWFwWzBdKSA6IE5VTEw7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfSU5GT19IQVNCQUNLU0xBU0hDOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IChyZS0+ZmxhZ3MgJiBQQ1JFMl9IQVNCS0MpICE9IDA7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfSU5GT19IQVNDUk9STEY6CisgICooKHVpbnQzMl90ICopd2hlcmUpID0gKHJlLT5mbGFncyAmIFBDUkUyX0hBU0NST1JMRikgIT0gMDsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9JTkZPX0pDSEFOR0VEOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IChyZS0+ZmxhZ3MgJiBQQ1JFMl9KQ0hBTkdFRCkgIT0gMDsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9JTkZPX0pJVFNJWkU6CisjaWZkZWYgU1VQUE9SVF9KSVQKKyAgKigoc2l6ZV90ICopd2hlcmUpID0gKHJlLT5leGVjdXRhYmxlX2ppdCAhPSBOVUxMKT8KKyAgICBQUklWKGppdF9nZXRfc2l6ZSkocmUtPmV4ZWN1dGFibGVfaml0KSA6IDA7CisjZWxzZQorICAqKChzaXplX3QgKil3aGVyZSkgPSAwOworI2VuZGlmCisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfSU5GT19MQVNUQ09ERVRZUEU6CisgICooKHVpbnQzMl90ICopd2hlcmUpID0gKChyZS0+ZmxhZ3MgJiBQQ1JFMl9MQVNUU0VUKSAhPSAwKT8gMSA6IDA7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfSU5GT19MQVNUQ09ERVVOSVQ6CisgICooKHVpbnQzMl90ICopd2hlcmUpID0gKChyZS0+ZmxhZ3MgJiBQQ1JFMl9MQVNUU0VUKSAhPSAwKT8KKyAgICByZS0+bGFzdF9jb2RldW5pdCA6IDA7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfSU5GT19NQVRDSEVNUFRZOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IChyZS0+ZmxhZ3MgJiBQQ1JFMl9NQVRDSF9FTVBUWSkgIT0gMDsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9JTkZPX01BVENITElNSVQ6CisgICooKHVpbnQzMl90ICopd2hlcmUpID0gcmUtPmxpbWl0X21hdGNoOworICBpZiAocmUtPmxpbWl0X21hdGNoID09IFVJTlQzMl9NQVgpIHJldHVybiBQQ1JFMl9FUlJPUl9VTlNFVDsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9JTkZPX01BWExPT0tCRUhJTkQ6CisgICooKHVpbnQzMl90ICopd2hlcmUpID0gcmUtPm1heF9sb29rYmVoaW5kOworICBicmVhazsKKworICBjYXNlIFBDUkUyX0lORk9fTUlOTEVOR1RIOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IHJlLT5taW5sZW5ndGg7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfSU5GT19OQU1FRU5UUllTSVpFOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IHJlLT5uYW1lX2VudHJ5X3NpemU7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfSU5GT19OQU1FQ09VTlQ6CisgICooKHVpbnQzMl90ICopd2hlcmUpID0gcmUtPm5hbWVfY291bnQ7CisgIGJyZWFrOworCisgIGNhc2UgUENSRTJfSU5GT19OQU1FVEFCTEU6CisgICooKFBDUkUyX1NQVFIgKil3aGVyZSkgPSAoUENSRTJfU1BUUikoKGNoYXIgKilyZSArIHNpemVvZihwY3JlMl9yZWFsX2NvZGUpKTsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9JTkZPX05FV0xJTkU6CisgICooKHVpbnQzMl90ICopd2hlcmUpID0gcmUtPm5ld2xpbmVfY29udmVudGlvbjsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9JTkZPX1JFQ1VSU0lPTkxJTUlUOgorICAqKCh1aW50MzJfdCAqKXdoZXJlKSA9IHJlLT5saW1pdF9yZWN1cnNpb247CisgIGlmIChyZS0+bGltaXRfcmVjdXJzaW9uID09IFVJTlQzMl9NQVgpIHJldHVybiBQQ1JFMl9FUlJPUl9VTlNFVDsKKyAgYnJlYWs7CisKKyAgY2FzZSBQQ1JFMl9JTkZPX1NJWkU6CisgICooKHNpemVfdCAqKXdoZXJlKSA9IHJlLT5ibG9ja3NpemU7CisgIGJyZWFrOworCisgIGRlZmF1bHQ6IHJldHVybiBQQ1JFMl9FUlJPUl9CQURPUFRJT047CisgIH0KKworcmV0dXJuIDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgQ2FsbG91dCBlbnVtZXJhdG9yICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitBcmd1bWVudHM6CisgIGNvZGUgICAgICAgICAgcG9pbnRzIHRvIGNvbXBpbGVkIGNvZGUKKyAgY2FsbGJhY2sgICAgICBmdW5jdGlvbiBjYWxsZWQgZm9yIGVhY2ggY2FsbG91dCBibG9jaworICBjYWxsb3V0X2RhdGEgIHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrCisKK1JldHVybnM6ICAgICAgICAwIHdoZW4gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZAorICAgICAgICAgICAgICAgIDwgMCBvbiBsb2NhbCBlcnJvcgorICAgICAgICAgICAgICAgIT0gMCBmb3IgY2FsbGJhY2sgZXJyb3IKKyovCisKK1BDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX2NhbGxvdXRfZW51bWVyYXRlKGNvbnN0IHBjcmUyX2NvZGUgKmNvZGUsCisgIGludCAoKmNhbGxiYWNrKShwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9jayAqLCB2b2lkICopLCB2b2lkICpjYWxsb3V0X2RhdGEpCit7CitwY3JlMl9yZWFsX2NvZGUgKnJlID0gKHBjcmUyX3JlYWxfY29kZSAqKWNvZGU7CitwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9jayBjYjsKK1BDUkUyX1NQVFIgY2M7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCitCT09MIHV0ZiA9IChyZS0+b3ZlcmFsbF9vcHRpb25zICYgUENSRTJfVVRGKSAhPSAwOworI2VuZGlmCisKK2lmIChyZSA9PSBOVUxMKSByZXR1cm4gUENSRTJfRVJST1JfTlVMTDsKKworLyogQ2hlY2sgdGhhdCB0aGUgZmlyc3QgZmllbGQgaW4gdGhlIGJsb2NrIGlzIHRoZSBtYWdpYyBudW1iZXIuIElmIGl0IGlzIG5vdCwKK3JldHVybiB3aXRoIFBDUkUyX0VSUk9SX0JBRE1BR0lDLiAqLworCitpZiAocmUtPm1hZ2ljX251bWJlciAhPSBNQUdJQ19OVU1CRVIpIHJldHVybiBQQ1JFMl9FUlJPUl9CQURNQUdJQzsKKworLyogQ2hlY2sgdGhhdCB0aGlzIHBhdHRlcm4gd2FzIGNvbXBpbGVkIGluIHRoZSBjb3JyZWN0IGJpdCBtb2RlICovCisKK2lmICgocmUtPmZsYWdzICYgKFBDUkUyX0NPREVfVU5JVF9XSURUSC84KSkgPT0gMCkgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE1PREU7CisKK2NiLnZlcnNpb24gPSAwOworY2MgPSAoUENSRTJfU1BUUikoKHVpbnQ4X3QgKilyZSArIHNpemVvZihwY3JlMl9yZWFsX2NvZGUpKQorICAgICArIHJlLT5uYW1lX2NvdW50ICogcmUtPm5hbWVfZW50cnlfc2l6ZTsKKword2hpbGUgKFRSVUUpCisgIHsKKyAgaW50IHJjOworICBzd2l0Y2ggKCpjYykKKyAgICB7CisgICAgY2FzZSBPUF9FTkQ6CisgICAgcmV0dXJuIDA7CisKKyAgICBjYXNlIE9QX0NIQVI6CisgICAgY2FzZSBPUF9DSEFSSToKKyAgICBjYXNlIE9QX05PVDoKKyAgICBjYXNlIE9QX05PVEk6CisgICAgY2FzZSBPUF9TVEFSOgorICAgIGNhc2UgT1BfTUlOU1RBUjoKKyAgICBjYXNlIE9QX1BMVVM6CisgICAgY2FzZSBPUF9NSU5QTFVTOgorICAgIGNhc2UgT1BfUVVFUlk6CisgICAgY2FzZSBPUF9NSU5RVUVSWToKKyAgICBjYXNlIE9QX1VQVE86CisgICAgY2FzZSBPUF9NSU5VUFRPOgorICAgIGNhc2UgT1BfRVhBQ1Q6CisgICAgY2FzZSBPUF9QT1NTVEFSOgorICAgIGNhc2UgT1BfUE9TUExVUzoKKyAgICBjYXNlIE9QX1BPU1FVRVJZOgorICAgIGNhc2UgT1BfUE9TVVBUTzoKKyAgICBjYXNlIE9QX1NUQVJJOgorICAgIGNhc2UgT1BfTUlOU1RBUkk6CisgICAgY2FzZSBPUF9QTFVTSToKKyAgICBjYXNlIE9QX01JTlBMVVNJOgorICAgIGNhc2UgT1BfUVVFUllJOgorICAgIGNhc2UgT1BfTUlOUVVFUllJOgorICAgIGNhc2UgT1BfVVBUT0k6CisgICAgY2FzZSBPUF9NSU5VUFRPSToKKyAgICBjYXNlIE9QX0VYQUNUSToKKyAgICBjYXNlIE9QX1BPU1NUQVJJOgorICAgIGNhc2UgT1BfUE9TUExVU0k6CisgICAgY2FzZSBPUF9QT1NRVUVSWUk6CisgICAgY2FzZSBPUF9QT1NVUFRPSToKKyAgICBjYXNlIE9QX05PVFNUQVI6CisgICAgY2FzZSBPUF9OT1RNSU5TVEFSOgorICAgIGNhc2UgT1BfTk9UUExVUzoKKyAgICBjYXNlIE9QX05PVE1JTlBMVVM6CisgICAgY2FzZSBPUF9OT1RRVUVSWToKKyAgICBjYXNlIE9QX05PVE1JTlFVRVJZOgorICAgIGNhc2UgT1BfTk9UVVBUTzoKKyAgICBjYXNlIE9QX05PVE1JTlVQVE86CisgICAgY2FzZSBPUF9OT1RFWEFDVDoKKyAgICBjYXNlIE9QX05PVFBPU1NUQVI6CisgICAgY2FzZSBPUF9OT1RQT1NQTFVTOgorICAgIGNhc2UgT1BfTk9UUE9TUVVFUlk6CisgICAgY2FzZSBPUF9OT1RQT1NVUFRPOgorICAgIGNhc2UgT1BfTk9UU1RBUkk6CisgICAgY2FzZSBPUF9OT1RNSU5TVEFSSToKKyAgICBjYXNlIE9QX05PVFBMVVNJOgorICAgIGNhc2UgT1BfTk9UTUlOUExVU0k6CisgICAgY2FzZSBPUF9OT1RRVUVSWUk6CisgICAgY2FzZSBPUF9OT1RNSU5RVUVSWUk6CisgICAgY2FzZSBPUF9OT1RVUFRPSToKKyAgICBjYXNlIE9QX05PVE1JTlVQVE9JOgorICAgIGNhc2UgT1BfTk9URVhBQ1RJOgorICAgIGNhc2UgT1BfTk9UUE9TU1RBUkk6CisgICAgY2FzZSBPUF9OT1RQT1NQTFVTSToKKyAgICBjYXNlIE9QX05PVFBPU1FVRVJZSToKKyAgICBjYXNlIE9QX05PVFBPU1VQVE9JOgorICAgIGNjICs9IFBSSVYoT1BfbGVuZ3RocylbKmNjXTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICBpZiAodXRmICYmIEhBU19FWFRSQUxFTihjY1stMV0pKSBjYyArPSBHRVRfRVhUUkFMRU4oY2NbLTFdKTsKKyNlbmRpZgorICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9UWVBFU1RBUjoKKyAgICBjYXNlIE9QX1RZUEVNSU5TVEFSOgorICAgIGNhc2UgT1BfVFlQRVBMVVM6CisgICAgY2FzZSBPUF9UWVBFTUlOUExVUzoKKyAgICBjYXNlIE9QX1RZUEVRVUVSWToKKyAgICBjYXNlIE9QX1RZUEVNSU5RVUVSWToKKyAgICBjYXNlIE9QX1RZUEVVUFRPOgorICAgIGNhc2UgT1BfVFlQRU1JTlVQVE86CisgICAgY2FzZSBPUF9UWVBFRVhBQ1Q6CisgICAgY2FzZSBPUF9UWVBFUE9TU1RBUjoKKyAgICBjYXNlIE9QX1RZUEVQT1NQTFVTOgorICAgIGNhc2UgT1BfVFlQRVBPU1FVRVJZOgorICAgIGNhc2UgT1BfVFlQRVBPU1VQVE86CisgICAgY2MgKz0gUFJJVihPUF9sZW5ndGhzKVsqY2NdOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmIChjY1stMV0gPT0gT1BfUFJPUCB8fCBjY1stMV0gPT0gT1BfTk9UUFJPUCkgY2MgKz0gMjsKKyNlbmRpZgorICAgIGJyZWFrOworCisjaWYgZGVmaW5lZCBTVVBQT1JUX1VOSUNPREUgfHwgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICBjYXNlIE9QX1hDTEFTUzoKKyAgICBjYyArPSBHRVQoY2MsIDEpOworICAgIGJyZWFrOworI2VuZGlmCisKKyAgICBjYXNlIE9QX01BUks6CisgICAgY2FzZSBPUF9QUlVORV9BUkc6CisgICAgY2FzZSBPUF9TS0lQX0FSRzoKKyAgICBjYXNlIE9QX1RIRU5fQVJHOgorICAgIGNjICs9IFBSSVYoT1BfbGVuZ3RocylbKmNjXSArIGNjWzFdOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9DQUxMT1VUOgorICAgIGNiLnBhdHRlcm5fcG9zaXRpb24gPSBHRVQoY2MsIDEpOworICAgIGNiLm5leHRfaXRlbV9sZW5ndGggPSBHRVQoY2MsIDEgKyBMSU5LX1NJWkUpOworICAgIGNiLmNhbGxvdXRfbnVtYmVyID0gY2NbMSArIDIqTElOS19TSVpFXTsKKyAgICBjYi5jYWxsb3V0X3N0cmluZ19vZmZzZXQgPSAwOworICAgIGNiLmNhbGxvdXRfc3RyaW5nX2xlbmd0aCA9IDA7CisgICAgY2IuY2FsbG91dF9zdHJpbmcgPSBOVUxMOworICAgIHJjID0gY2FsbGJhY2soJmNiLCBjYWxsb3V0X2RhdGEpOworICAgIGlmIChyYyAhPSAwKSByZXR1cm4gcmM7CisgICAgY2MgKz0gUFJJVihPUF9sZW5ndGhzKVsqY2NdOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9DQUxMT1VUX1NUUjoKKyAgICBjYi5wYXR0ZXJuX3Bvc2l0aW9uID0gR0VUKGNjLCAxKTsKKyAgICBjYi5uZXh0X2l0ZW1fbGVuZ3RoID0gR0VUKGNjLCAxICsgTElOS19TSVpFKTsKKyAgICBjYi5jYWxsb3V0X251bWJlciA9IDA7CisgICAgY2IuY2FsbG91dF9zdHJpbmdfb2Zmc2V0ID0gR0VUKGNjLCAxICsgMypMSU5LX1NJWkUpOworICAgIGNiLmNhbGxvdXRfc3RyaW5nX2xlbmd0aCA9CisgICAgICBHRVQoY2MsIDEgKyAyKkxJTktfU0laRSkgLSAoMSArIDQqTElOS19TSVpFKSAtIDI7CisgICAgY2IuY2FsbG91dF9zdHJpbmcgPSBjYyArICgxICsgNCpMSU5LX1NJWkUpICsgMTsKKyAgICByYyA9IGNhbGxiYWNrKCZjYiwgY2FsbG91dF9kYXRhKTsKKyAgICBpZiAocmMgIT0gMCkgcmV0dXJuIHJjOworICAgIGNjICs9IEdFVChjYywgMSArIDIqTElOS19TSVpFKTsKKyAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgY2MgKz0gUFJJVihPUF9sZW5ndGhzKVsqY2NdOworICAgIGJyZWFrOworICAgIH0KKyAgfQorfQorCisvKiBFbmQgb2YgcGNyZTJfcGF0dGVybl9pbmZvLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9wcmludGludC5jIGIvZGlzdDIvc3JjL3BjcmUyX3ByaW50aW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhNjMzYwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9wcmludGludC5jCkBAIC0wLDAgKzEsODMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworLyogVGhpcyBtb2R1bGUgY29udGFpbnMgYSBQQ1JFIHByaXZhdGUgZGVidWdnaW5nIGZ1bmN0aW9uIGZvciBwcmludGluZyBvdXQgdGhlCitpbnRlcm5hbCBmb3JtIG9mIGEgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9uLCBhbG9uZyB3aXRoIHNvbWUgc3VwcG9ydGluZworbG9jYWwgZnVuY3Rpb25zLiBUaGlzIHNvdXJjZSBmaWxlIGlzICNpbmNsdWRlZCBpbiBwY3JlMnRlc3QuYyBhdCBlYWNoIHN1cHBvcnRlZAorY29kZSB1bml0IHdpZHRoLCB3aXRoIFBDUkUyX1NVRkZJWCBzZXQgYXBwcm9wcmlhdGVseSwganVzdCBsaWtlIHRoZSBmdW5jdGlvbnMKK3RoYXQgY29tcHJpc2UgdGhlIGxpYnJhcnkuIEl0IGNhbiBhbHNvIG9wdGlvbmFsbHkgYmUgaW5jbHVkZWQgaW4KK3BjcmUyX2NvbXBpbGUuYyBmb3IgZGV0YWlsZWQgZGVidWdnaW5nIGluIGVycm9yIHNpdHVhdGlvbnMuICovCisKKworLyogVGFibGVzIG9mIG9wZXJhdG9yIG5hbWVzLiBUaGUgc2FtZSA4LWJpdCB0YWJsZSBpcyB1c2VkIGZvciBhbGwgY29kZSB1bml0Cit3aWR0aHMsIHNvIGl0IG11c3QgYmUgZGVmaW5lZCBvbmx5IG9uY2UuIFRoZSBsaXN0IGl0c2VsZiBpcyBkZWZpbmVkIGluCitwY3JlMl9pbnRlcm5hbC5oLCB3aGljaCBpcyAjaW5jbHVkZWQgYnkgcGNyZTJ0ZXN0IGJlZm9yZSB0aGlzIGZpbGUuICovCisKKyNpZm5kZWYgT1BfTElTVFNfREVGSU5FRAorc3RhdGljIGNvbnN0IGNoYXIgKk9QX25hbWVzW10gPSB7IE9QX05BTUVfTElTVCB9OworI2RlZmluZSBPUF9MSVNUU19ERUZJTkVECisjZW5kaWYKKworLyogVGhlIGZ1bmN0aW9ucyBhbmQgdGFibGVzIGhlcmVpbiBtdXN0IGFsbCBoYXZlIG1vZGUtZGVwZW5kZW50IG5hbWVzLiAqLworCisjZGVmaW5lIE9QX2xlbmd0aHMgICAgICAgICAgICBQQ1JFMl9TVUZGSVgoT1BfbGVuZ3Roc18pCisjZGVmaW5lIGdldF91Y3BuYW1lICAgICAgICAgICBQQ1JFMl9TVUZGSVgoZ2V0X3VjcG5hbWVfKQorI2RlZmluZSBwY3JlMl9wcmludGludCAgICAgICAgUENSRTJfU1VGRklYKHBjcmUyX3ByaW50aW50XykKKyNkZWZpbmUgcHJpbnRfY2hhciAgICAgICAgICAgIFBDUkUyX1NVRkZJWChwcmludF9jaGFyXykKKyNkZWZpbmUgcHJpbnRfY3VzdHJpbmcgICAgICAgIFBDUkUyX1NVRkZJWChwcmludF9jdXN0cmluZ18pCisjZGVmaW5lIHByaW50X2N1c3RyaW5nX2J5bGVuICBQQ1JFMl9TVUZGSVgocHJpbnRfY3VzdHJpbmdfYnlsZW5fKQorI2RlZmluZSBwcmludF9wcm9wICAgICAgICAgICAgUENSRTJfU1VGRklYKHByaW50X3Byb3BfKQorCisvKiBUYWJsZSBvZiBzaXplcyBmb3IgdGhlIGZpeGVkLWxlbmd0aCBvcGNvZGVzLiBJdCdzIGRlZmluZWQgaW4gYSBtYWNybyBzbyB0aGF0Cit0aGUgZGVmaW5pdGlvbiBpcyBuZXh0IHRvIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBvcGNvZGVzIGluIHBjcmUyX2ludGVybmFsLmguCitUaGUgY29udGVudHMgb2YgdGhlIHRhYmxlIGFyZSwgaG93ZXZlciwgbW9kZS1kZXBlbmRlbnQuICovCisKK3N0YXRpYyBjb25zdCB1aW50OF90IE9QX2xlbmd0aHNbXSA9IHsgT1BfTEVOR1RIUyB9OworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgUHJpbnQgb25lIGNoYXJhY3RlciBmcm9tIGEgc3RyaW5nICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJbiBVVEYgbW9kZSB0aGUgY2hhcmFjdGVyIG1heSBvY2N1cHkgbW9yZSB0aGFuIG9uZSBjb2RlIHVuaXQuCisKK0FyZ3VtZW50czoKKyAgZiAgICAgICAgICAgZmlsZSB0byB3cml0ZSB0bworICBwdHIgICAgICAgICBwb2ludGVyIHRvIGZpcnN0IGNvZGUgdW5pdCBvZiB0aGUgY2hhcmFjdGVyCisgIHV0ZiAgICAgICAgIFRSVUUgaWYgc3RyaW5nIGlzIFVURiAod2lsbCBiZSBGQUxTRSBpZiBVVEYgaXMgbm90IHN1cHBvcnRlZCkKKworUmV0dXJuczogICAgICBudW1iZXIgb2YgYWRkaXRpb25hbCBjb2RlIHVuaXRzIHVzZWQKKyovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3ByaW50X2NoYXIoRklMRSAqZiwgUENSRTJfU1BUUiBwdHIsIEJPT0wgdXRmKQorewordWludDMyX3QgYyA9ICpwdHI7CitCT09MIG9uZV9jb2RlX3VuaXQgPSAhdXRmOworCisvKiBJZiBVVEYgaXMgc3VwcG9ydGVkIGFuZCByZXF1ZXN0ZWQsIGNoZWNrIGZvciBhIHZhbGlkIHNpbmdsZSBjb2RlIHVuaXQuICovCisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK2lmICh1dGYpCisgIHsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICBvbmVfY29kZV91bml0ID0gYyA8IDB4ODA7CisjZWxpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYKKyAgb25lX2NvZGVfdW5pdCA9IChjICYgMHhmYzAwKSAhPSAweGQ4MDA7CisjZWxzZQorICBvbmVfY29kZV91bml0ID0gKGMgJiAweGZmZmZmODAwdSkgIT0gMHhkODAwdTsKKyNlbmRpZiAgLyogQ09ERV9VTklUX1dJRFRIICovCisgIH0KKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKy8qIEhhbmRsZSBhIHZhbGlkIG9uZS1jb2RlLXVuaXQgY2hhcmFjdGVyIGF0IGFueSB3aWR0aC4gKi8KKworaWYgKG9uZV9jb2RlX3VuaXQpCisgIHsKKyAgaWYgKFBSSU5UQUJMRShjKSkgZnByaW50ZihmLCAiJWMiLCAoY2hhciljKTsKKyAgZWxzZSBpZiAoYyA8IDB4ODApIGZwcmludGYoZiwgIlxceCUwMngiLCBjKTsKKyAgZWxzZSBmcHJpbnRmKGYsICJcXHh7JTAyeH0iLCBjKTsKKyAgcmV0dXJuIDA7CisgIH0KKworLyogQ29kZSBmb3IgaW52YWxpZCBVVEYgY29kZSB1bml0cyBhbmQgbXVsdGktdW5pdCBVVEYgY2hhcmFjdGVycyBpcyBkaWZmZXJlbnQKK2ZvciBlYWNoIHdpZHRoLiBJZiBVVEYgaXMgbm90IHN1cHBvcnRlZCwgY29udHJvbCBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUsIGJ1dCB3ZQorbmVlZCBhIHJldHVybiBzdGF0ZW1lbnQgdG8ga2VlcCB0aGUgY29tcGlsZXIgaGFwcHkuICovCisKKyNpZm5kZWYgU1VQUE9SVF9VTklDT0RFCityZXR1cm4gMDsKKyNlbHNlCisKKy8qIE1hbGZvcm1lZCBVVEYtOCBzaG91bGQgb2NjdXIgb25seSBpZiB0aGUgc2FuaXR5IGNoZWNrIGhhcyBiZWVuIHR1cm5lZCBvZmYuCitSYXRoZXIgdGhhbiBzd2FsbG93IHJhbmRvbSBieXRlcywganVzdCBzdG9wIGlmIHdlIGhpdCBhIGJhZCBvbmUuIFByaW50IGl0IHdpdGgKK1xYIGluc3RlYWQgb2YgXHggYXMgYW4gaW5kaWNhdGlvbi4gKi8KKworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CitpZiAoKGMgJiAweGMwKSAhPSAweGMwKQorICB7CisgIGZwcmludGYoZiwgIlxcWHsleH0iLCBjKTsgICAgICAgLyogSW52YWxpZCBzdGFydGluZyBieXRlICovCisgIHJldHVybiAwOworICB9CitlbHNlCisgIHsKKyAgaW50IGk7CisgIGludCBhID0gUFJJVih1dGY4X3RhYmxlNClbYyAmIDB4M2ZdOyAgLyogTnVtYmVyIG9mIGFkZGl0aW9uYWwgYnl0ZXMgKi8KKyAgaW50IHMgPSA2KmE7CisgIGMgPSAoYyAmIFBSSVYodXRmOF90YWJsZTMpW2FdKSA8PCBzOworICBmb3IgKGkgPSAxOyBpIDw9IGE7IGkrKykKKyAgICB7CisgICAgaWYgKChwdHJbaV0gJiAweGMwKSAhPSAweDgwKQorICAgICAgeworICAgICAgZnByaW50ZihmLCAiXFxYeyV4fSIsIGMpOyAgIC8qIEludmFsaWQgc2Vjb25kYXJ5IGJ5dGUgKi8KKyAgICAgIHJldHVybiBpIC0gMTsKKyAgICAgIH0KKyAgICBzIC09IDY7CisgICAgYyB8PSAocHRyW2ldICYgMHgzZikgPDwgczsKKyAgICB9CisgIGZwcmludGYoZiwgIlxceHsleH0iLCBjKTsKKyAgcmV0dXJuIGE7Cit9CisjZW5kaWYgIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4ICovCisKKy8qIFVURi0xNjogcmF0aGVyIHRoYW4gc3dhbGxvdyBhIGxvdyBzdXJyb2dhdGUsIGp1c3Qgc3RvcCBpZiB3ZSBoaXQgYSBiYWQgb25lLgorUHJpbnQgaXQgd2l0aCBcWCBpbnN0ZWFkIG9mIFx4IGFzIGFuIGluZGljYXRpb24uICovCisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYKK2lmICgocHRyWzFdICYgMHhmYzAwKSAhPSAweGRjMDApCisgIHsKKyAgZnByaW50ZihmLCAiXFxYeyV4fSIsIGMpOworICByZXR1cm4gMDsKKyAgfQorYyA9ICgoKGMgJiAweDNmZikgPDwgMTApIHwgKHB0clsxXSAmIDB4M2ZmKSkgKyAweDEwMDAwOworZnByaW50ZihmLCAiXFx4eyV4fSIsIGMpOworcmV0dXJuIDE7CisjZW5kaWYgIC8qIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNiAqLworCisvKiBGb3IgVVRGLTMyIHdlIGdldCBoZXJlIG9ubHkgZm9yIGEgbWFsZm9ybWVkIGNvZGUgdW5pdCwgd2hpY2ggc2hvdWxkIG9ubHkKK29jY3VyIGlmIHRoZSBzYW5pdHkgY2hlY2sgaGFzIGJlZW4gdHVybmVkIG9mZi4gUHJpbnQgaXQgd2l0aCBcWCBpbnN0ZWFkIG9mIFx4CithcyBhbiBpbmRpY2F0aW9uLiAqLworCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyCitmcHJpbnRmKGYsICJcXFh7JXh9IiwgYyk7CityZXR1cm4gMDsKKyNlbmRpZiAgLyogUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDMyICovCisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgIFByaW50IHN0cmluZyBhcyBhIGxpc3Qgb2YgY29kZSB1bml0cyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGVzZSB0YWtlIG5vIGFjY291bnQgb2YgVVRGIGFzIHRoZXkgYWx3YXlzIHByaW50IGVhY2ggaW5kaXZpZHVhbCBjb2RlIHVuaXQuCitUaGUgc3RyaW5nIGlzIHplcm8tdGVybWluYXRlZCBmb3IgcHJpbnRfY3VzdHJpbmcoKTsgdGhlIGxlbmd0aCBpcyBnaXZlbiBmb3IKK3ByaW50X2N1c3RyaW5nX2J5bGVuKCkuCisKK0FyZ3VtZW50czoKKyAgZiAgICAgICAgICBmaWxlIHRvIHdyaXRlIHRvCisgIHB0ciAgICAgICAgcG9pbnQgdG8gdGhlIHN0cmluZworICBsZW4gICAgICAgIGxlbmd0aCBmb3IgcHJpbnRfY3VzdHJpbmdfYnlsZW4oKQorCitSZXR1cm5zOiAgICAgbm90aGluZworKi8KKworc3RhdGljIHZvaWQKK3ByaW50X2N1c3RyaW5nKEZJTEUgKmYsIFBDUkUyX1NQVFIgcHRyKQoreword2hpbGUgKCpwdHIgIT0gJ1wwJykKKyAgeworICByZWdpc3RlciB1aW50MzJfdCBjID0gKnB0cisrOworICBpZiAoUFJJTlRBQkxFKGMpKSBmcHJpbnRmKGYsICIlYyIsIGMpOyBlbHNlIGZwcmludGYoZiwgIlxceHsleH0iLCBjKTsKKyAgfQorfQorCitzdGF0aWMgdm9pZAorcHJpbnRfY3VzdHJpbmdfYnlsZW4oRklMRSAqZiwgUENSRTJfU1BUUiBwdHIsIFBDUkUyX1VDSEFSIGxlbikKK3sKK3doaWxlIChsZW4tLSA+IDApCisgIHsKKyAgcmVnaXN0ZXIgdWludDMyX3QgYyA9ICpwdHIrKzsKKyAgaWYgKFBSSU5UQUJMRShjKSkgZnByaW50ZihmLCAiJWMiLCBjKTsgZWxzZSBmcHJpbnRmKGYsICJcXHh7JXh9IiwgYyk7CisgIH0KK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgIEZpbmQgVW5pY29kZSBwcm9wZXJ0eSBuYW1lICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogV2hlbiB0aGVyZSBpcyBubyBVVEYvVUNQIHN1cHBvcnQsIHRoZSB0YWJsZSBvZiBuYW1lcyBkb2VzIG5vdCBleGlzdC4gVGhpcworZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgaW4gc3VjaCBjb25maWd1cmF0aW9ucywgYmVjYXVzZSBhIHBhdHRlcm4gdGhhdAordHJpZXMgdG8gdXNlIFVuaWNvZGUgcHJvcGVydGllcyB3b24ndCBjb21waWxlLiBSYXRoZXIgdGhhbiBwdXQgbG90cyBvZiAjaWZkZWZzCitpbnRvIHRoZSBtYWluIGNvZGUsIGhvd2V2ZXIsIHdlIGp1c3QgcHV0IG9uZSBpbnRvIHRoaXMgZnVuY3Rpb24uICovCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldF91Y3BuYW1lKHVuc2lnbmVkIGludCBwdHlwZSwgdW5zaWduZWQgaW50IHB2YWx1ZSkKK3sKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK2ludCBpOworZm9yIChpID0gUFJJVih1dHRfc2l6ZSkgLSAxOyBpID49IDA7IGktLSkKKyAgeworICBpZiAocHR5cGUgPT0gUFJJVih1dHQpW2ldLnR5cGUgJiYgcHZhbHVlID09IFBSSVYodXR0KVtpXS52YWx1ZSkgYnJlYWs7CisgIH0KK3JldHVybiAoaSA+PSAwKT8gUFJJVih1dHRfbmFtZXMpICsgUFJJVih1dHQpW2ldLm5hbWVfb2Zmc2V0IDogIj8/IjsKKyNlbHNlICAgLyogTm8gVVRGIHN1cHBvcnQgKi8KKyh2b2lkKXB0eXBlOworKHZvaWQpcHZhbHVlOworcmV0dXJuICI/PyI7CisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgUHJpbnQgVW5pY29kZSBwcm9wZXJ0eSB2YWx1ZSAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiAiTm9ybWFsIiBwcm9wZXJ0aWVzIGNhbiBiZSBwcmludGVkIGZyb20gdGFibGVzLiBUaGUgUFRfQ0xJU1QgcHJvcGVydHkgaXMgYQorcHNldWRvLXByb3BlcnR5IHRoYXQgY29udGFpbnMgYSBwb2ludGVyIHRvIGEgbGlzdCBvZiBjYXNlLWVxdWl2YWxlbnQKK2NoYXJhY3RlcnMuCisKK0FyZ3VtZW50czoKKyAgZiAgICAgICAgICAgIGZpbGUgdG8gd3JpdGUgdG8KKyAgY29kZSAgICAgICAgIHBvaW50ZXIgaW4gdGhlIGNvbXBpbGVkIGNvZGUKKyAgYmVmb3JlICAgICAgIHRleHQgdG8gcHJpbnQgYmVmb3JlCisgIGFmdGVyICAgICAgICB0ZXh0IHRvIHByaW50IGFmdGVyCisKK1JldHVybnM6ICAgICAgIG5vdGhpbmcKKyovCisKK3N0YXRpYyB2b2lkCitwcmludF9wcm9wKEZJTEUgKmYsIFBDUkUyX1NQVFIgY29kZSwgY29uc3QgY2hhciAqYmVmb3JlLCBjb25zdCBjaGFyICphZnRlcikKK3sKK2lmIChjb2RlWzFdICE9IFBUX0NMSVNUKQorICB7CisgIGZwcmludGYoZiwgIiVzJXMgJXMlcyIsIGJlZm9yZSwgT1BfbmFtZXNbKmNvZGVdLCBnZXRfdWNwbmFtZShjb2RlWzFdLAorICAgIGNvZGVbMl0pLCBhZnRlcik7CisgIH0KK2Vsc2UKKyAgeworICBjb25zdCBjaGFyICpub3QgPSAoKmNvZGUgPT0gT1BfUFJPUCk/ICIiIDogIm5vdCAiOworICBjb25zdCB1aW50MzJfdCAqcCA9IFBSSVYodWNkX2Nhc2VsZXNzX3NldHMpICsgY29kZVsyXTsKKyAgZnByaW50ZiAoZiwgIiVzJXNjbGlzdCIsIGJlZm9yZSwgbm90KTsKKyAgd2hpbGUgKCpwIDwgTk9UQUNIQVIpIGZwcmludGYoZiwgIiAlMDR4IiwgKnArKyk7CisgIGZwcmludGYoZiwgIiVzIiwgYWZ0ZXIpOworICB9Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgIFByaW50IGNvbXBpbGVkIHBhdHRlcm4gICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBwcmludF9sZW5ndGhzIGZsYWcgY29udHJvbHMgd2hldGhlciBvZmZzZXRzIGFuZCBsZW5ndGhzIG9mIGl0ZW1zIGFyZQorcHJpbnRlZC4gTGVudGhzIGNhbiBiZSB0dXJuZWQgb2ZmIGZyb20gcGNyZTJ0ZXN0IHNvIHRoYXQgYXV0b21hdGljIHRlc3RzIG9uCitieXRlY29kZSBjYW4gYmUgd3JpdHRlbiB0aGF0IGRvIG5vdCBkZXBlbmQgb24gdGhlIHZhbHVlIG9mIExJTktfU0laRS4KKworQXJndW1lbnRzOgorICByZSAgICAgICAgICAgICAgYSBjb21waWxlZCBwYXR0ZXJuCisgIGYgICAgICAgICAgICAgICB0aGUgZmlsZSB0byB3cml0ZSB0bworICBwcmludF9sZW5ndGhzICAgc2hvdyB2YXJpb3VzIGxlbmd0aHMKKworUmV0dXJuczogICAgICAgICAgbm90aGluZworKi8KKworc3RhdGljIHZvaWQKK3BjcmUyX3ByaW50aW50KHBjcmUyX2NvZGUgKnJlLCBGSUxFICpmLCBCT09MIHByaW50X2xlbmd0aHMpCit7CitQQ1JFMl9TUFRSIGNvZGVzdGFydCwgbmFtZXRhYmxlLCBjb2RlOwordWludDMyX3QgbmVzaXplID0gcmUtPm5hbWVfZW50cnlfc2l6ZTsKK0JPT0wgdXRmID0gKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9VVEYpICE9IDA7CisKK25hbWV0YWJsZSA9IChQQ1JFMl9TUFRSKSgodWludDhfdCAqKXJlICsgc2l6ZW9mKHBjcmUyX3JlYWxfY29kZSkpOworY29kZSA9IGNvZGVzdGFydCA9IG5hbWV0YWJsZSArIHJlLT5uYW1lX2NvdW50ICogcmUtPm5hbWVfZW50cnlfc2l6ZTsKKworZm9yKDs7KQorICB7CisgIFBDUkUyX1NQVFIgY2NvZGU7CisgIHVpbnQzMl90IGM7CisgIGludCBpOworICBjb25zdCBjaGFyICpmbGFnID0gIiAgIjsKKyAgdW5zaWduZWQgaW50IGV4dHJhID0gMDsKKworICBpZiAocHJpbnRfbGVuZ3RocykKKyAgICBmcHJpbnRmKGYsICIlM2QgIiwgKGludCkoY29kZSAtIGNvZGVzdGFydCkpOworICBlbHNlCisgICAgZnByaW50ZihmLCAiICAgICIpOworCisgIHN3aXRjaCgqY29kZSkKKyAgICB7CisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworICAgICAgLyogVGhlc2UgY2FzZXMgYXJlIG5ldmVyIG9iZXllZC4gVGhpcyBpcyBhIGZ1ZGdlIHRoYXQgY2F1c2VzIGEgY29tcGlsZS0KKyAgICAgIHRpbWUgZXJyb3IgaWYgdGhlIHZlY3RvcnMgT1BfbmFtZXMgb3IgT1BfbGVuZ3Rocywgd2hpY2ggYXJlIGluZGV4ZWQKKyAgICAgIGJ5IG9wY29kZSwgYXJlIG5vdCB0aGUgY29ycmVjdCBsZW5ndGguIEl0IHNlZW1zIHRvIGJlIHRoZSBvbmx5IHdheSB0byBkbworICAgICAgc3VjaCBhIGNoZWNrIGF0IGNvbXBpbGUgdGltZSwgYXMgdGhlIHNpemVvZigpIG9wZXJhdG9yIGRvZXMgbm90IHdvcmsgaW4KKyAgICAgIHRoZSBDIHByZXByb2Nlc3Nvci4gKi8KKworICAgICAgY2FzZSBPUF9UQUJMRV9MRU5HVEg6CisgICAgICBjYXNlIE9QX1RBQkxFX0xFTkdUSCArCisgICAgICAgICgoc2l6ZW9mKE9QX25hbWVzKS9zaXplb2YoY29uc3QgY2hhciAqKSA9PSBPUF9UQUJMRV9MRU5HVEgpICYmCisgICAgICAgIChzaXplb2YoT1BfbGVuZ3RocykgPT0gT1BfVEFCTEVfTEVOR1RIKSk6CisgICAgICBicmVhazsKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKyAgICBjYXNlIE9QX0VORDoKKyAgICBmcHJpbnRmKGYsICIgICAgJXNcbiIsIE9QX25hbWVzWypjb2RlXSk7CisgICAgZnByaW50ZihmLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICByZXR1cm47CisKKyAgICBjYXNlIE9QX0NIQVI6CisgICAgZnByaW50ZihmLCAiICAgICIpOworICAgIGRvCisgICAgICB7CisgICAgICBjb2RlKys7CisgICAgICBjb2RlICs9IDEgKyBwcmludF9jaGFyKGYsIGNvZGUsIHV0Zik7CisgICAgICB9CisgICAgd2hpbGUgKCpjb2RlID09IE9QX0NIQVIpOworICAgIGZwcmludGYoZiwgIlxuIik7CisgICAgY29udGludWU7CisKKyAgICBjYXNlIE9QX0NIQVJJOgorICAgIGZwcmludGYoZiwgIiAvaSAiKTsKKyAgICBkbworICAgICAgeworICAgICAgY29kZSsrOworICAgICAgY29kZSArPSAxICsgcHJpbnRfY2hhcihmLCBjb2RlLCB1dGYpOworICAgICAgfQorICAgIHdoaWxlICgqY29kZSA9PSBPUF9DSEFSSSk7CisgICAgZnByaW50ZihmLCAiXG4iKTsKKyAgICBjb250aW51ZTsKKworICAgIGNhc2UgT1BfQ0JSQToKKyAgICBjYXNlIE9QX0NCUkFQT1M6CisgICAgY2FzZSBPUF9TQ0JSQToKKyAgICBjYXNlIE9QX1NDQlJBUE9TOgorICAgIGlmIChwcmludF9sZW5ndGhzKSBmcHJpbnRmKGYsICIlM2QgIiwgR0VUKGNvZGUsIDEpKTsKKyAgICAgIGVsc2UgZnByaW50ZihmLCAiICAgICIpOworICAgIGZwcmludGYoZiwgIiVzICVkIiwgT1BfbmFtZXNbKmNvZGVdLCBHRVQyKGNvZGUsIDErTElOS19TSVpFKSk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0JSQToKKyAgICBjYXNlIE9QX0JSQVBPUzoKKyAgICBjYXNlIE9QX1NCUkE6CisgICAgY2FzZSBPUF9TQlJBUE9TOgorICAgIGNhc2UgT1BfS0VUUk1BWDoKKyAgICBjYXNlIE9QX0tFVFJNSU46CisgICAgY2FzZSBPUF9LRVRSUE9TOgorICAgIGNhc2UgT1BfQUxUOgorICAgIGNhc2UgT1BfS0VUOgorICAgIGNhc2UgT1BfQVNTRVJUOgorICAgIGNhc2UgT1BfQVNTRVJUX05PVDoKKyAgICBjYXNlIE9QX0FTU0VSVEJBQ0s6CisgICAgY2FzZSBPUF9BU1NFUlRCQUNLX05PVDoKKyAgICBjYXNlIE9QX09OQ0U6CisgICAgY2FzZSBPUF9PTkNFX05DOgorICAgIGNhc2UgT1BfQ09ORDoKKyAgICBjYXNlIE9QX1NDT05EOgorICAgIGNhc2UgT1BfUkVWRVJTRToKKyAgICBpZiAocHJpbnRfbGVuZ3RocykgZnByaW50ZihmLCAiJTNkICIsIEdFVChjb2RlLCAxKSk7CisgICAgICBlbHNlIGZwcmludGYoZiwgIiAgICAiKTsKKyAgICBmcHJpbnRmKGYsICIlcyIsIE9QX25hbWVzWypjb2RlXSk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NMT1NFOgorICAgIGZwcmludGYoZiwgIiAgICAlcyAlZCIsIE9QX25hbWVzWypjb2RlXSwgR0VUMihjb2RlLCAxKSk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NSRUY6CisgICAgZnByaW50ZihmLCAiJTNkICVzIiwgR0VUMihjb2RlLDEpLCBPUF9uYW1lc1sqY29kZV0pOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9ETkNSRUY6CisgICAgICB7CisgICAgICBQQ1JFMl9TUFRSIGVudHJ5ID0gbmFtZXRhYmxlICsgKEdFVDIoY29kZSwgMSkgKiBuZXNpemUpICsgSU1NMl9TSVpFOworICAgICAgZnByaW50ZihmLCAiICVzIENvbmQgcmVmIDwiLCBmbGFnKTsKKyAgICAgIHByaW50X2N1c3RyaW5nKGYsIGVudHJ5KTsKKyAgICAgIGZwcmludGYoZiwgIj4lZCIsIEdFVDIoY29kZSwgMSArIElNTTJfU0laRSkpOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9SUkVGOgorICAgIGMgPSBHRVQyKGNvZGUsIDEpOworICAgIGlmIChjID09IFJSRUZfQU5ZKQorICAgICAgZnByaW50ZihmLCAiICAgIENvbmQgcmVjdXJzZSBhbnkiKTsKKyAgICBlbHNlCisgICAgICBmcHJpbnRmKGYsICIgICAgQ29uZCByZWN1cnNlICVkIiwgYyk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0ROUlJFRjoKKyAgICAgIHsKKyAgICAgIFBDUkUyX1NQVFIgZW50cnkgPSBuYW1ldGFibGUgKyAoR0VUMihjb2RlLCAxKSAqIG5lc2l6ZSkgKyBJTU0yX1NJWkU7CisgICAgICBmcHJpbnRmKGYsICIgJXMgQ29uZCByZWN1cnNlIDwiLCBmbGFnKTsKKyAgICAgIHByaW50X2N1c3RyaW5nKGYsIGVudHJ5KTsKKyAgICAgIGZwcmludGYoZiwgIj4lZCIsIEdFVDIoY29kZSwgMSArIElNTTJfU0laRSkpOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9GQUxTRToKKyAgICBmcHJpbnRmKGYsICIgICAgQ29uZCBmYWxzZSIpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9UUlVFOgorICAgIGZwcmludGYoZiwgIiAgICBDb25kIHRydWUiKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfU1RBUkk6CisgICAgY2FzZSBPUF9NSU5TVEFSSToKKyAgICBjYXNlIE9QX1BPU1NUQVJJOgorICAgIGNhc2UgT1BfUExVU0k6CisgICAgY2FzZSBPUF9NSU5QTFVTSToKKyAgICBjYXNlIE9QX1BPU1BMVVNJOgorICAgIGNhc2UgT1BfUVVFUllJOgorICAgIGNhc2UgT1BfTUlOUVVFUllJOgorICAgIGNhc2UgT1BfUE9TUVVFUllJOgorICAgIGZsYWcgPSAiL2kiOworICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgT1BfU1RBUjoKKyAgICBjYXNlIE9QX01JTlNUQVI6CisgICAgY2FzZSBPUF9QT1NTVEFSOgorICAgIGNhc2UgT1BfUExVUzoKKyAgICBjYXNlIE9QX01JTlBMVVM6CisgICAgY2FzZSBPUF9QT1NQTFVTOgorICAgIGNhc2UgT1BfUVVFUlk6CisgICAgY2FzZSBPUF9NSU5RVUVSWToKKyAgICBjYXNlIE9QX1BPU1FVRVJZOgorICAgIGNhc2UgT1BfVFlQRVNUQVI6CisgICAgY2FzZSBPUF9UWVBFTUlOU1RBUjoKKyAgICBjYXNlIE9QX1RZUEVQT1NTVEFSOgorICAgIGNhc2UgT1BfVFlQRVBMVVM6CisgICAgY2FzZSBPUF9UWVBFTUlOUExVUzoKKyAgICBjYXNlIE9QX1RZUEVQT1NQTFVTOgorICAgIGNhc2UgT1BfVFlQRVFVRVJZOgorICAgIGNhc2UgT1BfVFlQRU1JTlFVRVJZOgorICAgIGNhc2UgT1BfVFlQRVBPU1FVRVJZOgorICAgIGZwcmludGYoZiwgIiAlcyAiLCBmbGFnKTsKKworICAgIGlmICgqY29kZSA+PSBPUF9UWVBFU1RBUikKKyAgICAgIHsKKyAgICAgIGlmIChjb2RlWzFdID09IE9QX1BST1AgfHwgY29kZVsxXSA9PSBPUF9OT1RQUk9QKQorICAgICAgICB7CisgICAgICAgIHByaW50X3Byb3AoZiwgY29kZSArIDEsICIiLCAiICIpOworICAgICAgICBleHRyYSA9IDI7CisgICAgICAgIH0KKyAgICAgIGVsc2UgZnByaW50ZihmLCAiJXMiLCBPUF9uYW1lc1tjb2RlWzFdXSk7CisgICAgICB9CisgICAgZWxzZSBleHRyYSA9IHByaW50X2NoYXIoZiwgY29kZSsxLCB1dGYpOworICAgIGZwcmludGYoZiwgIiVzIiwgT1BfbmFtZXNbKmNvZGVdKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfRVhBQ1RJOgorICAgIGNhc2UgT1BfVVBUT0k6CisgICAgY2FzZSBPUF9NSU5VUFRPSToKKyAgICBjYXNlIE9QX1BPU1VQVE9JOgorICAgIGZsYWcgPSAiL2kiOworICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgIGNhc2UgT1BfRVhBQ1Q6CisgICAgY2FzZSBPUF9VUFRPOgorICAgIGNhc2UgT1BfTUlOVVBUTzoKKyAgICBjYXNlIE9QX1BPU1VQVE86CisgICAgZnByaW50ZihmLCAiICVzICIsIGZsYWcpOworICAgIGV4dHJhID0gcHJpbnRfY2hhcihmLCBjb2RlICsgMSArIElNTTJfU0laRSwgdXRmKTsKKyAgICBmcHJpbnRmKGYsICJ7Iik7CisgICAgaWYgKCpjb2RlICE9IE9QX0VYQUNUICYmICpjb2RlICE9IE9QX0VYQUNUSSkgZnByaW50ZihmLCAiMCwiKTsKKyAgICBmcHJpbnRmKGYsICIlZH0iLCBHRVQyKGNvZGUsMSkpOworICAgIGlmICgqY29kZSA9PSBPUF9NSU5VUFRPIHx8ICpjb2RlID09IE9QX01JTlVQVE9JKSBmcHJpbnRmKGYsICI/Iik7CisgICAgICBlbHNlIGlmICgqY29kZSA9PSBPUF9QT1NVUFRPIHx8ICpjb2RlID09IE9QX1BPU1VQVE9JKSBmcHJpbnRmKGYsICIrIik7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1RZUEVFWEFDVDoKKyAgICBjYXNlIE9QX1RZUEVVUFRPOgorICAgIGNhc2UgT1BfVFlQRU1JTlVQVE86CisgICAgY2FzZSBPUF9UWVBFUE9TVVBUTzoKKyAgICBpZiAoY29kZVsxICsgSU1NMl9TSVpFXSA9PSBPUF9QUk9QIHx8IGNvZGVbMSArIElNTTJfU0laRV0gPT0gT1BfTk9UUFJPUCkKKyAgICAgIHsKKyAgICAgIHByaW50X3Byb3AoZiwgY29kZSArIElNTTJfU0laRSArIDEsICIgICAgIiwgIiAiKTsKKyAgICAgIGV4dHJhID0gMjsKKyAgICAgIH0KKyAgICBlbHNlIGZwcmludGYoZiwgIiAgICAlcyIsIE9QX25hbWVzW2NvZGVbMSArIElNTTJfU0laRV1dKTsKKyAgICBmcHJpbnRmKGYsICJ7Iik7CisgICAgaWYgKCpjb2RlICE9IE9QX1RZUEVFWEFDVCkgZnByaW50ZihmLCAiMCwiKTsKKyAgICBmcHJpbnRmKGYsICIlZH0iLCBHRVQyKGNvZGUsMSkpOworICAgIGlmICgqY29kZSA9PSBPUF9UWVBFTUlOVVBUTykgZnByaW50ZihmLCAiPyIpOworICAgICAgZWxzZSBpZiAoKmNvZGUgPT0gT1BfVFlQRVBPU1VQVE8pIGZwcmludGYoZiwgIisiKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfTk9USToKKyAgICBmbGFnID0gIi9pIjsKKyAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIE9QX05PVDoKKyAgICBmcHJpbnRmKGYsICIgJXMgW14iLCBmbGFnKTsKKyAgICBleHRyYSA9IHByaW50X2NoYXIoZiwgY29kZSArIDEsIHV0Zik7CisgICAgZnByaW50ZihmLCAiXSIpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9OT1RTVEFSSToKKyAgICBjYXNlIE9QX05PVE1JTlNUQVJJOgorICAgIGNhc2UgT1BfTk9UUE9TU1RBUkk6CisgICAgY2FzZSBPUF9OT1RQTFVTSToKKyAgICBjYXNlIE9QX05PVE1JTlBMVVNJOgorICAgIGNhc2UgT1BfTk9UUE9TUExVU0k6CisgICAgY2FzZSBPUF9OT1RRVUVSWUk6CisgICAgY2FzZSBPUF9OT1RNSU5RVUVSWUk6CisgICAgY2FzZSBPUF9OT1RQT1NRVUVSWUk6CisgICAgZmxhZyA9ICIvaSI7CisgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICBjYXNlIE9QX05PVFNUQVI6CisgICAgY2FzZSBPUF9OT1RNSU5TVEFSOgorICAgIGNhc2UgT1BfTk9UUE9TU1RBUjoKKyAgICBjYXNlIE9QX05PVFBMVVM6CisgICAgY2FzZSBPUF9OT1RNSU5QTFVTOgorICAgIGNhc2UgT1BfTk9UUE9TUExVUzoKKyAgICBjYXNlIE9QX05PVFFVRVJZOgorICAgIGNhc2UgT1BfTk9UTUlOUVVFUlk6CisgICAgY2FzZSBPUF9OT1RQT1NRVUVSWToKKyAgICBmcHJpbnRmKGYsICIgJXMgW14iLCBmbGFnKTsKKyAgICBleHRyYSA9IHByaW50X2NoYXIoZiwgY29kZSArIDEsIHV0Zik7CisgICAgZnByaW50ZihmLCAiXSVzIiwgT1BfbmFtZXNbKmNvZGVdKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfTk9URVhBQ1RJOgorICAgIGNhc2UgT1BfTk9UVVBUT0k6CisgICAgY2FzZSBPUF9OT1RNSU5VUFRPSToKKyAgICBjYXNlIE9QX05PVFBPU1VQVE9JOgorICAgIGZsYWcgPSAiL2kiOworICAgIC8qIEZhbGwgdGhyb3VnaCAqLworCisgICAgY2FzZSBPUF9OT1RFWEFDVDoKKyAgICBjYXNlIE9QX05PVFVQVE86CisgICAgY2FzZSBPUF9OT1RNSU5VUFRPOgorICAgIGNhc2UgT1BfTk9UUE9TVVBUTzoKKyAgICBmcHJpbnRmKGYsICIgJXMgW14iLCBmbGFnKTsKKyAgICBleHRyYSA9IHByaW50X2NoYXIoZiwgY29kZSArIDEgKyBJTU0yX1NJWkUsIHV0Zik7CisgICAgZnByaW50ZihmLCAiXXsiKTsKKyAgICBpZiAoKmNvZGUgIT0gT1BfTk9URVhBQ1QgJiYgKmNvZGUgIT0gT1BfTk9URVhBQ1RJKSBmcHJpbnRmKGYsICIwLCIpOworICAgIGZwcmludGYoZiwgIiVkfSIsIEdFVDIoY29kZSwxKSk7CisgICAgaWYgKCpjb2RlID09IE9QX05PVE1JTlVQVE8gfHwgKmNvZGUgPT0gT1BfTk9UTUlOVVBUT0kpIGZwcmludGYoZiwgIj8iKTsKKyAgICAgIGVsc2UKKyAgICBpZiAoKmNvZGUgPT0gT1BfTk9UUE9TVVBUTyB8fCAqY29kZSA9PSBPUF9OT1RQT1NVUFRPSSkgZnByaW50ZihmLCAiKyIpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9SRUNVUlNFOgorICAgIGlmIChwcmludF9sZW5ndGhzKSBmcHJpbnRmKGYsICIlM2QgIiwgR0VUKGNvZGUsIDEpKTsKKyAgICAgIGVsc2UgZnByaW50ZihmLCAiICAgICIpOworICAgIGZwcmludGYoZiwgIiVzIiwgT1BfbmFtZXNbKmNvZGVdKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfUkVGSToKKyAgICBmbGFnID0gIi9pIjsKKyAgICAvKiBGYWxsIHRocm91Z2ggKi8KKyAgICBjYXNlIE9QX1JFRjoKKyAgICBmcHJpbnRmKGYsICIgJXMgXFwlZCIsIGZsYWcsIEdFVDIoY29kZSwxKSk7CisgICAgY2NvZGUgPSBjb2RlICsgT1BfbGVuZ3Roc1sqY29kZV07CisgICAgZ290byBDTEFTU19SRUZfUkVQRUFUOworCisgICAgY2FzZSBPUF9ETlJFRkk6CisgICAgZmxhZyA9ICIvaSI7CisgICAgLyogRmFsbCB0aHJvdWdoICovCisgICAgY2FzZSBPUF9ETlJFRjoKKyAgICAgIHsKKyAgICAgIFBDUkUyX1NQVFIgZW50cnkgPSBuYW1ldGFibGUgKyAoR0VUMihjb2RlLCAxKSAqIG5lc2l6ZSkgKyBJTU0yX1NJWkU7CisgICAgICBmcHJpbnRmKGYsICIgJXMgXFxrPCIsIGZsYWcpOworICAgICAgcHJpbnRfY3VzdHJpbmcoZiwgZW50cnkpOworICAgICAgZnByaW50ZihmLCAiPiVkIiwgR0VUMihjb2RlLCAxICsgSU1NMl9TSVpFKSk7CisgICAgICB9CisgICAgY2NvZGUgPSBjb2RlICsgT1BfbGVuZ3Roc1sqY29kZV07CisgICAgZ290byBDTEFTU19SRUZfUkVQRUFUOworCisgICAgY2FzZSBPUF9DQUxMT1VUOgorICAgIGZwcmludGYoZiwgIiAgICAlcyAlZCAlZCAlZCIsIE9QX25hbWVzWypjb2RlXSwgY29kZVsxICsgMipMSU5LX1NJWkVdLAorICAgICAgR0VUKGNvZGUsIDEpLCBHRVQoY29kZSwgMSArIExJTktfU0laRSkpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9DQUxMT1VUX1NUUjoKKyAgICBjID0gY29kZVsxICsgNCpMSU5LX1NJWkVdOworICAgIGZwcmludGYoZiwgIiAgICAlcyAlYyIsIE9QX25hbWVzWypjb2RlXSwgYyk7CisgICAgZXh0cmEgPSBHRVQoY29kZSwgMSArIDIqTElOS19TSVpFKTsKKyAgICBwcmludF9jdXN0cmluZ19ieWxlbihmLCBjb2RlICsgMiArIDQqTElOS19TSVpFLCBleHRyYSAtIDMgLSA0KkxJTktfU0laRSk7CisgICAgZm9yIChpID0gMDsgUFJJVihjYWxsb3V0X3N0YXJ0X2RlbGltcylbaV0gIT0gMDsgaSsrKQorICAgICAgaWYgKGMgPT0gUFJJVihjYWxsb3V0X3N0YXJ0X2RlbGltcylbaV0pCisgICAgICAgIHsKKyAgICAgICAgYyA9IFBSSVYoY2FsbG91dF9lbmRfZGVsaW1zKVtpXTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBmcHJpbnRmKGYsICIlYyAlZCAlZCAlZCIsIGMsIEdFVChjb2RlLCAxICsgMypMSU5LX1NJWkUpLCBHRVQoY29kZSwgMSksCisgICAgICBHRVQoY29kZSwgMSArIExJTktfU0laRSkpOworICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9QUk9QOgorICAgIGNhc2UgT1BfTk9UUFJPUDoKKyAgICBwcmludF9wcm9wKGYsIGNvZGUsICIgICAgIiwgIiIpOworICAgIGJyZWFrOworCisgICAgLyogT1BfWENMQVNTIGNhbm5vdCBvY2N1ciBpbiA4LWJpdCwgbm9uLVVURiBtb2RlLiBIb3dldmVyLCB0aGVyZSdzIG5vIGhhcm0KKyAgICBpbiBoYXZpbmcgdGhpcyBjb2RlIGFsd2F5cyBoZXJlLCBhbmQgaXQgbWFrZXMgaXQgbGVzcyBtZXNzeSB3aXRob3V0IGFsbAorICAgIHRob3NlICNpZmRlZnMuICovCisKKyAgICBjYXNlIE9QX0NMQVNTOgorICAgIGNhc2UgT1BfTkNMQVNTOgorICAgIGNhc2UgT1BfWENMQVNTOgorICAgICAgeworICAgICAgdW5zaWduZWQgaW50IG1pbiwgbWF4OworICAgICAgQk9PTCBwcmludG1hcDsKKyAgICAgIEJPT0wgaW52ZXJ0bWFwID0gRkFMU0U7CisgICAgICB1aW50OF90ICptYXA7CisgICAgICB1aW50OF90IGludmVydGVkX21hcFszMl07CisKKyAgICAgIGZwcmludGYoZiwgIiAgICBbIik7CisKKyAgICAgIGlmICgqY29kZSA9PSBPUF9YQ0xBU1MpCisgICAgICAgIHsKKyAgICAgICAgZXh0cmEgPSBHRVQoY29kZSwgMSk7CisgICAgICAgIGNjb2RlID0gY29kZSArIExJTktfU0laRSArIDE7CisgICAgICAgIHByaW50bWFwID0gKCpjY29kZSAmIFhDTF9NQVApICE9IDA7CisgICAgICAgIGlmICgoKmNjb2RlICYgWENMX05PVCkgIT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgaW52ZXJ0bWFwID0gKCpjY29kZSAmIFhDTF9IQVNQUk9QKSA9PSAwOworICAgICAgICAgIGZwcmludGYoZiwgIl4iKTsKKyAgICAgICAgICB9CisgICAgICAgIGNjb2RlKys7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBwcmludG1hcCA9IFRSVUU7CisgICAgICAgIGNjb2RlID0gY29kZSArIDE7CisgICAgICAgIH0KKworICAgICAgLyogUHJpbnQgYSBiaXQgbWFwICovCisKKyAgICAgIGlmIChwcmludG1hcCkKKyAgICAgICAgeworICAgICAgICBtYXAgPSAodWludDhfdCAqKWNjb2RlOworICAgICAgICBpZiAoaW52ZXJ0bWFwKQorICAgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgaW52ZXJ0ZWRfbWFwW2ldID0gfm1hcFtpXTsKKyAgICAgICAgICBtYXAgPSBpbnZlcnRlZF9tYXA7CisgICAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKChtYXBbaS84XSAmICgxIDw8IChpJjcpKSkgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBqOworICAgICAgICAgICAgZm9yIChqID0gaSsxOyBqIDwgMjU2OyBqKyspCisgICAgICAgICAgICAgIGlmICgobWFwW2ovOF0gJiAoMSA8PCAoaiY3KSkpID09IDApIGJyZWFrOworICAgICAgICAgICAgaWYgKGkgPT0gJy0nIHx8IGkgPT0gJ10nKSBmcHJpbnRmKGYsICJcXCIpOworICAgICAgICAgICAgaWYgKFBSSU5UQUJMRShpKSkgZnByaW50ZihmLCAiJWMiLCBpKTsKKyAgICAgICAgICAgICAgZWxzZSBmcHJpbnRmKGYsICJcXHglMDJ4IiwgaSk7CisgICAgICAgICAgICBpZiAoLS1qID4gaSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBpZiAoaiAhPSBpICsgMSkgZnByaW50ZihmLCAiLSIpOworICAgICAgICAgICAgICBpZiAoaiA9PSAnLScgfHwgaiA9PSAnXScpIGZwcmludGYoZiwgIlxcIik7CisgICAgICAgICAgICAgIGlmIChQUklOVEFCTEUoaikpIGZwcmludGYoZiwgIiVjIiwgaik7CisgICAgICAgICAgICAgICAgZWxzZSBmcHJpbnRmKGYsICJcXHglMDJ4Iiwgaik7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSBqOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgY2NvZGUgKz0gMzIgLyBzaXplb2YoUENSRTJfVUNIQVIpOworICAgICAgICB9CisKKyAgICAgIC8qIEZvciBhbiBYQ0xBU1MgdGhlcmUgaXMgYWx3YXlzIHNvbWUgYWRkaXRpb25hbCBkYXRhICovCisKKyAgICAgIGlmICgqY29kZSA9PSBPUF9YQ0xBU1MpCisgICAgICAgIHsKKyAgICAgICAgUENSRTJfVUNIQVIgY2g7CisgICAgICAgIHdoaWxlICgoY2ggPSAqY2NvZGUrKykgIT0gWENMX0VORCkKKyAgICAgICAgICB7CisgICAgICAgICAgQk9PTCBub3QgPSBGQUxTRTsKKyAgICAgICAgICBjb25zdCBjaGFyICpub3RjaCA9ICIiOworCisgICAgICAgICAgc3dpdGNoKGNoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBYQ0xfTk9UUFJPUDoKKyAgICAgICAgICAgIG5vdCA9IFRSVUU7CisgICAgICAgICAgICBub3RjaCA9ICJeIjsKKyAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworCisgICAgICAgICAgICBjYXNlIFhDTF9QUk9QOgorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwdHlwZSA9ICpjY29kZSsrOworICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHZhbHVlID0gKmNjb2RlKys7CisKKyAgICAgICAgICAgICAgc3dpdGNoKHB0eXBlKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIFBUX1BYR1JBUEg6CisgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiWzolc2dyYXBoOl0iLCBub3RjaCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFBUX1BYUFJJTlQ6CisgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiWzolc3ByaW50Ol0iLCBub3RjaCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFBUX1BYUFVOQ1Q6CisgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiWzolc3B1bmN0Ol0iLCBub3RjaCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGZwcmludGYoZiwgIlxcJWN7JXN9IiwgKG5vdD8gJ1AnOidwJyksCisgICAgICAgICAgICAgICAgICBnZXRfdWNwbmFtZShwdHlwZSwgcHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGNjb2RlICs9IDEgKyBwcmludF9jaGFyKGYsIGNjb2RlLCB1dGYpOworICAgICAgICAgICAgaWYgKGNoID09IFhDTF9SQU5HRSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBmcHJpbnRmKGYsICItIik7CisgICAgICAgICAgICAgIGNjb2RlICs9IDEgKyBwcmludF9jaGFyKGYsIGNjb2RlLCB1dGYpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgLyogSW5kaWNhdGUgYSBub24tVVRGIGNsYXNzIHdoaWNoIHdhcyBjcmVhdGVkIGJ5IG5lZ2F0aW9uICovCisKKyAgICAgIGZwcmludGYoZiwgIl0lcyIsICgqY29kZSA9PSBPUF9OQ0xBU1MpPyAiIChuZWcpIiA6ICIiKTsKKworICAgICAgLyogSGFuZGxlIHJlcGVhdHMgYWZ0ZXIgYSBjbGFzcyBvciBhIGJhY2sgcmVmZXJlbmNlICovCisKKyAgICAgIENMQVNTX1JFRl9SRVBFQVQ6CisgICAgICBzd2l0Y2goKmNjb2RlKQorICAgICAgICB7CisgICAgICAgIGNhc2UgT1BfQ1JTVEFSOgorICAgICAgICBjYXNlIE9QX0NSTUlOU1RBUjoKKyAgICAgICAgY2FzZSBPUF9DUlBMVVM6CisgICAgICAgIGNhc2UgT1BfQ1JNSU5QTFVTOgorICAgICAgICBjYXNlIE9QX0NSUVVFUlk6CisgICAgICAgIGNhc2UgT1BfQ1JNSU5RVUVSWToKKyAgICAgICAgY2FzZSBPUF9DUlBPU1NUQVI6CisgICAgICAgIGNhc2UgT1BfQ1JQT1NQTFVTOgorICAgICAgICBjYXNlIE9QX0NSUE9TUVVFUlk6CisgICAgICAgIGZwcmludGYoZiwgIiVzIiwgT1BfbmFtZXNbKmNjb2RlXSk7CisgICAgICAgIGV4dHJhICs9IE9QX2xlbmd0aHNbKmNjb2RlXTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9DUlJBTkdFOgorICAgICAgICBjYXNlIE9QX0NSTUlOUkFOR0U6CisgICAgICAgIGNhc2UgT1BfQ1JQT1NSQU5HRToKKyAgICAgICAgbWluID0gR0VUMihjY29kZSwxKTsKKyAgICAgICAgbWF4ID0gR0VUMihjY29kZSwxICsgSU1NMl9TSVpFKTsKKyAgICAgICAgaWYgKG1heCA9PSAwKSBmcHJpbnRmKGYsICJ7JXUsfSIsIG1pbik7CisgICAgICAgIGVsc2UgZnByaW50ZihmLCAieyV1LCV1fSIsIG1pbiwgbWF4KTsKKyAgICAgICAgaWYgKCpjY29kZSA9PSBPUF9DUk1JTlJBTkdFKSBmcHJpbnRmKGYsICI/Iik7CisgICAgICAgIGVsc2UgaWYgKCpjY29kZSA9PSBPUF9DUlBPU1JBTkdFKSBmcHJpbnRmKGYsICIrIik7CisgICAgICAgIGV4dHJhICs9IE9QX2xlbmd0aHNbKmNjb2RlXTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyogRG8gbm90aGluZyBpZiBpdCdzIG5vdCBhIHJlcGVhdDsgdGhpcyBjb2RlIHN0b3BzIHBpY2t5IGNvbXBpbGVycworICAgICAgICB3YXJuaW5nIGFib3V0IHRoZSBsYWNrIG9mIGEgZGVmYXVsdCBjb2RlIHBhdGguICovCisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfTUFSSzoKKyAgICBjYXNlIE9QX1BSVU5FX0FSRzoKKyAgICBjYXNlIE9QX1NLSVBfQVJHOgorICAgIGNhc2UgT1BfVEhFTl9BUkc6CisgICAgZnByaW50ZihmLCAiICAgICVzICIsIE9QX25hbWVzWypjb2RlXSk7CisgICAgcHJpbnRfY3VzdHJpbmdfYnlsZW4oZiwgY29kZSArIDIsIGNvZGVbMV0pOworICAgIGV4dHJhICs9IGNvZGVbMV07CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1RIRU46CisgICAgZnByaW50ZihmLCAiICAgICVzIiwgT1BfbmFtZXNbKmNvZGVdKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfQ0lSQ006CisgICAgY2FzZSBPUF9ET0xMTToKKyAgICBmbGFnID0gIi9tIjsKKyAgICAvKiBGYWxsIHRocm91Z2ggKi8KKworICAgIC8qIEFueXRoaW5nIGVsc2UgaXMganVzdCBhbiBpdGVtIHdpdGggbm8gZGF0YSwgYnV0IHBvc3NpYmx5IGEgZmxhZy4gKi8KKworICAgIGRlZmF1bHQ6CisgICAgZnByaW50ZihmLCAiICVzICVzIiwgZmxhZywgT1BfbmFtZXNbKmNvZGVdKTsKKyAgICBicmVhazsKKyAgICB9CisKKyAgY29kZSArPSBPUF9sZW5ndGhzWypjb2RlXSArIGV4dHJhOworICBmcHJpbnRmKGYsICJcbiIpOworICB9Cit9CisKKy8qIEVuZCBvZiBwY3JlMl9wcmludGludC5jICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfc2VyaWFsaXplLmMgYi9kaXN0Mi9zcmMvcGNyZTJfc2VyaWFsaXplLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM0NGFjZgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9zZXJpYWxpemUuYwpAQCAtMCwwICsxLDI1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQQ1JFIGlzIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHN5bnRheAorYW5kIHNlbWFudGljcyBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2Ugb2YgdGhlIFBlcmwgNSBsYW5ndWFnZS4KKworICAgICAgICAgICAgICAgICAgICAgICBXcml0dGVuIGJ5IFBoaWxpcCBIYXplbAorICAgICBPcmlnaW5hbCBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDE5OTctMjAxMiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorICAgICAgICAgTmV3IEFQSSBjb2RlIENvcHlyaWdodCAoYykgMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKiBUaGlzIG1vZHVsZSBjb250YWlucyBmdW5jdGlvbnMgZm9yIHNlcmlhbGl6aW5nIGFuZCBkZXNlcmlhbGl6aW5nCithIHNlcXVlbmNlIG9mIGNvbXBpbGVkIGNvZGVzLiAqLworCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKworLyogTWFnaWMgbnVtYmVyIHRvIHByb3ZpZGUgYSBzbWFsbCBjaGVjayBhZ2FpbnN0IGJlaW5nIGhhbmRlZCBqdW5rLiAqLworCisjZGVmaW5lIFNFUklBTElaRURfREFUQV9NQUdJQyAweDUwNTIzMjUzdQorCisvKiBEZXNlcmlhbGl6YXRpb24gaXMgbGltaXRlZCB0byB0aGUgY3VycmVudCBQQ1JFIHZlcnNpb24gYW5kCitjaGFyYWN0ZXIgd2lkdGguICovCisKKyNkZWZpbmUgU0VSSUFMSVpFRF9EQVRBX1ZFUlNJT04gXAorICAoKFBDUkUyX01BSk9SKSB8ICgoUENSRTJfTUlOT1IpIDw8IDE2KSkKKworI2RlZmluZSBTRVJJQUxJWkVEX0RBVEFfQ09ORklHIFwKKyAgKHNpemVvZihQQ1JFMl9VQ0hBUikgfCAoKHNpemVvZih2b2lkKikpIDw8IDgpIHwgKChzaXplb2YoUENSRTJfU0laRSkpIDw8IDE2KSkKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICBTZXJpYWxpemUgY29tcGlsZWQgcGF0dGVybnMgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworUENSRTJfRVhQX0RFRk4gaW50MzJfdCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX3NlcmlhbGl6ZV9lbmNvZGUoY29uc3QgcGNyZTJfY29kZSAqKmNvZGVzLCBpbnQzMl90IG51bWJlcl9vZl9jb2RlcywKKyAgIHVpbnQ4X3QgKipzZXJpYWxpemVkX2J5dGVzLCBQQ1JFMl9TSVpFICpzZXJpYWxpemVkX3NpemUsCisgICBwY3JlMl9nZW5lcmFsX2NvbnRleHQgKmdjb250ZXh0KQorewordWludDhfdCAqYnl0ZXM7Cit1aW50OF90ICpkc3RfYnl0ZXM7CitpbnQzMl90IGk7CitQQ1JFMl9TSVpFIHRvdGFsX3NpemU7Citjb25zdCBwY3JlMl9yZWFsX2NvZGUgKnJlOworY29uc3QgdWludDhfdCAqdGFibGVzOworcGNyZTJfc2VyaWFsaXplZF9kYXRhICpkYXRhOworCitjb25zdCBwY3JlMl9tZW1jdGwgKm1lbWN0bCA9IChnY29udGV4dCAhPSBOVUxMKSA/CisgICZnY29udGV4dC0+bWVtY3RsIDogJlBSSVYoZGVmYXVsdF9jb21waWxlX2NvbnRleHQpLm1lbWN0bDsKKworaWYgKGNvZGVzID09IE5VTEwgfHwgc2VyaWFsaXplZF9ieXRlcyA9PSBOVUxMIHx8IHNlcmlhbGl6ZWRfc2l6ZSA9PSBOVUxMKQorICByZXR1cm4gUENSRTJfRVJST1JfTlVMTDsKKworaWYgKG51bWJlcl9vZl9jb2RlcyA8PSAwKSByZXR1cm4gUENSRTJfRVJST1JfQkFEREFUQTsKKworLyogQ29tcHV0ZSB0b3RhbCBzaXplLiAqLwordG90YWxfc2l6ZSA9IHNpemVvZihwY3JlMl9zZXJpYWxpemVkX2RhdGEpICsgdGFibGVzX2xlbmd0aDsKK3RhYmxlcyA9IE5VTEw7CisKK2ZvciAoaSA9IDA7IGkgPCBudW1iZXJfb2ZfY29kZXM7IGkrKykKKyAgeworICBpZiAoY29kZXNbaV0gPT0gTlVMTCkgcmV0dXJuIFBDUkUyX0VSUk9SX05VTEw7CisgIHJlID0gKGNvbnN0IHBjcmUyX3JlYWxfY29kZSAqKShjb2Rlc1tpXSk7CisgIGlmIChyZS0+bWFnaWNfbnVtYmVyICE9IE1BR0lDX05VTUJFUikgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE1BR0lDOworICBpZiAodGFibGVzID09IE5VTEwpCisgICAgdGFibGVzID0gcmUtPnRhYmxlczsKKyAgZWxzZSBpZiAodGFibGVzICE9IHJlLT50YWJsZXMpCisgICAgcmV0dXJuIFBDUkUyX0VSUk9SX01JWEVEVEFCTEVTOworICB0b3RhbF9zaXplICs9IHJlLT5ibG9ja3NpemU7CisgIH0KKworLyogSW5pdGlhbGl6ZSB0aGUgYnl0ZSBzdHJlYW0uICovCitieXRlcyA9IG1lbWN0bC0+bWFsbG9jKHRvdGFsX3NpemUgKyBzaXplb2YocGNyZTJfbWVtY3RsKSwgbWVtY3RsLT5tZW1vcnlfZGF0YSk7CitpZiAoYnl0ZXMgPT0gTlVMTCkgcmV0dXJuIFBDUkUyX0VSUk9SX05PTUVNT1JZOworCisvKiBUaGUgY29udHJvbGxlciBpcyBzdG9yZWQgYXMgYSBoaWRkZW4gcGFyYW1ldGVyLiAqLworbWVtY3B5KGJ5dGVzLCBtZW1jdGwsIHNpemVvZihwY3JlMl9tZW1jdGwpKTsKK2J5dGVzICs9IHNpemVvZihwY3JlMl9tZW1jdGwpOworCitkYXRhID0gKHBjcmUyX3NlcmlhbGl6ZWRfZGF0YSAqKWJ5dGVzOworZGF0YS0+bWFnaWMgPSBTRVJJQUxJWkVEX0RBVEFfTUFHSUM7CitkYXRhLT52ZXJzaW9uID0gU0VSSUFMSVpFRF9EQVRBX1ZFUlNJT047CitkYXRhLT5jb25maWcgPSBTRVJJQUxJWkVEX0RBVEFfQ09ORklHOworZGF0YS0+bnVtYmVyX29mX2NvZGVzID0gbnVtYmVyX29mX2NvZGVzOworCisvKiBDb3B5IGFsbCBjb21waWxlZCBjb2RlIGRhdGEuICovCitkc3RfYnl0ZXMgPSBieXRlcyArIHNpemVvZihwY3JlMl9zZXJpYWxpemVkX2RhdGEpOworbWVtY3B5KGRzdF9ieXRlcywgdGFibGVzLCB0YWJsZXNfbGVuZ3RoKTsKK2RzdF9ieXRlcyArPSB0YWJsZXNfbGVuZ3RoOworCitmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX29mX2NvZGVzOyBpKyspCisgIHsKKyAgcmUgPSAoY29uc3QgcGNyZTJfcmVhbF9jb2RlICopKGNvZGVzW2ldKTsKKyAgbWVtY3B5KGRzdF9ieXRlcywgKGNoYXIgKilyZSwgcmUtPmJsb2Nrc2l6ZSk7CisgIGRzdF9ieXRlcyArPSByZS0+YmxvY2tzaXplOworICB9CisKKypzZXJpYWxpemVkX2J5dGVzID0gYnl0ZXM7Cisqc2VyaWFsaXplZF9zaXplID0gdG90YWxfc2l6ZTsKK3JldHVybiBudW1iZXJfb2ZfY29kZXM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgRGVzZXJpYWxpemUgY29tcGlsZWQgcGF0dGVybnMgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitQQ1JFMl9FWFBfREVGTiBpbnQzMl90IFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfc2VyaWFsaXplX2RlY29kZShwY3JlMl9jb2RlICoqY29kZXMsIGludDMyX3QgbnVtYmVyX29mX2NvZGVzLAorICAgY29uc3QgdWludDhfdCAqYnl0ZXMsIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQpCit7Citjb25zdCBwY3JlMl9zZXJpYWxpemVkX2RhdGEgKmRhdGEgPSAoY29uc3QgcGNyZTJfc2VyaWFsaXplZF9kYXRhICopYnl0ZXM7Citjb25zdCBwY3JlMl9tZW1jdGwgKm1lbWN0bCA9IChnY29udGV4dCAhPSBOVUxMKSA/CisgICZnY29udGV4dC0+bWVtY3RsIDogJlBSSVYoZGVmYXVsdF9jb21waWxlX2NvbnRleHQpLm1lbWN0bDsKKworY29uc3QgdWludDhfdCAqc3JjX2J5dGVzOworcGNyZTJfcmVhbF9jb2RlICpkc3RfcmU7Cit1aW50OF90ICp0YWJsZXM7CitpbnQzMl90IGksIGo7CisKKy8qIFNhbml0eSBjaGVja3MuICovCisKK2lmIChkYXRhID09IE5VTEwgfHwgY29kZXMgPT0gTlVMTCkgcmV0dXJuIFBDUkUyX0VSUk9SX05VTEw7CitpZiAobnVtYmVyX29mX2NvZGVzIDw9IDApIHJldHVybiBQQ1JFMl9FUlJPUl9CQUREQVRBOworaWYgKGRhdGEtPm1hZ2ljICE9IFNFUklBTElaRURfREFUQV9NQUdJQykgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE1BR0lDOworaWYgKGRhdGEtPnZlcnNpb24gIT0gU0VSSUFMSVpFRF9EQVRBX1ZFUlNJT04pIHJldHVybiBQQ1JFMl9FUlJPUl9CQURNT0RFOworaWYgKGRhdGEtPmNvbmZpZyAhPSBTRVJJQUxJWkVEX0RBVEFfQ09ORklHKSByZXR1cm4gUENSRTJfRVJST1JfQkFETU9ERTsKKworaWYgKG51bWJlcl9vZl9jb2RlcyA+IGRhdGEtPm51bWJlcl9vZl9jb2RlcykKKyAgbnVtYmVyX29mX2NvZGVzID0gZGF0YS0+bnVtYmVyX29mX2NvZGVzOworCitzcmNfYnl0ZXMgPSBieXRlcyArIHNpemVvZihwY3JlMl9zZXJpYWxpemVkX2RhdGEpOworCisvKiBEZWNvZGUgdGFibGVzLiBUaGUgcmVmZXJlbmNlIGNvdW50IGZvciB0aGUgdGFibGVzIGlzIHN0b3JlZCBpbW1lZGlhdGVseQorZm9sbG93aW5nIHRoZW0uICovCisKK3RhYmxlcyA9IG1lbWN0bC0+bWFsbG9jKHRhYmxlc19sZW5ndGggKyBzaXplb2YoUENSRTJfU0laRSksIG1lbWN0bC0+bWVtb3J5X2RhdGEpOworaWYgKHRhYmxlcyA9PSBOVUxMKSByZXR1cm4gUENSRTJfRVJST1JfTk9NRU1PUlk7CisKK21lbWNweSh0YWJsZXMsIHNyY19ieXRlcywgdGFibGVzX2xlbmd0aCk7CisqKFBDUkUyX1NJWkUgKikodGFibGVzICsgdGFibGVzX2xlbmd0aCkgPSBudW1iZXJfb2ZfY29kZXM7CitzcmNfYnl0ZXMgKz0gdGFibGVzX2xlbmd0aDsKKworLyogRGVjb2RlIHRoZSBieXRlIHN0cmVhbS4gV2UgbXVzdCBub3QgdHJ5IHRvIHJlYWQgdGhlIHNpemUgZnJvbSB0aGUgY29tcGlsZWQKK2NvZGUgYmxvY2sgaW4gdGhlIHN0cmVhbSwgYmVjYXVzZSBpdCBtaWdodCBiZSB1bmFsaWduZWQsIHdoaWNoIGNhdXNlcyBlcnJvcnMgb24KK2hhcmR3YXJlIHN1Y2ggYXMgU3BhcmMtNjQgdGhhdCBkb2Vzbid0IGxpa2UgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3Nlcy4gVGhlIHR5cGUKK29mIHRoZSBibG9ja3NpemUgZmllbGQgaXMgZ2l2ZW4gaXRzIG93biBuYW1lIHRvIGVuc3VyZSB0aGF0IGl0IGlzIHRoZSBzYW1lIGhlcmUKK2FzIGluIHRoZSBibG9jay4gKi8KKworZm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9jb2RlczsgaSsrKQorICB7CisgIENPREVfQkxPQ0tTSVpFX1RZUEUgYmxvY2tzaXplOworICBtZW1jcHkoJmJsb2Nrc2l6ZSwgc3JjX2J5dGVzICsgb2Zmc2V0b2YocGNyZTJfcmVhbF9jb2RlLCBibG9ja3NpemUpLAorICAgIHNpemVvZihDT0RFX0JMT0NLU0laRV9UWVBFKSk7CisKKyAgLyogVGhlIGFsbG9jYXRvciBwcm92aWRlZCBieSBnY29udGV4dCByZXBsYWNlcyB0aGUgb3JpZ2luYWwgb25lLiAqLworCisgIGRzdF9yZSA9IChwY3JlMl9yZWFsX2NvZGUgKilQUklWKG1lbWN0bF9tYWxsb2MpKGJsb2Nrc2l6ZSwKKyAgICAocGNyZTJfbWVtY3RsICopZ2NvbnRleHQpOworICBpZiAoZHN0X3JlID09IE5VTEwpCisgICAgeworICAgIG1lbWN0bC0+ZnJlZSh0YWJsZXMsIG1lbWN0bC0+bWVtb3J5X2RhdGEpOworICAgIGZvciAoaiA9IDA7IGogPCBpOyBqKyspCisgICAgICB7CisgICAgICBtZW1jdGwtPmZyZWUoY29kZXNbal0sIG1lbWN0bC0+bWVtb3J5X2RhdGEpOworICAgICAgY29kZXNbal0gPSBOVUxMOworICAgICAgfQorICAgIHJldHVybiBQQ1JFMl9FUlJPUl9OT01FTU9SWTsKKyAgICB9CisKKyAgLyogVGhlIG5ldyBhbGxvY2F0b3IgbXVzdCBiZSBwcmVzZXJ2ZWQuICovCisKKyAgbWVtY3B5KCgodWludDhfdCAqKWRzdF9yZSkgKyBzaXplb2YocGNyZTJfbWVtY3RsKSwKKyAgICBzcmNfYnl0ZXMgKyBzaXplb2YocGNyZTJfbWVtY3RsKSwgYmxvY2tzaXplIC0gc2l6ZW9mKHBjcmUyX21lbWN0bCkpOworCisgIC8qIEF0IHRoZSBtb21lbnQgb25seSBvbmUgdGFibGUgaXMgc3VwcG9ydGVkLiAqLworCisgIGRzdF9yZS0+dGFibGVzID0gdGFibGVzOworICBkc3RfcmUtPmV4ZWN1dGFibGVfaml0ID0gTlVMTDsKKyAgZHN0X3JlLT5mbGFncyB8PSBQQ1JFMl9ERVJFRl9UQUJMRVM7CisKKyAgY29kZXNbaV0gPSBkc3RfcmU7CisgIHNyY19ieXRlcyArPSBibG9ja3NpemU7CisgIH0KKworcmV0dXJuIG51bWJlcl9vZl9jb2RlczsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICBHZXQgdGhlIG51bWJlciBvZiBzZXJpYWxpemVkIHBhdHRlcm5zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK1BDUkUyX0VYUF9ERUZOIGludDMyX3QgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlcyhjb25zdCB1aW50OF90ICpieXRlcykKK3sKK2NvbnN0IHBjcmUyX3NlcmlhbGl6ZWRfZGF0YSAqZGF0YSA9IChjb25zdCBwY3JlMl9zZXJpYWxpemVkX2RhdGEgKilieXRlczsKKworaWYgKGRhdGEgPT0gTlVMTCkgcmV0dXJuIFBDUkUyX0VSUk9SX05VTEw7CitpZiAoZGF0YS0+bWFnaWMgIT0gU0VSSUFMSVpFRF9EQVRBX01BR0lDKSByZXR1cm4gUENSRTJfRVJST1JfQkFETUFHSUM7CitpZiAoZGF0YS0+dmVyc2lvbiAhPSBTRVJJQUxJWkVEX0RBVEFfVkVSU0lPTikgcmV0dXJuIFBDUkUyX0VSUk9SX0JBRE1PREU7CitpZiAoZGF0YS0+Y29uZmlnICE9IFNFUklBTElaRURfREFUQV9DT05GSUcpIHJldHVybiBQQ1JFMl9FUlJPUl9CQURNT0RFOworCityZXR1cm4gZGF0YS0+bnVtYmVyX29mX2NvZGVzOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgRnJlZSB0aGUgYWxsb2NhdGVkIHN0cmVhbSAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworUENSRTJfRVhQX0RFRk4gdm9pZCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX3NlcmlhbGl6ZV9mcmVlKHVpbnQ4X3QgKmJ5dGVzKQoreworaWYgKGJ5dGVzICE9IE5VTEwpCisgIHsKKyAgcGNyZTJfbWVtY3RsICptZW1jdGwgPSAocGNyZTJfbWVtY3RsICopKGJ5dGVzIC0gc2l6ZW9mKHBjcmUyX21lbWN0bCkpOworICBtZW1jdGwtPmZyZWUobWVtY3RsLCBtZW1jdGwtPm1lbW9yeV9kYXRhKTsKKyAgfQorfQorCisvKiBFbmQgb2YgcGNyZTJfc2VyaWFsaXplLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYyBiL2Rpc3QyL3NyYy9wY3JlMl9zdHJpbmdfdXRpbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTFmMjgyCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3BjcmUyX3N0cmluZ191dGlscy5jCkBAIC0wLDAgKzEsMjAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKy8qIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGludGVybmFsIGZ1bmN0aW9ucyBmb3IgY29tcGFyaW5nIGFuZCBmaW5kaW5nIHRoZSBsZW5ndGgKK29mIHN0cmluZ3MuIFRoZXNlIGFyZSB1c2VkIGluc3RlYWQgb2Ygc3RyY21wKCkgZXRjIGJlY2F1c2UgdGhlIHN0YW5kYXJkCitmdW5jdGlvbnMgd29yayBvbmx5IG9uIDgtYml0IGRhdGEuICovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICBDb21wYXJlIHR3byB6ZXJvLXRlcm1pbmF0ZWQgUENSRTIgc3RyaW5ncyAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitBcmd1bWVudHM6CisgIHN0cjEgICAgICAgIGZpcnN0IHN0cmluZworICBzdHIyICAgICAgICBzZWNvbmQgc3RyaW5nCisKK1JldHVybnM6ICAgICAgMCwgMSwgb3IgLTEKKyovCisKK2ludAorUFJJVihzdHJjbXApKFBDUkUyX1NQVFIgc3RyMSwgUENSRTJfU1BUUiBzdHIyKQoreworUENSRTJfVUNIQVIgYzEsIGMyOword2hpbGUgKCpzdHIxICE9ICdcMCcgfHwgKnN0cjIgIT0gJ1wwJykKKyAgeworICBjMSA9ICpzdHIxKys7CisgIGMyID0gKnN0cjIrKzsKKyAgaWYgKGMxICE9IGMyKSByZXR1cm4gKChjMSA+IGMyKSA8PCAxKSAtIDE7CisgIH0KK3JldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb21wYXJlIHplcm8tdGVybWluYXRlZCBQQ1JFMiAmIDgtYml0IHN0cmluZ3MgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQXMgdGhlIDgtYml0IHN0cmluZyBpcyBhbG1vc3QgYWx3YXlzIGEgbGl0ZXJhbCwgaXRzIHR5cGUgaXMgc3BlY2lmaWVkIGFzCitjb25zdCBjaGFyICouCisKK0FyZ3VtZW50czoKKyAgc3RyMSAgICAgICAgZmlyc3Qgc3RyaW5nCisgIHN0cjIgICAgICAgIHNlY29uZCBzdHJpbmcKKworUmV0dXJuczogICAgICAwLCAxLCBvciAtMQorKi8KKworaW50CitQUklWKHN0cmNtcF9jOCkoUENSRTJfU1BUUiBzdHIxLCBjb25zdCBjaGFyICpzdHIyKQoreworUENSRTJfVUNIQVIgYzEsIGMyOword2hpbGUgKCpzdHIxICE9ICdcMCcgfHwgKnN0cjIgIT0gJ1wwJykKKyAgeworICBjMSA9ICpzdHIxKys7CisgIGMyID0gKnN0cjIrKzsKKyAgaWYgKGMxICE9IGMyKSByZXR1cm4gKChjMSA+IGMyKSA8PCAxKSAtIDE7CisgIH0KK3JldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgIENvbXBhcmUgdHdvIFBDUkUyIHN0cmluZ3MsIGdpdmVuIGEgbGVuZ3RoICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK0FyZ3VtZW50czoKKyAgc3RyMSAgICAgICAgZmlyc3Qgc3RyaW5nCisgIHN0cjIgICAgICAgIHNlY29uZCBzdHJpbmcKKyAgbGVuICAgICAgICAgdGhlIGxlbmd0aAorCitSZXR1cm5zOiAgICAgIDAsIDEsIG9yIC0xCisqLworCitpbnQKK1BSSVYoc3RybmNtcCkoUENSRTJfU1BUUiBzdHIxLCBQQ1JFMl9TUFRSIHN0cjIsIHNpemVfdCBsZW4pCit7CitQQ1JFMl9VQ0hBUiBjMSwgYzI7Citmb3IgKDsgbGVuID4gMDsgbGVuLS0pCisgIHsKKyAgYzEgPSAqc3RyMSsrOworICBjMiA9ICpzdHIyKys7CisgIGlmIChjMSAhPSBjMikgcmV0dXJuICgoYzEgPiBjMikgPDwgMSkgLSAxOworICB9CityZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb21wYXJlIFBDUkUyIHN0cmluZyB0byA4LWJpdCBzdHJpbmcgYnkgbGVuZ3RoICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEFzIHRoZSA4LWJpdCBzdHJpbmcgaXMgYWxtb3N0IGFsd2F5cyBhIGxpdGVyYWwsIGl0cyB0eXBlIGlzIHNwZWNpZmllZCBhcworY29uc3QgY2hhciAqLgorCitBcmd1bWVudHM6CisgIHN0cjEgICAgICAgIGZpcnN0IHN0cmluZworICBzdHIyICAgICAgICBzZWNvbmQgc3RyaW5nCisgIGxlbiAgICAgICAgIHRoZSBsZW5ndGgKKworUmV0dXJuczogICAgICAwLCAxLCBvciAtMQorKi8KKworaW50CitQUklWKHN0cm5jbXBfYzgpKFBDUkUyX1NQVFIgc3RyMSwgY29uc3QgY2hhciAqc3RyMiwgc2l6ZV90IGxlbikKK3sKK1BDUkUyX1VDSEFSIGMxLCBjMjsKK2ZvciAoOyBsZW4gPiAwOyBsZW4tLSkKKyAgeworICBjMSA9ICpzdHIxKys7CisgIGMyID0gKnN0cjIrKzsKKyAgaWYgKGMxICE9IGMyKSByZXR1cm4gKChjMSA+IGMyKSA8PCAxKSAtIDE7CisgIH0KK3JldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICBGaW5kIHRoZSBsZW5ndGggb2YgYSBQQ1JFMiBzdHJpbmcgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK0FyZ3VtZW50OiAgICB0aGUgc3RyaW5nCitSZXR1cm5zOiAgICAgdGhlIGxlbmd0aAorKi8KKworUENSRTJfU0laRQorUFJJVihzdHJsZW4pKFBDUkUyX1NQVFIgc3RyKQoreworUENSRTJfU0laRSBjID0gMDsKK3doaWxlICgqc3RyKysgIT0gMCkgYysrOworcmV0dXJuIGM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogQ29weSA4LWJpdCAwLXRlcm1pbmF0ZWQgc3RyaW5nIHRvIFBDUkUyIHN0cmluZyAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBBcmd1bWVudHM6CisgIHN0cjEgICAgIGJ1ZmZlciB0byByZWNlaXZlIHRoZSBzdHJpbmcKKyAgc3RyMiAgICAgOC1iaXQgc3RyaW5nIHRvIGJlIGNvcGllZAorCitSZXR1cm5zOiAgIHRoZSBudW1iZXIgb2YgY29kZSB1bml0cyB1c2VkIChleGNsdWRpbmcgdHJhaWxpbmcgemVybykKKyovCisKK1BDUkUyX1NJWkUKK1BSSVYoc3RyY3B5X2M4KShQQ1JFMl9VQ0hBUiAqc3RyMSwgY29uc3QgY2hhciAqc3RyMikKK3sKK1BDUkUyX1VDSEFSICp0ID0gc3RyMTsKK3doaWxlICgqc3RyMiAhPSAwKSAqdCsrID0gKnN0cjIrKzsKKyp0ID0gMDsKK3JldHVybiB0IC0gc3RyMTsKK30KKworLyogRW5kIG9mIHBjcmUyX3N0cmluZ191dGlscy5jICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfc3R1ZHkuYyBiL2Rpc3QyL3NyYy9wY3JlMl9zdHVkeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4OTMyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJfc3R1ZHkuYwpAQCAtMCwwICsxLDE1NzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgUGVybC1Db21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUENSRSBpcyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBzeW50YXgKK2FuZCBzZW1hbnRpY3MgYXJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIG9mIHRoZSBQZXJsIDUgbGFuZ3VhZ2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBQaGlsaXAgSGF6ZWwKKyAgICAgT3JpZ2luYWwgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTIgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKyAgICAgICAgIE5ldyBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworLyogVGhpcyBtb2R1bGUgY29udGFpbnMgZnVuY3Rpb25zIGZvciBzY2FubmluZyBhIGNvbXBpbGVkIHBhdHRlcm4gYW5kCitjb2xsZWN0aW5nIGRhdGEgKGUuZy4gbWluaW11bSBtYXRjaGluZyBsZW5ndGgpLiAqLworCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKworCisvKiBTZXQgYSBiaXQgaW4gdGhlIHN0YXJ0aW5nIGNvZGUgdW5pdCBiaXQgbWFwLiAqLworCisjZGVmaW5lIFNFVF9CSVQoYykgcmUtPnN0YXJ0X2JpdG1hcFsoYykvOF0gfD0gKDEgPDwgKChjKSY3KSkKKworLyogUmV0dXJucyBmcm9tIHNldF9zdGFydF9iaXRzKCkgKi8KKworZW51bSB7IFNTQl9GQUlMLCBTU0JfRE9ORSwgU1NCX0NPTlRJTlVFLCBTU0JfVU5LTk9XTiB9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgRmluZCB0aGUgbWluaW11bSBzdWJqZWN0IGxlbmd0aCBmb3IgYSBncm91cCAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU2NhbiBhIHBhcmVudGhlc2l6ZWQgZ3JvdXAgYW5kIGNvbXB1dGUgdGhlIG1pbmltdW0gbGVuZ3RoIG9mIHN1YmplY3QgdGhhdAoraXMgbmVlZGVkIHRvIG1hdGNoIGl0LiBUaGlzIGlzIGEgbG93ZXIgYm91bmQ7IGl0IGRvZXMgbm90IG1lYW4gdGhlcmUgaXMgYQorc3RyaW5nIG9mIHRoYXQgbGVuZ3RoIHRoYXQgbWF0Y2hlcy4gSW4gVVRGIG1vZGUsIHRoZSByZXN1bHQgaXMgaW4gY2hhcmFjdGVycworcmF0aGVyIHRoYW4gY29kZSB1bml0cy4gVGhlIGZpZWxkIGluIGEgY29tcGlsZWQgcGF0dGVybiBmb3Igc3RvcmluZyB0aGUgbWluaW11bQorbGVuZ3RoIGlzIDE2LWJpdHMgbG9uZyAob24gdGhlIGdyb3VuZHMgdGhhdCBhbnl0aGluZyBsb25nZXIgdGhhbiB0aGF0IGlzCitwYXRob2xvZ2ljYWwpLCBzbyB3ZSBnaXZlIHVwIHdoZW4gd2UgcmVhY2ggdGhhdCBhbW91bnQuIFRoaXMgYWxzbyBtZWFucyB0aGF0CitpbnRlZ2VyIG92ZXJmbG93IGZvciByZWFsbHkgY3JhenkgcGF0dGVybnMgY2Fubm90IGhhcHBlbi4KKworQXJndW1lbnRzOgorICByZSAgICAgICAgICAgICAgY29tcGlsZWQgcGF0dGVybiBibG9jaworICBjb2RlICAgICAgICAgICAgcG9pbnRlciB0byBzdGFydCBvZiBncm91cCAodGhlIGJyYWNrZXQpCisgIHN0YXJ0Y29kZSAgICAgICBwb2ludGVyIHRvIHN0YXJ0IG9mIHRoZSB3aG9sZSBwYXR0ZXJuJ3MgY29kZQorICB1dGYgICAgICAgICAgICAgVVRGIGZsYWcKKyAgcmVjdXJzZXMgICAgICAgIGNoYWluIG9mIHJlY3Vyc2VfY2hlY2sgdG8gY2F0Y2ggbXV0dWFsIHJlY3Vyc2lvbgorICBjb3VudHB0ciAgICAgICAgcG9pbnRlciB0byBjYWxsIGNvdW50ICh0byBjYXRjaCBvdmVyIGNvbXBsZXhpdHkpCisKK1JldHVybnM6ICAgdGhlIG1pbmltdW0gbGVuZ3RoCisgICAgICAgICAgIC0xIFxDIGluIFVURi04IG1vZGUKKyAgICAgICAgICAgICAgb3IgKCpBQ0NFUFQpCisgICAgICAgICAgICAgIG9yIHBhdHRlcm4gdG9vIGNvbXBsaWNhdGVkCisgICAgICAgICAgICAgIG9yIGJhY2sgcmVmZXJlbmNlIHRvIGR1cGxpY2F0ZSBuYW1lL251bWJlcgorICAgICAgICAgICAtMiBpbnRlcm5hbCBlcnJvciAobWlzc2luZyBjYXB0dXJpbmcgYnJhY2tldCkKKyAgICAgICAgICAgLTMgaW50ZXJuYWwgZXJyb3IgKG9wY29kZSBub3QgbGlzdGVkKQorKi8KKworc3RhdGljIGludAorZmluZF9taW5sZW5ndGgoY29uc3QgcGNyZTJfcmVhbF9jb2RlICpyZSwgUENSRTJfU1BUUiBjb2RlLAorICBQQ1JFMl9TUFRSIHN0YXJ0Y29kZSwgQk9PTCB1dGYsIHJlY3Vyc2VfY2hlY2sgKnJlY3Vyc2VzLCBpbnQgKmNvdW50cHRyKQoreworaW50IGxlbmd0aCA9IC0xOworaW50IHByZXZfY2FwX3JlY25vID0gLTE7CitpbnQgcHJldl9jYXBfZCA9IDA7CitpbnQgcHJldl9yZWN1cnNlX3JlY25vID0gLTE7CitpbnQgcHJldl9yZWN1cnNlX2QgPSAwOwordWludDMyX3Qgb25jZV9mdWRnZSA9IDA7CitCT09MIGhhZF9yZWN1cnNlID0gRkFMU0U7CitCT09MIGR1cGNhcHVzZWQgPSAocmUtPmZsYWdzICYgUENSRTJfRFVQQ0FQVVNFRCkgIT0gMDsKK3JlY3Vyc2VfY2hlY2sgdGhpc19yZWN1cnNlOworcmVnaXN0ZXIgaW50IGJyYW5jaGxlbmd0aCA9IDA7CityZWdpc3RlciBQQ1JFMl9VQ0hBUiAqY2MgPSAoUENSRTJfVUNIQVIgKiljb2RlICsgMSArIExJTktfU0laRTsKKworLyogSWYgdGhpcyBpcyBhICJjb3VsZCBiZSBlbXB0eSIgZ3JvdXAsIGl0cyBtaW5pbXVtIGxlbmd0aCBpcyAwLiAqLworCitpZiAoKmNvZGUgPj0gT1BfU0JSQSAmJiAqY29kZSA8PSBPUF9TQ09ORCkgcmV0dXJuIDA7CisKKy8qIFNraXAgb3ZlciBjYXB0dXJpbmcgYnJhY2tldCBudW1iZXIgKi8KKworaWYgKCpjb2RlID09IE9QX0NCUkEgfHwgKmNvZGUgPT0gT1BfQ0JSQVBPUykgY2MgKz0gSU1NMl9TSVpFOworCisvKiBBIGxhcmdlIGFuZC9vciBjb21wbGV4IHJlZ2V4IGNhbiB0YWtlIHRvbyBsb25nIHRvIHByb2Nlc3MuICovCisKK2lmICgoKmNvdW50cHRyKSsrID4gMTAwMCkgcmV0dXJuIC0xOworCisvKiBTY2FuIGFsb25nIHRoZSBvcGNvZGVzIGZvciB0aGlzIGJyYW5jaC4gSWYgd2UgZ2V0IHRvIHRoZSBlbmQgb2YgdGhlIGJyYW5jaCwKK2NoZWNrIHRoZSBsZW5ndGggYWdhaW5zdCB0aGF0IG9mIHRoZSBvdGhlciBicmFuY2hlcy4gSWYgdGhlIGFjY3VtdWxhdGVkIGxlbmd0aAorcGFzc2VzIDE2LWJpdHMsIHN0b3AuICovCisKK2ZvciAoOzspCisgIHsKKyAgaW50IGQsIG1pbiwgcmVjbm87CisgIFBDUkUyX1VDSEFSICpjcywgKmNlOworICByZWdpc3RlciBQQ1JFMl9VQ0hBUiBvcCA9ICpjYzsKKworICBpZiAoYnJhbmNobGVuZ3RoID49IFVJTlQxNl9NQVgpIHJldHVybiBVSU5UMTZfTUFYOworCisgIHN3aXRjaCAob3ApCisgICAgeworICAgIGNhc2UgT1BfQ09ORDoKKyAgICBjYXNlIE9QX1NDT05EOgorCisgICAgLyogSWYgdGhlcmUgaXMgb25seSBvbmUgYnJhbmNoIGluIGEgY29uZGl0aW9uLCB0aGUgaW1wbGllZCBicmFuY2ggaGFzIHplcm8KKyAgICBsZW5ndGgsIHNvIHdlIGRvbid0IGFkZCBhbnl0aGluZy4gVGhpcyBjb3ZlcnMgdGhlIERFRklORSAiY29uZGl0aW9uIgorICAgIGF1dG9tYXRpY2FsbHkuIElmIHRoZXJlIGFyZSB0d28gYnJhbmNoZXMgd2UgY2FuIHRyZWF0IGl0IHRoZSBzYW1lIGFzIGFueQorICAgIG90aGVyIG5vbi1jYXB0dXJpbmcgc3VicGF0dGVybi4gKi8KKworICAgIGNzID0gY2MgKyBHRVQoY2MsIDEpOworICAgIGlmICgqY3MgIT0gT1BfQUxUKQorICAgICAgeworICAgICAgY2MgPSBjcyArIDEgKyBMSU5LX1NJWkU7CisgICAgICBicmVhazsKKyAgICAgIH0KKyAgICBnb3RvIFBST0NFU1NfTk9OX0NBUFRVUkU7CisKKyAgICAvKiBUaGVyZSdzIGEgc3BlY2lhbCBjYXNlIG9mIE9QX09OQ0UsIHdoZW4gaXQgaXMgd3JhcHBlZCByb3VuZCBhbgorICAgIE9QX1JFQ1VSU0UuIFdlJ2QgbGlrZSB0byBwcm9jZXNzIHRoZSBsYXR0ZXIgYXQgdGhpcyBsZXZlbCBzbyB0aGF0CisgICAgcmVtZW1iZXJpbmcgdGhlIHZhbHVlIHdvcmtzIGZvciByZXBlYXRlZCBjYXNlcy4gU28gd2UgZG8gbm90aGluZywgYnV0CisgICAgc2V0IGEgZnVkZ2UgdmFsdWUgdG8gc2tpcCBvdmVyIHRoZSBPUF9LRVQgYWZ0ZXIgdGhlIHJlY3Vyc2UuICovCisKKyAgICBjYXNlIE9QX09OQ0U6CisgICAgaWYgKGNjWzErTElOS19TSVpFXSA9PSBPUF9SRUNVUlNFICYmIGNjWzIqKDErTElOS19TSVpFKV0gPT0gT1BfS0VUKQorICAgICAgeworICAgICAgb25jZV9mdWRnZSA9IDEgKyBMSU5LX1NJWkU7CisgICAgICBjYyArPSAxICsgTElOS19TSVpFOworICAgICAgYnJlYWs7CisgICAgICB9CisgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICBjYXNlIE9QX09OQ0VfTkM6CisgICAgY2FzZSBPUF9CUkE6CisgICAgY2FzZSBPUF9TQlJBOgorICAgIGNhc2UgT1BfQlJBUE9TOgorICAgIGNhc2UgT1BfU0JSQVBPUzoKKyAgICBQUk9DRVNTX05PTl9DQVBUVVJFOgorICAgIGQgPSBmaW5kX21pbmxlbmd0aChyZSwgY2MsIHN0YXJ0Y29kZSwgdXRmLCByZWN1cnNlcywgY291bnRwdHIpOworICAgIGlmIChkIDwgMCkgcmV0dXJuIGQ7CisgICAgYnJhbmNobGVuZ3RoICs9IGQ7CisgICAgZG8gY2MgKz0gR0VUKGNjLCAxKTsgd2hpbGUgKCpjYyA9PSBPUF9BTFQpOworICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICAvKiBUbyBzYXZlIHRpbWUgZm9yIHJlcGVhdGVkIGNhcHR1cmluZyBzdWJwYXR0ZXJucywgd2UgcmVtZW1iZXIgdGhlCisgICAgbGVuZ3RoIG9mIHRoZSBwcmV2aW91cyBvbmUuIFVuZm9ydHVuYXRlbHkgd2UgY2FuJ3QgZG8gdGhlIHNhbWUgZm9yCisgICAgdGhlIHVubnVtYmVyZWQgb25lcyBhYm92ZS4gTm9yIGNhbiB3ZSBkbyB0aGlzIGlmICg/fCBpcyBwcmVzZW50IGluIHRoZQorICAgIHBhdHRlcm4gYmVjYXVzZSBjYXB0dXJlcyB3aXRoIHRoZSBzYW1lIG51bWJlciBhcmUgbm90IHRoZW4gaWRlbnRpY2FsLiAqLworCisgICAgY2FzZSBPUF9DQlJBOgorICAgIGNhc2UgT1BfU0NCUkE6CisgICAgY2FzZSBPUF9DQlJBUE9TOgorICAgIGNhc2UgT1BfU0NCUkFQT1M6CisgICAgcmVjbm8gPSBkdXBjYXB1c2VkPyBwcmV2X2NhcF9yZWNubyAtIDEgOiAoaW50KUdFVDIoY2MsIDErTElOS19TSVpFKTsKKyAgICBpZiAocmVjbm8gIT0gcHJldl9jYXBfcmVjbm8pCisgICAgICB7CisgICAgICBwcmV2X2NhcF9yZWNubyA9IHJlY25vOworICAgICAgcHJldl9jYXBfZCA9IGZpbmRfbWlubGVuZ3RoKHJlLCBjYywgc3RhcnRjb2RlLCB1dGYsIHJlY3Vyc2VzLCBjb3VudHB0cik7CisgICAgICBpZiAocHJldl9jYXBfZCA8IDApIHJldHVybiBwcmV2X2NhcF9kOworICAgICAgfQorICAgIGJyYW5jaGxlbmd0aCArPSBwcmV2X2NhcF9kOworICAgIGRvIGNjICs9IEdFVChjYywgMSk7IHdoaWxlICgqY2MgPT0gT1BfQUxUKTsKKyAgICBjYyArPSAxICsgTElOS19TSVpFOworICAgIGJyZWFrOworCisgICAgLyogQUNDRVBUIG1ha2VzIHRoaW5ncyBmYXIgdG9vIGNvbXBsaWNhdGVkOyB3ZSBoYXZlIHRvIGdpdmUgdXAuICovCisKKyAgICBjYXNlIE9QX0FDQ0VQVDoKKyAgICBjYXNlIE9QX0FTU0VSVF9BQ0NFUFQ6CisgICAgcmV0dXJuIC0xOworCisgICAgLyogUmVhY2hlZCBlbmQgb2YgYSBicmFuY2g7IGlmIGl0J3MgYSBrZXQgaXQgaXMgdGhlIGVuZCBvZiBhIG5lc3RlZAorICAgIGNhbGwuIElmIGl0J3MgQUxUIGl0IGlzIGFuIGFsdGVybmF0aW9uIGluIGEgbmVzdGVkIGNhbGwuIElmIGl0IGlzIEVORCBpdCdzCisgICAgdGhlIGVuZCBvZiB0aGUgb3V0ZXIgY2FsbC4gQWxsIGNhbiBiZSBoYW5kbGVkIGJ5IHRoZSBzYW1lIGNvZGUuIElmIGFuCisgICAgQUNDRVBUIHdhcyBwcmV2aW91c2x5IGVuY291bnRlcmVkLCB1c2UgdGhlIGxlbmd0aCB0aGF0IHdhcyBpbiBmb3JjZSBhdCB0aGF0CisgICAgdGltZSwgYW5kIHBhc3MgYmFjayB0aGUgc2hvcnRlc3QgQUNDRVBUIGxlbmd0aC4gKi8KKworICAgIGNhc2UgT1BfQUxUOgorICAgIGNhc2UgT1BfS0VUOgorICAgIGNhc2UgT1BfS0VUUk1BWDoKKyAgICBjYXNlIE9QX0tFVFJNSU46CisgICAgY2FzZSBPUF9LRVRSUE9TOgorICAgIGNhc2UgT1BfRU5EOgorICAgIGlmIChsZW5ndGggPCAwIHx8ICghaGFkX3JlY3Vyc2UgJiYgYnJhbmNobGVuZ3RoIDwgbGVuZ3RoKSkKKyAgICAgIGxlbmd0aCA9IGJyYW5jaGxlbmd0aDsKKyAgICBpZiAob3AgIT0gT1BfQUxUKSByZXR1cm4gbGVuZ3RoOworICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7CisgICAgYnJhbmNobGVuZ3RoID0gMDsKKyAgICBoYWRfcmVjdXJzZSA9IEZBTFNFOworICAgIGJyZWFrOworCisgICAgLyogU2tpcCBvdmVyIGFzc2VydGl2ZSBzdWJwYXR0ZXJucyAqLworCisgICAgY2FzZSBPUF9BU1NFUlQ6CisgICAgY2FzZSBPUF9BU1NFUlRfTk9UOgorICAgIGNhc2UgT1BfQVNTRVJUQkFDSzoKKyAgICBjYXNlIE9QX0FTU0VSVEJBQ0tfTk9UOgorICAgIGRvIGNjICs9IEdFVChjYywgMSk7IHdoaWxlICgqY2MgPT0gT1BfQUxUKTsKKyAgICAvKiBGYWxsIHRocm91Z2ggKi8KKworICAgIC8qIFNraXAgb3ZlciB0aGluZ3MgdGhhdCBkb24ndCBtYXRjaCBjaGFycyAqLworCisgICAgY2FzZSBPUF9SRVZFUlNFOgorICAgIGNhc2UgT1BfQ1JFRjoKKyAgICBjYXNlIE9QX0ROQ1JFRjoKKyAgICBjYXNlIE9QX1JSRUY6CisgICAgY2FzZSBPUF9ETlJSRUY6CisgICAgY2FzZSBPUF9GQUxTRToKKyAgICBjYXNlIE9QX1RSVUU6CisgICAgY2FzZSBPUF9DQUxMT1VUOgorICAgIGNhc2UgT1BfU09EOgorICAgIGNhc2UgT1BfU09NOgorICAgIGNhc2UgT1BfRU9EOgorICAgIGNhc2UgT1BfRU9ETjoKKyAgICBjYXNlIE9QX0NJUkM6CisgICAgY2FzZSBPUF9DSVJDTToKKyAgICBjYXNlIE9QX0RPTEw6CisgICAgY2FzZSBPUF9ET0xMTToKKyAgICBjYXNlIE9QX05PVF9XT1JEX0JPVU5EQVJZOgorICAgIGNhc2UgT1BfV09SRF9CT1VOREFSWToKKyAgICBjYyArPSBQUklWKE9QX2xlbmd0aHMpWypjY107CisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX0NBTExPVVRfU1RSOgorICAgIGNjICs9IEdFVChjYywgMSArIDIqTElOS19TSVpFKTsKKyAgICBicmVhazsKKworICAgIC8qIFNraXAgb3ZlciBhIHN1YnBhdHRlcm4gdGhhdCBoYXMgYSB7MH0gb3IgezAseH0gcXVhbnRpZmllciAqLworCisgICAgY2FzZSBPUF9CUkFaRVJPOgorICAgIGNhc2UgT1BfQlJBTUlOWkVSTzoKKyAgICBjYXNlIE9QX0JSQVBPU1pFUk86CisgICAgY2FzZSBPUF9TS0lQWkVSTzoKKyAgICBjYyArPSBQUklWKE9QX2xlbmd0aHMpWypjY107CisgICAgZG8gY2MgKz0gR0VUKGNjLCAxKTsgd2hpbGUgKCpjYyA9PSBPUF9BTFQpOworICAgIGNjICs9IDEgKyBMSU5LX1NJWkU7CisgICAgYnJlYWs7CisKKyAgICAvKiBIYW5kbGUgbGl0ZXJhbCBjaGFyYWN0ZXJzIGFuZCArIHJlcGV0aXRpb25zICovCisKKyAgICBjYXNlIE9QX0NIQVI6CisgICAgY2FzZSBPUF9DSEFSSToKKyAgICBjYXNlIE9QX05PVDoKKyAgICBjYXNlIE9QX05PVEk6CisgICAgY2FzZSBPUF9QTFVTOgorICAgIGNhc2UgT1BfUExVU0k6CisgICAgY2FzZSBPUF9NSU5QTFVTOgorICAgIGNhc2UgT1BfTUlOUExVU0k6CisgICAgY2FzZSBPUF9QT1NQTFVTOgorICAgIGNhc2UgT1BfUE9TUExVU0k6CisgICAgY2FzZSBPUF9OT1RQTFVTOgorICAgIGNhc2UgT1BfTk9UUExVU0k6CisgICAgY2FzZSBPUF9OT1RNSU5QTFVTOgorICAgIGNhc2UgT1BfTk9UTUlOUExVU0k6CisgICAgY2FzZSBPUF9OT1RQT1NQTFVTOgorICAgIGNhc2UgT1BfTk9UUE9TUExVU0k6CisgICAgYnJhbmNobGVuZ3RoKys7CisgICAgY2MgKz0gMjsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICBpZiAodXRmICYmIEhBU19FWFRSQUxFTihjY1stMV0pKSBjYyArPSBHRVRfRVhUUkFMRU4oY2NbLTFdKTsKKyNlbmRpZgorICAgIGJyZWFrOworCisgICAgY2FzZSBPUF9UWVBFUExVUzoKKyAgICBjYXNlIE9QX1RZUEVNSU5QTFVTOgorICAgIGNhc2UgT1BfVFlQRVBPU1BMVVM6CisgICAgYnJhbmNobGVuZ3RoKys7CisgICAgY2MgKz0gKGNjWzFdID09IE9QX1BST1AgfHwgY2NbMV0gPT0gT1BfTk9UUFJPUCk/IDQgOiAyOworICAgIGJyZWFrOworCisgICAgLyogSGFuZGxlIGV4YWN0IHJlcGV0aXRpb25zLiBUaGUgY291bnQgaXMgYWxyZWFkeSBpbiBjaGFyYWN0ZXJzLCBidXQgd2UKKyAgICBtYXkgbmVlZCB0byBza2lwIG92ZXIgYSBtdWx0aWJ5dGUgY2hhcmFjdGVyIGluIFVURiBtb2RlLiAgKi8KKworICAgIGNhc2UgT1BfRVhBQ1Q6CisgICAgY2FzZSBPUF9FWEFDVEk6CisgICAgY2FzZSBPUF9OT1RFWEFDVDoKKyAgICBjYXNlIE9QX05PVEVYQUNUSToKKyAgICBicmFuY2hsZW5ndGggKz0gR0VUMihjYywxKTsKKyAgICBjYyArPSAyICsgSU1NMl9TSVpFOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmICh1dGYgJiYgSEFTX0VYVFJBTEVOKGNjWy0xXSkpIGNjICs9IEdFVF9FWFRSQUxFTihjY1stMV0pOworI2VuZGlmCisgICAgYnJlYWs7CisKKyAgICBjYXNlIE9QX1RZUEVFWEFDVDoKKyAgICBicmFuY2hsZW5ndGggKz0gR0VUMihjYywxKTsKKyAgICBjYyArPSAyICsgSU1NMl9TSVpFICsgKChjY1sxICsgSU1NMl9TSVpFXSA9PSBPUF9QUk9QCisgICAgICB8fCBjY1sxICsgSU1NMl9TSVpFXSA9PSBPUF9OT1RQUk9QKT8gMiA6IDApOworICAgIGJyZWFrOworCisgICAgLyogSGFuZGxlIHNpbmdsZS1jaGFyIG5vbi1saXRlcmFsIG1hdGNoZXJzICovCisKKyAgICBjYXNlIE9QX1BST1A6CisgICAgY2FzZSBPUF9OT1RQUk9QOgorICAgIGNjICs9IDI7CisgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgICBjYXNlIE9QX0RJR0lUOgorICAgIGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6CisgICAgY2FzZSBPUF9XSElURVNQQUNFOgorICAgIGNhc2UgT1BfTk9UX1dPUkRDSEFSOgorICAgIGNhc2UgT1BfV09SRENIQVI6CisgICAgY2FzZSBPUF9BTlk6CisgICAgY2FzZSBPUF9BTExBTlk6CisgICAgY2FzZSBPUF9FWFRVTkk6CisgICAgY2FzZSBPUF9IU1BBQ0U6CisgICAgY2FzZSBPUF9OT1RfSFNQQUNFOgorICAgIGNhc2UgT1BfVlNQQUNFOgorICAgIGNhc2UgT1BfTk9UX1ZTUEFDRToKKyAgICBicmFuY2hsZW5ndGgrKzsKKyAgICBjYysrOworICAgIGJyZWFrOworCisgICAgLyogIkFueSBuZXdsaW5lIiBtaWdodCBtYXRjaCB0d28gY2hhcmFjdGVycywgYnV0IGl0IGFsc28gbWlnaHQgbWF0Y2gganVzdAorICAgIG9uZS4gKi8KKworICAgIGNhc2UgT1BfQU5ZTkw6CisgICAgYnJhbmNobGVuZ3RoICs9IDE7CisgICAgY2MrKzsKKyAgICBicmVhazsKKworICAgIC8qIFRoZSBzaW5nbGUtYnl0ZSBtYXRjaGVyIG1lYW5zIHdlIGNhbid0IHByb2NlZWQgaW4gVVRGIG1vZGUuIChJbgorICAgIG5vbi1VVEYgbW9kZSBcQyB3aWxsIGFjdHVhbGx5IGJlIHR1cm5lZCBpbnRvIE9QX0FMTEFOWSwgc28gd29uJ3QgZXZlcgorICAgIGFwcGVhciwgYnV0IGxlYXZlIHRoZSBjb2RlLCBqdXN0IGluIGNhc2UuKSAqLworCisgICAgY2FzZSBPUF9BTllCWVRFOgorI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmICh1dGYpIHJldHVybiAtMTsKKyNlbmRpZgorICAgIGJyYW5jaGxlbmd0aCsrOworICAgIGNjKys7CisgICAgYnJlYWs7CisKKyAgICAvKiBGb3IgcmVwZWF0ZWQgY2hhcmFjdGVyIHR5cGVzLCB3ZSBoYXZlIHRvIHRlc3QgZm9yIFxwIGFuZCBcUCwgd2hpY2ggaGF2ZQorICAgIGFuIGV4dHJhIHR3byBieXRlcyBvZiBwYXJhbWV0ZXJzLiAqLworCisgICAgY2FzZSBPUF9UWVBFU1RBUjoKKyAgICBjYXNlIE9QX1RZUEVNSU5TVEFSOgorICAgIGNhc2UgT1BfVFlQRVFVRVJZOgorICAgIGNhc2UgT1BfVFlQRU1JTlFVRVJZOgorICAgIGNhc2UgT1BfVFlQRVBPU1NUQVI6CisgICAgY2FzZSBPUF9UWVBFUE9TUVVFUlk6CisgICAgaWYgKGNjWzFdID09IE9QX1BST1AgfHwgY2NbMV0gPT0gT1BfTk9UUFJPUCkgY2MgKz0gMjsKKyAgICBjYyArPSBQUklWKE9QX2xlbmd0aHMpW29wXTsKKyAgICBicmVhazsKKworICAgIGNhc2UgT1BfVFlQRVVQVE86CisgICAgY2FzZSBPUF9UWVBFTUlOVVBUTzoKKyAgICBjYXNlIE9QX1RZUEVQT1NVUFRPOgorICAgIGlmIChjY1sxICsgSU1NMl9TSVpFXSA9PSBPUF9QUk9QCisgICAgICB8fCBjY1sxICsgSU1NMl9TSVpFXSA9PSBPUF9OT1RQUk9QKSBjYyArPSAyOworICAgIGNjICs9IFBSSVYoT1BfbGVuZ3Rocylbb3BdOworICAgIGJyZWFrOworCisgICAgLyogQ2hlY2sgYSBjbGFzcyBmb3IgdmFyaWFibGUgcXVhbnRpZmljYXRpb24gKi8KKworICAgIGNhc2UgT1BfQ0xBU1M6CisgICAgY2FzZSBPUF9OQ0xBU1M6CisjaWZkZWYgU1VQUE9SVF9XSURFX0NIQVJTCisgICAgY2FzZSBPUF9YQ0xBU1M6CisgICAgLyogVGhlIG9yaWdpbmFsIGNvZGUgY2F1c2VkIGFuIHVuc2lnbmVkIG92ZXJmbG93IGluIDY0IGJpdCBzeXN0ZW1zLAorICAgIHNvIG5vdyB3ZSB1c2UgYSBjb25kaXRpb25hbCBzdGF0ZW1lbnQuICovCisgICAgaWYgKG9wID09IE9QX1hDTEFTUykKKyAgICAgIGNjICs9IEdFVChjYywgMSk7CisgICAgZWxzZQorICAgICAgY2MgKz0gUFJJVihPUF9sZW5ndGhzKVtPUF9DTEFTU107CisjZWxzZQorICAgIGNjICs9IFBSSVYoT1BfbGVuZ3RocylbT1BfQ0xBU1NdOworI2VuZGlmCisKKyAgICBzd2l0Y2ggKCpjYykKKyAgICAgIHsKKyAgICAgIGNhc2UgT1BfQ1JQTFVTOgorICAgICAgY2FzZSBPUF9DUk1JTlBMVVM6CisgICAgICBjYXNlIE9QX0NSUE9TUExVUzoKKyAgICAgIGJyYW5jaGxlbmd0aCsrOworICAgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICAgIGNhc2UgT1BfQ1JTVEFSOgorICAgICAgY2FzZSBPUF9DUk1JTlNUQVI6CisgICAgICBjYXNlIE9QX0NSUVVFUlk6CisgICAgICBjYXNlIE9QX0NSTUlOUVVFUlk6CisgICAgICBjYXNlIE9QX0NSUE9TU1RBUjoKKyAgICAgIGNhc2UgT1BfQ1JQT1NRVUVSWToKKyAgICAgIGNjKys7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9DUlJBTkdFOgorICAgICAgY2FzZSBPUF9DUk1JTlJBTkdFOgorICAgICAgY2FzZSBPUF9DUlBPU1JBTkdFOgorICAgICAgYnJhbmNobGVuZ3RoICs9IEdFVDIoY2MsMSk7CisgICAgICBjYyArPSAxICsgMiAqIElNTTJfU0laRTsKKyAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgYnJhbmNobGVuZ3RoKys7CisgICAgICBicmVhazsKKyAgICAgIH0KKyAgICBicmVhazsKKworICAgIC8qIEJhY2tyZWZlcmVuY2VzIGFuZCBzdWJyb3V0aW5lIGNhbGxzIChPUF9SRUNVUlNFKSBhcmUgdHJlYXRlZCBpbiB0aGUgc2FtZQorICAgIHdheTogd2UgZmluZCB0aGUgbWluaW11bSBsZW5ndGggZm9yIHRoZSBzdWJwYXR0ZXJuLiBBIHJlY3Vyc2lvbgorICAgIChiYWNrcmVmZXJlbmNlIG9yIHN1YnJvdXRpbmUpIGNhdXNlcyBhbiBhIGZsYWcgdG8gYmUgc2V0IHRoYXQgY2F1c2VzIHRoZQorICAgIGxlbmd0aCBvZiB0aGlzIGJyYW5jaCB0byBiZSBpZ25vcmVkLiBUaGUgbG9naWMgaXMgdGhhdCBhIHJlY3Vyc2lvbiBjYW4gb25seQorICAgIG1ha2Ugc2Vuc2UgaWYgdGhlcmUgaXMgYW5vdGhlciBhbHRlcm5hdGl2ZSB0aGF0IHN0b3BzIHRoZSByZWN1cnNpbmcuIFRoYXQKKyAgICB3aWxsIHByb3ZpZGUgdGhlIG1pbmltdW0gbGVuZ3RoICh3aGVuIG5vIHJlY3Vyc2lvbiBoYXBwZW5zKS4KKworICAgIElmIFBDUkUyX01BVENIX1VOU0VUX0JBQ0tSRUYgaXMgc2V0LCBhIGJhY2tyZWZlcmVuY2UgdG8gYW4gdW5zZXQgYnJhY2tldAorICAgIG1hdGNoZXMgYW4gZW1wdHkgc3RyaW5nIChieSBkZWZhdWx0IGl0IGNhdXNlcyBhIG1hdGNoaW5nIGZhaWx1cmUpLCBzbyBpbgorICAgIHRoYXQgY2FzZSB3ZSBtdXN0IHNldCB0aGUgbWluaW11bSBsZW5ndGggdG8gemVyby4gKi8KKworICAgIC8qIER1cGxpY2F0ZSBuYW1lZCBwYXR0ZXJuIGJhY2sgcmVmZXJlbmNlLiBXZSBjYW5ub3QgcmVsaWFibHkgZmluZCBhIGxlbmd0aAorICAgIGZvciB0aGlzIGlmIGR1cGxpY2F0ZSBudW1iZXJzIGFyZSBwcmVzZW50IGluIHRoZSBwYXR0ZXJuLiAqLworCisgICAgY2FzZSBPUF9ETlJFRjoKKyAgICBjYXNlIE9QX0ROUkVGSToKKyAgICBpZiAoZHVwY2FwdXNlZCkgcmV0dXJuIC0xOworICAgIGlmICgocmUtPm92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX01BVENIX1VOU0VUX0JBQ0tSRUYpID09IDApCisgICAgICB7CisgICAgICBpbnQgY291bnQgPSBHRVQyKGNjLCAxK0lNTTJfU0laRSk7CisgICAgICBQQ1JFMl9VQ0hBUiAqc2xvdCA9CisgICAgICAgIChQQ1JFMl9VQ0hBUiAqKSgodWludDhfdCAqKXJlICsgc2l6ZW9mKHBjcmUyX3JlYWxfY29kZSkpICsKKyAgICAgICAgICBHRVQyKGNjLCAxKSAqIHJlLT5uYW1lX2VudHJ5X3NpemU7CisKKyAgICAgIGQgPSBJTlRfTUFYOworCisgICAgICAvKiBTY2FuIGFsbCBncm91cHMgd2l0aCB0aGUgc2FtZSBuYW1lICovCisKKyAgICAgIHdoaWxlIChjb3VudC0tID4gMCkKKyAgICAgICAgeworICAgICAgICBjZSA9IGNzID0gKFBDUkUyX1VDSEFSICopUFJJVihmaW5kX2JyYWNrZXQpKHN0YXJ0Y29kZSwgdXRmLCBHRVQyKHNsb3QsIDApKTsKKyAgICAgICAgaWYgKGNzID09IE5VTEwpIHJldHVybiAtMjsKKyAgICAgICAgZG8gY2UgKz0gR0VUKGNlLCAxKTsgd2hpbGUgKCpjZSA9PSBPUF9BTFQpOworICAgICAgICBpZiAoY2MgPiBjcyAmJiBjYyA8IGNlKSAgICAvKiBTaW1wbGUgcmVjdXJzaW9uICovCisgICAgICAgICAgeworICAgICAgICAgIGQgPSAwOworICAgICAgICAgIGhhZF9yZWN1cnNlID0gVFJVRTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgcmVjdXJzZV9jaGVjayAqciA9IHJlY3Vyc2VzOworICAgICAgICAgIGZvciAociA9IHJlY3Vyc2VzOyByICE9IE5VTEw7IHIgPSByLT5wcmV2KSBpZiAoci0+Z3JvdXAgPT0gY3MpIGJyZWFrOworICAgICAgICAgIGlmIChyICE9IE5VTEwpICAgICAgICAgICAvKiBNdXR1YWwgcmVjdXJzaW9uICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICBkID0gMDsKKyAgICAgICAgICAgIGhhZF9yZWN1cnNlID0gVFJVRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGludCBkZDsKKyAgICAgICAgICAgIHRoaXNfcmVjdXJzZS5wcmV2ID0gcmVjdXJzZXM7CisgICAgICAgICAgICB0aGlzX3JlY3Vyc2UuZ3JvdXAgPSBjczsKKyAgICAgICAgICAgIGRkID0gZmluZF9taW5sZW5ndGgocmUsIGNzLCBzdGFydGNvZGUsIHV0ZiwgJnRoaXNfcmVjdXJzZSwgY291bnRwdHIpOworICAgICAgICAgICAgaWYgKGRkIDwgZCkgZCA9IGRkOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgc2xvdCArPSByZS0+bmFtZV9lbnRyeV9zaXplOworICAgICAgICB9CisgICAgICB9CisgICAgZWxzZSBkID0gMDsKKyAgICBjYyArPSAxICsgMipJTU0yX1NJWkU7CisgICAgZ290byBSRVBFQVRfQkFDS19SRUZFUkVOQ0U7CisKKyAgICAvKiBTaW5nbGUgYmFjayByZWZlcmVuY2UuIFdlIGNhbm5vdCBmaW5kIGEgbGVuZ3RoIGZvciB0aGlzIGlmIGR1cGxpY2F0ZQorICAgIG51bWJlcnMgYXJlIHByZXNlbnQgaW4gdGhlIHBhdHRlcm4uICovCisKKyAgICBjYXNlIE9QX1JFRjoKKyAgICBjYXNlIE9QX1JFRkk6CisgICAgaWYgKGR1cGNhcHVzZWQpIHJldHVybiAtMTsKKyAgICBpZiAoKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9NQVRDSF9VTlNFVF9CQUNLUkVGKSA9PSAwKQorICAgICAgeworICAgICAgY2UgPSBjcyA9IChQQ1JFMl9VQ0hBUiAqKVBSSVYoZmluZF9icmFja2V0KShzdGFydGNvZGUsIHV0ZiwgR0VUMihjYywgMSkpOworICAgICAgaWYgKGNzID09IE5VTEwpIHJldHVybiAtMjsKKyAgICAgIGRvIGNlICs9IEdFVChjZSwgMSk7IHdoaWxlICgqY2UgPT0gT1BfQUxUKTsKKyAgICAgIGlmIChjYyA+IGNzICYmIGNjIDwgY2UpICAgIC8qIFNpbXBsZSByZWN1cnNpb24gKi8KKyAgICAgICAgeworICAgICAgICBkID0gMDsKKyAgICAgICAgaGFkX3JlY3Vyc2UgPSBUUlVFOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgcmVjdXJzZV9jaGVjayAqciA9IHJlY3Vyc2VzOworICAgICAgICBmb3IgKHIgPSByZWN1cnNlczsgciAhPSBOVUxMOyByID0gci0+cHJldikgaWYgKHItPmdyb3VwID09IGNzKSBicmVhazsKKyAgICAgICAgaWYgKHIgIT0gTlVMTCkgICAgICAgICAgIC8qIE11dHVhbCByZWN1cnNpb24gKi8KKyAgICAgICAgICB7CisgICAgICAgICAgZCA9IDA7CisgICAgICAgICAgaGFkX3JlY3Vyc2UgPSBUUlVFOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICB0aGlzX3JlY3Vyc2UucHJldiA9IHJlY3Vyc2VzOworICAgICAgICAgIHRoaXNfcmVjdXJzZS5ncm91cCA9IGNzOworICAgICAgICAgIGQgPSBmaW5kX21pbmxlbmd0aChyZSwgY3MsIHN0YXJ0Y29kZSwgdXRmLCAmdGhpc19yZWN1cnNlLCBjb3VudHB0cik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgZWxzZSBkID0gMDsKKyAgICBjYyArPSAxICsgSU1NMl9TSVpFOworCisgICAgLyogSGFuZGxlIHJlcGVhdGVkIGJhY2sgcmVmZXJlbmNlcyAqLworCisgICAgUkVQRUFUX0JBQ0tfUkVGRVJFTkNFOgorICAgIHN3aXRjaCAoKmNjKQorICAgICAgeworICAgICAgY2FzZSBPUF9DUlNUQVI6CisgICAgICBjYXNlIE9QX0NSTUlOU1RBUjoKKyAgICAgIGNhc2UgT1BfQ1JRVUVSWToKKyAgICAgIGNhc2UgT1BfQ1JNSU5RVUVSWToKKyAgICAgIGNhc2UgT1BfQ1JQT1NTVEFSOgorICAgICAgY2FzZSBPUF9DUlBPU1FVRVJZOgorICAgICAgbWluID0gMDsKKyAgICAgIGNjKys7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9DUlBMVVM6CisgICAgICBjYXNlIE9QX0NSTUlOUExVUzoKKyAgICAgIGNhc2UgT1BfQ1JQT1NQTFVTOgorICAgICAgbWluID0gMTsKKyAgICAgIGNjKys7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9DUlJBTkdFOgorICAgICAgY2FzZSBPUF9DUk1JTlJBTkdFOgorICAgICAgY2FzZSBPUF9DUlBPU1JBTkdFOgorICAgICAgbWluID0gR0VUMihjYywgMSk7CisgICAgICBjYyArPSAxICsgMiAqIElNTTJfU0laRTsKKyAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgbWluID0gMTsKKyAgICAgIGJyZWFrOworICAgICAgfQorCisgICAgIC8qIFRha2UgY2FyZSBub3QgdG8gb3ZlcmZsb3c6ICgxKSBtaW4gYW5kIGQgYXJlIGludHMsIHNvIGNoZWNrIHRoYXQgdGhlaXIKKyAgICAgcHJvZHVjdCBpcyBub3QgZ3JlYXRlciB0aGFuIElOVF9NQVguICgyKSBicmFuY2hsZW5ndGggaXMgbGltaXRlZCB0bworICAgICBVSU5UMTZfTUFYIChjaGVja2VkIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3ApLiAqLworCisgICAgaWYgKChkID4gMCAmJiAoSU5UX01BWC9kKSA8IG1pbikgfHwgVUlOVDE2X01BWCAtIGJyYW5jaGxlbmd0aCA8IG1pbipkKQorICAgICAgYnJhbmNobGVuZ3RoID0gVUlOVDE2X01BWDsKKyAgICBlbHNlIGJyYW5jaGxlbmd0aCArPSBtaW4gKiBkOworICAgIGJyZWFrOworCisgICAgLyogUmVjdXJzaW9uIGFsd2F5cyByZWZlcnMgdG8gdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBzdWJwYXR0ZXJuIHdpdGggYQorICAgIGdpdmVuIG51bWJlci4gVGhlcmVmb3JlLCB3ZSBjYW4gYWx3YXlzIG1ha2UgdXNlIG9mIGNhY2hpbmcsIGV2ZW4gd2hlbiB0aGUKKyAgICBwYXR0ZXJuIGNvbnRhaW5zIG11bHRpcGxlIHN1YnBhdHRlcm5zIHdpdGggdGhlIHNhbWUgbnVtYmVyLiAqLworCisgICAgY2FzZSBPUF9SRUNVUlNFOgorICAgIGNzID0gY2UgPSAoUENSRTJfVUNIQVIgKilzdGFydGNvZGUgKyBHRVQoY2MsIDEpOworICAgIHJlY25vID0gR0VUMihjcywgMStMSU5LX1NJWkUpOworICAgIGlmIChyZWNubyA9PSBwcmV2X3JlY3Vyc2VfcmVjbm8pCisgICAgICB7CisgICAgICBicmFuY2hsZW5ndGggKz0gcHJldl9yZWN1cnNlX2Q7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgZG8gY2UgKz0gR0VUKGNlLCAxKTsgd2hpbGUgKCpjZSA9PSBPUF9BTFQpOworICAgICAgaWYgKGNjID4gY3MgJiYgY2MgPCBjZSkgICAgLyogU2ltcGxlIHJlY3Vyc2lvbiAqLworICAgICAgICBoYWRfcmVjdXJzZSA9IFRSVUU7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgcmVjdXJzZV9jaGVjayAqciA9IHJlY3Vyc2VzOworICAgICAgICBmb3IgKHIgPSByZWN1cnNlczsgciAhPSBOVUxMOyByID0gci0+cHJldikgaWYgKHItPmdyb3VwID09IGNzKSBicmVhazsKKyAgICAgICAgaWYgKHIgIT0gTlVMTCkgICAgICAgICAgLyogTXV0dWFsIHJlY3Vyc2lvbiAqLworICAgICAgICAgIGhhZF9yZWN1cnNlID0gVFJVRTsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICB0aGlzX3JlY3Vyc2UucHJldiA9IHJlY3Vyc2VzOworICAgICAgICAgIHRoaXNfcmVjdXJzZS5ncm91cCA9IGNzOworICAgICAgICAgIHByZXZfcmVjdXJzZV9kID0gZmluZF9taW5sZW5ndGgocmUsIGNzLCBzdGFydGNvZGUsIHV0ZiwgJnRoaXNfcmVjdXJzZSwKKyAgICAgICAgICAgIGNvdW50cHRyKTsKKyAgICAgICAgICBpZiAocHJldl9yZWN1cnNlX2QgPCAwKSByZXR1cm4gcHJldl9yZWN1cnNlX2Q7CisgICAgICAgICAgcHJldl9yZWN1cnNlX3JlY25vID0gcmVjbm87CisgICAgICAgICAgYnJhbmNobGVuZ3RoICs9IHByZXZfcmVjdXJzZV9kOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIGNjICs9IDEgKyBMSU5LX1NJWkUgKyBvbmNlX2Z1ZGdlOworICAgIG9uY2VfZnVkZ2UgPSAwOworICAgIGJyZWFrOworCisgICAgLyogQW55dGhpbmcgZWxzZSBkb2VzIG5vdCBvciBuZWVkIG5vdCBtYXRjaCBhIGNoYXJhY3Rlci4gV2UgY2FuIGdldCB0aGUKKyAgICBpdGVtJ3MgbGVuZ3RoIGZyb20gdGhlIHRhYmxlLCBidXQgZm9yIHRob3NlIHRoYXQgY2FuIG1hdGNoIHplcm8gb2NjdXJyZW5jZXMKKyAgICBvZiBhIGNoYXJhY3Rlciwgd2UgbXVzdCB0YWtlIHNwZWNpYWwgYWN0aW9uIGZvciBVVEYtOCBjaGFyYWN0ZXJzLiBBcyBpdAorICAgIGhhcHBlbnMsIHRoZSAiTk9UIiB2ZXJzaW9ucyBvZiB0aGVzZSBvcGNvZGVzIGFyZSB1c2VkIGF0IHByZXNlbnQgb25seSBmb3IKKyAgICBBU0NJSSBjaGFyYWN0ZXJzLCBzbyB0aGV5IGNvdWxkIGJlIG9taXR0ZWQgZnJvbSB0aGlzIGxpc3QuIEhvd2V2ZXIsIGluCisgICAgZnV0dXJlIHRoYXQgbWF5IGNoYW5nZSwgc28gd2UgaW5jbHVkZSB0aGVtIGhlcmUgc28gYXMgbm90IHRvIGxlYXZlIGEKKyAgICBnb3RjaGEgZm9yIGEgZnV0dXJlIG1haW50YWluZXIuICovCisKKyAgICBjYXNlIE9QX1VQVE86CisgICAgY2FzZSBPUF9VUFRPSToKKyAgICBjYXNlIE9QX05PVFVQVE86CisgICAgY2FzZSBPUF9OT1RVUFRPSToKKyAgICBjYXNlIE9QX01JTlVQVE86CisgICAgY2FzZSBPUF9NSU5VUFRPSToKKyAgICBjYXNlIE9QX05PVE1JTlVQVE86CisgICAgY2FzZSBPUF9OT1RNSU5VUFRPSToKKyAgICBjYXNlIE9QX1BPU1VQVE86CisgICAgY2FzZSBPUF9QT1NVUFRPSToKKyAgICBjYXNlIE9QX05PVFBPU1VQVE86CisgICAgY2FzZSBPUF9OT1RQT1NVUFRPSToKKworICAgIGNhc2UgT1BfU1RBUjoKKyAgICBjYXNlIE9QX1NUQVJJOgorICAgIGNhc2UgT1BfTk9UU1RBUjoKKyAgICBjYXNlIE9QX05PVFNUQVJJOgorICAgIGNhc2UgT1BfTUlOU1RBUjoKKyAgICBjYXNlIE9QX01JTlNUQVJJOgorICAgIGNhc2UgT1BfTk9UTUlOU1RBUjoKKyAgICBjYXNlIE9QX05PVE1JTlNUQVJJOgorICAgIGNhc2UgT1BfUE9TU1RBUjoKKyAgICBjYXNlIE9QX1BPU1NUQVJJOgorICAgIGNhc2UgT1BfTk9UUE9TU1RBUjoKKyAgICBjYXNlIE9QX05PVFBPU1NUQVJJOgorCisgICAgY2FzZSBPUF9RVUVSWToKKyAgICBjYXNlIE9QX1FVRVJZSToKKyAgICBjYXNlIE9QX05PVFFVRVJZOgorICAgIGNhc2UgT1BfTk9UUVVFUllJOgorICAgIGNhc2UgT1BfTUlOUVVFUlk6CisgICAgY2FzZSBPUF9NSU5RVUVSWUk6CisgICAgY2FzZSBPUF9OT1RNSU5RVUVSWToKKyAgICBjYXNlIE9QX05PVE1JTlFVRVJZSToKKyAgICBjYXNlIE9QX1BPU1FVRVJZOgorICAgIGNhc2UgT1BfUE9TUVVFUllJOgorICAgIGNhc2UgT1BfTk9UUE9TUVVFUlk6CisgICAgY2FzZSBPUF9OT1RQT1NRVUVSWUk6CisKKyAgICBjYyArPSBQUklWKE9QX2xlbmd0aHMpW29wXTsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICBpZiAodXRmICYmIEhBU19FWFRSQUxFTihjY1stMV0pKSBjYyArPSBHRVRfRVhUUkFMRU4oY2NbLTFdKTsKKyNlbmRpZgorICAgIGJyZWFrOworCisgICAgLyogU2tpcCB0aGVzZSwgYnV0IHdlIG5lZWQgdG8gYWRkIGluIHRoZSBuYW1lIGxlbmd0aC4gKi8KKworICAgIGNhc2UgT1BfTUFSSzoKKyAgICBjYXNlIE9QX1BSVU5FX0FSRzoKKyAgICBjYXNlIE9QX1NLSVBfQVJHOgorICAgIGNhc2UgT1BfVEhFTl9BUkc6CisgICAgY2MgKz0gUFJJVihPUF9sZW5ndGhzKVtvcF0gKyBjY1sxXTsKKyAgICBicmVhazsKKworICAgIC8qIFRoZSByZW1haW5pbmcgb3Bjb2RlcyBhcmUganVzdCBza2lwcGVkIG92ZXIuICovCisKKyAgICBjYXNlIE9QX0NMT1NFOgorICAgIGNhc2UgT1BfQ09NTUlUOgorICAgIGNhc2UgT1BfRkFJTDoKKyAgICBjYXNlIE9QX1BSVU5FOgorICAgIGNhc2UgT1BfU0VUX1NPTToKKyAgICBjYXNlIE9QX1NLSVA6CisgICAgY2FzZSBPUF9USEVOOgorICAgIGNjICs9IFBSSVYoT1BfbGVuZ3Rocylbb3BdOworICAgIGJyZWFrOworCisgICAgLyogVGhpcyBzaG91bGQgbm90IG9jY3VyOiB3ZSBsaXN0IGFsbCBvcGNvZGVzIGV4cGxpY2l0bHkgc28gdGhhdCB3aGVuCisgICAgbmV3IG9uZXMgZ2V0IGFkZGVkIHRoZXkgYXJlIHByb3Blcmx5IGNvbnNpZGVyZWQuICovCisKKyAgICBkZWZhdWx0OgorICAgIHJldHVybiAtMzsKKyAgICB9CisgIH0KKy8qIENvbnRyb2wgbmV2ZXIgZ2V0cyBoZXJlICovCit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFNldCBhIGJpdCBhbmQgbWF5YmUgaXRzIGFsdGVybmF0ZSBjYXNlICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEdpdmVuIGEgY2hhcmFjdGVyLCBzZXQgaXRzIGZpcnN0IGNvZGUgdW5pdCdzIGJpdCBpbiB0aGUgdGFibGUsIGFuZCBhbHNvIHRoZQorY29ycmVzcG9uZGluZyBiaXQgZm9yIHRoZSBvdGhlciB2ZXJzaW9uIG9mIGEgbGV0dGVyIGlmIHdlIGFyZSBjYXNlbGVzcy4KKworQXJndW1lbnRzOgorICByZSAgICAgICAgICAgIHBvaW50cyB0byB0aGUgcmVnZXggYmxvY2sKKyAgcCAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIGZpcnN0IGNvZGUgdW5pdCBvZiB0aGUgY2hhcmFjdGVyCisgIGNhc2VsZXNzICAgICAgVFJVRSBpZiBjYXNlbGVzcworICB1dGYgICAgICAgICAgIFRSVUUgZm9yIFVURiBtb2RlCisKK1JldHVybnM6ICAgICAgICBwb2ludGVyIGFmdGVyIHRoZSBjaGFyYWN0ZXIKKyovCisKK3N0YXRpYyBQQ1JFMl9TUFRSCitzZXRfdGFibGVfYml0KHBjcmUyX3JlYWxfY29kZSAqcmUsIFBDUkUyX1NQVFIgcCwgQk9PTCBjYXNlbGVzcywgQk9PTCB1dGYpCit7Cit1aW50MzJfdCBjID0gKnArKzsgICAvKiBGaXJzdCBjb2RlIHVuaXQgKi8KKyh2b2lkKXV0ZjsgICAgICAgICAgIC8qIFN0b3AgY29tcGlsZXIgd2FybmluZyB3aGVuIFVURiBub3Qgc3VwcG9ydGVkICovCisKKy8qIEluIDE2LWJpdCBhbmQgMzItYml0IG1vZGVzLCBjb2RlIHVuaXRzIGdyZWF0ZXIgdGhhbiAweGZmIHNldCB0aGUgYml0IGZvcgorMHhmZi4gKi8KKworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CitpZiAoYyA+IDB4ZmYpIFNFVF9CSVQoMHhmZik7IGVsc2UKKyNlbmRpZgorCitTRVRfQklUKGMpOworCisvKiBJbiBVVEYtOCBvciBVVEYtMTYgbW9kZSwgcGljayB1cCB0aGUgcmVtYWluaW5nIGNvZGUgdW5pdHMgaW4gb3JkZXIgdG8gZmluZAordGhlIGVuZCBvZiB0aGUgY2hhcmFjdGVyLCBldmVuIHdoZW4gY2FzZWxlc3MuICovCisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKK2lmICh1dGYpCisgIHsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICBpZiAoYyA+PSAweGMwKSBHRVRVVEY4SU5DKGMsIHApOworI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDE2CisgIGlmICgoYyAmIDB4ZmMwMCkgPT0gMHhkODAwKSBHRVRVVEYxNklOQyhjLCBwKTsKKyNlbmRpZgorICB9CisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCisvKiBJZiBjYXNlbGVzcywgaGFuZGxlIHRoZSBvdGhlciBjYXNlIG9mIHRoZSBjaGFyYWN0ZXIuICovCisKK2lmIChjYXNlbGVzcykKKyAgeworICBpZiAodXRmKQorICAgIHsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgIFBDUkUyX1VDSEFSIGJ1ZmZbNl07CisgICAgYyA9IFVDRF9PVEhFUkNBU0UoYyk7CisgICAgKHZvaWQpUFJJVihvcmQydXRmKShjLCBidWZmKTsKKyAgICBTRVRfQklUKGJ1ZmZbMF0pOworI2Vsc2UgIC8qIDE2LWJpdCBvciAzMi1iaXQgbW9kZSAqLworICAgIGMgPSBVQ0RfT1RIRVJDQVNFKGMpOworICAgIGlmIChjID4gMHhmZikgU0VUX0JJVCgweGZmKTsgZWxzZSBTRVRfQklUKGMpOworI2VuZGlmCisgICAgfQorCisgIC8qIE5vdCBVVEYgKi8KKworICBlbHNlIGlmIChNQVhfMjU1KGMpKSBTRVRfQklUKHJlLT50YWJsZXNbZmNjX29mZnNldCArIGNdKTsKKyAgfQorCityZXR1cm4gcDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICBTZXQgYml0cyBmb3IgYSBwb3NpdGl2ZSBjaGFyYWN0ZXIgdHlwZSAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiBzZXRzIHN0YXJ0aW5nIGJpdHMgZm9yIGEgY2hhcmFjdGVyIHR5cGUuIEluIFVURi04IG1vZGUsIHdlIGNhbgorb25seSBkbyBhIGRpcmVjdCBzZXR0aW5nIGZvciBieXRlcyBsZXNzIHRoYW4gMTI4LCBhcyBvdGhlcndpc2UgdGhlcmUgY2FuIGJlCitjb25mdXNpb24gd2l0aCBieXRlcyBpbiB0aGUgbWlkZGxlIG9mIFVURi04IGNoYXJhY3RlcnMuIEluIGEgInRyYWRpdGlvbmFsIgorZW52aXJvbm1lbnQsIHRoZSB0YWJsZXMgd2lsbCBvbmx5IHJlY29nbml6ZSBBU0NJSSBjaGFyYWN0ZXJzIGFueXdheSwgYnV0IGluIGF0CitsZWFzdCBvbmUgV2luZG93cyBlbnZpcm9ubWVudCwgc29tZSBoaWdoZXIgYnl0ZXMgYml0cyB3ZXJlIHNldCBpbiB0aGUgdGFibGVzLgorU28gd2UgZGVhbCB3aXRoIHRoYXQgY2FzZSBieSBjb25zaWRlcmluZyB0aGUgVVRGLTggZW5jb2RpbmcuCisKK0FyZ3VtZW50czoKKyAgcmUgICAgICAgICAgICAgdGhlIHJlZ2V4IGJsb2NrCisgIGNiaXQgdHlwZSAgICAgIHRoZSB0eXBlIG9mIGNoYXJhY3RlciB3YW50ZWQKKyAgdGFibGVfbGltaXQgICAgMzIgZm9yIG5vbi1VVEYtODsgMTYgZm9yIFVURi04CisKK1JldHVybnM6ICAgICAgICAgbm90aGluZworKi8KKworc3RhdGljIHZvaWQKK3NldF90eXBlX2JpdHMocGNyZTJfcmVhbF9jb2RlICpyZSwgaW50IGNiaXRfdHlwZSwgdW5zaWduZWQgaW50IHRhYmxlX2xpbWl0KQoreworcmVnaXN0ZXIgdWludDMyX3QgYzsKK2ZvciAoYyA9IDA7IGMgPCB0YWJsZV9saW1pdDsgYysrKQorICByZS0+c3RhcnRfYml0bWFwW2NdIHw9IHJlLT50YWJsZXNbYytjYml0c19vZmZzZXQrY2JpdF90eXBlXTsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAoraWYgKHRhYmxlX2xpbWl0ID09IDMyKSByZXR1cm47Citmb3IgKGMgPSAxMjg7IGMgPCAyNTY7IGMrKykKKyAgeworICBpZiAoKHJlLT50YWJsZXNbY2JpdHNfb2Zmc2V0ICsgYy84XSAmICgxIDw8IChjJjcpKSkgIT0gMCkKKyAgICB7CisgICAgUENSRTJfVUNIQVIgYnVmZls2XTsKKyAgICAodm9pZClQUklWKG9yZDJ1dGYpKGMsIGJ1ZmYpOworICAgIFNFVF9CSVQoYnVmZlswXSk7CisgICAgfQorICB9CisjZW5kaWYgIC8qIFVURi04ICovCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgIFNldCBiaXRzIGZvciBhIG5lZ2F0aXZlIGNoYXJhY3RlciB0eXBlICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIHNldHMgc3RhcnRpbmcgYml0cyBmb3IgYSBuZWdhdGl2ZSBjaGFyYWN0ZXIgdHlwZSBzdWNoIGFzIFxELgorSW4gVVRGLTggbW9kZSwgd2UgY2FuIG9ubHkgZG8gYSBkaXJlY3Qgc2V0dGluZyBmb3IgYnl0ZXMgbGVzcyB0aGFuIDEyOCwgYXMKK290aGVyd2lzZSB0aGVyZSBjYW4gYmUgY29uZnVzaW9uIHdpdGggYnl0ZXMgaW4gdGhlIG1pZGRsZSBvZiBVVEYtOCBjaGFyYWN0ZXJzLgorVW5saWtlIGluIHRoZSBwb3NpdGl2ZSBjYXNlLCB3aGVyZSB3ZSBjYW4gc2V0IGFwcHJvcHJpYXRlIHN0YXJ0aW5nIGJpdHMgZm9yCitzcGVjaWZpYyBoaWdoLXZhbHVlZCBVVEYtOCBjaGFyYWN0ZXJzLCBpbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBzZXQgdGhlIGJpdHMgZm9yCithbGwgaGlnaC12YWx1ZWQgY2hhcmFjdGVycy4gVGhlIGxvd2VzdCBpcyAweGMyLCBidXQgd2Ugb3ZlcmtpbGwgYnkgc3RhcnRpbmcgYXQKKzB4YzAgKDE5MikgZm9yIHNpbXBsaWNpdHkuCisKK0FyZ3VtZW50czoKKyAgcmUgICAgICAgICAgICAgdGhlIHJlZ2V4IGJsb2NrCisgIGNiaXQgdHlwZSAgICAgIHRoZSB0eXBlIG9mIGNoYXJhY3RlciB3YW50ZWQKKyAgdGFibGVfbGltaXQgICAgMzIgZm9yIG5vbi1VVEYtODsgMTYgZm9yIFVURi04CisKK1JldHVybnM6ICAgICAgICAgbm90aGluZworKi8KKworc3RhdGljIHZvaWQKK3NldF9ub3R0eXBlX2JpdHMocGNyZTJfcmVhbF9jb2RlICpyZSwgaW50IGNiaXRfdHlwZSwgdW5zaWduZWQgaW50IHRhYmxlX2xpbWl0KQoreworcmVnaXN0ZXIgdWludDMyX3QgYzsKK2ZvciAoYyA9IDA7IGMgPCB0YWJsZV9saW1pdDsgYysrKQorICByZS0+c3RhcnRfYml0bWFwW2NdIHw9IH4ocmUtPnRhYmxlc1tjK2NiaXRzX29mZnNldCtjYml0X3R5cGVdKTsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAoraWYgKHRhYmxlX2xpbWl0ICE9IDMyKSBmb3IgKGMgPSAyNDsgYyA8IDMyOyBjKyspIHJlLT5zdGFydF9iaXRtYXBbY10gPSAweGZmOworI2VuZGlmCit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICBDcmVhdGUgYml0bWFwIG9mIHN0YXJ0aW5nIGJ5dGVzICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gc2NhbnMgYSBjb21waWxlZCB1bmFuY2hvcmVkIGV4cHJlc3Npb24gcmVjdXJzaXZlbHkgYW5kCithdHRlbXB0cyB0byBidWlsZCBhIGJpdG1hcCBvZiB0aGUgc2V0IG9mIHBvc3NpYmxlIHN0YXJ0aW5nIGNvZGUgdW5pdHMgd2hvc2UKK3ZhbHVlcyBhcmUgbGVzcyB0aGFuIDI1Ni4gSW4gMTYtYml0IGFuZCAzMi1iaXQgbW9kZSwgdmFsdWVzIGFib3ZlIDI1NSBhbGwgY2F1c2UKK3RoZSAyNTUgYml0IHRvIGJlIHNldC4gV2hlbiBjYWxsaW5nIHNldFtfbm90XV90eXBlX2JpdHMoKSBpbiBVVEYtOCAoc2ljKSBtb2RlCit3ZSBwYXNzIGEgdmFsdWUgb2YgMTYgcmF0aGVyIHRoYW4gMzIgYXMgdGhlIGZpbmFsIGFyZ3VtZW50LiAoU2VlIGNvbW1lbnRzIGluCit0aG9zZSBmdW5jdGlvbnMgZm9yIHRoZSByZWFzb24uKQorCitUaGUgU1NCX0NPTlRJTlVFIHJldHVybiBpcyB1c2VmdWwgZm9yIHBhcmVudGhlc2l6ZWQgZ3JvdXBzIGluIHBhdHRlcm5zIHN1Y2ggYXMKKyhhKiliIHdoZXJlIHRoZSBncm91cCBwcm92aWRlcyBzb21lIG9wdGlvbmFsIHN0YXJ0aW5nIGNvZGUgdW5pdHMgYnV0IHNjYW5uaW5nCittdXN0IGNvbnRpbnVlIGF0IHRoZSBvdXRlciBsZXZlbCB0byBmaW5kIGF0IGxlYXN0IG9uZSBtYW5kYXRvcnkgY29kZSB1bml0LiBBdAordGhlIG91dGVybW9zdCBsZXZlbCwgdGhpcyBmdW5jdGlvbiBmYWlscyB1bmxlc3MgdGhlIHJlc3VsdCBpcyBTU0JfRE9ORS4KKworQXJndW1lbnRzOgorICByZSAgICAgICAgICAgcG9pbnRzIHRvIHRoZSBjb21waWxlZCByZWdleCBibG9jaworICBjb2RlICAgICAgICAgcG9pbnRzIHRvIGFuIGV4cHJlc3Npb24KKyAgdXRmICAgICAgICAgIFRSVUUgaWYgaW4gVVRGIG1vZGUKKworUmV0dXJuczogICAgICAgU1NCX0ZBSUwgICAgID0+IEZhaWxlZCB0byBmaW5kIGFueSBzdGFydGluZyBjb2RlIHVuaXRzCisgICAgICAgICAgICAgICBTU0JfRE9ORSAgICAgPT4gRm91bmQgbWFuZGF0b3J5IHN0YXJ0aW5nIGNvZGUgdW5pdHMKKyAgICAgICAgICAgICAgIFNTQl9DT05USU5VRSA9PiBGb3VuZCBvcHRpb25hbCBzdGFydGluZyBjb2RlIHVuaXRzCisgICAgICAgICAgICAgICBTU0JfVU5LTk9XTiAgPT4gSGl0IGFuIHVucmVjb2duaXplZCBvcGNvZGUKKyovCisKK3N0YXRpYyBpbnQKK3NldF9zdGFydF9iaXRzKHBjcmUyX3JlYWxfY29kZSAqcmUsIFBDUkUyX1NQVFIgY29kZSwgQk9PTCB1dGYpCit7CityZWdpc3RlciB1aW50MzJfdCBjOworaW50IHlpZWxkID0gU1NCX0RPTkU7CisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAoraW50IHRhYmxlX2xpbWl0ID0gdXRmPyAxNjozMjsKKyNlbHNlCitpbnQgdGFibGVfbGltaXQgPSAzMjsKKyNlbmRpZgorCitkbworICB7CisgIEJPT0wgdHJ5X25leHQgPSBUUlVFOworICBQQ1JFMl9TUFRSIHRjb2RlID0gY29kZSArIDEgKyBMSU5LX1NJWkU7CisKKyAgaWYgKCpjb2RlID09IE9QX0NCUkEgfHwgKmNvZGUgPT0gT1BfU0NCUkEgfHwKKyAgICAgICpjb2RlID09IE9QX0NCUkFQT1MgfHwgKmNvZGUgPT0gT1BfU0NCUkFQT1MpIHRjb2RlICs9IElNTTJfU0laRTsKKworICB3aGlsZSAodHJ5X25leHQpICAgIC8qIExvb3AgZm9yIGl0ZW1zIGluIHRoaXMgYnJhbmNoICovCisgICAgeworICAgIGludCByYzsKKyAgICB1aW50OF90ICpjbGFzc21hcCA9IE5VTEw7CisKKyAgICBzd2l0Y2goKnRjb2RlKQorICAgICAgeworICAgICAgLyogSWYgd2UgcmVhY2ggc29tZXRoaW5nIHdlIGRvbid0IHVuZGVyc3RhbmQsIGl0IG1lYW5zIGEgbmV3IG9wY29kZSBoYXMKKyAgICAgIGJlZW4gY3JlYXRlZCB0aGF0IGhhc24ndCBiZWVuIGFkZGVkIHRvIHRoaXMgZnVuY3Rpb24uIEhvcGVmdWxseSB0aGlzCisgICAgICBwcm9ibGVtIHdpbGwgYmUgZGlzY292ZXJlZCBkdXJpbmcgdGVzdGluZy4gKi8KKworICAgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBTU0JfVU5LTk9XTjsKKworICAgICAgLyogRmFpbCBmb3IgYSB2YWxpZCBvcGNvZGUgdGhhdCBpbXBsaWVzIG5vIHN0YXJ0aW5nIGJpdHMuICovCisKKyAgICAgIGNhc2UgT1BfQUNDRVBUOgorICAgICAgY2FzZSBPUF9BU1NFUlRfQUNDRVBUOgorICAgICAgY2FzZSBPUF9BTExBTlk6CisgICAgICBjYXNlIE9QX0FOWToKKyAgICAgIGNhc2UgT1BfQU5ZQllURToKKyAgICAgIGNhc2UgT1BfQ0lSQzoKKyAgICAgIGNhc2UgT1BfQ0lSQ006CisgICAgICBjYXNlIE9QX0NMT1NFOgorICAgICAgY2FzZSBPUF9DT01NSVQ6CisgICAgICBjYXNlIE9QX0NPTkQ6CisgICAgICBjYXNlIE9QX0NSRUY6CisgICAgICBjYXNlIE9QX0ZBTFNFOgorICAgICAgY2FzZSBPUF9UUlVFOgorICAgICAgY2FzZSBPUF9ETkNSRUY6CisgICAgICBjYXNlIE9QX0ROUkVGOgorICAgICAgY2FzZSBPUF9ETlJFRkk6CisgICAgICBjYXNlIE9QX0ROUlJFRjoKKyAgICAgIGNhc2UgT1BfRE9MTDoKKyAgICAgIGNhc2UgT1BfRE9MTE06CisgICAgICBjYXNlIE9QX0VORDoKKyAgICAgIGNhc2UgT1BfRU9EOgorICAgICAgY2FzZSBPUF9FT0ROOgorICAgICAgY2FzZSBPUF9FWFRVTkk6CisgICAgICBjYXNlIE9QX0ZBSUw6CisgICAgICBjYXNlIE9QX01BUks6CisgICAgICBjYXNlIE9QX05PVDoKKyAgICAgIGNhc2UgT1BfTk9URVhBQ1Q6CisgICAgICBjYXNlIE9QX05PVEVYQUNUSToKKyAgICAgIGNhc2UgT1BfTk9USToKKyAgICAgIGNhc2UgT1BfTk9UTUlOUExVUzoKKyAgICAgIGNhc2UgT1BfTk9UTUlOUExVU0k6CisgICAgICBjYXNlIE9QX05PVE1JTlFVRVJZOgorICAgICAgY2FzZSBPUF9OT1RNSU5RVUVSWUk6CisgICAgICBjYXNlIE9QX05PVE1JTlNUQVI6CisgICAgICBjYXNlIE9QX05PVE1JTlNUQVJJOgorICAgICAgY2FzZSBPUF9OT1RNSU5VUFRPOgorICAgICAgY2FzZSBPUF9OT1RNSU5VUFRPSToKKyAgICAgIGNhc2UgT1BfTk9UUExVUzoKKyAgICAgIGNhc2UgT1BfTk9UUExVU0k6CisgICAgICBjYXNlIE9QX05PVFBPU1BMVVM6CisgICAgICBjYXNlIE9QX05PVFBPU1BMVVNJOgorICAgICAgY2FzZSBPUF9OT1RQT1NRVUVSWToKKyAgICAgIGNhc2UgT1BfTk9UUE9TUVVFUllJOgorICAgICAgY2FzZSBPUF9OT1RQT1NTVEFSOgorICAgICAgY2FzZSBPUF9OT1RQT1NTVEFSSToKKyAgICAgIGNhc2UgT1BfTk9UUE9TVVBUTzoKKyAgICAgIGNhc2UgT1BfTk9UUE9TVVBUT0k6CisgICAgICBjYXNlIE9QX05PVFBST1A6CisgICAgICBjYXNlIE9QX05PVFFVRVJZOgorICAgICAgY2FzZSBPUF9OT1RRVUVSWUk6CisgICAgICBjYXNlIE9QX05PVFNUQVI6CisgICAgICBjYXNlIE9QX05PVFNUQVJJOgorICAgICAgY2FzZSBPUF9OT1RVUFRPOgorICAgICAgY2FzZSBPUF9OT1RVUFRPSToKKyAgICAgIGNhc2UgT1BfTk9UX0hTUEFDRToKKyAgICAgIGNhc2UgT1BfTk9UX1ZTUEFDRToKKyAgICAgIGNhc2UgT1BfUFJVTkU6CisgICAgICBjYXNlIE9QX1BSVU5FX0FSRzoKKyAgICAgIGNhc2UgT1BfUkVDVVJTRToKKyAgICAgIGNhc2UgT1BfUkVGOgorICAgICAgY2FzZSBPUF9SRUZJOgorICAgICAgY2FzZSBPUF9SRVZFUlNFOgorICAgICAgY2FzZSBPUF9SUkVGOgorICAgICAgY2FzZSBPUF9TQ09ORDoKKyAgICAgIGNhc2UgT1BfU0VUX1NPTToKKyAgICAgIGNhc2UgT1BfU0tJUDoKKyAgICAgIGNhc2UgT1BfU0tJUF9BUkc6CisgICAgICBjYXNlIE9QX1NPRDoKKyAgICAgIGNhc2UgT1BfU09NOgorICAgICAgY2FzZSBPUF9USEVOOgorICAgICAgY2FzZSBPUF9USEVOX0FSRzoKKyAgICAgIHJldHVybiBTU0JfRkFJTDsKKworICAgICAgLyogQSAicmVhbCIgcHJvcGVydHkgdGVzdCBpbXBsaWVzIG5vIHN0YXJ0aW5nIGJpdHMsIGJ1dCB0aGUgZmFrZSBwcm9wZXJ0eQorICAgICAgUFRfQ0xJU1QgaWRlbnRpZmllcyBhIGxpc3Qgb2YgY2hhcmFjdGVycy4gVGhlc2UgbGlzdHMgYXJlIHNob3J0LCBhcyB0aGV5CisgICAgICBhcmUgdXNlZCBmb3IgY2hhcmFjdGVycyB3aXRoIG1vcmUgdGhhbiBvbmUgIm90aGVyIGNhc2UiLCBzbyB0aGVyZSBpcyBubworICAgICAgcG9pbnQgaW4gcmVjb2duaXppbmcgdGhlbSBmb3IgT1BfTk9UUFJPUC4gKi8KKworICAgICAgY2FzZSBPUF9QUk9QOgorICAgICAgaWYgKHRjb2RlWzFdICE9IFBUX0NMSVNUKSByZXR1cm4gU1NCX0ZBSUw7CisgICAgICAgIHsKKyAgICAgICAgY29uc3QgdWludDMyX3QgKnAgPSBQUklWKHVjZF9jYXNlbGVzc19zZXRzKSArIHRjb2RlWzJdOworICAgICAgICB3aGlsZSAoKGMgPSAqcCsrKSA8IE5PVEFDSEFSKQorICAgICAgICAgIHsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBQQ1JFMl9VQ0hBUiBidWZmWzZdOworICAgICAgICAgICAgKHZvaWQpUFJJVihvcmQydXRmKShjLCBidWZmKTsKKyAgICAgICAgICAgIGMgPSBidWZmWzBdOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgaWYgKGMgPiAweGZmKSBTRVRfQklUKDB4ZmYpOyBlbHNlIFNFVF9CSVQoYyk7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB0cnlfbmV4dCA9IEZBTFNFOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qIFdlIGNhbiBpZ25vcmUgd29yZCBib3VuZGFyeSB0ZXN0cy4gKi8KKworICAgICAgY2FzZSBPUF9XT1JEX0JPVU5EQVJZOgorICAgICAgY2FzZSBPUF9OT1RfV09SRF9CT1VOREFSWToKKyAgICAgIHRjb2RlKys7CisgICAgICBicmVhazsKKworICAgICAgLyogSWYgd2UgaGl0IGEgYnJhY2tldCBvciBhIHBvc2l0aXZlIGxvb2thaGVhZCBhc3NlcnRpb24sIHJlY3Vyc2UgdG8gc2V0CisgICAgICBiaXRzIGZyb20gd2l0aGluIHRoZSBzdWJwYXR0ZXJuLiBJZiBpdCBjYW4ndCBmaW5kIGFueXRoaW5nLCB3ZSBoYXZlIHRvCisgICAgICBnaXZlIHVwLiBJZiBpdCBmaW5kcyBzb21lIG1hbmRhdG9yeSBjaGFyYWN0ZXIocyksIHdlIGFyZSBkb25lIGZvciB0aGlzCisgICAgICBicmFuY2guIE90aGVyd2lzZSwgY2Fycnkgb24gc2Nhbm5pbmcgYWZ0ZXIgdGhlIHN1YnBhdHRlcm4uICovCisKKyAgICAgIGNhc2UgT1BfQlJBOgorICAgICAgY2FzZSBPUF9TQlJBOgorICAgICAgY2FzZSBPUF9DQlJBOgorICAgICAgY2FzZSBPUF9TQ0JSQToKKyAgICAgIGNhc2UgT1BfQlJBUE9TOgorICAgICAgY2FzZSBPUF9TQlJBUE9TOgorICAgICAgY2FzZSBPUF9DQlJBUE9TOgorICAgICAgY2FzZSBPUF9TQ0JSQVBPUzoKKyAgICAgIGNhc2UgT1BfT05DRToKKyAgICAgIGNhc2UgT1BfT05DRV9OQzoKKyAgICAgIGNhc2UgT1BfQVNTRVJUOgorICAgICAgcmMgPSBzZXRfc3RhcnRfYml0cyhyZSwgdGNvZGUsIHV0Zik7CisgICAgICBpZiAocmMgPT0gU1NCX0ZBSUwgfHwgcmMgPT0gU1NCX1VOS05PV04pIHJldHVybiByYzsKKyAgICAgIGlmIChyYyA9PSBTU0JfRE9ORSkgdHJ5X25leHQgPSBGQUxTRTsgZWxzZQorICAgICAgICB7CisgICAgICAgIGRvIHRjb2RlICs9IEdFVCh0Y29kZSwgMSk7IHdoaWxlICgqdGNvZGUgPT0gT1BfQUxUKTsKKyAgICAgICAgdGNvZGUgKz0gMSArIExJTktfU0laRTsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIElmIHdlIGhpdCBBTFQgb3IgS0VULCBpdCBtZWFucyB3ZSBoYXZlbid0IGZvdW5kIGFueXRoaW5nIG1hbmRhdG9yeSBpbgorICAgICAgdGhpcyBicmFuY2gsIHRob3VnaCB3ZSBtaWdodCBoYXZlIGZvdW5kIHNvbWV0aGluZyBvcHRpb25hbC4gRm9yIEFMVCwgd2UKKyAgICAgIGNvbnRpbnVlIHdpdGggdGhlIG5leHQgYWx0ZXJuYXRpdmUsIGJ1dCB3ZSBoYXZlIHRvIGFycmFuZ2UgdGhhdCB0aGUgZmluYWwKKyAgICAgIHJlc3VsdCBmcm9tIHN1YnBhdHRlcm4gaXMgU1NCX0NPTlRJTlVFIHJhdGhlciB0aGFuIFNTQl9ET05FLiBGb3IgS0VULAorICAgICAgcmV0dXJuIFNTQl9DT05USU5VRTogaWYgdGhpcyBpcyB0aGUgdG9wIGxldmVsLCB0aGF0IGluZGljYXRlcyBmYWlsdXJlLAorICAgICAgYnV0IGFmdGVyIGEgbmVzdGVkIHN1YnBhdHRlcm4sIGl0IGNhdXNlcyBzY2FubmluZyB0byBjb250aW51ZS4gKi8KKworICAgICAgY2FzZSBPUF9BTFQ6CisgICAgICB5aWVsZCA9IFNTQl9DT05USU5VRTsKKyAgICAgIHRyeV9uZXh0ID0gRkFMU0U7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9LRVQ6CisgICAgICBjYXNlIE9QX0tFVFJNQVg6CisgICAgICBjYXNlIE9QX0tFVFJNSU46CisgICAgICBjYXNlIE9QX0tFVFJQT1M6CisgICAgICByZXR1cm4gU1NCX0NPTlRJTlVFOworCisgICAgICAvKiBTa2lwIG92ZXIgY2FsbG91dCAqLworCisgICAgICBjYXNlIE9QX0NBTExPVVQ6CisgICAgICB0Y29kZSArPSBQUklWKE9QX2xlbmd0aHMpW09QX0NBTExPVVRdOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfQ0FMTE9VVF9TVFI6CisgICAgICB0Y29kZSArPSBHRVQodGNvZGUsIDEgKyAyKkxJTktfU0laRSk7CisgICAgICBicmVhazsKKworICAgICAgLyogU2tpcCBvdmVyIGxvb2tiZWhpbmQgYW5kIG5lZ2F0aXZlIGxvb2thaGVhZCBhc3NlcnRpb25zICovCisKKyAgICAgIGNhc2UgT1BfQVNTRVJUX05PVDoKKyAgICAgIGNhc2UgT1BfQVNTRVJUQkFDSzoKKyAgICAgIGNhc2UgT1BfQVNTRVJUQkFDS19OT1Q6CisgICAgICBkbyB0Y29kZSArPSBHRVQodGNvZGUsIDEpOyB3aGlsZSAoKnRjb2RlID09IE9QX0FMVCk7CisgICAgICB0Y29kZSArPSAxICsgTElOS19TSVpFOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qIEJSQVpFUk8gZG9lcyB0aGUgYnJhY2tldCwgYnV0IGNhcnJpZXMgb24uICovCisKKyAgICAgIGNhc2UgT1BfQlJBWkVSTzoKKyAgICAgIGNhc2UgT1BfQlJBTUlOWkVSTzoKKyAgICAgIGNhc2UgT1BfQlJBUE9TWkVSTzoKKyAgICAgIHJjID0gc2V0X3N0YXJ0X2JpdHMocmUsICsrdGNvZGUsIHV0Zik7CisgICAgICBpZiAocmMgPT0gU1NCX0ZBSUwgfHwgcmMgPT0gU1NCX1VOS05PV04pIHJldHVybiByYzsKKyAgICAgIGRvIHRjb2RlICs9IEdFVCh0Y29kZSwxKTsgd2hpbGUgKCp0Y29kZSA9PSBPUF9BTFQpOworICAgICAgdGNvZGUgKz0gMSArIExJTktfU0laRTsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBTS0lQWkVSTyBza2lwcyB0aGUgYnJhY2tldC4gKi8KKworICAgICAgY2FzZSBPUF9TS0lQWkVSTzoKKyAgICAgIHRjb2RlKys7CisgICAgICBkbyB0Y29kZSArPSBHRVQodGNvZGUsMSk7IHdoaWxlICgqdGNvZGUgPT0gT1BfQUxUKTsKKyAgICAgIHRjb2RlICs9IDEgKyBMSU5LX1NJWkU7CisgICAgICBicmVhazsKKworICAgICAgLyogU2luZ2xlLWNoYXIgKiBvciA/IHNldHMgdGhlIGJpdCBhbmQgdHJpZXMgdGhlIG5leHQgaXRlbSAqLworCisgICAgICBjYXNlIE9QX1NUQVI6CisgICAgICBjYXNlIE9QX01JTlNUQVI6CisgICAgICBjYXNlIE9QX1BPU1NUQVI6CisgICAgICBjYXNlIE9QX1FVRVJZOgorICAgICAgY2FzZSBPUF9NSU5RVUVSWToKKyAgICAgIGNhc2UgT1BfUE9TUVVFUlk6CisgICAgICB0Y29kZSA9IHNldF90YWJsZV9iaXQocmUsIHRjb2RlICsgMSwgRkFMU0UsIHV0Zik7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9TVEFSSToKKyAgICAgIGNhc2UgT1BfTUlOU1RBUkk6CisgICAgICBjYXNlIE9QX1BPU1NUQVJJOgorICAgICAgY2FzZSBPUF9RVUVSWUk6CisgICAgICBjYXNlIE9QX01JTlFVRVJZSToKKyAgICAgIGNhc2UgT1BfUE9TUVVFUllJOgorICAgICAgdGNvZGUgPSBzZXRfdGFibGVfYml0KHJlLCB0Y29kZSArIDEsIFRSVUUsIHV0Zik7CisgICAgICBicmVhazsKKworICAgICAgLyogU2luZ2xlLWNoYXIgdXB0byBzZXRzIHRoZSBiaXQgYW5kIHRyaWVzIHRoZSBuZXh0ICovCisKKyAgICAgIGNhc2UgT1BfVVBUTzoKKyAgICAgIGNhc2UgT1BfTUlOVVBUTzoKKyAgICAgIGNhc2UgT1BfUE9TVVBUTzoKKyAgICAgIHRjb2RlID0gc2V0X3RhYmxlX2JpdChyZSwgdGNvZGUgKyAxICsgSU1NMl9TSVpFLCBGQUxTRSwgdXRmKTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX1VQVE9JOgorICAgICAgY2FzZSBPUF9NSU5VUFRPSToKKyAgICAgIGNhc2UgT1BfUE9TVVBUT0k6CisgICAgICB0Y29kZSA9IHNldF90YWJsZV9iaXQocmUsIHRjb2RlICsgMSArIElNTTJfU0laRSwgVFJVRSwgdXRmKTsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBBdCBsZWFzdCBvbmUgc2luZ2xlIGNoYXIgc2V0cyB0aGUgYml0IGFuZCBzdG9wcyAqLworCisgICAgICBjYXNlIE9QX0VYQUNUOgorICAgICAgdGNvZGUgKz0gSU1NMl9TSVpFOworICAgICAgLyogRmFsbCB0aHJvdWdoICovCisgICAgICBjYXNlIE9QX0NIQVI6CisgICAgICBjYXNlIE9QX1BMVVM6CisgICAgICBjYXNlIE9QX01JTlBMVVM6CisgICAgICBjYXNlIE9QX1BPU1BMVVM6CisgICAgICAodm9pZClzZXRfdGFibGVfYml0KHJlLCB0Y29kZSArIDEsIEZBTFNFLCB1dGYpOworICAgICAgdHJ5X25leHQgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX0VYQUNUSToKKyAgICAgIHRjb2RlICs9IElNTTJfU0laRTsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLworICAgICAgY2FzZSBPUF9DSEFSSToKKyAgICAgIGNhc2UgT1BfUExVU0k6CisgICAgICBjYXNlIE9QX01JTlBMVVNJOgorICAgICAgY2FzZSBPUF9QT1NQTFVTSToKKyAgICAgICh2b2lkKXNldF90YWJsZV9iaXQocmUsIHRjb2RlICsgMSwgVFJVRSwgdXRmKTsKKyAgICAgIHRyeV9uZXh0ID0gRkFMU0U7CisgICAgICBicmVhazsKKworICAgICAgLyogU3BlY2lhbCBzcGFjaW5nIGFuZCBsaW5lLXRlcm1pbmF0aW5nIGl0ZW1zLiBUaGVzZSByZWNvZ25pemUgc3BlY2lmaWMKKyAgICAgIGxpc3RzIG9mIGNoYXJhY3RlcnMuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gVlNQQUNFIGFuZCBBTllOTCBpcyB0aGF0IHRoZQorICAgICAgbGF0dGVyIGNhbiBtYXRjaCB0aGUgdHdvLWNoYXJhY3RlciBDUkxGIHNlcXVlbmNlLCBidXQgdGhhdCBpcyBub3QKKyAgICAgIHJlbGV2YW50IGZvciBmaW5kaW5nIHRoZSBmaXJzdCBjaGFyYWN0ZXIsIHNvIHRoZWlyIGNvZGUgaGVyZSBpcworICAgICAgaWRlbnRpY2FsLiAqLworCisgICAgICBjYXNlIE9QX0hTUEFDRToKKyAgICAgIFNFVF9CSVQoQ0hBUl9IVCk7CisgICAgICBTRVRfQklUKENIQVJfU1BBQ0UpOworCisgICAgICAvKiBGb3IgdGhlIDE2LWJpdCBhbmQgMzItYml0IGxpYnJhcmllcyAod2hpY2ggY2FuIG5ldmVyIGJlIEVCQ0RJQyksIHNldAorICAgICAgdGhlIGJpdHMgZm9yIDB4QTAgYW5kIGZvciBjb2RlIHVuaXRzID49IDI1NSwgaW5kZXBlbmRlbnRseSBvZiBVVEYuICovCisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgICAgU0VUX0JJVCgweEEwKTsKKyAgICAgIFNFVF9CSVQoMHhGRik7CisjZWxzZQorICAgICAgLyogRm9yIHRoZSA4LWJpdCBsaWJyYXJ5IGluIFVURi04IG1vZGUsIHNldCB0aGUgYml0cyBmb3IgdGhlIGZpcnN0IGNvZGUKKyAgICAgIHVuaXRzIG9mIGhvcml6b250YWwgc3BhY2UgY2hhcmFjdGVycy4gKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgaWYgKHV0ZikKKyAgICAgICAgeworICAgICAgICBTRVRfQklUKDB4QzIpOyAgLyogRm9yIFUrMDBBMCAqLworICAgICAgICBTRVRfQklUKDB4RTEpOyAgLyogRm9yIFUrMTY4MCwgVSsxODBFICovCisgICAgICAgIFNFVF9CSVQoMHhFMik7ICAvKiBGb3IgVSsyMDAwIC0gVSsyMDBBLCBVKzIwMkYsIFUrMjA1RiAqLworICAgICAgICBTRVRfQklUKDB4RTMpOyAgLyogRm9yIFUrMzAwMCAqLworICAgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYKKyAgICAgIC8qIEZvciB0aGUgOC1iaXQgbGlicmFyeSBub3QgaW4gVVRGLTggbW9kZSwgc2V0IHRoZSBiaXQgZm9yIDB4QTAsIHVubGVzcworICAgICAgdGhlIGNvZGUgaXMgRUJDRElDLiAqLworICAgICAgICB7CisjaWZuZGVmIEVCQ0RJQworICAgICAgICBTRVRfQklUKDB4QTApOworI2VuZGlmICAvKiBOb3QgRUJDRElDICovCisgICAgICAgIH0KKyNlbmRpZiAgLyogOC1iaXQgc3VwcG9ydCAqLworCisgICAgICB0cnlfbmV4dCA9IEZBTFNFOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfQU5ZTkw6CisgICAgICBjYXNlIE9QX1ZTUEFDRToKKyAgICAgIFNFVF9CSVQoQ0hBUl9MRik7CisgICAgICBTRVRfQklUKENIQVJfVlQpOworICAgICAgU0VUX0JJVChDSEFSX0ZGKTsKKyAgICAgIFNFVF9CSVQoQ0hBUl9DUik7CisKKyAgICAgIC8qIEZvciB0aGUgMTYtYml0IGFuZCAzMi1iaXQgbGlicmFyaWVzICh3aGljaCBjYW4gbmV2ZXIgYmUgRUJDRElDKSwgc2V0CisgICAgICB0aGUgYml0cyBmb3IgTkVMIGFuZCBmb3IgY29kZSB1bml0cyA+PSAyNTUsIGluZGVwZW5kZW50bHkgb2YgVVRGLiAqLworCisjaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICAgIFNFVF9CSVQoQ0hBUl9ORUwpOworICAgICAgU0VUX0JJVCgweEZGKTsKKyNlbHNlCisgICAgICAvKiBGb3IgdGhlIDgtYml0IGxpYnJhcnkgaW4gVVRGLTggbW9kZSwgc2V0IHRoZSBiaXRzIGZvciB0aGUgZmlyc3QgY29kZQorICAgICAgdW5pdHMgb2YgdmVydGljYWwgc3BhY2UgY2hhcmFjdGVycy4gKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgaWYgKHV0ZikKKyAgICAgICAgeworICAgICAgICBTRVRfQklUKDB4QzIpOyAgLyogRm9yIFUrMDA4NSAoTkVMKSAqLworICAgICAgICBTRVRfQklUKDB4RTIpOyAgLyogRm9yIFUrMjAyOCwgVSsyMDI5ICovCisgICAgICAgIH0KKyAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgLyogRm9yIHRoZSA4LWJpdCBsaWJyYXJ5IG5vdCBpbiBVVEYtOCBtb2RlLCBzZXQgdGhlIGJpdCBmb3IgTkVMLiAqLworICAgICAgICB7CisgICAgICAgIFNFVF9CSVQoQ0hBUl9ORUwpOworICAgICAgICB9CisjZW5kaWYgIC8qIDgtYml0IHN1cHBvcnQgKi8KKworICAgICAgdHJ5X25leHQgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBTaW5nbGUgY2hhcmFjdGVyIHR5cGVzIHNldCB0aGUgYml0cyBhbmQgc3RvcC4gTm90ZSB0aGF0IGlmIFBDUkUyX1VDUAorICAgICAgaXMgc2V0LCB3ZSBkbyBub3Qgc2VlIHRoZXNlIG9wIGNvZGVzIGJlY2F1c2UgXGQgZXRjIGFyZSBjb252ZXJ0ZWQgdG8KKyAgICAgIHByb3BlcnRpZXMuIFRoZXJlZm9yZSwgdGhlc2UgYXBwbHkgaW4gdGhlIGNhc2Ugd2hlbiBvbmx5IGNoYXJhY3RlcnMgbGVzcworICAgICAgdGhhbiAyNTYgYXJlIHJlY29nbml6ZWQgdG8gbWF0Y2ggdGhlIHR5cGVzLiAqLworCisgICAgICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgICAgIHNldF9ub3R0eXBlX2JpdHMocmUsIGNiaXRfZGlnaXQsIHRhYmxlX2xpbWl0KTsKKyAgICAgIHRyeV9uZXh0ID0gRkFMU0U7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9ESUdJVDoKKyAgICAgIHNldF90eXBlX2JpdHMocmUsIGNiaXRfZGlnaXQsIHRhYmxlX2xpbWl0KTsKKyAgICAgIHRyeV9uZXh0ID0gRkFMU0U7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9OT1RfV0hJVEVTUEFDRToKKyAgICAgIHNldF9ub3R0eXBlX2JpdHMocmUsIGNiaXRfc3BhY2UsIHRhYmxlX2xpbWl0KTsKKyAgICAgIHRyeV9uZXh0ID0gRkFMU0U7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBPUF9XSElURVNQQUNFOgorICAgICAgc2V0X3R5cGVfYml0cyhyZSwgY2JpdF9zcGFjZSwgdGFibGVfbGltaXQpOworICAgICAgdHJ5X25leHQgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX05PVF9XT1JEQ0hBUjoKKyAgICAgIHNldF9ub3R0eXBlX2JpdHMocmUsIGNiaXRfd29yZCwgdGFibGVfbGltaXQpOworICAgICAgdHJ5X25leHQgPSBGQUxTRTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIE9QX1dPUkRDSEFSOgorICAgICAgc2V0X3R5cGVfYml0cyhyZSwgY2JpdF93b3JkLCB0YWJsZV9saW1pdCk7CisgICAgICB0cnlfbmV4dCA9IEZBTFNFOworICAgICAgYnJlYWs7CisKKyAgICAgIC8qIE9uZSBvciBtb3JlIGNoYXJhY3RlciB0eXBlIGZ1ZGdlcyB0aGUgcG9pbnRlciBhbmQgcmVzdGFydHMsIGtub3dpbmcKKyAgICAgIGl0IHdpbGwgaGl0IGEgc2luZ2xlIGNoYXJhY3RlciB0eXBlIGFuZCBzdG9wIHRoZXJlLiAqLworCisgICAgICBjYXNlIE9QX1RZUEVQTFVTOgorICAgICAgY2FzZSBPUF9UWVBFTUlOUExVUzoKKyAgICAgIGNhc2UgT1BfVFlQRVBPU1BMVVM6CisgICAgICB0Y29kZSsrOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgT1BfVFlQRUVYQUNUOgorICAgICAgdGNvZGUgKz0gMSArIElNTTJfU0laRTsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBaZXJvIG9yIG1vcmUgcmVwZWF0cyBvZiBjaGFyYWN0ZXIgdHlwZXMgc2V0IHRoZSBiaXRzIGFuZCB0aGVuCisgICAgICB0cnkgYWdhaW4uICovCisKKyAgICAgIGNhc2UgT1BfVFlQRVVQVE86CisgICAgICBjYXNlIE9QX1RZUEVNSU5VUFRPOgorICAgICAgY2FzZSBPUF9UWVBFUE9TVVBUTzoKKyAgICAgIHRjb2RlICs9IElNTTJfU0laRTsgIC8qIEZhbGwgdGhyb3VnaCAqLworCisgICAgICBjYXNlIE9QX1RZUEVTVEFSOgorICAgICAgY2FzZSBPUF9UWVBFTUlOU1RBUjoKKyAgICAgIGNhc2UgT1BfVFlQRVBPU1NUQVI6CisgICAgICBjYXNlIE9QX1RZUEVRVUVSWToKKyAgICAgIGNhc2UgT1BfVFlQRU1JTlFVRVJZOgorICAgICAgY2FzZSBPUF9UWVBFUE9TUVVFUlk6CisgICAgICBzd2l0Y2godGNvZGVbMV0pCisgICAgICAgIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgY2FzZSBPUF9BTlk6CisgICAgICAgIGNhc2UgT1BfQUxMQU5ZOgorICAgICAgICByZXR1cm4gU1NCX0ZBSUw7CisKKyAgICAgICAgY2FzZSBPUF9IU1BBQ0U6CisgICAgICAgIFNFVF9CSVQoQ0hBUl9IVCk7CisgICAgICAgIFNFVF9CSVQoQ0hBUl9TUEFDRSk7CisKKyAgICAgICAgLyogRm9yIHRoZSAxNi1iaXQgYW5kIDMyLWJpdCBsaWJyYXJpZXMgKHdoaWNoIGNhbiBuZXZlciBiZSBFQkNESUMpLCBzZXQKKyAgICAgICAgdGhlIGJpdHMgZm9yIDB4QTAgYW5kIGZvciBjb2RlIHVuaXRzID49IDI1NSwgaW5kZXBlbmRlbnRseSBvZiBVVEYuICovCisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggIT0gOAorICAgICAgICBTRVRfQklUKDB4QTApOworICAgICAgICBTRVRfQklUKDB4RkYpOworI2Vsc2UKKyAgICAgICAgLyogRm9yIHRoZSA4LWJpdCBsaWJyYXJ5IGluIFVURi04IG1vZGUsIHNldCB0aGUgYml0cyBmb3IgdGhlIGZpcnN0IGNvZGUKKyAgICAgICAgdW5pdHMgb2YgaG9yaXpvbnRhbCBzcGFjZSBjaGFyYWN0ZXJzLiAqLworCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgeworICAgICAgICAgIFNFVF9CSVQoMHhDMik7ICAvKiBGb3IgVSswMEEwICovCisgICAgICAgICAgU0VUX0JJVCgweEUxKTsgIC8qIEZvciBVKzE2ODAsIFUrMTgwRSAqLworICAgICAgICAgIFNFVF9CSVQoMHhFMik7ICAvKiBGb3IgVSsyMDAwIC0gVSsyMDBBLCBVKzIwMkYsIFUrMjA1RiAqLworICAgICAgICAgIFNFVF9CSVQoMHhFMyk7ICAvKiBGb3IgVSszMDAwICovCisgICAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgLyogRm9yIHRoZSA4LWJpdCBsaWJyYXJ5IG5vdCBpbiBVVEYtOCBtb2RlLCBzZXQgdGhlIGJpdCBmb3IgMHhBMCwgdW5sZXNzCisgICAgICAgIHRoZSBjb2RlIGlzIEVCQ0RJQy4gKi8KKyAgICAgICAgICB7CisjaWZuZGVmIEVCQ0RJQworICAgICAgICAgIFNFVF9CSVQoMHhBMCk7CisjZW5kaWYgIC8qIE5vdCBFQkNESUMgKi8KKyAgICAgICAgICB9CisjZW5kaWYgIC8qIDgtYml0IHN1cHBvcnQgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9BTllOTDoKKyAgICAgICAgY2FzZSBPUF9WU1BBQ0U6CisgICAgICAgIFNFVF9CSVQoQ0hBUl9MRik7CisgICAgICAgIFNFVF9CSVQoQ0hBUl9WVCk7CisgICAgICAgIFNFVF9CSVQoQ0hBUl9GRik7CisgICAgICAgIFNFVF9CSVQoQ0hBUl9DUik7CisKKyAgICAgICAgLyogRm9yIHRoZSAxNi1iaXQgYW5kIDMyLWJpdCBsaWJyYXJpZXMgKHdoaWNoIGNhbiBuZXZlciBiZSBFQkNESUMpLCBzZXQKKyAgICAgICAgdGhlIGJpdHMgZm9yIE5FTCBhbmQgZm9yIGNvZGUgdW5pdHMgPj0gMjU1LCBpbmRlcGVuZGVudGx5IG9mIFVURi4gKi8KKworI2lmIFBDUkUyX0NPREVfVU5JVF9XSURUSCAhPSA4CisgICAgICAgIFNFVF9CSVQoQ0hBUl9ORUwpOworICAgICAgICBTRVRfQklUKDB4RkYpOworI2Vsc2UKKyAgICAgICAgLyogRm9yIHRoZSA4LWJpdCBsaWJyYXJ5IGluIFVURi04IG1vZGUsIHNldCB0aGUgYml0cyBmb3IgdGhlIGZpcnN0IGNvZGUKKyAgICAgICAgdW5pdHMgb2YgdmVydGljYWwgc3BhY2UgY2hhcmFjdGVycy4gKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICBpZiAodXRmKQorICAgICAgICAgIHsKKyAgICAgICAgICBTRVRfQklUKDB4QzIpOyAgLyogRm9yIFUrMDA4NSAoTkVMKSAqLworICAgICAgICAgIFNFVF9CSVQoMHhFMik7ICAvKiBGb3IgVSsyMDI4LCBVKzIwMjkgKi8KKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAvKiBGb3IgdGhlIDgtYml0IGxpYnJhcnkgbm90IGluIFVURi04IG1vZGUsIHNldCB0aGUgYml0IGZvciBORUwuICovCisgICAgICAgICAgeworICAgICAgICAgIFNFVF9CSVQoQ0hBUl9ORUwpOworICAgICAgICAgIH0KKyNlbmRpZiAgLyogOC1iaXQgc3VwcG9ydCAqLworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX05PVF9ESUdJVDoKKyAgICAgICAgc2V0X25vdHR5cGVfYml0cyhyZSwgY2JpdF9kaWdpdCwgdGFibGVfbGltaXQpOworICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE9QX0RJR0lUOgorICAgICAgICBzZXRfdHlwZV9iaXRzKHJlLCBjYml0X2RpZ2l0LCB0YWJsZV9saW1pdCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfTk9UX1dISVRFU1BBQ0U6CisgICAgICAgIHNldF9ub3R0eXBlX2JpdHMocmUsIGNiaXRfc3BhY2UsIHRhYmxlX2xpbWl0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9XSElURVNQQUNFOgorICAgICAgICBzZXRfdHlwZV9iaXRzKHJlLCBjYml0X3NwYWNlLCB0YWJsZV9saW1pdCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgT1BfTk9UX1dPUkRDSEFSOgorICAgICAgICBzZXRfbm90dHlwZV9iaXRzKHJlLCBjYml0X3dvcmQsIHRhYmxlX2xpbWl0KTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9XT1JEQ0hBUjoKKyAgICAgICAgc2V0X3R5cGVfYml0cyhyZSwgY2JpdF93b3JkLCB0YWJsZV9saW1pdCk7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIHRjb2RlICs9IDI7CisgICAgICBicmVhazsKKworICAgICAgLyogRXh0ZW5kZWQgY2xhc3M6IGlmIHRoZXJlIGFyZSBhbnkgcHJvcGVydHkgY2hlY2tzLCBvciBpZiB0aGlzIGlzIGEKKyAgICAgIG5lZ2F0aXZlIFhDTEFTUyB3aXRob3V0IGEgbWFwLCBnaXZlIHVwLiBJZiB0aGVyZSBhcmUgbm8gcHJvcGVydHkgY2hlY2tzLAorICAgICAgdGhlcmUgbXVzdCBiZSB3aWRlIGNoYXJhY3RlcnMgb24gdGhlIFhDTEFTUyBsaXN0LCBiZWNhdXNlIG90aGVyd2lzZSBhbgorICAgICAgWENMQVNTIHdvdWxkIG5vdCBoYXZlIGJlZW4gY3JlYXRlZC4gVGhpcyBtZWFucyB0aGF0IGNvZGUgcG9pbnRzID49IDI1NQorICAgICAgYXJlIGFsd2F5cyBwb3RlbnRpYWwgc3RhcnRlcnMuICovCisKKyNpZmRlZiBTVVBQT1JUX1dJREVfQ0hBUlMKKyAgICAgIGNhc2UgT1BfWENMQVNTOgorICAgICAgaWYgKCh0Y29kZVsxICsgTElOS19TSVpFXSAmIFhDTF9IQVNQUk9QKSAhPSAwIHx8CisgICAgICAgICAgKHRjb2RlWzEgKyBMSU5LX1NJWkVdICYgKFhDTF9NQVB8WENMX05PVCkpID09IFhDTF9OT1QpCisgICAgICAgIHJldHVybiBTU0JfRkFJTDsKKworICAgICAgLyogV2UgaGF2ZSBhIHBvc2l0aXZlIFhDTEFTUyBvciBhIG5lZ2F0aXZlIG9uZSB3aXRob3V0IGEgbWFwLiBTZXQgdXAgdGhlCisgICAgICBtYXAgcG9pbnRlciBpZiB0aGVyZSBpcyBvbmUsIGFuZCBmYWxsIHRocm91Z2guICovCisKKyAgICAgIGNsYXNzbWFwID0gKCh0Y29kZVsxICsgTElOS19TSVpFXSAmIFhDTF9NQVApID09IDApPyBOVUxMIDoKKyAgICAgICAgKHVpbnQ4X3QgKikodGNvZGUgKyAxICsgTElOS19TSVpFICsgMSk7CisjZW5kaWYKKworICAgICAgLyogRW50ZXIgaGVyZSBmb3IgYSBuZWdhdGl2ZSBub24tWENMQVNTLiBJbiB0aGUgOC1iaXQgbGlicmFyeSwgaWYgd2UgYXJlCisgICAgICBpbiBVVEYgbW9kZSwgYW55IGJ5dGUgd2l0aCBhIHZhbHVlID49IDB4YzQgaXMgYSBwb3RlbnRpYWxseSB2YWxpZCBzdGFydGVyCisgICAgICBiZWNhdXNlIGl0IHN0YXJ0cyBhIGNoYXJhY3RlciB3aXRoIGEgdmFsdWUgPiAyNTUuIEluIDgtYml0IG5vbi1VVEYgbW9kZSwKKyAgICAgIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBDTEFTUyBhbmQgTkNMQVNTLiBJbiBhbGwgb3RoZXIgd2lkZQorICAgICAgY2hhcmFjdGVyIG1vZGVzLCBzZXQgdGhlIDB4RkYgYml0IHRvIGluZGljYXRlIGNvZGUgdW5pdHMgPj0gMjU1LiAqLworCisgICAgICBjYXNlIE9QX05DTEFTUzoKKyNpZiBkZWZpbmVkIFNVUFBPUlRfVU5JQ09ERSAmJiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgICAgaWYgKHV0ZikKKyAgICAgICAgeworICAgICAgICByZS0+c3RhcnRfYml0bWFwWzI0XSB8PSAweGYwOyAgICAgICAgICAgIC8qIEJpdHMgZm9yIDB4YzQgLSAweGM4ICovCisgICAgICAgIG1lbXNldChyZS0+c3RhcnRfYml0bWFwKzI1LCAweGZmLCA3KTsgICAgLyogQml0cyBmb3IgMHhjOSAtIDB4ZmYgKi8KKyAgICAgICAgfQorI2VsaWYgUENSRTJfQ09ERV9VTklUX1dJRFRIICE9IDgKKyAgICAgIFNFVF9CSVQoMHhGRik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGb3IgY2hhcmFjdGVycyA+PSAyNTUgKi8KKyNlbmRpZgorICAgICAgLyogRmFsbCB0aHJvdWdoICovCisKKyAgICAgIC8qIEVudGVyIGhlcmUgZm9yIGEgcG9zaXRpdmUgbm9uLVhDTEFTUy4gSWYgd2UgaGF2ZSBmYWxsZW4gdGhyb3VnaCBmcm9tCisgICAgICBhbiBYQ0xBU1MsIGNsYXNzbWFwIHdpbGwgYWxyZWFkeSBiZSBzZXQ7IGp1c3QgYWR2YW5jZSB0aGUgY29kZSBwb2ludGVyLgorICAgICAgT3RoZXJ3aXNlLCBzZXQgdXAgY2xhc3NtYXAgZm9yIGEgYSBub24tWENMQVNTIGFuZCBhZHZhbmNlIHBhc3QgaXQuICovCisKKyAgICAgIGNhc2UgT1BfQ0xBU1M6CisgICAgICBpZiAoKnRjb2RlID09IE9QX1hDTEFTUykgdGNvZGUgKz0gR0VUKHRjb2RlLCAxKTsgZWxzZQorICAgICAgICB7CisgICAgICAgIGNsYXNzbWFwID0gKHVpbnQ4X3QgKikoKyt0Y29kZSk7CisgICAgICAgIHRjb2RlICs9IDMyIC8gc2l6ZW9mKFBDUkUyX1VDSEFSKTsKKyAgICAgICAgfQorCisgICAgICAvKiBXaGVuIHdpZGUgY2hhcmFjdGVycyBhcmUgc3VwcG9ydGVkLCBjbGFzc21hcCBtYXkgYmUgTlVMTC4gSW4gVVRGLTgKKyAgICAgIChzaWMpIG1vZGUsIHRoZSBiaXRzIGluIGEgY2xhc3MgYml0IG1hcCBjb3JyZXNwb25kIHRvIGNoYXJhY3RlciB2YWx1ZXMsCisgICAgICBub3QgdG8gYnl0ZSB2YWx1ZXMuIEhvd2V2ZXIsIHRoZSBiaXQgbWFwIHdlIGFyZSBjb25zdHJ1Y3RpbmcgaXMgZm9yIGJ5dGUKKyAgICAgIHZhbHVlcy4gU28gd2UgaGF2ZSB0byBkbyBhIGNvbnZlcnNpb24gZm9yIGNoYXJhY3RlcnMgd2hvc2UgY29kZSBwb2ludCBpcworICAgICAgZ3JlYXRlciB0aGFuIDEyNy4gSW4gZmFjdCwgdGhlcmUgYXJlIG9ubHkgdHdvIHBvc3NpYmxlIHN0YXJ0aW5nIGJ5dGVzIGZvcgorICAgICAgY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgMTI4IC0gMjU1LiAqLworCisgICAgICBpZiAoY2xhc3NtYXAgIT0gTlVMTCkKKyAgICAgICAgeworI2lmIGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSA4CisgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgeworICAgICAgICAgIGZvciAoYyA9IDA7IGMgPCAxNjsgYysrKSByZS0+c3RhcnRfYml0bWFwW2NdIHw9IGNsYXNzbWFwW2NdOworICAgICAgICAgIGZvciAoYyA9IDEyODsgYyA8IDI1NjsgYysrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKChjbGFzc21hcFtjLzhdICYmICgxIDw8IChjJjcpKSkgIT0gMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBpbnQgZCA9IChjID4+IDYpIHwgMHhjMDsgICAgICAgICAgICAvKiBTZXQgYml0IGZvciB0aGlzIHN0YXJ0ZXIgKi8KKyAgICAgICAgICAgICAgcmUtPnN0YXJ0X2JpdG1hcFtkLzhdIHw9ICgxIDw8IChkJjcpKTsgIC8qIGFuZCB0aGVuIHNraXAgb24gdG8gdGhlICovCisgICAgICAgICAgICAgIGMgPSAoYyAmIDB4YzApICsgMHg0MCAtIDE7ICAgICAgICAgIC8qIG5leHQgcmVsZXZhbnQgY2hhcmFjdGVyLiAqLworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgLyogSW4gYWxsIG1vZGVzIGV4Y2VwdCBVVEYtOCwgdGhlIHR3byBiaXQgbWFwcyBhcmUgY29tcGF0aWJsZS4gKi8KKworICAgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGMgPSAwOyBjIDwgMzI7IGMrKykgcmUtPnN0YXJ0X2JpdG1hcFtjXSB8PSBjbGFzc21hcFtjXTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgLyogQWN0IG9uIHdoYXQgZm9sbG93cyB0aGUgY2xhc3MuIEZvciBhIHplcm8gbWluaW11bSByZXBlYXQsIGNvbnRpbnVlOworICAgICAgb3RoZXJ3aXNlIHN0b3AgcHJvY2Vzc2luZy4gKi8KKworICAgICAgc3dpdGNoICgqdGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBPUF9DUlNUQVI6CisgICAgICAgIGNhc2UgT1BfQ1JNSU5TVEFSOgorICAgICAgICBjYXNlIE9QX0NSUVVFUlk6CisgICAgICAgIGNhc2UgT1BfQ1JNSU5RVUVSWToKKyAgICAgICAgY2FzZSBPUF9DUlBPU1NUQVI6CisgICAgICAgIGNhc2UgT1BfQ1JQT1NRVUVSWToKKyAgICAgICAgdGNvZGUrKzsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBPUF9DUlJBTkdFOgorICAgICAgICBjYXNlIE9QX0NSTUlOUkFOR0U6CisgICAgICAgIGNhc2UgT1BfQ1JQT1NSQU5HRToKKyAgICAgICAgaWYgKEdFVDIodGNvZGUsIDEpID09IDApIHRjb2RlICs9IDEgKyAyICogSU1NMl9TSVpFOworICAgICAgICAgIGVsc2UgdHJ5X25leHQgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgdHJ5X25leHQgPSBGQUxTRTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIGJyZWFrOyAvKiBFbmQgb2YgY2xhc3MgaGFuZGxpbmcgY2FzZSAqLworICAgICAgfSAgICAgIC8qIEVuZCBvZiBzd2l0Y2ggZm9yIG9wY29kZXMgKi8KKyAgICB9ICAgICAgICAvKiBFbmQgb2YgdHJ5X25leHQgbG9vcCAqLworCisgIGNvZGUgKz0gR0VUKGNvZGUsIDEpOyAgIC8qIEFkdmFuY2UgdG8gbmV4dCBicmFuY2ggKi8KKyAgfQord2hpbGUgKCpjb2RlID09IE9QX0FMVCk7CisKK3JldHVybiB5aWVsZDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgIFN0dWR5IGEgY29tcGlsZWQgZXhwcmVzc2lvbiAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiBpcyBoYW5kZWQgYSBjb21waWxlZCBleHByZXNzaW9uIHRoYXQgaXQgbXVzdCBzdHVkeSB0byBwcm9kdWNlCitpbmZvcm1hdGlvbiB0aGF0IHdpbGwgc3BlZWQgdXAgdGhlIG1hdGNoaW5nLgorCitBcmd1bWVudDogIHBvaW50cyB0byB0aGUgY29tcGlsZWQgZXhwcmVzc2lvbgorUmV0dXJuczogICAwIG5vcm1hbGx5OyBub24temVybyBzaG91bGQgbmV2ZXIgbm9ybWFsbHkgb2NjdXIKKyAgICAgICAgICAgMSB1bmtub3duIG9wY29kZSBpbiBzZXRfc3RhcnRfYml0cworICAgICAgICAgICAyIG1pc3NpbmcgY2FwdHVyaW5nIGJyYWNrZXQKKyAgICAgICAgICAgMyB1bmtub3duIG9wY29kZSBpbiBmaW5kX21pbmxlbmd0aAorKi8KKworaW50CitQUklWKHN0dWR5KShwY3JlMl9yZWFsX2NvZGUgKnJlKQoreworaW50IG1pbjsKK2ludCBjb3VudCA9IDA7CitQQ1JFMl9VQ0hBUiAqY29kZTsKK0JPT0wgdXRmID0gKHJlLT5vdmVyYWxsX29wdGlvbnMgJiBQQ1JFMl9VVEYpICE9IDA7CisKKy8qIEZpbmQgc3RhcnQgb2YgY29tcGlsZWQgY29kZSAqLworCitjb2RlID0gKFBDUkUyX1VDSEFSICopKCh1aW50OF90ICopcmUgKyBzaXplb2YocGNyZTJfcmVhbF9jb2RlKSkgKworICByZS0+bmFtZV9lbnRyeV9zaXplICogcmUtPm5hbWVfY291bnQ7CisKKy8qIEZvciBhbiBhbmNob3JlZCBwYXR0ZXJuLCBvciBhbiB1bmFuY2hvcmVkIHBhdHRlcm4gdGhhdCBoYXMgYSBmaXJzdCBjb2RlCit1bml0LCBvciBhIG11bHRpbGluZSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBvbmx5IGF0ICJsaW5lIHN0YXJ0IiwgdGhlcmUgaXMgbm8KK3BvaW50IGluIHNlZWtpbmcgYSBsaXN0IG9mIHN0YXJ0aW5nIGNvZGUgdW5pdHMuICovCisKK2lmICgocmUtPm92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX0FOQ0hPUkVEKSA9PSAwICYmCisgICAgKHJlLT5mbGFncyAmIChQQ1JFMl9GSVJTVFNFVHxQQ1JFMl9TVEFSVExJTkUpKSA9PSAwKQorICB7CisgIGludCByYyA9IHNldF9zdGFydF9iaXRzKHJlLCBjb2RlLCB1dGYpOworICBpZiAocmMgPT0gU1NCX1VOS05PV04pIHJldHVybiAxOworICBpZiAocmMgPT0gU1NCX0RPTkUpIHJlLT5mbGFncyB8PSBQQ1JFMl9GSVJTVE1BUFNFVDsKKyAgfQorCisvKiBGaW5kIHRoZSBtaW5pbXVtIGxlbmd0aCBvZiBzdWJqZWN0IHN0cmluZy4gSWYgaXQgY2FuIG1hdGNoIGFuIGVtcHR5IHN0cmluZywKK3RoZSBtaW5pbXVtIGxlbmd0aCBpcyBhbHJlYWR5IGtub3duLiAqLworCitpZiAoKHJlLT5mbGFncyAmIFBDUkUyX01BVENIX0VNUFRZKSA9PSAwKQorICB7CisgIHN3aXRjaChtaW4gPSBmaW5kX21pbmxlbmd0aChyZSwgY29kZSwgY29kZSwgdXRmLCBOVUxMLCAmY291bnQpKQorICAgIHsKKyAgICBjYXNlIC0xOiAgLyogXEMgaW4gVVRGIG1vZGUgb3IgKCpBQ0NFUFQpIG9yIG92ZXItY29tcGxleCByZWdleCAqLworICAgIGJyZWFrOyAgICAvKiBMZWF2ZSBtaW5sZW5ndGggdW5jaGFuZ2VkICh3aWxsIGJlIHplcm8pICovCisKKyAgICBjYXNlIC0yOgorICAgIHJldHVybiAyOyAvKiBtaXNzaW5nIGNhcHR1cmluZyBicmFja2V0ICovCisKKyAgICBjYXNlIC0zOgorICAgIHJldHVybiAzOyAvKiB1bnJlY29nbml6ZWQgb3Bjb2RlICovCisKKyAgICBkZWZhdWx0OgorICAgIGlmIChtaW4gPiBVSU5UMTZfTUFYKSBtaW4gPSBVSU5UMTZfTUFYOworICAgIHJlLT5taW5sZW5ndGggPSBtaW47CisgICAgYnJlYWs7CisgICAgfQorICB9CisKK3JldHVybiAwOworfQorCisvKiBFbmQgb2YgcGNyZTJfc3R1ZHkuYyAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX3N1YnN0aXR1dGUuYyBiL2Rpc3QyL3NyYy9wY3JlMl9zdWJzdGl0dXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJmNzgxZQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl9zdWJzdGl0dXRlLmMKQEAgLTAsMCArMSw4NTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgUGVybC1Db21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUENSRSBpcyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBzeW50YXgKK2FuZCBzZW1hbnRpY3MgYXJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIG9mIHRoZSBQZXJsIDUgbGFuZ3VhZ2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBQaGlsaXAgSGF6ZWwKKyAgICAgT3JpZ2luYWwgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTIgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKyAgICAgICAgIE5ldyBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJwY3JlMl9pbnRlcm5hbC5oIgorCisjZGVmaW5lIFBUUl9TVEFDS19TSVpFIDIwCisKKyNkZWZpbmUgU1VCU1RJVFVURV9PUFRJT05TIFwKKyAgKFBDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUR8UENSRTJfU1VCU1RJVFVURV9HTE9CQUx8IFwKKyAgIFBDUkUyX1NVQlNUSVRVVEVfT1ZFUkZMT1dfTEVOR1RIfFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVHwgXAorICAgUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWSkKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICBGaW5kIGVuZCBvZiBzdWJzdGl0dXRlIHRleHQgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSW4gZXh0ZW5kZWQgbW9kZSwgd2UgcmVjb2duaXplICR7bmFtZTorc2V0IHRleHQ6dW5zZXQgdGV4dH0gYW5kIHNpbWlsYXIKK2NvbnN0cnVjdGlvbnMuIFRoaXMgcmVxdWlyZXMgdGhlIGlkZW50aWZpY2F0aW9uIG9mIHVuZXNjYXBlZCA6IGFuZCB9CitjaGFyYWN0ZXJzLiBUaGlzIGZ1bmN0aW9uIHNjYW5zIGZvciBzdWNoLiBJdCBtdXN0IGRlYWwgd2l0aCBuZXN0ZWQgJHsKK2NvbnN0cnVjdGlvbnMuIFRoZSBwb2ludGVyIHRvIHRoZSB0ZXh0IGlzIHVwZGF0ZWQsIGVpdGhlciB0byB0aGUgcmVxdWlyZWQgZW5kCitjaGFyYWN0ZXIsIG9yIHRvIHdoZXJlIGFuIGVycm9yIHdhcyBkZXRlY3RlZC4KKworQXJndW1lbnRzOgorICBjb2RlICAgICAgcG9pbnRzIHRvIHRoZSBjb21waWxlZCBleHByZXNzaW9uIChmb3Igb3B0aW9ucykKKyAgcHRycHRyICAgIHBvaW50cyB0byB0aGUgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHRleHQgKHVwZGF0ZWQpCisgIHB0cmVuZCAgICBlbmQgb2YgdGhlIHdob2xlIHN0cmluZworICBsYXN0ICAgICAgVFJVRSBpZiB0aGUgbGFzdCBleHBlY3RlZCBzdHJpbmcgKG9ubHkgfSByZWNvZ25pemVkKQorCitSZXR1cm5zOiAgICAwIG9uIHN1Y2Nlc3MKKyAgICAgICAgICAgIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQorKi8KKworc3RhdGljIGludAorZmluZF90ZXh0X2VuZChjb25zdCBwY3JlMl9jb2RlICpjb2RlLCBQQ1JFMl9TUFRSICpwdHJwdHIsIFBDUkUyX1NQVFIgcHRyZW5kLAorICBCT09MIGxhc3QpCit7CitpbnQgcmMgPSAwOwordWludDMyX3QgbmVzdGxldmVsID0gMDsKK0JPT0wgbGl0ZXJhbCA9IEZBTFNFOworUENSRTJfU1BUUiBwdHIgPSAqcHRycHRyOworCitmb3IgKDsgcHRyIDwgcHRyZW5kOyBwdHIrKykKKyAgeworICBpZiAobGl0ZXJhbCkKKyAgICB7CisgICAgaWYgKHB0clswXSA9PSBDSEFSX0JBQ0tTTEFTSCAmJiBwdHIgPCBwdHJlbmQgLSAxICYmIHB0clsxXSA9PSBDSEFSX0UpCisgICAgICB7CisgICAgICBsaXRlcmFsID0gRkFMU0U7CisgICAgICBwdHIgKz0gMTsKKyAgICAgIH0KKyAgICB9CisKKyAgZWxzZSBpZiAoKnB0ciA9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQpCisgICAgeworICAgIGlmIChuZXN0bGV2ZWwgPT0gMCkgZ290byBFWElUOworICAgIG5lc3RsZXZlbC0tOworICAgIH0KKworICBlbHNlIGlmICgqcHRyID09IENIQVJfQ09MT04gJiYgIWxhc3QgJiYgbmVzdGxldmVsID09IDApIGdvdG8gRVhJVDsKKworICBlbHNlIGlmICgqcHRyID09IENIQVJfRE9MTEFSX1NJR04pCisgICAgeworICAgIGlmIChwdHIgPCBwdHJlbmQgLSAxICYmIHB0clsxXSA9PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCkKKyAgICAgIHsKKyAgICAgIG5lc3RsZXZlbCsrOworICAgICAgcHRyICs9IDE7CisgICAgICB9CisgICAgfQorCisgIGVsc2UgaWYgKCpwdHIgPT0gQ0hBUl9CQUNLU0xBU0gpCisgICAgeworICAgIGludCBlcmM7CisgICAgaW50IGVycm9yY29kZSA9IDA7CisgICAgdWludDMyX3QgY2g7CisKKyAgICBpZiAocHRyIDwgcHRyZW5kIC0gMSkgc3dpdGNoIChwdHJbMV0pCisgICAgICB7CisgICAgICBjYXNlIENIQVJfTDoKKyAgICAgIGNhc2UgQ0hBUl9sOgorICAgICAgY2FzZSBDSEFSX1U6CisgICAgICBjYXNlIENIQVJfdToKKyAgICAgIHB0ciArPSAxOworICAgICAgY29udGludWU7CisgICAgICB9CisKKyAgICBlcmMgPSBQUklWKGNoZWNrX2VzY2FwZSkoJnB0ciwgcHRyZW5kLCAmY2gsICZlcnJvcmNvZGUsCisgICAgICBjb2RlLT5vdmVyYWxsX29wdGlvbnMsIEZBTFNFLCBOVUxMKTsKKyAgICBpZiAoZXJyb3Jjb2RlICE9IDApCisgICAgICB7CisgICAgICByYyA9IGVycm9yY29kZTsKKyAgICAgIGdvdG8gRVhJVDsKKyAgICAgIH0KKworICAgIHN3aXRjaChlcmMpCisgICAgICB7CisgICAgICBjYXNlIDA6ICAgICAgLyogRGF0YSBjaGFyYWN0ZXIgKi8KKyAgICAgIGNhc2UgRVNDX0U6ICAvKiBJc29sYXRlZCBcRSBpcyBpZ25vcmVkICovCisgICAgICBicmVhazsKKworICAgICAgY2FzZSBFU0NfUToKKyAgICAgIGxpdGVyYWwgPSBUUlVFOworICAgICAgYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICByYyA9IFBDUkUyX0VSUk9SX0JBRFJFUEVTQ0FQRTsKKyAgICAgIGdvdG8gRVhJVDsKKyAgICAgIH0KKyAgICB9CisgIH0KKworcmMgPSBQQ1JFMl9FUlJPUl9SRVBNSVNTSU5HQlJBQ0U7ICAgLyogVGVybWluYXRvciBub3QgZm91bmQgKi8KKworRVhJVDoKKypwdHJwdHIgPSBwdHI7CityZXR1cm4gcmM7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgTWF0Y2ggYW5kIHN1YnN0aXR1dGUgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gYXBwbGllcyBhIGNvbXBpbGVkIHJlIHRvIGEgc3ViamVjdCBzdHJpbmcgYW5kIGNyZWF0ZXMgYSBuZXcKK3N0cmluZyB3aXRoIHN1YnN0aXR1dGlvbnMuIFRoZSBmaXJzdCA3IGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yCitwY3JlMl9tYXRjaCgpLiBFaXRoZXIgc3RyaW5nIGxlbmd0aCBtYXkgYmUgUENSRTJfWkVST19URVJNSU5BVEVELgorCitBcmd1bWVudHM6CisgIGNvZGUgICAgICAgICAgICBwb2ludHMgdG8gdGhlIGNvbXBpbGVkIGV4cHJlc3Npb24KKyAgc3ViamVjdCAgICAgICAgIHBvaW50cyB0byB0aGUgc3ViamVjdCBzdHJpbmcKKyAgbGVuZ3RoICAgICAgICAgIGxlbmd0aCBvZiBzdWJqZWN0IHN0cmluZyAobWF5IGNvbnRhaW4gYmluYXJ5IHplcm9zKQorICBzdGFydF9vZmZzZXQgICAgd2hlcmUgdG8gc3RhcnQgaW4gdGhlIHN1YmplY3Qgc3RyaW5nCisgIG9wdGlvbnMgICAgICAgICBvcHRpb24gYml0cworICBtYXRjaF9kYXRhICAgICAgcG9pbnRzIHRvIGEgbWF0Y2hfZGF0YSBibG9jaywgb3IgaXMgTlVMTAorICBjb250ZXh0ICAgICAgICAgcG9pbnRzIGEgUENSRTIgY29udGV4dAorICByZXBsYWNlbWVudCAgICAgcG9pbnRzIHRvIHRoZSByZXBsYWNlbWVudCBzdHJpbmcKKyAgcmxlbmd0aCAgICAgICAgIGxlbmd0aCBvZiByZXBsYWNlbWVudCBzdHJpbmcKKyAgYnVmZmVyICAgICAgICAgIHdoZXJlIHRvIHB1dCB0aGUgc3Vic3RpdHV0ZWQgc3RyaW5nCisgIGJsZW5ndGggICAgICAgICBwb2ludHMgdG8gbGVuZ3RoIG9mIGJ1ZmZlcjsgdXBkYXRlZCB0byBsZW5ndGggb2Ygc3RyaW5nCisKK1JldHVybnM6ICAgICAgICAgID49IDAgbnVtYmVyIG9mIHN1YnN0aXR1dGlvbnMgbWFkZQorICAgICAgICAgICAgICAgICAgPCAwIGFuIGVycm9yIGNvZGUKKyAgICAgICAgICAgICAgICAgIFBDUkUyX0VSUk9SX0JBRFJFUExBQ0VNRU5UIG1lYW5zIGludmFsaWQgdXNlIG9mICQKKyovCisKKy8qIFRoaXMgbWFjcm8gY2hlY2tzIGZvciBzcGFjZSBpbiB0aGUgYnVmZmVyIGJlZm9yZSBjb3B5aW5nIGludG8gaXQuIE9uCitvdmVyZmxvdywgZWl0aGVyIGdpdmUgYW4gZXJyb3IgaW1tZWRpYXRlbHksIG9yIGtlZXAgb24sIGFjY3VtdWxhdGluZyB0aGUKK2xlbmd0aC4gKi8KKworI2RlZmluZSBDSEVDS01FTUNQWShmcm9tLGxlbmd0aCkgXAorICBpZiAoIW92ZXJmbG93ZWQgJiYgbGVuZ3RobGVmdCA8IGxlbmd0aCkgXAorICAgIHsgXAorICAgIGlmICgoc3Vib3B0aW9ucyAmIFBDUkUyX1NVQlNUSVRVVEVfT1ZFUkZMT1dfTEVOR1RIKSA9PSAwKSBnb3RvIE5PUk9PTTsgXAorICAgIG92ZXJmbG93ZWQgPSBUUlVFOyBcCisgICAgZXh0cmFfbmVlZGVkID0gbGVuZ3RoIC0gbGVuZ3RobGVmdDsgXAorICAgIH0gXAorICBlbHNlIGlmIChvdmVyZmxvd2VkKSBcCisgICAgeyBcCisgICAgZXh0cmFfbmVlZGVkICs9IGxlbmd0aDsgXAorICAgIH0gIFwKKyAgZWxzZSBcCisgICAgeyAgXAorICAgIG1lbWNweShidWZmZXIgKyBidWZmX29mZnNldCwgZnJvbSwgQ1UyQllURVMobGVuZ3RoKSk7IFwKKyAgICBidWZmX29mZnNldCArPSBsZW5ndGg7IFwKKyAgICBsZW5ndGhsZWZ0IC09IGxlbmd0aDsgXAorICAgIH0KKworLyogSGVyZSdzIHRoZSBmdW5jdGlvbiAqLworCitQQ1JFMl9FWFBfREVGTiBpbnQgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9zdWJzdGl0dXRlKGNvbnN0IHBjcmUyX2NvZGUgKmNvZGUsIFBDUkUyX1NQVFIgc3ViamVjdCwgUENSRTJfU0laRSBsZW5ndGgsCisgIFBDUkUyX1NJWkUgc3RhcnRfb2Zmc2V0LCB1aW50MzJfdCBvcHRpb25zLCBwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLAorICBwY3JlMl9tYXRjaF9jb250ZXh0ICptY29udGV4dCwgUENSRTJfU1BUUiByZXBsYWNlbWVudCwgUENSRTJfU0laRSBybGVuZ3RoLAorICBQQ1JFMl9VQ0hBUiAqYnVmZmVyLCBQQ1JFMl9TSVpFICpibGVuZ3RoKQoreworaW50IHJjOworaW50IHN1YnM7CitpbnQgZm9yY2VjYXNlID0gMDsKK2ludCBmb3JjZWNhc2VyZXNldCA9IDA7Cit1aW50MzJfdCBvdmVjdG9yX2NvdW50OwordWludDMyX3QgZ29wdGlvbnMgPSAwOwordWludDMyX3Qgc3Vib3B0aW9uczsKK0JPT0wgbWF0Y2hfZGF0YV9jcmVhdGVkID0gRkFMU0U7CitCT09MIGxpdGVyYWwgPSBGQUxTRTsKK0JPT0wgb3ZlcmZsb3dlZCA9IEZBTFNFOworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorQk9PTCB1dGYgPSAoY29kZS0+b3ZlcmFsbF9vcHRpb25zICYgUENSRTJfVVRGKSAhPSAwOworI2VuZGlmCitQQ1JFMl9VQ0hBUiB0ZW1wWzZdOworUENSRTJfU1BUUiBwdHI7CitQQ1JFMl9TUFRSIHJlcGVuZDsKK1BDUkUyX1NJWkUgZXh0cmFfbmVlZGVkID0gMDsKK1BDUkUyX1NJWkUgYnVmZl9vZmZzZXQsIGJ1ZmZfbGVuZ3RoLCBsZW5ndGhsZWZ0LCBmcmFnbGVuZ3RoOworUENSRTJfU0laRSAqb3ZlY3RvcjsKKworYnVmZl9vZmZzZXQgPSAwOworbGVuZ3RobGVmdCA9IGJ1ZmZfbGVuZ3RoID0gKmJsZW5ndGg7CisqYmxlbmd0aCA9IFBDUkUyX1VOU0VUOworCisvKiBQYXJ0aWFsIG1hdGNoaW5nIGlzIG5vdCB2YWxpZC4gKi8KKworaWYgKChvcHRpb25zICYgKFBDUkUyX1BBUlRJQUxfSEFSRHxQQ1JFMl9QQVJUSUFMX1NPRlQpKSAhPSAwKQorICByZXR1cm4gUENSRTJfRVJST1JfQkFET1BUSU9OOworCisvKiBJZiBubyBtYXRjaCBkYXRhIGJsb2NrIGlzIHByb3ZpZGVkLCBjcmVhdGUgb25lLiAqLworCitpZiAobWF0Y2hfZGF0YSA9PSBOVUxMKQorICB7CisgIHBjcmUyX2dlbmVyYWxfY29udGV4dCAqZ2NvbnRleHQgPSAobWNvbnRleHQgPT0gTlVMTCk/CisgICAgKHBjcmUyX2dlbmVyYWxfY29udGV4dCAqKWNvZGUgOgorICAgIChwY3JlMl9nZW5lcmFsX2NvbnRleHQgKiltY29udGV4dDsKKyAgbWF0Y2hfZGF0YSA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybihjb2RlLCBnY29udGV4dCk7CisgIGlmIChtYXRjaF9kYXRhID09IE5VTEwpIHJldHVybiBQQ1JFMl9FUlJPUl9OT01FTU9SWTsKKyAgbWF0Y2hfZGF0YV9jcmVhdGVkID0gVFJVRTsKKyAgfQorb3ZlY3RvciA9IHBjcmUyX2dldF9vdmVjdG9yX3BvaW50ZXIobWF0Y2hfZGF0YSk7CitvdmVjdG9yX2NvdW50ID0gcGNyZTJfZ2V0X292ZWN0b3JfY291bnQobWF0Y2hfZGF0YSk7CisKKy8qIEZpbmQgbGVuZ3RocyBvZiB6ZXJvLXRlcm1pbmF0ZWQgc3RyaW5ncyBhbmQgdGhlIGVuZCBvZiB0aGUgcmVwbGFjZW1lbnQuICovCisKK2lmIChsZW5ndGggPT0gUENSRTJfWkVST19URVJNSU5BVEVEKSBsZW5ndGggPSBQUklWKHN0cmxlbikoc3ViamVjdCk7CitpZiAocmxlbmd0aCA9PSBQQ1JFMl9aRVJPX1RFUk1JTkFURUQpIHJsZW5ndGggPSBQUklWKHN0cmxlbikocmVwbGFjZW1lbnQpOworcmVwZW5kID0gcmVwbGFjZW1lbnQgKyBybGVuZ3RoOworCisvKiBDaGVjayBVVEYgcmVwbGFjZW1lbnQgc3RyaW5nIGlmIG5lY2Vzc2FyeS4gKi8KKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQoraWYgKHV0ZiAmJiAob3B0aW9ucyAmIFBDUkUyX05PX1VURl9DSEVDSykgPT0gMCkKKyAgeworICByYyA9IFBSSVYodmFsaWRfdXRmKShyZXBsYWNlbWVudCwgcmxlbmd0aCwgJihtYXRjaF9kYXRhLT5yaWdodGNoYXIpKTsKKyAgaWYgKHJjICE9IDApCisgICAgeworICAgIG1hdGNoX2RhdGEtPmxlZnRjaGFyID0gMDsKKyAgICBnb3RvIEVYSVQ7CisgICAgfQorICB9CisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCisvKiBTYXZlIHRoZSBzdWJzdGl0dXRlIG9wdGlvbnMgYW5kIHJlbW92ZSB0aGVtIGZyb20gdGhlIG1hdGNoIG9wdGlvbnMuICovCisKK3N1Ym9wdGlvbnMgPSBvcHRpb25zICYgU1VCU1RJVFVURV9PUFRJT05TOworb3B0aW9ucyAmPSB+U1VCU1RJVFVURV9PUFRJT05TOworCisvKiBDb3B5IHVwIHRvIHRoZSBzdGFydCBvZmZzZXQgKi8KKworQ0hFQ0tNRU1DUFkoc3ViamVjdCwgc3RhcnRfb2Zmc2V0KTsKKworLyogTG9vcCBmb3IgZ2xvYmFsIHN1YnN0aXR1dGluZy4gKi8KKworc3VicyA9IDA7CitkbworICB7CisgIFBDUkUyX1NQVFIgcHRyc3RhY2tbUFRSX1NUQUNLX1NJWkVdOworICB1aW50MzJfdCBwdHJzdGFja3B0ciA9IDA7CisKKyAgcmMgPSBwY3JlMl9tYXRjaChjb2RlLCBzdWJqZWN0LCBsZW5ndGgsIHN0YXJ0X29mZnNldCwgb3B0aW9uc3xnb3B0aW9ucywKKyAgICBtYXRjaF9kYXRhLCBtY29udGV4dCk7CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgaWYgKHV0Zikgb3B0aW9ucyB8PSBQQ1JFMl9OT19VVEZfQ0hFQ0s7ICAvKiBPbmx5IG5lZWQgdG8gY2hlY2sgb25jZSAqLworI2VuZGlmCisKKyAgLyogQW55IGVycm9yIG90aGVyIHRoYW4gbm8gbWF0Y2ggcmV0dXJucyB0aGUgZXJyb3IgY29kZS4gTm8gbWF0Y2ggd2hlbiBub3QKKyAgZG9pbmcgdGhlIHNwZWNpYWwgYWZ0ZXItZW1wdHktbWF0Y2ggZ2xvYmFsIHJlbWF0Y2gsIG9yIHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUKKyAgc3ViamVjdCwgYnJlYWtzIHRoZSBnbG9iYWwgbG9vcC4gT3RoZXJ3aXNlLCBhZHZhbmNlIHRoZSBzdGFydGluZyBwb2ludCBieSBvbmUKKyAgY2hhcmFjdGVyLCBjb3B5aW5nIGl0IHRvIHRoZSBvdXRwdXQsIGFuZCB0cnkgYWdhaW4uICovCisKKyAgaWYgKHJjIDwgMCkKKyAgICB7CisgICAgUENSRTJfU0laRSBzYXZlX3N0YXJ0OworCisgICAgaWYgKHJjICE9IFBDUkUyX0VSUk9SX05PTUFUQ0gpIGdvdG8gRVhJVDsKKyAgICBpZiAoZ29wdGlvbnMgPT0gMCB8fCBzdGFydF9vZmZzZXQgPj0gbGVuZ3RoKSBicmVhazsKKworICAgIC8qIEFkdmFuY2UgYnkgb25lIGNvZGUgcG9pbnQuIFRoZW4sIGlmIENSTEYgaXMgYSB2YWxpZCBuZXdsaW5lIHNlcXVlbmNlIGFuZAorICAgIHdlIGhhdmUgYWR2YW5jZWQgaW50byB0aGUgbWlkZGxlIG9mIGl0LCBhZHZhbmNlIG9uZSBtb3JlIGNvZGUgcG9pbnQuIEluCisgICAgb3RoZXIgd29yZHMsIGRvIG5vdCBzdGFydCBpbiB0aGUgbWlkZGxlIG9mIENSTEYsIGV2ZW4gaWYgQ1IgYW5kIExGIG9uIHRoZWlyCisgICAgb3duIGFyZSB2YWxpZCBuZXdsaW5lcy4gKi8KKworICAgIHNhdmVfc3RhcnQgPSBzdGFydF9vZmZzZXQrKzsKKyAgICBpZiAoc3ViamVjdFtzdGFydF9vZmZzZXQtMV0gPT0gQ0hBUl9DUiAmJgorICAgICAgICBjb2RlLT5uZXdsaW5lX2NvbnZlbnRpb24gIT0gUENSRTJfTkVXTElORV9DUiAmJgorICAgICAgICBjb2RlLT5uZXdsaW5lX2NvbnZlbnRpb24gIT0gUENSRTJfTkVXTElORV9MRiAmJgorICAgICAgICBzdGFydF9vZmZzZXQgPCBsZW5ndGggJiYKKyAgICAgICAgc3ViamVjdFtzdGFydF9vZmZzZXRdID09IENIQVJfTEYpCisgICAgICBzdGFydF9vZmZzZXQrKzsKKworICAgIC8qIE90aGVyd2lzZSwgaW4gVVRGIG1vZGUsIGFkdmFuY2UgcGFzdCBhbnkgc2Vjb25kYXJ5IGNvZGUgcG9pbnRzLiAqLworCisgICAgZWxzZSBpZiAoKGNvZGUtPm92ZXJhbGxfb3B0aW9ucyAmIFBDUkUyX1VURikgIT0gMCkKKyAgICAgIHsKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorICAgICAgd2hpbGUgKHN0YXJ0X29mZnNldCA8IGxlbmd0aCAmJiAoc3ViamVjdFtzdGFydF9vZmZzZXRdICYgMHhjMCkgPT0gMHg4MCkKKyAgICAgICAgc3RhcnRfb2Zmc2V0Kys7CisjZWxpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gMTYKKyAgICAgIHdoaWxlIChzdGFydF9vZmZzZXQgPCBsZW5ndGggJiYKKyAgICAgICAgICAgIChzdWJqZWN0W3N0YXJ0X29mZnNldF0gJiAweGZjMDApID09IDB4ZGMwMCkKKyAgICAgICAgc3RhcnRfb2Zmc2V0Kys7CisjZW5kaWYKKyAgICAgIH0KKworICAgIC8qIENvcHkgd2hhdCB3ZSBoYXZlIGFkdmFuY2VkIHBhc3QsIHJlc2V0IHRoZSBzcGVjaWFsIGdsb2JhbCBvcHRpb25zLCBhbmQKKyAgICBjb250aW51ZSB0byB0aGUgbmV4dCBtYXRjaC4gKi8KKworICAgIGZyYWdsZW5ndGggPSBzdGFydF9vZmZzZXQgLSBzYXZlX3N0YXJ0OworICAgIENIRUNLTUVNQ1BZKHN1YmplY3QgKyBzYXZlX3N0YXJ0LCBmcmFnbGVuZ3RoKTsKKyAgICBnb3B0aW9ucyA9IDA7CisgICAgY29udGludWU7CisgICAgfQorCisgIC8qIEhhbmRsZSBhIHN1Y2Nlc3NmdWwgbWF0Y2guIE1hdGNoZXMgdGhhdCB1c2UgXEsgdG8gZW5kIGJlZm9yZSB0aGV5IHN0YXJ0CisgIGFyZSBub3Qgc3VwcG9ydGVkLiAqLworCisgIGlmIChvdmVjdG9yWzFdIDwgb3ZlY3RvclswXSkKKyAgICB7CisgICAgcmMgPSBQQ1JFMl9FUlJPUl9CQURTVUJTUEFUVEVSTjsKKyAgICBnb3RvIEVYSVQ7CisgICAgfQorCisgIC8qIENvdW50IHN1YnN0aXR1dGlvbnMgd2l0aCBhIHBhcmFub2lkIGNoZWNrIGZvciBpbnRlZ2VyIG92ZXJmbG93OyBzdXJlbHkgbm8KKyAgcmVhbCBjYWxsIHRvIHRoaXMgZnVuY3Rpb24gd291bGQgZXZlciBoaXQgdGhpcyEgKi8KKworICBpZiAoc3VicyA9PSBJTlRfTUFYKQorICAgIHsKKyAgICByYyA9IFBDUkUyX0VSUk9SX1RPT01BTllSRVBMQUNFOworICAgIGdvdG8gRVhJVDsKKyAgICB9CisgIHN1YnMrKzsKKworICAvKiBDb3B5IHRoZSB0ZXh0IGxlYWRpbmcgdXAgdG8gdGhlIG1hdGNoLiAqLworCisgIGlmIChyYyA9PSAwKSByYyA9IG92ZWN0b3JfY291bnQ7CisgIGZyYWdsZW5ndGggPSBvdmVjdG9yWzBdIC0gc3RhcnRfb2Zmc2V0OworICBDSEVDS01FTUNQWShzdWJqZWN0ICsgc3RhcnRfb2Zmc2V0LCBmcmFnbGVuZ3RoKTsKKworICAvKiBQcm9jZXNzIHRoZSByZXBsYWNlbWVudCBzdHJpbmcuIExpdGVyYWwgbW9kZSBpcyBzZXQgYnkgXFEsIGJ1dCBvbmx5IGluCisgIGV4dGVuZGVkIG1vZGUgd2hlbiBiYWNrc2xhc2hlcyBhcmUgYmVpbmcgaW50ZXJwcmV0ZWQuIEluIGV4dGVuZGVkIG1vZGUgd2UKKyAgbXVzdCBoYW5kbGUgbmVzdGVkIHN1YnN0cmluZ3MgdGhhdCBhcmUgdG8gYmUgcmVwcm9jZXNzZWQuICovCisKKyAgcHRyID0gcmVwbGFjZW1lbnQ7CisgIGZvciAoOzspCisgICAgeworICAgIHVpbnQzMl90IGNoOworICAgIHVuc2lnbmVkIGludCBjaGxlbjsKKworICAgIC8qIElmIGF0IHRoZSBlbmQgb2YgYSBuZXN0ZWQgc3Vic3RyaW5nLCBwb3AgdGhlIHN0YWNrLiAqLworCisgICAgaWYgKHB0ciA+PSByZXBlbmQpCisgICAgICB7CisgICAgICBpZiAocHRyc3RhY2twdHIgPD0gMCkgYnJlYWs7ICAgICAgIC8qIEVuZCBvZiByZXBsYWNlbWVudCBzdHJpbmcgKi8KKyAgICAgIHJlcGVuZCA9IHB0cnN0YWNrWy0tcHRyc3RhY2twdHJdOworICAgICAgcHRyID0gcHRyc3RhY2tbLS1wdHJzdGFja3B0cl07CisgICAgICBjb250aW51ZTsKKyAgICAgIH0KKworICAgIC8qIEhhbmRsZSB0aGUgbmV4dCBjaGFyYWN0ZXIgKi8KKworICAgIGlmIChsaXRlcmFsKQorICAgICAgeworICAgICAgaWYgKHB0clswXSA9PSBDSEFSX0JBQ0tTTEFTSCAmJiBwdHIgPCByZXBlbmQgLSAxICYmIHB0clsxXSA9PSBDSEFSX0UpCisgICAgICAgIHsKKyAgICAgICAgbGl0ZXJhbCA9IEZBTFNFOworICAgICAgICBwdHIgKz0gMjsKKyAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgIGdvdG8gTE9BRExJVEVSQUw7CisgICAgICB9CisKKyAgICAvKiBOb3QgaW4gbGl0ZXJhbCBtb2RlLiAqLworCisgICAgaWYgKCpwdHIgPT0gQ0hBUl9ET0xMQVJfU0lHTikKKyAgICAgIHsKKyAgICAgIGludCBncm91cCwgbjsKKyAgICAgIHVpbnQzMl90IHNwZWNpYWwgPSAwOworICAgICAgQk9PTCBpbnBhcmVuczsKKyAgICAgIEJPT0wgc3RhcjsKKyAgICAgIFBDUkUyX1NJWkUgc3VibGVuZ3RoOworICAgICAgUENSRTJfU1BUUiB0ZXh0MV9zdGFydCA9IE5VTEw7CisgICAgICBQQ1JFMl9TUFRSIHRleHQxX2VuZCA9IE5VTEw7CisgICAgICBQQ1JFMl9TUFRSIHRleHQyX3N0YXJ0ID0gTlVMTDsKKyAgICAgIFBDUkUyX1NQVFIgdGV4dDJfZW5kID0gTlVMTDsKKyAgICAgIFBDUkUyX1VDSEFSIG5leHQ7CisgICAgICBQQ1JFMl9VQ0hBUiBuYW1lWzMzXTsKKworICAgICAgaWYgKCsrcHRyID49IHJlcGVuZCkgZ290byBCQUQ7CisgICAgICBpZiAoKG5leHQgPSAqcHRyKSA9PSBDSEFSX0RPTExBUl9TSUdOKSBnb3RvIExPQURMSVRFUkFMOworCisgICAgICBncm91cCA9IC0xOworICAgICAgbiA9IDA7CisgICAgICBpbnBhcmVucyA9IEZBTFNFOworICAgICAgc3RhciA9IEZBTFNFOworCisgICAgICBpZiAobmV4dCA9PSBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCkKKyAgICAgICAgeworICAgICAgICBpZiAoKytwdHIgPj0gcmVwZW5kKSBnb3RvIEJBRDsKKyAgICAgICAgbmV4dCA9ICpwdHI7CisgICAgICAgIGlucGFyZW5zID0gVFJVRTsKKyAgICAgICAgfQorCisgICAgICBpZiAobmV4dCA9PSBDSEFSX0FTVEVSSVNLKQorICAgICAgICB7CisgICAgICAgIGlmICgrK3B0ciA+PSByZXBlbmQpIGdvdG8gQkFEOworICAgICAgICBuZXh0ID0gKnB0cjsKKyAgICAgICAgc3RhciA9IFRSVUU7CisgICAgICAgIH0KKworICAgICAgaWYgKCFzdGFyICYmIG5leHQgPj0gQ0hBUl8wICYmIG5leHQgPD0gQ0hBUl85KQorICAgICAgICB7CisgICAgICAgIGdyb3VwID0gbmV4dCAtIENIQVJfMDsKKyAgICAgICAgd2hpbGUgKCsrcHRyIDwgcmVwZW5kKQorICAgICAgICAgIHsKKyAgICAgICAgICBuZXh0ID0gKnB0cjsKKyAgICAgICAgICBpZiAobmV4dCA8IENIQVJfMCB8fCBuZXh0ID4gQ0hBUl85KSBicmVhazsKKyAgICAgICAgICBncm91cCA9IGdyb3VwICogMTAgKyBuZXh0IC0gQ0hBUl8wOworCisgICAgICAgICAgLyogQSBjaGVjayBmb3IgYSBudW1iZXIgZ3JlYXRlciB0aGFuIHRoZSBoaWdodGVzdCBjYXB0dXJlZCBncm91cAorICAgICAgICAgIGlzIHN1ZmZpY2llbnQgaGVyZTsgbm8gbmVlZCBmb3IgYSBzZXBhcmF0ZSBvdmVyZmxvdyBjaGVjay4gSWYgdW5rbm93bgorICAgICAgICAgIGdyb3VwcyBhcmUgdG8gYmUgdHJlYXRlZCBhcyB1bnNldCwganVzdCBza2lwIG92ZXIgYW55IHJlbWFpbmluZworICAgICAgICAgIGRpZ2l0cyBhbmQgY2Fycnkgb24uICovCisKKyAgICAgICAgICBpZiAoZ3JvdXAgPiBjb2RlLT50b3BfYnJhY2tldCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoc3Vib3B0aW9ucyAmIFBDUkUyX1NVQlNUSVRVVEVfVU5LTk9XTl9VTlNFVCkgIT0gMCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICB3aGlsZSAoKytwdHIgPCByZXBlbmQgJiYgKnB0ciA+PSBDSEFSXzAgJiYgKnB0ciA8PSBDSEFSXzkpOworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHJjID0gUENSRTJfRVJST1JfTk9TVUJTVFJJTkc7CisgICAgICAgICAgICAgIGdvdG8gUFRSRVhJVDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmN0eXBlcyA9IGNvZGUtPnRhYmxlcyArIGN0eXBlc19vZmZzZXQ7CisgICAgICAgIHdoaWxlIChNQVhfMjU1KG5leHQpICYmIChjdHlwZXNbbmV4dF0gJiBjdHlwZV93b3JkKSAhPSAwKQorICAgICAgICAgIHsKKyAgICAgICAgICBuYW1lW24rK10gPSBuZXh0OworICAgICAgICAgIGlmIChuID4gMzIpIGdvdG8gQkFEOworICAgICAgICAgIGlmICgrK3B0ciA+PSByZXBlbmQpIGJyZWFrOworICAgICAgICAgIG5leHQgPSAqcHRyOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKG4gPT0gMCkgZ290byBCQUQ7CisgICAgICAgIG5hbWVbbl0gPSAwOworICAgICAgICB9CisKKyAgICAgIC8qIEluIGV4dGVuZGVkIG1vZGUgd2UgcmVjb2duaXplICR7bmFtZTorc2V0IHRleHQ6dW5zZXQgdGV4dH0gYW5kCisgICAgICAke25hbWU6LWRlZmF1bHQgdGV4dH0uICovCisKKyAgICAgIGlmIChpbnBhcmVucykKKyAgICAgICAgeworICAgICAgICBpZiAoKHN1Ym9wdGlvbnMgJiBQQ1JFMl9TVUJTVElUVVRFX0VYVEVOREVEKSAhPSAwICYmCisgICAgICAgICAgICAgIXN0YXIgJiYgcHRyIDwgcmVwZW5kIC0gMiAmJiBuZXh0ID09IENIQVJfQ09MT04pCisgICAgICAgICAgeworICAgICAgICAgIHNwZWNpYWwgPSAqKCsrcHRyKTsKKyAgICAgICAgICBpZiAoc3BlY2lhbCAhPSBDSEFSX1BMVVMgJiYgc3BlY2lhbCAhPSBDSEFSX01JTlVTKQorICAgICAgICAgICAgeworICAgICAgICAgICAgcmMgPSBQQ1JFMl9FUlJPUl9CQURTVUJTVElUVVRJT047CisgICAgICAgICAgICBnb3RvIFBUUkVYSVQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICB0ZXh0MV9zdGFydCA9ICsrcHRyOworICAgICAgICAgIHJjID0gZmluZF90ZXh0X2VuZChjb2RlLCAmcHRyLCByZXBlbmQsIHNwZWNpYWwgPT0gQ0hBUl9NSU5VUyk7CisgICAgICAgICAgaWYgKHJjICE9IDApIGdvdG8gUFRSRVhJVDsKKyAgICAgICAgICB0ZXh0MV9lbmQgPSBwdHI7CisKKyAgICAgICAgICBpZiAoc3BlY2lhbCA9PSBDSEFSX1BMVVMgJiYgKnB0ciA9PSBDSEFSX0NPTE9OKQorICAgICAgICAgICAgeworICAgICAgICAgICAgdGV4dDJfc3RhcnQgPSArK3B0cjsKKyAgICAgICAgICAgIHJjID0gZmluZF90ZXh0X2VuZChjb2RlLCAmcHRyLCByZXBlbmQsIFRSVUUpOworICAgICAgICAgICAgaWYgKHJjICE9IDApIGdvdG8gUFRSRVhJVDsKKyAgICAgICAgICAgIHRleHQyX2VuZCA9IHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAocHRyID49IHJlcGVuZCB8fCAqcHRyICE9IENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHJjID0gUENSRTJfRVJST1JfUkVQTUlTU0lOR0JSQUNFOworICAgICAgICAgICAgZ290byBQVFJFWElUOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICBwdHIrKzsKKyAgICAgICAgfQorCisgICAgICAvKiBIYXZlIGZvdW5kIGEgc3ludGFjdGljYWxseSBjb3JyZWN0IGdyb3VwIG51bWJlciBvciBuYW1lLCBvciAqbmFtZS4KKyAgICAgIE9ubHkgKk1BUksgaXMgY3VycmVudGx5IHJlY29nbml6ZWQuICovCisKKyAgICAgIGlmIChzdGFyKQorICAgICAgICB7CisgICAgICAgIGlmIChQUklWKHN0cmNtcF9jOCkobmFtZSwgU1RSSU5HX01BUkspID09IDApCisgICAgICAgICAgeworICAgICAgICAgIFBDUkUyX1NQVFIgbWFyayA9IHBjcmUyX2dldF9tYXJrKG1hdGNoX2RhdGEpOworICAgICAgICAgIGlmIChtYXJrICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBQQ1JFMl9TUFRSIG1hcmtfc3RhcnQgPSBtYXJrOworICAgICAgICAgICAgd2hpbGUgKCptYXJrICE9IDApIG1hcmsrKzsKKyAgICAgICAgICAgIGZyYWdsZW5ndGggPSBtYXJrIC0gbWFya19zdGFydDsKKyAgICAgICAgICAgIENIRUNLTUVNQ1BZKG1hcmtfc3RhcnQsIGZyYWdsZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBnb3RvIEJBRDsKKyAgICAgICAgfQorCisgICAgICAvKiBTdWJzdGl0dXRlIHRoZSBjb250ZW50cyBvZiBhIGdyb3VwLiBXZSBkb24ndCB1c2Ugc3Vic3RyaW5nX2NvcHkKKyAgICAgIGZ1bmN0aW9ucyBhbnkgbW9yZSwgaW4gb3JkZXIgdG8gc3VwcG9ydCBjYXNlIGZvcmNpbmcuICovCisKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBQQ1JFMl9TUFRSIHN1YnB0ciwgc3VicHRyZW5kOworCisgICAgICAgIC8qIEZpbmQgYSBudW1iZXIgZm9yIGEgbmFtZWQgZ3JvdXAuIEluIGNhc2UgdGhlcmUgYXJlIGR1cGxpY2F0ZSBuYW1lcywKKyAgICAgICAgc2VhcmNoIGZvciB0aGUgZmlyc3Qgb25lIHRoYXQgaXMgc2V0LiBJZiB0aGUgbmFtZSBpcyBub3QgZm91bmQgd2hlbgorICAgICAgICBQQ1JFMl9TVUJTVElUVVRFX1VOS05PV05fRU1QVFkgaXMgc2V0LCBzZXQgdGhlIGdyb3VwIG51bWJlciB0byBhCisgICAgICAgIG5vbi1leGlzdGVudCBncm91cC4gKi8KKworICAgICAgICBpZiAoZ3JvdXAgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICBQQ1JFMl9TUFRSIGZpcnN0LCBsYXN0LCBlbnRyeTsKKyAgICAgICAgICByYyA9IHBjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2Nhbihjb2RlLCBuYW1lLCAmZmlyc3QsICZsYXN0KTsKKyAgICAgICAgICBpZiAocmMgPT0gUENSRTJfRVJST1JfTk9TVUJTVFJJTkcgJiYKKyAgICAgICAgICAgICAgKHN1Ym9wdGlvbnMgJiBQQ1JFMl9TVUJTVElUVVRFX1VOS05PV05fVU5TRVQpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBncm91cCA9IGNvZGUtPnRvcF9icmFja2V0ICsgMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAocmMgPCAwKSBnb3RvIFBUUkVYSVQ7CisgICAgICAgICAgICBmb3IgKGVudHJ5ID0gZmlyc3Q7IGVudHJ5IDw9IGxhc3Q7IGVudHJ5ICs9IHJjKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHVpbnQzMl90IG5nID0gR0VUMihlbnRyeSwgMCk7CisgICAgICAgICAgICAgIGlmIChuZyA8IG92ZWN0b3JfY291bnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChncm91cCA8IDApIGdyb3VwID0gbmc7ICAgICAgICAgIC8qIEZpcnN0IGluIG92ZWN0b3IgKi8KKyAgICAgICAgICAgICAgICBpZiAob3ZlY3RvcltuZyoyXSAhPSBQQ1JFMl9VTlNFVCkKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGdyb3VwID0gbmc7ICAgICAgICAgICAgICAgICAgICAgICAvKiBGaXJzdCB0aGF0IGlzIHNldCAqLworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIElmIGdyb3VwIGlzIHN0aWxsIG5lZ2F0aXZlLCBpdCBtZWFucyB3ZSBkaWQgbm90IGZpbmQgYSBncm91cAorICAgICAgICAgICAgdGhhdCBpcyBpbiB0aGUgb3ZlY3Rvci4gSnVzdCBzZXQgdGhlIGZpcnN0IGdyb3VwLiAqLworCisgICAgICAgICAgICBpZiAoZ3JvdXAgPCAwKSBncm91cCA9IEdFVDIoZmlyc3QsIDApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAvKiBXZSBub3cgaGF2ZSBhIGdyb3VwIHRoYXQgaXMgaWRlbnRpZmllZCBieSBudW1iZXIuIEZpbmQgdGhlIGxlbmd0aCBvZgorICAgICAgICB0aGUgY2FwdHVyZWQgc3RyaW5nLiBJZiBhIGdyb3VwIGluIGEgbm9uLXNwZWNpYWwgc3Vic3RpdHV0aW9uIGlzIHVuc2V0CisgICAgICAgIHdoZW4gUENSRTJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWSBpcyBzZXQsIHN1YnN0aXR1dGUgbm90aGluZy4gKi8KKworICAgICAgICByYyA9IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIobWF0Y2hfZGF0YSwgZ3JvdXAsICZzdWJsZW5ndGgpOworICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAocmMgPT0gUENSRTJfRVJST1JfTk9TVUJTVFJJTkcgJiYKKyAgICAgICAgICAgICAgKHN1Ym9wdGlvbnMgJiBQQ1JFMl9TVUJTVElUVVRFX1VOS05PV05fVU5TRVQpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICByYyA9IFBDUkUyX0VSUk9SX1VOU0VUOworICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChyYyAhPSBQQ1JFMl9FUlJPUl9VTlNFVCkgZ290byBQVFJFWElUOyAgLyogTm9uLXVuc2V0IGVycm9ycyAqLworICAgICAgICAgIGlmIChzcGVjaWFsID09IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGxhaW4gc3Vic3RpdHV0aW9uICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZiAoKHN1Ym9wdGlvbnMgJiBQQ1JFMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZKSAhPSAwKSBjb250aW51ZTsKKyAgICAgICAgICAgIGdvdG8gUFRSRVhJVDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVsc2UgZXJyb3IgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgLyogSWYgc3BlY2lhbCBpcyAnKycgd2UgaGF2ZSBhICdzZXQnIGFuZCBwb3NzaWJseSBhbiAndW5zZXQnIHRleHQsCisgICAgICAgIGJvdGggb2Ygd2hpY2ggYXJlIHJlcHJvY2Vzc2VkIHdoZW4gdXNlZC4gSWYgc3BlY2lhbCBpcyAnLScgd2UgaGF2ZSBhCisgICAgICAgIGRlZmF1bHQgdGV4dCBmb3Igd2hlbiB0aGUgZ3JvdXAgaXMgdW5zZXQ7IGl0IG11c3QgYmUgcmVwcm9jZXNzZWQuICovCisKKyAgICAgICAgaWYgKHNwZWNpYWwgIT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgaWYgKHNwZWNpYWwgPT0gQ0hBUl9NSU5VUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyYyA9PSAwKSBnb3RvIExJVEVSQUxfU1VCU1RJVFVURTsKKyAgICAgICAgICAgIHRleHQyX3N0YXJ0ID0gdGV4dDFfc3RhcnQ7CisgICAgICAgICAgICB0ZXh0Ml9lbmQgPSB0ZXh0MV9lbmQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAocHRyc3RhY2twdHIgPj0gUFRSX1NUQUNLX1NJWkUpIGdvdG8gQkFEOworICAgICAgICAgIHB0cnN0YWNrW3B0cnN0YWNrcHRyKytdID0gcHRyOworICAgICAgICAgIHB0cnN0YWNrW3B0cnN0YWNrcHRyKytdID0gcmVwZW5kOworCisgICAgICAgICAgaWYgKHJjID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBwdHIgPSB0ZXh0MV9zdGFydDsKKyAgICAgICAgICAgIHJlcGVuZCA9IHRleHQxX2VuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICBwdHIgPSB0ZXh0Ml9zdGFydDsKKyAgICAgICAgICAgIHJlcGVuZCA9IHRleHQyX2VuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogT3RoZXJ3aXNlIHdlIGhhdmUgYSBsaXRlcmFsIHN1YnN0aXR1dGlvbiBvZiBhIGdyb3VwJ3MgY29udGVudHMuICovCisKKyAgICAgICAgTElURVJBTF9TVUJTVElUVVRFOgorICAgICAgICBzdWJwdHIgPSBzdWJqZWN0ICsgb3ZlY3Rvcltncm91cCoyXTsKKyAgICAgICAgc3VicHRyZW5kID0gc3ViamVjdCArIG92ZWN0b3JbZ3JvdXAqMiArIDFdOworCisgICAgICAgIC8qIFN1YnN0aXR1dGUgYSBsaXRlcmFsIHN0cmluZywgcG9zc2libHkgZm9yY2luZyBhbHBoYWJldGljIGNhc2UuICovCisKKyAgICAgICAgd2hpbGUgKHN1YnB0ciA8IHN1YnB0cmVuZCkKKyAgICAgICAgICB7CisgICAgICAgICAgR0VUQ0hBUklOQ1RFU1QoY2gsIHN1YnB0cik7CisgICAgICAgICAgaWYgKGZvcmNlY2FzZSAhPSAwKQorICAgICAgICAgICAgeworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgICAgICAgICAgaWYgKHV0ZikKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICB1aW50MzJfdCB0eXBlID0gVUNEX0NIQVJUWVBFKGNoKTsKKyAgICAgICAgICAgICAgaWYgKFBSSVYodWNwX2dlbnR5cGUpW3R5cGVdID09IHVjcF9MICYmCisgICAgICAgICAgICAgICAgICB0eXBlICE9ICgoZm9yY2VjYXNlID4gMCk/IHVjcF9MdSA6IHVjcF9MbCkpCisgICAgICAgICAgICAgICAgY2ggPSBVQ0RfT1RIRVJDQVNFKGNoKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKCgoY29kZS0+dGFibGVzICsgY2JpdHNfb2Zmc2V0ICsKKyAgICAgICAgICAgICAgICAgICgoZm9yY2VjYXNlID4gMCk/IGNiaXRfdXBwZXI6Y2JpdF9sb3dlcikKKyAgICAgICAgICAgICAgICAgIClbY2gvOF0gJiAoMSA8PCAoY2glOCkpKSA9PSAwKQorICAgICAgICAgICAgICAgIGNoID0gKGNvZGUtPnRhYmxlcyArIGZjY19vZmZzZXQpW2NoXTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yY2VjYXNlID0gZm9yY2VjYXNlcmVzZXQ7CisgICAgICAgICAgICB9CisKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICAgICAgICBpZiAodXRmKSBjaGxlbiA9IFBSSVYob3JkMnV0ZikoY2gsIHRlbXApOyBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIHRlbXBbMF0gPSBjaDsKKyAgICAgICAgICAgIGNobGVuID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICBDSEVDS01FTUNQWSh0ZW1wLCBjaGxlbik7CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAvKiBIYW5kbGUgYW4gZXNjYXBlIHNlcXVlbmNlIGluIGV4dGVuZGVkIG1vZGUuIFdlIGNhbiB1c2UgY2hlY2tfZXNjYXBlKCkKKyAgICB0byBwcm9jZXNzIFxRLCBcRSwgXGMsIFxvLCBceCBhbmQgXCBmb2xsb3dlZCBieSBub24tYWxwaGFudW1lcmljcywgYnV0CisgICAgdGhlIGNhc2UtZm9yY2luZyBlc2NhcGVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHBjcmUyX2NvbXBpbGUoKSBzbyBtdXN0IGJlCisgICAgcmVjb2duaXplZCBoZXJlLiAqLworCisgICAgZWxzZSBpZiAoKHN1Ym9wdGlvbnMgJiBQQ1JFMl9TVUJTVElUVVRFX0VYVEVOREVEKSAhPSAwICYmCisgICAgICAgICAgICAgICpwdHIgPT0gQ0hBUl9CQUNLU0xBU0gpCisgICAgICB7CisgICAgICBpbnQgZXJyb3Jjb2RlID0gMDsKKworICAgICAgaWYgKHB0ciA8IHJlcGVuZCAtIDEpIHN3aXRjaCAocHRyWzFdKQorICAgICAgICB7CisgICAgICAgIGNhc2UgQ0hBUl9MOgorICAgICAgICBmb3JjZWNhc2UgPSBmb3JjZWNhc2VyZXNldCA9IC0xOworICAgICAgICBwdHIgKz0gMjsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY2FzZSBDSEFSX2w6CisgICAgICAgIGZvcmNlY2FzZSA9IC0xOworICAgICAgICBmb3JjZWNhc2VyZXNldCA9IDA7CisgICAgICAgIHB0ciArPSAyOworICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjYXNlIENIQVJfVToKKyAgICAgICAgZm9yY2VjYXNlID0gZm9yY2VjYXNlcmVzZXQgPSAxOworICAgICAgICBwdHIgKz0gMjsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY2FzZSBDSEFSX3U6CisgICAgICAgIGZvcmNlY2FzZSA9IDE7CisgICAgICAgIGZvcmNlY2FzZXJlc2V0ID0gMDsKKyAgICAgICAgcHRyICs9IDI7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgIHJjID0gUFJJVihjaGVja19lc2NhcGUpKCZwdHIsIHJlcGVuZCwgJmNoLCAmZXJyb3Jjb2RlLAorICAgICAgICBjb2RlLT5vdmVyYWxsX29wdGlvbnMsIEZBTFNFLCBOVUxMKTsKKyAgICAgIGlmIChlcnJvcmNvZGUgIT0gMCkgZ290byBCQURFU0NBUEU7CisgICAgICBwdHIrKzsKKworICAgICAgc3dpdGNoKHJjKQorICAgICAgICB7CisgICAgICAgIGNhc2UgRVNDX0U6CisgICAgICAgIGZvcmNlY2FzZSA9IGZvcmNlY2FzZXJlc2V0ID0gMDsKKyAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY2FzZSBFU0NfUToKKyAgICAgICAgbGl0ZXJhbCA9IFRSVUU7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNhc2UgMDogICAgICAvKiBEYXRhIGNoYXJhY3RlciAqLworICAgICAgICBnb3RvIExJVEVSQUw7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgZ290byBCQURFU0NBUEU7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIC8qIEhhbmRsZSBhIGxpdGVyYWwgY29kZSB1bml0ICovCisKKyAgICBlbHNlCisgICAgICB7CisgICAgICBMT0FETElURVJBTDoKKyAgICAgIEdFVENIQVJJTkNURVNUKGNoLCBwdHIpOyAgICAvKiBHZXQgY2hhcmFjdGVyIHZhbHVlLCBpbmNyZW1lbnQgcG9pbnRlciAqLworCisgICAgICBMSVRFUkFMOgorICAgICAgaWYgKGZvcmNlY2FzZSAhPSAwKQorICAgICAgICB7CisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgeworICAgICAgICAgIHVpbnQzMl90IHR5cGUgPSBVQ0RfQ0hBUlRZUEUoY2gpOworICAgICAgICAgIGlmIChQUklWKHVjcF9nZW50eXBlKVt0eXBlXSA9PSB1Y3BfTCAmJgorICAgICAgICAgICAgICB0eXBlICE9ICgoZm9yY2VjYXNlID4gMCk/IHVjcF9MdSA6IHVjcF9MbCkpCisgICAgICAgICAgICBjaCA9IFVDRF9PVEhFUkNBU0UoY2gpOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgeworICAgICAgICAgIGlmICgoKGNvZGUtPnRhYmxlcyArIGNiaXRzX29mZnNldCArCisgICAgICAgICAgICAgICgoZm9yY2VjYXNlID4gMCk/IGNiaXRfdXBwZXI6Y2JpdF9sb3dlcikKKyAgICAgICAgICAgICAgKVtjaC84XSAmICgxIDw8IChjaCU4KSkpID09IDApCisgICAgICAgICAgICBjaCA9IChjb2RlLT50YWJsZXMgKyBmY2Nfb2Zmc2V0KVtjaF07CisgICAgICAgICAgfQorICAgICAgICBmb3JjZWNhc2UgPSBmb3JjZWNhc2VyZXNldDsKKyAgICAgICAgfQorCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgICAgICBpZiAodXRmKSBjaGxlbiA9IFBSSVYob3JkMnV0ZikoY2gsIHRlbXApOyBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICB0ZW1wWzBdID0gY2g7CisgICAgICAgIGNobGVuID0gMTsKKyAgICAgICAgfQorICAgICAgQ0hFQ0tNRU1DUFkodGVtcCwgY2hsZW4pOworICAgICAgfSAvKiBFbmQgaGFuZGxpbmcgYSBsaXRlcmFsIGNvZGUgdW5pdCAqLworICAgIH0gICAvKiBFbmQgb2YgbG9vcCBmb3Igc2Nhbm5pbmcgdGhlIHJlcGxhY2VtZW50LiAqLworCisgIC8qIFRoZSByZXBsYWNlbWVudCBoYXMgYmVlbiBjb3BpZWQgdG8gdGhlIG91dHB1dC4gVXBkYXRlIHRoZSBzdGFydCBvZmZzZXQgdG8KKyAgcG9pbnQgdG8gdGhlIHJlc3Qgb2YgdGhlIHN1YmplY3Qgc3RyaW5nLiBJZiB3ZSBtYXRjaGVkIGFuIGVtcHR5IHN0cmluZywKKyAgZG8gdGhlIG1hZ2ljIGZvciBnbG9iYWwgbWF0Y2hlcy4gKi8KKworICBzdGFydF9vZmZzZXQgPSBvdmVjdG9yWzFdOworICBnb3B0aW9ucyA9IChvdmVjdG9yWzBdICE9IG92ZWN0b3JbMV0pPyAwIDoKKyAgICBQQ1JFMl9BTkNIT1JFRHxQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUOworICB9IHdoaWxlICgoc3Vib3B0aW9ucyAmIFBDUkUyX1NVQlNUSVRVVEVfR0xPQkFMKSAhPSAwKTsgIC8qIFJlcGVhdCAiZG8iIGxvb3AgKi8KKworLyogQ29weSB0aGUgcmVzdCBvZiB0aGUgc3ViamVjdC4gKi8KKworZnJhZ2xlbmd0aCA9IGxlbmd0aCAtIHN0YXJ0X29mZnNldDsKK0NIRUNLTUVNQ1BZKHN1YmplY3QgKyBzdGFydF9vZmZzZXQsIGZyYWdsZW5ndGgpOwordGVtcFswXSA9IDA7CitDSEVDS01FTUNQWSh0ZW1wICwgMSk7CisKKy8qIElmIG92ZXJmbG93ZWQgaXMgc2V0IGl0IG1lYW5zIHRoZSBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCBpcyBzZXQsCithbmQgbWF0Y2hpbmcgaGFzIGNhcnJpZWQgb24gYWZ0ZXIgYSBmdWxsIGJ1ZmZlciwgaW4gb3JkZXIgdG8gY29tcHV0ZSB0aGUgbGVuZ3RoCituZWVkZWQuIE90aGVyd2lzZSwgYW4gb3ZlcmZsb3cgZ2VuZXJhdGVzIGFuIGltbWVkaWF0ZSBlcnJvciByZXR1cm4uICovCisKK2lmIChvdmVyZmxvd2VkKQorICB7CisgIHJjID0gUENSRTJfRVJST1JfTk9NRU1PUlk7CisgICpibGVuZ3RoID0gYnVmZl9sZW5ndGggKyBleHRyYV9uZWVkZWQ7CisgIH0KKworLyogQWZ0ZXIgYSBzdWNjZXNzZnVsIGV4ZWN1dGlvbiwgcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucyBhbmQgc2V0IHRoZQorbGVuZ3RoIG9mIGJ1ZmZlciB1c2VkLCBleGNsdWRpbmcgdGhlIHRyYWlsaW5nIHplcm8uICovCisKK2Vsc2UKKyAgeworICByYyA9IHN1YnM7CisgICpibGVuZ3RoID0gYnVmZl9vZmZzZXQgLSAxOworICB9CisKK0VYSVQ6CitpZiAobWF0Y2hfZGF0YV9jcmVhdGVkKSBwY3JlMl9tYXRjaF9kYXRhX2ZyZWUobWF0Y2hfZGF0YSk7CisgIGVsc2UgbWF0Y2hfZGF0YS0+cmMgPSByYzsKK3JldHVybiByYzsKKworTk9ST09NOgorcmMgPSBQQ1JFMl9FUlJPUl9OT01FTU9SWTsKK2dvdG8gRVhJVDsKKworQkFEOgorcmMgPSBQQ1JFMl9FUlJPUl9CQURSRVBMQUNFTUVOVDsKK2dvdG8gUFRSRVhJVDsKKworQkFERVNDQVBFOgorcmMgPSBQQ1JFMl9FUlJPUl9CQURSRVBFU0NBUEU7CisKK1BUUkVYSVQ6CisqYmxlbmd0aCA9IChQQ1JFMl9TSVpFKShwdHIgLSByZXBsYWNlbWVudCk7Citnb3RvIEVYSVQ7Cit9CisKKy8qIEVuZCBvZiBwY3JlMl9zdWJzdGl0dXRlLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMl9zdWJzdHJpbmcuYyBiL2Rpc3QyL3NyYy9wY3JlMl9zdWJzdHJpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGI1MDRkCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3BjcmUyX3N1YnN0cmluZy5jCkBAIC0wLDAgKzEsNTM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weSBuYW1lZCBjYXB0dXJlZCBzdHJpbmcgdG8gZ2l2ZW4gYnVmZmVyICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiBjb3BpZXMgYSBzaW5nbGUgY2FwdHVyZWQgc3Vic3RyaW5nIGludG8gYSBnaXZlbiBidWZmZXIsCitpZGVudGlmeWluZyBpdCBieSBuYW1lLiBJZiB0aGUgcmVnZXggcGVybWl0cyBkdXBsaWNhdGUgbmFtZXMsIHRoZSBmaXJzdAorc3Vic3RyaW5nIHRoYXQgaXMgc2V0IGlzIGNob3Nlbi4KKworQXJndW1lbnRzOgorICBtYXRjaF9kYXRhICAgICBwb2ludHMgdG8gdGhlIG1hdGNoIGRhdGEKKyAgc3RyaW5nbmFtZSAgICAgdGhlIG5hbWUgb2YgdGhlIHJlcXVpcmVkIHN1YnN0cmluZworICBidWZmZXIgICAgICAgICB3aGVyZSB0byBwdXQgdGhlIHN1YnN0cmluZworICBzaXplcHRyICAgICAgICB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLCB1cGRhdGVkIHRvIHRoZSBzaXplIG9mIHRoZSBzdWJzdHJpbmcKKworUmV0dXJuczogICAgICAgICBpZiBzdWNjZXNzZnVsOiB6ZXJvCisgICAgICAgICAgICAgICAgIGlmIG5vdCBzdWNjZXNzZnVsLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGU6CisgICAgICAgICAgICAgICAgICAgKDEpIGFuIGVycm9yIGZyb20gbmFtZXRhYmxlX3NjYW4oKQorICAgICAgICAgICAgICAgICAgICgyKSBhbiBlcnJvciBmcm9tIGNvcHlfYnludW1iZXIoKQorICAgICAgICAgICAgICAgICAgICgzKSBQQ1JFMl9FUlJPUl9VTkFWQUlMQUJMRTogbm8gZ3JvdXAgaXMgaW4gb3ZlY3RvcgorICAgICAgICAgICAgICAgICAgICg0KSBQQ1JFMl9FUlJPUl9VTlNFVDogYWxsIG5hbWVkIGdyb3VwcyBpbiBvdmVjdG9yIGFyZSB1bnNldAorKi8KKworUENSRTJfRVhQX0RFRk4gaW50IFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lKHBjcmUyX21hdGNoX2RhdGEgKm1hdGNoX2RhdGEsIFBDUkUyX1NQVFIgc3RyaW5nbmFtZSwKKyAgUENSRTJfVUNIQVIgKmJ1ZmZlciwgUENSRTJfU0laRSAqc2l6ZXB0cikKK3sKK1BDUkUyX1NQVFIgZmlyc3QsIGxhc3QsIGVudHJ5OworaW50IGZhaWxyYywgZW50cnlzaXplOworaWYgKG1hdGNoX2RhdGEtPm1hdGNoZWRieSA9PSBQQ1JFMl9NQVRDSEVEQllfREZBX0lOVEVSUFJFVEVSKQorICByZXR1cm4gUENSRTJfRVJST1JfREZBX1VGVU5DOworZW50cnlzaXplID0gcGNyZTJfc3Vic3RyaW5nX25hbWV0YWJsZV9zY2FuKG1hdGNoX2RhdGEtPmNvZGUsIHN0cmluZ25hbWUsCisgICZmaXJzdCwgJmxhc3QpOworaWYgKGVudHJ5c2l6ZSA8IDApIHJldHVybiBlbnRyeXNpemU7CitmYWlscmMgPSBQQ1JFMl9FUlJPUl9VTkFWQUlMQUJMRTsKK2ZvciAoZW50cnkgPSBmaXJzdDsgZW50cnkgPD0gbGFzdDsgZW50cnkgKz0gZW50cnlzaXplKQorICB7CisgIHVpbnQzMl90IG4gPSBHRVQyKGVudHJ5LCAwKTsKKyAgaWYgKG4gPCBtYXRjaF9kYXRhLT5vdmVjY291bnQpCisgICAgeworICAgIGlmIChtYXRjaF9kYXRhLT5vdmVjdG9yW24qMl0gIT0gUENSRTJfVU5TRVQpCisgICAgICByZXR1cm4gcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXIobWF0Y2hfZGF0YSwgbiwgYnVmZmVyLCBzaXplcHRyKTsKKyAgICBmYWlscmMgPSBQQ1JFMl9FUlJPUl9VTlNFVDsKKyAgICB9CisgIH0KK3JldHVybiBmYWlscmM7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgQ29weSBudW1iZXJlZCBjYXB0dXJlZCBzdHJpbmcgdG8gZ2l2ZW4gYnVmZmVyICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gY29waWVzIGEgc2luZ2xlIGNhcHR1cmVkIHN1YnN0cmluZyBpbnRvIGEgZ2l2ZW4gYnVmZmVyLAoraWRlbnRpZnlpbmcgaXQgYnkgbnVtYmVyLgorCitBcmd1bWVudHM6CisgIG1hdGNoX2RhdGEgICAgIHBvaW50cyB0byB0aGUgbWF0Y2ggZGF0YQorICBzdHJpbmdudW1iZXIgICB0aGUgbnVtYmVyIG9mIHRoZSByZXF1aXJlZCBzdWJzdHJpbmcKKyAgYnVmZmVyICAgICAgICAgd2hlcmUgdG8gcHV0IHRoZSBzdWJzdHJpbmcKKyAgc2l6ZXB0ciAgICAgICAgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciwgdXBkYXRlZCB0byB0aGUgc2l6ZSBvZiB0aGUgc3Vic3RyaW5nCisKK1JldHVybnM6ICAgICAgICAgaWYgc3VjY2Vzc2Z1bDogMAorICAgICAgICAgICAgICAgICBpZiBub3Qgc3VjY2Vzc2Z1bCwgYSBuZWdhdGl2ZSBlcnJvciBjb2RlOgorICAgICAgICAgICAgICAgICAgIFBDUkUyX0VSUk9SX05PTUVNT1JZOiBidWZmZXIgdG9vIHNtYWxsCisgICAgICAgICAgICAgICAgICAgUENSRTJfRVJST1JfTk9TVUJTVFJJTkc6IG5vIHN1Y2ggc3Vic3RyaW5nCisgICAgICAgICAgICAgICAgICAgUENSRTJfRVJST1JfVU5BVkFJTEFCTEU6IG92ZWN0b3IgdG9vIHNtYWxsCisgICAgICAgICAgICAgICAgICAgUENSRTJfRVJST1JfVU5TRVQ6IHN1YnN0cmluZyBpcyBub3Qgc2V0CisqLworCitQQ1JFMl9FWFBfREVGTiBpbnQgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLAorICB1aW50MzJfdCBzdHJpbmdudW1iZXIsIFBDUkUyX1VDSEFSICpidWZmZXIsIFBDUkUyX1NJWkUgKnNpemVwdHIpCit7CitpbnQgcmM7CitQQ1JFMl9TSVpFIHNpemU7CityYyA9IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIobWF0Y2hfZGF0YSwgc3RyaW5nbnVtYmVyLCAmc2l6ZSk7CitpZiAocmMgPCAwKSByZXR1cm4gcmM7CitpZiAoc2l6ZSArIDEgPiAqc2l6ZXB0cikgcmV0dXJuIFBDUkUyX0VSUk9SX05PTUVNT1JZOworbWVtY3B5KGJ1ZmZlciwgbWF0Y2hfZGF0YS0+c3ViamVjdCArIG1hdGNoX2RhdGEtPm92ZWN0b3Jbc3RyaW5nbnVtYmVyKjJdLAorICBDVTJCWVRFUyhzaXplKSk7CitidWZmZXJbc2l6ZV0gPSAwOworKnNpemVwdHIgPSBzaXplOworcmV0dXJuIDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICBFeHRyYWN0IG5hbWVkIGNhcHR1cmVkIHN0cmluZyAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gY29waWVzIGEgc2luZ2xlIGNhcHR1cmVkIHN1YnN0cmluZywgaWRlbnRpZmllZCBieSBuYW1lLCBpbnRvCituZXcgbWVtb3J5LiBJZiB0aGUgcmVnZXggcGVybWl0cyBkdXBsaWNhdGUgbmFtZXMsIHRoZSBmaXJzdCBzdWJzdHJpbmcgdGhhdCBpcworc2V0IGlzIGNob3Nlbi4KKworQXJndW1lbnRzOgorICBtYXRjaF9kYXRhICAgICBwb2ludGVyIHRvIG1hdGNoX2RhdGEKKyAgc3RyaW5nbmFtZSAgICAgdGhlIG5hbWUgb2YgdGhlIHJlcXVpcmVkIHN1YnN0cmluZworICBzdHJpbmdwdHIgICAgICB3aGVyZSB0byBwdXQgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBtZW1vcnkKKyAgc2l6ZXB0ciAgICAgICAgd2hlcmUgdG8gcHV0IHRoZSBsZW5ndGggb2YgdGhlIHN1YnN0cmluZworCitSZXR1cm5zOiAgICAgICAgIGlmIHN1Y2Nlc3NmdWw6IHplcm8KKyAgICAgICAgICAgICAgICAgaWYgbm90IHN1Y2Nlc3NmdWwsIGEgbmVnYXRpdmUgdmFsdWU6CisgICAgICAgICAgICAgICAgICAgKDEpIGFuIGVycm9yIGZyb20gbmFtZXRhYmxlX3NjYW4oKQorICAgICAgICAgICAgICAgICAgICgyKSBhbiBlcnJvciBmcm9tIGdldF9ieW51bWJlcigpCisgICAgICAgICAgICAgICAgICAgKDMpIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFOiBubyBncm91cCBpcyBpbiBvdmVjdG9yCisgICAgICAgICAgICAgICAgICAgKDQpIFBDUkUyX0VSUk9SX1VOU0VUOiBhbGwgbmFtZWQgZ3JvdXBzIGluIG92ZWN0b3IgYXJlIHVuc2V0CisqLworCitQQ1JFMl9FWFBfREVGTiBpbnQgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZShwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLAorICBQQ1JFMl9TUFRSIHN0cmluZ25hbWUsIFBDUkUyX1VDSEFSICoqc3RyaW5ncHRyLCBQQ1JFMl9TSVpFICpzaXplcHRyKQoreworUENSRTJfU1BUUiBmaXJzdCwgbGFzdCwgZW50cnk7CitpbnQgZmFpbHJjLCBlbnRyeXNpemU7CitpZiAobWF0Y2hfZGF0YS0+bWF0Y2hlZGJ5ID09IFBDUkUyX01BVENIRURCWV9ERkFfSU5URVJQUkVURVIpCisgIHJldHVybiBQQ1JFMl9FUlJPUl9ERkFfVUZVTkM7CitlbnRyeXNpemUgPSBwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4obWF0Y2hfZGF0YS0+Y29kZSwgc3RyaW5nbmFtZSwKKyAgJmZpcnN0LCAmbGFzdCk7CitpZiAoZW50cnlzaXplIDwgMCkgcmV0dXJuIGVudHJ5c2l6ZTsKK2ZhaWxyYyA9IFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFOworZm9yIChlbnRyeSA9IGZpcnN0OyBlbnRyeSA8PSBsYXN0OyBlbnRyeSArPSBlbnRyeXNpemUpCisgIHsKKyAgdWludDMyX3QgbiA9IEdFVDIoZW50cnksIDApOworICBpZiAobiA8IG1hdGNoX2RhdGEtPm92ZWNjb3VudCkKKyAgICB7CisgICAgaWYgKG1hdGNoX2RhdGEtPm92ZWN0b3JbbioyXSAhPSBQQ1JFMl9VTlNFVCkKKyAgICAgIHJldHVybiBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyKG1hdGNoX2RhdGEsIG4sIHN0cmluZ3B0ciwgc2l6ZXB0cik7CisgICAgZmFpbHJjID0gUENSRTJfRVJST1JfVU5TRVQ7CisgICAgfQorICB9CityZXR1cm4gZmFpbHJjOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBFeHRyYWN0IGNhcHR1cmVkIHN0cmluZyB0byBuZXcgbWVtb3J5ICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGNvcGllcyBhIHNpbmdsZSBjYXB0dXJlZCBzdWJzdHJpbmcgaW50byBhIHBpZWNlIG9mIG5ldworbWVtb3J5LgorCitBcmd1bWVudHM6CisgIG1hdGNoX2RhdGEgICAgIHBvaW50cyB0byBtYXRjaCBkYXRhCisgIHN0cmluZ251bWJlciAgIHRoZSBudW1iZXIgb2YgdGhlIHJlcXVpcmVkIHN1YnN0cmluZworICBzdHJpbmdwdHIgICAgICB3aGVyZSB0byBwdXQgYSBwb2ludGVyIHRvIHRoZSBuZXcgbWVtb3J5CisgIHNpemVwdHIgICAgICAgIHdoZXJlIHRvIHB1dCB0aGUgc2l6ZSBvZiB0aGUgc3Vic3RyaW5nCisKK1JldHVybnM6ICAgICAgICAgaWYgc3VjY2Vzc2Z1bDogMAorICAgICAgICAgICAgICAgICBpZiBub3Qgc3VjY2Vzc2Z1bCwgYSBuZWdhdGl2ZSBlcnJvciBjb2RlOgorICAgICAgICAgICAgICAgICAgIFBDUkUyX0VSUk9SX05PTUVNT1JZOiBmYWlsZWQgdG8gZ2V0IG1lbW9yeQorICAgICAgICAgICAgICAgICAgIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HOiBubyBzdWNoIHN1YnN0cmluZworICAgICAgICAgICAgICAgICAgIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFOiBvdmVjdG9yIHRvbyBzbWFsbAorICAgICAgICAgICAgICAgICAgIFBDUkUyX0VSUk9SX1VOU0VUOiBzdWJzdHJpbmcgaXMgbm90IHNldAorKi8KKworUENSRTJfRVhQX0RFRk4gaW50IFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcihwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLAorICB1aW50MzJfdCBzdHJpbmdudW1iZXIsIFBDUkUyX1VDSEFSICoqc3RyaW5ncHRyLCBQQ1JFMl9TSVpFICpzaXplcHRyKQoreworaW50IHJjOworUENSRTJfU0laRSBzaXplOworUENSRTJfVUNIQVIgKnlpZWxkOworcmMgPSBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyKG1hdGNoX2RhdGEsIHN0cmluZ251bWJlciwgJnNpemUpOworaWYgKHJjIDwgMCkgcmV0dXJuIHJjOworeWllbGQgPSBQUklWKG1lbWN0bF9tYWxsb2MpKHNpemVvZihwY3JlMl9tZW1jdGwpICsKKyAgKHNpemUgKyAxKSpQQ1JFMl9DT0RFX1VOSVRfV0lEVEgsIChwY3JlMl9tZW1jdGwgKiltYXRjaF9kYXRhKTsKK2lmICh5aWVsZCA9PSBOVUxMKSByZXR1cm4gUENSRTJfRVJST1JfTk9NRU1PUlk7Cit5aWVsZCA9IChQQ1JFMl9VQ0hBUiAqKSgoKGNoYXIgKil5aWVsZCkgKyBzaXplb2YocGNyZTJfbWVtY3RsKSk7CittZW1jcHkoeWllbGQsIG1hdGNoX2RhdGEtPnN1YmplY3QgKyBtYXRjaF9kYXRhLT5vdmVjdG9yW3N0cmluZ251bWJlcioyXSwKKyAgQ1UyQllURVMoc2l6ZSkpOworeWllbGRbc2l6ZV0gPSAwOworKnN0cmluZ3B0ciA9IHlpZWxkOworKnNpemVwdHIgPSBzaXplOworcmV0dXJuIDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICBGcmVlIG1lbW9yeSBvYnRhaW5lZCBieSBnZXRfc3Vic3RyaW5nICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitBcmd1bWVudDogICAgIHRoZSByZXN1bHQgb2YgYSBwcmV2aW91cyBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5eHh4KCkKK1JldHVybnM6ICAgICAgbm90aGluZworKi8KKworUENSRTJfRVhQX0RFRk4gdm9pZCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX3N1YnN0cmluZ19mcmVlKFBDUkUyX1VDSEFSICpzdHJpbmcpCit7CitwY3JlMl9tZW1jdGwgKm1lbWN0bCA9IChwY3JlMl9tZW1jdGwgKikoKGNoYXIgKilzdHJpbmcgLSBzaXplb2YocGNyZTJfbWVtY3RsKSk7CittZW1jdGwtPmZyZWUobWVtY3RsLCBtZW1jdGwtPm1lbW9yeV9kYXRhKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgR2V0IGxlbmd0aCBvZiBhIG5hbWVkIHN1YnN0cmluZyAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgYSBuYW1lZCBjYXB0dXJlZCBzdWJzdHJpbmcuIElmIHRoZSByZWdleAorcGVybWl0cyBkdXBsaWNhdGUgbmFtZXMsIHRoZSBmaXJzdCBzdWJzdHJpbmcgdGhhdCBpcyBzZXQgaXMgY2hvc2VuLgorCitBcmd1bWVudHM6CisgIG1hdGNoX2RhdGEgICAgICBwb2ludGVyIHRvIG1hdGNoIGRhdGEKKyAgc3RyaW5nbmFtZSAgICAgIHRoZSBuYW1lIG9mIHRoZSByZXF1aXJlZCBzdWJzdHJpbmcKKyAgc2l6ZXB0ciAgICAgICAgIHdoZXJlIHRvIHB1dCB0aGUgbGVuZ3RoCisKK1JldHVybnM6ICAgICAgICAgIDAgaWYgc3VjY2Vzc2Z1bCwgZWxzZSBhIG5lZ2F0aXZlIGVycm9yIG51bWJlcgorKi8KKworUENSRTJfRVhQX0RFRk4gaW50IFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWUocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgUENSRTJfU1BUUiBzdHJpbmduYW1lLCBQQ1JFMl9TSVpFICpzaXplcHRyKQoreworUENSRTJfU1BUUiBmaXJzdCwgbGFzdCwgZW50cnk7CitpbnQgZmFpbHJjLCBlbnRyeXNpemU7CitpZiAobWF0Y2hfZGF0YS0+bWF0Y2hlZGJ5ID09IFBDUkUyX01BVENIRURCWV9ERkFfSU5URVJQUkVURVIpCisgIHJldHVybiBQQ1JFMl9FUlJPUl9ERkFfVUZVTkM7CitlbnRyeXNpemUgPSBwY3JlMl9zdWJzdHJpbmdfbmFtZXRhYmxlX3NjYW4obWF0Y2hfZGF0YS0+Y29kZSwgc3RyaW5nbmFtZSwKKyAgJmZpcnN0LCAmbGFzdCk7CitpZiAoZW50cnlzaXplIDwgMCkgcmV0dXJuIGVudHJ5c2l6ZTsKK2ZhaWxyYyA9IFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFOworZm9yIChlbnRyeSA9IGZpcnN0OyBlbnRyeSA8PSBsYXN0OyBlbnRyeSArPSBlbnRyeXNpemUpCisgIHsKKyAgdWludDMyX3QgbiA9IEdFVDIoZW50cnksIDApOworICBpZiAobiA8IG1hdGNoX2RhdGEtPm92ZWNjb3VudCkKKyAgICB7CisgICAgaWYgKG1hdGNoX2RhdGEtPm92ZWN0b3JbbioyXSAhPSBQQ1JFMl9VTlNFVCkKKyAgICAgIHJldHVybiBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyKG1hdGNoX2RhdGEsIG4sIHNpemVwdHIpOworICAgIGZhaWxyYyA9IFBDUkUyX0VSUk9SX1VOU0VUOworICAgIH0KKyAgfQorcmV0dXJuIGZhaWxyYzsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICBHZXQgbGVuZ3RoIG9mIGEgbnVtYmVyZWQgc3Vic3RyaW5nICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsZW5ndGggb2YgYSBjYXB0dXJlZCBzdWJzdHJpbmcuIElmIHRoZSBzdGFydCBpcworYmV5b25kIHRoZSBlbmQgKHdoaWNoIGNhbiBoYXBwZW4gd2hlbiBcSyBpcyB1c2VkIGluIGFuIGFzc2VydGlvbiksIGl0IHNldHMgdGhlCitsZW5ndGggdG8gemVyby4KKworQXJndW1lbnRzOgorICBtYXRjaF9kYXRhICAgICAgcG9pbnRlciB0byBtYXRjaCBkYXRhCisgIHN0cmluZ251bWJlciAgICB0aGUgbnVtYmVyIG9mIHRoZSByZXF1aXJlZCBzdWJzdHJpbmcKKyAgc2l6ZXB0ciAgICAgICAgIHdoZXJlIHRvIHB1dCB0aGUgbGVuZ3RoLCBpZiBub3QgTlVMTAorCitSZXR1cm5zOiAgICAgICAgIGlmIHN1Y2Nlc3NmdWw6IDAKKyAgICAgICAgICAgICAgICAgaWYgbm90IHN1Y2Nlc3NmdWwsIGEgbmVnYXRpdmUgZXJyb3IgY29kZToKKyAgICAgICAgICAgICAgICAgICBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORzogbm8gc3VjaCBzdWJzdHJpbmcKKyAgICAgICAgICAgICAgICAgICBQQ1JFMl9FUlJPUl9VTkFWQUlMQUJMRTogb3ZlY3RvciBpcyB0b28gc21hbGwKKyAgICAgICAgICAgICAgICAgICBQQ1JFMl9FUlJPUl9VTlNFVDogc3Vic3RyaW5nIGlzIG5vdCBzZXQKKyovCisKK1BDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXIocGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YSwKKyAgdWludDMyX3Qgc3RyaW5nbnVtYmVyLCBQQ1JFMl9TSVpFICpzaXplcHRyKQoreworUENSRTJfU0laRSBsZWZ0LCByaWdodDsKK2ludCBjb3VudCA9IG1hdGNoX2RhdGEtPnJjOworaWYgKGNvdW50ID09IFBDUkUyX0VSUk9SX1BBUlRJQUwpCisgIHsKKyAgaWYgKHN0cmluZ251bWJlciA+IDApIHJldHVybiBQQ1JFMl9FUlJPUl9QQVJUSUFMOworICBjb3VudCA9IDA7CisgIH0KK2Vsc2UgaWYgKGNvdW50IDwgMCkgcmV0dXJuIGNvdW50OyAgICAgICAgICAgIC8qIE1hdGNoIGZhaWxlZCAqLworCitpZiAobWF0Y2hfZGF0YS0+bWF0Y2hlZGJ5ICE9IFBDUkUyX01BVENIRURCWV9ERkFfSU5URVJQUkVURVIpCisgIHsKKyAgaWYgKHN0cmluZ251bWJlciA+IG1hdGNoX2RhdGEtPmNvZGUtPnRvcF9icmFja2V0KQorICAgIHJldHVybiBQQ1JFMl9FUlJPUl9OT1NVQlNUUklORzsKKyAgaWYgKHN0cmluZ251bWJlciA+PSBtYXRjaF9kYXRhLT5vdmVjY291bnQpCisgICAgcmV0dXJuIFBDUkUyX0VSUk9SX1VOQVZBSUxBQkxFOworICBpZiAobWF0Y2hfZGF0YS0+b3ZlY3RvcltzdHJpbmdudW1iZXIqMl0gPT0gUENSRTJfVU5TRVQpCisgICAgcmV0dXJuIFBDUkUyX0VSUk9SX1VOU0VUOworICB9CitlbHNlICAvKiBNYXRjaGVkIHVzaW5nIHBjcmUyX2RmYV9tYXRjaCgpICovCisgIHsKKyAgaWYgKHN0cmluZ251bWJlciA+PSBtYXRjaF9kYXRhLT5vdmVjY291bnQpIHJldHVybiBQQ1JFMl9FUlJPUl9VTkFWQUlMQUJMRTsKKyAgaWYgKGNvdW50ICE9IDAgJiYgc3RyaW5nbnVtYmVyID49ICh1aW50MzJfdCljb3VudCkgcmV0dXJuIFBDUkUyX0VSUk9SX1VOU0VUOworICB9CisKK2xlZnQgPSBtYXRjaF9kYXRhLT5vdmVjdG9yW3N0cmluZ251bWJlcioyXTsKK3JpZ2h0ID0gbWF0Y2hfZGF0YS0+b3ZlY3RvcltzdHJpbmdudW1iZXIqMisxXTsKK2lmIChzaXplcHRyICE9IE5VTEwpICpzaXplcHRyID0gKGxlZnQgPiByaWdodCk/IDAgOiByaWdodCAtIGxlZnQ7CityZXR1cm4gMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgIEV4dHJhY3QgYWxsIGNhcHR1cmVkIHN0cmluZ3MgdG8gbmV3IG1lbW9yeSAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiBnZXRzIG9uZSBjaHVuayBvZiBtZW1vcnkgYW5kIGJ1aWxkcyBhIGxpc3Qgb2YgcG9pbnRlcnMgYW5kIGFsbAordGhlIGNhcHR1cmVkIHN1YnN0cmluZ3MgaW4gaXQuIEEgTlVMTCBwb2ludGVyIGlzIHB1dCBvbiB0aGUgZW5kIG9mIHRoZSBsaXN0LgorVGhlIHN1YnN0cmluZ3MgYXJlIHplcm8tdGVybWluYXRlZCwgYnV0IGFsc28sIGlmIHRoZSBmaW5hbCBhcmd1bWVudCBpcworbm9uLU5VTEwsIGEgbGlzdCBvZiBsZW5ndGhzIGlzIGFsc28gcmV0dXJuZWQuIFRoaXMgYWxsb3dzIGJpbmFyeSBkYXRhIHRvIGJlCitoYW5kbGVkLgorCitBcmd1bWVudHM6CisgIG1hdGNoX2RhdGEgICAgIHBvaW50cyB0byB0aGUgbWF0Y2ggZGF0YQorICBsaXN0cHRyICAgICAgICBzZXQgdG8gcG9pbnQgdG8gdGhlIGxpc3Qgb2YgcG9pbnRlcnMKKyAgbGVuZ3Roc3B0ciAgICAgc2V0IHRvIHBvaW50IHRvIHRoZSBsaXN0IG9mIGxlbmd0aHMgKG1heSBiZSBOVUxMKQorCitSZXR1cm5zOiAgICAgICAgIGlmIHN1Y2Nlc3NmdWw6IDAKKyAgICAgICAgICAgICAgICAgaWYgbm90IHN1Y2Nlc3NmdWwsIGEgbmVnYXRpdmUgZXJyb3IgY29kZToKKyAgICAgICAgICAgICAgICAgICBQQ1JFMl9FUlJPUl9OT01FTU9SWTogZmFpbGVkIHRvIGdldCBtZW1vcnksCisgICAgICAgICAgICAgICAgICAgb3IgYSBtYXRjaCBmYWlsdXJlIGNvZGUKKyovCisKK1BDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX3N1YnN0cmluZ19saXN0X2dldChwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhLCBQQ1JFMl9VQ0hBUiAqKipsaXN0cHRyLAorICBQQ1JFMl9TSVpFICoqbGVuZ3Roc3B0cikKK3sKK2ludCBpLCBjb3VudCwgY291bnQyOworUENSRTJfU0laRSBzaXplOworUENSRTJfU0laRSAqbGVuc3A7CitwY3JlMl9tZW1jdGwgKm1lbXA7CitQQ1JFMl9VQ0hBUiAqKmxpc3RwOworUENSRTJfVUNIQVIgKnNwOworUENSRTJfU0laRSAqb3ZlY3RvcjsKKworaWYgKChjb3VudCA9IG1hdGNoX2RhdGEtPnJjKSA8IDApIHJldHVybiBjb3VudDsgICAvKiBNYXRjaCBmYWlsZWQgKi8KK2lmIChjb3VudCA9PSAwKSBjb3VudCA9IG1hdGNoX2RhdGEtPm92ZWNjb3VudDsgICAgLyogT3ZlY3RvciB0b28gc21hbGwgKi8KKworY291bnQyID0gMipjb3VudDsKK292ZWN0b3IgPSBtYXRjaF9kYXRhLT5vdmVjdG9yOworc2l6ZSA9IHNpemVvZihwY3JlMl9tZW1jdGwpICsgc2l6ZW9mKFBDUkUyX1VDSEFSICopOyAgICAgIC8qIEZvciBmaW5hbCBOVUxMICovCitpZiAobGVuZ3Roc3B0ciAhPSBOVUxMKSBzaXplICs9IHNpemVvZihQQ1JFMl9TSVpFKSAqIGNvdW50OyAgLyogRm9yIGxlbmd0aHMgKi8KKworZm9yIChpID0gMDsgaSA8IGNvdW50MjsgaSArPSAyKQorICB7CisgIHNpemUgKz0gc2l6ZW9mKFBDUkUyX1VDSEFSICopICsgQ1UyQllURVMoMSk7CisgIGlmIChvdmVjdG9yW2krMV0gPiBvdmVjdG9yW2ldKSBzaXplICs9IENVMkJZVEVTKG92ZWN0b3JbaSsxXSAtIG92ZWN0b3JbaV0pOworICB9CisKK21lbXAgPSBQUklWKG1lbWN0bF9tYWxsb2MpKHNpemUsIChwY3JlMl9tZW1jdGwgKiltYXRjaF9kYXRhKTsKK2lmIChtZW1wID09IE5VTEwpIHJldHVybiBQQ1JFMl9FUlJPUl9OT01FTU9SWTsKKworKmxpc3RwdHIgPSBsaXN0cCA9IChQQ1JFMl9VQ0hBUiAqKikoKGNoYXIgKiltZW1wICsgc2l6ZW9mKHBjcmUyX21lbWN0bCkpOworbGVuc3AgPSAoUENSRTJfU0laRSAqKSgoY2hhciAqKWxpc3RwICsgc2l6ZW9mKFBDUkUyX1VDSEFSICopICogKGNvdW50ICsgMSkpOworCitpZiAobGVuZ3Roc3B0ciA9PSBOVUxMKQorICB7CisgIHNwID0gKFBDUkUyX1VDSEFSICopbGVuc3A7CisgIGxlbnNwID0gTlVMTDsKKyAgfQorZWxzZQorICB7CisgICpsZW5ndGhzcHRyID0gbGVuc3A7CisgIHNwID0gKFBDUkUyX1VDSEFSICopKChjaGFyICopbGVuc3AgKyBzaXplb2YoUENSRTJfU0laRSkgKiBjb3VudCk7CisgIH0KKworZm9yIChpID0gMDsgaSA8IGNvdW50MjsgaSArPSAyKQorICB7CisgIHNpemUgPSAob3ZlY3RvcltpKzFdID4gb3ZlY3RvcltpXSk/IChvdmVjdG9yW2krMV0gLSBvdmVjdG9yW2ldKSA6IDA7CisgIG1lbWNweShzcCwgbWF0Y2hfZGF0YS0+c3ViamVjdCArIG92ZWN0b3JbaV0sIENVMkJZVEVTKHNpemUpKTsKKyAgKmxpc3RwKysgPSBzcDsKKyAgaWYgKGxlbnNwICE9IE5VTEwpICpsZW5zcCsrID0gc2l6ZTsKKyAgc3AgKz0gc2l6ZTsKKyAgKnNwKysgPSAwOworICB9CisKKypsaXN0cCA9IE5VTEw7CityZXR1cm4gMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgRnJlZSBtZW1vcnkgb2J0YWluZWQgYnkgc3Vic3RyaW5nX2xpc3RfZ2V0ICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKK0FyZ3VtZW50OiAgICAgdGhlIHJlc3VsdCBvZiBhIHByZXZpb3VzIHBjcmUyX3N1YnN0cmluZ19saXN0X2dldCgpCitSZXR1cm5zOiAgICAgIG5vdGhpbmcKKyovCisKK1BDUkUyX0VYUF9ERUZOIHZvaWQgUENSRTJfQ0FMTF9DT05WRU5USU9OCitwY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlKFBDUkUyX1NQVFIgKmxpc3QpCit7CitwY3JlMl9tZW1jdGwgKm1lbWN0bCA9IChwY3JlMl9tZW1jdGwgKikoKGNoYXIgKilsaXN0IC0gc2l6ZW9mKHBjcmUyX21lbWN0bCkpOworbWVtY3RsLT5mcmVlKG1lbWN0bCwgbWVtY3RsLT5tZW1vcnlfZGF0YSk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgRmluZCAobXVsdGlwbGUpIGVudHJpZXMgZm9yIG5hbWVkIHN0cmluZyAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gc2NhbnMgdGhlIG5hbWV0YWJsZSBmb3IgYSBnaXZlbiBuYW1lLCB1c2luZyBiaW5hcnkgY2hvcC4gSXQKK3JldHVybnMgZWl0aGVyIHR3byBwb2ludGVycyB0byB0aGUgZW50cmllcyBpbiB0aGUgdGFibGUsIG9yLCBpZiBubyBwb2ludGVycyBhcmUKK2dpdmVuLCB0aGUgbnVtYmVyIG9mIGEgdW5pcXVlIGdyb3VwIHdpdGggdGhlIGdpdmVuIG5hbWUuIElmIGR1cGxpY2F0ZSBuYW1lcyBhcmUKK3Blcm1pdHRlZCwgYW5kIHRoZSBuYW1lIGlzIG5vdCB1bmlxdWUsIGFuIGVycm9yIGlzIGdlbmVyYXRlZC4KKworQXJndW1lbnRzOgorICBjb2RlICAgICAgICB0aGUgY29tcGlsZWQgcmVnZXgKKyAgc3RyaW5nbmFtZSAgdGhlIG5hbWUgd2hvc2UgZW50cmllcyByZXF1aXJlZAorICBmaXJzdHB0ciAgICB3aGVyZSB0byBwdXQgdGhlIHBvaW50ZXIgdG8gdGhlIGZpcnN0IGVudHJ5CisgIGxhc3RwdHIgICAgIHdoZXJlIHRvIHB1dCB0aGUgcG9pbnRlciB0byB0aGUgbGFzdCBlbnRyeQorCitSZXR1cm5zOiAgICAgIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HIGlmIHRoZSBuYW1lIGlzIG5vdCBmb3VuZAorICAgICAgICAgICAgICBvdGhlcndpc2UsIGlmIGZpcnN0cHRyIGFuZCBsYXN0cHRyIGFyZSBOVUxMOgorICAgICAgICAgICAgICAgIGEgZ3JvdXAgbnVtYmVyIGZvciBhIHVuaXF1ZSBzdWJzdHJpbmcKKyAgICAgICAgICAgICAgICBlbHNlIFBDUkUyX0VSUk9SX05PVU5JUVVFU1VCU1RSSU5HCisgICAgICAgICAgICAgIG90aGVyd2lzZToKKyAgICAgICAgICAgICAgICB0aGUgbGVuZ3RoIG9mIGVhY2ggZW50cnksIGhhdmluZyBzZXQgZmlyc3RwdHIgYW5kIGxhc3RwdHIKKyovCisKK1BDUkUyX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3BjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2Nhbihjb25zdCBwY3JlMl9jb2RlICpjb2RlLCBQQ1JFMl9TUFRSIHN0cmluZ25hbWUsCisgIFBDUkUyX1NQVFIgKmZpcnN0cHRyLCBQQ1JFMl9TUFRSICpsYXN0cHRyKQorewordWludDE2X3QgYm90ID0gMDsKK3VpbnQxNl90IHRvcCA9IGNvZGUtPm5hbWVfY291bnQ7Cit1aW50MTZfdCBlbnRyeXNpemUgPSBjb2RlLT5uYW1lX2VudHJ5X3NpemU7CitQQ1JFMl9TUFRSIG5hbWV0YWJsZSA9IChQQ1JFMl9TUFRSKSgoY2hhciAqKWNvZGUgKyBzaXplb2YocGNyZTJfcmVhbF9jb2RlKSk7CisKK3doaWxlICh0b3AgPiBib3QpCisgIHsKKyAgdWludDE2X3QgbWlkID0gKHRvcCArIGJvdCkgLyAyOworICBQQ1JFMl9TUFRSIGVudHJ5ID0gbmFtZXRhYmxlICsgZW50cnlzaXplKm1pZDsKKyAgaW50IGMgPSBQUklWKHN0cmNtcCkoc3RyaW5nbmFtZSwgZW50cnkgKyBJTU0yX1NJWkUpOworICBpZiAoYyA9PSAwKQorICAgIHsKKyAgICBQQ1JFMl9TUFRSIGZpcnN0OworICAgIFBDUkUyX1NQVFIgbGFzdDsKKyAgICBQQ1JFMl9TUFRSIGxhc3RlbnRyeTsKKyAgICBsYXN0ZW50cnkgPSBuYW1ldGFibGUgKyBlbnRyeXNpemUgKiAoY29kZS0+bmFtZV9jb3VudCAtIDEpOworICAgIGZpcnN0ID0gbGFzdCA9IGVudHJ5OworICAgIHdoaWxlIChmaXJzdCA+IG5hbWV0YWJsZSkKKyAgICAgIHsKKyAgICAgIGlmIChQUklWKHN0cmNtcCkoc3RyaW5nbmFtZSwgKGZpcnN0IC0gZW50cnlzaXplICsgSU1NMl9TSVpFKSkgIT0gMCkgYnJlYWs7CisgICAgICBmaXJzdCAtPSBlbnRyeXNpemU7CisgICAgICB9CisgICAgd2hpbGUgKGxhc3QgPCBsYXN0ZW50cnkpCisgICAgICB7CisgICAgICBpZiAoUFJJVihzdHJjbXApKHN0cmluZ25hbWUsIChsYXN0ICsgZW50cnlzaXplICsgSU1NMl9TSVpFKSkgIT0gMCkgYnJlYWs7CisgICAgICBsYXN0ICs9IGVudHJ5c2l6ZTsKKyAgICAgIH0KKyAgICBpZiAoZmlyc3RwdHIgPT0gTlVMTCkgcmV0dXJuIChmaXJzdCA9PSBsYXN0KT8KKyAgICAgIChpbnQpR0VUMihlbnRyeSwgMCkgOiBQQ1JFMl9FUlJPUl9OT1VOSVFVRVNVQlNUUklORzsKKyAgICAqZmlyc3RwdHIgPSBmaXJzdDsKKyAgICAqbGFzdHB0ciA9IGxhc3Q7CisgICAgcmV0dXJuIGVudHJ5c2l6ZTsKKyAgICB9CisgIGlmIChjID4gMCkgYm90ID0gbWlkICsgMTsgZWxzZSB0b3AgPSBtaWQ7CisgIH0KKworcmV0dXJuIFBDUkUyX0VSUk9SX05PU1VCU1RSSU5HOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICBGaW5kIG51bWJlciBmb3IgbmFtZWQgc3RyaW5nICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHBjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2NhbigpCit3aGVuIGl0IGlzIGtub3duIHRoYXQgbmFtZXMgYXJlIHVuaXF1ZS4gSWYgdGhlcmUgYXJlIGR1cGxpY2F0ZSBuYW1lcywgaXQgaXMgbm90CitkZWZpbmVkIHdoaWNoIG51bWJlciBpcyByZXR1cm5lZC4KKworQXJndW1lbnRzOgorICBjb2RlICAgICAgICB0aGUgY29tcGlsZWQgcmVnZXgKKyAgc3RyaW5nbmFtZSAgdGhlIG5hbWUgd2hvc2UgbnVtYmVyIGlzIHJlcXVpcmVkCisKK1JldHVybnM6ICAgICAgdGhlIG51bWJlciBvZiB0aGUgbmFtZWQgcGFyZW50aGVzaXMsIG9yIGEgbmVnYXRpdmUgbnVtYmVyCisgICAgICAgICAgICAgICAgUENSRTJfRVJST1JfTk9TVUJTVFJJTkcgaWYgbm90IGZvdW5kCisgICAgICAgICAgICAgICAgUENSRTJfRVJST1JfTk9VTklRVUVTVUJTVFJJTkcgaWYgbm90IHVuaXF1ZQorKi8KKworUENSRTJfRVhQX0RFRk4gaW50IFBDUkUyX0NBTExfQ09OVkVOVElPTgorcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWUoY29uc3QgcGNyZTJfY29kZSAqY29kZSwKKyAgUENSRTJfU1BUUiBzdHJpbmduYW1lKQoreworcmV0dXJuIHBjcmUyX3N1YnN0cmluZ19uYW1ldGFibGVfc2Nhbihjb2RlLCBzdHJpbmduYW1lLCBOVUxMLCBOVUxMKTsKK30KKworLyogRW5kIG9mIHBjcmUyX3N1YnN0cmluZy5jICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfdGFibGVzLmMgYi9kaXN0Mi9zcmMvcGNyZTJfdGFibGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0NWVkNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl90YWJsZXMuYwpAQCAtMCwwICsxLDc2NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQQ1JFIGlzIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHN5bnRheAorYW5kIHNlbWFudGljcyBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2Ugb2YgdGhlIFBlcmwgNSBsYW5ndWFnZS4KKworICAgICAgICAgICAgICAgICAgICAgICBXcml0dGVuIGJ5IFBoaWxpcCBIYXplbAorICAgICBPcmlnaW5hbCBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDE5OTctMjAxMiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorICAgICAgICAgTmV3IEFQSSBjb2RlIENvcHlyaWdodCAoYykgMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKiBUaGlzIG1vZHVsZSBjb250YWlucyBzb21lIGZpeGVkIHRhYmxlcyB0aGF0IGFyZSB1c2VkIGJ5IG1vcmUgdGhhbiBvbmUgb2YgdGhlCitQQ1JFIGNvZGUgbW9kdWxlcy4gVGhlIHRhYmxlcyBhcmUgYWxzbyAjaW5jbHVkZWQgYnkgdGhlIHBjcmUydGVzdCBwcm9ncmFtLAord2hpY2ggdXNlcyBtYWNyb3MgdG8gY2hhbmdlIHRoZWlyIG5hbWVzIGZyb20gX3BjcmUyX3h4eCB0byB4eHh4LCB0aGVyZWJ5Cithdm9pZGluZyBuYW1lIGNsYXNoZXMgd2l0aCB0aGUgbGlicmFyeS4gSW4gdGhpcyBjYXNlLCBQQ1JFMl9QQ1JFMlRFU1QgaXMKK2RlZmluZWQuICovCisKKyNpZm5kZWYgUENSRTJfUENSRTJURVNUICAgICAgICAgICAvKiBXZSdyZSBjb21waWxpbmcgdGhlIGxpYnJhcnkgKi8KKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKyNpbmNsdWRlICJwY3JlMl9pbnRlcm5hbC5oIgorI2VuZGlmIC8qIFBDUkUyX1BDUkUyVEVTVCAqLworCisKKy8qIFRhYmxlIG9mIHNpemVzIGZvciB0aGUgZml4ZWQtbGVuZ3RoIG9wY29kZXMuIEl0J3MgZGVmaW5lZCBpbiBhIG1hY3JvIHNvIHRoYXQKK3RoZSBkZWZpbml0aW9uIGlzIG5leHQgdG8gdGhlIGRlZmluaXRpb24gb2YgdGhlIG9wY29kZXMgaW4gcGNyZTJfaW50ZXJuYWwuaC4KK1RoaXMgaXMgbW9kZS1kZXBlbmRlbnQsIHNvIGlzIHNraXBwZWQgd2hlbiB0aGlzIGZpbGUgaXMgaW5jbHVkZWQgYnkgcGNyZTJ0ZXN0LiAqLworCisjaWZuZGVmIFBDUkUyX1BDUkUyVEVTVAorY29uc3QgdWludDhfdCBQUklWKE9QX2xlbmd0aHMpW10gPSB7IE9QX0xFTkdUSFMgfTsKKyNlbmRpZgorCisvKiBUYWJsZXMgb2YgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBzdWl0YWJsZSBmb3IKK2FkZGluZyB0byBjbGFzc2VzLiAqLworCitjb25zdCB1aW50MzJfdCBQUklWKGhzcGFjZV9saXN0KVtdID0geyBIU1BBQ0VfTElTVCB9OworY29uc3QgdWludDMyX3QgUFJJVih2c3BhY2VfbGlzdClbXSA9IHsgVlNQQUNFX0xJU1QgfTsKKworLyogVGhlc2UgdGFibGVzIGFyZSB0aGUgcGFpcnMgb2YgZGVsaW1pdGVycyB0aGF0IGFyZSB2YWxpZCBmb3IgY2FsbG91dCBzdHJpbmcKK2FyZ3VtZW50cy4gRm9yIGVhY2ggc3RhcnRpbmcgZGVsaW1pdGVyIHRoZXJlIG11c3QgYmUgYSBtYXRjaGluZyBlbmRpbmcKK2RlbGltaXRlciwgd2hpY2ggaW4gZmFjdCBpcyBkaWZmZXJlbnQgb25seSBmb3IgYnJhY2tldC1saWtlIGRlbGltaXRlcnMuICovCisKK2NvbnN0IHVpbnQzMl90IFBSSVYoY2FsbG91dF9zdGFydF9kZWxpbXMpW10gPSB7CisgIENIQVJfR1JBVkVfQUNDRU5ULCBDSEFSX0FQT1NUUk9QSEUsIENIQVJfUVVPVEFUSU9OX01BUkssCisgIENIQVJfQ0lSQ1VNRkxFWF9BQ0NFTlQsIENIQVJfUEVSQ0VOVF9TSUdOLCBDSEFSX05VTUJFUl9TSUdOLAorICBDSEFSX0RPTExBUl9TSUdOLCBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCwgMCB9OworCitjb25zdCB1aW50MzJfdCBQUklWKGNhbGxvdXRfZW5kX2RlbGltc1tdKSA9IHsKKyAgQ0hBUl9HUkFWRV9BQ0NFTlQsIENIQVJfQVBPU1RST1BIRSwgQ0hBUl9RVU9UQVRJT05fTUFSSywKKyAgQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVCwgQ0hBUl9QRVJDRU5UX1NJR04sIENIQVJfTlVNQkVSX1NJR04sCisgIENIQVJfRE9MTEFSX1NJR04sIENIQVJfUklHSFRfQ1VSTFlfQlJBQ0tFVCwgMCB9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICBUYWJsZXMgZm9yIFVURi04IHN1cHBvcnQgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhlc2UgdGFibGVzIGFyZSByZXF1aXJlZCBieSBwY3JlMnRlc3QgaW4gMTYtIG9yIDMyLWJpdCBtb2RlLCBhcyB3ZWxsCithcyBmb3IgdGhlIGxpYnJhcnkgaW4gOC1iaXQgbW9kZSwgYmVjYXVzZSBwY3JlMnRlc3QgdXNlcyBVVEYtOCBpbnRlcm5hbGx5IGZvcgoraGFuZGxpbmcgd2lkZSBjaGFyYWN0ZXJzLiAqLworCisjaWYgZGVmaW5lZCBQQ1JFMl9QQ1JFMlRFU1QgfHwgXAorICAgKGRlZmluZWQgU1VQUE9SVF9VTklDT0RFICYmIFwKKyAgICBkZWZpbmVkIFBDUkUyX0NPREVfVU5JVF9XSURUSCAmJiBcCisgICAgUENSRTJfQ09ERV9VTklUX1dJRFRIID09IDgpCisKKy8qIFRoZXNlIGFyZSB0aGUgYnJlYWtwb2ludHMgZm9yIGRpZmZlcmVudCBudW1iZXJzIG9mIGJ5dGVzIGluIGEgVVRGLTgKK2NoYXJhY3Rlci4gKi8KKworY29uc3QgaW50IFBSSVYodXRmOF90YWJsZTEpW10gPQorICB7IDB4N2YsIDB4N2ZmLCAweGZmZmYsIDB4MWZmZmZmLCAweDNmZmZmZmYsIDB4N2ZmZmZmZmZ9OworCitjb25zdCBpbnQgUFJJVih1dGY4X3RhYmxlMV9zaXplKSA9IHNpemVvZihQUklWKHV0ZjhfdGFibGUxKSkgLyBzaXplb2YoaW50KTsKKworLyogVGhlc2UgYXJlIHRoZSBpbmRpY2F0b3IgYml0cyBhbmQgdGhlIG1hc2sgZm9yIHRoZSBkYXRhIGJpdHMgdG8gc2V0IGluIHRoZQorZmlyc3QgYnl0ZSBvZiBhIGNoYXJhY3RlciwgaW5kZXhlZCBieSB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgYnl0ZXMuICovCisKK2NvbnN0IGludCBQUklWKHV0ZjhfdGFibGUyKVtdID0geyAwLCAgICAweGMwLCAweGUwLCAweGYwLCAweGY4LCAweGZjfTsKK2NvbnN0IGludCBQUklWKHV0ZjhfdGFibGUzKVtdID0geyAweGZmLCAweDFmLCAweDBmLCAweDA3LCAweDAzLCAweDAxfTsKKworLyogVGFibGUgb2YgdGhlIG51bWJlciBvZiBleHRyYSBieXRlcywgaW5kZXhlZCBieSB0aGUgZmlyc3QgYnl0ZSBtYXNrZWQgd2l0aAorMHgzZi4gVGhlIGhpZ2hlc3QgbnVtYmVyIGZvciBhIHZhbGlkIFVURi04IGZpcnN0IGJ5dGUgaXMgaW4gZmFjdCAweDNkLiAqLworCitjb25zdCB1aW50OF90IFBSSVYodXRmOF90YWJsZTQpW10gPSB7CisgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCisgIDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsCisgIDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsCisgIDMsMywzLDMsMywzLDMsMyw0LDQsNCw0LDUsNSw1LDUgfTsKKworI2VuZGlmIC8qIFVURi04IHN1cHBvcnQgbmVlZGVkICovCisKKworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorCisvKiBUYWJsZSB0byB0cmFuc2xhdGUgZnJvbSBwYXJ0aWN1bGFyIHR5cGUgdmFsdWUgdG8gdGhlIGdlbmVyYWwgdmFsdWUuICovCisKK2NvbnN0IHVpbnQzMl90IFBSSVYodWNwX2dlbnR5cGUpW10gPSB7CisgIHVjcF9DLCB1Y3BfQywgdWNwX0MsIHVjcF9DLCB1Y3BfQywgIC8qIENjLCBDZiwgQ24sIENvLCBDcyAqLworICB1Y3BfTCwgdWNwX0wsIHVjcF9MLCB1Y3BfTCwgdWNwX0wsICAvKiBMbCwgTHUsIExtLCBMbywgTHQgKi8KKyAgdWNwX00sIHVjcF9NLCB1Y3BfTSwgICAgICAgICAgICAgICAgLyogTWMsIE1lLCBNbiAqLworICB1Y3BfTiwgdWNwX04sIHVjcF9OLCAgICAgICAgICAgICAgICAvKiBOZCwgTmwsIE5vICovCisgIHVjcF9QLCB1Y3BfUCwgdWNwX1AsIHVjcF9QLCB1Y3BfUCwgIC8qIFBjLCBQZCwgUGUsIFBmLCBQaSAqLworICB1Y3BfUCwgdWNwX1AsICAgICAgICAgICAgICAgICAgICAgICAvKiBQcywgUG8gKi8KKyAgdWNwX1MsIHVjcF9TLCB1Y3BfUywgdWNwX1MsICAgICAgICAgLyogU2MsIFNrLCBTbSwgU28gKi8KKyAgdWNwX1osIHVjcF9aLCB1Y3BfWiAgICAgICAgICAgICAgICAgLyogWmwsIFpwLCBacyAqLworfTsKKworLyogVGhpcyB0YWJsZSBlbmNvZGVzIHRoZSBydWxlcyBmb3IgZmluZGluZyB0aGUgZW5kIG9mIGFuIGV4dGVuZGVkIGdyYXBoZW1lCitjbHVzdGVyLiBFdmVyeSBjb2RlIHBvaW50IGhhcyBhIGdyYXBoZW1lIGJyZWFrIHByb3BlcnR5IHdoaWNoIGlzIG9uZSBvZiB0aGUKK3VjcF9nYlhYIHZhbHVlcyBkZWZpbmVkIGluIHBjcmUyX3VjcC5oLiBUaGUgMi1kaW1lbnNpb25hbCB0YWJsZSBpcyBpbmRleGVkIGJ5Cit0aGUgcHJvcGVydGllcyBvZiB0d28gYWRqYWNlbnQgY29kZSBwb2ludHMuIFRoZSBsZWZ0IHByb3BlcnR5IHNlbGVjdHMgYSB3b3JkCitmcm9tIHRoZSB0YWJsZSwgYW5kIHRoZSByaWdodCBwcm9wZXJ0eSBzZWxlY3RzIGEgYml0IGZyb20gdGhhdCB3b3JkIGxpa2UgdGhpczoKKworICBQUklWKHVjcF9nYnRhYmxlKVtsZWZ0LXByb3BlcnR5XSAmICgxIDw8IHJpZ2h0LXByb3BlcnR5KQorCitUaGUgdmFsdWUgaXMgbm9uLXplcm8gaWYgYSBncmFwaGVtZSBicmVhayBpcyBOT1QgcGVybWl0dGVkIGJldHdlZW4gdGhlIHJlbGV2YW50Cit0d28gY29kZSBwb2ludHMuIFRoZSBicmVha2luZyBydWxlcyBhcmUgYXMgZm9sbG93czoKKworMS4gQnJlYWsgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGV4dCAocHJldHR5IG9idmlvdXNseSkuCisKKzIuIERvIG5vdCBicmVhayBiZXR3ZWVuIGEgQ1IgYW5kIExGOyBvdGhlcndpc2UsIGJyZWFrIGJlZm9yZSBhbmQgICBhZnRlcgorICAgY29udHJvbHMuCisKKzMuIERvIG5vdCBicmVhayBIYW5ndWwgc3lsbGFibGUgc2VxdWVuY2VzLCB0aGUgcnVsZXMgZm9yIHdoaWNoIGFyZToKKworICAgIEwgbWF5IGJlIGZvbGxvd2VkIGJ5IEwsIFYsIExWIG9yIExWVAorICAgIExWIG9yIFYgbWF5IGJlIGZvbGxvd2VkIGJ5IFYgb3IgVAorICAgIExWVCBvciBUIG1heSBiZSBmb2xsb3dlZCBieSBUCisKKzQuIERvIG5vdCBicmVhayBiZWZvcmUgZXh0ZW5kaW5nIGNoYXJhY3RlcnMuCisKK1RoZSBuZXh0IHR3byBydWxlcyBhcmUgb25seSBmb3IgZXh0ZW5kZWQgZ3JhcGhlbWUgY2x1c3RlcnMgKGJ1dCB0aGF0J3Mgd2hhdCB3ZQorYXJlIGltcGxlbWVudGluZykuCisKKzUuIERvIG5vdCBicmVhayBiZWZvcmUgU3BhY2luZ01hcmtzLgorCis2LiBEbyBub3QgYnJlYWsgYWZ0ZXIgUHJlcGVuZCBjaGFyYWN0ZXJzLgorCis3LiBPdGhlcndpc2UsIGJyZWFrIGV2ZXJ5d2hlcmUuCisqLworCitjb25zdCB1aW50MzJfdCBQUklWKHVjcF9nYnRhYmxlKVtdID0geworICAgKDE8PHVjcF9nYkxGKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIDAgQ1IgKi8KKyAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAxIExGICovCisgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgMiBDb250cm9sICovCisgICAoMTw8dWNwX2diRXh0ZW5kKXwoMTw8dWNwX2diU3BhY2luZ01hcmspLCAgICAgICAgICAgICAgICAvKiAgMyBFeHRlbmQgKi8KKyAgICgxPDx1Y3BfZ2JFeHRlbmQpfCgxPDx1Y3BfZ2JQcmVwZW5kKXwgICAgICAgICAgICAgICAgICAgIC8qICA0IFByZXBlbmQgKi8KKyAgICAgKDE8PHVjcF9nYlNwYWNpbmdNYXJrKXwoMTw8dWNwX2diTCl8CisgICAgICgxPDx1Y3BfZ2JWKXwoMTw8dWNwX2diVCl8KDE8PHVjcF9nYkxWKXwKKyAgICAgKDE8PHVjcF9nYkxWVCl8KDE8PHVjcF9nYk90aGVyKSwKKworICAgKDE8PHVjcF9nYkV4dGVuZCl8KDE8PHVjcF9nYlNwYWNpbmdNYXJrKSwgICAgICAgICAgICAgICAgLyogIDUgU3BhY2luZ01hcmsgKi8KKyAgICgxPDx1Y3BfZ2JFeHRlbmQpfCgxPDx1Y3BfZ2JTcGFjaW5nTWFyayl8KDE8PHVjcF9nYkwpfCAgIC8qICA2IEwgKi8KKyAgICAgKDE8PHVjcF9nYkwpfCgxPDx1Y3BfZ2JWKXwoMTw8dWNwX2diTFYpfCgxPDx1Y3BfZ2JMVlQpLAorCisgICAoMTw8dWNwX2diRXh0ZW5kKXwoMTw8dWNwX2diU3BhY2luZ01hcmspfCgxPDx1Y3BfZ2JWKXwgICAvKiAgNyBWICovCisgICAgICgxPDx1Y3BfZ2JUKSwKKworICAgKDE8PHVjcF9nYkV4dGVuZCl8KDE8PHVjcF9nYlNwYWNpbmdNYXJrKXwoMTw8dWNwX2diVCksICAgLyogIDggVCAqLworICAgKDE8PHVjcF9nYkV4dGVuZCl8KDE8PHVjcF9nYlNwYWNpbmdNYXJrKXwoMTw8dWNwX2diVil8ICAgLyogIDkgTFYgKi8KKyAgICAgKDE8PHVjcF9nYlQpLAorCisgICAoMTw8dWNwX2diRXh0ZW5kKXwoMTw8dWNwX2diU3BhY2luZ01hcmspfCgxPDx1Y3BfZ2JUKSwgICAvKiAxMCBMVlQgKi8KKyAgICgxPDx1Y3BfZ2JSZWdpb25hbEluZGljYXRvciksICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDExIFJlZ2lvbmFsSW5kaWNhdG9yICovCisgICAoMTw8dWNwX2diRXh0ZW5kKXwoMTw8dWNwX2diU3BhY2luZ01hcmspICAgICAgICAgICAgICAgICAvKiAxMiBPdGhlciAqLworfTsKKworI2lmZGVmIFNVUFBPUlRfSklUCisvKiBUaGlzIHRhYmxlIHJldmVyc2VzIFBSSVYodWNwX2dlbnR5cGUpLiBXZSBjYW4gc2F2ZSB0aGUgY29zdAorb2YgYSBtZW1vcnkgbG9hZC4gKi8KKworY29uc3QgaW50IFBSSVYodWNwX3R5cGVyYW5nZSlbXSA9IHsKKyAgdWNwX0NjLCB1Y3BfQ3MsCisgIHVjcF9MbCwgdWNwX0x1LAorICB1Y3BfTWMsIHVjcF9NbiwKKyAgdWNwX05kLCB1Y3BfTm8sCisgIHVjcF9QYywgdWNwX1BzLAorICB1Y3BfU2MsIHVjcF9TbywKKyAgdWNwX1psLCB1Y3BfWnMsCit9OworI2VuZGlmIC8qIFNVUFBPUlRfSklUICovCisKKy8qIFRoZSBQUklWKHV0dClbXSB0YWJsZSBiZWxvdyB0cmFuc2xhdGVzIFVuaWNvZGUgcHJvcGVydHkgbmFtZXMgaW50byB0eXBlIGFuZAorY29kZSB2YWx1ZXMuIEl0IGlzIHNlYXJjaGVkIGJ5IGJpbmFyeSBjaG9wLCBzbyBtdXN0IGJlIGluIGNvbGxhdGluZyBzZXF1ZW5jZSBvZgorbmFtZS4gT3JpZ2luYWxseSwgdGhlIHRhYmxlIGNvbnRhaW5lZCBwb2ludGVycyB0byB0aGUgbmFtZSBzdHJpbmdzIGluIHRoZSBmaXJzdAorZmllbGQgb2YgZWFjaCBlbnRyeS4gSG93ZXZlciwgdGhhdCBsZWFkcyB0byBhIGxhcmdlIG51bWJlciBvZiByZWxvY2F0aW9ucyB3aGVuCithIHNoYXJlZCBsaWJyYXJ5IGlzIGR5bmFtaWNhbGx5IGxvYWRlZC4gQSBzaWduaWZpY2FudCByZWR1Y3Rpb24gaXMgbWFkZSBieQorcHV0dGluZyBhbGwgdGhlIG5hbWVzIGludG8gYSBzaW5nbGUsIGxhcmdlIHN0cmluZyBhbmQgdGhlbiB1c2luZyBvZmZzZXRzIGluIHRoZQordGFibGUgaXRzZWxmLiBNYWludGVuYW5jZSBpcyBtb3JlIGVycm9yLXByb25lLCBidXQgZnJlcXVlbnQgY2hhbmdlcyB0byB0aGlzCitkYXRhIGFyZSB1bmxpa2VseS4KKworSnVseSAyMDA4OiBUaGVyZSBpcyBub3cgYSBzY3JpcHQgY2FsbGVkIG1haW50L0dlbmVyYXRlVXR0LnB5IHRoYXQgY2FuIGJlIHVzZWQKK3RvIGdlbmVyYXRlIHRoaXMgZGF0YSBhdXRvbWF0aWNhbGx5IGluc3RlYWQgb2YgbWFpbnRhaW5pbmcgaXQgYnkgaGFuZC4KKworVGhlIHNjcmlwdCB3YXMgdXBkYXRlZCBpbiBNYXJjaCAyMDA5IHRvIGdlbmVyYXRlIGEgbmV3IEVCQ0RJQy1jb21wbGlhbnQKK3ZlcnNpb24uIExpa2UgYWxsIG90aGVyIGNoYXJhY3RlciBhbmQgc3RyaW5nIGxpdGVyYWxzIHRoYXQgYXJlIGNvbXBhcmVkIGFnYWluc3QKK3RoZSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiwgd2UgbXVzdCB1c2UgU1RSXyBtYWNyb3MgaW5zdGVhZCBvZiBsaXRlcmFsCitzdHJpbmdzIHRvIG1ha2Ugc3VyZSB0aGF0IFVURi04IHN1cHBvcnQgd29ya3Mgb24gRUJDRElDIHBsYXRmb3Jtcy4gKi8KKworI2RlZmluZSBTVFJJTkdfQWhvbTAgU1RSX0EgU1RSX2ggU1RSX28gU1RSX20gIlwwIgorI2RlZmluZSBTVFJJTkdfQW5hdG9saWFuX0hpZXJvZ2x5cGhzMCBTVFJfQSBTVFJfbiBTVFJfYSBTVFJfdCBTVFJfbyBTVFJfbCBTVFJfaSBTVFJfYSBTVFJfbiBTVFJfVU5ERVJTQ09SRSBTVFJfSCBTVFJfaSBTVFJfZSBTVFJfciBTVFJfbyBTVFJfZyBTVFJfbCBTVFJfeSBTVFJfcCBTVFJfaCBTVFJfcyAiXDAiCisjZGVmaW5lIFNUUklOR19BbnkwIFNUUl9BIFNUUl9uIFNUUl95ICJcMCIKKyNkZWZpbmUgU1RSSU5HX0FyYWJpYzAgU1RSX0EgU1RSX3IgU1RSX2EgU1RSX2IgU1RSX2kgU1RSX2MgIlwwIgorI2RlZmluZSBTVFJJTkdfQXJtZW5pYW4wIFNUUl9BIFNUUl9yIFNUUl9tIFNUUl9lIFNUUl9uIFNUUl9pIFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX0F2ZXN0YW4wIFNUUl9BIFNUUl92IFNUUl9lIFNUUl9zIFNUUl90IFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX0JhbGluZXNlMCBTVFJfQiBTVFJfYSBTVFJfbCBTVFJfaSBTVFJfbiBTVFJfZSBTVFJfcyBTVFJfZSAiXDAiCisjZGVmaW5lIFNUUklOR19CYW11bTAgU1RSX0IgU1RSX2EgU1RSX20gU1RSX3UgU1RSX20gIlwwIgorI2RlZmluZSBTVFJJTkdfQmFzc2FfVmFoMCBTVFJfQiBTVFJfYSBTVFJfcyBTVFJfcyBTVFJfYSBTVFJfVU5ERVJTQ09SRSBTVFJfViBTVFJfYSBTVFJfaCAiXDAiCisjZGVmaW5lIFNUUklOR19CYXRhazAgU1RSX0IgU1RSX2EgU1RSX3QgU1RSX2EgU1RSX2sgIlwwIgorI2RlZmluZSBTVFJJTkdfQmVuZ2FsaTAgU1RSX0IgU1RSX2UgU1RSX24gU1RSX2cgU1RSX2EgU1RSX2wgU1RSX2kgIlwwIgorI2RlZmluZSBTVFJJTkdfQm9wb21vZm8wIFNUUl9CIFNUUl9vIFNUUl9wIFNUUl9vIFNUUl9tIFNUUl9vIFNUUl9mIFNUUl9vICJcMCIKKyNkZWZpbmUgU1RSSU5HX0JyYWhtaTAgU1RSX0IgU1RSX3IgU1RSX2EgU1RSX2ggU1RSX20gU1RSX2kgIlwwIgorI2RlZmluZSBTVFJJTkdfQnJhaWxsZTAgU1RSX0IgU1RSX3IgU1RSX2EgU1RSX2kgU1RSX2wgU1RSX2wgU1RSX2UgIlwwIgorI2RlZmluZSBTVFJJTkdfQnVnaW5lc2UwIFNUUl9CIFNUUl91IFNUUl9nIFNUUl9pIFNUUl9uIFNUUl9lIFNUUl9zIFNUUl9lICJcMCIKKyNkZWZpbmUgU1RSSU5HX0J1aGlkMCBTVFJfQiBTVFJfdSBTVFJfaCBTVFJfaSBTVFJfZCAiXDAiCisjZGVmaW5lIFNUUklOR19DMCBTVFJfQyAiXDAiCisjZGVmaW5lIFNUUklOR19DYW5hZGlhbl9BYm9yaWdpbmFsMCBTVFJfQyBTVFJfYSBTVFJfbiBTVFJfYSBTVFJfZCBTVFJfaSBTVFJfYSBTVFJfbiBTVFJfVU5ERVJTQ09SRSBTVFJfQSBTVFJfYiBTVFJfbyBTVFJfciBTVFJfaSBTVFJfZyBTVFJfaSBTVFJfbiBTVFJfYSBTVFJfbCAiXDAiCisjZGVmaW5lIFNUUklOR19DYXJpYW4wIFNUUl9DIFNUUl9hIFNUUl9yIFNUUl9pIFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX0NhdWNhc2lhbl9BbGJhbmlhbjAgU1RSX0MgU1RSX2EgU1RSX3UgU1RSX2MgU1RSX2EgU1RSX3MgU1RSX2kgU1RSX2EgU1RSX24gU1RSX1VOREVSU0NPUkUgU1RSX0EgU1RSX2wgU1RSX2IgU1RSX2EgU1RSX24gU1RSX2kgU1RSX2EgU1RSX24gIlwwIgorI2RlZmluZSBTVFJJTkdfQ2MwIFNUUl9DIFNUUl9jICJcMCIKKyNkZWZpbmUgU1RSSU5HX0NmMCBTVFJfQyBTVFJfZiAiXDAiCisjZGVmaW5lIFNUUklOR19DaGFrbWEwIFNUUl9DIFNUUl9oIFNUUl9hIFNUUl9rIFNUUl9tIFNUUl9hICJcMCIKKyNkZWZpbmUgU1RSSU5HX0NoYW0wIFNUUl9DIFNUUl9oIFNUUl9hIFNUUl9tICJcMCIKKyNkZWZpbmUgU1RSSU5HX0NoZXJva2VlMCBTVFJfQyBTVFJfaCBTVFJfZSBTVFJfciBTVFJfbyBTVFJfayBTVFJfZSBTVFJfZSAiXDAiCisjZGVmaW5lIFNUUklOR19DbjAgU1RSX0MgU1RSX24gIlwwIgorI2RlZmluZSBTVFJJTkdfQ28wIFNUUl9DIFNUUl9vICJcMCIKKyNkZWZpbmUgU1RSSU5HX0NvbW1vbjAgU1RSX0MgU1RSX28gU1RSX20gU1RSX20gU1RSX28gU1RSX24gIlwwIgorI2RlZmluZSBTVFJJTkdfQ29wdGljMCBTVFJfQyBTVFJfbyBTVFJfcCBTVFJfdCBTVFJfaSBTVFJfYyAiXDAiCisjZGVmaW5lIFNUUklOR19DczAgU1RSX0MgU1RSX3MgIlwwIgorI2RlZmluZSBTVFJJTkdfQ3VuZWlmb3JtMCBTVFJfQyBTVFJfdSBTVFJfbiBTVFJfZSBTVFJfaSBTVFJfZiBTVFJfbyBTVFJfciBTVFJfbSAiXDAiCisjZGVmaW5lIFNUUklOR19DeXByaW90MCBTVFJfQyBTVFJfeSBTVFJfcCBTVFJfciBTVFJfaSBTVFJfbyBTVFJfdCAiXDAiCisjZGVmaW5lIFNUUklOR19DeXJpbGxpYzAgU1RSX0MgU1RSX3kgU1RSX3IgU1RSX2kgU1RSX2wgU1RSX2wgU1RSX2kgU1RSX2MgIlwwIgorI2RlZmluZSBTVFJJTkdfRGVzZXJldDAgU1RSX0QgU1RSX2UgU1RSX3MgU1RSX2UgU1RSX3IgU1RSX2UgU1RSX3QgIlwwIgorI2RlZmluZSBTVFJJTkdfRGV2YW5hZ2FyaTAgU1RSX0QgU1RSX2UgU1RSX3YgU1RSX2EgU1RSX24gU1RSX2EgU1RSX2cgU1RSX2EgU1RSX3IgU1RSX2kgIlwwIgorI2RlZmluZSBTVFJJTkdfRHVwbG95YW4wIFNUUl9EIFNUUl91IFNUUl9wIFNUUl9sIFNUUl9vIFNUUl95IFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX0VneXB0aWFuX0hpZXJvZ2x5cGhzMCBTVFJfRSBTVFJfZyBTVFJfeSBTVFJfcCBTVFJfdCBTVFJfaSBTVFJfYSBTVFJfbiBTVFJfVU5ERVJTQ09SRSBTVFJfSCBTVFJfaSBTVFJfZSBTVFJfciBTVFJfbyBTVFJfZyBTVFJfbCBTVFJfeSBTVFJfcCBTVFJfaCBTVFJfcyAiXDAiCisjZGVmaW5lIFNUUklOR19FbGJhc2FuMCBTVFJfRSBTVFJfbCBTVFJfYiBTVFJfYSBTVFJfcyBTVFJfYSBTVFJfbiAiXDAiCisjZGVmaW5lIFNUUklOR19FdGhpb3BpYzAgU1RSX0UgU1RSX3QgU1RSX2ggU1RSX2kgU1RSX28gU1RSX3AgU1RSX2kgU1RSX2MgIlwwIgorI2RlZmluZSBTVFJJTkdfR2VvcmdpYW4wIFNUUl9HIFNUUl9lIFNUUl9vIFNUUl9yIFNUUl9nIFNUUl9pIFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX0dsYWdvbGl0aWMwIFNUUl9HIFNUUl9sIFNUUl9hIFNUUl9nIFNUUl9vIFNUUl9sIFNUUl9pIFNUUl90IFNUUl9pIFNUUl9jICJcMCIKKyNkZWZpbmUgU1RSSU5HX0dvdGhpYzAgU1RSX0cgU1RSX28gU1RSX3QgU1RSX2ggU1RSX2kgU1RSX2MgIlwwIgorI2RlZmluZSBTVFJJTkdfR3JhbnRoYTAgU1RSX0cgU1RSX3IgU1RSX2EgU1RSX24gU1RSX3QgU1RSX2ggU1RSX2EgIlwwIgorI2RlZmluZSBTVFJJTkdfR3JlZWswIFNUUl9HIFNUUl9yIFNUUl9lIFNUUl9lIFNUUl9rICJcMCIKKyNkZWZpbmUgU1RSSU5HX0d1amFyYXRpMCBTVFJfRyBTVFJfdSBTVFJfaiBTVFJfYSBTVFJfciBTVFJfYSBTVFJfdCBTVFJfaSAiXDAiCisjZGVmaW5lIFNUUklOR19HdXJtdWtoaTAgU1RSX0cgU1RSX3UgU1RSX3IgU1RSX20gU1RSX3UgU1RSX2sgU1RSX2ggU1RSX2kgIlwwIgorI2RlZmluZSBTVFJJTkdfSGFuMCBTVFJfSCBTVFJfYSBTVFJfbiAiXDAiCisjZGVmaW5lIFNUUklOR19IYW5ndWwwIFNUUl9IIFNUUl9hIFNUUl9uIFNUUl9nIFNUUl91IFNUUl9sICJcMCIKKyNkZWZpbmUgU1RSSU5HX0hhbnVub28wIFNUUl9IIFNUUl9hIFNUUl9uIFNUUl91IFNUUl9uIFNUUl9vIFNUUl9vICJcMCIKKyNkZWZpbmUgU1RSSU5HX0hhdHJhbjAgU1RSX0ggU1RSX2EgU1RSX3QgU1RSX3IgU1RSX2EgU1RSX24gIlwwIgorI2RlZmluZSBTVFJJTkdfSGVicmV3MCBTVFJfSCBTVFJfZSBTVFJfYiBTVFJfciBTVFJfZSBTVFJfdyAiXDAiCisjZGVmaW5lIFNUUklOR19IaXJhZ2FuYTAgU1RSX0ggU1RSX2kgU1RSX3IgU1RSX2EgU1RSX2cgU1RSX2EgU1RSX24gU1RSX2EgIlwwIgorI2RlZmluZSBTVFJJTkdfSW1wZXJpYWxfQXJhbWFpYzAgU1RSX0kgU1RSX20gU1RSX3AgU1RSX2UgU1RSX3IgU1RSX2kgU1RSX2EgU1RSX2wgU1RSX1VOREVSU0NPUkUgU1RSX0EgU1RSX3IgU1RSX2EgU1RSX20gU1RSX2EgU1RSX2kgU1RSX2MgIlwwIgorI2RlZmluZSBTVFJJTkdfSW5oZXJpdGVkMCBTVFJfSSBTVFJfbiBTVFJfaCBTVFJfZSBTVFJfciBTVFJfaSBTVFJfdCBTVFJfZSBTVFJfZCAiXDAiCisjZGVmaW5lIFNUUklOR19JbnNjcmlwdGlvbmFsX1BhaGxhdmkwIFNUUl9JIFNUUl9uIFNUUl9zIFNUUl9jIFNUUl9yIFNUUl9pIFNUUl9wIFNUUl90IFNUUl9pIFNUUl9vIFNUUl9uIFNUUl9hIFNUUl9sIFNUUl9VTkRFUlNDT1JFIFNUUl9QIFNUUl9hIFNUUl9oIFNUUl9sIFNUUl9hIFNUUl92IFNUUl9pICJcMCIKKyNkZWZpbmUgU1RSSU5HX0luc2NyaXB0aW9uYWxfUGFydGhpYW4wIFNUUl9JIFNUUl9uIFNUUl9zIFNUUl9jIFNUUl9yIFNUUl9pIFNUUl9wIFNUUl90IFNUUl9pIFNUUl9vIFNUUl9uIFNUUl9hIFNUUl9sIFNUUl9VTkRFUlNDT1JFIFNUUl9QIFNUUl9hIFNUUl9yIFNUUl90IFNUUl9oIFNUUl9pIFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX0phdmFuZXNlMCBTVFJfSiBTVFJfYSBTVFJfdiBTVFJfYSBTVFJfbiBTVFJfZSBTVFJfcyBTVFJfZSAiXDAiCisjZGVmaW5lIFNUUklOR19LYWl0aGkwIFNUUl9LIFNUUl9hIFNUUl9pIFNUUl90IFNUUl9oIFNUUl9pICJcMCIKKyNkZWZpbmUgU1RSSU5HX0thbm5hZGEwIFNUUl9LIFNUUl9hIFNUUl9uIFNUUl9uIFNUUl9hIFNUUl9kIFNUUl9hICJcMCIKKyNkZWZpbmUgU1RSSU5HX0thdGFrYW5hMCBTVFJfSyBTVFJfYSBTVFJfdCBTVFJfYSBTVFJfayBTVFJfYSBTVFJfbiBTVFJfYSAiXDAiCisjZGVmaW5lIFNUUklOR19LYXlhaF9MaTAgU1RSX0sgU1RSX2EgU1RSX3kgU1RSX2EgU1RSX2ggU1RSX1VOREVSU0NPUkUgU1RSX0wgU1RSX2kgIlwwIgorI2RlZmluZSBTVFJJTkdfS2hhcm9zaHRoaTAgU1RSX0sgU1RSX2ggU1RSX2EgU1RSX3IgU1RSX28gU1RSX3MgU1RSX2ggU1RSX3QgU1RSX2ggU1RSX2kgIlwwIgorI2RlZmluZSBTVFJJTkdfS2htZXIwIFNUUl9LIFNUUl9oIFNUUl9tIFNUUl9lIFNUUl9yICJcMCIKKyNkZWZpbmUgU1RSSU5HX0tob2praTAgU1RSX0sgU1RSX2ggU1RSX28gU1RSX2ogU1RSX2sgU1RSX2kgIlwwIgorI2RlZmluZSBTVFJJTkdfS2h1ZGF3YWRpMCBTVFJfSyBTVFJfaCBTVFJfdSBTVFJfZCBTVFJfYSBTVFJfdyBTVFJfYSBTVFJfZCBTVFJfaSAiXDAiCisjZGVmaW5lIFNUUklOR19MMCBTVFJfTCAiXDAiCisjZGVmaW5lIFNUUklOR19MX0FNUEVSU0FORDAgU1RSX0wgU1RSX0FNUEVSU0FORCAiXDAiCisjZGVmaW5lIFNUUklOR19MYW8wIFNUUl9MIFNUUl9hIFNUUl9vICJcMCIKKyNkZWZpbmUgU1RSSU5HX0xhdGluMCBTVFJfTCBTVFJfYSBTVFJfdCBTVFJfaSBTVFJfbiAiXDAiCisjZGVmaW5lIFNUUklOR19MZXBjaGEwIFNUUl9MIFNUUl9lIFNUUl9wIFNUUl9jIFNUUl9oIFNUUl9hICJcMCIKKyNkZWZpbmUgU1RSSU5HX0xpbWJ1MCBTVFJfTCBTVFJfaSBTVFJfbSBTVFJfYiBTVFJfdSAiXDAiCisjZGVmaW5lIFNUUklOR19MaW5lYXJfQTAgU1RSX0wgU1RSX2kgU1RSX24gU1RSX2UgU1RSX2EgU1RSX3IgU1RSX1VOREVSU0NPUkUgU1RSX0EgIlwwIgorI2RlZmluZSBTVFJJTkdfTGluZWFyX0IwIFNUUl9MIFNUUl9pIFNUUl9uIFNUUl9lIFNUUl9hIFNUUl9yIFNUUl9VTkRFUlNDT1JFIFNUUl9CICJcMCIKKyNkZWZpbmUgU1RSSU5HX0xpc3UwIFNUUl9MIFNUUl9pIFNUUl9zIFNUUl91ICJcMCIKKyNkZWZpbmUgU1RSSU5HX0xsMCBTVFJfTCBTVFJfbCAiXDAiCisjZGVmaW5lIFNUUklOR19MbTAgU1RSX0wgU1RSX20gIlwwIgorI2RlZmluZSBTVFJJTkdfTG8wIFNUUl9MIFNUUl9vICJcMCIKKyNkZWZpbmUgU1RSSU5HX0x0MCBTVFJfTCBTVFJfdCAiXDAiCisjZGVmaW5lIFNUUklOR19MdTAgU1RSX0wgU1RSX3UgIlwwIgorI2RlZmluZSBTVFJJTkdfTHljaWFuMCBTVFJfTCBTVFJfeSBTVFJfYyBTVFJfaSBTVFJfYSBTVFJfbiAiXDAiCisjZGVmaW5lIFNUUklOR19MeWRpYW4wIFNUUl9MIFNUUl95IFNUUl9kIFNUUl9pIFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX00wIFNUUl9NICJcMCIKKyNkZWZpbmUgU1RSSU5HX01haGFqYW5pMCBTVFJfTSBTVFJfYSBTVFJfaCBTVFJfYSBTVFJfaiBTVFJfYSBTVFJfbiBTVFJfaSAiXDAiCisjZGVmaW5lIFNUUklOR19NYWxheWFsYW0wIFNUUl9NIFNUUl9hIFNUUl9sIFNUUl9hIFNUUl95IFNUUl9hIFNUUl9sIFNUUl9hIFNUUl9tICJcMCIKKyNkZWZpbmUgU1RSSU5HX01hbmRhaWMwIFNUUl9NIFNUUl9hIFNUUl9uIFNUUl9kIFNUUl9hIFNUUl9pIFNUUl9jICJcMCIKKyNkZWZpbmUgU1RSSU5HX01hbmljaGFlYW4wIFNUUl9NIFNUUl9hIFNUUl9uIFNUUl9pIFNUUl9jIFNUUl9oIFNUUl9hIFNUUl9lIFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX01jMCBTVFJfTSBTVFJfYyAiXDAiCisjZGVmaW5lIFNUUklOR19NZTAgU1RSX00gU1RSX2UgIlwwIgorI2RlZmluZSBTVFJJTkdfTWVldGVpX01heWVrMCBTVFJfTSBTVFJfZSBTVFJfZSBTVFJfdCBTVFJfZSBTVFJfaSBTVFJfVU5ERVJTQ09SRSBTVFJfTSBTVFJfYSBTVFJfeSBTVFJfZSBTVFJfayAiXDAiCisjZGVmaW5lIFNUUklOR19NZW5kZV9LaWtha3VpMCBTVFJfTSBTVFJfZSBTVFJfbiBTVFJfZCBTVFJfZSBTVFJfVU5ERVJTQ09SRSBTVFJfSyBTVFJfaSBTVFJfayBTVFJfYSBTVFJfayBTVFJfdSBTVFJfaSAiXDAiCisjZGVmaW5lIFNUUklOR19NZXJvaXRpY19DdXJzaXZlMCBTVFJfTSBTVFJfZSBTVFJfciBTVFJfbyBTVFJfaSBTVFJfdCBTVFJfaSBTVFJfYyBTVFJfVU5ERVJTQ09SRSBTVFJfQyBTVFJfdSBTVFJfciBTVFJfcyBTVFJfaSBTVFJfdiBTVFJfZSAiXDAiCisjZGVmaW5lIFNUUklOR19NZXJvaXRpY19IaWVyb2dseXBoczAgU1RSX00gU1RSX2UgU1RSX3IgU1RSX28gU1RSX2kgU1RSX3QgU1RSX2kgU1RSX2MgU1RSX1VOREVSU0NPUkUgU1RSX0ggU1RSX2kgU1RSX2UgU1RSX3IgU1RSX28gU1RSX2cgU1RSX2wgU1RSX3kgU1RSX3AgU1RSX2ggU1RSX3MgIlwwIgorI2RlZmluZSBTVFJJTkdfTWlhbzAgU1RSX00gU1RSX2kgU1RSX2EgU1RSX28gIlwwIgorI2RlZmluZSBTVFJJTkdfTW4wIFNUUl9NIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX01vZGkwIFNUUl9NIFNUUl9vIFNUUl9kIFNUUl9pICJcMCIKKyNkZWZpbmUgU1RSSU5HX01vbmdvbGlhbjAgU1RSX00gU1RSX28gU1RSX24gU1RSX2cgU1RSX28gU1RSX2wgU1RSX2kgU1RSX2EgU1RSX24gIlwwIgorI2RlZmluZSBTVFJJTkdfTXJvMCBTVFJfTSBTVFJfciBTVFJfbyAiXDAiCisjZGVmaW5lIFNUUklOR19NdWx0YW5pMCBTVFJfTSBTVFJfdSBTVFJfbCBTVFJfdCBTVFJfYSBTVFJfbiBTVFJfaSAiXDAiCisjZGVmaW5lIFNUUklOR19NeWFubWFyMCBTVFJfTSBTVFJfeSBTVFJfYSBTVFJfbiBTVFJfbSBTVFJfYSBTVFJfciAiXDAiCisjZGVmaW5lIFNUUklOR19OMCBTVFJfTiAiXDAiCisjZGVmaW5lIFNUUklOR19OYWJhdGFlYW4wIFNUUl9OIFNUUl9hIFNUUl9iIFNUUl9hIFNUUl90IFNUUl9hIFNUUl9lIFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX05kMCBTVFJfTiBTVFJfZCAiXDAiCisjZGVmaW5lIFNUUklOR19OZXdfVGFpX0x1ZTAgU1RSX04gU1RSX2UgU1RSX3cgU1RSX1VOREVSU0NPUkUgU1RSX1QgU1RSX2EgU1RSX2kgU1RSX1VOREVSU0NPUkUgU1RSX0wgU1RSX3UgU1RSX2UgIlwwIgorI2RlZmluZSBTVFJJTkdfTmtvMCBTVFJfTiBTVFJfayBTVFJfbyAiXDAiCisjZGVmaW5lIFNUUklOR19ObDAgU1RSX04gU1RSX2wgIlwwIgorI2RlZmluZSBTVFJJTkdfTm8wIFNUUl9OIFNUUl9vICJcMCIKKyNkZWZpbmUgU1RSSU5HX09naGFtMCBTVFJfTyBTVFJfZyBTVFJfaCBTVFJfYSBTVFJfbSAiXDAiCisjZGVmaW5lIFNUUklOR19PbF9DaGlraTAgU1RSX08gU1RSX2wgU1RSX1VOREVSU0NPUkUgU1RSX0MgU1RSX2ggU1RSX2kgU1RSX2sgU1RSX2kgIlwwIgorI2RlZmluZSBTVFJJTkdfT2xkX0h1bmdhcmlhbjAgU1RSX08gU1RSX2wgU1RSX2QgU1RSX1VOREVSU0NPUkUgU1RSX0ggU1RSX3UgU1RSX24gU1RSX2cgU1RSX2EgU1RSX3IgU1RSX2kgU1RSX2EgU1RSX24gIlwwIgorI2RlZmluZSBTVFJJTkdfT2xkX0l0YWxpYzAgU1RSX08gU1RSX2wgU1RSX2QgU1RSX1VOREVSU0NPUkUgU1RSX0kgU1RSX3QgU1RSX2EgU1RSX2wgU1RSX2kgU1RSX2MgIlwwIgorI2RlZmluZSBTVFJJTkdfT2xkX05vcnRoX0FyYWJpYW4wIFNUUl9PIFNUUl9sIFNUUl9kIFNUUl9VTkRFUlNDT1JFIFNUUl9OIFNUUl9vIFNUUl9yIFNUUl90IFNUUl9oIFNUUl9VTkRFUlNDT1JFIFNUUl9BIFNUUl9yIFNUUl9hIFNUUl9iIFNUUl9pIFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX09sZF9QZXJtaWMwIFNUUl9PIFNUUl9sIFNUUl9kIFNUUl9VTkRFUlNDT1JFIFNUUl9QIFNUUl9lIFNUUl9yIFNUUl9tIFNUUl9pIFNUUl9jICJcMCIKKyNkZWZpbmUgU1RSSU5HX09sZF9QZXJzaWFuMCBTVFJfTyBTVFJfbCBTVFJfZCBTVFJfVU5ERVJTQ09SRSBTVFJfUCBTVFJfZSBTVFJfciBTVFJfcyBTVFJfaSBTVFJfYSBTVFJfbiAiXDAiCisjZGVmaW5lIFNUUklOR19PbGRfU291dGhfQXJhYmlhbjAgU1RSX08gU1RSX2wgU1RSX2QgU1RSX1VOREVSU0NPUkUgU1RSX1MgU1RSX28gU1RSX3UgU1RSX3QgU1RSX2ggU1RSX1VOREVSU0NPUkUgU1RSX0EgU1RSX3IgU1RSX2EgU1RSX2IgU1RSX2kgU1RSX2EgU1RSX24gIlwwIgorI2RlZmluZSBTVFJJTkdfT2xkX1R1cmtpYzAgU1RSX08gU1RSX2wgU1RSX2QgU1RSX1VOREVSU0NPUkUgU1RSX1QgU1RSX3UgU1RSX3IgU1RSX2sgU1RSX2kgU1RSX2MgIlwwIgorI2RlZmluZSBTVFJJTkdfT3JpeWEwIFNUUl9PIFNUUl9yIFNUUl9pIFNUUl95IFNUUl9hICJcMCIKKyNkZWZpbmUgU1RSSU5HX09zbWFueWEwIFNUUl9PIFNUUl9zIFNUUl9tIFNUUl9hIFNUUl9uIFNUUl95IFNUUl9hICJcMCIKKyNkZWZpbmUgU1RSSU5HX1AwIFNUUl9QICJcMCIKKyNkZWZpbmUgU1RSSU5HX1BhaGF3aF9IbW9uZzAgU1RSX1AgU1RSX2EgU1RSX2ggU1RSX2EgU1RSX3cgU1RSX2ggU1RSX1VOREVSU0NPUkUgU1RSX0ggU1RSX20gU1RSX28gU1RSX24gU1RSX2cgIlwwIgorI2RlZmluZSBTVFJJTkdfUGFsbXlyZW5lMCBTVFJfUCBTVFJfYSBTVFJfbCBTVFJfbSBTVFJfeSBTVFJfciBTVFJfZSBTVFJfbiBTVFJfZSAiXDAiCisjZGVmaW5lIFNUUklOR19QYXVfQ2luX0hhdTAgU1RSX1AgU1RSX2EgU1RSX3UgU1RSX1VOREVSU0NPUkUgU1RSX0MgU1RSX2kgU1RSX24gU1RSX1VOREVSU0NPUkUgU1RSX0ggU1RSX2EgU1RSX3UgIlwwIgorI2RlZmluZSBTVFJJTkdfUGMwIFNUUl9QIFNUUl9jICJcMCIKKyNkZWZpbmUgU1RSSU5HX1BkMCBTVFJfUCBTVFJfZCAiXDAiCisjZGVmaW5lIFNUUklOR19QZTAgU1RSX1AgU1RSX2UgIlwwIgorI2RlZmluZSBTVFJJTkdfUGYwIFNUUl9QIFNUUl9mICJcMCIKKyNkZWZpbmUgU1RSSU5HX1BoYWdzX1BhMCBTVFJfUCBTVFJfaCBTVFJfYSBTVFJfZyBTVFJfcyBTVFJfVU5ERVJTQ09SRSBTVFJfUCBTVFJfYSAiXDAiCisjZGVmaW5lIFNUUklOR19QaG9lbmljaWFuMCBTVFJfUCBTVFJfaCBTVFJfbyBTVFJfZSBTVFJfbiBTVFJfaSBTVFJfYyBTVFJfaSBTVFJfYSBTVFJfbiAiXDAiCisjZGVmaW5lIFNUUklOR19QaTAgU1RSX1AgU1RSX2kgIlwwIgorI2RlZmluZSBTVFJJTkdfUG8wIFNUUl9QIFNUUl9vICJcMCIKKyNkZWZpbmUgU1RSSU5HX1BzMCBTVFJfUCBTVFJfcyAiXDAiCisjZGVmaW5lIFNUUklOR19Qc2FsdGVyX1BhaGxhdmkwIFNUUl9QIFNUUl9zIFNUUl9hIFNUUl9sIFNUUl90IFNUUl9lIFNUUl9yIFNUUl9VTkRFUlNDT1JFIFNUUl9QIFNUUl9hIFNUUl9oIFNUUl9sIFNUUl9hIFNUUl92IFNUUl9pICJcMCIKKyNkZWZpbmUgU1RSSU5HX1JlamFuZzAgU1RSX1IgU1RSX2UgU1RSX2ogU1RSX2EgU1RSX24gU1RSX2cgIlwwIgorI2RlZmluZSBTVFJJTkdfUnVuaWMwIFNUUl9SIFNUUl91IFNUUl9uIFNUUl9pIFNUUl9jICJcMCIKKyNkZWZpbmUgU1RSSU5HX1MwIFNUUl9TICJcMCIKKyNkZWZpbmUgU1RSSU5HX1NhbWFyaXRhbjAgU1RSX1MgU1RSX2EgU1RSX20gU1RSX2EgU1RSX3IgU1RSX2kgU1RSX3QgU1RSX2EgU1RSX24gIlwwIgorI2RlZmluZSBTVFJJTkdfU2F1cmFzaHRyYTAgU1RSX1MgU1RSX2EgU1RSX3UgU1RSX3IgU1RSX2EgU1RSX3MgU1RSX2ggU1RSX3QgU1RSX3IgU1RSX2EgIlwwIgorI2RlZmluZSBTVFJJTkdfU2MwIFNUUl9TIFNUUl9jICJcMCIKKyNkZWZpbmUgU1RSSU5HX1NoYXJhZGEwIFNUUl9TIFNUUl9oIFNUUl9hIFNUUl9yIFNUUl9hIFNUUl9kIFNUUl9hICJcMCIKKyNkZWZpbmUgU1RSSU5HX1NoYXZpYW4wIFNUUl9TIFNUUl9oIFNUUl9hIFNUUl92IFNUUl9pIFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX1NpZGRoYW0wIFNUUl9TIFNUUl9pIFNUUl9kIFNUUl9kIFNUUl9oIFNUUl9hIFNUUl9tICJcMCIKKyNkZWZpbmUgU1RSSU5HX1NpZ25Xcml0aW5nMCBTVFJfUyBTVFJfaSBTVFJfZyBTVFJfbiBTVFJfVyBTVFJfciBTVFJfaSBTVFJfdCBTVFJfaSBTVFJfbiBTVFJfZyAiXDAiCisjZGVmaW5lIFNUUklOR19TaW5oYWxhMCBTVFJfUyBTVFJfaSBTVFJfbiBTVFJfaCBTVFJfYSBTVFJfbCBTVFJfYSAiXDAiCisjZGVmaW5lIFNUUklOR19TazAgU1RSX1MgU1RSX2sgIlwwIgorI2RlZmluZSBTVFJJTkdfU20wIFNUUl9TIFNUUl9tICJcMCIKKyNkZWZpbmUgU1RSSU5HX1NvMCBTVFJfUyBTVFJfbyAiXDAiCisjZGVmaW5lIFNUUklOR19Tb3JhX1NvbXBlbmcwIFNUUl9TIFNUUl9vIFNUUl9yIFNUUl9hIFNUUl9VTkRFUlNDT1JFIFNUUl9TIFNUUl9vIFNUUl9tIFNUUl9wIFNUUl9lIFNUUl9uIFNUUl9nICJcMCIKKyNkZWZpbmUgU1RSSU5HX1N1bmRhbmVzZTAgU1RSX1MgU1RSX3UgU1RSX24gU1RSX2QgU1RSX2EgU1RSX24gU1RSX2UgU1RSX3MgU1RSX2UgIlwwIgorI2RlZmluZSBTVFJJTkdfU3lsb3RpX05hZ3JpMCBTVFJfUyBTVFJfeSBTVFJfbCBTVFJfbyBTVFJfdCBTVFJfaSBTVFJfVU5ERVJTQ09SRSBTVFJfTiBTVFJfYSBTVFJfZyBTVFJfciBTVFJfaSAiXDAiCisjZGVmaW5lIFNUUklOR19TeXJpYWMwIFNUUl9TIFNUUl95IFNUUl9yIFNUUl9pIFNUUl9hIFNUUl9jICJcMCIKKyNkZWZpbmUgU1RSSU5HX1RhZ2Fsb2cwIFNUUl9UIFNUUl9hIFNUUl9nIFNUUl9hIFNUUl9sIFNUUl9vIFNUUl9nICJcMCIKKyNkZWZpbmUgU1RSSU5HX1RhZ2JhbndhMCBTVFJfVCBTVFJfYSBTVFJfZyBTVFJfYiBTVFJfYSBTVFJfbiBTVFJfdyBTVFJfYSAiXDAiCisjZGVmaW5lIFNUUklOR19UYWlfTGUwIFNUUl9UIFNUUl9hIFNUUl9pIFNUUl9VTkRFUlNDT1JFIFNUUl9MIFNUUl9lICJcMCIKKyNkZWZpbmUgU1RSSU5HX1RhaV9UaGFtMCBTVFJfVCBTVFJfYSBTVFJfaSBTVFJfVU5ERVJTQ09SRSBTVFJfVCBTVFJfaCBTVFJfYSBTVFJfbSAiXDAiCisjZGVmaW5lIFNUUklOR19UYWlfVmlldDAgU1RSX1QgU1RSX2EgU1RSX2kgU1RSX1VOREVSU0NPUkUgU1RSX1YgU1RSX2kgU1RSX2UgU1RSX3QgIlwwIgorI2RlZmluZSBTVFJJTkdfVGFrcmkwIFNUUl9UIFNUUl9hIFNUUl9rIFNUUl9yIFNUUl9pICJcMCIKKyNkZWZpbmUgU1RSSU5HX1RhbWlsMCBTVFJfVCBTVFJfYSBTVFJfbSBTVFJfaSBTVFJfbCAiXDAiCisjZGVmaW5lIFNUUklOR19UZWx1Z3UwIFNUUl9UIFNUUl9lIFNUUl9sIFNUUl91IFNUUl9nIFNUUl91ICJcMCIKKyNkZWZpbmUgU1RSSU5HX1RoYWFuYTAgU1RSX1QgU1RSX2ggU1RSX2EgU1RSX2EgU1RSX24gU1RSX2EgIlwwIgorI2RlZmluZSBTVFJJTkdfVGhhaTAgU1RSX1QgU1RSX2ggU1RSX2EgU1RSX2kgIlwwIgorI2RlZmluZSBTVFJJTkdfVGliZXRhbjAgU1RSX1QgU1RSX2kgU1RSX2IgU1RSX2UgU1RSX3QgU1RSX2EgU1RSX24gIlwwIgorI2RlZmluZSBTVFJJTkdfVGlmaW5hZ2gwIFNUUl9UIFNUUl9pIFNUUl9mIFNUUl9pIFNUUl9uIFNUUl9hIFNUUl9nIFNUUl9oICJcMCIKKyNkZWZpbmUgU1RSSU5HX1Rpcmh1dGEwIFNUUl9UIFNUUl9pIFNUUl9yIFNUUl9oIFNUUl91IFNUUl90IFNUUl9hICJcMCIKKyNkZWZpbmUgU1RSSU5HX1VnYXJpdGljMCBTVFJfVSBTVFJfZyBTVFJfYSBTVFJfciBTVFJfaSBTVFJfdCBTVFJfaSBTVFJfYyAiXDAiCisjZGVmaW5lIFNUUklOR19WYWkwIFNUUl9WIFNUUl9hIFNUUl9pICJcMCIKKyNkZWZpbmUgU1RSSU5HX1dhcmFuZ19DaXRpMCBTVFJfVyBTVFJfYSBTVFJfciBTVFJfYSBTVFJfbiBTVFJfZyBTVFJfVU5ERVJTQ09SRSBTVFJfQyBTVFJfaSBTVFJfdCBTVFJfaSAiXDAiCisjZGVmaW5lIFNUUklOR19YYW4wIFNUUl9YIFNUUl9hIFNUUl9uICJcMCIKKyNkZWZpbmUgU1RSSU5HX1hwczAgU1RSX1ggU1RSX3AgU1RSX3MgIlwwIgorI2RlZmluZSBTVFJJTkdfWHNwMCBTVFJfWCBTVFJfcyBTVFJfcCAiXDAiCisjZGVmaW5lIFNUUklOR19YdWMwIFNUUl9YIFNUUl91IFNUUl9jICJcMCIKKyNkZWZpbmUgU1RSSU5HX1h3ZDAgU1RSX1ggU1RSX3cgU1RSX2QgIlwwIgorI2RlZmluZSBTVFJJTkdfWWkwIFNUUl9ZIFNUUl9pICJcMCIKKyNkZWZpbmUgU1RSSU5HX1owIFNUUl9aICJcMCIKKyNkZWZpbmUgU1RSSU5HX1psMCBTVFJfWiBTVFJfbCAiXDAiCisjZGVmaW5lIFNUUklOR19acDAgU1RSX1ogU1RSX3AgIlwwIgorI2RlZmluZSBTVFJJTkdfWnMwIFNUUl9aIFNUUl9zICJcMCIKKworY29uc3QgY2hhciBQUklWKHV0dF9uYW1lcylbXSA9CisgIFNUUklOR19BaG9tMAorICBTVFJJTkdfQW5hdG9saWFuX0hpZXJvZ2x5cGhzMAorICBTVFJJTkdfQW55MAorICBTVFJJTkdfQXJhYmljMAorICBTVFJJTkdfQXJtZW5pYW4wCisgIFNUUklOR19BdmVzdGFuMAorICBTVFJJTkdfQmFsaW5lc2UwCisgIFNUUklOR19CYW11bTAKKyAgU1RSSU5HX0Jhc3NhX1ZhaDAKKyAgU1RSSU5HX0JhdGFrMAorICBTVFJJTkdfQmVuZ2FsaTAKKyAgU1RSSU5HX0JvcG9tb2ZvMAorICBTVFJJTkdfQnJhaG1pMAorICBTVFJJTkdfQnJhaWxsZTAKKyAgU1RSSU5HX0J1Z2luZXNlMAorICBTVFJJTkdfQnVoaWQwCisgIFNUUklOR19DMAorICBTVFJJTkdfQ2FuYWRpYW5fQWJvcmlnaW5hbDAKKyAgU1RSSU5HX0NhcmlhbjAKKyAgU1RSSU5HX0NhdWNhc2lhbl9BbGJhbmlhbjAKKyAgU1RSSU5HX0NjMAorICBTVFJJTkdfQ2YwCisgIFNUUklOR19DaGFrbWEwCisgIFNUUklOR19DaGFtMAorICBTVFJJTkdfQ2hlcm9rZWUwCisgIFNUUklOR19DbjAKKyAgU1RSSU5HX0NvMAorICBTVFJJTkdfQ29tbW9uMAorICBTVFJJTkdfQ29wdGljMAorICBTVFJJTkdfQ3MwCisgIFNUUklOR19DdW5laWZvcm0wCisgIFNUUklOR19DeXByaW90MAorICBTVFJJTkdfQ3lyaWxsaWMwCisgIFNUUklOR19EZXNlcmV0MAorICBTVFJJTkdfRGV2YW5hZ2FyaTAKKyAgU1RSSU5HX0R1cGxveWFuMAorICBTVFJJTkdfRWd5cHRpYW5fSGllcm9nbHlwaHMwCisgIFNUUklOR19FbGJhc2FuMAorICBTVFJJTkdfRXRoaW9waWMwCisgIFNUUklOR19HZW9yZ2lhbjAKKyAgU1RSSU5HX0dsYWdvbGl0aWMwCisgIFNUUklOR19Hb3RoaWMwCisgIFNUUklOR19HcmFudGhhMAorICBTVFJJTkdfR3JlZWswCisgIFNUUklOR19HdWphcmF0aTAKKyAgU1RSSU5HX0d1cm11a2hpMAorICBTVFJJTkdfSGFuMAorICBTVFJJTkdfSGFuZ3VsMAorICBTVFJJTkdfSGFudW5vbzAKKyAgU1RSSU5HX0hhdHJhbjAKKyAgU1RSSU5HX0hlYnJldzAKKyAgU1RSSU5HX0hpcmFnYW5hMAorICBTVFJJTkdfSW1wZXJpYWxfQXJhbWFpYzAKKyAgU1RSSU5HX0luaGVyaXRlZDAKKyAgU1RSSU5HX0luc2NyaXB0aW9uYWxfUGFobGF2aTAKKyAgU1RSSU5HX0luc2NyaXB0aW9uYWxfUGFydGhpYW4wCisgIFNUUklOR19KYXZhbmVzZTAKKyAgU1RSSU5HX0thaXRoaTAKKyAgU1RSSU5HX0thbm5hZGEwCisgIFNUUklOR19LYXRha2FuYTAKKyAgU1RSSU5HX0theWFoX0xpMAorICBTVFJJTkdfS2hhcm9zaHRoaTAKKyAgU1RSSU5HX0tobWVyMAorICBTVFJJTkdfS2hvamtpMAorICBTVFJJTkdfS2h1ZGF3YWRpMAorICBTVFJJTkdfTDAKKyAgU1RSSU5HX0xfQU1QRVJTQU5EMAorICBTVFJJTkdfTGFvMAorICBTVFJJTkdfTGF0aW4wCisgIFNUUklOR19MZXBjaGEwCisgIFNUUklOR19MaW1idTAKKyAgU1RSSU5HX0xpbmVhcl9BMAorICBTVFJJTkdfTGluZWFyX0IwCisgIFNUUklOR19MaXN1MAorICBTVFJJTkdfTGwwCisgIFNUUklOR19MbTAKKyAgU1RSSU5HX0xvMAorICBTVFJJTkdfTHQwCisgIFNUUklOR19MdTAKKyAgU1RSSU5HX0x5Y2lhbjAKKyAgU1RSSU5HX0x5ZGlhbjAKKyAgU1RSSU5HX00wCisgIFNUUklOR19NYWhhamFuaTAKKyAgU1RSSU5HX01hbGF5YWxhbTAKKyAgU1RSSU5HX01hbmRhaWMwCisgIFNUUklOR19NYW5pY2hhZWFuMAorICBTVFJJTkdfTWMwCisgIFNUUklOR19NZTAKKyAgU1RSSU5HX01lZXRlaV9NYXllazAKKyAgU1RSSU5HX01lbmRlX0tpa2FrdWkwCisgIFNUUklOR19NZXJvaXRpY19DdXJzaXZlMAorICBTVFJJTkdfTWVyb2l0aWNfSGllcm9nbHlwaHMwCisgIFNUUklOR19NaWFvMAorICBTVFJJTkdfTW4wCisgIFNUUklOR19Nb2RpMAorICBTVFJJTkdfTW9uZ29saWFuMAorICBTVFJJTkdfTXJvMAorICBTVFJJTkdfTXVsdGFuaTAKKyAgU1RSSU5HX015YW5tYXIwCisgIFNUUklOR19OMAorICBTVFJJTkdfTmFiYXRhZWFuMAorICBTVFJJTkdfTmQwCisgIFNUUklOR19OZXdfVGFpX0x1ZTAKKyAgU1RSSU5HX05rbzAKKyAgU1RSSU5HX05sMAorICBTVFJJTkdfTm8wCisgIFNUUklOR19PZ2hhbTAKKyAgU1RSSU5HX09sX0NoaWtpMAorICBTVFJJTkdfT2xkX0h1bmdhcmlhbjAKKyAgU1RSSU5HX09sZF9JdGFsaWMwCisgIFNUUklOR19PbGRfTm9ydGhfQXJhYmlhbjAKKyAgU1RSSU5HX09sZF9QZXJtaWMwCisgIFNUUklOR19PbGRfUGVyc2lhbjAKKyAgU1RSSU5HX09sZF9Tb3V0aF9BcmFiaWFuMAorICBTVFJJTkdfT2xkX1R1cmtpYzAKKyAgU1RSSU5HX09yaXlhMAorICBTVFJJTkdfT3NtYW55YTAKKyAgU1RSSU5HX1AwCisgIFNUUklOR19QYWhhd2hfSG1vbmcwCisgIFNUUklOR19QYWxteXJlbmUwCisgIFNUUklOR19QYXVfQ2luX0hhdTAKKyAgU1RSSU5HX1BjMAorICBTVFJJTkdfUGQwCisgIFNUUklOR19QZTAKKyAgU1RSSU5HX1BmMAorICBTVFJJTkdfUGhhZ3NfUGEwCisgIFNUUklOR19QaG9lbmljaWFuMAorICBTVFJJTkdfUGkwCisgIFNUUklOR19QbzAKKyAgU1RSSU5HX1BzMAorICBTVFJJTkdfUHNhbHRlcl9QYWhsYXZpMAorICBTVFJJTkdfUmVqYW5nMAorICBTVFJJTkdfUnVuaWMwCisgIFNUUklOR19TMAorICBTVFJJTkdfU2FtYXJpdGFuMAorICBTVFJJTkdfU2F1cmFzaHRyYTAKKyAgU1RSSU5HX1NjMAorICBTVFJJTkdfU2hhcmFkYTAKKyAgU1RSSU5HX1NoYXZpYW4wCisgIFNUUklOR19TaWRkaGFtMAorICBTVFJJTkdfU2lnbldyaXRpbmcwCisgIFNUUklOR19TaW5oYWxhMAorICBTVFJJTkdfU2swCisgIFNUUklOR19TbTAKKyAgU1RSSU5HX1NvMAorICBTVFJJTkdfU29yYV9Tb21wZW5nMAorICBTVFJJTkdfU3VuZGFuZXNlMAorICBTVFJJTkdfU3lsb3RpX05hZ3JpMAorICBTVFJJTkdfU3lyaWFjMAorICBTVFJJTkdfVGFnYWxvZzAKKyAgU1RSSU5HX1RhZ2JhbndhMAorICBTVFJJTkdfVGFpX0xlMAorICBTVFJJTkdfVGFpX1RoYW0wCisgIFNUUklOR19UYWlfVmlldDAKKyAgU1RSSU5HX1Rha3JpMAorICBTVFJJTkdfVGFtaWwwCisgIFNUUklOR19UZWx1Z3UwCisgIFNUUklOR19UaGFhbmEwCisgIFNUUklOR19UaGFpMAorICBTVFJJTkdfVGliZXRhbjAKKyAgU1RSSU5HX1RpZmluYWdoMAorICBTVFJJTkdfVGlyaHV0YTAKKyAgU1RSSU5HX1VnYXJpdGljMAorICBTVFJJTkdfVmFpMAorICBTVFJJTkdfV2FyYW5nX0NpdGkwCisgIFNUUklOR19YYW4wCisgIFNUUklOR19YcHMwCisgIFNUUklOR19Yc3AwCisgIFNUUklOR19YdWMwCisgIFNUUklOR19Yd2QwCisgIFNUUklOR19ZaTAKKyAgU1RSSU5HX1owCisgIFNUUklOR19abDAKKyAgU1RSSU5HX1pwMAorICBTVFJJTkdfWnMwOworCitjb25zdCB1Y3BfdHlwZV90YWJsZSBQUklWKHV0dClbXSA9IHsKKyAgeyAgIDAsIFBUX1NDLCB1Y3BfQWhvbSB9LAorICB7ICAgNSwgUFRfU0MsIHVjcF9BbmF0b2xpYW5fSGllcm9nbHlwaHMgfSwKKyAgeyAgMjcsIFBUX0FOWSwgMCB9LAorICB7ICAzMSwgUFRfU0MsIHVjcF9BcmFiaWMgfSwKKyAgeyAgMzgsIFBUX1NDLCB1Y3BfQXJtZW5pYW4gfSwKKyAgeyAgNDcsIFBUX1NDLCB1Y3BfQXZlc3RhbiB9LAorICB7ICA1NSwgUFRfU0MsIHVjcF9CYWxpbmVzZSB9LAorICB7ICA2NCwgUFRfU0MsIHVjcF9CYW11bSB9LAorICB7ICA3MCwgUFRfU0MsIHVjcF9CYXNzYV9WYWggfSwKKyAgeyAgODAsIFBUX1NDLCB1Y3BfQmF0YWsgfSwKKyAgeyAgODYsIFBUX1NDLCB1Y3BfQmVuZ2FsaSB9LAorICB7ICA5NCwgUFRfU0MsIHVjcF9Cb3BvbW9mbyB9LAorICB7IDEwMywgUFRfU0MsIHVjcF9CcmFobWkgfSwKKyAgeyAxMTAsIFBUX1NDLCB1Y3BfQnJhaWxsZSB9LAorICB7IDExOCwgUFRfU0MsIHVjcF9CdWdpbmVzZSB9LAorICB7IDEyNywgUFRfU0MsIHVjcF9CdWhpZCB9LAorICB7IDEzMywgUFRfR0MsIHVjcF9DIH0sCisgIHsgMTM1LCBQVF9TQywgdWNwX0NhbmFkaWFuX0Fib3JpZ2luYWwgfSwKKyAgeyAxNTUsIFBUX1NDLCB1Y3BfQ2FyaWFuIH0sCisgIHsgMTYyLCBQVF9TQywgdWNwX0NhdWNhc2lhbl9BbGJhbmlhbiB9LAorICB7IDE4MSwgUFRfUEMsIHVjcF9DYyB9LAorICB7IDE4NCwgUFRfUEMsIHVjcF9DZiB9LAorICB7IDE4NywgUFRfU0MsIHVjcF9DaGFrbWEgfSwKKyAgeyAxOTQsIFBUX1NDLCB1Y3BfQ2hhbSB9LAorICB7IDE5OSwgUFRfU0MsIHVjcF9DaGVyb2tlZSB9LAorICB7IDIwOCwgUFRfUEMsIHVjcF9DbiB9LAorICB7IDIxMSwgUFRfUEMsIHVjcF9DbyB9LAorICB7IDIxNCwgUFRfU0MsIHVjcF9Db21tb24gfSwKKyAgeyAyMjEsIFBUX1NDLCB1Y3BfQ29wdGljIH0sCisgIHsgMjI4LCBQVF9QQywgdWNwX0NzIH0sCisgIHsgMjMxLCBQVF9TQywgdWNwX0N1bmVpZm9ybSB9LAorICB7IDI0MSwgUFRfU0MsIHVjcF9DeXByaW90IH0sCisgIHsgMjQ5LCBQVF9TQywgdWNwX0N5cmlsbGljIH0sCisgIHsgMjU4LCBQVF9TQywgdWNwX0Rlc2VyZXQgfSwKKyAgeyAyNjYsIFBUX1NDLCB1Y3BfRGV2YW5hZ2FyaSB9LAorICB7IDI3NywgUFRfU0MsIHVjcF9EdXBsb3lhbiB9LAorICB7IDI4NiwgUFRfU0MsIHVjcF9FZ3lwdGlhbl9IaWVyb2dseXBocyB9LAorICB7IDMwNywgUFRfU0MsIHVjcF9FbGJhc2FuIH0sCisgIHsgMzE1LCBQVF9TQywgdWNwX0V0aGlvcGljIH0sCisgIHsgMzI0LCBQVF9TQywgdWNwX0dlb3JnaWFuIH0sCisgIHsgMzMzLCBQVF9TQywgdWNwX0dsYWdvbGl0aWMgfSwKKyAgeyAzNDQsIFBUX1NDLCB1Y3BfR290aGljIH0sCisgIHsgMzUxLCBQVF9TQywgdWNwX0dyYW50aGEgfSwKKyAgeyAzNTksIFBUX1NDLCB1Y3BfR3JlZWsgfSwKKyAgeyAzNjUsIFBUX1NDLCB1Y3BfR3VqYXJhdGkgfSwKKyAgeyAzNzQsIFBUX1NDLCB1Y3BfR3VybXVraGkgfSwKKyAgeyAzODMsIFBUX1NDLCB1Y3BfSGFuIH0sCisgIHsgMzg3LCBQVF9TQywgdWNwX0hhbmd1bCB9LAorICB7IDM5NCwgUFRfU0MsIHVjcF9IYW51bm9vIH0sCisgIHsgNDAyLCBQVF9TQywgdWNwX0hhdHJhbiB9LAorICB7IDQwOSwgUFRfU0MsIHVjcF9IZWJyZXcgfSwKKyAgeyA0MTYsIFBUX1NDLCB1Y3BfSGlyYWdhbmEgfSwKKyAgeyA0MjUsIFBUX1NDLCB1Y3BfSW1wZXJpYWxfQXJhbWFpYyB9LAorICB7IDQ0MiwgUFRfU0MsIHVjcF9Jbmhlcml0ZWQgfSwKKyAgeyA0NTIsIFBUX1NDLCB1Y3BfSW5zY3JpcHRpb25hbF9QYWhsYXZpIH0sCisgIHsgNDc0LCBQVF9TQywgdWNwX0luc2NyaXB0aW9uYWxfUGFydGhpYW4gfSwKKyAgeyA0OTcsIFBUX1NDLCB1Y3BfSmF2YW5lc2UgfSwKKyAgeyA1MDYsIFBUX1NDLCB1Y3BfS2FpdGhpIH0sCisgIHsgNTEzLCBQVF9TQywgdWNwX0thbm5hZGEgfSwKKyAgeyA1MjEsIFBUX1NDLCB1Y3BfS2F0YWthbmEgfSwKKyAgeyA1MzAsIFBUX1NDLCB1Y3BfS2F5YWhfTGkgfSwKKyAgeyA1MzksIFBUX1NDLCB1Y3BfS2hhcm9zaHRoaSB9LAorICB7IDU1MCwgUFRfU0MsIHVjcF9LaG1lciB9LAorICB7IDU1NiwgUFRfU0MsIHVjcF9LaG9qa2kgfSwKKyAgeyA1NjMsIFBUX1NDLCB1Y3BfS2h1ZGF3YWRpIH0sCisgIHsgNTczLCBQVF9HQywgdWNwX0wgfSwKKyAgeyA1NzUsIFBUX0xBTVAsIDAgfSwKKyAgeyA1NzgsIFBUX1NDLCB1Y3BfTGFvIH0sCisgIHsgNTgyLCBQVF9TQywgdWNwX0xhdGluIH0sCisgIHsgNTg4LCBQVF9TQywgdWNwX0xlcGNoYSB9LAorICB7IDU5NSwgUFRfU0MsIHVjcF9MaW1idSB9LAorICB7IDYwMSwgUFRfU0MsIHVjcF9MaW5lYXJfQSB9LAorICB7IDYxMCwgUFRfU0MsIHVjcF9MaW5lYXJfQiB9LAorICB7IDYxOSwgUFRfU0MsIHVjcF9MaXN1IH0sCisgIHsgNjI0LCBQVF9QQywgdWNwX0xsIH0sCisgIHsgNjI3LCBQVF9QQywgdWNwX0xtIH0sCisgIHsgNjMwLCBQVF9QQywgdWNwX0xvIH0sCisgIHsgNjMzLCBQVF9QQywgdWNwX0x0IH0sCisgIHsgNjM2LCBQVF9QQywgdWNwX0x1IH0sCisgIHsgNjM5LCBQVF9TQywgdWNwX0x5Y2lhbiB9LAorICB7IDY0NiwgUFRfU0MsIHVjcF9MeWRpYW4gfSwKKyAgeyA2NTMsIFBUX0dDLCB1Y3BfTSB9LAorICB7IDY1NSwgUFRfU0MsIHVjcF9NYWhhamFuaSB9LAorICB7IDY2NCwgUFRfU0MsIHVjcF9NYWxheWFsYW0gfSwKKyAgeyA2NzQsIFBUX1NDLCB1Y3BfTWFuZGFpYyB9LAorICB7IDY4MiwgUFRfU0MsIHVjcF9NYW5pY2hhZWFuIH0sCisgIHsgNjkzLCBQVF9QQywgdWNwX01jIH0sCisgIHsgNjk2LCBQVF9QQywgdWNwX01lIH0sCisgIHsgNjk5LCBQVF9TQywgdWNwX01lZXRlaV9NYXllayB9LAorICB7IDcxMiwgUFRfU0MsIHVjcF9NZW5kZV9LaWtha3VpIH0sCisgIHsgNzI2LCBQVF9TQywgdWNwX01lcm9pdGljX0N1cnNpdmUgfSwKKyAgeyA3NDMsIFBUX1NDLCB1Y3BfTWVyb2l0aWNfSGllcm9nbHlwaHMgfSwKKyAgeyA3NjQsIFBUX1NDLCB1Y3BfTWlhbyB9LAorICB7IDc2OSwgUFRfUEMsIHVjcF9NbiB9LAorICB7IDc3MiwgUFRfU0MsIHVjcF9Nb2RpIH0sCisgIHsgNzc3LCBQVF9TQywgdWNwX01vbmdvbGlhbiB9LAorICB7IDc4NywgUFRfU0MsIHVjcF9Ncm8gfSwKKyAgeyA3OTEsIFBUX1NDLCB1Y3BfTXVsdGFuaSB9LAorICB7IDc5OSwgUFRfU0MsIHVjcF9NeWFubWFyIH0sCisgIHsgODA3LCBQVF9HQywgdWNwX04gfSwKKyAgeyA4MDksIFBUX1NDLCB1Y3BfTmFiYXRhZWFuIH0sCisgIHsgODE5LCBQVF9QQywgdWNwX05kIH0sCisgIHsgODIyLCBQVF9TQywgdWNwX05ld19UYWlfTHVlIH0sCisgIHsgODM0LCBQVF9TQywgdWNwX05rbyB9LAorICB7IDgzOCwgUFRfUEMsIHVjcF9ObCB9LAorICB7IDg0MSwgUFRfUEMsIHVjcF9ObyB9LAorICB7IDg0NCwgUFRfU0MsIHVjcF9PZ2hhbSB9LAorICB7IDg1MCwgUFRfU0MsIHVjcF9PbF9DaGlraSB9LAorICB7IDg1OSwgUFRfU0MsIHVjcF9PbGRfSHVuZ2FyaWFuIH0sCisgIHsgODczLCBQVF9TQywgdWNwX09sZF9JdGFsaWMgfSwKKyAgeyA4ODQsIFBUX1NDLCB1Y3BfT2xkX05vcnRoX0FyYWJpYW4gfSwKKyAgeyA5MDIsIFBUX1NDLCB1Y3BfT2xkX1Blcm1pYyB9LAorICB7IDkxMywgUFRfU0MsIHVjcF9PbGRfUGVyc2lhbiB9LAorICB7IDkyNSwgUFRfU0MsIHVjcF9PbGRfU291dGhfQXJhYmlhbiB9LAorICB7IDk0MywgUFRfU0MsIHVjcF9PbGRfVHVya2ljIH0sCisgIHsgOTU0LCBQVF9TQywgdWNwX09yaXlhIH0sCisgIHsgOTYwLCBQVF9TQywgdWNwX09zbWFueWEgfSwKKyAgeyA5NjgsIFBUX0dDLCB1Y3BfUCB9LAorICB7IDk3MCwgUFRfU0MsIHVjcF9QYWhhd2hfSG1vbmcgfSwKKyAgeyA5ODMsIFBUX1NDLCB1Y3BfUGFsbXlyZW5lIH0sCisgIHsgOTkzLCBQVF9TQywgdWNwX1BhdV9DaW5fSGF1IH0sCisgIHsgMTAwNSwgUFRfUEMsIHVjcF9QYyB9LAorICB7IDEwMDgsIFBUX1BDLCB1Y3BfUGQgfSwKKyAgeyAxMDExLCBQVF9QQywgdWNwX1BlIH0sCisgIHsgMTAxNCwgUFRfUEMsIHVjcF9QZiB9LAorICB7IDEwMTcsIFBUX1NDLCB1Y3BfUGhhZ3NfUGEgfSwKKyAgeyAxMDI2LCBQVF9TQywgdWNwX1Bob2VuaWNpYW4gfSwKKyAgeyAxMDM3LCBQVF9QQywgdWNwX1BpIH0sCisgIHsgMTA0MCwgUFRfUEMsIHVjcF9QbyB9LAorICB7IDEwNDMsIFBUX1BDLCB1Y3BfUHMgfSwKKyAgeyAxMDQ2LCBQVF9TQywgdWNwX1BzYWx0ZXJfUGFobGF2aSB9LAorICB7IDEwNjIsIFBUX1NDLCB1Y3BfUmVqYW5nIH0sCisgIHsgMTA2OSwgUFRfU0MsIHVjcF9SdW5pYyB9LAorICB7IDEwNzUsIFBUX0dDLCB1Y3BfUyB9LAorICB7IDEwNzcsIFBUX1NDLCB1Y3BfU2FtYXJpdGFuIH0sCisgIHsgMTA4NywgUFRfU0MsIHVjcF9TYXVyYXNodHJhIH0sCisgIHsgMTA5OCwgUFRfUEMsIHVjcF9TYyB9LAorICB7IDExMDEsIFBUX1NDLCB1Y3BfU2hhcmFkYSB9LAorICB7IDExMDksIFBUX1NDLCB1Y3BfU2hhdmlhbiB9LAorICB7IDExMTcsIFBUX1NDLCB1Y3BfU2lkZGhhbSB9LAorICB7IDExMjUsIFBUX1NDLCB1Y3BfU2lnbldyaXRpbmcgfSwKKyAgeyAxMTM3LCBQVF9TQywgdWNwX1NpbmhhbGEgfSwKKyAgeyAxMTQ1LCBQVF9QQywgdWNwX1NrIH0sCisgIHsgMTE0OCwgUFRfUEMsIHVjcF9TbSB9LAorICB7IDExNTEsIFBUX1BDLCB1Y3BfU28gfSwKKyAgeyAxMTU0LCBQVF9TQywgdWNwX1NvcmFfU29tcGVuZyB9LAorICB7IDExNjcsIFBUX1NDLCB1Y3BfU3VuZGFuZXNlIH0sCisgIHsgMTE3NywgUFRfU0MsIHVjcF9TeWxvdGlfTmFncmkgfSwKKyAgeyAxMTkwLCBQVF9TQywgdWNwX1N5cmlhYyB9LAorICB7IDExOTcsIFBUX1NDLCB1Y3BfVGFnYWxvZyB9LAorICB7IDEyMDUsIFBUX1NDLCB1Y3BfVGFnYmFud2EgfSwKKyAgeyAxMjE0LCBQVF9TQywgdWNwX1RhaV9MZSB9LAorICB7IDEyMjEsIFBUX1NDLCB1Y3BfVGFpX1RoYW0gfSwKKyAgeyAxMjMwLCBQVF9TQywgdWNwX1RhaV9WaWV0IH0sCisgIHsgMTIzOSwgUFRfU0MsIHVjcF9UYWtyaSB9LAorICB7IDEyNDUsIFBUX1NDLCB1Y3BfVGFtaWwgfSwKKyAgeyAxMjUxLCBQVF9TQywgdWNwX1RlbHVndSB9LAorICB7IDEyNTgsIFBUX1NDLCB1Y3BfVGhhYW5hIH0sCisgIHsgMTI2NSwgUFRfU0MsIHVjcF9UaGFpIH0sCisgIHsgMTI3MCwgUFRfU0MsIHVjcF9UaWJldGFuIH0sCisgIHsgMTI3OCwgUFRfU0MsIHVjcF9UaWZpbmFnaCB9LAorICB7IDEyODcsIFBUX1NDLCB1Y3BfVGlyaHV0YSB9LAorICB7IDEyOTUsIFBUX1NDLCB1Y3BfVWdhcml0aWMgfSwKKyAgeyAxMzA0LCBQVF9TQywgdWNwX1ZhaSB9LAorICB7IDEzMDgsIFBUX1NDLCB1Y3BfV2FyYW5nX0NpdGkgfSwKKyAgeyAxMzIwLCBQVF9BTE5VTSwgMCB9LAorICB7IDEzMjQsIFBUX1BYU1BBQ0UsIDAgfSwKKyAgeyAxMzI4LCBQVF9TUEFDRSwgMCB9LAorICB7IDEzMzIsIFBUX1VDTkMsIDAgfSwKKyAgeyAxMzM2LCBQVF9XT1JELCAwIH0sCisgIHsgMTM0MCwgUFRfU0MsIHVjcF9ZaSB9LAorICB7IDEzNDMsIFBUX0dDLCB1Y3BfWiB9LAorICB7IDEzNDUsIFBUX1BDLCB1Y3BfWmwgfSwKKyAgeyAxMzQ4LCBQVF9QQywgdWNwX1pwIH0sCisgIHsgMTM1MSwgUFRfUEMsIHVjcF9acyB9Cit9OworCitjb25zdCBzaXplX3QgUFJJVih1dHRfc2l6ZSkgPSBzaXplb2YoUFJJVih1dHQpKSAvIHNpemVvZih1Y3BfdHlwZV90YWJsZSk7CisKKyNlbmRpZiAvKiBTVVBQT1JUX1VOSUNPREUgKi8KKworLyogRW5kIG9mIHBjcmUyX3RhYmxlcy5jICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfdWNkLmMgYi9kaXN0Mi9zcmMvcGNyZTJfdWNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE2ZjUzNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl91Y2QuYwpAQCAtMCwwICsxLDM3NDcgQEAKKy8qIFRoaXMgbW9kdWxlIGlzIGdlbmVyYXRlZCBieSB0aGUgbWFpbnQvTXVsdGlTdGFnZTIucHkgc2NyaXB0LgorRG8gbm90IG1vZGlmeSBpdCBieSBoYW5kLiBJbnN0ZWFkIG1vZGlmeSB0aGUgc2NyaXB0IGFuZCBydW4gaXQKK3RvIHJlZ2VuZXJhdGUgdGhpcyBjb2RlLgorCitBcyB3ZWxsIGFzIGJlaW5nIHBhcnQgb2YgdGhlIFBDUkUyIGxpYnJhcnksIHRoaXMgbW9kdWxlIGlzICNpbmNsdWRlZAorYnkgdGhlIHBjcmUydGVzdCBwcm9ncmFtLCB3aGljaCByZWRlZmluZXMgdGhlIFBSSVYgbWFjcm8gdG8gY2hhbmdlCit0YWJsZSBuYW1lcyBmcm9tIF9wY3JlMl94eHggdG8geHh4eCwgdGhlcmVieSBhdm9pZGluZyBuYW1lIGNsYXNoZXMKK3dpdGggdGhlIGxpYnJhcnkuIEF0IHByZXNlbnQsIGp1c3Qgb25lIG9mIHRoZXNlIHRhYmxlcyBpcyBhY3R1YWxseQorbmVlZGVkLiAqLworCisjaWZuZGVmIFBDUkUyX1BDUkUyVEVTVAorCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJwY3JlMl9pbnRlcm5hbC5oIgorCisjZW5kaWYgLyogUENSRTJfUENSRTJURVNUICovCisKKy8qIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlLiAqLworLyogVGhpcyBmaWxlIHdhcyBhdXRvZ2VuZXJhdGVkIGJ5IHRoZSBNdWx0aVN0YWdlMi5weSBzY3JpcHQuICovCisvKiBUb3RhbCBzaXplOiA3NTA3MiBieXRlcywgYmxvY2sgc2l6ZTogMTI4LiAqLworCisvKiBUaGUgdGFibGVzIGhlcmVpbiBhcmUgbmVlZGVkIG9ubHkgd2hlbiBVQ1Agc3VwcG9ydCBpcyBidWlsdCwKK2FuZCBpbiBQQ1JFMiB0aGF0IGhhcHBlbnMgYXV0b21hdGljYWxseSB3aXRoIFVURiBzdXBwb3J0LgorVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSByZWZlcmVuY2VkIG90aGVyd2lzZSwgc28KK2l0IHNob3VsZCBub3QgbWF0dGVyIHdoZXRoZXIgaXQgaXMgY29tcGlsZWQgb3Igbm90LiBIb3dldmVyCithIGNvbW1lbnQgd2FzIHJlY2VpdmVkIGFib3V0IHNwYWNlIHNhdmluZyAtIG1heWJlIHRoZSBndXkgbGlua2VkCithbGwgdGhlIG1vZHVsZXMgcmF0aGVyIHRoYW4gdXNpbmcgYSBsaWJyYXJ5IC0gc28gd2UgaW5jbHVkZSBhCitjb25kaXRpb24gdG8gY3V0IG91dCB0aGUgdGFibGVzIHdoZW4gbm90IG5lZWRlZC4gQnV0IGRvbid0IGxlYXZlCithIHRvdGFsbHkgZW1wdHkgbW9kdWxlIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgYmFyZiBhdCB0aGF0LgorSW5zdGVhZCwganVzdCBzdXBwbHkgc21hbGwgZHVtbXkgdGFibGVzLiAqLworCisjaWZuZGVmIFNVUFBPUlRfVU5JQ09ERQorY29uc3QgdWNkX3JlY29yZCBQUklWKHVjZF9yZWNvcmRzKVtdID0ge3swLDAsMCwwLDAgfX07Citjb25zdCB1aW50OF90IFBSSVYodWNkX3N0YWdlMSlbXSA9IHswfTsKK2NvbnN0IHVpbnQxNl90IFBSSVYodWNkX3N0YWdlMilbXSA9IHswfTsKK2NvbnN0IHVpbnQzMl90IFBSSVYodWNkX2Nhc2VsZXNzX3NldHMpW10gPSB7MH07CisjZWxzZQorCitjb25zdCBjaGFyICpQUklWKHVuaWNvZGVfdmVyc2lvbikgPSAiOC4wLjAiOworCisvKiBXaGVuIHJlY29tcGlsaW5nIHRhYmxlcyB3aXRoIGEgbmV3IFVuaWNvZGUgdmVyc2lvbiwgcGxlYXNlIGNoZWNrIHRoZQordHlwZXMgaW4gdGhpcyBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBmcm9tIHBjcmUyX2ludGVybmFsLmggKHRoZSBhY3R1YWwKK2ZpZWxkIG5hbWVzIHdpbGwgYmUgZGlmZmVyZW50KToKKwordHlwZWRlZiBzdHJ1Y3QgewordWludDhfdCBwcm9wZXJ0eV8wOwordWludDhfdCBwcm9wZXJ0eV8xOwordWludDhfdCBwcm9wZXJ0eV8yOwordWludDhfdCBwcm9wZXJ0eV8zOworcGNyZV9pbnQzMiBwcm9wZXJ0eV80OworfSB1Y2RfcmVjb3JkOworKi8KKworCitjb25zdCB1aW50MzJfdCBQUklWKHVjZF9jYXNlbGVzc19zZXRzKVtdID0geworICBOT1RBQ0hBUiwKKyAgMHgwMDUzLCAgIDB4MDA3MywgICAweDAxN2YsICAgTk9UQUNIQVIsCisgIDB4MDFjNCwgICAweDAxYzUsICAgMHgwMWM2LCAgIE5PVEFDSEFSLAorICAweDAxYzcsICAgMHgwMWM4LCAgIDB4MDFjOSwgICBOT1RBQ0hBUiwKKyAgMHgwMWNhLCAgIDB4MDFjYiwgICAweDAxY2MsICAgTk9UQUNIQVIsCisgIDB4MDFmMSwgICAweDAxZjIsICAgMHgwMWYzLCAgIE5PVEFDSEFSLAorICAweDAzNDUsICAgMHgwMzk5LCAgIDB4MDNiOSwgICAweDFmYmUsICAgTk9UQUNIQVIsCisgIDB4MDBiNSwgICAweDAzOWMsICAgMHgwM2JjLCAgIE5PVEFDSEFSLAorICAweDAzYTMsICAgMHgwM2MyLCAgIDB4MDNjMywgICBOT1RBQ0hBUiwKKyAgMHgwMzkyLCAgIDB4MDNiMiwgICAweDAzZDAsICAgTk9UQUNIQVIsCisgIDB4MDM5OCwgICAweDAzYjgsICAgMHgwM2QxLCAgIDB4MDNmNCwgICBOT1RBQ0hBUiwKKyAgMHgwM2E2LCAgIDB4MDNjNiwgICAweDAzZDUsICAgTk9UQUNIQVIsCisgIDB4MDNhMCwgICAweDAzYzAsICAgMHgwM2Q2LCAgIE5PVEFDSEFSLAorICAweDAzOWEsICAgMHgwM2JhLCAgIDB4MDNmMCwgICBOT1RBQ0hBUiwKKyAgMHgwM2ExLCAgIDB4MDNjMSwgICAweDAzZjEsICAgTk9UQUNIQVIsCisgIDB4MDM5NSwgICAweDAzYjUsICAgMHgwM2Y1LCAgIE5PVEFDSEFSLAorICAweDFlNjAsICAgMHgxZTYxLCAgIDB4MWU5YiwgICBOT1RBQ0hBUiwKKyAgMHgwM2E5LCAgIDB4MDNjOSwgICAweDIxMjYsICAgTk9UQUNIQVIsCisgIDB4MDA0YiwgICAweDAwNmIsICAgMHgyMTJhLCAgIE5PVEFDSEFSLAorICAweDAwYzUsICAgMHgwMGU1LCAgIDB4MjEyYiwgICBOT1RBQ0hBUiwKK307CisKKy8qIFdoZW4gI2luY2x1ZGVkIGluIHBjcmUydGVzdCwgd2UgZG9uJ3QgbmVlZCB0aGlzIGxhcmdlIHRhYmxlLiAqLworCisjaWZuZGVmIFBDUkUyX1BDUkUyVEVTVAorCitjb25zdCB1Y2RfcmVjb3JkIFBSSVYodWNkX3JlY29yZHMpW10gPSB7IC8qIDU5NTIgYnl0ZXMsIHJlY29yZCBzaXplIDggKi8KKyAgeyAgICAgOSwgICAgICAwLCAgICAgIDIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgIDAgKi8KKyAgeyAgICAgOSwgICAgICAwLCAgICAgIDEsICAgICAgMCwgICAgICAwLCB9LCAvKiAgIDEgKi8KKyAgeyAgICAgOSwgICAgICAwLCAgICAgIDAsICAgICAgMCwgICAgICAwLCB9LCAvKiAgIDIgKi8KKyAgeyAgICAgOSwgICAgIDI5LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgIDMgKi8KKyAgeyAgICAgOSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgIDQgKi8KKyAgeyAgICAgOSwgICAgIDIzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgIDUgKi8KKyAgeyAgICAgOSwgICAgIDIyLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgIDYgKi8KKyAgeyAgICAgOSwgICAgIDE4LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgIDcgKi8KKyAgeyAgICAgOSwgICAgIDI1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgIDggKi8KKyAgeyAgICAgOSwgICAgIDE3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgIDkgKi8KKyAgeyAgICAgOSwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgMTAgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDMyLCB9LCAvKiAgMTEgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICA3MSwgICAgIDMyLCB9LCAvKiAgMTIgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMSwgICAgIDMyLCB9LCAvKiAgMTMgKi8KKyAgeyAgICAgOSwgICAgIDI0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgMTQgKi8KKyAgeyAgICAgOSwgICAgIDE2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgMTUgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTMyLCB9LCAvKiAgMTYgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICA3MSwgICAgLTMyLCB9LCAvKiAgMTcgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMSwgICAgLTMyLCB9LCAvKiAgMTggKi8KKyAgeyAgICAgOSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgMTkgKi8KKyAgeyAgICAzMywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgMjAgKi8KKyAgeyAgICAgOSwgICAgIDIwLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgMjEgKi8KKyAgeyAgICAgOSwgICAgICAxLCAgICAgIDIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgMjIgKi8KKyAgeyAgICAgOSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgMjMgKi8KKyAgeyAgICAgOSwgICAgICA1LCAgICAgMTIsICAgICAyNiwgICAgNzc1LCB9LCAvKiAgMjQgKi8KKyAgeyAgICAgOSwgICAgIDE5LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgMjUgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICA3NSwgICAgIDMyLCB9LCAvKiAgMjYgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICA3NjE1LCB9LCAvKiAgMjcgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICA3NSwgICAgLTMyLCB9LCAvKiAgMjggKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgMTIxLCB9LCAvKiAgMjkgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgICAxLCB9LCAvKiAgMzAgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgIC0xLCB9LCAvKiAgMzEgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgMzIgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAgMzMgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAtMTIxLCB9LCAvKiAgMzQgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMSwgICAtMjY4LCB9LCAvKiAgMzUgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgMTk1LCB9LCAvKiAgMzYgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjEwLCB9LCAvKiAgMzcgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjA2LCB9LCAvKiAgMzggKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjA1LCB9LCAvKiAgMzkgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDc5LCB9LCAvKiAgNDAgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjAyLCB9LCAvKiAgNDEgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjAzLCB9LCAvKiAgNDIgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjA3LCB9LCAvKiAgNDMgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgIDk3LCB9LCAvKiAgNDQgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjExLCB9LCAvKiAgNDUgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjA5LCB9LCAvKiAgNDYgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgMTYzLCB9LCAvKiAgNDcgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjEzLCB9LCAvKiAgNDggKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgMTMwLCB9LCAvKiAgNDkgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjE0LCB9LCAvKiAgNTAgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjE4LCB9LCAvKiAgNTEgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjE3LCB9LCAvKiAgNTIgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMjE5LCB9LCAvKiAgNTMgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgIDU2LCB9LCAvKiAgNTQgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgNSwgICAgICAyLCB9LCAvKiAgNTUgKi8KKyAgeyAgICAzMywgICAgICA4LCAgICAgMTIsICAgICAgNSwgICAgICAxLCB9LCAvKiAgNTYgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgNSwgICAgIC0yLCB9LCAvKiAgNTcgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgOSwgICAgICAyLCB9LCAvKiAgNTggKi8KKyAgeyAgICAzMywgICAgICA4LCAgICAgMTIsICAgICAgOSwgICAgICAxLCB9LCAvKiAgNTkgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgOSwgICAgIC0yLCB9LCAvKiAgNjAgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAxMywgICAgICAyLCB9LCAvKiAgNjEgKi8KKyAgeyAgICAzMywgICAgICA4LCAgICAgMTIsICAgICAxMywgICAgICAxLCB9LCAvKiAgNjIgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAxMywgICAgIC0yLCB9LCAvKiAgNjMgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTc5LCB9LCAvKiAgNjQgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAxNywgICAgICAyLCB9LCAvKiAgNjUgKi8KKyAgeyAgICAzMywgICAgICA4LCAgICAgMTIsICAgICAxNywgICAgICAxLCB9LCAvKiAgNjYgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAxNywgICAgIC0yLCB9LCAvKiAgNjcgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgLTk3LCB9LCAvKiAgNjggKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgLTU2LCB9LCAvKiAgNjkgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAtMTMwLCB9LCAvKiAgNzAgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgIDEwNzk1LCB9LCAvKiAgNzEgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAtMTYzLCB9LCAvKiAgNzIgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgIDEwNzkyLCB9LCAvKiAgNzMgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDEwODE1LCB9LCAvKiAgNzQgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAtMTk1LCB9LCAvKiAgNzUgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDY5LCB9LCAvKiAgNzYgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDcxLCB9LCAvKiAgNzcgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDEwNzgzLCB9LCAvKiAgNzggKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDEwNzgwLCB9LCAvKiAgNzkgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDEwNzgyLCB9LCAvKiAgODAgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjEwLCB9LCAvKiAgODEgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjA2LCB9LCAvKiAgODIgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjA1LCB9LCAvKiAgODMgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjAyLCB9LCAvKiAgODQgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjAzLCB9LCAvKiAgODUgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDQyMzE5LCB9LCAvKiAgODYgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDQyMzE1LCB9LCAvKiAgODcgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjA3LCB9LCAvKiAgODggKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDQyMjgwLCB9LCAvKiAgODkgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDQyMzA4LCB9LCAvKiAgOTAgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjA5LCB9LCAvKiAgOTEgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjExLCB9LCAvKiAgOTIgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDEwNzQzLCB9LCAvKiAgOTMgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDQyMzA1LCB9LCAvKiAgOTQgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDEwNzQ5LCB9LCAvKiAgOTUgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjEzLCB9LCAvKiAgOTYgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjE0LCB9LCAvKiAgOTcgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDEwNzI3LCB9LCAvKiAgOTggKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjE4LCB9LCAvKiAgOTkgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDQyMjgyLCB9LCAvKiAxMDAgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTY5LCB9LCAvKiAxMDEgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjE3LCB9LCAvKiAxMDIgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTcxLCB9LCAvKiAxMDMgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMjE5LCB9LCAvKiAxMDQgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDQyMjYxLCB9LCAvKiAxMDUgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDQyMjU4LCB9LCAvKiAxMDYgKi8KKyAgeyAgICAzMywgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxMDcgKi8KKyAgeyAgICAgOSwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxMDggKi8KKyAgeyAgICAgMywgICAgIDI0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxMDkgKi8KKyAgeyAgICAyNywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAxMTAgKi8KKyAgeyAgICAyNywgICAgIDEyLCAgICAgIDMsICAgICAyMSwgICAgMTE2LCB9LCAvKiAxMTEgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgICAxLCB9LCAvKiAxMTIgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgIC0xLCB9LCAvKiAxMTMgKi8KKyAgeyAgICAxOSwgICAgIDI0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxMTQgKi8KKyAgeyAgICAgOSwgICAgICAyLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxMTUgKi8KKyAgeyAgICAxOSwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxMTYgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgMTMwLCB9LCAvKiAxMTcgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgMTE2LCB9LCAvKiAxMTggKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDM4LCB9LCAvKiAxMTkgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDM3LCB9LCAvKiAxMjAgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDY0LCB9LCAvKiAxMjEgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDYzLCB9LCAvKiAxMjIgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxMjMgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDMyLCB9LCAvKiAxMjQgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAzNCwgICAgIDMyLCB9LCAvKiAxMjUgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICA1OSwgICAgIDMyLCB9LCAvKiAxMjYgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAzOCwgICAgIDMyLCB9LCAvKiAxMjcgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAyMSwgICAgIDMyLCB9LCAvKiAxMjggKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICA1MSwgICAgIDMyLCB9LCAvKiAxMjkgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAyNiwgICAgIDMyLCB9LCAvKiAxMzAgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICA0NywgICAgIDMyLCB9LCAvKiAxMzEgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICA1NSwgICAgIDMyLCB9LCAvKiAxMzIgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAzMCwgICAgIDMyLCB9LCAvKiAxMzMgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICA0MywgICAgIDMyLCB9LCAvKiAxMzQgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICA2NywgICAgIDMyLCB9LCAvKiAxMzUgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTM4LCB9LCAvKiAxMzYgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTM3LCB9LCAvKiAxMzcgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTMyLCB9LCAvKiAxMzggKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAzNCwgICAgLTMyLCB9LCAvKiAxMzkgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICA1OSwgICAgLTMyLCB9LCAvKiAxNDAgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAzOCwgICAgLTMyLCB9LCAvKiAxNDEgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAyMSwgICAtMTE2LCB9LCAvKiAxNDIgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICA1MSwgICAgLTMyLCB9LCAvKiAxNDMgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAyNiwgICAtNzc1LCB9LCAvKiAxNDQgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICA0NywgICAgLTMyLCB9LCAvKiAxNDUgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICA1NSwgICAgLTMyLCB9LCAvKiAxNDYgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAzMCwgICAgICAxLCB9LCAvKiAxNDcgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAzMCwgICAgLTMyLCB9LCAvKiAxNDggKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICA0MywgICAgLTMyLCB9LCAvKiAxNDkgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICA2NywgICAgLTMyLCB9LCAvKiAxNTAgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTY0LCB9LCAvKiAxNTEgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTYzLCB9LCAvKiAxNTIgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgICA4LCB9LCAvKiAxNTMgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAzNCwgICAgLTMwLCB9LCAvKiAxNTQgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAzOCwgICAgLTI1LCB9LCAvKiAxNTUgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxNTYgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICA0MywgICAgLTE1LCB9LCAvKiAxNTcgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICA0NywgICAgLTIyLCB9LCAvKiAxNTggKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgIC04LCB9LCAvKiAxNTkgKi8KKyAgeyAgICAxMCwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgICAxLCB9LCAvKiAxNjAgKi8KKyAgeyAgICAxMCwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgIC0xLCB9LCAvKiAxNjEgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICA1MSwgICAgLTU0LCB9LCAvKiAxNjIgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICA1NSwgICAgLTQ4LCB9LCAvKiAxNjMgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgICA3LCB9LCAvKiAxNjQgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtMTE2LCB9LCAvKiAxNjUgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAzOCwgICAgLTYwLCB9LCAvKiAxNjYgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICA1OSwgICAgLTY0LCB9LCAvKiAxNjcgKi8KKyAgeyAgICAxOSwgICAgIDI1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxNjggKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIC03LCB9LCAvKiAxNjkgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAtMTMwLCB9LCAvKiAxNzAgKi8KKyAgeyAgICAxMiwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDgwLCB9LCAvKiAxNzEgKi8KKyAgeyAgICAxMiwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDMyLCB9LCAvKiAxNzIgKi8KKyAgeyAgICAxMiwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTMyLCB9LCAvKiAxNzMgKi8KKyAgeyAgICAxMiwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTgwLCB9LCAvKiAxNzQgKi8KKyAgeyAgICAxMiwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgICAxLCB9LCAvKiAxNzUgKi8KKyAgeyAgICAxMiwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgIC0xLCB9LCAvKiAxNzYgKi8KKyAgeyAgICAxMiwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxNzcgKi8KKyAgeyAgICAxMiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAxNzggKi8KKyAgeyAgICAxMiwgICAgIDExLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAxNzkgKi8KKyAgeyAgICAxMiwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDE1LCB9LCAvKiAxODAgKi8KKyAgeyAgICAxMiwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTE1LCB9LCAvKiAxODEgKi8KKyAgeyAgICAgMSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDQ4LCB9LCAvKiAxODIgKi8KKyAgeyAgICAgMSwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxODMgKi8KKyAgeyAgICAgMSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxODQgKi8KKyAgeyAgICAgMSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTQ4LCB9LCAvKiAxODUgKi8KKyAgeyAgICAgMSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxODYgKi8KKyAgeyAgICAgMSwgICAgIDE3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxODcgKi8KKyAgeyAgICAgMSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxODggKi8KKyAgeyAgICAgMSwgICAgIDIzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxODkgKi8KKyAgeyAgICAyNSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAxOTAgKi8KKyAgeyAgICAyNSwgICAgIDE3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxOTEgKi8KKyAgeyAgICAyNSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxOTIgKi8KKyAgeyAgICAyNSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxOTMgKi8KKyAgeyAgICAgMCwgICAgICAxLCAgICAgIDIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxOTQgKi8KKyAgeyAgICAgMCwgICAgIDI1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxOTUgKi8KKyAgeyAgICAgMCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxOTYgKi8KKyAgeyAgICAgMCwgICAgIDIzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxOTcgKi8KKyAgeyAgICAgMCwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAxOTggKi8KKyAgeyAgICAgMCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAxOTkgKi8KKyAgeyAgICAgMCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMDAgKi8KKyAgeyAgICAgMCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMDEgKi8KKyAgeyAgICAgMCwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMDIgKi8KKyAgeyAgICA0OSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMDMgKi8KKyAgeyAgICA0OSwgICAgICAxLCAgICAgIDIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMDQgKi8KKyAgeyAgICA0OSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMDUgKi8KKyAgeyAgICA0OSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMDYgKi8KKyAgeyAgICA1NSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMDcgKi8KKyAgeyAgICA1NSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMDggKi8KKyAgeyAgICA2MywgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMDkgKi8KKyAgeyAgICA2MywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMTAgKi8KKyAgeyAgICA2MywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMTEgKi8KKyAgeyAgICA2MywgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMTIgKi8KKyAgeyAgICA2MywgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMTMgKi8KKyAgeyAgICA2MywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMTQgKi8KKyAgeyAgICA4OSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMTUgKi8KKyAgeyAgICA4OSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMTYgKi8KKyAgeyAgICA4OSwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMTcgKi8KKyAgeyAgICA4OSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMTggKi8KKyAgeyAgICA5NCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMTkgKi8KKyAgeyAgICA5NCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMjAgKi8KKyAgeyAgICA5NCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMjEgKi8KKyAgeyAgICAxNCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMjIgKi8KKyAgeyAgICAxNCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMjMgKi8KKyAgeyAgICAxNCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMjQgKi8KKyAgeyAgICAxNCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMjUgKi8KKyAgeyAgICAxNCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMjYgKi8KKyAgeyAgICAxNCwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMjcgKi8KKyAgeyAgICAgMiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMjggKi8KKyAgeyAgICAgMiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMjkgKi8KKyAgeyAgICAgMiwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMzAgKi8KKyAgeyAgICAgMiwgICAgIDEwLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMzEgKi8KKyAgeyAgICAgMiwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMzIgKi8KKyAgeyAgICAgMiwgICAgIDIzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMzMgKi8KKyAgeyAgICAgMiwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMzQgKi8KKyAgeyAgICAgMiwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMzUgKi8KKyAgeyAgICAyMSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMzYgKi8KKyAgeyAgICAyMSwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMzcgKi8KKyAgeyAgICAyMSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMzggKi8KKyAgeyAgICAyMSwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyMzkgKi8KKyAgeyAgICAyMCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNDAgKi8KKyAgeyAgICAyMCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNDEgKi8KKyAgeyAgICAyMCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNDIgKi8KKyAgeyAgICAyMCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNDMgKi8KKyAgeyAgICAyMCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNDQgKi8KKyAgeyAgICAyMCwgICAgIDIzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNDUgKi8KKyAgeyAgICA0MywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNDYgKi8KKyAgeyAgICA0MywgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNDcgKi8KKyAgeyAgICA0MywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNDggKi8KKyAgeyAgICA0MywgICAgIDEwLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNDkgKi8KKyAgeyAgICA0MywgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNTAgKi8KKyAgeyAgICA0MywgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNTEgKi8KKyAgeyAgICA0MywgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNTIgKi8KKyAgeyAgICA1MywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNTMgKi8KKyAgeyAgICA1MywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNTQgKi8KKyAgeyAgICA1MywgICAgIDEwLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNTUgKi8KKyAgeyAgICA1MywgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNTYgKi8KKyAgeyAgICA1MywgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNTcgKi8KKyAgeyAgICA1MywgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNTggKi8KKyAgeyAgICA1MywgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNTkgKi8KKyAgeyAgICA1MywgICAgIDIzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNjAgKi8KKyAgeyAgICA1NCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNjEgKi8KKyAgeyAgICA1NCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNjIgKi8KKyAgeyAgICA1NCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNjMgKi8KKyAgeyAgICA1NCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNjQgKi8KKyAgeyAgICA1NCwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNjUgKi8KKyAgeyAgICA1NCwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNjYgKi8KKyAgeyAgICAyOCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNjcgKi8KKyAgeyAgICAyOCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNjggKi8KKyAgeyAgICAyOCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNjkgKi8KKyAgeyAgICAyOCwgICAgIDEwLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNzAgKi8KKyAgeyAgICAyOCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNzEgKi8KKyAgeyAgICAzNiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNzIgKi8KKyAgeyAgICAzNiwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNzMgKi8KKyAgeyAgICAzNiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNzQgKi8KKyAgeyAgICAzNiwgICAgIDEwLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNzUgKi8KKyAgeyAgICAzNiwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNzYgKi8KKyAgeyAgICAzNiwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNzcgKi8KKyAgeyAgICAzNiwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNzggKi8KKyAgeyAgICA0NywgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyNzkgKi8KKyAgeyAgICA0NywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyODAgKi8KKyAgeyAgICA0NywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyODEgKi8KKyAgeyAgICA0NywgICAgIDEwLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyODIgKi8KKyAgeyAgICA0NywgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyODMgKi8KKyAgeyAgICA0NywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyODQgKi8KKyAgeyAgICA1NiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyODUgKi8KKyAgeyAgICA1NiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyODYgKi8KKyAgeyAgICA1NiwgICAgICA3LCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyODcgKi8KKyAgeyAgICA1NiwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyODggKi8KKyAgeyAgICA1NiwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyODkgKi8KKyAgeyAgICA1NiwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyOTAgKi8KKyAgeyAgICAzMiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyOTEgKi8KKyAgeyAgICAzMiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyOTIgKi8KKyAgeyAgICAzMiwgICAgICA3LCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAyOTMgKi8KKyAgeyAgICAzMiwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyOTQgKi8KKyAgeyAgICAzMiwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyOTUgKi8KKyAgeyAgICA1NywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyOTYgKi8KKyAgeyAgICA1NywgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyOTcgKi8KKyAgeyAgICA1NywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAyOTggKi8KKyAgeyAgICA1NywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAyOTkgKi8KKyAgeyAgICA1NywgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMDAgKi8KKyAgeyAgICA1NywgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMDEgKi8KKyAgeyAgICA1NywgICAgIDIyLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMDIgKi8KKyAgeyAgICA1NywgICAgIDE4LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMDMgKi8KKyAgeyAgICA1NywgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMDQgKi8KKyAgeyAgICAzOCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMDUgKi8KKyAgeyAgICAzOCwgICAgIDEwLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMDYgKi8KKyAgeyAgICAzOCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMDcgKi8KKyAgeyAgICAzOCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMDggKi8KKyAgeyAgICAzOCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMDkgKi8KKyAgeyAgICAzOCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMTAgKi8KKyAgeyAgICAzOCwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMTEgKi8KKyAgeyAgICAxNiwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICA3MjY0LCB9LCAvKiAzMTIgKi8KKyAgeyAgICAxNiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMTMgKi8KKyAgeyAgICAxNiwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMTQgKi8KKyAgeyAgICAyMywgICAgICA3LCAgICAgIDYsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMTUgKi8KKyAgeyAgICAyMywgICAgICA3LCAgICAgIDcsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMTYgKi8KKyAgeyAgICAyMywgICAgICA3LCAgICAgIDgsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMTcgKi8KKyAgeyAgICAxNSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMTggKi8KKyAgeyAgICAxNSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMTkgKi8KKyAgeyAgICAxNSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMjAgKi8KKyAgeyAgICAxNSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMjEgKi8KKyAgeyAgICAxNSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMjIgKi8KKyAgeyAgICAgOCwgICAgICA5LCAgICAgMTIsICAgICAgMCwgIDM4ODY0LCB9LCAvKiAzMjMgKi8KKyAgeyAgICAgOCwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgICA4LCB9LCAvKiAzMjQgKi8KKyAgeyAgICAgOCwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgIC04LCB9LCAvKiAzMjUgKi8KKyAgeyAgICAgNywgICAgIDE3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMjYgKi8KKyAgeyAgICAgNywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMjcgKi8KKyAgeyAgICAgNywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMjggKi8KKyAgeyAgICA0MCwgICAgIDI5LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMjkgKi8KKyAgeyAgICA0MCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMzAgKi8KKyAgeyAgICA0MCwgICAgIDIyLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMzEgKi8KKyAgeyAgICA0MCwgICAgIDE4LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMzIgKi8KKyAgeyAgICA0NSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMzMgKi8KKyAgeyAgICA0NSwgICAgIDE0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMzQgKi8KKyAgeyAgICA1MCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMzUgKi8KKyAgeyAgICA1MCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMzYgKi8KKyAgeyAgICAyNCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMzcgKi8KKyAgeyAgICAyNCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMzggKi8KKyAgeyAgICAgNiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzMzkgKi8KKyAgeyAgICAgNiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNDAgKi8KKyAgeyAgICA1MSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNDEgKi8KKyAgeyAgICA1MSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNDIgKi8KKyAgeyAgICAzMSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNDMgKi8KKyAgeyAgICAzMSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNDQgKi8KKyAgeyAgICAzMSwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNDUgKi8KKyAgeyAgICAzMSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNDYgKi8KKyAgeyAgICAzMSwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNDcgKi8KKyAgeyAgICAzMSwgICAgIDIzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNDggKi8KKyAgeyAgICAzMSwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNDkgKi8KKyAgeyAgICAzMSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNTAgKi8KKyAgeyAgICAzNywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNTEgKi8KKyAgeyAgICAzNywgICAgIDE3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNTIgKi8KKyAgeyAgICAzNywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNTMgKi8KKyAgeyAgICAzNywgICAgICAxLCAgICAgIDIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNTQgKi8KKyAgeyAgICAzNywgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNTUgKi8KKyAgeyAgICAzNywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNTYgKi8KKyAgeyAgICAzNywgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNTcgKi8KKyAgeyAgICAzNCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNTggKi8KKyAgeyAgICAzNCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNTkgKi8KKyAgeyAgICAzNCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNjAgKi8KKyAgeyAgICAzNCwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNjEgKi8KKyAgeyAgICAzNCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNjIgKi8KKyAgeyAgICAzNCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNjMgKi8KKyAgeyAgICA1MiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNjQgKi8KKyAgeyAgICAzOSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNjUgKi8KKyAgeyAgICAzOSwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNjYgKi8KKyAgeyAgICAzOSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNjcgKi8KKyAgeyAgICAzOSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNjggKi8KKyAgeyAgICAzMSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNjkgKi8KKyAgeyAgICAgNSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNzAgKi8KKyAgeyAgICAgNSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNzEgKi8KKyAgeyAgICAgNSwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNzIgKi8KKyAgeyAgICAgNSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNzMgKi8KKyAgeyAgICA5MCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNzQgKi8KKyAgeyAgICA5MCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNzUgKi8KKyAgeyAgICA5MCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNzYgKi8KKyAgeyAgICA5MCwgICAgIDEwLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNzcgKi8KKyAgeyAgICA5MCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNzggKi8KKyAgeyAgICA5MCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzNzkgKi8KKyAgeyAgICA5MCwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzODAgKi8KKyAgeyAgICAyNywgICAgIDExLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzODEgKi8KKyAgeyAgICA2MSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzODIgKi8KKyAgeyAgICA2MSwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAzODMgKi8KKyAgeyAgICA2MSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzODQgKi8KKyAgeyAgICA2MSwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzODUgKi8KKyAgeyAgICA2MSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzODYgKi8KKyAgeyAgICA2MSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzODcgKi8KKyAgeyAgICA3NSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzODggKi8KKyAgeyAgICA3NSwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAzODkgKi8KKyAgeyAgICA3NSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzOTAgKi8KKyAgeyAgICA3NSwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzOTEgKi8KKyAgeyAgICA5MiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzOTIgKi8KKyAgeyAgICA5MiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzOTMgKi8KKyAgeyAgICA5MiwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAzOTQgKi8KKyAgeyAgICA5MiwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzOTUgKi8KKyAgeyAgICA2OSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzOTYgKi8KKyAgeyAgICA2OSwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiAzOTcgKi8KKyAgeyAgICA2OSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiAzOTggKi8KKyAgeyAgICA2OSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiAzOTkgKi8KKyAgeyAgICA2OSwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MDAgKi8KKyAgeyAgICA3MiwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MDEgKi8KKyAgeyAgICA3MiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MDIgKi8KKyAgeyAgICA3MiwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MDMgKi8KKyAgeyAgICA3MiwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MDQgKi8KKyAgeyAgICA3NSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MDUgKi8KKyAgeyAgICAgOSwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MDYgKi8KKyAgeyAgICAgOSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MDcgKi8KKyAgeyAgICAxMiwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MDggKi8KKyAgeyAgICAxMiwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MDkgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgIDM1MzMyLCB9LCAvKiA0MTAgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAzODE0LCB9LCAvKiA0MTEgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICA2MywgICAgICAxLCB9LCAvKiA0MTIgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICA2MywgICAgIC0xLCB9LCAvKiA0MTMgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICA2MywgICAgLTU4LCB9LCAvKiA0MTQgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgIC03NjE1LCB9LCAvKiA0MTUgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgICA4LCB9LCAvKiA0MTYgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIC04LCB9LCAvKiA0MTcgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgIDc0LCB9LCAvKiA0MTggKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgIDg2LCB9LCAvKiA0MTkgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgMTAwLCB9LCAvKiA0MjAgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgMTI4LCB9LCAvKiA0MjEgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgMTEyLCB9LCAvKiA0MjIgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgMTI2LCB9LCAvKiA0MjMgKi8KKyAgeyAgICAxOSwgICAgICA4LCAgICAgMTIsICAgICAgMCwgICAgIC04LCB9LCAvKiA0MjQgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgICA5LCB9LCAvKiA0MjUgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgLTc0LCB9LCAvKiA0MjYgKi8KKyAgeyAgICAxOSwgICAgICA4LCAgICAgMTIsICAgICAgMCwgICAgIC05LCB9LCAvKiA0MjcgKi8KKyAgeyAgICAxOSwgICAgICA1LCAgICAgMTIsICAgICAyMSwgIC03MTczLCB9LCAvKiA0MjggKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgLTg2LCB9LCAvKiA0MjkgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAtMTAwLCB9LCAvKiA0MzAgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAtMTEyLCB9LCAvKiA0MzEgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAtMTI4LCB9LCAvKiA0MzIgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAtMTI2LCB9LCAvKiA0MzMgKi8KKyAgeyAgICAyNywgICAgICAxLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MzQgKi8KKyAgeyAgICAgOSwgICAgIDI3LCAgICAgIDIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MzUgKi8KKyAgeyAgICAgOSwgICAgIDI4LCAgICAgIDIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MzYgKi8KKyAgeyAgICAgOSwgICAgICAyLCAgICAgIDIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MzcgKi8KKyAgeyAgICAgOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MzggKi8KKyAgeyAgICAgOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0MzkgKi8KKyAgeyAgICAxOSwgICAgICA5LCAgICAgMTIsICAgICA2NywgIC03NTE3LCB9LCAvKiA0NDAgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICA3MSwgIC04MzgzLCB9LCAvKiA0NDEgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICA3NSwgIC04MjYyLCB9LCAvKiA0NDIgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDI4LCB9LCAvKiA0NDMgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTI4LCB9LCAvKiA0NDQgKi8KKyAgeyAgICAzMywgICAgIDE0LCAgICAgMTIsICAgICAgMCwgICAgIDE2LCB9LCAvKiA0NDUgKi8KKyAgeyAgICAzMywgICAgIDE0LCAgICAgMTIsICAgICAgMCwgICAgLTE2LCB9LCAvKiA0NDYgKi8KKyAgeyAgICAzMywgICAgIDE0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NDcgKi8KKyAgeyAgICAgOSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgIDI2LCB9LCAvKiA0NDggKi8KKyAgeyAgICAgOSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgLTI2LCB9LCAvKiA0NDkgKi8KKyAgeyAgICAgNCwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NTAgKi8KKyAgeyAgICAxNywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDQ4LCB9LCAvKiA0NTEgKi8KKyAgeyAgICAxNywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTQ4LCB9LCAvKiA0NTIgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTEwNzQzLCB9LCAvKiA0NTMgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgIC0zODE0LCB9LCAvKiA0NTQgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTEwNzI3LCB9LCAvKiA0NTUgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgLTEwNzk1LCB9LCAvKiA0NTYgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgLTEwNzkyLCB9LCAvKiA0NTcgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTEwNzgwLCB9LCAvKiA0NTggKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTEwNzQ5LCB9LCAvKiA0NTkgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTEwNzgzLCB9LCAvKiA0NjAgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTEwNzgyLCB9LCAvKiA0NjEgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTEwODE1LCB9LCAvKiA0NjIgKi8KKyAgeyAgICAxMCwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NjMgKi8KKyAgeyAgICAxMCwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NjQgKi8KKyAgeyAgICAxMCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NjUgKi8KKyAgeyAgICAxMCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NjYgKi8KKyAgeyAgICAxMCwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NjcgKi8KKyAgeyAgICAxNiwgICAgICA1LCAgICAgMTIsICAgICAgMCwgIC03MjY0LCB9LCAvKiA0NjggKi8KKyAgeyAgICA1OCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NjkgKi8KKyAgeyAgICA1OCwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NzAgKi8KKyAgeyAgICA1OCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NzEgKi8KKyAgeyAgICA1OCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NzIgKi8KKyAgeyAgICAyMiwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NzMgKi8KKyAgeyAgICAyMiwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NzQgKi8KKyAgeyAgICAyMiwgICAgIDE0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NzUgKi8KKyAgeyAgICAyMywgICAgIDEwLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NzYgKi8KKyAgeyAgICAyNiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NzcgKi8KKyAgeyAgICAyNiwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NzggKi8KKyAgeyAgICAyOSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0NzkgKi8KKyAgeyAgICAyOSwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0ODAgKi8KKyAgeyAgICAgMywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0ODEgKi8KKyAgeyAgICAyMywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0ODIgKi8KKyAgeyAgICAyMywgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0ODMgKi8KKyAgeyAgICAyOSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0ODQgKi8KKyAgeyAgICAyMiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0ODUgKi8KKyAgeyAgICA2MCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0ODYgKi8KKyAgeyAgICA2MCwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0ODcgKi8KKyAgeyAgICA2MCwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0ODggKi8KKyAgeyAgICA4NSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0ODkgKi8KKyAgeyAgICA4NSwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0OTAgKi8KKyAgeyAgICA4NSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0OTEgKi8KKyAgeyAgICA3NiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0OTIgKi8KKyAgeyAgICA3NiwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0OTMgKi8KKyAgeyAgICA3NiwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0OTQgKi8KKyAgeyAgICA3NiwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0OTUgKi8KKyAgeyAgICAxMiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0OTYgKi8KKyAgeyAgICAxMiwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0OTcgKi8KKyAgeyAgICA3OCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0OTggKi8KKyAgeyAgICA3OCwgICAgIDE0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA0OTkgKi8KKyAgeyAgICA3OCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MDAgKi8KKyAgeyAgICA3OCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MDEgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTM1MzMyLCB9LCAvKiA1MDIgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTQyMjgwLCB9LCAvKiA1MDMgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTQyMzA4LCB9LCAvKiA1MDQgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTQyMzE5LCB9LCAvKiA1MDUgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTQyMzE1LCB9LCAvKiA1MDYgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTQyMzA1LCB9LCAvKiA1MDcgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTQyMjU4LCB9LCAvKiA1MDggKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTQyMjgyLCB9LCAvKiA1MDkgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgLTQyMjYxLCB9LCAvKiA1MTAgKi8KKyAgeyAgICAzMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgOTI4LCB9LCAvKiA1MTEgKi8KKyAgeyAgICA0OCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MTIgKi8KKyAgeyAgICA0OCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MTMgKi8KKyAgeyAgICA0OCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MTQgKi8KKyAgeyAgICA0OCwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MTUgKi8KKyAgeyAgICA2NCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MTYgKi8KKyAgeyAgICA2NCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MTcgKi8KKyAgeyAgICA3NCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MTggKi8KKyAgeyAgICA3NCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MTkgKi8KKyAgeyAgICA3NCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MjAgKi8KKyAgeyAgICA3NCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MjEgKi8KKyAgeyAgICA3NCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MjIgKi8KKyAgeyAgICA2OCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MjMgKi8KKyAgeyAgICA2OCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MjQgKi8KKyAgeyAgICA2OCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MjUgKi8KKyAgeyAgICA2OCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MjYgKi8KKyAgeyAgICA3MywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MjcgKi8KKyAgeyAgICA3MywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MjggKi8KKyAgeyAgICA3MywgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MjkgKi8KKyAgeyAgICA3MywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MzAgKi8KKyAgeyAgICA4MywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MzEgKi8KKyAgeyAgICA4MywgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MzIgKi8KKyAgeyAgICA4MywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MzMgKi8KKyAgeyAgICA4MywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MzQgKi8KKyAgeyAgICA4MywgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MzUgKi8KKyAgeyAgICAzOCwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MzYgKi8KKyAgeyAgICA2NywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MzcgKi8KKyAgeyAgICA2NywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MzggKi8KKyAgeyAgICA2NywgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA1MzkgKi8KKyAgeyAgICA2NywgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NDAgKi8KKyAgeyAgICA2NywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NDEgKi8KKyAgeyAgICA5MSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NDIgKi8KKyAgeyAgICA5MSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NDMgKi8KKyAgeyAgICA5MSwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NDQgKi8KKyAgeyAgICA5MSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NDUgKi8KKyAgeyAgICA4NiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NDYgKi8KKyAgeyAgICA4NiwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NDcgKi8KKyAgeyAgICA4NiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NDggKi8KKyAgeyAgICA4NiwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NDkgKi8KKyAgeyAgICA4NiwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NTAgKi8KKyAgeyAgICAzMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAtOTI4LCB9LCAvKiA1NTEgKi8KKyAgeyAgICAgOCwgICAgICA1LCAgICAgMTIsICAgICAgMCwgLTM4ODY0LCB9LCAvKiA1NTIgKi8KKyAgeyAgICA4NiwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NTMgKi8KKyAgeyAgICAyMywgICAgICA3LCAgICAgIDksICAgICAgMCwgICAgICAwLCB9LCAvKiA1NTQgKi8KKyAgeyAgICAyMywgICAgICA3LCAgICAgMTAsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NTUgKi8KKyAgeyAgICAgOSwgICAgICA0LCAgICAgIDIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NTYgKi8KKyAgeyAgICAgOSwgICAgICAzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NTcgKi8KKyAgeyAgICAyNSwgICAgIDI1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NTggKi8KKyAgeyAgICAgMCwgICAgIDI0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NTkgKi8KKyAgeyAgICAgOSwgICAgICA2LCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NjAgKi8KKyAgeyAgICAzNSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NjEgKi8KKyAgeyAgICAxOSwgICAgIDE0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NjIgKi8KKyAgeyAgICAxOSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NjMgKi8KKyAgeyAgICAxOSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NjQgKi8KKyAgeyAgICA3MCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NjUgKi8KKyAgeyAgICA2NiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NjYgKi8KKyAgeyAgICA0MSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NjcgKi8KKyAgeyAgICA0MSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NjggKi8KKyAgeyAgICAxOCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NjkgKi8KKyAgeyAgICAxOCwgICAgIDE0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NzAgKi8KKyAgeyAgIDExNywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NzEgKi8KKyAgeyAgIDExNywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NzIgKi8KKyAgeyAgICA1OSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NzMgKi8KKyAgeyAgICA1OSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NzQgKi8KKyAgeyAgICA0MiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NzUgKi8KKyAgeyAgICA0MiwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NzYgKi8KKyAgeyAgICA0MiwgICAgIDE0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1NzcgKi8KKyAgeyAgICAxMywgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDQwLCB9LCAvKiA1NzggKi8KKyAgeyAgICAxMywgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTQwLCB9LCAvKiA1NzkgKi8KKyAgeyAgICA0NiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1ODAgKi8KKyAgeyAgICA0NCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1ODEgKi8KKyAgeyAgICA0NCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1ODIgKi8KKyAgeyAgIDEwNSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1ODMgKi8KKyAgeyAgIDEwMywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1ODQgKi8KKyAgeyAgIDEwMywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1ODUgKi8KKyAgeyAgIDEwOSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1ODYgKi8KKyAgeyAgICAxMSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1ODcgKi8KKyAgeyAgICA4MCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1ODggKi8KKyAgeyAgICA4MCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1ODkgKi8KKyAgeyAgICA4MCwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1OTAgKi8KKyAgeyAgIDExOSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1OTEgKi8KKyAgeyAgIDExOSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1OTIgKi8KKyAgeyAgIDExOSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1OTMgKi8KKyAgeyAgIDExNSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1OTQgKi8KKyAgeyAgIDExNSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1OTUgKi8KKyAgeyAgIDEyNywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1OTYgKi8KKyAgeyAgIDEyNywgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1OTcgKi8KKyAgeyAgICA2NSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1OTggKi8KKyAgeyAgICA2NSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA1OTkgKi8KKyAgeyAgICA2NSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MDAgKi8KKyAgeyAgICA3MSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MDEgKi8KKyAgeyAgICA3MSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MDIgKi8KKyAgeyAgICA5NywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MDMgKi8KKyAgeyAgICA5NiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MDQgKi8KKyAgeyAgICA5NiwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MDUgKi8KKyAgeyAgICAzMCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MDYgKi8KKyAgeyAgICAzMCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MDcgKi8KKyAgeyAgICAzMCwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MDggKi8KKyAgeyAgICAzMCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MDkgKi8KKyAgeyAgICA4NywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MTAgKi8KKyAgeyAgICA4NywgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MTEgKi8KKyAgeyAgICA4NywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MTIgKi8KKyAgeyAgIDExNiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MTMgKi8KKyAgeyAgIDExNiwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MTQgKi8KKyAgeyAgIDExMSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MTUgKi8KKyAgeyAgIDExMSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MTYgKi8KKyAgeyAgIDExMSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MTcgKi8KKyAgeyAgIDExMSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MTggKi8KKyAgeyAgIDExMSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MTkgKi8KKyAgeyAgICA3NywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MjAgKi8KKyAgeyAgICA3NywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MjEgKi8KKyAgeyAgICA4MiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MjIgKi8KKyAgeyAgICA4MiwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MjMgKi8KKyAgeyAgICA4MSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MjQgKi8KKyAgeyAgICA4MSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MjUgKi8KKyAgeyAgIDEyMCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MjYgKi8KKyAgeyAgIDEyMCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MjcgKi8KKyAgeyAgIDEyMCwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MjggKi8KKyAgeyAgICA4OCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MjkgKi8KKyAgeyAgIDEyOSwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDY0LCB9LCAvKiA2MzAgKi8KKyAgeyAgIDEyOSwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTY0LCB9LCAvKiA2MzEgKi8KKyAgeyAgIDEyOSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MzIgKi8KKyAgeyAgICAgMCwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MzMgKi8KKyAgeyAgICA5MywgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MzQgKi8KKyAgeyAgICA5MywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MzUgKi8KKyAgeyAgICA5MywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MzYgKi8KKyAgeyAgICA5MywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MzcgKi8KKyAgeyAgICA5MywgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MzggKi8KKyAgeyAgICA5MywgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2MzkgKi8KKyAgeyAgICA4NCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NDAgKi8KKyAgeyAgICA4NCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NDEgKi8KKyAgeyAgICA4NCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NDIgKi8KKyAgeyAgICA4NCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NDMgKi8KKyAgeyAgICA4NCwgICAgICAxLCAgICAgIDIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NDQgKi8KKyAgeyAgIDEwMCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NDUgKi8KKyAgeyAgIDEwMCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NDYgKi8KKyAgeyAgICA5NSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NDcgKi8KKyAgeyAgICA5NSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NDggKi8KKyAgeyAgICA5NSwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NDkgKi8KKyAgeyAgICA5NSwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NTAgKi8KKyAgeyAgICA5NSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NTEgKi8KKyAgeyAgIDExMCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NTIgKi8KKyAgeyAgIDExMCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NTMgKi8KKyAgeyAgIDExMCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NTQgKi8KKyAgeyAgICA5OSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NTUgKi8KKyAgeyAgICA5OSwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NTYgKi8KKyAgeyAgICA5OSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NTcgKi8KKyAgeyAgICA5OSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NTggKi8KKyAgeyAgICA5OSwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NTkgKi8KKyAgeyAgICA0NywgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NjAgKi8KKyAgeyAgIDEwNywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NjEgKi8KKyAgeyAgIDEwNywgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NjIgKi8KKyAgeyAgIDEwNywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NjMgKi8KKyAgeyAgIDEwNywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NjQgKi8KKyAgeyAgIDEyOCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NjUgKi8KKyAgeyAgIDEyOCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NjYgKi8KKyAgeyAgIDEwOCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NjcgKi8KKyAgeyAgIDEwOCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NjggKi8KKyAgeyAgIDEwOCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NjkgKi8KKyAgeyAgIDEwOCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NzAgKi8KKyAgeyAgIDEwNiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NzEgKi8KKyAgeyAgIDEwNiwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NzIgKi8KKyAgeyAgIDEwNiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NzMgKi8KKyAgeyAgIDEwNiwgICAgIDEwLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NzQgKi8KKyAgeyAgIDEyMywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NzUgKi8KKyAgeyAgIDEyMywgICAgIDEwLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NzYgKi8KKyAgeyAgIDEyMywgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NzcgKi8KKyAgeyAgIDEyMywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NzggKi8KKyAgeyAgIDEyMywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2NzkgKi8KKyAgeyAgIDEyMywgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2ODAgKi8KKyAgeyAgIDEyMiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2ODEgKi8KKyAgeyAgIDEyMiwgICAgIDEwLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2ODIgKi8KKyAgeyAgIDEyMiwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2ODMgKi8KKyAgeyAgIDEyMiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2ODQgKi8KKyAgeyAgIDEyMiwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2ODUgKi8KKyAgeyAgIDExMywgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2ODYgKi8KKyAgeyAgIDExMywgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2ODcgKi8KKyAgeyAgIDExMywgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2ODggKi8KKyAgeyAgIDExMywgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2ODkgKi8KKyAgeyAgIDExMywgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2OTAgKi8KKyAgeyAgIDEwMSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2OTEgKi8KKyAgeyAgIDEwMSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2OTIgKi8KKyAgeyAgIDEwMSwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2OTMgKi8KKyAgeyAgIDEwMSwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2OTQgKi8KKyAgeyAgIDEyNSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2OTUgKi8KKyAgeyAgIDEyNSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA2OTYgKi8KKyAgeyAgIDEyNSwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA2OTcgKi8KKyAgeyAgIDEyNSwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2OTggKi8KKyAgeyAgIDEyNSwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA2OTkgKi8KKyAgeyAgIDEyNSwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MDAgKi8KKyAgeyAgIDEyNSwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MDEgKi8KKyAgeyAgIDEyNCwgICAgICA5LCAgICAgMTIsICAgICAgMCwgICAgIDMyLCB9LCAvKiA3MDIgKi8KKyAgeyAgIDEyNCwgICAgICA1LCAgICAgMTIsICAgICAgMCwgICAgLTMyLCB9LCAvKiA3MDMgKi8KKyAgeyAgIDEyNCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MDQgKi8KKyAgeyAgIDEyNCwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MDUgKi8KKyAgeyAgIDEyNCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MDYgKi8KKyAgeyAgIDEyMSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MDcgKi8KKyAgeyAgICA2MiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MDggKi8KKyAgeyAgICA2MiwgICAgIDE0LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MDkgKi8KKyAgeyAgICA2MiwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MTAgKi8KKyAgeyAgICA3OSwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MTEgKi8KKyAgeyAgIDEyNiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MTIgKi8KKyAgeyAgIDExNCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MTMgKi8KKyAgeyAgIDExNCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MTQgKi8KKyAgeyAgIDExNCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MTUgKi8KKyAgeyAgIDEwMiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MTYgKi8KKyAgeyAgIDEwMiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MTcgKi8KKyAgeyAgIDEwMiwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MTggKi8KKyAgeyAgIDExOCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MTkgKi8KKyAgeyAgIDExOCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MjAgKi8KKyAgeyAgIDExOCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MjEgKi8KKyAgeyAgIDExOCwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MjIgKi8KKyAgeyAgIDExOCwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MjMgKi8KKyAgeyAgIDExOCwgICAgIDEzLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MjQgKi8KKyAgeyAgIDExOCwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MjUgKi8KKyAgeyAgICA5OCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MjYgKi8KKyAgeyAgICA5OCwgICAgIDEwLCAgICAgIDUsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MjcgKi8KKyAgeyAgICA5OCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MjggKi8KKyAgeyAgICA5OCwgICAgICA2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MjkgKi8KKyAgeyAgIDEwNCwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MzAgKi8KKyAgeyAgIDEwNCwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MzEgKi8KKyAgeyAgIDEwNCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MzIgKi8KKyAgeyAgIDEwNCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MzMgKi8KKyAgeyAgICAgOSwgICAgIDEwLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MzQgKi8KKyAgeyAgICAxOSwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MzUgKi8KKyAgeyAgIDEzMCwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MzYgKi8KKyAgeyAgIDEzMCwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MzcgKi8KKyAgeyAgIDEzMCwgICAgIDIxLCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MzggKi8KKyAgeyAgIDExMiwgICAgICA3LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3MzkgKi8KKyAgeyAgIDExMiwgICAgIDE1LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3NDAgKi8KKyAgeyAgIDExMiwgICAgIDEyLCAgICAgIDMsICAgICAgMCwgICAgICAwLCB9LCAvKiA3NDEgKi8KKyAgeyAgICAgOSwgICAgIDI2LCAgICAgMTEsICAgICAgMCwgICAgICAwLCB9LCAvKiA3NDIgKi8KKyAgeyAgICAyNiwgICAgIDI2LCAgICAgMTIsICAgICAgMCwgICAgICAwLCB9LCAvKiA3NDMgKi8KK307CisKK2NvbnN0IHVpbnQ4X3QgUFJJVih1Y2Rfc3RhZ2UxKVtdID0geyAvKiA4NzA0IGJ5dGVzICovCisgIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC8qIFUrMDAwMCAqLworIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAvKiBVKzA4MDAgKi8KKyAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDEsIDQxLCA0MiwgNDMsIDQ0LCA0NSwgLyogVSsxMDAwICovCisgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIC8qIFUrMTgwMCAqLworIDYyLCA2MywgNjQsIDY1LCA2NiwgNjYsIDY3LCA2OCwgNjksIDcwLCA3MSwgNzIsIDczLCA3MSwgNzQsIDc1LCAvKiBVKzIwMDAgKi8KKyA3NiwgNzYsIDY2LCA3NywgNjYsIDY2LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgLyogVSsyODAwICovCisgODgsIDg5LCA5MCwgOTEsIDkyLCA5MywgOTQsIDcxLCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrMzAwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAvKiBVKzM4MDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgLyogVSs0MDAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NiwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrNDgwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAvKiBVKzUwMDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgLyogVSs1ODAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrNjAwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAvKiBVKzY4MDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgLyogVSs3MDAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrNzgwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAvKiBVKzgwMDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgLyogVSs4ODAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrOTAwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk3LCAvKiBVKzk4MDAgKi8KKyA5OCwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LDEwMCwxMDEsMTAxLDEwMiwxMDMsMTA0LDEwNSwgLyogVStBMDAwICovCisxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMTQsIC8qIFUrQTgwMCAqLworMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDExNCwxMTUsMTE2LCAvKiBVK0IwMDAgKi8KKzExNywxMTgsMTE5LDEyMCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTE0LDExNSwxMTYsMTE3LDExOCwgLyogVStCODAwICovCisxMTksMTIwLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsIC8qIFUrQzAwMCAqLworMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMTQsMTE1LCAvKiBVK0M4MDAgKi8KKzExNiwxMTcsMTE4LDExOSwxMjAsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDExNCwxMTUsMTE2LDEyMSwgLyogVStEMDAwICovCisxMjIsMTIyLDEyMiwxMjIsMTIyLDEyMiwxMjIsMTIyLDEyMiwxMjIsMTIyLDEyMiwxMjIsMTIyLDEyMiwxMjIsIC8qIFUrRDgwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0UwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVStFODAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsIC8qIFUrRjAwMCAqLworMTIzLDEyMywgOTUsIDk1LDEyNCwxMjUsMTI2LDEyNywxMjgsMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LCAvKiBVK0Y4MDAgKi8KKzEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTM5LDE0NiwxNDYsMTQ3LDEzOSwgLyogVSsxMDAwMCAqLworMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDEzOSwxMzksMTU4LDEzOSwxMzksMTM5LCAvKiBVKzEwODAwICovCisxNTksMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTM5LDEzOSwxNjYsMTM5LDE2NywxNjgsMTY5LDE3MCwxMzksIC8qIFUrMTEwMDAgKi8KKzEzOSwxNzEsMTM5LDEzOSwxMzksMTcyLDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSsxMTgwMCAqLworMTczLDE3MywxNzMsMTczLDE3MywxNzMsMTczLDE3NCwxNzUsMTczLDE3NiwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzEyMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMTI4MDAgKi8KKzE3NywxNzcsMTc3LDE3NywxNzcsMTc3LDE3NywxNzcsMTc4LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSsxMzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzEzODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDE3OSwxNzksMTc5LDE3OSwxODAsMTM5LDEzOSwxMzksIC8qIFUrMTQwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSsxNDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzE1MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMTU4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSsxNjAwMCAqLworMTgxLDE4MSwxODEsMTgxLDE4MiwxODMsMTg0LDE4NSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxODYsMTg3LCAvKiBVKzE2ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMTcwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSsxNzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzE4MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMTg4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSsxOTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzE5ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMUEwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSsxQTgwMCAqLworMTg4LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzFCMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDE4OSwxOTAsMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMUI4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSsxQzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzFDODAwICovCisgNzEsMTkxLDE5MiwxOTMsMTk0LDEzOSwxOTUsMTM5LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsIC8qIFUrMUQwMDAgKi8KKzIwNCwyMDQsMjA0LDIwNCwyMDUsMjA2LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSsxRDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzFFMDAwICovCisyMDcsMjA4LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwyMDksMjEwLDEzOSwxMzksIC8qIFUrMUU4MDAgKi8KKzIxMSwyMTIsMjEzLDIxNCwyMTUsMTM5LCA3MSwyMTYsIDcxLCA3MSwyMTcsMjE4LCA3MSwyMTksMjIwLDIyMSwgLyogVSsxRjAwMCAqLworMjIyLDIyMywyMjQsMjI1LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzFGODAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrMjAwMDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgLyogVSsyMDgwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAvKiBVKzIxMDAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrMjE4MDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgLyogVSsyMjAwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAvKiBVKzIyODAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrMjMwMDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgLyogVSsyMzgwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAvKiBVKzI0MDAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrMjQ4MDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgLyogVSsyNTAwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAvKiBVKzI1ODAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrMjYwMDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgLyogVSsyNjgwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAvKiBVKzI3MDAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrMjc4MDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgLyogVSsyODAwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAvKiBVKzI4ODAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrMjkwMDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgLyogVSsyOTgwMCAqLworIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LDIyNiwgOTUsIDk1LCAvKiBVKzJBMDAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrMkE4MDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsMjI3LCA5NSwgLyogVSsyQjAwMCAqLworMjI4LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAvKiBVKzJCODAwICovCisgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIC8qIFUrMkMwMDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCA5NSwyMjksMTM5LDEzOSwgLyogVSsyQzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzJEMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMkQ4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSsyRTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzJFODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMkYwMDAgKi8KKyA5NSwgOTUsIDk1LCA5NSwyMzAsMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSsyRjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzMwMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMzA4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSszMTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzMxODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMzIwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSszMjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzMzMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMzM4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSszNDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzM0ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMzUwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSszNTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzM2MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMzY4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSszNzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzM3ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMzgwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSszODgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzM5MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrMzk4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSszQTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzNBODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrM0IwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSszQjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzNDMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrM0M4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSszRDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzNEODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrM0UwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSszRTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzNGMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrM0Y4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs0MDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzQwODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNDEwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs0MTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzQyMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNDI4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs0MzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzQzODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNDQwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs0NDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzQ1MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNDU4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs0NjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzQ2ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNDcwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs0NzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzQ4MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNDg4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs0OTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzQ5ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNEEwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs0QTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzRCMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNEI4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs0QzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzRDODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNEQwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs0RDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzRFMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNEU4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs0RjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzRGODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNTAwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs1MDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzUxMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNTE4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs1MjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzUyODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNTMwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs1MzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzU0MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNTQ4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs1NTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzU1ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNTYwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs1NjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzU3MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNTc4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs1ODAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzU4ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNTkwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs1OTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzVBMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNUE4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs1QjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzVCODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNUMwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs1QzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzVEMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNUQ4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs1RTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzVFODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNUYwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs1RjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzYwMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNjA4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs2MTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzYxODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNjIwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs2MjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzYzMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNjM4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs2NDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzY0ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNjUwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs2NTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzY2MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNjY4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs2NzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzY3ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNjgwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs2ODgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzY5MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNjk4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs2QTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzZBODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNkIwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs2QjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzZDMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNkM4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs2RDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzZEODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNkUwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs2RTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzZGMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNkY4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs3MDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzcwODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNzEwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs3MTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzcyMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNzI4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs3MzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzczODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNzQwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs3NDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzc1MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNzU4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs3NjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzc2ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNzcwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs3NzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzc4MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrNzg4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs3OTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzc5ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrN0EwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs3QTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzdCMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrN0I4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs3QzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzdDODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrN0QwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs3RDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzdFMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrN0U4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs3RjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzdGODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrODAwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs4MDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzgxMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrODE4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs4MjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzgyODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrODMwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs4MzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzg0MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrODQ4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs4NTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzg1ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrODYwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs4NjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzg3MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrODc4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs4ODAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzg4ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrODkwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs4OTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzhBMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOEE4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs4QjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzhCODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOEMwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs4QzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzhEMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOEQ4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs4RTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzhFODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOEYwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs4RjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzkwMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOTA4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs5MTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzkxODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOTIwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs5MjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzkzMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOTM4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs5NDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzk0ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOTUwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs5NTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzk2MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOTY4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs5NzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzk3ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOTgwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs5ODgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzk5MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOTk4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs5QTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzlBODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOUIwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs5QjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzlDMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOUM4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs5RDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzlEODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOUUwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVSs5RTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVKzlGMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrOUY4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStBMDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0EwODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQTEwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStBMTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0EyMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQTI4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStBMzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0EzODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQTQwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStBNDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0E1MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQTU4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStBNjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0E2ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQTcwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStBNzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0E4MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQTg4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStBOTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0E5ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQUEwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStBQTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0FCMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQUI4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStBQzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0FDODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQUQwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStBRDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0FFMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQUU4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStBRjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0FGODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQjAwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStCMDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0IxMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQjE4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStCMjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0IyODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQjMwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStCMzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0I0MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQjQ4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStCNTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0I1ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQjYwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStCNjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0I3MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQjc4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStCODAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0I4ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQjkwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStCOTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0JBMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQkE4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStCQjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0JCODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQkMwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStCQzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0JEMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQkQ4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStCRTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0JFODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQkYwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStCRjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0MwMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQzA4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStDMTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0MxODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQzIwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStDMjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0MzMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQzM4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStDNDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0M0ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQzUwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStDNTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0M2MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQzY4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStDNzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0M3ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQzgwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStDODgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0M5MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQzk4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStDQTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0NBODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQ0IwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStDQjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0NDMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQ0M4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStDRDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0NEODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQ0UwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStDRTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0NGMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrQ0Y4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStEMDAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0QwODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRDEwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStEMTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0QyMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRDI4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStEMzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0QzODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRDQwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStENDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0Q1MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRDU4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStENjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0Q2ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRDcwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStENzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0Q4MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRDg4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStEOTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0Q5ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrREEwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStEQTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0RCMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrREI4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStEQzAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0RDODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrREQwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStERDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0RFMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrREU4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStERjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0RGODAwICovCisyMzEsMjMyLDIzMywyMzQsMjMyLDIzMiwyMzIsMjMyLDIzMiwyMzIsMjMyLDIzMiwyMzIsMjMyLDIzMiwyMzIsIC8qIFUrRTAwMDAgKi8KKzIzMiwyMzIsMjMyLDIzMiwyMzIsMjMyLDIzMiwyMzIsMjMyLDIzMiwyMzIsMjMyLDIzMiwyMzIsMjMyLDIzMiwgLyogVStFMDgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0UxMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRTE4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStFMjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0UyODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRTMwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStFMzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0U0MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRTQ4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStFNTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0U1ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRTYwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStFNjgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0U3MDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRTc4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStFODAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0U4ODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRTkwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStFOTgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0VBMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRUE4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStFQjAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0VCODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRUMwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStFQzgwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0VEMDAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRUQ4MDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStFRTAwMCAqLworMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LCAvKiBVK0VFODAwICovCisxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksIC8qIFUrRUYwMDAgKi8KKzEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwxMzksMTM5LDEzOSwgLyogVStFRjgwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0YwMDAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsIC8qIFUrRjA4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVStGMTAwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0YxODAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsIC8qIFUrRjIwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVStGMjgwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0YzMDAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsIC8qIFUrRjM4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVStGNDAwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0Y0ODAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsIC8qIFUrRjUwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVStGNTgwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0Y2MDAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsIC8qIFUrRjY4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVStGNzAwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0Y3ODAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsIC8qIFUrRjgwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVStGODgwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0Y5MDAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsIC8qIFUrRjk4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVStGQTAwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0ZBODAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsIC8qIFUrRkIwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVStGQjgwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0ZDMDAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsIC8qIFUrRkM4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVStGRDAwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0ZEODAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsIC8qIFUrRkUwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVStGRTgwMCAqLworMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLCAvKiBVK0ZGMDAwICovCisxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywyMzUsIC8qIFUrRkY4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDAwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDA4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDEwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDE4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDIwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDI4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDMwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDM4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDQwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDQ4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDUwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDU4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDYwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDY4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDcwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDc4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDgwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDg4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDkwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMDk4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMEEwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMEE4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMEIwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMEI4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMEMwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMEM4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMEQwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMEQ4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMEUwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMEU4MDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywgLyogVSsxMEYwMDAgKi8KKzEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDEyMywxMjMsMTIzLDIzNSwgLyogVSsxMEY4MDAgKi8KK307CisKK2NvbnN0IHVpbnQxNl90IFBSSVYodWNkX3N0YWdlMilbXSA9IHsgLyogNjA0MTYgYnl0ZXMsIGJsb2NrID0gMTI4ICovCisvKiBibG9jayAwICovCisgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAxLCAgMCwgIDAsICAyLCAgMCwgIDAsCisgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsCisgIDMsICA0LCAgNCwgIDQsICA1LCAgNCwgIDQsICA0LCAgNiwgIDcsICA0LCAgOCwgIDQsICA5LCAgNCwgIDQsCisgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsICA0LCAgNCwgIDgsICA4LCAgOCwgIDQsCisgIDQsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMiwgMTEsIDExLCAxMSwgMTEsCisgMTEsIDExLCAxMSwgMTMsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAgNiwgIDQsICA3LCAxNCwgMTUsCisgMTQsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNywgMTYsIDE2LCAxNiwgMTYsCisgMTYsIDE2LCAxNiwgMTgsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAgNiwgIDgsICA3LCAgOCwgIDAsCisKKy8qIGJsb2NrIDEgKi8KKyAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKyAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwgIDAsICAwLCAgMCwKKyAgMywgIDQsICA1LCAgNSwgIDUsICA1LCAxOSwgIDQsIDE0LCAxOSwgMjAsIDIxLCAgOCwgMjIsIDE5LCAxNCwKKyAxOSwgIDgsIDIzLCAyMywgMTQsIDI0LCAgNCwgIDQsIDE0LCAyMywgMjAsIDI1LCAyMywgMjMsIDIzLCAgNCwKKyAxMSwgMTEsIDExLCAxMSwgMTEsIDI2LCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwKKyAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgIDgsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAyNywKKyAxNiwgMTYsIDE2LCAxNiwgMTYsIDI4LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwKKyAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgIDgsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAyOSwKKworLyogYmxvY2sgMiAqLworIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLAorIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLAorIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLAorIDMyLCAzMywgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzMsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLAorIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMzLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLAorIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLAorIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLAorIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzQsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDM1LAorCisvKiBibG9jayAzICovCisgMzYsIDM3LCAzMCwgMzEsIDMwLCAzMSwgMzgsIDMwLCAzMSwgMzksIDM5LCAzMCwgMzEsIDMzLCA0MCwgNDEsCisgNDIsIDMwLCAzMSwgMzksIDQzLCA0NCwgNDUsIDQ2LCAzMCwgMzEsIDQ3LCAzMywgNDUsIDQ4LCA0OSwgNTAsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgNTEsIDMwLCAzMSwgNTEsIDMzLCAzMywgMzAsIDMxLCA1MSwgMzAsCisgMzEsIDUyLCA1MiwgMzAsIDMxLCAzMCwgMzEsIDUzLCAzMCwgMzEsIDMzLCAyMCwgMzAsIDMxLCAzMywgNTQsCisgMjAsIDIwLCAyMCwgMjAsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDMwLCAzMSwgMzAsCisgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDY0LCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzMsIDY1LCA2NiwgNjcsIDMwLCAzMSwgNjgsIDY5LCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisKKy8qIGJsb2NrIDQgKi8KKyAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwKKyAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwKKyA3MCwgMzMsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwKKyAzMCwgMzEsIDMwLCAzMSwgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgNzEsIDMwLCAzMSwgNzIsIDczLCA3NCwKKyA3NCwgMzAsIDMxLCA3NSwgNzYsIDc3LCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwKKyA3OCwgNzksIDgwLCA4MSwgODIsIDMzLCA4MywgODMsIDMzLCA4NCwgMzMsIDg1LCA4NiwgMzMsIDMzLCAzMywKKyA4MywgODcsIDMzLCA4OCwgMzMsIDg5LCA5MCwgMzMsIDkxLCA5MiwgMzMsIDkzLCA5NCwgMzMsIDMzLCA5MiwKKyAzMywgOTUsIDk2LCAzMywgMzMsIDk3LCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgOTgsIDMzLCAzMywKKworLyogYmxvY2sgNSAqLworIDk5LCAzMywgMzMsIDk5LCAzMywgMzMsIDMzLDEwMCwgOTksMTAxLDEwMiwxMDIsMTAzLCAzMywgMzMsIDMzLAorIDMzLCAzMywxMDQsIDMzLCAyMCwgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLDEwNSwxMDYsIDMzLAorIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLAorMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA4LDEwOCwxMDgsMTA4LDEwOCwxMDgsMTA4LAorMTA4LDEwOCwgMTQsIDE0LCAxNCwgMTQsMTA4LDEwOCwxMDgsMTA4LDEwOCwxMDgsMTA4LDEwOCwxMDgsMTA4LAorMTA4LDEwOCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorMTA3LDEwNywxMDcsMTA3LDEwNywgMTQsIDE0LCAxNCwgMTQsIDE0LDEwOSwxMDksMTA4LCAxNCwxMDgsIDE0LAorIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LAorCisvKiBibG9jayA2ICovCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMSwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTIsMTEzLDExMiwxMTMsMTA4LDExNCwxMTIsMTEzLDExNSwxMTUsMTE2LDExNywxMTcsMTE3LCAgNCwxMTgsCisKKy8qIGJsb2NrIDcgKi8KKzExNSwxMTUsMTE1LDExNSwxMTQsIDE0LDExOSwgIDQsMTIwLDEyMCwxMjAsMTE1LDEyMSwxMTUsMTIyLDEyMiwKKzEyMywxMjQsMTI1LDEyNCwxMjQsMTI2LDEyNCwxMjQsMTI3LDEyOCwxMjksMTI0LDEzMCwxMjQsMTI0LDEyNCwKKzEzMSwxMzIsMTE1LDEzMywxMjQsMTI0LDEzNCwxMjQsMTI0LDEzNSwxMjQsMTI0LDEzNiwxMzcsMTM3LDEzNywKKzEyMywxMzgsMTM5LDEzOCwxMzgsMTQwLDEzOCwxMzgsMTQxLDE0MiwxNDMsMTM4LDE0NCwxMzgsMTM4LDEzOCwKKzE0NSwxNDYsMTQ3LDE0OCwxMzgsMTM4LDE0OSwxMzgsMTM4LDE1MCwxMzgsMTM4LDE1MSwxNTIsMTUyLDE1MywKKzE1NCwxNTUsMTU2LDE1NiwxNTYsMTU3LDE1OCwxNTksMTEyLDExMywxMTIsMTEzLDExMiwxMTMsMTEyLDExMywKKzExMiwxMTMsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwKKzE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxMTIsMTEzLDE2OSwxMTIsMTEzLDEyMywxNzAsMTcwLDE3MCwKKworLyogYmxvY2sgOCAqLworMTcxLDE3MSwxNzEsMTcxLDE3MSwxNzEsMTcxLDE3MSwxNzEsMTcxLDE3MSwxNzEsMTcxLDE3MSwxNzEsMTcxLAorMTcyLDE3MiwxNzIsMTcyLDE3MiwxNzIsMTcyLDE3MiwxNzIsMTcyLDE3MiwxNzIsMTcyLDE3MiwxNzIsMTcyLAorMTcyLDE3MiwxNzIsMTcyLDE3MiwxNzIsMTcyLDE3MiwxNzIsMTcyLDE3MiwxNzIsMTcyLDE3MiwxNzIsMTcyLAorMTczLDE3MywxNzMsMTczLDE3MywxNzMsMTczLDE3MywxNzMsMTczLDE3MywxNzMsMTczLDE3MywxNzMsMTczLAorMTczLDE3MywxNzMsMTczLDE3MywxNzMsMTczLDE3MywxNzMsMTczLDE3MywxNzMsMTczLDE3MywxNzMsMTczLAorMTc0LDE3NCwxNzQsMTc0LDE3NCwxNzQsMTc0LDE3NCwxNzQsMTc0LDE3NCwxNzQsMTc0LDE3NCwxNzQsMTc0LAorMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LAorMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LAorCisvKiBibG9jayA5ICovCisxNzUsMTc2LDE3NywxNzgsMTc4LDExMCwxMTAsMTc4LDE3OSwxNzksMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisxODAsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxODEsCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisKKy8qIGJsb2NrIDEwICovCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisxMTUsMTgyLDE4MiwxODIsMTgyLDE4MiwxODIsMTgyLDE4MiwxODIsMTgyLDE4MiwxODIsMTgyLDE4MiwxODIsCisxODIsMTgyLDE4MiwxODIsMTgyLDE4MiwxODIsMTgyLDE4MiwxODIsMTgyLDE4MiwxODIsMTgyLDE4MiwxODIsCisxODIsMTgyLDE4MiwxODIsMTgyLDE4MiwxODIsMTE1LDExNSwxODMsMTg0LDE4NCwxODQsMTg0LDE4NCwxODQsCisxMTUsMTg1LDE4NSwxODUsMTg1LDE4NSwxODUsMTg1LDE4NSwxODUsMTg1LDE4NSwxODUsMTg1LDE4NSwxODUsCisxODUsMTg1LDE4NSwxODUsMTg1LDE4NSwxODUsMTg1LDE4NSwxODUsMTg1LDE4NSwxODUsMTg1LDE4NSwxODUsCisKKy8qIGJsb2NrIDExICovCisxODUsMTg1LDE4NSwxODUsMTg1LDE4NSwxODUsMTg2LDExNSwgIDQsMTg3LDExNSwxMTUsMTg4LDE4OCwxODksCisxMTUsMTkwLDE5MCwxOTAsMTkwLDE5MCwxOTAsMTkwLDE5MCwxOTAsMTkwLDE5MCwxOTAsMTkwLDE5MCwxOTAsCisxOTAsMTkwLDE5MCwxOTAsMTkwLDE5MCwxOTAsMTkwLDE5MCwxOTAsMTkwLDE5MCwxOTAsMTkwLDE5MCwxOTAsCisxOTAsMTkwLDE5MCwxOTAsMTkwLDE5MCwxOTAsMTkwLDE5MCwxOTAsMTkwLDE5MCwxOTAsMTkwLDE5MSwxOTAsCisxOTIsMTkwLDE5MCwxOTIsMTkwLDE5MCwxOTIsMTkwLDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxOTMsMTkzLDE5MywxOTMsMTkzLDE5MywxOTMsMTkzLDE5MywxOTMsMTkzLDE5MywxOTMsMTkzLDE5MywxOTMsCisxOTMsMTkzLDE5MywxOTMsMTkzLDE5MywxOTMsMTkzLDE5MywxOTMsMTkzLDExNSwxMTUsMTE1LDExNSwxMTUsCisxOTMsMTkzLDE5MywxOTIsMTkyLDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDEyICovCisxOTQsMTk0LDE5NCwxOTQsMTk0LCAyMiwxOTUsMTk1LDE5NSwxOTYsMTk2LDE5NywgIDQsMTk2LDE5OCwxOTgsCisxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksMTk5LCAgNCwgMjIsMTE1LDE5NiwgIDQsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisxMDgsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksCisyMDEsMjAxLDIwMSwyMDEsMjAxLDIwMSwyMDEsMjAxLDIwMSwyMDEsMTk2LDE5NiwxOTYsMTk2LDIwMCwyMDAsCisxMTAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisKKy8qIGJsb2NrIDEzICovCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMTk2LDIwMCwxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksIDIyLDE5OCwxOTksCisxOTksMTk5LDE5OSwxOTksMTk5LDIwMiwyMDIsMTk5LDE5OSwxOTgsMTk5LDE5OSwxOTksMTk5LDIwMCwyMDAsCisyMDEsMjAxLDIwMSwyMDEsMjAxLDIwMSwyMDEsMjAxLDIwMSwyMDEsMjAwLDIwMCwyMDAsMTk4LDE5OCwyMDAsCisKKy8qIGJsb2NrIDE0ICovCisyMDMsMjAzLDIwMywyMDMsMjAzLDIwMywyMDMsMjAzLDIwMywyMDMsMjAzLDIwMywyMDMsMjAzLDExNSwyMDQsCisyMDUsMjA2LDIwNSwyMDUsMjA1LDIwNSwyMDUsMjA1LDIwNSwyMDUsMjA1LDIwNSwyMDUsMjA1LDIwNSwyMDUsCisyMDUsMjA1LDIwNSwyMDUsMjA1LDIwNSwyMDUsMjA1LDIwNSwyMDUsMjA1LDIwNSwyMDUsMjA1LDIwNSwyMDUsCisyMDYsMjA2LDIwNiwyMDYsMjA2LDIwNiwyMDYsMjA2LDIwNiwyMDYsMjA2LDIwNiwyMDYsMjA2LDIwNiwyMDYsCisyMDYsMjA2LDIwNiwyMDYsMjA2LDIwNiwyMDYsMjA2LDIwNiwyMDYsMjA2LDExNSwxMTUsMjA1LDIwNSwyMDUsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisKKy8qIGJsb2NrIDE1ICovCisyMDcsMjA3LDIwNywyMDcsMjA3LDIwNywyMDcsMjA3LDIwNywyMDcsMjA3LDIwNywyMDcsMjA3LDIwNywyMDcsCisyMDcsMjA3LDIwNywyMDcsMjA3LDIwNywyMDcsMjA3LDIwNywyMDcsMjA3LDIwNywyMDcsMjA3LDIwNywyMDcsCisyMDcsMjA3LDIwNywyMDcsMjA3LDIwNywyMDgsMjA4LDIwOCwyMDgsMjA4LDIwOCwyMDgsMjA4LDIwOCwyMDgsCisyMDgsMjA3LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisyMDksMjA5LDIwOSwyMDksMjA5LDIwOSwyMDksMjA5LDIwOSwyMDksMjEwLDIxMCwyMTAsMjEwLDIxMCwyMTAsCisyMTAsMjEwLDIxMCwyMTAsMjEwLDIxMCwyMTAsMjEwLDIxMCwyMTAsMjEwLDIxMCwyMTAsMjEwLDIxMCwyMTAsCisyMTAsMjEwLDIxMCwyMTAsMjEwLDIxMCwyMTAsMjEwLDIxMCwyMTAsMjEwLDIxMSwyMTEsMjExLDIxMSwyMTEsCisyMTEsMjExLDIxMSwyMTEsMjEyLDIxMiwyMTMsMjE0LDIxNCwyMTQsMjEyLDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE2ICovCisyMTUsMjE1LDIxNSwyMTUsMjE1LDIxNSwyMTUsMjE1LDIxNSwyMTUsMjE1LDIxNSwyMTUsMjE1LDIxNSwyMTUsCisyMTUsMjE1LDIxNSwyMTUsMjE1LDIxNSwyMTYsMjE2LDIxNiwyMTYsMjE3LDIxNiwyMTYsMjE2LDIxNiwyMTYsCisyMTYsMjE2LDIxNiwyMTYsMjE3LDIxNiwyMTYsMjE2LDIxNywyMTYsMjE2LDIxNiwyMTYsMjE2LDExNSwxMTUsCisyMTgsMjE4LDIxOCwyMTgsMjE4LDIxOCwyMTgsMjE4LDIxOCwyMTgsMjE4LDIxOCwyMTgsMjE4LDIxOCwxMTUsCisyMTksMjE5LDIxOSwyMTksMjE5LDIxOSwyMTksMjE5LDIxOSwyMTksMjE5LDIxOSwyMTksMjE5LDIxOSwyMTksCisyMTksMjE5LDIxOSwyMTksMjE5LDIxOSwyMTksMjE5LDIxOSwyMjAsMjIwLDIyMCwxMTUsMTE1LDIyMSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE3ICovCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksCisxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksMTk5LDE5OSwxOTksCisKKy8qIGJsb2NrIDE4ICovCisyMjIsMjIyLDIyMiwyMjMsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsCisyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsCisyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsCisyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjIyLDIyMywyMjIsMjI0LDIyMywyMjMsCisyMjMsMjIyLDIyMiwyMjIsMjIyLDIyMiwyMjIsMjIyLDIyMiwyMjMsMjIzLDIyMywyMjMsMjIyLDIyMywyMjMsCisyMjQsMTEwLDExMCwyMjIsMjIyLDIyMiwyMjIsMjIyLDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsCisyMjQsMjI0LDIyMiwyMjIsICA0LCAgNCwyMjUsMjI1LDIyNSwyMjUsMjI1LDIyNSwyMjUsMjI1LDIyNSwyMjUsCisyMjYsMjI3LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsCisKKy8qIGJsb2NrIDE5ICovCisyMjgsMjI5LDIzMCwyMzAsMTE1LDIyOCwyMjgsMjI4LDIyOCwyMjgsMjI4LDIyOCwyMjgsMTE1LDExNSwyMjgsCisyMjgsMTE1LDExNSwyMjgsMjI4LDIyOCwyMjgsMjI4LDIyOCwyMjgsMjI4LDIyOCwyMjgsMjI4LDIyOCwyMjgsCisyMjgsMjI4LDIyOCwyMjgsMjI4LDIyOCwyMjgsMjI4LDIyOCwxMTUsMjI4LDIyOCwyMjgsMjI4LDIyOCwyMjgsCisyMjgsMTE1LDIyOCwxMTUsMTE1LDExNSwyMjgsMjI4LDIyOCwyMjgsMTE1LDExNSwyMjksMjI4LDIzMSwyMzAsCisyMzAsMjI5LDIyOSwyMjksMjI5LDExNSwxMTUsMjMwLDIzMCwxMTUsMTE1LDIzMCwyMzAsMjI5LDIyOCwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMjMxLDExNSwxMTUsMTE1LDExNSwyMjgsMjI4LDExNSwyMjgsCisyMjgsMjI4LDIyOSwyMjksMTE1LDExNSwyMzIsMjMyLDIzMiwyMzIsMjMyLDIzMiwyMzIsMjMyLDIzMiwyMzIsCisyMjgsMjI4LDIzMywyMzMsMjM0LDIzNCwyMzQsMjM0LDIzNCwyMzQsMjM1LDIzMywxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDIwICovCisxMTUsMjM2LDIzNiwyMzcsMTE1LDIzOCwyMzgsMjM4LDIzOCwyMzgsMjM4LDExNSwxMTUsMTE1LDExNSwyMzgsCisyMzgsMTE1LDExNSwyMzgsMjM4LDIzOCwyMzgsMjM4LDIzOCwyMzgsMjM4LDIzOCwyMzgsMjM4LDIzOCwyMzgsCisyMzgsMjM4LDIzOCwyMzgsMjM4LDIzOCwyMzgsMjM4LDIzOCwxMTUsMjM4LDIzOCwyMzgsMjM4LDIzOCwyMzgsCisyMzgsMTE1LDIzOCwyMzgsMTE1LDIzOCwyMzgsMTE1LDIzOCwyMzgsMTE1LDExNSwyMzYsMTE1LDIzNywyMzcsCisyMzcsMjM2LDIzNiwxMTUsMTE1LDExNSwxMTUsMjM2LDIzNiwxMTUsMTE1LDIzNiwyMzYsMjM2LDExNSwxMTUsCisxMTUsMjM2LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwyMzgsMjM4LDIzOCwyMzgsMTE1LDIzOCwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwyMzksMjM5LDIzOSwyMzksMjM5LDIzOSwyMzksMjM5LDIzOSwyMzksCisyMzYsMjM2LDIzOCwyMzgsMjM4LDIzNiwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDIxICovCisxMTUsMjQwLDI0MCwyNDEsMTE1LDI0MiwyNDIsMjQyLDI0MiwyNDIsMjQyLDI0MiwyNDIsMjQyLDExNSwyNDIsCisyNDIsMjQyLDExNSwyNDIsMjQyLDI0MiwyNDIsMjQyLDI0MiwyNDIsMjQyLDI0MiwyNDIsMjQyLDI0MiwyNDIsCisyNDIsMjQyLDI0MiwyNDIsMjQyLDI0MiwyNDIsMjQyLDI0MiwxMTUsMjQyLDI0MiwyNDIsMjQyLDI0MiwyNDIsCisyNDIsMTE1LDI0MiwyNDIsMTE1LDI0MiwyNDIsMjQyLDI0MiwyNDIsMTE1LDExNSwyNDAsMjQyLDI0MSwyNDEsCisyNDEsMjQwLDI0MCwyNDAsMjQwLDI0MCwxMTUsMjQwLDI0MCwyNDEsMTE1LDI0MSwyNDEsMjQwLDExNSwxMTUsCisyNDIsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisyNDIsMjQyLDI0MCwyNDAsMTE1LDExNSwyNDMsMjQzLDI0MywyNDMsMjQzLDI0MywyNDMsMjQzLDI0MywyNDMsCisyNDQsMjQ1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwyNDIsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDIyICovCisxMTUsMjQ2LDI0NywyNDcsMTE1LDI0OCwyNDgsMjQ4LDI0OCwyNDgsMjQ4LDI0OCwyNDgsMTE1LDExNSwyNDgsCisyNDgsMTE1LDExNSwyNDgsMjQ4LDI0OCwyNDgsMjQ4LDI0OCwyNDgsMjQ4LDI0OCwyNDgsMjQ4LDI0OCwyNDgsCisyNDgsMjQ4LDI0OCwyNDgsMjQ4LDI0OCwyNDgsMjQ4LDI0OCwxMTUsMjQ4LDI0OCwyNDgsMjQ4LDI0OCwyNDgsCisyNDgsMTE1LDI0OCwyNDgsMTE1LDI0OCwyNDgsMjQ4LDI0OCwyNDgsMTE1LDExNSwyNDYsMjQ4LDI0OSwyNDYsCisyNDcsMjQ2LDI0NiwyNDYsMjQ2LDExNSwxMTUsMjQ3LDI0NywxMTUsMTE1LDI0NywyNDcsMjQ2LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwyNDYsMjQ5LDExNSwxMTUsMTE1LDExNSwyNDgsMjQ4LDExNSwyNDgsCisyNDgsMjQ4LDI0NiwyNDYsMTE1LDExNSwyNTAsMjUwLDI1MCwyNTAsMjUwLDI1MCwyNTAsMjUwLDI1MCwyNTAsCisyNTEsMjQ4LDI1MiwyNTIsMjUyLDI1MiwyNTIsMjUyLDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDIzICovCisxMTUsMTE1LDI1MywyNTQsMTE1LDI1NCwyNTQsMjU0LDI1NCwyNTQsMjU0LDExNSwxMTUsMTE1LDI1NCwyNTQsCisyNTQsMTE1LDI1NCwyNTQsMjU0LDI1NCwxMTUsMTE1LDExNSwyNTQsMjU0LDExNSwyNTQsMTE1LDI1NCwyNTQsCisxMTUsMTE1LDExNSwyNTQsMjU0LDExNSwxMTUsMTE1LDI1NCwyNTQsMjU0LDExNSwxMTUsMTE1LDI1NCwyNTQsCisyNTQsMjU0LDI1NCwyNTQsMjU0LDI1NCwyNTQsMjU0LDI1NCwyNTQsMTE1LDExNSwxMTUsMTE1LDI1NSwyNTYsCisyNTMsMjU2LDI1NiwxMTUsMTE1LDExNSwyNTYsMjU2LDI1NiwxMTUsMjU2LDI1NiwyNTYsMjUzLDExNSwxMTUsCisyNTQsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMjU1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwyNTcsMjU3LDI1NywyNTcsMjU3LDI1NywyNTcsMjU3LDI1NywyNTcsCisyNTgsMjU4LDI1OCwyNTksMjU5LDI1OSwyNTksMjU5LDI1OSwyNjAsMjU5LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDI0ICovCisyNjEsMjYyLDI2MiwyNjIsMTE1LDI2MywyNjMsMjYzLDI2MywyNjMsMjYzLDI2MywyNjMsMTE1LDI2MywyNjMsCisyNjMsMTE1LDI2MywyNjMsMjYzLDI2MywyNjMsMjYzLDI2MywyNjMsMjYzLDI2MywyNjMsMjYzLDI2MywyNjMsCisyNjMsMjYzLDI2MywyNjMsMjYzLDI2MywyNjMsMjYzLDI2MywxMTUsMjYzLDI2MywyNjMsMjYzLDI2MywyNjMsCisyNjMsMjYzLDI2MywyNjMsMjYzLDI2MywyNjMsMjYzLDI2MywyNjMsMTE1LDExNSwxMTUsMjYzLDI2MSwyNjEsCisyNjEsMjYyLDI2MiwyNjIsMjYyLDExNSwyNjEsMjYxLDI2MSwxMTUsMjYxLDI2MSwyNjEsMjYxLDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDI2MSwyNjEsMTE1LDI2MywyNjMsMjYzLDExNSwxMTUsMTE1LDExNSwxMTUsCisyNjMsMjYzLDI2MSwyNjEsMTE1LDExNSwyNjQsMjY0LDI2NCwyNjQsMjY0LDI2NCwyNjQsMjY0LDI2NCwyNjQsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDI2NSwyNjUsMjY1LDI2NSwyNjUsMjY1LDI2NSwyNjYsCisKKy8qIGJsb2NrIDI1ICovCisxMTUsMjY3LDI2OCwyNjgsMTE1LDI2OSwyNjksMjY5LDI2OSwyNjksMjY5LDI2OSwyNjksMTE1LDI2OSwyNjksCisyNjksMTE1LDI2OSwyNjksMjY5LDI2OSwyNjksMjY5LDI2OSwyNjksMjY5LDI2OSwyNjksMjY5LDI2OSwyNjksCisyNjksMjY5LDI2OSwyNjksMjY5LDI2OSwyNjksMjY5LDI2OSwxMTUsMjY5LDI2OSwyNjksMjY5LDI2OSwyNjksCisyNjksMjY5LDI2OSwyNjksMTE1LDI2OSwyNjksMjY5LDI2OSwyNjksMTE1LDExNSwyNjcsMjY5LDI2OCwyNjcsCisyNjgsMjY4LDI3MCwyNjgsMjY4LDExNSwyNjcsMjY4LDI2OCwxMTUsMjY4LDI2OCwyNjcsMjY3LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDI3MCwyNzAsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDI2OSwxMTUsCisyNjksMjY5LDI2NywyNjcsMTE1LDExNSwyNzEsMjcxLDI3MSwyNzEsMjcxLDI3MSwyNzEsMjcxLDI3MSwyNzEsCisxMTUsMjY5LDI2OSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDI2ICovCisxMTUsMjcyLDI3MywyNzMsMTE1LDI3NCwyNzQsMjc0LDI3NCwyNzQsMjc0LDI3NCwyNzQsMTE1LDI3NCwyNzQsCisyNzQsMTE1LDI3NCwyNzQsMjc0LDI3NCwyNzQsMjc0LDI3NCwyNzQsMjc0LDI3NCwyNzQsMjc0LDI3NCwyNzQsCisyNzQsMjc0LDI3NCwyNzQsMjc0LDI3NCwyNzQsMjc0LDI3NCwyNzQsMjc0LDI3NCwyNzQsMjc0LDI3NCwyNzQsCisyNzQsMjc0LDI3NCwyNzQsMjc0LDI3NCwyNzQsMjc0LDI3NCwyNzQsMjc0LDExNSwxMTUsMjc0LDI3NSwyNzMsCisyNzMsMjcyLDI3MiwyNzIsMjcyLDExNSwyNzMsMjczLDI3MywxMTUsMjczLDI3MywyNzMsMjcyLDI3NCwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMjc1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwyNzQsCisyNzQsMjc0LDI3MiwyNzIsMTE1LDExNSwyNzYsMjc2LDI3NiwyNzYsMjc2LDI3NiwyNzYsMjc2LDI3NiwyNzYsCisyNzcsMjc3LDI3NywyNzcsMjc3LDI3NywxMTUsMTE1LDExNSwyNzgsMjc0LDI3NCwyNzQsMjc0LDI3NCwyNzQsCisKKy8qIGJsb2NrIDI3ICovCisxMTUsMTE1LDI3OSwyNzksMTE1LDI4MCwyODAsMjgwLDI4MCwyODAsMjgwLDI4MCwyODAsMjgwLDI4MCwyODAsCisyODAsMjgwLDI4MCwyODAsMjgwLDI4MCwyODAsMTE1LDExNSwxMTUsMjgwLDI4MCwyODAsMjgwLDI4MCwyODAsCisyODAsMjgwLDI4MCwyODAsMjgwLDI4MCwyODAsMjgwLDI4MCwyODAsMjgwLDI4MCwyODAsMjgwLDI4MCwyODAsCisyODAsMjgwLDExNSwyODAsMjgwLDI4MCwyODAsMjgwLDI4MCwyODAsMjgwLDI4MCwxMTUsMjgwLDExNSwxMTUsCisyODAsMjgwLDI4MCwyODAsMjgwLDI4MCwyODAsMTE1LDExNSwxMTUsMjgxLDExNSwxMTUsMTE1LDExNSwyODIsCisyNzksMjc5LDI4MSwyODEsMjgxLDExNSwyODEsMTE1LDI3OSwyNzksMjc5LDI3OSwyNzksMjc5LDI3OSwyODIsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwyODMsMjgzLDI4MywyODMsMjgzLDI4MywyODMsMjgzLDI4MywyODMsCisxMTUsMTE1LDI3OSwyNzksMjg0LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDI4ICovCisxMTUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsCisyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsCisyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODUsCisyODUsMjg2LDI4NSwyODcsMjg2LDI4NiwyODYsMjg2LDI4NiwyODYsMjg2LDExNSwxMTUsMTE1LDExNSwgIDUsCisyODUsMjg1LDI4NSwyODUsMjg1LDI4NSwyODgsMjg2LDI4NiwyODYsMjg2LDI4NiwyODYsMjg2LDI4NiwyODksCisyOTAsMjkwLDI5MCwyOTAsMjkwLDI5MCwyOTAsMjkwLDI5MCwyOTAsMjg5LDI4OSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDI5ICovCisxMTUsMjkxLDI5MSwxMTUsMjkxLDExNSwxMTUsMjkxLDI5MSwxMTUsMjkxLDExNSwxMTUsMjkxLDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMjkxLDI5MSwyOTEsMjkxLDExNSwyOTEsMjkxLDI5MSwyOTEsMjkxLDI5MSwyOTEsCisxMTUsMjkxLDI5MSwyOTEsMTE1LDI5MSwxMTUsMjkxLDExNSwxMTUsMjkxLDI5MSwxMTUsMjkxLDI5MSwyOTEsCisyOTEsMjkyLDI5MSwyOTMsMjkyLDI5MiwyOTIsMjkyLDI5MiwyOTIsMTE1LDI5MiwyOTIsMjkxLDExNSwxMTUsCisyOTEsMjkxLDI5MSwyOTEsMjkxLDExNSwyOTQsMTE1LDI5MiwyOTIsMjkyLDI5MiwyOTIsMjkyLDExNSwxMTUsCisyOTUsMjk1LDI5NSwyOTUsMjk1LDI5NSwyOTUsMjk1LDI5NSwyOTUsMTE1LDExNSwyOTEsMjkxLDI5MSwyOTEsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDMwICovCisyOTYsMjk3LDI5NywyOTcsMjk4LDI5OCwyOTgsMjk4LDI5OCwyOTgsMjk4LDI5OCwyOTgsMjk4LDI5OCwyOTgsCisyOTgsMjk4LDI5OCwyOTcsMjk4LDI5NywyOTcsMjk3LDI5OSwyOTksMjk3LDI5NywyOTcsMjk3LDI5NywyOTcsCiszMDAsMzAwLDMwMCwzMDAsMzAwLDMwMCwzMDAsMzAwLDMwMCwzMDAsMzAxLDMwMSwzMDEsMzAxLDMwMSwzMDEsCiszMDEsMzAxLDMwMSwzMDEsMjk3LDI5OSwyOTcsMjk5LDI5NywyOTksMzAyLDMwMywzMDIsMzAzLDMwNCwzMDQsCisyOTYsMjk2LDI5NiwyOTYsMjk2LDI5NiwyOTYsMjk2LDExNSwyOTYsMjk2LDI5NiwyOTYsMjk2LDI5NiwyOTYsCisyOTYsMjk2LDI5NiwyOTYsMjk2LDI5NiwyOTYsMjk2LDI5NiwyOTYsMjk2LDI5NiwyOTYsMjk2LDI5NiwyOTYsCisyOTYsMjk2LDI5NiwyOTYsMjk2LDI5NiwyOTYsMjk2LDI5NiwyOTYsMjk2LDI5NiwyOTYsMTE1LDExNSwxMTUsCisxMTUsMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwzMDQsCisKKy8qIGJsb2NrIDMxICovCisyOTksMjk5LDI5OSwyOTksMjk5LDI5OCwyOTksMjk5LDI5NiwyOTYsMjk2LDI5NiwyOTYsMjk5LDI5OSwyOTksCisyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksMjk5LDExNSwyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksCisyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksCisyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksMjk5LDI5OSwyOTksMTE1LDI5NywyOTcsCisyOTcsMjk3LDI5NywyOTcsMjk3LDI5NywyOTksMjk3LDI5NywyOTcsMjk3LDI5NywyOTcsMTE1LDI5NywyOTcsCisyOTgsMjk4LDI5OCwyOTgsMjk4LCAxOSwgMTksIDE5LCAxOSwyOTgsMjk4LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDMyICovCiszMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsCiszMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsCiszMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNiwzMDYsMzA3LDMwNywzMDcsCiszMDcsMzA4LDMwNywzMDcsMzA3LDMwNywzMDcsMzA3LDMwNiwzMDcsMzA3LDMwOCwzMDgsMzA3LDMwNywzMDUsCiszMDksMzA5LDMwOSwzMDksMzA5LDMwOSwzMDksMzA5LDMwOSwzMDksMzEwLDMxMCwzMTAsMzEwLDMxMCwzMTAsCiszMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDgsMzA4LDMwNywzMDcsMzA1LDMwNSwzMDUsMzA1LDMwNywzMDcsCiszMDcsMzA1LDMwNiwzMDYsMzA2LDMwNSwzMDUsMzA2LDMwNiwzMDYsMzA2LDMwNiwzMDYsMzA2LDMwNSwzMDUsCiszMDUsMzA3LDMwNywzMDcsMzA3LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsCisKKy8qIGJsb2NrIDMzICovCiszMDUsMzA1LDMwNywzMDYsMzA4LDMwNywzMDcsMzA2LDMwNiwzMDYsMzA2LDMwNiwzMDYsMzA3LDMwNSwzMDYsCiszMDksMzA5LDMwOSwzMDksMzA5LDMwOSwzMDksMzA5LDMwOSwzMDksMzA2LDMwNiwzMDYsMzA3LDMxMSwzMTEsCiszMTIsMzEyLDMxMiwzMTIsMzEyLDMxMiwzMTIsMzEyLDMxMiwzMTIsMzEyLDMxMiwzMTIsMzEyLDMxMiwzMTIsCiszMTIsMzEyLDMxMiwzMTIsMzEyLDMxMiwzMTIsMzEyLDMxMiwzMTIsMzEyLDMxMiwzMTIsMzEyLDMxMiwzMTIsCiszMTIsMzEyLDMxMiwzMTIsMzEyLDMxMiwxMTUsMzEyLDExNSwxMTUsMTE1LDExNSwxMTUsMzEyLDExNSwxMTUsCiszMTMsMzEzLDMxMywzMTMsMzEzLDMxMywzMTMsMzEzLDMxMywzMTMsMzEzLDMxMywzMTMsMzEzLDMxMywzMTMsCiszMTMsMzEzLDMxMywzMTMsMzEzLDMxMywzMTMsMzEzLDMxMywzMTMsMzEzLDMxMywzMTMsMzEzLDMxMywzMTMsCiszMTMsMzEzLDMxMywzMTMsMzEzLDMxMywzMTMsMzEzLDMxMywzMTMsMzEzLCAgNCwzMTQsMzEzLDMxMywzMTMsCisKKy8qIGJsb2NrIDM0ICovCiszMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsCiszMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsCiszMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsCiszMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsCiszMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsCiszMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsCiszMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsCiszMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsCisKKy8qIGJsb2NrIDM1ICovCiszMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsCiszMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsCiszMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsCiszMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsCiszMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsCiszMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsCiszMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsCiszMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsCisKKy8qIGJsb2NrIDM2ICovCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwxMTUsMzE4LDMxOCwzMTgsMzE4LDExNSwxMTUsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMTE1LDMxOCwxMTUsMzE4LDMxOCwzMTgsMzE4LDExNSwxMTUsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCisKKy8qIGJsb2NrIDM3ICovCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwxMTUsMzE4LDMxOCwzMTgsMzE4LDExNSwxMTUsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMTE1LDMxOCwzMTgsMzE4LDMxOCwxMTUsMTE1LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwxMTUsCiszMTgsMTE1LDMxOCwzMTgsMzE4LDMxOCwxMTUsMTE1LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMTE1LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCisKKy8qIGJsb2NrIDM4ICovCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMTE1LDMxOCwzMTgsMzE4LDMxOCwxMTUsMTE1LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDExNSwxMTUsMzE5LDMxOSwzMTksCiszMjAsMzIwLDMyMCwzMjAsMzIwLDMyMCwzMjAsMzIwLDMyMCwzMjEsMzIxLDMyMSwzMjEsMzIxLDMyMSwzMjEsCiszMjEsMzIxLDMyMSwzMjEsMzIxLDMyMSwzMjEsMzIxLDMyMSwzMjEsMzIxLDMyMSwzMjEsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDM5ICovCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMjIsMzIyLDMyMiwzMjIsMzIyLDMyMiwzMjIsMzIyLDMyMiwzMjIsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCiszMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsCiszMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsCiszMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsCiszMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsCiszMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsMzIzLDMyMywzMjMsCiszMjQsMzI0LDMyNCwzMjQsMzI0LDMyNCwxMTUsMTE1LDMyNSwzMjUsMzI1LDMyNSwzMjUsMzI1LDExNSwxMTUsCisKKy8qIGJsb2NrIDQwICovCiszMjYsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCisKKy8qIGJsb2NrIDQxICovCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCisKKy8qIGJsb2NrIDQyICovCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI4LDMyOCwzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCisKKy8qIGJsb2NrIDQzICovCiszMjksMzMwLDMzMCwzMzAsMzMwLDMzMCwzMzAsMzMwLDMzMCwzMzAsMzMwLDMzMCwzMzAsMzMwLDMzMCwzMzAsCiszMzAsMzMwLDMzMCwzMzAsMzMwLDMzMCwzMzAsMzMwLDMzMCwzMzAsMzMwLDMzMSwzMzIsMTE1LDExNSwxMTUsCiszMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsCiszMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsCiszMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsCiszMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsCiszMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLCAgNCwgIDQsICA0LDMzNCwzMzQsCiszMzQsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDQ0ICovCiszMzUsMzM1LDMzNSwzMzUsMzM1LDMzNSwzMzUsMzM1LDMzNSwzMzUsMzM1LDMzNSwzMzUsMTE1LDMzNSwzMzUsCiszMzUsMzM1LDMzNiwzMzYsMzM2LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCiszMzcsMzM3LDMzNywzMzcsMzM3LDMzNywzMzcsMzM3LDMzNywzMzcsMzM3LDMzNywzMzcsMzM3LDMzNywzMzcsCiszMzcsMzM3LDMzOCwzMzgsMzM4LCAgNCwgIDQsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCiszMzksMzM5LDMzOSwzMzksMzM5LDMzOSwzMzksMzM5LDMzOSwzMzksMzM5LDMzOSwzMzksMzM5LDMzOSwzMzksCiszMzksMzM5LDM0MCwzNDAsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCiszNDEsMzQxLDM0MSwzNDEsMzQxLDM0MSwzNDEsMzQxLDM0MSwzNDEsMzQxLDM0MSwzNDEsMTE1LDM0MSwzNDEsCiszNDEsMTE1LDM0MiwzNDIsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDQ1ICovCiszNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsCiszNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsCiszNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsMzQzLDM0MywzNDMsCiszNDMsMzQzLDM0MywzNDMsMzQ0LDM0NCwzNDUsMzQ0LDM0NCwzNDQsMzQ0LDM0NCwzNDQsMzQ0LDM0NSwzNDUsCiszNDUsMzQ1LDM0NSwzNDUsMzQ1LDM0NSwzNDQsMzQ1LDM0NSwzNDQsMzQ0LDM0NCwzNDQsMzQ0LDM0NCwzNDQsCiszNDQsMzQ0LDM0NCwzNDQsMzQ2LDM0NiwzNDYsMzQ3LDM0NiwzNDYsMzQ2LDM0OCwzNDMsMzQ0LDExNSwxMTUsCiszNDksMzQ5LDM0OSwzNDksMzQ5LDM0OSwzNDksMzQ5LDM0OSwzNDksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCiszNTAsMzUwLDM1MCwzNTAsMzUwLDM1MCwzNTAsMzUwLDM1MCwzNTAsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDQ2ICovCiszNTEsMzUxLCAgNCwgIDQsMzUxLCAgNCwzNTIsMzUxLDM1MSwzNTEsMzUxLDM1MywzNTMsMzUzLDM1NCwxMTUsCiszNTUsMzU1LDM1NSwzNTUsMzU1LDM1NSwzNTUsMzU1LDM1NSwzNTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCiszNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsCiszNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsCiszNTYsMzU2LDM1NiwzNTcsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsCiszNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsCiszNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsCiszNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDQ3ICovCiszNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsCiszNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsCiszNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTYsMzU2LDM1NiwzNTMsMzU2LDExNSwxMTUsMTE1LDExNSwxMTUsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsMzI3LDMyNywzMjcsCiszMjcsMzI3LDMyNywzMjcsMzI3LDMyNywxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDQ4ICovCiszNTgsMzU4LDM1OCwzNTgsMzU4LDM1OCwzNTgsMzU4LDM1OCwzNTgsMzU4LDM1OCwzNTgsMzU4LDM1OCwzNTgsCiszNTgsMzU4LDM1OCwzNTgsMzU4LDM1OCwzNTgsMzU4LDM1OCwzNTgsMzU4LDM1OCwzNTgsMzU4LDM1OCwxMTUsCiszNTksMzU5LDM1OSwzNjAsMzYwLDM2MCwzNjAsMzU5LDM1OSwzNjAsMzYwLDM2MCwxMTUsMTE1LDExNSwxMTUsCiszNjAsMzYwLDM1OSwzNjAsMzYwLDM2MCwzNjAsMzYwLDM2MCwzNTksMzU5LDM1OSwxMTUsMTE1LDExNSwxMTUsCiszNjEsMTE1LDExNSwxMTUsMzYyLDM2MiwzNjMsMzYzLDM2MywzNjMsMzYzLDM2MywzNjMsMzYzLDM2MywzNjMsCiszNjQsMzY0LDM2NCwzNjQsMzY0LDM2NCwzNjQsMzY0LDM2NCwzNjQsMzY0LDM2NCwzNjQsMzY0LDM2NCwzNjQsCiszNjQsMzY0LDM2NCwzNjQsMzY0LDM2NCwzNjQsMzY0LDM2NCwzNjQsMzY0LDM2NCwzNjQsMzY0LDExNSwxMTUsCiszNjQsMzY0LDM2NCwzNjQsMzY0LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDQ5ICovCiszNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsCiszNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsCiszNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwxMTUsMTE1LDExNSwxMTUsCiszNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsCiszNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMzY1LDM2NSwzNjUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCiszNjYsMzY2LDM2NiwzNjYsMzY2LDM2NiwzNjYsMzY2LDM2NiwzNjYsMzY3LDExNSwxMTUsMTE1LDM2OCwzNjgsCiszNjksMzY5LDM2OSwzNjksMzY5LDM2OSwzNjksMzY5LDM2OSwzNjksMzY5LDM2OSwzNjksMzY5LDM2OSwzNjksCiszNjksMzY5LDM2OSwzNjksMzY5LDM2OSwzNjksMzY5LDM2OSwzNjksMzY5LDM2OSwzNjksMzY5LDM2OSwzNjksCisKKy8qIGJsb2NrIDUwICovCiszNzAsMzcwLDM3MCwzNzAsMzcwLDM3MCwzNzAsMzcwLDM3MCwzNzAsMzcwLDM3MCwzNzAsMzcwLDM3MCwzNzAsCiszNzAsMzcwLDM3MCwzNzAsMzcwLDM3MCwzNzAsMzcxLDM3MSwzNzIsMzcyLDM3MSwxMTUsMTE1LDM3MywzNzMsCiszNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsCiszNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsCiszNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsMzc0LDM3NCwzNzQsCiszNzQsMzc0LDM3NCwzNzQsMzc0LDM3NSwzNzYsMzc1LDM3NiwzNzYsMzc2LDM3NiwzNzYsMzc2LDM3NiwxMTUsCiszNzYsMzc3LDM3NiwzNzcsMzc3LDM3NiwzNzYsMzc2LDM3NiwzNzYsMzc2LDM3NiwzNzYsMzc1LDM3NSwzNzUsCiszNzUsMzc1LDM3NSwzNzYsMzc2LDM3NiwzNzYsMzc2LDM3NiwzNzYsMzc2LDM3NiwzNzYsMTE1LDExNSwzNzYsCisKKy8qIGJsb2NrIDUxICovCiszNzgsMzc4LDM3OCwzNzgsMzc4LDM3OCwzNzgsMzc4LDM3OCwzNzgsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCiszNzgsMzc4LDM3OCwzNzgsMzc4LDM3OCwzNzgsMzc4LDM3OCwzNzgsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCiszNzksMzc5LDM3OSwzNzksMzc5LDM3OSwzNzksMzgwLDM3OSwzNzksMzc5LDM3OSwzNzksMzc5LDExNSwxMTUsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDM4MSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDUyICovCiszODIsMzgyLDM4MiwzODIsMzgzLDM4NCwzODQsMzg0LDM4NCwzODQsMzg0LDM4NCwzODQsMzg0LDM4NCwzODQsCiszODQsMzg0LDM4NCwzODQsMzg0LDM4NCwzODQsMzg0LDM4NCwzODQsMzg0LDM4NCwzODQsMzg0LDM4NCwzODQsCiszODQsMzg0LDM4NCwzODQsMzg0LDM4NCwzODQsMzg0LDM4NCwzODQsMzg0LDM4NCwzODQsMzg0LDM4NCwzODQsCiszODQsMzg0LDM4NCwzODQsMzgyLDM4MywzODIsMzgyLDM4MiwzODIsMzgyLDM4MywzODIsMzgzLDM4MywzODMsCiszODMsMzgzLDM4MiwzODMsMzgzLDM4NCwzODQsMzg0LDM4NCwzODQsMzg0LDM4NCwxMTUsMTE1LDExNSwxMTUsCiszODUsMzg1LDM4NSwzODUsMzg1LDM4NSwzODUsMzg1LDM4NSwzODUsMzg2LDM4NiwzODYsMzg2LDM4NiwzODYsCiszODYsMzg3LDM4NywzODcsMzg3LDM4NywzODcsMzg3LDM4NywzODcsMzg3LDM4MiwzODIsMzgyLDM4MiwzODIsCiszODIsMzgyLDM4MiwzODIsMzg3LDM4NywzODcsMzg3LDM4NywzODcsMzg3LDM4NywzODcsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDUzICovCiszODgsMzg4LDM4OSwzOTAsMzkwLDM5MCwzOTAsMzkwLDM5MCwzOTAsMzkwLDM5MCwzOTAsMzkwLDM5MCwzOTAsCiszOTAsMzkwLDM5MCwzOTAsMzkwLDM5MCwzOTAsMzkwLDM5MCwzOTAsMzkwLDM5MCwzOTAsMzkwLDM5MCwzOTAsCiszOTAsMzg5LDM4OCwzODgsMzg4LDM4OCwzODksMzg5LDM4OCwzODgsMzg5LDM4OCwzODgsMzg4LDM5MCwzOTAsCiszOTEsMzkxLDM5MSwzOTEsMzkxLDM5MSwzOTEsMzkxLDM5MSwzOTEsMzkwLDM5MCwzOTAsMzkwLDM5MCwzOTAsCiszOTIsMzkyLDM5MiwzOTIsMzkyLDM5MiwzOTIsMzkyLDM5MiwzOTIsMzkyLDM5MiwzOTIsMzkyLDM5MiwzOTIsCiszOTIsMzkyLDM5MiwzOTIsMzkyLDM5MiwzOTIsMzkyLDM5MiwzOTIsMzkyLDM5MiwzOTIsMzkyLDM5MiwzOTIsCiszOTIsMzkyLDM5MiwzOTIsMzkyLDM5MiwzOTMsMzk0LDM5MywzOTMsMzk0LDM5NCwzOTQsMzkzLDM5NCwzOTMsCiszOTMsMzkzLDM5NCwzOTQsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwzOTUsMzk1LDM5NSwzOTUsCisKKy8qIGJsb2NrIDU0ICovCiszOTYsMzk2LDM5NiwzOTYsMzk2LDM5NiwzOTYsMzk2LDM5NiwzOTYsMzk2LDM5NiwzOTYsMzk2LDM5NiwzOTYsCiszOTYsMzk2LDM5NiwzOTYsMzk2LDM5NiwzOTYsMzk2LDM5NiwzOTYsMzk2LDM5NiwzOTYsMzk2LDM5NiwzOTYsCiszOTYsMzk2LDM5NiwzOTYsMzk3LDM5NywzOTcsMzk3LDM5NywzOTcsMzk3LDM5NywzOTgsMzk4LDM5OCwzOTgsCiszOTgsMzk4LDM5OCwzOTgsMzk3LDM5NywzOTgsMzk4LDExNSwxMTUsMTE1LDM5OSwzOTksMzk5LDM5OSwzOTksCis0MDAsNDAwLDQwMCw0MDAsNDAwLDQwMCw0MDAsNDAwLDQwMCw0MDAsMTE1LDExNSwxMTUsMzk2LDM5NiwzOTYsCis0MDEsNDAxLDQwMSw0MDEsNDAxLDQwMSw0MDEsNDAxLDQwMSw0MDEsNDAyLDQwMiw0MDIsNDAyLDQwMiw0MDIsCis0MDIsNDAyLDQwMiw0MDIsNDAyLDQwMiw0MDIsNDAyLDQwMiw0MDIsNDAyLDQwMiw0MDIsNDAyLDQwMiw0MDIsCis0MDIsNDAyLDQwMiw0MDIsNDAyLDQwMiw0MDIsNDAyLDQwMyw0MDMsNDAzLDQwMyw0MDMsNDAzLDQwNCw0MDQsCisKKy8qIGJsb2NrIDU1ICovCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCis0MDUsNDA1LDQwNSw0MDUsNDA1LDQwNSw0MDUsNDA1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTAsMTEwLDExMCwgIDQsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsNDA2LDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCw0MDcsNDA3LDQwNyw0MDcsMTEwLDQwNyw0MDcsCis0MDcsNDA3LDQwNiw0MDYsMTEwLDQwNyw0MDcsMTE1LDExMCwxMTAsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDU2ICovCisgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsCisgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsCisgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywxMjMsMTIzLDEyMywxMjMsMTIzLDQwOCwxMDcsMTA3LDEwNywxMDcsCisxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsCisxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsCisxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTE2LDExNiwxMTYsCisxMTYsMTE2LDEwNywxMDcsMTA3LDEwNywxMTYsMTE2LDExNiwxMTYsMTE2LCAzMywgMzMsIDMzLCAzMywgMzMsCisgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLDQwOSw0MTAsIDMzLCAzMywgMzMsNDExLCAzMywgMzMsCisKKy8qIGJsb2NrIDU3ICovCisgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsCisgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLDEwNywxMDcsMTA3LDEwNywxMDcsCisxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsCisxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMTYsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTAsMTEwLDExMCwxMTAsCisKKy8qIGJsb2NrIDU4ICovCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCis0MTIsNDEzLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisKKy8qIGJsb2NrIDU5ICovCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzMsIDMzLCAzMywgMzMsIDMzLDQxNCwgMzMsIDMzLDQxNSwgMzMsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisKKy8qIGJsb2NrIDYwICovCis0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNyw0MTcsNDE3LDQxNyw0MTcsNDE3LDQxNyw0MTcsCis0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNiwxMTUsMTE1LDQxNyw0MTcsNDE3LDQxNyw0MTcsNDE3LDExNSwxMTUsCis0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNyw0MTcsNDE3LDQxNyw0MTcsNDE3LDQxNyw0MTcsCis0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNyw0MTcsNDE3LDQxNyw0MTcsNDE3LDQxNyw0MTcsCis0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNiwxMTUsMTE1LDQxNyw0MTcsNDE3LDQxNyw0MTcsNDE3LDExNSwxMTUsCisxMjMsNDE2LDEyMyw0MTYsMTIzLDQxNiwxMjMsNDE2LDExNSw0MTcsMTE1LDQxNywxMTUsNDE3LDExNSw0MTcsCis0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNyw0MTcsNDE3LDQxNyw0MTcsNDE3LDQxNyw0MTcsCis0MTgsNDE4LDQxOSw0MTksNDE5LDQxOSw0MjAsNDIwLDQyMSw0MjEsNDIyLDQyMiw0MjMsNDIzLDExNSwxMTUsCisKKy8qIGJsb2NrIDYxICovCis0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNiw0MTYsNDE2LDQyNCw0MjQsNDI0LDQyNCw0MjQsNDI0LDQyNCw0MjQsCis0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNiw0MTYsNDE2LDQyNCw0MjQsNDI0LDQyNCw0MjQsNDI0LDQyNCw0MjQsCis0MTYsNDE2LDQxNiw0MTYsNDE2LDQxNiw0MTYsNDE2LDQyNCw0MjQsNDI0LDQyNCw0MjQsNDI0LDQyNCw0MjQsCis0MTYsNDE2LDEyMyw0MjUsMTIzLDExNSwxMjMsMTIzLDQxNyw0MTcsNDI2LDQyNiw0MjcsMTE0LDQyOCwxMTQsCisxMTQsMTE0LDEyMyw0MjUsMTIzLDExNSwxMjMsMTIzLDQyOSw0MjksNDI5LDQyOSw0MjcsMTE0LDExNCwxMTQsCis0MTYsNDE2LDEyMywxMjMsMTE1LDExNSwxMjMsMTIzLDQxNyw0MTcsNDMwLDQzMCwxMTUsMTE0LDExNCwxMTQsCis0MTYsNDE2LDEyMywxMjMsMTIzLDE2NCwxMjMsMTIzLDQxNyw0MTcsNDMxLDQzMSwxNjksMTE0LDExNCwxMTQsCisxMTUsMTE1LDEyMyw0MjUsMTIzLDExNSwxMjMsMTIzLDQzMiw0MzIsNDMzLDQzMyw0MjcsMTE0LDExNCwxMTUsCisKKy8qIGJsb2NrIDYyICovCisgIDMsICAzLCAgMywgIDMsICAzLCAgMywgIDMsICAzLCAgMywgIDMsICAzLCAyMiw0MzQsNDM0LCAyMiwgMjIsCisgIDksICA5LCAgOSwgIDksICA5LCAgOSwgIDQsICA0LCAyMSwgMjUsICA2LCAyMSwgMjEsIDI1LCAgNiwgMjEsCisgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgIDQsICA0LDQzNSw0MzYsIDIyLCAyMiwgMjIsIDIyLCAyMiwgIDMsCisgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgMjEsIDI1LCAgNCwgIDQsICA0LCAgNCwgMTUsCisgMTUsICA0LCAgNCwgIDQsICA4LCAgNiwgIDcsICA0LCAgNCwgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgIDQsCisgIDQsICA0LCAgOCwgIDQsIDE1LCAgNCwgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgIDMsCisgMjIsIDIyLCAyMiwgMjIsIDIyLDQzNywgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsCisgMjMsMTA3LDExNSwxMTUsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsICA4LCAgOCwgIDgsICA2LCAgNywxMDcsCisKKy8qIGJsb2NrIDYzICovCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsICA4LCAgOCwgIDgsICA2LCAgNywxMTUsCisxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTA3LDEwNywxMDcsMTE1LDExNSwxMTUsCisgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsCisgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwgIDUsICA1LCAgNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMzgxLDM4MSwzODEsCiszODEsMTEwLDM4MSwzODEsMzgxLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDY0ICovCisgMTksIDE5LDQzOCwgMTksIDE5LCAxOSwgMTksNDM4LCAxOSwgMTksNDM5LDQzOCw0MzgsNDM4LDQzOSw0MzksCis0MzgsNDM4LDQzOCw0MzksIDE5LDQzOCwgMTksIDE5LCAgOCw0MzgsNDM4LDQzOCw0MzgsNDM4LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksNDM4LCAxOSw0NDAsIDE5LDQzOCwgMTksNDQxLDQ0Miw0MzgsNDM4LCAxOSw0MzksCis0MzgsNDM4LDQ0Myw0MzgsNDM5LDQwNyw0MDcsNDA3LDQwNyw0MzksIDE5LCAxOSw0MzksNDM5LDQzOCw0MzgsCisgIDgsICA4LCAgOCwgIDgsICA4LDQzOCw0MzksNDM5LDQzOSw0MzksIDE5LCAgOCwgMTksIDE5LDQ0NCwgMTksCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCis0NDUsNDQ1LDQ0NSw0NDUsNDQ1LDQ0NSw0NDUsNDQ1LDQ0NSw0NDUsNDQ1LDQ0NSw0NDUsNDQ1LDQ0NSw0NDUsCis0NDYsNDQ2LDQ0Niw0NDYsNDQ2LDQ0Niw0NDYsNDQ2LDQ0Niw0NDYsNDQ2LDQ0Niw0NDYsNDQ2LDQ0Niw0NDYsCisKKy8qIGJsb2NrIDY1ICovCis0NDcsNDQ3LDQ0NywgMzAsIDMxLDQ0Nyw0NDcsNDQ3LDQ0NywgMjMsIDE5LCAxOSwxMTUsMTE1LDExNSwxMTUsCisgIDgsICA4LCAgOCwgIDgsICA4LCAxOSwgMTksIDE5LCAxOSwgMTksICA4LCAgOCwgMTksIDE5LCAxOSwgMTksCisgIDgsIDE5LCAxOSwgIDgsIDE5LCAxOSwgIDgsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAgOCwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAgOCwgIDgsCisgMTksIDE5LCAgOCwgMTksICA4LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisKKy8qIGJsb2NrIDY2ICovCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisKKy8qIGJsb2NrIDY3ICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAgNiwgIDcsICA2LCAgNywgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgIDgsICA4LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgIDYsICA3LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgIDgsIDE5LCAxOSwgMTksCisKKy8qIGJsb2NrIDY4ICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDY5ICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCisKKy8qIGJsb2NrIDcwICovCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSw0NDgsNDQ4LDQ0OCw0NDgsNDQ4LDQ0OCw0NDgsNDQ4LDQ0OCw0NDgsCis0NDgsNDQ4LDQ0OCw0NDgsNDQ4LDQ0OCw0NDgsNDQ4LDQ0OCw0NDgsNDQ4LDQ0OCw0NDgsNDQ4LDQ0OCw0NDgsCis0NDksNDQ5LDQ0OSw0NDksNDQ5LDQ0OSw0NDksNDQ5LDQ0OSw0NDksNDQ5LDQ0OSw0NDksNDQ5LDQ0OSw0NDksCis0NDksNDQ5LDQ0OSw0NDksNDQ5LDQ0OSw0NDksNDQ5LDQ0OSw0NDksIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCisKKy8qIGJsb2NrIDcxICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisKKy8qIGJsb2NrIDcyICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksICA4LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksICA4LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisKKy8qIGJsb2NrIDczICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgIDgsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisKKy8qIGJsb2NrIDc0ICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAgNiwgIDcsICA2LCAgNywgIDYsICA3LCAgNiwgIDcsCisgIDYsICA3LCAgNiwgIDcsICA2LCAgNywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCisKKy8qIGJsb2NrIDc1ICovCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCisgMjMsIDIzLCAyMywgMjMsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgIDgsICA4LCAgOCwgIDgsICA4LCAgNiwgIDcsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDYsICA3LCAgNiwgIDcsICA2LCAgNywgIDYsICA3LCAgNiwgIDcsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisKKy8qIGJsb2NrIDc2ICovCis0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsCis0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsCis0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsCis0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsCis0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsCis0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsCis0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsCis0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsNDUwLDQ1MCw0NTAsCisKKy8qIGJsb2NrIDc3ICovCisgIDgsICA4LCAgOCwgIDYsICA3LCAgNiwgIDcsICA2LCAgNywgIDYsICA3LCAgNiwgIDcsICA2LCAgNywgIDYsCisgIDcsICA2LCAgNywgIDYsICA3LCAgNiwgIDcsICA2LCAgNywgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgNiwgIDcsICA2LCAgNywgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDYsICA3LCAgOCwgIDgsCisKKy8qIGJsb2NrIDc4ICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsCisgIDgsICA4LCAgOCwgIDgsICA4LCAxOSwgMTksICA4LCAgOCwgIDgsICA4LCAgOCwgIDgsIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksMTE1LDExNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisKKy8qIGJsb2NrIDc5ICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwxMTUsMTE1LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksMTE1LDExNSwxMTUsIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwxMTUsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwgMTksIDE5LCAxOSwgMTksCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDgwICovCis0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSw0NTEsCis0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSw0NTEsCis0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSw0NTEsNDUxLDQ1MSwxMTUsCis0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1Miw0NTIsCis0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1Miw0NTIsCis0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1Miw0NTIsNDUyLDQ1MiwxMTUsCisgMzAsIDMxLDQ1Myw0NTQsNDU1LDQ1Niw0NTcsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsNDU4LDQ1OSw0NjAsCis0NjEsIDMzLCAzMCwgMzEsIDMzLCAzMCwgMzEsIDMzLCAzMywgMzMsIDMzLCAzMywxMDcsMTA3LDQ2Miw0NjIsCisKKy8qIGJsb2NrIDgxICovCisxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsCisxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsCisxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsCisxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsCisxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsCisxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsMTYwLDE2MSwxNjAsMTYxLDE2MCwxNjEsCisxNjAsMTYxLDE2MCwxNjEsNDYzLDQ2NCw0NjQsNDY0LDQ2NCw0NjQsNDY0LDE2MCwxNjEsMTYwLDE2MSw0NjUsCis0NjUsNDY1LDE2MCwxNjEsMTE1LDExNSwxMTUsMTE1LDExNSw0NjYsNDY2LDQ2Niw0NjYsNDY3LDQ2Niw0NjYsCisKKy8qIGJsb2NrIDgyICovCis0NjgsNDY4LDQ2OCw0NjgsNDY4LDQ2OCw0NjgsNDY4LDQ2OCw0NjgsNDY4LDQ2OCw0NjgsNDY4LDQ2OCw0NjgsCis0NjgsNDY4LDQ2OCw0NjgsNDY4LDQ2OCw0NjgsNDY4LDQ2OCw0NjgsNDY4LDQ2OCw0NjgsNDY4LDQ2OCw0NjgsCis0NjgsNDY4LDQ2OCw0NjgsNDY4LDQ2OCwxMTUsNDY4LDExNSwxMTUsMTE1LDExNSwxMTUsNDY4LDExNSwxMTUsCis0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksCis0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksCis0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksCis0NjksNDY5LDQ2OSw0NjksNDY5LDQ2OSw0NjksNDY5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSw0NzAsCis0NzEsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSw0NzIsCisKKy8qIGJsb2NrIDgzICovCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMTE1LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwxMTUsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMTE1LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwxMTUsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMTE1LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwxMTUsCiszMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMTE1LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwxMTUsCisxNzgsMTc4LDE3OCwxNzgsMTc4LDE3OCwxNzgsMTc4LDE3OCwxNzgsMTc4LDE3OCwxNzgsMTc4LDE3OCwxNzgsCisxNzgsMTc4LDE3OCwxNzgsMTc4LDE3OCwxNzgsMTc4LDE3OCwxNzgsMTc4LDE3OCwxNzgsMTc4LDE3OCwxNzgsCisKKy8qIGJsb2NrIDg0ICovCisgIDQsICA0LCAyMSwgMjUsIDIxLCAyNSwgIDQsICA0LCAgNCwgMjEsIDI1LCAgNCwgMjEsIDI1LCAgNCwgIDQsCisgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgIDQsICA5LCAgNCwgIDQsICA5LCAgNCwgMjEsIDI1LCAgNCwgIDQsCisgMjEsIDI1LCAgNiwgIDcsICA2LCAgNywgIDYsICA3LCAgNiwgIDcsICA0LCAgNCwgIDQsICA0LCAgNCwxMDgsCisgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgIDQsICA5LCAgOSwgIDQsICA0LCAgNCwgIDQsCisgIDksICA0LCAgNiwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDg1ICovCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsMTE1LDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDg2ICovCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCisKKy8qIGJsb2NrIDg3ICovCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsNDczLDQ3Myw0NzMsCis0NzMsNDczLDQ3Myw0NzMsNDczLDQ3MywxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDg4ICovCisgIDMsICA0LCAgNCwgIDQsIDE5LDQ3NCw0MDcsNDc1LCAgNiwgIDcsICA2LCAgNywgIDYsICA3LCAgNiwgIDcsCisgIDYsICA3LCAxOSwgMTksICA2LCAgNywgIDYsICA3LCAgNiwgIDcsICA2LCAgNywgIDksICA2LCAgNywgIDcsCisgMTksNDc1LDQ3NSw0NzUsNDc1LDQ3NSw0NzUsNDc1LDQ3NSw0NzUsMTEwLDExMCwxMTAsMTEwLDQ3Niw0NzYsCisgIDksMTA4LDEwOCwxMDgsMTA4LDEwOCwgMTksIDE5LDQ3NSw0NzUsNDc1LDQ3NCw0MDcsICA0LCAxOSwgMTksCisxMTUsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsCis0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsCis0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsCis0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsCisKKy8qIGJsb2NrIDg5ICovCis0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsCis0NzcsNDc3LDQ3Nyw0NzcsNDc3LDQ3Nyw0NzcsMTE1LDExNSwxMTAsMTEwLCAxNCwgMTQsNDc4LDQ3OCw0NzcsCisgIDksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksCis0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksCis0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksCis0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksCis0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksCis0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LCAgNCwxMDgsNDgwLDQ4MCw0NzksCisKKy8qIGJsb2NrIDkwICovCisxMTUsMTE1LDExNSwxMTUsMTE1LDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsCis0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsCis0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDExNSwxMTUsCisxMTUsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsCis0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsCis0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsCis0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsCis0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsCisKKy8qIGJsb2NrIDkxICovCis0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4MiwxMTUsCisgMTksIDE5LCAyMywgMjMsIDIzLCAyMywgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCis0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsCis0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDQ4MSw0ODEsNDgxLDExNSwxMTUsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCis0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksCisKKy8qIGJsb2NrIDkyICovCis0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsCis0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4MywxMTUsCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCisgMTksIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCis0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsCis0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4Myw0ODMsNDgzLDQ4MywgMTksCisKKy8qIGJsb2NrIDkzICovCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCis0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsCis0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsCis0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCwxMTUsCisKKy8qIGJsb2NrIDk0ICovCis0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsCis0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsCis0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsCis0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsCis0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsCis0ODQsNDg0LDQ4NCw0ODQsNDg0LDQ4NCw0ODQsNDg0LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisKKy8qIGJsb2NrIDk1ICovCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCisKKy8qIGJsb2NrIDk2ICovCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisKKy8qIGJsb2NrIDk3ICovCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDk4ICovCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Nyw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCisKKy8qIGJsb2NrIDk5ICovCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCis0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsCisKKy8qIGJsb2NrIDEwMCAqLworNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDQ4Niw0ODYsNDg2LDExNSwxMTUsMTE1LAorNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LAorNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LAorNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LAorNDg4LDQ4OCw0ODgsNDg4LDQ4OCw0ODgsNDg4LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNDg5LDQ4OSw0ODksNDg5LDQ4OSw0ODksNDg5LDQ4OSw0ODksNDg5LDQ4OSw0ODksNDg5LDQ4OSw0ODksNDg5LAorNDg5LDQ4OSw0ODksNDg5LDQ4OSw0ODksNDg5LDQ4OSw0ODksNDg5LDQ4OSw0ODksNDg5LDQ4OSw0ODksNDg5LAorNDg5LDQ4OSw0ODksNDg5LDQ4OSw0ODksNDg5LDQ4OSw0OTAsNDkwLDQ5MCw0OTAsNDkwLDQ5MCw0OTEsNDkxLAorCisvKiBibG9jayAxMDEgKi8KKzQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5MiwKKzQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5MiwKKzQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5MiwKKzQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5MiwKKzQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5MiwKKzQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5MiwKKzQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5MiwKKzQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5MiwKKworLyogYmxvY2sgMTAyICovCis0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTMsNDk0LDQ5NCw0OTQsCis0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsNDkyLDQ5Miw0OTIsCis0OTUsNDk1LDQ5NSw0OTUsNDk1LDQ5NSw0OTUsNDk1LDQ5NSw0OTUsNDkyLDQ5MiwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsCisxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDQ5NiwxNzgsCisxNzksMTc5LDE3OSw0OTcsMTc4LDE3OCwxNzgsMTc4LDE3OCwxNzgsMTc4LDE3OCwxNzgsMTc4LDQ5Nyw0MDksCisKKy8qIGJsb2NrIDEwMyAqLworMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LAorMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsMTc1LDE3NiwxNzUsMTc2LDE3NSwxNzYsNDA5LDQwOSwxNzgsMTc4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk5LDQ5OSw0OTksNDk5LDQ5OSw0OTksNDk5LDQ5OSw0OTksNDk5LAorNTAwLDUwMCw1MDEsNTAxLDUwMSw1MDEsNTAxLDUwMSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxMDQgKi8KKyAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwKKyAxNCwgMTQsIDE0LCAxNCwgMTQsIDE0LCAxNCwxMDgsMTA4LDEwOCwxMDgsMTA4LDEwOCwxMDgsMTA4LDEwOCwKKyAxNCwgMTQsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwKKyAzMywgMzMsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwKKyAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwKKyAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwKKyAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwKKzEwNywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMCwgMzEsIDMwLCAzMSw1MDIsIDMwLCAzMSwKKworLyogYmxvY2sgMTA1ICovCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLDEwOCwgMTQsIDE0LCAzMCwgMzEsNTAzLCAzMywgMjAsCisgMzAsIDMxLCAzMCwgMzEsIDMzLCAzMywgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsCisgMzAsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMCwgMzEsNTA0LDUwNSw1MDYsNTA3LDExNSwxMTUsCis1MDgsNTA5LDUxMCw1MTEsIDMwLCAzMSwgMzAsIDMxLDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsIDIwLDEwNywxMDcsIDMzLCAyMCwgMjAsIDIwLCAyMCwgMjAsCisKKy8qIGJsb2NrIDEwNiAqLworNTEyLDUxMiw1MTMsNTEyLDUxMiw1MTIsNTEzLDUxMiw1MTIsNTEyLDUxMiw1MTMsNTEyLDUxMiw1MTIsNTEyLAorNTEyLDUxMiw1MTIsNTEyLDUxMiw1MTIsNTEyLDUxMiw1MTIsNTEyLDUxMiw1MTIsNTEyLDUxMiw1MTIsNTEyLAorNTEyLDUxMiw1MTIsNTE0LDUxNCw1MTMsNTEzLDUxNCw1MTUsNTE1LDUxNSw1MTUsMTE1LDExNSwxMTUsMTE1LAorIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDE5LCAxOSwgIDUsIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LAorNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LAorNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LDUxNiw1MTYsNTE2LAorNTE2LDUxNiw1MTYsNTE2LDUxNyw1MTcsNTE3LDUxNywxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxMDcgKi8KKzUxOCw1MTgsNTE5LDUxOSw1MTksNTE5LDUxOSw1MTksNTE5LDUxOSw1MTksNTE5LDUxOSw1MTksNTE5LDUxOSwKKzUxOSw1MTksNTE5LDUxOSw1MTksNTE5LDUxOSw1MTksNTE5LDUxOSw1MTksNTE5LDUxOSw1MTksNTE5LDUxOSwKKzUxOSw1MTksNTE5LDUxOSw1MTksNTE5LDUxOSw1MTksNTE5LDUxOSw1MTksNTE5LDUxOSw1MTksNTE5LDUxOSwKKzUxOSw1MTksNTE5LDUxOSw1MTgsNTE4LDUxOCw1MTgsNTE4LDUxOCw1MTgsNTE4LDUxOCw1MTgsNTE4LDUxOCwKKzUxOCw1MTgsNTE4LDUxOCw1MjAsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsNTIxLDUyMSwKKzUyMiw1MjIsNTIyLDUyMiw1MjIsNTIyLDUyMiw1MjIsNTIyLDUyMiwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzIyMiwyMjIsMjIyLDIyMiwyMjIsMjIyLDIyMiwyMjIsMjIyLDIyMiwyMjIsMjIyLDIyMiwyMjIsMjIyLDIyMiwKKzIyMiwyMjIsMjI0LDIyNCwyMjQsMjI0LDIyNCwyMjQsMjI2LDIyNiwyMjYsMjI0LDIyNiwyMjQsMTE1LDExNSwKKworLyogYmxvY2sgMTA4ICovCis1MjMsNTIzLDUyMyw1MjMsNTIzLDUyMyw1MjMsNTIzLDUyMyw1MjMsNTI0LDUyNCw1MjQsNTI0LDUyNCw1MjQsCis1MjQsNTI0LDUyNCw1MjQsNTI0LDUyNCw1MjQsNTI0LDUyNCw1MjQsNTI0LDUyNCw1MjQsNTI0LDUyNCw1MjQsCis1MjQsNTI0LDUyNCw1MjQsNTI0LDUyNCw1MjUsNTI1LDUyNSw1MjUsNTI1LDUyNSw1MjUsNTI1LCAgNCw1MjYsCis1MjcsNTI3LDUyNyw1MjcsNTI3LDUyNyw1MjcsNTI3LDUyNyw1MjcsNTI3LDUyNyw1MjcsNTI3LDUyNyw1MjcsCis1MjcsNTI3LDUyNyw1MjcsNTI3LDUyNyw1MjcsNTI4LDUyOCw1MjgsNTI4LDUyOCw1MjgsNTI4LDUyOCw1MjgsCis1MjgsNTI4LDUyOSw1MjksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSw1MzAsCiszMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsCiszMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMzE1LDMxNSwzMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDEwOSAqLworNTMxLDUzMSw1MzEsNTMyLDUzMyw1MzMsNTMzLDUzMyw1MzMsNTMzLDUzMyw1MzMsNTMzLDUzMyw1MzMsNTMzLAorNTMzLDUzMyw1MzMsNTMzLDUzMyw1MzMsNTMzLDUzMyw1MzMsNTMzLDUzMyw1MzMsNTMzLDUzMyw1MzMsNTMzLAorNTMzLDUzMyw1MzMsNTMzLDUzMyw1MzMsNTMzLDUzMyw1MzMsNTMzLDUzMyw1MzMsNTMzLDUzMyw1MzMsNTMzLAorNTMzLDUzMyw1MzMsNTMxLDUzMiw1MzIsNTMxLDUzMSw1MzEsNTMxLDUzMiw1MzIsNTMxLDUzMiw1MzIsNTMyLAorNTMyLDUzNCw1MzQsNTM0LDUzNCw1MzQsNTM0LDUzNCw1MzQsNTM0LDUzNCw1MzQsNTM0LDUzNCwxMTUsMTA4LAorNTM1LDUzNSw1MzUsNTM1LDUzNSw1MzUsNTM1LDUzNSw1MzUsNTM1LDExNSwxMTUsMTE1LDExNSw1MzQsNTM0LAorMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDcsNTM2LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LAorMzA5LDMwOSwzMDksMzA5LDMwOSwzMDksMzA5LDMwOSwzMDksMzA5LDMwNSwzMDUsMzA1LDMwNSwzMDUsMTE1LAorCisvKiBibG9jayAxMTAgKi8KKzUzNyw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzNywKKzUzNyw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzNywKKzUzNyw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzOCw1MzgsNTM4LDUzOCw1MzgsNTM4LDUzOSwKKzUzOSw1MzgsNTM4LDUzOSw1MzksNTM4LDUzOCwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzUzNyw1MzcsNTM3LDUzOCw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzNyw1MzcsNTM3LDUzOCw1MzksMTE1LDExNSwKKzU0MCw1NDAsNTQwLDU0MCw1NDAsNTQwLDU0MCw1NDAsNTQwLDU0MCwxMTUsMTE1LDU0MSw1NDEsNTQxLDU0MSwKKzMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwKKzUzNiwzMDUsMzA1LDMwNSwzMDUsMzA1LDMwNSwzMTEsMzExLDMxMSwzMDUsMzA2LDMwNywzMDYsMzA1LDMwNSwKKworLyogYmxvY2sgMTExICovCis1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsCis1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsCis1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Miw1NDIsCis1NDMsNTQyLDU0Myw1NDMsNTQzLDU0Miw1NDIsNTQzLDU0Myw1NDIsNTQyLDU0Miw1NDIsNTQyLDU0Myw1NDMsCis1NDIsNTQzLDU0MiwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDU0Miw1NDIsNTQ0LDU0NSw1NDUsCis1NDYsNTQ2LDU0Niw1NDYsNTQ2LDU0Niw1NDYsNTQ2LDU0Niw1NDYsNTQ2LDU0Nyw1NDgsNTQ4LDU0Nyw1NDcsCis1NDksNTQ5LDU0Niw1NTAsNTUwLDU0Nyw1NDgsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDExMiAqLworMTE1LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDExNSwxMTUsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMTE1LAorMTE1LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMzE4LDExNSwzMTgsMzE4LDMxOCwzMTgsMzE4LDMxOCwzMTgsMTE1LAorIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLAorIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLAorIDMzLCAzMywgMzMsNTUxLCAzMywgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMTQsMTA3LDEwNywxMDcsMTA3LAorIDMzLCAzMywgMzMsIDMzLCAzMywxMjMsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLAorCisvKiBibG9jayAxMTMgKi8KKzU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1MiwKKzU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1MiwKKzU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1MiwKKzU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1Miw1NTIsNTUyLDU1MiwKKzU0Niw1NDYsNTQ2LDU0Niw1NDYsNTQ2LDU0Niw1NDYsNTQ2LDU0Niw1NDYsNTQ2LDU0Niw1NDYsNTQ2LDU0NiwKKzU0Niw1NDYsNTQ2LDU0Niw1NDYsNTQ2LDU0Niw1NDYsNTQ2LDU0Niw1NDYsNTQ2LDU0Niw1NDYsNTQ2LDU0NiwKKzU0Niw1NDYsNTQ2LDU0Nyw1NDcsNTQ4LDU0Nyw1NDcsNTQ4LDU0Nyw1NDcsNTQ5LDU0Nyw1NDgsMTE1LDExNSwKKzU1Myw1NTMsNTUzLDU1Myw1NTMsNTUzLDU1Myw1NTMsNTUzLDU1MywxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTE0ICovCis1NTQsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTQsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NCw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU0LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTQsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCisKKy8qIGJsb2NrIDExNSAqLworNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU0LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTQsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NCw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU0LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU0LDU1NSw1NTUsNTU1LAorCisvKiBibG9jayAxMTYgKi8KKzU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU0LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTQsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NCw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NCw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKworLyogYmxvY2sgMTE3ICovCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NCw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU0LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTQsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTQsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NCw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCisKKy8qIGJsb2NrIDExOCAqLworNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NCw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU0LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU0LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTQsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorCisvKiBibG9jayAxMTkgKi8KKzU1NSw1NTUsNTU1LDU1NSw1NTQsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NCw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NCw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU0LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKzU1NSw1NTUsNTU1LDU1NSw1NTQsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSwKKworLyogYmxvY2sgMTIwICovCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTQsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTQsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NCw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU0LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCis1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsCisKKy8qIGJsb2NrIDEyMSAqLworNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTQsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LDU1NSw1NTUsNTU1LAorNTU1LDU1NSw1NTUsNTU1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LAorMzE2LDMxNiwzMTYsMzE2LDMxNiwzMTYsMzE2LDExNSwxMTUsMTE1LDExNSwzMTcsMzE3LDMxNywzMTcsMzE3LAorMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LAorMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LAorMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMzE3LDMxNywzMTcsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxMjIgKi8KKzU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwKKzU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwKKzU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwKKzU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwKKzU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwKKzU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwKKzU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwKKzU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwKKworLyogYmxvY2sgMTIzICovCis1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsCis1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsCis1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsCis1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsCis1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsCis1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsCis1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsCis1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsCisKKy8qIGJsb2NrIDEyNCAqLworNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwxMTUsMTE1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorCisvKiBibG9jayAxMjUgKi8KKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTI2ICovCisgMzMsIDMzLCAzMywgMzMsIDMzLCAzMywgMzMsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxODYsMTg2LDE4NiwxODYsMTg2LDExNSwxMTUsMTE1LDExNSwxMTUsMTkzLDE5MCwxOTMsCisxOTMsMTkzLDE5MywxOTMsMTkzLDE5MywxOTMsMTkzLDE5Myw1NTgsMTkzLDE5MywxOTMsMTkzLDE5MywxOTMsCisxOTMsMTkzLDE5MywxOTMsMTkzLDE5MywxOTMsMTE1LDE5MywxOTMsMTkzLDE5MywxOTMsMTE1LDE5MywxMTUsCisxOTMsMTkzLDExNSwxOTMsMTkzLDExNSwxOTMsMTkzLDE5MywxOTMsMTkzLDE5MywxOTMsMTkzLDE5MywxOTMsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisKKy8qIGJsb2NrIDEyNyAqLworMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLAorMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLAorMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLAorMjAwLDIwMCw1NTksNTU5LDU1OSw1NTksNTU5LDU1OSw1NTksNTU5LDU1OSw1NTksNTU5LDU1OSw1NTksNTU5LAorNTU5LDU1OSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLAorMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLAorMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLAorCisvKiBibG9jayAxMjggKi8KKzIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKzIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKzIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKzIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKzIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKzIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKzIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKzIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKworLyogYmxvY2sgMTI5ICovCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLCAgNywgIDYsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisKKy8qIGJsb2NrIDEzMCAqLworMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLAorMTE1LDExNSwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLAorMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLAorMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLAorMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMTk3LDE5OCwxMTUsMTE1LAorCisvKiBibG9jayAxMzEgKi8KKzExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwKKyAgNCwgIDQsICA0LCAgNCwgIDQsICA0LCAgNCwgIDYsICA3LCAgNCwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTc4LDE3OCwKKyAgNCwgIDksICA5LCAxNSwgMTUsICA2LCAgNywgIDYsICA3LCAgNiwgIDcsICA2LCAgNywgIDYsICA3LCAgNiwKKyAgNywgIDYsICA3LCAgNiwgIDcsICA0LCAgNCwgIDYsICA3LCAgNCwgIDQsICA0LCAgNCwgMTUsIDE1LCAxNSwKKyAgNCwgIDQsICA0LDExNSwgIDQsICA0LCAgNCwgIDQsICA5LCAgNiwgIDcsICA2LCAgNywgIDYsICA3LCAgNCwKKyAgNCwgIDQsICA4LCAgOSwgIDgsICA4LCAgOCwxMTUsICA0LCAgNSwgIDQsICA0LDExNSwxMTUsMTE1LDExNSwKKzIwMCwyMDAsMjAwLDIwMCwyMDAsMTE1LDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKworLyogYmxvY2sgMTMyICovCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMTE1LDExNSwgMjIsCisKKy8qIGJsb2NrIDEzMyAqLworMTE1LCAgNCwgIDQsICA0LCAgNSwgIDQsICA0LCAgNCwgIDYsICA3LCAgNCwgIDgsICA0LCAgOSwgIDQsICA0LAorIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAgNCwgIDQsICA4LCAgOCwgIDgsICA0LAorICA0LCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLAorIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgMTEsIDExLCAxMSwgIDYsICA0LCAgNywgMTQsIDE1LAorIDE0LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LAorIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgIDYsICA4LCAgNywgIDgsICA2LAorICA3LCAgNCwgIDYsICA3LCAgNCwgIDQsNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LAorMTA4LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LAorCisvKiBibG9jayAxMzQgKi8KKzQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSwKKzQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNDc5LDQ3OSw0NzksNTYwLDU2MCwKKzQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4MiwKKzQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsNDgyLDExNSwKKzExNSwxMTUsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsMTE1LDExNSw0ODIsNDgyLDQ4Miw0ODIsNDgyLDQ4MiwKKzExNSwxMTUsNDgyLDQ4Miw0ODIsNDgyLDQ4Miw0ODIsMTE1LDExNSw0ODIsNDgyLDQ4MiwxMTUsMTE1LDExNSwKKyAgNSwgIDUsICA4LCAxNCwgMTksICA1LCAgNSwxMTUsIDE5LCAgOCwgIDgsICA4LCAgOCwgMTksIDE5LDExNSwKKzQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LCAyMiwgMjIsIDIyLCAxOSwgMTksMTE1LDExNSwKKworLyogYmxvY2sgMTM1ICovCis1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSwxMTUsNTYxLDU2MSw1NjEsCis1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsCis1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsMTE1LDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsCis1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDExNSw1NjEsNTYxLDExNSw1NjEsCis1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDExNSwxMTUsCis1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDEzNiAqLworNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLAorNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLAorNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLAorNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLAorNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLAorNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLAorNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLAorNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSw1NjEsNTYxLDU2MSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxMzcgKi8KKyAgNCwgIDQsICA0LDExNSwxMTUsMTE1LDExNSwgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywKKyAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywKKyAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywKKyAyMywgMjMsIDIzLCAyMywxMTUsMTE1LDExNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKzU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2MiwKKzU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2MiwKKzU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2Miw1NjIsNTYyLDU2MiwKKzU2Miw1NjIsNTYyLDU2Miw1NjIsNTYzLDU2Myw1NjMsNTYzLDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCwKKworLyogYmxvY2sgMTM4ICovCis1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTYzLDU2Myw1NjQsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwxMTUsMTE1LDExNSwxMTUsCis1NjQsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksMTEwLDExNSwxMTUsCisKKy8qIGJsb2NrIDEzOSAqLworMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxNDAgKi8KKzU2NSw1NjUsNTY1LDU2NSw1NjUsNTY1LDU2NSw1NjUsNTY1LDU2NSw1NjUsNTY1LDU2NSw1NjUsNTY1LDU2NSwKKzU2NSw1NjUsNTY1LDU2NSw1NjUsNTY1LDU2NSw1NjUsNTY1LDU2NSw1NjUsNTY1LDU2NSwxMTUsMTE1LDExNSwKKzU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2NiwKKzU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2NiwKKzU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2Niw1NjYsNTY2LDU2NiwKKzU2NiwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExMCwgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywKKyAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTQxICovCis1NjcsNTY3LDU2Nyw1NjcsNTY3LDU2Nyw1NjcsNTY3LDU2Nyw1NjcsNTY3LDU2Nyw1NjcsNTY3LDU2Nyw1NjcsCis1NjcsNTY3LDU2Nyw1NjcsNTY3LDU2Nyw1NjcsNTY3LDU2Nyw1NjcsNTY3LDU2Nyw1NjcsNTY3LDU2Nyw1NjcsCis1NjgsNTY4LDU2OCw1NjgsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCis1NjksNTY5LDU2OSw1NjksNTY5LDU2OSw1NjksNTY5LDU2OSw1NjksNTY5LDU2OSw1NjksNTY5LDU2OSw1NjksCis1NjksNTcwLDU2OSw1NjksNTY5LDU2OSw1NjksNTY5LDU2OSw1NjksNTcwLDExNSwxMTUsMTE1LDExNSwxMTUsCis1NzEsNTcxLDU3MSw1NzEsNTcxLDU3MSw1NzEsNTcxLDU3MSw1NzEsNTcxLDU3MSw1NzEsNTcxLDU3MSw1NzEsCis1NzEsNTcxLDU3MSw1NzEsNTcxLDU3MSw1NzEsNTcxLDU3MSw1NzEsNTcxLDU3MSw1NzEsNTcxLDU3MSw1NzEsCis1NzEsNTcxLDU3MSw1NzEsNTcxLDU3MSw1NzIsNTcyLDU3Miw1NzIsNTcyLDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE0MiAqLworNTczLDU3Myw1NzMsNTczLDU3Myw1NzMsNTczLDU3Myw1NzMsNTczLDU3Myw1NzMsNTczLDU3Myw1NzMsNTczLAorNTczLDU3Myw1NzMsNTczLDU3Myw1NzMsNTczLDU3Myw1NzMsNTczLDU3Myw1NzMsNTczLDU3MywxMTUsNTc0LAorNTc1LDU3NSw1NzUsNTc1LDU3NSw1NzUsNTc1LDU3NSw1NzUsNTc1LDU3NSw1NzUsNTc1LDU3NSw1NzUsNTc1LAorNTc1LDU3NSw1NzUsNTc1LDU3NSw1NzUsNTc1LDU3NSw1NzUsNTc1LDU3NSw1NzUsNTc1LDU3NSw1NzUsNTc1LAorNTc1LDU3NSw1NzUsNTc1LDExNSwxMTUsMTE1LDExNSw1NzUsNTc1LDU3NSw1NzUsNTc1LDU3NSw1NzUsNTc1LAorNTc2LDU3Nyw1NzcsNTc3LDU3Nyw1NzcsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxNDMgKi8KKzU3OCw1NzgsNTc4LDU3OCw1NzgsNTc4LDU3OCw1NzgsNTc4LDU3OCw1NzgsNTc4LDU3OCw1NzgsNTc4LDU3OCwKKzU3OCw1NzgsNTc4LDU3OCw1NzgsNTc4LDU3OCw1NzgsNTc4LDU3OCw1NzgsNTc4LDU3OCw1NzgsNTc4LDU3OCwKKzU3OCw1NzgsNTc4LDU3OCw1NzgsNTc4LDU3OCw1NzgsNTc5LDU3OSw1NzksNTc5LDU3OSw1NzksNTc5LDU3OSwKKzU3OSw1NzksNTc5LDU3OSw1NzksNTc5LDU3OSw1NzksNTc5LDU3OSw1NzksNTc5LDU3OSw1NzksNTc5LDU3OSwKKzU3OSw1NzksNTc5LDU3OSw1NzksNTc5LDU3OSw1NzksNTc5LDU3OSw1NzksNTc5LDU3OSw1NzksNTc5LDU3OSwKKzU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCwKKzU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCwKKzU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCw1ODAsNTgwLDU4MCwKKworLyogYmxvY2sgMTQ0ICovCis1ODEsNTgxLDU4MSw1ODEsNTgxLDU4MSw1ODEsNTgxLDU4MSw1ODEsNTgxLDU4MSw1ODEsNTgxLDU4MSw1ODEsCis1ODEsNTgxLDU4MSw1ODEsNTgxLDU4MSw1ODEsNTgxLDU4MSw1ODEsNTgxLDU4MSw1ODEsNTgxLDExNSwxMTUsCis1ODIsNTgyLDU4Miw1ODIsNTgyLDU4Miw1ODIsNTgyLDU4Miw1ODIsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE0NSAqLworNTgzLDU4Myw1ODMsNTgzLDU4Myw1ODMsNTgzLDU4Myw1ODMsNTgzLDU4Myw1ODMsNTgzLDU4Myw1ODMsNTgzLAorNTgzLDU4Myw1ODMsNTgzLDU4Myw1ODMsNTgzLDU4Myw1ODMsNTgzLDU4Myw1ODMsNTgzLDU4Myw1ODMsNTgzLAorNTgzLDU4Myw1ODMsNTgzLDU4Myw1ODMsNTgzLDU4MywxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LAorNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LAorNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LDU4NCw1ODQsNTg0LAorNTg0LDU4NCw1ODQsNTg0LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsNTg1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxNDYgKi8KKzU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4NiwKKzU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4NiwKKzU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4NiwKKzU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4NiwKKzU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4NiwKKzU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4NiwKKzU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4NiwKKzU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4NiwKKworLyogYmxvY2sgMTQ3ICovCis1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsCis1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsCis1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsCis1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCis1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsCis1ODYsNTg2LDU4Niw1ODYsNTg2LDU4NiwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCis1ODYsNTg2LDU4Niw1ODYsNTg2LDU4Niw1ODYsNTg2LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE0OCAqLworNTg3LDU4Nyw1ODcsNTg3LDU4Nyw1ODcsMTE1LDExNSw1ODcsMTE1LDU4Nyw1ODcsNTg3LDU4Nyw1ODcsNTg3LAorNTg3LDU4Nyw1ODcsNTg3LDU4Nyw1ODcsNTg3LDU4Nyw1ODcsNTg3LDU4Nyw1ODcsNTg3LDU4Nyw1ODcsNTg3LAorNTg3LDU4Nyw1ODcsNTg3LDU4Nyw1ODcsNTg3LDU4Nyw1ODcsNTg3LDU4Nyw1ODcsNTg3LDU4Nyw1ODcsNTg3LAorNTg3LDU4Nyw1ODcsNTg3LDU4Nyw1ODcsMTE1LDU4Nyw1ODcsMTE1LDExNSwxMTUsNTg3LDExNSwxMTUsNTg3LAorNTg4LDU4OCw1ODgsNTg4LDU4OCw1ODgsNTg4LDU4OCw1ODgsNTg4LDU4OCw1ODgsNTg4LDU4OCw1ODgsNTg4LAorNTg4LDU4OCw1ODgsNTg4LDU4OCw1ODgsMTE1LDU4OSw1OTAsNTkwLDU5MCw1OTAsNTkwLDU5MCw1OTAsNTkwLAorNTkxLDU5MSw1OTEsNTkxLDU5MSw1OTEsNTkxLDU5MSw1OTEsNTkxLDU5MSw1OTEsNTkxLDU5MSw1OTEsNTkxLAorNTkxLDU5MSw1OTEsNTkxLDU5MSw1OTEsNTkxLDU5Miw1OTIsNTkzLDU5Myw1OTMsNTkzLDU5Myw1OTMsNTkzLAorCisvKiBibG9jayAxNDkgKi8KKzU5NCw1OTQsNTk0LDU5NCw1OTQsNTk0LDU5NCw1OTQsNTk0LDU5NCw1OTQsNTk0LDU5NCw1OTQsNTk0LDU5NCwKKzU5NCw1OTQsNTk0LDU5NCw1OTQsNTk0LDU5NCw1OTQsNTk0LDU5NCw1OTQsNTk0LDU5NCw1OTQsNTk0LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSw1OTUsNTk1LDU5NSw1OTUsNTk1LDU5NSw1OTUsNTk1LDU5NSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzU5Niw1OTYsNTk2LDU5Niw1OTYsNTk2LDU5Niw1OTYsNTk2LDU5Niw1OTYsNTk2LDU5Niw1OTYsNTk2LDU5NiwKKzU5Niw1OTYsNTk2LDExNSw1OTYsNTk2LDExNSwxMTUsMTE1LDExNSwxMTUsNTk3LDU5Nyw1OTcsNTk3LDU5NywKKworLyogYmxvY2sgMTUwICovCis1OTgsNTk4LDU5OCw1OTgsNTk4LDU5OCw1OTgsNTk4LDU5OCw1OTgsNTk4LDU5OCw1OTgsNTk4LDU5OCw1OTgsCis1OTgsNTk4LDU5OCw1OTgsNTk4LDU5OCw1OTksNTk5LDU5OSw1OTksNTk5LDU5OSwxMTUsMTE1LDExNSw2MDAsCis2MDEsNjAxLDYwMSw2MDEsNjAxLDYwMSw2MDEsNjAxLDYwMSw2MDEsNjAxLDYwMSw2MDEsNjAxLDYwMSw2MDEsCis2MDEsNjAxLDYwMSw2MDEsNjAxLDYwMSw2MDEsNjAxLDYwMSw2MDEsMTE1LDExNSwxMTUsMTE1LDExNSw2MDIsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE1MSAqLworNjAzLDYwMyw2MDMsNjAzLDYwMyw2MDMsNjAzLDYwMyw2MDMsNjAzLDYwMyw2MDMsNjAzLDYwMyw2MDMsNjAzLAorNjAzLDYwMyw2MDMsNjAzLDYwMyw2MDMsNjAzLDYwMyw2MDMsNjAzLDYwMyw2MDMsNjAzLDYwMyw2MDMsNjAzLAorNjA0LDYwNCw2MDQsNjA0LDYwNCw2MDQsNjA0LDYwNCw2MDQsNjA0LDYwNCw2MDQsNjA0LDYwNCw2MDQsNjA0LAorNjA0LDYwNCw2MDQsNjA0LDYwNCw2MDQsNjA0LDYwNCwxMTUsMTE1LDExNSwxMTUsNjA1LDYwNSw2MDQsNjA0LAorNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LAorMTE1LDExNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LAorNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LAorNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LDYwNSw2MDUsNjA1LAorCisvKiBibG9jayAxNTIgKi8KKzYwNiw2MDcsNjA3LDYwNywxMTUsNjA3LDYwNywxMTUsMTE1LDExNSwxMTUsMTE1LDYwNyw2MDcsNjA3LDYwNywKKzYwNiw2MDYsNjA2LDYwNiwxMTUsNjA2LDYwNiw2MDYsMTE1LDYwNiw2MDYsNjA2LDYwNiw2MDYsNjA2LDYwNiwKKzYwNiw2MDYsNjA2LDYwNiw2MDYsNjA2LDYwNiw2MDYsNjA2LDYwNiw2MDYsNjA2LDYwNiw2MDYsNjA2LDYwNiwKKzYwNiw2MDYsNjA2LDYwNiwxMTUsMTE1LDExNSwxMTUsNjA3LDYwNyw2MDcsMTE1LDExNSwxMTUsMTE1LDYwNywKKzYwOCw2MDgsNjA4LDYwOCw2MDgsNjA4LDYwOCw2MDgsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzYwOSw2MDksNjA5LDYwOSw2MDksNjA5LDYwOSw2MDksNjA5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzYxMCw2MTAsNjEwLDYxMCw2MTAsNjEwLDYxMCw2MTAsNjEwLDYxMCw2MTAsNjEwLDYxMCw2MTAsNjEwLDYxMCwKKzYxMCw2MTAsNjEwLDYxMCw2MTAsNjEwLDYxMCw2MTAsNjEwLDYxMCw2MTAsNjEwLDYxMCw2MTEsNjExLDYxMiwKKworLyogYmxvY2sgMTUzICovCis2MTMsNjEzLDYxMyw2MTMsNjEzLDYxMyw2MTMsNjEzLDYxMyw2MTMsNjEzLDYxMyw2MTMsNjEzLDYxMyw2MTMsCis2MTMsNjEzLDYxMyw2MTMsNjEzLDYxMyw2MTMsNjEzLDYxMyw2MTMsNjEzLDYxMyw2MTMsNjE0LDYxNCw2MTQsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCis2MTUsNjE1LDYxNSw2MTUsNjE1LDYxNSw2MTUsNjE1LDYxNiw2MTUsNjE1LDYxNSw2MTUsNjE1LDYxNSw2MTUsCis2MTUsNjE1LDYxNSw2MTUsNjE1LDYxNSw2MTUsNjE1LDYxNSw2MTUsNjE1LDYxNSw2MTUsNjE1LDYxNSw2MTUsCis2MTUsNjE1LDYxNSw2MTUsNjE1LDYxNyw2MTcsMTE1LDExNSwxMTUsMTE1LDYxOCw2MTgsNjE4LDYxOCw2MTgsCis2MTksNjE5LDYxOSw2MTksNjE5LDYxOSw2MTksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE1NCAqLworNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLAorNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLAorNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsNjIwLAorNjIwLDYyMCw2MjAsNjIwLDYyMCw2MjAsMTE1LDExNSwxMTUsNjIxLDYyMSw2MjEsNjIxLDYyMSw2MjEsNjIxLAorNjIyLDYyMiw2MjIsNjIyLDYyMiw2MjIsNjIyLDYyMiw2MjIsNjIyLDYyMiw2MjIsNjIyLDYyMiw2MjIsNjIyLAorNjIyLDYyMiw2MjIsNjIyLDYyMiw2MjIsMTE1LDExNSw2MjMsNjIzLDYyMyw2MjMsNjIzLDYyMyw2MjMsNjIzLAorNjI0LDYyNCw2MjQsNjI0LDYyNCw2MjQsNjI0LDYyNCw2MjQsNjI0LDYyNCw2MjQsNjI0LDYyNCw2MjQsNjI0LAorNjI0LDYyNCw2MjQsMTE1LDExNSwxMTUsMTE1LDExNSw2MjUsNjI1LDYyNSw2MjUsNjI1LDYyNSw2MjUsNjI1LAorCisvKiBibG9jayAxNTUgKi8KKzYyNiw2MjYsNjI2LDYyNiw2MjYsNjI2LDYyNiw2MjYsNjI2LDYyNiw2MjYsNjI2LDYyNiw2MjYsNjI2LDYyNiwKKzYyNiw2MjYsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDYyNyw2MjcsNjI3LDYyNywxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDYyOCw2MjgsNjI4LDYyOCw2MjgsNjI4LDYyOCwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTU2ICovCis2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksCis2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksCis2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksCis2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksCis2MjksNjI5LDYyOSw2MjksNjI5LDYyOSw2MjksNjI5LDYyOSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE1NyAqLworNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLAorNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLAorNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLDYzMCw2MzAsNjMwLAorNjMwLDYzMCw2MzAsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLAorNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLAorNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLDYzMSw2MzEsNjMxLAorNjMxLDYzMSw2MzEsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDYzMiw2MzIsNjMyLDYzMiw2MzIsNjMyLAorCisvKiBibG9jayAxNTggKi8KKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzYzMyw2MzMsNjMzLDYzMyw2MzMsNjMzLDYzMyw2MzMsNjMzLDYzMyw2MzMsNjMzLDYzMyw2MzMsNjMzLDYzMywKKzYzMyw2MzMsNjMzLDYzMyw2MzMsNjMzLDYzMyw2MzMsNjMzLDYzMyw2MzMsNjMzLDYzMyw2MzMsNjMzLDExNSwKKworLyogYmxvY2sgMTU5ICovCis2MzQsNjM1LDYzNCw2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsCis2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsCis2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsCis2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNiw2MzYsNjM2LDYzNSw2MzUsNjM1LDYzNSw2MzUsNjM1LDYzNSw2MzUsCis2MzUsNjM1LDYzNSw2MzUsNjM1LDYzNSw2MzUsNjM3LDYzNyw2MzcsNjM3LDYzNyw2MzcsNjM3LDExNSwxMTUsCisxMTUsMTE1LDYzOCw2MzgsNjM4LDYzOCw2MzgsNjM4LDYzOCw2MzgsNjM4LDYzOCw2MzgsNjM4LDYzOCw2MzgsCis2MzgsNjM4LDYzOCw2MzgsNjM4LDYzOCw2MzksNjM5LDYzOSw2MzksNjM5LDYzOSw2MzksNjM5LDYzOSw2MzksCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSw2MzUsCisKKy8qIGJsb2NrIDE2MCAqLworNjQwLDY0MCw2NDEsNjQyLDY0Miw2NDIsNjQyLDY0Miw2NDIsNjQyLDY0Miw2NDIsNjQyLDY0Miw2NDIsNjQyLAorNjQyLDY0Miw2NDIsNjQyLDY0Miw2NDIsNjQyLDY0Miw2NDIsNjQyLDY0Miw2NDIsNjQyLDY0Miw2NDIsNjQyLAorNjQyLDY0Miw2NDIsNjQyLDY0Miw2NDIsNjQyLDY0Miw2NDIsNjQyLDY0Miw2NDIsNjQyLDY0Miw2NDIsNjQyLAorNjQxLDY0MSw2NDEsNjQwLDY0MCw2NDAsNjQwLDY0MSw2NDEsNjQwLDY0MCw2NDMsNjQzLDY0NCw2NDMsNjQzLAorNjQzLDY0MywxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNjQ1LDY0NSw2NDUsNjQ1LDY0NSw2NDUsNjQ1LDY0NSw2NDUsNjQ1LDY0NSw2NDUsNjQ1LDY0NSw2NDUsNjQ1LAorNjQ1LDY0NSw2NDUsNjQ1LDY0NSw2NDUsNjQ1LDY0NSw2NDUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNjQ2LDY0Niw2NDYsNjQ2LDY0Niw2NDYsNjQ2LDY0Niw2NDYsNjQ2LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxNjEgKi8KKzY0Nyw2NDcsNjQ3LDY0OCw2NDgsNjQ4LDY0OCw2NDgsNjQ4LDY0OCw2NDgsNjQ4LDY0OCw2NDgsNjQ4LDY0OCwKKzY0OCw2NDgsNjQ4LDY0OCw2NDgsNjQ4LDY0OCw2NDgsNjQ4LDY0OCw2NDgsNjQ4LDY0OCw2NDgsNjQ4LDY0OCwKKzY0OCw2NDgsNjQ4LDY0OCw2NDgsNjQ4LDY0OCw2NDcsNjQ3LDY0Nyw2NDcsNjQ3LDY0OSw2NDcsNjQ3LDY0NywKKzY0Nyw2NDcsNjQ3LDY0Nyw2NDcsMTE1LDY1MCw2NTAsNjUwLDY1MCw2NTAsNjUwLDY1MCw2NTAsNjUwLDY1MCwKKzY1MSw2NTEsNjUxLDY1MSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzY1Miw2NTIsNjUyLDY1Miw2NTIsNjUyLDY1Miw2NTIsNjUyLDY1Miw2NTIsNjUyLDY1Miw2NTIsNjUyLDY1MiwKKzY1Miw2NTIsNjUyLDY1Miw2NTIsNjUyLDY1Miw2NTIsNjUyLDY1Miw2NTIsNjUyLDY1Miw2NTIsNjUyLDY1MiwKKzY1Miw2NTIsNjUyLDY1Myw2NTQsNjU0LDY1MiwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTYyICovCis2NTUsNjU1LDY1Niw2NTcsNjU3LDY1Nyw2NTcsNjU3LDY1Nyw2NTcsNjU3LDY1Nyw2NTcsNjU3LDY1Nyw2NTcsCis2NTcsNjU3LDY1Nyw2NTcsNjU3LDY1Nyw2NTcsNjU3LDY1Nyw2NTcsNjU3LDY1Nyw2NTcsNjU3LDY1Nyw2NTcsCis2NTcsNjU3LDY1Nyw2NTcsNjU3LDY1Nyw2NTcsNjU3LDY1Nyw2NTcsNjU3LDY1Nyw2NTcsNjU3LDY1Nyw2NTcsCis2NTcsNjU3LDY1Nyw2NTYsNjU2LDY1Niw2NTUsNjU1LDY1NSw2NTUsNjU1LDY1NSw2NTUsNjU1LDY1NSw2NTYsCis2NTYsNjU3LDY1Nyw2NTcsNjU3LDY1OCw2NTgsNjU4LDY1OCw2NTgsNjU1LDY1NSw2NTUsNjU4LDExNSwxMTUsCis2NTksNjU5LDY1OSw2NTksNjU5LDY1OSw2NTksNjU5LDY1OSw2NTksNjU3LDY1OCw2NTcsNjU4LDY1OCw2NTgsCisxMTUsNjYwLDY2MCw2NjAsNjYwLDY2MCw2NjAsNjYwLDY2MCw2NjAsNjYwLDY2MCw2NjAsNjYwLDY2MCw2NjAsCis2NjAsNjYwLDY2MCw2NjAsNjYwLDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE2MyAqLworNjYxLDY2MSw2NjEsNjYxLDY2MSw2NjEsNjYxLDY2MSw2NjEsNjYxLDY2MSw2NjEsNjYxLDY2MSw2NjEsNjYxLAorNjYxLDY2MSwxMTUsNjYxLDY2MSw2NjEsNjYxLDY2MSw2NjEsNjYxLDY2MSw2NjEsNjYxLDY2MSw2NjEsNjYxLAorNjYxLDY2MSw2NjEsNjYxLDY2MSw2NjEsNjYxLDY2MSw2NjEsNjYxLDY2MSw2NjEsNjYyLDY2Miw2NjIsNjYzLAorNjYzLDY2Myw2NjIsNjYyLDY2Myw2NjIsNjYzLDY2Myw2NjQsNjY0LDY2NCw2NjQsNjY0LDY2NCwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxNjQgKi8KKzY2NSw2NjUsNjY1LDY2NSw2NjUsNjY1LDY2NSwxMTUsNjY1LDExNSw2NjUsNjY1LDY2NSw2NjUsMTE1LDY2NSwKKzY2NSw2NjUsNjY1LDY2NSw2NjUsNjY1LDY2NSw2NjUsNjY1LDY2NSw2NjUsNjY1LDY2NSw2NjUsMTE1LDY2NSwKKzY2NSw2NjUsNjY1LDY2NSw2NjUsNjY1LDY2NSw2NjUsNjY1LDY2NiwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2NywKKzY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2NywKKzY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2OCwKKzY2OSw2NjksNjY5LDY2OCw2NjgsNjY4LDY2OCw2NjgsNjY4LDY2OCw2NjgsMTE1LDExNSwxMTUsMTE1LDExNSwKKzY3MCw2NzAsNjcwLDY3MCw2NzAsNjcwLDY3MCw2NzAsNjcwLDY3MCwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTY1ICovCis2NzEsNjcxLDY3Miw2NzIsMTE1LDY3Myw2NzMsNjczLDY3Myw2NzMsNjczLDY3Myw2NzMsMTE1LDExNSw2NzMsCis2NzMsMTE1LDExNSw2NzMsNjczLDY3Myw2NzMsNjczLDY3Myw2NzMsNjczLDY3Myw2NzMsNjczLDY3Myw2NzMsCis2NzMsNjczLDY3Myw2NzMsNjczLDY3Myw2NzMsNjczLDY3MywxMTUsNjczLDY3Myw2NzMsNjczLDY3Myw2NzMsCis2NzMsMTE1LDY3Myw2NzMsMTE1LDY3Myw2NzMsNjczLDY3Myw2NzMsMTE1LDExNSw2NzEsNjczLDY3NCw2NzIsCis2NzEsNjcyLDY3Miw2NzIsNjcyLDExNSwxMTUsNjcyLDY3MiwxMTUsMTE1LDY3Miw2NzIsNjcyLDExNSwxMTUsCis2NzMsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsNjc0LDExNSwxMTUsMTE1LDExNSwxMTUsNjczLDY3Myw2NzMsCis2NzMsNjczLDY3Miw2NzIsMTE1LDExNSw2NzEsNjcxLDY3MSw2NzEsNjcxLDY3MSw2NzEsMTE1LDExNSwxMTUsCis2NzEsNjcxLDY3MSw2NzEsNjcxLDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE2NiAqLworNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LAorNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LAorNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LDY3NSw2NzUsNjc1LAorNjc2LDY3Nyw2NzcsNjc4LDY3OCw2NzgsNjc4LDY3OCw2NzgsNjc3LDY3OCw2NzcsNjc3LDY3Niw2NzcsNjc4LAorNjc4LDY3Nyw2NzgsNjc4LDY3NSw2NzUsNjc5LDY3NSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNjgwLDY4MCw2ODAsNjgwLDY4MCw2ODAsNjgwLDY4MCw2ODAsNjgwLDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxNjcgKi8KKzY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MSwKKzY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MSwKKzY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MSw2ODEsNjgxLDY4MiwKKzY4Myw2ODMsNjg0LDY4NCw2ODQsNjg0LDExNSwxMTUsNjgzLDY4Myw2ODMsNjgzLDY4NCw2ODQsNjgzLDY4NCwKKzY4NCw2ODUsNjg1LDY4NSw2ODUsNjg1LDY4NSw2ODUsNjg1LDY4NSw2ODUsNjg1LDY4NSw2ODUsNjg1LDY4NSwKKzY4NSw2ODUsNjg1LDY4NSw2ODUsNjg1LDY4NSw2ODUsNjgxLDY4MSw2ODEsNjgxLDY4NCw2ODQsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTY4ICovCis2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsCis2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsCis2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsNjg2LDY4Niw2ODYsCis2ODcsNjg3LDY4Nyw2ODgsNjg4LDY4OCw2ODgsNjg4LDY4OCw2ODgsNjg4LDY4Nyw2ODcsNjg4LDY4Nyw2ODgsCis2ODgsNjg5LDY4OSw2ODksNjg2LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCis2OTAsNjkwLDY5MCw2OTAsNjkwLDY5MCw2OTAsNjkwLDY5MCw2OTAsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE2OSAqLworNjkxLDY5MSw2OTEsNjkxLDY5MSw2OTEsNjkxLDY5MSw2OTEsNjkxLDY5MSw2OTEsNjkxLDY5MSw2OTEsNjkxLAorNjkxLDY5MSw2OTEsNjkxLDY5MSw2OTEsNjkxLDY5MSw2OTEsNjkxLDY5MSw2OTEsNjkxLDY5MSw2OTEsNjkxLAorNjkxLDY5MSw2OTEsNjkxLDY5MSw2OTEsNjkxLDY5MSw2OTEsNjkxLDY5MSw2OTIsNjkzLDY5Miw2OTMsNjkzLAorNjkyLDY5Miw2OTIsNjkyLDY5Miw2OTIsNjkzLDY5MiwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNjk0LDY5NCw2OTQsNjk0LDY5NCw2OTQsNjk0LDY5NCw2OTQsNjk0LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxNzAgKi8KKzY5NSw2OTUsNjk1LDY5NSw2OTUsNjk1LDY5NSw2OTUsNjk1LDY5NSw2OTUsNjk1LDY5NSw2OTUsNjk1LDY5NSwKKzY5NSw2OTUsNjk1LDY5NSw2OTUsNjk1LDY5NSw2OTUsNjk1LDY5NSwxMTUsMTE1LDExNSw2OTYsNjk2LDY5NiwKKzY5Nyw2OTcsNjk2LDY5Niw2OTYsNjk2LDY5Nyw2OTYsNjk2LDY5Niw2OTYsNjk2LDExNSwxMTUsMTE1LDExNSwKKzY5OCw2OTgsNjk4LDY5OCw2OTgsNjk4LDY5OCw2OTgsNjk4LDY5OCw2OTksNjk5LDcwMCw3MDAsNzAwLDcwMSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTcxICovCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCis3MDIsNzAyLDcwMiw3MDIsNzAyLDcwMiw3MDIsNzAyLDcwMiw3MDIsNzAyLDcwMiw3MDIsNzAyLDcwMiw3MDIsCis3MDIsNzAyLDcwMiw3MDIsNzAyLDcwMiw3MDIsNzAyLDcwMiw3MDIsNzAyLDcwMiw3MDIsNzAyLDcwMiw3MDIsCis3MDMsNzAzLDcwMyw3MDMsNzAzLDcwMyw3MDMsNzAzLDcwMyw3MDMsNzAzLDcwMyw3MDMsNzAzLDcwMyw3MDMsCis3MDMsNzAzLDcwMyw3MDMsNzAzLDcwMyw3MDMsNzAzLDcwMyw3MDMsNzAzLDcwMyw3MDMsNzAzLDcwMyw3MDMsCis3MDQsNzA0LDcwNCw3MDQsNzA0LDcwNCw3MDQsNzA0LDcwNCw3MDQsNzA1LDcwNSw3MDUsNzA1LDcwNSw3MDUsCis3MDUsNzA1LDcwNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSw3MDYsCisKKy8qIGJsb2NrIDE3MiAqLworMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LAorNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LAorNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LAorNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsNzA3LDcwNyw3MDcsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxNzMgKi8KKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKworLyogYmxvY2sgMTc0ICovCis3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsCis3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE3NSAqLworNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LAorNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LAorNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LAorNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LAorNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LAorNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LAorNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksNzA5LDcwOSw3MDksMTE1LAorNzEwLDcxMCw3MTAsNzEwLDcxMCwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxNzYgKi8KKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKzcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCwKKzcwOCw3MDgsNzA4LDcwOCwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTc3ICovCis3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsCis3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsCis3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsCis3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsCis3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsCis3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsCis3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsCis3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsCisKKy8qIGJsb2NrIDE3OCAqLworNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLAorNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLAorNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsNzExLDcxMSw3MTEsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxNzkgKi8KKzcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiwKKzcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiwKKzcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiwKKzcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiwKKzcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiwKKzcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiwKKzcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiwKKzcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiwKKworLyogYmxvY2sgMTgwICovCis3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsCis3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsCis3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsCis3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsCis3MTIsNzEyLDcxMiw3MTIsNzEyLDcxMiw3MTIsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE4MSAqLworNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LAorCisvKiBibG9jayAxODIgKi8KKzQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCwKKzQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCwKKzQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCwKKzQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDQ5OCw0OTgsNDk4LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzcxMyw3MTMsNzEzLDcxMyw3MTMsNzEzLDcxMyw3MTMsNzEzLDcxMyw3MTMsNzEzLDcxMyw3MTMsNzEzLDcxMywKKzcxMyw3MTMsNzEzLDcxMyw3MTMsNzEzLDcxMyw3MTMsNzEzLDcxMyw3MTMsNzEzLDcxMyw3MTMsNzEzLDExNSwKKzcxNCw3MTQsNzE0LDcxNCw3MTQsNzE0LDcxNCw3MTQsNzE0LDcxNCwxMTUsMTE1LDExNSwxMTUsNzE1LDcxNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTgzICovCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCis3MTYsNzE2LDcxNiw3MTYsNzE2LDcxNiw3MTYsNzE2LDcxNiw3MTYsNzE2LDcxNiw3MTYsNzE2LDcxNiw3MTYsCis3MTYsNzE2LDcxNiw3MTYsNzE2LDcxNiw3MTYsNzE2LDcxNiw3MTYsNzE2LDcxNiw3MTYsNzE2LDExNSwxMTUsCis3MTcsNzE3LDcxNyw3MTcsNzE3LDcxOCwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE4NCAqLworNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LAorNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LAorNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LAorNzIwLDcyMCw3MjAsNzIwLDcyMCw3MjAsNzIwLDcyMSw3MjEsNzIxLDcyMSw3MjEsNzIyLDcyMiw3MjIsNzIyLAorNzIzLDcyMyw3MjMsNzIzLDcyMSw3MjIsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNzI0LDcyNCw3MjQsNzI0LDcyNCw3MjQsNzI0LDcyNCw3MjQsNzI0LDExNSw3MjUsNzI1LDcyNSw3MjUsNzI1LAorNzI1LDcyNSwxMTUsNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LAorNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSwxMTUsMTE1LDExNSwxMTUsMTE1LDcxOSw3MTksNzE5LAorCisvKiBibG9jayAxODUgKi8KKzcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSw3MTksNzE5LDcxOSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTg2ICovCis3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsCis3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsCis3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsCis3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsNzI2LDcyNiw3MjYsCis3MjYsNzI2LDcyNiw3MjYsNzI2LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCis3MjYsNzI3LDcyNyw3MjcsNzI3LDcyNyw3MjcsNzI3LDcyNyw3MjcsNzI3LDcyNyw3MjcsNzI3LDcyNyw3MjcsCis3MjcsNzI3LDcyNyw3MjcsNzI3LDcyNyw3MjcsNzI3LDcyNyw3MjcsNzI3LDcyNyw3MjcsNzI3LDcyNyw3MjcsCis3MjcsNzI3LDcyNyw3MjcsNzI3LDcyNyw3MjcsNzI3LDcyNyw3MjcsNzI3LDcyNyw3MjcsNzI3LDcyNywxMTUsCisKKy8qIGJsb2NrIDE4NyAqLworMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsNzI4LAorNzI4LDcyOCw3MjgsNzI5LDcyOSw3MjksNzI5LDcyOSw3MjksNzI5LDcyOSw3MjksNzI5LDcyOSw3MjksNzI5LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxODggKi8KKzQ3OSw0NzcsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTg5ICovCis3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsCis3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsCis3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsCis3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsCis3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsCis3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsCis3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDExNSwxMTUsMTE1LDExNSwxMTUsCis3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE5MCAqLworNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDczMCw3MzAsNzMwLDExNSwxMTUsNzMxLDczMiw3MzIsNzMzLAorIDIyLCAyMiwgMjIsIDIyLDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxOTEgKi8KKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTkyICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksMTE1LDExNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LDczNCw0MDYsMTEwLDExMCwxMTAsIDE5LCAxOSwgMTksNDA2LDczNCw3MzQsCis3MzQsNzM0LDczNCwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLDExMCwxMTAsMTEwLDExMCwxMTAsCisKKy8qIGJsb2NrIDE5MyAqLworMTEwLDExMCwxMTAsIDE5LCAxOSwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LDExMCwxMTAsMTEwLDExMCwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAxOTQgKi8KKzU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCwKKzU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCwKKzU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCwKKzU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCw1NjQsNTY0LDU2NCwKKzU2NCw1NjQsNzM1LDczNSw3MzUsNTY0LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMTk1ICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsCisgMjMsIDIzLDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDE5NiAqLworNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LAorNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LAorNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LAorNDM5LDQzOSw0MzksNDM5LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LAorNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzksNDM5LAorNDM5LDQzOSw0MzksNDM5LDQzOSwxMTUsNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LAorNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LAorNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LAorCisvKiBibG9jayAxOTcgKi8KKzQzOCw0MzgsNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSwKKzQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOCwxMTUsNDM4LDQzOCwKKzExNSwxMTUsNDM4LDExNSwxMTUsNDM4LDQzOCwxMTUsMTE1LDQzOCw0MzgsNDM4LDQzOCwxMTUsNDM4LDQzOCwKKzQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOSw0MzksNDM5LDQzOSwxMTUsNDM5LDExNSw0MzksNDM5LDQzOSwKKzQzOSw0MzksNDM5LDQzOSwxMTUsNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSwKKzQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCwKKzQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSwKKzQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSwKKworLyogYmxvY2sgMTk4ICovCis0MzksNDM5LDQzOSw0MzksNDM4LDQzOCwxMTUsNDM4LDQzOCw0MzgsNDM4LDExNSwxMTUsNDM4LDQzOCw0MzgsCis0MzgsNDM4LDQzOCw0MzgsNDM4LDExNSw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsMTE1LDQzOSw0MzksCis0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksCis0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOCw0MzgsMTE1LDQzOCw0MzgsNDM4LDQzOCwxMTUsCis0MzgsNDM4LDQzOCw0MzgsNDM4LDExNSw0MzgsMTE1LDExNSwxMTUsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsCis0MzgsMTE1LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksCis0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzgsNDM4LDQzOCw0MzgsCis0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsCisKKy8qIGJsb2NrIDE5OSAqLworNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LAorNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LAorNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LAorNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LAorNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LAorNDM5LDQzOSw0MzksNDM5LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LAorNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzksNDM5LAorNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LAorCisvKiBibG9jayAyMDAgKi8KKzQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCwKKzQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCwKKzQzOCw0MzgsNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSwKKzQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOCw0MzgsNDM4LDQzOCwKKzQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCwKKzQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSwKKzQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSwKKzQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCwKKworLyogYmxvY2sgMjAxICovCis0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksCis0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksCis0MzksNDM5LDQzOSw0MzksNDM5LDQzOSwxMTUsMTE1LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsCis0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsCis0MzgsICA4LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksCis0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LCAgOCw0MzksNDM5LDQzOSw0MzksCis0MzksNDM5LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsCis0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LCAgOCw0MzksNDM5LDQzOSw0MzksCisKKy8qIGJsb2NrIDIwMiAqLworNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LAorNDM5LDQzOSw0MzksNDM5LDQzOSwgIDgsNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM4LDQzOCw0MzgsNDM4LAorNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LAorNDM4LDQzOCw0MzgsNDM4LDQzOCwgIDgsNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LAorNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksICA4LAorNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LAorNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsICA4LAorNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LAorCisvKiBibG9jayAyMDMgKi8KKzQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LCAgOCw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSwKKzQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCwKKzQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LDQzOCw0MzgsNDM4LCAgOCw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSwKKzQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSwKKzQzOSw0MzksNDM5LCAgOCw0MzksNDM5LDQzOSw0MzksNDM5LDQzOSw0MzgsNDM5LDExNSwxMTUsIDEwLCAxMCwKKyAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKyAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwgMTAsIDEwLCAxMCwKKworLyogYmxvY2sgMjA0ICovCis3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsCis3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsCis3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsCis3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsCis3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsCis3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsCis3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsCis3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsCisKKy8qIGJsb2NrIDIwNSAqLworNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LAorNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LAorNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LAorNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNiw3MzYsNzM2LDczNiw3MzcsNzM3LDczNyw3MzcsNzM3LAorNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LAorNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LAorNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNiw3MzYsNzM2LAorNzM2LDczNiw3MzYsNzM2LDczNiw3MzcsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LDczNiw3MzYsNzM2LAorCisvKiBibG9jayAyMDYgKi8KKzczNiw3MzYsNzM2LDczNiw3MzcsNzM2LDczNiw3MzgsNzM4LDczOCw3MzgsNzM4LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsNzM3LDczNyw3MzcsNzM3LDczNywKKzExNSw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNyw3MzcsNzM3LDczNywKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMjA3ICovCis3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksCis3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksCis3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksCis3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksCis3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksCis3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksCis3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksCis3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksCisKKy8qIGJsb2NrIDIwOCAqLworNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LAorNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LAorNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LAorNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LDczOSw3MzksNzM5LAorNzM5LDczOSw3MzksNzM5LDczOSwxMTUsMTE1LDc0MCw3NDAsNzQwLDc0MCw3NDAsNzQwLDc0MCw3NDAsNzQwLAorNzQxLDc0MSw3NDEsNzQxLDc0MSw3NDEsNzQxLDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAyMDkgKi8KKzIwMCwyMDAsMjAwLDIwMCwxMTUsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKzIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKzExNSwyMDAsMjAwLDExNSwyMDAsMTE1LDExNSwyMDAsMTE1LDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwKKzIwMCwyMDAsMjAwLDExNSwyMDAsMjAwLDIwMCwyMDAsMTE1LDIwMCwxMTUsMjAwLDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMjAwLDExNSwxMTUsMTE1LDExNSwyMDAsMTE1LDIwMCwxMTUsMjAwLDExNSwyMDAsMjAwLDIwMCwKKzExNSwyMDAsMjAwLDExNSwyMDAsMTE1LDExNSwyMDAsMTE1LDIwMCwxMTUsMjAwLDExNSwyMDAsMTE1LDIwMCwKKzExNSwyMDAsMjAwLDExNSwyMDAsMTE1LDExNSwyMDAsMjAwLDIwMCwyMDAsMTE1LDIwMCwyMDAsMjAwLDIwMCwKKzIwMCwyMDAsMjAwLDExNSwyMDAsMjAwLDIwMCwyMDAsMTE1LDIwMCwyMDAsMjAwLDIwMCwxMTUsMjAwLDExNSwKKworLyogYmxvY2sgMjEwICovCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMTE1LDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwxMTUsMTE1LDExNSwxMTUsCisxMTUsMjAwLDIwMCwyMDAsMTE1LDIwMCwyMDAsMjAwLDIwMCwyMDAsMTE1LDIwMCwyMDAsMjAwLDIwMCwyMDAsCisyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwyMDAsMjAwLDIwMCwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxOTUsMTk1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDIxMSAqLworIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksMTE1LDExNSwxMTUsMTE1LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorCisvKiBibG9jayAyMTIgKi8KKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LDExNSwKKzExNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKzExNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKzExNSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMjEzICovCisgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsIDIzLCAyMywgMjMsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwxMTUsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisKKy8qIGJsb2NrIDIxNCAqLworIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsNzQyLDc0Miw3NDIsNzQyLDc0Miw3NDIsNzQyLDc0Miw3NDIsNzQyLAorNzQyLDc0Miw3NDIsNzQyLDc0Miw3NDIsNzQyLDc0Miw3NDIsNzQyLDc0Miw3NDIsNzQyLDc0Miw3NDIsNzQyLAorCisvKiBibG9jayAyMTUgKi8KKzc0MywgMTksIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksMTE1LDExNSwxMTUsMTE1LDExNSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKyAxOSwgMTksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMjE2ICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxNCwgMTQsIDE0LCAxNCwgMTQsCisKKy8qIGJsb2NrIDIxNyAqLworIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LDExNSwgMTksIDE5LCAxOSwgMTksIDE5LAorCisvKiBibG9jayAyMTggKi8KKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwxMTUsIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKworLyogYmxvY2sgMjE5ICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDIyMCAqLworIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAyMjEgKi8KKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwKKyAxOSwgMTksIDE5LCAxOSwgMTksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMjIyICovCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwxMTUsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksCisKKy8qIGJsb2NrIDIyMyAqLworIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LAorIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAyMjQgKi8KKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKyAxOSwgMTksIDE5LCAxOSwgMTksIDE5LCAxOSwgMTksIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMjI1ICovCisgMTksIDE5LCAxOSwgMTksIDE5LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisgMTksMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsCisKKy8qIGJsb2NrIDIyNiAqLworNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAyMjcgKi8KKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKworLyogYmxvY2sgMjI4ICovCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDExNSwxMTUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCis0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsCisKKy8qIGJsb2NrIDIyOSAqLworNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LAorNDg1LDQ4NSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LAorCisvKiBibG9jayAyMzAgKi8KKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSwKKzQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsNDg1LDQ4NSw0ODUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKzExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwxMTUsMTE1LDExNSwKKworLyogYmxvY2sgMjMxICovCis0MzcsIDIyLDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsCis0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsCisgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsCisgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsCisgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsCisgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsCisgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsCisgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsIDIyLCAyMiwgMjIsCisKKy8qIGJsb2NrIDIzMiAqLworNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LAorNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LAorNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LAorNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LAorNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LAorNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LAorNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LAorNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LAorCisvKiBibG9jayAyMzMgKi8KKzExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwKKzExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwKKzExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwKKzExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwKKzExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwKKzExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwKKzExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwKKzExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwKKworLyogYmxvY2sgMjM0ICovCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCisxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsMTEwLDExMCwxMTAsCis0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsNDM3LDQzNyw0MzcsCisKKy8qIGJsb2NrIDIzNSAqLworNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LAorNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LAorNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LAorNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LAorNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LAorNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LAorNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LAorNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1Nyw1NTcsNTU3LDU1NywxMTUsMTE1LAorCit9OworCisjaWYgVUNEX0JMT0NLX1NJWkUgIT0gMTI4CisjZXJyb3IgUGxlYXNlIGNvcnJlY3QgVUNEX0JMT0NLX1NJWkUgaW4gcGNyZTJfaW50ZXJuYWwuaAorI2VuZGlmCisjZW5kaWYgIC8qIFNVUFBPUlRfVU5JQ09ERSAqLworCisjZW5kaWYgIC8qIFBDUkUyX1BDUkUyVEVTVCAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX3VjcC5oIGIvZGlzdDIvc3JjL3BjcmUyX3VjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNzU1M2UKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJfdWNwLmgKQEAgLTAsMCArMSwyNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgUGVybC1Db21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUENSRSBpcyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBzeW50YXgKK2FuZCBzZW1hbnRpY3MgYXJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIG9mIHRoZSBQZXJsIDUgbGFuZ3VhZ2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBQaGlsaXAgSGF6ZWwKKyAgICAgT3JpZ2luYWwgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTIgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKyAgICAgICAgIE5ldyBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworCisjaWZuZGVmIF9QQ1JFMl9VQ1BfSAorI2RlZmluZSBfUENSRTJfVUNQX0gKKworLyogVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZXMgdGhhdCBhcmUgcmV0dXJuZWQgYnkKK3RoZSBVQ0QgYWNjZXNzIG1hY3Jvcy4gTmV3IHZhbHVlcyB0aGF0IGFyZSBhZGRlZCBmb3IgbmV3IHJlbGVhc2VzIG9mIFVuaWNvZGUKK3Nob3VsZCBhbHdheXMgYmUgYXQgdGhlIGVuZCBvZiBlYWNoIGVudW0sIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworSU1QT1JUQU5UOiBOb3RlIGFsc28gdGhhdCB0aGUgc3BlY2lmaWMgbnVtZXJpYyB2YWx1ZXMgb2YgdGhlIGVudW1zIGhhdmUgdG8gYmUKK3RoZSBzYW1lIGFzIHRoZSB2YWx1ZXMgdGhhdCBhcmUgZ2VuZXJhdGVkIGJ5IHRoZSBtYWludC9NdWx0aVN0YWdlMi5weSBzY3JpcHQsCit3aGVyZSB0aGUgZXF1aXZhbGVudCBwcm9wZXJ0eSBkZXNjcmlwdGl2ZSBuYW1lcyBhcmUgbGlzdGVkIGluIHZlY3RvcnMuCisKK0FMU086IFRoZSBzcGVjaWZpYyB2YWx1ZXMgb2YgdGhlIGZpcnN0IHR3byBlbnVtcyBhcmUgYXNzdW1lZCBmb3IgdGhlIHRhYmxlCitjYWxsZWQgY2F0cG9zc3RhYiBpbiBwY3JlMl9jb21waWxlLmMuICovCisKKy8qIFRoZXNlIGFyZSB0aGUgZ2VuZXJhbCBjaGFyYWN0ZXIgY2F0ZWdvcmllcy4gKi8KKworZW51bSB7CisgIHVjcF9DLCAgICAgLyogT3RoZXIgKi8KKyAgdWNwX0wsICAgICAvKiBMZXR0ZXIgKi8KKyAgdWNwX00sICAgICAvKiBNYXJrICovCisgIHVjcF9OLCAgICAgLyogTnVtYmVyICovCisgIHVjcF9QLCAgICAgLyogUHVuY3R1YXRpb24gKi8KKyAgdWNwX1MsICAgICAvKiBTeW1ib2wgKi8KKyAgdWNwX1ogICAgICAvKiBTZXBhcmF0b3IgKi8KK307CisKKy8qIFRoZXNlIGFyZSB0aGUgcGFydGljdWxhciBjaGFyYWN0ZXIgY2F0ZWdvcmllcy4gKi8KKworZW51bSB7CisgIHVjcF9DYywgICAgLyogQ29udHJvbCAqLworICB1Y3BfQ2YsICAgIC8qIEZvcm1hdCAqLworICB1Y3BfQ24sICAgIC8qIFVuYXNzaWduZWQgKi8KKyAgdWNwX0NvLCAgICAvKiBQcml2YXRlIHVzZSAqLworICB1Y3BfQ3MsICAgIC8qIFN1cnJvZ2F0ZSAqLworICB1Y3BfTGwsICAgIC8qIExvd2VyIGNhc2UgbGV0dGVyICovCisgIHVjcF9MbSwgICAgLyogTW9kaWZpZXIgbGV0dGVyICovCisgIHVjcF9MbywgICAgLyogT3RoZXIgbGV0dGVyICovCisgIHVjcF9MdCwgICAgLyogVGl0bGUgY2FzZSBsZXR0ZXIgKi8KKyAgdWNwX0x1LCAgICAvKiBVcHBlciBjYXNlIGxldHRlciAqLworICB1Y3BfTWMsICAgIC8qIFNwYWNpbmcgbWFyayAqLworICB1Y3BfTWUsICAgIC8qIEVuY2xvc2luZyBtYXJrICovCisgIHVjcF9NbiwgICAgLyogTm9uLXNwYWNpbmcgbWFyayAqLworICB1Y3BfTmQsICAgIC8qIERlY2ltYWwgbnVtYmVyICovCisgIHVjcF9ObCwgICAgLyogTGV0dGVyIG51bWJlciAqLworICB1Y3BfTm8sICAgIC8qIE90aGVyIG51bWJlciAqLworICB1Y3BfUGMsICAgIC8qIENvbm5lY3RvciBwdW5jdHVhdGlvbiAqLworICB1Y3BfUGQsICAgIC8qIERhc2ggcHVuY3R1YXRpb24gKi8KKyAgdWNwX1BlLCAgICAvKiBDbG9zZSBwdW5jdHVhdGlvbiAqLworICB1Y3BfUGYsICAgIC8qIEZpbmFsIHB1bmN0dWF0aW9uICovCisgIHVjcF9QaSwgICAgLyogSW5pdGlhbCBwdW5jdHVhdGlvbiAqLworICB1Y3BfUG8sICAgIC8qIE90aGVyIHB1bmN0dWF0aW9uICovCisgIHVjcF9QcywgICAgLyogT3BlbiBwdW5jdHVhdGlvbiAqLworICB1Y3BfU2MsICAgIC8qIEN1cnJlbmN5IHN5bWJvbCAqLworICB1Y3BfU2ssICAgIC8qIE1vZGlmaWVyIHN5bWJvbCAqLworICB1Y3BfU20sICAgIC8qIE1hdGhlbWF0aWNhbCBzeW1ib2wgKi8KKyAgdWNwX1NvLCAgICAvKiBPdGhlciBzeW1ib2wgKi8KKyAgdWNwX1psLCAgICAvKiBMaW5lIHNlcGFyYXRvciAqLworICB1Y3BfWnAsICAgIC8qIFBhcmFncmFwaCBzZXBhcmF0b3IgKi8KKyAgdWNwX1pzICAgICAvKiBTcGFjZSBzZXBhcmF0b3IgKi8KK307CisKKy8qIFRoZXNlIGFyZSBncmFwaGVtZSBicmVhayBwcm9wZXJ0aWVzLiBOb3RlIHRoYXQgdGhlIGNvZGUgZm9yIHByb2Nlc3NpbmcgdGhlbQorYXNzdW1lcyB0aGF0IHRoZSB2YWx1ZXMgYXJlIGxlc3MgdGhhbiAxNi4gSWYgbW9yZSB2YWx1ZXMgYXJlIGFkZGVkIHRoYXQgdGFrZQordGhlIG51bWJlciB0byAxNiBvciBtb3JlLCB0aGUgY29kZSB3aWxsIGhhdmUgdG8gYmUgcmV3cml0dGVuLiAqLworCitlbnVtIHsKKyAgdWNwX2diQ1IsICAgICAgICAgICAgICAgIC8qICAwICovCisgIHVjcF9nYkxGLCAgICAgICAgICAgICAgICAvKiAgMSAqLworICB1Y3BfZ2JDb250cm9sLCAgICAgICAgICAgLyogIDIgKi8KKyAgdWNwX2diRXh0ZW5kLCAgICAgICAgICAgIC8qICAzICovCisgIHVjcF9nYlByZXBlbmQsICAgICAgICAgICAvKiAgNCAqLworICB1Y3BfZ2JTcGFjaW5nTWFyaywgICAgICAgLyogIDUgKi8KKyAgdWNwX2diTCwgICAgICAgICAgICAgICAgIC8qICA2IEhhbmd1bCBzeWxsYWJsZSB0eXBlIEwgKi8KKyAgdWNwX2diViwgICAgICAgICAgICAgICAgIC8qICA3IEhhbmd1bCBzeWxsYWJsZSB0eXBlIFYgKi8KKyAgdWNwX2diVCwgICAgICAgICAgICAgICAgIC8qICA4IEhhbmd1bCBzeWxsYWJsZSB0eXBlIFQgKi8KKyAgdWNwX2diTFYsICAgICAgICAgICAgICAgIC8qICA5IEhhbmd1bCBzeWxsYWJsZSB0eXBlIExWICovCisgIHVjcF9nYkxWVCwgICAgICAgICAgICAgICAvKiAxMCBIYW5ndWwgc3lsbGFibGUgdHlwZSBMVlQgKi8KKyAgdWNwX2diUmVnaW9uYWxJbmRpY2F0b3IsIC8qIDExICovCisgIHVjcF9nYk90aGVyICAgICAgICAgICAgICAvKiAxMiAqLworfTsKKworLyogVGhlc2UgYXJlIHRoZSBzY3JpcHQgaWRlbnRpZmljYXRpb25zLiAqLworCitlbnVtIHsKKyAgdWNwX0FyYWJpYywKKyAgdWNwX0FybWVuaWFuLAorICB1Y3BfQmVuZ2FsaSwKKyAgdWNwX0JvcG9tb2ZvLAorICB1Y3BfQnJhaWxsZSwKKyAgdWNwX0J1Z2luZXNlLAorICB1Y3BfQnVoaWQsCisgIHVjcF9DYW5hZGlhbl9BYm9yaWdpbmFsLAorICB1Y3BfQ2hlcm9rZWUsCisgIHVjcF9Db21tb24sCisgIHVjcF9Db3B0aWMsCisgIHVjcF9DeXByaW90LAorICB1Y3BfQ3lyaWxsaWMsCisgIHVjcF9EZXNlcmV0LAorICB1Y3BfRGV2YW5hZ2FyaSwKKyAgdWNwX0V0aGlvcGljLAorICB1Y3BfR2VvcmdpYW4sCisgIHVjcF9HbGFnb2xpdGljLAorICB1Y3BfR290aGljLAorICB1Y3BfR3JlZWssCisgIHVjcF9HdWphcmF0aSwKKyAgdWNwX0d1cm11a2hpLAorICB1Y3BfSGFuLAorICB1Y3BfSGFuZ3VsLAorICB1Y3BfSGFudW5vbywKKyAgdWNwX0hlYnJldywKKyAgdWNwX0hpcmFnYW5hLAorICB1Y3BfSW5oZXJpdGVkLAorICB1Y3BfS2FubmFkYSwKKyAgdWNwX0thdGFrYW5hLAorICB1Y3BfS2hhcm9zaHRoaSwKKyAgdWNwX0tobWVyLAorICB1Y3BfTGFvLAorICB1Y3BfTGF0aW4sCisgIHVjcF9MaW1idSwKKyAgdWNwX0xpbmVhcl9CLAorICB1Y3BfTWFsYXlhbGFtLAorICB1Y3BfTW9uZ29saWFuLAorICB1Y3BfTXlhbm1hciwKKyAgdWNwX05ld19UYWlfTHVlLAorICB1Y3BfT2doYW0sCisgIHVjcF9PbGRfSXRhbGljLAorICB1Y3BfT2xkX1BlcnNpYW4sCisgIHVjcF9Pcml5YSwKKyAgdWNwX09zbWFueWEsCisgIHVjcF9SdW5pYywKKyAgdWNwX1NoYXZpYW4sCisgIHVjcF9TaW5oYWxhLAorICB1Y3BfU3lsb3RpX05hZ3JpLAorICB1Y3BfU3lyaWFjLAorICB1Y3BfVGFnYWxvZywKKyAgdWNwX1RhZ2JhbndhLAorICB1Y3BfVGFpX0xlLAorICB1Y3BfVGFtaWwsCisgIHVjcF9UZWx1Z3UsCisgIHVjcF9UaGFhbmEsCisgIHVjcF9UaGFpLAorICB1Y3BfVGliZXRhbiwKKyAgdWNwX1RpZmluYWdoLAorICB1Y3BfVWdhcml0aWMsCisgIHVjcF9ZaSwKKyAgLyogTmV3IGZvciBVbmljb2RlIDUuMDogKi8KKyAgdWNwX0JhbGluZXNlLAorICB1Y3BfQ3VuZWlmb3JtLAorICB1Y3BfTmtvLAorICB1Y3BfUGhhZ3NfUGEsCisgIHVjcF9QaG9lbmljaWFuLAorICAvKiBOZXcgZm9yIFVuaWNvZGUgNS4xOiAqLworICB1Y3BfQ2FyaWFuLAorICB1Y3BfQ2hhbSwKKyAgdWNwX0theWFoX0xpLAorICB1Y3BfTGVwY2hhLAorICB1Y3BfTHljaWFuLAorICB1Y3BfTHlkaWFuLAorICB1Y3BfT2xfQ2hpa2ksCisgIHVjcF9SZWphbmcsCisgIHVjcF9TYXVyYXNodHJhLAorICB1Y3BfU3VuZGFuZXNlLAorICB1Y3BfVmFpLAorICAvKiBOZXcgZm9yIFVuaWNvZGUgNS4yOiAqLworICB1Y3BfQXZlc3RhbiwKKyAgdWNwX0JhbXVtLAorICB1Y3BfRWd5cHRpYW5fSGllcm9nbHlwaHMsCisgIHVjcF9JbXBlcmlhbF9BcmFtYWljLAorICB1Y3BfSW5zY3JpcHRpb25hbF9QYWhsYXZpLAorICB1Y3BfSW5zY3JpcHRpb25hbF9QYXJ0aGlhbiwKKyAgdWNwX0phdmFuZXNlLAorICB1Y3BfS2FpdGhpLAorICB1Y3BfTGlzdSwKKyAgdWNwX01lZXRlaV9NYXllaywKKyAgdWNwX09sZF9Tb3V0aF9BcmFiaWFuLAorICB1Y3BfT2xkX1R1cmtpYywKKyAgdWNwX1NhbWFyaXRhbiwKKyAgdWNwX1RhaV9UaGFtLAorICB1Y3BfVGFpX1ZpZXQsCisgIC8qIE5ldyBmb3IgVW5pY29kZSA2LjAuMDogKi8KKyAgdWNwX0JhdGFrLAorICB1Y3BfQnJhaG1pLAorICB1Y3BfTWFuZGFpYywKKyAgLyogTmV3IGZvciBVbmljb2RlIDYuMS4wOiAqLworICB1Y3BfQ2hha21hLAorICB1Y3BfTWVyb2l0aWNfQ3Vyc2l2ZSwKKyAgdWNwX01lcm9pdGljX0hpZXJvZ2x5cGhzLAorICB1Y3BfTWlhbywKKyAgdWNwX1NoYXJhZGEsCisgIHVjcF9Tb3JhX1NvbXBlbmcsCisgIHVjcF9UYWtyaSwKKyAgLyogTmV3IGZvciBVbmljb2RlIDcuMC4wOiAqLworICB1Y3BfQmFzc2FfVmFoLAorICB1Y3BfQ2F1Y2FzaWFuX0FsYmFuaWFuLAorICB1Y3BfRHVwbG95YW4sCisgIHVjcF9FbGJhc2FuLAorICB1Y3BfR3JhbnRoYSwKKyAgdWNwX0tob2praSwKKyAgdWNwX0todWRhd2FkaSwKKyAgdWNwX0xpbmVhcl9BLAorICB1Y3BfTWFoYWphbmksCisgIHVjcF9NYW5pY2hhZWFuLAorICB1Y3BfTWVuZGVfS2lrYWt1aSwKKyAgdWNwX01vZGksCisgIHVjcF9Ncm8sCisgIHVjcF9OYWJhdGFlYW4sCisgIHVjcF9PbGRfTm9ydGhfQXJhYmlhbiwKKyAgdWNwX09sZF9QZXJtaWMsCisgIHVjcF9QYWhhd2hfSG1vbmcsCisgIHVjcF9QYWxteXJlbmUsCisgIHVjcF9Qc2FsdGVyX1BhaGxhdmksCisgIHVjcF9QYXVfQ2luX0hhdSwKKyAgdWNwX1NpZGRoYW0sCisgIHVjcF9UaXJodXRhLAorICB1Y3BfV2FyYW5nX0NpdGksCisgIC8qIE5ldyBmb3IgVW5pY29kZSA4LjAuMDogKi8KKyAgdWNwX0Fob20sCisgIHVjcF9BbmF0b2xpYW5fSGllcm9nbHlwaHMsCisgIHVjcF9IYXRyYW4sCisgIHVjcF9NdWx0YW5pLAorICB1Y3BfT2xkX0h1bmdhcmlhbiwKKyAgdWNwX1NpZ25Xcml0aW5nCit9OworCisjZW5kaWYKKworLyogRW5kIG9mIHBjcmUyX3VjcC5oICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJfdmFsaWRfdXRmLmMgYi9kaXN0Mi9zcmMvcGNyZTJfdmFsaWRfdXRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRmZDhkZgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMl92YWxpZF91dGYuYwpAQCAtMCwwICsxLDM5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICBQZXJsLUNvbXBhdGlibGUgUmVndWxhciBFeHByZXNzaW9ucyAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBQQ1JFIGlzIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHN5bnRheAorYW5kIHNlbWFudGljcyBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2Ugb2YgdGhlIFBlcmwgNSBsYW5ndWFnZS4KKworICAgICAgICAgICAgICAgICAgICAgICBXcml0dGVuIGJ5IFBoaWxpcCBIYXplbAorICAgICBPcmlnaW5hbCBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDE5OTctMjAxMiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorICAgICAgICAgTmV3IEFQSSBjb2RlIENvcHlyaWdodCAoYykgMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisKKy8qIFRoaXMgbW9kdWxlIGNvbnRhaW5zIGFuIGludGVybmFsIGZ1bmN0aW9uIGZvciB2YWxpZGF0aW5nIFVURiBjaGFyYWN0ZXIKK3N0cmluZ3MuIFRoaXMgZmlsZSBpcyBhbHNvICNpbmNsdWRlZCBieSB0aGUgcGNyZTJ0ZXN0IHByb2dyYW0sIHdoaWNoIHVzZXMKK21hY3JvcyB0byBjaGFuZ2UgbmFtZXMgZnJvbSBfcGNyZTJfeHh4IHRvIHh4eHgsIHRoZXJlYnkgYXZvaWRpbmcgbmFtZSBjbGFzaGVzCit3aXRoIHRoZSBsaWJyYXJ5LiBJbiB0aGlzIGNhc2UsIFBDUkUyX1BDUkUyVEVTVCBpcyBkZWZpbmVkLiAqLworCisjaWZuZGVmIFBDUkUyX1BDUkUyVEVTVCAgICAgICAgICAgLyogV2UncmUgY29tcGlsaW5nIHRoZSBsaWJyYXJ5ICovCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKyNlbmRpZiAvKiBQQ1JFMl9QQ1JFMlRFU1QgKi8KKworCisjaWZuZGVmIFNVUFBPUlRfVU5JQ09ERQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIER1bW15IGZ1bmN0aW9uIHdoZW4gVW5pY29kZSBpcyBub3Qgc3VwcG9ydGVkICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hlbiBVbmljb2RlIGlzIG5vdCBzdXBwb3J0ZWQuICovCisKK2ludAorUFJJVih2YWxpZF91dGYpKFBDUkUyX1NQVFIgc3RyaW5nLCBQQ1JFMl9TSVpFIGxlbmd0aCwgUENSRTJfU0laRSAqZXJyb3JvZmZzZXQpCit7Cisodm9pZClzdHJpbmc7Cisodm9pZClsZW5ndGg7Cisodm9pZCllcnJvcm9mZnNldDsKK3JldHVybiAwOworfQorI2Vsc2UgIC8qIFVURiBpcyBzdXBwb3J0ZWQgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICBWYWxpZGF0ZSBhIFVURiBzdHJpbmcgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgKG9wdGlvbmFsbHkpIGF0IHRoZSBzdGFydCBvZiBjb21waWxlIG9yIG1hdGNoLCB0bworY2hlY2sgdGhhdCBhIHN1cHBvc2VkIFVURiBzdHJpbmcgaXMgYWN0dWFsbHkgdmFsaWQuIFRoZSBlYXJseSBjaGVjayBtZWFucwordGhhdCBzdWJzZXF1ZW50IGNvZGUgY2FuIGFzc3VtZSBpdCBpcyBkZWFsaW5nIHdpdGggYSB2YWxpZCBzdHJpbmcuIFRoZSBjaGVjaworY2FuIGJlIHR1cm5lZCBvZmYgZm9yIG1heGltdW0gcGVyZm9ybWFuY2UsIGJ1dCB0aGUgY29uc2VxdWVuY2VzIG9mIHN1cHBseWluZyBhbgoraW52YWxpZCBzdHJpbmcgYXJlIHRoZW4gdW5kZWZpbmVkLgorCitBcmd1bWVudHM6CisgIHN0cmluZyAgICAgICBwb2ludHMgdG8gdGhlIHN0cmluZworICBsZW5ndGggICAgICAgbGVuZ3RoIG9mIHN0cmluZworICBlcnJwICAgICAgICAgcG9pbnRlciB0byBhbiBlcnJvciBwb3NpdGlvbiBvZmZzZXQgdmFyaWFibGUKKworUmV0dXJuczogICAgICAgPT0gMCAgICBpZiB0aGUgc3RyaW5nIGlzIGEgdmFsaWQgVVRGIHN0cmluZworICAgICAgICAgICAgICAgIT0gMCAgICBvdGhlcndpc2UsIHNldHRpbmcgdGhlIG9mZnNldCBvZiB0aGUgYmFkIGNoYXJhY3RlcgorKi8KKworaW50CitQUklWKHZhbGlkX3V0ZikoUENSRTJfU1BUUiBzdHJpbmcsIFBDUkUyX1NJWkUgbGVuZ3RoLCBQQ1JFMl9TSVpFICplcnJvcm9mZnNldCkKK3sKK3JlZ2lzdGVyIFBDUkUyX1NQVFIgcDsKK3JlZ2lzdGVyIHVpbnQzMl90IGM7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tIENoZWNrIGEgVVRGLTggc3RyaW5nIC0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorCisvKiBPcmlnaW5hbGx5LCB0aGlzIGZ1bmN0aW9uIGNoZWNrZWQgYWNjb3JkaW5nIHRvIFJGQyAyMjc5LCBhbGxvd2luZyBmb3IgdmFsdWVzCitpbiB0aGUgcmFuZ2UgMCB0byAweDdmZmZmZmZmLCB1cCB0byA2IGJ5dGVzIGxvbmcsIGJ1dCBlbnN1cmluZyB0aGF0IHRoZXkgd2VyZQoraW4gdGhlIGNhbm9uaWNhbCBmb3JtYXQuIE9uY2Ugc29tZWJvZHkgaGFkIHBvaW50ZWQgb3V0IFJGQyAzNjI5IHRvIG1lIChpdAorb2Jzb2xldGVzIDIyNzkpLCBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyB3ZXJlIGFwcGxpZWQuIFRoZSB2YWx1ZXMgYXJlIG5vdworbGltaXRlZCB0byBiZSBiZXR3ZWVuIDAgYW5kIDB4MDAxMGZmZmYsIG5vIG1vcmUgdGhhbiA0IGJ5dGVzIGxvbmcsIGFuZCB0aGUKK3N1YnJhbmdlIDB4ZDAwMCB0byAweGRmZmYgaXMgZXhjbHVkZWQuIEhvd2V2ZXIsIHRoZSBmb3JtYXQgb2YgNS1ieXRlIGFuZCA2LWJ5dGUKK2NoYXJhY3RlcnMgaXMgc3RpbGwgY2hlY2tlZC4gRXJyb3IgcmV0dXJucyBhcmUgYXMgZm9sbG93czoKKworUENSRTJfRVJST1JfVVRGOF9FUlIxICAgTWlzc2luZyAxIGJ5dGUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCitQQ1JFMl9FUlJPUl9VVEY4X0VSUjIgICBNaXNzaW5nIDIgYnl0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCitQQ1JFMl9FUlJPUl9VVEY4X0VSUjMgICBNaXNzaW5nIDMgYnl0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCitQQ1JFMl9FUlJPUl9VVEY4X0VSUjQgICBNaXNzaW5nIDQgYnl0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCitQQ1JFMl9FUlJPUl9VVEY4X0VSUjUgICBNaXNzaW5nIDUgYnl0ZXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCitQQ1JFMl9FUlJPUl9VVEY4X0VSUjYgICAybmQtYnl0ZSdzIHR3byB0b3AgYml0cyBhcmUgbm90IDB4ODAKK1BDUkUyX0VSUk9SX1VURjhfRVJSNyAgIDNyZC1ieXRlJ3MgdHdvIHRvcCBiaXRzIGFyZSBub3QgMHg4MAorUENSRTJfRVJST1JfVVRGOF9FUlI4ICAgNHRoLWJ5dGUncyB0d28gdG9wIGJpdHMgYXJlIG5vdCAweDgwCitQQ1JFMl9FUlJPUl9VVEY4X0VSUjkgICA1dGgtYnl0ZSdzIHR3byB0b3AgYml0cyBhcmUgbm90IDB4ODAKK1BDUkUyX0VSUk9SX1VURjhfRVJSMTAgIDZ0aC1ieXRlJ3MgdHdvIHRvcCBiaXRzIGFyZSBub3QgMHg4MAorUENSRTJfRVJST1JfVVRGOF9FUlIxMSAgNS1ieXRlIGNoYXJhY3RlciBpcyBub3QgcGVybWl0dGVkIGJ5IFJGQyAzNjI5CitQQ1JFMl9FUlJPUl9VVEY4X0VSUjEyICA2LWJ5dGUgY2hhcmFjdGVyIGlzIG5vdCBwZXJtaXR0ZWQgYnkgUkZDIDM2MjkKK1BDUkUyX0VSUk9SX1VURjhfRVJSMTMgIDQtYnl0ZSBjaGFyYWN0ZXIgd2l0aCB2YWx1ZSA+IDB4MTBmZmZmIGlzIG5vdCBwZXJtaXR0ZWQKK1BDUkUyX0VSUk9SX1VURjhfRVJSMTQgIDMtYnl0ZSBjaGFyYWN0ZXIgd2l0aCB2YWx1ZSAweGQ4MDAtMHhkZmZmIGlzIG5vdCBwZXJtaXR0ZWQKK1BDUkUyX0VSUk9SX1VURjhfRVJSMTUgIE92ZXJsb25nIDItYnl0ZSBzZXF1ZW5jZQorUENSRTJfRVJST1JfVVRGOF9FUlIxNiAgT3ZlcmxvbmcgMy1ieXRlIHNlcXVlbmNlCitQQ1JFMl9FUlJPUl9VVEY4X0VSUjE3ICBPdmVybG9uZyA0LWJ5dGUgc2VxdWVuY2UKK1BDUkUyX0VSUk9SX1VURjhfRVJSMTggIE92ZXJsb25nIDUtYnl0ZSBzZXF1ZW5jZSAod29uJ3QgZXZlciBvY2N1cikKK1BDUkUyX0VSUk9SX1VURjhfRVJSMTkgIE92ZXJsb25nIDYtYnl0ZSBzZXF1ZW5jZSAod29uJ3QgZXZlciBvY2N1cikKK1BDUkUyX0VSUk9SX1VURjhfRVJSMjAgIElzb2xhdGVkIDB4ODAgYnl0ZSAobm90IHdpdGhpbiBVVEYtOCBjaGFyYWN0ZXIpCitQQ1JFMl9FUlJPUl9VVEY4X0VSUjIxICBCeXRlIHdpdGggdGhlIGlsbGVnYWwgdmFsdWUgMHhmZSBvciAweGZmCisqLworCitmb3IgKHAgPSBzdHJpbmc7IGxlbmd0aCA+IDA7IHArKykKKyAgeworICByZWdpc3RlciB1aW50MzJfdCBhYiwgZDsKKworICBjID0gKnA7CisgIGxlbmd0aC0tOworCisgIGlmIChjIDwgMTI4KSBjb250aW51ZTsgICAgICAgICAgICAgICAgLyogQVNDSUkgY2hhcmFjdGVyICovCisKKyAgaWYgKGMgPCAweGMwKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJc29sYXRlZCAxMHh4IHh4eHggYnl0ZSAqLworICAgIHsKKyAgICAqZXJyb3JvZmZzZXQgPSAoaW50KShwIC0gc3RyaW5nKTsKKyAgICByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlIyMDsKKyAgICB9CisKKyAgaWYgKGMgPj0gMHhmZSkgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnZhbGlkIDB4ZmUgb3IgMHhmZiBieXRlcyAqLworICAgIHsKKyAgICAqZXJyb3JvZmZzZXQgPSAoaW50KShwIC0gc3RyaW5nKTsKKyAgICByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlIyMTsKKyAgICB9CisKKyAgYWIgPSBQUklWKHV0ZjhfdGFibGU0KVtjICYgMHgzZl07ICAgICAvKiBOdW1iZXIgb2YgYWRkaXRpb25hbCBieXRlcyAoMS01KSAqLworICBpZiAobGVuZ3RoIDwgYWIpICAgICAgICAgICAgICAgICAgICAgIC8qIE1pc3NpbmcgYnl0ZXMgKi8KKyAgICB7CisgICAgKmVycm9yb2Zmc2V0ID0gKGludCkocCAtIHN0cmluZyk7CisgICAgc3dpdGNoKGFiIC0gbGVuZ3RoKQorICAgICAgeworICAgICAgY2FzZSAxOiByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlIxOworICAgICAgY2FzZSAyOiByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlIyOworICAgICAgY2FzZSAzOiByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlIzOworICAgICAgY2FzZSA0OiByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlI0OworICAgICAgY2FzZSA1OiByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlI1OworICAgICAgfQorICAgIH0KKyAgbGVuZ3RoIC09IGFiOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMZW5ndGggcmVtYWluaW5nICovCisKKyAgLyogQ2hlY2sgdG9wIGJpdHMgaW4gdGhlIHNlY29uZCBieXRlICovCisKKyAgaWYgKCgoZCA9ICooKytwKSkgJiAweGMwKSAhPSAweDgwKQorICAgIHsKKyAgICAqZXJyb3JvZmZzZXQgPSAoaW50KShwIC0gc3RyaW5nKSAtIDE7CisgICAgcmV0dXJuIFBDUkUyX0VSUk9SX1VURjhfRVJSNjsKKyAgICB9CisKKyAgLyogRm9yIGVhY2ggbGVuZ3RoLCBjaGVjayB0aGF0IHRoZSByZW1haW5pbmcgYnl0ZXMgc3RhcnQgd2l0aCB0aGUgMHg4MCBiaXQKKyAgc2V0IGFuZCBub3QgdGhlIDB4NDAgYml0LiBUaGVuIGNoZWNrIGZvciBhbiBvdmVybG9uZyBzZXF1ZW5jZSwgYW5kIGZvciB0aGUKKyAgZXhjbHVkZWQgcmFuZ2UgMHhkODAwIHRvIDB4ZGZmZi4gKi8KKworICBzd2l0Y2ggKGFiKQorICAgIHsKKyAgICAvKiAyLWJ5dGUgY2hhcmFjdGVyLiBObyBmdXJ0aGVyIGJ5dGVzIHRvIGNoZWNrIGZvciAweDgwLiBDaGVjayBmaXJzdCBieXRlCisgICAgZm9yIGZvciB4eDAwIDAwMHggKG92ZXJsb25nIHNlcXVlbmNlKS4gKi8KKworICAgIGNhc2UgMTogaWYgKChjICYgMHgzZSkgPT0gMCkKKyAgICAgIHsKKyAgICAgICplcnJvcm9mZnNldCA9IChpbnQpKHAgLSBzdHJpbmcpIC0gMTsKKyAgICAgIHJldHVybiBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE1OworICAgICAgfQorICAgIGJyZWFrOworCisgICAgLyogMy1ieXRlIGNoYXJhY3Rlci4gQ2hlY2sgdGhpcmQgYnl0ZSBmb3IgMHg4MC4gVGhlbiBjaGVjayBmaXJzdCAyIGJ5dGVzCisgICAgICBmb3IgMTExMCAwMDAwLCB4eDB4IHh4eHggKG92ZXJsb25nIHNlcXVlbmNlKSBvcgorICAgICAgICAgIDExMTAgMTEwMSwgMTAxMCB4eHh4ICgweGQ4MDAgLSAweGRmZmYpICovCisKKyAgICBjYXNlIDI6CisgICAgaWYgKCgqKCsrcCkgJiAweGMwKSAhPSAweDgwKSAgICAgLyogVGhpcmQgYnl0ZSAqLworICAgICAgeworICAgICAgKmVycm9yb2Zmc2V0ID0gKGludCkocCAtIHN0cmluZykgLSAyOworICAgICAgcmV0dXJuIFBDUkUyX0VSUk9SX1VURjhfRVJSNzsKKyAgICAgIH0KKyAgICBpZiAoYyA9PSAweGUwICYmIChkICYgMHgyMCkgPT0gMCkKKyAgICAgIHsKKyAgICAgICplcnJvcm9mZnNldCA9IChpbnQpKHAgLSBzdHJpbmcpIC0gMjsKKyAgICAgIHJldHVybiBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE2OworICAgICAgfQorICAgIGlmIChjID09IDB4ZWQgJiYgZCA+PSAweGEwKQorICAgICAgeworICAgICAgKmVycm9yb2Zmc2V0ID0gKGludCkocCAtIHN0cmluZykgLSAyOworICAgICAgcmV0dXJuIFBDUkUyX0VSUk9SX1VURjhfRVJSMTQ7CisgICAgICB9CisgICAgYnJlYWs7CisKKyAgICAvKiA0LWJ5dGUgY2hhcmFjdGVyLiBDaGVjayAzcmQgYW5kIDR0aCBieXRlcyBmb3IgMHg4MC4gVGhlbiBjaGVjayBmaXJzdCAyCisgICAgICAgYnl0ZXMgZm9yIGZvciAxMTExIDAwMDAsIHh4MDAgeHh4eCAob3Zlcmxvbmcgc2VxdWVuY2UpLCB0aGVuIGNoZWNrIGZvciBhCisgICAgICAgY2hhcmFjdGVyIGdyZWF0ZXIgdGhhbiAweDAwMTBmZmZmIChmNCA4ZiBiZiBiZikgKi8KKworICAgIGNhc2UgMzoKKyAgICBpZiAoKCooKytwKSAmIDB4YzApICE9IDB4ODApICAgICAvKiBUaGlyZCBieXRlICovCisgICAgICB7CisgICAgICAqZXJyb3JvZmZzZXQgPSAoaW50KShwIC0gc3RyaW5nKSAtIDI7CisgICAgICByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlI3OworICAgICAgfQorICAgIGlmICgoKigrK3ApICYgMHhjMCkgIT0gMHg4MCkgICAgIC8qIEZvdXJ0aCBieXRlICovCisgICAgICB7CisgICAgICAqZXJyb3JvZmZzZXQgPSAoaW50KShwIC0gc3RyaW5nKSAtIDM7CisgICAgICByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlI4OworICAgICAgfQorICAgIGlmIChjID09IDB4ZjAgJiYgKGQgJiAweDMwKSA9PSAwKQorICAgICAgeworICAgICAgKmVycm9yb2Zmc2V0ID0gKGludCkocCAtIHN0cmluZykgLSAzOworICAgICAgcmV0dXJuIFBDUkUyX0VSUk9SX1VURjhfRVJSMTc7CisgICAgICB9CisgICAgaWYgKGMgPiAweGY0IHx8IChjID09IDB4ZjQgJiYgZCA+IDB4OGYpKQorICAgICAgeworICAgICAgKmVycm9yb2Zmc2V0ID0gKGludCkocCAtIHN0cmluZykgLSAzOworICAgICAgcmV0dXJuIFBDUkUyX0VSUk9SX1VURjhfRVJSMTM7CisgICAgICB9CisgICAgYnJlYWs7CisKKyAgICAvKiA1LWJ5dGUgYW5kIDYtYnl0ZSBjaGFyYWN0ZXJzIGFyZSBub3QgYWxsb3dlZCBieSBSRkMgMzYyOSwgYW5kIHdpbGwgYmUKKyAgICByZWplY3RlZCBieSB0aGUgbGVuZ3RoIHRlc3QgYmVsb3cuIEhvd2V2ZXIsIHdlIGRvIHRoZSBhcHByb3ByaWF0ZSB0ZXN0cworICAgIGhlcmUgc28gdGhhdCBvdmVybG9uZyBzZXF1ZW5jZXMgZ2V0IGRpYWdub3NlZCwgYW5kIGFsc28gaW4gY2FzZSB0aGVyZSBpcworICAgIGV2ZXIgYW4gb3B0aW9uIGZvciBoYW5kbGluZyB0aGVzZSBsYXJnZXIgY29kZSBwb2ludHMuICovCisKKyAgICAvKiA1LWJ5dGUgY2hhcmFjdGVyLiBDaGVjayAzcmQsIDR0aCwgYW5kIDV0aCBieXRlcyBmb3IgMHg4MC4gVGhlbiBjaGVjayBmb3IKKyAgICAxMTExIDEwMDAsIHh4MDAgMHh4eCAqLworCisgICAgY2FzZSA0OgorICAgIGlmICgoKigrK3ApICYgMHhjMCkgIT0gMHg4MCkgICAgIC8qIFRoaXJkIGJ5dGUgKi8KKyAgICAgIHsKKyAgICAgICplcnJvcm9mZnNldCA9IChpbnQpKHAgLSBzdHJpbmcpIC0gMjsKKyAgICAgIHJldHVybiBQQ1JFMl9FUlJPUl9VVEY4X0VSUjc7CisgICAgICB9CisgICAgaWYgKCgqKCsrcCkgJiAweGMwKSAhPSAweDgwKSAgICAgLyogRm91cnRoIGJ5dGUgKi8KKyAgICAgIHsKKyAgICAgICplcnJvcm9mZnNldCA9IChpbnQpKHAgLSBzdHJpbmcpIC0gMzsKKyAgICAgIHJldHVybiBQQ1JFMl9FUlJPUl9VVEY4X0VSUjg7CisgICAgICB9CisgICAgaWYgKCgqKCsrcCkgJiAweGMwKSAhPSAweDgwKSAgICAgLyogRmlmdGggYnl0ZSAqLworICAgICAgeworICAgICAgKmVycm9yb2Zmc2V0ID0gKGludCkocCAtIHN0cmluZykgLSA0OworICAgICAgcmV0dXJuIFBDUkUyX0VSUk9SX1VURjhfRVJSOTsKKyAgICAgIH0KKyAgICBpZiAoYyA9PSAweGY4ICYmIChkICYgMHgzOCkgPT0gMCkKKyAgICAgIHsKKyAgICAgICplcnJvcm9mZnNldCA9IChpbnQpKHAgLSBzdHJpbmcpIC0gNDsKKyAgICAgIHJldHVybiBQQ1JFMl9FUlJPUl9VVEY4X0VSUjE4OworICAgICAgfQorICAgIGJyZWFrOworCisgICAgLyogNi1ieXRlIGNoYXJhY3Rlci4gQ2hlY2sgM3JkLTZ0aCBieXRlcyBmb3IgMHg4MC4gVGhlbiBjaGVjayBmb3IKKyAgICAxMTExIDExMDAsIHh4MDAgMDB4eC4gKi8KKworICAgIGNhc2UgNToKKyAgICBpZiAoKCooKytwKSAmIDB4YzApICE9IDB4ODApICAgICAvKiBUaGlyZCBieXRlICovCisgICAgICB7CisgICAgICAqZXJyb3JvZmZzZXQgPSAoaW50KShwIC0gc3RyaW5nKSAtIDI7CisgICAgICByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlI3OworICAgICAgfQorICAgIGlmICgoKigrK3ApICYgMHhjMCkgIT0gMHg4MCkgICAgIC8qIEZvdXJ0aCBieXRlICovCisgICAgICB7CisgICAgICAqZXJyb3JvZmZzZXQgPSAoaW50KShwIC0gc3RyaW5nKSAtIDM7CisgICAgICByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlI4OworICAgICAgfQorICAgIGlmICgoKigrK3ApICYgMHhjMCkgIT0gMHg4MCkgICAgIC8qIEZpZnRoIGJ5dGUgKi8KKyAgICAgIHsKKyAgICAgICplcnJvcm9mZnNldCA9IChpbnQpKHAgLSBzdHJpbmcpIC0gNDsKKyAgICAgIHJldHVybiBQQ1JFMl9FUlJPUl9VVEY4X0VSUjk7CisgICAgICB9CisgICAgaWYgKCgqKCsrcCkgJiAweGMwKSAhPSAweDgwKSAgICAgLyogU2l4dGggYnl0ZSAqLworICAgICAgeworICAgICAgKmVycm9yb2Zmc2V0ID0gKGludCkocCAtIHN0cmluZykgLSA1OworICAgICAgcmV0dXJuIFBDUkUyX0VSUk9SX1VURjhfRVJSMTA7CisgICAgICB9CisgICAgaWYgKGMgPT0gMHhmYyAmJiAoZCAmIDB4M2MpID09IDApCisgICAgICB7CisgICAgICAqZXJyb3JvZmZzZXQgPSAoaW50KShwIC0gc3RyaW5nKSAtIDU7CisgICAgICByZXR1cm4gUENSRTJfRVJST1JfVVRGOF9FUlIxOTsKKyAgICAgIH0KKyAgICBicmVhazsKKyAgICB9CisKKyAgLyogQ2hhcmFjdGVyIGlzIHZhbGlkIHVuZGVyIFJGQyAyMjc5LCBidXQgNC1ieXRlIGFuZCA1LWJ5dGUgY2hhcmFjdGVycyBhcmUKKyAgZXhjbHVkZWQgYnkgUkZDIDM2MjkuIFRoZSBwb2ludGVyIHAgaXMgY3VycmVudGx5IGF0IHRoZSBsYXN0IGJ5dGUgb2YgdGhlCisgIGNoYXJhY3Rlci4gKi8KKworICBpZiAoYWIgPiAzKQorICAgIHsKKyAgICAqZXJyb3JvZmZzZXQgPSAoaW50KShwIC0gc3RyaW5nKSAtIGFiOworICAgIHJldHVybiAoYWIgPT0gNCk/IFBDUkUyX0VSUk9SX1VURjhfRVJSMTEgOiBQQ1JFMl9FUlJPUl9VVEY4X0VSUjEyOworICAgIH0KKyAgfQorcmV0dXJuIDA7CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0gQ2hlY2sgYSBVVEYtMTYgc3RyaW5nIC0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbGlmIFBDUkUyX0NPREVfVU5JVF9XSURUSCA9PSAxNgorCisvKiBUaGVyZSdzIG5vdCBzbyBtdWNoIHdvcmssIG5vciBzbyBtYW55IGVycm9ycywgZm9yIFVURi0xNi4KK1BDUkUyX0VSUk9SX1VURjE2X0VSUjEgIE1pc3NpbmcgbG93IHN1cnJvZ2F0ZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcKK1BDUkUyX0VSUk9SX1VURjE2X0VSUjIgIEludmFsaWQgbG93IHN1cnJvZ2F0ZQorUENSRTJfRVJST1JfVVRGMTZfRVJSMyAgSXNvbGF0ZWQgbG93IHN1cnJvZ2F0ZQorKi8KKworZm9yIChwID0gc3RyaW5nOyBsZW5ndGggPiAwOyBwKyspCisgIHsKKyAgYyA9ICpwOworICBsZW5ndGgtLTsKKworICBpZiAoKGMgJiAweGY4MDApICE9IDB4ZDgwMCkKKyAgICB7CisgICAgLyogTm9ybWFsIFVURi0xNiBjb2RlIHBvaW50LiBOZWl0aGVyIGhpZ2ggbm9yIGxvdyBzdXJyb2dhdGUuICovCisgICAgfQorICBlbHNlIGlmICgoYyAmIDB4MDQwMCkgPT0gMCkKKyAgICB7CisgICAgLyogSGlnaCBzdXJyb2dhdGUuIE11c3QgYmUgYSBmb2xsb3dlZCBieSBhIGxvdyBzdXJyb2dhdGUuICovCisgICAgaWYgKGxlbmd0aCA9PSAwKQorICAgICAgeworICAgICAgKmVycm9yb2Zmc2V0ID0gcCAtIHN0cmluZzsKKyAgICAgIHJldHVybiBQQ1JFMl9FUlJPUl9VVEYxNl9FUlIxOworICAgICAgfQorICAgIHArKzsKKyAgICBsZW5ndGgtLTsKKyAgICBpZiAoKCpwICYgMHhmYzAwKSAhPSAweGRjMDApCisgICAgICB7CisgICAgICAqZXJyb3JvZmZzZXQgPSBwIC0gc3RyaW5nOworICAgICAgcmV0dXJuIFBDUkUyX0VSUk9SX1VURjE2X0VSUjI7CisgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgIC8qIElzb2xhdGVkIGxvdyBzdXJyb2dhdGUuIEFsd2F5cyBhbiBlcnJvci4gKi8KKyAgICAqZXJyb3JvZmZzZXQgPSBwIC0gc3RyaW5nOworICAgIHJldHVybiBQQ1JFMl9FUlJPUl9VVEYxNl9FUlIzOworICAgIH0KKyAgfQorcmV0dXJuIDA7CisKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLSBDaGVjayBhIFVURi0zMiBzdHJpbmcgLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2Vsc2UKKworLyogVGhlcmUgaXMgdmVyeSBsaXR0bGUgdG8gZG8gZm9yIGEgVVRGLTMyIHN0cmluZy4KK1BDUkUyX0VSUk9SX1VURjMyX0VSUjEgIFN1cnJvZ2F0ZSBjaGFyYWN0ZXIKK1BDUkUyX0VSUk9SX1VURjMyX0VSUjIgIENoYXJhY3RlciA+IDB4MTBmZmZmCisqLworCitmb3IgKHAgPSBzdHJpbmc7IGxlbmd0aCA+IDA7IGxlbmd0aC0tLCBwKyspCisgIHsKKyAgYyA9ICpwOworICBpZiAoKGMgJiAweGZmZmZmODAwdSkgIT0gMHhkODAwdSkKKyAgICB7CisgICAgLyogTm9ybWFsIFVURi0zMiBjb2RlIHBvaW50LiBOZWl0aGVyIGhpZ2ggbm9yIGxvdyBzdXJyb2dhdGUuICovCisgICAgaWYgKGMgPiAweDEwZmZmZnUpCisgICAgICB7CisgICAgICAqZXJyb3JvZmZzZXQgPSBwIC0gc3RyaW5nOworICAgICAgcmV0dXJuIFBDUkUyX0VSUk9SX1VURjMyX0VSUjI7CisgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgIC8qIEEgc3Vycm9nYXRlICovCisgICAgKmVycm9yb2Zmc2V0ID0gcCAtIHN0cmluZzsKKyAgICByZXR1cm4gUENSRTJfRVJST1JfVVRGMzJfRVJSMTsKKyAgICB9CisgIH0KK3JldHVybiAwOworI2VuZGlmICAvKiBDT0RFX1VOSVRfV0lEVEggKi8KK30KKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisKKy8qIEVuZCBvZiBwY3JlMl92YWxpZF91dGYuYyAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyX3hjbGFzcy5jIGIvZGlzdDIvc3JjL3BjcmUyX3hjbGFzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwN2QzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJfeGNsYXNzLmMKQEAgLTAsMCArMSwyNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgUGVybC1Db21wYXRpYmxlIFJlZ3VsYXIgRXhwcmVzc2lvbnMgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUENSRSBpcyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBzeW50YXgKK2FuZCBzZW1hbnRpY3MgYXJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIG9mIHRoZSBQZXJsIDUgbGFuZ3VhZ2UuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBQaGlsaXAgSGF6ZWwKKyAgICAgT3JpZ2luYWwgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAxOTk3LTIwMTIgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKyAgICAgICAgIE5ldyBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDIwMTYgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorKi8KKworLyogVGhpcyBtb2R1bGUgY29udGFpbnMgYW4gaW50ZXJuYWwgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHRvIG1hdGNoIGFuIGV4dGVuZGVkCitjbGFzcy4gSXQgaXMgdXNlZCBieSBwY3JlMl9hdXRvX3Bvc3Nlc3NpZnkoKSBhbmQgYnkgYm90aCBwY3JlMl9tYXRjaCgpIGFuZAorcGNyZTJfZGVmX21hdGNoKCkuICovCisKKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisKKyNpbmNsdWRlICJwY3JlMl9pbnRlcm5hbC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICBNYXRjaCBjaGFyYWN0ZXIgYWdhaW5zdCBhbiBYQ0xBU1MgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIG1hdGNoIGEgY2hhcmFjdGVyIGFnYWluc3QgYW4gZXh0ZW5kZWQgY2xhc3MgdGhhdAorbWlnaHQgY29udGFpbiBjb2RlcG9pbnRzIGFib3ZlIDI1NSBhbmQvb3IgVW5pY29kZSBwcm9wZXJ0aWVzLgorCitBcmd1bWVudHM6CisgIGMgICAgICAgICAgIHRoZSBjaGFyYWN0ZXIKKyAgZGF0YSAgICAgICAgcG9pbnRzIHRvIHRoZSBmbGFnIGNvZGUgdW5pdCBvZiB0aGUgWENMQVNTIGRhdGEKKyAgdXRmICAgICAgICAgVFJVRSBpZiBpbiBVVEYgbW9kZQorCitSZXR1cm5zOiAgICAgIFRSVUUgaWYgY2hhcmFjdGVyIG1hdGNoZXMsIGVsc2UgRkFMU0UKKyovCisKK0JPT0wKK1BSSVYoeGNsYXNzKSh1aW50MzJfdCBjLCBQQ1JFMl9TUFRSIGRhdGEsIEJPT0wgdXRmKQoreworUENSRTJfVUNIQVIgdDsKK0JPT0wgbmVnYXRlZCA9ICgqZGF0YSAmIFhDTF9OT1QpICE9IDA7CisKKyNpZiBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggPT0gOAorLyogSW4gOCBiaXQgbW9kZSwgdGhpcyBtdXN0IGFsd2F5cyBiZSBUUlVFLiBIZWxwIHRoZSBjb21waWxlciB0byBrbm93IHRoYXQuICovCit1dGYgPSBUUlVFOworI2VuZGlmCisKKy8qIENvZGUgcG9pbnRzIDwgMjU2IGFyZSBtYXRjaGVkIGFnYWluc3QgYSBiaXRtYXAsIGlmIG9uZSBpcyBwcmVzZW50LiBJZiBub3QsCit3ZSBzdGlsbCBjYXJyeSBvbiwgYmVjYXVzZSB0aGVyZSBtYXkgYmUgcmFuZ2VzIHRoYXQgc3RhcnQgYmVsb3cgMjU2IGluIHRoZQorYWRkaXRpb25hbCBkYXRhLiAqLworCitpZiAoYyA8IDI1NikKKyAgeworICBpZiAoKCpkYXRhICYgWENMX0hBU1BST1ApID09IDApCisgICAgeworICAgIGlmICgoKmRhdGEgJiBYQ0xfTUFQKSA9PSAwKSByZXR1cm4gbmVnYXRlZDsKKyAgICByZXR1cm4gKCgodWludDhfdCAqKShkYXRhICsgMSkpW2MvOF0gJiAoMSA8PCAoYyY3KSkpICE9IDA7CisgICAgfQorICBpZiAoKCpkYXRhICYgWENMX01BUCkgIT0gMCAmJgorICAgICgoKHVpbnQ4X3QgKikoZGF0YSArIDEpKVtjLzhdICYgKDEgPDwgKGMmNykpKSAhPSAwKQorICAgIHJldHVybiAhbmVnYXRlZDsgLyogY2hhciBmb3VuZCAqLworICB9CisKKy8qIEZpcnN0IHNraXAgdGhlIGJpdCBtYXAgaWYgcHJlc2VudC4gVGhlbiBtYXRjaCBhZ2FpbnN0IHRoZSBsaXN0IG9mIFVuaWNvZGUKK3Byb3BlcnRpZXMgb3IgbGFyZ2UgY2hhcnMgb3IgcmFuZ2VzIHRoYXQgZW5kIHdpdGggYSBsYXJnZSBjaGFyLiBXZSB3b24ndCBldmVyCitlbmNvdW50ZXIgWENMX1BST1Agb3IgWENMX05PVFBST1Agd2hlbiBVVEYgc3VwcG9ydCBpcyBub3QgY29tcGlsZWQuICovCisKK2lmICgoKmRhdGErKyAmIFhDTF9NQVApICE9IDApIGRhdGEgKz0gMzIgLyBzaXplb2YoUENSRTJfVUNIQVIpOworCit3aGlsZSAoKHQgPSAqZGF0YSsrKSAhPSBYQ0xfRU5EKQorICB7CisgIHVpbnQzMl90IHgsIHk7CisgIGlmICh0ID09IFhDTF9TSU5HTEUpCisgICAgeworI2lmZGVmIFNVUFBPUlRfVU5JQ09ERQorICAgIGlmICh1dGYpCisgICAgICB7CisgICAgICBHRVRDSEFSSU5DKHgsIGRhdGEpOyAvKiBtYWNybyBnZW5lcmF0ZXMgbXVsdGlwbGUgc3RhdGVtZW50cyAqLworICAgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHggPSAqZGF0YSsrOworICAgIGlmIChjID09IHgpIHJldHVybiAhbmVnYXRlZDsKKyAgICB9CisgIGVsc2UgaWYgKHQgPT0gWENMX1JBTkdFKQorICAgIHsKKyNpZmRlZiBTVVBQT1JUX1VOSUNPREUKKyAgICBpZiAodXRmKQorICAgICAgeworICAgICAgR0VUQ0hBUklOQyh4LCBkYXRhKTsgLyogbWFjcm8gZ2VuZXJhdGVzIG11bHRpcGxlIHN0YXRlbWVudHMgKi8KKyAgICAgIEdFVENIQVJJTkMoeSwgZGF0YSk7IC8qIG1hY3JvIGdlbmVyYXRlcyBtdWx0aXBsZSBzdGF0ZW1lbnRzICovCisgICAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgICB7CisgICAgICB4ID0gKmRhdGErKzsKKyAgICAgIHkgPSAqZGF0YSsrOworICAgICAgfQorICAgIGlmIChjID49IHggJiYgYyA8PSB5KSByZXR1cm4gIW5lZ2F0ZWQ7CisgICAgfQorCisjaWZkZWYgU1VQUE9SVF9VTklDT0RFCisgIGVsc2UgIC8qIFhDTF9QUk9QICYgWENMX05PVFBST1AgKi8KKyAgICB7CisgICAgY29uc3QgdWNkX3JlY29yZCAqcHJvcCA9IEdFVF9VQ0QoYyk7CisgICAgQk9PTCBpc3Byb3AgPSB0ID09IFhDTF9QUk9QOworCisgICAgc3dpdGNoKCpkYXRhKQorICAgICAgeworICAgICAgY2FzZSBQVF9BTlk6CisgICAgICBpZiAoaXNwcm9wKSByZXR1cm4gIW5lZ2F0ZWQ7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBQVF9MQU1QOgorICAgICAgaWYgKChwcm9wLT5jaGFydHlwZSA9PSB1Y3BfTHUgfHwgcHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0xsIHx8CisgICAgICAgICAgIHByb3AtPmNoYXJ0eXBlID09IHVjcF9MdCkgPT0gaXNwcm9wKSByZXR1cm4gIW5lZ2F0ZWQ7CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBQVF9HQzoKKyAgICAgIGlmICgoZGF0YVsxXSA9PSBQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0pID09IGlzcHJvcCkKKyAgICAgICAgcmV0dXJuICFuZWdhdGVkOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFRfUEM6CisgICAgICBpZiAoKGRhdGFbMV0gPT0gcHJvcC0+Y2hhcnR5cGUpID09IGlzcHJvcCkgcmV0dXJuICFuZWdhdGVkOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFRfU0M6CisgICAgICBpZiAoKGRhdGFbMV0gPT0gcHJvcC0+c2NyaXB0KSA9PSBpc3Byb3ApIHJldHVybiAhbmVnYXRlZDsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBUX0FMTlVNOgorICAgICAgaWYgKChQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX0wgfHwKKyAgICAgICAgICAgUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9OKSA9PSBpc3Byb3ApCisgICAgICAgIHJldHVybiAhbmVnYXRlZDsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBQZXJsIHNwYWNlIHVzZWQgdG8gZXhjbHVkZSBWVCwgYnV0IGZyb20gUGVybCA1LjE4IGl0IGlzIGluY2x1ZGVkLAorICAgICAgd2hpY2ggbWVhbnMgdGhhdCBQZXJsIHNwYWNlIGFuZCBQT1NJWCBzcGFjZSBhcmUgbm93IGlkZW50aWNhbC4gUENSRQorICAgICAgd2FzIGNoYW5nZWQgYXQgcmVsZWFzZSA4LjM0LiAqLworCisgICAgICBjYXNlIFBUX1NQQUNFOiAgICAvKiBQZXJsIHNwYWNlICovCisgICAgICBjYXNlIFBUX1BYU1BBQ0U6ICAvKiBQT1NJWCBzcGFjZSAqLworICAgICAgc3dpdGNoKGMpCisgICAgICAgIHsKKyAgICAgICAgSFNQQUNFX0NBU0VTOgorICAgICAgICBWU1BBQ0VfQ0FTRVM6CisgICAgICAgIGlmIChpc3Byb3ApIHJldHVybiAhbmVnYXRlZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKChQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX1opID09IGlzcHJvcCkKKyAgICAgICAgICByZXR1cm4gIW5lZ2F0ZWQ7CisgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICBicmVhazsKKworICAgICAgY2FzZSBQVF9XT1JEOgorICAgICAgaWYgKChQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX0wgfHwKKyAgICAgICAgICAgUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9OIHx8IGMgPT0gQ0hBUl9VTkRFUlNDT1JFKQorICAgICAgICAgICAgID09IGlzcHJvcCkKKyAgICAgICAgcmV0dXJuICFuZWdhdGVkOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUFRfVUNOQzoKKyAgICAgIGlmIChjIDwgMHhhMCkKKyAgICAgICAgeworICAgICAgICBpZiAoKGMgPT0gQ0hBUl9ET0xMQVJfU0lHTiB8fCBjID09IENIQVJfQ09NTUVSQ0lBTF9BVCB8fAorICAgICAgICAgICAgIGMgPT0gQ0hBUl9HUkFWRV9BQ0NFTlQpID09IGlzcHJvcCkKKyAgICAgICAgICByZXR1cm4gIW5lZ2F0ZWQ7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBpZiAoKGMgPCAweGQ4MDAgfHwgYyA+IDB4ZGZmZikgPT0gaXNwcm9wKQorICAgICAgICAgIHJldHVybiAhbmVnYXRlZDsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIC8qIFRoZSBmb2xsb3dpbmcgdGhyZWUgcHJvcGVydGllcyBjYW4gb2NjdXIgb25seSBpbiBhbiBYQ0xBU1MsIGFzIHRoZXJlCisgICAgICBpcyBubyBccCBvciBcUCBjb2RpbmcgZm9yIHRoZW0uICovCisKKyAgICAgIC8qIEdyYXBoaWMgY2hhcmFjdGVyLiBJbXBsZW1lbnQgdGhpcyBhcyBub3QgWiAoc3BhY2Ugb3Igc2VwYXJhdG9yKSBhbmQKKyAgICAgIG5vdCBDIChvdGhlciksIGV4Y2VwdCBmb3IgQ2YgKGZvcm1hdCkgd2l0aCBhIGZldyBleGNlcHRpb25zLiBUaGlzIHNlZW1zCisgICAgICB0byBiZSB3aGF0IFBlcmwgZG9lcy4gVGhlIGV4Y2VwdGlvbmFsIGNoYXJhY3RlcnMgYXJlOgorCisgICAgICBVKzA2MUMgICAgICAgICAgIEFyYWJpYyBMZXR0ZXIgTWFyaworICAgICAgVSsxODBFICAgICAgICAgICBNb25nb2xpYW4gVm93ZWwgU2VwYXJhdG9yCisgICAgICBVKzIwNjYgLSBVKzIwNjkgIFZhcmlvdXMgImlzb2xhdGUicworICAgICAgKi8KKworICAgICAgY2FzZSBQVF9QWEdSQVBIOgorICAgICAgaWYgKChQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gIT0gdWNwX1ogJiYKKyAgICAgICAgICAgIChQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gIT0gdWNwX0MgfHwKKyAgICAgICAgICAgICAgKHByb3AtPmNoYXJ0eXBlID09IHVjcF9DZiAmJgorICAgICAgICAgICAgICAgIGMgIT0gMHgwNjFjICYmIGMgIT0gMHgxODBlICYmIChjIDwgMHgyMDY2IHx8IGMgPiAweDIwNjkpKQorICAgICAgICAgKSkgPT0gaXNwcm9wKQorICAgICAgICByZXR1cm4gIW5lZ2F0ZWQ7CisgICAgICBicmVhazsKKworICAgICAgLyogUHJpbnRhYmxlIGNoYXJhY3Rlcjogc2FtZSBhcyBncmFwaGljLCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBacywgaS5lLgorICAgICAgbm90IFpsIGFuZCBub3QgWnAsIGFuZCBVKzE4MEUuICovCisKKyAgICAgIGNhc2UgUFRfUFhQUklOVDoKKyAgICAgIGlmICgocHJvcC0+Y2hhcnR5cGUgIT0gdWNwX1psICYmCisgICAgICAgICAgIHByb3AtPmNoYXJ0eXBlICE9IHVjcF9acCAmJgorICAgICAgICAgICAgKFBSSVYodWNwX2dlbnR5cGUpW3Byb3AtPmNoYXJ0eXBlXSAhPSB1Y3BfQyB8fAorICAgICAgICAgICAgICAocHJvcC0+Y2hhcnR5cGUgPT0gdWNwX0NmICYmCisgICAgICAgICAgICAgICAgYyAhPSAweDA2MWMgJiYgKGMgPCAweDIwNjYgfHwgYyA+IDB4MjA2OSkpCisgICAgICAgICApKSA9PSBpc3Byb3ApCisgICAgICAgIHJldHVybiAhbmVnYXRlZDsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBQdW5jdHVhdGlvbjogYWxsIFVuaWNvZGUgcHVuY3R1YXRpb24sIHBsdXMgQVNDSUkgY2hhcmFjdGVycyB0aGF0CisgICAgICBVbmljb2RlIHRyZWF0cyBhcyBzeW1ib2xzIHJhdGhlciB0aGFuIHB1bmN0dWF0aW9uLCBmb3IgUGVybAorICAgICAgY29tcGF0aWJpbGl0eSAodGhlc2UgYXJlICQrPD0+XmB8fikuICovCisKKyAgICAgIGNhc2UgUFRfUFhQVU5DVDoKKyAgICAgIGlmICgoUFJJVih1Y3BfZ2VudHlwZSlbcHJvcC0+Y2hhcnR5cGVdID09IHVjcF9QIHx8CisgICAgICAgICAgICAoYyA8IDEyOCAmJiBQUklWKHVjcF9nZW50eXBlKVtwcm9wLT5jaGFydHlwZV0gPT0gdWNwX1MpKSA9PSBpc3Byb3ApCisgICAgICAgIHJldHVybiAhbmVnYXRlZDsKKyAgICAgIGJyZWFrOworCisgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBvY2N1ciwgYnV0IGNvbXBpbGVycyBtYXkgbXV0dGVyIGlmIHRoZXJlIGlzIG5vCisgICAgICBkZWZhdWx0LiAqLworCisgICAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorCisgICAgZGF0YSArPSAyOworICAgIH0KKyNlbHNlCisgICh2b2lkKXV0ZjsgIC8qIEF2b2lkIGNvbXBpbGVyIHdhcm5pbmcgKi8KKyNlbmRpZiAgLyogU1VQUE9SVF9VTklDT0RFICovCisgIH0KKworcmV0dXJuIG5lZ2F0ZWQ7ICAgLyogY2hhciBkaWQgbm90IG1hdGNoICovCit9CisKKy8qIEVuZCBvZiBwY3JlMl94Y2xhc3MuYyAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3BjcmUyZGVtby5jIGIvZGlzdDIvc3JjL3BjcmUyZGVtby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNTFjZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJkZW1vLmMKQEAgLTAsMCArMSw0MjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICBQQ1JFMiBERU1PTlNUUkFUSU9OIFBST0dSQU0gICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpcyBhIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB0byBpbGx1c3RyYXRlIGEgc3RyYWlnaHRmb3J3YXJkIHdheSBvZgorY2FsbGluZyB0aGUgUENSRTIgcmVndWxhciBleHByZXNzaW9uIGxpYnJhcnkgZnJvbSBhIEMgcHJvZ3JhbS4gU2VlIHRoZQorcGNyZTJzYW1wbGUgZG9jdW1lbnRhdGlvbiBmb3IgYSBzaG9ydCBkaXNjdXNzaW9uICgibWFuIHBjcmUyc2FtcGxlIiBpZiB5b3UgaGF2ZQordGhlIFBDUkUyIG1hbiBwYWdlcyBpbnN0YWxsZWQpLiBQQ1JFMiBpcyBhIHJldmlzZWQgQVBJIGZvciB0aGUgbGlicmFyeSwgYW5kIGlzCitpbmNvbXBhdGlibGUgd2l0aCB0aGUgb3JpZ2luYWwgUENSRSBBUEkuCisKK1RoZXJlIGFyZSBhY3R1YWxseSB0aHJlZSBsaWJyYXJpZXMsIGVhY2ggc3VwcG9ydGluZyBhIGRpZmZlcmVudCBjb2RlIHVuaXQKK3dpZHRoLiBUaGlzIGRlbW9uc3RyYXRpb24gcHJvZ3JhbSB1c2VzIHRoZSA4LWJpdCBsaWJyYXJ5LgorCitJbiBVbml4LWxpa2UgZW52aXJvbm1lbnRzLCBpZiBQQ1JFMiBpcyBpbnN0YWxsZWQgaW4geW91ciBzdGFuZGFyZCBzeXN0ZW0KK2xpYnJhcmllcywgeW91IHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgdGhpcyBwcm9ncmFtIHVzaW5nIHRoaXMgY29tbWFuZDoKKworZ2NjIC1XYWxsIHBjcmUyZGVtby5jIC1scGNyZTItOCAtbyBwY3JlMmRlbW8KKworSWYgUENSRTIgaXMgbm90IGluc3RhbGxlZCBpbiBhIHN0YW5kYXJkIHBsYWNlLCBpdCBpcyBsaWtlbHkgdG8gYmUgaW5zdGFsbGVkCit3aXRoIHN1cHBvcnQgZm9yIHRoZSBwa2ctY29uZmlnIG1lY2hhbmlzbS4gSWYgeW91IGhhdmUgcGtnLWNvbmZpZywgeW91IGNhbgorY29tcGlsZSB0aGlzIHByb2dyYW0gdXNpbmcgdGhpcyBjb21tYW5kOgorCitnY2MgLVdhbGwgcGNyZTJkZW1vLmMgYHBrZy1jb25maWcgLS1jZmxhZ3MgLS1saWJzIGxpYnBjcmUyLThgIC1vIHBjcmUyZGVtbworCitJZiB5b3UgZG8gbm90IGhhdmUgcGtnLWNvbmZpZywgeW91IG1heSBoYXZlIHRvIHVzZSB0aGlzOgorCitnY2MgLVdhbGwgcGNyZTJkZW1vLmMgLUkvdXNyL2xvY2FsL2luY2x1ZGUgLUwvdXNyL2xvY2FsL2xpYiBcCisgIC1SL3Vzci9sb2NhbC9saWIgLWxwY3JlMi04IC1vIHBjcmUyZGVtbworCitSZXBsYWNlICIvdXNyL2xvY2FsL2luY2x1ZGUiIGFuZCAiL3Vzci9sb2NhbC9saWIiIHdpdGggd2hlcmV2ZXIgdGhlIGluY2x1ZGUgYW5kCitsaWJyYXJ5IGZpbGVzIGZvciBQQ1JFMiBhcmUgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtLiBPbmx5IHNvbWUgb3BlcmF0aW5nCitzeXN0ZW1zIChTb2xhcmlzIGlzIG9uZSkgdXNlIHRoZSAtUiBvcHRpb24uCisKK0J1aWxkaW5nIHVuZGVyIFdpbmRvd3M6CisKK0lmIHlvdSB3YW50IHRvIHN0YXRpY2FsbHkgbGluayB0aGlzIHByb2dyYW0gYWdhaW5zdCBhIG5vbi1kbGwgLmEgZmlsZSwgeW91IG11c3QKK2RlZmluZSBQQ1JFMl9TVEFUSUMgYmVmb3JlIGluY2x1ZGluZyBwY3JlMi5oLCBzbyBpbiB0aGlzIGVudmlyb25tZW50LCB1bmNvbW1lbnQKK3RoZSBmb2xsb3dpbmcgbGluZS4gKi8KKworLyogI2RlZmluZSBQQ1JFMl9TVEFUSUMgKi8KKworLyogVGhpcyBtYWNybyBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIGluY2x1ZGluZyBwY3JlMi5oLiBGb3IgYSBwcm9ncmFtIHRoYXQgdXNlcworb25seSBvbmUgY29kZSB1bml0IHdpZHRoLCBpdCBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgZ2VuZXJpYyBmdW5jdGlvbiBuYW1lcworc3VjaCBhcyBwY3JlMl9jb21waWxlKCkuICovCisKKyNkZWZpbmUgUENSRTJfQ09ERV9VTklUX1dJRFRIIDgKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8cGNyZTIuaD4KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogSGVyZSBpcyB0aGUgcHJvZ3JhbS4gVGhlIEFQSSBpbmNsdWRlcyB0aGUgY29uY2VwdCBvZiAiY29udGV4dHMiIGZvciAgICAgKgorKiBzZXR0aW5nIHVwIHVudXN1YWwgaW50ZXJmYWNlIHJlcXVpcmVtZW50cyBmb3IgY29tcGlsaW5nIGFuZCBtYXRjaGluZywgICAqCisqIHN1Y2ggYXMgY3VzdG9tIG1lbW9yeSBtYW5hZ2VycyBhbmQgbm9uLXN0YW5kYXJkIG5ld2xpbmUgZGVmaW5pdGlvbnMuICAgICoKKyogVGhpcyBwcm9ncmFtIGRvZXMgbm90IGRvIGFueSBvZiB0aGlzLCBzbyBpdCBtYWtlcyBubyB1c2Ugb2YgY29udGV4dHMsICAgKgorKiBhbHdheXMgcGFzc2luZyBOVUxMIHdoZXJlIGEgY29udGV4dCBjb3VsZCBiZSBnaXZlbi4gICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworcGNyZTJfY29kZSAqcmU7CitQQ1JFMl9TUFRSIHBhdHRlcm47ICAgICAvKiBQQ1JFMl9TUFRSIGlzIGEgcG9pbnRlciB0byB1bnNpZ25lZCBjb2RlIHVuaXRzIG9mICovCitQQ1JFMl9TUFRSIHN1YmplY3Q7ICAgICAvKiB0aGUgYXBwcm9wcmlhdGUgd2lkdGggKDgsIDE2LCBvciAzMiBiaXRzKS4gKi8KK1BDUkUyX1NQVFIgbmFtZV90YWJsZTsKKworaW50IGNybGZfaXNfbmV3bGluZTsKK2ludCBlcnJvcm51bWJlcjsKK2ludCBmaW5kX2FsbDsKK2ludCBpOworaW50IG5hbWVjb3VudDsKK2ludCBuYW1lX2VudHJ5X3NpemU7CitpbnQgcmM7CitpbnQgdXRmODsKKwordWludDMyX3Qgb3B0aW9uX2JpdHM7Cit1aW50MzJfdCBuZXdsaW5lOworCitQQ1JFMl9TSVpFIGVycm9yb2Zmc2V0OworUENSRTJfU0laRSAqb3ZlY3RvcjsKKworc2l6ZV90IHN1YmplY3RfbGVuZ3RoOworcGNyZTJfbWF0Y2hfZGF0YSAqbWF0Y2hfZGF0YTsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBGaXJzdCwgc29ydCBvdXQgdGhlIGNvbW1hbmQgbGluZS4gVGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgb3B0aW9uIGF0ICAqCisqIHRoZSBtb21lbnQsICItZyIgdG8gcmVxdWVzdCByZXBlYXRlZCBtYXRjaGluZyB0byBmaW5kIGFsbCBvY2N1cnJlbmNlcywgICoKKyogbGlrZSBQZXJsJ3MgL2cgb3B0aW9uLiBXZSBzZXQgdGhlIHZhcmlhYmxlIGZpbmRfYWxsIHRvIGEgbm9uLXplcm8gdmFsdWUgKgorKiBpZiB0aGUgLWcgb3B0aW9uIGlzIHByZXNlbnQuIEFwYXJ0IGZyb20gdGhhdCwgdGhlcmUgbXVzdCBiZSBleGFjdGx5IHR3byAqCisqIGFyZ3VtZW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitmaW5kX2FsbCA9IDA7Citmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICB7CisgIGlmIChzdHJjbXAoYXJndltpXSwgIi1nIikgPT0gMCkgZmluZF9hbGwgPSAxOworICAgIGVsc2UgYnJlYWs7CisgIH0KKworLyogQWZ0ZXIgdGhlIG9wdGlvbnMsIHdlIHJlcXVpcmUgZXhhY3RseSB0d28gYXJndW1lbnRzLCB3aGljaCBhcmUgdGhlIHBhdHRlcm4sCithbmQgdGhlIHN1YmplY3Qgc3RyaW5nLiAqLworCitpZiAoYXJnYyAtIGkgIT0gMikKKyAgeworICBwcmludGYoIlR3byBhcmd1bWVudHMgcmVxdWlyZWQ6IGEgcmVnZXggYW5kIGEgc3ViamVjdCBzdHJpbmdcbiIpOworICByZXR1cm4gMTsKKyAgfQorCisvKiBBcyBwYXR0ZXJuIGFuZCBzdWJqZWN0IGFyZSBjaGFyIGFyZ3VtZW50cywgdGhleSBjYW4gYmUgc3RyYWlnaHRmb3J3YXJkbHkKK2Nhc3QgdG8gUENSRTJfU1BUUiBhcyB3ZSBhcmUgd29ya2luZyBpbiA4LWJpdCBjb2RlIHVuaXRzLiAqLworCitwYXR0ZXJuID0gKFBDUkUyX1NQVFIpYXJndltpXTsKK3N1YmplY3QgPSAoUENSRTJfU1BUUilhcmd2W2krMV07CitzdWJqZWN0X2xlbmd0aCA9IHN0cmxlbigoY2hhciAqKXN1YmplY3QpOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIE5vdyB3ZSBhcmUgZ29pbmcgdG8gY29tcGlsZSB0aGUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4sIGFuZCBoYW5kbGUgKgorKiBhbnkgZXJyb3JzIHRoYXQgYXJlIGRldGVjdGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3JlID0gcGNyZTJfY29tcGlsZSgKKyAgcGF0dGVybiwgICAgICAgICAgICAgICAvKiB0aGUgcGF0dGVybiAqLworICBQQ1JFMl9aRVJPX1RFUk1JTkFURUQsIC8qIGluZGljYXRlcyBwYXR0ZXJuIGlzIHplcm8tdGVybWluYXRlZCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgb3B0aW9ucyAqLworICAmZXJyb3JudW1iZXIsICAgICAgICAgIC8qIGZvciBlcnJvciBudW1iZXIgKi8KKyAgJmVycm9yb2Zmc2V0LCAgICAgICAgICAvKiBmb3IgZXJyb3Igb2Zmc2V0ICovCisgIE5VTEwpOyAgICAgICAgICAgICAgICAgLyogdXNlIGRlZmF1bHQgY29tcGlsZSBjb250ZXh0ICovCisKKy8qIENvbXBpbGF0aW9uIGZhaWxlZDogcHJpbnQgdGhlIGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQuICovCisKK2lmIChyZSA9PSBOVUxMKQorICB7CisgIFBDUkUyX1VDSEFSIGJ1ZmZlclsyNTZdOworICBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZShlcnJvcm51bWJlciwgYnVmZmVyLCBzaXplb2YoYnVmZmVyKSk7CisgIHByaW50ZigiUENSRTIgY29tcGlsYXRpb24gZmFpbGVkIGF0IG9mZnNldCAlZDogJXNcbiIsIChpbnQpZXJyb3JvZmZzZXQsCisgICAgYnVmZmVyKTsKKyAgcmV0dXJuIDE7CisgIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBJZiB0aGUgY29tcGlsYXRpb24gc3VjY2VlZGVkLCB3ZSBjYWxsIFBDUkUgYWdhaW4sIGluIG9yZGVyIHRvIGRvIGEgICAgICoKKyogcGF0dGVybiBtYXRjaCBhZ2FpbnN0IHRoZSBzdWJqZWN0IHN0cmluZy4gVGhpcyBkb2VzIGp1c3QgT05FIG1hdGNoLiBJZiAqCisqIGZ1cnRoZXIgbWF0Y2hpbmcgaXMgbmVlZGVkLCBpdCB3aWxsIGJlIGRvbmUgYmVsb3cuIEJlZm9yZSBydW5uaW5nIHRoZSAgKgorKiBtYXRjaCB3ZSBtdXN0IHNldCB1cCBhIG1hdGNoX2RhdGEgYmxvY2sgZm9yIGhvbGRpbmcgdGhlIHJlc3VsdC4gICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFVzaW5nIHRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IHRoZSBibG9jayBpcyBleGFjdGx5IHRoZSByaWdodCBzaXplIGZvcgordGhlIG51bWJlciBvZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgaW4gdGhlIHBhdHRlcm4uICovCisKK21hdGNoX2RhdGEgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm4ocmUsIE5VTEwpOworCityYyA9IHBjcmUyX21hdGNoKAorICByZSwgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbXBpbGVkIHBhdHRlcm4gKi8KKyAgc3ViamVjdCwgICAgICAgICAgICAgIC8qIHRoZSBzdWJqZWN0IHN0cmluZyAqLworICBzdWJqZWN0X2xlbmd0aCwgICAgICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCAqLworICAwLCAgICAgICAgICAgICAgICAgICAgLyogc3RhcnQgYXQgb2Zmc2V0IDAgaW4gdGhlIHN1YmplY3QgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgIC8qIGRlZmF1bHQgb3B0aW9ucyAqLworICBtYXRjaF9kYXRhLCAgICAgICAgICAgLyogYmxvY2sgZm9yIHN0b3JpbmcgdGhlIHJlc3VsdCAqLworICBOVUxMKTsgICAgICAgICAgICAgICAgLyogdXNlIGRlZmF1bHQgbWF0Y2ggY29udGV4dCAqLworCisvKiBNYXRjaGluZyBmYWlsZWQ6IGhhbmRsZSBlcnJvciBjYXNlcyAqLworCitpZiAocmMgPCAwKQorICB7CisgIHN3aXRjaChyYykKKyAgICB7CisgICAgY2FzZSBQQ1JFMl9FUlJPUl9OT01BVENIOiBwcmludGYoIk5vIG1hdGNoXG4iKTsgYnJlYWs7CisgICAgLyoKKyAgICBIYW5kbGUgb3RoZXIgc3BlY2lhbCBjYXNlcyBpZiB5b3UgbGlrZQorICAgICovCisgICAgZGVmYXVsdDogcHJpbnRmKCJNYXRjaGluZyBlcnJvciAlZFxuIiwgcmMpOyBicmVhazsKKyAgICB9CisgIHBjcmUyX21hdGNoX2RhdGFfZnJlZShtYXRjaF9kYXRhKTsgICAvKiBSZWxlYXNlIG1lbW9yeSB1c2VkIGZvciB0aGUgbWF0Y2ggKi8KKyAgcGNyZTJfY29kZV9mcmVlKHJlKTsgICAgICAgICAgICAgICAgIC8qIGRhdGEgYW5kIHRoZSBjb21waWxlZCBwYXR0ZXJuLiAqLworICByZXR1cm4gMTsKKyAgfQorCisvKiBNYXRjaCBzdWNjZWRlZC4gR2V0IGEgcG9pbnRlciB0byB0aGUgb3V0cHV0IHZlY3Rvciwgd2hlcmUgc3RyaW5nIG9mZnNldHMgYXJlCitzdG9yZWQuICovCisKK292ZWN0b3IgPSBwY3JlMl9nZXRfb3ZlY3Rvcl9wb2ludGVyKG1hdGNoX2RhdGEpOworcHJpbnRmKCJcbk1hdGNoIHN1Y2NlZWRlZCBhdCBvZmZzZXQgJWRcbiIsIChpbnQpb3ZlY3RvclswXSk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogV2UgaGF2ZSBmb3VuZCB0aGUgZmlyc3QgbWF0Y2ggd2l0aGluIHRoZSBzdWJqZWN0IHN0cmluZy4gSWYgdGhlIG91dHB1dCAqCisqIHZlY3RvciB3YXNuJ3QgYmlnIGVub3VnaCwgc2F5IHNvLiBUaGVuIG91dHB1dCBhbnkgc3Vic3RyaW5ncyB0aGF0IHdlcmUgKgorKiBjYXB0dXJlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBvdXRwdXQgdmVjdG9yIHdhc24ndCBiaWcgZW5vdWdoLiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBiZWNhdXNlIHdlIHVzZWQKK3BjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybigpIGFib3ZlLiAqLworCitpZiAocmMgPT0gMCkKKyAgcHJpbnRmKCJvdmVjdG9yIHdhcyBub3QgYmlnIGVub3VnaCBmb3IgYWxsIHRoZSBjYXB0dXJlZCBzdWJzdHJpbmdzXG4iKTsKKworLyogU2hvdyBzdWJzdHJpbmdzIHN0b3JlZCBpbiB0aGUgb3V0cHV0IHZlY3RvciBieSBudW1iZXIuIE9idmlvdXNseSwgaW4gYSByZWFsCithcHBsaWNhdGlvbiB5b3UgbWlnaHQgd2FudCB0byBkbyB0aGluZ3Mgb3RoZXIgdGhhbiBwcmludCB0aGVtLiAqLworCitmb3IgKGkgPSAwOyBpIDwgcmM7IGkrKykKKyAgeworICBQQ1JFMl9TUFRSIHN1YnN0cmluZ19zdGFydCA9IHN1YmplY3QgKyBvdmVjdG9yWzIqaV07CisgIHNpemVfdCBzdWJzdHJpbmdfbGVuZ3RoID0gb3ZlY3RvclsyKmkrMV0gLSBvdmVjdG9yWzIqaV07CisgIHByaW50ZigiJTJkOiAlLipzXG4iLCBpLCAoaW50KXN1YnN0cmluZ19sZW5ndGgsIChjaGFyICopc3Vic3RyaW5nX3N0YXJ0KTsKKyAgfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBUaGF0IGNvbmNsdWRlcyB0aGUgYmFzaWMgcGFydCBvZiB0aGlzIGRlbW9uc3RyYXRpb24gcHJvZ3JhbS4gV2UgaGF2ZSAgICAqCisqIGNvbXBpbGVkIGEgcGF0dGVybiwgYW5kIHBlcmZvcm1lZCBhIHNpbmdsZSBtYXRjaC4gVGhlIGNvZGUgdGhhdCBmb2xsb3dzICoKKyogc2hvd3MgZmlyc3QgaG93IHRvIGFjY2VzcyBuYW1lZCBzdWJzdHJpbmdzLCBhbmQgdGhlbiBob3cgdG8gY29kZSBmb3IgICAgKgorKiByZXBlYXRlZCBtYXRjaGVzIG9uIHRoZSBzYW1lIHN1YmplY3QuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgbmFtZWQgc3Vic3RyaW5ncywgYW5kIGlmIHNvLCBzaG93IHRoZW0gYnkgbmFtZS4gRmlyc3QKK3dlIGhhdmUgdG8gZXh0cmFjdCB0aGUgY291bnQgb2YgbmFtZWQgcGFyZW50aGVzZXMgZnJvbSB0aGUgcGF0dGVybi4gKi8KKworKHZvaWQpcGNyZTJfcGF0dGVybl9pbmZvKAorICByZSwgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbXBpbGVkIHBhdHRlcm4gKi8KKyAgUENSRTJfSU5GT19OQU1FQ09VTlQsIC8qIGdldCB0aGUgbnVtYmVyIG9mIG5hbWVkIHN1YnN0cmluZ3MgKi8KKyAgJm5hbWVjb3VudCk7ICAgICAgICAgIC8qIHdoZXJlIHRvIHB1dCB0aGUgYW5zd2VyICovCisKK2lmIChuYW1lY291bnQgPD0gMCkgcHJpbnRmKCJObyBuYW1lZCBzdWJzdHJpbmdzXG4iKTsgZWxzZQorICB7CisgIFBDUkUyX1NQVFIgdGFicHRyOworICBwcmludGYoIk5hbWVkIHN1YnN0cmluZ3NcbiIpOworCisgIC8qIEJlZm9yZSB3ZSBjYW4gYWNjZXNzIHRoZSBzdWJzdHJpbmdzLCB3ZSBtdXN0IGV4dHJhY3QgdGhlIHRhYmxlIGZvcgorICB0cmFuc2xhdGluZyBuYW1lcyB0byBudW1iZXJzLCBhbmQgdGhlIHNpemUgb2YgZWFjaCBlbnRyeSBpbiB0aGUgdGFibGUuICovCisKKyAgKHZvaWQpcGNyZTJfcGF0dGVybl9pbmZvKAorICAgIHJlLCAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGNvbXBpbGVkIHBhdHRlcm4gKi8KKyAgICBQQ1JFMl9JTkZPX05BTUVUQUJMRSwgICAgIC8qIGFkZHJlc3Mgb2YgdGhlIHRhYmxlICovCisgICAgJm5hbWVfdGFibGUpOyAgICAgICAgICAgICAvKiB3aGVyZSB0byBwdXQgdGhlIGFuc3dlciAqLworCisgICh2b2lkKXBjcmUyX3BhdHRlcm5faW5mbygKKyAgICByZSwgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBjb21waWxlZCBwYXR0ZXJuICovCisgICAgUENSRTJfSU5GT19OQU1FRU5UUllTSVpFLCAvKiBzaXplIG9mIGVhY2ggZW50cnkgaW4gdGhlIHRhYmxlICovCisgICAgJm5hbWVfZW50cnlfc2l6ZSk7ICAgICAgICAvKiB3aGVyZSB0byBwdXQgdGhlIGFuc3dlciAqLworCisgIC8qIE5vdyB3ZSBjYW4gc2NhbiB0aGUgdGFibGUgYW5kLCBmb3IgZWFjaCBlbnRyeSwgcHJpbnQgdGhlIG51bWJlciwgdGhlIG5hbWUsCisgIGFuZCB0aGUgc3Vic3RyaW5nIGl0c2VsZi4gSW4gdGhlIDgtYml0IGxpYnJhcnkgdGhlIG51bWJlciBpcyBoZWxkIGluIHR3bworICBieXRlcywgbW9zdCBzaWduaWZpY2FudCBmaXJzdC4gKi8KKworICB0YWJwdHIgPSBuYW1lX3RhYmxlOworICBmb3IgKGkgPSAwOyBpIDwgbmFtZWNvdW50OyBpKyspCisgICAgeworICAgIGludCBuID0gKHRhYnB0clswXSA8PCA4KSB8IHRhYnB0clsxXTsKKyAgICBwcmludGYoIiglZCkgJSpzOiAlLipzXG4iLCBuLCBuYW1lX2VudHJ5X3NpemUgLSAzLCB0YWJwdHIgKyAyLAorICAgICAgKGludCkob3ZlY3RvclsyKm4rMV0gLSBvdmVjdG9yWzIqbl0pLCBzdWJqZWN0ICsgb3ZlY3RvclsyKm5dKTsKKyAgICB0YWJwdHIgKz0gbmFtZV9lbnRyeV9zaXplOworICAgIH0KKyAgfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqIElmIHRoZSAiLWciIG9wdGlvbiB3YXMgZ2l2ZW4gb24gdGhlIGNvbW1hbmQgbGluZSwgd2Ugd2FudCB0byBjb250aW51ZSAgKgorKiB0byBzZWFyY2ggZm9yIGFkZGl0aW9uYWwgbWF0Y2hlcyBpbiB0aGUgc3ViamVjdCBzdHJpbmcsIGluIGEgc2ltaWxhciAgICoKKyogd2F5IHRvIHRoZSAvZyBvcHRpb24gaW4gUGVybC4gVGhpcyB0dXJucyBvdXQgdG8gYmUgdHJpY2tpZXIgdGhhbiB5b3UgICAqCisqIG1pZ2h0IHRoaW5rIGJlY2F1c2Ugb2YgdGhlIHBvc3NpYmlsaXR5IG9mIG1hdGNoaW5nIGFuIGVtcHR5IHN0cmluZy4gICAgKgorKiBXaGF0IGhhcHBlbnMgaXMgYXMgZm9sbG93czogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIElmIHRoZSBwcmV2aW91cyBtYXRjaCB3YXMgTk9UIGZvciBhbiBlbXB0eSBzdHJpbmcsIHdlIGNhbiBqdXN0IHN0YXJ0ICAgKgorKiB0aGUgbmV4dCBtYXRjaCBhdCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBvbmUuICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIElmIHRoZSBwcmV2aW91cyBtYXRjaCBXQVMgZm9yIGFuIGVtcHR5IHN0cmluZywgd2UgY2FuJ3QgZG8gdGhhdCwgYXMgaXQgKgorKiB3b3VsZCBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3AuIEluc3RlYWQsIGEgY2FsbCBvZiBwY3JlMl9tYXRjaCgpIGlzICAgICoKKyogbWFkZSB3aXRoIHRoZSBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIGFuZCBQQ1JFMl9BTkNIT1JFRCBmbGFncyBzZXQuIFRoZSAqCisqIGZpcnN0IG9mIHRoZXNlIHRlbGxzIFBDUkUyIHRoYXQgYW4gZW1wdHkgc3RyaW5nIGF0IHRoZSBzdGFydCBvZiB0aGUgICAgKgorKiBzdWJqZWN0IGlzIG5vdCBhIHZhbGlkIG1hdGNoOyBvdGhlciBwb3NzaWJpbGl0aWVzIG11c3QgYmUgdHJpZWQuIFRoZSAgICoKKyogc2Vjb25kIGZsYWcgcmVzdHJpY3RzIFBDUkUyIHRvIG9uZSBtYXRjaCBhdHRlbXB0IGF0IHRoZSBpbml0aWFsIHN0cmluZyAqCisqIHBvc2l0aW9uLiBJZiB0aGlzIG1hdGNoIHN1Y2NlZWRzLCBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgZW1wdHkgc3RyaW5nICAgKgorKiBtYXRjaCBoYXMgYmVlbiBmb3VuZCwgYW5kIHdlIGNhbiBwcmludCBpdCBhbmQgcHJvY2VlZCByb3VuZCB0aGUgbG9vcCwgICoKKyogYWR2YW5jaW5nIGJ5IHRoZSBsZW5ndGggb2Ygd2hhdGV2ZXIgd2FzIGZvdW5kLiBJZiB0aGlzIG1hdGNoIGRvZXMgbm90ICAqCisqIHN1Y2NlZWQsIHdlIHN0aWxsIHN0YXkgaW4gdGhlIGxvb3AsIGFkdmFuY2luZyBieSBqdXN0IG9uZSBjaGFyYWN0ZXIuICAgKgorKiBJbiBVVEYtOCBtb2RlLCB3aGljaCBjYW4gYmUgc2V0IGJ5ICgqVVRGKSBpbiB0aGUgcGF0dGVybiwgdGhpcyBtYXkgYmUgICoKKyogbW9yZSB0aGFuIG9uZSBieXRlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiBIb3dldmVyLCB0aGVyZSBpcyBhIGNvbXBsaWNhdGlvbiBjb25jZXJuZWQgd2l0aCBuZXdsaW5lcy4gV2hlbiB0aGUgICAgICoKKyogbmV3bGluZSBjb252ZW50aW9uIGlzIHN1Y2ggdGhhdCBDUkxGIGlzIGEgdmFsaWQgbmV3bGluZSwgd2UgbXVzdCAgICAgICAqCisqIGFkdmFuY2UgYnkgdHdvIGNoYXJhY3RlcnMgcmF0aGVyIHRoYW4gb25lLiBUaGUgbmV3bGluZSBjb252ZW50aW9uIGNhbiAgKgorKiBiZSBzZXQgaW4gdGhlIHJlZ2V4IGJ5ICgqQ1IpLCBldGMuOyBpZiBub3QsIHdlIG11c3QgZmluZCB0aGUgZGVmYXVsdC4gICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2lmICghZmluZF9hbGwpICAgICAvKiBDaGVjayBmb3IgLWcgKi8KKyAgeworICBwY3JlMl9tYXRjaF9kYXRhX2ZyZWUobWF0Y2hfZGF0YSk7ICAvKiBSZWxlYXNlIHRoZSBtZW1vcnkgdGhhdCB3YXMgdXNlZCAqLworICBwY3JlMl9jb2RlX2ZyZWUocmUpOyAgICAgICAgICAgICAgICAvKiBmb3IgdGhlIG1hdGNoIGRhdGEgYW5kIHRoZSBwYXR0ZXJuLiAqLworICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFeGl0IHRoZSBwcm9ncmFtLiAqLworICB9CisKKy8qIEJlZm9yZSBydW5uaW5nIHRoZSBsb29wLCBjaGVjayBmb3IgVVRGLTggYW5kIHdoZXRoZXIgQ1JMRiBpcyBhIHZhbGlkIG5ld2xpbmUKK3NlcXVlbmNlLiBGaXJzdCwgZmluZCB0aGUgb3B0aW9ucyB3aXRoIHdoaWNoIHRoZSByZWdleCB3YXMgY29tcGlsZWQgYW5kIGV4dHJhY3QKK3RoZSBVVEYgc3RhdGUuICovCisKKyh2b2lkKXBjcmUyX3BhdHRlcm5faW5mbyhyZSwgUENSRTJfSU5GT19BTExPUFRJT05TLCAmb3B0aW9uX2JpdHMpOwordXRmOCA9IChvcHRpb25fYml0cyAmIFBDUkUyX1VURikgIT0gMDsKKworLyogTm93IGZpbmQgdGhlIG5ld2xpbmUgY29udmVudGlvbiBhbmQgc2VlIHdoZXRoZXIgQ1JMRiBpcyBhIHZhbGlkIG5ld2xpbmUKK3NlcXVlbmNlLiAqLworCisodm9pZClwY3JlMl9wYXR0ZXJuX2luZm8ocmUsIFBDUkUyX0lORk9fTkVXTElORSwgJm5ld2xpbmUpOworY3JsZl9pc19uZXdsaW5lID0gbmV3bGluZSA9PSBQQ1JFMl9ORVdMSU5FX0FOWSB8fAorICAgICAgICAgICAgICAgICAgbmV3bGluZSA9PSBQQ1JFMl9ORVdMSU5FX0NSTEYgfHwKKyAgICAgICAgICAgICAgICAgIG5ld2xpbmUgPT0gUENSRTJfTkVXTElORV9BTllDUkxGOworCisvKiBMb29wIGZvciBzZWNvbmQgYW5kIHN1YnNlcXVlbnQgbWF0Y2hlcyAqLworCitmb3IgKDs7KQorICB7CisgIHVpbnQzMl90IG9wdGlvbnMgPSAwOyAgICAgICAgICAgICAgICAgICAgLyogTm9ybWFsbHkgbm8gb3B0aW9ucyAqLworICBQQ1JFMl9TSVpFIHN0YXJ0X29mZnNldCA9IG92ZWN0b3JbMV07ICAvKiBTdGFydCBhdCBlbmQgb2YgcHJldmlvdXMgbWF0Y2ggKi8KKworICAvKiBJZiB0aGUgcHJldmlvdXMgbWF0Y2ggd2FzIGZvciBhbiBlbXB0eSBzdHJpbmcsIHdlIGFyZSBmaW5pc2hlZCBpZiB3ZSBhcmUKKyAgYXQgdGhlIGVuZCBvZiB0aGUgc3ViamVjdC4gT3RoZXJ3aXNlLCBhcnJhbmdlIHRvIHJ1biBhbm90aGVyIG1hdGNoIGF0IHRoZQorICBzYW1lIHBvaW50IHRvIHNlZSBpZiBhIG5vbi1lbXB0eSBtYXRjaCBjYW4gYmUgZm91bmQuICovCisKKyAgaWYgKG92ZWN0b3JbMF0gPT0gb3ZlY3RvclsxXSkKKyAgICB7CisgICAgaWYgKG92ZWN0b3JbMF0gPT0gc3ViamVjdF9sZW5ndGgpIGJyZWFrOworICAgIG9wdGlvbnMgPSBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIHwgUENSRTJfQU5DSE9SRUQ7CisgICAgfQorCisgIC8qIFJ1biB0aGUgbmV4dCBtYXRjaGluZyBvcGVyYXRpb24gKi8KKworICByYyA9IHBjcmUyX21hdGNoKAorICAgIHJlLCAgICAgICAgICAgICAgICAgICAvKiB0aGUgY29tcGlsZWQgcGF0dGVybiAqLworICAgIHN1YmplY3QsICAgICAgICAgICAgICAvKiB0aGUgc3ViamVjdCBzdHJpbmcgKi8KKyAgICBzdWJqZWN0X2xlbmd0aCwgICAgICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgc3ViamVjdCAqLworICAgIHN0YXJ0X29mZnNldCwgICAgICAgICAvKiBzdGFydGluZyBvZmZzZXQgaW4gdGhlIHN1YmplY3QgKi8KKyAgICBvcHRpb25zLCAgICAgICAgICAgICAgLyogb3B0aW9ucyAqLworICAgIG1hdGNoX2RhdGEsICAgICAgICAgICAvKiBibG9jayBmb3Igc3RvcmluZyB0aGUgcmVzdWx0ICovCisgICAgTlVMTCk7ICAgICAgICAgICAgICAgIC8qIHVzZSBkZWZhdWx0IG1hdGNoIGNvbnRleHQgKi8KKworICAvKiBUaGlzIHRpbWUsIGEgcmVzdWx0IG9mIE5PTUFUQ0ggaXNuJ3QgYW4gZXJyb3IuIElmIHRoZSB2YWx1ZSBpbiAib3B0aW9ucyIKKyAgaXMgemVybywgaXQganVzdCBtZWFucyB3ZSBoYXZlIGZvdW5kIGFsbCBwb3NzaWJsZSBtYXRjaGVzLCBzbyB0aGUgbG9vcCBlbmRzLgorICBPdGhlcndpc2UsIGl0IG1lYW5zIHdlIGhhdmUgZmFpbGVkIHRvIGZpbmQgYSBub24tZW1wdHktc3RyaW5nIG1hdGNoIGF0IGEKKyAgcG9pbnQgd2hlcmUgdGhlcmUgd2FzIGEgcHJldmlvdXMgZW1wdHktc3RyaW5nIG1hdGNoLiBJbiB0aGlzIGNhc2UsIHdlIGRvIHdoYXQKKyAgUGVybCBkb2VzOiBhZHZhbmNlIHRoZSBtYXRjaGluZyBwb3NpdGlvbiBieSBvbmUgY2hhcmFjdGVyLCBhbmQgY29udGludWUuIFdlCisgIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgImVuZCBvZiBwcmV2aW91cyBtYXRjaCIgb2Zmc2V0LCBiZWNhdXNlIHRoYXQgaXMgcGlja2VkCisgIHVwIGF0IHRoZSB0b3Agb2YgdGhlIGxvb3AgYXMgdGhlIHBvaW50IGF0IHdoaWNoIHRvIHN0YXJ0IGFnYWluLgorCisgIFRoZXJlIGFyZSB0d28gY29tcGxpY2F0aW9uczogKGEpIFdoZW4gQ1JMRiBpcyBhIHZhbGlkIG5ld2xpbmUgc2VxdWVuY2UsIGFuZAorICB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBqdXN0IGJlZm9yZSBpdCwgYWR2YW5jZSBieSBhbiBleHRyYSBieXRlLiAoYikKKyAgT3RoZXJ3aXNlIHdlIG11c3QgZW5zdXJlIHRoYXQgd2Ugc2tpcCBhbiBlbnRpcmUgVVRGIGNoYXJhY3RlciBpZiB3ZSBhcmUgaW4KKyAgVVRGIG1vZGUuICovCisKKyAgaWYgKHJjID09IFBDUkUyX0VSUk9SX05PTUFUQ0gpCisgICAgeworICAgIGlmIChvcHRpb25zID09IDApIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgLyogQWxsIG1hdGNoZXMgZm91bmQgKi8KKyAgICBvdmVjdG9yWzFdID0gc3RhcnRfb2Zmc2V0ICsgMTsgICAgICAgICAgICAgIC8qIEFkdmFuY2Ugb25lIGNvZGUgdW5pdCAqLworICAgIGlmIChjcmxmX2lzX25ld2xpbmUgJiYgICAgICAgICAgICAgICAgICAgICAgLyogSWYgQ1JMRiBpcyBuZXdsaW5lICYgKi8KKyAgICAgICAgc3RhcnRfb2Zmc2V0IDwgc3ViamVjdF9sZW5ndGggLSAxICYmICAgIC8qIHdlIGFyZSBhdCBDUkxGLCAqLworICAgICAgICBzdWJqZWN0W3N0YXJ0X29mZnNldF0gPT0gJ1xyJyAmJgorICAgICAgICBzdWJqZWN0W3N0YXJ0X29mZnNldCArIDFdID09ICdcbicpCisgICAgICBvdmVjdG9yWzFdICs9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZHZhbmNlIGJ5IG9uZSBtb3JlLiAqLworICAgIGVsc2UgaWYgKHV0ZjgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLCBlbnN1cmUgd2UgKi8KKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGFkdmFuY2UgYSB3aG9sZSBVVEYtOCAqLworICAgICAgd2hpbGUgKG92ZWN0b3JbMV0gPCBzdWJqZWN0X2xlbmd0aCkgICAgICAgLyogY2hhcmFjdGVyLiAqLworICAgICAgICB7CisgICAgICAgIGlmICgoc3ViamVjdFtvdmVjdG9yWzFdXSAmIDB4YzApICE9IDB4ODApIGJyZWFrOworICAgICAgICBvdmVjdG9yWzFdICs9IDE7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBjb250aW51ZTsgICAgLyogR28gcm91bmQgdGhlIGxvb3AgYWdhaW4gKi8KKyAgICB9CisKKyAgLyogT3RoZXIgbWF0Y2hpbmcgZXJyb3JzIGFyZSBub3QgcmVjb3ZlcmFibGUuICovCisKKyAgaWYgKHJjIDwgMCkKKyAgICB7CisgICAgcHJpbnRmKCJNYXRjaGluZyBlcnJvciAlZFxuIiwgcmMpOworICAgIHBjcmUyX21hdGNoX2RhdGFfZnJlZShtYXRjaF9kYXRhKTsKKyAgICBwY3JlMl9jb2RlX2ZyZWUocmUpOworICAgIHJldHVybiAxOworICAgIH0KKworICAvKiBNYXRjaCBzdWNjZWRlZCAqLworCisgIHByaW50ZigiXG5NYXRjaCBzdWNjZWVkZWQgYWdhaW4gYXQgb2Zmc2V0ICVkXG4iLCAoaW50KW92ZWN0b3JbMF0pOworCisgIC8qIFRoZSBtYXRjaCBzdWNjZWVkZWQsIGJ1dCB0aGUgb3V0cHV0IHZlY3RvciB3YXNuJ3QgYmlnIGVub3VnaC4gVGhpcworICBzaG91bGQgbm90IGhhcHBlbi4gKi8KKworICBpZiAocmMgPT0gMCkKKyAgICBwcmludGYoIm92ZWN0b3Igd2FzIG5vdCBiaWcgZW5vdWdoIGZvciBhbGwgdGhlIGNhcHR1cmVkIHN1YnN0cmluZ3NcbiIpOworCisgIC8qIEFzIGJlZm9yZSwgc2hvdyBzdWJzdHJpbmdzIHN0b3JlZCBpbiB0aGUgb3V0cHV0IHZlY3RvciBieSBudW1iZXIsIGFuZCB0aGVuCisgIGFsc28gYW55IG5hbWVkIHN1YnN0cmluZ3MuICovCisKKyAgZm9yIChpID0gMDsgaSA8IHJjOyBpKyspCisgICAgeworICAgIFBDUkUyX1NQVFIgc3Vic3RyaW5nX3N0YXJ0ID0gc3ViamVjdCArIG92ZWN0b3JbMippXTsKKyAgICBzaXplX3Qgc3Vic3RyaW5nX2xlbmd0aCA9IG92ZWN0b3JbMippKzFdIC0gb3ZlY3RvclsyKmldOworICAgIHByaW50ZigiJTJkOiAlLipzXG4iLCBpLCAoaW50KXN1YnN0cmluZ19sZW5ndGgsIChjaGFyICopc3Vic3RyaW5nX3N0YXJ0KTsKKyAgICB9CisKKyAgaWYgKG5hbWVjb3VudCA8PSAwKSBwcmludGYoIk5vIG5hbWVkIHN1YnN0cmluZ3NcbiIpOyBlbHNlCisgICAgeworICAgIFBDUkUyX1NQVFIgdGFicHRyID0gbmFtZV90YWJsZTsKKyAgICBwcmludGYoIk5hbWVkIHN1YnN0cmluZ3NcbiIpOworICAgIGZvciAoaSA9IDA7IGkgPCBuYW1lY291bnQ7IGkrKykKKyAgICAgIHsKKyAgICAgIGludCBuID0gKHRhYnB0clswXSA8PCA4KSB8IHRhYnB0clsxXTsKKyAgICAgIHByaW50ZigiKCVkKSAlKnM6ICUuKnNcbiIsIG4sIG5hbWVfZW50cnlfc2l6ZSAtIDMsIHRhYnB0ciArIDIsCisgICAgICAgIChpbnQpKG92ZWN0b3JbMipuKzFdIC0gb3ZlY3RvclsyKm5dKSwgc3ViamVjdCArIG92ZWN0b3JbMipuXSk7CisgICAgICB0YWJwdHIgKz0gbmFtZV9lbnRyeV9zaXplOworICAgICAgfQorICAgIH0KKyAgfSAgICAgIC8qIEVuZCBvZiBsb29wIHRvIGZpbmQgc2Vjb25kIGFuZCBzdWJzZXF1ZW50IG1hdGNoZXMgKi8KKworcHJpbnRmKCJcbiIpOworcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKG1hdGNoX2RhdGEpOworcGNyZTJfY29kZV9mcmVlKHJlKTsKK3JldHVybiAwOworfQorCisvKiBFbmQgb2YgcGNyZTJkZW1vLmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMmdyZXAuYyBiL2Rpc3QyL3NyYy9wY3JlMmdyZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYWRiMjJhCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3BjcmUyZ3JlcC5jCkBAIC0wLDAgKzEsMzI3MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICBwY3JlMmdyZXAgcHJvZ3JhbSAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGlzIGEgZ3JlcCBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgOC1iaXQgUENSRSByZWd1bGFyIGV4cHJlc3Npb24gbGlicmFyeQordmlhIHRoZSBQQ1JFMiB1cGRhdGVkIEFQSSB0byBkbyBpdHMgcGF0dGVybiBtYXRjaGluZy4gT24gVW5peC1saWtlLCBXaW5kb3dzLAorYW5kIG5hdGl2ZSB6L09TIHN5c3RlbXMgaXQgY2FuIHJlY3Vyc2UgaW50byBkaXJlY3RvcmllcywgYW5kIGluIHovT1MgaXQgY2FuCitoYW5kbGUgUERTIGZpbGVzLgorCitOb3RlIHRoYXQgZm9yIG5hdGl2ZSB6L09TLCBpbiBhZGRpdGlvbiB0byBkZWZpbmluZyB0aGUgTkFUSVZFX1pPUyBtYWNybywgYW4KK2FkZGl0aW9uYWwgaGVhZGVyIGlzIHJlcXVpcmVkLiBUaGF0IGhlYWRlciBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIG1haW4gUENSRTIKK2Rpc3RyaWJ1dGlvbiBiZWNhdXNlIG90aGVyIGFwcGFyYXR1cyBpcyBuZWVkZWQgdG8gY29tcGlsZSBwY3JlMmdyZXAgZm9yIHovT1MuCitUaGUgaGVhZGVyIGNhbiBiZSBmb3VuZCBpbiB0aGUgc3BlY2lhbCB6L09TIGRpc3RyaWJ1dGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlCitmcm9tIHd3dy56YWNvbnN1bHRhbnRzLm5ldCBvciBmcm9tIHd3dy5jYnR0YXBlLm9yZy4KKworICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTctMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGxvY2FsZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfTElCWgorI2luY2x1ZGUgPHpsaWIuaD4KKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9MSUJCWjIKKyNpbmNsdWRlIDxiemxpYi5oPgorI2VuZGlmCisKKyNkZWZpbmUgUENSRTJfQ09ERV9VTklUX1dJRFRIIDgKKyNpbmNsdWRlICJwY3JlMi5oIgorCisjZGVmaW5lIEZBTFNFIDAKKyNkZWZpbmUgVFJVRSAxCisKK3R5cGVkZWYgaW50IEJPT0w7CisKKyNkZWZpbmUgT0ZGU0VUX1NJWkUgMzMKKworI2lmIEJVRlNJWiA+IDgxOTIKKyNkZWZpbmUgTUFYUEFUTEVOIEJVRlNJWgorI2Vsc2UKKyNkZWZpbmUgTUFYUEFUTEVOIDgxOTIKKyNlbmRpZgorCisjZGVmaW5lIFBBVEJVRlNJWkUgKE1BWFBBVExFTiArIDEwKSAgIC8qIEFsbG93cyBmb3IgcHJlZml4K3N1ZmZpeCAqLworCisvKiBWYWx1ZXMgZm9yIHRoZSAiZmlsZW5hbWVzIiB2YXJpYWJsZSwgd2hpY2ggc3BlY2lmaWVzIG9wdGlvbnMgZm9yIGZpbGUgbmFtZQorb3V0cHV0LiBUaGUgb3JkZXIgaXMgaW1wb3J0YW50OyBpdCBpcyBhc3N1bWVkIHRoYXQgYSBmaWxlIG5hbWUgaXMgd2FudGVkIGZvcgorYWxsIHZhbHVlcyBncmVhdGVyIHRoYW4gRk5fREVGQVVMVC4gKi8KKworZW51bSB7IEZOX05PTkUsIEZOX0RFRkFVTFQsIEZOX01BVENIX09OTFksIEZOX05PTUFUQ0hfT05MWSwgRk5fRk9SQ0UgfTsKKworLyogRmlsZSByZWFkaW5nIHN0eWxlcyAqLworCitlbnVtIHsgRlJfUExBSU4sIEZSX0xJQlosIEZSX0xJQkJaMiB9OworCisvKiBBY3Rpb25zIGZvciB0aGUgLWQgYW5kIC1EIG9wdGlvbnMgKi8KKworZW51bSB7IGRlZV9SRUFELCBkZWVfU0tJUCwgZGVlX1JFQ1VSU0UgfTsKK2VudW0geyBERUVfUkVBRCwgREVFX1NLSVAgfTsKKworLyogQWN0aW9ucyBmb3Igc3BlY2lhbCBwcm9jZXNzaW5nIG9wdGlvbnMgKGZsYWcgYml0cykgKi8KKworI2RlZmluZSBQT19XT1JEX01BVENIICAgICAweDAwMDEKKyNkZWZpbmUgUE9fTElORV9NQVRDSCAgICAgMHgwMDAyCisjZGVmaW5lIFBPX0ZJWEVEX1NUUklOR1MgIDB4MDAwNAorCisvKiBCaW5hcnkgZmlsZSBvcHRpb25zICovCisKK2VudW0geyBCSU5fQklOQVJZLCBCSU5fTk9NQVRDSCwgQklOX1RFWFQgfTsKKworLyogSW4gbmV3ZXIgdmVyc2lvbnMgb2YgZ2NjLCB3aXRoIEZPUlRJRllfU09VUkNFIHNldCAodGhlIGRlZmF1bHQgaW4gc29tZQorZW52aXJvbm1lbnRzKSwgYSB3YXJuaW5nIGlzIGlzc3VlZCBpZiB0aGUgdmFsdWUgb2YgZndyaXRlKCkgaXMgaWdub3JlZC4KK1VuZm9ydHVuYXRlbHksIGNhc3RpbmcgdG8gKHZvaWQpIGRvZXMgbm90IHN1cHByZXNzIHRoZSB3YXJuaW5nLiBUbyBnZXQgcm91bmQKK3RoaXMsIHdlIHVzZSBhIG1hY3JvIHRoYXQgY29tcGlsZXMgYSBmdWRnZS4gT2RkbHksIHRoaXMgZG9lcyBub3QgYWxzbyBzZWVtIHRvCithcHBseSB0byBmcHJpbnRmKCkuICovCisKKyNkZWZpbmUgRldSSVRFKGEsYixjLGQpIGlmIChmd3JpdGUoYSxiLGMsZCkpIHt9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgIEdsb2JhbCB2YXJpYWJsZXMgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEplZmZyZXkgRnJpZWRsIGhhcyBzb21lIGRlYnVnZ2luZyByZXF1aXJlbWVudHMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlCityZWd1bGFyIGNvZGUuICovCisKKyNpZmRlZiBKRlJJRURMX0RFQlVHCitzdGF0aWMgaW50IFNfYXJnID0gLTE7CitzdGF0aWMgdW5zaWduZWQgaW50IGpmcmllZGxfWFIgPSAwOyAvKiByZXBlYXQgcmVnZXggYXR0ZW1wdCB0aGlzIG1hbnkgdGltZXMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgamZyaWVkbF9YVCA9IDA7IC8qIHJlcGxpY2F0ZSB0ZXh0IHRoaXMgbWFueSB0aW1lcyAqLworc3RhdGljIGNvbnN0IGNoYXIgKmpmcmllZGxfcHJlZml4ID0gIiI7CitzdGF0aWMgY29uc3QgY2hhciAqamZyaWVkbF9wb3N0Zml4ID0gIiI7CisjZW5kaWYKKworc3RhdGljIGNoYXIgKmNvbG91cl9zdHJpbmcgPSAoY2hhciAqKSIxOzMxIjsKK3N0YXRpYyBjaGFyICpjb2xvdXJfb3B0aW9uID0gTlVMTDsKK3N0YXRpYyBjaGFyICpkZWVfb3B0aW9uID0gTlVMTDsKK3N0YXRpYyBjaGFyICpERUVfb3B0aW9uID0gTlVMTDsKK3N0YXRpYyBjaGFyICpsb2NhbGUgPSBOVUxMOworc3RhdGljIGNoYXIgKm1haW5fYnVmZmVyID0gTlVMTDsKK3N0YXRpYyBjaGFyICpuZXdsaW5lX2FyZyA9IE5VTEw7CitzdGF0aWMgY2hhciAqb21fc2VwYXJhdG9yID0gKGNoYXIgKikiIjsKK3N0YXRpYyBjaGFyICpzdGRpbl9uYW1lID0gKGNoYXIgKikiKHN0YW5kYXJkIGlucHV0KSI7CisKK3N0YXRpYyBpbnQgYWZ0ZXJfY29udGV4dCA9IDA7CitzdGF0aWMgaW50IGJlZm9yZV9jb250ZXh0ID0gMDsKK3N0YXRpYyBpbnQgYmluYXJ5X2ZpbGVzID0gQklOX0JJTkFSWTsKK3N0YXRpYyBpbnQgYm90aF9jb250ZXh0ID0gMDsKK3N0YXRpYyBpbnQgYnVmdGhpcmQgPSBQQ1JFMkdSRVBfQlVGU0laRTsKK3N0YXRpYyBpbnQgYnVmc2l6ZSA9IDMqUENSRTJHUkVQX0JVRlNJWkU7CitzdGF0aWMgaW50IGVuZGxpbmV0eXBlOworCisjaWYgZGVmaW5lZCBIQVZFX1dJTkRPV1NfSCAmJiBIQVZFX1dJTkRPV1NfSAorc3RhdGljIGludCBkZWVfYWN0aW9uID0gZGVlX1NLSVA7CisjZWxzZQorc3RhdGljIGludCBkZWVfYWN0aW9uID0gZGVlX1JFQUQ7CisjZW5kaWYKK3N0YXRpYyBpbnQgREVFX2FjdGlvbiA9IERFRV9SRUFEOworc3RhdGljIGludCBlcnJvcl9jb3VudCA9IDA7CitzdGF0aWMgaW50IGZpbGVuYW1lcyA9IEZOX0RFRkFVTFQ7CisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyR1JFUF9KSVQKK3N0YXRpYyBCT09MIHVzZV9qaXQgPSBUUlVFOworI2Vsc2UKK3N0YXRpYyBCT09MIHVzZV9qaXQgPSBGQUxTRTsKKyNlbmRpZgorCitzdGF0aWMgY29uc3QgdWludDhfdCAqY2hhcmFjdGVyX3RhYmxlcyA9IE5VTEw7CisKK3N0YXRpYyB1aW50MzJfdCBwY3JlMl9vcHRpb25zID0gMDsKK3N0YXRpYyB1aW50MzJfdCBwcm9jZXNzX29wdGlvbnMgPSAwOworc3RhdGljIHVpbnQzMl90IG1hdGNoX2xpbWl0ID0gMDsKK3N0YXRpYyB1aW50MzJfdCByZWN1cnNpb25fbGltaXQgPSAwOworCitzdGF0aWMgcGNyZTJfY29tcGlsZV9jb250ZXh0ICpjb21waWxlX2NvbnRleHQ7CitzdGF0aWMgcGNyZTJfbWF0Y2hfY29udGV4dCAqbWF0Y2hfY29udGV4dDsKK3N0YXRpYyBwY3JlMl9tYXRjaF9kYXRhICptYXRjaF9kYXRhOworc3RhdGljIFBDUkUyX1NJWkUgKm9mZnNldHM7CisKK3N0YXRpYyBCT09MIGNvdW50X29ubHkgPSBGQUxTRTsKK3N0YXRpYyBCT09MIGRvX2NvbG91ciA9IEZBTFNFOworc3RhdGljIEJPT0wgZmlsZV9vZmZzZXRzID0gRkFMU0U7CitzdGF0aWMgQk9PTCBoeXBoZW5wZW5kaW5nID0gRkFMU0U7CitzdGF0aWMgQk9PTCBpbnZlcnQgPSBGQUxTRTsKK3N0YXRpYyBCT09MIGxpbmVfYnVmZmVyZWQgPSBGQUxTRTsKK3N0YXRpYyBCT09MIGxpbmVfb2Zmc2V0cyA9IEZBTFNFOworc3RhdGljIEJPT0wgbXVsdGlsaW5lID0gRkFMU0U7CitzdGF0aWMgQk9PTCBudW1iZXIgPSBGQUxTRTsKK3N0YXRpYyBCT09MIG9taXRfemVyb19jb3VudCA9IEZBTFNFOworc3RhdGljIEJPT0wgcmVzb3VyY2VfZXJyb3IgPSBGQUxTRTsKK3N0YXRpYyBCT09MIHF1aWV0ID0gRkFMU0U7CitzdGF0aWMgQk9PTCBzaG93X29ubHlfbWF0Y2hpbmcgPSBGQUxTRTsKK3N0YXRpYyBCT09MIHNpbGVudCA9IEZBTFNFOworc3RhdGljIEJPT0wgdXRmID0gRkFMU0U7CisKKy8qIFN0cnVjdHVyZSBmb3IgbGlzdCBvZiAtLW9ubHktbWF0Y2hpbmcgY2FwdHVyaW5nIG51bWJlcnMuICovCisKK3R5cGVkZWYgc3RydWN0IG9tc3RyIHsKKyAgc3RydWN0IG9tc3RyICpuZXh0OworICBpbnQgZ3JvdXBudW07Cit9IG9tc3RyOworCitzdGF0aWMgb21zdHIgKm9ubHlfbWF0Y2hpbmcgPSBOVUxMOworc3RhdGljIG9tc3RyICpvbmx5X21hdGNoaW5nX2xhc3QgPSBOVUxMOworCisvKiBTdHJ1Y3R1cmUgZm9yIGhvbGRpbmcgdGhlIHR3byB2YXJpYWJsZXMgdGhhdCBkZXNjcmliZSBhIG51bWJlciBjaGFpbi4gKi8KKwordHlwZWRlZiBzdHJ1Y3Qgb21kYXRhc3RyIHsKKyAgb21zdHIgKiphbmNob3I7CisgIG9tc3RyICoqbGFzdHB0cjsKK30gb21kYXRhc3RyOworCitzdGF0aWMgb21kYXRhc3RyIG9ubHlfbWF0Y2hpbmdfZGF0YSA9IHsgJm9ubHlfbWF0Y2hpbmcsICZvbmx5X21hdGNoaW5nX2xhc3QgfTsKKworLyogU3RydWN0dXJlIGZvciBsaXN0IG9mIGZpbGUgbmFtZXMgKGZvciAtZiBhbmQgLS17aW4sZXh9Y2x1ZGUtZnJvbSkgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZm5zdHIgeworICBzdHJ1Y3QgZm5zdHIgKm5leHQ7CisgIGNoYXIgKm5hbWU7Cit9IGZuc3RyOworCitzdGF0aWMgZm5zdHIgKmV4Y2x1ZGVfZnJvbSA9IE5VTEw7CitzdGF0aWMgZm5zdHIgKmV4Y2x1ZGVfZnJvbV9sYXN0ID0gTlVMTDsKK3N0YXRpYyBmbnN0ciAqaW5jbHVkZV9mcm9tID0gTlVMTDsKK3N0YXRpYyBmbnN0ciAqaW5jbHVkZV9mcm9tX2xhc3QgPSBOVUxMOworCitzdGF0aWMgZm5zdHIgKmZpbGVfbGlzdHMgPSBOVUxMOworc3RhdGljIGZuc3RyICpmaWxlX2xpc3RzX2xhc3QgPSBOVUxMOworc3RhdGljIGZuc3RyICpwYXR0ZXJuX2ZpbGVzID0gTlVMTDsKK3N0YXRpYyBmbnN0ciAqcGF0dGVybl9maWxlc19sYXN0ID0gTlVMTDsKKworLyogU3RydWN0dXJlIGZvciBob2xkaW5nIHRoZSB0d28gdmFyaWFibGVzIHRoYXQgZGVzY3JpYmUgYSBmaWxlIG5hbWUgY2hhaW4uICovCisKK3R5cGVkZWYgc3RydWN0IGZuZGF0YXN0ciB7CisgIGZuc3RyICoqYW5jaG9yOworICBmbnN0ciAqKmxhc3RwdHI7Cit9IGZuZGF0YXN0cjsKKworc3RhdGljIGZuZGF0YXN0ciBleGNsdWRlX2Zyb21fZGF0YSA9IHsgJmV4Y2x1ZGVfZnJvbSwgJmV4Y2x1ZGVfZnJvbV9sYXN0IH07CitzdGF0aWMgZm5kYXRhc3RyIGluY2x1ZGVfZnJvbV9kYXRhID0geyAmaW5jbHVkZV9mcm9tLCAmaW5jbHVkZV9mcm9tX2xhc3QgfTsKK3N0YXRpYyBmbmRhdGFzdHIgZmlsZV9saXN0c19kYXRhID0geyAmZmlsZV9saXN0cywgJmZpbGVfbGlzdHNfbGFzdCB9Oworc3RhdGljIGZuZGF0YXN0ciBwYXR0ZXJuX2ZpbGVzX2RhdGEgPSB7ICZwYXR0ZXJuX2ZpbGVzLCAmcGF0dGVybl9maWxlc19sYXN0IH07CisKKy8qIFN0cnVjdHVyZSBmb3IgcGF0dGVybiBhbmQgaXRzIGNvbXBpbGVkIGZvcm07IHVzZWQgZm9yIG1hdGNoaW5nIHBhdHRlcm5zIGFuZAorYWxzbyBmb3IgaW5jbHVkZS9leGNsdWRlIHBhdHRlcm5zLiAqLworCit0eXBlZGVmIHN0cnVjdCBwYXRzdHIgeworICBzdHJ1Y3QgcGF0c3RyICpuZXh0OworICBjaGFyICpzdHJpbmc7CisgIHBjcmUyX2NvZGUgKmNvbXBpbGVkOworfSBwYXRzdHI7CisKK3N0YXRpYyBwYXRzdHIgKnBhdHRlcm5zID0gTlVMTDsKK3N0YXRpYyBwYXRzdHIgKnBhdHRlcm5zX2xhc3QgPSBOVUxMOworc3RhdGljIHBhdHN0ciAqaW5jbHVkZV9wYXR0ZXJucyA9IE5VTEw7CitzdGF0aWMgcGF0c3RyICppbmNsdWRlX3BhdHRlcm5zX2xhc3QgPSBOVUxMOworc3RhdGljIHBhdHN0ciAqZXhjbHVkZV9wYXR0ZXJucyA9IE5VTEw7CitzdGF0aWMgcGF0c3RyICpleGNsdWRlX3BhdHRlcm5zX2xhc3QgPSBOVUxMOworc3RhdGljIHBhdHN0ciAqaW5jbHVkZV9kaXJfcGF0dGVybnMgPSBOVUxMOworc3RhdGljIHBhdHN0ciAqaW5jbHVkZV9kaXJfcGF0dGVybnNfbGFzdCA9IE5VTEw7CitzdGF0aWMgcGF0c3RyICpleGNsdWRlX2Rpcl9wYXR0ZXJucyA9IE5VTEw7CitzdGF0aWMgcGF0c3RyICpleGNsdWRlX2Rpcl9wYXR0ZXJuc19sYXN0ID0gTlVMTDsKKworLyogU3RydWN0dXJlIGhvbGRpbmcgdGhlIHR3byB2YXJpYWJsZXMgdGhhdCBkZXNjcmliZSBhIHBhdHRlcm4gY2hhaW4uIEEgcG9pbnRlcgordG8gc3VjaCBzdHJ1Y3R1cmVzIGlzIHVzZWQgZm9yIGVhY2ggYXBwcm9wcmlhdGUgb3B0aW9uLiAqLworCit0eXBlZGVmIHN0cnVjdCBwYXRkYXRhc3RyIHsKKyAgcGF0c3RyICoqYW5jaG9yOworICBwYXRzdHIgKipsYXN0cHRyOworfSBwYXRkYXRhc3RyOworCitzdGF0aWMgcGF0ZGF0YXN0ciBtYXRjaF9wYXRkYXRhID0geyAmcGF0dGVybnMsICZwYXR0ZXJuc19sYXN0IH07CitzdGF0aWMgcGF0ZGF0YXN0ciBpbmNsdWRlX3BhdGRhdGEgPSB7ICZpbmNsdWRlX3BhdHRlcm5zLCAmaW5jbHVkZV9wYXR0ZXJuc19sYXN0IH07CitzdGF0aWMgcGF0ZGF0YXN0ciBleGNsdWRlX3BhdGRhdGEgPSB7ICZleGNsdWRlX3BhdHRlcm5zLCAmZXhjbHVkZV9wYXR0ZXJuc19sYXN0IH07CitzdGF0aWMgcGF0ZGF0YXN0ciBpbmNsdWRlX2Rpcl9wYXRkYXRhID0geyAmaW5jbHVkZV9kaXJfcGF0dGVybnMsICZpbmNsdWRlX2Rpcl9wYXR0ZXJuc19sYXN0IH07CitzdGF0aWMgcGF0ZGF0YXN0ciBleGNsdWRlX2Rpcl9wYXRkYXRhID0geyAmZXhjbHVkZV9kaXJfcGF0dGVybnMsICZleGNsdWRlX2Rpcl9wYXR0ZXJuc19sYXN0IH07CisKK3N0YXRpYyBwYXRzdHIgKippbmNleGxpc3RbNF0gPSB7ICZpbmNsdWRlX3BhdHRlcm5zLCAmZXhjbHVkZV9wYXR0ZXJucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbmNsdWRlX2Rpcl9wYXR0ZXJucywgJmV4Y2x1ZGVfZGlyX3BhdHRlcm5zIH07CisKK3N0YXRpYyBjb25zdCBjaGFyICppbmNleG5hbWVbNF0gPSB7ICItLWluY2x1ZGUiLCAiLS1leGNsdWRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItLWluY2x1ZGUtZGlyIiwgIi0tZXhjbHVkZS1kaXIiIH07CisKKy8qIFN0cnVjdHVyZSBmb3Igb3B0aW9ucyBhbmQgbGlzdCBvZiB0aGVtICovCisKK2VudW0geyBPUF9OT0RBVEEsIE9QX1NUUklORywgT1BfT1BfU1RSSU5HLCBPUF9OVU1CRVIsIE9QX1UzMk5VTUJFUiwKKyAgICAgICBPUF9PUF9OVU1CRVIsIE9QX09QX05VTUJFUlMsIE9QX1BBVExJU1QsIE9QX0ZJTEVMSVNULCBPUF9CSU5GSUxFUyB9OworCit0eXBlZGVmIHN0cnVjdCBvcHRpb25faXRlbSB7CisgIGludCB0eXBlOworICBpbnQgb25lX2NoYXI7CisgIHZvaWQgKmRhdGFwdHI7CisgIGNvbnN0IGNoYXIgKmxvbmdfbmFtZTsKKyAgY29uc3QgY2hhciAqaGVscF90ZXh0OworfSBvcHRpb25faXRlbTsKKworLyogT3B0aW9ucyB3aXRob3V0IGEgc2luZ2xlLWxldHRlciBlcXVpdmFsZW50IGdldCBhIG5lZ2F0aXZlIHZhbHVlLiBUaGlzIGNhbiBiZQordXNlZCB0byBpZGVudGlmeSB0aGVtLiAqLworCisjZGVmaW5lIE5fQ09MT1VSICAgICAgICgtMSkKKyNkZWZpbmUgTl9FWENMVURFICAgICAgKC0yKQorI2RlZmluZSBOX0VYQ0xVREVfRElSICAoLTMpCisjZGVmaW5lIE5fSEVMUCAgICAgICAgICgtNCkKKyNkZWZpbmUgTl9JTkNMVURFICAgICAgKC01KQorI2RlZmluZSBOX0lOQ0xVREVfRElSICAoLTYpCisjZGVmaW5lIE5fTEFCRUwgICAgICAgICgtNykKKyNkZWZpbmUgTl9MT0NBTEUgICAgICAgKC04KQorI2RlZmluZSBOX05VTEwgICAgICAgICAoLTkpCisjZGVmaW5lIE5fTE9GRlNFVFMgICAgICgtMTApCisjZGVmaW5lIE5fRk9GRlNFVFMgICAgICgtMTEpCisjZGVmaW5lIE5fTEJVRkZFUiAgICAgICgtMTIpCisjZGVmaW5lIE5fTV9MSU1JVCAgICAgICgtMTMpCisjZGVmaW5lIE5fTV9MSU1JVF9SRUMgICgtMTQpCisjZGVmaW5lIE5fQlVGU0laRSAgICAgICgtMTUpCisjZGVmaW5lIE5fTk9KSVQgICAgICAgICgtMTYpCisjZGVmaW5lIE5fRklMRV9MSVNUICAgICgtMTcpCisjZGVmaW5lIE5fQklOQVJZX0ZJTEVTICgtMTgpCisjZGVmaW5lIE5fRVhDTFVERV9GUk9NICgtMTkpCisjZGVmaW5lIE5fSU5DTFVERV9GUk9NICgtMjApCisjZGVmaW5lIE5fT01fU0VQQVJBVE9SICgtMjEpCisKK3N0YXRpYyBvcHRpb25faXRlbSBvcHRpb25saXN0W10gPSB7CisgIHsgT1BfTk9EQVRBLCAgICAgTl9OVUxMLCAgIE5VTEwsICAgICAgICAgICAgICAiIiwgICAgICAgICAgICAgICJ0ZXJtaW5hdGUgb3B0aW9ucyIgfSwKKyAgeyBPUF9OT0RBVEEsICAgICBOX0hFTFAsICAgTlVMTCwgICAgICAgICAgICAgICJoZWxwIiwgICAgICAgICAgImRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0IiB9LAorICB7IE9QX05VTUJFUiwgICAgICdBJywgICAgICAmYWZ0ZXJfY29udGV4dCwgICAgImFmdGVyLWNvbnRleHQ9bnVtYmVyIiwgInNldCBudW1iZXIgb2YgZm9sbG93aW5nIGNvbnRleHQgbGluZXMiIH0sCisgIHsgT1BfTk9EQVRBLCAgICAgJ2EnLCAgICAgIE5VTEwsICAgICAgICAgICAgICAidGV4dCIsICAgICAgICAgICJ0cmVhdCBiaW5hcnkgZmlsZXMgYXMgdGV4dCIgfSwKKyAgeyBPUF9OVU1CRVIsICAgICAnQicsICAgICAgJmJlZm9yZV9jb250ZXh0LCAgICJiZWZvcmUtY29udGV4dD1udW1iZXIiLCAic2V0IG51bWJlciBvZiBwcmlvciBjb250ZXh0IGxpbmVzIiB9LAorICB7IE9QX0JJTkZJTEVTLCAgIE5fQklOQVJZX0ZJTEVTLCBOVUxMLCAgICAgICAgImJpbmFyeS1maWxlcz13b3JkIiwgInNldCB0cmVhdG1lbnQgb2YgYmluYXJ5IGZpbGVzIiB9LAorICB7IE9QX05VTUJFUiwgICAgIE5fQlVGU0laRSwmYnVmdGhpcmQsICAgICAgICAgImJ1ZmZlci1zaXplPW51bWJlciIsICJzZXQgcHJvY2Vzc2luZyBidWZmZXIgc2l6ZSBwYXJhbWV0ZXIiIH0sCisgIHsgT1BfT1BfU1RSSU5HLCAgTl9DT0xPVVIsICZjb2xvdXJfb3B0aW9uLCAgICAiY29sb3I9b3B0aW9uIiwgICJtYXRjaGVkIHRleHQgY29sb3Igb3B0aW9uIiB9LAorICB7IE9QX09QX1NUUklORywgIE5fQ09MT1VSLCAmY29sb3VyX29wdGlvbiwgICAgImNvbG91cj1vcHRpb24iLCAibWF0Y2hlZCB0ZXh0IGNvbG91ciBvcHRpb24iIH0sCisgIHsgT1BfTlVNQkVSLCAgICAgJ0MnLCAgICAgICZib3RoX2NvbnRleHQsICAgICAiY29udGV4dD1udW1iZXIiLCAic2V0IG51bWJlciBvZiBjb250ZXh0IGxpbmVzLCBiZWZvcmUgJiBhZnRlciIgfSwKKyAgeyBPUF9OT0RBVEEsICAgICAnYycsICAgICAgTlVMTCwgICAgICAgICAgICAgICJjb3VudCIsICAgICAgICAgInByaW50IG9ubHkgYSBjb3VudCBvZiBtYXRjaGluZyBsaW5lcyBwZXIgRklMRSIgfSwKKyAgeyBPUF9TVFJJTkcsICAgICAnRCcsICAgICAgJkRFRV9vcHRpb24sICAgICAgICJkZXZpY2VzPWFjdGlvbiIsImhvdyB0byBoYW5kbGUgZGV2aWNlcywgRklGT3MsIGFuZCBzb2NrZXRzIiB9LAorICB7IE9QX1NUUklORywgICAgICdkJywgICAgICAmZGVlX29wdGlvbiwgICAgICAgImRpcmVjdG9yaWVzPWFjdGlvbiIsICJob3cgdG8gaGFuZGxlIGRpcmVjdG9yaWVzIiB9LAorICB7IE9QX1BBVExJU1QsICAgICdlJywgICAgICAmbWF0Y2hfcGF0ZGF0YSwgICAgInJlZ2V4KHApPXBhdHRlcm4iLCAic3BlY2lmeSBwYXR0ZXJuIChtYXkgYmUgdXNlZCBtb3JlIHRoYW4gb25jZSkiIH0sCisgIHsgT1BfTk9EQVRBLCAgICAgJ0YnLCAgICAgIE5VTEwsICAgICAgICAgICAgICAiZml4ZWQtc3RyaW5ncyIsICJwYXR0ZXJucyBhcmUgc2V0cyBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIiB9LAorICB7IE9QX0ZJTEVMSVNULCAgICdmJywgICAgICAmcGF0dGVybl9maWxlc19kYXRhLCAiZmlsZT1wYXRoIiwgICAicmVhZCBwYXR0ZXJucyBmcm9tIGZpbGUiIH0sCisgIHsgT1BfRklMRUxJU1QsICAgTl9GSUxFX0xJU1QsICZmaWxlX2xpc3RzX2RhdGEsICJmaWxlLWxpc3Q9cGF0aCIsInJlYWQgZmlsZXMgdG8gc2VhcmNoIGZyb20gZmlsZSIgfSwKKyAgeyBPUF9OT0RBVEEsICAgICBOX0ZPRkZTRVRTLCBOVUxMLCAgICAgICAgICAgICJmaWxlLW9mZnNldHMiLCAgIm91dHB1dCBmaWxlIG9mZnNldHMsIG5vdCB0ZXh0IiB9LAorICB7IE9QX05PREFUQSwgICAgICdIJywgICAgICBOVUxMLCAgICAgICAgICAgICAgIndpdGgtZmlsZW5hbWUiLCAiZm9yY2UgdGhlIHByZWZpeGluZyBmaWxlbmFtZSBvbiBvdXRwdXQiIH0sCisgIHsgT1BfTk9EQVRBLCAgICAgJ2gnLCAgICAgIE5VTEwsICAgICAgICAgICAgICAibm8tZmlsZW5hbWUiLCAgICJzdXBwcmVzcyB0aGUgcHJlZml4aW5nIGZpbGVuYW1lIG9uIG91dHB1dCIgfSwKKyAgeyBPUF9OT0RBVEEsICAgICAnSScsICAgICAgTlVMTCwgICAgICAgICAgICAgICIiLCAgICAgICAgICAgICAgInRyZWF0IGJpbmFyeSBmaWxlcyBhcyBub3QgbWF0Y2hpbmcgKGlnbm9yZSkiIH0sCisgIHsgT1BfTk9EQVRBLCAgICAgJ2knLCAgICAgIE5VTEwsICAgICAgICAgICAgICAiaWdub3JlLWNhc2UiLCAgICJpZ25vcmUgY2FzZSBkaXN0aW5jdGlvbnMiIH0sCisjaWZkZWYgU1VQUE9SVF9QQ1JFMkdSRVBfSklUCisgIHsgT1BfTk9EQVRBLCAgICAgTl9OT0pJVCwgIE5VTEwsICAgICAgICAgICAgICAibm8taml0IiwgICAgICAgICJkbyBub3QgdXNlIGp1c3QtaW4tdGltZSBjb21waWxlciBvcHRpbWl6YXRpb24iIH0sCisjZWxzZQorICB7IE9QX05PREFUQSwgICAgIE5fTk9KSVQsICBOVUxMLCAgICAgICAgICAgICAgIm5vLWppdCIsICAgICAgICAiaWdub3JlZDogdGhpcyBwY3JlMmdyZXAgZG9lcyBub3Qgc3VwcG9ydCBKSVQiIH0sCisjZW5kaWYKKyAgeyBPUF9OT0RBVEEsICAgICAnbCcsICAgICAgTlVMTCwgICAgICAgICAgICAgICJmaWxlcy13aXRoLW1hdGNoZXMiLCAicHJpbnQgb25seSBGSUxFIG5hbWVzIGNvbnRhaW5pbmcgbWF0Y2hlcyIgfSwKKyAgeyBPUF9OT0RBVEEsICAgICAnTCcsICAgICAgTlVMTCwgICAgICAgICAgICAgICJmaWxlcy13aXRob3V0LW1hdGNoIiwicHJpbnQgb25seSBGSUxFIG5hbWVzIG5vdCBjb250YWluaW5nIG1hdGNoZXMiIH0sCisgIHsgT1BfU1RSSU5HLCAgICAgTl9MQUJFTCwgICZzdGRpbl9uYW1lLCAgICAgICAibGFiZWw9bmFtZSIsICAgICJzZXQgbmFtZSBmb3Igc3RhbmRhcmQgaW5wdXQiIH0sCisgIHsgT1BfTk9EQVRBLCAgICAgTl9MQlVGRkVSLCBOVUxMLCAgICAgICAgICAgICAibGluZS1idWZmZXJlZCIsICJ1c2UgbGluZSBidWZmZXJpbmciIH0sCisgIHsgT1BfTk9EQVRBLCAgICAgTl9MT0ZGU0VUUywgTlVMTCwgICAgICAgICAgICAibGluZS1vZmZzZXRzIiwgICJvdXRwdXQgbGluZSBudW1iZXJzIGFuZCBvZmZzZXRzLCBub3QgdGV4dCIgfSwKKyAgeyBPUF9TVFJJTkcsICAgICBOX0xPQ0FMRSwgJmxvY2FsZSwgICAgICAgICAgICJsb2NhbGU9bG9jYWxlIiwgInVzZSB0aGUgbmFtZWQgbG9jYWxlIiB9LAorICB7IE9QX1UzMk5VTUJFUiwgIE5fTV9MSU1JVCwgJm1hdGNoX2xpbWl0LCAgICAgIm1hdGNoLWxpbWl0PW51bWJlciIsICJzZXQgUENSRSBtYXRjaCBsaW1pdCBvcHRpb24iIH0sCisgIHsgT1BfVTMyTlVNQkVSLCAgTl9NX0xJTUlUX1JFQywgJnJlY3Vyc2lvbl9saW1pdCwgInJlY3Vyc2lvbi1saW1pdD1udW1iZXIiLCAic2V0IFBDUkUgbWF0Y2ggcmVjdXJzaW9uIGxpbWl0IG9wdGlvbiIgfSwKKyAgeyBPUF9OT0RBVEEsICAgICAnTScsICAgICAgTlVMTCwgICAgICAgICAgICAgICJtdWx0aWxpbmUiLCAgICAgInJ1biBpbiBtdWx0aWxpbmUgbW9kZSIgfSwKKyAgeyBPUF9TVFJJTkcsICAgICAnTicsICAgICAgJm5ld2xpbmVfYXJnLCAgICAgICJuZXdsaW5lPXR5cGUiLCAgInNldCBuZXdsaW5lIHR5cGUgKENSLCBMRiwgQ1JMRiwgQU5ZQ1JMRiBvciBBTlkpIiB9LAorICB7IE9QX05PREFUQSwgICAgICduJywgICAgICBOVUxMLCAgICAgICAgICAgICAgImxpbmUtbnVtYmVyIiwgICAicHJpbnQgbGluZSBudW1iZXIgd2l0aCBvdXRwdXQgbGluZXMiIH0sCisgIHsgT1BfT1BfTlVNQkVSUywgJ28nLCAgICAgICZvbmx5X21hdGNoaW5nX2RhdGEsICJvbmx5LW1hdGNoaW5nPW4iLCAic2hvdyBvbmx5IHRoZSBwYXJ0IG9mIHRoZSBsaW5lIHRoYXQgbWF0Y2hlZCIgfSwKKyAgeyBPUF9TVFJJTkcsICAgICBOX09NX1NFUEFSQVRPUiwgJm9tX3NlcGFyYXRvciwgIm9tLXNlcGFyYXRvcj10ZXh0IiwgInNldCBzZXBhcmF0b3IgZm9yIG11bHRpcGxlIC1vIG91dHB1dCIgfSwKKyAgeyBPUF9OT0RBVEEsICAgICAncScsICAgICAgTlVMTCwgICAgICAgICAgICAgICJxdWlldCIsICAgICAgICAgInN1cHByZXNzIG91dHB1dCwganVzdCBzZXQgcmV0dXJuIGNvZGUiIH0sCisgIHsgT1BfTk9EQVRBLCAgICAgJ3InLCAgICAgIE5VTEwsICAgICAgICAgICAgICAicmVjdXJzaXZlIiwgICAgICJyZWN1cnNpdmVseSBzY2FuIHN1Yi1kaXJlY3RvcmllcyIgfSwKKyAgeyBPUF9QQVRMSVNULCAgICBOX0VYQ0xVREUsJmV4Y2x1ZGVfcGF0ZGF0YSwgICJleGNsdWRlPXBhdHRlcm4iLCJleGNsdWRlIG1hdGNoaW5nIGZpbGVzIHdoZW4gcmVjdXJzaW5nIiB9LAorICB7IE9QX1BBVExJU1QsICAgIE5fSU5DTFVERSwmaW5jbHVkZV9wYXRkYXRhLCAgImluY2x1ZGU9cGF0dGVybiIsImluY2x1ZGUgbWF0Y2hpbmcgZmlsZXMgd2hlbiByZWN1cnNpbmciIH0sCisgIHsgT1BfUEFUTElTVCwgICAgTl9FWENMVURFX0RJUiwmZXhjbHVkZV9kaXJfcGF0ZGF0YSwgImV4Y2x1ZGUtZGlyPXBhdHRlcm4iLCJleGNsdWRlIG1hdGNoaW5nIGRpcmVjdG9yaWVzIHdoZW4gcmVjdXJzaW5nIiB9LAorICB7IE9QX1BBVExJU1QsICAgIE5fSU5DTFVERV9ESVIsJmluY2x1ZGVfZGlyX3BhdGRhdGEsICJpbmNsdWRlLWRpcj1wYXR0ZXJuIiwiaW5jbHVkZSBtYXRjaGluZyBkaXJlY3RvcmllcyB3aGVuIHJlY3Vyc2luZyIgfSwKKyAgeyBPUF9GSUxFTElTVCwgICBOX0VYQ0xVREVfRlJPTSwmZXhjbHVkZV9mcm9tX2RhdGEsICJleGNsdWRlLWZyb209cGF0aCIsICJyZWFkIGV4Y2x1ZGUgbGlzdCBmcm9tIGZpbGUiIH0sCisgIHsgT1BfRklMRUxJU1QsICAgTl9JTkNMVURFX0ZST00sJmluY2x1ZGVfZnJvbV9kYXRhLCAiaW5jbHVkZS1mcm9tPXBhdGgiLCAicmVhZCBpbmNsdWRlIGxpc3QgZnJvbSBmaWxlIiB9LAorI2lmZGVmIEpGUklFRExfREVCVUcKKyAgeyBPUF9PUF9OVU1CRVIsICdTJywgICAgICAmU19hcmcsICAgICAgICAgICAgImplZmZTIiwgICAgICAgICAicmVwbGFjZSBtYXRjaGVkIChzdWIpc3RyaW5nIHdpdGggWCIgfSwKKyNlbmRpZgorICB7IE9QX05PREFUQSwgICAgJ3MnLCAgICAgIE5VTEwsICAgICAgICAgICAgICAibm8tbWVzc2FnZXMiLCAgICJzdXBwcmVzcyBlcnJvciBtZXNzYWdlcyIgfSwKKyAgeyBPUF9OT0RBVEEsICAgICd1JywgICAgICBOVUxMLCAgICAgICAgICAgICAgInV0ZiIsICAgICAgICAgICAidXNlIFVURiBtb2RlIiB9LAorICB7IE9QX05PREFUQSwgICAgJ1YnLCAgICAgIE5VTEwsICAgICAgICAgICAgICAidmVyc2lvbiIsICAgICAgICJwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0IiB9LAorICB7IE9QX05PREFUQSwgICAgJ3YnLCAgICAgIE5VTEwsICAgICAgICAgICAgICAiaW52ZXJ0LW1hdGNoIiwgICJzZWxlY3Qgbm9uLW1hdGNoaW5nIGxpbmVzIiB9LAorICB7IE9QX05PREFUQSwgICAgJ3cnLCAgICAgIE5VTEwsICAgICAgICAgICAgICAid29yZC1yZWdleChwKSIsICJmb3JjZSBwYXR0ZXJucyB0byBtYXRjaCBvbmx5IGFzIHdvcmRzIiAgfSwKKyAgeyBPUF9OT0RBVEEsICAgICd4JywgICAgICBOVUxMLCAgICAgICAgICAgICAgImxpbmUtcmVnZXgocCkiLCAiZm9yY2UgcGF0dGVybnMgdG8gbWF0Y2ggb25seSB3aG9sZSBsaW5lcyIgfSwKKyAgeyBPUF9OT0RBVEEsICAgIDAsICAgICAgICBOVUxMLCAgICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgTlVMTCB9Cit9OworCisvKiBUYWJsZSBvZiBuYW1lcyBmb3IgbmV3bGluZSB0eXBlcy4gTXVzdCBiZSBrZXB0IGluIHN0ZXAgd2l0aCB0aGUgZGVmaW5pdGlvbnMKK29mIFBDUkUyX05FV0xJTkVfeHggaW4gcGNyZTIuaC4gKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKm5ld2xpbmVzW10gPSB7CisgICJERUZBVUxUIiwgIkNSIiwgIkxGIiwgIkNSTEYiLCAiQU5ZIiwgIkFOWUNSTEYiIH07CisKKy8qIFRhYmxlcyBmb3IgcHJlZml4aW5nIGFuZCBzdWZmaXhpbmcgcGF0dGVybnMsIGFjY29yZGluZyB0byB0aGUgLXcsIC14LCBhbmQgLUYKK29wdGlvbnMuIFRoZXNlIHNldCB0aGUgMSwgMiwgYW5kIDQgYml0cyBpbiBwcm9jZXNzX29wdGlvbnMsIHJlc3BlY3RpdmVseS4gTm90ZQordGhhdCB0aGUgY29tYmluYXRpb24gb2YgLXcgYW5kIC14IGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMgLXggb24gaXRzIG93biwgc28gd2UKK2NhbiB0cmVhdCB0aGVtIGFzIHRoZSBzYW1lLiBOb3RlIHRoYXQgdGhlIE1BWFBBVExFTiBtYWNybyBhc3N1bWVzIHRoZSBsb25nZXN0CitwcmVmaXgrc3VmZml4IGlzIDEwIGNoYXJhY3RlcnM7IGlmIGFueXRoaW5nIGxvbmdlciBpcyBhZGRlZCwgaXQgbXVzdCBiZQorYWRqdXN0ZWQuICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpwcmVmaXhbXSA9IHsKKyAgIiIsICJcXGIiLCAiXig/OiIsICJeKD86IiwgIlxcUSIsICJcXGJcXFEiLCAiXig/OlxcUSIsICJeKD86XFxRIiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3VmZml4W10gPSB7CisgICIiLCAiXFxiIiwgIikkIiwgICAiKSQiLCAgICJcXEUiLCAiXFxFXFxiIiwgIlxcRSkkIiwgICAiXFxFKSQiIH07CisKKy8qIFVURi04IHRhYmxlcyAtIHVzZWQgb25seSB3aGVuIHRoZSBuZXdsaW5lIHNldHRpbmcgaXMgImFueSIuICovCisKK2NvbnN0IGludCB1dGY4X3RhYmxlM1tdID0geyAweGZmLCAweDFmLCAweDBmLCAweDA3LCAweDAzLCAweDAxfTsKKworY29uc3QgY2hhciB1dGY4X3RhYmxlNFtdID0geworICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorICAxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLAorICAyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLDIsMiwyLAorICAzLDMsMywzLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1IH07CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgIENhc2UtaW5kZXBlbmRlbnQgc3RyaW5nIGNvbXBhcmUgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK3N0cmNtcGljKGNvbnN0IGNoYXIgKnN0cjEsIGNvbnN0IGNoYXIgKnN0cjIpCit7Cit1bnNpZ25lZCBpbnQgYzEsIGMyOword2hpbGUgKCpzdHIxICE9ICdcMCcgfHwgKnN0cjIgIT0gJ1wwJykKKyAgeworICBjMSA9IHRvbG93ZXIoKnN0cjErKyk7CisgIGMyID0gdG9sb3dlcigqc3RyMisrKTsKKyAgaWYgKGMxICE9IGMyKSByZXR1cm4gKChjMSA+IGMyKSA8PCAxKSAtIDE7CisgIH0KK3JldHVybiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICBFeGl0IGZyb20gdGhlIHByb2dyYW0gICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJZiB0aGVyZSBoYXMgYmVlbiBhIHJlc291cmNlIGVycm9yLCBnaXZlIGEgc3VpdGFibGUgbWVzc2FnZS4KKworQXJndW1lbnQ6ICB0aGUgcmV0dXJuIGNvZGUKK1JldHVybnM6ICAgZG9lcyBub3QgcmV0dXJuCisqLworCitzdGF0aWMgdm9pZAorcGNyZTJncmVwX2V4aXQoaW50IHJjKQoreworaWYgKHJlc291cmNlX2Vycm9yKQorICB7CisgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBFcnJvciAlZCwgJWQgb3IgJWQgbWVhbnMgdGhhdCBhIHJlc291cmNlIGxpbWl0ICIKKyAgICAid2FzIGV4Y2VlZGVkLlxuIiwgUENSRTJfRVJST1JfSklUX1NUQUNLTElNSVQsIFBDUkUyX0VSUk9SX01BVENITElNSVQsCisgICAgUENSRTJfRVJST1JfUkVDVVJTSU9OTElNSVQpOworICBmcHJpbnRmKHN0ZGVyciwgInBjcmUyZ3JlcDogQ2hlY2sgeW91ciByZWdleCBmb3IgbmVzdGVkIHVubGltaXRlZCBsb29wcy5cbiIpOworICB9CitleGl0KHJjKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICBBZGQgaXRlbSB0byBjaGFpbiBvZiBwYXR0ZXJucyAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFVzZWQgdG8gYWRkIGFuIGl0ZW0gb250byBhIGNoYWluLCBvciBqdXN0IHJldHVybiBhbiB1bmNvbm5lY3RlZCBpdGVtIGlmIHRoZQorImFmdGVyIiBhcmd1bWVudCBpcyBOVUxMLgorCitBcmd1bWVudHM6CisgIHMgICAgICAgICAgcGF0dGVybiBzdHJpbmcgdG8gYWRkCisgIGFmdGVyICAgICAgaWYgbm90IE5VTEwgcG9pbnRzIHRvIGl0ZW0gdG8gaW5zZXJ0IGFmdGVyCisKK1JldHVybnM6ICAgICBuZXcgcGF0dGVybiBibG9jayBvciBOVUxMIG9uIGVycm9yCisqLworCitzdGF0aWMgcGF0c3RyICoKK2FkZF9wYXR0ZXJuKGNoYXIgKnMsIHBhdHN0ciAqYWZ0ZXIpCit7CitwYXRzdHIgKnAgPSAocGF0c3RyICopbWFsbG9jKHNpemVvZihwYXRzdHIpKTsKK2lmIChwID09IE5VTEwpCisgIHsKKyAgZnByaW50ZihzdGRlcnIsICJwY3JlMmdyZXA6IG1hbGxvYyBmYWlsZWRcbiIpOworICBwY3JlMmdyZXBfZXhpdCgyKTsKKyAgfQoraWYgKHN0cmxlbihzKSA+IE1BWFBBVExFTikKKyAgeworICBmcHJpbnRmKHN0ZGVyciwgInBjcmUyZ3JlcDogcGF0dGVybiBpcyB0b28gbG9uZyAobGltaXQgaXMgJWQgYnl0ZXMpXG4iLAorICAgIE1BWFBBVExFTik7CisgIGZyZWUocCk7CisgIHJldHVybiBOVUxMOworICB9CitwLT5uZXh0ID0gTlVMTDsKK3AtPnN0cmluZyA9IHM7CitwLT5jb21waWxlZCA9IE5VTEw7CisKK2lmIChhZnRlciAhPSBOVUxMKQorICB7CisgIHAtPm5leHQgPSBhZnRlci0+bmV4dDsKKyAgYWZ0ZXItPm5leHQgPSBwOworICB9CityZXR1cm4gcDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgRnJlZSBjaGFpbiBvZiBwYXR0ZXJucyAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFVzZWQgZm9yIHNldmVyYWwgY2hhaW5zIG9mIHBhdHRlcm5zLgorCitBcmd1bWVudDogcG9pbnRlciB0byBzdGFydCBvZiBjaGFpbgorUmV0dXJuczogIG5vdGhpbmcKKyovCisKK3N0YXRpYyB2b2lkCitmcmVlX3BhdHRlcm5fY2hhaW4ocGF0c3RyICpwYykKK3sKK3doaWxlIChwYyAhPSBOVUxMKQorICB7CisgIHBhdHN0ciAqcCA9IHBjOworICBwYyA9IHAtPm5leHQ7CisgIGlmIChwLT5jb21waWxlZCAhPSBOVUxMKSBwY3JlMl9jb2RlX2ZyZWUocC0+Y29tcGlsZWQpOworICBmcmVlKHApOworICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgIEZyZWUgY2hhaW4gb2YgZmlsZSBuYW1lcyAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorQXJndW1lbnQ6IHBvaW50ZXIgdG8gc3RhcnQgb2YgY2hhaW4KK1JldHVybnM6ICBub3RoaW5nCisqLworCitzdGF0aWMgdm9pZAorZnJlZV9maWxlX2NoYWluKGZuc3RyICpmbikKK3sKK3doaWxlIChmbiAhPSBOVUxMKQorICB7CisgIGZuc3RyICpmID0gZm47CisgIGZuID0gZi0+bmV4dDsKKyAgZnJlZShmKTsKKyAgfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgT1Mtc3BlY2lmaWMgZnVuY3Rpb25zICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhlc2UgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIHNvIHRoYXQgdGhleSBjYW4gYmUgbWFkZSBzeXN0ZW0gc3BlY2lmaWMuCitBdCBwcmVzZW50IHRoZXJlIGFyZSB2ZXJzaW9ucyBmb3IgVW5peC1zdHlsZSBlbnZpcm9ubWVudHMsIFdpbmRvd3MsIG5hdGl2ZQorei9PUywgYW5kICJubyBzdXBwb3J0Ii4gKi8KKworCisvKioqKioqKioqKioqKiBEaXJlY3Rvcnkgc2Nhbm5pbmcgVW5peC1zdHlsZSBhbmQgei9PUyAqKioqKioqKioqKi8KKworI2lmIChkZWZpbmVkIEhBVkVfU1lTX1NUQVRfSCAmJiBkZWZpbmVkIEhBVkVfRElSRU5UX0ggJiYgZGVmaW5lZCBIQVZFX1NZU19UWVBFU19IKSB8fCBkZWZpbmVkIE5BVElWRV9aT1MKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorCisjaWYgZGVmaW5lZCBOQVRJVkVfWk9TCisvKioqKioqKioqKioqKiBEaXJlY3RvcnkgYW5kIFBEUy9FIHNjYW5uaW5nIGZvciB6L09TICoqKioqKioqKioqLworLyoqKioqKioqKioqKiogei9PUyBsb29rcyBtb3N0bHkgbGlrZSBVbml4IHdpdGggVVNTICoqKioqKioqKioqKi8KKy8qIEhvd2V2ZXIsIHovT1MgbmVlZHMgdGhlICNpbmNsdWRlIHN0YXRlbWVudHMgaW4gdGhpcyBoZWFkZXIgKi8KKyNpbmNsdWRlICJwY3J6b3Nmcy5oIgorLyogVGhhdCBoZWFkZXIgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBtYWluIFBDUkUgZGlzdHJpYnV0aW9uIGJlY2F1c2UKKyAgIG90aGVyIGFwcGFyYXR1cyBpcyBuZWVkZWQgdG8gY29tcGlsZSBwY3JlMmdyZXAgZm9yIHovT1MuIFRoZSBoZWFkZXIKKyAgIGNhbiBiZSBmb3VuZCBpbiB0aGUgc3BlY2lhbCB6L09TIGRpc3RyaWJ1dGlvbiwgd2hpY2ggaXMgYXZhaWxhYmxlCisgICBmcm9tIHd3dy56YWNvbnN1bHRhbnRzLm5ldCBvciBmcm9tIHd3dy5jYnR0YXBlLm9yZy4gKi8KKyNlbmRpZgorCit0eXBlZGVmIERJUiBkaXJlY3RvcnlfdHlwZTsKKyNkZWZpbmUgRklMRVNFUCAnLycKKworc3RhdGljIGludAoraXNkaXJlY3RvcnkoY2hhciAqZmlsZW5hbWUpCit7CitzdHJ1Y3Qgc3RhdCBzdGF0YnVmOworaWYgKHN0YXQoZmlsZW5hbWUsICZzdGF0YnVmKSA8IDApCisgIHJldHVybiAwOyAgICAgICAgLyogSW4gdGhlIGV4cGVjdGF0aW9uIHRoYXQgb3BlbmluZyBhcyBhIGZpbGUgd2lsbCBmYWlsICovCityZXR1cm4gU19JU0RJUihzdGF0YnVmLnN0X21vZGUpOworfQorCitzdGF0aWMgZGlyZWN0b3J5X3R5cGUgKgorb3BlbmRpcmVjdG9yeShjaGFyICpmaWxlbmFtZSkKK3sKK3JldHVybiBvcGVuZGlyKGZpbGVuYW1lKTsKK30KKworc3RhdGljIGNoYXIgKgorcmVhZGRpcmVjdG9yeShkaXJlY3RvcnlfdHlwZSAqZGlyKQoreworZm9yICg7OykKKyAgeworICBzdHJ1Y3QgZGlyZW50ICpkZW50ID0gcmVhZGRpcihkaXIpOworICBpZiAoZGVudCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKyAgaWYgKHN0cmNtcChkZW50LT5kX25hbWUsICIuIikgIT0gMCAmJiBzdHJjbXAoZGVudC0+ZF9uYW1lLCAiLi4iKSAhPSAwKQorICAgIHJldHVybiBkZW50LT5kX25hbWU7CisgIH0KKy8qIENvbnRyb2wgbmV2ZXIgcmVhY2hlcyBoZXJlICovCit9CisKK3N0YXRpYyB2b2lkCitjbG9zZWRpcmVjdG9yeShkaXJlY3RvcnlfdHlwZSAqZGlyKQoreworY2xvc2VkaXIoZGlyKTsKK30KKworCisvKioqKioqKioqKioqKiBUZXN0IGZvciByZWd1bGFyIGZpbGUsIFVuaXgtc3R5bGUgKioqKioqKioqKi8KKworc3RhdGljIGludAoraXNyZWdmaWxlKGNoYXIgKmZpbGVuYW1lKQoreworc3RydWN0IHN0YXQgc3RhdGJ1ZjsKK2lmIChzdGF0KGZpbGVuYW1lLCAmc3RhdGJ1ZikgPCAwKQorICByZXR1cm4gMTsgICAgICAgIC8qIEluIHRoZSBleHBlY3RhdGlvbiB0aGF0IG9wZW5pbmcgYXMgYSBmaWxlIHdpbGwgZmFpbCAqLworcmV0dXJuIFNfSVNSRUcoc3RhdGJ1Zi5zdF9tb2RlKTsKK30KKworCisjaWYgZGVmaW5lZCBOQVRJVkVfWk9TCisvKioqKioqKioqKioqKiBUZXN0IGZvciBhIHRlcm1pbmFsIGluIHovT1MgKioqKioqKioqKi8KKy8qIGlzYXR0eSgpIGRvZXMgbm90IHdvcmsgaW4gYSBUU08gZW52aXJvbm1lbnQsIHNvIGFsd2F5cyBnaXZlIEZBTFNFLiovCisKK3N0YXRpYyBCT09MCitpc19zdGRvdXRfdHR5KHZvaWQpCit7CityZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBCT09MCitpc19maWxlX3R0eShGSUxFICpmKQoreworcmV0dXJuIEZBTFNFOworfQorCisKKy8qKioqKioqKioqKioqIFRlc3QgZm9yIGEgdGVybWluYWwsIFVuaXgtc3R5bGUgKioqKioqKioqKi8KKworI2Vsc2UKK3N0YXRpYyBCT09MCitpc19zdGRvdXRfdHR5KHZvaWQpCit7CityZXR1cm4gaXNhdHR5KGZpbGVubyhzdGRvdXQpKTsKK30KKworc3RhdGljIEJPT0wKK2lzX2ZpbGVfdHR5KEZJTEUgKmYpCit7CityZXR1cm4gaXNhdHR5KGZpbGVubyhmKSk7Cit9CisjZW5kaWYKKworLyogRW5kIG9mIFVuaXgtc3R5bGUgb3IgbmF0aXZlIHovT1MgZW52aXJvbm1lbnQgZnVuY3Rpb25zLiAqLworCisKKy8qKioqKioqKioqKioqIERpcmVjdG9yeSBzY2FubmluZyBpbiBXaW5kb3dzICoqKioqKioqKioqLworCisvKiBJIChQaGlsaXAgSGF6ZWwpIGhhdmUgbm8gbWVhbnMgb2YgdGVzdGluZyB0aGlzIGNvZGUuIEl0IHdhcyBjb250cmlidXRlZCBieQorTGlvbmVsIEZvdXJxdWF1eC4gRGF2aWQgQnVyZ2VzcyBhZGRlZCBhIHBhdGNoIHRvIGRlZmluZSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUword2hlbiBpdCBkaWQgbm90IGV4aXN0LiBEYXZpZCBCeXJvbiBhZGRlZCBhIHBhdGNoIHRoYXQgbW92ZWQgdGhlICNpbmNsdWRlIG9mCis8d2luZG93cy5oPiB0byBiZWZvcmUgdGhlIElOVkFMSURfRklMRV9BVFRSSUJVVEVTIGRlZmluaXRpb24gcmF0aGVyIHRoYW4gYWZ0ZXIuCitUaGUgZG91YmxlIHRlc3QgYmVsb3cgc3RvcHMgZ2NjIDQuNC40IGdydW1ibGluZyB0aGF0IEhBVkVfV0lORE9XU19IIGlzCit1bmRlZmluZWQgd2hlbiBpdCBpcyBpbmRlZWQgdW5kZWZpbmVkLiAqLworCisjZWxpZiBkZWZpbmVkIEhBVkVfV0lORE9XU19IICYmIEhBVkVfV0lORE9XU19ICisKKyNpZm5kZWYgU1RSSUNUCisjIGRlZmluZSBTVFJJQ1QKKyNlbmRpZgorI2lmbmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCisjIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjZW5kaWYKKworI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworI2lmbmRlZiBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUworI2RlZmluZSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUyAweEZGRkZGRkZGCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgZGlyZWN0b3J5X3R5cGUKK3sKK0hBTkRMRSBoYW5kbGU7CitCT09MIGZpcnN0OworV0lOMzJfRklORF9EQVRBIGRhdGE7Cit9IGRpcmVjdG9yeV90eXBlOworCisjZGVmaW5lIEZJTEVTRVAgJy8nCisKK2ludAoraXNkaXJlY3RvcnkoY2hhciAqZmlsZW5hbWUpCit7CitEV09SRCBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXMoZmlsZW5hbWUpOworaWYgKGF0dHIgPT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpCisgIHJldHVybiAwOworcmV0dXJuIChhdHRyICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZKSAhPSAwOworfQorCitkaXJlY3RvcnlfdHlwZSAqCitvcGVuZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lKQoreworc2l6ZV90IGxlbjsKK2NoYXIgKnBhdHRlcm47CitkaXJlY3RvcnlfdHlwZSAqZGlyOworRFdPUkQgZXJyOworbGVuID0gc3RybGVuKGZpbGVuYW1lKTsKK3BhdHRlcm4gPSAoY2hhciAqKW1hbGxvYyhsZW4gKyAzKTsKK2RpciA9IChkaXJlY3RvcnlfdHlwZSAqKW1hbGxvYyhzaXplb2YoKmRpcikpOworaWYgKChwYXR0ZXJuID09IE5VTEwpIHx8IChkaXIgPT0gTlVMTCkpCisgIHsKKyAgZnByaW50ZihzdGRlcnIsICJwY3JlMmdyZXA6IG1hbGxvYyBmYWlsZWRcbiIpOworICBwY3JlMmdyZXBfZXhpdCgyKTsKKyAgfQorbWVtY3B5KHBhdHRlcm4sIGZpbGVuYW1lLCBsZW4pOworbWVtY3B5KCYocGF0dGVybltsZW5dKSwgIlxcKiIsIDMpOworZGlyLT5oYW5kbGUgPSBGaW5kRmlyc3RGaWxlKHBhdHRlcm4sICYoZGlyLT5kYXRhKSk7CitpZiAoZGlyLT5oYW5kbGUgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgIHsKKyAgZnJlZShwYXR0ZXJuKTsKKyAgZGlyLT5maXJzdCA9IFRSVUU7CisgIHJldHVybiBkaXI7CisgIH0KK2VyciA9IEdldExhc3RFcnJvcigpOworZnJlZShwYXR0ZXJuKTsKK2ZyZWUoZGlyKTsKK2Vycm5vID0gKGVyciA9PSBFUlJPUl9BQ0NFU1NfREVOSUVEKSA/IEVBQ0NFUyA6IEVOT0VOVDsKK3JldHVybiBOVUxMOworfQorCitjaGFyICoKK3JlYWRkaXJlY3RvcnkoZGlyZWN0b3J5X3R5cGUgKmRpcikKK3sKK2ZvciAoOzspCisgIHsKKyAgaWYgKCFkaXItPmZpcnN0KQorICAgIHsKKyAgICBpZiAoIUZpbmROZXh0RmlsZShkaXItPmhhbmRsZSwgJihkaXItPmRhdGEpKSkKKyAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBkaXItPmZpcnN0ID0gRkFMU0U7CisgICAgfQorICBpZiAoc3RyY21wKGRpci0+ZGF0YS5jRmlsZU5hbWUsICIuIikgIT0gMCAmJiBzdHJjbXAoZGlyLT5kYXRhLmNGaWxlTmFtZSwgIi4uIikgIT0gMCkKKyAgICByZXR1cm4gZGlyLT5kYXRhLmNGaWxlTmFtZTsKKyAgfQorI2lmbmRlZiBfTVNDX1ZFUgorcmV0dXJuIE5VTEw7ICAgLyogS2VlcCBjb21waWxlciBoYXBweTsgbmV2ZXIgZXhlY3V0ZWQgKi8KKyNlbmRpZgorfQorCit2b2lkCitjbG9zZWRpcmVjdG9yeShkaXJlY3RvcnlfdHlwZSAqZGlyKQoreworRmluZENsb3NlKGRpci0+aGFuZGxlKTsKK2ZyZWUoZGlyKTsKK30KKworCisvKioqKioqKioqKioqKiBUZXN0IGZvciByZWd1bGFyIGZpbGUgaW4gV2luZG93cyAqKioqKioqKioqLworCisvKiBJIGRvbid0IGtub3cgaG93IHRvIGRvIHRoaXMsIG9yIGlmIGl0IGNhbiBiZSBkb25lOyBhc3N1bWUgYWxsIHBhdGhzIGFyZQorcmVndWxhciBpZiB0aGV5IGFyZSBub3QgZGlyZWN0b3JpZXMuICovCisKK2ludCBpc3JlZ2ZpbGUoY2hhciAqZmlsZW5hbWUpCit7CityZXR1cm4gIWlzZGlyZWN0b3J5KGZpbGVuYW1lKTsKK30KKworCisvKioqKioqKioqKioqKiBUZXN0IGZvciBhIHRlcm1pbmFsIGluIFdpbmRvd3MgKioqKioqKioqKi8KKworLyogSSBkb24ndCBrbm93IGhvdyB0byBkbyB0aGlzOyBhc3N1bWUgbmV2ZXIgKi8KKworc3RhdGljIEJPT0wKK2lzX3N0ZG91dF90dHkodm9pZCkKK3sKK3JldHVybiBGQUxTRTsKK30KKworc3RhdGljIEJPT0wKK2lzX2ZpbGVfdHR5KEZJTEUgKmYpCit7CityZXR1cm4gRkFMU0U7Cit9CisKKy8qIEVuZCBvZiBXaW5kb3dzIGZ1bmN0aW9ucyAqLworCisKKy8qKioqKioqKioqKioqIERpcmVjdG9yeSBzY2FubmluZyB3aGVuIHdlIGNhbid0IGRvIGl0ICoqKioqKioqKioqLworCisvKiBUaGUgdHlwZSBpcyB2b2lkLCBhbmQgYXBhcnQgZnJvbSBpc2RpcmVjdG9yeSgpLCB0aGUgZnVuY3Rpb25zIGRvIG5vdGhpbmcuICovCisKKyNlbHNlCisKKyNkZWZpbmUgRklMRVNFUCAwCit0eXBlZGVmIHZvaWQgZGlyZWN0b3J5X3R5cGU7CisKK2ludCBpc2RpcmVjdG9yeShjaGFyICpmaWxlbmFtZSkgeyByZXR1cm4gMDsgfQorZGlyZWN0b3J5X3R5cGUgKiBvcGVuZGlyZWN0b3J5KGNoYXIgKmZpbGVuYW1lKSB7IHJldHVybiAoZGlyZWN0b3J5X3R5cGUqKTA7fQorY2hhciAqcmVhZGRpcmVjdG9yeShkaXJlY3RvcnlfdHlwZSAqZGlyKSB7IHJldHVybiAoY2hhciopMDt9Cit2b2lkIGNsb3NlZGlyZWN0b3J5KGRpcmVjdG9yeV90eXBlICpkaXIpIHt9CisKKworLyoqKioqKioqKioqKiogVGVzdCBmb3IgcmVndWxhciBmaWxlIHdoZW4gd2UgY2FuJ3QgZG8gaXQgKioqKioqKioqKi8KKworLyogQXNzdW1lIGFsbCBmaWxlcyBhcmUgcmVndWxhci4gKi8KKworaW50IGlzcmVnZmlsZShjaGFyICpmaWxlbmFtZSkgeyByZXR1cm4gMTsgfQorCisKKy8qKioqKioqKioqKioqIFRlc3QgZm9yIGEgdGVybWluYWwgd2hlbiB3ZSBjYW4ndCBkbyBpdCAqKioqKioqKioqLworCitzdGF0aWMgQk9PTAoraXNfc3Rkb3V0X3R0eSh2b2lkKQoreworcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgQk9PTAoraXNfZmlsZV90dHkoRklMRSAqZikKK3sKK3JldHVybiBGQUxTRTsKK30KKworI2VuZGlmICAvKiBFbmQgb2Ygc3lzdGVtLXNwZWNpZmljIGZ1bmN0aW9ucyAqLworCisKKworI2lmbmRlZiBIQVZFX1NUUkVSUk9SCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgUHJvdmlkZSBzdHJlcnJvcigpIGZvciBub24tQU5TSSBsaWJyYXJpZXMgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFNvbWUgb2xkLWZhc2hpb25lZCBzeXN0ZW1zIHN0aWxsIGFyb3VuZCAoZS5nLiBTdW5PUzQpIGRvbid0IGhhdmUgc3RyZXJyb3IoKQoraW4gdGhlaXIgbGlicmFyaWVzLCBidXQgY2FuIHByb3ZpZGUgdGhlIHNhbWUgZmFjaWxpdHkgYnkgdGhpcyBzaW1wbGUKK2FsdGVybmF0aXZlIGZ1bmN0aW9uLiAqLworCitleHRlcm4gaW50ICAgc3lzX25lcnI7CitleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKworY2hhciAqCitzdHJlcnJvcihpbnQgbikKK3sKK2lmIChuIDwgMCB8fCBuID49IHN5c19uZXJyKSByZXR1cm4gInVua25vd24gZXJyb3IgbnVtYmVyIjsKK3JldHVybiBzeXNfZXJybGlzdFtuXTsKK30KKyNlbmRpZiAvKiBIQVZFX1NUUkVSUk9SICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICBVc2FnZSBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK3VzYWdlKGludCByYykKK3sKK29wdGlvbl9pdGVtICpvcDsKK2ZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IHBjcmUyZ3JlcCBbLSIpOworZm9yIChvcCA9IG9wdGlvbmxpc3Q7IG9wLT5vbmVfY2hhciAhPSAwOyBvcCsrKQorICB7CisgIGlmIChvcC0+b25lX2NoYXIgPiAwKSBmcHJpbnRmKHN0ZGVyciwgIiVjIiwgb3AtPm9uZV9jaGFyKTsKKyAgfQorZnByaW50ZihzdGRlcnIsICJdIFtsb25nIG9wdGlvbnNdIFtwYXR0ZXJuXSBbZmlsZXNdXG4iKTsKK2ZwcmludGYoc3RkZXJyLCAiVHlwZSBgcGNyZTJncmVwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHRoZSBsb25nICIKKyAgIm9wdGlvbnMuXG4iKTsKK3JldHVybiByYzsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgIEhlbHAgZnVuY3Rpb24gICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2hlbHAodm9pZCkKK3sKK29wdGlvbl9pdGVtICpvcDsKKworcHJpbnRmKCJVc2FnZTogcGNyZTJncmVwIFtPUFRJT05dLi4uIFtQQVRURVJOXSBbRklMRTEgRklMRTIgLi4uXVxuIik7CitwcmludGYoIlNlYXJjaCBmb3IgUEFUVEVSTiBpbiBlYWNoIEZJTEUgb3Igc3RhbmRhcmQgaW5wdXQuXG4iKTsKK3ByaW50ZigiUEFUVEVSTiBtdXN0IGJlIHByZXNlbnQgaWYgbmVpdGhlciAtZSBub3IgLWYgaXMgdXNlZC5cbiIpOworcHJpbnRmKCJcIi1cIiBjYW4gYmUgdXNlZCBhcyBhIGZpbGUgbmFtZSB0byBtZWFuIFNURElOLlxuIik7CisKKyNpZmRlZiBTVVBQT1JUX0xJQloKK3ByaW50ZigiRmlsZXMgd2hvc2UgbmFtZXMgZW5kIGluIC5neiBhcmUgcmVhZCB1c2luZyB6bGliLlxuIik7CisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfTElCQloyCitwcmludGYoIkZpbGVzIHdob3NlIG5hbWVzIGVuZCBpbiAuYnoyIGFyZSByZWFkIHVzaW5nIGJ6bGliMi5cbiIpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfTElCWiB8fCBkZWZpbmVkIFNVUFBPUlRfTElCQloyCitwcmludGYoIk90aGVyIGZpbGVzIGFuZCB0aGUgc3RhbmRhcmQgaW5wdXQgYXJlIHJlYWQgYXMgcGxhaW4gZmlsZXMuXG5cbiIpOworI2Vsc2UKK3ByaW50ZigiQWxsIGZpbGVzIGFyZSByZWFkIGFzIHBsYWluIGZpbGVzLCB3aXRob3V0IGFueSBpbnRlcnByZXRhdGlvbi5cblxuIik7CisjZW5kaWYKKworcHJpbnRmKCJFeGFtcGxlOiBwY3JlMmdyZXAgLWkgJ2hlbGxvLip3b3JsZCcgbWVudS5oIG1haW4uY1xuXG4iKTsKK3ByaW50ZigiT3B0aW9uczpcbiIpOworCitmb3IgKG9wID0gb3B0aW9ubGlzdDsgb3AtPm9uZV9jaGFyICE9IDA7IG9wKyspCisgIHsKKyAgaW50IG47CisgIGNoYXIgc1s0XTsKKworICBpZiAob3AtPm9uZV9jaGFyID4gMCAmJiAob3AtPmxvbmdfbmFtZSlbMF0gPT0gMCkKKyAgICBuID0gMzEgLSBwcmludGYoIiAgLSVjIiwgb3AtPm9uZV9jaGFyKTsKKyAgZWxzZQorICAgIHsKKyAgICBpZiAob3AtPm9uZV9jaGFyID4gMCkgc3ByaW50ZihzLCAiLSVjLCIsIG9wLT5vbmVfY2hhcik7CisgICAgICBlbHNlIHN0cmNweShzLCAiICAgIik7CisgICAgbiA9IDMxIC0gcHJpbnRmKCIgICVzIC0tJXMiLCBzLCBvcC0+bG9uZ19uYW1lKTsKKyAgICB9CisKKyAgaWYgKG4gPCAxKSBuID0gMTsKKyAgcHJpbnRmKCIlLipzJXNcbiIsIG4sICIgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCBvcC0+aGVscF90ZXh0KTsKKyAgfQorCitwcmludGYoIlxuTnVtYmVycyBtYXkgYmUgZm9sbG93ZWQgYnkgSyBvciBNLCBlLmcuIC0tYnVmZmVyLXNpemU9MTAwSy5cbiIpOworcHJpbnRmKCJUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgLS1idWZmZXItc2l6ZSBpcyAlZC5cbiIsIFBDUkUyR1JFUF9CVUZTSVpFKTsKK3ByaW50ZigiV2hlbiByZWFkaW5nIHBhdHRlcm5zIG9yIGZpbGUgbmFtZXMgZnJvbSBhIGZpbGUsIHRyYWlsaW5nIHdoaXRlXG4iKTsKK3ByaW50Zigic3BhY2UgaXMgcmVtb3ZlZCBhbmQgYmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuXG4iKTsKK3ByaW50ZigiVGhlIG1heGltdW0gc2l6ZSBvZiBhbnkgcGF0dGVybiBpcyAlZCBieXRlcy5cbiIsIE1BWFBBVExFTik7CisKK3ByaW50ZigiXG5XaXRoIG5vIEZJTEVzLCByZWFkIHN0YW5kYXJkIGlucHV0LiBJZiBmZXdlciB0aGFuIHR3byBGSUxFcyBnaXZlbiwgYXNzdW1lIC1oLlxuIik7CitwcmludGYoIkV4aXQgc3RhdHVzIGlzIDAgaWYgYW55IG1hdGNoZXMsIDEgaWYgbm8gbWF0Y2hlcywgYW5kIDIgaWYgdHJvdWJsZS5cbiIpOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICBUZXN0IGV4Y2x1ZGUvaW5jbHVkZXMgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJZiBhbnkgZXhjbHVkZSBwYXR0ZXJuIG1hdGNoZXMsIHRoZSBwYXRoIGlzIGV4Y2x1ZGVkLiBPdGhlcndpc2UsIHVubGVzcwordGhlcmUgYXJlIG5vIGluY2x1ZGVzLCB0aGUgcGF0aCBtdXN0IG1hdGNoIGFuIGluY2x1ZGUgcGF0dGVybi4KKworQXJndW1lbnRzOgorICBwYXRoICAgICAgdGhlIHBhdGggdG8gYmUgbWF0Y2hlZAorICBpcCAgICAgICAgdGhlIGNoYWluIG9mIGluY2x1ZGUgcGF0dGVybnMKKyAgZXAgICAgICAgIHRoZSBjaGFpbiBvZiBleGNsdWRlIHBhdHRlcm5zCisKK1JldHVybnM6ICAgIFRSVUUgaWYgdGhlIHBhdGggaXMgbm90IGV4Y2x1ZGVkCisqLworCitzdGF0aWMgQk9PTAordGVzdF9pbmNleGMoY2hhciAqcGF0aCwgcGF0c3RyICppcCwgcGF0c3RyICplcCkKK3sKK2ludCBwbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopcGF0aCk7CisKK2ZvciAoOyBlcCAhPSBOVUxMOyBlcCA9IGVwLT5uZXh0KQorICB7CisgIGlmIChwY3JlMl9tYXRjaChlcC0+Y29tcGlsZWQsIChQQ1JFMl9TUFRSKXBhdGgsIHBsZW4sIDAsIDAsIG1hdGNoX2RhdGEsIE5VTEwpID49IDApCisgICAgcmV0dXJuIEZBTFNFOworICB9CisKK2lmIChpcCA9PSBOVUxMKSByZXR1cm4gVFJVRTsKKworZm9yICg7IGlwICE9IE5VTEw7IGlwID0gaXAtPm5leHQpCisgIHsKKyAgaWYgKHBjcmUyX21hdGNoKGlwLT5jb21waWxlZCwgKFBDUkUyX1NQVFIpcGF0aCwgcGxlbiwgMCwgMCwgbWF0Y2hfZGF0YSwgTlVMTCkgPj0gMCkKKyAgICByZXR1cm4gVFJVRTsKKyAgfQorCityZXR1cm4gRkFMU0U7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgIERlY29kZSBpbnRlZ2VyIGFyZ3VtZW50IHZhbHVlICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEludGVnZXIgYXJndW1lbnRzIGNhbiBiZSBmb2xsb3dlZCBieSBLIG9yIE0uIEF2b2lkIHRoZSB1c2Ugb2Ygc3RydG91bCgpCitiZWNhdXNlIFN1bk9TNCBkb2Vzbid0IGhhdmUgaXQuIFRoaXMgaXMgdXNlZCBvbmx5IGZvciB1bnBpY2tpbmcgYXJndW1lbnRzLCBzbworanVzdCBrZWVwIGl0IHNpbXBsZS4KKworQXJndW1lbnRzOgorICBvcHRpb25fZGF0YSAgIHRoZSBvcHRpb24gZGF0YSBzdHJpbmcKKyAgb3AgICAgICAgICAgICB0aGUgb3B0aW9uIGl0ZW0gKGZvciBlcnJvciBtZXNzYWdlcykKKyAgbG9uZ29wICAgICAgICBUUlVFIGlmIG9wdGlvbiBnaXZlbiBpbiBsb25nIGZvcm0KKworUmV0dXJuczogICAgICAgIGEgbG9uZyBpbnRlZ2VyCisqLworCitzdGF0aWMgbG9uZyBpbnQKK2RlY29kZV9udW1iZXIoY2hhciAqb3B0aW9uX2RhdGEsIG9wdGlvbl9pdGVtICpvcCwgQk9PTCBsb25nb3ApCit7Cit1bnNpZ25lZCBsb25nIGludCBuID0gMDsKK2NoYXIgKmVuZHB0ciA9IG9wdGlvbl9kYXRhOword2hpbGUgKCplbmRwdHIgIT0gMCAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqZW5kcHRyKSkpIGVuZHB0cisrOword2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCplbmRwdHIpKSkKKyAgbiA9IG4gKiAxMCArIChpbnQpKCplbmRwdHIrKyAtICcwJyk7CitpZiAodG91cHBlcigqZW5kcHRyKSA9PSAnSycpCisgIHsKKyAgbiAqPSAxMDI0OworICBlbmRwdHIrKzsKKyAgfQorZWxzZSBpZiAodG91cHBlcigqZW5kcHRyKSA9PSAnTScpCisgIHsKKyAgbiAqPSAxMDI0KjEwMjQ7CisgIGVuZHB0cisrOworICB9CisKK2lmICgqZW5kcHRyICE9IDApICAgLyogRXJyb3IgKi8KKyAgeworICBpZiAobG9uZ29wKQorICAgIHsKKyAgICBjaGFyICplcXVhbHMgPSBzdHJjaHIob3AtPmxvbmdfbmFtZSwgJz0nKTsKKyAgICBpbnQgbmxlbiA9IChlcXVhbHMgPT0gTlVMTCk/IChpbnQpc3RybGVuKG9wLT5sb25nX25hbWUpIDoKKyAgICAgIChpbnQpKGVxdWFscyAtIG9wLT5sb25nX25hbWUpOworICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBNYWxmb3JtZWQgbnVtYmVyIFwiJXNcIiBhZnRlciAtLSUuKnNcbiIsCisgICAgICBvcHRpb25fZGF0YSwgbmxlbiwgb3AtPmxvbmdfbmFtZSk7CisgICAgfQorICBlbHNlCisgICAgZnByaW50ZihzdGRlcnIsICJwY3JlMmdyZXA6IE1hbGZvcm1lZCBudW1iZXIgXCIlc1wiIGFmdGVyIC0lY1xuIiwKKyAgICAgIG9wdGlvbl9kYXRhLCBvcC0+b25lX2NoYXIpOworICBwY3JlMmdyZXBfZXhpdCh1c2FnZSgyKSk7CisgIH0KKworcmV0dXJuIG47Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICBBZGQgaXRlbSB0byBhIGNoYWluIG9mIG51bWJlcnMgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFVzZWQgdG8gYWRkIGFuIGl0ZW0gb250byBhIGNoYWluLCBvciBqdXN0IHJldHVybiBhbiB1bmNvbm5lY3RlZCBpdGVtIGlmIHRoZQorImFmdGVyIiBhcmd1bWVudCBpcyBOVUxMLgorCitBcmd1bWVudHM6CisgIG4gICAgICAgICAgdGhlIG51bWJlciB0byBhZGQKKyAgYWZ0ZXIgICAgICBpZiBub3QgTlVMTCBwb2ludHMgdG8gaXRlbSB0byBpbnNlcnQgYWZ0ZXIKKworUmV0dXJuczogICAgIG5ldyBudW1iZXIgYmxvY2sKKyovCisKK3N0YXRpYyBvbXN0ciAqCithZGRfbnVtYmVyKGludCBuLCBvbXN0ciAqYWZ0ZXIpCit7CitvbXN0ciAqb20gPSAob21zdHIgKiltYWxsb2Moc2l6ZW9mKG9tc3RyKSk7CisKK2lmIChvbSA9PSBOVUxMKQorICB7CisgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBtYWxsb2MgZmFpbGVkXG4iKTsKKyAgcGNyZTJncmVwX2V4aXQoMik7CisgIH0KK29tLT5uZXh0ID0gTlVMTDsKK29tLT5ncm91cG51bSA9IG47CisKK2lmIChhZnRlciAhPSBOVUxMKQorICB7CisgIG9tLT5uZXh0ID0gYWZ0ZXItPm5leHQ7CisgIGFmdGVyLT5uZXh0ID0gb207CisgIH0KK3JldHVybiBvbTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgUmVhZCBvbmUgbGluZSBvZiBpbnB1dCAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTm9ybWFsbHksIGlucHV0IGlzIHJlYWQgdXNpbmcgZnJlYWQoKSBpbnRvIGEgbGFyZ2UgYnVmZmVyLCBzbyBtYW55IGxpbmVzIG1heQorYmUgcmVhZCBhdCBvbmNlLiBIb3dldmVyLCBkb2luZyB0aGlzIGZvciB0dHkgaW5wdXQgbWVhbnMgdGhhdCBubyBvdXRwdXQgYXBwZWFycwordW50aWwgYSBsb3Qgb2YgaW5wdXQgaGFzIGJlZW4gdHlwZWQuIEluc3RlYWQsIHR0eSBpbnB1dCBpcyBoYW5kbGVkIGxpbmUgYnkKK2xpbmUuIFdlIGNhbm5vdCB1c2UgZmdldHMoKSBmb3IgdGhpcywgYmVjYXVzZSBpdCBkb2VzIG5vdCBzdG9wIGF0IGEgYmluYXJ5Cit6ZXJvLCBhbmQgdGhlcmVmb3JlIHRoZXJlIGlzIG5vIHdheSBvZiB0ZWxsaW5nIGhvdyBtYW55IGNoYXJhY3RlcnMgaXQgaGFzIHJlYWQsCitiZWNhdXNlIHRoZXJlIG1heSBiZSBiaW5hcnkgemVyb3MgZW1iZWRkZWQgaW4gdGhlIGRhdGEuCisKK0FyZ3VtZW50czoKKyAgYnVmZmVyICAgICB0aGUgYnVmZmVyIHRvIHJlYWQgaW50bworICBsZW5ndGggICAgIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlYWQKKyAgZiAgICAgICAgICB0aGUgZmlsZQorCitSZXR1cm5zOiAgICAgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQsIHplcm8gYXQgZW5kIG9mIGZpbGUKKyovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3JlYWRfb25lX2xpbmUoY2hhciAqYnVmZmVyLCBpbnQgbGVuZ3RoLCBGSUxFICpmKQoreworaW50IGM7CitpbnQgeWllbGQgPSAwOword2hpbGUgKChjID0gZmdldGMoZikpICE9IEVPRikKKyAgeworICBidWZmZXJbeWllbGQrK10gPSBjOworICBpZiAoYyA9PSAnXG4nIHx8IHlpZWxkID49IGxlbmd0aCkgYnJlYWs7CisgIH0KK3JldHVybiB5aWVsZDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgIEZpbmQgZW5kIG9mIGxpbmUgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhlIGxlbmd0aCBvZiB0aGUgZW5kbGluZSBzZXF1ZW5jZSB0aGF0IGlzIGZvdW5kIGlzIHNldCB2aWEgbGVucHRyLiBUaGlzIG1heQorYmUgemVybyBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGZpbGUgaWYgdGhlcmUgaXMgbm8gbGluZS1lbmRpbmcgc2VxdWVuY2UgdGhlcmUuCisKK0FyZ3VtZW50czoKKyAgcCAgICAgICAgIGN1cnJlbnQgcG9zaXRpb24gaW4gbGluZQorICBlbmRwdHIgICAgZW5kIG9mIGF2YWlsYWJsZSBkYXRhCisgIGxlbnB0ciAgICB3aGVyZSB0byBwdXQgdGhlIGxlbmd0aCBvZiB0aGUgZW9sIHNlcXVlbmNlCisKK1JldHVybnM6ICAgIHBvaW50ZXIgYWZ0ZXIgdGhlIGxhc3QgYnl0ZSBvZiB0aGUgbGluZSwKKyAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgbmV3bGluZSBieXRlKHMpCisqLworCitzdGF0aWMgY2hhciAqCitlbmRfb2ZfbGluZShjaGFyICpwLCBjaGFyICplbmRwdHIsIGludCAqbGVucHRyKQoreworc3dpdGNoKGVuZGxpbmV0eXBlKQorICB7CisgIGRlZmF1bHQ6ICAgICAgLyogSnVzdCBpbiBjYXNlICovCisgIGNhc2UgUENSRTJfTkVXTElORV9MRjoKKyAgd2hpbGUgKHAgPCBlbmRwdHIgJiYgKnAgIT0gJ1xuJykgcCsrOworICBpZiAocCA8IGVuZHB0cikKKyAgICB7CisgICAgKmxlbnB0ciA9IDE7CisgICAgcmV0dXJuIHAgKyAxOworICAgIH0KKyAgKmxlbnB0ciA9IDA7CisgIHJldHVybiBlbmRwdHI7CisKKyAgY2FzZSBQQ1JFMl9ORVdMSU5FX0NSOgorICB3aGlsZSAocCA8IGVuZHB0ciAmJiAqcCAhPSAnXHInKSBwKys7CisgIGlmIChwIDwgZW5kcHRyKQorICAgIHsKKyAgICAqbGVucHRyID0gMTsKKyAgICByZXR1cm4gcCArIDE7CisgICAgfQorICAqbGVucHRyID0gMDsKKyAgcmV0dXJuIGVuZHB0cjsKKworICBjYXNlIFBDUkUyX05FV0xJTkVfQ1JMRjoKKyAgZm9yICg7OykKKyAgICB7CisgICAgd2hpbGUgKHAgPCBlbmRwdHIgJiYgKnAgIT0gJ1xyJykgcCsrOworICAgIGlmICgrK3AgPj0gZW5kcHRyKQorICAgICAgeworICAgICAgKmxlbnB0ciA9IDA7CisgICAgICByZXR1cm4gZW5kcHRyOworICAgICAgfQorICAgIGlmICgqcCA9PSAnXG4nKQorICAgICAgeworICAgICAgKmxlbnB0ciA9IDI7CisgICAgICByZXR1cm4gcCArIDE7CisgICAgICB9CisgICAgfQorICBicmVhazsKKworICBjYXNlIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRjoKKyAgd2hpbGUgKHAgPCBlbmRwdHIpCisgICAgeworICAgIGludCBleHRyYSA9IDA7CisgICAgcmVnaXN0ZXIgaW50IGMgPSAqKCh1bnNpZ25lZCBjaGFyICopcCk7CisKKyAgICBpZiAodXRmICYmIGMgPj0gMHhjMCkKKyAgICAgIHsKKyAgICAgIGludCBnY2lpLCBnY3NzOworICAgICAgZXh0cmEgPSB1dGY4X3RhYmxlNFtjICYgMHgzZl07ICAvKiBOdW1iZXIgb2YgYWRkaXRpb25hbCBieXRlcyAqLworICAgICAgZ2NzcyA9IDYqZXh0cmE7CisgICAgICBjID0gKGMgJiB1dGY4X3RhYmxlM1tleHRyYV0pIDw8IGdjc3M7CisgICAgICBmb3IgKGdjaWkgPSAxOyBnY2lpIDw9IGV4dHJhOyBnY2lpKyspCisgICAgICAgIHsKKyAgICAgICAgZ2NzcyAtPSA2OworICAgICAgICBjIHw9IChwW2djaWldICYgMHgzZikgPDwgZ2NzczsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgcCArPSAxICsgZXh0cmE7CisKKyAgICBzd2l0Y2ggKGMpCisgICAgICB7CisgICAgICBjYXNlICdcbic6CisgICAgICAqbGVucHRyID0gMTsKKyAgICAgIHJldHVybiBwOworCisgICAgICBjYXNlICdccic6CisgICAgICBpZiAocCA8IGVuZHB0ciAmJiAqcCA9PSAnXG4nKQorICAgICAgICB7CisgICAgICAgICpsZW5wdHIgPSAyOworICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgKmxlbnB0ciA9IDE7CisgICAgICByZXR1cm4gcDsKKworICAgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0gICAvKiBFbmQgb2YgbG9vcCBmb3IgQU5ZQ1JMRiBjYXNlICovCisKKyAgKmxlbnB0ciA9IDA7ICAvKiBNdXN0IGhhdmUgaGl0IHRoZSBlbmQgKi8KKyAgcmV0dXJuIGVuZHB0cjsKKworICBjYXNlIFBDUkUyX05FV0xJTkVfQU5ZOgorICB3aGlsZSAocCA8IGVuZHB0cikKKyAgICB7CisgICAgaW50IGV4dHJhID0gMDsKKyAgICByZWdpc3RlciBpbnQgYyA9ICooKHVuc2lnbmVkIGNoYXIgKilwKTsKKworICAgIGlmICh1dGYgJiYgYyA+PSAweGMwKQorICAgICAgeworICAgICAgaW50IGdjaWksIGdjc3M7CisgICAgICBleHRyYSA9IHV0ZjhfdGFibGU0W2MgJiAweDNmXTsgIC8qIE51bWJlciBvZiBhZGRpdGlvbmFsIGJ5dGVzICovCisgICAgICBnY3NzID0gNipleHRyYTsKKyAgICAgIGMgPSAoYyAmIHV0ZjhfdGFibGUzW2V4dHJhXSkgPDwgZ2NzczsKKyAgICAgIGZvciAoZ2NpaSA9IDE7IGdjaWkgPD0gZXh0cmE7IGdjaWkrKykKKyAgICAgICAgeworICAgICAgICBnY3NzIC09IDY7CisgICAgICAgIGMgfD0gKHBbZ2NpaV0gJiAweDNmKSA8PCBnY3NzOworICAgICAgICB9CisgICAgICB9CisKKyAgICBwICs9IDEgKyBleHRyYTsKKworICAgIHN3aXRjaCAoYykKKyAgICAgIHsKKyAgICAgIGNhc2UgJ1xuJzogICAgLyogTEYgKi8KKyAgICAgIGNhc2UgJ1x2JzogICAgLyogVlQgKi8KKyAgICAgIGNhc2UgJ1xmJzogICAgLyogRkYgKi8KKyAgICAgICpsZW5wdHIgPSAxOworICAgICAgcmV0dXJuIHA7CisKKyAgICAgIGNhc2UgJ1xyJzogICAgLyogQ1IgKi8KKyAgICAgIGlmIChwIDwgZW5kcHRyICYmICpwID09ICdcbicpCisgICAgICAgIHsKKyAgICAgICAgKmxlbnB0ciA9IDI7CisgICAgICAgIHArKzsKKyAgICAgICAgfQorICAgICAgZWxzZSAqbGVucHRyID0gMTsKKyAgICAgIHJldHVybiBwOworCisjaWZuZGVmIEVCQ0RJQworICAgICAgY2FzZSAweDg1OiAgICAvKiBVbmljb2RlIE5FTCAqLworICAgICAgKmxlbnB0ciA9IHV0Zj8gMiA6IDE7CisgICAgICByZXR1cm4gcDsKKworICAgICAgY2FzZSAweDIwMjg6ICAvKiBVbmljb2RlIExTICovCisgICAgICBjYXNlIDB4MjAyOTogIC8qIFVuaWNvZGUgUFMgKi8KKyAgICAgICpsZW5wdHIgPSAzOworICAgICAgcmV0dXJuIHA7CisjZW5kaWYgIC8qIE5vdCBFQkNESUMgKi8KKworICAgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0gICAvKiBFbmQgb2YgbG9vcCBmb3IgQU5ZIGNhc2UgKi8KKworICAqbGVucHRyID0gMDsgIC8qIE11c3QgaGF2ZSBoaXQgdGhlIGVuZCAqLworICByZXR1cm4gZW5kcHRyOworICB9ICAgICAvKiBFbmQgb2Ygb3ZlcmFsbCBzd2l0Y2ggKi8KK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgRmluZCBzdGFydCBvZiBwcmV2aW91cyBsaW5lICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpcyBjYWxsZWQgd2hlbiBsb29raW5nIGJhY2sgZm9yIGJlZm9yZSBsaW5lcyB0byBwcmludC4KKworQXJndW1lbnRzOgorICBwICAgICAgICAgc3RhcnQgb2YgdGhlIHN1YnNlcXVlbnQgbGluZQorICBzdGFydHB0ciAgc3RhcnQgb2YgYXZhaWxhYmxlIGRhdGEKKworUmV0dXJuczogICAgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgdGhlIHByZXZpb3VzIGxpbmUKKyovCisKK3N0YXRpYyBjaGFyICoKK3ByZXZpb3VzX2xpbmUoY2hhciAqcCwgY2hhciAqc3RhcnRwdHIpCit7Citzd2l0Y2goZW5kbGluZXR5cGUpCisgIHsKKyAgZGVmYXVsdDogICAgICAvKiBKdXN0IGluIGNhc2UgKi8KKyAgY2FzZSBQQ1JFMl9ORVdMSU5FX0xGOgorICBwLS07CisgIHdoaWxlIChwID4gc3RhcnRwdHIgJiYgcFstMV0gIT0gJ1xuJykgcC0tOworICByZXR1cm4gcDsKKworICBjYXNlIFBDUkUyX05FV0xJTkVfQ1I6CisgIHAtLTsKKyAgd2hpbGUgKHAgPiBzdGFydHB0ciAmJiBwWy0xXSAhPSAnXG4nKSBwLS07CisgIHJldHVybiBwOworCisgIGNhc2UgUENSRTJfTkVXTElORV9DUkxGOgorICBmb3IgKDs7KQorICAgIHsKKyAgICBwIC09IDI7CisgICAgd2hpbGUgKHAgPiBzdGFydHB0ciAmJiBwWy0xXSAhPSAnXG4nKSBwLS07CisgICAgaWYgKHAgPD0gc3RhcnRwdHIgKyAxIHx8IHBbLTJdID09ICdccicpIHJldHVybiBwOworICAgIH0KKyAgLyogQ29udHJvbCBjYW4gbmV2ZXIgZ2V0IGhlcmUgKi8KKworICBjYXNlIFBDUkUyX05FV0xJTkVfQU5ZOgorICBjYXNlIFBDUkUyX05FV0xJTkVfQU5ZQ1JMRjoKKyAgaWYgKCooLS1wKSA9PSAnXG4nICYmIHAgPiBzdGFydHB0ciAmJiBwWy0xXSA9PSAnXHInKSBwLS07CisgIGlmICh1dGYpIHdoaWxlICgoKnAgJiAweGMwKSA9PSAweDgwKSBwLS07CisKKyAgd2hpbGUgKHAgPiBzdGFydHB0cikKKyAgICB7CisgICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGM7CisgICAgY2hhciAqcHAgPSBwIC0gMTsKKworICAgIGlmICh1dGYpCisgICAgICB7CisgICAgICBpbnQgZXh0cmEgPSAwOworICAgICAgd2hpbGUgKCgqcHAgJiAweGMwKSA9PSAweDgwKSBwcC0tOworICAgICAgYyA9ICooKHVuc2lnbmVkIGNoYXIgKilwcCk7CisgICAgICBpZiAoYyA+PSAweGMwKQorICAgICAgICB7CisgICAgICAgIGludCBnY2lpLCBnY3NzOworICAgICAgICBleHRyYSA9IHV0ZjhfdGFibGU0W2MgJiAweDNmXTsgIC8qIE51bWJlciBvZiBhZGRpdGlvbmFsIGJ5dGVzICovCisgICAgICAgIGdjc3MgPSA2KmV4dHJhOworICAgICAgICBjID0gKGMgJiB1dGY4X3RhYmxlM1tleHRyYV0pIDw8IGdjc3M7CisgICAgICAgIGZvciAoZ2NpaSA9IDE7IGdjaWkgPD0gZXh0cmE7IGdjaWkrKykKKyAgICAgICAgICB7CisgICAgICAgICAgZ2NzcyAtPSA2OworICAgICAgICAgIGMgfD0gKHBwW2djaWldICYgMHgzZikgPDwgZ2NzczsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlbHNlIGMgPSAqKCh1bnNpZ25lZCBjaGFyICopcHApOworCisgICAgaWYgKGVuZGxpbmV0eXBlID09IFBDUkUyX05FV0xJTkVfQU5ZQ1JMRikgc3dpdGNoIChjKQorICAgICAgeworICAgICAgY2FzZSAnXG4nOiAgICAvKiBMRiAqLworICAgICAgY2FzZSAnXHInOiAgICAvKiBDUiAqLworICAgICAgcmV0dXJuIHA7CisKKyAgICAgIGRlZmF1bHQ6CisgICAgICBicmVhazsKKyAgICAgIH0KKworICAgIGVsc2Ugc3dpdGNoIChjKQorICAgICAgeworICAgICAgY2FzZSAnXG4nOiAgICAvKiBMRiAqLworICAgICAgY2FzZSAnXHYnOiAgICAvKiBWVCAqLworICAgICAgY2FzZSAnXGYnOiAgICAvKiBGRiAqLworICAgICAgY2FzZSAnXHInOiAgICAvKiBDUiAqLworI2lmbmRlZiBFQkNESUUKKyAgICAgIGNhc2UgMHg4NTogICAgLyogVW5pY29kZSBORUwgKi8KKyAgICAgIGNhc2UgMHgyMDI4OiAgLyogVW5pY29kZSBMUyAqLworICAgICAgY2FzZSAweDIwMjk6ICAvKiBVbmljb2RlIFBTICovCisjZW5kaWYgIC8qIE5vdCBFQkNESUMgKi8KKyAgICAgIHJldHVybiBwOworCisgICAgICBkZWZhdWx0OgorICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICBwID0gcHA7ICAvKiBCYWNrIG9uZSBjaGFyYWN0ZXIgKi8KKyAgICB9ICAgICAgICAvKiBFbmQgb2YgbG9vcCBmb3IgQU5ZIGNhc2UgKi8KKworICByZXR1cm4gc3RhcnRwdHI7ICAvKiBIaXQgc3RhcnQgb2YgZGF0YSAqLworICB9ICAgICAvKiBFbmQgb2Ygb3ZlcmFsbCBzd2l0Y2ggKi8KK30KKworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICBQcmludCB0aGUgcHJldmlvdXMgImFmdGVyIiBsaW5lcyAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgaXMgY2FsbGVkIGlmIHdlIGFyZSBhYm91dCB0byBsb3NlIHNhaWQgbGluZXMgYmVjYXVzZSBvZiBidWZmZXIgZmlsbGluZywKK2FuZCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBUaGUgZGF0YSBpbiB0aGUgbGluZSBpcyB3cml0dGVuIHVzaW5nIGZ3cml0ZSgpIHNvCit0aGF0IGEgYmluYXJ5IHplcm8gZG9lcyBub3QgdGVybWluYXRlIGl0LgorCitBcmd1bWVudHM6CisgIGxhc3RtYXRjaG51bWJlciAgIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgbWF0Y2hpbmcgbGluZSwgcGx1cyBvbmUKKyAgbGFzdG1hdGNocmVzdGFydCAgd2hlcmUgd2UgcmVzdGFydGVkIGFmdGVyIHRoZSBsYXN0IG1hdGNoCisgIGVuZHB0ciAgICAgICAgICAgIGVuZCBvZiBhdmFpbGFibGUgZGF0YQorICBwcmludG5hbWUgICAgICAgICBmaWxlbmFtZSBmb3IgcHJpbnRpbmcKKworUmV0dXJuczogICAgICAgICAgICBub3RoaW5nCisqLworCitzdGF0aWMgdm9pZAorZG9fYWZ0ZXJfbGluZXMoaW50IGxhc3RtYXRjaG51bWJlciwgY2hhciAqbGFzdG1hdGNocmVzdGFydCwgY2hhciAqZW5kcHRyLAorICBjaGFyICpwcmludG5hbWUpCit7CitpZiAoYWZ0ZXJfY29udGV4dCA+IDAgJiYgbGFzdG1hdGNobnVtYmVyID4gMCkKKyAgeworICBpbnQgY291bnQgPSAwOworICB3aGlsZSAobGFzdG1hdGNocmVzdGFydCA8IGVuZHB0ciAmJiBjb3VudCsrIDwgYWZ0ZXJfY29udGV4dCkKKyAgICB7CisgICAgaW50IGVsbGVuZ3RoOworICAgIGNoYXIgKnBwID0gbGFzdG1hdGNocmVzdGFydDsKKyAgICBpZiAocHJpbnRuYW1lICE9IE5VTEwpIGZwcmludGYoc3Rkb3V0LCAiJXMtIiwgcHJpbnRuYW1lKTsKKyAgICBpZiAobnVtYmVyKSBmcHJpbnRmKHN0ZG91dCwgIiVkLSIsIGxhc3RtYXRjaG51bWJlcisrKTsKKyAgICBwcCA9IGVuZF9vZl9saW5lKHBwLCBlbmRwdHIsICZlbGxlbmd0aCk7CisgICAgRldSSVRFKGxhc3RtYXRjaHJlc3RhcnQsIDEsIHBwIC0gbGFzdG1hdGNocmVzdGFydCwgc3Rkb3V0KTsKKyAgICBsYXN0bWF0Y2hyZXN0YXJ0ID0gcHA7CisgICAgfQorICBoeXBoZW5wZW5kaW5nID0gVFJVRTsKKyAgfQorfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICBBcHBseSBwYXR0ZXJucyB0byBzdWJqZWN0IHRpbGwgb25lIG1hdGNoZXMgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBydW4gdGhyb3VnaCBhbGwgcGF0dGVybnMsIGxvb2tpbmcgZm9yIGEgbWF0Y2guIEl0CitpcyB1c2VkIG11bHRpcGxlIHRpbWVzIGZvciB0aGUgc2FtZSBzdWJqZWN0IHdoZW4gY29sb3VyaW5nIGlzIGVuYWJsZWQsIGluIG9yZGVyCit0byBmaW5kIGFsbCBwb3NzaWJsZSBtYXRjaGVzLgorCitBcmd1bWVudHM6CisgIG1hdGNocHRyICAgICB0aGUgc3RhcnQgb2YgdGhlIHN1YmplY3QKKyAgbGVuZ3RoICAgICAgIHRoZSBsZW5ndGggb2YgdGhlIHN1YmplY3QgdG8gbWF0Y2gKKyAgb3B0aW9ucyAgICAgIG9wdGlvbnMgZm9yIHBjcmVfZXhlYworICBzdGFydG9mZnNldCAgd2hlcmUgdG8gc3RhcnQgbWF0Y2hpbmcKKyAgbXJjICAgICAgICAgIGFkZHJlc3Mgb2Ygd2hlcmUgdG8gcHV0IHRoZSByZXN1bHQgb2YgcGNyZTJfbWF0Y2goKQorCitSZXR1cm5zOiAgICAgIFRSVUUgaWYgdGhlcmUgd2FzIGEgbWF0Y2gKKyAgICAgICAgICAgICAgRkFMU0UgaWYgdGhlcmUgd2FzIG5vIG1hdGNoCisgICAgICAgICAgICAgIGludmVydCBpZiB0aGVyZSB3YXMgYSBub24tZmF0YWwgZXJyb3IKKyovCisKK3N0YXRpYyBCT09MCittYXRjaF9wYXR0ZXJucyhjaGFyICptYXRjaHB0ciwgc2l6ZV90IGxlbmd0aCwgdW5zaWduZWQgaW50IG9wdGlvbnMsCisgIHNpemVfdCBzdGFydG9mZnNldCwgaW50ICptcmMpCit7CitpbnQgaTsKK3NpemVfdCBzbGVuID0gbGVuZ3RoOworcGF0c3RyICpwID0gcGF0dGVybnM7Citjb25zdCBjaGFyICptc2cgPSAidGhpcyB0ZXh0OlxuXG4iOworCitpZiAoc2xlbiA+IDIwMCkKKyAgeworICBzbGVuID0gMjAwOworICBtc2cgPSAidGV4dCB0aGF0IHN0YXJ0czpcblxuIjsKKyAgfQorZm9yIChpID0gMTsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCwgaSsrKQorICB7CisgICptcmMgPSBwY3JlMl9tYXRjaChwLT5jb21waWxlZCwgKFBDUkUyX1NQVFIpbWF0Y2hwdHIsIChpbnQpbGVuZ3RoLAorICAgIHN0YXJ0b2Zmc2V0LCBvcHRpb25zLCBtYXRjaF9kYXRhLCBtYXRjaF9jb250ZXh0KTsKKyAgaWYgKCptcmMgPj0gMCkgcmV0dXJuIFRSVUU7CisgIGlmICgqbXJjID09IFBDUkUyX0VSUk9SX05PTUFUQ0gpIGNvbnRpbnVlOworICBmcHJpbnRmKHN0ZGVyciwgInBjcmUyZ3JlcDogcGNyZTJfbWF0Y2goKSBnYXZlIGVycm9yICVkIHdoaWxlIG1hdGNoaW5nICIsICptcmMpOworICBpZiAocGF0dGVybnMtPm5leHQgIT0gTlVMTCkgZnByaW50ZihzdGRlcnIsICJwYXR0ZXJuIG51bWJlciAlZCB0byAiLCBpKTsKKyAgZnByaW50ZihzdGRlcnIsICIlcyIsIG1zZyk7CisgIEZXUklURShtYXRjaHB0ciwgMSwgc2xlbiwgc3RkZXJyKTsgICAvKiBJbiBjYXNlIGJpbmFyeSB6ZXJvIGluY2x1ZGVkICovCisgIGZwcmludGYoc3RkZXJyLCAiXG5cbiIpOworICBpZiAoKm1yYyA9PSBQQ1JFMl9FUlJPUl9NQVRDSExJTUlUIHx8ICptcmMgPT0gUENSRTJfRVJST1JfUkVDVVJTSU9OTElNSVQgfHwKKyAgICAgICptcmMgPT0gUENSRTJfRVJST1JfSklUX1NUQUNLTElNSVQpCisgICAgcmVzb3VyY2VfZXJyb3IgPSBUUlVFOworICBpZiAoZXJyb3JfY291bnQrKyA+IDIwKQorICAgIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInBjcmUyZ3JlcDogVG9vIG1hbnkgZXJyb3JzIC0gYWJhbmRvbmVkLlxuIik7CisgICAgcGNyZTJncmVwX2V4aXQoMik7CisgICAgfQorICByZXR1cm4gaW52ZXJ0OyAgICAvKiBObyBtb3JlIG1hdGNoaW5nOyBkb24ndCBzaG93IHRoZSBsaW5lIGFnYWluICovCisgIH0KKworcmV0dXJuIEZBTFNFOyAgLyogTm8gbWF0Y2gsIG5vIGVycm9ycyAqLworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICBHcmVwIGFuIGluZGl2aWR1YWwgZmlsZSAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGdyZXBfb3JfcmVjdXJzZSgpIGJlbG93LiBJdCB1c2VzIGEgYnVmZmVyIHRoYXQgaXMgdGhyZWUKK3RpbWVzIHRoZSB2YWx1ZSBvZiBidWZ0aGlyZC4gVGhlIG1hdGNoaW5nIHBvaW50IGlzIG5ldmVyIGFsbG93ZWQgdG8gc3RyYXkgaW50bwordGhlIHRvcCB0aGlyZCBvZiB0aGUgYnVmZmVyLCB0aHVzIGtlZXBpbmcgbW9yZSBvZiB0aGUgZmlsZSBhdmFpbGFibGUgZm9yCitjb250ZXh0IHByaW50aW5nIG9yIGZvciBtdWx0aWxpbmUgc2Nhbm5pbmcuIEZvciBsYXJnZSBmaWxlcywgdGhlIHBvaW50ZXIgd2lsbAorYmUgaW4gdGhlIG1pZGRsZSB0aGlyZCBtb3N0IG9mIHRoZSB0aW1lLCBzbyB0aGUgYm90dG9tIHRoaXJkIGlzIGF2YWlsYWJsZSBmb3IKKyJiZWZvcmUiIGNvbnRleHQgcHJpbnRpbmcuCisKK0FyZ3VtZW50czoKKyAgaGFuZGxlICAgICAgIHRoZSBmb3BlbmVkIEZJTEUgc3RyZWFtIGZvciBhIG5vcm1hbCBmaWxlCisgICAgICAgICAgICAgICB0aGUgZ3pGaWxlIHBvaW50ZXIgd2hlbiByZWFkaW5nIGlzIHZpYSBsaWJ6CisgICAgICAgICAgICAgICB0aGUgQlpGSUxFIHBvaW50ZXIgd2hlbiByZWFkaW5nIGlzIHZpYSBsaWJiejIKKyAgZnJ0eXBlICAgICAgIEZSX1BMQUlOLCBGUl9MSUJaLCBvciBGUl9MSUJCWjIKKyAgZmlsZW5hbWUgICAgIHRoZSBmaWxlIG5hbWUgb3IgTlVMTCAoZm9yIGVycm9ycykKKyAgcHJpbnRuYW1lICAgIHRoZSBmaWxlIG5hbWUgaWYgaXQgaXMgdG8gYmUgcHJpbnRlZCBmb3IgZWFjaCBtYXRjaAorICAgICAgICAgICAgICAgb3IgTlVMTCBpZiB0aGUgZmlsZSBuYW1lIGlzIG5vdCB0byBiZSBwcmludGVkCisgICAgICAgICAgICAgICBpdCBjYW5ub3QgYmUgTlVMTCBpZiBmaWxlbmFtZXNbX25vbWF0Y2hdX29ubHkgaXMgc2V0CisKK1JldHVybnM6ICAgICAgIDAgaWYgdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSBtYXRjaAorICAgICAgICAgICAgICAgMSBvdGhlcndpc2UgKG5vIG1hdGNoZXMpCisgICAgICAgICAgICAgICAyIGlmIGFuIG92ZXJsb25nIGxpbmUgaXMgZW5jb3VudGVyZWQKKyAgICAgICAgICAgICAgIDMgaWYgdGhlcmUgaXMgYSByZWFkIGVycm9yIG9uIGEgLmJ6MiBmaWxlCisqLworCitzdGF0aWMgaW50CitwY3JlMmdyZXAodm9pZCAqaGFuZGxlLCBpbnQgZnJ0eXBlLCBjaGFyICpmaWxlbmFtZSwgY2hhciAqcHJpbnRuYW1lKQoreworaW50IHJjID0gMTsKK2ludCBsaW5lbnVtYmVyID0gMTsKK2ludCBsYXN0bWF0Y2hudW1iZXIgPSAwOworaW50IGNvdW50ID0gMDsKK2ludCBmaWxlcG9zID0gMDsKK2NoYXIgKmxhc3RtYXRjaHJlc3RhcnQgPSBOVUxMOworY2hhciAqcHRyID0gbWFpbl9idWZmZXI7CitjaGFyICplbmRwdHI7CitzaXplX3QgYnVmZmxlbmd0aDsKK0JPT0wgYmluYXJ5ID0gRkFMU0U7CitCT09MIGVuZGh5cGhlbnBlbmRpbmcgPSBGQUxTRTsKK0JPT0wgaW5wdXRfbGluZV9idWZmZXJlZCA9IGxpbmVfYnVmZmVyZWQ7CitGSUxFICppbiA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgaW5pdGlhbGl6ZWQgKi8KKworI2lmZGVmIFNVUFBPUlRfTElCWgorZ3pGaWxlIGluZ3ogPSBOVUxMOworI2VuZGlmCisKKyNpZmRlZiBTVVBQT1JUX0xJQkJaMgorQlpGSUxFICppbmJ6MiA9IE5VTEw7CisjZW5kaWYKKworCisvKiBEbyB0aGUgZmlyc3QgcmVhZCBpbnRvIHRoZSBzdGFydCBvZiB0aGUgYnVmZmVyIGFuZCBzZXQgdXAgdGhlIHBvaW50ZXIgdG8gZW5kCitvZiB3aGF0IHdlIGhhdmUuIEluIHRoZSBjYXNlIG9mIGxpYnosIGEgbm9uLXppcHBlZCAuZ3ogZmlsZSB3aWxsIGJlIHJlYWQgYXMgYQorcGxhaW4gZmlsZS4gSG93ZXZlciwgaWYgYSAuYnoyIGZpbGUgaXNuJ3QgYWN0dWFsbHkgYnppcHBlZCwgdGhlIGZpcnN0IHJlYWQgd2lsbAorZmFpbC4gKi8KKworKHZvaWQpZnJ0eXBlOworCisjaWZkZWYgU1VQUE9SVF9MSUJaCitpZiAoZnJ0eXBlID09IEZSX0xJQlopCisgIHsKKyAgaW5neiA9IChnekZpbGUpaGFuZGxlOworICBidWZmbGVuZ3RoID0gZ3pyZWFkIChpbmd6LCBtYWluX2J1ZmZlciwgYnVmc2l6ZSk7CisgIH0KK2Vsc2UKKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9MSUJCWjIKK2lmIChmcnR5cGUgPT0gRlJfTElCQloyKQorICB7CisgIGluYnoyID0gKEJaRklMRSAqKWhhbmRsZTsKKyAgYnVmZmxlbmd0aCA9IEJaMl9ienJlYWQoaW5iejIsIG1haW5fYnVmZmVyLCBidWZzaXplKTsKKyAgaWYgKChpbnQpYnVmZmxlbmd0aCA8IDApIHJldHVybiAyOyAgIC8qIEdvdGNoYTogYnVmZmxlbmd0aCBpcyBzaXplX3Q7ICovCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB3aXRob3V0IHRoZSBjYXN0IGl0IGlzIHVuc2lnbmVkLiAqLworZWxzZQorI2VuZGlmCisKKyAgeworICBpbiA9IChGSUxFICopaGFuZGxlOworICBpZiAoaXNfZmlsZV90dHkoaW4pKSBpbnB1dF9saW5lX2J1ZmZlcmVkID0gVFJVRTsKKyAgYnVmZmxlbmd0aCA9IGlucHV0X2xpbmVfYnVmZmVyZWQ/CisgICAgcmVhZF9vbmVfbGluZShtYWluX2J1ZmZlciwgYnVmc2l6ZSwgaW4pIDoKKyAgICBmcmVhZChtYWluX2J1ZmZlciwgMSwgYnVmc2l6ZSwgaW4pOworICB9CisKK2VuZHB0ciA9IG1haW5fYnVmZmVyICsgYnVmZmxlbmd0aDsKKworLyogVW5sZXNzIGJpbmFyeS1maWxlcz10ZXh0LCBzZWUgaWYgd2UgaGF2ZSBhIGJpbmFyeSBmaWxlLiBUaGlzIHVzZXMgdGhlIHNhbWUKK3J1bGUgYXMgR05VIGdyZXAsIG5hbWVseSwgYSBzZWFyY2ggZm9yIGEgYmluYXJ5IHplcm8gYnl0ZSBuZWFyIHRoZSBzdGFydCBvZiB0aGUKK2ZpbGUuICovCisKK2lmIChiaW5hcnlfZmlsZXMgIT0gQklOX1RFWFQpCisgIHsKKyAgYmluYXJ5ID0KKyAgICBtZW1jaHIobWFpbl9idWZmZXIsIDAsIChidWZmbGVuZ3RoID4gMTAyNCk/IDEwMjQgOiBidWZmbGVuZ3RoKSAhPSBOVUxMOworICBpZiAoYmluYXJ5ICYmIGJpbmFyeV9maWxlcyA9PSBCSU5fTk9NQVRDSCkgcmV0dXJuIDE7CisgIH0KKworLyogTG9vcCB3aGlsZSB0aGUgY3VycmVudCBwb2ludGVyIGlzIG5vdCBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLiBGb3IgbGFyZ2UKK2ZpbGVzLCBlbmRwdHIgd2lsbCBiZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgd2hlbiB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUKK2ZpbGUsIGJ1dCBwdHIgd2lsbCBuZXZlciBnZXQgdGhlcmUsIGJlY2F1c2UgYXMgc29vbiBhcyBpdCBnZXRzIG92ZXIgMi8zIG9mIHRoZQord2F5LCB0aGUgYnVmZmVyIGlzIHNoaWZ0ZWQgbGVmdCBhbmQgcmUtZmlsbGVkLiAqLworCit3aGlsZSAocHRyIDwgZW5kcHRyKQorICB7CisgIGludCBlbmRsaW5lbGVuZ3RoOworICBpbnQgbXJjID0gMDsKKyAgdW5zaWduZWQgaW50IG9wdGlvbnMgPSAwOworICBCT09MIG1hdGNoOworICBjaGFyICptYXRjaHB0ciA9IHB0cjsKKyAgY2hhciAqdCA9IHB0cjsKKyAgc2l6ZV90IGxlbmd0aCwgbGluZWxlbmd0aDsKKyAgc2l6ZV90IHN0YXJ0b2Zmc2V0ID0gMDsKKworICAvKiBBdCB0aGlzIHBvaW50LCBwdHIgaXMgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZS4gV2UgbmVlZCB0byBmaW5kIHRoZSBsZW5ndGgKKyAgb2YgdGhlIHN1YmplY3Qgc3RyaW5nIHRvIHBhc3MgdG8gcGNyZV9leGVjKCkuIEluIG11bHRpbGluZSBtb2RlLCBpdCBpcyB0aGUKKyAgbGVuZ3RoIHJlbWFpbmRlciBvZiB0aGUgZGF0YSBpbiB0aGUgYnVmZmVyLiBPdGhlcndpc2UsIGl0IGlzIHRoZSBsZW5ndGggb2YKKyAgdGhlIG5leHQgbGluZSwgZXhjbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBuZXdsaW5lLiBBZnRlciBtYXRjaGluZywgd2UgYWx3YXlzCisgIGFkdmFuY2UgYnkgdGhlIGxlbmd0aCBvZiB0aGUgbmV4dCBsaW5lLiBJbiBtdWx0aWxpbmUgbW9kZSB0aGUgUENSRTJfRklSU1RMSU5FCisgIG9wdGlvbiBpcyB1c2VkIGZvciBjb21waWxpbmcsIHNvIHRoYXQgYW55IG1hdGNoIGlzIGNvbnN0cmFpbmVkIHRvIGJlIGluIHRoZQorICBmaXJzdCBsaW5lLiAqLworCisgIHQgPSBlbmRfb2ZfbGluZSh0LCBlbmRwdHIsICZlbmRsaW5lbGVuZ3RoKTsKKyAgbGluZWxlbmd0aCA9IHQgLSBwdHIgLSBlbmRsaW5lbGVuZ3RoOworICBsZW5ndGggPSBtdWx0aWxpbmU/IChzaXplX3QpKGVuZHB0ciAtIHB0cikgOiBsaW5lbGVuZ3RoOworCisgIC8qIENoZWNrIHRvIHNlZSBpZiB0aGUgbGluZSB3ZSBhcmUgbG9va2luZyBhdCBleHRlbmRzIHJpZ2h0IHRvIHRoZSB2ZXJ5IGVuZAorICBvZiB0aGUgYnVmZmVyIHdpdGhvdXQgYSBsaW5lIHRlcm1pbmF0b3IuIFRoaXMgbWVhbnMgdGhlIGxpbmUgaXMgdG9vIGxvbmcgdG8KKyAgaGFuZGxlLiAqLworCisgIGlmIChlbmRsaW5lbGVuZ3RoID09IDAgJiYgdCA9PSBtYWluX2J1ZmZlciArIGJ1ZnNpemUpCisgICAgeworICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBsaW5lICVkJXMlcyBpcyB0b28gbG9uZyBmb3IgdGhlIGludGVybmFsIGJ1ZmZlclxuIgorICAgICAgICAgICAgICAgICAgICAicGNyZTJncmVwOiBjaGVjayB0aGUgLS1idWZmZXItc2l6ZSBvcHRpb25cbiIsCisgICAgICAgICAgICAgICAgICAgIGxpbmVudW1iZXIsCisgICAgICAgICAgICAgICAgICAgIChmaWxlbmFtZSA9PSBOVUxMKT8gIiIgOiAiIG9mIGZpbGUgIiwKKyAgICAgICAgICAgICAgICAgICAgKGZpbGVuYW1lID09IE5VTEwpPyAiIiA6IGZpbGVuYW1lKTsKKyAgICByZXR1cm4gMjsKKyAgICB9CisKKyAgLyogRXh0cmEgcHJvY2Vzc2luZyBmb3IgSmVmZnJleSBGcmllZGwncyBkZWJ1Z2dpbmcuICovCisKKyNpZmRlZiBKRlJJRURMX0RFQlVHCisgIGlmIChqZnJpZWRsX1hUIHx8IGpmcmllZGxfWFIpCisgIHsKKyMgICAgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjICAgICBpbmNsdWRlIDx0aW1lLmg+CisgICAgICBzdHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lLCBlbmRfdGltZTsKKyAgICAgIHN0cnVjdCB0aW1lem9uZSBkdW1teTsKKyAgICAgIGludCBpOworCisgICAgICBpZiAoamZyaWVkbF9YVCkKKyAgICAgIHsKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIG5ld2xlbiA9IGxlbmd0aCAqIGpmcmllZGxfWFQgKyBzdHJsZW4oamZyaWVkbF9wcmVmaXgpICsgc3RybGVuKGpmcmllZGxfcG9zdGZpeCk7CisgICAgICAgICAgY29uc3QgY2hhciAqb3JpZyA9IHB0cjsKKyAgICAgICAgICBwdHIgPSBtYWxsb2MobmV3bGVuICsgMSk7CisgICAgICAgICAgaWYgKCFwdHIpIHsKKyAgICAgICAgICAgICAgICAgIHByaW50Zigib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgICAgICAgcGNyZTJncmVwX2V4aXQoMik7CisgICAgICAgICAgfQorICAgICAgICAgIGVuZHB0ciA9IHB0cjsKKyAgICAgICAgICBzdHJjcHkoZW5kcHRyLCBqZnJpZWRsX3ByZWZpeCk7IGVuZHB0ciArPSBzdHJsZW4oamZyaWVkbF9wcmVmaXgpOworICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBqZnJpZWRsX1hUOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgIHN0cm5jcHkoZW5kcHRyLCBvcmlnLCAgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgIGVuZHB0ciArPSBsZW5ndGg7CisgICAgICAgICAgfQorICAgICAgICAgIHN0cmNweShlbmRwdHIsIGpmcmllZGxfcG9zdGZpeCk7IGVuZHB0ciArPSBzdHJsZW4oamZyaWVkbF9wb3N0Zml4KTsKKyAgICAgICAgICBsZW5ndGggPSBuZXdsZW47CisgICAgICB9CisKKyAgICAgIGlmIChnZXR0aW1lb2ZkYXkoJnN0YXJ0X3RpbWUsICZkdW1teSkgIT0gMCkKKyAgICAgICAgICAgICAgcGVycm9yKCJiYWQgZ2V0dGltZW9mZGF5Iik7CisKKworICAgICAgZm9yIChpID0gMDsgaSA8IGpmcmllZGxfWFI7IGkrKykKKyAgICAgICAgICBtYXRjaCA9IChwY3JlX2V4ZWMocGF0dGVybnMtPmNvbXBpbGVkLCBwYXR0ZXJucy0+aGludCwgcHRyLCBsZW5ndGgsIDAsCisgICAgICAgICAgICAgIFBDUkUyX05PVEVNUFRZLCBvZmZzZXRzLCBPRkZTRVRfU0laRSkgPj0gMCk7CisKKyAgICAgIGlmIChnZXR0aW1lb2ZkYXkoJmVuZF90aW1lLCAmZHVtbXkpICE9IDApCisgICAgICAgICAgICAgIHBlcnJvcigiYmFkIGdldHRpbWVvZmRheSIpOworCisgICAgICBkb3VibGUgZGVsdGEgPSAoKGVuZF90aW1lLnR2X3NlYyArIChlbmRfdGltZS50dl91c2VjIC8gMTAwMDAwMC4wKSkKKyAgICAgICAgICAgICAgICAgICAgICAtCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXJ0X3RpbWUudHZfc2VjICsgKHN0YXJ0X3RpbWUudHZfdXNlYyAvIDEwMDAwMDAuMCkpKTsKKworICAgICAgcHJpbnRmKCIlcyBUSU1FUlslLjRmXVxuIiwgbWF0Y2ggPyAiTUFUQ0giIDogIkZBSUwiLCBkZWx0YSk7CisgICAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmCisKKyAgLyogV2UgY29tZSBiYWNrIGhlcmUgYWZ0ZXIgYSBtYXRjaCB3aGVuIHNob3dfb25seV9tYXRjaGluZyBpcyBzZXQsIGluIG9yZGVyCisgIHRvIGZpbmQgYW55IGZ1cnRoZXIgbWF0Y2hlcyBpbiB0aGUgc2FtZSBsaW5lLiBUaGlzIGFwcGxpZXMgdG8KKyAgLS1vbmx5LW1hdGNoaW5nLCAtLWZpbGUtb2Zmc2V0cywgYW5kIC0tbGluZS1vZmZzZXRzLiAqLworCisgIE9OTFlfTUFUQ0hJTkdfUkVTVEFSVDoKKworICAvKiBSdW4gdGhyb3VnaCBhbGwgdGhlIHBhdHRlcm5zIHVudGlsIG9uZSBtYXRjaGVzIG9yIHRoZXJlIGlzIGFuIGVycm9yIG90aGVyCisgIHRoYW4gTk9NQVRDSC4gVGhpcyBjb2RlIGlzIGluIGEgc3Vicm91dGluZSBzbyB0aGF0IGl0IGNhbiBiZSByZS11c2VkIGZvcgorICBmaW5kaW5nIHN1YnNlcXVlbnQgbWF0Y2hlcyB3aGVuIGNvbG91cmluZyBtYXRjaGVkIGxpbmVzLiBBZnRlciBmaW5kaW5nIG9uZQorICBtYXRjaCwgc2V0IFBDUkUyX05PVEVNUFRZIHRvIGRpc2FibGUgYW55IGZ1cnRoZXIgbWF0Y2hlcyBvZiBudWxsIHN0cmluZ3MgaW4KKyAgdGhpcyBsaW5lLiAqLworCisgIG1hdGNoID0gbWF0Y2hfcGF0dGVybnMobWF0Y2hwdHIsIGxlbmd0aCwgb3B0aW9ucywgc3RhcnRvZmZzZXQsICZtcmMpOworICBvcHRpb25zID0gUENSRTJfTk9URU1QVFk7CisKKyAgLyogSWYgaXQncyBhIG1hdGNoIG9yIGEgbm90LW1hdGNoIChhcyByZXF1aXJlZCksIGRvIHdoYXQncyB3YW50ZWQuICovCisKKyAgaWYgKG1hdGNoICE9IGludmVydCkKKyAgICB7CisgICAgQk9PTCBoeXBoZW5wcmludGVkID0gRkFMU0U7CisKKyAgICAvKiBXZSd2ZSBmYWlsZWQgaWYgd2Ugd2FudCBhIGZpbGUgdGhhdCBkb2Vzbid0IGhhdmUgYW55IG1hdGNoZXMuICovCisKKyAgICBpZiAoZmlsZW5hbWVzID09IEZOX05PTUFUQ0hfT05MWSkgcmV0dXJuIDE7CisKKyAgICAvKiBJZiBhbGwgd2Ugd2FudCBpcyBhIHllcy9ubyBhbnN3ZXIsIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHkuICovCisKKyAgICBpZiAocXVpZXQpIHJldHVybiAwOworCisgICAgLyogSnVzdCBjb3VudCBpZiBqdXN0IGNvdW50aW5nIGlzIHdhbnRlZC4gKi8KKworICAgIGVsc2UgaWYgKGNvdW50X29ubHkpIGNvdW50Kys7CisKKyAgICAvKiBXaGVuIGhhbmRsaW5nIGEgYmluYXJ5IGZpbGUgYW5kIGJpbmFyeS1maWxlcz09YmluYXJ5LCB0aGUgImJpbmFyeSIKKyAgICB2YXJpYWJsZSB3aWxsIGJlIHNldCB0cnVlIChpdCdzIGZhbHNlIGluIGFsbCBvdGhlciBjYXNlcykuIEluIHRoaXMKKyAgICBzaXR1YXRpb24gd2UganVzdCB3YW50IHRvIG91dHB1dCB0aGUgZmlsZSBuYW1lLiBObyBuZWVkIHRvIHNjYW4gZnVydGhlci4gKi8KKworICAgIGVsc2UgaWYgKGJpbmFyeSkKKyAgICAgIHsKKyAgICAgIGZwcmludGYoc3Rkb3V0LCAiQmluYXJ5IGZpbGUgJXMgbWF0Y2hlc1xuIiwgZmlsZW5hbWUpOworICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAvKiBMaWtld2lzZSwgaWYgYWxsIHdlIHdhbnQgaXMgYSBmaWxlIG5hbWUsIHRoZXJlIGlzIG5vIG5lZWQgdG8gc2NhbiBhbnkKKyAgICBtb3JlIGxpbmVzIGluIHRoZSBmaWxlLiAqLworCisgICAgZWxzZSBpZiAoZmlsZW5hbWVzID09IEZOX01BVENIX09OTFkpCisgICAgICB7CisgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVzXG4iLCBwcmludG5hbWUpOworICAgICAgcmV0dXJuIDA7CisgICAgICB9CisKKyAgICAvKiBUaGUgLS1vbmx5LW1hdGNoaW5nIG9wdGlvbiBwcmludHMganVzdCB0aGUgc3Vic3RyaW5nIHRoYXQgbWF0Y2hlZCwKKyAgICBhbmQvb3Igb25lIG9yIG1vcmUgY2FwdHVyZWQgcG9ydGlvbnMgb2YgaXQsIGFzIGxvbmcgYXMgdGhlc2Ugc3RyaW5ncyBhcmUKKyAgICBub3QgZW1wdHkuIFRoZSAtLWZpbGUtb2Zmc2V0cyBhbmQgLS1saW5lLW9mZnNldHMgb3B0aW9ucyBvdXRwdXQgb2Zmc2V0cyBmb3IKKyAgICB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5nIChhbGwgdGhyZWUgc2V0IHNob3dfb25seV9tYXRjaGluZykuIE5vbmUgb2YgdGhlc2UKKyAgICBtdXR1YWxseSBleGNsdXNpdmUgb3B0aW9ucyBwcmludHMgYW55IGNvbnRleHQuIEFmdGVyd2FyZHMsIGFkanVzdCB0aGUgc3RhcnQKKyAgICBhbmQgdGhlbiBqdW1wIGJhY2sgdG8gbG9vayBmb3IgZnVydGhlciBtYXRjaGVzIGluIHRoZSBzYW1lIGxpbmUuIElmIHdlIGFyZQorICAgIGluIGludmVydCBtb2RlLCBob3dldmVyLCBub3RoaW5nIGlzIHByaW50ZWQgYW5kIHdlIGRvIG5vdCByZXN0YXJ0IC0gdGhpcworICAgIGNvdWxkIHN0aWxsIGJlIHVzZWZ1bCBiZWNhdXNlIHRoZSByZXR1cm4gY29kZSBpcyBzZXQuICovCisKKyAgICBlbHNlIGlmIChzaG93X29ubHlfbWF0Y2hpbmcpCisgICAgICB7CisgICAgICBpZiAoIWludmVydCkKKyAgICAgICAgeworICAgICAgICBzaXplX3Qgb2xkc3RhcnRvZmZzZXQ7CisKKyAgICAgICAgaWYgKHByaW50bmFtZSAhPSBOVUxMKSBmcHJpbnRmKHN0ZG91dCwgIiVzOiIsIHByaW50bmFtZSk7CisgICAgICAgIGlmIChudW1iZXIpIGZwcmludGYoc3Rkb3V0LCAiJWQ6IiwgbGluZW51bWJlcik7CisKKyAgICAgICAgLyogSGFuZGxlIC0tbGluZS1vZmZzZXRzICovCisKKyAgICAgICAgaWYgKGxpbmVfb2Zmc2V0cykKKyAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVkLCVkXG4iLCAoaW50KShtYXRjaHB0ciArIG9mZnNldHNbMF0gLSBwdHIpLAorICAgICAgICAgICAgKGludCkob2Zmc2V0c1sxXSAtIG9mZnNldHNbMF0pKTsKKworICAgICAgICAvKiBIYW5kbGUgLS1maWxlLW9mZnNldHMgKi8KKworICAgICAgICBlbHNlIGlmIChmaWxlX29mZnNldHMpCisgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIlZCwlZFxuIiwKKyAgICAgICAgICAgIChpbnQpKGZpbGVwb3MgKyBtYXRjaHB0ciArIG9mZnNldHNbMF0gLSBwdHIpLAorICAgICAgICAgICAgKGludCkob2Zmc2V0c1sxXSAtIG9mZnNldHNbMF0pKTsKKworICAgICAgICAvKiBIYW5kbGUgLS1vbmx5LW1hdGNoaW5nLCB3aGljaCBtYXkgb2NjdXIgbWFueSB0aW1lcyAqLworCisgICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgQk9PTCBwcmludGVkID0gRkFMU0U7CisgICAgICAgICAgb21zdHIgKm9tOworCisgICAgICAgICAgZm9yIChvbSA9IG9ubHlfbWF0Y2hpbmc7IG9tICE9IE5VTEw7IG9tID0gb20tPm5leHQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpbnQgbiA9IG9tLT5ncm91cG51bTsKKyAgICAgICAgICAgIGlmIChuIDwgbXJjKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGludCBwbGVuID0gb2Zmc2V0c1syKm4gKyAxXSAtIG9mZnNldHNbMipuXTsKKyAgICAgICAgICAgICAgaWYgKHBsZW4gPiAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAocHJpbnRlZCkgZnByaW50ZihzdGRvdXQsICIlcyIsIG9tX3NlcGFyYXRvcik7CisgICAgICAgICAgICAgICAgaWYgKGRvX2NvbG91cikgZnByaW50ZihzdGRvdXQsICIlY1slc20iLCAweDFiLCBjb2xvdXJfc3RyaW5nKTsKKyAgICAgICAgICAgICAgICBGV1JJVEUobWF0Y2hwdHIgKyBvZmZzZXRzW24qMl0sIDEsIHBsZW4sIHN0ZG91dCk7CisgICAgICAgICAgICAgICAgaWYgKGRvX2NvbG91cikgZnByaW50ZihzdGRvdXQsICIlY1swMG0iLCAweDFiKTsKKyAgICAgICAgICAgICAgICBwcmludGVkID0gVFJVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgIGlmIChwcmludGVkIHx8IHByaW50bmFtZSAhPSBOVUxMIHx8IG51bWJlcikgZnByaW50ZihzdGRvdXQsICJcbiIpOworICAgICAgICAgIH0KKworICAgICAgICAvKiBQcmVwYXJlIHRvIHJlcGVhdCB0byBmaW5kIHRoZSBuZXh0IG1hdGNoLiBJZiB0aGUgcGF0dGVybiBjb250YWluZWQgYQorICAgICAgICBsb29rYmVoaW5kIHRoYXQgaW5jbHVkZWQgXEssIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGVuZCBvZiB0aGUgbWF0Y2gKKyAgICAgICAgbWlnaHQgYmUgYXQgb3IgYmVmb3JlIHRoZSBhY3R1YWwgc3RhcnRpbmcgb2Zmc2V0IHdlIGhhdmUganVzdCB1c2VkLiBJbgorICAgICAgICB0aGlzIGNhc2UsIHN0YXJ0IG9uZSBjaGFyYWN0ZXIgZnVydGhlciBvbi4gKi8KKworICAgICAgICBtYXRjaCA9IEZBTFNFOworICAgICAgICBpZiAobGluZV9idWZmZXJlZCkgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgIHJjID0gMDsgICAgICAgICAgICAgICAgICAgICAgLyogSGFkIHNvbWUgc3VjY2VzcyAqLworICAgICAgICBzdGFydG9mZnNldCA9IG9mZnNldHNbMV07ICAgIC8qIFJlc3RhcnQgYWZ0ZXIgdGhlIG1hdGNoICovCisgICAgICAgIG9sZHN0YXJ0b2Zmc2V0ID0gcGNyZTJfZ2V0X3N0YXJ0Y2hhcihtYXRjaF9kYXRhKTsKKyAgICAgICAgaWYgKHN0YXJ0b2Zmc2V0IDw9IG9sZHN0YXJ0b2Zmc2V0KQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoc3RhcnRvZmZzZXQgPj0gbGVuZ3RoKSBnb3RvIEVORF9PTkVfTUFUQ0g7ICAvKiBXZXJlIGF0IGVuZCAqLworICAgICAgICAgIHN0YXJ0b2Zmc2V0ID0gb2xkc3RhcnRvZmZzZXQgKyAxOworICAgICAgICAgIGlmICh1dGYpCisgICAgICAgICAgICB3aGlsZSAoKG1hdGNocHRyW3N0YXJ0b2Zmc2V0XSAmIDB4YzApID09IDB4ODApIHN0YXJ0b2Zmc2V0Kys7CisgICAgICAgICAgfQorICAgICAgICBnb3RvIE9OTFlfTUFUQ0hJTkdfUkVTVEFSVDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogVGhpcyBpcyB0aGUgZGVmYXVsdCBjYXNlIHdoZW4gbm9uZSBvZiB0aGUgYWJvdmUgb3B0aW9ucyBpcyBzZXQuIFdlIHByaW50CisgICAgdGhlIG1hdGNoaW5nIGxpbmVzKHMpLCBwb3NzaWJseSBwcmVjZWRlZCBhbmQvb3IgZm9sbG93ZWQgYnkgb3RoZXIgbGluZXMgb2YKKyAgICBjb250ZXh0LiAqLworCisgICAgZWxzZQorICAgICAgeworICAgICAgLyogU2VlIGlmIHRoZXJlIGlzIGEgcmVxdWlyZW1lbnQgdG8gcHJpbnQgc29tZSAiYWZ0ZXIiIGxpbmVzIGZyb20gYQorICAgICAgcHJldmlvdXMgbWF0Y2guIFdlIG5ldmVyIHByaW50IGFueSBvdmVybGFwcy4gKi8KKworICAgICAgaWYgKGFmdGVyX2NvbnRleHQgPiAwICYmIGxhc3RtYXRjaG51bWJlciA+IDApCisgICAgICAgIHsKKyAgICAgICAgaW50IGVsbGVuZ3RoOworICAgICAgICBpbnQgbGluZWNvdW50ID0gMDsKKyAgICAgICAgY2hhciAqcCA9IGxhc3RtYXRjaHJlc3RhcnQ7CisKKyAgICAgICAgd2hpbGUgKHAgPCBwdHIgJiYgbGluZWNvdW50IDwgYWZ0ZXJfY29udGV4dCkKKyAgICAgICAgICB7CisgICAgICAgICAgcCA9IGVuZF9vZl9saW5lKHAsIHB0ciwgJmVsbGVuZ3RoKTsKKyAgICAgICAgICBsaW5lY291bnQrKzsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogSXQgaXMgaW1wb3J0YW50IHRvIGFkdmFuY2UgbGFzdG1hdGNocmVzdGFydCBkdXJpbmcgdGhpcyBwcmludGluZyBzbworICAgICAgICB0aGF0IGl0IGludGVyYWN0cyBjb3JyZWN0bHkgd2l0aCBhbnkgImJlZm9yZSIgcHJpbnRpbmcgYmVsb3cuIFByaW50CisgICAgICAgIGVhY2ggbGluZSdzIGRhdGEgdXNpbmcgZndyaXRlKCkgaW4gY2FzZSB0aGVyZSBhcmUgYmluYXJ5IHplcm9lcy4gKi8KKworICAgICAgICB3aGlsZSAobGFzdG1hdGNocmVzdGFydCA8IHApCisgICAgICAgICAgeworICAgICAgICAgIGNoYXIgKnBwID0gbGFzdG1hdGNocmVzdGFydDsKKyAgICAgICAgICBpZiAocHJpbnRuYW1lICE9IE5VTEwpIGZwcmludGYoc3Rkb3V0LCAiJXMtIiwgcHJpbnRuYW1lKTsKKyAgICAgICAgICBpZiAobnVtYmVyKSBmcHJpbnRmKHN0ZG91dCwgIiVkLSIsIGxhc3RtYXRjaG51bWJlcisrKTsKKyAgICAgICAgICBwcCA9IGVuZF9vZl9saW5lKHBwLCBlbmRwdHIsICZlbGxlbmd0aCk7CisgICAgICAgICAgRldSSVRFKGxhc3RtYXRjaHJlc3RhcnQsIDEsIHBwIC0gbGFzdG1hdGNocmVzdGFydCwgc3Rkb3V0KTsKKyAgICAgICAgICBsYXN0bWF0Y2hyZXN0YXJ0ID0gcHA7CisgICAgICAgICAgfQorICAgICAgICBpZiAobGFzdG1hdGNocmVzdGFydCAhPSBwdHIpIGh5cGhlbnBlbmRpbmcgPSBUUlVFOworICAgICAgICB9CisKKyAgICAgIC8qIElmIHRoZXJlIHdlcmUgbm9uLWNvbnRpZ3VvdXMgbGluZXMgcHJpbnRlZCBhYm92ZSwgaW5zZXJ0IGh5cGhlbnMuICovCisKKyAgICAgIGlmIChoeXBoZW5wZW5kaW5nKQorICAgICAgICB7CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiLS1cbiIpOworICAgICAgICBoeXBoZW5wZW5kaW5nID0gRkFMU0U7CisgICAgICAgIGh5cGhlbnByaW50ZWQgPSBUUlVFOworICAgICAgICB9CisKKyAgICAgIC8qIFNlZSBpZiB0aGVyZSBpcyBhIHJlcXVpcmVtZW50IHRvIHByaW50IHNvbWUgImJlZm9yZSIgbGluZXMgZm9yIHRoaXMKKyAgICAgIG1hdGNoLiBBZ2FpbiwgZG9uJ3QgcHJpbnQgb3ZlcmxhcHMuICovCisKKyAgICAgIGlmIChiZWZvcmVfY29udGV4dCA+IDApCisgICAgICAgIHsKKyAgICAgICAgaW50IGxpbmVjb3VudCA9IDA7CisgICAgICAgIGNoYXIgKnAgPSBwdHI7CisKKyAgICAgICAgd2hpbGUgKHAgPiBtYWluX2J1ZmZlciAmJiAobGFzdG1hdGNobnVtYmVyID09IDAgfHwgcCA+IGxhc3RtYXRjaHJlc3RhcnQpICYmCisgICAgICAgICAgICAgICBsaW5lY291bnQgPCBiZWZvcmVfY29udGV4dCkKKyAgICAgICAgICB7CisgICAgICAgICAgbGluZWNvdW50Kys7CisgICAgICAgICAgcCA9IHByZXZpb3VzX2xpbmUocCwgbWFpbl9idWZmZXIpOworICAgICAgICAgIH0KKworICAgICAgICBpZiAobGFzdG1hdGNobnVtYmVyID4gMCAmJiBwID4gbGFzdG1hdGNocmVzdGFydCAmJiAhaHlwaGVucHJpbnRlZCkKKyAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIi0tXG4iKTsKKworICAgICAgICB3aGlsZSAocCA8IHB0cikKKyAgICAgICAgICB7CisgICAgICAgICAgaW50IGVsbGVuZ3RoOworICAgICAgICAgIGNoYXIgKnBwID0gcDsKKyAgICAgICAgICBpZiAocHJpbnRuYW1lICE9IE5VTEwpIGZwcmludGYoc3Rkb3V0LCAiJXMtIiwgcHJpbnRuYW1lKTsKKyAgICAgICAgICBpZiAobnVtYmVyKSBmcHJpbnRmKHN0ZG91dCwgIiVkLSIsIGxpbmVudW1iZXIgLSBsaW5lY291bnQtLSk7CisgICAgICAgICAgcHAgPSBlbmRfb2ZfbGluZShwcCwgZW5kcHRyLCAmZWxsZW5ndGgpOworICAgICAgICAgIEZXUklURShwLCAxLCBwcCAtIHAsIHN0ZG91dCk7CisgICAgICAgICAgcCA9IHBwOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBOb3cgcHJpbnQgdGhlIG1hdGNoaW5nIGxpbmUocyk7IGVuc3VyZSB3ZSBzZXQgaHlwaGVucGVuZGluZyBhdCB0aGUgZW5kCisgICAgICBvZiB0aGUgZmlsZSBpZiBhbnkgY29udGV4dCBsaW5lcyBhcmUgYmVpbmcgb3V0cHV0LiAqLworCisgICAgICBpZiAoYWZ0ZXJfY29udGV4dCA+IDAgfHwgYmVmb3JlX2NvbnRleHQgPiAwKQorICAgICAgICBlbmRoeXBoZW5wZW5kaW5nID0gVFJVRTsKKworICAgICAgaWYgKHByaW50bmFtZSAhPSBOVUxMKSBmcHJpbnRmKHN0ZG91dCwgIiVzOiIsIHByaW50bmFtZSk7CisgICAgICBpZiAobnVtYmVyKSBmcHJpbnRmKHN0ZG91dCwgIiVkOiIsIGxpbmVudW1iZXIpOworCisgICAgICAvKiBJbiBtdWx0aWxpbmUgbW9kZSwgd2Ugd2FudCB0byBwcmludCB0byB0aGUgZW5kIG9mIHRoZSBsaW5lIGluIHdoaWNoCisgICAgICB0aGUgZW5kIG9mIHRoZSBtYXRjaGVkIHN0cmluZyBpcyBmb3VuZCwgc28gd2UgYWRqdXN0IGxpbmVsZW5ndGggYW5kIHRoZQorICAgICAgbGluZSBudW1iZXIgYXBwcm9wcmlhdGVseSwgYnV0IG9ubHkgd2hlbiB0aGVyZSBhY3R1YWxseSB3YXMgYSBtYXRjaAorICAgICAgKGludmVydCBub3Qgc2V0KS4gQmVjYXVzZSB0aGUgUENSRTJfRklSU1RMSU5FIG9wdGlvbiBpcyBzZXQsIHRoZSBzdGFydCBvZgorICAgICAgdGhlIG1hdGNoIHdpbGwgYWx3YXlzIGJlIGJlZm9yZSB0aGUgZmlyc3QgbmV3bGluZSBzZXF1ZW5jZS4gKi8KKworICAgICAgaWYgKG11bHRpbGluZSAmICFpbnZlcnQpCisgICAgICAgIHsKKyAgICAgICAgY2hhciAqZW5kbWF0Y2ggPSBwdHIgKyBvZmZzZXRzWzFdOworICAgICAgICB0ID0gcHRyOworICAgICAgICB3aGlsZSAodCA8PSBlbmRtYXRjaCkKKyAgICAgICAgICB7CisgICAgICAgICAgdCA9IGVuZF9vZl9saW5lKHQsIGVuZHB0ciwgJmVuZGxpbmVsZW5ndGgpOworICAgICAgICAgIGlmICh0IDwgZW5kbWF0Y2gpIGxpbmVudW1iZXIrKzsgZWxzZSBicmVhazsKKyAgICAgICAgICB9CisgICAgICAgIGxpbmVsZW5ndGggPSB0IC0gcHRyIC0gZW5kbGluZWxlbmd0aDsKKyAgICAgICAgfQorCisgICAgICAvKioqIE5PVEU6IFVzZSBvbmx5IGZ3cml0ZSgpIHRvIG91dHB1dCB0aGUgZGF0YSBsaW5lLCBzbyB0aGF0IGJpbmFyeQorICAgICAgemVyb2VzIGFyZSB0cmVhdGVkIGFzIGp1c3QgYW5vdGhlciBkYXRhIGNoYXJhY3Rlci4gKi8KKworICAgICAgLyogVGhpcyBleHRyYSBvcHRpb24sIGZvciBKZWZmcmV5IEZyaWVkbCdzIGRlYnVnZ2luZyByZXF1aXJlbWVudHMsCisgICAgICByZXBsYWNlcyB0aGUgbWF0Y2hlZCBzdHJpbmcsIG9yIGEgc3BlY2lmaWMgY2FwdHVyZWQgc3RyaW5nIGlmIGl0IGV4aXN0cywKKyAgICAgIHdpdGggWC4gV2hlbiB0aGlzIGhhcHBlbnMsIGNvbG91cmluZyBpcyBpZ25vcmVkLiAqLworCisjaWZkZWYgSkZSSUVETF9ERUJVRworICAgICAgaWYgKFNfYXJnID49IDAgJiYgU19hcmcgPCBtcmMpCisgICAgICAgIHsKKyAgICAgICAgaW50IGZpcnN0ID0gU19hcmcgKiAyOworICAgICAgICBpbnQgbGFzdCAgPSBmaXJzdCArIDE7CisgICAgICAgIEZXUklURShwdHIsIDEsIG9mZnNldHNbZmlyc3RdLCBzdGRvdXQpOworICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlgiKTsKKyAgICAgICAgRldSSVRFKHB0ciArIG9mZnNldHNbbGFzdF0sIDEsIGxpbmVsZW5ndGggLSBvZmZzZXRzW2xhc3RdLCBzdGRvdXQpOworICAgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYKKworICAgICAgLyogV2UgaGF2ZSB0byBzcGxpdCB0aGUgbGluZShzKSB1cCBpZiBjb2xvdXJpbmcsIGFuZCBzZWFyY2ggZm9yIGZ1cnRoZXIKKyAgICAgIG1hdGNoZXMsIGJ1dCBub3Qgb2YgY291cnNlIGlmIHRoZSBsaW5lIGlzIGEgbm9uLW1hdGNoLiAqLworCisgICAgICBpZiAoZG9fY29sb3VyICYmICFpbnZlcnQpCisgICAgICAgIHsKKyAgICAgICAgaW50IHBsZW5ndGg7CisgICAgICAgIEZXUklURShwdHIsIDEsIG9mZnNldHNbMF0sIHN0ZG91dCk7CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJWNbJXNtIiwgMHgxYiwgY29sb3VyX3N0cmluZyk7CisgICAgICAgIEZXUklURShwdHIgKyBvZmZzZXRzWzBdLCAxLCBvZmZzZXRzWzFdIC0gb2Zmc2V0c1swXSwgc3Rkb3V0KTsKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICIlY1swMG0iLCAweDFiKTsKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgICB7CisgICAgICAgICAgc3RhcnRvZmZzZXQgPSBvZmZzZXRzWzFdOworICAgICAgICAgIGlmIChzdGFydG9mZnNldCA+PSBsaW5lbGVuZ3RoICsgZW5kbGluZWxlbmd0aCB8fAorICAgICAgICAgICAgICAhbWF0Y2hfcGF0dGVybnMobWF0Y2hwdHIsIGxlbmd0aCwgb3B0aW9ucywgc3RhcnRvZmZzZXQsICZtcmMpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgRldSSVRFKG1hdGNocHRyICsgc3RhcnRvZmZzZXQsIDEsIG9mZnNldHNbMF0gLSBzdGFydG9mZnNldCwgc3Rkb3V0KTsKKyAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVjWyVzbSIsIDB4MWIsIGNvbG91cl9zdHJpbmcpOworICAgICAgICAgIEZXUklURShtYXRjaHB0ciArIG9mZnNldHNbMF0sIDEsIG9mZnNldHNbMV0gLSBvZmZzZXRzWzBdLCBzdGRvdXQpOworICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJWNbMDBtIiwgMHgxYik7CisgICAgICAgICAgfQorCisgICAgICAgIC8qIEluIG11bHRpbGluZSBtb2RlLCB3ZSBtYXkgaGF2ZSBhbHJlYWR5IHByaW50ZWQgdGhlIGNvbXBsZXRlIGxpbmUKKyAgICAgICAgYW5kIGl0cyBsaW5lLWVuZGluZyBjaGFyYWN0ZXJzIChpZiB0aGV5IG1hdGNoZWQgdGhlIHBhdHRlcm4pLCBzbyB0aGVyZQorICAgICAgICBtYXkgYmUgbm8gbW9yZSB0byBwcmludC4gKi8KKworICAgICAgICBwbGVuZ3RoID0gKGludCkoKGxpbmVsZW5ndGggKyBlbmRsaW5lbGVuZ3RoKSAtIHN0YXJ0b2Zmc2V0KTsKKyAgICAgICAgaWYgKHBsZW5ndGggPiAwKSBGV1JJVEUocHRyICsgc3RhcnRvZmZzZXQsIDEsIHBsZW5ndGgsIHN0ZG91dCk7CisgICAgICAgIH0KKworICAgICAgLyogTm90IGNvbG91cmluZzsgbm8gbmVlZCB0byBzZWFyY2ggZm9yIGZ1cnRoZXIgbWF0Y2hlcyAqLworCisgICAgICBlbHNlIEZXUklURShwdHIsIDEsIGxpbmVsZW5ndGggKyBlbmRsaW5lbGVuZ3RoLCBzdGRvdXQpOworICAgICAgfQorCisgICAgLyogRW5kIG9mIGRvaW5nIHdoYXQgaGFzIHRvIGJlIGRvbmUgZm9yIGEgbWF0Y2guIElmIC0tbGluZS1idWZmZXJlZCB3YXMKKyAgICBnaXZlbiwgZmx1c2ggdGhlIG91dHB1dC4gKi8KKworICAgIGlmIChsaW5lX2J1ZmZlcmVkKSBmZmx1c2goc3Rkb3V0KTsKKyAgICByYyA9IDA7ICAgIC8qIEhhZCBzb21lIHN1Y2Nlc3MgKi8KKworICAgIC8qIFJlbWVtYmVyIHdoZXJlIHRoZSBsYXN0IG1hdGNoIGhhcHBlbmVkIGZvciBhZnRlcl9jb250ZXh0LiBXZSByZW1lbWJlcgorICAgIHdoZXJlIHdlIGFyZSBhYm91dCB0byByZXN0YXJ0LCBhbmQgdGhhdCBsaW5lJ3MgbnVtYmVyLiAqLworCisgICAgbGFzdG1hdGNocmVzdGFydCA9IHB0ciArIGxpbmVsZW5ndGggKyBlbmRsaW5lbGVuZ3RoOworICAgIGxhc3RtYXRjaG51bWJlciA9IGxpbmVudW1iZXIgKyAxOworICAgIH0KKworICAvKiBGb3IgYSBtYXRjaCBpbiBtdWx0aWxpbmUgaW52ZXJ0ZWQgbW9kZSAod2hpY2ggb2YgY291cnNlIGRpZCBub3QgY2F1c2UKKyAgYW55dGhpbmcgdG8gYmUgcHJpbnRlZCksIHdlIGhhdmUgdG8gbW92ZSBvbiB0byB0aGUgZW5kIG9mIHRoZSBtYXRjaCBiZWZvcmUKKyAgcHJvY2VlZGluZy4gKi8KKworICBpZiAobXVsdGlsaW5lICYmIGludmVydCAmJiBtYXRjaCkKKyAgICB7CisgICAgaW50IGVsbGVuZ3RoOworICAgIGNoYXIgKmVuZG1hdGNoID0gcHRyICsgb2Zmc2V0c1sxXTsKKyAgICB0ID0gcHRyOworICAgIHdoaWxlICh0IDwgZW5kbWF0Y2gpCisgICAgICB7CisgICAgICB0ID0gZW5kX29mX2xpbmUodCwgZW5kcHRyLCAmZWxsZW5ndGgpOworICAgICAgaWYgKHQgPD0gZW5kbWF0Y2gpIGxpbmVudW1iZXIrKzsgZWxzZSBicmVhazsKKyAgICAgIH0KKyAgICBlbmRtYXRjaCA9IGVuZF9vZl9saW5lKGVuZG1hdGNoLCBlbmRwdHIsICZlbGxlbmd0aCk7CisgICAgbGluZWxlbmd0aCA9IGVuZG1hdGNoIC0gcHRyIC0gZWxsZW5ndGg7CisgICAgfQorCisgIC8qIEFkdmFuY2UgdG8gYWZ0ZXIgdGhlIG5ld2xpbmUgYW5kIGluY3JlbWVudCB0aGUgbGluZSBudW1iZXIuIFRoZSBmaWxlCisgIG9mZnNldCB0byB0aGUgY3VycmVudCBsaW5lIGlzIG1haW50YWluZWQgaW4gZmlsZXBvcy4gKi8KKworICBFTkRfT05FX01BVENIOgorICBwdHIgKz0gbGluZWxlbmd0aCArIGVuZGxpbmVsZW5ndGg7CisgIGZpbGVwb3MgKz0gKGludCkobGluZWxlbmd0aCArIGVuZGxpbmVsZW5ndGgpOworICBsaW5lbnVtYmVyKys7CisKKyAgLyogSWYgaW5wdXQgaXMgbGluZSBidWZmZXJlZCwgYW5kIHRoZSBidWZmZXIgaXMgbm90IHlldCBmdWxsLCByZWFkIGFub3RoZXIKKyAgbGluZSBhbmQgYWRkIGl0IGludG8gdGhlIGJ1ZmZlci4gKi8KKworICBpZiAoaW5wdXRfbGluZV9idWZmZXJlZCAmJiBidWZmbGVuZ3RoIDwgKHNpemVfdClidWZzaXplKQorICAgIHsKKyAgICBpbnQgYWRkID0gcmVhZF9vbmVfbGluZShwdHIsIGJ1ZnNpemUgLSAoaW50KShwdHIgLSBtYWluX2J1ZmZlciksIGluKTsKKyAgICBidWZmbGVuZ3RoICs9IGFkZDsKKyAgICBlbmRwdHIgKz0gYWRkOworICAgIH0KKworICAvKiBJZiB3ZSBoYXZlbid0IHlldCByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGZpbGUgKHRoZSBidWZmZXIgaXMgZnVsbCksIGFuZAorICB0aGUgY3VycmVudCBwb2ludCBpcyBpbiB0aGUgdG9wIDEvMyBvZiB0aGUgYnVmZmVyLCBzbGlkZSB0aGUgYnVmZmVyIGRvd24gYnkKKyAgMS8zIGFuZCByZWZpbGwgaXQuIEJlZm9yZSB3ZSBkbyB0aGlzLCBpZiBzb21lIHVucHJpbnRlZCAiYWZ0ZXIiIGxpbmVzIGFyZQorICBhYm91dCB0byBiZSBsb3N0LCBwcmludCB0aGVtLiAqLworCisgIGlmIChidWZmbGVuZ3RoID49IChzaXplX3QpYnVmc2l6ZSAmJiBwdHIgPiBtYWluX2J1ZmZlciArIDIqYnVmdGhpcmQpCisgICAgeworICAgIGlmIChhZnRlcl9jb250ZXh0ID4gMCAmJgorICAgICAgICBsYXN0bWF0Y2hudW1iZXIgPiAwICYmCisgICAgICAgIGxhc3RtYXRjaHJlc3RhcnQgPCBtYWluX2J1ZmZlciArIGJ1ZnRoaXJkKQorICAgICAgeworICAgICAgZG9fYWZ0ZXJfbGluZXMobGFzdG1hdGNobnVtYmVyLCBsYXN0bWF0Y2hyZXN0YXJ0LCBlbmRwdHIsIHByaW50bmFtZSk7CisgICAgICBsYXN0bWF0Y2hudW1iZXIgPSAwOworICAgICAgfQorCisgICAgLyogTm93IGRvIHRoZSBzaHVmZmxlICovCisKKyAgICBtZW1tb3ZlKG1haW5fYnVmZmVyLCBtYWluX2J1ZmZlciArIGJ1ZnRoaXJkLCAyKmJ1ZnRoaXJkKTsKKyAgICBwdHIgLT0gYnVmdGhpcmQ7CisKKyNpZmRlZiBTVVBQT1JUX0xJQloKKyAgICBpZiAoZnJ0eXBlID09IEZSX0xJQlopCisgICAgICBidWZmbGVuZ3RoID0gMipidWZ0aGlyZCArCisgICAgICAgIGd6cmVhZCAoaW5neiwgbWFpbl9idWZmZXIgKyAyKmJ1ZnRoaXJkLCBidWZ0aGlyZCk7CisgICAgZWxzZQorI2VuZGlmCisKKyNpZmRlZiBTVVBQT1JUX0xJQkJaMgorICAgIGlmIChmcnR5cGUgPT0gRlJfTElCQloyKQorICAgICAgYnVmZmxlbmd0aCA9IDIqYnVmdGhpcmQgKworICAgICAgICBCWjJfYnpyZWFkKGluYnoyLCBtYWluX2J1ZmZlciArIDIqYnVmdGhpcmQsIGJ1ZnRoaXJkKTsKKyAgICBlbHNlCisjZW5kaWYKKworICAgIGJ1ZmZsZW5ndGggPSAyKmJ1ZnRoaXJkICsKKyAgICAgIChpbnB1dF9saW5lX2J1ZmZlcmVkPworICAgICAgIHJlYWRfb25lX2xpbmUobWFpbl9idWZmZXIgKyAyKmJ1ZnRoaXJkLCBidWZ0aGlyZCwgaW4pIDoKKyAgICAgICBmcmVhZChtYWluX2J1ZmZlciArIDIqYnVmdGhpcmQsIDEsIGJ1ZnRoaXJkLCBpbikpOworICAgIGVuZHB0ciA9IG1haW5fYnVmZmVyICsgYnVmZmxlbmd0aDsKKworICAgIC8qIEFkanVzdCBhbnkgbGFzdCBtYXRjaCBwb2ludCAqLworCisgICAgaWYgKGxhc3RtYXRjaG51bWJlciA+IDApIGxhc3RtYXRjaHJlc3RhcnQgLT0gYnVmdGhpcmQ7CisgICAgfQorICB9ICAgICAvKiBMb29wIHRocm91Z2ggdGhlIHdob2xlIGZpbGUgKi8KKworLyogRW5kIG9mIGZpbGU7IHByaW50IGZpbmFsICJhZnRlciIgbGluZXMgaWYgd2FudGVkOyBkb19hZnRlcl9saW5lcyBzZXRzCitoeXBoZW5wZW5kaW5nIGlmIGl0IHByaW50cyBzb21ldGhpbmcuICovCisKK2lmICghc2hvd19vbmx5X21hdGNoaW5nICYmICFjb3VudF9vbmx5KQorICB7CisgIGRvX2FmdGVyX2xpbmVzKGxhc3RtYXRjaG51bWJlciwgbGFzdG1hdGNocmVzdGFydCwgZW5kcHRyLCBwcmludG5hbWUpOworICBoeXBoZW5wZW5kaW5nIHw9IGVuZGh5cGhlbnBlbmRpbmc7CisgIH0KKworLyogUHJpbnQgdGhlIGZpbGUgbmFtZSBpZiB3ZSBhcmUgbG9va2luZyBmb3IgdGhvc2Ugd2l0aG91dCBtYXRjaGVzIGFuZCB0aGVyZQord2VyZSBub25lLiBJZiB3ZSBmb3VuZCBhIG1hdGNoLCB3ZSB3b24ndCBoYXZlIGdvdCB0aGlzIGZhci4gKi8KKworaWYgKGZpbGVuYW1lcyA9PSBGTl9OT01BVENIX09OTFkpCisgIHsKKyAgZnByaW50ZihzdGRvdXQsICIlc1xuIiwgcHJpbnRuYW1lKTsKKyAgcmV0dXJuIDA7CisgIH0KKworLyogUHJpbnQgdGhlIG1hdGNoIGNvdW50IGlmIHdhbnRlZCAqLworCitpZiAoY291bnRfb25seSAmJiAhcXVpZXQpCisgIHsKKyAgaWYgKGNvdW50ID4gMCB8fCAhb21pdF96ZXJvX2NvdW50KQorICAgIHsKKyAgICBpZiAocHJpbnRuYW1lICE9IE5VTEwgJiYgZmlsZW5hbWVzICE9IEZOX05PTkUpCisgICAgICBmcHJpbnRmKHN0ZG91dCwgIiVzOiIsIHByaW50bmFtZSk7CisgICAgZnByaW50ZihzdGRvdXQsICIlZFxuIiwgY291bnQpOworICAgIH0KKyAgfQorCityZXR1cm4gcmM7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgR3JlcCBhIGZpbGUgb3IgcmVjdXJzZSBpbnRvIGEgZGlyZWN0b3J5ICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEdpdmVuIGEgcGF0aCBuYW1lLCBpZiBpdCdzIGEgZGlyZWN0b3J5LCBzY2FuIGFsbCB0aGUgZmlsZXMgaWYgd2UgYXJlCityZWN1cnNpbmc7IGlmIGl0J3MgYSBmaWxlLCBncmVwIGl0LgorCitBcmd1bWVudHM6CisgIHBhdGhuYW1lICAgICAgICAgIHRoZSBwYXRoIHRvIGludmVzdGlnYXRlCisgIGRpcl9yZWN1cnNlICAgICAgIFRSVUUgaWYgcmVjdXJzaW5nIGlzIHdhbnRlZCAoLXIgb3IgLWRyZWN1cnNlKQorICBvbmx5X29uZV9hdF90b3AgICBUUlVFIGlmIHRoZSBwYXRoIGlzIHRoZSBvbmx5IG9uZSBhdCB0b3BsZXZlbAorCitSZXR1cm5zOiAgLTEgdGhlIGZpbGUvZGlyZWN0b3J5IHdhcyBza2lwcGVkCisgICAgICAgICAgIDAgaWYgdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSBtYXRjaAorICAgICAgICAgICAxIGlmIHRoZXJlIHdlcmUgbm8gbWF0Y2hlcworICAgICAgICAgICAyIHRoZXJlIHdhcyBzb21lIGtpbmQgb2YgZXJyb3IKKworSG93ZXZlciwgZmlsZSBvcGVuaW5nIGZhaWx1cmVzIGFyZSBzdXBwcmVzc2VkIGlmICJzaWxlbnQiIGlzIHNldC4KKyovCisKK3N0YXRpYyBpbnQKK2dyZXBfb3JfcmVjdXJzZShjaGFyICpwYXRobmFtZSwgQk9PTCBkaXJfcmVjdXJzZSwgQk9PTCBvbmx5X29uZV9hdF90b3ApCit7CitpbnQgcmMgPSAxOworaW50IGZydHlwZTsKK3ZvaWQgKmhhbmRsZTsKK2NoYXIgKmxhc3Rjb21wOworRklMRSAqaW4gPSBOVUxMOyAgICAgICAgICAgLyogRW5zdXJlIGluaXRpYWxpemVkICovCisKKyNpZmRlZiBTVVBQT1JUX0xJQloKK2d6RmlsZSBpbmd6ID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9MSUJCWjIKK0JaRklMRSAqaW5iejIgPSBOVUxMOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfTElCWiB8fCBkZWZpbmVkIFNVUFBPUlRfTElCQloyCitpbnQgcGF0aGxlbjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCBOQVRJVkVfWk9TCitpbnQgem9zX3R5cGU7CitGSUxFICp6b3NfdGVzdF9maWxlOworI2VuZGlmCisKKy8qIElmIHRoZSBmaWxlIG5hbWUgaXMgIi0iIHdlIHNjYW4gc3RkaW4gKi8KKworaWYgKHN0cmNtcChwYXRobmFtZSwgIi0iKSA9PSAwKQorICB7CisgIHJldHVybiBwY3JlMmdyZXAoc3RkaW4sIEZSX1BMQUlOLCBzdGRpbl9uYW1lLAorICAgIChmaWxlbmFtZXMgPiBGTl9ERUZBVUxUIHx8IChmaWxlbmFtZXMgPT0gRk5fREVGQVVMVCAmJiAhb25seV9vbmVfYXRfdG9wKSk/CisgICAgICBzdGRpbl9uYW1lIDogTlVMTCk7CisgIH0KKworLyogSW5jbHVzaW9uIGFuZCBleGNsdXNpb246IC0taW5jbHVkZS1kaXIgYW5kIC0tZXhjbHVkZS1kaXIgYXBwbHkgb25seSB0bworZGlyZWN0b3JpZXMsIHdoZXJlYXMgLS1pbmNsdWRlIGFuZCAtLWV4Y2x1ZGUgYXBwbHkgdG8gZXZlcnl0aGluZyBlbHNlLiBUaGUgdGVzdAoraXMgYWdhaW5zdCB0aGUgZmluYWwgY29tcG9uZW50IG9mIHRoZSBwYXRoLiAqLworCitsYXN0Y29tcCA9IHN0cnJjaHIocGF0aG5hbWUsIEZJTEVTRVApOworbGFzdGNvbXAgPSAobGFzdGNvbXAgPT0gTlVMTCk/IHBhdGhuYW1lIDogbGFzdGNvbXAgKyAxOworCisvKiBJZiB0aGUgZmlsZSBpcyBhIGRpcmVjdG9yeSwgc2tpcCBpZiBub3QgcmVjdXJzaW5nIG9yIGlmIGV4cGxpY2l0bHkgZXhjbHVkZWQuCitPdGhlcndpc2UsIHNjYW4gdGhlIGRpcmVjdG9yeSBhbmQgcmVjdXJzZSBmb3IgZWFjaCBwYXRoIHdpdGhpbiBpdC4gVGhlIHNjYW5uaW5nCitjb2RlIGlzIGxvY2FsaXplZCBzbyBpdCBjYW4gYmUgbWFkZSBzeXN0ZW0tc3BlY2lmaWMuICovCisKKworLyogRm9yIHovT1MsIGRldGVybWluZSB0aGUgZmlsZSB0eXBlLiAqLworCisjaWYgZGVmaW5lZCBOQVRJVkVfWk9TCit6b3NfdGVzdF9maWxlID0gIGZvcGVuKHBhdGhuYW1lLCJyYiIpOworCitpZiAoem9zX3Rlc3RfZmlsZSA9PSBOVUxMKQorICAgeworICAgaWYgKCFzaWxlbnQpIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBmYWlsZWQgdG8gdGVzdCBuZXh0IGZpbGUgJXNcbiIsCisgICAgIHBhdGhuYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgcmV0dXJuIC0xOworICAgfQorem9zX3R5cGUgPSBpZGVudGlmeXpvc2ZpbGV0eXBlICh6b3NfdGVzdF9maWxlKTsKK2ZjbG9zZSAoem9zX3Rlc3RfZmlsZSk7CisKKy8qIEhhbmRsZSBhIFBEUyBpbiBzZXBhcmF0ZSBjb2RlICovCisKK2lmICh6b3NfdHlwZSA9PSBfX1pPU19QRFMgfHwgem9zX3R5cGUgPT0gX19aT1NfUERTRSkKKyAgIHsKKyAgIHJldHVybiB0cmF2ZWxvbnBkc2RpciAocGF0aG5hbWUsIG9ubHlfb25lX2F0X3RvcCk7CisgICB9CisKKy8qIERlYWwgd2l0aCByZWd1bGFyIGZpbGVzIGluIHRoZSBub3JtYWwgd2F5IGJlbG93LiBUaGVzZSB0eXBlcyBhcmU6CisgICB6b3NfdHlwZSA9PSBfX1pPU19QRFNfTUVNQkVSCisgICB6b3NfdHlwZSA9PSBfX1pPU19QUworICAgem9zX3R5cGUgPT0gX19aT1NfVlNBTV9LU0RTCisgICB6b3NfdHlwZSA9PSBfX1pPU19WU0FNX0VTRFMKKyAgIHpvc190eXBlID09IF9fWk9TX1ZTQU1fUlJEUworKi8KKworLyogSGFuZGxlIGEgei9PUyBkaXJlY3RvcnkgdXNpbmcgY29tbW9uIGNvZGUuICovCisKK2Vsc2UgaWYgKHpvc190eXBlID09IF9fWk9TX0hGUykKKyB7CisjZW5kaWYgIC8qIE5BVElWRV9aT1MgKi8KKworCisvKiBIYW5kbGUgZGlyZWN0b3JpZXM6IGNvbW1vbiBjb2RlIGZvciBhbGwgT1MgKi8KKworaWYgKGlzZGlyZWN0b3J5KHBhdGhuYW1lKSkKKyAgeworICBpZiAoZGVlX2FjdGlvbiA9PSBkZWVfU0tJUCB8fAorICAgICAgIXRlc3RfaW5jZXhjKGxhc3Rjb21wLCBpbmNsdWRlX2Rpcl9wYXR0ZXJucywgZXhjbHVkZV9kaXJfcGF0dGVybnMpKQorICAgIHJldHVybiAtMTsKKworICBpZiAoZGVlX2FjdGlvbiA9PSBkZWVfUkVDVVJTRSkKKyAgICB7CisgICAgY2hhciBidWZmZXJbMTAyNF07CisgICAgY2hhciAqbmV4dGZpbGU7CisgICAgZGlyZWN0b3J5X3R5cGUgKmRpciA9IG9wZW5kaXJlY3RvcnkocGF0aG5hbWUpOworCisgICAgaWYgKGRpciA9PSBOVUxMKQorICAgICAgeworICAgICAgaWYgKCFzaWxlbnQpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBGYWlsZWQgdG8gb3BlbiBkaXJlY3RvcnkgJXM6ICVzXG4iLCBwYXRobmFtZSwKKyAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgcmV0dXJuIDI7CisgICAgICB9CisKKyAgICB3aGlsZSAoKG5leHRmaWxlID0gcmVhZGRpcmVjdG9yeShkaXIpKSAhPSBOVUxMKQorICAgICAgeworICAgICAgaW50IGZyYzsKKyAgICAgIHNwcmludGYoYnVmZmVyLCAiJS41MTJzJWMlLjEyOHMiLCBwYXRobmFtZSwgRklMRVNFUCwgbmV4dGZpbGUpOworICAgICAgZnJjID0gZ3JlcF9vcl9yZWN1cnNlKGJ1ZmZlciwgZGlyX3JlY3Vyc2UsIEZBTFNFKTsKKyAgICAgIGlmIChmcmMgPiAxKSByYyA9IGZyYzsKKyAgICAgICBlbHNlIGlmIChmcmMgPT0gMCAmJiByYyA9PSAxKSByYyA9IDA7CisgICAgICB9CisKKyAgICBjbG9zZWRpcmVjdG9yeShkaXIpOworICAgIHJldHVybiByYzsKKyAgICB9CisgIH0KKworI2lmIGRlZmluZWQgTkFUSVZFX1pPUworIH0KKyNlbmRpZgorCisvKiBJZiB0aGUgZmlsZSBpcyBub3QgYSBkaXJlY3RvcnksIGNoZWNrIGZvciBhIHJlZ3VsYXIgZmlsZSwgYW5kIGlmIGl0IGlzIG5vdCwKK3NraXAgaXQgaWYgdGhhdCdzIGJlZW4gcmVxdWVzdGVkLiBPdGhlcndpc2UsIGNoZWNrIGZvciBhbiBleHBsaWNpdCBpbmNsdXNpb24gb3IKK2V4Y2x1c2lvbi4gKi8KKworZWxzZSBpZiAoCisjaWYgZGVmaW5lZCBOQVRJVkVfWk9TCisgICAgICAgICh6b3NfdHlwZSA9PSBfX1pPU19OT0ZJTEUgJiYgREVFX2FjdGlvbiA9PSBERUVfU0tJUCkgfHwKKyNlbHNlICAvKiBhbGwgb3RoZXIgT1MgKi8KKyAgICAgICAgKCFpc3JlZ2ZpbGUocGF0aG5hbWUpICYmIERFRV9hY3Rpb24gPT0gREVFX1NLSVApIHx8CisjZW5kaWYKKyAgICAgICAgIXRlc3RfaW5jZXhjKGxhc3Rjb21wLCBpbmNsdWRlX3BhdHRlcm5zLCBleGNsdWRlX3BhdHRlcm5zKSkKKyAgcmV0dXJuIC0xOyAgLyogRmlsZSBza2lwcGVkICovCisKKy8qIENvbnRyb2wgcmVhY2hlcyBoZXJlIGlmIHdlIGhhdmUgYSByZWd1bGFyIGZpbGUsIG9yIGlmIHdlIGhhdmUgYSBkaXJlY3RvcnkKK2FuZCByZWN1cnNpb24gb3Igc2tpcHBpbmcgd2FzIG5vdCByZXF1ZXN0ZWQsIG9yIGlmIHdlIGhhdmUgYW55dGhpbmcgZWxzZSBhbmQKK3NraXBwaW5nIHdhcyBub3QgcmVxdWVzdGVkLiBUaGUgc2NhbiBwcm9jZWVkcy4gSWYgdGhpcyBpcyB0aGUgZmlyc3QgYW5kIG9ubHkKK2FyZ3VtZW50IGF0IHRvcCBsZXZlbCwgd2UgZG9uJ3Qgc2hvdyB0aGUgZmlsZSBuYW1lLCB1bmxlc3Mgd2UgYXJlIG9ubHkgc2hvd2luZwordGhlIGZpbGUgbmFtZSwgb3IgdGhlIGZpbGVuYW1lIHdhcyBmb3JjZWQgKC1IKS4gKi8KKworI2lmIGRlZmluZWQgU1VQUE9SVF9MSUJaIHx8IGRlZmluZWQgU1VQUE9SVF9MSUJCWjIKK3BhdGhsZW4gPSAoaW50KShzdHJsZW4ocGF0aG5hbWUpKTsKKyNlbmRpZgorCisvKiBPcGVuIHVzaW5nIHpsaWIgaWYgaXQgaXMgc3VwcG9ydGVkIGFuZCB0aGUgZmlsZSBuYW1lIGVuZHMgd2l0aCAuZ3ouICovCisKKyNpZmRlZiBTVVBQT1JUX0xJQloKK2lmIChwYXRobGVuID4gMyAmJiBzdHJjbXAocGF0aG5hbWUgKyBwYXRobGVuIC0gMywgIi5neiIpID09IDApCisgIHsKKyAgaW5neiA9IGd6b3BlbihwYXRobmFtZSwgInJiIik7CisgIGlmIChpbmd6ID09IE5VTEwpCisgICAgeworICAgIGlmICghc2lsZW50KQorICAgICAgZnByaW50ZihzdGRlcnIsICJwY3JlMmdyZXA6IEZhaWxlZCB0byBvcGVuICVzOiAlc1xuIiwgcGF0aG5hbWUsCisgICAgICAgIHN0cmVycm9yKGVycm5vKSk7CisgICAgcmV0dXJuIDI7CisgICAgfQorICBoYW5kbGUgPSAodm9pZCAqKWluZ3o7CisgIGZydHlwZSA9IEZSX0xJQlo7CisgIH0KK2Vsc2UKKyNlbmRpZgorCisvKiBPdGhlcndpc2Ugb3BlbiB3aXRoIGJ6MmxpYiBpZiBpdCBpcyBzdXBwb3J0ZWQgYW5kIHRoZSBuYW1lIGVuZHMgd2l0aCAuYnoyLiAqLworCisjaWZkZWYgU1VQUE9SVF9MSUJCWjIKK2lmIChwYXRobGVuID4gNCAmJiBzdHJjbXAocGF0aG5hbWUgKyBwYXRobGVuIC0gNCwgIi5iejIiKSA9PSAwKQorICB7CisgIGluYnoyID0gQloyX2J6b3BlbihwYXRobmFtZSwgInJiIik7CisgIGhhbmRsZSA9ICh2b2lkICopaW5iejI7CisgIGZydHlwZSA9IEZSX0xJQkJaMjsKKyAgfQorZWxzZQorI2VuZGlmCisKKy8qIE90aGVyd2lzZSB1c2UgcGxhaW4gZm9wZW4oKS4gVGhlIGxhYmVsIGlzIHNvIHRoYXQgd2UgY2FuIGNvbWUgYmFjayBoZXJlIGlmCithbiBhdHRlbXB0IHRvIHJlYWQgYSAuYnoyIGZpbGUgaW5kaWNhdGVzIHRoYXQgaXQgcmVhbGx5IGlzIGEgcGxhaW4gZmlsZS4gKi8KKworI2lmZGVmIFNVUFBPUlRfTElCQloyCitQTEFJTl9GSUxFOgorI2VuZGlmCisgIHsKKyAgaW4gPSBmb3BlbihwYXRobmFtZSwgInJiIik7CisgIGhhbmRsZSA9ICh2b2lkICopaW47CisgIGZydHlwZSA9IEZSX1BMQUlOOworICB9CisKKy8qIEFsbCB0aGUgb3BlbmluZyBtZXRob2RzIHJldHVybiBlcnJubyB3aGVuIHRoZXkgZmFpbC4gKi8KKworaWYgKGhhbmRsZSA9PSBOVUxMKQorICB7CisgIGlmICghc2lsZW50KQorICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBGYWlsZWQgdG8gb3BlbiAlczogJXNcbiIsIHBhdGhuYW1lLAorICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgcmV0dXJuIDI7CisgIH0KKworLyogTm93IGdyZXAgdGhlIGZpbGUgKi8KKworcmMgPSBwY3JlMmdyZXAoaGFuZGxlLCBmcnR5cGUsIHBhdGhuYW1lLCAoZmlsZW5hbWVzID4gRk5fREVGQVVMVCB8fAorICAoZmlsZW5hbWVzID09IEZOX0RFRkFVTFQgJiYgIW9ubHlfb25lX2F0X3RvcCkpPyBwYXRobmFtZSA6IE5VTEwpOworCisvKiBDbG9zZSBpbiBhbiBhcHByb3ByaWF0ZSBtYW5uZXIuICovCisKKyNpZmRlZiBTVVBQT1JUX0xJQloKK2lmIChmcnR5cGUgPT0gRlJfTElCWikKKyAgZ3pjbG9zZShpbmd6KTsKK2Vsc2UKKyNlbmRpZgorCisvKiBJZiBpdCBpcyBhIC5iejIgZmlsZSBhbmQgdGhlIHJlc3VsdCBpcyAzLCBpdCBtZWFucyB0aGF0IHRoZSBmaXJzdCBhdHRlbXB0IHRvCityZWFkIGZhaWxlZC4gSWYgdGhlIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBmaWxlIGlzbid0IGluIGZhY3QgYnppcHBlZCwgdHJ5CithZ2FpbiBhcyBhIG5vcm1hbCBmaWxlLiAqLworCisjaWZkZWYgU1VQUE9SVF9MSUJCWjIKK2lmIChmcnR5cGUgPT0gRlJfTElCQloyKQorICB7CisgIGlmIChyYyA9PSAzKQorICAgIHsKKyAgICBpbnQgZXJybnVtOworICAgIGNvbnN0IGNoYXIgKmVyciA9IEJaMl9iemVycm9yKGluYnoyLCAmZXJybnVtKTsKKyAgICBpZiAoZXJybnVtID09IEJaX0RBVEFfRVJST1JfTUFHSUMpCisgICAgICB7CisgICAgICBCWjJfYnpjbG9zZShpbmJ6Mik7CisgICAgICBnb3RvIFBMQUlOX0ZJTEU7CisgICAgICB9CisgICAgZWxzZSBpZiAoIXNpbGVudCkKKyAgICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBGYWlsZWQgdG8gcmVhZCAlcyB1c2luZyBiemxpYjogJXNcbiIsCisgICAgICAgIHBhdGhuYW1lLCBlcnIpOworICAgIHJjID0gMjsgICAgLyogVGhlIG5vcm1hbCAic29tZXRoaW5nIHdlbnQgd3JvbmciIGNvZGUgKi8KKyAgICB9CisgIEJaMl9iemNsb3NlKGluYnoyKTsKKyAgfQorZWxzZQorI2VuZGlmCisKKy8qIE5vcm1hbCBmaWxlIGNsb3NlICovCisKK2ZjbG9zZShpbik7CisKKy8qIFBhc3MgYmFjayB0aGUgeWllbGQgZnJvbSBwY3JlMmdyZXAoKS4gKi8KKworcmV0dXJuIHJjOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgSGFuZGxlIGEgc2luZ2xlLWxldHRlciwgbm8gZGF0YSBvcHRpb24gICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50CitoYW5kbGVfb3B0aW9uKGludCBsZXR0ZXIsIGludCBvcHRpb25zKQoreworc3dpdGNoKGxldHRlcikKKyAgeworICBjYXNlIE5fRk9GRlNFVFM6IGZpbGVfb2Zmc2V0cyA9IFRSVUU7IGJyZWFrOworICBjYXNlIE5fSEVMUDogaGVscCgpOyBwY3JlMmdyZXBfZXhpdCgwKTsKKyAgY2FzZSBOX0xCVUZGRVI6IGxpbmVfYnVmZmVyZWQgPSBUUlVFOyBicmVhazsKKyAgY2FzZSBOX0xPRkZTRVRTOiBsaW5lX29mZnNldHMgPSBudW1iZXIgPSBUUlVFOyBicmVhazsKKyAgY2FzZSBOX05PSklUOiB1c2Vfaml0ID0gRkFMU0U7IGJyZWFrOworICBjYXNlICdhJzogYmluYXJ5X2ZpbGVzID0gQklOX1RFWFQ7IGJyZWFrOworICBjYXNlICdjJzogY291bnRfb25seSA9IFRSVUU7IGJyZWFrOworICBjYXNlICdGJzogcHJvY2Vzc19vcHRpb25zIHw9IFBPX0ZJWEVEX1NUUklOR1M7IGJyZWFrOworICBjYXNlICdIJzogZmlsZW5hbWVzID0gRk5fRk9SQ0U7IGJyZWFrOworICBjYXNlICdJJzogYmluYXJ5X2ZpbGVzID0gQklOX05PTUFUQ0g7IGJyZWFrOworICBjYXNlICdoJzogZmlsZW5hbWVzID0gRk5fTk9ORTsgYnJlYWs7CisgIGNhc2UgJ2knOiBvcHRpb25zIHw9IFBDUkUyX0NBU0VMRVNTOyBicmVhazsKKyAgY2FzZSAnbCc6IG9taXRfemVyb19jb3VudCA9IFRSVUU7IGZpbGVuYW1lcyA9IEZOX01BVENIX09OTFk7IGJyZWFrOworICBjYXNlICdMJzogZmlsZW5hbWVzID0gRk5fTk9NQVRDSF9PTkxZOyBicmVhazsKKyAgY2FzZSAnTSc6IG11bHRpbGluZSA9IFRSVUU7IG9wdGlvbnMgfD0gUENSRTJfTVVMVElMSU5FfFBDUkUyX0ZJUlNUTElORTsgYnJlYWs7CisgIGNhc2UgJ24nOiBudW1iZXIgPSBUUlVFOyBicmVhazsKKworICBjYXNlICdvJzoKKyAgb25seV9tYXRjaGluZ19sYXN0ID0gYWRkX251bWJlcigwLCBvbmx5X21hdGNoaW5nX2xhc3QpOworICBpZiAob25seV9tYXRjaGluZyA9PSBOVUxMKSBvbmx5X21hdGNoaW5nID0gb25seV9tYXRjaGluZ19sYXN0OworICBicmVhazsKKworICBjYXNlICdxJzogcXVpZXQgPSBUUlVFOyBicmVhazsKKyAgY2FzZSAncic6IGRlZV9hY3Rpb24gPSBkZWVfUkVDVVJTRTsgYnJlYWs7CisgIGNhc2UgJ3MnOiBzaWxlbnQgPSBUUlVFOyBicmVhazsKKyAgY2FzZSAndSc6IG9wdGlvbnMgfD0gUENSRTJfVVRGOyB1dGYgPSBUUlVFOyBicmVhazsKKyAgY2FzZSAndic6IGludmVydCA9IFRSVUU7IGJyZWFrOworICBjYXNlICd3JzogcHJvY2Vzc19vcHRpb25zIHw9IFBPX1dPUkRfTUFUQ0g7IGJyZWFrOworICBjYXNlICd4JzogcHJvY2Vzc19vcHRpb25zIHw9IFBPX0xJTkVfTUFUQ0g7IGJyZWFrOworCisgIGNhc2UgJ1YnOgorICAgIHsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsxMjhdOworICAgICh2b2lkKXBjcmUyX2NvbmZpZyhQQ1JFMl9DT05GSUdfVkVSU0lPTiwgYnVmZmVyKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgInBjcmUyZ3JlcCB2ZXJzaW9uICVzXG4iLCBidWZmZXIpOworICAgIH0KKyAgcGNyZTJncmVwX2V4aXQoMCk7CisgIGJyZWFrOworCisgIGRlZmF1bHQ6CisgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBVbmtub3duIG9wdGlvbiAtJWNcbiIsIGxldHRlcik7CisgIHBjcmUyZ3JlcF9leGl0KHVzYWdlKDIpKTsKKyAgfQorCityZXR1cm4gb3B0aW9uczsKK30KKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgQ29uc3RydWN0IHByaW50ZWQgb3JkaW5hbCAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIHR1cm5zIGEgbnVtYmVyIGludG8gIjFzdCIsICIzcmQiLCBldGMuICovCisKK3N0YXRpYyBjaGFyICoKK29yZGluKGludCBuKQoreworc3RhdGljIGNoYXIgYnVmZmVyWzE0XTsKK2NoYXIgKnAgPSBidWZmZXI7CitzcHJpbnRmKHAsICIlZCIsIG4pOword2hpbGUgKCpwICE9IDApIHArKzsKK3N3aXRjaCAobiUxMCkKKyAgeworICBjYXNlIDE6IHN0cmNweShwLCAic3QiKTsgYnJlYWs7CisgIGNhc2UgMjogc3RyY3B5KHAsICJuZCIpOyBicmVhazsKKyAgY2FzZSAzOiBzdHJjcHkocCwgInJkIik7IGJyZWFrOworICBkZWZhdWx0OiBzdHJjcHkocCwgInRoIik7IGJyZWFrOworICB9CityZXR1cm4gYnVmZmVyOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgQ29tcGlsZSBhIHNpbmdsZSBwYXR0ZXJuICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBEbyBub3RoaW5nIGlmIHRoZSBwYXR0ZXJuIGhhcyBhbHJlYWR5IGJlZW4gY29tcGlsZWQuIFRoaXMgaXMgdGhlIGNhc2UgZm9yCitpbmNsdWRlL2V4Y2x1ZGUgcGF0dGVybnMgcmVhZCBmcm9tIGEgZmlsZS4KKworV2hlbiB0aGUgLUYgb3B0aW9uIGhhcyBiZWVuIHVzZWQsIGVhY2ggInBhdHRlcm4iIG1heSBiZSBhIGxpc3Qgb2Ygc3RyaW5ncywKK3NlcGFyYXRlZCBieSBsaW5lIGJyZWFrcy4gVGhleSB3aWxsIGJlIG1hdGNoZWQgbGl0ZXJhbGx5LiBXZSBzcGxpdCBzdWNoIGEKK3N0cmluZyBhbmQgY29tcGlsZSB0aGUgZmlyc3Qgc3Vic3RyaW5nLCBpbnNlcnRpbmcgYW4gYWRkaXRpb25hbCBibG9jayBpbnRvIHRoZQorcGF0dGVybiBjaGFpbi4KKworQXJndW1lbnRzOgorICBwICAgICAgICAgICAgICBwb2ludHMgdG8gdGhlIHBhdHRlcm4gYmxvY2sKKyAgb3B0aW9ucyAgICAgICAgdGhlIFBDUkUgb3B0aW9ucworICBwb3B0cyAgICAgICAgICB0aGUgcHJvY2Vzc2luZyBvcHRpb25zCisgIGZyb21maWxlICAgICAgIFRSVUUgaWYgdGhlIHBhdHRlcm4gd2FzIHJlYWQgZnJvbSBhIGZpbGUKKyAgZnJvbXRleHQgICAgICAgZmlsZSBuYW1lIG9yIGlkZW50aWZ5aW5nIHRleHQgKGUuZy4gImluY2x1ZGUiKQorICBjb3VudCAgICAgICAgICAwIGlmIHRoaXMgaXMgdGhlIG9ubHkgY29tbWFuZCBsaW5lIHBhdHRlcm4sIG9yCisgICAgICAgICAgICAgICAgIG51bWJlciBvZiB0aGUgY29tbWFuZCBsaW5lIHBhdHRlcm4sIG9yCisgICAgICAgICAgICAgICAgIGxpbmVudW1iZXIgZm9yIGEgcGF0dGVybiBmcm9tIGEgZmlsZQorCitSZXR1cm5zOiAgICAgICAgIFRSVUUgb24gc3VjY2VzcywgRkFMU0UgYWZ0ZXIgYW4gZXJyb3IKKyovCisKK3N0YXRpYyBCT09MCitjb21waWxlX3BhdHRlcm4ocGF0c3RyICpwLCBpbnQgb3B0aW9ucywgaW50IHBvcHRzLCBpbnQgZnJvbWZpbGUsCisgIGNvbnN0IGNoYXIgKmZyb210ZXh0LCBpbnQgY291bnQpCit7Cit1bnNpZ25lZCBjaGFyIGJ1ZmZlcltQQVRCVUZTSVpFXTsKK1BDUkUyX1NJWkUgZXJyb2Zmc2V0OworY2hhciAqcHMgPSBwLT5zdHJpbmc7Cit1bnNpZ25lZCBpbnQgcGF0bGVuID0gc3RybGVuKHBzKTsKK2ludCBlcnJjb2RlOworCitpZiAocC0+Y29tcGlsZWQgIT0gTlVMTCkgcmV0dXJuIFRSVUU7CisKK2lmICgocG9wdHMgJiBQT19GSVhFRF9TVFJJTkdTKSAhPSAwKQorICB7CisgIGludCBlbGxlbmd0aDsKKyAgY2hhciAqZW9wID0gcHMgKyBwYXRsZW47CisgIGNoYXIgKnBlID0gZW5kX29mX2xpbmUocHMsIGVvcCwgJmVsbGVuZ3RoKTsKKworICBpZiAoZWxsZW5ndGggIT0gMCkKKyAgICB7CisgICAgaWYgKGFkZF9wYXR0ZXJuKHBlLCBwKSA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisgICAgcGF0bGVuID0gKGludCkocGUgLSBwcyAtIGVsbGVuZ3RoKTsKKyAgICB9CisgIH0KKworc3ByaW50ZigoY2hhciAqKWJ1ZmZlciwgIiVzJS4qcyVzIiwgcHJlZml4W3BvcHRzXSwgcGF0bGVuLCBwcywgc3VmZml4W3BvcHRzXSk7CitwLT5jb21waWxlZCA9IHBjcmUyX2NvbXBpbGUoYnVmZmVyLCAtMSwgb3B0aW9ucywgJmVycmNvZGUsICZlcnJvZmZzZXQsCisgIGNvbXBpbGVfY29udGV4dCk7CitpZiAocC0+Y29tcGlsZWQgIT0gTlVMTCkgcmV0dXJuIFRSVUU7CisKKy8qIEhhbmRsZSBjb21waWxlIGVycm9ycyAqLworCitlcnJvZmZzZXQgLT0gKGludClzdHJsZW4ocHJlZml4W3BvcHRzXSk7CitpZiAoZXJyb2Zmc2V0ID4gcGF0bGVuKSBlcnJvZmZzZXQgPSBwYXRsZW47CitwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZShlcnJjb2RlLCBidWZmZXIsIFBBVEJVRlNJWkUpOworCitpZiAoZnJvbWZpbGUpCisgIHsKKyAgZnByaW50ZihzdGRlcnIsICJwY3JlMmdyZXA6IEVycm9yIGluIHJlZ2V4IGluIGxpbmUgJWQgb2YgJXMgIgorICAgICJhdCBvZmZzZXQgJWQ6ICVzXG4iLCBjb3VudCwgZnJvbXRleHQsIChpbnQpZXJyb2Zmc2V0LCBidWZmZXIpOworICB9CitlbHNlCisgIHsKKyAgaWYgKGNvdW50ID09IDApCisgICAgZnByaW50ZihzdGRlcnIsICJwY3JlMmdyZXA6IEVycm9yIGluICVzIHJlZ2V4IGF0IG9mZnNldCAlZDogJXNcbiIsCisgICAgICBmcm9tdGV4dCwgKGludCllcnJvZmZzZXQsIGJ1ZmZlcik7CisgIGVsc2UKKyAgICBmcHJpbnRmKHN0ZGVyciwgInBjcmUyZ3JlcDogRXJyb3IgaW4gJXMgJXMgcmVnZXggYXQgb2Zmc2V0ICVkOiAlc1xuIiwKKyAgICAgIG9yZGluKGNvdW50KSwgZnJvbXRleHQsIChpbnQpZXJyb2Zmc2V0LCBidWZmZXIpOworICB9CisKK3JldHVybiBGQUxTRTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICBSZWFkIGFuZCBjb21waWxlIGEgZmlsZSBvZiBwYXR0ZXJucyAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBpcyB1c2VkIGZvciAtLWZpbGVsaXN0LCAtLWluY2x1ZGUtZnJvbSwgYW5kIC0tZXhjbHVkZS1mcm9tLgorCitBcmd1bWVudHM6CisgIG5hbWUgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgZmlsZTsgIi0iIGlzIHN0ZGluCisgIHBhdHB0ciAgICAgICBwb2ludGVyIHRvIHRoZSBwYXR0ZXJuIGNoYWluIGFuY2hvcgorICBwYXRsYXN0cHRyICAgcG9pbnRlciB0byB0aGUgbGFzdCBwYXR0ZXJuIHBvaW50ZXIKKyAgcG9wdHMgICAgICAgIHRoZSBwcm9jZXNzIG9wdGlvbnMgdG8gcGFzcyB0byBwYXR0ZXJuX2NvbXBpbGUoKQorCitSZXR1cm5zOiAgICAgICBUUlVFIGlmIGFsbCB3ZW50IHdlbGwKKyovCisKK3N0YXRpYyBCT09MCityZWFkX3BhdHRlcm5fZmlsZShjaGFyICpuYW1lLCBwYXRzdHIgKipwYXRwdHIsIHBhdHN0ciAqKnBhdGxhc3RwdHIsIGludCBwb3B0cykKK3sKK2ludCBsaW5lbnVtYmVyID0gMDsKK0ZJTEUgKmY7CitjaGFyICpmaWxlbmFtZTsKK2NoYXIgYnVmZmVyW1BBVEJVRlNJWkVdOworCitpZiAoc3RyY21wKG5hbWUsICItIikgPT0gMCkKKyAgeworICBmID0gc3RkaW47CisgIGZpbGVuYW1lID0gc3RkaW5fbmFtZTsKKyAgfQorZWxzZQorICB7CisgIGYgPSBmb3BlbihuYW1lLCAiciIpOworICBpZiAoZiA9PSBOVUxMKQorICAgIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInBjcmUyZ3JlcDogRmFpbGVkIHRvIG9wZW4gJXM6ICVzXG4iLCBuYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgIGZpbGVuYW1lID0gbmFtZTsKKyAgfQorCit3aGlsZSAoZmdldHMoYnVmZmVyLCBQQVRCVUZTSVpFLCBmKSAhPSBOVUxMKQorICB7CisgIGNoYXIgKnMgPSBidWZmZXIgKyAoaW50KXN0cmxlbihidWZmZXIpOworICB3aGlsZSAocyA+IGJ1ZmZlciAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKShzWy0xXSkpKSBzLS07CisgICpzID0gMDsKKyAgbGluZW51bWJlcisrOworICBpZiAoYnVmZmVyWzBdID09IDApIGNvbnRpbnVlOyAgIC8qIFNraXAgYmxhbmsgbGluZXMgKi8KKworICAvKiBOb3RlOiB0aGlzIGNhbGwgdG8gYWRkX3BhdHRlcm4oKSBwdXRzIGEgcG9pbnRlciB0byB0aGUgbG9jYWwgdmFyaWFibGUKKyAgImJ1ZmZlciIgaW50byB0aGUgcGF0dGVybiBjaGFpbi4gSG93ZXZlciwgdGhhdCBwb2ludGVyIGlzIHVzZWQgb25seSB3aGVuCisgIGNvbXBpbGluZyB0aGUgcGF0dGVybiwgd2hpY2ggaGFwcGVucyBpbW1lZGlhdGVseSBiZWxvdywgc28gd2UgZmxhdHRlbiBpdAorICBhZnRlcndhcmRzLCBhcyBhIHByZWNhdXRpb24gYWdhaW5zdCBhbnkgbGF0ZXIgY29kZSB0cnlpbmcgdG8gdXNlIGl0LiAqLworCisgICpwYXRsYXN0cHRyID0gYWRkX3BhdHRlcm4oYnVmZmVyLCAqcGF0bGFzdHB0cik7CisgIGlmICgqcGF0bGFzdHB0ciA9PSBOVUxMKQorICAgIHsKKyAgICBpZiAoZiAhPSBzdGRpbikgZmNsb3NlKGYpOworICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgIGlmICgqcGF0cHRyID09IE5VTEwpICpwYXRwdHIgPSAqcGF0bGFzdHB0cjsKKworICAvKiBUaGlzIGxvb3AgaXMgbmVlZGVkIGJlY2F1c2UgY29tcGlsaW5nIGEgInBhdHRlcm4iIHdoZW4gLUYgaXMgc2V0IG1heSBhZGQKKyAgb24gYWRkaXRpb25hbCBsaXRlcmFsIHBhdHRlcm5zIGlmIHRoZSBvcmlnaW5hbCBjb250YWlucyBhIG5ld2xpbmUuIEluIHRoZQorICBjb21tb24gY2FzZSwgaXQgbmV2ZXIgd2lsbCwgYmVjYXVzZSBmZ2V0cygpIHN0b3BzIGF0IGEgbmV3bGluZS4gSG93ZXZlciwKKyAgdGhlIC1OIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBnaXZlIHBjcmUyZ3JlcCBhIGRpZmZlcmVudCBuZXdsaW5lIHNldHRpbmcuICovCisKKyAgZm9yKDs7KQorICAgIHsKKyAgICBpZiAoIWNvbXBpbGVfcGF0dGVybigqcGF0bGFzdHB0ciwgcGNyZTJfb3B0aW9ucywgcG9wdHMsIFRSVUUsIGZpbGVuYW1lLAorICAgICAgICBsaW5lbnVtYmVyKSkKKyAgICAgIHsKKyAgICAgIGlmIChmICE9IHN0ZGluKSBmY2xvc2UoZik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgKCpwYXRsYXN0cHRyKS0+c3RyaW5nID0gTlVMTDsgICAgICAgICAgICAvKiBJbnN1cmFuY2UgKi8KKyAgICBpZiAoKCpwYXRsYXN0cHRyKS0+bmV4dCA9PSBOVUxMKSBicmVhazsKKyAgICAqcGF0bGFzdHB0ciA9ICgqcGF0bGFzdHB0ciktPm5leHQ7CisgICAgfQorICB9CisKK2lmIChmICE9IHN0ZGluKSBmY2xvc2UoZik7CityZXR1cm4gVFJVRTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgIE1haW4gcHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUmV0dXJucyAwIGlmIHNvbWV0aGluZyBtYXRjaGVkLCAxIGlmIG5vdGhpbmcgbWF0Y2hlZCwgMiBhZnRlciBhbiBlcnJvci4gKi8KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKK2ludCBpLCBqOworaW50IHJjID0gMTsKK0JPT0wgb25seV9vbmVfYXRfdG9wOworcGF0c3RyICpjcDsKK2Zuc3RyICpmbjsKK2NvbnN0IGNoYXIgKmxvY2FsZV9mcm9tID0gIi0tbG9jYWxlIjsKKworI2lmZGVmIFNVUFBPUlRfUENSRTJHUkVQX0pJVAorcGNyZTJfaml0X3N0YWNrICpqaXRfc3RhY2sgPSBOVUxMOworI2VuZGlmCisKKy8qIFNldCB1cCBhIGRlZmF1bHQgY29tcGlsZSBhbmQgbWF0Y2ggY29udGV4dHMgYW5kIGEgbWF0Y2ggZGF0YSBibG9jay4gKi8KKworY29tcGlsZV9jb250ZXh0ID0gcGNyZTJfY29tcGlsZV9jb250ZXh0X2NyZWF0ZShOVUxMKTsKK21hdGNoX2NvbnRleHQgPSBwY3JlMl9tYXRjaF9jb250ZXh0X2NyZWF0ZShOVUxMKTsKK21hdGNoX2RhdGEgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZShPRkZTRVRfU0laRSwgTlVMTCk7CitvZmZzZXRzID0gcGNyZTJfZ2V0X292ZWN0b3JfcG9pbnRlcihtYXRjaF9kYXRhKTsKKworLyogUHJvY2VzcyB0aGUgb3B0aW9ucyAqLworCitmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQorICB7CisgIG9wdGlvbl9pdGVtICpvcCA9IE5VTEw7CisgIGNoYXIgKm9wdGlvbl9kYXRhID0gKGNoYXIgKikiIjsgICAgLyogZGVmYXVsdCB0byBrZWVwIGNvbXBpbGVyIGhhcHB5ICovCisgIEJPT0wgbG9uZ29wOworICBCT09MIGxvbmdvcHdhc2VxdWFscyA9IEZBTFNFOworCisgIGlmIChhcmd2W2ldWzBdICE9ICctJykgYnJlYWs7CisKKyAgLyogSWYgd2UgaGl0IGFuIGFyZ3VtZW50IHRoYXQgaXMganVzdCAiLSIsIGl0IG1heSBiZSBhIHJlZmVyZW5jZSB0byBTVERJTiwKKyAgYnV0IG9ubHkgaWYgd2UgaGF2ZSBwcmV2aW91c2x5IGhhZCAtZSBvciAtZiB0byBkZWZpbmUgdGhlIHBhdHRlcm5zLiAqLworCisgIGlmIChhcmd2W2ldWzFdID09IDApCisgICAgeworICAgIGlmIChwYXR0ZXJuX2ZpbGVzICE9IE5VTEwgfHwgcGF0dGVybnMgIT0gTlVMTCkgYnJlYWs7CisgICAgICBlbHNlIHBjcmUyZ3JlcF9leGl0KHVzYWdlKDIpKTsKKyAgICB9CisKKyAgLyogSGFuZGxlIGEgbG9uZyBuYW1lIG9wdGlvbiwgb3IgLS0gdG8gdGVybWluYXRlIHRoZSBvcHRpb25zICovCisKKyAgaWYgKGFyZ3ZbaV1bMV0gPT0gJy0nKQorICAgIHsKKyAgICBjaGFyICphcmcgPSBhcmd2W2ldICsgMjsKKyAgICBjaGFyICphcmdlcXVhbHMgPSBzdHJjaHIoYXJnLCAnPScpOworCisgICAgaWYgKCphcmcgPT0gMCkgICAgLyogLS0gdGVybWluYXRlcyBvcHRpb25zICovCisgICAgICB7CisgICAgICBpKys7CisgICAgICBicmVhazsgICAgICAgICAgICAgICAgLyogb3V0IG9mIHRoZSBvcHRpb25zLWhhbmRsaW5nIGxvb3AgKi8KKyAgICAgIH0KKworICAgIGxvbmdvcCA9IFRSVUU7CisKKyAgICAvKiBTb21lIGxvbmcgb3B0aW9ucyBoYXZlIGRhdGEgdGhhdCBmb2xsb3dzIGFmdGVyID0sIGZvciBleGFtcGxlIGZpbGU9bmFtZS4KKyAgICBTb21lIG9wdGlvbnMgaGF2ZSB2YXJpYXRpb25zIGluIHRoZSBsb25nIG5hbWUgc3BlbGxpbmc6IHNwZWNpZmljYWxseSwgd2UKKyAgICBhbGxvdyAicmVnZXhwIiBiZWNhdXNlIEdOVSBncmVwIGFsbG93cyBpdCwgdGhvdWdoIEkgcGVyc29uYWxseSBnbyBhbG9uZworICAgIHdpdGggSmVmZnJleSBGcmllZGwgYW5kIExhcnJ5IFdhbGwgaW4gcHJlZmVycmluZyAicmVnZXgiIHdpdGhvdXQgdGhlICJwIi4KKyAgICBUaGVzZSBvcHRpb25zIGFyZSBlbnRlcmVkIGluIHRoZSB0YWJsZSBhcyAicmVnZXgocCkiLiBPcHRpb25zIGNhbiBiZSBpbgorICAgIGJvdGggdGhlc2UgY2F0ZWdvcmllcy4gKi8KKworICAgIGZvciAob3AgPSBvcHRpb25saXN0OyBvcC0+b25lX2NoYXIgIT0gMDsgb3ArKykKKyAgICAgIHsKKyAgICAgIGNoYXIgKm9wYnJhID0gc3RyY2hyKG9wLT5sb25nX25hbWUsICcoJyk7CisgICAgICBjaGFyICplcXVhbHMgPSBzdHJjaHIob3AtPmxvbmdfbmFtZSwgJz0nKTsKKworICAgICAgLyogSGFuZGxlIG9wdGlvbnMgd2l0aCBvbmx5IG9uZSBzcGVsbGluZyBvZiB0aGUgbmFtZSAqLworCisgICAgICBpZiAob3BicmEgPT0gTlVMTCkgICAgIC8qIERvZXMgbm90IGNvbnRhaW4gJygnICovCisgICAgICAgIHsKKyAgICAgICAgaWYgKGVxdWFscyA9PSBOVUxMKSAgLyogTm90IHRoaW5nPWRhdGEgY2FzZSAqLworICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoc3RyY21wKGFyZywgb3AtPmxvbmdfbmFtZSkgPT0gMCkgYnJlYWs7CisgICAgICAgICAgfQorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAvKiBTcGVjaWFsIGNhc2UgeHh4PWRhdGEgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgaW50IG9wbGVuID0gKGludCkoZXF1YWxzIC0gb3AtPmxvbmdfbmFtZSk7CisgICAgICAgICAgaW50IGFyZ2xlbiA9IChhcmdlcXVhbHMgPT0gTlVMTCk/CisgICAgICAgICAgICAoaW50KXN0cmxlbihhcmcpIDogKGludCkoYXJnZXF1YWxzIC0gYXJnKTsKKyAgICAgICAgICBpZiAob3BsZW4gPT0gYXJnbGVuICYmIHN0cm5jbXAoYXJnLCBvcC0+bG9uZ19uYW1lLCBvcGxlbikgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIG9wdGlvbl9kYXRhID0gYXJnICsgYXJnbGVuOworICAgICAgICAgICAgaWYgKCpvcHRpb25fZGF0YSA9PSAnPScpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgb3B0aW9uX2RhdGErKzsKKyAgICAgICAgICAgICAgbG9uZ29wd2FzZXF1YWxzID0gVFJVRTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIEhhbmRsZSBvcHRpb25zIHdpdGggYW4gYWx0ZXJuYXRlIHNwZWxsaW5nIG9mIHRoZSBuYW1lICovCisKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBjaGFyIGJ1ZmYxWzI0XTsKKyAgICAgICAgY2hhciBidWZmMlsyNF07CisKKyAgICAgICAgaW50IGJhc2VsZW4gPSAoaW50KShvcGJyYSAtIG9wLT5sb25nX25hbWUpOworICAgICAgICBpbnQgZnVsbGxlbiA9IChpbnQpKHN0cmNocihvcC0+bG9uZ19uYW1lLCAnKScpIC0gb3AtPmxvbmdfbmFtZSArIDEpOworICAgICAgICBpbnQgYXJnbGVuID0gKGFyZ2VxdWFscyA9PSBOVUxMIHx8IGVxdWFscyA9PSBOVUxMKT8KKyAgICAgICAgICAoaW50KXN0cmxlbihhcmcpIDogKGludCkoYXJnZXF1YWxzIC0gYXJnKTsKKworICAgICAgICBzcHJpbnRmKGJ1ZmYxLCAiJS4qcyIsIGJhc2VsZW4sIG9wLT5sb25nX25hbWUpOworICAgICAgICBzcHJpbnRmKGJ1ZmYyLCAiJXMlLipzIiwgYnVmZjEsIGZ1bGxsZW4gLSBiYXNlbGVuIC0gMiwgb3BicmEgKyAxKTsKKworICAgICAgICBpZiAoc3RybmNtcChhcmcsIGJ1ZmYxLCBhcmdsZW4pID09IDAgfHwKKyAgICAgICAgICAgc3RybmNtcChhcmcsIGJ1ZmYyLCBhcmdsZW4pID09IDApCisgICAgICAgICAgeworICAgICAgICAgIGlmIChlcXVhbHMgIT0gTlVMTCAmJiBhcmdlcXVhbHMgIT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIG9wdGlvbl9kYXRhID0gYXJnZXF1YWxzOworICAgICAgICAgICAgaWYgKCpvcHRpb25fZGF0YSA9PSAnPScpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgb3B0aW9uX2RhdGErKzsKKyAgICAgICAgICAgICAgbG9uZ29wd2FzZXF1YWxzID0gVFJVRTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIGJyZWFrOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgaWYgKG9wLT5vbmVfY2hhciA9PSAwKQorICAgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICJwY3JlMmdyZXA6IFVua25vd24gb3B0aW9uICVzXG4iLCBhcmd2W2ldKTsKKyAgICAgIHBjcmUyZ3JlcF9leGl0KHVzYWdlKDIpKTsKKyAgICAgIH0KKyAgICB9CisKKyAgLyogSmVmZnJleSBGcmllZGwncyBkZWJ1Z2dpbmcgaGFybmVzcyB1c2VzIHRoZXNlIGFkZGl0aW9uYWwgb3B0aW9ucyB3aGljaAorICBhcmUgbm90IGluIHRoZSByaWdodCBmb3JtIGZvciBwdXR0aW5nIGluIHRoZSBvcHRpb24gdGFibGUgYmVjYXVzZSB0aGV5IHVzZQorICBvbmx5IG9uZSBoeXBoZW4sIHlldCBhcmUgbW9yZSB0aGFuIG9uZSBjaGFyYWN0ZXIgbG9uZy4gQnkgcHV0dGluZyB0aGVtCisgIHNlcGFyYXRlbHkgaGVyZSwgdGhleSB3aWxsIG5vdCBnZXQgZGlzcGxheWVkIGFzIHBhcnQgb2YgdGhlIGhlbHAoKSBvdXRwdXQsCisgIGJ1dCBJIGRvbid0IHRoaW5rIEplZmZyZXkgd2lsbCBjYXJlIGFib3V0IHRoYXQuICovCisKKyNpZmRlZiBKRlJJRURMX0RFQlVHCisgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCAiLXByZSIpID09IDApIHsKKyAgICAgICAgICBqZnJpZWRsX3ByZWZpeCA9IGFyZ3ZbKytpXTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgfSBlbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1wb3N0IikgPT0gMCkgeworICAgICAgICAgIGpmcmllZGxfcG9zdGZpeCA9IGFyZ3ZbKytpXTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgfSBlbHNlIGlmIChzdHJjbXAoYXJndltpXSwgIi1YVCIpID09IDApIHsKKyAgICAgICAgICBzc2NhbmYoYXJndlsrK2ldLCAiJWQiLCAmamZyaWVkbF9YVCk7CisgICAgICAgICAgY29udGludWU7CisgIH0gZWxzZSBpZiAoc3RyY21wKGFyZ3ZbaV0sICItWFIiKSA9PSAwKSB7CisgICAgICAgICAgc3NjYW5mKGFyZ3ZbKytpXSwgIiVkIiwgJmpmcmllZGxfWFIpOworICAgICAgICAgIGNvbnRpbnVlOworICB9CisjZW5kaWYKKworCisgIC8qIE9uZS1jaGFyIG9wdGlvbnM7IG1hbnkgdGhhdCBoYXZlIG5vIGRhdGEgbWF5IGJlIGluIGEgc2luZ2xlIGFyZ3VtZW50OyB3ZQorICBjb250aW51ZSB0aWxsIHdlIGhpdCB0aGUgbGFzdCBvbmUgb3Igb25lIHRoYXQgbmVlZHMgZGF0YS4gKi8KKworICBlbHNlCisgICAgeworICAgIGNoYXIgKnMgPSBhcmd2W2ldICsgMTsKKyAgICBsb25nb3AgPSBGQUxTRTsKKworICAgIHdoaWxlICgqcyAhPSAwKQorICAgICAgeworICAgICAgZm9yIChvcCA9IG9wdGlvbmxpc3Q7IG9wLT5vbmVfY2hhciAhPSAwOyBvcCsrKQorICAgICAgICB7CisgICAgICAgIGlmICgqcyA9PSBvcC0+b25lX2NoYXIpIGJyZWFrOworICAgICAgICB9CisgICAgICBpZiAob3AtPm9uZV9jaGFyID09IDApCisgICAgICAgIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJwY3JlMmdyZXA6IFVua25vd24gb3B0aW9uIGxldHRlciAnJWMnIGluIFwiJXNcIlxuIiwKKyAgICAgICAgICAqcywgYXJndltpXSk7CisgICAgICAgIHBjcmUyZ3JlcF9leGl0KHVzYWdlKDIpKTsKKyAgICAgICAgfQorCisgICAgICBvcHRpb25fZGF0YSA9IHMrMTsKKworICAgICAgLyogQnJlYWsgb3V0IGlmIHRoaXMgaXMgdGhlIGxhc3QgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmc7IGl0J3MgaGFuZGxlZAorICAgICAgYmVsb3cgbGlrZSBhIHNpbmdsZSBtdWx0aS1jaGFyIG9wdGlvbi4gKi8KKworICAgICAgaWYgKCpvcHRpb25fZGF0YSA9PSAwKSBicmVhazsKKworICAgICAgLyogQ2hlY2sgZm9yIGEgc2luZ2xlLWNoYXJhY3RlciBvcHRpb24gdGhhdCBoYXMgZGF0YTogT1BfT1BfTlVNQkVSKFMpCisgICAgICBhcmUgdXNlZCBmb3Igb25lcyB0aGF0IGVpdGhlciBoYXZlIGEgbnVtZXJpY2FsIG51bWJlciBvciBkZWZhdWx0cywgaS5lLgorICAgICAgdGhlIGRhdGEgaXMgb3B0aW9uYWwuIElmIGEgZGlnaXQgZm9sbG93cywgdGhlcmUgaXMgZGF0YTsgaWYgbm90LCBjYXJyeSBvbgorICAgICAgd2l0aCBvdGhlciBzaW5nbGUtY2hhcmFjdGVyIG9wdGlvbnMgaW4gdGhlIHNhbWUgc3RyaW5nLiAqLworCisgICAgICBpZiAob3AtPnR5cGUgPT0gT1BfT1BfTlVNQkVSIHx8IG9wLT50eXBlID09IE9QX09QX05VTUJFUlMpCisgICAgICAgIHsKKyAgICAgICAgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpc1sxXSkpIGJyZWFrOworICAgICAgICB9CisgICAgICBlbHNlICAgLyogQ2hlY2sgZm9yIGFuIG9wdGlvbiB3aXRoIGRhdGEgKi8KKyAgICAgICAgeworICAgICAgICBpZiAob3AtPnR5cGUgIT0gT1BfTk9EQVRBKSBicmVhazsKKyAgICAgICAgfQorCisgICAgICAvKiBIYW5kbGUgYSBzaW5nbGUtY2hhcmFjdGVyIG9wdGlvbiB3aXRoIG5vIGRhdGEsIHRoZW4gbG9vcCBmb3IgdGhlCisgICAgICBuZXh0IGNoYXJhY3RlciBpbiB0aGUgc3RyaW5nLiAqLworCisgICAgICBwY3JlMl9vcHRpb25zID0gaGFuZGxlX29wdGlvbigqcysrLCBwY3JlMl9vcHRpb25zKTsKKyAgICAgIH0KKyAgICB9CisKKyAgLyogQXQgdGhpcyBwb2ludCB3ZSBzaG91bGQgaGF2ZSBvcCBwb2ludGluZyB0byBhIG1hdGNoZWQgb3B0aW9uLiBJZiB0aGUgdHlwZQorICBpcyBOT19EQVRBLCBpdCBtZWFucyB0aGF0IHRoZXJlIGlzIG5vIGRhdGEsIGFuZCB0aGUgb3B0aW9uIG1pZ2h0IHNldAorICBzb21ldGhpbmcgaW4gdGhlIFBDUkUgb3B0aW9ucy4gKi8KKworICBpZiAob3AtPnR5cGUgPT0gT1BfTk9EQVRBKQorICAgIHsKKyAgICBwY3JlMl9vcHRpb25zID0gaGFuZGxlX29wdGlvbihvcC0+b25lX2NoYXIsIHBjcmUyX29wdGlvbnMpOworICAgIGNvbnRpbnVlOworICAgIH0KKworICAvKiBJZiB0aGUgb3B0aW9uIHR5cGUgaXMgT1BfT1BfU1RSSU5HIG9yIE9QX09QX05VTUJFUihTKSwgaXQncyBhbiBvcHRpb24gdGhhdAorICBlaXRoZXIgaGFzIGEgdmFsdWUgb3IgZGVmYXVsdHMgdG8gc29tZXRoaW5nLiBJdCBjYW5ub3QgaGF2ZSBkYXRhIGluIGEKKyAgc2VwYXJhdGUgaXRlbS4gQXQgdGhlIG1vbWVudCwgdGhlIG9ubHkgc3VjaCBvcHRpb25zIGFyZSAiY29sbyh1KXIiLAorICAib25seS1tYXRjaGluZyIsIGFuZCBKZWZmcmV5IEZyaWVkbCdzIHNwZWNpYWwgLVMgZGVidWdnaW5nIG9wdGlvbi4gKi8KKworICBpZiAoKm9wdGlvbl9kYXRhID09IDAgJiYKKyAgICAgIChvcC0+dHlwZSA9PSBPUF9PUF9TVFJJTkcgfHwgb3AtPnR5cGUgPT0gT1BfT1BfTlVNQkVSIHx8CisgICAgICAgb3AtPnR5cGUgPT0gT1BfT1BfTlVNQkVSUykpCisgICAgeworICAgIHN3aXRjaCAob3AtPm9uZV9jaGFyKQorICAgICAgeworICAgICAgY2FzZSBOX0NPTE9VUjoKKyAgICAgIGNvbG91cl9vcHRpb24gPSAoY2hhciAqKSJhdXRvIjsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlICdvJzoKKyAgICAgIG9ubHlfbWF0Y2hpbmdfbGFzdCA9IGFkZF9udW1iZXIoMCwgb25seV9tYXRjaGluZ19sYXN0KTsKKyAgICAgIGlmIChvbmx5X21hdGNoaW5nID09IE5VTEwpIG9ubHlfbWF0Y2hpbmcgPSBvbmx5X21hdGNoaW5nX2xhc3Q7CisgICAgICBicmVhazsKKworI2lmZGVmIEpGUklFRExfREVCVUcKKyAgICAgIGNhc2UgJ1MnOgorICAgICAgU19hcmcgPSAwOworICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgIH0KKyAgICBjb250aW51ZTsKKyAgICB9CisKKyAgLyogT3RoZXJ3aXNlLCBmaW5kIHRoZSBkYXRhIHN0cmluZyBmb3IgdGhlIG9wdGlvbi4gKi8KKworICBpZiAoKm9wdGlvbl9kYXRhID09IDApCisgICAgeworICAgIGlmIChpID49IGFyZ2MgLSAxIHx8IGxvbmdvcHdhc2VxdWFscykKKyAgICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBEYXRhIG1pc3NpbmcgYWZ0ZXIgJXNcbiIsIGFyZ3ZbaV0pOworICAgICAgcGNyZTJncmVwX2V4aXQodXNhZ2UoMikpOworICAgICAgfQorICAgIG9wdGlvbl9kYXRhID0gYXJndlsrK2ldOworICAgIH0KKworICAvKiBJZiB0aGUgb3B0aW9uIHR5cGUgaXMgT1BfT1BfTlVNQkVSUywgdGhlIHZhbHVlIGlzIGEgbnVtYmVyIHRoYXQgaXMgdG8gYmUKKyAgYWRkZWQgdG8gYSBjaGFpbiBvZiBudW1iZXJzLiAqLworCisgIGlmIChvcC0+dHlwZSA9PSBPUF9PUF9OVU1CRVJTKQorICAgIHsKKyAgICB1bnNpZ25lZCBsb25nIGludCBuID0gZGVjb2RlX251bWJlcihvcHRpb25fZGF0YSwgb3AsIGxvbmdvcCk7CisgICAgb21kYXRhc3RyICpvbWQgPSAob21kYXRhc3RyICopb3AtPmRhdGFwdHI7CisgICAgKihvbWQtPmxhc3RwdHIpID0gYWRkX251bWJlcigoaW50KW4sICoob21kLT5sYXN0cHRyKSk7CisgICAgaWYgKCoob21kLT5hbmNob3IpID09IE5VTEwpICoob21kLT5hbmNob3IpID0gKihvbWQtPmxhc3RwdHIpOworICAgIH0KKworICAvKiBJZiB0aGUgb3B0aW9uIHR5cGUgaXMgT1BfUEFUTElTVCwgaXQncyB0aGUgLWUgb3B0aW9uLCBvciBvbmUgb2YgdGhlCisgIGluY2x1ZGUvZXhjbHVkZSBvcHRpb25zLCB3aGljaCBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGNyZWF0ZSBsaXN0cworICBvZiBwYXR0ZXJucy4gKi8KKworICBlbHNlIGlmIChvcC0+dHlwZSA9PSBPUF9QQVRMSVNUKQorICAgIHsKKyAgICBwYXRkYXRhc3RyICpwZCA9IChwYXRkYXRhc3RyICopb3AtPmRhdGFwdHI7CisgICAgKihwZC0+bGFzdHB0cikgPSBhZGRfcGF0dGVybihvcHRpb25fZGF0YSwgKihwZC0+bGFzdHB0cikpOworICAgIGlmICgqKHBkLT5sYXN0cHRyKSA9PSBOVUxMKSBnb3RvIEVYSVQyOworICAgIGlmICgqKHBkLT5hbmNob3IpID09IE5VTEwpICoocGQtPmFuY2hvcikgPSAqKHBkLT5sYXN0cHRyKTsKKyAgICB9CisKKyAgLyogSWYgdGhlIG9wdGlvbiB0eXBlIGlzIE9QX0ZJTEVMSVNULCBpdCdzIG9uZSBvZiB0aGUgb3B0aW9ucyB0aGF0IG5hbWVzIGEKKyAgZmlsZS4gKi8KKworICBlbHNlIGlmIChvcC0+dHlwZSA9PSBPUF9GSUxFTElTVCkKKyAgICB7CisgICAgZm5kYXRhc3RyICpmZCA9IChmbmRhdGFzdHIgKilvcC0+ZGF0YXB0cjsKKyAgICBmbiA9IChmbnN0ciAqKW1hbGxvYyhzaXplb2YoZm5zdHIpKTsKKyAgICBpZiAoZm4gPT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBtYWxsb2MgZmFpbGVkXG4iKTsKKyAgICAgIGdvdG8gRVhJVDI7CisgICAgICB9CisgICAgZm4tPm5leHQgPSBOVUxMOworICAgIGZuLT5uYW1lID0gb3B0aW9uX2RhdGE7CisgICAgaWYgKCooZmQtPmFuY2hvcikgPT0gTlVMTCkKKyAgICAgICooZmQtPmFuY2hvcikgPSBmbjsKKyAgICBlbHNlCisgICAgICAoKihmZC0+bGFzdHB0cikpLT5uZXh0ID0gZm47CisgICAgKihmZC0+bGFzdHB0cikgPSBmbjsKKyAgICB9CisKKyAgLyogSGFuZGxlIE9QX0JJTkFSWV9GSUxFUyAqLworCisgIGVsc2UgaWYgKG9wLT50eXBlID09IE9QX0JJTkZJTEVTKQorICAgIHsKKyAgICBpZiAoc3RyY21wKG9wdGlvbl9kYXRhLCAiYmluYXJ5IikgPT0gMCkKKyAgICAgIGJpbmFyeV9maWxlcyA9IEJJTl9CSU5BUlk7CisgICAgZWxzZSBpZiAoc3RyY21wKG9wdGlvbl9kYXRhLCAid2l0aG91dC1tYXRjaCIpID09IDApCisgICAgICBiaW5hcnlfZmlsZXMgPSBCSU5fTk9NQVRDSDsKKyAgICBlbHNlIGlmIChzdHJjbXAob3B0aW9uX2RhdGEsICJ0ZXh0IikgPT0gMCkKKyAgICAgIGJpbmFyeV9maWxlcyA9IEJJTl9URVhUOworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiB1bmtub3duIHZhbHVlIFwiJXNcIiBmb3IgYmluYXJ5LWZpbGVzXG4iLAorICAgICAgICBvcHRpb25fZGF0YSk7CisgICAgICBwY3JlMmdyZXBfZXhpdCh1c2FnZSgyKSk7CisgICAgICB9CisgICAgfQorCisgIC8qIE90aGVyd2lzZSwgZGVhbCB3aXRoIGEgc2luZ2xlIHN0cmluZyBvciBudW1lcmljIGRhdGEgdmFsdWUuICovCisKKyAgZWxzZSBpZiAob3AtPnR5cGUgIT0gT1BfTlVNQkVSICYmIG9wLT50eXBlICE9IE9QX1UzMk5VTUJFUiAmJgorICAgICAgICAgICBvcC0+dHlwZSAhPSBPUF9PUF9OVU1CRVIpCisgICAgeworICAgICooKGNoYXIgKiopb3AtPmRhdGFwdHIpID0gb3B0aW9uX2RhdGE7CisgICAgfQorICBlbHNlCisgICAgeworICAgIHVuc2lnbmVkIGxvbmcgaW50IG4gPSBkZWNvZGVfbnVtYmVyKG9wdGlvbl9kYXRhLCBvcCwgbG9uZ29wKTsKKyAgICBpZiAob3AtPnR5cGUgPT0gT1BfVTMyTlVNQkVSKSAqKCh1aW50MzJfdCAqKW9wLT5kYXRhcHRyKSA9IG47CisgICAgICBlbHNlICooKGludCAqKW9wLT5kYXRhcHRyKSA9IG47CisgICAgfQorICB9CisKKy8qIE9wdGlvbnMgaGF2ZSBiZWVuIGRlY29kZWQuIElmIC1DIHdhcyB1c2VkLCBpdHMgdmFsdWUgaXMgdXNlZCBhcyBhIGRlZmF1bHQKK2ZvciAtQSBhbmQgLUIuICovCisKK2lmIChib3RoX2NvbnRleHQgPiAwKQorICB7CisgIGlmIChhZnRlcl9jb250ZXh0ID09IDApIGFmdGVyX2NvbnRleHQgPSBib3RoX2NvbnRleHQ7CisgIGlmIChiZWZvcmVfY29udGV4dCA9PSAwKSBiZWZvcmVfY29udGV4dCA9IGJvdGhfY29udGV4dDsKKyAgfQorCisvKiBPbmx5IG9uZSBvZiAtLW9ubHktbWF0Y2hpbmcsIC0tZmlsZS1vZmZzZXRzLCBvciAtLWxpbmUtb2Zmc2V0cyBpcyBwZXJtaXR0ZWQuCitIb3dldmVyLCBhbGwgdGhyZWUgc2V0IHNob3dfb25seV9tYXRjaGluZyBiZWNhdXNlIHRoZXkgZGlzcGxheSwgZWFjaCBpbiB0aGVpcgorb3duIHdheSwgb25seSB0aGUgZGF0YSB0aGF0IGhhcyBtYXRjaGVkLiAqLworCitpZiAoKG9ubHlfbWF0Y2hpbmcgIT0gTlVMTCAmJiAoZmlsZV9vZmZzZXRzIHx8IGxpbmVfb2Zmc2V0cykpIHx8CisgICAgKGZpbGVfb2Zmc2V0cyAmJiBsaW5lX29mZnNldHMpKQorICB7CisgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBDYW5ub3QgbWl4IC0tb25seS1tYXRjaGluZywgLS1maWxlLW9mZnNldHMgIgorICAgICJhbmQvb3IgLS1saW5lLW9mZnNldHNcbiIpOworICBwY3JlMmdyZXBfZXhpdCh1c2FnZSgyKSk7CisgIH0KKworLyogUHV0IGxpbWl0cyBpbnRvIHRoZSBtYXRjaCBkYXRhIGJsb2NrLiAqLworCitpZiAobWF0Y2hfbGltaXQgPiAwKSBwY3JlMl9zZXRfbWF0Y2hfbGltaXQobWF0Y2hfY29udGV4dCwgbWF0Y2hfbGltaXQpOworaWYgKHJlY3Vyc2lvbl9saW1pdCA+IDApIHBjcmUyX3NldF9yZWN1cnNpb25fbGltaXQobWF0Y2hfY29udGV4dCwgcmVjdXJzaW9uX2xpbWl0KTsKKworaWYgKG9ubHlfbWF0Y2hpbmcgIT0gTlVMTCB8fCBmaWxlX29mZnNldHMgfHwgbGluZV9vZmZzZXRzKQorICBzaG93X29ubHlfbWF0Y2hpbmcgPSBUUlVFOworCisvKiBJZiBhIGxvY2FsZSBoYXMgbm90IGJlZW4gcHJvdmlkZWQgYXMgYW4gb3B0aW9uLCBzZWUgaWYgdGhlIExDX0NUWVBFIG9yCitMQ19BTEwgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBhbmQgaWYgc28sIHVzZSBpdC4gKi8KKworaWYgKGxvY2FsZSA9PSBOVUxMKQorICB7CisgIGxvY2FsZSA9IGdldGVudigiTENfQUxMIik7CisgIGxvY2FsZV9mcm9tID0gIkxDQ19BTEwiOworICB9CisKK2lmIChsb2NhbGUgPT0gTlVMTCkKKyAgeworICBsb2NhbGUgPSBnZXRlbnYoIkxDX0NUWVBFIik7CisgIGxvY2FsZV9mcm9tID0gIkxDX0NUWVBFIjsKKyAgfQorCisvKiBJZiBhIGxvY2FsZSBpcyBzZXQsIHVzZSBpdCB0byBnZW5lcmF0ZSB0aGUgdGFibGVzIHRoZSBQQ1JFIG5lZWRzLiBQYXNzaW5nCitOVUxMIHRvIHBjcmUyX21ha2V0YWJsZXMoKSBtZWFucyB0aGF0IG1hbGxvYygpIGlzIHVzZWQgdG8gZ2V0IHRoZSBtZW1vcnkuICovCisKK2lmIChsb2NhbGUgIT0gTlVMTCkKKyAgeworICBpZiAoc2V0bG9jYWxlKExDX0NUWVBFLCBsb2NhbGUpID09IE5VTEwpCisgICAgeworICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBGYWlsZWQgdG8gc2V0IGxvY2FsZSAlcyAob2J0YWluZWQgZnJvbSAlcylcbiIsCisgICAgICBsb2NhbGUsIGxvY2FsZV9mcm9tKTsKKyAgICBnb3RvIEVYSVQyOworICAgIH0KKyAgY2hhcmFjdGVyX3RhYmxlcyA9IHBjcmUyX21ha2V0YWJsZXMoTlVMTCk7CisgIHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzKGNvbXBpbGVfY29udGV4dCwgY2hhcmFjdGVyX3RhYmxlcyk7CisgIH0KKworLyogU29ydCBvdXQgY29sb3VyaW5nICovCisKK2lmIChjb2xvdXJfb3B0aW9uICE9IE5VTEwgJiYgc3RyY21wKGNvbG91cl9vcHRpb24sICJuZXZlciIpICE9IDApCisgIHsKKyAgaWYgKHN0cmNtcChjb2xvdXJfb3B0aW9uLCAiYWx3YXlzIikgPT0gMCkgZG9fY29sb3VyID0gVFJVRTsKKyAgZWxzZSBpZiAoc3RyY21wKGNvbG91cl9vcHRpb24sICJhdXRvIikgPT0gMCkgZG9fY29sb3VyID0gaXNfc3Rkb3V0X3R0eSgpOworICBlbHNlCisgICAgeworICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBVbmtub3duIGNvbG91ciBzZXR0aW5nIFwiJXNcIlxuIiwKKyAgICAgIGNvbG91cl9vcHRpb24pOworICAgIGdvdG8gRVhJVDI7CisgICAgfQorICBpZiAoZG9fY29sb3VyKQorICAgIHsKKyAgICBjaGFyICpjcyA9IGdldGVudigiUENSRTJHUkVQX0NPTE9VUiIpOworICAgIGlmIChjcyA9PSBOVUxMKSBjcyA9IGdldGVudigiUENSRTJHUkVQX0NPTE9SIik7CisgICAgaWYgKGNzICE9IE5VTEwpIGNvbG91cl9zdHJpbmcgPSBjczsKKyAgICB9CisgIH0KKworLyogU29ydCBvdXQgYSBuZXdsaW5lIHNldHRpbmcuICovCisKK2lmIChuZXdsaW5lX2FyZyAhPSBOVUxMKQorICB7CisgIGZvciAoZW5kbGluZXR5cGUgPSAxOyBlbmRsaW5ldHlwZSA8IChpbnQpKHNpemVvZihuZXdsaW5lcykvc2l6ZW9mKGNoYXIgKikpOworICAgICAgIGVuZGxpbmV0eXBlKyspCisgICAgeworICAgIGlmIChzdHJjbXBpYyhuZXdsaW5lX2FyZywgbmV3bGluZXNbZW5kbGluZXR5cGVdKSA9PSAwKSBicmVhazsKKyAgICB9CisgIGlmIChlbmRsaW5ldHlwZSA8IChpbnQpKHNpemVvZihuZXdsaW5lcykvc2l6ZW9mKGNoYXIgKikpKQorICAgIHBjcmUyX3NldF9uZXdsaW5lKGNvbXBpbGVfY29udGV4dCwgZW5kbGluZXR5cGUpOworICBlbHNlCisgICAgeworICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBJbnZhbGlkIG5ld2xpbmUgc3BlY2lmaWVyIFwiJXNcIlxuIiwKKyAgICAgIG5ld2xpbmVfYXJnKTsKKyAgICBnb3RvIEVYSVQyOworICAgIH0KKyAgfQorCisvKiBGaW5kIGRlZmF1bHQgbmV3bGluZSBjb252ZW50aW9uICovCisKK2Vsc2UKKyAgeworICAodm9pZClwY3JlMl9jb25maWcoUENSRTJfQ09ORklHX05FV0xJTkUsICZlbmRsaW5ldHlwZSk7CisgIH0KKworLyogSW50ZXJwcmV0IHRoZSB0ZXh0IHZhbHVlcyBmb3IgLWQgYW5kIC1EICovCisKK2lmIChkZWVfb3B0aW9uICE9IE5VTEwpCisgIHsKKyAgaWYgKHN0cmNtcChkZWVfb3B0aW9uLCAicmVhZCIpID09IDApIGRlZV9hY3Rpb24gPSBkZWVfUkVBRDsKKyAgZWxzZSBpZiAoc3RyY21wKGRlZV9vcHRpb24sICJyZWN1cnNlIikgPT0gMCkgZGVlX2FjdGlvbiA9IGRlZV9SRUNVUlNFOworICBlbHNlIGlmIChzdHJjbXAoZGVlX29wdGlvbiwgInNraXAiKSA9PSAwKSBkZWVfYWN0aW9uID0gZGVlX1NLSVA7CisgIGVsc2UKKyAgICB7CisgICAgZnByaW50ZihzdGRlcnIsICJwY3JlMmdyZXA6IEludmFsaWQgdmFsdWUgXCIlc1wiIGZvciAtZFxuIiwgZGVlX29wdGlvbik7CisgICAgZ290byBFWElUMjsKKyAgICB9CisgIH0KKworaWYgKERFRV9vcHRpb24gIT0gTlVMTCkKKyAgeworICBpZiAoc3RyY21wKERFRV9vcHRpb24sICJyZWFkIikgPT0gMCkgREVFX2FjdGlvbiA9IERFRV9SRUFEOworICBlbHNlIGlmIChzdHJjbXAoREVFX29wdGlvbiwgInNraXAiKSA9PSAwKSBERUVfYWN0aW9uID0gREVFX1NLSVA7CisgIGVsc2UKKyAgICB7CisgICAgZnByaW50ZihzdGRlcnIsICJwY3JlMmdyZXA6IEludmFsaWQgdmFsdWUgXCIlc1wiIGZvciAtRFxuIiwgREVFX29wdGlvbik7CisgICAgZ290byBFWElUMjsKKyAgICB9CisgIH0KKworLyogQ2hlY2sgdGhlIHZhbHVlcyBmb3IgSmVmZnJleSBGcmllZGwncyBkZWJ1Z2dpbmcgb3B0aW9ucy4gKi8KKworI2lmZGVmIEpGUklFRExfREVCVUcKK2lmIChTX2FyZyA+IDkpCisgIHsKKyAgZnByaW50ZihzdGRlcnIsICJwY3JlMmdyZXA6IGJhZCB2YWx1ZSBmb3IgLVMgb3B0aW9uXG4iKTsKKyAgcmV0dXJuIDI7CisgIH0KK2lmIChqZnJpZWRsX1hUICE9IDAgfHwgamZyaWVkbF9YUiAhPSAwKQorICB7CisgIGlmIChqZnJpZWRsX1hUID09IDApIGpmcmllZGxfWFQgPSAxOworICBpZiAoamZyaWVkbF9YUiA9PSAwKSBqZnJpZWRsX1hSID0gMTsKKyAgfQorI2VuZGlmCisKKy8qIEdldCBtZW1vcnkgZm9yIHRoZSBtYWluIGJ1ZmZlci4gKi8KKworYnVmc2l6ZSA9IDMqYnVmdGhpcmQ7CittYWluX2J1ZmZlciA9IChjaGFyICopbWFsbG9jKGJ1ZnNpemUpOworCitpZiAobWFpbl9idWZmZXIgPT0gTlVMTCkKKyAgeworICBmcHJpbnRmKHN0ZGVyciwgInBjcmUyZ3JlcDogbWFsbG9jIGZhaWxlZFxuIik7CisgIGdvdG8gRVhJVDI7CisgIH0KKworLyogSWYgbm8gcGF0dGVybnMgd2VyZSBwcm92aWRlZCBieSAtZSwgYW5kIHRoZXJlIGFyZSBubyBmaWxlcyBwcm92aWRlZCBieSAtZiwKK3RoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgb25lIGFuZCBvbmx5IHBhdHRlcm4sIGFuZCBpdCBtdXN0IGV4aXN0LiAqLworCitpZiAocGF0dGVybnMgPT0gTlVMTCAmJiBwYXR0ZXJuX2ZpbGVzID09IE5VTEwpCisgIHsKKyAgaWYgKGkgPj0gYXJnYykgcmV0dXJuIHVzYWdlKDIpOworICBwYXR0ZXJucyA9IHBhdHRlcm5zX2xhc3QgPSBhZGRfcGF0dGVybihhcmd2W2krK10sIE5VTEwpOworICBpZiAocGF0dGVybnMgPT0gTlVMTCkgZ290byBFWElUMjsKKyAgfQorCisvKiBDb21waWxlIHRoZSBwYXR0ZXJucyB0aGF0IHdlcmUgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgZWl0aGVyIGJ5CittdWx0aXBsZSB1c2VzIG9mIC1lIG9yIGFzIGEgc2luZ2xlIHVua2V5ZWQgcGF0dGVybi4gV2UgY2Fubm90IGRvIHRoaXMgdW50aWwKK2FmdGVyIGFsbCB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlIHJlYWQgc28gdGhhdCB3ZSBrbm93IHdoaWNoIFBDUkUgb3B0aW9ucwordG8gdXNlLiBXaGVuIC1GIGlzIHVzZWQsIGNvbXBpbGVfcGF0dGVybigpIG1heSBhZGQgYW5vdGhlciBibG9jayBpbnRvIHRoZQorY2hhaW4sIHNvIHdlIG11c3Qgbm90IGFjY2VzcyB0aGUgbmV4dCBwb2ludGVyIHRpbGwgYWZ0ZXIgdGhlIGNvbXBpbGUuICovCisKK2ZvciAoaiA9IDEsIGNwID0gcGF0dGVybnM7IGNwICE9IE5VTEw7IGorKywgY3AgPSBjcC0+bmV4dCkKKyAgeworICBpZiAoIWNvbXBpbGVfcGF0dGVybihjcCwgcGNyZTJfb3B0aW9ucywgcHJvY2Vzc19vcHRpb25zLCBGQUxTRSwgImNvbW1hbmQtbGluZSIsCisgICAgICAgKGogPT0gMSAmJiBwYXR0ZXJucy0+bmV4dCA9PSBOVUxMKT8gMCA6IGopKQorICAgIGdvdG8gRVhJVDI7CisgIH0KKworLyogUmVhZCBhbmQgY29tcGlsZSB0aGUgcmVndWxhciBleHByZXNzaW9ucyB0aGF0IGFyZSBwcm92aWRlZCBpbiBmaWxlcy4gKi8KKworZm9yIChmbiA9IHBhdHRlcm5fZmlsZXM7IGZuICE9IE5VTEw7IGZuID0gZm4tPm5leHQpCisgIHsKKyAgaWYgKCFyZWFkX3BhdHRlcm5fZmlsZShmbi0+bmFtZSwgJnBhdHRlcm5zLCAmcGF0dGVybnNfbGFzdCwgcHJvY2Vzc19vcHRpb25zKSkKKyAgICBnb3RvIEVYSVQyOworICB9CisKKy8qIFVubGVzcyBKSVQgaGFzIGJlZW4gZXhwbGljaXRseSBkaXNhYmxlZCwgYXJyYW5nZSBhIHN0YWNrIGZvciBpdCB0byB1c2UuICovCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyR1JFUF9KSVQKK2lmICh1c2Vfaml0KQorICBqaXRfc3RhY2sgPSBwY3JlMl9qaXRfc3RhY2tfY3JlYXRlKDMyKjEwMjQsIDEwMjQqMTAyNCwgTlVMTCk7CisjZW5kaWYKKworZm9yIChqID0gMSwgY3AgPSBwYXR0ZXJuczsgY3AgIT0gTlVMTDsgaisrLCBjcCA9IGNwLT5uZXh0KQorICB7CisjaWZkZWYgU1VQUE9SVF9QQ1JFMkdSRVBfSklUCisgIGlmIChqaXRfc3RhY2sgIT0gTlVMTCAmJiBjcC0+Y29tcGlsZWQgIT0gTlVMTCkKKyAgICBwY3JlMl9qaXRfc3RhY2tfYXNzaWduKG1hdGNoX2NvbnRleHQsIE5VTEwsIGppdF9zdGFjayk7CisjZW5kaWYKKyAgfQorCisvKiBJZiB0aGVyZSBhcmUgaW5jbHVkZSBvciBleGNsdWRlIHBhdHRlcm5zIHJlYWQgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBjb21waWxlCit0aGVtLiAtRiwgLXcsIGFuZCAteCBkbyBub3QgYXBwbHksIHNvIHRoZSB0aGlyZCBhcmd1bWVudCBvZiBjb21waWxlX3BhdHRlcm4gaXMKKzAuICovCisKK2ZvciAoaiA9IDA7IGogPCA0OyBqKyspCisgIHsKKyAgaW50IGs7CisgIGZvciAoayA9IDEsIGNwID0gKihpbmNleGxpc3Rbal0pOyBjcCAhPSBOVUxMOyBrKyssIGNwID0gY3AtPm5leHQpCisgICAgeworICAgIGlmICghY29tcGlsZV9wYXR0ZXJuKGNwLCBwY3JlMl9vcHRpb25zLCAwLCBGQUxTRSwgaW5jZXhuYW1lW2pdLAorICAgICAgICAgKGsgPT0gMSAmJiBjcC0+bmV4dCA9PSBOVUxMKT8gMCA6IGspKQorICAgICAgZ290byBFWElUMjsKKyAgICB9CisgIH0KKworLyogUmVhZCBhbmQgY29tcGlsZSBpbmNsdWRlL2V4Y2x1ZGUgcGF0dGVybnMgZnJvbSBmaWxlcy4gKi8KKworZm9yIChmbiA9IGluY2x1ZGVfZnJvbTsgZm4gIT0gTlVMTDsgZm4gPSBmbi0+bmV4dCkKKyAgeworICBpZiAoIXJlYWRfcGF0dGVybl9maWxlKGZuLT5uYW1lLCAmaW5jbHVkZV9wYXR0ZXJucywgJmluY2x1ZGVfcGF0dGVybnNfbGFzdCwgMCkpCisgICAgZ290byBFWElUMjsKKyAgfQorCitmb3IgKGZuID0gZXhjbHVkZV9mcm9tOyBmbiAhPSBOVUxMOyBmbiA9IGZuLT5uZXh0KQorICB7CisgIGlmICghcmVhZF9wYXR0ZXJuX2ZpbGUoZm4tPm5hbWUsICZleGNsdWRlX3BhdHRlcm5zLCAmZXhjbHVkZV9wYXR0ZXJuc19sYXN0LCAwKSkKKyAgICBnb3RvIEVYSVQyOworICB9CisKKy8qIElmIHRoZXJlIGFyZSBubyBmaWxlcyB0aGF0IGNvbnRhaW4gbGlzdHMgb2YgZmlsZXMgdG8gc2VhcmNoLCBhbmQgdGhlcmUgYXJlCitubyBmaWxlIGFyZ3VtZW50cywgc2VhcmNoIHN0ZGluLCBhbmQgdGhlbiBleGl0LiAqLworCitpZiAoZmlsZV9saXN0cyA9PSBOVUxMICYmIGkgPj0gYXJnYykKKyAgeworICByYyA9IHBjcmUyZ3JlcChzdGRpbiwgRlJfUExBSU4sIHN0ZGluX25hbWUsCisgICAgKGZpbGVuYW1lcyA+IEZOX0RFRkFVTFQpPyBzdGRpbl9uYW1lIDogTlVMTCk7CisgIGdvdG8gRVhJVDsKKyAgfQorCisvKiBJZiBhbnkgZmlsZXMgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgZmlsZXMgdG8gc2VhcmNoIGhhdmUgYmVlbiBzcGVjaWZpZWQsCityZWFkIHRoZW0gbGluZSBieSBsaW5lIGFuZCBzZWFyY2ggdGhlIGdpdmVuIGZpbGVzLiAqLworCitmb3IgKGZuID0gZmlsZV9saXN0czsgZm4gIT0gTlVMTDsgZm4gPSBmbi0+bmV4dCkKKyAgeworICBjaGFyIGJ1ZmZlcltQQVRCVUZTSVpFXTsKKyAgRklMRSAqZmw7CisgIGlmIChzdHJjbXAoZm4tPm5hbWUsICItIikgPT0gMCkgZmwgPSBzdGRpbjsgZWxzZQorICAgIHsKKyAgICBmbCA9IGZvcGVuKGZuLT5uYW1lLCAicmIiKTsKKyAgICBpZiAoZmwgPT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIGZwcmludGYoc3RkZXJyLCAicGNyZTJncmVwOiBGYWlsZWQgdG8gb3BlbiAlczogJXNcbiIsIGZuLT5uYW1lLAorICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgZ290byBFWElUMjsKKyAgICAgIH0KKyAgICB9CisgIHdoaWxlIChmZ2V0cyhidWZmZXIsIFBBVEJVRlNJWkUsIGZsKSAhPSBOVUxMKQorICAgIHsKKyAgICBpbnQgZnJjOworICAgIGNoYXIgKmVuZCA9IGJ1ZmZlciArIChpbnQpc3RybGVuKGJ1ZmZlcik7CisgICAgd2hpbGUgKGVuZCA+IGJ1ZmZlciAmJiBpc3NwYWNlKGVuZFstMV0pKSBlbmQtLTsKKyAgICAqZW5kID0gMDsKKyAgICBpZiAoKmJ1ZmZlciAhPSAwKQorICAgICAgeworICAgICAgZnJjID0gZ3JlcF9vcl9yZWN1cnNlKGJ1ZmZlciwgZGVlX2FjdGlvbiA9PSBkZWVfUkVDVVJTRSwgRkFMU0UpOworICAgICAgaWYgKGZyYyA+IDEpIHJjID0gZnJjOworICAgICAgICBlbHNlIGlmIChmcmMgPT0gMCAmJiByYyA9PSAxKSByYyA9IDA7CisgICAgICB9CisgICAgfQorICBpZiAoZmwgIT0gc3RkaW4pIGZjbG9zZShmbCk7CisgIH0KKworLyogQWZ0ZXIgaGFuZGxpbmcgZmlsZS1saXN0LCB3b3JrIHRocm91Z2ggcmVtYWluaW5nIGFyZ3VtZW50cy4gUGFzcyBpbiB0aGUgZmFjdAordGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBhcmd1bWVudCBhdCB0b3AgbGV2ZWwgLSB0aGlzIHN1cHByZXNzZXMgdGhlIGZpbGUgbmFtZSBpZgordGhlIGFyZ3VtZW50IGlzIG5vdCBhIGRpcmVjdG9yeSBhbmQgZmlsZW5hbWVzIGFyZSBub3Qgb3RoZXJ3aXNlIGZvcmNlZC4gKi8KKworb25seV9vbmVfYXRfdG9wID0gaSA9PSBhcmdjIC0gMSAmJiBmaWxlX2xpc3RzID09IE5VTEw7CisKK2ZvciAoOyBpIDwgYXJnYzsgaSsrKQorICB7CisgIGludCBmcmMgPSBncmVwX29yX3JlY3Vyc2UoYXJndltpXSwgZGVlX2FjdGlvbiA9PSBkZWVfUkVDVVJTRSwKKyAgICBvbmx5X29uZV9hdF90b3ApOworICBpZiAoZnJjID4gMSkgcmMgPSBmcmM7CisgICAgZWxzZSBpZiAoZnJjID09IDAgJiYgcmMgPT0gMSkgcmMgPSAwOworICB9CisKK0VYSVQ6CisjaWZkZWYgU1VQUE9SVF9QQ1JFMkdSRVBfSklUCitpZiAoaml0X3N0YWNrICE9IE5VTEwpIHBjcmUyX2ppdF9zdGFja19mcmVlKGppdF9zdGFjayk7CisjZW5kaWYKKworZnJlZShtYWluX2J1ZmZlcik7CitmcmVlKCh2b2lkICopY2hhcmFjdGVyX3RhYmxlcyk7CisKK3BjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlKGNvbXBpbGVfY29udGV4dCk7CitwY3JlMl9tYXRjaF9jb250ZXh0X2ZyZWUobWF0Y2hfY29udGV4dCk7CitwY3JlMl9tYXRjaF9kYXRhX2ZyZWUobWF0Y2hfZGF0YSk7CisKK2ZyZWVfcGF0dGVybl9jaGFpbihwYXR0ZXJucyk7CitmcmVlX3BhdHRlcm5fY2hhaW4oaW5jbHVkZV9wYXR0ZXJucyk7CitmcmVlX3BhdHRlcm5fY2hhaW4oaW5jbHVkZV9kaXJfcGF0dGVybnMpOworZnJlZV9wYXR0ZXJuX2NoYWluKGV4Y2x1ZGVfcGF0dGVybnMpOworZnJlZV9wYXR0ZXJuX2NoYWluKGV4Y2x1ZGVfZGlyX3BhdHRlcm5zKTsKKworZnJlZV9maWxlX2NoYWluKGV4Y2x1ZGVfZnJvbSk7CitmcmVlX2ZpbGVfY2hhaW4oaW5jbHVkZV9mcm9tKTsKK2ZyZWVfZmlsZV9jaGFpbihwYXR0ZXJuX2ZpbGVzKTsKK2ZyZWVfZmlsZV9jaGFpbihmaWxlX2xpc3RzKTsKKword2hpbGUgKG9ubHlfbWF0Y2hpbmcgIT0gTlVMTCkKKyAgeworICBvbXN0ciAqdGhpcyA9IG9ubHlfbWF0Y2hpbmc7CisgIG9ubHlfbWF0Y2hpbmcgPSB0aGlzLT5uZXh0OworICBmcmVlKHRoaXMpOworICB9CisKK3BjcmUyZ3JlcF9leGl0KHJjKTsKKworRVhJVDI6CityYyA9IDI7Citnb3RvIEVYSVQ7Cit9CisKKy8qIEVuZCBvZiBwY3JlMmdyZXAgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMnBvc2l4LmMgYi9kaXN0Mi9zcmMvcGNyZTJwb3NpeC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkNmU1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJwb3NpeC5jCkBAIC0wLDAgKzEsMzM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLgorCisgICAgICAgICAgICAgICAgICAgICAgIFdyaXR0ZW4gYnkgUGhpbGlwIEhhemVsCisgICAgIE9yaWdpbmFsIEFQSSBjb2RlIENvcHlyaWdodCAoYykgMTk5Ny0yMDEyIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisgICAgICAgICBOZXcgQVBJIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworLyogVGhpcyBtb2R1bGUgaXMgYSB3cmFwcGVyIHRoYXQgcHJvdmlkZXMgYSBQT1NJWCBBUEkgdG8gdGhlIHVuZGVybHlpbmcgUENSRTIKK2Z1bmN0aW9ucy4gKi8KKworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKworLyogRW5zdXJlIHRoYXQgdGhlIFBDUkUyUE9TSVhfRVhQX3h4eCBtYWNyb3MgYXJlIHNldCBhcHByb3ByaWF0ZWx5IGZvcgorY29tcGlsaW5nIHRoZXNlIGZ1bmN0aW9ucy4gVGhpcyBtdXN0IGNvbWUgYmVmb3JlIGluY2x1ZGluZyBwY3JlMnBvc2l4LmgsIHdoZXJlCit0aGV5IGFyZSBzZXQgZm9yIGFuIGFwcGxpY2F0aW9uICh1c2luZyB0aGVzZSBmdW5jdGlvbnMpIGlmIHRoZXkgaGF2ZSBub3QKK3ByZXZpb3VzbHkgYmVlbiBzZXQuICovCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoUENSRTJfU1RBVElDKQorIyAgZGVmaW5lIFBDUkUyUE9TSVhfRVhQX0RFQ0wgZXh0ZXJuIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQorIyAgZGVmaW5lIFBDUkUyUE9TSVhfRVhQX0RFRk4gX19kZWNsc3BlYyhkbGxleHBvcnQpCisjZW5kaWYKKworLyogV2UgaW5jbHVkZSBwY3JlMi5oIGJlZm9yZSBwY3JlMl9pbnRlcm5hbC5oIHNvIHRoYXQgdGhlIFBDUkUyIGxpYnJhcnkKK2Z1bmN0aW9ucyBhcmUgZGVjbGFyZWQgYXMgImltcG9ydCIgZm9yIFdpbmRvd3MgYnkgZGVmaW5pbmcgUENSRTJfRVhQX0RFQ0wgYXMKKyJpbXBvcnQiLiBUaGlzIGlzIG5lZWRlZCBldmVuIHRob3VnaCBwY3JlMl9pbnRlcm5hbC5oIGl0c2VsZiBpbmNsdWRlcyBwY3JlMi5oLAorYmVjYXVzZSBpdCBkb2VzIHNvIGFmdGVyIGl0IGhhcyBzZXQgUENSRTJfRVhQX0RFQ0wgdG8gImV4cG9ydCIgaWYgaXQgaXMgbm90CithbHJlYWR5IHNldC4gKi8KKworI2luY2x1ZGUgInBjcmUyLmgiCisjaW5jbHVkZSAicGNyZTJfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJwY3JlMnBvc2l4LmgiCisKKy8qIFRhYmxlIHRvIHRyYW5zbGF0ZSBQQ1JFMiBjb21waWxlIHRpbWUgZXJyb3IgY29kZXMgaW50byBQT1NJWCBlcnJvciBjb2Rlcy4KK09ubHkgYSBmZXcgUENSRTIgZXJyb3JzIHdpdGggYSB2YWx1ZSBncmVhdGVyIHRoYW4gMjMgdHVybiBpbnRvIHNwZWNpYWwgUE9TSVgKK2NvZGVzOiBtb3N0IGdvIHRvIFJFR19CQURQQVQuIFRoZSBzZWNvbmQgdGFibGUgbGlzdHMsIGluIHBhaXJzLCB0aG9zZSB0aGF0Citkb24ndC4gKi8KKworc3RhdGljIGNvbnN0IGludCBlaW50MVtdID0geworICAwLCAgICAgICAgICAgLyogTm8gZXJyb3IgKi8KKyAgUkVHX0VFU0NBUEUsIC8qIFwgYXQgZW5kIG9mIHBhdHRlcm4gKi8KKyAgUkVHX0VFU0NBUEUsIC8qIFxjIGF0IGVuZCBvZiBwYXR0ZXJuICovCisgIFJFR19FRVNDQVBFLCAvKiB1bnJlY29nbml6ZWQgY2hhcmFjdGVyIGZvbGxvd3MgXCAqLworICBSRUdfQkFEQlIsICAgLyogbnVtYmVycyBvdXQgb2Ygb3JkZXIgaW4ge30gcXVhbnRpZmllciAqLworICAvKiA1ICovCisgIFJFR19CQURCUiwgICAvKiBudW1iZXIgdG9vIGJpZyBpbiB7fSBxdWFudGlmaWVyICovCisgIFJFR19FQlJBQ0ssICAvKiBtaXNzaW5nIHRlcm1pbmF0aW5nIF0gZm9yIGNoYXJhY3RlciBjbGFzcyAqLworICBSRUdfRUNUWVBFLCAgLyogaW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgaW4gY2hhcmFjdGVyIGNsYXNzICovCisgIFJFR19FUkFOR0UsICAvKiByYW5nZSBvdXQgb2Ygb3JkZXIgaW4gY2hhcmFjdGVyIGNsYXNzICovCisgIFJFR19CQURSUFQsICAvKiBub3RoaW5nIHRvIHJlcGVhdCAqLworICAvKiAxMCAqLworICBSRUdfQVNTRVJULCAgLyogaW50ZXJuYWwgZXJyb3I6IHVuZXhwZWN0ZWQgcmVwZWF0ICovCisgIFJFR19CQURQQVQsICAvKiB1bnJlY29nbml6ZWQgY2hhcmFjdGVyIGFmdGVyICg/IG9yICg/LSAqLworICBSRUdfQkFEUEFULCAgLyogUE9TSVggbmFtZWQgY2xhc3NlcyBhcmUgc3VwcG9ydGVkIG9ubHkgd2l0aGluIGEgY2xhc3MgKi8KKyAgUkVHX0JBRFBBVCwgIC8qIFBPU0lYIGNvbGxhdGluZyBlbGVtZW50cyBhcmUgbm90IHN1cHBvcnRlZCAqLworICBSRUdfRVBBUkVOLCAgLyogbWlzc2luZyApICovCisgIC8qIDE1ICovCisgIFJFR19FU1VCUkVHLCAvKiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4gKi8KKyAgUkVHX0lOVkFSRywgIC8qIHBhdHRlcm4gcGFzc2VkIGFzIE5VTEwgKi8KKyAgUkVHX0lOVkFSRywgIC8qIHVua25vd24gY29tcGlsZS10aW1lIG9wdGlvbiBiaXQocykgKi8KKyAgUkVHX0VQQVJFTiwgIC8qIG1pc3NpbmcgKSBhZnRlciAoPyMgY29tbWVudCAqLworICBSRUdfRVNJWkUsICAgLyogcGFyZW50aGVzZXMgbmVzdGVkIHRvbyBkZWVwbHkgKi8KKyAgLyogMjAgKi8KKyAgUkVHX0VTSVpFLCAgIC8qIHJlZ3VsYXIgZXhwcmVzc2lvbiB0b28gbGFyZ2UgKi8KKyAgUkVHX0VTUEFDRSwgIC8qIGZhaWxlZCB0byBnZXQgbWVtb3J5ICovCisgIFJFR19FUEFSRU4sICAvKiB1bm1hdGNoZWQgY2xvc2luZyBwYXJlbnRoZXNpcyAqLworICBSRUdfQVNTRVJUICAgLyogaW50ZXJuYWwgZXJyb3I6IGNvZGUgb3ZlcmZsb3cgKi8KKyAgfTsKKworc3RhdGljIGNvbnN0IGludCBlaW50MltdID0geworICAzMCwgUkVHX0VDVFlQRSwgIC8qIHVua25vd24gUE9TSVggY2xhc3MgbmFtZSAqLworICAzMiwgUkVHX0lOVkFSRywgIC8qIHRoaXMgdmVyc2lvbiBvZiBQQ1JFMiBkb2VzIG5vdCBoYXZlIFVuaWNvZGUgc3VwcG9ydCAqLworICAzNywgUkVHX0VFU0NBUEUsIC8qIFBDUkUyIGRvZXMgbm90IHN1cHBvcnQgXEwsIFxsLCBcTntuYW1lfSwgXFUsIG9yIFx1ICovCisgIDU2LCBSRUdfSU5WQVJHLCAgLyogaW50ZXJuYWwgZXJyb3I6IHVua25vd24gbmV3bGluZSBzZXR0aW5nICovCit9OworCisvKiBUYWJsZSBvZiB0ZXh0cyBjb3JyZXNwb25kaW5nIHRvIFBPU0lYIGVycm9yIGNvZGVzICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBwc3RyaW5nW10gPSB7CisgICIiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRHVtbXkgZm9yIHZhbHVlIDAgKi8KKyAgImludGVybmFsIGVycm9yIiwgICAgICAgICAgICAgICAgICAvKiBSRUdfQVNTRVJUICovCisgICJpbnZhbGlkIHJlcGVhdCBjb3VudHMgaW4ge30iLCAgICAgLyogQkFEQlIgICAgICAqLworICAicGF0dGVybiBlcnJvciIsICAgICAgICAgICAgICAgICAgIC8qIEJBRFBBVCAgICAgKi8KKyAgIj8gKiArIGludmFsaWQiLCAgICAgICAgICAgICAgICAgICAvKiBCQURSUFQgICAgICovCisgICJ1bmJhbGFuY2VkIHt9IiwgICAgICAgICAgICAgICAgICAgLyogRUJSQUNFICAgICAqLworICAidW5iYWxhbmNlZCBbXSIsICAgICAgICAgICAgICAgICAgIC8qIEVCUkFDSyAgICAgKi8KKyAgImNvbGxhdGlvbiBlcnJvciAtIG5vdCByZWxldmFudCIsICAvKiBFQ09MTEFURSAgICovCisgICJiYWQgY2xhc3MiLCAgICAgICAgICAgICAgICAgICAgICAgLyogRUNUWVBFICAgICAqLworICAiYmFkIGVzY2FwZSBzZXF1ZW5jZSIsICAgICAgICAgICAgIC8qIEVFU0NBUEUgICAgKi8KKyAgImVtcHR5IGV4cHJlc3Npb24iLCAgICAgICAgICAgICAgICAvKiBFTVBUWSAgICAgICovCisgICJ1bmJhbGFuY2VkICgpIiwgICAgICAgICAgICAgICAgICAgLyogRVBBUkVOICAgICAqLworICAiYmFkIHJhbmdlIGluc2lkZSBbXSIsICAgICAgICAgICAgIC8qIEVSQU5HRSAgICAgKi8KKyAgImV4cHJlc3Npb24gdG9vIGJpZyIsICAgICAgICAgICAgICAvKiBFU0laRSAgICAgICovCisgICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSIsICAgICAgICAgICAgLyogRVNQQUNFICAgICAqLworICAiYmFkIGJhY2sgcmVmZXJlbmNlIiwgICAgICAgICAgICAgIC8qIEVTVUJSRUcgICAgKi8KKyAgImJhZCBhcmd1bWVudCIsICAgICAgICAgICAgICAgICAgICAvKiBJTlZBUkcgICAgICovCisgICJtYXRjaCBmYWlsZWQiICAgICAgICAgICAgICAgICAgICAgLyogTk9NQVRDSCAgICAqLworfTsKKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgVHJhbnNsYXRlIGVycm9yIGNvZGUgdG8gc3RyaW5nICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitQQ1JFMlBPU0lYX0VYUF9ERUZOIHNpemVfdCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3JlZ2Vycm9yKGludCBlcnJjb2RlLCBjb25zdCByZWdleF90ICpwcmVnLCBjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZfc2l6ZSkKK3sKK2ludCB1c2VkOworY29uc3QgY2hhciAqbWVzc2FnZTsKKworbWVzc2FnZSA9IChlcnJjb2RlIDw9IDAgfHwgZXJyY29kZSA+PSAoaW50KShzaXplb2YocHN0cmluZykvc2l6ZW9mKGNoYXIgKikpKT8KKyAgInVua25vd24gZXJyb3IgY29kZSIgOiBwc3RyaW5nW2VycmNvZGVdOworCitpZiAocHJlZyAhPSBOVUxMICYmIChpbnQpcHJlZy0+cmVfZXJyb2Zmc2V0ICE9IC0xKQorICB7CisgIHVzZWQgPSBzbnByaW50ZihlcnJidWYsIGVycmJ1Zl9zaXplLCAiJXMgYXQgb2Zmc2V0ICUtNmQiLCBtZXNzYWdlLAorICAgIChpbnQpcHJlZy0+cmVfZXJyb2Zmc2V0KTsKKyAgfQorZWxzZQorICB7CisgIHVzZWQgPSBzbnByaW50ZihlcnJidWYsIGVycmJ1Zl9zaXplLCAiJXMiLCBtZXNzYWdlKTsKKyAgfQorCityZXR1cm4gdXNlZCArIDE7Cit9CisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICBGcmVlIHN0b3JlIGhlbGQgYnkgYSByZWdleCAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworUENSRTJQT1NJWF9FWFBfREVGTiB2b2lkIFBDUkUyX0NBTExfQ09OVkVOVElPTgorcmVnZnJlZShyZWdleF90ICpwcmVnKQoreworcGNyZTJfbWF0Y2hfZGF0YV9mcmVlKHByZWctPnJlX21hdGNoX2RhdGEpOworcGNyZTJfY29kZV9mcmVlKHByZWctPnJlX3BjcmUyX2NvZGUpOworfQorCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgIENvbXBpbGUgYSByZWd1bGFyIGV4cHJlc3Npb24gICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCitBcmd1bWVudHM6CisgIHByZWcgICAgICAgIHBvaW50cyB0byBhIHN0cnVjdHVyZSBmb3IgcmVjb3JkaW5nIHRoZSBjb21waWxlZCBleHByZXNzaW9uCisgIHBhdHRlcm4gICAgIHRoZSBwYXR0ZXJuIHRvIGNvbXBpbGUKKyAgY2ZsYWdzICAgICAgY29tcGlsYXRpb24gZmxhZ3MKKworUmV0dXJuczogICAgICAwIG9uIHN1Y2Nlc3MKKyAgICAgICAgICAgICAgdmFyaW91cyBub24temVybyBjb2RlcyBvbiBmYWlsdXJlCisqLworCitQQ1JFMlBPU0lYX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3JlZ2NvbXAocmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqcGF0dGVybiwgaW50IGNmbGFncykKK3sKK1BDUkUyX1NJWkUgZXJyb2Zmc2V0OworaW50IGVycm9yY29kZTsKK2ludCBvcHRpb25zID0gMDsKK2ludCByZV9uc3ViID0gMDsKKworaWYgKChjZmxhZ3MgJiBSRUdfSUNBU0UpICE9IDApICAgIG9wdGlvbnMgfD0gUENSRTJfQ0FTRUxFU1M7CitpZiAoKGNmbGFncyAmIFJFR19ORVdMSU5FKSAhPSAwKSAgb3B0aW9ucyB8PSBQQ1JFMl9NVUxUSUxJTkU7CitpZiAoKGNmbGFncyAmIFJFR19ET1RBTEwpICE9IDApICAgb3B0aW9ucyB8PSBQQ1JFMl9ET1RBTEw7CitpZiAoKGNmbGFncyAmIFJFR19OT1NVQikgIT0gMCkgICAgb3B0aW9ucyB8PSBQQ1JFMl9OT19BVVRPX0NBUFRVUkU7CitpZiAoKGNmbGFncyAmIFJFR19VVEYpICE9IDApICAgICAgb3B0aW9ucyB8PSBQQ1JFMl9VVEY7CitpZiAoKGNmbGFncyAmIFJFR19VQ1ApICE9IDApICAgICAgb3B0aW9ucyB8PSBQQ1JFMl9VQ1A7CitpZiAoKGNmbGFncyAmIFJFR19VTkdSRUVEWSkgIT0gMCkgb3B0aW9ucyB8PSBQQ1JFMl9VTkdSRUVEWTsKKworcHJlZy0+cmVfcGNyZTJfY29kZSA9IHBjcmUyX2NvbXBpbGUoKFBDUkUyX1NQVFIpcGF0dGVybiwgUENSRTJfWkVST19URVJNSU5BVEVELAorICAgb3B0aW9ucywgJmVycm9yY29kZSwgJmVycm9mZnNldCwgTlVMTCk7CitwcmVnLT5yZV9lcnJvZmZzZXQgPSBlcnJvZmZzZXQ7CisKK2lmIChwcmVnLT5yZV9wY3JlMl9jb2RlID09IE5VTEwpCisgIHsKKyAgdW5zaWduZWQgaW50IGk7CisKKyAgLyogQSBuZWdhdGl2ZSB2YWx1ZSBpcyBhIFVURiBlcnJvcjsgb3RoZXJ3aXNlIGFsbCBlcnJvciBjb2RlcyBhcmUgZ3JlYXRlcgorICB0aGFuIENPTVBJTEVfRVJST1JfQkFTRSwgYnV0IGNoZWNrLCBqdXN0IGluIGNhc2UuICovCisKKyAgaWYgKGVycm9yY29kZSA8IENPTVBJTEVfRVJST1JfQkFTRSkgcmV0dXJuIFJFR19CQURQQVQ7CisgIGVycm9yY29kZSAtPSBDT01QSUxFX0VSUk9SX0JBU0U7CisKKyAgaWYgKGVycm9yY29kZSA8IChpbnQpKHNpemVvZihlaW50MSkvc2l6ZW9mKGNvbnN0IGludCkpKQorICAgIHJldHVybiBlaW50MVtlcnJvcmNvZGVdOworICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGVpbnQyKS8oMipzaXplb2YoY29uc3QgaW50KSk7IGkgKz0gMikKKyAgICBpZiAoZXJyb3Jjb2RlID09IGVpbnQyW2ldKSByZXR1cm4gZWludDJbaSsxXTsKKyAgcmV0dXJuIFJFR19CQURQQVQ7CisgIH0KKworKHZvaWQpcGNyZTJfcGF0dGVybl9pbmZvKChjb25zdCBwY3JlMl9jb2RlICopcHJlZy0+cmVfcGNyZTJfY29kZSwKKyAgUENSRTJfSU5GT19DQVBUVVJFQ09VTlQsICZyZV9uc3ViKTsKK3ByZWctPnJlX25zdWIgPSAoc2l6ZV90KXJlX25zdWI7CitpZiAoKG9wdGlvbnMgJiBQQ1JFMl9OT19BVVRPX0NBUFRVUkUpICE9IDApIHJlX25zdWIgPSAtMTsKK3ByZWctPnJlX21hdGNoX2RhdGEgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZShyZV9uc3ViICsgMSwgTlVMTCk7CisKK2lmIChwcmVnLT5yZV9tYXRjaF9kYXRhID09IE5VTEwpCisgIHsKKyAgcGNyZTJfY29kZV9mcmVlKHByZWctPnJlX3BjcmUyX2NvZGUpOworICByZXR1cm4gUkVHX0VTUEFDRTsKKyAgfQorCityZXR1cm4gMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICBNYXRjaCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQSBzdWl0YWJsZSBtYXRjaF9kYXRhIGJsb2NrLCBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgcG9zc2libGUgY2FwdHVyZXMsIHdhcworb2J0YWluZWQgd2hlbiB0aGUgcGF0dGVybiB3YXMgY29tcGlsZWQsIHRvIHNhdmUgaGF2aW5nIHRvIGFsbG9jYXRlIGFuZCBmcmVlIGl0Citmb3IgZWFjaCBtYXRjaC4gSWYgUkVHX05PU1VCIHdhcyBzcGVjaWZpZWQgYXQgY29tcGlsZSB0aW1lLCB0aGUKK1BDUkVfTk9fQVVUT19DQVBUVVJFIGZsYWcgd2lsbCBiZSBzZXQuIFdoZW4gdGhpcyBpcyB0aGUgY2FzZSwgdGhlIG5tYXRjaCBhbmQKK3BtYXRjaCBhcmd1bWVudHMgYXJlIGlnbm9yZWQsIGFuZCB0aGUgb25seSByZXN1bHQgaXMgeWVzL25vL2Vycm9yLiAqLworCitQQ1JFMlBPU0lYX0VYUF9ERUZOIGludCBQQ1JFMl9DQUxMX0NPTlZFTlRJT04KK3JlZ2V4ZWMoY29uc3QgcmVnZXhfdCAqcHJlZywgY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3Qgbm1hdGNoLAorICByZWdtYXRjaF90IHBtYXRjaFtdLCBpbnQgZWZsYWdzKQoreworaW50IHJjLCBzbywgZW87CitpbnQgb3B0aW9ucyA9IDA7CitwY3JlMl9tYXRjaF9kYXRhICptZCA9IChwY3JlMl9tYXRjaF9kYXRhICopcHJlZy0+cmVfbWF0Y2hfZGF0YTsKKworaWYgKChlZmxhZ3MgJiBSRUdfTk9UQk9MKSAhPSAwKSBvcHRpb25zIHw9IFBDUkUyX05PVEJPTDsKK2lmICgoZWZsYWdzICYgUkVHX05PVEVPTCkgIT0gMCkgb3B0aW9ucyB8PSBQQ1JFMl9OT1RFT0w7CitpZiAoKGVmbGFncyAmIFJFR19OT1RFTVBUWSkgIT0gMCkgb3B0aW9ucyB8PSBQQ1JFMl9OT1RFTVBUWTsKKworKChyZWdleF90ICopcHJlZyktPnJlX2Vycm9mZnNldCA9IChzaXplX3QpKC0xKTsgIC8qIE9ubHkgaGFzIG1lYW5pbmcgYWZ0ZXIgY29tcGlsZSAqLworCisvKiBXaGVuIG5vIHN0cmluZyBkYXRhIGlzIGJlaW5nIHJldHVybmVkLCBvciBubyB2ZWN0b3IgaGFzIGJlZW4gcGFzc2VkIGluIHdoaWNoCit0byBwdXQgaXQsIGVuc3VyZSB0aGF0IG5tYXRjaCBpcyB6ZXJvLiAqLworCitpZiAoKCgocGNyZTJfcmVhbF9jb2RlICopKHByZWctPnJlX3BjcmUyX2NvZGUpKS0+Y29tcGlsZV9vcHRpb25zICYKKyAgUENSRTJfTk9fQVVUT19DQVBUVVJFKSAhPSAwIHx8IHBtYXRjaCA9PSBOVUxMKSBubWF0Y2ggPSAwOworCisvKiBSRUdfU1RBUlRFTkQgaXMgYSBCU0QgZXh0ZW5zaW9uLCB0byBhbGxvdyBmb3Igbm9uLU5VTC10ZXJtaW5hdGVkIHN0cmluZ3MuCitUaGUgbWFuIHBhZ2UgZnJvbSBPUyBYIHNheXMgIlJFR19TVEFSVEVORCBhZmZlY3RzIG9ubHkgdGhlIGxvY2F0aW9uIG9mIHRoZQorc3RyaW5nLCBub3QgaG93IGl0IGlzIG1hdGNoZWQiLiBUaGF0IGlzIHdoeSB0aGUgInNvIiB2YWx1ZSBpcyB1c2VkIHRvIGJ1bXAgdGhlCitzdGFydCBsb2NhdGlvbiByYXRoZXIgdGhhbiBiZWluZyBwYXNzZWQgYXMgYSBQQ1JFMiAic3RhcnRpbmcgb2Zmc2V0Ii4gKi8KKworaWYgKChlZmxhZ3MgJiBSRUdfU1RBUlRFTkQpICE9IDApCisgIHsKKyAgaWYgKHBtYXRjaCA9PSBOVUxMKSByZXR1cm4gUkVHX0lOVkFSRzsKKyAgc28gPSBwbWF0Y2hbMF0ucm1fc287CisgIGVvID0gcG1hdGNoWzBdLnJtX2VvOworICB9CitlbHNlCisgIHsKKyAgc28gPSAwOworICBlbyA9IChpbnQpc3RybGVuKHN0cmluZyk7CisgIH0KKworcmMgPSBwY3JlMl9tYXRjaCgoY29uc3QgcGNyZTJfY29kZSAqKXByZWctPnJlX3BjcmUyX2NvZGUsCisgIChQQ1JFMl9TUFRSKXN0cmluZyArIHNvLCAoZW8gLSBzbyksIDAsIG9wdGlvbnMsIG1kLCBOVUxMKTsKKworLyogU3VjY2Vzc2Z1bCBtYXRjaCAqLworCitpZiAocmMgPj0gMCkKKyAgeworICBzaXplX3QgaTsKKyAgaWYgKChzaXplX3QpcmMgPiBubWF0Y2gpIHJjID0gKGludClubWF0Y2g7CisgIGZvciAoaSA9IDA7IGkgPCAoc2l6ZV90KXJjOyBpKyspCisgICAgeworICAgIHBtYXRjaFtpXS5ybV9zbyA9IG1kLT5vdmVjdG9yW2kqMl07CisgICAgcG1hdGNoW2ldLnJtX2VvID0gbWQtPm92ZWN0b3JbaSoyKzFdOworICAgIH0KKyAgZm9yICg7IGkgPCBubWF0Y2g7IGkrKykgcG1hdGNoW2ldLnJtX3NvID0gcG1hdGNoW2ldLnJtX2VvID0gLTE7CisgIHJldHVybiAwOworICB9CisKKy8qIFVuc3VjY2Vzc2Z1bCBtYXRjaCAqLworCitpZiAocmMgPD0gUENSRTJfRVJST1JfVVRGOF9FUlIxICYmIHJjID49IFBDUkUyX0VSUk9SX1VURjhfRVJSMjEpCisgIHJldHVybiBSRUdfSU5WQVJHOworCitzd2l0Y2gocmMpCisgIHsKKyAgZGVmYXVsdDogcmV0dXJuIFJFR19BU1NFUlQ7CisgIGNhc2UgUENSRTJfRVJST1JfQkFETU9ERTogcmV0dXJuIFJFR19JTlZBUkc7CisgIGNhc2UgUENSRTJfRVJST1JfQkFETUFHSUM6IHJldHVybiBSRUdfSU5WQVJHOworICBjYXNlIFBDUkUyX0VSUk9SX0JBRE9QVElPTjogcmV0dXJuIFJFR19JTlZBUkc7CisgIGNhc2UgUENSRTJfRVJST1JfQkFEVVRGT0ZGU0VUOiByZXR1cm4gUkVHX0lOVkFSRzsKKyAgY2FzZSBQQ1JFMl9FUlJPUl9NQVRDSExJTUlUOiByZXR1cm4gUkVHX0VTUEFDRTsKKyAgY2FzZSBQQ1JFMl9FUlJPUl9OT01BVENIOiByZXR1cm4gUkVHX05PTUFUQ0g7CisgIGNhc2UgUENSRTJfRVJST1JfTk9NRU1PUlk6IHJldHVybiBSRUdfRVNQQUNFOworICBjYXNlIFBDUkUyX0VSUk9SX05VTEw6IHJldHVybiBSRUdfSU5WQVJHOworICB9Cit9CisKKy8qIEVuZCBvZiBwY3JlMnBvc2l4LmMgKi8KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9wY3JlMnBvc2l4LmggYi9kaXN0Mi9zcmMvcGNyZTJwb3NpeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YTJmZDgKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvcGNyZTJwb3NpeC5oCkBAIC0wLDAgKzEsMTQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgIFBlcmwtQ29tcGF0aWJsZSBSZWd1bGFyIEV4cHJlc3Npb25zICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFBDUkUyIGlzIGEgbGlicmFyeSBvZiBmdW5jdGlvbnMgdG8gc3VwcG9ydCByZWd1bGFyIGV4cHJlc3Npb25zIHdob3NlIHN5bnRheAorYW5kIHNlbWFudGljcyBhcmUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGhvc2Ugb2YgdGhlIFBlcmwgNSBsYW5ndWFnZS4KKworICAgICAgICAgICAgICAgICAgICAgICBXcml0dGVuIGJ5IFBoaWxpcCBIYXplbAorICAgICBPcmlnaW5hbCBBUEkgY29kZSBDb3B5cmlnaHQgKGMpIDE5OTctMjAxMiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorICAgICAgICAgTmV3IEFQSSBjb2RlIENvcHlyaWdodCAoYykgMjAxNiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisKKy8qIEhhdmUgdG8gaW5jbHVkZSBzdGRsaWIuaCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBzaXplX3QgaXMgZGVmaW5lZC4gKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBBbGxvdyBmb3IgQysrIHVzZXJzICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogT3B0aW9ucywgbW9zdGx5IGRlZmluZWQgYnkgUE9TSVgsIGJ1dCB3aXRoIHNvbWUgZXh0cmFzLiAqLworCisjZGVmaW5lIFJFR19JQ0FTRSAgICAgMHgwMDAxICAvKiBNYXBzIHRvIFBDUkUyX0NBU0VMRVNTICovCisjZGVmaW5lIFJFR19ORVdMSU5FICAgMHgwMDAyICAvKiBNYXBzIHRvIFBDUkUyX01VTFRJTElORSAqLworI2RlZmluZSBSRUdfTk9UQk9MICAgIDB4MDAwNCAgLyogTWFwcyB0byBQQ1JFMl9OT1RCT0wgKi8KKyNkZWZpbmUgUkVHX05PVEVPTCAgICAweDAwMDggIC8qIE1hcHMgdG8gUENSRTJfTk9URU9MICovCisjZGVmaW5lIFJFR19ET1RBTEwgICAgMHgwMDEwICAvKiBOT1QgZGVmaW5lZCBieSBQT1NJWDsgbWFwcyB0byBQQ1JFMl9ET1RBTEwgKi8KKyNkZWZpbmUgUkVHX05PU1VCICAgICAweDAwMjAgIC8qIE1hcHMgdG8gUENSRTJfTk9fQVVUT19DQVBUVVJFICovCisjZGVmaW5lIFJFR19VVEYgICAgICAgMHgwMDQwICAvKiBOT1QgZGVmaW5lZCBieSBQT1NJWDsgbWFwcyB0byBQQ1JFMl9VVEYgKi8KKyNkZWZpbmUgUkVHX1NUQVJURU5EICAweDAwODAgIC8qIEJTRCBmZWF0dXJlOiBwYXNzIHN1YmplY3Qgc3RyaW5nIGJ5IHNvLGVvICovCisjZGVmaW5lIFJFR19OT1RFTVBUWSAgMHgwMTAwICAvKiBOT1QgZGVmaW5lZCBieSBQT1NJWDsgbWFwcyB0byBQQ1JFMl9OT1RFTVBUWSAqLworI2RlZmluZSBSRUdfVU5HUkVFRFkgIDB4MDIwMCAgLyogTk9UIGRlZmluZWQgYnkgUE9TSVg7IG1hcHMgdG8gUENSRTJfVU5HUkVFRFkgKi8KKyNkZWZpbmUgUkVHX1VDUCAgICAgICAweDA0MDAgIC8qIE5PVCBkZWZpbmVkIGJ5IFBPU0lYOyBtYXBzIHRvIFBDUkUyX1VDUCAqLworCisvKiBUaGlzIGlzIG5vdCB1c2VkIGJ5IFBDUkUyLCBidXQgYnkgZGVmaW5pbmcgaXQgd2UgbWFrZSBpdCBlYXNpZXIKK3RvIHNsb3QgUENSRTIgaW50byBleGlzdGluZyBwcm9ncmFtcyB0aGF0IG1ha2UgUE9TSVggY2FsbHMuICovCisKKyNkZWZpbmUgUkVHX0VYVEVOREVEICAwCisKKy8qIEVycm9yIHZhbHVlcy4gTm90IGFsbCB0aGVzZSBhcmUgcmVsZXZhbnQgb3IgdXNlZCBieSB0aGUgd3JhcHBlci4gKi8KKworZW51bSB7CisgIFJFR19BU1NFUlQgPSAxLCAgLyogaW50ZXJuYWwgZXJyb3IgPyAqLworICBSRUdfQkFEQlIsICAgICAgIC8qIGludmFsaWQgcmVwZWF0IGNvdW50cyBpbiB7fSAqLworICBSRUdfQkFEUEFULCAgICAgIC8qIHBhdHRlcm4gZXJyb3IgKi8KKyAgUkVHX0JBRFJQVCwgICAgICAvKiA/ICogKyBpbnZhbGlkICovCisgIFJFR19FQlJBQ0UsICAgICAgLyogdW5iYWxhbmNlZCB7fSAqLworICBSRUdfRUJSQUNLLCAgICAgIC8qIHVuYmFsYW5jZWQgW10gKi8KKyAgUkVHX0VDT0xMQVRFLCAgICAvKiBjb2xsYXRpb24gZXJyb3IgLSBub3QgcmVsZXZhbnQgKi8KKyAgUkVHX0VDVFlQRSwgICAgICAvKiBiYWQgY2xhc3MgKi8KKyAgUkVHX0VFU0NBUEUsICAgICAvKiBiYWQgZXNjYXBlIHNlcXVlbmNlICovCisgIFJFR19FTVBUWSwgICAgICAgLyogZW1wdHkgZXhwcmVzc2lvbiAqLworICBSRUdfRVBBUkVOLCAgICAgIC8qIHVuYmFsYW5jZWQgKCkgKi8KKyAgUkVHX0VSQU5HRSwgICAgICAvKiBiYWQgcmFuZ2UgaW5zaWRlIFtdICovCisgIFJFR19FU0laRSwgICAgICAgLyogZXhwcmVzc2lvbiB0b28gYmlnICovCisgIFJFR19FU1BBQ0UsICAgICAgLyogZmFpbGVkIHRvIGdldCBtZW1vcnkgKi8KKyAgUkVHX0VTVUJSRUcsICAgICAvKiBiYWQgYmFjayByZWZlcmVuY2UgKi8KKyAgUkVHX0lOVkFSRywgICAgICAvKiBiYWQgYXJndW1lbnQgKi8KKyAgUkVHX05PTUFUQ0ggICAgICAvKiBtYXRjaCBmYWlsZWQgKi8KK307CisKKworLyogVGhlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSBjb21waWxlZCByZWd1bGFyIGV4cHJlc3Npb24uICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgdm9pZCAqcmVfcGNyZTJfY29kZTsKKyAgdm9pZCAqcmVfbWF0Y2hfZGF0YTsKKyAgc2l6ZV90IHJlX25zdWI7CisgIHNpemVfdCByZV9lcnJvZmZzZXQ7Cit9IHJlZ2V4X3Q7CisKKy8qIFRoZSBzdHJ1Y3R1cmUgaW4gd2hpY2ggYSBjYXB0dXJlZCBvZmZzZXQgaXMgcmV0dXJuZWQuICovCisKK3R5cGVkZWYgaW50IHJlZ29mZl90OworCit0eXBlZGVmIHN0cnVjdCB7CisgIHJlZ29mZl90IHJtX3NvOworICByZWdvZmZfdCBybV9lbzsKK30gcmVnbWF0Y2hfdDsKKworLyogV2hlbiBhbiBhcHBsaWNhdGlvbiBsaW5rcyB0byBhIFBDUkUyIERMTCBpbiBXaW5kb3dzLCB0aGUgc3ltYm9scyB0aGF0IGFyZQoraW1wb3J0ZWQgaGF2ZSB0byBiZSBpZGVudGlmaWVkIGFzIHN1Y2guIFdoZW4gYnVpbGRpbmcgUENSRTIsIHRoZSBhcHByb3ByaWF0ZQorZXhwb3J0IHNldHRpbmdzIGFyZSBuZWVkZWQsIGFuZCBhcmUgc2V0IGluIHBjcmUycG9zaXguYyBiZWZvcmUgaW5jbHVkaW5nIHRoaXMKK2ZpbGUuICovCisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoUENSRTJfU1RBVElDKSAmJiAhZGVmaW5lZChQQ1JFMlBPU0lYX0VYUF9ERUNMKQorIyAgZGVmaW5lIFBDUkUyUE9TSVhfRVhQX0RFQ0wgIGV4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyMgIGRlZmluZSBQQ1JFMlBPU0lYX0VYUF9ERUZOICBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbmRpZgorCisvKiBCeSBkZWZhdWx0LCB3ZSB1c2UgdGhlIHN0YW5kYXJkICJleHRlcm4iIGRlY2xhcmF0aW9ucy4gKi8KKworI2lmbmRlZiBQQ1JFMlBPU0lYX0VYUF9ERUNMCisjICBpZmRlZiBfX2NwbHVzcGx1cworIyAgICBkZWZpbmUgUENSRTJQT1NJWF9FWFBfREVDTCAgZXh0ZXJuICJDIgorIyAgICBkZWZpbmUgUENSRTJQT1NJWF9FWFBfREVGTiAgZXh0ZXJuICJDIgorIyAgZWxzZQorIyAgICBkZWZpbmUgUENSRTJQT1NJWF9FWFBfREVDTCAgZXh0ZXJuCisjICAgIGRlZmluZSBQQ1JFMlBPU0lYX0VYUF9ERUZOICBleHRlcm4KKyMgIGVuZGlmCisjZW5kaWYKKworLyogVGhlIGZ1bmN0aW9ucyAqLworCitQQ1JFMlBPU0lYX0VYUF9ERUNMIGludCByZWdjb21wKHJlZ2V4X3QgKiwgY29uc3QgY2hhciAqLCBpbnQpOworUENSRTJQT1NJWF9FWFBfREVDTCBpbnQgcmVnZXhlYyhjb25zdCByZWdleF90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgcmVnbWF0Y2hfdCAqLCBpbnQpOworUENSRTJQT1NJWF9FWFBfREVDTCBzaXplX3QgcmVnZXJyb3IoaW50LCBjb25zdCByZWdleF90ICosIGNoYXIgKiwgc2l6ZV90KTsKK1BDUkUyUE9TSVhfRVhQX0RFQ0wgdm9pZCByZWdmcmVlKHJlZ2V4X3QgKik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAgIC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisvKiBFbmQgb2YgcGNyZTJwb3NpeC5oICovCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvcGNyZTJ0ZXN0LmMgYi9kaXN0Mi9zcmMvcGNyZTJ0ZXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ODc5ZQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9wY3JlMnRlc3QuYwpAQCAtMCwwICsxLDc0MjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgIFBDUkUyIHRlc3RpbmcgcHJvZ3JhbSAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUENSRTIgaXMgYSBsaWJyYXJ5IG9mIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgd2hvc2Ugc3ludGF4CithbmQgc2VtYW50aWNzIGFyZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0aG9zZSBvZiB0aGUgUGVybCA1IGxhbmd1YWdlLiBJbiAyMDE0Cit0aGUgQVBJIHdhcyBjb21wbGV0ZWx5IHJldmlzZWQgYW5kICcyJyB3YXMgYWRkZWQgdG8gdGhlIG5hbWUsIGJlY2F1c2UgdGhlIG9sZAorQVBJLCB3aGljaCBoYWQgbGFzdGVkIGZvciAxNiB5ZWFycywgY291bGQgbm90IGFjY29tbW9kYXRlIG5ldyByZXF1aXJlbWVudHMuIEF0Cit0aGUgc2FtZSB0aW1lLCB0aGlzIHRlc3RpbmcgcHJvZ3JhbSB3YXMgcmUtZGVzaWduZWQgYmVjYXVzZSBpdHMgb3JpZ2luYWwKK2hhY2tlZC11cCAobm9uLSkgZGVzaWduIGhhZCBhbHNvIHJ1biBvdXQgb2Ygc3RlYW0uCisKKyAgICAgICAgICAgICAgICAgICAgICAgV3JpdHRlbiBieSBQaGlsaXAgSGF6ZWwKKyAgICAgT3JpZ2luYWwgY29kZSBDb3B5cmlnaHQgKGMpIDE5OTctMjAxMiBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorICAgICAgICAgUmV3cml0dGVuIGNvZGUgQ29weXJpZ2h0IChjKSAyMDE2IFVuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworLyogVGhpcyBwcm9ncmFtIHN1cHBvcnRzIHRlc3Rpbmcgb2YgdGhlIDgtYml0LCAxNi1iaXQsIGFuZCAzMi1iaXQgUENSRTIKK2xpYnJhcmllcyBpbiBhIHNpbmdsZSBwcm9ncmFtLCB0aG91Z2ggaXRzIGlucHV0IGFuZCBvdXRwdXQgYXJlIGFsd2F5cyA4LWJpdC4KK0l0IGlzIGRpZmZlcmVudCBmcm9tIG1vZHVsZXMgc3VjaCBhcyBwY3JlMl9jb21waWxlLmMgaW4gdGhlIGxpYnJhcnkgaXRzZWxmLAord2hpY2ggYXJlIGNvbXBpbGVkIHNlcGFyYXRlbHkgZm9yIGVhY2ggY29kZSB1bml0IHdpZHRoLiBJZiB0d28gd2lkdGhzIGFyZQorZW5hYmxlZCwgZm9yIGV4YW1wbGUsIHBjcmUyX2NvbXBpbGUuYyBpcyBjb21waWxlZCB0d2ljZS4gSW4gY29udHJhc3QsCitwY3JlMnRlc3QuYyBpcyBjb21waWxlZCBvbmx5IG9uY2UsIGFuZCBsaW5rZWQgd2l0aCBhbGwgdGhlIGVuYWJsZWQgbGlicmFyaWVzLgorVGhlcmVmb3JlLCBpdCBtdXN0IG5vdCBtYWtlIHVzZSBvZiBhbnkgb2YgdGhlIG1hY3JvcyBmcm9tIHBjcmUyLmggb3IKK3BjcmUyX2ludGVybmFsLmggdGhhdCBkZXBlbmQgb24gUENSRTJfQ09ERV9VTklUX1dJRFRILiBJdCBkb2VzLCBob3dldmVyLCBtYWtlCit1c2Ugb2YgU1VQUE9SVF9QQ1JFMl84LCBTVVBQT1JUX1BDUkUyXzE2LCBhbmQgU1VQUE9SVF9QQ1JFMl8zMiwgdG8gZW5zdXJlIHRoYXQKK2l0IHJlZmVyZW5jZXMgb25seSB0aGUgZW5hYmxlZCBsaWJyYXJ5IGZ1bmN0aW9ucy4gKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxsb2NhbGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgZGVmaW5lZCBOQVRJVkVfWk9TCisjaW5jbHVkZSAicGNyem9zY3MuaCIKKy8qIFRoYXQgaGVhZGVyIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgbWFpbiBQQ1JFMiBkaXN0cmlidXRpb24gYmVjYXVzZSBvdGhlcgorYXBwYXJhdHVzIGlzIG5lZWRlZCB0byBjb21waWxlIHBjcmUydGVzdCBmb3Igei9PUy4gVGhlIGhlYWRlciBjYW4gYmUgZm91bmQgaW4KK3RoZSBzcGVjaWFsIHovT1MgZGlzdHJpYnV0aW9uLCB3aGljaCBpcyBhdmFpbGFibGUgZnJvbSB3d3cuemFjb25zdWx0YW50cy5uZXQgb3IKK2Zyb20gd3d3LmNidHRhcGUub3JnLiAqLworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworLyogQm90aCBsaWJyZWFkbGluZSBhbmQgbGliZWRpdCBhcmUgb3B0aW9uYWxseSBzdXBwb3J0ZWQuIFRoZSB1c2VyLXN1cHBsaWVkCitvcmlnaW5hbCBwYXRjaCB1c2VzIHJlYWRsaW5lL3JlYWRsaW5lLmggZm9yIGxpYmVkaXQsIGJ1dCBpbiBhdCBsZWFzdCBvbmUgc3lzdGVtCitpdCBpcyBpbnN0YWxsZWQgYXMgZWRpdGxpbmUvcmVhZGxpbmUuaCwgc28gdGhlIGNvbmZpZ3VyYXRpb24gY29kZSBub3cgbG9va3MgZm9yCit0aGF0IGZpcnN0LCBmYWxsaW5nIGJhY2sgdG8gcmVhZGxpbmUvcmVhZGxpbmUuaC4gKi8KKworI2lmIGRlZmluZWQoU1VQUE9SVF9MSUJSRUFETElORSkgfHwgZGVmaW5lZChTVVBQT1JUX0xJQkVESVQpCisjaWYgZGVmaW5lZChTVVBQT1JUX0xJQlJFQURMSU5FKQorI2luY2x1ZGUgPHJlYWRsaW5lL3JlYWRsaW5lLmg+CisjaW5jbHVkZSA8cmVhZGxpbmUvaGlzdG9yeS5oPgorI2Vsc2UKKyNpZiBkZWZpbmVkKEhBVkVfRURJVExJTkVfUkVBRExJTkVfSCkKKyNpbmNsdWRlIDxlZGl0bGluZS9yZWFkbGluZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxyZWFkbGluZS9yZWFkbGluZS5oPgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisvKiBQdXQgdGhlIHRlc3QgZm9yIGludGVyYWN0aXZlIGlucHV0IGludG8gYSBtYWNybyBzbyB0aGF0IGl0IGNhbiBiZSBjaGFuZ2VkIGlmCityZXF1aXJlZCBmb3IgZGlmZmVyZW50IGVudmlyb25tZW50cy4gKi8KKworI2RlZmluZSBJTlRFUkFDVElWRShmKSBpc2F0dHkoZmlsZW5vKGYpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3lzdGVtLXNwZWNpZmljIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQSBudW1iZXIgb2YgdGhpbmdzIHZhcnkgZm9yIFdpbmRvd3MgYnVpbGRzLiBPcmlnaW5hbGx5LCBwY3JldGVzdCBvcGVuZWQgaXRzCitpbnB1dCBhbmQgb3V0cHV0IHdpdGhvdXQgImIiOyB0aGVuIEkgd2FzIHRvbGQgdGhhdCAiYiIgd2FzIG5lZWRlZCBpbiBzb21lCitlbnZpcm9ubWVudHMsIHNvIGl0IHdhcyBhZGRlZCBmb3IgcmVsZWFzZSA1LjAgdG8gYm90aCB0aGUgaW5wdXQgYW5kIG91dHB1dC4gKEl0CittYWtlcyBubyBkaWZmZXJlbmNlIG9uIFVuaXgtbGlrZSBzeXN0ZW1zLikgTGF0ZXIgSSB3YXMgdG9sZCB0aGF0IGl0IGlzIHdyb25nCitmb3IgdGhlIGlucHV0IG9uIFdpbmRvd3MuIEkndmUgbm93IGFic3RyYWN0ZWQgdGhlIG1vZGVzIGludG8gbWFjcm9zIHRoYXQgYXJlCitzZXQgaGVyZSwgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZmlkZGxlIHdpdGggdGhlbSwgYW5kIHJlbW92ZWQgImIiIGZyb20gdGhlIGlucHV0Cittb2RlIHVuZGVyIFdpbmRvd3MuIFRoZSBCSU5BUlkgdmVyc2lvbnMgYXJlIHVzZWQgd2hlbiBzYXZpbmcvcmVzdG9yaW5nIGNvbXBpbGVkCitwYXR0ZXJucy4gKi8KKworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKFdJTjMyKQorI2luY2x1ZGUgPGlvLmg+ICAgICAgICAgICAgICAgIC8qIEZvciBfc2V0bW9kZSgpICovCisjaW5jbHVkZSA8ZmNudGwuaD4gICAgICAgICAgICAgLyogRm9yIF9PX0JJTkFSWSAqLworI2RlZmluZSBJTlBVVF9NT0RFICAgICAgICAgICJyIgorI2RlZmluZSBPVVRQVVRfTU9ERSAgICAgICAgICJ3YiIKKyNkZWZpbmUgQklOQVJZX0lOUFVUX01PREUgICAicmIiCisjZGVmaW5lIEJJTkFSWV9PVVRQVVRfTU9ERSAgIndiIgorCisjaWZuZGVmIGlzYXR0eQorI2RlZmluZSBpc2F0dHkgX2lzYXR0eSAgICAgICAgIC8qIFRoaXMgaXMgd2hhdCBXaW5kb3dzIGNhbGxzIHRoZW0sIEknbSB0b2xkLCAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRob3VnaCBpbiBzb21lIGVudmlyb25tZW50cyB0aGV5IHNlZW0gdG8gICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJlIGFscmVhZHkgZGVmaW5lZCwgaGVuY2UgdGhlICNpZm5kZWZzLiAgICAqLworI2lmbmRlZiBmaWxlbm8KKyNkZWZpbmUgZmlsZW5vIF9maWxlbm8KKyNlbmRpZgorCisvKiBBIHVzZXIgc2VudCB0aGlzIGZpeCBmb3IgQm9ybGFuZCBCdWlsZGVyIDUgdW5kZXIgV2luZG93cy4gKi8KKworI2lmZGVmIF9fQk9STEFORENfXworI2RlZmluZSBfc2V0bW9kZShoYW5kbGUsIG1vZGUpIHNldG1vZGUoaGFuZGxlLCBtb2RlKQorI2VuZGlmCisKKy8qIE5vdCBXaW5kb3dzICovCisKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4gICAgICAgICAgLyogVGhlc2UgdHdvIGluY2x1ZGVzIGFyZSBuZWVkZWQgKi8KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4gICAgICAvKiBmb3Igc2V0cmxpbWl0KCkuICovCisjaWYgZGVmaW5lZCBOQVRJVkVfWk9TICAgICAgICAgLyogei9PUyB1c2VzIG5vbi1iaW5hcnkgSS9PICovCisjZGVmaW5lIElOUFVUX01PREUgICAiciIKKyNkZWZpbmUgT1VUUFVUX01PREUgICJ3IgorI2RlZmluZSBCSU5BUllfSU5QVVRfTU9ERSAgICJyYiIKKyNkZWZpbmUgQklOQVJZX09VVFBVVF9NT0RFICAid2IiCisjZWxzZQorI2RlZmluZSBJTlBVVF9NT0RFICAgICAgICAgICJyYiIKKyNkZWZpbmUgT1VUUFVUX01PREUgICAgICAgICAid2IiCisjZGVmaW5lIEJJTkFSWV9JTlBVVF9NT0RFICAgInJiIgorI2RlZmluZSBCSU5BUllfT1VUUFVUX01PREUgICJ3YiIKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX1ZNUworI2luY2x1ZGUgPHNzZGVmLmg+Cit2b2lkIHZtc19zZXRzeW1ib2woIGNoYXIgKiwgY2hhciAqLCBpbnQgKTsKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS1FbmQgb2Ygc3lzdGVtLXNwZWNpZmljIGRlZmluaXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEdsdWVpbmcgbWFjcm9zIHRoYXQgYXJlIHVzZWQgaW4gc2V2ZXJhbCBwbGFjZXMgYmVsb3cuICovCisKKyNkZWZpbmUgZ2x1ZShhLGIpIGEjI2IKKyNkZWZpbmUgRyhhLGIpIGdsdWUoYSxiKQorCisvKiBNaXNjZWxsYW5lb3VzIHBhcmFtZXRlcnMgYW5kIG1hbmlmZXN0cyAqLworCisjaWZuZGVmIENMT0NLU19QRVJfU0VDCisjaWZkZWYgQ0xLX1RDSworI2RlZmluZSBDTE9DS1NfUEVSX1NFQyBDTEtfVENLCisjZWxzZQorI2RlZmluZSBDTE9DS1NfUEVSX1NFQyAxMDAKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZBSUxfVU5TRVQgVUlOVDMyX01BWCAgLyogVW5zZXQgdmFsdWUgZm9yIGNmYWlsIGZpZWxkcyAqLworI2RlZmluZSBERkFfV1NfRElNRU5TSU9OIDEwMDAgICAvKiBTaXplIG9mIERGQSB3b3Jrc3BhY2UgKi8KKyNkZWZpbmUgREVGQVVMVF9PVkVDQ09VTlQgMTUgICAgLyogRGVmYXVsdCBvdmVjdG9yIGNvdW50ICovCisjZGVmaW5lIEpVTktfT0ZGU0VUIDB4ZGVhZGJlZWYgIC8qIEZvciBpbml0aWFsaXppbmcgb3ZlY3RvciAqLworI2RlZmluZSBMT0NBTEVTSVpFIDMyICAgICAgICAgICAvKiBTaXplIG9mIGxvY2FsZSBuYW1lICovCisjZGVmaW5lIExPT1BSRVBFQVQgNTAwMDAwICAgICAgIC8qIERlZmF1bHQgbG9vcCBjb3VudCBmb3IgdGltaW5nICovCisjZGVmaW5lIFBBVFNUQUNLU0laRSAyMCAgICAgICAgIC8qIFBhdHRlcm4gc3RhY2sgZm9yIHNhdmUvcmVzdG9yZSB0ZXN0aW5nICovCisjZGVmaW5lIFJFUExBQ0VfTU9EU0laRSAxMDAgICAgIC8qIEZpZWxkIGZvciByZWFkaW5nIDgtYml0IHJlcGxhY2VtZW50ICovCisjZGVmaW5lIFZFUlNJT05fU0laRSA2NCAgICAgICAgIC8qIFNpemUgb2YgYnVmZmVyIGZvciB0aGUgdmVyc2lvbiBzdHJpbmdzICovCisKKy8qIE1ha2Ugc3VyZSB0aGUgYnVmZmVyIGludG8gd2hpY2ggcmVwbGFjZW1lbnQgc3RyaW5ncyBhcmUgY29waWVkIGlzIGJpZyBlbm91Z2gKK3RvIGhvbGQgdGhlbSBhcyAzMi1iaXQgY29kZSB1bml0cy4gKi8KKworI2RlZmluZSBSRVBMQUNFX0JVRkZTSVpFIDEwMjQgICAvKiBUaGlzIGlzIGEgYnl0ZSB2YWx1ZSAqLworCisvKiBFeGVjdXRpb24gbW9kZXMgKi8KKworI2RlZmluZSBQQ1JFOF9NT0RFICAgOAorI2RlZmluZSBQQ1JFMTZfTU9ERSAxNgorI2RlZmluZSBQQ1JFMzJfTU9ERSAzMgorCisvKiBQcm9jZXNzaW5nIHJldHVybnMgKi8KKworZW51bSB7IFBSX09LLCBQUl9TS0lQLCBQUl9BQkVORCB9OworCisvKiBUaGUgbWFjcm8gUFJJTlRBQkxFIGRldGVybWluZXMgd2hldGhlciB0byBwcmludCBhbiBvdXRwdXQgY2hhcmFjdGVyIGFzLWlzIG9yCithcyBhIGhleCB2YWx1ZSB3aGVuIHNob3dpbmcgY29tcGlsZWQgcGF0dGVybnMuIGlzIFdlIHVzZSBpdCBpbiBjYXNlcyB3aGVuIHRoZQorbG9jYWxlIGhhcyBub3QgYmVlbiBleHBsaWNpdGx5IGNoYW5nZWQsIHNvIGFzIHRvIGdldCBjb25zaXN0ZW50IG91dHB1dCBmcm9tCitzeXN0ZW1zIHRoYXQgZGlmZmVyIGluIHRoZWlyIG91dHB1dCBmcm9tIGlzcHJpbnQoKSBldmVuIGluIHRoZSAiQyIgbG9jYWxlLiAqLworCisjaWZkZWYgRUJDRElDCisjZGVmaW5lIFBSSU5UQUJMRShjKSAoKGMpID49IDY0ICYmIChjKSA8IDI1NSkKKyNlbHNlCisjZGVmaW5lIFBSSU5UQUJMRShjKSAoKGMpID49IDMyICYmIChjKSA8IDEyNykKKyNlbmRpZgorCisjZGVmaW5lIFBSSU5UT0soYykgKChsb2NhbGVfdGFibGVzICE9IE5VTEwpPyBpc3ByaW50KGMpIDogUFJJTlRBQkxFKGMpKQorCisvKiBXZSBoYXZlIHRvIGluY2x1ZGUgc29tZSBvZiB0aGUgbGlicmFyeSBzb3VyY2UgZmlsZXMgYmVjYXVzZSB3ZSBuZWVkCit0byB1c2Ugc29tZSBvZiB0aGUgbWFjcm9zLCBpbnRlcm5hbCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMsIGFuZCBvdGhlciBpbnRlcm5hbAordmFsdWVzIC0gcGNyZTJ0ZXN0IGhhcyAiaW5zaWRlIGluZm9ybWF0aW9uIiBjb21wYXJlZCB0byBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtCit0aGF0IHN0cmljdGx5IGZvbGxvd3MgdGhlIFBDUkUyIEFQSS4KKworQmVmb3JlIGluY2x1ZGluZyBwY3JlMl9pbnRlcm5hbC5oIHdlIGRlZmluZSBQUklWIHNvIHRoYXQgaXQgZG9lcyBub3QgZ2V0CitkZWZpbmVkIHRoZXJlaW4uIFRoaXMgZW5zdXJlcyB0aGF0IFBSSVYgbmFtZXMgaW4gdGhlIGluY2x1ZGVkIGZpbGVzIGRvIG5vdAorY2xhc2ggd2l0aCB0aG9zZSBpbiB0aGUgbGlicmFyaWVzLiBBbHNvLCBhbHRob3VnaCBwY3JlMl9pbnRlcm5hbC5oIGRvZXMgaXRzZWxmCitpbmNsdWRlIHBjcmUyLmgsIHdlIGV4cGxpY2l0bHkgaW5jbHVkZSBpdCBiZWZvcmVoYW5kLCBhbG9uZyB3aXRoIHBjcmUycG9zaXguaCwKK3NvIHRoYXQgdGhlIFBDUkUyX0VYUF94eHggbWFjcm9zIGdldCBzZXQgYXBwcm9wcmlhdGVseSBmb3IgYW4gYXBwbGljYXRpb24sIG5vdAorZm9yIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5LiAqLworCisjZGVmaW5lIFBSSVYobmFtZSkgbmFtZQorI2RlZmluZSBQQ1JFMl9DT0RFX1VOSVRfV0lEVEggMAorI2luY2x1ZGUgInBjcmUyLmgiCisjaW5jbHVkZSAicGNyZTJwb3NpeC5oIgorI2luY2x1ZGUgInBjcmUyX2ludGVybmFsLmgiCisKKy8qIFdlIG5lZWQgYWNjZXNzIHRvIHNvbWUgb2YgdGhlIGRhdGEgdGFibGVzIHRoYXQgUENSRTIgdXNlcy4gRGVmaW5pbmcKK1BDUkUyX1BDUkVURVNUIG1ha2VzIHNvbWUgbWlub3IgY2hhbmdlcyBpbiB0aGUgZmlsZXMuIFRoZSBwcmV2aW91cyBkZWZpbml0aW9uCitvZiBQUklWIGF2b2lkcyBuYW1lIGNsYXNoZXMuICovCisKKyNkZWZpbmUgUENSRTJfUENSRTJURVNUCisjaW5jbHVkZSAicGNyZTJfdGFibGVzLmMiCisjaW5jbHVkZSAicGNyZTJfdWNkLmMiCisKKy8qIDMyLWJpdCBpbnRlZ2VyIHZhbHVlcyBpbiB0aGUgaW5wdXQgYXJlIHJlYWQgYnkgc3RydG91bCgpIG9yIHN0cnRvbCgpLiBUaGUKK2NoZWNrIG5lZWRlZCBmb3Igb3ZlcmZsb3cgZGVwZW5kcyBvbiB3aGV0aGVyIGxvbmcgaW50cyBhcmUgaW4gZmFjdCBsb25nZXIgdGhhbgoraW50cy4gVGhleSBhcmUgZGVmaW5lZCBub3QgdG8gYmUgc2hvcnRlci4gKi8KKworI2lmIFVMT05HX01BWCA+IFVJTlQzMl9NQVgKKyNkZWZpbmUgVTMyT1ZFUkZMT1coeCkgKHggPiBVSU5UMzJfTUFYKQorI2Vsc2UKKyNkZWZpbmUgVTMyT1ZFUkZMT1coeCkgKHggPT0gVUlOVDMyX01BWCkKKyNlbmRpZgorCisjaWYgTE9OR19NQVggPiBJTlQzMl9NQVgKKyNkZWZpbmUgUzMyT1ZFUkZMT1coeCkgKHggPiBJTlQzMl9NQVggfHwgeCA8IElOVDMyX01JTikKKyNlbHNlCisjZGVmaW5lIFMzMk9WRVJGTE9XKHgpICh4ID09IElOVDMyX01BWCB8fCB4ID09IElOVDMyX01JTikKKyNlbmRpZgorCisvKiBXaGVuIFBDUkUyX0NPREVfVU5JVF9XSURUSCBpcyB6ZXJvLCBwY3JlMl9pbnRlcm5hbC5oIGRvZXMgbm90IGluY2x1ZGUKK3BjcmUyX2ludG1vZGVkZXAuaCwgd2hpY2ggaXMgd2hlcmUgbW9kZS1kZXBlbmRlbnQgbWFjcm9zIGFuZCBzdHJ1Y3R1cmVzIGFyZQorZGVmaW5lZC4gV2UgY2FuIG5vdyBpbmNsdWRlIGl0IGZvciBlYWNoIHN1cHBvcnRlZCBjb2RlIHVuaXQgd2lkdGguIEJlY2F1c2UKK1BDUkUyX0NPREVfVU5JVF9XSURUSCB3YXMgZGVmaW5lZCBhcyB6ZXJvIGJlZm9yZSBpbmNsdWRpbmcgcGNyZTIuaCwgaXQgd2lsbAoraGF2ZSBsZWZ0IFBDUkUyX1NVRkZJWCBkZWZpbmVkIGFzIGEgbm8tb3AuIFdlIG11c3QgcmUtZGVmaW5lIGl0IGFwcHJvcHJpYXRlbHkKK3doaWxlIGluY2x1ZGluZyB0aGVzZSBmaWxlcywgYW5kIHRoZW4gcmVzdG9yZSBpdCB0byBhIG5vLW9wLiBCZWNhdXNlIExJTktfU0laRQorbWF5IGJlIGNoYW5nZWQgaW4gMTYtYml0IG1vZGUgYW5kIGZvcmNlZCB0byAxIGluIDMyLWJpdCBtb2RlLCB0aGUgb3JkZXIgb2YKK3RoZXNlIGluY2x1c2lvbnMgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiAqLworCisjdW5kZWYgUENSRTJfU1VGRklYCisjdW5kZWYgUENSRTJfQ09ERV9VTklUX1dJRFRICisKKyNpZmRlZiAgIFNVUFBPUlRfUENSRTJfOAorI2RlZmluZSAgUENSRTJfQ09ERV9VTklUX1dJRFRIIDgKKyNkZWZpbmUgIFBDUkUyX1NVRkZJWChhKSBHKGEsOCkKKyNpbmNsdWRlICJwY3JlMl9pbnRtb2RlZGVwLmgiCisjaW5jbHVkZSAicGNyZTJfcHJpbnRpbnQuYyIKKyN1bmRlZiAgIFBDUkUyX0NPREVfVU5JVF9XSURUSAorI3VuZGVmICAgUENSRTJfU1VGRklYCisjZW5kaWYgICAvKiBTVVBQT1JUX1BDUkUyXzggKi8KKworI2lmZGVmICAgU1VQUE9SVF9QQ1JFMl8xNgorI2RlZmluZSAgUENSRTJfQ09ERV9VTklUX1dJRFRIIDE2CisjZGVmaW5lICBQQ1JFMl9TVUZGSVgoYSkgRyhhLDE2KQorI2luY2x1ZGUgInBjcmUyX2ludG1vZGVkZXAuaCIKKyNpbmNsdWRlICJwY3JlMl9wcmludGludC5jIgorI3VuZGVmICAgUENSRTJfQ09ERV9VTklUX1dJRFRICisjdW5kZWYgICBQQ1JFMl9TVUZGSVgKKyNlbmRpZiAgIC8qIFNVUFBPUlRfUENSRTJfMTYgKi8KKworI2lmZGVmICAgU1VQUE9SVF9QQ1JFMl8zMgorI2RlZmluZSAgUENSRTJfQ09ERV9VTklUX1dJRFRIIDMyCisjZGVmaW5lICBQQ1JFMl9TVUZGSVgoYSkgRyhhLDMyKQorI2luY2x1ZGUgInBjcmUyX2ludG1vZGVkZXAuaCIKKyNpbmNsdWRlICJwY3JlMl9wcmludGludC5jIgorI3VuZGVmICAgUENSRTJfQ09ERV9VTklUX1dJRFRICisjdW5kZWYgICBQQ1JFMl9TVUZGSVgKKyNlbmRpZiAgIC8qIFNVUFBPUlRfUENSRTJfMzIgKi8KKworI2RlZmluZSBQQ1JFMl9TVUZGSVgoYSkgYQorCisvKiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gY2hlY2sgaW5wdXQgdGV4dCBmb3IgVVRGLTggdmFsaWRpdHksIHdoYXRldmVyIGNvZGUKK3dpZHRocyBhcmUgYWN0dWFsbHkgYXZhaWxhYmxlLCBiZWNhdXNlIHRoZSBpbnB1dCB0byBwY3JlMnRlc3QgaXMgYWx3YXlzIGluCis4LWJpdCBjb2RlIHVuaXRzLiBTbyB3ZSBpbmNsdWRlIHRoZSBVVEYgdmFsaWRpdHkgY2hlY2tpbmcgZnVuY3Rpb24gZm9yIDgtYml0Citjb2RlIHVuaXRzLiAqLworCitleHRlcm4gaW50IHZhbGlkX3V0ZihQQ1JFMl9TUFRSOCwgUENSRTJfU0laRSwgUENSRTJfU0laRSAqKTsKKworI2RlZmluZSAgUENSRTJfQ09ERV9VTklUX1dJRFRIIDgKKyN1bmRlZiAgIFBDUkUyX1NQVFIKKyNkZWZpbmUgIFBDUkUyX1NQVFIgUENSRTJfU1BUUjgKKyNpbmNsdWRlICJwY3JlMl92YWxpZF91dGYuYyIKKyN1bmRlZiAgIFBDUkUyX0NPREVfVU5JVF9XSURUSAorI3VuZGVmICAgUENSRTJfU1BUUgorCisvKiBJZiB3ZSBoYXZlIDgtYml0IHN1cHBvcnQsIGRlZmF1bHQgdG8gaXQ7IGlmIHRoZXJlIGlzIGFsc28gMTYtb3IgMzItYml0CitzdXBwb3J0LCBpdCBjYW4gYmUgc2VsZWN0ZWQgYnkgYSBjb21tYW5kLWxpbmUgb3B0aW9uLiBJZiB0aGVyZSBpcyBubyA4LWJpdAorc3VwcG9ydCwgdGhlcmUgbXVzdCBiZSAxNi0gb3IgMzItYml0IHN1cHBvcnQsIHNvIGRlZmF1bHQgdG8gb25lIG9mIHRoZW0uIFRoZQorY29uZmlnIGZ1bmN0aW9uLCBKSVQgc3RhY2ssIGNvbnRleHRzLCBhbmQgdmVyc2lvbiBzdHJpbmcgYXJlIHRoZSBzYW1lIGluIGFsbAorbW9kZXMsIHNvIHVzZSB0aGUgZm9ybSBvZiB0aGUgZmlyc3QgdGhhdCBpcyBhdmFpbGFibGUuICovCisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfOAorI2RlZmluZSBERUZBVUxUX1RFU1RfTU9ERSBQQ1JFOF9NT0RFCisjZGVmaW5lIFZFUlNJT05fVFlQRSBQQ1JFMl9VQ0hBUjgKKyNkZWZpbmUgUENSRTJfQ09ORklHIHBjcmUyX2NvbmZpZ184CisjZGVmaW5lIFBDUkUyX0pJVF9TVEFDSyBwY3JlMl9qaXRfc3RhY2tfOAorI2RlZmluZSBQQ1JFMl9SRUFMX0dFTkVSQUxfQ09OVEVYVCBwY3JlMl9yZWFsX2dlbmVyYWxfY29udGV4dF84CisjZGVmaW5lIFBDUkUyX1JFQUxfQ09NUElMRV9DT05URVhUIHBjcmUyX3JlYWxfY29tcGlsZV9jb250ZXh0XzgKKyNkZWZpbmUgUENSRTJfUkVBTF9NQVRDSF9DT05URVhUIHBjcmUyX3JlYWxfbWF0Y2hfY29udGV4dF84CisjZGVmaW5lIFZFUlNJT05fVFlQRSBQQ1JFMl9VQ0hBUjgKKworI2VsaWYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzE2CisjZGVmaW5lIERFRkFVTFRfVEVTVF9NT0RFIFBDUkUxNl9NT0RFCisjZGVmaW5lIFZFUlNJT05fVFlQRSBQQ1JFMl9VQ0hBUjE2CisjZGVmaW5lIFBDUkUyX0NPTkZJRyBwY3JlMl9jb25maWdfMTYKKyNkZWZpbmUgUENSRTJfSklUX1NUQUNLIHBjcmUyX2ppdF9zdGFja18xNgorI2RlZmluZSBQQ1JFMl9SRUFMX0dFTkVSQUxfQ09OVEVYVCBwY3JlMl9yZWFsX2dlbmVyYWxfY29udGV4dF8xNgorI2RlZmluZSBQQ1JFMl9SRUFMX0NPTVBJTEVfQ09OVEVYVCBwY3JlMl9yZWFsX2NvbXBpbGVfY29udGV4dF8xNgorI2RlZmluZSBQQ1JFMl9SRUFMX01BVENIX0NPTlRFWFQgcGNyZTJfcmVhbF9tYXRjaF9jb250ZXh0XzE2CisKKyNlbGlmIGRlZmluZWQgU1VQUE9SVF9QQ1JFMl8zMgorI2RlZmluZSBERUZBVUxUX1RFU1RfTU9ERSBQQ1JFMzJfTU9ERQorI2RlZmluZSBWRVJTSU9OX1RZUEUgUENSRTJfVUNIQVIzMgorI2RlZmluZSBQQ1JFMl9DT05GSUcgcGNyZTJfY29uZmlnXzMyCisjZGVmaW5lIFBDUkUyX0pJVF9TVEFDSyBwY3JlMl9qaXRfc3RhY2tfMzIKKyNkZWZpbmUgUENSRTJfUkVBTF9HRU5FUkFMX0NPTlRFWFQgcGNyZTJfcmVhbF9nZW5lcmFsX2NvbnRleHRfMzIKKyNkZWZpbmUgUENSRTJfUkVBTF9DT01QSUxFX0NPTlRFWFQgcGNyZTJfcmVhbF9jb21waWxlX2NvbnRleHRfMzIKKyNkZWZpbmUgUENSRTJfUkVBTF9NQVRDSF9DT05URVhUIHBjcmUyX3JlYWxfbWF0Y2hfY29udGV4dF8zMgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0gU3RydWN0dXJlIGFuZCB0YWJsZSBmb3IgaGFuZGxpbmcgIy1jb21tYW5kcyAtLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgc3RydWN0IGNtZHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIGludCAgdmFsdWU7Cit9IGNtZHN0cnVjdDsKKworZW51bSB7IENNRF9GT1JCSURfVVRGLCBDTURfTE9BRCwgQ01EX05FV0xJTkVfREVGQVVMVCwgQ01EX1BBVFRFUk4sCisgIENNRF9QRVJMVEVTVCwgQ01EX1BPUCwgQ01EX1NBVkUsIENNRF9TVUJKRUNULCBDTURfVU5LTk9XTiB9OworCitzdGF0aWMgY21kc3RydWN0IGNtZGxpc3RbXSA9IHsKKyAgeyAiZm9yYmlkX3V0ZiIsICAgICAgQ01EX0ZPUkJJRF9VVEYgfSwKKyAgeyAibG9hZCIsICAgICAgICAgICAgQ01EX0xPQUQgfSwKKyAgeyAibmV3bGluZV9kZWZhdWx0IiwgQ01EX05FV0xJTkVfREVGQVVMVCB9LAorICB7ICJwYXR0ZXJuIiwgICAgICAgICBDTURfUEFUVEVSTiB9LAorICB7ICJwZXJsdGVzdCIsICAgICAgICBDTURfUEVSTFRFU1QgfSwKKyAgeyAicG9wIiwgICAgICAgICAgICAgQ01EX1BPUCB9LAorICB7ICJzYXZlIiwgICAgICAgICAgICBDTURfU0FWRSB9LAorICB7ICJzdWJqZWN0IiwgICAgICAgICBDTURfU1VCSkVDVCB9fTsKKworI2RlZmluZSBjbWRsaXN0Y291bnQgc2l6ZW9mKGNtZGxpc3QpL3NpemVvZihjbWRzdHJ1Y3QpCisKKy8qIC0tLS0tLS0tLS0tLS0gU3RydWN0dXJlcyBhbmQgdGFibGVzIGZvciBoYW5kbGluZyBtb2RpZmllcnMgLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGFibGUgb2YgbmFtZXMgZm9yIG5ld2xpbmUgdHlwZXMuIE11c3QgYmUga2VwdCBpbiBzdGVwIHdpdGggdGhlIGRlZmluaXRpb25zCitvZiBQQ1JFMl9ORVdMSU5FX3h4IGluIHBjcmUyLmguICovCisKK3N0YXRpYyBjb25zdCBjaGFyICpuZXdsaW5lc1tdID0geworICAiREVGQVVMVCIsICJDUiIsICJMRiIsICJDUkxGIiwgIkFOWSIsICJBTllDUkxGIiB9OworCisvKiBNb2RpZmllciB0eXBlcyBhbmQgYXBwbGljYWJpbGl0eSAqLworCitlbnVtIHsgTU9EX0NUQywgICAgLyogQXBwbGllcyB0byBhIGNvbXBpbGUgY29udGV4dCAqLworICAgICAgIE1PRF9DVE0sICAgIC8qIEFwcGxpZXMgdG8gYSBtYXRjaCBjb250ZXh0ICovCisgICAgICAgTU9EX1BBVCwgICAgLyogQXBwbGllcyB0byBhIHBhdHRlcm4gKi8KKyAgICAgICBNT0RfUEFUUCwgICAvKiBEaXR0bywgT0sgZm9yIFBlcmwgdGVzdCAqLworICAgICAgIE1PRF9EQVQsICAgIC8qIEFwcGxpZXMgdG8gYSBkYXRhIGxpbmUgKi8KKyAgICAgICBNT0RfUEQsICAgICAvKiBBcHBsaWVzIHRvIGEgcGF0dGVybiBvciBhIGRhdGEgbGluZSAqLworICAgICAgIE1PRF9QRFAsICAgIC8qIEFzIE1PRF9QRCwgT0sgZm9yIFBlcmwgdGVzdCAqLworICAgICAgIE1PRF9QTkQsICAgIC8qIEFzIE1PRF9QRCwgYnV0IG5vdCBmb3IgYSBkZWZhdWx0IHBhdHRlcm4gKi8KKyAgICAgICBNT0RfUE5EUCwgICAvKiBBcyBNT0RfUE5ELCBPSyBmb3IgUGVybCB0ZXN0ICovCisgICAgICAgTU9EX0NUTCwgICAgLyogSXMgYSBjb250cm9sIGJpdCAqLworICAgICAgIE1PRF9CU1IsICAgIC8qIElzIGEgQlNSIHZhbHVlICovCisgICAgICAgTU9EX0lOMiwgICAgLyogSXMgb25lIG9yIHR3byB1bnNpZ25lZCBpbnRlZ2VycyAqLworICAgICAgIE1PRF9JTlMsICAgIC8qIElzIGEgc2lnbmVkIGludGVnZXIgKi8KKyAgICAgICBNT0RfSU5ULCAgICAvKiBJcyBhbiB1bnNpZ25lZCBpbnRlZ2VyICovCisgICAgICAgTU9EX0lORCwgICAgLyogSXMgYW4gdW5zaWduZWQgaW50ZWdlciwgYnV0IG5vIHZhbHVlID0+IGRlZmF1bHQgKi8KKyAgICAgICBNT0RfTkwsICAgICAvKiBJcyBhIG5ld2xpbmUgdmFsdWUgKi8KKyAgICAgICBNT0RfTk4sICAgICAvKiBJcyBhIG51bWJlciBvciBhIG5hbWU7IG1vcmUgdGhhbiBvbmUgbWF5IG9jY3VyICovCisgICAgICAgTU9EX09QVCwgICAgLyogSXMgYW4gb3B0aW9uIGJpdCAqLworICAgICAgIE1PRF9TSVosICAgIC8qIElzIGEgUENSRTJfU0laRSB2YWx1ZSAqLworICAgICAgIE1PRF9TVFIgfTsgIC8qIElzIGEgc3RyaW5nICovCisKKy8qIENvbnRyb2wgYml0cy4gU29tZSBhcHBseSB0byBjb21waWxpbmcsIHNvbWUgdG8gbWF0Y2hpbmcsIGJ1dCBzb21lIGNhbiBiZSBzZXQKK2VpdGhlciBvbiBhIHBhdHRlcm4gb3IgYSBkYXRhIGxpbmUsIHNvIHRoZXkgbXVzdCBhbGwgYmUgZGlzdGluY3QuIFRoZXJlIGFyZSBub3cKK3NvIG1hbnkgb2YgdGhlbSB0aGF0IHRoZXkgYXJlIHNwbGl0IGludG8gdHdvIGZpZWxkcy4gKi8KKworI2RlZmluZSBDVExfQUZURVJURVhUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxdQorI2RlZmluZSBDVExfQUxMQUZURVJURVhUICAgICAgICAgICAgICAgICAweDAwMDAwMDAydQorI2RlZmluZSBDVExfQUxMQ0FQVFVSRVMgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0dQorI2RlZmluZSBDVExfQUxMVVNFRFRFWFQgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4dQorI2RlZmluZSBDVExfQUxUR0xPQkFMICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwdQorI2RlZmluZSBDVExfQklOQ09ERSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwdQorI2RlZmluZSBDVExfQ0FMTE9VVF9DQVBUVVJFICAgICAgICAgICAgICAweDAwMDAwMDQwdQorI2RlZmluZSBDVExfQ0FMTE9VVF9JTkZPICAgICAgICAgICAgICAgICAweDAwMDAwMDgwdQorI2RlZmluZSBDVExfQ0FMTE9VVF9OT05FICAgICAgICAgICAgICAgICAweDAwMDAwMTAwdQorI2RlZmluZSBDVExfREZBICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwdQorI2RlZmluZSBDVExfRVhQQU5EICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwdQorI2RlZmluZSBDVExfRklORExJTUlUUyAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwdQorI2RlZmluZSBDVExfRlVMTEJJTkNPREUgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwdQorI2RlZmluZSBDVExfR0VUQUxMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwdQorI2RlZmluZSBDVExfR0xPQkFMICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwdQorI2RlZmluZSBDVExfSEVYUEFUICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwdQorI2RlZmluZSBDVExfSU5GTyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwdQorI2RlZmluZSBDVExfSklURkFTVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwdQorI2RlZmluZSBDVExfSklUVkVSSUZZICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwdQorI2RlZmluZSBDVExfTUFSSyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwdQorI2RlZmluZSBDVExfTUVNT1JZICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwdQorI2RlZmluZSBDVExfTlVMTENPTlRFWFQgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwdQorI2RlZmluZSBDVExfUE9TSVggICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwdQorI2RlZmluZSBDVExfUFVTSCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwdQorI2RlZmluZSBDVExfU1RBUlRDSEFSICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwdQorI2RlZmluZSBDVExfWkVST19URVJNSU5BVEUgICAgICAgICAgICAgICAweDAyMDAwMDAwdQorLyogU3BhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwdSAgKi8KKy8qIFNwYXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwMDAwMHUgICovCisvKiBTcGFyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMDAwMDB1ICAqLworLyogU3BhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAwMDAwdSAgKi8KKyNkZWZpbmUgQ1RMX05MX1NFVCAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMHUgIC8qIEluZm9ybWF0aW9uYWwgKi8KKyNkZWZpbmUgQ1RMX0JTUl9TRVQgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwMHUgIC8qIEluZm9ybWF0aW9uYWwgKi8KKworLyogU2Vjb25kIGNvbnRyb2wgd29yZCAqLworCisjZGVmaW5lIENUTDJfU1VCU1RJVFVURV9FWFRFTkRFRCAgICAgICAgIDB4MDAwMDAwMDF1CisjZGVmaW5lIENUTDJfU1VCU1RJVFVURV9PVkVSRkxPV19MRU5HVEggIDB4MDAwMDAwMDJ1CisjZGVmaW5lIENUTDJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUICAgIDB4MDAwMDAwMDR1CisjZGVmaW5lIENUTDJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWSAgICAgIDB4MDAwMDAwMDh1CisKKy8qIENvbWJpbmF0aW9ucyAqLworCisjZGVmaW5lIENUTF9ERUJVRyAgICAgICAgICAgIChDVExfRlVMTEJJTkNPREV8Q1RMX0lORk8pICAvKiBGb3Igc2V0dGluZyAqLworI2RlZmluZSBDVExfQU5ZSU5GTyAgICAgICAgICAoQ1RMX0RFQlVHfENUTF9CSU5DT0RFfENUTF9DQUxMT1VUX0lORk8pCisjZGVmaW5lIENUTF9BTllHTE9CICAgICAgICAgIChDVExfQUxUR0xPQkFMfENUTF9HTE9CQUwpCisKKy8qIFRoZXNlIGFyZSBhbGwgdGhlIGNvbnRyb2xzIHRoYXQgbWF5IGJlIHNldCBlaXRoZXIgb24gYSBwYXR0ZXJuIG9yIG9uIGEKK2RhdGEgbGluZS4gKi8KKworI2RlZmluZSBDVExfQUxMUEQgIChDVExfQUZURVJURVhUfFwKKyAgICAgICAgICAgICAgICAgICAgQ1RMX0FMTEFGVEVSVEVYVHxcCisgICAgICAgICAgICAgICAgICAgIENUTF9BTExDQVBUVVJFU3xcCisgICAgICAgICAgICAgICAgICAgIENUTF9BTExVU0VEVEVYVHxcCisgICAgICAgICAgICAgICAgICAgIENUTF9BTFRHTE9CQUx8XAorICAgICAgICAgICAgICAgICAgICBDVExfR0xPQkFMfFwKKyAgICAgICAgICAgICAgICAgICAgQ1RMX01BUkt8XAorICAgICAgICAgICAgICAgICAgICBDVExfTUVNT1JZfFwKKyAgICAgICAgICAgICAgICAgICAgQ1RMX1NUQVJUQ0hBUikKKworI2RlZmluZSBDVEwyX0FMTFBEIChDVEwyX1NVQlNUSVRVVEVfRVhURU5ERUR8XAorICAgICAgICAgICAgICAgICAgICBDVEwyX1NVQlNUSVRVVEVfT1ZFUkZMT1dfTEVOR1RIfFwKKyAgICAgICAgICAgICAgICAgICAgQ1RMMl9TVUJTVElUVVRFX1VOS05PV05fVU5TRVR8XAorICAgICAgICAgICAgICAgICAgICBDVEwyX1NVQlNUSVRVVEVfVU5TRVRfRU1QVFkpCisKKy8qIFN0cnVjdHVyZXMgZm9yIGhvbGRpbmcgbW9kaWZpZXIgaW5mb3JtYXRpb24gZm9yIHBhdHRlcm5zIGFuZCBzdWJqZWN0IHN0cmluZ3MKKyhkYXRhKS4gRmllbGRzIGNvbnRhaW5pbmcgbW9kaWZpZXJzIHRoYXQgY2FuIGJlIHNldCBlaXRoZXIgZm9yIGEgcGF0dGVybiBvciBhCitzdWJqZWN0IG11c3QgYmUgYXQgdGhlIHN0YXJ0IGFuZCBpbiB0aGUgc2FtZSBvcmRlciBpbiBib3RoIGNhc2VzIHNvIHRoYXQgdGhlCitzYW1lIG9mZnNldCBpbiB0aGUgYmlnIHRhYmxlIGJlbG93IHdvcmtzIGZvciBib3RoLiAqLworCit0eXBlZGVmIHN0cnVjdCBwYXRjdGwgeyAgICAvKiBTdHJ1Y3R1cmUgZm9yIHBhdHRlcm4gbW9kaWZpZXJzLiAqLworICB1aW50MzJfdCAgb3B0aW9uczsgICAgICAgLyogTXVzdCBiZSBpbiBzYW1lIHBvc2l0aW9uIGFzIGRhdGN0bCAqLworICB1aW50MzJfdCAgY29udHJvbDsgICAgICAgLyogTXVzdCBiZSBpbiBzYW1lIHBvc2l0aW9uIGFzIGRhdGN0bCAqLworICB1aW50MzJfdCAgY29udHJvbDI7ICAgICAgLyogTXVzdCBiZSBpbiBzYW1lIHBvc2l0aW9uIGFzIGRhdGN0bCAqLworICAgdWludDhfdCAgcmVwbGFjZW1lbnRbUkVQTEFDRV9NT0RTSVpFXTsgIC8qIFNvIG11c3QgdGhpcyAqLworICB1aW50MzJfdCAgaml0OworICB1aW50MzJfdCAgc3RhY2tndWFyZF90ZXN0OworICB1aW50MzJfdCAgdGFibGVzX2lkOworICB1aW50MzJfdCAgcmVnZXJyb3JfYnVmZnNpemU7CisgICB1aW50OF90ICBsb2NhbGVbTE9DQUxFU0laRV07Cit9IHBhdGN0bDsKKworI2RlZmluZSBNQVhDUFlHRVQgMTAKKyNkZWZpbmUgTEVOQ1BZR0VUIDY0CisKK3R5cGVkZWYgc3RydWN0IGRhdGN0bCB7ICAgIC8qIFN0cnVjdHVyZSBmb3IgZGF0YSBsaW5lIG1vZGlmaWVycy4gKi8KKyAgdWludDMyX3QgIG9wdGlvbnM7ICAgICAgIC8qIE11c3QgYmUgaW4gc2FtZSBwb3NpdGlvbiBhcyBwYXRjdGwgKi8KKyAgdWludDMyX3QgIGNvbnRyb2w7ICAgICAgIC8qIE11c3QgYmUgaW4gc2FtZSBwb3NpdGlvbiBhcyBwYXRjdGwgKi8KKyAgdWludDMyX3QgIGNvbnRyb2wyOyAgICAgIC8qIE11c3QgYmUgaW4gc2FtZSBwb3NpdGlvbiBhcyBwYXRjdGwgKi8KKyAgIHVpbnQ4X3QgIHJlcGxhY2VtZW50W1JFUExBQ0VfTU9EU0laRV07ICAvKiBTbyBtdXN0IHRoaXMgKi8KKyAgdWludDMyX3QgIGNmYWlsWzJdOworICAgaW50MzJfdCAgY2FsbG91dF9kYXRhOworICAgaW50MzJfdCAgY29weV9udW1iZXJzW01BWENQWUdFVF07CisgICBpbnQzMl90ICBnZXRfbnVtYmVyc1tNQVhDUFlHRVRdOworICB1aW50MzJfdCAgaml0c3RhY2s7CisgIHVpbnQzMl90ICBvdmVjY291bnQ7CisgIHVpbnQzMl90ICBvZmZzZXQ7CisgIHVpbnQ4X3QgICBjb3B5X25hbWVzW0xFTkNQWUdFVF07CisgIHVpbnQ4X3QgICBnZXRfbmFtZXNbTEVOQ1BZR0VUXTsKK30gZGF0Y3RsOworCisvKiBJZHMgZm9yIHdoaWNoIGNvbnRleHQgdG8gbW9kaWZ5LiAqLworCitlbnVtIHsgQ1RYX1BBVCwgICAgICAgICAgICAvKiBBY3RpdmUgcGF0dGVybiBjb250ZXh0ICovCisgICAgICAgQ1RYX1BPUFBBVCwgICAgICAgICAvKiBEaXR0bywgZm9yIGEgcG9wcGVkIHBhdHRlcm4gKi8KKyAgICAgICBDVFhfREVGUEFULCAgICAgICAgIC8qIERlZmF1bHQgcGF0dGVybiBjb250ZXh0ICovCisgICAgICAgQ1RYX0RBVCwgICAgICAgICAgICAvKiBBY3RpdmUgZGF0YSAobWF0Y2gpIGNvbnRleHQgKi8KKyAgICAgICBDVFhfREVGREFUIH07ICAgICAgIC8qIERlZmF1bHQgZGF0YSAobWF0Y2gpIGNvbnRleHQgKi8KKworLyogTWFjcm9zIHRvIHNpbXBsaWZ5IHRoZSBiaWcgdGFibGUgYmVsb3cuICovCisKKyNkZWZpbmUgQ08obmFtZSkgb2Zmc2V0b2YoUENSRTJfUkVBTF9DT01QSUxFX0NPTlRFWFQsIG5hbWUpCisjZGVmaW5lIE1PKG5hbWUpIG9mZnNldG9mKFBDUkUyX1JFQUxfTUFUQ0hfQ09OVEVYVCwgbmFtZSkKKyNkZWZpbmUgUE8obmFtZSkgb2Zmc2V0b2YocGF0Y3RsLCBuYW1lKQorI2RlZmluZSBQRChuYW1lKSBQTyhuYW1lKQorI2RlZmluZSBETyhuYW1lKSBvZmZzZXRvZihkYXRjdGwsIG5hbWUpCisKKy8qIFRhYmxlIG9mIGFsbCBsb25nLWZvcm0gbW9kaWZpZXJzLiBNdXN0IGJlIGluIGNvbGxhdGluZyBzZXF1ZW5jZSBvZiBtb2RpZmllcgorbmFtZSBiZWNhdXNlIGl0IGlzIHNlYXJjaGVkIGJ5IGJpbmFyeSBjaG9wLiAqLworCit0eXBlZGVmIHN0cnVjdCBtb2RzdHJ1Y3QgeworICBjb25zdCBjaGFyICAgKm5hbWU7CisgIHVpbnQxNl90ICAgICAgd2hpY2g7CisgIHVpbnQxNl90ICAgICAgdHlwZTsKKyAgdWludDMyX3QgICAgICB2YWx1ZTsKKyAgUENSRTJfU0laRSAgICBvZmZzZXQ7Cit9IG1vZHN0cnVjdDsKKworc3RhdGljIG1vZHN0cnVjdCBtb2RsaXN0W10gPSB7CisgIHsgImFmdGVydGV4dCIsICAgICAgICAgICAgICAgICAgTU9EX1BORFAsIE1PRF9DVEwsIENUTF9BRlRFUlRFWFQsICAgICAgICAgICAgICBQTyhjb250cm9sKSB9LAorICB7ICJhbGxhZnRlcnRleHQiLCAgICAgICAgICAgICAgIE1PRF9QTkRQLCBNT0RfQ1RMLCBDVExfQUxMQUZURVJURVhULCAgICAgICAgICAgUE8oY29udHJvbCkgfSwKKyAgeyAiYWxsY2FwdHVyZXMiLCAgICAgICAgICAgICAgICBNT0RfUE5ELCAgTU9EX0NUTCwgQ1RMX0FMTENBUFRVUkVTLCAgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCisgIHsgImFsbG93X2VtcHR5X2NsYXNzIiwgICAgICAgICAgTU9EX1BBVCwgIE1PRF9PUFQsIFBDUkUyX0FMTE9XX0VNUFRZX0NMQVNTLCAgICBQTyhvcHRpb25zKSB9LAorICB7ICJhbGx1c2VkdGV4dCIsICAgICAgICAgICAgICAgIE1PRF9QTkRQLCBNT0RfQ1RMLCBDVExfQUxMVVNFRFRFWFQsICAgICAgICAgICAgUE8oY29udHJvbCkgfSwKKyAgeyAiYWx0X2JzdXgiLCAgICAgICAgICAgICAgICAgICBNT0RfUEFULCAgTU9EX09QVCwgUENSRTJfQUxUX0JTVVgsICAgICAgICAgICAgIFBPKG9wdGlvbnMpIH0sCisgIHsgImFsdF9jaXJjdW1mbGV4IiwgICAgICAgICAgICAgTU9EX1BBVCwgIE1PRF9PUFQsIFBDUkUyX0FMVF9DSVJDVU1GTEVYLCAgICAgICBQTyhvcHRpb25zKSB9LAorICB7ICJhbHRfdmVyYm5hbWVzIiwgICAgICAgICAgICAgIE1PRF9QQVQsICBNT0RfT1BULCBQQ1JFMl9BTFRfVkVSQk5BTUVTLCAgICAgICAgUE8ob3B0aW9ucykgfSwKKyAgeyAiYWx0Z2xvYmFsIiwgICAgICAgICAgICAgICAgICBNT0RfUE5ELCAgTU9EX0NUTCwgQ1RMX0FMVEdMT0JBTCwgICAgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCisgIHsgImFuY2hvcmVkIiwgICAgICAgICAgICAgICAgICAgTU9EX1BELCAgIE1PRF9PUFQsIFBDUkUyX0FOQ0hPUkVELCAgICAgICAgICAgICBQRChvcHRpb25zKSB9LAorICB7ICJhdXRvX2NhbGxvdXQiLCAgICAgICAgICAgICAgIE1PRF9QQVQsICBNT0RfT1BULCBQQ1JFMl9BVVRPX0NBTExPVVQsICAgICAgICAgUE8ob3B0aW9ucykgfSwKKyAgeyAiYmluY29kZSIsICAgICAgICAgICAgICAgICAgICBNT0RfUEFULCAgTU9EX0NUTCwgQ1RMX0JJTkNPREUsICAgICAgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCisgIHsgImJzciIsICAgICAgICAgICAgICAgICAgICAgICAgTU9EX0NUQywgIE1PRF9CU1IsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBDTyhic3JfY29udmVudGlvbikgfSwKKyAgeyAiY2FsbG91dF9jYXB0dXJlIiwgICAgICAgICAgICBNT0RfREFULCAgTU9EX0NUTCwgQ1RMX0NBTExPVVRfQ0FQVFVSRSwgICAgICAgIERPKGNvbnRyb2wpIH0sCisgIHsgImNhbGxvdXRfZGF0YSIsICAgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9JTlMsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBETyhjYWxsb3V0X2RhdGEpIH0sCisgIHsgImNhbGxvdXRfZmFpbCIsICAgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9JTjIsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBETyhjZmFpbCkgfSwKKyAgeyAiY2FsbG91dF9pbmZvIiwgICAgICAgICAgICAgICBNT0RfUEFULCAgTU9EX0NUTCwgQ1RMX0NBTExPVVRfSU5GTywgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCisgIHsgImNhbGxvdXRfbm9uZSIsICAgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9DVEwsIENUTF9DQUxMT1VUX05PTkUsICAgICAgICAgICBETyhjb250cm9sKSB9LAorICB7ICJjYXNlbGVzcyIsICAgICAgICAgICAgICAgICAgIE1PRF9QQVRQLCBNT0RfT1BULCBQQ1JFMl9DQVNFTEVTUywgICAgICAgICAgICAgUE8ob3B0aW9ucykgfSwKKyAgeyAiY29weSIsICAgICAgICAgICAgICAgICAgICAgICBNT0RfREFULCAgTU9EX05OLCAgRE8oY29weV9udW1iZXJzKSwgICAgICAgICAgIERPKGNvcHlfbmFtZXMpIH0sCisgIHsgImRlYnVnIiwgICAgICAgICAgICAgICAgICAgICAgTU9EX1BBVCwgIE1PRF9DVEwsIENUTF9ERUJVRywgICAgICAgICAgICAgICAgICBQTyhjb250cm9sKSB9LAorICB7ICJkZmEiLCAgICAgICAgICAgICAgICAgICAgICAgIE1PRF9EQVQsICBNT0RfQ1RMLCBDVExfREZBLCAgICAgICAgICAgICAgICAgICAgRE8oY29udHJvbCkgfSwKKyAgeyAiZGZhX3Jlc3RhcnQiLCAgICAgICAgICAgICAgICBNT0RfREFULCAgTU9EX09QVCwgUENSRTJfREZBX1JFU1RBUlQsICAgICAgICAgIERPKG9wdGlvbnMpIH0sCisgIHsgImRmYV9zaG9ydGVzdCIsICAgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9PUFQsIFBDUkUyX0RGQV9TSE9SVEVTVCwgICAgICAgICBETyhvcHRpb25zKSB9LAorICB7ICJkb2xsYXJfZW5kb25seSIsICAgICAgICAgICAgIE1PRF9QQVQsICBNT0RfT1BULCBQQ1JFMl9ET0xMQVJfRU5ET05MWSwgICAgICAgUE8ob3B0aW9ucykgfSwKKyAgeyAiZG90YWxsIiwgICAgICAgICAgICAgICAgICAgICBNT0RfUEFUUCwgTU9EX09QVCwgUENSRTJfRE9UQUxMLCAgICAgICAgICAgICAgIFBPKG9wdGlvbnMpIH0sCisgIHsgImR1cG5hbWVzIiwgICAgICAgICAgICAgICAgICAgTU9EX1BBVFAsIE1PRF9PUFQsIFBDUkUyX0RVUE5BTUVTLCAgICAgICAgICAgICBQTyhvcHRpb25zKSB9LAorICB7ICJleHBhbmQiLCAgICAgICAgICAgICAgICAgICAgIE1PRF9QQVQsICBNT0RfQ1RMLCBDVExfRVhQQU5ELCAgICAgICAgICAgICAgICAgUE8oY29udHJvbCkgfSwKKyAgeyAiZXh0ZW5kZWQiLCAgICAgICAgICAgICAgICAgICBNT0RfUEFUUCwgTU9EX09QVCwgUENSRTJfRVhURU5ERUQsICAgICAgICAgICAgIFBPKG9wdGlvbnMpIH0sCisgIHsgImZpbmRfbGltaXRzIiwgICAgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9DVEwsIENUTF9GSU5ETElNSVRTLCAgICAgICAgICAgICBETyhjb250cm9sKSB9LAorICB7ICJmaXJzdGxpbmUiLCAgICAgICAgICAgICAgICAgIE1PRF9QQVQsICBNT0RfT1BULCBQQ1JFMl9GSVJTVExJTkUsICAgICAgICAgICAgUE8ob3B0aW9ucykgfSwKKyAgeyAiZnVsbGJpbmNvZGUiLCAgICAgICAgICAgICAgICBNT0RfUEFULCAgTU9EX0NUTCwgQ1RMX0ZVTExCSU5DT0RFLCAgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCisgIHsgImdldCIsICAgICAgICAgICAgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9OTiwgIERPKGdldF9udW1iZXJzKSwgICAgICAgICAgICBETyhnZXRfbmFtZXMpIH0sCisgIHsgImdldGFsbCIsICAgICAgICAgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9DVEwsIENUTF9HRVRBTEwsICAgICAgICAgICAgICAgICBETyhjb250cm9sKSB9LAorICB7ICJnbG9iYWwiLCAgICAgICAgICAgICAgICAgICAgIE1PRF9QTkRQLCBNT0RfQ1RMLCBDVExfR0xPQkFMLCAgICAgICAgICAgICAgICAgUE8oY29udHJvbCkgfSwKKyAgeyAiaGV4IiwgICAgICAgICAgICAgICAgICAgICAgICBNT0RfUEFULCAgTU9EX0NUTCwgQ1RMX0hFWFBBVCwgICAgICAgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCisgIHsgImluZm8iLCAgICAgICAgICAgICAgICAgICAgICAgTU9EX1BBVCwgIE1PRF9DVEwsIENUTF9JTkZPLCAgICAgICAgICAgICAgICAgICBQTyhjb250cm9sKSB9LAorICB7ICJqaXQiLCAgICAgICAgICAgICAgICAgICAgICAgIE1PRF9QQVQsICBNT0RfSU5ELCA3LCAgICAgICAgICAgICAgICAgICAgICAgICAgUE8oaml0KSB9LAorICB7ICJqaXRmYXN0IiwgICAgICAgICAgICAgICAgICAgIE1PRF9QQVQsICBNT0RfQ1RMLCBDVExfSklURkFTVCwgICAgICAgICAgICAgICAgUE8oY29udHJvbCkgfSwKKyAgeyAiaml0c3RhY2siLCAgICAgICAgICAgICAgICAgICBNT0RfREFULCAgTU9EX0lOVCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIERPKGppdHN0YWNrKSB9LAorICB7ICJqaXR2ZXJpZnkiLCAgICAgICAgICAgICAgICAgIE1PRF9QQVQsICBNT0RfQ1RMLCBDVExfSklUVkVSSUZZLCAgICAgICAgICAgICAgUE8oY29udHJvbCkgfSwKKyAgeyAibG9jYWxlIiwgICAgICAgICAgICAgICAgICAgICBNT0RfUEFULCAgTU9EX1NUUiwgTE9DQUxFU0laRSwgICAgICAgICAgICAgICAgIFBPKGxvY2FsZSkgfSwKKyAgeyAibWFyayIsICAgICAgICAgICAgICAgICAgICAgICBNT0RfUE5EUCwgTU9EX0NUTCwgQ1RMX01BUkssICAgICAgICAgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCisgIHsgIm1hdGNoX2xpbWl0IiwgICAgICAgICAgICAgICAgTU9EX0NUTSwgIE1PRF9JTlQsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBNTyhtYXRjaF9saW1pdCkgfSwKKyAgeyAibWF0Y2hfdW5zZXRfYmFja3JlZiIsICAgICAgICBNT0RfUEFULCAgTU9EX09QVCwgUENSRTJfTUFUQ0hfVU5TRVRfQkFDS1JFRiwgIFBPKG9wdGlvbnMpIH0sCisgIHsgIm1heF9wYXR0ZXJuX2xlbmd0aCIsICAgICAgICAgTU9EX0NUQywgIE1PRF9TSVosIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBDTyhtYXhfcGF0dGVybl9sZW5ndGgpIH0sCisgIHsgIm1lbW9yeSIsICAgICAgICAgICAgICAgICAgICAgTU9EX1BELCAgIE1PRF9DVEwsIENUTF9NRU1PUlksICAgICAgICAgICAgICAgICBQRChjb250cm9sKSB9LAorICB7ICJtdWx0aWxpbmUiLCAgICAgICAgICAgICAgICAgIE1PRF9QQVRQLCBNT0RfT1BULCBQQ1JFMl9NVUxUSUxJTkUsICAgICAgICAgICAgUE8ob3B0aW9ucykgfSwKKyAgeyAibmV2ZXJfYmFja3NsYXNoX2MiLCAgICAgICAgICBNT0RfUEFULCAgTU9EX09QVCwgUENSRTJfTkVWRVJfQkFDS1NMQVNIX0MsICAgIFBPKG9wdGlvbnMpIH0sCisgIHsgIm5ldmVyX3VjcCIsICAgICAgICAgICAgICAgICAgTU9EX1BBVCwgIE1PRF9PUFQsIFBDUkUyX05FVkVSX1VDUCwgICAgICAgICAgICBQTyhvcHRpb25zKSB9LAorICB7ICJuZXZlcl91dGYiLCAgICAgICAgICAgICAgICAgIE1PRF9QQVQsICBNT0RfT1BULCBQQ1JFMl9ORVZFUl9VVEYsICAgICAgICAgICAgUE8ob3B0aW9ucykgfSwKKyAgeyAibmV3bGluZSIsICAgICAgICAgICAgICAgICAgICBNT0RfQ1RDLCAgTU9EX05MLCAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIENPKG5ld2xpbmVfY29udmVudGlvbikgfSwKKyAgeyAibm9fYXV0b19jYXB0dXJlIiwgICAgICAgICAgICBNT0RfUEFULCAgTU9EX09QVCwgUENSRTJfTk9fQVVUT19DQVBUVVJFLCAgICAgIFBPKG9wdGlvbnMpIH0sCisgIHsgIm5vX2F1dG9fcG9zc2VzcyIsICAgICAgICAgICAgTU9EX1BBVFAsIE1PRF9PUFQsIFBDUkUyX05PX0FVVE9fUE9TU0VTUywgICAgICBQTyhvcHRpb25zKSB9LAorICB7ICJub19kb3RzdGFyX2FuY2hvciIsICAgICAgICAgIE1PRF9QQVQsICBNT0RfT1BULCBQQ1JFMl9OT19ET1RTVEFSX0FOQ0hPUiwgICAgUE8ob3B0aW9ucykgfSwKKyAgeyAibm9fc3RhcnRfb3B0aW1pemUiLCAgICAgICAgICBNT0RfUEFUUCwgTU9EX09QVCwgUENSRTJfTk9fU1RBUlRfT1BUSU1JWkUsICAgIFBPKG9wdGlvbnMpIH0sCisgIHsgIm5vX3V0Zl9jaGVjayIsICAgICAgICAgICAgICAgTU9EX1BELCAgIE1PRF9PUFQsIFBDUkUyX05PX1VURl9DSEVDSywgICAgICAgICBQRChvcHRpb25zKSB9LAorICB7ICJub3Rib2wiLCAgICAgICAgICAgICAgICAgICAgIE1PRF9EQVQsICBNT0RfT1BULCBQQ1JFMl9OT1RCT0wsICAgICAgICAgICAgICAgRE8ob3B0aW9ucykgfSwKKyAgeyAibm90ZW1wdHkiLCAgICAgICAgICAgICAgICAgICBNT0RfREFULCAgTU9EX09QVCwgUENSRTJfTk9URU1QVFksICAgICAgICAgICAgIERPKG9wdGlvbnMpIH0sCisgIHsgIm5vdGVtcHR5X2F0c3RhcnQiLCAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9PUFQsIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQsICAgICBETyhvcHRpb25zKSB9LAorICB7ICJub3Rlb2wiLCAgICAgICAgICAgICAgICAgICAgIE1PRF9EQVQsICBNT0RfT1BULCBQQ1JFMl9OT1RFT0wsICAgICAgICAgICAgICAgRE8ob3B0aW9ucykgfSwKKyAgeyAibnVsbF9jb250ZXh0IiwgICAgICAgICAgICAgICBNT0RfUEQsICAgTU9EX0NUTCwgQ1RMX05VTExDT05URVhULCAgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCisgIHsgIm9mZnNldCIsICAgICAgICAgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9JTlQsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBETyhvZmZzZXQpIH0sCisgIHsgIm9mZnNldF9saW1pdCIsICAgICAgICAgICAgICAgTU9EX0NUTSwgIE1PRF9TSVosIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBNTyhvZmZzZXRfbGltaXQpfSwKKyAgeyAib3ZlY3RvciIsICAgICAgICAgICAgICAgICAgICBNT0RfREFULCAgTU9EX0lOVCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIERPKG92ZWNjb3VudCkgfSwKKyAgeyAicGFyZW5zX25lc3RfbGltaXQiLCAgICAgICAgICBNT0RfQ1RDLCAgTU9EX0lOVCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIENPKHBhcmVuc19uZXN0X2xpbWl0KSB9LAorICB7ICJwYXJ0aWFsX2hhcmQiLCAgICAgICAgICAgICAgIE1PRF9EQVQsICBNT0RfT1BULCBQQ1JFMl9QQVJUSUFMX0hBUkQsICAgICAgICAgRE8ob3B0aW9ucykgfSwKKyAgeyAicGFydGlhbF9zb2Z0IiwgICAgICAgICAgICAgICBNT0RfREFULCAgTU9EX09QVCwgUENSRTJfUEFSVElBTF9TT0ZULCAgICAgICAgIERPKG9wdGlvbnMpIH0sCisgIHsgInBoIiwgICAgICAgICAgICAgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9PUFQsIFBDUkUyX1BBUlRJQUxfSEFSRCwgICAgICAgICBETyhvcHRpb25zKSB9LAorICB7ICJwb3NpeCIsICAgICAgICAgICAgICAgICAgICAgIE1PRF9QQVQsICBNT0RfQ1RMLCBDVExfUE9TSVgsICAgICAgICAgICAgICAgICAgUE8oY29udHJvbCkgfSwKKyAgeyAicHMiLCAgICAgICAgICAgICAgICAgICAgICAgICBNT0RfREFULCAgTU9EX09QVCwgUENSRTJfUEFSVElBTF9TT0ZULCAgICAgICAgIERPKG9wdGlvbnMpIH0sCisgIHsgInB1c2giLCAgICAgICAgICAgICAgICAgICAgICAgTU9EX1BBVCwgIE1PRF9DVEwsIENUTF9QVVNILCAgICAgICAgICAgICAgICAgICBQTyhjb250cm9sKSB9LAorICB7ICJyZWN1cnNpb25fbGltaXQiLCAgICAgICAgICAgIE1PRF9DVE0sICBNT0RfSU5ULCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgTU8ocmVjdXJzaW9uX2xpbWl0KSB9LAorICB7ICJyZWdlcnJvcl9idWZmc2l6ZSIsICAgICAgICAgIE1PRF9QQVQsICBNT0RfSU5ULCAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgUE8ocmVnZXJyb3JfYnVmZnNpemUpIH0sCisgIHsgInJlcGxhY2UiLCAgICAgICAgICAgICAgICAgICAgTU9EX1BORCwgIE1PRF9TVFIsIFJFUExBQ0VfTU9EU0laRSwgICAgICAgICAgICBQTyhyZXBsYWNlbWVudCkgfSwKKyAgeyAic3RhY2tndWFyZCIsICAgICAgICAgICAgICAgICBNT0RfUEFULCAgTU9EX0lOVCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIFBPKHN0YWNrZ3VhcmRfdGVzdCkgfSwKKyAgeyAic3RhcnRjaGFyIiwgICAgICAgICAgICAgICAgICBNT0RfUE5ELCAgTU9EX0NUTCwgQ1RMX1NUQVJUQ0hBUiwgICAgICAgICAgICAgIFBPKGNvbnRyb2wpIH0sCisgIHsgInN0YXJ0b2Zmc2V0IiwgICAgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9JTlQsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBETyhvZmZzZXQpIH0sCisgIHsgInN1YnN0aXR1dGVfZXh0ZW5kZWQiLCAgICAgICAgTU9EX1BORCwgIE1PRF9DVEwsIENUTDJfU1VCU1RJVFVURV9FWFRFTkRFRCwgICBQTyhjb250cm9sMikgfSwKKyAgeyAic3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGgiLCBNT0RfUE5ELCAgTU9EX0NUTCwgQ1RMMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCwgUE8oY29udHJvbDIpIH0sCisgIHsgInN1YnN0aXR1dGVfdW5rbm93bl91bnNldCIsICAgTU9EX1BORCwgIE1PRF9DVEwsIENUTDJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VULCBQTyhjb250cm9sMikgfSwKKyAgeyAic3Vic3RpdHV0ZV91bnNldF9lbXB0eSIsICAgICBNT0RfUE5ELCAgTU9EX0NUTCwgQ1RMMl9TVUJTVElUVVRFX1VOU0VUX0VNUFRZLCBQTyhjb250cm9sMikgfSwKKyAgeyAidGFibGVzIiwgICAgICAgICAgICAgICAgICAgICBNT0RfUEFULCAgTU9EX0lOVCwgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIFBPKHRhYmxlc19pZCkgfSwKKyAgeyAidWNwIiwgICAgICAgICAgICAgICAgICAgICAgICBNT0RfUEFUUCwgTU9EX09QVCwgUENSRTJfVUNQLCAgICAgICAgICAgICAgICAgIFBPKG9wdGlvbnMpIH0sCisgIHsgInVuZ3JlZWR5IiwgICAgICAgICAgICAgICAgICAgTU9EX1BBVCwgIE1PRF9PUFQsIFBDUkUyX1VOR1JFRURZLCAgICAgICAgICAgICBQTyhvcHRpb25zKSB9LAorICB7ICJ1c2Vfb2Zmc2V0X2xpbWl0IiwgICAgICAgICAgIE1PRF9QQVQsICBNT0RfT1BULCBQQ1JFMl9VU0VfT0ZGU0VUX0xJTUlULCAgICAgUE8ob3B0aW9ucykgfSwKKyAgeyAidXRmIiwgICAgICAgICAgICAgICAgICAgICAgICBNT0RfUEFUUCwgTU9EX09QVCwgUENSRTJfVVRGLCAgICAgICAgICAgICAgICAgIFBPKG9wdGlvbnMpIH0sCisgIHsgInplcm9fdGVybWluYXRlIiwgICAgICAgICAgICAgTU9EX0RBVCwgIE1PRF9DVEwsIENUTF9aRVJPX1RFUk1JTkFURSwgICAgICAgICBETyhjb250cm9sKSB9Cit9OworCisjZGVmaW5lIE1PRExJU1RDT1VOVCBzaXplb2YobW9kbGlzdCkvc2l6ZW9mKG1vZHN0cnVjdCkKKworLyogQ29udHJvbHMgYW5kIG9wdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIGZvciB1c2Ugd2l0aCB0aGUgUE9TSVggaW50ZXJmYWNlLiAqLworCisjZGVmaW5lIFBPU0lYX1NVUFBPUlRFRF9DT01QSUxFX09QVElPTlMgKCBcCisgIFBDUkUyX0NBU0VMRVNTfFBDUkUyX0RPVEFMTHxQQ1JFMl9NVUxUSUxJTkV8UENSRTJfTk9fQVVUT19DQVBUVVJFfCBcCisgIFBDUkUyX1VDUHxQQ1JFMl9VVEZ8UENSRTJfVU5HUkVFRFkpCisKKyNkZWZpbmUgUE9TSVhfU1VQUE9SVEVEX0NPTVBJTEVfQ09OVFJPTFMgKCBcCisgIENUTF9BRlRFUlRFWFR8Q1RMX0FMTEFGVEVSVEVYVHxDVExfRVhQQU5EfENUTF9QT1NJWCkKKworI2RlZmluZSBQT1NJWF9TVVBQT1JURURfQ09NUElMRV9DT05UUk9MUzIgKDApCisKKyNkZWZpbmUgUE9TSVhfU1VQUE9SVEVEX01BVENIX09QVElPTlMgKCBcCisgIFBDUkUyX05PVEJPTHxQQ1JFMl9OT1RFTVBUWXxQQ1JFMl9OT1RFT0wpCisKKyNkZWZpbmUgUE9TSVhfU1VQUE9SVEVEX01BVENIX0NPTlRST0xTICAoQ1RMX0FGVEVSVEVYVHxDVExfQUxMQUZURVJURVhUKQorI2RlZmluZSBQT1NJWF9TVVBQT1JURURfTUFUQ0hfQ09OVFJPTFMyICgwKQorCisvKiBDb250cm9sIGJpdHMgdGhhdCBhcmUgbm90IGlnbm9yZWQgd2l0aCAncHVzaCcuICovCisKKyNkZWZpbmUgUFVTSF9TVVBQT1JURURfQ09NUElMRV9DT05UUk9MUyAoIFwKKyAgQ1RMX0JJTkNPREV8Q1RMX0NBTExPVVRfSU5GT3xDVExfRlVMTEJJTkNPREV8Q1RMX0hFWFBBVHxDVExfSU5GT3wgXAorICBDVExfSklUVkVSSUZZfENUTF9NRU1PUll8Q1RMX1BVU0h8Q1RMX0JTUl9TRVR8Q1RMX05MX1NFVCkKKworI2RlZmluZSBQVVNIX1NVUFBPUlRFRF9DT01QSUxFX0NPTlRST0xTMiAoMCkKKworLyogQ29udHJvbHMgdGhhdCBhcHBseSBvbmx5IGF0IGNvbXBpbGUgdGltZSB3aXRoICdwdXNoJy4gKi8KKworI2RlZmluZSBQVVNIX0NPTVBJTEVfT05MWV9DT05UUk9MUyAgIENUTF9KSVRWRVJJRlkKKyNkZWZpbmUgUFVTSF9DT01QSUxFX09OTFlfQ09OVFJPTFMyICAoMCkKKworLyogQ29udHJvbHMgdGhhdCBhcmUgZm9yYmlkZGVuIHdpdGggI3BvcC4gKi8KKworI2RlZmluZSBOT1RQT1BfQ09OVFJPTFMgKENUTF9IRVhQQVR8Q1RMX1BPU0lYfENUTF9QVVNIKQorCisvKiBQYXR0ZXJuIGNvbnRyb2xzIHRoYXQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gQXQgcHJlc2VudCB0aGVzZSBhcmUgYWxsIGluCit0aGUgZmlyc3QgY29udHJvbCB3b3JkLiAqLworCitzdGF0aWMgdWludDMyX3QgZXhjbHVzaXZlX3BhdF9jb250cm9sc1tdID0geworICBDVExfUE9TSVggIHwgQ1RMX0hFWFBBVCwKKyAgQ1RMX1BPU0lYICB8IENUTF9QVVNILAorICBDVExfRVhQQU5EIHwgQ1RMX0hFWFBBVCB9OworCisvKiBEYXRhIGNvbnRyb2xzIHRoYXQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gQXQgcHJlc2VudCB0aGVzZSBhcmUgYWxsIGluIHRoZQorZmlyc3QgY29udHJvbCB3b3JkLiAqLworc3RhdGljIHVpbnQzMl90IGV4Y2x1c2l2ZV9kYXRfY29udHJvbHNbXSA9IHsKKyAgQ1RMX0FMTFVTRURURVhUIHwgQ1RMX1NUQVJUQ0hBUiwKKyAgQ1RMX0ZJTkRMSU1JVFMgIHwgQ1RMX05VTExDT05URVhUIH07CisKKy8qIFRhYmxlIG9mIHNpbmdsZS1jaGFyYWN0ZXIgYWJicmV2aWF0ZWQgbW9kaWZpZXJzLiBUaGUgaW5kZXggZmllbGQgaXMKK2luaXRpYWxpemVkIHRvIC0xLCBidXQgdGhlIGZpcnN0IHRpbWUgdGhlIG1vZGlmaWVyIGlzIGVuY291bnRlcmVkLCBpdCBpcyBmaWxsZWQKK2luIHdpdGggdGhlIGluZGV4IG9mIHRoZSBmdWxsIGVudHJ5IGluIG1vZGxpc3QsIHRvIHNhdmUgcmVwZWF0ZWQgc2VhcmNoaW5nIHdoZW4KK3Byb2Nlc3NpbmcgbXVsdGlwbGUgdGVzdCBpdGVtcy4gVGhpcyBzaG9ydCBsaXN0IGlzIHNlYXJjaGVkIHNlcmlhbGx5LCBzbyBpdHMKK29yZGVyIGRvZXMgbm90IG1hdHRlci4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgYzFtb2RzdHJ1Y3QgeworICBjb25zdCBjaGFyICpmdWxsbmFtZTsKKyAgdWludDMyX3QgICAgb25lY2hhcjsKKyAgaW50ICAgICAgICAgaW5kZXg7Cit9IGMxbW9kc3RydWN0OworCitzdGF0aWMgYzFtb2RzdHJ1Y3QgYzFtb2RsaXN0W10gPSB7CisgIHsgImJpbmNvZGUiLCAgICAgICdCJywgICAgICAgICAgIC0xIH0sCisgIHsgImluZm8iLCAgICAgICAgICdJJywgICAgICAgICAgIC0xIH0sCisgIHsgImdsb2JhbCIsICAgICAgICdnJywgICAgICAgICAgIC0xIH0sCisgIHsgImNhc2VsZXNzIiwgICAgICdpJywgICAgICAgICAgIC0xIH0sCisgIHsgIm11bHRpbGluZSIsICAgICdtJywgICAgICAgICAgIC0xIH0sCisgIHsgImRvdGFsbCIsICAgICAgICdzJywgICAgICAgICAgIC0xIH0sCisgIHsgImV4dGVuZGVkIiwgICAgICd4JywgICAgICAgICAgIC0xIH0KK307CisKKyNkZWZpbmUgQzFNT0RMSVNUQ09VTlQgc2l6ZW9mKGMxbW9kbGlzdCkvc2l6ZW9mKGMxbW9kc3RydWN0KQorCisvKiBUYWJsZSBvZiBhcmd1bWVudHMgZm9yIHRoZSAtQyBjb21tYW5kIGxpbmUgb3B0aW9uLiBVc2UgbWFjcm9zIHRvIG1ha2UgdGhlCit0YWJsZSBpdHNlbGYgZWFzaWVyIHRvIHJlYWQuICovCisKKyNpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfOAorI2RlZmluZSBTVVBQT1JUXzggMQorI2VuZGlmCisjaWYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzE2CisjZGVmaW5lIFNVUFBPUlRfMTYgMQorI2VuZGlmCisjaWYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzMyCisjZGVmaW5lIFNVUFBPUlRfMzIgMQorI2VuZGlmCisKKyNpZm5kZWYgU1VQUE9SVF84CisjZGVmaW5lIFNVUFBPUlRfOCAwCisjZW5kaWYKKyNpZm5kZWYgU1VQUE9SVF8xNgorI2RlZmluZSBTVVBQT1JUXzE2IDAKKyNlbmRpZgorI2lmbmRlZiBTVVBQT1JUXzMyCisjZGVmaW5lIFNVUFBPUlRfMzIgMAorI2VuZGlmCisKKyNpZmRlZiBFQkNESUMKKyNkZWZpbmUgU1VQUE9SVF9FQkNESUMgMQorI2RlZmluZSBFQkNESUNfTkwgQ0hBUl9MRgorI2Vsc2UKKyNkZWZpbmUgU1VQUE9SVF9FQkNESUMgMAorI2RlZmluZSBFQkNESUNfTkwgMAorI2VuZGlmCisKKyNpZmRlZiBORVZFUl9CQUNLU0xBU0hfQworI2RlZmluZSBCQUNLU0xBU0hfQyAwCisjZWxzZQorI2RlZmluZSBCQUNLU0xBU0hfQyAxCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgY29wdHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHVpbnQzMl90ICAgIHR5cGU7CisgIHVpbnQzMl90ICAgIHZhbHVlOworfSBjb3B0c3RydWN0OworCitlbnVtIHsgQ09ORl9CU1IsCisgICAgICAgQ09ORl9GSVgsCisgICAgICAgQ09ORl9GSVosCisgICAgICAgQ09ORl9JTlQsCisgICAgICAgQ09ORl9OTAorfTsKKworc3RhdGljIGNvcHRzdHJ1Y3QgY29wdGxpc3RbXSA9IHsKKyAgeyAiYmFja3NsYXNoLUMiLCBDT05GX0ZJWCwgQkFDS1NMQVNIX0MgfSwKKyAgeyAiYnNyIiwgICAgICAgICBDT05GX0JTUiwgUENSRTJfQ09ORklHX0JTUiB9LAorICB7ICJlYmNkaWMiLCAgICAgIENPTkZfRklYLCBTVVBQT1JUX0VCQ0RJQyB9LAorICB7ICJlYmNkaWMtbmwiLCAgIENPTkZfRklaLCBFQkNESUNfTkwgfSwKKyAgeyAiaml0IiwgICAgICAgICBDT05GX0lOVCwgUENSRTJfQ09ORklHX0pJVCB9LAorICB7ICJsaW5rc2l6ZSIsICAgIENPTkZfSU5ULCBQQ1JFMl9DT05GSUdfTElOS1NJWkUgfSwKKyAgeyAibmV3bGluZSIsICAgICBDT05GX05MLCAgUENSRTJfQ09ORklHX05FV0xJTkUgfSwKKyAgeyAicGNyZTItMTYiLCAgICBDT05GX0ZJWCwgU1VQUE9SVF8xNiB9LAorICB7ICJwY3JlMi0zMiIsICAgIENPTkZfRklYLCBTVVBQT1JUXzMyIH0sCisgIHsgInBjcmUyLTgiLCAgICAgQ09ORl9GSVgsIFNVUFBPUlRfOCB9LAorICB7ICJ1bmljb2RlIiwgICAgIENPTkZfSU5ULCBQQ1JFMl9DT05GSUdfVU5JQ09ERSB9Cit9OworCisjZGVmaW5lIENPUFRMSVNUQ09VTlQgc2l6ZW9mKGNvcHRsaXN0KS9zaXplb2YoY29wdHN0cnVjdCkKKworI3VuZGVmIFNVUFBPUlRfOAorI3VuZGVmIFNVUFBPUlRfMTYKKyN1bmRlZiBTVVBQT1JUXzMyCisjdW5kZWYgU1VQUE9SVF9FQkNESUMKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdGF0aWMgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgRklMRSAqaW5maWxlOworc3RhdGljIEZJTEUgKm91dGZpbGU7CisKK3N0YXRpYyBjb25zdCB2b2lkICpsYXN0X2NhbGxvdXRfbWFyazsKK3N0YXRpYyBQQ1JFMl9KSVRfU1RBQ0sgKmppdF9zdGFjayA9IE5VTEw7CitzdGF0aWMgc2l6ZV90IGppdF9zdGFja19zaXplID0gMDsKKworc3RhdGljIEJPT0wgZmlyc3RfY2FsbG91dDsKK3N0YXRpYyBCT09MIGppdF93YXNfdXNlZDsKK3N0YXRpYyBCT09MIHJlc3RyaWN0X2Zvcl9wZXJsX3Rlc3QgPSBGQUxTRTsKK3N0YXRpYyBCT09MIHNob3dfbWVtb3J5ID0gRkFMU0U7CisKK3N0YXRpYyBpbnQgY29kZV91bml0X3NpemU7ICAgICAgICAgICAgICAgICAgICAvKiBCeXRlcyAqLworc3RhdGljIGludCBqaXRyYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBmcm9tIEpJVCBjb21waWxlICovCitzdGF0aWMgaW50IHRlc3RfbW9kZSA9IERFRkFVTFRfVEVTVF9NT0RFOworc3RhdGljIGludCB0aW1laXQgPSAwOworc3RhdGljIGludCB0aW1laXRtID0gMDsKKworY2xvY2tfdCB0b3RhbF9jb21waWxlX3RpbWUgPSAwOworY2xvY2tfdCB0b3RhbF9qaXRfY29tcGlsZV90aW1lID0gMDsKK2Nsb2NrX3QgdG90YWxfbWF0Y2hfdGltZSA9IDA7CisKK3N0YXRpYyB1aW50MzJfdCBkZmFfbWF0Y2hlZDsKK3N0YXRpYyB1aW50MzJfdCBmb3JiaWRfdXRmID0gMDsKK3N0YXRpYyB1aW50MzJfdCBtYXhsb29rYmVoaW5kOworc3RhdGljIHVpbnQzMl90IG1heF9vdmVjY291bnQ7CitzdGF0aWMgdWludDMyX3QgY2FsbG91dF9jb3VudDsKKworc3RhdGljIHVpbnQxNl90IGxvY2FsX25ld2xpbmVfZGVmYXVsdCA9IDA7CisKK3N0YXRpYyBWRVJTSU9OX1RZUEUgaml0dGFyZ2V0W1ZFUlNJT05fU0laRV07CitzdGF0aWMgVkVSU0lPTl9UWVBFIHZlcnNpb25bVkVSU0lPTl9TSVpFXTsKK3N0YXRpYyBWRVJTSU9OX1RZUEUgdXZlcnNpb25bVkVSU0lPTl9TSVpFXTsKKworc3RhdGljIHBhdGN0bCBkZWZfcGF0Y3RsOworc3RhdGljIHBhdGN0bCBwYXRfcGF0Y3RsOworc3RhdGljIGRhdGN0bCBkZWZfZGF0Y3RsOworc3RhdGljIGRhdGN0bCBkYXRfZGF0Y3RsOworCitzdGF0aWMgdm9pZCAqcGF0c3RhY2tbUEFUU1RBQ0tTSVpFXTsKK3N0YXRpYyBpbnQgcGF0c3RhY2tuZXh0ID0gMDsKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorc3RhdGljIHJlZ2V4X3QgcHJlZyA9IHsgTlVMTCwgTlVMTCwgMCwgMCB9OworI2VuZGlmCisKK3N0YXRpYyBpbnQgKmRmYV93b3Jrc3BhY2UgPSBOVUxMOworc3RhdGljIGNvbnN0IHVpbnQ4X3QgKmxvY2FsZV90YWJsZXMgPSBOVUxMOworc3RhdGljIHVpbnQ4X3QgbG9jYWxlX25hbWVbMzJdOworCisvKiBXZSBuZWVkIGJ1ZmZlcnMgZm9yIGJ1aWxkaW5nIDE2LzMyLWJpdCBzdHJpbmdzOyA4LWJpdCBzdHJpbmdzIGRvbid0IG5lZWQKK3JlYnVpbGRpbmcsIGJ1dCBzZXQgdXAgdGhlIHNhbWUgbmFtaW5nIHNjaGVtZSBmb3IgdXNlIGluIG1hY3Jvcy4gVGhlICJidWZmZXIiCitidWZmZXIgaXMgd2hlcmUgYWxsIGlucHV0IGxpbmVzIGFyZSByZWFkLiBJdHMgc2l6ZSBpcyB0aGUgc2FtZSBhcyBwYnVmZmVyOC4KK1BhdHRlcm4gbGluZXMgYXJlIGFsd2F5cyBjb3BpZWQgdG8gcGJ1ZmZlcjggZm9yIHVzZSBpbiBjYWxsb3V0cywgZXZlbiBpZiB0aGV5CithcmUgYWN0dWFsbHkgY29tcGlsZWQgZnJvbSBwYnVmZmVyMTYgb3IgcGJ1ZmZlcjMyLiAqLworCitzdGF0aWMgc2l6ZV90ICAgIHBidWZmZXI4X3NpemUgID0gNTAwMDA7ICAgICAgICAvKiBJbml0aWFsIHNpemUsIGJ5dGVzICovCitzdGF0aWMgdWludDhfdCAgKnBidWZmZXI4ID0gTlVMTDsKK3N0YXRpYyB1aW50OF90ICAqYnVmZmVyID0gTlVMTDsKKworLyogVGhlIGRidWZmZXIgaXMgd2hlcmUgYWxsIHByb2Nlc3NlZCBkYXRhIGxpbmVzIGFyZSBwdXQuIEluIG5vbi04LWJpdCBtb2RlcyBpdAoraXMgY2FzdCBhcyBuZWVkZWQuIEZvciBsb25nIGRhdGEgbGluZXMgaXQgZ3Jvd3MgYXMgbmVjZXNzYXJ5LiAqLworCitzdGF0aWMgc2l6ZV90IGRidWZmZXJfc2l6ZSA9IDF1IDw8IDE0OyAgICAvKiBJbml0aWFsIHNpemUsIGJ5dGVzICovCitzdGF0aWMgdWludDhfdCAqZGJ1ZmZlciA9IE5VTEw7CisKKworLyogLS0tLS0tLS0tLS0tLS0tLSBNb2RlLWRlcGVuZGVudCB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKK3N0YXRpYyBwY3JlMl9jb2RlXzggICAgICAgICAgICAgKmNvbXBpbGVkX2NvZGU4Oworc3RhdGljIHBjcmUyX2dlbmVyYWxfY29udGV4dF84ICAqZ2VuZXJhbF9jb250ZXh0OCwgKmdlbmVyYWxfY29udGV4dF9jb3B5ODsKK3N0YXRpYyBwY3JlMl9jb21waWxlX2NvbnRleHRfOCAgKnBhdF9jb250ZXh0OCwgKmRlZmF1bHRfcGF0X2NvbnRleHQ4Oworc3RhdGljIHBjcmUyX21hdGNoX2NvbnRleHRfOCAgICAqZGF0X2NvbnRleHQ4LCAqZGVmYXVsdF9kYXRfY29udGV4dDg7CitzdGF0aWMgcGNyZTJfbWF0Y2hfZGF0YV84ICAgICAgICptYXRjaF9kYXRhODsKKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorc3RhdGljIHBjcmUyX2NvZGVfMTYgICAgICAgICAgICAqY29tcGlsZWRfY29kZTE2Oworc3RhdGljIHBjcmUyX2dlbmVyYWxfY29udGV4dF8xNiAqZ2VuZXJhbF9jb250ZXh0MTYsICpnZW5lcmFsX2NvbnRleHRfY29weTE2Oworc3RhdGljIHBjcmUyX2NvbXBpbGVfY29udGV4dF8xNiAqcGF0X2NvbnRleHQxNiwgKmRlZmF1bHRfcGF0X2NvbnRleHQxNjsKK3N0YXRpYyBwY3JlMl9tYXRjaF9jb250ZXh0XzE2ICAgKmRhdF9jb250ZXh0MTYsICpkZWZhdWx0X2RhdF9jb250ZXh0MTY7CitzdGF0aWMgcGNyZTJfbWF0Y2hfZGF0YV8xNiAgICAgICptYXRjaF9kYXRhMTY7CitzdGF0aWMgUENSRTJfU0laRSBwYnVmZmVyMTZfc2l6ZSA9IDA7ICAgLyogU2V0IG9ubHkgd2hlbiBuZWVkZWQgKi8KK3N0YXRpYyB1aW50MTZfdCAqcGJ1ZmZlcjE2ID0gTlVMTDsKKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorc3RhdGljIHBjcmUyX2NvZGVfMzIgICAgICAgICAgICAqY29tcGlsZWRfY29kZTMyOworc3RhdGljIHBjcmUyX2dlbmVyYWxfY29udGV4dF8zMiAqZ2VuZXJhbF9jb250ZXh0MzIsICpnZW5lcmFsX2NvbnRleHRfY29weTMyOworc3RhdGljIHBjcmUyX2NvbXBpbGVfY29udGV4dF8zMiAqcGF0X2NvbnRleHQzMiwgKmRlZmF1bHRfcGF0X2NvbnRleHQzMjsKK3N0YXRpYyBwY3JlMl9tYXRjaF9jb250ZXh0XzMyICAgKmRhdF9jb250ZXh0MzIsICpkZWZhdWx0X2RhdF9jb250ZXh0MzI7CitzdGF0aWMgcGNyZTJfbWF0Y2hfZGF0YV8zMiAgICAgICptYXRjaF9kYXRhMzI7CitzdGF0aWMgUENSRTJfU0laRSBwYnVmZmVyMzJfc2l6ZSA9IDA7ICAgLyogU2V0IG9ubHkgd2hlbiBuZWVkZWQgKi8KK3N0YXRpYyB1aW50MzJfdCAqcGJ1ZmZlcjMyID0gTlVMTDsKKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0gTWFjcm9zIHRoYXQgd29yayBpbiBhbGwgbW9kZXMgLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBDQVNUOFZBUih4KSBDQVNUVkFSKHVpbnQ4X3QgKiwgeCkKKyNkZWZpbmUgU0VUKHgseSkgU0VUT1AoeCx5LD0pCisjZGVmaW5lIFNFVFBMVVMoeCx5KSBTRVRPUCh4LHksKz0pCisjZGVmaW5lIHN0cmxlbjgoeCkgc3RybGVuKChjaGFyICopeCkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tIE1vZGUtZGVwZW5kZW50LCBydW50aW1lLXRlc3RpbmcgbWFjcm9zIC0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIERlZmluZSBtYWNyb3MgZm9yIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHRoYXQgbXVzdCBiZSBzZWxlY3RlZCBkeW5hbWljYWxseQorZGVwZW5kaW5nIG9uIHRoZSBtb2RlIHNldHRpbmcgKDgsIDE2LCAzMikuIFRoZXNlIGFyZSBkZXBlbmRlbnQgb24gd2hpY2ggbW9kZXMKK2FyZSBzdXBwb3J0ZWQuICovCisKKyNpZiAoZGVmaW5lZCAoU1VQUE9SVF9QQ1JFMl84KSArIGRlZmluZWQgKFNVUFBPUlRfUENSRTJfMTYpICsgXAorICAgICBkZWZpbmVkIChTVVBQT1JUX1BDUkUyXzMyKSkgPj0gMgorCisvKiAtLS0tLSBBbGwgdGhyZWUgbW9kZXMgc3VwcG9ydGVkIC0tLS0tICovCisKKyNpZiBkZWZpbmVkKFNVUFBPUlRfUENSRTJfOCkgJiYgZGVmaW5lZChTVVBQT1JUX1BDUkUyXzE2KSAmJiBkZWZpbmVkKFNVUFBPUlRfUENSRTJfMzIpCisKKyNkZWZpbmUgQ0FTVEZMRCh0LGEsYikgKCh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSk/ICh0KShHKGEsOCktPmIpIDogXAorICAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKT8gKHQpKEcoYSwxNiktPmIpIDogKHQpKEcoYSwzMiktPmIpKQorCisjZGVmaW5lIENBU1RWQVIodCx4KSAoIFwKKyAgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKT8gKHQpRyh4LDgpIDogXAorICAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKT8gKHQpRyh4LDE2KSA6ICh0KUcoeCwzMikpCisKKyNkZWZpbmUgQ09ERV9VTklUKGEsYikgKCBcCisgICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSk/ICh1aW50MzJfdCkoKChQQ1JFMl9TUFRSOCkoYSkpW2JdKSA6IFwKKyAgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSk/ICh1aW50MzJfdCkoKChQQ1JFMl9TUFRSMTYpKGEpKVtiXSkgOiBcCisgICh1aW50MzJfdCkoKChQQ1JFMl9TUFRSMzIpKGEpKVtiXSkpCisKKyNkZWZpbmUgREFUQ1RYQ1BZKGEsYikgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICBtZW1jcHkoRyhhLDgpLEcoYiw4KSxzaXplb2YocGNyZTJfbWF0Y2hfY29udGV4dF84KSk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgbWVtY3B5KEcoYSwxNiksRyhiLDE2KSxzaXplb2YocGNyZTJfbWF0Y2hfY29udGV4dF8xNikpOyBcCisgIGVsc2UgbWVtY3B5KEcoYSwzMiksRyhiLDMyKSxzaXplb2YocGNyZTJfbWF0Y2hfY29udGV4dF8zMikpCisKKyNkZWZpbmUgRkxEKGEsYikgKCh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSk/IEcoYSw4KS0+YiA6IFwKKyAgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSk/IEcoYSwxNiktPmIgOiBHKGEsMzIpLT5iKQorCisjZGVmaW5lIFBBVENUWENQWShhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgbWVtY3B5KEcoYSw4KSxHKGIsOCksc2l6ZW9mKHBjcmUyX2NvbXBpbGVfY29udGV4dF84KSk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgbWVtY3B5KEcoYSwxNiksRyhiLDE2KSxzaXplb2YocGNyZTJfY29tcGlsZV9jb250ZXh0XzE2KSk7IFwKKyAgZWxzZSBtZW1jcHkoRyhhLDMyKSxHKGIsMzIpLHNpemVvZihwY3JlMl9jb21waWxlX2NvbnRleHRfMzIpKQorCisjZGVmaW5lIFBDSEFSUyhsdiwgcCwgb2Zmc2V0LCBsZW4sIHV0ZiwgZikgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkUzMl9NT0RFKSBcCisgICAgbHYgPSBwY2hhcnMzMigoUENSRTJfU1BUUjMyKShwKStvZmZzZXQsIGxlbiwgdXRmLCBmKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBsdiA9IHBjaGFyczE2KChQQ1JFMl9TUFRSMTYpKHApK29mZnNldCwgbGVuLCB1dGYsIGYpOyBcCisgIGVsc2UgXAorICAgIGx2ID0gcGNoYXJzOCgoUENSRTJfU1BUUjgpKHApK29mZnNldCwgbGVuLCB1dGYsIGYpCisKKyNkZWZpbmUgUENIQVJTVihwLCBvZmZzZXQsIGxlbiwgdXRmLCBmKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRTMyX01PREUpIFwKKyAgICAodm9pZClwY2hhcnMzMigoUENSRTJfU1BUUjMyKShwKStvZmZzZXQsIGxlbiwgdXRmLCBmKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICAodm9pZClwY2hhcnMxNigoUENSRTJfU1BUUjE2KShwKStvZmZzZXQsIGxlbiwgdXRmLCBmKTsgXAorICBlbHNlIFwKKyAgICAodm9pZClwY2hhcnM4KChQQ1JFMl9TUFRSOCkocCkrb2Zmc2V0LCBsZW4sIHV0ZiwgZikKKworI2RlZmluZSBQQ1JFMl9DQUxMT1VUX0VOVU1FUkFURShhLGIsYykgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICAgYSA9IHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlXzgoY29tcGlsZWRfY29kZTgsIFwKKyAgICAgICAoaW50ICgqKShzdHJ1Y3QgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2tfOCAqLCB2b2lkICopKWIsYyk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgIGEgPSBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV8xNihjb21waWxlZF9jb2RlMTYsIFwKKyAgICAgICAoaW50KCopKHN0cnVjdCBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9ja18xNiAqLCB2b2lkICopKWIsYyk7IFwKKyAgZWxzZSBcCisgICAgIGEgPSBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV8zMihjb21waWxlZF9jb2RlMzIsIFwKKyAgICAgICAoaW50ICgqKShzdHJ1Y3QgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2tfMzIgKiwgdm9pZCAqKSliLGMpCisKKyNkZWZpbmUgUENSRTJfQ09NUElMRShhLGIsYyxkLGUsZixnKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIEcoYSw4KSA9IHBjcmUyX2NvbXBpbGVfOChHKGIsOCksYyxkLGUsZixnKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBHKGEsMTYpID0gcGNyZTJfY29tcGlsZV8xNihHKGIsMTYpLGMsZCxlLGYsZyk7IFwKKyAgZWxzZSBcCisgICAgRyhhLDMyKSA9IHBjcmUyX2NvbXBpbGVfMzIoRyhiLDMyKSxjLGQsZSxmLGcpCisKKyNkZWZpbmUgUENSRTJfREZBX01BVENIKGEsYixjLGQsZSxmLGcsaCxpLGopIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgYSA9IHBjcmUyX2RmYV9tYXRjaF84KEcoYiw4KSwoUENSRTJfU1BUUjgpYyxkLGUsZixHKGcsOCksaCxpLGopOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9kZmFfbWF0Y2hfMTYoRyhiLDE2KSwoUENSRTJfU1BUUjE2KWMsZCxlLGYsRyhnLDE2KSxoLGksaik7IFwKKyAgZWxzZSBcCisgICAgYSA9IHBjcmUyX2RmYV9tYXRjaF8zMihHKGIsMzIpLChQQ1JFMl9TUFRSMzIpYyxkLGUsZixHKGcsMzIpLGgsaSxqKQorCisjZGVmaW5lIFBDUkUyX0dFVF9FUlJPUl9NRVNTQUdFKHIsYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIHIgPSBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZV84KGEsRyhiLDgpLEcoRyhiLDgpLF9zaXplKSk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgciA9IHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlXzE2KGEsRyhiLDE2KSxHKEcoYiwxNiksX3NpemUpKTsgXAorICBlbHNlIFwKKyAgICByID0gcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2VfMzIoYSxHKGIsMzIpLEcoRyhiLDMyKSxfc2l6ZSkpCisKKyNkZWZpbmUgUENSRTJfR0VUX09WRUNUT1JfQ09VTlQoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudF84KEcoYiw4KSk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgYSA9IHBjcmUyX2dldF9vdmVjdG9yX2NvdW50XzE2KEcoYiwxNikpOyBcCisgIGVsc2UgXAorICAgIGEgPSBwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudF8zMihHKGIsMzIpKQorCisjZGVmaW5lIFBDUkUyX0dFVF9TVEFSVENIQVIoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9nZXRfc3RhcnRjaGFyXzgoRyhiLDgpKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBhID0gcGNyZTJfZ2V0X3N0YXJ0Y2hhcl8xNihHKGIsMTYpKTsgXAorICBlbHNlIFwKKyAgICBhID0gcGNyZTJfZ2V0X3N0YXJ0Y2hhcl8zMihHKGIsMzIpKQorCisjZGVmaW5lIFBDUkUyX0pJVF9DT01QSUxFKHIsYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgciA9IHBjcmUyX2ppdF9jb21waWxlXzgoRyhhLDgpLGIpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgciA9IHBjcmUyX2ppdF9jb21waWxlXzE2KEcoYSwxNiksYik7IFwKKyAgZWxzZSByID0gcGNyZTJfaml0X2NvbXBpbGVfMzIoRyhhLDMyKSxiKQorCisjZGVmaW5lIFBDUkUyX0pJVF9GUkVFX1VOVVNFRF9NRU1PUlkoYSkgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnlfOChHKGEsOCkpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeV8xNihHKGEsMTYpKTsgXAorICBlbHNlIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnlfMzIoRyhhLDMyKSkKKworI2RlZmluZSBQQ1JFMl9KSVRfTUFUQ0goYSxiLGMsZCxlLGYsZyxoKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9qaXRfbWF0Y2hfOChHKGIsOCksKFBDUkUyX1NQVFI4KWMsZCxlLGYsRyhnLDgpLGgpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9qaXRfbWF0Y2hfMTYoRyhiLDE2KSwoUENSRTJfU1BUUjE2KWMsZCxlLGYsRyhnLDE2KSxoKTsgXAorICBlbHNlIFwKKyAgICBhID0gcGNyZTJfaml0X21hdGNoXzMyKEcoYiwzMiksKFBDUkUyX1NQVFIzMiljLGQsZSxmLEcoZywzMiksaCkKKworI2RlZmluZSBQQ1JFMl9KSVRfU1RBQ0tfQ1JFQVRFKGEsYixjLGQpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgYSA9IChQQ1JFMl9KSVRfU1RBQ0sgKilwY3JlMl9qaXRfc3RhY2tfY3JlYXRlXzgoYixjLGQpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIGEgPSAoUENSRTJfSklUX1NUQUNLICopcGNyZTJfaml0X3N0YWNrX2NyZWF0ZV8xNihiLGMsZCk7IFwKKyAgZWxzZSBcCisgICAgYSA9IChQQ1JFMl9KSVRfU1RBQ0sgKilwY3JlMl9qaXRfc3RhY2tfY3JlYXRlXzMyKGIsYyxkKTsKKworI2RlZmluZSBQQ1JFMl9KSVRfU1RBQ0tfQVNTSUdOKGEsYixjKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIHBjcmUyX2ppdF9zdGFja19hc3NpZ25fOChHKGEsOCksKHBjcmUyX2ppdF9jYWxsYmFja184KWIsYyk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgcGNyZTJfaml0X3N0YWNrX2Fzc2lnbl8xNihHKGEsMTYpLChwY3JlMl9qaXRfY2FsbGJhY2tfMTYpYixjKTsgXAorICBlbHNlIFwKKyAgICBwY3JlMl9qaXRfc3RhY2tfYXNzaWduXzMyKEcoYSwzMiksKHBjcmUyX2ppdF9jYWxsYmFja18zMiliLGMpOworCisjZGVmaW5lIFBDUkUyX0pJVF9TVEFDS19GUkVFKGEpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgcGNyZTJfaml0X3N0YWNrX2ZyZWVfOCgocGNyZTJfaml0X3N0YWNrXzggKilhKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBwY3JlMl9qaXRfc3RhY2tfZnJlZV8xNigocGNyZTJfaml0X3N0YWNrXzE2ICopYSk7IFwKKyAgZWxzZSBcCisgICAgcGNyZTJfaml0X3N0YWNrX2ZyZWVfMzIoKHBjcmUyX2ppdF9zdGFja18zMiAqKWEpOworCisjZGVmaW5lIFBDUkUyX01BS0VUQUJMRVMoYSkgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIGEgPSBwY3JlMl9tYWtldGFibGVzXzgoTlVMTCk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBhID0gcGNyZTJfbWFrZXRhYmxlc18xNihOVUxMKTsgXAorICBlbHNlIGEgPSBwY3JlMl9tYWtldGFibGVzXzMyKE5VTEwpCisKKyNkZWZpbmUgUENSRTJfTUFUQ0goYSxiLGMsZCxlLGYsZyxoKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9tYXRjaF84KEcoYiw4KSwoUENSRTJfU1BUUjgpYyxkLGUsZixHKGcsOCksaCk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgYSA9IHBjcmUyX21hdGNoXzE2KEcoYiwxNiksKFBDUkUyX1NQVFIxNiljLGQsZSxmLEcoZywxNiksaCk7IFwKKyAgZWxzZSBcCisgICAgYSA9IHBjcmUyX21hdGNoXzMyKEcoYiwzMiksKFBDUkUyX1NQVFIzMiljLGQsZSxmLEcoZywzMiksaCkKKworI2RlZmluZSBQQ1JFMl9NQVRDSF9EQVRBX0NSRUFURShhLGIsYykgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICBHKGEsOCkgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV84KGIsYyk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgRyhhLDE2KSA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlXzE2KGIsYyk7IFwKKyAgZWxzZSBcCisgICAgRyhhLDMyKSA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlXzMyKGIsYykKKworI2RlZmluZSBQQ1JFMl9NQVRDSF9EQVRBX0NSRUFURV9GUk9NX1BBVFRFUk4oYSxiLGMpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgRyhhLDgpID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuXzgoRyhiLDgpLGMpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIEcoYSwxNikgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV9mcm9tX3BhdHRlcm5fMTYoRyhiLDE2KSxjKTsgXAorICBlbHNlIFwKKyAgICBHKGEsMzIpID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuXzMyKEcoYiwzMiksYykKKworI2RlZmluZSBQQ1JFMl9NQVRDSF9EQVRBX0ZSRUUoYSkgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICBwY3JlMl9tYXRjaF9kYXRhX2ZyZWVfOChHKGEsOCkpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIHBjcmUyX21hdGNoX2RhdGFfZnJlZV8xNihHKGEsMTYpKTsgXAorICBlbHNlIFwKKyAgICBwY3JlMl9tYXRjaF9kYXRhX2ZyZWVfMzIoRyhhLDMyKSkKKworI2RlZmluZSBQQ1JFMl9QQVRURVJOX0lORk8oYSxiLGMsZCkgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICBhID0gcGNyZTJfcGF0dGVybl9pbmZvXzgoRyhiLDgpLGMsZCk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgYSA9IHBjcmUyX3BhdHRlcm5faW5mb18xNihHKGIsMTYpLGMsZCk7IFwKKyAgZWxzZSBcCisgICAgYSA9IHBjcmUyX3BhdHRlcm5faW5mb18zMihHKGIsMzIpLGMsZCkKKworI2RlZmluZSBQQ1JFMl9QUklOVElOVChhKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIHBjcmUyX3ByaW50aW50XzgoY29tcGlsZWRfY29kZTgsb3V0ZmlsZSxhKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBwY3JlMl9wcmludGludF8xNihjb21waWxlZF9jb2RlMTYsb3V0ZmlsZSxhKTsgXAorICBlbHNlIFwKKyAgICBwY3JlMl9wcmludGludF8zMihjb21waWxlZF9jb2RlMzIsb3V0ZmlsZSxhKQorCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9ERUNPREUocixhLGIsYyxkKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIHIgPSBwY3JlMl9zZXJpYWxpemVfZGVjb2RlXzgoKHBjcmUyX2NvZGVfOCAqKilhLGIsYyxHKGQsOCkpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIHIgPSBwY3JlMl9zZXJpYWxpemVfZGVjb2RlXzE2KChwY3JlMl9jb2RlXzE2ICoqKWEsYixjLEcoZCwxNikpOyBcCisgIGVsc2UgXAorICAgIHIgPSBwY3JlMl9zZXJpYWxpemVfZGVjb2RlXzMyKChwY3JlMl9jb2RlXzMyICoqKWEsYixjLEcoZCwzMikpCisKKyNkZWZpbmUgUENSRTJfU0VSSUFMSVpFX0VOQ09ERShyLGEsYixjLGQsZSkgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICByID0gcGNyZTJfc2VyaWFsaXplX2VuY29kZV84KChjb25zdCBwY3JlMl9jb2RlXzggKiopYSxiLGMsZCxHKGUsOCkpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIHIgPSBwY3JlMl9zZXJpYWxpemVfZW5jb2RlXzE2KChjb25zdCBwY3JlMl9jb2RlXzE2ICoqKWEsYixjLGQsRyhlLDE2KSk7IFwKKyAgZWxzZSBcCisgICAgciA9IHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGVfMzIoKGNvbnN0IHBjcmUyX2NvZGVfMzIgKiopYSxiLGMsZCxHKGUsMzIpKQorCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9GUkVFKGEpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgcGNyZTJfc2VyaWFsaXplX2ZyZWVfOChhKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBwY3JlMl9zZXJpYWxpemVfZnJlZV8xNihhKTsgXAorICBlbHNlIFwKKyAgICBwY3JlMl9zZXJpYWxpemVfZnJlZV8zMihhKQorCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9HRVRfTlVNQkVSX09GX0NPREVTKHIsYSkgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICByID0gcGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXNfOChhKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICByID0gcGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXNfMTYoYSk7IFwKKyAgZWxzZSBcCisgICAgciA9IHBjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzXzMyKGEpOyBcCisKKyNkZWZpbmUgUENSRTJfU0VUX0NBTExPVVQoYSxiLGMpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgcGNyZTJfc2V0X2NhbGxvdXRfOChHKGEsOCksKGludCAoKikocGNyZTJfY2FsbG91dF9ibG9ja184ICosIHZvaWQgKikpYixjKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBwY3JlMl9zZXRfY2FsbG91dF8xNihHKGEsMTYpLChpbnQgKCopKHBjcmUyX2NhbGxvdXRfYmxvY2tfMTYgKiwgdm9pZCAqKSliLGMpOyBcCisgIGVsc2UgXAorICAgIHBjcmUyX3NldF9jYWxsb3V0XzMyKEcoYSwzMiksKGludCAoKikocGNyZTJfY2FsbG91dF9ibG9ja18zMiAqLCB2b2lkICopKWIsYyk7CisKKyNkZWZpbmUgUENSRTJfU0VUX0NIQVJBQ1RFUl9UQUJMRVMoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzXzgoRyhhLDgpLGIpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzXzE2KEcoYSwxNiksYik7IFwKKyAgZWxzZSBcCisgICAgcGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXNfMzIoRyhhLDMyKSxiKQorCisjZGVmaW5lIFBDUkUyX1NFVF9DT01QSUxFX1JFQ1VSU0lPTl9HVUFSRChhLGIsYykgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICBwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmRfOChHKGEsOCksYixjKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmRfMTYoRyhhLDE2KSxiLGMpOyBcCisgIGVsc2UgXAorICAgIHBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZF8zMihHKGEsMzIpLGIsYykKKworI2RlZmluZSBQQ1JFMl9TRVRfTUFUQ0hfTElNSVQoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIHBjcmUyX3NldF9tYXRjaF9saW1pdF84KEcoYSw4KSxiKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBwY3JlMl9zZXRfbWF0Y2hfbGltaXRfMTYoRyhhLDE2KSxiKTsgXAorICBlbHNlIFwKKyAgICBwY3JlMl9zZXRfbWF0Y2hfbGltaXRfMzIoRyhhLDMyKSxiKQorCisjZGVmaW5lIFBDUkUyX1NFVF9NQVhfUEFUVEVSTl9MRU5HVEgoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIHBjcmUyX3NldF9tYXhfcGF0dGVybl9sZW5ndGhfOChHKGEsOCksYik7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgcGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aF8xNihHKGEsMTYpLGIpOyBcCisgIGVsc2UgXAorICAgIHBjcmUyX3NldF9tYXhfcGF0dGVybl9sZW5ndGhfMzIoRyhhLDMyKSxiKQorCisjZGVmaW5lIFBDUkUyX1NFVF9PRkZTRVRfTElNSVQoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIHBjcmUyX3NldF9vZmZzZXRfbGltaXRfOChHKGEsOCksYik7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgcGNyZTJfc2V0X29mZnNldF9saW1pdF8xNihHKGEsMTYpLGIpOyBcCisgIGVsc2UgXAorICAgIHBjcmUyX3NldF9vZmZzZXRfbGltaXRfMzIoRyhhLDMyKSxiKQorCisjZGVmaW5lIFBDUkUyX1NFVF9QQVJFTlNfTkVTVF9MSU1JVChhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgcGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0XzgoRyhhLDgpLGIpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIHBjcmUyX3NldF9wYXJlbnNfbmVzdF9saW1pdF8xNihHKGEsMTYpLGIpOyBcCisgIGVsc2UgXAorICAgIHBjcmUyX3NldF9wYXJlbnNfbmVzdF9saW1pdF8zMihHKGEsMzIpLGIpCisKKyNkZWZpbmUgUENSRTJfU0VUX1JFQ1VSU0lPTl9MSU1JVChhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgcGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdF84KEcoYSw4KSxiKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBwY3JlMl9zZXRfcmVjdXJzaW9uX2xpbWl0XzE2KEcoYSwxNiksYik7IFwKKyAgZWxzZSBcCisgICAgcGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdF8zMihHKGEsMzIpLGIpCisKKyNkZWZpbmUgUENSRTJfU1VCU1RJVFVURShhLGIsYyxkLGUsZixnLGgsaSxqLGssbCkgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICBhID0gcGNyZTJfc3Vic3RpdHV0ZV84KEcoYiw4KSwoUENSRTJfU1BUUjgpYyxkLGUsZixHKGcsOCksRyhoLDgpLCBcCisgICAgICAoUENSRTJfU1BUUjgpaSxqLChQQ1JFMl9VQ0hBUjggKilrLGwpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9zdWJzdGl0dXRlXzE2KEcoYiwxNiksKFBDUkUyX1NQVFIxNiljLGQsZSxmLEcoZywxNiksRyhoLDE2KSwgXAorICAgICAgKFBDUkUyX1NQVFIxNilpLGosKFBDUkUyX1VDSEFSMTYgKilrLGwpOyBcCisgIGVsc2UgXAorICAgIGEgPSBwY3JlMl9zdWJzdGl0dXRlXzMyKEcoYiwzMiksKFBDUkUyX1NQVFIzMiljLGQsZSxmLEcoZywzMiksRyhoLDMyKSwgXAorICAgICAgKFBDUkUyX1NQVFIzMilpLGosKFBDUkUyX1VDSEFSMzIgKilrLGwpCisKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0NPUFlfQllOQU1FKGEsYixjLGQsZSkgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICBhID0gcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lXzgoRyhiLDgpLEcoYyw4KSwoUENSRTJfVUNIQVI4ICopZCxlKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBhID0gcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnluYW1lXzE2KEcoYiwxNiksRyhjLDE2KSwoUENSRTJfVUNIQVIxNiAqKWQsZSk7IFwKKyAgZWxzZSBcCisgICAgYSA9IHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZV8zMihHKGIsMzIpLEcoYywzMiksKFBDUkUyX1VDSEFSMzIgKilkLGUpCisKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0NPUFlfQllOVU1CRVIoYSxiLGMsZCxlKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcl84KEcoYiw4KSxjLChQQ1JFMl9VQ0hBUjggKilkLGUpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcl8xNihHKGIsMTYpLGMsKFBDUkUyX1VDSEFSMTYgKilkLGUpOyBcCisgIGVsc2UgXAorICAgIGEgPSBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW51bWJlcl8zMihHKGIsMzIpLGMsKFBDUkUyX1VDSEFSMzIgKilkLGUpCisKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0ZSRUUoYSkgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIHBjcmUyX3N1YnN0cmluZ19mcmVlXzgoKFBDUkUyX1VDSEFSOCAqKWEpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIHBjcmUyX3N1YnN0cmluZ19mcmVlXzE2KChQQ1JFMl9VQ0hBUjE2ICopYSk7IFwKKyAgZWxzZSBwY3JlMl9zdWJzdHJpbmdfZnJlZV8zMigoUENSRTJfVUNIQVIzMiAqKWEpCisKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0dFVF9CWU5BTUUoYSxiLGMsZCxlKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZV84KEcoYiw4KSxHKGMsOCksKFBDUkUyX1VDSEFSOCAqKilkLGUpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZV8xNihHKGIsMTYpLEcoYywxNiksKFBDUkUyX1VDSEFSMTYgKiopZCxlKTsgXAorICBlbHNlIFwKKyAgICBhID0gcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWVfMzIoRyhiLDMyKSxHKGMsMzIpLChQQ1JFMl9VQ0hBUjMyICoqKWQsZSkKKworI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfR0VUX0JZTlVNQkVSKGEsYixjLGQsZSkgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIFwKKyAgICBhID0gcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcl84KEcoYiw4KSxjLChQQ1JFMl9VQ0hBUjggKiopZCxlKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBhID0gcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcl8xNihHKGIsMTYpLGMsKFBDUkUyX1VDSEFSMTYgKiopZCxlKTsgXAorICBlbHNlIFwKKyAgICBhID0gcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcl8zMihHKGIsMzIpLGMsKFBDUkUyX1VDSEFSMzIgKiopZCxlKQorCisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19MRU5HVEhfQllOQU1FKGEsYixjLGQpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgYSA9IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lXzgoRyhiLDgpLEcoYyw4KSxkKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBhID0gcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWVfMTYoRyhiLDE2KSxHKGMsMTYpLGQpOyBcCisgIGVsc2UgXAorICAgIGEgPSBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZV8zMihHKGIsMzIpLEcoYywzMiksZCkKKworI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfTEVOR1RIX0JZTlVNQkVSKGEsYixjLGQpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgYSA9IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXJfOChHKGIsOCksYyxkKTsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIFwKKyAgICBhID0gcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlcl8xNihHKGIsMTYpLGMsZCk7IFwKKyAgZWxzZSBcCisgICAgYSA9IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXJfMzIoRyhiLDMyKSxjLGQpCisKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0xJU1RfR0VUKGEsYixjLGQpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgYSA9IHBjcmUyX3N1YnN0cmluZ19saXN0X2dldF84KEcoYiw4KSwoUENSRTJfVUNIQVI4ICoqKiljLGQpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIGEgPSBwY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXRfMTYoRyhiLDE2KSwoUENSRTJfVUNIQVIxNiAqKiopYyxkKTsgXAorICBlbHNlIFwKKyAgICBhID0gcGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0XzMyKEcoYiwzMiksKFBDUkUyX1VDSEFSMzIgKioqKWMsZCkKKworI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfTElTVF9GUkVFKGEpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgcGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZV84KChQQ1JFMl9TUFRSOCAqKWEpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIHBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWVfMTYoKFBDUkUyX1NQVFIxNiAqKWEpOyBcCisgIGVsc2UgXAorICAgIHBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWVfMzIoKFBDUkUyX1NQVFIzMiAqKWEpCisKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX05VTUJFUl9GUk9NX05BTUUoYSxiLGMpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBcCisgICAgYSA9IHBjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lXzgoRyhiLDgpLEcoYyw4KSk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBcCisgICAgYSA9IHBjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lXzE2KEcoYiwxNiksRyhjLDE2KSk7IFwKKyAgZWxzZSBcCisgICAgYSA9IHBjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lXzMyKEcoYiwzMiksRyhjLDMyKSkKKworI2RlZmluZSBQVFIoeCkgKCBcCisgICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSk/ICh2b2lkICopRyh4LDgpIDogXAorICAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKT8gKHZvaWQgKilHKHgsMTYpIDogXAorICAodm9pZCAqKUcoeCwzMikpCisKKyNkZWZpbmUgU0VURkxEKHgseSx6KSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgRyh4LDgpLT55ID0gejsgXAorICBlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpIEcoeCwxNiktPnkgPSB6OyBcCisgIGVsc2UgRyh4LDMyKS0+eSA9IHoKKworI2RlZmluZSBTRVRGTERWRUMoeCx5LHYseikgXAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIEcoeCw4KS0+eVt2XSA9IHo7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBHKHgsMTYpLT55W3ZdID0gejsgXAorICBlbHNlIEcoeCwzMiktPnlbdl0gPSB6CisKKyNkZWZpbmUgU0VUT1AoeCx5LHopIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBHKHgsOCkgeiB5OyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgRyh4LDE2KSB6IHk7IFwKKyAgZWxzZSBHKHgsMzIpIHogeQorCisjZGVmaW5lIFNFVENBU1RQVFIoeCx5KSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgXAorICAgIEcoeCw4KSA9ICh1aW50OF90ICopKHkpOyBcCisgIGVsc2UgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgXAorICAgIEcoeCwxNikgPSAodWludDE2X3QgKikoeSk7IFwKKyAgZWxzZSBcCisgICAgRyh4LDMyKSA9ICh1aW50MzJfdCAqKSh5KQorCisjZGVmaW5lIFNUUkxFTihwKSAoKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKT8gKChpbnQpc3RybGVuKChjaGFyICopcCkpIDogXAorICAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKT8gKChpbnQpc3RybGVuMTYoKFBDUkUyX1NQVFIxNilwKSkgOiBcCisgICgoaW50KXN0cmxlbjMyKChQQ1JFMl9TUFRSMzIpcCkpKQorCisjZGVmaW5lIFNVQjEoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgRyhhLDgpKEcoYiw4KSk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBHKGEsMTYpKEcoYiwxNikpOyBcCisgIGVsc2UgRyhhLDMyKShHKGIsMzIpKQorCisjZGVmaW5lIFNVQjIoYSxiLGMpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSBHKGEsOCkoRyhiLDgpLEcoYyw4KSk7IFwKKyAgZWxzZSBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSBHKGEsMTYpKEcoYiwxNiksRyhjLDE2KSk7IFwKKyAgZWxzZSBHKGEsMzIpKEcoYiwzMiksRyhjLDMyKSkKKworI2RlZmluZSBURVNUKHgscix5KSAoIFwKKyAgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFICYmIEcoeCw4KSByICh5KSkgfHwgXAorICAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFICYmIEcoeCwxNikgciAoeSkpIHx8IFwKKyAgKHRlc3RfbW9kZSA9PSBQQ1JFMzJfTU9ERSAmJiBHKHgsMzIpIHIgKHkpKSkKKworI2RlZmluZSBURVNURkxEKHgsZixyLHkpICggXAorICAodGVzdF9tb2RlID09IFBDUkU4X01PREUgJiYgRyh4LDgpLT5mIHIgKHkpKSB8fCBcCisgICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUgJiYgRyh4LDE2KS0+ZiByICh5KSkgfHwgXAorICAodGVzdF9tb2RlID09IFBDUkUzMl9NT0RFICYmIEcoeCwzMiktPmYgciAoeSkpKQorCisKKworLyogLS0tLS0gVHdvIG91dCBvZiB0aHJlZSBtb2RlcyBhcmUgc3VwcG9ydGVkIC0tLS0tICovCisKKyNlbHNlCisKKy8qIFdlIGNhbiB1c2Ugc29tZSBtYWNybyB0cmlja2VyeSB0byBtYWtlIGEgc2luZ2xlIHNldCBvZiBkZWZpbml0aW9ucyB3b3JrIGluCit0aGUgdGhyZWUgZGlmZmVyZW50IGNhc2VzLiAqLworCisvKiAtLS0tLSAzMi1iaXQgYW5kIDE2LWJpdCBidXQgbm90IDgtYml0IHN1cHBvcnRlZCAtLS0tLSAqLworCisjaWYgZGVmaW5lZChTVVBQT1JUX1BDUkUyXzMyKSAmJiBkZWZpbmVkKFNVUFBPUlRfUENSRTJfMTYpCisjZGVmaW5lIEJJVE9ORSAzMgorI2RlZmluZSBCSVRUV08gMTYKKworLyogLS0tLS0gMzItYml0IGFuZCA4LWJpdCBidXQgbm90IDE2LWJpdCBzdXBwb3J0ZWQgLS0tLS0gKi8KKworI2VsaWYgZGVmaW5lZChTVVBQT1JUX1BDUkUyXzMyKSAmJiBkZWZpbmVkKFNVUFBPUlRfUENSRTJfOCkKKyNkZWZpbmUgQklUT05FIDMyCisjZGVmaW5lIEJJVFRXTyA4CisKKy8qIC0tLS0tIDE2LWJpdCBhbmQgOC1iaXQgYnV0IG5vdCAzMi1iaXQgc3VwcG9ydGVkIC0tLS0tICovCisKKyNlbHNlCisjZGVmaW5lIEJJVE9ORSAxNgorI2RlZmluZSBCSVRUV08gOAorI2VuZGlmCisKKworLyogLS0tLS0gQ29tbW9uIG1hY3JvcyBmb3IgdHdvLW1vZGUgY2FzZXMgLS0tLS0gKi8KKworI2RlZmluZSBDQVNURkxEKHQsYSxiKSBcCisgICgodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKT8gKHQpKEcoYSxCSVRPTkUpLT5iKSA6IFwKKyAgICAodCkoRyhhLEJJVFRXTyktPmIpKQorCisjZGVmaW5lIENBU1RWQVIodCx4KSAoIFwKKyAgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSk/IFwKKyAgICAodClHKHgsQklUT05FKSA6ICh0KUcoeCxCSVRUV08pKQorCisjZGVmaW5lIENPREVfVU5JVChhLGIpICggXAorICAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKT8gXAorICAodWludDMyX3QpKCgoRyhQQ1JFMl9TUFRSLEJJVE9ORSkpKGEpKVtiXSkgOiBcCisgICh1aW50MzJfdCkoKChHKFBDUkUyX1NQVFIsQklUVFdPKSkoYSkpW2JdKSkKKworI2RlZmluZSBEQVRDVFhDUFkoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBtZW1jcHkoRyhhLEJJVE9ORSksRyhiLEJJVE9ORSksc2l6ZW9mKEcocGNyZTJfbWF0Y2hfY29udGV4dF8sQklUT05FKSkpOyBcCisgIGVsc2UgXAorICAgIG1lbWNweShHKGEsQklUVFdPKSxHKGIsQklUVFdPKSxzaXplb2YoRyhwY3JlMl9tYXRjaF9jb250ZXh0XyxCSVRUV08pKSkKKworI2RlZmluZSBGTEQoYSxiKSBcCisgICgodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKT8gRyhhLEJJVE9ORSktPmIgOiBHKGEsQklUVFdPKS0+YikKKworI2RlZmluZSBQQVRDVFhDUFkoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBtZW1jcHkoRyhhLEJJVE9ORSksRyhiLEJJVE9ORSksc2l6ZW9mKEcocGNyZTJfY29tcGlsZV9jb250ZXh0XyxCSVRPTkUpKSk7IFwKKyAgZWxzZSBcCisgICAgbWVtY3B5KEcoYSxCSVRUV08pLEcoYixCSVRUV08pLHNpemVvZihHKHBjcmUyX2NvbXBpbGVfY29udGV4dF8sQklUVFdPKSkpCisKKyNkZWZpbmUgUENIQVJTKGx2LCBwLCBvZmZzZXQsIGxlbiwgdXRmLCBmKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBsdiA9IEcocGNoYXJzLEJJVE9ORSkoKEcoUENSRTJfU1BUUixCSVRPTkUpKShwKStvZmZzZXQsIGxlbiwgdXRmLCBmKTsgXAorICBlbHNlIFwKKyAgICBsdiA9IEcocGNoYXJzLEJJVFRXTykoKEcoUENSRTJfU1BUUixCSVRUV08pKShwKStvZmZzZXQsIGxlbiwgdXRmLCBmKQorCisjZGVmaW5lIFBDSEFSU1YocCwgb2Zmc2V0LCBsZW4sIHV0ZiwgZikgXAorICBpZiAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKSBcCisgICAgKHZvaWQpRyhwY2hhcnMsQklUT05FKSgoRyhQQ1JFMl9TUFRSLEJJVE9ORSkpKHApK29mZnNldCwgbGVuLCB1dGYsIGYpOyBcCisgIGVsc2UgXAorICAgICh2b2lkKUcocGNoYXJzLEJJVFRXTykoKEcoUENSRTJfU1BUUixCSVRUV08pKShwKStvZmZzZXQsIGxlbiwgdXRmLCBmKQorCisjZGVmaW5lIFBDUkUyX0NBTExPVVRfRU5VTUVSQVRFKGEsYixjKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICAgYSA9IEcocGNyZTJfY2FsbG91dF9lbnVtZXJhdGUsQklUT05FKShHKGNvbXBpbGVkX2NvZGUsQklUT05FKSwgXAorICAgICAgIChpbnQgKCopKHN0cnVjdCBHKHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrXyxCSVRPTkUpICosIHZvaWQgKikpYixjKTsgXAorICBlbHNlIFwKKyAgICAgYSA9IEcocGNyZTJfY2FsbG91dF9lbnVtZXJhdGUsQklUVFdPKShHKGNvbXBpbGVkX2NvZGUsQklUVFdPKSwgXAorICAgICAgIChpbnQgKCopKHN0cnVjdCBHKHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrXyxCSVRUV08pICosIHZvaWQgKikpYixjKQorCisjZGVmaW5lIFBDUkUyX0NPTVBJTEUoYSxiLGMsZCxlLGYsZykgXAorICBpZiAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKSBcCisgICAgRyhhLEJJVE9ORSkgPSBHKHBjcmUyX2NvbXBpbGVfLEJJVE9ORSkoRyhiLEJJVE9ORSksYyxkLGUsZixnKTsgXAorICBlbHNlIFwKKyAgICBHKGEsQklUVFdPKSA9IEcocGNyZTJfY29tcGlsZV8sQklUVFdPKShHKGIsQklUVFdPKSxjLGQsZSxmLGcpCisKKyNkZWZpbmUgUENSRTJfREZBX01BVENIKGEsYixjLGQsZSxmLGcsaCxpLGopIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIGEgPSBHKHBjcmUyX2RmYV9tYXRjaF8sQklUT05FKShHKGIsQklUT05FKSwoRyhQQ1JFMl9TUFRSLEJJVE9ORSkpYyxkLGUsZiwgXAorICAgICAgRyhnLEJJVE9ORSksaCxpLGopOyBcCisgIGVsc2UgXAorICAgIGEgPSBHKHBjcmUyX2RmYV9tYXRjaF8sQklUVFdPKShHKGIsQklUVFdPKSwoRyhQQ1JFMl9TUFRSLEJJVFRXTykpYyxkLGUsZiwgXAorICAgICAgRyhnLEJJVFRXTyksaCxpLGopCisKKyNkZWZpbmUgUENSRTJfR0VUX0VSUk9SX01FU1NBR0UocixhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIHIgPSBHKHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlXyxCSVRPTkUpKGEsRyhiLEJJVE9ORSksRyhHKGIsQklUT05FKSxfc2l6ZSkpOyBcCisgIGVsc2UgXAorICAgIHIgPSBHKHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlXyxCSVRUV08pKGEsRyhiLEJJVFRXTyksRyhHKGIsQklUVFdPKSxfc2l6ZSkpCisKKyNkZWZpbmUgUENSRTJfR0VUX09WRUNUT1JfQ09VTlQoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBhID0gRyhwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudF8sQklUT05FKShHKGIsQklUT05FKSk7IFwKKyAgZWxzZSBcCisgICAgYSA9IEcocGNyZTJfZ2V0X292ZWN0b3JfY291bnRfLEJJVFRXTykoRyhiLEJJVFRXTykpCisKKyNkZWZpbmUgUENSRTJfR0VUX1NUQVJUQ0hBUihhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIGEgPSBHKHBjcmUyX2dldF9zdGFydGNoYXJfLEJJVE9ORSkoRyhiLEJJVE9ORSkpOyBcCisgIGVsc2UgXAorICAgIGEgPSBHKHBjcmUyX2dldF9zdGFydGNoYXJfLEJJVFRXTykoRyhiLEJJVFRXTykpCisKKyNkZWZpbmUgUENSRTJfSklUX0NPTVBJTEUocixhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIHIgPSBHKHBjcmUyX2ppdF9jb21waWxlXyxCSVRPTkUpKEcoYSxCSVRPTkUpLGIpOyBcCisgIGVsc2UgXAorICAgIHIgPSBHKHBjcmUyX2ppdF9jb21waWxlXyxCSVRUV08pKEcoYSxCSVRUV08pLGIpCisKKyNkZWZpbmUgUENSRTJfSklUX0ZSRUVfVU5VU0VEX01FTU9SWShhKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBHKHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnlfLEJJVE9ORSkoRyhhLEJJVE9ORSkpOyBcCisgIGVsc2UgXAorICAgIEcocGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeV8sQklUVFdPKShHKGEsQklUVFdPKSkKKworI2RlZmluZSBQQ1JFMl9KSVRfTUFUQ0goYSxiLGMsZCxlLGYsZyxoKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBhID0gRyhwY3JlMl9qaXRfbWF0Y2hfLEJJVE9ORSkoRyhiLEJJVE9ORSksKEcoUENSRTJfU1BUUixCSVRPTkUpKWMsZCxlLGYsIFwKKyAgICAgIEcoZyxCSVRPTkUpLGgpOyBcCisgIGVsc2UgXAorICAgIGEgPSBHKHBjcmUyX2ppdF9tYXRjaF8sQklUVFdPKShHKGIsQklUVFdPKSwoRyhQQ1JFMl9TUFRSLEJJVFRXTykpYyxkLGUsZiwgXAorICAgICAgRyhnLEJJVFRXTyksaCkKKworI2RlZmluZSBQQ1JFMl9KSVRfU1RBQ0tfQ1JFQVRFKGEsYixjLGQpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIGEgPSAoUENSRTJfSklUX1NUQUNLICopRyhwY3JlMl9qaXRfc3RhY2tfY3JlYXRlXyxCSVRPTkUpKGIsYyxkKTsgXAorICBlbHNlIFwKKyAgICBhID0gKFBDUkUyX0pJVF9TVEFDSyAqKUcocGNyZTJfaml0X3N0YWNrX2NyZWF0ZV8sQklUVFdPKShiLGMsZCk7IFwKKworI2RlZmluZSBQQ1JFMl9KSVRfU1RBQ0tfQVNTSUdOKGEsYixjKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBHKHBjcmUyX2ppdF9zdGFja19hc3NpZ25fLEJJVE9ORSkoRyhhLEJJVE9ORSksKEcocGNyZTJfaml0X2NhbGxiYWNrXyxCSVRPTkUpKWIsYyk7IFwKKyAgZWxzZSBcCisgICAgRyhwY3JlMl9qaXRfc3RhY2tfYXNzaWduXyxCSVRUV08pKEcoYSxCSVRUV08pLChHKHBjcmUyX2ppdF9jYWxsYmFja18sQklUVFdPKSliLGMpOworCisjZGVmaW5lIFBDUkUyX0pJVF9TVEFDS19GUkVFKGEpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcocGNyZTJfaml0X3N0YWNrX2ZyZWVfLEJJVE9ORSkoKEcocGNyZTJfaml0X3N0YWNrXyxCSVRPTkUpICopYSk7IFwKKyAgZWxzZSBcCisgICAgRyhwY3JlMl9qaXRfc3RhY2tfZnJlZV8sQklUVFdPKSgoRyhwY3JlMl9qaXRfc3RhY2tfLEJJVFRXTykgKilhKTsKKworI2RlZmluZSBQQ1JFMl9NQUtFVEFCTEVTKGEpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIGEgPSBHKHBjcmUyX21ha2V0YWJsZXNfLEJJVE9ORSkoTlVMTCk7IFwKKyAgZWxzZSBcCisgICAgYSA9IEcocGNyZTJfbWFrZXRhYmxlc18sQklUVFdPKShOVUxMKQorCisjZGVmaW5lIFBDUkUyX01BVENIKGEsYixjLGQsZSxmLGcsaCkgXAorICBpZiAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKSBcCisgICAgYSA9IEcocGNyZTJfbWF0Y2hfLEJJVE9ORSkoRyhiLEJJVE9ORSksKEcoUENSRTJfU1BUUixCSVRPTkUpKWMsZCxlLGYsIFwKKyAgICAgIEcoZyxCSVRPTkUpLGgpOyBcCisgIGVsc2UgXAorICAgIGEgPSBHKHBjcmUyX21hdGNoXyxCSVRUV08pKEcoYixCSVRUV08pLChHKFBDUkUyX1NQVFIsQklUVFdPKSljLGQsZSxmLCBcCisgICAgICBHKGcsQklUVFdPKSxoKQorCisjZGVmaW5lIFBDUkUyX01BVENIX0RBVEFfQ1JFQVRFKGEsYixjKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBHKGEsQklUT05FKSA9IEcocGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfLEJJVE9ORSkoYixjKTsgXAorICBlbHNlIFwKKyAgICBHKGEsQklUVFdPKSA9IEcocGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfLEJJVFRXTykoYixjKQorCisjZGVmaW5lIFBDUkUyX01BVENIX0RBVEFfQ1JFQVRFX0ZST01fUEFUVEVSTihhLGIsYykgXAorICBpZiAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKSBcCisgICAgRyhhLEJJVE9ORSkgPSBHKHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybl8sQklUT05FKShHKGIsQklUT05FKSxjKTsgXAorICBlbHNlIFwKKyAgICBHKGEsQklUVFdPKSA9IEcocGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuXyxCSVRUV08pKEcoYixCSVRUV08pLGMpCisKKyNkZWZpbmUgUENSRTJfTUFUQ0hfREFUQV9GUkVFKGEpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcocGNyZTJfbWF0Y2hfZGF0YV9mcmVlXyxCSVRPTkUpKEcoYSxCSVRPTkUpKTsgXAorICBlbHNlIFwKKyAgICBHKHBjcmUyX21hdGNoX2RhdGFfZnJlZV8sQklUVFdPKShHKGEsQklUVFdPKSkKKworI2RlZmluZSBQQ1JFMl9QQVRURVJOX0lORk8oYSxiLGMsZCkgXAorICBpZiAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKSBcCisgICAgYSA9IEcocGNyZTJfcGF0dGVybl9pbmZvXyxCSVRPTkUpKEcoYixCSVRPTkUpLGMsZCk7IFwKKyAgZWxzZSBcCisgICAgYSA9IEcocGNyZTJfcGF0dGVybl9pbmZvXyxCSVRUV08pKEcoYixCSVRUV08pLGMsZCkKKworI2RlZmluZSBQQ1JFMl9QUklOVElOVChhKSBcCisgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcocGNyZTJfcHJpbnRpbnRfLEJJVE9ORSkoRyhjb21waWxlZF9jb2RlLEJJVE9ORSksb3V0ZmlsZSxhKTsgXAorICBlbHNlIFwKKyAgICBHKHBjcmUyX3ByaW50aW50XyxCSVRUV08pKEcoY29tcGlsZWRfY29kZSxCSVRUV08pLG91dGZpbGUsYSkKKworI2RlZmluZSBQQ1JFMl9TRVJJQUxJWkVfREVDT0RFKHIsYSxiLGMsZCkgXAorIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICByID0gRyhwY3JlMl9zZXJpYWxpemVfZGVjb2RlXyxCSVRPTkUpKChHKHBjcmUyX2NvZGVfLEJJVE9ORSkgKiopYSxiLGMsRyhkLEJJVE9ORSkpOyBcCisgIGVsc2UgXAorICAgIHIgPSBHKHBjcmUyX3NlcmlhbGl6ZV9kZWNvZGVfLEJJVFRXTykoKEcocGNyZTJfY29kZV8sQklUVFdPKSAqKilhLGIsYyxHKGQsQklUVFdPKSkKKworI2RlZmluZSBQQ1JFMl9TRVJJQUxJWkVfRU5DT0RFKHIsYSxiLGMsZCxlKSBcCisgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIHIgPSBHKHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGVfLEJJVE9ORSkoKEcoY29uc3QgcGNyZTJfY29kZV8sQklUT05FKSAqKilhLGIsYyxkLEcoZSxCSVRPTkUpKTsgXAorICBlbHNlIFwKKyAgICByID0gRyhwY3JlMl9zZXJpYWxpemVfZW5jb2RlXyxCSVRUV08pKChHKGNvbnN0IHBjcmUyX2NvZGVfLEJJVFRXTykgKiopYSxiLGMsZCxHKGUsQklUVFdPKSkKKworI2RlZmluZSBQQ1JFMl9TRVJJQUxJWkVfRlJFRShhKSBcCisgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcocGNyZTJfc2VyaWFsaXplX2ZyZWVfLEJJVE9ORSkoYSk7IFwKKyAgZWxzZSBcCisgICAgRyhwY3JlMl9zZXJpYWxpemVfZnJlZV8sQklUVFdPKShhKQorCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9HRVRfTlVNQkVSX09GX0NPREVTKHIsYSkgXAorIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICByID0gRyhwY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlc18sQklUT05FKShhKTsgXAorICBlbHNlIFwKKyAgICByID0gRyhwY3JlMl9zZXJpYWxpemVfZ2V0X251bWJlcl9vZl9jb2Rlc18sQklUVFdPKShhKQorCisjZGVmaW5lIFBDUkUyX1NFVF9DQUxMT1VUKGEsYixjKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBHKHBjcmUyX3NldF9jYWxsb3V0XyxCSVRPTkUpKEcoYSxCSVRPTkUpLCBcCisgICAgICAoaW50ICgqKShHKHBjcmUyX2NhbGxvdXRfYmxvY2tfLEJJVE9ORSkgKiwgdm9pZCAqKSliLGMpOyBcCisgIGVsc2UgXAorICAgIEcocGNyZTJfc2V0X2NhbGxvdXRfLEJJVFRXTykoRyhhLEJJVFRXTyksIFwKKyAgICAgIChpbnQgKCopKEcocGNyZTJfY2FsbG91dF9ibG9ja18sQklUVFdPKSAqLCB2b2lkICopKWIsYyk7CisKKyNkZWZpbmUgUENSRTJfU0VUX0NIQVJBQ1RFUl9UQUJMRVMoYSxiKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBHKHBjcmUyX3NldF9jaGFyYWN0ZXJfdGFibGVzXyxCSVRPTkUpKEcoYSxCSVRPTkUpLGIpOyBcCisgIGVsc2UgXAorICAgIEcocGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXNfLEJJVFRXTykoRyhhLEJJVFRXTyksYikKKworI2RlZmluZSBQQ1JFMl9TRVRfQ09NUElMRV9SRUNVUlNJT05fR1VBUkQoYSxiLGMpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcocGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkXyxCSVRPTkUpKEcoYSxCSVRPTkUpLGIsYyk7IFwKKyAgZWxzZSBcCisgICAgRyhwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmRfLEJJVFRXTykoRyhhLEJJVFRXTyksYixjKQorCisjZGVmaW5lIFBDUkUyX1NFVF9NQVRDSF9MSU1JVChhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcocGNyZTJfc2V0X21hdGNoX2xpbWl0XyxCSVRPTkUpKEcoYSxCSVRPTkUpLGIpOyBcCisgIGVsc2UgXAorICAgIEcocGNyZTJfc2V0X21hdGNoX2xpbWl0XyxCSVRUV08pKEcoYSxCSVRUV08pLGIpCisKKyNkZWZpbmUgUENSRTJfU0VUX01BWF9QQVRURVJOX0xFTkdUSChhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcocGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aF8sQklUT05FKShHKGEsQklUT05FKSxiKTsgXAorICBlbHNlIFwKKyAgICBHKHBjcmUyX3NldF9tYXhfcGF0dGVybl9sZW5ndGhfLEJJVFRXTykoRyhhLEJJVFRXTyksYikKKworI2RlZmluZSBQQ1JFMl9TRVRfT0ZGU0VUX0xJTUlUKGEsYikgXAorICBpZiAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKSBcCisgICAgRyhwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0XyxCSVRPTkUpKEcoYSxCSVRPTkUpLGIpOyBcCisgIGVsc2UgXAorICAgIEcocGNyZTJfc2V0X29mZnNldF9saW1pdF8sQklUVFdPKShHKGEsQklUVFdPKSxiKQorCisjZGVmaW5lIFBDUkUyX1NFVF9QQVJFTlNfTkVTVF9MSU1JVChhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcocGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0XyxCSVRPTkUpKEcoYSxCSVRPTkUpLGIpOyBcCisgIGVsc2UgXAorICAgIEcocGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0XyxCSVRUV08pKEcoYSxCSVRUV08pLGIpCisKKyNkZWZpbmUgUENSRTJfU0VUX1JFQ1VSU0lPTl9MSU1JVChhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcocGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdF8sQklUT05FKShHKGEsQklUT05FKSxiKTsgXAorICBlbHNlIFwKKyAgICBHKHBjcmUyX3NldF9yZWN1cnNpb25fbGltaXRfLEJJVFRXTykoRyhhLEJJVFRXTyksYikKKworI2RlZmluZSBQQ1JFMl9TVUJTVElUVVRFKGEsYixjLGQsZSxmLGcsaCxpLGosayxsKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBhID0gRyhwY3JlMl9zdWJzdGl0dXRlXyxCSVRPTkUpKEcoYixCSVRPTkUpLChHKFBDUkUyX1NQVFIsQklUT05FKSljLGQsZSxmLCBcCisgICAgICBHKGcsQklUT05FKSxHKGgsQklUT05FKSwoRyhQQ1JFMl9TUFRSLEJJVE9ORSkpaSxqLCBcCisgICAgICAoRyhQQ1JFMl9VQ0hBUixCSVRPTkUpICopayxsKTsgXAorICBlbHNlIFwKKyAgICBhID0gRyhwY3JlMl9zdWJzdGl0dXRlXyxCSVRUV08pKEcoYixCSVRUV08pLChHKFBDUkUyX1NQVFIsQklUVFdPKSljLGQsZSxmLCBcCisgICAgICBHKGcsQklUVFdPKSxHKGgsQklUVFdPKSwoRyhQQ1JFMl9TUFRSLEJJVFRXTykpaSxqLCBcCisgICAgICAoRyhQQ1JFMl9VQ0hBUixCSVRUV08pICopayxsKQorCisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19DT1BZX0JZTkFNRShhLGIsYyxkLGUpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIGEgPSBHKHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZV8sQklUT05FKShHKGIsQklUT05FKSxHKGMsQklUT05FKSxcCisgICAgICAoRyhQQ1JFMl9VQ0hBUixCSVRPTkUpICopZCxlKTsgXAorICBlbHNlIFwKKyAgICBhID0gRyhwY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWVfLEJJVFRXTykoRyhiLEJJVFRXTyksRyhjLEJJVFRXTyksXAorICAgICAgKEcoUENSRTJfVUNIQVIsQklUVFdPKSAqKWQsZSkKKworI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfQ09QWV9CWU5VTUJFUihhLGIsYyxkLGUpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIGEgPSBHKHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyXyxCSVRPTkUpKEcoYixCSVRPTkUpLGMsXAorICAgICAgKEcoUENSRTJfVUNIQVIsQklUT05FKSAqKWQsZSk7IFwKKyAgZWxzZSBcCisgICAgYSA9IEcocGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXJfLEJJVFRXTykoRyhiLEJJVFRXTyksYyxcCisgICAgICAoRyhQQ1JFMl9VQ0hBUixCSVRUV08pICopZCxlKQorCisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19GUkVFKGEpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcocGNyZTJfc3Vic3RyaW5nX2ZyZWVfLEJJVE9ORSkoKEcoUENSRTJfVUNIQVIsQklUT05FKSAqKWEpOyBcCisgIGVsc2UgRyhwY3JlMl9zdWJzdHJpbmdfZnJlZV8sQklUVFdPKSgoRyhQQ1JFMl9VQ0hBUixCSVRUV08pICopYSkKKworI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfR0VUX0JZTkFNRShhLGIsYyxkLGUpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIGEgPSBHKHBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lXyxCSVRPTkUpKEcoYixCSVRPTkUpLEcoYyxCSVRPTkUpLFwKKyAgICAgIChHKFBDUkUyX1VDSEFSLEJJVE9ORSkgKiopZCxlKTsgXAorICBlbHNlIFwKKyAgICBhID0gRyhwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZV8sQklUVFdPKShHKGIsQklUVFdPKSxHKGMsQklUVFdPKSxcCisgICAgICAoRyhQQ1JFMl9VQ0hBUixCSVRUV08pICoqKWQsZSkKKworI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfR0VUX0JZTlVNQkVSKGEsYixjLGQsZSkgXAorICBpZiAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKSBcCisgICAgYSA9IEcocGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcl8sQklUT05FKShHKGIsQklUT05FKSxjLFwKKyAgICAgIChHKFBDUkUyX1VDSEFSLEJJVE9ORSkgKiopZCxlKTsgXAorICBlbHNlIFwKKyAgICBhID0gRyhwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bnVtYmVyXyxCSVRUV08pKEcoYixCSVRUV08pLGMsXAorICAgICAgKEcoUENSRTJfVUNIQVIsQklUVFdPKSAqKilkLGUpCisKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0xFTkdUSF9CWU5BTUUoYSxiLGMsZCkgXAorICBpZiAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKSBcCisgICAgYSA9IEcocGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWVfLEJJVE9ORSkoRyhiLEJJVE9ORSksRyhjLEJJVE9ORSksZCk7IFwKKyAgZWxzZSBcCisgICAgYSA9IEcocGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW5hbWVfLEJJVFRXTykoRyhiLEJJVFRXTyksRyhjLEJJVFRXTyksZCkKKworI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfTEVOR1RIX0JZTlVNQkVSKGEsYixjLGQpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIGEgPSBHKHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXJfLEJJVE9ORSkoRyhiLEJJVE9ORSksYyxkKTsgXAorICBlbHNlIFwKKyAgICBhID0gRyhwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bnVtYmVyXyxCSVRUV08pKEcoYixCSVRUV08pLGMsZCkKKworI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfTElTVF9HRVQoYSxiLGMsZCkgXAorICBpZiAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKSBcCisgICAgYSA9IEcocGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0XyxCSVRPTkUpKEcoYixCSVRPTkUpLCBcCisgICAgICAoRyhQQ1JFMl9VQ0hBUixCSVRPTkUpICoqKiljLGQpOyBcCisgIGVsc2UgXAorICAgIGEgPSBHKHBjcmUyX3N1YnN0cmluZ19saXN0X2dldF8sQklUVFdPKShHKGIsQklUVFdPKSwgXAorICAgICAgKEcoUENSRTJfVUNIQVIsQklUVFdPKSAqKiopYyxkKQorCisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19MSVNUX0ZSRUUoYSkgXAorICBpZiAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKSBcCisgICAgRyhwY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlXyxCSVRPTkUpKChHKFBDUkUyX1NQVFIsQklUT05FKSAqKWEpOyBcCisgIGVsc2UgXAorICAgIEcocGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZV8sQklUVFdPKSgoRyhQQ1JFMl9TUFRSLEJJVFRXTykgKilhKQorCisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19OVU1CRVJfRlJPTV9OQU1FKGEsYixjKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBhID0gRyhwY3JlMl9zdWJzdHJpbmdfbnVtYmVyX2Zyb21fbmFtZV8sQklUT05FKShHKGIsQklUT05FKSxHKGMsQklUT05FKSk7IFwKKyAgZWxzZSBcCisgICAgYSA9IEcocGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWVfLEJJVFRXTykoRyhiLEJJVFRXTyksRyhjLEJJVFRXTykpCisKKyNkZWZpbmUgUFRSKHgpICggXAorICAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKT8gKHZvaWQgKilHKHgsQklUT05FKSA6IFwKKyAgKHZvaWQgKilHKHgsQklUVFdPKSkKKworI2RlZmluZSBTRVRGTEQoeCx5LHopIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgRyh4LEJJVE9ORSktPnkgPSB6OyBcCisgIGVsc2UgRyh4LEJJVFRXTyktPnkgPSB6CisKKyNkZWZpbmUgU0VURkxEVkVDKHgseSx2LHopIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgRyh4LEJJVE9ORSktPnlbdl0gPSB6OyBcCisgIGVsc2UgRyh4LEJJVFRXTyktPnlbdl0gPSB6CisKKyNkZWZpbmUgU0VUT1AoeCx5LHopIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgRyh4LEJJVE9ORSkgeiB5OyBcCisgIGVsc2UgRyh4LEJJVFRXTykgeiB5CisKKyNkZWZpbmUgU0VUQ0FTVFBUUih4LHkpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcoeCxCSVRPTkUpID0gKEcoRyh1aW50LEJJVE9ORSksX3QpICopKHkpOyBcCisgIGVsc2UgXAorICAgIEcoeCxCSVRUV08pID0gKEcoRyh1aW50LEJJVFRXTyksX3QpICopKHkpCisKKyNkZWZpbmUgU1RSTEVOKHApICgodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpKT8gXAorICBHKHN0cmxlbixCSVRPTkUpKChHKFBDUkUyX1NQVFIsQklUT05FKSlwKSA6IFwKKyAgRyhzdHJsZW4sQklUVFdPKSgoRyhQQ1JFMl9TUFRSLEJJVFRXTykpcCkpCisKKyNkZWZpbmUgU1VCMShhLGIpIFwKKyAgaWYgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSkgXAorICAgIEcoYSxCSVRPTkUpKEcoYixCSVRPTkUpKTsgXAorICBlbHNlIFwKKyAgICBHKGEsQklUVFdPKShHKGIsQklUVFdPKSkKKworI2RlZmluZSBTVUIyKGEsYixjKSBcCisgIGlmICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUT05FKSxfTU9ERSkpIFwKKyAgICBHKGEsQklUT05FKSkoRyhiLEJJVE9ORSksRyhjLEJJVE9ORSkpOyBcCisgIGVsc2UgXAorICAgIEcoYSxCSVRUV08pKShHKGIsQklUVFdPKSxHKGMsQklUVFdPKSkKKworI2RlZmluZSBURVNUKHgscix5KSAoIFwKKyAgKHRlc3RfbW9kZSA9PSBHKEcoUENSRSxCSVRPTkUpLF9NT0RFKSAmJiBHKHgsQklUT05FKSByICh5KSkgfHwgXAorICAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVFRXTyksX01PREUpICYmIEcoeCxCSVRUV08pIHIgKHkpKSkKKworI2RlZmluZSBURVNURkxEKHgsZixyLHkpICggXAorICAodGVzdF9tb2RlID09IEcoRyhQQ1JFLEJJVE9ORSksX01PREUpICYmIEcoeCxCSVRPTkUpLT5mIHIgKHkpKSB8fCBcCisgICh0ZXN0X21vZGUgPT0gRyhHKFBDUkUsQklUVFdPKSxfTU9ERSkgJiYgRyh4LEJJVFRXTyktPmYgciAoeSkpKQorCisKKyNlbmRpZiAgLyogVHdvIG91dCBvZiB0aHJlZSBtb2RlcyAqLworCisvKiAtLS0tLSBFbmQgb2YgY2FzZXMgd2hlcmUgbW9yZSB0aGFuIG9uZSBtb2RlIGlzIHN1cHBvcnRlZCAtLS0tLSAqLworCisKKy8qIC0tLS0tIE9ubHkgOC1iaXQgbW9kZSBpcyBzdXBwb3J0ZWQgLS0tLS0gKi8KKworI2VsaWYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzgKKyNkZWZpbmUgQ0FTVEZMRCh0LGEsYikgKHQpKEcoYSw4KS0+YikKKyNkZWZpbmUgQ0FTVFZBUih0LHgpICh0KUcoeCw4KQorI2RlZmluZSBDT0RFX1VOSVQoYSxiKSAodWludDMyX3QpKCgoUENSRTJfU1BUUjgpKGEpKVtiXSkKKyNkZWZpbmUgREFUQ1RYQ1BZKGEsYikgbWVtY3B5KEcoYSw4KSxHKGIsOCksc2l6ZW9mKHBjcmUyX21hdGNoX2NvbnRleHRfOCkpCisjZGVmaW5lIEZMRChhLGIpIEcoYSw4KS0+YgorI2RlZmluZSBQQVRDVFhDUFkoYSxiKSBtZW1jcHkoRyhhLDgpLEcoYiw4KSxzaXplb2YocGNyZTJfY29tcGlsZV9jb250ZXh0XzgpKQorI2RlZmluZSBQQ0hBUlMobHYsIHAsIG9mZnNldCwgbGVuLCB1dGYsIGYpIFwKKyAgbHYgPSBwY2hhcnM4KChQQ1JFMl9TUFRSOCkocCkrb2Zmc2V0LCBsZW4sIHV0ZiwgZikKKyNkZWZpbmUgUENIQVJTVihwLCBvZmZzZXQsIGxlbiwgdXRmLCBmKSBcCisgICh2b2lkKXBjaGFyczgoKFBDUkUyX1NQVFI4KShwKStvZmZzZXQsIGxlbiwgdXRmLCBmKQorI2RlZmluZSBQQ1JFMl9DQUxMT1VUX0VOVU1FUkFURShhLGIsYykgXAorICAgYSA9IHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlXzgoY29tcGlsZWRfY29kZTgsIFwKKyAgICAgKGludCAoKikoc3RydWN0IHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrXzggKiwgdm9pZCAqKSliLGMpCisjZGVmaW5lIFBDUkUyX0NPTVBJTEUoYSxiLGMsZCxlLGYsZykgXAorICBHKGEsOCkgPSBwY3JlMl9jb21waWxlXzgoRyhiLDgpLGMsZCxlLGYsZykKKyNkZWZpbmUgUENSRTJfREZBX01BVENIKGEsYixjLGQsZSxmLGcsaCxpLGopIFwKKyAgYSA9IHBjcmUyX2RmYV9tYXRjaF84KEcoYiw4KSwoUENSRTJfU1BUUjgpYyxkLGUsZixHKGcsOCksaCxpLGopCisjZGVmaW5lIFBDUkUyX0dFVF9FUlJPUl9NRVNTQUdFKHIsYSxiKSBcCisgIHIgPSBwY3JlMl9nZXRfZXJyb3JfbWVzc2FnZV84KGEsRyhiLDgpLEcoRyhiLDgpLF9zaXplKSkKKyNkZWZpbmUgUENSRTJfR0VUX09WRUNUT1JfQ09VTlQoYSxiKSBhID0gcGNyZTJfZ2V0X292ZWN0b3JfY291bnRfOChHKGIsOCkpCisjZGVmaW5lIFBDUkUyX0dFVF9TVEFSVENIQVIoYSxiKSBhID0gcGNyZTJfZ2V0X3N0YXJ0Y2hhcl84KEcoYiw4KSkKKyNkZWZpbmUgUENSRTJfSklUX0NPTVBJTEUocixhLGIpIHIgPSBwY3JlMl9qaXRfY29tcGlsZV84KEcoYSw4KSxiKQorI2RlZmluZSBQQ1JFMl9KSVRfRlJFRV9VTlVTRURfTUVNT1JZKGEpIHBjcmUyX2ppdF9mcmVlX3VudXNlZF9tZW1vcnlfOChHKGEsOCkpCisjZGVmaW5lIFBDUkUyX0pJVF9NQVRDSChhLGIsYyxkLGUsZixnLGgpIFwKKyAgYSA9IHBjcmUyX2ppdF9tYXRjaF84KEcoYiw4KSwoUENSRTJfU1BUUjgpYyxkLGUsZixHKGcsOCksaCkKKyNkZWZpbmUgUENSRTJfSklUX1NUQUNLX0NSRUFURShhLGIsYyxkKSBcCisgIGEgPSAoUENSRTJfSklUX1NUQUNLICopcGNyZTJfaml0X3N0YWNrX2NyZWF0ZV84KGIsYyxkKTsKKyNkZWZpbmUgUENSRTJfSklUX1NUQUNLX0FTU0lHTihhLGIsYykgXAorICBwY3JlMl9qaXRfc3RhY2tfYXNzaWduXzgoRyhhLDgpLChwY3JlMl9qaXRfY2FsbGJhY2tfOCliLGMpOworI2RlZmluZSBQQ1JFMl9KSVRfU1RBQ0tfRlJFRShhKSBwY3JlMl9qaXRfc3RhY2tfZnJlZV84KChwY3JlMl9qaXRfc3RhY2tfOCAqKWEpOworI2RlZmluZSBQQ1JFMl9NQUtFVEFCTEVTKGEpIGEgPSBwY3JlMl9tYWtldGFibGVzXzgoTlVMTCkKKyNkZWZpbmUgUENSRTJfTUFUQ0goYSxiLGMsZCxlLGYsZyxoKSBcCisgIGEgPSBwY3JlMl9tYXRjaF84KEcoYiw4KSwoUENSRTJfU1BUUjgpYyxkLGUsZixHKGcsOCksaCkKKyNkZWZpbmUgUENSRTJfTUFUQ0hfREFUQV9DUkVBVEUoYSxiLGMpIEcoYSw4KSA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlXzgoYixjKQorI2RlZmluZSBQQ1JFMl9NQVRDSF9EQVRBX0NSRUFURV9GUk9NX1BBVFRFUk4oYSxiLGMpIFwKKyAgRyhhLDgpID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuXzgoRyhiLDgpLGMpCisjZGVmaW5lIFBDUkUyX01BVENIX0RBVEFfRlJFRShhKSBwY3JlMl9tYXRjaF9kYXRhX2ZyZWVfOChHKGEsOCkpCisjZGVmaW5lIFBDUkUyX1BBVFRFUk5fSU5GTyhhLGIsYyxkKSBhID0gcGNyZTJfcGF0dGVybl9pbmZvXzgoRyhiLDgpLGMsZCkKKyNkZWZpbmUgUENSRTJfUFJJTlRJTlQoYSkgcGNyZTJfcHJpbnRpbnRfOChjb21waWxlZF9jb2RlOCxvdXRmaWxlLGEpCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9ERUNPREUocixhLGIsYyxkKSBcCisgIHIgPSBwY3JlMl9zZXJpYWxpemVfZGVjb2RlXzgoKHBjcmUyX2NvZGVfOCAqKilhLGIsYyxHKGQsOCkpCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9FTkNPREUocixhLGIsYyxkLGUpIFwKKyAgciA9IHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGVfOCgoY29uc3QgcGNyZTJfY29kZV84ICoqKWEsYixjLGQsRyhlLDgpKQorI2RlZmluZSBQQ1JFMl9TRVJJQUxJWkVfRlJFRShhKSBwY3JlMl9zZXJpYWxpemVfZnJlZV84KGEpCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9HRVRfTlVNQkVSX09GX0NPREVTKHIsYSkgXAorICByID0gcGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXNfOChhKQorI2RlZmluZSBQQ1JFMl9TRVRfQ0FMTE9VVChhLGIsYykgXAorICBwY3JlMl9zZXRfY2FsbG91dF84KEcoYSw4KSwoaW50ICgqKShwY3JlMl9jYWxsb3V0X2Jsb2NrXzggKiwgdm9pZCAqKSliLGMpCisjZGVmaW5lIFBDUkUyX1NFVF9DSEFSQUNURVJfVEFCTEVTKGEsYikgcGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXNfOChHKGEsOCksYikKKyNkZWZpbmUgUENSRTJfU0VUX0NPTVBJTEVfUkVDVVJTSU9OX0dVQVJEKGEsYixjKSBcCisgIHBjcmUyX3NldF9jb21waWxlX3JlY3Vyc2lvbl9ndWFyZF84KEcoYSw4KSxiLGMpCisjZGVmaW5lIFBDUkUyX1NFVF9NQVRDSF9MSU1JVChhLGIpIHBjcmUyX3NldF9tYXRjaF9saW1pdF84KEcoYSw4KSxiKQorI2RlZmluZSBQQ1JFMl9TRVRfTUFYX1BBVFRFUk5fTEVOR1RIKGEsYikgcGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aF84KEcoYSw4KSxiKQorI2RlZmluZSBQQ1JFMl9TRVRfT0ZGU0VUX0xJTUlUKGEsYikgcGNyZTJfc2V0X29mZnNldF9saW1pdF84KEcoYSw4KSxiKQorI2RlZmluZSBQQ1JFMl9TRVRfUEFSRU5TX05FU1RfTElNSVQoYSxiKSBwY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXRfOChHKGEsOCksYikKKyNkZWZpbmUgUENSRTJfU0VUX1JFQ1VSU0lPTl9MSU1JVChhLGIpIHBjcmUyX3NldF9yZWN1cnNpb25fbGltaXRfOChHKGEsOCksYikKKyNkZWZpbmUgUENSRTJfU1VCU1RJVFVURShhLGIsYyxkLGUsZixnLGgsaSxqLGssbCkgXAorICBhID0gcGNyZTJfc3Vic3RpdHV0ZV84KEcoYiw4KSwoUENSRTJfU1BUUjgpYyxkLGUsZixHKGcsOCksRyhoLDgpLCBcCisgICAgKFBDUkUyX1NQVFI4KWksaiwoUENSRTJfVUNIQVI4ICopayxsKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfQ09QWV9CWU5BTUUoYSxiLGMsZCxlKSBcCisgIGEgPSBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWVfOChHKGIsOCksRyhjLDgpLChQQ1JFMl9VQ0hBUjggKilkLGUpCisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19DT1BZX0JZTlVNQkVSKGEsYixjLGQsZSkgXAorICBhID0gcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXJfOChHKGIsOCksYywoUENSRTJfVUNIQVI4ICopZCxlKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfRlJFRShhKSBwY3JlMl9zdWJzdHJpbmdfZnJlZV84KChQQ1JFMl9VQ0hBUjggKilhKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfR0VUX0JZTkFNRShhLGIsYyxkLGUpIFwKKyAgYSA9IHBjcmUyX3N1YnN0cmluZ19nZXRfYnluYW1lXzgoRyhiLDgpLEcoYyw4KSwoUENSRTJfVUNIQVI4ICoqKWQsZSkKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0dFVF9CWU5VTUJFUihhLGIsYyxkLGUpIFwKKyAgYSA9IHBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXJfOChHKGIsOCksYywoUENSRTJfVUNIQVI4ICoqKWQsZSkKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0xFTkdUSF9CWU5BTUUoYSxiLGMsZCkgXAorICAgIGEgPSBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZV84KEcoYiw4KSxHKGMsOCksZCkKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0xFTkdUSF9CWU5VTUJFUihhLGIsYyxkKSBcCisgICAgYSA9IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXJfOChHKGIsOCksYyxkKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfTElTVF9HRVQoYSxiLGMsZCkgXAorICBhID0gcGNyZTJfc3Vic3RyaW5nX2xpc3RfZ2V0XzgoRyhiLDgpLChQQ1JFMl9VQ0hBUjggKioqKWMsZCkKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0xJU1RfRlJFRShhKSBcCisgIHBjcmUyX3N1YnN0cmluZ19saXN0X2ZyZWVfOCgoUENSRTJfU1BUUjggKilhKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfTlVNQkVSX0ZST01fTkFNRShhLGIsYykgXAorICBhID0gcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWVfOChHKGIsOCksRyhjLDgpKTsKKyNkZWZpbmUgUFRSKHgpICh2b2lkICopRyh4LDgpCisjZGVmaW5lIFNFVEZMRCh4LHkseikgRyh4LDgpLT55ID0gegorI2RlZmluZSBTRVRGTERWRUMoeCx5LHYseikgRyh4LDgpLT55W3ZdID0gegorI2RlZmluZSBTRVRPUCh4LHkseikgRyh4LDgpIHogeQorI2RlZmluZSBTRVRDQVNUUFRSKHgseSkgRyh4LDgpID0gKHVpbnQ4X3QgKikoeSkKKyNkZWZpbmUgU1RSTEVOKHApIChpbnQpc3RybGVuKChjaGFyICopcCkKKyNkZWZpbmUgU1VCMShhLGIpIEcoYSw4KShHKGIsOCkpCisjZGVmaW5lIFNVQjIoYSxiLGMpIEcoYSw4KShHKGIsOCksRyhjLDgpKQorI2RlZmluZSBURVNUKHgscix5KSAoRyh4LDgpIHIgKHkpKQorI2RlZmluZSBURVNURkxEKHgsZixyLHkpIChHKHgsOCktPmYgciAoeSkpCisKKworLyogLS0tLS0gT25seSAxNi1iaXQgbW9kZSBpcyBzdXBwb3J0ZWQgLS0tLS0gKi8KKworI2VsaWYgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzE2CisjZGVmaW5lIENBU1RGTEQodCxhLGIpICh0KShHKGEsMTYpLT5iKQorI2RlZmluZSBDQVNUVkFSKHQseCkgKHQpRyh4LDE2KQorI2RlZmluZSBDT0RFX1VOSVQoYSxiKSAodWludDMyX3QpKCgoUENSRTJfU1BUUjE2KShhKSlbYl0pCisjZGVmaW5lIERBVENUWENQWShhLGIpIG1lbWNweShHKGEsMTYpLEcoYiwxNiksc2l6ZW9mKHBjcmUyX21hdGNoX2NvbnRleHRfMTYpKQorI2RlZmluZSBGTEQoYSxiKSBHKGEsMTYpLT5iCisjZGVmaW5lIFBBVENUWENQWShhLGIpIG1lbWNweShHKGEsMTYpLEcoYiwxNiksc2l6ZW9mKHBjcmUyX2NvbXBpbGVfY29udGV4dF8xNikpCisjZGVmaW5lIFBDSEFSUyhsdiwgcCwgb2Zmc2V0LCBsZW4sIHV0ZiwgZikgXAorICBsdiA9IHBjaGFyczE2KChQQ1JFMl9TUFRSMTYpKHApK29mZnNldCwgbGVuLCB1dGYsIGYpCisjZGVmaW5lIFBDSEFSU1YocCwgb2Zmc2V0LCBsZW4sIHV0ZiwgZikgXAorICAodm9pZClwY2hhcnMxNigoUENSRTJfU1BUUjE2KShwKStvZmZzZXQsIGxlbiwgdXRmLCBmKQorI2RlZmluZSBQQ1JFMl9DQUxMT1VUX0VOVU1FUkFURShhLGIsYykgXAorICAgYSA9IHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlXzE2KGNvbXBpbGVkX2NvZGUxNiwgXAorICAgICAoaW50ICgqKShzdHJ1Y3QgcGNyZTJfY2FsbG91dF9lbnVtZXJhdGVfYmxvY2tfMTYgKiwgdm9pZCAqKSliLGMpCisjZGVmaW5lIFBDUkUyX0NPTVBJTEUoYSxiLGMsZCxlLGYsZykgXAorICBHKGEsMTYpID0gcGNyZTJfY29tcGlsZV8xNihHKGIsMTYpLGMsZCxlLGYsZykKKyNkZWZpbmUgUENSRTJfREZBX01BVENIKGEsYixjLGQsZSxmLGcsaCxpLGopIFwKKyAgYSA9IHBjcmUyX2RmYV9tYXRjaF8xNihHKGIsMTYpLChQQ1JFMl9TUFRSMTYpYyxkLGUsZixHKGcsMTYpLGgsaSxqKQorI2RlZmluZSBQQ1JFMl9HRVRfRVJST1JfTUVTU0FHRShyLGEsYikgXAorICByID0gcGNyZTJfZ2V0X2Vycm9yX21lc3NhZ2VfMTYoYSxHKGIsMTYpLEcoRyhiLDE2KSxfc2l6ZSkpCisjZGVmaW5lIFBDUkUyX0dFVF9PVkVDVE9SX0NPVU5UKGEsYikgYSA9IHBjcmUyX2dldF9vdmVjdG9yX2NvdW50XzE2KEcoYiwxNikpCisjZGVmaW5lIFBDUkUyX0dFVF9TVEFSVENIQVIoYSxiKSBhID0gcGNyZTJfZ2V0X3N0YXJ0Y2hhcl8xNihHKGIsMTYpKQorI2RlZmluZSBQQ1JFMl9KSVRfQ09NUElMRShyLGEsYikgciA9IHBjcmUyX2ppdF9jb21waWxlXzE2KEcoYSwxNiksYikKKyNkZWZpbmUgUENSRTJfSklUX0ZSRUVfVU5VU0VEX01FTU9SWShhKSBwY3JlMl9qaXRfZnJlZV91bnVzZWRfbWVtb3J5XzE2KEcoYSwxNikpCisjZGVmaW5lIFBDUkUyX0pJVF9NQVRDSChhLGIsYyxkLGUsZixnLGgpIFwKKyAgYSA9IHBjcmUyX2ppdF9tYXRjaF8xNihHKGIsMTYpLChQQ1JFMl9TUFRSMTYpYyxkLGUsZixHKGcsMTYpLGgpCisjZGVmaW5lIFBDUkUyX0pJVF9TVEFDS19DUkVBVEUoYSxiLGMsZCkgXAorICBhID0gKFBDUkUyX0pJVF9TVEFDSyAqKXBjcmUyX2ppdF9zdGFja19jcmVhdGVfMTYoYixjLGQpOworI2RlZmluZSBQQ1JFMl9KSVRfU1RBQ0tfQVNTSUdOKGEsYixjKSBcCisgIHBjcmUyX2ppdF9zdGFja19hc3NpZ25fMTYoRyhhLDE2KSwocGNyZTJfaml0X2NhbGxiYWNrXzE2KWIsYyk7CisjZGVmaW5lIFBDUkUyX0pJVF9TVEFDS19GUkVFKGEpIHBjcmUyX2ppdF9zdGFja19mcmVlXzE2KChwY3JlMl9qaXRfc3RhY2tfMTYgKilhKTsKKyNkZWZpbmUgUENSRTJfTUFLRVRBQkxFUyhhKSBhID0gcGNyZTJfbWFrZXRhYmxlc18xNihOVUxMKQorI2RlZmluZSBQQ1JFMl9NQVRDSChhLGIsYyxkLGUsZixnLGgpIFwKKyAgYSA9IHBjcmUyX21hdGNoXzE2KEcoYiwxNiksKFBDUkUyX1NQVFIxNiljLGQsZSxmLEcoZywxNiksaCkKKyNkZWZpbmUgUENSRTJfTUFUQ0hfREFUQV9DUkVBVEUoYSxiLGMpIEcoYSwxNikgPSBwY3JlMl9tYXRjaF9kYXRhX2NyZWF0ZV8xNihiLGMpCisjZGVmaW5lIFBDUkUyX01BVENIX0RBVEFfQ1JFQVRFX0ZST01fUEFUVEVSTihhLGIsYykgXAorICBHKGEsMTYpID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfZnJvbV9wYXR0ZXJuXzE2KEcoYiwxNiksYykKKyNkZWZpbmUgUENSRTJfTUFUQ0hfREFUQV9GUkVFKGEpIHBjcmUyX21hdGNoX2RhdGFfZnJlZV8xNihHKGEsMTYpKQorI2RlZmluZSBQQ1JFMl9QQVRURVJOX0lORk8oYSxiLGMsZCkgYSA9IHBjcmUyX3BhdHRlcm5faW5mb18xNihHKGIsMTYpLGMsZCkKKyNkZWZpbmUgUENSRTJfUFJJTlRJTlQoYSkgcGNyZTJfcHJpbnRpbnRfMTYoY29tcGlsZWRfY29kZTE2LG91dGZpbGUsYSkKKyNkZWZpbmUgUENSRTJfU0VSSUFMSVpFX0RFQ09ERShyLGEsYixjLGQpIFwKKyAgciA9IHBjcmUyX3NlcmlhbGl6ZV9kZWNvZGVfMTYoKHBjcmUyX2NvZGVfMTYgKiopYSxiLGMsRyhkLDE2KSkKKyNkZWZpbmUgUENSRTJfU0VSSUFMSVpFX0VOQ09ERShyLGEsYixjLGQsZSkgXAorICByID0gcGNyZTJfc2VyaWFsaXplX2VuY29kZV8xNigoY29uc3QgcGNyZTJfY29kZV8xNiAqKilhLGIsYyxkLEcoZSwxNikpCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9GUkVFKGEpIHBjcmUyX3NlcmlhbGl6ZV9mcmVlXzE2KGEpCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9HRVRfTlVNQkVSX09GX0NPREVTKHIsYSkgXAorICByID0gcGNyZTJfc2VyaWFsaXplX2dldF9udW1iZXJfb2ZfY29kZXNfMTYoYSkKKyNkZWZpbmUgUENSRTJfU0VUX0NBTExPVVQoYSxiLGMpIFwKKyAgcGNyZTJfc2V0X2NhbGxvdXRfMTYoRyhhLDE2KSwoaW50ICgqKShwY3JlMl9jYWxsb3V0X2Jsb2NrXzE2ICosIHZvaWQgKikpYixjKTsKKyNkZWZpbmUgUENSRTJfU0VUX0NIQVJBQ1RFUl9UQUJMRVMoYSxiKSBwY3JlMl9zZXRfY2hhcmFjdGVyX3RhYmxlc18xNihHKGEsMTYpLGIpCisjZGVmaW5lIFBDUkUyX1NFVF9DT01QSUxFX1JFQ1VSU0lPTl9HVUFSRChhLGIsYykgXAorICBwY3JlMl9zZXRfY29tcGlsZV9yZWN1cnNpb25fZ3VhcmRfMTYoRyhhLDE2KSxiLGMpCisjZGVmaW5lIFBDUkUyX1NFVF9NQVRDSF9MSU1JVChhLGIpIHBjcmUyX3NldF9tYXRjaF9saW1pdF8xNihHKGEsMTYpLGIpCisjZGVmaW5lIFBDUkUyX1NFVF9NQVhfUEFUVEVSTl9MRU5HVEgoYSxiKSBwY3JlMl9zZXRfbWF4X3BhdHRlcm5fbGVuZ3RoXzE2KEcoYSwxNiksYikKKyNkZWZpbmUgUENSRTJfU0VUX09GRlNFVF9MSU1JVChhLGIpIHBjcmUyX3NldF9vZmZzZXRfbGltaXRfMTYoRyhhLDE2KSxiKQorI2RlZmluZSBQQ1JFMl9TRVRfUEFSRU5TX05FU1RfTElNSVQoYSxiKSBwY3JlMl9zZXRfcGFyZW5zX25lc3RfbGltaXRfMTYoRyhhLDE2KSxiKQorI2RlZmluZSBQQ1JFMl9TRVRfUkVDVVJTSU9OX0xJTUlUKGEsYikgcGNyZTJfc2V0X3JlY3Vyc2lvbl9saW1pdF8xNihHKGEsMTYpLGIpCisjZGVmaW5lIFBDUkUyX1NVQlNUSVRVVEUoYSxiLGMsZCxlLGYsZyxoLGksaixrLGwpIFwKKyAgYSA9IHBjcmUyX3N1YnN0aXR1dGVfMTYoRyhiLDE2KSwoUENSRTJfU1BUUjE2KWMsZCxlLGYsRyhnLDE2KSxHKGgsMTYpLCBcCisgICAgKFBDUkUyX1NQVFIxNilpLGosKFBDUkUyX1VDSEFSMTYgKilrLGwpCisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19DT1BZX0JZTkFNRShhLGIsYyxkLGUpIFwKKyAgYSA9IHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bmFtZV8xNihHKGIsMTYpLEcoYywxNiksKFBDUkUyX1VDSEFSMTYgKilkLGUpCisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19DT1BZX0JZTlVNQkVSKGEsYixjLGQsZSkgXAorICBhID0gcGNyZTJfc3Vic3RyaW5nX2NvcHlfYnludW1iZXJfMTYoRyhiLDE2KSxjLChQQ1JFMl9VQ0hBUjE2ICopZCxlKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfRlJFRShhKSBwY3JlMl9zdWJzdHJpbmdfZnJlZV8xNigoUENSRTJfVUNIQVIxNiAqKWEpCisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19HRVRfQllOQU1FKGEsYixjLGQsZSkgXAorICBhID0gcGNyZTJfc3Vic3RyaW5nX2dldF9ieW5hbWVfMTYoRyhiLDE2KSxHKGMsMTYpLChQQ1JFMl9VQ0hBUjE2ICoqKWQsZSkKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0dFVF9CWU5VTUJFUihhLGIsYyxkLGUpIFwKKyAgYSA9IHBjcmUyX3N1YnN0cmluZ19nZXRfYnludW1iZXJfMTYoRyhiLDE2KSxjLChQQ1JFMl9VQ0hBUjE2ICoqKWQsZSkKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0xFTkdUSF9CWU5BTUUoYSxiLGMsZCkgXAorICAgIGEgPSBwY3JlMl9zdWJzdHJpbmdfbGVuZ3RoX2J5bmFtZV8xNihHKGIsMTYpLEcoYywxNiksZCkKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0xFTkdUSF9CWU5VTUJFUihhLGIsYyxkKSBcCisgICAgYSA9IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnludW1iZXJfMTYoRyhiLDE2KSxjLGQpCisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19MSVNUX0dFVChhLGIsYyxkKSBcCisgIGEgPSBwY3JlMl9zdWJzdHJpbmdfbGlzdF9nZXRfMTYoRyhiLDE2KSwoUENSRTJfVUNIQVIxNiAqKiopYyxkKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfTElTVF9GUkVFKGEpIFwKKyAgcGNyZTJfc3Vic3RyaW5nX2xpc3RfZnJlZV8xNigoUENSRTJfU1BUUjE2ICopYSkKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX05VTUJFUl9GUk9NX05BTUUoYSxiLGMpIFwKKyAgYSA9IHBjcmUyX3N1YnN0cmluZ19udW1iZXJfZnJvbV9uYW1lXzE2KEcoYiwxNiksRyhjLDE2KSk7CisjZGVmaW5lIFBUUih4KSAodm9pZCAqKUcoeCwxNikKKyNkZWZpbmUgU0VURkxEKHgseSx6KSBHKHgsMTYpLT55ID0gegorI2RlZmluZSBTRVRGTERWRUMoeCx5LHYseikgRyh4LDE2KS0+eVt2XSA9IHoKKyNkZWZpbmUgU0VUT1AoeCx5LHopIEcoeCwxNikgeiB5CisjZGVmaW5lIFNFVENBU1RQVFIoeCx5KSBHKHgsMTYpID0gKHVpbnQxNl90ICopKHkpCisjZGVmaW5lIFNUUkxFTihwKSAoaW50KXN0cmxlbjE2KChQQ1JFMl9TUFRSMTYpcCkKKyNkZWZpbmUgU1VCMShhLGIpIEcoYSwxNikoRyhiLDE2KSkKKyNkZWZpbmUgU1VCMihhLGIsYykgRyhhLDE2KShHKGIsMTYpLEcoYywxNikpCisjZGVmaW5lIFRFU1QoeCxyLHkpIChHKHgsMTYpIHIgKHkpKQorI2RlZmluZSBURVNURkxEKHgsZixyLHkpIChHKHgsMTYpLT5mIHIgKHkpKQorCisKKy8qIC0tLS0tIE9ubHkgMzItYml0IG1vZGUgaXMgc3VwcG9ydGVkIC0tLS0tICovCisKKyNlbGlmIGRlZmluZWQgU1VQUE9SVF9QQ1JFMl8zMgorI2RlZmluZSBDQVNURkxEKHQsYSxiKSAodCkoRyhhLDMyKS0+YikKKyNkZWZpbmUgQ0FTVFZBUih0LHgpICh0KUcoeCwzMikKKyNkZWZpbmUgQ09ERV9VTklUKGEsYikgKHVpbnQzMl90KSgoKFBDUkUyX1NQVFIzMikoYSkpW2JdKQorI2RlZmluZSBEQVRDVFhDUFkoYSxiKSBtZW1jcHkoRyhhLDMyKSxHKGIsMzIpLHNpemVvZihwY3JlMl9tYXRjaF9jb250ZXh0XzMyKSkKKyNkZWZpbmUgRkxEKGEsYikgRyhhLDMyKS0+YgorI2RlZmluZSBQQVRDVFhDUFkoYSxiKSBtZW1jcHkoRyhhLDMyKSxHKGIsMzIpLHNpemVvZihwY3JlMl9jb21waWxlX2NvbnRleHRfMzIpKQorI2RlZmluZSBQQ0hBUlMobHYsIHAsIG9mZnNldCwgbGVuLCB1dGYsIGYpIFwKKyAgbHYgPSBwY2hhcnMzMigoUENSRTJfU1BUUjMyKShwKStvZmZzZXQsIGxlbiwgdXRmLCBmKQorI2RlZmluZSBQQ0hBUlNWKHAsIG9mZnNldCwgbGVuLCB1dGYsIGYpIFwKKyAgKHZvaWQpcGNoYXJzMzIoKFBDUkUyX1NQVFIzMikocCkrb2Zmc2V0LCBsZW4sIHV0ZiwgZikKKyNkZWZpbmUgUENSRTJfQ0FMTE9VVF9FTlVNRVJBVEUoYSxiLGMpIFwKKyAgIGEgPSBwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV8zMihjb21waWxlZF9jb2RlMzIsIFwKKyAgICAgKGludCAoKikoc3RydWN0IHBjcmUyX2NhbGxvdXRfZW51bWVyYXRlX2Jsb2NrXzMyICosIHZvaWQgKikpYixjKQorI2RlZmluZSBQQ1JFMl9DT01QSUxFKGEsYixjLGQsZSxmLGcpIFwKKyAgRyhhLDMyKSA9IHBjcmUyX2NvbXBpbGVfMzIoRyhiLDMyKSxjLGQsZSxmLGcpCisjZGVmaW5lIFBDUkUyX0RGQV9NQVRDSChhLGIsYyxkLGUsZixnLGgsaSxqKSBcCisgIGEgPSBwY3JlMl9kZmFfbWF0Y2hfMzIoRyhiLDMyKSwoUENSRTJfU1BUUjMyKWMsZCxlLGYsRyhnLDMyKSxoLGksaikKKyNkZWZpbmUgUENSRTJfR0VUX0VSUk9SX01FU1NBR0UocixhLGIpIFwKKyAgciA9IHBjcmUyX2dldF9lcnJvcl9tZXNzYWdlXzMyKGEsRyhiLDMyKSxHKEcoYiwzMiksX3NpemUpKQorI2RlZmluZSBQQ1JFMl9HRVRfT1ZFQ1RPUl9DT1VOVChhLGIpIGEgPSBwY3JlMl9nZXRfb3ZlY3Rvcl9jb3VudF8zMihHKGIsMzIpKQorI2RlZmluZSBQQ1JFMl9HRVRfU1RBUlRDSEFSKGEsYikgYSA9IHBjcmUyX2dldF9zdGFydGNoYXJfMzIoRyhiLDMyKSkKKyNkZWZpbmUgUENSRTJfSklUX0NPTVBJTEUocixhLGIpIHIgPSBwY3JlMl9qaXRfY29tcGlsZV8zMihHKGEsMzIpLGIpCisjZGVmaW5lIFBDUkUyX0pJVF9GUkVFX1VOVVNFRF9NRU1PUlkoYSkgcGNyZTJfaml0X2ZyZWVfdW51c2VkX21lbW9yeV8zMihHKGEsMzIpKQorI2RlZmluZSBQQ1JFMl9KSVRfTUFUQ0goYSxiLGMsZCxlLGYsZyxoKSBcCisgIGEgPSBwY3JlMl9qaXRfbWF0Y2hfMzIoRyhiLDMyKSwoUENSRTJfU1BUUjMyKWMsZCxlLGYsRyhnLDMyKSxoKQorI2RlZmluZSBQQ1JFMl9KSVRfU1RBQ0tfQ1JFQVRFKGEsYixjLGQpIFwKKyAgYSA9IChQQ1JFMl9KSVRfU1RBQ0sgKilwY3JlMl9qaXRfc3RhY2tfY3JlYXRlXzMyKGIsYyxkKTsKKyNkZWZpbmUgUENSRTJfSklUX1NUQUNLX0FTU0lHTihhLGIsYykgXAorICBwY3JlMl9qaXRfc3RhY2tfYXNzaWduXzMyKEcoYSwzMiksKHBjcmUyX2ppdF9jYWxsYmFja18zMiliLGMpOworI2RlZmluZSBQQ1JFMl9KSVRfU1RBQ0tfRlJFRShhKSBwY3JlMl9qaXRfc3RhY2tfZnJlZV8zMigocGNyZTJfaml0X3N0YWNrXzMyICopYSk7CisjZGVmaW5lIFBDUkUyX01BS0VUQUJMRVMoYSkgYSA9IHBjcmUyX21ha2V0YWJsZXNfMzIoTlVMTCkKKyNkZWZpbmUgUENSRTJfTUFUQ0goYSxiLGMsZCxlLGYsZyxoKSBcCisgIGEgPSBwY3JlMl9tYXRjaF8zMihHKGIsMzIpLChQQ1JFMl9TUFRSMzIpYyxkLGUsZixHKGcsMzIpLGgpCisjZGVmaW5lIFBDUkUyX01BVENIX0RBVEFfQ1JFQVRFKGEsYixjKSBHKGEsMzIpID0gcGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfMzIoYixjKQorI2RlZmluZSBQQ1JFMl9NQVRDSF9EQVRBX0NSRUFURV9GUk9NX1BBVFRFUk4oYSxiLGMpIFwKKyAgRyhhLDMyKSA9IHBjcmUyX21hdGNoX2RhdGFfY3JlYXRlX2Zyb21fcGF0dGVybl8zMihHKGIsMzIpLGMpCisjZGVmaW5lIFBDUkUyX01BVENIX0RBVEFfRlJFRShhKSBwY3JlMl9tYXRjaF9kYXRhX2ZyZWVfMzIoRyhhLDMyKSkKKyNkZWZpbmUgUENSRTJfUEFUVEVSTl9JTkZPKGEsYixjLGQpIGEgPSBwY3JlMl9wYXR0ZXJuX2luZm9fMzIoRyhiLDMyKSxjLGQpCisjZGVmaW5lIFBDUkUyX1BSSU5USU5UKGEpIHBjcmUyX3ByaW50aW50XzMyKGNvbXBpbGVkX2NvZGUzMixvdXRmaWxlLGEpCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9ERUNPREUocixhLGIsYyxkKSBcCisgIHIgPSBwY3JlMl9zZXJpYWxpemVfZGVjb2RlXzMyKChwY3JlMl9jb2RlXzMyICoqKWEsYixjLEcoZCwzMikpCisjZGVmaW5lIFBDUkUyX1NFUklBTElaRV9FTkNPREUocixhLGIsYyxkLGUpIFwKKyAgciA9IHBjcmUyX3NlcmlhbGl6ZV9lbmNvZGVfMzIoKGNvbnN0IHBjcmUyX2NvZGVfMzIgKiopYSxiLGMsZCxHKGUsMzIpKQorI2RlZmluZSBQQ1JFMl9TRVJJQUxJWkVfRlJFRShhKSBwY3JlMl9zZXJpYWxpemVfZnJlZV8zMihhKQorI2RlZmluZSBQQ1JFMl9TRVJJQUxJWkVfR0VUX05VTUJFUl9PRl9DT0RFUyhyLGEpIFwKKyAgciA9IHBjcmUyX3NlcmlhbGl6ZV9nZXRfbnVtYmVyX29mX2NvZGVzXzMyKGEpCisjZGVmaW5lIFBDUkUyX1NFVF9DQUxMT1VUKGEsYixjKSBcCisgIHBjcmUyX3NldF9jYWxsb3V0XzMyKEcoYSwzMiksKGludCAoKikocGNyZTJfY2FsbG91dF9ibG9ja18zMiAqLCB2b2lkICopKWIsYyk7CisjZGVmaW5lIFBDUkUyX1NFVF9DSEFSQUNURVJfVEFCTEVTKGEsYikgcGNyZTJfc2V0X2NoYXJhY3Rlcl90YWJsZXNfMzIoRyhhLDMyKSxiKQorI2RlZmluZSBQQ1JFMl9TRVRfQ09NUElMRV9SRUNVUlNJT05fR1VBUkQoYSxiLGMpIFwKKyAgcGNyZTJfc2V0X2NvbXBpbGVfcmVjdXJzaW9uX2d1YXJkXzMyKEcoYSwzMiksYixjKQorI2RlZmluZSBQQ1JFMl9TRVRfTUFUQ0hfTElNSVQoYSxiKSBwY3JlMl9zZXRfbWF0Y2hfbGltaXRfMzIoRyhhLDMyKSxiKQorI2RlZmluZSBQQ1JFMl9TRVRfTUFYX1BBVFRFUk5fTEVOR1RIKGEsYikgcGNyZTJfc2V0X21heF9wYXR0ZXJuX2xlbmd0aF8zMihHKGEsMzIpLGIpCisjZGVmaW5lIFBDUkUyX1NFVF9PRkZTRVRfTElNSVQoYSxiKSBwY3JlMl9zZXRfb2Zmc2V0X2xpbWl0XzMyKEcoYSwzMiksYikKKyNkZWZpbmUgUENSRTJfU0VUX1BBUkVOU19ORVNUX0xJTUlUKGEsYikgcGNyZTJfc2V0X3BhcmVuc19uZXN0X2xpbWl0XzMyKEcoYSwzMiksYikKKyNkZWZpbmUgUENSRTJfU0VUX1JFQ1VSU0lPTl9MSU1JVChhLGIpIHBjcmUyX3NldF9yZWN1cnNpb25fbGltaXRfMzIoRyhhLDMyKSxiKQorI2RlZmluZSBQQ1JFMl9TVUJTVElUVVRFKGEsYixjLGQsZSxmLGcsaCxpLGosayxsKSBcCisgIGEgPSBwY3JlMl9zdWJzdGl0dXRlXzMyKEcoYiwzMiksKFBDUkUyX1NQVFIzMiljLGQsZSxmLEcoZywzMiksRyhoLDMyKSwgXAorICAgIChQQ1JFMl9TUFRSMzIpaSxqLChQQ1JFMl9VQ0hBUjMyICopayxsKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfQ09QWV9CWU5BTUUoYSxiLGMsZCxlKSBcCisgIGEgPSBwY3JlMl9zdWJzdHJpbmdfY29weV9ieW5hbWVfMzIoRyhiLDMyKSxHKGMsMzIpLChQQ1JFMl9VQ0hBUjMyICopZCxlKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfQ09QWV9CWU5VTUJFUihhLGIsYyxkLGUpIFwKKyAgYSA9IHBjcmUyX3N1YnN0cmluZ19jb3B5X2J5bnVtYmVyXzMyKEcoYiwzMiksYywoUENSRTJfVUNIQVIzMiAqKWQsZSk7CisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19GUkVFKGEpIHBjcmUyX3N1YnN0cmluZ19mcmVlXzMyKChQQ1JFMl9VQ0hBUjMyICopYSkKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0dFVF9CWU5BTUUoYSxiLGMsZCxlKSBcCisgIGEgPSBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZV8zMihHKGIsMzIpLEcoYywzMiksKFBDUkUyX1VDSEFSMzIgKiopZCxlKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfR0VUX0JZTlVNQkVSKGEsYixjLGQsZSkgXAorICBhID0gcGNyZTJfc3Vic3RyaW5nX2dldF9ieW51bWJlcl8zMihHKGIsMzIpLGMsKFBDUkUyX1VDSEFSMzIgKiopZCxlKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfTEVOR1RIX0JZTkFNRShhLGIsYyxkKSBcCisgICAgYSA9IHBjcmUyX3N1YnN0cmluZ19sZW5ndGhfYnluYW1lXzMyKEcoYiwzMiksRyhjLDMyKSxkKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfTEVOR1RIX0JZTlVNQkVSKGEsYixjLGQpIFwKKyAgICBhID0gcGNyZTJfc3Vic3RyaW5nX2xlbmd0aF9ieW51bWJlcl8zMihHKGIsMzIpLGMsZCkKKyNkZWZpbmUgUENSRTJfU1VCU1RSSU5HX0xJU1RfR0VUKGEsYixjLGQpIFwKKyAgYSA9IHBjcmUyX3N1YnN0cmluZ19saXN0X2dldF8zMihHKGIsMzIpLChQQ1JFMl9VQ0hBUjMyICoqKiljLGQpCisjZGVmaW5lIFBDUkUyX1NVQlNUUklOR19MSVNUX0ZSRUUoYSkgXAorICBwY3JlMl9zdWJzdHJpbmdfbGlzdF9mcmVlXzMyKChQQ1JFMl9TUFRSMzIgKilhKQorI2RlZmluZSBQQ1JFMl9TVUJTVFJJTkdfTlVNQkVSX0ZST01fTkFNRShhLGIsYykgXAorICBhID0gcGNyZTJfc3Vic3RyaW5nX251bWJlcl9mcm9tX25hbWVfMzIoRyhiLDMyKSxHKGMsMzIpKTsKKyNkZWZpbmUgUFRSKHgpICh2b2lkICopRyh4LDMyKQorI2RlZmluZSBTRVRGTEQoeCx5LHopIEcoeCwzMiktPnkgPSB6CisjZGVmaW5lIFNFVEZMRFZFQyh4LHksdix6KSBHKHgsMzIpLT55W3ZdID0gegorI2RlZmluZSBTRVRPUCh4LHkseikgRyh4LDMyKSB6IHkKKyNkZWZpbmUgU0VUQ0FTVFBUUih4LHkpIEcoeCwzMikgPSAodWludDMyX3QgKikoeSkKKyNkZWZpbmUgU1RSTEVOKHApIChpbnQpc3RybGVuMzIoKFBDUkUyX1NQVFIzMilwKQorI2RlZmluZSBTVUIxKGEsYikgRyhhLDMyKShHKGIsMzIpKQorI2RlZmluZSBTVUIyKGEsYixjKSBHKGEsMzIpKEcoYiwzMiksRyhjLDMyKSkKKyNkZWZpbmUgVEVTVCh4LHIseSkgKEcoeCwzMikgciAoeSkpCisjZGVmaW5lIFRFU1RGTEQoeCxmLHIseSkgKEcoeCwzMiktPmYgciAoeSkpCisKKyNlbmRpZgorCisvKiAtLS0tLSBFbmQgb2YgbW9kZS1zcGVjaWZpYyBmdW5jdGlvbiBjYWxsIG1hY3JvcyAtLS0tLSAqLworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgIEFsdGVybmF0ZSBjaGFyYWN0ZXIgdGFibGVzICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEJ5IGRlZmF1bHQsIHRoZSAidGFibGVzIiBwb2ludGVyIGluIHRoZSBjb21waWxlIGNvbnRleHQgd2hlbiBjYWxsaW5nCitwY3JlMl9jb21waWxlKCkgaXMgbm90IHNldCAoPSBOVUxMKSwgdGhlcmVieSB1c2luZyB0aGUgZGVmYXVsdCB0YWJsZXMgb2YgdGhlCitsaWJyYXJ5LiBIb3dldmVyLCB0aGUgdGFibGVzIG1vZGlmaWVyIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCBhbHRlcm5hdGUgc2V0cyBvZgordGFibGVzLCBmb3IgZGlmZmVyZW50IGtpbmRzIG9mIHRlc3RpbmcuIE5vdGUgdGhhdCB0aGUgbG9jYWxlIG1vZGlmaWVyIGFsc28KK2FkanVzdHMgdGhlIHRhYmxlcy4gKi8KKworLyogVGhpcyBpcyB0aGUgc2V0IG9mIHRhYmxlcyBkaXN0cmlidXRlZCBhcyBkZWZhdWx0IHdpdGggUENSRTIuIEl0IHJlY29nbml6ZXMKK29ubHkgQVNDSUkgY2hhcmFjdGVycy4gKi8KKworc3RhdGljIGNvbnN0IHVpbnQ4X3QgdGFibGVzMVtdID0geworCisvKiBUaGlzIHRhYmxlIGlzIGEgbG93ZXIgY2FzaW5nIHRhYmxlLiAqLworCisgICAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsCisgICAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisgICAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsCisgICAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsCisgICAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksCisgICA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsCisgICA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsCisgICA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsCisgICA2NCwgOTcsIDk4LCA5OSwxMDAsMTAxLDEwMiwxMDMsCisgIDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsCisgIDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksCisgIDEyMCwxMjEsMTIyLCA5MSwgOTIsIDkzLCA5NCwgOTUsCisgICA5NiwgOTcsIDk4LCA5OSwxMDAsMTAxLDEwMiwxMDMsCisgIDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsCisgIDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksCisgIDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjcsCisgIDEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsCisgIDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsCisgIDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsCisgIDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksCisgIDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsCisgIDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsCisgIDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsCisgIDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsCisgIDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksCisgIDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsCisgIDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsCisgIDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsCisgIDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsCisgIDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksCisgIDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsCisgIDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsCisKKy8qIFRoaXMgdGFibGUgaXMgYSBjYXNlIGZsaXBwaW5nIHRhYmxlLiAqLworCisgICAgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsCisgICAgOCwgIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsCisgICAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsCisgICAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsCisgICAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksCisgICA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsCisgICA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsCisgICA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsCisgICA2NCwgOTcsIDk4LCA5OSwxMDAsMTAxLDEwMiwxMDMsCisgIDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsCisgIDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksCisgIDEyMCwxMjEsMTIyLCA5MSwgOTIsIDkzLCA5NCwgOTUsCisgICA5NiwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsCisgICA3MiwgNzMsIDc0LCA3NSwgNzYsIDc3LCA3OCwgNzksCisgICA4MCwgODEsIDgyLCA4MywgODQsIDg1LCA4NiwgODcsCisgICA4OCwgODksIDkwLDEyMywxMjQsMTI1LDEyNiwxMjcsCisgIDEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsCisgIDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsCisgIDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsCisgIDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksCisgIDE2MCwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsCisgIDE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsCisgIDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsCisgIDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsCisgIDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksCisgIDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsCisgIDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsCisgIDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsCisgIDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsCisgIDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksCisgIDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsCisgIDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsCisKKy8qIFRoaXMgdGFibGUgY29udGFpbnMgYml0IG1hcHMgZm9yIHZhcmlvdXMgY2hhcmFjdGVyIGNsYXNzZXMuIEVhY2ggbWFwIGlzIDMyCitieXRlcyBsb25nIGFuZCB0aGUgYml0cyBydW4gZnJvbSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgZW5kIG9mIGVhY2ggYnl0ZS4gVGhlCitjbGFzc2VzIHRoYXQgaGF2ZSB0aGVpciBvd24gbWFwcyBhcmU6IHNwYWNlLCB4ZGlnaXQsIGRpZ2l0LCB1cHBlciwgbG93ZXIsIHdvcmQsCitncmFwaCwgcHJpbnQsIHB1bmN0LCBhbmQgY250cmwuIE90aGVyIGNsYXNzZXMgYXJlIGJ1aWx0IGZyb20gY29tYmluYXRpb25zLiAqLworCisgIDB4MDAsMHgzZSwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDMsCisgIDB4N2UsMHgwMCwweDAwLDB4MDAsMHg3ZSwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAzLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHhmZSwweGZmLDB4ZmYsMHgwNywweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZSwweGZmLDB4ZmYsMHgwNywKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAzLAorICAweGZlLDB4ZmYsMHhmZiwweDg3LDB4ZmUsMHhmZiwweGZmLDB4MDcsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZSwweGZmLDB4ZmYsMHhmZiwKKyAgMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweDdmLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHg3ZiwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweGZlLDB4ZmYsMHgwMCwweGZjLAorICAweDAxLDB4MDAsMHgwMCwweGY4LDB4MDEsMHgwMCwweDAwLDB4NzgsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCisgIDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwMCwKKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLAorICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKworLyogVGhpcyB0YWJsZSBpZGVudGlmaWVzIHZhcmlvdXMgY2xhc3NlcyBvZiBjaGFyYWN0ZXIgYnkgaW5kaXZpZHVhbCBiaXRzOgorICAweDAxICAgd2hpdGUgc3BhY2UgY2hhcmFjdGVyCisgIDB4MDIgICBsZXR0ZXIKKyAgMHgwNCAgIGRlY2ltYWwgZGlnaXQKKyAgMHgwOCAgIGhleGFkZWNpbWFsIGRpZ2l0CisgIDB4MTAgICBhbHBoYW51bWVyaWMgb3IgJ18nCisgIDB4ODAgICByZWd1bGFyIGV4cHJlc3Npb24gbWV0YWNoYXJhY3RlciBvciBiaW5hcnkgemVybworKi8KKworICAweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qICAgMC0gIDcgKi8KKyAgMHgwMCwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMCwweDAwLCAvKiAgIDgtIDE1ICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogIDE2LSAyMyAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qICAyNC0gMzEgKi8KKyAgMHgwMSwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDAwLCAvKiAgICAtICcgICovCisgIDB4ODAsMHg4MCwweDgwLDB4ODAsMHgwMCwweDAwLDB4ODAsMHgwMCwgLyogICggLSAvICAqLworICAweDFjLDB4MWMsMHgxYywweDFjLDB4MWMsMHgxYywweDFjLDB4MWMsIC8qICAwIC0gNyAgKi8KKyAgMHgxYywweDFjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLCAvKiAgOCAtID8gICovCisgIDB4MDAsMHgxYSwweDFhLDB4MWEsMHgxYSwweDFhLDB4MWEsMHgxMiwgLyogIEAgLSBHICAqLworICAweDEyLDB4MTIsMHgxMiwweDEyLDB4MTIsMHgxMiwweDEyLDB4MTIsIC8qICBIIC0gTyAgKi8KKyAgMHgxMiwweDEyLDB4MTIsMHgxMiwweDEyLDB4MTIsMHgxMiwweDEyLCAvKiAgUCAtIFcgICovCisgIDB4MTIsMHgxMiwweDEyLDB4ODAsMHg4MCwweDAwLDB4ODAsMHgxMCwgLyogIFggLSBfICAqLworICAweDAwLDB4MWEsMHgxYSwweDFhLDB4MWEsMHgxYSwweDFhLDB4MTIsIC8qICBgIC0gZyAgKi8KKyAgMHgxMiwweDEyLDB4MTIsMHgxMiwweDEyLDB4MTIsMHgxMiwweDEyLCAvKiAgaCAtIG8gICovCisgIDB4MTIsMHgxMiwweDEyLDB4MTIsMHgxMiwweDEyLDB4MTIsMHgxMiwgLyogIHAgLSB3ICAqLworICAweDEyLDB4MTIsMHgxMiwweDgwLDB4ODAsMHgwMCwweDAwLDB4MDAsIC8qICB4IC0xMjcgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAxMjgtMTM1ICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogMTM2LTE0MyAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDE0NC0xNTEgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAxNTItMTU5ICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogMTYwLTE2NyAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDE2OC0xNzUgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAxNzYtMTgzICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogMTg0LTE5MSAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDE5Mi0xOTkgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAyMDAtMjA3ICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogMjA4LTIxNSAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDIxNi0yMjMgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLCAvKiAyMjQtMjMxICovCisgIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwgLyogMjMyLTIzOSAqLworICAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsIC8qIDI0MC0yNDcgKi8KKyAgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfTsvKiAyNDgtMjU1ICovCisKKy8qIFRoaXMgaXMgYSBzZXQgb2YgdGFibGVzIHRoYXQgY2FtZSBvcmlnaW5hbGx5IGZyb20gYSBXaW5kb3dzIHVzZXIuIEl0IHNlZW1zCit0byBiZSBhdCBsZWFzdCBhbiBhcHByb3hpbWF0aW9uIG9mIElTTyA4ODU5LiBJbiBwYXJ0aWN1bGFyLCB0aGVyZSBhcmUKK2NoYXJhY3RlcnMgZ3JlYXRlciB0aGFuIDEyOCB0aGF0IGFyZSBtYXJrZWQgYXMgc3BhY2VzLCBsZXR0ZXJzLCBldGMuICovCisKK3N0YXRpYyBjb25zdCB1aW50OF90IHRhYmxlczJbXSA9IHsKKzAsMSwyLDMsNCw1LDYsNywKKzgsOSwxMCwxMSwxMiwxMywxNCwxNSwKKzE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLAorMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsCiszMiwzMywzNCwzNSwzNiwzNywzOCwzOSwKKzQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LAorNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsCis1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2MywKKzY0LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywKKzEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsCisxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LAorMTIwLDEyMSwxMjIsOTEsOTIsOTMsOTQsOTUsCis5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsCisxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLAorMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwKKzEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxMjcsCisxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LAorMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywKKzE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsCisxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LAorMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywKKzE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsCisxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLAorMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwKKzIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsCisyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LAorMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDIxNSwKKzI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyMjMsCisyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLAorMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwKKzI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsCisyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LAorMCwxLDIsMyw0LDUsNiw3LAorOCw5LDEwLDExLDEyLDEzLDE0LDE1LAorMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsCisyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwKKzMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LAorNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsCis0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSwKKzU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLAorNjQsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLAorMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwKKzExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksCisxMjAsMTIxLDEyMiw5MSw5Miw5Myw5NCw5NSwKKzk2LDY1LDY2LDY3LDY4LDY5LDcwLDcxLAorNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksCis4MCw4MSw4Miw4Myw4NCw4NSw4Niw4NywKKzg4LDg5LDkwLDEyMywxMjQsMTI1LDEyNiwxMjcsCisxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LAorMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywKKzE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsCisxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LAorMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywKKzE2OCwxNjksMTcwLDE3MSwxNzIsMTczLDE3NCwxNzUsCisxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLAorMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwKKzIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsCisyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LAorMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDIxNSwKKzI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyMjMsCisxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LAorMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywKKzIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyNDcsCisyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjU1LAorMCw2MiwwLDAsMSwwLDAsMCwKKzAsMCwwLDAsMCwwLDAsMCwKKzMyLDAsMCwwLDEsMCwwLDAsCiswLDAsMCwwLDAsMCwwLDAsCiswLDAsMCwwLDAsMCwyNTUsMywKKzEyNiwwLDAsMCwxMjYsMCwwLDAsCiswLDAsMCwwLDAsMCwwLDAsCiswLDAsMCwwLDAsMCwwLDAsCiswLDAsMCwwLDAsMCwyNTUsMywKKzAsMCwwLDAsMCwwLDAsMCwKKzAsMCwwLDAsMCwwLDEyLDIsCiswLDAsMCwwLDAsMCwwLDAsCiswLDAsMCwwLDAsMCwwLDAsCisyNTQsMjU1LDI1NSw3LDAsMCwwLDAsCiswLDAsMCwwLDAsMCwwLDAsCisyNTUsMjU1LDEyNywxMjcsMCwwLDAsMCwKKzAsMCwwLDAsMCwwLDAsMCwKKzAsMCwwLDAsMjU0LDI1NSwyNTUsNywKKzAsMCwwLDAsMCw0LDMyLDQsCiswLDAsMCwxMjgsMjU1LDI1NSwxMjcsMjU1LAorMCwwLDAsMCwwLDAsMjU1LDMsCisyNTQsMjU1LDI1NSwxMzUsMjU0LDI1NSwyNTUsNywKKzAsMCwwLDAsMCw0LDQ0LDYsCisyNTUsMjU1LDEyNywyNTUsMjU1LDI1NSwxMjcsMjU1LAorMCwwLDAsMCwyNTQsMjU1LDI1NSwyNTUsCisyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMTI3LAorMCwwLDAsMCwyNTQsMjU1LDI1NSwyNTUsCisyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LAorMCwyLDAsMCwyNTUsMjU1LDI1NSwyNTUsCisyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMTI3LAorMCwwLDAsMCwyNTUsMjU1LDI1NSwyNTUsCisyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LAorMCwwLDAsMCwyNTQsMjU1LDAsMjUyLAorMSwwLDAsMjQ4LDEsMCwwLDEyMCwKKzAsMCwwLDAsMjU0LDI1NSwyNTUsMjU1LAorMCwwLDEyOCwwLDAsMCwxMjgsMCwKKzI1NSwyNTUsMjU1LDI1NSwwLDAsMCwwLAorMCwwLDAsMCwwLDAsMCwxMjgsCisyNTUsMjU1LDI1NSwyNTUsMCwwLDAsMCwKKzAsMCwwLDAsMCwwLDAsMCwKKzEyOCwwLDAsMCwwLDAsMCwwLAorMCwxLDEsMCwxLDEsMCwwLAorMCwwLDAsMCwwLDAsMCwwLAorMCwwLDAsMCwwLDAsMCwwLAorMSwwLDAsMCwxMjgsMCwwLDAsCisxMjgsMTI4LDEyOCwxMjgsMCwwLDEyOCwwLAorMjgsMjgsMjgsMjgsMjgsMjgsMjgsMjgsCisyOCwyOCwwLDAsMCwwLDAsMTI4LAorMCwyNiwyNiwyNiwyNiwyNiwyNiwxOCwKKzE4LDE4LDE4LDE4LDE4LDE4LDE4LDE4LAorMTgsMTgsMTgsMTgsMTgsMTgsMTgsMTgsCisxOCwxOCwxOCwxMjgsMTI4LDAsMTI4LDE2LAorMCwyNiwyNiwyNiwyNiwyNiwyNiwxOCwKKzE4LDE4LDE4LDE4LDE4LDE4LDE4LDE4LAorMTgsMTgsMTgsMTgsMTgsMTgsMTgsMTgsCisxOCwxOCwxOCwxMjgsMTI4LDAsMCwwLAorMCwwLDAsMCwwLDEsMCwwLAorMCwwLDAsMCwwLDAsMCwwLAorMCwwLDAsMCwwLDAsMCwwLAorMCwwLDAsMCwwLDAsMCwwLAorMSwwLDAsMCwwLDAsMCwwLAorMCwwLDE4LDAsMCwwLDAsMCwKKzAsMCwyMCwyMCwwLDE4LDAsMCwKKzAsMjAsMTgsMCwwLDAsMCwwLAorMTgsMTgsMTgsMTgsMTgsMTgsMTgsMTgsCisxOCwxOCwxOCwxOCwxOCwxOCwxOCwxOCwKKzE4LDE4LDE4LDE4LDE4LDE4LDE4LDAsCisxOCwxOCwxOCwxOCwxOCwxOCwxOCwxOCwKKzE4LDE4LDE4LDE4LDE4LDE4LDE4LDE4LAorMTgsMTgsMTgsMTgsMTgsMTgsMTgsMTgsCisxOCwxOCwxOCwxOCwxOCwxOCwxOCwwLAorMTgsMTgsMTgsMTgsMTgsMTgsMTgsMTgKK307CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgIExvY2FsIG1lbW9yeSBmdW5jdGlvbnMgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEFsdGVybmF0aXZlIG1lbW9yeSBmdW5jdGlvbnMsIHRvIHRlc3QgZnVuY3Rpb25hbGl0eS4gKi8KKworc3RhdGljIHZvaWQgKm15X21hbGxvYyhzaXplX3Qgc2l6ZSwgdm9pZCAqZGF0YSkKK3sKK3ZvaWQgKmJsb2NrID0gbWFsbG9jKHNpemUpOworKHZvaWQpZGF0YTsKK2lmIChzaG93X21lbW9yeSkKKyAgZnByaW50ZihvdXRmaWxlLCAibWFsbG9jICAgICAgICUzZCAlcFxuIiwgKGludClzaXplLCBibG9jayk7CityZXR1cm4gYmxvY2s7Cit9CisKK3N0YXRpYyB2b2lkIG15X2ZyZWUodm9pZCAqYmxvY2ssIHZvaWQgKmRhdGEpCit7Cisodm9pZClkYXRhOworaWYgKHNob3dfbWVtb3J5KQorICBmcHJpbnRmKG91dGZpbGUsICJmcmVlICAgICAgICAgICAgICVwXG4iLCBibG9jayk7CitmcmVlKGJsb2NrKTsKK30KKworLyogRm9yIHJlY3Vyc2lvbiBtYWxsb2MvZnJlZSwgdG8gdGVzdCBzdGFja2luZyBjYWxscyAqLworCisjaWZkZWYgSEVBUF9NQVRDSF9SRUNVUlNFCitzdGF0aWMgdm9pZCAqbXlfc3RhY2tfbWFsbG9jKHNpemVfdCBzaXplLCB2b2lkICpkYXRhKQorewordm9pZCAqYmxvY2sgPSBtYWxsb2Moc2l6ZSk7Cisodm9pZClkYXRhOworaWYgKHNob3dfbWVtb3J5KQorICBmcHJpbnRmKG91dGZpbGUsICJzdGFja19tYWxsb2MgJTNkICVwXG4iLCAoaW50KXNpemUsIGJsb2NrKTsKK3JldHVybiBibG9jazsKK30KKworc3RhdGljIHZvaWQgbXlfc3RhY2tfZnJlZSh2b2lkICpibG9jaywgdm9pZCAqZGF0YSkKK3sKKyh2b2lkKWRhdGE7CitpZiAoc2hvd19tZW1vcnkpCisgIGZwcmludGYob3V0ZmlsZSwgInN0YWNrX2ZyZWUgICAgICAgJXBcbiIsIGJsb2NrKTsKK2ZyZWUoYmxvY2spOworfQorI2VuZGlmICAvKiBIRUFQX01BVENIX1JFQ1VSU0UgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICBDYWxsYmFjayBmdW5jdGlvbiBmb3Igc3RhY2sgZ3VhcmQgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgaXMgc2V0IHVwIHRvIGJlIGNhbGxlZCBmcm9tIHBjcmUyX2NvbXBpbGUoKSB3aGVuIHRoZSBzdGFja2d1YXJkPW4KK21vZGlmaWVyIHNldHMgYSB2YWx1ZSBncmVhdGVyIHRoYW4gemVyby4gVGhlIHRlc3Qgd2UgZG8gaXMgd2hldGhlciB0aGUKK3BhcmVudGhlc2lzIG5lc3RpbmcgZGVwdGggaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBzZXQgYnkgdGhlIG1vZGlmaWVyLgorCitBcmd1bWVudDogIHRoZSBjdXJyZW50IHBhcmVudGhlc2lzIG5lc3RpbmcgZGVwdGgKK1JldHVybnM6ICAgbm9uLXplcm8gdG8ga2lsbCB0aGUgY29tcGlsYXRpb24KKyovCisKK3N0YXRpYyBpbnQKK3N0YWNrX2d1YXJkKHVpbnQzMl90IGRlcHRoLCB2b2lkICp1c2VyX2RhdGEpCit7Cisodm9pZCl1c2VyX2RhdGE7CityZXR1cm4gZGVwdGggPiBwYXRfcGF0Y3RsLnN0YWNrZ3VhcmRfdGVzdDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgIEpJVCBtZW1vcnkgY2FsbGJhY2sgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBQQ1JFMl9KSVRfU1RBQ0sqCitqaXRfY2FsbGJhY2sodm9pZCAqYXJnKQoreworaml0X3dhc191c2VkID0gVFJVRTsKK3JldHVybiAoUENSRTJfSklUX1NUQUNLICopYXJnOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgQ29udmVydCBVVEYtOCBjaGFyYWN0ZXIgdG8gY29kZSBwb2ludCAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiByZWFkcyBvbmUgb3IgbW9yZSBieXRlcyB0aGF0IHJlcHJlc2VudCBhIFVURi04IGNoYXJhY3RlciwKK2FuZCByZXR1cm5zIHRoZSBjb2RlcG9pbnQgb2YgdGhhdCBjaGFyYWN0ZXIuIE5vdGUgdGhhdCB0aGUgZnVuY3Rpb24gc3VwcG9ydHMKK3RoZSBvcmlnaW5hbCBVVEYtOCBkZWZpbml0aW9uIG9mIFJGQyAyMjc5LCBhbGxvd2luZyBmb3IgdmFsdWVzIGluIHRoZSByYW5nZSAwCit0byAweDdmZmZmZmZmLCB1cCB0byA2IGJ5dGVzIGxvbmcuIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gZ2VuZXJhdGUKK2NvZGVwb2ludHMgZ3JlYXRlciB0aGFuIDB4MTBmZmZmIHdoaWNoIGFyZSB1c2VmdWwgZm9yIHRlc3RpbmcgUENSRTIncyBlcnJvcgorY2hlY2tpbmcsIGFuZCBhbHNvIGZvciBnZW5lcmF0aW5nIDMyLWJpdCBub24tVVRGIGRhdGEgdmFsdWVzIGFib3ZlIHRoZSBVVEYKK2xpbWl0LgorCitBcmd1bWVudDoKKyAgdXRmOGJ5dGVzICAgYSBwb2ludGVyIHRvIHRoZSBieXRlIHZlY3RvcgorICB2cHRyICAgICAgICBhIHBvaW50ZXIgdG8gYW4gaW50IHRvIHJlY2VpdmUgdGhlIHZhbHVlCisKK1JldHVybnM6ICAgICAgPiAgMCA9PiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkCisgICAgICAgICAgICAgIC02IHRvIDAgPT4gbWFsZm9ybWVkIFVURi04IGNoYXJhY3RlciBhdCBvZmZzZXQgPSAoLXJldHVybikKKyovCisKK3N0YXRpYyBpbnQKK3V0Zjgyb3JkKFBDUkUyX1NQVFI4IHV0ZjhieXRlcywgdWludDMyX3QgKnZwdHIpCit7Cit1aW50MzJfdCBjID0gKnV0ZjhieXRlcysrOwordWludDMyX3QgZCA9IGM7CitpbnQgaSwgaiwgczsKKworZm9yIChpID0gLTE7IGkgPCA2OyBpKyspICAgICAgICAgICAgICAgLyogaSBpcyBudW1iZXIgb2YgYWRkaXRpb25hbCBieXRlcyAqLworICB7CisgIGlmICgoZCAmIDB4ODApID09IDApIGJyZWFrOworICBkIDw8PSAxOworICB9CisKK2lmIChpID09IC0xKSB7ICp2cHRyID0gYzsgcmV0dXJuIDE7IH0gIC8qIGFzY2lpIGNoYXJhY3RlciAqLworaWYgKGkgPT0gMCB8fCBpID09IDYpIHJldHVybiAwOyAgICAgICAgLyogaW52YWxpZCBVVEYtOCAqLworCisvKiBpIG5vdyBoYXMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgMS01ICovCisKK3MgPSA2Kmk7CitkID0gKGMgJiB1dGY4X3RhYmxlM1tpXSkgPDwgczsKKworZm9yIChqID0gMDsgaiA8IGk7IGorKykKKyAgeworICBjID0gKnV0ZjhieXRlcysrOworICBpZiAoKGMgJiAweGMwKSAhPSAweDgwKSByZXR1cm4gLShqKzEpOworICBzIC09IDY7CisgIGQgfD0gKGMgJiAweDNmKSA8PCBzOworICB9CisKKy8qIENoZWNrIHRoYXQgZW5jb2Rpbmcgd2FzIHRoZSBjb3JyZWN0IHVuaXF1ZSBvbmUgKi8KKworZm9yIChqID0gMDsgaiA8IHV0ZjhfdGFibGUxX3NpemU7IGorKykKKyAgaWYgKGQgPD0gKHVpbnQzMl90KXV0ZjhfdGFibGUxW2pdKSBicmVhazsKK2lmIChqICE9IGkpIHJldHVybiAtKGkrMSk7CisKKy8qIFZhbGlkIHZhbHVlICovCisKKyp2cHRyID0gZDsKK3JldHVybiBpKzE7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICBQcmludCBvbmUgY2hhcmFjdGVyICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFByaW50IGEgc2luZ2xlIGNoYXJhY3RlciBlaXRoZXIgbGl0ZXJhbGx5LCBvciBhcyBhIGhleCBlc2NhcGUsIGFuZCBjb3VudCBob3cKK21hbnkgcHJpbnRlZCBjaGFyYWN0ZXJzIGFyZSB1c2VkLgorCitBcmd1bWVudHM6CisgIGMgICAgICAgICAgICB0aGUgY2hhcmFjdGVyCisgIHV0ZiAgICAgICAgICBUUlVFIGluIFVURiBtb2RlCisgIGYgICAgICAgICAgICB0aGUgRklMRSB0byBwcmludCB0bywgb3IgTlVMTCBqdXN0IHRvIGNvdW50IGNoYXJhY3RlcnMKKworUmV0dXJuczogICAgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbgorKi8KKworc3RhdGljIGludAorcGNoYXIodWludDMyX3QgYywgQk9PTCB1dGYsIEZJTEUgKmYpCit7CitpbnQgbiA9IDA7CitpZiAoUFJJTlRPSyhjKSkKKyAgeworICBpZiAoZiAhPSBOVUxMKSBmcHJpbnRmKGYsICIlYyIsIGMpOworICByZXR1cm4gMTsKKyAgfQorCitpZiAoYyA8IDB4MTAwKQorICB7CisgIGlmICh1dGYpCisgICAgeworICAgIGlmIChmICE9IE5VTEwpIGZwcmludGYoZiwgIlxceHslMDJ4fSIsIGMpOworICAgIHJldHVybiA2OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBpZiAoZiAhPSBOVUxMKSBmcHJpbnRmKGYsICJcXHglMDJ4IiwgYyk7CisgICAgcmV0dXJuIDQ7CisgICAgfQorICB9CisKK2lmIChmICE9IE5VTEwpIG4gPSBmcHJpbnRmKGYsICJcXHh7JTAyeH0iLCBjKTsKK3JldHVybiBuID49IDAgPyBuIDogMDsKK30KKworCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICBGaW5kIGxlbmd0aCBvZiAwLXRlcm1pbmF0ZWQgMTYtYml0IHN0cmluZyAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzaXplX3Qgc3RybGVuMTYoUENSRTJfU1BUUjE2IHApCit7CitQQ1JFMl9TUFRSMTYgcHAgPSBwOword2hpbGUgKCpwcCAhPSAwKSBwcCsrOworcmV0dXJuIChpbnQpKHBwIC0gcCk7Cit9CisjZW5kaWYgIC8qIFNVUFBPUlRfUENSRTJfMTYgKi8KKworCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzMyCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICBGaW5kIGxlbmd0aCBvZiAwLXRlcm1pbmF0ZWQgMzItYml0IHN0cmluZyAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzaXplX3Qgc3RybGVuMzIoUENSRTJfU1BUUjMyIHApCit7CitQQ1JFMl9TUFRSMzIgcHAgPSBwOword2hpbGUgKCpwcCAhPSAwKSBwcCsrOworcmV0dXJuIChpbnQpKHBwIC0gcCk7Cit9CisjZW5kaWYgIC8qIFNVUFBPUlRfUENSRTJfMzIgKi8KKworCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgIFByaW50IDgtYml0IGNoYXJhY3RlciBzdHJpbmcgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE11c3QgaGFuZGxlIFVURi04IHN0cmluZ3MgaW4gdXRmOCBtb2RlLiBZaWVsZHMgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4KK0ZvciBwcmludGluZyAqTUFSSyBzdHJpbmdzLCBhIG5lZ2F0aXZlIGxlbmd0aCBpcyBnaXZlbi4gSWYgaGFuZGVkIGEgTlVMTCBmaWxlLAoranVzdCBjb3VudHMgY2hhcnMgd2l0aG91dCBwcmludGluZy4gKi8KKworc3RhdGljIGludCBwY2hhcnM4KFBDUkUyX1NQVFI4IHAsIGludCBsZW5ndGgsIEJPT0wgdXRmLCBGSUxFICpmKQorewordWludDMyX3QgYyA9IDA7CitpbnQgeWllbGQgPSAwOworaWYgKGxlbmd0aCA8IDApIGxlbmd0aCA9IHBbLTFdOword2hpbGUgKGxlbmd0aC0tID4gMCkKKyAgeworICBpZiAodXRmKQorICAgIHsKKyAgICBpbnQgcmMgPSB1dGY4Mm9yZChwLCAmYyk7CisgICAgaWYgKHJjID4gMCAmJiByYyA8PSBsZW5ndGggKyAxKSAgIC8qIE11c3RuJ3QgcnVuIG92ZXIgdGhlIGVuZCAqLworICAgICAgeworICAgICAgbGVuZ3RoIC09IHJjIC0gMTsKKyAgICAgIHAgKz0gcmM7CisgICAgICB5aWVsZCArPSBwY2hhcihjLCB1dGYsIGYpOworICAgICAgY29udGludWU7CisgICAgICB9CisgICAgfQorICBjID0gKnArKzsKKyAgeWllbGQgKz0gcGNoYXIoYywgdXRmLCBmKTsKKyAgfQorcmV0dXJuIHlpZWxkOworfQorI2VuZGlmCisKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfMTYKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICBQcmludCAxNi1iaXQgY2hhcmFjdGVyIHN0cmluZyAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTXVzdCBoYW5kbGUgVVRGLTE2IHN0cmluZ3MgaW4gdXRmIG1vZGUuIFlpZWxkcyBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLgorRm9yIHByaW50aW5nICpNQVJLIHN0cmluZ3MsIGEgbmVnYXRpdmUgbGVuZ3RoIGlzIGdpdmVuLiBJZiBoYW5kZWQgYSBOVUxMIGZpbGUsCitqdXN0IGNvdW50cyBjaGFycyB3aXRob3V0IHByaW50aW5nLiAqLworCitzdGF0aWMgaW50IHBjaGFyczE2KFBDUkUyX1NQVFIxNiBwLCBpbnQgbGVuZ3RoLCBCT09MIHV0ZiwgRklMRSAqZikKK3sKK2ludCB5aWVsZCA9IDA7CitpZiAobGVuZ3RoIDwgMCkgbGVuZ3RoID0gcFstMV07Cit3aGlsZSAobGVuZ3RoLS0gPiAwKQorICB7CisgIHVpbnQzMl90IGMgPSAqcCsrICYgMHhmZmZmOworICBpZiAodXRmICYmIGMgPj0gMHhEODAwICYmIGMgPCAweERDMDAgJiYgbGVuZ3RoID4gMCkKKyAgICB7CisgICAgaW50IGQgPSAqcCAmIDB4ZmZmZjsKKyAgICBpZiAoZCA+PSAweERDMDAgJiYgZCA8PSAweERGRkYpCisgICAgICB7CisgICAgICBjID0gKChjICYgMHgzZmYpIDw8IDEwKSArIChkICYgMHgzZmYpICsgMHgxMDAwMDsKKyAgICAgIGxlbmd0aC0tOworICAgICAgcCsrOworICAgICAgfQorICAgIH0KKyAgeWllbGQgKz0gcGNoYXIoYywgdXRmLCBmKTsKKyAgfQorcmV0dXJuIHlpZWxkOworfQorI2VuZGlmICAvKiBTVVBQT1JUX1BDUkUyXzE2ICovCisKKworCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgIFByaW50IDMyLWJpdCBjaGFyYWN0ZXIgc3RyaW5nICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBNdXN0IGhhbmRsZSBVVEYtMzIgc3RyaW5ncyBpbiB1dGYgbW9kZS4gWWllbGRzIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuCitGb3IgcHJpbnRpbmcgKk1BUksgc3RyaW5ncywgYSBuZWdhdGl2ZSBsZW5ndGggaXMgZ2l2ZW4uSWYgaGFuZGVkIGEgTlVMTCBmaWxlLAoranVzdCBjb3VudHMgY2hhcnMgd2l0aG91dCBwcmludGluZy4gKi8KKworc3RhdGljIGludCBwY2hhcnMzMihQQ1JFMl9TUFRSMzIgcCwgaW50IGxlbmd0aCwgQk9PTCB1dGYsIEZJTEUgKmYpCit7CitpbnQgeWllbGQgPSAwOworKHZvaWQpKHV0Zik7ICAvKiBBdm9pZCBjb21waWxlciB3YXJuaW5nICovCitpZiAobGVuZ3RoIDwgMCkgbGVuZ3RoID0gcFstMV07Cit3aGlsZSAobGVuZ3RoLS0gPiAwKQorICB7CisgIHVpbnQzMl90IGMgPSAqcCsrOworICB5aWVsZCArPSBwY2hhcihjLCB1dGYsIGYpOworICB9CityZXR1cm4geWllbGQ7Cit9CisjZW5kaWYgIC8qIFNVUFBPUlRfUENSRTJfMzIgKi8KKworCisKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgQ29udmVydCBjaGFyYWN0ZXIgdmFsdWUgdG8gVVRGLTggICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIHRha2VzIGFuIGludGVnZXIgdmFsdWUgaW4gdGhlIHJhbmdlIDAgLSAweDdmZmZmZmZmCithbmQgZW5jb2RlcyBpdCBhcyBhIFVURi04IGNoYXJhY3RlciBpbiAwIHRvIDYgYnl0ZXMuCisKK0FyZ3VtZW50czoKKyAgY3ZhbHVlICAgICB0aGUgY2hhcmFjdGVyIHZhbHVlCisgIHV0ZjhieXRlcyAgcG9pbnRlciB0byBidWZmZXIgZm9yIHJlc3VsdCAtIGF0IGxlYXN0IDYgYnl0ZXMgbG9uZworCitSZXR1cm5zOiAgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcGxhY2VkIGluIHRoZSBidWZmZXIKKyovCisKK3N0YXRpYyBpbnQKK29yZDJ1dGY4KHVpbnQzMl90IGN2YWx1ZSwgdWludDhfdCAqdXRmOGJ5dGVzKQoreworcmVnaXN0ZXIgaW50IGksIGo7CitpZiAoY3ZhbHVlID4gMHg3ZmZmZmZmZnUpCisgIHJldHVybiAtMTsKK2ZvciAoaSA9IDA7IGkgPCB1dGY4X3RhYmxlMV9zaXplOyBpKyspCisgIGlmIChjdmFsdWUgPD0gKHVpbnQzMl90KXV0ZjhfdGFibGUxW2ldKSBicmVhazsKK3V0ZjhieXRlcyArPSBpOworZm9yIChqID0gaTsgaiA+IDA7IGotLSkKKyB7CisgKnV0ZjhieXRlcy0tID0gMHg4MCB8IChjdmFsdWUgJiAweDNmKTsKKyBjdmFsdWUgPj49IDY7CisgfQorKnV0ZjhieXRlcyA9IHV0ZjhfdGFibGUyW2ldIHwgY3ZhbHVlOworcmV0dXJuIGkgKyAxOworfQorI2VuZGlmICAvKiBTVVBQT1JUX1BDUkUyXzggKi8KKworCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICBDb252ZXJ0IHBhdHRlcm4gdG8gMTYtYml0ICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEluIFVURiBtb2RlIHRoZSBpbnB1dCBpcyBhbHdheXMgaW50ZXJwcmV0ZWQgYXMgYSBzdHJpbmcgb2YgVVRGLTggYnl0ZXMuIElmCithbGwgdGhlIGlucHV0IGJ5dGVzIGFyZSBBU0NJSSwgdGhlIHNwYWNlIG5lZWRlZCBmb3IgYSAxNi1iaXQgc3RyaW5nIGlzIGV4YWN0bHkKK2RvdWJsZSB0aGUgOC1iaXQgc2l6ZS4gT3RoZXJ3aXNlLCB0aGUgc2l6ZSBuZWVkZWQgZm9yIGEgMTYtYml0IHN0cmluZyBpcyBubworbW9yZSB0aGFuIGRvdWJsZSwgYmVjYXVzZSB1cCB0byAweGZmZmYgdXNlcyBubyBtb3JlIHRoYW4gMyBieXRlcyBpbiBVVEYtOCBidXQKK3Bvc3NpYmx5IDQgaW4gVVRGLTE2LiBIaWdoZXIgdmFsdWVzIHVzZSA0IGJ5dGVzIGluIFVURi04IGFuZCB1cCB0byA0IGJ5dGVzIGluCitVVEYtMTYuIFRoZSByZXN1bHQgaXMgYWx3YXlzIGxlZnQgaW4gcGJ1ZmZlcjE2LiBJbXBvc2UgYSBtaW5pbXVtIHNpemUgdG8gc2F2ZQorcmVwZWF0ZWQgcmUtc2l6aW5nLgorCitOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBvYmplY3QgdG8gc3Vycm9nYXRlIHZhbHVlcy4gVGhpcyBpcworZGVsaWJlcmF0ZTsgaXQgbWFrZXMgaXQgcG9zc2libGUgdG8gY29uc3RydWN0IFVURi0xNiBzdHJpbmdzIHRoYXQgYXJlIGludmFsaWQsCitmb3IgdGhlIHB1cnBvc2Ugb2YgdGVzdGluZyB0aGF0IHRoZXkgYXJlIGNvcnJlY3RseSBmYXVsdGVkLgorCitBcmd1bWVudHM6CisgIHAgICAgICAgICAgcG9pbnRzIHRvIGEgYnl0ZSBzdHJpbmcKKyAgdXRmICAgICAgICBub24temVybyBpZiBjb252ZXJ0aW5nIHRvIFVURi0xNgorICBsZW5wdHIgICAgIHBvaW50cyB0byBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZyAoZXhjbHVkaW5nIHRyYWlsaW5nIHplcm8pCisKK1JldHVybnM6ICAgICAwIG9uIHN1Y2Nlc3MsIHdpdGggdGhlIGxlbmd0aCB1cGRhdGVkIHRvIHRoZSBudW1iZXIgb2YgMTYtYml0CisgICAgICAgICAgICAgICBkYXRhIGl0ZW1zIHVzZWQgKGV4Y2x1ZGluZyB0aGUgdHJhaWxpbmcgemVybykKKyAgICAgICAgICAgICBPUiAtMSBpZiBhIFVURi04IHN0cmluZyBpcyBtYWxmb3JtZWQKKyAgICAgICAgICAgICBPUiAtMiBpZiBhIHZhbHVlID4gMHgxMGZmZmYgaXMgZW5jb3VudGVyZWQgaW4gVVRGIG1vZGUKKyAgICAgICAgICAgICBPUiAtMyBpZiBhIHZhbHVlID4gMHhmZmZmIGlzIGVuY291bnRlcmVkIHdoZW4gbm90IGluIFVURiBtb2RlCisqLworCitzdGF0aWMgUENSRTJfU0laRQordG8xNih1aW50OF90ICpwLCBpbnQgdXRmLCBQQ1JFMl9TSVpFICpsZW5wdHIpCit7Cit1aW50MTZfdCAqcHA7CitQQ1JFMl9TSVpFIGxlbiA9ICpsZW5wdHI7CisKK2lmIChwYnVmZmVyMTZfc2l6ZSA8IDIqbGVuICsgMikKKyAgeworICBpZiAocGJ1ZmZlcjE2ICE9IE5VTEwpIGZyZWUocGJ1ZmZlcjE2KTsKKyAgcGJ1ZmZlcjE2X3NpemUgPSAyKmxlbiArIDI7CisgIGlmIChwYnVmZmVyMTZfc2l6ZSA8IDI1NikgcGJ1ZmZlcjE2X3NpemUgPSAyNTY7CisgIHBidWZmZXIxNiA9ICh1aW50MTZfdCAqKW1hbGxvYyhwYnVmZmVyMTZfc2l6ZSk7CisgIGlmIChwYnVmZmVyMTYgPT0gTlVMTCkKKyAgICB7CisgICAgZnByaW50ZihzdGRlcnIsICJwY3JlMnRlc3Q6IG1hbGxvYyglbHUpIGZhaWxlZCBmb3IgcGJ1ZmZlcjE2XG4iLAorICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KXBidWZmZXIxNl9zaXplKTsKKyAgICBleGl0KDEpOworICAgIH0KKyAgfQorCitwcCA9IHBidWZmZXIxNjsKK2lmICghdXRmKQorICB7CisgIGZvciAoOyBsZW4gPiAwOyBsZW4tLSkgKnBwKysgPSAqcCsrOworICB9CitlbHNlIHdoaWxlIChsZW4gPiAwKQorICB7CisgIHVpbnQzMl90IGM7CisgIGludCBjaGxlbiA9IHV0Zjgyb3JkKHAsICZjKTsKKyAgaWYgKGNobGVuIDw9IDApIHJldHVybiAtMTsKKyAgaWYgKGMgPiAweDEwZmZmZikgcmV0dXJuIC0yOworICBwICs9IGNobGVuOworICBsZW4gLT0gY2hsZW47CisgIGlmIChjIDwgMHgxMDAwMCkgKnBwKysgPSBjOyBlbHNlCisgICAgeworICAgIGlmICghdXRmKSByZXR1cm4gLTM7CisgICAgYyAtPSAweDEwMDAwOworICAgICpwcCsrID0gMHhEODAwIHwgKGMgPj4gMTApOworICAgICpwcCsrID0gMHhEQzAwIHwgKGMgJiAweDNmZik7CisgICAgfQorICB9CisKKypwcCA9IDA7CisqbGVucHRyID0gcHAgLSBwYnVmZmVyMTY7CityZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgIENvbnZlcnQgcGF0dGVybiB0byAzMi1iaXQgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSW4gVVRGIG1vZGUgdGhlIGlucHV0IGlzIGFsd2F5cyBpbnRlcnByZXRlZCBhcyBhIHN0cmluZyBvZiBVVEYtOCBieXRlcy4gSWYKK2FsbCB0aGUgaW5wdXQgYnl0ZXMgYXJlIEFTQ0lJLCB0aGUgc3BhY2UgbmVlZGVkIGZvciBhIDMyLWJpdCBzdHJpbmcgaXMgZXhhY3RseQorZm91ciB0aW1lcyB0aGUgOC1iaXQgc2l6ZS4gT3RoZXJ3aXNlLCB0aGUgc2l6ZSBuZWVkZWQgZm9yIGEgMzItYml0IHN0cmluZyBpcyBubworbW9yZSB0aGFuIGZvdXIgdGltZXMsIGJlY2F1c2UgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIG11c3QgYmUgbGVzcyB0aGFuIHRoZQorbnVtYmVyIG9mIGJ5dGVzLiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBsZWZ0IGluIHBidWZmZXIzMi4gSW1wb3NlIGEgbWluaW11bSBzaXplCit0byBzYXZlIHJlcGVhdGVkIHJlLXNpemluZy4KKworTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgb2JqZWN0IHRvIHN1cnJvZ2F0ZSB2YWx1ZXMuIFRoaXMgaXMKK2RlbGliZXJhdGU7IGl0IG1ha2VzIGl0IHBvc3NpYmxlIHRvIGNvbnN0cnVjdCBVVEYtMzIgc3RyaW5ncyB0aGF0IGFyZSBpbnZhbGlkLAorZm9yIHRoZSBwdXJwb3NlIG9mIHRlc3RpbmcgdGhhdCB0aGV5IGFyZSBjb3JyZWN0bHkgZmF1bHRlZC4KKworQXJndW1lbnRzOgorICBwICAgICAgICAgIHBvaW50cyB0byBhIGJ5dGUgc3RyaW5nCisgIHV0ZiAgICAgICAgdHJ1ZSBpZiBVVEYtOCAodG8gYmUgY29udmVydGVkIHRvIFVURi0zMikKKyAgbGVucHRyICAgICBwb2ludHMgdG8gbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcgKGV4Y2x1ZGluZyB0cmFpbGluZyB6ZXJvKQorCitSZXR1cm5zOiAgICAgMCBvbiBzdWNjZXNzLCB3aXRoIHRoZSBsZW5ndGggdXBkYXRlZCB0byB0aGUgbnVtYmVyIG9mIDMyLWJpdAorICAgICAgICAgICAgICAgZGF0YSBpdGVtcyB1c2VkIChleGNsdWRpbmcgdGhlIHRyYWlsaW5nIHplcm8pCisgICAgICAgICAgICAgT1IgLTEgaWYgYSBVVEYtOCBzdHJpbmcgaXMgbWFsZm9ybWVkCisgICAgICAgICAgICAgT1IgLTIgaWYgYSB2YWx1ZSA+IDB4MTBmZmZmIGlzIGVuY291bnRlcmVkIGluIFVURiBtb2RlCisqLworCitzdGF0aWMgUENSRTJfU0laRQordG8zMih1aW50OF90ICpwLCBpbnQgdXRmLCBQQ1JFMl9TSVpFICpsZW5wdHIpCit7Cit1aW50MzJfdCAqcHA7CitQQ1JFMl9TSVpFIGxlbiA9ICpsZW5wdHI7CisKK2lmIChwYnVmZmVyMzJfc2l6ZSA8IDQqbGVuICsgNCkKKyAgeworICBpZiAocGJ1ZmZlcjMyICE9IE5VTEwpIGZyZWUocGJ1ZmZlcjMyKTsKKyAgcGJ1ZmZlcjMyX3NpemUgPSA0KmxlbiArIDQ7CisgIGlmIChwYnVmZmVyMzJfc2l6ZSA8IDI1NikgcGJ1ZmZlcjMyX3NpemUgPSAyNTY7CisgIHBidWZmZXIzMiA9ICh1aW50MzJfdCAqKW1hbGxvYyhwYnVmZmVyMzJfc2l6ZSk7CisgIGlmIChwYnVmZmVyMzIgPT0gTlVMTCkKKyAgICB7CisgICAgZnByaW50ZihzdGRlcnIsICJwY3JlMnRlc3Q6IG1hbGxvYyglbHUpIGZhaWxlZCBmb3IgcGJ1ZmZlcjMyXG4iLAorICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KXBidWZmZXIzMl9zaXplKTsKKyAgICBleGl0KDEpOworICAgIH0KKyAgfQorCitwcCA9IHBidWZmZXIzMjsKK2lmICghdXRmKQorICB7CisgIGZvciAoOyBsZW4gPiAwOyBsZW4tLSkgKnBwKysgPSAqcCsrOworICB9CitlbHNlIHdoaWxlIChsZW4gPiAwKQorICB7CisgIHVpbnQzMl90IGM7CisgIGludCBjaGxlbiA9IHV0Zjgyb3JkKHAsICZjKTsKKyAgaWYgKGNobGVuIDw9IDApIHJldHVybiAtMTsKKyAgaWYgKHV0ZiAmJiBjID4gMHgxMGZmZmYpIHJldHVybiAtMjsKKyAgcCArPSBjaGxlbjsKKyAgbGVuIC09IGNobGVuOworICAqcHArKyA9IGM7CisgIH0KKworKnBwID0gMDsKKypsZW5wdHIgPSBwcCAtIHBidWZmZXIzMjsKK3JldHVybiAwOworfQorI2VuZGlmIC8qIFNVUFBPUlRfUENSRTJfMzIgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgTW92ZSBiYWNrIGJ5IHNvIG1hbnkgY2hhcmFjdGVycyAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogR2l2ZW4gYSBjb2RlIHVuaXQgb2Zmc2V0IGluIGEgc3ViamVjdCBzdHJpbmcsIG1vdmUgYmFja3dhcmRzIGJ5IGEgbnVtYmVyIG9mCitjaGFyYWN0ZXJzLCBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgb2Zmc2V0LgorCitBcmd1bWVudHM6CisgIHN1YmplY3QgICBwb2ludGVyIHRvIHRoZSBzdHJpbmcKKyAgb2Zmc2V0ICAgIHN0YXJ0IG9mZnNldAorICBjb3VudCAgICAgY291bnQgdG8gbW92ZSBiYWNrIGJ5CisgIHV0ZiAgICAgICBUUlVFIGlmIGluIFVURiBtb2RlCisKK1JldHVybnM6ICAgYSBwb3NzaWJseSBjaGFuZ2VkIG9mZnNldAorKi8KKworc3RhdGljIFBDUkUyX1NJWkUKK2JhY2tjaGFycyh1aW50OF90ICpzdWJqZWN0LCBQQ1JFMl9TSVpFIG9mZnNldCwgdWludDMyX3QgY291bnQsIEJPT0wgdXRmKQoreworaWYgKCF1dGYgfHwgdGVzdF9tb2RlID09IFBDUkUzMl9NT0RFKQorICByZXR1cm4gKGNvdW50ID49IG9mZnNldCk/IDAgOiAob2Zmc2V0IC0gY291bnQpOworCitlbHNlIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkKKyAgeworICBQQ1JFMl9TUFRSOCBwcCA9IChQQ1JFMl9TUFRSOClzdWJqZWN0ICsgb2Zmc2V0OworICBmb3IgKDsgY291bnQgPiAwICYmIHBwID4gKFBDUkUyX1NQVFI4KXN1YmplY3Q7IGNvdW50LS0pCisgICAgeworICAgIHBwLS07CisgICAgd2hpbGUgKCgqcHAgJiAweGMwKSA9PSAweDgwKSBwcC0tOworICAgIH0KKyAgcmV0dXJuIHBwIC0gKFBDUkUyX1NQVFI4KXN1YmplY3Q7CisgIH0KKworZWxzZSAgLyogMTYtYml0IG1vZGUgKi8KKyAgeworICBQQ1JFMl9TUFRSMTYgcHAgPSAoUENSRTJfU1BUUjE2KXN1YmplY3QgKyBvZmZzZXQ7CisgIGZvciAoOyBjb3VudCA+IDAgJiYgcHAgPiAoUENSRTJfU1BUUjE2KXN1YmplY3Q7IGNvdW50LS0pCisgICAgeworICAgIHBwLS07CisgICAgaWYgKCgqcHAgJiAweGZjMDApID09IDB4ZGMwMCkgcHAtLTsKKyAgICB9CisgIHJldHVybiBwcCAtIChQQ1JFMl9TUFRSMTYpc3ViamVjdDsKKyAgfQorfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgIEV4cGFuZCBpbnB1dCBidWZmZXJzICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGRvdWJsZXMgdGhlIHNpemUgb2YgdGhlIGlucHV0IGJ1ZmZlciBhbmQgdGhlIGJ1ZmZlciBmb3IKK2tlZXBpbmcgYW4gOC1iaXQgY29weSBvZiBwYXR0ZXJucyAocGJ1ZmZlcjgpLCBhbmQgY29waWVzIHRoZSBjdXJyZW50IGJ1ZmZlcnMgdG8KK3RoZSBuZXcgb25lcy4KKworQXJndW1lbnRzOiBub25lCitSZXR1cm5zOiAgIG5vdGhpbmcgKGFib3J0cyBpZiBtYWxsb2MoKSBmYWlscykKKyovCisKK3N0YXRpYyB2b2lkCitleHBhbmRfaW5wdXRfYnVmZmVycyh2b2lkKQoreworaW50IG5ld19wYnVmZmVyOF9zaXplID0gMipwYnVmZmVyOF9zaXplOwordWludDhfdCAqbmV3X2J1ZmZlciA9ICh1aW50OF90ICopbWFsbG9jKG5ld19wYnVmZmVyOF9zaXplKTsKK3VpbnQ4X3QgKm5ld19wYnVmZmVyOCA9ICh1aW50OF90ICopbWFsbG9jKG5ld19wYnVmZmVyOF9zaXplKTsKKworaWYgKG5ld19idWZmZXIgPT0gTlVMTCB8fCBuZXdfcGJ1ZmZlcjggPT0gTlVMTCkKKyAgeworICBmcHJpbnRmKHN0ZGVyciwgInBjcmUydGVzdDogbWFsbG9jKCVkKSBmYWlsZWRcbiIsIG5ld19wYnVmZmVyOF9zaXplKTsKKyAgZXhpdCgxKTsKKyAgfQorCittZW1jcHkobmV3X2J1ZmZlciwgYnVmZmVyLCBwYnVmZmVyOF9zaXplKTsKK21lbWNweShuZXdfcGJ1ZmZlcjgsIHBidWZmZXI4LCBwYnVmZmVyOF9zaXplKTsKKworcGJ1ZmZlcjhfc2l6ZSA9IG5ld19wYnVmZmVyOF9zaXplOworCitmcmVlKGJ1ZmZlcik7CitmcmVlKHBidWZmZXI4KTsKKworYnVmZmVyID0gbmV3X2J1ZmZlcjsKK3BidWZmZXI4ID0gbmV3X3BidWZmZXI4OworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgIFJlYWQgb3IgZXh0ZW5kIGFuIGlucHV0IGxpbmUgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBJbnB1dCBsaW5lcyBhcmUgcmVhZCBpbnRvIGJ1ZmZlciwgYnV0IGJvdGggcGF0dGVybnMgYW5kIGRhdGEgbGluZXMgY2FuIGJlCitjb250aW51ZWQgb3ZlciBtdWx0aXBsZSBpbnB1dCBsaW5lcy4gSW4gYWRkaXRpb24sIGlmIHRoZSBidWZmZXIgZmlsbHMgdXAsIHdlCit3YW50IHRvIGF1dG9tYXRpY2FsbHkgZXhwYW5kIGl0IHNvIGFzIHRvIGJlIGFibGUgdG8gaGFuZGxlIGV4dHJlbWVseSBsYXJnZQorbGluZXMgdGhhdCBhcmUgbmVlZGVkIGZvciBjZXJ0YWluIHN0cmVzcyB0ZXN0cy4gV2hlbiB0aGUgaW5wdXQgYnVmZmVyIGlzCitleHBhbmRlZCwgdGhlIG90aGVyIHR3byBidWZmZXJzIG11c3QgYWxzbyBiZSBleHBhbmRlZCBsaWtld2lzZSwgYW5kIHRoZQorY29udGVudHMgb2YgcGJ1ZmZlciwgd2hpY2ggYXJlIGEgY29weSBvZiB0aGUgaW5wdXQgZm9yIGNhbGxvdXRzLCBtdXN0IGJlCitwcmVzZXJ2ZWQgKGZvciB3aGVuIGV4cGFuc2lvbiBoYXBwZW5zIGZvciBhIGRhdGEgbGluZSkuIFRoaXMgaXMgbm90IHRoZSBtb3N0CitvcHRpbWFsIHdheSBvZiBoYW5kbGluZyB0aGlzLCBidXQgaGV5LCB0aGlzIGlzIGp1c3QgYSB0ZXN0IHByb2dyYW0hCisKK0FyZ3VtZW50czoKKyAgZiAgICAgICAgICAgIHRoZSBmaWxlIHRvIHJlYWQKKyAgc3RhcnQgICAgICAgIHdoZXJlIGluIGJ1ZmZlciB0byBzdGFydCAodGhpcyAqbXVzdCogYmUgd2l0aGluIGJ1ZmZlcikKKyAgcHJvbXB0ICAgICAgIGZvciBzdGRpbiBvciByZWFkbGluZSgpCisKK1JldHVybnM6ICAgICAgIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIG5ldyBkYXRhCisgICAgICAgICAgICAgICBjb3VsZCBiZSBhIGNvcHkgb2Ygc3RhcnQsIG9yIGNvdWxkIGJlIG1vdmVkCisgICAgICAgICAgICAgICBOVUxMIGlmIG5vIGRhdGEgcmVhZCBhbmQgRU9GIHJlYWNoZWQKKyovCisKK3N0YXRpYyB1aW50OF90ICoKK2V4dGVuZF9pbnB1dGxpbmUoRklMRSAqZiwgdWludDhfdCAqc3RhcnQsIGNvbnN0IGNoYXIgKnByb21wdCkKK3sKK3VpbnQ4X3QgKmhlcmUgPSBzdGFydDsKKworZm9yICg7OykKKyAgeworICBzaXplX3QgcmxlbiA9IChzaXplX3QpKHBidWZmZXI4X3NpemUgLSAoaGVyZSAtIGJ1ZmZlcikpOworCisgIGlmIChybGVuID4gMTAwMCkKKyAgICB7CisgICAgaW50IGRsZW47CisKKyAgICAvKiBJZiBsaWJyZWFkbGluZSBvciBsaWJlZGl0IHN1cHBvcnQgaXMgcmVxdWlyZWQsIHVzZSByZWFkbGluZSgpIHRvIHJlYWQgYQorICAgIGxpbmUgaWYgdGhlIGlucHV0IGlzIGEgdGVybWluYWwuIE5vdGUgdGhhdCByZWFkbGluZSgpIHJlbW92ZXMgdGhlIHRyYWlsaW5nCisgICAgbmV3bGluZSwgc28gd2UgbXVzdCBwdXQgaXQgYmFjayBhZ2FpbiwgdG8gYmUgY29tcGF0aWJsZSB3aXRoIGZnZXRzKCkuICovCisKKyNpZiBkZWZpbmVkKFNVUFBPUlRfTElCUkVBRExJTkUpIHx8IGRlZmluZWQoU1VQUE9SVF9MSUJFRElUKQorICAgIGlmIChJTlRFUkFDVElWRShmKSkKKyAgICAgIHsKKyAgICAgIHNpemVfdCBsZW47CisgICAgICBjaGFyICpzID0gcmVhZGxpbmUocHJvbXB0KTsKKyAgICAgIGlmIChzID09IE5VTEwpIHJldHVybiAoaGVyZSA9PSBzdGFydCk/IE5VTEwgOiBzdGFydDsKKyAgICAgIGxlbiA9IHN0cmxlbihzKTsKKyAgICAgIGlmIChsZW4gPiAwKSBhZGRfaGlzdG9yeShzKTsKKyAgICAgIGlmIChsZW4gPiBybGVuIC0gMSkgbGVuID0gcmxlbiAtIDE7CisgICAgICBtZW1jcHkoaGVyZSwgcywgbGVuKTsKKyAgICAgIGhlcmVbbGVuXSA9ICdcbic7CisgICAgICBoZXJlW2xlbisxXSA9IDA7CisgICAgICBmcmVlKHMpOworICAgICAgfQorICAgIGVsc2UKKyNlbmRpZgorCisgICAgLyogUmVhZCB0aGUgbmV4dCBsaW5lIGJ5IG5vcm1hbCBtZWFucywgcHJvbXB0aW5nIGlmIHRoZSBmaWxlIGlzIGEgdHR5LiAqLworCisgICAgICB7CisgICAgICBpZiAoSU5URVJBQ1RJVkUoZikpIHByaW50ZigiJXMiLCBwcm9tcHQpOworICAgICAgaWYgKGZnZXRzKChjaGFyICopaGVyZSwgcmxlbiwgIGYpID09IE5VTEwpCisgICAgICAgIHJldHVybiAoaGVyZSA9PSBzdGFydCk/IE5VTEwgOiBzdGFydDsKKyAgICAgIH0KKworICAgIGRsZW4gPSAoaW50KXN0cmxlbigoY2hhciAqKWhlcmUpOworICAgIGlmIChkbGVuID4gMCAmJiBoZXJlW2RsZW4gLSAxXSA9PSAnXG4nKSByZXR1cm4gc3RhcnQ7CisgICAgaGVyZSArPSBkbGVuOworICAgIH0KKworICBlbHNlCisgICAgeworICAgIHNpemVfdCBzdGFydF9vZmZzZXQgPSBzdGFydCAtIGJ1ZmZlcjsKKyAgICBzaXplX3QgaGVyZV9vZmZzZXQgPSBoZXJlIC0gYnVmZmVyOworICAgIGV4cGFuZF9pbnB1dF9idWZmZXJzKCk7CisgICAgc3RhcnQgPSBidWZmZXIgKyBzdGFydF9vZmZzZXQ7CisgICAgaGVyZSA9IGJ1ZmZlciArIGhlcmVfb2Zmc2V0OworICAgIH0KKyAgfQorCisvKiBDb250cm9sIG5ldmVyIGdldHMgaGVyZSAqLworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICBDYXNlLWluZGVwZW5kZW50IHN0cm5jbXAoKSBmdW5jdGlvbiAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorQXJndW1lbnRzOgorICBzICAgICAgICAgZmlyc3Qgc3RyaW5nCisgIHQgICAgICAgICBzZWNvbmQgc3RyaW5nCisgIG4gICAgICAgICBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb21wYXJlCisKK1JldHVybnM6ICAgIDwgMCwgPSAwLCBvciA+IDAsIGFjY29yZGluZyB0byB0aGUgY29tcGFyaXNvbgorKi8KKworc3RhdGljIGludAorc3RybmNtcGljKGNvbnN0IHVpbnQ4X3QgKnMsIGNvbnN0IHVpbnQ4X3QgKnQsIGludCBuKQoreword2hpbGUgKG4tLSkKKyAgeworICBpbnQgYyA9IHRvbG93ZXIoKnMrKykgLSB0b2xvd2VyKCp0KyspOworICBpZiAoYykgcmV0dXJuIGM7CisgIH0KK3JldHVybiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgU2NhbiB0aGUgbWFpbiBtb2RpZmllciBsaXN0ICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIHNlYXJjaGVzIHRoZSBtb2RpZmllciBsaXN0IGZvciBhIGxvbmcgbW9kaWZpZXIgbmFtZS4KKworQXJndW1lbnQ6CisgIHAgICAgICAgICBzdGFydCBvZiB0aGUgbmFtZQorICBsZW5wICAgICAgbGVuZ3RoIG9mIHRoZSBuYW1lCisKK1JldHVybnM6ICAgIGFuIGluZGV4IGluIHRoZSBtb2RpZmllciBsaXN0LCBvciAtMSBvbiBmYWlsdXJlCisqLworCitzdGF0aWMgaW50CitzY2FuX21vZGlmaWVycyhjb25zdCB1aW50OF90ICpwLCB1bnNpZ25lZCBpbnQgbGVuKQoreworaW50IGJvdCA9IDA7CitpbnQgdG9wID0gTU9ETElTVENPVU5UOworCit3aGlsZSAodG9wID4gYm90KQorICB7CisgIGludCBtaWQgPSAoYm90ICsgdG9wKS8yOworICB1bnNpZ25lZCBpbnQgbWxlbiA9IHN0cmxlbihtb2RsaXN0W21pZF0ubmFtZSk7CisgIGludCBjID0gc3RybmNtcCgoY2hhciAqKXAsIG1vZGxpc3RbbWlkXS5uYW1lLCAobGVuIDwgbWxlbik/IGxlbiA6IG1sZW4pOworICBpZiAoYyA9PSAwKQorICAgIHsKKyAgICBpZiAobGVuID09IG1sZW4pIHJldHVybiBtaWQ7CisgICAgYyA9IChpbnQpbGVuIC0gKGludCltbGVuOworICAgIH0KKyAgaWYgKGMgPiAwKSBib3QgPSBtaWQgKyAxOyBlbHNlIHRvcCA9IG1pZDsKKyAgfQorCityZXR1cm4gLTE7CisKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICBDaGVjayBhIG1vZGlmZXIgYW5kIGZpbmQgaXRzIGZpZWxkICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBhIG1vZGlmaWVyIGhhcyBiZWVuIGlkZW50aWZpZWQuIFdlIGNoZWNrIHRoYXQKK2l0IGlzIGFsbG93ZWQgaGVyZSBhbmQgZmluZCB0aGUgZmllbGQgdGhhdCBpcyB0byBiZSBjaGFuZ2VkLgorCitBcmd1bWVudHM6CisgIG0gICAgICAgICAgdGhlIG1vZGlmaWVyIGxpc3QgZW50cnkKKyAgY3R4ICAgICAgICBDVFhfUEFUICAgICA9PiBwYXR0ZXJuIGNvbnRleHQKKyAgICAgICAgICAgICBDVFhfUE9QUEFUICA9PiBwYXR0ZXJuIGNvbnRleHQgZm9yIHBvcHBlZCBwYXR0ZXJuCisgICAgICAgICAgICAgQ1RYX0RFRlBBVCAgPT4gZGVmYXVsdCBwYXR0ZXJuIGNvbnRleHQKKyAgICAgICAgICAgICBDVFhfREFUICAgICA9PiBkYXRhIGNvbnRleHQKKyAgICAgICAgICAgICBDVFhfREVGREFUICA9PiBkZWZhdWx0IGRhdGEgY29udGV4dAorICBwY3RsICAgICAgIHBvaW50IHRvIHBhdHRlcm4gY29udHJvbCBibG9jaworICBkY3RsICAgICAgIHBvaW50IHRvIGRhdGEgY29udHJvbCBibG9jaworICBjICAgICAgICAgIGEgc2luZ2xlIGNoYXJhY3RlciBvciAwCisKK1JldHVybnM6ICAgICBhIGZpZWxkIHBvaW50ZXIgb3IgTlVMTAorKi8KKworc3RhdGljIHZvaWQgKgorY2hlY2tfbW9kaWZpZXIobW9kc3RydWN0ICptLCBpbnQgY3R4LCBwYXRjdGwgKnBjdGwsIGRhdGN0bCAqZGN0bCwgdWludDMyX3QgYykKK3sKK3ZvaWQgKmZpZWxkID0gTlVMTDsKK1BDUkUyX1NJWkUgb2Zmc2V0ID0gbS0+b2Zmc2V0OworCitpZiAocmVzdHJpY3RfZm9yX3BlcmxfdGVzdCkgc3dpdGNoKG0tPndoaWNoKQorICB7CisgIGNhc2UgTU9EX1BORFA6CisgIGNhc2UgTU9EX1BBVFA6CisgIGNhc2UgTU9EX1BEUDoKKyAgYnJlYWs7CisKKyAgZGVmYXVsdDoKKyAgZnByaW50ZihvdXRmaWxlLCAiKiogJyVzJyBpcyBub3QgYWxsb3dlZCBpbiBhIFBlcmwtY29tcGF0aWJsZSB0ZXN0XG4iLAorICAgIG0tPm5hbWUpOworICByZXR1cm4gTlVMTDsKKyAgfQorCitzd2l0Y2ggKG0tPndoaWNoKQorICB7CisgIGNhc2UgTU9EX0NUQzogIC8qIENvbXBpbGUgY29udGV4dCBtb2RpZmllciAqLworICBpZiAoY3R4ID09IENUWF9ERUZQQVQpIGZpZWxkID0gUFRSKGRlZmF1bHRfcGF0X2NvbnRleHQpOworICAgIGVsc2UgaWYgKGN0eCA9PSBDVFhfUEFUKSBmaWVsZCA9IFBUUihwYXRfY29udGV4dCk7CisgIGJyZWFrOworCisgIGNhc2UgTU9EX0NUTTogIC8qIE1hdGNoIGNvbnRleHQgbW9kaWZpZXIgKi8KKyAgaWYgKGN0eCA9PSBDVFhfREVGREFUKSBmaWVsZCA9IFBUUihkZWZhdWx0X2RhdF9jb250ZXh0KTsKKyAgICBlbHNlIGlmIChjdHggPT0gQ1RYX0RBVCkgZmllbGQgPSBQVFIoZGF0X2NvbnRleHQpOworICBicmVhazsKKworICBjYXNlIE1PRF9EQVQ6ICAvKiBEYXRhIGxpbmUgbW9kaWZpZXIgKi8KKyAgaWYgKGRjdGwgIT0gTlVMTCkgZmllbGQgPSBkY3RsOworICBicmVhazsKKworICBjYXNlIE1PRF9QQVQ6ICAgIC8qIFBhdHRlcm4gbW9kaWZpZXIgKi8KKyAgY2FzZSBNT0RfUEFUUDogICAvKiBBbGxvd2VkIGZvciBQZXJsIHRlc3QgKi8KKyAgaWYgKHBjdGwgIT0gTlVMTCkgZmllbGQgPSBwY3RsOworICBicmVhazsKKworICBjYXNlIE1PRF9QRDogICAvKiBQYXR0ZXJuIG9yIGRhdGEgbGluZSBtb2RpZmllciAqLworICBjYXNlIE1PRF9QRFA6ICAvKiBEaXR0bywgYWxsb3dlZCBmb3IgUGVybCB0ZXN0ICovCisgIGNhc2UgTU9EX1BORDogIC8qIERpdHRvLCBidXQgbm90IGRlZmF1bHQgcGF0dGVybiAqLworICBjYXNlIE1PRF9QTkRQOiAvKiBEaXR0bywgYWxsb3dlZCBmb3IgUGVybCB0ZXN0ICovCisgIGlmIChkY3RsICE9IE5VTEwpIGZpZWxkID0gZGN0bDsKKyAgICBlbHNlIGlmIChwY3RsICE9IE5VTEwgJiYgKG0tPndoaWNoID09IE1PRF9QRCB8fCBjdHggIT0gQ1RYX0RFRlBBVCkpCisgICAgICBmaWVsZCA9IHBjdGw7CisgIGJyZWFrOworICB9CisKK2lmIChmaWVsZCA9PSBOVUxMKQorICB7CisgIGlmIChjID09IDApCisgICAgZnByaW50ZihvdXRmaWxlLCAiKiogJyVzJyBpcyBub3QgdmFsaWQgaGVyZVxuIiwgbS0+bmFtZSk7CisgIGVsc2UKKyAgICBmcHJpbnRmKG91dGZpbGUsICIqKiAvJWMgaXMgbm90IHZhbGlkIGhlcmVcbiIsIGMpOworICByZXR1cm4gTlVMTDsKKyAgfQorCityZXR1cm4gKGNoYXIgKilmaWVsZCArIG9mZnNldDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgRGVjb2RlIGEgbW9kaWZpZXIgbGlzdCAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQSBwb2ludGVyIHRvIGEgY29udHJvbCBibG9jayBpcyBOVUxMIHdoZW4gY2FsbGVkIGluIGNhc2VzIHdoZW4gdGhhdCBibG9jayBpcworbm90IHJlbGV2YW50LiBUaGV5IGFyZSBuZXZlciBhbGwgcmVsZXZhbnQgaW4gb25lIGNhbGwuIEF0IGxlYXN0IG9uZSBvZiBwYXRjdGwKK2FuZCBkYXRjdGwgaXMgTlVMTC4gVGhlIHNlY29uZCBhcmd1bWVudCBzcGVjaWZpZXMgd2hpY2ggY29udGV4dCB0byB1c2UgZm9yCittb2RpZmllcnMgdGhhdCBhcHBseSB0byBjb250ZXh0cy4KKworQXJndW1lbnRzOgorICBwICAgICAgICAgIHBvaW50IHRvIG1vZGlmaWVyIHN0cmluZworICBjdHggICAgICAgIENUWF9QQVQgICAgID0+IHBhdHRlcm4gY29udGV4dAorICAgICAgICAgICAgIENUWF9QT1BQQVQgID0+IHBhdHRlcm4gY29udGV4dCBmb3IgcG9wcGVkIHBhdHRlcm4KKyAgICAgICAgICAgICBDVFhfREVGUEFUICA9PiBkZWZhdWx0IHBhdHRlcm4gY29udGV4dAorICAgICAgICAgICAgIENUWF9EQVQgICAgID0+IGRhdGEgY29udGV4dAorICAgICAgICAgICAgIENUWF9ERUZEQVQgID0+IGRlZmF1bHQgZGF0YSBjb250ZXh0CisgIHBjdGwgICAgICAgcG9pbnQgdG8gcGF0dGVybiBjb250cm9sIGJsb2NrCisgIGRjdGwgICAgICAgcG9pbnQgdG8gZGF0YSBjb250cm9sIGJsb2NrCisKK1JldHVybnM6IFRSVUUgaWYgc3VjY2Vzc2Z1bCBkZWNvZGUsIEZBTFNFIG90aGVyd2lzZQorKi8KKworc3RhdGljIEJPT0wKK2RlY29kZV9tb2RpZmllcnModWludDhfdCAqcCwgaW50IGN0eCwgcGF0Y3RsICpwY3RsLCBkYXRjdGwgKmRjdGwpCit7Cit1aW50OF90ICplcCwgKnBwOworbG9uZyBsaTsKK3Vuc2lnbmVkIGxvbmcgdWxpOworQk9PTCBmaXJzdCA9IFRSVUU7CisKK2ZvciAoOzspCisgIHsKKyAgdm9pZCAqZmllbGQ7CisgIG1vZHN0cnVjdCAqbTsKKyAgQk9PTCBvZmYgPSBGQUxTRTsKKyAgdW5zaWduZWQgaW50IGksIGxlbjsKKyAgaW50IGluZGV4OworICBjaGFyICplbmRwdHI7CisKKyAgLyogU2tpcCB3aGl0ZSBzcGFjZSBhbmQgY29tbWFzLiAqLworCisgIHdoaWxlIChpc3NwYWNlKCpwKSB8fCAqcCA9PSAnLCcpIHArKzsKKyAgaWYgKCpwID09IDApIGJyZWFrOworCisgIC8qIEZpbmQgdGhlIGVuZCBvZiB0aGUgaXRlbTsgbG9zZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGF0IGVuZCBvZiBsaW5lLiAqLworCisgIGZvciAoZXAgPSBwOyAqZXAgIT0gMCAmJiAqZXAgIT0gJywnOyBlcCsrKTsKKyAgaWYgKCplcCA9PSAwKQorICAgIHsKKyAgICB3aGlsZSAoZXAgPiBwICYmIGlzc3BhY2UoZXBbLTFdKSkgZXAtLTsKKyAgICAqZXAgPSAwOworICAgIH0KKworICAvKiBSZW1lbWJlciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzICctJy4gKi8KKworICBpZiAoKnAgPT0gJy0nKQorICAgIHsKKyAgICBvZmYgPSBUUlVFOworICAgIHArKzsKKyAgICB9CisKKyAgLyogRmluZCB0aGUgbGVuZ3RoIG9mIGEgZnVsbC1sZW5ndGggbW9kaWZpZXIgbmFtZSwgYW5kIHNjYW4gZm9yIGl0LiAqLworCisgIHBwID0gcDsKKyAgd2hpbGUgKHBwIDwgZXAgJiYgKnBwICE9ICc9JykgcHArKzsKKyAgaW5kZXggPSBzY2FuX21vZGlmaWVycyhwLCBwcCAtIHApOworCisgIC8qIElmIHRoZSBmaXJzdCBtb2RpZmllciBpcyB1bnJlY29nbml6ZWQsIHRyeSB0byBpbnRlcnByZXQgaXQgYXMgYSBzZXF1ZW5jZQorICBvZiBzaW5nbGUtY2hhcmFjdGVyIGFiYnJldmlhdGVkIG1vZGlmaWVycy4gTm9uZSBvZiB0aGVzZSBtb2RpZmllcnMgaGF2ZSBhbnkKKyAgYXNzb2NpYXRlZCBkYXRhLiBUaGV5IGp1c3Qgc2V0IG9wdGlvbnMgb3IgY29udHJvbCBiaXRzLiAqLworCisgIGlmIChpbmRleCA8IDApCisgICAgeworICAgIHVpbnQzMl90IGNjOworICAgIHVpbnQ4X3QgKm1wID0gcDsKKworICAgIGlmICghZmlyc3QpCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBVbnJlY29nbml6ZWQgbW9kaWZpZXIgJyUuKnMnXG4iLCAoaW50KShlcC1wKSwgcCk7CisgICAgICBpZiAoZXAgLSBwID09IDEpCisgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqIFNpbmdsZS1jaGFyYWN0ZXIgbW9kaWZpZXJzIG11c3QgY29tZSBmaXJzdFxuIik7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisKKyAgICBmb3IgKGNjID0gKnA7IGNjICE9ICcsJyAmJiBjYyAhPSAnXG4nICYmIGNjICE9IDA7IGNjID0gKigrK3ApKQorICAgICAgeworICAgICAgZm9yIChpID0gMDsgaSA8IEMxTU9ETElTVENPVU5UOyBpKyspCisgICAgICAgIGlmIChjYyA9PSBjMW1vZGxpc3RbaV0ub25lY2hhcikgYnJlYWs7CisKKyAgICAgIGlmIChpID49IEMxTU9ETElTVENPVU5UKQorICAgICAgICB7CisgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqIFVucmVjb2duaXplZCBtb2RpZmllciAnJWMnIGluICclLipzJ1xuIiwKKyAgICAgICAgICAqcCwgKGludCkoZXAtbXApLCBtcCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgfQorCisgICAgICBpZiAoYzFtb2RsaXN0W2ldLmluZGV4ID49IDApCisgICAgICAgIHsKKyAgICAgICAgaW5kZXggPSBjMW1vZGxpc3RbaV0uaW5kZXg7CisgICAgICAgIH0KKworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgIGluZGV4ID0gc2Nhbl9tb2RpZmllcnMoKHVpbnQ4X3QgKikoYzFtb2RsaXN0W2ldLmZ1bGxuYW1lKSwKKyAgICAgICAgICBzdHJsZW4oYzFtb2RsaXN0W2ldLmZ1bGxuYW1lKSk7CisgICAgICAgIGlmIChpbmRleCA8IDApCisgICAgICAgICAgeworICAgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqIEludGVybmFsIGVycm9yOiBzaW5nbGUtY2hhcmFjdGVyIGVxdWl2YWxlbnQgIgorICAgICAgICAgICAgIm1vZGlmaWVyICclcycgbm90IGZvdW5kXG4iLCBjMW1vZGxpc3RbaV0uZnVsbG5hbWUpOworICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICB9CisgICAgICAgIGMxbW9kbGlzdFtpXS5pbmRleCA9IGluZGV4OyAgICAgLyogQ2FjaGUgZm9yIG5leHQgdGltZSAqLworICAgICAgICB9CisKKyAgICAgIGZpZWxkID0gY2hlY2tfbW9kaWZpZXIobW9kbGlzdCArIGluZGV4LCBjdHgsIHBjdGwsIGRjdGwsICpwKTsKKyAgICAgIGlmIChmaWVsZCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisgICAgICAqKCh1aW50MzJfdCAqKWZpZWxkKSB8PSBtb2RsaXN0W2luZGV4XS52YWx1ZTsKKyAgICAgIH0KKworICAgIGNvbnRpbnVlOyAgICAvKiBXaXRoIHRuZSBuZXh0IChmdWxsbmFtZSkgbW9kaWZpZXIgKi8KKyAgICB9CisKKyAgLyogV2UgaGF2ZSBhIG1hdGNoIG9uIGEgZnVsbC1uYW1lIG1vZGlmaWVyLiBDaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBkYXRhCisgIHdoZW4gbmVlZGVkLiAqLworCisgIG0gPSBtb2RsaXN0ICsgaW5kZXg7ICAgICAgLyogU2F2ZSB0eXBpbmcgKi8KKyAgaWYgKG0tPnR5cGUgIT0gTU9EX0NUTCAmJiBtLT50eXBlICE9IE1PRF9PUFQgJiYKKyAgICAgIChtLT50eXBlICE9IE1PRF9JTkQgfHwgKnBwID09ICc9JykpCisgICAgeworICAgIGlmICgqcHArKyAhPSAnPScpCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiAnPScgZXhwZWN0ZWQgYWZ0ZXIgJyVzJ1xuIiwgbS0+bmFtZSk7CisgICAgICByZXR1cm4gRkFMU0U7CisgICAgICB9CisgICAgaWYgKG9mZikKKyAgICAgIHsKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqICctJyBpcyBub3QgdmFsaWQgZm9yICclcydcbiIsIG0tPm5hbWUpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgIH0KKworICAvKiBUaGVzZSBvbi9vZmYgdHlwZXMgaGF2ZSBubyBkYXRhLiAqLworCisgIGVsc2UgaWYgKCpwcCAhPSAnLCcgJiYgKnBwICE9ICdcbicgJiYgKnBwICE9ICcgJyAmJiAqcHAgIT0gMCkKKyAgICB7CisgICAgZnByaW50ZihvdXRmaWxlLCAiKiogVW5yZWNvZ25pemVkIG1vZGlmaWVyICclLipzJ1xuIiwgKGludCkoZXAtcCksIHApOworICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgLyogU2V0IHRoZSBkYXRhIGxlbmd0aCBmb3IgdGhvc2UgdHlwZXMgdGhhdCBoYXZlIGRhdGEuIFRoZW4gZmluZCB0aGUgZmllbGQKKyAgdGhhdCBpcyB0byBiZSBzZXQuIElmIGNoZWNrX21vZGlmaWVyKCkgcmV0dXJucyBOVUxMLCBpdCBoYXMgYWxyZWFkeSBvdXRwdXQgYW4KKyAgZXJyb3IgbWVzc2FnZS4gKi8KKworICBsZW4gPSBlcCAtIHBwOworICBmaWVsZCA9IGNoZWNrX21vZGlmaWVyKG0sIGN0eCwgcGN0bCwgZGN0bCwgMCk7CisgIGlmIChmaWVsZCA9PSBOVUxMKSByZXR1cm4gRkFMU0U7CisKKyAgLyogUHJvY2VzcyBhY2NvcmRpbmcgdG8gZGF0YSB0eXBlLiAqLworCisgIHN3aXRjaCAobS0+dHlwZSkKKyAgICB7CisgICAgY2FzZSBNT0RfQ1RMOgorICAgIGNhc2UgTU9EX09QVDoKKyAgICBpZiAob2ZmKSAqKCh1aW50MzJfdCAqKWZpZWxkKSAmPSB+bS0+dmFsdWU7CisgICAgICBlbHNlICooKHVpbnQzMl90ICopZmllbGQpIHw9IG0tPnZhbHVlOworICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RfQlNSOgorICAgIGlmIChsZW4gPT0gNyAmJiBzdHJuY21waWMocHAsIChjb25zdCB1aW50OF90ICopImRlZmF1bHQiLCA3KSA9PSAwKQorICAgICAgeworI2lmZGVmIEJTUl9BTllDUkxGCisgICAgICAqKCh1aW50MTZfdCAqKWZpZWxkKSA9IFBDUkUyX0JTUl9BTllDUkxGOworI2Vsc2UKKyAgICAgICooKHVpbnQxNl90ICopZmllbGQpID0gUENSRTJfQlNSX1VOSUNPREU7CisjZW5kaWYKKyAgICAgIGlmIChjdHggPT0gQ1RYX1BBVCB8fCBjdHggPT0gQ1RYX0RFRlBBVCkgcGN0bC0+Y29udHJvbCAmPSB+Q1RMX0JTUl9TRVQ7CisgICAgICAgIGVsc2UgZGN0bC0+Y29udHJvbCAmPSB+Q1RMX0JTUl9TRVQ7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgaWYgKGxlbiA9PSA3ICYmIHN0cm5jbXBpYyhwcCwgKGNvbnN0IHVpbnQ4X3QgKikiYW55Y3JsZiIsIDcpID09IDApCisgICAgICAgICooKHVpbnQxNl90ICopZmllbGQpID0gUENSRTJfQlNSX0FOWUNSTEY7CisgICAgICBlbHNlIGlmIChsZW4gPT0gNyAmJiBzdHJuY21waWMocHAsIChjb25zdCB1aW50OF90ICopInVuaWNvZGUiLCA3KSA9PSAwKQorICAgICAgICAqKCh1aW50MTZfdCAqKWZpZWxkKSA9IFBDUkUyX0JTUl9VTklDT0RFOworICAgICAgZWxzZSBnb3RvIElOVkFMSURfVkFMVUU7CisgICAgICBpZiAoY3R4ID09IENUWF9QQVQgfHwgY3R4ID09IENUWF9ERUZQQVQpIHBjdGwtPmNvbnRyb2wgfD0gQ1RMX0JTUl9TRVQ7CisgICAgICAgIGVsc2UgZGN0bC0+Y29udHJvbCB8PSBDVExfQlNSX1NFVDsKKyAgICAgIH0KKyAgICBwcCA9IGVwOworICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RfSU4yOiAgICAvKiBPbmUgb3IgdHdvIHVuc2lnbmVkIGludGVnZXJzICovCisgICAgaWYgKCFpc2RpZ2l0KCpwcCkpIGdvdG8gSU5WQUxJRF9WQUxVRTsKKyAgICB1bGkgPSBzdHJ0b3VsKChjb25zdCBjaGFyICopcHAsICZlbmRwdHIsIDEwKTsKKyAgICBpZiAoVTMyT1ZFUkZMT1codWxpKSkgZ290byBJTlZBTElEX1ZBTFVFOworICAgICgodWludDMyX3QgKilmaWVsZClbMF0gPSAodWludDMyX3QpdWxpOworICAgIGlmICgqZW5kcHRyID09ICc6JykKKyAgICAgIHsKKyAgICAgIHVsaSA9IHN0cnRvdWwoKGNvbnN0IGNoYXIgKillbmRwdHIrMSwgJmVuZHB0ciwgMTApOworICAgICAgaWYgKFUzMk9WRVJGTE9XKHVsaSkpIGdvdG8gSU5WQUxJRF9WQUxVRTsKKyAgICAgICgodWludDMyX3QgKilmaWVsZClbMV0gPSAodWludDMyX3QpdWxpOworICAgICAgfQorICAgIGVsc2UgKCh1aW50MzJfdCAqKWZpZWxkKVsxXSA9IDA7CisgICAgcHAgPSAodWludDhfdCAqKWVuZHB0cjsKKyAgICBicmVhazsKKworICAgIC8qIFBDUkUyX1NJWkVfTUFYIGlzIHVzdWFsbHkgU0laRV9NQVgsIHdoaWNoIG1heSBiZSBncmVhdGVyLCBlcXVhbCB0bywgb3IKKyAgICBsZXNzIHRoYW4gVUxPTkdfTUFYLiBTbyBmaXJzdCB0ZXN0IGZvciBvdmVyZmxvd2luZyB0aGUgbG9uZyBpbnQsIGFuZCB0aGVuCisgICAgdGVzdCBmb3Igb3ZlcmZsb3dpbmcgUENSRTJfU0laRV9NQVggaWYgaXQgaXMgc21hbGxlciB0aGFuIFVMT05HX01BWC4gKi8KKworICAgIGNhc2UgTU9EX1NJWjogICAgLyogUENSRTJfU0laRSB2YWx1ZSAqLworICAgIGlmICghaXNkaWdpdCgqcHApKSBnb3RvIElOVkFMSURfVkFMVUU7CisgICAgdWxpID0gc3RydG91bCgoY29uc3QgY2hhciAqKXBwLCAmZW5kcHRyLCAxMCk7CisgICAgaWYgKHVsaSA9PSBVTE9OR19NQVgpIGdvdG8gSU5WQUxJRF9WQUxVRTsKKyNpZiBVTE9OR19NQVggPiBQQ1JFMl9TSVpFX01BWAorICAgIGlmICh1bGkgPiBQQ1JFMl9TSVpFX01BWCkgZ290byBJTlZBTElEX1ZBTFVFOworI2VuZGlmCisgICAgKigoUENSRTJfU0laRSAqKWZpZWxkKSA9IChQQ1JFMl9TSVpFKXVsaTsKKyAgICBwcCA9ICh1aW50OF90ICopZW5kcHRyOworICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RfSU5EOiAgICAvKiBVbnNpZ25lZCBpbnRlZ2VyIHdpdGggZGVmYXVsdCAqLworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgIHsKKyAgICAgICooKHVpbnQzMl90ICopZmllbGQpID0gKHVpbnQzMl90KShtLT52YWx1ZSk7CisgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAvKiBGYWxsIHRocm91Z2ggKi8KKworICAgIGNhc2UgTU9EX0lOVDogICAgLyogVW5zaWduZWQgaW50ZWdlciAqLworICAgIGlmICghaXNkaWdpdCgqcHApKSBnb3RvIElOVkFMSURfVkFMVUU7CisgICAgdWxpID0gc3RydG91bCgoY29uc3QgY2hhciAqKXBwLCAmZW5kcHRyLCAxMCk7CisgICAgaWYgKFUzMk9WRVJGTE9XKHVsaSkpIGdvdG8gSU5WQUxJRF9WQUxVRTsKKyAgICAqKCh1aW50MzJfdCAqKWZpZWxkKSA9ICh1aW50MzJfdCl1bGk7CisgICAgcHAgPSAodWludDhfdCAqKWVuZHB0cjsKKyAgICBicmVhazsKKworICAgIGNhc2UgTU9EX0lOUzogICAvKiBTaWduZWQgaW50ZWdlciAqLworICAgIGlmICghaXNkaWdpdCgqcHApICYmICpwcCAhPSAnLScpIGdvdG8gSU5WQUxJRF9WQUxVRTsKKyAgICBsaSA9IHN0cnRvbCgoY29uc3QgY2hhciAqKXBwLCAmZW5kcHRyLCAxMCk7CisgICAgaWYgKFMzMk9WRVJGTE9XKGxpKSkgZ290byBJTlZBTElEX1ZBTFVFOworICAgICooKGludDMyX3QgKilmaWVsZCkgPSAoaW50MzJfdClsaTsKKyAgICBwcCA9ICh1aW50OF90ICopZW5kcHRyOworICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RfTkw6CisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihuZXdsaW5lcykvc2l6ZW9mKGNoYXIgKik7IGkrKykKKyAgICAgIGlmIChsZW4gPT0gc3RybGVuKG5ld2xpbmVzW2ldKSAmJgorICAgICAgICBzdHJuY21waWMocHAsIChjb25zdCB1aW50OF90ICopbmV3bGluZXNbaV0sIGxlbikgPT0gMCkgYnJlYWs7CisgICAgaWYgKGkgPj0gc2l6ZW9mKG5ld2xpbmVzKS9zaXplb2YoY2hhciAqKSkgZ290byBJTlZBTElEX1ZBTFVFOworICAgIGlmIChpID09IDApCisgICAgICB7CisgICAgICAqKCh1aW50MTZfdCAqKWZpZWxkKSA9IE5FV0xJTkVfREVGQVVMVDsKKyAgICAgIGlmIChjdHggPT0gQ1RYX1BBVCB8fCBjdHggPT0gQ1RYX0RFRlBBVCkgcGN0bC0+Y29udHJvbCAmPSB+Q1RMX05MX1NFVDsKKyAgICAgICAgZWxzZSBkY3RsLT5jb250cm9sICY9IH5DVExfTkxfU0VUOworICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgICooKHVpbnQxNl90ICopZmllbGQpID0gaTsKKyAgICAgIGlmIChjdHggPT0gQ1RYX1BBVCB8fCBjdHggPT0gQ1RYX0RFRlBBVCkgcGN0bC0+Y29udHJvbCB8PSBDVExfTkxfU0VUOworICAgICAgICBlbHNlIGRjdGwtPmNvbnRyb2wgfD0gQ1RMX05MX1NFVDsKKyAgICAgIH0KKyAgICBwcCA9IGVwOworICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RfTk46ICAgICAgICAgICAgICAvKiBOYW1lIG9yIChzaWduZWQpIG51bWJlcjsgbWF5IGJlIHNldmVyYWwgKi8KKyAgICBpZiAoaXNkaWdpdCgqcHApIHx8ICpwcCA9PSAnLScpCisgICAgICB7CisgICAgICBpbnQgY3QgPSBNQVhDUFlHRVQgLSAxOworICAgICAgaW50MzJfdCB2YWx1ZTsKKyAgICAgIGxpID0gc3RydG9sKChjb25zdCBjaGFyICopcHAsICZlbmRwdHIsIDEwKTsKKyAgICAgIGlmIChTMzJPVkVSRkxPVyhsaSkpIGdvdG8gSU5WQUxJRF9WQUxVRTsKKyAgICAgIHZhbHVlID0gKGludDMyX3QpbGk7CisgICAgICBmaWVsZCA9IChjaGFyICopZmllbGQgLSBtLT5vZmZzZXQgKyBtLT52YWx1ZTsgICAgICAvKiBBZGp1c3QgZmllbGQgcHRyICovCisgICAgICBpZiAodmFsdWUgPj0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBZGQgbmV3IG51bWJlciAqLworICAgICAgICB7CisgICAgICAgIHdoaWxlICgqKChpbnQzMl90ICopZmllbGQpID49IDAgJiYgY3QtLSA+IDApICAgLyogU2tpcCBwcmV2aW91cyAqLworICAgICAgICAgIGZpZWxkID0gKGNoYXIgKilmaWVsZCArIHNpemVvZihpbnQzMl90KTsKKyAgICAgICAgaWYgKGN0IDw9IDApCisgICAgICAgICAgeworICAgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqIFRvbyBtYW55IG51bWVyaWMgJyVzJyBtb2RpZmllcnNcbiIsIG0tPm5hbWUpOworICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICooKGludDMyX3QgKilmaWVsZCkgPSB2YWx1ZTsKKyAgICAgIGlmIChjdCA+IDApICgoaW50MzJfdCAqKWZpZWxkKVsxXSA9IC0xOworICAgICAgcHAgPSAodWludDhfdCAqKWVuZHB0cjsKKyAgICAgIH0KKworICAgIC8qIE11bHRpcGxlIHN0cmluZ3MgYXJlIHB1dCBlbmQgdG8gZW5kLiAqLworCisgICAgZWxzZQorICAgICAgeworICAgICAgY2hhciAqbm4gPSAoY2hhciAqKWZpZWxkOworICAgICAgaWYgKGxlbiA+IDApICAgICAgICAgICAgICAgICAgICAvKiBBZGQgbmV3IG5hbWUgKi8KKyAgICAgICAgeworICAgICAgICB3aGlsZSAoKm5uICE9IDApIG5uICs9IHN0cmxlbihubikgKyAxOworICAgICAgICBpZiAobm4gKyBsZW4gKyAxIC0gKGNoYXIgKilmaWVsZCA+IExFTkNQWUdFVCkKKyAgICAgICAgICB7CisgICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogVG9vIG1hbnkgbmFtZWQgJyVzJyBtb2RpZmllcnNcbiIsIG0tPm5hbWUpOworICAgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICAgICAgICB9CisgICAgICAgIG1lbWNweShubiwgcHAsIGxlbik7CisgICAgICAgIH0KKyAgICAgIG5uW2xlbl0gPSAwIDsKKyAgICAgIG5uW2xlbisxXSA9IDA7CisgICAgICBwcCA9IGVwOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RfU1RSOgorICAgIGlmIChsZW4gKyAxID4gbS0+dmFsdWUpCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBPdmVybG9uZyB2YWx1ZSBmb3IgJyVzJyAobWF4ICVkIGNvZGUgdW5pdHMpXG4iLAorICAgICAgICBtLT5uYW1lLCBtLT52YWx1ZSAtIDEpOworICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgfQorICAgIG1lbWNweShmaWVsZCwgcHAsIGxlbik7CisgICAgKCh1aW50OF90ICopZmllbGQpW2xlbl0gPSAwOworICAgIHBwID0gZXA7CisgICAgYnJlYWs7CisgICAgfQorCisgIGlmICgqcHAgIT0gJywnICYmICpwcCAhPSAnXG4nICYmICpwcCAhPSAnICcgJiYgKnBwICE9IDApCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIioqIENvbW1hIGV4cGVjdGVkIGFmdGVyIG1vZGlmaWVyIGl0ZW0gJyVzJ1xuIiwgbS0+bmFtZSk7CisgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICBwID0gcHA7CisgIGZpcnN0ID0gRkFMU0U7CisKKyAgaWYgKGN0eCA9PSBDVFhfUE9QUEFUICYmCisgICAgIChwY3RsLT5vcHRpb25zICE9IDAgfHwKKyAgICAgIHBjdGwtPnRhYmxlc19pZCAhPSAwIHx8CisgICAgICBwY3RsLT5sb2NhbGVbMF0gIT0gMCB8fAorICAgICAgKHBjdGwtPmNvbnRyb2wgJiBOT1RQT1BfQ09OVFJPTFMpICE9IDApKQorICAgIHsKKyAgICBmcHJpbnRmKG91dGZpbGUsICIqKiAnJXMnIGlzIG5vdCB2YWxpZCBoZXJlXG4iLCBtLT5uYW1lKTsKKyAgICByZXR1cm4gRkFMU0U7CisgICAgfQorICB9CisKK3JldHVybiBUUlVFOworCitJTlZBTElEX1ZBTFVFOgorZnByaW50ZihvdXRmaWxlLCAiKiogSW52YWxpZCB2YWx1ZSBpbiAnJS4qcydcbiIsIChpbnQpKGVwLXApLCBwKTsKK3JldHVybiBGQUxTRTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICBHZXQgaW5mbyBmcm9tIGEgcGF0dGVybiAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEEgd3JhcHBlZCBjYWxsIHRvIHBjcmUyX3BhdHRlcm5faW5mbygpLCBhcHBsaWVkIHRvIHRoZSBjdXJyZW50IGNvbXBpbGVkCitwYXR0ZXJuLgorCitBcmd1bWVudHM6CisgIHdoYXQgICAgICAgIGNvZGUgZm9yIHRoZSByZXF1aXJlZCBpbmZvcm1hdGlvbgorICB3aGVyZSAgICAgICB3aGVyZSB0byBwdXQgdGhlIGFuc3dlcgorICB1bnNldG9rICAgICBQQ1JFMl9FUlJPUl9VTlNFVCBpcyBhbiAiZXhwZWN0ZWQiIHJlc3VsdAorCitSZXR1cm5zOiAgICAgIHRoZSByZXR1cm4gZnJvbSBwY3JlMl9wYXR0ZXJuX2luZm8oKQorKi8KKworc3RhdGljIGludAorcGF0dGVybl9pbmZvKGludCB3aGF0LCB2b2lkICp3aGVyZSwgQk9PTCB1bnNldG9rKQoreworaW50IHJjOworUENSRTJfUEFUVEVSTl9JTkZPKHJjLCBjb21waWxlZF9jb2RlLCB3aGF0LCB3aGVyZSk7CitpZiAocmMgPj0gMCkgcmV0dXJuIDA7CitpZiAocmMgIT0gUENSRTJfRVJST1JfVU5TRVQgfHwgIXVuc2V0b2spCisgIHsKKyAgZnByaW50ZihvdXRmaWxlLCAiRXJyb3IgJWQgZnJvbSBwY3JlMl9wYXR0ZXJuX2luZm9fJWQoJWQpXG4iLCByYywgdGVzdF9tb2RlLAorICAgIHdoYXQpOworICBpZiAocmMgPT0gUENSRTJfRVJST1JfQkFETU9ERSkKKyAgICBmcHJpbnRmKG91dGZpbGUsICJSdW5uaW5nIGluICVkLWJpdCBtb2RlIGJ1dCBwYXR0ZXJuIHdhcyBjb21waWxlZCBpbiAiCisgICAgICAiJWQtYml0IG1vZGVcbiIsIHRlc3RfbW9kZSwKKyAgICAgIDggKiAoRkxEKGNvbXBpbGVkX2NvZGUsIGZsYWdzKSAmIFBDUkUyX01PREVfTUFTSykpOworICB9CityZXR1cm4gcmM7Cit9CisKKworCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICBTaG93IHNvbWV0aGluZyBpbiBhIGxpc3QgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24ganVzdCBoZWxwcyB0byBrZWVwIHRoZSBjb2RlIHRoYXQgdXNlcyBpdCB0aWRpZXIuIEl0J3MgdXNlZCBmb3IKK3ZhcmlvdXMgbGlzdHMgb2YgdGhpbmdzIHdoZXJlIHRoZXJlIG5lZWRzIHRvIGJlIGludHJvZHVjdG9yeSB0ZXh0IGJlZm9yZSB0aGUKK2ZpcnN0IGl0ZW0uIEFzIHRoZXNlIGNhbGxzIGFyZSBhbGwgaW4gdGhlIFBPU0lYLXN1cHBvcnQgY29kZSwgdGhleSBoYXBwZW4gb25seQord2hlbiA4LWJpdCBtb2RlIGlzIHN1cHBvcnRlZC4gKi8KKworc3RhdGljIHZvaWQKK3BybXNnKGNvbnN0IGNoYXIgKiptc2csIGNvbnN0IGNoYXIgKnMpCit7CitmcHJpbnRmKG91dGZpbGUsICIlcyAlcyIsICptc2csIHMpOworKm1zZyA9ICIiOworfQorI2VuZGlmICAvKiBTVVBQT1JUX1BDUkUyXzggKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgIFNob3cgY29udHJvbCBiaXRzICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ2FsbGVkIGZvciBtdXR1YWxseSBleGNsdXNpdmUgY29udHJvbHMgYW5kIGZvciB1bnN1cHBvcnRlZCBQT1NJWCBjb250cm9scy4KK0JlY2F1c2UgdGhlIGJpdHMgYXJlIHVuaXF1ZSwgdGhpcyBjYW4gYmUgdXNlZCBmb3IgYm90aCBwYXR0ZXJuIGFuZCBkYXRhIGNvbnRyb2wKK3dvcmRzLgorCitBcmd1bWVudHM6CisgIGNvbnRyb2xzICAgIGNvbnRyb2wgYml0cworICBjb250cm9sczIgICBtb3JlIGNvbnRyb2wgYml0cworICBiZWZvcmUgICAgICB0ZXh0IHRvIHByaW50IGJlZm9yZQorCitSZXR1cm5zOiAgICAgIG5vdGhpbmcKKyovCisKK3N0YXRpYyB2b2lkCitzaG93X2NvbnRyb2xzKHVpbnQzMl90IGNvbnRyb2xzLCB1aW50MzJfdCBjb250cm9sczIsIGNvbnN0IGNoYXIgKmJlZm9yZSkKK3sKK2ZwcmludGYob3V0ZmlsZSwgIiVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyIsCisgIGJlZm9yZSwKKyAgKChjb250cm9scyAmIENUTF9BRlRFUlRFWFQpICE9IDApPyAiIGFmdGVydGV4dCIgOiAiIiwKKyAgKChjb250cm9scyAmIENUTF9BTExBRlRFUlRFWFQpICE9IDApPyAiIGFsbGFmdGVydGV4dCIgOiAiIiwKKyAgKChjb250cm9scyAmIENUTF9BTExDQVBUVVJFUykgIT0gMCk/ICIgYWxsY2FwdHVyZXMiIDogIiIsCisgICgoY29udHJvbHMgJiBDVExfQUxMVVNFRFRFWFQpICE9IDApPyAiIGFsbHVzZWR0ZXh0IiA6ICIiLAorICAoKGNvbnRyb2xzICYgQ1RMX0FMVEdMT0JBTCkgIT0gMCk/ICIgYWx0Z2xvYmFsIiA6ICIiLAorICAoKGNvbnRyb2xzICYgQ1RMX0JJTkNPREUpICE9IDApPyAiIGJpbmNvZGUiIDogIiIsCisgICgoY29udHJvbHMgJiBDVExfQlNSX1NFVCkgIT0gMCk/ICIgYnNyIiA6ICIiLAorICAoKGNvbnRyb2xzICYgQ1RMX0NBTExPVVRfQ0FQVFVSRSkgIT0gMCk/ICIgY2FsbG91dF9jYXB0dXJlIiA6ICIiLAorICAoKGNvbnRyb2xzICYgQ1RMX0NBTExPVVRfSU5GTykgIT0gMCk/ICIgY2FsbG91dF9pbmZvIiA6ICIiLAorICAoKGNvbnRyb2xzICYgQ1RMX0NBTExPVVRfTk9ORSkgIT0gMCk/ICIgY2FsbG91dF9ub25lIiA6ICIiLAorICAoKGNvbnRyb2xzICYgQ1RMX0RGQSkgIT0gMCk/ICIgZGZhIiA6ICIiLAorICAoKGNvbnRyb2xzICYgQ1RMX0VYUEFORCkgIT0gMCk/ICIgZXhwYW5kIiA6ICIiLAorICAoKGNvbnRyb2xzICYgQ1RMX0ZJTkRMSU1JVFMpICE9IDApPyAiIGZpbmRfbGltaXRzIiA6ICIiLAorICAoKGNvbnRyb2xzICYgQ1RMX0ZVTExCSU5DT0RFKSAhPSAwKT8gIiBmdWxsYmluY29kZSIgOiAiIiwKKyAgKChjb250cm9scyAmIENUTF9HRVRBTEwpICE9IDApPyAiIGdldGFsbCIgOiAiIiwKKyAgKChjb250cm9scyAmIENUTF9HTE9CQUwpICE9IDApPyAiIGdsb2JhbCIgOiAiIiwKKyAgKChjb250cm9scyAmIENUTF9IRVhQQVQpICE9IDApPyAiIGhleCIgOiAiIiwKKyAgKChjb250cm9scyAmIENUTF9JTkZPKSAhPSAwKT8gIiBpbmZvIiA6ICIiLAorICAoKGNvbnRyb2xzICYgQ1RMX0pJVEZBU1QpICE9IDApPyAiIGppdGZhc3QiIDogIiIsCisgICgoY29udHJvbHMgJiBDVExfSklUVkVSSUZZKSAhPSAwKT8gIiBqaXR2ZXJpZnkiIDogIiIsCisgICgoY29udHJvbHMgJiBDVExfTUFSSykgIT0gMCk/ICIgbWFyayIgOiAiIiwKKyAgKChjb250cm9scyAmIENUTF9NRU1PUlkpICE9IDApPyAiIG1lbW9yeSIgOiAiIiwKKyAgKChjb250cm9scyAmIENUTF9OTF9TRVQpICE9IDApPyAiIG5ld2xpbmUiIDogIiIsCisgICgoY29udHJvbHMgJiBDVExfTlVMTENPTlRFWFQpICE9IDApPyAiIG51bGxfY29udGV4dCIgOiAiIiwKKyAgKChjb250cm9scyAmIENUTF9QT1NJWCkgIT0gMCk/ICIgcG9zaXgiIDogIiIsCisgICgoY29udHJvbHMgJiBDVExfUFVTSCkgIT0gMCk/ICIgcHVzaCIgOiAiIiwKKyAgKChjb250cm9scyAmIENUTF9TVEFSVENIQVIpICE9IDApPyAiIHN0YXJ0Y2hhciIgOiAiIiwKKyAgKChjb250cm9sczIgJiBDVEwyX1NVQlNUSVRVVEVfRVhURU5ERUQpICE9IDApPyAiIHN1YnN0aXR1dGVfZXh0ZW5kZWQiIDogIiIsCisgICgoY29udHJvbHMyICYgQ1RMMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCkgIT0gMCk/ICIgc3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGgiIDogIiIsCisgICgoY29udHJvbHMyICYgQ1RMMl9TVUJTVElUVVRFX1VOS05PV05fVU5TRVQpICE9IDApPyAiIHN1YnN0aXR1dGVfdW5rbm93bl91bnNldCIgOiAiIiwKKyAgKChjb250cm9sczIgJiBDVEwyX1NVQlNUSVRVVEVfVU5TRVRfRU1QVFkpICE9IDApPyAiIHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkiIDogIiIsCisgICgoY29udHJvbHMgJiBDVExfWkVST19URVJNSU5BVEUpICE9IDApPyAiIHplcm9fdGVybWluYXRlIiA6ICIiKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgIFNob3cgY29tcGlsZSBvcHRpb25zICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ2FsbGVkIGZyb20gc2hvd19wYXR0ZXJuX2luZm8oKSBhbmQgZm9yIHVuc3VwcG9ydGVkIFBPU0lYIG9wdGlvbnMuCisKK0FyZ3VtZW50czoKKyAgb3B0aW9ucyAgICAgYW4gb3B0aW9ucyB3b3JkCisgIGJlZm9yZSAgICAgIHRleHQgdG8gcHJpbnQgYmVmb3JlCisgIGFmdGVyICAgICAgIHRleHQgdG8gcHJpbnQgYWZ0ZXIKKworUmV0dXJuczogICAgICBub3RoaW5nCisqLworCitzdGF0aWMgdm9pZAorc2hvd19jb21waWxlX29wdGlvbnModWludDMyX3Qgb3B0aW9ucywgY29uc3QgY2hhciAqYmVmb3JlLCBjb25zdCBjaGFyICphZnRlcikKK3sKK2lmIChvcHRpb25zID09IDApIGZwcmludGYob3V0ZmlsZSwgIiVzIDxub25lPiVzIiwgYmVmb3JlLCBhZnRlcik7CitlbHNlIGZwcmludGYob3V0ZmlsZSwgIiVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzIiwKKyAgYmVmb3JlLAorICAoKG9wdGlvbnMgJiBQQ1JFMl9BTFRfQlNVWCkgIT0gMCk/ICIgYWx0X2JzdXgiIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX0FMVF9DSVJDVU1GTEVYKSAhPSAwKT8gIiBhbHRfY2lyY3VtZmxleCIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfQUxUX1ZFUkJOQU1FUykgIT0gMCk/ICIgYWx0X3ZlcmJuYW1lcyIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfQUxMT1dfRU1QVFlfQ0xBU1MpICE9IDApPyAiIGFsbG93X2VtcHR5X2NsYXNzIiA6ICIiLAorICAoKG9wdGlvbnMgJiBQQ1JFMl9BTkNIT1JFRCkgIT0gMCk/ICIgYW5jaG9yZWQiIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX0FVVE9fQ0FMTE9VVCkgIT0gMCk/ICIgYXV0b19jYWxsb3V0IiA6ICIiLAorICAoKG9wdGlvbnMgJiBQQ1JFMl9DQVNFTEVTUykgIT0gMCk/ICIgY2FzZWxlc3MiIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX0RPTExBUl9FTkRPTkxZKSAhPSAwKT8gIiBkb2xsYXJfZW5kb25seSIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfRE9UQUxMKSAhPSAwKT8gIiBkb3RhbGwiIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX0RVUE5BTUVTKSAhPSAwKT8gIiBkdXBuYW1lcyIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfRVhURU5ERUQpICE9IDApPyAiIGV4dGVuZGVkIiA6ICIiLAorICAoKG9wdGlvbnMgJiBQQ1JFMl9GSVJTVExJTkUpICE9IDApPyAiIGZpcnN0bGluZSIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfTUFUQ0hfVU5TRVRfQkFDS1JFRikgIT0gMCk/ICIgbWF0Y2hfdW5zZXRfYmFja3JlZiIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfTVVMVElMSU5FKSAhPSAwKT8gIiBtdWx0aWxpbmUiIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX05FVkVSX0JBQ0tTTEFTSF9DKSAhPSAwKT8gIiBuZXZlcl9iYWNrc2xhc2hfYyIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfTkVWRVJfVUNQKSAhPSAwKT8gIiBuZXZlcl91Y3AiIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX05FVkVSX1VURikgIT0gMCk/ICIgbmV2ZXJfdXRmIiA6ICIiLAorICAoKG9wdGlvbnMgJiBQQ1JFMl9OT19BVVRPX0NBUFRVUkUpICE9IDApPyAiIG5vX2F1dG9fY2FwdHVyZSIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfTk9fQVVUT19QT1NTRVNTKSAhPSAwKT8gIiBub19hdXRvX3Bvc3Nlc3MiIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX05PX0RPVFNUQVJfQU5DSE9SKSAhPSAwKT8gIiBub19kb3RzdGFyX2FuY2hvciIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfTk9fVVRGX0NIRUNLKSAhPSAwKT8gIiBub191dGZfY2hlY2siIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX05PX1NUQVJUX09QVElNSVpFKSAhPSAwKT8gIiBub19zdGFydF9vcHRpbWl6ZSIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfVUNQKSAhPSAwKT8gIiB1Y3AiIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX1VOR1JFRURZKSAhPSAwKT8gIiB1bmdyZWVkeSIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfVVNFX09GRlNFVF9MSU1JVCkgIT0gMCk/ICIgdXNlX29mZnNldF9saW1pdCIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfVVRGKSAhPSAwKT8gIiB1dGYiIDogIiIsCisgIGFmdGVyKTsKK30KKworCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgIFNob3cgbWF0Y2ggb3B0aW9ucyAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ2FsbGVkIGZvciB1bnN1cHBvcnRlZCBQT1NJWCBvcHRpb25zLiAqLworCitzdGF0aWMgdm9pZAorc2hvd19tYXRjaF9vcHRpb25zKHVpbnQzMl90IG9wdGlvbnMpCit7CitmcHJpbnRmKG91dGZpbGUsICIlcyVzJXMlcyVzJXMlcyVzJXMlcyIsCisgICgob3B0aW9ucyAmIFBDUkUyX0FOQ0hPUkVEKSAhPSAwKT8gIiBhbmNob3JlZCIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfREZBX1JFU1RBUlQpICE9IDApPyAiIGRmYV9yZXN0YXJ0IiA6ICIiLAorICAoKG9wdGlvbnMgJiBQQ1JFMl9ERkFfU0hPUlRFU1QpICE9IDApPyAiIGRmYV9zaG9ydGVzdCIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfTk9fVVRGX0NIRUNLKSAhPSAwKT8gIiBub191dGZfY2hlY2siIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX05PVEJPTCkgIT0gMCk/ICIgbm90Ym9sIiA6ICIiLAorICAoKG9wdGlvbnMgJiBQQ1JFMl9OT1RFTVBUWSkgIT0gMCk/ICIgbm90ZW1wdHkiIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQpICE9IDApPyAiIG5vdGVtcHR5X2F0c3RhcnQiIDogIiIsCisgICgob3B0aW9ucyAmIFBDUkUyX05PVEVPTCkgIT0gMCk/ICIgbm90ZW9sIiA6ICIiLAorICAoKG9wdGlvbnMgJiBQQ1JFMl9QQVJUSUFMX0hBUkQpICE9IDApPyAiIHBhcnRpYWxfaGFyZCIgOiAiIiwKKyAgKChvcHRpb25zICYgUENSRTJfUEFSVElBTF9TT0ZUKSAhPSAwKT8gIiBwYXJ0aWFsX3NvZnQiIDogIiIpOworfQorI2VuZGlmICAvKiBTVVBQT1JUX1BDUkUyXzggKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgU2hvdyBtZW1vcnkgdXNhZ2UgaW5mbyBmb3IgYSBwYXR0ZXJuICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK3Nob3dfbWVtb3J5X2luZm8odm9pZCkKK3sKK3VpbnQzMl90IG5hbWVfY291bnQsIG5hbWVfZW50cnlfc2l6ZTsKK3NpemVfdCBzaXplLCBjYmxvY2tfc2l6ZTsKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAoraWYgKHRlc3RfbW9kZSA9PSA4KSBjYmxvY2tfc2l6ZSA9IHNpemVvZihwY3JlMl9yZWFsX2NvZGVfOCk7CisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CitpZiAodGVzdF9tb2RlID09IDE2KSBjYmxvY2tfc2l6ZSA9IHNpemVvZihwY3JlMl9yZWFsX2NvZGVfMTYpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgoraWYgKHRlc3RfbW9kZSA9PSAzMikgY2Jsb2NrX3NpemUgPSBzaXplb2YocGNyZTJfcmVhbF9jb2RlXzMyKTsKKyNlbmRpZgorCisodm9pZClwYXR0ZXJuX2luZm8oUENSRTJfSU5GT19TSVpFLCAmc2l6ZSwgRkFMU0UpOworKHZvaWQpcGF0dGVybl9pbmZvKFBDUkUyX0lORk9fTkFNRUNPVU5ULCAmbmFtZV9jb3VudCwgRkFMU0UpOworKHZvaWQpcGF0dGVybl9pbmZvKFBDUkUyX0lORk9fTkFNRUVOVFJZU0laRSwgJm5hbWVfZW50cnlfc2l6ZSwgRkFMU0UpOworZnByaW50ZihvdXRmaWxlLCAiTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAlZFxuIiwKKyAgKGludCkoc2l6ZSAtIG5hbWVfY291bnQqbmFtZV9lbnRyeV9zaXplKmNvZGVfdW5pdF9zaXplIC0gY2Jsb2NrX3NpemUpKTsKK2lmIChwYXRfcGF0Y3RsLmppdCAhPSAwKQorICB7CisgICh2b2lkKXBhdHRlcm5faW5mbyhQQ1JFMl9JTkZPX0pJVFNJWkUsICZzaXplLCBGQUxTRSk7CisgIGZwcmludGYob3V0ZmlsZSwgIk1lbW9yeSBhbGxvY2F0aW9uIChKSVQgY29kZSk6ICVkXG4iLCAoaW50KXNpemUpOworICB9Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGNhbGxvdXQgZW51bWVyYXRpb24gICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBvbmx5IGRpZmZlcmVuY2VzIGluIHRoZSBjYWxsb3V0IGVtdW1lcmF0aW9uIGJsb2NrIGZvciBkaWZmZXJlbnQgY29kZQordW5pdCB3aWR0aHMgYXJlIHRoYXQgdGhlIHBvaW50ZXJzIHRvIHRoZSBzdWJqZWN0LCB0aGUgbW9zdCByZWNlbnQgTUFSSywgYW5kIGEKK2NhbGxvdXQgYXJndW1lbnQgc3RyaW5nIHBvaW50IHRvIHN0cmluZ3Mgb2YgdGhlIGFwcHJvcHJpYXRlIHdpZHRoLiBDYXN0cyBjYW4gYmUKK3VzZWQgdG8gZGVhbCB3aXRoIHRoaXMuCisKK0FyZ3VtZW50OgorICBjYiAgICAgICAgICAgIHBvaW50ZXIgdG8gZW51bWVyYXRlIGJsb2NrCisgIGNhbGxvdXRfZGF0YSAgdXNlciBkYXRhCisKK1JldHVybnM6ICAgIDAKKyovCisKK3N0YXRpYyBpbnQgY2FsbG91dF9jYWxsYmFjayhwY3JlMl9jYWxsb3V0X2VudW1lcmF0ZV9ibG9ja184ICpjYiwKKyAgdm9pZCAqY2FsbG91dF9kYXRhKQorewordWludDMyX3QgaTsKK0JPT0wgdXRmID0gKEZMRChjb21waWxlZF9jb2RlLCBvdmVyYWxsX29wdGlvbnMpICYgUENSRTJfVVRGKSAhPSAwOworCisodm9pZCljYWxsb3V0X2RhdGE7ICAvKiBOb3QgY3VycmVudGx5IGRpc3BsYXllZCAqLworCitmcHJpbnRmKG91dGZpbGUsICJDYWxsb3V0ICIpOworaWYgKGNiLT5jYWxsb3V0X3N0cmluZyAhPSBOVUxMKQorICB7CisgIHVpbnQzMl90IGRlbGltaXRlciA9IENPREVfVU5JVChjYi0+Y2FsbG91dF9zdHJpbmcsIC0xKTsKKyAgZnByaW50ZihvdXRmaWxlLCAiJWMiLCBkZWxpbWl0ZXIpOworICBQQ0hBUlNWKGNiLT5jYWxsb3V0X3N0cmluZywgMCwKKyAgICBjYi0+Y2FsbG91dF9zdHJpbmdfbGVuZ3RoLCB1dGYsIG91dGZpbGUpOworICBmb3IgKGkgPSAwOyBjYWxsb3V0X3N0YXJ0X2RlbGltc1tpXSAhPSAwOyBpKyspCisgICAgaWYgKGRlbGltaXRlciA9PSBjYWxsb3V0X3N0YXJ0X2RlbGltc1tpXSkKKyAgICAgIHsKKyAgICAgIGRlbGltaXRlciA9IGNhbGxvdXRfZW5kX2RlbGltc1tpXTsKKyAgICAgIGJyZWFrOworICAgICAgfQorICBmcHJpbnRmKG91dGZpbGUsICIlYyAgIiwgZGVsaW1pdGVyKTsKKyAgfQorZWxzZSBmcHJpbnRmKG91dGZpbGUsICIlZCAgIiwgY2ItPmNhbGxvdXRfbnVtYmVyKTsKKworZnByaW50ZihvdXRmaWxlLCAiJS4qc1xuIiwKKyAgKGludCkoKGNiLT5uZXh0X2l0ZW1fbGVuZ3RoID09IDApPyAxIDogY2ItPm5leHRfaXRlbV9sZW5ndGgpLAorICBwYnVmZmVyOCArIGNiLT5wYXR0ZXJuX3Bvc2l0aW9uKTsKKworcmV0dXJuIDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBhIHBhdHRlcm4gICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGFmdGVyIGEgcGF0dGVybiBoYXMgYmVlbiBjb21waWxlZCBpZiBhbnkgb2YgdGhlCitpbmZvcm1hdGlvbi1yZXF1ZXN0aW5nIGNvbnRyb2xzIGhhdmUgYmVlbiBzZXQuCisKK0FyZ3VtZW50czogIG5vbmUKKworUmV0dXJuczogICAgUFJfT0sgICAgIGNvbnRpbnVlIHByb2Nlc3NpbmcgbmV4dCBsaW5lCisgICAgICAgICAgICBQUl9TS0lQICAgc2tpcCB0byBhIGJsYW5rIGxpbmUKKyAgICAgICAgICAgIFBSX0FCRU5EICBhYm9ydCB0aGUgcGNyZTJ0ZXN0IHJ1bgorKi8KKworc3RhdGljIGludAorc2hvd19wYXR0ZXJuX2luZm8odm9pZCkKK3sKK3VpbnQzMl90IGNvbXBpbGVfb3B0aW9ucywgb3ZlcmFsbF9vcHRpb25zOworCitpZiAoKHBhdF9wYXRjdGwuY29udHJvbCAmIChDVExfQklOQ09ERXxDVExfRlVMTEJJTkNPREUpKSAhPSAwKQorICB7CisgIGZwcmludGYob3V0ZmlsZSwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CisgIFBDUkUyX1BSSU5USU5UKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfRlVMTEJJTkNPREUpICE9IDApOworICB9CisKK2lmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX0lORk8pICE9IDApCisgIHsKKyAgY29uc3Qgdm9pZCAqbmFtZXRhYmxlOworICBjb25zdCB1aW50OF90ICpzdGFydF9iaXRzOworICBCT09MIG1hdGNoX2xpbWl0X3NldCwgcmVjdXJzaW9uX2xpbWl0X3NldDsKKyAgdWludDMyX3QgYmFja3JlZm1heCwgYnNyX2NvbnZlbnRpb24sIGNhcHR1cmVfY291bnQsIGZpcnN0X2N0eXBlLCBmaXJzdF9jdW5pdCwKKyAgICBoYXNiYWNrc2xhc2hjLCBoYXNjcm9ybGYsIGpjaGFuZ2VkLCBsYXN0X2N0eXBlLCBsYXN0X2N1bml0LCBtYXRjaF9lbXB0eSwKKyAgICBtYXRjaF9saW1pdCwgbWlubGVuZ3RoLCBuYW1lZW50cnlzaXplLCBuYW1lY291bnQsIG5ld2xpbmVfY29udmVudGlvbiwKKyAgICByZWN1cnNpb25fbGltaXQ7CisKKyAgLyogVGhlc2UgaW5mbyByZXF1ZXN0cyBtYXkgcmV0dXJuIFBDUkUyX0VSUk9SX1VOU0VULiAqLworCisgIHN3aXRjaChwYXR0ZXJuX2luZm8oUENSRTJfSU5GT19NQVRDSExJTUlULCAmbWF0Y2hfbGltaXQsIFRSVUUpKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgbWF0Y2hfbGltaXRfc2V0ID0gVFJVRTsKKyAgICBicmVhazsKKworICAgIGNhc2UgUENSRTJfRVJST1JfVU5TRVQ6CisgICAgbWF0Y2hfbGltaXRfc2V0ID0gRkFMU0U7CisgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgIHJldHVybiBQUl9BQkVORDsKKyAgICB9CisKKyAgc3dpdGNoKHBhdHRlcm5faW5mbyhQQ1JFMl9JTkZPX1JFQ1VSU0lPTkxJTUlULCAmcmVjdXJzaW9uX2xpbWl0LCBUUlVFKSkKKyAgICB7CisgICAgY2FzZSAwOgorICAgIHJlY3Vyc2lvbl9saW1pdF9zZXQgPSBUUlVFOworICAgIGJyZWFrOworCisgICAgY2FzZSBQQ1JFMl9FUlJPUl9VTlNFVDoKKyAgICByZWN1cnNpb25fbGltaXRfc2V0ID0gRkFMU0U7CisgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgIHJldHVybiBQUl9BQkVORDsKKyAgICB9CisKKyAgLyogVGhlc2UgaW5mbyByZXF1ZXN0cyBzaG91bGQgYWx3YXlzIHN1Y2NlZWQuICovCisKKyAgaWYgKHBhdHRlcm5faW5mbyhQQ1JFMl9JTkZPX0JBQ0tSRUZNQVgsICZiYWNrcmVmbWF4LCBGQUxTRSkgKworICAgICAgcGF0dGVybl9pbmZvKFBDUkUyX0lORk9fQlNSLCAmYnNyX2NvbnZlbnRpb24sIEZBTFNFKSArCisgICAgICBwYXR0ZXJuX2luZm8oUENSRTJfSU5GT19DQVBUVVJFQ09VTlQsICZjYXB0dXJlX2NvdW50LCBGQUxTRSkgKworICAgICAgcGF0dGVybl9pbmZvKFBDUkUyX0lORk9fRklSU1RCSVRNQVAsICZzdGFydF9iaXRzLCBGQUxTRSkgKworICAgICAgcGF0dGVybl9pbmZvKFBDUkUyX0lORk9fRklSU1RDT0RFVU5JVCwgJmZpcnN0X2N1bml0LCBGQUxTRSkgKworICAgICAgcGF0dGVybl9pbmZvKFBDUkUyX0lORk9fRklSU1RDT0RFVFlQRSwgJmZpcnN0X2N0eXBlLCBGQUxTRSkgKworICAgICAgcGF0dGVybl9pbmZvKFBDUkUyX0lORk9fSEFTQkFDS1NMQVNIQywgJmhhc2JhY2tzbGFzaGMsIEZBTFNFKSArCisgICAgICBwYXR0ZXJuX2luZm8oUENSRTJfSU5GT19IQVNDUk9STEYsICZoYXNjcm9ybGYsIEZBTFNFKSArCisgICAgICBwYXR0ZXJuX2luZm8oUENSRTJfSU5GT19KQ0hBTkdFRCwgJmpjaGFuZ2VkLCBGQUxTRSkgKworICAgICAgcGF0dGVybl9pbmZvKFBDUkUyX0lORk9fTEFTVENPREVVTklULCAmbGFzdF9jdW5pdCwgRkFMU0UpICsKKyAgICAgIHBhdHRlcm5faW5mbyhQQ1JFMl9JTkZPX0xBU1RDT0RFVFlQRSwgJmxhc3RfY3R5cGUsIEZBTFNFKSArCisgICAgICBwYXR0ZXJuX2luZm8oUENSRTJfSU5GT19NQVRDSEVNUFRZLCAmbWF0Y2hfZW1wdHksIEZBTFNFKSArCisgICAgICBwYXR0ZXJuX2luZm8oUENSRTJfSU5GT19NSU5MRU5HVEgsICZtaW5sZW5ndGgsIEZBTFNFKSArCisgICAgICBwYXR0ZXJuX2luZm8oUENSRTJfSU5GT19OQU1FQ09VTlQsICZuYW1lY291bnQsIEZBTFNFKSArCisgICAgICBwYXR0ZXJuX2luZm8oUENSRTJfSU5GT19OQU1FRU5UUllTSVpFLCAmbmFtZWVudHJ5c2l6ZSwgRkFMU0UpICsKKyAgICAgIHBhdHRlcm5faW5mbyhQQ1JFMl9JTkZPX05BTUVUQUJMRSwgJm5hbWV0YWJsZSwgRkFMU0UpICsKKyAgICAgIHBhdHRlcm5faW5mbyhQQ1JFMl9JTkZPX05FV0xJTkUsICZuZXdsaW5lX2NvbnZlbnRpb24sIEZBTFNFKQorICAgICAgIT0gMCkKKyAgICByZXR1cm4gUFJfQUJFTkQ7CisKKyAgZnByaW50ZihvdXRmaWxlLCAiQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAlZFxuIiwgY2FwdHVyZV9jb3VudCk7CisKKyAgaWYgKGJhY2tyZWZtYXggPiAwKQorICAgIGZwcmludGYob3V0ZmlsZSwgIk1heCBiYWNrIHJlZmVyZW5jZSA9ICVkXG4iLCBiYWNrcmVmbWF4KTsKKworICBpZiAobWF4bG9va2JlaGluZCA+IDApCisgICAgZnByaW50ZihvdXRmaWxlLCAiTWF4IGxvb2tiZWhpbmQgPSAlZFxuIiwgbWF4bG9va2JlaGluZCk7CisKKyAgaWYgKG1hdGNoX2xpbWl0X3NldCkKKyAgICBmcHJpbnRmKG91dGZpbGUsICJNYXRjaCBsaW1pdCA9ICV1XG4iLCBtYXRjaF9saW1pdCk7CisKKyAgaWYgKHJlY3Vyc2lvbl9saW1pdF9zZXQpCisgICAgZnByaW50ZihvdXRmaWxlLCAiUmVjdXJzaW9uIGxpbWl0ID0gJXVcbiIsIHJlY3Vyc2lvbl9saW1pdCk7CisKKyAgaWYgKG5hbWVjb3VudCA+IDApCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIk5hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczpcbiIpOworICAgIGZvciAoOyBuYW1lY291bnQgPiAwOyBuYW1lY291bnQtLSkKKyAgICAgIHsKKyAgICAgIGludCBpbW0yX3NpemUgPSB0ZXN0X21vZGUgPT0gUENSRThfTU9ERSA/IDIgOiAxOworICAgICAgdWludDMyX3QgbGVuZ3RoID0gKHVpbnQzMl90KVNUUkxFTihuYW1ldGFibGUgKyBpbW0yX3NpemUpOworICAgICAgZnByaW50ZihvdXRmaWxlLCAiICAiKTsKKyAgICAgIFBDSEFSU1YobmFtZXRhYmxlLCBpbW0yX3NpemUsIGxlbmd0aCwgRkFMU0UsIG91dGZpbGUpOworICAgICAgd2hpbGUgKGxlbmd0aCsrIDwgbmFtZWVudHJ5c2l6ZSAtIGltbTJfc2l6ZSkgcHV0YygnICcsIG91dGZpbGUpOworI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKyAgICAgIGlmICh0ZXN0X21vZGUgPT0gUENSRTMyX01PREUpCisgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIiUzZFxuIiwgKGludCkoKChQQ1JFMl9TUFRSMzIpbmFtZXRhYmxlKVswXSkpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorICAgICAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiJTNkXG4iLCAoaW50KSgoKFBDUkUyX1NQVFIxNiluYW1ldGFibGUpWzBdKSk7CisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKKyAgICAgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiJTNkXG4iLCAoaW50KSgKKyAgICAgICAgKCgoKFBDUkUyX1NQVFI4KW5hbWV0YWJsZSlbMF0pIDw8IDgpIHwgKChQQ1JFMl9TUFRSOCluYW1ldGFibGUpWzFdKSk7CisjZW5kaWYKKyAgICAgIG5hbWV0YWJsZSA9ICh2b2lkKikoKFBDUkUyX1NQVFI4KW5hbWV0YWJsZSArIG5hbWVlbnRyeXNpemUgKiBjb2RlX3VuaXRfc2l6ZSk7CisgICAgICB9CisgICAgfQorCisgIGlmIChoYXNjcm9ybGYpICAgICBmcHJpbnRmKG91dGZpbGUsICJDb250YWlucyBleHBsaWNpdCBDUiBvciBMRiBtYXRjaFxuIik7CisgIGlmIChoYXNiYWNrc2xhc2hjKSBmcHJpbnRmKG91dGZpbGUsICJDb250YWlucyBcXENcbiIpOworICBpZiAobWF0Y2hfZW1wdHkpICAgZnByaW50ZihvdXRmaWxlLCAiTWF5IG1hdGNoIGVtcHR5IHN0cmluZ1xuIik7CisKKyAgcGF0dGVybl9pbmZvKFBDUkUyX0lORk9fQVJHT1BUSU9OUywgJmNvbXBpbGVfb3B0aW9ucywgRkFMU0UpOworICBwYXR0ZXJuX2luZm8oUENSRTJfSU5GT19BTExPUFRJT05TLCAmb3ZlcmFsbF9vcHRpb25zLCBGQUxTRSk7CisKKyAgLyogUmVtb3ZlIFVURi9VQ1AgaWYgdGhleSB3ZXJlIHRoZXJlIG9ubHkgYmVjYXVzZSBvZiBmb3JiaWRfdXRmLiBUaGlzIHNhdmVzCisgIGNsdXR0ZXJpbmcgdXAgdGhlIHZlcmlmaWNhdGlvbiBvdXRwdXQgb2Ygbm9uLVVURiB0ZXN0IGZpbGVzLiAqLworCisgIGlmICgocGF0X3BhdGN0bC5vcHRpb25zICYgUENSRTJfTkVWRVJfVVRGKSA9PSAwKQorICAgIHsKKyAgICBjb21waWxlX29wdGlvbnMgJj0gflBDUkUyX05FVkVSX1VURjsKKyAgICBvdmVyYWxsX29wdGlvbnMgJj0gflBDUkUyX05FVkVSX1VURjsKKyAgICB9CisKKyAgaWYgKChwYXRfcGF0Y3RsLm9wdGlvbnMgJiBQQ1JFMl9ORVZFUl9VQ1ApID09IDApCisgICAgeworICAgIGNvbXBpbGVfb3B0aW9ucyAmPSB+UENSRTJfTkVWRVJfVUNQOworICAgIG92ZXJhbGxfb3B0aW9ucyAmPSB+UENSRTJfTkVWRVJfVUNQOworICAgIH0KKworICBpZiAoKGNvbXBpbGVfb3B0aW9uc3xvdmVyYWxsX29wdGlvbnMpICE9IDApCisgICAgeworICAgIGlmIChjb21waWxlX29wdGlvbnMgPT0gb3ZlcmFsbF9vcHRpb25zKQorICAgICAgc2hvd19jb21waWxlX29wdGlvbnMoY29tcGlsZV9vcHRpb25zLCAiT3B0aW9uczoiLCAiXG4iKTsKKyAgICBlbHNlCisgICAgICB7CisgICAgICBzaG93X2NvbXBpbGVfb3B0aW9ucyhjb21waWxlX29wdGlvbnMsICJDb21waWxlIG9wdGlvbnM6IiwgIlxuIik7CisgICAgICBzaG93X2NvbXBpbGVfb3B0aW9ucyhvdmVyYWxsX29wdGlvbnMsICJPdmVyYWxsIG9wdGlvbnM6IiwgIlxuIik7CisgICAgICB9CisgICAgfQorCisgIGlmIChqY2hhbmdlZCkgZnByaW50ZihvdXRmaWxlLCAiRHVwbGljYXRlIG5hbWUgc3RhdHVzIGNoYW5nZXNcbiIpOworCisgIGlmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX0JTUl9TRVQpICE9IDAgfHwKKyAgICAgIChGTEQoY29tcGlsZWRfY29kZSwgZmxhZ3MpICYgUENSRTJfQlNSX1NFVCkgIT0gMCkKKyAgICBmcHJpbnRmKG91dGZpbGUsICJcXFIgbWF0Y2hlcyAlc1xuIiwgKGJzcl9jb252ZW50aW9uID09IFBDUkUyX0JTUl9VTklDT0RFKT8KKyAgICAgICJhbnkgVW5pY29kZSBuZXdsaW5lIiA6ICJDUiwgTEYsIG9yIENSTEYiKTsKKworICBpZiAoKEZMRChjb21waWxlZF9jb2RlLCBmbGFncykgJiBQQ1JFMl9OTF9TRVQpICE9IDApCisgICAgeworICAgIHN3aXRjaCAobmV3bGluZV9jb252ZW50aW9uKQorICAgICAgeworICAgICAgY2FzZSBQQ1JFMl9ORVdMSU5FX0NSOgorICAgICAgZnByaW50ZihvdXRmaWxlLCAiRm9yY2VkIG5ld2xpbmUgaXMgQ1JcbiIpOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUENSRTJfTkVXTElORV9MRjoKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIkZvcmNlZCBuZXdsaW5lIGlzIExGXG4iKTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBDUkUyX05FV0xJTkVfQ1JMRjoKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIkZvcmNlZCBuZXdsaW5lIGlzIENSTEZcbiIpOworICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUENSRTJfTkVXTElORV9BTllDUkxGOgorICAgICAgZnByaW50ZihvdXRmaWxlLCAiRm9yY2VkIG5ld2xpbmUgaXMgQ1IsIExGLCBvciBDUkxGXG4iKTsKKyAgICAgIGJyZWFrOworCisgICAgICBjYXNlIFBDUkUyX05FV0xJTkVfQU5ZOgorICAgICAgZnByaW50ZihvdXRmaWxlLCAiRm9yY2VkIG5ld2xpbmUgaXMgYW55IFVuaWNvZGUgbmV3bGluZVxuIik7CisgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgIGJyZWFrOworICAgICAgfQorICAgIH0KKworICBpZiAoZmlyc3RfY3R5cGUgPT0gMikKKyAgICB7CisgICAgZnByaW50ZihvdXRmaWxlLCAiRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZVxuIik7CisgICAgfQorICBlbHNlIGlmIChmaXJzdF9jdHlwZSA9PSAxKQorICAgIHsKKyAgICBjb25zdCBjaGFyICpjYXNlbGVzcyA9CisgICAgICAoKEZMRChjb21waWxlZF9jb2RlLCBmbGFncykgJiBQQ1JFMl9GSVJTVENBU0VMRVNTKSA9PSAwKT8KKyAgICAgICIiIDogIiAoY2FzZWxlc3MpIjsKKyAgICBpZiAoUFJJTlRPSyhmaXJzdF9jdW5pdCkpCisgICAgICBmcHJpbnRmKG91dGZpbGUsICJGaXJzdCBjb2RlIHVuaXQgPSBcJyVjXCclc1xuIiwgZmlyc3RfY3VuaXQsIGNhc2VsZXNzKTsKKyAgICBlbHNlCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICJGaXJzdCBjb2RlIHVuaXQgPSAiKTsKKyAgICAgIHBjaGFyKGZpcnN0X2N1bml0LCBGQUxTRSwgb3V0ZmlsZSk7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICIlc1xuIiwgY2FzZWxlc3MpOworICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoc3RhcnRfYml0cyAhPSBOVUxMKQorICAgIHsKKyAgICBpbnQgaTsKKyAgICBpbnQgYyA9IDI0OworICAgIGZwcmludGYob3V0ZmlsZSwgIlN0YXJ0aW5nIGNvZGUgdW5pdHM6ICIpOworICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgIHsKKyAgICAgIGlmICgoc3RhcnRfYml0c1tpLzhdICYgKDE8PChpJjcpKSkgIT0gMCkKKyAgICAgICAgeworICAgICAgICBpZiAoYyA+IDc1KQorICAgICAgICAgIHsKKyAgICAgICAgICBmcHJpbnRmKG91dGZpbGUsICJcbiAgIik7CisgICAgICAgICAgYyA9IDI7CisgICAgICAgICAgfQorICAgICAgICBpZiAoUFJJTlRPSyhpKSAmJiBpICE9ICcgJykKKyAgICAgICAgICB7CisgICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiJWMgIiwgaSk7CisgICAgICAgICAgYyArPSAyOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICBmcHJpbnRmKG91dGZpbGUsICJcXHglMDJ4ICIsIGkpOworICAgICAgICAgIGMgKz0gNTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworICAgIH0KKworICBpZiAobGFzdF9jdHlwZSAhPSAwKQorICAgIHsKKyAgICBjb25zdCBjaGFyICpjYXNlbGVzcyA9CisgICAgICAoKEZMRChjb21waWxlZF9jb2RlLCBmbGFncykgJiBQQ1JFMl9MQVNUQ0FTRUxFU1MpID09IDApPworICAgICAgIiIgOiAiIChjYXNlbGVzcykiOworICAgIGlmIChQUklOVE9LKGxhc3RfY3VuaXQpKQorICAgICAgZnByaW50ZihvdXRmaWxlLCAiTGFzdCBjb2RlIHVuaXQgPSBcJyVjXCclc1xuIiwgbGFzdF9jdW5pdCwgY2FzZWxlc3MpOworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIkxhc3QgY29kZSB1bml0ID0gIik7CisgICAgICBwY2hhcihsYXN0X2N1bml0LCBGQUxTRSwgb3V0ZmlsZSk7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICIlc1xuIiwgY2FzZWxlc3MpOworICAgICAgfQorICAgIH0KKworICBmcHJpbnRmKG91dGZpbGUsICJTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9ICVkXG4iLCBtaW5sZW5ndGgpOworCisgIGlmIChwYXRfcGF0Y3RsLmppdCAhPSAwICYmIChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfSklUVkVSSUZZKSAhPSAwKQorICAgIHsKKyAgICBpZiAoRkxEKGNvbXBpbGVkX2NvZGUsIGV4ZWN1dGFibGVfaml0KSAhPSBOVUxMKQorICAgICAgZnByaW50ZihvdXRmaWxlLCAiSklUIGNvbXBpbGF0aW9uIHdhcyBzdWNjZXNzZnVsXG4iKTsKKyAgICBlbHNlCisgICAgICB7CisjaWZkZWYgU1VQUE9SVF9KSVQKKyAgICAgIGludCBsZW47CisgICAgICBmcHJpbnRmKG91dGZpbGUsICJKSVQgY29tcGlsYXRpb24gd2FzIG5vdCBzdWNjZXNzZnVsIik7CisgICAgICBpZiAoaml0cmMgIT0gMCkKKyAgICAgICAgeworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIgKCIpOworICAgICAgICBQQ1JFMl9HRVRfRVJST1JfTUVTU0FHRShsZW4sIGppdHJjLCBwYnVmZmVyKTsKKyAgICAgICAgUENIQVJTVihDQVNUVkFSKHZvaWQgKiwgcGJ1ZmZlciksIDAsIGxlbiwgRkFMU0UsIG91dGZpbGUpOworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIpIik7CisgICAgICAgIH0KKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIlxuIik7CisjZWxzZQorICAgICAgZnByaW50ZihvdXRmaWxlLCAiSklUIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIHZlcnNpb24gb2YgUENSRTJcbiIpOworI2VuZGlmCisgICAgICB9CisgICAgfQorICB9CisKK2lmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX0NBTExPVVRfSU5GTykgIT0gMCkKKyAgeworICBpbnQgZXJyb3Jjb2RlOworICBQQ1JFMl9DQUxMT1VUX0VOVU1FUkFURShlcnJvcmNvZGUsIGNhbGxvdXRfY2FsbGJhY2ssIDApOworICBpZiAoZXJyb3Jjb2RlICE9IDApCisgICAgeworICAgIGludCBsZW47CisgICAgZnByaW50ZihvdXRmaWxlLCAiQ2FsbG91dCBlbnVtZXJhdGUgZmFpbGVkOiBlcnJvciAlZDogIiwgZXJyb3Jjb2RlKTsKKyAgICBpZiAoZXJyb3Jjb2RlIDwgMCkKKyAgICAgIHsKKyAgICAgIFBDUkUyX0dFVF9FUlJPUl9NRVNTQUdFKGxlbiwgZXJyb3Jjb2RlLCBwYnVmZmVyKTsKKyAgICAgIFBDSEFSU1YoQ0FTVFZBUih2b2lkICosIHBidWZmZXIpLCAwLCBsZW4sIEZBTFNFLCBvdXRmaWxlKTsKKyAgICAgIH0KKyAgICBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworICAgIHJldHVybiBQUl9TS0lQOworICAgIH0KKyAgfQorCityZXR1cm4gUFJfT0s7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgSGFuZGxlIHNlcmlhbGl6YXRpb24gZXJyb3IgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFByaW50IGFuIGVycm9yIG1lc3NhZ2UgYWZ0ZXIgYSBzZXJpYWxpemF0aW9uIGZhaWx1cmUuCisKK0FyZ3VtZW50czoKKyAgcmMgICAgICAgICB0aGUgZXJyb3IgY29kZQorICBtc2cgICAgICAgIGFuIGluaXRpYWwgbWVzc2FnZSBmb3Igd2hhdCBmYWlsZWQKKworUmV0dXJuczogICAgIG5vdGhpbmcKKyovCisKK3N0YXRpYyB2b2lkCitzZXJpYWxfZXJyb3IoaW50IHJjLCBjb25zdCBjaGFyICptc2cpCit7CitmcHJpbnRmKG91dGZpbGUsICIlcyBmYWlsZWQ6IGVycm9yICVkOiAiLCBtc2csIHJjKTsKK1BDUkUyX0dFVF9FUlJPUl9NRVNTQUdFKHJjLCByYywgcGJ1ZmZlcik7CitQQ0hBUlNWKENBU1RWQVIodm9pZCAqLCBwYnVmZmVyKSwgMCwgcmMsIEZBTFNFLCBvdXRmaWxlKTsKK2ZwcmludGYob3V0ZmlsZSwgIlxuIik7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgT3BlbiBmaWxlIGZvciBzYXZlL2xvYWQgY29tbWFuZHMgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoaXMgZnVuY3Rpb24gZGVjb2RlcyB0aGUgZmlsZSBuYW1lIGFuZCBvcGVucyB0aGUgZmlsZS4KKworQXJndW1lbnRzOgorICBidWZmcHRyICAgICBwb2ludCBhZnRlciB0aGUgI2NvbW1hbmQKKyAgbW9kZSAgICAgICAgb3BlbiBtb2RlCisgIGZwdHIgICAgICAgIHBvaW50cyB0byB0aGUgRklMRSB2YXJpYWJsZQorCitSZXR1cm5zOiAgICAgIFBSX09LIG9yIFBSX0FCRU5ECisqLworCitzdGF0aWMgaW50CitvcGVuX2ZpbGUodWludDhfdCAqYnVmZnB0ciwgY29uc3QgY2hhciAqbW9kZSwgRklMRSAqKmZwdHIpCit7CitjaGFyICplbmRmOworY2hhciAqZmlsZW5hbWUgPSAoY2hhciAqKWJ1ZmZwdHI7Cit3aGlsZSAoaXNzcGFjZSgqZmlsZW5hbWUpKSBmaWxlbmFtZSsrOworZW5kZiA9IGZpbGVuYW1lICsgc3RybGVuOChmaWxlbmFtZSk7Cit3aGlsZSAoZW5kZiA+IGZpbGVuYW1lICYmIGlzc3BhY2UoZW5kZlstMV0pKSBlbmRmLS07CisKK2lmIChlbmRmID09IGZpbGVuYW1lKQorICB7CisgIGZwcmludGYob3V0ZmlsZSwgIioqIEZpbGUgbmFtZSBleHBlY3RlZCBhZnRlciAjc2F2ZVxuIik7CisgIHJldHVybiBQUl9BQkVORDsKKyAgfQorCisqZW5kZiA9IDA7CisqZnB0ciA9IGZvcGVuKChjb25zdCBjaGFyICopZmlsZW5hbWUsIG1vZGUpOworaWYgKCpmcHRyID09IE5VTEwpCisgIHsKKyAgZnByaW50ZihvdXRmaWxlLCAiKiogRmFpbGVkIHRvIG9wZW4gJyVzJ1xuIiwgZmlsZW5hbWUpOworICByZXR1cm4gUFJfQUJFTkQ7CisgIH0KKworcmV0dXJuIFBSX09LOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICBQcm9jZXNzIGNvbW1hbmQgbGluZSAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgbGluZXMgYmVnaW5uaW5nIHdpdGggIyBhbmQgYSBjaGFyYWN0ZXIgdGhhdCBpcworbm90ICEgb3Igd2hpdGVzcGFjZSwgd2hlbiBlbmNvdW50ZXJlZCBiZXR3ZWVuIHRlc3RzLCB3aGljaCBtZWFucyB0aGF0IHRoZXJlIGlzCitubyBjb21waWxlZCBwYXR0ZXJuIChjb21waWxlZF9jb2RlIGlzIE5VTEwpLiBUaGUgbGluZSBpcyBpbiBidWZmZXIuCisKK0FyZ3VtZW50czogIG5vbmUKKworUmV0dXJuczogICAgUFJfT0sgICAgIGNvbnRpbnVlIHByb2Nlc3NpbmcgbmV4dCBsaW5lCisgICAgICAgICAgICBQUl9TS0lQICAgc2tpcCB0byBhIGJsYW5rIGxpbmUKKyAgICAgICAgICAgIFBSX0FCRU5EICBhYm9ydCB0aGUgcGNyZTJ0ZXN0IHJ1bgorKi8KKworc3RhdGljIGludAorcHJvY2Vzc19jb21tYW5kKHZvaWQpCit7CitGSUxFICpmOworUENSRTJfU0laRSBzZXJpYWxfc2l6ZTsKK3NpemVfdCBpOworaW50IHJjLCBjbWQsIGNtZGxlbjsKK3VpbnQxNl90IGZpcnN0X2xpc3RlZF9uZXdsaW5lOworY29uc3QgY2hhciAqY21kbmFtZTsKK3VpbnQ4X3QgKmFyZ3B0ciwgKnNlcmlhbDsKKworaWYgKHJlc3RyaWN0X2Zvcl9wZXJsX3Rlc3QpCisgIHsKKyAgZnByaW50ZihvdXRmaWxlLCAiKiogIy1jb21tYW5kcyBhcmUgbm90IGFsbG93ZWQgYWZ0ZXIgI3Blcmx0ZXN0XG4iKTsKKyAgcmV0dXJuIFBSX0FCRU5EOworICB9CisKK2NtZCA9IENNRF9VTktOT1dOOworY21kbGVuID0gMDsKKworZm9yIChpID0gMDsgaSA8IGNtZGxpc3Rjb3VudDsgaSsrKQorICB7CisgIGNtZG5hbWUgPSBjbWRsaXN0W2ldLm5hbWU7CisgIGNtZGxlbiA9IHN0cmxlbihjbWRuYW1lKTsKKyAgaWYgKHN0cm5jbXAoKGNoYXIgKikoYnVmZmVyKzEpLCBjbWRuYW1lLCBjbWRsZW4pID09IDAgJiYKKyAgICAgIGlzc3BhY2UoYnVmZmVyW2NtZGxlbisxXSkpCisgICAgeworICAgIGNtZCA9IGNtZGxpc3RbaV0udmFsdWU7CisgICAgYnJlYWs7CisgICAgfQorICB9CisKK2FyZ3B0ciA9IGJ1ZmZlciArIGNtZGxlbiArIDE7CisKK3N3aXRjaChjbWQpCisgIHsKKyAgY2FzZSBDTURfVU5LTk9XTjoKKyAgZnByaW50ZihvdXRmaWxlLCAiKiogVW5rbm93biBjb21tYW5kOiAlcyIsIGJ1ZmZlcik7CisgIGJyZWFrOworCisgIGNhc2UgQ01EX0ZPUkJJRF9VVEY6CisgIGZvcmJpZF91dGYgPSBQQ1JFMl9ORVZFUl9VVEZ8UENSRTJfTkVWRVJfVUNQOworICBicmVhazsKKworICBjYXNlIENNRF9QRVJMVEVTVDoKKyAgcmVzdHJpY3RfZm9yX3BlcmxfdGVzdCA9IFRSVUU7CisgIGJyZWFrOworCisgIC8qIFNldCBkZWZhdWx0IHBhdHRlcm4gbW9kaWZpZXJzICovCisKKyAgY2FzZSBDTURfUEFUVEVSTjoKKyAgKHZvaWQpZGVjb2RlX21vZGlmaWVycyhhcmdwdHIsIENUWF9ERUZQQVQsICZkZWZfcGF0Y3RsLCBOVUxMKTsKKyAgaWYgKGRlZl9wYXRjdGwuaml0ID09IDAgJiYgKGRlZl9wYXRjdGwuY29udHJvbCAmIENUTF9KSVRWRVJJRlkpICE9IDApCisgICAgZGVmX3BhdGN0bC5qaXQgPSA3OworICBicmVhazsKKworICAvKiBTZXQgZGVmYXVsdCBzdWJqZWN0IG1vZGlmaWVycyAqLworCisgIGNhc2UgQ01EX1NVQkpFQ1Q6CisgICh2b2lkKWRlY29kZV9tb2RpZmllcnMoYXJncHRyLCBDVFhfREVGREFULCBOVUxMLCAmZGVmX2RhdGN0bCk7CisgIGJyZWFrOworCisgIC8qIENoZWNrIHRoZSBkZWZhdWx0IG5ld2xpbmUsIGFuZCBpZiBub3Qgb25lIG9mIHRob3NlIGxpc3RlZCwgc2V0IHVwIHRoZQorICBmaXJzdCBvbmUgdG8gYmUgZm9yY2VkLiBBbiBlbXB0eSBsaXN0IHVuc2V0cy4gKi8KKworICBjYXNlIENNRF9ORVdMSU5FX0RFRkFVTFQ6CisgIGxvY2FsX25ld2xpbmVfZGVmYXVsdCA9IDA7ICAgLyogVW5zZXQgKi8KKyAgZmlyc3RfbGlzdGVkX25ld2xpbmUgPSAwOworICBmb3IgKDs7KQorICAgIHsKKyAgICB3aGlsZSAoaXNzcGFjZSgqYXJncHRyKSkgYXJncHRyKys7CisgICAgaWYgKCphcmdwdHIgPT0gMCkgYnJlYWs7CisgICAgZm9yIChpID0gMTsgaSA8IHNpemVvZihuZXdsaW5lcykvc2l6ZW9mKGNoYXIgKik7IGkrKykKKyAgICAgIHsKKyAgICAgIHNpemVfdCBubGVuID0gc3RybGVuKG5ld2xpbmVzW2ldKTsKKyAgICAgIGlmIChzdHJuY21waWMoYXJncHRyLCAoY29uc3QgdWludDhfdCAqKW5ld2xpbmVzW2ldLCBubGVuKSA9PSAwICYmCisgICAgICAgICAgaXNzcGFjZShhcmdwdHJbbmxlbl0pKQorICAgICAgICB7CisgICAgICAgIGlmIChpID09IE5FV0xJTkVfREVGQVVMVCkgcmV0dXJuIFBSX09LOyAgLyogRGVmYXVsdCBpcyB2YWxpZCAqLworICAgICAgICBpZiAoZmlyc3RfbGlzdGVkX25ld2xpbmUgPT0gMCkgZmlyc3RfbGlzdGVkX25ld2xpbmUgPSBpOworICAgICAgICB9CisgICAgICB9CisgICAgd2hpbGUgKCphcmdwdHIgIT0gMCAmJiAhaXNzcGFjZSgqYXJncHRyKSkgYXJncHRyKys7CisgICAgfQorICBsb2NhbF9uZXdsaW5lX2RlZmF1bHQgPSBmaXJzdF9saXN0ZWRfbmV3bGluZTsKKyAgYnJlYWs7CisKKyAgLyogUG9wIGEgY29tcGlsZWQgcGF0dGVybiBvZmYgdGhlIHN0YWNrLiBNb2RpZmllcnMgdGhhdCBkbyBub3QgYWZmZWN0IHRoZQorICBjb21waWxlZCBwYXR0ZXJuIChlLmcuIHRvIGdpdmUgaW5mb3JtYXRpb24pIGFyZSBwZXJtaXR0ZWQuIFRoZSBkZWZhdWx0CisgIHBhdHRlcm4gbW9kaWZpZXJzIGFyZSBpZ25vcmVkLiAqLworCisgIGNhc2UgQ01EX1BPUDoKKyAgaWYgKHBhdHN0YWNrbmV4dCA8PSAwKQorICAgIHsKKyAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBDYW4ndCBwb3Agb2ZmIGFuIGVtcHR5IHN0YWNrXG4iKTsKKyAgICByZXR1cm4gUFJfU0tJUDsKKyAgICB9CisgIG1lbXNldCgmcGF0X3BhdGN0bCwgMCwgc2l6ZW9mKHBhdGN0bCkpOyAgIC8qIENvbXBsZXRlbHkgdW5zZXQgKi8KKyAgaWYgKCFkZWNvZGVfbW9kaWZpZXJzKGFyZ3B0ciwgQ1RYX1BPUFBBVCwgJnBhdF9wYXRjdGwsIE5VTEwpKQorICAgIHJldHVybiBQUl9TS0lQOworICBTRVQoY29tcGlsZWRfY29kZSwgcGF0c3RhY2tbLS1wYXRzdGFja25leHRdKTsKKyAgaWYgKHBhdF9wYXRjdGwuaml0ICE9IDApCisgICAgeworICAgIFBDUkUyX0pJVF9DT01QSUxFKGppdHJjLCBjb21waWxlZF9jb2RlLCBwYXRfcGF0Y3RsLmppdCk7CisgICAgfQorICBpZiAoKHBhdF9wYXRjdGwuY29udHJvbCAmIENUTF9NRU1PUlkpICE9IDApIHNob3dfbWVtb3J5X2luZm8oKTsKKyAgaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfQU5ZSU5GTykgIT0gMCkKKyAgICB7CisgICAgcmMgPSBzaG93X3BhdHRlcm5faW5mbygpOworICAgIGlmIChyYyAhPSBQUl9PSykgcmV0dXJuIHJjOworICAgIH0KKyAgYnJlYWs7CisKKyAgLyogU2F2ZSB0aGUgc3RhY2sgb2YgY29tcGlsZWQgcGF0dGVybnMgdG8gYSBmaWxlLCB0aGVuIGVtcHR5IHRoZSBzdGFjay4gKi8KKworICBjYXNlIENNRF9TQVZFOgorICBpZiAocGF0c3RhY2tuZXh0IDw9IDApCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIioqIE5vIHN0YWNrZWQgcGF0dGVybnMgdG8gc2F2ZVxuIik7CisgICAgcmV0dXJuIFBSX09LOworICAgIH0KKworICByYyA9IG9wZW5fZmlsZShhcmdwdHIrMSwgQklOQVJZX09VVFBVVF9NT0RFLCAmZik7CisgIGlmIChyYyAhPSBQUl9PSykgcmV0dXJuIHJjOworCisgIFBDUkUyX1NFUklBTElaRV9FTkNPREUocmMsIHBhdHN0YWNrLCBwYXRzdGFja25leHQsICZzZXJpYWwsICZzZXJpYWxfc2l6ZSwKKyAgICBnZW5lcmFsX2NvbnRleHQpOworICBpZiAocmMgPCAwKQorICAgIHsKKyAgICBzZXJpYWxfZXJyb3IocmMsICJTZXJpYWxpemF0aW9uIik7CisgICAgYnJlYWs7CisgICAgfQorCisgIC8qIFdyaXRlIHRoZSBsZW5ndGggYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIHRvIG1ha2UgaXQgc3RyYWlnaHRmb3J3YXJkIHRvCisgIGdldCB0aGUgcmlnaHQgbWVtb3J5IHdoZW4gcmUtbG9hZGluZy4gVGhpcyBzYXZlcyBoYXZpbmcgdG8gcmVhZCB0aGUgZmlsZSBzaXplCisgIGluIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy4gVG8gYWxsb3cgZm9yIGRpZmZlcmVudCBlbmRpYW5uZXNzIChldmVuCisgIHRob3VnaCByZWxvYWRpbmcgd2l0aCB0aGUgb3Bwb3NpdGUgZW5kaWFubmVzcyBkb2VzIG5vdCB3b3JrKSwgd3JpdGUgdGhlCisgIGxlbmd0aCBieXRlLWJ5LWJ5dGUuICovCisKKyAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgZnB1dGMoKHNlcmlhbF9zaXplID4+IChpKjgpKSAmIDI1NSwgZik7CisgIGlmIChmd3JpdGUoc2VyaWFsLCAxLCBzZXJpYWxfc2l6ZSwgZikgIT0gc2VyaWFsX3NpemUpCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIioqIFdyb25nIHJldHVybiBmcm9tIGZ3cml0ZSgpXG4iKTsKKyAgICByZXR1cm4gUFJfQUJFTkQ7CisgICAgfQorCisgIGZjbG9zZShmKTsKKyAgUENSRTJfU0VSSUFMSVpFX0ZSRUUoc2VyaWFsKTsKKyAgd2hpbGUocGF0c3RhY2tuZXh0ID4gMCkKKyAgICB7CisgICAgU0VUKGNvbXBpbGVkX2NvZGUsIHBhdHN0YWNrWy0tcGF0c3RhY2tuZXh0XSk7CisgICAgU1VCMShwY3JlMl9jb2RlX2ZyZWUsIGNvbXBpbGVkX2NvZGUpOworICAgIH0KKyAgU0VUKGNvbXBpbGVkX2NvZGUsIE5VTEwpOworICBicmVhazsKKworICAvKiBMb2FkIGEgc2V0IG9mIGNvbXBpbGVkIHBhdHRlcm5zIGZyb20gYSBmaWxlIG9udG8gdGhlIHN0YWNrICovCisKKyAgY2FzZSBDTURfTE9BRDoKKyAgcmMgPSBvcGVuX2ZpbGUoYXJncHRyKzEsIEJJTkFSWV9JTlBVVF9NT0RFLCAmZik7CisgIGlmIChyYyAhPSBQUl9PSykgcmV0dXJuIHJjOworCisgIHNlcmlhbF9zaXplID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgc2VyaWFsX3NpemUgfD0gZmdldGMoZikgPDwgKGkqOCk7CisKKyAgc2VyaWFsID0gbWFsbG9jKHNlcmlhbF9zaXplKTsKKyAgaWYgKHNlcmlhbCA9PSBOVUxMKQorICAgIHsKKyAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBGYWlsZWQgdG8gZ2V0IG1lbW9yeSAoc2l6ZSAlbHUpIGZvciAjbG9hZFxuIiwKKyAgICAgICh1bnNpZ25lZCBsb25nIGludClzZXJpYWxfc2l6ZSk7CisgICAgcmV0dXJuIFBSX0FCRU5EOworICAgIH0KKworICBpZiAoZnJlYWQoc2VyaWFsLCAxLCBzZXJpYWxfc2l6ZSwgZikgIT0gc2VyaWFsX3NpemUpCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIioqIFdyb25nIHJldHVybiBmcm9tIGZyZWFkKClcbiIpOworICAgIHJldHVybiBQUl9BQkVORDsKKyAgICB9CisgIGZjbG9zZShmKTsKKworICBQQ1JFMl9TRVJJQUxJWkVfR0VUX05VTUJFUl9PRl9DT0RFUyhyYywgc2VyaWFsKTsKKyAgaWYgKHJjIDwgMCkgc2VyaWFsX2Vycm9yKHJjLCAiR2V0IG51bWJlciBvZiBjb2RlcyIpOyBlbHNlCisgICAgeworICAgIGlmIChyYyArIHBhdHN0YWNrbmV4dCA+IFBBVFNUQUNLU0laRSkKKyAgICAgIHsKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqIE5vdCBlbm91Z2ggc3BhY2Ugb24gcGF0dGVybiBzdGFjayBmb3IgJWQgcGF0dGVybiVzXG4iLAorICAgICAgICByYywgKHJjID09IDEpPyAiIiA6ICJzIik7CisgICAgICByYyA9IFBBVFNUQUNLU0laRSAtIHBhdHN0YWNrbmV4dDsKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqIERlY29kaW5nICVkIHBhdHRlcm4lc1xuIiwgcmMsCisgICAgICAgIChyYyA9PSAxKT8gIiIgOiAicyIpOworICAgICAgfQorICAgIFBDUkUyX1NFUklBTElaRV9ERUNPREUocmMsIHBhdHN0YWNrICsgcGF0c3RhY2tuZXh0LCByYywgc2VyaWFsLAorICAgICAgZ2VuZXJhbF9jb250ZXh0KTsKKyAgICBpZiAocmMgPCAwKSBzZXJpYWxfZXJyb3IocmMsICJEZXNlcmlhbGl6YXRpb24iKTsKKyAgICAgIGVsc2UgcGF0c3RhY2tuZXh0ICs9IHJjOworICAgIH0KKworICBmcmVlKHNlcmlhbCk7CisgIGJyZWFrOworICB9CisKK3JldHVybiBQUl9PSzsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgUHJvY2VzcyBwYXR0ZXJuIGxpbmUgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgaW5wdXQgYnVmZmVyIGNvbnRhaW5zIHRoZSBzdGFydCBvZiBhCitwYXR0ZXJuLiBUaGUgZmlyc3QgY2hhcmFjdGVyIGlzIGtub3duIHRvIGJlIGEgdmFsaWQgZGVsaW1pdGVyLiBUaGUgcGF0dGVybiBpcworcmVhZCwgbW9kaWZpZXJzIGFyZSBpbnRlcnByZXRlZCwgYW5kIGEgc3VpdGFibGUgbG9jYWwgY29udGV4dCBpcyBzZXQgdXAgZm9yCit0aGlzIHRlc3QuIFRoZSBwYXR0ZXJuIGlzIHRoZW4gY29tcGlsZWQuCisKK0FyZ3VtZW50czogIG5vbmUKKworUmV0dXJuczogICAgUFJfT0sgICAgIGNvbnRpbnVlIHByb2Nlc3NpbmcgbmV4dCBsaW5lCisgICAgICAgICAgICBQUl9TS0lQICAgc2tpcCB0byBhIGJsYW5rIGxpbmUKKyAgICAgICAgICAgIFBSX0FCRU5EICBhYm9ydCB0aGUgcGNyZTJ0ZXN0IHJ1bgorKi8KKworc3RhdGljIGludAorcHJvY2Vzc19wYXR0ZXJuKHZvaWQpCit7CitCT09MIHV0ZjsKK3VpbnQzMl90IGs7Cit1aW50OF90ICpwID0gYnVmZmVyOworY29uc3QgdWludDhfdCAqdXNlX3RhYmxlczsKK3Vuc2lnbmVkIGludCBkZWxpbWl0ZXIgPSAqcCsrOworaW50IGVycm9yY29kZTsKK3ZvaWQgKnVzZV9wYXRfY29udGV4dDsKK1BDUkUyX1NJWkUgcGF0bGVuOworUENSRTJfU0laRSBlcnJvcm9mZnNldDsKKworLyogSW5pdGlhbGl6ZSB0aGUgY29udGV4dCBhbmQgcGF0dGVybi9kYXRhIGNvbnRyb2xzIGZvciB0aGlzIHRlc3QgZnJvbSB0aGUKK2RlZmF1bHRzLiAqLworCitQQVRDVFhDUFkocGF0X2NvbnRleHQsIGRlZmF1bHRfcGF0X2NvbnRleHQpOworbWVtY3B5KCZwYXRfcGF0Y3RsLCAmZGVmX3BhdGN0bCwgc2l6ZW9mKHBhdGN0bCkpOworCisvKiBGaW5kIHRoZSBlbmQgb2YgdGhlIHBhdHRlcm4sIHJlYWRpbmcgbW9yZSBsaW5lcyBpZiBuZWNlc3NhcnkuICovCisKK2Zvcig7OykKKyAgeworICB3aGlsZSAoKnAgIT0gMCkKKyAgICB7CisgICAgaWYgKCpwID09ICdcXCcgJiYgcFsxXSAhPSAwKSBwKys7CisgICAgICBlbHNlIGlmICgqcCA9PSBkZWxpbWl0ZXIpIGJyZWFrOworICAgIHArKzsKKyAgICB9CisgIGlmICgqcCAhPSAwKSBicmVhazsKKyAgaWYgKChwID0gZXh0ZW5kX2lucHV0bGluZShpbmZpbGUsIHAsICIgICAgPiAiKSkgPT0gTlVMTCkKKyAgICB7CisgICAgZnByaW50ZihvdXRmaWxlLCAiKiogVW5leHBlY3RlZCBFT0ZcbiIpOworICAgIHJldHVybiBQUl9BQkVORDsKKyAgICB9CisgIGlmICghSU5URVJBQ1RJVkUoaW5maWxlKSkgZnByaW50ZihvdXRmaWxlLCAiJXMiLCAoY2hhciAqKXApOworICB9CisKKy8qIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGRlbGltaXRlciBpcyBiYWNrc2xhc2gsIG1ha2UgdGhlIHBhdHRlcm4KK2VuZCB3aXRoIGJhY2tzbGFzaC4gVGhpcyBpcyBwdXJlbHkgdG8gcHJvdmlkZSBhIHdheSBvZiB0ZXN0aW5nIGZvciB0aGUgZXJyb3IKK21lc3NhZ2Ugd2hlbiBhIHBhdHRlcm4gZW5kcyB3aXRoIGJhY2tzbGFzaC4gKi8KKworaWYgKHBbMV0gPT0gJ1xcJykgKnArKyA9ICdcXCc7CisKKy8qIFRlcm1pbmF0ZSB0aGUgcGF0dGVybiBhdCB0aGUgZGVsaW1pdGVyLCBhbmQgY29tcHV0ZSB0aGUgbGVuZ3RoLiAqLworCisqcCsrID0gMDsKK3BhdGxlbiA9IHAgLSBidWZmZXIgLSAyOworCisvKiBMb29rIGZvciBtb2RpZmllcnMgYW5kIG9wdGlvbnMgYWZ0ZXIgdGhlIGZpbmFsIGRlbGltaXRlci4gKi8KKworaWYgKCFkZWNvZGVfbW9kaWZpZXJzKHAsIENUWF9QQVQsICZwYXRfcGF0Y3RsLCBOVUxMKSkgcmV0dXJuIFBSX1NLSVA7Cit1dGYgPSAocGF0X3BhdGN0bC5vcHRpb25zICYgUENSRTJfVVRGKSAhPSAwOworCisvKiBDaGVjayBmb3IgbXV0dWFsbHkgZXhjbHVzaXZlIG1vZGlmaWVycy4gQXQgcHJlc2VudCwgdGhlc2UgYXJlIGFsbCBpbiB0aGUKK2ZpcnN0IGNvbnRyb2wgd29yZC4gKi8KKworZm9yIChrID0gMDsgayA8IHNpemVvZihleGNsdXNpdmVfcGF0X2NvbnRyb2xzKS9zaXplb2YodWludDMyX3QpOyBrKyspCisgIHsKKyAgdWludDMyX3QgYyA9IHBhdF9wYXRjdGwuY29udHJvbCAmIGV4Y2x1c2l2ZV9wYXRfY29udHJvbHNba107CisgIGlmIChjICE9IDAgJiYgYyAhPSAoYyAmICh+YysxKSkpCisgICAgeworICAgIHNob3dfY29udHJvbHMoYywgMCwgIioqIE5vdCBhbGxvd2VkIHRvZ2V0aGVyOiIpOworICAgIGZwcmludGYob3V0ZmlsZSwgIlxuIik7CisgICAgcmV0dXJuIFBSX1NLSVA7CisgICAgfQorICB9CisKKy8qIEFzc3VtZSBmdWxsIEpJVCBjb21waWxlIGZvciBqaXR2ZXJpZnkgYW5kL29yIGppdGZhc3QgaWYgbm90aGluZyBlbHNlIHdhcworc3BlY2lmaWVkLiAqLworCitpZiAocGF0X3BhdGN0bC5qaXQgPT0gMCAmJgorICAgIChwYXRfcGF0Y3RsLmNvbnRyb2wgJiAoQ1RMX0pJVFZFUklGWXxDVExfSklURkFTVCkpICE9IDApCisgIHBhdF9wYXRjdGwuaml0ID0gNzsKKworLyogTm93IGNvcHkgdGhlIHBhdHRlcm4gdG8gcGJ1ZmZlcjggZm9yIHVzZSBpbiA4LWJpdCB0ZXN0aW5nIGFuZCBmb3IgcmVmbGVjdGluZworaW4gY2FsbG91dHMuIENvbnZlcnQgZnJvbSBoZXggaWYgcmVxdWlyZWQ7IHRoaXMgbXVzdCBuZWNlc3NhcmlseSBiZSBmZXdlcgorY2hhcmFjdGVycyBzbyB3aWxsIGFsd2F5cyBmaXQgaW4gcGJ1ZmZlcjguIEFsdGVybmF0aXZlbHksIHByb2Nlc3MgZm9yCityZXBldGl0aW9uIGlmIHJlcXVlc3RlZC4gKi8KKworaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfSEVYUEFUKSAhPSAwKQorICB7CisgIHVpbnQ4X3QgKnBwLCAqcHQ7CisgIHVpbnQzMl90IGMsIGQ7CisKKyAgcHQgPSBwYnVmZmVyODsKKyAgZm9yIChwcCA9IGJ1ZmZlciArIDE7ICpwcCAhPSAwOyBwcCsrKQorICAgIHsKKyAgICBpZiAoaXNzcGFjZSgqcHApKSBjb250aW51ZTsKKyAgICBjID0gdG91cHBlcigqcHArKyk7CisgICAgaWYgKCpwcCA9PSAwKQorICAgICAgeworICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogT2RkIG51bWJlciBvZiBkaWdpdHMgaW4gaGV4IHBhdHRlcm4uXG4iKTsKKyAgICAgIHJldHVybiBQUl9TS0lQOworICAgICAgfQorICAgIGQgPSB0b3VwcGVyKCpwcCk7CisgICAgaWYgKCFpc3hkaWdpdChjKSB8fCAhaXN4ZGlnaXQoZCkpCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBOb24taGV4LWRpZ2l0IGluIGhleCBwYXR0ZXJuLlxuIik7CisgICAgICByZXR1cm4gUFJfU0tJUDsKKyAgICAgIH0KKyAgICAqcHQrKyA9ICgoaXNkaWdpdChjKT8gKGMgLSAnMCcpIDogKGMgLSAnQScgKyAxMCkpIDw8IDQpICsKKyAgICAgICAgICAgICAoaXNkaWdpdChkKT8gKGQgLSAnMCcpIDogKGQgLSAnQScgKyAxMCkpOworICAgIH0KKyAgKnB0ID0gMDsKKyAgcGF0bGVuID0gcHQgLSBwYnVmZmVyODsKKyAgfQorCitlbHNlIGlmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX0VYUEFORCkgIT0gMCkKKyAgeworICB1aW50OF90ICpwcCwgKnB0OworCisgIHB0ID0gcGJ1ZmZlcjg7CisgIGZvciAocHAgPSBidWZmZXIgKyAxOyAqcHAgIT0gMDsgcHArKykKKyAgICB7CisgICAgdWludDhfdCAqcGMgPSBwcDsKKyAgICB1aW50MzJfdCBjb3VudCA9IDE7CisgICAgc2l6ZV90IGxlbmd0aCA9IDE7CisKKyAgICAvKiBDaGVjayBmb3IgcmVwbGljYXRpb24gc3ludGF4OyBpZiBub3QgZm91bmQsIHRoZSBkZWZhdWx0cyBqdXN0IHNldCB3aWxsCisgICAgcHJldmFpbCBhbmQgb25lIGNoYXJhY3RlciB3aWxsIGJlIGNvcGllZC4gKi8KKworICAgIGlmIChwcFswXSA9PSAnXFwnICYmIHBwWzFdID09ICdbJykKKyAgICAgIHsKKyAgICAgIHVpbnQ4X3QgKnBlOworICAgICAgZm9yIChwZSA9IHBwICsgMjsgKnBlICE9IDA7IHBlKyspCisgICAgICAgIHsKKyAgICAgICAgaWYgKHBlWzBdID09ICddJyAmJiBwZVsxXSA9PSAneycpCisgICAgICAgICAgeworICAgICAgICAgIHVpbnQzMl90IGNsZW4gPSBwZSAtIHBjIC0gMjsKKyAgICAgICAgICB1aW50MzJfdCBpID0gMDsKKyAgICAgICAgICBwZSArPSAyOworICAgICAgICAgIHdoaWxlIChpc2RpZ2l0KCpwZSkpIGkgPSBpICogMTAgKyAqcGUrKyAtICcwJzsKKyAgICAgICAgICBpZiAoKnBlID09ICd9JykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpID09IDApCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogWmVybyByZXBlYXQgbm90IGFsbG93ZWRcbiIpOworICAgICAgICAgICAgICByZXR1cm4gUFJfU0tJUDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgcGMgKz0gMjsKKyAgICAgICAgICAgIGNvdW50ID0gaTsKKyAgICAgICAgICAgIGxlbmd0aCA9IGNsZW47CisgICAgICAgICAgICBwcCA9IHBlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisKKyAgICAvKiBBZGQgdG8gb3V0cHV0LiBJZiB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbCBleHBhbmQgaXQuIFRoZSBmdW5jdGlvbiBmb3IKKyAgICBleHBhbmRpbmcgYnVmZmVycyBhbHdheXMga2VlcHMgYnVmZmVyIGFuZCBwYnVmZmVyOCBpbiBzdGVwIGFzIGZhciBhcyB0aGVpcgorICAgIHNpemUgZ29lcy4gKi8KKworICAgIHdoaWxlIChwdCArIGNvdW50ICogbGVuZ3RoID4gcGJ1ZmZlcjggKyBwYnVmZmVyOF9zaXplKQorICAgICAgeworICAgICAgc2l6ZV90IHBjX29mZnNldCA9IHBjIC0gYnVmZmVyOworICAgICAgc2l6ZV90IHBwX29mZnNldCA9IHBwIC0gYnVmZmVyOworICAgICAgc2l6ZV90IHB0X29mZnNldCA9IHB0IC0gcGJ1ZmZlcjg7CisgICAgICBleHBhbmRfaW5wdXRfYnVmZmVycygpOworICAgICAgcGMgPSBidWZmZXIgKyBwY19vZmZzZXQ7CisgICAgICBwcCA9IGJ1ZmZlciArIHBwX29mZnNldDsKKyAgICAgIHB0ID0gcGJ1ZmZlcjggKyBwdF9vZmZzZXQ7CisgICAgICB9CisKKyAgICB3aGlsZSAoY291bnQtLSA+IDApCisgICAgICB7CisgICAgICBtZW1jcHkocHQsIHBjLCBsZW5ndGgpOworICAgICAgcHQgKz0gbGVuZ3RoOworICAgICAgfQorICAgIH0KKworICAqcHQgPSAwOworICBwYXRsZW4gPSBwdCAtIHBidWZmZXI4OworCisgIGlmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX0lORk8pICE9IDApCisgICAgZnByaW50ZihvdXRmaWxlLCAiRXhwYW5kZWQ6ICVzXG4iLCBwYnVmZmVyOCk7CisgIH0KKworLyogTmVpdGhlciBoZXggbm9yIGV4cGFuZGVkLCBqdXN0IGNvcHkgdGhlIGlucHV0IHZlcmJhdGltLiAqLworCitlbHNlCisgIHsKKyAgc3RybmNweSgoY2hhciAqKXBidWZmZXI4LCAoY2hhciAqKShidWZmZXIrMSksIHBhdGxlbiArIDEpOworICB9CisKKy8qIFNvcnQgb3V0IGNoYXJhY3RlciB0YWJsZXMgKi8KKworaWYgKHBhdF9wYXRjdGwubG9jYWxlWzBdICE9IDApCisgIHsKKyAgaWYgKHBhdF9wYXRjdGwudGFibGVzX2lkICE9IDApCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIioqICdMb2NhbGUnIGFuZCAndGFibGVzJyBtdXN0IG5vdCBib3RoIGJlIHNldC5cbiIpOworICAgIHJldHVybiBQUl9TS0lQOworICAgIH0KKyAgaWYgKHNldGxvY2FsZShMQ19DVFlQRSwgKGNvbnN0IGNoYXIgKilwYXRfcGF0Y3RsLmxvY2FsZSkgPT0gTlVMTCkKKyAgICB7CisgICAgZnByaW50ZihvdXRmaWxlLCAiKiogRmFpbGVkIHRvIHNldCBsb2NhbGUgJyVzJ1xuIiwgcGF0X3BhdGN0bC5sb2NhbGUpOworICAgIHJldHVybiBQUl9TS0lQOworICAgIH0KKyAgaWYgKHN0cmNtcCgoY29uc3QgY2hhciAqKXBhdF9wYXRjdGwubG9jYWxlLCAoY29uc3QgY2hhciAqKWxvY2FsZV9uYW1lKSAhPSAwKQorICAgIHsKKyAgICBzdHJjcHkoKGNoYXIgKilsb2NhbGVfbmFtZSwgKGNoYXIgKilwYXRfcGF0Y3RsLmxvY2FsZSk7CisgICAgaWYgKGxvY2FsZV90YWJsZXMgIT0gTlVMTCkgZnJlZSgodm9pZCAqKWxvY2FsZV90YWJsZXMpOworICAgIFBDUkUyX01BS0VUQUJMRVMobG9jYWxlX3RhYmxlcyk7CisgICAgfQorICB1c2VfdGFibGVzID0gbG9jYWxlX3RhYmxlczsKKyAgfQorCitlbHNlIHN3aXRjaCAocGF0X3BhdGN0bC50YWJsZXNfaWQpCisgIHsKKyAgY2FzZSAwOiB1c2VfdGFibGVzID0gTlVMTDsgYnJlYWs7CisgIGNhc2UgMTogdXNlX3RhYmxlcyA9IHRhYmxlczE7IGJyZWFrOworICBjYXNlIDI6IHVzZV90YWJsZXMgPSB0YWJsZXMyOyBicmVhazsKKyAgZGVmYXVsdDoKKyAgZnByaW50ZihvdXRmaWxlLCAiKiogJ1RhYmxlcycgbXVzdCBzcGVjaWZ5IDAsIDEsIG9yIDIuXG4iKTsKKyAgcmV0dXJuIFBSX1NLSVA7CisgIH0KKworUENSRTJfU0VUX0NIQVJBQ1RFUl9UQUJMRVMocGF0X2NvbnRleHQsIHVzZV90YWJsZXMpOworCisvKiBTZXQgdXAgZm9yIHRoZSBzdGFja2d1YXJkIHRlc3QuICovCisKK2lmIChwYXRfcGF0Y3RsLnN0YWNrZ3VhcmRfdGVzdCAhPSAwKQorICB7CisgIFBDUkUyX1NFVF9DT01QSUxFX1JFQ1VSU0lPTl9HVUFSRChwYXRfY29udGV4dCwgc3RhY2tfZ3VhcmQsIE5VTEwpOworICB9CisKKy8qIEhhbmRsZSBjb21waWxpbmcgdmlhIHRoZSBQT1NJWCBpbnRlcmZhY2UsIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCB0aGUKK3RpbWluZywgc2hvd2luZywgb3IgZGVidWdnaW5nIG9wdGlvbnMsIG5vciB0aGUgYWJpbGl0eSB0byBwYXNzIG92ZXIKK2xvY2FsIGNoYXJhY3RlciB0YWJsZXMuIE5laXRoZXIgZG9lcyBpdCBoYXZlIDE2LWJpdCBvciAzMi1iaXQgc3VwcG9ydC4gKi8KKworaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfUE9TSVgpICE9IDApCisgIHsKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKKyAgaW50IHJjOworICBpbnQgY2ZsYWdzID0gMDsKKyAgY29uc3QgY2hhciAqbXNnID0gIioqIElnbm9yZWQgd2l0aCBQT1NJWCBpbnRlcmZhY2U6IjsKKyNlbmRpZgorCisgIGlmICh0ZXN0X21vZGUgIT0gOCkKKyAgICB7CisgICAgZnByaW50ZihvdXRmaWxlLCAiKiogVGhlIFBPU0lYIGludGVyZmFjZSBpcyBhdmFpbGFibGUgb25seSBpbiA4LWJpdCBtb2RlXG4iKTsKKyAgICByZXR1cm4gUFJfU0tJUDsKKyAgICB9CisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKKyAgLyogQ2hlY2sgZm9yIGZlYXR1cmVzIHRoYXQgdGhlIFBPU0lYIGludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0LiAqLworCisgIGlmIChwYXRfcGF0Y3RsLmxvY2FsZVswXSAhPSAwKSBwcm1zZygmbXNnLCAibG9jYWxlIik7CisgIGlmIChwYXRfcGF0Y3RsLnJlcGxhY2VtZW50WzBdICE9IDApIHBybXNnKCZtc2csICJyZXBsYWNlIik7CisgIGlmIChwYXRfcGF0Y3RsLnRhYmxlc19pZCAhPSAwKSBwcm1zZygmbXNnLCAidGFibGVzIik7CisgIGlmIChwYXRfcGF0Y3RsLnN0YWNrZ3VhcmRfdGVzdCAhPSAwKSBwcm1zZygmbXNnLCAic3RhY2tndWFyZCIpOworICBpZiAodGltZWl0ID4gMCkgcHJtc2coJm1zZywgInRpbWluZyIpOworICBpZiAocGF0X3BhdGN0bC5qaXQgIT0gMCkgcHJtc2coJm1zZywgIkpJVCIpOworCisgIGlmICgocGF0X3BhdGN0bC5vcHRpb25zICYgflBPU0lYX1NVUFBPUlRFRF9DT01QSUxFX09QVElPTlMpICE9IDApCisgICAgeworICAgIHNob3dfY29tcGlsZV9vcHRpb25zKAorICAgICAgcGF0X3BhdGN0bC5vcHRpb25zICYgflBPU0lYX1NVUFBPUlRFRF9DT01QSUxFX09QVElPTlMsIG1zZywgIiIpOworICAgIG1zZyA9ICIiOworICAgIH0KKyAgaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiB+UE9TSVhfU1VQUE9SVEVEX0NPTVBJTEVfQ09OVFJPTFMpICE9IDAgfHwKKyAgICAgIChwYXRfcGF0Y3RsLmNvbnRyb2wyICYgflBPU0lYX1NVUFBPUlRFRF9DT01QSUxFX0NPTlRST0xTMikgIT0gMCkKKyAgICB7CisgICAgc2hvd19jb250cm9scyhwYXRfcGF0Y3RsLmNvbnRyb2wgJiB+UE9TSVhfU1VQUE9SVEVEX0NPTVBJTEVfQ09OVFJPTFMsCisgICAgICBwYXRfcGF0Y3RsLmNvbnRyb2wyICYgflBPU0lYX1NVUFBPUlRFRF9DT01QSUxFX0NPTlRST0xTMiwgbXNnKTsKKyAgICBtc2cgPSAiIjsKKyAgICB9CisKKyAgaWYgKGxvY2FsX25ld2xpbmVfZGVmYXVsdCAhPSAwKSBwcm1zZygmbXNnLCAiI25ld2xpbmVfZGVmYXVsdCIpOworCisgIGlmIChtc2dbMF0gPT0gMCkgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKworICAvKiBUcmFuc2xhdGUgUENSRTIgb3B0aW9ucyB0byBQT1NJWCBvcHRpb25zIGFuZCB0aGVuIGNvbXBpbGUuIE9uIHN1Y2Nlc3MsIHNldAorICB1cCBhIG1hdGNoX2RhdGEgYmxvY2sgdG8gYmUgdXNlZCBmb3IgYWxsIG1hdGNoZXMuICovCisKKyAgaWYgKHV0ZikgY2ZsYWdzIHw9IFJFR19VVEY7CisgIGlmICgocGF0X3BhdGN0bC5vcHRpb25zICYgUENSRTJfVUNQKSAhPSAwKSBjZmxhZ3MgfD0gUkVHX1VDUDsKKyAgaWYgKChwYXRfcGF0Y3RsLm9wdGlvbnMgJiBQQ1JFMl9DQVNFTEVTUykgIT0gMCkgY2ZsYWdzIHw9IFJFR19JQ0FTRTsKKyAgaWYgKChwYXRfcGF0Y3RsLm9wdGlvbnMgJiBQQ1JFMl9NVUxUSUxJTkUpICE9IDApIGNmbGFncyB8PSBSRUdfTkVXTElORTsKKyAgaWYgKChwYXRfcGF0Y3RsLm9wdGlvbnMgJiBQQ1JFMl9ET1RBTEwpICE9IDApIGNmbGFncyB8PSBSRUdfRE9UQUxMOworICBpZiAoKHBhdF9wYXRjdGwub3B0aW9ucyAmIFBDUkUyX05PX0FVVE9fQ0FQVFVSRSkgIT0gMCkgY2ZsYWdzIHw9IFJFR19OT1NVQjsKKyAgaWYgKChwYXRfcGF0Y3RsLm9wdGlvbnMgJiBQQ1JFMl9VTkdSRUVEWSkgIT0gMCkgY2ZsYWdzIHw9IFJFR19VTkdSRUVEWTsKKworICByYyA9IHJlZ2NvbXAoJnByZWcsIChjaGFyICopcGJ1ZmZlcjgsIGNmbGFncyk7CisgIGlmIChyYyAhPSAwKSAgIC8qIEZhaWx1cmUgKi8KKyAgICB7CisgICAgc2l6ZV90IGJzaXplLCB1c2l6ZTsKKworICAgIHByZWcucmVfcGNyZTJfY29kZSA9IE5VTEw7ICAgICAvKiBJbiBjYXNlIHNvbWV0aGluZyB3YXMgbGVmdCBpbiB0aGVyZSAqLworICAgIHByZWcucmVfbWF0Y2hfZGF0YSA9IE5VTEw7CisKKyAgICBic2l6ZSA9IChwYXRfcGF0Y3RsLnJlZ2Vycm9yX2J1ZmZzaXplICE9IDApPworICAgICAgcGF0X3BhdGN0bC5yZWdlcnJvcl9idWZmc2l6ZSA6IHBidWZmZXI4X3NpemU7CisgICAgaWYgKGJzaXplICsgOCA8IHBidWZmZXI4X3NpemUpCisgICAgICBtZW1jcHkocGJ1ZmZlcjggKyBic2l6ZSwgIkRFQURCRUVGIiwgOCk7CisgICAgdXNpemUgPSByZWdlcnJvcihyYywgJnByZWcsIChjaGFyICopcGJ1ZmZlcjgsIGJzaXplKTsKKworICAgIGZwcmludGYob3V0ZmlsZSwgIkZhaWxlZDogUE9TSVggY29kZSAlZDogJXNcbiIsIHJjLCBwYnVmZmVyOCk7CisgICAgaWYgKHVzaXplID4gYnNpemUpCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiByZWdlcnJvcigpIG1lc3NhZ2UgdHJ1bmNhdGVkXG4iKTsKKyAgICAgIGlmIChtZW1jbXAocGJ1ZmZlcjggKyBic2l6ZSwgIkRFQURCRUVGIiwgOCkgIT0gMCkKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogcmVnZXJyb3IoKSBidWZmZXIgb3ZlcmZsb3dcbiIpOworICAgICAgfQorICAgIHJldHVybiBQUl9TS0lQOworICAgIH0KKyAgcmV0dXJuIFBSX09LOworI2VuZGlmICAvKiBTVVBQT1JUX1BDUkUyXzggKi8KKyAgfQorCisvKiBIYW5kbGUgY29tcGlsaW5nIHZpYSB0aGUgbmF0aXZlIGludGVyZmFjZS4gQ29udHJvbHMgdGhhdCBhY3QgbGF0ZXIgYXJlCitpZ25vcmVkIHdpdGggInB1c2giLiBSZXBsYWNlbWVudHMgYXJlIGxvY2tlZCBvdXQuICovCisKK2lmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX1BVU0gpICE9IDApCisgIHsKKyAgaWYgKHBhdF9wYXRjdGwucmVwbGFjZW1lbnRbMF0gIT0gMCkKKyAgICB7CisgICAgZnByaW50ZihvdXRmaWxlLCAiKiogUmVwbGFjZW1lbnQgdGV4dCBpcyBub3Qgc3VwcG9ydGVkIHdpdGggJ3B1c2gnLlxuIik7CisgICAgcmV0dXJuIFBSX09LOworICAgIH0KKyAgaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiB+UFVTSF9TVVBQT1JURURfQ09NUElMRV9DT05UUk9MUykgIT0gMCB8fAorICAgICAgKHBhdF9wYXRjdGwuY29udHJvbDIgJiB+UFVTSF9TVVBQT1JURURfQ09NUElMRV9DT05UUk9MUzIpICE9IDApCisgICAgeworICAgIHNob3dfY29udHJvbHMocGF0X3BhdGN0bC5jb250cm9sICYgflBVU0hfU1VQUE9SVEVEX0NPTVBJTEVfQ09OVFJPTFMsCisgICAgICAgICAgICAgICAgICBwYXRfcGF0Y3RsLmNvbnRyb2wyICYgflBVU0hfU1VQUE9SVEVEX0NPTVBJTEVfQ09OVFJPTFMyLAorICAgICAgIioqIElnbm9yZWQgd2hlbiBjb21waWxlZCBwYXR0ZXJuIGlzIHN0YWNrZWQgd2l0aCAncHVzaCc6Iik7CisgICAgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKyAgICB9CisgIGlmICgocGF0X3BhdGN0bC5jb250cm9sICYgUFVTSF9DT01QSUxFX09OTFlfQ09OVFJPTFMpICE9IDAgfHwKKyAgICAgIChwYXRfcGF0Y3RsLmNvbnRyb2wyICYgUFVTSF9DT01QSUxFX09OTFlfQ09OVFJPTFMyKSAhPSAwKQorICAgIHsKKyAgICBzaG93X2NvbnRyb2xzKHBhdF9wYXRjdGwuY29udHJvbCAmIFBVU0hfQ09NUElMRV9PTkxZX0NPTlRST0xTLAorICAgICAgICAgICAgICAgICAgcGF0X3BhdGN0bC5jb250cm9sMiAmIFBVU0hfQ09NUElMRV9PTkxZX0NPTlRST0xTMiwKKyAgICAgICIqKiBBcHBsaWVzIG9ubHkgdG8gY29tcGlsZSB3aGVuIHBhdHRlcm4gaXMgc3RhY2tlZCB3aXRoICdwdXNoJzoiKTsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworICAgIH0KKyAgfQorCisvKiBDb252ZXJ0IHRoZSBpbnB1dCBpbiBub24tOC1iaXQgbW9kZXMuICovCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKK2lmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgZXJyb3Jjb2RlID0gMDsKKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgoraWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgZXJyb3Jjb2RlID0gdG8xNihwYnVmZmVyOCwgdXRmLCAmcGF0bGVuKTsKKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgoraWYgKHRlc3RfbW9kZSA9PSBQQ1JFMzJfTU9ERSkgZXJyb3Jjb2RlID0gdG8zMihwYnVmZmVyOCwgdXRmLCAmcGF0bGVuKTsKKyNlbmRpZgorCitzd2l0Y2goZXJyb3Jjb2RlKQorICB7CisgIGNhc2UgLTE6CisgIGZwcmludGYob3V0ZmlsZSwgIioqIEZhaWxlZDogaW52YWxpZCBVVEYtOCBzdHJpbmcgY2Fubm90IGJlICIKKyAgICAiY29udmVydGVkIHRvICVkLWJpdCBzdHJpbmdcbiIsICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpPyAxNjozMik7CisgIHJldHVybiBQUl9TS0lQOworCisgIGNhc2UgLTI6CisgIGZwcmludGYob3V0ZmlsZSwgIioqIEZhaWxlZDogY2hhcmFjdGVyIHZhbHVlIGdyZWF0ZXIgdGhhbiAweDEwZmZmZiAiCisgICAgImNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gVVRGXG4iKTsKKyAgcmV0dXJuIFBSX1NLSVA7CisKKyAgY2FzZSAtMzoKKyAgZnByaW50ZihvdXRmaWxlLCAiKiogRmFpbGVkOiBjaGFyYWN0ZXIgdmFsdWUgZ3JlYXRlciB0aGFuIDB4ZmZmZiAiCisgICAgImNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gMTYtYml0IGluIG5vbi1VVEYgbW9kZVxuIik7CisgIHJldHVybiBQUl9TS0lQOworCisgIGRlZmF1bHQ6CisgIGJyZWFrOworICB9CisKKy8qIFRoZSBwYXR0ZXJuIGlzIG5vdyBpbiBwYnVmZmVyWzh8MTZ8MzJdLCB3aXRoIHRoZSBsZW5ndGggaW4gcGF0bGVuLiBCeQorZGVmYXVsdCwgaG93ZXZlciwgd2UgcGFzcyBhIHplcm8tdGVybWluYXRlZCBwYXR0ZXJuLiBUaGUgbGVuZ3RoIGlzIHBhc3NlZCBvbmx5CitpZiB3ZSBoYWQgYSBoZXggcGF0dGVybi4gKi8KKworaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfSEVYUEFUKSA9PSAwKSBwYXRsZW4gPSBQQ1JFMl9aRVJPX1RFUk1JTkFURUQ7CisKKy8qIElmICNuZXdsaW5lX2RlZmF1bHQgaGFzIGJlZW4gdXNlZCBhbmQgdGhlIGxpYnJhcnkgd2FzIG5vdCBjb21waWxlZCB3aXRoIGFuCithcHByb3ByaWF0ZSBkZWZhdWx0IG5ld2xpbmUgc2V0dGluZywgbG9jYWxfbmV3bGluZV9kZWZhdWx0IHdpbGwgYmUgbm9uLXplcm8uIFdlCit1c2UgdGhpcyBpZiB0aGVyZSBpcyBubyBleHBsaWNpdCBuZXdsaW5lIG1vZGlmaWVyLiAqLworCitpZiAoKHBhdF9wYXRjdGwuY29udHJvbCAmIENUTF9OTF9TRVQpID09IDAgJiYgbG9jYWxfbmV3bGluZV9kZWZhdWx0ICE9IDApCisgIHsKKyAgU0VURkxEKHBhdF9jb250ZXh0LCBuZXdsaW5lX2NvbnZlbnRpb24sIGxvY2FsX25ld2xpbmVfZGVmYXVsdCk7CisgIH0KKworLyogVGhlIG51bGxjb250ZXh0IG1vZGlmaWVyIGlzIHVzZWQgdG8gdGVzdCBjYWxsaW5nIHBjcmUyX2NvbXBpbGUoKSB3aXRoIGEgTlVMTAorY29udGV4dC4gKi8KKwordXNlX3BhdF9jb250ZXh0ID0gKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfTlVMTENPTlRFWFQpICE9IDApPworICBOVUxMIDogUFRSKHBhdF9jb250ZXh0KTsKKworLyogQ29tcGlsZSBtYW55IHRpbWVzIHdoZW4gdGltaW5nLiAqLworCitpZiAodGltZWl0ID4gMCkKKyAgeworICByZWdpc3RlciBpbnQgaTsKKyAgY2xvY2tfdCB0aW1lX3Rha2VuID0gMDsKKyAgZm9yIChpID0gMDsgaSA8IHRpbWVpdDsgaSsrKQorICAgIHsKKyAgICBjbG9ja190IHN0YXJ0X3RpbWUgPSBjbG9jaygpOworICAgIFBDUkUyX0NPTVBJTEUoY29tcGlsZWRfY29kZSwgcGJ1ZmZlciwgcGF0bGVuLAorICAgICAgcGF0X3BhdGN0bC5vcHRpb25zfGZvcmJpZF91dGYsICZlcnJvcmNvZGUsICZlcnJvcm9mZnNldCwgdXNlX3BhdF9jb250ZXh0KTsKKyAgICB0aW1lX3Rha2VuICs9IGNsb2NrKCkgLSBzdGFydF90aW1lOworICAgIGlmIChURVNUKGNvbXBpbGVkX2NvZGUsICE9LCBOVUxMKSkKKyAgICAgIHsgU1VCMShwY3JlMl9jb2RlX2ZyZWUsIGNvbXBpbGVkX2NvZGUpOyB9CisgICAgfQorICB0b3RhbF9jb21waWxlX3RpbWUgKz0gdGltZV90YWtlbjsKKyAgZnByaW50ZihvdXRmaWxlLCAiQ29tcGlsZSB0aW1lICUuNGYgbWlsbGlzZWNvbmRzXG4iLAorICAgICgoKGRvdWJsZSl0aW1lX3Rha2VuICogMTAwMC4wKSAvIChkb3VibGUpdGltZWl0KSAvCisgICAgICAoZG91YmxlKUNMT0NLU19QRVJfU0VDKTsKKyAgfQorCisvKiBBIGZpbmFsIGNvbXBpbGUgdGhhdCBpcyB1c2VkICJmb3IgcmVhbCIuICovCisKK1BDUkUyX0NPTVBJTEUoY29tcGlsZWRfY29kZSwgcGJ1ZmZlciwgcGF0bGVuLCBwYXRfcGF0Y3RsLm9wdGlvbnN8Zm9yYmlkX3V0ZiwKKyAgJmVycm9yY29kZSwgJmVycm9yb2Zmc2V0LCB1c2VfcGF0X2NvbnRleHQpOworCisvKiBDb21waWxhdGlvbiBmYWlsZWQ7IGdvIGJhY2sgZm9yIGFub3RoZXIgcmUsIHNraXBwaW5nIHRvIGJsYW5rIGxpbmUKK2lmIG5vbi1pbnRlcmFjdGl2ZS4gKi8KKworaWYgKFRFU1QoY29tcGlsZWRfY29kZSwgPT0sIE5VTEwpKQorICB7CisgIGludCBsZW47CisgIGZwcmludGYob3V0ZmlsZSwgIkZhaWxlZDogZXJyb3IgJWQgYXQgb2Zmc2V0ICVkOiAiLCBlcnJvcmNvZGUsCisgICAgKGludCllcnJvcm9mZnNldCk7CisgIFBDUkUyX0dFVF9FUlJPUl9NRVNTQUdFKGxlbiwgZXJyb3Jjb2RlLCBwYnVmZmVyKTsKKyAgUENIQVJTVihDQVNUVkFSKHZvaWQgKiwgcGJ1ZmZlciksIDAsIGxlbiwgRkFMU0UsIG91dGZpbGUpOworICBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworICByZXR1cm4gUFJfU0tJUDsKKyAgfQorCisvKiBJZiBmb3JiaWRfdXRmIGlzIG5vbi16ZXJvLCB3ZSBhcmUgcnVubmluZyBhIG5vbi1VVEYgdGVzdC4gVVRGIGFuZCBVQ1AgYXJlCitsb2NrZWQgb3V0IGF0IGNvbXBpbGUgdGltZSwgYnV0IHdlIG11c3QgYWxzbyBjaGVjayBmb3Igb2NjdXJyZW5jZXMgb2YgXFAsIFxwLAorYW5kIFxYLCB3aGljaCBhcmUgb25seSBzdXBwb3J0ZWQgd2hlbiBVbmljb2RlIGlzIHN1cHBvcnRlZC4gKi8KKworaWYgKGZvcmJpZF91dGYgIT0gMCkKKyAgeworICBpZiAoKEZMRChjb21waWxlZF9jb2RlLCBmbGFncykgJiBQQ1JFMl9IQVNCS1BPUlgpICE9IDApCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIioqIFxcUCwgXFxwLCBhbmQgXFxYIGFyZSBub3QgYWxsb3dlZCBhZnRlciB0aGUgIgorICAgICAgIiNmb3JiaWRfdXRmIGNvbW1hbmRcbiIpOworICAgIHJldHVybiBQUl9TS0lQOworICAgIH0KKyAgfQorCisvKiBSZW1lbWJlciB0aGUgbWF4aW11bSBsb29rYmVoaW5kLCBmb3IgcGFydGlhbCBtYXRjaGluZy4gKi8KKworaWYgKHBhdHRlcm5faW5mbyhQQ1JFMl9JTkZPX01BWExPT0tCRUhJTkQsICZtYXhsb29rYmVoaW5kLCBGQUxTRSkgIT0gMCkKKyAgcmV0dXJuIFBSX0FCRU5EOworCisvKiBDYWxsIHRoZSBKSVQgY29tcGlsZXIgaWYgcmVxdWVzdGVkLiBXaGVuIHRpbWluZywgd2UgbXVzdCBmcmVlIGFuZCByZWNvbXBpbGUKK3RoZSBwYXR0ZXJuIGVhY2ggdGltZSBiZWNhdXNlIHRoYXQgaXMgdGhlIG9ubHkgd2F5IHRvIGZyZWUgdGhlIEpJVCBjb21waWxlZAorY29kZS4gV2Uga25vdyB0aGF0IGNvbXBpbGF0aW9uIHdpbGwgYWx3YXlzIHN1Y2NlZWQuICovCisKK2lmIChwYXRfcGF0Y3RsLmppdCAhPSAwKQorICB7CisgIGlmICh0aW1laXQgPiAwKQorICAgIHsKKyAgICByZWdpc3RlciBpbnQgaTsKKyAgICBjbG9ja190IHRpbWVfdGFrZW4gPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCB0aW1laXQ7IGkrKykKKyAgICAgIHsKKyAgICAgIGNsb2NrX3Qgc3RhcnRfdGltZTsKKyAgICAgIFNVQjEocGNyZTJfY29kZV9mcmVlLCBjb21waWxlZF9jb2RlKTsKKyAgICAgIFBDUkUyX0NPTVBJTEUoY29tcGlsZWRfY29kZSwgcGJ1ZmZlciwgcGF0bGVuLAorICAgICAgICBwYXRfcGF0Y3RsLm9wdGlvbnN8Zm9yYmlkX3V0ZiwgJmVycm9yY29kZSwgJmVycm9yb2Zmc2V0LAorICAgICAgICB1c2VfcGF0X2NvbnRleHQpOworICAgICAgc3RhcnRfdGltZSA9IGNsb2NrKCk7CisgICAgICBQQ1JFMl9KSVRfQ09NUElMRShqaXRyYyxjb21waWxlZF9jb2RlLCBwYXRfcGF0Y3RsLmppdCk7CisgICAgICB0aW1lX3Rha2VuICs9IGNsb2NrKCkgLSBzdGFydF90aW1lOworICAgICAgfQorICAgIHRvdGFsX2ppdF9jb21waWxlX3RpbWUgKz0gdGltZV90YWtlbjsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJKSVQgY29tcGlsZSAgJS40ZiBtaWxsaXNlY29uZHNcbiIsCisgICAgICAoKChkb3VibGUpdGltZV90YWtlbiAqIDEwMDAuMCkgLyAoZG91YmxlKXRpbWVpdCkgLworICAgICAgICAoZG91YmxlKUNMT0NLU19QRVJfU0VDKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgUENSRTJfSklUX0NPTVBJTEUoaml0cmMsIGNvbXBpbGVkX2NvZGUsIHBhdF9wYXRjdGwuaml0KTsKKyAgICB9CisgIH0KKworLyogSWYgYW4gZXhwbGljaXQgbmV3bGluZSBtb2RpZmllciB3YXMgZ2l2ZW4sIHNldCB0aGUgaW5mb3JtYXRpb24gZmxhZyBpbiB0aGUKK3BhdHRlcm4gc28gdGhhdCBpdCBpcyBwcmVzZXJ2ZWQgb3ZlciBwdXNoL3BvcC4gKi8KKworaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfTkxfU0VUKSAhPSAwKQorICB7CisgIFNFVEZMRChjb21waWxlZF9jb2RlLCBmbGFncywgRkxEKGNvbXBpbGVkX2NvZGUsIGZsYWdzKSB8IFBDUkUyX05MX1NFVCk7CisgIH0KKworLyogT3V0cHV0IGNvZGUgc2l6ZSBhbmQgb3RoZXIgaW5mb3JtYXRpb24gaWYgcmVxdWVzdGVkLiAqLworCitpZiAoKHBhdF9wYXRjdGwuY29udHJvbCAmIENUTF9NRU1PUlkpICE9IDApIHNob3dfbWVtb3J5X2luZm8oKTsKK2lmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX0FOWUlORk8pICE9IDApCisgIHsKKyAgaW50IHJjID0gc2hvd19wYXR0ZXJuX2luZm8oKTsKKyAgaWYgKHJjICE9IFBSX09LKSByZXR1cm4gcmM7CisgIH0KKworLyogVGhlICJwdXNoIiBjb250cm9sIHJlcXVlc3RzIHRoYXQgdGhlIGNvbXBpbGVkIHBhdHRlcm4gYmUgcmVtZW1iZXJlZCBvbiBhCitzdGFjay4gVGhpcyBpcyBtYWlubHkgZm9yIHRlc3RpbmcgdGhlIHNlcmlhbGl6YXRpb24gZnVuY3Rpb25hbGl0eS4gKi8KKworaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfUFVTSCkgIT0gMCkKKyAgeworICBpZiAocGF0c3RhY2tuZXh0ID49IFBBVFNUQUNLU0laRSkKKyAgICB7CisgICAgZnByaW50ZihvdXRmaWxlLCAiKiogVG9vIG1hbnkgcHVzaGVkIHBhdHRlcm5zIChtYXggJWQpXG4iLCBQQVRTVEFDS1NJWkUpOworICAgIHJldHVybiBQUl9BQkVORDsKKyAgICB9CisgIHBhdHN0YWNrW3BhdHN0YWNrbmV4dCsrXSA9IFBUUihjb21waWxlZF9jb2RlKTsKKyAgU0VUKGNvbXBpbGVkX2NvZGUsIE5VTEwpOworICB9CisKK3JldHVybiBQUl9PSzsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICBDaGVjayBtYXRjaCBvciByZWN1cnNpb24gbGltaXQgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAorY2hlY2tfbWF0Y2hfbGltaXQodWludDhfdCAqcHAsIHNpemVfdCB1bGVuLCBpbnQgZXJybnVtYmVyLCBjb25zdCBjaGFyICptc2cpCit7CitpbnQgY2FwY291bnQ7Cit1aW50MzJfdCBtaW4gPSAwOwordWludDMyX3QgbWlkID0gNjQ7Cit1aW50MzJfdCBtYXggPSBVSU5UMzJfTUFYOworCitQQ1JFMl9TRVRfTUFUQ0hfTElNSVQoZGF0X2NvbnRleHQsIG1heCk7CitQQ1JFMl9TRVRfUkVDVVJTSU9OX0xJTUlUKGRhdF9jb250ZXh0LCBtYXgpOworCitmb3IgKDs7KQorICB7CisgIGlmIChlcnJudW1iZXIgPT0gUENSRTJfRVJST1JfTUFUQ0hMSU1JVCkKKyAgICB7CisgICAgUENSRTJfU0VUX01BVENIX0xJTUlUKGRhdF9jb250ZXh0LCBtaWQpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBQQ1JFMl9TRVRfUkVDVVJTSU9OX0xJTUlUKGRhdF9jb250ZXh0LCBtaWQpOworICAgIH0KKworICBpZiAoKHBhdF9wYXRjdGwuY29udHJvbCAmIENUTF9KSVRGQVNUKSAhPSAwKQorICAgIFBDUkUyX0pJVF9NQVRDSChjYXBjb3VudCwgY29tcGlsZWRfY29kZSwgcHAsIHVsZW4sIGRhdF9kYXRjdGwub2Zmc2V0LAorICAgICAgZGF0X2RhdGN0bC5vcHRpb25zLCBtYXRjaF9kYXRhLCBQVFIoZGF0X2NvbnRleHQpKTsKKyAgZWxzZQorICAgIFBDUkUyX01BVENIKGNhcGNvdW50LCBjb21waWxlZF9jb2RlLCBwcCwgdWxlbiwgZGF0X2RhdGN0bC5vZmZzZXQsCisgICAgICBkYXRfZGF0Y3RsLm9wdGlvbnMsIG1hdGNoX2RhdGEsIFBUUihkYXRfY29udGV4dCkpOworCisgIGlmIChjYXBjb3VudCA9PSBlcnJudW1iZXIpCisgICAgeworICAgIG1pbiA9IG1pZDsKKyAgICBtaWQgPSAobWlkID09IG1heCAtIDEpPyBtYXggOiAobWF4ICE9IFVJTlQzMl9NQVgpPyAobWluICsgbWF4KS8yIDogbWlkKjI7CisgICAgfQorICBlbHNlIGlmIChjYXBjb3VudCA+PSAwIHx8CisgICAgICAgICAgIGNhcGNvdW50ID09IFBDUkUyX0VSUk9SX05PTUFUQ0ggfHwKKyAgICAgICAgICAgY2FwY291bnQgPT0gUENSRTJfRVJST1JfUEFSVElBTCkKKyAgICB7CisgICAgaWYgKG1pZCA9PSBtaW4gKyAxKQorICAgICAgeworICAgICAgZnByaW50ZihvdXRmaWxlLCAiTWluaW11bSAlcyBsaW1pdCA9ICVkXG4iLCBtc2csIG1pZCk7CisgICAgICBicmVhazsKKyAgICAgIH0KKyAgICBtYXggPSBtaWQ7CisgICAgbWlkID0gKG1pbiArIG1pZCkvMjsKKyAgICB9CisgIGVsc2UgYnJlYWs7ICAgIC8qIFNvbWUgb3RoZXIgZXJyb3IgKi8KKyAgfQorCityZXR1cm4gY2FwY291bnQ7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgQ2FsbG91dCBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIENhbGxlZCBmcm9tIGEgUENSRTIgbGlicmFyeSBhcyBhIHJlc3VsdCBvZiB0aGUgKD9DKSBpdGVtLiBXZSBwcmludCBvdXQgd2hlcmUKK3dlIGFyZSBpbiB0aGUgbWF0Y2guIFlpZWxkIHplcm8gdW5sZXNzIG1vcmUgY2FsbG91dHMgdGhhbiB0aGUgZmFpbCBjb3VudCwgb3IKK3RoZSBjYWxsb3V0IGRhdGEgaXMgbm90IHplcm8uIFRoZSBvbmx5IGRpZmZlcmVuY2VzIGluIHRoZSBjYWxsb3V0IGJsb2NrIGZvcgorZGlmZmVyZW50IGNvZGUgdW5pdCB3aWR0aHMgYXJlIHRoYXQgdGhlIHBvaW50ZXJzIHRvIHRoZSBzdWJqZWN0LCB0aGUgbW9zdAorcmVjZW50IE1BUkssIGFuZCBhIGNhbGxvdXQgYXJndW1lbnQgc3RyaW5nIHBvaW50IHRvIHN0cmluZ3Mgb2YgdGhlIGFwcHJvcHJpYXRlCit3aWR0aC4gQ2FzdHMgY2FuIGJlIHVzZWQgdG8gZGVhbCB3aXRoIHRoaXMuCisKK0FyZ3VtZW50OiAgYSBwb2ludGVyIHRvIGEgY2FsbG91dCBibG9jaworUmV0dXJuOgorKi8KKworc3RhdGljIGludAorY2FsbG91dF9mdW5jdGlvbihwY3JlMl9jYWxsb3V0X2Jsb2NrXzggKmNiLCB2b2lkICpjYWxsb3V0X2RhdGFfcHRyKQorewordWludDMyX3QgaSwgcHJlX3N0YXJ0LCBwb3N0X3N0YXJ0LCBzdWJqZWN0X2xlbmd0aDsKK0JPT0wgdXRmID0gKEZMRChjb21waWxlZF9jb2RlLCBvdmVyYWxsX29wdGlvbnMpICYgUENSRTJfVVRGKSAhPSAwOworQk9PTCBjYWxsb3V0X2NhcHR1cmUgPSAoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX0NBTExPVVRfQ0FQVFVSRSkgIT0gMDsKKworLyogVGhpcyBGSUxFIGlzIHVzZWQgZm9yIGVjaG9pbmcgdGhlIHN1YmplY3QuIFRoaXMgaXMgZG9uZSBvbmx5IG9uY2UgaW4gc2ltcGxlCitjYXNlcy4gKi8KKworRklMRSAqZiA9IChmaXJzdF9jYWxsb3V0IHx8IGNhbGxvdXRfY2FwdHVyZSB8fCBjYi0+Y2FsbG91dF9zdHJpbmcgIT0gTlVMTCk/CisgIG91dGZpbGUgOiBOVUxMOworCisvKiBGb3IgYSBjYWxsb3V0IHdpdGggYSBzdHJpbmcgYXJndW1lbnQsIHNob3cgdGhlIHN0cmluZyBmaXJzdCBiZWNhdXNlIHRoZXJlCitpc24ndCBhIHRpZHkgd2F5IHRvIGZpdCBpdCBpbiB0aGUgcmVzdCBvZiB0aGUgZGF0YS4gKi8KKworaWYgKGNiLT5jYWxsb3V0X3N0cmluZyAhPSBOVUxMKQorICB7CisgIHVpbnQzMl90IGRlbGltaXRlciA9IENPREVfVU5JVChjYi0+Y2FsbG91dF9zdHJpbmcsIC0xKTsKKyAgZnByaW50ZihvdXRmaWxlLCAiQ2FsbG91dCAoJWx1KTogJWMiLAorICAgICh1bnNpZ25lZCBsb25nIGludCljYi0+Y2FsbG91dF9zdHJpbmdfb2Zmc2V0LCBkZWxpbWl0ZXIpOworICBQQ0hBUlNWKGNiLT5jYWxsb3V0X3N0cmluZywgMCwKKyAgICBjYi0+Y2FsbG91dF9zdHJpbmdfbGVuZ3RoLCB1dGYsIG91dGZpbGUpOworICBmb3IgKGkgPSAwOyBjYWxsb3V0X3N0YXJ0X2RlbGltc1tpXSAhPSAwOyBpKyspCisgICAgaWYgKGRlbGltaXRlciA9PSBjYWxsb3V0X3N0YXJ0X2RlbGltc1tpXSkKKyAgICAgIHsKKyAgICAgIGRlbGltaXRlciA9IGNhbGxvdXRfZW5kX2RlbGltc1tpXTsKKyAgICAgIGJyZWFrOworICAgICAgfQorICBmcHJpbnRmKG91dGZpbGUsICIlYyIsIGRlbGltaXRlcik7CisgIGlmICghY2FsbG91dF9jYXB0dXJlKSBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworICB9CisKKy8qIFNob3cgY2FwdHVyZWQgc3RyaW5ncyBpZiByZXF1aXJlZCAqLworCitpZiAoY2FsbG91dF9jYXB0dXJlKQorICB7CisgIGlmIChjYi0+Y2FsbG91dF9zdHJpbmcgPT0gTlVMTCkKKyAgICBmcHJpbnRmKG91dGZpbGUsICJDYWxsb3V0ICVkOiIsIGNiLT5jYWxsb3V0X251bWJlcik7CisgIGZwcmludGYob3V0ZmlsZSwgIiBsYXN0IGNhcHR1cmUgPSAlZFxuIiwgY2ItPmNhcHR1cmVfbGFzdCk7CisgIGZvciAoaSA9IDA7IGkgPCBjYi0+Y2FwdHVyZV90b3AgKiAyOyBpICs9IDIpCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIiUyZDogIiwgaS8yKTsKKyAgICBpZiAoY2ItPm9mZnNldF92ZWN0b3JbaV0gPT0gUENSRTJfVU5TRVQpCisgICAgICBmcHJpbnRmKG91dGZpbGUsICI8dW5zZXQ+Iik7CisgICAgZWxzZQorICAgICAgeworICAgICAgUENIQVJTVihjYi0+c3ViamVjdCwgY2ItPm9mZnNldF92ZWN0b3JbaV0sCisgICAgICAgIGNiLT5vZmZzZXRfdmVjdG9yW2krMV0gLSBjYi0+b2Zmc2V0X3ZlY3RvcltpXSwgdXRmLCBmKTsKKyAgICAgIH0KKyAgICBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworICAgIH0KKyAgfQorCisvKiBSZS1wcmludCB0aGUgc3ViamVjdCBpbiBjYW5vbmljYWwgZm9ybSwgdGhlIGZpcnN0IHRpbWUgb3IgaWYgZ2l2aW5nIGZ1bGwKK2RhdGFpbHMuIE9uIHN1YnNlcXVlbnQgY2FsbHMgaW4gdGhlIHNhbWUgbWF0Y2gsIHdlIHVzZSBwY2hhcnMganVzdCB0byBmaW5kIHRoZQorcHJpbnRlZCBsZW5ndGhzIG9mIHRoZSBzdWJzdHJpbmdzLiAqLworCitpZiAoZiAhPSBOVUxMKSBmcHJpbnRmKGYsICItLS0+Iik7CisKK1BDSEFSUyhwcmVfc3RhcnQsIGNiLT5zdWJqZWN0LCAwLCBjYi0+c3RhcnRfbWF0Y2gsIHV0ZiwgZik7CisKK1BDSEFSUyhwb3N0X3N0YXJ0LCBjYi0+c3ViamVjdCwgY2ItPnN0YXJ0X21hdGNoLAorICBjYi0+Y3VycmVudF9wb3NpdGlvbiAtIGNiLT5zdGFydF9tYXRjaCwgdXRmLCBmKTsKKworUENIQVJTKHN1YmplY3RfbGVuZ3RoLCBjYi0+c3ViamVjdCwgMCwgY2ItPnN1YmplY3RfbGVuZ3RoLCB1dGYsIE5VTEwpOworCitQQ0hBUlNWKGNiLT5zdWJqZWN0LCBjYi0+Y3VycmVudF9wb3NpdGlvbiwKKyAgY2ItPnN1YmplY3RfbGVuZ3RoIC0gY2ItPmN1cnJlbnRfcG9zaXRpb24sIHV0ZiwgZik7CisKK2lmIChmICE9IE5VTEwpIGZwcmludGYoZiwgIlxuIik7CisKKy8qIEZvciBhdXRvbWF0aWMgY2FsbG91dHMsIHNob3cgdGhlIHBhdHRlcm4gb2Zmc2V0LiBPdGhlcndpc2UsIGZvciBhIG51bWVyaWNhbAorY2FsbG91dCB3aG9zZSBudW1iZXIgaGFzIG5vdCBhbHJlYWR5IGJlZW4gc2hvd24gd2l0aCBjYXB0dXJlZCBzdHJpbmdzLCBzaG93IHRoZQorbnVtYmVyIGhlcmUuIEEgY2FsbG91dCB3aXRoIGEgc3RyaW5nIGFyZ3VtZW50IGhhcyBiZWVuIGRpc3BsYXllZCBhYm92ZS4gKi8KKworaWYgKGNiLT5jYWxsb3V0X251bWJlciA9PSAyNTUpCisgIHsKKyAgZnByaW50ZihvdXRmaWxlLCAiJSszZCAiLCAoaW50KWNiLT5wYXR0ZXJuX3Bvc2l0aW9uKTsKKyAgaWYgKGNiLT5wYXR0ZXJuX3Bvc2l0aW9uID4gOTkpIGZwcmludGYob3V0ZmlsZSwgIlxuICAgICIpOworICB9CitlbHNlCisgIHsKKyAgaWYgKGNhbGxvdXRfY2FwdHVyZSB8fCBjYi0+Y2FsbG91dF9zdHJpbmcgIT0gTlVMTCkgZnByaW50ZihvdXRmaWxlLCAiICAgICIpOworICAgIGVsc2UgZnByaW50ZihvdXRmaWxlLCAiJTNkICIsIGNiLT5jYWxsb3V0X251bWJlcik7CisgIH0KKworLyogTm93IHNob3cgcG9zaXRpb24gaW5kaWNhdG9ycyAqLworCitmb3IgKGkgPSAwOyBpIDwgcHJlX3N0YXJ0OyBpKyspIGZwcmludGYob3V0ZmlsZSwgIiAiKTsKK2ZwcmludGYob3V0ZmlsZSwgIl4iKTsKKworaWYgKHBvc3Rfc3RhcnQgPiAwKQorICB7CisgIGZvciAoaSA9IDA7IGkgPCBwb3N0X3N0YXJ0IC0gMTsgaSsrKSBmcHJpbnRmKG91dGZpbGUsICIgIik7CisgIGZwcmludGYob3V0ZmlsZSwgIl4iKTsKKyAgfQorCitmb3IgKGkgPSAwOyBpIDwgc3ViamVjdF9sZW5ndGggLSBwcmVfc3RhcnQgLSBwb3N0X3N0YXJ0ICsgNDsgaSsrKQorICBmcHJpbnRmKG91dGZpbGUsICIgIik7CisKK2ZwcmludGYob3V0ZmlsZSwgIiUuKnMiLAorICAoaW50KSgoY2ItPm5leHRfaXRlbV9sZW5ndGggPT0gMCk/IDEgOiBjYi0+bmV4dF9pdGVtX2xlbmd0aCksCisgIHBidWZmZXI4ICsgY2ItPnBhdHRlcm5fcG9zaXRpb24pOworCitmcHJpbnRmKG91dGZpbGUsICJcbiIpOworZmlyc3RfY2FsbG91dCA9IEZBTFNFOworCitpZiAoY2ItPm1hcmsgIT0gbGFzdF9jYWxsb3V0X21hcmspCisgIHsKKyAgaWYgKGNiLT5tYXJrID09IE5VTEwpCisgICAgZnByaW50ZihvdXRmaWxlLCAiTGF0ZXN0IE1hcms6IDx1bnNldD5cbiIpOworICBlbHNlCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIkxhdGVzdCBNYXJrOiAiKTsKKyAgICBQQ0hBUlNWKGNiLT5tYXJrLCAwLCAtMSwgdXRmLCBvdXRmaWxlKTsKKyAgICBwdXRjKCdcbicsIG91dGZpbGUpOworICAgIH0KKyAgbGFzdF9jYWxsb3V0X21hcmsgPSBjYi0+bWFyazsKKyAgfQorCitpZiAoY2FsbG91dF9kYXRhX3B0ciAhPSBOVUxMKQorICB7CisgIGludCBjYWxsb3V0X2RhdGEgPSAqKChpbnQzMl90ICopY2FsbG91dF9kYXRhX3B0cik7CisgIGlmIChjYWxsb3V0X2RhdGEgIT0gMCkKKyAgICB7CisgICAgZnByaW50ZihvdXRmaWxlLCAiQ2FsbG91dCBkYXRhID0gJWRcbiIsIGNhbGxvdXRfZGF0YSk7CisgICAgcmV0dXJuIGNhbGxvdXRfZGF0YTsKKyAgICB9CisgIH0KKworcmV0dXJuIChjYi0+Y2FsbG91dF9udW1iZXIgIT0gZGF0X2RhdGN0bC5jZmFpbFswXSk/IDAgOgorICAgICAgICgrK2NhbGxvdXRfY291bnQgPj0gZGF0X2RhdGN0bC5jZmFpbFsxXSk/IDEgOiAwOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgSGFuZGxlICpNQVJLIGFuZCBjb3B5L2dldCB0ZXN0cyAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBjb21wbGV0ZSBhbmQgcGFydGlhbCBtYXRjaGVzLiBJdCBydW5zIHRoZQordGVzdHMgZm9yIHN1YnN0cmluZyBleHRyYWN0aW9uLgorCitBcmd1bWVudHM6CisgIHV0ZiAgICAgICBUUlVFIGZvciB1dGYKKyAgY2FwY291bnQgIHJldHVybiBmcm9tIHBjcmUyX21hdGNoKCkKKworUmV0dXJuczogICAgbm90aGluZworKi8KKworc3RhdGljIHZvaWQKK2NvcHlfYW5kX2dldChCT09MIHV0ZiwgaW50IGNhcGNvdW50KQoreworaW50IGk7Cit1aW50OF90ICpucHRyOworCisvKiBUZXN0IGNvcHkgc3RyaW5ncyBieSBudW1iZXIgKi8KKworZm9yIChpID0gMDsgaSA8IE1BWENQWUdFVCAmJiBkYXRfZGF0Y3RsLmNvcHlfbnVtYmVyc1tpXSA+PSAwOyBpKyspCisgIHsKKyAgaW50IHJjOworICBQQ1JFMl9TSVpFIGxlbmd0aCwgbGVuZ3RoMjsKKyAgdWludDMyX3QgY29weWJ1ZmZlclsyNTZdOworICB1aW50MzJfdCBuID0gKHVpbnQzMl90KShkYXRfZGF0Y3RsLmNvcHlfbnVtYmVyc1tpXSk7CisgIGxlbmd0aCA9IHNpemVvZihjb3B5YnVmZmVyKS9jb2RlX3VuaXRfc2l6ZTsKKyAgUENSRTJfU1VCU1RSSU5HX0NPUFlfQllOVU1CRVIocmMsIG1hdGNoX2RhdGEsIG4sIGNvcHlidWZmZXIsICZsZW5ndGgpOworICBpZiAocmMgPCAwKQorICAgIHsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJDb3B5IHN1YnN0cmluZyAlZCBmYWlsZWQgKCVkKTogIiwgbiwgcmMpOworICAgIFBDUkUyX0dFVF9FUlJPUl9NRVNTQUdFKHJjLCByYywgcGJ1ZmZlcik7CisgICAgUENIQVJTVihDQVNUVkFSKHZvaWQgKiwgcGJ1ZmZlciksIDAsIHJjLCBGQUxTRSwgb3V0ZmlsZSk7CisgICAgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgUENSRTJfU1VCU1RSSU5HX0xFTkdUSF9CWU5VTUJFUihyYywgbWF0Y2hfZGF0YSwgbiwgJmxlbmd0aDIpOworICAgIGlmIChyYyA8IDApCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICJHZXQgc3Vic3RyaW5nICVkIGxlbmd0aCBmYWlsZWQgKCVkKTogIiwgbiwgcmMpOworICAgICAgUENSRTJfR0VUX0VSUk9SX01FU1NBR0UocmMsIHJjLCBwYnVmZmVyKTsKKyAgICAgIFBDSEFSU1YoQ0FTVFZBUih2b2lkICosIHBidWZmZXIpLCAwLCByYywgRkFMU0UsIG91dGZpbGUpOworICAgICAgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKyAgICAgIH0KKyAgICBlbHNlIGlmIChsZW5ndGgyICE9IGxlbmd0aCkKKyAgICAgIHsKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIk1pc21hdGNoZWQgc3Vic3RyaW5nIGxlbmd0aHM6ICVsdSAlbHVcbiIsCisgICAgICAgICh1bnNpZ25lZCBsb25nIGludClsZW5ndGgsICh1bnNpZ25lZCBsb25nIGludClsZW5ndGgyKTsKKyAgICAgIH0KKyAgICBmcHJpbnRmKG91dGZpbGUsICIlMmRDICIsIG4pOworICAgIFBDSEFSU1YoY29weWJ1ZmZlciwgMCwgbGVuZ3RoLCB1dGYsIG91dGZpbGUpOworICAgIGZwcmludGYob3V0ZmlsZSwgIiAoJWx1KVxuIiwgKHVuc2lnbmVkIGxvbmcpbGVuZ3RoKTsKKyAgICB9CisgIH0KKworLyogVGVzdCBjb3B5IHN0cmluZ3MgYnkgbmFtZSAqLworCitucHRyID0gZGF0X2RhdGN0bC5jb3B5X25hbWVzOworZm9yICg7OykKKyAgeworICBpbnQgcmM7CisgIGludCBncm91cG51bWJlcjsKKyAgUENSRTJfU0laRSBsZW5ndGgsIGxlbmd0aDI7CisgIHVpbnQzMl90IGNvcHlidWZmZXJbMjU2XTsKKyAgaW50IG5hbWVsZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIgKilucHRyKTsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMTYgfHwgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzMyCisgIFBDUkUyX1NJWkUgY25sID0gbmFtZWxlbjsKKyNlbmRpZgorICBpZiAobmFtZWxlbiA9PSAwKSBicmVhazsKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIHN0cmNweSgoY2hhciAqKXBidWZmZXI4LCAoY2hhciAqKW5wdHIpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorICBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSh2b2lkKXRvMTYobnB0ciwgdXRmLCAmY25sKTsKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMzJfTU9ERSkodm9pZCl0bzMyKG5wdHIsIHV0ZiwgJmNubCk7CisjZW5kaWYKKworICBQQ1JFMl9TVUJTVFJJTkdfTlVNQkVSX0ZST01fTkFNRShncm91cG51bWJlciwgY29tcGlsZWRfY29kZSwgcGJ1ZmZlcik7CisgIGlmIChncm91cG51bWJlciA8IDAgJiYgZ3JvdXBudW1iZXIgIT0gUENSRTJfRVJST1JfTk9VTklRVUVTVUJTVFJJTkcpCisgICAgZnByaW50ZihvdXRmaWxlLCAiTnVtYmVyIG5vdCBmb3VuZCBmb3IgZ3JvdXAgJyVzJ1xuIiwgbnB0cik7CisKKyAgbGVuZ3RoID0gc2l6ZW9mKGNvcHlidWZmZXIpL2NvZGVfdW5pdF9zaXplOworICBQQ1JFMl9TVUJTVFJJTkdfQ09QWV9CWU5BTUUocmMsIG1hdGNoX2RhdGEsIHBidWZmZXIsIGNvcHlidWZmZXIsICZsZW5ndGgpOworICBpZiAocmMgPCAwKQorICAgIHsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJDb3B5IHN1YnN0cmluZyAnJXMnIGZhaWxlZCAoJWQpOiAiLCBucHRyLCByYyk7CisgICAgUENSRTJfR0VUX0VSUk9SX01FU1NBR0UocmMsIHJjLCBwYnVmZmVyKTsKKyAgICBQQ0hBUlNWKENBU1RWQVIodm9pZCAqLCBwYnVmZmVyKSwgMCwgcmMsIEZBTFNFLCBvdXRmaWxlKTsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICBQQ1JFMl9TVUJTVFJJTkdfTEVOR1RIX0JZTkFNRShyYywgbWF0Y2hfZGF0YSwgcGJ1ZmZlciwgJmxlbmd0aDIpOworICAgIGlmIChyYyA8IDApCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICJHZXQgc3Vic3RyaW5nICclcycgbGVuZ3RoIGZhaWxlZCAoJWQpOiAiLCBucHRyLCByYyk7CisgICAgICBQQ1JFMl9HRVRfRVJST1JfTUVTU0FHRShyYywgcmMsIHBidWZmZXIpOworICAgICAgUENIQVJTVihDQVNUVkFSKHZvaWQgKiwgcGJ1ZmZlciksIDAsIHJjLCBGQUxTRSwgb3V0ZmlsZSk7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworICAgICAgfQorICAgIGVsc2UgaWYgKGxlbmd0aDIgIT0gbGVuZ3RoKQorICAgICAgeworICAgICAgZnByaW50ZihvdXRmaWxlLCAiTWlzbWF0Y2hlZCBzdWJzdHJpbmcgbGVuZ3RoczogJWx1ICVsdVxuIiwKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KWxlbmd0aCwgKHVuc2lnbmVkIGxvbmcgaW50KWxlbmd0aDIpOworICAgICAgfQorICAgIGZwcmludGYob3V0ZmlsZSwgIiAgQyAiKTsKKyAgICBQQ0hBUlNWKGNvcHlidWZmZXIsIDAsIGxlbmd0aCwgdXRmLCBvdXRmaWxlKTsKKyAgICBmcHJpbnRmKG91dGZpbGUsICIgKCVsdSkgJXMiLCAodW5zaWduZWQgbG9uZylsZW5ndGgsIG5wdHIpOworICAgIGlmIChncm91cG51bWJlciA+PSAwKSBmcHJpbnRmKG91dGZpbGUsICIgKGdyb3VwICVkKVxuIiwgZ3JvdXBudW1iZXIpOworICAgICAgZWxzZSBmcHJpbnRmKG91dGZpbGUsICIgKG5vbi11bmlxdWUpXG4iKTsKKyAgICB9CisgIG5wdHIgKz0gbmFtZWxlbiArIDE7CisgIH0KKworLyogVGVzdCBnZXQgc3RyaW5ncyBieSBudW1iZXIgKi8KKworZm9yIChpID0gMDsgaSA8IE1BWENQWUdFVCAmJiBkYXRfZGF0Y3RsLmdldF9udW1iZXJzW2ldID49IDA7IGkrKykKKyAgeworICBpbnQgcmM7CisgIFBDUkUyX1NJWkUgbGVuZ3RoOworICB2b2lkICpnb3RidWZmZXI7CisgIHVpbnQzMl90IG4gPSAodWludDMyX3QpKGRhdF9kYXRjdGwuZ2V0X251bWJlcnNbaV0pOworICBQQ1JFMl9TVUJTVFJJTkdfR0VUX0JZTlVNQkVSKHJjLCBtYXRjaF9kYXRhLCBuLCAmZ290YnVmZmVyLCAmbGVuZ3RoKTsKKyAgaWYgKHJjIDwgMCkKKyAgICB7CisgICAgZnByaW50ZihvdXRmaWxlLCAiR2V0IHN1YnN0cmluZyAlZCBmYWlsZWQgKCVkKTogIiwgbiwgcmMpOworICAgIFBDUkUyX0dFVF9FUlJPUl9NRVNTQUdFKHJjLCByYywgcGJ1ZmZlcik7CisgICAgUENIQVJTVihDQVNUVkFSKHZvaWQgKiwgcGJ1ZmZlciksIDAsIHJjLCBGQUxTRSwgb3V0ZmlsZSk7CisgICAgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgZnByaW50ZihvdXRmaWxlLCAiJTJkRyAiLCBuKTsKKyAgICBQQ0hBUlNWKGdvdGJ1ZmZlciwgMCwgbGVuZ3RoLCB1dGYsIG91dGZpbGUpOworICAgIGZwcmludGYob3V0ZmlsZSwgIiAoJWx1KVxuIiwgKHVuc2lnbmVkIGxvbmcpbGVuZ3RoKTsKKyAgICBQQ1JFMl9TVUJTVFJJTkdfRlJFRShnb3RidWZmZXIpOworICAgIH0KKyAgfQorCisvKiBUZXN0IGdldCBzdHJpbmdzIGJ5IG5hbWUgKi8KKworbnB0ciA9IGRhdF9kYXRjdGwuZ2V0X25hbWVzOworZm9yICg7OykKKyAgeworICBQQ1JFMl9TSVpFIGxlbmd0aDsKKyAgdm9pZCAqZ290YnVmZmVyOworICBpbnQgcmM7CisgIGludCBncm91cG51bWJlcjsKKyAgaW50IG5hbWVsZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIgKilucHRyKTsKKyNpZiBkZWZpbmVkIFNVUFBPUlRfUENSRTJfMTYgfHwgZGVmaW5lZCBTVVBQT1JUX1BDUkUyXzMyCisgIFBDUkUyX1NJWkUgY25sID0gbmFtZWxlbjsKKyNlbmRpZgorICBpZiAobmFtZWxlbiA9PSAwKSBicmVhazsKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorICBpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpIHN0cmNweSgoY2hhciAqKXBidWZmZXI4LCAoY2hhciAqKW5wdHIpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorICBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKSh2b2lkKXRvMTYobnB0ciwgdXRmLCAmY25sKTsKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMzJfTU9ERSkodm9pZCl0bzMyKG5wdHIsIHV0ZiwgJmNubCk7CisjZW5kaWYKKworICBQQ1JFMl9TVUJTVFJJTkdfTlVNQkVSX0ZST01fTkFNRShncm91cG51bWJlciwgY29tcGlsZWRfY29kZSwgcGJ1ZmZlcik7CisgIGlmIChncm91cG51bWJlciA8IDAgJiYgZ3JvdXBudW1iZXIgIT0gUENSRTJfRVJST1JfTk9VTklRVUVTVUJTVFJJTkcpCisgICAgZnByaW50ZihvdXRmaWxlLCAiTnVtYmVyIG5vdCBmb3VuZCBmb3IgZ3JvdXAgJyVzJ1xuIiwgbnB0cik7CisKKyAgUENSRTJfU1VCU1RSSU5HX0dFVF9CWU5BTUUocmMsIG1hdGNoX2RhdGEsIHBidWZmZXIsICZnb3RidWZmZXIsICZsZW5ndGgpOworICBpZiAocmMgPCAwKQorICAgIHsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJHZXQgc3Vic3RyaW5nICclcycgZmFpbGVkICglZCk6ICIsIG5wdHIsIHJjKTsKKyAgICBQQ1JFMl9HRVRfRVJST1JfTUVTU0FHRShyYywgcmMsIHBidWZmZXIpOworICAgIFBDSEFSU1YoQ0FTVFZBUih2b2lkICosIHBidWZmZXIpLCAwLCByYywgRkFMU0UsIG91dGZpbGUpOworICAgIGZwcmludGYob3V0ZmlsZSwgIlxuIik7CisgICAgfQorICBlbHNlCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIiAgRyAiKTsKKyAgICBQQ0hBUlNWKGdvdGJ1ZmZlciwgMCwgbGVuZ3RoLCB1dGYsIG91dGZpbGUpOworICAgIGZwcmludGYob3V0ZmlsZSwgIiAoJWx1KSAlcyIsICh1bnNpZ25lZCBsb25nKWxlbmd0aCwgbnB0cik7CisgICAgaWYgKGdyb3VwbnVtYmVyID49IDApIGZwcmludGYob3V0ZmlsZSwgIiAoZ3JvdXAgJWQpXG4iLCBncm91cG51bWJlcik7CisgICAgICBlbHNlIGZwcmludGYob3V0ZmlsZSwgIiAobm9uLXVuaXF1ZSlcbiIpOworICAgIFBDUkUyX1NVQlNUUklOR19GUkVFKGdvdGJ1ZmZlcik7CisgICAgfQorICBucHRyICs9IG5hbWVsZW4gKyAxOworICB9CisKKy8qIFRlc3QgZ2V0dGluZyB0aGUgY29tcGxldGUgbGlzdCBvZiBjYXB0dXJlZCBzdHJpbmdzLiAqLworCitpZiAoKGRhdF9kYXRjdGwuY29udHJvbCAmIENUTF9HRVRBTEwpICE9IDApCisgIHsKKyAgaW50IHJjOworICB2b2lkICoqc3RyaW5nbGlzdDsKKyAgUENSRTJfU0laRSAqbGVuZ3RoczsKKyAgUENSRTJfU1VCU1RSSU5HX0xJU1RfR0VUKHJjLCBtYXRjaF9kYXRhLCAmc3RyaW5nbGlzdCwgJmxlbmd0aHMpOworICBpZiAocmMgPCAwKQorICAgIHsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJnZXQgc3Vic3RyaW5nIGxpc3QgZmFpbGVkICglZCk6ICIsIHJjKTsKKyAgICBQQ1JFMl9HRVRfRVJST1JfTUVTU0FHRShyYywgcmMsIHBidWZmZXIpOworICAgIFBDSEFSU1YoQ0FTVFZBUih2b2lkICosIHBidWZmZXIpLCAwLCByYywgRkFMU0UsIG91dGZpbGUpOworICAgIGZwcmludGYob3V0ZmlsZSwgIlxuIik7CisgICAgfQorICBlbHNlCisgICAgeworICAgIGZvciAoaSA9IDA7IGkgPCBjYXBjb3VudDsgaSsrKQorICAgICAgeworICAgICAgZnByaW50ZihvdXRmaWxlLCAiJTJkTCAiLCBpKTsKKyAgICAgIFBDSEFSU1Yoc3RyaW5nbGlzdFtpXSwgMCwgbGVuZ3Roc1tpXSwgdXRmLCBvdXRmaWxlKTsKKyAgICAgIHB1dGMoJ1xuJywgb3V0ZmlsZSk7CisgICAgICB9CisgICAgaWYgKHN0cmluZ2xpc3RbaV0gIT0gTlVMTCkKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgInN0cmluZyBsaXN0IG5vdCB0ZXJtaW5hdGVkIGJ5IE5VTExcbiIpOworICAgIFBDUkUyX1NVQlNUUklOR19MSVNUX0ZSRUUoc3RyaW5nbGlzdCk7CisgICAgfQorICB9Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgIFByb2Nlc3MgYSBkYXRhIGxpbmUgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIFRoZSBsaW5lIGlzIGluIGJ1ZmZlcjsgaXQgd2lsbCBub3QgYmUgZW1wdHkuCisKK0FyZ3VtZW50czogIG5vbmUKKworUmV0dXJuczogICAgUFJfT0sgICAgIGNvbnRpbnVlIHByb2Nlc3NpbmcgbmV4dCBsaW5lCisgICAgICAgICAgICBQUl9TS0lQICAgc2tpcCB0byBhIGJsYW5rIGxpbmUKKyAgICAgICAgICAgIFBSX0FCRU5EICBhYm9ydCB0aGUgcGNyZTJ0ZXN0IHJ1bgorKi8KKworc3RhdGljIGludAorcHJvY2Vzc19kYXRhKHZvaWQpCit7CitQQ1JFMl9TSVpFIGxlbiwgdWxlbjsKK3VpbnQzMl90IGdtYXRjaGVkOwordWludDMyX3QgYywgazsKK3VpbnQzMl90IGdfbm90ZW1wdHkgPSAwOwordWludDhfdCAqcCwgKnBwLCAqc3RhcnRfcmVwOworc2l6ZV90IG5lZWRsZW47Cit2b2lkICp1c2VfZGF0X2NvbnRleHQ7CitCT09MIHV0ZjsKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAordWludDhfdCAqcTggPSBOVUxMOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgordWludDE2X3QgKnExNiA9IE5VTEw7CisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzMyCit1aW50MzJfdCAqcTMyID0gTlVMTDsKKyNlbmRpZgorCisvKiBDb3B5IHRoZSBkZWZhdWx0IGNvbnRleHQgYW5kIGRhdGEgY29udHJvbCBibG9ja3MgdG8gdGhlIGFjdGl2ZSBvbmVzLiBUaGVuCitjb3B5IGZyb20gdGhlIHBhdHRlcm4gdGhlIGNvbnRyb2xzIHRoYXQgY2FuIGJlIHNldCBpbiBlaXRoZXIgdGhlIHBhdHRlcm4gb3IgdGhlCitkYXRhLiBUaGlzIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGRhdGEgbGluZS4gV2UgZG8gbm90IGRvIHRoaXMgZm9yCitvcHRpb25zIGJlY2F1c2UgdGhvc2UgdGhhdCBhcmUgY29tbW9uIGFwcGx5IHNlcGFyYXRlbHkgdG8gY29tcGlsaW5nIGFuZAorbWF0Y2hpbmcuICovCisKK0RBVENUWENQWShkYXRfY29udGV4dCwgZGVmYXVsdF9kYXRfY29udGV4dCk7CittZW1jcHkoJmRhdF9kYXRjdGwsICZkZWZfZGF0Y3RsLCBzaXplb2YoZGF0Y3RsKSk7CitkYXRfZGF0Y3RsLmNvbnRyb2wgfD0gKHBhdF9wYXRjdGwuY29udHJvbCAmIENUTF9BTExQRCk7CitkYXRfZGF0Y3RsLmNvbnRyb2wyIHw9IChwYXRfcGF0Y3RsLmNvbnRyb2wyICYgQ1RMMl9BTExQRCk7CitzdHJjcHkoKGNoYXIgKilkYXRfZGF0Y3RsLnJlcGxhY2VtZW50LCAoY2hhciAqKXBhdF9wYXRjdGwucmVwbGFjZW1lbnQpOworCisvKiBJbml0aWFsaXplIGZvciBzY2FubmluZyB0aGUgZGF0YSBsaW5lLiAqLworCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84Cit1dGYgPSAoKCgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX1BPU0lYKSAhPSAwKT8KKyAgKChwY3JlMl9yZWFsX2NvZGVfOCAqKXByZWcucmVfcGNyZTJfY29kZSktPm92ZXJhbGxfb3B0aW9ucyA6CisgIEZMRChjb21waWxlZF9jb2RlLCBvdmVyYWxsX29wdGlvbnMpKSAmIFBDUkUyX1VURikgIT0gMDsKKyNlbHNlCit1dGYgPSAoRkxEKGNvbXBpbGVkX2NvZGUsIG92ZXJhbGxfb3B0aW9ucykgJiBQQ1JFMl9VVEYpICE9IDA7CisjZW5kaWYKKworc3RhcnRfcmVwID0gTlVMTDsKK2xlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKWJ1ZmZlcik7Cit3aGlsZSAobGVuID4gMCAmJiBpc3NwYWNlKGJ1ZmZlcltsZW4tMV0pKSBsZW4tLTsKK2J1ZmZlcltsZW5dID0gMDsKK3AgPSBidWZmZXI7Cit3aGlsZSAoaXNzcGFjZSgqcCkpIHArKzsKKworLyogQ2hlY2sgdGhhdCB0aGUgZGF0YSBpcyB3ZWxsLWZvcm1lZCBVVEYtOCBpZiB3ZSdyZSBpbiBVVEYgbW9kZS4gVG8gY3JlYXRlCitpbnZhbGlkIGlucHV0IHRvIHBjcmUyX21hdGNoKCksIHlvdSBtdXN0IHVzZSBceD8/IG9yIFx4e30gc2VxdWVuY2VzLiAqLworCitpZiAodXRmKQorICB7CisgIHVpbnQ4X3QgKnE7CisgIHVpbnQzMl90IGNjOworICBpbnQgbiA9IDE7CisgIGZvciAocSA9IHA7IG4gPiAwICYmICpxOyBxICs9IG4pIG4gPSB1dGY4Mm9yZChxLCAmY2MpOworICBpZiAobiA8PSAwKQorICAgIHsKKyAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBGYWlsZWQ6IGludmFsaWQgVVRGLTggc3RyaW5nIGNhbm5vdCBiZSB1c2VkIGFzIGlucHV0ICIKKyAgICAgICJpbiBVVEYgbW9kZVxuIik7CisgICAgcmV0dXJuIFBSX09LOworICAgIH0KKyAgfQorCisjaWZkZWYgU1VQUE9SVF9WQUxHUklORAorLyogTWFyayB0aGUgZGJ1ZmZlciBhcyBhZGRyZXNzYWJsZSBidXQgdW5kZWZpbmVkIGFnYWluLiAqLworaWYgKGRidWZmZXIgIT0gTlVMTCkKKyAgeworICBWQUxHUklORF9NQUtFX01FTV9VTkRFRklORUQoZGJ1ZmZlciwgZGJ1ZmZlcl9zaXplKTsKKyAgfQorI2VuZGlmCisKKy8qIEFsbG9jYXRlIGEgYnVmZmVyIHRvIGhvbGQgdGhlIGRhdGEgbGluZTsgbGVuKzEgaXMgYW4gdXBwZXIgYm91bmQgb24KK3RoZSBudW1iZXIgb2YgY29kZSB1bml0cyB0aGF0IHdpbGwgYmUgbmVlZGVkICh0aG91Z2ggdGhlIGJ1ZmZlciBtYXkgaGF2ZSB0byBiZQorZXh0ZW5kZWQgaWYgcmVwbGljYXRpb24gaXMgaW52b2x2ZWQpLiAqLworCituZWVkbGVuID0gKHNpemVfdCkoKGxlbisxKSAqIGNvZGVfdW5pdF9zaXplKTsKK2lmIChkYnVmZmVyID09IE5VTEwgfHwgbmVlZGxlbiA+PSBkYnVmZmVyX3NpemUpCisgIHsKKyAgd2hpbGUgKG5lZWRsZW4gPj0gZGJ1ZmZlcl9zaXplKSBkYnVmZmVyX3NpemUgKj0gMjsKKyAgZGJ1ZmZlciA9ICh1aW50OF90ICopcmVhbGxvYyhkYnVmZmVyLCBkYnVmZmVyX3NpemUpOworICBpZiAoZGJ1ZmZlciA9PSBOVUxMKQorICAgIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInBjcmUydGVzdDogcmVhbGxvYyglZCkgZmFpbGVkXG4iLCAoaW50KWRidWZmZXJfc2l6ZSk7CisgICAgZXhpdCgxKTsKKyAgICB9CisgIH0KK1NFVENBU1RQVFIocSwgZGJ1ZmZlcik7ICAvKiBTZXRzIHE4LCBxMTYsIG9yIHEzMiwgYXMgYXBwcm9wcmlhdGUuICovCisKKy8qIFNjYW4gdGhlIGRhdGEgbGluZSwgaW50ZXJwcmV0aW5nIGRhdGEgZXNjYXBlcywgYW5kIHB1dCB0aGUgcmVzdWx0IGludG8gYQorYnVmZmVyIG9mIHRoZSBhcHByb3ByaWF0ZSB3aWR0aC4gSW4gVVRGIG1vZGUsIGlucHV0IGNhbiBiZSBVVEYtOC4gKi8KKword2hpbGUgKChjID0gKnArKykgIT0gMCkKKyAgeworICBpbnQgaSA9IDA7CisgIHNpemVfdCByZXBsZW47CisKKyAgLyogXSBtYXkgbWFyayB0aGUgZW5kIG9mIGEgcmVwbGljYXRlZCBzZXF1ZW5jZSAqLworCisgIGlmIChjID09ICddJyAmJiBzdGFydF9yZXAgIT0gTlVMTCkKKyAgICB7CisgICAgc2l6ZV90IHFvZmZzZXQgPSBDQVNUOFZBUihxKSAtIGRidWZmZXI7CisgICAgc2l6ZV90IHJlcF9vZmZzZXQgPSBzdGFydF9yZXAgLSBkYnVmZmVyOworCisgICAgaWYgKCpwKysgIT0gJ3snKQorICAgICAgeworICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogRXhwZWN0ZWQgJ3snIGFmdGVyIFxcWy4uLi5dXG4iKTsKKyAgICAgIHJldHVybiBQUl9PSzsKKyAgICAgIH0KKyAgICB3aGlsZSAoaXNkaWdpdCgqcCkpIGkgPSBpICogMTAgKyAqcCsrIC0gJzAnOworICAgIGlmICgqcCsrICE9ICd9JykKKyAgICAgIHsKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqIEV4cGVjdGVkICd9JyBhZnRlciBcXFsuLi5dey4uLlxuIik7CisgICAgICByZXR1cm4gUFJfT0s7CisgICAgICB9CisgICAgaWYgKGktLSA9PSAwKQorICAgICAgeworICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogWmVybyByZXBlYXQgbm90IGFsbG93ZWRcbiIpOworICAgICAgcmV0dXJuIFBSX09LOworICAgICAgfQorCisgICAgcmVwbGVuID0gQ0FTVDhWQVIocSkgLSBzdGFydF9yZXA7CisgICAgbmVlZGxlbiArPSByZXBsZW4gKiBpOworCisgICAgaWYgKG5lZWRsZW4gPj0gZGJ1ZmZlcl9zaXplKQorICAgICAgeworICAgICAgd2hpbGUgKG5lZWRsZW4gPj0gZGJ1ZmZlcl9zaXplKSBkYnVmZmVyX3NpemUgKj0gMjsKKyAgICAgIGRidWZmZXIgPSAodWludDhfdCAqKXJlYWxsb2MoZGJ1ZmZlciwgZGJ1ZmZlcl9zaXplKTsKKyAgICAgIGlmIChkYnVmZmVyID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJwY3JlMnRlc3Q6IHJlYWxsb2MoJWQpIGZhaWxlZFxuIiwgKGludClkYnVmZmVyX3NpemUpOworICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICBTRVRDQVNUUFRSKHEsIGRidWZmZXIgKyBxb2Zmc2V0KTsKKyAgICAgIHN0YXJ0X3JlcCA9IGRidWZmZXIgKyByZXBfb2Zmc2V0OworICAgICAgfQorCisgICAgd2hpbGUgKGktLSA+IDApCisgICAgICB7CisgICAgICBtZW1jcHkoQ0FTVDhWQVIocSksIHN0YXJ0X3JlcCwgcmVwbGVuKTsKKyAgICAgIFNFVFBMVVMocSwgcmVwbGVuL2NvZGVfdW5pdF9zaXplKTsKKyAgICAgIH0KKworICAgIHN0YXJ0X3JlcCA9IE5VTEw7CisgICAgY29udGludWU7CisgICAgfQorCisgIC8qIEhhbmRsZSBhIG5vbi1lc2NhcGVkIGNoYXJhY3RlciAqLworCisgIGlmIChjICE9ICdcXCcpCisgICAgeworICAgIGlmICh1dGYgJiYgSEFTVVRGOEVYVFJBTEVOKGMpKSB7IEdFVFVURjhJTkMoYywgcCk7IH0KKyAgICB9CisKKyAgLyogSGFuZGxlIGJhY2tzbGFzaCBlc2NhcGVzICovCisKKyAgZWxzZSBzd2l0Y2ggKChjID0gKnArKykpCisgICAgeworICAgIGNhc2UgJ1xcJzogYnJlYWs7CisgICAgY2FzZSAnYSc6IGMgPSBDSEFSX0JFTDsgYnJlYWs7CisgICAgY2FzZSAnYic6IGMgPSAnXGInOyBicmVhazsKKyAgICBjYXNlICdlJzogYyA9IENIQVJfRVNDOyBicmVhazsKKyAgICBjYXNlICdmJzogYyA9ICdcZic7IGJyZWFrOworICAgIGNhc2UgJ24nOiBjID0gJ1xuJzsgYnJlYWs7CisgICAgY2FzZSAncic6IGMgPSAnXHInOyBicmVhazsKKyAgICBjYXNlICd0JzogYyA9ICdcdCc7IGJyZWFrOworICAgIGNhc2UgJ3YnOiBjID0gJ1x2JzsgYnJlYWs7CisKKyAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzoKKyAgICBjYXNlICc0JzogY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzoKKyAgICBjIC09ICcwJzsKKyAgICB3aGlsZSAoaSsrIDwgMiAmJiBpc2RpZ2l0KCpwKSAmJiAqcCAhPSAnOCcgJiYgKnAgIT0gJzknKQorICAgICAgYyA9IGMgKiA4ICsgKnArKyAtICcwJzsKKyAgICBicmVhazsKKworICAgIGNhc2UgJ28nOgorICAgIGlmICgqcCA9PSAneycpCisgICAgICB7CisgICAgICB1aW50OF90ICpwdCA9IHA7CisgICAgICBjID0gMDsKKyAgICAgIGZvciAocHQrKzsgaXNkaWdpdCgqcHQpICYmICpwdCAhPSAnOCcgJiYgKnB0ICE9ICc5JzsgcHQrKykKKyAgICAgICAgeworICAgICAgICBpZiAoKytpID09IDEyKQorICAgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqIFRvbyBtYW55IG9jdGFsIGRpZ2l0cyBpbiBcXG97Li4ufSBpdGVtOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgb25seSB0aGUgZmlyc3QgdHdlbHZlLlxuIik7CisgICAgICAgIGVsc2UgYyA9IGMgKiA4ICsgKnB0IC0gJzAnOworICAgICAgICB9CisgICAgICBpZiAoKnB0ID09ICd9JykgcCA9IHB0ICsgMTsKKyAgICAgICAgZWxzZSBmcHJpbnRmKG91dGZpbGUsICIqKiBNaXNzaW5nIH0gYWZ0ZXIgXFxveyAoYXNzdW1lZClcbiIpOworICAgICAgfQorICAgIGJyZWFrOworCisgICAgY2FzZSAneCc6CisgICAgaWYgKCpwID09ICd7JykKKyAgICAgIHsKKyAgICAgIHVpbnQ4X3QgKnB0ID0gcDsKKyAgICAgIGMgPSAwOworCisgICAgICAvKiBXZSB1c2VkIHRvIGhhdmUgIndoaWxlIChpc3hkaWdpdCgqKCsrcHQpKSkiIGhlcmUsIGJ1dCBpdCBmYWlscworICAgICAgd2hlbiBpc3hkaWdpdCgpIGlzIGEgbWFjcm8gdGhhdCByZWZlcnMgdG8gaXRzIGFyZ3VtZW50IG1vcmUgdGhhbgorICAgICAgb25jZS4gVGhpcyBpcyBiYW5uZWQgYnkgdGhlIEMgU3RhbmRhcmQsIGJ1dCBhcHBhcmVudGx5IGhhcHBlbnMgaW4gYXQKKyAgICAgIGxlYXN0IG9uZSBNYWNPUyBlbnZpcm9ubWVudC4gKi8KKworICAgICAgZm9yIChwdCsrOyBpc3hkaWdpdCgqcHQpOyBwdCsrKQorICAgICAgICB7CisgICAgICAgIGlmICgrK2kgPT0gOSkKKyAgICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBUb28gbWFueSBoZXggZGlnaXRzIGluIFxceHsuLi59IGl0ZW07ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2luZyBvbmx5IHRoZSBmaXJzdCBlaWdodC5cbiIpOworICAgICAgICBlbHNlIGMgPSBjICogMTYgKyB0b2xvd2VyKCpwdCkgLSAoKGlzZGlnaXQoKnB0KSk/ICcwJyA6ICdhJyAtIDEwKTsKKyAgICAgICAgfQorICAgICAgaWYgKCpwdCA9PSAnfScpCisgICAgICAgIHsKKyAgICAgICAgcCA9IHB0ICsgMTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgIC8qIE5vdCBjb3JyZWN0IGZvcm0gZm9yIFx4ey4uLn07IGZhbGwgdGhyb3VnaCAqLworICAgICAgfQorCisgICAgLyogXHggd2l0aG91dCB7fSBhbHdheXMgZGVmaW5lcyBqdXN0IG9uZSBieXRlIGluIDgtYml0IG1vZGUuIFRoaXMKKyAgICBhbGxvd3MgVVRGLTggY2hhcmFjdGVycyB0byBiZSBjb25zdHJ1Y3RlZCBieXRlIGJ5IGJ5dGUsIGFuZCBhbHNvIGFsbG93cworICAgIGludmFsaWQgVVRGLTggc2VxdWVuY2VzIHRvIGJlIG1hZGUuIEp1c3QgY29weSB0aGUgYnl0ZSBpbiBVVEYtOCBtb2RlLgorICAgIE90aGVyd2lzZSwgcGFzcyBpdCBkb3duIGFzIGRhdGEuICovCisKKyAgICBjID0gMDsKKyAgICB3aGlsZSAoaSsrIDwgMiAmJiBpc3hkaWdpdCgqcCkpCisgICAgICB7CisgICAgICBjID0gYyAqIDE2ICsgdG9sb3dlcigqcCkgLSAoKGlzZGlnaXQoKnApKT8gJzAnIDogJ2EnIC0gMTApOworICAgICAgcCsrOworICAgICAgfQorI2lmIGRlZmluZWQgU1VQUE9SVF9QQ1JFMl84CisgICAgaWYgKHV0ZiAmJiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpKQorICAgICAgeworICAgICAgKnE4KysgPSBjOworICAgICAgY29udGludWU7CisgICAgICB9CisjZW5kaWYKKyAgICBicmVhazsKKworICAgIGNhc2UgMDogICAgIC8qIFwgZm9sbG93ZWQgYnkgRU9GIGFsbG93cyBmb3IgYW4gZW1wdHkgbGluZSAqLworICAgIHAtLTsKKyAgICBjb250aW51ZTsKKworICAgIGNhc2UgJz0nOiAgIC8qIFw9IHRlcm1pbmF0ZXMgdGhlIGRhdGEsIHN0YXJ0cyBtb2RpZmllcnMgKi8KKyAgICBnb3RvIEVORFNUUklORzsKKworICAgIGNhc2UgJ1snOiAgIC8qIFxbIGludHJvZHVjZXMgYSByZXBsaWNhdGVkIGNoYXJhY3RlciBzZXF1ZW5jZSAqLworICAgIGlmIChzdGFydF9yZXAgIT0gTlVMTCkKKyAgICAgIHsKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqIE5lc3RlZCByZXBsaWNhdGlvbiBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKyAgICAgIHJldHVybiBQUl9PSzsKKyAgICAgIH0KKyAgICBzdGFydF9yZXAgPSBDQVNUOFZBUihxKTsKKyAgICBjb250aW51ZTsKKworICAgIGRlZmF1bHQ6CisgICAgaWYgKGlzYWxudW0oYykpCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBVbnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlIFwiXFwlY1wiXG4iLCBjKTsKKyAgICAgIHJldHVybiBQUl9PSzsKKyAgICAgIH0KKyAgICB9CisKKyAgLyogV2Ugbm93IGhhdmUgYSBjaGFyYWN0ZXIgdmFsdWUgaW4gYyB0aGF0IG1heSBiZSBncmVhdGVyIHRoYW4gMjU1LgorICBJbiA4LWJpdCBtb2RlIHdlIGNvbnZlcnQgdG8gVVRGLTggaWYgd2UgYXJlIGluIFVURiBtb2RlLiBWYWx1ZXMgZ3JlYXRlcgorICB0aGFuIDEyNyBpbiBVVEYgbW9kZSBtdXN0IGhhdmUgY29tZSBmcm9tIFx4ey4uLn0gb3Igb2N0YWwgY29uc3RydWN0cworICBiZWNhdXNlIHZhbHVlcyBmcm9tIFx4Li4gZ2V0IHRoaXMgZmFyIG9ubHkgaW4gbm9uLVVURiBtb2RlLiAqLworCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84CisgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkKKyAgICB7CisgICAgaWYgKHV0ZikKKyAgICAgIHsKKyAgICAgIGlmIChjID4gMHg3ZmZmZmZmZikKKyAgICAgICAgeworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBDaGFyYWN0ZXIgXFx4eyV4fSBpcyBncmVhdGVyIHRoYW4gMHg3ZmZmZmZmZiAiCisgICAgICAgICAgImFuZCBzbyBjYW5ub3QgYmUgY29udmVydGVkIHRvIFVURi04XG4iLCBjKTsKKyAgICAgICAgcmV0dXJuIFBSX09LOworICAgICAgICB9CisgICAgICBxOCArPSBvcmQydXRmOChjLCBxOCk7CisgICAgICB9CisgICAgZWxzZQorICAgICAgeworICAgICAgaWYgKGMgPiAweGZmdSkKKyAgICAgICAgeworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBDaGFyYWN0ZXIgXFx4eyV4fSBpcyBncmVhdGVyIHRoYW4gMjU1ICIKKyAgICAgICAgICAiYW5kIFVURi04IG1vZGUgaXMgbm90IGVuYWJsZWQuXG4iLCBjKTsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogVHJ1bmNhdGlvbiB3aWxsIHByb2JhYmx5IGdpdmUgdGhlIHdyb25nICIKKyAgICAgICAgICAicmVzdWx0LlxuIik7CisgICAgICAgIH0KKyAgICAgICpxOCsrID0gYzsKKyAgICAgIH0KKyAgICB9CisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CisgIGlmICh0ZXN0X21vZGUgPT0gUENSRTE2X01PREUpCisgICAgeworICAgIGlmICh1dGYpCisgICAgICB7CisgICAgICBpZiAoYyA+IDB4MTBmZmZmdSkKKyAgICAgICAgeworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBGYWlsZWQ6IGNoYXJhY3RlciBcXHh7JXh9IGlzIGdyZWF0ZXIgdGhhbiAiCisgICAgICAgICAgIjB4MTBmZmZmIGFuZCBzbyBjYW5ub3QgYmUgY29udmVydGVkIHRvIFVURi0xNlxuIiwgYyk7CisgICAgICAgIHJldHVybiBQUl9PSzsKKyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoYyA+PSAweDEwMDAwdSkKKyAgICAgICAgeworICAgICAgICBjLT0gMHgxMDAwMHU7CisgICAgICAgICpxMTYrKyA9IDB4RDgwMCB8IChjID4+IDEwKTsKKyAgICAgICAgKnExNisrID0gMHhEQzAwIHwgKGMgJiAweDNmZik7CisgICAgICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgKnExNisrID0gYzsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBpZiAoYyA+IDB4ZmZmZnUpCisgICAgICAgIHsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogQ2hhcmFjdGVyIFxceHsleH0gaXMgZ3JlYXRlciB0aGFuIDB4ZmZmZiAiCisgICAgICAgICAgImFuZCBVVEYtMTYgbW9kZSBpcyBub3QgZW5hYmxlZC5cbiIsIGMpOworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBUcnVuY2F0aW9uIHdpbGwgcHJvYmFibHkgZ2l2ZSB0aGUgd3JvbmcgIgorICAgICAgICAgICJyZXN1bHQuXG4iKTsKKyAgICAgICAgfQorCisgICAgICAqcTE2KysgPSBjOworICAgICAgfQorICAgIH0KKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKyAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMzJfTU9ERSkKKyAgICB7CisgICAgKnEzMisrID0gYzsKKyAgICB9CisjZW5kaWYKKyAgfQorCitFTkRTVFJJTkc6CitTRVQoKnEsIDApOworbGVuID0gQ0FTVFZBUih1aW50OF90ICosIHEpIC0gZGJ1ZmZlcjsgICAgLyogTGVuZ3RoIGluIGJ5dGVzICovCit1bGVuID0gbGVuL2NvZGVfdW5pdF9zaXplOyAgICAgICAgICAgICAgICAvKiBMZW5ndGggaW4gY29kZSB1bml0cyAqLworCisvKiBJZiB0aGUgc3RyaW5nIHdhcyB0ZXJtaW5hdGVkIGJ5IFw9IHdlIG11c3Qgbm93IGludGVycHJldCBtb2RpZmllcnMuICovCisKK2lmIChwWy0xXSAhPSAwICYmICFkZWNvZGVfbW9kaWZpZXJzKHAsIENUWF9EQVQsIE5VTEwsICZkYXRfZGF0Y3RsKSkKKyAgcmV0dXJuIFBSX09LOworCisvKiBDaGVjayBmb3IgbXV0dWFsbHkgZXhjbHVzaXZlIG1vZGlmaWVycy4gQXQgcHJlc2VudCwgdGhlc2UgYXJlIGFsbCBpbiB0aGUKK2ZpcnN0IGNvbnRyb2wgd29yZC4gKi8KKworZm9yIChrID0gMDsgayA8IHNpemVvZihleGNsdXNpdmVfZGF0X2NvbnRyb2xzKS9zaXplb2YodWludDMyX3QpOyBrKyspCisgIHsKKyAgYyA9IGRhdF9kYXRjdGwuY29udHJvbCAmIGV4Y2x1c2l2ZV9kYXRfY29udHJvbHNba107CisgIGlmIChjICE9IDAgJiYgYyAhPSAoYyAmICh+YysxKSkpCisgICAgeworICAgIHNob3dfY29udHJvbHMoYywgMCwgIioqIE5vdCBhbGxvd2VkIHRvZ2V0aGVyOiIpOworICAgIGZwcmludGYob3V0ZmlsZSwgIlxuIik7CisgICAgcmV0dXJuIFBSX09LOworICAgIH0KKyAgfQorCitpZiAocGF0X3BhdGN0bC5yZXBsYWNlbWVudFswXSAhPSAwICYmCisgICAgKGRhdF9kYXRjdGwuY29udHJvbCAmIENUTF9OVUxMQ09OVEVYVCkgIT0gMCkKKyAgeworICBmcHJpbnRmKG91dGZpbGUsICIqKiBSZXBsYWNlbWVudCB0ZXh0IGlzIG5vdCBzdXBwb3J0ZWQgd2l0aCBudWxsX2NvbnRleHQuXG4iKTsKKyAgcmV0dXJuIFBSX09LOworICB9CisKKy8qIFdlIG5vdyBoYXZlIHRoZSBzdWJqZWN0IGluIGRidWZmZXIsIHdpdGggbGVuIGNvbnRhaW5pbmcgdGhlIGJ5dGUgbGVuZ3RoLCBhbmQKK3VsZW4gY29udGFpbmluZyB0aGUgY29kZSB1bml0IGxlbmd0aC4gTW92ZSB0aGUgZGF0YSB0byB0aGUgZW5kIG9mIHRoZSBidWZmZXIgc28KK3RoYXQgYSByZWFkIG92ZXIgdGhlIGVuZCBjYW4gYmUgY2F1Z2h0IGJ5IHZhbGdyaW5kIG9yIG90aGVyIG1lYW5zLiBJZiB3ZSBoYXZlCitleHBsaWNpdCB2YWxncmluZCBzdXBwb3J0LCBtYXJrIHRoZSB1bnVzZWQgc3RhcnQgb2YgdGhlIGJ1ZmZlciB1bmFkZHJlc3NhYmxlLgorSWYgd2UgYXJlIHVzaW5nIHRoZSBQT1NJWCBpbnRlcmZhY2UsIG9yIHRlc3RpbmcgemVyby10ZXJtaW5hdGlvbiwgd2UgbXVzdAoraW5jbHVkZSB0aGUgdGVybWluYXRpbmcgemVybyBpbiB0aGUgdXNhYmxlIGRhdGEuICovCisKK2MgPSBjb2RlX3VuaXRfc2l6ZSAqICgoKHBhdF9wYXRjdGwuY29udHJvbCAmIENUTF9QT1NJWCkgKworICAgICAgICAgICAgICAgICAgICAgICAoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX1pFUk9fVEVSTUlOQVRFKSAhPSAwKT8gMTowKTsKK3BwID0gbWVtbW92ZShkYnVmZmVyICsgZGJ1ZmZlcl9zaXplIC0gbGVuIC0gYywgZGJ1ZmZlciwgbGVuICsgYyk7CisjaWZkZWYgU1VQUE9SVF9WQUxHUklORAorICBWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhkYnVmZmVyLCBkYnVmZmVyX3NpemUgLSAobGVuICsgYykpOworI2VuZGlmCisKKy8qIE5vdyBwcCBwb2ludHMgdG8gdGhlIHN1YmplY3Qgc3RyaW5nLiBQT1NJWCBtYXRjaGluZyBpcyBvbmx5IHBvc3NpYmxlIGluCis4LWJpdCBtb2RlLCBhbmQgaXQgZG9lcyBub3Qgc3VwcG9ydCB0aW1pbmcgb3Igb3RoZXIgZmFuY3kgZmVhdHVyZXMuIFNvbWUgd2VyZQorY2hlY2tlZCBhdCBjb21waWxlIHRpbWUsIGJ1dCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBtYXRjaC10aW1lIHNldHRpbmdzIGhlcmUuICovCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKK2lmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX1BPU0lYKSAhPSAwKQorICB7CisgIGludCByYzsKKyAgaW50IGVmbGFncyA9IDA7CisgIHJlZ21hdGNoX3QgKnBtYXRjaCA9IE5VTEw7CisgIGNvbnN0IGNoYXIgKm1zZyA9ICIqKiBJZ25vcmVkIHdpdGggUE9TSVggaW50ZXJmYWNlOiI7CisKKyAgaWYgKGRhdF9kYXRjdGwuY2ZhaWxbMF0gIT0gQ0ZBSUxfVU5TRVQgfHwgZGF0X2RhdGN0bC5jZmFpbFsxXSAhPSBDRkFJTF9VTlNFVCkKKyAgICBwcm1zZygmbXNnLCAiY2FsbG91dF9mYWlsIik7CisgIGlmIChkYXRfZGF0Y3RsLmNvcHlfbnVtYmVyc1swXSA+PSAwIHx8IGRhdF9kYXRjdGwuY29weV9uYW1lc1swXSAhPSAwKQorICAgIHBybXNnKCZtc2csICJjb3B5Iik7CisgIGlmIChkYXRfZGF0Y3RsLmdldF9udW1iZXJzWzBdID49IDAgfHwgZGF0X2RhdGN0bC5nZXRfbmFtZXNbMF0gIT0gMCkKKyAgICBwcm1zZygmbXNnLCAiZ2V0Iik7CisgIGlmIChkYXRfZGF0Y3RsLmppdHN0YWNrICE9IDApIHBybXNnKCZtc2csICJqaXRzdGFjayIpOworCisgIGlmICgoZGF0X2RhdGN0bC5vcHRpb25zICYgflBPU0lYX1NVUFBPUlRFRF9NQVRDSF9PUFRJT05TKSAhPSAwKQorICAgIHsKKyAgICBmcHJpbnRmKG91dGZpbGUsICIlcyIsIG1zZyk7CisgICAgc2hvd19tYXRjaF9vcHRpb25zKGRhdF9kYXRjdGwub3B0aW9ucyAmIH5QT1NJWF9TVVBQT1JURURfTUFUQ0hfT1BUSU9OUyk7CisgICAgbXNnID0gIiI7CisgICAgfQorICBpZiAoKGRhdF9kYXRjdGwuY29udHJvbCAmIH5QT1NJWF9TVVBQT1JURURfTUFUQ0hfQ09OVFJPTFMpICE9IDAgfHwKKyAgICAgIChkYXRfZGF0Y3RsLmNvbnRyb2wyICYgflBPU0lYX1NVUFBPUlRFRF9NQVRDSF9DT05UUk9MUzIpICE9IDApCisgICAgeworICAgIHNob3dfY29udHJvbHMoZGF0X2RhdGN0bC5jb250cm9sICYgflBPU0lYX1NVUFBPUlRFRF9NQVRDSF9DT05UUk9MUywKKyAgICAgICAgICAgICAgICAgIGRhdF9kYXRjdGwuY29udHJvbDIgJiB+UE9TSVhfU1VQUE9SVEVEX01BVENIX0NPTlRST0xTMiwgbXNnKTsKKyAgICBtc2cgPSAiIjsKKyAgICB9CisKKyAgaWYgKG1zZ1swXSA9PSAwKSBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworCisgIGlmIChkYXRfZGF0Y3RsLm92ZWNjb3VudCA+IDApCisgICAgcG1hdGNoID0gKHJlZ21hdGNoX3QgKiltYWxsb2Moc2l6ZW9mKHJlZ21hdGNoX3QpICogZGF0X2RhdGN0bC5vdmVjY291bnQpOworICBpZiAoKGRhdF9kYXRjdGwub3B0aW9ucyAmIFBDUkUyX05PVEJPTCkgIT0gMCkgZWZsYWdzIHw9IFJFR19OT1RCT0w7CisgIGlmICgoZGF0X2RhdGN0bC5vcHRpb25zICYgUENSRTJfTk9URU9MKSAhPSAwKSBlZmxhZ3MgfD0gUkVHX05PVEVPTDsKKyAgaWYgKChkYXRfZGF0Y3RsLm9wdGlvbnMgJiBQQ1JFMl9OT1RFTVBUWSkgIT0gMCkgZWZsYWdzIHw9IFJFR19OT1RFTVBUWTsKKworICByYyA9IHJlZ2V4ZWMoJnByZWcsIChjb25zdCBjaGFyICopcHAgKyBkYXRfZGF0Y3RsLm9mZnNldCwKKyAgICBkYXRfZGF0Y3RsLm92ZWNjb3VudCwgcG1hdGNoLCBlZmxhZ3MpOworICBpZiAocmMgIT0gMCkKKyAgICB7CisgICAgKHZvaWQpcmVnZXJyb3IocmMsICZwcmVnLCAoY2hhciAqKXBidWZmZXI4LCBwYnVmZmVyOF9zaXplKTsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJObyBtYXRjaDogUE9TSVggY29kZSAlZDogJXNcbiIsIHJjLCBwYnVmZmVyOCk7CisgICAgfQorICBlbHNlIGlmICgocGF0X3BhdGN0bC5vcHRpb25zICYgUENSRTJfTk9fQVVUT19DQVBUVVJFKSAhPSAwKQorICAgIGZwcmludGYob3V0ZmlsZSwgIk1hdGNoZWQgd2l0aCBSRUdfTk9TVUJcbiIpOworICBlbHNlIGlmIChkYXRfZGF0Y3RsLm92ZWNjb3VudCA9PSAwKQorICAgIGZwcmludGYob3V0ZmlsZSwgIk1hdGNoZWQgd2l0aG91dCBjYXB0dXJlXG4iKTsKKyAgZWxzZQorICAgIHsKKyAgICBzaXplX3QgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgKHNpemVfdClkYXRfZGF0Y3RsLm92ZWNjb3VudDsgaSsrKQorICAgICAgeworICAgICAgaWYgKHBtYXRjaFtpXS5ybV9zbyA+PSAwKQorICAgICAgICB7CisgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIiUyZDogIiwgKGludClpKTsKKyAgICAgICAgUENIQVJTVihwcCwgcG1hdGNoW2ldLnJtX3NvLAorICAgICAgICAgIHBtYXRjaFtpXS5ybV9lbyAtIHBtYXRjaFtpXS5ybV9zbywgdXRmLCBvdXRmaWxlKTsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKyAgICAgICAgaWYgKChpID09IDAgJiYgKGRhdF9kYXRjdGwuY29udHJvbCAmIENUTF9BRlRFUlRFWFQpICE9IDApIHx8CisgICAgICAgICAgICAoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX0FMTEFGVEVSVEVYVCkgIT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiJTJkKyAiLCAoaW50KWkpOworICAgICAgICAgIFBDSEFSU1YocHAsIHBtYXRjaFtpXS5ybV9lbywgbGVuIC0gcG1hdGNoW2ldLnJtX2VvLAorICAgICAgICAgICAgdXRmLCBvdXRmaWxlKTsKKyAgICAgICAgICBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgZnJlZShwbWF0Y2gpOworICByZXR1cm4gUFJfT0s7CisgIH0KKyNlbmRpZiAgLyogU1VQUE9SVF9QQ1JFMl84ICovCisKKyAvKiBIYW5kbGUgbWF0Y2hpbmcgdmlhIHRoZSBuYXRpdmUgaW50ZXJmYWNlLiBDaGVjayBmb3IgY29uc2lzdGVuY3kgb2YKK21vZGlmaWVycy4gKi8KKworaWYgKChkYXRfZGF0Y3RsLmNvbnRyb2wgJiAoQ1RMX0RGQXxDVExfRklORExJTUlUUykpID09IChDVExfREZBfENUTF9GSU5ETElNSVRTKSkKKyAgeworICBmcHJpbnRmKG91dGZpbGUsICIqKiBGaW5kaW5nIG1hdGNoIGxpbWl0cyBpcyBub3QgcmVsZXZhbnQgZm9yIERGQSBtYXRjaGluZzogaWdub3JlZFxuIik7CisgIGRhdF9kYXRjdGwuY29udHJvbCAmPSB+Q1RMX0ZJTkRMSU1JVFM7CisgIH0KKworLyogQUxMVVNFRFRFWFQgaXMgbm90IHN1cHBvcnRlZCB3aXRoIEpJVCwgYnV0IEpJVCBpcyBub3QgdXNlZCB3aXRoIERGQQorbWF0Y2hpbmcsIGV2ZW4gaWYgdGhlIEpJVCBjb21waWxlciB3YXMgdXNlZC4gKi8KKworaWYgKChkYXRfZGF0Y3RsLmNvbnRyb2wgJiAoQ1RMX0FMTFVTRURURVhUfENUTF9ERkEpKSA9PSBDVExfQUxMVVNFRFRFWFQgJiYKKyAgICBGTEQoY29tcGlsZWRfY29kZSwgZXhlY3V0YWJsZV9qaXQpICE9IE5VTEwpCisgIHsKKyAgZnByaW50ZihvdXRmaWxlLCAiKiogU2hvd2luZyBhbGwgY29uc3VsdGVkIHRleHQgaXMgbm90IHN1cHBvcnRlZCBieSBKSVQ6IGlnbm9yZWRcbiIpOworICBkYXRfZGF0Y3RsLmNvbnRyb2wgJj0gfkNUTF9BTExVU0VEVEVYVDsKKyAgfQorCisvKiBIYW5kbGUgcGFzc2luZyB0aGUgc3ViamVjdCBhcyB6ZXJvLXRlcm1pbmF0ZWQuICovCisKK2lmICgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX1pFUk9fVEVSTUlOQVRFKSAhPSAwKQorICB1bGVuID0gUENSRTJfWkVST19URVJNSU5BVEVEOworCisvKiBUaGUgbnVsbGNvbnRleHQgbW9kaWZpZXIgaXMgdXNlZCB0byB0ZXN0IGNhbGxpbmcgcGNyZTJfW2ppdF9dbWF0Y2goKSB3aXRoIGEKK05VTEwgY29udGV4dC4gKi8KKwordXNlX2RhdF9jb250ZXh0ID0gKChkYXRfZGF0Y3RsLmNvbnRyb2wgJiBDVExfTlVMTENPTlRFWFQpICE9IDApPworICBOVUxMIDogUFRSKGRhdF9jb250ZXh0KTsKKworLyogRW5hYmxlIGRpc3BsYXkgb2YgbWFsbG9jL2ZyZWUgaWYgd2FudGVkLiAqLworCitzaG93X21lbW9yeSA9IChkYXRfZGF0Y3RsLmNvbnRyb2wgJiBDVExfTUVNT1JZKSAhPSAwOworCisvKiBDcmVhdGUgYW5kIGFzc2lnbiBhIEpJVCBzdGFjayBpZiByZXF1ZXN0ZWQuICovCisKK2lmIChkYXRfZGF0Y3RsLmppdHN0YWNrICE9IDApCisgIHsKKyAgaWYgKGRhdF9kYXRjdGwuaml0c3RhY2sgIT0gaml0X3N0YWNrX3NpemUpCisgICAgeworICAgIFBDUkUyX0pJVF9TVEFDS19GUkVFKGppdF9zdGFjayk7CisgICAgUENSRTJfSklUX1NUQUNLX0NSRUFURShqaXRfc3RhY2ssIDEsIGRhdF9kYXRjdGwuaml0c3RhY2sgKiAxMDI0LCBOVUxMKTsKKyAgICBqaXRfc3RhY2tfc2l6ZSA9IGRhdF9kYXRjdGwuaml0c3RhY2s7CisgICAgfQorICBQQ1JFMl9KSVRfU1RBQ0tfQVNTSUdOKGRhdF9jb250ZXh0LCBqaXRfY2FsbGJhY2ssIGppdF9zdGFjayk7CisgIH0KKworLyogT3IgZGUtYXNzaWduICovCisKK2Vsc2UgaWYgKGppdF9zdGFjayAhPSBOVUxMKQorICB7CisgIFBDUkUyX0pJVF9TVEFDS19BU1NJR04oZGF0X2NvbnRleHQsIE5VTEwsIE5VTEwpOworICBQQ1JFMl9KSVRfU1RBQ0tfRlJFRShqaXRfc3RhY2spOworICBqaXRfc3RhY2sgPSBOVUxMOworICBqaXRfc3RhY2tfc2l6ZSA9IDA7CisgIH0KKworLyogV2hlbiBubyBKSVQgc3RhY2sgaXMgYXNzaWduZWQsIHdlIG11c3QgZW5zdXJlIHRoYXQgdGhlcmUgaXMgYSBKSVQgY2FsbGJhY2sKK2lmIHdlIHdhbnQgdG8gdmVyaWZ5IHRoYXQgSklUIHdhcyBhY3R1YWxseSB1c2VkLiAqLworCitpZiAoKHBhdF9wYXRjdGwuY29udHJvbCAmIENUTF9KSVRWRVJJRlkpICE9IDAgJiYgaml0X3N0YWNrID09IE5VTEwpCisgICB7CisgICBQQ1JFMl9KSVRfU1RBQ0tfQVNTSUdOKGRhdF9jb250ZXh0LCBqaXRfY2FsbGJhY2ssIE5VTEwpOworICAgfQorCisvKiBBZGp1c3QgbWF0Y2hfZGF0YSBhY2NvcmRpbmcgdG8gc2l6ZSBvZiBvZmZzZXRzIHJlcXVpcmVkLiBBIHNpemUgb2YgemVybworY2F1c2VzIGEgbmV3IG1hdGNoIGRhdGEgYmxvY2sgdG8gYmUgb2J0YWluZWQgdGhhdCBleGFjdGx5IGZpdHMgdGhlIHBhdHRlcm4uICovCisKK2lmIChkYXRfZGF0Y3RsLm92ZWNjb3VudCA9PSAwKQorICB7CisgIFBDUkUyX01BVENIX0RBVEFfRlJFRShtYXRjaF9kYXRhKTsKKyAgUENSRTJfTUFUQ0hfREFUQV9DUkVBVEVfRlJPTV9QQVRURVJOKG1hdGNoX2RhdGEsIGNvbXBpbGVkX2NvZGUsIE5VTEwpOworICBQQ1JFMl9HRVRfT1ZFQ1RPUl9DT1VOVChtYXhfb3ZlY2NvdW50LCBtYXRjaF9kYXRhKTsKKyAgfQorZWxzZSBpZiAoZGF0X2RhdGN0bC5vdmVjY291bnQgPD0gbWF4X292ZWNjb3VudCkKKyAgeworICBTRVRGTEQobWF0Y2hfZGF0YSwgb3ZlY2NvdW50LCBkYXRfZGF0Y3RsLm92ZWNjb3VudCk7CisgIH0KK2Vsc2UKKyAgeworICBtYXhfb3ZlY2NvdW50ID0gZGF0X2RhdGN0bC5vdmVjY291bnQ7CisgIFBDUkUyX01BVENIX0RBVEFfRlJFRShtYXRjaF9kYXRhKTsKKyAgUENSRTJfTUFUQ0hfREFUQV9DUkVBVEUobWF0Y2hfZGF0YSwgbWF4X292ZWNjb3VudCwgTlVMTCk7CisgIH0KKworLyogUmVwbGFjZW1lbnQgcHJvY2Vzc2luZyBpcyBpZ25vcmVkIGZvciBERkEgbWF0Y2hpbmcuICovCisKK2lmIChkYXRfZGF0Y3RsLnJlcGxhY2VtZW50WzBdICE9IDAgJiYgKGRhdF9kYXRjdGwuY29udHJvbCAmIENUTF9ERkEpICE9IDApCisgIHsKKyAgZnByaW50ZihvdXRmaWxlLCAiKiogSWdub3JlZCBmb3IgREZBIG1hdGNoaW5nOiByZXBsYWNlXG4iKTsKKyAgZGF0X2RhdGN0bC5yZXBsYWNlbWVudFswXSA9IDA7CisgIH0KKworLyogSWYgYSByZXBsYWNlbWVudCBzdHJpbmcgaXMgcHJvdmlkZWQsIGNhbGwgcGNyZTJfc3Vic3RpdHV0ZSgpIGluc3RlYWQgb2Ygb25lCitvZiB0aGUgbWF0Y2hpbmcgZnVuY3Rpb25zLiBGaXJzdCB3ZSBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlcGxhY2VtZW50IHN0cmluZyB0bwordGhlIGFwcHJvcHJpYXRlIHdpZHRoLiAqLworCitpZiAoZGF0X2RhdGN0bC5yZXBsYWNlbWVudFswXSAhPSAwKQorICB7CisgIGludCByYzsKKyAgdWludDhfdCAqcHI7CisgIHVpbnQ4X3QgcmJ1ZmZlcltSRVBMQUNFX0JVRkZTSVpFXTsKKyAgdWludDhfdCBuYnVmZmVyW1JFUExBQ0VfQlVGRlNJWkVdOworICB1aW50MzJfdCB4b3B0aW9uczsKKyAgUENSRTJfU0laRSBybGVuLCBuc2l6ZSwgZXJyb3JvZmZzZXQ7CisgIEJPT0wgYmFkdXRmID0gRkFMU0U7CisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKKyAgdWludDhfdCAqcjggPSBOVUxMOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorICB1aW50MTZfdCAqcjE2ID0gTlVMTDsKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKyAgdWludDMyX3QgKnIzMiA9IE5VTEw7CisjZW5kaWYKKworICBpZiAodGltZWl0bSkKKyAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBUaW1pbmcgaXMgbm90IHN1cHBvcnRlZCB3aXRoIHJlcGxhY2U6IGlnbm9yZWRcbiIpOworCisgIHhvcHRpb25zID0gKCgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX0dMT0JBTCkgPT0gMCk/IDAgOgorICAgICAgICAgICAgICAgIFBDUkUyX1NVQlNUSVRVVEVfR0xPQkFMKSB8CisgICAgICAgICAgICAgKCgoZGF0X2RhdGN0bC5jb250cm9sMiAmIENUTDJfU1VCU1RJVFVURV9FWFRFTkRFRCkgPT0gMCk/IDAgOgorICAgICAgICAgICAgICAgIFBDUkUyX1NVQlNUSVRVVEVfRVhURU5ERUQpIHwKKyAgICAgICAgICAgICAoKChkYXRfZGF0Y3RsLmNvbnRyb2wyICYgQ1RMMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCkgPT0gMCk/IDAgOgorICAgICAgICAgICAgICAgIFBDUkUyX1NVQlNUSVRVVEVfT1ZFUkZMT1dfTEVOR1RIKSB8CisgICAgICAgICAgICAgKCgoZGF0X2RhdGN0bC5jb250cm9sMiAmIENUTDJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUKSA9PSAwKT8gMCA6CisgICAgICAgICAgICAgICAgUENSRTJfU1VCU1RJVFVURV9VTktOT1dOX1VOU0VUKSB8CisgICAgICAgICAgICAgKCgoZGF0X2RhdGN0bC5jb250cm9sMiAmIENUTDJfU1VCU1RJVFVURV9VTlNFVF9FTVBUWSkgPT0gMCk/IDAgOgorICAgICAgICAgICAgICAgIFBDUkUyX1NVQlNUSVRVVEVfVU5TRVRfRU1QVFkpOworCisgIFNFVENBU1RQVFIociwgcmJ1ZmZlcik7ICAvKiBTZXRzIHI4LCByMTYsIG9yIHIzMiwgYXMgYXBwcm9wcmlhdGUuICovCisgIHByID0gZGF0X2RhdGN0bC5yZXBsYWNlbWVudDsKKworICAvKiBJZiB0aGUgcmVwbGFjZW1lbnQgc3RhcnRzIHdpdGggJ1s8bnVtYmVyPl0nIHdlIGludGVycHJldCB0aGF0IGFzIGxlbmd0aAorICB2YWx1ZSBmb3IgdGhlIHJlcGxhY2VtZW50IGJ1ZmZlci4gKi8KKworICBuc2l6ZSA9IFJFUExBQ0VfQlVGRlNJWkUvY29kZV91bml0X3NpemU7CisgIGlmICgqcHIgPT0gJ1snKQorICAgIHsKKyAgICBQQ1JFMl9TSVpFIG4gPSAwOworICAgIHdoaWxlICgoYyA9ICooKytwcikpID49IENIQVJfMCAmJiBjIDw9IENIQVJfOSkgbiA9IG4gKiAxMCArIGMgLSBDSEFSXzA7CisgICAgaWYgKCpwcisrICE9ICddJykKKyAgICAgIHsKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIkJhZCBidWZmZXIgc2l6ZSBpbiByZXBsYWNlbWVudCBzdHJpbmdcbiIpOworICAgICAgcmV0dXJuIFBSX09LOworICAgICAgfQorICAgIGlmIChuID4gbnNpemUpCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICJSZXBsYWNlbWVudCBidWZmZXIgc2V0dGluZyAoJWx1KSBpcyB0b28gbGFyZ2UgIgorICAgICAgICAiKG1heCAlbHUpXG4iLCAodW5zaWduZWQgbG9uZyBpbnQpbiwgKHVuc2lnbmVkIGxvbmcgaW50KW5zaXplKTsKKyAgICAgIHJldHVybiBQUl9PSzsKKyAgICAgIH0KKyAgICBuc2l6ZSA9IG47CisgICAgfQorCisgIC8qIE5vdyBjb3B5IHRoZSByZXBsYWNlbWVudCBzdHJpbmcgdG8gYSBidWZmZXIgb2YgdGhlIGFwcHJvcHJpYXRlIHdpZHRoLiBObworICBlc2NhcGUgcHJvY2Vzc2luZyBpcyBkb25lIGZvciByZXBsYWNlbWVudHMuIEluIFVURiBtb2RlLCBjaGVjayBmb3IgYW4gaW52YWxpZAorICBVVEYtOCBpbnB1dCBzdHJpbmcsIGFuZCBpZiBpdCBpcyBpbnZhbGlkLCBqdXN0IGNvcHkgaXRzIGNvZGUgdW5pdHMgd2l0aG91dAorICBVVEYgaW50ZXJwcmV0YXRpb24uIFRoaXMgcHJvdmlkZXMgYSBtZWFucyBvZiBjaGVja2luZyB0aGF0IGFuIGludmFsaWQgc3RyaW5nCisgIGlzIGRldGVjdGVkLiBPdGhlcndpc2UsIFVURi04IGNhbiBiZSB1c2VkIHRvIGluY2x1ZGUgd2lkZSBjaGFyYWN0ZXJzIGluIGEKKyAgcmVwbGFjZW1lbnQuICovCisKKyAgaWYgKHV0ZikgYmFkdXRmID0gdmFsaWRfdXRmKHByLCBzdHJsZW4oKGNvbnN0IGNoYXIgKilwciksICZlcnJvcm9mZnNldCk7CisKKyAgLyogTm90IFVURiBvciBpbnZhbGlkIFVURi04OiBqdXN0IGNvcHkgdGhlIGNvZGUgdW5pdHMuICovCisKKyAgaWYgKCF1dGYgfHwgYmFkdXRmKQorICAgIHsKKyAgICB3aGlsZSAoKGMgPSAqcHIrKykgIT0gMCkKKyAgICAgIHsKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKKyAgICAgIGlmICh0ZXN0X21vZGUgPT0gUENSRThfTU9ERSkgKnI4KysgPSBjOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorICAgICAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkgKnIxNisrID0gYzsKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKyAgICAgIGlmICh0ZXN0X21vZGUgPT0gUENSRTMyX01PREUpICpyMzIrKyA9IGM7CisjZW5kaWYKKyAgICAgIH0KKyAgICB9CisKKyAgLyogVmFsaWQgVVRGLTggcmVwbGFjZW1lbnQgc3RyaW5nICovCisKKyAgZWxzZSB3aGlsZSAoKGMgPSAqcHIrKykgIT0gMCkKKyAgICB7CisgICAgaWYgKEhBU1VURjhFWFRSQUxFTihjKSkgeyBHRVRVVEY4SU5DKGMsIHByKTsgfQorCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84CisgICAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKSByOCArPSBvcmQydXRmOChjLCByOCk7CisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfMTYKKyAgICBpZiAodGVzdF9tb2RlID09IFBDUkUxNl9NT0RFKQorICAgICAgeworICAgICAgaWYgKGMgPj0gMHgxMDAwMHUpCisgICAgICAgIHsKKyAgICAgICAgYy09IDB4MTAwMDB1OworICAgICAgICAqcjE2KysgPSAweEQ4MDAgfCAoYyA+PiAxMCk7CisgICAgICAgICpyMTYrKyA9IDB4REMwMCB8IChjICYgMHgzZmYpOworICAgICAgICB9CisgICAgICBlbHNlICpyMTYrKyA9IGM7CisgICAgICB9CisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKyAgICBpZiAodGVzdF9tb2RlID09IFBDUkUzMl9NT0RFKSAqcjMyKysgPSBjOworI2VuZGlmCisgICAgfQorCisgIFNFVCgqciwgMCk7CisgIGlmICgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX1pFUk9fVEVSTUlOQVRFKSAhPSAwKQorICAgIHJsZW4gPSBQQ1JFMl9aRVJPX1RFUk1JTkFURUQ7CisgIGVsc2UKKyAgICBybGVuID0gKENBU1RWQVIodWludDhfdCAqLCByKSAtIHJidWZmZXIpL2NvZGVfdW5pdF9zaXplOworICBQQ1JFMl9TVUJTVElUVVRFKHJjLCBjb21waWxlZF9jb2RlLCBwcCwgdWxlbiwgZGF0X2RhdGN0bC5vZmZzZXQsCisgICAgZGF0X2RhdGN0bC5vcHRpb25zfHhvcHRpb25zLCBtYXRjaF9kYXRhLCBkYXRfY29udGV4dCwKKyAgICByYnVmZmVyLCBybGVuLCBuYnVmZmVyLCAmbnNpemUpOworCisgIGlmIChyYyA8IDApCisgICAgeworICAgIFBDUkUyX1NJWkUgbXNpemU7CisgICAgZnByaW50ZihvdXRmaWxlLCAiRmFpbGVkOiBlcnJvciAlZCIsIHJjKTsKKyAgICBpZiAocmMgIT0gUENSRTJfRVJST1JfTk9NRU1PUlkgJiYgbnNpemUgIT0gUENSRTJfVU5TRVQpCisgICAgICBmcHJpbnRmKG91dGZpbGUsICIgYXQgb2Zmc2V0ICVsZCBpbiByZXBsYWNlbWVudCIsIChsb25nIGludCluc2l6ZSk7CisgICAgZnByaW50ZihvdXRmaWxlLCAiOiAiKTsKKyAgICBQQ1JFMl9HRVRfRVJST1JfTUVTU0FHRShtc2l6ZSwgcmMsIHBidWZmZXIpOworICAgIFBDSEFSU1YoQ0FTVFZBUih2b2lkICosIHBidWZmZXIpLCAwLCBtc2l6ZSwgRkFMU0UsIG91dGZpbGUpOworICAgIGlmIChyYyA9PSBQQ1JFMl9FUlJPUl9OT01FTU9SWSAmJgorICAgICAgICAoeG9wdGlvbnMgJiBQQ1JFMl9TVUJTVElUVVRFX09WRVJGTE9XX0xFTkdUSCkgIT0gMCkKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIjogJWxkIGNvZGUgdW5pdHMgYXJlIG5lZWRlZCIsIChsb25nIGludCluc2l6ZSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIiUyZDogIiwgcmMpOworICAgIFBDSEFSU1YobmJ1ZmZlciwgMCwgbnNpemUsIHV0Ziwgb3V0ZmlsZSk7CisgICAgfQorCisgIGZwcmludGYob3V0ZmlsZSwgIlxuIik7CisgIH0gICAvKiBFbmQgb2Ygc3Vic3RpdHV0aW9uIGhhbmRsaW5nICovCisKKy8qIFdoZW4gYSByZXBsYWNlbWVudCBzdHJpbmcgaXMgbm90IHByb3ZpZGVkLCBydW4gYSBsb29wIGZvciBnbG9iYWwgbWF0Y2hpbmcKK3dpdGggb25lIG9mIHRoZSBiYXNpYyBtYXRjaGluZyBmdW5jdGlvbnMuICovCisKK2Vsc2UgZm9yIChnbWF0Y2hlZCA9IDA7OyBnbWF0Y2hlZCsrKQorICB7CisgIFBDUkUyX1NJWkUgajsKKyAgaW50IGNhcGNvdW50OworICBQQ1JFMl9TSVpFICpvdmVjdG9yOworICBQQ1JFMl9TSVpFIG92ZWNzYXZlWzJdOworCisgIG92ZWN0b3IgPSBGTEQobWF0Y2hfZGF0YSwgb3ZlY3Rvcik7CisKKyAgLyogQWZ0ZXIgdGhlIGZpcnN0IHRpbWUgcm91bmQgYSBnbG9iYWwgbG9vcCwgZm9yIGEgbm9ybWFsIGdsb2JhbCAoL2cpCisgIGl0ZXJhdGlvbiwgc2F2ZSB0aGUgY3VycmVudCBvdmVjdG9yWzAsMV0gc28gdGhhdCB3ZSBjYW4gY2hlY2sgdGhhdCB0aGV5IGRvCisgIGNoYW5nZSBlYWNoIHRpbWUuIE90aGVyd2lzZSBhIG1hdGNoaW5nIGJ1ZyB0aGF0IHJldHVybnMgdGhlIHNhbWUgc3RyaW5nCisgIGNhdXNlcyBhbiBpbmZpbml0ZSBsb29wLiBJdCBoYXMgaGFwcGVuZWQhICovCisKKyAgaWYgKGdtYXRjaGVkID4gMCAmJiAoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX0dMT0JBTCkgIT0gMCkKKyAgICB7CisgICAgb3ZlY3NhdmVbMF0gPSBvdmVjdG9yWzBdOworICAgIG92ZWNzYXZlWzFdID0gb3ZlY3RvclsxXTsKKyAgICB9CisKKyAgLyogRm9yIGFsdGdsb2JhbCAob3IgZmlyc3QgdGltZSByb3VuZCB0aGUgbG9vcCksIHNldCBhbiAidW5zZXQiIHZhbHVlLiAqLworCisgIGVsc2Ugb3ZlY3NhdmVbMF0gPSBvdmVjc2F2ZVsxXSA9IFBDUkUyX1VOU0VUOworCisgIC8qIEZpbGwgdGhlIG92ZWN0b3Igd2l0aCBqdW5rIHRvIGRldGVjdCBlbGVtZW50cyB0aGF0IGRvIG5vdCBnZXQgc2V0CisgIHdoZW4gdGhleSBzaG91bGQgYmUuICovCisKKyAgZm9yIChqID0gMDsgaiA8IDIqZGF0X2RhdGN0bC5vdmVjY291bnQ7IGorKykgb3ZlY3RvcltqXSA9IEpVTktfT0ZGU0VUOworCisgIC8qIFdoZW4gbWF0Y2hpbmcgaXMgdmlhIHBjcmUyX21hdGNoKCksIHdlIHdpbGwgZGV0ZWN0IHRoZSB1c2Ugb2YgSklUIHZpYSB0aGUKKyAgc3RhY2sgY2FsbGJhY2sgZnVuY3Rpb24uICovCisKKyAgaml0X3dhc191c2VkID0gKHBhdF9wYXRjdGwuY29udHJvbCAmIENUTF9KSVRGQVNUKSAhPSAwOworCisgIC8qIERvIHRpbWluZyBpZiByZXF1aXJlZC4gKi8KKworICBpZiAodGltZWl0bSA+IDApCisgICAgeworICAgIHJlZ2lzdGVyIGludCBpOworICAgIGNsb2NrX3Qgc3RhcnRfdGltZSwgdGltZV90YWtlbjsKKworICAgIGlmICgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX0RGQSkgIT0gMCkKKyAgICAgIHsKKyAgICAgIGlmICgoZGF0X2RhdGN0bC5vcHRpb25zICYgUENSRTJfREZBX1JFU1RBUlQpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiVGltaW5nIERGQSByZXN0YXJ0cyBpcyBub3Qgc3VwcG9ydGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIFBSX09LOworICAgICAgICB9CisgICAgICBpZiAoZGZhX3dvcmtzcGFjZSA9PSBOVUxMKQorICAgICAgICBkZmFfd29ya3NwYWNlID0gKGludCAqKW1hbGxvYyhERkFfV1NfRElNRU5TSU9OKnNpemVvZihpbnQpKTsKKyAgICAgIHN0YXJ0X3RpbWUgPSBjbG9jaygpOworICAgICAgZm9yIChpID0gMDsgaSA8IHRpbWVpdG07IGkrKykKKyAgICAgICAgeworICAgICAgICBQQ1JFMl9ERkFfTUFUQ0goY2FwY291bnQsIGNvbXBpbGVkX2NvZGUsIHBwLCB1bGVuLAorICAgICAgICAgIGRhdF9kYXRjdGwub2Zmc2V0LCBkYXRfZGF0Y3RsLm9wdGlvbnMgfCBnX25vdGVtcHR5LCBtYXRjaF9kYXRhLAorICAgICAgICAgIHVzZV9kYXRfY29udGV4dCwgZGZhX3dvcmtzcGFjZSwgREZBX1dTX0RJTUVOU0lPTik7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIGVsc2UgaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfSklURkFTVCkgIT0gMCkKKyAgICAgIHsKKyAgICAgIHN0YXJ0X3RpbWUgPSBjbG9jaygpOworICAgICAgZm9yIChpID0gMDsgaSA8IHRpbWVpdG07IGkrKykKKyAgICAgICAgeworICAgICAgICBQQ1JFMl9KSVRfTUFUQ0goY2FwY291bnQsIGNvbXBpbGVkX2NvZGUsIHBwLCB1bGVuLAorICAgICAgICAgIGRhdF9kYXRjdGwub2Zmc2V0LCBkYXRfZGF0Y3RsLm9wdGlvbnMgfCBnX25vdGVtcHR5LCBtYXRjaF9kYXRhLAorICAgICAgICAgIHVzZV9kYXRfY29udGV4dCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIHN0YXJ0X3RpbWUgPSBjbG9jaygpOworICAgICAgZm9yIChpID0gMDsgaSA8IHRpbWVpdG07IGkrKykKKyAgICAgICAgeworICAgICAgICBQQ1JFMl9NQVRDSChjYXBjb3VudCwgY29tcGlsZWRfY29kZSwgcHAsIHVsZW4sCisgICAgICAgICAgZGF0X2RhdGN0bC5vZmZzZXQsIGRhdF9kYXRjdGwub3B0aW9ucyB8IGdfbm90ZW1wdHksIG1hdGNoX2RhdGEsCisgICAgICAgICAgdXNlX2RhdF9jb250ZXh0KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIHRvdGFsX21hdGNoX3RpbWUgKz0gKHRpbWVfdGFrZW4gPSBjbG9jaygpIC0gc3RhcnRfdGltZSk7CisgICAgZnByaW50ZihvdXRmaWxlLCAiTWF0Y2ggdGltZSAlLjRmIG1pbGxpc2Vjb25kc1xuIiwKKyAgICAgICgoKGRvdWJsZSl0aW1lX3Rha2VuICogMTAwMC4wKSAvIChkb3VibGUpdGltZWl0bSkgLworICAgICAgICAoZG91YmxlKUNMT0NLU19QRVJfU0VDKTsKKyAgICB9CisKKyAgLyogRmluZCB0aGUgbWF0Y2ggYW5kIHJlY3Vyc2lvbiBsaW1pdHMgaWYgcmVxdWVzdGVkLiBUaGUgcmVjdXJzaW9uIGxpbWl0CisgIGlzIG5vdCByZWxldmFudCBmb3IgSklULiAqLworCisgIGlmICgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX0ZJTkRMSU1JVFMpICE9IDApCisgICAgeworICAgIGNhcGNvdW50ID0gY2hlY2tfbWF0Y2hfbGltaXQocHAsIHVsZW4sIFBDUkUyX0VSUk9SX01BVENITElNSVQsICJtYXRjaCIpOworICAgIGlmIChGTEQoY29tcGlsZWRfY29kZSwgZXhlY3V0YWJsZV9qaXQpID09IE5VTEwpCisgICAgICAodm9pZCljaGVja19tYXRjaF9saW1pdChwcCwgdWxlbiwgUENSRTJfRVJST1JfUkVDVVJTSU9OTElNSVQsCisgICAgICAgICJyZWN1cnNpb24iKTsKKyAgICB9CisKKyAgLyogT3RoZXJ3aXNlIGp1c3QgcnVuIGEgc2luZ2xlIG1hdGNoLCBzZXR0aW5nIHVwIGEgY2FsbG91dCBpZiByZXF1aXJlZCAodGhlCisgIGRlZmF1bHQpLiAqLworCisgIGVsc2UKKyAgICB7CisgICAgaWYgKChkYXRfZGF0Y3RsLmNvbnRyb2wgJiBDVExfQ0FMTE9VVF9OT05FKSA9PSAwKQorICAgICAgeworICAgICAgUENSRTJfU0VUX0NBTExPVVQoZGF0X2NvbnRleHQsIGNhbGxvdXRfZnVuY3Rpb24sCisgICAgICAgICh2b2lkICopKCZkYXRfZGF0Y3RsLmNhbGxvdXRfZGF0YSkpOworICAgICAgZmlyc3RfY2FsbG91dCA9IFRSVUU7CisgICAgICBsYXN0X2NhbGxvdXRfbWFyayA9IE5VTEw7CisgICAgICBjYWxsb3V0X2NvdW50ID0gMDsKKyAgICAgIH0KKyAgICBlbHNlCisgICAgICB7CisgICAgICBQQ1JFMl9TRVRfQ0FMTE9VVChkYXRfY29udGV4dCwgTlVMTCwgTlVMTCk7ICAvKiBObyBjYWxsb3V0ICovCisgICAgICB9CisKKyAgICAvKiBSdW4gYSBzaW5nbGUgREZBIG9yIE5GQSBtYXRjaC4gKi8KKworICAgIGlmICgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX0RGQSkgIT0gMCkKKyAgICAgIHsKKyAgICAgIGlmIChkZmFfd29ya3NwYWNlID09IE5VTEwpCisgICAgICAgIGRmYV93b3Jrc3BhY2UgPSAoaW50ICopbWFsbG9jKERGQV9XU19ESU1FTlNJT04qc2l6ZW9mKGludCkpOworICAgICAgaWYgKGRmYV9tYXRjaGVkKysgPT0gMCkKKyAgICAgICAgZGZhX3dvcmtzcGFjZVswXSA9IC0xOyAgLyogVG8gY2F0Y2ggYmFkIHJlc3RhcnQgKi8KKyAgICAgIFBDUkUyX0RGQV9NQVRDSChjYXBjb3VudCwgY29tcGlsZWRfY29kZSwgcHAsIHVsZW4sCisgICAgICAgIGRhdF9kYXRjdGwub2Zmc2V0LCBkYXRfZGF0Y3RsLm9wdGlvbnMgfCBnX25vdGVtcHR5LCBtYXRjaF9kYXRhLAorICAgICAgICB1c2VfZGF0X2NvbnRleHQsIGRmYV93b3Jrc3BhY2UsIERGQV9XU19ESU1FTlNJT04pOworICAgICAgaWYgKGNhcGNvdW50ID09IDApCisgICAgICAgIHsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiTWF0Y2hlZCwgYnV0IG9mZnNldHMgdmVjdG9yIGlzIHRvbyBzbWFsbCB0byBzaG93IGFsbCBtYXRjaGVzXG4iKTsKKyAgICAgICAgY2FwY291bnQgPSBkYXRfZGF0Y3RsLm92ZWNjb3VudDsKKyAgICAgICAgfQorICAgICAgfQorICAgIGVsc2UKKyAgICAgIHsKKyAgICAgIGlmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX0pJVEZBU1QpICE9IDApCisgICAgICAgIFBDUkUyX0pJVF9NQVRDSChjYXBjb3VudCwgY29tcGlsZWRfY29kZSwgcHAsIHVsZW4sIGRhdF9kYXRjdGwub2Zmc2V0LAorICAgICAgICAgIGRhdF9kYXRjdGwub3B0aW9ucyB8IGdfbm90ZW1wdHksIG1hdGNoX2RhdGEsIHVzZV9kYXRfY29udGV4dCk7CisgICAgICBlbHNlCisgICAgICAgIFBDUkUyX01BVENIKGNhcGNvdW50LCBjb21waWxlZF9jb2RlLCBwcCwgdWxlbiwgZGF0X2RhdGN0bC5vZmZzZXQsCisgICAgICAgICAgZGF0X2RhdGN0bC5vcHRpb25zIHwgZ19ub3RlbXB0eSwgbWF0Y2hfZGF0YSwgdXNlX2RhdF9jb250ZXh0KTsKKyAgICAgIGlmIChjYXBjb3VudCA9PSAwKQorICAgICAgICB7CisgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIk1hdGNoZWQsIGJ1dCB0b28gbWFueSBzdWJzdHJpbmdzXG4iKTsKKyAgICAgICAgY2FwY291bnQgPSBkYXRfZGF0Y3RsLm92ZWNjb3VudDsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKworICAvKiBUaGUgcmVzdWx0IG9mIHRoZSBtYXRjaCBpcyBub3cgaW4gY2FwY291bnQuIEZpcnN0IGhhbmRsZSBhIHN1Y2Nlc3NmdWwKKyAgbWF0Y2guICovCisKKyAgaWYgKGNhcGNvdW50ID49IDApCisgICAgeworICAgIGludCBpOworICAgIHVpbnQzMl90IG92ZWNjb3VudDsKKworICAgIC8qIFRoaXMgaXMgYSBjaGVjayBhZ2FpbnN0IGEgbHVuYXRpYyByZXR1cm4gdmFsdWUuICovCisKKyAgICBQQ1JFMl9HRVRfT1ZFQ1RPUl9DT1VOVChvdmVjY291bnQsIG1hdGNoX2RhdGEpOworICAgIGlmIChjYXBjb3VudCA+IChpbnQpb3ZlY2NvdW50KQorICAgICAgeworICAgICAgZnByaW50ZihvdXRmaWxlLAorICAgICAgICAiKiogUENSRTIgZXJyb3I6IHJldHVybmVkIGNvdW50ICVkIGlzIHRvbyBiaWcgZm9yIG92ZWN0b3IgY291bnQgJWRcbiIsCisgICAgICAgIGNhcGNvdW50LCBvdmVjY291bnQpOworICAgICAgY2FwY291bnQgPSBvdmVjY291bnQ7CisgICAgICBpZiAoKGRhdF9kYXRjdGwuY29udHJvbCAmIENUTF9BTllHTE9CKSAhPSAwKQorICAgICAgICB7CisgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIioqIEdsb2JhbCBsb29wIGFiYW5kb25lZFxuIik7CisgICAgICAgIGRhdF9kYXRjdGwuY29udHJvbCAmPSB+Q1RMX0FOWUdMT0I7ICAgICAgICAvKiBCcmVhayBnL0cgbG9vcCAqLworICAgICAgICB9CisgICAgICB9CisKKyAgICAvKiBJZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgdGltZSByb3VuZCBhIGdsb2JhbCBsb29wLCBjaGVjayB0aGF0IHRoZQorICAgIHJldHVybmVkIHN0cmluZyBoYXMgY2hhbmdlZC4gSWYgbm90LCB0aGVyZSBpcyBhIGJ1ZyBzb21ld2hlcmUgYW5kIHdlIG11c3QKKyAgICBicmVhayB0aGUgbG9vcCBiZWNhdXNlIGl0IHdpbGwgZ28gb24gZm9yIGV2ZXIuIFdlIGtub3cgdGhhdCB0aGVyZSBhcmUKKyAgICBhbHdheXMgYXQgbGVhc3QgdHdvIGVsZW1lbnRzIGluIHRoZSBvdmVjdG9yLiAqLworCisgICAgaWYgKGdtYXRjaGVkID4gMCAmJiBvdmVjc2F2ZVswXSA9PSBvdmVjdG9yWzBdICYmIG92ZWNzYXZlWzFdID09IG92ZWN0b3JbMV0pCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsCisgICAgICAgICIqKiBQQ1JFMiBlcnJvcjogZ2xvYmFsIHJlcGVhdCByZXR1cm5lZCB0aGUgc2FtZSBzdHJpbmcgYXMgcHJldmlvdXNcbiIpOworICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogR2xvYmFsIGxvb3AgYWJhbmRvbmVkXG4iKTsKKyAgICAgIGRhdF9kYXRjdGwuY29udHJvbCAmPSB+Q1RMX0FOWUdMT0I7ICAgICAgICAvKiBCcmVhayBnL0cgbG9vcCAqLworICAgICAgfQorCisgICAgLyogImFsbGNhcHR1cmVzIiByZXF1ZXN0cyBzaG93aW5nIG9mIGFsbCBjYXB0dXJlcyBpbiB0aGUgcGF0dGVybiwgdG8gY2hlY2sKKyAgICB1bnNldCBvbmVzIGF0IHRoZSBlbmQuIEl0IG1heSBiZSBzZXQgb24gdGhlIHBhdHRlcm4gb3IgdGhlIGRhdGEuIEltcGxlbWVudAorICAgIGJ5IHNldHRpbmcgY2FwY291bnQgdG8gdGhlIG1heGltdW0uICovCisKKyAgICBpZiAoKGRhdF9kYXRjdGwuY29udHJvbCAmIENUTF9BTExDQVBUVVJFUykgIT0gMCkKKyAgICAgIHsKKyAgICAgIHVpbnQzMl90IG1heGNhcGNvdW50OworICAgICAgaWYgKHBhdHRlcm5faW5mbyhQQ1JFMl9JTkZPX0NBUFRVUkVDT1VOVCwgJm1heGNhcGNvdW50LCBGQUxTRSkgPCAwKQorICAgICAgICByZXR1cm4gUFJfU0tJUDsKKyAgICAgIGNhcGNvdW50ID0gbWF4Y2FwY291bnQgKyAxOyAgIC8qIEFsbG93IGZvciBmdWxsIG1hdGNoICovCisgICAgICBpZiAoY2FwY291bnQgPiAoaW50KW92ZWNjb3VudCkgY2FwY291bnQgPSBvdmVjY291bnQ7CisgICAgICB9CisKKyAgICAvKiBPdXRwdXQgdGhlIGNhcHR1cmVkIHN1YnN0cmluZ3MuIE5vdGUgdGhhdCwgZm9yIHRoZSBtYXRjaGVkIHN0cmluZywKKyAgICB0aGUgdXNlIG9mIFxLIGluIGFuIGFzc2VydGlvbiBjYW4gbWFrZSB0aGUgc3RhcnQgbGF0ZXIgdGhhbiB0aGUgZW5kLiAqLworCisgICAgZm9yIChpID0gMDsgaSA8IDIqY2FwY291bnQ7IGkgKz0gMikKKyAgICAgIHsKKyAgICAgIFBDUkUyX1NJWkUgbGxlZnQsIGxtaWRkbGUsIGxyaWdodDsKKyAgICAgIFBDUkUyX1NJWkUgc3RhcnQgPSBvdmVjdG9yW2ldOworICAgICAgUENSRTJfU0laRSBlbmQgPSBvdmVjdG9yW2krMV07CisKKyAgICAgIGlmIChzdGFydCA+IGVuZCkKKyAgICAgICAgeworICAgICAgICBzdGFydCA9IG92ZWN0b3JbaSsxXTsKKyAgICAgICAgZW5kID0gb3ZlY3RvcltpXTsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiU3RhcnQgb2YgbWF0Y2hlZCBzdHJpbmcgaXMgYmV5b25kIGl0cyBlbmQgLSAiCisgICAgICAgICAgImRpc3BsYXlpbmcgZnJvbSBlbmQgdG8gc3RhcnQuXG4iKTsKKyAgICAgICAgfQorCisgICAgICBmcHJpbnRmKG91dGZpbGUsICIlMmQ6ICIsIGkvMik7CisKKyAgICAgIC8qIENoZWNrIGZvciBhbiB1bnNldCBncm91cCAqLworCisgICAgICBpZiAoc3RhcnQgPT0gUENSRTJfVU5TRVQpCisgICAgICAgIHsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiPHVuc2V0PlxuIik7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgIC8qIENoZWNrIGZvciBzaWxseSBvZmZzZXRzLCBpbiBwYXJ0aWN1bGFyLCB2YWx1ZXMgdGhhdCBoYXZlIG5vdCBiZWVuCisgICAgICBzZXQgd2hlbiB0aGV5IHNob3VsZCBoYXZlIGJlZW4uICovCisKKyAgICAgIGlmIChzdGFydCA+IHVsZW4gfHwgZW5kID4gdWxlbikKKyAgICAgICAgeworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICJFUlJPUjogYmFkIHZhbHVlKHMpIGZvciBvZmZzZXQocyk6IDB4JWx4IDB4JWx4XG4iLAorICAgICAgICAgICh1bnNpZ25lZCBsb25nIGludClzdGFydCwgKHVuc2lnbmVkIGxvbmcgaW50KWVuZCk7CisgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgIC8qIFdoZW4gSklUIGlzIG5vdCBiZWluZyB1c2VkLCBBTExVU0VEVEVYVCBtYXkgYmUgc2V0LiAoSXQgaWYgaXMgc2V0IHdpdGgKKyAgICAgIEpJVCwgaXQgaXMgZGlzYWJsZWQgYWJvdmUsIHdpdGggYSBjb21tZW50LikgV2hlbiB0aGUgbWF0Y2ggaXMgZG9uZSBieSB0aGUKKyAgICAgIGludGVycHJldGVyLCBsZWZ0Y2hhciBhbmQgcmlnaHRjaGFyIGFyZSBhdmFpbGFibGUsIGFuZCBpZiBBTExVU0VEVEVYVCBpcworICAgICAgc2V0LCBhbmQgaWYgdGhlIGxlZnRtb3N0IGNvbnN1bHRlZCBjaGFyYWN0ZXIgaXMgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUKKyAgICAgIG1hdGNoIG9yIHRoZSByaWdodG1vc3QgY29uc3VsdGVkIGNoYXJhY3RlciBpcyBwYXN0IHRoZSBlbmQgb2YgdGhlIG1hdGNoLAorICAgICAgd2Ugd2FudCB0byBzaG93IGFsbCBjb25zdWx0ZWQgY2hhcmFjdGVycyBmb3IgdGhlIG1haW4gbWF0Y2hlZCBzdHJpbmcsIGFuZAorICAgICAgaW5kaWNhdGUgd2hpY2ggd2VyZSBsb29rYXJvdW5kcy4gKi8KKworICAgICAgaWYgKGkgPT0gMCkKKyAgICAgICAgeworICAgICAgICBCT09MIHNob3dhbGx1c2VkOworICAgICAgICBQQ1JFMl9TSVpFIGxlZnRjaGFyLCByaWdodGNoYXI7CisKKyAgICAgICAgaWYgKChkYXRfZGF0Y3RsLmNvbnRyb2wgJiBDVExfQUxMVVNFRFRFWFQpICE9IDApCisgICAgICAgICAgeworICAgICAgICAgIGxlZnRjaGFyID0gRkxEKG1hdGNoX2RhdGEsIGxlZnRjaGFyKTsKKyAgICAgICAgICByaWdodGNoYXIgPSBGTEQobWF0Y2hfZGF0YSwgcmlnaHRjaGFyKTsKKyAgICAgICAgICBzaG93YWxsdXNlZCA9IGkgPT0gMCAmJiAobGVmdGNoYXIgPCBzdGFydCB8fCByaWdodGNoYXIgPiBlbmQpOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZSBzaG93YWxsdXNlZCA9IEZBTFNFOworCisgICAgICAgIGlmIChzaG93YWxsdXNlZCkKKyAgICAgICAgICB7CisgICAgICAgICAgUENIQVJTKGxsZWZ0LCBwcCwgbGVmdGNoYXIsIHN0YXJ0IC0gbGVmdGNoYXIsIHV0Ziwgb3V0ZmlsZSk7CisgICAgICAgICAgUENIQVJTKGxtaWRkbGUsIHBwLCBzdGFydCwgZW5kIC0gc3RhcnQsIHV0Ziwgb3V0ZmlsZSk7CisgICAgICAgICAgUENIQVJTKGxyaWdodCwgcHAsIGVuZCwgcmlnaHRjaGFyIC0gZW5kLCB1dGYsIG91dGZpbGUpOworICAgICAgICAgIGlmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX0pJVFZFUklGWSkgIT0gMCAmJiBqaXRfd2FzX3VzZWQpCisgICAgICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIgKEpJVCkiKTsKKyAgICAgICAgICBmcHJpbnRmKG91dGZpbGUsICJcbiAgICAiKTsKKyAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGxlZnQ7IGorKykgZnByaW50ZihvdXRmaWxlLCAiPCIpOworICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsbWlkZGxlOyBqKyspIGZwcmludGYob3V0ZmlsZSwgIiAiKTsKKyAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbHJpZ2h0OyBqKyspIGZwcmludGYob3V0ZmlsZSwgIj4iKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgLyogV2hlbiBhIHBhdHRlcm4gY29udGFpbnMgXEssIHRoZSBzdGFydCBvZiBtYXRjaCBwb3NpdGlvbiBtYXkgYmUKKyAgICAgICAgZGlmZmVyZW50IHRvIHRoZSBzdGFydCBvZiB0aGUgbWF0Y2hlZCBzdHJpbmcuIFdoZW4gdGhpcyBpcyB0aGUgY2FzZSwKKyAgICAgICAgc2hvdyBpdCB3aGVuIHJlcXVlc3RlZC4gKi8KKworICAgICAgICBlbHNlIGlmICgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX1NUQVJUQ0hBUikgIT0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgUENSRTJfU0laRSBzdGFydGNoYXI7CisgICAgICAgICAgUENSRTJfR0VUX1NUQVJUQ0hBUihzdGFydGNoYXIsIG1hdGNoX2RhdGEpOworICAgICAgICAgIFBDSEFSUyhsbGVmdCwgcHAsIHN0YXJ0Y2hhciwgc3RhcnQgLSBzdGFydGNoYXIsIHV0Ziwgb3V0ZmlsZSk7CisgICAgICAgICAgUENIQVJTVihwcCwgc3RhcnQsIGVuZCAtIHN0YXJ0LCB1dGYsIG91dGZpbGUpOworICAgICAgICAgIGlmICgocGF0X3BhdGN0bC5jb250cm9sICYgQ1RMX0pJVFZFUklGWSkgIT0gMCAmJiBqaXRfd2FzX3VzZWQpCisgICAgICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIgKEpJVCkiKTsKKyAgICAgICAgICBpZiAoc3RhcnRjaGFyICE9IHN0YXJ0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiXG4gICAgIik7CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGxlZnQ7IGorKykgZnByaW50ZihvdXRmaWxlLCAiXiIpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKworICAgICAgICAvKiBPdGhlcndpc2UsIGp1c3Qgc2hvdyB0aGUgbWF0Y2hlZCBzdHJpbmcuICovCisKKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICBQQ0hBUlNWKHBwLCBzdGFydCwgZW5kIC0gc3RhcnQsIHV0Ziwgb3V0ZmlsZSk7CisgICAgICAgICAgaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfSklUVkVSSUZZKSAhPSAwICYmIGppdF93YXNfdXNlZCkKKyAgICAgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIiAoSklUKSIpOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAvKiBOb3QgdGhlIG1haW4gbWF0Y2hlZCBzdHJpbmcuIEp1c3Qgc2hvdyBpdCB1bmFkb3JuZWQuICovCisKKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICBQQ0hBUlNWKHBwLCBzdGFydCwgZW5kIC0gc3RhcnQsIHV0Ziwgb3V0ZmlsZSk7CisgICAgICAgIH0KKworICAgICAgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKworICAgICAgLyogTm90ZTogZG9uJ3QgdXNlIHRoZSBzdGFydC9lbmQgdmFyaWFibGVzIGhlcmUgYmVjYXVzZSB3ZSB3YW50IHRvCisgICAgICBzaG93IHRoZSB0ZXh0IGZyb20gd2hhdCBpcyByZXBvcnRlZCBhcyB0aGUgZW5kLiAqLworCisgICAgICBpZiAoKGRhdF9kYXRjdGwuY29udHJvbCAmIENUTF9BTExBRlRFUlRFWFQpICE9IDAgfHwKKyAgICAgICAgICAoaSA9PSAwICYmIChkYXRfZGF0Y3RsLmNvbnRyb2wgJiBDVExfQUZURVJURVhUKSAhPSAwKSkKKyAgICAgICAgeworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIlMmQrICIsIGkvMik7CisgICAgICAgIFBDSEFSU1YocHAsIG92ZWN0b3JbaSsxXSwgdWxlbiAtIG92ZWN0b3JbaSsxXSwgdXRmLCBvdXRmaWxlKTsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogT3V0cHV0ICgqTUFSSykgZGF0YSBpZiByZXF1ZXN0ZWQgKi8KKworICAgIGlmICgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX01BUkspICE9IDAgJiYKKyAgICAgICAgIFRFU1RGTEQobWF0Y2hfZGF0YSwgbWFyaywgIT0sIE5VTEwpKQorICAgICAgeworICAgICAgZnByaW50ZihvdXRmaWxlLCAiTUs6ICIpOworICAgICAgUENIQVJTVihDQVNURkxEKHZvaWQgKiwgbWF0Y2hfZGF0YSwgbWFyayksIDAsIC0xLCB1dGYsIG91dGZpbGUpOworICAgICAgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKyAgICAgIH0KKworICAgIC8qIFByb2Nlc3MgY29weS9nZXQgc3RyaW5ncyAqLworCisgICAgY29weV9hbmRfZ2V0KHV0ZiwgY2FwY291bnQpOworCisgICAgfSAgICAvKiBFbmQgb2YgaGFuZGxpbmcgYSBzdWNjZXNzZnVsIG1hdGNoICovCisKKyAgLyogVGhlcmUgd2FzIGEgcGFydGlhbCBtYXRjaC4gVGhlIHZhbHVlIG9mIG92ZWN0b3JbMF0gaXMgdGhlIGJ1bXBhbG9uZyBwb2ludCwKKyAgdGhhdCBpcywgc3RhcnRjaGFyLCBub3QgYW55IFxLIHBvaW50IHRoYXQgbWlnaHQgaGF2ZSBiZWVuIHBhc3NlZC4gKi8KKworICBlbHNlIGlmIChjYXBjb3VudCA9PSBQQ1JFMl9FUlJPUl9QQVJUSUFMKQorICAgIHsKKyAgICBQQ1JFMl9TSVpFIHBvZmZzZXQ7CisgICAgaW50IGJhY2tsZW5ndGg7CisgICAgaW50IHJ1YnJpY2xlbmd0aCA9IDA7CisKKyAgICBmcHJpbnRmKG91dGZpbGUsICJQYXJ0aWFsIG1hdGNoIik7CisgICAgaWYgKChkYXRfZGF0Y3RsLmNvbnRyb2wgJiBDVExfTUFSSykgIT0gMCAmJgorICAgICAgICAgVEVTVEZMRChtYXRjaF9kYXRhLCBtYXJrLCAhPSwgTlVMTCkpCisgICAgICB7CisgICAgICBmcHJpbnRmKG91dGZpbGUsICIsIG1hcms9Iik7CisgICAgICBQQ0hBUlMocnVicmljbGVuZ3RoLCBDQVNURkxEKHZvaWQgKiwgbWF0Y2hfZGF0YSwgbWFyayksIDAsIC0xLCB1dGYsCisgICAgICAgIG91dGZpbGUpOworICAgICAgcnVicmljbGVuZ3RoICs9IDc7CisgICAgICB9CisgICAgZnByaW50ZihvdXRmaWxlLCAiOiAiKTsKKyAgICBydWJyaWNsZW5ndGggKz0gMTU7CisKKyAgICBwb2Zmc2V0ID0gYmFja2NoYXJzKHBwLCBvdmVjdG9yWzBdLCBtYXhsb29rYmVoaW5kLCB1dGYpOworICAgIFBDSEFSUyhiYWNrbGVuZ3RoLCBwcCwgcG9mZnNldCwgb3ZlY3RvclswXSAtIHBvZmZzZXQsIHV0Ziwgb3V0ZmlsZSk7CisgICAgUENIQVJTVihwcCwgb3ZlY3RvclswXSwgdWxlbiAtIG92ZWN0b3JbMF0sIHV0Ziwgb3V0ZmlsZSk7CisKKyAgICBpZiAoKHBhdF9wYXRjdGwuY29udHJvbCAmIENUTF9KSVRWRVJJRlkpICE9IDAgJiYgaml0X3dhc191c2VkKQorICAgICAgZnByaW50ZihvdXRmaWxlLCAiIChKSVQpIik7CisgICAgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKworICAgIGlmIChiYWNrbGVuZ3RoICE9IDApCisgICAgICB7CisgICAgICBpbnQgaTsKKyAgICAgIGZvciAoaSA9IDA7IGkgPCBydWJyaWNsZW5ndGg7IGkrKykgZnByaW50ZihvdXRmaWxlLCAiICIpOworICAgICAgZm9yIChpID0gMDsgaSA8IGJhY2tsZW5ndGg7IGkrKykgZnByaW50ZihvdXRmaWxlLCAiPCIpOworICAgICAgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKyAgICAgIH0KKworICAgIC8qIFByb2Nlc3MgY29weS9nZXQgc3RyaW5ncyAqLworCisgICAgY29weV9hbmRfZ2V0KHV0ZiwgMSk7CisKKyAgICBicmVhazsgIC8qIE91dCBvZiB0aGUgL2cgbG9vcCAqLworICAgIH0gICAgICAgLyogRW5kIG9mIGhhbmRsaW5nIHBhcnRpYWwgbWF0Y2ggKi8KKworICAvKiBGYWlsZWQgdG8gbWF0Y2guIElmIHRoaXMgaXMgYSAvZyBvciAvRyBsb29wLCB3ZSBtaWdodCBwcmV2aW91c2x5IGhhdmUKKyAgc2V0IGdfbm90ZW1wdHkgKHRvIFBDUkUyX05PVEVNUFRZX0FUU1RBUlR8UENSRTJfQU5DSE9SRUQpIGFmdGVyIGEgbnVsbCBtYXRjaC4KKyAgSWYgdGhhdCBpcyB0aGUgY2FzZSwgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGVuZC4gV2Ugd2FudCB0byBhZHZhbmNlIHRoZQorICBzdGFydCBvZmZzZXQsIGFuZCBjb250aW51ZS4gV2Ugd29uJ3QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nIC0gdGhhdCB3YXMKKyAgY2hlY2tlZCBiZWZvcmUgc2V0dGluZyBnX25vdGVtcHR5LiBXZSBhY2hpZXZlIHRoZSBlZmZlY3QgYnkgcHJldGVuZGluZyB0aGF0IGEKKyAgc2luZ2xlIGNoYXJhY3RlciB3YXMgbWF0Y2hlZC4KKworICBDb21wbGljYXRpb24gYXJpc2VzIGluIHRoZSBjYXNlIHdoZW4gdGhlIG5ld2xpbmUgY29udmVudGlvbiBpcyAiYW55IiwgImNybGYiLAorICBvciAiYW55Y3JsZiIuIElmIHRoZSBwcmV2aW91cyBtYXRjaCB3YXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUgdGVybWluYXRlZCBieQorICBDUkxGLCBhbiBhZHZhbmNlIG9mIG9uZSBjaGFyYWN0ZXIganVzdCBwYXNzZXMgdGhlIENSLCB3aGVyZWFzIHdlIHNob3VsZAorICBwcmVmZXIgdGhlIGxvbmdlciBuZXdsaW5lIHNlcXVlbmNlLCBhcyBkb2VzIHRoZSBjb2RlIGluIHBjcmUyX21hdGNoKCkuCisKKyAgT3RoZXJ3aXNlLCBpbiB0aGUgY2FzZSBvZiBVVEYtOCBvciBVVEYtMTYgbWF0Y2hpbmcsIHRoZSBhZHZhbmNlIG11c3QgYmUgb25lCisgIGNoYXJhY3Rlciwgbm90IG9uZSBieXRlLiAqLworCisgIGVsc2UgaWYgKGdfbm90ZW1wdHkgIT0gMCkgICAvKiBUaGVyZSB3YXMgYSBwcmV2aW91cyBudWxsIG1hdGNoICovCisgICAgeworICAgIHVpbnQxNl90IG5sID0gRkxEKGNvbXBpbGVkX2NvZGUsIG5ld2xpbmVfY29udmVudGlvbik7CisgICAgUENSRTJfU0laRSBzdGFydF9vZmZzZXQgPSBkYXRfZGF0Y3RsLm9mZnNldDsgICAgLyogV2hlcmUgdGhlIG1hdGNoIHdhcyAqLworICAgIFBDUkUyX1NJWkUgZW5kX29mZnNldCA9IHN0YXJ0X29mZnNldCArIDE7CisKKyAgICBpZiAoKG5sID09IFBDUkUyX05FV0xJTkVfQ1JMRiB8fCBubCA9PSBQQ1JFMl9ORVdMSU5FX0FOWSB8fAorICAgICAgICAgbmwgPT0gUENSRTJfTkVXTElORV9BTllDUkxGKSAmJgorICAgICAgICBzdGFydF9vZmZzZXQgPCB1bGVuIC0gMSAmJgorICAgICAgICBDT0RFX1VOSVQocHAsIHN0YXJ0X29mZnNldCkgPT0gJ1xyJyAmJgorICAgICAgICBDT0RFX1VOSVQocHAsIGVuZF9vZmZzZXQpID09ICdcbicpCisgICAgICBlbmRfb2Zmc2V0Kys7CisKKyAgICBlbHNlIGlmICh1dGYgJiYgdGVzdF9tb2RlICE9IFBDUkUzMl9NT0RFKQorICAgICAgeworICAgICAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKQorICAgICAgICB7CisgICAgICAgIGZvciAoOyBlbmRfb2Zmc2V0IDwgdWxlbjsgZW5kX29mZnNldCsrKQorICAgICAgICAgIGlmICgoKChQQ1JFMl9TUFRSOClwcClbZW5kX29mZnNldF0gJiAweGMwKSAhPSAweDgwKSBicmVhazsKKyAgICAgICAgfQorICAgICAgZWxzZSAgLyogMTYtYml0IG1vZGUgKi8KKyAgICAgICAgeworICAgICAgICBmb3IgKDsgZW5kX29mZnNldCA8IHVsZW47IGVuZF9vZmZzZXQrKykKKyAgICAgICAgICBpZiAoKCgoUENSRTJfU1BUUjE2KXBwKVtlbmRfb2Zmc2V0XSAmIDB4ZmMwMCkgIT0gMHhkYzAwKSBicmVhazsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgU0VURkxEVkVDKG1hdGNoX2RhdGEsIG92ZWN0b3IsIDAsIHN0YXJ0X29mZnNldCk7CisgICAgU0VURkxEVkVDKG1hdGNoX2RhdGEsIG92ZWN0b3IsIDEsIGVuZF9vZmZzZXQpOworICAgIH0gIC8qIEVuZCBvZiBoYW5kbGluZyBudWxsIG1hdGNoIGluIGEgZ2xvYmFsIGxvb3AgKi8KKworICAvKiBBICJub3JtYWwiIG1hdGNoIGZhaWx1cmUuIFRoZXJlIHdpbGwgYmUgYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIgaW4KKyAgY2FwY291bnQuICovCisKKyAgZWxzZQorICAgIHsKKyAgICBpbnQgbWxlbjsKKworICAgIHN3aXRjaChjYXBjb3VudCkKKyAgICAgIHsKKyAgICAgIGNhc2UgUENSRTJfRVJST1JfTk9NQVRDSDoKKyAgICAgIGlmIChnbWF0Y2hlZCA9PSAwKQorICAgICAgICB7CisgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIk5vIG1hdGNoIik7CisgICAgICAgIGlmICgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX01BUkspICE9IDAgJiYKKyAgICAgICAgICAgICBURVNURkxEKG1hdGNoX2RhdGEsIG1hcmssICE9LCBOVUxMKSkKKyAgICAgICAgICB7CisgICAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiLCBtYXJrID0gIik7CisgICAgICAgICAgUENIQVJTVihDQVNURkxEKHZvaWQgKiwgbWF0Y2hfZGF0YSwgbWFyayksIDAsIC0xLCB1dGYsIG91dGZpbGUpOworICAgICAgICAgIH0KKyAgICAgICAgaWYgKChwYXRfcGF0Y3RsLmNvbnRyb2wgJiBDVExfSklUVkVSSUZZKSAhPSAwICYmIGppdF93YXNfdXNlZCkKKyAgICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIgKEpJVCkiKTsKKyAgICAgICAgZnByaW50ZihvdXRmaWxlLCAiXG4iKTsKKyAgICAgICAgfQorICAgICAgYnJlYWs7CisKKyAgICAgIGNhc2UgUENSRTJfRVJST1JfQkFEVVRGT0ZGU0VUOgorICAgICAgZnByaW50ZihvdXRmaWxlLCAiRXJyb3IgJWQgKGJhZCBVVEYtJWQgb2Zmc2V0KVxuIiwgY2FwY291bnQsIHRlc3RfbW9kZSk7CisgICAgICBicmVhazsKKworICAgICAgZGVmYXVsdDoKKyAgICAgIGZwcmludGYob3V0ZmlsZSwgIkZhaWxlZDogZXJyb3IgJWQ6ICIsIGNhcGNvdW50KTsKKyAgICAgIFBDUkUyX0dFVF9FUlJPUl9NRVNTQUdFKG1sZW4sIGNhcGNvdW50LCBwYnVmZmVyKTsKKyAgICAgIFBDSEFSU1YoQ0FTVFZBUih2b2lkICosIHBidWZmZXIpLCAwLCBtbGVuLCBGQUxTRSwgb3V0ZmlsZSk7CisgICAgICBpZiAoY2FwY291bnQgPD0gUENSRTJfRVJST1JfVVRGOF9FUlIxICYmCisgICAgICAgICAgY2FwY291bnQgPj0gUENSRTJfRVJST1JfVVRGMzJfRVJSMikKKyAgICAgICAgeworICAgICAgICBQQ1JFMl9TSVpFIHN0YXJ0Y2hhcjsKKyAgICAgICAgUENSRTJfR0VUX1NUQVJUQ0hBUihzdGFydGNoYXIsIG1hdGNoX2RhdGEpOworICAgICAgICBmcHJpbnRmKG91dGZpbGUsICIgYXQgb2Zmc2V0ICVsdSIsICh1bnNpZ25lZCBsb25nIGludClzdGFydGNoYXIpOworICAgICAgICB9CisgICAgICBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworICAgICAgYnJlYWs7CisgICAgICB9CisKKyAgICBicmVhazsgIC8qIE91dCBvZiB0aGUgL2cgbG9vcCAqLworICAgIH0gICAgICAgLyogRW5kIG9mIGZhaWxlZCBtYXRjaCBoYW5kbGluZyAqLworCisgIC8qIENvbnRyb2wgcmVhY2hlcyBoZXJlIGluIHR3byBjaXJjdW1zdGFuY2VzOiAoYSkgYWZ0ZXIgYSBtYXRjaCwgYW5kIChiKQorICBhZnRlciBhIG5vbi1tYXRjaCB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvd2VkIGEgbWF0Y2ggb24gYW4gZW1wdHkgc3RyaW5nIHdoZW4KKyAgZG9pbmcgYSBnbG9iYWwgc2VhcmNoLiBTdWNoIGEgbWF0Y2ggaXMgZG9uZSB3aXRoIFBDUkUyX05PVEVNUFRZX0FUU1RBUlQgYW5kCisgIFBDUkUyX0FOQ0hPUkVEIHNldCBpbiBnX25vdGVtcHR5LiBUaGUgY29kZSBhYm92ZSB0dXJucyBpdCBpbnRvIGEgZmFrZSBtYXRjaAorICBvZiBvbmUgY2hhcmFjdGVyLiBTbyBlZmZlY3RpdmVseSB3ZSBnZXQgaGVyZSBvbmx5IGFmdGVyIGEgbWF0Y2guIElmIHdlCisgIGFyZSBub3QgZG9pbmcgYSBnbG9iYWwgc2VhcmNoLCB3ZSBhcmUgZG9uZS4gKi8KKworICBpZiAoKGRhdF9kYXRjdGwuY29udHJvbCAmIENUTF9BTllHTE9CKSA9PSAwKSBicmVhazsgZWxzZQorICAgIHsKKyAgICBQQ1JFMl9TSVpFIGVuZF9vZmZzZXQgPSBGTEQobWF0Y2hfZGF0YSwgb3ZlY3RvcilbMV07CisKKyAgICAvKiBXZSBtdXN0IG5vdyBzZXQgdXAgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiBhIGdsb2JhbCBzZWFyY2guIElmIHdlIGhhdmUKKyAgICBtYXRjaGVkIGFuIGVtcHR5IHN0cmluZywgZmlyc3QgY2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZQorICAgIHN1YmplY3QuIElmIHNvLCB0aGUgbG9vcCBpcyBvdmVyLiBPdGhlcndpc2UsIG1pbWljIHdoYXQgUGVybCdzIC9nIG9wdGlvbgorICAgIGRvZXMuIFNldCBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIGFuZCBQQ1JFMl9BTkNIT1JFRCBhbmQgdHJ5IHRoZSBtYXRjaCBhZ2FpbgorICAgIGF0IHRoZSBzYW1lIHBvaW50LiBJZiB0aGlzIGZhaWxzIGl0IHdpbGwgYmUgcGlja2VkIHVwIGFib3ZlLCB3aGVyZSBhIGZha2UKKyAgICBtYXRjaCBpcyBzZXQgdXAgc28gdGhhdCBhdCB0aGlzIHBvaW50IHdlIGFkdmFuY2UgdG8gdGhlIG5leHQgY2hhcmFjdGVyLiAqLworCisgICAgaWYgKEZMRChtYXRjaF9kYXRhLCBvdmVjdG9yKVswXSA9PSBlbmRfb2Zmc2V0KQorICAgICAgeworICAgICAgaWYgKGVuZF9vZmZzZXQgPT0gdWxlbikgYnJlYWs7ICAgICAgLyogRW5kIG9mIHN1YmplY3QgKi8KKyAgICAgIGdfbm90ZW1wdHkgPSBQQ1JFMl9OT1RFTVBUWV9BVFNUQVJUIHwgUENSRTJfQU5DSE9SRUQ7CisgICAgICB9CisKKyAgICAvKiBIb3dldmVyLCBldmVuIGFmdGVyIG1hdGNoaW5nIGEgbm9uLWVtcHR5IHN0cmluZywgdGhlcmUgaXMgc3RpbGwgb25lCisgICAgdHJpY2t5IGNhc2UuIElmIGEgcGF0dGVybiBjb250YWlucyBcSyB3aXRoaW4gYSBsb29rYmVoaW5kIGFzc2VydGlvbiBhdCB0aGUKKyAgICBzdGFydCwgdGhlIGVuZCBvZiB0aGUgbWF0Y2hlZCBzdHJpbmcgY2FuIGJlIGF0IHRoZSBvZmZzZXQgd2hlcmUgdGhlIG1hdGNoCisgICAgc3RhcnRlZC4gSW4gdGhlIGNhc2Ugb2YgYSBub3JtYWwgL2cgaXRlcmF0aW9uIHdpdGhvdXQgc3BlY2lhbCBhY3Rpb24sIHRoaXMKKyAgICBsZWFkcyB0byBhIGxvb3AgdGhhdCBrZWVwcyBvbiByZXR1cm5pbmcgdGhlIHNhbWUgc3Vic3RyaW5nLiBUaGUgbG9vcCB3b3VsZAorICAgIGJlIGNhdWdodCBhYm92ZSwgYnV0IHdlIHJlYWxseSB3YW50IHRvIG1vdmUgb24gdG8gdGhlIG5leHQgbWF0Y2guICovCisKKyAgICBlbHNlCisgICAgICB7CisgICAgICBnX25vdGVtcHR5ID0gMDsgICAvKiBTZXQgZm9yIGEgIm5vcm1hbCIgcmVwZWF0ICovCisgICAgICBpZiAoKGRhdF9kYXRjdGwuY29udHJvbCAmIENUTF9HTE9CQUwpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgUENSRTJfU0laRSBzdGFydGNoYXI7CisgICAgICAgIFBDUkUyX0dFVF9TVEFSVENIQVIoc3RhcnRjaGFyLCBtYXRjaF9kYXRhKTsKKyAgICAgICAgaWYgKGVuZF9vZmZzZXQgPD0gc3RhcnRjaGFyKQorICAgICAgICAgIHsKKyAgICAgICAgICBpZiAoc3RhcnRjaGFyID49IHVsZW4pIGJyZWFrOyAgICAgICAvKiBFbmQgb2Ygc3ViamVjdCAqLworICAgICAgICAgIGVuZF9vZmZzZXQgPSBzdGFydGNoYXIgKyAxOworICAgICAgICAgIGlmICh1dGYgJiYgdGVzdF9tb2RlICE9IFBDUkUzMl9NT0RFKQorICAgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHRlc3RfbW9kZSA9PSBQQ1JFOF9NT0RFKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGZvciAoOyBlbmRfb2Zmc2V0IDwgdWxlbjsgZW5kX29mZnNldCsrKQorICAgICAgICAgICAgICAgIGlmICgoKChQQ1JFMl9TUFRSOClwcClbZW5kX29mZnNldF0gJiAweGMwKSAhPSAweDgwKSBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSAgLyogMTYtYml0IG1vZGUgKi8KKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICBmb3IgKDsgZW5kX29mZnNldCA8IHVsZW47IGVuZF9vZmZzZXQrKykKKyAgICAgICAgICAgICAgICBpZiAoKCgoUENSRTJfU1BUUjE2KXBwKVtlbmRfb2Zmc2V0XSAmIDB4ZmMwMCkgIT0gMHhkYzAwKSBicmVhazsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfQorCisgICAgLyogRm9yIC9nIChnbG9iYWwpLCB1cGRhdGUgdGhlIHN0YXJ0IG9mZnNldCwgbGVhdmluZyB0aGUgcmVzdCBhbG9uZS4gKi8KKworICAgIGlmICgoZGF0X2RhdGN0bC5jb250cm9sICYgQ1RMX0dMT0JBTCkgIT0gMCkKKyAgICAgIGRhdF9kYXRjdGwub2Zmc2V0ID0gZW5kX29mZnNldDsKKworICAgIC8qIEZvciBhbHRnbG9iYWwsIGp1c3QgdXBkYXRlIHRoZSBwb2ludGVyIGFuZCBsZW5ndGguICovCisKKyAgICBlbHNlCisgICAgICB7CisgICAgICBwcCArPSBlbmRfb2Zmc2V0ICogY29kZV91bml0X3NpemU7CisgICAgICBsZW4gLT0gZW5kX29mZnNldCAqIGNvZGVfdW5pdF9zaXplOworICAgICAgdWxlbiAtPSBlbmRfb2Zmc2V0OworICAgICAgfQorICAgIH0KKyAgfSAgLyogRW5kIG9mIGdsb2JhbCBsb29wICovCisKK3Nob3dfbWVtb3J5ID0gRkFMU0U7CityZXR1cm4gUFJfT0s7Cit9CisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgUHJpbnQgUENSRTIgdmVyc2lvbiAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK3ByaW50X3ZlcnNpb24oRklMRSAqZikKK3sKK1ZFUlNJT05fVFlQRSAqdnA7CitmcHJpbnRmKGYsICJQQ1JFMiB2ZXJzaW9uICIpOworZm9yICh2cCA9IHZlcnNpb247ICp2cCAhPSAwOyB2cCsrKSBmcHJpbnRmKGYsICIlYyIsICp2cCk7CitmcHJpbnRmKGYsICJcbiIpOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICBQcmludCBVbmljb2RlIHZlcnNpb24gICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorcHJpbnRfdW5pY29kZV92ZXJzaW9uKEZJTEUgKmYpCit7CitWRVJTSU9OX1RZUEUgKnZwOworZnByaW50ZihmLCAiVW5pY29kZSB2ZXJzaW9uICIpOworZm9yICh2cCA9IHV2ZXJzaW9uOyAqdnAgIT0gMDsgdnArKykgZnByaW50ZihmLCAiJWMiLCAqdnApOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICBQcmludCBKSVQgdGFyZ2V0ICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZAorcHJpbnRfaml0X3RhcmdldChGSUxFICpmKQoreworVkVSU0lPTl9UWVBFICp2cDsKK2ZvciAodnAgPSBqaXR0YXJnZXQ7ICp2cCAhPSAwOyB2cCsrKSBmcHJpbnRmKGYsICIlYyIsICp2cCk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICBQcmludCBuZXdsaW5lIGNvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE91dHB1dCBpcyBhbHdheXMgdG8gc3Rkb3V0LgorCitBcmd1bWVudHM6CisgIHJjICAgICAgICAgdGhlIHJldHVybiBjb2RlIGZyb20gUENSRTJfQ09ORklHX05FV0xJTkUKKyAgaXNjICAgICAgICBUUlVFIGlmIGNhbGxlZCBmcm9tICItQyBuZXdsaW5lIgorUmV0dXJuczogICAgIG5vdGhpbmcKKyovCisKK3N0YXRpYyB2b2lkCitwcmludF9uZXdsaW5lX2NvbmZpZyh1aW50MzJfdCBvcHR2YWwsIEJPT0wgaXNjKQoreworaWYgKCFpc2MpIHByaW50ZigiICBOZXdsaW5lIHNlcXVlbmNlIGlzICIpOworaWYgKG9wdHZhbCA8IHNpemVvZihuZXdsaW5lcykvc2l6ZW9mKGNoYXIgKikpCisgIHByaW50ZigiJXNcbiIsIG5ld2xpbmVzW29wdHZhbF0pOworZWxzZQorICBwcmludGYoImEgbm9uLXN0YW5kYXJkIHZhbHVlOiAlZFxuIiwgb3B0dmFsKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgIFVzYWdlIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK3VzYWdlKHZvaWQpCit7CitwcmludGYoIlVzYWdlOiAgICAgcGNyZTJ0ZXN0IFtvcHRpb25zXSBbPGlucHV0IGZpbGU+IFs8b3V0cHV0IGZpbGU+XV1cblxuIik7CitwcmludGYoIklucHV0IGFuZCBvdXRwdXQgZGVmYXVsdCB0byBzdGRpbiBhbmQgc3Rkb3V0LlxuIik7CisjaWYgZGVmaW5lZChTVVBQT1JUX0xJQlJFQURMSU5FKSB8fCBkZWZpbmVkKFNVUFBPUlRfTElCRURJVCkKK3ByaW50ZigiSWYgaW5wdXQgaXMgYSB0ZXJtaW5hbCwgcmVhZGxpbmUoKSBpcyB1c2VkIHRvIHJlYWQgZnJvbSBpdC5cbiIpOworI2Vsc2UKK3ByaW50ZigiVGhpcyB2ZXJzaW9uIG9mIHBjcmUydGVzdCBpcyBub3QgbGlua2VkIHdpdGggcmVhZGxpbmUoKS5cbiIpOworI2VuZGlmCitwcmludGYoIlxuT3B0aW9uczpcbiIpOworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorcHJpbnRmKCIgIC04ICAgICAgICAgICAgdXNlIHRoZSA4LWJpdCBsaWJyYXJ5XG4iKTsKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMTYKK3ByaW50ZigiICAtMTYgICAgICAgICAgIHVzZSB0aGUgMTYtYml0IGxpYnJhcnlcbiIpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorcHJpbnRmKCIgIC0zMiAgICAgICAgICAgdXNlIHRoZSAzMi1iaXQgbGlicmFyeVxuIik7CisjZW5kaWYKK3ByaW50ZigiICAtYiAgICAgICAgICAgIHNldCBkZWZhdWx0IHBhdHRlcm4gY29udHJvbCAnZnVsbGJpbmNvZGUnXG4iKTsKK3ByaW50ZigiICAtQyAgICAgICAgICAgIHNob3cgUENSRTIgY29tcGlsZS10aW1lIG9wdGlvbnMgYW5kIGV4aXRcbiIpOworcHJpbnRmKCIgIC1DIGFyZyAgICAgICAgc2hvdyBhIHNwZWNpZmljIGNvbXBpbGUtdGltZSBvcHRpb24gYW5kIGV4aXQgd2l0aCBpdHNcbiIpOworcHJpbnRmKCIgICAgICAgICAgICAgICAgICB2YWx1ZSBpZiBudW1lcmljIChlbHNlIDApLiBUaGUgYXJnIGNhbiBiZTpcbiIpOworcHJpbnRmKCIgICAgIGJhY2tzbGFzaC1DICAgIHVzZSBvZiBcXEMgaXMgZW5hYmxlZCBbMCwgMV1cbiIpOworcHJpbnRmKCIgICAgIGJzciAgICAgICAgICAgIFxcUiB0eXBlIFtBTllDUkxGLCBBTlldXG4iKTsKK3ByaW50ZigiICAgICBlYmNkaWMgICAgICAgICBjb21waWxlZCBmb3IgRUJDRElDIGNoYXJhY3RlciBjb2RlIFswLDFdXG4iKTsKK3ByaW50ZigiICAgICBlYmNkaWMtbmwgICAgICBOTCBjb2RlIGlmIGNvbXBpbGVkIGZvciBFQkNESUNcbiIpOworcHJpbnRmKCIgICAgIGppdCAgICAgICAgICAgIGp1c3QtaW4tdGltZSBjb21waWxlciBzdXBwb3J0ZWQgWzAsIDFdXG4iKTsKK3ByaW50ZigiICAgICBsaW5rc2l6ZSAgICAgICBpbnRlcm5hbCBsaW5rIHNpemUgWzIsIDMsIDRdXG4iKTsKK3ByaW50ZigiICAgICBuZXdsaW5lICAgICAgICBuZXdsaW5lIHR5cGUgW0NSLCBMRiwgQ1JMRiwgQU5ZQ1JMRiwgQU5ZXVxuIik7CitwcmludGYoIiAgICAgcGNyZTItOCAgICAgICAgOCBiaXQgbGlicmFyeSBzdXBwb3J0IGVuYWJsZWQgWzAsIDFdXG4iKTsKK3ByaW50ZigiICAgICBwY3JlMi0xNiAgICAgICAxNiBiaXQgbGlicmFyeSBzdXBwb3J0IGVuYWJsZWQgWzAsIDFdXG4iKTsKK3ByaW50ZigiICAgICBwY3JlMi0zMiAgICAgICAzMiBiaXQgbGlicmFyeSBzdXBwb3J0IGVuYWJsZWQgWzAsIDFdXG4iKTsKK3ByaW50ZigiICAgICB1bmljb2RlICAgICAgICBVbmljb2RlIGFuZCBVVEYgc3VwcG9ydCBlbmFibGVkIFswLCAxXVxuIik7CitwcmludGYoIiAgLWQgICAgICAgICAgICBzZXQgZGVmYXVsdCBwYXR0ZXJuIGNvbnRyb2wgJ2RlYnVnJ1xuIik7CitwcmludGYoIiAgLWRmYSAgICAgICAgICBzZXQgZGVmYXVsdCBzdWJqZWN0IGNvbnRyb2wgJ2RmYSdcbiIpOworcHJpbnRmKCIgIC1oZWxwICAgICAgICAgc2hvdyB1c2FnZSBpbmZvcm1hdGlvblxuIik7CitwcmludGYoIiAgLWkgICAgICAgICAgICBzZXQgZGVmYXVsdCBwYXR0ZXJuIGNvbnRyb2wgJ2luZm8nXG4iKTsKK3ByaW50ZigiICAtaml0ICAgICAgICAgIHNldCBkZWZhdWx0IHBhdHRlcm4gY29udHJvbCAnaml0J1xuIik7CitwcmludGYoIiAgLXEgICAgICAgICAgICBxdWlldDogZG8gbm90IG91dHB1dCBQQ1JFMiB2ZXJzaW9uIG51bWJlciBhdCBzdGFydFxuIik7CitwcmludGYoIiAgLXBhdHRlcm4gPHM+ICBzZXQgZGVmYXVsdCBwYXR0ZXJuIGNvbnRyb2wgZmllbGRzXG4iKTsKK3ByaW50ZigiICAtc3ViamVjdCA8cz4gIHNldCBkZWZhdWx0IHN1YmplY3QgY29udHJvbCBmaWVsZHNcbiIpOworcHJpbnRmKCIgIC1TIDxuPiAgICAgICAgc2V0IHN0YWNrIHNpemUgdG8gPG4+IG1lZ2FieXRlc1xuIik7CitwcmludGYoIiAgLXQgWzxuPl0gICAgICB0aW1lIGNvbXBpbGF0aW9uIGFuZCBleGVjdXRpb24sIHJlcGVhdGluZyA8bj4gdGltZXNcbiIpOworcHJpbnRmKCIgIC10bSBbPG4+XSAgICAgdGltZSBleGVjdXRpb24gKG1hdGNoaW5nKSBvbmx5LCByZXBlYXRpbmcgPG4+IHRpbWVzXG4iKTsKK3ByaW50ZigiICAtVCAgICAgICAgICAgIHNhbWUgYXMgLXQsIGJ1dCBzaG93IHRvdGFsIHRpbWVzIGF0IHRoZSBlbmRcbiIpOworcHJpbnRmKCIgIC1UTSAgICAgICAgICAgc2FtZSBhcyAtdG0sIGJ1dCBzaG93IHRvdGFsIHRpbWUgYXQgdGhlIGVuZFxuIik7CitwcmludGYoIiAgLXZlcnNpb24gICAgICBzaG93IFBDUkUyIHZlcnNpb24gYW5kIGV4aXRcbiIpOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgSGFuZGxlIC1DIG9wdGlvbiAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIG9wdGlvbiBvdXRwdXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc2V0cyBhbiBhcHByb3ByaWF0ZSByZXR1cm4KK2NvZGUgd2hlbiBhc2tlZCBmb3IgYSBzaW5nbGUgb3B0aW9uLiBUaGUgY29kZSBpcyBhYnN0cmFjdGVkIGludG8gYSBzZXBhcmF0ZQorZnVuY3Rpb24gYmVjYXVzZSBvZiBpdHMgc2l6ZS4gVXNlIHdoaWNoZXZlciBwY3JlMl9jb25maWcoKSBmdW5jdGlvbiBpcworYXZhaWxhYmxlLgorCitBcmd1bWVudDogICBhbiBvcHRpb24gbmFtZSBvciBOVUxMCitSZXR1cm5zOiAgICB0aGUgcmV0dXJuIGNvZGUKKyovCisKK3N0YXRpYyBpbnQKK2Nfb3B0aW9uKGNvbnN0IGNoYXIgKmFyZykKK3sKK3VpbnQzMl90IG9wdHZhbDsKK2ludCB5aWVsZCA9IDA7CisKK2lmIChhcmcgIT0gTlVMTCkKKyAgeworICB1bnNpZ25lZCBpbnQgaTsKKworICBmb3IgKGkgPSAwOyBpIDwgQ09QVExJU1RDT1VOVDsgaSsrKQorICAgIGlmIChzdHJjbXAoYXJnLCBjb3B0bGlzdFtpXS5uYW1lKSA9PSAwKSBicmVhazsKKworICBpZiAoaSA+PSBDT1BUTElTVENPVU5UKQorICAgIHsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIioqIFVua25vd24gLUMgb3B0aW9uICclcydcbiIsIGFyZyk7CisgICAgcmV0dXJuIC0xOworICAgIH0KKworICBzd2l0Y2ggKGNvcHRsaXN0W2ldLnR5cGUpCisgICAgeworICAgIGNhc2UgQ09ORl9CU1I6CisgICAgKHZvaWQpUENSRTJfQ09ORklHKGNvcHRsaXN0W2ldLnZhbHVlLCAmb3B0dmFsKTsKKyAgICBwcmludGYoIiVzXG4iLCBvcHR2YWw/ICJBTllDUkxGIiA6ICJBTlkiKTsKKyAgICBicmVhazsKKworICAgIGNhc2UgQ09ORl9GSVg6CisgICAgeWllbGQgPSBjb3B0bGlzdFtpXS52YWx1ZTsKKyAgICBwcmludGYoIiVkXG4iLCB5aWVsZCk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIENPTkZfRklaOgorICAgIG9wdHZhbCA9IGNvcHRsaXN0W2ldLnZhbHVlOworICAgIHByaW50ZigiJWRcbiIsIG9wdHZhbCk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIENPTkZfSU5UOgorICAgICh2b2lkKVBDUkUyX0NPTkZJRyhjb3B0bGlzdFtpXS52YWx1ZSwgJnlpZWxkKTsKKyAgICBwcmludGYoIiVkXG4iLCB5aWVsZCk7CisgICAgYnJlYWs7CisKKyAgICBjYXNlIENPTkZfTkw6CisgICAgKHZvaWQpUENSRTJfQ09ORklHKGNvcHRsaXN0W2ldLnZhbHVlLCAmb3B0dmFsKTsKKyAgICBwcmludF9uZXdsaW5lX2NvbmZpZyhvcHR2YWwsIFRSVUUpOworICAgIGJyZWFrOworICAgIH0KKworLyogRm9yIFZNUywgcmV0dXJuIHRoZSB2YWx1ZSBieSBzZXR0aW5nIGEgc3ltYm9sLCBmb3IgY2VydGFpbiB2YWx1ZXMgb25seS4gKi8KKworI2lmZGVmIF9fVk1TCisgIGlmIChjb3B5dGxpc3RbaV0udHlwZSA9PSBDT05GX0ZJWCB8fCBjb3B0bGlzdFtpXS50eXBlID09IENPTkZfSU5UKQorICAgIHsKKyAgICBjaGFyIHVjbmFtZVsxNl07CisgICAgc3RyY3B5KHVjbmFtZSwgY29wdGxpc3RbaV0ubmFtZSk7CisgICAgZm9yIChpID0gMDsgdWNuYW1lW2ldICE9IDA7IGkrKykgdWNuYW1lW2ldID0gdG91cHBlclt1Y25hbWVbaV07CisgICAgdm1zX3NldHN5bWJvbCh1Y25hbWUsIDAsIG9wdHZhbCk7CisgICAgfQorI2VuZGlmCisKKyAgcmV0dXJuIHlpZWxkOworICB9CisKKy8qIE5vIGFyZ3VtZW50IGZvciAtQzogb3V0cHV0IGFsbCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLiAqLworCitwcmludF92ZXJzaW9uKHN0ZG91dCk7CitwcmludGYoIkNvbXBpbGVkIHdpdGhcbiIpOworCisjaWZkZWYgRUJDRElDCitwcmludGYoIiAgRUJDRElDIGNvZGUgc3VwcG9ydDogTEYgaXMgMHglMDJ4XG4iLCBDSEFSX0xGKTsKKyNpZiBkZWZpbmVkIE5BVElWRV9aT1MKK3ByaW50ZigiICBFQkNESUMgY29kZSBwYWdlICVzIG9yIHNpbWlsYXJcbiIsIHBjcnpfY3B2ZXJzaW9uKCkpOworI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorcHJpbnRmKCIgIDgtYml0IHN1cHBvcnRcbiIpOworI2VuZGlmCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorcHJpbnRmKCIgIDE2LWJpdCBzdXBwb3J0XG4iKTsKKyNlbmRpZgorI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKK3ByaW50ZigiICAzMi1iaXQgc3VwcG9ydFxuIik7CisjZW5kaWYKKworKHZvaWQpUENSRTJfQ09ORklHKFBDUkUyX0NPTkZJR19VTklDT0RFLCAmb3B0dmFsKTsKK2lmIChvcHR2YWwgIT0gMCkKKyAgeworICBwcmludGYoIiAgVVRGIGFuZCBVQ1Agc3VwcG9ydCAoIik7CisgIHByaW50X3VuaWNvZGVfdmVyc2lvbihzdGRvdXQpOworICBwcmludGYoIilcbiIpOworICB9CitlbHNlIHByaW50ZigiICBObyBVbmljb2RlIHN1cHBvcnRcbiIpOworCisodm9pZClQQ1JFMl9DT05GSUcoUENSRTJfQ09ORklHX0pJVCwgJm9wdHZhbCk7CitpZiAob3B0dmFsICE9IDApCisgIHsKKyAgcHJpbnRmKCIgIEp1c3QtaW4tdGltZSBjb21waWxlciBzdXBwb3J0OiAiKTsKKyAgcHJpbnRfaml0X3RhcmdldChzdGRvdXQpOworICBwcmludGYoIlxuIik7CisgIH0KK2Vsc2UKKyAgeworICBwcmludGYoIiAgTm8ganVzdC1pbi10aW1lIGNvbXBpbGVyIHN1cHBvcnRcbiIpOworICB9CisKKyh2b2lkKVBDUkUyX0NPTkZJRyhQQ1JFMl9DT05GSUdfTkVXTElORSwgJm9wdHZhbCk7CitwcmludF9uZXdsaW5lX2NvbmZpZyhvcHR2YWwsIEZBTFNFKTsKKyh2b2lkKVBDUkUyX0NPTkZJRyhQQ1JFMl9DT05GSUdfQlNSLCAmb3B0dmFsKTsKK3ByaW50ZigiICBcXFIgbWF0Y2hlcyAlc1xuIiwgb3B0dmFsPyAiQ1IsIExGLCBvciBDUkxGIG9ubHkiIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhbGwgVW5pY29kZSBuZXdsaW5lcyIpOworI2lmZGVmIE5FVkVSX0JBQ0tTTEFTSF9DCitwcmludGYoIiAgXFxDIGlzIG5vdCBzdXBwb3J0ZWRcbiIpOworI2Vsc2UKK3ByaW50ZigiICBcXEMgaXMgc3VwcG9ydGVkXG4iKTsKKyNlbmRpZgorKHZvaWQpUENSRTJfQ09ORklHKFBDUkUyX0NPTkZJR19MSU5LU0laRSwgJm9wdHZhbCk7CitwcmludGYoIiAgSW50ZXJuYWwgbGluayBzaXplID0gJWRcbiIsIG9wdHZhbCk7Cisodm9pZClQQ1JFMl9DT05GSUcoUENSRTJfQ09ORklHX1BBUkVOU0xJTUlULCAmb3B0dmFsKTsKK3ByaW50ZigiICBQYXJlbnRoZXNlcyBuZXN0IGxpbWl0ID0gJWRcbiIsIG9wdHZhbCk7Cisodm9pZClQQ1JFMl9DT05GSUcoUENSRTJfQ09ORklHX01BVENITElNSVQsICZvcHR2YWwpOworcHJpbnRmKCIgIERlZmF1bHQgbWF0Y2ggbGltaXQgPSAlZFxuIiwgb3B0dmFsKTsKKyh2b2lkKVBDUkUyX0NPTkZJRyhQQ1JFMl9DT05GSUdfUkVDVVJTSU9OTElNSVQsICZvcHR2YWwpOworcHJpbnRmKCIgIERlZmF1bHQgcmVjdXJzaW9uIGRlcHRoIGxpbWl0ID0gJWRcbiIsIG9wdHZhbCk7Cisodm9pZClQQ1JFMl9DT05GSUcoUENSRTJfQ09ORklHX1NUQUNLUkVDVVJTRSwgJm9wdHZhbCk7CitwcmludGYoIiAgTWF0Y2ggcmVjdXJzaW9uIHVzZXMgJXMiLCBvcHR2YWw/ICJzdGFjayIgOiAiaGVhcCIpOworCitwcmludGYoIlxuIik7CityZXR1cm4gMDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgIE1haW4gUHJvZ3JhbSAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKK3VpbnQzMl90IHlpZWxkID0gMDsKK3VpbnQzMl90IG9wID0gMTsKK3VpbnQzMl90IHN0YWNrX3NpemU7CitCT09MIG5vdGRvbmUgPSBUUlVFOworQk9PTCBxdWlldCA9IEZBTFNFOworQk9PTCBzaG93dG90YWx0aW1lcyA9IEZBTFNFOworQk9PTCBza2lwcGluZyA9IEZBTFNFOworY2hhciAqYXJnX3N1YmplY3QgPSBOVUxMOworY2hhciAqYXJnX3BhdHRlcm4gPSBOVUxMOworCisvKiBUaGUgb2Zmc2V0cyB0byB0aGUgb3B0aW9ucyBhbmQgY29udHJvbCBiaXRzIGZpZWxkcyBvZiB0aGUgcGF0dGVybiBhbmQgZGF0YQorY29udHJvbCBibG9ja3MgbXVzdCBiZSB0aGUgc2FtZSBzbyB0aGF0IGNvbW1vbiBvcHRpb25zIGFuZCBjb250cm9scyBzdWNoIGFzCisiYW5jaG9yZWQiIG9yICJtZW1vcnkiIGNhbiB3b3JrIGZvciBlaXRoZXIgb2YgdGhlbSBmcm9tIGEgc2luZ2xlIHRhYmxlIGVudHJ5LgorV2UgY2Fubm90IHRlc3QgdGhpcyB0aWxsIHJ1bnRpbWUgYmVjYXVzZSAib2Zmc2V0b2YiIGRvZXMgbm90IHdvcmsgaW4gdGhlCitwcmVwcm9jZXNzb3IuICovCisKK2lmIChQTyhvcHRpb25zKSAhPSBETyhvcHRpb25zKSB8fCBQTyhjb250cm9sKSAhPSBETyhjb250cm9sKSB8fAorICAgIFBPKGNvbnRyb2wyKSAhPSBETyhjb250cm9sMikpCisgIHsKKyAgZnByaW50ZihzdGRlcnIsICIqKiBDb2RpbmcgZXJyb3I6ICIKKyAgICAib3B0aW9ucyBhbmQgY29udHJvbCBvZmZzZXRzIGZvciBwYXR0ZXJuIGFuZCBkYXRhIG11c3QgYmUgdGhlIHNhbWUuXG4iKTsKKyAgcmV0dXJuIDE7CisgIH0KKworLyogR2V0IHRoZSBQQ1JFMiBhbmQgVW5pY29kZSB2ZXJzaW9uIG51bWJlciBhbmQgSklUIHRhcmdldCBpbmZvcm1hdGlvbiwgYXQgdGhlCitzYW1lIHRpbWUgY2hlY2tpbmcgdGhhdCBhIHJlcXVlc3QgZm9yIHRoZSBsZW5ndGggZ2l2ZXMgdGhlIHNhbWUgYW5zd2VyLiBBbHNvCitjaGVjayBsZW5ndGhzIGZvciBub24tc3RyaW5nIGl0ZW1zLiAqLworCitpZiAoUENSRTJfQ09ORklHKFBDUkUyX0NPTkZJR19WRVJTSU9OLCBOVUxMKSAhPQorICAgIFBDUkUyX0NPTkZJRyhQQ1JFMl9DT05GSUdfVkVSU0lPTiwgdmVyc2lvbikgfHwKKworICAgIFBDUkUyX0NPTkZJRyhQQ1JFMl9DT05GSUdfVU5JQ09ERV9WRVJTSU9OLCBOVUxMKSAhPQorICAgIFBDUkUyX0NPTkZJRyhQQ1JFMl9DT05GSUdfVU5JQ09ERV9WRVJTSU9OLCB1dmVyc2lvbikgfHwKKworICAgIFBDUkUyX0NPTkZJRyhQQ1JFMl9DT05GSUdfSklUVEFSR0VULCBOVUxMKSAhPQorICAgIFBDUkUyX0NPTkZJRyhQQ1JFMl9DT05GSUdfSklUVEFSR0VULCBqaXR0YXJnZXQpIHx8CisKKyAgICBQQ1JFMl9DT05GSUcoUENSRTJfQ09ORklHX1VOSUNPREUsIE5VTEwpICE9IHNpemVvZih1aW50MzJfdCkgfHwKKyAgICBQQ1JFMl9DT05GSUcoUENSRTJfQ09ORklHX01BVENITElNSVQsIE5VTEwpICE9IHNpemVvZih1aW50MzJfdCkpCisgIHsKKyAgZnByaW50ZihzdGRlcnIsICIqKiBFcnJvciBpbiBwY3JlMl9jb25maWcoKTogYmFkIGxlbmd0aFxuIik7CisgIHJldHVybiAxOworICB9CisKKy8qIEdldCBidWZmZXJzIGZyb20gbWFsbG9jKCkgc28gdGhhdCB2YWxncmluZCB3aWxsIGNoZWNrIHRoZWlyIG1pc3VzZSB3aGVuCitkZWJ1Z2dpbmcuIFRoZXkgZ3JvdyBhdXRvbWF0aWNhbGx5IHdoZW4gdmVyeSBsb25nIGxpbmVzIGFyZSByZWFkLiBUaGUgMTYtCithbmQgMzItYml0IGJ1ZmZlcnMgKHBidWZmZXIxNiwgcGJ1ZmZlcjMyKSBhcmUgb2J0YWluZWQgb25seSBpZiBuZWVkZWQuICovCisKK2J1ZmZlciA9ICh1aW50OF90ICopbWFsbG9jKHBidWZmZXI4X3NpemUpOworcGJ1ZmZlcjggPSAodWludDhfdCAqKW1hbGxvYyhwYnVmZmVyOF9zaXplKTsKKworLyogVGhlIGZvbGxvd2luZyAgX3NldG1vZGUoKSBzdHVmZiBpcyBzb21lIFdpbmRvd3MgbWFnaWMgdGhhdCB0ZWxscyBpdHMgcnVudGltZQorbGlicmFyeSB0byB0cmFuc2xhdGUgQ1JMRiBpbnRvIGEgc2luZ2xlIExGIGNoYXJhY3Rlci4gQXQgbGVhc3QsIHRoYXQncyB3aGF0CitJJ3ZlIGJlZW4gdG9sZDogbmV2ZXIgaGF2aW5nIHVzZWQgV2luZG93cyBJIHRha2UgdGhpcyBhbGwgb24gdHJ1c3QuIE9yaWdpbmFsbHkKK2l0IHNldCAweDgwMDAsIGJ1dCB0aGVuIEkgd2FzIGFkdmlzZWQgdGhhdCBfT19CSU5BUlkgd2FzIGJldHRlci4gKi8KKworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKFdJTjMyKQorX3NldG1vZGUoIF9maWxlbm8oIHN0ZG91dCApLCBfT19CSU5BUlkgKTsKKyNlbmRpZgorCisvKiBJbml0aWFsaXphdGlvbiB0aGF0IGRvZXMgbm90IGRlcGVuZCBvbiB0aGUgcnVubmluZyBtb2RlLiAqLworCitsb2NhbGVfbmFtZVswXSA9IDA7CittZW1zZXQoJmRlZl9wYXRjdGwsIDAsIHNpemVvZihwYXRjdGwpKTsKK21lbXNldCgmZGVmX2RhdGN0bCwgMCwgc2l6ZW9mKGRhdGN0bCkpOworZGVmX2RhdGN0bC5vdmVjY291bnQgPSBERUZBVUxUX09WRUNDT1VOVDsKK2RlZl9kYXRjdGwuY29weV9udW1iZXJzWzBdID0gLTE7CitkZWZfZGF0Y3RsLmdldF9udW1iZXJzWzBdID0gLTE7CitkZWZfZGF0Y3RsLmNmYWlsWzBdID0gZGVmX2RhdGN0bC5jZmFpbFsxXSA9IENGQUlMX1VOU0VUOworCisvKiBTY2FuIGNvbW1hbmQgbGluZSBvcHRpb25zLiAqLworCit3aGlsZSAoYXJnYyA+IDEgJiYgYXJndltvcF1bMF0gPT0gJy0nICYmIGFyZ3Zbb3BdWzFdICE9IDApCisgIHsKKyAgY2hhciAqZW5kcHRyOworICBjaGFyICphcmcgPSBhcmd2W29wXTsKKyAgdW5zaWduZWQgbG9uZyB1bGk7CisKKyAgLyogRGlzcGxheSBhbmQvb3Igc2V0IHJldHVybiBjb2RlIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbnMuICovCisKKyAgaWYgKHN0cmNtcChhcmcsICItQyIpID09IDApCisgICAgeworICAgIHlpZWxkID0gY19vcHRpb24oYXJndltvcCArIDFdKTsKKyAgICBnb3RvIEVYSVQ7CisgICAgfQorCisgIC8qIFNlbGVjdCBvcGVyYXRpbmcgbW9kZSAqLworCisgIGlmIChzdHJjbXAoYXJnLCAiLTgiKSA9PSAwKQorICAgIHsKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzgKKyAgICB0ZXN0X21vZGUgPSBQQ1JFOF9NT0RFOworI2Vsc2UKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICIqKiBUaGlzIHZlcnNpb24gb2YgUENSRTIgd2FzIGJ1aWx0IHdpdGhvdXQgOC1iaXQgc3VwcG9ydFxuIik7CisgICAgZXhpdCgxKTsKKyNlbmRpZgorICAgIH0KKyAgZWxzZSBpZiAoc3RyY21wKGFyZywgIi0xNiIpID09IDApCisgICAgeworI2lmZGVmIFNVUFBPUlRfUENSRTJfMTYKKyAgICB0ZXN0X21vZGUgPSBQQ1JFMTZfTU9ERTsKKyNlbHNlCisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAiKiogVGhpcyB2ZXJzaW9uIG9mIFBDUkUyIHdhcyBidWlsdCB3aXRob3V0IDE2LWJpdCBzdXBwb3J0XG4iKTsKKyAgICBleGl0KDEpOworI2VuZGlmCisgICAgfQorICBlbHNlIGlmIChzdHJjbXAoYXJnLCAiLTMyIikgPT0gMCkKKyAgICB7CisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8zMgorICAgIHRlc3RfbW9kZSA9IFBDUkUzMl9NT0RFOworI2Vsc2UKKyAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICIqKiBUaGlzIHZlcnNpb24gb2YgUENSRTIgd2FzIGJ1aWx0IHdpdGhvdXQgMzItYml0IHN1cHBvcnRcbiIpOworICAgIGV4aXQoMSk7CisjZW5kaWYKKyAgICB9CisKKyAgLyogU2V0IHF1aWV0IChubyB2ZXJzaW9uIHZlcmlmaWNhdGlvbikgKi8KKworICBlbHNlIGlmIChzdHJjbXAoYXJnLCAiLXEiKSA9PSAwKSBxdWlldCA9IFRSVUU7CisKKyAgLyogU2V0IHN5c3RlbSBzdGFjayBzaXplICovCisKKyAgZWxzZSBpZiAoc3RyY21wKGFyZywgIi1TIikgPT0gMCAmJiBhcmdjID4gMiAmJgorICAgICAgKCh1bGkgPSBzdHJ0b3VsKGFyZ3Zbb3ArMV0sICZlbmRwdHIsIDEwKSksICplbmRwdHIgPT0gMCkpCisgICAgeworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fbWluaXgpIHx8IGRlZmluZWQoTkFUSVZFX1pPUykgfHwgZGVmaW5lZChfX1ZNUykKKyAgICBmcHJpbnRmKHN0ZGVyciwgInBjcmUydGVzdDogLVMgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIE9TXG4iKTsKKyAgICBleGl0KDEpOworI2Vsc2UKKyAgICBpbnQgcmM7CisgICAgc3RydWN0IHJsaW1pdCBybGltOworICAgIGlmIChVMzJPVkVSRkxPVyh1bGkpKQorICAgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICIrKysgQXJndW1lbnQgZm9yIC1TIGlzIHRvbyBiaWdcbiIpOworICAgICAgZXhpdCgxKTsKKyAgICAgIH0KKyAgICBzdGFja19zaXplID0gKHVpbnQzMl90KXVsaTsKKyAgICBnZXRybGltaXQoUkxJTUlUX1NUQUNLLCAmcmxpbSk7CisgICAgcmxpbS5ybGltX2N1ciA9IHN0YWNrX3NpemUgKiAxMDI0ICogMTAyNDsKKyAgICBpZiAocmxpbS5ybGltX2N1ciA+IHJsaW0ucmxpbV9tYXgpCisgICAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgInBjcmUydGVzdDogcmVxdWVzdGVkIHN0YWNrIHNpemUgJWx1TSBpcyBncmVhdGVyIHRoYW4gaGFyZCBsaW1pdCAlbHVcbiIsCisgICAgICAgICh1bnNpZ25lZCBsb25nIGludClzdGFja19zaXplLAorICAgICAgICAodW5zaWduZWQgbG9uZyBpbnQpKHJsaW0ucmxpbV9tYXgpKTsKKyAgICAgIGV4aXQoMSk7CisgICAgICB9CisgICAgcmMgPSBzZXRybGltaXQoUkxJTUlUX1NUQUNLLCAmcmxpbSk7CisgICAgaWYgKHJjICE9IDApCisgICAgICB7CisgICAgICBmcHJpbnRmKHN0ZGVyciwgInBjcmUydGVzdDogc2V0dGluZyBzdGFjayBzaXplICVsdU0gZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KXN0YWNrX3NpemUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICBleGl0KDEpOworICAgICAgfQorICAgIG9wKys7CisgICAgYXJnYy0tOworI2VuZGlmCisgICAgfQorCisgIC8qIFNldCBzb21lIGNvbW1vbiBwYXR0ZXJuIGFuZCBzdWJqZWN0IGNvbnRyb2xzICovCisKKyAgZWxzZSBpZiAoc3RyY21wKGFyZywgIi1kZmEiKSA9PSAwKSBkZWZfZGF0Y3RsLmNvbnRyb2wgfD0gQ1RMX0RGQTsKKyAgZWxzZSBpZiAoc3RyY21wKGFyZywgIi1iIikgPT0gMCkgZGVmX3BhdGN0bC5jb250cm9sIHw9IENUTF9GVUxMQklOQ09ERTsKKyAgZWxzZSBpZiAoc3RyY21wKGFyZywgIi1kIikgPT0gMCkgZGVmX3BhdGN0bC5jb250cm9sIHw9IENUTF9ERUJVRzsKKyAgZWxzZSBpZiAoc3RyY21wKGFyZywgIi1pIikgPT0gMCkgZGVmX3BhdGN0bC5jb250cm9sIHw9IENUTF9JTkZPOworICBlbHNlIGlmIChzdHJjbXAoYXJnLCAiLWppdCIpID09IDApCisgICAgeworICAgIGRlZl9wYXRjdGwuaml0ID0gNzsgIC8qIGZ1bGwgJiBwYXJ0aWFsICovCisjaWZuZGVmIFNVUFBPUlRfSklUCisgICAgZnByaW50ZihzdGRlcnIsICIqKiBXYXJuaW5nOiBKSVQgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlOiAiCisgICAgICAgICAgICAgICAgICAgICItaml0IGNhbGxzIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdGhpbmcuXG4iKTsKKyNlbmRpZgorICAgIH0KKworICAvKiBTZXQgdGltaW5nIHBhcmFtZXRlcnMgKi8KKworICBlbHNlIGlmIChzdHJjbXAoYXJnLCAiLXQiKSA9PSAwIHx8IHN0cmNtcChhcmcsICItdG0iKSA9PSAwIHx8CisgICAgICAgICAgIHN0cmNtcChhcmcsICItVCIpID09IDAgfHwgc3RyY21wKGFyZywgIi1UTSIpID09IDApCisgICAgeworICAgIGludCBib3RoID0gYXJnWzJdID09IDA7CisgICAgc2hvd3RvdGFsdGltZXMgPSBhcmdbMV0gPT0gJ1QnOworICAgIGlmIChhcmdjID4gMiAmJiAodWxpID0gc3RydG91bChhcmd2W29wKzFdLCAmZW5kcHRyLCAxMCksICplbmRwdHIgPT0gMCkpCisgICAgICB7CisgICAgICBpZiAoVTMyT1ZFUkZMT1codWxpKSkKKyAgICAgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIisrKyBBcmd1bWVudCBmb3IgJXMgaXMgdG9vIGJpZ1xuIiwgYXJnKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgdGltZWl0bSA9IChpbnQpdWxpOworICAgICAgb3ArKzsKKyAgICAgIGFyZ2MtLTsKKyAgICAgIH0KKyAgICBlbHNlIHRpbWVpdG0gPSBMT09QUkVQRUFUOworICAgIGlmIChib3RoKSB0aW1laXQgPSB0aW1laXRtOworICAgIH0KKworICAvKiBHaXZlIGhlbHAgKi8KKworICBlbHNlIGlmIChzdHJjbXAoYXJnLCAiLWhlbHAiKSA9PSAwIHx8CisgICAgICAgICAgIHN0cmNtcChhcmcsICItLWhlbHAiKSA9PSAwKQorICAgIHsKKyAgICB1c2FnZSgpOworICAgIGdvdG8gRVhJVDsKKyAgICB9CisKKyAgLyogU2hvdyB2ZXJzaW9uICovCisKKyAgZWxzZSBpZiAoc3RyY21wKGFyZywgIi12ZXJzaW9uIikgPT0gMCB8fAorICAgICAgICAgICBzdHJjbXAoYXJnLCAiLS12ZXJzaW9uIikgPT0gMCkKKyAgICB7CisgICAgcHJpbnRfdmVyc2lvbihzdGRvdXQpOworICAgIGdvdG8gRVhJVDsKKyAgICB9CisKKyAgLyogVGhlIGZvbGxvd2luZyBvcHRpb25zIHNhdmUgdGhlaXIgZGF0YSBmb3IgcHJvY2Vzc2luZyBvbmNlIHdlIGtub3cgd2hhdAorICB0aGUgcnVubmluZyBtb2RlIGlzLiAqLworCisgIGVsc2UgaWYgKHN0cmNtcChhcmcsICItc3ViamVjdCIpID09IDApCisgICAgeworICAgIGFyZ19zdWJqZWN0ID0gYXJndltvcCsxXTsKKyAgICBnb3RvIENIRUNLX1ZBTFVFX0VYSVNUUzsKKyAgICB9CisKKyAgZWxzZSBpZiAoc3RyY21wKGFyZywgIi1wYXR0ZXJuIikgPT0gMCkKKyAgICB7CisgICAgYXJnX3BhdHRlcm4gPSBhcmd2W29wKzFdOworICAgIENIRUNLX1ZBTFVFX0VYSVNUUzoKKyAgICBpZiAoYXJnYyA8PSAyKQorICAgICAgeworICAgICAgZnByaW50ZihzdGRlcnIsICIqKiBNaXNzaW5nIHZhbHVlIGZvciAlc1xuIiwgYXJnKTsKKyAgICAgIHlpZWxkID0gMTsKKyAgICAgIGdvdG8gRVhJVDsKKyAgICAgIH0KKyAgICBvcCsrOworICAgIGFyZ2MtLTsKKyAgICB9CisKKyAgLyogVW5yZWNvZ25pemVkIG9wdGlvbiAqLworCisgIGVsc2UKKyAgICB7CisgICAgZnByaW50ZihzdGRlcnIsICIqKiBVbmtub3duIG9yIG1hbGZvcm1lZCBvcHRpb24gJyVzJ1xuIiwgYXJnKTsKKyAgICB1c2FnZSgpOworICAgIHlpZWxkID0gMTsKKyAgICBnb3RvIEVYSVQ7CisgICAgfQorICBvcCsrOworICBhcmdjLS07CisgIH0KKworLyogSW5pdGlhbGl6ZSB0aGluZ3MgdGhhdCBjYW5ub3QgYmUgZG9uZSB1bnRpbCB3ZSBrbm93IHdoaWNoIHRlc3QgbW9kZSB3ZSBhcmUKK3J1bm5pbmcgaW4uIFdoZW4gSEVBUF9NQVRDSF9SRUNVUlNFIGlzIHVuZGVmaW5lZCwgY2FsbGluZyBwY3JlMl9zZXRfcmVjdXJzaW9uXworbWVtb3J5X21hbmFnZW1lbnQoKSBpcyBhIG5vLW9wLCBidXQgd2UgY2FsbCBpdCBpbiBvcmRlciB0byBleGVyY2lzZSBpdC4gQWxzbworZXhlcmNpc2UgdGhlIGdlbmVyYWwgY29udGV4dCBjb3B5aW5nIGZ1bmN0aW9uLCB3aGljaCBpcyBub3Qgb3RoZXJ3aXNlIHVzZWQuICovCisKK2NvZGVfdW5pdF9zaXplID0gdGVzdF9tb2RlLzg7CittYXhfb3ZlY2NvdW50ID0gREVGQVVMVF9PVkVDQ09VTlQ7CisKKy8qIFVzZSBtYWNyb3MgdG8gc2F2ZSBhIGxvdCBvZiBkdXBsaWNhdGlvbi4gKi8KKworI2RlZmluZSBDUkVBVEVDT05URVhUUyBcCisgIEcoZ2VuZXJhbF9jb250ZXh0LEJJVFMpID0gRyhwY3JlMl9nZW5lcmFsX2NvbnRleHRfY3JlYXRlXyxCSVRTKSgmbXlfbWFsbG9jLCAmbXlfZnJlZSwgTlVMTCk7IFwKKyAgRyhnZW5lcmFsX2NvbnRleHRfY29weSxCSVRTKSA9IEcocGNyZTJfZ2VuZXJhbF9jb250ZXh0X2NvcHlfLEJJVFMpKEcoZ2VuZXJhbF9jb250ZXh0LEJJVFMpKTsgXAorICBHKGRlZmF1bHRfcGF0X2NvbnRleHQsQklUUykgPSBHKHBjcmUyX2NvbXBpbGVfY29udGV4dF9jcmVhdGVfLEJJVFMpKEcoZ2VuZXJhbF9jb250ZXh0LEJJVFMpKTsgXAorICBHKHBhdF9jb250ZXh0LEJJVFMpID0gRyhwY3JlMl9jb21waWxlX2NvbnRleHRfY29weV8sQklUUykoRyhkZWZhdWx0X3BhdF9jb250ZXh0LEJJVFMpKTsgXAorICBHKGRlZmF1bHRfZGF0X2NvbnRleHQsQklUUykgPSBHKHBjcmUyX21hdGNoX2NvbnRleHRfY3JlYXRlXyxCSVRTKShHKGdlbmVyYWxfY29udGV4dCxCSVRTKSk7IFwKKyAgRyhkYXRfY29udGV4dCxCSVRTKSA9IEcocGNyZTJfbWF0Y2hfY29udGV4dF9jb3B5XyxCSVRTKShHKGRlZmF1bHRfZGF0X2NvbnRleHQsQklUUykpOyBcCisgIEcobWF0Y2hfZGF0YSxCSVRTKSA9IEcocGNyZTJfbWF0Y2hfZGF0YV9jcmVhdGVfLEJJVFMpKG1heF9vdmVjY291bnQsIEcoZ2VuZXJhbF9jb250ZXh0LEJJVFMpKQorCisjaWZkZWYgSEVBUF9NQVRDSF9SRUNVUlNFCisjZGVmaW5lIFNFVFJFQ1VSU0VNRU1NQU4gXAorICAodm9pZClHKHBjcmUyX3NldF9yZWN1cnNpb25fbWVtb3J5X21hbmFnZW1lbnRfLEJJVFMpIFwKKyAgICAoRyhkZWZhdWx0X2RhdF9jb250ZXh0LEJJVFMpLCBcCisgICAgJm15X3N0YWNrX21hbGxvYywgJm15X3N0YWNrX2ZyZWUsIE5VTEwpCisjZWxzZQorI2RlZmluZSBTRVRSRUNVUlNFTUVNTUFOIFwKKyAgKHZvaWQpRyhwY3JlMl9zZXRfcmVjdXJzaW9uX21lbW9yeV9tYW5hZ2VtZW50XyxCSVRTKShOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKQorI2VuZGlmCisKKy8qIENhbGwgdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9ucyBmb3IgdGhlIGN1cnJlbnQgbW9kZS4gKi8KKworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorI3VuZGVmIEJJVFMKKyNkZWZpbmUgQklUUyA4CitpZiAodGVzdF9tb2RlID09IFBDUkU4X01PREUpCisgIHsKKyAgQ1JFQVRFQ09OVEVYVFM7CisgIFNFVFJFQ1VSU0VNRU1NQU47CisgIH0KKyNlbmRpZgorCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl8xNgorI3VuZGVmIEJJVFMKKyNkZWZpbmUgQklUUyAxNgoraWYgKHRlc3RfbW9kZSA9PSBQQ1JFMTZfTU9ERSkKKyAgeworICBDUkVBVEVDT05URVhUUzsKKyAgU0VUUkVDVVJTRU1FTU1BTjsKKyAgfQorI2VuZGlmCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzMyCisjdW5kZWYgQklUUworI2RlZmluZSBCSVRTIDMyCitpZiAodGVzdF9tb2RlID09IFBDUkUzMl9NT0RFKQorICB7CisgIENSRUFURUNPTlRFWFRTOworICBTRVRSRUNVUlNFTUVNTUFOOworICB9CisjZW5kaWYKKworLyogU2V0IGEgZGVmYXVsdCBwYXJlbnRoZXNlcyBuZXN0IGxpbWl0IHRoYXQgaXMgbGFyZ2UgZW5vdWdoIHRvIHJ1biB0aGUKK3N0YW5kYXJkIHRlc3RzICh0aGlzIGFsc28gZXhlcmNpc2VzIHRoZSBmdW5jdGlvbikuICovCisKK1BDUkUyX1NFVF9QQVJFTlNfTkVTVF9MSU1JVChkZWZhdWx0X3BhdF9jb250ZXh0LCAyMjApOworCisvKiBIYW5kbGUgY29tbWFuZCBsaW5lIG1vZGlmaWVyIHNldHRpbmdzLCBzZW5kaW5nIGFueSBlcnJvciBtZXNzYWdlcyB0bworc3RkZXJyLiBXZSBuZWVkIHRvIGtub3cgdGhlIG1vZGUgYmVmb3JlIG1vZGlmeWluZyB0aGUgY29udGV4dCwgYW5kIGl0IGlzIHRpZGllcgordG8gZG8gdGhlbSBhbGwgaW4gdGhlIHNhbWUgd2F5LiAqLworCitvdXRmaWxlID0gc3RkZXJyOworaWYgKChhcmdfcGF0dGVybiAhPSBOVUxMICYmCisgICAgIWRlY29kZV9tb2RpZmllcnMoKHVpbnQ4X3QgKilhcmdfcGF0dGVybiwgQ1RYX0RFRlBBVCwgJmRlZl9wYXRjdGwsIE5VTEwpKSB8fAorICAgIChhcmdfc3ViamVjdCAhPSBOVUxMICYmCisgICAgIWRlY29kZV9tb2RpZmllcnMoKHVpbnQ4X3QgKilhcmdfc3ViamVjdCwgQ1RYX0RFRkRBVCwgTlVMTCwgJmRlZl9kYXRjdGwpKSkKKyAgeworICB5aWVsZCA9IDE7CisgIGdvdG8gRVhJVDsKKyAgfQorCisvKiBTb3J0IG91dCB0aGUgaW5wdXQgYW5kIG91dHB1dCBmaWxlcywgZGVmYXVsdGluZyB0byBzdGRpbi9zdGRvdXQuICovCisKK2luZmlsZSA9IHN0ZGluOworb3V0ZmlsZSA9IHN0ZG91dDsKKworaWYgKGFyZ2MgPiAxICYmIHN0cmNtcChhcmd2W29wXSwgIi0iKSAhPSAwKQorICB7CisgIGluZmlsZSA9IGZvcGVuKGFyZ3Zbb3BdLCBJTlBVVF9NT0RFKTsKKyAgaWYgKGluZmlsZSA9PSBOVUxMKQorICAgIHsKKyAgICBwcmludGYoIioqIEZhaWxlZCB0byBvcGVuICclcydcbiIsIGFyZ3Zbb3BdKTsKKyAgICB5aWVsZCA9IDE7CisgICAgZ290byBFWElUOworICAgIH0KKyAgfQorCitpZiAoYXJnYyA+IDIpCisgIHsKKyAgb3V0ZmlsZSA9IGZvcGVuKGFyZ3Zbb3ArMV0sIE9VVFBVVF9NT0RFKTsKKyAgaWYgKG91dGZpbGUgPT0gTlVMTCkKKyAgICB7CisgICAgcHJpbnRmKCIqKiBGYWlsZWQgdG8gb3BlbiAnJXMnXG4iLCBhcmd2W29wKzFdKTsKKyAgICB5aWVsZCA9IDE7CisgICAgZ290byBFWElUOworICAgIH0KKyAgfQorCisvKiBPdXRwdXQgYSBoZWFkaW5nIGxpbmUgdW5sZXNzIHF1aWV0LCB0aGVuIHByb2Nlc3MgaW5wdXQgbGluZXMuICovCisKK2lmICghcXVpZXQpIHByaW50X3ZlcnNpb24ob3V0ZmlsZSk7CisKK1NFVChjb21waWxlZF9jb2RlLCBOVUxMKTsKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorcHJlZy5yZV9wY3JlMl9jb2RlID0gTlVMTDsKK3ByZWcucmVfbWF0Y2hfZGF0YSA9IE5VTEw7CisjZW5kaWYKKword2hpbGUgKG5vdGRvbmUpCisgIHsKKyAgdWludDhfdCAqcDsKKyAgaW50IHJjID0gUFJfT0s7CisgIEJPT0wgZXhwZWN0ZGF0YSA9IFRFU1QoY29tcGlsZWRfY29kZSwgIT0sIE5VTEwpOworI2lmZGVmIFNVUFBPUlRfUENSRTJfOAorICBleHBlY3RkYXRhIHw9IHByZWcucmVfcGNyZTJfY29kZSAhPSBOVUxMOworI2VuZGlmCisKKyAgaWYgKGV4dGVuZF9pbnB1dGxpbmUoaW5maWxlLCBidWZmZXIsIGV4cGVjdGRhdGE/ICJkYXRhPiAiIDogIiAgcmU+ICIpID09IE5VTEwpCisgICAgYnJlYWs7CisgIGlmICghSU5URVJBQ1RJVkUoaW5maWxlKSkgZnByaW50ZihvdXRmaWxlLCAiJXMiLCAoY2hhciAqKWJ1ZmZlcik7CisgIGZmbHVzaChvdXRmaWxlKTsKKyAgcCA9IGJ1ZmZlcjsKKworICAvKiBJZiB3ZSBoYXZlIGEgcGF0dGVybiBzZXQgdXAgZm9yIHRlc3RpbmcsIG9yIHdlIGFyZSBza2lwcGluZyBhZnRlciBhCisgIGNvbXBpbGUgZmFpbHVyZSwgYSBibGFuayBsaW5lIHRlcm1pbmF0ZXMgdGhpcyB0ZXN0OyBvdGhlcndpc2UgcHJvY2VzcyB0aGUKKyAgbGluZSBhcyBhIGRhdGEgbGluZS4gKi8KKworICBpZiAoZXhwZWN0ZGF0YSB8fCBza2lwcGluZykKKyAgICB7CisgICAgd2hpbGUgKGlzc3BhY2UoKnApKSBwKys7CisgICAgaWYgKCpwID09IDApCisgICAgICB7CisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84CisgICAgICBpZiAocHJlZy5yZV9wY3JlMl9jb2RlICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgcmVnZnJlZSgmcHJlZyk7CisgICAgICAgIHByZWcucmVfcGNyZTJfY29kZSA9IE5VTEw7CisgICAgICAgIHByZWcucmVfbWF0Y2hfZGF0YSA9IE5VTEw7CisgICAgICAgIH0KKyNlbmRpZiAgLyogU1VQUE9SVF9QQ1JFMl84ICovCisgICAgICBpZiAoVEVTVChjb21waWxlZF9jb2RlLCAhPSwgTlVMTCkpCisgICAgICAgIHsKKyAgICAgICAgU1VCMShwY3JlMl9jb2RlX2ZyZWUsIGNvbXBpbGVkX2NvZGUpOworICAgICAgICBTRVQoY29tcGlsZWRfY29kZSwgTlVMTCk7CisgICAgICAgIH0KKyAgICAgIHNraXBwaW5nID0gRkFMU0U7CisgICAgICBzZXRsb2NhbGUoTENfQ1RZUEUsICJDIik7CisgICAgICB9CisgICAgZWxzZSBpZiAoIXNraXBwaW5nICYmICEocFswXSA9PSAnXFwnICYmIHBbMV0gPT0gJz0nICYmIGlzc3BhY2UocFsyXSkpKQorICAgICAgcmMgPSBwcm9jZXNzX2RhdGEoKTsKKyAgICB9CisKKyAgLyogV2UgZG8gbm90IGhhdmUgYSBwYXR0ZXJuIHNldCB1cCBmb3IgdGVzdGluZy4gTGluZXMgc3RhcnRpbmcgd2l0aCAjIGFyZQorICBlaXRoZXIgY29tbWVudHMgb3Igc3BlY2lhbCBjb21tYW5kcy4gQmxhbmsgbGluZXMgYXJlIGlnbm9yZWQuIE90aGVyd2lzZSwgdGhlCisgIGxpbmUgbXVzdCBzdGFydCB3aXRoIGEgdmFsaWQgZGVsaW1pdGVyLiBJdCBpcyB0aGVuIHByb2Nlc3NlZCBhcyBhIHBhdHRlcm4KKyAgbGluZS4gKi8KKworICBlbHNlIGlmICgqcCA9PSAnIycpCisgICAgeworICAgIGlmIChpc3NwYWNlKHBbMV0pIHx8IHBbMV0gPT0gJyEnIHx8IHBbMV0gPT0gMCkgY29udGludWU7CisgICAgcmMgPSBwcm9jZXNzX2NvbW1hbmQoKTsKKyAgICB9CisKKyAgZWxzZSBpZiAoc3RyY2hyKCIvIVwiJ2AlJi09Xzo7LEB+IiwgKnApICE9IE5VTEwpCisgICAgeworICAgIHJjID0gcHJvY2Vzc19wYXR0ZXJuKCk7CisgICAgZGZhX21hdGNoZWQgPSAwOworICAgIH0KKworICBlbHNlCisgICAgeworICAgIHdoaWxlIChpc3NwYWNlKCpwKSkgcCsrOworICAgIGlmICgqcCAhPSAwKQorICAgICAgeworICAgICAgZnByaW50ZihvdXRmaWxlLCAiKiogSW52YWxpZCBwYXR0ZXJuIGRlbGltaXRlciAnJWMnICh4JXgpLlxuIiwgKmJ1ZmZlciwKKyAgICAgICAgKmJ1ZmZlcik7CisgICAgICByYyA9IFBSX1NLSVA7CisgICAgICB9CisgICAgfQorCisgIGlmIChyYyA9PSBQUl9TS0lQICYmICFJTlRFUkFDVElWRShpbmZpbGUpKSBza2lwcGluZyA9IFRSVUU7CisgIGVsc2UgaWYgKHJjID09IFBSX0FCRU5EKQorICAgIHsKKyAgICBmcHJpbnRmKG91dGZpbGUsICIqKiBwY3JlMnRlc3QgcnVuIGFiYW5kb25lZFxuIik7CisgICAgeWllbGQgPSAxOworICAgIGdvdG8gRVhJVDsKKyAgICB9CisgIH0KKworLyogRmluaXNoIG9mZiBhIG5vcm1hbCBydW4uICovCisKK2lmIChJTlRFUkFDVElWRShpbmZpbGUpKSBmcHJpbnRmKG91dGZpbGUsICJcbiIpOworCitpZiAoc2hvd3RvdGFsdGltZXMpCisgIHsKKyAgY29uc3QgY2hhciAqcGFkID0gIiI7CisgIGZwcmludGYob3V0ZmlsZSwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgaWYgKHRpbWVpdCA+IDApCisgICAgeworICAgIGZwcmludGYob3V0ZmlsZSwgIlRvdGFsIGNvbXBpbGUgdGltZSAlLjRmIG1pbGxpc2Vjb25kc1xuIiwKKyAgICAgICgoKGRvdWJsZSl0b3RhbF9jb21waWxlX3RpbWUgKiAxMDAwLjApIC8gKGRvdWJsZSl0aW1laXQpIC8KKyAgICAgICAgKGRvdWJsZSlDTE9DS1NfUEVSX1NFQyk7CisgICAgaWYgKHRvdGFsX2ppdF9jb21waWxlX3RpbWUgPiAwKQorICAgICAgZnByaW50ZihvdXRmaWxlLCAiVG90YWwgSklUIGNvbXBpbGUgICUuNGYgbWlsbGlzZWNvbmRzXG4iLAorICAgICAgICAoKChkb3VibGUpdG90YWxfaml0X2NvbXBpbGVfdGltZSAqIDEwMDAuMCkgLyAoZG91YmxlKXRpbWVpdCkgLworICAgICAgICAgIChkb3VibGUpQ0xPQ0tTX1BFUl9TRUMpOworICAgIHBhZCA9ICIgICI7CisgICAgfQorICBmcHJpbnRmKG91dGZpbGUsICJUb3RhbCBtYXRjaCB0aW1lICVzJS40ZiBtaWxsaXNlY29uZHNcbiIsIHBhZCwKKyAgICAoKChkb3VibGUpdG90YWxfbWF0Y2hfdGltZSAqIDEwMDAuMCkgLyAoZG91YmxlKXRpbWVpdG0pIC8KKyAgICAgIChkb3VibGUpQ0xPQ0tTX1BFUl9TRUMpOworICB9CisKKworRVhJVDoKKworaWYgKGluZmlsZSAhPSBOVUxMICYmIGluZmlsZSAhPSBzdGRpbikgZmNsb3NlKGluZmlsZSk7CitpZiAob3V0ZmlsZSAhPSBOVUxMICYmIG91dGZpbGUgIT0gc3Rkb3V0KSBmY2xvc2Uob3V0ZmlsZSk7CisKK2ZyZWUoYnVmZmVyKTsKK2ZyZWUoZGJ1ZmZlcik7CitmcmVlKHBidWZmZXI4KTsKK2ZyZWUoZGZhX3dvcmtzcGFjZSk7CitmcmVlKCh2b2lkICopbG9jYWxlX3RhYmxlcyk7CitQQ1JFMl9NQVRDSF9EQVRBX0ZSRUUobWF0Y2hfZGF0YSk7CitTVUIxKHBjcmUyX2NvZGVfZnJlZSwgY29tcGlsZWRfY29kZSk7CisKK3doaWxlKHBhdHN0YWNrbmV4dC0tID4gMCkKKyAgeworICBTRVQoY29tcGlsZWRfY29kZSwgcGF0c3RhY2tbcGF0c3RhY2tuZXh0XSk7CisgIFNVQjEocGNyZTJfY29kZV9mcmVlLCBjb21waWxlZF9jb2RlKTsKKyAgfQorCitQQ1JFMl9KSVRfRlJFRV9VTlVTRURfTUVNT1JZKGdlbmVyYWxfY29udGV4dCk7CitpZiAoaml0X3N0YWNrICE9IE5VTEwpCisgIHsKKyAgUENSRTJfSklUX1NUQUNLX0ZSRUUoaml0X3N0YWNrKTsKKyAgfQorCisjZGVmaW5lIEZSRUVDT05URVhUUyBcCisgIEcocGNyZTJfZ2VuZXJhbF9jb250ZXh0X2ZyZWVfLEJJVFMpKEcoZ2VuZXJhbF9jb250ZXh0LEJJVFMpKTsgXAorICBHKHBjcmUyX2dlbmVyYWxfY29udGV4dF9mcmVlXyxCSVRTKShHKGdlbmVyYWxfY29udGV4dF9jb3B5LEJJVFMpKTsgXAorICBHKHBjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlXyxCSVRTKShHKHBhdF9jb250ZXh0LEJJVFMpKTsgXAorICBHKHBjcmUyX2NvbXBpbGVfY29udGV4dF9mcmVlXyxCSVRTKShHKGRlZmF1bHRfcGF0X2NvbnRleHQsQklUUykpOyBcCisgIEcocGNyZTJfbWF0Y2hfY29udGV4dF9mcmVlXyxCSVRTKShHKGRhdF9jb250ZXh0LEJJVFMpKTsgXAorICBHKHBjcmUyX21hdGNoX2NvbnRleHRfZnJlZV8sQklUUykoRyhkZWZhdWx0X2RhdF9jb250ZXh0LEJJVFMpKQorCisjaWZkZWYgU1VQUE9SVF9QQ1JFMl84CisjdW5kZWYgQklUUworI2RlZmluZSBCSVRTIDgKK3JlZ2ZyZWUoJnByZWcpOworRlJFRUNPTlRFWFRTOworI2VuZGlmCisKKyNpZmRlZiBTVVBQT1JUX1BDUkUyXzE2CisjdW5kZWYgQklUUworI2RlZmluZSBCSVRTIDE2CitmcmVlKHBidWZmZXIxNik7CitGUkVFQ09OVEVYVFM7CisjZW5kaWYKKworI2lmZGVmIFNVUFBPUlRfUENSRTJfMzIKKyN1bmRlZiBCSVRTCisjZGVmaW5lIEJJVFMgMzIKK2ZyZWUocGJ1ZmZlcjMyKTsKK0ZSRUVDT05URVhUUzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1ZNUykKKyAgeWllbGQgPSBTUyRfTk9STUFMOyAgLyogUmV0dXJuIHZhbHVlcyB2aWEgRENMIHN5bWJvbHMgKi8KKyNlbmRpZgorCityZXR1cm4geWllbGQ7Cit9CisKKy8qIEVuZCBvZiBwY3JlMnRlc3QuYyAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0Q29uZmlnLmggYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRDb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzhhNTIxCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0Q29uZmlnLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiAgICBTdGFjay1sZXNzIEp1c3QtSW4tVGltZSBjb21waWxlcgorICoKKyAqICAgIENvcHlyaWdodCAyMDA5LTIwMTIgWm9sdGFuIEhlcmN6ZWcgKGh6bWVzdGVyQGZyZWVtYWlsLmh1KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAqICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfU0xKSVRfQ09ORklHX0hfCisjZGVmaW5lIF9TTEpJVF9DT05GSUdfSF8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgQ3VzdG9tIGRlZmluZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBQdXQgeW91ciBjdXN0b20gZGVmaW5lcyBoZXJlLiBUaGlzIGVtcHR5IHNlY3Rpb24gd2lsbCBuZXZlciBjaGFuZ2UKKyAgIHdoaWNoIGhlbHBzIG1haW50YWluaW5nIHBhdGNoZXMgKHdpdGggZGlmZiAvIHBhdGNoIHV0aWxpdGllcykuICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIEFyY2hpdGVjdHVyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQXJjaGl0ZWN0dXJlIHNlbGVjdGlvbi4gKi8KKy8qICNkZWZpbmUgU0xKSVRfQ09ORklHX1g4Nl8zMiAxICovCisvKiAjZGVmaW5lIFNMSklUX0NPTkZJR19YODZfNjQgMSAqLworLyogI2RlZmluZSBTTEpJVF9DT05GSUdfQVJNX1Y1IDEgKi8KKy8qICNkZWZpbmUgU0xKSVRfQ09ORklHX0FSTV9WNyAxICovCisvKiAjZGVmaW5lIFNMSklUX0NPTkZJR19BUk1fVEhVTUIyIDEgKi8KKy8qICNkZWZpbmUgU0xKSVRfQ09ORklHX0FSTV82NCAxICovCisvKiAjZGVmaW5lIFNMSklUX0NPTkZJR19QUENfMzIgMSAqLworLyogI2RlZmluZSBTTEpJVF9DT05GSUdfUFBDXzY0IDEgKi8KKy8qICNkZWZpbmUgU0xKSVRfQ09ORklHX01JUFNfMzIgMSAqLworLyogI2RlZmluZSBTTEpJVF9DT05GSUdfTUlQU182NCAxICovCisvKiAjZGVmaW5lIFNMSklUX0NPTkZJR19TUEFSQ18zMiAxICovCisvKiAjZGVmaW5lIFNMSklUX0NPTkZJR19USUxFR1ggMSAqLworCisvKiAjZGVmaW5lIFNMSklUX0NPTkZJR19BVVRPIDEgKi8KKy8qICNkZWZpbmUgU0xKSVRfQ09ORklHX1VOU1VQUE9SVEVEIDEgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgVXRpbGl0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBVc2VmdWwgZm9yIHRocmVhZC1zYWZlIGNvbXBpbGluZyBvZiBnbG9iYWwgZnVuY3Rpb25zLiAqLworI2lmbmRlZiBTTEpJVF9VVElMX0dMT0JBTF9MT0NLCisvKiBFbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgU0xKSVRfVVRJTF9HTE9CQUxfTE9DSyAxCisjZW5kaWYKKworLyogSW1wbGVtZW50cyBhIHN0YWNrIGxpa2UgZGF0YSBzdHJ1Y3R1cmUgKGJ5IHVzaW5nIG1tYXAgLyBWaXJ0dWFsQWxsb2MpLiAqLworI2lmbmRlZiBTTEpJVF9VVElMX1NUQUNLCisvKiBFbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgU0xKSVRfVVRJTF9TVEFDSyAxCisjZW5kaWYKKworLyogU2luZ2xlIHRocmVhZGVkIGFwcGxpY2F0aW9uLiBEb2VzIG5vdCByZXF1aXJlIGFueSBsb2Nrcy4gKi8KKyNpZm5kZWYgU0xKSVRfU0lOR0xFX1RIUkVBREVECisvKiBEaXNhYmxlZCBieSBkZWZhdWx0LiAqLworI2RlZmluZSBTTEpJVF9TSU5HTEVfVEhSRUFERUQgMAorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIENvbmZpZ3VyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogSWYgU0xKSVRfU1REX01BQ1JPU19ERUZJTkVEIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXBwbGljYXRpb24gc2hvdWxkCisgICBkZWZpbmUgU0xKSVRfTUFMTE9DLCBTTEpJVF9GUkVFLCBTTEpJVF9NRU1NT1ZFLCBhbmQgTlVMTC4gKi8KKyNpZm5kZWYgU0xKSVRfU1REX01BQ1JPU19ERUZJTkVECisvKiBEaXNhYmxlZCBieSBkZWZhdWx0LiAqLworI2RlZmluZSBTTEpJVF9TVERfTUFDUk9TX0RFRklORUQgMAorI2VuZGlmCisKKy8qIEV4ZWN1dGFibGUgY29kZSBhbGxvY2F0aW9uOgorICAgSWYgU0xKSVRfRVhFQ1VUQUJMRV9BTExPQ0FUT1IgaXMgbm90IGRlZmluZWQsIHRoZSBhcHBsaWNhdGlvbiBzaG91bGQKKyAgIGRlZmluZSBib3RoIFNMSklUX01BTExPQ19FWEVDIGFuZCBTTEpJVF9GUkVFX0VYRUMuICovCisjaWZuZGVmIFNMSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SCisvKiBFbmFibGVkIGJ5IGRlZmF1bHQuICovCisjZGVmaW5lIFNMSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SIDEKKyNlbmRpZgorCisvKiBGb3JjZSBjZGVjbCBjYWxsaW5nIGNvbnZlbnRpb24gZXZlbiBpZiBhIGJldHRlciBjYWxsaW5nCisgICBjb252ZW50aW9uIChlLmcuIGZhc3RjYWxsKSBpcyBzdXBwb3J0ZWQgYnkgdGhlIEMgY29tcGlsZXIuCisgICBJZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkLCBDIGZ1bmN0aW9ucyB3aXRob3V0CisgICBTTEpJVF9DQUxMIGNhbiBhbHNvIGJlIGNhbGxlZCBmcm9tIEpJVCBjb2RlLiAqLworI2lmbmRlZiBTTEpJVF9VU0VfQ0RFQ0xfQ0FMTElOR19DT05WRU5USU9OCisvKiBEaXNhYmxlZCBieSBkZWZhdWx0ICovCisjZGVmaW5lIFNMSklUX1VTRV9DREVDTF9DQUxMSU5HX0NPTlZFTlRJT04gMAorI2VuZGlmCisKKy8qIFJldHVybiB3aXRoIGVycm9yIHdoZW4gYW4gaW52YWxpZCBhcmd1bWVudCBpcyBwYXNzZWQuICovCisjaWZuZGVmIFNMSklUX0FSR1VNRU5UX0NIRUNLUworLyogRGlzYWJsZWQgYnkgZGVmYXVsdCAqLworI2RlZmluZSBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgMAorI2VuZGlmCisKKy8qIERlYnVnIGNoZWNrcyAoYXNzZXJ0aW9ucywgZXRjLikuICovCisjaWZuZGVmIFNMSklUX0RFQlVHCisvKiBFbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgU0xKSVRfREVCVUcgMQorI2VuZGlmCisKKy8qIFZlcmJvc2Ugb3BlcmF0aW9ucy4gKi8KKyNpZm5kZWYgU0xKSVRfVkVSQk9TRQorLyogRW5hYmxlZCBieSBkZWZhdWx0ICovCisjZGVmaW5lIFNMSklUX1ZFUkJPU0UgMQorI2VuZGlmCisKKy8qCisgIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEUKKyAgICBUaGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBGUFUgY2FuIGJlIGNvbnRyb2xsZWQgYnkgU0xKSVRfSVNfRlBVX0FWQUlMQUJMRS4KKyAgICAgIHplcm8gdmFsdWUgLSBGUFUgaXMgTk9UIHByZXNlbnQuCisgICAgICBub256ZXJvIHZhbHVlIC0gRlBVIGlzIHByZXNlbnQuCisqLworCisvKiBGb3IgZnVydGhlciBjb25maWd1cmF0aW9ucywgc2VlIHRoZSBiZWdpbm5pbmcgb2Ygc2xqaXRDb25maWdJbnRlcm5hbC5oICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0Q29uZmlnSW50ZXJuYWwuaCBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdENvbmZpZ0ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZlMzU0NwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdENvbmZpZ0ludGVybmFsLmgKQEAgLTAsMCArMSw3MTMgQEAKKy8qCisgKiAgICBTdGFjay1sZXNzIEp1c3QtSW4tVGltZSBjb21waWxlcgorICoKKyAqICAgIENvcHlyaWdodCAyMDA5LTIwMTIgWm9sdGFuIEhlcmN6ZWcgKGh6bWVzdGVyQGZyZWVtYWlsLmh1KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAqICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfU0xKSVRfQ09ORklHX0lOVEVSTkFMX0hfCisjZGVmaW5lIF9TTEpJVF9DT05GSUdfSU5URVJOQUxfSF8KKworLyoKKyAgIFNMSklUIGRlZmluZXMgdGhlIGZvbGxvd2luZyBhcmNoaXRlY3R1cmUgZGVwZW5kZW50IHR5cGVzIGFuZCBtYWNyb3M6CisKKyAgIFR5cGVzOgorICAgICBzbGppdF9zYiwgc2xqaXRfdWIgOiBzaWduZWQgYW5kIHVuc2lnbmVkIDggYml0IGJ5dGUKKyAgICAgc2xqaXRfc2gsIHNsaml0X3VoIDogc2lnbmVkIGFuZCB1bnNpZ25lZCAxNiBiaXQgaGFsZi13b3JkIChzaG9ydCkgdHlwZQorICAgICBzbGppdF9zaSwgc2xqaXRfdWkgOiBzaWduZWQgYW5kIHVuc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIHR5cGUKKyAgICAgc2xqaXRfc3csIHNsaml0X3V3IDogc2lnbmVkIGFuZCB1bnNpZ25lZCBtYWNoaW5lIHdvcmQsIGVub3VnaCB0byBzdG9yZSBhIHBvaW50ZXIKKyAgICAgc2xqaXRfcCA6IHVuc2dpbmVkIHBvaW50ZXIgdmFsdWUgKHVzdWFsbHkgdGhlIHNhbWUgYXMgc2xqaXRfdXcsIGJ1dAorICAgICAgICAgICAgICAgc29tZSA2NCBiaXQgQUJJcyBtYXkgdXNlIDMyIGJpdCBwb2ludGVycykKKyAgICAgc2xqaXRfcyA6IHNpbmdsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUKKyAgICAgc2xqaXRfZCA6IGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgdmFsdWUKKworICAgTWFjcm9zIGZvciBmZWF0dXJlIGRldGVjdGlvbiAoYm9vbGVhbik6CisgICAgIFNMSklUXzMyQklUX0FSQ0hJVEVDVFVSRSA6IDMyIGJpdCBhcmNoaXRlY3R1cmUKKyAgICAgU0xKSVRfNjRCSVRfQVJDSElURUNUVVJFIDogNjQgYml0IGFyY2hpdGVjdHVyZQorICAgICBTTEpJVF9MSVRUTEVfRU5ESUFOIDogbGl0dGxlIGVuZGlhbiBhcmNoaXRlY3R1cmUKKyAgICAgU0xKSVRfQklHX0VORElBTiA6IGJpZyBlbmRpYW4gYXJjaGl0ZWN0dXJlCisgICAgIFNMSklUX1VOQUxJR05FRCA6IGFsbG93cyB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzIGZvciBub24tZnB1IG9wZXJhdGlvbnMgKG9ubHkhKQorICAgICBTTEpJVF9JTkRJUkVDVF9DQUxMIDogc2VlIFNMSklUX0ZVTkNfT0ZGU0VUKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24KKworICAgQ29uc3RhbnRzOgorICAgICBTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTIDogbnVtYmVyIG9mIGF2YWlsYWJsZSByZWdpc3RlcnMKKyAgICAgU0xKSVRfTlVNQkVSX09GX1NDUkFUQ0hfUkVHSVNURVJTIDogbnVtYmVyIG9mIGF2YWlsYWJsZSBzY3JhdGNoIHJlZ2lzdGVycworICAgICBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTIDogbnVtYmVyIG9mIGF2YWlsYWJsZSBzYXZlZCByZWdpc3RlcnMKKyAgICAgU0xKSVRfTlVNQkVSX09GX0ZMT0FUX1JFR0lTVEVSUyA6IG51bWJlciBvZiBhdmFpbGFibGUgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzCisgICAgIFNMSklUX05VTUJFUl9PRl9TQ1JBVENIX0ZMT0FUX1JFR0lTVEVSUyA6IG51bWJlciBvZiBhdmFpbGFibGUgZmxvYXRpbmcgcG9pbnQgc2NyYXRjaCByZWdpc3RlcnMKKyAgICAgU0xKSVRfTlVNQkVSX09GX1NBVkVEX0ZMT0FUX1JFR0lTVEVSUyA6IG51bWJlciBvZiBhdmFpbGFibGUgZmxvYXRpbmcgcG9pbnQgc2F2ZWQgcmVnaXN0ZXJzCisgICAgIFNMSklUX1dPUkRfU0hJRlQgOiB0aGUgc2hpZnQgcmVxdWlyZWQgdG8gYXBwbHkgd2hlbiBhY2Nlc3NpbmcgYSBzbGppdF9zdy9zbGppdF91dyBhcnJheSBieSBpbmRleAorICAgICBTTEpJVF9ET1VCTEVfU0hJRlQgOiB0aGUgc2hpZnQgcmVxdWlyZWQgdG8gYXBwbHkgd2hlbiBhY2Nlc3NpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYSBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IGFycmF5IGJ5IGluZGV4CisgICAgIFNMSklUX1NJTkdMRV9TSElGVCA6IHRoZSBzaGlmdCByZXF1aXJlZCB0byBhcHBseSB3aGVuIGFjY2Vzc2luZworICAgICAgICAgICAgICAgICAgICAgICAgICBhIHNpbmdsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgYXJyYXkgYnkgaW5kZXgKKyAgICAgU0xKSVRfTE9DQUxTX09GRlNFVCA6IGxvY2FsIHNwYWNlIHN0YXJ0aW5nIG9mZnNldCAoU0xKSVRfU1AgKyBTTEpJVF9MT0NBTFNfT0ZGU0VUKQorICAgICBTTEpJVF9SRVRVUk5fQUREUkVTU19PRkZTRVQgOiBhIHJldHVybiBpbnN0cnVjdGlvbiBhbHdheXMgYWRkcyB0aGlzIG9mZnNldCB0byB0aGUgcmV0dXJuIGFkZHJlc3MKKworICAgT3RoZXIgbWFjcm9zOgorICAgICBTTEpJVF9DQUxMIDogQyBjYWxsaW5nIGNvbnZlbnRpb24gZGVmaW5lIGZvciBib3RoIGNhbGxpbmcgSklUIGZvcm0gQyBhbmQgQyBjYWxsYmFja3MgZm9yIEpJVAorICAgICBTTEpJVF9XKG51bWJlcikgOiBkZWZpbmluZyA2NCBiaXQgY29uc3RhbnRzIG9uIDY0IGJpdCBhcmNoaXRlY3R1cmVzIChjb21waWxlciBpbmRlcGVuZGVudCBoZWxwZXIpCisqLworCisvKioqKioqKioqKioqKioqKiovCisvKiBTYW5pdHkgY2hlY2suICovCisvKioqKioqKioqKioqKioqKiovCisKKyNpZiAhKChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikgXAorCXx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkgXAorCXx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkgXAorCXx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjcgJiYgU0xKSVRfQ09ORklHX0FSTV9WNykgXAorCXx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVEhVTUIyICYmIFNMSklUX0NPTkZJR19BUk1fVEhVTUIyKSBcCisJfHwgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV82NCAmJiBTTEpJVF9DT05GSUdfQVJNXzY0KSBcCisJfHwgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ18zMiAmJiBTTEpJVF9DT05GSUdfUFBDXzMyKSBcCisJfHwgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KSBcCisJfHwgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpIFwKKwl8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU182NCAmJiBTTEpJVF9DT05GSUdfTUlQU182NCkgXAorCXx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpIFwKKwl8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfVElMRUdYICYmIFNMSklUX0NPTkZJR19USUxFR1gpIFwKKwl8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVVUTyAmJiBTTEpJVF9DT05GSUdfQVVUTykgXAorCXx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19VTlNVUFBPUlRFRCAmJiBTTEpJVF9DT05GSUdfVU5TVVBQT1JURUQpKQorI2Vycm9yICJBbiBhcmNoaXRlY3R1cmUgbXVzdCBiZSBzZWxlY3RlZCIKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKSBcCisJKyAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpIFwKKwkrIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkgXAorCSsgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNyAmJiBTTEpJVF9DT05GSUdfQVJNX1Y3KSBcCisJKyAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1RIVU1CMiAmJiBTTEpJVF9DT05GSUdfQVJNX1RIVU1CMikgXAorCSsgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV82NCAmJiBTTEpJVF9DT05GSUdfQVJNXzY0KSBcCisJKyAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzMyICYmIFNMSklUX0NPTkZJR19QUENfMzIpIFwKKwkrIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkgXAorCSsgKGRlZmluZWQgU0xKSVRfQ09ORklHX1RJTEVHWCAmJiBTTEpJVF9DT05GSUdfVElMRUdYKSBcCisJKyAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikgXAorCSsgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfNjQgJiYgU0xKSVRfQ09ORklHX01JUFNfNjQpIFwKKwkrIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpIFwKKwkrIChkZWZpbmVkIFNMSklUX0NPTkZJR19BVVRPICYmIFNMSklUX0NPTkZJR19BVVRPKSBcCisJKyAoZGVmaW5lZCBTTEpJVF9DT05GSUdfVU5TVVBQT1JURUQgJiYgU0xKSVRfQ09ORklHX1VOU1VQUE9SVEVEKSA+PSAyCisjZXJyb3IgIk11bHRpcGxlIGFyY2hpdGVjdHVyZXMgYXJlIHNlbGVjdGVkIgorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIEF1dG9tYXRpYyBDUFUgZGV0ZWN0aW9uIChyZXF1aXJlcyBjb21waWxlciBzdXBwb3J0KS4gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BVVRPICYmIFNMSklUX0NPTkZJR19BVVRPKQorCisjaWZuZGVmIF9XSU4zMgorCisjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpCisjZGVmaW5lIFNMSklUX0NPTkZJR19YODZfMzIgMQorI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKQorI2RlZmluZSBTTEpJVF9DT05GSUdfWDg2XzY0IDEKKyNlbGlmIGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX0FSTV9fKQorI2lmZGVmIF9fdGh1bWIyX18KKyNkZWZpbmUgU0xKSVRfQ09ORklHX0FSTV9USFVNQjIgMQorI2VsaWYgZGVmaW5lZChfX0FSTV9BUkNIXzdfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzdBX18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF83Ul9fKQorI2RlZmluZSBTTEpJVF9DT05GSUdfQVJNX1Y3IDEKKyNlbHNlCisjZGVmaW5lIFNMSklUX0NPTkZJR19BUk1fVjUgMQorI2VuZGlmCisjZWxpZiBkZWZpbmVkIChfX2FhcmNoNjRfXykKKyNkZWZpbmUgU0xKSVRfQ09ORklHX0FSTV82NCAxCisjZWxpZiBkZWZpbmVkKF9fcHBjNjRfXykgfHwgZGVmaW5lZChfX3Bvd2VycGM2NF9fKSB8fCBkZWZpbmVkKF9BUkNIX1BQQzY0KSB8fCAoZGVmaW5lZChfUE9XRVIpICYmIGRlZmluZWQoX182NEJJVF9fKSkKKyNkZWZpbmUgU0xKSVRfQ09ORklHX1BQQ182NCAxCisjZWxpZiBkZWZpbmVkKF9fcHBjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX0FSQ0hfUFBDKSB8fCBkZWZpbmVkKF9BUkNIX1BXUikgfHwgZGVmaW5lZChfQVJDSF9QV1IyKSB8fCBkZWZpbmVkKF9QT1dFUikKKyNkZWZpbmUgU0xKSVRfQ09ORklHX1BQQ18zMiAxCisjZWxpZiBkZWZpbmVkKF9fbWlwc19fKSAmJiAhZGVmaW5lZChfTFA2NCkKKyNkZWZpbmUgU0xKSVRfQ09ORklHX01JUFNfMzIgMQorI2VsaWYgZGVmaW5lZChfX21pcHM2NCkKKyNkZWZpbmUgU0xKSVRfQ09ORklHX01JUFNfNjQgMQorI2VsaWYgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19zcGFyYykKKyNkZWZpbmUgU0xKSVRfQ09ORklHX1NQQVJDXzMyIDEKKyNlbGlmIGRlZmluZWQoX190aWxlZ3hfXykKKyNkZWZpbmUgU0xKSVRfQ09ORklHX1RJTEVHWCAxCisjZWxzZQorLyogVW5zdXBwb3J0ZWQgYXJjaGl0ZWN0dXJlICovCisjZGVmaW5lIFNMSklUX0NPTkZJR19VTlNVUFBPUlRFRCAxCisjZW5kaWYKKworI2Vsc2UgLyogIV9XSU4zMiAqLworCisjaWYgZGVmaW5lZChfTV9YNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyNkZWZpbmUgU0xKSVRfQ09ORklHX1g4Nl82NCAxCisjZWxpZiBkZWZpbmVkKF9BUk1fKQorI2RlZmluZSBTTEpJVF9DT05GSUdfQVJNX1Y1IDEKKyNlbHNlCisjZGVmaW5lIFNMSklUX0NPTkZJR19YODZfMzIgMQorI2VuZGlmCisKKyNlbmRpZiAvKiAhV0lOMzIgKi8KKyNlbmRpZiAvKiBTTEpJVF9DT05GSUdfQVVUTyAqLworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1VOU1VQUE9SVEVEICYmIFNMSklUX0NPTkZJR19VTlNVUFBPUlRFRCkKKyN1bmRlZiBTTEpJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUgorI2VuZGlmCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDUFUgZmFtaWx5IHR5cGUgZGV0ZWN0aW9uLiAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkgfHwgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNyAmJiBTTEpJVF9DT05GSUdfQVJNX1Y3KSBcCisJfHwgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9USFVNQjIgJiYgU0xKSVRfQ09ORklHX0FSTV9USFVNQjIpCisjZGVmaW5lIFNMSklUX0NPTkZJR19BUk1fMzIgMQorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpIHx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKyNkZWZpbmUgU0xKSVRfQ09ORklHX1g4NiAxCisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNXzMyICYmIFNMSklUX0NPTkZJR19BUk1fMzIpIHx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fNjQgJiYgU0xKSVRfQ09ORklHX0FSTV82NCkKKyNkZWZpbmUgU0xKSVRfQ09ORklHX0FSTSAxCisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzMyICYmIFNMSklUX0NPTkZJR19QUENfMzIpIHx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKKyNkZWZpbmUgU0xKSVRfQ09ORklHX1BQQyAxCisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikgfHwgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfNjQgJiYgU0xKSVRfQ09ORklHX01JUFNfNjQpCisjZGVmaW5lIFNMSklUX0NPTkZJR19NSVBTIDEKKyNlbGlmIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpIHx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ182NCAmJiBTTEpJVF9DT05GSUdfU1BBUkNfNjQpCisjZGVmaW5lIFNMSklUX0NPTkZJR19TUEFSQyAxCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFeHRlcm5hbCBmdW5jdGlvbiBkZWZpbml0aW9ucy4gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIShkZWZpbmVkIFNMSklUX1NURF9NQUNST1NfREVGSU5FRCAmJiBTTEpJVF9TVERfTUFDUk9TX0RFRklORUQpCisKKy8qIFRoZXNlIGxpYnJhcmllcyBhcmUgbmVlZGVkIGZvciB0aGUgbWFjcm9zIGJlbG93LiAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZW5kaWYgLyogU0xKSVRfU1REX01BQ1JPU19ERUZJTkVEICovCisKKy8qIEdlbmVyYWwgbWFjcm9zOgorICAgTm90ZTogU0xKSVQgaXMgZGVzaWduZWQgdG8gYmUgaW5kZXBlbmRlbnQgZnJvbSB0aGVtIGFzIHBvc3NpYmxlLgorCisgICBJbiByZWxlYXNlIG1vZGUgKFNMSklUX0RFQlVHIGlzIG5vdCBkZWZpbmVkKSBvbmx5IHRoZSBmb2xsb3dpbmcKKyAgIGV4dGVybmFsIGZ1bmN0aW9ucyBhcmUgbmVlZGVkOgorKi8KKworI2lmbmRlZiBTTEpJVF9NQUxMT0MKKyNkZWZpbmUgU0xKSVRfTUFMTE9DKHNpemUsIGFsbG9jYXRvcl9kYXRhKSBtYWxsb2Moc2l6ZSkKKyNlbmRpZgorCisjaWZuZGVmIFNMSklUX0ZSRUUKKyNkZWZpbmUgU0xKSVRfRlJFRShwdHIsIGFsbG9jYXRvcl9kYXRhKSBmcmVlKHB0cikKKyNlbmRpZgorCisjaWZuZGVmIFNMSklUX01FTU1PVkUKKyNkZWZpbmUgU0xKSVRfTUVNTU9WRShkZXN0LCBzcmMsIGxlbikgbWVtbW92ZShkZXN0LCBzcmMsIGxlbikKKyNlbmRpZgorCisjaWZuZGVmIFNMSklUX1pFUk9NRU0KKyNkZWZpbmUgU0xKSVRfWkVST01FTShkZXN0LCBsZW4pIG1lbXNldChkZXN0LCAwLCBsZW4pCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIENvbXBpbGVyIGhlbHBlciBtYWNyb3MuICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoU0xKSVRfTElLRUxZKSAmJiAhZGVmaW5lZChTTEpJVF9VTkxJS0VMWSkKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSAzKQorI2RlZmluZSBTTEpJVF9MSUtFTFkoeCkJCV9fYnVpbHRpbl9leHBlY3QoKHgpLCAxKQorI2RlZmluZSBTTEpJVF9VTkxJS0VMWSh4KQlfX2J1aWx0aW5fZXhwZWN0KCh4KSwgMCkKKyNlbHNlCisjZGVmaW5lIFNMSklUX0xJS0VMWSh4KQkJKHgpCisjZGVmaW5lIFNMSklUX1VOTElLRUxZKHgpCSh4KQorI2VuZGlmCisKKyNlbmRpZiAvKiAhZGVmaW5lZChTTEpJVF9MSUtFTFkpICYmICFkZWZpbmVkKFNMSklUX1VOTElLRUxZKSAqLworCisjaWZuZGVmIFNMSklUX0lOTElORQorLyogSW5saW5lIGZ1bmN0aW9ucy4gU29tZSBvbGQgY29tcGlsZXJzIGRvIG5vdCBzdXBwb3J0IHRoZW0uICovCisjaWYgZGVmaW5lZChfX1NVTlBST19DKSAmJiBfX1NVTlBST19DIDw9IDB4NTEwCisjZGVmaW5lIFNMSklUX0lOTElORQorI2Vsc2UKKyNkZWZpbmUgU0xKSVRfSU5MSU5FIF9faW5saW5lCisjZW5kaWYKKyNlbmRpZiAvKiAhU0xKSVRfSU5MSU5FICovCisKKyNpZm5kZWYgU0xKSVRfTk9JTkxJTkUKKy8qIE5vdCBpbmxpbmUgZnVuY3Rpb25zLiAqLworI2lmIGRlZmluZWQoX19HTlVDX18pCisjZGVmaW5lIFNMSklUX05PSU5MSU5FIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCisjZWxzZQorI2RlZmluZSBTTEpJVF9OT0lOTElORQorI2VuZGlmCisjZW5kaWYgLyogIVNMSklUX0lOTElORSAqLworCisjaWZuZGVmIFNMSklUX0NPTlNUCisvKiBDb25zdCB2YXJpYWJsZXMuICovCisjZGVmaW5lIFNMSklUX0NPTlNUIGNvbnN0CisjZW5kaWYKKworI2lmbmRlZiBTTEpJVF9VTlVTRURfQVJHCisvKiBVbnVzZWQgYXJndW1lbnRzLiAqLworI2RlZmluZSBTTEpJVF9VTlVTRURfQVJHKGFyZykgKHZvaWQpYXJnCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFR5cGUgb2YgcHVibGljIEFQSSBmdW5jdGlvbnMuICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1NUQVRJQyAmJiBTTEpJVF9DT05GSUdfU1RBVElDKQorLyogU3RhdGljIEFCSSBmdW5jdGlvbnMuIEZvciBhbGwtaW4tb25lIHByb2dyYW1zLiAqLworCisjaWYgZGVmaW5lZChfX0dOVUNfXykKKy8qIERpc2FibGUgdW51c2VkIHdhcm5pbmdzIGluIGdjYy4gKi8KKyNkZWZpbmUgU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0YXRpYyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorI2Vsc2UKKyNkZWZpbmUgU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0YXRpYworI2VuZGlmCisKKyNlbHNlCisjZGVmaW5lIFNMSklUX0FQSV9GVU5DX0FUVFJJQlVURQorI2VuZGlmIC8qIChkZWZpbmVkIFNMSklUX0NPTkZJR19TVEFUSUMgJiYgU0xKSVRfQ09ORklHX1NUQVRJQykgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJbnN0cnVjdGlvbiBjYWNoZSBmbHVzaC4gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFNMSklUX0NBQ0hFX0ZMVVNICisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2ICYmIFNMSklUX0NPTkZJR19YODYpCisKKy8qIE5vdCByZXF1aXJlZCB0byBpbXBsZW1lbnQgb24gYXJjaHMgd2l0aCB1bmlmaWVkIGNhY2hlcy4gKi8KKyNkZWZpbmUgU0xKSVRfQ0FDSEVfRkxVU0goZnJvbSwgdG8pCisKKyNlbGlmIGRlZmluZWQgX19BUFBMRV9fCisKKy8qIFN1cHBvcnRlZCBieSBhbGwgbWFjcyBzaW5jZSBNYWMgT1MgMTAuNS4KKyAgIEhvd2V2ZXIsIGl0IGRvZXMgbm90IHdvcmsgb24gbm9uLWphaWxicm9rZW4gaU9TIGRldmljZXMsCisgICBhbHRob3VnaCB0aGUgY29tcGlsYXRpb24gaXMgc3VjY2Vzc2Z1bC4gKi8KKworI2RlZmluZSBTTEpJVF9DQUNIRV9GTFVTSChmcm9tLCB0bykgXAorCXN5c19pY2FjaGVfaW52YWxpZGF0ZSgoY2hhciopKGZyb20pLCAoY2hhciopKHRvKSAtIChjaGFyKikoZnJvbSkpCisKKyNlbGlmIGRlZmluZWQgX19BTkRST0lEX18KKworLyogQW5kcm9pZCBsYWNrcyBfX2NsZWFyX2NhY2hlOyBpbnN0ZWFkLCBjYWNoZWZsdXNoIHNob3VsZCBiZSB1c2VkLiAqLworCisjZGVmaW5lIFNMSklUX0NBQ0hFX0ZMVVNIKGZyb20sIHRvKSBcCisgICAgY2FjaGVmbHVzaCgobG9uZykoZnJvbSksIChsb25nKSh0byksIDApCisKKyNlbGlmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUEMgJiYgU0xKSVRfQ09ORklHX1BQQykKKworLyogVGhlIF9fY2xlYXJfY2FjaGUoKSBpbXBsZW1lbnRhdGlvbiBvZiBHQ0MgaXMgYSBkdW1teSBmdW5jdGlvbiBvbiBQb3dlclBDLiAqLworI2RlZmluZSBTTEpJVF9DQUNIRV9GTFVTSChmcm9tLCB0bykgXAorCXBwY19jYWNoZV9mbHVzaCgoZnJvbSksICh0bykpCisKKyNlbGlmIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpCisKKy8qIFRoZSBfX2NsZWFyX2NhY2hlKCkgaW1wbGVtZW50YXRpb24gb2YgR0NDIGlzIGEgZHVtbXkgZnVuY3Rpb24gb24gU3BhcmMuICovCisjZGVmaW5lIFNMSklUX0NBQ0hFX0ZMVVNIKGZyb20sIHRvKSBcCisJc3BhcmNfY2FjaGVfZmx1c2goKGZyb20pLCAodG8pKQorCisjZWxzZQorCisvKiBDYWxscyBfX0FSTV9OUl9jYWNoZWZsdXNoIG9uIEFSTS1MaW51eC4gKi8KKyNkZWZpbmUgU0xKSVRfQ0FDSEVfRkxVU0goZnJvbSwgdG8pIFwKKwlfX2NsZWFyX2NhY2hlKChjaGFyKikoZnJvbSksIChjaGFyKikodG8pKQorCisjZW5kaWYKKworI2VuZGlmIC8qICFTTEpJVF9DQUNIRV9GTFVTSCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogQnl0ZS9oYWxmL2ludC93b3JkL3NpbmdsZS9kb3VibGUgdHlwZSBkZWZpbml0aW9ucy4gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIDggYml0IGJ5dGUgdHlwZS4gKi8KK3R5cGVkZWYgdW5zaWduZWQgY2hhciBzbGppdF91YjsKK3R5cGVkZWYgc2lnbmVkIGNoYXIgc2xqaXRfc2I7CisKKy8qIDE2IGJpdCBoYWxmLXdvcmQgdHlwZS4gKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHNsaml0X3VoOwordHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IHNsaml0X3NoOworCisvKiAzMiBiaXQgaW50ZWdlciB0eXBlLiAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgc2xqaXRfdWk7Cit0eXBlZGVmIHNpZ25lZCBpbnQgc2xqaXRfc2k7CisKKy8qIE1hY2hpbmUgd29yZCB0eXBlLiBFbm91Z2ggZm9yIHN0b3JpbmcgYSBwb2ludGVyLgorICAgICAzMiBiaXQgZm9yIDMyIGJpdCBtYWNoaW5lcy4KKyAgICAgNjQgYml0IGZvciA2NCBiaXQgbWFjaGluZXMuICovCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1VOU1VQUE9SVEVEICYmIFNMSklUX0NPTkZJR19VTlNVUFBPUlRFRCkKKy8qIEp1c3QgdG8gaGF2ZSBzb21ldGhpbmcuICovCisjZGVmaW5lIFNMSklUX1dPUkRfU0hJRlQgMAordHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBzbGppdF91dzsKK3R5cGVkZWYgbG9uZyBpbnQgc2xqaXRfc3c7CisjZWxpZiAhKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KSBcCisJJiYgIShkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fNjQgJiYgU0xKSVRfQ09ORklHX0FSTV82NCkgXAorCSYmICEoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpIFwKKwkmJiAhKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfNjQgJiYgU0xKSVRfQ09ORklHX01JUFNfNjQpIFwKKwkmJiAhKGRlZmluZWQgU0xKSVRfQ09ORklHX1RJTEVHWCAmJiBTTEpJVF9DT05GSUdfVElMRUdYKQorI2RlZmluZSBTTEpJVF8zMkJJVF9BUkNISVRFQ1RVUkUgMQorI2RlZmluZSBTTEpJVF9XT1JEX1NISUZUIDIKK3R5cGVkZWYgdW5zaWduZWQgaW50IHNsaml0X3V3OwordHlwZWRlZiBpbnQgc2xqaXRfc3c7CisjZWxzZQorI2RlZmluZSBTTEpJVF82NEJJVF9BUkNISVRFQ1RVUkUgMQorI2RlZmluZSBTTEpJVF9XT1JEX1NISUZUIDMKKyNpZmRlZiBfV0lOMzIKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCBzbGppdF91dzsKK3R5cGVkZWYgX19pbnQ2NCBzbGppdF9zdzsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHNsaml0X3V3OwordHlwZWRlZiBsb25nIGludCBzbGppdF9zdzsKKyNlbmRpZgorI2VuZGlmCisKK3R5cGVkZWYgc2xqaXRfdXcgc2xqaXRfcDsKKworLyogRmxvYXRpbmcgcG9pbnQgdHlwZXMuICovCit0eXBlZGVmIGZsb2F0IHNsaml0X3M7Cit0eXBlZGVmIGRvdWJsZSBzbGppdF9kOworCisvKiBTaGlmdCBmb3IgcG9pbnRlciBzaXplZCBkYXRhLiAqLworI2RlZmluZSBTTEpJVF9QT0lOVEVSX1NISUZUIFNMSklUX1dPUkRfU0hJRlQKKworLyogU2hpZnQgZm9yIGRvdWJsZSBwcmVjaXNpb24gc2l6ZWQgZGF0YS4gKi8KKyNkZWZpbmUgU0xKSVRfRE9VQkxFX1NISUZUIDMKKyNkZWZpbmUgU0xKSVRfU0lOR0xFX1NISUZUIDIKKworI2lmbmRlZiBTTEpJVF9XCisKKy8qIERlZmluaW5nIGxvbmcgY29uc3RhbnRzLiAqLworI2lmIChkZWZpbmVkIFNMSklUXzY0QklUX0FSQ0hJVEVDVFVSRSAmJiBTTEpJVF82NEJJVF9BUkNISVRFQ1RVUkUpCisjZGVmaW5lIFNMSklUX1codykJKHcjI2xsKQorI2Vsc2UKKyNkZWZpbmUgU0xKSVRfVyh3KQkodykKKyNlbmRpZgorCisjZW5kaWYgLyogIVNMSklUX1cgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFbmRpYW5uZXNzIGRldGVjdGlvbi4gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoU0xKSVRfQklHX0VORElBTikgJiYgIWRlZmluZWQoU0xKSVRfTElUVExFX0VORElBTikKKworLyogVGhlc2UgbWFjcm9zIGFyZSBtb3N0bHkgdXNlZnVsIGZvciB0aGUgYXBwbGljYXRpb25zLiAqLworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfMzIgJiYgU0xKSVRfQ09ORklHX1BQQ18zMikgXAorCXx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKKworI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisjZGVmaW5lIFNMSklUX0xJVFRMRV9FTkRJQU4gMQorI2Vsc2UKKyNkZWZpbmUgU0xKSVRfQklHX0VORElBTiAxCisjZW5kaWYKKworI2VsaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpIFwKKwl8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU182NCAmJiBTTEpJVF9DT05GSUdfTUlQU182NCkKKworI2lmZGVmIF9fTUlQU0VMX18KKyNkZWZpbmUgU0xKSVRfTElUVExFX0VORElBTiAxCisjZWxzZQorI2RlZmluZSBTTEpJVF9CSUdfRU5ESUFOIDEKKyNlbmRpZgorCisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfU1BBUkNfMzIgJiYgU0xKSVRfQ09ORklHX1NQQVJDXzMyKQorCisjZGVmaW5lIFNMSklUX0JJR19FTkRJQU4gMQorCisjZWxzZQorI2RlZmluZSBTTEpJVF9MSVRUTEVfRU5ESUFOIDEKKyNlbmRpZgorCisjZW5kaWYgLyogIWRlZmluZWQoU0xKSVRfQklHX0VORElBTikgJiYgIWRlZmluZWQoU0xKSVRfTElUVExFX0VORElBTikgKi8KKworLyogU2FuaXR5IGNoZWNrLiAqLworI2lmIChkZWZpbmVkIFNMSklUX0JJR19FTkRJQU4gJiYgU0xKSVRfQklHX0VORElBTikgJiYgKGRlZmluZWQgU0xKSVRfTElUVExFX0VORElBTiAmJiBTTEpJVF9MSVRUTEVfRU5ESUFOKQorI2Vycm9yICJFeGFjdGx5IG9uZSBlbmRpYW5uZXNzIG11c3QgYmUgc2VsZWN0ZWQiCisjZW5kaWYKKworI2lmICEoZGVmaW5lZCBTTEpJVF9CSUdfRU5ESUFOICYmIFNMSklUX0JJR19FTkRJQU4pICYmICEoZGVmaW5lZCBTTEpJVF9MSVRUTEVfRU5ESUFOICYmIFNMSklUX0xJVFRMRV9FTkRJQU4pCisjZXJyb3IgIkV4YWN0bHkgb25lIGVuZGlhbm5lc3MgbXVzdCBiZSBzZWxlY3RlZCIKKyNlbmRpZgorCisjaWZuZGVmIFNMSklUX1VOQUxJR05FRAorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKSBcCisJfHwgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KSBcCisJfHwgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNyAmJiBTTEpJVF9DT05GSUdfQVJNX1Y3KSBcCisJfHwgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9USFVNQjIgJiYgU0xKSVRfQ09ORklHX0FSTV9USFVNQjIpIFwKKwl8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNXzY0ICYmIFNMSklUX0NPTkZJR19BUk1fNjQpIFwKKwl8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzMyICYmIFNMSklUX0NPTkZJR19QUENfMzIpIFwKKwl8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisjZGVmaW5lIFNMSklUX1VOQUxJR05FRCAxCisjZW5kaWYKKworI2VuZGlmIC8qICFTTEpJVF9VTkFMSUdORUQgKi8KKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKy8qIEF1dG8gZGV0ZWN0IFNTRTIgc3VwcG9ydCB1c2luZyBDUFVJRC4KKyAgIE9uIDY0IGJpdCB4ODYgY3B1cywgc3NlMiBtdXN0IGJlIHByZXNlbnQuICovCisjZGVmaW5lIFNMSklUX0RFVEVDVF9TU0UyIDEKKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBDYWxsaW5nIGNvbnZlbnRpb24gb2YgZnVuY3Rpb25zIGdlbmVyYXRlZCBieSBTTEpJVCBvciBjYWxsZWQgZnJvbSB0aGUgZ2VuZXJhdGVkIGNvZGUuICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgU0xKSVRfQ0FMTAorCisjaWYgKGRlZmluZWQgU0xKSVRfVVNFX0NERUNMX0NBTExJTkdfQ09OVkVOVElPTiAmJiBTTEpJVF9VU0VfQ0RFQ0xfQ0FMTElOR19DT05WRU5USU9OKQorCisvKiBGb3JjZSBjZGVjbC4gKi8KKyNkZWZpbmUgU0xKSVRfQ0FMTAorCisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfX0FQUExFX18pCisKKyNkZWZpbmUgU0xKSVRfQ0FMTCBfX2F0dHJpYnV0ZV9fICgoZmFzdGNhbGwpKQorI2RlZmluZSBTTEpJVF9YODZfMzJfRkFTVENBTEwgMQorCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorCisjZGVmaW5lIFNMSklUX0NBTEwgX19mYXN0Y2FsbAorI2RlZmluZSBTTEpJVF9YODZfMzJfRkFTVENBTEwgMQorCisjZWxpZiBkZWZpbmVkKF9fQk9STEFORENfXykKKworI2RlZmluZSBTTEpJVF9DQUxMIF9fbXNmYXN0Y2FsbAorI2RlZmluZSBTTEpJVF9YODZfMzJfRkFTVENBTEwgMQorCisjZWxzZSAvKiBVbmtub3duIGNvbXBpbGVyLiAqLworCisvKiBUaGUgY2RlY2wgYXR0cmlidXRlIGlzIHRoZSBkZWZhdWx0LiAqLworI2RlZmluZSBTTEpJVF9DQUxMCisKKyNlbmRpZgorCisjZWxzZSAvKiBOb24geDg2LTMyIGFyY2hpdGVjdHVyZXMuICovCisKKyNkZWZpbmUgU0xKSVRfQ0FMTAorCisjZW5kaWYgLyogU0xKSVRfQ09ORklHX1g4Nl8zMiAqLworCisjZW5kaWYgLyogIVNMSklUX0NBTEwgKi8KKworI2lmbmRlZiBTTEpJVF9JTkRJUkVDVF9DQUxMCisjaWYgKChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkgJiYgKGRlZmluZWQgU0xKSVRfQklHX0VORElBTiAmJiBTTEpJVF9CSUdfRU5ESUFOKSkgXAorCXx8ICgoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzMyICYmIFNMSklUX0NPTkZJR19QUENfMzIpICYmIGRlZmluZWQgX0FJWCkKKy8qIEl0IHNlZW1zIGNlcnRhaW4gcHBjIGNvbXBpbGVycyB1c2UgYW4gaW5kaXJlY3QgYWRkcmVzc2luZyBmb3IgZnVuY3Rpb25zCisgICB3aGljaCBtYWtlcyB0aGluZ3MgY29tcGxpY2F0ZWQuICovCisjZGVmaW5lIFNMSklUX0lORElSRUNUX0NBTEwgMQorI2VuZGlmCisjZW5kaWYgLyogU0xKSVRfSU5ESVJFQ1RfQ0FMTCAqLworCisvKiBUaGUgb2Zmc2V0IHdoaWNoIG5lZWRzIHRvIGJlIHN1YnN0cmFjdGVkIGZyb20gdGhlIHJldHVybiBhZGRyZXNzIHRvCitkZXRlcm1pbmUgdGhlIG5leHQgZXhlY3V0ZWQgaW5zdHJ1Y3Rpb24gYWZ0ZXIgcmV0dXJuLiAqLworI2lmbmRlZiBTTEpJVF9SRVRVUk5fQUREUkVTU19PRkZTRVQKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfU1BBUkNfMzIgJiYgU0xKSVRfQ09ORklHX1NQQVJDXzMyKQorI2RlZmluZSBTTEpJVF9SRVRVUk5fQUREUkVTU19PRkZTRVQgOAorI2Vsc2UKKyNkZWZpbmUgU0xKSVRfUkVUVVJOX0FERFJFU1NfT0ZGU0VUIDAKKyNlbmRpZgorI2VuZGlmIC8qIFNMSklUX1JFVFVSTl9BRERSRVNTX09GRlNFVCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogRnVuY3Rpb25zIG9mIHRoZSBidWlsdC1pbiBleGVjdXRhYmxlIGFsbG9jYXRvci4gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUiAmJiBTTEpJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUikKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkKiBzbGppdF9tYWxsb2NfZXhlYyhzbGppdF91dyBzaXplKTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X2ZyZWVfZXhlYyh2b2lkKiBwdHIpOworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfZnJlZV91bnVzZWRfbWVtb3J5X2V4ZWModm9pZCk7CisjZGVmaW5lIFNMSklUX01BTExPQ19FWEVDKHNpemUpIHNsaml0X21hbGxvY19leGVjKHNpemUpCisjZGVmaW5lIFNMSklUX0ZSRUVfRVhFQyhwdHIpIHNsaml0X2ZyZWVfZXhlYyhwdHIpCisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBSZWdpc3RlcnMgYW5kIGxvY2FscyBvZmZzZXQgZGV0ZXJtaW5hdGlvbi4gKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQorCisjZGVmaW5lIFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgMTAKKyNkZWZpbmUgU0xKSVRfTlVNQkVSX09GX1NBVkVEX1JFR0lTVEVSUyA3CisjaWYgKGRlZmluZWQgU0xKSVRfWDg2XzMyX0ZBU1RDQUxMICYmIFNMSklUX1g4Nl8zMl9GQVNUQ0FMTCkKKyNkZWZpbmUgU0xKSVRfTE9DQUxTX09GRlNFVF9CQVNFICgoMiArIDQpICogc2l6ZW9mKHNsaml0X3N3KSkKKyNlbHNlCisvKiBNYXhpbXVtIDMgYXJndW1lbnRzIGFyZSBwYXNzZWQgb24gdGhlIHN0YWNrLCArMSBmb3IgZG91YmxlIGFsaWdubWVudC4gKi8KKyNkZWZpbmUgU0xKSVRfTE9DQUxTX09GRlNFVF9CQVNFICgoMyArIDEgKyA0KSAqIHNpemVvZihzbGppdF9zdykpCisjZW5kaWYgLyogU0xKSVRfWDg2XzMyX0ZBU1RDQUxMICovCisKKyNlbGlmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKworI2lmbmRlZiBfV0lONjQKKyNkZWZpbmUgU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyAxMgorI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTIDYKKyNkZWZpbmUgU0xKSVRfTE9DQUxTX09GRlNFVF9CQVNFIChzaXplb2Yoc2xqaXRfc3cpKQorI2Vsc2UKKyNkZWZpbmUgU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyAxMgorI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTIDgKKyNkZWZpbmUgU0xKSVRfTE9DQUxTX09GRlNFVF9CQVNFICgoNCArIDIpICogc2l6ZW9mKHNsaml0X3N3KSkKKyNlbmRpZiAvKiBfV0lONjQgKi8KKworI2VsaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KSB8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y3ICYmIFNMSklUX0NPTkZJR19BUk1fVjcpCisKKyNkZWZpbmUgU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyAxMQorI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTIDgKKyNkZWZpbmUgU0xKSVRfTE9DQUxTX09GRlNFVF9CQVNFIDAKKworI2VsaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9USFVNQjIgJiYgU0xKSVRfQ09ORklHX0FSTV9USFVNQjIpCisKKyNkZWZpbmUgU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyAxMQorI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTIDcKKyNkZWZpbmUgU0xKSVRfTE9DQUxTX09GRlNFVF9CQVNFIDAKKworI2VsaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV82NCAmJiBTTEpJVF9DT05GSUdfQVJNXzY0KQorCisjZGVmaW5lIFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgMjUKKyNkZWZpbmUgU0xKSVRfTlVNQkVSX09GX1NBVkVEX1JFR0lTVEVSUyAxMAorI2RlZmluZSBTTEpJVF9MT0NBTFNfT0ZGU0VUX0JBU0UgKDIgKiBzaXplb2Yoc2xqaXRfc3cpKQorCisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDICYmIFNMSklUX0NPTkZJR19QUEMpCisKKyNkZWZpbmUgU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyAyMgorI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTIDE3CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KSB8fCAoZGVmaW5lZCBfQUlYKQorI2RlZmluZSBTTEpJVF9MT0NBTFNfT0ZGU0VUX0JBU0UgKCg2ICsgOCkgKiBzaXplb2Yoc2xqaXRfc3cpKQorI2VsaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ18zMiAmJiBTTEpJVF9DT05GSUdfUFBDXzMyKQorLyogQWRkICsxIGZvciBkb3VibGUgYWxpZ25tZW50LiAqLworI2RlZmluZSBTTEpJVF9MT0NBTFNfT0ZGU0VUX0JBU0UgKCgzICsgMSkgKiBzaXplb2Yoc2xqaXRfc3cpKQorI2Vsc2UKKyNkZWZpbmUgU0xKSVRfTE9DQUxTX09GRlNFVF9CQVNFICgzICogc2l6ZW9mKHNsaml0X3N3KSkKKyNlbmRpZiAvKiBTTEpJVF9DT05GSUdfUFBDXzY0IHx8IF9BSVggKi8KKworI2VsaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFMgJiYgU0xKSVRfQ09ORklHX01JUFMpCisKKyNkZWZpbmUgU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyAxNworI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTIDgKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikKKyNkZWZpbmUgU0xKSVRfTE9DQUxTX09GRlNFVF9CQVNFICg0ICogc2l6ZW9mKHNsaml0X3N3KSkKKyNlbHNlCisjZGVmaW5lIFNMSklUX0xPQ0FMU19PRkZTRVRfQkFTRSAwCisjZW5kaWYKKworI2VsaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1NQQVJDICYmIFNMSklUX0NPTkZJR19TUEFSQykKKworI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTIDE4CisjZGVmaW5lIFNMSklUX05VTUJFUl9PRl9TQVZFRF9SRUdJU1RFUlMgMTQKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfU1BBUkNfMzIgJiYgU0xKSVRfQ09ORklHX1NQQVJDXzMyKQorLyogQWRkICsxIGZvciBkb3VibGUgYWxpZ25tZW50LiAqLworI2RlZmluZSBTTEpJVF9MT0NBTFNfT0ZGU0VUX0JBU0UgKCgyMyArIDEpICogc2l6ZW9mKHNsaml0X3N3KSkKKyNlbmRpZgorCisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfVElMRUdYICYmIFNMSklUX0NPTkZJR19USUxFR1gpCisKKyNkZWZpbmUgU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyAxMAorI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTIDUKKyNkZWZpbmUgU0xKSVRfTE9DQUxTX09GRlNFVF9CQVNFIDAKKworI2VsaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1VOU1VQUE9SVEVEICYmIFNMSklUX0NPTkZJR19VTlNVUFBPUlRFRCkKKworI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTIDAKKyNkZWZpbmUgU0xKSVRfTlVNQkVSX09GX1NBVkVEX1JFR0lTVEVSUyAwCisjZGVmaW5lIFNMSklUX0xPQ0FMU19PRkZTRVRfQkFTRSAwCisKKyNlbmRpZgorCisjZGVmaW5lIFNMSklUX0xPQ0FMU19PRkZTRVQgKFNMSklUX0xPQ0FMU19PRkZTRVRfQkFTRSkKKworI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfU0NSQVRDSF9SRUdJU1RFUlMgXAorCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTIC0gU0xKSVRfTlVNQkVSX09GX1NBVkVEX1JFR0lTVEVSUykKKworI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTIDYKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpICYmIChkZWZpbmVkIF9XSU42NCkKKyNkZWZpbmUgU0xKSVRfTlVNQkVSX09GX1NBVkVEX0ZMT0FUX1JFR0lTVEVSUyAxCisjZWxzZQorI2RlZmluZSBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfRkxPQVRfUkVHSVNURVJTIDAKKyNlbmRpZgorCisjZGVmaW5lIFNMSklUX05VTUJFUl9PRl9TQ1JBVENIX0ZMT0FUX1JFR0lTVEVSUyBcCisJKFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMgLSBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfRkxPQVRfUkVHSVNURVJTKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIERlYnVnIGFuZCB2ZXJib3NlIHJlbGF0ZWQgbWFjcm9zLiAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfREVCVUcgJiYgU0xKSVRfREVCVUcpCisKKyNpZiAhZGVmaW5lZChTTEpJVF9BU1NFUlQpIHx8ICFkZWZpbmVkKFNMSklUX0FTU0VSVF9TVE9QKQorCisvKiBTTEpJVF9IQUxUX1BST0NFU1MgbXVzdCBoYWx0IHRoZSBwcm9jZXNzLiAqLworI2lmbmRlZiBTTEpJVF9IQUxUX1BST0NFU1MKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBTTEpJVF9IQUxUX1BST0NFU1MoKSBcCisJYWJvcnQoKTsKKyNlbmRpZiAvKiAhU0xKSVRfSEFMVF9QUk9DRVNTICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZW5kaWYgLyogIVNMSklUX0FTU0VSVCB8fCAhU0xKSVRfQVNTRVJUX1NUT1AgKi8KKworLyogRmVlbCBmcmVlIHRvIHJlZGVmaW5lIHRoZXNlIHR3byBtYWNyb3MuICovCisjaWZuZGVmIFNMSklUX0FTU0VSVAorCisjZGVmaW5lIFNMSklUX0FTU0VSVCh4KSBcCisJZG8geyBcCisJCWlmIChTTEpJVF9VTkxJS0VMWSghKHgpKSkgeyBcCisJCQlwcmludGYoIkFzc2VydGlvbiBmYWlsZWQgYXQgIiBfX0ZJTEVfXyAiOiVkXG4iLCBfX0xJTkVfXyk7IFwKKwkJCVNMSklUX0hBTFRfUFJPQ0VTUygpOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiAhU0xKSVRfQVNTRVJUICovCisKKyNpZm5kZWYgU0xKSVRfQVNTRVJUX1NUT1AKKworI2RlZmluZSBTTEpJVF9BU1NFUlRfU1RPUCgpIFwKKwlkbyB7IFwKKwkJcHJpbnRmKCJTaG91bGQgbmV2ZXIgYmVlbiByZWFjaGVkICIgX19GSUxFX18gIjolZFxuIiwgX19MSU5FX18pOyBcCisJCVNMSklUX0hBTFRfUFJPQ0VTUygpOyBcCisJfSB3aGlsZSAoMCkKKworI2VuZGlmIC8qICFTTEpJVF9BU1NFUlRfU1RPUCAqLworCisjZWxzZSAvKiAoZGVmaW5lZCBTTEpJVF9ERUJVRyAmJiBTTEpJVF9ERUJVRykgKi8KKworLyogRm9yY2luZyBlbXB0eSwgYnV0IHZhbGlkIHN0YXRlbWVudHMuICovCisjdW5kZWYgU0xKSVRfQVNTRVJUCisjdW5kZWYgU0xKSVRfQVNTRVJUX1NUT1AKKworI2RlZmluZSBTTEpJVF9BU1NFUlQoeCkgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgU0xKSVRfQVNTRVJUX1NUT1AoKSBcCisJZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogKGRlZmluZWQgU0xKSVRfREVCVUcgJiYgU0xKSVRfREVCVUcpICovCisKKyNpZm5kZWYgU0xKSVRfQ09NUElMRV9BU1NFUlQKKworLyogU2hvdWxkIGJlIGltcHJvdmVkIGV2ZW50dWFsbHkuICovCisjZGVmaW5lIFNMSklUX0NPTVBJTEVfQVNTRVJUKHgsIGRlc2NyaXB0aW9uKSBcCisJU0xKSVRfQVNTRVJUKHgpCisKKyNlbmRpZiAvKiAhU0xKSVRfQ09NUElMRV9BU1NFUlQgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRFeGVjQWxsb2NhdG9yLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRFeGVjQWxsb2NhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI0ZWQzMwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdEV4ZWNBbGxvY2F0b3IuYwpAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqICAgIFN0YWNrLWxlc3MgSnVzdC1Jbi1UaW1lIGNvbXBpbGVyCisgKgorICogICAgQ29weXJpZ2h0IDIwMDktMjAxMiBab2x0YW4gSGVyY3plZyAoaHptZXN0ZXJAZnJlZW1haWwuaHUpLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgorICogICAgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UCisgKiBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICAgVGhpcyBmaWxlIGNvbnRhaW5zIGEgc2ltcGxlIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRvcgorCisgICBJdCBpcyBhc3N1bWVkLCB0aGF0IGV4ZWN1dGFibGUgY29kZSBibG9ja3MgYXJlIHVzdWFsbHkgbWVkaXVtIChvciBzb21ldGltZXMKKyAgIGxhcmdlKSBtZW1vcnkgYmxvY2tzLCBhbmQgdGhlIGFsbG9jYXRvciBpcyBub3QgdG9vIGZyZXF1ZW50bHkgY2FsbGVkIChsZXNzCisgICBvcHRpbWl6ZWQgdGhhbiBvdGhlciBhbGxvY2F0b3JzKS4gVGh1cywgdXNpbmcgaXQgYXMgYSBnZW5lcmljIGFsbG9jYXRvciBpcworICAgbm90IHN1Z2dlc3RlZC4KKworICAgSG93IGRvZXMgaXQgd29yazoKKyAgICAgTWVtb3J5IGlzIGFsbG9jYXRlZCBpbiBjb250aW51b3VzIG1lbW9yeSBhcmVhcyBjYWxsZWQgY2h1bmtzIGJ5IGFsbG9jX2NodW5rKCkKKyAgICAgQ2h1bmsgZm9ybWF0OgorICAgICBbIGJsb2NrIF1bIGJsb2NrIF0gLi4uIFsgYmxvY2sgXVsgYmxvY2sgdGVybWluYXRvciBdCisKKyAgIEFsbCBibG9ja3MgYW5kIHRoZSBibG9jayB0ZXJtaW5hdG9yIGlzIHN0YXJ0ZWQgd2l0aCBibG9ja19oZWFkZXIuIFRoZSBibG9jaworICAgaGVhZGVyIGNvbnRhaW5zIHRoZSBzaXplIG9mIHRoZSBwcmV2aW91cyBhbmQgdGhlIG5leHQgYmxvY2suIFRoZXNlIHNpemVzCisgICBjYW4gYWxzbyBjb250YWluIHNwZWNpYWwgdmFsdWVzLgorICAgICBCbG9jayBzaXplOgorICAgICAgIDAgLSBUaGUgYmxvY2sgaXMgYSBmcmVlX2Jsb2NrLCB3aXRoIGEgZGlmZmVyZW50IHNpemUgbWVtYmVyLgorICAgICAgIDEgLSBUaGUgYmxvY2sgaXMgYSBibG9jayB0ZXJtaW5hdG9yLgorICAgICAgIG4gLSBUaGUgYmxvY2sgaXMgdXNlZCBhdCB0aGUgbW9tZW50LCBhbmQgdGhlIHZhbHVlIGNvbnRhaW5zIGl0cyBzaXplLgorICAgICBQcmV2aW91cyBibG9jayBzaXplOgorICAgICAgIDAgLSBUaGlzIGlzIHRoZSBmaXJzdCBibG9jayBvZiB0aGUgbWVtb3J5IGNodW5rLgorICAgICAgIG4gLSBUaGUgc2l6ZSBvZiB0aGUgcHJldmlvdXMgYmxvY2suCisKKyAgIFVzaW5nIHRoZXNlIHNpemUgdmFsdWVzIHdlIGNhbiBnbyBmb3J3YXJkIG9yIGJhY2t3YXJkIG9uIHRoZSBibG9jayBjaGFpbi4KKyAgIFRoZSB1bnVzZWQgYmxvY2tzIGFyZSBzdG9yZWQgaW4gYSBjaGFpbiBsaXN0IHBvaW50ZWQgYnkgZnJlZV9ibG9ja3MuIFRoaXMKKyAgIGxpc3QgaXMgdXNlZnVsIGlmIHdlIG5lZWQgdG8gZmluZCBhIHN1aXRhYmxlIG1lbW9yeSBhcmVhIHdoZW4gdGhlIGFsbG9jYXRvcgorICAgaXMgY2FsbGVkLgorCisgICBXaGVuIGEgYmxvY2sgaXMgZnJlZWQsIHRoZSBuZXcgZnJlZSBibG9jayBpcyBjb25uZWN0ZWQgdG8gaXRzIGFkamFjZW50IGZyZWUKKyAgIGJsb2NrcyBpZiBwb3NzaWJsZS4KKworICAgICBbIGZyZWUgYmxvY2sgXVsgdXNlZCBibG9jayBdWyBmcmVlIGJsb2NrIF0KKyAgIGFuZCAidXNlZCBibG9jayIgaXMgZnJlZWQsIHRoZSB0aHJlZSBibG9ja3MgYXJlIGNvbm5lY3RlZCB0b2dldGhlcjoKKyAgICAgWyAgICAgICAgICAgb25lIGJpZyBmcmVlIGJsb2NrICAgICAgICAgICBdCisqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBTeXN0ZW0gKE9TKSBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIDY0IEtCeXRlLiAqLworI2RlZmluZSBDSFVOS19TSVpFCTB4MTAwMDAKKworLyoKKyAgIGFsbG9jX2NodW5rIC8gZnJlZV9jaHVuayA6CisgICAgICogYWxsb2NhdGUgZXhlY3V0YWJsZSBzeXN0ZW0gbWVtb3J5IGNodW5rcworICAgICAqIHRoZSBzaXplIGlzIGFsd2F5cyBkaXZpc2libGUgYnkgQ0hVTktfU0laRQorICAgYWxsb2NhdG9yX2dyYWJfbG9jayAvIGFsbG9jYXRvcl9yZWxlYXNlX2xvY2sgOgorICAgICAqIG1ha2UgdGhlIGFsbG9jYXRvciB0aHJlYWQgc2FmZQorICAgICAqIGNhbiBiZSBlbXB0eSBpZiB0aGUgT1MgKG9yIHRoZSBhcHBsaWNhdGlvbikgZG9lcyBub3Qgc3VwcG9ydCB0aHJlYWRpbmcKKyAgICAgKiBvbmx5IHRoZSBhbGxvY2F0b3IgcmVxdWlyZXMgdGhpcyBsb2NrLCBzbGppdCBpcyBmdWxseSB0aHJlYWQgc2FmZQorICAgICAgIGFzIGl0IG9ubHkgdXNlcyBsb2NhbCB2YXJpYWJsZXMKKyovCisKKyNpZmRlZiBfV0lOMzIKKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkKiBhbGxvY19jaHVuayhzbGppdF91dyBzaXplKQoreworCXJldHVybiBWaXJ0dWFsQWxsb2MoTlVMTCwgc2l6ZSwgTUVNX0NPTU1JVCB8IE1FTV9SRVNFUlZFLCBQQUdFX0VYRUNVVEVfUkVBRFdSSVRFKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGZyZWVfY2h1bmsodm9pZCogY2h1bmssIHNsaml0X3V3IHNpemUpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhzaXplKTsKKwlWaXJ0dWFsRnJlZShjaHVuaywgMCwgTUVNX1JFTEVBU0UpOworfQorCisjZWxzZQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQqIGFsbG9jX2NodW5rKHNsaml0X3V3IHNpemUpCit7CisJdm9pZCogcmV0dmFsOworCisjaWZkZWYgTUFQX0FOT04KKwlyZXR2YWwgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sIC0xLCAwKTsKKyNlbHNlCisJaWYgKGRldl96ZXJvIDwgMCkgeworCQlpZiAob3Blbl9kZXZfemVybygpKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXJldHZhbCA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSB8IFBST1RfRVhFQywgTUFQX1BSSVZBVEUsIGRldl96ZXJvLCAwKTsKKyNlbmRpZgorCisJcmV0dXJuIChyZXR2YWwgIT0gTUFQX0ZBSUxFRCkgPyByZXR2YWwgOiBOVUxMOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgZnJlZV9jaHVuayh2b2lkKiBjaHVuaywgc2xqaXRfdXcgc2l6ZSkKK3sKKwltdW5tYXAoY2h1bmssIHNpemUpOworfQorCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgQ29tbW9uIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIENIVU5LX01BU0sJKH4oQ0hVTktfU0laRSAtIDEpKQorCitzdHJ1Y3QgYmxvY2tfaGVhZGVyIHsKKwlzbGppdF91dyBzaXplOworCXNsaml0X3V3IHByZXZfc2l6ZTsKK307CisKK3N0cnVjdCBmcmVlX2Jsb2NrIHsKKwlzdHJ1Y3QgYmxvY2tfaGVhZGVyIGhlYWRlcjsKKwlzdHJ1Y3QgZnJlZV9ibG9jayAqbmV4dDsKKwlzdHJ1Y3QgZnJlZV9ibG9jayAqcHJldjsKKwlzbGppdF91dyBzaXplOworfTsKKworI2RlZmluZSBBU19CTE9DS19IRUFERVIoYmFzZSwgb2Zmc2V0KSBcCisJKChzdHJ1Y3QgYmxvY2tfaGVhZGVyKikoKChzbGppdF91YiopYmFzZSkgKyBvZmZzZXQpKQorI2RlZmluZSBBU19GUkVFX0JMT0NLKGJhc2UsIG9mZnNldCkgXAorCSgoc3RydWN0IGZyZWVfYmxvY2sqKSgoKHNsaml0X3ViKiliYXNlKSArIG9mZnNldCkpCisjZGVmaW5lIE1FTV9TVEFSVChiYXNlKQkJKCh2b2lkKikoKChzbGppdF91YiopYmFzZSkgKyBzaXplb2Yoc3RydWN0IGJsb2NrX2hlYWRlcikpKQorI2RlZmluZSBBTElHTl9TSVpFKHNpemUpCSgoKHNpemUpICsgc2l6ZW9mKHN0cnVjdCBibG9ja19oZWFkZXIpICsgNykgJiB+NykKKworc3RhdGljIHN0cnVjdCBmcmVlX2Jsb2NrKiBmcmVlX2Jsb2NrczsKK3N0YXRpYyBzbGppdF91dyBhbGxvY2F0ZWRfc2l6ZTsKK3N0YXRpYyBzbGppdF91dyB0b3RhbF9zaXplOworCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgc2xqaXRfaW5zZXJ0X2ZyZWVfYmxvY2soc3RydWN0IGZyZWVfYmxvY2sgKmZyZWVfYmxvY2ssIHNsaml0X3V3IHNpemUpCit7CisJZnJlZV9ibG9jay0+aGVhZGVyLnNpemUgPSAwOworCWZyZWVfYmxvY2stPnNpemUgPSBzaXplOworCisJZnJlZV9ibG9jay0+bmV4dCA9IGZyZWVfYmxvY2tzOworCWZyZWVfYmxvY2stPnByZXYgPSAwOworCWlmIChmcmVlX2Jsb2NrcykKKwkJZnJlZV9ibG9ja3MtPnByZXYgPSBmcmVlX2Jsb2NrOworCWZyZWVfYmxvY2tzID0gZnJlZV9ibG9jazsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIHNsaml0X3JlbW92ZV9mcmVlX2Jsb2NrKHN0cnVjdCBmcmVlX2Jsb2NrICpmcmVlX2Jsb2NrKQoreworCWlmIChmcmVlX2Jsb2NrLT5uZXh0KQorCQlmcmVlX2Jsb2NrLT5uZXh0LT5wcmV2ID0gZnJlZV9ibG9jay0+cHJldjsKKworCWlmIChmcmVlX2Jsb2NrLT5wcmV2KQorCQlmcmVlX2Jsb2NrLT5wcmV2LT5uZXh0ID0gZnJlZV9ibG9jay0+bmV4dDsKKwllbHNlIHsKKwkJU0xKSVRfQVNTRVJUKGZyZWVfYmxvY2tzID09IGZyZWVfYmxvY2spOworCQlmcmVlX2Jsb2NrcyA9IGZyZWVfYmxvY2stPm5leHQ7CisJfQorfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCogc2xqaXRfbWFsbG9jX2V4ZWMoc2xqaXRfdXcgc2l6ZSkKK3sKKwlzdHJ1Y3QgYmxvY2tfaGVhZGVyICpoZWFkZXI7CisJc3RydWN0IGJsb2NrX2hlYWRlciAqbmV4dF9oZWFkZXI7CisJc3RydWN0IGZyZWVfYmxvY2sgKmZyZWVfYmxvY2s7CisJc2xqaXRfdXcgY2h1bmtfc2l6ZTsKKworCWFsbG9jYXRvcl9ncmFiX2xvY2soKTsKKwlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1Y3QgZnJlZV9ibG9jaykpCisJCXNpemUgPSBzaXplb2Yoc3RydWN0IGZyZWVfYmxvY2spOworCXNpemUgPSBBTElHTl9TSVpFKHNpemUpOworCisJZnJlZV9ibG9jayA9IGZyZWVfYmxvY2tzOworCXdoaWxlIChmcmVlX2Jsb2NrKSB7CisJCWlmIChmcmVlX2Jsb2NrLT5zaXplID49IHNpemUpIHsKKwkJCWNodW5rX3NpemUgPSBmcmVlX2Jsb2NrLT5zaXplOworCQkJaWYgKGNodW5rX3NpemUgPiBzaXplICsgNjQpIHsKKwkJCQkvKiBXZSBqdXN0IGN1dCBhIGJsb2NrIGZyb20gdGhlIGVuZCBvZiB0aGUgZnJlZSBibG9jay4gKi8KKwkJCQljaHVua19zaXplIC09IHNpemU7CisJCQkJZnJlZV9ibG9jay0+c2l6ZSA9IGNodW5rX3NpemU7CisJCQkJaGVhZGVyID0gQVNfQkxPQ0tfSEVBREVSKGZyZWVfYmxvY2ssIGNodW5rX3NpemUpOworCQkJCWhlYWRlci0+cHJldl9zaXplID0gY2h1bmtfc2l6ZTsKKwkJCQlBU19CTE9DS19IRUFERVIoaGVhZGVyLCBzaXplKS0+cHJldl9zaXplID0gc2l6ZTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXNsaml0X3JlbW92ZV9mcmVlX2Jsb2NrKGZyZWVfYmxvY2spOworCQkJCWhlYWRlciA9IChzdHJ1Y3QgYmxvY2tfaGVhZGVyKilmcmVlX2Jsb2NrOworCQkJCXNpemUgPSBjaHVua19zaXplOworCQkJfQorCQkJYWxsb2NhdGVkX3NpemUgKz0gc2l6ZTsKKwkJCWhlYWRlci0+c2l6ZSA9IHNpemU7CisJCQlhbGxvY2F0b3JfcmVsZWFzZV9sb2NrKCk7CisJCQlyZXR1cm4gTUVNX1NUQVJUKGhlYWRlcik7CisJCX0KKwkJZnJlZV9ibG9jayA9IGZyZWVfYmxvY2stPm5leHQ7CisJfQorCisJY2h1bmtfc2l6ZSA9IChzaXplICsgc2l6ZW9mKHN0cnVjdCBibG9ja19oZWFkZXIpICsgQ0hVTktfU0laRSAtIDEpICYgQ0hVTktfTUFTSzsKKwloZWFkZXIgPSAoc3RydWN0IGJsb2NrX2hlYWRlciopYWxsb2NfY2h1bmsoY2h1bmtfc2l6ZSk7CisJaWYgKCFoZWFkZXIpIHsKKwkJYWxsb2NhdG9yX3JlbGVhc2VfbG9jaygpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljaHVua19zaXplIC09IHNpemVvZihzdHJ1Y3QgYmxvY2tfaGVhZGVyKTsKKwl0b3RhbF9zaXplICs9IGNodW5rX3NpemU7CisKKwloZWFkZXItPnByZXZfc2l6ZSA9IDA7CisJaWYgKGNodW5rX3NpemUgPiBzaXplICsgNjQpIHsKKwkJLyogQ3V0IHRoZSBhbGxvY2F0ZWQgc3BhY2UgaW50byBhIGZyZWUgYW5kIGEgdXNlZCBibG9jay4gKi8KKwkJYWxsb2NhdGVkX3NpemUgKz0gc2l6ZTsKKwkJaGVhZGVyLT5zaXplID0gc2l6ZTsKKwkJY2h1bmtfc2l6ZSAtPSBzaXplOworCisJCWZyZWVfYmxvY2sgPSBBU19GUkVFX0JMT0NLKGhlYWRlciwgc2l6ZSk7CisJCWZyZWVfYmxvY2stPmhlYWRlci5wcmV2X3NpemUgPSBzaXplOworCQlzbGppdF9pbnNlcnRfZnJlZV9ibG9jayhmcmVlX2Jsb2NrLCBjaHVua19zaXplKTsKKwkJbmV4dF9oZWFkZXIgPSBBU19CTE9DS19IRUFERVIoZnJlZV9ibG9jaywgY2h1bmtfc2l6ZSk7CisJfQorCWVsc2UgeworCQkvKiBBbGwgc3BhY2UgYmVsb25ncyB0byB0aGlzIGFsbG9jYXRpb24uICovCisJCWFsbG9jYXRlZF9zaXplICs9IGNodW5rX3NpemU7CisJCWhlYWRlci0+c2l6ZSA9IGNodW5rX3NpemU7CisJCW5leHRfaGVhZGVyID0gQVNfQkxPQ0tfSEVBREVSKGhlYWRlciwgY2h1bmtfc2l6ZSk7CisJfQorCW5leHRfaGVhZGVyLT5zaXplID0gMTsKKwluZXh0X2hlYWRlci0+cHJldl9zaXplID0gY2h1bmtfc2l6ZTsKKwlhbGxvY2F0b3JfcmVsZWFzZV9sb2NrKCk7CisJcmV0dXJuIE1FTV9TVEFSVChoZWFkZXIpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9mcmVlX2V4ZWModm9pZCogcHRyKQoreworCXN0cnVjdCBibG9ja19oZWFkZXIgKmhlYWRlcjsKKwlzdHJ1Y3QgZnJlZV9ibG9jayogZnJlZV9ibG9jazsKKworCWFsbG9jYXRvcl9ncmFiX2xvY2soKTsKKwloZWFkZXIgPSBBU19CTE9DS19IRUFERVIocHRyLCAtKHNsaml0X3N3KXNpemVvZihzdHJ1Y3QgYmxvY2tfaGVhZGVyKSk7CisJYWxsb2NhdGVkX3NpemUgLT0gaGVhZGVyLT5zaXplOworCisJLyogQ29ubmVjdGluZyBmcmVlIGJsb2NrcyB0b2dldGhlciBpZiBwb3NzaWJsZS4gKi8KKworCS8qIElmIGhlYWRlci0+cHJldl9zaXplID09IDAsIGZyZWVfYmxvY2sgd2lsbCBlcXVhbCB0byBoZWFkZXIuCisJICAgSW4gdGhpcyBjYXNlLCBmcmVlX2Jsb2NrLT5oZWFkZXIuc2l6ZSB3aWxsIGJlID4gMC4gKi8KKwlmcmVlX2Jsb2NrID0gQVNfRlJFRV9CTE9DSyhoZWFkZXIsIC0oc2xqaXRfc3cpaGVhZGVyLT5wcmV2X3NpemUpOworCWlmIChTTEpJVF9VTkxJS0VMWSghZnJlZV9ibG9jay0+aGVhZGVyLnNpemUpKSB7CisJCWZyZWVfYmxvY2stPnNpemUgKz0gaGVhZGVyLT5zaXplOworCQloZWFkZXIgPSBBU19CTE9DS19IRUFERVIoZnJlZV9ibG9jaywgZnJlZV9ibG9jay0+c2l6ZSk7CisJCWhlYWRlci0+cHJldl9zaXplID0gZnJlZV9ibG9jay0+c2l6ZTsKKwl9CisJZWxzZSB7CisJCWZyZWVfYmxvY2sgPSAoc3RydWN0IGZyZWVfYmxvY2sqKWhlYWRlcjsKKwkJc2xqaXRfaW5zZXJ0X2ZyZWVfYmxvY2soZnJlZV9ibG9jaywgaGVhZGVyLT5zaXplKTsKKwl9CisKKwloZWFkZXIgPSBBU19CTE9DS19IRUFERVIoZnJlZV9ibG9jaywgZnJlZV9ibG9jay0+c2l6ZSk7CisJaWYgKFNMSklUX1VOTElLRUxZKCFoZWFkZXItPnNpemUpKSB7CisJCWZyZWVfYmxvY2stPnNpemUgKz0gKChzdHJ1Y3QgZnJlZV9ibG9jayopaGVhZGVyKS0+c2l6ZTsKKwkJc2xqaXRfcmVtb3ZlX2ZyZWVfYmxvY2soKHN0cnVjdCBmcmVlX2Jsb2NrKiloZWFkZXIpOworCQloZWFkZXIgPSBBU19CTE9DS19IRUFERVIoZnJlZV9ibG9jaywgZnJlZV9ibG9jay0+c2l6ZSk7CisJCWhlYWRlci0+cHJldl9zaXplID0gZnJlZV9ibG9jay0+c2l6ZTsKKwl9CisKKwkvKiBUaGUgd2hvbGUgY2h1bmsgaXMgZnJlZS4gKi8KKwlpZiAoU0xKSVRfVU5MSUtFTFkoIWZyZWVfYmxvY2stPmhlYWRlci5wcmV2X3NpemUgJiYgaGVhZGVyLT5zaXplID09IDEpKSB7CisJCS8qIElmIHRoaXMgYmxvY2sgaXMgZnJlZWQsIHdlIHN0aWxsIGhhdmUgKGFsbG9jYXRlZF9zaXplIC8gMikgZnJlZSBzcGFjZS4gKi8KKwkJaWYgKHRvdGFsX3NpemUgLSBmcmVlX2Jsb2NrLT5zaXplID4gKGFsbG9jYXRlZF9zaXplICogMyAvIDIpKSB7CisJCQl0b3RhbF9zaXplIC09IGZyZWVfYmxvY2stPnNpemU7CisJCQlzbGppdF9yZW1vdmVfZnJlZV9ibG9jayhmcmVlX2Jsb2NrKTsKKwkJCWZyZWVfY2h1bmsoZnJlZV9ibG9jaywgZnJlZV9ibG9jay0+c2l6ZSArIHNpemVvZihzdHJ1Y3QgYmxvY2tfaGVhZGVyKSk7CisJCX0KKwl9CisKKwlhbGxvY2F0b3JfcmVsZWFzZV9sb2NrKCk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X2ZyZWVfdW51c2VkX21lbW9yeV9leGVjKHZvaWQpCit7CisJc3RydWN0IGZyZWVfYmxvY2sqIGZyZWVfYmxvY2s7CisJc3RydWN0IGZyZWVfYmxvY2sqIG5leHRfZnJlZV9ibG9jazsKKworCWFsbG9jYXRvcl9ncmFiX2xvY2soKTsKKworCWZyZWVfYmxvY2sgPSBmcmVlX2Jsb2NrczsKKwl3aGlsZSAoZnJlZV9ibG9jaykgeworCQluZXh0X2ZyZWVfYmxvY2sgPSBmcmVlX2Jsb2NrLT5uZXh0OworCQlpZiAoIWZyZWVfYmxvY2stPmhlYWRlci5wcmV2X3NpemUgJiYgCisJCQkJQVNfQkxPQ0tfSEVBREVSKGZyZWVfYmxvY2ssIGZyZWVfYmxvY2stPnNpemUpLT5zaXplID09IDEpIHsKKwkJCXRvdGFsX3NpemUgLT0gZnJlZV9ibG9jay0+c2l6ZTsKKwkJCXNsaml0X3JlbW92ZV9mcmVlX2Jsb2NrKGZyZWVfYmxvY2spOworCQkJZnJlZV9jaHVuayhmcmVlX2Jsb2NrLCBmcmVlX2Jsb2NrLT5zaXplICsgc2l6ZW9mKHN0cnVjdCBibG9ja19oZWFkZXIpKTsKKwkJfQorCQlmcmVlX2Jsb2NrID0gbmV4dF9mcmVlX2Jsb2NrOworCX0KKworCVNMSklUX0FTU0VSVCgodG90YWxfc2l6ZSAmJiBmcmVlX2Jsb2NrcykgfHwgKCF0b3RhbF9zaXplICYmICFmcmVlX2Jsb2NrcykpOworCWFsbG9jYXRvcl9yZWxlYXNlX2xvY2soKTsKK30KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdExpci5jIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TGlyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGYxYjFjOQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdExpci5jCkBAIC0wLDAgKzEsMjAyOSBAQAorLyoKKyAqICAgIFN0YWNrLWxlc3MgSnVzdC1Jbi1UaW1lIGNvbXBpbGVyCisgKgorICogICAgQ29weXJpZ2h0IDIwMDktMjAxMiBab2x0YW4gSGVyY3plZyAoaHptZXN0ZXJAZnJlZW1haWwuaHUpLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgorICogICAgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UCisgKiBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAic2xqaXRMaXIuaCIKKworI2RlZmluZSBDSEVDS19FUlJPUigpIFwKKwlkbyB7IFwKKwkJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5lcnJvcikpIFwKKwkJCXJldHVybiBjb21waWxlci0+ZXJyb3I7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIENIRUNLX0VSUk9SX1BUUigpIFwKKwlkbyB7IFwKKwkJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5lcnJvcikpIFwKKwkJCXJldHVybiBOVUxMOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBGQUlMX0lGKGV4cHIpIFwKKwlkbyB7IFwKKwkJaWYgKFNMSklUX1VOTElLRUxZKGV4cHIpKSBcCisJCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBQVFJfRkFJTF9JRihleHByKSBcCisJZG8geyBcCisJCWlmIChTTEpJVF9VTkxJS0VMWShleHByKSkgXAorCQkJcmV0dXJuIE5VTEw7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIEZBSUxfSUZfTlVMTChwdHIpIFwKKwlkbyB7IFwKKwkJaWYgKFNMSklUX1VOTElLRUxZKCEocHRyKSkpIHsgXAorCQkJY29tcGlsZXItPmVycm9yID0gU0xKSVRfRVJSX0FMTE9DX0ZBSUxFRDsgXAorCQkJcmV0dXJuIFNMSklUX0VSUl9BTExPQ19GQUlMRUQ7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBQVFJfRkFJTF9JRl9OVUxMKHB0cikgXAorCWRvIHsgXAorCQlpZiAoU0xKSVRfVU5MSUtFTFkoIShwdHIpKSkgeyBcCisJCQljb21waWxlci0+ZXJyb3IgPSBTTEpJVF9FUlJfQUxMT0NfRkFJTEVEOyBcCisJCQlyZXR1cm4gTlVMTDsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFBUUl9GQUlMX1dJVEhfRVhFQ19JRihwdHIpIFwKKwlkbyB7IFwKKwkJaWYgKFNMSklUX1VOTElLRUxZKCEocHRyKSkpIHsgXAorCQkJY29tcGlsZXItPmVycm9yID0gU0xKSVRfRVJSX0VYX0FMTE9DX0ZBSUxFRDsgXAorCQkJcmV0dXJuIE5VTEw7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworI2lmICEoZGVmaW5lZCBTTEpJVF9DT05GSUdfVU5TVVBQT1JURUQgJiYgU0xKSVRfQ09ORklHX1VOU1VQUE9SVEVEKQorCisjZGVmaW5lIEdFVF9PUENPREUob3ApIFwKKwkoKG9wKSAmIH4oU0xKSVRfSU5UX09QIHwgU0xKSVRfU0VUX0UgfCBTTEpJVF9TRVRfVSB8IFNMSklUX1NFVF9TIHwgU0xKSVRfU0VUX08gfCBTTEpJVF9TRVRfQyB8IFNMSklUX0tFRVBfRkxBR1MpKQorCisjZGVmaW5lIEdFVF9GTEFHUyhvcCkgXAorCSgob3ApICYgKFNMSklUX1NFVF9FIHwgU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUyB8IFNMSklUX1NFVF9PIHwgU0xKSVRfU0VUX0MpKQorCisjZGVmaW5lIEdFVF9BTExfRkxBR1Mob3ApIFwKKwkoKG9wKSAmIChTTEpJVF9JTlRfT1AgfCBTTEpJVF9TRVRfRSB8IFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX1MgfCBTTEpJVF9TRVRfTyB8IFNMSklUX1NFVF9DIHwgU0xKSVRfS0VFUF9GTEFHUykpCisKKyNkZWZpbmUgVFlQRV9DQVNUX05FRURFRChvcCkgXAorCSgoKG9wKSA+PSBTTEpJVF9NT1ZfVUIgJiYgKG9wKSA8PSBTTEpJVF9NT1ZfU0gpIHx8ICgob3ApID49IFNMSklUX01PVlVfVUIgJiYgKG9wKSA8PSBTTEpJVF9NT1ZVX1NIKSkKKworI2RlZmluZSBCVUZfU0laRQk0MDk2CisKKyNpZiAoZGVmaW5lZCBTTEpJVF8zMkJJVF9BUkNISVRFQ1RVUkUgJiYgU0xKSVRfMzJCSVRfQVJDSElURUNUVVJFKQorI2RlZmluZSBBQlVGX1NJWkUJMjA0OAorI2Vsc2UKKyNkZWZpbmUgQUJVRl9TSVpFCTQwOTYKKyNlbmRpZgorCisvKiBQYXJhbWV0ZXIgcGFyc2luZy4gKi8KKyNkZWZpbmUgUkVHX01BU0sJCTB4M2YKKyNkZWZpbmUgT0ZGU19SRUcocmVnKQkJKCgocmVnKSA+PiA4KSAmIFJFR19NQVNLKQorI2RlZmluZSBPRkZTX1JFR19NQVNLCQkoUkVHX01BU0sgPDwgOCkKKyNkZWZpbmUgVE9fT0ZGU19SRUcocmVnKQkoKHJlZykgPDwgOCkKKy8qIFdoZW4gcmVnIGNhbm5vdCBiZSB1bnVzZWQuICovCisjZGVmaW5lIEZBU1RfSVNfUkVHKHJlZykJKChyZWcpIDw9IFJFR19NQVNLKQorLyogV2hlbiByZWcgY2FuIGJlIHVudXNlZC4gKi8KKyNkZWZpbmUgU0xPV19JU19SRUcocmVnKQkoKHJlZykgPiAwICYmIChyZWcpIDw9IFJFR19NQVNLKQorCisvKiBKdW1wIGZsYWdzLiAqLworI2RlZmluZSBKVU1QX0xBQkVMCTB4MQorI2RlZmluZSBKVU1QX0FERFIJMHgyCisvKiBTTEpJVF9SRVdSSVRBQkxFX0pVTVAgaXMgMHgxMDAwLiAqLworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4NiAmJiBTTEpJVF9DT05GSUdfWDg2KQorIwlkZWZpbmUgUEFUQ0hfTUIJMHg0CisjCWRlZmluZSBQQVRDSF9NVwkweDgKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisjCWRlZmluZSBQQVRDSF9NRAkweDEwCisjZW5kaWYKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KSB8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y3ICYmIFNMSklUX0NPTkZJR19BUk1fVjcpCisjCWRlZmluZSBJU19CTAkJMHg0CisjCWRlZmluZSBQQVRDSF9CCQkweDgKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KQorIwlkZWZpbmUgQ1BPT0xfU0laRQk1MTIKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9USFVNQjIgJiYgU0xKSVRfQ09ORklHX0FSTV9USFVNQjIpCisjCWRlZmluZSBJU19DT05ECQkweDA0CisjCWRlZmluZSBJU19CTAkJMHgwOAorCS8qIGNvbmRpdGlvbmFsICsgaW1tOCAqLworIwlkZWZpbmUgUEFUQ0hfVFlQRTEJMHgxMAorCS8qIGNvbmRpdGlvbmFsICsgaW1tMjAgKi8KKyMJZGVmaW5lIFBBVENIX1RZUEUyCTB4MjAKKwkvKiBJVCArIGltbTI0ICovCisjCWRlZmluZSBQQVRDSF9UWVBFMwkweDMwCisJLyogaW1tMTEgKi8KKyMJZGVmaW5lIFBBVENIX1RZUEU0CTB4NDAKKwkvKiBpbW0yNCAqLworIwlkZWZpbmUgUEFUQ0hfVFlQRTUJMHg1MAorCS8qIEJMICsgaW1tMjQgKi8KKyMJZGVmaW5lIFBBVENIX0JMCQkweDYwCisJLyogMHhmMDAgY2MgY29kZSBmb3IgYnJhbmNoZXMgKi8KKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV82NCAmJiBTTEpJVF9DT05GSUdfQVJNXzY0KQorIwlkZWZpbmUgSVNfQ09ORAkJMHgwMDQKKyMJZGVmaW5lIElTX0NCWgkJMHgwMDgKKyMJZGVmaW5lIElTX0JMCQkweDAxMAorIwlkZWZpbmUgUEFUQ0hfQgkJMHgwMjAKKyMJZGVmaW5lIFBBVENIX0NPTkQJMHgwNDAKKyMJZGVmaW5lIFBBVENIX0FCUzQ4CTB4MDgwCisjCWRlZmluZSBQQVRDSF9BQlM2NAkweDEwMAorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDICYmIFNMSklUX0NPTkZJR19QUEMpCisjCWRlZmluZSBJU19DT05ECQkweDAwNAorIwlkZWZpbmUgSVNfQ0FMTAkJMHgwMDgKKyMJZGVmaW5lIFBBVENIX0IJCTB4MDEwCisjCWRlZmluZSBQQVRDSF9BQlNfQgkweDAyMAorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKKyMJZGVmaW5lIFBBVENIX0FCUzMyCTB4MDQwCisjCWRlZmluZSBQQVRDSF9BQlM0OAkweDA4MAorI2VuZGlmCisjCWRlZmluZSBSRU1PVkVfQ09ORAkweDEwMAorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQUyAmJiBTTEpJVF9DT05GSUdfTUlQUykKKyMJZGVmaW5lIElTX01PVkFCTEUJMHgwMDQKKyMJZGVmaW5lIElTX0pBTAkJMHgwMDgKKyMJZGVmaW5lIElTX0NBTEwJCTB4MDEwCisjCWRlZmluZSBJU19CSVQyNl9DT05ECTB4MDIwCisjCWRlZmluZSBJU19CSVQxNl9DT05ECTB4MDQwCisKKyMJZGVmaW5lIElTX0NPTkQJCShJU19CSVQyNl9DT05EIHwgSVNfQklUMTZfQ09ORCkKKworIwlkZWZpbmUgUEFUQ0hfQgkJMHgwODAKKyMJZGVmaW5lIFBBVENIX0oJCTB4MTAwCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU182NCAmJiBTTEpJVF9DT05GSUdfTUlQU182NCkKKyMJZGVmaW5lIFBBVENIX0FCUzMyCTB4MjAwCisjCWRlZmluZSBQQVRDSF9BQlM0OAkweDQwMAorI2VuZGlmCisKKwkvKiBpbnN0cnVjdGlvbiB0eXBlcyAqLworIwlkZWZpbmUgTU9WQUJMRV9JTlMJMAorCS8qIDEgLSAzMSBsYXN0IGRlc3RpbmF0aW9uIHJlZ2lzdGVyICovCisJLyogbm8gZGVzdGluYXRpb24gKGkuZTogc3RvcmUpICovCisjCWRlZmluZSBVTk1PVkFCTEVfSU5TCTMyCisJLyogRlBVIHN0YXR1cyByZWdpc3RlciAqLworIwlkZWZpbmUgRkNTUl9GQ0MJCTMzCisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19USUxFR1ggJiYgU0xKSVRfQ09ORklHX1RJTEVHWCkKKyMJZGVmaW5lIElTX0pBTAkJMHgwNAorIwlkZWZpbmUgSVNfQ09ORAkJMHgwOAorCisjCWRlZmluZSBQQVRDSF9CCQkweDEwCisjCWRlZmluZSBQQVRDSF9KCQkweDIwCisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpCisjCWRlZmluZSBJU19NT1ZBQkxFCTB4MDQKKyMJZGVmaW5lIElTX0NPTkQJCTB4MDgKKyMJZGVmaW5lIElTX0NBTEwJCTB4MTAKKworIwlkZWZpbmUgUEFUQ0hfQgkJMHgyMAorIwlkZWZpbmUgUEFUQ0hfQ0FMTAkweDQwCisKKwkvKiBpbnN0cnVjdGlvbiB0eXBlcyAqLworIwlkZWZpbmUgTU9WQUJMRV9JTlMJMAorCS8qIDEgLSAzMSBsYXN0IGRlc3RpbmF0aW9uIHJlZ2lzdGVyICovCisJLyogbm8gZGVzdGluYXRpb24gKGkuZTogc3RvcmUpICovCisjCWRlZmluZSBVTk1PVkFCTEVfSU5TCTMyCisKKyMJZGVmaW5lIERTVF9JTlNfTUFTSwkweGZmCisKKwkvKiBJQ0NfU0VUIGlzIHRoZSBzYW1lIGFzIFNFVF9GTEFHUy4gKi8KKyMJZGVmaW5lIElDQ19JU19TRVQJKDEgPDwgMjMpCisjCWRlZmluZSBGQ0NfSVNfU0VUCSgxIDw8IDI0KQorI2VuZGlmCisKKy8qIFN0YWNrIG1hbmFnZW1lbnQuICovCisKKyNkZWZpbmUgR0VUX1NBVkVEX1JFR0lTVEVSU19TSVpFKHNjcmF0Y2hlcywgc2F2ZWRzLCBleHRyYSkgXAorCSgoKHNjcmF0Y2hlcyA8IFNMSklUX05VTUJFUl9PRl9TQ1JBVENIX1JFR0lTVEVSUyA/IDAgOiAoc2NyYXRjaGVzIC0gU0xKSVRfTlVNQkVSX09GX1NDUkFUQ0hfUkVHSVNURVJTKSkgKyBcCisJCShzYXZlZHMgPCBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTID8gc2F2ZWRzIDogU0xKSVRfTlVNQkVSX09GX1NBVkVEX1JFR0lTVEVSUykgKyBcCisJCWV4dHJhKSAqIHNpemVvZihzbGppdF9zdykpCisKKyNkZWZpbmUgQURKVVNUX0xPQ0FMX09GRlNFVChwLCBpKSBcCisJaWYgKChwKSA9PSAoU0xKSVRfTUVNMShTTEpJVF9TUCkpKSBcCisJCShpKSArPSBTTEpJVF9MT0NBTFNfT0ZGU0VUOworCisjZW5kaWYgLyogIShkZWZpbmVkIFNMSklUX0NPTkZJR19VTlNVUFBPUlRFRCAmJiBTTEpJVF9DT05GSUdfVU5TVVBQT1JURUQpICovCisKKy8qIFV0aWxzIGNhbiBzdGlsbCBiZSB1c2VkIGV2ZW4gaWYgU0xKSVRfQ09ORklHX1VOU1VQUE9SVEVEIGlzIHNldC4gKi8KKyNpbmNsdWRlICJzbGppdFV0aWxzLmMiCisKKyNpZiAhKGRlZmluZWQgU0xKSVRfQ09ORklHX1VOU1VQUE9SVEVEICYmIFNMSklUX0NPTkZJR19VTlNVUFBPUlRFRCkKKworI2lmIChkZWZpbmVkIFNMSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SICYmIFNMSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SKQorI2luY2x1ZGUgInNsaml0RXhlY0FsbG9jYXRvci5jIgorI2VuZGlmCisKKy8qIEFyZ3VtZW50IGNoZWNraW5nIGZlYXR1cmVzLiAqLworCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKworLyogUmV0dXJucyB3aXRoIGVycm9yIHdoZW4gYW4gaW52YWxpZCBhcmd1bWVudCBpcyBwYXNzZWQuICovCisKKyNkZWZpbmUgQ0hFQ0tfQVJHVU1FTlQoeCkgXAorCWRvIHsgXAorCQlpZiAoU0xKSVRfVU5MSUtFTFkoISh4KSkpIFwKKwkJCXJldHVybiAxOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBDSEVDS19SRVRVUk5fVFlQRSBzbGppdF9zaQorI2RlZmluZSBDSEVDS19SRVRVUk5fT0sgcmV0dXJuIDAKKworI2RlZmluZSBDSEVDSyh4KSBcCisJZG8geyBcCisJCWlmIChTTEpJVF9VTkxJS0VMWSh4KSkgeyBcCisJCQljb21waWxlci0+ZXJyb3IgPSBTTEpJVF9FUlJfQkFEX0FSR1VNRU5UOyBcCisJCQlyZXR1cm4gU0xKSVRfRVJSX0JBRF9BUkdVTUVOVDsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIENIRUNLX1BUUih4KSBcCisJZG8geyBcCisJCWlmIChTTEpJVF9VTkxJS0VMWSh4KSkgeyBcCisJCQljb21waWxlci0+ZXJyb3IgPSBTTEpJVF9FUlJfQkFEX0FSR1VNRU5UOyBcCisJCQlyZXR1cm4gTlVMTDsgXAorCQl9IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIENIRUNLX1JFR19JTkRFWCh4KSBcCisJZG8geyBcCisJCWlmIChTTEpJVF9VTkxJS0VMWSh4KSkgeyBcCisJCQlyZXR1cm4gLTI7IFwKKwkJfSBcCisJfSB3aGlsZSAoMCkKKworI2VsaWYgKGRlZmluZWQgU0xKSVRfREVCVUcgJiYgU0xKSVRfREVCVUcpCisKKy8qIEFzc2VydGlvbiBmYWlsdXJlIG9jY3VyZXMgaWYgYW4gaW52YWxpZCBhcmd1bWVudCBpcyBwYXNzZWQuICovCisjdW5kZWYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTCisjZGVmaW5lIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAxCisKKyNkZWZpbmUgQ0hFQ0tfQVJHVU1FTlQoeCkgU0xKSVRfQVNTRVJUKHgpCisjZGVmaW5lIENIRUNLX1JFVFVSTl9UWVBFIHZvaWQKKyNkZWZpbmUgQ0hFQ0tfUkVUVVJOX09LIHJldHVybgorI2RlZmluZSBDSEVDSyh4KSB4CisjZGVmaW5lIENIRUNLX1BUUih4KSB4CisjZGVmaW5lIENIRUNLX1JFR19JTkRFWCh4KSB4CisKKyNlbGlmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKKworLyogQXJndW1lbnRzIGFyZSBub3QgY2hlY2tlZC4gKi8KKyNkZWZpbmUgQ0hFQ0tfUkVUVVJOX1RZUEUgdm9pZAorI2RlZmluZSBDSEVDS19SRVRVUk5fT0sgcmV0dXJuCisjZGVmaW5lIENIRUNLKHgpIHgKKyNkZWZpbmUgQ0hFQ0tfUFRSKHgpIHgKKyNkZWZpbmUgQ0hFQ0tfUkVHX0lOREVYKHgpIHgKKworI2Vsc2UKKworLyogQXJndW1lbnRzIGFyZSBub3QgY2hlY2tlZC4gKi8KKyNkZWZpbmUgQ0hFQ0soeCkKKyNkZWZpbmUgQ0hFQ0tfUFRSKHgpCisjZGVmaW5lIENIRUNLX1JFR19JTkRFWCh4KQorCisjZW5kaWYgLyogU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIFB1YmxpYyBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkgfHwgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4NiAmJiBTTEpJVF9DT05GSUdfWDg2KQorI2RlZmluZSBTTEpJVF9ORUVEU19DT01QSUxFUl9JTklUIDEKK3N0YXRpYyBzbGppdF9zaSBjb21waWxlcl9pbml0aWFsaXplZCA9IDA7CisvKiBBIHRocmVhZCBzYWZlIGluaXRpYWxpemF0aW9uLiAqLworc3RhdGljIHZvaWQgaW5pdF9jb21waWxlcih2b2lkKTsKKyNlbmRpZgorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbXBpbGVyKiBzbGppdF9jcmVhdGVfY29tcGlsZXIodm9pZCAqYWxsb2NhdG9yX2RhdGEpCit7CisJc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciA9IChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIqKVNMSklUX01BTExPQyhzaXplb2Yoc3RydWN0IHNsaml0X2NvbXBpbGVyKSwgYWxsb2NhdG9yX2RhdGEpOworCWlmICghY29tcGlsZXIpCisJCXJldHVybiBOVUxMOworCVNMSklUX1pFUk9NRU0oY29tcGlsZXIsIHNpemVvZihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIpKTsKKworCVNMSklUX0NPTVBJTEVfQVNTRVJUKAorCQlzaXplb2Yoc2xqaXRfc2IpID09IDEgJiYgc2l6ZW9mKHNsaml0X3ViKSA9PSAxCisJCSYmIHNpemVvZihzbGppdF9zaCkgPT0gMiAmJiBzaXplb2Yoc2xqaXRfdWgpID09IDIKKwkJJiYgc2l6ZW9mKHNsaml0X3NpKSA9PSA0ICYmIHNpemVvZihzbGppdF91aSkgPT0gNAorCQkmJiAoc2l6ZW9mKHNsaml0X3ApID09IDQgfHwgc2l6ZW9mKHNsaml0X3ApID09IDgpCisJCSYmIHNpemVvZihzbGppdF9wKSA8PSBzaXplb2Yoc2xqaXRfc3cpCisJCSYmIChzaXplb2Yoc2xqaXRfc3cpID09IDQgfHwgc2l6ZW9mKHNsaml0X3N3KSA9PSA4KQorCQkmJiAoc2l6ZW9mKHNsaml0X3V3KSA9PSA0IHx8IHNpemVvZihzbGppdF91dykgPT0gOCksCisJCWludmFsaWRfaW50ZWdlcl90eXBlcyk7CisJU0xKSVRfQ09NUElMRV9BU1NFUlQoU0xKSVRfSU5UX09QID09IFNMSklUX1NJTkdMRV9PUCwKKwkJaW50X29wX2FuZF9zaW5nbGVfb3BfbXVzdF9iZV90aGVfc2FtZSk7CisJU0xKSVRfQ09NUElMRV9BU1NFUlQoU0xKSVRfUkVXUklUQUJMRV9KVU1QICE9IFNMSklUX1NJTkdMRV9PUCwKKwkJcmV3cml0YWJsZV9qdW1wX2FuZF9zaW5nbGVfb3BfbXVzdF9ub3RfYmVfdGhlX3NhbWUpOworCisJLyogT25seSB0aGUgbm9uLXplcm8gbWVtYmVycyBtdXN0IGJlIHNldC4gKi8KKwljb21waWxlci0+ZXJyb3IgPSBTTEpJVF9TVUNDRVNTOworCisJY29tcGlsZXItPmFsbG9jYXRvcl9kYXRhID0gYWxsb2NhdG9yX2RhdGE7CisJY29tcGlsZXItPmJ1ZiA9IChzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50KilTTEpJVF9NQUxMT0MoQlVGX1NJWkUsIGFsbG9jYXRvcl9kYXRhKTsKKwljb21waWxlci0+YWJ1ZiA9IChzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50KilTTEpJVF9NQUxMT0MoQUJVRl9TSVpFLCBhbGxvY2F0b3JfZGF0YSk7CisKKwlpZiAoIWNvbXBpbGVyLT5idWYgfHwgIWNvbXBpbGVyLT5hYnVmKSB7CisJCWlmIChjb21waWxlci0+YnVmKQorCQkJU0xKSVRfRlJFRShjb21waWxlci0+YnVmLCBhbGxvY2F0b3JfZGF0YSk7CisJCWlmIChjb21waWxlci0+YWJ1ZikKKwkJCVNMSklUX0ZSRUUoY29tcGlsZXItPmFidWYsIGFsbG9jYXRvcl9kYXRhKTsKKwkJU0xKSVRfRlJFRShjb21waWxlciwgYWxsb2NhdG9yX2RhdGEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljb21waWxlci0+YnVmLT5uZXh0ID0gTlVMTDsKKwljb21waWxlci0+YnVmLT51c2VkX3NpemUgPSAwOworCWNvbXBpbGVyLT5hYnVmLT5uZXh0ID0gTlVMTDsKKwljb21waWxlci0+YWJ1Zi0+dXNlZF9zaXplID0gMDsKKworCWNvbXBpbGVyLT5zY3JhdGNoZXMgPSAtMTsKKwljb21waWxlci0+c2F2ZWRzID0gLTE7CisJY29tcGlsZXItPmZzY3JhdGNoZXMgPSAtMTsKKwljb21waWxlci0+ZnNhdmVkcyA9IC0xOworCWNvbXBpbGVyLT5sb2NhbF9zaXplID0gLTE7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJY29tcGlsZXItPmFyZ3MgPSAtMTsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KQorCWNvbXBpbGVyLT5jcG9vbCA9IChzbGppdF91dyopU0xKSVRfTUFMTE9DKENQT09MX1NJWkUgKiBzaXplb2Yoc2xqaXRfdXcpCisJCSsgQ1BPT0xfU0laRSAqIHNpemVvZihzbGppdF91YiksIGFsbG9jYXRvcl9kYXRhKTsKKwlpZiAoIWNvbXBpbGVyLT5jcG9vbCkgeworCQlTTEpJVF9GUkVFKGNvbXBpbGVyLT5idWYsIGFsbG9jYXRvcl9kYXRhKTsKKwkJU0xKSVRfRlJFRShjb21waWxlci0+YWJ1ZiwgYWxsb2NhdG9yX2RhdGEpOworCQlTTEpJVF9GUkVFKGNvbXBpbGVyLCBhbGxvY2F0b3JfZGF0YSk7CisJCXJldHVybiBOVUxMOworCX0KKwljb21waWxlci0+Y3Bvb2xfdW5pcXVlID0gKHNsaml0X3ViKikoY29tcGlsZXItPmNwb29sICsgQ1BPT0xfU0laRSk7CisJY29tcGlsZXItPmNwb29sX2RpZmYgPSAweGZmZmZmZmZmOworI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQUyAmJiBTTEpJVF9DT05GSUdfTUlQUykKKwljb21waWxlci0+ZGVsYXlfc2xvdCA9IFVOTU9WQUJMRV9JTlM7CisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpCisJY29tcGlsZXItPmRlbGF5X3Nsb3QgPSBVTk1PVkFCTEVfSU5TOworI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9ORUVEU19DT01QSUxFUl9JTklUICYmIFNMSklUX05FRURTX0NPTVBJTEVSX0lOSVQpCisJaWYgKCFjb21waWxlcl9pbml0aWFsaXplZCkgeworCQlpbml0X2NvbXBpbGVyKCk7CisJCWNvbXBpbGVyX2luaXRpYWxpemVkID0gMTsKKwl9CisjZW5kaWYKKworCXJldHVybiBjb21waWxlcjsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfZnJlZV9jb21waWxlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQoreworCXN0cnVjdCBzbGppdF9tZW1vcnlfZnJhZ21lbnQgKmJ1ZjsKKwlzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50ICpjdXJyOworCXZvaWQgKmFsbG9jYXRvcl9kYXRhID0gY29tcGlsZXItPmFsbG9jYXRvcl9kYXRhOworCVNMSklUX1VOVVNFRF9BUkcoYWxsb2NhdG9yX2RhdGEpOworCisJYnVmID0gY29tcGlsZXItPmJ1ZjsKKwl3aGlsZSAoYnVmKSB7CisJCWN1cnIgPSBidWY7CisJCWJ1ZiA9IGJ1Zi0+bmV4dDsKKwkJU0xKSVRfRlJFRShjdXJyLCBhbGxvY2F0b3JfZGF0YSk7CisJfQorCisJYnVmID0gY29tcGlsZXItPmFidWY7CisJd2hpbGUgKGJ1ZikgeworCQljdXJyID0gYnVmOworCQlidWYgPSBidWYtPm5leHQ7CisJCVNMSklUX0ZSRUUoY3VyciwgYWxsb2NhdG9yX2RhdGEpOworCX0KKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKKwlTTEpJVF9GUkVFKGNvbXBpbGVyLT5jcG9vbCwgYWxsb2NhdG9yX2RhdGEpOworI2VuZGlmCisJU0xKSVRfRlJFRShjb21waWxlciwgYWxsb2NhdG9yX2RhdGEpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfY29tcGlsZXJfbWVtb3J5X2Vycm9yKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisJaWYgKGNvbXBpbGVyLT5lcnJvciA9PSBTTEpJVF9TVUNDRVNTKQorCQljb21waWxlci0+ZXJyb3IgPSBTTEpJVF9FUlJfQUxMT0NfRkFJTEVEOworfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9USFVNQjIgJiYgU0xKSVRfQ09ORklHX0FSTV9USFVNQjIpCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9mcmVlX2NvZGUodm9pZCogY29kZSkKK3sKKwkvKiBSZW1vdmUgdGh1bWIgbW9kZSBmbGFnLiAqLworCVNMSklUX0ZSRUVfRVhFQygodm9pZCopKChzbGppdF91dyljb2RlICYgfjB4MSkpOworfQorI2VsaWYgKGRlZmluZWQgU0xKSVRfSU5ESVJFQ1RfQ0FMTCAmJiBTTEpJVF9JTkRJUkVDVF9DQUxMKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfZnJlZV9jb2RlKHZvaWQqIGNvZGUpCit7CisJLyogUmVzb2x2ZSBpbmRpcmVjdGlvbi4gKi8KKwljb2RlID0gKHZvaWQqKSgqKHNsaml0X3V3Kiljb2RlKTsKKwlTTEpJVF9GUkVFX0VYRUMoY29kZSk7Cit9CisjZWxzZQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfZnJlZV9jb2RlKHZvaWQqIGNvZGUpCit7CisJU0xKSVRfRlJFRV9FWEVDKGNvZGUpOworfQorI2VuZGlmCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9sYWJlbChzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc3RydWN0IHNsaml0X2xhYmVsKiBsYWJlbCkKK3sKKwlpZiAoU0xKSVRfTElLRUxZKCEhanVtcCkgJiYgU0xKSVRfTElLRUxZKCEhbGFiZWwpKSB7CisJCWp1bXAtPmZsYWdzICY9IH5KVU1QX0FERFI7CisJCWp1bXAtPmZsYWdzIHw9IEpVTVBfTEFCRUw7CisJCWp1bXAtPnUubGFiZWwgPSBsYWJlbDsKKwl9Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF90YXJnZXQoc3RydWN0IHNsaml0X2p1bXAgKmp1bXAsIHNsaml0X3V3IHRhcmdldCkKK3sKKwlpZiAoU0xKSVRfTElLRUxZKCEhanVtcCkpIHsKKwkJanVtcC0+ZmxhZ3MgJj0gfkpVTVBfTEFCRUw7CisJCWp1bXAtPmZsYWdzIHw9IEpVTVBfQUREUjsKKwkJanVtcC0+dS50YXJnZXQgPSB0YXJnZXQ7CisJfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBQcml2YXRlIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyB2b2lkKiBlbnN1cmVfYnVmKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3V3IHNpemUpCit7CisJc2xqaXRfdWIgKnJldDsKKwlzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50ICpuZXdfZnJhZzsKKworCVNMSklUX0FTU0VSVChzaXplIDw9IDI1Nik7CisJaWYgKGNvbXBpbGVyLT5idWYtPnVzZWRfc2l6ZSArIHNpemUgPD0gKEJVRl9TSVpFIC0gKHNsaml0X3V3KVNMSklUX09GRlNFVE9GKHN0cnVjdCBzbGppdF9tZW1vcnlfZnJhZ21lbnQsIG1lbW9yeSkpKSB7CisJCXJldCA9IGNvbXBpbGVyLT5idWYtPm1lbW9yeSArIGNvbXBpbGVyLT5idWYtPnVzZWRfc2l6ZTsKKwkJY29tcGlsZXItPmJ1Zi0+dXNlZF9zaXplICs9IHNpemU7CisJCXJldHVybiByZXQ7CisJfQorCW5ld19mcmFnID0gKHN0cnVjdCBzbGppdF9tZW1vcnlfZnJhZ21lbnQqKVNMSklUX01BTExPQyhCVUZfU0laRSwgY29tcGlsZXItPmFsbG9jYXRvcl9kYXRhKTsKKwlQVFJfRkFJTF9JRl9OVUxMKG5ld19mcmFnKTsKKwluZXdfZnJhZy0+bmV4dCA9IGNvbXBpbGVyLT5idWY7CisJY29tcGlsZXItPmJ1ZiA9IG5ld19mcmFnOworCW5ld19mcmFnLT51c2VkX3NpemUgPSBzaXplOworCXJldHVybiBuZXdfZnJhZy0+bWVtb3J5OworfQorCitzdGF0aWMgdm9pZCogZW5zdXJlX2FidWYoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfdXcgc2l6ZSkKK3sKKwlzbGppdF91YiAqcmV0OworCXN0cnVjdCBzbGppdF9tZW1vcnlfZnJhZ21lbnQgKm5ld19mcmFnOworCisJU0xKSVRfQVNTRVJUKHNpemUgPD0gMjU2KTsKKwlpZiAoY29tcGlsZXItPmFidWYtPnVzZWRfc2l6ZSArIHNpemUgPD0gKEFCVUZfU0laRSAtIChzbGppdF91dylTTEpJVF9PRkZTRVRPRihzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50LCBtZW1vcnkpKSkgeworCQlyZXQgPSBjb21waWxlci0+YWJ1Zi0+bWVtb3J5ICsgY29tcGlsZXItPmFidWYtPnVzZWRfc2l6ZTsKKwkJY29tcGlsZXItPmFidWYtPnVzZWRfc2l6ZSArPSBzaXplOworCQlyZXR1cm4gcmV0OworCX0KKwluZXdfZnJhZyA9IChzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50KilTTEpJVF9NQUxMT0MoQUJVRl9TSVpFLCBjb21waWxlci0+YWxsb2NhdG9yX2RhdGEpOworCVBUUl9GQUlMX0lGX05VTEwobmV3X2ZyYWcpOworCW5ld19mcmFnLT5uZXh0ID0gY29tcGlsZXItPmFidWY7CisJY29tcGlsZXItPmFidWYgPSBuZXdfZnJhZzsKKwluZXdfZnJhZy0+dXNlZF9zaXplID0gc2l6ZTsKKwlyZXR1cm4gbmV3X2ZyYWctPm1lbW9yeTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQqIHNsaml0X2FsbG9jX21lbW9yeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzaXplKQoreworCUNIRUNLX0VSUk9SX1BUUigpOworCisjaWYgKGRlZmluZWQgU0xKSVRfNjRCSVRfQVJDSElURUNUVVJFICYmIFNMSklUXzY0QklUX0FSQ0hJVEVDVFVSRSkKKwlpZiAoc2l6ZSA8PSAwIHx8IHNpemUgPiAxMjgpCisJCXJldHVybiBOVUxMOworCXNpemUgPSAoc2l6ZSArIDcpICYgfjc7CisjZWxzZQorCWlmIChzaXplIDw9IDAgfHwgc2l6ZSA+IDY0KQorCQlyZXR1cm4gTlVMTDsKKwlzaXplID0gKHNpemUgKyAzKSAmIH4zOworI2VuZGlmCisJcmV0dXJuIGVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIHJldmVyc2VfYnVmKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisJc3RydWN0IHNsaml0X21lbW9yeV9mcmFnbWVudCAqYnVmID0gY29tcGlsZXItPmJ1ZjsKKwlzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50ICpwcmV2ID0gTlVMTDsKKwlzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50ICp0bXA7CisKKwlkbyB7CisJCXRtcCA9IGJ1Zi0+bmV4dDsKKwkJYnVmLT5uZXh0ID0gcHJldjsKKwkJcHJldiA9IGJ1ZjsKKwkJYnVmID0gdG1wOworCX0gd2hpbGUgKGJ1ZiAhPSBOVUxMKTsKKworCWNvbXBpbGVyLT5idWYgPSBwcmV2OworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgc2V0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKKwlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQoreworCVNMSklUX1VOVVNFRF9BUkcoYXJncyk7CisJU0xKSVRfVU5VU0VEX0FSRyhsb2NhbF9zaXplKTsKKworCWNvbXBpbGVyLT5vcHRpb25zID0gb3B0aW9uczsKKwljb21waWxlci0+c2NyYXRjaGVzID0gc2NyYXRjaGVzOworCWNvbXBpbGVyLT5zYXZlZHMgPSBzYXZlZHM7CisJY29tcGlsZXItPmZzY3JhdGNoZXMgPSBmc2NyYXRjaGVzOworCWNvbXBpbGVyLT5mc2F2ZWRzID0gZnNhdmVkczsKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCWNvbXBpbGVyLT5sb2dpY2FsX2xvY2FsX3NpemUgPSBsb2NhbF9zaXplOworI2VuZGlmCit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBzZXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKKwlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQoreworCVNMSklUX1VOVVNFRF9BUkcoYXJncyk7CisJU0xKSVRfVU5VU0VEX0FSRyhsb2NhbF9zaXplKTsKKworCWNvbXBpbGVyLT5vcHRpb25zID0gb3B0aW9uczsKKwljb21waWxlci0+c2NyYXRjaGVzID0gc2NyYXRjaGVzOworCWNvbXBpbGVyLT5zYXZlZHMgPSBzYXZlZHM7CisJY29tcGlsZXItPmZzY3JhdGNoZXMgPSBmc2NyYXRjaGVzOworCWNvbXBpbGVyLT5mc2F2ZWRzID0gZnNhdmVkczsKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCWNvbXBpbGVyLT5sb2dpY2FsX2xvY2FsX3NpemUgPSBsb2NhbF9zaXplOworI2VuZGlmCit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBzZXRfbGFiZWwoc3RydWN0IHNsaml0X2xhYmVsICpsYWJlbCwgc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKK3sKKwlsYWJlbC0+bmV4dCA9IE5VTEw7CisJbGFiZWwtPnNpemUgPSBjb21waWxlci0+c2l6ZTsKKwlpZiAoY29tcGlsZXItPmxhc3RfbGFiZWwpCisJCWNvbXBpbGVyLT5sYXN0X2xhYmVsLT5uZXh0ID0gbGFiZWw7CisJZWxzZQorCQljb21waWxlci0+bGFiZWxzID0gbGFiZWw7CisJY29tcGlsZXItPmxhc3RfbGFiZWwgPSBsYWJlbDsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIHNldF9qdW1wKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncykKK3sKKwlqdW1wLT5uZXh0ID0gTlVMTDsKKwlqdW1wLT5mbGFncyA9IGZsYWdzOworCWlmIChjb21waWxlci0+bGFzdF9qdW1wKQorCQljb21waWxlci0+bGFzdF9qdW1wLT5uZXh0ID0ganVtcDsKKwllbHNlCisJCWNvbXBpbGVyLT5qdW1wcyA9IGp1bXA7CisJY29tcGlsZXItPmxhc3RfanVtcCA9IGp1bXA7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBzZXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbnN0ICpjb25zdF8sIHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisJY29uc3RfLT5uZXh0ID0gTlVMTDsKKwljb25zdF8tPmFkZHIgPSBjb21waWxlci0+c2l6ZTsKKwlpZiAoY29tcGlsZXItPmxhc3RfY29uc3QpCisJCWNvbXBpbGVyLT5sYXN0X2NvbnN0LT5uZXh0ID0gY29uc3RfOworCWVsc2UKKwkJY29tcGlsZXItPmNvbnN0cyA9IGNvbnN0XzsKKwljb21waWxlci0+bGFzdF9jb25zdCA9IGNvbnN0XzsKK30KKworI2RlZmluZSBBRERSRVNTSU5HX0RFUEVORFNfT04oZXhwLCByZWcpIFwKKwkoKChleHApICYgU0xKSVRfTUVNKSAmJiAoKChleHApICYgUkVHX01BU0spID09IHJlZyB8fCBPRkZTX1JFRyhleHApID09IHJlZykpCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorI2RlZmluZSBGVU5DVElPTl9DSEVDS19PUCgpIFwKKwlDSEVDS19BUkdVTUVOVCghR0VUX0ZMQUdTKG9wKSB8fCAhKG9wICYgU0xKSVRfS0VFUF9GTEFHUykpOyBcCisJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgeyBcCisJY2FzZSBTTEpJVF9OT1Q6IFwKKwljYXNlIFNMSklUX0NMWjogXAorCWNhc2UgU0xKSVRfQU5EOiBcCisJY2FzZSBTTEpJVF9PUjogXAorCWNhc2UgU0xKSVRfWE9SOiBcCisJY2FzZSBTTEpJVF9TSEw6IFwKKwljYXNlIFNMSklUX0xTSFI6IFwKKwljYXNlIFNMSklUX0FTSFI6IFwKKwkJQ0hFQ0tfQVJHVU1FTlQoIShvcCAmIChTTEpJVF9TRVRfVSB8IFNMSklUX1NFVF9TIHwgU0xKSVRfU0VUX08gfCBTTEpJVF9TRVRfQykpKTsgXAorCQlicmVhazsgXAorCWNhc2UgU0xKSVRfTkVHOiBcCisJCUNIRUNLX0FSR1VNRU5UKCEob3AgJiAoU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUyB8IFNMSklUX1NFVF9DKSkpOyBcCisJCWJyZWFrOyBcCisJY2FzZSBTTEpJVF9NVUw6IFwKKwkJQ0hFQ0tfQVJHVU1FTlQoIShvcCAmIChTTEpJVF9TRVRfRSB8IFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX1MgfCBTTEpJVF9TRVRfQykpKTsgXAorCQlicmVhazsgXAorCWNhc2UgU0xKSVRfQUREOiBcCisJCUNIRUNLX0FSR1VNRU5UKCEob3AgJiAoU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUykpKTsgXAorCQlicmVhazsgXAorCWNhc2UgU0xKSVRfU1VCOiBcCisJCWJyZWFrOyBcCisJY2FzZSBTTEpJVF9BRERDOiBcCisJY2FzZSBTTEpJVF9TVUJDOiBcCisJCUNIRUNLX0FSR1VNRU5UKCEob3AgJiAoU0xKSVRfU0VUX0UgfCBTTEpJVF9TRVRfVSB8IFNMSklUX1NFVF9TIHwgU0xKSVRfU0VUX08pKSk7IFwKKwkJYnJlYWs7IFwKKwljYXNlIFNMSklUX0JSRUFLUE9JTlQ6IFwKKwljYXNlIFNMSklUX05PUDogXAorCWNhc2UgU0xKSVRfTFVNVUw6IFwKKwljYXNlIFNMSklUX0xTTVVMOiBcCisJY2FzZSBTTEpJVF9NT1Y6IFwKKwljYXNlIFNMSklUX01PVl9VSTogXAorCWNhc2UgU0xKSVRfTU9WX1A6IFwKKwljYXNlIFNMSklUX01PVlU6IFwKKwljYXNlIFNMSklUX01PVlVfVUk6IFwKKwljYXNlIFNMSklUX01PVlVfUDogXAorCQkvKiBOb3RoaW5nIGFsbG93ZWQgKi8gXAorCQlDSEVDS19BUkdVTUVOVCghKG9wICYgKFNMSklUX0lOVF9PUCB8IFNMSklUX1NFVF9FIHwgU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUyB8IFNMSklUX1NFVF9PIHwgU0xKSVRfU0VUX0MgfCBTTEpJVF9LRUVQX0ZMQUdTKSkpOyBcCisJCWJyZWFrOyBcCisJZGVmYXVsdDogXAorCQkvKiBPbmx5IFNMSklUX0lOVF9PUCBvciBTTEpJVF9TSU5HTEVfT1AgaXMgYWxsb3dlZC4gKi8gXAorCQlDSEVDS19BUkdVTUVOVCghKG9wICYgKFNMSklUX1NFVF9FIHwgU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUyB8IFNMSklUX1NFVF9PIHwgU0xKSVRfU0VUX0MgfCBTTEpJVF9LRUVQX0ZMQUdTKSkpOyBcCisJCWJyZWFrOyBcCisJfQorCisjZGVmaW5lIEZVTkNUSU9OX0NIRUNLX0ZPUCgpIFwKKwlDSEVDS19BUkdVTUVOVCghR0VUX0ZMQUdTKG9wKSB8fCAhKG9wICYgU0xKSVRfS0VFUF9GTEFHUykpOyBcCisJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgeyBcCisJY2FzZSBTTEpJVF9EQ01QOiBcCisJCUNIRUNLX0FSR1VNRU5UKCEob3AgJiAoU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfTyB8IFNMSklUX1NFVF9DIHwgU0xKSVRfS0VFUF9GTEFHUykpKTsgXAorCQlDSEVDS19BUkdVTUVOVCgob3AgJiAoU0xKSVRfU0VUX0UgfCBTTEpJVF9TRVRfUykpKTsgXAorCQlicmVhazsgXAorCWRlZmF1bHQ6IFwKKwkJLyogT25seSBTTEpJVF9JTlRfT1Agb3IgU0xKSVRfU0lOR0xFX09QIGlzIGFsbG93ZWQuICovIFwKKwkJQ0hFQ0tfQVJHVU1FTlQoIShvcCAmIChTTEpJVF9TRVRfRSB8IFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX1MgfCBTTEpJVF9TRVRfTyB8IFNMSklUX1NFVF9DIHwgU0xKSVRfS0VFUF9GTEFHUykpKTsgXAorCQlicmVhazsgXAorCX0KKworI2RlZmluZSBGVU5DVElPTl9DSEVDS19JU19SRUcocikgXAorCSgoKHIpID49IFNMSklUX1IwICYmIChyKSA8IChTTEpJVF9SMCArIGNvbXBpbGVyLT5zY3JhdGNoZXMpKSB8fCBcCisJKChyKSA+IChTTEpJVF9TMCAtIGNvbXBpbGVyLT5zYXZlZHMpICYmIChyKSA8PSBTTEpJVF9TMCkpCisKKyNkZWZpbmUgRlVOQ1RJT05fQ0hFQ0tfSVNfUkVHX09SX1VOVVNFRChyKSBcCisJKChyKSA9PSBTTEpJVF9VTlVTRUQgfHwgXAorCSgocikgPj0gU0xKSVRfUjAgJiYgKHIpIDwgKFNMSklUX1IwICsgY29tcGlsZXItPnNjcmF0Y2hlcykpIHx8IFwKKwkoKHIpID4gKFNMSklUX1MwIC0gY29tcGlsZXItPnNhdmVkcykgJiYgKHIpIDw9IFNMSklUX1MwKSkKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKyNkZWZpbmUgQ0hFQ0tfTk9UX1ZJUlRVQUxfUkVHSVNURVIocCkgXAorCUNIRUNLX0FSR1VNRU5UKChwKSA8IFNMSklUX1IzIHx8IChwKSA+IFNMSklUX1I2KTsKKyNlbHNlCisjZGVmaW5lIENIRUNLX05PVF9WSVJUVUFMX1JFR0lTVEVSKHApCisjZW5kaWYKKworI2RlZmluZSBGVU5DVElPTl9DSEVDS19TUkMocCwgaSkgXAorCUNIRUNLX0FSR1VNRU5UKGNvbXBpbGVyLT5zY3JhdGNoZXMgIT0gLTEgJiYgY29tcGlsZXItPnNhdmVkcyAhPSAtMSk7IFwKKwlpZiAoRlVOQ1RJT05fQ0hFQ0tfSVNfUkVHKHApKSBcCisJCUNIRUNLX0FSR1VNRU5UKChpKSA9PSAwKTsgXAorCWVsc2UgaWYgKChwKSA9PSBTTEpJVF9JTU0pIFwKKwkJOyBcCisJZWxzZSBpZiAoKHApID09IChTTEpJVF9NRU0xKFNMSklUX1NQKSkpIFwKKwkJQ0hFQ0tfQVJHVU1FTlQoKGkpID49IDAgJiYgKGkpIDwgY29tcGlsZXItPmxvZ2ljYWxfbG9jYWxfc2l6ZSk7IFwKKwllbHNlIHsgXAorCQlDSEVDS19BUkdVTUVOVCgocCkgJiBTTEpJVF9NRU0pOyBcCisJCUNIRUNLX0FSR1VNRU5UKEZVTkNUSU9OX0NIRUNLX0lTX1JFR19PUl9VTlVTRUQoKHApICYgUkVHX01BU0spKTsgXAorCQlDSEVDS19OT1RfVklSVFVBTF9SRUdJU1RFUigocCkgJiBSRUdfTUFTSyk7IFwKKwkJaWYgKChwKSAmIE9GRlNfUkVHX01BU0spIHsgXAorCQkJQ0hFQ0tfQVJHVU1FTlQoKChwKSAmIFJFR19NQVNLKSAhPSBTTEpJVF9VTlVTRUQpOyBcCisJCQlDSEVDS19BUkdVTUVOVChGVU5DVElPTl9DSEVDS19JU19SRUcoT0ZGU19SRUcocCkpKTsgXAorCQkJQ0hFQ0tfTk9UX1ZJUlRVQUxfUkVHSVNURVIoT0ZGU19SRUcocCkpOyBcCisJCQlDSEVDS19BUkdVTUVOVCghKChpKSAmIH4weDMpKTsgXAorCQl9IFwKKwkJQ0hFQ0tfQVJHVU1FTlQoISgocCkgJiB+KFNMSklUX01FTSB8IFNMSklUX0lNTSB8IFJFR19NQVNLIHwgT0ZGU19SRUdfTUFTSykpKTsgXAorCX0KKworI2RlZmluZSBGVU5DVElPTl9DSEVDS19EU1QocCwgaSkgXAorCUNIRUNLX0FSR1VNRU5UKGNvbXBpbGVyLT5zY3JhdGNoZXMgIT0gLTEgJiYgY29tcGlsZXItPnNhdmVkcyAhPSAtMSk7IFwKKwlpZiAoRlVOQ1RJT05fQ0hFQ0tfSVNfUkVHX09SX1VOVVNFRChwKSkgXAorCQlDSEVDS19BUkdVTUVOVCgoaSkgPT0gMCk7IFwKKwllbHNlIGlmICgocCkgPT0gKFNMSklUX01FTTEoU0xKSVRfU1ApKSkgXAorCQlDSEVDS19BUkdVTUVOVCgoaSkgPj0gMCAmJiAoaSkgPCBjb21waWxlci0+bG9naWNhbF9sb2NhbF9zaXplKTsgXAorCWVsc2UgeyBcCisJCUNIRUNLX0FSR1VNRU5UKChwKSAmIFNMSklUX01FTSk7IFwKKwkJQ0hFQ0tfQVJHVU1FTlQoRlVOQ1RJT05fQ0hFQ0tfSVNfUkVHX09SX1VOVVNFRCgocCkgJiBSRUdfTUFTSykpOyBcCisJCUNIRUNLX05PVF9WSVJUVUFMX1JFR0lTVEVSKChwKSAmIFJFR19NQVNLKTsgXAorCQlpZiAoKHApICYgT0ZGU19SRUdfTUFTSykgeyBcCisJCQlDSEVDS19BUkdVTUVOVCgoKHApICYgUkVHX01BU0spICE9IFNMSklUX1VOVVNFRCk7IFwKKwkJCUNIRUNLX0FSR1VNRU5UKEZVTkNUSU9OX0NIRUNLX0lTX1JFRyhPRkZTX1JFRyhwKSkpOyBcCisJCQlDSEVDS19OT1RfVklSVFVBTF9SRUdJU1RFUihPRkZTX1JFRyhwKSk7IFwKKwkJCUNIRUNLX0FSR1VNRU5UKCEoKGkpICYgfjB4MykpOyBcCisJCX0gXAorCQlDSEVDS19BUkdVTUVOVCghKChwKSAmIH4oU0xKSVRfTUVNIHwgU0xKSVRfSU1NIHwgUkVHX01BU0sgfCBPRkZTX1JFR19NQVNLKSkpOyBcCisJfQorCisjZGVmaW5lIEZVTkNUSU9OX0ZDSEVDSyhwLCBpKSBcCisJQ0hFQ0tfQVJHVU1FTlQoY29tcGlsZXItPmZzY3JhdGNoZXMgIT0gLTEgJiYgY29tcGlsZXItPmZzYXZlZHMgIT0gLTEpOyBcCisJaWYgKCgocCkgPj0gU0xKSVRfRlIwICYmIChwKSA8IChTTEpJVF9GUjAgKyBjb21waWxlci0+ZnNjcmF0Y2hlcykpIHx8IFwKKwkJCSgocCkgPiAoU0xKSVRfRlMwIC0gY29tcGlsZXItPmZzYXZlZHMpICYmIChwKSA8PSBTTEpJVF9GUzApKSBcCisJCUNIRUNLX0FSR1VNRU5UKGkgPT0gMCk7IFwKKwllbHNlIGlmICgocCkgPT0gKFNMSklUX01FTTEoU0xKSVRfU1ApKSkgXAorCQlDSEVDS19BUkdVTUVOVCgoaSkgPj0gMCAmJiAoaSkgPCBjb21waWxlci0+bG9naWNhbF9sb2NhbF9zaXplKTsgXAorCWVsc2UgeyBcCisJCUNIRUNLX0FSR1VNRU5UKChwKSAmIFNMSklUX01FTSk7IFwKKwkJQ0hFQ0tfQVJHVU1FTlQoRlVOQ1RJT05fQ0hFQ0tfSVNfUkVHX09SX1VOVVNFRCgocCkgJiBSRUdfTUFTSykpOyBcCisJCUNIRUNLX05PVF9WSVJUVUFMX1JFR0lTVEVSKChwKSAmIFJFR19NQVNLKTsgXAorCQlpZiAoKHApICYgT0ZGU19SRUdfTUFTSykgeyBcCisJCQlDSEVDS19BUkdVTUVOVCgoKHApICYgUkVHX01BU0spICE9IFNMSklUX1VOVVNFRCk7IFwKKwkJCUNIRUNLX0FSR1VNRU5UKEZVTkNUSU9OX0NIRUNLX0lTX1JFRyhPRkZTX1JFRyhwKSkpOyBcCisJCQlDSEVDS19OT1RfVklSVFVBTF9SRUdJU1RFUihPRkZTX1JFRyhwKSk7IFwKKwkJCUNIRUNLX0FSR1VNRU5UKCgocCkgJiBPRkZTX1JFR19NQVNLKSAhPSBUT19PRkZTX1JFRyhTTEpJVF9TUCkgJiYgIShpICYgfjB4MykpOyBcCisJCX0gXAorCQlDSEVDS19BUkdVTUVOVCghKChwKSAmIH4oU0xKSVRfTUVNIHwgU0xKSVRfSU1NIHwgUkVHX01BU0sgfCBPRkZTX1JFR19NQVNLKSkpOyBcCisJfQorCisjZGVmaW5lIEZVTkNUSU9OX0NIRUNLX09QMSgpIFwKKwlpZiAoR0VUX09QQ09ERShvcCkgPj0gU0xKSVRfTU9WVSAmJiBHRVRfT1BDT0RFKG9wKSA8PSBTTEpJVF9NT1ZVX1ApIHsgXAorCQlDSEVDS19BUkdVTUVOVCghKHNyYyAmIFNMSklUX01FTSkgfHwgKHNyYyAmIFJFR19NQVNLKSAhPSBTTEpJVF9TUCk7IFwKKwkJQ0hFQ0tfQVJHVU1FTlQoIShkc3QgJiBTTEpJVF9NRU0pIHx8IChkc3QgJiBSRUdfTUFTSykgIT0gU0xKSVRfU1ApOyBcCisJCWlmICgoc3JjICYgU0xKSVRfTUVNKSAmJiAoc3JjICYgUkVHX01BU0spKSBcCisJCQlDSEVDS19BUkdVTUVOVCgoZHN0ICYgUkVHX01BU0spICE9IChzcmMgJiBSRUdfTUFTSykgJiYgT0ZGU19SRUcoZHN0KSAhPSAoc3JjICYgUkVHX01BU0spKTsgXAorCX0KKworI2VuZGlmIC8qIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAqLworCisjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9jb21waWxlcl92ZXJib3NlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIEZJTEUqIHZlcmJvc2UpCit7CisJY29tcGlsZXItPnZlcmJvc2UgPSB2ZXJib3NlOworfQorCisjaWYgKGRlZmluZWQgU0xKSVRfNjRCSVRfQVJDSElURUNUVVJFICYmIFNMSklUXzY0QklUX0FSQ0hJVEVDVFVSRSkKKyNpZmRlZiBfV0lONjQKKyMJZGVmaW5lIFNMSklUX1BSSU5UX0QJIkk2NCIKKyNlbHNlCisjCWRlZmluZSBTTEpJVF9QUklOVF9ECSJsIgorI2VuZGlmCisjZWxzZQorIwlkZWZpbmUgU0xKSVRfUFJJTlRfRAkiIgorI2VuZGlmCisKKyNkZWZpbmUgc2xqaXRfdmVyYm9zZV9yZWcoY29tcGlsZXIsIHIpIFwKKwlkbyB7IFwKKwkJaWYgKChyKSA8IChTTEpJVF9SMCArIGNvbXBpbGVyLT5zY3JhdGNoZXMpKSBcCisJCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiciVkIiwgKHIpIC0gU0xKSVRfUjApOyBcCisJCWVsc2UgXAorCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgInMlZCIsIFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgLSAocikpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBwLCBpKSBcCisJaWYgKChwKSAmIFNMSklUX0lNTSkgXAorCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiIyUiIFNMSklUX1BSSU5UX0QgImQiLCAoaSkpOyBcCisJZWxzZSBpZiAoKHApICYgU0xKSVRfTUVNKSB7IFwKKwkJaWYgKChwKSAmIFJFR19NQVNLKSB7IFwKKwkJCWZwdXRjKCdbJywgY29tcGlsZXItPnZlcmJvc2UpOyBcCisJCQlzbGppdF92ZXJib3NlX3JlZyhjb21waWxlciwgKHApICYgUkVHX01BU0spOyBcCisJCQlpZiAoKHApICYgT0ZGU19SRUdfTUFTSykgeyBcCisJCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiArICIpOyBcCisJCQkJc2xqaXRfdmVyYm9zZV9yZWcoY29tcGlsZXIsIE9GRlNfUkVHKHApKTsgXAorCQkJCWlmIChpKSBcCisJCQkJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgKiAlZCIsIDEgPDwgKGkpKTsgXAorCQkJfSBcCisJCQllbHNlIGlmIChpKSBcCisJCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiArICUiIFNMSklUX1BSSU5UX0QgImQiLCAoaSkpOyBcCisJCQlmcHV0YygnXScsIGNvbXBpbGVyLT52ZXJib3NlKTsgXAorCQl9IFwKKwkJZWxzZSBcCisJCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiWyMlIiBTTEpJVF9QUklOVF9EICJkXSIsIChpKSk7IFwKKwl9IGVsc2UgaWYgKHApIFwKKwkJc2xqaXRfdmVyYm9zZV9yZWcoY29tcGlsZXIsIHApOyBcCisJZWxzZSBcCisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICJ1bnVzZWQiKTsKKworI2RlZmluZSBzbGppdF92ZXJib3NlX2ZwYXJhbShjb21waWxlciwgcCwgaSkgXAorCWlmICgocCkgJiBTTEpJVF9NRU0pIHsgXAorCQlpZiAoKHApICYgUkVHX01BU0spIHsgXAorCQkJZnB1dGMoJ1snLCBjb21waWxlci0+dmVyYm9zZSk7IFwKKwkJCXNsaml0X3ZlcmJvc2VfcmVnKGNvbXBpbGVyLCAocCkgJiBSRUdfTUFTSyk7IFwKKwkJCWlmICgocCkgJiBPRkZTX1JFR19NQVNLKSB7IFwKKwkJCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICsgIik7IFwKKwkJCQlzbGppdF92ZXJib3NlX3JlZyhjb21waWxlciwgT0ZGU19SRUcocCkpOyBcCisJCQkJaWYgKGkpIFwKKwkJCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiVkIiwgMSA8PCAoaSkpOyBcCisJCQl9IFwKKwkJCWVsc2UgaWYgKGkpIFwKKwkJCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiJSIgU0xKSVRfUFJJTlRfRCAiZCIsIChpKSk7IFwKKwkJCWZwdXRjKCddJywgY29tcGlsZXItPnZlcmJvc2UpOyBcCisJCX0gXAorCQllbHNlIFwKKwkJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICJbIyUiIFNMSklUX1BSSU5UX0QgImRdIiwgKGkpKTsgXAorCX0gXAorCWVsc2UgeyBcCisJCWlmICgocCkgPCAoU0xKSVRfRlIwICsgY29tcGlsZXItPmZzY3JhdGNoZXMpKSBcCisJCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiZnIlZCIsIChwKSAtIFNMSklUX0ZSMCk7IFwKKwkJZWxzZSBcCisJCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiZnMlZCIsIFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMgLSAocCkpOyBcCisJfQorCitzdGF0aWMgU0xKSVRfQ09OU1QgY2hhciogb3AwX25hbWVzW10gPSB7CisJKGNoYXIqKSJicmVha3BvaW50IiwgKGNoYXIqKSJub3AiLCAoY2hhciopImx1bXVsIiwgKGNoYXIqKSJsc211bCIsCisJKGNoYXIqKSJ1ZGl2bW9kIiwgKGNoYXIqKSJzZGl2bW9kIiwgKGNoYXIqKSJ1ZGl2aSIsIChjaGFyKikic2RpdmkiCit9OworCitzdGF0aWMgU0xKSVRfQ09OU1QgY2hhciogb3AxX25hbWVzW10gPSB7CisJKGNoYXIqKSJtb3YiLCAoY2hhciopIm1vdl91YiIsIChjaGFyKikibW92X3NiIiwgKGNoYXIqKSJtb3ZfdWgiLAorCShjaGFyKikibW92X3NoIiwgKGNoYXIqKSJtb3ZfdWkiLCAoY2hhciopIm1vdl9zaSIsIChjaGFyKikibW92X3AiLAorCShjaGFyKikibW92dSIsIChjaGFyKikibW92dV91YiIsIChjaGFyKikibW92dV9zYiIsIChjaGFyKikibW92dV91aCIsCisJKGNoYXIqKSJtb3Z1X3NoIiwgKGNoYXIqKSJtb3Z1X3VpIiwgKGNoYXIqKSJtb3Z1X3NpIiwgKGNoYXIqKSJtb3Z1X3AiLAorCShjaGFyKikibm90IiwgKGNoYXIqKSJuZWciLCAoY2hhciopImNseiIsCit9OworCitzdGF0aWMgU0xKSVRfQ09OU1QgY2hhciogb3AyX25hbWVzW10gPSB7CisJKGNoYXIqKSJhZGQiLCAoY2hhciopImFkZGMiLCAoY2hhciopInN1YiIsIChjaGFyKikic3ViYyIsCisJKGNoYXIqKSJtdWwiLCAoY2hhciopImFuZCIsIChjaGFyKikib3IiLCAoY2hhciopInhvciIsCisJKGNoYXIqKSJzaGwiLCAoY2hhciopImxzaHIiLCAoY2hhciopImFzaHIiLAorfTsKKworc3RhdGljIFNMSklUX0NPTlNUIGNoYXIqIGZvcDFfbmFtZXNbXSA9IHsKKwkoY2hhciopIm1vdiIsIChjaGFyKikiY29udiIsIChjaGFyKikiY29udiIsIChjaGFyKikiY29udiIsCisJKGNoYXIqKSJjb252IiwgKGNoYXIqKSJjb252IiwgKGNoYXIqKSJjbXAiLCAoY2hhciopIm5lZyIsCisJKGNoYXIqKSJhYnMiLAorfTsKKworc3RhdGljIFNMSklUX0NPTlNUIGNoYXIqIGZvcDJfbmFtZXNbXSA9IHsKKwkoY2hhciopImFkZCIsIChjaGFyKikic3ViIiwgKGNoYXIqKSJtdWwiLCAoY2hhciopImRpdiIKK307CisKKyNkZWZpbmUgSlVNUF9QUkVGSVgodHlwZSkgXAorCSgodHlwZSAmIDB4ZmYpIDw9IFNMSklUX01VTF9OT1RfT1ZFUkZMT1cgPyAoKHR5cGUgJiBTTEpJVF9JTlRfT1ApID8gImlfIiA6ICIiKSBcCisJOiAoKHR5cGUgJiAweGZmKSA8PSBTTEpJVF9EX09SREVSRUQgPyAoKHR5cGUgJiBTTEpJVF9TSU5HTEVfT1ApID8gInNfIiA6ICJkXyIpIDogIiIpKQorCitzdGF0aWMgY2hhcioganVtcF9uYW1lc1tdID0geworCShjaGFyKikiZXF1YWwiLCAoY2hhciopIm5vdF9lcXVhbCIsCisJKGNoYXIqKSJsZXNzIiwgKGNoYXIqKSJncmVhdGVyX2VxdWFsIiwKKwkoY2hhciopImdyZWF0ZXIiLCAoY2hhciopImxlc3NfZXF1YWwiLAorCShjaGFyKikic2lnX2xlc3MiLCAoY2hhciopInNpZ19ncmVhdGVyX2VxdWFsIiwKKwkoY2hhciopInNpZ19ncmVhdGVyIiwgKGNoYXIqKSJzaWdfbGVzc19lcXVhbCIsCisJKGNoYXIqKSJvdmVyZmxvdyIsIChjaGFyKikibm90X292ZXJmbG93IiwKKwkoY2hhciopIm11bF9vdmVyZmxvdyIsIChjaGFyKikibXVsX25vdF9vdmVyZmxvdyIsCisJKGNoYXIqKSJlcXVhbCIsIChjaGFyKikibm90X2VxdWFsIiwKKwkoY2hhciopImxlc3MiLCAoY2hhciopImdyZWF0ZXJfZXF1YWwiLAorCShjaGFyKikiZ3JlYXRlciIsIChjaGFyKikibGVzc19lcXVhbCIsCisJKGNoYXIqKSJ1bm9yZGVyZWQiLCAoY2hhciopIm9yZGVyZWQiLAorCShjaGFyKikianVtcCIsIChjaGFyKikiZmFzdF9jYWxsIiwKKwkoY2hhciopImNhbGwwIiwgKGNoYXIqKSJjYWxsMSIsIChjaGFyKikiY2FsbDIiLCAoY2hhciopImNhbGwzIgorfTsKKworI2VuZGlmIC8qIFNMSklUX1ZFUkJPU0UgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgQXJjaCBkZXBlbmRlbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykgXAorCXx8IChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKKworc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9nZW5lcmF0ZV9jb2RlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKyNlbmRpZgorCisJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCUNIRUNLX0FSR1VNRU5UKGNvbXBpbGVyLT5zaXplID4gMCk7CisJanVtcCA9IGNvbXBpbGVyLT5qdW1wczsKKwl3aGlsZSAoanVtcCkgeworCQkvKiBBbGwganVtcHMgaGF2ZSB0YXJnZXQuICovCisJCUNIRUNLX0FSR1VNRU5UKGp1bXAtPmZsYWdzICYgKEpVTVBfTEFCRUwgfCBKVU1QX0FERFIpKTsKKwkJanVtcCA9IGp1bXAtPm5leHQ7CisJfQorI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKKwlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQoreworCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOworCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlDSEVDS19BUkdVTUVOVCghKG9wdGlvbnMgJiB+U0xKSVRfRE9VQkxFX0FMSUdOTUVOVCkpOworCUNIRUNLX0FSR1VNRU5UKGFyZ3MgPj0gMCAmJiBhcmdzIDw9IDMpOworCUNIRUNLX0FSR1VNRU5UKHNjcmF0Y2hlcyA+PSAwICYmIHNjcmF0Y2hlcyA8PSBTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTKTsKKwlDSEVDS19BUkdVTUVOVChzYXZlZHMgPj0gMCAmJiBzYXZlZHMgPD0gU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyk7CisJQ0hFQ0tfQVJHVU1FTlQoc2NyYXRjaGVzICsgc2F2ZWRzIDw9IFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMpOworCUNIRUNLX0FSR1VNRU5UKGFyZ3MgPD0gc2F2ZWRzKTsKKwlDSEVDS19BUkdVTUVOVChmc2NyYXRjaGVzID49IDAgJiYgZnNjcmF0Y2hlcyA8PSBTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTKTsKKwlDSEVDS19BUkdVTUVOVChmc2F2ZWRzID49IDAgJiYgZnNhdmVkcyA8PSBTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTKTsKKwlDSEVDS19BUkdVTUVOVChmc2NyYXRjaGVzICsgZnNhdmVkcyA8PSBTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTKTsKKwlDSEVDS19BUkdVTUVOVChsb2NhbF9zaXplID49IDAgJiYgbG9jYWxfc2l6ZSA8PSBTTEpJVF9NQVhfTE9DQUxfU0laRSk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKQorCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBlbnRlciBvcHRpb25zOm5vbmUgYXJnczolZCBzY3JhdGNoZXM6JWQgc2F2ZWRzOiVkIGZzY3JhdGNoZXM6JWQgZnNhdmVkczolZCBsb2NhbF9zaXplOiVkXG4iLAorCQkJYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpOworI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X3NldF9jb250ZXh0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCisJc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKK3sKKwlpZiAoU0xKSVRfVU5MSUtFTFkoY29tcGlsZXItPnNraXBfY2hlY2tzKSkgeworCQljb21waWxlci0+c2tpcF9jaGVja3MgPSAwOworCQlDSEVDS19SRVRVUk5fT0s7CisJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlDSEVDS19BUkdVTUVOVCghKG9wdGlvbnMgJiB+U0xKSVRfRE9VQkxFX0FMSUdOTUVOVCkpOworCUNIRUNLX0FSR1VNRU5UKGFyZ3MgPj0gMCAmJiBhcmdzIDw9IDMpOworCUNIRUNLX0FSR1VNRU5UKHNjcmF0Y2hlcyA+PSAwICYmIHNjcmF0Y2hlcyA8PSBTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTKTsKKwlDSEVDS19BUkdVTUVOVChzYXZlZHMgPj0gMCAmJiBzYXZlZHMgPD0gU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyk7CisJQ0hFQ0tfQVJHVU1FTlQoc2NyYXRjaGVzICsgc2F2ZWRzIDw9IFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMpOworCUNIRUNLX0FSR1VNRU5UKGFyZ3MgPD0gc2F2ZWRzKTsKKwlDSEVDS19BUkdVTUVOVChmc2NyYXRjaGVzID49IDAgJiYgZnNjcmF0Y2hlcyA8PSBTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTKTsKKwlDSEVDS19BUkdVTUVOVChmc2F2ZWRzID49IDAgJiYgZnNhdmVkcyA8PSBTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTKTsKKwlDSEVDS19BUkdVTUVOVChmc2NyYXRjaGVzICsgZnNhdmVkcyA8PSBTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTKTsKKwlDSEVDS19BUkdVTUVOVChsb2NhbF9zaXplID49IDAgJiYgbG9jYWxfc2l6ZSA8PSBTTEpJVF9NQVhfTE9DQUxfU0laRSk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKQorCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBzZXRfY29udGV4dCBvcHRpb25zOm5vbmUgYXJnczolZCBzY3JhdGNoZXM6JWQgc2F2ZWRzOiVkIGZzY3JhdGNoZXM6JWQgZnNhdmVkczolZCBsb2NhbF9zaXplOiVkXG4iLAorCQkJYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpOworI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlDSEVDS19BUkdVTUVOVChjb21waWxlci0+c2NyYXRjaGVzID49IDApOworCWlmIChvcCAhPSBTTEpJVF9VTlVTRUQpIHsKKwkJQ0hFQ0tfQVJHVU1FTlQob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVl9QKTsKKwkJRlVOQ1RJT05fQ0hFQ0tfU1JDKHNyYywgc3Jjdyk7CisJfQorCWVsc2UKKwkJQ0hFQ0tfQVJHVU1FTlQoc3JjID09IDAgJiYgc3JjdyA9PSAwKTsKKyNlbmRpZgorI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKKwlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpIHsKKwkJaWYgKG9wID09IFNMSklUX1VOVVNFRCkKKwkJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgIHJldHVyblxuIik7CisJCWVsc2UgeworCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgcmV0dXJuLiVzICIsIG9wMV9uYW1lc1tvcCAtIFNMSklUX09QMV9CQVNFXSk7CisJCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBzcmMsIHNyY3cpOworCQkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIlxuIik7CisJCX0KKwl9CisjZW5kaWYKKwlDSEVDS19SRVRVUk5fT0s7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9mYXN0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dykKK3sKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCUZVTkNUSU9OX0NIRUNLX0RTVChkc3QsIGRzdHcpOworI2VuZGlmCisjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQorCWlmIChTTEpJVF9VTkxJS0VMWSghIWNvbXBpbGVyLT52ZXJib3NlKSkgeworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBmYXN0X2VudGVyICIpOworCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBkc3QsIGRzdHcpOworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiXG4iKTsKKwl9CisjZW5kaWYKKwlDSEVDS19SRVRVUk5fT0s7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlGVU5DVElPTl9DSEVDS19TUkMoc3JjLCBzcmN3KTsKKyNlbmRpZgorI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKKwlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpIHsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgZmFzdF9yZXR1cm4gIik7CisJCXNsaml0X3ZlcmJvc2VfcGFyYW0oY29tcGlsZXIsIHNyYywgc3Jjdyk7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICJcbiIpOworCX0KKyNlbmRpZgorCUNIRUNLX1JFVFVSTl9PSzsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9lbWl0X29wMChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCkKK3sKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCUNIRUNLX0FSR1VNRU5UKChvcCA+PSBTTEpJVF9CUkVBS1BPSU5UICYmIG9wIDw9IFNMSklUX0xTTVVMKQorCQl8fCAoKG9wICYgflNMSklUX0lOVF9PUCkgPj0gU0xKSVRfVURJVk1PRCAmJiAob3AgJiB+U0xKSVRfSU5UX09QKSA8PSBTTEpJVF9TRElWSSkpOworCUNIRUNLX0FSR1VNRU5UKG9wIDwgU0xKSVRfTFVNVUwgfHwgY29tcGlsZXItPnNjcmF0Y2hlcyA+PSAyKTsKKyNlbmRpZgorI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKKwlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpCisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgICVzJXNcbiIsICEob3AgJiBTTEpJVF9JTlRfT1ApID8gIiIgOiAiaSIsIG9wMF9uYW1lc1tHRVRfT1BDT0RFKG9wKSAtIFNMSklUX09QMF9CQVNFXSk7CisjZW5kaWYKKwlDSEVDS19SRVRVUk5fT0s7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9vcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlpZiAoU0xKSVRfVU5MSUtFTFkoY29tcGlsZXItPnNraXBfY2hlY2tzKSkgeworCQljb21waWxlci0+c2tpcF9jaGVja3MgPSAwOworCQlDSEVDS19SRVRVUk5fT0s7CisJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlDSEVDS19BUkdVTUVOVChHRVRfT1BDT0RFKG9wKSA+PSBTTEpJVF9NT1YgJiYgR0VUX09QQ09ERShvcCkgPD0gU0xKSVRfQ0xaKTsKKwlGVU5DVElPTl9DSEVDS19PUCgpOworCUZVTkNUSU9OX0NIRUNLX1NSQyhzcmMsIHNyY3cpOworCUZVTkNUSU9OX0NIRUNLX0RTVChkc3QsIGRzdHcpOworCUZVTkNUSU9OX0NIRUNLX09QMSgpOworI2VuZGlmCisjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQorCWlmIChTTEpJVF9VTkxJS0VMWSghIWNvbXBpbGVyLT52ZXJib3NlKSkgeworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICAlcyVzJXMlcyVzJXMlcyVzICIsICEob3AgJiBTTEpJVF9JTlRfT1ApID8gIiIgOiAiaSIsIG9wMV9uYW1lc1tHRVRfT1BDT0RFKG9wKSAtIFNMSklUX09QMV9CQVNFXSwKKwkJCSEob3AgJiBTTEpJVF9TRVRfRSkgPyAiIiA6ICIuZSIsICEob3AgJiBTTEpJVF9TRVRfVSkgPyAiIiA6ICIudSIsICEob3AgJiBTTEpJVF9TRVRfUykgPyAiIiA6ICIucyIsCisJCQkhKG9wICYgU0xKSVRfU0VUX08pID8gIiIgOiAiLm8iLCAhKG9wICYgU0xKSVRfU0VUX0MpID8gIiIgOiAiLmMiLCAhKG9wICYgU0xKSVRfS0VFUF9GTEFHUykgPyAiIiA6ICIuayIpOworCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBkc3QsIGRzdHcpOworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiLCAiKTsKKwkJc2xqaXRfdmVyYm9zZV9wYXJhbShjb21waWxlciwgc3JjLCBzcmN3KTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIlxuIik7CisJfQorI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlpZiAoU0xKSVRfVU5MSUtFTFkoY29tcGlsZXItPnNraXBfY2hlY2tzKSkgeworCQljb21waWxlci0+c2tpcF9jaGVja3MgPSAwOworCQlDSEVDS19SRVRVUk5fT0s7CisJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlDSEVDS19BUkdVTUVOVChHRVRfT1BDT0RFKG9wKSA+PSBTTEpJVF9BREQgJiYgR0VUX09QQ09ERShvcCkgPD0gU0xKSVRfQVNIUik7CisJRlVOQ1RJT05fQ0hFQ0tfT1AoKTsKKwlGVU5DVElPTl9DSEVDS19TUkMoc3JjMSwgc3JjMXcpOworCUZVTkNUSU9OX0NIRUNLX1NSQyhzcmMyLCBzcmMydyk7CisJRlVOQ1RJT05fQ0hFQ0tfRFNUKGRzdCwgZHN0dyk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKSB7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgICVzJXMlcyVzJXMlcyVzJXMgIiwgIShvcCAmIFNMSklUX0lOVF9PUCkgPyAiIiA6ICJpIiwgb3AyX25hbWVzW0dFVF9PUENPREUob3ApIC0gU0xKSVRfT1AyX0JBU0VdLAorCQkJIShvcCAmIFNMSklUX1NFVF9FKSA/ICIiIDogIi5lIiwgIShvcCAmIFNMSklUX1NFVF9VKSA/ICIiIDogIi51IiwgIShvcCAmIFNMSklUX1NFVF9TKSA/ICIiIDogIi5zIiwKKwkJCSEob3AgJiBTTEpJVF9TRVRfTykgPyAiIiA6ICIubyIsICEob3AgJiBTTEpJVF9TRVRfQykgPyAiIiA6ICIuYyIsICEob3AgJiBTTEpJVF9LRUVQX0ZMQUdTKSA/ICIiIDogIi5rIik7CisJCXNsaml0X3ZlcmJvc2VfcGFyYW0oY29tcGlsZXIsIGRzdCwgZHN0dyk7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICIpOworCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBzcmMxLCBzcmMxdyk7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICIpOworCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBzcmMyLCBzcmMydyk7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICJcbiIpOworCX0KKyNlbmRpZgorCUNIRUNLX1JFVFVSTl9PSzsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQoreworCVNMSklUX1VOVVNFRF9BUkcocmVnKTsKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCUNIRUNLX0FSR1VNRU5UKHJlZyA+IDAgJiYgcmVnIDw9IFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMpOworI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhyZWcpOworI2lmIChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCisJQ0hFQ0tfQVJHVU1FTlQocmVnID4gMCAmJiByZWcgPD0gU0xKSVRfTlVNQkVSX09GX0ZMT0FUX1JFR0lTVEVSUyk7CisjZW5kaWYKKwlDSEVDS19SRVRVUk5fT0s7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9vcF9jdXN0b20oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwl2b2lkICppbnN0cnVjdGlvbiwgc2xqaXRfc2kgc2l6ZSkKK3sKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJaW50IGk7CisjZW5kaWYKKworCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOworCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlDSEVDS19BUkdVTUVOVChpbnN0cnVjdGlvbik7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4NiAmJiBTTEpJVF9DT05GSUdfWDg2KQorCUNIRUNLX0FSR1VNRU5UKHNpemUgPiAwICYmIHNpemUgPCAxNik7CisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1RIVU1CMiAmJiBTTEpJVF9DT05GSUdfQVJNX1RIVU1CMikKKwlDSEVDS19BUkdVTUVOVCgoc2l6ZSA9PSAyICYmICgoKHNsaml0X3N3KWluc3RydWN0aW9uKSAmIDB4MSkgPT0gMCkKKwkJfHwgKHNpemUgPT0gNCAmJiAoKChzbGppdF9zdylpbnN0cnVjdGlvbikgJiAweDMpID09IDApKTsKKyNlbHNlCisJQ0hFQ0tfQVJHVU1FTlQoc2l6ZSA9PSA0ICYmICgoKHNsaml0X3N3KWluc3RydWN0aW9uKSAmIDB4MykgPT0gMCk7CisjZW5kaWYKKworI2VuZGlmCisjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQorCWlmIChTTEpJVF9VTkxJS0VMWSghIWNvbXBpbGVyLT52ZXJib3NlKSkgeworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBvcF9jdXN0b20iKTsKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgMHgleCIsICgoc2xqaXRfdWIqKWluc3RydWN0aW9uKVtpXSk7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICJcbiIpOworCX0KKyNlbmRpZgorCUNIRUNLX1JFVFVSTl9PSzsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9lbWl0X2ZvcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlpZiAoU0xKSVRfVU5MSUtFTFkoY29tcGlsZXItPnNraXBfY2hlY2tzKSkgeworCQljb21waWxlci0+c2tpcF9jaGVja3MgPSAwOworCQlDSEVDS19SRVRVUk5fT0s7CisJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlDSEVDS19BUkdVTUVOVChzbGppdF9pc19mcHVfYXZhaWxhYmxlKCkpOworCUNIRUNLX0FSR1VNRU5UKEdFVF9PUENPREUob3ApID49IFNMSklUX0RNT1YgJiYgR0VUX09QQ09ERShvcCkgPD0gU0xKSVRfREFCUyk7CisJRlVOQ1RJT05fQ0hFQ0tfRk9QKCk7CisJRlVOQ1RJT05fRkNIRUNLKHNyYywgc3Jjdyk7CisJRlVOQ1RJT05fRkNIRUNLKGRzdCwgZHN0dyk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKSB7CisJCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WRF9GUk9NUykKKwkJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgICVzJXMgIiwgZm9wMV9uYW1lc1tTTEpJVF9DT05WRF9GUk9NUyAtIFNMSklUX0ZPUDFfQkFTRV0sCisJCQkJKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/ICJzLmZyb21kIiA6ICJkLmZyb21zIik7CisJCWVsc2UKKwkJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgICVzJXMgIiwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/ICJzIiA6ICJkIiwKKwkJCQlmb3AxX25hbWVzW0dFVF9PUENPREUob3ApIC0gU0xKSVRfRk9QMV9CQVNFXSk7CisKKwkJc2xqaXRfdmVyYm9zZV9mcGFyYW0oY29tcGlsZXIsIGRzdCwgZHN0dyk7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICIpOworCQlzbGppdF92ZXJib3NlX2ZwYXJhbShjb21waWxlciwgc3JjLCBzcmN3KTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIlxuIik7CisJfQorI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfZm9wMV9jbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5za2lwX2NoZWNrcykpIHsKKwkJY29tcGlsZXItPnNraXBfY2hlY2tzID0gMDsKKwkJQ0hFQ0tfUkVUVVJOX09LOworCX0KKworI2lmIChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCisJQ0hFQ0tfQVJHVU1FTlQoc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSgpKTsKKwlDSEVDS19BUkdVTUVOVChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9EQ01QKTsKKwlGVU5DVElPTl9DSEVDS19GT1AoKTsKKwlGVU5DVElPTl9GQ0hFQ0soc3JjMSwgc3JjMXcpOworCUZVTkNUSU9OX0ZDSEVDSyhzcmMyLCBzcmMydyk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKSB7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgICVzJXMlcyVzICIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyAicyIgOiAiZCIsIGZvcDFfbmFtZXNbU0xKSVRfRENNUCAtIFNMSklUX0ZPUDFfQkFTRV0sCisJCQkob3AgJiBTTEpJVF9TRVRfRSkgPyAiLmUiIDogIiIsIChvcCAmIFNMSklUX1NFVF9TKSA/ICIucyIgOiAiIik7CisJCXNsaml0X3ZlcmJvc2VfZnBhcmFtKGNvbXBpbGVyLCBzcmMxLCBzcmMxdyk7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICIpOworCQlzbGppdF92ZXJib3NlX2ZwYXJhbShjb21waWxlciwgc3JjMiwgc3JjMncpOworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiXG4iKTsKKwl9CisjZW5kaWYKKwlDSEVDS19SRVRVUk5fT0s7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9mb3AxX2NvbnZ3X2Zyb21kKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5za2lwX2NoZWNrcykpIHsKKwkJY29tcGlsZXItPnNraXBfY2hlY2tzID0gMDsKKwkJQ0hFQ0tfUkVUVVJOX09LOworCX0KKworI2lmIChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCisJQ0hFQ0tfQVJHVU1FTlQoc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSgpKTsKKwlDSEVDS19BUkdVTUVOVChHRVRfT1BDT0RFKG9wKSA+PSBTTEpJVF9DT05WV19GUk9NRCAmJiBHRVRfT1BDT0RFKG9wKSA8PSBTTEpJVF9DT05WSV9GUk9NRCk7CisJRlVOQ1RJT05fQ0hFQ0tfRk9QKCk7CisJRlVOQ1RJT05fRkNIRUNLKHNyYywgc3Jjdyk7CisJRlVOQ1RJT05fQ0hFQ0tfRFNUKGRzdCwgZHN0dyk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKSB7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgICVzJXMuZnJvbSVzICIsIGZvcDFfbmFtZXNbR0VUX09QQ09ERShvcCkgLSBTTEpJVF9GT1AxX0JBU0VdLAorCQkJKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZJX0ZST01EKSA/ICJpIiA6ICJ3IiwKKwkJCShvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyAicyIgOiAiZCIpOworCQlzbGppdF92ZXJib3NlX3BhcmFtKGNvbXBpbGVyLCBkc3QsIGRzdHcpOworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiLCAiKTsKKwkJc2xqaXRfdmVyYm9zZV9mcGFyYW0oY29tcGlsZXIsIHNyYywgc3Jjdyk7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICJcbiIpOworCX0KKyNlbmRpZgorCUNIRUNLX1JFVFVSTl9PSzsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBDSEVDS19SRVRVUk5fVFlQRSBjaGVja19zbGppdF9lbWl0X2ZvcDFfY29udmRfZnJvbXcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlpZiAoU0xKSVRfVU5MSUtFTFkoY29tcGlsZXItPnNraXBfY2hlY2tzKSkgeworCQljb21waWxlci0+c2tpcF9jaGVja3MgPSAwOworCQlDSEVDS19SRVRVUk5fT0s7CisJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlDSEVDS19BUkdVTUVOVChzbGppdF9pc19mcHVfYXZhaWxhYmxlKCkpOworCUNIRUNLX0FSR1VNRU5UKEdFVF9PUENPREUob3ApID49IFNMSklUX0NPTlZEX0ZST01XICYmIEdFVF9PUENPREUob3ApIDw9IFNMSklUX0NPTlZEX0ZST01JKTsKKwlGVU5DVElPTl9DSEVDS19GT1AoKTsKKwlGVU5DVElPTl9DSEVDS19TUkMoc3JjLCBzcmN3KTsKKwlGVU5DVElPTl9GQ0hFQ0soZHN0LCBkc3R3KTsKKyNlbmRpZgorI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKKwlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpIHsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgJXMlcy5mcm9tJXMgIiwgZm9wMV9uYW1lc1tHRVRfT1BDT0RFKG9wKSAtIFNMSklUX0ZPUDFfQkFTRV0sCisJCQkob3AgJiBTTEpJVF9TSU5HTEVfT1ApID8gInMiIDogImQiLAorCQkJKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01JKSA/ICJpIiA6ICJ3Iik7CisJCXNsaml0X3ZlcmJvc2VfZnBhcmFtKGNvbXBpbGVyLCBkc3QsIGRzdHcpOworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiLCAiKTsKKwkJc2xqaXRfdmVyYm9zZV9wYXJhbShjb21waWxlciwgc3JjLCBzcmN3KTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIlxuIik7CisJfQorI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlDSEVDS19BUkdVTUVOVChzbGppdF9pc19mcHVfYXZhaWxhYmxlKCkpOworCUNIRUNLX0FSR1VNRU5UKEdFVF9PUENPREUob3ApID49IFNMSklUX0RBREQgJiYgR0VUX09QQ09ERShvcCkgPD0gU0xKSVRfRERJVik7CisJRlVOQ1RJT05fQ0hFQ0tfRk9QKCk7CisJRlVOQ1RJT05fRkNIRUNLKHNyYzEsIHNyYzF3KTsKKwlGVU5DVElPTl9GQ0hFQ0soc3JjMiwgc3JjMncpOworCUZVTkNUSU9OX0ZDSEVDSyhkc3QsIGRzdHcpOworI2VuZGlmCisjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQorCWlmIChTTEpJVF9VTkxJS0VMWSghIWNvbXBpbGVyLT52ZXJib3NlKSkgeworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICAlcyVzICIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyAicyIgOiAiZCIsIGZvcDJfbmFtZXNbR0VUX09QQ09ERShvcCkgLSBTTEpJVF9GT1AyX0JBU0VdKTsKKwkJc2xqaXRfdmVyYm9zZV9mcGFyYW0oY29tcGlsZXIsIGRzdCwgZHN0dyk7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIsICIpOworCQlzbGppdF92ZXJib3NlX2ZwYXJhbShjb21waWxlciwgc3JjMSwgc3JjMXcpOworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiLCAiKTsKKwkJc2xqaXRfdmVyYm9zZV9mcGFyYW0oY29tcGlsZXIsIHNyYzIsIHNyYzJ3KTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIlxuIik7CisJfQorI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfbGFiZWwoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKK3sKKwlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKKworI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKKwlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpCisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICJsYWJlbDpcbiIpOworI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlKQoreworCWlmIChTTEpJVF9VTkxJS0VMWShjb21waWxlci0+c2tpcF9jaGVja3MpKSB7CisJCWNvbXBpbGVyLT5za2lwX2NoZWNrcyA9IDA7CisJCUNIRUNLX1JFVFVSTl9PSzsKKwl9CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCUNIRUNLX0FSR1VNRU5UKCEodHlwZSAmIH4oMHhmZiB8IFNMSklUX1JFV1JJVEFCTEVfSlVNUCB8IFNMSklUX0lOVF9PUCkpKTsKKwlDSEVDS19BUkdVTUVOVCgodHlwZSAmIDB4ZmYpID49IFNMSklUX0VRVUFMICYmICh0eXBlICYgMHhmZikgPD0gU0xKSVRfQ0FMTDMpOworCUNIRUNLX0FSR1VNRU5UKCh0eXBlICYgMHhmZikgPCBTTEpJVF9KVU1QIHx8ICEodHlwZSAmIFNMSklUX0lOVF9PUCkpOworCUNIRUNLX0FSR1VNRU5UKCh0eXBlICYgMHhmZikgPD0gU0xKSVRfQ0FMTDAgfHwgKCh0eXBlICYgMHhmZikgLSBTTEpJVF9DQUxMMCkgPD0gY29tcGlsZXItPnNjcmF0Y2hlcyk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKQorCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBqdW1wJXMuJXMlc1xuIiwgISh0eXBlICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKSA/ICIiIDogIi5yIiwKKwkJCUpVTVBfUFJFRklYKHR5cGUpLCBqdW1wX25hbWVzW3R5cGUgJiAweGZmXSk7CisjZW5kaWYKKwlDSEVDS19SRVRVUk5fT0s7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZW1pdF9jbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCUNIRUNLX0FSR1VNRU5UKCEodHlwZSAmIH4oMHhmZiB8IFNMSklUX1JFV1JJVEFCTEVfSlVNUCB8IFNMSklUX0lOVF9PUCkpKTsKKwlDSEVDS19BUkdVTUVOVCgodHlwZSAmIDB4ZmYpID49IFNMSklUX0VRVUFMICYmICh0eXBlICYgMHhmZikgPD0gU0xKSVRfU0lHX0xFU1NfRVFVQUwpOworCUZVTkNUSU9OX0NIRUNLX1NSQyhzcmMxLCBzcmMxdyk7CisJRlVOQ1RJT05fQ0hFQ0tfU1JDKHNyYzIsIHNyYzJ3KTsKKyNlbmRpZgorI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKKwlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpIHsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgY21wJXMuJXMlcyAiLCAhKHR5cGUgJiBTTEpJVF9SRVdSSVRBQkxFX0pVTVApID8gIiIgOiAiLnIiLAorCQkJKHR5cGUgJiBTTEpJVF9JTlRfT1ApID8gImlfIiA6ICIiLCBqdW1wX25hbWVzW3R5cGUgJiAweGZmXSk7CisJCXNsaml0X3ZlcmJvc2VfcGFyYW0oY29tcGlsZXIsIHNyYzEsIHNyYzF3KTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiwgIik7CisJCXNsaml0X3ZlcmJvc2VfcGFyYW0oY29tcGlsZXIsIHNyYzIsIHNyYzJ3KTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIlxuIik7CisJfQorI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfZmNtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQoreworI2lmIChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCisJQ0hFQ0tfQVJHVU1FTlQoc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSgpKTsKKwlDSEVDS19BUkdVTUVOVCghKHR5cGUgJiB+KDB4ZmYgfCBTTEpJVF9SRVdSSVRBQkxFX0pVTVAgfCBTTEpJVF9TSU5HTEVfT1ApKSk7CisJQ0hFQ0tfQVJHVU1FTlQoKHR5cGUgJiAweGZmKSA+PSBTTEpJVF9EX0VRVUFMICYmICh0eXBlICYgMHhmZikgPD0gU0xKSVRfRF9PUkRFUkVEKTsKKwlGVU5DVElPTl9GQ0hFQ0soc3JjMSwgc3JjMXcpOworCUZVTkNUSU9OX0ZDSEVDSyhzcmMyLCBzcmMydyk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKSB7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgIGZjbXAlcy4lcyVzICIsICEodHlwZSAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCkgPyAiIiA6ICIuciIsCisJCQkodHlwZSAmIFNMSklUX1NJTkdMRV9PUCkgPyAic18iIDogImRfIiwganVtcF9uYW1lc1t0eXBlICYgMHhmZl0pOworCQlzbGppdF92ZXJib3NlX2ZwYXJhbShjb21waWxlciwgc3JjMSwgc3JjMXcpOworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiLCAiKTsKKwkJc2xqaXRfdmVyYm9zZV9mcGFyYW0oY29tcGlsZXIsIHNyYzIsIHNyYzJ3KTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIlxuIik7CisJfQorI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCWlmIChTTEpJVF9VTkxJS0VMWShjb21waWxlci0+c2tpcF9jaGVja3MpKSB7CisJCWNvbXBpbGVyLT5za2lwX2NoZWNrcyA9IDA7CisJCUNIRUNLX1JFVFVSTl9PSzsKKwl9CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCUNIRUNLX0FSR1VNRU5UKHR5cGUgPj0gU0xKSVRfSlVNUCAmJiB0eXBlIDw9IFNMSklUX0NBTEwzKTsKKwlDSEVDS19BUkdVTUVOVCh0eXBlIDw9IFNMSklUX0NBTEwwIHx8ICh0eXBlIC0gU0xKSVRfQ0FMTDApIDw9IGNvbXBpbGVyLT5zY3JhdGNoZXMpOworCUZVTkNUSU9OX0NIRUNLX1NSQyhzcmMsIHNyY3cpOworI2VuZGlmCisjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQorCWlmIChTTEpJVF9VTkxJS0VMWSghIWNvbXBpbGVyLT52ZXJib3NlKSkgeworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBpanVtcC4lcyAiLCBqdW1wX25hbWVzW3R5cGVdKTsKKwkJc2xqaXRfdmVyYm9zZV9wYXJhbShjb21waWxlciwgc3JjLCBzcmN3KTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIlxuIik7CisJfQorI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdywKKwlzbGppdF9zaSB0eXBlKQoreworI2lmIChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCisJQ0hFQ0tfQVJHVU1FTlQoISh0eXBlICYgfigweGZmIHwgU0xKSVRfSU5UX09QKSkpOworCUNIRUNLX0FSR1VNRU5UKCh0eXBlICYgMHhmZikgPj0gU0xKSVRfRVFVQUwgJiYgKHR5cGUgJiAweGZmKSA8PSBTTEpJVF9EX09SREVSRUQpOworCUNIRUNLX0FSR1VNRU5UKG9wID09IFNMSklUX01PViB8fCBHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9NT1ZfVUkgfHwgR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfTU9WX1NJCisJCXx8IChHRVRfT1BDT0RFKG9wKSA+PSBTTEpJVF9BTkQgJiYgR0VUX09QQ09ERShvcCkgPD0gU0xKSVRfWE9SKSk7CisJQ0hFQ0tfQVJHVU1FTlQoKG9wICYgKFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX1MgfCBTTEpJVF9TRVRfTyB8IFNMSklUX1NFVF9DKSkgPT0gMCk7CisJQ0hFQ0tfQVJHVU1FTlQoKG9wICYgKFNMSklUX1NFVF9FIHwgU0xKSVRfS0VFUF9GTEFHUykpICE9IChTTEpJVF9TRVRfRSB8IFNMSklUX0tFRVBfRkxBR1MpKTsKKwlpZiAoR0VUX09QQ09ERShvcCkgPCBTTEpJVF9BREQpIHsKKwkJQ0hFQ0tfQVJHVU1FTlQoc3JjID09IFNMSklUX1VOVVNFRCAmJiBzcmN3ID09IDApOworCX0gZWxzZSB7CisJCUNIRUNLX0FSR1VNRU5UKHNyYyA9PSBkc3QgJiYgc3JjdyA9PSBkc3R3KTsKKwl9CisJRlVOQ1RJT05fQ0hFQ0tfRFNUKGRzdCwgZHN0dyk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKSB7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgIGZsYWdzLiVzJXMlcyVzICIsICEob3AgJiBTTEpJVF9JTlRfT1ApID8gIiIgOiAiaSIsCisJCQlHRVRfT1BDT0RFKG9wKSA+PSBTTEpJVF9PUDJfQkFTRSA/IG9wMl9uYW1lc1tHRVRfT1BDT0RFKG9wKSAtIFNMSklUX09QMl9CQVNFXSA6IG9wMV9uYW1lc1tHRVRfT1BDT0RFKG9wKSAtIFNMSklUX09QMV9CQVNFXSwKKwkJCSEob3AgJiBTTEpJVF9TRVRfRSkgPyAiIiA6ICIuZSIsICEob3AgJiBTTEpJVF9LRUVQX0ZMQUdTKSA/ICIiIDogIi5rIik7CisJCXNsaml0X3ZlcmJvc2VfcGFyYW0oY29tcGlsZXIsIGRzdCwgZHN0dyk7CisJCWlmIChzcmMgIT0gU0xKSVRfVU5VU0VEKSB7CisJCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiLCAiKTsKKwkJCXNsaml0X3ZlcmJvc2VfcGFyYW0oY29tcGlsZXIsIHNyYywgc3Jjdyk7CisJCX0KKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiwgJXMlc1xuIiwgSlVNUF9QUkVGSVgodHlwZSksIGp1bXBfbmFtZXNbdHlwZSAmIDB4ZmZdKTsKKwl9CisjZW5kaWYKKwlDSEVDS19SRVRVUk5fT0s7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgQ0hFQ0tfUkVUVVJOX1RZUEUgY2hlY2tfc2xqaXRfZ2V0X2xvY2FsX2Jhc2Uoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBvZmZzZXQpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhvZmZzZXQpOworCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwlGVU5DVElPTl9DSEVDS19EU1QoZHN0LCBkc3R3KTsKKyNlbmRpZgorI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKKwlpZiAoU0xKSVRfVU5MSUtFTFkoISFjb21waWxlci0+dmVyYm9zZSkpIHsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiAgbG9jYWxfYmFzZSAiKTsKKwkJc2xqaXRfdmVyYm9zZV9wYXJhbShjb21waWxlciwgZHN0LCBkc3R3KTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiwgIyUiIFNMSklUX1BSSU5UX0QgImRcbiIsIG9mZnNldCk7CisJfQorI2VuZGlmCisJQ0hFQ0tfUkVUVVJOX09LOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIENIRUNLX1JFVFVSTl9UWVBFIGNoZWNrX3Nsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBpbml0X3ZhbHVlKQoreworCVNMSklUX1VOVVNFRF9BUkcoaW5pdF92YWx1ZSk7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCUZVTkNUSU9OX0NIRUNLX0RTVChkc3QsIGRzdHcpOworI2VuZGlmCisjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQorCWlmIChTTEpJVF9VTkxJS0VMWSghIWNvbXBpbGVyLT52ZXJib3NlKSkgeworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiICBjb25zdCAiKTsKKwkJc2xqaXRfdmVyYm9zZV9wYXJhbShjb21waWxlciwgZHN0LCBkc3R3KTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIiwgIyUiIFNMSklUX1BSSU5UX0QgImRcbiIsIGluaXRfdmFsdWUpOworCX0KKyNlbmRpZgorCUNIRUNLX1JFVFVSTl9PSzsKK30KKworI2VuZGlmIC8qIFNMSklUX0FSR1VNRU5UX0NIRUNLUyB8fCBTTEpJVF9WRVJCT1NFICovCisKKyNkZWZpbmUgU0VMRUNUX0ZPUDFfT1BFUkFUSU9OX1dJVEhfQ0hFQ0tTKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpIFwKKwlTTEpJVF9DT01QSUxFX0FTU0VSVCghKFNMSklUX0NPTlZXX0ZST01EICYgMHgxKSAmJiAhKFNMSklUX0NPTlZEX0ZST01XICYgMHgxKSwgXAorCQlpbnZhbGlkX2Zsb2F0X29wY29kZXMpOyBcCisJaWYgKEdFVF9PUENPREUob3ApID49IFNMSklUX0NPTlZXX0ZST01EICYmIEdFVF9PUENPREUob3ApIDw9IFNMSklUX0RDTVApIHsgXAorCQlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfRENNUCkgeyBcCisJCQlDSEVDSyhjaGVja19zbGppdF9lbWl0X2ZvcDFfY21wKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsgXAorCQkJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOyBcCisJCQlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7IFwKKwkJCXJldHVybiBzbGppdF9lbWl0X2ZvcDFfY21wKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpOyBcCisJCX0gXAorCQlpZiAoKEdFVF9PUENPREUob3ApIHwgMHgxKSA9PSBTTEpJVF9DT05WSV9GUk9NRCkgeyBcCisJCQlDSEVDSyhjaGVja19zbGppdF9lbWl0X2ZvcDFfY29udndfZnJvbWQoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOyBcCisJCQlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7IFwKKwkJCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsgXAorCQkJcmV0dXJuIHNsaml0X2VtaXRfZm9wMV9jb252d19mcm9tZChjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KTsgXAorCQl9IFwKKwkJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mb3AxX2NvbnZkX2Zyb213KGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsgXAorCQlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7IFwKKwkJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOyBcCisJCXJldHVybiBzbGppdF9lbWl0X2ZvcDFfY29udmRfZnJvbXcoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3Jjdyk7IFwKKwl9IFwKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2ZvcDEoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOyBcCisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOyBcCisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOworCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfbW92X2JlZm9yZV9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwkvKiBSZXR1cm4gaWYgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4gKi8KKwlpZiAob3AgPT0gU0xKSVRfVU5VU0VEKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworI2lmIChkZWZpbmVkIFNMSklUXzY0QklUX0FSQ0hJVEVDVFVSRSAmJiBTTEpJVF82NEJJVF9BUkNISVRFQ1RVUkUpCisJLyogQXQgdGhlIG1vbWVudCB0aGUgcG9pbnRlciBzaXplIGlzIGFsd2F5cyBlcXVhbCB0byBzbGppdF9zdy4gTWF5IGJlIGNoYW5nZWQgaW4gdGhlIGZ1dHVyZS4gKi8KKwlpZiAoc3JjID09IFNMSklUX1JFVFVSTl9SRUcgJiYgKG9wID09IFNMSklUX01PViB8fCBvcCA9PSBTTEpJVF9NT1ZfUCkpCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworI2Vsc2UKKwlpZiAoc3JjID09IFNMSklUX1JFVFVSTl9SRUcgJiYgKG9wID09IFNMSklUX01PViB8fCBvcCA9PSBTTEpJVF9NT1ZfVUkgfHwgb3AgPT0gU0xKSVRfTU9WX1NJIHx8IG9wID09IFNMSklUX01PVl9QKSkKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpIFwKKwkJfHwgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKQorCWNvbXBpbGVyLT5za2lwX2NoZWNrcyA9IDE7CisjZW5kaWYKKwlyZXR1cm4gc2xqaXRfZW1pdF9vcDEoY29tcGlsZXIsIG9wLCBTTEpJVF9SRVRVUk5fUkVHLCAwLCBzcmMsIHNyY3cpOworfQorCisvKiBDUFUgZGVzY3JpcHRpb24gc2VjdGlvbiAqLworCisjaWYgKGRlZmluZWQgU0xKSVRfMzJCSVRfQVJDSElURUNUVVJFICYmIFNMSklUXzMyQklUX0FSQ0hJVEVDVFVSRSkKKyNkZWZpbmUgU0xKSVRfQ1BVSU5GT19QQVJUMSAiIDMyYml0ICgiCisjZWxpZiAoZGVmaW5lZCBTTEpJVF82NEJJVF9BUkNISVRFQ1RVUkUgJiYgU0xKSVRfNjRCSVRfQVJDSElURUNUVVJFKQorI2RlZmluZSBTTEpJVF9DUFVJTkZPX1BBUlQxICIgNjRiaXQgKCIKKyNlbHNlCisjZXJyb3IgIkludGVybmFsIGVycm9yOiBDUFUgdHlwZSBpbmZvIG1pc3NpbmciCisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX0xJVFRMRV9FTkRJQU4gJiYgU0xKSVRfTElUVExFX0VORElBTikKKyNkZWZpbmUgU0xKSVRfQ1BVSU5GT19QQVJUMiAibGl0dGxlIGVuZGlhbiArICIKKyNlbGlmIChkZWZpbmVkIFNMSklUX0JJR19FTkRJQU4gJiYgU0xKSVRfQklHX0VORElBTikKKyNkZWZpbmUgU0xKSVRfQ1BVSU5GT19QQVJUMiAiYmlnIGVuZGlhbiArICIKKyNlbHNlCisjZXJyb3IgIkludGVybmFsIGVycm9yOiBDUFUgdHlwZSBpbmZvIG1pc3NpbmciCisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX1VOQUxJR05FRCAmJiBTTEpJVF9VTkFMSUdORUQpCisjZGVmaW5lIFNMSklUX0NQVUlORk9fUEFSVDMgInVuYWxpZ25lZCkiCisjZWxzZQorI2RlZmluZSBTTEpJVF9DUFVJTkZPX1BBUlQzICJhbGlnbmVkKSIKKyNlbmRpZgorCisjZGVmaW5lIFNMSklUX0NQVUlORk8gU0xKSVRfQ1BVSU5GT19QQVJUMSBTTEpJVF9DUFVJTkZPX1BBUlQyIFNMSklUX0NQVUlORk9fUEFSVDMKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODYgJiYgU0xKSVRfQ09ORklHX1g4NikKKyMJaW5jbHVkZSAic2xqaXROYXRpdmVYODZfY29tbW9uLmMiCisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCisjCWluY2x1ZGUgInNsaml0TmF0aXZlQVJNXzMyLmMiCisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y3ICYmIFNMSklUX0NPTkZJR19BUk1fVjcpCisjCWluY2x1ZGUgInNsaml0TmF0aXZlQVJNXzMyLmMiCisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1RIVU1CMiAmJiBTTEpJVF9DT05GSUdfQVJNX1RIVU1CMikKKyMJaW5jbHVkZSAic2xqaXROYXRpdmVBUk1fVDJfMzIuYyIKKyNlbGlmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fNjQgJiYgU0xKSVRfQ09ORklHX0FSTV82NCkKKyMJaW5jbHVkZSAic2xqaXROYXRpdmVBUk1fNjQuYyIKKyNlbGlmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUEMgJiYgU0xKSVRfQ09ORklHX1BQQykKKyMJaW5jbHVkZSAic2xqaXROYXRpdmVQUENfY29tbW9uLmMiCisjZWxpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQUyAmJiBTTEpJVF9DT05GSUdfTUlQUykKKyMJaW5jbHVkZSAic2xqaXROYXRpdmVNSVBTX2NvbW1vbi5jIgorI2VsaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1NQQVJDICYmIFNMSklUX0NPTkZJR19TUEFSQykKKyMJaW5jbHVkZSAic2xqaXROYXRpdmVTUEFSQ19jb21tb24uYyIKKyNlbGlmIChkZWZpbmVkIFNMSklUX0NPTkZJR19USUxFR1ggJiYgU0xKSVRfQ09ORklHX1RJTEVHWCkKKyMJaW5jbHVkZSAic2xqaXROYXRpdmVUSUxFR1hfNjQuYyIKKyNlbmRpZgorCisjaWYgIShkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTICYmIFNMSklUX0NPTkZJR19NSVBTKQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJLyogRGVmYXVsdCBjb21wYXJlIGZvciBtb3N0IGFyY2hpdGVjdHVyZXMuICovCisJc2xqaXRfc2kgZmxhZ3MsIHRtcF9zcmMsIGNvbmRpdGlvbjsKKwlzbGppdF9zdyB0bXBfc3JjdzsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2NtcChjb21waWxlciwgdHlwZSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisKKwljb25kaXRpb24gPSB0eXBlICYgMHhmZjsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNXzY0ICYmIFNMSklUX0NPTkZJR19BUk1fNjQpCisJaWYgKChjb25kaXRpb24gPT0gU0xKSVRfRVFVQUwgfHwgY29uZGl0aW9uID09IFNMSklUX05PVF9FUVVBTCkpIHsKKwkJaWYgKChzcmMxICYgU0xKSVRfSU1NKSAmJiAhc3JjMXcpIHsKKwkJCXNyYzEgPSBzcmMyOworCQkJc3JjMXcgPSBzcmMydzsKKwkJCXNyYzIgPSBTTEpJVF9JTU07CisJCQlzcmMydyA9IDA7CisJCX0KKwkJaWYgKChzcmMyICYgU0xKSVRfSU1NKSAmJiAhc3JjMncpCisJCQlyZXR1cm4gZW1pdF9jbXBfdG8wKGNvbXBpbGVyLCB0eXBlLCBzcmMxLCBzcmMxdyk7CisJfQorI2VuZGlmCisKKwlpZiAoU0xKSVRfVU5MSUtFTFkoKHNyYzEgJiBTTEpJVF9JTU0pICYmICEoc3JjMiAmIFNMSklUX0lNTSkpKSB7CisJCS8qIEltbWVkaWF0ZSBpcyBwcmVmZXJlZCBhcyBzZWNvbmQgYXJndW1lbnQgYnkgbW9zdCBhcmNoaXRlY3R1cmVzLiAqLworCQlzd2l0Y2ggKGNvbmRpdGlvbikgeworCQljYXNlIFNMSklUX0xFU1M6CisJCQljb25kaXRpb24gPSBTTEpJVF9HUkVBVEVSOworCQkJYnJlYWs7CisJCWNhc2UgU0xKSVRfR1JFQVRFUl9FUVVBTDoKKwkJCWNvbmRpdGlvbiA9IFNMSklUX0xFU1NfRVFVQUw7CisJCQlicmVhazsKKwkJY2FzZSBTTEpJVF9HUkVBVEVSOgorCQkJY29uZGl0aW9uID0gU0xKSVRfTEVTUzsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX0xFU1NfRVFVQUw6CisJCQljb25kaXRpb24gPSBTTEpJVF9HUkVBVEVSX0VRVUFMOworCQkJYnJlYWs7CisJCWNhc2UgU0xKSVRfU0lHX0xFU1M6CisJCQljb25kaXRpb24gPSBTTEpJVF9TSUdfR1JFQVRFUjsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX1NJR19HUkVBVEVSX0VRVUFMOgorCQkJY29uZGl0aW9uID0gU0xKSVRfU0lHX0xFU1NfRVFVQUw7CisJCQlicmVhazsKKwkJY2FzZSBTTEpJVF9TSUdfR1JFQVRFUjoKKwkJCWNvbmRpdGlvbiA9IFNMSklUX1NJR19MRVNTOworCQkJYnJlYWs7CisJCWNhc2UgU0xKSVRfU0lHX0xFU1NfRVFVQUw6CisJCQljb25kaXRpb24gPSBTTEpJVF9TSUdfR1JFQVRFUl9FUVVBTDsKKwkJCWJyZWFrOworCQl9CisJCXR5cGUgPSBjb25kaXRpb24gfCAodHlwZSAmIChTTEpJVF9JTlRfT1AgfCBTTEpJVF9SRVdSSVRBQkxFX0pVTVApKTsKKwkJdG1wX3NyYyA9IHNyYzE7CisJCXNyYzEgPSBzcmMyOworCQlzcmMyID0gdG1wX3NyYzsKKwkJdG1wX3NyY3cgPSBzcmMxdzsKKwkJc3JjMXcgPSBzcmMydzsKKwkJc3JjMncgPSB0bXBfc3JjdzsKKwl9CisKKwlpZiAoY29uZGl0aW9uIDw9IFNMSklUX05PVF9aRVJPKQorCQlmbGFncyA9IFNMSklUX1NFVF9FOworCWVsc2UgaWYgKGNvbmRpdGlvbiA8PSBTTEpJVF9MRVNTX0VRVUFMKQorCQlmbGFncyA9IFNMSklUX1NFVF9VOworCWVsc2UKKwkJZmxhZ3MgPSBTTEpJVF9TRVRfUzsKKworI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkgXAorCQl8fCAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCWNvbXBpbGVyLT5za2lwX2NoZWNrcyA9IDE7CisjZW5kaWYKKwlQVFJfRkFJTF9JRihzbGppdF9lbWl0X29wMihjb21waWxlciwgU0xKSVRfU1VCIHwgZmxhZ3MgfCAodHlwZSAmIFNMSklUX0lOVF9PUCksCisJCVNMSklUX1VOVVNFRCwgMCwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKSBcCisJCXx8IChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCisJY29tcGlsZXItPnNraXBfY2hlY2tzID0gMTsKKyNlbmRpZgorCXJldHVybiBzbGppdF9lbWl0X2p1bXAoY29tcGlsZXIsIGNvbmRpdGlvbiB8ICh0eXBlICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKSk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfanVtcCogc2xqaXRfZW1pdF9mY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJc2xqaXRfc2kgZmxhZ3MsIGNvbmRpdGlvbjsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2ZjbXAoY29tcGlsZXIsIHR5cGUsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCisJY29uZGl0aW9uID0gdHlwZSAmIDB4ZmY7CisJZmxhZ3MgPSAoY29uZGl0aW9uIDw9IFNMSklUX0RfTk9UX0VRVUFMKSA/IFNMSklUX1NFVF9FIDogU0xKSVRfU0VUX1M7CisJaWYgKHR5cGUgJiBTTEpJVF9TSU5HTEVfT1ApCisJCWZsYWdzIHw9IFNMSklUX1NJTkdMRV9PUDsKKworI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkgXAorCQl8fCAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCWNvbXBpbGVyLT5za2lwX2NoZWNrcyA9IDE7CisjZW5kaWYKKwlzbGppdF9lbWl0X2ZvcDEoY29tcGlsZXIsIFNMSklUX0RDTVAgfCBmbGFncywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKworI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkgXAorCQl8fCAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCWNvbXBpbGVyLT5za2lwX2NoZWNrcyA9IDE7CisjZW5kaWYKKwlyZXR1cm4gc2xqaXRfZW1pdF9qdW1wKGNvbXBpbGVyLCBjb25kaXRpb24gfCAodHlwZSAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCkpOworfQorCisjZW5kaWYKKworI2lmICEoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2ICYmIFNMSklUX0NPTkZJR19YODYpCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfbG9jYWxfYmFzZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IG9mZnNldCkKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2dldF9sb2NhbF9iYXNlKGNvbXBpbGVyLCBkc3QsIGRzdHcsIG9mZnNldCkpOworCisJQURKVVNUX0xPQ0FMX09GRlNFVChTTEpJVF9NRU0xKFNMSklUX1NQKSwgb2Zmc2V0KTsKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpIFwKKwkJfHwgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwljb21waWxlci0+c2tpcF9jaGVja3MgPSAxOworI2VuZGlmCisJaWYgKG9mZnNldCAhPSAwKQorCQlyZXR1cm4gc2xqaXRfZW1pdF9vcDIoY29tcGlsZXIsIFNMSklUX0FERCB8IFNMSklUX0tFRVBfRkxBR1MsIGRzdCwgZHN0dywgU0xKSVRfU1AsIDAsIFNMSklUX0lNTSwgb2Zmc2V0KTsKKwlyZXR1cm4gc2xqaXRfZW1pdF9vcDEoY29tcGlsZXIsIFNMSklUX01PViwgZHN0LCBkc3R3LCBTTEpJVF9TUCwgMCk7Cit9CisKKyNlbmRpZgorCisjZWxzZSAvKiBTTEpJVF9DT05GSUdfVU5TVVBQT1JURUQgKi8KKworLyogRW1wdHkgZnVuY3Rpb24gYm9kaWVzIGZvciB0aG9zZSBtYWNoaW5lcywgd2hpY2ggYXJlIG5vdCAoeWV0KSBzdXBwb3J0ZWQuICovCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBTTEpJVF9DT05TVCBjaGFyKiBzbGppdF9nZXRfcGxhdGZvcm1fbmFtZSh2b2lkKQoreworCXJldHVybiAidW5zdXBwb3J0ZWQiOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbXBpbGVyKiBzbGppdF9jcmVhdGVfY29tcGlsZXIodm9pZCkKK3sKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBOVUxMOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9mcmVlX2NvbXBpbGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQqIHNsaml0X2FsbG9jX21lbW9yeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzaXplKQoreworCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOworCVNMSklUX1VOVVNFRF9BUkcoc2l6ZSk7CisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X2NvbXBpbGVyX3ZlcmJvc2Uoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgRklMRSogdmVyYm9zZSkKK3sKKwlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKKwlTTEpJVF9VTlVTRURfQVJHKHZlcmJvc2UpOworCVNMSklUX0FTU0VSVF9TVE9QKCk7Cit9CisjZW5kaWYKKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQqIHNsaml0X2dlbmVyYXRlX2NvZGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKK3sKKwlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBOVUxMOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9mcmVlX2NvZGUodm9pZCogY29kZSkKK3sKKwlTTEpJVF9VTlVTRURfQVJHKGNvZGUpOworCVNMSklUX0FTU0VSVF9TVE9QKCk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCisJc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKK3sKKwlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKKwlTTEpJVF9VTlVTRURfQVJHKG9wdGlvbnMpOworCVNMSklUX1VOVVNFRF9BUkcoYXJncyk7CisJU0xKSVRfVU5VU0VEX0FSRyhzY3JhdGNoZXMpOworCVNMSklUX1VOVVNFRF9BUkcoc2F2ZWRzKTsKKwlTTEpJVF9VTlVTRURfQVJHKGZzY3JhdGNoZXMpOworCVNMSklUX1VOVVNFRF9BUkcoZnNhdmVkcyk7CisJU0xKSVRfVU5VU0VEX0FSRyhsb2NhbF9zaXplKTsKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAorCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CisJU0xKSVRfVU5VU0VEX0FSRyhvcHRpb25zKTsKKwlTTEpJVF9VTlVTRURfQVJHKGFyZ3MpOworCVNMSklUX1VOVVNFRF9BUkcoc2NyYXRjaGVzKTsKKwlTTEpJVF9VTlVTRURfQVJHKHNhdmVkcyk7CisJU0xKSVRfVU5VU0VEX0FSRyhmc2NyYXRjaGVzKTsKKwlTTEpJVF9VTlVTRURfQVJHKGZzYXZlZHMpOworCVNMSklUX1VOVVNFRF9BUkcobG9jYWxfc2l6ZSk7CisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwlyZXR1cm4gU0xKSVRfRVJSX1VOU1VQUE9SVEVEOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKKwlTTEpJVF9VTlVTRURfQVJHKG9wKTsKKwlTTEpJVF9VTlVTRURfQVJHKHNyYyk7CisJU0xKSVRfVU5VU0VEX0FSRyhzcmN3KTsKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3KQoreworCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOworCVNMSklUX1VOVVNFRF9BUkcoZHN0KTsKKwlTTEpJVF9VTlVTRURfQVJHKGRzdHcpOworCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJcmV0dXJuIFNMSklUX0VSUl9VTlNVUFBPUlRFRDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOworCVNMSklUX1VOVVNFRF9BUkcoc3JjKTsKKwlTTEpJVF9VTlVTRURfQVJHKHNyY3cpOworCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJcmV0dXJuIFNMSklUX0VSUl9VTlNVUFBPUlRFRDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AwKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wKQoreworCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOworCVNMSklUX1VOVVNFRF9BUkcob3ApOworCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJcmV0dXJuIFNMSklUX0VSUl9VTlNVUFBPUlRFRDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CisJU0xKSVRfVU5VU0VEX0FSRyhvcCk7CisJU0xKSVRfVU5VU0VEX0FSRyhkc3QpOworCVNMSklUX1VOVVNFRF9BUkcoZHN0dyk7CisJU0xKSVRfVU5VU0VEX0FSRyhzcmMpOworCVNMSklUX1VOVVNFRF9BUkcoc3Jjdyk7CisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwlyZXR1cm4gU0xKSVRfRVJSX1VOU1VQUE9SVEVEOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQoreworCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOworCVNMSklUX1VOVVNFRF9BUkcob3ApOworCVNMSklUX1VOVVNFRF9BUkcoZHN0KTsKKwlTTEpJVF9VTlVTRURfQVJHKGRzdHcpOworCVNMSklUX1VOVVNFRF9BUkcoc3JjMSk7CisJU0xKSVRfVU5VU0VEX0FSRyhzcmMxdyk7CisJU0xKSVRfVU5VU0VEX0FSRyhzcmMyKTsKKwlTTEpJVF9VTlVTRURfQVJHKHNyYzJ3KTsKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQoreworCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJcmV0dXJuIHJlZzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfY3VzdG9tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3NpIHNpemUpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CisJU0xKSVRfVU5VU0VEX0FSRyhpbnN0cnVjdGlvbik7CisJU0xKSVRfVU5VU0VEX0FSRyhzaXplKTsKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9pc19mcHVfYXZhaWxhYmxlKHZvaWQpCit7CisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwlyZXR1cm4gMDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOworCVNMSklUX1VOVVNFRF9BUkcob3ApOworCVNMSklUX1VOVVNFRF9BUkcoZHN0KTsKKwlTTEpJVF9VTlVTRURfQVJHKGRzdHcpOworCVNMSklUX1VOVVNFRF9BUkcoc3JjKTsKKwlTTEpJVF9VTlVTRURfQVJHKHNyY3cpOworCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJcmV0dXJuIFNMSklUX0VSUl9VTlNVUFBPUlRFRDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CisJU0xKSVRfVU5VU0VEX0FSRyhvcCk7CisJU0xKSVRfVU5VU0VEX0FSRyhkc3QpOworCVNMSklUX1VOVVNFRF9BUkcoZHN0dyk7CisJU0xKSVRfVU5VU0VEX0FSRyhzcmMxKTsKKwlTTEpJVF9VTlVTRURfQVJHKHNyYzF3KTsKKwlTTEpJVF9VTlVTRURfQVJHKHNyYzIpOworCVNMSklUX1VOVVNFRF9BUkcoc3JjMncpOworCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJcmV0dXJuIFNMSklUX0VSUl9VTlNVUFBPUlRFRDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9sYWJlbCogc2xqaXRfZW1pdF9sYWJlbChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQoreworCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOworCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfanVtcCogc2xqaXRfZW1pdF9qdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CisJU0xKSVRfVU5VU0VEX0FSRyh0eXBlKTsKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBOVUxMOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CisJU0xKSVRfVU5VU0VEX0FSRyh0eXBlKTsKKwlTTEpJVF9VTlVTRURfQVJHKHNyYzEpOworCVNMSklUX1VOVVNFRF9BUkcoc3JjMXcpOworCVNMSklUX1VOVVNFRF9BUkcoc3JjMik7CisJU0xKSVRfVU5VU0VEX0FSRyhzcmMydyk7CisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwlyZXR1cm4gTlVMTDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2ZjbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKKwlTTEpJVF9VTlVTRURfQVJHKHR5cGUpOworCVNMSklUX1VOVVNFRF9BUkcoc3JjMSk7CisJU0xKSVRfVU5VU0VEX0FSRyhzcmMxdyk7CisJU0xKSVRfVU5VU0VEX0FSRyhzcmMyKTsKKwlTTEpJVF9VTlVTRURfQVJHKHNyYzJ3KTsKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBOVUxMOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfbGFiZWwoc3RydWN0IHNsaml0X2p1bXAgKmp1bXAsIHN0cnVjdCBzbGppdF9sYWJlbCogbGFiZWwpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhqdW1wKTsKKwlTTEpJVF9VTlVTRURfQVJHKGxhYmVsKTsKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfdGFyZ2V0KHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzbGppdF91dyB0YXJnZXQpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhqdW1wKTsKKwlTTEpJVF9VTlVTRURfQVJHKHRhcmdldCk7CisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCVNMSklUX1VOVVNFRF9BUkcoY29tcGlsZXIpOworCVNMSklUX1VOVVNFRF9BUkcodHlwZSk7CisJU0xKSVRfVU5VU0VEX0FSRyhzcmMpOworCVNMSklUX1VOVVNFRF9BUkcoc3Jjdyk7CisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwlyZXR1cm4gU0xKSVRfRVJSX1VOU1VQUE9SVEVEOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3LAorCXNsaml0X3NpIHR5cGUpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhjb21waWxlcik7CisJU0xKSVRfVU5VU0VEX0FSRyhvcCk7CisJU0xKSVRfVU5VU0VEX0FSRyhkc3QpOworCVNMSklUX1VOVVNFRF9BUkcoZHN0dyk7CisJU0xKSVRfVU5VU0VEX0FSRyhzcmMpOworCVNMSklUX1VOVVNFRF9BUkcoc3Jjdyk7CisJU0xKSVRfVU5VU0VEX0FSRyh0eXBlKTsKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfbG9jYWxfYmFzZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IG9mZnNldCkKK3sKKwlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKKwlTTEpJVF9VTlVTRURfQVJHKGRzdCk7CisJU0xKSVRfVU5VU0VEX0FSRyhkc3R3KTsKKwlTTEpJVF9VTlVTRURfQVJHKG9mZnNldCk7CisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwlyZXR1cm4gU0xKSVRfRVJSX1VOU1VQUE9SVEVEOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbnN0KiBzbGppdF9lbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdHZhbCkKK3sKKwlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKKwlTTEpJVF9VTlVTRURfQVJHKGRzdCk7CisJU0xKSVRfVU5VU0VEX0FSRyhkc3R3KTsKKwlTTEpJVF9VTlVTRURfQVJHKGluaXR2YWwpOworCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9qdW1wX2FkZHIoc2xqaXRfdXcgYWRkciwgc2xqaXRfdXcgbmV3X2FkZHIpCit7CisJU0xKSVRfVU5VU0VEX0FSRyhhZGRyKTsKKwlTTEpJVF9VTlVTRURfQVJHKG5ld19hZGRyKTsKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfY29uc3Qoc2xqaXRfdXcgYWRkciwgc2xqaXRfc3cgbmV3X2NvbnN0YW50KQoreworCVNMSklUX1VOVVNFRF9BUkcoYWRkcik7CisJU0xKSVRfVU5VU0VEX0FSRyhuZXdfY29uc3RhbnQpOworCVNMSklUX0FTU0VSVF9TVE9QKCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TGlyLmggYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRMaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTJlOWFjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TGlyLmgKQEAgLTAsMCArMSwxMjQ5IEBACisvKgorICogICAgU3RhY2stbGVzcyBKdXN0LUluLVRpbWUgY29tcGlsZXIKKyAqCisgKiAgICBDb3B5cmlnaHQgMjAwOS0yMDEyIFpvbHRhbiBIZXJjemVnIChoem1lc3RlckBmcmVlbWFpbC5odSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisgKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mCisgKiAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQKKyAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1NMSklUX0xJUl9IXworI2RlZmluZSBfU0xKSVRfTElSX0hfCisKKy8qCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBTdGFjay1MZXNzIEpJVCBjb21waWxlciBmb3IgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoeDg2LCBBUk0sIFBvd2VyUEMpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgU2hvcnQgZGVzY3JpcHRpb24KKyAgICBBZHZhbnRhZ2VzOgorICAgICAgLSBUaGUgZXhlY3V0aW9uIGNhbiBiZSBjb250aW51ZWQgZnJvbSBhbnkgTElSIGluc3RydWN0aW9uLiBJbiBvdGhlcgorICAgICAgICB3b3JkcywgaXQgaXMgcG9zc2libGUgdG8ganVtcCB0byBhbnkgbGFiZWwgZnJvbSBhbnl3aGVyZSwgZXZlbiBmcm9tCisgICAgICAgIGEgY29kZSBmcmFnbWVudCwgd2hpY2ggaXMgY29tcGlsZWQgbGF0ZXIsIGlmIGJvdGggY29tcGlsZWQgY29kZQorICAgICAgICBzaGFyZXMgdGhlIHNhbWUgY29udGV4dC4gU2VlIHNsaml0X2VtaXRfZW50ZXIgZm9yIG1vcmUgZGV0YWlscworICAgICAgLSBTdXBwb3J0cyBzZWxmIG1vZGlmeWluZyBjb2RlOiB0YXJnZXQgb2YgKGNvbmRpdGlvbmFsKSBqdW1wIGFuZCBjYWxsCisgICAgICAgIGluc3RydWN0aW9ucyBhbmQgc29tZSBjb25zdGFudCB2YWx1ZXMgY2FuIGJlIGR5bmFtaWNhbGx5IG1vZGlmaWVkCisgICAgICAgIGR1cmluZyBydW50aW1lCisgICAgICAgIC0gYWx0aG91Z2ggaXQgaXMgbm90IHN1Z2dlc3RlZCB0byBkbyBpdCBmcmVxdWVudGx5CisgICAgICAgIC0gY2FuIGJlIHVzZWQgZm9yIGlubGluZSBjYWNoaW5nOiBzYXZlIGFuIGltcG9ydGFudCB2YWx1ZSBvbmNlCisgICAgICAgICAgaW4gdGhlIGluc3RydWN0aW9uIHN0cmVhbQorICAgICAgICAtIHNpbmNlIHRoaXMgZmVhdHVyZSBsaW1pdHMgdGhlIG9wdGltaXphdGlvbiBwb3NzaWJpbGl0aWVzLCBhCisgICAgICAgICAgc3BlY2lhbCBmbGFnIG11c3QgYmUgcGFzc2VkIGF0IGNvbXBpbGUgdGltZSB3aGVuIHRoZXNlCisgICAgICAgICAgaW5zdHJ1Y3Rpb25zIGFyZSBlbWl0dGVkCisgICAgICAtIEEgZml4ZWQgc3RhY2sgc3BhY2UgY2FuIGJlIGFsbG9jYXRlZCBmb3IgbG9jYWwgdmFyaWFibGVzCisgICAgICAtIFRoZSBjb21waWxlciBpcyB0aHJlYWQtc2FmZQorICAgICAgLSBUaGUgY29tcGlsZXIgaXMgaGlnaGx5IGNvbmZpZ3VyYWJsZSB0aHJvdWdoIHByZXByb2Nlc3NvciBtYWNyb3MuCisgICAgICAgIFlvdSBjYW4gZGlzYWJsZSB1bm5lZWRlZCBmZWF0dXJlcyAobXVsdGl0aHJlYWRpbmcgaW4gc2luZ2xlCisgICAgICAgIHRocmVhZGVkIGFwcGxpY2F0aW9ucyksIGFuZCB5b3UgY2FuIHVzZSB5b3VyIG93biBzeXN0ZW0gZnVuY3Rpb25zCisgICAgICAgIChpbmNsdWRpbmcgbWVtb3J5IGFsbG9jYXRvcnMpLiBTZWUgc2xqaXRDb25maWcuaAorICAgIERpc2FkdmFudGFnZXM6CisgICAgICAtIE5vIGF1dG9tYXRpYyByZWdpc3RlciBhbGxvY2F0aW9uLCBhbmQgdGVtcG9yYXJ5IHJlc3VsdHMgYXJlCisgICAgICAgIG5vdCBzdG9yZWQgb24gdGhlIHN0YWNrLiAoaGVuY2UgdGhlIG5hbWUgY29tZXMpCisgICAgSW4gcHJhY3RpY2U6CisgICAgICAtIFRoaXMgYXBwcm9hY2ggaXMgdmVyeSBlZmZlY3RpdmUgZm9yIGludGVycHJldGVycworICAgICAgICAtIE9uZSBvZiB0aGUgc2F2ZWQgcmVnaXN0ZXJzIHR5cGljYWxseSBwb2ludHMgdG8gYSBzdGFjayBpbnRlcmZhY2UKKyAgICAgICAgLSBJdCBjYW4ganVtcCB0byBhbnkgZXhjZXB0aW9uIGhhbmRsZXIgYW55dGltZSAoZXZlbiBpZiBpdCBiZWxvbmdzCisgICAgICAgICAgdG8gYW5vdGhlciBmdW5jdGlvbikKKyAgICAgICAgLSBIb3QgcGF0aHMgY2FuIGJlIG1vZGlmaWVkIGR1cmluZyBydW50aW1lIHJlZmxlY3RpbmcgdGhlIGNoYW5nZXMKKyAgICAgICAgICBvZiB0aGUgZmFzdGVzdCBleGVjdXRpb24gcGF0aCBvZiB0aGUgZHluYW1pYyBsYW5ndWFnZQorICAgICAgICAtIFNMSklUIHN1cHBvcnRzIGNvbXBsZXggbWVtb3J5IGFkZHJlc3NpbmcgbW9kZXMKKyAgICAgICAgLSBtYWlubHkgcG9zaXRpb24gYW5kIGNvbnRleHQgaW5kZXBlbmRlbnQgY29kZSAoZXhjZXB0IHNvbWUgY2FzZXMpCisKKyAgICBGb3IgdmFsZ3JpbmQgdXNlcnM6CisgICAgICAtIHBhc3MgLS1zbWMtY2hlY2s9YWxsIGFyZ3VtZW50IHRvIHZhbGdyaW5kLCBzaW5jZSBKSVQgaXMgYSAic2VsZi1tb2RpZnlpbmcgY29kZSIKKyovCisKKyNpZiAhKGRlZmluZWQgU0xKSVRfTk9fREVGQVVMVF9DT05GSUcgJiYgU0xKSVRfTk9fREVGQVVMVF9DT05GSUcpCisjaW5jbHVkZSAic2xqaXRDb25maWcuaCIKKyNlbmRpZgorCisvKiBUaGUgZm9sbG93aW5nIGhlYWRlciBmaWxlIGRlZmluZXMgdXNlZnVsIG1hY3JvcyBmb3IgZmluZSB0dW5pbmcKK3Nsaml0IGJhc2VkIGNvZGUgZ2VuZXJhdG9ycy4gVGhleSBhcmUgbGlzdGVkIGluIHRoZSBiZWdpbm5pbmcKK29mIHNsaml0Q29uZmlnSW50ZXJuYWwuaCAqLworCisjaW5jbHVkZSAic2xqaXRDb25maWdJbnRlcm5hbC5oIgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBFcnJvciBjb2RlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEluZGljYXRlcyBubyBlcnJvci4gKi8KKyNkZWZpbmUgU0xKSVRfU1VDQ0VTUwkJCTAKKy8qIEFmdGVyIHRoZSBjYWxsIG9mIHNsaml0X2dlbmVyYXRlX2NvZGUoKSwgdGhlIGVycm9yIGNvZGUgb2YgdGhlIGNvbXBpbGVyCisgICBpcyBzZXQgdG8gdGhpcyB2YWx1ZSB0byBhdm9pZCBmdXR1cmUgc2xqaXQgY2FsbHMgKGluIGRlYnVnIG1vZGUgYXQgbGVhc3QpLgorICAgVGhlIGNvbXBsaWVyIHNob3VsZCBiZSBmcmVlZCBhZnRlciBzbGppdF9nZW5lcmF0ZV9jb2RlKCkuICovCisjZGVmaW5lIFNMSklUX0VSUl9DT01QSUxFRAkJMQorLyogQ2Fubm90IGFsbG9jYXRlIG5vbiBleGVjdXRhYmxlIG1lbW9yeS4gKi8KKyNkZWZpbmUgU0xKSVRfRVJSX0FMTE9DX0ZBSUxFRAkJMgorLyogQ2Fubm90IGFsbG9jYXRlIGV4ZWN1dGFibGUgbWVtb3J5LgorICAgT25seSBmb3Igc2xqaXRfZ2VuZXJhdGVfY29kZSgpICovCisjZGVmaW5lIFNMSklUX0VSUl9FWF9BTExPQ19GQUlMRUQJMworLyogUmV0dXJuIHZhbHVlIGZvciBTTEpJVF9DT05GSUdfVU5TVVBQT1JURUQgcGxhY2Vob2xkZXIgYXJjaGl0ZWN0dXJlLiAqLworI2RlZmluZSBTTEpJVF9FUlJfVU5TVVBQT1JURUQJCTQKKy8qIEFuIGl2YWxpZCBhcmd1bWVudCBpcyBwYXNzZWQgdG8gYW55IFNMSklUIGZ1bmN0aW9uLiAqLworI2RlZmluZSBTTEpJVF9FUlJfQkFEX0FSR1VNRU5UCQk1CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIFJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgU2NyYXRjaCAoUikgcmVnaXN0ZXJzOiByZWdpc3RlcnMgd2hvc2UgbWF5IG5vdCBwcmVzZXJ2ZSB0aGVpciB2YWx1ZXMKKyAgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzLgorCisgIFNhdmVkIChTKSByZWdpc3RlcnM6IHJlZ2lzdGVycyB3aG9zZSBwcmVzZXJ2ZSB0aGVpciB2YWx1ZXMgYWNyb3NzCisgIGZ1bmN0aW9uIGNhbGxzLgorCisgIFRoZSBzY3JhdGNoIGFuZCBzYXZlZCByZWdpc3RlciBzZXRzIGFyZSBvdmVybGFwLiBUaGUgbGFzdCBzY3JhdGNoIHJlZ2lzdGVyCisgIGlzIHRoZSBmaXJzdCBzYXZlZCByZWdpc3RlciwgdGhlIG9uZSBiZWZvcmUgdGhlIGxhc3QgaXMgdGhlIHNlY29uZCBzYXZlZAorICByZWdpc3RlciwgYW5kIHNvIG9uLgorCisgIElmIGFuIGFyY2hpdGVjdHVyZSBwcm92aWRlcyB0d28gc2NyYXRjaCBhbmQgdGhyZWUgc2F2ZWQgcmVnaXN0ZXJzLAorICBpdHMgc2NyYXRjaCBhbmQgc2F2ZWQgcmVnaXN0ZXIgc2V0cyBhcmUgdGhlIGZvbGxvd2luZzoKKworICAgICBSMCAgIHwgIFtTNF0gIHwgICBSMCBhbmQgUzQgcmVwcmVzZW50IHRoZSBzYW1lIHBoeXNpY2FsIHJlZ2lzdGVyCisgICAgIFIxICAgfCAgW1MzXSAgfCAgIFIxIGFuZCBTMyByZXByZXNlbnQgdGhlIHNhbWUgcGh5c2ljYWwgcmVnaXN0ZXIKKyAgICBbUjJdICB8ICAgUzIgICB8ICAgUjIgYW5kIFMyIHJlcHJlc2VudCB0aGUgc2FtZSBwaHlzaWNhbCByZWdpc3RlcgorICAgIFtSM10gIHwgICBTMSAgIHwgICBSMyBhbmQgUzEgcmVwcmVzZW50IHRoZSBzYW1lIHBoeXNpY2FsIHJlZ2lzdGVyCisgICAgW1I0XSAgfCAgIFMwICAgfCAgIFI0IGFuZCBTMCByZXByZXNlbnQgdGhlIHNhbWUgcGh5c2ljYWwgcmVnaXN0ZXIKKworICBOb3RlOiBTTEpJVF9OVU1CRVJfT0ZfU0NSQVRDSF9SRUdJU1RFUlMgd291bGQgYmUgMiBhbmQKKyAgICAgICAgU0xKSVRfTlVNQkVSX09GX1NBVkVEX1JFR0lTVEVSUyB3b3VsZCBiZSAzIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4KKworICBOb3RlOiBPbiBhbGwgc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMgU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyA+PSAxMAorICAgICAgICBhbmQgU0xKSVRfTlVNQkVSX09GX1NBVkVEX1JFR0lTVEVSUyA+PSA1LiBIb3dldmVyLCA0IHJlZ2lzdGVycworICAgICAgICBhcmUgdmlydHVhbCBvbiB4ODYtMzIuIFNlZSBiZWxvdy4KKworICBUaGUgcHVycG9zZSBvZiB0aGlzIGRlZmluaXRpb24gaXMgY29udmVuaWVuY2UuIEFsdGhvdWdoIGEgcmVnaXN0ZXIKKyAgaXMgZWl0aGVyIHNjcmF0Y2ggcmVnaXN0ZXIgb3Igc2F2ZWQgcmVnaXN0ZXIsIFNMSklUIGFsbG93cyBhY2Nlc3NpbmcKKyAgdGhlbSBmcm9tIHRoZSBvdGhlciBzZXQuIEZvciBleGFtcGxlLCBmb3VyIHJlZ2lzdGVycyBjYW4gYmUgdXNlZCBhcworICBzY3JhdGNoIHJlZ2lzdGVycyBhbmQgdGhlIGZpZnRoIG9uZSBhcyBzYXZlZCByZWdpc3RlciBvbiB0aGUgYXJjaGl0ZWN0dXJlCisgIGFib3ZlLiBPZiBjb3Vyc2UgdGhlIGxhc3QgdHdvIHNjcmF0Y2ggcmVnaXN0ZXJzIChSMiBhbmQgUjMpIGZyb20gdGhpcworICBmb3VyIHdpbGwgYmUgc2F2ZWQgb24gdGhlIHN0YWNrLCBiZWNhdXNlIHRoZXkgYXJlIGRlZmluZWQgYXMgc2F2ZWQKKyAgcmVnaXN0ZXJzIGluIHRoZSBhcHBsaWNhdGlvbiBiaW5hcnkgaW50ZXJmYWNlLiBTdGlsbCBSMiBhbmQgUjMgY2FuIGJlCisgIHVzZWQgZm9yIHJlZmVyZW5jaW5nIHRvIHRoZXNlIHJlZ2lzdGVycyBpbnN0ZWFkIG9mIFMyIGFuZCBTMSwgd2hpY2gKKyAgbWFrZXMgZWFzaWVyIHRvIHdyaXRlIHBsYXRmb3JtIGluZGVwZW5kZW50IGNvZGUuIFNjcmF0Y2ggcmVnaXN0ZXJzCisgIGNhbiBiZSBzYXZlZCByZWdpc3RlcnMgaW4gYSBzaW1pbGFyIHdheSwgYnV0IHRoZXNlIGV4dHJhIHNhdmVkCisgIHJlZ2lzdGVycyB3aWxsIG5vdCBiZSBwcmVzZXJ2ZWQgYWNyb3NzIGZ1bmN0aW9uIGNhbGxzISBIZW5jZSB0aGUKKyAgYXBwbGljYXRpb24gbXVzdCBzYXZlIHRoZW0gb24gdGhvc2UgcGxhdGZvcm1zLCB3aGVyZSB0aGUgbnVtYmVyIG9mCisgIHNhdmVkIHJlZ2lzdGVycyBpcyB0b28gbG93LiBUaGlzIGNhbiBiZSBkb25lIGJ5IGNvcHkgdGhlbSBvbnRvCisgIHRoZSBzdGFjayBhbmQgcmVzdG9yZSB0aGVtIGFmdGVyIGEgZnVuY3Rpb24gY2FsbC4KKworICBOb3RlOiBUbyBlbXBoYXNpemUgdGhhdCByZWdpc3RlcnMgYXNzaWduZWQgdG8gUjItUjQgYXJlIHNhdmVkCisgICAgICAgIHJlZ2lzdGVycywgdGhleSBhcmUgZW5jbG9zZWQgYnkgc3F1YXJlIGJyYWNrZXRzLiBTMy1TNAorICAgICAgICBhcmUgbWFya2VkIGluIGEgc2ltaWxhciB3YXkuCisKKyAgTm90ZTogc2xqaXRfZW1pdF9lbnRlciBhbmQgc2xqaXRfc2V0X2NvbnRleHQgZGVmaW5lcyB3aGV0aGVyIGEgcmVnaXN0ZXIKKyAgICAgICAgaXMgUyBvciBSIHJlZ2lzdGVyLiBFLmc6IHdoZW4gMyBzY3JhdGNoZXMgYW5kIDEgc2F2ZWQgaXMgbWFwcGVkCisgICAgICAgIGJ5IHNsaml0X2VtaXRfZW50ZXIsIHRoZSBhbGxvd2VkIHJlZ2lzdGVyIHNldCB3aWxsIGJlOiBSMC1SMiBhbmQKKyAgICAgICAgUzAuIEFsdGhvdWdoIFMyIGlzIG1hcHBlZCB0byB0aGUgc2FtZSBwb3NpdGlvbiBhcyBSMiwgaXQgZG9lcyBub3QKKyAgICAgICAgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIEZ1cnRoZXJtb3JlIHRoZSBSMyAoUzEpCisgICAgICAgIHJlZ2lzdGVyIGRvZXMgbm90IGF2YWlsYWJsZSBhcyB3ZWxsLgorKi8KKworLyogV2hlbiBTTEpJVF9VTlVTRUQgaXMgc3BlY2lmaWVkIGFzIGRlc3RpbmF0aW9uLCB0aGUgcmVzdWx0IGlzIGRpc2NhcmRlZC4gKi8KKyNkZWZpbmUgU0xKSVRfVU5VU0VECQkwCisKKy8qIFNjcmF0Y2ggcmVnaXN0ZXJzLiAqLworI2RlZmluZSBTTEpJVF9SMAkxCisjZGVmaW5lIFNMSklUX1IxCTIKKyNkZWZpbmUgU0xKSVRfUjIJMworLyogTm90ZTogb24geDg2LTMyLCBSMyAtIFI2IChzYW1lIGFzIFMzIC0gUzYpIGFyZSBlbXVsYXRlZCAodGhleQorICAgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2spLiBUaGVzZSByZWdpc3RlcnMgYXJlIGNhbGxlZCB2aXJ0dWFsCisgICBhbmQgY2Fubm90IGJlIHVzZWQgZm9yIG1lbW9yeSBhZGRyZXNzaW5nIChjYW5ub3QgYmUgcGFydCBvZgorICAgYW55IFNMSklUX01FTTEsIFNMSklUX01FTTIgY29uc3RydWN0KS4gVGhlcmUgaXMgbm8gc3VjaAorICAgbGltaXRhdGlvbiBvbiBvdGhlciBDUFVzLiBTZWUgc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KCkuICovCisjZGVmaW5lIFNMSklUX1IzCTQKKyNkZWZpbmUgU0xKSVRfUjQJNQorI2RlZmluZSBTTEpJVF9SNQk2CisjZGVmaW5lIFNMSklUX1I2CTcKKyNkZWZpbmUgU0xKSVRfUjcJOAorI2RlZmluZSBTTEpJVF9SOAk5CisjZGVmaW5lIFNMSklUX1I5CTEwCisvKiBBbGwgUiByZWdpc3RlcnMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBjYW4gYmUgYWNjZXNzZWQgYnkgU0xKSVRfUihpKQorICAgVGhlIGkgcGFyYW1ldGVyIG11c3QgYmUgPj0gMCBhbmQgPCBTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTLiAqLworI2RlZmluZSBTTEpJVF9SKGkpCSgxICsgKGkpKQorCisvKiBTYXZlZCByZWdpc3RlcnMuICovCisjZGVmaW5lIFNMSklUX1MwCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTKQorI2RlZmluZSBTTEpJVF9TMQkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyAtIDEpCisjZGVmaW5lIFNMSklUX1MyCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTIC0gMikKKy8qIE5vdGU6IG9uIHg4Ni0zMiwgUzMgLSBTNiAoc2FtZSBhcyBSMyAtIFI2KSBhcmUgZW11bGF0ZWQgKHRoZXkKKyAgIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrKS4gVGhlc2UgcmVnaXN0ZXJzIGFyZSBjYWxsZWQgdmlydHVhbAorICAgYW5kIGNhbm5vdCBiZSB1c2VkIGZvciBtZW1vcnkgYWRkcmVzc2luZyAoY2Fubm90IGJlIHBhcnQgb2YKKyAgIGFueSBTTEpJVF9NRU0xLCBTTEpJVF9NRU0yIGNvbnN0cnVjdCkuIFRoZXJlIGlzIG5vIHN1Y2gKKyAgIGxpbWl0YXRpb24gb24gb3RoZXIgQ1BVcy4gU2VlIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleCgpLiAqLworI2RlZmluZSBTTEpJVF9TMwkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyAtIDMpCisjZGVmaW5lIFNMSklUX1M0CShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTIC0gNCkKKyNkZWZpbmUgU0xKSVRfUzUJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgLSA1KQorI2RlZmluZSBTTEpJVF9TNgkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyAtIDYpCisjZGVmaW5lIFNMSklUX1M3CShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTIC0gNykKKyNkZWZpbmUgU0xKSVRfUzgJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgLSA4KQorI2RlZmluZSBTTEpJVF9TOQkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyAtIDkpCisvKiBBbGwgUyByZWdpc3RlcnMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBjYW4gYmUgYWNjZXNzZWQgYnkgU0xKSVRfUyhpKQorICAgVGhlIGkgcGFyYW1ldGVyIG11c3QgYmUgPj0gMCBhbmQgPCBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTLiAqLworI2RlZmluZSBTTEpJVF9TKGkpCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTIC0gKGkpKQorCisvKiBSZWdpc3RlcnMgPj0gU0xKSVRfRklSU1RfU0FWRURfUkVHIGFyZSBzYXZlZCByZWdpc3RlcnMuICovCisjZGVmaW5lIFNMSklUX0ZJUlNUX1NBVkVEX1JFRyAoU0xKSVRfUzAgLSBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTICsgMSkKKworLyogVGhlIFNMSklUX1NQIHByb3ZpZGVzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGxpbmVhciBzdGFjayBzcGFjZSBhbGxvY2F0ZWQgYnkKKyAgIHNsaml0X2VtaXRfZW50ZXIuIEl0IGNhbiBvbmx5IGJlIHVzZWQgaW4gdGhlIGZvbGxvd2luZyBmb3JtOiBTTEpJVF9NRU0xKFNMSklUX1NQKS4KKyAgIFRoZSBpbW1lZGlhdGUgb2Zmc2V0IGlzIGV4dGVuZGVkIGJ5IHRoZSByZWxhdGl2ZSBzdGFjayBvZmZzZXQgYXV0b21hdGljYWxseS4KKyAgIFRoZSBzbGppdF9nZXRfbG9jYWxfYmFzZSBjYW4gYmUgdXNlZCB0byBvYnRhaW4gdGhlIGFic29sdXRlIG9mZnNldC4gKi8KKyNkZWZpbmUgU0xKSVRfU1AJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAxKQorCisvKiBSZXR1cm4gd2l0aCBtYWNoaW5lIHdvcmQuICovCisKKyNkZWZpbmUgU0xKSVRfUkVUVVJOX1JFRwlTTEpJVF9SMAorCisvKiB4ODYgcHJlZmVycyBzcGVjaWZpYyByZWdpc3RlcnMgZm9yIHNwZWNpYWwgcHVycG9zZXMuIEluIGNhc2Ugb2Ygc2hpZnQKKyAgIGJ5IHJlZ2lzdGVyIGl0IHN1cHBvcnRzIG9ubHkgU0xKSVRfUjIgZm9yIHNoaWZ0IGFyZ3VtZW50CisgICAod2hpY2ggaXMgdGhlIHNyYzIgYXJndW1lbnQgb2Ygc2xqaXRfZW1pdF9vcDIpLiBJZiBhbm90aGVyIHJlZ2lzdGVyIGlzCisgICB1c2VkLCBzbGppdCBtdXN0IGV4Y2hhbmdlIGRhdGEgYmV0d2VlbiByZWdpc3RlcnMgd2hpY2ggY2F1c2UgYSBtaW5vcgorICAgc2xvd2Rvd24uIE90aGVyIGFyY2hpdGVjdHVyZXMgaGFzIG5vIHN1Y2ggbGltaXRhdGlvbi4gKi8KKworI2RlZmluZSBTTEpJVF9QUkVGX1NISUZUX1JFRwlTTEpJVF9SMgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBGbG9hdGluZyBwb2ludCByZWdpc3RlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEVhY2ggZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXIgY2FuIHN0b3JlIGEgZG91YmxlIG9yIHNpbmdsZSBwcmVjaXNpb24KKyAgIHZhbHVlLiBUaGUgRlIgYW5kIEZTIHJlZ2lzdGVyIHNldHMgYXJlIG92ZXJsYXAgaW4gdGhlIHNhbWUgd2F5IGFzIFIKKyAgIGFuZCBTIHJlZ2lzdGVyIHNldHMuIFNlZSBhYm92ZS4gKi8KKworLyogTm90ZTogU0xKSVRfVU5VU0VEIGFzIGRlc3RpbmF0aW9uIGlzIG5vdCB2YWxpZCBmb3IgZmxvYXRpbmcgcG9pbnQKKyAgIG9wZXJhdGlvbnMsIHNpbmNlIHRoZXkgY2Fubm90IGJlIHVzZWQgZm9yIHNldHRpbmcgZmxhZ3MuICovCisKKy8qIEZsb2F0aW5nIHBvaW50IHNjcmF0Y2ggcmVnaXN0ZXJzLiAqLworI2RlZmluZSBTTEpJVF9GUjAJMQorI2RlZmluZSBTTEpJVF9GUjEJMgorI2RlZmluZSBTTEpJVF9GUjIJMworI2RlZmluZSBTTEpJVF9GUjMJNAorI2RlZmluZSBTTEpJVF9GUjQJNQorI2RlZmluZSBTTEpJVF9GUjUJNgorLyogQWxsIEZSIHJlZ2lzdGVycyBwcm92aWRlZCBieSB0aGUgYXJjaGl0ZWN0dXJlIGNhbiBiZSBhY2Nlc3NlZCBieSBTTEpJVF9GUihpKQorICAgVGhlIGkgcGFyYW1ldGVyIG11c3QgYmUgPj0gMCBhbmQgPCBTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTLiAqLworI2RlZmluZSBTTEpJVF9GUihpKQkoMSArIChpKSkKKworLyogRmxvYXRpbmcgcG9pbnQgc2F2ZWQgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBTTEpJVF9GUzAJKFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMpCisjZGVmaW5lIFNMSklUX0ZTMQkoU0xKSVRfTlVNQkVSX09GX0ZMT0FUX1JFR0lTVEVSUyAtIDEpCisjZGVmaW5lIFNMSklUX0ZTMgkoU0xKSVRfTlVNQkVSX09GX0ZMT0FUX1JFR0lTVEVSUyAtIDIpCisjZGVmaW5lIFNMSklUX0ZTMwkoU0xKSVRfTlVNQkVSX09GX0ZMT0FUX1JFR0lTVEVSUyAtIDMpCisjZGVmaW5lIFNMSklUX0ZTNAkoU0xKSVRfTlVNQkVSX09GX0ZMT0FUX1JFR0lTVEVSUyAtIDQpCisjZGVmaW5lIFNMSklUX0ZTNQkoU0xKSVRfTlVNQkVSX09GX0ZMT0FUX1JFR0lTVEVSUyAtIDUpCisvKiBBbGwgUyByZWdpc3RlcnMgcHJvdmlkZWQgYnkgdGhlIGFyY2hpdGVjdHVyZSBjYW4gYmUgYWNjZXNzZWQgYnkgU0xKSVRfRlMoaSkKKyAgIFRoZSBpIHBhcmFtZXRlciBtdXN0IGJlID49IDAgYW5kIDwgU0xKSVRfTlVNQkVSX09GX1NBVkVEX0ZMT0FUX1JFR0lTVEVSUy4gKi8KKyNkZWZpbmUgU0xKSVRfRlMoaSkJKFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMgLSAoaSkpCisKKy8qIEZsb2F0IHJlZ2lzdGVycyA+PSBTTEpJVF9GSVJTVF9TQVZFRF9GTE9BVF9SRUcgYXJlIHNhdmVkIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgU0xKSVRfRklSU1RfU0FWRURfRkxPQVRfUkVHIChTTEpJVF9GUzAgLSBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfRkxPQVRfUkVHSVNURVJTICsgMSkKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgTWFpbiBzdHJ1Y3R1cmVzIGFuZCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorCVRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcyBhcmUgcHJpdmF0ZSwgYW5kIGNhbiBiZSBjaGFuZ2VkIGluIHRoZQorCWZ1dHVyZS4gS2VlcGluZyB0aGVtIGhlcmUgYWxsb3dzIGNvZGUgaW5saW5pbmcuCisqLworCitzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50IHsKKwlzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50ICpuZXh0OworCXNsaml0X3V3IHVzZWRfc2l6ZTsKKwkvKiBNdXN0IGJlIGFsaWduZWQgdG8gc2xqaXRfc3cuICovCisJc2xqaXRfdWIgbWVtb3J5WzFdOworfTsKKworc3RydWN0IHNsaml0X2xhYmVsIHsKKwlzdHJ1Y3Qgc2xqaXRfbGFiZWwgKm5leHQ7CisJc2xqaXRfdXcgYWRkcjsKKwkvKiBUaGUgbWF4aW11bSBzaXplIGRpZmZlcmVuY2UuICovCisJc2xqaXRfdXcgc2l6ZTsKK307CisKK3N0cnVjdCBzbGppdF9qdW1wIHsKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqbmV4dDsKKwlzbGppdF91dyBhZGRyOworCXNsaml0X3N3IGZsYWdzOworCXVuaW9uIHsKKwkJc2xqaXRfdXcgdGFyZ2V0OworCQlzdHJ1Y3Qgc2xqaXRfbGFiZWwqIGxhYmVsOworCX0gdTsKK307CisKK3N0cnVjdCBzbGppdF9jb25zdCB7CisJc3RydWN0IHNsaml0X2NvbnN0ICpuZXh0OworCXNsaml0X3V3IGFkZHI7Cit9OworCitzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgeworCXNsaml0X3NpIGVycm9yOworCXNsaml0X3NpIG9wdGlvbnM7CisKKwlzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsczsKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcHM7CisJc3RydWN0IHNsaml0X2NvbnN0ICpjb25zdHM7CisJc3RydWN0IHNsaml0X2xhYmVsICpsYXN0X2xhYmVsOworCXN0cnVjdCBzbGppdF9qdW1wICpsYXN0X2p1bXA7CisJc3RydWN0IHNsaml0X2NvbnN0ICpsYXN0X2NvbnN0OworCisJdm9pZCAqYWxsb2NhdG9yX2RhdGE7CisJc3RydWN0IHNsaml0X21lbW9yeV9mcmFnbWVudCAqYnVmOworCXN0cnVjdCBzbGppdF9tZW1vcnlfZnJhZ21lbnQgKmFidWY7CisKKwkvKiBVc2VkIHNjcmF0Y2ggcmVnaXN0ZXJzLiAqLworCXNsaml0X3NpIHNjcmF0Y2hlczsKKwkvKiBVc2VkIHNhdmVkIHJlZ2lzdGVycy4gKi8KKwlzbGppdF9zaSBzYXZlZHM7CisJLyogVXNlZCBmbG9hdCBzY3JhdGNoIHJlZ2lzdGVycy4gKi8KKwlzbGppdF9zaSBmc2NyYXRjaGVzOworCS8qIFVzZWQgZmxvYXQgc2F2ZWQgcmVnaXN0ZXJzLiAqLworCXNsaml0X3NpIGZzYXZlZHM7CisJLyogTG9jYWwgc3RhY2sgc2l6ZS4gKi8KKwlzbGppdF9zaSBsb2NhbF9zaXplOworCS8qIENvZGUgc2l6ZS4gKi8KKwlzbGppdF91dyBzaXplOworCS8qIEZvciBzdGF0aXN0aWNhbCBwdXJwb3Nlcy4gKi8KKwlzbGppdF91dyBleGVjdXRhYmxlX3NpemU7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJc2xqaXRfc2kgYXJnczsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQorCXNsaml0X3NpIG1vZGUzMjsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4NiAmJiBTTEpJVF9DT05GSUdfWDg2KQorCXNsaml0X3NpIGZsYWdzX3NhdmVkOworI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCisJLyogQ29uc3RhbnQgcG9vbCBoYW5kbGluZy4gKi8KKwlzbGppdF91dyAqY3Bvb2w7CisJc2xqaXRfdWIgKmNwb29sX3VuaXF1ZTsKKwlzbGppdF91dyBjcG9vbF9kaWZmOworCXNsaml0X3V3IGNwb29sX2ZpbGw7CisJLyogT3RoZXIgbWVtYmVycy4gKi8KKwkvKiBDb250YWlucyBwb2ludGVyLCAibGRyIHBjLCBbLi4uXSIgcGFpcnMuICovCisJc2xqaXRfdXcgcGF0Y2hlczsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KSB8fCAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y3ICYmIFNMSklUX0NPTkZJR19BUk1fVjcpCisJLyogVGVtcG9yYXJ5IGZpZWxkcy4gKi8KKwlzbGppdF91dyBzaGlmdF9pbW07CisJc2xqaXRfc2kgY2FjaGVfYXJnOworCXNsaml0X3N3IGNhY2hlX2FyZ3c7CisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVEhVTUIyICYmIFNMSklUX0NPTkZJR19BUk1fVEhVTUIyKQorCXNsaml0X3NpIGNhY2hlX2FyZzsKKwlzbGppdF9zdyBjYWNoZV9hcmd3OworI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNXzY0ICYmIFNMSklUX0NPTkZJR19BUk1fNjQpCisJc2xqaXRfc2kgY2FjaGVfYXJnOworCXNsaml0X3N3IGNhY2hlX2FyZ3c7CisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUEMgJiYgU0xKSVRfQ09ORklHX1BQQykKKwlzbGppdF9zdyBpbW07CisJc2xqaXRfc2kgY2FjaGVfYXJnOworCXNsaml0X3N3IGNhY2hlX2FyZ3c7CisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTICYmIFNMSklUX0NPTkZJR19NSVBTKQorCXNsaml0X3NpIGRlbGF5X3Nsb3Q7CisJc2xqaXRfc2kgY2FjaGVfYXJnOworCXNsaml0X3N3IGNhY2hlX2FyZ3c7CisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpCisJc2xqaXRfc2kgZGVsYXlfc2xvdDsKKwlzbGppdF9zaSBjYWNoZV9hcmc7CisJc2xqaXRfc3cgY2FjaGVfYXJndzsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1RJTEVHWCAmJiBTTEpJVF9DT05GSUdfVElMRUdYKQorCXNsaml0X3NpIGNhY2hlX2FyZzsKKwlzbGppdF9zdyBjYWNoZV9hcmd3OworI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJRklMRSogdmVyYm9zZTsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykgXAorCQl8fCAoZGVmaW5lZCBTTEpJVF9ERUJVRyAmJiBTTEpJVF9ERUJVRykKKwkvKiBMb2NhbCBzaXplIHBhc3NlZCB0byB0aGUgZnVuY3Rpb25zLiAqLworCXNsaml0X3NpIGxvZ2ljYWxfbG9jYWxfc2l6ZTsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykgXAorCQl8fCAoZGVmaW5lZCBTTEpJVF9ERUJVRyAmJiBTTEpJVF9ERUJVRykgXAorCQl8fCAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJc2xqaXRfc2kgc2tpcF9jaGVja3M7CisjZW5kaWYKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIE1haW4gZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQ3JlYXRlcyBhbiBzbGppdCBjb21waWxlci4gVGhlIGFsbG9jYXRvcl9kYXRhIGlzIHJlcXVpcmVkIGJ5IHNvbWUKKyAgIGN1c3RvbSBtZW1vcnkgbWFuYWdlcnMuIFRoaXMgcG9pbnRlciBpcyBwYXNzZWQgdG8gU0xKSVRfTUFMTE9DCisgICBhbmQgU0xKSVRfRlJFRSBtYWNyb3MuIE1vc3QgYWxsb2NhdG9ycyAoaW5jbHVkaW5nIHRoZSBkZWZhdWx0CisgICBvbmUpIGlnbm9yZXMgdGhpcyB2YWx1ZSwgYW5kIGl0IGlzIHJlY29tbWVuZGVkIHRvIHBhc3MgTlVMTAorICAgYXMgYSBkdW1teSB2YWx1ZSBmb3IgYWxsb2NhdG9yX2RhdGEuCisKKyAgIFJldHVybnMgTlVMTCBpZiBmYWlsZWQuICovCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbXBpbGVyKiBzbGppdF9jcmVhdGVfY29tcGlsZXIodm9pZCAqYWxsb2NhdG9yX2RhdGEpOworCisvKiBGcmVlcyBldmVyeXRoaW5nIGV4Y2VwdCB0aGUgY29tcGlsZWQgbWFjaGluZSBjb2RlLiAqLworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfZnJlZV9jb21waWxlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKTsKKworLyogUmV0dXJucyB0aGUgY3VycmVudCBlcnJvciBjb2RlLiBJZiBhbiBlcnJvciBpcyBvY2N1cnJlZCwgZnV0dXJlIHNsaml0CisgICBjYWxscyB3aGljaCB1c2VzIHRoZSBzYW1lIGNvbXBpbGVyIGFyZ3VtZW50IHJldHVybnMgZWFybHkgd2l0aCB0aGUgc2FtZQorICAgZXJyb3IgY29kZS4gVGh1cyB0aGVyZSBpcyBubyBuZWVkIGZvciBjaGVja2luZyB0aGUgZXJyb3IgYWZ0ZXIgZXZlcnkKKyAgIGNhbGwsIGl0IGlzIGVub3VnaCB0byBkbyBpdCBiZWZvcmUgdGhlIGNvZGUgaXMgY29tcGlsZWQuIFJlbW92aW5nCisgICB0aGVzZSBjaGVja3MgaW5jcmVhc2VzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgY29tcGlsaW5nIHByb2Nlc3MuICovCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2dldF9jb21waWxlcl9lcnJvcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKSB7IHJldHVybiBjb21waWxlci0+ZXJyb3I7IH0KKworLyogU2V0cyB0aGUgY29tcGlsZXIgZXJyb3IgY29kZSB0byBTTEpJVF9FUlJfQUxMT0NfRkFJTEVEIGV4Y2VwdAorICAgaWYgYW4gZXJyb3Igd2FzIGRldGVjdGVkIGJlZm9yZS4gQWZ0ZXIgdGhlIGVycm9yIGNvZGUgaXMgc2V0CisgICB0aGUgY29tcGlsZXIgYmVoYXZlcyBhcyBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsdXJlIGhhcHBlbmVkCisgICBkdXJpbmcgYW4gc2xqaXQgZnVuY3Rpb24gY2FsbC4gVGhpcyBjYW4gZ3JlYXRseSBzaW1wbGlmeSBlcnJvcgorICAgY2hlY2tpbmcsIHNpbmNlIG9ubHkgdGhlIGNvbXBpbGVyIHN0YXR1cyBuZWVkcyB0byBiZSBjaGVja2VkCisgICBhZnRlciB0aGUgY29tcGlsYXRpb24uICovCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfY29tcGlsZXJfbWVtb3J5X2Vycm9yKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpOworCisvKgorICAgQWxsb2NhdGUgYSBzbWFsbCBhbW91bnQgb2YgbWVtb3J5LiBUaGUgc2l6ZSBtdXN0IGJlIDw9IDY0IGJ5dGVzIG9uIDMyIGJpdCwKKyAgIGFuZCA8PSAxMjggYnl0ZXMgb24gNjQgYml0IGFyY2hpdGVjdHVyZXMuIFRoZSBtZW1vcnkgYXJlYSBpcyBvd25lZCBieSB0aGUKKyAgIGNvbXBpbGVyLCBhbmQgZnJlZWQgYnkgc2xqaXRfZnJlZV9jb21waWxlci4gVGhlIHJldHVybmVkIHBvaW50ZXIgaXMKKyAgIHNpemVvZihzbGppdF9zdykgYWxpZ25lZC4gRXhjZWxsZW50IGZvciBhbGxvY2F0aW5nIHNtYWxsIGJsb2NrcyBkdXJpbmcKKyAgIHRoZSBjb21waWxpbmcsIGFuZCBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGZyZWVpbmcgdGhlbS4gVGhlIHNpemUgaXMKKyAgIGVub3VnaCB0byBjb250YWluIGF0IG1vc3QgMTYgcG9pbnRlcnMuIElmIHRoZSBzaXplIGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlLAorICAgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHdpdGggTlVMTC4gSG93ZXZlciwgdGhpcyByZXR1cm4gdmFsdWUgZG9lcyBub3QKKyAgIGluZGljYXRlIHRoYXQgdGhlcmUgaXMgbm8gbW9yZSBtZW1vcnkgKGRvZXMgbm90IHNldCB0aGUgY3VycmVudCBlcnJvciBjb2RlCisgICBvZiB0aGUgY29tcGlsZXIgdG8gb3V0LW9mLW1lbW9yeSBzdGF0dXMpLgorKi8KK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkKiBzbGppdF9hbGxvY19tZW1vcnkoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgc2l6ZSk7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisvKiBQYXNzaW5nIE5VTEwgZGlzYWJsZXMgdmVyYm9zZS4gKi8KK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X2NvbXBpbGVyX3ZlcmJvc2Uoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgRklMRSogdmVyYm9zZSk7CisjZW5kaWYKKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQqIHNsaml0X2dlbmVyYXRlX2NvZGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcik7CitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9mcmVlX2NvZGUodm9pZCogY29kZSk7CisKKy8qCisgICBBZnRlciB0aGUgbWFjaGluZSBjb2RlIGdlbmVyYXRpb24gaXMgZmluaXNoZWQgd2UgY2FuIHJldHJpZXZlIHRoZSBhbGxvY2F0ZWQKKyAgIGV4ZWN1dGFibGUgbWVtb3J5IHNpemUsIGFsdGhvdWdoIHRoaXMgYXJlYSBtYXkgbm90IGJlIGZ1bGx5IGZpbGxlZCB3aXRoCisgICBpbnN0cnVjdGlvbnMgZGVwZW5kaW5nIG9uIHNvbWUgb3B0aW1pemF0aW9ucy4gVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgb25seQorICAgZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzLgorCisgICBCZWZvcmUgYSBzdWNjZXNzZnVsIGNvZGUgZ2VuZXJhdGlvbiwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpdGggMC4KKyovCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3V3IHNsaml0X2dldF9nZW5lcmF0ZWRfY29kZV9zaXplKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpIHsgcmV0dXJuIGNvbXBpbGVyLT5leGVjdXRhYmxlX3NpemU7IH0KKworLyogSW5zdHJ1Y3Rpb24gZ2VuZXJhdGlvbi4gUmV0dXJucyB3aXRoIGFueSBlcnJvciBjb2RlLiBJZiB0aGVyZSBpcyBubworICAgZXJyb3IsIHRoZXkgcmV0dXJuIHdpdGggU0xKSVRfU1VDQ0VTUy4gKi8KKworLyoKKyAgIFRoZSBleGVjdXRhYmxlIGNvZGUgaXMgYSBmdW5jdGlvbiBjYWxsIGZyb20gdGhlIHZpZXdwb2ludCBvZiB0aGUgQworICAgbGFuZ3VhZ2UuIFRoZSBmdW5jdGlvbiBjYWxscyBtdXN0IG9iZXkgdG8gdGhlIEFCSSAoQXBwbGljYXRpb24KKyAgIEJpbmFyeSBJbnRlcmZhY2UpIG9mIHRoZSBwbGF0Zm9ybSwgd2hpY2ggc3BlY2lmeSB0aGUgcHVycG9zZSBvZgorICAgYWxsIG1hY2hpbmUgcmVnaXN0ZXJzIGFuZCBzdGFjayBoYW5kbGluZyBhbW9uZyBvdGhlciB0aGluZ3MuIFRoZQorICAgc2xqaXRfZW1pdF9lbnRlciBmdW5jdGlvbiBlbWl0cyB0aGUgbmVjZXNzYXJ5IGluc3RydWN0aW9ucyBmb3IKKyAgIHNldHRpbmcgdXAgYSBuZXcgY29udGV4dCBmb3IgdGhlIGV4ZWN1dGFibGUgY29kZSBhbmQgbW92ZXMgZnVuY3Rpb24KKyAgIGFyZ3VtZW50cyB0byB0aGUgc2F2ZWQgcmVnaXN0ZXJzLiBGdXJ0aGVybW9yZSB0aGUgb3B0aW9ucyBhcmd1bWVudAorICAgY2FuIGJlIHVzZWQgdG8gcGFzcyBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIGNvbXBpbGVyLiBUaGUKKyAgIGF2YWlsYWJsZSBvcHRpb25zIGFyZSBsaXN0ZWQgYmVmb3JlIHNsaml0X2VtaXRfZW50ZXIuCisKKyAgIFRoZSBudW1iZXIgb2Ygc2xqaXRfc3cgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZ2VuZXJhdGVkIGZ1bmN0aW9uCisgICBhcmUgc3BlY2lmaWVkIGluIHRoZSAiYXJncyIgcGFyYW1ldGVyLiBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBtdXN0CisgICBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMy4gVGhlIGZpcnN0IGFyZ3VtZW50IGdvZXMgdG8gU0xKSVRfUzAsCisgICB0aGUgc2Vjb25kIGdvZXMgdG8gU0xKSVRfUzEgYW5kIHNvIG9uLiBUaGUgcmVnaXN0ZXIgc2V0IHVzZWQgYnkKKyAgIHRoZSBmdW5jdGlvbiBtdXN0IGJlIGRlY2xhcmVkIGFzIHdlbGwuIFRoZSBudW1iZXIgb2Ygc2NyYXRjaCBhbmQKKyAgIHNhdmVkIHJlZ2lzdGVycyB1c2VkIGJ5IHRoZSBmdW5jdGlvbiBtdXN0IGJlIHBhc3NlZCB0byBzbGppdF9lbWl0X2VudGVyLgorICAgT25seSBSIHJlZ2lzdGVycyBiZXR3ZWVuIFIwIGFuZCAic2NyYXRjaGVzIiBhcmd1bWVudCBjYW4gYmUgdXNlZAorICAgbGF0ZXIuIEUuZy4gaWYgInNjcmF0Y2hlcyIgaXMgc2V0IHRvIDIsIHRoZSByZWdpc3RlciBzZXQgd2lsbCBiZQorICAgbGltaXRlZCB0byBSMCBhbmQgUjEuIFRoZSBTIHJlZ2lzdGVycyBhbmQgdGhlIGZsb2F0aW5nIHBvaW50CisgICByZWdpc3RlcnMgKCJmc2NyYXRjaGVzIiBhbmQgImZzYXZlZHMiKSBhcmUgc3BlY2lmaWVkIGluIGEgc2ltaWxhcgorICAgd2F5LiBUaGUgc2xqaXRfZW1pdF9lbnRlciBpcyBhbHNvIGNhcGFibGUgb2YgYWxsb2NhdGluZyBhIHN0YWNrCisgICBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzLiBUaGUgImxvY2FsX3NpemUiIGFyZ3VtZW50IGNvbnRhaW5zIHRoZQorICAgc2l6ZSBpbiBieXRlcyBvZiB0aGlzIGxvY2FsIGFyZWEgYW5kIGl0cyBzdGFyaW5nIGFkZHJlc3MgaXMgc3RvcmVkCisgICBpbiBTTEpJVF9TUC4gVGhlIG1lbW9yeSBhcmVhIGJldHdlZW4gU0xKSVRfU1AgKGluY2x1c2l2ZSkgYW5kCisgICBTTEpJVF9TUCArIGxvY2FsX3NpemUgKGV4Y2x1c2l2ZSkgY2FuIGJlIG1vZGlmaWVkIGZyZWVseSB1bnRpbAorICAgdGhlIGZ1bmN0aW9uIHJldHVybnMuIFRoZSBzdGFjayBzcGFjZSBpcyBub3QgaW5pdGlhbGl6ZWQuCisKKyAgIE5vdGU6IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBtdXN0IG1ldDoKKyAgICAgICAgIDAgPD0gc2NyYXRjaGVzIDw9IFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMKKyAgICAgICAgIDAgPD0gc2F2ZWRzIDw9IFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMKKyAgICAgICAgIHNjcmF0Y2hlcyArIHNhdmVkcyA8PSBTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTCisgICAgICAgICAwIDw9IGZzY3JhdGNoZXMgPD0gU0xKSVRfTlVNQkVSX09GX0ZMT0FUX1JFR0lTVEVSUworICAgICAgICAgMCA8PSBmc2F2ZWRzIDw9IFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMKKyAgICAgICAgIGZzY3JhdGNoZXMgKyBmc2F2ZWRzIDw9IFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMKKworICAgTm90ZTogZXZlcnkgY2FsbCBvZiBzbGppdF9lbWl0X2VudGVyIGFuZCBzbGppdF9zZXRfY29udGV4dAorICAgICAgICAgb3ZlcndyaXRlcyB0aGUgcHJldmlvdXMgY29udGV4dC4KKyovCisKKy8qIFRoZSBhYnNvbHV0ZSBhZGRyZXNzIHJldHVybmVkIGJ5IHNsaml0X2dldF9sb2NhbF9iYXNlIHdpdGgKK29mZnNldCAwIGlzIGFsaWduZWQgdG8gc2xqaXRfZC4gT3RoZXJ3aXNlIGl0IGlzIGFsaWduZWQgdG8gc2xqaXRfdXcuICovCisjZGVmaW5lIFNMSklUX0RPVUJMRV9BTElHTk1FTlQgMHgwMDAwMDAwMQorCisvKiBUaGUgbG9jYWxfc2l6ZSBtdXN0IGJlID49IDAgYW5kIDw9IFNMSklUX01BWF9MT0NBTF9TSVpFLiAqLworI2RlZmluZSBTTEpJVF9NQVhfTE9DQUxfU0laRQk2NTUzNgorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAorCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpOworCisvKiBUaGUgbWFjaGluZSBjb2RlIGhhcyBhIGNvbnRleHQgKHdoaWNoIGNvbnRhaW5zIHRoZSBsb2NhbCBzdGFjayBzcGFjZSBzaXplLAorICAgbnVtYmVyIG9mIHVzZWQgcmVnaXN0ZXJzLCBldGMuKSB3aGljaCBpbml0aWFsaXplZCBieSBzbGppdF9lbWl0X2VudGVyLiBTZXZlcmFsCisgICBmdW5jdGlvbnMgKGxpa2Ugc2xqaXRfZW1pdF9yZXR1cm4pIHJlcXVyZXMgdGhpcyBjb250ZXh0IHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUKKyAgIHRoZSBhcHByb3ByaWF0ZSBjb2RlLiBIb3dldmVyLCBzb21lIGNvZGUgZnJhZ21lbnRzIChsaWtlIGlubGluZSBjYWNoZSkgbWF5IGhhdmUKKyAgIG5vIG5vcm1hbCBlbnRyeSBwb2ludCBzbyB0aGVpciBjb250ZXh0IGlzIHVua25vd24gZm9yIHRoZSBjb21waWxlci4gVGhlaXIgY29udGV4dAorICAgY2FuIGJlIHByb3ZpZGVkIHRvIHRoZSBjb21waWxlciBieSB0aGUgc2xqaXRfc2V0X2NvbnRleHQgZnVuY3Rpb24uCisKKyAgIE5vdGU6IGV2ZXJ5IGNhbGwgb2Ygc2xqaXRfZW1pdF9lbnRlciBhbmQgc2xqaXRfc2V0X2NvbnRleHQgb3ZlcndyaXRlcworICAgICAgICAgdGhlIHByZXZpb3VzIGNvbnRleHQuICovCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAorCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpOworCisvKiBSZXR1cm4gZnJvbSBtYWNoaW5lIGNvZGUuICBUaGUgb3AgYXJndW1lbnQgY2FuIGJlIFNMSklUX1VOVVNFRCB3aGljaCBtZWFucyB0aGUKKyAgIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiB3aXRoIGFueXRoaW5nIG9yIGFueSBvcGNvZGUgYmV0d2VlbiBTTEpJVF9NT1YgYW5kCisgICBTTEpJVF9NT1ZfUCAoc2VlIHNsaml0X2VtaXRfb3AxKS4gQXMgZm9yIHNyYyBhbmQgc3JjdyB0aGV5IG11c3QgYmUgMCBpZiBvcAorICAgaXMgU0xKSVRfVU5VU0VELCBvdGhlcndpc2Ugc2VlIGJlbG93IHRoZSBkZXNjcmlwdGlvbiBhYm91dCBzb3VyY2UgYW5kCisgICBkZXN0aW5hdGlvbiBhcmd1bWVudHMuICovCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpOworCisvKiBGYXN0IGNhbGxpbmcgbWVjaGFuaXNtIGZvciB1dGlsaXR5IGZ1bmN0aW9ucyAoc2VlIFNMSklUX0ZBU1RfQ0FMTCkuIEFsbCByZWdpc3RlcnMgYW5kCisgICBldmVuIHRoZSBzdGFjayBmcmFtZSBpcyBwYXNzZWQgdG8gdGhlIGNhbGxlZS4gVGhlIHJldHVybiBhZGRyZXNzIGlzIHByZXNlcnZlZCBpbgorICAgZHN0L2RzdHcgYnkgc2xqaXRfZW1pdF9mYXN0X2VudGVyICh0aGUgdHlwZSBvZiB0aGUgdmFsdWUgc3RvcmVkIGJ5IHRoaXMgZnVuY3Rpb24KKyAgIGlzIHNsaml0X3ApLCBhbmQgc2xqaXRfZW1pdF9mYXN0X3JldHVybiBjYW4gdXNlIHRoaXMgYXMgYSByZXR1cm4gdmFsdWUgbGF0ZXIuICovCisKKy8qIE5vdGU6IG9ubHkgZm9yIHNsaml0IHNwZWNpZmljLCBub24gQUJJIGNvbXBpbGFudCBjYWxscy4gRmFzdCwgc2luY2Ugb25seSBhIGZldyBtYWNoaW5lCisgICBpbnN0cnVjdGlvbnMgYXJlIG5lZWRlZC4gRXhjZWxsZW50IGZvciBzbWFsbCB1aWxpdHkgZnVuY3Rpb25zLCB3aGVyZSBzYXZpbmcgcmVnaXN0ZXJzCisgICBhbmQgc2V0dGluZyB1cCBhIG5ldyBzdGFjayBmcmFtZSB3b3VsZCBjb3N0IHRvbyBtdWNoIHBlcmZvcm1hbmNlLiBIb3dldmVyLCBpdCBpcyBzdGlsbAorICAgcG9zc2libGUgdG8gcmV0dXJuIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBjYWxsZXIgKG9yIGFueXdoZXJlIGVsc2UpLiAqLworCisvKiBOb3RlOiBmbGFncyBhcmUgbm90IGNoYW5nZWQgKHVubGlrZSBzbGppdF9lbWl0X2VudGVyIC8gc2xqaXRfZW1pdF9yZXR1cm4pLiAqLworCisvKiBOb3RlOiBhbHRob3VnaCBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuIGNvdWxkIGJlIHJlcGxhY2VkIGJ5IGFuIGlqdW1wLCBpdCBpcyBub3Qgc3VnZ2VzdGVkLAorICAgc2luY2UgbWFueSBhcmNoaXRlY3R1cmVzIGRvIGNsZXZlciBicmFuY2ggcHJlZGljdGlvbiBvbiBjYWxsIC8gcmV0dXJuIGluc3RydWN0aW9uIHBhaXJzLiAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mYXN0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dyk7CitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpOworCisvKgorICAgU291cmNlIGFuZCBkZXN0aW5hdGlvbiB2YWx1ZXMgZm9yIGFyaXRobWV0aWNhbCBpbnN0cnVjdGlvbnMKKyAgICBpbW0gICAgICAgICAgICAgIC0gYSBzaW1wbGUgaW1tZWRpYXRlIHZhbHVlIChjYW5ub3QgYmUgdXNlZCBhcyBhIGRlc3RpbmF0aW9uKQorICAgIHJlZyAgICAgICAgICAgICAgLSBhbnkgb2YgdGhlIHJlZ2lzdGVycyAoaW1tZWRpYXRlIGFyZ3VtZW50IG11c3QgYmUgMCkKKyAgICBbaW1tXSAgICAgICAgICAgIC0gYWJzb2x1dGUgaW1tZWRpYXRlIG1lbW9yeSBhZGRyZXNzCisgICAgW3JlZytpbW1dICAgICAgICAtIGluZGlyZWN0IG1lbW9yeSBhZGRyZXNzCisgICAgW3JlZysocmVnPDxpbW0pXSAtIGluZGlyZWN0IGluZGV4ZWQgbWVtb3J5IGFkZHJlc3MgKHNoaWZ0IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAzKQorICAgICAgICAgICAgICAgICAgICAgICB1c2VmdWwgZm9yIChieXRlLCBoYWxmLCBpbnQsIHNsaml0X3N3KSBhcnJheSBhY2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgKGZ1bGx5IHN1cHBvcnRlZCBieSBib3RoIHg4NiBhbmQgQVJNIGFyY2hpdGVjdHVyZXMsIGFuZCBjaGVhcCBvcGVyYXRpb24gb24gb3RoZXJzKQorKi8KKworLyoKKyAgIElNUE9SQVROVCBOT1RFOiBtZW1vcnkgYWNjZXNzIE1VU1QgYmUgbmF0dXJhbGx5IGFsaWduZWQgZXhjZXB0CisgICAgICAgICAgICAgICAgICAgU0xKSVRfVU5BTElHTkVEIG1hY3JvIGlzIGRlZmluZWQgYW5kIGl0cyB2YWx1ZSBpcyAxLgorCisgICAgIGxlbmd0aCB8IGFsaWdubWVudAorICAgLS0tLS0tLS0tKy0tLS0tLS0tLS0tCisgICAgIGJ5dGUgICB8IDEgYnl0ZSAoYW55IHBoeXNpY2FsX2FkZHJlc3MgaXMgYWNjZXB0ZWQpCisgICAgIGhhbGYgICB8IDIgYnl0ZSAocGh5c2ljYWxfYWRkcmVzcyAmIDB4MSA9PSAwKQorICAgICBpbnQgICAgfCA0IGJ5dGUgKHBoeXNpY2FsX2FkZHJlc3MgJiAweDMgPT0gMCkKKyAgICAgd29yZCAgIHwgNCBieXRlIGlmIFNMSklUXzMyQklUX0FSQ0hJVEVDVFVSRSBpcyBkZWZpbmVkIGFuZCBpdHMgdmFsdWUgaXMgMQorICAgICAgICAgICAgfCA4IGJ5dGUgaWYgU0xKSVRfNjRCSVRfQVJDSElURUNUVVJFIGlzIGRlZmluZWQgYW5kIGl0cyB2YWx1ZSBpcyAxCisgICAgcG9pbnRlciB8IHNpemUgb2Ygc2xqaXRfcCB0eXBlICg0IGJ5dGUgb24gMzIgYml0IG1hY2hpbmVzLCA0IG9yIDggYnl0ZQorICAgICAgICAgICAgfCBvbiA2NCBiaXQgbWFjaGluZXMpCisKKyAgIE5vdGU6ICAgRGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgaGF2ZSBkaWZmZXJlbnQgYWRkcmVzc2luZyBsaW1pdGF0aW9ucy4KKyAgICAgICAgICAgQSBzaW5nbGUgaW5zdHJ1Y3Rpb24gaXMgZW5vdWdoIGZvciB0aGUgZm9sbG93aW5nIGFkZHJlc3NpbmcKKyAgICAgICAgICAgbW9kZXMuIE90aGVyIGFkcnJlc3NpbmcgbW9kZXMgYXJlIGVtdWxhdGVkIGJ5IGluc3RydWN0aW9uCisgICAgICAgICAgIHNlcXVlbmNlcy4gVGhpcyBpbmZvcm1hdGlvbiBjb3VsZCBoZWxwIHRvIGltcHJvdmUgdGhvc2UgY29kZQorICAgICAgICAgICBnZW5lcmF0b3JzIHdoaWNoIGZvY3VzZXMgb25seSBhIGZldyBhcmNoaXRlY3R1cmVzLgorCisgICB4ODY6ICAgIFtyZWcraW1tXSwgLTJeMzIrMSA8PSBpbW0gPD0gMl4zMi0xIChmdWxsIGFkZHJlc3Mgc3BhY2Ugb24geDg2LTMyKQorICAgICAgICAgICBbcmVnKyhyZWc8PGltbSldIGlzIHN1cHBvcnRlZAorICAgICAgICAgICBbaW1tXSwgLTJeMzIrMSA8PSBpbW0gPD0gMl4zMi0xIGlzIHN1cHBvcnRlZAorICAgICAgICAgICBXcml0ZS1iYWNrIGlzIG5vdCBzdXBwb3J0ZWQKKyAgIGFybTogICAgW3JlZytpbW1dLCAtNDA5NSA8PSBpbW0gPD0gNDA5NSBvciAtMjU1IDw9IGltbSA8PSAyNTUgZm9yIHNpZ25lZAorICAgICAgICAgICAgICAgIGJ5dGVzLCBhbnkgaGFsZnMgb3IgZmxvYXRpbmcgcG9pbnQgdmFsdWVzKQorICAgICAgICAgICBbcmVnKyhyZWc8PGltbSldIGlzIHN1cHBvcnRlZAorICAgICAgICAgICBXcml0ZS1iYWNrIGlzIHN1cHBvcnRlZAorICAgYXJtLXQyOiBbcmVnK2ltbV0sIC0yNTUgPD0gaW1tIDw9IDQwOTUKKyAgICAgICAgICAgW3JlZysocmVnPDxpbW0pXSBpcyBzdXBwb3J0ZWQKKyAgICAgICAgICAgV3JpdGUgYmFjayBpcyBzdXBwb3J0ZWQgb25seSBmb3IgW3JlZytpbW1dLCB3aGVyZSAtMjU1IDw9IGltbSA8PSAyNTUKKyAgIHBwYzogICAgW3JlZytpbW1dLCAtNjU1MzYgPD0gaW1tIDw9IDY1NTM1LiA2NCBiaXQgbG9hZHMvc3RvcmVzIGFuZCAzMiBiaXQKKyAgICAgICAgICAgICAgICBzaWduZWQgbG9hZCBvbiA2NCBiaXQgcmVxdWlyZXMgaW1tZWRpYXRlcyBkaXZpc2libGUgYnkgNC4KKyAgICAgICAgICAgICAgICBbcmVnK2ltbV0gaXMgbm90IHN1cHBvcnRlZCBmb3Igc2lnbmVkIDggYml0IHZhbHVlcy4KKyAgICAgICAgICAgW3JlZytyZWddIGlzIHN1cHBvcnRlZAorICAgICAgICAgICBXcml0ZS1iYWNrIGlzIHN1cHBvcnRlZCBleGNlcHQgZm9yIG9uZSBpbnN0cnVjdGlvbjogMzIgYml0IHNpZ25lZAorICAgICAgICAgICAgICAgIGxvYWQgd2l0aCBbcmVnK2ltbV0gYWRkcmVzc2luZyBtb2RlIG9uIDY0IGJpdC4KKyAgIG1pcHM6ICAgW3JlZytpbW1dLCAtNjU1MzYgPD0gaW1tIDw9IDY1NTM1CisgICBzcGFyYzogIFtyZWcraW1tXSwgLTQwOTYgPD0gaW1tIDw9IDQwOTUKKyAgICAgICAgICAgW3JlZytyZWddIGlzIHN1cHBvcnRlZAorKi8KKworLyogUmVnaXN0ZXIgb3V0cHV0OiBzaW1wbHkgdGhlIG5hbWUgb2YgdGhlIHJlZ2lzdGVyLgorICAgRm9yIGRlc3RpbmF0aW9uLCB5b3UgY2FuIHVzZSBTTEpJVF9VTlVTRUQgYXMgd2VsbC4gKi8KKyNkZWZpbmUgU0xKSVRfTUVNCQkweDgwCisjZGVmaW5lIFNMSklUX01FTTAoKQkJKFNMSklUX01FTSkKKyNkZWZpbmUgU0xKSVRfTUVNMShyMSkJCShTTEpJVF9NRU0gfCAocjEpKQorI2RlZmluZSBTTEpJVF9NRU0yKHIxLCByMikJKFNMSklUX01FTSB8IChyMSkgfCAoKHIyKSA8PCA4KSkKKyNkZWZpbmUgU0xKSVRfSU1NCQkweDQwCisKKy8qIFNldCAzMiBiaXQgb3BlcmF0aW9uIG1vZGUgKEkpIG9uIDY0IGJpdCBDUFVzLiBUaGUgZmxhZyBpcyB0b3RhbGx5IGlnbm9yZWQgb24KKyAgIDMyIGJpdCBDUFVzLiBJZiB0aGlzIGZsYWcgaXMgc2V0IGZvciBhbiBhcml0aG1ldGljIG9wZXJhdGlvbiwgaXQgdXNlcyBvbmx5IHRoZQorICAgbG93ZXIgMzIgYml0IG9mIHRoZSBpbnB1dCByZWdpc3RlcihzKSwgYW5kIHNldCB0aGUgQ1BVIHN0YXR1cyBmbGFncyBhY2NvcmRpbmcKKyAgIHRvIHRoZSAzMiBiaXQgcmVzdWx0LiBUaGUgaGlnaGVyIDMyIGJpdHMgYXJlIHVuZGVmaW5lZCBmb3IgYm90aCB0aGUgaW5wdXQgYW5kCisgICBvdXRwdXQuIEhvd2V2ZXIsIHRoZSBDUFUgbWlnaHQgbm90IGlnbm9yZSB0aG9zZSBoaWdoZXIgMzIgYml0cywgbGlrZSBNSVBTLCB3aGljaAorICAgZXhwZWN0cyBpdCB0byBiZSB0aGUgc2lnbiBleHRlbnNpb24gb2YgdGhlIGxvd2VyIDMyIGJpdC4gQWxsIDMyIGJpdCBvcGVyYXRpb25zCisgICBhcmUgdW5kZWZpbmVkLCBpZiB0aGlzIGNvbmRpdGlvbiBpcyBub3QgZnVsZmlsbGVkLiBUaGVyZWZvcmUsIHdoZW4gU0xKSVRfSU5UX09QCisgICBpcyBzcGVjaWZpZWQsIGFsbCByZWdpc3RlciBhcmd1bWVudHMgbXVzdCBiZSB0aGUgcmVzdWx0IG9mIG90aGVyIG9wZXJhdGlvbnMgd2l0aAorICAgdGhlIHNhbWUgU0xKSVRfSU5UX09QIGZsYWcuIEluIG90aGVyIHdvcmRzLCBhbHRob3VnaCBhIHJlZ2lzdGVyIGNhbiBob2xkIGVpdGhlcgorICAgYSA2NCBvciAzMiBiaXQgdmFsdWUsIHRoZXNlIHZhbHVlcyBjYW5ub3QgYmUgbWl4ZWQuIFRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlCisgICBTTEpJVF9JTU9WIGFuZCBTTEpJVF9JTU9WVSAoU0xKSVRfTU9WX1NJL1NMSklUX01PVlVfU0kgd2l0aCBTTEpJVF9JTlRfT1AgZmxhZykKKyAgIHdoaWNoIGNhbiBjb252ZXJ0IGFueSBzb3VyY2UgYXJndW1lbnQgdG8gU0xKSVRfSU5UX09QIGNvbXBhdGlibGUgcmVzdWx0LiBUaGlzCisgICBjb252ZXJzaW9uIG1pZ2h0IGJlIHVubmVjZXNzYXJ5IG9uIHNvbWUgQ1BVcyBsaWtlIHg4Ni02NCwgc2luY2UgdGhlIHVwcGVyIDMyCisgICBiaXQgaXMgYWx3YXlzIGlnbm9yZWQuIEluIHRoaXMgY2FzZSBTTEpJVCBpcyBjbGV2ZXIgZW5vdWdoIHRvIG5vdCBnZW5lcmF0ZSBhbnkKKyAgIGluc3RydWN0aW9ucyBpZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBvcGVyYW5kcyBhcmUgdGhlIHNhbWUgcmVnaXN0ZXJzLgorICAgQWZmZWN0cyBzbGppdF9lbWl0X29wMCwgc2xqaXRfZW1pdF9vcDEgYW5kIHNsaml0X2VtaXRfb3AyLiAqLworI2RlZmluZSBTTEpJVF9JTlRfT1AJCTB4MTAwCisKKy8qIFNpbmdsZSBwcmVjaXNpb24gbW9kZSAoU1ApLiBUaGlzIGZsYWcgaXMgc2ltaWxhciB0byBTTEpJVF9JTlRfT1AsIGp1c3QKKyAgIGl0IGFwcGxpZXMgdG8gZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzIChpdCBpcyBldmVuIHRoZSBzYW1lIGJpdCkuIFdoZW4KKyAgIHRoaXMgZmxhZyBpcyBwYXNzZWQsIHRoZSBDUFUgcGVyZm9ybXMgc2luZ2xlIHByZWNpc2lvbiBmbG9hdGluZyBwb2ludAorICAgb3BlcmF0aW9ucy4gU2ltaWxhciB0byBTTEpJVF9JTlRfT1AsIGFsbCByZWdpc3RlciBhcmd1bWVudHMgbXVzdCBiZSB0aGUKKyAgIHJlc3VsdCBvZiBvdGhlciBmbG9hdGluZyBwb2ludCBvcGVyYXRpb25zIHdpdGggdGhpcyBmbGFnLiBBZmZlY3RzCisgICBzbGppdF9lbWl0X2ZvcDEsIHNsaml0X2VtaXRfZm9wMiBhbmQgc2xqaXRfZW1pdF9mY21wLiAqLworI2RlZmluZSBTTEpJVF9TSU5HTEVfT1AJCTB4MTAwCisKKy8qIENvbW1vbiBDUFUgc3RhdHVzIGZsYWdzIGZvciBhbGwgYXJjaGl0ZWN0dXJlcyAoeDg2LCBBUk0sIFBQQykKKyAgICAtIGNhcnJ5IGZsYWcKKyAgICAtIG92ZXJmbG93IGZsYWcKKyAgICAtIHplcm8gZmxhZworICAgIC0gbmVnYXRpdmUvcG9zaXRpdmUgZmxhZyAoZGVwZW5kcyBvbiBhcmMpCisgICBPbiBtaXBzLCB0aGVzZSBmbGFncyBhcmUgZW11bGF0ZWQgYnkgc29mdHdhcmUuICovCisKKy8qIEJ5IGRlZmF1bHQsIHRoZSBpbnN0cnVjdGlvbnMgbWF5LCBvciBtYXkgbm90IHNldCB0aGUgQ1BVIHN0YXR1cyBmbGFncy4KKyAgIEZvcmNpbmcgdG8gc2V0IG9yIGtlZXAgc3RhdHVzIGZsYWdzIGNhbiBiZSBkb25lIHdpdGggdGhlIGZvbGxvd2luZyBmbGFnczogKi8KKworLyogTm90ZTogc2xqaXQgdHJpZXMgdG8gZW1pdCB0aGUgbWluaW11bSBudW1iZXIgb2YgaW5zdHJ1Y3Rpb25zLiBVc2luZyB0aGVzZQorICAgZmxhZ3MgY2FuIGluY3JlYXNlIHRoZW0sIHNvIHVzZSB0aGVtIHdpc2VseSB0byBhdm9pZCB1bm5lY2Vzc2FyeSBjb2RlIGdlbmVyYXRpb24uICovCisKKy8qIFNldCBFcXVhbCAoWmVybykgc3RhdHVzIGZsYWcgKEUpLiAqLworI2RlZmluZSBTTEpJVF9TRVRfRQkJCTB4MDIwMAorLyogU2V0IHVuc2lnbmVkIHN0YXR1cyBmbGFnIChVKS4gKi8KKyNkZWZpbmUgU0xKSVRfU0VUX1UJCQkweDA0MDAKKy8qIFNldCBzaWduZWQgc3RhdHVzIGZsYWcgKFMpLiAqLworI2RlZmluZSBTTEpJVF9TRVRfUwkJCTB4MDgwMAorLyogU2V0IHNpZ25lZCBvdmVyZmxvdyBmbGFnIChPKS4gKi8KKyNkZWZpbmUgU0xKSVRfU0VUX08JCQkweDEwMDAKKy8qIFNldCBjYXJyeSBmbGFnIChDKS4KKyAgIE5vdGU6IEtpbmRhIHVuc2lnbmVkIG92ZXJmbG93LCBidXQgYmVoYXZlcyBkaWZmZXJlbnRseSBvbiB2YXJpb3VzIGNwdXMuICovCisjZGVmaW5lIFNMSklUX1NFVF9DCQkJMHgyMDAwCisvKiBEbyBub3QgbW9kaWZ5IHRoZSBmbGFncyAoSykuCisgICBOb3RlOiBUaGlzIGZsYWcgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyIFNMSklUX1NFVF8qIGZsYWcuICovCisjZGVmaW5lIFNMSklUX0tFRVBfRkxBR1MJCTB4NDAwMAorCisvKiBOb3RlczoKKyAgICAgLSB5b3UgY2Fubm90IHBvc3Rwb25lIGNvbmRpdGlvbmFsIGp1bXAgaW5zdHJ1Y3Rpb25zIGV4Y2VwdCBpZiBub3RlZCB0aGF0CisgICAgICAgdGhlIGluc3RydWN0aW9uIGRvZXMgbm90IHNldCBmbGFncyAoU2VlOiBTTEpJVF9LRUVQX0ZMQUdTKS4KKyAgICAgLSBmbGFnIGNvbWJpbmF0aW9uczogJ3wnIG1lYW5zICdsb2dpY2FsIG9yJy4gKi8KKworLyogU3RhcnRpbmcgaW5kZXggb2Ygb3Bjb2RlcyBmb3Igc2xqaXRfZW1pdF9vcDAuICovCisjZGVmaW5lIFNMSklUX09QMF9CQVNFCQkJMAorCisvKiBGbGFnczogLSAobmV2ZXIgc2V0IGFueSBmbGFncykKKyAgIE5vdGU6IGJyZWFrcG9pbnQgaW5zdHJ1Y3Rpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbGwgYXJjaGl0ZWN0dXJlcyAoZS5nLiBwcGMpCisgICAgICAgICBJdCBmYWxscyBiYWNrIHRvIFNMSklUX05PUCBpbiB0aG9zZSBjYXNlcy4gKi8KKyNkZWZpbmUgU0xKSVRfQlJFQUtQT0lOVAkJKFNMSklUX09QMF9CQVNFICsgMCkKKy8qIEZsYWdzOiAtIChuZXZlciBzZXQgYW55IGZsYWdzKQorICAgTm90ZTogbWF5IG9yIG1heSBub3QgY2F1c2UgYW4gZXh0cmEgY3ljbGUgd2FpdAorICAgICAgICAgaXQgY2FuIGV2ZW4gZGVjcmVhc2UgdGhlIHJ1bnRpbWUgaW4gYSBmZXcgY2FzZXMuICovCisjZGVmaW5lIFNMSklUX05PUAkJCShTTEpJVF9PUDBfQkFTRSArIDEpCisvKiBGbGFnczogLSAobWF5IGRlc3Ryb3kgZmxhZ3MpCisgICBVbnNpZ25lZCBtdWx0aXBsaWNhdGlvbiBvZiBTTEpJVF9SMCBhbmQgU0xKSVRfUjEuCisgICBSZXN1bHQgaXMgcGxhY2VkIGludG8gU0xKSVRfUjE6U0xKSVRfUjAgKGhpZ2g6bG93KSB3b3JkICovCisjZGVmaW5lIFNMSklUX0xVTVVMCQkJKFNMSklUX09QMF9CQVNFICsgMikKKy8qIEZsYWdzOiAtIChtYXkgZGVzdHJveSBmbGFncykKKyAgIFNpZ25lZCBtdWx0aXBsaWNhdGlvbiBvZiBTTEpJVF9SMCBhbmQgU0xKSVRfUjEuCisgICBSZXN1bHQgaXMgcGxhY2VkIGludG8gU0xKSVRfUjE6U0xKSVRfUjAgKGhpZ2g6bG93KSB3b3JkICovCisjZGVmaW5lIFNMSklUX0xTTVVMCQkJKFNMSklUX09QMF9CQVNFICsgMykKKy8qIEZsYWdzOiBJIC0gKG1heSBkZXN0cm95IGZsYWdzKQorICAgVW5zaWduZWQgZGl2aWRlIG9mIHRoZSB2YWx1ZSBpbiBTTEpJVF9SMCBieSB0aGUgdmFsdWUgaW4gU0xKSVRfUjEuCisgICBUaGUgcmVzdWx0IGlzIHBsYWNlZCBpbnRvIFNMSklUX1IwIGFuZCB0aGUgcmVtYWluZGVyIGludG8gU0xKSVRfUjEuCisgICBOb3RlOiBpZiBTTEpJVF9SMSBpcyAwLCB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4gKi8KKyNkZWZpbmUgU0xKSVRfVURJVk1PRAkJCShTTEpJVF9PUDBfQkFTRSArIDQpCisjZGVmaW5lIFNMSklUX0lVRElWTU9ECQkJKFNMSklUX1VESVZNT0QgfCBTTEpJVF9JTlRfT1ApCisvKiBGbGFnczogSSAtIChtYXkgZGVzdHJveSBmbGFncykKKyAgIFNpZ25lZCBkaXZpZGUgb2YgdGhlIHZhbHVlIGluIFNMSklUX1IwIGJ5IHRoZSB2YWx1ZSBpbiBTTEpJVF9SMS4KKyAgIFRoZSByZXN1bHQgaXMgcGxhY2VkIGludG8gU0xKSVRfUjAgYW5kIHRoZSByZW1haW5kZXIgaW50byBTTEpJVF9SMS4KKyAgIE5vdGU6IGlmIFNMSklUX1IxIGlzIDAsIHRoZSBiZWhhdmlvdXIgaXMgdW5kZWZpbmVkLgorICAgTm90ZTogaWYgU0xKSVRfUjEgaXMgLTEgYW5kIFNMSklUX1IwIGlzIGludGVnZXIgbWluICgweDgwMC4uMDApLAorICAgICAgICAgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuICovCisjZGVmaW5lIFNMSklUX1NESVZNT0QJCQkoU0xKSVRfT1AwX0JBU0UgKyA1KQorI2RlZmluZSBTTEpJVF9JU0RJVk1PRAkJCShTTEpJVF9TRElWTU9EIHwgU0xKSVRfSU5UX09QKQorLyogRmxhZ3M6IEkgLSAobWF5IGRlc3Ryb3kgZmxhZ3MpCisgICBVbnNpZ25lZCBkaXZpZGUgb2YgdGhlIHZhbHVlIGluIFNMSklUX1IwIGJ5IHRoZSB2YWx1ZSBpbiBTTEpJVF9SMS4KKyAgIFRoZSByZXN1bHQgaXMgcGxhY2VkIGludG8gU0xKSVRfUjAuIFNMSklUX1IxIHByZXNlcnZlcyBpdHMgdmFsdWUuCisgICBOb3RlOiBpZiBTTEpJVF9SMSBpcyAwLCB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4KKyAgIE5vdGU6IFNMSklUX1NESVYgaXMgc2luZ2xlIHByZWNpc2lvbiBkaXZpZGUuICovCisjZGVmaW5lIFNMSklUX1VESVZJCQkJKFNMSklUX09QMF9CQVNFICsgNikKKyNkZWZpbmUgU0xKSVRfSVVESVZJCQkJKFNMSklUX1VESVZJIHwgU0xKSVRfSU5UX09QKQorLyogRmxhZ3M6IEkgLSAobWF5IGRlc3Ryb3kgZmxhZ3MpCisgICBTaWduZWQgZGl2aWRlIG9mIHRoZSB2YWx1ZSBpbiBTTEpJVF9SMCBieSB0aGUgdmFsdWUgaW4gU0xKSVRfUjEuCisgICBUaGUgcmVzdWx0IGlzIHBsYWNlZCBpbnRvIFNMSklUX1IwLiBTTEpJVF9SMSBwcmVzZXJ2ZXMgaXRzIHZhbHVlLgorICAgTm90ZTogaWYgU0xKSVRfUjEgaXMgMCwgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQuCisgICBOb3RlOiBpZiBTTEpJVF9SMSBpcyAtMSBhbmQgU0xKSVRfUjAgaXMgaW50ZWdlciBtaW4gKDB4ODAwLi4wMCksCisgICAgICAgICB0aGUgYmVoYXZpb3VyIGlzIHVuZGVmaW5lZC4KKyAgIE5vdGU6IFNMSklUX1NESVYgaXMgc2luZ2xlIHByZWNpc2lvbiBkaXZpZGUuICovCisjZGVmaW5lIFNMSklUX1NESVZJCQkJKFNMSklUX09QMF9CQVNFICsgNykKKyNkZWZpbmUgU0xKSVRfSVNESVZJCQkJKFNMSklUX1NESVZJIHwgU0xKSVRfSU5UX09QKQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3ApOworCisvKiBTdGFydGluZyBpbmRleCBvZiBvcGNvZGVzIGZvciBzbGppdF9lbWl0X29wMS4gKi8KKyNkZWZpbmUgU0xKSVRfT1AxX0JBU0UJCQkzMgorCisvKiBOb3RlcyBmb3IgTU9WIGluc3RydWN0aW9uczoKKyAgIFUgPSBNb3Ygd2l0aCB1cGRhdGUgKHByZSBmb3JtKS4gSWYgc291cmNlIG9yIGRlc3RpbmF0aW9uIGRlZmluZWQgYXMgU0xKSVRfTUVNMShyMSkKKyAgICAgICBvciBTTEpJVF9NRU0yKHIxLCByMiksIHIxIGlzIGluY3JlYXNlZCBieSB0aGUgc3VtIG9mIHIyIGFuZCB0aGUgY29uc3RhbnQgYXJndW1lbnQKKyAgIFVCID0gdW5zaWduZWQgYnl0ZSAoOCBiaXQpCisgICBTQiA9IHNpZ25lZCBieXRlICg4IGJpdCkKKyAgIFVIID0gdW5zaWduZWQgaGFsZiAoMTYgYml0KQorICAgU0ggPSBzaWduZWQgaGFsZiAoMTYgYml0KQorICAgVUkgPSB1bnNpZ25lZCBpbnQgKDMyIGJpdCkKKyAgIFNJID0gc2lnbmVkIGludCAoMzIgYml0KQorICAgUCAgPSBwb2ludGVyIChzbGppdF9wKSBzaXplICovCisKKy8qIEZsYWdzOiAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLworI2RlZmluZSBTTEpJVF9NT1YJCQkoU0xKSVRfT1AxX0JBU0UgKyAwKQorLyogRmxhZ3M6IEkgLSAobmV2ZXIgc2V0IGFueSBmbGFncykgKi8KKyNkZWZpbmUgU0xKSVRfTU9WX1VCCQkJKFNMSklUX09QMV9CQVNFICsgMSkKKyNkZWZpbmUgU0xKSVRfSU1PVl9VQgkJCShTTEpJVF9NT1ZfVUIgfCBTTEpJVF9JTlRfT1ApCisvKiBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLworI2RlZmluZSBTTEpJVF9NT1ZfU0IJCQkoU0xKSVRfT1AxX0JBU0UgKyAyKQorI2RlZmluZSBTTEpJVF9JTU9WX1NCCQkJKFNMSklUX01PVl9TQiB8IFNMSklUX0lOVF9PUCkKKy8qIEZsYWdzOiBJIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCisjZGVmaW5lIFNMSklUX01PVl9VSAkJCShTTEpJVF9PUDFfQkFTRSArIDMpCisjZGVmaW5lIFNMSklUX0lNT1ZfVUgJCQkoU0xKSVRfTU9WX1VIIHwgU0xKSVRfSU5UX09QKQorLyogRmxhZ3M6IEkgLSAobmV2ZXIgc2V0IGFueSBmbGFncykgKi8KKyNkZWZpbmUgU0xKSVRfTU9WX1NICQkJKFNMSklUX09QMV9CQVNFICsgNCkKKyNkZWZpbmUgU0xKSVRfSU1PVl9TSAkJCShTTEpJVF9NT1ZfU0ggfCBTTEpJVF9JTlRfT1ApCisvKiBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKQorICAgTm90ZTogc2VlIFNMSklUX0lOVF9PUCBmb3IgZnVydGhlciBkZXRhaWxzLiAqLworI2RlZmluZSBTTEpJVF9NT1ZfVUkJCQkoU0xKSVRfT1AxX0JBU0UgKyA1KQorLyogTm8gU0xKSVRfSU5UX09QIGZvcm0sIHNpbmNlIGl0IGlzIHRoZSBzYW1lIGFzIFNMSklUX0lNT1YuICovCisvKiBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKQorICAgTm90ZTogc2VlIFNMSklUX0lOVF9PUCBmb3IgZnVydGhlciBkZXRhaWxzLiAqLworI2RlZmluZSBTTEpJVF9NT1ZfU0kJCQkoU0xKSVRfT1AxX0JBU0UgKyA2KQorI2RlZmluZSBTTEpJVF9JTU9WCQkJKFNMSklUX01PVl9TSSB8IFNMSklUX0lOVF9PUCkKKy8qIEZsYWdzOiAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLworI2RlZmluZSBTTEpJVF9NT1ZfUAkJCShTTEpJVF9PUDFfQkFTRSArIDcpCisvKiBGbGFnczogLSAobmV2ZXIgc2V0IGFueSBmbGFncykgKi8KKyNkZWZpbmUgU0xKSVRfTU9WVQkJCShTTEpJVF9PUDFfQkFTRSArIDgpCisvKiBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLworI2RlZmluZSBTTEpJVF9NT1ZVX1VCCQkJKFNMSklUX09QMV9CQVNFICsgOSkKKyNkZWZpbmUgU0xKSVRfSU1PVlVfVUIJCQkoU0xKSVRfTU9WVV9VQiB8IFNMSklUX0lOVF9PUCkKKy8qIEZsYWdzOiBJIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCisjZGVmaW5lIFNMSklUX01PVlVfU0IJCQkoU0xKSVRfT1AxX0JBU0UgKyAxMCkKKyNkZWZpbmUgU0xKSVRfSU1PVlVfU0IJCQkoU0xKSVRfTU9WVV9TQiB8IFNMSklUX0lOVF9PUCkKKy8qIEZsYWdzOiBJIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCisjZGVmaW5lIFNMSklUX01PVlVfVUgJCQkoU0xKSVRfT1AxX0JBU0UgKyAxMSkKKyNkZWZpbmUgU0xKSVRfSU1PVlVfVUgJCQkoU0xKSVRfTU9WVV9VSCB8IFNMSklUX0lOVF9PUCkKKy8qIEZsYWdzOiBJIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCisjZGVmaW5lIFNMSklUX01PVlVfU0gJCQkoU0xKSVRfT1AxX0JBU0UgKyAxMikKKyNkZWZpbmUgU0xKSVRfSU1PVlVfU0gJCQkoU0xKSVRfTU9WVV9TSCB8IFNMSklUX0lOVF9PUCkKKy8qIEZsYWdzOiBJIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpCisgICBOb3RlOiBzZWUgU0xKSVRfSU5UX09QIGZvciBmdXJ0aGVyIGRldGFpbHMuICovCisjZGVmaW5lIFNMSklUX01PVlVfVUkJCQkoU0xKSVRfT1AxX0JBU0UgKyAxMykKKy8qIE5vIFNMSklUX0lOVF9PUCBmb3JtLCBzaW5jZSBpdCBpcyB0aGUgc2FtZSBhcyBTTEpJVF9JTU9WVS4gKi8KKy8qIEZsYWdzOiBJIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpCisgICBOb3RlOiBzZWUgU0xKSVRfSU5UX09QIGZvciBmdXJ0aGVyIGRldGFpbHMuICovCisjZGVmaW5lIFNMSklUX01PVlVfU0kJCQkoU0xKSVRfT1AxX0JBU0UgKyAxNCkKKyNkZWZpbmUgU0xKSVRfSU1PVlUJCQkoU0xKSVRfTU9WVV9TSSB8IFNMSklUX0lOVF9PUCkKKy8qIEZsYWdzOiAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLworI2RlZmluZSBTTEpJVF9NT1ZVX1AJCQkoU0xKSVRfT1AxX0JBU0UgKyAxNSkKKy8qIEZsYWdzOiBJIHwgRSB8IEsgKi8KKyNkZWZpbmUgU0xKSVRfTk9UCQkJKFNMSklUX09QMV9CQVNFICsgMTYpCisjZGVmaW5lIFNMSklUX0lOT1QJCQkoU0xKSVRfTk9UIHwgU0xKSVRfSU5UX09QKQorLyogRmxhZ3M6IEkgfCBFIHwgTyB8IEsgKi8KKyNkZWZpbmUgU0xKSVRfTkVHCQkJKFNMSklUX09QMV9CQVNFICsgMTcpCisjZGVmaW5lIFNMSklUX0lORUcJCQkoU0xKSVRfTkVHIHwgU0xKSVRfSU5UX09QKQorLyogQ291bnQgbGVhZGluZyB6ZXJvZXMKKyAgIEZsYWdzOiBJIHwgRSB8IEsKKyAgIEltcG9ydGFudCBub3RlISBTcGFyYyAzMiBkb2VzIG5vdCBzdXBwb3J0IEsgZmxhZywgc2luY2UKKyAgIHRoZSByZXF1aXJlZCBwb3BjIGluc3RydWN0aW9uIGlzIGludHJvZHVjZWQgb25seSBpbiBzcGFyYyA2NC4gKi8KKyNkZWZpbmUgU0xKSVRfQ0xaCQkJKFNMSklUX09QMV9CQVNFICsgMTgpCisjZGVmaW5lIFNMSklUX0lDTFoJCQkoU0xKSVRfQ0xaIHwgU0xKSVRfSU5UX09QKQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3Jjdyk7CisKKy8qIFN0YXJ0aW5nIGluZGV4IG9mIG9wY29kZXMgZm9yIHNsaml0X2VtaXRfb3AyLiAqLworI2RlZmluZSBTTEpJVF9PUDJfQkFTRQkJCTk2CisKKy8qIEZsYWdzOiBJIHwgRSB8IE8gfCBDIHwgSyAqLworI2RlZmluZSBTTEpJVF9BREQJCQkoU0xKSVRfT1AyX0JBU0UgKyAwKQorI2RlZmluZSBTTEpJVF9JQURECQkJKFNMSklUX0FERCB8IFNMSklUX0lOVF9PUCkKKy8qIEZsYWdzOiBJIHwgQyB8IEsgKi8KKyNkZWZpbmUgU0xKSVRfQUREQwkJCShTTEpJVF9PUDJfQkFTRSArIDEpCisjZGVmaW5lIFNMSklUX0lBRERDCQkJKFNMSklUX0FEREMgfCBTTEpJVF9JTlRfT1ApCisvKiBGbGFnczogSSB8IEUgfCBVIHwgUyB8IE8gfCBDIHwgSyAqLworI2RlZmluZSBTTEpJVF9TVUIJCQkoU0xKSVRfT1AyX0JBU0UgKyAyKQorI2RlZmluZSBTTEpJVF9JU1VCCQkJKFNMSklUX1NVQiB8IFNMSklUX0lOVF9PUCkKKy8qIEZsYWdzOiBJIHwgQyB8IEsgKi8KKyNkZWZpbmUgU0xKSVRfU1VCQwkJCShTTEpJVF9PUDJfQkFTRSArIDMpCisjZGVmaW5lIFNMSklUX0lTVUJDCQkJKFNMSklUX1NVQkMgfCBTTEpJVF9JTlRfT1ApCisvKiBOb3RlOiBpbnRlZ2VyIG11bAorICAgRmxhZ3M6IEkgfCBPIChzZWUgU0xKSVRfQ19NVUxfKikgfCBLICovCisjZGVmaW5lIFNMSklUX01VTAkJCShTTEpJVF9PUDJfQkFTRSArIDQpCisjZGVmaW5lIFNMSklUX0lNVUwJCQkoU0xKSVRfTVVMIHwgU0xKSVRfSU5UX09QKQorLyogRmxhZ3M6IEkgfCBFIHwgSyAqLworI2RlZmluZSBTTEpJVF9BTkQJCQkoU0xKSVRfT1AyX0JBU0UgKyA1KQorI2RlZmluZSBTTEpJVF9JQU5ECQkJKFNMSklUX0FORCB8IFNMSklUX0lOVF9PUCkKKy8qIEZsYWdzOiBJIHwgRSB8IEsgKi8KKyNkZWZpbmUgU0xKSVRfT1IJCQkoU0xKSVRfT1AyX0JBU0UgKyA2KQorI2RlZmluZSBTTEpJVF9JT1IJCQkoU0xKSVRfT1IgfCBTTEpJVF9JTlRfT1ApCisvKiBGbGFnczogSSB8IEUgfCBLICovCisjZGVmaW5lIFNMSklUX1hPUgkJCShTTEpJVF9PUDJfQkFTRSArIDcpCisjZGVmaW5lIFNMSklUX0lYT1IJCQkoU0xKSVRfWE9SIHwgU0xKSVRfSU5UX09QKQorLyogRmxhZ3M6IEkgfCBFIHwgSworICAgTGV0IGJpdF9sZW5ndGggYmUgdGhlIGxlbmd0aCBvZiB0aGUgc2hpZnQgb3BlcmF0aW9uOiAzMiBvciA2NC4KKyAgIElmIHNyYzIgaXMgaW1tZWRpYXRlLCBzcmMydyBpcyBtYXNrZWQgYnkgKGJpdF9sZW5ndGggLSAxKS4KKyAgIE90aGVyd2lzZSwgaWYgdGhlIGNvbnRlbnQgb2Ygc3JjMiBpcyBvdXRzaWRlIHRoZSByYW5nZSBmcm9tIDAKKyAgIHRvIGJpdF9sZW5ndGggLSAxLCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4gKi8KKyNkZWZpbmUgU0xKSVRfU0hMCQkJKFNMSklUX09QMl9CQVNFICsgOCkKKyNkZWZpbmUgU0xKSVRfSVNITAkJCShTTEpJVF9TSEwgfCBTTEpJVF9JTlRfT1ApCisvKiBGbGFnczogSSB8IEUgfCBLCisgICBMZXQgYml0X2xlbmd0aCBiZSB0aGUgbGVuZ3RoIG9mIHRoZSBzaGlmdCBvcGVyYXRpb246IDMyIG9yIDY0LgorICAgSWYgc3JjMiBpcyBpbW1lZGlhdGUsIHNyYzJ3IGlzIG1hc2tlZCBieSAoYml0X2xlbmd0aCAtIDEpLgorICAgT3RoZXJ3aXNlLCBpZiB0aGUgY29udGVudCBvZiBzcmMyIGlzIG91dHNpZGUgdGhlIHJhbmdlIGZyb20gMAorICAgdG8gYml0X2xlbmd0aCAtIDEsIHRoZSByZXN1bHQgaXMgdW5kZWZpbmVkLiAqLworI2RlZmluZSBTTEpJVF9MU0hSCQkJKFNMSklUX09QMl9CQVNFICsgOSkKKyNkZWZpbmUgU0xKSVRfSUxTSFIJCQkoU0xKSVRfTFNIUiB8IFNMSklUX0lOVF9PUCkKKy8qIEZsYWdzOiBJIHwgRSB8IEsKKyAgIExldCBiaXRfbGVuZ3RoIGJlIHRoZSBsZW5ndGggb2YgdGhlIHNoaWZ0IG9wZXJhdGlvbjogMzIgb3IgNjQuCisgICBJZiBzcmMyIGlzIGltbWVkaWF0ZSwgc3JjMncgaXMgbWFza2VkIGJ5IChiaXRfbGVuZ3RoIC0gMSkuCisgICBPdGhlcndpc2UsIGlmIHRoZSBjb250ZW50IG9mIHNyYzIgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgZnJvbSAwCisgICB0byBiaXRfbGVuZ3RoIC0gMSwgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuICovCisjZGVmaW5lIFNMSklUX0FTSFIJCQkoU0xKSVRfT1AyX0JBU0UgKyAxMCkKKyNkZWZpbmUgU0xKSVRfSUFTSFIJCQkoU0xKSVRfQVNIUiB8IFNMSklUX0lOVF9PUCkKKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydyk7CisKKy8qIFJldHVybnMgd2l0aCBub24temVybyBpZiBmcHUgaXMgYXZhaWxhYmxlLiAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKTsKKworLyogU3RhcnRpbmcgaW5kZXggb2Ygb3Bjb2RlcyBmb3Igc2xqaXRfZW1pdF9mb3AxLiAqLworI2RlZmluZSBTTEpJVF9GT1AxX0JBU0UJCQkxMjgKKworLyogRmxhZ3M6IFNQIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCisjZGVmaW5lIFNMSklUX0RNT1YJCQkoU0xKSVRfRk9QMV9CQVNFICsgMCkKKyNkZWZpbmUgU0xKSVRfU01PVgkJCShTTEpJVF9ETU9WIHwgU0xKSVRfU0lOR0xFX09QKQorLyogQ29udmVydCBvcGNvZGVzOiBDT05WW0RTVF9UWVBFXS5GUk9NW1NSQ19UWVBFXQorICAgU1JDL0RTVCBUWVBFIGNhbiBiZTogRCAtIGRvdWJsZSwgUyAtIHNpbmdsZSwgVyAtIHNpZ25lZCB3b3JkLCBJIC0gc2lnbmVkIGludAorICAgUm91bmRpbmcgbW9kZSB3aGVuIHRoZSBkZXN0aW5hdGlvbiBpcyBXIG9yIEk6IHJvdW5kIHRvd2FyZHMgemVyby4gKi8KKy8qIEZsYWdzOiBTUCAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLworI2RlZmluZSBTTEpJVF9DT05WRF9GUk9NUwkJKFNMSklUX0ZPUDFfQkFTRSArIDEpCisjZGVmaW5lIFNMSklUX0NPTlZTX0ZST01ECQkoU0xKSVRfQ09OVkRfRlJPTVMgfCBTTEpJVF9TSU5HTEVfT1ApCisvKiBGbGFnczogU1AgLSAobmV2ZXIgc2V0IGFueSBmbGFncykgKi8KKyNkZWZpbmUgU0xKSVRfQ09OVldfRlJPTUQJCShTTEpJVF9GT1AxX0JBU0UgKyAyKQorI2RlZmluZSBTTEpJVF9DT05WV19GUk9NUwkJKFNMSklUX0NPTlZXX0ZST01EIHwgU0xKSVRfU0lOR0xFX09QKQorLyogRmxhZ3M6IFNQIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCisjZGVmaW5lIFNMSklUX0NPTlZJX0ZST01ECQkoU0xKSVRfRk9QMV9CQVNFICsgMykKKyNkZWZpbmUgU0xKSVRfQ09OVklfRlJPTVMJCShTTEpJVF9DT05WSV9GUk9NRCB8IFNMSklUX1NJTkdMRV9PUCkKKy8qIEZsYWdzOiBTUCAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLworI2RlZmluZSBTTEpJVF9DT05WRF9GUk9NVwkJKFNMSklUX0ZPUDFfQkFTRSArIDQpCisjZGVmaW5lIFNMSklUX0NPTlZTX0ZST01XCQkoU0xKSVRfQ09OVkRfRlJPTVcgfCBTTEpJVF9TSU5HTEVfT1ApCisvKiBGbGFnczogU1AgLSAobmV2ZXIgc2V0IGFueSBmbGFncykgKi8KKyNkZWZpbmUgU0xKSVRfQ09OVkRfRlJPTUkJCShTTEpJVF9GT1AxX0JBU0UgKyA1KQorI2RlZmluZSBTTEpJVF9DT05WU19GUk9NSQkJKFNMSklUX0NPTlZEX0ZST01JIHwgU0xKSVRfU0lOR0xFX09QKQorLyogTm90ZTogZHN0IGlzIHRoZSBsZWZ0IGFuZCBzcmMgaXMgdGhlIHJpZ2h0IG9wZXJhbmQgZm9yIFNMSklUX0NNUEQuCisgICBOb3RlOiBOYU4gY2hlY2sgaXMgYWx3YXlzIHBlcmZvcm1lZC4gSWYgU0xKSVRfQ19GTE9BVF9VTk9SREVSRUQgZmxhZworICAgICAgICAgaXMgc2V0LCB0aGUgY29tcGFyaXNvbiByZXN1bHQgaXMgdW5wcmVkaWN0YWJsZS4KKyAgIEZsYWdzOiBTUCB8IEUgfCBTIChzZWUgU0xKSVRfQ19GTE9BVF8qKSAqLworI2RlZmluZSBTTEpJVF9EQ01QCQkJKFNMSklUX0ZPUDFfQkFTRSArIDYpCisjZGVmaW5lIFNMSklUX1NDTVAJCQkoU0xKSVRfRENNUCB8IFNMSklUX1NJTkdMRV9PUCkKKy8qIEZsYWdzOiBTUCAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLworI2RlZmluZSBTTEpJVF9ETkVHCQkJKFNMSklUX0ZPUDFfQkFTRSArIDcpCisjZGVmaW5lIFNMSklUX1NORUcJCQkoU0xKSVRfRE5FRyB8IFNMSklUX1NJTkdMRV9PUCkKKy8qIEZsYWdzOiBTUCAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLworI2RlZmluZSBTTEpJVF9EQUJTCQkJKFNMSklUX0ZPUDFfQkFTRSArIDgpCisjZGVmaW5lIFNMSklUX1NBQlMJCQkoU0xKSVRfREFCUyB8IFNMSklUX1NJTkdMRV9PUCkKKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KTsKKworLyogU3RhcnRpbmcgaW5kZXggb2Ygb3Bjb2RlcyBmb3Igc2xqaXRfZW1pdF9mb3AyLiAqLworI2RlZmluZSBTTEpJVF9GT1AyX0JBU0UJCQkxNjAKKworLyogRmxhZ3M6IFNQIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCisjZGVmaW5lIFNMSklUX0RBREQJCQkoU0xKSVRfRk9QMl9CQVNFICsgMCkKKyNkZWZpbmUgU0xKSVRfU0FERAkJCShTTEpJVF9EQUREIHwgU0xKSVRfU0lOR0xFX09QKQorLyogRmxhZ3M6IFNQIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCisjZGVmaW5lIFNMSklUX0RTVUIJCQkoU0xKSVRfRk9QMl9CQVNFICsgMSkKKyNkZWZpbmUgU0xKSVRfU1NVQgkJCShTTEpJVF9EU1VCIHwgU0xKSVRfU0lOR0xFX09QKQorLyogRmxhZ3M6IFNQIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCisjZGVmaW5lIFNMSklUX0RNVUwJCQkoU0xKSVRfRk9QMl9CQVNFICsgMikKKyNkZWZpbmUgU0xKSVRfU01VTAkJCShTTEpJVF9ETVVMIHwgU0xKSVRfU0lOR0xFX09QKQorLyogRmxhZ3M6IFNQIC0gKG5ldmVyIHNldCBhbnkgZmxhZ3MpICovCisjZGVmaW5lIFNMSklUX0RESVYJCQkoU0xKSVRfRk9QMl9CQVNFICsgMykKKyNkZWZpbmUgU0xKSVRfU0RJVgkJCShTTEpJVF9ERElWIHwgU0xKSVRfU0lOR0xFX09QKQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydyk7CisKKy8qIExhYmVsIGFuZCBqdW1wIGluc3RydWN0aW9ucy4gKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9sYWJlbCogc2xqaXRfZW1pdF9sYWJlbChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKTsKKworLyogSW52ZXJ0IChuZWdhdGUpIGNvbmRpdGlvbmFsIHR5cGU6IHhvciAoXikgd2l0aCAweDEgKi8KKworLyogSW50ZWdlciBjb21wYXJpc29uIHR5cGVzLiAqLworI2RlZmluZSBTTEpJVF9FUVVBTAkJCTAKKyNkZWZpbmUgU0xKSVRfSV9FUVVBTAkJCShTTEpJVF9FUVVBTCB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfWkVSTwkJCTAKKyNkZWZpbmUgU0xKSVRfSV9aRVJPCQkJKFNMSklUX1pFUk8gfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX05PVF9FUVVBTAkJCTEKKyNkZWZpbmUgU0xKSVRfSV9OT1RfRVFVQUwJCShTTEpJVF9OT1RfRVFVQUwgfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX05PVF9aRVJPCQkJMQorI2RlZmluZSBTTEpJVF9JX05PVF9aRVJPCQkoU0xKSVRfTk9UX1pFUk8gfCBTTEpJVF9JTlRfT1ApCisKKyNkZWZpbmUgU0xKSVRfTEVTUwkJCTIKKyNkZWZpbmUgU0xKSVRfSV9MRVNTCQkJKFNMSklUX0xFU1MgfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX0dSRUFURVJfRVFVQUwJCTMKKyNkZWZpbmUgU0xKSVRfSV9HUkVBVEVSX0VRVUFMCQkoU0xKSVRfR1JFQVRFUl9FUVVBTCB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfR1JFQVRFUgkJCTQKKyNkZWZpbmUgU0xKSVRfSV9HUkVBVEVSCQkJKFNMSklUX0dSRUFURVIgfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX0xFU1NfRVFVQUwJCTUKKyNkZWZpbmUgU0xKSVRfSV9MRVNTX0VRVUFMCQkoU0xKSVRfTEVTU19FUVVBTCB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfU0lHX0xFU1MJCQk2CisjZGVmaW5lIFNMSklUX0lfU0lHX0xFU1MJCShTTEpJVF9TSUdfTEVTUyB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfU0lHX0dSRUFURVJfRVFVQUwJCTcKKyNkZWZpbmUgU0xKSVRfSV9TSUdfR1JFQVRFUl9FUVVBTAkoU0xKSVRfU0lHX0dSRUFURVJfRVFVQUwgfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX1NJR19HUkVBVEVSCQk4CisjZGVmaW5lIFNMSklUX0lfU0lHX0dSRUFURVIJCShTTEpJVF9TSUdfR1JFQVRFUiB8IFNMSklUX0lOVF9PUCkKKyNkZWZpbmUgU0xKSVRfU0lHX0xFU1NfRVFVQUwJCTkKKyNkZWZpbmUgU0xKSVRfSV9TSUdfTEVTU19FUVVBTAkJKFNMSklUX1NJR19MRVNTX0VRVUFMIHwgU0xKSVRfSU5UX09QKQorCisjZGVmaW5lIFNMSklUX09WRVJGTE9XCQkJMTAKKyNkZWZpbmUgU0xKSVRfSV9PVkVSRkxPVwkJKFNMSklUX09WRVJGTE9XIHwgU0xKSVRfSU5UX09QKQorI2RlZmluZSBTTEpJVF9OT1RfT1ZFUkZMT1cJCTExCisjZGVmaW5lIFNMSklUX0lfTk9UX09WRVJGTE9XCQkoU0xKSVRfTk9UX09WRVJGTE9XIHwgU0xKSVRfSU5UX09QKQorCisjZGVmaW5lIFNMSklUX01VTF9PVkVSRkxPVwkJMTIKKyNkZWZpbmUgU0xKSVRfSV9NVUxfT1ZFUkZMT1cJCShTTEpJVF9NVUxfT1ZFUkZMT1cgfCBTTEpJVF9JTlRfT1ApCisjZGVmaW5lIFNMSklUX01VTF9OT1RfT1ZFUkZMT1cJCTEzCisjZGVmaW5lIFNMSklUX0lfTVVMX05PVF9PVkVSRkxPVwkoU0xKSVRfTVVMX05PVF9PVkVSRkxPVyB8IFNMSklUX0lOVF9PUCkKKworLyogRmxvYXRpbmcgcG9pbnQgY29tcGFyaXNvbiB0eXBlcy4gKi8KKyNkZWZpbmUgU0xKSVRfRF9FUVVBTAkJCTE0CisjZGVmaW5lIFNMSklUX1NfRVFVQUwJCQkoU0xKSVRfRF9FUVVBTCB8IFNMSklUX1NJTkdMRV9PUCkKKyNkZWZpbmUgU0xKSVRfRF9OT1RfRVFVQUwJCTE1CisjZGVmaW5lIFNMSklUX1NfTk9UX0VRVUFMCQkoU0xKSVRfRF9OT1RfRVFVQUwgfCBTTEpJVF9TSU5HTEVfT1ApCisjZGVmaW5lIFNMSklUX0RfTEVTUwkJCTE2CisjZGVmaW5lIFNMSklUX1NfTEVTUwkJCShTTEpJVF9EX0xFU1MgfCBTTEpJVF9TSU5HTEVfT1ApCisjZGVmaW5lIFNMSklUX0RfR1JFQVRFUl9FUVVBTAkJMTcKKyNkZWZpbmUgU0xKSVRfU19HUkVBVEVSX0VRVUFMCQkoU0xKSVRfRF9HUkVBVEVSX0VRVUFMIHwgU0xKSVRfU0lOR0xFX09QKQorI2RlZmluZSBTTEpJVF9EX0dSRUFURVIJCQkxOAorI2RlZmluZSBTTEpJVF9TX0dSRUFURVIJCQkoU0xKSVRfRF9HUkVBVEVSIHwgU0xKSVRfU0lOR0xFX09QKQorI2RlZmluZSBTTEpJVF9EX0xFU1NfRVFVQUwJCTE5CisjZGVmaW5lIFNMSklUX1NfTEVTU19FUVVBTAkJKFNMSklUX0RfTEVTU19FUVVBTCB8IFNMSklUX1NJTkdMRV9PUCkKKyNkZWZpbmUgU0xKSVRfRF9VTk9SREVSRUQJCTIwCisjZGVmaW5lIFNMSklUX1NfVU5PUkRFUkVECQkoU0xKSVRfRF9VTk9SREVSRUQgfCBTTEpJVF9TSU5HTEVfT1ApCisjZGVmaW5lIFNMSklUX0RfT1JERVJFRAkJCTIxCisjZGVmaW5lIFNMSklUX1NfT1JERVJFRAkJCShTTEpJVF9EX09SREVSRUQgfCBTTEpJVF9TSU5HTEVfT1ApCisKKy8qIFVuY29uZGl0aW9uYWwganVtcCB0eXBlcy4gKi8KKyNkZWZpbmUgU0xKSVRfSlVNUAkJCTIyCisjZGVmaW5lIFNMSklUX0ZBU1RfQ0FMTAkJCTIzCisjZGVmaW5lIFNMSklUX0NBTEwwCQkJMjQKKyNkZWZpbmUgU0xKSVRfQ0FMTDEJCQkyNQorI2RlZmluZSBTTEpJVF9DQUxMMgkJCTI2CisjZGVmaW5lIFNMSklUX0NBTEwzCQkJMjcKKworLyogRmFzdCBjYWxsaW5nIG1ldGhvZC4gU2VlIHNsaml0X2VtaXRfZmFzdF9lbnRlciAvIHNsaml0X2VtaXRfZmFzdF9yZXR1cm4uICovCisKKy8qIFRoZSB0YXJnZXQgY2FuIGJlIGNoYW5nZWQgZHVyaW5nIHJ1bnRpbWUgKHNlZTogc2xqaXRfc2V0X2p1bXBfYWRkcikuICovCisjZGVmaW5lIFNMSklUX1JFV1JJVEFCTEVfSlVNUAkJMHgxMDAwCisKKy8qIEVtaXQgYSBqdW1wIGluc3RydWN0aW9uLiBUaGUgZGVzdGluYXRpb24gaXMgbm90IHNldCwgb25seSB0aGUgdHlwZSBvZiB0aGUganVtcC4KKyAgICB0eXBlIG11c3QgYmUgYmV0d2VlbiBTTEpJVF9FUVVBTCBhbmQgU0xKSVRfQ0FMTDMKKyAgICB0eXBlIGNhbiBiZSBjb21iaW5lZCAob3InZWQpIHdpdGggU0xKSVRfUkVXUklUQUJMRV9KVU1QCisgICBGbGFnczogLSAobmV2ZXIgc2V0IGFueSBmbGFncykgZm9yIGJvdGggY29uZGl0aW9uYWwgYW5kIHVuY29uZGl0aW9uYWwganVtcHMuCisgICBGbGFnczogZGVzdHJveSBhbGwgZmxhZ3MgZm9yIGNhbGxzLiAqLworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSk7CisKKy8qIEJhc2ljIGFyaXRobWV0aWMgY29tcGFyaXNvbi4gSW4gbW9zdCBhcmNoaXRlY3R1cmVzIGl0IGlzIGltcGxlbWVudGVkIGFzCisgICBhbiBTTEpJVF9TVUIgb3BlcmF0aW9uICh3aXRoIFNMSklUX1VOVVNFRCBkZXN0aW5hdGlvbiBhbmQgc2V0dGluZworICAgYXBwcm9wcmlhdGUgZmxhZ3MpIGZvbGxvd2VkIGJ5IGEgc2xqaXRfZW1pdF9qdW1wLiBIb3dldmVyIHNvbWUKKyAgIGFyY2hpdGVjdHVyZXMgKGkuZTogQVJNNjQgb3IgTUlQUykgbWF5IGVtcGxveSBzcGVjaWFsIG9wdGltaXphdGlvbnMgaGVyZS4KKyAgIEl0IGlzIHN1Z2dlc3RlZCB0byB1c2UgdGhpcyBjb21wYXJpc29uIGZvcm0gd2hlbiBhcHByb3ByaWF0ZS4KKyAgICB0eXBlIG11c3QgYmUgYmV0d2VlbiBTTEpJVF9FUVVBTCBhbmQgU0xKSVRfSV9TSUdfTEVTU19FUVVBTAorICAgIHR5cGUgY2FuIGJlIGNvbWJpbmVkIChvcidlZCkgd2l0aCBTTEpJVF9SRVdSSVRBQkxFX0pVTVAKKyAgIEZsYWdzOiBkZXN0cm95IGZsYWdzLiAqLworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KTsKKworLyogQmFzaWMgZmxvYXRpbmcgcG9pbnQgY29tcGFyaXNvbi4gSW4gbW9zdCBhcmNoaXRlY3R1cmVzIGl0IGlzIGltcGxlbWVudGVkIGFzCisgICBhbiBTTEpJVF9GQ01QIG9wZXJhdGlvbiAoc2V0dGluZyBhcHByb3ByaWF0ZSBmbGFncykgZm9sbG93ZWQgYnkgYQorICAgc2xqaXRfZW1pdF9qdW1wLiBIb3dldmVyIHNvbWUgYXJjaGl0ZWN0dXJlcyAoaS5lOiBNSVBTKSBtYXkgZW1wbG95CisgICBzcGVjaWFsIG9wdGltaXphdGlvbnMgaGVyZS4gSXQgaXMgc3VnZ2VzdGVkIHRvIHVzZSB0aGlzIGNvbXBhcmlzb24gZm9ybQorICAgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICB0eXBlIG11c3QgYmUgYmV0d2VlbiBTTEpJVF9EX0VRVUFMIGFuZCBTTEpJVF9TX09SREVSRUQKKyAgICB0eXBlIGNhbiBiZSBjb21iaW5lZCAob3InZWQpIHdpdGggU0xKSVRfUkVXUklUQUJMRV9KVU1QCisgICBGbGFnczogZGVzdHJveSBmbGFncy4KKyAgIE5vdGU6IGlmIGVpdGhlciBvcGVyYW5kIGlzIE5hTiwgdGhlIGJlaGF2aW91ciBpcyB1bmRlZmluZWQgZm9yCisgICAgICAgICB0eXBlcyB1cCB0byBTTEpJVF9TX0xFU1NfRVFVQUwuICovCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfZmNtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KTsKKworLyogU2V0IHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUganVtcCB0byB0aGlzIGxhYmVsLiAqLworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2xhYmVsKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzdHJ1Y3Qgc2xqaXRfbGFiZWwqIGxhYmVsKTsKKy8qIFNldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBvZiB0aGUganVtcCB0byB0aGlzIGxhYmVsLiAqLworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X3RhcmdldChzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfdXcgdGFyZ2V0KTsKKworLyogQ2FsbCBmdW5jdGlvbiBvciBqdW1wIGFueXdoZXJlLiBCb3RoIGRpcmVjdCBhbmQgaW5kaXJlY3QgZm9ybQorICAgIHR5cGUgbXVzdCBiZSBiZXR3ZWVuIFNMSklUX0pVTVAgYW5kIFNMSklUX0NBTEwzCisgICAgRGlyZWN0IGZvcm06IHNldCBzcmMgdG8gU0xKSVRfSU1NKCkgYW5kIHNyY3cgdG8gdGhlIGFkZHJlc3MKKyAgICBJbmRpcmVjdCBmb3JtOiBhbnkgb3RoZXIgdmFsaWQgYWRkcmVzc2luZyBtb2RlCisgICBGbGFnczogLSAobmV2ZXIgc2V0IGFueSBmbGFncykgZm9yIHVuY29uZGl0aW9uYWwganVtcHMuCisgICBGbGFnczogZGVzdHJveSBhbGwgZmxhZ3MgZm9yIGNhbGxzLiAqLworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KTsKKworLyogUGVyZm9ybSB0aGUgb3BlcmF0aW9uIHVzaW5nIHRoZSBjb25kaXRpb25hbCBmbGFncyBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LgorICAgVHlwZSBtdXN0IGFsd2F5cyBiZSBiZXR3ZWVuIFNMSklUX0VRVUFMIGFuZCBTTEpJVF9TX09SREVSRUQuIFRoZSB2YWx1ZQorICAgcmVwcmVzZW50ZWQgYnkgdGhlIHR5cGUgaXMgMSwgaWYgdGhlIGNvbmRpdGlvbiByZXByZXNlbnRlZCBieSB0aGUgdHlwZQorICAgaXMgZnVsZmlsbGVkLCBhbmQgMCBvdGhlcndpc2UuCisKKyAgIElmIG9wID09IFNMSklUX01PViwgU0xKSVRfTU9WX1NJLCBTTEpJVF9NT1ZfVUk6CisgICAgIFNldCBkc3QgdG8gdGhlIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSB0eXBlICgwIG9yIDEpLgorICAgICBTcmMgbXVzdCBiZSBTTEpJVF9VTlVTRUQsIGFuZCBzcmN3IG11c3QgYmUgMAorICAgICBGbGFnczogLSAobmV2ZXIgc2V0IGFueSBmbGFncykKKyAgIElmIG9wID09IFNMSklUX09SLCBvcCA9PSBTTEpJVF9BTkQsIG9wID09IFNMSklUX1hPUgorICAgICBQZXJmb3JtcyB0aGUgYmluYXJ5IG9wZXJhdGlvbiB1c2luZyBzcmMgYXMgdGhlIGZpcnN0LCBhbmQgdGhlIHZhbHVlCisgICAgIHJlcHJlc2VudGVkIGJ5IHR5cGUgYXMgdGhlIHNlY29uZCBhcmd1bWVudC4KKyAgICAgSW1wb3J0YW50IG5vdGU6IG9ubHkgZHN0PXNyYyBhbmQgZHN0dz1zcmN3IGlzIHN1cHBvcnRlZCBhdCB0aGUgbW9tZW50IQorICAgICBGbGFnczogSSB8IEUgfCBLCisgICBOb3RlOiBzbGppdF9lbWl0X29wX2ZsYWdzIGRvZXMgbm90aGluZywgaWYgZHN0IGlzIFNMSklUX1VOVVNFRCAocmVnYXJkbGVzcyBvZiBvcCkuICovCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3LAorCXNsaml0X3NpIHR5cGUpOworCisvKiBDb3BpZXMgdGhlIGJhc2UgYWRkcmVzcyBvZiBTTEpJVF9TUCArIG9mZnNldCB0byBkc3QuCisgICBGbGFnczogLSAobmV2ZXIgc2V0IGFueSBmbGFncykgKi8KK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfbG9jYWxfYmFzZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IG9mZnNldCk7CisKKy8qIFRoZSBjb25zdGFudCBjYW4gYmUgY2hhbmdlZCBydW50aW1lIChzZWU6IHNsaml0X3NldF9jb25zdCkKKyAgIEZsYWdzOiAtIChuZXZlciBzZXQgYW55IGZsYWdzKSAqLworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCogc2xqaXRfZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IGluaXRfdmFsdWUpOworCisvKiBBZnRlciB0aGUgY29kZSBnZW5lcmF0aW9uIHRoZSBhZGRyZXNzIGZvciBsYWJlbCwganVtcCBhbmQgY29uc3QgaW5zdHJ1Y3Rpb25zCisgICBhcmUgY29tcHV0ZWQuIFNpbmNlIHRoZXNlIHN0cnVjdHVyZXMgYXJlIGZyZWVkIGJ5IHNsaml0X2ZyZWVfY29tcGlsZXIsIHRoZQorICAgYWRkcmVzc2VzIG11c3QgYmUgcHJlc2VydmVkIGJ5IHRoZSB1c2VyIHByb2dyYW0gZWxzZXdlcmUuICovCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3V3IHNsaml0X2dldF9sYWJlbF9hZGRyKHN0cnVjdCBzbGppdF9sYWJlbCAqbGFiZWwpIHsgcmV0dXJuIGxhYmVsLT5hZGRyOyB9CitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3V3IHNsaml0X2dldF9qdW1wX2FkZHIoc3RydWN0IHNsaml0X2p1bXAgKmp1bXApIHsgcmV0dXJuIGp1bXAtPmFkZHI7IH0KK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfdXcgc2xqaXRfZ2V0X2NvbnN0X2FkZHIoc3RydWN0IHNsaml0X2NvbnN0ICpjb25zdF8pIHsgcmV0dXJuIGNvbnN0Xy0+YWRkcjsgfQorCisvKiBPbmx5IHRoZSBhZGRyZXNzIGlzIHJlcXVpcmVkIHRvIHJld3JpdGUgdGhlIGNvZGUuICovCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfanVtcF9hZGRyKHNsaml0X3V3IGFkZHIsIHNsaml0X3V3IG5ld19hZGRyKTsKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9jb25zdChzbGppdF91dyBhZGRyLCBzbGppdF9zdyBuZXdfY29uc3RhbnQpOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBNaXNjZWxsYW5lb3VzIHV0aWxpdHkgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgU0xKSVRfTUFKT1JfVkVSU0lPTgkwCisjZGVmaW5lIFNMSklUX01JTk9SX1ZFUlNJT04JOTMKKworLyogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBuYW1lIG9mIHRoZSBwbGF0Zm9ybS4gQ2FuIGJlIHVzZWZ1bCBvbiBwbGF0Zm9ybXMKKyAgIGxpa2UgQVJNLCB3aGVyZSBBUk0gYW5kIFRodW1iMiBmdW5jdGlvbnMgY2FuIGJlIG1peGVkLCBhbmQKKyAgIGl0IGlzIHVzZWZ1bCB0byBrbm93IHRoZSB0eXBlIG9mIHRoZSBjb2RlIGdlbmVyYXRvci4gKi8KK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBTTEpJVF9DT05TVCBjaGFyKiBzbGppdF9nZXRfcGxhdGZvcm1fbmFtZSh2b2lkKTsKKworLyogUG9ydGFibGUgaGVscGVyIGZ1bmN0aW9uIHRvIGdldCBhbiBvZmZzZXQgb2YgYSBtZW1iZXIuICovCisjZGVmaW5lIFNMSklUX09GRlNFVE9GKGJhc2UsIG1lbWJlcikgKChzbGppdF9zdykoJigoYmFzZSopMHgxMCktPm1lbWJlcikgLSAweDEwKQorCisjaWYgKGRlZmluZWQgU0xKSVRfVVRJTF9HTE9CQUxfTE9DSyAmJiBTTEpJVF9VVElMX0dMT0JBTF9MT0NLKQorLyogVGhpcyBnbG9iYWwgbG9jayBpcyB1c2VmdWwgdG8gY29tcGlsZSBjb21tb24gZnVuY3Rpb25zLiAqLworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgU0xKSVRfQ0FMTCBzbGppdF9ncmFiX2xvY2sodm9pZCk7CitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBTTEpJVF9DQUxMIHNsaml0X3JlbGVhc2VfbG9jayh2b2lkKTsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfVVRJTF9TVEFDSyAmJiBTTEpJVF9VVElMX1NUQUNLKQorCisvKiBUaGUgc2xqaXRfc3RhY2sgaXMgYSB1dGlsaXkgZmVhdHVyZSBvZiBzbGppdCwgd2hpY2ggYWxsb2NhdGVzIGEKKyAgIHdyaXRhYmxlIG1lbW9yeSByZWdpb24gYmV0d2VlbiBiYXNlIChpbmNsdXNpdmUpIGFuZCBsaW1pdCAoZXhjbHVzaXZlKS4KKyAgIEJvdGggYmFzZSBhbmQgbGltaXQgaXMgYSBwb2ludGVyLCBhbmQgYmFzZSBpcyBhbHdheXMgPD0gdGhhbiBsaW1pdC4KKyAgIFRoaXMgZmVhdHVyZSB1c2VzIHRoZSAiYWRkcmVzcyBzcGFjZSByZXNlcnZlIiBmZWF0dXJlCisgICBvZiBtb2Rlcm4gb3BlcmF0aW5nIHN5c3RlbXMuIEJhc2ljYWxseSB3ZSBkb24ndCBuZWVkIHRvIGFsbG9jYXRlIGEKKyAgIGh1Z2UgbWVtb3J5IGJsb2NrIGluIG9uZSBzdGVwIGZvciB0aGUgd29yc3QgY2FzZSwgd2UgY2FuIHN0YXJ0IHdpdGgKKyAgIGEgc21hbGxlciBjaHVuayBhbmQgZXh0ZW5kIGl0IGxhdGVyLiBTaW5jZSB0aGUgYWRkcmVzcyBzcGFjZSBpcworICAgcmVzZXJ2ZWQsIHRoZSBkYXRhIG5ldmVyIGNvcGllZCB0byBvdGhlciByZWdpb25zLCB0aHVzIGl0IGlzIHNhZmUKKyAgIHRvIHN0b3JlIHBvaW50ZXJzIGhlcmUuICovCisKKy8qIE5vdGU6IFRoZSBiYXNlIGZpZWxkIGlzIGFsaWduZWQgdG8gUEFHRV9TSVpFIGJ5dGVzICh1c3VhbGx5IDRrIG9yIG1vcmUpLgorICAgTm90ZTogc3RhY2sgZ3Jvd2luZyBzaG91bGQgbm90IGhhcHBlbiBpbiBzbWFsbCBzdGVwczogNGssIDE2ayBvciBldmVuCisgICAgIGJpZ2dlciBncm93dGggaXMgYmV0dGVyLgorICAgTm90ZTogdGhpcyBzdHJ1Y3R1cmUgbWF5IG5vdCBiZSBzdXBwb3J0ZWQgYnkgYWxsIG9wZXJhdGluZyBzeXN0ZW1zLgorICAgICBTb21lIGtpbmQgb2YgZmFsbGJhY2sgbWVjaGFuaXNtIGlzIHN1Z2dlc3RlZCB3aGVuIFNMSklUX1VUSUxfU1RBQ0sKKyAgICAgaXMgbm90IGRlZmluZWQuICovCisKK3N0cnVjdCBzbGppdF9zdGFjayB7CisJLyogVXNlciBkYXRhLCBhbnl0aGluZyBjYW4gYmUgc3RvcmVkIGhlcmUuCisJICAgU3RhcnRpbmcgd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyBiYXNlLiAqLworCXNsaml0X3V3IHRvcDsKKwkvKiBUaGVzZSBtZW1iZXJzIGFyZSByZWFkIG9ubHkuICovCisJc2xqaXRfdXcgYmFzZTsKKwlzbGppdF91dyBsaW1pdDsKKwlzbGppdF91dyBtYXhfbGltaXQ7Cit9OworCisvKiBSZXR1cm5zIE5VTEwgaWYgdW5zdWNjZXNzZnVsLgorICAgTm90ZTogbGltaXQgYW5kIG1heF9saW1pdCBjb250YWlucyB0aGUgc2l6ZSBmb3Igc3RhY2sgYWxsb2NhdGlvbi4KKyAgIE5vdGU6IHRoZSB0b3AgZmllbGQgaXMgaW5pdGlhbGl6ZWQgdG8gYmFzZS4KKyAgIE5vdGU6IHNlZSBzbGppdF9jcmVhdGVfY29tcGlsZXIgZm9yIHRoZSBleHBsYW5hdGlvbiBvZiBhbGxvY2F0b3JfZGF0YS4gKi8KK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfc3RhY2sqIFNMSklUX0NBTEwgc2xqaXRfYWxsb2NhdGVfc3RhY2soc2xqaXRfdXcgbGltaXQsIHNsaml0X3V3IG1heF9saW1pdCwgdm9pZCAqYWxsb2NhdG9yX2RhdGEpOworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgU0xKSVRfQ0FMTCBzbGppdF9mcmVlX3N0YWNrKHN0cnVjdCBzbGppdF9zdGFjayAqc3RhY2ssIHZvaWQgKmFsbG9jYXRvcl9kYXRhKTsKKworLyogQ2FuIGJlIHVzZWQgdG8gaW5jcmVhc2UgKGFsbG9jYXRlKSBvciBkZWNyZWFzZSAoZnJlZSkgdGhlIG1lbW9yeSBhcmVhLgorICAgUmV0dXJucyB3aXRoIGEgbm9uLXplcm8gdmFsdWUgaWYgdW5zdWNjZXNzZnVsLiBJZiBuZXdfbGltaXQgaXMgZ3JlYXRlciB0aGFuCisgICBtYXhfbGltaXQsIGl0IHdpbGwgZmFpbC4gSXQgaXMgdmVyeSBlYXN5IHRvIGltcGxlbWVudCBhIHN0YWNrIGRhdGEgc3RydWN0dXJlLAorICAgc2luY2UgdGhlIGdyb3d0aCByYXRpbyBjYW4gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgbGltaXQsIGFuZCBzbGppdF9zdGFja19yZXNpemUKKyAgIHdpbGwgZG8gYWxsIHRoZSBuZWNlc3NhcnkgY2hlY2tzLiBUaGUgZmllbGRzIG9mIHRoZSBzdGFjayBhcmUgbm90IGNoYW5nZWQgaWYKKyAgIHNsaml0X3N0YWNrX3Jlc2l6ZSBmYWlscy4gKi8KK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zdyBTTEpJVF9DQUxMIHNsaml0X3N0YWNrX3Jlc2l6ZShzdHJ1Y3Qgc2xqaXRfc3RhY2sgKnN0YWNrLCBzbGppdF91dyBuZXdfbGltaXQpOworCisjZW5kaWYgLyogKGRlZmluZWQgU0xKSVRfVVRJTF9TVEFDSyAmJiBTTEpJVF9VVElMX1NUQUNLKSAqLworCisjaWYgIShkZWZpbmVkIFNMSklUX0lORElSRUNUX0NBTEwgJiYgU0xKSVRfSU5ESVJFQ1RfQ0FMTCkKKworLyogR2V0IHRoZSBlbnRyeSBhZGRyZXNzIG9mIGEgZ2l2ZW4gZnVuY3Rpb24uICovCisjZGVmaW5lIFNMSklUX0ZVTkNfT0ZGU0VUKGZ1bmNfbmFtZSkJKChzbGppdF9zdylmdW5jX25hbWUpCisKKyNlbHNlIC8qICEoZGVmaW5lZCBTTEpJVF9JTkRJUkVDVF9DQUxMICYmIFNMSklUX0lORElSRUNUX0NBTEwpICovCisKKy8qIEFsbCBKSVQgcmVsYXRlZCBjb2RlIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlIHNhbWUgY29udGV4dCAobGlicmFyeSwgYmluYXJ5LCBldGMuKS4gKi8KKworI2RlZmluZSBTTEpJVF9GVU5DX09GRlNFVChmdW5jX25hbWUpCSgqKHNsaml0X3N3Kikodm9pZCopZnVuY19uYW1lKQorCisvKiBGb3IgcG93ZXJwYzY0LCB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgcG9pbnQgdG8gYSBjb250ZXh0IGRlc2NyaXB0b3IuICovCitzdHJ1Y3Qgc2xqaXRfZnVuY3Rpb25fY29udGV4dCB7CisJc2xqaXRfc3cgYWRkcjsKKwlzbGppdF9zdyByMjsKKwlzbGppdF9zdyByMTE7Cit9OworCisvKiBGaWxsIHRoZSBjb250ZXh0IGFyZ3VtZW50cyB1c2luZyB0aGUgYWRkciBhbmQgdGhlIGZ1bmN0aW9uLgorICAgSWYgZnVuY19wdHIgaXMgTlVMTCwgaXQgd2lsbCBub3QgYmUgc2V0IHRvIHRoZSBhZGRyZXNzIG9mIGNvbnRleHQKKyAgIElmIGFkZHIgaXMgTlVMTCwgdGhlIGZ1bmN0aW9uIGFkZHJlc3MgYWxzbyBjb21lcyBmcm9tIHRoZSBmdW5jIHBvaW50ZXIuICovCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfZnVuY3Rpb25fY29udGV4dCh2b2lkKiogZnVuY19wdHIsIHN0cnVjdCBzbGppdF9mdW5jdGlvbl9jb250ZXh0KiBjb250ZXh0LCBzbGppdF9zdyBhZGRyLCB2b2lkKiBmdW5jKTsKKworI2VuZGlmIC8qICEoZGVmaW5lZCBTTEpJVF9JTkRJUkVDVF9DQUxMICYmIFNMSklUX0lORElSRUNUX0NBTEwpICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIENQVSBzcGVjaWZpYyBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3Igc2xqaXRfZW1pdF9vcF9jdXN0b20uCisgICBJdCByZXR1cm5zIHdpdGggdGhlIHJlYWwgbWFjaGluZSByZWdpc3RlciBpbmRleCAoID49MCApIG9mIGFueSBTTEpJVF9SLAorICAgU0xKSVRfUyBhbmQgU0xKSVRfU1AgcmVnaXN0ZXJzLgorCisgICBOb3RlOiBpdCByZXR1cm5zIHdpdGggLTEgZm9yIHZpcnR1YWwgcmVnaXN0ZXJzIChvbmx5IG9uIHg4Ni0zMikuICovCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKTsKKworLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3Igc2xqaXRfZW1pdF9vcF9jdXN0b20uCisgICBJdCByZXR1cm5zIHdpdGggdGhlIHJlYWwgbWFjaGluZSByZWdpc3RlciBpbmRleCBvZiBhbnkgU0xKSVRfRkxPQVQgcmVnaXN0ZXIuCisKKyAgIE5vdGU6IHRoZSBpbmRleCBpcyBhbHdheXMgYW4gZXZlbiBudW1iZXIgb24gQVJNIChleGNlcHQgQVJNLTY0KSwgTUlQUywgYW5kIFNQQVJDLiAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZ2V0X2Zsb2F0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3NpIHJlZyk7CisKKy8qIEFueSBpbnN0cnVjdGlvbiBjYW4gYmUgaW5zZXJ0ZWQgaW50byB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFtIGJ5CisgICBzbGppdF9lbWl0X29wX2N1c3RvbS4gSXQgaGFzIGEgc2ltaWxhciBwdXJwb3NlIGFzIGlubGluZSBhc3NlbWJseS4KKyAgIFRoZSBzaXplIHBhcmFtZXRlciBtdXN0IG1hdGNoIHRvIHRoZSBpbnN0cnVjdGlvbiBzaXplIG9mIHRoZSB0YXJnZXQKKyAgIGFyY2hpdGVjdHVyZToKKworICAgICAgICAgeDg2OiAwIDwgc2l6ZSA8PSAxNS4gVGhlIGluc3RydWN0aW9uIGFyZ3VtZW50IGNhbiBiZSBieXRlIGFsaWduZWQuCisgICAgICBUaHVtYjI6IGlmIHNpemUgPT0gMiwgdGhlIGluc3RydWN0aW9uIGFyZ3VtZW50IG11c3QgYmUgMiBieXRlIGFsaWduZWQuCisgICAgICAgICAgICAgIGlmIHNpemUgPT0gNCwgdGhlIGluc3RydWN0aW9uIGFyZ3VtZW50IG11c3QgYmUgNCBieXRlIGFsaWduZWQuCisgICBPdGhlcndpc2U6IHNpemUgbXVzdCBiZSA0IGFuZCBpbnN0cnVjdGlvbiBhcmd1bWVudCBtdXN0IGJlIDQgYnl0ZSBhbGlnbmVkLiAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9jdXN0b20oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwl2b2lkICppbnN0cnVjdGlvbiwgc2xqaXRfc2kgc2l6ZSk7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2ICYmIFNMSklUX0NPTkZJR19YODYpCisKKy8qIFJldHVybnMgd2l0aCBub24temVybyBpZiBzc2UyIGlzIGF2YWlsYWJsZS4gKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X3g4Nl9pc19zc2UyX2F2YWlsYWJsZSh2b2lkKTsKKworLyogUmV0dXJucyB3aXRoIG5vbi16ZXJvIGlmIGNtb3YgaW5zdHJ1Y3Rpb24gaXMgYXZhaWxhYmxlLiAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfeDg2X2lzX2Ntb3ZfYXZhaWxhYmxlKHZvaWQpOworCisvKiBFbWl0IGEgY29uZGl0aW9uYWwgbW92IGluc3RydWN0aW9uIG9uIHg4NiBDUFVzLiBUaGlzIGluc3RydWN0aW9uCisgICBtb3ZlcyBzcmMgdG8gZGVzdGluYXRpb24sIGlmIHRoZSBjb25kaXRpb24gaXMgc2F0aXNmaWVkLiBVbmxpa2UKKyAgIG90aGVyIGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb25zLCBkZXN0aW5hdGlvbiBtdXN0IGJlIGEgcmVnaXN0ZXIuCisgICBCZWZvcmUgc3VjaCBpbnN0cnVjdGlvbnMgYXJlIGVtaXR0ZWQsIGNtb3Ygc3VwcG9ydCBzaG91bGQgYmUKKyAgIGNoZWNrZWQgYnkgc2xqaXRfeDg2X2lzX2Ntb3ZfYXZhaWxhYmxlIGZ1bmN0aW9uLgorICAgIHR5cGUgbXVzdCBiZSBiZXR3ZWVuIFNMSklUX0VRVUFMIGFuZCBTTEpJVF9TX09SREVSRUQKKyAgICBkc3RfcmVnIG11c3QgYmUgYSB2YWxpZCByZWdpc3RlciBhbmQgaXQgY2FuIGJlIGNvbWJpbmVkCisgICAgICB3aXRoIFNMSklUX0lOVF9PUCB0byBwZXJmb3JtIDMyIGJpdCBhcml0aG1ldGljCisgICBGbGFnczogSSAtIChuZXZlciBzZXQgYW55IGZsYWdzKQorICovCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF94ODZfZW1pdF9jbW92KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfc2kgdHlwZSwKKwlzbGppdF9zaSBkc3RfcmVnLAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3Jjdyk7CisKKyNlbmRpZgorCisjZW5kaWYgLyogX1NMSklUX0xJUl9IXyAqLwpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNXzMyLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVBUk1fMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2Q0YzcxCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNXzMyLmMKQEAgLTAsMCArMSwyNTY2IEBACisvKgorICogICAgU3RhY2stbGVzcyBKdXN0LUluLVRpbWUgY29tcGlsZXIKKyAqCisgKiAgICBDb3B5cmlnaHQgMjAwOS0yMDEyIFpvbHRhbiBIZXJjemVnIChoem1lc3RlckBmcmVlbWFpbC5odSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisgKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mCisgKiAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQKKyAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBTTEpJVF9DT05TVCBjaGFyKiBzbGppdF9nZXRfcGxhdGZvcm1fbmFtZSh2b2lkKQoreworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjcgJiYgU0xKSVRfQ09ORklHX0FSTV9WNykKKwlyZXR1cm4gIkFSTXY3IiBTTEpJVF9DUFVJTkZPOworI2VsaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KQorCXJldHVybiAiQVJNdjUiIFNMSklUX0NQVUlORk87CisjZWxzZQorI2Vycm9yICJJbnRlcm5hbCBlcnJvcjogVW5rbm93biBBUk0gYXJjaGl0ZWN0dXJlIgorI2VuZGlmCit9CisKKy8qIExhc3QgcmVnaXN0ZXIgKyAxLiAqLworI2RlZmluZSBUTVBfUkVHMQkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDIpCisjZGVmaW5lIFRNUF9SRUcyCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgMykKKyNkZWZpbmUgVE1QX1JFRzMJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyA0KQorI2RlZmluZSBUTVBfUEMJCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNSkKKworI2RlZmluZSBUTVBfRlJFRzEJKDApCisjZGVmaW5lIFRNUF9GUkVHMgkoU0xKSVRfTlVNQkVSX09GX0ZMT0FUX1JFR0lTVEVSUyArIDEpCisKKy8qIEluIEFSTSBpbnN0cnVjdGlvbiB3b3Jkcy4KKyAgIENhY2hlIGxpbmVzIGFyZSB1c3VhbGx5IDMyIGJ5dGUgYWxpZ25lZC4gKi8KKyNkZWZpbmUgQ09OU1RfUE9PTF9BTElHTk1FTlQJOAorI2RlZmluZSBDT05TVF9QT09MX0VNUFRZCTB4ZmZmZmZmZmYKKworI2RlZmluZSBBTElHTl9JTlNUUlVDVElPTihwdHIpIFwKKwkoc2xqaXRfdXcqKSgoKHNsaml0X3V3KShwdHIpICsgKENPTlNUX1BPT0xfQUxJR05NRU5UICogc2l6ZW9mKHNsaml0X3V3KSkgLSAxKSAmIH4oKENPTlNUX1BPT0xfQUxJR05NRU5UICogc2l6ZW9mKHNsaml0X3V3KSkgLSAxKSkKKyNkZWZpbmUgTUFYX0RJRkZFUkVOQ0UobWF4X2RpZmYpIFwKKwkoKChtYXhfZGlmZikgLyAoc2xqaXRfc2kpc2l6ZW9mKHNsaml0X3V3KSkgLSAoQ09OU1RfUE9PTF9BTElHTk1FTlQgLSAxKSkKKworLyogU2VlIHNsaml0X2VtaXRfZW50ZXIgYW5kIHNsaml0X2VtaXRfb3AwIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGVtLiAqLworc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X3ViIHJlZ19tYXBbU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDZdID0geworCTAsIDAsIDEsIDIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgNCwgMTMsIDMsIDEyLCAxNCwgMTUKK307CisKKyNkZWZpbmUgUk0ocm0pIChyZWdfbWFwW3JtXSkKKyNkZWZpbmUgUkQocmQpIChyZWdfbWFwW3JkXSA8PCAxMikKKyNkZWZpbmUgUk4ocm4pIChyZWdfbWFwW3JuXSA8PCAxNikKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgSW5zdHJ1Y2lvbiBmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGUgaW5zdHJ1Y3Rpb24gaW5jbHVkZXMgdGhlIEFMIGNvbmRpdGlvbi4KKyAgIElOU1RfTkFNRSAtIENPTkRJVElPTkFMIHJlbW92ZSB0aGlzIGZsYWcuICovCisjZGVmaW5lIENPTkRfTUFTSwkweGYwMDAwMDAwCisjZGVmaW5lIENPTkRJVElPTkFMCTB4ZTAwMDAwMDAKKyNkZWZpbmUgUFVTSF9QT09MCTB4ZmYwMDAwMDAKKworLyogRFAgLSBEYXRhIFByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gKHVzZSB3aXRoIEVNSVRfREFUQV9QUk9DRVNTX0lOUykuICovCisjZGVmaW5lIEFEQ19EUAkJMHg1CisjZGVmaW5lIEFERF9EUAkJMHg0CisjZGVmaW5lIEFORF9EUAkJMHgwCisjZGVmaW5lIEIJCTB4ZWEwMDAwMDAKKyNkZWZpbmUgQklDX0RQCQkweGUKKyNkZWZpbmUgQkwJCTB4ZWIwMDAwMDAKKyNkZWZpbmUgQkxYCQkweGUxMmZmZjMwCisjZGVmaW5lIEJYCQkweGUxMmZmZjEwCisjZGVmaW5lIENMWgkJMHhlMTZmMGYxMAorI2RlZmluZSBDTVBfRFAJCTB4YQorI2RlZmluZSBCS1BUCQkweGUxMjAwMDcwCisjZGVmaW5lIEVPUl9EUAkJMHgxCisjZGVmaW5lIE1PVl9EUAkJMHhkCisjZGVmaW5lIE1VTAkJMHhlMDAwMDA5MAorI2RlZmluZSBNVk5fRFAJCTB4ZgorI2RlZmluZSBOT1AJCTB4ZTFhMDAwMDAKKyNkZWZpbmUgT1JSX0RQCQkweGMKKyNkZWZpbmUgUFVTSAkJMHhlOTJkMDAwMAorI2RlZmluZSBQT1AJCTB4ZThiZDAwMDAKKyNkZWZpbmUgUlNCX0RQCQkweDMKKyNkZWZpbmUgUlNDX0RQCQkweDcKKyNkZWZpbmUgU0JDX0RQCQkweDYKKyNkZWZpbmUgU01VTEwJCTB4ZTBjMDAwOTAKKyNkZWZpbmUgU1VCX0RQCQkweDIKKyNkZWZpbmUgVU1VTEwJCTB4ZTA4MDAwOTAKKyNkZWZpbmUgVkFCU19GMzIJMHhlZWIwMGFjMAorI2RlZmluZSBWQUREX0YzMgkweGVlMzAwYTAwCisjZGVmaW5lIFZDTVBfRjMyCTB4ZWViNDBhNDAKKyNkZWZpbmUgVkNWVF9GMzJfUzMyCTB4ZWViODBhYzAKKyNkZWZpbmUgVkNWVF9GNjRfRjMyCTB4ZWViNzBhYzAKKyNkZWZpbmUgVkNWVF9TMzJfRjMyCTB4ZWViZDBhYzAKKyNkZWZpbmUgVkRJVl9GMzIJMHhlZTgwMGEwMAorI2RlZmluZSBWTU9WX0YzMgkweGVlYjAwYTQwCisjZGVmaW5lIFZNT1YJCTB4ZWUwMDBhMTAKKyNkZWZpbmUgVk1SUwkJMHhlZWYxZmExMAorI2RlZmluZSBWTVVMX0YzMgkweGVlMjAwYTAwCisjZGVmaW5lIFZORUdfRjMyCTB4ZWViMTBhNDAKKyNkZWZpbmUgVlNUUl9GMzIJMHhlZDAwMGEwMAorI2RlZmluZSBWU1VCX0YzMgkweGVlMzAwYTQwCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y3ICYmIFNMSklUX0NPTkZJR19BUk1fVjcpCisvKiBBcm0gdjcgc3BlY2lmaWMgaW5zdHJ1Y3Rpb25zLiAqLworI2RlZmluZSBNT1ZXCQkweGUzMDAwMDAwCisjZGVmaW5lIE1PVlQJCTB4ZTM0MDAwMDAKKyNkZWZpbmUgU1hUQgkJMHhlNmFmMDA3MAorI2RlZmluZSBTWFRICQkweGU2YmYwMDcwCisjZGVmaW5lIFVYVEIJCTB4ZTZlZjAwNzAKKyNkZWZpbmUgVVhUSAkJMHhlNmZmMDA3MAorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCisKK3N0YXRpYyBzbGppdF9zaSBwdXNoX2Nwb29sKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisJLyogUHVzaGluZyB0aGUgY29uc3RhbnQgcG9vbCBpbnRvIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0uICovCisJc2xqaXRfdXcqIGluc3Q7CisJc2xqaXRfdXcqIGNwb29sX3B0cjsKKwlzbGppdF91dyogY3Bvb2xfZW5kOworCXNsaml0X3NpIGk7CisKKwkvKiBUaGUgbGFiZWwgY291bGQgcG9pbnQgdGhlIGFkZHJlc3MgYWZ0ZXIgdGhlIGNvbnN0YW50IHBvb2wuICovCisJaWYgKGNvbXBpbGVyLT5sYXN0X2xhYmVsICYmIGNvbXBpbGVyLT5sYXN0X2xhYmVsLT5zaXplID09IGNvbXBpbGVyLT5zaXplKQorCQljb21waWxlci0+bGFzdF9sYWJlbC0+c2l6ZSArPSBjb21waWxlci0+Y3Bvb2xfZmlsbCArIChDT05TVF9QT09MX0FMSUdOTUVOVCAtIDEpICsgMTsKKworCVNMSklUX0FTU0VSVChjb21waWxlci0+Y3Bvb2xfZmlsbCA+IDAgJiYgY29tcGlsZXItPmNwb29sX2ZpbGwgPD0gQ1BPT0xfU0laRSk7CisJaW5zdCA9IChzbGppdF91dyopZW5zdXJlX2J1Zihjb21waWxlciwgc2l6ZW9mKHNsaml0X3V3KSk7CisJRkFJTF9JRighaW5zdCk7CisJY29tcGlsZXItPnNpemUrKzsKKwkqaW5zdCA9IDB4ZmYwMDAwMDAgfCBjb21waWxlci0+Y3Bvb2xfZmlsbDsKKworCWZvciAoaSA9IDA7IGkgPCBDT05TVF9QT09MX0FMSUdOTUVOVCAtIDE7IGkrKykgeworCQlpbnN0ID0gKHNsaml0X3V3KillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfdXcpKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCWNvbXBpbGVyLT5zaXplKys7CisJCSppbnN0ID0gMDsKKwl9CisKKwljcG9vbF9wdHIgPSBjb21waWxlci0+Y3Bvb2w7CisJY3Bvb2xfZW5kID0gY3Bvb2xfcHRyICsgY29tcGlsZXItPmNwb29sX2ZpbGw7CisJd2hpbGUgKGNwb29sX3B0ciA8IGNwb29sX2VuZCkgeworCQlpbnN0ID0gKHNsaml0X3V3KillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfdXcpKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCWNvbXBpbGVyLT5zaXplKys7CisJCSppbnN0ID0gKmNwb29sX3B0cisrOworCX0KKwljb21waWxlci0+Y3Bvb2xfZGlmZiA9IENPTlNUX1BPT0xfRU1QVFk7CisJY29tcGlsZXItPmNwb29sX2ZpbGwgPSAwOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgc2xqaXRfc2kgcHVzaF9pbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3V3IGluc3QpCit7CisJc2xqaXRfdXcqIHB0cjsKKworCWlmIChTTEpJVF9VTkxJS0VMWShjb21waWxlci0+Y3Bvb2xfZGlmZiAhPSBDT05TVF9QT09MX0VNUFRZICYmIGNvbXBpbGVyLT5zaXplIC0gY29tcGlsZXItPmNwb29sX2RpZmYgPj0gTUFYX0RJRkZFUkVOQ0UoNDA5MikpKQorCQlGQUlMX0lGKHB1c2hfY3Bvb2woY29tcGlsZXIpKTsKKworCXB0ciA9IChzbGppdF91dyopZW5zdXJlX2J1Zihjb21waWxlciwgc2l6ZW9mKHNsaml0X3V3KSk7CisJRkFJTF9JRighcHRyKTsKKwljb21waWxlci0+c2l6ZSsrOworCSpwdHIgPSBpbnN0OworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgc2xqaXRfc2kgcHVzaF9pbnN0X3dpdGhfbGl0ZXJhbChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91dyBpbnN0LCBzbGppdF91dyBsaXRlcmFsKQoreworCXNsaml0X3V3KiBwdHI7CisJc2xqaXRfdXcgY3Bvb2xfaW5kZXggPSBDUE9PTF9TSVpFOworCXNsaml0X3V3KiBjcG9vbF9wdHI7CisJc2xqaXRfdXcqIGNwb29sX2VuZDsKKwlzbGppdF91YiogY3Bvb2xfdW5pcXVlX3B0cjsKKworCWlmIChTTEpJVF9VTkxJS0VMWShjb21waWxlci0+Y3Bvb2xfZGlmZiAhPSBDT05TVF9QT09MX0VNUFRZICYmIGNvbXBpbGVyLT5zaXplIC0gY29tcGlsZXItPmNwb29sX2RpZmYgPj0gTUFYX0RJRkZFUkVOQ0UoNDA5MikpKQorCQlGQUlMX0lGKHB1c2hfY3Bvb2woY29tcGlsZXIpKTsKKwllbHNlIGlmIChjb21waWxlci0+Y3Bvb2xfZmlsbCA+IDApIHsKKwkJY3Bvb2xfcHRyID0gY29tcGlsZXItPmNwb29sOworCQljcG9vbF9lbmQgPSBjcG9vbF9wdHIgKyBjb21waWxlci0+Y3Bvb2xfZmlsbDsKKwkJY3Bvb2xfdW5pcXVlX3B0ciA9IGNvbXBpbGVyLT5jcG9vbF91bmlxdWU7CisJCWRvIHsKKwkJCWlmICgoKmNwb29sX3B0ciA9PSBsaXRlcmFsKSAmJiAhKCpjcG9vbF91bmlxdWVfcHRyKSkgeworCQkJCWNwb29sX2luZGV4ID0gY3Bvb2xfcHRyIC0gY29tcGlsZXItPmNwb29sOworCQkJCWJyZWFrOworCQkJfQorCQkJY3Bvb2xfcHRyKys7CisJCQljcG9vbF91bmlxdWVfcHRyKys7CisJCX0gd2hpbGUgKGNwb29sX3B0ciA8IGNwb29sX2VuZCk7CisJfQorCisJaWYgKGNwb29sX2luZGV4ID09IENQT09MX1NJWkUpIHsKKwkJLyogTXVzdCBhbGxvY2F0ZSBhIG5ldyBlbnRyeSBpbiB0aGUgbGl0ZXJhbCBwb29sLiAqLworCQlpZiAoY29tcGlsZXItPmNwb29sX2ZpbGwgPCBDUE9PTF9TSVpFKSB7CisJCQljcG9vbF9pbmRleCA9IGNvbXBpbGVyLT5jcG9vbF9maWxsOworCQkJY29tcGlsZXItPmNwb29sX2ZpbGwrKzsKKwkJfQorCQllbHNlIHsKKwkJCUZBSUxfSUYocHVzaF9jcG9vbChjb21waWxlcikpOworCQkJY3Bvb2xfaW5kZXggPSAwOworCQkJY29tcGlsZXItPmNwb29sX2ZpbGwgPSAxOworCQl9CisJfQorCisJU0xKSVRfQVNTRVJUKChpbnN0ICYgMHhmZmYpID09IDApOworCXB0ciA9IChzbGppdF91dyopZW5zdXJlX2J1Zihjb21waWxlciwgc2l6ZW9mKHNsaml0X3V3KSk7CisJRkFJTF9JRighcHRyKTsKKwljb21waWxlci0+c2l6ZSsrOworCSpwdHIgPSBpbnN0IHwgY3Bvb2xfaW5kZXg7CisKKwljb21waWxlci0+Y3Bvb2xbY3Bvb2xfaW5kZXhdID0gbGl0ZXJhbDsKKwljb21waWxlci0+Y3Bvb2xfdW5pcXVlW2Nwb29sX2luZGV4XSA9IDA7CisJaWYgKGNvbXBpbGVyLT5jcG9vbF9kaWZmID09IENPTlNUX1BPT0xfRU1QVFkpCisJCWNvbXBpbGVyLT5jcG9vbF9kaWZmID0gY29tcGlsZXItPnNpemU7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBzbGppdF9zaSBwdXNoX2luc3Rfd2l0aF91bmlxdWVfbGl0ZXJhbChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91dyBpbnN0LCBzbGppdF91dyBsaXRlcmFsKQoreworCXNsaml0X3V3KiBwdHI7CisJaWYgKFNMSklUX1VOTElLRUxZKChjb21waWxlci0+Y3Bvb2xfZGlmZiAhPSBDT05TVF9QT09MX0VNUFRZICYmIGNvbXBpbGVyLT5zaXplIC0gY29tcGlsZXItPmNwb29sX2RpZmYgPj0gTUFYX0RJRkZFUkVOQ0UoNDA5MikpIHx8IGNvbXBpbGVyLT5jcG9vbF9maWxsID49IENQT09MX1NJWkUpKQorCQlGQUlMX0lGKHB1c2hfY3Bvb2woY29tcGlsZXIpKTsKKworCVNMSklUX0FTU0VSVChjb21waWxlci0+Y3Bvb2xfZmlsbCA8IENQT09MX1NJWkUgJiYgKGluc3QgJiAweGZmZikgPT0gMCk7CisJcHRyID0gKHNsaml0X3V3KillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfdXcpKTsKKwlGQUlMX0lGKCFwdHIpOworCWNvbXBpbGVyLT5zaXplKys7CisJKnB0ciA9IGluc3QgfCBjb21waWxlci0+Y3Bvb2xfZmlsbDsKKworCWNvbXBpbGVyLT5jcG9vbFtjb21waWxlci0+Y3Bvb2xfZmlsbF0gPSBsaXRlcmFsOworCWNvbXBpbGVyLT5jcG9vbF91bmlxdWVbY29tcGlsZXItPmNwb29sX2ZpbGxdID0gMTsKKwljb21waWxlci0+Y3Bvb2xfZmlsbCsrOworCWlmIChjb21waWxlci0+Y3Bvb2xfZGlmZiA9PSBDT05TVF9QT09MX0VNUFRZKQorCQljb21waWxlci0+Y3Bvb2xfZGlmZiA9IGNvbXBpbGVyLT5zaXplOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHByZXBhcmVfYmx4KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisJLyogUGxhY2UgZm9yIGF0IGxlYXN0IHR3byBpbnN0cnVjdGlvbiAoZG9lc24ndCBtYXR0ZXIgd2hldGhlciB0aGUgZmlyc3QgaGFzIGEgbGl0ZXJhbCkuICovCisJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5jcG9vbF9kaWZmICE9IENPTlNUX1BPT0xfRU1QVFkgJiYgY29tcGlsZXItPnNpemUgLSBjb21waWxlci0+Y3Bvb2xfZGlmZiA+PSBNQVhfRElGRkVSRU5DRSg0MDg4KSkpCisJCXJldHVybiBwdXNoX2Nwb29sKGNvbXBpbGVyKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X2JseChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQoreworCS8qIE11c3QgZm9sbG93IHRpZ2h0bHkgdGhlIHByZXZpb3VzIGluc3RydWN0aW9uICh0byBiZSBhYmxlIHRvIGNvbnZlcnQgaXQgdG8gYmwgaW5zdHJ1Y3Rpb24pLiAqLworCVNMSklUX0FTU0VSVChjb21waWxlci0+Y3Bvb2xfZGlmZiA9PSBDT05TVF9QT09MX0VNUFRZIHx8IGNvbXBpbGVyLT5zaXplIC0gY29tcGlsZXItPmNwb29sX2RpZmYgPCBNQVhfRElGRkVSRU5DRSg0MDkyKSk7CisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQkxYIHwgUk0oVE1QX1JFRzEpKTsKK30KKworc3RhdGljIHNsaml0X3V3IHBhdGNoX3BjX3JlbGF0aXZlX2xvYWRzKHNsaml0X3V3ICpsYXN0X3BjX3BhdGNoLCBzbGppdF91dyAqY29kZV9wdHIsIHNsaml0X3V3KiBjb25zdF9wb29sLCBzbGppdF91dyBjcG9vbF9zaXplKQoreworCXNsaml0X3V3IGRpZmY7CisJc2xqaXRfdXcgaW5kOworCXNsaml0X3V3IGNvdW50ZXIgPSAwOworCXNsaml0X3V3KiBjbGVhcl9jb25zdF9wb29sID0gY29uc3RfcG9vbDsKKwlzbGppdF91dyogY2xlYXJfY29uc3RfcG9vbF9lbmQgPSBjb25zdF9wb29sICsgY3Bvb2xfc2l6ZTsKKworCVNMSklUX0FTU0VSVChjb25zdF9wb29sIC0gY29kZV9wdHIgPD0gQ09OU1RfUE9PTF9BTElHTk1FTlQpOworCS8qIFNldCB1bnVzZWQgZmxhZyBmb3IgYWxsIGxpdGVyYWxzIGluIHRoZSBjb25zdGFudCBwb29sLgorCSAgIEkuZS46IHVudXNlZCBsaXRlcmFscyBjYW4gYmVsb25nIHRvIGJyYW5jaGVzLCB3aGljaCBjYW4gYmUgZW5jb2RlZCBhcyBCIG9yIEJMLgorCSAgIFdlIGNhbiAiY29tcHJlc3MiIHRoZSBjb25zdGFudCBwb29sIGJ5IGRpc2NhcmRpbmcgdGhlc2UgbGl0ZXJhbHMuICovCisJd2hpbGUgKGNsZWFyX2NvbnN0X3Bvb2wgPCBjbGVhcl9jb25zdF9wb29sX2VuZCkKKwkJKmNsZWFyX2NvbnN0X3Bvb2wrKyA9IChzbGppdF91dykoLTEpOworCisJd2hpbGUgKGxhc3RfcGNfcGF0Y2ggPCBjb2RlX3B0cikgeworCQkvKiBEYXRhIHRyYW5zZmVyIGluc3RydWN0aW9uIHdpdGggUm4gPT0gcjE1LiAqLworCQlpZiAoKCpsYXN0X3BjX3BhdGNoICYgMHgwYzBmMDAwMCkgPT0gMHgwNDBmMDAwMCkgeworCQkJZGlmZiA9IGNvbnN0X3Bvb2wgLSBsYXN0X3BjX3BhdGNoOworCQkJaW5kID0gKCpsYXN0X3BjX3BhdGNoKSAmIDB4ZmZmOworCisJCQkvKiBNdXN0IGJlIGEgbG9hZCBpbnN0cnVjdGlvbiB3aXRoIGltbWVkaWF0ZSBvZmZzZXQuICovCisJCQlTTEpJVF9BU1NFUlQoaW5kIDwgY3Bvb2xfc2l6ZSAmJiAhKCpsYXN0X3BjX3BhdGNoICYgKDEgPDwgMjUpKSAmJiAoKmxhc3RfcGNfcGF0Y2ggJiAoMSA8PCAyMCkpKTsKKwkJCWlmICgoc2xqaXRfc2kpY29uc3RfcG9vbFtpbmRdIDwgMCkgeworCQkJCWNvbnN0X3Bvb2xbaW5kXSA9IGNvdW50ZXI7CisJCQkJaW5kID0gY291bnRlcjsKKwkJCQljb3VudGVyKys7CisJCQl9CisJCQllbHNlCisJCQkJaW5kID0gY29uc3RfcG9vbFtpbmRdOworCisJCQlTTEpJVF9BU1NFUlQoZGlmZiA+PSAxKTsKKwkJCWlmIChkaWZmID49IDIgfHwgaW5kID4gMCkgeworCQkJCWRpZmYgPSAoZGlmZiArIGluZCAtIDIpIDw8IDI7CisJCQkJU0xKSVRfQVNTRVJUKGRpZmYgPD0gMHhmZmYpOworCQkJCSpsYXN0X3BjX3BhdGNoID0gKCpsYXN0X3BjX3BhdGNoICYgfjB4ZmZmKSB8IGRpZmY7CisJCQl9CisJCQllbHNlCisJCQkJKmxhc3RfcGNfcGF0Y2ggPSAoKmxhc3RfcGNfcGF0Y2ggJiB+KDB4ZmZmIHwgKDEgPDwgMjMpKSkgfCAweDAwNDsKKwkJfQorCQlsYXN0X3BjX3BhdGNoKys7CisJfQorCXJldHVybiBjb3VudGVyOworfQorCisvKiBJbiBzb21lIHJhcmUgb2Nhc2lvbnMgd2UgbWF5IG5lZWQgZnV0dXJlIHBhdGNoZXMuIFRoZSBwcm9iYWJpbGl0eSBpcyBjbG9zZSB0byAwIGluIHByYWN0aWNlLiAqLworc3RydWN0IGZ1dHVyZV9wYXRjaCB7CisJc3RydWN0IGZ1dHVyZV9wYXRjaCogbmV4dDsKKwlzbGppdF9zaSBpbmRleDsKKwlzbGppdF9zaSB2YWx1ZTsKK307CisKK3N0YXRpYyBzbGppdF9zaSByZXNvbHZlX2NvbnN0X3Bvb2xfaW5kZXgoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc3RydWN0IGZ1dHVyZV9wYXRjaCAqKmZpcnN0X3BhdGNoLCBzbGppdF91dyBjcG9vbF9jdXJyZW50X2luZGV4LCBzbGppdF91dyAqY3Bvb2xfc3RhcnRfYWRkcmVzcywgc2xqaXRfdXcgKmJ1Zl9wdHIpCit7CisJc2xqaXRfc2kgdmFsdWU7CisJc3RydWN0IGZ1dHVyZV9wYXRjaCAqY3Vycl9wYXRjaCwgKnByZXZfcGF0Y2g7CisKKwlTTEpJVF9VTlVTRURfQVJHKGNvbXBpbGVyKTsKKworCS8qIFVzaW5nIHRoZSB2YWx1ZXMgZ2VuZXJhdGVkIGJ5IHBhdGNoX3BjX3JlbGF0aXZlX2xvYWRzLiAqLworCWlmICghKmZpcnN0X3BhdGNoKQorCQl2YWx1ZSA9IChzbGppdF9zaSljcG9vbF9zdGFydF9hZGRyZXNzW2Nwb29sX2N1cnJlbnRfaW5kZXhdOworCWVsc2UgeworCQljdXJyX3BhdGNoID0gKmZpcnN0X3BhdGNoOworCQlwcmV2X3BhdGNoID0gMDsKKwkJd2hpbGUgKDEpIHsKKwkJCWlmICghY3Vycl9wYXRjaCkgeworCQkJCXZhbHVlID0gKHNsaml0X3NpKWNwb29sX3N0YXJ0X2FkZHJlc3NbY3Bvb2xfY3VycmVudF9pbmRleF07CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKHNsaml0X3V3KWN1cnJfcGF0Y2gtPmluZGV4ID09IGNwb29sX2N1cnJlbnRfaW5kZXgpIHsKKwkJCQl2YWx1ZSA9IGN1cnJfcGF0Y2gtPnZhbHVlOworCQkJCWlmIChwcmV2X3BhdGNoKQorCQkJCQlwcmV2X3BhdGNoLT5uZXh0ID0gY3Vycl9wYXRjaC0+bmV4dDsKKwkJCQllbHNlCisJCQkJCSpmaXJzdF9wYXRjaCA9IGN1cnJfcGF0Y2gtPm5leHQ7CisJCQkJU0xKSVRfRlJFRShjdXJyX3BhdGNoLCBjb21waWxlci0+YWxsb2NhdG9yX2RhdGEpOworCQkJCWJyZWFrOworCQkJfQorCQkJcHJldl9wYXRjaCA9IGN1cnJfcGF0Y2g7CisJCQljdXJyX3BhdGNoID0gY3Vycl9wYXRjaC0+bmV4dDsKKwkJfQorCX0KKworCWlmICh2YWx1ZSA+PSAwKSB7CisJCWlmICgoc2xqaXRfdXcpdmFsdWUgPiBjcG9vbF9jdXJyZW50X2luZGV4KSB7CisJCQljdXJyX3BhdGNoID0gKHN0cnVjdCBmdXR1cmVfcGF0Y2gqKVNMSklUX01BTExPQyhzaXplb2Yoc3RydWN0IGZ1dHVyZV9wYXRjaCksIGNvbXBpbGVyLT5hbGxvY2F0b3JfZGF0YSk7CisJCQlpZiAoIWN1cnJfcGF0Y2gpIHsKKwkJCQl3aGlsZSAoKmZpcnN0X3BhdGNoKSB7CisJCQkJCWN1cnJfcGF0Y2ggPSAqZmlyc3RfcGF0Y2g7CisJCQkJCSpmaXJzdF9wYXRjaCA9ICgqZmlyc3RfcGF0Y2gpLT5uZXh0OworCQkJCQlTTEpJVF9GUkVFKGN1cnJfcGF0Y2gsIGNvbXBpbGVyLT5hbGxvY2F0b3JfZGF0YSk7CisJCQkJfQorCQkJCXJldHVybiBTTEpJVF9FUlJfQUxMT0NfRkFJTEVEOworCQkJfQorCQkJY3Vycl9wYXRjaC0+bmV4dCA9ICpmaXJzdF9wYXRjaDsKKwkJCWN1cnJfcGF0Y2gtPmluZGV4ID0gdmFsdWU7CisJCQljdXJyX3BhdGNoLT52YWx1ZSA9IGNwb29sX3N0YXJ0X2FkZHJlc3NbdmFsdWVdOworCQkJKmZpcnN0X3BhdGNoID0gY3Vycl9wYXRjaDsKKwkJfQorCQljcG9vbF9zdGFydF9hZGRyZXNzW3ZhbHVlXSA9ICpidWZfcHRyOworCX0KKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworI2Vsc2UKKworc3RhdGljIHNsaml0X3NpIHB1c2hfaW5zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91dyBpbnN0KQoreworCXNsaml0X3V3KiBwdHI7CisKKwlwdHIgPSAoc2xqaXRfdXcqKWVuc3VyZV9idWYoY29tcGlsZXIsIHNpemVvZihzbGppdF91dykpOworCUZBSUxfSUYoIXB0cik7CisJY29tcGlsZXItPnNpemUrKzsKKwkqcHRyID0gaW5zdDsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X2ltbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSByZWcsIHNsaml0X3N3IGltbSkKK3sKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTU9WVyB8IFJEKHJlZykgfCAoKGltbSA8PCA0KSAmIDB4ZjAwMDApIHwgKGltbSAmIDB4ZmZmKSkpOworCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE1PVlQgfCBSRChyZWcpIHwgKChpbW0gPj4gMTIpICYgMHhmMDAwMCkgfCAoKGltbSA+PiAxNikgJiAweGZmZikpOworfQorCisjZW5kaWYKKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBkZXRlY3RfanVtcF90eXBlKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzbGppdF91dyAqY29kZV9wdHIsIHNsaml0X3V3ICpjb2RlKQoreworCXNsaml0X3N3IGRpZmY7CisKKwlpZiAoanVtcC0+ZmxhZ3MgJiBTTEpJVF9SRVdSSVRBQkxFX0pVTVApCisJCXJldHVybiAwOworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KQorCWlmIChqdW1wLT5mbGFncyAmIElTX0JMKQorCQljb2RlX3B0ci0tOworCisJaWYgKGp1bXAtPmZsYWdzICYgSlVNUF9BRERSKQorCQlkaWZmID0gKChzbGppdF9zdylqdW1wLT51LnRhcmdldCAtIChzbGppdF9zdykoY29kZV9wdHIgKyAyKSk7CisJZWxzZSB7CisJCVNMSklUX0FTU0VSVChqdW1wLT5mbGFncyAmIEpVTVBfTEFCRUwpOworCQlkaWZmID0gKChzbGppdF9zdykoY29kZSArIGp1bXAtPnUubGFiZWwtPnNpemUpIC0gKHNsaml0X3N3KShjb2RlX3B0ciArIDIpKTsKKwl9CisKKwkvKiBCcmFuY2ggdG8gVGh1bWIgY29kZSBoYXMgbm90IGJlZW4gb3B0aW1pemVkIHlldC4gKi8KKwlpZiAoZGlmZiAmIDB4MykKKwkJcmV0dXJuIDA7CisKKwlpZiAoanVtcC0+ZmxhZ3MgJiBJU19CTCkgeworCQlpZiAoZGlmZiA8PSAweDAxZmZmZmZmICYmIGRpZmYgPj0gLTB4MDIwMDAwMDApIHsKKwkJCSpjb2RlX3B0ciA9IChCTCAtIENPTkRJVElPTkFMKSB8ICgqKGNvZGVfcHRyICsgMSkgJiBDT05EX01BU0spOworCQkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfQjsKKwkJCXJldHVybiAxOworCQl9CisJfQorCWVsc2UgeworCQlpZiAoZGlmZiA8PSAweDAxZmZmZmZmICYmIGRpZmYgPj0gLTB4MDIwMDAwMDApIHsKKwkJCSpjb2RlX3B0ciA9IChCIC0gQ09ORElUSU9OQUwpIHwgKCpjb2RlX3B0ciAmIENPTkRfTUFTSyk7CisJCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9COworCQl9CisJfQorI2Vsc2UKKwlpZiAoanVtcC0+ZmxhZ3MgJiBKVU1QX0FERFIpCisJCWRpZmYgPSAoKHNsaml0X3N3KWp1bXAtPnUudGFyZ2V0IC0gKHNsaml0X3N3KWNvZGVfcHRyKTsKKwllbHNlIHsKKwkJU0xKSVRfQVNTRVJUKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCk7CisJCWRpZmYgPSAoKHNsaml0X3N3KShjb2RlICsganVtcC0+dS5sYWJlbC0+c2l6ZSkgLSAoc2xqaXRfc3cpY29kZV9wdHIpOworCX0KKworCS8qIEJyYW5jaCB0byBUaHVtYiBjb2RlIGhhcyBub3QgYmVlbiBvcHRpbWl6ZWQgeWV0LiAqLworCWlmIChkaWZmICYgMHgzKQorCQlyZXR1cm4gMDsKKworCWlmIChkaWZmIDw9IDB4MDFmZmZmZmYgJiYgZGlmZiA+PSAtMHgwMjAwMDAwMCkgeworCQljb2RlX3B0ciAtPSAyOworCQkqY29kZV9wdHIgPSAoKGp1bXAtPmZsYWdzICYgSVNfQkwpID8gKEJMIC0gQ09ORElUSU9OQUwpIDogKEIgLSBDT05ESVRJT05BTCkpIHwgKGNvZGVfcHRyWzJdICYgQ09ORF9NQVNLKTsKKwkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfQjsKKwkJcmV0dXJuIDE7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBpbmxpbmVfc2V0X2p1bXBfYWRkcihzbGppdF91dyBhZGRyLCBzbGppdF91dyBuZXdfYWRkciwgc2xqaXRfc2kgZmx1c2gpCit7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KQorCXNsaml0X3V3ICpwdHIgPSAoc2xqaXRfdXcqKWFkZHI7CisJc2xqaXRfdXcgKmluc3QgPSAoc2xqaXRfdXcqKXB0clswXTsKKwlzbGppdF91dyBtb3ZfcGMgPSBwdHJbMV07CisJc2xqaXRfc2kgYmwgPSAobW92X3BjICYgMHgwMDAwZjAwMCkgIT0gUkQoVE1QX1BDKTsKKwlzbGppdF9zdyBkaWZmID0gKHNsaml0X3N3KSgoKHNsaml0X3N3KW5ld19hZGRyIC0gKHNsaml0X3N3KShpbnN0ICsgMikpID4+IDIpOworCisJaWYgKGRpZmYgPD0gMHg3ZmZmZmYgJiYgZGlmZiA+PSAtMHg4MDAwMDApIHsKKwkJLyogVHVybiB0byBicmFuY2guICovCisJCWlmICghYmwpIHsKKwkJCWluc3RbMF0gPSAobW92X3BjICYgQ09ORF9NQVNLKSB8IChCIC0gQ09ORElUSU9OQUwpIHwgKGRpZmYgJiAweGZmZmZmZik7CisJCQlpZiAoZmx1c2gpIHsKKwkJCQlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgMSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpbnN0WzBdID0gKG1vdl9wYyAmIENPTkRfTUFTSykgfCAoQkwgLSBDT05ESVRJT05BTCkgfCAoZGlmZiAmIDB4ZmZmZmZmKTsKKwkJCWluc3RbMV0gPSBOT1A7CisJCQlpZiAoZmx1c2gpIHsKKwkJCQlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgMik7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkvKiBHZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBjb25zdGFudC4gKi8KKwkJaWYgKG1vdl9wYyAmICgxIDw8IDIzKSkKKwkJCXB0ciA9IGluc3QgKyAoKG1vdl9wYyAmIDB4ZmZmKSA+PiAyKSArIDI7CisJCWVsc2UKKwkJCXB0ciA9IGluc3QgKyAxOworCisJCWlmICgqaW5zdCAhPSBtb3ZfcGMpIHsKKwkJCWluc3RbMF0gPSBtb3ZfcGM7CisJCQlpZiAoIWJsKSB7CisJCQkJaWYgKGZsdXNoKSB7CisJCQkJCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyAxKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWluc3RbMV0gPSBCTFggfCBSTShUTVBfUkVHMSk7CisJCQkJaWYgKGZsdXNoKSB7CisJCQkJCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyAyKTsKKwkJCQl9CisJCQl9CisJCX0KKwkJKnB0ciA9IG5ld19hZGRyOworCX0KKyNlbHNlCisJc2xqaXRfdXcgKmluc3QgPSAoc2xqaXRfdXcqKWFkZHI7CisJU0xKSVRfQVNTRVJUKChpbnN0WzBdICYgMHhmZmYwMDAwMCkgPT0gTU9WVyAmJiAoaW5zdFsxXSAmIDB4ZmZmMDAwMDApID09IE1PVlQpOworCWluc3RbMF0gPSBNT1ZXIHwgKGluc3RbMF0gJiAweGYwMDApIHwgKChuZXdfYWRkciA8PCA0KSAmIDB4ZjAwMDApIHwgKG5ld19hZGRyICYgMHhmZmYpOworCWluc3RbMV0gPSBNT1ZUIHwgKGluc3RbMV0gJiAweGYwMDApIHwgKChuZXdfYWRkciA+PiAxMikgJiAweGYwMDAwKSB8ICgobmV3X2FkZHIgPj4gMTYpICYgMHhmZmYpOworCWlmIChmbHVzaCkgeworCQlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgMik7CisJfQorI2VuZGlmCit9CisKK3N0YXRpYyBzbGppdF91dyBnZXRfaW1tKHNsaml0X3V3IGltbSk7CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBpbmxpbmVfc2V0X2NvbnN0KHNsaml0X3V3IGFkZHIsIHNsaml0X3N3IG5ld19jb25zdGFudCwgc2xqaXRfc2kgZmx1c2gpCit7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KQorCXNsaml0X3V3ICpwdHIgPSAoc2xqaXRfdXcqKWFkZHI7CisJc2xqaXRfdXcgKmluc3QgPSAoc2xqaXRfdXcqKXB0clswXTsKKwlzbGppdF91dyBsZHJfbGl0ZXJhbCA9IHB0clsxXTsKKwlzbGppdF91dyBzcmMyOworCisJc3JjMiA9IGdldF9pbW0obmV3X2NvbnN0YW50KTsKKwlpZiAoc3JjMikgeworCQkqaW5zdCA9IDB4ZTNhMDAwMDAgfCAobGRyX2xpdGVyYWwgJiAweGYwMDApIHwgc3JjMjsKKwkJaWYgKGZsdXNoKSB7CisJCQlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgMSk7CisJCX0KKwkJcmV0dXJuOworCX0KKworCXNyYzIgPSBnZXRfaW1tKH5uZXdfY29uc3RhbnQpOworCWlmIChzcmMyKSB7CisJCSppbnN0ID0gMHhlM2UwMDAwMCB8IChsZHJfbGl0ZXJhbCAmIDB4ZjAwMCkgfCBzcmMyOworCQlpZiAoZmx1c2gpIHsKKwkJCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyAxKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKGxkcl9saXRlcmFsICYgKDEgPDwgMjMpKQorCQlwdHIgPSBpbnN0ICsgKChsZHJfbGl0ZXJhbCAmIDB4ZmZmKSA+PiAyKSArIDI7CisJZWxzZQorCQlwdHIgPSBpbnN0ICsgMTsKKworCWlmICgqaW5zdCAhPSBsZHJfbGl0ZXJhbCkgeworCQkqaW5zdCA9IGxkcl9saXRlcmFsOworCQlpZiAoZmx1c2gpIHsKKwkJCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyAxKTsKKwkJfQorCX0KKwkqcHRyID0gbmV3X2NvbnN0YW50OworI2Vsc2UKKwlzbGppdF91dyAqaW5zdCA9IChzbGppdF91dyopYWRkcjsKKwlTTEpJVF9BU1NFUlQoKGluc3RbMF0gJiAweGZmZjAwMDAwKSA9PSBNT1ZXICYmIChpbnN0WzFdICYgMHhmZmYwMDAwMCkgPT0gTU9WVCk7CisJaW5zdFswXSA9IE1PVlcgfCAoaW5zdFswXSAmIDB4ZjAwMCkgfCAoKG5ld19jb25zdGFudCA8PCA0KSAmIDB4ZjAwMDApIHwgKG5ld19jb25zdGFudCAmIDB4ZmZmKTsKKwlpbnN0WzFdID0gTU9WVCB8IChpbnN0WzFdICYgMHhmMDAwKSB8ICgobmV3X2NvbnN0YW50ID4+IDEyKSAmIDB4ZjAwMDApIHwgKChuZXdfY29uc3RhbnQgPj4gMTYpICYgMHhmZmYpOworCWlmIChmbHVzaCkgeworCQlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgMik7CisJfQorI2VuZGlmCit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkKiBzbGppdF9nZW5lcmF0ZV9jb2RlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisJc3RydWN0IHNsaml0X21lbW9yeV9mcmFnbWVudCAqYnVmOworCXNsaml0X3V3ICpjb2RlOworCXNsaml0X3V3ICpjb2RlX3B0cjsKKwlzbGppdF91dyAqYnVmX3B0cjsKKwlzbGppdF91dyAqYnVmX2VuZDsKKwlzbGppdF91dyBzaXplOworCXNsaml0X3V3IHdvcmRfY291bnQ7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KQorCXNsaml0X3V3IGNwb29sX3NpemU7CisJc2xqaXRfdXcgY3Bvb2xfc2tpcF9hbGlnbm1lbnQ7CisJc2xqaXRfdXcgY3Bvb2xfY3VycmVudF9pbmRleDsKKwlzbGppdF91dyAqY3Bvb2xfc3RhcnRfYWRkcmVzczsKKwlzbGppdF91dyAqbGFzdF9wY19wYXRjaDsKKwlzdHJ1Y3QgZnV0dXJlX3BhdGNoICpmaXJzdF9wYXRjaDsKKyNlbmRpZgorCisJc3RydWN0IHNsaml0X2xhYmVsICpsYWJlbDsKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKwlzdHJ1Y3Qgc2xqaXRfY29uc3QgKmNvbnN0XzsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9nZW5lcmF0ZV9jb2RlKGNvbXBpbGVyKSk7CisJcmV2ZXJzZV9idWYoY29tcGlsZXIpOworCisJLyogU2Vjb25kIGNvZGUgZ2VuZXJhdGlvbiBwYXNzLiAqLworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKKwlzaXplID0gY29tcGlsZXItPnNpemUgKyAoY29tcGlsZXItPnBhdGNoZXMgPDwgMSk7CisJaWYgKGNvbXBpbGVyLT5jcG9vbF9maWxsID4gMCkKKwkJc2l6ZSArPSBjb21waWxlci0+Y3Bvb2xfZmlsbCArIENPTlNUX1BPT0xfQUxJR05NRU5UIC0gMTsKKyNlbHNlCisJc2l6ZSA9IGNvbXBpbGVyLT5zaXplOworI2VuZGlmCisJY29kZSA9IChzbGppdF91dyopU0xKSVRfTUFMTE9DX0VYRUMoc2l6ZSAqIHNpemVvZihzbGppdF91dykpOworCVBUUl9GQUlMX1dJVEhfRVhFQ19JRihjb2RlKTsKKwlidWYgPSBjb21waWxlci0+YnVmOworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KQorCWNwb29sX3NpemUgPSAwOworCWNwb29sX3NraXBfYWxpZ25tZW50ID0gMDsKKwljcG9vbF9jdXJyZW50X2luZGV4ID0gMDsKKwljcG9vbF9zdGFydF9hZGRyZXNzID0gTlVMTDsKKwlmaXJzdF9wYXRjaCA9IE5VTEw7CisJbGFzdF9wY19wYXRjaCA9IGNvZGU7CisjZW5kaWYKKworCWNvZGVfcHRyID0gY29kZTsKKwl3b3JkX2NvdW50ID0gMDsKKworCWxhYmVsID0gY29tcGlsZXItPmxhYmVsczsKKwlqdW1wID0gY29tcGlsZXItPmp1bXBzOworCWNvbnN0XyA9IGNvbXBpbGVyLT5jb25zdHM7CisKKwlpZiAobGFiZWwgJiYgbGFiZWwtPnNpemUgPT0gMCkgeworCQlsYWJlbC0+YWRkciA9IChzbGppdF91dyljb2RlOworCQlsYWJlbC0+c2l6ZSA9IDA7CisJCWxhYmVsID0gbGFiZWwtPm5leHQ7CisJfQorCisJZG8geworCQlidWZfcHRyID0gKHNsaml0X3V3KilidWYtPm1lbW9yeTsKKwkJYnVmX2VuZCA9IGJ1Zl9wdHIgKyAoYnVmLT51c2VkX3NpemUgPj4gMik7CisJCWRvIHsKKwkJCXdvcmRfY291bnQrKzsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCisJCQlpZiAoY3Bvb2xfc2l6ZSA+IDApIHsKKwkJCQlpZiAoY3Bvb2xfc2tpcF9hbGlnbm1lbnQgPiAwKSB7CisJCQkJCWJ1Zl9wdHIrKzsKKwkJCQkJY3Bvb2xfc2tpcF9hbGlnbm1lbnQtLTsKKwkJCQl9CisJCQkJZWxzZSB7CisJCQkJCWlmIChTTEpJVF9VTkxJS0VMWShyZXNvbHZlX2NvbnN0X3Bvb2xfaW5kZXgoY29tcGlsZXIsICZmaXJzdF9wYXRjaCwgY3Bvb2xfY3VycmVudF9pbmRleCwgY3Bvb2xfc3RhcnRfYWRkcmVzcywgYnVmX3B0cikpKSB7CisJCQkJCQlTTEpJVF9GUkVFX0VYRUMoY29kZSk7CisJCQkJCQljb21waWxlci0+ZXJyb3IgPSBTTEpJVF9FUlJfQUxMT0NfRkFJTEVEOworCQkJCQkJcmV0dXJuIE5VTEw7CisJCQkJCX0KKwkJCQkJYnVmX3B0cisrOworCQkJCQlpZiAoKytjcG9vbF9jdXJyZW50X2luZGV4ID49IGNwb29sX3NpemUpIHsKKwkJCQkJCVNMSklUX0FTU0VSVCghZmlyc3RfcGF0Y2gpOworCQkJCQkJY3Bvb2xfc2l6ZSA9IDA7CisJCQkJCQlpZiAobGFiZWwgJiYgbGFiZWwtPnNpemUgPT0gd29yZF9jb3VudCkgeworCQkJCQkJCS8qIFBvaW50cyBhZnRlciB0aGUgY3VycmVudCBpbnN0cnVjdGlvbi4gKi8KKwkJCQkJCQlsYWJlbC0+YWRkciA9IChzbGppdF91dyljb2RlX3B0cjsKKwkJCQkJCQlsYWJlbC0+c2l6ZSA9IGNvZGVfcHRyIC0gY29kZTsKKwkJCQkJCQlsYWJlbCA9IGxhYmVsLT5uZXh0OworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkJZWxzZSBpZiAoKCpidWZfcHRyICYgMHhmZjAwMDAwMCkgIT0gUFVTSF9QT09MKSB7CisjZW5kaWYKKwkJCQkqY29kZV9wdHIgPSAqYnVmX3B0cisrOworCQkJCS8qIFRoZXNlIHN0cnVjdHVyZXMgYXJlIG9yZGVyZWQgYnkgdGhlaXIgYWRkcmVzcy4gKi8KKwkJCQlTTEpJVF9BU1NFUlQoIWxhYmVsIHx8IGxhYmVsLT5zaXplID49IHdvcmRfY291bnQpOworCQkJCVNMSklUX0FTU0VSVCghanVtcCB8fCBqdW1wLT5hZGRyID49IHdvcmRfY291bnQpOworCQkJCVNMSklUX0FTU0VSVCghY29uc3RfIHx8IGNvbnN0Xy0+YWRkciA+PSB3b3JkX2NvdW50KTsKKwkJCQlpZiAoanVtcCAmJiBqdW1wLT5hZGRyID09IHdvcmRfY291bnQpIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCisJCQkJCWlmIChkZXRlY3RfanVtcF90eXBlKGp1bXAsIGNvZGVfcHRyLCBjb2RlKSkKKwkJCQkJCWNvZGVfcHRyLS07CisJCQkJCWp1bXAtPmFkZHIgPSAoc2xqaXRfdXcpY29kZV9wdHI7CisjZWxzZQorCQkJCQlqdW1wLT5hZGRyID0gKHNsaml0X3V3KShjb2RlX3B0ciAtIDIpOworCQkJCQlpZiAoZGV0ZWN0X2p1bXBfdHlwZShqdW1wLCBjb2RlX3B0ciwgY29kZSkpCisJCQkJCQljb2RlX3B0ciAtPSAyOworI2VuZGlmCisJCQkJCWp1bXAgPSBqdW1wLT5uZXh0OworCQkJCX0KKwkJCQlpZiAobGFiZWwgJiYgbGFiZWwtPnNpemUgPT0gd29yZF9jb3VudCkgeworCQkJCQkvKiBjb2RlX3B0ciBjYW4gYmUgYWZmZWN0ZWQgYWJvdmUuICovCisJCQkJCWxhYmVsLT5hZGRyID0gKHNsaml0X3V3KShjb2RlX3B0ciArIDEpOworCQkJCQlsYWJlbC0+c2l6ZSA9IChjb2RlX3B0ciArIDEpIC0gY29kZTsKKwkJCQkJbGFiZWwgPSBsYWJlbC0+bmV4dDsKKwkJCQl9CisJCQkJaWYgKGNvbnN0XyAmJiBjb25zdF8tPmFkZHIgPT0gd29yZF9jb3VudCkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKKwkJCQkJY29uc3RfLT5hZGRyID0gKHNsaml0X3V3KWNvZGVfcHRyOworI2Vsc2UKKwkJCQkJY29uc3RfLT5hZGRyID0gKHNsaml0X3V3KShjb2RlX3B0ciAtIDEpOworI2VuZGlmCisJCQkJCWNvbnN0XyA9IGNvbnN0Xy0+bmV4dDsKKwkJCQl9CisJCQkJY29kZV9wdHIrKzsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCisJCQl9CisJCQllbHNlIHsKKwkJCQkvKiBGb3J0dW5hdGVseSwgbm8gbmVlZCB0byBzaGlmdC4gKi8KKwkJCQljcG9vbF9zaXplID0gKmJ1Zl9wdHIrKyAmIH5QVVNIX1BPT0w7CisJCQkJU0xKSVRfQVNTRVJUKGNwb29sX3NpemUgPiAwKTsKKwkJCQljcG9vbF9zdGFydF9hZGRyZXNzID0gQUxJR05fSU5TVFJVQ1RJT04oY29kZV9wdHIgKyAxKTsKKwkJCQljcG9vbF9jdXJyZW50X2luZGV4ID0gcGF0Y2hfcGNfcmVsYXRpdmVfbG9hZHMobGFzdF9wY19wYXRjaCwgY29kZV9wdHIsIGNwb29sX3N0YXJ0X2FkZHJlc3MsIGNwb29sX3NpemUpOworCQkJCWlmIChjcG9vbF9jdXJyZW50X2luZGV4ID4gMCkgeworCQkJCQkvKiBVbmNvbmRpdGlvbmFsIGJyYW5jaC4gKi8KKwkJCQkJKmNvZGVfcHRyID0gQiB8ICgoKGNwb29sX3N0YXJ0X2FkZHJlc3MgLSBjb2RlX3B0cikgKyBjcG9vbF9jdXJyZW50X2luZGV4IC0gMikgJiB+UFVTSF9QT09MKTsKKwkJCQkJY29kZV9wdHIgPSBjcG9vbF9zdGFydF9hZGRyZXNzICsgY3Bvb2xfY3VycmVudF9pbmRleDsKKwkJCQl9CisJCQkJY3Bvb2xfc2tpcF9hbGlnbm1lbnQgPSBDT05TVF9QT09MX0FMSUdOTUVOVCAtIDE7CisJCQkJY3Bvb2xfY3VycmVudF9pbmRleCA9IDA7CisJCQkJbGFzdF9wY19wYXRjaCA9IGNvZGVfcHRyOworCQkJfQorI2VuZGlmCisJCX0gd2hpbGUgKGJ1Zl9wdHIgPCBidWZfZW5kKTsKKwkJYnVmID0gYnVmLT5uZXh0OworCX0gd2hpbGUgKGJ1Zik7CisKKwlTTEpJVF9BU1NFUlQoIWxhYmVsKTsKKwlTTEpJVF9BU1NFUlQoIWp1bXApOworCVNMSklUX0FTU0VSVCghY29uc3RfKTsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKKwlTTEpJVF9BU1NFUlQoY3Bvb2xfc2l6ZSA9PSAwKTsKKwlpZiAoY29tcGlsZXItPmNwb29sX2ZpbGwgPiAwKSB7CisJCWNwb29sX3N0YXJ0X2FkZHJlc3MgPSBBTElHTl9JTlNUUlVDVElPTihjb2RlX3B0cik7CisJCWNwb29sX2N1cnJlbnRfaW5kZXggPSBwYXRjaF9wY19yZWxhdGl2ZV9sb2FkcyhsYXN0X3BjX3BhdGNoLCBjb2RlX3B0ciwgY3Bvb2xfc3RhcnRfYWRkcmVzcywgY29tcGlsZXItPmNwb29sX2ZpbGwpOworCQlpZiAoY3Bvb2xfY3VycmVudF9pbmRleCA+IDApCisJCQljb2RlX3B0ciA9IGNwb29sX3N0YXJ0X2FkZHJlc3MgKyBjcG9vbF9jdXJyZW50X2luZGV4OworCisJCWJ1Zl9wdHIgPSBjb21waWxlci0+Y3Bvb2w7CisJCWJ1Zl9lbmQgPSBidWZfcHRyICsgY29tcGlsZXItPmNwb29sX2ZpbGw7CisJCWNwb29sX2N1cnJlbnRfaW5kZXggPSAwOworCQl3aGlsZSAoYnVmX3B0ciA8IGJ1Zl9lbmQpIHsKKwkJCWlmIChTTEpJVF9VTkxJS0VMWShyZXNvbHZlX2NvbnN0X3Bvb2xfaW5kZXgoY29tcGlsZXIsICZmaXJzdF9wYXRjaCwgY3Bvb2xfY3VycmVudF9pbmRleCwgY3Bvb2xfc3RhcnRfYWRkcmVzcywgYnVmX3B0cikpKSB7CisJCQkJU0xKSVRfRlJFRV9FWEVDKGNvZGUpOworCQkJCWNvbXBpbGVyLT5lcnJvciA9IFNMSklUX0VSUl9BTExPQ19GQUlMRUQ7CisJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlidWZfcHRyKys7CisJCQljcG9vbF9jdXJyZW50X2luZGV4Kys7CisJCX0KKwkJU0xKSVRfQVNTRVJUKCFmaXJzdF9wYXRjaCk7CisJfQorI2VuZGlmCisKKwlqdW1wID0gY29tcGlsZXItPmp1bXBzOworCXdoaWxlIChqdW1wKSB7CisJCWJ1Zl9wdHIgPSAoc2xqaXRfdXcqKWp1bXAtPmFkZHI7CisKKwkJaWYgKGp1bXAtPmZsYWdzICYgUEFUQ0hfQikgeworCQkJaWYgKCEoanVtcC0+ZmxhZ3MgJiBKVU1QX0FERFIpKSB7CisJCQkJU0xKSVRfQVNTRVJUKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCk7CisJCQkJU0xKSVRfQVNTRVJUKCgoc2xqaXRfc3cpanVtcC0+dS5sYWJlbC0+YWRkciAtIChzbGppdF9zdykoYnVmX3B0ciArIDIpKSA8PSAweDAxZmZmZmZmICYmICgoc2xqaXRfc3cpanVtcC0+dS5sYWJlbC0+YWRkciAtIChzbGppdF9zdykoYnVmX3B0ciArIDIpKSA+PSAtMHgwMjAwMDAwMCk7CisJCQkJKmJ1Zl9wdHIgfD0gKCgoc2xqaXRfc3cpanVtcC0+dS5sYWJlbC0+YWRkciAtIChzbGppdF9zdykoYnVmX3B0ciArIDIpKSA+PiAyKSAmIDB4MDBmZmZmZmY7CisJCQl9CisJCQllbHNlIHsKKwkJCQlTTEpJVF9BU1NFUlQoKChzbGppdF9zdylqdW1wLT51LnRhcmdldCAtIChzbGppdF9zdykoYnVmX3B0ciArIDIpKSA8PSAweDAxZmZmZmZmICYmICgoc2xqaXRfc3cpanVtcC0+dS50YXJnZXQgLSAoc2xqaXRfc3cpKGJ1Zl9wdHIgKyAyKSkgPj0gLTB4MDIwMDAwMDApOworCQkJCSpidWZfcHRyIHw9ICgoKHNsaml0X3N3KWp1bXAtPnUudGFyZ2V0IC0gKHNsaml0X3N3KShidWZfcHRyICsgMikpID4+IDIpICYgMHgwMGZmZmZmZjsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChqdW1wLT5mbGFncyAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKKwkJCWp1bXAtPmFkZHIgPSAoc2xqaXRfdXcpY29kZV9wdHI7CisJCQljb2RlX3B0clswXSA9IChzbGppdF91dylidWZfcHRyOworCQkJY29kZV9wdHJbMV0gPSAqYnVmX3B0cjsKKwkJCWlubGluZV9zZXRfanVtcF9hZGRyKChzbGppdF91dyljb2RlX3B0ciwgKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCkgPyBqdW1wLT51LmxhYmVsLT5hZGRyIDoganVtcC0+dS50YXJnZXQsIDApOworCQkJY29kZV9wdHIgKz0gMjsKKyNlbHNlCisJCQlpbmxpbmVfc2V0X2p1bXBfYWRkcigoc2xqaXRfdXcpYnVmX3B0ciwgKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCkgPyBqdW1wLT51LmxhYmVsLT5hZGRyIDoganVtcC0+dS50YXJnZXQsIDApOworI2VuZGlmCisJCX0KKwkJZWxzZSB7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KQorCQkJaWYgKGp1bXAtPmZsYWdzICYgSVNfQkwpCisJCQkJYnVmX3B0ci0tOworCQkJaWYgKCpidWZfcHRyICYgKDEgPDwgMjMpKQorCQkJCWJ1Zl9wdHIgKz0gKCgqYnVmX3B0ciAmIDB4ZmZmKSA+PiAyKSArIDI7CisJCQllbHNlCisJCQkJYnVmX3B0ciArPSAxOworCQkJKmJ1Zl9wdHIgPSAoanVtcC0+ZmxhZ3MgJiBKVU1QX0xBQkVMKSA/IGp1bXAtPnUubGFiZWwtPmFkZHIgOiBqdW1wLT51LnRhcmdldDsKKyNlbHNlCisJCQlpbmxpbmVfc2V0X2p1bXBfYWRkcigoc2xqaXRfdXcpYnVmX3B0ciwgKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCkgPyBqdW1wLT51LmxhYmVsLT5hZGRyIDoganVtcC0+dS50YXJnZXQsIDApOworI2VuZGlmCisJCX0KKwkJanVtcCA9IGp1bXAtPm5leHQ7CisJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX0FSTV9WNSAmJiBTTEpJVF9DT05GSUdfQVJNX1Y1KQorCWNvbnN0XyA9IGNvbXBpbGVyLT5jb25zdHM7CisJd2hpbGUgKGNvbnN0XykgeworCQlidWZfcHRyID0gKHNsaml0X3V3Kiljb25zdF8tPmFkZHI7CisJCWNvbnN0Xy0+YWRkciA9IChzbGppdF91dyljb2RlX3B0cjsKKworCQljb2RlX3B0clswXSA9IChzbGppdF91dylidWZfcHRyOworCQljb2RlX3B0clsxXSA9ICpidWZfcHRyOworCQlpZiAoKmJ1Zl9wdHIgJiAoMSA8PCAyMykpCisJCQlidWZfcHRyICs9ICgoKmJ1Zl9wdHIgJiAweGZmZikgPj4gMikgKyAyOworCQllbHNlCisJCQlidWZfcHRyICs9IDE7CisJCS8qIFNldCB0aGUgdmFsdWUgYWdhaW4gKGNhbiBiZSBhIHNpbXBsZSBjb25zdGFudCkuICovCisJCWlubGluZV9zZXRfY29uc3QoKHNsaml0X3V3KWNvZGVfcHRyLCAqYnVmX3B0ciwgMCk7CisJCWNvZGVfcHRyICs9IDI7CisKKwkJY29uc3RfID0gY29uc3RfLT5uZXh0OworCX0KKyNlbmRpZgorCisJU0xKSVRfQVNTRVJUKGNvZGVfcHRyIC0gY29kZSA8PSAoc2xqaXRfc2kpc2l6ZSk7CisKKwljb21waWxlci0+ZXJyb3IgPSBTTEpJVF9FUlJfQ09NUElMRUQ7CisJY29tcGlsZXItPmV4ZWN1dGFibGVfc2l6ZSA9IChjb2RlX3B0ciAtIGNvZGUpICogc2l6ZW9mKHNsaml0X3V3KTsKKwlTTEpJVF9DQUNIRV9GTFVTSChjb2RlLCBjb2RlX3B0cik7CisJcmV0dXJuIGNvZGU7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIEVudHJ5LCBleGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogZW1pdF9vcCBpbnBfZmxhZ3MuCisgICBXUklURV9CQUNLIG11c3QgYmUgdGhlIGZpcnN0LCBzaW5jZSBpdCBpcyBhIGZsYWcuICovCisjZGVmaW5lIFdSSVRFX0JBQ0sJMHgwMQorI2RlZmluZSBBTExPV19JTU0JMHgwMgorI2RlZmluZSBBTExPV19JTlZfSU1NCTB4MDQKKyNkZWZpbmUgQUxMT1dfQU5ZX0lNTQkoQUxMT1dfSU1NIHwgQUxMT1dfSU5WX0lNTSkKKyNkZWZpbmUgQVJHX1RFU1QJMHgwOAorCisvKiBDcmVhdGVzIGFuIGluZGV4IGluIGRhdGFfdHJhbnNmZXJfaW5zdHMgYXJyYXkuICovCisjZGVmaW5lIFdPUkRfREFUQQkweDAwCisjZGVmaW5lIEJZVEVfREFUQQkweDEwCisjZGVmaW5lIEhBTEZfREFUQQkweDIwCisjZGVmaW5lIFNJR05FRF9EQVRBCTB4NDAKKyNkZWZpbmUgTE9BRF9EQVRBCTB4ODAKKworLyogQ29uZGl0aW9uOiBBTC4gKi8KKyNkZWZpbmUgRU1JVF9EQVRBX1BST0NFU1NfSU5TKG9wY29kZSwgc2V0X2ZsYWdzLCBkc3QsIHNyYzEsIHNyYzIpIFwKKwkoMHhlMDAwMDAwMCB8ICgob3Bjb2RlKSA8PCAyMSkgfCAoc2V0X2ZsYWdzKSB8IFJEKGRzdCkgfCBSTihzcmMxKSB8IChzcmMyKSkKKworc3RhdGljIHNsaml0X3NpIGVtaXRfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGlucF9mbGFncywKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpOworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAorCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCit7CisJc2xqaXRfc2kgc2l6ZSwgaSwgdG1wOworCXNsaml0X3V3IHB1c2g7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZW50ZXIoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CisJc2V0X2VtaXRfZW50ZXIoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKTsKKworCS8qIFB1c2ggc2F2ZWQgcmVnaXN0ZXJzLCB0ZW1wb3JhcnkgcmVnaXN0ZXJzCisJICAgc3RtZGIgc3AhLCB7Li4uLCBscn0gKi8KKwlwdXNoID0gUFVTSCB8ICgxIDw8IDE0KTsKKworCXRtcCA9IHNhdmVkcyA8IFNMSklUX05VTUJFUl9PRl9TQVZFRF9SRUdJU1RFUlMgPyAoU0xKSVRfUzAgKyAxIC0gc2F2ZWRzKSA6IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsKKwlmb3IgKGkgPSBTTEpJVF9TMDsgaSA+PSB0bXA7IGktLSkKKwkJcHVzaCB8PSAxIDw8IHJlZ19tYXBbaV07CisKKwlmb3IgKGkgPSBzY3JhdGNoZXM7IGkgPj0gU0xKSVRfRklSU1RfU0FWRURfUkVHOyBpLS0pCisJCXB1c2ggfD0gMSA8PCByZWdfbWFwW2ldOworCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIHB1c2gpKTsKKworCS8qIFN0YWNrIG11c3QgYmUgYWxpZ25lZCB0byA4IGJ5dGVzOiAqLworCXNpemUgPSBHRVRfU0FWRURfUkVHSVNURVJTX1NJWkUoc2NyYXRjaGVzLCBzYXZlZHMsIDEpOworCWxvY2FsX3NpemUgPSAoKHNpemUgKyBsb2NhbF9zaXplICsgNykgJiB+NykgLSBzaXplOworCWNvbXBpbGVyLT5sb2NhbF9zaXplID0gbG9jYWxfc2l6ZTsKKwlpZiAobG9jYWxfc2l6ZSA+IDApCisJCUZBSUxfSUYoZW1pdF9vcChjb21waWxlciwgU0xKSVRfU1VCLCBBTExPV19JTU0sIFNMSklUX1NQLCAwLCBTTEpJVF9TUCwgMCwgU0xKSVRfSU1NLCBsb2NhbF9zaXplKSk7CisKKwlpZiAoYXJncyA+PSAxKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKE1PVl9EUCwgMCwgU0xKSVRfUzAsIFNMSklUX1VOVVNFRCwgUk0oU0xKSVRfUjApKSkpOworCWlmIChhcmdzID49IDIpCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCAwLCBTTEpJVF9TMSwgU0xKSVRfVU5VU0VELCBSTShTTEpJVF9SMSkpKSk7CisJaWYgKGFyZ3MgPj0gMykKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhNT1ZfRFAsIDAsIFNMSklUX1MyLCBTTEpJVF9VTlVTRUQsIFJNKFNMSklUX1IyKSkpKTsKKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKKwlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQoreworCXNsaml0X3NpIHNpemU7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X3NldF9jb250ZXh0KGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSkpOworCXNldF9zZXRfY29udGV4dChjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpOworCisJc2l6ZSA9IEdFVF9TQVZFRF9SRUdJU1RFUlNfU0laRShzY3JhdGNoZXMsIHNhdmVkcywgMSk7CisJY29tcGlsZXItPmxvY2FsX3NpemUgPSAoKHNpemUgKyBsb2NhbF9zaXplICsgNykgJiB+NykgLSBzaXplOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBpLCB0bXA7CisJc2xqaXRfdXcgcG9wOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X3JldHVybihjb21waWxlciwgb3AsIHNyYywgc3JjdykpOworCisJRkFJTF9JRihlbWl0X21vdl9iZWZvcmVfcmV0dXJuKGNvbXBpbGVyLCBvcCwgc3JjLCBzcmN3KSk7CisKKwlpZiAoY29tcGlsZXItPmxvY2FsX3NpemUgPiAwKQorCQlGQUlMX0lGKGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX0FERCwgQUxMT1dfSU1NLCBTTEpJVF9TUCwgMCwgU0xKSVRfU1AsIDAsIFNMSklUX0lNTSwgY29tcGlsZXItPmxvY2FsX3NpemUpKTsKKworCS8qIFB1c2ggc2F2ZWQgcmVnaXN0ZXJzLCB0ZW1wb3JhcnkgcmVnaXN0ZXJzCisJICAgbGRtaWEgc3AhLCB7Li4uLCBwY30gKi8KKwlwb3AgPSBQT1AgfCAoMSA8PCAxNSk7CisKKwl0bXAgPSBjb21waWxlci0+c2F2ZWRzIDwgU0xKSVRfTlVNQkVSX09GX1NBVkVEX1JFR0lTVEVSUyA/IChTTEpJVF9TMCArIDEgLSBjb21waWxlci0+c2F2ZWRzKSA6IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsKKwlmb3IgKGkgPSBTTEpJVF9TMDsgaSA+PSB0bXA7IGktLSkKKwkJcG9wIHw9IDEgPDwgcmVnX21hcFtpXTsKKworCWZvciAoaSA9IGNvbXBpbGVyLT5zY3JhdGNoZXM7IGkgPj0gU0xKSVRfRklSU1RfU0FWRURfUkVHOyBpLS0pCisJCXBvcCB8PSAxIDw8IHJlZ19tYXBbaV07CisKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBwb3ApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBPcGVyYXRvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIHMvbCAtIHN0b3JlL2xvYWQgKDEgYml0KQorICAgdS9zIC0gc2lnbmVkL3Vuc2lnbmVkICgxIGJpdCkKKyAgIHcvYi9oL04gLSB3b3JkL2J5dGUvaGFsZi9OT1QgYWxsb3dlZCAoMiBiaXQpCisgICBJdCBjb250YW5zIDE2IGl0ZW1zLCBidXQgbm90IGFsbCBhcmUgZGlmZmVyZW50LiAqLworCitzdGF0aWMgc2xqaXRfc3cgZGF0YV90cmFuc2Zlcl9pbnN0c1sxNl0gPSB7CisvKiBzIHUgdyAqLyAweGU1MDAwMDAwIC8qIHN0ciAqLywKKy8qIHMgdSBiICovIDB4ZTU0MDAwMDAgLyogc3RyYiAqLywKKy8qIHMgdSBoICovIDB4ZTEwMDAwYjAgLyogc3RyaCAqLywKKy8qIHMgdSBOICovIDB4MDAwMDAwMDAgLyogbm90IGFsbG93ZWQgKi8sCisvKiBzIHMgdyAqLyAweGU1MDAwMDAwIC8qIHN0ciAqLywKKy8qIHMgcyBiICovIDB4ZTU0MDAwMDAgLyogc3RyYiAqLywKKy8qIHMgcyBoICovIDB4ZTEwMDAwYjAgLyogc3RyaCAqLywKKy8qIHMgcyBOICovIDB4MDAwMDAwMDAgLyogbm90IGFsbG93ZWQgKi8sCisKKy8qIGwgdSB3ICovIDB4ZTUxMDAwMDAgLyogbGRyICovLAorLyogbCB1IGIgKi8gMHhlNTUwMDAwMCAvKiBsZHJiICovLAorLyogbCB1IGggKi8gMHhlMTEwMDBiMCAvKiBsZHJoICovLAorLyogbCB1IE4gKi8gMHgwMDAwMDAwMCAvKiBub3QgYWxsb3dlZCAqLywKKy8qIGwgcyB3ICovIDB4ZTUxMDAwMDAgLyogbGRyICovLAorLyogbCBzIGIgKi8gMHhlMTEwMDBkMCAvKiBsZHJzYiAqLywKKy8qIGwgcyBoICovIDB4ZTExMDAwZjAgLyogbGRyc2ggKi8sCisvKiBsIHMgTiAqLyAweDAwMDAwMDAwIC8qIG5vdCBhbGxvd2VkICovLAorfTsKKworI2RlZmluZSBFTUlUX0RBVEFfVFJBTlNGRVIodHlwZSwgYWRkLCB3YiwgdGFyZ2V0LCBiYXNlMSwgYmFzZTIpIFwKKwkoZGF0YV90cmFuc2Zlcl9pbnN0c1sodHlwZSkgPj4gNF0gfCAoKGFkZCkgPDwgMjMpIHwgKCh3YikgPDwgMjEpIHwgKHJlZ19tYXBbdGFyZ2V0XSA8PCAxMikgfCAocmVnX21hcFtiYXNlMV0gPDwgMTYpIHwgKGJhc2UyKSkKKy8qIE5vcm1hbCBsZHIvc3RyIGluc3RydWN0aW9uLgorICAgVHlwZTI6IGxkcnNiLCBsZHJoLCBsZHJzaCAqLworI2RlZmluZSBJU19UWVBFMV9UUkFOU0ZFUih0eXBlKSBcCisJKGRhdGFfdHJhbnNmZXJfaW5zdHNbKHR5cGUpID4+IDRdICYgMHgwNDAwMDAwMCkKKyNkZWZpbmUgVFlQRTJfVFJBTlNGRVJfSU1NKGltbSkgXAorCSgoKGltbSkgJiAweGYpIHwgKCgoaW1tKSAmIDB4ZjApIDw8IDQpIHwgKDEgPDwgMjIpKQorCisvKiBmbGFnczogKi8KKyAgLyogQXJndW1lbnRzIGFyZSBzd2FwcGVkLiAqLworI2RlZmluZSBBUkdTX1NXQVBQRUQJMHgwMQorICAvKiBJbnZlcnRlZCBpbW1lZGlhdGUuICovCisjZGVmaW5lIElOVl9JTU0JCTB4MDIKKyAgLyogU291cmNlIGFuZCBkZXN0aW5hdGlvbiBpcyByZWdpc3Rlci4gKi8KKyNkZWZpbmUgUkVHX0RFU1QJMHgwNAorI2RlZmluZSBSRUdfU09VUkNFCTB4MDgKKyAgLyogT25lIGluc3RydWN0aW9uIGlzIGVub3VnaC4gKi8KKyNkZWZpbmUgRkFTVF9ERVNUCTB4MTAKKyAgLyogTXVsdGlwbGUgaW5zdHJ1Y3Rpb25zIGFyZSByZXF1aXJlZC4gKi8KKyNkZWZpbmUgU0xPV19ERVNUCTB4MjAKKy8qIFNFVF9GTEFHUyBtdXN0IGJlICgxIDw8IDIwKSBhcyBpdCBpcyBhbHNvIHRoZSB2YWx1ZSBvZiBTIGJpdCAoY2FuIGJlIHVzZWQgZm9yIG9wdGltaXphdGlvbikuICovCisjZGVmaW5lIFNFVF9GTEFHUwkoMSA8PCAyMCkKKy8qIGRzdDogcmVnCisgICBzcmMxOiByZWcKKyAgIHNyYzI6IHJlZyBvciBpbW0gKGlmIGFsbG93ZWQpCisgICBTUkMyX0lNTSBtdXN0IGJlICgxIDw8IDI1KSBhcyBpdCBpcyBhbHNvIHRoZSB2YWx1ZSBvZiBJIGJpdCAoY2FuIGJlIHVzZWQgZm9yIG9wdGltaXphdGlvbikuICovCisjZGVmaW5lIFNSQzJfSU1NCSgxIDw8IDI1KQorCisjZGVmaW5lIEVNSVRfREFUQV9QUk9DRVNTX0lOU19BTkRfUkVUVVJOKG9wY29kZSkgXAorCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhvcGNvZGUsIGZsYWdzICYgU0VUX0ZMQUdTLCBkc3QsIHNyYzEsIChzcmMyICYgU1JDMl9JTU0pID8gc3JjMiA6IFJNKHNyYzIpKSkKKworI2RlZmluZSBFTUlUX0ZVTExfREFUQV9QUk9DRVNTX0lOU19BTkRfUkVUVVJOKG9wY29kZSwgZHN0LCBzcmMxLCBzcmMyKSBcCisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKG9wY29kZSwgZmxhZ3MgJiBTRVRfRkxBR1MsIGRzdCwgc3JjMSwgc3JjMikpCisKKyNkZWZpbmUgRU1JVF9TSElGVF9JTlNfQU5EX1JFVFVSTihvcGNvZGUpIFwKKwlTTEpJVF9BU1NFUlQoIShmbGFncyAmIElOVl9JTU0pICYmICEoc3JjMiAmIFNSQzJfSU1NKSk7IFwKKwlpZiAoY29tcGlsZXItPnNoaWZ0X2ltbSAhPSAweDIwKSB7IFwKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEpOyBcCisJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgQVJHU19TV0FQUEVEKSk7IFwKKwkJaWYgKGNvbXBpbGVyLT5zaGlmdF9pbW0gIT0gMCkgXAorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKE1PVl9EUCwgZmxhZ3MgJiBTRVRfRkxBR1MsIGRzdCwgU0xKSVRfVU5VU0VELCAoY29tcGlsZXItPnNoaWZ0X2ltbSA8PCA3KSB8IChvcGNvZGUgPDwgNSkgfCByZWdfbWFwW3NyYzJdKSk7IFwKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKE1PVl9EUCwgZmxhZ3MgJiBTRVRfRkxBR1MsIGRzdCwgU0xKSVRfVU5VU0VELCByZWdfbWFwW3NyYzJdKSk7IFwKKwl9IFwKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCBmbGFncyAmIFNFVF9GTEFHUywgZHN0LCBTTEpJVF9VTlVTRUQsIChyZWdfbWFwWyhmbGFncyAmIEFSR1NfU1dBUFBFRCkgPyBzcmMxIDogc3JjMl0gPDwgOCkgfCAob3Bjb2RlIDw8IDUpIHwgMHgxMCB8ICgoZmxhZ3MgJiBBUkdTX1NXQVBQRUQpID8gcmVnX21hcFtzcmMyXSA6IHJlZ19tYXBbc3JjMV0pKSk7CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9zaW5nbGVfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGZsYWdzLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc2kgc3JjMSwgc2xqaXRfc2kgc3JjMikKK3sKKwlzbGppdF9zdyBtdWxfaW5zdDsKKworCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKKwljYXNlIFNMSklUX01PVjoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEgJiYgIShmbGFncyAmIEFSR1NfU1dBUFBFRCkpOworCQlpZiAoZHN0ICE9IHNyYzIpIHsKKwkJCWlmIChzcmMyICYgU1JDMl9JTU0pIHsKKwkJCQlpZiAoZmxhZ3MgJiBJTlZfSU1NKQorCQkJCQlFTUlUX0ZVTExfREFUQV9QUk9DRVNTX0lOU19BTkRfUkVUVVJOKE1WTl9EUCwgZHN0LCBTTEpJVF9VTlVTRUQsIHNyYzIpOworCQkJCUVNSVRfRlVMTF9EQVRBX1BST0NFU1NfSU5TX0FORF9SRVRVUk4oTU9WX0RQLCBkc3QsIFNMSklUX1VOVVNFRCwgc3JjMik7CisJCQl9CisJCQlFTUlUX0ZVTExfREFUQV9QUk9DRVNTX0lOU19BTkRfUkVUVVJOKE1PVl9EUCwgZHN0LCBTTEpJVF9VTlVTRUQsIHJlZ19tYXBbc3JjMl0pOworCQl9CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9NT1ZfVUI6CisJY2FzZSBTTEpJVF9NT1ZfU0I6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBBUkdTX1NXQVBQRUQpKTsKKwkJaWYgKChmbGFncyAmIChSRUdfREVTVCB8IFJFR19TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUdfU09VUkNFKSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfVUIpCisJCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKEFORF9EUCwgMCwgZHN0LCBzcmMyLCBTUkMyX0lNTSB8IDB4ZmYpKTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCAwLCBkc3QsIFNMSklUX1VOVVNFRCwgKDI0IDw8IDcpIHwgcmVnX21hcFtzcmMyXSkpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhNT1ZfRFAsIDAsIGRzdCwgU0xKSVRfVU5VU0VELCAoMjQgPDwgNykgfCAob3AgPT0gU0xKSVRfTU9WX1VCID8gMHgyMCA6IDB4NDApIHwgcmVnX21hcFtkc3RdKSk7CisjZWxzZQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX01PVl9VQiA/IFVYVEIgOiBTWFRCKSB8IFJEKGRzdCkgfCBSTShzcmMyKSk7CisjZW5kaWYKKwkJfQorCQllbHNlIGlmIChkc3QgIT0gc3JjMikgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgJiBTUkMyX0lNTSk7CisJCQlpZiAoZmxhZ3MgJiBJTlZfSU1NKQorCQkJCUVNSVRfRlVMTF9EQVRBX1BST0NFU1NfSU5TX0FORF9SRVRVUk4oTVZOX0RQLCBkc3QsIFNMSklUX1VOVVNFRCwgc3JjMik7CisJCQlFTUlUX0ZVTExfREFUQV9QUk9DRVNTX0lOU19BTkRfUkVUVVJOKE1PVl9EUCwgZHN0LCBTTEpJVF9VTlVTRUQsIHNyYzIpOworCQl9CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9NT1ZfVUg6CisJY2FzZSBTTEpJVF9NT1ZfU0g6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBBUkdTX1NXQVBQRUQpKTsKKwkJaWYgKChmbGFncyAmIChSRUdfREVTVCB8IFJFR19TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUdfU09VUkNFKSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCAwLCBkc3QsIFNMSklUX1VOVVNFRCwgKDE2IDw8IDcpIHwgcmVnX21hcFtzcmMyXSkpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhNT1ZfRFAsIDAsIGRzdCwgU0xKSVRfVU5VU0VELCAoMTYgPDwgNykgfCAob3AgPT0gU0xKSVRfTU9WX1VIID8gMHgyMCA6IDB4NDApIHwgcmVnX21hcFtkc3RdKSk7CisjZWxzZQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX01PVl9VSCA/IFVYVEggOiBTWFRIKSB8IFJEKGRzdCkgfCBSTShzcmMyKSk7CisjZW5kaWYKKwkJfQorCQllbHNlIGlmIChkc3QgIT0gc3JjMikgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgJiBTUkMyX0lNTSk7CisJCQlpZiAoZmxhZ3MgJiBJTlZfSU1NKQorCQkJCUVNSVRfRlVMTF9EQVRBX1BST0NFU1NfSU5TX0FORF9SRVRVUk4oTVZOX0RQLCBkc3QsIFNMSklUX1VOVVNFRCwgc3JjMik7CisJCQlFTUlUX0ZVTExfREFUQV9QUk9DRVNTX0lOU19BTkRfUkVUVVJOKE1PVl9EUCwgZHN0LCBTTEpJVF9VTlVTRUQsIHNyYzIpOworCQl9CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9OT1Q6CisJCWlmIChzcmMyICYgU1JDMl9JTU0pIHsKKwkJCWlmIChmbGFncyAmIElOVl9JTU0pCisJCQkJRU1JVF9GVUxMX0RBVEFfUFJPQ0VTU19JTlNfQU5EX1JFVFVSTihNT1ZfRFAsIGRzdCwgU0xKSVRfVU5VU0VELCBzcmMyKTsKKwkJCUVNSVRfRlVMTF9EQVRBX1BST0NFU1NfSU5TX0FORF9SRVRVUk4oTVZOX0RQLCBkc3QsIFNMSklUX1VOVVNFRCwgc3JjMik7CisJCX0KKwkJRU1JVF9GVUxMX0RBVEFfUFJPQ0VTU19JTlNfQU5EX1JFVFVSTihNVk5fRFAsIGRzdCwgU0xKSVRfVU5VU0VELCBSTShzcmMyKSk7CisKKwljYXNlIFNMSklUX0NMWjoKKwkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBJTlZfSU1NKSk7CisJCVNMSklUX0FTU0VSVCghKHNyYzIgJiBTUkMyX0lNTSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQ0xaIHwgUkQoZHN0KSB8IFJNKHNyYzIpKSk7CisJCWlmIChmbGFncyAmIFNFVF9GTEFHUykKKwkJCUVNSVRfRlVMTF9EQVRBX1BST0NFU1NfSU5TX0FORF9SRVRVUk4oQ01QX0RQLCBTTEpJVF9VTlVTRUQsIGRzdCwgU1JDMl9JTU0pOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfQUREOgorCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIElOVl9JTU0pKTsKKwkJRU1JVF9EQVRBX1BST0NFU1NfSU5TX0FORF9SRVRVUk4oQUREX0RQKTsKKworCWNhc2UgU0xKSVRfQUREQzoKKwkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBJTlZfSU1NKSk7CisJCUVNSVRfREFUQV9QUk9DRVNTX0lOU19BTkRfUkVUVVJOKEFEQ19EUCk7CisKKwljYXNlIFNMSklUX1NVQjoKKwkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBJTlZfSU1NKSk7CisJCWlmICghKGZsYWdzICYgQVJHU19TV0FQUEVEKSkKKwkJCUVNSVRfREFUQV9QUk9DRVNTX0lOU19BTkRfUkVUVVJOKFNVQl9EUCk7CisJCUVNSVRfREFUQV9QUk9DRVNTX0lOU19BTkRfUkVUVVJOKFJTQl9EUCk7CisKKwljYXNlIFNMSklUX1NVQkM6CisJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgSU5WX0lNTSkpOworCQlpZiAoIShmbGFncyAmIEFSR1NfU1dBUFBFRCkpCisJCQlFTUlUX0RBVEFfUFJPQ0VTU19JTlNfQU5EX1JFVFVSTihTQkNfRFApOworCQlFTUlUX0RBVEFfUFJPQ0VTU19JTlNfQU5EX1JFVFVSTihSU0NfRFApOworCisJY2FzZSBTTEpJVF9NVUw6CisJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgSU5WX0lNTSkpOworCQlTTEpJVF9BU1NFUlQoIShzcmMyICYgU1JDMl9JTU0pKTsKKwkJaWYgKFNMSklUX1VOTElLRUxZKG9wICYgU0xKSVRfU0VUX08pKQorCQkJbXVsX2luc3QgPSBTTVVMTCB8IChyZWdfbWFwW1RNUF9SRUczXSA8PCAxNikgfCAocmVnX21hcFtkc3RdIDw8IDEyKTsKKwkJZWxzZQorCQkJbXVsX2luc3QgPSBNVUwgfCAocmVnX21hcFtkc3RdIDw8IDE2KTsKKworCQlpZiAoZHN0ICE9IHNyYzIpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgbXVsX2luc3QgfCAocmVnX21hcFtzcmMxXSA8PCA4KSB8IHJlZ19tYXBbc3JjMl0pKTsKKwkJZWxzZSBpZiAoZHN0ICE9IHNyYzEpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgbXVsX2luc3QgfCAocmVnX21hcFtzcmMyXSA8PCA4KSB8IHJlZ19tYXBbc3JjMV0pKTsKKwkJZWxzZSB7CisJCQkvKiBSbSBhbmQgUmQgbXVzdCBub3QgYmUgdGhlIHNhbWUgcmVnaXN0ZXIuICovCisJCQlTTEpJVF9BU1NFUlQoZHN0ICE9IFRNUF9SRUcxKTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCAwLCBUTVBfUkVHMSwgU0xKSVRfVU5VU0VELCByZWdfbWFwW3NyYzJdKSkpOworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIG11bF9pbnN0IHwgKHJlZ19tYXBbc3JjMl0gPDwgOCkgfCByZWdfbWFwW1RNUF9SRUcxXSkpOworCQl9CisKKwkJaWYgKCEob3AgJiBTTEpJVF9TRVRfTykpCisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCQkvKiBXZSBuZWVkIHRvIHVzZSBUTVBfUkVHMy4gKi8KKwkJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKwkJLyogY21wIFRNUF9SRUcyLCBkc3QgYXNyICMzMS4gKi8KKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKENNUF9EUCwgU0VUX0ZMQUdTLCBTTEpJVF9VTlVTRUQsIFRNUF9SRUczLCBSTShkc3QpIHwgMHhmYzApKTsKKworCWNhc2UgU0xKSVRfQU5EOgorCQlpZiAoIShmbGFncyAmIElOVl9JTU0pKQorCQkJRU1JVF9EQVRBX1BST0NFU1NfSU5TX0FORF9SRVRVUk4oQU5EX0RQKTsKKwkJRU1JVF9EQVRBX1BST0NFU1NfSU5TX0FORF9SRVRVUk4oQklDX0RQKTsKKworCWNhc2UgU0xKSVRfT1I6CisJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgSU5WX0lNTSkpOworCQlFTUlUX0RBVEFfUFJPQ0VTU19JTlNfQU5EX1JFVFVSTihPUlJfRFApOworCisJY2FzZSBTTEpJVF9YT1I6CisJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgSU5WX0lNTSkpOworCQlFTUlUX0RBVEFfUFJPQ0VTU19JTlNfQU5EX1JFVFVSTihFT1JfRFApOworCisJY2FzZSBTTEpJVF9TSEw6CisJCUVNSVRfU0hJRlRfSU5TX0FORF9SRVRVUk4oMCk7CisKKwljYXNlIFNMSklUX0xTSFI6CisJCUVNSVRfU0hJRlRfSU5TX0FORF9SRVRVUk4oMSk7CisKKwljYXNlIFNMSklUX0FTSFI6CisJCUVNSVRfU0hJRlRfSU5TX0FORF9SRVRVUk4oMik7CisJfQorCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKKyN1bmRlZiBFTUlUX0RBVEFfUFJPQ0VTU19JTlNfQU5EX1JFVFVSTgorI3VuZGVmIEVNSVRfRlVMTF9EQVRBX1BST0NFU1NfSU5TX0FORF9SRVRVUk4KKyN1bmRlZiBFTUlUX1NISUZUX0lOU19BTkRfUkVUVVJOCisKKy8qIFRlc3RzIHdoZXRoZXIgdGhlIGltbWVkaWF0ZSBjYW4gYmUgc3RvcmVkIGluIHRoZSAxMiBiaXQgaW1tIGZpZWxkLgorICAgUmV0dXJucyB3aXRoIDAgaWYgbm90IHBvc3NpYmxlLiAqLworc3RhdGljIHNsaml0X3V3IGdldF9pbW0oc2xqaXRfdXcgaW1tKQoreworCXNsaml0X3NpIHJvbDsKKworCWlmIChpbW0gPD0gMHhmZikKKwkJcmV0dXJuIFNSQzJfSU1NIHwgaW1tOworCisJaWYgKCEoaW1tICYgMHhmZjAwMDAwMCkpIHsKKwkJaW1tIDw8PSA4OworCQlyb2wgPSA4OworCX0KKwllbHNlIHsKKwkJaW1tID0gKGltbSA8PCAyNCkgfCAoaW1tID4+IDgpOworCQlyb2wgPSAwOworCX0KKworCWlmICghKGltbSAmIDB4ZmYwMDAwMDApKSB7CisJCWltbSA8PD0gODsKKwkJcm9sICs9IDQ7CisJfQorCisJaWYgKCEoaW1tICYgMHhmMDAwMDAwMCkpIHsKKwkJaW1tIDw8PSA0OworCQlyb2wgKz0gMjsKKwl9CisKKwlpZiAoIShpbW0gJiAweGMwMDAwMDAwKSkgeworCQlpbW0gPDw9IDI7CisJCXJvbCArPSAxOworCX0KKworCWlmICghKGltbSAmIDB4MDBmZmZmZmYpKQorCQlyZXR1cm4gU1JDMl9JTU0gfCAoaW1tID4+IDI0KSB8IChyb2wgPDwgOCk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKK3N0YXRpYyBzbGppdF9zaSBnZW5lcmF0ZV9pbnQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgcmVnLCBzbGppdF91dyBpbW0sIHNsaml0X3NpIHBvc2l0aXZlKQoreworCXNsaml0X3V3IG1hc2s7CisJc2xqaXRfdXcgaW1tMTsKKwlzbGppdF91dyBpbW0yOworCXNsaml0X3NpIHJvbDsKKworCS8qIFN0ZXAxOiBTZWFyY2ggYSB6ZXJvIGJ5dGUgKDggY29udGlub3VzIHplcm8gYml0KS4gKi8KKwltYXNrID0gMHhmZjAwMDAwMDsKKwlyb2wgPSA4OworCXdoaWxlKDEpIHsKKwkJaWYgKCEoaW1tICYgbWFzaykpIHsKKwkJCS8qIFJvbCBpbW0gYnkgcm9sLiAqLworCQkJaW1tID0gKGltbSA8PCByb2wpIHwgKGltbSA+PiAoMzIgLSByb2wpKTsKKwkJCS8qIENhbGN1bGF0ZSBhcm0gcm9sLiAqLworCQkJcm9sID0gNCArIChyb2wgPj4gMSk7CisJCQlicmVhazsKKwkJfQorCQlyb2wgKz0gMjsKKwkJbWFzayA+Pj0gMjsKKwkJaWYgKG1hc2sgJiAweDMpIHsKKwkJCS8qIHJvbCBieSA4LiAqLworCQkJaW1tID0gKGltbSA8PCA4KSB8IChpbW0gPj4gMjQpOworCQkJbWFzayA9IDB4ZmYwMDsKKwkJCXJvbCA9IDI0OworCQkJd2hpbGUgKDEpIHsKKwkJCQlpZiAoIShpbW0gJiBtYXNrKSkgeworCQkJCQkvKiBSb2wgaW1tIGJ5IHJvbC4gKi8KKwkJCQkJaW1tID0gKGltbSA8PCByb2wpIHwgKGltbSA+PiAoMzIgLSByb2wpKTsKKwkJCQkJLyogQ2FsY3VsYXRlIGFybSByb2wuICovCisJCQkJCXJvbCA9IChyb2wgPj4gMSkgLSA4OworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJcm9sICs9IDI7CisJCQkJbWFzayA+Pj0gMjsKKwkJCQlpZiAobWFzayAmIDB4MykKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIFRoZSBsb3cgOCBiaXQgbXVzdCBiZSB6ZXJvLiAqLworCVNMSklUX0FTU0VSVCghKGltbSAmIDB4ZmYpKTsKKworCWlmICghKGltbSAmIDB4ZmYwMDAwMDApKSB7CisJCWltbTEgPSBTUkMyX0lNTSB8ICgoaW1tID4+IDE2KSAmIDB4ZmYpIHwgKCgocm9sICsgNCkgJiAweGYpIDw8IDgpOworCQlpbW0yID0gU1JDMl9JTU0gfCAoKGltbSA+PiA4KSAmIDB4ZmYpIHwgKCgocm9sICsgOCkgJiAweGYpIDw8IDgpOworCX0KKwllbHNlIGlmIChpbW0gJiAweGMwMDAwMDAwKSB7CisJCWltbTEgPSBTUkMyX0lNTSB8ICgoaW1tID4+IDI0KSAmIDB4ZmYpIHwgKChyb2wgJiAweGYpIDw8IDgpOworCQlpbW0gPDw9IDg7CisJCXJvbCArPSA0OworCisJCWlmICghKGltbSAmIDB4ZmYwMDAwMDApKSB7CisJCQlpbW0gPDw9IDg7CisJCQlyb2wgKz0gNDsKKwkJfQorCisJCWlmICghKGltbSAmIDB4ZjAwMDAwMDApKSB7CisJCQlpbW0gPDw9IDQ7CisJCQlyb2wgKz0gMjsKKwkJfQorCisJCWlmICghKGltbSAmIDB4YzAwMDAwMDApKSB7CisJCQlpbW0gPDw9IDI7CisJCQlyb2wgKz0gMTsKKwkJfQorCisJCWlmICghKGltbSAmIDB4MDBmZmZmZmYpKQorCQkJaW1tMiA9IFNSQzJfSU1NIHwgKGltbSA+PiAyNCkgfCAoKHJvbCAmIDB4ZikgPDwgOCk7CisJCWVsc2UKKwkJCXJldHVybiAwOworCX0KKwllbHNlIHsKKwkJaWYgKCEoaW1tICYgMHhmMDAwMDAwMCkpIHsKKwkJCWltbSA8PD0gNDsKKwkJCXJvbCArPSAyOworCQl9CisKKwkJaWYgKCEoaW1tICYgMHhjMDAwMDAwMCkpIHsKKwkJCWltbSA8PD0gMjsKKwkJCXJvbCArPSAxOworCQl9CisKKwkJaW1tMSA9IFNSQzJfSU1NIHwgKChpbW0gPj4gMjQpICYgMHhmZikgfCAoKHJvbCAmIDB4ZikgPDwgOCk7CisJCWltbSA8PD0gODsKKwkJcm9sICs9IDQ7CisKKwkJaWYgKCEoaW1tICYgMHhmMDAwMDAwMCkpIHsKKwkJCWltbSA8PD0gNDsKKwkJCXJvbCArPSAyOworCQl9CisKKwkJaWYgKCEoaW1tICYgMHhjMDAwMDAwMCkpIHsKKwkJCWltbSA8PD0gMjsKKwkJCXJvbCArPSAxOworCQl9CisKKwkJaWYgKCEoaW1tICYgMHgwMGZmZmZmZikpCisJCQlpbW0yID0gU1JDMl9JTU0gfCAoaW1tID4+IDI0KSB8ICgocm9sICYgMHhmKSA8PCA4KTsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisJfQorCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhwb3NpdGl2ZSA/IE1PVl9EUCA6IE1WTl9EUCwgMCwgcmVnLCBTTEpJVF9VTlVTRUQsIGltbTEpKSk7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhwb3NpdGl2ZSA/IE9SUl9EUCA6IEJJQ19EUCwgMCwgcmVnLCByZWcsIGltbTIpKSk7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworc3RhdGljIHNsaml0X3NpIGxvYWRfaW1tZWRpYXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHJlZywgc2xqaXRfdXcgaW1tKQoreworCXNsaml0X3V3IHRtcDsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjcgJiYgU0xKSVRfQ09ORklHX0FSTV9WNykKKwlpZiAoIShpbW0gJiB+MHhmZmZmKSkKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgTU9WVyB8IFJEKHJlZykgfCAoKGltbSA8PCA0KSAmIDB4ZjAwMDApIHwgKGltbSAmIDB4ZmZmKSk7CisjZW5kaWYKKworCS8qIENyZWF0ZSBpbW0gYnkgMSBpbnN0LiAqLworCXRtcCA9IGdldF9pbW0oaW1tKTsKKwlpZiAodG1wKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCAwLCByZWcsIFNMSklUX1VOVVNFRCwgdG1wKSk7CisKKwl0bXAgPSBnZXRfaW1tKH5pbW0pOworCWlmICh0bXApCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhNVk5fRFAsIDAsIHJlZywgU0xKSVRfVU5VU0VELCB0bXApKTsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKKwkvKiBDcmVhdGUgaW1tIGJ5IDIgaW5zdC4gKi8KKwlGQUlMX0lGKGdlbmVyYXRlX2ludChjb21waWxlciwgcmVnLCBpbW0sIDEpKTsKKwlGQUlMX0lGKGdlbmVyYXRlX2ludChjb21waWxlciwgcmVnLCB+aW1tLCAwKSk7CisKKwkvKiBMb2FkIGludGVnZXIuICovCisJcmV0dXJuIHB1c2hfaW5zdF93aXRoX2xpdGVyYWwoY29tcGlsZXIsIEVNSVRfREFUQV9UUkFOU0ZFUihXT1JEX0RBVEEgfCBMT0FEX0RBVEEsIDEsIDAsIHJlZywgVE1QX1BDLCAwKSwgaW1tKTsKKyNlbHNlCisJcmV0dXJuIGVtaXRfaW1tKGNvbXBpbGVyLCByZWcsIGltbSk7CisjZW5kaWYKK30KKworLyogSGVscGVyIGZ1bmN0aW9uLiBEc3Qgc2hvdWxkIGJlIHJlZyArIHZhbHVlLCB1c2luZyBhdCBtb3N0IDEgaW5zdHJ1Y3Rpb24sIGZsYWdzIGRvZXMgbm90IHNldC4gKi8KK3N0YXRpYyBzbGppdF9zaSBlbWl0X3NldF9kZWx0YShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3NpIHJlZywgc2xqaXRfc3cgdmFsdWUpCit7CisJaWYgKHZhbHVlID49IDApIHsKKwkJdmFsdWUgPSBnZXRfaW1tKHZhbHVlKTsKKwkJaWYgKHZhbHVlKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKEFERF9EUCwgMCwgZHN0LCByZWcsIHZhbHVlKSk7CisJfQorCWVsc2UgeworCQl2YWx1ZSA9IGdldF9pbW0oLXZhbHVlKTsKKwkJaWYgKHZhbHVlKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKFNVQl9EUCwgMCwgZHN0LCByZWcsIHZhbHVlKSk7CisJfQorCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7Cit9CisKKy8qIENhbiBwZXJmb3JtIGFuIG9wZXJhdGlvbiB1c2luZyBhdCBtb3N0IDEgaW5zdHJ1Y3Rpb24uICovCitzdGF0aWMgc2xqaXRfc2kgZ2V0cHV0X2FyZ19mYXN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGlucF9mbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCit7CisJc2xqaXRfdXcgaW1tOworCisJaWYgKGFyZyAmIFNMSklUX0lNTSkgeworCQlpbW0gPSBnZXRfaW1tKGFyZ3cpOworCQlpZiAoaW1tKSB7CisJCQlpZiAoaW5wX2ZsYWdzICYgQVJHX1RFU1QpCisJCQkJcmV0dXJuIDE7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKE1PVl9EUCwgMCwgcmVnLCBTTEpJVF9VTlVTRUQsIGltbSkpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpbW0gPSBnZXRfaW1tKH5hcmd3KTsKKwkJaWYgKGltbSkgeworCQkJaWYgKGlucF9mbGFncyAmIEFSR19URVNUKQorCQkJCXJldHVybiAxOworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhNVk5fRFAsIDAsIHJlZywgU0xKSVRfVU5VU0VELCBpbW0pKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCisJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CisKKwkvKiBGYXN0IGxvYWRzL3N0b3Jlcy4gKi8KKwlpZiAoIShhcmcgJiBSRUdfTUFTSykpCisJCXJldHVybiAwOworCisJaWYgKGFyZyAmIE9GRlNfUkVHX01BU0spIHsKKwkJaWYgKChhcmd3ICYgMHgzKSAhPSAwICYmICFJU19UWVBFMV9UUkFOU0ZFUihpbnBfZmxhZ3MpKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKGlucF9mbGFncyAmIEFSR19URVNUKQorCQkJcmV0dXJuIDE7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfVFJBTlNGRVIoaW5wX2ZsYWdzLCAxLCBpbnBfZmxhZ3MgJiBXUklURV9CQUNLLCByZWcsIGFyZyAmIFJFR19NQVNLLAorCQkJUk0oT0ZGU19SRUcoYXJnKSkgfCAoSVNfVFlQRTFfVFJBTlNGRVIoaW5wX2ZsYWdzKSA/IFNSQzJfSU1NIDogMCkgfCAoKGFyZ3cgJiAweDMpIDw8IDcpKSkpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKElTX1RZUEUxX1RSQU5TRkVSKGlucF9mbGFncykpIHsKKwkJaWYgKGFyZ3cgPj0gMCAmJiBhcmd3IDw9IDB4ZmZmKSB7CisJCQlpZiAoaW5wX2ZsYWdzICYgQVJHX1RFU1QpCisJCQkJcmV0dXJuIDE7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1RSQU5TRkVSKGlucF9mbGFncywgMSwgaW5wX2ZsYWdzICYgV1JJVEVfQkFDSywgcmVnLCBhcmcgJiBSRUdfTUFTSywgYXJndykpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAoYXJndyA8IDAgJiYgYXJndyA+PSAtMHhmZmYpIHsKKwkJCWlmIChpbnBfZmxhZ3MgJiBBUkdfVEVTVCkKKwkJCQlyZXR1cm4gMTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfVFJBTlNGRVIoaW5wX2ZsYWdzLCAwLCBpbnBfZmxhZ3MgJiBXUklURV9CQUNLLCByZWcsIGFyZyAmIFJFR19NQVNLLCAtYXJndykpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwllbHNlIHsKKwkJaWYgKGFyZ3cgPj0gMCAmJiBhcmd3IDw9IDB4ZmYpIHsKKwkJCWlmIChpbnBfZmxhZ3MgJiBBUkdfVEVTVCkKKwkJCQlyZXR1cm4gMTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfVFJBTlNGRVIoaW5wX2ZsYWdzLCAxLCBpbnBfZmxhZ3MgJiBXUklURV9CQUNLLCByZWcsIGFyZyAmIFJFR19NQVNLLCBUWVBFMl9UUkFOU0ZFUl9JTU0oYXJndykpKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJaWYgKGFyZ3cgPCAwICYmIGFyZ3cgPj0gLTB4ZmYpIHsKKwkJCWlmIChpbnBfZmxhZ3MgJiBBUkdfVEVTVCkKKwkJCQlyZXR1cm4gMTsKKwkJCWFyZ3cgPSAtYXJndzsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfVFJBTlNGRVIoaW5wX2ZsYWdzLCAwLCBpbnBfZmxhZ3MgJiBXUklURV9CQUNLLCByZWcsIGFyZyAmIFJFR19NQVNLLCBUWVBFMl9UUkFOU0ZFUl9JTU0oYXJndykpKSk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogU2VlIGdldHB1dF9hcmcgYmVsb3cuCisgICBOb3RlOiBjYW5fY2FjaGUgaXMgY2FsbGVkIG9ubHkgZm9yIGJpbmFyeSBvcGVyYXRvcnMuIFRob3NlCisgICBvcGVyYXRvcnMgYWx3YXlzIHVzZXMgd29yZCBhcmd1bWVudHMgd2l0aG91dCB3cml0ZSBiYWNrLiAqLworc3RhdGljIHNsaml0X3NpIGNhbl9jYWNoZShzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3NpIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCit7CisJLyogSW1tZWRpYXRlIGNhY2hpbmcgaXMgbm90IHN1cHBvcnRlZCBhcyBpdCB3b3VsZCBiZSBhbiBvcGVyYXRpb24gb24gY29uc3RhbnQgYXJndW1lbnRzLiAqLworCWlmIChhcmcgJiBTTEpJVF9JTU0pCisJCXJldHVybiAwOworCisJLyogQWx3YXlzIGEgc2ltcGxlIG9wZXJhdGlvbi4gKi8KKwlpZiAoYXJnICYgT0ZGU19SRUdfTUFTSykKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShhcmcgJiBSRUdfTUFTSykpIHsKKwkJLyogSW1tZWRpYXRlIGFjY2Vzcy4gKi8KKwkJaWYgKChuZXh0X2FyZyAmIFNMSklUX01FTSkgJiYgKChzbGppdF91dylhcmd3IC0gKHNsaml0X3V3KW5leHRfYXJndyA8PSAweGZmZiB8fCAoc2xqaXRfdXcpbmV4dF9hcmd3IC0gKHNsaml0X3V3KWFyZ3cgPD0gMHhmZmYpKQorCQkJcmV0dXJuIDE7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmd3IDw9IDB4ZmZmZmYgJiYgYXJndyA+PSAtMHhmZmZmZikKKwkJcmV0dXJuIDA7CisKKwlpZiAoYXJndyA9PSBuZXh0X2FyZ3cgJiYgKG5leHRfYXJnICYgU0xKSVRfTUVNKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAoYXJnID09IG5leHRfYXJnICYmICgoc2xqaXRfdXcpYXJndyAtIChzbGppdF91dyluZXh0X2FyZ3cgPD0gMHhmZmYgfHwgKHNsaml0X3V3KW5leHRfYXJndyAtIChzbGppdF91dylhcmd3IDw9IDB4ZmZmKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBHRVRQVVRfQVJHX0RBVEFfVFJBTlNGRVIoYWRkLCB3YiwgdGFyZ2V0LCBiYXNlLCBpbW0pIFwKKwlpZiAobWF4X2RlbHRhICYgMHhmMDApIFwKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9UUkFOU0ZFUihpbnBfZmxhZ3MsIGFkZCwgd2IsIHRhcmdldCwgYmFzZSwgaW1tKSkpOyBcCisJZWxzZSBcCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfVFJBTlNGRVIoaW5wX2ZsYWdzLCBhZGQsIHdiLCB0YXJnZXQsIGJhc2UsIFRZUEUyX1RSQU5TRkVSX0lNTShpbW0pKSkpOworCisjZGVmaW5lIFRFU1RfV1JJVEVfQkFDSygpIFwKKwlpZiAoaW5wX2ZsYWdzICYgV1JJVEVfQkFDSykgeyBcCisJCXRtcF9yID0gYXJnICYgUkVHX01BU0s7IFwKKwkJaWYgKHJlZyA9PSB0bXBfcikgeyBcCisJCQkvKiBUaGlzIGNhbiBvbmx5IGhhcHBlbiBmb3Igc3RvcmVzICovIFwKKwkJCS8qIHNpbmNlIGxkciByZWcsIFtyZWcsIC4uLl0hIGhhcyBubyBtZWFuaW5nICovIFwKKwkJCVNMSklUX0FTU0VSVCghKGlucF9mbGFncyAmIExPQURfREFUQSkpOyBcCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKE1PVl9EUCwgMCwgVE1QX1JFRzMsIFNMSklUX1VOVVNFRCwgUk0ocmVnKSkpKTsgXAorCQkJcmVnID0gVE1QX1JFRzM7IFwKKwkJfSBcCisJfQorCisvKiBFbWl0IHRoZSBuZWNlc3NhcnkgaW5zdHJ1Y3Rpb25zLiBTZWUgY2FuX2NhY2hlIGFib3ZlLiAqLworc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgaW5wX2ZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfc2kgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKK3sKKwlzbGppdF9zaSB0bXBfcjsKKwlzbGppdF9zdyBtYXhfZGVsdGE7CisJc2xqaXRfc3cgc2lnbjsKKwlzbGppdF91dyBpbW07CisKKwlpZiAoYXJnICYgU0xKSVRfSU1NKSB7CisJCVNMSklUX0FTU0VSVChpbnBfZmxhZ3MgJiBMT0FEX0RBVEEpOworCQlyZXR1cm4gbG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIHJlZywgYXJndyk7CisJfQorCisJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CisKKwl0bXBfciA9IChpbnBfZmxhZ3MgJiBMT0FEX0RBVEEpID8gcmVnIDogVE1QX1JFRzM7CisJbWF4X2RlbHRhID0gSVNfVFlQRTFfVFJBTlNGRVIoaW5wX2ZsYWdzKSA/IDB4ZmZmIDogMHhmZjsKKworCWlmICgoYXJnICYgUkVHX01BU0spID09IFNMSklUX1VOVVNFRCkgeworCQkvKiBXcml0ZSBiYWNrIGlzIG5vdCB1c2VkLiAqLworCQlpbW0gPSAoc2xqaXRfdXcpKGFyZ3cgLSBjb21waWxlci0+Y2FjaGVfYXJndyk7CisJCWlmICgoY29tcGlsZXItPmNhY2hlX2FyZyAmIFNMSklUX0lNTSkgJiYgKGltbSA8PSAoc2xqaXRfdXcpbWF4X2RlbHRhIHx8IGltbSA+PSAoc2xqaXRfdXcpLW1heF9kZWx0YSkpIHsKKwkJCWlmIChpbW0gPD0gKHNsaml0X3V3KW1heF9kZWx0YSkgeworCQkJCXNpZ24gPSAxOworCQkJCWFyZ3cgPSBhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3c7CisJCQl9CisJCQllbHNlIHsKKwkJCQlzaWduID0gMDsKKwkJCQlhcmd3ID0gY29tcGlsZXItPmNhY2hlX2FyZ3cgLSBhcmd3OworCQkJfQorCisJCQlHRVRQVVRfQVJHX0RBVEFfVFJBTlNGRVIoc2lnbiwgMCwgcmVnLCBUTVBfUkVHMywgYXJndyk7CisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJfQorCisJCS8qIFdpdGggd3JpdGUgYmFjaywgd2UgY2FuIGNyZWF0ZSBzb21lIHNvcGhpc3RpY2F0ZWQgbG9hZHMsIGJ1dAorCQkgICBpdCBpcyBoYXJkIHRvIGRlY2lkZSB3aGV0aGVyIHdlIHNob3VsZCBjb252ZXJ0IGRvd253YXJkICgwcykgb3IgdXB3YXJkICgxcykuICovCisJCWltbSA9IChzbGppdF91dykoYXJndyAtIG5leHRfYXJndyk7CisJCWlmICgobmV4dF9hcmcgJiBTTEpJVF9NRU0pICYmIChpbW0gPD0gKHNsaml0X3V3KW1heF9kZWx0YSB8fCBpbW0gPj0gKHNsaml0X3V3KS1tYXhfZGVsdGEpKSB7CisJCQlTTEpJVF9BU1NFUlQoaW5wX2ZsYWdzICYgTE9BRF9EQVRBKTsKKworCQkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX0lNTTsKKwkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJCXRtcF9yID0gVE1QX1JFRzM7CisJCX0KKworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCB0bXBfciwgYXJndykpOworCQlHRVRQVVRfQVJHX0RBVEFfVFJBTlNGRVIoMSwgMCwgcmVnLCB0bXBfciwgMCk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCWlmIChhcmcgJiBPRkZTX1JFR19NQVNLKSB7CisJCVNMSklUX0FTU0VSVCgoYXJndyAmIDB4MykgJiYgIShtYXhfZGVsdGEgJiAweGYwMCkpOworCQlpZiAoaW5wX2ZsYWdzICYgV1JJVEVfQkFDSykKKwkJCXRtcF9yID0gYXJnICYgUkVHX01BU0s7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoQUREX0RQLCAwLCB0bXBfciwgYXJnICYgUkVHX01BU0ssIFJNKE9GRlNfUkVHKGFyZykpIHwgKChhcmd3ICYgMHgzKSA8PCA3KSkpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1RSQU5TRkVSKGlucF9mbGFncywgMSwgMCwgcmVnLCB0bXBfciwgVFlQRTJfVFJBTlNGRVJfSU1NKDApKSk7CisJfQorCisJaW1tID0gKHNsaml0X3V3KShhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cpOworCWlmIChjb21waWxlci0+Y2FjaGVfYXJnID09IGFyZyAmJiBpbW0gPD0gKHNsaml0X3V3KW1heF9kZWx0YSkgeworCQlTTEpJVF9BU1NFUlQoIShpbnBfZmxhZ3MgJiBXUklURV9CQUNLKSk7CisJCUdFVFBVVF9BUkdfREFUQV9UUkFOU0ZFUigxLCAwLCByZWcsIFRNUF9SRUczLCBpbW0pOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisJaWYgKGNvbXBpbGVyLT5jYWNoZV9hcmcgPT0gYXJnICYmIGltbSA+PSAoc2xqaXRfdXcpLW1heF9kZWx0YSkgeworCQlTTEpJVF9BU1NFUlQoIShpbnBfZmxhZ3MgJiBXUklURV9CQUNLKSk7CisJCWltbSA9IChzbGppdF91dyktKHNsaml0X3N3KWltbTsKKwkJR0VUUFVUX0FSR19EQVRBX1RSQU5TRkVSKDAsIDAsIHJlZywgVE1QX1JFRzMsIGltbSk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCWltbSA9IGdldF9pbW0oYXJndyAmIH5tYXhfZGVsdGEpOworCWlmIChpbW0pIHsKKwkJVEVTVF9XUklURV9CQUNLKCk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoQUREX0RQLCAwLCB0bXBfciwgYXJnICYgUkVHX01BU0ssIGltbSkpKTsKKwkJR0VUUFVUX0FSR19EQVRBX1RSQU5TRkVSKDEsIGlucF9mbGFncyAmIFdSSVRFX0JBQ0ssIHJlZywgdG1wX3IsIGFyZ3cgJiBtYXhfZGVsdGEpOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwlpbW0gPSBnZXRfaW1tKC1hcmd3ICYgfm1heF9kZWx0YSk7CisJaWYgKGltbSkgeworCQlhcmd3ID0gLWFyZ3c7CisJCVRFU1RfV1JJVEVfQkFDSygpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKFNVQl9EUCwgMCwgdG1wX3IsIGFyZyAmIFJFR19NQVNLLCBpbW0pKSk7CisJCUdFVFBVVF9BUkdfREFUQV9UUkFOU0ZFUigwLCBpbnBfZmxhZ3MgJiBXUklURV9CQUNLLCByZWcsIHRtcF9yLCBhcmd3ICYgbWF4X2RlbHRhKTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCisJaWYgKChjb21waWxlci0+Y2FjaGVfYXJnICYgU0xKSVRfSU1NKSAmJiBjb21waWxlci0+Y2FjaGVfYXJndyA9PSBhcmd3KSB7CisJCVRFU1RfV1JJVEVfQkFDSygpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfVFJBTlNGRVIoaW5wX2ZsYWdzLCAxLCBpbnBfZmxhZ3MgJiBXUklURV9CQUNLLCByZWcsIGFyZyAmIFJFR19NQVNLLCBSTShUTVBfUkVHMykgfCAobWF4X2RlbHRhICYgMHhmMDAgPyBTUkMyX0lNTSA6IDApKSk7CisJfQorCisJaWYgKGFyZ3cgPT0gbmV4dF9hcmd3ICYmIChuZXh0X2FyZyAmIFNMSklUX01FTSkpIHsKKwkJU0xKSVRfQVNTRVJUKGlucF9mbGFncyAmIExPQURfREFUQSk7CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUczLCBhcmd3KSk7CisKKwkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX0lNTTsKKwkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCisJCVRFU1RfV1JJVEVfQkFDSygpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfVFJBTlNGRVIoaW5wX2ZsYWdzLCAxLCBpbnBfZmxhZ3MgJiBXUklURV9CQUNLLCByZWcsIGFyZyAmIFJFR19NQVNLLCBSTShUTVBfUkVHMykgfCAobWF4X2RlbHRhICYgMHhmMDAgPyBTUkMyX0lNTSA6IDApKSk7CisJfQorCisJaW1tID0gKHNsaml0X3V3KShhcmd3IC0gbmV4dF9hcmd3KTsKKwlpZiAoYXJnID09IG5leHRfYXJnICYmICEoaW5wX2ZsYWdzICYgV1JJVEVfQkFDSykgJiYgKGltbSA8PSAoc2xqaXRfdXcpbWF4X2RlbHRhIHx8IGltbSA+PSAoc2xqaXRfdXcpLW1heF9kZWx0YSkpIHsKKwkJU0xKSVRfQVNTRVJUKGlucF9mbGFncyAmIExPQURfREFUQSk7CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUczLCBhcmd3KSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoQUREX0RQLCAwLCBUTVBfUkVHMywgVE1QX1JFRzMsIHJlZ19tYXBbYXJnICYgUkVHX01BU0tdKSkpOworCisJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBhcmc7CisJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKworCQlHRVRQVVRfQVJHX0RBVEFfVFJBTlNGRVIoMSwgMCwgcmVnLCBUTVBfUkVHMywgMCk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCWlmICgoYXJnICYgUkVHX01BU0spID09IHRtcF9yKSB7CisJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBTTEpJVF9JTU07CisJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJdG1wX3IgPSBUTVBfUkVHMzsKKwl9CisKKwlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCB0bXBfciwgYXJndykpOworCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9UUkFOU0ZFUihpbnBfZmxhZ3MsIDEsIGlucF9mbGFncyAmIFdSSVRFX0JBQ0ssIHJlZywgYXJnICYgUkVHX01BU0ssIHJlZ19tYXBbdG1wX3JdIHwgKG1heF9kZWx0YSAmIDB4ZjAwID8gU1JDMl9JTU0gOiAwKSkpOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfb3BfbWVtKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndykKK3sKKwlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcsIGFyZ3cpKQorCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKwlyZXR1cm4gZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnLCBhcmd3LCAwLCAwKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X29wX21lbTIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnMSwgc2xqaXRfc3cgYXJnMXcsIHNsaml0X3NpIGFyZzIsIHNsaml0X3N3IGFyZzJ3KQoreworCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZzEsIGFyZzF3KSkKKwkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKKwlyZXR1cm4gZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnMSwgYXJnMXcsIGFyZzIsIGFyZzJ3KTsKK30KKworc3RhdGljIHNsaml0X3NpIGVtaXRfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGlucF9mbGFncywKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJLyogYXJnMSBnb2VzIHRvIFRNUF9SRUcxIG9yIHNyYyByZWcKKwkgICBhcmcyIGdvZXMgdG8gVE1QX1JFRzIsIGltbSBvciBzcmMgcmVnCisJICAgVE1QX1JFRzMgY2FuIGJlIHVzZWQgZm9yIGNhY2hpbmcKKwkgICByZXN1bHQgZ29lcyB0byBUTVBfUkVHMiwgc28gcHV0IHJlc3VsdCBjYW4gdXNlIFRNUF9SRUcxIGFuZCBUTVBfUkVHMy4gKi8KKworCS8qIFdlIHByZWZlcnMgcmVnaXN0ZXIgYW5kIHNpbXBsZSBjb25zdHMuICovCisJc2xqaXRfc2kgZHN0X3I7CisJc2xqaXRfc2kgc3JjMV9yOworCXNsaml0X3NpIHNyYzJfciA9IDA7CisJc2xqaXRfc2kgc3VnZ19zcmMyX3IgPSBUTVBfUkVHMjsKKwlzbGppdF9zaSBmbGFncyA9IEdFVF9GTEFHUyhvcCkgPyBTRVRfRkxBR1MgOiAwOworCisJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCisJLyogRGVzdGluYXRpb24gY2hlY2suICovCisJaWYgKFNMSklUX1VOTElLRUxZKGRzdCA9PSBTTEpJVF9VTlVTRUQpKSB7CisJCWlmIChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSAmJiAhKHNyYzIgJiBTTEpJVF9NRU0pKQorCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJCWRzdF9yID0gVE1QX1JFRzI7CisJfQorCWVsc2UgaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKKwkJZHN0X3IgPSBkc3Q7CisJCWZsYWdzIHw9IFJFR19ERVNUOworCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kpCisJCQlzdWdnX3NyYzJfciA9IGRzdF9yOworCX0KKwllbHNlIHsKKwkJU0xKSVRfQVNTRVJUKGRzdCAmIFNMSklUX01FTSk7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGlucF9mbGFncyB8IEFSR19URVNULCBUTVBfUkVHMiwgZHN0LCBkc3R3KSkgeworCQkJZmxhZ3MgfD0gRkFTVF9ERVNUOworCQkJZHN0X3IgPSBUTVBfUkVHMjsKKwkJfQorCQllbHNlIHsKKwkJCWZsYWdzIHw9IFNMT1dfREVTVDsKKwkJCWRzdF9yID0gMDsKKwkJfQorCX0KKworCS8qIFNvdXJjZSAxLiAqLworCWlmIChGQVNUX0lTX1JFRyhzcmMxKSkKKwkJc3JjMV9yID0gc3JjMTsKKwllbHNlIGlmIChGQVNUX0lTX1JFRyhzcmMyKSkgeworCQlmbGFncyB8PSBBUkdTX1NXQVBQRUQ7CisJCXNyYzFfciA9IHNyYzI7CisJCXNyYzIgPSBzcmMxOworCQlzcmMydyA9IHNyYzF3OworCX0KKwllbHNlIGRvIHsgLyogZG8geyB9IHdoaWxlKDApIGlzIHVzZWQgYmVjYXVzZSBvZiBicmVha3MuICovCisJCXNyYzFfciA9IDA7CisJCWlmICgoaW5wX2ZsYWdzICYgQUxMT1dfQU5ZX0lNTSkgJiYgKHNyYzEgJiBTTEpJVF9JTU0pKSB7CisJCQkvKiBUaGUgc2Vjb25kIGNoZWNrIHdpbGwgZ2VuZXJhdGUgYSBoaXQuICovCisJCQlzcmMyX3IgPSBnZXRfaW1tKHNyYzF3KTsKKwkJCWlmIChzcmMyX3IpIHsKKwkJCQlmbGFncyB8PSBBUkdTX1NXQVBQRUQ7CisJCQkJc3JjMSA9IHNyYzI7CisJCQkJc3JjMXcgPSBzcmMydzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpbnBfZmxhZ3MgJiBBTExPV19JTlZfSU1NKSB7CisJCQkJc3JjMl9yID0gZ2V0X2ltbSh+c3JjMXcpOworCQkJCWlmIChzcmMyX3IpIHsKKwkJCQkJZmxhZ3MgfD0gQVJHU19TV0FQUEVEIHwgSU5WX0lNTTsKKwkJCQkJc3JjMSA9IHNyYzI7CisJCQkJCXNyYzF3ID0gc3JjMnc7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9BREQpIHsKKwkJCQlzcmMyX3IgPSBnZXRfaW1tKC1zcmMxdyk7CisJCQkJaWYgKHNyYzJfcikgeworCQkJCQkvKiBOb3RlOiBBUkdTX1NXQVBQRUQgaXMgaW50ZW50aW9uYWxseSBub3QgYXBwbGllZCEgKi8KKwkJCQkJc3JjMSA9IHNyYzI7CisJCQkJCXNyYzF3ID0gc3JjMnc7CisJCQkJCW9wID0gU0xKSVRfU1VCIHwgR0VUX0FMTF9GTEFHUyhvcCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGlucF9mbGFncyB8IExPQURfREFUQSwgVE1QX1JFRzEsIHNyYzEsIHNyYzF3KSkgeworCQkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQkJc3JjMV9yID0gVE1QX1JFRzE7CisJCX0KKwl9IHdoaWxlICgwKTsKKworCS8qIFNvdXJjZSAyLiAqLworCWlmIChzcmMyX3IgPT0gMCkgeworCQlpZiAoRkFTVF9JU19SRUcoc3JjMikpIHsKKwkJCXNyYzJfciA9IHNyYzI7CisJCQlmbGFncyB8PSBSRUdfU09VUkNFOworCQkJaWYgKCEoZmxhZ3MgJiBSRUdfREVTVCkgJiYgb3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kpCisJCQkJZHN0X3IgPSBzcmMyX3I7CisJCX0KKwkJZWxzZSBkbyB7IC8qIGRvIHsgfSB3aGlsZSgwKSBpcyB1c2VkIGJlY2F1c2Ugb2YgYnJlYWtzLiAqLworCQkJaWYgKChpbnBfZmxhZ3MgJiBBTExPV19BTllfSU1NKSAmJiAoc3JjMiAmIFNMSklUX0lNTSkpIHsKKwkJCQlzcmMyX3IgPSBnZXRfaW1tKHNyYzJ3KTsKKwkJCQlpZiAoc3JjMl9yKQorCQkJCQlicmVhazsKKwkJCQlpZiAoaW5wX2ZsYWdzICYgQUxMT1dfSU5WX0lNTSkgeworCQkJCQlzcmMyX3IgPSBnZXRfaW1tKH5zcmMydyk7CisJCQkJCWlmIChzcmMyX3IpIHsKKwkJCQkJCWZsYWdzIHw9IElOVl9JTU07CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQUREKSB7CisJCQkJCXNyYzJfciA9IGdldF9pbW0oLXNyYzJ3KTsKKwkJCQkJaWYgKHNyYzJfcikgeworCQkJCQkJb3AgPSBTTEpJVF9TVUIgfCBHRVRfQUxMX0ZMQUdTKG9wKTsKKwkJCQkJCWZsYWdzICY9IH5BUkdTX1NXQVBQRUQ7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfU1VCICYmICEoZmxhZ3MgJiBBUkdTX1NXQVBQRUQpKSB7CisJCQkJCXNyYzJfciA9IGdldF9pbW0oLXNyYzJ3KTsKKwkJCQkJaWYgKHNyYzJfcikgeworCQkJCQkJb3AgPSBTTEpJVF9BREQgfCBHRVRfQUxMX0ZMQUdTKG9wKTsKKwkJCQkJCWZsYWdzICY9IH5BUkdTX1NXQVBQRUQ7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKworCQkJLyogc3JjMl9yIGlzIDAuICovCisJCQlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBpbnBfZmxhZ3MgfCBMT0FEX0RBVEEsIHN1Z2dfc3JjMl9yLCBzcmMyLCBzcmMydykpIHsKKwkJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCQkJc3JjMl9yID0gc3VnZ19zcmMyX3I7CisJCQl9CisJCX0gd2hpbGUgKDApOworCX0KKworCS8qIHNyYzFfciwgc3JjMl9yIGFuZCBkc3RfciBjYW4gYmUgemVybyAoPXVucHJvY2Vzc2VkKSBvciBub24temVyby4KKwkgICBJZiB0aGV5IGFyZSB6ZXJvLCB0aGV5IG11c3Qgbm90IGJlIHJlZ2lzdGVycy4gKi8KKwlpZiAoc3JjMV9yID09IDAgJiYgc3JjMl9yID09IDAgJiYgZHN0X3IgPT0gMCkgeworCQlpZiAoIWNhbl9jYWNoZShzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpICYmIGNhbl9jYWNoZShzcmMxLCBzcmMxdywgZHN0LCBkc3R3KSkgeworCQkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBBUkdTX1NXQVBQRUQpKTsKKwkJCWZsYWdzIHw9IEFSR1NfU1dBUFBFRDsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgaW5wX2ZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMSwgc3JjMiwgc3JjMncsIHNyYzEsIHNyYzF3KSk7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGlucF9mbGFncyB8IExPQURfREFUQSwgVE1QX1JFRzIsIHNyYzEsIHNyYzF3LCBkc3QsIGRzdHcpKTsKKwkJfQorCQllbHNlIHsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgaW5wX2ZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGlucF9mbGFncyB8IExPQURfREFUQSwgVE1QX1JFRzIsIHNyYzIsIHNyYzJ3LCBkc3QsIGRzdHcpKTsKKwkJfQorCQlzcmMxX3IgPSBUTVBfUkVHMTsKKwkJc3JjMl9yID0gVE1QX1JFRzI7CisJfQorCWVsc2UgaWYgKHNyYzFfciA9PSAwICYmIHNyYzJfciA9PSAwKSB7CisJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgaW5wX2ZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJCXNyYzFfciA9IFRNUF9SRUcxOworCX0KKwllbHNlIGlmIChzcmMxX3IgPT0gMCAmJiBkc3RfciA9PSAwKSB7CisJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgaW5wX2ZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMSwgc3JjMSwgc3JjMXcsIGRzdCwgZHN0dykpOworCQlzcmMxX3IgPSBUTVBfUkVHMTsKKwl9CisJZWxzZSBpZiAoc3JjMl9yID09IDAgJiYgZHN0X3IgPT0gMCkgeworCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGlucF9mbGFncyB8IExPQURfREFUQSwgc3VnZ19zcmMyX3IsIHNyYzIsIHNyYzJ3LCBkc3QsIGRzdHcpKTsKKwkJc3JjMl9yID0gc3VnZ19zcmMyX3I7CisJfQorCisJaWYgKGRzdF9yID09IDApCisJCWRzdF9yID0gVE1QX1JFRzI7CisKKwlpZiAoc3JjMV9yID09IDApIHsKKwkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBpbnBfZmxhZ3MgfCBMT0FEX0RBVEEsIFRNUF9SRUcxLCBzcmMxLCBzcmMxdywgMCwgMCkpOworCQlzcmMxX3IgPSBUTVBfUkVHMTsKKwl9CisKKwlpZiAoc3JjMl9yID09IDApIHsKKwkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBpbnBfZmxhZ3MgfCBMT0FEX0RBVEEsIHN1Z2dfc3JjMl9yLCBzcmMyLCBzcmMydywgMCwgMCkpOworCQlzcmMyX3IgPSBzdWdnX3NyYzJfcjsKKwl9CisKKwlGQUlMX0lGKGVtaXRfc2luZ2xlX29wKGNvbXBpbGVyLCBvcCwgZmxhZ3MsIGRzdF9yLCBzcmMxX3IsIHNyYzJfcikpOworCisJaWYgKGZsYWdzICYgKEZBU1RfREVTVCB8IFNMT1dfREVTVCkpIHsKKwkJaWYgKGZsYWdzICYgRkFTVF9ERVNUKQorCQkJRkFJTF9JRihnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGlucF9mbGFncywgZHN0X3IsIGRzdCwgZHN0dykpOworCQllbHNlCisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGlucF9mbGFncywgZHN0X3IsIGRzdCwgZHN0dywgMCwgMCkpOworCX0KKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19hZWFiaV91aWRpdm1vZCh1bnNpZ25lZCBpbnQgbnVtZXJhdG9yLCB1bnNpZ25lZCBpbnQgZGVub21pbmF0b3IpOworZXh0ZXJuIGludCBfX2FlYWJpX2lkaXZtb2QoaW50IG51bWVyYXRvciwgaW50IGRlbm9taW5hdG9yKTsKKyNlbHNlCisjZXJyb3IgIlNvZnR3YXJlIGRpdm1vZCBmdW5jdGlvbnMgYXJlIG5lZWRlZCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3ApCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMChjb21waWxlciwgb3ApKTsKKworCW9wID0gR0VUX09QQ09ERShvcCk7CisJc3dpdGNoIChvcCkgeworCWNhc2UgU0xKSVRfQlJFQUtQT0lOVDoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEJLUFQpKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9OT1A6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBOT1ApKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9MVU1VTDoKKwljYXNlIFNMSklUX0xTTVVMOgorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjcgJiYgU0xKSVRfQ09ORklHX0FSTV9WNykKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX0xVTVVMID8gVU1VTEwgOiBTTVVMTCkKKwkJCXwgKHJlZ19tYXBbU0xKSVRfUjFdIDw8IDE2KQorCQkJfCAocmVnX21hcFtTTEpJVF9SMF0gPDwgMTIpCisJCQl8IChyZWdfbWFwW1NMSklUX1IwXSA8PCA4KQorCQkJfCByZWdfbWFwW1NMSklUX1IxXSk7CisjZWxzZQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKE1PVl9EUCwgMCwgVE1QX1JFRzEsIFNMSklUX1VOVVNFRCwgUk0oU0xKSVRfUjEpKSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAob3AgPT0gU0xKSVRfTFVNVUwgPyBVTVVMTCA6IFNNVUxMKQorCQkJfCAocmVnX21hcFtTTEpJVF9SMV0gPDwgMTYpCisJCQl8IChyZWdfbWFwW1NMSklUX1IwXSA8PCAxMikKKwkJCXwgKHJlZ19tYXBbU0xKSVRfUjBdIDw8IDgpCisJCQl8IHJlZ19tYXBbVE1QX1JFRzFdKTsKKyNlbmRpZgorCWNhc2UgU0xKSVRfVURJVk1PRDoKKwljYXNlIFNMSklUX1NESVZNT0Q6CisJY2FzZSBTTEpJVF9VRElWSToKKwljYXNlIFNMSklUX1NESVZJOgorCQlTTEpJVF9DT01QSUxFX0FTU0VSVCgoU0xKSVRfVURJVk1PRCAmIDB4MikgPT0gMCAmJiBTTEpJVF9VRElWSSAtIDB4MiA9PSBTTEpJVF9VRElWTU9ELCBiYWRfZGl2X29wY29kZV9hc3NpZ25tZW50cyk7CisJCVNMSklUX0NPTVBJTEVfQVNTRVJUKHJlZ19tYXBbMl0gPT0gMSAmJiByZWdfbWFwWzNdID09IDIsIGJhZF9yZWdpc3Rlcl9tYXBwaW5nKTsKKworCQlpZiAoKG9wID49IFNMSklUX1VESVZJKSAmJiAoY29tcGlsZXItPnNjcmF0Y2hlcyA+PSAzKSkgeworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIDB4ZTUyZDIwMDggLyogc3RyIHIyLCBbc3AsICMtOF0hICovKSk7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgMHhlNThkMTAwNCAvKiBzdHIgcjEsIFtzcCwgIzRdICovKSk7CisJCX0KKwkJZWxzZSBpZiAoKG9wID49IFNMSklUX1VESVZJKSB8fCAoY29tcGlsZXItPnNjcmF0Y2hlcyA+PSAzKSkKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAweGU1MmQwMDA4IHwgKG9wID49IFNMSklUX1VESVZJID8gMHgxMDAwIDogMHgyMDAwKSAvKiBzdHIgcjEvcjIsIFtzcCwgIy04XSEgKi8pKTsKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisJCUZBSUxfSUYoc2xqaXRfZW1pdF9panVtcChjb21waWxlciwgU0xKSVRfRkFTVF9DQUxMLCBTTEpJVF9JTU0sCisJCQkoKG9wIHwgMHgyKSA9PSBTTEpJVF9VRElWSSA/IFNMSklUX0ZVTkNfT0ZGU0VUKF9fYWVhYmlfdWlkaXZtb2QpIDogU0xKSVRfRlVOQ19PRkZTRVQoX19hZWFiaV9pZGl2bW9kKSkpKTsKKyNlbHNlCisjZXJyb3IgIlNvZnR3YXJlIGRpdm1vZCBmdW5jdGlvbnMgYXJlIG5lZWRlZCIKKyNlbmRpZgorCisJCWlmICgob3AgPj0gU0xKSVRfVURJVkkpICYmIChjb21waWxlci0+c2NyYXRjaGVzID49IDMpKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgMHhlNTlkMTAwNCAvKiBsZHIgcjEsIFtzcCwgIzRdICovKSk7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgMHhlNDlkMjAwOCAvKiBsZHIgcjIsIFtzcF0sICM4ICovKSk7CisJCX0KKwkJZWxzZSBpZiAoKG9wID49IFNMSklUX1VESVZJKSB8fCAoY29tcGlsZXItPnNjcmF0Y2hlcyA+PSAzKSkKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIDB4ZTQ5ZDAwMDggfCAob3AgPj0gU0xKSVRfVURJVkkgPyAweDEwMDAgOiAweDIwMDApIC8qIGxkciByMS9yMiwgW3NwXSwgIzggKi8pOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMShjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKKwljYXNlIFNMSklUX01PVjoKKwljYXNlIFNMSklUX01PVl9VSToKKwljYXNlIFNMSklUX01PVl9TSToKKwljYXNlIFNMSklUX01PVl9QOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBBTExPV19BTllfSU1NLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZfVUI6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVUIsIEFMTE9XX0FOWV9JTU0gfCBCWVRFX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWIpc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZfU0I6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0IsIEFMTE9XX0FOWV9JTU0gfCBTSUdORURfREFUQSB8IEJZVEVfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zYilzcmN3IDogc3Jjdyk7CisKKwljYXNlIFNMSklUX01PVl9VSDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSCwgQUxMT1dfQU5ZX0lNTSB8IEhBTEZfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91aClzcmN3IDogc3Jjdyk7CisKKwljYXNlIFNMSklUX01PVl9TSDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSCwgQUxMT1dfQU5ZX0lNTSB8IFNJR05FRF9EQVRBIHwgSEFMRl9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NoKXNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WVToKKwljYXNlIFNMSklUX01PVlVfVUk6CisJY2FzZSBTTEpJVF9NT1ZVX1NJOgorCWNhc2UgU0xKSVRfTU9WVV9QOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBBTExPV19BTllfSU1NIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WVV9VQjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VQiwgQUxMT1dfQU5ZX0lNTSB8IEJZVEVfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWIpc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZVX1NCOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NCLCBBTExPV19BTllfSU1NIHwgU0lHTkVEX0RBVEEgfCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NiKXNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WVV9VSDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSCwgQUxMT1dfQU5ZX0lNTSB8IEhBTEZfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWgpc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZVX1NIOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NILCBBTExPV19BTllfSU1NIHwgU0lHTkVEX0RBVEEgfCBIQUxGX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NoKXNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTk9UOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AsIEFMTE9XX0FOWV9JTU0sIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisKKwljYXNlIFNMSklUX05FRzoKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpIFwKKwkJCXx8IChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCisJCWNvbXBpbGVyLT5za2lwX2NoZWNrcyA9IDE7CisjZW5kaWYKKwkJcmV0dXJuIHNsaml0X2VtaXRfb3AyKGNvbXBpbGVyLCBTTEpJVF9TVUIgfCBHRVRfQUxMX0ZMQUdTKG9wKSwgZHN0LCBkc3R3LCBTTEpJVF9JTU0sIDAsIHNyYywgc3Jjdyk7CisKKwljYXNlIFNMSklUX0NMWjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCAwLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCX0KKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQoreworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDIoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYzEsIHNyYzF3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYzIsIHNyYzJ3KTsKKworCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKKwljYXNlIFNMSklUX0FERDoKKwljYXNlIFNMSklUX0FEREM6CisJY2FzZSBTTEpJVF9TVUI6CisJY2FzZSBTTEpJVF9TVUJDOgorCWNhc2UgU0xKSVRfT1I6CisJY2FzZSBTTEpJVF9YT1I6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBvcCwgQUxMT1dfSU1NLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX01VTDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCAwLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX0FORDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCBBTExPV19BTllfSU1NLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX1NITDoKKwljYXNlIFNMSklUX0xTSFI6CisJY2FzZSBTTEpJVF9BU0hSOgorCQlpZiAoc3JjMiAmIFNMSklUX0lNTSkgeworCQkJY29tcGlsZXItPnNoaWZ0X2ltbSA9IHNyYzJ3ICYgMHgxZjsKKwkJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBvcCwgMCwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjMSwgc3JjMXcpOworCQl9CisJCWVsc2UgeworCQkJY29tcGlsZXItPnNoaWZ0X2ltbSA9IDB4MjA7CisJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AsIDAsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwkJfQorCX0KKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3NpIHJlZykKK3sKKwlDSEVDS19SRUdfSU5ERVgoY2hlY2tfc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHJlZykpOworCXJldHVybiByZWdfbWFwW3JlZ107Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQoreworCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CisJcmV0dXJuIHJlZyA8PCAxOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9jdXN0b20oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwl2b2lkICppbnN0cnVjdGlvbiwgc2xqaXRfc2kgc2l6ZSkKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgc2l6ZSkpOworCisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKihzbGppdF91dyopaW5zdHJ1Y3Rpb24pOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBGbG9hdGluZyBwb2ludCBvcGVyYXRvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCisKKy8qIDAgLSBubyBmcHUKKyAgIDEgLSB2ZnAgKi8KK3N0YXRpYyBzbGppdF9zaSBhcm1fZnB1X3R5cGUgPSAtMTsKKworc3RhdGljIHZvaWQgaW5pdF9jb21waWxlcih2b2lkKQoreworCWlmIChhcm1fZnB1X3R5cGUgIT0gLTEpCisJCXJldHVybjsKKworCS8qIFRPRE86IE9ubHkgdGhlIE9TIGNhbiBoZWxwIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCBmcHUgdHlwZS4gKi8KKwlhcm1fZnB1X3R5cGUgPSAxOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQoreworI2lmZGVmIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEUKKwlyZXR1cm4gU0xKSVRfSVNfRlBVX0FWQUlMQUJMRTsKKyNlbHNlCisJaWYgKGFybV9mcHVfdHlwZSA9PSAtMSkKKwkJaW5pdF9jb21waWxlcigpOworCXJldHVybiBhcm1fZnB1X3R5cGU7CisjZW5kaWYKK30KKworI2Vsc2UKKworI2RlZmluZSBhcm1fZnB1X3R5cGUgMQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQoreworCS8qIEFsd2F5cyBhdmFpbGFibGUuICovCisJcmV0dXJuIDE7Cit9CisKKyNlbmRpZgorCisjZGVmaW5lIEZQVV9MT0FEICgxIDw8IDIwKQorI2RlZmluZSBFTUlUX0ZQVV9EQVRBX1RSQU5TRkVSKGluc3QsIGFkZCwgYmFzZSwgZnJlZywgb2ZmcykgXAorCSgoaW5zdCkgfCAoKGFkZCkgPDwgMjMpIHwgKHJlZ19tYXBbYmFzZV0gPDwgMTYpIHwgKGZyZWcgPDwgMTIpIHwgKG9mZnMpKQorI2RlZmluZSBFTUlUX0ZQVV9PUEVSQVRJT04ob3Bjb2RlLCBtb2RlLCBkc3QsIHNyYzEsIHNyYzIpIFwKKwkoKG9wY29kZSkgfCAobW9kZSkgfCAoKGRzdCkgPDwgMTIpIHwgKHNyYzEpIHwgKChzcmMyKSA8PCAxNikpCisKK3N0YXRpYyBzbGppdF9zaSBlbWl0X2ZvcF9tZW0oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3KQoreworCXNsaml0X3N3IHRtcDsKKwlzbGppdF91dyBpbW07CisJc2xqaXRfc3cgaW5zdCA9IFZTVFJfRjMyIHwgKGZsYWdzICYgKFNMSklUX1NJTkdMRV9PUCB8IEZQVV9MT0FEKSk7CisJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CisKKwlpZiAoU0xKSVRfVU5MSUtFTFkoYXJnICYgT0ZGU19SRUdfTUFTSykpIHsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhBRERfRFAsIDAsIFRNUF9SRUcxLCBhcmcgJiBSRUdfTUFTSywgUk0oT0ZGU19SRUcoYXJnKSkgfCAoKGFyZ3cgJiAweDMpIDw8IDcpKSkpOworCQlhcmcgPSBTTEpJVF9NRU0gfCBUTVBfUkVHMTsKKwkJYXJndyA9IDA7CisJfQorCisJLyogRmFzdCBsb2FkcyBhbmQgc3RvcmVzLiAqLworCWlmICgoYXJnICYgUkVHX01BU0spKSB7CisJCWlmICghKGFyZ3cgJiB+MHgzZmMpKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfREFUQV9UUkFOU0ZFUihpbnN0LCAxLCBhcmcgJiBSRUdfTUFTSywgcmVnLCBhcmd3ID4+IDIpKTsKKwkJaWYgKCEoLWFyZ3cgJiB+MHgzZmMpKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfREFUQV9UUkFOU0ZFUihpbnN0LCAwLCBhcmcgJiBSRUdfTUFTSywgcmVnLCAoLWFyZ3cpID4+IDIpKTsKKwl9CisKKwlpZiAoY29tcGlsZXItPmNhY2hlX2FyZyA9PSBhcmcpIHsKKwkJdG1wID0gYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3OworCQlpZiAoISh0bXAgJiB+MHgzZmMpKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfREFUQV9UUkFOU0ZFUihpbnN0LCAxLCBUTVBfUkVHMywgcmVnLCB0bXAgPj4gMikpOworCQlpZiAoISgtdG1wICYgfjB4M2ZjKSkKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfRlBVX0RBVEFfVFJBTlNGRVIoaW5zdCwgMCwgVE1QX1JFRzMsIHJlZywgLXRtcCA+PiAyKSk7CisJCWlmIChlbWl0X3NldF9kZWx0YShjb21waWxlciwgVE1QX1JFRzMsIFRNUF9SRUczLCB0bXApICE9IFNMSklUX0VSUl9VTlNVUFBPUlRFRCkgeworCQkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfREFUQV9UUkFOU0ZFUihpbnN0LCAxLCBUTVBfUkVHMywgcmVnLCAwKSk7CisJCX0KKwl9CisKKwlpZiAoYXJnICYgUkVHX01BU0spIHsKKwkJaWYgKGVtaXRfc2V0X2RlbHRhKGNvbXBpbGVyLCBUTVBfUkVHMSwgYXJnICYgUkVHX01BU0ssIGFyZ3cpICE9IFNMSklUX0VSUl9VTlNVUFBPUlRFRCkgeworCQkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfREFUQV9UUkFOU0ZFUihpbnN0LCAxLCBUTVBfUkVHMSwgcmVnLCAwKSk7CisJCX0KKwkJaW1tID0gZ2V0X2ltbShhcmd3ICYgfjB4M2ZjKTsKKwkJaWYgKGltbSkgeworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhBRERfRFAsIDAsIFRNUF9SRUcxLCBhcmcgJiBSRUdfTUFTSywgaW1tKSkpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfREFUQV9UUkFOU0ZFUihpbnN0LCAxLCBUTVBfUkVHMSwgcmVnLCAoYXJndyAmIDB4M2ZjKSA+PiAyKSk7CisJCX0KKwkJaW1tID0gZ2V0X2ltbSgtYXJndyAmIH4weDNmYyk7CisJCWlmIChpbW0pIHsKKwkJCWFyZ3cgPSAtYXJndzsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoU1VCX0RQLCAwLCBUTVBfUkVHMSwgYXJnICYgUkVHX01BU0ssIGltbSkpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfRlBVX0RBVEFfVFJBTlNGRVIoaW5zdCwgMCwgVE1QX1JFRzEsIHJlZywgKGFyZ3cgJiAweDNmYykgPj4gMikpOworCQl9CisJfQorCisJY29tcGlsZXItPmNhY2hlX2FyZyA9IGFyZzsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IGFyZ3c7CisJaWYgKGFyZyAmIFJFR19NQVNLKSB7CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUcxLCBhcmd3KSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoQUREX0RQLCAwLCBUTVBfUkVHMywgYXJnICYgUkVHX01BU0ssIHJlZ19tYXBbVE1QX1JFRzFdKSkpOworCX0KKwllbHNlCisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUczLCBhcmd3KSk7CisKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9EQVRBX1RSQU5TRkVSKGluc3QsIDEsIFRNUF9SRUczLCByZWcsIDApKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY29udndfZnJvbWQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlpZiAoc3JjICYgU0xKSVRfTUVNKSB7CisJCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjLCBzcmN3KSk7CisJCXNyYyA9IFRNUF9GUkVHMTsKKwl9CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfT1BFUkFUSU9OKFZDVlRfUzMyX0YzMiwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIFRNUF9GUkVHMSwgc3JjLCAwKSkpOworCisJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQpCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJaWYgKEZBU1RfSVNfUkVHKGRzdCkpCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFZNT1YgfCAoMSA8PCAyMCkgfCBSRChkc3QpIHwgKFRNUF9GUkVHMSA8PCAxNikpOworCisJLyogU3RvcmUgdGhlIGludGVnZXIgdmFsdWUgZnJvbSBhIFZGUCByZWdpc3Rlci4gKi8KKwlyZXR1cm4gZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAwLCBUTVBfRlJFRzEsIGRzdCwgZHN0dyk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxX2NvbnZkX2Zyb213KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc2xqaXRfc2kgZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX0ZSRUcxOworCisJaWYgKEZBU1RfSVNfUkVHKHNyYykpCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBWTU9WIHwgUkQoc3JjKSB8IChUTVBfRlJFRzEgPDwgMTYpKSk7CisJZWxzZSBpZiAoc3JjICYgU0xKSVRfTUVNKSB7CisJCS8qIExvYWQgdGhlIGludGVnZXIgdmFsdWUgaW50byBhIFZGUCByZWdpc3Rlci4gKi8KKwkJRkFJTF9JRihlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIEZQVV9MT0FELCBUTVBfRlJFRzEsIHNyYywgc3JjdykpOworCX0KKwllbHNlIHsKKwkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzEsIHNyY3cpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFZNT1YgfCBSRChUTVBfUkVHMSkgfCAoVE1QX0ZSRUcxIDw8IDE2KSkpOworCX0KKworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0ZQVV9PUEVSQVRJT04oVkNWVF9GMzJfUzMyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIFRNUF9GUkVHMSwgMCkpKTsKKworCWlmIChkc3QgJiBTTEpJVF9NRU0pCisJCXJldHVybiBlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCksIFRNUF9GUkVHMSwgZHN0LCBkc3R3KTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQoreworCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7CisJCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcpKTsKKwkJc3JjMSA9IFRNUF9GUkVHMTsKKwl9CisKKwlpZiAoc3JjMiAmIFNMSklUX01FTSkgeworCQlGQUlMX0lGKGVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IEZQVV9MT0FELCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3KSk7CisJCXNyYzIgPSBUTVBfRlJFRzI7CisJfQorCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfRlBVX09QRVJBVElPTihWQ01QX0YzMiwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIHNyYzEsIHNyYzIsIDApKSk7CisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgVk1SUyk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBkc3RfcjsKKworCUNIRUNLX0VSUk9SKCk7CisJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCWlmIChHRVRfT1BDT0RFKG9wKSAhPSBTTEpJVF9DT05WRF9GUk9NUykKKwkJb3AgXj0gU0xKSVRfU0lOR0xFX09QOworCisJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX1NJTkdMRV9PUCA9PSAweDEwMCksIGZsb2F0X3RyYW5zZmVyX2JpdF9lcnJvcik7CisJU0VMRUNUX0ZPUDFfT1BFUkFUSU9OX1dJVEhfQ0hFQ0tTKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpOworCisJZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX0ZSRUcxOworCisJaWYgKHNyYyAmIFNMSklUX01FTSkgeworCQlGQUlMX0lGKGVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IEZQVV9MT0FELCBkc3Rfciwgc3JjLCBzcmN3KSk7CisJCXNyYyA9IGRzdF9yOworCX0KKworCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKKwljYXNlIFNMSklUX0RNT1Y6CisJCWlmIChzcmMgIT0gZHN0X3IpIHsKKwkJCWlmIChkc3RfciAhPSBUTVBfRlJFRzEpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfRlBVX09QRVJBVElPTihWTU9WX0YzMiwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIGRzdF9yLCBzcmMsIDApKSk7CisJCQllbHNlCisJCQkJZHN0X3IgPSBzcmM7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9ETkVHOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfT1BFUkFUSU9OKFZORUdfRjMyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYywgMCkpKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9EQUJTOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfT1BFUkFUSU9OKFZBQlNfRjMyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYywgMCkpKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9DT05WRF9GUk9NUzoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfRlBVX09QRVJBVElPTihWQ1ZUX0Y2NF9GMzIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjLCAwKSkpOworCQlvcCBePSBTTEpJVF9TSU5HTEVfT1A7CisJCWJyZWFrOworCX0KKworCWlmIChkc3QgJiBTTEpJVF9NRU0pCisJCXJldHVybiBlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCksIGRzdF9yLCBkc3QsIGRzdHcpOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlzbGppdF9zaSBkc3RfcjsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMxLCBzcmMxdyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMyLCBzcmMydyk7CisKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisJb3AgXj0gU0xKSVRfU0lOR0xFX09QOworCisJZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX0ZSRUcxOworCisJaWYgKHNyYzIgJiBTTEpJVF9NRU0pIHsKKwkJRkFJTF9JRihlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBGUFVfTE9BRCwgVE1QX0ZSRUcyLCBzcmMyLCBzcmMydykpOworCQlzcmMyID0gVE1QX0ZSRUcyOworCX0KKworCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7CisJCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcpKTsKKwkJc3JjMSA9IFRNUF9GUkVHMTsKKwl9CisKKwlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7CisJY2FzZSBTTEpJVF9EQUREOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfT1BFUkFUSU9OKFZBRERfRjMyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYzIsIHNyYzEpKSk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9EU1VCOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfT1BFUkFUSU9OKFZTVUJfRjMyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYzIsIHNyYzEpKSk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9ETVVMOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfT1BFUkFUSU9OKFZNVUxfRjMyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYzIsIHNyYzEpKSk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9ERElWOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9GUFVfT1BFUkFUSU9OKFZESVZfRjMyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYzIsIHNyYzEpKSk7CisJCWJyZWFrOworCX0KKworCWlmIChkc3RfciA9PSBUTVBfRlJFRzEpCisJCUZBSUxfSUYoZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApLCBUTVBfRlJFRzEsIGRzdCwgZHN0dykpOworCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKKyN1bmRlZiBGUFVfTE9BRAorI3VuZGVmIEVNSVRfRlBVX0RBVEFfVFJBTlNGRVIKKyN1bmRlZiBFTUlUX0ZQVV9PUEVSQVRJT04KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgT3RoZXIgaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mYXN0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dykKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgZHN0LCBkc3R3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCisJLyogRm9yIFVOVVNFRCBkc3QuIFVuY29tbW9uLCBidXQgcG9zc2libGUuICovCisJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQpCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJaWYgKEZBU1RfSVNfUkVHKGRzdCkpCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhNT1ZfRFAsIDAsIGRzdCwgU0xKSVRfVU5VU0VELCBSTShUTVBfUkVHMykpKTsKKworCS8qIE1lbW9yeS4gKi8KKwlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBXT1JEX0RBVEEsIFRNUF9SRUczLCBkc3QsIGRzdHcpKQorCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOworCS8qIFRNUF9SRUczIGlzIHVzZWQgZm9yIGNhY2hpbmcuICovCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhNT1ZfRFAsIDAsIFRNUF9SRUcyLCBTTEpJVF9VTlVTRUQsIFJNKFRNUF9SRUczKSkpKTsKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIFdPUkRfREFUQSwgVE1QX1JFRzIsIGRzdCwgZHN0dywgMCwgMCk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIHNyYywgc3JjdykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCWlmIChGQVNUX0lTX1JFRyhzcmMpKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKE1PVl9EUCwgMCwgVE1QX1JFRzMsIFNMSklUX1VOVVNFRCwgUk0oc3JjKSkpKTsKKwllbHNlIGlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgV09SRF9EQVRBIHwgTE9BRF9EQVRBLCBUTVBfUkVHMywgc3JjLCBzcmN3KSkKKwkJCUZBSUxfSUYoY29tcGlsZXItPmVycm9yKTsKKwkJZWxzZSB7CisJCQljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgV09SRF9EQVRBIHwgTE9BRF9EQVRBLCBUTVBfUkVHMiwgc3JjLCBzcmN3LCAwLCAwKSk7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRU1JVF9EQVRBX1BST0NFU1NfSU5TKE1PVl9EUCwgMCwgVE1QX1JFRzMsIFNMSklUX1VOVVNFRCwgUk0oVE1QX1JFRzIpKSkpOworCQl9CisJfQorCWVsc2UgaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzMsIHNyY3cpKTsKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBCTFggfCBSTShUTVBfUkVHMykpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBDb25kaXRpb25hbCBpbnN0cnVjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzbGppdF91dyBnZXRfY2Moc2xqaXRfc2kgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNMSklUX0VRVUFMOgorCWNhc2UgU0xKSVRfTVVMX05PVF9PVkVSRkxPVzoKKwljYXNlIFNMSklUX0RfRVFVQUw6CisJCXJldHVybiAweDAwMDAwMDAwOworCisJY2FzZSBTTEpJVF9OT1RfRVFVQUw6CisJY2FzZSBTTEpJVF9NVUxfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9EX05PVF9FUVVBTDoKKwkJcmV0dXJuIDB4MTAwMDAwMDA7CisKKwljYXNlIFNMSklUX0xFU1M6CisJY2FzZSBTTEpJVF9EX0xFU1M6CisJCXJldHVybiAweDMwMDAwMDAwOworCisJY2FzZSBTTEpJVF9HUkVBVEVSX0VRVUFMOgorCWNhc2UgU0xKSVRfRF9HUkVBVEVSX0VRVUFMOgorCQlyZXR1cm4gMHgyMDAwMDAwMDsKKworCWNhc2UgU0xKSVRfR1JFQVRFUjoKKwljYXNlIFNMSklUX0RfR1JFQVRFUjoKKwkJcmV0dXJuIDB4ODAwMDAwMDA7CisKKwljYXNlIFNMSklUX0xFU1NfRVFVQUw6CisJY2FzZSBTTEpJVF9EX0xFU1NfRVFVQUw6CisJCXJldHVybiAweDkwMDAwMDAwOworCisJY2FzZSBTTEpJVF9TSUdfTEVTUzoKKwkJcmV0dXJuIDB4YjAwMDAwMDA7CisKKwljYXNlIFNMSklUX1NJR19HUkVBVEVSX0VRVUFMOgorCQlyZXR1cm4gMHhhMDAwMDAwMDsKKworCWNhc2UgU0xKSVRfU0lHX0dSRUFURVI6CisJCXJldHVybiAweGMwMDAwMDAwOworCisJY2FzZSBTTEpJVF9TSUdfTEVTU19FUVVBTDoKKwkJcmV0dXJuIDB4ZDAwMDAwMDA7CisKKwljYXNlIFNMSklUX09WRVJGTE9XOgorCWNhc2UgU0xKSVRfRF9VTk9SREVSRUQ6CisJCXJldHVybiAweDYwMDAwMDAwOworCisJY2FzZSBTTEpJVF9OT1RfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9EX09SREVSRUQ6CisJCXJldHVybiAweDcwMDAwMDAwOworCisJZGVmYXVsdDoKKwkJU0xKSVRfQVNTRVJUKHR5cGUgPj0gU0xKSVRfSlVNUCAmJiB0eXBlIDw9IFNMSklUX0NBTEwzKTsKKwkJcmV0dXJuIDB4ZTAwMDAwMDA7CisJfQorfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2xhYmVsKiBzbGppdF9lbWl0X2xhYmVsKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisJc3RydWN0IHNsaml0X2xhYmVsICpsYWJlbDsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2xhYmVsKGNvbXBpbGVyKSk7CisKKwlpZiAoY29tcGlsZXItPmxhc3RfbGFiZWwgJiYgY29tcGlsZXItPmxhc3RfbGFiZWwtPnNpemUgPT0gY29tcGlsZXItPnNpemUpCisJCXJldHVybiBjb21waWxlci0+bGFzdF9sYWJlbDsKKworCWxhYmVsID0gKHN0cnVjdCBzbGppdF9sYWJlbCopZW5zdXJlX2FidWYoY29tcGlsZXIsIHNpemVvZihzdHJ1Y3Qgc2xqaXRfbGFiZWwpKTsKKwlQVFJfRkFJTF9JRighbGFiZWwpOworCXNldF9sYWJlbChsYWJlbCwgY29tcGlsZXIpOworCXJldHVybiBsYWJlbDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSkKK3sKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2p1bXAoY29tcGlsZXIsIHR5cGUpKTsKKworCWp1bXAgPSAoc3RydWN0IHNsaml0X2p1bXAqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2p1bXApKTsKKwlQVFJfRkFJTF9JRighanVtcCk7CisJc2V0X2p1bXAoanVtcCwgY29tcGlsZXIsIHR5cGUgJiBTTEpJVF9SRVdSSVRBQkxFX0pVTVApOworCXR5cGUgJj0gMHhmZjsKKworCS8qIEluIEFSTSwgd2UgZG9uJ3QgbmVlZCB0byB0b3VjaCB0aGUgYXJndW1lbnRzLiAqLworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKKwlpZiAodHlwZSA+PSBTTEpJVF9GQVNUX0NBTEwpCisJCVBUUl9GQUlMX0lGKHByZXBhcmVfYmx4KGNvbXBpbGVyKSk7CisJUFRSX0ZBSUxfSUYocHVzaF9pbnN0X3dpdGhfdW5pcXVlX2xpdGVyYWwoY29tcGlsZXIsICgoRU1JVF9EQVRBX1RSQU5TRkVSKFdPUkRfREFUQSB8IExPQURfREFUQSwgMSwgMCwKKwkJdHlwZSA8PSBTTEpJVF9KVU1QID8gVE1QX1BDIDogVE1QX1JFRzEsIFRNUF9QQywgMCkpICYgfkNPTkRfTUFTSykgfCBnZXRfY2ModHlwZSksIDApKTsKKworCWlmIChqdW1wLT5mbGFncyAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCkgeworCQlqdW1wLT5hZGRyID0gY29tcGlsZXItPnNpemU7CisJCWNvbXBpbGVyLT5wYXRjaGVzKys7CisJfQorCisJaWYgKHR5cGUgPj0gU0xKSVRfRkFTVF9DQUxMKSB7CisJCWp1bXAtPmZsYWdzIHw9IElTX0JMOworCQlQVFJfRkFJTF9JRihlbWl0X2JseChjb21waWxlcikpOworCX0KKworCWlmICghKGp1bXAtPmZsYWdzICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKSkKKwkJanVtcC0+YWRkciA9IGNvbXBpbGVyLT5zaXplOworI2Vsc2UKKwlpZiAodHlwZSA+PSBTTEpJVF9GQVNUX0NBTEwpCisJCWp1bXAtPmZsYWdzIHw9IElTX0JMOworCVBUUl9GQUlMX0lGKGVtaXRfaW1tKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCkpOworCVBUUl9GQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKCgodHlwZSA8PSBTTEpJVF9KVU1QID8gQlggOiBCTFgpIHwgUk0oVE1QX1JFRzEpKSAmIH5DT05EX01BU0spIHwgZ2V0X2NjKHR5cGUpKSk7CisJanVtcC0+YWRkciA9IGNvbXBpbGVyLT5zaXplOworI2VuZGlmCisJcmV0dXJuIGp1bXA7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2lqdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9panVtcChjb21waWxlciwgdHlwZSwgc3JjLCBzcmN3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOworCisJLyogSW4gQVJNLCB3ZSBkb24ndCBuZWVkIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMuICovCisJaWYgKCEoc3JjICYgU0xKSVRfSU1NKSkgeworCQlpZiAoRkFTVF9JU19SRUcoc3JjKSkKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsICh0eXBlIDw9IFNMSklUX0pVTVAgPyBCWCA6IEJMWCkgfCBSTShzcmMpKTsKKworCQlTTEpJVF9BU1NFUlQoc3JjICYgU0xKSVRfTUVNKTsKKwkJRkFJTF9JRihlbWl0X29wX21lbShjb21waWxlciwgV09SRF9EQVRBIHwgTE9BRF9EQVRBLCBUTVBfUkVHMiwgc3JjLCBzcmN3KSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsICh0eXBlIDw9IFNMSklUX0pVTVAgPyBCWCA6IEJMWCkgfCBSTShUTVBfUkVHMikpOworCX0KKworCWp1bXAgPSAoc3RydWN0IHNsaml0X2p1bXAqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2p1bXApKTsKKwlGQUlMX0lGKCFqdW1wKTsKKwlzZXRfanVtcChqdW1wLCBjb21waWxlciwgSlVNUF9BRERSIHwgKCh0eXBlID49IFNMSklUX0ZBU1RfQ0FMTCkgPyBJU19CTCA6IDApKTsKKwlqdW1wLT51LnRhcmdldCA9IHNyY3c7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfQVJNX1Y1ICYmIFNMSklUX0NPTkZJR19BUk1fVjUpCisJaWYgKHR5cGUgPj0gU0xKSVRfRkFTVF9DQUxMKQorCQlGQUlMX0lGKHByZXBhcmVfYmx4KGNvbXBpbGVyKSk7CisJRkFJTF9JRihwdXNoX2luc3Rfd2l0aF91bmlxdWVfbGl0ZXJhbChjb21waWxlciwgRU1JVF9EQVRBX1RSQU5TRkVSKFdPUkRfREFUQSB8IExPQURfREFUQSwgMSwgMCwgdHlwZSA8PSBTTEpJVF9KVU1QID8gVE1QX1BDIDogVE1QX1JFRzEsIFRNUF9QQywgMCksIDApKTsKKwlpZiAodHlwZSA+PSBTTEpJVF9GQVNUX0NBTEwpCisJCUZBSUxfSUYoZW1pdF9ibHgoY29tcGlsZXIpKTsKKyNlbHNlCisJRkFJTF9JRihlbWl0X2ltbShjb21waWxlciwgVE1QX1JFRzEsIDApKTsKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKHR5cGUgPD0gU0xKSVRfSlVNUCA/IEJYIDogQkxYKSB8IFJNKFRNUF9SRUcxKSkpOworI2VuZGlmCisJanVtcC0+YWRkciA9IGNvbXBpbGVyLT5zaXplOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3LAorCXNsaml0X3NpIHR5cGUpCit7CisJc2xqaXRfc2kgZHN0X3IsIGZsYWdzID0gR0VUX0FMTF9GTEFHUyhvcCk7CisJc2xqaXRfdXcgY2MsIGluczsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcF9mbGFncyhjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3LCB0eXBlKSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCW9wID0gR0VUX09QQ09ERShvcCk7CisJY2MgPSBnZXRfY2ModHlwZSAmIDB4ZmYpOworCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcyOworCisJaWYgKG9wIDwgU0xKSVRfQUREKSB7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCAwLCBkc3RfciwgU0xKSVRfVU5VU0VELCBTUkMyX0lNTSB8IDApKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoRU1JVF9EQVRBX1BST0NFU1NfSU5TKE1PVl9EUCwgMCwgZHN0X3IsIFNMSklUX1VOVVNFRCwgU1JDMl9JTU0gfCAxKSAmIH5DT05EX01BU0spIHwgY2MpKTsKKwkJcmV0dXJuIChkc3RfciA9PSBUTVBfUkVHMikgPyBlbWl0X29wX21lbShjb21waWxlciwgV09SRF9EQVRBLCBUTVBfUkVHMiwgZHN0LCBkc3R3KSA6IFNMSklUX1NVQ0NFU1M7CisJfQorCisJaW5zID0gKG9wID09IFNMSklUX0FORCA/IEFORF9EUCA6IChvcCA9PSBTTEpJVF9PUiA/IE9SUl9EUCA6IEVPUl9EUCkpOworCWlmICgob3AgPT0gU0xKSVRfT1IgfHwgb3AgPT0gU0xKSVRfWE9SKSAmJiBGQVNUX0lTX1JFRyhkc3QpICYmIGRzdCA9PSBzcmMpIHsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChFTUlUX0RBVEFfUFJPQ0VTU19JTlMoaW5zLCAwLCBkc3QsIGRzdCwgU1JDMl9JTU0gfCAxKSAmIH5DT05EX01BU0spIHwgY2MpKTsKKwkJLyogVGhlIGNvbmRpdGlvbiBtdXN0IGFsd2F5cyBiZSBzZXQsIGV2ZW4gaWYgdGhlIE9SUi9FT1IgaXMgbm90IGV4ZWN1dGVkIGFib3ZlLiAqLworCQlyZXR1cm4gKGZsYWdzICYgU0xKSVRfU0VUX0UpID8gcHVzaF9pbnN0KGNvbXBpbGVyLCBFTUlUX0RBVEFfUFJPQ0VTU19JTlMoTU9WX0RQLCBTRVRfRkxBR1MsIFRNUF9SRUcxLCBTTEpJVF9VTlVTRUQsIFJNKGRzdCkpKSA6IFNMSklUX1NVQ0NFU1M7CisJfQorCisJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIFdPUkRfREFUQSB8IExPQURfREFUQSwgVE1QX1JFRzEsIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CisJCXNyYyA9IFRNUF9SRUcxOworCQlzcmN3ID0gMDsKKwl9IGVsc2UgaWYgKHNyYyAmIFNMSklUX0lNTSkgeworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMSwgc3JjdykpOworCQlzcmMgPSBUTVBfUkVHMTsKKwkJc3JjdyA9IDA7CisJfQorCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChFTUlUX0RBVEFfUFJPQ0VTU19JTlMoaW5zLCAwLCBkc3Rfciwgc3JjLCBTUkMyX0lNTSB8IDEpICYgfkNPTkRfTUFTSykgfCBjYykpOworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoRU1JVF9EQVRBX1BST0NFU1NfSU5TKGlucywgMCwgZHN0X3IsIHNyYywgU1JDMl9JTU0gfCAwKSAmIH5DT05EX01BU0spIHwgKGNjIF4gMHgxMDAwMDAwMCkpKTsKKwlpZiAoZHN0X3IgPT0gVE1QX1JFRzIpCisJCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBXT1JEX0RBVEEsIFRNUF9SRUcyLCBkc3QsIGRzdHcsIDAsIDApKTsKKworCXJldHVybiAoZmxhZ3MgJiBTTEpJVF9TRVRfRSkgPyBwdXNoX2luc3QoY29tcGlsZXIsIEVNSVRfREFUQV9QUk9DRVNTX0lOUyhNT1ZfRFAsIFNFVF9GTEFHUywgVE1QX1JFRzEsIFNMSklUX1VOVVNFRCwgUk0oZHN0X3IpKSkgOiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbnN0KiBzbGppdF9lbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdF92YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2xqaXRfY29uc3QgKmNvbnN0XzsKKwlzbGppdF9zaSByZWc7CisKKwlDSEVDS19FUlJPUl9QVFIoKTsKKwlDSEVDS19QVFIoY2hlY2tfc2xqaXRfZW1pdF9jb25zdChjb21waWxlciwgZHN0LCBkc3R3LCBpbml0X3ZhbHVlKSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCisJY29uc3RfID0gKHN0cnVjdCBzbGppdF9jb25zdCopZW5zdXJlX2FidWYoY29tcGlsZXIsIHNpemVvZihzdHJ1Y3Qgc2xqaXRfY29uc3QpKTsKKwlQVFJfRkFJTF9JRighY29uc3RfKTsKKworCXJlZyA9IFNMT1dfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfUkVHMjsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19BUk1fVjUgJiYgU0xKSVRfQ09ORklHX0FSTV9WNSkKKwlQVFJfRkFJTF9JRihwdXNoX2luc3Rfd2l0aF91bmlxdWVfbGl0ZXJhbChjb21waWxlciwgRU1JVF9EQVRBX1RSQU5TRkVSKFdPUkRfREFUQSB8IExPQURfREFUQSwgMSwgMCwgcmVnLCBUTVBfUEMsIDApLCBpbml0X3ZhbHVlKSk7CisJY29tcGlsZXItPnBhdGNoZXMrKzsKKyNlbHNlCisJUFRSX0ZBSUxfSUYoZW1pdF9pbW0oY29tcGlsZXIsIHJlZywgaW5pdF92YWx1ZSkpOworI2VuZGlmCisJc2V0X2NvbnN0KGNvbnN0XywgY29tcGlsZXIpOworCisJaWYgKGRzdCAmIFNMSklUX01FTSkKKwkJUFRSX0ZBSUxfSUYoZW1pdF9vcF9tZW0oY29tcGlsZXIsIFdPUkRfREFUQSwgVE1QX1JFRzIsIGRzdCwgZHN0dykpOworCXJldHVybiBjb25zdF87Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9qdW1wX2FkZHIoc2xqaXRfdXcgYWRkciwgc2xqaXRfdXcgbmV3X2FkZHIpCit7CisJaW5saW5lX3NldF9qdW1wX2FkZHIoYWRkciwgbmV3X2FkZHIsIDEpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfY29uc3Qoc2xqaXRfdXcgYWRkciwgc2xqaXRfc3cgbmV3X2NvbnN0YW50KQoreworCWlubGluZV9zZXRfY29uc3QoYWRkciwgbmV3X2NvbnN0YW50LCAxKTsKK30KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZUFSTV82NC5jIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlQVJNXzY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ0YTY3NQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZUFSTV82NC5jCkBAIC0wLDAgKzEsMjA1MCBAQAorLyoKKyAqICAgIFN0YWNrLWxlc3MgSnVzdC1Jbi1UaW1lIGNvbXBpbGVyCisgKgorICogICAgQ29weXJpZ2h0IDIwMDktMjAxMiBab2x0YW4gSGVyY3plZyAoaHptZXN0ZXJAZnJlZW1haWwuaHUpLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgorICogICAgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UCisgKiBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgU0xKSVRfQ09OU1QgY2hhciogc2xqaXRfZ2V0X3BsYXRmb3JtX25hbWUodm9pZCkKK3sKKwlyZXR1cm4gIkFSTS02NCIgU0xKSVRfQ1BVSU5GTzsKK30KKworLyogTGVuZ3RoIG9mIGFuIGluc3RydWN0aW9uIHdvcmQgKi8KK3R5cGVkZWYgc2xqaXRfdWkgc2xqaXRfaW5zOworCisjZGVmaW5lIFRNUF9aRVJPCSgwKQorCisjZGVmaW5lIFRNUF9SRUcxCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgMikKKyNkZWZpbmUgVE1QX1JFRzIJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAzKQorI2RlZmluZSBUTVBfUkVHMwkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDQpCisjZGVmaW5lIFRNUF9MUgkJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyA1KQorI2RlZmluZSBUTVBfU1AJCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNikKKworI2RlZmluZSBUTVBfRlJFRzEJKDApCisjZGVmaW5lIFRNUF9GUkVHMgkoU0xKSVRfTlVNQkVSX09GX0ZMT0FUX1JFR0lTVEVSUyArIDEpCisKK3N0YXRpYyBTTEpJVF9DT05TVCBzbGppdF91YiByZWdfbWFwW1NMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyA4XSA9IHsKKyAgMzEsIDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTcsIDgsIDI4LCAyNywgMjYsIDI1LCAyNCwgMjMsIDIyLCAyMSwgMjAsIDE5LCAyOSwgOSwgMTAsIDExLCAzMCwgMzEKK307CisKKyNkZWZpbmUgV19PUCAoMSA8PCAzMSkKKyNkZWZpbmUgUkQocmQpIChyZWdfbWFwW3JkXSkKKyNkZWZpbmUgUlQocnQpIChyZWdfbWFwW3J0XSkKKyNkZWZpbmUgUk4ocm4pIChyZWdfbWFwW3JuXSA8PCA1KQorI2RlZmluZSBSVDIocnQyKSAocmVnX21hcFtydDJdIDw8IDEwKQorI2RlZmluZSBSTShybSkgKHJlZ19tYXBbcm1dIDw8IDE2KQorI2RlZmluZSBWRCh2ZCkgKHZkKQorI2RlZmluZSBWVCh2dCkgKHZ0KQorI2RlZmluZSBWTih2bikgKCh2bikgPDwgNSkKKyNkZWZpbmUgVk0odm0pICgodm0pIDw8IDE2KQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBJbnN0cnVjaW9uIGZvcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgQURDIDB4OWEwMDAwMDAKKyNkZWZpbmUgQUREIDB4OGIwMDAwMDAKKyNkZWZpbmUgQURESSAweDkxMDAwMDAwCisjZGVmaW5lIEFORCAweDhhMDAwMDAwCisjZGVmaW5lIEFOREkgMHg5MjAwMDAwMAorI2RlZmluZSBBU1JWIDB4OWFjMDI4MDAKKyNkZWZpbmUgQiAweDE0MDAwMDAwCisjZGVmaW5lIEJfQ0MgMHg1NDAwMDAwMAorI2RlZmluZSBCTCAweDk0MDAwMDAwCisjZGVmaW5lIEJMUiAweGQ2M2YwMDAwCisjZGVmaW5lIEJSIDB4ZDYxZjAwMDAKKyNkZWZpbmUgQlJLIDB4ZDQyMDAwMDAKKyNkZWZpbmUgQ0JaIDB4YjQwMDAwMDAKKyNkZWZpbmUgQ0xaIDB4ZGFjMDEwMDAKKyNkZWZpbmUgQ1NJTkMgMHg5YTgwMDQwMAorI2RlZmluZSBFT1IgMHhjYTAwMDAwMAorI2RlZmluZSBFT1JJIDB4ZDIwMDAwMDAKKyNkZWZpbmUgRkFCUyAweDFlNjBjMDAwCisjZGVmaW5lIEZBREQgMHgxZTYwMjgwMAorI2RlZmluZSBGQ01QIDB4MWU2MDIwMDAKKyNkZWZpbmUgRkNWVCAweDFlMjI0MDAwCisjZGVmaW5lIEZDVlRaUyAweDllNzgwMDAwCisjZGVmaW5lIEZESVYgMHgxZTYwMTgwMAorI2RlZmluZSBGTU9WIDB4MWU2MDQwMDAKKyNkZWZpbmUgRk1VTCAweDFlNjAwODAwCisjZGVmaW5lIEZORUcgMHgxZTYxNDAwMAorI2RlZmluZSBGU1VCIDB4MWU2MDM4MDAKKyNkZWZpbmUgTERSSSAweGY5NDAwMDAwCisjZGVmaW5lIExEUCAweGE5NDAwMDAwCisjZGVmaW5lIExEUF9QU1QgMHhhOGMwMDAwMAorI2RlZmluZSBMU0xWIDB4OWFjMDIwMDAKKyNkZWZpbmUgTFNSViAweDlhYzAyNDAwCisjZGVmaW5lIE1BREQgMHg5YjAwMDAwMAorI2RlZmluZSBNT1ZLIDB4ZjI4MDAwMDAKKyNkZWZpbmUgTU9WTiAweDkyODAwMDAwCisjZGVmaW5lIE1PVlogMHhkMjgwMDAwMAorI2RlZmluZSBOT1AgMHhkNTAzMjAxZgorI2RlZmluZSBPUk4gMHhhYTIwMDAwMAorI2RlZmluZSBPUlIgMHhhYTAwMDAwMAorI2RlZmluZSBPUlJJIDB4YjIwMDAwMDAKKyNkZWZpbmUgUkVUIDB4ZDY1ZjAwMDAKKyNkZWZpbmUgU0JDIDB4ZGEwMDAwMDAKKyNkZWZpbmUgU0JGTSAweDkzMDAwMDAwCisjZGVmaW5lIFNDVlRGIDB4OWU2MjAwMDAKKyNkZWZpbmUgU0RJViAweDlhYzAwYzAwCisjZGVmaW5lIFNNQURETCAweDliMjAwMDAwCisjZGVmaW5lIFNNVUxIIDB4OWI0MDNjMDAKKyNkZWZpbmUgU1RQIDB4YTkwMDAwMDAKKyNkZWZpbmUgU1RQX1BSRSAweGE5ODAwMDAwCisjZGVmaW5lIFNUUkkgMHhmOTAwMDAwMAorI2RlZmluZSBTVFJfRkkgMHgzZDAwMDAwMAorI2RlZmluZSBTVFJfRlIgMHgzYzIwNjgwMAorI2RlZmluZSBTVFVSX0ZJIDB4M2MwMDAwMDAKKyNkZWZpbmUgU1VCIDB4Y2IwMDAwMDAKKyNkZWZpbmUgU1VCSSAweGQxMDAwMDAwCisjZGVmaW5lIFNVQlMgMHhlYjAwMDAwMAorI2RlZmluZSBVQkZNIDB4ZDMwMDAwMDAKKyNkZWZpbmUgVURJViAweDlhYzAwODAwCisjZGVmaW5lIFVNVUxIIDB4OWJjMDNjMDAKKworLyogZGVzdF9yZWcgaXMgdGhlIGFic29sdXRlIG5hbWUgb2YgdGhlIHJlZ2lzdGVyCisgICBVc2VmdWwgZm9yIHJlb3JkZXJpbmcgaW5zdHJ1Y3Rpb25zIGluIHRoZSBkZWxheSBzbG90LiAqLworc3RhdGljIHNsaml0X3NpIHB1c2hfaW5zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9pbnMgaW5zKQoreworCXNsaml0X2lucyAqcHRyID0gKHNsaml0X2lucyopZW5zdXJlX2J1Zihjb21waWxlciwgc2l6ZW9mKHNsaml0X2lucykpOworCUZBSUxfSUYoIXB0cik7CisJKnB0ciA9IGluczsKKwljb21waWxlci0+c2l6ZSsrOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfaW1tNjRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF91dyBpbW0pCit7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1PVlogfCBSRChkc3QpIHwgKChpbW0gJiAweGZmZmYpIDw8IDUpKSk7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1PVksgfCBSRChkc3QpIHwgKCgoaW1tID4+IDE2KSAmIDB4ZmZmZikgPDwgNSkgfCAoMSA8PCAyMSkpKTsKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTU9WSyB8IFJEKGRzdCkgfCAoKChpbW0gPj4gMzIpICYgMHhmZmZmKSA8PCA1KSB8ICgyIDw8IDIxKSkpOworCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE1PVksgfCBSRChkc3QpIHwgKChpbW0gPj4gNDgpIDw8IDUpIHwgKDMgPDwgMjEpKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIG1vZGlmeV9pbW02NF9jb25zdChzbGppdF9pbnMqIGluc3QsIHNsaml0X3V3IG5ld19pbW0pCit7CisJc2xqaXRfc2kgZHN0ID0gaW5zdFswXSAmIDB4MWY7CisJU0xKSVRfQVNTRVJUKChpbnN0WzBdICYgMHhmZmUwMDAwMCkgPT0gTU9WWiAmJiAoaW5zdFsxXSAmIDB4ZmZlMDAwMDApID09IChNT1ZLIHwgKDEgPDwgMjEpKSk7CisJaW5zdFswXSA9IE1PVlogfCBkc3QgfCAoKG5ld19pbW0gJiAweGZmZmYpIDw8IDUpOworCWluc3RbMV0gPSBNT1ZLIHwgZHN0IHwgKCgobmV3X2ltbSA+PiAxNikgJiAweGZmZmYpIDw8IDUpIHwgKDEgPDwgMjEpOworCWluc3RbMl0gPSBNT1ZLIHwgZHN0IHwgKCgobmV3X2ltbSA+PiAzMikgJiAweGZmZmYpIDw8IDUpIHwgKDIgPDwgMjEpOworCWluc3RbM10gPSBNT1ZLIHwgZHN0IHwgKChuZXdfaW1tID4+IDQ4KSA8PCA1KSB8ICgzIDw8IDIxKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBkZXRlY3RfanVtcF90eXBlKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzbGppdF9pbnMgKmNvZGVfcHRyLCBzbGppdF9pbnMgKmNvZGUpCit7CisJc2xqaXRfc3cgZGlmZjsKKwlzbGppdF91dyB0YXJnZXRfYWRkcjsKKworCWlmIChqdW1wLT5mbGFncyAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCkgeworCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9BQlM2NDsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGp1bXAtPmZsYWdzICYgSlVNUF9BRERSKQorCQl0YXJnZXRfYWRkciA9IGp1bXAtPnUudGFyZ2V0OworCWVsc2UgeworCQlTTEpJVF9BU1NFUlQoanVtcC0+ZmxhZ3MgJiBKVU1QX0xBQkVMKTsKKwkJdGFyZ2V0X2FkZHIgPSAoc2xqaXRfdXcpKGNvZGUgKyBqdW1wLT51LmxhYmVsLT5zaXplKTsKKwl9CisJZGlmZiA9IChzbGppdF9zdyl0YXJnZXRfYWRkciAtIChzbGppdF9zdykoY29kZV9wdHIgKyA0KTsKKworCWlmIChqdW1wLT5mbGFncyAmIElTX0NPTkQpIHsKKwkJZGlmZiArPSBzaXplb2Yoc2xqaXRfaW5zKTsKKwkJaWYgKGRpZmYgPD0gMHhmZmZmZiAmJiBkaWZmID49IC0weDEwMDAwMCkgeworCQkJY29kZV9wdHJbLTVdIF49IChqdW1wLT5mbGFncyAmIElTX0NCWikgPyAoMHgxIDw8IDI0KSA6IDB4MTsKKwkJCWp1bXAtPmFkZHIgLT0gc2l6ZW9mKHNsaml0X2lucyk7CisJCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9DT05EOworCQkJcmV0dXJuIDU7CisJCX0KKwkJZGlmZiAtPSBzaXplb2Yoc2xqaXRfaW5zKTsKKwl9CisKKwlpZiAoZGlmZiA8PSAweDdmZmZmZmYgJiYgZGlmZiA+PSAtMHg4MDAwMDAwKSB7CisJCWp1bXAtPmZsYWdzIHw9IFBBVENIX0I7CisJCXJldHVybiA0OworCX0KKworCWlmICh0YXJnZXRfYWRkciA8PSAweGZmZmZmZmZmbCkgeworCQlpZiAoanVtcC0+ZmxhZ3MgJiBJU19DT05EKQorCQkJY29kZV9wdHJbLTVdIC09ICgyIDw8IDUpOworCQljb2RlX3B0clstMl0gPSBjb2RlX3B0clswXTsKKwkJcmV0dXJuIDI7CisJfQorCWlmICh0YXJnZXRfYWRkciA8PSAweGZmZmZmZmZmZmZmZmwpIHsKKwkJaWYgKGp1bXAtPmZsYWdzICYgSVNfQ09ORCkKKwkJCWNvZGVfcHRyWy01XSAtPSAoMSA8PCA1KTsKKwkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfQUJTNDg7CisJCWNvZGVfcHRyWy0xXSA9IGNvZGVfcHRyWzBdOworCQlyZXR1cm4gMTsKKwl9CisKKwlqdW1wLT5mbGFncyB8PSBQQVRDSF9BQlM2NDsKKwlyZXR1cm4gMDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQqIHNsaml0X2dlbmVyYXRlX2NvZGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKK3sKKwlzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50ICpidWY7CisJc2xqaXRfaW5zICpjb2RlOworCXNsaml0X2lucyAqY29kZV9wdHI7CisJc2xqaXRfaW5zICpidWZfcHRyOworCXNsaml0X2lucyAqYnVmX2VuZDsKKwlzbGppdF91dyB3b3JkX2NvdW50OworCXNsaml0X3V3IGFkZHI7CisJc2xqaXRfc2kgZHN0OworCisJc3RydWN0IHNsaml0X2xhYmVsICpsYWJlbDsKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKwlzdHJ1Y3Qgc2xqaXRfY29uc3QgKmNvbnN0XzsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9nZW5lcmF0ZV9jb2RlKGNvbXBpbGVyKSk7CisJcmV2ZXJzZV9idWYoY29tcGlsZXIpOworCisJY29kZSA9IChzbGppdF9pbnMqKVNMSklUX01BTExPQ19FWEVDKGNvbXBpbGVyLT5zaXplICogc2l6ZW9mKHNsaml0X2lucykpOworCVBUUl9GQUlMX1dJVEhfRVhFQ19JRihjb2RlKTsKKwlidWYgPSBjb21waWxlci0+YnVmOworCisJY29kZV9wdHIgPSBjb2RlOworCXdvcmRfY291bnQgPSAwOworCWxhYmVsID0gY29tcGlsZXItPmxhYmVsczsKKwlqdW1wID0gY29tcGlsZXItPmp1bXBzOworCWNvbnN0XyA9IGNvbXBpbGVyLT5jb25zdHM7CisKKwlkbyB7CisJCWJ1Zl9wdHIgPSAoc2xqaXRfaW5zKilidWYtPm1lbW9yeTsKKwkJYnVmX2VuZCA9IGJ1Zl9wdHIgKyAoYnVmLT51c2VkX3NpemUgPj4gMik7CisJCWRvIHsKKwkJCSpjb2RlX3B0ciA9ICpidWZfcHRyKys7CisJCQkvKiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIGFkZHJlc3MuICovCisJCQlTTEpJVF9BU1NFUlQoIWxhYmVsIHx8IGxhYmVsLT5zaXplID49IHdvcmRfY291bnQpOworCQkJU0xKSVRfQVNTRVJUKCFqdW1wIHx8IGp1bXAtPmFkZHIgPj0gd29yZF9jb3VudCk7CisJCQlTTEpJVF9BU1NFUlQoIWNvbnN0XyB8fCBjb25zdF8tPmFkZHIgPj0gd29yZF9jb3VudCk7CisJCQlpZiAobGFiZWwgJiYgbGFiZWwtPnNpemUgPT0gd29yZF9jb3VudCkgeworCQkJCWxhYmVsLT5hZGRyID0gKHNsaml0X3V3KWNvZGVfcHRyOworCQkJCWxhYmVsLT5zaXplID0gY29kZV9wdHIgLSBjb2RlOworCQkJCWxhYmVsID0gbGFiZWwtPm5leHQ7CisJCQl9CisJCQlpZiAoanVtcCAmJiBqdW1wLT5hZGRyID09IHdvcmRfY291bnQpIHsKKwkJCQkJanVtcC0+YWRkciA9IChzbGppdF91dykoY29kZV9wdHIgLSA0KTsKKwkJCQkJY29kZV9wdHIgLT0gZGV0ZWN0X2p1bXBfdHlwZShqdW1wLCBjb2RlX3B0ciwgY29kZSk7CisJCQkJCWp1bXAgPSBqdW1wLT5uZXh0OworCQkJfQorCQkJaWYgKGNvbnN0XyAmJiBjb25zdF8tPmFkZHIgPT0gd29yZF9jb3VudCkgeworCQkJCWNvbnN0Xy0+YWRkciA9IChzbGppdF91dyljb2RlX3B0cjsKKwkJCQljb25zdF8gPSBjb25zdF8tPm5leHQ7CisJCQl9CisJCQljb2RlX3B0ciArKzsKKwkJCXdvcmRfY291bnQgKys7CisJCX0gd2hpbGUgKGJ1Zl9wdHIgPCBidWZfZW5kKTsKKworCQlidWYgPSBidWYtPm5leHQ7CisJfSB3aGlsZSAoYnVmKTsKKworCWlmIChsYWJlbCAmJiBsYWJlbC0+c2l6ZSA9PSB3b3JkX2NvdW50KSB7CisJCWxhYmVsLT5hZGRyID0gKHNsaml0X3V3KWNvZGVfcHRyOworCQlsYWJlbC0+c2l6ZSA9IGNvZGVfcHRyIC0gY29kZTsKKwkJbGFiZWwgPSBsYWJlbC0+bmV4dDsKKwl9CisKKwlTTEpJVF9BU1NFUlQoIWxhYmVsKTsKKwlTTEpJVF9BU1NFUlQoIWp1bXApOworCVNMSklUX0FTU0VSVCghY29uc3RfKTsKKwlTTEpJVF9BU1NFUlQoY29kZV9wdHIgLSBjb2RlIDw9IChzbGppdF9zdyljb21waWxlci0+c2l6ZSk7CisKKwlqdW1wID0gY29tcGlsZXItPmp1bXBzOworCXdoaWxlIChqdW1wKSB7CisJCWRvIHsKKwkJCWFkZHIgPSAoanVtcC0+ZmxhZ3MgJiBKVU1QX0xBQkVMKSA/IGp1bXAtPnUubGFiZWwtPmFkZHIgOiBqdW1wLT51LnRhcmdldDsKKwkJCWJ1Zl9wdHIgPSAoc2xqaXRfaW5zKilqdW1wLT5hZGRyOworCQkJaWYgKGp1bXAtPmZsYWdzICYgUEFUQ0hfQikgeworCQkJCWFkZHIgPSAoc2xqaXRfc3cpKGFkZHIgLSBqdW1wLT5hZGRyKSA+PiAyOworCQkJCVNMSklUX0FTU0VSVCgoc2xqaXRfc3cpYWRkciA8PSAweDFmZmZmZmYgJiYgKHNsaml0X3N3KWFkZHIgPj0gLTB4MjAwMDAwMCk7CisJCQkJYnVmX3B0clswXSA9ICgoanVtcC0+ZmxhZ3MgJiBJU19CTCkgPyBCTCA6IEIpIHwgKGFkZHIgJiAweDNmZmZmZmYpOworCQkJCWlmIChqdW1wLT5mbGFncyAmIElTX0NPTkQpCisJCQkJCWJ1Zl9wdHJbLTFdIC09ICg0IDw8IDUpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGp1bXAtPmZsYWdzICYgUEFUQ0hfQ09ORCkgeworCQkJCWFkZHIgPSAoc2xqaXRfc3cpKGFkZHIgLSBqdW1wLT5hZGRyKSA+PiAyOworCQkJCVNMSklUX0FTU0VSVCgoc2xqaXRfc3cpYWRkciA8PSAweDNmZmZmICYmIChzbGppdF9zdylhZGRyID49IC0weDQwMDAwKTsKKwkJCQlidWZfcHRyWzBdID0gKGJ1Zl9wdHJbMF0gJiB+MHhmZmZmZTApIHwgKChhZGRyICYgMHg3ZmZmZikgPDwgNSk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCVNMSklUX0FTU0VSVCgoanVtcC0+ZmxhZ3MgJiAoUEFUQ0hfQUJTNDggfCBQQVRDSF9BQlM2NCkpIHx8IGFkZHIgPD0gMHhmZmZmZmZmZmwpOworCQkJU0xKSVRfQVNTRVJUKChqdW1wLT5mbGFncyAmIFBBVENIX0FCUzY0KSB8fCBhZGRyIDw9IDB4ZmZmZmZmZmZmZmZmbCk7CisKKwkJCWRzdCA9IGJ1Zl9wdHJbMF0gJiAweDFmOworCQkJYnVmX3B0clswXSA9IE1PVlogfCBkc3QgfCAoKGFkZHIgJiAweGZmZmYpIDw8IDUpOworCQkJYnVmX3B0clsxXSA9IE1PVksgfCBkc3QgfCAoKChhZGRyID4+IDE2KSAmIDB4ZmZmZikgPDwgNSkgfCAoMSA8PCAyMSk7CisJCQlpZiAoanVtcC0+ZmxhZ3MgJiAoUEFUQ0hfQUJTNDggfCBQQVRDSF9BQlM2NCkpCisJCQkJYnVmX3B0clsyXSA9IE1PVksgfCBkc3QgfCAoKChhZGRyID4+IDMyKSAmIDB4ZmZmZikgPDwgNSkgfCAoMiA8PCAyMSk7CisJCQlpZiAoanVtcC0+ZmxhZ3MgJiBQQVRDSF9BQlM2NCkKKwkJCQlidWZfcHRyWzNdID0gTU9WSyB8IGRzdCB8ICgoKGFkZHIgPj4gNDgpICYgMHhmZmZmKSA8PCA1KSB8ICgzIDw8IDIxKTsKKwkJfSB3aGlsZSAoMCk7CisJCWp1bXAgPSBqdW1wLT5uZXh0OworCX0KKworCWNvbXBpbGVyLT5lcnJvciA9IFNMSklUX0VSUl9DT01QSUxFRDsKKwljb21waWxlci0+ZXhlY3V0YWJsZV9zaXplID0gKGNvZGVfcHRyIC0gY29kZSkgKiBzaXplb2Yoc2xqaXRfaW5zKTsKKwlTTEpJVF9DQUNIRV9GTFVTSChjb2RlLCBjb2RlX3B0cik7CisJcmV0dXJuIGNvZGU7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIENvcmUgY29kZSBnZW5lcmF0b3IgZnVuY3Rpb25zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBDT1VOVF9UUkFJTElOR19aRVJPKHZhbHVlLCByZXN1bHQpIFwKKwlyZXN1bHQgPSAwOyBcCisJaWYgKCEodmFsdWUgJiAweGZmZmZmZmZmKSkgeyBcCisJCXJlc3VsdCArPSAzMjsgXAorCQl2YWx1ZSA+Pj0gMzI7IFwKKwl9IFwKKwlpZiAoISh2YWx1ZSAmIDB4ZmZmZikpIHsgXAorCQlyZXN1bHQgKz0gMTY7IFwKKwkJdmFsdWUgPj49IDE2OyBcCisJfSBcCisJaWYgKCEodmFsdWUgJiAweGZmKSkgeyBcCisJCXJlc3VsdCArPSA4OyBcCisJCXZhbHVlID4+PSA4OyBcCisJfSBcCisJaWYgKCEodmFsdWUgJiAweGYpKSB7IFwKKwkJcmVzdWx0ICs9IDQ7IFwKKwkJdmFsdWUgPj49IDQ7IFwKKwl9IFwKKwlpZiAoISh2YWx1ZSAmIDB4MykpIHsgXAorCQlyZXN1bHQgKz0gMjsgXAorCQl2YWx1ZSA+Pj0gMjsgXAorCX0gXAorCWlmICghKHZhbHVlICYgMHgxKSkgeyBcCisJCXJlc3VsdCArPSAxOyBcCisJCXZhbHVlID4+PSAxOyBcCisJfQorCisjZGVmaW5lIExPR0lDQUxfSU1NX0NIRUNLIDB4MTAwCisKK3N0YXRpYyBzbGppdF9pbnMgbG9naWNhbF9pbW0oc2xqaXRfc3cgaW1tLCBzbGppdF9zaSBsZW4pCit7CisJc2xqaXRfc2kgbmVnYXRlZCwgb25lcywgcmlnaHQ7CisJc2xqaXRfdXcgbWFzaywgdWltbTsKKwlzbGppdF9pbnMgaW5zOworCisJaWYgKGxlbiAmIExPR0lDQUxfSU1NX0NIRUNLKSB7CisJCWxlbiAmPSB+TE9HSUNBTF9JTU1fQ0hFQ0s7CisJCWlmIChsZW4gPT0gMzIgJiYgKGltbSA9PSAwIHx8IGltbSA9PSAtMSkpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGxlbiA9PSAxNiAmJiAoKHNsaml0X3NpKWltbSA9PSAwIHx8IChzbGppdF9zaSlpbW0gPT0gLTEpKQorCQkJcmV0dXJuIDA7CisJfQorCisJU0xKSVRfQVNTRVJUKChsZW4gPT0gMzIgJiYgaW1tICE9IDAgJiYgaW1tICE9IC0xKQorCQl8fCAobGVuID09IDE2ICYmIChzbGppdF9zaSlpbW0gIT0gMCAmJiAoc2xqaXRfc2kpaW1tICE9IC0xKSk7CisJdWltbSA9IChzbGppdF91dylpbW07CisJd2hpbGUgKDEpIHsKKwkJaWYgKGxlbiA8PSAwKSB7CisJCQlTTEpJVF9BU1NFUlRfU1RPUCgpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJbWFzayA9ICgoc2xqaXRfdXcpMSA8PCBsZW4pIC0gMTsKKwkJaWYgKCh1aW1tICYgbWFzaykgIT0gKCh1aW1tID4+IGxlbikgJiBtYXNrKSkKKwkJCWJyZWFrOworCQlsZW4gPj49IDE7CisJfQorCisJbGVuIDw8PSAxOworCisJbmVnYXRlZCA9IDA7CisJaWYgKHVpbW0gJiAweDEpIHsKKwkJbmVnYXRlZCA9IDE7CisJCXVpbW0gPSB+dWltbTsKKwl9CisKKwlpZiAobGVuIDwgNjQpCisJCXVpbW0gJj0gKChzbGppdF91dykxIDw8IGxlbikgLSAxOworCisJLyogVW5zaWduZWQgcmlnaHQgc2hpZnQuICovCisJQ09VTlRfVFJBSUxJTkdfWkVSTyh1aW1tLCByaWdodCk7CisKKwkvKiBTaWduZWQgc2hpZnQuIFdlIGFsc28ga25vdyB0aGF0IHRoZSBoaWdoZXN0IGJpdCBpcyBzZXQuICovCisJaW1tID0gKHNsaml0X3N3KX51aW1tOworCVNMSklUX0FTU0VSVChpbW0gPCAwKTsKKworCUNPVU5UX1RSQUlMSU5HX1pFUk8oaW1tLCBvbmVzKTsKKworCWlmICh+aW1tKQorCQlyZXR1cm4gMDsKKworCWlmIChsZW4gPT0gNjQpCisJCWlucyA9IDEgPDwgMjI7CisJZWxzZQorCQlpbnMgPSAoMHgzZiAtICgobGVuIDw8IDEpIC0gMSkpIDw8IDEwOworCisJaWYgKG5lZ2F0ZWQpCisJCXJldHVybiBpbnMgfCAoKGxlbiAtIG9uZXMgLSAxKSA8PCAxMCkgfCAoKGxlbiAtIG9uZXMgLSByaWdodCkgPDwgMTYpOworCisJcmV0dXJuIGlucyB8ICgob25lcyAtIDEpIDw8IDEwKSB8ICgobGVuIC0gcmlnaHQpIDw8IDE2KTsKK30KKworI3VuZGVmIENPVU5UX1RSQUlMSU5HX1pFUk8KKworc3RhdGljIHNsaml0X3NpIGxvYWRfaW1tZWRpYXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgc2ltbSkKK3sKKwlzbGppdF91dyBpbW0gPSAoc2xqaXRfdXcpc2ltbTsKKwlzbGppdF9zaSBpLCB6ZXJvcywgb25lcywgZmlyc3Q7CisJc2xqaXRfaW5zIGJpdG1hc2s7CisKKwlpZiAoaW1tIDw9IDB4ZmZmZikKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgTU9WWiB8IFJEKGRzdCkgfCAoaW1tIDw8IDUpKTsKKworCWlmIChzaW1tID49IC0weDEwMDAwICYmIHNpbW0gPCAwKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNT1ZOIHwgUkQoZHN0KSB8ICgofmltbSAmIDB4ZmZmZikgPDwgNSkpOworCisJaWYgKGltbSA8PSAweGZmZmZmZmZmbCkgeworCQlpZiAoKGltbSAmIDB4ZmZmZjAwMDBsKSA9PSAweGZmZmYwMDAwKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKE1PVk4gXiBXX09QKSB8IFJEKGRzdCkgfCAoKH5pbW0gJiAweGZmZmYpIDw8IDUpKTsKKwkJaWYgKChpbW0gJiAweGZmZmYpID09IDB4ZmZmZikKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChNT1ZOIF4gV19PUCkgfCBSRChkc3QpIHwgKCh+aW1tICYgMHhmZmZmMDAwMGwpID4+ICgxNiAtIDUpKSB8ICgxIDw8IDIxKSk7CisJCWJpdG1hc2sgPSBsb2dpY2FsX2ltbShzaW1tLCAxNik7CisJCWlmIChiaXRtYXNrICE9IDApCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoT1JSSSBeIFdfT1ApIHwgUkQoZHN0KSB8IFJOKFRNUF9aRVJPKSB8IGJpdG1hc2spOworCX0KKwllbHNlIHsKKwkJYml0bWFzayA9IGxvZ2ljYWxfaW1tKHNpbW0sIDMyKTsKKwkJaWYgKGJpdG1hc2sgIT0gMCkKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE9SUkkgfCBSRChkc3QpIHwgUk4oVE1QX1pFUk8pIHwgYml0bWFzayk7CisJfQorCisJaWYgKGltbSA8PSAweGZmZmZmZmZmbCkgeworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTU9WWiB8IFJEKGRzdCkgfCAoKGltbSAmIDB4ZmZmZikgPDwgNSkpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgTU9WSyB8IFJEKGRzdCkgfCAoKGltbSAmIDB4ZmZmZjAwMDBsKSA+PiAoMTYgLSA1KSkgfCAoMSA8PCAyMSkpOworCX0KKworCWlmIChzaW1tID49IC0weDEwMDAwMDAwMGwgJiYgc2ltbSA8IDApIHsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1PVk4gfCBSRChkc3QpIHwgKCh+aW1tICYgMHhmZmZmKSA8PCA1KSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNT1ZLIHwgUkQoZHN0KSB8ICgoaW1tICYgMHhmZmZmMDAwMGwpID4+ICgxNiAtIDUpKSB8ICgxIDw8IDIxKSk7CisJfQorCisJLyogQSBsYXJnZSBhbW91bnQgb2YgbnVtYmVyIGNhbiBiZSBjb25zdHJ1Y3RlZCBmcm9tIE9SUiBhbmQgTU9WeCwKKwlidXQgY29tcHV0aW5nIHRoZW0gaXMgY29zdGx5LiBXZSBkb24ndCAgKi8KKworCXplcm9zID0gMDsKKwlvbmVzID0gMDsKKwlmb3IgKGkgPSA0OyBpID4gMDsgaS0tKSB7CisJCWlmICgoc2ltbSAmIDB4ZmZmZikgPT0gMCkKKwkJCXplcm9zKys7CisJCWlmICgoc2ltbSAmIDB4ZmZmZikgPT0gMHhmZmZmKQorCQkJb25lcysrOworCQlzaW1tID4+PSAxNjsKKwl9CisKKwlzaW1tID0gKHNsaml0X3N3KWltbTsKKwlmaXJzdCA9IDE7CisJaWYgKG9uZXMgPiB6ZXJvcykgeworCQlzaW1tID0gfnNpbW07CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCWlmICghKHNpbW0gJiAweGZmZmYpKSB7CisJCQkJc2ltbSA+Pj0gMTY7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoZmlyc3QpIHsKKwkJCQlmaXJzdCA9IDA7CisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1PVk4gfCBSRChkc3QpIHwgKChzaW1tICYgMHhmZmZmKSA8PCA1KSB8IChpIDw8IDIxKSkpOworCQkJfQorCQkJZWxzZQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNT1ZLIHwgUkQoZHN0KSB8ICgofnNpbW0gJiAweGZmZmYpIDw8IDUpIHwgKGkgPDwgMjEpKSk7CisJCQlzaW1tID4+PSAxNjsKKwkJfQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmICghKHNpbW0gJiAweGZmZmYpKSB7CisJCQlzaW1tID4+PSAxNjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChmaXJzdCkgeworCQkJZmlyc3QgPSAwOworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1PVlogfCBSRChkc3QpIHwgKChzaW1tICYgMHhmZmZmKSA8PCA1KSB8IChpIDw8IDIxKSkpOworCQl9CisJCWVsc2UKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNT1ZLIHwgUkQoZHN0KSB8ICgoc2ltbSAmIDB4ZmZmZikgPDwgNSkgfCAoaSA8PCAyMSkpKTsKKwkJc2ltbSA+Pj0gMTY7CisJfQorCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCisjZGVmaW5lIEFSRzFfSU1NCTB4MDAxMDAwMAorI2RlZmluZSBBUkcyX0lNTQkweDAwMjAwMDAKKyNkZWZpbmUgSU5UX09QCQkweDAwNDAwMDAKKyNkZWZpbmUgU0VUX0ZMQUdTCTB4MDA4MDAwMAorI2RlZmluZSBVTlVTRURfUkVUVVJOCTB4MDEwMDAwMAorI2RlZmluZSBTTE9XX0RFU1QJMHgwMjAwMDAwCisjZGVmaW5lIFNMT1dfU1JDMQkweDA0MDAwMDAKKyNkZWZpbmUgU0xPV19TUkMyCTB4MDgwMDAwMAorCisjZGVmaW5lIENIRUNLX0ZMQUdTKGZsYWdfYml0cykgXAorCWlmIChmbGFncyAmIFNFVF9GTEFHUykgeyBcCisJCWludl9iaXRzIHw9IGZsYWdfYml0czsgXAorCQlpZiAoZmxhZ3MgJiBVTlVTRURfUkVUVVJOKSBcCisJCQlkc3QgPSBUTVBfWkVSTzsgXAorCX0KKworc3RhdGljIHNsaml0X3NpIGVtaXRfb3BfaW1tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGFyZzEsIHNsaml0X3N3IGFyZzIpCit7CisJLyogZHN0IG11c3QgYmUgcmVnaXN0ZXIsIFRNUF9SRUcxCisJICAgYXJnMSBtdXN0IGJlIHJlZ2lzdGVyLCBUTVBfUkVHMSwgaW1tCisJICAgYXJnMiBtdXN0IGJlIHJlZ2lzdGVyLCBUTVBfUkVHMiwgaW1tICovCisJc2xqaXRfaW5zIGludl9iaXRzID0gKGZsYWdzICYgSU5UX09QKSA/ICgxIDw8IDMxKSA6IDA7CisJc2xqaXRfaW5zIGluc3RfYml0czsKKwlzbGppdF9zaSBvcCA9IChmbGFncyAmIDB4ZmZmZik7CisJc2xqaXRfc2kgcmVnOworCXNsaml0X3N3IGltbSwgbmltbTsKKworCWlmIChTTEpJVF9VTkxJS0VMWSgoZmxhZ3MgJiAoQVJHMV9JTU0gfCBBUkcyX0lNTSkpID09IChBUkcxX0lNTSB8IEFSRzJfSU1NKSkpIHsKKwkJLyogQm90aCBhcmUgaW1tZWRpYXRlcy4gKi8KKwkJZmxhZ3MgJj0gfkFSRzFfSU1NOworCQlpZiAoYXJnMSA9PSAwICYmIG9wICE9IFNMSklUX0FERCAmJiBvcCAhPSBTTEpJVF9TVUIpCisJCQlhcmcxID0gVE1QX1pFUk87CisJCWVsc2UgeworCQkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzEsIGFyZzEpKTsKKwkJCWFyZzEgPSBUTVBfUkVHMTsKKwkJfQorCX0KKworCWlmIChmbGFncyAmIChBUkcxX0lNTSB8IEFSRzJfSU1NKSkgeworCQlyZWcgPSAoZmxhZ3MgJiBBUkcyX0lNTSkgPyBhcmcxIDogYXJnMjsKKwkJaW1tID0gKGZsYWdzICYgQVJHMl9JTU0pID8gYXJnMiA6IGFyZzE7CisKKwkJc3dpdGNoIChvcCkgeworCQljYXNlIFNMSklUX01VTDoKKwkJY2FzZSBTTEpJVF9ORUc6CisJCWNhc2UgU0xKSVRfQ0xaOgorCQljYXNlIFNMSklUX0FEREM6CisJCWNhc2UgU0xKSVRfU1VCQzoKKwkJCS8qIE5vIGZvcm0gd2l0aCBpbW1lZGlhdGUgb3BlcmFuZCAoZXhjZXB0IGltbSAwLCB3aGljaAorCQkJaXMgcmVwcmVzZW50ZWQgYnkgYSBaRVJPIHJlZ2lzdGVyKS4gKi8KKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVjoKKwkJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiAoZmxhZ3MgJiBBUkcyX0lNTSkgJiYgYXJnMSA9PSBUTVBfUkVHMSk7CisJCQlyZXR1cm4gbG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIGRzdCwgaW1tKTsKKwkJY2FzZSBTTEpJVF9OT1Q6CisJCQlTTEpJVF9BU1NFUlQoZmxhZ3MgJiBBUkcyX0lNTSk7CisJCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBkc3QsIChmbGFncyAmIElOVF9PUCkgPyAofmltbSAmIDB4ZmZmZmZmZmYpIDogfmltbSkpOworCQkJZ290byBzZXRfZmxhZ3M7CisJCWNhc2UgU0xKSVRfU1VCOgorCQkJaWYgKGZsYWdzICYgQVJHMV9JTU0pCisJCQkJYnJlYWs7CisJCQlpbW0gPSAtaW1tOworCQkJLyogRmFsbCB0aHJvdWdoLiAqLworCQljYXNlIFNMSklUX0FERDoKKwkJCWlmIChpbW0gPT0gMCkgeworCQkJCUNIRUNLX0ZMQUdTKDEgPDwgMjkpOworCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsICgob3AgPT0gU0xKSVRfQUREID8gQURESSA6IFNVQkkpIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKHJlZykpOworCQkJfQorCQkJaWYgKGltbSA+IDAgJiYgaW1tIDw9IDB4ZmZmKSB7CisJCQkJQ0hFQ0tfRkxBR1MoMSA8PCAyOSk7CisJCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKEFEREkgXiBpbnZfYml0cykgfCBSRChkc3QpIHwgUk4ocmVnKSB8IChpbW0gPDwgMTApKTsKKwkJCX0KKwkJCW5pbW0gPSAtaW1tOworCQkJaWYgKG5pbW0gPiAwICYmIG5pbW0gPD0gMHhmZmYpIHsKKwkJCQlDSEVDS19GTEFHUygxIDw8IDI5KTsKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoU1VCSSBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihyZWcpIHwgKG5pbW0gPDwgMTApKTsKKwkJCX0KKwkJCWlmIChpbW0gPiAwICYmIGltbSA8PSAweGZmZmZmZiAmJiAhKGltbSAmIDB4ZmZmKSkgeworCQkJCUNIRUNLX0ZMQUdTKDEgPDwgMjkpOworCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChBRERJIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKHJlZykgfCAoKGltbSA+PiAxMikgPDwgMTApIHwgKDEgPDwgMjIpKTsKKwkJCX0KKwkJCWlmIChuaW1tID4gMCAmJiBuaW1tIDw9IDB4ZmZmZmZmICYmICEobmltbSAmIDB4ZmZmKSkgeworCQkJCUNIRUNLX0ZMQUdTKDEgPDwgMjkpOworCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChTVUJJIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKHJlZykgfCAoKG5pbW0gPj4gMTIpIDw8IDEwKSB8ICgxIDw8IDIyKSk7CisJCQl9CisJCQlpZiAoaW1tID4gMCAmJiBpbW0gPD0gMHhmZmZmZmYgJiYgIShmbGFncyAmIFNFVF9GTEFHUykpIHsKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKEFEREkgXiBpbnZfYml0cykgfCBSRChkc3QpIHwgUk4ocmVnKSB8ICgoaW1tID4+IDEyKSA8PCAxMCkgfCAoMSA8PCAyMikpKTsKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoQURESSBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihkc3QpIHwgKChpbW0gJiAweGZmZikgPDwgMTApKTsKKwkJCX0KKwkJCWlmIChuaW1tID4gMCAmJiBuaW1tIDw9IDB4ZmZmZmZmICYmICEoZmxhZ3MgJiBTRVRfRkxBR1MpKSB7CisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChTVUJJIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKHJlZykgfCAoKG5pbW0gPj4gMTIpIDw8IDEwKSB8ICgxIDw8IDIyKSkpOworCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChTVUJJIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKGRzdCkgfCAoKG5pbW0gJiAweGZmZikgPDwgMTApKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNMSklUX0FORDoKKwkJCWluc3RfYml0cyA9IGxvZ2ljYWxfaW1tKGltbSwgTE9HSUNBTF9JTU1fQ0hFQ0sgfCAoKGZsYWdzICYgSU5UX09QKSA/IDE2IDogMzIpKTsKKwkJCWlmICghaW5zdF9iaXRzKQorCQkJCWJyZWFrOworCQkJQ0hFQ0tfRkxBR1MoMyA8PCAyOSk7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoQU5ESSBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihyZWcpIHwgaW5zdF9iaXRzKTsKKwkJY2FzZSBTTEpJVF9PUjoKKwkJY2FzZSBTTEpJVF9YT1I6CisJCQlpbnN0X2JpdHMgPSBsb2dpY2FsX2ltbShpbW0sIExPR0lDQUxfSU1NX0NIRUNLIHwgKChmbGFncyAmIElOVF9PUCkgPyAxNiA6IDMyKSk7CisJCQlpZiAoIWluc3RfYml0cykKKwkJCQlicmVhazsKKwkJCWlmIChvcCA9PSBTTEpJVF9PUikKKwkJCQlpbnN0X2JpdHMgfD0gT1JSSTsKKwkJCWVsc2UKKwkJCQlpbnN0X2JpdHMgfD0gRU9SSTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoaW5zdF9iaXRzIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKHJlZykpKTsKKwkJCWdvdG8gc2V0X2ZsYWdzOworCQljYXNlIFNMSklUX1NITDoKKwkJCWlmIChmbGFncyAmIEFSRzFfSU1NKQorCQkJCWJyZWFrOworCQkJaWYgKGZsYWdzICYgSU5UX09QKSB7CisJCQkJaW1tICY9IDB4MWY7CisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChVQkZNIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKGFyZzEpIHwgKCgtaW1tICYgMHgxZikgPDwgMTYpIHwgKCgzMSAtIGltbSkgPDwgMTApKSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlpbW0gJj0gMHgzZjsKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKFVCRk0gXiBpbnZfYml0cykgfCBSRChkc3QpIHwgUk4oYXJnMSkgfCAoMSA8PCAyMikgfCAoKC1pbW0gJiAweDNmKSA8PCAxNikgfCAoKDYzIC0gaW1tKSA8PCAxMCkpKTsKKwkJCX0KKwkJCWdvdG8gc2V0X2ZsYWdzOworCQljYXNlIFNMSklUX0xTSFI6CisJCWNhc2UgU0xKSVRfQVNIUjoKKwkJCWlmIChmbGFncyAmIEFSRzFfSU1NKQorCQkJCWJyZWFrOworCQkJaWYgKG9wID09IFNMSklUX0FTSFIpCisJCQkJaW52X2JpdHMgfD0gMSA8PCAzMDsKKwkJCWlmIChmbGFncyAmIElOVF9PUCkgeworCQkJCWltbSAmPSAweDFmOworCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoVUJGTSBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihhcmcxKSB8IChpbW0gPDwgMTYpIHwgKDMxIDw8IDEwKSkpOworCQkJfQorCQkJZWxzZSB7CisJCQkJaW1tICY9IDB4M2Y7CisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChVQkZNIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKGFyZzEpIHwgKDEgPDwgMjIpIHwgKGltbSA8PCAxNikgfCAoNjMgPDwgMTApKSk7CisJCQl9CisJCQlnb3RvIHNldF9mbGFnczsKKwkJZGVmYXVsdDoKKwkJCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChmbGFncyAmIEFSRzJfSU1NKSB7CisJCQlpZiAoYXJnMiA9PSAwKQorCQkJCWFyZzIgPSBUTVBfWkVSTzsKKwkJCWVsc2UgeworCQkJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUcyLCBhcmcyKSk7CisJCQkJYXJnMiA9IFRNUF9SRUcyOworCQkJfQorCQl9CisJCWVsc2UgeworCQkJaWYgKGFyZzEgPT0gMCkKKwkJCQlhcmcxID0gVE1QX1pFUk87CisJCQllbHNlIHsKKwkJCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMSwgYXJnMSkpOworCQkJCWFyZzEgPSBUTVBfUkVHMTsKKwkJCX0KKwkJfQorCX0KKworCS8qIEJvdGggYXJndW1lbnRzIGFyZSByZWdpc3RlcnMuICovCisJc3dpdGNoIChvcCkgeworCWNhc2UgU0xKSVRfTU9WOgorCWNhc2UgU0xKSVRfTU9WX1A6CisJY2FzZSBTTEpJVF9NT1ZVOgorCWNhc2UgU0xKSVRfTU9WVV9QOgorCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIFNFVF9GTEFHUykgJiYgYXJnMSA9PSBUTVBfUkVHMSk7CisJCWlmIChkc3QgPT0gYXJnMikKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUlIgfCBSRChkc3QpIHwgUk4oVE1QX1pFUk8pIHwgUk0oYXJnMikpOworCWNhc2UgU0xKSVRfTU9WX1VCOgorCWNhc2UgU0xKSVRfTU9WVV9VQjoKKwkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBTRVRfRkxBR1MpICYmIGFyZzEgPT0gVE1QX1JFRzEpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoVUJGTSBeICgxIDw8IDMxKSkgfCBSRChkc3QpIHwgUk4oYXJnMikgfCAoNyA8PCAxMCkpOworCWNhc2UgU0xKSVRfTU9WX1NCOgorCWNhc2UgU0xKSVRfTU9WVV9TQjoKKwkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBTRVRfRkxBR1MpICYmIGFyZzEgPT0gVE1QX1JFRzEpOworCQlpZiAoIShmbGFncyAmIElOVF9PUCkpCisJCQlpbnZfYml0cyB8PSAxIDw8IDIyOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoU0JGTSBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihhcmcyKSB8ICg3IDw8IDEwKSk7CisJY2FzZSBTTEpJVF9NT1ZfVUg6CisJY2FzZSBTTEpJVF9NT1ZVX1VIOgorCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIFNFVF9GTEFHUykgJiYgYXJnMSA9PSBUTVBfUkVHMSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChVQkZNIF4gKDEgPDwgMzEpKSB8IFJEKGRzdCkgfCBSTihhcmcyKSB8ICgxNSA8PCAxMCkpOworCWNhc2UgU0xKSVRfTU9WX1NIOgorCWNhc2UgU0xKSVRfTU9WVV9TSDoKKwkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBTRVRfRkxBR1MpICYmIGFyZzEgPT0gVE1QX1JFRzEpOworCQlpZiAoIShmbGFncyAmIElOVF9PUCkpCisJCQlpbnZfYml0cyB8PSAxIDw8IDIyOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoU0JGTSBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihhcmcyKSB8ICgxNSA8PCAxMCkpOworCWNhc2UgU0xKSVRfTU9WX1VJOgorCWNhc2UgU0xKSVRfTU9WVV9VSToKKwkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBTRVRfRkxBR1MpICYmIGFyZzEgPT0gVE1QX1JFRzEpOworCQlpZiAoKGZsYWdzICYgSU5UX09QKSAmJiBkc3QgPT0gYXJnMikKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoT1JSIF4gKDEgPDwgMzEpKSB8IFJEKGRzdCkgfCBSTihUTVBfWkVSTykgfCBSTShhcmcyKSk7CisJY2FzZSBTTEpJVF9NT1ZfU0k6CisJY2FzZSBTTEpJVF9NT1ZVX1NJOgorCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIFNFVF9GTEFHUykgJiYgYXJnMSA9PSBUTVBfUkVHMSk7CisJCWlmICgoZmxhZ3MgJiBJTlRfT1ApICYmIGRzdCA9PSBhcmcyKQorCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNCRk0gfCAoMSA8PCAyMikgfCBSRChkc3QpIHwgUk4oYXJnMikgfCAoMzEgPDwgMTApKTsKKwljYXNlIFNMSklUX05PVDoKKwkJU0xKSVRfQVNTRVJUKGFyZzEgPT0gVE1QX1JFRzEpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKE9STiBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihUTVBfWkVSTykgfCBSTShhcmcyKSkpOworCQlnb3RvIHNldF9mbGFnczsKKwljYXNlIFNMSklUX05FRzoKKwkJU0xKSVRfQVNTRVJUKGFyZzEgPT0gVE1QX1JFRzEpOworCQlpZiAoZmxhZ3MgJiBTRVRfRkxBR1MpCisJCQlpbnZfYml0cyB8PSAxIDw8IDI5OworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoU1VCIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKFRNUF9aRVJPKSB8IFJNKGFyZzIpKTsKKwljYXNlIFNMSklUX0NMWjoKKwkJU0xKSVRfQVNTRVJUKGFyZzEgPT0gVE1QX1JFRzEpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKENMWiBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihhcmcyKSkpOworCQlnb3RvIHNldF9mbGFnczsKKwljYXNlIFNMSklUX0FERDoKKwkJQ0hFQ0tfRkxBR1MoMSA8PCAyOSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChBREQgXiBpbnZfYml0cykgfCBSRChkc3QpIHwgUk4oYXJnMSkgfCBSTShhcmcyKSk7CisJY2FzZSBTTEpJVF9BRERDOgorCQlDSEVDS19GTEFHUygxIDw8IDI5KTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKEFEQyBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihhcmcxKSB8IFJNKGFyZzIpKTsKKwljYXNlIFNMSklUX1NVQjoKKwkJQ0hFQ0tfRkxBR1MoMSA8PCAyOSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChTVUIgXiBpbnZfYml0cykgfCBSRChkc3QpIHwgUk4oYXJnMSkgfCBSTShhcmcyKSk7CisJY2FzZSBTTEpJVF9TVUJDOgorCQlDSEVDS19GTEFHUygxIDw8IDI5KTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKFNCQyBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihhcmcxKSB8IFJNKGFyZzIpKTsKKwljYXNlIFNMSklUX01VTDoKKwkJaWYgKCEoZmxhZ3MgJiBTRVRfRkxBR1MpKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKE1BREQgXiBpbnZfYml0cykgfCBSRChkc3QpIHwgUk4oYXJnMSkgfCBSTShhcmcyKSB8IFJUMihUTVBfWkVSTykpOworCQlpZiAoZmxhZ3MgJiBJTlRfT1ApIHsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTUFEREwgfCBSRChkc3QpIHwgUk4oYXJnMSkgfCBSTShhcmcyKSB8ICgzMSA8PCAxMCkpKTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBREQgfCBSRChUTVBfTFIpIHwgUk4oVE1QX1pFUk8pIHwgUk0oZHN0KSB8ICgyIDw8IDIyKSB8ICgzMSA8PCAxMCkpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNVQlMgfCBSRChUTVBfWkVSTykgfCBSTihUTVBfTFIpIHwgUk0oZHN0KSB8ICgyIDw8IDIyKSB8ICg2MyA8PCAxMCkpOworCQl9CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTVVMSCB8IFJEKFRNUF9MUikgfCBSTihhcmcxKSB8IFJNKGFyZzIpKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNQUREIHwgUkQoZHN0KSB8IFJOKGFyZzEpIHwgUk0oYXJnMikgfCBSVDIoVE1QX1pFUk8pKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNVQlMgfCBSRChUTVBfWkVSTykgfCBSTihUTVBfTFIpIHwgUk0oZHN0KSB8ICgyIDw8IDIyKSB8ICg2MyA8PCAxMCkpOworCWNhc2UgU0xKSVRfQU5EOgorCQlDSEVDS19GTEFHUygzIDw8IDI5KTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKEFORCBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihhcmcxKSB8IFJNKGFyZzIpKTsKKwljYXNlIFNMSklUX09SOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKE9SUiBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihhcmcxKSB8IFJNKGFyZzIpKSk7CisJCWdvdG8gc2V0X2ZsYWdzOworCWNhc2UgU0xKSVRfWE9SOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKEVPUiBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihhcmcxKSB8IFJNKGFyZzIpKSk7CisJCWdvdG8gc2V0X2ZsYWdzOworCWNhc2UgU0xKSVRfU0hMOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKExTTFYgXiBpbnZfYml0cykgfCBSRChkc3QpIHwgUk4oYXJnMSkgfCBSTShhcmcyKSkpOworCQlnb3RvIHNldF9mbGFnczsKKwljYXNlIFNMSklUX0xTSFI6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoTFNSViBeIGludl9iaXRzKSB8IFJEKGRzdCkgfCBSTihhcmcxKSB8IFJNKGFyZzIpKSk7CisJCWdvdG8gc2V0X2ZsYWdzOworCWNhc2UgU0xKSVRfQVNIUjoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChBU1JWIF4gaW52X2JpdHMpIHwgUkQoZHN0KSB8IFJOKGFyZzEpIHwgUk0oYXJnMikpKTsKKwkJZ290byBzZXRfZmxhZ3M7CisJfQorCisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworc2V0X2ZsYWdzOgorCWlmIChmbGFncyAmIFNFVF9GTEFHUykKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKFNVQlMgXiBpbnZfYml0cykgfCBSRChUTVBfWkVSTykgfCBSTihkc3QpIHwgUk0oVE1QX1pFUk8pKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworI2RlZmluZSBTVE9SRQkJMHgwMQorI2RlZmluZSBTSUdORUQJCTB4MDIKKworI2RlZmluZSBVUERBVEUJCTB4MDQKKyNkZWZpbmUgQVJHX1RFU1QJMHgwOAorCisjZGVmaW5lIEJZVEVfU0laRQkweDAwMAorI2RlZmluZSBIQUxGX1NJWkUJMHgxMDAKKyNkZWZpbmUgSU5UX1NJWkUJMHgyMDAKKyNkZWZpbmUgV09SRF9TSVpFCTB4MzAwCisKKyNkZWZpbmUgTUVNX1NJWkVfU0hJRlQoZmxhZ3MpICgoZmxhZ3MpID4+IDgpCisKK3N0YXRpYyBTTEpJVF9DT05TVCBzbGppdF9pbnMgc2xqaXRfbWVtX2ltbVs0XSA9IHsKKy8qIHUgbCAqLyAweDM5NDAwMDAwIC8qIGxkcmIgW3JlZyxpbW1dICovLAorLyogdSBzICovIDB4MzkwMDAwMDAgLyogc3RyYiBbcmVnLGltbV0gKi8sCisvKiBzIGwgKi8gMHgzOTgwMDAwMCAvKiBsZHJzYiBbcmVnLGltbV0gKi8sCisvKiBzIHMgKi8gMHgzOTAwMDAwMCAvKiBzdHJiIFtyZWcsaW1tXSAqLywKK307CisKK3N0YXRpYyBTTEpJVF9DT05TVCBzbGppdF9pbnMgc2xqaXRfbWVtX3NpbW1bNF0gPSB7CisvKiB1IGwgKi8gMHgzODQwMDAwMCAvKiBsZHVyYiBbcmVnLGltbV0gKi8sCisvKiB1IHMgKi8gMHgzODAwMDAwMCAvKiBzdHVyYiBbcmVnLGltbV0gKi8sCisvKiBzIGwgKi8gMHgzODgwMDAwMCAvKiBsZHVyc2IgW3JlZyxpbW1dICovLAorLyogcyBzICovIDB4MzgwMDAwMDAgLyogc3R1cmIgW3JlZyxpbW1dICovLAorfTsKKworc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X2lucyBzbGppdF9tZW1fcHJlX3NpbW1bNF0gPSB7CisvKiB1IGwgKi8gMHgzODQwMGMwMCAvKiBsZHJiIFtyZWcsaW1tXSEgKi8sCisvKiB1IHMgKi8gMHgzODAwMGMwMCAvKiBzdHJiIFtyZWcsaW1tXSEgKi8sCisvKiBzIGwgKi8gMHgzODgwMGMwMCAvKiBsZHJzYiBbcmVnLGltbV0hICovLAorLyogcyBzICovIDB4MzgwMDBjMDAgLyogc3RyYiBbcmVnLGltbV0hICovLAorfTsKKworc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X2lucyBzbGppdF9tZW1fcmVnWzRdID0geworLyogdSBsICovIDB4Mzg2MDY4MDAgLyogbGRyYiBbcmVnLHJlZ10gKi8sCisvKiB1IHMgKi8gMHgzODIwNjgwMCAvKiBzdHJiIFtyZWcscmVnXSAqLywKKy8qIHMgbCAqLyAweDM4YTA2ODAwIC8qIGxkcnNiIFtyZWcscmVnXSAqLywKKy8qIHMgcyAqLyAweDM4MjA2ODAwIC8qIHN0cmIgW3JlZyxyZWddICovLAorfTsKKworLyogSGVscGVyIGZ1bmN0aW9uLiBEc3Qgc2hvdWxkIGJlIHJlZyArIHZhbHVlLCB1c2luZyBhdCBtb3N0IDEgaW5zdHJ1Y3Rpb24sIGZsYWdzIGRvZXMgbm90IHNldC4gKi8KK3N0YXRpYyBzbGppdF9zaSBlbWl0X3NldF9kZWx0YShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3NpIHJlZywgc2xqaXRfc3cgdmFsdWUpCit7CisJaWYgKHZhbHVlID49IDApIHsKKwkJaWYgKHZhbHVlIDw9IDB4ZmZmKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQURESSB8IFJEKGRzdCkgfCBSTihyZWcpIHwgKHZhbHVlIDw8IDEwKSk7CisJCWlmICh2YWx1ZSA8PSAweGZmZmZmZiAmJiAhKHZhbHVlICYgMHhmZmYpKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQURESSB8ICgxIDw8IDIyKSB8IFJEKGRzdCkgfCBSTihyZWcpIHwgKHZhbHVlID4+IDIpKTsKKwl9CisJZWxzZSB7CisJCXZhbHVlID0gLXZhbHVlOworCQlpZiAodmFsdWUgPD0gMHhmZmYpCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTVUJJIHwgUkQoZHN0KSB8IFJOKHJlZykgfCAodmFsdWUgPDwgMTApKTsKKwkJaWYgKHZhbHVlIDw9IDB4ZmZmZmZmICYmICEodmFsdWUgJiAweGZmZikpCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTVUJJIHwgKDEgPDwgMjIpIHwgUkQoZHN0KSB8IFJOKHJlZykgfCAodmFsdWUgPj4gMikpOworCX0KKwlyZXR1cm4gU0xKSVRfRVJSX1VOU1VQUE9SVEVEOworfQorCisvKiBDYW4gcGVyZm9ybSBhbiBvcGVyYXRpb24gdXNpbmcgYXQgbW9zdCAxIGluc3RydWN0aW9uLiAqLworc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmdfZmFzdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCit7CisJc2xqaXRfdWkgc2hpZnQgPSBNRU1fU0laRV9TSElGVChmbGFncyk7CisKKwlTTEpJVF9BU1NFUlQoYXJnICYgU0xKSVRfTUVNKTsKKworCWlmIChTTEpJVF9VTkxJS0VMWShmbGFncyAmIFVQREFURSkpIHsKKwkJaWYgKChhcmcgJiBSRUdfTUFTSykgJiYgIShhcmcgJiBPRkZTX1JFR19NQVNLKSAmJiBhcmd3IDw9IDI1NSAmJiBhcmd3ID49IC0yNTYpIHsKKwkJCWlmIChTTEpJVF9VTkxJS0VMWShmbGFncyAmIEFSR19URVNUKSkKKwkJCQlyZXR1cm4gMTsKKworCQkJYXJnICY9IFJFR19NQVNLOworCQkJYXJndyAmPSAweDFmZjsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBzbGppdF9tZW1fcHJlX3NpbW1bZmxhZ3MgJiAweDNdCisJCQkJfCAoc2hpZnQgPDwgMzApIHwgUlQocmVnKSB8IFJOKGFyZykgfCAoYXJndyA8PCAxMikpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoU0xKSVRfVU5MSUtFTFkoYXJnICYgT0ZGU19SRUdfTUFTSykpIHsKKwkJYXJndyAmPSAweDM7CisJCWlmIChhcmd3ICYmIGFyZ3cgIT0gc2hpZnQpCisJCQlyZXR1cm4gMDsKKworCQlpZiAoU0xKSVRfVU5MSUtFTFkoZmxhZ3MgJiBBUkdfVEVTVCkpCisJCQlyZXR1cm4gMTsKKworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgc2xqaXRfbWVtX3JlZ1tmbGFncyAmIDB4M10gfCAoc2hpZnQgPDwgMzApIHwgUlQocmVnKQorCQkJfCBSTihhcmcgJiBSRUdfTUFTSykgfCBSTShPRkZTX1JFRyhhcmcpKSB8IChhcmd3ID8gKDEgPDwgMTIpIDogMCkpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWFyZyAmPSBSRUdfTUFTSzsKKwlpZiAoYXJndyA+PSAwICYmIChhcmd3ID4+IHNoaWZ0KSA8PSAweGZmZiAmJiAoYXJndyAmICgoMSA8PCBzaGlmdCkgLSAxKSkgPT0gMCkgeworCQlpZiAoU0xKSVRfVU5MSUtFTFkoZmxhZ3MgJiBBUkdfVEVTVCkpCisJCQlyZXR1cm4gMTsKKworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgc2xqaXRfbWVtX2ltbVtmbGFncyAmIDB4M10gfCAoc2hpZnQgPDwgMzApCisJCQl8IFJUKHJlZykgfCBSTihhcmcpIHwgKGFyZ3cgPDwgKDEwIC0gc2hpZnQpKSkpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGFyZ3cgPiAyNTUgfHwgYXJndyA8IC0yNTYpCisJCXJldHVybiAwOworCisJaWYgKFNMSklUX1VOTElLRUxZKGZsYWdzICYgQVJHX1RFU1QpKQorCQlyZXR1cm4gMTsKKworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBzbGppdF9tZW1fc2ltbVtmbGFncyAmIDB4M10gfCAoc2hpZnQgPDwgMzApCisJCXwgUlQocmVnKSB8IFJOKGFyZykgfCAoKGFyZ3cgJiAweDFmZikgPDwgMTIpKSk7CisJcmV0dXJuIC0xOworfQorCisvKiBzZWUgZ2V0cHV0X2FyZyBiZWxvdy4KKyAgIE5vdGU6IGNhbl9jYWNoZSBpcyBjYWxsZWQgb25seSBmb3IgYmluYXJ5IG9wZXJhdG9ycy4gVGhvc2UKKyAgIG9wZXJhdG9ycyBhbHdheXMgdXNlcyB3b3JkIGFyZ3VtZW50cyB3aXRob3V0IHdyaXRlIGJhY2suICovCitzdGF0aWMgc2xqaXRfc2kgY2FuX2NhY2hlKHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfc2kgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKK3sKKwlzbGppdF9zdyBkaWZmOworCWlmICgoYXJnICYgT0ZGU19SRUdfTUFTSykgfHwgIShuZXh0X2FyZyAmIFNMSklUX01FTSkpCisJCXJldHVybiAwOworCisJaWYgKCEoYXJnICYgUkVHX01BU0spKSB7CisJCWRpZmYgPSBhcmd3IC0gbmV4dF9hcmd3OworCQlpZiAoZGlmZiA8PSAweGZmZiAmJiBkaWZmID49IC0weGZmZikKKwkJCXJldHVybiAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJndyA9PSBuZXh0X2FyZ3cpCisJCXJldHVybiAxOworCisJZGlmZiA9IGFyZ3cgLSBuZXh0X2FyZ3c7CisJaWYgKGFyZyA9PSBuZXh0X2FyZyAmJiBkaWZmIDw9IDB4ZmZmICYmIGRpZmYgPj0gLTB4ZmZmKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKiBFbWl0IHRoZSBuZWNlc3NhcnkgaW5zdHJ1Y3Rpb25zLiBTZWUgY2FuX2NhY2hlIGFib3ZlLiAqLworc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywKKwlzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3NpIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCit7CisJc2xqaXRfdWkgc2hpZnQgPSBNRU1fU0laRV9TSElGVChmbGFncyk7CisJc2xqaXRfc2kgdG1wX3IsIG90aGVyX3I7CisJc2xqaXRfc3cgZGlmZjsKKworCVNMSklUX0FTU0VSVChhcmcgJiBTTEpJVF9NRU0pOworCWlmICghKG5leHRfYXJnICYgU0xKSVRfTUVNKSkgeworCQluZXh0X2FyZyA9IDA7CisJCW5leHRfYXJndyA9IDA7CisJfQorCisJdG1wX3IgPSAoZmxhZ3MgJiBTVE9SRSkgPyBUTVBfUkVHMyA6IHJlZzsKKworCWlmIChTTEpJVF9VTkxJS0VMWSgoZmxhZ3MgJiBVUERBVEUpICYmIChhcmcgJiBSRUdfTUFTSykpKSB7CisJCS8qIFVwZGF0ZSBvbmx5IGFwcGxpZXMgaWYgYSBiYXNlIHJlZ2lzdGVyIGV4aXN0cy4gKi8KKwkJb3RoZXJfciA9IE9GRlNfUkVHKGFyZyk7CisJCWlmICghb3RoZXJfcikgeworCQkJb3RoZXJfciA9IGFyZyAmIFJFR19NQVNLOworCQkJaWYgKG90aGVyX3IgIT0gcmVnICYmIGFyZ3cgPj0gMCAmJiBhcmd3IDw9IDB4ZmZmZmZmKSB7CisJCQkJaWYgKChhcmd3ICYgMHhmZmYpICE9IDApCisJCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJIHwgUkQob3RoZXJfcikgfCBSTihvdGhlcl9yKSB8ICgoYXJndyAmIDB4ZmZmKSA8PCAxMCkpKTsKKwkJCQlpZiAoYXJndyA+PiAxMikKKwkJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFEREkgfCAoMSA8PCAyMikgfCBSRChvdGhlcl9yKSB8IFJOKG90aGVyX3IpIHwgKChhcmd3ID4+IDEyKSA8PCAxMCkpKTsKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBzbGppdF9tZW1faW1tW2ZsYWdzICYgMHgzXSB8IChzaGlmdCA8PCAzMCkgfCBSVChyZWcpIHwgUk4ob3RoZXJfcikpOworCQkJfQorCQkJZWxzZSBpZiAob3RoZXJfciAhPSByZWcgJiYgYXJndyA8IDAgJiYgYXJndyA+PSAtMHhmZmZmZmYpIHsKKwkJCQlhcmd3ID0gLWFyZ3c7CisJCQkJaWYgKChhcmd3ICYgMHhmZmYpICE9IDApCisJCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVUJJIHwgUkQob3RoZXJfcikgfCBSTihvdGhlcl9yKSB8ICgoYXJndyAmIDB4ZmZmKSA8PCAxMCkpKTsKKwkJCQlpZiAoYXJndyA+PiAxMikKKwkJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNVQkkgfCAoMSA8PCAyMikgfCBSRChvdGhlcl9yKSB8IFJOKG90aGVyX3IpIHwgKChhcmd3ID4+IDEyKSA8PCAxMCkpKTsKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBzbGppdF9tZW1faW1tW2ZsYWdzICYgMHgzXSB8IChzaGlmdCA8PCAzMCkgfCBSVChyZWcpIHwgUk4ob3RoZXJfcikpOworCQkJfQorCisJCQlpZiAoY29tcGlsZXItPmNhY2hlX2FyZyA9PSBTTEpJVF9NRU0pIHsKKwkJCQlpZiAoYXJndyA9PSBjb21waWxlci0+Y2FjaGVfYXJndykgeworCQkJCQlvdGhlcl9yID0gVE1QX1JFRzM7CisJCQkJCWFyZ3cgPSAwOworCQkJCX0KKwkJCQllbHNlIGlmIChlbWl0X3NldF9kZWx0YShjb21waWxlciwgVE1QX1JFRzMsIFRNUF9SRUczLCBhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cpICE9IFNMSklUX0VSUl9VTlNVUFBPUlRFRCkgeworCQkJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJCQkJb3RoZXJfciA9IFRNUF9SRUczOworCQkJCQlhcmd3ID0gMDsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChhcmd3KSB7CisJCQkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzMsIGFyZ3cpKTsKKwkJCQljb21waWxlci0+Y2FjaGVfYXJnID0gU0xKSVRfTUVNOworCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJCQlvdGhlcl9yID0gVE1QX1JFRzM7CisJCQkJYXJndyA9IDA7CisJCQl9CisJCX0KKworCQkvKiBObyBjYWNoaW5nIGhlcmUuICovCisJCWFyZyAmPSBSRUdfTUFTSzsKKwkJYXJndyAmPSAweDM7CisJCWlmICghYXJndyB8fCBhcmd3ID09IHNoaWZ0KSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgc2xqaXRfbWVtX3JlZ1tmbGFncyAmIDB4M10gfCAoc2hpZnQgPDwgMzApIHwgUlQocmVnKSB8IFJOKGFyZykgfCBSTShvdGhlcl9yKSB8IChhcmd3ID8gKDEgPDwgMTIpIDogMCkpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFERCB8IFJEKGFyZykgfCBSTihhcmcpIHwgUk0ob3RoZXJfcikgfCAoYXJndyA8PCAxMCkpOworCQl9CisJCWlmIChhcmcgIT0gcmVnKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREIHwgUkQoYXJnKSB8IFJOKGFyZykgfCBSTShvdGhlcl9yKSB8IChhcmd3IDw8IDEwKSkpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgc2xqaXRfbWVtX2ltbVtmbGFncyAmIDB4M10gfCAoc2hpZnQgPDwgMzApIHwgUlQocmVnKSB8IFJOKGFyZykpOworCQl9CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBREQgfCBSRChUTVBfTFIpIHwgUk4oYXJnKSB8IFJNKG90aGVyX3IpIHwgKGFyZ3cgPDwgMTApKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBzbGppdF9tZW1faW1tW2ZsYWdzICYgMHgzXSB8IChzaGlmdCA8PCAzMCkgfCBSVChyZWcpIHwgUk4oVE1QX0xSKSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUlIgfCBSRChhcmcpIHwgUk4oVE1QX1pFUk8pIHwgUk0oVE1QX0xSKSk7CisJfQorCisJaWYgKGFyZyAmIE9GRlNfUkVHX01BU0spIHsKKwkJb3RoZXJfciA9IE9GRlNfUkVHKGFyZyk7CisJCWFyZyAmPSBSRUdfTUFTSzsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERCB8IFJEKHRtcF9yKSB8IFJOKGFyZykgfCBSTShvdGhlcl9yKSB8ICgoYXJndyAmIDB4MykgPDwgMTApKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIHNsaml0X21lbV9pbW1bZmxhZ3MgJiAweDNdIHwgKHNoaWZ0IDw8IDMwKSB8IFJUKHJlZykgfCBSTih0bXBfcikpOworCX0KKworCWlmIChjb21waWxlci0+Y2FjaGVfYXJnID09IGFyZykgeworCQlkaWZmID0gYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3OworCQlpZiAoZGlmZiA8PSAyNTUgJiYgZGlmZiA+PSAtMjU2KQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgc2xqaXRfbWVtX3NpbW1bZmxhZ3MgJiAweDNdIHwgKHNoaWZ0IDw8IDMwKQorCQkJCXwgUlQocmVnKSB8IFJOKFRNUF9SRUczKSB8ICgoZGlmZiAmIDB4MWZmKSA8PCAxMikpOworCQlpZiAoZW1pdF9zZXRfZGVsdGEoY29tcGlsZXIsIFRNUF9SRUczLCBUTVBfUkVHMywgZGlmZikgIT0gU0xKSVRfRVJSX1VOU1VQUE9SVEVEKSB7CisJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBzbGppdF9tZW1faW1tW2ZsYWdzICYgMHgzXSB8IChzaGlmdCA8PCAzMCkgfCBSVChyZWcpIHwgUk4oYXJnKSk7CisJCX0KKwl9CisKKwlpZiAoYXJndyA+PSAwICYmIGFyZ3cgPD0gMHhmZmZmZmYgJiYgKGFyZ3cgJiAoKDEgPDwgc2hpZnQpIC0gMSkpID09IDApIHsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFEREkgfCAoMSA8PCAyMikgfCBSRCh0bXBfcikgfCBSTihhcmcgJiBSRUdfTUFTSykgfCAoKGFyZ3cgPj4gMTIpIDw8IDEwKSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBzbGppdF9tZW1faW1tW2ZsYWdzICYgMHgzXSB8IChzaGlmdCA8PCAzMCkKKwkJCXwgUlQocmVnKSB8IFJOKHRtcF9yKSB8ICgoYXJndyAmIDB4ZmZmKSA8PCAoMTAgLSBzaGlmdCkpKTsKKwl9CisKKwlkaWZmID0gYXJndyAtIG5leHRfYXJndzsKKwluZXh0X2FyZyA9IChhcmcgJiBSRUdfTUFTSykgJiYgKGFyZyA9PSBuZXh0X2FyZykgJiYgZGlmZiA8PSAweGZmZiAmJiBkaWZmID49IC0weGZmZiAmJiBkaWZmICE9IDA7CisJYXJnICY9IFJFR19NQVNLOworCisJaWYgKGFyZyAmJiBjb21waWxlci0+Y2FjaGVfYXJnID09IFNMSklUX01FTSkgeworCQlpZiAoY29tcGlsZXItPmNhY2hlX2FyZ3cgPT0gYXJndykKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIHNsaml0X21lbV9yZWdbZmxhZ3MgJiAweDNdIHwgKHNoaWZ0IDw8IDMwKSB8IFJUKHJlZykgfCBSTihhcmcpIHwgUk0oVE1QX1JFRzMpKTsKKwkJaWYgKGVtaXRfc2V0X2RlbHRhKGNvbXBpbGVyLCBUTVBfUkVHMywgVE1QX1JFRzMsIGFyZ3cgLSBjb21waWxlci0+Y2FjaGVfYXJndykgIT0gU0xKSVRfRVJSX1VOU1VQUE9SVEVEKSB7CisJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCQljb21waWxlci0+Y2FjaGVfYXJndyA9IGFyZ3c7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBzbGppdF9tZW1fcmVnW2ZsYWdzICYgMHgzXSB8IChzaGlmdCA8PCAzMCkgfCBSVChyZWcpIHwgUk4oYXJnKSB8IFJNKFRNUF9SRUczKSk7CisJCX0KKwl9CisKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IGFyZ3c7CisJaWYgKG5leHRfYXJnICYmIGVtaXRfc2V0X2RlbHRhKGNvbXBpbGVyLCBUTVBfUkVHMywgYXJnLCBhcmd3KSAhPSBTTEpJVF9FUlJfVU5TVVBQT1JURUQpIHsKKwkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQljb21waWxlci0+Y2FjaGVfYXJnID0gU0xKSVRfTUVNIHwgYXJnOworCQlhcmcgPSAwOworCX0KKwllbHNlIHsKKwkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzMsIGFyZ3cpKTsKKwkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX01FTTsKKworCQlpZiAobmV4dF9hcmcpIHsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBREQgfCBSRChUTVBfUkVHMykgfCBSTihUTVBfUkVHMykgfCBSTShhcmcpKSk7CisJCQljb21waWxlci0+Y2FjaGVfYXJnID0gU0xKSVRfTUVNIHwgYXJnOworCQkJYXJnID0gMDsKKwkJfQorCX0KKworCWlmIChhcmcpCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIHNsaml0X21lbV9yZWdbZmxhZ3MgJiAweDNdIHwgKHNoaWZ0IDw8IDMwKSB8IFJUKHJlZykgfCBSTihhcmcpIHwgUk0oVE1QX1JFRzMpKTsKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBzbGppdF9tZW1faW1tW2ZsYWdzICYgMHgzXSB8IChzaGlmdCA8PCAzMCkgfCBSVChyZWcpIHwgUk4oVE1QX1JFRzMpKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X29wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCit7CisJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnLCBhcmd3KSkKKwkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZywgYXJndywgMCwgMCk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9vcF9tZW0yKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZzEsIHNsaml0X3N3IGFyZzF3LCBzbGppdF9zaSBhcmcyLCBzbGppdF9zdyBhcmcydykKK3sKKwlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcxLCBhcmcxdykpCisJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CisJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZzEsIGFyZzF3LCBhcmcyLCBhcmcydyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIEVudHJ5LCBleGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKKwlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQoreworCXNsaml0X3NpIGksIHRtcCwgb2ZmcywgcHJldiwgc2F2ZWRfcmVnc19zaXplOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2VudGVyKGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSkpOworCXNldF9lbWl0X2VudGVyKGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSk7CisKKwlzYXZlZF9yZWdzX3NpemUgPSBHRVRfU0FWRURfUkVHSVNURVJTX1NJWkUoc2NyYXRjaGVzLCBzYXZlZHMsIDApOworCWxvY2FsX3NpemUgKz0gc2F2ZWRfcmVnc19zaXplICsgU0xKSVRfTE9DQUxTX09GRlNFVDsKKwlsb2NhbF9zaXplID0gKGxvY2FsX3NpemUgKyAxNSkgJiB+MHhmOworCWNvbXBpbGVyLT5sb2NhbF9zaXplID0gbG9jYWxfc2l6ZTsKKworCWlmIChsb2NhbF9zaXplIDw9ICg2MyAqIHNpemVvZihzbGppdF9zdykpKSB7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVFBfUFJFIHwgMjkgfCBSVDIoVE1QX0xSKQorCQkJfCBSTihUTVBfU1ApIHwgKCgtKGxvY2FsX3NpemUgPj4gMykgJiAweDdmKSA8PCAxNSkpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFEREkgfCBSRChTTEpJVF9TUCkgfCBSTihUTVBfU1ApIHwgKDAgPDwgMTApKSk7CisJCW9mZnMgPSAobG9jYWxfc2l6ZSAtIHNhdmVkX3JlZ3Nfc2l6ZSkgPDwgKDE1IC0gMyk7CisJfSBlbHNlIHsKKwkJb2ZmcyA9IDAgPDwgMTU7CisJCWlmIChzYXZlZF9yZWdzX3NpemUgJiAweDgpIHsKKwkJCW9mZnMgPSAxIDw8IDE1OworCQkJc2F2ZWRfcmVnc19zaXplICs9IHNpemVvZihzbGppdF9zdyk7CisJCX0KKwkJbG9jYWxfc2l6ZSAtPSBzYXZlZF9yZWdzX3NpemUgKyBTTEpJVF9MT0NBTFNfT0ZGU0VUOworCQlpZiAoc2F2ZWRfcmVnc19zaXplID4gMCkKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVUJJIHwgUkQoVE1QX1NQKSB8IFJOKFRNUF9TUCkgfCAoc2F2ZWRfcmVnc19zaXplIDw8IDEwKSkpOworCX0KKworCXRtcCA9IHNhdmVkcyA8IFNMSklUX05VTUJFUl9PRl9TQVZFRF9SRUdJU1RFUlMgPyAoU0xKSVRfUzAgKyAxIC0gc2F2ZWRzKSA6IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsKKwlwcmV2ID0gLTE7CisJZm9yIChpID0gU0xKSVRfUzA7IGkgPj0gdG1wOyBpLS0pIHsKKwkJaWYgKHByZXYgPT0gLTEpIHsKKwkJCWlmICghKG9mZnMgJiAoMSA8PCAxNSkpKSB7CisJCQkJcHJldiA9IGk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RSSSB8IFJUKGkpIHwgUk4oVE1QX1NQKSB8IChvZmZzID4+IDUpKSk7CisJCQlvZmZzICs9IDEgPDwgMTU7CisJCQljb250aW51ZTsKKwkJfQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RQIHwgUlQocHJldikgfCBSVDIoaSkgfCBSTihUTVBfU1ApIHwgb2ZmcykpOworCQlvZmZzICs9IDIgPDwgMTU7CisJCXByZXYgPSAtMTsKKwl9CisKKwlmb3IgKGkgPSBzY3JhdGNoZXM7IGkgPj0gU0xKSVRfRklSU1RfU0FWRURfUkVHOyBpLS0pIHsKKwkJaWYgKHByZXYgPT0gLTEpIHsKKwkJCWlmICghKG9mZnMgJiAoMSA8PCAxNSkpKSB7CisJCQkJcHJldiA9IGk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RSSSB8IFJUKGkpIHwgUk4oVE1QX1NQKSB8IChvZmZzID4+IDUpKSk7CisJCQlvZmZzICs9IDEgPDwgMTU7CisJCQljb250aW51ZTsKKwkJfQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RQIHwgUlQocHJldikgfCBSVDIoaSkgfCBSTihUTVBfU1ApIHwgb2ZmcykpOworCQlvZmZzICs9IDIgPDwgMTU7CisJCXByZXYgPSAtMTsKKwl9CisKKwlTTEpJVF9BU1NFUlQocHJldiA9PSAtMSk7CisKKwlpZiAoY29tcGlsZXItPmxvY2FsX3NpemUgPiAoNjMgKiBzaXplb2Yoc2xqaXRfc3cpKSkgeworCQkvKiBUaGUgbG9jYWxfc2l6ZSBpcyBhbHJlYWR5IGFkanVzdGVkIGJ5IHRoZSBzYXZlZCByZWdpc3RlcnMuICovCisJCWlmIChsb2NhbF9zaXplID4gMHhmZmYpIHsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVUJJIHwgUkQoVE1QX1NQKSB8IFJOKFRNUF9TUCkgfCAoKGxvY2FsX3NpemUgPj4gMTIpIDw8IDEwKSB8ICgxIDw8IDIyKSkpOworCQkJbG9jYWxfc2l6ZSAmPSAweGZmZjsKKwkJfQorCQlpZiAobG9jYWxfc2l6ZSkKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVUJJIHwgUkQoVE1QX1NQKSB8IFJOKFRNUF9TUCkgfCAobG9jYWxfc2l6ZSA8PCAxMCkpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUUF9QUkUgfCAyOSB8IFJUMihUTVBfTFIpCisJCQl8IFJOKFRNUF9TUCkgfCAoKC0oMTYgPj4gMykgJiAweDdmKSA8PCAxNSkpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFEREkgfCBSRChTTEpJVF9TUCkgfCBSTihUTVBfU1ApIHwgKDAgPDwgMTApKSk7CisJfQorCisJaWYgKGFyZ3MgPj0gMSkKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SUiB8IFJEKFNMSklUX1MwKSB8IFJOKFRNUF9aRVJPKSB8IFJNKFNMSklUX1IwKSkpOworCWlmIChhcmdzID49IDIpCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUlIgfCBSRChTTEpJVF9TMSkgfCBSTihUTVBfWkVSTykgfCBSTShTTEpJVF9SMSkpKTsKKwlpZiAoYXJncyA+PSAzKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1JSIHwgUkQoU0xKSVRfUzIpIHwgUk4oVE1QX1pFUk8pIHwgUk0oU0xKSVRfUjIpKSk7CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X3NldF9jb250ZXh0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCisJc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X3NldF9jb250ZXh0KGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSkpOworCXNldF9zZXRfY29udGV4dChjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpOworCisJbG9jYWxfc2l6ZSArPSBHRVRfU0FWRURfUkVHSVNURVJTX1NJWkUoc2NyYXRjaGVzLCBzYXZlZHMsIDApICsgU0xKSVRfTE9DQUxTX09GRlNFVDsKKwlsb2NhbF9zaXplID0gKGxvY2FsX3NpemUgKyAxNSkgJiB+MHhmOworCWNvbXBpbGVyLT5sb2NhbF9zaXplID0gbG9jYWxfc2l6ZTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc2xqaXRfc2kgbG9jYWxfc2l6ZTsKKwlzbGppdF9zaSBpLCB0bXAsIG9mZnMsIHByZXYsIHNhdmVkX3JlZ3Nfc2l6ZTsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9yZXR1cm4oY29tcGlsZXIsIG9wLCBzcmMsIHNyY3cpKTsKKworCUZBSUxfSUYoZW1pdF9tb3ZfYmVmb3JlX3JldHVybihjb21waWxlciwgb3AsIHNyYywgc3JjdykpOworCisJbG9jYWxfc2l6ZSA9IGNvbXBpbGVyLT5sb2NhbF9zaXplOworCisJc2F2ZWRfcmVnc19zaXplID0gR0VUX1NBVkVEX1JFR0lTVEVSU19TSVpFKGNvbXBpbGVyLT5zY3JhdGNoZXMsIGNvbXBpbGVyLT5zYXZlZHMsIDApOworCWlmIChsb2NhbF9zaXplIDw9ICg2MyAqIHNpemVvZihzbGppdF9zdykpKQorCQlvZmZzID0gKGxvY2FsX3NpemUgLSBzYXZlZF9yZWdzX3NpemUpIDw8ICgxNSAtIDMpOworCWVsc2UgeworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTERQX1BTVCB8IDI5IHwgUlQyKFRNUF9MUikKKwkJCXwgUk4oVE1QX1NQKSB8ICgoKDE2ID4+IDMpICYgMHg3ZikgPDwgMTUpKSk7CisJCW9mZnMgPSAwIDw8IDE1OworCQlpZiAoc2F2ZWRfcmVnc19zaXplICYgMHg4KSB7CisJCQlvZmZzID0gMSA8PCAxNTsKKwkJCXNhdmVkX3JlZ3Nfc2l6ZSArPSBzaXplb2Yoc2xqaXRfc3cpOworCQl9CisJCWxvY2FsX3NpemUgLT0gc2F2ZWRfcmVnc19zaXplICsgU0xKSVRfTE9DQUxTX09GRlNFVDsKKwkJaWYgKGxvY2FsX3NpemUgPiAweGZmZikgeworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFEREkgfCBSRChUTVBfU1ApIHwgUk4oVE1QX1NQKSB8ICgobG9jYWxfc2l6ZSA+PiAxMikgPDwgMTApIHwgKDEgPDwgMjIpKSk7CisJCQlsb2NhbF9zaXplICY9IDB4ZmZmOworCQl9CisJCWlmIChsb2NhbF9zaXplKQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFEREkgfCBSRChUTVBfU1ApIHwgUk4oVE1QX1NQKSB8IChsb2NhbF9zaXplIDw8IDEwKSkpOworCX0KKworCXRtcCA9IGNvbXBpbGVyLT5zYXZlZHMgPCBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTID8gKFNMSklUX1MwICsgMSAtIGNvbXBpbGVyLT5zYXZlZHMpIDogU0xKSVRfRklSU1RfU0FWRURfUkVHOworCXByZXYgPSAtMTsKKwlmb3IgKGkgPSBTTEpJVF9TMDsgaSA+PSB0bXA7IGktLSkgeworCQlpZiAocHJldiA9PSAtMSkgeworCQkJaWYgKCEob2ZmcyAmICgxIDw8IDE1KSkpIHsKKwkJCQlwcmV2ID0gaTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBMRFJJIHwgUlQoaSkgfCBSTihUTVBfU1ApIHwgKG9mZnMgPj4gNSkpKTsKKwkJCW9mZnMgKz0gMSA8PCAxNTsKKwkJCWNvbnRpbnVlOworCQl9CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBMRFAgfCBSVChwcmV2KSB8IFJUMihpKSB8IFJOKFRNUF9TUCkgfCBvZmZzKSk7CisJCW9mZnMgKz0gMiA8PCAxNTsKKwkJcHJldiA9IC0xOworCX0KKworCWZvciAoaSA9IGNvbXBpbGVyLT5zY3JhdGNoZXM7IGkgPj0gU0xKSVRfRklSU1RfU0FWRURfUkVHOyBpLS0pIHsKKwkJaWYgKHByZXYgPT0gLTEpIHsKKwkJCWlmICghKG9mZnMgJiAoMSA8PCAxNSkpKSB7CisJCQkJcHJldiA9IGk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTERSSSB8IFJUKGkpIHwgUk4oVE1QX1NQKSB8IChvZmZzID4+IDUpKSk7CisJCQlvZmZzICs9IDEgPDwgMTU7CisJCQljb250aW51ZTsKKwkJfQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTERQIHwgUlQocHJldikgfCBSVDIoaSkgfCBSTihUTVBfU1ApIHwgb2ZmcykpOworCQlvZmZzICs9IDIgPDwgMTU7CisJCXByZXYgPSAtMTsKKwl9CisKKwlTTEpJVF9BU1NFUlQocHJldiA9PSAtMSk7CisKKwlpZiAoY29tcGlsZXItPmxvY2FsX3NpemUgPD0gKDYzICogc2l6ZW9mKHNsaml0X3N3KSkpIHsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIExEUF9QU1QgfCAyOSB8IFJUMihUTVBfTFIpCisJCQl8IFJOKFRNUF9TUCkgfCAoKChsb2NhbF9zaXplID4+IDMpICYgMHg3ZikgPDwgMTUpKSk7CisJfSBlbHNlIGlmIChzYXZlZF9yZWdzX3NpemUgPiAwKSB7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJIHwgUkQoVE1QX1NQKSB8IFJOKFRNUF9TUCkgfCAoc2F2ZWRfcmVnc19zaXplIDw8IDEwKSkpOworCX0KKworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBSRVQgfCBSTihUTVBfTFIpKSk7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIE9wZXJhdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AwKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wKQoreworCXNsaml0X2lucyBpbnZfYml0cyA9IChvcCAmIFNMSklUX0lOVF9PUCkgPyAoMSA8PCAzMSkgOiAwOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMChjb21waWxlciwgb3ApKTsKKworCW9wID0gR0VUX09QQ09ERShvcCk7CisJc3dpdGNoIChvcCkgeworCWNhc2UgU0xKSVRfQlJFQUtQT0lOVDoKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQlJLKTsKKwljYXNlIFNMSklUX05PUDoKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgTk9QKTsKKwljYXNlIFNMSklUX0xVTVVMOgorCWNhc2UgU0xKSVRfTFNNVUw6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUlIgfCBSRChUTVBfUkVHMSkgfCBSTihUTVBfWkVSTykgfCBSTShTTEpJVF9SMCkpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1BREQgfCBSRChTTEpJVF9SMCkgfCBSTihTTEpJVF9SMCkgfCBSTShTTEpJVF9SMSkgfCBSVDIoVE1QX1pFUk8pKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MVU1VTCA/IFVNVUxIIDogU01VTEgpIHwgUkQoU0xKSVRfUjEpIHwgUk4oVE1QX1JFRzEpIHwgUk0oU0xKSVRfUjEpKTsKKwljYXNlIFNMSklUX1VESVZNT0Q6CisJY2FzZSBTTEpJVF9TRElWTU9EOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKE9SUiBeIGludl9iaXRzKSB8IFJEKFRNUF9SRUcxKSB8IFJOKFRNUF9aRVJPKSB8IFJNKFNMSklUX1IwKSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKChvcCA9PSBTTEpJVF9VRElWTU9EID8gVURJViA6IFNESVYpIF4gaW52X2JpdHMpIHwgUkQoU0xKSVRfUjApIHwgUk4oU0xKSVRfUjApIHwgUk0oU0xKSVRfUjEpKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoTUFERCBeIGludl9iaXRzKSB8IFJEKFNMSklUX1IxKSB8IFJOKFNMSklUX1IwKSB8IFJNKFNMSklUX1IxKSB8IFJUMihUTVBfWkVSTykpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKFNVQiBeIGludl9iaXRzKSB8IFJEKFNMSklUX1IxKSB8IFJOKFRNUF9SRUcxKSB8IFJNKFNMSklUX1IxKSk7CisJY2FzZSBTTEpJVF9VRElWSToKKwljYXNlIFNMSklUX1NESVZJOgorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoKG9wID09IFNMSklUX1VESVZJID8gVURJViA6IFNESVYpIF4gaW52X2JpdHMpIHwgUkQoU0xKSVRfUjApIHwgUk4oU0xKSVRfUjApIHwgUk0oU0xKSVRfUjEpKTsKKwl9CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc2xqaXRfc2kgZHN0X3IsIGZsYWdzLCBtZW1fZmxhZ3M7CisJc2xqaXRfc2kgb3BfZmxhZ3MgPSBHRVRfQUxMX0ZMQUdTKG9wKTsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDEoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CisKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisKKwlkc3RfciA9IFNMT1dfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfUkVHMTsKKworCW9wID0gR0VUX09QQ09ERShvcCk7CisJaWYgKG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1ApIHsKKwkJc3dpdGNoIChvcCkgeworCQljYXNlIFNMSklUX01PVjoKKwkJY2FzZSBTTEpJVF9NT1ZfUDoKKwkJCWZsYWdzID0gV09SRF9TSVpFOworCQkJYnJlYWs7CisJCWNhc2UgU0xKSVRfTU9WX1VCOgorCQkJZmxhZ3MgPSBCWVRFX1NJWkU7CisJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQorCQkJCXNyY3cgPSAoc2xqaXRfdWIpc3JjdzsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVl9TQjoKKwkJCWZsYWdzID0gQllURV9TSVpFIHwgU0lHTkVEOworCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJCQlzcmN3ID0gKHNsaml0X3NiKXNyY3c7CisJCQlicmVhazsKKwkJY2FzZSBTTEpJVF9NT1ZfVUg6CisJCQlmbGFncyA9IEhBTEZfU0laRTsKKwkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCisJCQkJc3JjdyA9IChzbGppdF91aClzcmN3OworCQkJYnJlYWs7CisJCWNhc2UgU0xKSVRfTU9WX1NIOgorCQkJZmxhZ3MgPSBIQUxGX1NJWkUgfCBTSUdORUQ7CisJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQorCQkJCXNyY3cgPSAoc2xqaXRfc2gpc3JjdzsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVl9VSToKKwkJCWZsYWdzID0gSU5UX1NJWkU7CisJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQorCQkJCXNyY3cgPSAoc2xqaXRfdWkpc3JjdzsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVl9TSToKKwkJCWZsYWdzID0gSU5UX1NJWkUgfCBTSUdORUQ7CisJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQorCQkJCXNyY3cgPSAoc2xqaXRfc2kpc3JjdzsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVlU6CisJCWNhc2UgU0xKSVRfTU9WVV9QOgorCQkJZmxhZ3MgPSBXT1JEX1NJWkUgfCBVUERBVEU7CisJCQlicmVhazsKKwkJY2FzZSBTTEpJVF9NT1ZVX1VCOgorCQkJZmxhZ3MgPSBCWVRFX1NJWkUgfCBVUERBVEU7CisJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQorCQkJCXNyY3cgPSAoc2xqaXRfdWIpc3JjdzsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVlVfU0I6CisJCQlmbGFncyA9IEJZVEVfU0laRSB8IFNJR05FRCB8IFVQREFURTsKKwkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCisJCQkJc3JjdyA9IChzbGppdF9zYilzcmN3OworCQkJYnJlYWs7CisJCWNhc2UgU0xKSVRfTU9WVV9VSDoKKwkJCWZsYWdzID0gSEFMRl9TSVpFIHwgVVBEQVRFOworCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJCQlzcmN3ID0gKHNsaml0X3VoKXNyY3c7CisJCQlicmVhazsKKwkJY2FzZSBTTEpJVF9NT1ZVX1NIOgorCQkJZmxhZ3MgPSBIQUxGX1NJWkUgfCBTSUdORUQgfCBVUERBVEU7CisJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQorCQkJCXNyY3cgPSAoc2xqaXRfc2gpc3JjdzsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVlVfVUk6CisJCQlmbGFncyA9IElOVF9TSVpFIHwgVVBEQVRFOworCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJCQlzcmN3ID0gKHNsaml0X3VpKXNyY3c7CisJCQlicmVhazsKKwkJY2FzZSBTTEpJVF9NT1ZVX1NJOgorCQkJZmxhZ3MgPSBJTlRfU0laRSB8IFNJR05FRCB8IFVQREFURTsKKwkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCisJCQkJc3JjdyA9IChzbGppdF9zaSlzcmN3OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlTTEpJVF9BU1NFUlRfU1RPUCgpOworCQkJZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc3JjICYgU0xKSVRfSU1NKQorCQkJRkFJTF9JRihlbWl0X29wX2ltbShjb21waWxlciwgU0xKSVRfTU9WIHwgQVJHMl9JTU0sIGRzdF9yLCBUTVBfUkVHMSwgc3JjdykpOworCQllbHNlIGlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzLCBkc3Rfciwgc3JjLCBzcmN3KSkKKwkJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCQllbHNlCisJCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncywgZHN0X3IsIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CisJCX0gZWxzZSB7CisJCQlpZiAoZHN0X3IgIT0gVE1QX1JFRzEpCisJCQkJcmV0dXJuIGVtaXRfb3BfaW1tKGNvbXBpbGVyLCBvcCB8ICgob3BfZmxhZ3MgJiBTTEpJVF9JTlRfT1ApID8gSU5UX09QIDogMCksIGRzdF9yLCBUTVBfUkVHMSwgc3JjKTsKKwkJCWRzdF9yID0gc3JjOworCQl9CisKKwkJaWYgKGRzdCAmIFNMSklUX01FTSkgeworCQkJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MgfCBTVE9SRSwgZHN0X3IsIGRzdCwgZHN0dykpCisJCQkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MgfCBTVE9SRSwgZHN0X3IsIGRzdCwgZHN0dywgMCwgMCk7CisJCX0KKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCisJZmxhZ3MgPSBHRVRfRkxBR1Mob3BfZmxhZ3MpID8gU0VUX0ZMQUdTIDogMDsKKwltZW1fZmxhZ3MgPSBXT1JEX1NJWkU7CisJaWYgKG9wX2ZsYWdzICYgU0xKSVRfSU5UX09QKSB7CisJCWZsYWdzIHw9IElOVF9PUDsKKwkJbWVtX2ZsYWdzID0gSU5UX1NJWkU7CisJfQorCisJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQpCisJCWZsYWdzIHw9IFVOVVNFRF9SRVRVUk47CisKKwlpZiAoc3JjICYgU0xKSVRfTUVNKSB7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIG1lbV9mbGFncywgVE1QX1JFRzIsIHNyYywgc3JjdykpCisJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCWVsc2UKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgbWVtX2ZsYWdzLCBUTVBfUkVHMiwgc3JjLCBzcmN3LCBkc3QsIGRzdHcpKTsKKwkJc3JjID0gVE1QX1JFRzI7CisJfQorCisJaWYgKHNyYyAmIFNMSklUX0lNTSkgeworCQlmbGFncyB8PSBBUkcyX0lNTTsKKwkJaWYgKG9wX2ZsYWdzICYgU0xKSVRfSU5UX09QKQorCQkJc3JjdyA9IChzbGppdF9zaSlzcmN3OworCX0gZWxzZQorCQlzcmN3ID0gc3JjOworCisJZW1pdF9vcF9pbW0oY29tcGlsZXIsIGZsYWdzIHwgb3AsIGRzdF9yLCBUTVBfUkVHMSwgc3Jjdyk7CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKSB7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIG1lbV9mbGFncyB8IFNUT1JFLCBkc3RfciwgZHN0LCBkc3R3KSkKKwkJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CisJCWVsc2UKKwkJCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBtZW1fZmxhZ3MgfCBTVE9SRSwgZHN0X3IsIGRzdCwgZHN0dywgMCwgMCk7CisJfQorCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQoreworCXNsaml0X3NpIGRzdF9yLCBmbGFncywgbWVtX2ZsYWdzOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMihjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjMSwgc3JjMXcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjMiwgc3JjMncpOworCisJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCisJZHN0X3IgPSBTTE9XX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX1JFRzE7CisJZmxhZ3MgPSBHRVRfRkxBR1Mob3ApID8gU0VUX0ZMQUdTIDogMDsKKwltZW1fZmxhZ3MgPSBXT1JEX1NJWkU7CisJaWYgKG9wICYgU0xKSVRfSU5UX09QKSB7CisJCWZsYWdzIHw9IElOVF9PUDsKKwkJbWVtX2ZsYWdzID0gSU5UX1NJWkU7CisJfQorCisJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQpCisJCWZsYWdzIHw9IFVOVVNFRF9SRVRVUk47CisKKwlpZiAoKGRzdCAmIFNMSklUX01FTSkgJiYgIWdldHB1dF9hcmdfZmFzdChjb21waWxlciwgbWVtX2ZsYWdzIHwgU1RPUkUgfCBBUkdfVEVTVCwgVE1QX1JFRzEsIGRzdCwgZHN0dykpCisJCWZsYWdzIHw9IFNMT1dfREVTVDsKKworCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIG1lbV9mbGFncywgVE1QX1JFRzEsIHNyYzEsIHNyYzF3KSkKKwkJCUZBSUxfSUYoY29tcGlsZXItPmVycm9yKTsKKwkJZWxzZQorCQkJZmxhZ3MgfD0gU0xPV19TUkMxOworCX0KKwlpZiAoc3JjMiAmIFNMSklUX01FTSkgeworCQlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBtZW1fZmxhZ3MsIFRNUF9SRUcyLCBzcmMyLCBzcmMydykpCisJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCWVsc2UKKwkJCWZsYWdzIHw9IFNMT1dfU1JDMjsKKwl9CisKKwlpZiAoKGZsYWdzICYgKFNMT1dfU1JDMSB8IFNMT1dfU1JDMikpID09IChTTE9XX1NSQzEgfCBTTE9XX1NSQzIpKSB7CisJCWlmICghY2FuX2NhY2hlKHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykgJiYgY2FuX2NhY2hlKHNyYzEsIHNyYzF3LCBkc3QsIGRzdHcpKSB7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIG1lbV9mbGFncywgVE1QX1JFRzIsIHNyYzIsIHNyYzJ3LCBzcmMxLCBzcmMxdykpOworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBtZW1fZmxhZ3MsIFRNUF9SRUcxLCBzcmMxLCBzcmMxdywgZHN0LCBkc3R3KSk7CisJCX0KKwkJZWxzZSB7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIG1lbV9mbGFncywgVE1QX1JFRzEsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBtZW1fZmxhZ3MsIFRNUF9SRUcyLCBzcmMyLCBzcmMydywgZHN0LCBkc3R3KSk7CisJCX0KKwl9CisJZWxzZSBpZiAoZmxhZ3MgJiBTTE9XX1NSQzEpCisJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgbWVtX2ZsYWdzLCBUTVBfUkVHMSwgc3JjMSwgc3JjMXcsIGRzdCwgZHN0dykpOworCWVsc2UgaWYgKGZsYWdzICYgU0xPV19TUkMyKQorCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIG1lbV9mbGFncywgVE1QX1JFRzIsIHNyYzIsIHNyYzJ3LCBkc3QsIGRzdHcpKTsKKworCWlmIChzcmMxICYgU0xKSVRfTUVNKQorCQlzcmMxID0gVE1QX1JFRzE7CisJaWYgKHNyYzIgJiBTTEpJVF9NRU0pCisJCXNyYzIgPSBUTVBfUkVHMjsKKworCWlmIChzcmMxICYgU0xKSVRfSU1NKQorCQlmbGFncyB8PSBBUkcxX0lNTTsKKwllbHNlCisJCXNyYzF3ID0gc3JjMTsKKwlpZiAoc3JjMiAmIFNMSklUX0lNTSkKKwkJZmxhZ3MgfD0gQVJHMl9JTU07CisJZWxzZQorCQlzcmMydyA9IHNyYzI7CisKKwllbWl0X29wX2ltbShjb21waWxlciwgZmxhZ3MgfCBHRVRfT1BDT0RFKG9wKSwgZHN0X3IsIHNyYzF3LCBzcmMydyk7CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKSB7CisJCWlmICghKGZsYWdzICYgU0xPV19ERVNUKSkgeworCQkJZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBtZW1fZmxhZ3MgfCBTVE9SRSwgZHN0X3IsIGRzdCwgZHN0dyk7CisJCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOworCQl9CisJCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBtZW1fZmxhZ3MgfCBTVE9SRSwgVE1QX1JFRzEsIGRzdCwgZHN0dywgMCwgMCk7CisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQoreworCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CisJcmV0dXJuIHJlZ19tYXBbcmVnXTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCit7CisJQ0hFQ0tfUkVHX0lOREVYKGNoZWNrX3Nsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChyZWcpKTsKKwlyZXR1cm4gcmVnOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9jdXN0b20oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwl2b2lkICppbnN0cnVjdGlvbiwgc2xqaXRfc2kgc2l6ZSkKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgc2l6ZSkpOworCisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKihzbGppdF9pbnMqKWluc3RydWN0aW9uKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgRmxvYXRpbmcgcG9pbnQgb3BlcmF0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQoreworI2lmZGVmIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEUKKwlyZXR1cm4gU0xKSVRfSVNfRlBVX0FWQUlMQUJMRTsKKyNlbHNlCisJLyogQXZhaWxhYmxlIGJ5IGRlZmF1bHQuICovCisJcmV0dXJuIDE7CisjZW5kaWYKK30KKworc3RhdGljIHNsaml0X3NpIGVtaXRfZm9wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCit7CisJc2xqaXRfdWkgc2hpZnQgPSBNRU1fU0laRV9TSElGVChmbGFncyk7CisJc2xqaXRfaW5zIGluc19iaXRzID0gKHNoaWZ0IDw8IDMwKTsKKwlzbGppdF9zaSBvdGhlcl9yOworCXNsaml0X3N3IGRpZmY7CisKKwlTTEpJVF9BU1NFUlQoYXJnICYgU0xKSVRfTUVNKTsKKworCWlmICghKGZsYWdzICYgU1RPUkUpKQorCQlpbnNfYml0cyB8PSAxIDw8IDIyOworCisJaWYgKGFyZyAmIE9GRlNfUkVHX01BU0spIHsKKwkJYXJndyAmPSAzOworCQlpZiAoIWFyZ3cgfHwgYXJndyA9PSBzaGlmdCkKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNUUl9GUiB8IGluc19iaXRzIHwgVlQocmVnKQorCQkJCXwgUk4oYXJnICYgUkVHX01BU0spIHwgUk0oT0ZGU19SRUcoYXJnKSkgfCAoYXJndyA/ICgxIDw8IDEyKSA6IDApKTsKKwkJb3RoZXJfciA9IE9GRlNfUkVHKGFyZyk7CisJCWFyZyAmPSBSRUdfTUFTSzsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERCB8IFJEKFRNUF9SRUcxKSB8IFJOKGFyZykgfCBSTShvdGhlcl9yKSB8IChhcmd3IDw8IDEwKSkpOworCQlhcmcgPSBUTVBfUkVHMTsKKwkJYXJndyA9IDA7CisJfQorCisJYXJnICY9IFJFR19NQVNLOworCWlmIChhcmcgJiYgYXJndyA+PSAwICYmICgoYXJndyA+PiBzaGlmdCkgPD0gMHhmZmYpICYmIChhcmd3ICYgKCgxIDw8IHNoaWZ0KSAtIDEpKSA9PSAwKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTVFJfRkkgfCBpbnNfYml0cyB8IFZUKHJlZykgfCBSTihhcmcpIHwgKGFyZ3cgPDwgKDEwIC0gc2hpZnQpKSk7CisKKwlpZiAoYXJnICYmIGFyZ3cgPD0gMjU1ICYmIGFyZ3cgPj0gLTI1NikKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1RVUl9GSSB8IGluc19iaXRzIHwgVlQocmVnKSB8IFJOKGFyZykgfCAoKGFyZ3cgJiAweDFmZikgPDwgMTIpKTsKKworCS8qIFNsb3cgY2FzZXMgKi8KKwlpZiAoY29tcGlsZXItPmNhY2hlX2FyZyA9PSBTTEpJVF9NRU0gJiYgYXJndyAhPSBjb21waWxlci0+Y2FjaGVfYXJndykgeworCQlkaWZmID0gYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3OworCQlpZiAoIWFyZyAmJiBkaWZmIDw9IDI1NSAmJiBkaWZmID49IC0yNTYpCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTVFVSX0ZJIHwgaW5zX2JpdHMgfCBWVChyZWcpIHwgUk4oVE1QX1JFRzMpIHwgKChkaWZmICYgMHgxZmYpIDw8IDEyKSk7CisJCWlmIChlbWl0X3NldF9kZWx0YShjb21waWxlciwgVE1QX1JFRzMsIFRNUF9SRUczLCBhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cpICE9IFNMSklUX0VSUl9VTlNVUFBPUlRFRCkgeworCQkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCQl9CisJfQorCisJaWYgKGNvbXBpbGVyLT5jYWNoZV9hcmcgIT0gU0xKSVRfTUVNIHx8IGFyZ3cgIT0gY29tcGlsZXItPmNhY2hlX2FyZ3cpIHsKKwkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX01FTTsKKwkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMywgYXJndykpOworCX0KKworCWlmIChhcmcgJiBSRUdfTUFTSykKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1RSX0ZSIHwgaW5zX2JpdHMgfCBWVChyZWcpIHwgUk4oYXJnKSB8IFJNKFRNUF9SRUczKSk7CisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1RSX0ZJIHwgaW5zX2JpdHMgfCBWVChyZWcpIHwgUk4oVE1QX1JFRzMpKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY29udndfZnJvbWQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBkc3RfciA9IFNMT1dfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfUkVHMTsKKwlzbGppdF9pbnMgaW52X2JpdHMgPSAob3AgJiBTTEpJVF9TSU5HTEVfT1ApID8gKDEgPDwgMjIpIDogMDsKKworCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WSV9GUk9NRCkKKwkJaW52X2JpdHMgfD0gKDEgPDwgMzEpOworCisJaWYgKHNyYyAmIFNMSklUX01FTSkgeworCQllbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyBJTlRfU0laRSA6IFdPUkRfU0laRSwgVE1QX0ZSRUcxLCBzcmMsIHNyY3cpOworCQlzcmMgPSBUTVBfRlJFRzE7CisJfQorCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChGQ1ZUWlMgXiBpbnZfYml0cykgfCBSRChkc3RfcikgfCBWTihzcmMpKSk7CisKKwlpZiAoZHN0X3IgPT0gVE1QX1JFRzEgJiYgZHN0ICE9IFNMSklUX1VOVVNFRCkKKwkJcmV0dXJuIGVtaXRfb3BfbWVtKGNvbXBpbGVyLCAoKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZJX0ZST01EKSA/IElOVF9TSVpFIDogV09SRF9TSVpFKSB8IFNUT1JFLCBUTVBfUkVHMSwgZHN0LCBkc3R3KTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY29udmRfZnJvbXcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzE7CisJc2xqaXRfaW5zIGludl9iaXRzID0gKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/ICgxIDw8IDIyKSA6IDA7CisKKwlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVkRfRlJPTUkpCisJCWludl9iaXRzIHw9ICgxIDw8IDMxKTsKKworCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJZW1pdF9vcF9tZW0oY29tcGlsZXIsICgoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVkRfRlJPTUkpID8gSU5UX1NJWkUgOiBXT1JEX1NJWkUpLCBUTVBfUkVHMSwgc3JjLCBzcmN3KTsKKwkJc3JjID0gVE1QX1JFRzE7CisJfSBlbHNlIGlmIChzcmMgJiBTTEpJVF9JTU0pIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WRF9GUk9NSSkKKwkJCXNyY3cgPSAoc2xqaXRfc2kpc3JjdzsKKyNlbmRpZgorCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMSwgc3JjdykpOworCQlzcmMgPSBUTVBfUkVHMTsKKwl9CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKFNDVlRGIF4gaW52X2JpdHMpIHwgVkQoZHN0X3IpIHwgUk4oc3JjKSkpOworCisJaWYgKGRzdCAmIFNMSklUX01FTSkKKwkJcmV0dXJuIGVtaXRfZm9wX21lbShjb21waWxlciwgKChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyBJTlRfU0laRSA6IFdPUkRfU0laRSkgfCBTVE9SRSwgVE1QX0ZSRUcxLCBkc3QsIGRzdHcpOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJc2xqaXRfc2kgbWVtX2ZsYWdzID0gKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/IElOVF9TSVpFIDogV09SRF9TSVpFOworCXNsaml0X2lucyBpbnZfYml0cyA9IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyAoMSA8PCAyMikgOiAwOworCisJaWYgKHNyYzEgJiBTTEpJVF9NRU0pIHsKKwkJZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCBtZW1fZmxhZ3MsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcpOworCQlzcmMxID0gVE1QX0ZSRUcxOworCX0KKworCWlmIChzcmMyICYgU0xKSVRfTUVNKSB7CisJCWVtaXRfZm9wX21lbShjb21waWxlciwgbWVtX2ZsYWdzLCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3KTsKKwkJc3JjMiA9IFRNUF9GUkVHMjsKKwl9CisKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoRkNNUCBeIGludl9iaXRzKSB8IFZOKHNyYzEpIHwgVk0oc3JjMikpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc2xqaXRfc2kgZHN0X3IsIG1lbV9mbGFncyA9IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyBJTlRfU0laRSA6IFdPUkRfU0laRTsKKwlzbGppdF9pbnMgaW52X2JpdHM7CisKKwlDSEVDS19FUlJPUigpOworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKworCVNMSklUX0NPTVBJTEVfQVNTRVJUKChJTlRfU0laRSBeIDB4MTAwKSA9PSBXT1JEX1NJWkUsIG11c3RfYmVfb25lX2JpdF9kaWZmZXJlbmNlKTsKKwlTRUxFQ1RfRk9QMV9PUEVSQVRJT05fV0lUSF9DSEVDS1MoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3Jjdyk7CisKKwlpbnZfYml0cyA9IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyAoMSA8PCAyMikgOiAwOworCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9GUkVHMTsKKworCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVkRfRlJPTVMpID8gKG1lbV9mbGFncyBeIDB4MTAwKSA6IG1lbV9mbGFncywgZHN0X3IsIHNyYywgc3Jjdyk7CisJCXNyYyA9IGRzdF9yOworCX0KKworCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKKwljYXNlIFNMSklUX0RNT1Y6CisJCWlmIChzcmMgIT0gZHN0X3IpIHsKKwkJCWlmIChkc3RfciAhPSBUTVBfRlJFRzEpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChGTU9WIF4gaW52X2JpdHMpIHwgVkQoZHN0X3IpIHwgVk4oc3JjKSkpOworCQkJZWxzZQorCQkJCWRzdF9yID0gc3JjOworCQl9CisJCWJyZWFrOworCWNhc2UgU0xKSVRfRE5FRzoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChGTkVHIF4gaW52X2JpdHMpIHwgVkQoZHN0X3IpIHwgVk4oc3JjKSkpOworCQlicmVhazsKKwljYXNlIFNMSklUX0RBQlM6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoRkFCUyBeIGludl9iaXRzKSB8IFZEKGRzdF9yKSB8IFZOKHNyYykpKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9DT05WRF9GUk9NUzoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEZDVlQgfCAoKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/ICgxIDw8IDIyKSA6ICgxIDw8IDE1KSkgfCBWRChkc3RfcikgfCBWTihzcmMpKSk7CisJCWJyZWFrOworCX0KKworCWlmIChkc3QgJiBTTEpJVF9NRU0pCisJCXJldHVybiBlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIG1lbV9mbGFncyB8IFNUT1JFLCBkc3RfciwgZHN0LCBkc3R3KTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJc2xqaXRfc2kgZHN0X3IsIG1lbV9mbGFncyA9IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyBJTlRfU0laRSA6IFdPUkRfU0laRTsKKwlzbGppdF9pbnMgaW52X2JpdHMgPSAob3AgJiBTTEpJVF9TSU5HTEVfT1ApID8gKDEgPDwgMjIpIDogMDsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMxLCBzcmMxdyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMyLCBzcmMydyk7CisKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisKKwlkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzE7CisJaWYgKHNyYzEgJiBTTEpJVF9NRU0pIHsKKwkJZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCBtZW1fZmxhZ3MsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcpOworCQlzcmMxID0gVE1QX0ZSRUcxOworCX0KKwlpZiAoc3JjMiAmIFNMSklUX01FTSkgeworCQllbWl0X2ZvcF9tZW0oY29tcGlsZXIsIG1lbV9mbGFncywgVE1QX0ZSRUcyLCBzcmMyLCBzcmMydyk7CisJCXNyYzIgPSBUTVBfRlJFRzI7CisJfQorCisJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgeworCWNhc2UgU0xKSVRfREFERDoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChGQUREIF4gaW52X2JpdHMpIHwgVkQoZHN0X3IpIHwgVk4oc3JjMSkgfCBWTShzcmMyKSkpOworCQlicmVhazsKKwljYXNlIFNMSklUX0RTVUI6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoRlNVQiBeIGludl9iaXRzKSB8IFZEKGRzdF9yKSB8IFZOKHNyYzEpIHwgVk0oc3JjMikpKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9ETVVMOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKEZNVUwgXiBpbnZfYml0cykgfCBWRChkc3RfcikgfCBWTihzcmMxKSB8IFZNKHNyYzIpKSk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfRERJVjoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChGRElWIF4gaW52X2JpdHMpIHwgVkQoZHN0X3IpIHwgVk4oc3JjMSkgfCBWTShzcmMyKSkpOworCQlicmVhazsKKwl9CisKKwlpZiAoIShkc3QgJiBTTEpJVF9NRU0pKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwlyZXR1cm4gZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCBtZW1fZmxhZ3MgfCBTVE9SRSwgVE1QX0ZSRUcxLCBkc3QsIGRzdHcpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBPdGhlciBpbnN0cnVjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3KQoreworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X2VudGVyKGNvbXBpbGVyLCBkc3QsIGRzdHcpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisKKwkvKiBGb3IgVU5VU0VEIGRzdC4gVW5jb21tb24sIGJ1dCBwb3NzaWJsZS4gKi8KKwlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwlpZiAoRkFTVF9JU19SRUcoZHN0KSkKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1JSIHwgUkQoZHN0KSB8IFJOKFRNUF9aRVJPKSB8IFJNKFRNUF9MUikpOworCisJLyogTWVtb3J5LiAqLworCXJldHVybiBlbWl0X29wX21lbShjb21waWxlciwgV09SRF9TSVpFIHwgU1RPUkUsIFRNUF9MUiwgZHN0LCBkc3R3KTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgc3JjLCBzcmN3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOworCisJaWYgKEZBU1RfSVNfUkVHKHNyYykpCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUlIgfCBSRChUTVBfTFIpIHwgUk4oVE1QX1pFUk8pIHwgUk0oc3JjKSkpOworCWVsc2UgaWYgKHNyYyAmIFNMSklUX01FTSkKKwkJRkFJTF9JRihlbWl0X29wX21lbShjb21waWxlciwgV09SRF9TSVpFLCBUTVBfTFIsIHNyYywgc3JjdykpOworCWVsc2UgaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX0xSLCBzcmN3KSk7CisKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBSRVQgfCBSTihUTVBfTFIpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgQ29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc2xqaXRfdXcgZ2V0X2NjKHNsaml0X3NpIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBTTEpJVF9FUVVBTDoKKwljYXNlIFNMSklUX01VTF9OT1RfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9EX0VRVUFMOgorCQlyZXR1cm4gMHgxOworCisJY2FzZSBTTEpJVF9OT1RfRVFVQUw6CisJY2FzZSBTTEpJVF9NVUxfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9EX05PVF9FUVVBTDoKKwkJcmV0dXJuIDB4MDsKKworCWNhc2UgU0xKSVRfTEVTUzoKKwljYXNlIFNMSklUX0RfTEVTUzoKKwkJcmV0dXJuIDB4MjsKKworCWNhc2UgU0xKSVRfR1JFQVRFUl9FUVVBTDoKKwljYXNlIFNMSklUX0RfR1JFQVRFUl9FUVVBTDoKKwkJcmV0dXJuIDB4MzsKKworCWNhc2UgU0xKSVRfR1JFQVRFUjoKKwljYXNlIFNMSklUX0RfR1JFQVRFUjoKKwkJcmV0dXJuIDB4OTsKKworCWNhc2UgU0xKSVRfTEVTU19FUVVBTDoKKwljYXNlIFNMSklUX0RfTEVTU19FUVVBTDoKKwkJcmV0dXJuIDB4ODsKKworCWNhc2UgU0xKSVRfU0lHX0xFU1M6CisJCXJldHVybiAweGE7CisKKwljYXNlIFNMSklUX1NJR19HUkVBVEVSX0VRVUFMOgorCQlyZXR1cm4gMHhiOworCisJY2FzZSBTTEpJVF9TSUdfR1JFQVRFUjoKKwkJcmV0dXJuIDB4ZDsKKworCWNhc2UgU0xKSVRfU0lHX0xFU1NfRVFVQUw6CisJCXJldHVybiAweGM7CisKKwljYXNlIFNMSklUX09WRVJGTE9XOgorCWNhc2UgU0xKSVRfRF9VTk9SREVSRUQ6CisJCXJldHVybiAweDc7CisKKwljYXNlIFNMSklUX05PVF9PVkVSRkxPVzoKKwljYXNlIFNMSklUX0RfT1JERVJFRDoKKwkJcmV0dXJuIDB4NjsKKworCWRlZmF1bHQ6CisJCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJCXJldHVybiAweGU7CisJfQorfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2xhYmVsKiBzbGppdF9lbWl0X2xhYmVsKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisJc3RydWN0IHNsaml0X2xhYmVsICpsYWJlbDsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2xhYmVsKGNvbXBpbGVyKSk7CisKKwlpZiAoY29tcGlsZXItPmxhc3RfbGFiZWwgJiYgY29tcGlsZXItPmxhc3RfbGFiZWwtPnNpemUgPT0gY29tcGlsZXItPnNpemUpCisJCXJldHVybiBjb21waWxlci0+bGFzdF9sYWJlbDsKKworCWxhYmVsID0gKHN0cnVjdCBzbGppdF9sYWJlbCopZW5zdXJlX2FidWYoY29tcGlsZXIsIHNpemVvZihzdHJ1Y3Qgc2xqaXRfbGFiZWwpKTsKKwlQVFJfRkFJTF9JRighbGFiZWwpOworCXNldF9sYWJlbChsYWJlbCwgY29tcGlsZXIpOworCXJldHVybiBsYWJlbDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSkKK3sKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2p1bXAoY29tcGlsZXIsIHR5cGUpKTsKKworCWp1bXAgPSAoc3RydWN0IHNsaml0X2p1bXAqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2p1bXApKTsKKwlQVFJfRkFJTF9JRighanVtcCk7CisJc2V0X2p1bXAoanVtcCwgY29tcGlsZXIsIHR5cGUgJiBTTEpJVF9SRVdSSVRBQkxFX0pVTVApOworCXR5cGUgJj0gMHhmZjsKKworCWlmICh0eXBlIDwgU0xKSVRfSlVNUCkgeworCQlqdW1wLT5mbGFncyB8PSBJU19DT05EOworCQlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEJfQ0MgfCAoNiA8PCA1KSB8IGdldF9jYyh0eXBlKSkpOworCX0KKwllbHNlIGlmICh0eXBlID49IFNMSklUX0ZBU1RfQ0FMTCkKKwkJanVtcC0+ZmxhZ3MgfD0gSVNfQkw7CisKKwlQVFJfRkFJTF9JRihlbWl0X2ltbTY0X2NvbnN0KGNvbXBpbGVyLCBUTVBfUkVHMSwgMCkpOworCWp1bXAtPmFkZHIgPSBjb21waWxlci0+c2l6ZTsKKwlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsICgodHlwZSA+PSBTTEpJVF9GQVNUX0NBTEwpID8gQkxSIDogQlIpIHwgUk4oVE1QX1JFRzEpKSk7CisKKwlyZXR1cm4ganVtcDsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzdHJ1Y3Qgc2xqaXRfanVtcCogZW1pdF9jbXBfdG8wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOworCXNsaml0X2lucyBpbnZfYml0cyA9ICh0eXBlICYgU0xKSVRfSU5UX09QKSA/ICgxIDw8IDMxKSA6IDA7CisKKwlTTEpJVF9BU1NFUlQoKHR5cGUgJiAweGZmKSA9PSBTTEpJVF9FUVVBTCB8fCAodHlwZSAmIDB4ZmYpID09IFNMSklUX05PVF9FUVVBTCk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOworCisJanVtcCA9IChzdHJ1Y3Qgc2xqaXRfanVtcCopZW5zdXJlX2FidWYoY29tcGlsZXIsIHNpemVvZihzdHJ1Y3Qgc2xqaXRfanVtcCkpOworCVBUUl9GQUlMX0lGKCFqdW1wKTsKKwlzZXRfanVtcChqdW1wLCBjb21waWxlciwgdHlwZSAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCk7CisJanVtcC0+ZmxhZ3MgfD0gSVNfQ0JaIHwgSVNfQ09ORDsKKworCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJUFRSX0ZBSUxfSUYoZW1pdF9vcF9tZW0oY29tcGlsZXIsIGludl9iaXRzID8gSU5UX1NJWkUgOiBXT1JEX1NJWkUsIFRNUF9SRUcxLCBzcmMsIHNyY3cpKTsKKwkJc3JjID0gVE1QX1JFRzE7CisJfQorCWVsc2UgaWYgKHNyYyAmIFNMSklUX0lNTSkgeworCQlQVFJfRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzEsIHNyY3cpKTsKKwkJc3JjID0gVE1QX1JFRzE7CisJfQorCVNMSklUX0FTU0VSVChGQVNUX0lTX1JFRyhzcmMpKTsKKworCWlmICgodHlwZSAmIDB4ZmYpID09IFNMSklUX0VRVUFMKQorCQlpbnZfYml0cyB8PSAxIDw8IDI0OworCisJUFRSX0ZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoQ0JaIF4gaW52X2JpdHMpIHwgKDYgPDwgNSkgfCBSVChzcmMpKSk7CisJUFRSX0ZBSUxfSUYoZW1pdF9pbW02NF9jb25zdChjb21waWxlciwgVE1QX1JFRzEsIDApKTsKKwlqdW1wLT5hZGRyID0gY29tcGlsZXItPnNpemU7CisJUFRSX0ZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBCUiB8IFJOKFRNUF9SRUcxKSkpOworCXJldHVybiBqdW1wOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9panVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfaWp1bXAoY29tcGlsZXIsIHR5cGUsIHNyYywgc3JjdykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCS8qIEluIEFSTSwgd2UgZG9uJ3QgbmVlZCB0byB0b3VjaCB0aGUgYXJndW1lbnRzLiAqLworCWlmICghKHNyYyAmIFNMSklUX0lNTSkpIHsKKwkJaWYgKHNyYyAmIFNMSklUX01FTSkgeworCQkJRkFJTF9JRihlbWl0X29wX21lbShjb21waWxlciwgV09SRF9TSVpFLCBUTVBfUkVHMSwgc3JjLCBzcmN3KSk7CisJCQlzcmMgPSBUTVBfUkVHMTsKKwkJfQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAoKHR5cGUgPj0gU0xKSVRfRkFTVF9DQUxMKSA/IEJMUiA6IEJSKSB8IFJOKHNyYykpOworCX0KKworCWp1bXAgPSAoc3RydWN0IHNsaml0X2p1bXAqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2p1bXApKTsKKwlGQUlMX0lGKCFqdW1wKTsKKwlzZXRfanVtcChqdW1wLCBjb21waWxlciwgSlVNUF9BRERSIHwgKCh0eXBlID49IFNMSklUX0ZBU1RfQ0FMTCkgPyBJU19CTCA6IDApKTsKKwlqdW1wLT51LnRhcmdldCA9IHNyY3c7CisKKwlGQUlMX0lGKGVtaXRfaW1tNjRfY29uc3QoY29tcGlsZXIsIFRNUF9SRUcxLCAwKSk7CisJanVtcC0+YWRkciA9IGNvbXBpbGVyLT5zaXplOworCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsICgodHlwZSA+PSBTTEpJVF9GQVNUX0NBTEwpID8gQkxSIDogQlIpIHwgUk4oVE1QX1JFRzEpKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdywKKwlzbGppdF9zaSB0eXBlKQoreworCXNsaml0X3NpIGRzdF9yLCBmbGFncywgbWVtX2ZsYWdzOworCXNsaml0X2lucyBjYzsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcF9mbGFncyhjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3LCB0eXBlKSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNjID0gZ2V0X2NjKHR5cGUgJiAweGZmKTsKKwlkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfUkVHMTsKKworCWlmIChHRVRfT1BDT0RFKG9wKSA8IFNMSklUX0FERCkgeworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQ1NJTkMgfCAoY2MgPDwgMTIpIHwgUkQoZHN0X3IpIHwgUk4oVE1QX1pFUk8pIHwgUk0oVE1QX1pFUk8pKSk7CisJCWlmIChkc3RfciAhPSBUTVBfUkVHMSkKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQlyZXR1cm4gZW1pdF9vcF9tZW0oY29tcGlsZXIsIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9NT1YgPyBXT1JEX1NJWkUgOiBJTlRfU0laRSkgfCBTVE9SRSwgVE1QX1JFRzEsIGRzdCwgZHN0dyk7CisJfQorCisJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCWZsYWdzID0gR0VUX0ZMQUdTKG9wKSA/IFNFVF9GTEFHUyA6IDA7CisJbWVtX2ZsYWdzID0gV09SRF9TSVpFOworCWlmIChvcCAmIFNMSklUX0lOVF9PUCkgeworCQlmbGFncyB8PSBJTlRfT1A7CisJCW1lbV9mbGFncyA9IElOVF9TSVpFOworCX0KKworCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIG1lbV9mbGFncywgVE1QX1JFRzEsIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CisJCXNyYyA9IFRNUF9SRUcxOworCQlzcmN3ID0gMDsKKwl9IGVsc2UgaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJZmxhZ3MgfD0gQVJHMV9JTU07CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQ1NJTkMgfCAoY2MgPDwgMTIpIHwgUkQoVE1QX1JFRzIpIHwgUk4oVE1QX1pFUk8pIHwgUk0oVE1QX1pFUk8pKSk7CisJZW1pdF9vcF9pbW0oY29tcGlsZXIsIGZsYWdzIHwgR0VUX09QQ09ERShvcCksIGRzdF9yLCBzcmMsIFRNUF9SRUcyKTsKKworCWlmIChkc3RfciAhPSBUTVBfUkVHMSkKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJcmV0dXJuIGVtaXRfb3BfbWVtMihjb21waWxlciwgbWVtX2ZsYWdzIHwgU1RPUkUsIFRNUF9SRUcxLCBkc3QsIGRzdHcsIDAsIDApOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbnN0KiBzbGppdF9lbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdF92YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2xqaXRfY29uc3QgKmNvbnN0XzsKKwlzbGppdF9zaSBkc3RfcjsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2NvbnN0KGNvbXBpbGVyLCBkc3QsIGRzdHcsIGluaXRfdmFsdWUpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisKKwljb25zdF8gPSAoc3RydWN0IHNsaml0X2NvbnN0KillbnN1cmVfYWJ1Zihjb21waWxlciwgc2l6ZW9mKHN0cnVjdCBzbGppdF9jb25zdCkpOworCVBUUl9GQUlMX0lGKCFjb25zdF8pOworCXNldF9jb25zdChjb25zdF8sIGNvbXBpbGVyKTsKKworCWRzdF9yID0gU0xPV19JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcxOworCVBUUl9GQUlMX0lGKGVtaXRfaW1tNjRfY29uc3QoY29tcGlsZXIsIGRzdF9yLCBpbml0X3ZhbHVlKSk7CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKQorCQlQVFJfRkFJTF9JRihlbWl0X29wX21lbShjb21waWxlciwgV09SRF9TSVpFIHwgU1RPUkUsIGRzdF9yLCBkc3QsIGRzdHcpKTsKKwlyZXR1cm4gY29uc3RfOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfanVtcF9hZGRyKHNsaml0X3V3IGFkZHIsIHNsaml0X3V3IG5ld19hZGRyKQoreworCXNsaml0X2lucyogaW5zdCA9IChzbGppdF9pbnMqKWFkZHI7CisJbW9kaWZ5X2ltbTY0X2NvbnN0KGluc3QsIG5ld19hZGRyKTsKKwlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgNCk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9jb25zdChzbGppdF91dyBhZGRyLCBzbGppdF9zdyBuZXdfY29uc3RhbnQpCit7CisJc2xqaXRfaW5zKiBpbnN0ID0gKHNsaml0X2lucyopYWRkcjsKKwltb2RpZnlfaW1tNjRfY29uc3QoaW5zdCwgbmV3X2NvbnN0YW50KTsKKwlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgNCk7Cit9CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVBUk1fVDJfMzIuYyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZUFSTV9UMl8zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ODAzZjUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVBUk1fVDJfMzIuYwpAQCAtMCwwICsxLDIwOTAgQEAKKy8qCisgKiAgICBTdGFjay1sZXNzIEp1c3QtSW4tVGltZSBjb21waWxlcgorICoKKyAqICAgIENvcHlyaWdodCAyMDA5LTIwMTIgWm9sdGFuIEhlcmN6ZWcgKGh6bWVzdGVyQGZyZWVtYWlsLmh1KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAqICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIFNMSklUX0NPTlNUIGNoYXIqIHNsaml0X2dldF9wbGF0Zm9ybV9uYW1lKHZvaWQpCit7CisJcmV0dXJuICJBUk0tVGh1bWIyIiBTTEpJVF9DUFVJTkZPOworfQorCisvKiBMZW5ndGggb2YgYW4gaW5zdHJ1Y3Rpb24gd29yZC4gKi8KK3R5cGVkZWYgc2xqaXRfdWkgc2xqaXRfaW5zOworCisvKiBMYXN0IHJlZ2lzdGVyICsgMS4gKi8KKyNkZWZpbmUgVE1QX1JFRzEJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAyKQorI2RlZmluZSBUTVBfUkVHMgkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDMpCisjZGVmaW5lIFRNUF9SRUczCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNCkKKyNkZWZpbmUgVE1QX1BDCQkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDUpCisKKyNkZWZpbmUgVE1QX0ZSRUcxCSgwKQorI2RlZmluZSBUTVBfRlJFRzIJKFNMSklUX05VTUJFUl9PRl9GTE9BVF9SRUdJU1RFUlMgKyAxKQorCisvKiBTZWUgc2xqaXRfZW1pdF9lbnRlciBhbmQgc2xqaXRfZW1pdF9vcDAgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZW0uICovCitzdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfdWIgcmVnX21hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNl0gPSB7CisJMCwgMCwgMSwgMiwgMTIsIDExLCAxMCwgOSwgOCwgNywgNiwgNSwgMTMsIDMsIDQsIDE0LCAxNQorfTsKKworI2RlZmluZSBDT1BZX0JJVFMoc3JjLCBmcm9tLCB0bywgYml0cykgXAorCSgoZnJvbSA+PSB0byA/IChzcmMgPj4gKGZyb20gLSB0bykpIDogKHNyYyA8PCAodG8gLSBmcm9tKSkpICYgKCgoMSA8PCBiaXRzKSAtIDEpIDw8IHRvKSkKKworLyogVGh1bWIxNiBlbmNvZGluZ3MuICovCisjZGVmaW5lIFJEMyhyZCkgKHJlZ19tYXBbcmRdKQorI2RlZmluZSBSTjMocm4pIChyZWdfbWFwW3JuXSA8PCAzKQorI2RlZmluZSBSTTMocm0pIChyZWdfbWFwW3JtXSA8PCA2KQorI2RlZmluZSBSRE4zKHJkbikgKHJlZ19tYXBbcmRuXSA8PCA4KQorI2RlZmluZSBJTU0zKGltbSkgKGltbSA8PCA2KQorI2RlZmluZSBJTU04KGltbSkgKGltbSkKKworLyogVGh1bWIxNiBoZWxwZXJzLiAqLworI2RlZmluZSBTRVRfUkVHUzQ0KHJkLCBybikgXAorCSgocmVnX21hcFtybl0gPDwgMykgfCAocmVnX21hcFtyZF0gJiAweDcpIHwgKChyZWdfbWFwW3JkXSAmIDB4OCkgPDwgNCkpCisjZGVmaW5lIElTXzJfTE9fUkVHUyhyZWcxLCByZWcyKSBcCisJKHJlZ19tYXBbcmVnMV0gPD0gNyAmJiByZWdfbWFwW3JlZzJdIDw9IDcpCisjZGVmaW5lIElTXzNfTE9fUkVHUyhyZWcxLCByZWcyLCByZWczKSBcCisJKHJlZ19tYXBbcmVnMV0gPD0gNyAmJiByZWdfbWFwW3JlZzJdIDw9IDcgJiYgcmVnX21hcFtyZWczXSA8PSA3KQorCisvKiBUaHVtYjMyIGVuY29kaW5ncy4gKi8KKyNkZWZpbmUgUkQ0KHJkKSAocmVnX21hcFtyZF0gPDwgOCkKKyNkZWZpbmUgUk40KHJuKSAocmVnX21hcFtybl0gPDwgMTYpCisjZGVmaW5lIFJNNChybSkgKHJlZ19tYXBbcm1dKQorI2RlZmluZSBSVDQocnQpIChyZWdfbWFwW3J0XSA8PCAxMikKKyNkZWZpbmUgREQ0KGRkKSAoKGRkKSA8PCAxMikKKyNkZWZpbmUgRE40KGRuKSAoKGRuKSA8PCAxNikKKyNkZWZpbmUgRE00KGRtKSAoZG0pCisjZGVmaW5lIElNTTUoaW1tKSBcCisJKENPUFlfQklUUyhpbW0sIDIsIDEyLCAzKSB8ICgoaW1tICYgMHgzKSA8PCA2KSkKKyNkZWZpbmUgSU1NMTIoaW1tKSBcCisJKENPUFlfQklUUyhpbW0sIDExLCAyNiwgMSkgfCBDT1BZX0JJVFMoaW1tLCA4LCAxMiwgMykgfCAoaW1tICYgMHhmZikpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIEluc3RydWNpb24gZm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogZG90ICcuJyBjaGFuZ2VkIHRvIF8KKyAgIEkgaW1tZWRpYXRlIGZvcm0gKHBvc3NpYmx5IGZvbGxvd2VkIGJ5IG51bWJlciBvZiBpbW1lZGlhdGUgYml0cykuICovCisjZGVmaW5lIEFEQ0kJCTB4ZjE0MDAwMDAKKyNkZWZpbmUgQURDUwkJMHg0MTQwCisjZGVmaW5lIEFEQ19XCQkweGViNDAwMDAwCisjZGVmaW5lIEFERAkJMHg0NDAwCisjZGVmaW5lIEFERFMJCTB4MTgwMAorI2RlZmluZSBBRERTSTMJCTB4MWMwMAorI2RlZmluZSBBRERTSTgJCTB4MzAwMAorI2RlZmluZSBBRERfVwkJMHhlYjAwMDAwMAorI2RlZmluZSBBRERXSQkJMHhmMjAwMDAwMAorI2RlZmluZSBBRERfU1AJCTB4YjAwMAorI2RlZmluZSBBRERfVwkJMHhlYjAwMDAwMAorI2RlZmluZSBBRERfV0kJCTB4ZjEwMDAwMDAKKyNkZWZpbmUgQU5ESQkJMHhmMDAwMDAwMAorI2RlZmluZSBBTkRTCQkweDQwMDAKKyNkZWZpbmUgQU5EX1cJCTB4ZWEwMDAwMDAKKyNkZWZpbmUgQVNSUwkJMHg0MTAwCisjZGVmaW5lIEFTUlNJCQkweDEwMDAKKyNkZWZpbmUgQVNSX1cJCTB4ZmE0MGYwMDAKKyNkZWZpbmUgQVNSX1dJCQkweGVhNGYwMDIwCisjZGVmaW5lIEJJQ0kJCTB4ZjAyMDAwMDAKKyNkZWZpbmUgQktQVAkJMHhiZTAwCisjZGVmaW5lIEJMWAkJMHg0NzgwCisjZGVmaW5lIEJYCQkweDQ3MDAKKyNkZWZpbmUgQ0xaCQkweGZhYjBmMDgwCisjZGVmaW5lIENNUEkJCTB4MjgwMAorI2RlZmluZSBDTVBfVwkJMHhlYmIwMGYwMAorI2RlZmluZSBFT1JJCQkweGYwODAwMDAwCisjZGVmaW5lIEVPUlMJCTB4NDA0MAorI2RlZmluZSBFT1JfVwkJMHhlYTgwMDAwMAorI2RlZmluZSBJVAkJMHhiZjAwCisjZGVmaW5lIExTTFMJCTB4NDA4MAorI2RlZmluZSBMU0xTSQkJMHgwMDAwCisjZGVmaW5lIExTTF9XCQkweGZhMDBmMDAwCisjZGVmaW5lIExTTF9XSQkJMHhlYTRmMDAwMAorI2RlZmluZSBMU1JTCQkweDQwYzAKKyNkZWZpbmUgTFNSU0kJCTB4MDgwMAorI2RlZmluZSBMU1JfVwkJMHhmYTIwZjAwMAorI2RlZmluZSBMU1JfV0kJCTB4ZWE0ZjAwMTAKKyNkZWZpbmUgTU9WCQkweDQ2MDAKKyNkZWZpbmUgTU9WUwkJMHgwMDAwCisjZGVmaW5lIE1PVlNJCQkweDIwMDAKKyNkZWZpbmUgTU9WVAkJMHhmMmMwMDAwMAorI2RlZmluZSBNT1ZXCQkweGYyNDAwMDAwCisjZGVmaW5lIE1PVl9XCQkweGVhNGYwMDAwCisjZGVmaW5lIE1PVl9XSQkJMHhmMDRmMDAwMAorI2RlZmluZSBNVUwJCTB4ZmIwMGYwMDAKKyNkZWZpbmUgTVZOUwkJMHg0M2MwCisjZGVmaW5lIE1WTl9XCQkweGVhNmYwMDAwCisjZGVmaW5lIE1WTl9XSQkJMHhmMDZmMDAwMAorI2RlZmluZSBOT1AJCTB4YmYwMAorI2RlZmluZSBPUk5JCQkweGYwNjAwMDAwCisjZGVmaW5lIE9SUkkJCTB4ZjA0MDAwMDAKKyNkZWZpbmUgT1JSUwkJMHg0MzAwCisjZGVmaW5lIE9SUl9XCQkweGVhNDAwMDAwCisjZGVmaW5lIFBPUAkJMHhiYzAwCisjZGVmaW5lIFBPUF9XCQkweGU4YmQwMDAwCisjZGVmaW5lIFBVU0gJCTB4YjQwMAorI2RlZmluZSBQVVNIX1cJCTB4ZTkyZDAwMDAKKyNkZWZpbmUgUlNCX1dJCQkweGYxYzAwMDAwCisjZGVmaW5lIFJTQlNJCQkweDQyNDAKKyNkZWZpbmUgU0JDSQkJMHhmMTYwMDAwMAorI2RlZmluZSBTQkNTCQkweDQxODAKKyNkZWZpbmUgU0JDX1cJCTB4ZWI2MDAwMDAKKyNkZWZpbmUgU01VTEwJCTB4ZmI4MDAwMDAKKyNkZWZpbmUgU1RSX1NQCQkweDkwMDAKKyNkZWZpbmUgU1VCUwkJMHgxYTAwCisjZGVmaW5lIFNVQlNJMwkJMHgxZTAwCisjZGVmaW5lIFNVQlNJOAkJMHgzODAwCisjZGVmaW5lIFNVQl9XCQkweGViYTAwMDAwCisjZGVmaW5lIFNVQldJCQkweGYyYTAwMDAwCisjZGVmaW5lIFNVQl9TUAkJMHhiMDgwCisjZGVmaW5lIFNVQl9XSQkJMHhmMWEwMDAwMAorI2RlZmluZSBTWFRCCQkweGIyNDAKKyNkZWZpbmUgU1hUQl9XCQkweGZhNGZmMDgwCisjZGVmaW5lIFNYVEgJCTB4YjIwMAorI2RlZmluZSBTWFRIX1cJCTB4ZmEwZmYwODAKKyNkZWZpbmUgVFNUCQkweDQyMDAKKyNkZWZpbmUgVU1VTEwJCTB4ZmJhMDAwMDAKKyNkZWZpbmUgVVhUQgkJMHhiMmMwCisjZGVmaW5lIFVYVEJfVwkJMHhmYTVmZjA4MAorI2RlZmluZSBVWFRICQkweGIyODAKKyNkZWZpbmUgVVhUSF9XCQkweGZhMWZmMDgwCisjZGVmaW5lIFZBQlNfRjMyCTB4ZWViMDBhYzAKKyNkZWZpbmUgVkFERF9GMzIJMHhlZTMwMGEwMAorI2RlZmluZSBWQ01QX0YzMgkweGVlYjQwYTQwCisjZGVmaW5lIFZDVlRfRjMyX1MzMgkweGVlYjgwYWMwCisjZGVmaW5lIFZDVlRfRjY0X0YzMgkweGVlYjcwYWMwCisjZGVmaW5lIFZDVlRfUzMyX0YzMgkweGVlYmQwYWMwCisjZGVmaW5lIFZESVZfRjMyCTB4ZWU4MDBhMDAKKyNkZWZpbmUgVk1PVl9GMzIJMHhlZWIwMGE0MAorI2RlZmluZSBWTU9WCQkweGVlMDAwYTEwCisjZGVmaW5lIFZNUlMJCTB4ZWVmMWZhMTAKKyNkZWZpbmUgVk1VTF9GMzIJMHhlZTIwMGEwMAorI2RlZmluZSBWTkVHX0YzMgkweGVlYjEwYTQwCisjZGVmaW5lIFZTVFJfRjMyCTB4ZWQwMDBhMDAKKyNkZWZpbmUgVlNVQl9GMzIJMHhlZTMwMGE0MAorCitzdGF0aWMgc2xqaXRfc2kgcHVzaF9pbnN0MTYoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfaW5zIGluc3QpCit7CisJc2xqaXRfdWggKnB0cjsKKwlTTEpJVF9BU1NFUlQoIShpbnN0ICYgMHhmZmZmMDAwMCkpOworCisJcHRyID0gKHNsaml0X3VoKillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfdWgpKTsKKwlGQUlMX0lGKCFwdHIpOworCSpwdHIgPSBpbnN0OworCWNvbXBpbGVyLT5zaXplKys7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBzbGppdF9zaSBwdXNoX2luc3QzMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9pbnMgaW5zdCkKK3sKKwlzbGppdF91aCAqcHRyID0gKHNsaml0X3VoKillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfaW5zKSk7CisJRkFJTF9JRighcHRyKTsKKwkqcHRyKysgPSBpbnN0ID4+IDE2OworCSpwdHIgPSBpbnN0OworCWNvbXBpbGVyLT5zaXplICs9IDI7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9pbW0zMl9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3V3IGltbSkKK3sKKwlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBNT1ZXIHwgUkQ0KGRzdCkgfAorCQlDT1BZX0JJVFMoaW1tLCAxMiwgMTYsIDQpIHwgQ09QWV9CSVRTKGltbSwgMTEsIDI2LCAxKSB8IENPUFlfQklUUyhpbW0sIDgsIDEyLCAzKSB8IChpbW0gJiAweGZmKSkpOworCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgTU9WVCB8IFJENChkc3QpIHwKKwkJQ09QWV9CSVRTKGltbSwgMTIgKyAxNiwgMTYsIDQpIHwgQ09QWV9CSVRTKGltbSwgMTEgKyAxNiwgMjYsIDEpIHwgQ09QWV9CSVRTKGltbSwgOCArIDE2LCAxMiwgMykgfCAoKGltbSAmIDB4ZmYwMDAwKSA+PiAxNikpOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgbW9kaWZ5X2ltbTMyX2NvbnN0KHNsaml0X3VoICppbnN0LCBzbGppdF91dyBuZXdfaW1tKQoreworCXNsaml0X3NpIGRzdCA9IGluc3RbMV0gJiAweDBmMDA7CisJU0xKSVRfQVNTRVJUKCgoaW5zdFswXSAmIDB4ZmJmMCkgPT0gKE1PVlcgPj4gMTYpKSAmJiAoKGluc3RbMl0gJiAweGZiZjApID09IChNT1ZUID4+IDE2KSkgJiYgZHN0ID09IChpbnN0WzNdICYgMHgwZjAwKSk7CisJaW5zdFswXSA9IChNT1ZXID4+IDE2KSB8IENPUFlfQklUUyhuZXdfaW1tLCAxMiwgMCwgNCkgfCBDT1BZX0JJVFMobmV3X2ltbSwgMTEsIDEwLCAxKTsKKwlpbnN0WzFdID0gZHN0IHwgQ09QWV9CSVRTKG5ld19pbW0sIDgsIDEyLCAzKSB8IChuZXdfaW1tICYgMHhmZik7CisJaW5zdFsyXSA9IChNT1ZUID4+IDE2KSB8IENPUFlfQklUUyhuZXdfaW1tLCAxMiArIDE2LCAwLCA0KSB8IENPUFlfQklUUyhuZXdfaW1tLCAxMSArIDE2LCAxMCwgMSk7CisJaW5zdFszXSA9IGRzdCB8IENPUFlfQklUUyhuZXdfaW1tLCA4ICsgMTYsIDEyLCAzKSB8ICgobmV3X2ltbSAmIDB4ZmYwMDAwKSA+PiAxNik7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZGV0ZWN0X2p1bXBfdHlwZShzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfdWggKmNvZGVfcHRyLCBzbGppdF91aCAqY29kZSkKK3sKKwlzbGppdF9zdyBkaWZmOworCisJaWYgKGp1bXAtPmZsYWdzICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKQorCQlyZXR1cm4gMDsKKworCWlmIChqdW1wLT5mbGFncyAmIEpVTVBfQUREUikgeworCQkvKiBCcmFuY2ggdG8gQVJNIGNvZGUgaXMgbm90IG9wdGltaXplZCB5ZXQuICovCisJCWlmICghKGp1bXAtPnUudGFyZ2V0ICYgMHgxKSkKKwkJCXJldHVybiAwOworCQlkaWZmID0gKChzbGppdF9zdylqdW1wLT51LnRhcmdldCAtIChzbGppdF9zdykoY29kZV9wdHIgKyAyKSkgPj4gMTsKKwl9CisJZWxzZSB7CisJCVNMSklUX0FTU0VSVChqdW1wLT5mbGFncyAmIEpVTVBfTEFCRUwpOworCQlkaWZmID0gKChzbGppdF9zdykoY29kZSArIGp1bXAtPnUubGFiZWwtPnNpemUpIC0gKHNsaml0X3N3KShjb2RlX3B0ciArIDIpKSA+PiAxOworCX0KKworCWlmIChqdW1wLT5mbGFncyAmIElTX0NPTkQpIHsKKwkJU0xKSVRfQVNTRVJUKCEoanVtcC0+ZmxhZ3MgJiBJU19CTCkpOworCQlpZiAoZGlmZiA8PSAxMjcgJiYgZGlmZiA+PSAtMTI4KSB7CisJCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9UWVBFMTsKKwkJCXJldHVybiA1OworCQl9CisJCWlmIChkaWZmIDw9IDUyNDI4NyAmJiBkaWZmID49IC01MjQyODgpIHsKKwkJCWp1bXAtPmZsYWdzIHw9IFBBVENIX1RZUEUyOworCQkJcmV0dXJuIDQ7CisJCX0KKwkJLyogKzEgY29tZXMgZnJvbSB0aGUgcHJlZml4IElUIGluc3RydWN0aW9uLiAqLworCQlkaWZmLS07CisJCWlmIChkaWZmIDw9IDgzODg2MDcgJiYgZGlmZiA+PSAtODM4ODYwOCkgeworCQkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfVFlQRTM7CisJCQlyZXR1cm4gMzsKKwkJfQorCX0KKwllbHNlIGlmIChqdW1wLT5mbGFncyAmIElTX0JMKSB7CisJCWlmIChkaWZmIDw9IDgzODg2MDcgJiYgZGlmZiA+PSAtODM4ODYwOCkgeworCQkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfQkw7CisJCQlyZXR1cm4gMzsKKwkJfQorCX0KKwllbHNlIHsKKwkJaWYgKGRpZmYgPD0gMTAyMyAmJiBkaWZmID49IC0xMDI0KSB7CisJCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9UWVBFNDsKKwkJCXJldHVybiA0OworCQl9CisJCWlmIChkaWZmIDw9IDgzODg2MDcgJiYgZGlmZiA+PSAtODM4ODYwOCkgeworCQkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfVFlQRTU7CisJCQlyZXR1cm4gMzsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgc2V0X2p1bXBfaW5zdHJ1Y3Rpb24oc3RydWN0IHNsaml0X2p1bXAgKmp1bXApCit7CisJc2xqaXRfc2kgdHlwZSA9IChqdW1wLT5mbGFncyA+PiA0KSAmIDB4ZjsKKwlzbGppdF9zdyBkaWZmOworCXNsaml0X3VoICpqdW1wX2luc3Q7CisJc2xqaXRfc2kgcywgajEsIGoyOworCisJaWYgKFNMSklUX1VOTElLRUxZKHR5cGUgPT0gMCkpIHsKKwkJbW9kaWZ5X2ltbTMyX2NvbnN0KChzbGppdF91aCopanVtcC0+YWRkciwgKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCkgPyBqdW1wLT51LmxhYmVsLT5hZGRyIDoganVtcC0+dS50YXJnZXQpOworCQlyZXR1cm47CisJfQorCisJaWYgKGp1bXAtPmZsYWdzICYgSlVNUF9BRERSKSB7CisJCVNMSklUX0FTU0VSVChqdW1wLT51LnRhcmdldCAmIDB4MSk7CisJCWRpZmYgPSAoKHNsaml0X3N3KWp1bXAtPnUudGFyZ2V0IC0gKHNsaml0X3N3KShqdW1wLT5hZGRyICsgNCkpID4+IDE7CisJfQorCWVsc2UKKwkJZGlmZiA9ICgoc2xqaXRfc3cpKGp1bXAtPnUubGFiZWwtPmFkZHIpIC0gKHNsaml0X3N3KShqdW1wLT5hZGRyICsgNCkpID4+IDE7CisJanVtcF9pbnN0ID0gKHNsaml0X3VoKilqdW1wLT5hZGRyOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSAxOgorCQkvKiBFbmNvZGluZyBUMSBvZiAnQicgaW5zdHJ1Y3Rpb24gKi8KKwkJU0xKSVRfQVNTRVJUKGRpZmYgPD0gMTI3ICYmIGRpZmYgPj0gLTEyOCAmJiAoanVtcC0+ZmxhZ3MgJiBJU19DT05EKSk7CisJCWp1bXBfaW5zdFswXSA9IDB4ZDAwMCB8IChqdW1wLT5mbGFncyAmIDB4ZjAwKSB8IChkaWZmICYgMHhmZik7CisJCXJldHVybjsKKwljYXNlIDI6CisJCS8qIEVuY29kaW5nIFQzIG9mICdCJyBpbnN0cnVjdGlvbiAqLworCQlTTEpJVF9BU1NFUlQoZGlmZiA8PSA1MjQyODcgJiYgZGlmZiA+PSAtNTI0Mjg4ICYmIChqdW1wLT5mbGFncyAmIElTX0NPTkQpKTsKKwkJanVtcF9pbnN0WzBdID0gMHhmMDAwIHwgQ09QWV9CSVRTKGp1bXAtPmZsYWdzLCA4LCA2LCA0KSB8IENPUFlfQklUUyhkaWZmLCAxMSwgMCwgNikgfCBDT1BZX0JJVFMoZGlmZiwgMTksIDEwLCAxKTsKKwkJanVtcF9pbnN0WzFdID0gMHg4MDAwIHwgQ09QWV9CSVRTKGRpZmYsIDE3LCAxMywgMSkgfCBDT1BZX0JJVFMoZGlmZiwgMTgsIDExLCAxKSB8IChkaWZmICYgMHg3ZmYpOworCQlyZXR1cm47CisJY2FzZSAzOgorCQlTTEpJVF9BU1NFUlQoanVtcC0+ZmxhZ3MgJiBJU19DT05EKTsKKwkJKmp1bXBfaW5zdCsrID0gSVQgfCAoKGp1bXAtPmZsYWdzID4+IDQpICYgMHhmMCkgfCAweDg7CisJCWRpZmYtLTsKKwkJdHlwZSA9IDU7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJLyogRW5jb2RpbmcgVDIgb2YgJ0InIGluc3RydWN0aW9uICovCisJCVNMSklUX0FTU0VSVChkaWZmIDw9IDEwMjMgJiYgZGlmZiA+PSAtMTAyNCAmJiAhKGp1bXAtPmZsYWdzICYgSVNfQ09ORCkpOworCQlqdW1wX2luc3RbMF0gPSAweGUwMDAgfCAoZGlmZiAmIDB4N2ZmKTsKKwkJcmV0dXJuOworCX0KKworCVNMSklUX0FTU0VSVChkaWZmIDw9IDgzODg2MDcgJiYgZGlmZiA+PSAtODM4ODYwOCk7CisKKwkvKiBSZWFsbHkgY29tcGxleCBpbnN0cnVjdGlvbiBmb3JtIGZvciBicmFuY2hlcy4gKi8KKwlzID0gKGRpZmYgPj4gMjMpICYgMHgxOworCWoxID0gKH4oZGlmZiA+PiAyMSkgXiBzKSAmIDB4MTsKKwlqMiA9ICh+KGRpZmYgPj4gMjIpIF4gcykgJiAweDE7CisJanVtcF9pbnN0WzBdID0gMHhmMDAwIHwgKHMgPDwgMTApIHwgQ09QWV9CSVRTKGRpZmYsIDExLCAwLCAxMCk7CisJanVtcF9pbnN0WzFdID0gKGoxIDw8IDEzKSB8IChqMiA8PCAxMSkgfCAoZGlmZiAmIDB4N2ZmKTsKKworCS8qIFRoZSBvdGhlcnMgaGF2ZSBhIGNvbW1vbiBmb3JtLiAqLworCWlmICh0eXBlID09IDUpIC8qIEVuY29kaW5nIFQ0IG9mICdCJyBpbnN0cnVjdGlvbiAqLworCQlqdW1wX2luc3RbMV0gfD0gMHg5MDAwOworCWVsc2UgaWYgKHR5cGUgPT0gNikgLyogRW5jb2RpbmcgVDEgb2YgJ0JMJyBpbnN0cnVjdGlvbiAqLworCQlqdW1wX2luc3RbMV0gfD0gMHhkMDAwOworCWVsc2UKKwkJU0xKSVRfQVNTRVJUX1NUT1AoKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQqIHNsaml0X2dlbmVyYXRlX2NvZGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKK3sKKwlzdHJ1Y3Qgc2xqaXRfbWVtb3J5X2ZyYWdtZW50ICpidWY7CisJc2xqaXRfdWggKmNvZGU7CisJc2xqaXRfdWggKmNvZGVfcHRyOworCXNsaml0X3VoICpidWZfcHRyOworCXNsaml0X3VoICpidWZfZW5kOworCXNsaml0X3V3IGhhbGZfY291bnQ7CisKKwlzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOworCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOworCXN0cnVjdCBzbGppdF9jb25zdCAqY29uc3RfOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2dlbmVyYXRlX2NvZGUoY29tcGlsZXIpKTsKKwlyZXZlcnNlX2J1Zihjb21waWxlcik7CisKKwljb2RlID0gKHNsaml0X3VoKilTTEpJVF9NQUxMT0NfRVhFQyhjb21waWxlci0+c2l6ZSAqIHNpemVvZihzbGppdF91aCkpOworCVBUUl9GQUlMX1dJVEhfRVhFQ19JRihjb2RlKTsKKwlidWYgPSBjb21waWxlci0+YnVmOworCisJY29kZV9wdHIgPSBjb2RlOworCWhhbGZfY291bnQgPSAwOworCWxhYmVsID0gY29tcGlsZXItPmxhYmVsczsKKwlqdW1wID0gY29tcGlsZXItPmp1bXBzOworCWNvbnN0XyA9IGNvbXBpbGVyLT5jb25zdHM7CisKKwlkbyB7CisJCWJ1Zl9wdHIgPSAoc2xqaXRfdWgqKWJ1Zi0+bWVtb3J5OworCQlidWZfZW5kID0gYnVmX3B0ciArIChidWYtPnVzZWRfc2l6ZSA+PiAxKTsKKwkJZG8geworCQkJKmNvZGVfcHRyID0gKmJ1Zl9wdHIrKzsKKwkJCS8qIFRoZXNlIHN0cnVjdHVyZXMgYXJlIG9yZGVyZWQgYnkgdGhlaXIgYWRkcmVzcy4gKi8KKwkJCVNMSklUX0FTU0VSVCghbGFiZWwgfHwgbGFiZWwtPnNpemUgPj0gaGFsZl9jb3VudCk7CisJCQlTTEpJVF9BU1NFUlQoIWp1bXAgfHwganVtcC0+YWRkciA+PSBoYWxmX2NvdW50KTsKKwkJCVNMSklUX0FTU0VSVCghY29uc3RfIHx8IGNvbnN0Xy0+YWRkciA+PSBoYWxmX2NvdW50KTsKKwkJCWlmIChsYWJlbCAmJiBsYWJlbC0+c2l6ZSA9PSBoYWxmX2NvdW50KSB7CisJCQkJbGFiZWwtPmFkZHIgPSAoKHNsaml0X3V3KWNvZGVfcHRyKSB8IDB4MTsKKwkJCQlsYWJlbC0+c2l6ZSA9IGNvZGVfcHRyIC0gY29kZTsKKwkJCQlsYWJlbCA9IGxhYmVsLT5uZXh0OworCQkJfQorCQkJaWYgKGp1bXAgJiYganVtcC0+YWRkciA9PSBoYWxmX2NvdW50KSB7CisJCQkJCWp1bXAtPmFkZHIgPSAoc2xqaXRfdXcpY29kZV9wdHIgLSAoKGp1bXAtPmZsYWdzICYgSVNfQ09ORCkgPyAxMCA6IDgpOworCQkJCQljb2RlX3B0ciAtPSBkZXRlY3RfanVtcF90eXBlKGp1bXAsIGNvZGVfcHRyLCBjb2RlKTsKKwkJCQkJanVtcCA9IGp1bXAtPm5leHQ7CisJCQl9CisJCQlpZiAoY29uc3RfICYmIGNvbnN0Xy0+YWRkciA9PSBoYWxmX2NvdW50KSB7CisJCQkJY29uc3RfLT5hZGRyID0gKHNsaml0X3V3KWNvZGVfcHRyOworCQkJCWNvbnN0XyA9IGNvbnN0Xy0+bmV4dDsKKwkJCX0KKwkJCWNvZGVfcHRyICsrOworCQkJaGFsZl9jb3VudCArKzsKKwkJfSB3aGlsZSAoYnVmX3B0ciA8IGJ1Zl9lbmQpOworCisJCWJ1ZiA9IGJ1Zi0+bmV4dDsKKwl9IHdoaWxlIChidWYpOworCisJaWYgKGxhYmVsICYmIGxhYmVsLT5zaXplID09IGhhbGZfY291bnQpIHsKKwkJbGFiZWwtPmFkZHIgPSAoKHNsaml0X3V3KWNvZGVfcHRyKSB8IDB4MTsKKwkJbGFiZWwtPnNpemUgPSBjb2RlX3B0ciAtIGNvZGU7CisJCWxhYmVsID0gbGFiZWwtPm5leHQ7CisJfQorCisJU0xKSVRfQVNTRVJUKCFsYWJlbCk7CisJU0xKSVRfQVNTRVJUKCFqdW1wKTsKKwlTTEpJVF9BU1NFUlQoIWNvbnN0Xyk7CisJU0xKSVRfQVNTRVJUKGNvZGVfcHRyIC0gY29kZSA8PSAoc2xqaXRfc3cpY29tcGlsZXItPnNpemUpOworCisJanVtcCA9IGNvbXBpbGVyLT5qdW1wczsKKwl3aGlsZSAoanVtcCkgeworCQlzZXRfanVtcF9pbnN0cnVjdGlvbihqdW1wKTsKKwkJanVtcCA9IGp1bXAtPm5leHQ7CisJfQorCisJY29tcGlsZXItPmVycm9yID0gU0xKSVRfRVJSX0NPTVBJTEVEOworCWNvbXBpbGVyLT5leGVjdXRhYmxlX3NpemUgPSAoY29kZV9wdHIgLSBjb2RlKSAqIHNpemVvZihzbGppdF91aCk7CisJU0xKSVRfQ0FDSEVfRkxVU0goY29kZSwgY29kZV9wdHIpOworCS8qIFNldCB0aHVtYiBtb2RlIGZsYWcuICovCisJcmV0dXJuICh2b2lkKikoKHNsaml0X3V3KWNvZGUgfCAweDEpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBDb3JlIGNvZGUgZ2VuZXJhdG9yIGZ1bmN0aW9ucy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgSU5WQUxJRF9JTU0JMHg4MDAwMDAwMAorc3RhdGljIHNsaml0X3V3IGdldF9pbW0oc2xqaXRfdXcgaW1tKQoreworCS8qIFRodW1iIGltbWVkaWF0ZSBmb3JtLiAqLworCXNsaml0X3NpIGNvdW50ZXI7CisKKwlpZiAoaW1tIDw9IDB4ZmYpCisJCXJldHVybiBpbW07CisKKwlpZiAoKGltbSAmIDB4ZmZmZikgPT0gKGltbSA+PiAxNikpIHsKKwkJLyogU29tZSBzcGVjaWFsIGNhc2VzLiAqLworCQlpZiAoIShpbW0gJiAweGZmMDApKQorCQkJcmV0dXJuICgxIDw8IDEyKSB8IChpbW0gJiAweGZmKTsKKwkJaWYgKCEoaW1tICYgMHhmZikpCisJCQlyZXR1cm4gKDIgPDwgMTIpIHwgKChpbW0gPj4gOCkgJiAweGZmKTsKKwkJaWYgKChpbW0gJiAweGZmMDApID09ICgoaW1tICYgMHhmZikgPDwgOCkpCisJCQlyZXR1cm4gKDMgPDwgMTIpIHwgKGltbSAmIDB4ZmYpOworCX0KKworCS8qIEFzc2VtYmx5IG9wdGltaXphdGlvbjogY291bnQgbGVhZGluZyB6ZXJvZXM/ICovCisJY291bnRlciA9IDg7CisJaWYgKCEoaW1tICYgMHhmZmZmMDAwMCkpIHsKKwkJY291bnRlciArPSAxNjsKKwkJaW1tIDw8PSAxNjsKKwl9CisJaWYgKCEoaW1tICYgMHhmZjAwMDAwMCkpIHsKKwkJY291bnRlciArPSA4OworCQlpbW0gPDw9IDg7CisJfQorCWlmICghKGltbSAmIDB4ZjAwMDAwMDApKSB7CisJCWNvdW50ZXIgKz0gNDsKKwkJaW1tIDw8PSA0OworCX0KKwlpZiAoIShpbW0gJiAweGMwMDAwMDAwKSkgeworCQljb3VudGVyICs9IDI7CisJCWltbSA8PD0gMjsKKwl9CisJaWYgKCEoaW1tICYgMHg4MDAwMDAwMCkpIHsKKwkJY291bnRlciArPSAxOworCQlpbW0gPDw9IDE7CisJfQorCS8qIFNpbmNlIGltbSA+PSAxMjgsIHRoaXMgbXVzdCBiZSB0cnVlLiAqLworCVNMSklUX0FTU0VSVChjb3VudGVyIDw9IDMxKTsKKworCWlmIChpbW0gJiAweDAwZmZmZmZmKQorCQlyZXR1cm4gSU5WQUxJRF9JTU07IC8qIENhbm5vdCBiZSBlbmNvZGVkLiAqLworCisJcmV0dXJuICgoaW1tID4+IDI0KSAmIDB4N2YpIHwgQ09QWV9CSVRTKGNvdW50ZXIsIDQsIDI2LCAxKSB8IENPUFlfQklUUyhjb3VudGVyLCAxLCAxMiwgMykgfCBDT1BZX0JJVFMoY291bnRlciwgMCwgNywgMSk7Cit9CisKK3N0YXRpYyBzbGppdF9zaSBsb2FkX2ltbWVkaWF0ZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3V3IGltbSkKK3sKKwlzbGppdF91dyB0bXA7CisKKwlpZiAoaW1tID49IDB4MTAwMDApIHsKKwkJdG1wID0gZ2V0X2ltbShpbW0pOworCQlpZiAodG1wICE9IElOVkFMSURfSU1NKQorCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBNT1ZfV0kgfCBSRDQoZHN0KSB8IHRtcCk7CisJCXRtcCA9IGdldF9pbW0ofmltbSk7CisJCWlmICh0bXAgIT0gSU5WQUxJRF9JTU0pCisJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIE1WTl9XSSB8IFJENChkc3QpIHwgdG1wKTsKKwl9CisKKwkvKiBzZXQgbG93IDE2IGJpdHMsIHNldCBoaSAxNiBiaXRzIHRvIDAuICovCisJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgTU9WVyB8IFJENChkc3QpIHwKKwkJQ09QWV9CSVRTKGltbSwgMTIsIDE2LCA0KSB8IENPUFlfQklUUyhpbW0sIDExLCAyNiwgMSkgfCBDT1BZX0JJVFMoaW1tLCA4LCAxMiwgMykgfCAoaW1tICYgMHhmZikpKTsKKworCS8qIHNldCBoaSAxNiBiaXQgaWYgbmVlZGVkLiAqLworCWlmIChpbW0gPj0gMHgxMDAwMCkKKwkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBNT1ZUIHwgUkQ0KGRzdCkgfAorCQkJQ09QWV9CSVRTKGltbSwgMTIgKyAxNiwgMTYsIDQpIHwgQ09QWV9CSVRTKGltbSwgMTEgKyAxNiwgMjYsIDEpIHwgQ09QWV9CSVRTKGltbSwgOCArIDE2LCAxMiwgMykgfCAoKGltbSAmIDB4ZmYwMDAwKSA+PiAxNikpOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCisjZGVmaW5lIEFSRzFfSU1NCTB4MDAxMDAwMAorI2RlZmluZSBBUkcyX0lNTQkweDAwMjAwMDAKKyNkZWZpbmUgS0VFUF9GTEFHUwkweDAwNDAwMDAKKy8qIFNFVF9GTEFHUyBtdXN0IGJlIDB4MTAwMDAwIGFzIGl0IGlzIGFsc28gdGhlIHZhbHVlIG9mIFMgYml0IChjYW4gYmUgdXNlZCBmb3Igb3B0aW1pemF0aW9uKS4gKi8KKyNkZWZpbmUgU0VUX0ZMQUdTCTB4MDEwMDAwMAorI2RlZmluZSBVTlVTRURfUkVUVVJOCTB4MDIwMDAwMAorI2RlZmluZSBTTE9XX0RFU1QJMHgwNDAwMDAwCisjZGVmaW5lIFNMT1dfU1JDMQkweDA4MDAwMDAKKyNkZWZpbmUgU0xPV19TUkMyCTB4MTAwMDAwMAorCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9vcF9pbW0oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIGRzdCwgc2xqaXRfdXcgYXJnMSwgc2xqaXRfdXcgYXJnMikKK3sKKwkvKiBkc3QgbXVzdCBiZSByZWdpc3RlciwgVE1QX1JFRzEKKwkgICBhcmcxIG11c3QgYmUgcmVnaXN0ZXIsIFRNUF9SRUcxLCBpbW0KKwkgICBhcmcyIG11c3QgYmUgcmVnaXN0ZXIsIFRNUF9SRUcyLCBpbW0gKi8KKwlzbGppdF9zaSByZWc7CisJc2xqaXRfdXcgaW1tLCBuaW1tOworCisJaWYgKFNMSklUX1VOTElLRUxZKChmbGFncyAmIChBUkcxX0lNTSB8IEFSRzJfSU1NKSkgPT0gKEFSRzFfSU1NIHwgQVJHMl9JTU0pKSkgeworCQkvKiBCb3RoIGFyZSBpbW1lZGlhdGVzLiAqLworCQlmbGFncyAmPSB+QVJHMV9JTU07CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUcxLCBhcmcxKSk7CisJCWFyZzEgPSBUTVBfUkVHMTsKKwl9CisKKwlpZiAoZmxhZ3MgJiAoQVJHMV9JTU0gfCBBUkcyX0lNTSkpIHsKKwkJcmVnID0gKGZsYWdzICYgQVJHMl9JTU0pID8gYXJnMSA6IGFyZzI7CisJCWltbSA9IChmbGFncyAmIEFSRzJfSU1NKSA/IGFyZzIgOiBhcmcxOworCisJCXN3aXRjaCAoZmxhZ3MgJiAweGZmZmYpIHsKKwkJY2FzZSBTTEpJVF9DTFo6CisJCWNhc2UgU0xKSVRfTVVMOgorCQkJLyogTm8gZm9ybSB3aXRoIGltbWVkaWF0ZSBvcGVyYW5kLiAqLworCQkJYnJlYWs7CisJCWNhc2UgU0xKSVRfTU9WOgorCQkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBTRVRfRkxBR1MpICYmIChmbGFncyAmIEFSRzJfSU1NKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKKwkJCXJldHVybiBsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgZHN0LCBpbW0pOworCQljYXNlIFNMSklUX05PVDoKKwkJCWlmICghKGZsYWdzICYgU0VUX0ZMQUdTKSkKKwkJCQlyZXR1cm4gbG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIGRzdCwgfmltbSk7CisJCQkvKiBTaW5jZSB0aGUgZmxhZ3Mgc2hvdWxkIGJlIHNldCwgd2UganVzdCBmYWxsYmFjayB0byB0aGUgcmVnaXN0ZXIgbW9kZS4KKwkJCSAgIEFsdGhvdWdoIHNvbWUgY2xldmVyIHRoaW5ncyBjb3VsZCBiZSBkb25lIGhlcmUsICJOT1QgSU1NIiBkb2VzIG5vdCB3b3J0aCB0aGUgZWZmb3J0cy4gKi8KKwkJCWJyZWFrOworCQljYXNlIFNMSklUX0FERDoKKwkJCW5pbW0gPSAtaW1tOworCQkJaWYgKCEoZmxhZ3MgJiBLRUVQX0ZMQUdTKSAmJiBJU18yX0xPX1JFR1MocmVnLCBkc3QpKSB7CisJCQkJaWYgKGltbSA8PSAweDcpCisJCQkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgQUREU0kzIHwgSU1NMyhpbW0pIHwgUkQzKGRzdCkgfCBSTjMocmVnKSk7CisJCQkJaWYgKG5pbW0gPD0gMHg3KQorCQkJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIFNVQlNJMyB8IElNTTMobmltbSkgfCBSRDMoZHN0KSB8IFJOMyhyZWcpKTsKKwkJCQlpZiAocmVnID09IGRzdCkgeworCQkJCQlpZiAoaW1tIDw9IDB4ZmYpCisJCQkJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIEFERFNJOCB8IElNTTgoaW1tKSB8IFJETjMoZHN0KSk7CisJCQkJCWlmIChuaW1tIDw9IDB4ZmYpCisJCQkJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIFNVQlNJOCB8IElNTTgobmltbSkgfCBSRE4zKGRzdCkpOworCQkJCX0KKwkJCX0KKwkJCWlmICghKGZsYWdzICYgU0VUX0ZMQUdTKSkgeworCQkJCWlmIChpbW0gPD0gMHhmZmYpCisJCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgQUREV0kgfCBSRDQoZHN0KSB8IFJONChyZWcpIHwgSU1NMTIoaW1tKSk7CisJCQkJaWYgKG5pbW0gPD0gMHhmZmYpCisJCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgU1VCV0kgfCBSRDQoZHN0KSB8IFJONChyZWcpIHwgSU1NMTIobmltbSkpOworCQkJfQorCQkJaW1tID0gZ2V0X2ltbShpbW0pOworCQkJaWYgKGltbSAhPSBJTlZBTElEX0lNTSkKKwkJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIEFERF9XSSB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBSRDQoZHN0KSB8IFJONChyZWcpIHwgaW1tKTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX0FEREM6CisJCQlpbW0gPSBnZXRfaW1tKGltbSk7CisJCQlpZiAoaW1tICE9IElOVkFMSURfSU1NKQorCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgQURDSSB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBSRDQoZHN0KSB8IFJONChyZWcpIHwgaW1tKTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX1NVQjoKKwkJCWlmIChmbGFncyAmIEFSRzFfSU1NKSB7CisJCQkJaWYgKCEoZmxhZ3MgJiBLRUVQX0ZMQUdTKSAmJiBpbW0gPT0gMCAmJiBJU18yX0xPX1JFR1MocmVnLCBkc3QpKQorCQkJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIFJTQlNJIHwgUkQzKGRzdCkgfCBSTjMocmVnKSk7CisJCQkJaW1tID0gZ2V0X2ltbShpbW0pOworCQkJCWlmIChpbW0gIT0gSU5WQUxJRF9JTU0pCisJCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgUlNCX1dJIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IFJENChkc3QpIHwgUk40KHJlZykgfCBpbW0pOworCQkJCWJyZWFrOworCQkJfQorCQkJbmltbSA9IC1pbW07CisJCQlpZiAoIShmbGFncyAmIEtFRVBfRkxBR1MpICYmIElTXzJfTE9fUkVHUyhyZWcsIGRzdCkpIHsKKwkJCQlpZiAoaW1tIDw9IDB4NykKKwkJCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBTVUJTSTMgfCBJTU0zKGltbSkgfCBSRDMoZHN0KSB8IFJOMyhyZWcpKTsKKwkJCQlpZiAobmltbSA8PSAweDcpCisJCQkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgQUREU0kzIHwgSU1NMyhuaW1tKSB8IFJEMyhkc3QpIHwgUk4zKHJlZykpOworCQkJCWlmIChyZWcgPT0gZHN0KSB7CisJCQkJCWlmIChpbW0gPD0gMHhmZikKKwkJCQkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgU1VCU0k4IHwgSU1NOChpbW0pIHwgUkROMyhkc3QpKTsKKwkJCQkJaWYgKG5pbW0gPD0gMHhmZikKKwkJCQkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgQUREU0k4IHwgSU1NOChuaW1tKSB8IFJETjMoZHN0KSk7CisJCQkJfQorCQkJCWlmIChpbW0gPD0gMHhmZiAmJiAoZmxhZ3MgJiBVTlVTRURfUkVUVVJOKSkKKwkJCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBDTVBJIHwgSU1NOChpbW0pIHwgUkROMyhyZWcpKTsKKwkJCX0KKwkJCWlmICghKGZsYWdzICYgU0VUX0ZMQUdTKSkgeworCQkJCWlmIChpbW0gPD0gMHhmZmYpCisJCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgU1VCV0kgfCBSRDQoZHN0KSB8IFJONChyZWcpIHwgSU1NMTIoaW1tKSk7CisJCQkJaWYgKG5pbW0gPD0gMHhmZmYpCisJCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgQUREV0kgfCBSRDQoZHN0KSB8IFJONChyZWcpIHwgSU1NMTIobmltbSkpOworCQkJfQorCQkJaW1tID0gZ2V0X2ltbShpbW0pOworCQkJaWYgKGltbSAhPSBJTlZBTElEX0lNTSkKKwkJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFNVQl9XSSB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBSRDQoZHN0KSB8IFJONChyZWcpIHwgaW1tKTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX1NVQkM6CisJCQlpZiAoZmxhZ3MgJiBBUkcxX0lNTSkKKwkJCQlicmVhazsKKwkJCWltbSA9IGdldF9pbW0oaW1tKTsKKwkJCWlmIChpbW0gIT0gSU5WQUxJRF9JTU0pCisJCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBTQkNJIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IFJENChkc3QpIHwgUk40KHJlZykgfCBpbW0pOworCQkJYnJlYWs7CisJCWNhc2UgU0xKSVRfQU5EOgorCQkJbmltbSA9IGdldF9pbW0oaW1tKTsKKwkJCWlmIChuaW1tICE9IElOVkFMSURfSU1NKQorCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgQU5ESSB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBSRDQoZHN0KSB8IFJONChyZWcpIHwgbmltbSk7CisJCQlpbW0gPSBnZXRfaW1tKGltbSk7CisJCQlpZiAoaW1tICE9IElOVkFMSURfSU1NKQorCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgQklDSSB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBSRDQoZHN0KSB8IFJONChyZWcpIHwgaW1tKTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX09SOgorCQkJbmltbSA9IGdldF9pbW0oaW1tKTsKKwkJCWlmIChuaW1tICE9IElOVkFMSURfSU1NKQorCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgT1JSSSB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBSRDQoZHN0KSB8IFJONChyZWcpIHwgbmltbSk7CisJCQlpbW0gPSBnZXRfaW1tKGltbSk7CisJCQlpZiAoaW1tICE9IElOVkFMSURfSU1NKQorCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgT1JOSSB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBSRDQoZHN0KSB8IFJONChyZWcpIHwgaW1tKTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX1hPUjoKKwkJCWltbSA9IGdldF9pbW0oaW1tKTsKKwkJCWlmIChpbW0gIT0gSU5WQUxJRF9JTU0pCisJCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBFT1JJIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IFJENChkc3QpIHwgUk40KHJlZykgfCBpbW0pOworCQkJYnJlYWs7CisJCWNhc2UgU0xKSVRfU0hMOgorCQljYXNlIFNMSklUX0xTSFI6CisJCWNhc2UgU0xKSVRfQVNIUjoKKwkJCWlmIChmbGFncyAmIEFSRzFfSU1NKQorCQkJCWJyZWFrOworCQkJaW1tICY9IDB4MWY7CisJCQlpZiAoaW1tID09IDApIHsKKwkJCQlpZiAoIShmbGFncyAmIFNFVF9GTEFHUykpCisJCQkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgTU9WIHwgU0VUX1JFR1M0NChkc3QsIHJlZykpOworCQkJCWlmIChJU18yX0xPX1JFR1MoZHN0LCByZWcpKQorCQkJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIE1PVlMgfCBSRDMoZHN0KSB8IFJOMyhyZWcpKTsKKwkJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIE1PVl9XIHwgU0VUX0ZMQUdTIHwgUkQ0KGRzdCkgfCBSTTQocmVnKSk7CisJCQl9CisJCQlzd2l0Y2ggKGZsYWdzICYgMHhmZmZmKSB7CisJCQljYXNlIFNMSklUX1NITDoKKwkJCQlpZiAoIShmbGFncyAmIEtFRVBfRkxBR1MpICYmIElTXzJfTE9fUkVHUyhkc3QsIHJlZykpCisJCQkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgTFNMU0kgfCBSRDMoZHN0KSB8IFJOMyhyZWcpIHwgKGltbSA8PCA2KSk7CisJCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBMU0xfV0kgfCAoZmxhZ3MgJiBTRVRfRkxBR1MpIHwgUkQ0KGRzdCkgfCBSTTQocmVnKSB8IElNTTUoaW1tKSk7CisJCQljYXNlIFNMSklUX0xTSFI6CisJCQkJaWYgKCEoZmxhZ3MgJiBLRUVQX0ZMQUdTKSAmJiBJU18yX0xPX1JFR1MoZHN0LCByZWcpKQorCQkJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIExTUlNJIHwgUkQzKGRzdCkgfCBSTjMocmVnKSB8IChpbW0gPDwgNikpOworCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgTFNSX1dJIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IFJENChkc3QpIHwgUk00KHJlZykgfCBJTU01KGltbSkpOworCQkJZGVmYXVsdDogLyogU0xKSVRfQVNIUiAqLworCQkJCWlmICghKGZsYWdzICYgS0VFUF9GTEFHUykgJiYgSVNfMl9MT19SRUdTKGRzdCwgcmVnKSkKKwkJCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBBU1JTSSB8IFJEMyhkc3QpIHwgUk4zKHJlZykgfCAoaW1tIDw8IDYpKTsKKwkJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIEFTUl9XSSB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBSRDQoZHN0KSB8IFJNNChyZWcpIHwgSU1NNShpbW0pKTsKKwkJCX0KKwkJZGVmYXVsdDoKKwkJCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChmbGFncyAmIEFSRzJfSU1NKSB7CisJCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMiwgYXJnMikpOworCQkJYXJnMiA9IFRNUF9SRUcyOworCQl9CisJCWVsc2UgeworCQkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzEsIGFyZzEpKTsKKwkJCWFyZzEgPSBUTVBfUkVHMTsKKwkJfQorCX0KKworCS8qIEJvdGggYXJndW1lbnRzIGFyZSByZWdpc3RlcnMuICovCisJc3dpdGNoIChmbGFncyAmIDB4ZmZmZikgeworCWNhc2UgU0xKSVRfTU9WOgorCWNhc2UgU0xKSVRfTU9WX1VJOgorCWNhc2UgU0xKSVRfTU9WX1NJOgorCWNhc2UgU0xKSVRfTU9WX1A6CisJY2FzZSBTTEpJVF9NT1ZVOgorCWNhc2UgU0xKSVRfTU9WVV9VSToKKwljYXNlIFNMSklUX01PVlVfU0k6CisJY2FzZSBTTEpJVF9NT1ZVX1A6CisJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKKwkJaWYgKGRzdCA9PSBhcmcyKQorCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgTU9WIHwgU0VUX1JFR1M0NChkc3QsIGFyZzIpKTsKKwljYXNlIFNMSklUX01PVl9VQjoKKwljYXNlIFNMSklUX01PVlVfVUI6CisJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKKwkJaWYgKElTXzJfTE9fUkVHUyhkc3QsIGFyZzIpKQorCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBVWFRCIHwgUkQzKGRzdCkgfCBSTjMoYXJnMikpOworCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFVYVEJfVyB8IFJENChkc3QpIHwgUk00KGFyZzIpKTsKKwljYXNlIFNMSklUX01PVl9TQjoKKwljYXNlIFNMSklUX01PVlVfU0I6CisJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKKwkJaWYgKElTXzJfTE9fUkVHUyhkc3QsIGFyZzIpKQorCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBTWFRCIHwgUkQzKGRzdCkgfCBSTjMoYXJnMikpOworCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFNYVEJfVyB8IFJENChkc3QpIHwgUk00KGFyZzIpKTsKKwljYXNlIFNMSklUX01PVl9VSDoKKwljYXNlIFNMSklUX01PVlVfVUg6CisJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKKwkJaWYgKElTXzJfTE9fUkVHUyhkc3QsIGFyZzIpKQorCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBVWFRIIHwgUkQzKGRzdCkgfCBSTjMoYXJnMikpOworCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFVYVEhfVyB8IFJENChkc3QpIHwgUk00KGFyZzIpKTsKKwljYXNlIFNMSklUX01PVl9TSDoKKwljYXNlIFNMSklUX01PVlVfU0g6CisJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgU0VUX0ZMQUdTKSAmJiBhcmcxID09IFRNUF9SRUcxKTsKKwkJaWYgKElTXzJfTE9fUkVHUyhkc3QsIGFyZzIpKQorCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBTWFRIIHwgUkQzKGRzdCkgfCBSTjMoYXJnMikpOworCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFNYVEhfVyB8IFJENChkc3QpIHwgUk00KGFyZzIpKTsKKwljYXNlIFNMSklUX05PVDoKKwkJU0xKSVRfQVNTRVJUKGFyZzEgPT0gVE1QX1JFRzEpOworCQlpZiAoIShmbGFncyAmIEtFRVBfRkxBR1MpICYmIElTXzJfTE9fUkVHUyhkc3QsIGFyZzIpKQorCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBNVk5TIHwgUkQzKGRzdCkgfCBSTjMoYXJnMikpOworCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIE1WTl9XIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IFJENChkc3QpIHwgUk00KGFyZzIpKTsKKwljYXNlIFNMSklUX0NMWjoKKwkJU0xKSVRfQVNTRVJUKGFyZzEgPT0gVE1QX1JFRzEpOworCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBDTFogfCBSTjQoYXJnMikgfCBSRDQoZHN0KSB8IFJNNChhcmcyKSkpOworCQlpZiAoZmxhZ3MgJiBTRVRfRkxBR1MpIHsKKwkJCWlmIChyZWdfbWFwW2RzdF0gPD0gNykKKwkJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIENNUEkgfCBSRE4zKGRzdCkpOworCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBBRERfV0kgfCBTRVRfRkxBR1MgfCBSTjQoZHN0KSB8IFJENChkc3QpKTsKKwkJfQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwljYXNlIFNMSklUX0FERDoKKwkJaWYgKCEoZmxhZ3MgJiBLRUVQX0ZMQUdTKSAmJiBJU18zX0xPX1JFR1MoZHN0LCBhcmcxLCBhcmcyKSkKKwkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgQUREUyB8IFJEMyhkc3QpIHwgUk4zKGFyZzEpIHwgUk0zKGFyZzIpKTsKKwkJaWYgKGRzdCA9PSBhcmcxICYmICEoZmxhZ3MgJiBTRVRfRkxBR1MpKQorCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBBREQgfCBTRVRfUkVHUzQ0KGRzdCwgYXJnMikpOworCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIEFERF9XIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IFJENChkc3QpIHwgUk40KGFyZzEpIHwgUk00KGFyZzIpKTsKKwljYXNlIFNMSklUX0FEREM6CisJCWlmIChkc3QgPT0gYXJnMSAmJiAhKGZsYWdzICYgS0VFUF9GTEFHUykgJiYgSVNfMl9MT19SRUdTKGRzdCwgYXJnMikpCisJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIEFEQ1MgfCBSRDMoZHN0KSB8IFJOMyhhcmcyKSk7CisJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgQURDX1cgfCAoZmxhZ3MgJiBTRVRfRkxBR1MpIHwgUkQ0KGRzdCkgfCBSTjQoYXJnMSkgfCBSTTQoYXJnMikpOworCWNhc2UgU0xKSVRfU1VCOgorCQlpZiAoIShmbGFncyAmIEtFRVBfRkxBR1MpICYmIElTXzNfTE9fUkVHUyhkc3QsIGFyZzEsIGFyZzIpKQorCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBTVUJTIHwgUkQzKGRzdCkgfCBSTjMoYXJnMSkgfCBSTTMoYXJnMikpOworCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFNVQl9XIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IFJENChkc3QpIHwgUk40KGFyZzEpIHwgUk00KGFyZzIpKTsKKwljYXNlIFNMSklUX1NVQkM6CisJCWlmIChkc3QgPT0gYXJnMSAmJiAhKGZsYWdzICYgS0VFUF9GTEFHUykgJiYgSVNfMl9MT19SRUdTKGRzdCwgYXJnMikpCisJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIFNCQ1MgfCBSRDMoZHN0KSB8IFJOMyhhcmcyKSk7CisJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgU0JDX1cgfCAoZmxhZ3MgJiBTRVRfRkxBR1MpIHwgUkQ0KGRzdCkgfCBSTjQoYXJnMSkgfCBSTTQoYXJnMikpOworCWNhc2UgU0xKSVRfTVVMOgorCQlpZiAoIShmbGFncyAmIFNFVF9GTEFHUykpCisJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIE1VTCB8IFJENChkc3QpIHwgUk40KGFyZzEpIHwgUk00KGFyZzIpKTsKKwkJU0xKSVRfQVNTRVJUKHJlZ19tYXBbVE1QX1JFRzJdIDw9IDcgJiYgZHN0ICE9IFRNUF9SRUcyKTsKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgU01VTEwgfCBSVDQoZHN0KSB8IFJENChUTVBfUkVHMikgfCBSTjQoYXJnMSkgfCBSTTQoYXJnMikpKTsKKwkJLyogY21wIFRNUF9SRUcyLCBkc3QgYXNyICMzMS4gKi8KKwkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBDTVBfVyB8IFJONChUTVBfUkVHMikgfCAweDcwZTAgfCBSTTQoZHN0KSk7CisJY2FzZSBTTEpJVF9BTkQ6CisJCWlmICghKGZsYWdzICYgS0VFUF9GTEFHUykpIHsKKwkJCWlmIChkc3QgPT0gYXJnMSAmJiBJU18yX0xPX1JFR1MoZHN0LCBhcmcyKSkKKwkJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIEFORFMgfCBSRDMoZHN0KSB8IFJOMyhhcmcyKSk7CisJCQlpZiAoKGZsYWdzICYgVU5VU0VEX1JFVFVSTikgJiYgSVNfMl9MT19SRUdTKGFyZzEsIGFyZzIpKQorCQkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgVFNUIHwgUkQzKGFyZzEpIHwgUk4zKGFyZzIpKTsKKwkJfQorCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIEFORF9XIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IFJENChkc3QpIHwgUk40KGFyZzEpIHwgUk00KGFyZzIpKTsKKwljYXNlIFNMSklUX09SOgorCQlpZiAoZHN0ID09IGFyZzEgJiYgIShmbGFncyAmIEtFRVBfRkxBR1MpICYmIElTXzJfTE9fUkVHUyhkc3QsIGFyZzIpKQorCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBPUlJTIHwgUkQzKGRzdCkgfCBSTjMoYXJnMikpOworCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIE9SUl9XIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IFJENChkc3QpIHwgUk40KGFyZzEpIHwgUk00KGFyZzIpKTsKKwljYXNlIFNMSklUX1hPUjoKKwkJaWYgKGRzdCA9PSBhcmcxICYmICEoZmxhZ3MgJiBLRUVQX0ZMQUdTKSAmJiBJU18yX0xPX1JFR1MoZHN0LCBhcmcyKSkKKwkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgRU9SUyB8IFJEMyhkc3QpIHwgUk4zKGFyZzIpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBFT1JfVyB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBSRDQoZHN0KSB8IFJONChhcmcxKSB8IFJNNChhcmcyKSk7CisJY2FzZSBTTEpJVF9TSEw6CisJCWlmIChkc3QgPT0gYXJnMSAmJiAhKGZsYWdzICYgS0VFUF9GTEFHUykgJiYgSVNfMl9MT19SRUdTKGRzdCwgYXJnMikpCisJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIExTTFMgfCBSRDMoZHN0KSB8IFJOMyhhcmcyKSk7CisJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgTFNMX1cgfCAoZmxhZ3MgJiBTRVRfRkxBR1MpIHwgUkQ0KGRzdCkgfCBSTjQoYXJnMSkgfCBSTTQoYXJnMikpOworCWNhc2UgU0xKSVRfTFNIUjoKKwkJaWYgKGRzdCA9PSBhcmcxICYmICEoZmxhZ3MgJiBLRUVQX0ZMQUdTKSAmJiBJU18yX0xPX1JFR1MoZHN0LCBhcmcyKSkKKwkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgTFNSUyB8IFJEMyhkc3QpIHwgUk4zKGFyZzIpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBMU1JfVyB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBSRDQoZHN0KSB8IFJONChhcmcxKSB8IFJNNChhcmcyKSk7CisJY2FzZSBTTEpJVF9BU0hSOgorCQlpZiAoZHN0ID09IGFyZzEgJiYgIShmbGFncyAmIEtFRVBfRkxBR1MpICYmIElTXzJfTE9fUkVHUyhkc3QsIGFyZzIpKQorCQkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBBU1JTIHwgUkQzKGRzdCkgfCBSTjMoYXJnMikpOworCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIEFTUl9XIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IFJENChkc3QpIHwgUk40KGFyZzEpIHwgUk00KGFyZzIpKTsKKwl9CisKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCisjZGVmaW5lIFNUT1JFCQkweDAxCisjZGVmaW5lIFNJR05FRAkJMHgwMgorCisjZGVmaW5lIFdPUkRfU0laRQkweDAwCisjZGVmaW5lIEJZVEVfU0laRQkweDA0CisjZGVmaW5lIEhBTEZfU0laRQkweDA4CisKKyNkZWZpbmUgVVBEQVRFCQkweDEwCisjZGVmaW5lIEFSR19URVNUCTB4MjAKKworI2RlZmluZSBJU19XT1JEX1NJWkUoZmxhZ3MpCQkoIShmbGFncyAmIChCWVRFX1NJWkUgfCBIQUxGX1NJWkUpKSkKKyNkZWZpbmUgT0ZGU0VUX0NIRUNLKGltbSwgc2hpZnQpCSghKGFyZ3cgJiB+KGltbSA8PCBzaGlmdCkpKQorCisvKgorICAxc3QgbGV0dGVyOgorICB3ID0gd29yZAorICBiID0gYnl0ZQorICBoID0gaGFsZgorCisgIDJuZCBsZXR0ZXI6CisgIHMgPSBzaWduZWQKKyAgdSA9IHVuc2lnbmVkCisKKyAgM3JkIGxldHRlcjoKKyAgbCA9IGxvYWQKKyAgcyA9IHN0b3JlCisqLworCitzdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfaW5zIHNsaml0X21lbTE2WzEyXSA9IHsKKy8qIHcgdSBsICovIDB4NTgwMCAvKiBsZHIgKi8sCisvKiB3IHUgcyAqLyAweDUwMDAgLyogc3RyICovLAorLyogdyBzIGwgKi8gMHg1ODAwIC8qIGxkciAqLywKKy8qIHcgcyBzICovIDB4NTAwMCAvKiBzdHIgKi8sCisKKy8qIGIgdSBsICovIDB4NWMwMCAvKiBsZHJiICovLAorLyogYiB1IHMgKi8gMHg1NDAwIC8qIHN0cmIgKi8sCisvKiBiIHMgbCAqLyAweDU2MDAgLyogbGRyc2IgKi8sCisvKiBiIHMgcyAqLyAweDU0MDAgLyogc3RyYiAqLywKKworLyogaCB1IGwgKi8gMHg1YTAwIC8qIGxkcmggKi8sCisvKiBoIHUgcyAqLyAweDUyMDAgLyogc3RyaCAqLywKKy8qIGggcyBsICovIDB4NWUwMCAvKiBsZHJzaCAqLywKKy8qIGggcyBzICovIDB4NTIwMCAvKiBzdHJoICovLAorfTsKKworc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X2lucyBzbGppdF9tZW0xNl9pbW01WzEyXSA9IHsKKy8qIHcgdSBsICovIDB4NjgwMCAvKiBsZHIgaW1tNSAqLywKKy8qIHcgdSBzICovIDB4NjAwMCAvKiBzdHIgaW1tNSAqLywKKy8qIHcgcyBsICovIDB4NjgwMCAvKiBsZHIgaW1tNSAqLywKKy8qIHcgcyBzICovIDB4NjAwMCAvKiBzdHIgaW1tNSAqLywKKworLyogYiB1IGwgKi8gMHg3ODAwIC8qIGxkcmIgaW1tNSAqLywKKy8qIGIgdSBzICovIDB4NzAwMCAvKiBzdHJiIGltbTUgKi8sCisvKiBiIHMgbCAqLyAweDAwMDAgLyogbm90IGFsbG93ZWQgKi8sCisvKiBiIHMgcyAqLyAweDcwMDAgLyogc3RyYiBpbW01ICovLAorCisvKiBoIHUgbCAqLyAweDg4MDAgLyogbGRyaCBpbW01ICovLAorLyogaCB1IHMgKi8gMHg4MDAwIC8qIHN0cmggaW1tNSAqLywKKy8qIGggcyBsICovIDB4MDAwMCAvKiBub3QgYWxsb3dlZCAqLywKKy8qIGggcyBzICovIDB4ODAwMCAvKiBzdHJoIGltbTUgKi8sCit9OworCisjZGVmaW5lIE1FTV9JTU04CTB4YzAwCisjZGVmaW5lIE1FTV9JTU0xMgkweDgwMDAwMAorc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X2lucyBzbGppdF9tZW0zMlsxMl0gPSB7CisvKiB3IHUgbCAqLyAweGY4NTAwMDAwIC8qIGxkci53ICovLAorLyogdyB1IHMgKi8gMHhmODQwMDAwMCAvKiBzdHIudyAqLywKKy8qIHcgcyBsICovIDB4Zjg1MDAwMDAgLyogbGRyLncgKi8sCisvKiB3IHMgcyAqLyAweGY4NDAwMDAwIC8qIHN0ci53ICovLAorCisvKiBiIHUgbCAqLyAweGY4MTAwMDAwIC8qIGxkcmIudyAqLywKKy8qIGIgdSBzICovIDB4ZjgwMDAwMDAgLyogc3RyYi53ICovLAorLyogYiBzIGwgKi8gMHhmOTEwMDAwMCAvKiBsZHJzYi53ICovLAorLyogYiBzIHMgKi8gMHhmODAwMDAwMCAvKiBzdHJiLncgKi8sCisKKy8qIGggdSBsICovIDB4ZjgzMDAwMDAgLyogbGRyaC53ICovLAorLyogaCB1IHMgKi8gMHhmODIwMDAwMCAvKiBzdHJzaC53ICovLAorLyogaCBzIGwgKi8gMHhmOTMwMDAwMCAvKiBsZHJzaC53ICovLAorLyogaCBzIHMgKi8gMHhmODIwMDAwMCAvKiBzdHJzaC53ICovLAorfTsKKworLyogSGVscGVyIGZ1bmN0aW9uLiBEc3Qgc2hvdWxkIGJlIHJlZyArIHZhbHVlLCB1c2luZyBhdCBtb3N0IDEgaW5zdHJ1Y3Rpb24sIGZsYWdzIGRvZXMgbm90IHNldC4gKi8KK3N0YXRpYyBzbGppdF9zaSBlbWl0X3NldF9kZWx0YShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3NpIHJlZywgc2xqaXRfc3cgdmFsdWUpCit7CisJaWYgKHZhbHVlID49IDApIHsKKwkJaWYgKHZhbHVlIDw9IDB4ZmZmKQorCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBBRERXSSB8IFJENChkc3QpIHwgUk40KHJlZykgfCBJTU0xMih2YWx1ZSkpOworCQl2YWx1ZSA9IGdldF9pbW0odmFsdWUpOworCQlpZiAodmFsdWUgIT0gSU5WQUxJRF9JTU0pCisJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIEFERF9XSSB8IFJENChkc3QpIHwgUk40KHJlZykgfCB2YWx1ZSk7CisJfQorCWVsc2UgeworCQl2YWx1ZSA9IC12YWx1ZTsKKwkJaWYgKHZhbHVlIDw9IDB4ZmZmKQorCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBTVUJXSSB8IFJENChkc3QpIHwgUk40KHJlZykgfCBJTU0xMih2YWx1ZSkpOworCQl2YWx1ZSA9IGdldF9pbW0odmFsdWUpOworCQlpZiAodmFsdWUgIT0gSU5WQUxJRF9JTU0pCisJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFNVQl9XSSB8IFJENChkc3QpIHwgUk40KHJlZykgfCB2YWx1ZSk7CisJfQorCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7Cit9CisKKy8qIENhbiBwZXJmb3JtIGFuIG9wZXJhdGlvbiB1c2luZyBhdCBtb3N0IDEgaW5zdHJ1Y3Rpb24uICovCitzdGF0aWMgc2xqaXRfc2kgZ2V0cHV0X2FyZ19mYXN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndykKK3sKKwlzbGppdF9zaSBvdGhlcl9yLCBzaGlmdDsKKworCVNMSklUX0FTU0VSVChhcmcgJiBTTEpJVF9NRU0pOworCisJaWYgKFNMSklUX1VOTElLRUxZKGZsYWdzICYgVVBEQVRFKSkgeworCQlpZiAoKGFyZyAmIFJFR19NQVNLKSAmJiAhKGFyZyAmIE9GRlNfUkVHX01BU0spICYmIGFyZ3cgPD0gMHhmZiAmJiBhcmd3ID49IC0weGZmKSB7CisJCQlpZiAoU0xKSVRfVU5MSUtFTFkoZmxhZ3MgJiBBUkdfVEVTVCkpCisJCQkJcmV0dXJuIDE7CisKKwkJCWZsYWdzICY9IH5VUERBVEU7CisJCQlhcmcgJj0gMHhmOworCQkJaWYgKGFyZ3cgPj0gMCkKKwkJCQlhcmd3IHw9IDB4MjAwOworCQkJZWxzZSB7CisJCQkJYXJndyA9IC1hcmd3OworCQkJfQorCisJCQlTTEpJVF9BU1NFUlQoYXJndyA+PSAwICYmIChhcmd3ICYgMHhmZikgPD0gMHhmZik7CisJCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBzbGppdF9tZW0zMltmbGFnc10gfCBNRU1fSU1NOCB8IFJUNChyZWcpIHwgUk40KGFyZykgfCAweDEwMCB8IGFyZ3cpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoU0xKSVRfVU5MSUtFTFkoYXJnICYgT0ZGU19SRUdfTUFTSykpIHsKKwkJaWYgKFNMSklUX1VOTElLRUxZKGZsYWdzICYgQVJHX1RFU1QpKQorCQkJcmV0dXJuIDE7CisKKwkJYXJndyAmPSAweDM7CisJCW90aGVyX3IgPSBPRkZTX1JFRyhhcmcpOworCQlhcmcgJj0gMHhmOworCisJCWlmICghYXJndyAmJiBJU18zX0xPX1JFR1MocmVnLCBhcmcsIG90aGVyX3IpKQorCQkJRkFJTF9JRihwdXNoX2luc3QxNihjb21waWxlciwgc2xqaXRfbWVtMTZbZmxhZ3NdIHwgUkQzKHJlZykgfCBSTjMoYXJnKSB8IFJNMyhvdGhlcl9yKSkpOworCQllbHNlCisJCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBzbGppdF9tZW0zMltmbGFnc10gfCBSVDQocmVnKSB8IFJONChhcmcpIHwgUk00KG90aGVyX3IpIHwgKGFyZ3cgPDwgNCkpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmICghKGFyZyAmIFJFR19NQVNLKSB8fCBhcmd3ID4gMHhmZmYgfHwgYXJndyA8IC0weGZmKQorCQlyZXR1cm4gMDsKKworCWlmIChTTEpJVF9VTkxJS0VMWShmbGFncyAmIEFSR19URVNUKSkKKwkJcmV0dXJuIDE7CisKKwlhcmcgJj0gMHhmOworCWlmIChJU18yX0xPX1JFR1MocmVnLCBhcmcpICYmIHNsaml0X21lbTE2X2ltbTVbZmxhZ3NdKSB7CisJCXNoaWZ0ID0gMzsKKwkJaWYgKElTX1dPUkRfU0laRShmbGFncykpIHsKKwkJCWlmIChPRkZTRVRfQ0hFQ0soMHgxZiwgMikpCisJCQkJc2hpZnQgPSAyOworCQl9CisJCWVsc2UgaWYgKGZsYWdzICYgQllURV9TSVpFKQorCQl7CisJCQlpZiAoT0ZGU0VUX0NIRUNLKDB4MWYsIDApKQorCQkJCXNoaWZ0ID0gMDsKKwkJfQorCQllbHNlIHsKKwkJCVNMSklUX0FTU0VSVChmbGFncyAmIEhBTEZfU0laRSk7CisJCQlpZiAoT0ZGU0VUX0NIRUNLKDB4MWYsIDEpKQorCQkJCXNoaWZ0ID0gMTsKKwkJfQorCisJCWlmIChzaGlmdCAhPSAzKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBzbGppdF9tZW0xNl9pbW01W2ZsYWdzXSB8IFJEMyhyZWcpIHwgUk4zKGFyZykgfCAoYXJndyA8PCAoNiAtIHNoaWZ0KSkpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCS8qIFNQIGJhc2VkIGltbWVkaWF0ZS4gKi8KKwlpZiAoU0xKSVRfVU5MSUtFTFkoYXJnID09IFNMSklUX1NQKSAmJiBPRkZTRVRfQ0hFQ0soMHhmZiwgMikgJiYgSVNfV09SRF9TSVpFKGZsYWdzKSAmJiByZWdfbWFwW3JlZ10gPD0gNykgeworCQlGQUlMX0lGKHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBTVFJfU1AgfCAoKGZsYWdzICYgU1RPUkUpID8gMCA6IDB4ODAwKSB8IFJETjMocmVnKSB8IChhcmd3ID4+IDIpKSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlpZiAoYXJndyA+PSAwKQorCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBzbGppdF9tZW0zMltmbGFnc10gfCBNRU1fSU1NMTIgfCBSVDQocmVnKSB8IFJONChhcmcpIHwgYXJndykpOworCWVsc2UKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgc2xqaXRfbWVtMzJbZmxhZ3NdIHwgTUVNX0lNTTggfCBSVDQocmVnKSB8IFJONChhcmcpIHwgLWFyZ3cpKTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qIHNlZSBnZXRwdXRfYXJnIGJlbG93LgorICAgTm90ZTogY2FuX2NhY2hlIGlzIGNhbGxlZCBvbmx5IGZvciBiaW5hcnkgb3BlcmF0b3JzLiBUaG9zZQorICAgb3BlcmF0b3JzIGFsd2F5cyB1c2VzIHdvcmQgYXJndW1lbnRzIHdpdGhvdXQgd3JpdGUgYmFjay4gKi8KK3N0YXRpYyBzbGppdF9zaSBjYW5fY2FjaGUoc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zaSBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQoreworCXNsaml0X3N3IGRpZmY7CisJaWYgKChhcmcgJiBPRkZTX1JFR19NQVNLKSB8fCAhKG5leHRfYXJnICYgU0xKSVRfTUVNKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIShhcmcgJiBSRUdfTUFTSykpIHsKKwkJZGlmZiA9IGFyZ3cgLSBuZXh0X2FyZ3c7CisJCWlmIChkaWZmIDw9IDB4ZmZmICYmIGRpZmYgPj0gLTB4ZmZmKQorCQkJcmV0dXJuIDE7CisJCXJldHVybiAwOworCX0KKworCWlmIChhcmd3ID09IG5leHRfYXJndykKKwkJcmV0dXJuIDE7CisKKwlkaWZmID0gYXJndyAtIG5leHRfYXJndzsKKwlpZiAoYXJnID09IG5leHRfYXJnICYmIGRpZmYgPD0gMHhmZmYgJiYgZGlmZiA+PSAtMHhmZmYpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEVtaXQgdGhlIG5lY2Vzc2FyeSBpbnN0cnVjdGlvbnMuIFNlZSBjYW5fY2FjaGUgYWJvdmUuICovCitzdGF0aWMgc2xqaXRfc2kgZ2V0cHV0X2FyZyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLAorCXNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfc2kgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKK3sKKwlzbGppdF9zaSB0bXBfciwgb3RoZXJfcjsKKwlzbGppdF9zdyBkaWZmOworCisJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CisJaWYgKCEobmV4dF9hcmcgJiBTTEpJVF9NRU0pKSB7CisJCW5leHRfYXJnID0gMDsKKwkJbmV4dF9hcmd3ID0gMDsKKwl9CisKKwl0bXBfciA9IChmbGFncyAmIFNUT1JFKSA/IFRNUF9SRUczIDogcmVnOworCisJaWYgKFNMSklUX1VOTElLRUxZKChmbGFncyAmIFVQREFURSkgJiYgKGFyZyAmIFJFR19NQVNLKSkpIHsKKwkJLyogVXBkYXRlIG9ubHkgYXBwbGllcyBpZiBhIGJhc2UgcmVnaXN0ZXIgZXhpc3RzLiAqLworCQkvKiBUaGVyZSBpcyBubyBjYWNoaW5nIGhlcmUuICovCisJCW90aGVyX3IgPSBPRkZTX1JFRyhhcmcpOworCQlhcmcgJj0gMHhmOworCQlmbGFncyAmPSB+VVBEQVRFOworCisJCWlmICghb3RoZXJfcikgeworCQkJaWYgKCEoYXJndyAmIH4weGZmZikpIHsKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBzbGppdF9tZW0zMltmbGFnc10gfCBNRU1fSU1NMTIgfCBSVDQocmVnKSB8IFJONChhcmcpIHwgYXJndykpOworCQkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgQUREV0kgfCBSRDQoYXJnKSB8IFJONChhcmcpIHwgSU1NMTIoYXJndykpOworCQkJfQorCisJCQlpZiAoY29tcGlsZXItPmNhY2hlX2FyZyA9PSBTTEpJVF9NRU0pIHsKKwkJCQlpZiAoYXJndyA9PSBjb21waWxlci0+Y2FjaGVfYXJndykgeworCQkJCQlvdGhlcl9yID0gVE1QX1JFRzM7CisJCQkJCWFyZ3cgPSAwOworCQkJCX0KKwkJCQllbHNlIGlmIChlbWl0X3NldF9kZWx0YShjb21waWxlciwgVE1QX1JFRzMsIFRNUF9SRUczLCBhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cpICE9IFNMSklUX0VSUl9VTlNVUFBPUlRFRCkgeworCQkJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJCQkJb3RoZXJfciA9IFRNUF9SRUczOworCQkJCQlhcmd3ID0gMDsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChhcmd3KSB7CisJCQkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzMsIGFyZ3cpKTsKKwkJCQljb21waWxlci0+Y2FjaGVfYXJnID0gU0xKSVRfTUVNOworCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJCQlvdGhlcl9yID0gVE1QX1JFRzM7CisJCQkJYXJndyA9IDA7CisJCQl9CisJCX0KKworCQlhcmd3ICY9IDB4MzsKKwkJaWYgKCFhcmd3ICYmIElTXzNfTE9fUkVHUyhyZWcsIGFyZywgb3RoZXJfcikpIHsKKwkJCUZBSUxfSUYocHVzaF9pbnN0MTYoY29tcGlsZXIsIHNsaml0X21lbTE2W2ZsYWdzXSB8IFJEMyhyZWcpIHwgUk4zKGFyZykgfCBSTTMob3RoZXJfcikpKTsKKwkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgQUREIHwgU0VUX1JFR1M0NChhcmcsIG90aGVyX3IpKTsKKwkJfQorCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBzbGppdF9tZW0zMltmbGFnc10gfCBSVDQocmVnKSB8IFJONChhcmcpIHwgUk00KG90aGVyX3IpIHwgKGFyZ3cgPDwgNCkpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBBRERfVyB8IFJENChhcmcpIHwgUk40KGFyZykgfCBSTTQob3RoZXJfcikgfCAoYXJndyA8PCA2KSk7CisJfQorCWZsYWdzICY9IH5VUERBVEU7CisKKwlTTEpJVF9BU1NFUlQoIShhcmcgJiBPRkZTX1JFR19NQVNLKSk7CisKKwlpZiAoY29tcGlsZXItPmNhY2hlX2FyZyA9PSBhcmcpIHsKKwkJZGlmZiA9IGFyZ3cgLSBjb21waWxlci0+Y2FjaGVfYXJndzsKKwkJaWYgKCEoZGlmZiAmIH4weGZmZikpCisJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIHNsaml0X21lbTMyW2ZsYWdzXSB8IE1FTV9JTU0xMiB8IFJUNChyZWcpIHwgUk40KFRNUF9SRUczKSB8IGRpZmYpOworCQlpZiAoISgoY29tcGlsZXItPmNhY2hlX2FyZ3cgLSBhcmd3KSAmIH4weGZmKSkKKwkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgc2xqaXRfbWVtMzJbZmxhZ3NdIHwgTUVNX0lNTTggfCBSVDQocmVnKSB8IFJONChUTVBfUkVHMykgfCAoY29tcGlsZXItPmNhY2hlX2FyZ3cgLSBhcmd3KSk7CisJCWlmIChlbWl0X3NldF9kZWx0YShjb21waWxlciwgVE1QX1JFRzMsIFRNUF9SRUczLCBkaWZmKSAhPSBTTEpJVF9FUlJfVU5TVVBQT1JURUQpIHsKKwkJCUZBSUxfSUYoY29tcGlsZXItPmVycm9yKTsKKwkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgc2xqaXRfbWVtMzJbZmxhZ3NdIHwgTUVNX0lNTTEyIHwgUlQ0KHJlZykgfCBSTjQoVE1QX1JFRzMpIHwgMCk7CisJCX0KKwl9CisKKwluZXh0X2FyZyA9IChhcmcgJiBSRUdfTUFTSykgJiYgKGFyZyA9PSBuZXh0X2FyZykgJiYgKGFyZ3cgIT0gbmV4dF9hcmd3KTsKKwlhcmcgJj0gMHhmOworCWlmIChhcmcgJiYgY29tcGlsZXItPmNhY2hlX2FyZyA9PSBTTEpJVF9NRU0pIHsKKwkJaWYgKGNvbXBpbGVyLT5jYWNoZV9hcmd3ID09IGFyZ3cpCisJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIHNsaml0X21lbTMyW2ZsYWdzXSB8IFJUNChyZWcpIHwgUk40KGFyZykgfCBSTTQoVE1QX1JFRzMpKTsKKwkJaWYgKGVtaXRfc2V0X2RlbHRhKGNvbXBpbGVyLCBUTVBfUkVHMywgVE1QX1JFRzMsIGFyZ3cgLSBjb21waWxlci0+Y2FjaGVfYXJndykgIT0gU0xKSVRfRVJSX1VOU1VQUE9SVEVEKSB7CisJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCQljb21waWxlci0+Y2FjaGVfYXJndyA9IGFyZ3c7CisJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIHNsaml0X21lbTMyW2ZsYWdzXSB8IFJUNChyZWcpIHwgUk40KGFyZykgfCBSTTQoVE1QX1JFRzMpKTsKKwkJfQorCX0KKworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwlpZiAobmV4dF9hcmcgJiYgZW1pdF9zZXRfZGVsdGEoY29tcGlsZXIsIFRNUF9SRUczLCBhcmcsIGFyZ3cpICE9IFNMSklUX0VSUl9VTlNVUFBPUlRFRCkgeworCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBTTEpJVF9NRU0gfCBhcmc7CisJCWFyZyA9IDA7CisJfQorCWVsc2UgeworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMywgYXJndykpOworCQljb21waWxlci0+Y2FjaGVfYXJnID0gU0xKSVRfTUVNOworCisJCWRpZmYgPSBhcmd3IC0gbmV4dF9hcmd3OworCQlpZiAobmV4dF9hcmcgJiYgZGlmZiA8PSAweGZmZiAmJiBkaWZmID49IC0weGZmZikgeworCQkJRkFJTF9JRihwdXNoX2luc3QxNihjb21waWxlciwgQUREIHwgU0VUX1JFR1M0NChUTVBfUkVHMywgYXJnKSkpOworCQkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX01FTSB8IGFyZzsKKwkJCWFyZyA9IDA7CisJCX0KKwl9CisKKwlpZiAoYXJnKQorCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIHNsaml0X21lbTMyW2ZsYWdzXSB8IFJUNChyZWcpIHwgUk40KGFyZykgfCBSTTQoVE1QX1JFRzMpKTsKKwlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIHNsaml0X21lbTMyW2ZsYWdzXSB8IE1FTV9JTU0xMiB8IFJUNChyZWcpIHwgUk40KFRNUF9SRUczKSB8IDApOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfb3BfbWVtKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndykKK3sKKwlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcsIGFyZ3cpKQorCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKwlyZXR1cm4gZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnLCBhcmd3LCAwLCAwKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X29wX21lbTIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnMSwgc2xqaXRfc3cgYXJnMXcsIHNsaml0X3NpIGFyZzIsIHNsaml0X3N3IGFyZzJ3KQoreworCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZzEsIGFyZzF3KSkKKwkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKKwlyZXR1cm4gZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnMSwgYXJnMXcsIGFyZzIsIGFyZzJ3KTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgRW50cnksIGV4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAorCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCit7CisJc2xqaXRfc2kgc2l6ZSwgaSwgdG1wOworCXNsaml0X2lucyBwdXNoOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2VudGVyKGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSkpOworCXNldF9lbWl0X2VudGVyKGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSk7CisKKwlwdXNoID0gKDEgPDwgNCk7CisKKwl0bXAgPSBzYXZlZHMgPCBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTID8gKFNMSklUX1MwICsgMSAtIHNhdmVkcykgOiBTTEpJVF9GSVJTVF9TQVZFRF9SRUc7CisJZm9yIChpID0gU0xKSVRfUzA7IGkgPj0gdG1wOyBpLS0pCisJCXB1c2ggfD0gMSA8PCByZWdfbWFwW2ldOworCisJZm9yIChpID0gc2NyYXRjaGVzOyBpID49IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsgaS0tKQorCQlwdXNoIHw9IDEgPDwgcmVnX21hcFtpXTsKKworCUZBSUxfSUYoKHB1c2ggJiAweGZmMDApCisJCT8gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFBVU0hfVyB8ICgxIDw8IDE0KSB8IHB1c2gpCisJCTogcHVzaF9pbnN0MTYoY29tcGlsZXIsIFBVU0ggfCAoMSA8PCA4KSB8IHB1c2gpKTsKKworCS8qIFN0YWNrIG11c3QgYmUgYWxpZ25lZCB0byA4IGJ5dGVzOiAoTFIsIFI0KSAqLworCXNpemUgPSBHRVRfU0FWRURfUkVHSVNURVJTX1NJWkUoc2NyYXRjaGVzLCBzYXZlZHMsIDIpOworCWxvY2FsX3NpemUgPSAoKHNpemUgKyBsb2NhbF9zaXplICsgNykgJiB+NykgLSBzaXplOworCWNvbXBpbGVyLT5sb2NhbF9zaXplID0gbG9jYWxfc2l6ZTsKKwlpZiAobG9jYWxfc2l6ZSA+IDApIHsKKwkJaWYgKGxvY2FsX3NpemUgPD0gKDEyNyA8PCAyKSkKKwkJCUZBSUxfSUYocHVzaF9pbnN0MTYoY29tcGlsZXIsIFNVQl9TUCB8IChsb2NhbF9zaXplID4+IDIpKSk7CisJCWVsc2UKKwkJCUZBSUxfSUYoZW1pdF9vcF9pbW0oY29tcGlsZXIsIFNMSklUX1NVQiB8IEFSRzJfSU1NLCBTTEpJVF9TUCwgU0xKSVRfU1AsIGxvY2FsX3NpemUpKTsKKwl9CisKKwlpZiAoYXJncyA+PSAxKQorCQlGQUlMX0lGKHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBNT1YgfCBTRVRfUkVHUzQ0KFNMSklUX1MwLCBTTEpJVF9SMCkpKTsKKwlpZiAoYXJncyA+PSAyKQorCQlGQUlMX0lGKHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBNT1YgfCBTRVRfUkVHUzQ0KFNMSklUX1MxLCBTTEpJVF9SMSkpKTsKKwlpZiAoYXJncyA+PSAzKQorCQlGQUlMX0lGKHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBNT1YgfCBTRVRfUkVHUzQ0KFNMSklUX1MyLCBTTEpJVF9SMikpKTsKKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKKwlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQoreworCXNsaml0X3NpIHNpemU7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X3NldF9jb250ZXh0KGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSkpOworCXNldF9zZXRfY29udGV4dChjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpOworCisJc2l6ZSA9IEdFVF9TQVZFRF9SRUdJU1RFUlNfU0laRShzY3JhdGNoZXMsIHNhdmVkcywgMik7CisJY29tcGlsZXItPmxvY2FsX3NpemUgPSAoKHNpemUgKyBsb2NhbF9zaXplICsgNykgJiB+NykgLSBzaXplOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBpLCB0bXA7CisJc2xqaXRfaW5zIHBvcDsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9yZXR1cm4oY29tcGlsZXIsIG9wLCBzcmMsIHNyY3cpKTsKKworCUZBSUxfSUYoZW1pdF9tb3ZfYmVmb3JlX3JldHVybihjb21waWxlciwgb3AsIHNyYywgc3JjdykpOworCisJaWYgKGNvbXBpbGVyLT5sb2NhbF9zaXplID4gMCkgeworCQlpZiAoY29tcGlsZXItPmxvY2FsX3NpemUgPD0gKDEyNyA8PCAyKSkKKwkJCUZBSUxfSUYocHVzaF9pbnN0MTYoY29tcGlsZXIsIEFERF9TUCB8IChjb21waWxlci0+bG9jYWxfc2l6ZSA+PiAyKSkpOworCQllbHNlCisJCQlGQUlMX0lGKGVtaXRfb3BfaW1tKGNvbXBpbGVyLCBTTEpJVF9BREQgfCBBUkcyX0lNTSwgU0xKSVRfU1AsIFNMSklUX1NQLCBjb21waWxlci0+bG9jYWxfc2l6ZSkpOworCX0KKworCXBvcCA9ICgxIDw8IDQpOworCisJdG1wID0gY29tcGlsZXItPnNhdmVkcyA8IFNMSklUX05VTUJFUl9PRl9TQVZFRF9SRUdJU1RFUlMgPyAoU0xKSVRfUzAgKyAxIC0gY29tcGlsZXItPnNhdmVkcykgOiBTTEpJVF9GSVJTVF9TQVZFRF9SRUc7CisJZm9yIChpID0gU0xKSVRfUzA7IGkgPj0gdG1wOyBpLS0pCisJCXBvcCB8PSAxIDw8IHJlZ19tYXBbaV07CisKKwlmb3IgKGkgPSBjb21waWxlci0+c2NyYXRjaGVzOyBpID49IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsgaS0tKQorCQlwb3AgfD0gMSA8PCByZWdfbWFwW2ldOworCisJcmV0dXJuIChwb3AgJiAweGZmMDApCisJCT8gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFBPUF9XIHwgKDEgPDwgMTUpIHwgcG9wKQorCQk6IHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBQT1AgfCAoMSA8PCA4KSB8IHBvcCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIE9wZXJhdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0dOVUNfXykKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19hZWFiaV91aWRpdm1vZCh1bnNpZ25lZCBpbnQgbnVtZXJhdG9yLCBpbnQgdW5zaWduZWQgZGVub21pbmF0b3IpOworZXh0ZXJuIGludCBfX2FlYWJpX2lkaXZtb2QoaW50IG51bWVyYXRvciwgaW50IGRlbm9taW5hdG9yKTsKKyNlbHNlCisjZXJyb3IgIlNvZnR3YXJlIGRpdm1vZCBmdW5jdGlvbnMgYXJlIG5lZWRlZCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3ApCit7CisJc2xqaXRfc3cgc2F2ZWRfcmVnX2xpc3RbM107CisJc2xqaXRfc3cgc2F2ZWRfcmVnX2NvdW50OworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMChjb21waWxlciwgb3ApKTsKKworCW9wID0gR0VUX09QQ09ERShvcCk7CisJc3dpdGNoIChvcCkgeworCWNhc2UgU0xKSVRfQlJFQUtQT0lOVDoKKwkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBCS1BUKTsKKwljYXNlIFNMSklUX05PUDoKKwkJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBOT1ApOworCWNhc2UgU0xKSVRfTFVNVUw6CisJY2FzZSBTTEpJVF9MU01VTDoKKwkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCAob3AgPT0gU0xKSVRfTFVNVUwgPyBVTVVMTCA6IFNNVUxMKQorCQkJfCAocmVnX21hcFtTTEpJVF9SMV0gPDwgOCkKKwkJCXwgKHJlZ19tYXBbU0xKSVRfUjBdIDw8IDEyKQorCQkJfCAocmVnX21hcFtTTEpJVF9SMF0gPDwgMTYpCisJCQl8IHJlZ19tYXBbU0xKSVRfUjFdKTsKKwljYXNlIFNMSklUX1VESVZNT0Q6CisJY2FzZSBTTEpJVF9TRElWTU9EOgorCWNhc2UgU0xKSVRfVURJVkk6CisJY2FzZSBTTEpJVF9TRElWSToKKwkJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX1VESVZNT0QgJiAweDIpID09IDAgJiYgU0xKSVRfVURJVkkgLSAweDIgPT0gU0xKSVRfVURJVk1PRCwgYmFkX2Rpdl9vcGNvZGVfYXNzaWdubWVudHMpOworCQlTTEpJVF9DT01QSUxFX0FTU0VSVChyZWdfbWFwWzJdID09IDEgJiYgcmVnX21hcFszXSA9PSAyICYmIHJlZ19tYXBbNF0gPT0gMTIsIGJhZF9yZWdpc3Rlcl9tYXBwaW5nKTsKKworCQlzYXZlZF9yZWdfY291bnQgPSAwOworCQlpZiAoY29tcGlsZXItPnNjcmF0Y2hlcyA+PSA0KQorCQkJc2F2ZWRfcmVnX2xpc3Rbc2F2ZWRfcmVnX2NvdW50KytdID0gMTI7CisJCWlmIChjb21waWxlci0+c2NyYXRjaGVzID49IDMpCisJCQlzYXZlZF9yZWdfbGlzdFtzYXZlZF9yZWdfY291bnQrK10gPSAyOworCQlpZiAob3AgPj0gU0xKSVRfVURJVkkpCisJCQlzYXZlZF9yZWdfbGlzdFtzYXZlZF9yZWdfY291bnQrK10gPSAxOworCisJCWlmIChzYXZlZF9yZWdfY291bnQgPiAwKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCAweGY4NGQwZDAwIHwgKHNhdmVkX3JlZ19jb3VudCA+PSAzID8gMTYgOiA4KQorCQkJCQkJfCAoc2F2ZWRfcmVnX2xpc3RbMF0gPDwgMTIpIC8qIHN0ciByWCwgW3NwLCAjLTgvLTE2XSEgKi8pKTsKKwkJCWlmIChzYXZlZF9yZWdfY291bnQgPj0gMikgeworCQkJCVNMSklUX0FTU0VSVChzYXZlZF9yZWdfbGlzdFsxXSA8IDgpOworCQkJCUZBSUxfSUYocHVzaF9pbnN0MTYoY29tcGlsZXIsIDB4OTAwMSB8IChzYXZlZF9yZWdfbGlzdFsxXSA8PCA4KSAvKiBzdHIgclgsIFtzcCwgIzRdICovKSk7CisJCQl9CisJCQlpZiAoc2F2ZWRfcmVnX2NvdW50ID49IDMpIHsKKwkJCQlTTEpJVF9BU1NFUlQoc2F2ZWRfcmVnX2xpc3RbMl0gPCA4KTsKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdDE2KGNvbXBpbGVyLCAweDkwMDIgfCAoc2F2ZWRfcmVnX2xpc3RbMl0gPDwgOCkgLyogc3RyIHJYLCBbc3AsICM4XSAqLykpOworCQkJfQorCQl9CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKQorCQlGQUlMX0lGKHNsaml0X2VtaXRfaWp1bXAoY29tcGlsZXIsIFNMSklUX0ZBU1RfQ0FMTCwgU0xKSVRfSU1NLAorCQkJKChvcCB8IDB4MikgPT0gU0xKSVRfVURJVkkgPyBTTEpJVF9GVU5DX09GRlNFVChfX2FlYWJpX3VpZGl2bW9kKSA6IFNMSklUX0ZVTkNfT0ZGU0VUKF9fYWVhYmlfaWRpdm1vZCkpKSk7CisjZWxzZQorI2Vycm9yICJTb2Z0d2FyZSBkaXZtb2QgZnVuY3Rpb25zIGFyZSBuZWVkZWQiCisjZW5kaWYKKworCQlpZiAoc2F2ZWRfcmVnX2NvdW50ID4gMCkgeworCQkJaWYgKHNhdmVkX3JlZ19jb3VudCA+PSAzKSB7CisJCQkJU0xKSVRfQVNTRVJUKHNhdmVkX3JlZ19saXN0WzJdIDwgOCk7CisJCQkJRkFJTF9JRihwdXNoX2luc3QxNihjb21waWxlciwgMHg5ODAyIHwgKHNhdmVkX3JlZ19saXN0WzJdIDw8IDgpIC8qIGxkciByWCwgW3NwLCAjOF0gKi8pKTsKKwkJCX0KKwkJCWlmIChzYXZlZF9yZWdfY291bnQgPj0gMikgeworCQkJCVNMSklUX0FTU0VSVChzYXZlZF9yZWdfbGlzdFsxXSA8IDgpOworCQkJCUZBSUxfSUYocHVzaF9pbnN0MTYoY29tcGlsZXIsIDB4OTgwMSB8IChzYXZlZF9yZWdfbGlzdFsxXSA8PCA4KSAvKiBsZHIgclgsIFtzcCwgIzRdICovKSk7CisJCQl9CisJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIDB4Zjg1ZDBiMDAgfCAoc2F2ZWRfcmVnX2NvdW50ID49IDMgPyAxNiA6IDgpCisJCQkJCQl8IChzYXZlZF9yZWdfbGlzdFswXSA8PCAxMikgLyogbGRyIHJYLCBbc3BdLCAjOC8xNiAqLyk7CisJCX0KKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXNsaml0X3NpIGRzdF9yLCBmbGFnczsKKwlzbGppdF9zaSBvcF9mbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMShjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKworCWRzdF9yID0gU0xPV19JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcxOworCisJb3AgPSBHRVRfT1BDT0RFKG9wKTsKKwlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfUCkgeworCQlzd2l0Y2ggKG9wKSB7CisJCWNhc2UgU0xKSVRfTU9WOgorCQljYXNlIFNMSklUX01PVl9VSToKKwkJY2FzZSBTTEpJVF9NT1ZfU0k6CisJCWNhc2UgU0xKSVRfTU9WX1A6CisJCQlmbGFncyA9IFdPUkRfU0laRTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVl9VQjoKKwkJCWZsYWdzID0gQllURV9TSVpFOworCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJCQlzcmN3ID0gKHNsaml0X3ViKXNyY3c7CisJCQlicmVhazsKKwkJY2FzZSBTTEpJVF9NT1ZfU0I6CisJCQlmbGFncyA9IEJZVEVfU0laRSB8IFNJR05FRDsKKwkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCisJCQkJc3JjdyA9IChzbGppdF9zYilzcmN3OworCQkJYnJlYWs7CisJCWNhc2UgU0xKSVRfTU9WX1VIOgorCQkJZmxhZ3MgPSBIQUxGX1NJWkU7CisJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQorCQkJCXNyY3cgPSAoc2xqaXRfdWgpc3JjdzsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVl9TSDoKKwkJCWZsYWdzID0gSEFMRl9TSVpFIHwgU0lHTkVEOworCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJCQlzcmN3ID0gKHNsaml0X3NoKXNyY3c7CisJCQlicmVhazsKKwkJY2FzZSBTTEpJVF9NT1ZVOgorCQljYXNlIFNMSklUX01PVlVfVUk6CisJCWNhc2UgU0xKSVRfTU9WVV9TSToKKwkJY2FzZSBTTEpJVF9NT1ZVX1A6CisJCQlmbGFncyA9IFdPUkRfU0laRSB8IFVQREFURTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVlVfVUI6CisJCQlmbGFncyA9IEJZVEVfU0laRSB8IFVQREFURTsKKwkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCisJCQkJc3JjdyA9IChzbGppdF91YilzcmN3OworCQkJYnJlYWs7CisJCWNhc2UgU0xKSVRfTU9WVV9TQjoKKwkJCWZsYWdzID0gQllURV9TSVpFIHwgU0lHTkVEIHwgVVBEQVRFOworCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJCQlzcmN3ID0gKHNsaml0X3NiKXNyY3c7CisJCQlicmVhazsKKwkJY2FzZSBTTEpJVF9NT1ZVX1VIOgorCQkJZmxhZ3MgPSBIQUxGX1NJWkUgfCBVUERBVEU7CisJCQlpZiAoc3JjICYgU0xKSVRfSU1NKQorCQkJCXNyY3cgPSAoc2xqaXRfdWgpc3JjdzsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVlVfU0g6CisJCQlmbGFncyA9IEhBTEZfU0laRSB8IFNJR05FRCB8IFVQREFURTsKKwkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCisJCQkJc3JjdyA9IChzbGppdF9zaClzcmN3OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlTTEpJVF9BU1NFUlRfU1RPUCgpOworCQkJZmxhZ3MgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoc3JjICYgU0xKSVRfSU1NKQorCQkJRkFJTF9JRihlbWl0X29wX2ltbShjb21waWxlciwgU0xKSVRfTU9WIHwgQVJHMl9JTU0sIGRzdF9yLCBUTVBfUkVHMSwgc3JjdykpOworCQllbHNlIGlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzLCBkc3Rfciwgc3JjLCBzcmN3KSkKKwkJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCQllbHNlCisJCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncywgZHN0X3IsIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CisJCX0gZWxzZSB7CisJCQlpZiAoZHN0X3IgIT0gVE1QX1JFRzEpCisJCQkJcmV0dXJuIGVtaXRfb3BfaW1tKGNvbXBpbGVyLCBvcCwgZHN0X3IsIFRNUF9SRUcxLCBzcmMpOworCQkJZHN0X3IgPSBzcmM7CisJCX0KKworCQlpZiAoZHN0ICYgU0xKSVRfTUVNKSB7CisJCQlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncyB8IFNUT1JFLCBkc3RfciwgZHN0LCBkc3R3KSkKKwkJCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOworCQkJZWxzZQorCQkJCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncyB8IFNUT1JFLCBkc3RfciwgZHN0LCBkc3R3LCAwLCAwKTsKKwkJfQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwlpZiAob3AgPT0gU0xKSVRfTkVHKSB7CisjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKSBcCisJCQl8fCAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCQljb21waWxlci0+c2tpcF9jaGVja3MgPSAxOworI2VuZGlmCisJCXJldHVybiBzbGppdF9lbWl0X29wMihjb21waWxlciwgU0xKSVRfU1VCIHwgb3BfZmxhZ3MsIGRzdCwgZHN0dywgU0xKSVRfSU1NLCAwLCBzcmMsIHNyY3cpOworCX0KKworCWZsYWdzID0gKEdFVF9GTEFHUyhvcF9mbGFncykgPyBTRVRfRkxBR1MgOiAwKSB8ICgob3BfZmxhZ3MgJiBTTEpJVF9LRUVQX0ZMQUdTKSA/IEtFRVBfRkxBR1MgOiAwKTsKKwlpZiAoc3JjICYgU0xKSVRfTUVNKSB7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIFdPUkRfU0laRSwgVE1QX1JFRzIsIHNyYywgc3JjdykpCisJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCWVsc2UKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgV09SRF9TSVpFLCBUTVBfUkVHMiwgc3JjLCBzcmN3LCBkc3QsIGRzdHcpKTsKKwkJc3JjID0gVE1QX1JFRzI7CisJfQorCisJaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJZmxhZ3MgfD0gQVJHMl9JTU07CisJZWxzZQorCQlzcmN3ID0gc3JjOworCisJZW1pdF9vcF9pbW0oY29tcGlsZXIsIGZsYWdzIHwgb3AsIGRzdF9yLCBUTVBfUkVHMSwgc3Jjdyk7CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKSB7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzIHwgU1RPUkUsIGRzdF9yLCBkc3QsIGRzdHcpKQorCQkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKKwkJZWxzZQorCQkJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzIHwgU1RPUkUsIGRzdF9yLCBkc3QsIGRzdHcsIDAsIDApOworCX0KKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlzbGppdF9zaSBkc3RfciwgZmxhZ3M7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMxLCBzcmMxdyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMyLCBzcmMydyk7CisKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisKKwlkc3RfciA9IFNMT1dfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfUkVHMTsKKwlmbGFncyA9IChHRVRfRkxBR1Mob3ApID8gU0VUX0ZMQUdTIDogMCkgfCAoKG9wICYgU0xKSVRfS0VFUF9GTEFHUykgPyBLRUVQX0ZMQUdTIDogMCk7CisKKwlpZiAoKGRzdCAmIFNMSklUX01FTSkgJiYgIWdldHB1dF9hcmdfZmFzdChjb21waWxlciwgV09SRF9TSVpFIHwgU1RPUkUgfCBBUkdfVEVTVCwgVE1QX1JFRzEsIGRzdCwgZHN0dykpCisJCWZsYWdzIHw9IFNMT1dfREVTVDsKKworCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIFdPUkRfU0laRSwgVE1QX1JFRzEsIHNyYzEsIHNyYzF3KSkKKwkJCUZBSUxfSUYoY29tcGlsZXItPmVycm9yKTsKKwkJZWxzZQorCQkJZmxhZ3MgfD0gU0xPV19TUkMxOworCX0KKwlpZiAoc3JjMiAmIFNMSklUX01FTSkgeworCQlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBXT1JEX1NJWkUsIFRNUF9SRUcyLCBzcmMyLCBzcmMydykpCisJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCWVsc2UKKwkJCWZsYWdzIHw9IFNMT1dfU1JDMjsKKwl9CisKKwlpZiAoKGZsYWdzICYgKFNMT1dfU1JDMSB8IFNMT1dfU1JDMikpID09IChTTE9XX1NSQzEgfCBTTE9XX1NSQzIpKSB7CisJCWlmICghY2FuX2NhY2hlKHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykgJiYgY2FuX2NhY2hlKHNyYzEsIHNyYzF3LCBkc3QsIGRzdHcpKSB7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIFdPUkRfU0laRSwgVE1QX1JFRzIsIHNyYzIsIHNyYzJ3LCBzcmMxLCBzcmMxdykpOworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBXT1JEX1NJWkUsIFRNUF9SRUcxLCBzcmMxLCBzcmMxdywgZHN0LCBkc3R3KSk7CisJCX0KKwkJZWxzZSB7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIFdPUkRfU0laRSwgVE1QX1JFRzEsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBXT1JEX1NJWkUsIFRNUF9SRUcyLCBzcmMyLCBzcmMydywgZHN0LCBkc3R3KSk7CisJCX0KKwl9CisJZWxzZSBpZiAoZmxhZ3MgJiBTTE9XX1NSQzEpCisJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgV09SRF9TSVpFLCBUTVBfUkVHMSwgc3JjMSwgc3JjMXcsIGRzdCwgZHN0dykpOworCWVsc2UgaWYgKGZsYWdzICYgU0xPV19TUkMyKQorCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIFdPUkRfU0laRSwgVE1QX1JFRzIsIHNyYzIsIHNyYzJ3LCBkc3QsIGRzdHcpKTsKKworCWlmIChzcmMxICYgU0xKSVRfTUVNKQorCQlzcmMxID0gVE1QX1JFRzE7CisJaWYgKHNyYzIgJiBTTEpJVF9NRU0pCisJCXNyYzIgPSBUTVBfUkVHMjsKKworCWlmIChzcmMxICYgU0xKSVRfSU1NKQorCQlmbGFncyB8PSBBUkcxX0lNTTsKKwllbHNlCisJCXNyYzF3ID0gc3JjMTsKKwlpZiAoc3JjMiAmIFNMSklUX0lNTSkKKwkJZmxhZ3MgfD0gQVJHMl9JTU07CisJZWxzZQorCQlzcmMydyA9IHNyYzI7CisKKwlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkKKwkJZmxhZ3MgfD0gVU5VU0VEX1JFVFVSTjsKKworCWVtaXRfb3BfaW1tKGNvbXBpbGVyLCBmbGFncyB8IEdFVF9PUENPREUob3ApLCBkc3Rfciwgc3JjMXcsIHNyYzJ3KTsKKworCWlmIChkc3QgJiBTTEpJVF9NRU0pIHsKKwkJaWYgKCEoZmxhZ3MgJiBTTE9XX0RFU1QpKSB7CisJCQlnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIFdPUkRfU0laRSB8IFNUT1JFLCBkc3RfciwgZHN0LCBkc3R3KTsKKwkJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CisJCX0KKwkJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIFdPUkRfU0laRSB8IFNUT1JFLCBUTVBfUkVHMSwgZHN0LCBkc3R3LCAwLCAwKTsKKwl9CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQoreworCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CisJcmV0dXJuIHJlZ19tYXBbcmVnXTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCit7CisJQ0hFQ0tfUkVHX0lOREVYKGNoZWNrX3Nsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChyZWcpKTsKKwlyZXR1cm4gcmVnIDw8IDE7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wX2N1c3RvbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXZvaWQgKmluc3RydWN0aW9uLCBzbGppdF9zaSBzaXplKQoreworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcF9jdXN0b20oY29tcGlsZXIsIGluc3RydWN0aW9uLCBzaXplKSk7CisKKwlpZiAoc2l6ZSA9PSAyKQorCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsICooc2xqaXRfdWgqKWluc3RydWN0aW9uKTsKKwlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsICooc2xqaXRfaW5zKilpbnN0cnVjdGlvbik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIEZsb2F0aW5nIHBvaW50IG9wZXJhdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKK3sKKyNpZmRlZiBTTEpJVF9JU19GUFVfQVZBSUxBQkxFCisJcmV0dXJuIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEU7CisjZWxzZQorCS8qIEF2YWlsYWJsZSBieSBkZWZhdWx0LiAqLworCXJldHVybiAxOworI2VuZGlmCit9CisKKyNkZWZpbmUgRlBVX0xPQUQgKDEgPDwgMjApCisKK3N0YXRpYyBzbGppdF9zaSBlbWl0X2ZvcF9tZW0oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3KQoreworCXNsaml0X3N3IHRtcDsKKwlzbGppdF91dyBpbW07CisJc2xqaXRfc3cgaW5zdCA9IFZTVFJfRjMyIHwgKGZsYWdzICYgKFNMSklUX1NJTkdMRV9PUCB8IEZQVV9MT0FEKSk7CisKKwlTTEpJVF9BU1NFUlQoYXJnICYgU0xKSVRfTUVNKTsKKworCS8qIEZhc3QgbG9hZHMgYW5kIHN0b3Jlcy4gKi8KKwlpZiAoU0xKSVRfVU5MSUtFTFkoYXJnICYgT0ZGU19SRUdfTUFTSykpIHsKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgQUREX1cgfCBSRDQoVE1QX1JFRzIpIHwgUk40KGFyZyAmIFJFR19NQVNLKSB8IFJNNChPRkZTX1JFRyhhcmcpKSB8ICgoYXJndyAmIDB4MykgPDwgNikpKTsKKwkJYXJnID0gU0xKSVRfTUVNIHwgVE1QX1JFRzI7CisJCWFyZ3cgPSAwOworCX0KKworCWlmICgoYXJnICYgUkVHX01BU0spICYmIChhcmd3ICYgMHgzKSA9PSAwKSB7CisJCWlmICghKGFyZ3cgJiB+MHgzZmMpKQorCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBpbnN0IHwgMHg4MDAwMDAgfCBSTjQoYXJnICYgUkVHX01BU0spIHwgREQ0KHJlZykgfCAoYXJndyA+PiAyKSk7CisJCWlmICghKC1hcmd3ICYgfjB4M2ZjKSkKKwkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgaW5zdCB8IFJONChhcmcgJiBSRUdfTUFTSykgfCBERDQocmVnKSB8ICgtYXJndyA+PiAyKSk7CisJfQorCisJLyogU2xvdyBjYXNlcyAqLworCVNMSklUX0FTU0VSVCghKGFyZyAmIE9GRlNfUkVHX01BU0spKTsKKwlpZiAoY29tcGlsZXItPmNhY2hlX2FyZyA9PSBhcmcpIHsKKwkJdG1wID0gYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3OworCQlpZiAoISh0bXAgJiB+MHgzZmMpKQorCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBpbnN0IHwgMHg4MDAwMDAgfCBSTjQoVE1QX1JFRzMpIHwgREQ0KHJlZykgfCAodG1wID4+IDIpKTsKKwkJaWYgKCEoLXRtcCAmIH4weDNmYykpCisJCQlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIGluc3QgfCBSTjQoVE1QX1JFRzMpIHwgREQ0KHJlZykgfCAoLXRtcCA+PiAyKSk7CisJCWlmIChlbWl0X3NldF9kZWx0YShjb21waWxlciwgVE1QX1JFRzMsIFRNUF9SRUczLCB0bXApICE9IFNMSklUX0VSUl9VTlNVUFBPUlRFRCkgeworCQkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBpbnN0IHwgMHg4MDAwMDAgfCBSTjQoVE1QX1JFRzMpIHwgREQ0KHJlZykpOworCQl9CisJfQorCisJaWYgKGFyZyAmIFJFR19NQVNLKSB7CisJCWlmIChlbWl0X3NldF9kZWx0YShjb21waWxlciwgVE1QX1JFRzEsIGFyZyAmIFJFR19NQVNLLCBhcmd3KSAhPSBTTEpJVF9FUlJfVU5TVVBQT1JURUQpIHsKKwkJCUZBSUxfSUYoY29tcGlsZXItPmVycm9yKTsKKwkJCXJldHVybiBwdXNoX2luc3QzMihjb21waWxlciwgaW5zdCB8IDB4ODAwMDAwIHwgUk40KFRNUF9SRUcxKSB8IERENChyZWcpKTsKKwkJfQorCQlpbW0gPSBnZXRfaW1tKGFyZ3cgJiB+MHgzZmMpOworCQlpZiAoaW1tICE9IElOVkFMSURfSU1NKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBBRERfV0kgfCBSRDQoVE1QX1JFRzEpIHwgUk40KGFyZyAmIFJFR19NQVNLKSB8IGltbSkpOworCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBpbnN0IHwgMHg4MDAwMDAgfCBSTjQoVE1QX1JFRzEpIHwgREQ0KHJlZykgfCAoKGFyZ3cgJiAweDNmYykgPj4gMikpOworCQl9CisJCWltbSA9IGdldF9pbW0oLWFyZ3cgJiB+MHgzZmMpOworCQlpZiAoaW1tICE9IElOVkFMSURfSU1NKSB7CisJCQlhcmd3ID0gLWFyZ3c7CisJCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBTVUJfV0kgfCBSRDQoVE1QX1JFRzEpIHwgUk40KGFyZyAmIFJFR19NQVNLKSB8IGltbSkpOworCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBpbnN0IHwgUk40KFRNUF9SRUcxKSB8IERENChyZWcpIHwgKChhcmd3ICYgMHgzZmMpID4+IDIpKTsKKwkJfQorCX0KKworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBhcmc7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCisJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzMsIGFyZ3cpKTsKKwlpZiAoYXJnICYgUkVHX01BU0spCisJCUZBSUxfSUYocHVzaF9pbnN0MTYoY29tcGlsZXIsIEFERCB8IFNFVF9SRUdTNDQoVE1QX1JFRzMsIChhcmcgJiBSRUdfTUFTSykpKSk7CisJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBpbnN0IHwgMHg4MDAwMDAgfCBSTjQoVE1QX1JFRzMpIHwgREQ0KHJlZykpOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jb252d19mcm9tZChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJRkFJTF9JRihlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBGUFVfTE9BRCwgVE1QX0ZSRUcxLCBzcmMsIHNyY3cpKTsKKwkJc3JjID0gVE1QX0ZSRUcxOworCX0KKworCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIFZDVlRfUzMyX0YzMiB8IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBERDQoVE1QX0ZSRUcxKSB8IERNNChzcmMpKSk7CisKKwlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwlpZiAoRkFTVF9JU19SRUcoZHN0KSkKKwkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWTU9WIHwgKDEgPDwgMjApIHwgUlQ0KGRzdCkgfCBETjQoVE1QX0ZSRUcxKSk7CisKKwkvKiBTdG9yZSB0aGUgaW50ZWdlciB2YWx1ZSBmcm9tIGEgVkZQIHJlZ2lzdGVyLiAqLworCXJldHVybiBlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIDAsIFRNUF9GUkVHMSwgZHN0LCBkc3R3KTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY29udmRfZnJvbXcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzE7CisKKwlpZiAoRkFTVF9JU19SRUcoc3JjKSkKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVk1PViB8IFJUNChzcmMpIHwgRE40KFRNUF9GUkVHMSkpKTsKKwllbHNlIGlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJLyogTG9hZCB0aGUgaW50ZWdlciB2YWx1ZSBpbnRvIGEgVkZQIHJlZ2lzdGVyLiAqLworCQlGQUlMX0lGKGVtaXRfZm9wX21lbShjb21waWxlciwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjLCBzcmN3KSk7CisJfQorCWVsc2UgeworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMSwgc3JjdykpOworCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWTU9WIHwgUlQ0KFRNUF9SRUcxKSB8IERONChUTVBfRlJFRzEpKSk7CisJfQorCisJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVkNWVF9GMzJfUzMyIHwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IERENChkc3RfcikgfCBETTQoVE1QX0ZSRUcxKSkpOworCisJaWYgKGRzdCAmIFNMSklUX01FTSkKKwkJcmV0dXJuIGVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSwgVE1QX0ZSRUcxLCBkc3QsIGRzdHcpOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJaWYgKHNyYzEgJiBTTEpJVF9NRU0pIHsKKwkJZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgRlBVX0xPQUQsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcpOworCQlzcmMxID0gVE1QX0ZSRUcxOworCX0KKworCWlmIChzcmMyICYgU0xKSVRfTUVNKSB7CisJCWVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IEZQVV9MT0FELCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3KTsKKwkJc3JjMiA9IFRNUF9GUkVHMjsKKwl9CisKKwlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWQ01QX0YzMiB8IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBERDQoc3JjMSkgfCBETTQoc3JjMikpKTsKKwlyZXR1cm4gcHVzaF9pbnN0MzIoY29tcGlsZXIsIFZNUlMpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc2xqaXRfc2kgZHN0X3I7CisKKwlDSEVDS19FUlJPUigpOworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKwlpZiAoR0VUX09QQ09ERShvcCkgIT0gU0xKSVRfQ09OVkRfRlJPTVMpCisJCW9wIF49IFNMSklUX1NJTkdMRV9PUDsKKworCVNMSklUX0NPTVBJTEVfQVNTRVJUKChTTEpJVF9TSU5HTEVfT1AgPT0gMHgxMDApLCBmbG9hdF90cmFuc2Zlcl9iaXRfZXJyb3IpOworCVNFTEVDVF9GT1AxX09QRVJBVElPTl9XSVRIX0NIRUNLUyhjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KTsKKworCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9GUkVHMTsKKworCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgRlBVX0xPQUQsIGRzdF9yLCBzcmMsIHNyY3cpOworCQlzcmMgPSBkc3RfcjsKKwl9CisKKwlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7CisJY2FzZSBTTEpJVF9ETU9WOgorCQlpZiAoc3JjICE9IGRzdF9yKSB7CisJCQlpZiAoZHN0X3IgIT0gVE1QX0ZSRUcxKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIFZNT1ZfRjMyIHwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IERENChkc3RfcikgfCBETTQoc3JjKSkpOworCQkJZWxzZQorCQkJCWRzdF9yID0gc3JjOworCQl9CisJCWJyZWFrOworCWNhc2UgU0xKSVRfRE5FRzoKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVk5FR19GMzIgfCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgREQ0KGRzdF9yKSB8IERNNChzcmMpKSk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfREFCUzoKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVkFCU19GMzIgfCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgREQ0KGRzdF9yKSB8IERNNChzcmMpKSk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfQ09OVkRfRlJPTVM6CisJCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIFZDVlRfRjY0X0YzMiB8IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBERDQoZHN0X3IpIHwgRE00KHNyYykpKTsKKwkJb3AgXj0gU0xKSVRfU0lOR0xFX09QOworCQlicmVhazsKKwl9CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKQorCQlyZXR1cm4gZW1pdF9mb3BfbWVtKGNvbXBpbGVyLCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApLCBkc3RfciwgZHN0LCBkc3R3KTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJc2xqaXRfc2kgZHN0X3I7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZm9wMihjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjMSwgc3JjMXcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjMiwgc3JjMncpOworCisJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCW9wIF49IFNMSklUX1NJTkdMRV9PUDsKKworCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9GUkVHMTsKKwlpZiAoc3JjMSAmIFNMSklUX01FTSkgeworCQllbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBGUFVfTE9BRCwgVE1QX0ZSRUcxLCBzcmMxLCBzcmMxdyk7CisJCXNyYzEgPSBUTVBfRlJFRzE7CisJfQorCWlmIChzcmMyICYgU0xKSVRfTUVNKSB7CisJCWVtaXRfZm9wX21lbShjb21waWxlciwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IEZQVV9MT0FELCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3KTsKKwkJc3JjMiA9IFRNUF9GUkVHMjsKKwl9CisKKwlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7CisJY2FzZSBTTEpJVF9EQUREOgorCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWQUREX0YzMiB8IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBERDQoZHN0X3IpIHwgRE40KHNyYzEpIHwgRE00KHNyYzIpKSk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfRFNVQjoKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgVlNVQl9GMzIgfCAob3AgJiBTTEpJVF9TSU5HTEVfT1ApIHwgREQ0KGRzdF9yKSB8IERONChzcmMxKSB8IERNNChzcmMyKSkpOworCQlicmVhazsKKwljYXNlIFNMSklUX0RNVUw6CisJCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIFZNVUxfRjMyIHwgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB8IERENChkc3RfcikgfCBETjQoc3JjMSkgfCBETTQoc3JjMikpKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9ERElWOgorCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBWRElWX0YzMiB8IChvcCAmIFNMSklUX1NJTkdMRV9PUCkgfCBERDQoZHN0X3IpIHwgRE40KHNyYzEpIHwgRE00KHNyYzIpKSk7CisJCWJyZWFrOworCX0KKworCWlmICghKGRzdCAmIFNMSklUX01FTSkpCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCXJldHVybiBlbWl0X2ZvcF9tZW0oY29tcGlsZXIsIChvcCAmIFNMSklUX1NJTkdMRV9PUCksIFRNUF9GUkVHMSwgZHN0LCBkc3R3KTsKK30KKworI3VuZGVmIEZQVV9MT0FECisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIE90aGVyIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2Zhc3RfZW50ZXIoY29tcGlsZXIsIGRzdCwgZHN0dykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKworCS8qIEZvciBVTlVTRUQgZHN0LiBVbmNvbW1vbiwgYnV0IHBvc3NpYmxlLiAqLworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWlmIChGQVNUX0lTX1JFRyhkc3QpKQorCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIE1PViB8IFNFVF9SRUdTNDQoZHN0LCBUTVBfUkVHMykpOworCisJLyogTWVtb3J5LiAqLworCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIFdPUkRfU0laRSB8IFNUT1JFLCBUTVBfUkVHMywgZHN0LCBkc3R3KSkKKwkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKKwkvKiBUTVBfUkVHMyBpcyB1c2VkIGZvciBjYWNoaW5nLiAqLworCUZBSUxfSUYocHVzaF9pbnN0MTYoY29tcGlsZXIsIE1PViB8IFNFVF9SRUdTNDQoVE1QX1JFRzIsIFRNUF9SRUczKSkpOworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKwlyZXR1cm4gZ2V0cHV0X2FyZyhjb21waWxlciwgV09SRF9TSVpFIHwgU1RPUkUsIFRNUF9SRUcyLCBkc3QsIGRzdHcsIDAsIDApOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2Zhc3RfcmV0dXJuKGNvbXBpbGVyLCBzcmMsIHNyY3cpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CisKKwlpZiAoRkFTVF9JU19SRUcoc3JjKSkKKwkJRkFJTF9JRihwdXNoX2luc3QxNihjb21waWxlciwgTU9WIHwgU0VUX1JFR1M0NChUTVBfUkVHMywgc3JjKSkpOworCWVsc2UgaWYgKHNyYyAmIFNMSklUX01FTSkgeworCQlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBXT1JEX1NJWkUsIFRNUF9SRUczLCBzcmMsIHNyY3cpKQorCQkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQllbHNlIHsKKwkJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCQkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBXT1JEX1NJWkUsIFRNUF9SRUcyLCBzcmMsIHNyY3csIDAsIDApKTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0MTYoY29tcGlsZXIsIE1PViB8IFNFVF9SRUdTNDQoVE1QX1JFRzMsIFRNUF9SRUcyKSkpOworCQl9CisJfQorCWVsc2UgaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzMsIHNyY3cpKTsKKwlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIEJMWCB8IFJOMyhUTVBfUkVHMykpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBDb25kaXRpb25hbCBpbnN0cnVjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzbGppdF91dyBnZXRfY2Moc2xqaXRfc2kgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNMSklUX0VRVUFMOgorCWNhc2UgU0xKSVRfTVVMX05PVF9PVkVSRkxPVzoKKwljYXNlIFNMSklUX0RfRVFVQUw6CisJCXJldHVybiAweDA7CisKKwljYXNlIFNMSklUX05PVF9FUVVBTDoKKwljYXNlIFNMSklUX01VTF9PVkVSRkxPVzoKKwljYXNlIFNMSklUX0RfTk9UX0VRVUFMOgorCQlyZXR1cm4gMHgxOworCisJY2FzZSBTTEpJVF9MRVNTOgorCWNhc2UgU0xKSVRfRF9MRVNTOgorCQlyZXR1cm4gMHgzOworCisJY2FzZSBTTEpJVF9HUkVBVEVSX0VRVUFMOgorCWNhc2UgU0xKSVRfRF9HUkVBVEVSX0VRVUFMOgorCQlyZXR1cm4gMHgyOworCisJY2FzZSBTTEpJVF9HUkVBVEVSOgorCWNhc2UgU0xKSVRfRF9HUkVBVEVSOgorCQlyZXR1cm4gMHg4OworCisJY2FzZSBTTEpJVF9MRVNTX0VRVUFMOgorCWNhc2UgU0xKSVRfRF9MRVNTX0VRVUFMOgorCQlyZXR1cm4gMHg5OworCisJY2FzZSBTTEpJVF9TSUdfTEVTUzoKKwkJcmV0dXJuIDB4YjsKKworCWNhc2UgU0xKSVRfU0lHX0dSRUFURVJfRVFVQUw6CisJCXJldHVybiAweGE7CisKKwljYXNlIFNMSklUX1NJR19HUkVBVEVSOgorCQlyZXR1cm4gMHhjOworCisJY2FzZSBTTEpJVF9TSUdfTEVTU19FUVVBTDoKKwkJcmV0dXJuIDB4ZDsKKworCWNhc2UgU0xKSVRfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9EX1VOT1JERVJFRDoKKwkJcmV0dXJuIDB4NjsKKworCWNhc2UgU0xKSVRfTk9UX09WRVJGTE9XOgorCWNhc2UgU0xKSVRfRF9PUkRFUkVEOgorCQlyZXR1cm4gMHg3OworCisJZGVmYXVsdDogLyogU0xKSVRfSlVNUCAqLworCQlTTEpJVF9BU1NFUlRfU1RPUCgpOworCQlyZXR1cm4gMHhlOworCX0KK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9sYWJlbCogc2xqaXRfZW1pdF9sYWJlbChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQoreworCXN0cnVjdCBzbGppdF9sYWJlbCAqbGFiZWw7CisKKwlDSEVDS19FUlJPUl9QVFIoKTsKKwlDSEVDS19QVFIoY2hlY2tfc2xqaXRfZW1pdF9sYWJlbChjb21waWxlcikpOworCisJaWYgKGNvbXBpbGVyLT5sYXN0X2xhYmVsICYmIGNvbXBpbGVyLT5sYXN0X2xhYmVsLT5zaXplID09IGNvbXBpbGVyLT5zaXplKQorCQlyZXR1cm4gY29tcGlsZXItPmxhc3RfbGFiZWw7CisKKwlsYWJlbCA9IChzdHJ1Y3Qgc2xqaXRfbGFiZWwqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2xhYmVsKSk7CisJUFRSX0ZBSUxfSUYoIWxhYmVsKTsKKwlzZXRfbGFiZWwobGFiZWwsIGNvbXBpbGVyKTsKKwlyZXR1cm4gbGFiZWw7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfanVtcCogc2xqaXRfZW1pdF9qdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUpCit7CisJc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CisJc2xqaXRfaW5zIGNjOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfanVtcChjb21waWxlciwgdHlwZSkpOworCisJanVtcCA9IChzdHJ1Y3Qgc2xqaXRfanVtcCopZW5zdXJlX2FidWYoY29tcGlsZXIsIHNpemVvZihzdHJ1Y3Qgc2xqaXRfanVtcCkpOworCVBUUl9GQUlMX0lGKCFqdW1wKTsKKwlzZXRfanVtcChqdW1wLCBjb21waWxlciwgdHlwZSAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCk7CisJdHlwZSAmPSAweGZmOworCisJLyogSW4gQVJNLCB3ZSBkb24ndCBuZWVkIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMuICovCisJUFRSX0ZBSUxfSUYoZW1pdF9pbW0zMl9jb25zdChjb21waWxlciwgVE1QX1JFRzEsIDApKTsKKwlpZiAodHlwZSA8IFNMSklUX0pVTVApIHsKKwkJanVtcC0+ZmxhZ3MgfD0gSVNfQ09ORDsKKwkJY2MgPSBnZXRfY2ModHlwZSk7CisJCWp1bXAtPmZsYWdzIHw9IGNjIDw8IDg7CisJCVBUUl9GQUlMX0lGKHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBJVCB8IChjYyA8PCA0KSB8IDB4OCkpOworCX0KKworCWp1bXAtPmFkZHIgPSBjb21waWxlci0+c2l6ZTsKKwlpZiAodHlwZSA8PSBTTEpJVF9KVU1QKQorCQlQVFJfRkFJTF9JRihwdXNoX2luc3QxNihjb21waWxlciwgQlggfCBSTjMoVE1QX1JFRzEpKSk7CisJZWxzZSB7CisJCWp1bXAtPmZsYWdzIHw9IElTX0JMOworCQlQVFJfRkFJTF9JRihwdXNoX2luc3QxNihjb21waWxlciwgQkxYIHwgUk4zKFRNUF9SRUcxKSkpOworCX0KKworCXJldHVybiBqdW1wOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9panVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfaWp1bXAoY29tcGlsZXIsIHR5cGUsIHNyYywgc3JjdykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCS8qIEluIEFSTSwgd2UgZG9uJ3QgbmVlZCB0byB0b3VjaCB0aGUgYXJndW1lbnRzLiAqLworCWlmICghKHNyYyAmIFNMSklUX0lNTSkpIHsKKwkJaWYgKEZBU1RfSVNfUkVHKHNyYykpCisJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsICh0eXBlIDw9IFNMSklUX0pVTVAgPyBCWCA6IEJMWCkgfCBSTjMoc3JjKSk7CisKKwkJRkFJTF9JRihlbWl0X29wX21lbShjb21waWxlciwgV09SRF9TSVpFLCB0eXBlIDw9IFNMSklUX0pVTVAgPyBUTVBfUEMgOiBUTVBfUkVHMSwgc3JjLCBzcmN3KSk7CisJCWlmICh0eXBlID49IFNMSklUX0ZBU1RfQ0FMTCkKKwkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgQkxYIHwgUk4zKFRNUF9SRUcxKSk7CisJfQorCisJanVtcCA9IChzdHJ1Y3Qgc2xqaXRfanVtcCopZW5zdXJlX2FidWYoY29tcGlsZXIsIHNpemVvZihzdHJ1Y3Qgc2xqaXRfanVtcCkpOworCUZBSUxfSUYoIWp1bXApOworCXNldF9qdW1wKGp1bXAsIGNvbXBpbGVyLCBKVU1QX0FERFIgfCAoKHR5cGUgPj0gU0xKSVRfRkFTVF9DQUxMKSA/IElTX0JMIDogMCkpOworCWp1bXAtPnUudGFyZ2V0ID0gc3JjdzsKKworCUZBSUxfSUYoZW1pdF9pbW0zMl9jb25zdChjb21waWxlciwgVE1QX1JFRzEsIDApKTsKKwlqdW1wLT5hZGRyID0gY29tcGlsZXItPnNpemU7CisJcmV0dXJuIHB1c2hfaW5zdDE2KGNvbXBpbGVyLCAodHlwZSA8PSBTTEpJVF9KVU1QID8gQlggOiBCTFgpIHwgUk4zKFRNUF9SRUcxKSk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wX2ZsYWdzKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3csCisJc2xqaXRfc2kgdHlwZSkKK3sKKwlzbGppdF9zaSBkc3RfciwgZmxhZ3MgPSBHRVRfQUxMX0ZMQUdTKG9wKTsKKwlzbGppdF9pbnMgY2MsIGluczsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcF9mbGFncyhjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3LCB0eXBlKSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCW9wID0gR0VUX09QQ09ERShvcCk7CisJY2MgPSBnZXRfY2ModHlwZSAmIDB4ZmYpOworCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcyOworCisJaWYgKG9wIDwgU0xKSVRfQUREKSB7CisJCUZBSUxfSUYocHVzaF9pbnN0MTYoY29tcGlsZXIsIElUIHwgKGNjIDw8IDQpIHwgKCgoY2MgJiAweDEpIF4gMHgxKSA8PCAzKSB8IDB4NCkpOworCQlpZiAocmVnX21hcFtkc3Rfcl0gPiA3KSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBNT1ZfV0kgfCBSRDQoZHN0X3IpIHwgMSkpOworCQkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgTU9WX1dJIHwgUkQ0KGRzdF9yKSB8IDApKTsKKwkJfSBlbHNlIHsKKwkJCUZBSUxfSUYocHVzaF9pbnN0MTYoY29tcGlsZXIsIE1PVlNJIHwgUkROMyhkc3RfcikgfCAxKSk7CisJCQlGQUlMX0lGKHB1c2hfaW5zdDE2KGNvbXBpbGVyLCBNT1ZTSSB8IFJETjMoZHN0X3IpIHwgMCkpOworCQl9CisJCWlmIChkc3RfciAhPSBUTVBfUkVHMikKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQlyZXR1cm4gZW1pdF9vcF9tZW0oY29tcGlsZXIsIFdPUkRfU0laRSB8IFNUT1JFLCBUTVBfUkVHMiwgZHN0LCBkc3R3KTsKKwl9CisKKwlpbnMgPSAob3AgPT0gU0xKSVRfQU5EID8gQU5ESSA6IChvcCA9PSBTTEpJVF9PUiA/IE9SUkkgOiBFT1JJKSk7CisJaWYgKChvcCA9PSBTTEpJVF9PUiB8fCBvcCA9PSBTTEpJVF9YT1IpICYmIEZBU1RfSVNfUkVHKGRzdCkgJiYgZHN0ID09IHNyYykgeworCQkvKiBEb2VzIG5vdCBjaGFuZ2UgdGhlIG90aGVyIGJpdHMuICovCisJCUZBSUxfSUYocHVzaF9pbnN0MTYoY29tcGlsZXIsIElUIHwgKGNjIDw8IDQpIHwgMHg4KSk7CisJCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIGlucyB8IFJONChzcmMpIHwgUkQ0KGRzdCkgfCAxKSk7CisJCWlmIChmbGFncyAmIFNMSklUX1NFVF9FKSB7CisJCQkvKiBUaGUgY29uZGl0aW9uIG11c3QgYWx3YXlzIGJlIHNldCwgZXZlbiBpZiB0aGUgT1JSSS9FT1JJIGlzIG5vdCBleGVjdXRlZCBhYm92ZS4gKi8KKwkJCWlmIChyZWdfbWFwW2RzdF0gPD0gNykKKwkJCQlyZXR1cm4gcHVzaF9pbnN0MTYoY29tcGlsZXIsIE1PVlMgfCBSRDMoVE1QX1JFRzEpIHwgUk4zKGRzdCkpOworCQkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBNT1ZfVyB8IFNFVF9GTEFHUyB8IFJENChUTVBfUkVHMSkgfCBSTTQoZHN0KSk7CisJCX0KKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCisJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIFdPUkRfU0laRSwgVE1QX1JFRzIsIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CisJCXNyYyA9IFRNUF9SRUcyOworCQlzcmN3ID0gMDsKKwl9IGVsc2UgaWYgKHNyYyAmIFNMSklUX0lNTSkgeworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMiwgc3JjdykpOworCQlzcmMgPSBUTVBfUkVHMjsKKwkJc3JjdyA9IDA7CisJfQorCisJaWYgKG9wID09IFNMSklUX0FORCB8fCBzcmMgIT0gZHN0X3IpIHsKKwkJRkFJTF9JRihwdXNoX2luc3QxNihjb21waWxlciwgSVQgfCAoY2MgPDwgNCkgfCAoKChjYyAmIDB4MSkgXiAweDEpIDw8IDMpIHwgMHg0KSk7CisJCUZBSUxfSUYocHVzaF9pbnN0MzIoY29tcGlsZXIsIGlucyB8IFJONChzcmMpIHwgUkQ0KGRzdF9yKSB8IDEpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgaW5zIHwgUk40KHNyYykgfCBSRDQoZHN0X3IpIHwgMCkpOworCX0KKwllbHNlIHsKKwkJRkFJTF9JRihwdXNoX2luc3QxNihjb21waWxlciwgSVQgfCAoY2MgPDwgNCkgfCAweDgpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QzMihjb21waWxlciwgaW5zIHwgUk40KHNyYykgfCBSRDQoZHN0X3IpIHwgMSkpOworCX0KKworCWlmIChkc3RfciA9PSBUTVBfUkVHMikKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIFdPUkRfU0laRSB8IFNUT1JFLCBUTVBfUkVHMiwgZHN0LCBkc3R3LCAwLCAwKSk7CisKKwlpZiAoZmxhZ3MgJiBTTEpJVF9TRVRfRSkgeworCQkvKiBUaGUgY29uZGl0aW9uIG11c3QgYWx3YXlzIGJlIHNldCwgZXZlbiBpZiB0aGUgT1JSL0VPUkkgaXMgbm90IGV4ZWN1dGVkIGFib3ZlLiAqLworCQlpZiAocmVnX21hcFtkc3Rfcl0gPD0gNykKKwkJCXJldHVybiBwdXNoX2luc3QxNihjb21waWxlciwgTU9WUyB8IFJEMyhUTVBfUkVHMSkgfCBSTjMoZHN0X3IpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdDMyKGNvbXBpbGVyLCBNT1ZfVyB8IFNFVF9GTEFHUyB8IFJENChUTVBfUkVHMSkgfCBSTTQoZHN0X3IpKTsKKwl9CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfY29uc3QqIHNsaml0X2VtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBpbml0X3ZhbHVlKQoreworCXN0cnVjdCBzbGppdF9jb25zdCAqY29uc3RfOworCXNsaml0X3NpIGRzdF9yOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfY29uc3QoY29tcGlsZXIsIGRzdCwgZHN0dywgaW5pdF92YWx1ZSkpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKworCWNvbnN0XyA9IChzdHJ1Y3Qgc2xqaXRfY29uc3QqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2NvbnN0KSk7CisJUFRSX0ZBSUxfSUYoIWNvbnN0Xyk7CisJc2V0X2NvbnN0KGNvbnN0XywgY29tcGlsZXIpOworCisJZHN0X3IgPSBTTE9XX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX1JFRzE7CisJUFRSX0ZBSUxfSUYoZW1pdF9pbW0zMl9jb25zdChjb21waWxlciwgZHN0X3IsIGluaXRfdmFsdWUpKTsKKworCWlmIChkc3QgJiBTTEpJVF9NRU0pCisJCVBUUl9GQUlMX0lGKGVtaXRfb3BfbWVtKGNvbXBpbGVyLCBXT1JEX1NJWkUgfCBTVE9SRSwgZHN0X3IsIGRzdCwgZHN0dykpOworCXJldHVybiBjb25zdF87Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9qdW1wX2FkZHIoc2xqaXRfdXcgYWRkciwgc2xqaXRfdXcgbmV3X2FkZHIpCit7CisJc2xqaXRfdWggKmluc3QgPSAoc2xqaXRfdWgqKWFkZHI7CisJbW9kaWZ5X2ltbTMyX2NvbnN0KGluc3QsIG5ld19hZGRyKTsKKwlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgNCk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9jb25zdChzbGppdF91dyBhZGRyLCBzbGppdF9zdyBuZXdfY29uc3RhbnQpCit7CisJc2xqaXRfdWggKmluc3QgPSAoc2xqaXRfdWgqKWFkZHI7CisJbW9kaWZ5X2ltbTMyX2NvbnN0KGluc3QsIG5ld19jb25zdGFudCk7CisJU0xKSVRfQ0FDSEVfRkxVU0goaW5zdCwgaW5zdCArIDQpOworfQpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlTUlQU18zMi5jIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlTUlQU18zMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYjYwZDcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVNSVBTXzMyLmMKQEAgLTAsMCArMSwzNjYgQEAKKy8qCisgKiAgICBTdGFjay1sZXNzIEp1c3QtSW4tVGltZSBjb21waWxlcgorICoKKyAqICAgIENvcHlyaWdodCAyMDA5LTIwMTIgWm9sdGFuIEhlcmN6ZWcgKGh6bWVzdGVyQGZyZWVtYWlsLmh1KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAqICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogbWlwcyAzMi1iaXQgYXJjaCBkZXBlbmRlbnQgZnVuY3Rpb25zLiAqLworCitzdGF0aWMgc2xqaXRfc2kgbG9hZF9pbW1lZGlhdGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0X2FyLCBzbGppdF9zdyBpbW0pCit7CisJaWYgKCEoaW1tICYgfjB4ZmZmZikpCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFNBKDApIHwgVEEoZHN0X2FyKSB8IElNTShpbW0pLCBkc3RfYXIpOworCisJaWYgKGltbSA8IDAgJiYgaW1tID49IFNJTU1fTUlOKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJVSB8IFNBKDApIHwgVEEoZHN0X2FyKSB8IElNTShpbW0pLCBkc3RfYXIpOworCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIExVSSB8IFRBKGRzdF9hcikgfCBJTU0oaW1tID4+IDE2KSwgZHN0X2FyKSk7CisJcmV0dXJuIChpbW0gJiAweGZmZmYpID8gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTQShkc3RfYXIpIHwgVEEoZHN0X2FyKSB8IElNTShpbW0pLCBkc3RfYXIpIDogU0xKSVRfU1VDQ0VTUzsKK30KKworI2RlZmluZSBFTUlUX0xPR0lDQUwob3BfaW1tLCBvcF9ub3JtKSBcCisJaWYgKGZsYWdzICYgU1JDMl9JTU0pIHsgXAorCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkgXAorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIG9wX2ltbSB8IFMoc3JjMSkgfCBUQShFUVVBTF9GTEFHKSB8IElNTShzcmMyKSwgRVFVQUxfRkxBRykpOyBcCisJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpIFwKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBvcF9pbW0gfCBTKHNyYzEpIHwgVChkc3QpIHwgSU1NKHNyYzIpLCBEUihkc3QpKSk7IFwKKwl9IFwKKwllbHNlIHsgXAorCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkgXAorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIG9wX25vcm0gfCBTKHNyYzEpIHwgVChzcmMyKSB8IERBKEVRVUFMX0ZMQUcpLCBFUVVBTF9GTEFHKSk7IFwKKwkJaWYgKENIRUNLX0ZMQUdTKFNMSklUX1NFVF9FKSkgXAorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIG9wX25vcm0gfCBTKHNyYzEpIHwgVChzcmMyKSB8IEQoZHN0KSwgRFIoZHN0KSkpOyBcCisJfQorCisjZGVmaW5lIEVNSVRfU0hJRlQob3BfaW1tLCBvcF92KSBcCisJaWYgKGZsYWdzICYgU1JDMl9JTU0pIHsgXAorCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkgXAorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIG9wX2ltbSB8IFQoc3JjMSkgfCBEQShFUVVBTF9GTEFHKSB8IFNIX0lNTShzcmMyKSwgRVFVQUxfRkxBRykpOyBcCisJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpIFwKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBvcF9pbW0gfCBUKHNyYzEpIHwgRChkc3QpIHwgU0hfSU1NKHNyYzIpLCBEUihkc3QpKSk7IFwKKwl9IFwKKwllbHNlIHsgXAorCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkgXAorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIG9wX3YgfCBTKHNyYzIpIHwgVChzcmMxKSB8IERBKEVRVUFMX0ZMQUcpLCBFUVVBTF9GTEFHKSk7IFwKKwkJaWYgKENIRUNLX0ZMQUdTKFNMSklUX1NFVF9FKSkgXAorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIG9wX3YgfCBTKHNyYzIpIHwgVChzcmMxKSB8IEQoZHN0KSwgRFIoZHN0KSkpOyBcCisJfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfc2luZ2xlX29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBmbGFncywKKwlzbGppdF9zaSBkc3QsIHNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzIpCit7CisJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgeworCWNhc2UgU0xKSVRfTU9WOgorCWNhc2UgU0xKSVRfTU9WX1VJOgorCWNhc2UgU0xKSVRfTU9WX1NJOgorCWNhc2UgU0xKSVRfTU9WX1A6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOworCQlpZiAoZHN0ICE9IHNyYzIpCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVIHwgUyhzcmMyKSB8IFRBKDApIHwgRChkc3QpLCBEUihkc3QpKTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX01PVl9VQjoKKwljYXNlIFNMSklUX01PVl9TQjoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEgJiYgIShmbGFncyAmIFNSQzJfSU1NKSk7CisJCWlmICgoZmxhZ3MgJiAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpID09IChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgeworCQkJaWYgKG9wID09IFNMSklUX01PVl9TQikgeworI2lmIChkZWZpbmVkIFNMSklUX01JUFNfUjEgJiYgU0xKSVRfTUlQU19SMSkKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTRUIgfCBUKHNyYzIpIHwgRChkc3QpLCBEUihkc3QpKTsKKyNlbHNlCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNMTCB8IFQoc3JjMikgfCBEKGRzdCkgfCBTSF9JTU0oMjQpLCBEUihkc3QpKSk7CisJCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1JBIHwgVChkc3QpIHwgRChkc3QpIHwgU0hfSU1NKDI0KSwgRFIoZHN0KSk7CisjZW5kaWYKKwkJCX0KKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFOREkgfCBTKHNyYzIpIHwgVChkc3QpIHwgSU1NKDB4ZmYpLCBEUihkc3QpKTsKKwkJfQorCQllbHNlIGlmIChkc3QgIT0gc3JjMikKKwkJCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9NT1ZfVUg6CisJY2FzZSBTTEpJVF9NT1ZfU0g6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOworCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0gpIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9NSVBTX1IxICYmIFNMSklUX01JUFNfUjEpCisJCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU0VIIHwgVChzcmMyKSB8IEQoZHN0KSwgRFIoZHN0KSk7CisjZWxzZQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTEwgfCBUKHNyYzIpIHwgRChkc3QpIHwgU0hfSU1NKDE2KSwgRFIoZHN0KSkpOworCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNSQSB8IFQoZHN0KSB8IEQoZHN0KSB8IFNIX0lNTSgxNiksIERSKGRzdCkpOworI2VuZGlmCisJCQl9CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBTkRJIHwgUyhzcmMyKSB8IFQoZHN0KSB8IElNTSgweGZmZmYpLCBEUihkc3QpKTsKKwkJfQorCQllbHNlIGlmIChkc3QgIT0gc3JjMikKKwkJCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9OT1Q6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOworCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBOT1IgfCBTKHNyYzIpIHwgVChzcmMyKSB8IERBKEVRVUFMX0ZMQUcpLCBFUVVBTF9GTEFHKSk7CisJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTk9SIHwgUyhzcmMyKSB8IFQoc3JjMikgfCBEKGRzdCksIERSKGRzdCkpKTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX0NMWjoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEgJiYgIShmbGFncyAmIFNSQzJfSU1NKSk7CisjaWYgKGRlZmluZWQgU0xKSVRfTUlQU19SMSAmJiBTTEpJVF9NSVBTX1IxKQorCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDTFogfCBTKHNyYzIpIHwgVEEoRVFVQUxfRkxBRykgfCBEQShFUVVBTF9GTEFHKSwgRVFVQUxfRkxBRykpOworCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIENMWiB8IFMoc3JjMikgfCBUKGRzdCkgfCBEKGRzdCksIERSKGRzdCkpKTsKKyNlbHNlCisJCWlmIChTTEpJVF9VTkxJS0VMWShmbGFncyAmIFVOVVNFRF9ERVNUKSkgeworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNSTCB8IFQoc3JjMikgfCBEQShFUVVBTF9GTEFHKSB8IFNIX0lNTSgzMSksIEVRVUFMX0ZMQUcpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFhPUkkgfCBTQShFUVVBTF9GTEFHKSB8IFRBKEVRVUFMX0ZMQUcpIHwgSU1NKDEpLCBFUVVBTF9GTEFHKTsKKwkJfQorCQkvKiBOZWFybHkgYWxsIGluc3RydWN0aW9ucyBhcmUgdW5tb3ZhYmxlIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UuICovCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVIHwgUyhzcmMyKSB8IFRBKDApIHwgRChUTVBfUkVHMSksIERSKFRNUF9SRUcxKSkpOworCQkvKiBDaGVjayB6ZXJvLiAqLworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQkVRIHwgUyhUTVBfUkVHMSkgfCBUQSgwKSB8IElNTSg1KSwgVU5NT1ZBQkxFX0lOUykpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgU0EoMCkgfCBUKGRzdCkgfCBJTU0oMzIpLCBVTk1PVkFCTEVfSU5TKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJVSB8IFNBKDApIHwgVChkc3QpIHwgSU1NKC0xKSwgRFIoZHN0KSkpOworCQkvKiBMb29wIGZvciBzZWFyY2hpbmcgdGhlIGhpZ2hlc3QgYml0LiAqLworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVUgfCBTKGRzdCkgfCBUKGRzdCkgfCBJTU0oMSksIERSKGRzdCkpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEJHRVogfCBTKFRNUF9SRUcxKSB8IElNTSgtMiksIFVOTU9WQUJMRV9JTlMpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNMTCB8IFQoVE1QX1JFRzEpIHwgRChUTVBfUkVHMSkgfCBTSF9JTU0oMSksIFVOTU9WQUJMRV9JTlMpKTsKKwkJaWYgKG9wICYgU0xKSVRfU0VUX0UpCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVIHwgUyhkc3QpIHwgVEEoMCkgfCBEQShFUVVBTF9GTEFHKSwgRVFVQUxfRkxBRyk7CisjZW5kaWYKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX0FERDoKKwkJaWYgKGZsYWdzICYgU1JDMl9JTU0pIHsKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9PKSB7CisJCQkJaWYgKHNyYzIgPj0gMCkKKwkJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgUyhzcmMxKSB8IFQoc3JjMSkgfCBEQShPVkVSRkxPV19GTEFHKSwgT1ZFUkZMT1dfRkxBRykpOworCQkJCWVsc2UKKwkJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE5PUiB8IFMoc3JjMSkgfCBUKHNyYzEpIHwgREEoT1ZFUkZMT1dfRkxBRyksIE9WRVJGTE9XX0ZMQUcpKTsKKwkJCX0KKwkJCWlmIChvcCAmIFNMSklUX1NFVF9FKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJVSB8IFMoc3JjMSkgfCBUQShFUVVBTF9GTEFHKSB8IElNTShzcmMyKSwgRVFVQUxfRkxBRykpOworCQkJaWYgKG9wICYgKFNMSklUX1NFVF9DIHwgU0xKSVRfU0VUX08pKSB7CisJCQkJaWYgKHNyYzIgPj0gMCkKKwkJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFMoc3JjMSkgfCBUQShVTEVTU19GTEFHKSB8IElNTShzcmMyKSwgVUxFU1NfRkxBRykpOworCQkJCWVsc2UgeworCQkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVUgfCBTQSgwKSB8IFRBKFVMRVNTX0ZMQUcpIHwgSU1NKHNyYzIpLCBVTEVTU19GTEFHKSk7CisJCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFMoc3JjMSkgfCBUQShVTEVTU19GTEFHKSB8IERBKFVMRVNTX0ZMQUcpLCBVTEVTU19GTEFHKSk7CisJCQkJfQorCQkJfQorCQkJLyogZHN0IG1heSBiZSB0aGUgc2FtZSBhcyBzcmMxIG9yIHNyYzIuICovCisJCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJVSB8IFMoc3JjMSkgfCBUKGRzdCkgfCBJTU0oc3JjMiksIERSKGRzdCkpKTsKKwkJfQorCQllbHNlIHsKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9PKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBYT1IgfCBTKHNyYzEpIHwgVChzcmMyKSB8IERBKE9WRVJGTE9XX0ZMQUcpLCBPVkVSRkxPV19GTEFHKSk7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREVSB8IFMoc3JjMSkgfCBUKHNyYzIpIHwgREEoRVFVQUxfRkxBRyksIEVRVUFMX0ZMQUcpKTsKKwkJCWlmIChvcCAmIChTTEpJVF9TRVRfQyB8IFNMSklUX1NFVF9PKSkKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBTKHNyYzEpIHwgVChzcmMyKSB8IERBKFVMRVNTX0ZMQUcpLCBVTEVTU19GTEFHKSk7CisJCQkvKiBkc3QgbWF5IGJlIHRoZSBzYW1lIGFzIHNyYzEgb3Igc3JjMi4gKi8KKwkJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERFUgfCBTKHNyYzEpIHwgVChzcmMyKSB8IEQoZHN0KSwgRFIoZHN0KSkpOworCQl9CisKKwkJLyogYSArIGIgPj0gYSB8IGIgKG90aGVyd2lzZSwgdGhlIGNhcnJ5IHNob3VsZCBiZSBzZXQgdG8gMSkuICovCisJCWlmIChvcCAmIChTTEpJVF9TRVRfQyB8IFNMSklUX1NFVF9PKSkKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTFRVIHwgUyhkc3QpIHwgVEEoVUxFU1NfRkxBRykgfCBEQShVTEVTU19GTEFHKSwgVUxFU1NfRkxBRykpOworCQlpZiAoIShvcCAmIFNMSklUX1NFVF9PKSkKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xMIHwgVEEoVUxFU1NfRkxBRykgfCBEKFRNUF9SRUcxKSB8IFNIX0lNTSgzMSksIERSKFRNUF9SRUcxKSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgWE9SIHwgUyhUTVBfUkVHMSkgfCBUQShPVkVSRkxPV19GTEFHKSB8IERBKE9WRVJGTE9XX0ZMQUcpLCBPVkVSRkxPV19GTEFHKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBYT1IgfCBTKGRzdCkgfCBUQShPVkVSRkxPV19GTEFHKSB8IERBKE9WRVJGTE9XX0ZMQUcpLCBPVkVSRkxPV19GTEFHKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNMTCB8IFRBKE9WRVJGTE9XX0ZMQUcpIHwgREEoT1ZFUkZMT1dfRkxBRykgfCBTSF9JTU0oMzEpLCBPVkVSRkxPV19GTEFHKTsKKworCWNhc2UgU0xKSVRfQUREQzoKKwkJaWYgKGZsYWdzICYgU1JDMl9JTU0pIHsKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9DKSB7CisJCQkJaWYgKHNyYzIgPj0gMCkKKwkJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFMoc3JjMSkgfCBUQShPVkVSRkxPV19GTEFHKSB8IElNTShzcmMyKSwgT1ZFUkZMT1dfRkxBRykpOworCQkJCWVsc2UgeworCQkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVUgfCBTQSgwKSB8IFRBKE9WRVJGTE9XX0ZMQUcpIHwgSU1NKHNyYzIpLCBPVkVSRkxPV19GTEFHKSk7CisJCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFMoc3JjMSkgfCBUQShPVkVSRkxPV19GTEFHKSB8IERBKE9WRVJGTE9XX0ZMQUcpLCBPVkVSRkxPV19GTEFHKSk7CisJCQkJfQorCQkJfQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERElVIHwgUyhzcmMxKSB8IFQoZHN0KSB8IElNTShzcmMyKSwgRFIoZHN0KSkpOworCQl9IGVsc2UgeworCQkJaWYgKG9wICYgU0xKSVRfU0VUX0MpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEQShPVkVSRkxPV19GTEFHKSwgT1ZFUkZMT1dfRkxBRykpOworCQkJLyogZHN0IG1heSBiZSB0aGUgc2FtZSBhcyBzcmMxIG9yIHNyYzIuICovCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREVSB8IFMoc3JjMSkgfCBUKHNyYzIpIHwgRChkc3QpLCBEUihkc3QpKSk7CisJCX0KKwkJaWYgKG9wICYgU0xKSVRfU0VUX0MpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xUVSB8IFMoZHN0KSB8IFRBKE9WRVJGTE9XX0ZMQUcpIHwgREEoT1ZFUkZMT1dfRkxBRyksIE9WRVJGTE9XX0ZMQUcpKTsKKworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREVSB8IFMoZHN0KSB8IFRBKFVMRVNTX0ZMQUcpIHwgRChkc3QpLCBEUihkc3QpKSk7CisJCWlmICghKG9wICYgU0xKSVRfU0VUX0MpKQorCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwkJLyogU2V0IFVMRVNTX0ZMQUcgKGRzdCA9PSAwKSAmJiAoVUxFU1NfRkxBRyA9PSAxKS4gKi8KKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNMVFUgfCBTKGRzdCkgfCBUQShVTEVTU19GTEFHKSB8IERBKFVMRVNTX0ZMQUcpLCBVTEVTU19GTEFHKSk7CisJCS8qIFNldCBjYXJyeSBmbGFnLiAqLworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFNBKFVMRVNTX0ZMQUcpIHwgVEEoT1ZFUkZMT1dfRkxBRykgfCBEQShVTEVTU19GTEFHKSwgVUxFU1NfRkxBRyk7CisKKwljYXNlIFNMSklUX1NVQjoKKwkJaWYgKChmbGFncyAmIFNSQzJfSU1NKSAmJiAoKG9wICYgKFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX1MpKSB8fCBzcmMyID09IFNJTU1fTUlOKSkgeworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERElVIHwgU0EoMCkgfCBUKFRNUF9SRUcyKSB8IElNTShzcmMyKSwgRFIoVE1QX1JFRzIpKSk7CisJCQlzcmMyID0gVE1QX1JFRzI7CisJCQlmbGFncyAmPSB+U1JDMl9JTU07CisJCX0KKworCQlpZiAoZmxhZ3MgJiBTUkMyX0lNTSkgeworCQkJaWYgKG9wICYgU0xKSVRfU0VUX08pIHsKKwkJCQlpZiAoc3JjMiA+PSAwKQorCQkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBTKHNyYzEpIHwgVChzcmMxKSB8IERBKE9WRVJGTE9XX0ZMQUcpLCBPVkVSRkxPV19GTEFHKSk7CisJCQkJZWxzZQorCQkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTk9SIHwgUyhzcmMxKSB8IFQoc3JjMSkgfCBEQShPVkVSRkxPV19GTEFHKSwgT1ZFUkZMT1dfRkxBRykpOworCQkJfQorCQkJaWYgKG9wICYgU0xKSVRfU0VUX0UpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERElVIHwgUyhzcmMxKSB8IFRBKEVRVUFMX0ZMQUcpIHwgSU1NKC1zcmMyKSwgRVFVQUxfRkxBRykpOworCQkJaWYgKG9wICYgKFNMSklUX1NFVF9DIHwgU0xKSVRfU0VUX08pKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTFRJVSB8IFMoc3JjMSkgfCBUQShVTEVTU19GTEFHKSB8IElNTShzcmMyKSwgVUxFU1NfRkxBRykpOworCQkJLyogZHN0IG1heSBiZSB0aGUgc2FtZSBhcyBzcmMxIG9yIHNyYzIuICovCisJCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJVSB8IFMoc3JjMSkgfCBUKGRzdCkgfCBJTU0oLXNyYzIpLCBEUihkc3QpKSk7CisJCX0KKwkJZWxzZSB7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfTykKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgWE9SIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEQShPVkVSRkxPV19GTEFHKSwgT1ZFUkZMT1dfRkxBRykpOworCQkJaWYgKG9wICYgU0xKSVRfU0VUX0UpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNVQlUgfCBTKHNyYzEpIHwgVChzcmMyKSB8IERBKEVRVUFMX0ZMQUcpLCBFUVVBTF9GTEFHKSk7CisJCQlpZiAob3AgJiAoU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfQyB8IFNMSklUX1NFVF9PKSkKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xUVSB8IFMoc3JjMSkgfCBUKHNyYzIpIHwgREEoVUxFU1NfRkxBRyksIFVMRVNTX0ZMQUcpKTsKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9VKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTFRVIHwgUyhzcmMyKSB8IFQoc3JjMSkgfCBEQShVR1JFQVRFUl9GTEFHKSwgVUdSRUFURVJfRkxBRykpOworCQkJaWYgKG9wICYgU0xKSVRfU0VUX1MpIHsKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xUIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEQShMRVNTX0ZMQUcpLCBMRVNTX0ZMQUcpKTsKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xUIHwgUyhzcmMyKSB8IFQoc3JjMSkgfCBEQShHUkVBVEVSX0ZMQUcpLCBHUkVBVEVSX0ZMQUcpKTsKKwkJCX0KKwkJCS8qIGRzdCBtYXkgYmUgdGhlIHNhbWUgYXMgc3JjMSBvciBzcmMyLiAqLworCQkJaWYgKENIRUNLX0ZMQUdTKFNMSklUX1NFVF9FIHwgU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUyB8IFNMSklUX1NFVF9DKSkKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1VCVSB8IFMoc3JjMSkgfCBUKHNyYzIpIHwgRChkc3QpLCBEUihkc3QpKSk7CisJCX0KKworCQlpZiAoIShvcCAmIFNMSklUX1NFVF9PKSkKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xMIHwgVEEoVUxFU1NfRkxBRykgfCBEKFRNUF9SRUcxKSB8IFNIX0lNTSgzMSksIERSKFRNUF9SRUcxKSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgWE9SIHwgUyhUTVBfUkVHMSkgfCBUQShPVkVSRkxPV19GTEFHKSB8IERBKE9WRVJGTE9XX0ZMQUcpLCBPVkVSRkxPV19GTEFHKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBYT1IgfCBTKGRzdCkgfCBUQShPVkVSRkxPV19GTEFHKSB8IERBKE9WRVJGTE9XX0ZMQUcpLCBPVkVSRkxPV19GTEFHKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNSTCB8IFRBKE9WRVJGTE9XX0ZMQUcpIHwgREEoT1ZFUkZMT1dfRkxBRykgfCBTSF9JTU0oMzEpLCBPVkVSRkxPV19GTEFHKTsKKworCWNhc2UgU0xKSVRfU1VCQzoKKwkJaWYgKChmbGFncyAmIFNSQzJfSU1NKSAmJiBzcmMyID09IFNJTU1fTUlOKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVUgfCBTQSgwKSB8IFQoVE1QX1JFRzIpIHwgSU1NKHNyYzIpLCBEUihUTVBfUkVHMikpKTsKKwkJCXNyYzIgPSBUTVBfUkVHMjsKKwkJCWZsYWdzICY9IH5TUkMyX0lNTTsKKwkJfQorCisJCWlmIChmbGFncyAmIFNSQzJfSU1NKSB7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfQykKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xUSVUgfCBTKHNyYzEpIHwgVEEoT1ZFUkZMT1dfRkxBRykgfCBJTU0oc3JjMiksIE9WRVJGTE9XX0ZMQUcpKTsKKwkJCS8qIGRzdCBtYXkgYmUgdGhlIHNhbWUgYXMgc3JjMSBvciBzcmMyLiAqLworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERElVIHwgUyhzcmMxKSB8IFQoZHN0KSB8IElNTSgtc3JjMiksIERSKGRzdCkpKTsKKwkJfQorCQllbHNlIHsKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9DKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTFRVIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEQShPVkVSRkxPV19GTEFHKSwgT1ZFUkZMT1dfRkxBRykpOworCQkJLyogZHN0IG1heSBiZSB0aGUgc2FtZSBhcyBzcmMxIG9yIHNyYzIuICovCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1VCVSB8IFMoc3JjMSkgfCBUKHNyYzIpIHwgRChkc3QpLCBEUihkc3QpKSk7CisJCX0KKworCQlpZiAob3AgJiBTTEpJVF9TRVRfQykKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTFRVIHwgUyhkc3QpIHwgVEEoVUxFU1NfRkxBRykgfCBEQShMRVNTX0ZMQUcpLCBMRVNTX0ZMQUcpKTsKKworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1VCVSB8IFMoZHN0KSB8IFRBKFVMRVNTX0ZMQUcpIHwgRChkc3QpLCBEUihkc3QpKSk7CisJCXJldHVybiAob3AgJiBTTEpJVF9TRVRfQykgPyBwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgU0EoT1ZFUkZMT1dfRkxBRykgfCBUQShMRVNTX0ZMQUcpIHwgREEoVUxFU1NfRkxBRyksIFVMRVNTX0ZMQUcpIDogU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfTVVMOgorCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIFNSQzJfSU1NKSk7CisJCWlmICghKG9wICYgU0xKSVRfU0VUX08pKSB7CisjaWYgKGRlZmluZWQgU0xKSVRfTUlQU19SMSAmJiBTTEpJVF9NSVBTX1IxKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgTVVMIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEKGRzdCksIERSKGRzdCkpOworI2Vsc2UKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNVUxUIHwgUyhzcmMxKSB8IFQoc3JjMiksIE1PVkFCTEVfSU5TKSk7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNRkxPIHwgRChkc3QpLCBEUihkc3QpKTsKKyNlbmRpZgorCQl9CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNVUxUIHwgUyhzcmMxKSB8IFQoc3JjMiksIE1PVkFCTEVfSU5TKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNRkhJIHwgREEoVUxFU1NfRkxBRyksIFVMRVNTX0ZMQUcpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1GTE8gfCBEKGRzdCksIERSKGRzdCkpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNSQSB8IFQoZHN0KSB8IERBKFVHUkVBVEVSX0ZMQUcpIHwgU0hfSU1NKDMxKSwgVUdSRUFURVJfRkxBRykpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTVUJVIHwgU0EoVUxFU1NfRkxBRykgfCBUQShVR1JFQVRFUl9GTEFHKSB8IERBKE9WRVJGTE9XX0ZMQUcpLCBPVkVSRkxPV19GTEFHKTsKKworCWNhc2UgU0xKSVRfQU5EOgorCQlFTUlUX0xPR0lDQUwoQU5ESSwgQU5EKTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX09SOgorCQlFTUlUX0xPR0lDQUwoT1JJLCBPUik7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9YT1I6CisJCUVNSVRfTE9HSUNBTChYT1JJLCBYT1IpOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfU0hMOgorCQlFTUlUX1NISUZUKFNMTCwgU0xMVik7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9MU0hSOgorCQlFTUlUX1NISUZUKFNSTCwgU1JMVik7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9BU0hSOgorCQlFTUlUX1NISUZUKFNSQSwgU1JBVik7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGluaXRfdmFsdWUpCit7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIExVSSB8IFQoZHN0KSB8IElNTShpbml0X3ZhbHVlID4+IDE2KSwgRFIoZHN0KSkpOworCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFMoZHN0KSB8IFQoZHN0KSB8IElNTShpbml0X3ZhbHVlKSwgRFIoZHN0KSk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9qdW1wX2FkZHIoc2xqaXRfdXcgYWRkciwgc2xqaXRfdXcgbmV3X2FkZHIpCit7CisJc2xqaXRfaW5zICppbnN0ID0gKHNsaml0X2lucyopYWRkcjsKKworCWluc3RbMF0gPSAoaW5zdFswXSAmIDB4ZmZmZjAwMDApIHwgKChuZXdfYWRkciA+PiAxNikgJiAweGZmZmYpOworCWluc3RbMV0gPSAoaW5zdFsxXSAmIDB4ZmZmZjAwMDApIHwgKG5ld19hZGRyICYgMHhmZmZmKTsKKwlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgMik7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9jb25zdChzbGppdF91dyBhZGRyLCBzbGppdF9zdyBuZXdfY29uc3RhbnQpCit7CisJc2xqaXRfaW5zICppbnN0ID0gKHNsaml0X2lucyopYWRkcjsKKworCWluc3RbMF0gPSAoaW5zdFswXSAmIDB4ZmZmZjAwMDApIHwgKChuZXdfY29uc3RhbnQgPj4gMTYpICYgMHhmZmZmKTsKKwlpbnN0WzFdID0gKGluc3RbMV0gJiAweGZmZmYwMDAwKSB8IChuZXdfY29uc3RhbnQgJiAweGZmZmYpOworCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyAyKTsKK30KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZU1JUFNfNjQuYyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZU1JUFNfNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODVmYjU3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlTUlQU182NC5jCkBAIC0wLDAgKzEsNDY5IEBACisvKgorICogICAgU3RhY2stbGVzcyBKdXN0LUluLVRpbWUgY29tcGlsZXIKKyAqCisgKiAgICBDb3B5cmlnaHQgMjAwOS0yMDEyIFpvbHRhbiBIZXJjemVnIChoem1lc3RlckBmcmVlbWFpbC5odSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisgKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mCisgKiAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQKKyAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIG1pcHMgNjQtYml0IGFyY2ggZGVwZW5kZW50IGZ1bmN0aW9ucy4gKi8KKworc3RhdGljIHNsaml0X3NpIGxvYWRfaW1tZWRpYXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdF9hciwgc2xqaXRfc3cgaW1tKQoreworCXNsaml0X3NpIHNoaWZ0ID0gMzI7CisJc2xqaXRfc2kgc2hpZnQyOworCXNsaml0X3NpIGludiA9IDA7CisJc2xqaXRfaW5zIGluczsKKwlzbGppdF91dyB1aW1tOworCisJaWYgKCEoaW1tICYgfjB4ZmZmZikpCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFNBKDApIHwgVEEoZHN0X2FyKSB8IElNTShpbW0pLCBkc3RfYXIpOworCisJaWYgKGltbSA8IDAgJiYgaW1tID49IFNJTU1fTUlOKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJVSB8IFNBKDApIHwgVEEoZHN0X2FyKSB8IElNTShpbW0pLCBkc3RfYXIpOworCisJaWYgKGltbSA8PSAweDdmZmZmZmZmbCAmJiBpbW0gPj0gLTB4ODAwMDAwMDBsKSB7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBMVUkgfCBUQShkc3RfYXIpIHwgSU1NKGltbSA+PiAxNiksIGRzdF9hcikpOworCQlyZXR1cm4gKGltbSAmIDB4ZmZmZikgPyBwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFNBKGRzdF9hcikgfCBUQShkc3RfYXIpIHwgSU1NKGltbSksIGRzdF9hcikgOiBTTEpJVF9TVUNDRVNTOworCX0KKworCS8qIFplcm8gZXh0ZW5kZWQgbnVtYmVyLiAqLworCXVpbW0gPSBpbW07CisJaWYgKGltbSA8IDApIHsKKwkJdWltbSA9IH5pbW07CisJCWludiA9IDE7CisJfQorCisJd2hpbGUgKCEodWltbSAmIDB4ZmYwMDAwMDAwMDAwMDAwMGwpKSB7CisJCXNoaWZ0IC09IDg7CisJCXVpbW0gPDw9IDg7CisJfQorCisJaWYgKCEodWltbSAmIDB4ZjAwMDAwMDAwMDAwMDAwMGwpKSB7CisJCXNoaWZ0IC09IDQ7CisJCXVpbW0gPDw9IDQ7CisJfQorCisJaWYgKCEodWltbSAmIDB4YzAwMDAwMDAwMDAwMDAwMGwpKSB7CisJCXNoaWZ0IC09IDI7CisJCXVpbW0gPDw9IDI7CisJfQorCisJaWYgKChzbGppdF9zdyl1aW1tIDwgMCkgeworCQl1aW1tID4+PSAxOworCQlzaGlmdCArPSAxOworCX0KKwlTTEpJVF9BU1NFUlQoKCh1aW1tICYgMHhjMDAwMDAwMDAwMDAwMDAwbCkgPT0gMHg0MDAwMDAwMDAwMDAwMDAwbCkgJiYgKHNoaWZ0ID4gMCkgJiYgKHNoaWZ0IDw9IDMyKSk7CisKKwlpZiAoaW52KQorCQl1aW1tID0gfnVpbW07CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTFVJIHwgVEEoZHN0X2FyKSB8IElNTSh1aW1tID4+IDQ4KSwgZHN0X2FyKSk7CisJaWYgKHVpbW0gJiAweDAwMDBmZmZmMDAwMDAwMDBsKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgU0EoZHN0X2FyKSB8IFRBKGRzdF9hcikgfCBJTU0odWltbSA+PiAzMiksIGRzdF9hcikpOworCisJaW1tICY9ICgxbCA8PCBzaGlmdCkgLSAxOworCWlmICghKGltbSAmIH4weGZmZmYpKSB7CisJCWlucyA9IChzaGlmdCA9PSAzMikgPyBEU0xMMzIgOiBEU0xMOworCQlpZiAoc2hpZnQgPCAzMikKKwkJCWlucyB8PSBTSF9JTU0oc2hpZnQpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgaW5zIHwgVEEoZHN0X2FyKSB8IERBKGRzdF9hciksIGRzdF9hcikpOworCQlyZXR1cm4gIShpbW0gJiAweGZmZmYpID8gU0xKSVRfU1VDQ0VTUyA6IHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgU0EoZHN0X2FyKSB8IFRBKGRzdF9hcikgfCBJTU0oaW1tKSwgZHN0X2FyKTsKKwl9CisKKwkvKiBEb3VibGUgc2hpZnRzIG5lZWRzIHRvIGJlIHBlcmZvcm1lZC4gKi8KKwl1aW1tIDw8PSAzMjsKKwlzaGlmdDIgPSBzaGlmdCAtIDE2OworCisJd2hpbGUgKCEodWltbSAmIDB4ZjAwMDAwMDAwMDAwMDAwMGwpKSB7CisJCXNoaWZ0MiAtPSA0OworCQl1aW1tIDw8PSA0OworCX0KKworCWlmICghKHVpbW0gJiAweGMwMDAwMDAwMDAwMDAwMDBsKSkgeworCQlzaGlmdDIgLT0gMjsKKwkJdWltbSA8PD0gMjsKKwl9CisKKwlpZiAoISh1aW1tICYgMHg4MDAwMDAwMDAwMDAwMDAwbCkpIHsKKwkJc2hpZnQyLS07CisJCXVpbW0gPDw9IDE7CisJfQorCisJU0xKSVRfQVNTRVJUKCh1aW1tICYgMHg4MDAwMDAwMDAwMDAwMDAwbCkgJiYgKHNoaWZ0MiA+IDApICYmIChzaGlmdDIgPD0gMTYpKTsKKworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBEU0xMIHwgVEEoZHN0X2FyKSB8IERBKGRzdF9hcikgfCBTSF9JTU0oc2hpZnQgLSBzaGlmdDIpLCBkc3RfYXIpKTsKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgU0EoZHN0X2FyKSB8IFRBKGRzdF9hcikgfCBJTU0odWltbSA+PiA0OCksIGRzdF9hcikpOworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBEU0xMIHwgVEEoZHN0X2FyKSB8IERBKGRzdF9hcikgfCBTSF9JTU0oc2hpZnQyKSwgZHN0X2FyKSk7CisKKwlpbW0gJj0gKDFsIDw8IHNoaWZ0MikgLSAxOworCXJldHVybiAhKGltbSAmIDB4ZmZmZikgPyBTTEpJVF9TVUNDRVNTIDogcHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTQShkc3RfYXIpIHwgVEEoZHN0X2FyKSB8IElNTShpbW0pLCBkc3RfYXIpOworfQorCisjZGVmaW5lIFNFTEVDVF9PUChhLCBiKSBcCisJKCEob3AgJiBTTEpJVF9JTlRfT1ApID8gYSA6IGIpCisKKyNkZWZpbmUgRU1JVF9MT0dJQ0FMKG9wX2ltbSwgb3Bfbm9ybSkgXAorCWlmIChmbGFncyAmIFNSQzJfSU1NKSB7IFwKKwkJaWYgKG9wICYgU0xKSVRfU0VUX0UpIFwKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBvcF9pbW0gfCBTKHNyYzEpIHwgVEEoRVFVQUxfRkxBRykgfCBJTU0oc3JjMiksIEVRVUFMX0ZMQUcpKTsgXAorCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKSBcCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgb3BfaW1tIHwgUyhzcmMxKSB8IFQoZHN0KSB8IElNTShzcmMyKSwgRFIoZHN0KSkpOyBcCisJfSBcCisJZWxzZSB7IFwKKwkJaWYgKG9wICYgU0xKSVRfU0VUX0UpIFwKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBvcF9ub3JtIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEQShFUVVBTF9GTEFHKSwgRVFVQUxfRkxBRykpOyBcCisJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpIFwKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBvcF9ub3JtIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEKGRzdCksIERSKGRzdCkpKTsgXAorCX0KKworI2RlZmluZSBFTUlUX1NISUZUKG9wX2RpbW0sIG9wX2RpbW0zMiwgb3BfaW1tLCBvcF9kdiwgb3BfdikgXAorCWlmIChmbGFncyAmIFNSQzJfSU1NKSB7IFwKKwkJaWYgKHNyYzIgPj0gMzIpIHsgXAorCQkJU0xKSVRfQVNTRVJUKCEob3AgJiBTTEpJVF9JTlRfT1ApKTsgXAorCQkJaW5zID0gb3BfZGltbTMyOyBcCisJCQlzcmMyIC09IDMyOyBcCisJCX0gXAorCQllbHNlIFwKKwkJCWlucyA9IChvcCAmIFNMSklUX0lOVF9PUCkgPyBvcF9pbW0gOiBvcF9kaW1tOyBcCisJCWlmIChvcCAmIFNMSklUX1NFVF9FKSBcCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgaW5zIHwgVChzcmMxKSB8IERBKEVRVUFMX0ZMQUcpIHwgU0hfSU1NKHNyYzIpLCBFUVVBTF9GTEFHKSk7IFwKKwkJaWYgKENIRUNLX0ZMQUdTKFNMSklUX1NFVF9FKSkgXAorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIGlucyB8IFQoc3JjMSkgfCBEKGRzdCkgfCBTSF9JTU0oc3JjMiksIERSKGRzdCkpKTsgXAorCX0gXAorCWVsc2UgeyBcCisJCWlucyA9IChvcCAmIFNMSklUX0lOVF9PUCkgPyBvcF92IDogb3BfZHY7IFwKKwkJaWYgKG9wICYgU0xKSVRfU0VUX0UpIFwKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBpbnMgfCBTKHNyYzIpIHwgVChzcmMxKSB8IERBKEVRVUFMX0ZMQUcpLCBFUVVBTF9GTEFHKSk7IFwKKwkJaWYgKENIRUNLX0ZMQUdTKFNMSklUX1NFVF9FKSkgXAorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIGlucyB8IFMoc3JjMikgfCBUKHNyYzEpIHwgRChkc3QpLCBEUihkc3QpKSk7IFwKKwl9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9zaW5nbGVfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGZsYWdzLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMikKK3sKKwlzbGppdF9pbnMgaW5zOworCisJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgeworCWNhc2UgU0xKSVRfTU9WOgorCWNhc2UgU0xKSVRfTU9WX1A6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOworCQlpZiAoZHN0ICE9IHNyYzIpCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoREFERFUsIEFERFUpIHwgUyhzcmMyKSB8IFRBKDApIHwgRChkc3QpLCBEUihkc3QpKTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX01PVl9VQjoKKwljYXNlIFNMSklUX01PVl9TQjoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEgJiYgIShmbGFncyAmIFNSQzJfSU1NKSk7CisJCWlmICgoZmxhZ3MgJiAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpID09IChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgeworCQkJaWYgKG9wID09IFNMSklUX01PVl9TQikgeworCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBEU0xMMzIgfCBUKHNyYzIpIHwgRChkc3QpIHwgU0hfSU1NKDI0KSwgRFIoZHN0KSkpOworCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIERTUkEzMiB8IFQoZHN0KSB8IEQoZHN0KSB8IFNIX0lNTSgyNCksIERSKGRzdCkpOworCQkJfQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQU5ESSB8IFMoc3JjMikgfCBUKGRzdCkgfCBJTU0oMHhmZiksIERSKGRzdCkpOworCQl9CisJCWVsc2UgaWYgKGRzdCAhPSBzcmMyKQorCQkJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX01PVl9VSDoKKwljYXNlIFNMSklUX01PVl9TSDoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEgJiYgIShmbGFncyAmIFNSQzJfSU1NKSk7CisJCWlmICgoZmxhZ3MgJiAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpID09IChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgeworCQkJaWYgKG9wID09IFNMSklUX01PVl9TSCkgeworCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBEU0xMMzIgfCBUKHNyYzIpIHwgRChkc3QpIHwgU0hfSU1NKDE2KSwgRFIoZHN0KSkpOworCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIERTUkEzMiB8IFQoZHN0KSB8IEQoZHN0KSB8IFNIX0lNTSgxNiksIERSKGRzdCkpOworCQkJfQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQU5ESSB8IFMoc3JjMikgfCBUKGRzdCkgfCBJTU0oMHhmZmZmKSwgRFIoZHN0KSk7CisJCX0KKwkJZWxzZSBpZiAoZHN0ICE9IHNyYzIpCisJCQlTTEpJVF9BU1NFUlRfU1RPUCgpOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfTU9WX1VJOgorCQlTTEpJVF9BU1NFUlQoIShvcCAmIFNMSklUX0lOVF9PUCkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRFNMTDMyIHwgVChzcmMyKSB8IEQoZHN0KSB8IFNIX0lNTSgwKSwgRFIoZHN0KSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBEU1JMMzIgfCBUKGRzdCkgfCBEKGRzdCkgfCBTSF9JTU0oMCksIERSKGRzdCkpOworCisJY2FzZSBTTEpJVF9NT1ZfU0k6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTTEwgfCBUKHNyYzIpIHwgRChkc3QpIHwgU0hfSU1NKDApLCBEUihkc3QpKTsKKworCWNhc2UgU0xKSVRfTk9UOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSAmJiAhKGZsYWdzICYgU1JDMl9JTU0pKTsKKwkJaWYgKG9wICYgU0xKSVRfU0VUX0UpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTk9SIHwgUyhzcmMyKSB8IFQoc3JjMikgfCBEQShFUVVBTF9GTEFHKSwgRVFVQUxfRkxBRykpOworCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE5PUiB8IFMoc3JjMikgfCBUKHNyYzIpIHwgRChkc3QpLCBEUihkc3QpKSk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9DTFo6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOworI2lmIChkZWZpbmVkIFNMSklUX01JUFNfUjEgJiYgU0xKSVRfTUlQU19SMSkKKwkJaWYgKG9wICYgU0xKSVRfU0VUX0UpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERDTFosIENMWikgfCBTKHNyYzIpIHwgVEEoRVFVQUxfRkxBRykgfCBEQShFUVVBTF9GTEFHKSwgRVFVQUxfRkxBRykpOworCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9PUChEQ0xaLCBDTFopIHwgUyhzcmMyKSB8IFQoZHN0KSB8IEQoZHN0KSwgRFIoZHN0KSkpOworI2Vsc2UKKwkJaWYgKFNMSklUX1VOTElLRUxZKGZsYWdzICYgVU5VU0VEX0RFU1QpKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERTUkwzMiwgU1JMKSB8IFQoc3JjMikgfCBEQShFUVVBTF9GTEFHKSB8IFNIX0lNTSgzMSksIEVRVUFMX0ZMQUcpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFhPUkkgfCBTQShFUVVBTF9GTEFHKSB8IFRBKEVRVUFMX0ZMQUcpIHwgSU1NKDEpLCBFUVVBTF9GTEFHKTsKKwkJfQorCQkvKiBOZWFybHkgYWxsIGluc3RydWN0aW9ucyBhcmUgdW5tb3ZhYmxlIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2UuICovCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoREFERFUsIEFERFUpIHwgUyhzcmMyKSB8IFRBKDApIHwgRChUTVBfUkVHMSksIERSKFRNUF9SRUcxKSkpOworCQkvKiBDaGVjayB6ZXJvLiAqLworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQkVRIHwgUyhUTVBfUkVHMSkgfCBUQSgwKSB8IElNTSg1KSwgVU5NT1ZBQkxFX0lOUykpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgU0EoMCkgfCBUKGRzdCkgfCBJTU0oKG9wICYgU0xKSVRfSU5UX09QKSA/IDMyIDogNjQpLCBVTk1PVkFCTEVfSU5TKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoREFERElVLCBBRERJVSkgfCBTQSgwKSB8IFQoZHN0KSB8IElNTSgtMSksIERSKGRzdCkpKTsKKwkJLyogTG9vcCBmb3Igc2VhcmNoaW5nIHRoZSBoaWdoZXN0IGJpdC4gKi8KKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9PUChEQURESVUsIEFERElVKSB8IFMoZHN0KSB8IFQoZHN0KSB8IElNTSgxKSwgRFIoZHN0KSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQkdFWiB8IFMoVE1QX1JFRzEpIHwgSU1NKC0yKSwgVU5NT1ZBQkxFX0lOUykpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERTTEwsIFNMTCkgfCBUKFRNUF9SRUcxKSB8IEQoVE1QX1JFRzEpIHwgU0hfSU1NKDEpLCBVTk1PVkFCTEVfSU5TKSk7CisJCWlmIChvcCAmIFNMSklUX1NFVF9FKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERBRERVLCBBRERVKSB8IFMoZHN0KSB8IFRBKDApIHwgREEoRVFVQUxfRkxBRyksIEVRVUFMX0ZMQUcpOworI2VuZGlmCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9BREQ6CisJCWlmIChmbGFncyAmIFNSQzJfSU1NKSB7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfTykgeworCQkJCWlmIChzcmMyID49IDApCisJCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFMoc3JjMSkgfCBUKHNyYzEpIHwgREEoT1ZFUkZMT1dfRkxBRyksIE9WRVJGTE9XX0ZMQUcpKTsKKwkJCQllbHNlCisJCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBOT1IgfCBTKHNyYzEpIHwgVChzcmMxKSB8IERBKE9WRVJGTE9XX0ZMQUcpLCBPVkVSRkxPV19GTEFHKSk7CisJCQl9CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERBRERJVSwgQURESVUpIHwgUyhzcmMxKSB8IFRBKEVRVUFMX0ZMQUcpIHwgSU1NKHNyYzIpLCBFUVVBTF9GTEFHKSk7CisJCQlpZiAob3AgJiAoU0xKSVRfU0VUX0MgfCBTTEpJVF9TRVRfTykpIHsKKwkJCQlpZiAoc3JjMiA+PSAwKQorCQkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgUyhzcmMxKSB8IFRBKFVMRVNTX0ZMQUcpIHwgSU1NKHNyYzIpLCBVTEVTU19GTEFHKSk7CisJCQkJZWxzZSB7CisJCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoREFERElVLCBBRERJVSkgfCBTQSgwKSB8IFRBKFVMRVNTX0ZMQUcpIHwgSU1NKHNyYzIpLCBVTEVTU19GTEFHKSk7CisJCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFMoc3JjMSkgfCBUQShVTEVTU19GTEFHKSB8IERBKFVMRVNTX0ZMQUcpLCBVTEVTU19GTEFHKSk7CisJCQkJfQorCQkJfQorCQkJLyogZHN0IG1heSBiZSB0aGUgc2FtZSBhcyBzcmMxIG9yIHNyYzIuICovCisJCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoREFERElVLCBBRERJVSkgfCBTKHNyYzEpIHwgVChkc3QpIHwgSU1NKHNyYzIpLCBEUihkc3QpKSk7CisJCX0KKwkJZWxzZSB7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfTykKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgWE9SIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEQShPVkVSRkxPV19GTEFHKSwgT1ZFUkZMT1dfRkxBRykpOworCQkJaWYgKG9wICYgU0xKSVRfU0VUX0UpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9PUChEQUREVSwgQUREVSkgfCBTKHNyYzEpIHwgVChzcmMyKSB8IERBKEVRVUFMX0ZMQUcpLCBFUVVBTF9GTEFHKSk7CisJCQlpZiAob3AgJiAoU0xKSVRfU0VUX0MgfCBTTEpJVF9TRVRfTykpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEQShVTEVTU19GTEFHKSwgVUxFU1NfRkxBRykpOworCQkJLyogZHN0IG1heSBiZSB0aGUgc2FtZSBhcyBzcmMxIG9yIHNyYzIuICovCisJCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoREFERFUsIEFERFUpIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEKGRzdCksIERSKGRzdCkpKTsKKwkJfQorCisJCS8qIGEgKyBiID49IGEgfCBiIChvdGhlcndpc2UsIHRoZSBjYXJyeSBzaG91bGQgYmUgc2V0IHRvIDEpLiAqLworCQlpZiAob3AgJiAoU0xKSVRfU0VUX0MgfCBTTEpJVF9TRVRfTykpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xUVSB8IFMoZHN0KSB8IFRBKFVMRVNTX0ZMQUcpIHwgREEoVUxFU1NfRkxBRyksIFVMRVNTX0ZMQUcpKTsKKwkJaWYgKCEob3AgJiBTTEpJVF9TRVRfTykpCisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9PUChEU0xMMzIsIFNMTCkgfCBUQShVTEVTU19GTEFHKSB8IEQoVE1QX1JFRzEpIHwgU0hfSU1NKDMxKSwgRFIoVE1QX1JFRzEpKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBYT1IgfCBTKFRNUF9SRUcxKSB8IFRBKE9WRVJGTE9XX0ZMQUcpIHwgREEoT1ZFUkZMT1dfRkxBRyksIE9WRVJGTE9XX0ZMQUcpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFhPUiB8IFMoZHN0KSB8IFRBKE9WRVJGTE9XX0ZMQUcpIHwgREEoT1ZFUkZMT1dfRkxBRyksIE9WRVJGTE9XX0ZMQUcpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERTUkwzMiwgU0xMKSB8IFRBKE9WRVJGTE9XX0ZMQUcpIHwgREEoT1ZFUkZMT1dfRkxBRykgfCBTSF9JTU0oMzEpLCBPVkVSRkxPV19GTEFHKTsKKworCWNhc2UgU0xKSVRfQUREQzoKKwkJaWYgKGZsYWdzICYgU1JDMl9JTU0pIHsKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9DKSB7CisJCQkJaWYgKHNyYzIgPj0gMCkKKwkJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFMoc3JjMSkgfCBUQShPVkVSRkxPV19GTEFHKSB8IElNTShzcmMyKSwgT1ZFUkZMT1dfRkxBRykpOworCQkJCWVsc2UgeworCQkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERBRERJVSwgQURESVUpIHwgU0EoMCkgfCBUQShPVkVSRkxPV19GTEFHKSB8IElNTShzcmMyKSwgT1ZFUkZMT1dfRkxBRykpOworCQkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBTKHNyYzEpIHwgVEEoT1ZFUkZMT1dfRkxBRykgfCBEQShPVkVSRkxPV19GTEFHKSwgT1ZFUkZMT1dfRkxBRykpOworCQkJCX0KKwkJCX0KKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoREFERElVLCBBRERJVSkgfCBTKHNyYzEpIHwgVChkc3QpIHwgSU1NKHNyYzIpLCBEUihkc3QpKSk7CisJCX0gZWxzZSB7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfQykKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBTKHNyYzEpIHwgVChzcmMyKSB8IERBKE9WRVJGTE9XX0ZMQUcpLCBPVkVSRkxPV19GTEFHKSk7CisJCQkvKiBkc3QgbWF5IGJlIHRoZSBzYW1lIGFzIHNyYzEgb3Igc3JjMi4gKi8KKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoREFERFUsIEFERFUpIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEKGRzdCksIERSKGRzdCkpKTsKKwkJfQorCQlpZiAob3AgJiBTTEpJVF9TRVRfQykKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTFRVIHwgUyhkc3QpIHwgVEEoT1ZFUkZMT1dfRkxBRykgfCBEQShPVkVSRkxPV19GTEFHKSwgT1ZFUkZMT1dfRkxBRykpOworCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoREFERFUsIEFERFUpIHwgUyhkc3QpIHwgVEEoVUxFU1NfRkxBRykgfCBEKGRzdCksIERSKGRzdCkpKTsKKwkJaWYgKCEob3AgJiBTTEpJVF9TRVRfQykpCisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCQkvKiBTZXQgVUxFU1NfRkxBRyAoZHN0ID09IDApICYmIChVTEVTU19GTEFHID09IDEpLiAqLworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xUVSB8IFMoZHN0KSB8IFRBKFVMRVNTX0ZMQUcpIHwgREEoVUxFU1NfRkxBRyksIFVMRVNTX0ZMQUcpKTsKKwkJLyogU2V0IGNhcnJ5IGZsYWcuICovCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgU0EoVUxFU1NfRkxBRykgfCBUQShPVkVSRkxPV19GTEFHKSB8IERBKFVMRVNTX0ZMQUcpLCBVTEVTU19GTEFHKTsKKworCWNhc2UgU0xKSVRfU1VCOgorCQlpZiAoKGZsYWdzICYgU1JDMl9JTU0pICYmICgob3AgJiAoU0xKSVRfU0VUX1UgfCBTTEpJVF9TRVRfUykpIHx8IHNyYzIgPT0gU0lNTV9NSU4pKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVUgfCBTQSgwKSB8IFQoVE1QX1JFRzIpIHwgSU1NKHNyYzIpLCBEUihUTVBfUkVHMikpKTsKKwkJCXNyYzIgPSBUTVBfUkVHMjsKKwkJCWZsYWdzICY9IH5TUkMyX0lNTTsKKwkJfQorCisJCWlmIChmbGFncyAmIFNSQzJfSU1NKSB7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfTykgeworCQkJCWlmIChzcmMyID49IDApCisJCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFMoc3JjMSkgfCBUKHNyYzEpIHwgREEoT1ZFUkZMT1dfRkxBRyksIE9WRVJGTE9XX0ZMQUcpKTsKKwkJCQllbHNlCisJCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBOT1IgfCBTKHNyYzEpIHwgVChzcmMxKSB8IERBKE9WRVJGTE9XX0ZMQUcpLCBPVkVSRkxPV19GTEFHKSk7CisJCQl9CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERBRERJVSwgQURESVUpIHwgUyhzcmMxKSB8IFRBKEVRVUFMX0ZMQUcpIHwgSU1NKC1zcmMyKSwgRVFVQUxfRkxBRykpOworCQkJaWYgKG9wICYgKFNMSklUX1NFVF9DIHwgU0xKSVRfU0VUX08pKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTFRJVSB8IFMoc3JjMSkgfCBUQShVTEVTU19GTEFHKSB8IElNTShzcmMyKSwgVUxFU1NfRkxBRykpOworCQkJLyogZHN0IG1heSBiZSB0aGUgc2FtZSBhcyBzcmMxIG9yIHNyYzIuICovCisJCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoREFERElVLCBBRERJVSkgfCBTKHNyYzEpIHwgVChkc3QpIHwgSU1NKC1zcmMyKSwgRFIoZHN0KSkpOworCQl9CisJCWVsc2UgeworCQkJaWYgKG9wICYgU0xKSVRfU0VUX08pCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFhPUiB8IFMoc3JjMSkgfCBUKHNyYzIpIHwgREEoT1ZFUkZMT1dfRkxBRyksIE9WRVJGTE9XX0ZMQUcpKTsKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9FKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoRFNVQlUsIFNVQlUpIHwgUyhzcmMxKSB8IFQoc3JjMikgfCBEQShFUVVBTF9GTEFHKSwgRVFVQUxfRkxBRykpOworCQkJaWYgKG9wICYgKFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX0MgfCBTTEpJVF9TRVRfTykpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNMVFUgfCBTKHNyYzEpIHwgVChzcmMyKSB8IERBKFVMRVNTX0ZMQUcpLCBVTEVTU19GTEFHKSk7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfVSkKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xUVSB8IFMoc3JjMikgfCBUKHNyYzEpIHwgREEoVUdSRUFURVJfRkxBRyksIFVHUkVBVEVSX0ZMQUcpKTsKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9TKSB7CisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNMVCB8IFMoc3JjMSkgfCBUKHNyYzIpIHwgREEoTEVTU19GTEFHKSwgTEVTU19GTEFHKSk7CisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNMVCB8IFMoc3JjMikgfCBUKHNyYzEpIHwgREEoR1JFQVRFUl9GTEFHKSwgR1JFQVRFUl9GTEFHKSk7CisJCQl9CisJCQkvKiBkc3QgbWF5IGJlIHRoZSBzYW1lIGFzIHNyYzEgb3Igc3JjMi4gKi8KKwkJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSB8IFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX1MgfCBTTEpJVF9TRVRfQykpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9PUChEU1VCVSwgU1VCVSkgfCBTKHNyYzEpIHwgVChzcmMyKSB8IEQoZHN0KSwgRFIoZHN0KSkpOworCQl9CisKKwkJaWYgKCEob3AgJiBTTEpJVF9TRVRfTykpCisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9PUChEU0xMMzIsIFNMTCkgfCBUQShVTEVTU19GTEFHKSB8IEQoVE1QX1JFRzEpIHwgU0hfSU1NKDMxKSwgRFIoVE1QX1JFRzEpKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBYT1IgfCBTKFRNUF9SRUcxKSB8IFRBKE9WRVJGTE9XX0ZMQUcpIHwgREEoT1ZFUkZMT1dfRkxBRyksIE9WRVJGTE9XX0ZMQUcpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFhPUiB8IFMoZHN0KSB8IFRBKE9WRVJGTE9XX0ZMQUcpIHwgREEoT1ZFUkZMT1dfRkxBRyksIE9WRVJGTE9XX0ZMQUcpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERTUkwzMiwgU1JMKSB8IFRBKE9WRVJGTE9XX0ZMQUcpIHwgREEoT1ZFUkZMT1dfRkxBRykgfCBTSF9JTU0oMzEpLCBPVkVSRkxPV19GTEFHKTsKKworCWNhc2UgU0xKSVRfU1VCQzoKKwkJaWYgKChmbGFncyAmIFNSQzJfSU1NKSAmJiBzcmMyID09IFNJTU1fTUlOKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVUgfCBTQSgwKSB8IFQoVE1QX1JFRzIpIHwgSU1NKHNyYzIpLCBEUihUTVBfUkVHMikpKTsKKwkJCXNyYzIgPSBUTVBfUkVHMjsKKwkJCWZsYWdzICY9IH5TUkMyX0lNTTsKKwkJfQorCisJCWlmIChmbGFncyAmIFNSQzJfSU1NKSB7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfQykKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xUSVUgfCBTKHNyYzEpIHwgVEEoT1ZFUkZMT1dfRkxBRykgfCBJTU0oc3JjMiksIE9WRVJGTE9XX0ZMQUcpKTsKKwkJCS8qIGRzdCBtYXkgYmUgdGhlIHNhbWUgYXMgc3JjMSBvciBzcmMyLiAqLworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9PUChEQURESVUsIEFERElVKSB8IFMoc3JjMSkgfCBUKGRzdCkgfCBJTU0oLXNyYzIpLCBEUihkc3QpKSk7CisJCX0KKwkJZWxzZSB7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfQykKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xUVSB8IFMoc3JjMSkgfCBUKHNyYzIpIHwgREEoT1ZFUkZMT1dfRkxBRyksIE9WRVJGTE9XX0ZMQUcpKTsKKwkJCS8qIGRzdCBtYXkgYmUgdGhlIHNhbWUgYXMgc3JjMSBvciBzcmMyLiAqLworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9PUChEU1VCVSwgU1VCVSkgfCBTKHNyYzEpIHwgVChzcmMyKSB8IEQoZHN0KSwgRFIoZHN0KSkpOworCQl9CisKKwkJaWYgKG9wICYgU0xKSVRfU0VUX0MpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xUVSB8IFMoZHN0KSB8IFRBKFVMRVNTX0ZMQUcpIHwgREEoTEVTU19GTEFHKSwgTEVTU19GTEFHKSk7CisKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9PUChEU1VCVSwgU1VCVSkgfCBTKGRzdCkgfCBUQShVTEVTU19GTEFHKSB8IEQoZHN0KSwgRFIoZHN0KSkpOworCQlyZXR1cm4gKG9wICYgU0xKSVRfU0VUX0MpID8gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFNBKE9WRVJGTE9XX0ZMQUcpIHwgVEEoTEVTU19GTEFHKSB8IERBKFVMRVNTX0ZMQUcpLCBVTEVTU19GTEFHKSA6IFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX01VTDoKKwkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBTUkMyX0lNTSkpOworCQlpZiAoIShvcCAmIFNMSklUX1NFVF9PKSkgeworI2lmIChkZWZpbmVkIFNMSklUX01JUFNfUjEgJiYgU0xKSVRfTUlQU19SMSkKKwkJCWlmIChvcCAmIFNMSklUX0lOVF9PUCkKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNVUwgfCBTKHNyYzEpIHwgVChzcmMyKSB8IEQoZHN0KSwgRFIoZHN0KSk7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRE1VTFQgfCBTKHNyYzEpIHwgVChzcmMyKSwgTU9WQUJMRV9JTlMpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE1GTE8gfCBEKGRzdCksIERSKGRzdCkpOworI2Vsc2UKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoRE1VTFQsIE1VTFQpIHwgUyhzcmMxKSB8IFQoc3JjMiksIE1PVkFCTEVfSU5TKSk7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNRkxPIHwgRChkc3QpLCBEUihkc3QpKTsKKyNlbmRpZgorCQl9CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfT1AoRE1VTFQsIE1VTFQpIHwgUyhzcmMxKSB8IFQoc3JjMiksIE1PVkFCTEVfSU5TKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNRkhJIHwgREEoVUxFU1NfRkxBRyksIFVMRVNTX0ZMQUcpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1GTE8gfCBEKGRzdCksIERSKGRzdCkpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9PUChEU1JBMzIsIFNSQSkgfCBUKGRzdCkgfCBEQShVR1JFQVRFUl9GTEFHKSB8IFNIX0lNTSgzMSksIFVHUkVBVEVSX0ZMQUcpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX09QKERTVUJVLCBTVUJVKSB8IFNBKFVMRVNTX0ZMQUcpIHwgVEEoVUdSRUFURVJfRkxBRykgfCBEQShPVkVSRkxPV19GTEFHKSwgT1ZFUkZMT1dfRkxBRyk7CisKKwljYXNlIFNMSklUX0FORDoKKwkJRU1JVF9MT0dJQ0FMKEFOREksIEFORCk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9PUjoKKwkJRU1JVF9MT0dJQ0FMKE9SSSwgT1IpOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfWE9SOgorCQlFTUlUX0xPR0lDQUwoWE9SSSwgWE9SKTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX1NITDoKKwkJRU1JVF9TSElGVChEU0xMLCBEU0xMMzIsIFNMTCwgRFNMTFYsIFNMTFYpOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfTFNIUjoKKwkJRU1JVF9TSElGVChEU1JMLCBEU1JMMzIsIFNSTCwgRFNSTFYsIFNSTFYpOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfQVNIUjoKKwkJRU1JVF9TSElGVChEU1JBLCBEU1JBMzIsIFNSQSwgRFNSQVYsIFNSQVYpOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBpbml0X3ZhbHVlKQoreworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBMVUkgfCBUKGRzdCkgfCBJTU0oaW5pdF92YWx1ZSA+PiA0OCksIERSKGRzdCkpKTsKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgUyhkc3QpIHwgVChkc3QpIHwgSU1NKGluaXRfdmFsdWUgPj4gMzIpLCBEUihkc3QpKSk7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIERTTEwgfCBUKGRzdCkgfCBEKGRzdCkgfCBTSF9JTU0oMTYpLCBEUihkc3QpKSk7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFMoZHN0KSB8IFQoZHN0KSB8IElNTShpbml0X3ZhbHVlID4+IDE2KSwgRFIoZHN0KSkpOworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBEU0xMIHwgVChkc3QpIHwgRChkc3QpIHwgU0hfSU1NKDE2KSwgRFIoZHN0KSkpOworCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFMoZHN0KSB8IFQoZHN0KSB8IElNTShpbml0X3ZhbHVlKSwgRFIoZHN0KSk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9qdW1wX2FkZHIoc2xqaXRfdXcgYWRkciwgc2xqaXRfdXcgbmV3X2FkZHIpCit7CisJc2xqaXRfaW5zICppbnN0ID0gKHNsaml0X2lucyopYWRkcjsKKworCWluc3RbMF0gPSAoaW5zdFswXSAmIDB4ZmZmZjAwMDApIHwgKChuZXdfYWRkciA+PiA0OCkgJiAweGZmZmYpOworCWluc3RbMV0gPSAoaW5zdFsxXSAmIDB4ZmZmZjAwMDApIHwgKChuZXdfYWRkciA+PiAzMikgJiAweGZmZmYpOworCWluc3RbM10gPSAoaW5zdFszXSAmIDB4ZmZmZjAwMDApIHwgKChuZXdfYWRkciA+PiAxNikgJiAweGZmZmYpOworCWluc3RbNV0gPSAoaW5zdFs1XSAmIDB4ZmZmZjAwMDApIHwgKG5ld19hZGRyICYgMHhmZmZmKTsKKwlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgNik7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9jb25zdChzbGppdF91dyBhZGRyLCBzbGppdF9zdyBuZXdfY29uc3RhbnQpCit7CisJc2xqaXRfaW5zICppbnN0ID0gKHNsaml0X2lucyopYWRkcjsKKworCWluc3RbMF0gPSAoaW5zdFswXSAmIDB4ZmZmZjAwMDApIHwgKChuZXdfY29uc3RhbnQgPj4gNDgpICYgMHhmZmZmKTsKKwlpbnN0WzFdID0gKGluc3RbMV0gJiAweGZmZmYwMDAwKSB8ICgobmV3X2NvbnN0YW50ID4+IDMyKSAmIDB4ZmZmZik7CisJaW5zdFszXSA9IChpbnN0WzNdICYgMHhmZmZmMDAwMCkgfCAoKG5ld19jb25zdGFudCA+PiAxNikgJiAweGZmZmYpOworCWluc3RbNV0gPSAoaW5zdFs1XSAmIDB4ZmZmZjAwMDApIHwgKG5ld19jb25zdGFudCAmIDB4ZmZmZik7CisJU0xKSVRfQ0FDSEVfRkxVU0goaW5zdCwgaW5zdCArIDYpOworfQpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlTUlQU19jb21tb24uYyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZU1JUFNfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzNTM1ZgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZU1JUFNfY29tbW9uLmMKQEAgLTAsMCArMSwyMTM4IEBACisvKgorICogICAgU3RhY2stbGVzcyBKdXN0LUluLVRpbWUgY29tcGlsZXIKKyAqCisgKiAgICBDb3B5cmlnaHQgMjAwOS0yMDEyIFpvbHRhbiBIZXJjemVnIChoem1lc3RlckBmcmVlbWFpbC5odSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisgKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mCisgKiAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQKKyAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIExhdGVzdCBNSVBTIGFyY2hpdGVjdHVyZS4gKi8KKy8qIEF1dG9tYXRpY2FsbHkgZGV0ZWN0IFNMSklUX01JUFNfUjEgKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIFNMSklUX0NPTlNUIGNoYXIqIHNsaml0X2dldF9wbGF0Zm9ybV9uYW1lKHZvaWQpCit7CisjaWYgKGRlZmluZWQgU0xKSVRfTUlQU19SMSAmJiBTTEpJVF9NSVBTX1IxKQorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorCXJldHVybiAiTUlQUzMyLVIxIiBTTEpJVF9DUFVJTkZPOworI2Vsc2UKKwlyZXR1cm4gIk1JUFM2NC1SMSIgU0xKSVRfQ1BVSU5GTzsKKyNlbmRpZgorI2Vsc2UgLyogU0xKSVRfTUlQU19SMSAqLworCXJldHVybiAiTUlQUyBJSUkiIFNMSklUX0NQVUlORk87CisjZW5kaWYKK30KKworLyogTGVuZ3RoIG9mIGFuIGluc3RydWN0aW9uIHdvcmQKKyAgIEJvdGggZm9yIG1pcHMtMzIgYW5kIG1pcHMtNjQgKi8KK3R5cGVkZWYgc2xqaXRfdWkgc2xqaXRfaW5zOworCisjZGVmaW5lIFRNUF9SRUcxCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgMikKKyNkZWZpbmUgVE1QX1JFRzIJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAzKQorI2RlZmluZSBUTVBfUkVHMwkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDQpCisKKy8qIEZvciBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlLCB0OSBtdXN0IGNvbnRhaW4gdGhlIGZ1bmN0aW9uIGFkZHJlc3MuICovCisjZGVmaW5lIFBJQ19BRERSX1JFRwlUTVBfUkVHMgorCisvKiBGbG9hdGluZyBwb2ludCBzdGF0dXMgcmVnaXN0ZXIuICovCisjZGVmaW5lIEZDU1JfUkVHCTMxCisvKiBSZXR1cm4gYWRkcmVzcyByZWdpc3Rlci4gKi8KKyNkZWZpbmUgUkVUVVJOX0FERFJfUkVHCTMxCisKKy8qIEZsYWdzIGFyZSBrZXB0IGluIHZvbGF0aWxlIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgRVFVQUxfRkxBRwkxMgorLyogQW5kIGNhcnJ5IGZsYWcgYXMgd2VsbC4gKi8KKyNkZWZpbmUgVUxFU1NfRkxBRwkxMworI2RlZmluZSBVR1JFQVRFUl9GTEFHCTE0CisjZGVmaW5lIExFU1NfRkxBRwkxNQorI2RlZmluZSBHUkVBVEVSX0ZMQUcJMzEKKyNkZWZpbmUgT1ZFUkZMT1dfRkxBRwkxCisKKyNkZWZpbmUgVE1QX0ZSRUcxCSgwKQorI2RlZmluZSBUTVBfRlJFRzIJKChTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTICsgMSkgPDwgMSkKKworc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X3ViIHJlZ19tYXBbU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDVdID0geworCTAsIDIsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMjQsIDIzLCAyMiwgMjEsIDIwLCAxOSwgMTgsIDE3LCAxNiwgMjksIDMsIDI1LCA0Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBJbnN0cnVjaW9uIGZvcm1zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgUyhzKQkJKHJlZ19tYXBbc10gPDwgMjEpCisjZGVmaW5lIFQodCkJCShyZWdfbWFwW3RdIDw8IDE2KQorI2RlZmluZSBEKGQpCQkocmVnX21hcFtkXSA8PCAxMSkKKy8qIEFic29sdXRlIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgU0EocykJCSgocykgPDwgMjEpCisjZGVmaW5lIFRBKHQpCQkoKHQpIDw8IDE2KQorI2RlZmluZSBEQShkKQkJKChkKSA8PCAxMSkKKyNkZWZpbmUgRlQodCkJCSgodCkgPDwgMTYpCisjZGVmaW5lIEZTKHMpCQkoKHMpIDw8IDExKQorI2RlZmluZSBGRChkKQkJKChkKSA8PCA2KQorI2RlZmluZSBJTU0oaW1tKQkoKGltbSkgJiAweGZmZmYpCisjZGVmaW5lIFNIX0lNTShpbW0pCSgoaW1tKSA8PCA2KQorCisjZGVmaW5lIERSKGRyKQkJKHJlZ19tYXBbZHJdKQorI2RlZmluZSBISShvcGNvZGUpCSgob3Bjb2RlKSA8PCAyNikKKyNkZWZpbmUgTE8ob3Bjb2RlKQkob3Bjb2RlKQorLyogUyA9ICgxNiA8PCAyMSkgRCA9ICgxNyA8PCAyMSkgKi8KKyNkZWZpbmUgRk1UX1MJCSgxNiA8PCAyMSkKKworI2RlZmluZSBBQlNfUwkJKEhJKDE3KSB8IEZNVF9TIHwgTE8oNSkpCisjZGVmaW5lIEFERF9TCQkoSEkoMTcpIHwgRk1UX1MgfCBMTygwKSkKKyNkZWZpbmUgQURESVUJCShISSg5KSkKKyNkZWZpbmUgQUREVQkJKEhJKDApIHwgTE8oMzMpKQorI2RlZmluZSBBTkQJCShISSgwKSB8IExPKDM2KSkKKyNkZWZpbmUgQU5ESQkJKEhJKDEyKSkKKyNkZWZpbmUgQgkJKEhJKDQpKQorI2RlZmluZSBCQUwJCShISSgxKSB8ICgxNyA8PCAxNikpCisjZGVmaW5lIEJDMUYJCShISSgxNykgfCAoOCA8PCAyMSkpCisjZGVmaW5lIEJDMVQJCShISSgxNykgfCAoOCA8PCAyMSkgfCAoMSA8PCAxNikpCisjZGVmaW5lIEJFUQkJKEhJKDQpKQorI2RlZmluZSBCR0VaCQkoSEkoMSkgfCAoMSA8PCAxNikpCisjZGVmaW5lIEJHVFoJCShISSg3KSkKKyNkZWZpbmUgQkxFWgkJKEhJKDYpKQorI2RlZmluZSBCTFRaCQkoSEkoMSkgfCAoMCA8PCAxNikpCisjZGVmaW5lIEJORQkJKEhJKDUpKQorI2RlZmluZSBCUkVBSwkJKEhJKDApIHwgTE8oMTMpKQorI2RlZmluZSBDRkMxCQkoSEkoMTcpIHwgKDIgPDwgMjEpKQorI2RlZmluZSBDX1VOX1MJCShISSgxNykgfCBGTVRfUyB8IExPKDQ5KSkKKyNkZWZpbmUgQ19VRVFfUwkJKEhJKDE3KSB8IEZNVF9TIHwgTE8oNTEpKQorI2RlZmluZSBDX1VMRV9TCQkoSEkoMTcpIHwgRk1UX1MgfCBMTyg1NSkpCisjZGVmaW5lIENfVUxUX1MJCShISSgxNykgfCBGTVRfUyB8IExPKDUzKSkKKyNkZWZpbmUgQ1ZUX1NfUwkJKEhJKDE3KSB8IEZNVF9TIHwgTE8oMzIpKQorI2RlZmluZSBEQURESVUJCShISSgyNSkpCisjZGVmaW5lIERBRERVCQkoSEkoMCkgfCBMTyg0NSkpCisjZGVmaW5lIERESVYJCShISSgwKSB8IExPKDMwKSkKKyNkZWZpbmUgRERJVlUJCShISSgwKSB8IExPKDMxKSkKKyNkZWZpbmUgRElWCQkoSEkoMCkgfCBMTygyNikpCisjZGVmaW5lIERJVlUJCShISSgwKSB8IExPKDI3KSkKKyNkZWZpbmUgRElWX1MJCShISSgxNykgfCBGTVRfUyB8IExPKDMpKQorI2RlZmluZSBETVVMVAkJKEhJKDApIHwgTE8oMjgpKQorI2RlZmluZSBETVVMVFUJCShISSgwKSB8IExPKDI5KSkKKyNkZWZpbmUgRFNMTAkJKEhJKDApIHwgTE8oNTYpKQorI2RlZmluZSBEU0xMMzIJCShISSgwKSB8IExPKDYwKSkKKyNkZWZpbmUgRFNMTFYJCShISSgwKSB8IExPKDIwKSkKKyNkZWZpbmUgRFNSQQkJKEhJKDApIHwgTE8oNTkpKQorI2RlZmluZSBEU1JBMzIJCShISSgwKSB8IExPKDYzKSkKKyNkZWZpbmUgRFNSQVYJCShISSgwKSB8IExPKDIzKSkKKyNkZWZpbmUgRFNSTAkJKEhJKDApIHwgTE8oNTgpKQorI2RlZmluZSBEU1JMMzIJCShISSgwKSB8IExPKDYyKSkKKyNkZWZpbmUgRFNSTFYJCShISSgwKSB8IExPKDIyKSkKKyNkZWZpbmUgRFNVQlUJCShISSgwKSB8IExPKDQ3KSkKKyNkZWZpbmUgSgkJKEhJKDIpKQorI2RlZmluZSBKQUwJCShISSgzKSkKKyNkZWZpbmUgSkFMUgkJKEhJKDApIHwgTE8oOSkpCisjZGVmaW5lIEpSCQkoSEkoMCkgfCBMTyg4KSkKKyNkZWZpbmUgTEQJCShISSg1NSkpCisjZGVmaW5lIExVSQkJKEhJKDE1KSkKKyNkZWZpbmUgTFcJCShISSgzNSkpCisjZGVmaW5lIE1GQzEJCShISSgxNykpCisjZGVmaW5lIE1GSEkJCShISSgwKSB8IExPKDE2KSkKKyNkZWZpbmUgTUZMTwkJKEhJKDApIHwgTE8oMTgpKQorI2RlZmluZSBNT1ZfUwkJKEhJKDE3KSB8IEZNVF9TIHwgTE8oNikpCisjZGVmaW5lIE1UQzEJCShISSgxNykgfCAoNCA8PCAyMSkpCisjZGVmaW5lIE1VTF9TCQkoSEkoMTcpIHwgRk1UX1MgfCBMTygyKSkKKyNkZWZpbmUgTVVMVAkJKEhJKDApIHwgTE8oMjQpKQorI2RlZmluZSBNVUxUVQkJKEhJKDApIHwgTE8oMjUpKQorI2RlZmluZSBORUdfUwkJKEhJKDE3KSB8IEZNVF9TIHwgTE8oNykpCisjZGVmaW5lIE5PUAkJKEhJKDApIHwgTE8oMCkpCisjZGVmaW5lIE5PUgkJKEhJKDApIHwgTE8oMzkpKQorI2RlZmluZSBPUgkJKEhJKDApIHwgTE8oMzcpKQorI2RlZmluZSBPUkkJCShISSgxMykpCisjZGVmaW5lIFNECQkoSEkoNjMpKQorI2RlZmluZSBTTFQJCShISSgwKSB8IExPKDQyKSkKKyNkZWZpbmUgU0xUSQkJKEhJKDEwKSkKKyNkZWZpbmUgU0xUSVUJCShISSgxMSkpCisjZGVmaW5lIFNMVFUJCShISSgwKSB8IExPKDQzKSkKKyNkZWZpbmUgU0xMCQkoSEkoMCkgfCBMTygwKSkKKyNkZWZpbmUgU0xMVgkJKEhJKDApIHwgTE8oNCkpCisjZGVmaW5lIFNSTAkJKEhJKDApIHwgTE8oMikpCisjZGVmaW5lIFNSTFYJCShISSgwKSB8IExPKDYpKQorI2RlZmluZSBTUkEJCShISSgwKSB8IExPKDMpKQorI2RlZmluZSBTUkFWCQkoSEkoMCkgfCBMTyg3KSkKKyNkZWZpbmUgU1VCX1MJCShISSgxNykgfCBGTVRfUyB8IExPKDEpKQorI2RlZmluZSBTVUJVCQkoSEkoMCkgfCBMTygzNSkpCisjZGVmaW5lIFNXCQkoSEkoNDMpKQorI2RlZmluZSBUUlVOQ19XX1MJKEhJKDE3KSB8IEZNVF9TIHwgTE8oMTMpKQorI2RlZmluZSBYT1IJCShISSgwKSB8IExPKDM4KSkKKyNkZWZpbmUgWE9SSQkJKEhJKDE0KSkKKworI2lmIChkZWZpbmVkIFNMSklUX01JUFNfUjEgJiYgU0xKSVRfTUlQU19SMSkKKyNkZWZpbmUgQ0xaCQkoSEkoMjgpIHwgTE8oMzIpKQorI2RlZmluZSBEQ0xaCQkoSEkoMjgpIHwgTE8oMzYpKQorI2RlZmluZSBNVUwJCShISSgyOCkgfCBMTygyKSkKKyNkZWZpbmUgU0VCCQkoSEkoMzEpIHwgKDE2IDw8IDYpIHwgTE8oMzIpKQorI2RlZmluZSBTRUgJCShISSgzMSkgfCAoMjQgPDwgNikgfCBMTygzMikpCisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorI2RlZmluZSBBRERVX1cJCUFERFUKKyNkZWZpbmUgQURESVVfVwkJQURESVUKKyNkZWZpbmUgU0xMX1cJCVNMTAorI2RlZmluZSBTVUJVX1cJCVNVQlUKKyNlbHNlCisjZGVmaW5lIEFERFVfVwkJREFERFUKKyNkZWZpbmUgQURESVVfVwkJREFERElVCisjZGVmaW5lIFNMTF9XCQlEU0xMCisjZGVmaW5lIFNVQlVfVwkJRFNVQlUKKyNlbmRpZgorCisjZGVmaW5lIFNJTU1fTUFYCSgweDdmZmYpCisjZGVmaW5lIFNJTU1fTUlOCSgtMHg4MDAwKQorI2RlZmluZSBVSU1NX01BWAkoMHhmZmZmKQorCisvKiBkZXN0X3JlZyBpcyB0aGUgYWJzb2x1dGUgbmFtZSBvZiB0aGUgcmVnaXN0ZXIKKyAgIFVzZWZ1bCBmb3IgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgaW4gdGhlIGRlbGF5IHNsb3QuICovCitzdGF0aWMgc2xqaXRfc2kgcHVzaF9pbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X2lucyBpbnMsIHNsaml0X3NpIGRlbGF5X3Nsb3QpCit7CisJU0xKSVRfQVNTRVJUKGRlbGF5X3Nsb3QgPT0gTU9WQUJMRV9JTlMgfHwgZGVsYXlfc2xvdCA+PSBVTk1PVkFCTEVfSU5TCisJCXx8IGRlbGF5X3Nsb3QgPT0gKChpbnMgPj4gMTEpICYgMHgxZikgfHwgZGVsYXlfc2xvdCA9PSAoKGlucyA+PiAxNikgJiAweDFmKSk7CisJc2xqaXRfaW5zICpwdHIgPSAoc2xqaXRfaW5zKillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfaW5zKSk7CisJRkFJTF9JRighcHRyKTsKKwkqcHRyID0gaW5zOworCWNvbXBpbGVyLT5zaXplKys7CisJY29tcGlsZXItPmRlbGF5X3Nsb3QgPSBkZWxheV9zbG90OworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X2lucyBpbnZlcnRfYnJhbmNoKHNsaml0X3NpIGZsYWdzKQoreworCXJldHVybiAoZmxhZ3MgJiBJU19CSVQyNl9DT05EKSA/ICgxIDw8IDI2KSA6ICgxIDw8IDE2KTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9pbnMqIGRldGVjdF9qdW1wX3R5cGUoc3RydWN0IHNsaml0X2p1bXAgKmp1bXAsIHNsaml0X2lucyAqY29kZV9wdHIsIHNsaml0X2lucyAqY29kZSkKK3sKKwlzbGppdF9zdyBkaWZmOworCXNsaml0X3V3IHRhcmdldF9hZGRyOworCXNsaml0X2lucyAqaW5zdDsKKwlzbGppdF9pbnMgc2F2ZWRfaW5zdDsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorCWlmIChqdW1wLT5mbGFncyAmIChTTEpJVF9SRVdSSVRBQkxFX0pVTVAgfCBJU19DQUxMKSkKKwkJcmV0dXJuIGNvZGVfcHRyOworI2Vsc2UKKwlpZiAoanVtcC0+ZmxhZ3MgJiBTTEpJVF9SRVdSSVRBQkxFX0pVTVApCisJCXJldHVybiBjb2RlX3B0cjsKKyNlbmRpZgorCisJaWYgKGp1bXAtPmZsYWdzICYgSlVNUF9BRERSKQorCQl0YXJnZXRfYWRkciA9IGp1bXAtPnUudGFyZ2V0OworCWVsc2UgeworCQlTTEpJVF9BU1NFUlQoanVtcC0+ZmxhZ3MgJiBKVU1QX0xBQkVMKTsKKwkJdGFyZ2V0X2FkZHIgPSAoc2xqaXRfdXcpKGNvZGUgKyBqdW1wLT51LmxhYmVsLT5zaXplKTsKKwl9CisJaW5zdCA9IChzbGppdF9pbnMqKWp1bXAtPmFkZHI7CisJaWYgKGp1bXAtPmZsYWdzICYgSVNfQ09ORCkKKwkJaW5zdC0tOworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfNjQgJiYgU0xKSVRfQ09ORklHX01JUFNfNjQpCisJaWYgKGp1bXAtPmZsYWdzICYgSVNfQ0FMTCkKKwkJZ290byBrZWVwX2FkZHJlc3M7CisjZW5kaWYKKworCS8qIEIgaW5zdHJ1Y3Rpb25zLiAqLworCWlmIChqdW1wLT5mbGFncyAmIElTX01PVkFCTEUpIHsKKwkJZGlmZiA9ICgoc2xqaXRfc3cpdGFyZ2V0X2FkZHIgLSAoc2xqaXRfc3cpKGluc3QpKSA+PiAyOworCQlpZiAoZGlmZiA8PSBTSU1NX01BWCAmJiBkaWZmID49IFNJTU1fTUlOKSB7CisJCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9COworCisJCQlpZiAoIShqdW1wLT5mbGFncyAmIElTX0NPTkQpKSB7CisJCQkJaW5zdFswXSA9IGluc3RbLTFdOworCQkJCWluc3RbLTFdID0gKGp1bXAtPmZsYWdzICYgSVNfSkFMKSA/IEJBTCA6IEI7CisJCQkJanVtcC0+YWRkciAtPSBzaXplb2Yoc2xqaXRfaW5zKTsKKwkJCQlyZXR1cm4gaW5zdDsKKwkJCX0KKwkJCXNhdmVkX2luc3QgPSBpbnN0WzBdOworCQkJaW5zdFswXSA9IGluc3RbLTFdOworCQkJaW5zdFstMV0gPSBzYXZlZF9pbnN0IF4gaW52ZXJ0X2JyYW5jaChqdW1wLT5mbGFncyk7CisJCQlqdW1wLT5hZGRyIC09IDIgKiBzaXplb2Yoc2xqaXRfaW5zKTsKKwkJCXJldHVybiBpbnN0OworCQl9CisJfQorCWVsc2UgeworCQlkaWZmID0gKChzbGppdF9zdyl0YXJnZXRfYWRkciAtIChzbGppdF9zdykoaW5zdCArIDEpKSA+PiAyOworCQlpZiAoZGlmZiA8PSBTSU1NX01BWCAmJiBkaWZmID49IFNJTU1fTUlOKSB7CisJCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9COworCisJCQlpZiAoIShqdW1wLT5mbGFncyAmIElTX0NPTkQpKSB7CisJCQkJaW5zdFswXSA9IChqdW1wLT5mbGFncyAmIElTX0pBTCkgPyBCQUwgOiBCOworCQkJCWluc3RbMV0gPSBOT1A7CisJCQkJcmV0dXJuIGluc3QgKyAxOworCQkJfQorCQkJaW5zdFswXSA9IGluc3RbMF0gXiBpbnZlcnRfYnJhbmNoKGp1bXAtPmZsYWdzKTsKKwkJCWluc3RbMV0gPSBOT1A7CisJCQlqdW1wLT5hZGRyIC09IHNpemVvZihzbGppdF9pbnMpOworCQkJcmV0dXJuIGluc3QgKyAxOworCQl9CisJfQorCisJaWYgKGp1bXAtPmZsYWdzICYgSVNfQ09ORCkgeworCQlpZiAoKGp1bXAtPmZsYWdzICYgSVNfTU9WQUJMRSkgJiYgKHRhcmdldF9hZGRyICYgfjB4ZmZmZmZmZikgPT0gKChqdW1wLT5hZGRyICsgMiAqIHNpemVvZihzbGppdF9pbnMpKSAmIH4weGZmZmZmZmYpKSB7CisJCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9KOworCQkJc2F2ZWRfaW5zdCA9IGluc3RbMF07CisJCQlpbnN0WzBdID0gaW5zdFstMV07CisJCQlpbnN0Wy0xXSA9IChzYXZlZF9pbnN0ICYgMHhmZmZmMDAwMCkgfCAzOworCQkJaW5zdFsxXSA9IEo7CisJCQlpbnN0WzJdID0gTk9QOworCQkJcmV0dXJuIGluc3QgKyAyOworCQl9CisJCWVsc2UgaWYgKCh0YXJnZXRfYWRkciAmIH4weGZmZmZmZmYpID09ICgoanVtcC0+YWRkciArIDMgKiBzaXplb2Yoc2xqaXRfaW5zKSkgJiB+MHhmZmZmZmZmKSkgeworCQkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfSjsKKwkJCWluc3RbMF0gPSAoaW5zdFswXSAmIDB4ZmZmZjAwMDApIHwgMzsKKwkJCWluc3RbMV0gPSBOT1A7CisJCQlpbnN0WzJdID0gSjsKKwkJCWluc3RbM10gPSBOT1A7CisJCQlqdW1wLT5hZGRyICs9IHNpemVvZihzbGppdF9pbnMpOworCQkJcmV0dXJuIGluc3QgKyAzOworCQl9CisJfQorCWVsc2UgeworCQkvKiBKIGluc3R1Y3Rpb25zLiAqLworCQlpZiAoKGp1bXAtPmZsYWdzICYgSVNfTU9WQUJMRSkgJiYgKHRhcmdldF9hZGRyICYgfjB4ZmZmZmZmZikgPT0gKGp1bXAtPmFkZHIgJiB+MHhmZmZmZmZmKSkgeworCQkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfSjsKKwkJCWluc3RbMF0gPSBpbnN0Wy0xXTsKKwkJCWluc3RbLTFdID0gKGp1bXAtPmZsYWdzICYgSVNfSkFMKSA/IEpBTCA6IEo7CisJCQlqdW1wLT5hZGRyIC09IHNpemVvZihzbGppdF9pbnMpOworCQkJcmV0dXJuIGluc3Q7CisJCX0KKworCQlpZiAoKHRhcmdldF9hZGRyICYgfjB4ZmZmZmZmZikgPT0gKChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X2lucykpICYgfjB4ZmZmZmZmZikpIHsKKwkJCWp1bXAtPmZsYWdzIHw9IFBBVENIX0o7CisJCQlpbnN0WzBdID0gKGp1bXAtPmZsYWdzICYgSVNfSkFMKSA/IEpBTCA6IEo7CisJCQlpbnN0WzFdID0gTk9QOworCQkJcmV0dXJuIGluc3QgKyAxOworCQl9CisJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfNjQgJiYgU0xKSVRfQ09ORklHX01JUFNfNjQpCitrZWVwX2FkZHJlc3M6CisJaWYgKHRhcmdldF9hZGRyIDw9IDB4N2ZmZmZmZmYpIHsKKwkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfQUJTMzI7CisJCWlmIChqdW1wLT5mbGFncyAmIElTX0NPTkQpIHsKKwkJCWluc3RbMF0gLT0gNDsKKwkJCWluc3QrKzsKKwkJfQorCQlpbnN0WzJdID0gaW5zdFs2XTsKKwkJaW5zdFszXSA9IGluc3RbN107CisJCXJldHVybiBpbnN0ICsgMzsKKwl9CisJaWYgKHRhcmdldF9hZGRyIDw9IDB4N2ZmZmZmZmZmZmZmbCkgeworCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9BQlM0ODsKKwkJaWYgKGp1bXAtPmZsYWdzICYgSVNfQ09ORCkgeworCQkJaW5zdFswXSAtPSAyOworCQkJaW5zdCsrOworCQl9CisJCWluc3RbNF0gPSBpbnN0WzZdOworCQlpbnN0WzVdID0gaW5zdFs3XTsKKwkJcmV0dXJuIGluc3QgKyA1OworCX0KKyNlbmRpZgorCisJcmV0dXJuIGNvZGVfcHRyOworfQorCisjaWZkZWYgX19HTlVDX18KK3N0YXRpYyBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKSB2b2lkIHNsaml0X2NhY2hlX2ZsdXNoKHZvaWQqIGNvZGUsIHZvaWQqIGNvZGVfcHRyKQoreworCVNMSklUX0NBQ0hFX0ZMVVNIKGNvZGUsIGNvZGVfcHRyKTsKK30KKyNlbmRpZgorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCogc2xqaXRfZ2VuZXJhdGVfY29kZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQoreworCXN0cnVjdCBzbGppdF9tZW1vcnlfZnJhZ21lbnQgKmJ1ZjsKKwlzbGppdF9pbnMgKmNvZGU7CisJc2xqaXRfaW5zICpjb2RlX3B0cjsKKwlzbGppdF9pbnMgKmJ1Zl9wdHI7CisJc2xqaXRfaW5zICpidWZfZW5kOworCXNsaml0X3V3IHdvcmRfY291bnQ7CisJc2xqaXRfdXcgYWRkcjsKKworCXN0cnVjdCBzbGppdF9sYWJlbCAqbGFiZWw7CisJc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CisJc3RydWN0IHNsaml0X2NvbnN0ICpjb25zdF87CisKKwlDSEVDS19FUlJPUl9QVFIoKTsKKwlDSEVDS19QVFIoY2hlY2tfc2xqaXRfZ2VuZXJhdGVfY29kZShjb21waWxlcikpOworCXJldmVyc2VfYnVmKGNvbXBpbGVyKTsKKworCWNvZGUgPSAoc2xqaXRfaW5zKilTTEpJVF9NQUxMT0NfRVhFQyhjb21waWxlci0+c2l6ZSAqIHNpemVvZihzbGppdF9pbnMpKTsKKwlQVFJfRkFJTF9XSVRIX0VYRUNfSUYoY29kZSk7CisJYnVmID0gY29tcGlsZXItPmJ1ZjsKKworCWNvZGVfcHRyID0gY29kZTsKKwl3b3JkX2NvdW50ID0gMDsKKwlsYWJlbCA9IGNvbXBpbGVyLT5sYWJlbHM7CisJanVtcCA9IGNvbXBpbGVyLT5qdW1wczsKKwljb25zdF8gPSBjb21waWxlci0+Y29uc3RzOworCWRvIHsKKwkJYnVmX3B0ciA9IChzbGppdF9pbnMqKWJ1Zi0+bWVtb3J5OworCQlidWZfZW5kID0gYnVmX3B0ciArIChidWYtPnVzZWRfc2l6ZSA+PiAyKTsKKwkJZG8geworCQkJKmNvZGVfcHRyID0gKmJ1Zl9wdHIrKzsKKwkJCVNMSklUX0FTU0VSVCghbGFiZWwgfHwgbGFiZWwtPnNpemUgPj0gd29yZF9jb3VudCk7CisJCQlTTEpJVF9BU1NFUlQoIWp1bXAgfHwganVtcC0+YWRkciA+PSB3b3JkX2NvdW50KTsKKwkJCVNMSklUX0FTU0VSVCghY29uc3RfIHx8IGNvbnN0Xy0+YWRkciA+PSB3b3JkX2NvdW50KTsKKwkJCS8qIFRoZXNlIHN0cnVjdHVyZXMgYXJlIG9yZGVyZWQgYnkgdGhlaXIgYWRkcmVzcy4gKi8KKwkJCWlmIChsYWJlbCAmJiBsYWJlbC0+c2l6ZSA9PSB3b3JkX2NvdW50KSB7CisJCQkJLyogSnVzdCByZWNvcmRpbmcgdGhlIGFkZHJlc3MuICovCisJCQkJbGFiZWwtPmFkZHIgPSAoc2xqaXRfdXcpY29kZV9wdHI7CisJCQkJbGFiZWwtPnNpemUgPSBjb2RlX3B0ciAtIGNvZGU7CisJCQkJbGFiZWwgPSBsYWJlbC0+bmV4dDsKKwkJCX0KKwkJCWlmIChqdW1wICYmIGp1bXAtPmFkZHIgPT0gd29yZF9jb3VudCkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorCQkJCWp1bXAtPmFkZHIgPSAoc2xqaXRfdXcpKGNvZGVfcHRyIC0gMyk7CisjZWxzZQorCQkJCWp1bXAtPmFkZHIgPSAoc2xqaXRfdXcpKGNvZGVfcHRyIC0gNyk7CisjZW5kaWYKKwkJCQljb2RlX3B0ciA9IGRldGVjdF9qdW1wX3R5cGUoanVtcCwgY29kZV9wdHIsIGNvZGUpOworCQkJCWp1bXAgPSBqdW1wLT5uZXh0OworCQkJfQorCQkJaWYgKGNvbnN0XyAmJiBjb25zdF8tPmFkZHIgPT0gd29yZF9jb3VudCkgeworCQkJCS8qIEp1c3QgcmVjb3JkaW5nIHRoZSBhZGRyZXNzLiAqLworCQkJCWNvbnN0Xy0+YWRkciA9IChzbGppdF91dyljb2RlX3B0cjsKKwkJCQljb25zdF8gPSBjb25zdF8tPm5leHQ7CisJCQl9CisJCQljb2RlX3B0ciArKzsKKwkJCXdvcmRfY291bnQgKys7CisJCX0gd2hpbGUgKGJ1Zl9wdHIgPCBidWZfZW5kKTsKKworCQlidWYgPSBidWYtPm5leHQ7CisJfSB3aGlsZSAoYnVmKTsKKworCWlmIChsYWJlbCAmJiBsYWJlbC0+c2l6ZSA9PSB3b3JkX2NvdW50KSB7CisJCWxhYmVsLT5hZGRyID0gKHNsaml0X3V3KWNvZGVfcHRyOworCQlsYWJlbC0+c2l6ZSA9IGNvZGVfcHRyIC0gY29kZTsKKwkJbGFiZWwgPSBsYWJlbC0+bmV4dDsKKwl9CisKKwlTTEpJVF9BU1NFUlQoIWxhYmVsKTsKKwlTTEpJVF9BU1NFUlQoIWp1bXApOworCVNMSklUX0FTU0VSVCghY29uc3RfKTsKKwlTTEpJVF9BU1NFUlQoY29kZV9wdHIgLSBjb2RlIDw9IChzbGppdF9zdyljb21waWxlci0+c2l6ZSk7CisKKwlqdW1wID0gY29tcGlsZXItPmp1bXBzOworCXdoaWxlIChqdW1wKSB7CisJCWRvIHsKKwkJCWFkZHIgPSAoanVtcC0+ZmxhZ3MgJiBKVU1QX0xBQkVMKSA/IGp1bXAtPnUubGFiZWwtPmFkZHIgOiBqdW1wLT51LnRhcmdldDsKKwkJCWJ1Zl9wdHIgPSAoc2xqaXRfaW5zKilqdW1wLT5hZGRyOworCisJCQlpZiAoanVtcC0+ZmxhZ3MgJiBQQVRDSF9CKSB7CisJCQkJYWRkciA9IChzbGppdF9zdykoYWRkciAtIChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X2lucykpKSA+PiAyOworCQkJCVNMSklUX0FTU0VSVCgoc2xqaXRfc3cpYWRkciA8PSBTSU1NX01BWCAmJiAoc2xqaXRfc3cpYWRkciA+PSBTSU1NX01JTik7CisJCQkJYnVmX3B0clswXSA9IChidWZfcHRyWzBdICYgMHhmZmZmMDAwMCkgfCAoYWRkciAmIDB4ZmZmZik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoanVtcC0+ZmxhZ3MgJiBQQVRDSF9KKSB7CisJCQkJU0xKSVRfQVNTRVJUKChhZGRyICYgfjB4ZmZmZmZmZikgPT0gKChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X2lucykpICYgfjB4ZmZmZmZmZikpOworCQkJCWJ1Zl9wdHJbMF0gfD0gKGFkZHIgPj4gMikgJiAweDAzZmZmZmZmOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBTZXQgdGhlIGZpZWxkcyBvZiBpbW1lZGlhdGUgbG9hZHMuICovCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpCisJCQlidWZfcHRyWzBdID0gKGJ1Zl9wdHJbMF0gJiAweGZmZmYwMDAwKSB8ICgoYWRkciA+PiAxNikgJiAweGZmZmYpOworCQkJYnVmX3B0clsxXSA9IChidWZfcHRyWzFdICYgMHhmZmZmMDAwMCkgfCAoYWRkciAmIDB4ZmZmZik7CisjZWxzZQorCQkJaWYgKGp1bXAtPmZsYWdzICYgUEFUQ0hfQUJTMzIpIHsKKwkJCQlTTEpJVF9BU1NFUlQoYWRkciA8PSAweDdmZmZmZmZmKTsKKwkJCQlidWZfcHRyWzBdID0gKGJ1Zl9wdHJbMF0gJiAweGZmZmYwMDAwKSB8ICgoYWRkciA+PiAxNikgJiAweGZmZmYpOworCQkJCWJ1Zl9wdHJbMV0gPSAoYnVmX3B0clsxXSAmIDB4ZmZmZjAwMDApIHwgKGFkZHIgJiAweGZmZmYpOworCQkJfQorCQkJZWxzZSBpZiAoanVtcC0+ZmxhZ3MgJiBQQVRDSF9BQlM0OCkgeworCQkJCVNMSklUX0FTU0VSVChhZGRyIDw9IDB4N2ZmZmZmZmZmZmZmbCk7CisJCQkJYnVmX3B0clswXSA9IChidWZfcHRyWzBdICYgMHhmZmZmMDAwMCkgfCAoKGFkZHIgPj4gMzIpICYgMHhmZmZmKTsKKwkJCQlidWZfcHRyWzFdID0gKGJ1Zl9wdHJbMV0gJiAweGZmZmYwMDAwKSB8ICgoYWRkciA+PiAxNikgJiAweGZmZmYpOworCQkJCWJ1Zl9wdHJbM10gPSAoYnVmX3B0clszXSAmIDB4ZmZmZjAwMDApIHwgKGFkZHIgJiAweGZmZmYpOworCQkJfQorCQkJZWxzZSB7CisJCQkJYnVmX3B0clswXSA9IChidWZfcHRyWzBdICYgMHhmZmZmMDAwMCkgfCAoKGFkZHIgPj4gNDgpICYgMHhmZmZmKTsKKwkJCQlidWZfcHRyWzFdID0gKGJ1Zl9wdHJbMV0gJiAweGZmZmYwMDAwKSB8ICgoYWRkciA+PiAzMikgJiAweGZmZmYpOworCQkJCWJ1Zl9wdHJbM10gPSAoYnVmX3B0clszXSAmIDB4ZmZmZjAwMDApIHwgKChhZGRyID4+IDE2KSAmIDB4ZmZmZik7CisJCQkJYnVmX3B0cls1XSA9IChidWZfcHRyWzVdICYgMHhmZmZmMDAwMCkgfCAoYWRkciAmIDB4ZmZmZik7CisJCQl9CisjZW5kaWYKKwkJfSB3aGlsZSAoMCk7CisJCWp1bXAgPSBqdW1wLT5uZXh0OworCX0KKworCWNvbXBpbGVyLT5lcnJvciA9IFNMSklUX0VSUl9DT01QSUxFRDsKKwljb21waWxlci0+ZXhlY3V0YWJsZV9zaXplID0gKGNvZGVfcHRyIC0gY29kZSkgKiBzaXplb2Yoc2xqaXRfaW5zKTsKKyNpZm5kZWYgX19HTlVDX18KKwlTTEpJVF9DQUNIRV9GTFVTSChjb2RlLCBjb2RlX3B0cik7CisjZWxzZQorCS8qIEdDQyB3b3JrYXJvdW5kIGZvciBpbnZhbGlkIGNvZGUgZ2VuZXJhdGlvbiB3aXRoIC1PMi4gKi8KKwlzbGppdF9jYWNoZV9mbHVzaChjb2RlLCBjb2RlX3B0cik7CisjZW5kaWYKKwlyZXR1cm4gY29kZTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgRW50cnksIGV4aXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBDcmVhdGVzIGFuIGluZGV4IGluIGRhdGFfdHJhbnNmZXJfaW5zdHMgYXJyYXkuICovCisjZGVmaW5lIExPQURfREFUQQkweDAxCisjZGVmaW5lIFdPUkRfREFUQQkweDAwCisjZGVmaW5lIEJZVEVfREFUQQkweDAyCisjZGVmaW5lIEhBTEZfREFUQQkweDA0CisjZGVmaW5lIElOVF9EQVRBCTB4MDYKKyNkZWZpbmUgU0lHTkVEX0RBVEEJMHgwOAorLyogU2VwYXJhdGVzIGludGVnZXIgYW5kIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBHUFJfUkVHCQkweDBmCisjZGVmaW5lIERPVUJMRV9EQVRBCTB4MTAKKyNkZWZpbmUgU0lOR0xFX0RBVEEJMHgxMgorCisjZGVmaW5lIE1FTV9NQVNLCTB4MWYKKworI2RlZmluZSBXUklURV9CQUNLCTB4MDAwMjAKKyNkZWZpbmUgQVJHX1RFU1QJMHgwMDA0MAorI2RlZmluZSBBTFRfS0VFUF9DQUNIRQkweDAwMDgwCisjZGVmaW5lIENVTVVMQVRJVkVfT1AJMHgwMDEwMAorI2RlZmluZSBMT0dJQ0FMX09QCTB4MDAyMDAKKyNkZWZpbmUgSU1NX09QCQkweDAwNDAwCisjZGVmaW5lIFNSQzJfSU1NCTB4MDA4MDAKKworI2RlZmluZSBVTlVTRURfREVTVAkweDAxMDAwCisjZGVmaW5lIFJFR19ERVNUCTB4MDIwMDAKKyNkZWZpbmUgUkVHMV9TT1VSQ0UJMHgwNDAwMAorI2RlZmluZSBSRUcyX1NPVVJDRQkweDA4MDAwCisjZGVmaW5lIFNMT1dfU1JDMQkweDEwMDAwCisjZGVmaW5lIFNMT1dfU1JDMgkweDIwMDAwCisjZGVmaW5lIFNMT1dfREVTVAkweDQwMDAwCisKKy8qIE9ubHkgdGhlc2UgZmxhZ3MgYXJlIHNldC4gVU5VU0VEX0RFU1QgaXMgbm90IHNldCB3aGVuIG5vIGZsYWdzIHNob3VsZCBiZSBzZXQuICovCisjZGVmaW5lIENIRUNLX0ZMQUdTKGxpc3QpIFwKKwkoIShmbGFncyAmIFVOVVNFRF9ERVNUKSB8fCAob3AgJiBHRVRfRkxBR1MofihsaXN0KSkpKQorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpCisjZGVmaW5lIFNUQUNLX1NUT1JFCVNXCisjZGVmaW5lIFNUQUNLX0xPQUQJTFcKKyNlbHNlCisjZGVmaW5lIFNUQUNLX1NUT1JFCVNECisjZGVmaW5lIFNUQUNLX0xPQUQJTEQKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpCisjaW5jbHVkZSAic2xqaXROYXRpdmVNSVBTXzMyLmMiCisjZWxzZQorI2luY2x1ZGUgInNsaml0TmF0aXZlTUlQU182NC5jIgorI2VuZGlmCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfc2kgb3B0aW9ucywgc2xqaXRfc2kgYXJncywgc2xqaXRfc2kgc2NyYXRjaGVzLCBzbGppdF9zaSBzYXZlZHMsCisJc2xqaXRfc2kgZnNjcmF0Y2hlcywgc2xqaXRfc2kgZnNhdmVkcywgc2xqaXRfc2kgbG9jYWxfc2l6ZSkKK3sKKwlzbGppdF9pbnMgYmFzZTsKKwlzbGppdF9zaSBpLCB0bXAsIG9mZnM7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZW50ZXIoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CisJc2V0X2VtaXRfZW50ZXIoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKTsKKworCWxvY2FsX3NpemUgKz0gR0VUX1NBVkVEX1JFR0lTVEVSU19TSVpFKHNjcmF0Y2hlcywgc2F2ZWRzLCAxKSArIFNMSklUX0xPQ0FMU19PRkZTRVQ7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpCisJbG9jYWxfc2l6ZSA9IChsb2NhbF9zaXplICsgMTUpICYgfjB4ZjsKKyNlbHNlCisJbG9jYWxfc2l6ZSA9IChsb2NhbF9zaXplICsgMzEpICYgfjB4MWY7CisjZW5kaWYKKwljb21waWxlci0+bG9jYWxfc2l6ZSA9IGxvY2FsX3NpemU7CisKKwlpZiAobG9jYWxfc2l6ZSA8PSBTSU1NX01BWCkgeworCQkvKiBGcmVxdWVudCBjYXNlLiAqLworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVVfVyB8IFMoU0xKSVRfU1ApIHwgVChTTEpJVF9TUCkgfCBJTU0oLWxvY2FsX3NpemUpLCBEUihTTEpJVF9TUCkpKTsKKwkJYmFzZSA9IFMoU0xKSVRfU1ApOworCX0KKwllbHNlIHsKKwkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgRFIoVE1QX1JFRzEpLCBsb2NhbF9zaXplKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVX1cgfCBTKFNMSklUX1NQKSB8IFRBKDApIHwgRChUTVBfUkVHMiksIERSKFRNUF9SRUcyKSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1VCVV9XIHwgUyhTTEpJVF9TUCkgfCBUKFRNUF9SRUcxKSB8IEQoU0xKSVRfU1ApLCBEUihTTEpJVF9TUCkpKTsKKwkJYmFzZSA9IFMoVE1QX1JFRzIpOworCQlsb2NhbF9zaXplID0gMDsKKwl9CisKKwlvZmZzID0gbG9jYWxfc2l6ZSAtIChzbGppdF9zdykoc2l6ZW9mKHNsaml0X3N3KSk7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUQUNLX1NUT1JFIHwgYmFzZSB8IFRBKFJFVFVSTl9BRERSX1JFRykgfCBJTU0ob2ZmcyksIE1PVkFCTEVfSU5TKSk7CisKKwl0bXAgPSBzYXZlZHMgPCBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTID8gKFNMSklUX1MwICsgMSAtIHNhdmVkcykgOiBTTEpJVF9GSVJTVF9TQVZFRF9SRUc7CisJZm9yIChpID0gU0xKSVRfUzA7IGkgPj0gdG1wOyBpLS0pIHsKKwkJb2ZmcyAtPSAoc2xqaXRfc2kpKHNpemVvZihzbGppdF9zdykpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RBQ0tfU1RPUkUgfCBiYXNlIHwgVChpKSB8IElNTShvZmZzKSwgTU9WQUJMRV9JTlMpKTsKKwl9CisKKwlmb3IgKGkgPSBzY3JhdGNoZXM7IGkgPj0gU0xKSVRfRklSU1RfU0FWRURfUkVHOyBpLS0pIHsKKwkJb2ZmcyAtPSAoc2xqaXRfc2kpKHNpemVvZihzbGppdF9zdykpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RBQ0tfU1RPUkUgfCBiYXNlIHwgVChpKSB8IElNTShvZmZzKSwgTU9WQUJMRV9JTlMpKTsKKwl9CisKKwlpZiAoYXJncyA+PSAxKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREVV9XIHwgU0EoNCkgfCBUQSgwKSB8IEQoU0xKSVRfUzApLCBEUihTTEpJVF9TMCkpKTsKKwlpZiAoYXJncyA+PSAyKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREVV9XIHwgU0EoNSkgfCBUQSgwKSB8IEQoU0xKSVRfUzEpLCBEUihTTEpJVF9TMSkpKTsKKwlpZiAoYXJncyA+PSAzKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREVV9XIHwgU0EoNikgfCBUQSgwKSB8IEQoU0xKSVRfUzIpLCBEUihTTEpJVF9TMikpKTsKKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKKwlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQoreworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfc2V0X2NvbnRleHQoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CisJc2V0X3NldF9jb250ZXh0KGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSk7CisKKwlsb2NhbF9zaXplICs9IEdFVF9TQVZFRF9SRUdJU1RFUlNfU0laRShzY3JhdGNoZXMsIHNhdmVkcywgMSkgKyBTTEpJVF9MT0NBTFNfT0ZGU0VUOworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorCWNvbXBpbGVyLT5sb2NhbF9zaXplID0gKGxvY2FsX3NpemUgKyAxNSkgJiB+MHhmOworI2Vsc2UKKwljb21waWxlci0+bG9jYWxfc2l6ZSA9IChsb2NhbF9zaXplICsgMzEpICYgfjB4MWY7CisjZW5kaWYKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc2xqaXRfc2kgbG9jYWxfc2l6ZSwgaSwgdG1wLCBvZmZzOworCXNsaml0X2lucyBiYXNlOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X3JldHVybihjb21waWxlciwgb3AsIHNyYywgc3JjdykpOworCisJRkFJTF9JRihlbWl0X21vdl9iZWZvcmVfcmV0dXJuKGNvbXBpbGVyLCBvcCwgc3JjLCBzcmN3KSk7CisKKwlsb2NhbF9zaXplID0gY29tcGlsZXItPmxvY2FsX3NpemU7CisJaWYgKGxvY2FsX3NpemUgPD0gU0lNTV9NQVgpCisJCWJhc2UgPSBTKFNMSklUX1NQKTsKKwllbHNlIHsKKwkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgRFIoVE1QX1JFRzEpLCBsb2NhbF9zaXplKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVX1cgfCBTKFNMSklUX1NQKSB8IFQoVE1QX1JFRzEpIHwgRChUTVBfUkVHMSksIERSKFRNUF9SRUcxKSkpOworCQliYXNlID0gUyhUTVBfUkVHMSk7CisJCWxvY2FsX3NpemUgPSAwOworCX0KKworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVEFDS19MT0FEIHwgYmFzZSB8IFRBKFJFVFVSTl9BRERSX1JFRykgfCBJTU0obG9jYWxfc2l6ZSAtIChzbGppdF9zaSlzaXplb2Yoc2xqaXRfc3cpKSwgUkVUVVJOX0FERFJfUkVHKSk7CisJb2ZmcyA9IGxvY2FsX3NpemUgLSAoc2xqaXRfc2kpR0VUX1NBVkVEX1JFR0lTVEVSU19TSVpFKGNvbXBpbGVyLT5zY3JhdGNoZXMsIGNvbXBpbGVyLT5zYXZlZHMsIDEpOworCisJdG1wID0gY29tcGlsZXItPnNjcmF0Y2hlczsKKwlmb3IgKGkgPSBTTEpJVF9GSVJTVF9TQVZFRF9SRUc7IGkgPD0gdG1wOyBpKyspIHsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUQUNLX0xPQUQgfCBiYXNlIHwgVChpKSB8IElNTShvZmZzKSwgRFIoaSkpKTsKKwkJb2ZmcyArPSAoc2xqaXRfc2kpKHNpemVvZihzbGppdF9zdykpOworCX0KKworCXRtcCA9IGNvbXBpbGVyLT5zYXZlZHMgPCBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTID8gKFNMSklUX1MwICsgMSAtIGNvbXBpbGVyLT5zYXZlZHMpIDogU0xKSVRfRklSU1RfU0FWRURfUkVHOworCWZvciAoaSA9IHRtcDsgaSA8PSBTTEpJVF9TMDsgaSsrKSB7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVEFDS19MT0FEIHwgYmFzZSB8IFQoaSkgfCBJTU0ob2ZmcyksIERSKGkpKSk7CisJCW9mZnMgKz0gKHNsaml0X3NpKShzaXplb2Yoc2xqaXRfc3cpKTsKKwl9CisKKwlTTEpJVF9BU1NFUlQob2ZmcyA9PSBsb2NhbF9zaXplIC0gKHNsaml0X3N3KShzaXplb2Yoc2xqaXRfc3cpKSk7CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgSlIgfCBTQShSRVRVUk5fQUREUl9SRUcpLCBVTk1PVkFCTEVfSU5TKSk7CisJaWYgKGNvbXBpbGVyLT5sb2NhbF9zaXplIDw9IFNJTU1fTUFYKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJVV9XIHwgUyhTTEpJVF9TUCkgfCBUKFNMSklUX1NQKSB8IElNTShjb21waWxlci0+bG9jYWxfc2l6ZSksIFVOTU9WQUJMRV9JTlMpOworCWVsc2UKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQUREVV9XIHwgUyhUTVBfUkVHMSkgfCBUQSgwKSB8IEQoU0xKSVRfU1ApLCBVTk1PVkFCTEVfSU5TKTsKK30KKworI3VuZGVmIFNUQUNLX1NUT1JFCisjdW5kZWYgU1RBQ0tfTE9BRAorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBPcGVyYXRvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikKKyNkZWZpbmUgQVJDSF8zMl82NChhLCBiKQlhCisjZWxzZQorI2RlZmluZSBBUkNIXzMyXzY0KGEsIGIpCWIKKyNlbmRpZgorCitzdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfaW5zIGRhdGFfdHJhbnNmZXJfaW5zdHNbMTYgKyA0XSA9IHsKKy8qIHUgdyBzICovIEFSQ0hfMzJfNjQoSEkoNDMpIC8qIHN3ICovLCBISSg2MykgLyogc2QgKi8pLAorLyogdSB3IGwgKi8gQVJDSF8zMl82NChISSgzNSkgLyogbHcgKi8sIEhJKDU1KSAvKiBsZCAqLyksCisvKiB1IGIgcyAqLyBISSg0MCkgLyogc2IgKi8sCisvKiB1IGIgbCAqLyBISSgzNikgLyogbGJ1ICovLAorLyogdSBoIHMgKi8gSEkoNDEpIC8qIHNoICovLAorLyogdSBoIGwgKi8gSEkoMzcpIC8qIGxodSAqLywKKy8qIHUgaSBzICovIEhJKDQzKSAvKiBzdyAqLywKKy8qIHUgaSBsICovIEFSQ0hfMzJfNjQoSEkoMzUpIC8qIGx3ICovLCBISSgzOSkgLyogbHd1ICovKSwKKworLyogcyB3IHMgKi8gQVJDSF8zMl82NChISSg0MykgLyogc3cgKi8sIEhJKDYzKSAvKiBzZCAqLyksCisvKiBzIHcgbCAqLyBBUkNIXzMyXzY0KEhJKDM1KSAvKiBsdyAqLywgSEkoNTUpIC8qIGxkICovKSwKKy8qIHMgYiBzICovIEhJKDQwKSAvKiBzYiAqLywKKy8qIHMgYiBsICovIEhJKDMyKSAvKiBsYiAqLywKKy8qIHMgaCBzICovIEhJKDQxKSAvKiBzaCAqLywKKy8qIHMgaCBsICovIEhJKDMzKSAvKiBsaCAqLywKKy8qIHMgaSBzICovIEhJKDQzKSAvKiBzdyAqLywKKy8qIHMgaSBsICovIEhJKDM1KSAvKiBsdyAqLywKKworLyogZCAgIHMgKi8gSEkoNjEpIC8qIHNkYzEgKi8sCisvKiBkICAgbCAqLyBISSg1MykgLyogbGRjMSAqLywKKy8qIHMgICBzICovIEhJKDU3KSAvKiBzd2MxICovLAorLyogcyAgIGwgKi8gSEkoNDkpIC8qIGx3YzEgKi8sCit9OworCisjdW5kZWYgQVJDSF8zMl82NAorCisvKiByZWdfYXIgaXMgYW4gYWJzb3VsdXRlIHJlZ2lzdGVyISAqLworCisvKiBDYW4gcGVyZm9ybSBhbiBvcGVyYXRpb24gdXNpbmcgYXQgbW9zdCAxIGluc3RydWN0aW9uLiAqLworc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmdfZmFzdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnX2FyLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCit7CisJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CisKKwlpZiAoKCEoZmxhZ3MgJiBXUklURV9CQUNLKSB8fCAhKGFyZyAmIFJFR19NQVNLKSkgJiYgIShhcmcgJiBPRkZTX1JFR19NQVNLKSAmJiBhcmd3IDw9IFNJTU1fTUFYICYmIGFyZ3cgPj0gU0lNTV9NSU4pIHsKKwkJLyogV29ya3MgZm9yIGJvdGggYWJzb3VsdGUgYW5kIHJlbGF0aXZlIGFkZHJlc3Nlcy4gKi8KKwkJaWYgKFNMSklUX1VOTElLRUxZKGZsYWdzICYgQVJHX1RFU1QpKQorCQkJcmV0dXJuIDE7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBkYXRhX3RyYW5zZmVyX2luc3RzW2ZsYWdzICYgTUVNX01BU0tdIHwgUyhhcmcgJiBSRUdfTUFTSykKKwkJCXwgVEEocmVnX2FyKSB8IElNTShhcmd3KSwgKChmbGFncyAmIE1FTV9NQVNLKSA8PSBHUFJfUkVHICYmIChmbGFncyAmIExPQURfREFUQSkpID8gcmVnX2FyIDogTU9WQUJMRV9JTlMpKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogU2VlIGdldHB1dF9hcmcgYmVsb3cuCisgICBOb3RlOiBjYW5fY2FjaGUgaXMgY2FsbGVkIG9ubHkgZm9yIGJpbmFyeSBvcGVyYXRvcnMuIFRob3NlCisgICBvcGVyYXRvcnMgYWx3YXlzIHVzZXMgd29yZCBhcmd1bWVudHMgd2l0aG91dCB3cml0ZSBiYWNrLiAqLworc3RhdGljIHNsaml0X3NpIGNhbl9jYWNoZShzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3NpIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCit7CisJU0xKSVRfQVNTRVJUKChhcmcgJiBTTEpJVF9NRU0pICYmIChuZXh0X2FyZyAmIFNMSklUX01FTSkpOworCisJLyogU2ltcGxlIG9wZXJhdGlvbiBleGNlcHQgZm9yIHVwZGF0ZXMuICovCisJaWYgKGFyZyAmIE9GRlNfUkVHX01BU0spIHsKKwkJYXJndyAmPSAweDM7CisJCW5leHRfYXJndyAmPSAweDM7CisJCWlmIChhcmd3ICYmIGFyZ3cgPT0gbmV4dF9hcmd3ICYmIChhcmcgPT0gbmV4dF9hcmcgfHwgKGFyZyAmIE9GRlNfUkVHX01BU0spID09IChuZXh0X2FyZyAmIE9GRlNfUkVHX01BU0spKSkKKwkJCXJldHVybiAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYXJnID09IG5leHRfYXJnKSB7CisJCWlmICgoKG5leHRfYXJndyAtIGFyZ3cpIDw9IFNJTU1fTUFYICYmIChuZXh0X2FyZ3cgLSBhcmd3KSA+PSBTSU1NX01JTikpCisJCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIEVtaXQgdGhlIG5lY2Vzc2FyeSBpbnN0cnVjdGlvbnMuIFNlZSBjYW5fY2FjaGUgYWJvdmUuICovCitzdGF0aWMgc2xqaXRfc2kgZ2V0cHV0X2FyZyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnX2FyLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3NpIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCit7CisJc2xqaXRfc2kgdG1wX2FyLCBiYXNlLCBkZWxheV9zbG90OworCisJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CisJaWYgKCEobmV4dF9hcmcgJiBTTEpJVF9NRU0pKSB7CisJCW5leHRfYXJnID0gMDsKKwkJbmV4dF9hcmd3ID0gMDsKKwl9CisKKwlpZiAoKGZsYWdzICYgTUVNX01BU0spIDw9IEdQUl9SRUcgJiYgKGZsYWdzICYgTE9BRF9EQVRBKSkgeworCQl0bXBfYXIgPSByZWdfYXI7CisJCWRlbGF5X3Nsb3QgPSByZWdfYXI7CisJfSBlbHNlIHsKKwkJdG1wX2FyID0gRFIoVE1QX1JFRzEpOworCQlkZWxheV9zbG90ID0gTU9WQUJMRV9JTlM7CisJfQorCWJhc2UgPSBhcmcgJiBSRUdfTUFTSzsKKworCWlmIChTTEpJVF9VTkxJS0VMWShhcmcgJiBPRkZTX1JFR19NQVNLKSkgeworCQlhcmd3ICY9IDB4MzsKKwkJaWYgKChmbGFncyAmIFdSSVRFX0JBQ0spICYmIHJlZ19hciA9PSBEUihiYXNlKSkgeworCQkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBMT0FEX0RBVEEpICYmIERSKFRNUF9SRUcxKSAhPSByZWdfYXIpOworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERFVfVyB8IFNBKHJlZ19hcikgfCBUQSgwKSB8IEQoVE1QX1JFRzEpLCBEUihUTVBfUkVHMSkpKTsKKwkJCXJlZ19hciA9IERSKFRNUF9SRUcxKTsKKwkJfQorCisJCS8qIFVzaW5nIHRoZSBjYWNoZS4gKi8KKwkJaWYgKGFyZ3cgPT0gY29tcGlsZXItPmNhY2hlX2FyZ3cpIHsKKwkJCWlmICghKGZsYWdzICYgV1JJVEVfQkFDSykpIHsKKwkJCQlpZiAoYXJnID09IGNvbXBpbGVyLT5jYWNoZV9hcmcpCisJCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10gfCBTKFRNUF9SRUczKSB8IFRBKHJlZ19hciksIGRlbGF5X3Nsb3QpOworCQkJCWlmICgoU0xKSVRfTUVNIHwgKGFyZyAmIE9GRlNfUkVHX01BU0spKSA9PSBjb21waWxlci0+Y2FjaGVfYXJnKSB7CisJCQkJCWlmIChhcmcgPT0gbmV4dF9hcmcgJiYgYXJndyA9PSAobmV4dF9hcmd3ICYgMHgzKSkgeworCQkJCQkJY29tcGlsZXItPmNhY2hlX2FyZyA9IGFyZzsKKwkJCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVX1cgfCBTKGJhc2UpIHwgVChUTVBfUkVHMykgfCBEKFRNUF9SRUczKSwgRFIoVE1QX1JFRzMpKSk7CisJCQkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBkYXRhX3RyYW5zZmVyX2luc3RzW2ZsYWdzICYgTUVNX01BU0tdIHwgUyhUTVBfUkVHMykgfCBUQShyZWdfYXIpLCBkZWxheV9zbG90KTsKKwkJCQkJfQorCQkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREVV9XIHwgUyhiYXNlKSB8IFQoVE1QX1JFRzMpIHwgREEodG1wX2FyKSwgdG1wX2FyKSk7CisJCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10gfCBTQSh0bXBfYXIpIHwgVEEocmVnX2FyKSwgZGVsYXlfc2xvdCk7CisJCQkJfQorCQkJfQorCQkJZWxzZSB7CisJCQkJaWYgKChTTEpJVF9NRU0gfCAoYXJnICYgT0ZGU19SRUdfTUFTSykpID09IGNvbXBpbGVyLT5jYWNoZV9hcmcpIHsKKwkJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERFVfVyB8IFMoYmFzZSkgfCBUKFRNUF9SRUczKSB8IEQoYmFzZSksIERSKGJhc2UpKSk7CisJCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10gfCBTKGJhc2UpIHwgVEEocmVnX2FyKSwgZGVsYXlfc2xvdCk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKFNMSklUX1VOTElLRUxZKGFyZ3cpKSB7CisJCQljb21waWxlci0+Y2FjaGVfYXJnID0gU0xKSVRfTUVNIHwgKGFyZyAmIE9GRlNfUkVHX01BU0spOworCQkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNMTF9XIHwgVChPRkZTX1JFRyhhcmcpKSB8IEQoVE1QX1JFRzMpIHwgU0hfSU1NKGFyZ3cpLCBEUihUTVBfUkVHMykpKTsKKwkJfQorCisJCWlmICghKGZsYWdzICYgV1JJVEVfQkFDSykpIHsKKwkJCWlmIChhcmcgPT0gbmV4dF9hcmcgJiYgYXJndyA9PSAobmV4dF9hcmd3ICYgMHgzKSkgeworCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBhcmc7CisJCQkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVX1cgfCBTKGJhc2UpIHwgVCghYXJndyA/IE9GRlNfUkVHKGFyZykgOiBUTVBfUkVHMykgfCBEKFRNUF9SRUczKSwgRFIoVE1QX1JFRzMpKSk7CisJCQkJdG1wX2FyID0gRFIoVE1QX1JFRzMpOworCQkJfQorCQkJZWxzZQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVX1cgfCBTKGJhc2UpIHwgVCghYXJndyA/IE9GRlNfUkVHKGFyZykgOiBUTVBfUkVHMykgfCBEQSh0bXBfYXIpLCB0bXBfYXIpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10gfCBTQSh0bXBfYXIpIHwgVEEocmVnX2FyKSwgZGVsYXlfc2xvdCk7CisJCX0KKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERFVfVyB8IFMoYmFzZSkgfCBUKCFhcmd3ID8gT0ZGU19SRUcoYXJnKSA6IFRNUF9SRUczKSB8IEQoYmFzZSksIERSKGJhc2UpKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10gfCBTKGJhc2UpIHwgVEEocmVnX2FyKSwgZGVsYXlfc2xvdCk7CisJfQorCisJaWYgKFNMSklUX1VOTElLRUxZKGZsYWdzICYgV1JJVEVfQkFDSykgJiYgYmFzZSkgeworCQkvKiBVcGRhdGUgb25seSBhcHBsaWVzIGlmIGEgYmFzZSByZWdpc3RlciBleGlzdHMuICovCisJCWlmIChyZWdfYXIgPT0gRFIoYmFzZSkpIHsKKwkJCVNMSklUX0FTU0VSVCghKGZsYWdzICYgTE9BRF9EQVRBKSAmJiBEUihUTVBfUkVHMSkgIT0gcmVnX2FyKTsKKwkJCWlmIChhcmd3IDw9IFNJTU1fTUFYICYmIGFyZ3cgPj0gU0lNTV9NSU4pIHsKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSB8IFMoYmFzZSkgfCBUQShyZWdfYXIpIHwgSU1NKGFyZ3cpLCBNT1ZBQkxFX0lOUykpOworCQkJCWlmIChhcmd3KQorCQkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJVV9XIHwgUyhiYXNlKSB8IFQoYmFzZSkgfCBJTU0oYXJndyksIERSKGJhc2UpKTsKKwkJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJCX0KKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVX1cgfCBTQShyZWdfYXIpIHwgVEEoMCkgfCBEKFRNUF9SRUcxKSwgRFIoVE1QX1JFRzEpKSk7CisJCQlyZWdfYXIgPSBEUihUTVBfUkVHMSk7CisJCX0KKworCQlpZiAoYXJndyA8PSBTSU1NX01BWCAmJiBhcmd3ID49IFNJTU1fTUlOKSB7CisJCQlpZiAoYXJndykKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVVfVyB8IFMoYmFzZSkgfCBUKGJhc2UpIHwgSU1NKGFyZ3cpLCBEUihiYXNlKSkpOworCQl9CisJCWVsc2UgeworCQkJaWYgKGNvbXBpbGVyLT5jYWNoZV9hcmcgPT0gU0xKSVRfTUVNICYmIGFyZ3cgLSBjb21waWxlci0+Y2FjaGVfYXJndyA8PSBTSU1NX01BWCAmJiBhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cgPj0gU0lNTV9NSU4pIHsKKwkJCQlpZiAoYXJndyAhPSBjb21waWxlci0+Y2FjaGVfYXJndykgeworCQkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVVfVyB8IFMoVE1QX1JFRzMpIHwgVChUTVBfUkVHMykgfCBJTU0oYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3KSwgRFIoVE1QX1JFRzMpKSk7CisJCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJCQl9CisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERFVfVyB8IFMoYmFzZSkgfCBUKFRNUF9SRUczKSB8IEQoYmFzZSksIERSKGJhc2UpKSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQljb21waWxlci0+Y2FjaGVfYXJnID0gU0xKSVRfTUVNOworCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBEUihUTVBfUkVHMyksIGFyZ3cpKTsKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREVV9XIHwgUyhiYXNlKSB8IFQoVE1QX1JFRzMpIHwgRChiYXNlKSwgRFIoYmFzZSkpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBkYXRhX3RyYW5zZmVyX2luc3RzW2ZsYWdzICYgTUVNX01BU0tdIHwgUyhiYXNlKSB8IFRBKHJlZ19hciksIGRlbGF5X3Nsb3QpOworCX0KKworCWlmIChjb21waWxlci0+Y2FjaGVfYXJnID09IGFyZyAmJiBhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cgPD0gU0lNTV9NQVggJiYgYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3ID49IFNJTU1fTUlOKSB7CisJCWlmIChhcmd3ICE9IGNvbXBpbGVyLT5jYWNoZV9hcmd3KSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVVfVyB8IFMoVE1QX1JFRzMpIHwgVChUTVBfUkVHMykgfCBJTU0oYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3KSwgRFIoVE1QX1JFRzMpKSk7CisJCQljb21waWxlci0+Y2FjaGVfYXJndyA9IGFyZ3c7CisJCX0KKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSB8IFMoVE1QX1JFRzMpIHwgVEEocmVnX2FyKSwgZGVsYXlfc2xvdCk7CisJfQorCisJaWYgKGNvbXBpbGVyLT5jYWNoZV9hcmcgPT0gU0xKSVRfTUVNICYmIGFyZ3cgLSBjb21waWxlci0+Y2FjaGVfYXJndyA8PSBTSU1NX01BWCAmJiBhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cgPj0gU0lNTV9NSU4pIHsKKwkJaWYgKGFyZ3cgIT0gY29tcGlsZXItPmNhY2hlX2FyZ3cpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVVfVyB8IFMoVE1QX1JFRzMpIHwgVChUTVBfUkVHMykgfCBJTU0oYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3KSwgRFIoVE1QX1JFRzMpKSk7CisJfQorCWVsc2UgeworCQljb21waWxlci0+Y2FjaGVfYXJnID0gU0xKSVRfTUVNOworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBEUihUTVBfUkVHMyksIGFyZ3cpKTsKKwl9CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCisJaWYgKCFiYXNlKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBkYXRhX3RyYW5zZmVyX2luc3RzW2ZsYWdzICYgTUVNX01BU0tdIHwgUyhUTVBfUkVHMykgfCBUQShyZWdfYXIpLCBkZWxheV9zbG90KTsKKworCWlmIChhcmcgPT0gbmV4dF9hcmcgJiYgbmV4dF9hcmd3IC0gYXJndyA8PSBTSU1NX01BWCAmJiBuZXh0X2FyZ3cgLSBhcmd3ID49IFNJTU1fTUlOKSB7CisJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBhcmc7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVX1cgfCBTKFRNUF9SRUczKSB8IFQoYmFzZSkgfCBEKFRNUF9SRUczKSwgRFIoVE1QX1JFRzMpKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10gfCBTKFRNUF9SRUczKSB8IFRBKHJlZ19hciksIGRlbGF5X3Nsb3QpOworCX0KKworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVX1cgfCBTKFRNUF9SRUczKSB8IFQoYmFzZSkgfCBEQSh0bXBfYXIpLCB0bXBfYXIpKTsKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBkYXRhX3RyYW5zZmVyX2luc3RzW2ZsYWdzICYgTUVNX01BU0tdIHwgU0EodG1wX2FyKSB8IFRBKHJlZ19hciksIGRlbGF5X3Nsb3QpOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfb3BfbWVtKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWdfYXIsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndykKK3sKKwlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncywgcmVnX2FyLCBhcmcsIGFyZ3cpKQorCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKwlyZXR1cm4gZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MsIHJlZ19hciwgYXJnLCBhcmd3LCAwLCAwKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X29wX21lbTIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnMSwgc2xqaXRfc3cgYXJnMXcsIHNsaml0X3NpIGFyZzIsIHNsaml0X3N3IGFyZzJ3KQoreworCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZzEsIGFyZzF3KSkKKwkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKKwlyZXR1cm4gZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnMSwgYXJnMXcsIGFyZzIsIGFyZzJ3KTsKK30KKworc3RhdGljIHNsaml0X3NpIGVtaXRfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGZsYWdzLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwkvKiBhcmcxIGdvZXMgdG8gVE1QX1JFRzEgb3Igc3JjIHJlZworCSAgIGFyZzIgZ29lcyB0byBUTVBfUkVHMiwgaW1tIG9yIHNyYyByZWcKKwkgICBUTVBfUkVHMyBjYW4gYmUgdXNlZCBmb3IgY2FjaGluZworCSAgIHJlc3VsdCBnb2VzIHRvIFRNUF9SRUcyLCBzbyBwdXQgcmVzdWx0IGNhbiB1c2UgVE1QX1JFRzEgYW5kIFRNUF9SRUczLiAqLworCXNsaml0X3NpIGRzdF9yID0gVE1QX1JFRzI7CisJc2xqaXRfc2kgc3JjMV9yOworCXNsaml0X3N3IHNyYzJfciA9IDA7CisJc2xqaXRfc2kgc3VnZ19zcmMyX3IgPSBUTVBfUkVHMjsKKworCWlmICghKGZsYWdzICYgQUxUX0tFRVBfQ0FDSEUpKSB7CisJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCQljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisJfQorCisJaWYgKFNMSklUX1VOTElLRUxZKGRzdCA9PSBTTEpJVF9VTlVTRUQpKSB7CisJCWlmIChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSAmJiAhKHNyYzIgJiBTTEpJVF9NRU0pKQorCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJCWlmIChHRVRfRkxBR1Mob3ApKQorCQkJZmxhZ3MgfD0gVU5VU0VEX0RFU1Q7CisJfQorCWVsc2UgaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKKwkJZHN0X3IgPSBkc3Q7CisJCWZsYWdzIHw9IFJFR19ERVNUOworCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kpCisJCQlzdWdnX3NyYzJfciA9IGRzdF9yOworCX0KKwllbHNlIGlmICgoZHN0ICYgU0xKSVRfTUVNKSAmJiAhZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncyB8IEFSR19URVNULCBEUihUTVBfUkVHMSksIGRzdCwgZHN0dykpCisJCWZsYWdzIHw9IFNMT1dfREVTVDsKKworCWlmIChmbGFncyAmIElNTV9PUCkgeworCQlpZiAoKHNyYzIgJiBTTEpJVF9JTU0pICYmIHNyYzJ3KSB7CisJCQlpZiAoKCEoZmxhZ3MgJiBMT0dJQ0FMX09QKSAmJiAoc3JjMncgPD0gU0lNTV9NQVggJiYgc3JjMncgPj0gU0lNTV9NSU4pKQorCQkJCXx8ICgoZmxhZ3MgJiBMT0dJQ0FMX09QKSAmJiAhKHNyYzJ3ICYgflVJTU1fTUFYKSkpIHsKKwkJCQlmbGFncyB8PSBTUkMyX0lNTTsKKwkJCQlzcmMyX3IgPSBzcmMydzsKKwkJCX0KKwkJfQorCQlpZiAoIShmbGFncyAmIFNSQzJfSU1NKSAmJiAoZmxhZ3MgJiBDVU1VTEFUSVZFX09QKSAmJiAoc3JjMSAmIFNMSklUX0lNTSkgJiYgc3JjMXcpIHsKKwkJCWlmICgoIShmbGFncyAmIExPR0lDQUxfT1ApICYmIChzcmMxdyA8PSBTSU1NX01BWCAmJiBzcmMxdyA+PSBTSU1NX01JTikpCisJCQkJfHwgKChmbGFncyAmIExPR0lDQUxfT1ApICYmICEoc3JjMXcgJiB+VUlNTV9NQVgpKSkgeworCQkJCWZsYWdzIHw9IFNSQzJfSU1NOworCQkJCXNyYzJfciA9IHNyYzF3OworCisJCQkJLyogQW5kIHN3YXAgYXJndW1lbnRzLiAqLworCQkJCXNyYzEgPSBzcmMyOworCQkJCXNyYzF3ID0gc3JjMnc7CisJCQkJc3JjMiA9IFNMSklUX0lNTTsKKwkJCQkvKiBzcmMydyA9IHNyYzJfciB1bm5lZWRlZC4gKi8KKwkJCX0KKwkJfQorCX0KKworCS8qIFNvdXJjZSAxLiAqLworCWlmIChGQVNUX0lTX1JFRyhzcmMxKSkgeworCQlzcmMxX3IgPSBzcmMxOworCQlmbGFncyB8PSBSRUcxX1NPVVJDRTsKKwl9CisJZWxzZSBpZiAoc3JjMSAmIFNMSklUX0lNTSkgeworCQlpZiAoc3JjMXcpIHsKKwkJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIERSKFRNUF9SRUcxKSwgc3JjMXcpKTsKKwkJCXNyYzFfciA9IFRNUF9SRUcxOworCQl9CisJCWVsc2UKKwkJCXNyYzFfciA9IDA7CisJfQorCWVsc2UgeworCQlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncyB8IExPQURfREFUQSwgRFIoVE1QX1JFRzEpLCBzcmMxLCBzcmMxdykpCisJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCWVsc2UKKwkJCWZsYWdzIHw9IFNMT1dfU1JDMTsKKwkJc3JjMV9yID0gVE1QX1JFRzE7CisJfQorCisJLyogU291cmNlIDIuICovCisJaWYgKEZBU1RfSVNfUkVHKHNyYzIpKSB7CisJCXNyYzJfciA9IHNyYzI7CisJCWZsYWdzIHw9IFJFRzJfU09VUkNFOworCQlpZiAoIShmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSkKKwkJCWRzdF9yID0gc3JjMl9yOworCX0KKwllbHNlIGlmIChzcmMyICYgU0xKSVRfSU1NKSB7CisJCWlmICghKGZsYWdzICYgU1JDMl9JTU0pKSB7CisJCQlpZiAoc3JjMncpIHsKKwkJCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBEUihzdWdnX3NyYzJfciksIHNyYzJ3KSk7CisJCQkJc3JjMl9yID0gc3VnZ19zcmMyX3I7CisJCQl9CisJCQllbHNlIHsKKwkJCQlzcmMyX3IgPSAwOworCQkJCWlmICgob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kpICYmIChkc3QgJiBTTEpJVF9NRU0pKQorCQkJCQlkc3RfciA9IDA7CisJCQl9CisJCX0KKwl9CisJZWxzZSB7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzIHwgTE9BRF9EQVRBLCBEUihzdWdnX3NyYzJfciksIHNyYzIsIHNyYzJ3KSkKKwkJCUZBSUxfSUYoY29tcGlsZXItPmVycm9yKTsKKwkJZWxzZQorCQkJZmxhZ3MgfD0gU0xPV19TUkMyOworCQlzcmMyX3IgPSBzdWdnX3NyYzJfcjsKKwl9CisKKwlpZiAoKGZsYWdzICYgKFNMT1dfU1JDMSB8IFNMT1dfU1JDMikpID09IChTTE9XX1NSQzEgfCBTTE9XX1NSQzIpKSB7CisJCVNMSklUX0FTU0VSVChzcmMyX3IgPT0gVE1QX1JFRzIpOworCQlpZiAoIWNhbl9jYWNoZShzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpICYmIGNhbl9jYWNoZShzcmMxLCBzcmMxdywgZHN0LCBkc3R3KSkgeworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncyB8IExPQURfREFUQSwgRFIoVE1QX1JFRzIpLCBzcmMyLCBzcmMydywgc3JjMSwgc3JjMXcpKTsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MgfCBMT0FEX0RBVEEsIERSKFRNUF9SRUcxKSwgc3JjMSwgc3JjMXcsIGRzdCwgZHN0dykpOworCQl9CisJCWVsc2UgeworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncyB8IExPQURfREFUQSwgRFIoVE1QX1JFRzEpLCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MgfCBMT0FEX0RBVEEsIERSKFRNUF9SRUcyKSwgc3JjMiwgc3JjMncsIGRzdCwgZHN0dykpOworCQl9CisJfQorCWVsc2UgaWYgKGZsYWdzICYgU0xPV19TUkMxKQorCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzIHwgTE9BRF9EQVRBLCBEUihUTVBfUkVHMSksIHNyYzEsIHNyYzF3LCBkc3QsIGRzdHcpKTsKKwllbHNlIGlmIChmbGFncyAmIFNMT1dfU1JDMikKKwkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncyB8IExPQURfREFUQSwgRFIoc3VnZ19zcmMyX3IpLCBzcmMyLCBzcmMydywgZHN0LCBkc3R3KSk7CisKKwlGQUlMX0lGKGVtaXRfc2luZ2xlX29wKGNvbXBpbGVyLCBvcCwgZmxhZ3MsIGRzdF9yLCBzcmMxX3IsIHNyYzJfcikpOworCisJaWYgKGRzdCAmIFNMSklUX01FTSkgeworCQlpZiAoIShmbGFncyAmIFNMT1dfREVTVCkpIHsKKwkJCWdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MsIERSKGRzdF9yKSwgZHN0LCBkc3R3KTsKKwkJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CisJCX0KKwkJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzLCBEUihkc3RfciksIGRzdCwgZHN0dywgMCwgMCk7CisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCkKK3sKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU182NCAmJiBTTEpJVF9DT05GSUdfTUlQU182NCkKKwlzbGppdF9zaSBpbnRfb3AgPSBvcCAmIFNMSklUX0lOVF9PUDsKKyNlbmRpZgorCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMChjb21waWxlciwgb3ApKTsKKworCW9wID0gR0VUX09QQ09ERShvcCk7CisJc3dpdGNoIChvcCkgeworCWNhc2UgU0xKSVRfQlJFQUtQT0lOVDoKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQlJFQUssIFVOTU9WQUJMRV9JTlMpOworCWNhc2UgU0xKSVRfTk9QOgorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBOT1AsIFVOTU9WQUJMRV9JTlMpOworCWNhc2UgU0xKSVRfTFVNVUw6CisJY2FzZSBTTEpJVF9MU01VTDoKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU182NCAmJiBTTEpJVF9DT05GSUdfTUlQU182NCkKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MVU1VTCA/IERNVUxUVSA6IERNVUxUKSB8IFMoU0xKSVRfUjApIHwgVChTTEpJVF9SMSksIE1PVkFCTEVfSU5TKSk7CisjZWxzZQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX0xVTVVMID8gTVVMVFUgOiBNVUxUKSB8IFMoU0xKSVRfUjApIHwgVChTTEpJVF9SMSksIE1PVkFCTEVfSU5TKSk7CisjZW5kaWYKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1GTE8gfCBEKFNMSklUX1IwKSwgRFIoU0xKSVRfUjApKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE1GSEkgfCBEKFNMSklUX1IxKSwgRFIoU0xKSVRfUjEpKTsKKwljYXNlIFNMSklUX1VESVZNT0Q6CisJY2FzZSBTTEpJVF9TRElWTU9EOgorCWNhc2UgU0xKSVRfVURJVkk6CisJY2FzZSBTTEpJVF9TRElWSToKKwkJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX1VESVZNT0QgJiAweDIpID09IDAgJiYgU0xKSVRfVURJVkkgLSAweDIgPT0gU0xKSVRfVURJVk1PRCwgYmFkX2Rpdl9vcGNvZGVfYXNzaWdubWVudHMpOworI2lmICEoZGVmaW5lZCBTTEpJVF9NSVBTX1IxICYmIFNMSklUX01JUFNfUjEpCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBOT1AsIFVOTU9WQUJMRV9JTlMpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE5PUCwgVU5NT1ZBQkxFX0lOUykpOworI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU182NCAmJiBTTEpJVF9DT05GSUdfTUlQU182NCkKKwkJaWYgKGludF9vcCkKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoKG9wIHwgMHgyKSA9PSBTTEpJVF9VRElWSSA/IERJVlUgOiBESVYpIHwgUyhTTEpJVF9SMCkgfCBUKFNMSklUX1IxKSwgTU9WQUJMRV9JTlMpKTsKKwkJZWxzZQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsICgob3AgfCAweDIpID09IFNMSklUX1VESVZJID8gRERJVlUgOiBERElWKSB8IFMoU0xKSVRfUjApIHwgVChTTEpJVF9SMSksIE1PVkFCTEVfSU5TKSk7CisjZWxzZQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKChvcCB8IDB4MikgPT0gU0xKSVRfVURJVkkgPyBESVZVIDogRElWKSB8IFMoU0xKSVRfUjApIHwgVChTTEpJVF9SMSksIE1PVkFCTEVfSU5TKSk7CisjZW5kaWYKKworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTUZMTyB8IEQoU0xKSVRfUjApLCBEUihTTEpJVF9SMCkpKTsKKwkJcmV0dXJuIChvcCA+PSBTTEpJVF9VRElWSSkgPyBTTEpJVF9TVUNDRVNTIDogcHVzaF9pbnN0KGNvbXBpbGVyLCBNRkhJIHwgRChTTEpJVF9SMSksIERSKFNMSklUX1IxKSk7CisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorIwlkZWZpbmUgZmxhZ3MgMAorI2Vsc2UKKwlzbGppdF9zaSBmbGFncyA9IDA7CisjZW5kaWYKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDEoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU182NCAmJiBTTEpJVF9DT05GSUdfTUlQU182NCkKKwlpZiAoKG9wICYgU0xKSVRfSU5UX09QKSAmJiBHRVRfT1BDT0RFKG9wKSA+PSBTTEpJVF9OT1QpIHsKKwkJZmxhZ3MgfD0gSU5UX0RBVEEgfCBTSUdORURfREFUQTsKKwkJaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJCXNyY3cgPSAoc2xqaXRfc2kpc3JjdzsKKwl9CisjZW5kaWYKKworCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKKwljYXNlIFNMSklUX01PVjoKKwljYXNlIFNMSklUX01PVl9QOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBXT1JEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisKKwljYXNlIFNMSklUX01PVl9VSToKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSSwgSU5UX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisjZWxzZQorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VJLCBJTlRfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91aSlzcmN3IDogc3Jjdyk7CisjZW5kaWYKKworCWNhc2UgU0xKSVRfTU9WX1NJOgorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NJLCBJTlRfREFUQSB8IFNJR05FRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworI2Vsc2UKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSSwgSU5UX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zaSlzcmN3IDogc3Jjdyk7CisjZW5kaWYKKworCWNhc2UgU0xKSVRfTU9WX1VCOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VCLCBCWVRFX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWIpc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZfU0I6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0IsIEJZVEVfREFUQSB8IFNJR05FRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NiKXNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WX1VIOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VILCBIQUxGX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWgpc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZfU0g6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0gsIEhBTEZfREFUQSB8IFNJR05FRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NoKXNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WVToKKwljYXNlIFNMSklUX01PVlVfUDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgV09SRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WVV9VSToKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSSwgSU5UX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworI2Vsc2UKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSSwgSU5UX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3VpKXNyY3cgOiBzcmN3KTsKKyNlbmRpZgorCisJY2FzZSBTTEpJVF9NT1ZVX1NJOgorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NJLCBJTlRfREFUQSB8IFNJR05FRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKyNlbHNlCisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0ksIElOVF9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NpKXNyY3cgOiBzcmN3KTsKKyNlbmRpZgorCisJY2FzZSBTTEpJVF9NT1ZVX1VCOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VCLCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3ViKXNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WVV9TQjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TQiwgQllURV9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NiKXNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WVV9VSDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSCwgSEFMRl9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF91aClzcmN3IDogc3Jjdyk7CisKKwljYXNlIFNMSklUX01PVlVfU0g6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0gsIEhBTEZfREFUQSB8IFNJR05FRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zaClzcmN3IDogc3Jjdyk7CisKKwljYXNlIFNMSklUX05PVDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCBmbGFncywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfTkVHOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfU1VCIHwgR0VUX0FMTF9GTEFHUyhvcCksIGZsYWdzIHwgSU1NX09QLCBkc3QsIGRzdHcsIFNMSklUX0lNTSwgMCwgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfQ0xaOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AsIGZsYWdzLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCX0KKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpCisjCXVuZGVmIGZsYWdzCisjZW5kaWYKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikKKyMJZGVmaW5lIGZsYWdzIDAKKyNlbHNlCisJc2xqaXRfc2kgZmxhZ3MgPSAwOworI2VuZGlmCisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMxLCBzcmMxdyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMyLCBzcmMydyk7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU182NCAmJiBTTEpJVF9DT05GSUdfTUlQU182NCkKKwlpZiAob3AgJiBTTEpJVF9JTlRfT1ApIHsKKwkJZmxhZ3MgfD0gSU5UX0RBVEEgfCBTSUdORURfREFUQTsKKwkJaWYgKHNyYzEgJiBTTEpJVF9JTU0pCisJCQlzcmMxdyA9IChzbGppdF9zaSlzcmMxdzsKKwkJaWYgKHNyYzIgJiBTTEpJVF9JTU0pCisJCQlzcmMydyA9IChzbGppdF9zaSlzcmMydzsKKwl9CisjZW5kaWYKKworCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKKwljYXNlIFNMSklUX0FERDoKKwljYXNlIFNMSklUX0FEREM6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBvcCwgZmxhZ3MgfCBDVU1VTEFUSVZFX09QIHwgSU1NX09QLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX1NVQjoKKwljYXNlIFNMSklUX1NVQkM6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBvcCwgZmxhZ3MgfCBJTU1fT1AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKworCWNhc2UgU0xKSVRfTVVMOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AsIGZsYWdzIHwgQ1VNVUxBVElWRV9PUCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOworCisJY2FzZSBTTEpJVF9BTkQ6CisJY2FzZSBTTEpJVF9PUjoKKwljYXNlIFNMSklUX1hPUjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCBmbGFncyB8IENVTVVMQVRJVkVfT1AgfCBMT0dJQ0FMX09QIHwgSU1NX09QLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX1NITDoKKwljYXNlIFNMSklUX0xTSFI6CisJY2FzZSBTTEpJVF9BU0hSOgorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorCQlpZiAoc3JjMiAmIFNMSklUX0lNTSkKKwkJCXNyYzJ3ICY9IDB4MWY7CisjZWxzZQorCQlpZiAoc3JjMiAmIFNMSklUX0lNTSkgeworCQkJaWYgKG9wICYgU0xKSVRfSU5UX09QKQorCQkJCXNyYzJ3ICY9IDB4MWY7CisJCQllbHNlCisJCQkJc3JjMncgJj0gMHgzZjsKKwkJfQorI2VuZGlmCisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBvcCwgZmxhZ3MgfCBJTU1fT1AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwl9CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorIwl1bmRlZiBmbGFncworI2VuZGlmCit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQoreworCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CisJcmV0dXJuIHJlZ19tYXBbcmVnXTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCit7CisJQ0hFQ0tfUkVHX0lOREVYKGNoZWNrX3Nsaml0X2dldF9mbG9hdF9yZWdpc3Rlcl9pbmRleChyZWcpKTsKKwlyZXR1cm4gcmVnIDw8IDE7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wX2N1c3RvbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXZvaWQgKmluc3RydWN0aW9uLCBzbGppdF9zaSBzaXplKQoreworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcF9jdXN0b20oY29tcGlsZXIsIGluc3RydWN0aW9uLCBzaXplKSk7CisKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAqKHNsaml0X2lucyopaW5zdHJ1Y3Rpb24sIFVOTU9WQUJMRV9JTlMpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBGbG9hdGluZyBwb2ludCBvcGVyYXRvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9pc19mcHVfYXZhaWxhYmxlKHZvaWQpCit7CisjaWZkZWYgU0xKSVRfSVNfRlBVX0FWQUlMQUJMRQorCXJldHVybiBTTEpJVF9JU19GUFVfQVZBSUxBQkxFOworI2VsaWYgZGVmaW5lZChfX0dOVUNfXykKKwlzbGppdF9zdyBmaXI7CisJYXNtICgiY2ZjMSAlMCwgJDAiIDogIj1yIihmaXIpKTsKKwlyZXR1cm4gKGZpciA+PiAyMikgJiAweDE7CisjZWxzZQorI2Vycm9yICJGSVIgY2hlY2sgaXMgbm90IGltcGxlbWVudGVkIGZvciB0aGlzIGFyY2hpdGVjdHVyZSIKKyNlbmRpZgorfQorCisjZGVmaW5lIEZMT0FUX0RBVEEob3ApIChET1VCTEVfREFUQSB8ICgob3AgJiBTTEpJVF9TSU5HTEVfT1ApID4+IDcpKQorI2RlZmluZSBGTVQob3ApICgoKG9wICYgU0xKSVRfU0lOR0xFX09QKSBeIFNMSklUX1NJTkdMRV9PUCkgPDwgKDIxIC0gOCkpCisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxX2NvbnZ3X2Zyb21kKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpCisjCWRlZmluZSBmbGFncyAwCisjZWxzZQorCXNsaml0X3NpIGZsYWdzID0gKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZXX0ZST01EKSA8PCAyMTsKKyNlbmRpZgorCisJaWYgKHNyYyAmIFNMSklUX01FTSkgeworCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMSwgc3JjLCBzcmN3LCBkc3QsIGRzdHcpKTsKKwkJc3JjID0gVE1QX0ZSRUcxOworCX0KKwllbHNlCisJCXNyYyA8PD0gMTsKKworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoVFJVTkNfV19TIF4gKGZsYWdzID4+IDE5KSkgfCBGTVQob3ApIHwgRlMoc3JjKSB8IEZEKFRNUF9GUkVHMSksIE1PVkFCTEVfSU5TKSk7CisKKwlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwlpZiAoRkFTVF9JU19SRUcoZHN0KSkKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgTUZDMSB8IGZsYWdzIHwgVChkc3QpIHwgRlMoVE1QX0ZSRUcxKSwgTU9WQUJMRV9JTlMpOworCisJLyogU3RvcmUgdGhlIGludGVnZXIgdmFsdWUgZnJvbSBhIFZGUCByZWdpc3Rlci4gKi8KKwlyZXR1cm4gZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBmbGFncyA/IERPVUJMRV9EQVRBIDogU0lOR0xFX0RBVEEsIFRNUF9GUkVHMSwgZHN0LCBkc3R3LCAwLCAwKTsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorIwl1bmRlZiBpc19sb25nCisjZW5kaWYKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY29udmRfZnJvbXcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikKKyMJZGVmaW5lIGZsYWdzIDAKKyNlbHNlCisJc2xqaXRfc2kgZmxhZ3MgPSAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVkRfRlJPTVcpIDw8IDIxOworI2VuZGlmCisKKwlzbGppdF9zaSBkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyAoZHN0IDw8IDEpIDogVE1QX0ZSRUcxOworCisJaWYgKEZBU1RfSVNfUkVHKHNyYykpCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNVEMxIHwgZmxhZ3MgfCBUKHNyYykgfCBGUyhUTVBfRlJFRzEpLCBNT1ZBQkxFX0lOUykpOworCWVsc2UgaWYgKHNyYyAmIFNMSklUX01FTSkgeworCQkvKiBMb2FkIHRoZSBpbnRlZ2VyIHZhbHVlIGludG8gYSBWRlAgcmVnaXN0ZXIuICovCisJCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCAoKGZsYWdzKSA/IERPVUJMRV9EQVRBIDogU0lOR0xFX0RBVEEpIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzEsIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CisJfQorCWVsc2UgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01JKQorCQkJc3JjdyA9IChzbGppdF9zaSlzcmN3OworI2VuZGlmCisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIERSKFRNUF9SRUcxKSwgc3JjdykpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTVRDMSB8IGZsYWdzIHwgVChUTVBfUkVHMSkgfCBGUyhUTVBfRlJFRzEpLCBNT1ZBQkxFX0lOUykpOworCX0KKworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDVlRfU19TIHwgZmxhZ3MgfCAoNCA8PCAyMSkgfCAoKChvcCAmIFNMSklUX1NJTkdMRV9PUCkgXiBTTEpJVF9TSU5HTEVfT1ApID4+IDgpIHwgRlMoVE1QX0ZSRUcxKSB8IEZEKGRzdF9yKSwgTU9WQUJMRV9JTlMpKTsKKworCWlmIChkc3QgJiBTTEpJVF9NRU0pCisJCXJldHVybiBlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApLCBUTVBfRlJFRzEsIGRzdCwgZHN0dywgMCwgMCk7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfTUlQU18zMiAmJiBTTEpJVF9DT05GSUdfTUlQU18zMikKKyMJdW5kZWYgZmxhZ3MKKyNlbmRpZgorfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJaWYgKHNyYzEgJiBTTEpJVF9NRU0pIHsKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzEsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCQlzcmMxID0gVE1QX0ZSRUcxOworCX0KKwllbHNlCisJCXNyYzEgPDw9IDE7CisKKwlpZiAoc3JjMiAmIFNMSklUX01FTSkgeworCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMiwgc3JjMiwgc3JjMncsIDAsIDApKTsKKwkJc3JjMiA9IFRNUF9GUkVHMjsKKwl9CisJZWxzZQorCQlzcmMyIDw8PSAxOworCisJLyogc3JjMiBhbmQgc3JjMSBhcmUgc3dhcHBlZC4gKi8KKwlpZiAob3AgJiBTTEpJVF9TRVRfRSkgeworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQ19VRVFfUyB8IEZNVChvcCkgfCBGVChzcmMyKSB8IEZTKHNyYzEpLCBVTk1PVkFCTEVfSU5TKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDRkMxIHwgVEEoRVFVQUxfRkxBRykgfCBEQShGQ1NSX1JFRyksIEVRVUFMX0ZMQUcpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNSTCB8IFRBKEVRVUFMX0ZMQUcpIHwgREEoRVFVQUxfRkxBRykgfCBTSF9JTU0oMjMpLCBFUVVBTF9GTEFHKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBTkRJIHwgU0EoRVFVQUxfRkxBRykgfCBUQShFUVVBTF9GTEFHKSB8IElNTSgxKSwgRVFVQUxfRkxBRykpOworCX0KKwlpZiAob3AgJiBTTEpJVF9TRVRfUykgeworCQkvKiBNaXhpbmcgdGhlIGluc3RydWN0aW9ucyBmb3IgdGhlIHR3byBjaGVja3MuICovCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDX1VMVF9TIHwgRk1UKG9wKSB8IEZUKHNyYzIpIHwgRlMoc3JjMSksIFVOTU9WQUJMRV9JTlMpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIENGQzEgfCBUQShVTEVTU19GTEFHKSB8IERBKEZDU1JfUkVHKSwgVUxFU1NfRkxBRykpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQ19VTFRfUyB8IEZNVChvcCkgfCBGVChzcmMxKSB8IEZTKHNyYzIpLCBVTk1PVkFCTEVfSU5TKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTUkwgfCBUQShVTEVTU19GTEFHKSB8IERBKFVMRVNTX0ZMQUcpIHwgU0hfSU1NKDIzKSwgVUxFU1NfRkxBRykpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQU5ESSB8IFNBKFVMRVNTX0ZMQUcpIHwgVEEoVUxFU1NfRkxBRykgfCBJTU0oMSksIFVMRVNTX0ZMQUcpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIENGQzEgfCBUQShVR1JFQVRFUl9GTEFHKSB8IERBKEZDU1JfUkVHKSwgVUdSRUFURVJfRkxBRykpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1JMIHwgVEEoVUdSRUFURVJfRkxBRykgfCBEQShVR1JFQVRFUl9GTEFHKSB8IFNIX0lNTSgyMyksIFVHUkVBVEVSX0ZMQUcpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFOREkgfCBTQShVR1JFQVRFUl9GTEFHKSB8IFRBKFVHUkVBVEVSX0ZMQUcpIHwgSU1NKDEpLCBVR1JFQVRFUl9GTEFHKSk7CisJfQorCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIENfVU5fUyB8IEZNVChvcCkgfCBGVChzcmMyKSB8IEZTKHNyYzEpLCBGQ1NSX0ZDQyk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBkc3RfcjsKKworCUNIRUNLX0VSUk9SKCk7CisJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCisJU0xKSVRfQ09NUElMRV9BU1NFUlQoKFNMSklUX1NJTkdMRV9PUCA9PSAweDEwMCkgJiYgIShET1VCTEVfREFUQSAmIDB4MiksIGZsb2F0X3RyYW5zZmVyX2JpdF9lcnJvcik7CisJU0VMRUNUX0ZPUDFfT1BFUkFUSU9OX1dJVEhfQ0hFQ0tTKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpOworCisJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01TKQorCQlvcCBePSBTTEpJVF9TSU5HTEVfT1A7CisKKwlkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyAoZHN0IDw8IDEpIDogVE1QX0ZSRUcxOworCisJaWYgKHNyYyAmIFNMSklUX01FTSkgeworCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIGRzdF9yLCBzcmMsIHNyY3csIGRzdCwgZHN0dykpOworCQlzcmMgPSBkc3RfcjsKKwl9CisJZWxzZQorCQlzcmMgPDw9IDE7CisKKwlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7CisJY2FzZSBTTEpJVF9ETU9WOgorCQlpZiAoc3JjICE9IGRzdF9yKSB7CisJCQlpZiAoZHN0X3IgIT0gVE1QX0ZSRUcxKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNT1ZfUyB8IEZNVChvcCkgfCBGUyhzcmMpIHwgRkQoZHN0X3IpLCBNT1ZBQkxFX0lOUykpOworCQkJZWxzZQorCQkJCWRzdF9yID0gc3JjOworCQl9CisJCWJyZWFrOworCWNhc2UgU0xKSVRfRE5FRzoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE5FR19TIHwgRk1UKG9wKSB8IEZTKHNyYykgfCBGRChkc3RfciksIE1PVkFCTEVfSU5TKSk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfREFCUzoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFCU19TIHwgRk1UKG9wKSB8IEZTKHNyYykgfCBGRChkc3RfciksIE1PVkFCTEVfSU5TKSk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfQ09OVkRfRlJPTVM6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDVlRfU19TIHwgKChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPyAxIDogKDEgPDwgMjEpKSB8IEZTKHNyYykgfCBGRChkc3RfciksIE1PVkFCTEVfSU5TKSk7CisJCW9wIF49IFNMSklUX1NJTkdMRV9PUDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGRzdCAmIFNMSklUX01FTSkKKwkJcmV0dXJuIGVtaXRfb3BfbWVtMihjb21waWxlciwgRkxPQVRfREFUQShvcCksIGRzdF9yLCBkc3QsIGRzdHcsIDAsIDApOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlzbGppdF9zaSBkc3RfciwgZmxhZ3MgPSAwOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2ZvcDIoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYzEsIHNyYzF3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYzIsIHNyYzJ3KTsKKworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKworCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IChkc3QgPDwgMSkgOiBUTVBfRlJFRzI7CisKKwlpZiAoc3JjMSAmIFNMSklUX01FTSkgeworCQlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcxLCBzcmMxLCBzcmMxdykpIHsKKwkJCUZBSUxfSUYoY29tcGlsZXItPmVycm9yKTsKKwkJCXNyYzEgPSBUTVBfRlJFRzE7CisJCX0gZWxzZQorCQkJZmxhZ3MgfD0gU0xPV19TUkMxOworCX0KKwllbHNlCisJCXNyYzEgPDw9IDE7CisKKwlpZiAoc3JjMiAmIFNMSklUX01FTSkgeworCQlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcyLCBzcmMyLCBzcmMydykpIHsKKwkJCUZBSUxfSUYoY29tcGlsZXItPmVycm9yKTsKKwkJCXNyYzIgPSBUTVBfRlJFRzI7CisJCX0gZWxzZQorCQkJZmxhZ3MgfD0gU0xPV19TUkMyOworCX0KKwllbHNlCisJCXNyYzIgPDw9IDE7CisKKwlpZiAoKGZsYWdzICYgKFNMT1dfU1JDMSB8IFNMT1dfU1JDMikpID09IChTTE9XX1NSQzEgfCBTTE9XX1NSQzIpKSB7CisJCWlmICghY2FuX2NhY2hlKHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykgJiYgY2FuX2NhY2hlKHNyYzEsIHNyYzF3LCBkc3QsIGRzdHcpKSB7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3LCBzcmMxLCBzcmMxdykpOworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcxLCBzcmMxLCBzcmMxdywgZHN0LCBkc3R3KSk7CisJCX0KKwkJZWxzZSB7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzEsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcyLCBzcmMyLCBzcmMydywgZHN0LCBkc3R3KSk7CisJCX0KKwl9CisJZWxzZSBpZiAoZmxhZ3MgJiBTTE9XX1NSQzEpCisJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcsIGRzdCwgZHN0dykpOworCWVsc2UgaWYgKGZsYWdzICYgU0xPV19TUkMyKQorCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3LCBkc3QsIGRzdHcpKTsKKworCWlmIChmbGFncyAmIFNMT1dfU1JDMSkKKwkJc3JjMSA9IFRNUF9GUkVHMTsKKwlpZiAoZmxhZ3MgJiBTTE9XX1NSQzIpCisJCXNyYzIgPSBUTVBfRlJFRzI7CisKKwlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7CisJY2FzZSBTTEpJVF9EQUREOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREX1MgfCBGTVQob3ApIHwgRlQoc3JjMikgfCBGUyhzcmMxKSB8IEZEKGRzdF9yKSwgTU9WQUJMRV9JTlMpKTsKKwkJYnJlYWs7CisKKwljYXNlIFNMSklUX0RTVUI6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVUJfUyB8IEZNVChvcCkgfCBGVChzcmMyKSB8IEZTKHNyYzEpIHwgRkQoZHN0X3IpLCBNT1ZBQkxFX0lOUykpOworCQlicmVhazsKKworCWNhc2UgU0xKSVRfRE1VTDoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1VTF9TIHwgRk1UKG9wKSB8IEZUKHNyYzIpIHwgRlMoc3JjMSkgfCBGRChkc3RfciksIE1PVkFCTEVfSU5TKSk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9ERElWOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRElWX1MgfCBGTVQob3ApIHwgRlQoc3JjMikgfCBGUyhzcmMxKSB8IEZEKGRzdF9yKSwgTU9WQUJMRV9JTlMpKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGRzdF9yID09IFRNUF9GUkVHMikKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApLCBUTVBfRlJFRzIsIGRzdCwgZHN0dywgMCwgMCkpOworCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIE90aGVyIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2Zhc3RfZW50ZXIoY29tcGlsZXIsIGRzdCwgZHN0dykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKworCS8qIEZvciBVTlVTRUQgZHN0LiBVbmNvbW1vbiwgYnV0IHBvc3NpYmxlLiAqLworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWlmIChGQVNUX0lTX1JFRyhkc3QpKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVX1cgfCBTQShSRVRVUk5fQUREUl9SRUcpIHwgVEEoMCkgfCBEKGRzdCksIERSKGRzdCkpOworCisJLyogTWVtb3J5LiAqLworCXJldHVybiBlbWl0X29wX21lbShjb21waWxlciwgV09SRF9EQVRBLCBSRVRVUk5fQUREUl9SRUcsIGRzdCwgZHN0dyk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIHNyYywgc3JjdykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCWlmIChGQVNUX0lTX1JFRyhzcmMpKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREVV9XIHwgUyhzcmMpIHwgVEEoMCkgfCBEQShSRVRVUk5fQUREUl9SRUcpLCBSRVRVUk5fQUREUl9SRUcpKTsKKwllbHNlIGlmIChzcmMgJiBTTEpJVF9NRU0pCisJCUZBSUxfSUYoZW1pdF9vcF9tZW0oY29tcGlsZXIsIFdPUkRfREFUQSB8IExPQURfREFUQSwgUkVUVVJOX0FERFJfUkVHLCBzcmMsIHNyY3cpKTsKKwllbHNlIGlmIChzcmMgJiBTTEpJVF9JTU0pCisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFJFVFVSTl9BRERSX1JFRywgc3JjdykpOworCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEpSIHwgU0EoUkVUVVJOX0FERFJfUkVHKSwgVU5NT1ZBQkxFX0lOUykpOworCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE5PUCwgVU5NT1ZBQkxFX0lOUyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIENvbmRpdGlvbmFsIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9sYWJlbCogc2xqaXRfZW1pdF9sYWJlbChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQoreworCXN0cnVjdCBzbGppdF9sYWJlbCAqbGFiZWw7CisKKwlDSEVDS19FUlJPUl9QVFIoKTsKKwlDSEVDS19QVFIoY2hlY2tfc2xqaXRfZW1pdF9sYWJlbChjb21waWxlcikpOworCisJaWYgKGNvbXBpbGVyLT5sYXN0X2xhYmVsICYmIGNvbXBpbGVyLT5sYXN0X2xhYmVsLT5zaXplID09IGNvbXBpbGVyLT5zaXplKQorCQlyZXR1cm4gY29tcGlsZXItPmxhc3RfbGFiZWw7CisKKwlsYWJlbCA9IChzdHJ1Y3Qgc2xqaXRfbGFiZWwqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2xhYmVsKSk7CisJUFRSX0ZBSUxfSUYoIWxhYmVsKTsKKwlzZXRfbGFiZWwobGFiZWwsIGNvbXBpbGVyKTsKKwljb21waWxlci0+ZGVsYXlfc2xvdCA9IFVOTU9WQUJMRV9JTlM7CisJcmV0dXJuIGxhYmVsOworfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpCisjZGVmaW5lIEpVTVBfTEVOR1RICTQKKyNlbHNlCisjZGVmaW5lIEpVTVBfTEVOR1RICTgKKyNlbmRpZgorCisjZGVmaW5lIEJSX1ooc3JjKSBcCisJaW5zdCA9IEJFUSB8IFNBKHNyYykgfCBUQSgwKSB8IEpVTVBfTEVOR1RIOyBcCisJZmxhZ3MgPSBJU19CSVQyNl9DT05EOyBcCisJZGVsYXlfY2hlY2sgPSBzcmM7CisKKyNkZWZpbmUgQlJfTlooc3JjKSBcCisJaW5zdCA9IEJORSB8IFNBKHNyYykgfCBUQSgwKSB8IEpVTVBfTEVOR1RIOyBcCisJZmxhZ3MgPSBJU19CSVQyNl9DT05EOyBcCisJZGVsYXlfY2hlY2sgPSBzcmM7CisKKyNkZWZpbmUgQlJfVCgpIFwKKwlpbnN0ID0gQkMxVCB8IEpVTVBfTEVOR1RIOyBcCisJZmxhZ3MgPSBJU19CSVQxNl9DT05EOyBcCisJZGVsYXlfY2hlY2sgPSBGQ1NSX0ZDQzsKKworI2RlZmluZSBCUl9GKCkgXAorCWluc3QgPSBCQzFGIHwgSlVNUF9MRU5HVEg7IFwKKwlmbGFncyA9IElTX0JJVDE2X0NPTkQ7IFwKKwlkZWxheV9jaGVjayA9IEZDU1JfRkNDOworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlKQoreworCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOworCXNsaml0X2lucyBpbnN0OworCXNsaml0X3NpIGZsYWdzID0gMDsKKwlzbGppdF9zaSBkZWxheV9jaGVjayA9IFVOTU9WQUJMRV9JTlM7CisKKwlDSEVDS19FUlJPUl9QVFIoKTsKKwlDSEVDS19QVFIoY2hlY2tfc2xqaXRfZW1pdF9qdW1wKGNvbXBpbGVyLCB0eXBlKSk7CisKKwlqdW1wID0gKHN0cnVjdCBzbGppdF9qdW1wKillbnN1cmVfYWJ1Zihjb21waWxlciwgc2l6ZW9mKHN0cnVjdCBzbGppdF9qdW1wKSk7CisJUFRSX0ZBSUxfSUYoIWp1bXApOworCXNldF9qdW1wKGp1bXAsIGNvbXBpbGVyLCB0eXBlICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKTsKKwl0eXBlICY9IDB4ZmY7CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNMSklUX0VRVUFMOgorCWNhc2UgU0xKSVRfRF9OT1RfRVFVQUw6CisJCUJSX05aKEVRVUFMX0ZMQUcpOworCQlicmVhazsKKwljYXNlIFNMSklUX05PVF9FUVVBTDoKKwljYXNlIFNMSklUX0RfRVFVQUw6CisJCUJSX1ooRVFVQUxfRkxBRyk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfTEVTUzoKKwljYXNlIFNMSklUX0RfTEVTUzoKKwkJQlJfWihVTEVTU19GTEFHKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9HUkVBVEVSX0VRVUFMOgorCWNhc2UgU0xKSVRfRF9HUkVBVEVSX0VRVUFMOgorCQlCUl9OWihVTEVTU19GTEFHKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9HUkVBVEVSOgorCWNhc2UgU0xKSVRfRF9HUkVBVEVSOgorCQlCUl9aKFVHUkVBVEVSX0ZMQUcpOworCQlicmVhazsKKwljYXNlIFNMSklUX0xFU1NfRVFVQUw6CisJY2FzZSBTTEpJVF9EX0xFU1NfRVFVQUw6CisJCUJSX05aKFVHUkVBVEVSX0ZMQUcpOworCQlicmVhazsKKwljYXNlIFNMSklUX1NJR19MRVNTOgorCQlCUl9aKExFU1NfRkxBRyk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfU0lHX0dSRUFURVJfRVFVQUw6CisJCUJSX05aKExFU1NfRkxBRyk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfU0lHX0dSRUFURVI6CisJCUJSX1ooR1JFQVRFUl9GTEFHKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9TSUdfTEVTU19FUVVBTDoKKwkJQlJfTlooR1JFQVRFUl9GTEFHKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9PVkVSRkxPVzoKKwljYXNlIFNMSklUX01VTF9PVkVSRkxPVzoKKwkJQlJfWihPVkVSRkxPV19GTEFHKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9OT1RfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9NVUxfTk9UX09WRVJGTE9XOgorCQlCUl9OWihPVkVSRkxPV19GTEFHKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9EX1VOT1JERVJFRDoKKwkJQlJfRigpOworCQlicmVhazsKKwljYXNlIFNMSklUX0RfT1JERVJFRDoKKwkJQlJfVCgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBOb3QgY29uZGl0aW9uYWwgYnJhbmNoLiAqLworCQlpbnN0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJanVtcC0+ZmxhZ3MgfD0gZmxhZ3M7CisJaWYgKGNvbXBpbGVyLT5kZWxheV9zbG90ID09IE1PVkFCTEVfSU5TIHx8IChjb21waWxlci0+ZGVsYXlfc2xvdCAhPSBVTk1PVkFCTEVfSU5TICYmIGNvbXBpbGVyLT5kZWxheV9zbG90ICE9IGRlbGF5X2NoZWNrKSkKKwkJanVtcC0+ZmxhZ3MgfD0gSVNfTU9WQUJMRTsKKworCWlmIChpbnN0KQorCQlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIGluc3QsIFVOTU9WQUJMRV9JTlMpKTsKKworCVBUUl9GQUlMX0lGKGVtaXRfY29uc3QoY29tcGlsZXIsIFRNUF9SRUcyLCAwKSk7CisJaWYgKHR5cGUgPD0gU0xKSVRfSlVNUCkgeworCQlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEpSIHwgUyhUTVBfUkVHMiksIFVOTU9WQUJMRV9JTlMpKTsKKwkJanVtcC0+YWRkciA9IGNvbXBpbGVyLT5zaXplOworCQlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE5PUCwgVU5NT1ZBQkxFX0lOUykpOworCX0gZWxzZSB7CisJCVNMSklUX0FTU0VSVChEUihQSUNfQUREUl9SRUcpID09IDI1ICYmIFBJQ19BRERSX1JFRyA9PSBUTVBfUkVHMik7CisJCS8qIENhbm5vdCBiZSBvcHRpbWl6ZWQgb3V0IGlmIHR5cGUgaXMgPj0gQ0FMTDAuICovCisJCWp1bXAtPmZsYWdzIHw9IElTX0pBTCB8ICh0eXBlID49IFNMSklUX0NBTEwwID8gSVNfQ0FMTCA6IDApOworCQlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEpBTFIgfCBTKFRNUF9SRUcyKSB8IERBKFJFVFVSTl9BRERSX1JFRyksIFVOTU9WQUJMRV9JTlMpKTsKKwkJanVtcC0+YWRkciA9IGNvbXBpbGVyLT5zaXplOworCQkvKiBBIE5PUCBpZiB0eXBlIDwgQ0FMTDEuICovCisJCVBUUl9GQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREVV9XIHwgUyhTTEpJVF9SMCkgfCBUQSgwKSB8IERBKDQpLCBVTk1PVkFCTEVfSU5TKSk7CisJfQorCXJldHVybiBqdW1wOworfQorCisjZGVmaW5lIFJFU09MVkVfSU1NMSgpIFwKKwlpZiAoc3JjMSAmIFNMSklUX0lNTSkgeyBcCisJCWlmIChzcmMxdykgeyBcCisJCQlQVFJfRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgRFIoVE1QX1JFRzEpLCBzcmMxdykpOyBcCisJCQlzcmMxID0gVE1QX1JFRzE7IFwKKwkJfSBcCisJCWVsc2UgXAorCQkJc3JjMSA9IDA7IFwKKwl9CisKKyNkZWZpbmUgUkVTT0xWRV9JTU0yKCkgXAorCWlmIChzcmMyICYgU0xKSVRfSU1NKSB7IFwKKwkJaWYgKHNyYzJ3KSB7IFwKKwkJCVBUUl9GQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBEUihUTVBfUkVHMiksIHNyYzJ3KSk7IFwKKwkJCXNyYzIgPSBUTVBfUkVHMjsgXAorCQl9IFwKKwkJZWxzZSBcCisJCQlzcmMyID0gMDsgXAorCX0KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlLAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQoreworCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOworCXNsaml0X3NpIGZsYWdzOworCXNsaml0X2lucyBpbnN0OworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfY21wKGNvbXBpbGVyLCB0eXBlLCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYzEsIHNyYzF3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYzIsIHNyYzJ3KTsKKworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKwlmbGFncyA9ICgodHlwZSAmIFNMSklUX0lOVF9PUCkgPyBJTlRfREFUQSA6IFdPUkRfREFUQSkgfCBMT0FEX0RBVEE7CisJaWYgKHNyYzEgJiBTTEpJVF9NRU0pIHsKKwkJUFRSX0ZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBmbGFncywgRFIoVE1QX1JFRzEpLCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKKwkJc3JjMSA9IFRNUF9SRUcxOworCX0KKwlpZiAoc3JjMiAmIFNMSklUX01FTSkgeworCQlQVFJfRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIGZsYWdzLCBEUihUTVBfUkVHMiksIHNyYzIsIHNyYzJ3LCAwLCAwKSk7CisJCXNyYzIgPSBUTVBfUkVHMjsKKwl9CisKKwlqdW1wID0gKHN0cnVjdCBzbGppdF9qdW1wKillbnN1cmVfYWJ1Zihjb21waWxlciwgc2l6ZW9mKHN0cnVjdCBzbGppdF9qdW1wKSk7CisJUFRSX0ZBSUxfSUYoIWp1bXApOworCXNldF9qdW1wKGp1bXAsIGNvbXBpbGVyLCB0eXBlICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKTsKKwl0eXBlICY9IDB4ZmY7CisKKwlpZiAodHlwZSA8PSBTTEpJVF9OT1RfRVFVQUwpIHsKKwkJUkVTT0xWRV9JTU0xKCk7CisJCVJFU09MVkVfSU1NMigpOworCQlqdW1wLT5mbGFncyB8PSBJU19CSVQyNl9DT05EOworCQlpZiAoY29tcGlsZXItPmRlbGF5X3Nsb3QgPT0gTU9WQUJMRV9JTlMgfHwgKGNvbXBpbGVyLT5kZWxheV9zbG90ICE9IFVOTU9WQUJMRV9JTlMgJiYgY29tcGlsZXItPmRlbGF5X3Nsb3QgIT0gRFIoc3JjMSkgJiYgY29tcGlsZXItPmRlbGF5X3Nsb3QgIT0gRFIoc3JjMikpKQorCQkJanVtcC0+ZmxhZ3MgfD0gSVNfTU9WQUJMRTsKKwkJUFRSX0ZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAodHlwZSA9PSBTTEpJVF9FUVVBTCA/IEJORSA6IEJFUSkgfCBTKHNyYzEpIHwgVChzcmMyKSB8IEpVTVBfTEVOR1RILCBVTk1PVkFCTEVfSU5TKSk7CisJfQorCWVsc2UgaWYgKHR5cGUgPj0gU0xKSVRfU0lHX0xFU1MgJiYgKCgoc3JjMSAmIFNMSklUX0lNTSkgJiYgKHNyYzF3ID09IDApKSB8fCAoKHNyYzIgJiBTTEpJVF9JTU0pICYmIChzcmMydyA9PSAwKSkpKSB7CisJCWluc3QgPSBOT1A7CisJCWlmICgoc3JjMSAmIFNMSklUX0lNTSkgJiYgKHNyYzF3ID09IDApKSB7CisJCQlSRVNPTFZFX0lNTTIoKTsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBTTEpJVF9TSUdfTEVTUzoKKwkJCQlpbnN0ID0gQkxFWjsKKwkJCQlqdW1wLT5mbGFncyB8PSBJU19CSVQyNl9DT05EOworCQkJCWJyZWFrOworCQkJY2FzZSBTTEpJVF9TSUdfR1JFQVRFUl9FUVVBTDoKKwkJCQlpbnN0ID0gQkdUWjsKKwkJCQlqdW1wLT5mbGFncyB8PSBJU19CSVQyNl9DT05EOworCQkJCWJyZWFrOworCQkJY2FzZSBTTEpJVF9TSUdfR1JFQVRFUjoKKwkJCQlpbnN0ID0gQkdFWjsKKwkJCQlqdW1wLT5mbGFncyB8PSBJU19CSVQxNl9DT05EOworCQkJCWJyZWFrOworCQkJY2FzZSBTTEpJVF9TSUdfTEVTU19FUVVBTDoKKwkJCQlpbnN0ID0gQkxUWjsKKwkJCQlqdW1wLT5mbGFncyB8PSBJU19CSVQxNl9DT05EOworCQkJCWJyZWFrOworCQkJfQorCQkJc3JjMSA9IHNyYzI7CisJCX0KKwkJZWxzZSB7CisJCQlSRVNPTFZFX0lNTTEoKTsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBTTEpJVF9TSUdfTEVTUzoKKwkJCQlpbnN0ID0gQkdFWjsKKwkJCQlqdW1wLT5mbGFncyB8PSBJU19CSVQxNl9DT05EOworCQkJCWJyZWFrOworCQkJY2FzZSBTTEpJVF9TSUdfR1JFQVRFUl9FUVVBTDoKKwkJCQlpbnN0ID0gQkxUWjsKKwkJCQlqdW1wLT5mbGFncyB8PSBJU19CSVQxNl9DT05EOworCQkJCWJyZWFrOworCQkJY2FzZSBTTEpJVF9TSUdfR1JFQVRFUjoKKwkJCQlpbnN0ID0gQkxFWjsKKwkJCQlqdW1wLT5mbGFncyB8PSBJU19CSVQyNl9DT05EOworCQkJCWJyZWFrOworCQkJY2FzZSBTTEpJVF9TSUdfTEVTU19FUVVBTDoKKwkJCQlpbnN0ID0gQkdUWjsKKwkJCQlqdW1wLT5mbGFncyB8PSBJU19CSVQyNl9DT05EOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCVBUUl9GQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgaW5zdCB8IFMoc3JjMSkgfCBKVU1QX0xFTkdUSCwgVU5NT1ZBQkxFX0lOUykpOworCX0KKwllbHNlIHsKKwkJaWYgKHR5cGUgPT0gU0xKSVRfTEVTUyB8fCB0eXBlID09IFNMSklUX0dSRUFURVJfRVFVQUwgfHwgdHlwZSA9PSBTTEpJVF9TSUdfTEVTUyB8fCB0eXBlID09IFNMSklUX1NJR19HUkVBVEVSX0VRVUFMKSB7CisJCQlSRVNPTFZFX0lNTTEoKTsKKwkJCWlmICgoc3JjMiAmIFNMSklUX0lNTSkgJiYgc3JjMncgPD0gU0lNTV9NQVggJiYgc3JjMncgPj0gU0lNTV9NSU4pCisJCQkJUFRSX0ZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAodHlwZSA8PSBTTEpJVF9MRVNTX0VRVUFMID8gU0xUSVUgOiBTTFRJKSB8IFMoc3JjMSkgfCBUKFRNUF9SRUcxKSB8IElNTShzcmMydyksIERSKFRNUF9SRUcxKSkpOworCQkJZWxzZSB7CisJCQkJUkVTT0xWRV9JTU0yKCk7CisJCQkJUFRSX0ZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAodHlwZSA8PSBTTEpJVF9MRVNTX0VRVUFMID8gU0xUVSA6IFNMVCkgfCBTKHNyYzEpIHwgVChzcmMyKSB8IEQoVE1QX1JFRzEpLCBEUihUTVBfUkVHMSkpKTsKKwkJCX0KKwkJCXR5cGUgPSAodHlwZSA9PSBTTEpJVF9MRVNTIHx8IHR5cGUgPT0gU0xKSVRfU0lHX0xFU1MpID8gU0xKSVRfTk9UX0VRVUFMIDogU0xKSVRfRVFVQUw7CisJCX0KKwkJZWxzZSB7CisJCQlSRVNPTFZFX0lNTTIoKTsKKwkJCWlmICgoc3JjMSAmIFNMSklUX0lNTSkgJiYgc3JjMXcgPD0gU0lNTV9NQVggJiYgc3JjMXcgPj0gU0lNTV9NSU4pCisJCQkJUFRSX0ZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAodHlwZSA8PSBTTEpJVF9MRVNTX0VRVUFMID8gU0xUSVUgOiBTTFRJKSB8IFMoc3JjMikgfCBUKFRNUF9SRUcxKSB8IElNTShzcmMxdyksIERSKFRNUF9SRUcxKSkpOworCQkJZWxzZSB7CisJCQkJUkVTT0xWRV9JTU0xKCk7CisJCQkJUFRSX0ZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAodHlwZSA8PSBTTEpJVF9MRVNTX0VRVUFMID8gU0xUVSA6IFNMVCkgfCBTKHNyYzIpIHwgVChzcmMxKSB8IEQoVE1QX1JFRzEpLCBEUihUTVBfUkVHMSkpKTsKKwkJCX0KKwkJCXR5cGUgPSAodHlwZSA9PSBTTEpJVF9HUkVBVEVSIHx8IHR5cGUgPT0gU0xKSVRfU0lHX0dSRUFURVIpID8gU0xKSVRfTk9UX0VRVUFMIDogU0xKSVRfRVFVQUw7CisJCX0KKworCQlqdW1wLT5mbGFncyB8PSBJU19CSVQyNl9DT05EOworCQlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsICh0eXBlID09IFNMSklUX0VRVUFMID8gQk5FIDogQkVRKSB8IFMoVE1QX1JFRzEpIHwgVEEoMCkgfCBKVU1QX0xFTkdUSCwgVU5NT1ZBQkxFX0lOUykpOworCX0KKworCVBUUl9GQUlMX0lGKGVtaXRfY29uc3QoY29tcGlsZXIsIFRNUF9SRUcyLCAwKSk7CisJUFRSX0ZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBKUiB8IFMoVE1QX1JFRzIpLCBVTk1PVkFCTEVfSU5TKSk7CisJanVtcC0+YWRkciA9IGNvbXBpbGVyLT5zaXplOworCVBUUl9GQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTk9QLCBVTk1PVkFCTEVfSU5TKSk7CisJcmV0dXJuIGp1bXA7Cit9CisKKyN1bmRlZiBSRVNPTFZFX0lNTTEKKyN1bmRlZiBSRVNPTFZFX0lNTTIKKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9qdW1wKiBzbGppdF9lbWl0X2ZjbXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKwlzbGppdF9pbnMgaW5zdDsKKwlzbGppdF9zaSBpZl90cnVlOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfZmNtcChjb21waWxlciwgdHlwZSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisKKwlpZiAoc3JjMSAmIFNMSklUX01FTSkgeworCQlQVFJfRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEodHlwZSkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJCXNyYzEgPSBUTVBfRlJFRzE7CisJfQorCWVsc2UKKwkJc3JjMSA8PD0gMTsKKworCWlmIChzcmMyICYgU0xKSVRfTUVNKSB7CisJCVBUUl9GQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRkxPQVRfREFUQSh0eXBlKSB8IExPQURfREFUQSwgVE1QX0ZSRUcyLCBzcmMyLCBzcmMydywgMCwgMCkpOworCQlzcmMyID0gVE1QX0ZSRUcyOworCX0KKwllbHNlCisJCXNyYzIgPDw9IDE7CisKKwlqdW1wID0gKHN0cnVjdCBzbGppdF9qdW1wKillbnN1cmVfYWJ1Zihjb21waWxlciwgc2l6ZW9mKHN0cnVjdCBzbGppdF9qdW1wKSk7CisJUFRSX0ZBSUxfSUYoIWp1bXApOworCXNldF9qdW1wKGp1bXAsIGNvbXBpbGVyLCB0eXBlICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKTsKKwlqdW1wLT5mbGFncyB8PSBJU19CSVQxNl9DT05EOworCisJc3dpdGNoICh0eXBlICYgMHhmZikgeworCWNhc2UgU0xKSVRfRF9FUVVBTDoKKwkJaW5zdCA9IENfVUVRX1M7CisJCWlmX3RydWUgPSAxOworCQlicmVhazsKKwljYXNlIFNMSklUX0RfTk9UX0VRVUFMOgorCQlpbnN0ID0gQ19VRVFfUzsKKwkJaWZfdHJ1ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfRF9MRVNTOgorCQlpbnN0ID0gQ19VTFRfUzsKKwkJaWZfdHJ1ZSA9IDE7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfRF9HUkVBVEVSX0VRVUFMOgorCQlpbnN0ID0gQ19VTFRfUzsKKwkJaWZfdHJ1ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfRF9HUkVBVEVSOgorCQlpbnN0ID0gQ19VTEVfUzsKKwkJaWZfdHJ1ZSA9IDA7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfRF9MRVNTX0VRVUFMOgorCQlpbnN0ID0gQ19VTEVfUzsKKwkJaWZfdHJ1ZSA9IDE7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfRF9VTk9SREVSRUQ6CisJCWluc3QgPSBDX1VOX1M7CisJCWlmX3RydWUgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OiAvKiBNYWtlIGNvbXBpbGVycyBoYXBweS4gKi8KKwkJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwljYXNlIFNMSklUX0RfT1JERVJFRDoKKwkJaW5zdCA9IENfVU5fUzsKKwkJaWZfdHJ1ZSA9IDA7CisJCWJyZWFrOworCX0KKworCVBUUl9GQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgaW5zdCB8IEZNVCh0eXBlKSB8IEZUKHNyYzIpIHwgRlMoc3JjMSksIFVOTU9WQUJMRV9JTlMpKTsKKwkvKiBJbnRlbnRpb25hbGx5IHRoZSBvdGhlciBvcGNvZGUuICovCisJUFRSX0ZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoaWZfdHJ1ZSA/IEJDMUYgOiBCQzFUKSB8IEpVTVBfTEVOR1RILCBVTk1PVkFCTEVfSU5TKSk7CisJUFRSX0ZBSUxfSUYoZW1pdF9jb25zdChjb21waWxlciwgVE1QX1JFRzIsIDApKTsKKwlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEpSIHwgUyhUTVBfUkVHMiksIFVOTU9WQUJMRV9JTlMpKTsKKwlqdW1wLT5hZGRyID0gY29tcGlsZXItPnNpemU7CisJUFRSX0ZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBOT1AsIFVOTU9WQUJMRV9JTlMpKTsKKwlyZXR1cm4ganVtcDsKK30KKworI3VuZGVmIEpVTVBfTEVOR1RICisjdW5kZWYgQlJfWgorI3VuZGVmIEJSX05aCisjdW5kZWYgQlJfVAorI3VuZGVmIEJSX0YKKworI3VuZGVmIEZMT0FUX0RBVEEKKyN1bmRlZiBGTVQKKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXNsaml0X3NpIHNyY19yID0gVE1QX1JFRzI7CisJc3RydWN0IHNsaml0X2p1bXAgKmp1bXAgPSBOVUxMOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2lqdW1wKGNvbXBpbGVyLCB0eXBlLCBzcmMsIHNyY3cpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CisKKwlpZiAoRkFTVF9JU19SRUcoc3JjKSkgeworCQlpZiAoRFIoc3JjKSAhPSA0KQorCQkJc3JjX3IgPSBzcmM7CisJCWVsc2UKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVX1cgfCBTKHNyYykgfCBUQSgwKSB8IEQoVE1QX1JFRzIpLCBEUihUTVBfUkVHMikpKTsKKwl9CisKKwlpZiAodHlwZSA+PSBTTEpJVF9DQUxMMCkgeworCQlTTEpJVF9BU1NFUlQoRFIoUElDX0FERFJfUkVHKSA9PSAyNSAmJiBQSUNfQUREUl9SRUcgPT0gVE1QX1JFRzIpOworCQlpZiAoc3JjICYgKFNMSklUX0lNTSB8IFNMSklUX01FTSkpIHsKKwkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCisJCQkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgRFIoUElDX0FERFJfUkVHKSwgc3JjdykpOworCQkJZWxzZSB7CisJCQkJU0xKSVRfQVNTRVJUKHNyY19yID09IFRNUF9SRUcyICYmIChzcmMgJiBTTEpJVF9NRU0pKTsKKwkJCQlGQUlMX0lGKGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgV09SRF9EQVRBLCBUTVBfUkVHMiwgMCwgVE1QX1JFRzEsIDAsIHNyYywgc3JjdykpOworCQkJfQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEpBTFIgfCBTKFBJQ19BRERSX1JFRykgfCBEQShSRVRVUk5fQUREUl9SRUcpLCBVTk1PVkFCTEVfSU5TKSk7CisJCQkvKiBXZSBuZWVkIGFuIGV4dHJhIGluc3RydWN0aW9uIGluIGFueSBjYXNlLiAqLworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQUREVV9XIHwgUyhTTEpJVF9SMCkgfCBUQSgwKSB8IERBKDQpLCBVTk1PVkFCTEVfSU5TKTsKKwkJfQorCisJCS8qIFJlZ2lzdGVyIGlucHV0LiAqLworCQlpZiAodHlwZSA+PSBTTEpJVF9DQUxMMSkKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERVX1cgfCBTKFNMSklUX1IwKSB8IFRBKDApIHwgREEoNCksIDQpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEpBTFIgfCBTKHNyY19yKSB8IERBKFJFVFVSTl9BRERSX1JFRyksIFVOTU9WQUJMRV9JTlMpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQUREVV9XIHwgUyhzcmNfcikgfCBUQSgwKSB8IEQoUElDX0FERFJfUkVHKSwgVU5NT1ZBQkxFX0lOUyk7CisJfQorCisJaWYgKHNyYyAmIFNMSklUX0lNTSkgeworCQlqdW1wID0gKHN0cnVjdCBzbGppdF9qdW1wKillbnN1cmVfYWJ1Zihjb21waWxlciwgc2l6ZW9mKHN0cnVjdCBzbGppdF9qdW1wKSk7CisJCUZBSUxfSUYoIWp1bXApOworCQlzZXRfanVtcChqdW1wLCBjb21waWxlciwgSlVNUF9BRERSIHwgKCh0eXBlID49IFNMSklUX0ZBU1RfQ0FMTCkgPyBJU19KQUwgOiAwKSk7CisJCWp1bXAtPnUudGFyZ2V0ID0gc3JjdzsKKworCQlpZiAoY29tcGlsZXItPmRlbGF5X3Nsb3QgIT0gVU5NT1ZBQkxFX0lOUykKKwkJCWp1bXAtPmZsYWdzIHw9IElTX01PVkFCTEU7CisKKwkJRkFJTF9JRihlbWl0X2NvbnN0KGNvbXBpbGVyLCBUTVBfUkVHMiwgMCkpOworCX0KKwllbHNlIGlmIChzcmMgJiBTTEpJVF9NRU0pCisJCUZBSUxfSUYoZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBXT1JEX0RBVEEsIFRNUF9SRUcyLCAwLCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KSk7CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgSlIgfCBTKHNyY19yKSwgVU5NT1ZBQkxFX0lOUykpOworCWlmIChqdW1wKQorCQlqdW1wLT5hZGRyID0gY29tcGlsZXItPnNpemU7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE5PUCwgVU5NT1ZBQkxFX0lOUykpOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3LAorCXNsaml0X3NpIHR5cGUpCit7CisJc2xqaXRfc2kgc3VnZ19kc3RfYXIsIGRzdF9hcjsKKwlzbGppdF9zaSBmbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzMyICYmIFNMSklUX0NPTkZJR19NSVBTXzMyKQorIwlkZWZpbmUgbWVtX3R5cGUgV09SRF9EQVRBCisjZWxzZQorCXNsaml0X3NpIG1lbV90eXBlID0gKG9wICYgU0xKSVRfSU5UX09QKSA/IChJTlRfREFUQSB8IFNJR05FRF9EQVRBKSA6IFdPUkRfREFUQTsKKyNlbmRpZgorCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wX2ZsYWdzKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3csIHR5cGUpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisKKwlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwlvcCA9IEdFVF9PUENPREUob3ApOworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19NSVBTXzY0ICYmIFNMSklUX0NPTkZJR19NSVBTXzY0KQorCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0kgfHwgb3AgPT0gU0xKSVRfTU9WX1VJKQorCQltZW1fdHlwZSA9IElOVF9EQVRBIHwgU0lHTkVEX0RBVEE7CisjZW5kaWYKKwlzdWdnX2RzdF9hciA9IERSKChvcCA8IFNMSklUX0FERCAmJiBGQVNUX0lTX1JFRyhkc3QpKSA/IGRzdCA6IFRNUF9SRUcyKTsKKworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKwlpZiAob3AgPj0gU0xKSVRfQUREICYmIChzcmMgJiBTTEpJVF9NRU0pKSB7CisJCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIG1lbV90eXBlIHwgTE9BRF9EQVRBLCBEUihUTVBfUkVHMSksIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CisJCXNyYyA9IFRNUF9SRUcxOworCQlzcmN3ID0gMDsKKwl9CisKKwlzd2l0Y2ggKHR5cGUgJiAweGZmKSB7CisJY2FzZSBTTEpJVF9FUVVBTDoKKwljYXNlIFNMSklUX05PVF9FUVVBTDoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNMVElVIHwgU0EoRVFVQUxfRkxBRykgfCBUQShzdWdnX2RzdF9hcikgfCBJTU0oMSksIHN1Z2dfZHN0X2FyKSk7CisJCWRzdF9hciA9IHN1Z2dfZHN0X2FyOworCQlicmVhazsKKwljYXNlIFNMSklUX0xFU1M6CisJY2FzZSBTTEpJVF9HUkVBVEVSX0VRVUFMOgorCWNhc2UgU0xKSVRfRF9MRVNTOgorCWNhc2UgU0xKSVRfRF9HUkVBVEVSX0VRVUFMOgorCQlkc3RfYXIgPSBVTEVTU19GTEFHOworCQlicmVhazsKKwljYXNlIFNMSklUX0dSRUFURVI6CisJY2FzZSBTTEpJVF9MRVNTX0VRVUFMOgorCWNhc2UgU0xKSVRfRF9HUkVBVEVSOgorCWNhc2UgU0xKSVRfRF9MRVNTX0VRVUFMOgorCQlkc3RfYXIgPSBVR1JFQVRFUl9GTEFHOworCQlicmVhazsKKwljYXNlIFNMSklUX1NJR19MRVNTOgorCWNhc2UgU0xKSVRfU0lHX0dSRUFURVJfRVFVQUw6CisJCWRzdF9hciA9IExFU1NfRkxBRzsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9TSUdfR1JFQVRFUjoKKwljYXNlIFNMSklUX1NJR19MRVNTX0VRVUFMOgorCQlkc3RfYXIgPSBHUkVBVEVSX0ZMQUc7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9OT1RfT1ZFUkZMT1c6CisJCWRzdF9hciA9IE9WRVJGTE9XX0ZMQUc7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfTVVMX09WRVJGTE9XOgorCWNhc2UgU0xKSVRfTVVMX05PVF9PVkVSRkxPVzoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNMVElVIHwgU0EoT1ZFUkZMT1dfRkxBRykgfCBUQShzdWdnX2RzdF9hcikgfCBJTU0oMSksIHN1Z2dfZHN0X2FyKSk7CisJCWRzdF9hciA9IHN1Z2dfZHN0X2FyOworCQl0eXBlIF49IDB4MTsgLyogRmxpcCB0eXBlIGJpdCBmb3IgdGhlIFhPUkkgYmVsb3cuICovCisJCWJyZWFrOworCWNhc2UgU0xKSVRfRF9FUVVBTDoKKwljYXNlIFNMSklUX0RfTk9UX0VRVUFMOgorCQlkc3RfYXIgPSBFUVVBTF9GTEFHOworCQlicmVhazsKKworCWNhc2UgU0xKSVRfRF9VTk9SREVSRUQ6CisJY2FzZSBTTEpJVF9EX09SREVSRUQ6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDRkMxIHwgVEEoc3VnZ19kc3RfYXIpIHwgREEoRkNTUl9SRUcpLCBzdWdnX2RzdF9hcikpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1JMIHwgVEEoc3VnZ19kc3RfYXIpIHwgREEoc3VnZ19kc3RfYXIpIHwgU0hfSU1NKDIzKSwgc3VnZ19kc3RfYXIpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFOREkgfCBTQShzdWdnX2RzdF9hcikgfCBUQShzdWdnX2RzdF9hcikgfCBJTU0oMSksIHN1Z2dfZHN0X2FyKSk7CisJCWRzdF9hciA9IHN1Z2dfZHN0X2FyOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJCWRzdF9hciA9IHN1Z2dfZHN0X2FyOworCQlicmVhazsKKwl9CisKKwlpZiAodHlwZSAmIDB4MSkgeworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgWE9SSSB8IFNBKGRzdF9hcikgfCBUQShzdWdnX2RzdF9hcikgfCBJTU0oMSksIHN1Z2dfZHN0X2FyKSk7CisJCWRzdF9hciA9IHN1Z2dfZHN0X2FyOworCX0KKworCWlmIChvcCA+PSBTTEpJVF9BREQpIHsKKwkJaWYgKERSKFRNUF9SRUcyKSAhPSBkc3RfYXIpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQUREVV9XIHwgU0EoZHN0X2FyKSB8IFRBKDApIHwgRChUTVBfUkVHMiksIERSKFRNUF9SRUcyKSkpOworCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AgfCBmbGFncywgbWVtX3R5cGUgfCBDVU1VTEFUSVZFX09QIHwgTE9HSUNBTF9PUCB8IElNTV9PUCB8IEFMVF9LRUVQX0NBQ0hFLCBkc3QsIGRzdHcsIHNyYywgc3JjdywgVE1QX1JFRzIsIDApOworCX0KKworCWlmIChkc3QgJiBTTEpJVF9NRU0pCisJCXJldHVybiBlbWl0X29wX21lbShjb21waWxlciwgbWVtX3R5cGUsIGRzdF9hciwgZHN0LCBkc3R3KTsKKworCWlmIChzdWdnX2RzdF9hciAhPSBkc3RfYXIpCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFERFVfVyB8IFNBKGRzdF9hcikgfCBUQSgwKSB8IERBKHN1Z2dfZHN0X2FyKSwgc3VnZ19kc3RfYXIpOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX01JUFNfMzIgJiYgU0xKSVRfQ09ORklHX01JUFNfMzIpCisjCXVuZGVmIG1lbV90eXBlCisjZW5kaWYKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCogc2xqaXRfZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IGluaXRfdmFsdWUpCit7CisJc3RydWN0IHNsaml0X2NvbnN0ICpjb25zdF87CisJc2xqaXRfc2kgcmVnOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfY29uc3QoY29tcGlsZXIsIGRzdCwgZHN0dywgaW5pdF92YWx1ZSkpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKworCWNvbnN0XyA9IChzdHJ1Y3Qgc2xqaXRfY29uc3QqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2NvbnN0KSk7CisJUFRSX0ZBSUxfSUYoIWNvbnN0Xyk7CisJc2V0X2NvbnN0KGNvbnN0XywgY29tcGlsZXIpOworCisJcmVnID0gU0xPV19JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcyOworCisJUFRSX0ZBSUxfSUYoZW1pdF9jb25zdChjb21waWxlciwgcmVnLCBpbml0X3ZhbHVlKSk7CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKQorCQlQVFJfRkFJTF9JRihlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1YsIFdPUkRfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgVE1QX1JFRzIsIDApKTsKKwlyZXR1cm4gY29uc3RfOworfQpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlUFBDXzMyLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVQUENfMzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTRiNzVjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlUFBDXzMyLmMKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiAgICBTdGFjay1sZXNzIEp1c3QtSW4tVGltZSBjb21waWxlcgorICoKKyAqICAgIENvcHlyaWdodCAyMDA5LTIwMTIgWm9sdGFuIEhlcmN6ZWcgKGh6bWVzdGVyQGZyZWVtYWlsLmh1KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAqICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogcHBjIDMyLWJpdCBhcmNoIGRlcGVuZGVudCBmdW5jdGlvbnMuICovCisKK3N0YXRpYyBzbGppdF9zaSBsb2FkX2ltbWVkaWF0ZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSByZWcsIHNsaml0X3N3IGltbSkKK3sKKwlpZiAoaW1tIDw9IFNJTU1fTUFYICYmIGltbSA+PSBTSU1NX01JTikKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQURESSB8IEQocmVnKSB8IEEoMCkgfCBJTU0oaW1tKSk7CisKKwlpZiAoIShpbW0gJiB+MHhmZmZmKSkKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgUyhUTVBfWkVSTykgfCBBKHJlZykgfCBJTU0oaW1tKSk7CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVMgfCBEKHJlZykgfCBBKDApIHwgSU1NKGltbSA+PiAxNikpKTsKKwlyZXR1cm4gKGltbSAmIDB4ZmZmZikgPyBwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFMocmVnKSB8IEEocmVnKSB8IElNTShpbW0pKSA6IFNMSklUX1NVQ0NFU1M7Cit9CisKKyNkZWZpbmUgSU5TX0NMRUFSX0xFRlQoZHN0LCBzcmMsIGZyb20pIFwKKwkoUkxXSU5NIHwgUyhzcmMpIHwgQShkc3QpIHwgKChmcm9tKSA8PCA2KSB8ICgzMSA8PCAxKSkKKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X3NpbmdsZV9vcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgZmxhZ3MsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zaSBzcmMxLCBzbGppdF9zaSBzcmMyKQoreworCXN3aXRjaCAob3ApIHsKKwljYXNlIFNMSklUX01PVjoKKwljYXNlIFNMSklUX01PVl9VSToKKwljYXNlIFNMSklUX01PVl9TSToKKwljYXNlIFNMSklUX01PVl9QOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSk7CisJCWlmIChkc3QgIT0gc3JjMikKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgUyhzcmMyKSB8IEEoZHN0KSB8IEIoc3JjMikpOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfTU9WX1VCOgorCWNhc2UgU0xKSVRfTU9WX1NCOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSk7CisJCWlmICgoZmxhZ3MgJiAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpID09IChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgeworCQkJaWYgKG9wID09IFNMSklUX01PVl9TQikKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFWFRTQiB8IFMoc3JjMikgfCBBKGRzdCkpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgSU5TX0NMRUFSX0xFRlQoZHN0LCBzcmMyLCAyNCkpOworCQl9CisJCWVsc2UgaWYgKChmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA9PSBTTEpJVF9NT1ZfU0IpCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFWFRTQiB8IFMoc3JjMikgfCBBKGRzdCkpOworCQllbHNlIHsKKwkJCVNMSklUX0FTU0VSVChkc3QgPT0gc3JjMik7CisJCX0KKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX01PVl9VSDoKKwljYXNlIFNMSklUX01PVl9TSDoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEpOworCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0gpCisJCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRVhUU0ggfCBTKHNyYzIpIHwgQShkc3QpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIElOU19DTEVBUl9MRUZUKGRzdCwgc3JjMiwgMTYpKTsKKwkJfQorCQllbHNlIHsKKwkJCVNMSklUX0FTU0VSVChkc3QgPT0gc3JjMik7CisJCX0KKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX05PVDoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBOT1IgfCBSQyhmbGFncykgfCBTKHNyYzIpIHwgQShkc3QpIHwgQihzcmMyKSk7CisKKwljYXNlIFNMSklUX05FRzoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBORUcgfCBPRVJDKGZsYWdzKSB8IEQoZHN0KSB8IEEoc3JjMikpOworCisJY2FzZSBTTEpJVF9DTFo6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQ05UTFpXIHwgUkMoZmxhZ3MpIHwgUyhzcmMyKSB8IEEoZHN0KSk7CisKKwljYXNlIFNMSklUX0FERDoKKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk0xKSB7CisJCQkvKiBGbGFncyBkb2VzIG5vdCBzZXQ6IEJJTl9JTU1fRVhUUyB1bm5lY2Vzc2FyeS4gKi8KKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFEREkgfCBEKGRzdCkgfCBBKHNyYzEpIHwgY29tcGlsZXItPmltbSk7CisJCX0KKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk0yKSB7CisJCQkvKiBGbGFncyBkb2VzIG5vdCBzZXQ6IEJJTl9JTU1fRVhUUyB1bm5lY2Vzc2FyeS4gKi8KKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFERElTIHwgRChkc3QpIHwgQShzcmMxKSB8IGNvbXBpbGVyLT5pbW0pOworCQl9CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMykgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQURESUMgfCBEKGRzdCkgfCBBKHNyYzEpIHwgY29tcGlsZXItPmltbSk7CisJCX0KKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk00KSB7CisJCQkvKiBGbGFncyBkb2VzIG5vdCBzZXQ6IEJJTl9JTU1fRVhUUyB1bm5lY2Vzc2FyeS4gKi8KKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJIHwgRChkc3QpIHwgQShzcmMxKSB8IChjb21waWxlci0+aW1tICYgMHhmZmZmKSkpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQURESVMgfCBEKGRzdCkgfCBBKGRzdCkgfCAoKChjb21waWxlci0+aW1tID4+IDE2KSAmIDB4ZmZmZikgKyAoKGNvbXBpbGVyLT5pbW0gPj4gMTUpICYgMHgxKSkpOworCQl9CisJCWlmICghKGZsYWdzICYgQUxUX1NFVF9GTEFHUykpCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBREQgfCBEKGRzdCkgfCBBKHNyYzEpIHwgQihzcmMyKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFEREMgfCBPRVJDKEFMVF9TRVRfRkxBR1MpIHwgRChkc3QpIHwgQShzcmMxKSB8IEIoc3JjMikpOworCisJY2FzZSBTTEpJVF9BRERDOgorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTEpIHsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNRlhFUiB8IEQoMCkpKTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERFIHwgRChkc3QpIHwgQShzcmMxKSB8IEIoc3JjMikpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE1UWEVSIHwgUygwKSk7CisJCX0KKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQURERSB8IEQoZHN0KSB8IEEoc3JjMSkgfCBCKHNyYzIpKTsKKworCWNhc2UgU0xKSVRfU1VCOgorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTEpIHsKKwkJCS8qIEZsYWdzIGRvZXMgbm90IHNldDogQklOX0lNTV9FWFRTIHVubmVjZXNzYXJ5LiAqLworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1VCRklDIHwgRChkc3QpIHwgQShzcmMxKSB8IGNvbXBpbGVyLT5pbW0pOworCQl9CisJCWlmIChmbGFncyAmIChBTFRfRk9STTIgfCBBTFRfRk9STTMpKSB7CisJCQlTTEpJVF9BU1NFUlQoc3JjMiA9PSBUTVBfUkVHMik7CisJCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTIpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIENNUEkgfCBDUkQoMCkgfCBBKHNyYzEpIHwgY29tcGlsZXItPmltbSkpOworCQkJaWYgKGZsYWdzICYgQUxUX0ZPUk0zKQorCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIENNUExJIHwgQ1JEKDQpIHwgQShzcmMxKSB8IGNvbXBpbGVyLT5pbW0pOworCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJCX0KKwkJaWYgKGZsYWdzICYgKEFMVF9GT1JNNCB8IEFMVF9GT1JNNSkpIHsKKwkJCWlmIChmbGFncyAmIEFMVF9GT1JNNCkKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQ01QTCB8IENSRCg0KSB8IEEoc3JjMSkgfCBCKHNyYzIpKSk7CisJCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTUpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIENNUCB8IENSRCgwKSB8IEEoc3JjMSkgfCBCKHNyYzIpKSk7CisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJfQorCQlpZiAoIShmbGFncyAmIEFMVF9TRVRfRkxBR1MpKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1VCRiB8IEQoZHN0KSB8IEEoc3JjMikgfCBCKHNyYzEpKTsKKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk02KQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIENNUEwgfCBDUkQoNCkgfCBBKHNyYzEpIHwgQihzcmMyKSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTVUJGQyB8IE9FUkMoQUxUX1NFVF9GTEFHUykgfCBEKGRzdCkgfCBBKHNyYzIpIHwgQihzcmMxKSk7CisKKwljYXNlIFNMSklUX1NVQkM6CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMSkgeworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1GWEVSIHwgRCgwKSkpOworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNVQkZFIHwgRChkc3QpIHwgQShzcmMyKSB8IEIoc3JjMSkpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE1UWEVSIHwgUygwKSk7CisJCX0KKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1VCRkUgfCBEKGRzdCkgfCBBKHNyYzIpIHwgQihzcmMxKSk7CisKKwljYXNlIFNMSklUX01VTDoKKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk0xKSB7CisJCQlTTEpJVF9BU1NFUlQoc3JjMiA9PSBUTVBfUkVHMik7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNVUxMSSB8IEQoZHN0KSB8IEEoc3JjMSkgfCBjb21waWxlci0+aW1tKTsKKwkJfQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNVUxMVyB8IE9FUkMoZmxhZ3MpIHwgRChkc3QpIHwgQShzcmMyKSB8IEIoc3JjMSkpOworCisJY2FzZSBTTEpJVF9BTkQ6CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMSkgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQU5ESSB8IFMoc3JjMSkgfCBBKGRzdCkgfCBjb21waWxlci0+aW1tKTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTIpIHsKKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFORElTIHwgUyhzcmMxKSB8IEEoZHN0KSB8IGNvbXBpbGVyLT5pbW0pOworCQl9CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFORCB8IFJDKGZsYWdzKSB8IFMoc3JjMSkgfCBBKGRzdCkgfCBCKHNyYzIpKTsKKworCWNhc2UgU0xKSVRfT1I6CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMSkgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgUyhzcmMxKSB8IEEoZHN0KSB8IGNvbXBpbGVyLT5pbW0pOworCQl9CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMikgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1JJUyB8IFMoc3JjMSkgfCBBKGRzdCkgfCBjb21waWxlci0+aW1tKTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTMpIHsKKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTKHNyYzEpIHwgQShkc3QpIHwgSU1NKGNvbXBpbGVyLT5pbW0pKSk7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUklTIHwgUyhkc3QpIHwgQShkc3QpIHwgSU1NKGNvbXBpbGVyLT5pbW0gPj4gMTYpKTsKKwkJfQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFJDKGZsYWdzKSB8IFMoc3JjMSkgfCBBKGRzdCkgfCBCKHNyYzIpKTsKKworCWNhc2UgU0xKSVRfWE9SOgorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTEpIHsKKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFhPUkkgfCBTKHNyYzEpIHwgQShkc3QpIHwgY29tcGlsZXItPmltbSk7CisJCX0KKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk0yKSB7CisJCQlTTEpJVF9BU1NFUlQoc3JjMiA9PSBUTVBfUkVHMik7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBYT1JJUyB8IFMoc3JjMSkgfCBBKGRzdCkgfCBjb21waWxlci0+aW1tKTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTMpIHsKKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBYT1JJIHwgUyhzcmMxKSB8IEEoZHN0KSB8IElNTShjb21waWxlci0+aW1tKSkpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgWE9SSVMgfCBTKGRzdCkgfCBBKGRzdCkgfCBJTU0oY29tcGlsZXItPmltbSA+PiAxNikpOworCQl9CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFhPUiB8IFJDKGZsYWdzKSB8IFMoc3JjMSkgfCBBKGRzdCkgfCBCKHNyYzIpKTsKKworCWNhc2UgU0xKSVRfU0hMOgorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTEpIHsKKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCWNvbXBpbGVyLT5pbW0gJj0gMHgxZjsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFJMV0lOTSB8IFJDKGZsYWdzKSB8IFMoc3JjMSkgfCBBKGRzdCkgfCAoY29tcGlsZXItPmltbSA8PCAxMSkgfCAoKDMxIC0gY29tcGlsZXItPmltbSkgPDwgMSkpOworCQl9CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNMVyB8IFJDKGZsYWdzKSB8IFMoc3JjMSkgfCBBKGRzdCkgfCBCKHNyYzIpKTsKKworCWNhc2UgU0xKSVRfTFNIUjoKKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk0xKSB7CisJCQlTTEpJVF9BU1NFUlQoc3JjMiA9PSBUTVBfUkVHMik7CisJCQljb21waWxlci0+aW1tICY9IDB4MWY7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBSTFdJTk0gfCBSQyhmbGFncykgfCBTKHNyYzEpIHwgQShkc3QpIHwgKCgoMzIgLSBjb21waWxlci0+aW1tKSAmIDB4MWYpIDw8IDExKSB8IChjb21waWxlci0+aW1tIDw8IDYpIHwgKDMxIDw8IDEpKTsKKwkJfQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTUlcgfCBSQyhmbGFncykgfCBTKHNyYzEpIHwgQShkc3QpIHwgQihzcmMyKSk7CisKKwljYXNlIFNMSklUX0FTSFI6CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMykKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNRlhFUiB8IEQoMCkpKTsKKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk0xKSB7CisJCQlTTEpJVF9BU1NFUlQoc3JjMiA9PSBUTVBfUkVHMik7CisJCQljb21waWxlci0+aW1tICY9IDB4MWY7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1JBV0kgfCBSQyhmbGFncykgfCBTKHNyYzEpIHwgQShkc3QpIHwgKGNvbXBpbGVyLT5pbW0gPDwgMTEpKSk7CisJCX0KKwkJZWxzZQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNSQVcgfCBSQyhmbGFncykgfCBTKHNyYzEpIHwgQShkc3QpIHwgQihzcmMyKSkpOworCQlyZXR1cm4gKGZsYWdzICYgQUxUX0ZPUk0zKSA/IHB1c2hfaW5zdChjb21waWxlciwgTVRYRVIgfCBTKDApKSA6IFNMSklUX1NVQ0NFU1M7CisJfQorCisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHJlZywgc2xqaXRfc3cgaW5pdF92YWx1ZSkKK3sKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVMgfCBEKHJlZykgfCBBKDApIHwgSU1NKGluaXRfdmFsdWUgPj4gMTYpKSk7CisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgUyhyZWcpIHwgQShyZWcpIHwgSU1NKGluaXRfdmFsdWUpKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2p1bXBfYWRkcihzbGppdF91dyBhZGRyLCBzbGppdF91dyBuZXdfYWRkcikKK3sKKwlzbGppdF9pbnMgKmluc3QgPSAoc2xqaXRfaW5zKilhZGRyOworCisJaW5zdFswXSA9IChpbnN0WzBdICYgMHhmZmZmMDAwMCkgfCAoKG5ld19hZGRyID4+IDE2KSAmIDB4ZmZmZik7CisJaW5zdFsxXSA9IChpbnN0WzFdICYgMHhmZmZmMDAwMCkgfCAobmV3X2FkZHIgJiAweGZmZmYpOworCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyAyKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2NvbnN0KHNsaml0X3V3IGFkZHIsIHNsaml0X3N3IG5ld19jb25zdGFudCkKK3sKKwlzbGppdF9pbnMgKmluc3QgPSAoc2xqaXRfaW5zKilhZGRyOworCisJaW5zdFswXSA9IChpbnN0WzBdICYgMHhmZmZmMDAwMCkgfCAoKG5ld19jb25zdGFudCA+PiAxNikgJiAweGZmZmYpOworCWluc3RbMV0gPSAoaW5zdFsxXSAmIDB4ZmZmZjAwMDApIHwgKG5ld19jb25zdGFudCAmIDB4ZmZmZik7CisJU0xKSVRfQ0FDSEVfRkxVU0goaW5zdCwgaW5zdCArIDIpOworfQpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlUFBDXzY0LmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVQUENfNjQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODJhYzdiCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlUFBDXzY0LmMKQEAgLTAsMCArMSw0MjEgQEAKKy8qCisgKiAgICBTdGFjay1sZXNzIEp1c3QtSW4tVGltZSBjb21waWxlcgorICoKKyAqICAgIENvcHlyaWdodCAyMDA5LTIwMTIgWm9sdGFuIEhlcmN6ZWcgKGh6bWVzdGVyQGZyZWVtYWlsLmh1KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAqICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogcHBjIDY0LWJpdCBhcmNoIGRlcGVuZGVudCBmdW5jdGlvbnMuICovCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCAoZGVmaW5lZChfX0lCTV9HQ0NfQVNNKSAmJiBfX0lCTV9HQ0NfQVNNKQorI2RlZmluZSBBU01fU0xKSVRfQ0xaKHNyYywgZHN0KSBcCisJX19hc21fXyB2b2xhdGlsZSAoICJjbnRsemQgJTAsICUxIiA6ICI9ciIoZHN0KSA6ICJyIihzcmMpICkKKyNlbGlmIGRlZmluZWQoX194bGNfXykKKyNlcnJvciAiUGxlYXNlIGVuYWJsZSBHQ0Mgc3ludGF4IGZvciBpbmxpbmUgYXNzZW1ibHkgc3RhdGVtZW50cyIKKyNlbHNlCisjZXJyb3IgIk11c3QgaW1wbGVtZW50IGNvdW50IGxlYWRpbmcgemVyb2VzIgorI2VuZGlmCisKKyNkZWZpbmUgUkxESShkc3QsIHNyYywgc2gsIG1iLCB0eXBlKSBcCisJKEhJKDMwKSB8IFMoc3JjKSB8IEEoZHN0KSB8ICgodHlwZSkgPDwgMikgfCAoKChzaCkgJiAweDFmKSA8PCAxMSkgfCAoKChzaCkgJiAweDIwKSA+PiA0KSB8ICgoKG1iKSAmIDB4MWYpIDw8IDYpIHwgKChtYikgJiAweDIwKSkKKworI2RlZmluZSBQVVNIX1JMRElDUihyZWcsIHNoaWZ0KSBcCisJcHVzaF9pbnN0KGNvbXBpbGVyLCBSTERJKHJlZywgcmVnLCA2MyAtIHNoaWZ0LCBzaGlmdCwgMSkpCisKK3N0YXRpYyBzbGppdF9zaSBsb2FkX2ltbWVkaWF0ZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSByZWcsIHNsaml0X3N3IGltbSkKK3sKKwlzbGppdF91dyB0bXA7CisJc2xqaXRfdXcgc2hpZnQ7CisJc2xqaXRfdXcgdG1wMjsKKwlzbGppdF91dyBzaGlmdDI7CisKKwlpZiAoaW1tIDw9IFNJTU1fTUFYICYmIGltbSA+PSBTSU1NX01JTikKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQURESSB8IEQocmVnKSB8IEEoMCkgfCBJTU0oaW1tKSk7CisKKwlpZiAoIShpbW0gJiB+MHhmZmZmKSkKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgUyhUTVBfWkVSTykgfCBBKHJlZykgfCBJTU0oaW1tKSk7CisKKwlpZiAoaW1tIDw9IDB4N2ZmZmZmZmZsICYmIGltbSA+PSAtMHg4MDAwMDAwMGwpIHsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERElTIHwgRChyZWcpIHwgQSgwKSB8IElNTShpbW0gPj4gMTYpKSk7CisJCXJldHVybiAoaW1tICYgMHhmZmZmKSA/IHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgUyhyZWcpIHwgQShyZWcpIHwgSU1NKGltbSkpIDogU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwkvKiBDb3VudCBsZWFkaW5nIHplcm9lcy4gKi8KKwl0bXAgPSAoaW1tID49IDApID8gaW1tIDogfmltbTsKKwlBU01fU0xKSVRfQ0xaKHRtcCwgc2hpZnQpOworCVNMSklUX0FTU0VSVChzaGlmdCA+IDApOworCXNoaWZ0LS07CisJdG1wID0gKGltbSA8PCBzaGlmdCk7CisKKwlpZiAoKHRtcCAmIH4weGZmZmYwMDAwMDAwMDAwMDB1bCkgPT0gMCkgeworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESSB8IEQocmVnKSB8IEEoMCkgfCBJTU0odG1wID4+IDQ4KSkpOworCQlzaGlmdCArPSAxNTsKKwkJcmV0dXJuIFBVU0hfUkxESUNSKHJlZywgc2hpZnQpOworCX0KKworCWlmICgodG1wICYgfjB4ZmZmZmZmZmYwMDAwMDAwMHVsKSA9PSAwKSB7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJUyB8IEQocmVnKSB8IEEoMCkgfCBJTU0odG1wID4+IDQ4KSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgUyhyZWcpIHwgQShyZWcpIHwgSU1NKHRtcCA+PiAzMikpKTsKKwkJc2hpZnQgKz0gMzE7CisJCXJldHVybiBQVVNIX1JMRElDUihyZWcsIHNoaWZ0KTsKKwl9CisKKwkvKiBDdXQgb3V0IHRoZSAxNiBiaXQgZnJvbSBpbW1lZGlhdGUuICovCisJc2hpZnQgKz0gMTU7CisJdG1wMiA9IGltbSAmICgoMXVsIDw8ICg2MyAtIHNoaWZ0KSkgLSAxKTsKKworCWlmICh0bXAyIDw9IDB4ZmZmZikgeworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESSB8IEQocmVnKSB8IEEoMCkgfCBJTU0odG1wID4+IDQ4KSkpOworCQlGQUlMX0lGKFBVU0hfUkxESUNSKHJlZywgc2hpZnQpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgUyhyZWcpIHwgQShyZWcpIHwgdG1wMik7CisJfQorCisJaWYgKHRtcDIgPD0gMHhmZmZmZmZmZikgeworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESSB8IEQocmVnKSB8IEEoMCkgfCBJTU0odG1wID4+IDQ4KSkpOworCQlGQUlMX0lGKFBVU0hfUkxESUNSKHJlZywgc2hpZnQpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SSVMgfCBTKHJlZykgfCBBKHJlZykgfCAodG1wMiA+PiAxNikpKTsKKwkJcmV0dXJuIChpbW0gJiAweGZmZmYpID8gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTKHJlZykgfCBBKHJlZykgfCBJTU0odG1wMikpIDogU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwlBU01fU0xKSVRfQ0xaKHRtcDIsIHNoaWZ0Mik7CisJdG1wMiA8PD0gc2hpZnQyOworCisJaWYgKCh0bXAyICYgfjB4ZmZmZjAwMDAwMDAwMDAwMHVsKSA9PSAwKSB7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJIHwgRChyZWcpIHwgQSgwKSB8IElNTSh0bXAgPj4gNDgpKSk7CisJCXNoaWZ0MiArPSAxNTsKKwkJc2hpZnQgKz0gKDYzIC0gc2hpZnQyKTsKKwkJRkFJTF9JRihQVVNIX1JMRElDUihyZWcsIHNoaWZ0KSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTKHJlZykgfCBBKHJlZykgfCAodG1wMiA+PiA0OCkpKTsKKwkJcmV0dXJuIFBVU0hfUkxESUNSKHJlZywgc2hpZnQyKTsKKwl9CisKKwkvKiBUaGUgZ2VuZXJhbCB2ZXJzaW9uLiAqLworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJUyB8IEQocmVnKSB8IEEoMCkgfCBJTU0oaW1tID4+IDQ4KSkpOworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTKHJlZykgfCBBKHJlZykgfCBJTU0oaW1tID4+IDMyKSkpOworCUZBSUxfSUYoUFVTSF9STERJQ1IocmVnLCAzMSkpOworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUklTIHwgUyhyZWcpIHwgQShyZWcpIHwgSU1NKGltbSA+PiAxNikpKTsKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTKHJlZykgfCBBKHJlZykgfCBJTU0oaW1tKSk7Cit9CisKKy8qIFNpbXBsaWZpZWQgbW5lbW9uaWNzOiBjbHJsZGkuICovCisjZGVmaW5lIElOU19DTEVBUl9MRUZUKGRzdCwgc3JjLCBmcm9tKSBcCisJKFJMRElDTCB8IFMoc3JjKSB8IEEoZHN0KSB8ICgoZnJvbSkgPDwgNikgfCAoMSA8PCA1KSkKKworLyogU2lnbiBleHRlbnNpb24gZm9yIGludGVnZXIgb3BlcmF0aW9ucy4gKi8KKyNkZWZpbmUgVU5fRVhUUygpIFwKKwlpZiAoKGZsYWdzICYgKEFMVF9TSUdOX0VYVCB8IFJFRzJfU09VUkNFKSkgPT0gKEFMVF9TSUdOX0VYVCB8IFJFRzJfU09VUkNFKSkgeyBcCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFWFRTVyB8IFMoc3JjMikgfCBBKFRNUF9SRUcyKSkpOyBcCisJCXNyYzIgPSBUTVBfUkVHMjsgXAorCX0KKworI2RlZmluZSBCSU5fRVhUUygpIFwKKwlpZiAoZmxhZ3MgJiBBTFRfU0lHTl9FWFQpIHsgXAorCQlpZiAoZmxhZ3MgJiBSRUcxX1NPVVJDRSkgeyBcCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRVhUU1cgfCBTKHNyYzEpIHwgQShUTVBfUkVHMSkpKTsgXAorCQkJc3JjMSA9IFRNUF9SRUcxOyBcCisJCX0gXAorCQlpZiAoZmxhZ3MgJiBSRUcyX1NPVVJDRSkgeyBcCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRVhUU1cgfCBTKHNyYzIpIHwgQShUTVBfUkVHMikpKTsgXAorCQkJc3JjMiA9IFRNUF9SRUcyOyBcCisJCX0gXAorCX0KKworI2RlZmluZSBCSU5fSU1NX0VYVFMoKSBcCisJaWYgKChmbGFncyAmIChBTFRfU0lHTl9FWFQgfCBSRUcxX1NPVVJDRSkpID09IChBTFRfU0lHTl9FWFQgfCBSRUcxX1NPVVJDRSkpIHsgXAorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRVhUU1cgfCBTKHNyYzEpIHwgQShUTVBfUkVHMSkpKTsgXAorCQlzcmMxID0gVE1QX1JFRzE7IFwKKwl9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9zaW5nbGVfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGZsYWdzLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc2kgc3JjMSwgc2xqaXRfc2kgc3JjMikKK3sKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBTTEpJVF9NT1Y6CisJY2FzZSBTTEpJVF9NT1ZfUDoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEpOworCQlpZiAoZHN0ICE9IHNyYzIpCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFMoc3JjMikgfCBBKGRzdCkgfCBCKHNyYzIpKTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX01PVl9VSToKKwljYXNlIFNMSklUX01PVl9TSToKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEpOworCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0kpCisJCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRVhUU1cgfCBTKHNyYzIpIHwgQShkc3QpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIElOU19DTEVBUl9MRUZUKGRzdCwgc3JjMiwgMCkpOworCQl9CisJCWVsc2UgeworCQkJU0xKSVRfQVNTRVJUKGRzdCA9PSBzcmMyKTsKKwkJfQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfTU9WX1VCOgorCWNhc2UgU0xKSVRfTU9WX1NCOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSk7CisJCWlmICgoZmxhZ3MgJiAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpID09IChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgeworCQkJaWYgKG9wID09IFNMSklUX01PVl9TQikKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFWFRTQiB8IFMoc3JjMikgfCBBKGRzdCkpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgSU5TX0NMRUFSX0xFRlQoZHN0LCBzcmMyLCAyNCkpOworCQl9CisJCWVsc2UgaWYgKChmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA9PSBTTEpJVF9NT1ZfU0IpCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBFWFRTQiB8IFMoc3JjMikgfCBBKGRzdCkpOworCQllbHNlIHsKKwkJCVNMSklUX0FTU0VSVChkc3QgPT0gc3JjMik7CisJCX0KKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX01PVl9VSDoKKwljYXNlIFNMSklUX01PVl9TSDoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEpOworCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0gpCisJCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRVhUU0ggfCBTKHNyYzIpIHwgQShkc3QpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIElOU19DTEVBUl9MRUZUKGRzdCwgc3JjMiwgMTYpKTsKKwkJfQorCQllbHNlIHsKKwkJCVNMSklUX0FTU0VSVChkc3QgPT0gc3JjMik7CisJCX0KKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX05PVDoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEpOworCQlVTl9FWFRTKCk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE5PUiB8IFJDKGZsYWdzKSB8IFMoc3JjMikgfCBBKGRzdCkgfCBCKHNyYzIpKTsKKworCWNhc2UgU0xKSVRfTkVHOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSk7CisJCVVOX0VYVFMoKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgTkVHIHwgT0VSQyhmbGFncykgfCBEKGRzdCkgfCBBKHNyYzIpKTsKKworCWNhc2UgU0xKSVRfQ0xaOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSk7CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMSkKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIENOVExaVyB8IFJDKGZsYWdzKSB8IFMoc3JjMikgfCBBKGRzdCkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBDTlRMWkQgfCBSQyhmbGFncykgfCBTKHNyYzIpIHwgQShkc3QpKTsKKworCWNhc2UgU0xKSVRfQUREOgorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTEpIHsKKwkJCS8qIEZsYWdzIGRvZXMgbm90IHNldDogQklOX0lNTV9FWFRTIHVubmVjZXNzYXJ5LiAqLworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQURESSB8IEQoZHN0KSB8IEEoc3JjMSkgfCBjb21waWxlci0+aW1tKTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTIpIHsKKwkJCS8qIEZsYWdzIGRvZXMgbm90IHNldDogQklOX0lNTV9FWFRTIHVubmVjZXNzYXJ5LiAqLworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQURESVMgfCBEKGRzdCkgfCBBKHNyYzEpIHwgY29tcGlsZXItPmltbSk7CisJCX0KKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk0zKSB7CisJCQlTTEpJVF9BU1NFUlQoc3JjMiA9PSBUTVBfUkVHMik7CisJCQlCSU5fSU1NX0VYVFMoKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFERElDIHwgRChkc3QpIHwgQShzcmMxKSB8IGNvbXBpbGVyLT5pbW0pOworCQl9CisJCWlmIChmbGFncyAmIEFMVF9GT1JNNCkgeworCQkJLyogRmxhZ3MgZG9lcyBub3Qgc2V0OiBCSU5fSU1NX0VYVFMgdW5uZWNlc3NhcnkuICovCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESSB8IEQoZHN0KSB8IEEoc3JjMSkgfCAoY29tcGlsZXItPmltbSAmIDB4ZmZmZikpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFERElTIHwgRChkc3QpIHwgQShkc3QpIHwgKCgoY29tcGlsZXItPmltbSA+PiAxNikgJiAweGZmZmYpICsgKChjb21waWxlci0+aW1tID4+IDE1KSAmIDB4MSkpKTsKKwkJfQorCQlpZiAoIShmbGFncyAmIEFMVF9TRVRfRkxBR1MpKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQUREIHwgRChkc3QpIHwgQShzcmMxKSB8IEIoc3JjMikpOworCQlCSU5fRVhUUygpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBRERDIHwgT0VSQyhBTFRfU0VUX0ZMQUdTKSB8IEQoZHN0KSB8IEEoc3JjMSkgfCBCKHNyYzIpKTsKKworCWNhc2UgU0xKSVRfQUREQzoKKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk0xKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTUZYRVIgfCBEKDApKSk7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURERSB8IEQoZHN0KSB8IEEoc3JjMSkgfCBCKHNyYzIpKSk7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNVFhFUiB8IFMoMCkpOworCQl9CisJCUJJTl9FWFRTKCk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFEREUgfCBEKGRzdCkgfCBBKHNyYzEpIHwgQihzcmMyKSk7CisKKwljYXNlIFNMSklUX1NVQjoKKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk0xKSB7CisJCQkvKiBGbGFncyBkb2VzIG5vdCBzZXQ6IEJJTl9JTU1fRVhUUyB1bm5lY2Vzc2FyeS4gKi8KKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNVQkZJQyB8IEQoZHN0KSB8IEEoc3JjMSkgfCBjb21waWxlci0+aW1tKTsKKwkJfQorCQlpZiAoZmxhZ3MgJiAoQUxUX0ZPUk0yIHwgQUxUX0ZPUk0zKSkgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJaWYgKGZsYWdzICYgQUxUX0ZPUk0yKQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDTVBJIHwgQ1JEKDAgfCAoKGZsYWdzICYgQUxUX1NJR05fRVhUKSA/IDAgOiAxKSkgfCBBKHNyYzEpIHwgY29tcGlsZXItPmltbSkpOworCQkJaWYgKGZsYWdzICYgQUxUX0ZPUk0zKQorCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIENNUExJIHwgQ1JEKDQgfCAoKGZsYWdzICYgQUxUX1NJR05fRVhUKSA/IDAgOiAxKSkgfCBBKHNyYzEpIHwgY29tcGlsZXItPmltbSk7CisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJfQorCQlpZiAoZmxhZ3MgJiAoQUxUX0ZPUk00IHwgQUxUX0ZPUk01KSkgeworCQkJaWYgKGZsYWdzICYgQUxUX0ZPUk00KQorCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDTVBMIHwgQ1JEKDQgfCAoKGZsYWdzICYgQUxUX1NJR05fRVhUKSA/IDAgOiAxKSkgfCBBKHNyYzEpIHwgQihzcmMyKSkpOworCQkJaWYgKGZsYWdzICYgQUxUX0ZPUk01KQorCQkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIENNUCB8IENSRCgwIHwgKChmbGFncyAmIEFMVF9TSUdOX0VYVCkgPyAwIDogMSkpIHwgQShzcmMxKSB8IEIoc3JjMikpOworCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJCX0KKwkJaWYgKCEoZmxhZ3MgJiBBTFRfU0VUX0ZMQUdTKSkKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNVQkYgfCBEKGRzdCkgfCBBKHNyYzIpIHwgQihzcmMxKSk7CisJCUJJTl9FWFRTKCk7CisJCWlmIChmbGFncyAmIEFMVF9GT1JNNikKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBDTVBMIHwgQ1JEKDQgfCAoKGZsYWdzICYgQUxUX1NJR05fRVhUKSA/IDAgOiAxKSkgfCBBKHNyYzEpIHwgQihzcmMyKSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTVUJGQyB8IE9FUkMoQUxUX1NFVF9GTEFHUykgfCBEKGRzdCkgfCBBKHNyYzIpIHwgQihzcmMxKSk7CisKKwljYXNlIFNMSklUX1NVQkM6CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMSkgeworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1GWEVSIHwgRCgwKSkpOworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNVQkZFIHwgRChkc3QpIHwgQShzcmMyKSB8IEIoc3JjMSkpKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE1UWEVSIHwgUygwKSk7CisJCX0KKwkJQklOX0VYVFMoKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1VCRkUgfCBEKGRzdCkgfCBBKHNyYzIpIHwgQihzcmMxKSk7CisKKwljYXNlIFNMSklUX01VTDoKKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk0xKSB7CisJCQlTTEpJVF9BU1NFUlQoc3JjMiA9PSBUTVBfUkVHMik7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNVUxMSSB8IEQoZHN0KSB8IEEoc3JjMSkgfCBjb21waWxlci0+aW1tKTsKKwkJfQorCQlCSU5fRVhUUygpOworCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTIpCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNVUxMVyB8IE9FUkMoZmxhZ3MpIHwgRChkc3QpIHwgQShzcmMyKSB8IEIoc3JjMSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNVUxMRCB8IE9FUkMoZmxhZ3MpIHwgRChkc3QpIHwgQShzcmMyKSB8IEIoc3JjMSkpOworCisJY2FzZSBTTEpJVF9BTkQ6CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMSkgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQU5ESSB8IFMoc3JjMSkgfCBBKGRzdCkgfCBjb21waWxlci0+aW1tKTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTIpIHsKKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFORElTIHwgUyhzcmMxKSB8IEEoZHN0KSB8IGNvbXBpbGVyLT5pbW0pOworCQl9CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFORCB8IFJDKGZsYWdzKSB8IFMoc3JjMSkgfCBBKGRzdCkgfCBCKHNyYzIpKTsKKworCWNhc2UgU0xKSVRfT1I6CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMSkgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgUyhzcmMxKSB8IEEoZHN0KSB8IGNvbXBpbGVyLT5pbW0pOworCQl9CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMikgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1JJUyB8IFMoc3JjMSkgfCBBKGRzdCkgfCBjb21waWxlci0+aW1tKTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTMpIHsKKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUkkgfCBTKHNyYzEpIHwgQShkc3QpIHwgSU1NKGNvbXBpbGVyLT5pbW0pKSk7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUklTIHwgUyhkc3QpIHwgQShkc3QpIHwgSU1NKGNvbXBpbGVyLT5pbW0gPj4gMTYpKTsKKwkJfQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFJDKGZsYWdzKSB8IFMoc3JjMSkgfCBBKGRzdCkgfCBCKHNyYzIpKTsKKworCWNhc2UgU0xKSVRfWE9SOgorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTEpIHsKKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFhPUkkgfCBTKHNyYzEpIHwgQShkc3QpIHwgY29tcGlsZXItPmltbSk7CisJCX0KKwkJaWYgKGZsYWdzICYgQUxUX0ZPUk0yKSB7CisJCQlTTEpJVF9BU1NFUlQoc3JjMiA9PSBUTVBfUkVHMik7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBYT1JJUyB8IFMoc3JjMSkgfCBBKGRzdCkgfCBjb21waWxlci0+aW1tKTsKKwkJfQorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTMpIHsKKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBYT1JJIHwgUyhzcmMxKSB8IEEoZHN0KSB8IElNTShjb21waWxlci0+aW1tKSkpOworCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgWE9SSVMgfCBTKGRzdCkgfCBBKGRzdCkgfCBJTU0oY29tcGlsZXItPmltbSA+PiAxNikpOworCQl9CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFhPUiB8IFJDKGZsYWdzKSB8IFMoc3JjMSkgfCBBKGRzdCkgfCBCKHNyYzIpKTsKKworCWNhc2UgU0xKSVRfU0hMOgorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTEpIHsKKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCWlmIChmbGFncyAmIEFMVF9GT1JNMikgeworCQkJCWNvbXBpbGVyLT5pbW0gJj0gMHgxZjsKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBSTFdJTk0gfCBSQyhmbGFncykgfCBTKHNyYzEpIHwgQShkc3QpIHwgKGNvbXBpbGVyLT5pbW0gPDwgMTEpIHwgKCgzMSAtIGNvbXBpbGVyLT5pbW0pIDw8IDEpKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWNvbXBpbGVyLT5pbW0gJj0gMHgzZjsKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBSTERJKGRzdCwgc3JjMSwgY29tcGlsZXItPmltbSwgNjMgLSBjb21waWxlci0+aW1tLCAxKSB8IFJDKGZsYWdzKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKChmbGFncyAmIEFMVF9GT1JNMikgPyBTTFcgOiBTTEQpIHwgUkMoZmxhZ3MpIHwgUyhzcmMxKSB8IEEoZHN0KSB8IEIoc3JjMikpOworCisJY2FzZSBTTEpJVF9MU0hSOgorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTEpIHsKKwkJCVNMSklUX0FTU0VSVChzcmMyID09IFRNUF9SRUcyKTsKKwkJCWlmIChmbGFncyAmIEFMVF9GT1JNMikgeworCQkJCWNvbXBpbGVyLT5pbW0gJj0gMHgxZjsKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBSTFdJTk0gfCBSQyhmbGFncykgfCBTKHNyYzEpIHwgQShkc3QpIHwgKCgoMzIgLSBjb21waWxlci0+aW1tKSAmIDB4MWYpIDw8IDExKSB8IChjb21waWxlci0+aW1tIDw8IDYpIHwgKDMxIDw8IDEpKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWNvbXBpbGVyLT5pbW0gJj0gMHgzZjsKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBSTERJKGRzdCwgc3JjMSwgNjQgLSBjb21waWxlci0+aW1tLCBjb21waWxlci0+aW1tLCAwKSB8IFJDKGZsYWdzKSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKChmbGFncyAmIEFMVF9GT1JNMikgPyBTUlcgOiBTUkQpIHwgUkMoZmxhZ3MpIHwgUyhzcmMxKSB8IEEoZHN0KSB8IEIoc3JjMikpOworCisJY2FzZSBTTEpJVF9BU0hSOgorCQlpZiAoZmxhZ3MgJiBBTFRfRk9STTMpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTUZYRVIgfCBEKDApKSk7CisJCWlmIChmbGFncyAmIEFMVF9GT1JNMSkgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gVE1QX1JFRzIpOworCQkJaWYgKGZsYWdzICYgQUxUX0ZPUk0yKSB7CisJCQkJY29tcGlsZXItPmltbSAmPSAweDFmOworCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTUkFXSSB8IFJDKGZsYWdzKSB8IFMoc3JjMSkgfCBBKGRzdCkgfCAoY29tcGlsZXItPmltbSA8PCAxMSkpKTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWNvbXBpbGVyLT5pbW0gJj0gMHgzZjsKKwkJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1JBREkgfCBSQyhmbGFncykgfCBTKHNyYzEpIHwgQShkc3QpIHwgKChjb21waWxlci0+aW1tICYgMHgxZikgPDwgMTEpIHwgKChjb21waWxlci0+aW1tICYgMHgyMCkgPj4gNCkpKTsKKwkJCX0KKwkJfQorCQllbHNlCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKChmbGFncyAmIEFMVF9GT1JNMikgPyBTUkFXIDogU1JBRCkgfCBSQyhmbGFncykgfCBTKHNyYzEpIHwgQShkc3QpIHwgQihzcmMyKSkpOworCQlyZXR1cm4gKGZsYWdzICYgQUxUX0ZPUk0zKSA/IHB1c2hfaW5zdChjb21waWxlciwgTVRYRVIgfCBTKDApKSA6IFNMSklUX1NVQ0NFU1M7CisJfQorCisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHJlZywgc2xqaXRfc3cgaW5pdF92YWx1ZSkKK3sKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVMgfCBEKHJlZykgfCBBKDApIHwgSU1NKGluaXRfdmFsdWUgPj4gNDgpKSk7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SSSB8IFMocmVnKSB8IEEocmVnKSB8IElNTShpbml0X3ZhbHVlID4+IDMyKSkpOworCUZBSUxfSUYoUFVTSF9STERJQ1IocmVnLCAzMSkpOworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUklTIHwgUyhyZWcpIHwgQShyZWcpIHwgSU1NKGluaXRfdmFsdWUgPj4gMTYpKSk7CisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1JJIHwgUyhyZWcpIHwgQShyZWcpIHwgSU1NKGluaXRfdmFsdWUpKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2p1bXBfYWRkcihzbGppdF91dyBhZGRyLCBzbGppdF91dyBuZXdfYWRkcikKK3sKKwlzbGppdF9pbnMgKmluc3QgPSAoc2xqaXRfaW5zKilhZGRyOworCisJaW5zdFswXSA9IChpbnN0WzBdICYgMHhmZmZmMDAwMCkgfCAoKG5ld19hZGRyID4+IDQ4KSAmIDB4ZmZmZik7CisJaW5zdFsxXSA9IChpbnN0WzFdICYgMHhmZmZmMDAwMCkgfCAoKG5ld19hZGRyID4+IDMyKSAmIDB4ZmZmZik7CisJaW5zdFszXSA9IChpbnN0WzNdICYgMHhmZmZmMDAwMCkgfCAoKG5ld19hZGRyID4+IDE2KSAmIDB4ZmZmZik7CisJaW5zdFs0XSA9IChpbnN0WzRdICYgMHhmZmZmMDAwMCkgfCAobmV3X2FkZHIgJiAweGZmZmYpOworCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyA1KTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2NvbnN0KHNsaml0X3V3IGFkZHIsIHNsaml0X3N3IG5ld19jb25zdGFudCkKK3sKKwlzbGppdF9pbnMgKmluc3QgPSAoc2xqaXRfaW5zKilhZGRyOworCisJaW5zdFswXSA9IChpbnN0WzBdICYgMHhmZmZmMDAwMCkgfCAoKG5ld19jb25zdGFudCA+PiA0OCkgJiAweGZmZmYpOworCWluc3RbMV0gPSAoaW5zdFsxXSAmIDB4ZmZmZjAwMDApIHwgKChuZXdfY29uc3RhbnQgPj4gMzIpICYgMHhmZmZmKTsKKwlpbnN0WzNdID0gKGluc3RbM10gJiAweGZmZmYwMDAwKSB8ICgobmV3X2NvbnN0YW50ID4+IDE2KSAmIDB4ZmZmZik7CisJaW5zdFs0XSA9IChpbnN0WzRdICYgMHhmZmZmMDAwMCkgfCAobmV3X2NvbnN0YW50ICYgMHhmZmZmKTsKKwlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgNSk7Cit9CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVQUENfY29tbW9uLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVQUENfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjZhMDQzZgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVBQQ19jb21tb24uYwpAQCAtMCwwICsxLDIzNzUgQEAKKy8qCisgKiAgICBTdGFjay1sZXNzIEp1c3QtSW4tVGltZSBjb21waWxlcgorICoKKyAqICAgIENvcHlyaWdodCAyMDA5LTIwMTIgWm9sdGFuIEhlcmN6ZWcgKGh6bWVzdGVyQGZyZWVtYWlsLmh1KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAqICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIFNMSklUX0NPTlNUIGNoYXIqIHNsaml0X2dldF9wbGF0Zm9ybV9uYW1lKHZvaWQpCit7CisJcmV0dXJuICJQb3dlclBDIiBTTEpJVF9DUFVJTkZPOworfQorCisvKiBMZW5ndGggb2YgYW4gaW5zdHJ1Y3Rpb24gd29yZC4KKyAgIEJvdGggZm9yIHBwYy0zMiBhbmQgcHBjLTY0LiAqLwordHlwZWRlZiBzbGppdF91aSBzbGppdF9pbnM7CisKKyNpZiAoKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ18zMiAmJiBTTEpJVF9DT05GSUdfUFBDXzMyKSAmJiAoZGVmaW5lZCBfQUlYKSkgXAorCXx8IChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKKyNkZWZpbmUgU0xKSVRfUFBDX1NUQUNLX0ZSQU1FX1YyIDEKKyNlbmRpZgorCisjaWZkZWYgX0FJWAorI2luY2x1ZGUgPHN5cy9jYWNoZS5oPgorI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9MSVRUTEVfRU5ESUFOICYmIFNMSklUX0xJVFRMRV9FTkRJQU4pCisjZGVmaW5lIFNMSklUX1BBU1NfRU5UUllfQUREUl9UT19DQUxMIDEKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBwcGNfY2FjaGVfZmx1c2goc2xqaXRfaW5zICpmcm9tLCBzbGppdF9pbnMgKnRvKQoreworI2lmZGVmIF9BSVgKKwlfc3luY19jYWNoZV9yYW5nZSgoY2FkZHJfdClmcm9tLCAoaW50KSgoc2l6ZV90KXRvIC0gKHNpemVfdClmcm9tKSk7CisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSB8fCAoZGVmaW5lZChfX0lCTV9HQ0NfQVNNKSAmJiBfX0lCTV9HQ0NfQVNNKQorIwlpZiBkZWZpbmVkKF9BUkNIX1BXUikgfHwgZGVmaW5lZChfQVJDSF9QV1IyKQorCS8qIENhY2hlIGZsdXNoIGZvciBQT1dFUiBhcmNoaXRlY3R1cmUuICovCisJd2hpbGUgKGZyb20gPCB0bykgeworCQlfX2FzbV9fIHZvbGF0aWxlICgKKwkJCSJjbGYgMCwgJTBcbiIKKwkJCSJkY3NcbiIKKwkJCTogOiAiciIoZnJvbSkKKwkJKTsKKwkJZnJvbSsrOworCX0KKwlfX2FzbV9fIHZvbGF0aWxlICggImljcyIgKTsKKyMJZWxpZiBkZWZpbmVkKF9BUkNIX0NPTSkgJiYgIWRlZmluZWQoX0FSQ0hfUFBDKQorIwllcnJvciAiQ2FjaGUgZmx1c2ggaXMgbm90IGltcGxlbWVudGVkIGZvciBQb3dlclBDL1BPV0VSIGNvbW1vbiBtb2RlLiIKKyMJZWxzZQorCS8qIENhY2hlIGZsdXNoIGZvciBQb3dlclBDIGFyY2hpdGVjdHVyZS4gKi8KKwl3aGlsZSAoZnJvbSA8IHRvKSB7CisJCV9fYXNtX18gdm9sYXRpbGUgKAorCQkJImRjYmYgMCwgJTBcbiIKKwkJCSJzeW5jXG4iCisJCQkiaWNiaSAwLCAlMFxuIgorCQkJOiA6ICJyIihmcm9tKQorCQkpOworCQlmcm9tKys7CisJfQorCV9fYXNtX18gdm9sYXRpbGUgKCAiaXN5bmMiICk7CisjCWVuZGlmCisjCWlmZGVmIF9feGxjX18KKyMJd2FybmluZyAiVGhpcyBmaWxlIG1heSBmYWlsIHRvIGNvbXBpbGUgaWYgLXFmdW5jc2VjdCBpcyB1c2VkIgorIwllbmRpZgorI2VsaWYgZGVmaW5lZChfX3hsY19fKQorI2Vycm9yICJQbGVhc2UgZW5hYmxlIEdDQyBzeW50YXggZm9yIGlubGluZSBhc3NlbWJseSBzdGF0ZW1lbnRzIHdpdGggLXFhc209Z2NjIgorI2Vsc2UKKyNlcnJvciAiVGhpcyBwbGF0Zm9ybSByZXF1aXJlcyBhIGNhY2hlIGZsdXNoIGltcGxlbWVudGF0aW9uLiIKKyNlbmRpZiAvKiBfQUlYICovCit9CisKKyNkZWZpbmUgVE1QX1JFRzEJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAyKQorI2RlZmluZSBUTVBfUkVHMgkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDMpCisjZGVmaW5lIFRNUF9SRUczCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNCkKKyNkZWZpbmUgVE1QX1pFUk8JKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyA1KQorCisjaWYgKGRlZmluZWQgU0xKSVRfUEFTU19FTlRSWV9BRERSX1RPX0NBTEwgJiYgU0xKSVRfUEFTU19FTlRSWV9BRERSX1RPX0NBTEwpCisjZGVmaW5lIFRNUF9DQUxMX1JFRwkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDYpCisjZWxzZQorI2RlZmluZSBUTVBfQ0FMTF9SRUcJVE1QX1JFRzIKKyNlbmRpZgorCisjZGVmaW5lIFRNUF9GUkVHMQkoMCkKKyNkZWZpbmUgVE1QX0ZSRUcyCShTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTICsgMSkKKworc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X3ViIHJlZ19tYXBbU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDddID0geworCTAsIDMsIDQsIDUsIDYsIDcsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMSwgOCwgOSwgMTAsIDMxLCAxMgorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgSW5zdHJ1Y2lvbiBmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworI2RlZmluZSBEKGQpCQkocmVnX21hcFtkXSA8PCAyMSkKKyNkZWZpbmUgUyhzKQkJKHJlZ19tYXBbc10gPDwgMjEpCisjZGVmaW5lIEEoYSkJCShyZWdfbWFwW2FdIDw8IDE2KQorI2RlZmluZSBCKGIpCQkocmVnX21hcFtiXSA8PCAxMSkKKyNkZWZpbmUgQyhjKQkJKHJlZ19tYXBbY10gPDwgNikKKyNkZWZpbmUgRkQoZmQpCQkoKGZkKSA8PCAyMSkKKyNkZWZpbmUgRlMoZnMpCQkoKGZzKSA8PCAyMSkKKyNkZWZpbmUgRkEoZmEpCQkoKGZhKSA8PCAxNikKKyNkZWZpbmUgRkIoZmIpCQkoKGZiKSA8PCAxMSkKKyNkZWZpbmUgRkMoZmMpCQkoKGZjKSA8PCA2KQorI2RlZmluZSBJTU0oaW1tKQkoKGltbSkgJiAweGZmZmYpCisjZGVmaW5lIENSRChkKQkJKChkKSA8PCAyMSkKKworLyogSW5zdHJ1Y3Rpb24gYml0IHNlY3Rpb25zLgorICAgT0UgYW5kIFJjIGZsYWcgKHNlZSBBTFRfU0VUX0ZMQUdTKS4gKi8KKyNkZWZpbmUgT0VSQyhmbGFncykJKCgoZmxhZ3MgJiBBTFRfU0VUX0ZMQUdTKSA+PiAxMCkgfCAoZmxhZ3MgJiBBTFRfU0VUX0ZMQUdTKSkKKy8qIFJjIGZsYWcgKHNlZSBBTFRfU0VUX0ZMQUdTKS4gKi8KKyNkZWZpbmUgUkMoZmxhZ3MpCSgoZmxhZ3MgJiBBTFRfU0VUX0ZMQUdTKSA+PiAxMCkKKyNkZWZpbmUgSEkob3Bjb2RlKQkoKG9wY29kZSkgPDwgMjYpCisjZGVmaW5lIExPKG9wY29kZSkJKChvcGNvZGUpIDw8IDEpCisKKyNkZWZpbmUgQURECQkoSEkoMzEpIHwgTE8oMjY2KSkKKyNkZWZpbmUgQUREQwkJKEhJKDMxKSB8IExPKDEwKSkKKyNkZWZpbmUgQURERQkJKEhJKDMxKSB8IExPKDEzOCkpCisjZGVmaW5lIEFEREkJCShISSgxNCkpCisjZGVmaW5lIEFERElDCQkoSEkoMTMpKQorI2RlZmluZSBBRERJUwkJKEhJKDE1KSkKKyNkZWZpbmUgQURETUUJCShISSgzMSkgfCBMTygyMzQpKQorI2RlZmluZSBBTkQJCShISSgzMSkgfCBMTygyOCkpCisjZGVmaW5lIEFOREkJCShISSgyOCkpCisjZGVmaW5lIEFORElTCQkoSEkoMjkpKQorI2RlZmluZSBCeAkJKEhJKDE4KSkKKyNkZWZpbmUgQkN4CQkoSEkoMTYpKQorI2RlZmluZSBCQ0NUUgkJKEhJKDE5KSB8IExPKDUyOCkgfCAoMyA8PCAxMSkpCisjZGVmaW5lIEJMUgkJKEhJKDE5KSB8IExPKDE2KSB8ICgweDE0IDw8IDIxKSkKKyNkZWZpbmUgQ05UTFpECQkoSEkoMzEpIHwgTE8oNTgpKQorI2RlZmluZSBDTlRMWlcJCShISSgzMSkgfCBMTygyNikpCisjZGVmaW5lIENNUAkJKEhJKDMxKSB8IExPKDApKQorI2RlZmluZSBDTVBJCQkoSEkoMTEpKQorI2RlZmluZSBDTVBMCQkoSEkoMzEpIHwgTE8oMzIpKQorI2RlZmluZSBDTVBMSQkJKEhJKDEwKSkKKyNkZWZpbmUgQ1JPUgkJKEhJKDE5KSB8IExPKDQ0OSkpCisjZGVmaW5lIERJVkQJCShISSgzMSkgfCBMTyg0ODkpKQorI2RlZmluZSBESVZEVQkJKEhJKDMxKSB8IExPKDQ1NykpCisjZGVmaW5lIERJVlcJCShISSgzMSkgfCBMTyg0OTEpKQorI2RlZmluZSBESVZXVQkJKEhJKDMxKSB8IExPKDQ1OSkpCisjZGVmaW5lIEVYVFNCCQkoSEkoMzEpIHwgTE8oOTU0KSkKKyNkZWZpbmUgRVhUU0gJCShISSgzMSkgfCBMTyg5MjIpKQorI2RlZmluZSBFWFRTVwkJKEhJKDMxKSB8IExPKDk4NikpCisjZGVmaW5lIEZBQlMJCShISSg2MykgfCBMTygyNjQpKQorI2RlZmluZSBGQURECQkoSEkoNjMpIHwgTE8oMjEpKQorI2RlZmluZSBGQUREUwkJKEhJKDU5KSB8IExPKDIxKSkKKyNkZWZpbmUgRkNGSUQJCShISSg2MykgfCBMTyg4NDYpKQorI2RlZmluZSBGQ01QVQkJKEhJKDYzKSB8IExPKDApKQorI2RlZmluZSBGQ1RJRFoJCShISSg2MykgfCBMTyg4MTUpKQorI2RlZmluZSBGQ1RJV1oJCShISSg2MykgfCBMTygxNSkpCisjZGVmaW5lIEZESVYJCShISSg2MykgfCBMTygxOCkpCisjZGVmaW5lIEZESVZTCQkoSEkoNTkpIHwgTE8oMTgpKQorI2RlZmluZSBGTVIJCShISSg2MykgfCBMTyg3MikpCisjZGVmaW5lIEZNVUwJCShISSg2MykgfCBMTygyNSkpCisjZGVmaW5lIEZNVUxTCQkoSEkoNTkpIHwgTE8oMjUpKQorI2RlZmluZSBGTkVHCQkoSEkoNjMpIHwgTE8oNDApKQorI2RlZmluZSBGUlNQCQkoSEkoNjMpIHwgTE8oMTIpKQorI2RlZmluZSBGU1VCCQkoSEkoNjMpIHwgTE8oMjApKQorI2RlZmluZSBGU1VCUwkJKEhJKDU5KSB8IExPKDIwKSkKKyNkZWZpbmUgTEQJCShISSg1OCkgfCAwKQorI2RlZmluZSBMV1oJCShISSgzMikpCisjZGVmaW5lIE1GQ1IJCShISSgzMSkgfCBMTygxOSkpCisjZGVmaW5lIE1GTFIJCShISSgzMSkgfCBMTygzMzkpIHwgMHg4MDAwMCkKKyNkZWZpbmUgTUZYRVIJCShISSgzMSkgfCBMTygzMzkpIHwgMHgxMDAwMCkKKyNkZWZpbmUgTVRDVFIJCShISSgzMSkgfCBMTyg0NjcpIHwgMHg5MDAwMCkKKyNkZWZpbmUgTVRMUgkJKEhJKDMxKSB8IExPKDQ2NykgfCAweDgwMDAwKQorI2RlZmluZSBNVFhFUgkJKEhJKDMxKSB8IExPKDQ2NykgfCAweDEwMDAwKQorI2RlZmluZSBNVUxIRAkJKEhJKDMxKSB8IExPKDczKSkKKyNkZWZpbmUgTVVMSERVCQkoSEkoMzEpIHwgTE8oOSkpCisjZGVmaW5lIE1VTEhXCQkoSEkoMzEpIHwgTE8oNzUpKQorI2RlZmluZSBNVUxIV1UJCShISSgzMSkgfCBMTygxMSkpCisjZGVmaW5lIE1VTExECQkoSEkoMzEpIHwgTE8oMjMzKSkKKyNkZWZpbmUgTVVMTEkJCShISSg3KSkKKyNkZWZpbmUgTVVMTFcJCShISSgzMSkgfCBMTygyMzUpKQorI2RlZmluZSBORUcJCShISSgzMSkgfCBMTygxMDQpKQorI2RlZmluZSBOT1AJCShISSgyNCkpCisjZGVmaW5lIE5PUgkJKEhJKDMxKSB8IExPKDEyNCkpCisjZGVmaW5lIE9SCQkoSEkoMzEpIHwgTE8oNDQ0KSkKKyNkZWZpbmUgT1JJCQkoSEkoMjQpKQorI2RlZmluZSBPUklTCQkoSEkoMjUpKQorI2RlZmluZSBSTERJQ0wJCShISSgzMCkpCisjZGVmaW5lIFJMV0lOTQkJKEhJKDIxKSkKKyNkZWZpbmUgU0xECQkoSEkoMzEpIHwgTE8oMjcpKQorI2RlZmluZSBTTFcJCShISSgzMSkgfCBMTygyNCkpCisjZGVmaW5lIFNSQUQJCShISSgzMSkgfCBMTyg3OTQpKQorI2RlZmluZSBTUkFESQkJKEhJKDMxKSB8IExPKDQxMyA8PCAxKSkKKyNkZWZpbmUgU1JBVwkJKEhJKDMxKSB8IExPKDc5MikpCisjZGVmaW5lIFNSQVdJCQkoSEkoMzEpIHwgTE8oODI0KSkKKyNkZWZpbmUgU1JECQkoSEkoMzEpIHwgTE8oNTM5KSkKKyNkZWZpbmUgU1JXCQkoSEkoMzEpIHwgTE8oNTM2KSkKKyNkZWZpbmUgU1RECQkoSEkoNjIpIHwgMCkKKyNkZWZpbmUgU1REVQkJKEhJKDYyKSB8IDEpCisjZGVmaW5lIFNURFVYCQkoSEkoMzEpIHwgTE8oMTgxKSkKKyNkZWZpbmUgU1RGSVdYCQkoSEkoMzEpIHwgTE8oOTgzKSkKKyNkZWZpbmUgU1RXCQkoSEkoMzYpKQorI2RlZmluZSBTVFdVCQkoSEkoMzcpKQorI2RlZmluZSBTVFdVWAkJKEhJKDMxKSB8IExPKDE4MykpCisjZGVmaW5lIFNVQkYJCShISSgzMSkgfCBMTyg0MCkpCisjZGVmaW5lIFNVQkZDCQkoSEkoMzEpIHwgTE8oOCkpCisjZGVmaW5lIFNVQkZFCQkoSEkoMzEpIHwgTE8oMTM2KSkKKyNkZWZpbmUgU1VCRklDCQkoSEkoOCkpCisjZGVmaW5lIFhPUgkJKEhJKDMxKSB8IExPKDMxNikpCisjZGVmaW5lIFhPUkkJCShISSgyNikpCisjZGVmaW5lIFhPUklTCQkoSEkoMjcpKQorCisjZGVmaW5lIFNJTU1fTUFYCSgweDdmZmYpCisjZGVmaW5lIFNJTU1fTUlOCSgtMHg4MDAwKQorI2RlZmluZSBVSU1NX01BWAkoMHhmZmZmKQorCisjaWYgKGRlZmluZWQgU0xKSVRfSU5ESVJFQ1RfQ0FMTCAmJiBTTEpJVF9JTkRJUkVDVF9DQUxMKQorU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2Z1bmN0aW9uX2NvbnRleHQodm9pZCoqIGZ1bmNfcHRyLCBzdHJ1Y3Qgc2xqaXRfZnVuY3Rpb25fY29udGV4dCogY29udGV4dCwgc2xqaXRfc3cgYWRkciwgdm9pZCogZnVuYykKK3sKKwlzbGppdF9zdyogcHRyczsKKwlpZiAoZnVuY19wdHIpCisJCSpmdW5jX3B0ciA9ICh2b2lkKiljb250ZXh0OworCXB0cnMgPSAoc2xqaXRfc3cqKWZ1bmM7CisJY29udGV4dC0+YWRkciA9IGFkZHIgPyBhZGRyIDogcHRyc1swXTsKKwljb250ZXh0LT5yMiA9IHB0cnNbMV07CisJY29udGV4dC0+cjExID0gcHRyc1syXTsKK30KKyNlbmRpZgorCitzdGF0aWMgc2xqaXRfc2kgcHVzaF9pbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X2lucyBpbnMpCit7CisJc2xqaXRfaW5zICpwdHIgPSAoc2xqaXRfaW5zKillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfaW5zKSk7CisJRkFJTF9JRighcHRyKTsKKwkqcHRyID0gaW5zOworCWNvbXBpbGVyLT5zaXplKys7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZGV0ZWN0X2p1bXBfdHlwZShzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfaW5zICpjb2RlX3B0ciwgc2xqaXRfaW5zICpjb2RlKQoreworCXNsaml0X3N3IGRpZmY7CisJc2xqaXRfdXcgdGFyZ2V0X2FkZHI7CisJc2xqaXRfc3cgZXh0cmFfanVtcF9mbGFnczsKKworI2lmIChkZWZpbmVkIFNMSklUX1BBU1NfRU5UUllfQUREUl9UT19DQUxMICYmIFNMSklUX1BBU1NfRU5UUllfQUREUl9UT19DQUxMKSAmJiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzMyICYmIFNMSklUX0NPTkZJR19QUENfMzIpCisJaWYgKGp1bXAtPmZsYWdzICYgKFNMSklUX1JFV1JJVEFCTEVfSlVNUCB8IElTX0NBTEwpKQorCQlyZXR1cm4gMDsKKyNlbHNlCisJaWYgKGp1bXAtPmZsYWdzICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCisJaWYgKGp1bXAtPmZsYWdzICYgSlVNUF9BRERSKQorCQl0YXJnZXRfYWRkciA9IGp1bXAtPnUudGFyZ2V0OworCWVsc2UgeworCQlTTEpJVF9BU1NFUlQoanVtcC0+ZmxhZ3MgJiBKVU1QX0xBQkVMKTsKKwkJdGFyZ2V0X2FkZHIgPSAoc2xqaXRfdXcpKGNvZGUgKyBqdW1wLT51LmxhYmVsLT5zaXplKTsKKwl9CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9QQVNTX0VOVFJZX0FERFJfVE9fQ0FMTCAmJiBTTEpJVF9QQVNTX0VOVFJZX0FERFJfVE9fQ0FMTCkgJiYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorCWlmIChqdW1wLT5mbGFncyAmIElTX0NBTEwpCisJCWdvdG8ga2VlcF9hZGRyZXNzOworI2VuZGlmCisKKwlkaWZmID0gKChzbGppdF9zdyl0YXJnZXRfYWRkciAtIChzbGppdF9zdykoY29kZV9wdHIpKSAmIH4weDNsOworCisJZXh0cmFfanVtcF9mbGFncyA9IDA7CisJaWYgKGp1bXAtPmZsYWdzICYgSVNfQ09ORCkgeworCQlpZiAoZGlmZiA8PSAweDdmZmYgJiYgZGlmZiA+PSAtMHg4MDAwKSB7CisJCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9COworCQkJcmV0dXJuIDE7CisJCX0KKwkJaWYgKHRhcmdldF9hZGRyIDw9IDB4ZmZmZikgeworCQkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfQiB8IFBBVENIX0FCU19COworCQkJcmV0dXJuIDE7CisJCX0KKwkJZXh0cmFfanVtcF9mbGFncyA9IFJFTU9WRV9DT05EOworCisJCWRpZmYgLT0gc2l6ZW9mKHNsaml0X2lucyk7CisJfQorCisJaWYgKGRpZmYgPD0gMHgwMWZmZmZmZiAmJiBkaWZmID49IC0weDAyMDAwMDAwKSB7CisJCWp1bXAtPmZsYWdzIHw9IFBBVENIX0IgfCBleHRyYV9qdW1wX2ZsYWdzOworCQlyZXR1cm4gMTsKKwl9CisJaWYgKHRhcmdldF9hZGRyIDw9IDB4MDNmZmZmZmYpIHsKKwkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfQiB8IFBBVENIX0FCU19CIHwgZXh0cmFfanVtcF9mbGFnczsKKwkJcmV0dXJuIDE7CisJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorI2lmIChkZWZpbmVkIFNMSklUX1BBU1NfRU5UUllfQUREUl9UT19DQUxMICYmIFNMSklUX1BBU1NfRU5UUllfQUREUl9UT19DQUxMKQora2VlcF9hZGRyZXNzOgorI2VuZGlmCisJaWYgKHRhcmdldF9hZGRyIDw9IDB4N2ZmZmZmZmYpIHsKKwkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfQUJTMzI7CisJCXJldHVybiAxOworCX0KKwlpZiAodGFyZ2V0X2FkZHIgPD0gMHg3ZmZmZmZmZmZmZmZsKSB7CisJCWp1bXAtPmZsYWdzIHw9IFBBVENIX0FCUzQ4OworCQlyZXR1cm4gMTsKKwl9CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCogc2xqaXRfZ2VuZXJhdGVfY29kZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQoreworCXN0cnVjdCBzbGppdF9tZW1vcnlfZnJhZ21lbnQgKmJ1ZjsKKwlzbGppdF9pbnMgKmNvZGU7CisJc2xqaXRfaW5zICpjb2RlX3B0cjsKKwlzbGppdF9pbnMgKmJ1Zl9wdHI7CisJc2xqaXRfaW5zICpidWZfZW5kOworCXNsaml0X3V3IHdvcmRfY291bnQ7CisJc2xqaXRfdXcgYWRkcjsKKworCXN0cnVjdCBzbGppdF9sYWJlbCAqbGFiZWw7CisJc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CisJc3RydWN0IHNsaml0X2NvbnN0ICpjb25zdF87CisKKwlDSEVDS19FUlJPUl9QVFIoKTsKKwlDSEVDS19QVFIoY2hlY2tfc2xqaXRfZ2VuZXJhdGVfY29kZShjb21waWxlcikpOworCXJldmVyc2VfYnVmKGNvbXBpbGVyKTsKKworI2lmIChkZWZpbmVkIFNMSklUX0lORElSRUNUX0NBTEwgJiYgU0xKSVRfSU5ESVJFQ1RfQ0FMTCkKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisJY29tcGlsZXItPnNpemUgKz0gKGNvbXBpbGVyLT5zaXplICYgMHgxKSArIChzaXplb2Yoc3RydWN0IHNsaml0X2Z1bmN0aW9uX2NvbnRleHQpIC8gc2l6ZW9mKHNsaml0X2lucykpOworI2Vsc2UKKwljb21waWxlci0+c2l6ZSArPSAoc2l6ZW9mKHN0cnVjdCBzbGppdF9mdW5jdGlvbl9jb250ZXh0KSAvIHNpemVvZihzbGppdF9pbnMpKTsKKyNlbmRpZgorI2VuZGlmCisJY29kZSA9IChzbGppdF9pbnMqKVNMSklUX01BTExPQ19FWEVDKGNvbXBpbGVyLT5zaXplICogc2l6ZW9mKHNsaml0X2lucykpOworCVBUUl9GQUlMX1dJVEhfRVhFQ19JRihjb2RlKTsKKwlidWYgPSBjb21waWxlci0+YnVmOworCisJY29kZV9wdHIgPSBjb2RlOworCXdvcmRfY291bnQgPSAwOworCWxhYmVsID0gY29tcGlsZXItPmxhYmVsczsKKwlqdW1wID0gY29tcGlsZXItPmp1bXBzOworCWNvbnN0XyA9IGNvbXBpbGVyLT5jb25zdHM7CisJZG8geworCQlidWZfcHRyID0gKHNsaml0X2lucyopYnVmLT5tZW1vcnk7CisJCWJ1Zl9lbmQgPSBidWZfcHRyICsgKGJ1Zi0+dXNlZF9zaXplID4+IDIpOworCQlkbyB7CisJCQkqY29kZV9wdHIgPSAqYnVmX3B0cisrOworCQkJU0xKSVRfQVNTRVJUKCFsYWJlbCB8fCBsYWJlbC0+c2l6ZSA+PSB3b3JkX2NvdW50KTsKKwkJCVNMSklUX0FTU0VSVCghanVtcCB8fCBqdW1wLT5hZGRyID49IHdvcmRfY291bnQpOworCQkJU0xKSVRfQVNTRVJUKCFjb25zdF8gfHwgY29uc3RfLT5hZGRyID49IHdvcmRfY291bnQpOworCQkJLyogVGhlc2Ugc3RydWN0dXJlcyBhcmUgb3JkZXJlZCBieSB0aGVpciBhZGRyZXNzLiAqLworCQkJaWYgKGxhYmVsICYmIGxhYmVsLT5zaXplID09IHdvcmRfY291bnQpIHsKKwkJCQkvKiBKdXN0IHJlY29yZGluZyB0aGUgYWRkcmVzcy4gKi8KKwkJCQlsYWJlbC0+YWRkciA9IChzbGppdF91dyljb2RlX3B0cjsKKwkJCQlsYWJlbC0+c2l6ZSA9IGNvZGVfcHRyIC0gY29kZTsKKwkJCQlsYWJlbCA9IGxhYmVsLT5uZXh0OworCQkJfQorCQkJaWYgKGp1bXAgJiYganVtcC0+YWRkciA9PSB3b3JkX2NvdW50KSB7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ18zMiAmJiBTTEpJVF9DT05GSUdfUFBDXzMyKQorCQkJCWp1bXAtPmFkZHIgPSAoc2xqaXRfdXcpKGNvZGVfcHRyIC0gMyk7CisjZWxzZQorCQkJCWp1bXAtPmFkZHIgPSAoc2xqaXRfdXcpKGNvZGVfcHRyIC0gNik7CisjZW5kaWYKKwkJCQlpZiAoZGV0ZWN0X2p1bXBfdHlwZShqdW1wLCBjb2RlX3B0ciwgY29kZSkpIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzMyICYmIFNMSklUX0NPTkZJR19QUENfMzIpCisJCQkJCWNvZGVfcHRyWy0zXSA9IGNvZGVfcHRyWzBdOworCQkJCQljb2RlX3B0ciAtPSAzOworI2Vsc2UKKwkJCQkJaWYgKGp1bXAtPmZsYWdzICYgUEFUQ0hfQUJTMzIpIHsKKwkJCQkJCWNvZGVfcHRyIC09IDM7CisJCQkJCQljb2RlX3B0clstMV0gPSBjb2RlX3B0clsyXTsKKwkJCQkJCWNvZGVfcHRyWzBdID0gY29kZV9wdHJbM107CisJCQkJCX0KKwkJCQkJZWxzZSBpZiAoanVtcC0+ZmxhZ3MgJiBQQVRDSF9BQlM0OCkgeworCQkJCQkJY29kZV9wdHItLTsKKwkJCQkJCWNvZGVfcHRyWy0xXSA9IGNvZGVfcHRyWzBdOworCQkJCQkJY29kZV9wdHJbMF0gPSBjb2RlX3B0clsxXTsKKwkJCQkJCS8qIHJsZGljciByWCxyWCwzMiwzMSAtPiByWCxyWCwxNiw0NyAqLworCQkJCQkJU0xKSVRfQVNTRVJUKChjb2RlX3B0clstM10gJiAweGZjMDBmZmZmKSA9PSAweDc4MDAwN2M2KTsKKwkJCQkJCWNvZGVfcHRyWy0zXSBePSAweDg0MjI7CisJCQkJCQkvKiBvcmlzIC0+IG9yaSAqLworCQkJCQkJY29kZV9wdHJbLTJdIF49IDB4NDAwMDAwMDsKKwkJCQkJfQorCQkJCQllbHNlIHsKKwkJCQkJCWNvZGVfcHRyWy02XSA9IGNvZGVfcHRyWzBdOworCQkJCQkJY29kZV9wdHIgLT0gNjsKKwkJCQkJfQorI2VuZGlmCisJCQkJCWlmIChqdW1wLT5mbGFncyAmIFJFTU9WRV9DT05EKSB7CisJCQkJCQljb2RlX3B0clswXSA9IEJDeCB8ICgyIDw8IDIpIHwgKChjb2RlX3B0clswXSBeICg4IDw8IDIxKSkgJiAweDAzZmYwMDAxKTsKKwkJCQkJCWNvZGVfcHRyKys7CisJCQkJCQlqdW1wLT5hZGRyICs9IHNpemVvZihzbGppdF9pbnMpOworCQkJCQkJY29kZV9wdHJbMF0gPSBCeDsKKwkJCQkJCWp1bXAtPmZsYWdzIC09IElTX0NPTkQ7CisJCQkJCX0KKwkJCQl9CisJCQkJanVtcCA9IGp1bXAtPm5leHQ7CisJCQl9CisJCQlpZiAoY29uc3RfICYmIGNvbnN0Xy0+YWRkciA9PSB3b3JkX2NvdW50KSB7CisJCQkJY29uc3RfLT5hZGRyID0gKHNsaml0X3V3KWNvZGVfcHRyOworCQkJCWNvbnN0XyA9IGNvbnN0Xy0+bmV4dDsKKwkJCX0KKwkJCWNvZGVfcHRyICsrOworCQkJd29yZF9jb3VudCArKzsKKwkJfSB3aGlsZSAoYnVmX3B0ciA8IGJ1Zl9lbmQpOworCisJCWJ1ZiA9IGJ1Zi0+bmV4dDsKKwl9IHdoaWxlIChidWYpOworCisJaWYgKGxhYmVsICYmIGxhYmVsLT5zaXplID09IHdvcmRfY291bnQpIHsKKwkJbGFiZWwtPmFkZHIgPSAoc2xqaXRfdXcpY29kZV9wdHI7CisJCWxhYmVsLT5zaXplID0gY29kZV9wdHIgLSBjb2RlOworCQlsYWJlbCA9IGxhYmVsLT5uZXh0OworCX0KKworCVNMSklUX0FTU0VSVCghbGFiZWwpOworCVNMSklUX0FTU0VSVCghanVtcCk7CisJU0xKSVRfQVNTRVJUKCFjb25zdF8pOworI2lmIChkZWZpbmVkIFNMSklUX0lORElSRUNUX0NBTEwgJiYgU0xKSVRfSU5ESVJFQ1RfQ0FMTCkKKwlTTEpJVF9BU1NFUlQoY29kZV9wdHIgLSBjb2RlIDw9IChzbGppdF9zdyljb21waWxlci0+c2l6ZSAtIChzaXplb2Yoc3RydWN0IHNsaml0X2Z1bmN0aW9uX2NvbnRleHQpIC8gc2l6ZW9mKHNsaml0X2lucykpKTsKKyNlbHNlCisJU0xKSVRfQVNTRVJUKGNvZGVfcHRyIC0gY29kZSA8PSAoc2xqaXRfc3cpY29tcGlsZXItPnNpemUpOworI2VuZGlmCisKKwlqdW1wID0gY29tcGlsZXItPmp1bXBzOworCXdoaWxlIChqdW1wKSB7CisJCWRvIHsKKwkJCWFkZHIgPSAoanVtcC0+ZmxhZ3MgJiBKVU1QX0xBQkVMKSA/IGp1bXAtPnUubGFiZWwtPmFkZHIgOiBqdW1wLT51LnRhcmdldDsKKwkJCWJ1Zl9wdHIgPSAoc2xqaXRfaW5zKilqdW1wLT5hZGRyOworCQkJaWYgKGp1bXAtPmZsYWdzICYgUEFUQ0hfQikgeworCQkJCWlmIChqdW1wLT5mbGFncyAmIElTX0NPTkQpIHsKKwkJCQkJaWYgKCEoanVtcC0+ZmxhZ3MgJiBQQVRDSF9BQlNfQikpIHsKKwkJCQkJCWFkZHIgPSBhZGRyIC0ganVtcC0+YWRkcjsKKwkJCQkJCVNMSklUX0FTU0VSVCgoc2xqaXRfc3cpYWRkciA8PSAweDdmZmYgJiYgKHNsaml0X3N3KWFkZHIgPj0gLTB4ODAwMCk7CisJCQkJCQkqYnVmX3B0ciA9IEJDeCB8IChhZGRyICYgMHhmZmZjKSB8ICgoKmJ1Zl9wdHIpICYgMHgwM2ZmMDAwMSk7CisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQlTTEpJVF9BU1NFUlQoYWRkciA8PSAweGZmZmYpOworCQkJCQkJKmJ1Zl9wdHIgPSBCQ3ggfCAoYWRkciAmIDB4ZmZmYykgfCAweDIgfCAoKCpidWZfcHRyKSAmIDB4MDNmZjAwMDEpOworCQkJCQl9CisJCQkJfQorCQkJCWVsc2UgeworCQkJCQlpZiAoIShqdW1wLT5mbGFncyAmIFBBVENIX0FCU19CKSkgeworCQkJCQkJYWRkciA9IGFkZHIgLSBqdW1wLT5hZGRyOworCQkJCQkJU0xKSVRfQVNTRVJUKChzbGppdF9zdylhZGRyIDw9IDB4MDFmZmZmZmYgJiYgKHNsaml0X3N3KWFkZHIgPj0gLTB4MDIwMDAwMDApOworCQkJCQkJKmJ1Zl9wdHIgPSBCeCB8IChhZGRyICYgMHgwM2ZmZmZmYykgfCAoKCpidWZfcHRyKSAmIDB4MSk7CisJCQkJCX0KKwkJCQkJZWxzZSB7CisJCQkJCQlTTEpJVF9BU1NFUlQoYWRkciA8PSAweDAzZmZmZmZmKTsKKwkJCQkJCSpidWZfcHRyID0gQnggfCAoYWRkciAmIDB4MDNmZmZmZmMpIHwgMHgyIHwgKCgqYnVmX3B0cikgJiAweDEpOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJLyogU2V0IHRoZSBmaWVsZHMgb2YgaW1tZWRpYXRlIGxvYWRzLiAqLworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfMzIgJiYgU0xKSVRfQ09ORklHX1BQQ18zMikKKwkJCWJ1Zl9wdHJbMF0gPSAoYnVmX3B0clswXSAmIDB4ZmZmZjAwMDApIHwgKChhZGRyID4+IDE2KSAmIDB4ZmZmZik7CisJCQlidWZfcHRyWzFdID0gKGJ1Zl9wdHJbMV0gJiAweGZmZmYwMDAwKSB8IChhZGRyICYgMHhmZmZmKTsKKyNlbHNlCisJCQlpZiAoanVtcC0+ZmxhZ3MgJiBQQVRDSF9BQlMzMikgeworCQkJCVNMSklUX0FTU0VSVChhZGRyIDw9IDB4N2ZmZmZmZmYpOworCQkJCWJ1Zl9wdHJbMF0gPSAoYnVmX3B0clswXSAmIDB4ZmZmZjAwMDApIHwgKChhZGRyID4+IDE2KSAmIDB4ZmZmZik7CisJCQkJYnVmX3B0clsxXSA9IChidWZfcHRyWzFdICYgMHhmZmZmMDAwMCkgfCAoYWRkciAmIDB4ZmZmZik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoanVtcC0+ZmxhZ3MgJiBQQVRDSF9BQlM0OCkgeworCQkJCVNMSklUX0FTU0VSVChhZGRyIDw9IDB4N2ZmZmZmZmZmZmZmKTsKKwkJCQlidWZfcHRyWzBdID0gKGJ1Zl9wdHJbMF0gJiAweGZmZmYwMDAwKSB8ICgoYWRkciA+PiAzMikgJiAweGZmZmYpOworCQkJCWJ1Zl9wdHJbMV0gPSAoYnVmX3B0clsxXSAmIDB4ZmZmZjAwMDApIHwgKChhZGRyID4+IDE2KSAmIDB4ZmZmZik7CisJCQkJYnVmX3B0clszXSA9IChidWZfcHRyWzNdICYgMHhmZmZmMDAwMCkgfCAoYWRkciAmIDB4ZmZmZik7CisJCQkJYnJlYWs7CisJCQl9CisJCQlidWZfcHRyWzBdID0gKGJ1Zl9wdHJbMF0gJiAweGZmZmYwMDAwKSB8ICgoYWRkciA+PiA0OCkgJiAweGZmZmYpOworCQkJYnVmX3B0clsxXSA9IChidWZfcHRyWzFdICYgMHhmZmZmMDAwMCkgfCAoKGFkZHIgPj4gMzIpICYgMHhmZmZmKTsKKwkJCWJ1Zl9wdHJbM10gPSAoYnVmX3B0clszXSAmIDB4ZmZmZjAwMDApIHwgKChhZGRyID4+IDE2KSAmIDB4ZmZmZik7CisJCQlidWZfcHRyWzRdID0gKGJ1Zl9wdHJbNF0gJiAweGZmZmYwMDAwKSB8IChhZGRyICYgMHhmZmZmKTsKKyNlbmRpZgorCQl9IHdoaWxlICgwKTsKKwkJanVtcCA9IGp1bXAtPm5leHQ7CisJfQorCisJY29tcGlsZXItPmVycm9yID0gU0xKSVRfRVJSX0NPTVBJTEVEOworCWNvbXBpbGVyLT5leGVjdXRhYmxlX3NpemUgPSAoY29kZV9wdHIgLSBjb2RlKSAqIHNpemVvZihzbGppdF9pbnMpOworCVNMSklUX0NBQ0hFX0ZMVVNIKGNvZGUsIGNvZGVfcHRyKTsKKworI2lmIChkZWZpbmVkIFNMSklUX0lORElSRUNUX0NBTEwgJiYgU0xKSVRfSU5ESVJFQ1RfQ0FMTCkKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisJaWYgKCgoc2xqaXRfc3cpY29kZV9wdHIpICYgMHg0KQorCQljb2RlX3B0cisrOworCXNsaml0X3NldF9mdW5jdGlvbl9jb250ZXh0KE5VTEwsIChzdHJ1Y3Qgc2xqaXRfZnVuY3Rpb25fY29udGV4dCopY29kZV9wdHIsIChzbGppdF9zdyljb2RlLCAodm9pZCopc2xqaXRfZ2VuZXJhdGVfY29kZSk7CisJcmV0dXJuIGNvZGVfcHRyOworI2Vsc2UKKwlzbGppdF9zZXRfZnVuY3Rpb25fY29udGV4dChOVUxMLCAoc3RydWN0IHNsaml0X2Z1bmN0aW9uX2NvbnRleHQqKWNvZGVfcHRyLCAoc2xqaXRfc3cpY29kZSwgKHZvaWQqKXNsaml0X2dlbmVyYXRlX2NvZGUpOworCXJldHVybiBjb2RlX3B0cjsKKyNlbmRpZgorI2Vsc2UKKwlyZXR1cm4gY29kZTsKKyNlbmRpZgorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBFbnRyeSwgZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGlucF9mbGFnczogKi8KKworLyogQ3JlYXRlcyBhbiBpbmRleCBpbiBkYXRhX3RyYW5zZmVyX2luc3RzIGFycmF5LiAqLworI2RlZmluZSBMT0FEX0RBVEEJMHgwMQorI2RlZmluZSBJTkRFWEVECQkweDAyCisjZGVmaW5lIFdSSVRFX0JBQ0sJMHgwNAorI2RlZmluZSBXT1JEX0RBVEEJMHgwMAorI2RlZmluZSBCWVRFX0RBVEEJMHgwOAorI2RlZmluZSBIQUxGX0RBVEEJMHgxMAorI2RlZmluZSBJTlRfREFUQQkweDE4CisjZGVmaW5lIFNJR05FRF9EQVRBCTB4MjAKKy8qIFNlcGFyYXRlcyBpbnRlZ2VyIGFuZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1BSX1JFRwkJMHgzZgorI2RlZmluZSBET1VCTEVfREFUQQkweDQwCisKKyNkZWZpbmUgTUVNX01BU0sJMHg3ZgorCisvKiBPdGhlciBpbnBfZmxhZ3MuICovCisKKyNkZWZpbmUgQVJHX1RFU1QJMHgwMDAxMDAKKy8qIEludGVnZXIgb3BlcnRpb24gYW5kIHNldCBmbGFncyAtPiByZXF1aXJlcyBleHRzIG9uIDY0IGJpdCBzeXN0ZW1zLiAqLworI2RlZmluZSBBTFRfU0lHTl9FWFQJMHgwMDAyMDAKKy8qIFRoaXMgZmxhZyBhZmZlY3RzIHRoZSBSQygpIGFuZCBPRVJDKCkgbWFjcm9zLiAqLworI2RlZmluZSBBTFRfU0VUX0ZMQUdTCTB4MDAwNDAwCisjZGVmaW5lIEFMVF9LRUVQX0NBQ0hFCTB4MDAwODAwCisjZGVmaW5lIEFMVF9GT1JNMQkweDAxMDAwMAorI2RlZmluZSBBTFRfRk9STTIJMHgwMjAwMDAKKyNkZWZpbmUgQUxUX0ZPUk0zCTB4MDQwMDAwCisjZGVmaW5lIEFMVF9GT1JNNAkweDA4MDAwMAorI2RlZmluZSBBTFRfRk9STTUJMHgxMDAwMDAKKyNkZWZpbmUgQUxUX0ZPUk02CTB4MjAwMDAwCisKKy8qIFNvdXJjZSBhbmQgZGVzdGluYXRpb24gaXMgcmVnaXN0ZXIuICovCisjZGVmaW5lIFJFR19ERVNUCTB4MDAwMDAxCisjZGVmaW5lIFJFRzFfU09VUkNFCTB4MDAwMDAyCisjZGVmaW5lIFJFRzJfU09VUkNFCTB4MDAwMDA0CisvKiBnZXRwdXRfYXJnX2Zhc3QgcmV0dXJuZWQgdHJ1ZS4gKi8KKyNkZWZpbmUgRkFTVF9ERVNUCTB4MDAwMDA4CisvKiBNdWx0aXBsZSBpbnN0cnVjdGlvbnMgYXJlIHJlcXVpcmVkLiAqLworI2RlZmluZSBTTE9XX0RFU1QJMHgwMDAwMTAKKy8qCitBTFRfU0lHTl9FWFQJCTB4MDAwMjAwCitBTFRfU0VUX0ZMQUdTCQkweDAwMDQwMAorQUxUX0ZPUk0xCQkweDAxMDAwMAorLi4uCitBTFRfRk9STTYJCTB4MjAwMDAwICovCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzMyICYmIFNMSklUX0NPTkZJR19QUENfMzIpCisjaW5jbHVkZSAic2xqaXROYXRpdmVQUENfMzIuYyIKKyNlbHNlCisjaW5jbHVkZSAic2xqaXROYXRpdmVQUENfNjQuYyIKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ18zMiAmJiBTTEpJVF9DT05GSUdfUFBDXzMyKQorI2RlZmluZSBTVEFDS19TVE9SRQlTVFcKKyNkZWZpbmUgU1RBQ0tfTE9BRAlMV1oKKyNlbHNlCisjZGVmaW5lIFNUQUNLX1NUT1JFCVNURAorI2RlZmluZSBTVEFDS19MT0FECUxECisjZW5kaWYKKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKKwlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQoreworCXNsaml0X3NpIGksIHRtcCwgb2ZmczsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9lbnRlcihjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKKwlzZXRfZW1pdF9lbnRlcihjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpOworCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1GTFIgfCBEKDApKSk7CisJb2ZmcyA9IC0oc2xqaXRfc2kpKHNpemVvZihzbGppdF9zdykpOworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVEFDS19TVE9SRSB8IFMoVE1QX1pFUk8pIHwgQShTTEpJVF9TUCkgfCBJTU0ob2ZmcykpKTsKKworCXRtcCA9IHNhdmVkcyA8IFNMSklUX05VTUJFUl9PRl9TQVZFRF9SRUdJU1RFUlMgPyAoU0xKSVRfUzAgKyAxIC0gc2F2ZWRzKSA6IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsKKwlmb3IgKGkgPSBTTEpJVF9TMDsgaSA+PSB0bXA7IGktLSkgeworCQlvZmZzIC09IChzbGppdF9zaSkoc2l6ZW9mKHNsaml0X3N3KSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVEFDS19TVE9SRSB8IFMoaSkgfCBBKFNMSklUX1NQKSB8IElNTShvZmZzKSkpOworCX0KKworCWZvciAoaSA9IHNjcmF0Y2hlczsgaSA+PSBTTEpJVF9GSVJTVF9TQVZFRF9SRUc7IGktLSkgeworCQlvZmZzIC09IChzbGppdF9zaSkoc2l6ZW9mKHNsaml0X3N3KSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVEFDS19TVE9SRSB8IFMoaSkgfCBBKFNMSklUX1NQKSB8IElNTShvZmZzKSkpOworCX0KKworCVNMSklUX0FTU0VSVChvZmZzID09IC0oc2xqaXRfc2kpR0VUX1NBVkVEX1JFR0lTVEVSU19TSVpFKGNvbXBpbGVyLT5zY3JhdGNoZXMsIGNvbXBpbGVyLT5zYXZlZHMsIDEpKTsKKworI2lmIChkZWZpbmVkIFNMSklUX1BQQ19TVEFDS19GUkFNRV9WMiAmJiBTTEpJVF9QUENfU1RBQ0tfRlJBTUVfVjIpCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUQUNLX1NUT1JFIHwgUygwKSB8IEEoU0xKSVRfU1ApIHwgSU1NKDIgKiBzaXplb2Yoc2xqaXRfc3cpKSkpOworI2Vsc2UKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RBQ0tfU1RPUkUgfCBTKDApIHwgQShTTEpJVF9TUCkgfCBJTU0oc2l6ZW9mKHNsaml0X3N3KSkpKTsKKyNlbmRpZgorCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFEREkgfCBEKFRNUF9aRVJPKSB8IEEoMCkgfCAwKSk7CisJaWYgKGFyZ3MgPj0gMSkKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgUyhTTEpJVF9SMCkgfCBBKFNMSklUX1MwKSB8IEIoU0xKSVRfUjApKSk7CisJaWYgKGFyZ3MgPj0gMikKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgUyhTTEpJVF9SMSkgfCBBKFNMSklUX1MxKSB8IEIoU0xKSVRfUjEpKSk7CisJaWYgKGFyZ3MgPj0gMykKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgUyhTTEpJVF9SMikgfCBBKFNMSklUX1MyKSB8IEIoU0xKSVRfUjIpKSk7CisKKwlsb2NhbF9zaXplICs9IEdFVF9TQVZFRF9SRUdJU1RFUlNfU0laRShzY3JhdGNoZXMsIHNhdmVkcywgMSkgKyBTTEpJVF9MT0NBTFNfT0ZGU0VUOworCWxvY2FsX3NpemUgPSAobG9jYWxfc2l6ZSArIDE1KSAmIH4weGY7CisJY29tcGlsZXItPmxvY2FsX3NpemUgPSBsb2NhbF9zaXplOworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ18zMiAmJiBTTEpJVF9DT05GSUdfUFBDXzMyKQorCWlmIChsb2NhbF9zaXplIDw9IFNJTU1fTUFYKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RXVSB8IFMoU0xKSVRfU1ApIHwgQShTTEpJVF9TUCkgfCBJTU0oLWxvY2FsX3NpemUpKSk7CisJZWxzZSB7CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIDAsIC1sb2NhbF9zaXplKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVFdVWCB8IFMoU0xKSVRfU1ApIHwgQShTTEpJVF9TUCkgfCBCKDApKSk7CisJfQorI2Vsc2UKKwlpZiAobG9jYWxfc2l6ZSA8PSBTSU1NX01BWCkKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNURFUgfCBTKFNMSklUX1NQKSB8IEEoU0xKSVRfU1ApIHwgSU1NKC1sb2NhbF9zaXplKSkpOworCWVsc2UgeworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCAwLCAtbG9jYWxfc2l6ZSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1REVVggfCBTKFNMSklUX1NQKSB8IEEoU0xKSVRfU1ApIHwgQigwKSkpOworCX0KKyNlbmRpZgorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAorCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9zZXRfY29udGV4dChjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKKwlzZXRfc2V0X2NvbnRleHQoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKTsKKworCWxvY2FsX3NpemUgKz0gR0VUX1NBVkVEX1JFR0lTVEVSU19TSVpFKHNjcmF0Y2hlcywgc2F2ZWRzLCAxKSArIFNMSklUX0xPQ0FMU19PRkZTRVQ7CisJY29tcGlsZXItPmxvY2FsX3NpemUgPSAobG9jYWxfc2l6ZSArIDE1KSAmIH4weGY7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXNsaml0X3NpIGksIHRtcCwgb2ZmczsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9yZXR1cm4oY29tcGlsZXIsIG9wLCBzcmMsIHNyY3cpKTsKKworCUZBSUxfSUYoZW1pdF9tb3ZfYmVmb3JlX3JldHVybihjb21waWxlciwgb3AsIHNyYywgc3JjdykpOworCisJaWYgKGNvbXBpbGVyLT5sb2NhbF9zaXplIDw9IFNJTU1fTUFYKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESSB8IEQoU0xKSVRfU1ApIHwgQShTTEpJVF9TUCkgfCBJTU0oY29tcGlsZXItPmxvY2FsX3NpemUpKSk7CisJZWxzZSB7CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIDAsIGNvbXBpbGVyLT5sb2NhbF9zaXplKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBREQgfCBEKFNMSklUX1NQKSB8IEEoU0xKSVRfU1ApIHwgQigwKSkpOworCX0KKworI2lmIChkZWZpbmVkIFNMSklUX1BQQ19TVEFDS19GUkFNRV9WMiAmJiBTTEpJVF9QUENfU1RBQ0tfRlJBTUVfVjIpCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUQUNLX0xPQUQgfCBEKDApIHwgQShTTEpJVF9TUCkgfCBJTU0oMiAqIHNpemVvZihzbGppdF9zdykpKSk7CisjZWxzZQorCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVEFDS19MT0FEIHwgRCgwKSB8IEEoU0xKSVRfU1ApIHwgSU1NKHNpemVvZihzbGppdF9zdykpKSk7CisjZW5kaWYKKworCW9mZnMgPSAtKHNsaml0X3NpKUdFVF9TQVZFRF9SRUdJU1RFUlNfU0laRShjb21waWxlci0+c2NyYXRjaGVzLCBjb21waWxlci0+c2F2ZWRzLCAxKTsKKworCXRtcCA9IGNvbXBpbGVyLT5zY3JhdGNoZXM7CisJZm9yIChpID0gU0xKSVRfRklSU1RfU0FWRURfUkVHOyBpIDw9IHRtcDsgaSsrKSB7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVEFDS19MT0FEIHwgRChpKSB8IEEoU0xKSVRfU1ApIHwgSU1NKG9mZnMpKSk7CisJCW9mZnMgKz0gKHNsaml0X3NpKShzaXplb2Yoc2xqaXRfc3cpKTsKKwl9CisKKwl0bXAgPSBjb21waWxlci0+c2F2ZWRzIDwgU0xKSVRfTlVNQkVSX09GX1NBVkVEX1JFR0lTVEVSUyA/IChTTEpJVF9TMCArIDEgLSBjb21waWxlci0+c2F2ZWRzKSA6IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsKKwlmb3IgKGkgPSB0bXA7IGkgPD0gU0xKSVRfUzA7IGkrKykgeworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1RBQ0tfTE9BRCB8IEQoaSkgfCBBKFNMSklUX1NQKSB8IElNTShvZmZzKSkpOworCQlvZmZzICs9IChzbGppdF9zaSkoc2l6ZW9mKHNsaml0X3N3KSk7CisJfQorCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNUQUNLX0xPQUQgfCBEKFRNUF9aRVJPKSB8IEEoU0xKSVRfU1ApIHwgSU1NKG9mZnMpKSk7CisJU0xKSVRfQVNTRVJUKG9mZnMgPT0gLShzbGppdF9zdykoc2l6ZW9mKHNsaml0X3N3KSkpOworCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1UTFIgfCBTKDApKSk7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEJMUikpOworCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKKyN1bmRlZiBTVEFDS19TVE9SRQorI3VuZGVmIFNUQUNLX0xPQUQKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgT3BlcmF0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBpL3ggLSBpbW1lZGlhdGUvaW5kZXhlZCBmb3JtCisgICBuL3cgLSBubyB3cml0ZS1iYWNrIC8gd3JpdGUtYmFjayAoMSBiaXQpCisgICBzL2wgLSBzdG9yZS9sb2FkICgxIGJpdCkKKyAgIHUvcyAtIHNpZ25lZC91bnNpZ25lZCAoMSBiaXQpCisgICB3L2IvaC9pIC0gd29yZC9ieXRlL2hhbGYvaW50IGFsbG93ZWQgKDIgYml0KQorICAgSXQgY29udGFucyAzMiBpdGVtcywgYnV0IG5vdCBhbGwgYXJlIGRpZmZlcmVudC4gKi8KKworLyogNjQgYml0IG9ubHk6IFtyZWcraW1tXSBtdXN0IGJlIGFsaWduZWQgdG8gNCBieXRlcy4gKi8KKyNkZWZpbmUgSU5UX0FMSUdORUQJMHgxMDAwMAorLyogNjQtYml0IG9ubHk6IHRoZXJlIGlzIG5vIGx3YXUgaW5zdHJ1Y3Rpb24uICovCisjZGVmaW5lIFVQREFURV9SRVEJMHgyMDAwMAorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ18zMiAmJiBTTEpJVF9DT05GSUdfUFBDXzMyKQorI2RlZmluZSBBUkNIXzMyXzY0KGEsIGIpCWEKKyNkZWZpbmUgSU5TVF9DT0RFX0FORF9EU1QoaW5zdCwgZmxhZ3MsIHJlZykgXAorCSgoaW5zdCkgfCAoKChmbGFncykgJiBNRU1fTUFTSykgPD0gR1BSX1JFRyA/IEQocmVnKSA6IEZEKHJlZykpKQorI2Vsc2UKKyNkZWZpbmUgQVJDSF8zMl82NChhLCBiKQliCisjZGVmaW5lIElOU1RfQ09ERV9BTkRfRFNUKGluc3QsIGZsYWdzLCByZWcpIFwKKwkoKChpbnN0KSAmIH4oSU5UX0FMSUdORUQgfCBVUERBVEVfUkVRKSkgfCAoKChmbGFncykgJiBNRU1fTUFTSykgPD0gR1BSX1JFRyA/IEQocmVnKSA6IEZEKHJlZykpKQorI2VuZGlmCisKK3N0YXRpYyBTTEpJVF9DT05TVCBzbGppdF9pbnMgZGF0YV90cmFuc2Zlcl9pbnN0c1s2NCArIDhdID0geworCisvKiAtLS0tLS0tLSBVbnNpZ25lZCAtLS0tLS0tLSAqLworCisvKiBXb3JkLiAqLworCisvKiB1IHcgbiBpIHMgKi8gQVJDSF8zMl82NChISSgzNikgLyogc3R3ICovLCBISSg2MikgfCBJTlRfQUxJR05FRCB8IDB4MCAvKiBzdGQgKi8pLAorLyogdSB3IG4gaSBsICovIEFSQ0hfMzJfNjQoSEkoMzIpIC8qIGx3eiAqLywgSEkoNTgpIHwgSU5UX0FMSUdORUQgfCAweDAgLyogbGQgKi8pLAorLyogdSB3IG4geCBzICovIEFSQ0hfMzJfNjQoSEkoMzEpIHwgTE8oMTUxKSAvKiBzdHd4ICovLCBISSgzMSkgfCBMTygxNDkpIC8qIHN0ZHggKi8pLAorLyogdSB3IG4geCBsICovIEFSQ0hfMzJfNjQoSEkoMzEpIHwgTE8oMjMpIC8qIGx3enggKi8sIEhJKDMxKSB8IExPKDIxKSAvKiBsZHggKi8pLAorCisvKiB1IHcgdyBpIHMgKi8gQVJDSF8zMl82NChISSgzNykgLyogc3R3dSAqLywgSEkoNjIpIHwgSU5UX0FMSUdORUQgfCAweDEgLyogc3RkdSAqLyksCisvKiB1IHcgdyBpIGwgKi8gQVJDSF8zMl82NChISSgzMykgLyogbHd6dSAqLywgSEkoNTgpIHwgSU5UX0FMSUdORUQgfCAweDEgLyogbGR1ICovKSwKKy8qIHUgdyB3IHggcyAqLyBBUkNIXzMyXzY0KEhJKDMxKSB8IExPKDE4MykgLyogc3R3dXggKi8sIEhJKDMxKSB8IExPKDE4MSkgLyogc3RkdXggKi8pLAorLyogdSB3IHcgeCBsICovIEFSQ0hfMzJfNjQoSEkoMzEpIHwgTE8oNTUpIC8qIGx3enV4ICovLCBISSgzMSkgfCBMTyg1MykgLyogbGR1eCAqLyksCisKKy8qIEJ5dGUuICovCisKKy8qIHUgYiBuIGkgcyAqLyBISSgzOCkgLyogc3RiICovLCAKKy8qIHUgYiBuIGkgbCAqLyBISSgzNCkgLyogbGJ6ICovLAorLyogdSBiIG4geCBzICovIEhJKDMxKSB8IExPKDIxNSkgLyogc3RieCAqLywKKy8qIHUgYiBuIHggbCAqLyBISSgzMSkgfCBMTyg4NykgLyogbGJ6eCAqLywKKworLyogdSBiIHcgaSBzICovIEhJKDM5KSAvKiBzdGJ1ICovLAorLyogdSBiIHcgaSBsICovIEhJKDM1KSAvKiBsYnp1ICovLAorLyogdSBiIHcgeCBzICovIEhJKDMxKSB8IExPKDI0NykgLyogc3RidXggKi8sCisvKiB1IGIgdyB4IGwgKi8gSEkoMzEpIHwgTE8oMTE5KSAvKiBsYnp1eCAqLywKKworLyogSGFsZi4gKi8KKworLyogdSBoIG4gaSBzICovIEhJKDQ0KSAvKiBzdGggKi8sCisvKiB1IGggbiBpIGwgKi8gSEkoNDApIC8qIGxoeiAqLywKKy8qIHUgaCBuIHggcyAqLyBISSgzMSkgfCBMTyg0MDcpIC8qIHN0aHggKi8sCisvKiB1IGggbiB4IGwgKi8gSEkoMzEpIHwgTE8oMjc5KSAvKiBsaHp4ICovLAorCisvKiB1IGggdyBpIHMgKi8gSEkoNDUpIC8qIHN0aHUgKi8sCisvKiB1IGggdyBpIGwgKi8gSEkoNDEpIC8qIGxoenUgKi8sCisvKiB1IGggdyB4IHMgKi8gSEkoMzEpIHwgTE8oNDM5KSAvKiBzdGh1eCAqLywKKy8qIHUgaCB3IHggbCAqLyBISSgzMSkgfCBMTygzMTEpIC8qIGxoenV4ICovLAorCisvKiBJbnQuICovCisKKy8qIHUgaSBuIGkgcyAqLyBISSgzNikgLyogc3R3ICovLAorLyogdSBpIG4gaSBsICovIEhJKDMyKSAvKiBsd3ogKi8sCisvKiB1IGkgbiB4IHMgKi8gSEkoMzEpIHwgTE8oMTUxKSAvKiBzdHd4ICovLAorLyogdSBpIG4geCBsICovIEhJKDMxKSB8IExPKDIzKSAvKiBsd3p4ICovLAorCisvKiB1IGkgdyBpIHMgKi8gSEkoMzcpIC8qIHN0d3UgKi8sCisvKiB1IGkgdyBpIGwgKi8gSEkoMzMpIC8qIGx3enUgKi8sCisvKiB1IGkgdyB4IHMgKi8gSEkoMzEpIHwgTE8oMTgzKSAvKiBzdHd1eCAqLywKKy8qIHUgaSB3IHggbCAqLyBISSgzMSkgfCBMTyg1NSkgLyogbHd6dXggKi8sCisKKy8qIC0tLS0tLS0tIFNpZ25lZCAtLS0tLS0tLSAqLworCisvKiBXb3JkLiAqLworCisvKiBzIHcgbiBpIHMgKi8gQVJDSF8zMl82NChISSgzNikgLyogc3R3ICovLCBISSg2MikgfCBJTlRfQUxJR05FRCB8IDB4MCAvKiBzdGQgKi8pLAorLyogcyB3IG4gaSBsICovIEFSQ0hfMzJfNjQoSEkoMzIpIC8qIGx3eiAqLywgSEkoNTgpIHwgSU5UX0FMSUdORUQgfCAweDAgLyogbGQgKi8pLAorLyogcyB3IG4geCBzICovIEFSQ0hfMzJfNjQoSEkoMzEpIHwgTE8oMTUxKSAvKiBzdHd4ICovLCBISSgzMSkgfCBMTygxNDkpIC8qIHN0ZHggKi8pLAorLyogcyB3IG4geCBsICovIEFSQ0hfMzJfNjQoSEkoMzEpIHwgTE8oMjMpIC8qIGx3enggKi8sIEhJKDMxKSB8IExPKDIxKSAvKiBsZHggKi8pLAorCisvKiBzIHcgdyBpIHMgKi8gQVJDSF8zMl82NChISSgzNykgLyogc3R3dSAqLywgSEkoNjIpIHwgSU5UX0FMSUdORUQgfCAweDEgLyogc3RkdSAqLyksCisvKiBzIHcgdyBpIGwgKi8gQVJDSF8zMl82NChISSgzMykgLyogbHd6dSAqLywgSEkoNTgpIHwgSU5UX0FMSUdORUQgfCAweDEgLyogbGR1ICovKSwKKy8qIHMgdyB3IHggcyAqLyBBUkNIXzMyXzY0KEhJKDMxKSB8IExPKDE4MykgLyogc3R3dXggKi8sIEhJKDMxKSB8IExPKDE4MSkgLyogc3RkdXggKi8pLAorLyogcyB3IHcgeCBsICovIEFSQ0hfMzJfNjQoSEkoMzEpIHwgTE8oNTUpIC8qIGx3enV4ICovLCBISSgzMSkgfCBMTyg1MykgLyogbGR1eCAqLyksCisKKy8qIEJ5dGUuICovCisKKy8qIHMgYiBuIGkgcyAqLyBISSgzOCkgLyogc3RiICovLAorLyogcyBiIG4gaSBsICovIEhJKDM0KSAvKiBsYnogKi8gLyogRVhUU19SRVEgKi8sCisvKiBzIGIgbiB4IHMgKi8gSEkoMzEpIHwgTE8oMjE1KSAvKiBzdGJ4ICovLAorLyogcyBiIG4geCBsICovIEhJKDMxKSB8IExPKDg3KSAvKiBsYnp4ICovIC8qIEVYVFNfUkVRICovLAorCisvKiBzIGIgdyBpIHMgKi8gSEkoMzkpIC8qIHN0YnUgKi8sCisvKiBzIGIgdyBpIGwgKi8gSEkoMzUpIC8qIGxienUgKi8gLyogRVhUU19SRVEgKi8sCisvKiBzIGIgdyB4IHMgKi8gSEkoMzEpIHwgTE8oMjQ3KSAvKiBzdGJ1eCAqLywKKy8qIHMgYiB3IHggbCAqLyBISSgzMSkgfCBMTygxMTkpIC8qIGxienV4ICovIC8qIEVYVFNfUkVRICovLAorCisvKiBIYWxmLiAqLworCisvKiBzIGggbiBpIHMgKi8gSEkoNDQpIC8qIHN0aCAqLywKKy8qIHMgaCBuIGkgbCAqLyBISSg0MikgLyogbGhhICovLAorLyogcyBoIG4geCBzICovIEhJKDMxKSB8IExPKDQwNykgLyogc3RoeCAqLywKKy8qIHMgaCBuIHggbCAqLyBISSgzMSkgfCBMTygzNDMpIC8qIGxoYXggKi8sCisKKy8qIHMgaCB3IGkgcyAqLyBISSg0NSkgLyogc3RodSAqLywKKy8qIHMgaCB3IGkgbCAqLyBISSg0MykgLyogbGhhdSAqLywKKy8qIHMgaCB3IHggcyAqLyBISSgzMSkgfCBMTyg0MzkpIC8qIHN0aHV4ICovLAorLyogcyBoIHcgeCBsICovIEhJKDMxKSB8IExPKDM3NSkgLyogbGhhdXggKi8sCisKKy8qIEludC4gKi8KKworLyogcyBpIG4gaSBzICovIEhJKDM2KSAvKiBzdHcgKi8sCisvKiBzIGkgbiBpIGwgKi8gQVJDSF8zMl82NChISSgzMikgLyogbHd6ICovLCBISSg1OCkgfCBJTlRfQUxJR05FRCB8IDB4MiAvKiBsd2EgKi8pLAorLyogcyBpIG4geCBzICovIEhJKDMxKSB8IExPKDE1MSkgLyogc3R3eCAqLywKKy8qIHMgaSBuIHggbCAqLyBBUkNIXzMyXzY0KEhJKDMxKSB8IExPKDIzKSAvKiBsd3p4ICovLCBISSgzMSkgfCBMTygzNDEpIC8qIGx3YXggKi8pLAorCisvKiBzIGkgdyBpIHMgKi8gSEkoMzcpIC8qIHN0d3UgKi8sCisvKiBzIGkgdyBpIGwgKi8gQVJDSF8zMl82NChISSgzMykgLyogbHd6dSAqLywgSEkoNTgpIHwgSU5UX0FMSUdORUQgfCBVUERBVEVfUkVRIHwgMHgyIC8qIGx3YSAqLyksCisvKiBzIGkgdyB4IHMgKi8gSEkoMzEpIHwgTE8oMTgzKSAvKiBzdHd1eCAqLywKKy8qIHMgaSB3IHggbCAqLyBBUkNIXzMyXzY0KEhJKDMxKSB8IExPKDU1KSAvKiBsd3p1eCAqLywgSEkoMzEpIHwgTE8oMzczKSAvKiBsd2F1eCAqLyksCisKKy8qIC0tLS0tLS0tIERvdWJsZSAtLS0tLS0tLSAqLworCisvKiBkICAgbiBpIHMgKi8gSEkoNTQpIC8qIHN0ZmQgKi8sCisvKiBkICAgbiBpIGwgKi8gSEkoNTApIC8qIGxmZCAqLywKKy8qIGQgICBuIHggcyAqLyBISSgzMSkgfCBMTyg3MjcpIC8qIHN0ZmR4ICovLAorLyogZCAgIG4geCBsICovIEhJKDMxKSB8IExPKDU5OSkgLyogbGZkeCAqLywKKworLyogcyAgIG4gaSBzICovIEhJKDUyKSAvKiBzdGZzICovLAorLyogcyAgIG4gaSBsICovIEhJKDQ4KSAvKiBsZnMgKi8sCisvKiBzICAgbiB4IHMgKi8gSEkoMzEpIHwgTE8oNjYzKSAvKiBzdGZzeCAqLywKKy8qIHMgICBuIHggbCAqLyBISSgzMSkgfCBMTyg1MzUpIC8qIGxmc3ggKi8sCisKK307CisKKyN1bmRlZiBBUkNIXzMyXzY0CisKKy8qIFNpbXBsZSBjYXNlcywgKG5vIGNhY2hpbmcgaXMgcmVxdWlyZWQpLiAqLworc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmdfZmFzdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBpbnBfZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3KQoreworCXNsaml0X2lucyBpbnN0OworCisJLyogU2hvdWxkIHdvcmsgd2hlbiAoYXJnICYgUkVHX01BU0spID09IDAuICovCisJU0xKSVRfQ09NUElMRV9BU1NFUlQoQSgwKSA9PSAwLCBhMF9tdXN0X2JlXzApOworCVNMSklUX0FTU0VSVChhcmcgJiBTTEpJVF9NRU0pOworCisJaWYgKGFyZyAmIE9GRlNfUkVHX01BU0spIHsKKwkJaWYgKGFyZ3cgJiAweDMpCisJCQlyZXR1cm4gMDsKKwkJaWYgKGlucF9mbGFncyAmIEFSR19URVNUKQorCQkJcmV0dXJuIDE7CisKKwkJaW5zdCA9IGRhdGFfdHJhbnNmZXJfaW5zdHNbKGlucF9mbGFncyB8IElOREVYRUQpICYgTUVNX01BU0tdOworCQlTTEpJVF9BU1NFUlQoIShpbnN0ICYgKElOVF9BTElHTkVEIHwgVVBEQVRFX1JFUSkpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIElOU1RfQ09ERV9BTkRfRFNUKGluc3QsIGlucF9mbGFncywgcmVnKSB8IEEoYXJnICYgUkVHX01BU0spIHwgQihPRkZTX1JFRyhhcmcpKSkpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKFNMSklUX1VOTElLRUxZKCEoYXJnICYgUkVHX01BU0spKSkKKwkJaW5wX2ZsYWdzICY9IH5XUklURV9CQUNLOworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorCWluc3QgPSBkYXRhX3RyYW5zZmVyX2luc3RzW2lucF9mbGFncyAmIE1FTV9NQVNLXTsKKwlTTEpJVF9BU1NFUlQoKGFyZyAmIFJFR19NQVNLKSB8fCAhKGluc3QgJiBVUERBVEVfUkVRKSk7CisKKwlpZiAoYXJndyA+IFNJTU1fTUFYIHx8IGFyZ3cgPCBTSU1NX01JTiB8fCAoKGluc3QgJiBJTlRfQUxJR05FRCkgJiYgKGFyZ3cgJiAweDMpKSB8fCAoaW5zdCAmIFVQREFURV9SRVEpKQorCQlyZXR1cm4gMDsKKwlpZiAoaW5wX2ZsYWdzICYgQVJHX1RFU1QpCisJCXJldHVybiAxOworI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzMyICYmIFNMSklUX0NPTkZJR19QUENfMzIpCisJaWYgKGFyZ3cgPiBTSU1NX01BWCB8fCBhcmd3IDwgU0lNTV9NSU4pCisJCXJldHVybiAwOworCWlmIChpbnBfZmxhZ3MgJiBBUkdfVEVTVCkKKwkJcmV0dXJuIDE7CisKKwlpbnN0ID0gZGF0YV90cmFuc2Zlcl9pbnN0c1tpbnBfZmxhZ3MgJiBNRU1fTUFTS107CisJU0xKSVRfQVNTRVJUKCEoaW5zdCAmIChJTlRfQUxJR05FRCB8IFVQREFURV9SRVEpKSk7CisjZW5kaWYKKworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBJTlNUX0NPREVfQU5EX0RTVChpbnN0LCBpbnBfZmxhZ3MsIHJlZykgfCBBKGFyZyAmIFJFR19NQVNLKSB8IElNTShhcmd3KSkpOworCXJldHVybiAtMTsKK30KKworLyogU2VlIGdldHB1dF9hcmcgYmVsb3cuCisgICBOb3RlOiBjYW5fY2FjaGUgaXMgY2FsbGVkIG9ubHkgZm9yIGJpbmFyeSBvcGVyYXRvcnMuIFRob3NlIG9wZXJhdG9yIGFsd2F5cworICAgdXNlcyB3b3JkIGFyZ3VtZW50cyB3aXRob3V0IHdyaXRlIGJhY2suICovCitzdGF0aWMgc2xqaXRfc2kgY2FuX2NhY2hlKHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfc2kgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKK3sKKwlzbGppdF9zdyBoaWdoX3Nob3J0LCBuZXh0X2hpZ2hfc2hvcnQ7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorCXNsaml0X3N3IGRpZmY7CisjZW5kaWYKKworCVNMSklUX0FTU0VSVCgoYXJnICYgU0xKSVRfTUVNKSAmJiAobmV4dF9hcmcgJiBTTEpJVF9NRU0pKTsKKworCWlmIChhcmcgJiBPRkZTX1JFR19NQVNLKQorCQlyZXR1cm4gKChhcmcgJiBPRkZTX1JFR19NQVNLKSA9PSAobmV4dF9hcmcgJiBPRkZTX1JFR19NQVNLKSAmJiAoYXJndyAmIDB4MykgPT0gKG5leHRfYXJndyAmIDB4MykpOworCisJaWYgKG5leHRfYXJnICYgT0ZGU19SRUdfTUFTSykKKwkJcmV0dXJuIDA7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzMyICYmIFNMSklUX0NPTkZJR19QUENfMzIpCisJaGlnaF9zaG9ydCA9IChhcmd3ICsgKChhcmd3ICYgMHg4MDAwKSA8PCAxKSkgJiB+MHhmZmZmOworCW5leHRfaGlnaF9zaG9ydCA9IChuZXh0X2FyZ3cgKyAoKG5leHRfYXJndyAmIDB4ODAwMCkgPDwgMSkpICYgfjB4ZmZmZjsKKwlyZXR1cm4gaGlnaF9zaG9ydCA9PSBuZXh0X2hpZ2hfc2hvcnQ7CisjZWxzZQorCWlmIChhcmd3IDw9IDB4N2ZmZmZmZmZsICYmIGFyZ3cgPj0gLTB4ODAwMDAwMDBsKSB7CisJCWhpZ2hfc2hvcnQgPSAoYXJndyArICgoYXJndyAmIDB4ODAwMCkgPDwgMSkpICYgfjB4ZmZmZjsKKwkJbmV4dF9oaWdoX3Nob3J0ID0gKG5leHRfYXJndyArICgobmV4dF9hcmd3ICYgMHg4MDAwKSA8PCAxKSkgJiB+MHhmZmZmOworCQlpZiAoaGlnaF9zaG9ydCA9PSBuZXh0X2hpZ2hfc2hvcnQpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlkaWZmID0gYXJndyAtIG5leHRfYXJndzsKKwlpZiAoIShhcmcgJiBSRUdfTUFTSykpCisJCXJldHVybiBkaWZmIDw9IFNJTU1fTUFYICYmIGRpZmYgPj0gU0lNTV9NSU47CisKKwlpZiAoYXJnID09IG5leHRfYXJnICYmIGRpZmYgPD0gU0lNTV9NQVggJiYgZGlmZiA+PSBTSU1NX01JTikKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorI2RlZmluZSBBREpVU1RfQ0FDSEVEX0lNTShpbW0pIFwKKwlpZiAoKGluc3QgJiBJTlRfQUxJR05FRCkgJiYgKGltbSAmIDB4MykpIHsgXAorCQkvKiBBZGp1c3QgY2FjaGVkIHZhbHVlLiBGb3J0dW5hdGVseSB0aGlzIGlzIHJlYWxseSBhIHJhcmUgY2FzZSAqLyBcCisJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ICs9IGltbSAmIDB4MzsgXAorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESSB8IEQoVE1QX1JFRzMpIHwgQShUTVBfUkVHMykgfCAoaW1tICYgMHgzKSkpOyBcCisJCWltbSAmPSB+MHgzOyBcCisJfQorI2VuZGlmCisKKy8qIEVtaXQgdGhlIG5lY2Vzc2FyeSBpbnN0cnVjdGlvbnMuIFNlZSBjYW5fY2FjaGUgYWJvdmUuICovCitzdGF0aWMgc2xqaXRfc2kgZ2V0cHV0X2FyZyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBpbnBfZmxhZ3MsIHNsaml0X3NpIHJlZywgc2xqaXRfc2kgYXJnLCBzbGppdF9zdyBhcmd3LCBzbGppdF9zaSBuZXh0X2FyZywgc2xqaXRfc3cgbmV4dF9hcmd3KQoreworCXNsaml0X3NpIHRtcF9yOworCXNsaml0X2lucyBpbnN0OworCXNsaml0X3N3IGhpZ2hfc2hvcnQsIG5leHRfaGlnaF9zaG9ydDsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisJc2xqaXRfc3cgZGlmZjsKKyNlbmRpZgorCisJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CisKKwl0bXBfciA9ICgoaW5wX2ZsYWdzICYgTE9BRF9EQVRBKSAmJiAoKGlucF9mbGFncykgJiBNRU1fTUFTSykgPD0gR1BSX1JFRykgPyByZWcgOiBUTVBfUkVHMTsKKwkvKiBTcGVjaWFsIGNhc2UgZm9yICJtb3YgcmVnLCBbcmVnLCAuLi4gXSIuICovCisJaWYgKChhcmcgJiBSRUdfTUFTSykgPT0gdG1wX3IpCisJCXRtcF9yID0gVE1QX1JFRzE7CisKKwlpZiAoU0xKSVRfVU5MSUtFTFkoYXJnICYgT0ZGU19SRUdfTUFTSykpIHsKKwkJYXJndyAmPSAweDM7CisJCS8qIE90aGVyd2lzZSBnZXRwdXRfYXJnX2Zhc3Qgd291bGQgY2FwdHVyZSBpdC4gKi8KKwkJU0xKSVRfQVNTRVJUKGFyZ3cpOworCisJCWlmICgoU0xKSVRfTUVNIHwgKGFyZyAmIE9GRlNfUkVHX01BU0spKSA9PSBjb21waWxlci0+Y2FjaGVfYXJnICYmIGFyZ3cgPT0gY29tcGlsZXItPmNhY2hlX2FyZ3cpCisJCQl0bXBfciA9IFRNUF9SRUczOworCQllbHNlIHsKKwkJCWlmICgoYXJnICYgT0ZGU19SRUdfTUFTSykgPT0gKG5leHRfYXJnICYgT0ZGU19SRUdfTUFTSykgJiYgYXJndyA9PSAobmV4dF9hcmd3ICYgMHgzKSkgeworCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBTTEpJVF9NRU0gfCAoYXJnICYgT0ZGU19SRUdfTUFTSyk7CisJCQkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCQkJCXRtcF9yID0gVE1QX1JFRzM7CisJCQl9CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ18zMiAmJiBTTEpJVF9DT05GSUdfUFBDXzMyKQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFJMV0lOTSB8IFMoT0ZGU19SRUcoYXJnKSkgfCBBKHRtcF9yKSB8IChhcmd3IDw8IDExKSB8ICgoMzEgLSBhcmd3KSA8PCAxKSkpOworI2Vsc2UKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBSTERJKHRtcF9yLCBPRkZTX1JFRyhhcmcpLCBhcmd3LCA2MyAtIGFyZ3csIDEpKSk7CisjZW5kaWYKKwkJfQorCQlpbnN0ID0gZGF0YV90cmFuc2Zlcl9pbnN0c1soaW5wX2ZsYWdzIHwgSU5ERVhFRCkgJiBNRU1fTUFTS107CisJCVNMSklUX0FTU0VSVCghKGluc3QgJiAoSU5UX0FMSUdORUQgfCBVUERBVEVfUkVRKSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBJTlNUX0NPREVfQU5EX0RTVChpbnN0LCBpbnBfZmxhZ3MsIHJlZykgfCBBKGFyZyAmIFJFR19NQVNLKSB8IEIodG1wX3IpKTsKKwl9CisKKwlpZiAoU0xKSVRfVU5MSUtFTFkoIShhcmcgJiBSRUdfTUFTSykpKQorCQlpbnBfZmxhZ3MgJj0gfldSSVRFX0JBQ0s7CisKKwlpbnN0ID0gZGF0YV90cmFuc2Zlcl9pbnN0c1tpbnBfZmxhZ3MgJiBNRU1fTUFTS107CisJU0xKSVRfQVNTRVJUKChhcmcgJiBSRUdfTUFTSykgfHwgIShpbnN0ICYgVVBEQVRFX1JFUSkpOworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorCWlmIChhcmd3IDw9IDB4N2ZmZjdmZmZsICYmIGFyZ3cgPj0gLTB4ODAwMDAwMDBsCisJCQkmJiAoIShpbnN0ICYgSU5UX0FMSUdORUQpIHx8ICEoYXJndyAmIDB4MykpICYmICEoaW5zdCAmIFVQREFURV9SRVEpKSB7CisjZW5kaWYKKworCQlhcmcgJj0gUkVHX01BU0s7CisJCWhpZ2hfc2hvcnQgPSAoc2xqaXRfc2kpKGFyZ3cgKyAoKGFyZ3cgJiAweDgwMDApIDw8IDEpKSAmIH4weGZmZmY7CisJCS8qIFRoZSBnZXRwdXRfYXJnX2Zhc3Qgc2hvdWxkIGhhbmRsZSB0aGlzIG90aGVyd2lzZS4gKi8KKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisJCVNMSklUX0FTU0VSVChoaWdoX3Nob3J0ICYmIGhpZ2hfc2hvcnQgPD0gMHg3ZmZmZmZmZmwgJiYgaGlnaF9zaG9ydCA+PSAtMHg4MDAwMDAwMGwpOworI2Vsc2UKKwkJU0xKSVRfQVNTRVJUKGhpZ2hfc2hvcnQgJiYgIShpbnN0ICYgKElOVF9BTElHTkVEIHwgVVBEQVRFX1JFUSkpKTsKKyNlbmRpZgorCisJCWlmIChpbnBfZmxhZ3MgJiBXUklURV9CQUNLKSB7CisJCQlpZiAoYXJnID09IHJlZykgeworCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFMocmVnKSB8IEEodG1wX3IpIHwgQihyZWcpKSk7CisJCQkJcmVnID0gdG1wX3I7CisJCQl9CisJCQl0bXBfciA9IGFyZzsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJUyB8IEQoYXJnKSB8IEEoYXJnKSB8IElNTShoaWdoX3Nob3J0ID4+IDE2KSkpOworCQl9CisJCWVsc2UgaWYgKGNvbXBpbGVyLT5jYWNoZV9hcmcgIT0gKFNMSklUX01FTSB8IGFyZykgfHwgaGlnaF9zaG9ydCAhPSBjb21waWxlci0+Y2FjaGVfYXJndykgeworCQkJaWYgKChuZXh0X2FyZyAmIFNMSklUX01FTSkgJiYgIShuZXh0X2FyZyAmIE9GRlNfUkVHX01BU0spKSB7CisJCQkJbmV4dF9oaWdoX3Nob3J0ID0gKHNsaml0X3NpKShuZXh0X2FyZ3cgKyAoKG5leHRfYXJndyAmIDB4ODAwMCkgPDwgMSkpICYgfjB4ZmZmZjsKKwkJCQlpZiAoaGlnaF9zaG9ydCA9PSBuZXh0X2hpZ2hfc2hvcnQpIHsKKwkJCQkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX01FTSB8IGFyZzsKKwkJCQkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBoaWdoX3Nob3J0OworCQkJCQl0bXBfciA9IFRNUF9SRUczOworCQkJCX0KKwkJCX0KKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJUyB8IEQodG1wX3IpIHwgQShhcmcgJiBSRUdfTUFTSykgfCBJTU0oaGlnaF9zaG9ydCA+PiAxNikpKTsKKwkJfQorCQllbHNlCisJCQl0bXBfciA9IFRNUF9SRUczOworCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIElOU1RfQ09ERV9BTkRfRFNUKGluc3QsIGlucF9mbGFncywgcmVnKSB8IEEodG1wX3IpIHwgSU1NKGFyZ3cpKTsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKKwl9CisKKwkvKiBFdmVyeXRoaW5nIGVsc2UgaXMgUFBDLTY0IG9ubHkuICovCisJaWYgKFNMSklUX1VOTElLRUxZKCEoYXJnICYgUkVHX01BU0spKSkgeworCQlkaWZmID0gYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3OworCQlpZiAoKGNvbXBpbGVyLT5jYWNoZV9hcmcgJiBTTEpJVF9JTU0pICYmIGRpZmYgPD0gU0lNTV9NQVggJiYgZGlmZiA+PSBTSU1NX01JTikgeworCQkJQURKVVNUX0NBQ0hFRF9JTU0oZGlmZik7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBJTlNUX0NPREVfQU5EX0RTVChpbnN0LCBpbnBfZmxhZ3MsIHJlZykgfCBBKFRNUF9SRUczKSB8IElNTShkaWZmKSk7CisJCX0KKworCQlkaWZmID0gYXJndyAtIG5leHRfYXJndzsKKwkJaWYgKChuZXh0X2FyZyAmIFNMSklUX01FTSkgJiYgZGlmZiA8PSBTSU1NX01BWCAmJiBkaWZmID49IFNJTU1fTUlOKSB7CisJCQlTTEpJVF9BU1NFUlQoaW5wX2ZsYWdzICYgTE9BRF9EQVRBKTsKKworCQkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX0lNTTsKKwkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJCXRtcF9yID0gVE1QX1JFRzM7CisJCX0KKworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCB0bXBfciwgYXJndykpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBJTlNUX0NPREVfQU5EX0RTVChpbnN0LCBpbnBfZmxhZ3MsIHJlZykgfCBBKHRtcF9yKSk7CisJfQorCisJZGlmZiA9IGFyZ3cgLSBjb21waWxlci0+Y2FjaGVfYXJndzsKKwlpZiAoY29tcGlsZXItPmNhY2hlX2FyZyA9PSBhcmcgJiYgZGlmZiA8PSBTSU1NX01BWCAmJiBkaWZmID49IFNJTU1fTUlOKSB7CisJCVNMSklUX0FTU0VSVCghKGlucF9mbGFncyAmIFdSSVRFX0JBQ0spICYmICEoaW5zdCAmIFVQREFURV9SRVEpKTsKKwkJQURKVVNUX0NBQ0hFRF9JTU0oZGlmZik7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIElOU1RfQ09ERV9BTkRfRFNUKGluc3QsIGlucF9mbGFncywgcmVnKSB8IEEoVE1QX1JFRzMpIHwgSU1NKGRpZmYpKTsKKwl9CisKKwlpZiAoKGNvbXBpbGVyLT5jYWNoZV9hcmcgJiBTTEpJVF9JTU0pICYmIGRpZmYgPD0gU0lNTV9NQVggJiYgZGlmZiA+PSBTSU1NX01JTikgeworCQlpbnN0ID0gZGF0YV90cmFuc2Zlcl9pbnN0c1soaW5wX2ZsYWdzIHwgSU5ERVhFRCkgJiBNRU1fTUFTS107CisJCVNMSklUX0FTU0VSVCghKGluc3QgJiAoSU5UX0FMSUdORUQgfCBVUERBVEVfUkVRKSkpOworCQlpZiAoY29tcGlsZXItPmNhY2hlX2FyZ3cgIT0gYXJndykgeworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFEREkgfCBEKFRNUF9SRUczKSB8IEEoVE1QX1JFRzMpIHwgSU1NKGRpZmYpKSk7CisJCQljb21waWxlci0+Y2FjaGVfYXJndyA9IGFyZ3c7CisJCX0KKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgSU5TVF9DT0RFX0FORF9EU1QoaW5zdCwgaW5wX2ZsYWdzLCByZWcpIHwgQShhcmcgJiBSRUdfTUFTSykgfCBCKFRNUF9SRUczKSk7CisJfQorCisJaWYgKGFyZ3cgPT0gbmV4dF9hcmd3ICYmIChuZXh0X2FyZyAmIFNMSklUX01FTSkpIHsKKwkJU0xKSVRfQVNTRVJUKGlucF9mbGFncyAmIExPQURfREFUQSk7CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUczLCBhcmd3KSk7CisKKwkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX0lNTTsKKwkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCisJCWluc3QgPSBkYXRhX3RyYW5zZmVyX2luc3RzWyhpbnBfZmxhZ3MgfCBJTkRFWEVEKSAmIE1FTV9NQVNLXTsKKwkJU0xKSVRfQVNTRVJUKCEoaW5zdCAmIChJTlRfQUxJR05FRCB8IFVQREFURV9SRVEpKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIElOU1RfQ09ERV9BTkRfRFNUKGluc3QsIGlucF9mbGFncywgcmVnKSB8IEEoYXJnICYgUkVHX01BU0spIHwgQihUTVBfUkVHMykpOworCX0KKworCWRpZmYgPSBhcmd3IC0gbmV4dF9hcmd3OworCWlmIChhcmcgPT0gbmV4dF9hcmcgJiYgIShpbnBfZmxhZ3MgJiBXUklURV9CQUNLKSAmJiBkaWZmIDw9IFNJTU1fTUFYICYmIGRpZmYgPj0gU0lNTV9NSU4pIHsKKwkJU0xKSVRfQVNTRVJUKGlucF9mbGFncyAmIExPQURfREFUQSk7CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUczLCBhcmd3KSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBREQgfCBEKFRNUF9SRUczKSB8IEEoVE1QX1JFRzMpIHwgQihhcmcgJiBSRUdfTUFTSykpKTsKKworCQljb21waWxlci0+Y2FjaGVfYXJnID0gYXJnOworCQljb21waWxlci0+Y2FjaGVfYXJndyA9IGFyZ3c7CisKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgSU5TVF9DT0RFX0FORF9EU1QoaW5zdCwgaW5wX2ZsYWdzLCByZWcpIHwgQShUTVBfUkVHMykpOworCX0KKworCWlmICgobmV4dF9hcmcgJiBTTEpJVF9NRU0pICYmICEobmV4dF9hcmcgJiBPRkZTX1JFR19NQVNLKSAmJiBkaWZmIDw9IFNJTU1fTUFYICYmIGRpZmYgPj0gU0lNTV9NSU4pIHsKKwkJU0xKSVRfQVNTRVJUKGlucF9mbGFncyAmIExPQURfREFUQSk7CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUczLCBhcmd3KSk7CisKKwkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX0lNTTsKKwkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCQl0bXBfciA9IFRNUF9SRUczOworCX0KKwllbHNlCisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIHRtcF9yLCBhcmd3KSk7CisKKwkvKiBHZXQgdGhlIGluZGV4ZWQgdmVyc2lvbiBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgb25lLiAqLworCWluc3QgPSBkYXRhX3RyYW5zZmVyX2luc3RzWyhpbnBfZmxhZ3MgfCBJTkRFWEVEKSAmIE1FTV9NQVNLXTsKKwlTTEpJVF9BU1NFUlQoIShpbnN0ICYgKElOVF9BTElHTkVEIHwgVVBEQVRFX1JFUSkpKTsKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBJTlNUX0NPREVfQU5EX0RTVChpbnN0LCBpbnBfZmxhZ3MsIHJlZykgfCBBKGFyZyAmIFJFR19NQVNLKSB8IEIodG1wX3IpKTsKKyNlbmRpZgorfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfb3BfbWVtMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcxLCBzbGppdF9zdyBhcmcxdywgc2xqaXRfc2kgYXJnMiwgc2xqaXRfc3cgYXJnMncpCit7CisJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnMSwgYXJnMXcpKQorCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOworCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcxLCBhcmcxdywgYXJnMiwgYXJnMncpOworfQorCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9vcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgaW5wdXRfZmxhZ3MsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQoreworCS8qIGFyZzEgZ29lcyB0byBUTVBfUkVHMSBvciBzcmMgcmVnCisJICAgYXJnMiBnb2VzIHRvIFRNUF9SRUcyLCBpbW0gb3Igc3JjIHJlZworCSAgIFRNUF9SRUczIGNhbiBiZSB1c2VkIGZvciBjYWNoaW5nCisJICAgcmVzdWx0IGdvZXMgdG8gVE1QX1JFRzIsIHNvIHB1dCByZXN1bHQgY2FuIHVzZSBUTVBfUkVHMSBhbmQgVE1QX1JFRzMuICovCisJc2xqaXRfc2kgZHN0X3I7CisJc2xqaXRfc2kgc3JjMV9yOworCXNsaml0X3NpIHNyYzJfcjsKKwlzbGppdF9zaSBzdWdnX3NyYzJfciA9IFRNUF9SRUcyOworCXNsaml0X3NpIGZsYWdzID0gaW5wdXRfZmxhZ3MgJiAoQUxUX0ZPUk0xIHwgQUxUX0ZPUk0yIHwgQUxUX0ZPUk0zIHwgQUxUX0ZPUk00IHwgQUxUX0ZPUk01IHwgQUxUX0ZPUk02IHwgQUxUX1NJR05fRVhUIHwgQUxUX1NFVF9GTEFHUyk7CisKKwlpZiAoIShpbnB1dF9mbGFncyAmIEFMVF9LRUVQX0NBQ0hFKSkgeworCQljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCX0KKworCS8qIERlc3RpbmF0aW9uIGNoZWNrLiAqLworCWlmIChTTEpJVF9VTkxJS0VMWShkc3QgPT0gU0xKSVRfVU5VU0VEKSkgeworCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kgJiYgIShzcmMyICYgU0xKSVRfTUVNKSkKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQlkc3RfciA9IFRNUF9SRUcyOworCX0KKwllbHNlIGlmIChGQVNUX0lTX1JFRyhkc3QpKSB7CisJCWRzdF9yID0gZHN0OworCQlmbGFncyB8PSBSRUdfREVTVDsKKwkJaWYgKG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1NJKQorCQkJc3VnZ19zcmMyX3IgPSBkc3RfcjsKKwl9CisJZWxzZSB7CisJCVNMSklUX0FTU0VSVChkc3QgJiBTTEpJVF9NRU0pOworCQlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBpbnB1dF9mbGFncyB8IEFSR19URVNULCBUTVBfUkVHMiwgZHN0LCBkc3R3KSkgeworCQkJZmxhZ3MgfD0gRkFTVF9ERVNUOworCQkJZHN0X3IgPSBUTVBfUkVHMjsKKwkJfQorCQllbHNlIHsKKwkJCWZsYWdzIHw9IFNMT1dfREVTVDsKKwkJCWRzdF9yID0gMDsKKwkJfQorCX0KKworCS8qIFNvdXJjZSAxLiAqLworCWlmIChGQVNUX0lTX1JFRyhzcmMxKSkgeworCQlzcmMxX3IgPSBzcmMxOworCQlmbGFncyB8PSBSRUcxX1NPVVJDRTsKKwl9CisJZWxzZSBpZiAoc3JjMSAmIFNMSklUX0lNTSkgeworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMSwgc3JjMXcpKTsKKwkJc3JjMV9yID0gVE1QX1JFRzE7CisJfQorCWVsc2UgaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgaW5wdXRfZmxhZ3MgfCBMT0FEX0RBVEEsIFRNUF9SRUcxLCBzcmMxLCBzcmMxdykpIHsKKwkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQlzcmMxX3IgPSBUTVBfUkVHMTsKKwl9CisJZWxzZQorCQlzcmMxX3IgPSAwOworCisJLyogU291cmNlIDIuICovCisJaWYgKEZBU1RfSVNfUkVHKHNyYzIpKSB7CisJCXNyYzJfciA9IHNyYzI7CisJCWZsYWdzIHw9IFJFRzJfU09VUkNFOworCQlpZiAoIShmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSkKKwkJCWRzdF9yID0gc3JjMl9yOworCX0KKwllbHNlIGlmIChzcmMyICYgU0xKSVRfSU1NKSB7CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIHN1Z2dfc3JjMl9yLCBzcmMydykpOworCQlzcmMyX3IgPSBzdWdnX3NyYzJfcjsKKwl9CisJZWxzZSBpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBpbnB1dF9mbGFncyB8IExPQURfREFUQSwgc3VnZ19zcmMyX3IsIHNyYzIsIHNyYzJ3KSkgeworCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCXNyYzJfciA9IHN1Z2dfc3JjMl9yOworCX0KKwllbHNlCisJCXNyYzJfciA9IDA7CisKKwkvKiBzcmMxX3IsIHNyYzJfciBhbmQgZHN0X3IgY2FuIGJlIHplcm8gKD11bnByb2Nlc3NlZCkuCisJICAgQWxsIGFyZ3VtZW50cyBhcmUgY29tcGxleCBhZGRyZXNzaW5nIG1vZGVzLCBhbmQgaXQgaXMgYSBiaW5hcnkgb3BlcmF0b3IuICovCisJaWYgKHNyYzFfciA9PSAwICYmIHNyYzJfciA9PSAwICYmIGRzdF9yID09IDApIHsKKwkJaWYgKCFjYW5fY2FjaGUoc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSAmJiBjYW5fY2FjaGUoc3JjMSwgc3JjMXcsIGRzdCwgZHN0dykpIHsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgaW5wdXRfZmxhZ3MgfCBMT0FEX0RBVEEsIFRNUF9SRUcyLCBzcmMyLCBzcmMydywgc3JjMSwgc3JjMXcpKTsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgaW5wdXRfZmxhZ3MgfCBMT0FEX0RBVEEsIFRNUF9SRUcxLCBzcmMxLCBzcmMxdywgZHN0LCBkc3R3KSk7CisJCX0KKwkJZWxzZSB7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGlucHV0X2ZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGlucHV0X2ZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMiwgc3JjMiwgc3JjMncsIGRzdCwgZHN0dykpOworCQl9CisJCXNyYzFfciA9IFRNUF9SRUcxOworCQlzcmMyX3IgPSBUTVBfUkVHMjsKKwl9CisJZWxzZSBpZiAoc3JjMV9yID09IDAgJiYgc3JjMl9yID09IDApIHsKKwkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBpbnB1dF9mbGFncyB8IExPQURfREFUQSwgVE1QX1JFRzEsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCQlzcmMxX3IgPSBUTVBfUkVHMTsKKwl9CisJZWxzZSBpZiAoc3JjMV9yID09IDAgJiYgZHN0X3IgPT0gMCkgeworCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGlucHV0X2ZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMSwgc3JjMSwgc3JjMXcsIGRzdCwgZHN0dykpOworCQlzcmMxX3IgPSBUTVBfUkVHMTsKKwl9CisJZWxzZSBpZiAoc3JjMl9yID09IDAgJiYgZHN0X3IgPT0gMCkgeworCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGlucHV0X2ZsYWdzIHwgTE9BRF9EQVRBLCBzdWdnX3NyYzJfciwgc3JjMiwgc3JjMncsIGRzdCwgZHN0dykpOworCQlzcmMyX3IgPSBzdWdnX3NyYzJfcjsKKwl9CisKKwlpZiAoZHN0X3IgPT0gMCkKKwkJZHN0X3IgPSBUTVBfUkVHMjsKKworCWlmIChzcmMxX3IgPT0gMCkgeworCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGlucHV0X2ZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMSwgc3JjMSwgc3JjMXcsIDAsIDApKTsKKwkJc3JjMV9yID0gVE1QX1JFRzE7CisJfQorCisJaWYgKHNyYzJfciA9PSAwKSB7CisJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgaW5wdXRfZmxhZ3MgfCBMT0FEX0RBVEEsIHN1Z2dfc3JjMl9yLCBzcmMyLCBzcmMydywgMCwgMCkpOworCQlzcmMyX3IgPSBzdWdnX3NyYzJfcjsKKwl9CisKKwlGQUlMX0lGKGVtaXRfc2luZ2xlX29wKGNvbXBpbGVyLCBvcCwgZmxhZ3MsIGRzdF9yLCBzcmMxX3IsIHNyYzJfcikpOworCisJaWYgKGZsYWdzICYgKEZBU1RfREVTVCB8IFNMT1dfREVTVCkpIHsKKwkJaWYgKGZsYWdzICYgRkFTVF9ERVNUKQorCQkJRkFJTF9JRihnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGlucHV0X2ZsYWdzLCBkc3RfciwgZHN0LCBkc3R3KSk7CisJCWVsc2UKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgaW5wdXRfZmxhZ3MsIGRzdF9yLCBkc3QsIGRzdHcsIDAsIDApKTsKKwl9CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCkKK3sKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisJc2xqaXRfc2kgaW50X29wID0gb3AgJiBTTEpJVF9JTlRfT1A7CisjZW5kaWYKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDAoY29tcGlsZXIsIG9wKSk7CisKKwlvcCA9IEdFVF9PUENPREUob3ApOworCXN3aXRjaCAob3ApIHsKKwljYXNlIFNMSklUX0JSRUFLUE9JTlQ6CisJY2FzZSBTTEpJVF9OT1A6CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIE5PUCk7CisJY2FzZSBTTEpJVF9MVU1VTDoKKwljYXNlIFNMSklUX0xTTVVMOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBTKFNMSklUX1IwKSB8IEEoVE1QX1JFRzEpIHwgQihTTEpJVF9SMCkpKTsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNVUxMRCB8IEQoU0xKSVRfUjApIHwgQShUTVBfUkVHMSkgfCBCKFNMSklUX1IxKSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAob3AgPT0gU0xKSVRfTFVNVUwgPyBNVUxIRFUgOiBNVUxIRCkgfCBEKFNMSklUX1IxKSB8IEEoVE1QX1JFRzEpIHwgQihTTEpJVF9SMSkpOworI2Vsc2UKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1VTExXIHwgRChTTEpJVF9SMCkgfCBBKFRNUF9SRUcxKSB8IEIoU0xKSVRfUjEpKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MVU1VTCA/IE1VTEhXVSA6IE1VTEhXKSB8IEQoU0xKSVRfUjEpIHwgQShUTVBfUkVHMSkgfCBCKFNMSklUX1IxKSk7CisjZW5kaWYKKwljYXNlIFNMSklUX1VESVZNT0Q6CisJY2FzZSBTTEpJVF9TRElWTU9EOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBTKFNMSklUX1IwKSB8IEEoVE1QX1JFRzEpIHwgQihTTEpJVF9SMCkpKTsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoaW50X29wID8gKG9wID09IFNMSklUX1VESVZNT0QgPyBESVZXVSA6IERJVlcpIDogKG9wID09IFNMSklUX1VESVZNT0QgPyBESVZEVSA6IERJVkQpKSB8IEQoU0xKSVRfUjApIHwgQShTTEpJVF9SMCkgfCBCKFNMSklUX1IxKSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKGludF9vcCA/IE1VTExXIDogTVVMTEQpIHwgRChTTEpJVF9SMSkgfCBBKFNMSklUX1IwKSB8IEIoU0xKSVRfUjEpKSk7CisjZWxzZQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX1VESVZNT0QgPyBESVZXVSA6IERJVlcpIHwgRChTTEpJVF9SMCkgfCBBKFNMSklUX1IwKSB8IEIoU0xKSVRfUjEpKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNVUxMVyB8IEQoU0xKSVRfUjEpIHwgQShTTEpJVF9SMCkgfCBCKFNMSklUX1IxKSkpOworI2VuZGlmCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNVQkYgfCBEKFNMSklUX1IxKSB8IEEoU0xKSVRfUjEpIHwgQihUTVBfUkVHMSkpOworCWNhc2UgU0xKSVRfVURJVkk6CisJY2FzZSBTTEpJVF9TRElWSToKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIChpbnRfb3AgPyAob3AgPT0gU0xKSVRfVURJVkkgPyBESVZXVSA6IERJVlcpIDogKG9wID09IFNMSklUX1VESVZJID8gRElWRFUgOiBESVZEKSkgfCBEKFNMSklUX1IwKSB8IEEoU0xKSVRfUjApIHwgQihTTEpJVF9SMSkpOworI2Vsc2UKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX1VESVZJID8gRElWV1UgOiBESVZXKSB8IEQoU0xKSVRfUjApIHwgQShTTEpJVF9SMCkgfCBCKFNMSklUX1IxKSk7CisjZW5kaWYKKwl9CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworI2RlZmluZSBFTUlUX01PVih0eXBlLCB0eXBlX2ZsYWdzLCB0eXBlX2Nhc3QpIFwKKwllbWl0X29wKGNvbXBpbGVyLCAoc3JjICYgU0xKSVRfSU1NKSA/IFNMSklUX01PViA6IHR5cGUsIGZsYWdzIHwgKHR5cGVfZmxhZ3MpLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gdHlwZV9jYXN0IHNyY3cgOiBzcmN3KQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBmbGFncyA9IEdFVF9GTEFHUyhvcCkgPyBBTFRfU0VUX0ZMQUdTIDogMDsKKwlzbGppdF9zaSBvcF9mbGFncyA9IEdFVF9BTExfRkxBR1Mob3ApOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMShjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCW9wID0gR0VUX09QQ09ERShvcCk7CisJaWYgKChzcmMgJiBTTEpJVF9JTU0pICYmIHNyY3cgPT0gMCkKKwkJc3JjID0gVE1QX1pFUk87CisKKwlpZiAob3BfZmxhZ3MgJiBTTEpJVF9TRVRfTykKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1UWEVSIHwgUyhUTVBfWkVSTykpKTsKKworCWlmIChvcF9mbGFncyAmIFNMSklUX0lOVF9PUCkgeworCQlpZiAob3AgPCBTTEpJVF9OT1QpIHsKKwkJCWlmIChGQVNUX0lTX1JFRyhzcmMpICYmIHNyYyA9PSBkc3QpIHsKKwkJCQlpZiAoIVRZUEVfQ0FTVF9ORUVERUQob3ApKQorCQkJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJCX0KKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisJCQlpZiAob3AgPT0gU0xKSVRfTU9WX1NJICYmIChzcmMgJiBTTEpJVF9NRU0pKQorCQkJCW9wID0gU0xKSVRfTU9WX1VJOworCQkJaWYgKG9wID09IFNMSklUX01PVlVfU0kgJiYgKHNyYyAmIFNMSklUX01FTSkpCisJCQkJb3AgPSBTTEpJVF9NT1ZVX1VJOworCQkJaWYgKG9wID09IFNMSklUX01PVl9VSSAmJiAoc3JjICYgU0xKSVRfSU1NKSkKKwkJCQlvcCA9IFNMSklUX01PVl9TSTsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZVX1VJICYmIChzcmMgJiBTTEpJVF9JTU0pKQorCQkJCW9wID0gU0xKSVRfTU9WVV9TSTsKKyNlbmRpZgorCQl9CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorCQllbHNlIHsKKwkJCS8qIE1vc3Qgb3BlcmF0aW9ucyBleHBlY3Qgc2lnbiBleHRlbmRlZCBhcmd1bWVudHMuICovCisJCQlmbGFncyB8PSBJTlRfREFUQSB8IFNJR05FRF9EQVRBOworCQkJaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJCQlzcmN3ID0gKHNsaml0X3NpKXNyY3c7CisJCX0KKyNlbmRpZgorCX0KKworCXN3aXRjaCAob3ApIHsKKwljYXNlIFNMSklUX01PVjoKKwljYXNlIFNMSklUX01PVl9QOgorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfMzIgJiYgU0xKSVRfQ09ORklHX1BQQ18zMikKKwljYXNlIFNMSklUX01PVl9VSToKKwljYXNlIFNMSklUX01PVl9TSToKKyNlbmRpZgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBmbGFncyB8IFdPUkRfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKKwljYXNlIFNMSklUX01PVl9VSToKKwkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9VSSwgSU5UX0RBVEEsIChzbGppdF91aSkpOworCisJY2FzZSBTTEpJVF9NT1ZfU0k6CisJCXJldHVybiBFTUlUX01PVihTTEpJVF9NT1ZfU0ksIElOVF9EQVRBIHwgU0lHTkVEX0RBVEEsIChzbGppdF9zaSkpOworI2VuZGlmCisKKwljYXNlIFNMSklUX01PVl9VQjoKKwkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9VQiwgQllURV9EQVRBLCAoc2xqaXRfdWIpKTsKKworCWNhc2UgU0xKSVRfTU9WX1NCOgorCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1NCLCBCWVRFX0RBVEEgfCBTSUdORURfREFUQSwgKHNsaml0X3NiKSk7CisKKwljYXNlIFNMSklUX01PVl9VSDoKKwkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9VSCwgSEFMRl9EQVRBLCAoc2xqaXRfdWgpKTsKKworCWNhc2UgU0xKSVRfTU9WX1NIOgorCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1NILCBIQUxGX0RBVEEgfCBTSUdORURfREFUQSwgKHNsaml0X3NoKSk7CisKKwljYXNlIFNMSklUX01PVlU6CisJY2FzZSBTTEpJVF9NT1ZVX1A6CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ18zMiAmJiBTTEpJVF9DT05GSUdfUFBDXzMyKQorCWNhc2UgU0xKSVRfTU9WVV9VSToKKwljYXNlIFNMSklUX01PVlVfU0k6CisjZW5kaWYKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgZmxhZ3MgfCBXT1JEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorCWNhc2UgU0xKSVRfTU9WVV9VSToKKwkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9VSSwgSU5UX0RBVEEgfCBXUklURV9CQUNLLCAoc2xqaXRfdWkpKTsKKworCWNhc2UgU0xKSVRfTU9WVV9TSToKKwkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9TSSwgSU5UX0RBVEEgfCBTSUdORURfREFUQSB8IFdSSVRFX0JBQ0ssIChzbGppdF9zaSkpOworI2VuZGlmCisKKwljYXNlIFNMSklUX01PVlVfVUI6CisJCXJldHVybiBFTUlUX01PVihTTEpJVF9NT1ZfVUIsIEJZVEVfREFUQSB8IFdSSVRFX0JBQ0ssIChzbGppdF91YikpOworCisJY2FzZSBTTEpJVF9NT1ZVX1NCOgorCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1NCLCBCWVRFX0RBVEEgfCBTSUdORURfREFUQSB8IFdSSVRFX0JBQ0ssIChzbGppdF9zYikpOworCisJY2FzZSBTTEpJVF9NT1ZVX1VIOgorCQlyZXR1cm4gRU1JVF9NT1YoU0xKSVRfTU9WX1VILCBIQUxGX0RBVEEgfCBXUklURV9CQUNLLCAoc2xqaXRfdWgpKTsKKworCWNhc2UgU0xKSVRfTU9WVV9TSDoKKwkJcmV0dXJuIEVNSVRfTU9WKFNMSklUX01PVl9TSCwgSEFMRl9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCAoc2xqaXRfc2gpKTsKKworCWNhc2UgU0xKSVRfTk9UOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTk9ULCBmbGFncywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfTkVHOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTkVHLCBmbGFncywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfQ0xaOgorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX0NMWiwgZmxhZ3MgfCAoIShvcF9mbGFncyAmIFNMSklUX0lOVF9PUCkgPyAwIDogQUxUX0ZPUk0xKSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKyNlbHNlCisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9DTFosIGZsYWdzLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworI2VuZGlmCisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKKyN1bmRlZiBFTUlUX01PVgorCisjZGVmaW5lIFRFU1RfU0xfSU1NKHNyYywgc3JjdykgXAorCSgoKHNyYykgJiBTTEpJVF9JTU0pICYmIChzcmN3KSA8PSBTSU1NX01BWCAmJiAoc3JjdykgPj0gU0lNTV9NSU4pCisKKyNkZWZpbmUgVEVTVF9VTF9JTU0oc3JjLCBzcmN3KSBcCisJKCgoc3JjKSAmIFNMSklUX0lNTSkgJiYgISgoc3JjdykgJiB+MHhmZmZmKSkKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKKyNkZWZpbmUgVEVTVF9TSF9JTU0oc3JjLCBzcmN3KSBcCisJKCgoc3JjKSAmIFNMSklUX0lNTSkgJiYgISgoc3JjdykgJiAweGZmZmYpICYmIChzcmN3KSA8PSAweDdmZmZmZmZmbCAmJiAoc3JjdykgPj0gLTB4ODAwMDAwMDBsKQorI2Vsc2UKKyNkZWZpbmUgVEVTVF9TSF9JTU0oc3JjLCBzcmN3KSBcCisJKCgoc3JjKSAmIFNMSklUX0lNTSkgJiYgISgoc3JjdykgJiAweGZmZmYpKQorI2VuZGlmCisKKyNkZWZpbmUgVEVTVF9VSF9JTU0oc3JjLCBzcmN3KSBcCisJKCgoc3JjKSAmIFNMSklUX0lNTSkgJiYgISgoc3JjdykgJiB+MHhmZmZmMDAwMCkpCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisjZGVmaW5lIFRFU1RfQUREX0lNTShzcmMsIHNyY3cpIFwKKwkoKChzcmMpICYgU0xKSVRfSU1NKSAmJiAoc3JjdykgPD0gMHg3ZmZmN2ZmZmwgJiYgKHNyY3cpID49IC0weDgwMDAwMDAwbCkKKyNlbHNlCisjZGVmaW5lIFRFU1RfQUREX0lNTShzcmMsIHNyY3cpIFwKKwkoKHNyYykgJiBTTEpJVF9JTU0pCisjZW5kaWYKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKKyNkZWZpbmUgVEVTVF9VSV9JTU0oc3JjLCBzcmN3KSBcCisJKCgoc3JjKSAmIFNMSklUX0lNTSkgJiYgISgoc3JjdykgJiB+MHhmZmZmZmZmZikpCisjZWxzZQorI2RlZmluZSBURVNUX1VJX0lNTShzcmMsIHNyY3cpIFwKKwkoKHNyYykgJiBTTEpJVF9JTU0pCisjZW5kaWYKKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlzbGppdF9zaSBmbGFncyA9IEdFVF9GTEFHUyhvcCkgPyBBTFRfU0VUX0ZMQUdTIDogMDsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDIoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYzEsIHNyYzF3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYzIsIHNyYzJ3KTsKKworCWlmICgoc3JjMSAmIFNMSklUX0lNTSkgJiYgc3JjMXcgPT0gMCkKKwkJc3JjMSA9IFRNUF9aRVJPOworCWlmICgoc3JjMiAmIFNMSklUX0lNTSkgJiYgc3JjMncgPT0gMCkKKwkJc3JjMiA9IFRNUF9aRVJPOworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorCWlmIChvcCAmIFNMSklUX0lOVF9PUCkgeworCQkvKiBNb3N0IG9wZXJhdGlvbnMgZXhwZWN0IHNpZ24gZXh0ZW5kZWQgYXJndW1lbnRzLiAqLworCQlmbGFncyB8PSBJTlRfREFUQSB8IFNJR05FRF9EQVRBOworCQlpZiAoc3JjMSAmIFNMSklUX0lNTSkKKwkJCXNyYzF3ID0gKHNsaml0X3NpKShzcmMxdyk7CisJCWlmIChzcmMyICYgU0xKSVRfSU1NKQorCQkJc3JjMncgPSAoc2xqaXRfc2kpKHNyYzJ3KTsKKwkJaWYgKEdFVF9GTEFHUyhvcCkpCisJCQlmbGFncyB8PSBBTFRfU0lHTl9FWFQ7CisJfQorI2VuZGlmCisJaWYgKG9wICYgU0xKSVRfU0VUX08pCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNVFhFUiB8IFMoVE1QX1pFUk8pKSk7CisJaWYgKHNyYzIgPT0gVE1QX1JFRzIpCisJCWZsYWdzIHw9IEFMVF9LRUVQX0NBQ0hFOworCisJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgeworCWNhc2UgU0xKSVRfQUREOgorCQlpZiAoIUdFVF9GTEFHUyhvcCkgJiYgKChzcmMxIHwgc3JjMikgJiBTTEpJVF9JTU0pKSB7CisJCQlpZiAoVEVTVF9TTF9JTU0oc3JjMiwgc3JjMncpKSB7CisJCQkJY29tcGlsZXItPmltbSA9IHNyYzJ3ICYgMHhmZmZmOworCQkJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9BREQsIGZsYWdzIHwgQUxUX0ZPUk0xLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBUTVBfUkVHMiwgMCk7CisJCQl9CisJCQlpZiAoVEVTVF9TTF9JTU0oc3JjMSwgc3JjMXcpKSB7CisJCQkJY29tcGlsZXItPmltbSA9IHNyYzF3ICYgMHhmZmZmOworCQkJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9BREQsIGZsYWdzIHwgQUxUX0ZPUk0xLCBkc3QsIGRzdHcsIHNyYzIsIHNyYzJ3LCBUTVBfUkVHMiwgMCk7CisJCQl9CisJCQlpZiAoVEVTVF9TSF9JTU0oc3JjMiwgc3JjMncpKSB7CisJCQkJY29tcGlsZXItPmltbSA9IChzcmMydyA+PiAxNikgJiAweGZmZmY7CisJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX0FERCwgZmxhZ3MgfCBBTFRfRk9STTIsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIFRNUF9SRUcyLCAwKTsKKwkJCX0KKwkJCWlmIChURVNUX1NIX0lNTShzcmMxLCBzcmMxdykpIHsKKwkJCQljb21waWxlci0+aW1tID0gKHNyYzF3ID4+IDE2KSAmIDB4ZmZmZjsKKwkJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfQURELCBmbGFncyB8IEFMVF9GT1JNMiwgZHN0LCBkc3R3LCBzcmMyLCBzcmMydywgVE1QX1JFRzIsIDApOworCQkJfQorCQkJLyogUmFuZ2UgYmV0d2VlbiAtMSBhbmQgLTMyNzY4IGlzIGNvdmVyZWQgYWJvdmUuICovCisJCQlpZiAoVEVTVF9BRERfSU1NKHNyYzIsIHNyYzJ3KSkgeworCQkJCWNvbXBpbGVyLT5pbW0gPSBzcmMydyAmIDB4ZmZmZmZmZmY7CisJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX0FERCwgZmxhZ3MgfCBBTFRfRk9STTQsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIFRNUF9SRUcyLCAwKTsKKwkJCX0KKwkJCWlmIChURVNUX0FERF9JTU0oc3JjMSwgc3JjMXcpKSB7CisJCQkJY29tcGlsZXItPmltbSA9IHNyYzF3ICYgMHhmZmZmZmZmZjsKKwkJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfQURELCBmbGFncyB8IEFMVF9GT1JNNCwgZHN0LCBkc3R3LCBzcmMyLCBzcmMydywgVE1QX1JFRzIsIDApOworCQkJfQorCQl9CisJCWlmICghKEdFVF9GTEFHUyhvcCkgJiAoU0xKSVRfU0VUX0UgfCBTTEpJVF9TRVRfTykpKSB7CisJCQlpZiAoVEVTVF9TTF9JTU0oc3JjMiwgc3JjMncpKSB7CisJCQkJY29tcGlsZXItPmltbSA9IHNyYzJ3ICYgMHhmZmZmOworCQkJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9BREQsIGZsYWdzIHwgQUxUX0ZPUk0zLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBUTVBfUkVHMiwgMCk7CisJCQl9CisJCQlpZiAoVEVTVF9TTF9JTU0oc3JjMSwgc3JjMXcpKSB7CisJCQkJY29tcGlsZXItPmltbSA9IHNyYzF3ICYgMHhmZmZmOworCQkJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9BREQsIGZsYWdzIHwgQUxUX0ZPUk0zLCBkc3QsIGRzdHcsIHNyYzIsIHNyYzJ3LCBUTVBfUkVHMiwgMCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX0FERCwgZmxhZ3MsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKworCWNhc2UgU0xKSVRfQUREQzoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX0FEREMsIGZsYWdzIHwgKCEob3AgJiBTTEpJVF9LRUVQX0ZMQUdTKSA/IDAgOiBBTFRfRk9STTEpLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX1NVQjoKKwkJaWYgKCFHRVRfRkxBR1Mob3ApICYmICgoc3JjMSB8IHNyYzIpICYgU0xKSVRfSU1NKSkgeworCQkJaWYgKFRFU1RfU0xfSU1NKHNyYzIsIC1zcmMydykpIHsKKwkJCQljb21waWxlci0+aW1tID0gKC1zcmMydykgJiAweGZmZmY7CisJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX0FERCwgZmxhZ3MgfCBBTFRfRk9STTEsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIFRNUF9SRUcyLCAwKTsKKwkJCX0KKwkJCWlmIChURVNUX1NMX0lNTShzcmMxLCBzcmMxdykpIHsKKwkJCQljb21waWxlci0+aW1tID0gc3JjMXcgJiAweGZmZmY7CisJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX1NVQiwgZmxhZ3MgfCBBTFRfRk9STTEsIGRzdCwgZHN0dywgc3JjMiwgc3JjMncsIFRNUF9SRUcyLCAwKTsKKwkJCX0KKwkJCWlmIChURVNUX1NIX0lNTShzcmMyLCAtc3JjMncpKSB7CisJCQkJY29tcGlsZXItPmltbSA9ICgoLXNyYzJ3KSA+PiAxNikgJiAweGZmZmY7CisJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX0FERCwgZmxhZ3MgfCBBTFRfRk9STTIsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIFRNUF9SRUcyLCAwKTsKKwkJCX0KKwkJCS8qIFJhbmdlIGJldHdlZW4gLTEgYW5kIC0zMjc2OCBpcyBjb3ZlcmVkIGFib3ZlLiAqLworCQkJaWYgKFRFU1RfQUREX0lNTShzcmMyLCAtc3JjMncpKSB7CisJCQkJY29tcGlsZXItPmltbSA9IC1zcmMydyAmIDB4ZmZmZmZmZmY7CisJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX0FERCwgZmxhZ3MgfCBBTFRfRk9STTQsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIFRNUF9SRUcyLCAwKTsKKwkJCX0KKwkJfQorCQlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCAmJiAob3AgJiAoU0xKSVRfU0VUX0UgfCBTTEpJVF9TRVRfVSB8IFNMSklUX1NFVF9TKSkgJiYgIShvcCAmIChTTEpJVF9TRVRfTyB8IFNMSklUX1NFVF9DKSkpIHsKKwkJCWlmICghKG9wICYgU0xKSVRfU0VUX1UpKSB7CisJCQkJLyogV2Uga25vdyBBTFRfU0lHTl9FWFQgaXMgc2V0IGlmIGl0IGlzIGFuIFNMSklUX0lOVF9PUCBvbiA2NCBiaXQgc3lzdGVtcy4gKi8KKwkJCQlpZiAoVEVTVF9TTF9JTU0oc3JjMiwgc3JjMncpKSB7CisJCQkJCWNvbXBpbGVyLT5pbW0gPSBzcmMydyAmIDB4ZmZmZjsKKwkJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX1NVQiwgZmxhZ3MgfCBBTFRfRk9STTIsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIFRNUF9SRUcyLCAwKTsKKwkJCQl9CisJCQkJaWYgKEdFVF9GTEFHUyhvcCkgPT0gU0xKSVRfU0VUX0UgJiYgVEVTVF9TTF9JTU0oc3JjMSwgc3JjMXcpKSB7CisJCQkJCWNvbXBpbGVyLT5pbW0gPSBzcmMxdyAmIDB4ZmZmZjsKKwkJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX1NVQiwgZmxhZ3MgfCBBTFRfRk9STTIsIGRzdCwgZHN0dywgc3JjMiwgc3JjMncsIFRNUF9SRUcyLCAwKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoIShvcCAmIChTTEpJVF9TRVRfRSB8IFNMSklUX1NFVF9TKSkpIHsKKwkJCQkvKiBXZSBrbm93IEFMVF9TSUdOX0VYVCBpcyBzZXQgaWYgaXQgaXMgYW4gU0xKSVRfSU5UX09QIG9uIDY0IGJpdCBzeXN0ZW1zLiAqLworCQkJCWlmIChURVNUX1VMX0lNTShzcmMyLCBzcmMydykpIHsKKwkJCQkJY29tcGlsZXItPmltbSA9IHNyYzJ3ICYgMHhmZmZmOworCQkJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfU1VCLCBmbGFncyB8IEFMVF9GT1JNMywgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgVE1QX1JFRzIsIDApOworCQkJCX0KKwkJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfU1VCLCBmbGFncyB8IEFMVF9GT1JNNCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOworCQkJfQorCQkJaWYgKChzcmMyICYgU0xKSVRfSU1NKSAmJiBzcmMydyA+PSAwICYmIHNyYzJ3IDw9IDB4N2ZmZikgeworCQkJCWNvbXBpbGVyLT5pbW0gPSBzcmMydzsKKwkJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfU1VCLCBmbGFncyB8IEFMVF9GT1JNMiB8IEFMVF9GT1JNMywgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgVE1QX1JFRzIsIDApOworCQkJfQorCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX1NVQiwgZmxhZ3MgfCAoKG9wICYgU0xKSVRfU0VUX1UpID8gQUxUX0ZPUk00IDogMCkgfCAoKG9wICYgKFNMSklUX1NFVF9FIHwgU0xKSVRfU0VUX1MpKSA/IEFMVF9GT1JNNSA6IDApLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisJCX0KKwkJaWYgKCEob3AgJiAoU0xKSVRfU0VUX0UgfCBTTEpJVF9TRVRfVSB8IFNMSklUX1NFVF9TIHwgU0xKSVRfU0VUX08pKSkgeworCQkJaWYgKFRFU1RfU0xfSU1NKHNyYzIsIC1zcmMydykpIHsKKwkJCQljb21waWxlci0+aW1tID0gKC1zcmMydykgJiAweGZmZmY7CisJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX0FERCwgZmxhZ3MgfCBBTFRfRk9STTMsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIFRNUF9SRUcyLCAwKTsKKwkJCX0KKwkJfQorCQkvKiBXZSBrbm93IEFMVF9TSUdOX0VYVCBpcyBzZXQgaWYgaXQgaXMgYW4gU0xKSVRfSU5UX09QIG9uIDY0IGJpdCBzeXN0ZW1zLiAqLworCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfU1VCLCBmbGFncyB8ICghKG9wICYgU0xKSVRfU0VUX1UpID8gMCA6IEFMVF9GT1JNNiksIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKworCWNhc2UgU0xKSVRfU1VCQzoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX1NVQkMsIGZsYWdzIHwgKCEob3AgJiBTTEpJVF9LRUVQX0ZMQUdTKSA/IDAgOiBBTFRfRk9STTEpLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX01VTDoKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisJCWlmIChvcCAmIFNMSklUX0lOVF9PUCkKKwkJCWZsYWdzIHw9IEFMVF9GT1JNMjsKKyNlbmRpZgorCQlpZiAoIUdFVF9GTEFHUyhvcCkpIHsKKwkJCWlmIChURVNUX1NMX0lNTShzcmMyLCBzcmMydykpIHsKKwkJCQljb21waWxlci0+aW1tID0gc3JjMncgJiAweGZmZmY7CisJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01VTCwgZmxhZ3MgfCBBTFRfRk9STTEsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIFRNUF9SRUcyLCAwKTsKKwkJCX0KKwkJCWlmIChURVNUX1NMX0lNTShzcmMxLCBzcmMxdykpIHsKKwkJCQljb21waWxlci0+aW1tID0gc3JjMXcgJiAweGZmZmY7CisJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01VTCwgZmxhZ3MgfCBBTFRfRk9STTEsIGRzdCwgZHN0dywgc3JjMiwgc3JjMncsIFRNUF9SRUcyLCAwKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTVVMLCBmbGFncywgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOworCisJY2FzZSBTTEpJVF9BTkQ6CisJY2FzZSBTTEpJVF9PUjoKKwljYXNlIFNMSklUX1hPUjoKKwkJLyogQ29tbXV0YXRpdmUgdW5zaWduZWQgb3BlcmF0aW9ucy4gKi8KKwkJaWYgKCFHRVRfRkxBR1Mob3ApIHx8IEdFVF9PUENPREUob3ApID09IFNMSklUX0FORCkgeworCQkJaWYgKFRFU1RfVUxfSU1NKHNyYzIsIHNyYzJ3KSkgeworCQkJCWNvbXBpbGVyLT5pbW0gPSBzcmMydzsKKwkJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgR0VUX09QQ09ERShvcCksIGZsYWdzIHwgQUxUX0ZPUk0xLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBUTVBfUkVHMiwgMCk7CisJCQl9CisJCQlpZiAoVEVTVF9VTF9JTU0oc3JjMSwgc3JjMXcpKSB7CisJCQkJY29tcGlsZXItPmltbSA9IHNyYzF3OworCQkJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBHRVRfT1BDT0RFKG9wKSwgZmxhZ3MgfCBBTFRfRk9STTEsIGRzdCwgZHN0dywgc3JjMiwgc3JjMncsIFRNUF9SRUcyLCAwKTsKKwkJCX0KKwkJCWlmIChURVNUX1VIX0lNTShzcmMyLCBzcmMydykpIHsKKwkJCQljb21waWxlci0+aW1tID0gKHNyYzJ3ID4+IDE2KSAmIDB4ZmZmZjsKKwkJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgR0VUX09QQ09ERShvcCksIGZsYWdzIHwgQUxUX0ZPUk0yLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBUTVBfUkVHMiwgMCk7CisJCQl9CisJCQlpZiAoVEVTVF9VSF9JTU0oc3JjMSwgc3JjMXcpKSB7CisJCQkJY29tcGlsZXItPmltbSA9IChzcmMxdyA+PiAxNikgJiAweGZmZmY7CisJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIEdFVF9PUENPREUob3ApLCBmbGFncyB8IEFMVF9GT1JNMiwgZHN0LCBkc3R3LCBzcmMyLCBzcmMydywgVE1QX1JFRzIsIDApOworCQkJfQorCQl9CisJCWlmICghR0VUX0ZMQUdTKG9wKSAmJiBHRVRfT1BDT0RFKG9wKSAhPSBTTEpJVF9BTkQpIHsKKwkJCWlmIChURVNUX1VJX0lNTShzcmMyLCBzcmMydykpIHsKKwkJCQljb21waWxlci0+aW1tID0gc3JjMnc7CisJCQkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIEdFVF9PUENPREUob3ApLCBmbGFncyB8IEFMVF9GT1JNMywgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgVE1QX1JFRzIsIDApOworCQkJfQorCQkJaWYgKFRFU1RfVUlfSU1NKHNyYzEsIHNyYzF3KSkgeworCQkJCWNvbXBpbGVyLT5pbW0gPSBzcmMxdzsKKwkJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgR0VUX09QQ09ERShvcCksIGZsYWdzIHwgQUxUX0ZPUk0zLCBkc3QsIGRzdHcsIHNyYzIsIHNyYzJ3LCBUTVBfUkVHMiwgMCk7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIEdFVF9PUENPREUob3ApLCBmbGFncywgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOworCisJY2FzZSBTTEpJVF9BU0hSOgorCQlpZiAob3AgJiBTTEpJVF9LRUVQX0ZMQUdTKQorCQkJZmxhZ3MgfD0gQUxUX0ZPUk0zOworCQkvKiBGYWxsIHRocm91Z2guICovCisJY2FzZSBTTEpJVF9TSEw6CisJY2FzZSBTTEpJVF9MU0hSOgorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKKwkJaWYgKG9wICYgU0xKSVRfSU5UX09QKQorCQkJZmxhZ3MgfD0gQUxUX0ZPUk0yOworI2VuZGlmCisJCWlmIChzcmMyICYgU0xKSVRfSU1NKSB7CisJCQljb21waWxlci0+aW1tID0gc3JjMnc7CisJCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgR0VUX09QQ09ERShvcCksIGZsYWdzIHwgQUxUX0ZPUk0xLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBUTVBfUkVHMiwgMCk7CisJCX0KKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIEdFVF9PUENPREUob3ApLCBmbGFncywgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOworCX0KKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3NpIHJlZykKK3sKKwlDSEVDS19SRUdfSU5ERVgoY2hlY2tfc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHJlZykpOworCXJldHVybiByZWdfbWFwW3JlZ107Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQoreworCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CisJcmV0dXJuIHJlZzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfY3VzdG9tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3NpIHNpemUpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wX2N1c3RvbShjb21waWxlciwgaW5zdHJ1Y3Rpb24sIHNpemUpKTsKKworCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsICooc2xqaXRfaW5zKilpbnN0cnVjdGlvbik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIEZsb2F0aW5nIHBvaW50IG9wZXJhdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKK3sKKyNpZmRlZiBTTEpJVF9JU19GUFVfQVZBSUxBQkxFCisJcmV0dXJuIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEU7CisjZWxzZQorCS8qIEF2YWlsYWJsZSBieSBkZWZhdWx0LiAqLworCXJldHVybiAxOworI2VuZGlmCit9CisKKyNkZWZpbmUgRkxPQVRfREFUQShvcCkgKERPVUJMRV9EQVRBIHwgKChvcCAmIFNMSklUX1NJTkdMRV9PUCkgPj4gNikpCisjZGVmaW5lIFNFTEVDVF9GT1Aob3AsIHNpbmdsZSwgZG91YmxlKSAoKG9wICYgU0xKSVRfU0lOR0xFX09QKSA/IHNpbmdsZSA6IGRvdWJsZSkKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19QUENfNjQgJiYgU0xKSVRfQ09ORklHX1BQQ182NCkKKyNkZWZpbmUgRkxPQVRfVE1QX01FTV9PRkZTRVQgKDYgKiBzaXplb2Yoc2xqaXRfc3cpKQorI2Vsc2UKKyNkZWZpbmUgRkxPQVRfVE1QX01FTV9PRkZTRVQgKDIgKiBzaXplb2Yoc2xqaXRfc3cpKQorCisjaWYgKGRlZmluZWQgU0xKSVRfTElUVExFX0VORElBTiAmJiBTTEpJVF9MSVRUTEVfRU5ESUFOKQorI2RlZmluZSBGTE9BVF9UTVBfTUVNX09GRlNFVF9MT1cgKDIgKiBzaXplb2Yoc2xqaXRfc3cpKQorI2RlZmluZSBGTE9BVF9UTVBfTUVNX09GRlNFVF9ISSAoMyAqIHNpemVvZihzbGppdF9zdykpCisjZWxzZQorI2RlZmluZSBGTE9BVF9UTVBfTUVNX09GRlNFVF9MT1cgKDMgKiBzaXplb2Yoc2xqaXRfc3cpKQorI2RlZmluZSBGTE9BVF9UTVBfTUVNX09GRlNFVF9ISSAoMiAqIHNpemVvZihzbGppdF9zdykpCisjZW5kaWYKKworI2VuZGlmIC8qIFNMSklUX0NPTkZJR19QUENfNjQgKi8KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY29udndfZnJvbWQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlpZiAoc3JjICYgU0xKSVRfTUVNKSB7CisJCS8qIFdlIGNhbiBpZ25vcmUgdGhlIHRlbXBvcmFyeSBkYXRhIHN0b3JlIG9uIHRoZSBzdGFjayBmcm9tIGNhY2hpbmcgcG9pbnQgb2Ygdmlldy4gKi8KKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzEsIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CisJCXNyYyA9IFRNUF9GUkVHMTsKKwl9CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzY0ICYmIFNMSklUX0NPTkZJR19QUENfNjQpCisJb3AgPSBHRVRfT1BDT0RFKG9wKTsKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgKG9wID09IFNMSklUX0NPTlZJX0ZST01EID8gRkNUSVdaIDogRkNUSURaKSB8IEZEKFRNUF9GUkVHMSkgfCBGQihzcmMpKSk7CisKKwlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwlpZiAob3AgPT0gU0xKSVRfQ09OVldfRlJPTUQpIHsKKwkJaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKKwkJCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBET1VCTEVfREFUQSwgVE1QX0ZSRUcxLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVQsIDAsIDApKTsKKwkJCXJldHVybiBlbWl0X29wX21lbTIoY29tcGlsZXIsIFdPUkRfREFUQSB8IExPQURfREFUQSwgZHN0LCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVQsIDAsIDApOworCQl9CisJCXJldHVybiBlbWl0X29wX21lbTIoY29tcGlsZXIsIERPVUJMRV9EQVRBLCBUTVBfRlJFRzEsIGRzdCwgZHN0dywgMCwgMCk7CisJfQorCisjZWxzZQorCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGQ1RJV1ogfCBGRChUTVBfRlJFRzEpIHwgRkIoc3JjKSkpOworCisJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQpCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworI2VuZGlmCisKKwlpZiAoRkFTVF9JU19SRUcoZHN0KSkgeworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMSwgRkxPQVRfVE1QX01FTV9PRkZTRVQpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNURklXWCB8IEZTKFRNUF9GUkVHMSkgfCBBKFNMSklUX1NQKSB8IEIoVE1QX1JFRzEpKSk7CisJCXJldHVybiBlbWl0X29wX21lbTIoY29tcGlsZXIsIElOVF9EQVRBIHwgTE9BRF9EQVRBLCBkc3QsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBGTE9BVF9UTVBfTUVNX09GRlNFVCwgMCwgMCk7CisJfQorCisJU0xKSVRfQVNTRVJUKGRzdCAmIFNMSklUX01FTSk7CisKKwlpZiAoZHN0ICYgT0ZGU19SRUdfTUFTSykgeworCQlkc3R3ICY9IDB4MzsKKwkJaWYgKGRzdHcpIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfUFBDXzMyICYmIFNMSklUX0NPTkZJR19QUENfMzIpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgUkxXSU5NIHwgUyhPRkZTX1JFRyhkc3QpKSB8IEEoVE1QX1JFRzEpIHwgKGRzdHcgPDwgMTEpIHwgKCgzMSAtIGRzdHcpIDw8IDEpKSk7CisjZWxzZQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFJMREkoVE1QX1JFRzEsIE9GRlNfUkVHKGRzdCksIGRzdHcsIDYzIC0gZHN0dywgMSkpKTsKKyNlbmRpZgorCQkJZHN0dyA9IFRNUF9SRUcxOworCQl9CisJCWVsc2UKKwkJCWRzdHcgPSBPRkZTX1JFRyhkc3QpOworCX0KKwllbHNlIHsKKwkJaWYgKChkc3QgJiBSRUdfTUFTSykgJiYgIWRzdHcpIHsKKwkJCWRzdHcgPSBkc3QgJiBSRUdfTUFTSzsKKwkJCWRzdCA9IDA7CisJCX0KKwkJZWxzZSB7CisJCQkvKiBUaGlzIHdvcmtzIHJlZ2FyZGxlc3Mgd2UgaGF2ZSBTTEpJVF9NRU0xIG9yIFNMSklUX01FTTAuICovCisJCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMSwgZHN0dykpOworCQkJZHN0dyA9IFRNUF9SRUcxOworCQl9CisJfQorCisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1RGSVdYIHwgRlMoVE1QX0ZSRUcxKSB8IEEoZHN0ICYgUkVHX01BU0spIHwgQihkc3R3KSk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxX2NvbnZkX2Zyb213KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorCisJc2xqaXRfc2kgZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX0ZSRUcxOworCisJaWYgKHNyYyAmIFNMSklUX0lNTSkgeworCQlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVkRfRlJPTUkpCisJCQlzcmN3ID0gKHNsaml0X3NpKXNyY3c7CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUcxLCBzcmN3KSk7CisJCXNyYyA9IFRNUF9SRUcxOworCX0KKwllbHNlIGlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WRF9GUk9NSSkgeworCQlpZiAoRkFTVF9JU19SRUcoc3JjKSkKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBFWFRTVyB8IFMoc3JjKSB8IEEoVE1QX1JFRzEpKSk7CisJCWVsc2UKKwkJCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBJTlRfREFUQSB8IFNJR05FRF9EQVRBIHwgTE9BRF9EQVRBLCBUTVBfUkVHMSwgc3JjLCBzcmN3LCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVQpKTsKKwkJc3JjID0gVE1QX1JFRzE7CisJfQorCisJaWYgKEZBU1RfSVNfUkVHKHNyYykpIHsKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIFdPUkRfREFUQSwgc3JjLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVQsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBGTE9BVF9UTVBfTUVNX09GRlNFVCkpOworCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRE9VQkxFX0RBVEEgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMSwgU0xKSVRfTUVNMShTTEpJVF9TUCksIEZMT0FUX1RNUF9NRU1fT0ZGU0VULCBkc3QsIGRzdHcpKTsKKwl9CisJZWxzZQorCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRE9VQkxFX0RBVEEgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMSwgc3JjLCBzcmN3LCBkc3QsIGRzdHcpKTsKKworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGQ0ZJRCB8IEZEKGRzdF9yKSB8IEZCKFRNUF9GUkVHMSkpKTsKKworCWlmIChkc3QgJiBTTEpJVF9NRU0pCisJCXJldHVybiBlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApLCBUTVBfRlJFRzEsIGRzdCwgZHN0dywgMCwgMCk7CisJaWYgKG9wICYgU0xKSVRfU0lOR0xFX09QKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBGUlNQIHwgRkQoZHN0X3IpIHwgRkIoZHN0X3IpKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworI2Vsc2UKKworCXNsaml0X3NpIGRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9GUkVHMTsKKwlzbGppdF9zaSBpbnZlcnRfc2lnbiA9IDE7CisKKwlpZiAoc3JjICYgU0xKSVRfSU1NKSB7CisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUcxLCBzcmN3IF4gMHg4MDAwMDAwMCkpOworCQlzcmMgPSBUTVBfUkVHMTsKKwkJaW52ZXJ0X3NpZ24gPSAwOworCX0KKwllbHNlIGlmICghRkFTVF9JU19SRUcoc3JjKSkgeworCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgV09SRF9EQVRBIHwgU0lHTkVEX0RBVEEgfCBMT0FEX0RBVEEsIFRNUF9SRUcxLCBzcmMsIHNyY3csIFNMSklUX01FTTEoU0xKSVRfU1ApLCBGTE9BVF9UTVBfTUVNX09GRlNFVF9MT1cpKTsKKwkJc3JjID0gVE1QX1JFRzE7CisJfQorCisJLyogRmlyc3QsIGEgc3BlY2lhbCBkb3VibGUgZmxvYXRpbmcgcG9pbnQgdmFsdWUgaXMgY29uc3RydWN0ZWQ6ICgyXjUzICsgKGlucHV0IHhvciAoMl4zMSkpKQorCSAgIFRoZSBkb3VibGUgcHJlY2lzaW9uIGZvcm1hdCBoYXMgZXhhY3RseSA1MyBiaXQgcHJlY2lzaW9uLCBzbyB0aGUgbG93ZXIgMzIgYml0IHJlcHJlc2VudHMKKwkgICB0aGUgbG93ZXIgMzIgYml0IG9mIHN1Y2ggdmFsdWUuIFRoZSByZXN1bHQgb2YgeG9yIDJeMzEgaXMgdGhlIHNhbWUgYXMgYWRkaW5nIDB4ODAwMDAwMDAKKwkgICB0byB0aGUgaW5wdXQsIHdoaWNoIHNoaWZ0cyBpdCBpbnRvIHRoZSAwIC0gMHhmZmZmZmZmZiByYW5nZS4gVG8gZ2V0IHRoZSBjb252ZXJ0ZWQgZmxvYXRpbmcKKwkgICBwb2ludCB2YWx1ZSwgd2UgbmVlZCB0byBzdWJzdHJhY3QgMl41MyArIDJeMzEgZnJvbSB0aGUgY29uc3RydWN0ZWQgdmFsdWUuICovCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEFERElTIHwgRChUTVBfUkVHMikgfCBBKDApIHwgMHg0MzMwKSk7CisJaWYgKGludmVydF9zaWduKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgWE9SSVMgfCBTKHNyYykgfCBBKFRNUF9SRUcxKSB8IDB4ODAwMCkpOworCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBXT1JEX0RBVEEsIFRNUF9SRUcyLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVRfSEksIFNMSklUX01FTTEoU0xKSVRfU1ApLCBGTE9BVF9UTVBfTUVNX09GRlNFVCkpOworCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBXT1JEX0RBVEEsIFRNUF9SRUcxLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVRfTE9XLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVRfSEkpKTsKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQURESVMgfCBEKFRNUF9SRUcxKSB8IEEoMCkgfCAweDgwMDApKTsKKwlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRE9VQkxFX0RBVEEgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMSwgU0xKSVRfTUVNMShTTEpJVF9TUCksIEZMT0FUX1RNUF9NRU1fT0ZGU0VULCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVRfTE9XKSk7CisJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIFdPUkRfREFUQSwgVE1QX1JFRzEsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBGTE9BVF9UTVBfTUVNX09GRlNFVF9MT1csIFNMSklUX01FTTEoU0xKSVRfU1ApLCBGTE9BVF9UTVBfTUVNX09GRlNFVCkpOworCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBET1VCTEVfREFUQSB8IExPQURfREFUQSwgVE1QX0ZSRUcyLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVQsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBGTE9BVF9UTVBfTUVNX09GRlNFVF9MT1cpKTsKKworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGU1VCIHwgRkQoZHN0X3IpIHwgRkEoVE1QX0ZSRUcxKSB8IEZCKFRNUF9GUkVHMikpKTsKKworCWlmIChkc3QgJiBTTEpJVF9NRU0pCisJCXJldHVybiBlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApLCBUTVBfRlJFRzEsIGRzdCwgZHN0dywgMCwgMCk7CisJaWYgKG9wICYgU0xKSVRfU0lOR0xFX09QKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBGUlNQIHwgRkQoZHN0X3IpIHwgRkIoZHN0X3IpKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworI2VuZGlmCit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxX2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlpZiAoc3JjMSAmIFNMSklUX01FTSkgeworCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJCXNyYzEgPSBUTVBfRlJFRzE7CisJfQorCisJaWYgKHNyYzIgJiBTTEpJVF9NRU0pIHsKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3LCAwLCAwKSk7CisJCXNyYzIgPSBUTVBfRlJFRzI7CisJfQorCisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgRkNNUFUgfCBDUkQoNCkgfCBGQShzcmMxKSB8IEZCKHNyYzIpKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXNsaml0X3NpIGRzdF9yOworCisJQ0hFQ0tfRVJST1IoKTsKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisKKwlTTEpJVF9DT01QSUxFX0FTU0VSVCgoU0xKSVRfU0lOR0xFX09QID09IDB4MTAwKSAmJiAhKERPVUJMRV9EQVRBICYgMHg0KSwgZmxvYXRfdHJhbnNmZXJfYml0X2Vycm9yKTsKKwlTRUxFQ1RfRk9QMV9PUEVSQVRJT05fV0lUSF9DSEVDS1MoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3Jjdyk7CisKKwlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfQ09OVkRfRlJPTVMpCisJCW9wIF49IFNMSklUX1NJTkdMRV9PUDsKKworCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9GUkVHMTsKKworCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBkc3Rfciwgc3JjLCBzcmN3LCBkc3QsIGRzdHcpKTsKKwkJc3JjID0gZHN0X3I7CisJfQorCisJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgeworCWNhc2UgU0xKSVRfQ09OVkRfRlJPTVM6CisJCW9wIF49IFNMSklUX1NJTkdMRV9PUDsKKwkJaWYgKG9wICYgU0xKSVRfU0lOR0xFX09QKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRlJTUCB8IEZEKGRzdF9yKSB8IEZCKHNyYykpKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIEZhbGwgdGhyb3VnaC4gKi8KKwljYXNlIFNMSklUX0RNT1Y6CisJCWlmIChzcmMgIT0gZHN0X3IpIHsKKwkJCWlmIChkc3RfciAhPSBUTVBfRlJFRzEpCisJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEZNUiB8IEZEKGRzdF9yKSB8IEZCKHNyYykpKTsKKwkJCWVsc2UKKwkJCQlkc3RfciA9IHNyYzsKKwkJfQorCQlicmVhazsKKwljYXNlIFNMSklUX0RORUc6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGTkVHIHwgRkQoZHN0X3IpIHwgRkIoc3JjKSkpOworCQlicmVhazsKKwljYXNlIFNMSklUX0RBQlM6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGQUJTIHwgRkQoZHN0X3IpIHwgRkIoc3JjKSkpOworCQlicmVhazsKKwl9CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKQorCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRkxPQVRfREFUQShvcCksIGRzdF9yLCBkc3QsIGRzdHcsIDAsIDApKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJc2xqaXRfc2kgZHN0X3IsIGZsYWdzID0gMDsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMxLCBzcmMxdyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMyLCBzcmMydyk7CisKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisKKwlkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzI7CisKKwlpZiAoc3JjMSAmIFNMSklUX01FTSkgeworCQlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcxLCBzcmMxLCBzcmMxdykpIHsKKwkJCUZBSUxfSUYoY29tcGlsZXItPmVycm9yKTsKKwkJCXNyYzEgPSBUTVBfRlJFRzE7CisJCX0gZWxzZQorCQkJZmxhZ3MgfD0gQUxUX0ZPUk0xOworCX0KKworCWlmIChzcmMyICYgU0xKSVRfTUVNKSB7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3KSkgeworCQkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQkJc3JjMiA9IFRNUF9GUkVHMjsKKwkJfSBlbHNlCisJCQlmbGFncyB8PSBBTFRfRk9STTI7CisJfQorCisJaWYgKChmbGFncyAmIChBTFRfRk9STTEgfCBBTFRfRk9STTIpKSA9PSAoQUxUX0ZPUk0xIHwgQUxUX0ZPUk0yKSkgeworCQlpZiAoIWNhbl9jYWNoZShzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpICYmIGNhbl9jYWNoZShzcmMxLCBzcmMxdywgZHN0LCBkc3R3KSkgeworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcyLCBzcmMyLCBzcmMydywgc3JjMSwgc3JjMXcpKTsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcsIGRzdCwgZHN0dykpOworCQl9CisJCWVsc2UgeworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcxLCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMiwgc3JjMiwgc3JjMncsIGRzdCwgZHN0dykpOworCQl9CisJfQorCWVsc2UgaWYgKGZsYWdzICYgQUxUX0ZPUk0xKQorCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzEsIHNyYzEsIHNyYzF3LCBkc3QsIGRzdHcpKTsKKwllbHNlIGlmIChmbGFncyAmIEFMVF9GT1JNMikKKwkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcyLCBzcmMyLCBzcmMydywgZHN0LCBkc3R3KSk7CisKKwlpZiAoZmxhZ3MgJiBBTFRfRk9STTEpCisJCXNyYzEgPSBUTVBfRlJFRzE7CisJaWYgKGZsYWdzICYgQUxUX0ZPUk0yKQorCQlzcmMyID0gVE1QX0ZSRUcyOworCisJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgeworCWNhc2UgU0xKSVRfREFERDoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9GT1Aob3AsIEZBRERTLCBGQUREKSB8IEZEKGRzdF9yKSB8IEZBKHNyYzEpIHwgRkIoc3JjMikpKTsKKwkJYnJlYWs7CisKKwljYXNlIFNMSklUX0RTVUI6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfRk9QKG9wLCBGU1VCUywgRlNVQikgfCBGRChkc3RfcikgfCBGQShzcmMxKSB8IEZCKHNyYzIpKSk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9ETVVMOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX0ZPUChvcCwgRk1VTFMsIEZNVUwpIHwgRkQoZHN0X3IpIHwgRkEoc3JjMSkgfCBGQyhzcmMyKSAvKiBGTVVMIHVzZSBGQyBhcyBzcmMyICovKSk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9ERElWOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX0ZPUChvcCwgRkRJVlMsIEZESVYpIHwgRkQoZHN0X3IpIHwgRkEoc3JjMSkgfCBGQihzcmMyKSkpOworCQlicmVhazsKKwl9CisKKwlpZiAoZHN0X3IgPT0gVE1QX0ZSRUcyKQorCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRkxPQVRfREFUQShvcCksIFRNUF9GUkVHMiwgZHN0LCBkc3R3LCAwLCAwKSk7CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworI3VuZGVmIEZMT0FUX0RBVEEKKyN1bmRlZiBTRUxFQ1RfRk9QCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIE90aGVyIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2Zhc3RfZW50ZXIoY29tcGlsZXIsIGRzdCwgZHN0dykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKworCS8qIEZvciBVTlVTRUQgZHN0LiBVbmNvbW1vbiwgYnV0IHBvc3NpYmxlLiAqLworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWlmIChGQVNUX0lTX1JFRyhkc3QpKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBNRkxSIHwgRChkc3QpKTsKKworCS8qIE1lbW9yeS4gKi8KKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTUZMUiB8IEQoVE1QX1JFRzIpKSk7CisJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgV09SRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBUTVBfUkVHMiwgMCk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIHNyYywgc3JjdykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCWlmIChGQVNUX0lTX1JFRyhzcmMpKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTVRMUiB8IFMoc3JjKSkpOworCWVsc2UgeworCQlpZiAoc3JjICYgU0xKSVRfTUVNKQorCQkJRkFJTF9JRihlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1YsIFdPUkRfREFUQSwgVE1QX1JFRzIsIDAsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpKTsKKwkJZWxzZSBpZiAoc3JjICYgU0xKSVRfSU1NKQorCQkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzIsIHNyY3cpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE1UTFIgfCBTKFRNUF9SRUcyKSkpOworCX0KKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBCTFIpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBDb25kaXRpb25hbCBpbnN0cnVjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfbGFiZWwqIHNsaml0X2VtaXRfbGFiZWwoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKK3sKKwlzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfbGFiZWwoY29tcGlsZXIpKTsKKworCWlmIChjb21waWxlci0+bGFzdF9sYWJlbCAmJiBjb21waWxlci0+bGFzdF9sYWJlbC0+c2l6ZSA9PSBjb21waWxlci0+c2l6ZSkKKwkJcmV0dXJuIGNvbXBpbGVyLT5sYXN0X2xhYmVsOworCisJbGFiZWwgPSAoc3RydWN0IHNsaml0X2xhYmVsKillbnN1cmVfYWJ1Zihjb21waWxlciwgc2l6ZW9mKHN0cnVjdCBzbGppdF9sYWJlbCkpOworCVBUUl9GQUlMX0lGKCFsYWJlbCk7CisJc2V0X2xhYmVsKGxhYmVsLCBjb21waWxlcik7CisJcmV0dXJuIGxhYmVsOworfQorCitzdGF0aWMgc2xqaXRfaW5zIGdldF9ib19iaV9mbGFncyhzbGppdF9zaSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU0xKSVRfRVFVQUw6CisJCXJldHVybiAoMTIgPDwgMjEpIHwgKDIgPDwgMTYpOworCisJY2FzZSBTTEpJVF9OT1RfRVFVQUw6CisJCXJldHVybiAoNCA8PCAyMSkgfCAoMiA8PCAxNik7CisKKwljYXNlIFNMSklUX0xFU1M6CisJY2FzZSBTTEpJVF9EX0xFU1M6CisJCXJldHVybiAoMTIgPDwgMjEpIHwgKCg0ICsgMCkgPDwgMTYpOworCisJY2FzZSBTTEpJVF9HUkVBVEVSX0VRVUFMOgorCWNhc2UgU0xKSVRfRF9HUkVBVEVSX0VRVUFMOgorCQlyZXR1cm4gKDQgPDwgMjEpIHwgKCg0ICsgMCkgPDwgMTYpOworCisJY2FzZSBTTEpJVF9HUkVBVEVSOgorCWNhc2UgU0xKSVRfRF9HUkVBVEVSOgorCQlyZXR1cm4gKDEyIDw8IDIxKSB8ICgoNCArIDEpIDw8IDE2KTsKKworCWNhc2UgU0xKSVRfTEVTU19FUVVBTDoKKwljYXNlIFNMSklUX0RfTEVTU19FUVVBTDoKKwkJcmV0dXJuICg0IDw8IDIxKSB8ICgoNCArIDEpIDw8IDE2KTsKKworCWNhc2UgU0xKSVRfU0lHX0xFU1M6CisJCXJldHVybiAoMTIgPDwgMjEpIHwgKDAgPDwgMTYpOworCisJY2FzZSBTTEpJVF9TSUdfR1JFQVRFUl9FUVVBTDoKKwkJcmV0dXJuICg0IDw8IDIxKSB8ICgwIDw8IDE2KTsKKworCWNhc2UgU0xKSVRfU0lHX0dSRUFURVI6CisJCXJldHVybiAoMTIgPDwgMjEpIHwgKDEgPDwgMTYpOworCisJY2FzZSBTTEpJVF9TSUdfTEVTU19FUVVBTDoKKwkJcmV0dXJuICg0IDw8IDIxKSB8ICgxIDw8IDE2KTsKKworCWNhc2UgU0xKSVRfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9NVUxfT1ZFUkZMT1c6CisJCXJldHVybiAoMTIgPDwgMjEpIHwgKDMgPDwgMTYpOworCisJY2FzZSBTTEpJVF9OT1RfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9NVUxfTk9UX09WRVJGTE9XOgorCQlyZXR1cm4gKDQgPDwgMjEpIHwgKDMgPDwgMTYpOworCisJY2FzZSBTTEpJVF9EX0VRVUFMOgorCQlyZXR1cm4gKDEyIDw8IDIxKSB8ICgoNCArIDIpIDw8IDE2KTsKKworCWNhc2UgU0xKSVRfRF9OT1RfRVFVQUw6CisJCXJldHVybiAoNCA8PCAyMSkgfCAoKDQgKyAyKSA8PCAxNik7CisKKwljYXNlIFNMSklUX0RfVU5PUkRFUkVEOgorCQlyZXR1cm4gKDEyIDw8IDIxKSB8ICgoNCArIDMpIDw8IDE2KTsKKworCWNhc2UgU0xKSVRfRF9PUkRFUkVEOgorCQlyZXR1cm4gKDQgPDwgMjEpIHwgKCg0ICsgMykgPDwgMTYpOworCisJZGVmYXVsdDoKKwkJU0xKSVRfQVNTRVJUKHR5cGUgPj0gU0xKSVRfSlVNUCAmJiB0eXBlIDw9IFNMSklUX0NBTEwzKTsKKwkJcmV0dXJuICgyMCA8PCAyMSk7CisJfQorfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlKQoreworCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOworCXNsaml0X2lucyBib19iaV9mbGFnczsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2p1bXAoY29tcGlsZXIsIHR5cGUpKTsKKworCWJvX2JpX2ZsYWdzID0gZ2V0X2JvX2JpX2ZsYWdzKHR5cGUgJiAweGZmKTsKKwlpZiAoIWJvX2JpX2ZsYWdzKQorCQlyZXR1cm4gTlVMTDsKKworCWp1bXAgPSAoc3RydWN0IHNsaml0X2p1bXAqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2p1bXApKTsKKwlQVFJfRkFJTF9JRighanVtcCk7CisJc2V0X2p1bXAoanVtcCwgY29tcGlsZXIsIHR5cGUgJiBTTEpJVF9SRVdSSVRBQkxFX0pVTVApOworCXR5cGUgJj0gMHhmZjsKKworCS8qIEluIFBQQywgd2UgZG9uJ3QgbmVlZCB0byB0b3VjaCB0aGUgYXJndW1lbnRzLiAqLworCWlmICh0eXBlIDwgU0xKSVRfSlVNUCkKKwkJanVtcC0+ZmxhZ3MgfD0gSVNfQ09ORDsKKyNpZiAoZGVmaW5lZCBTTEpJVF9QQVNTX0VOVFJZX0FERFJfVE9fQ0FMTCAmJiBTTEpJVF9QQVNTX0VOVFJZX0FERFJfVE9fQ0FMTCkKKwlpZiAodHlwZSA+PSBTTEpJVF9DQUxMMCkKKwkJanVtcC0+ZmxhZ3MgfD0gSVNfQ0FMTDsKKyNlbmRpZgorCisJUFRSX0ZBSUxfSUYoZW1pdF9jb25zdChjb21waWxlciwgVE1QX0NBTExfUkVHLCAwKSk7CisJUFRSX0ZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBNVENUUiB8IFMoVE1QX0NBTExfUkVHKSkpOworCWp1bXAtPmFkZHIgPSBjb21waWxlci0+c2l6ZTsKKwlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEJDQ1RSIHwgYm9fYmlfZmxhZ3MgfCAodHlwZSA+PSBTTEpJVF9GQVNUX0NBTEwgPyAxIDogMCkpKTsKKwlyZXR1cm4ganVtcDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wID0gTlVMTDsKKwlzbGppdF9zaSBzcmNfcjsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9panVtcChjb21waWxlciwgdHlwZSwgc3JjLCBzcmN3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOworCisJaWYgKEZBU1RfSVNfUkVHKHNyYykpIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9QQVNTX0VOVFJZX0FERFJfVE9fQ0FMTCAmJiBTTEpJVF9QQVNTX0VOVFJZX0FERFJfVE9fQ0FMTCkKKwkJaWYgKHR5cGUgPj0gU0xKSVRfQ0FMTDApIHsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IFMoc3JjKSB8IEEoVE1QX0NBTExfUkVHKSB8IEIoc3JjKSkpOworCQkJc3JjX3IgPSBUTVBfQ0FMTF9SRUc7CisJCX0KKwkJZWxzZQorCQkJc3JjX3IgPSBzcmM7CisjZWxzZQorCQlzcmNfciA9IHNyYzsKKyNlbmRpZgorCX0gZWxzZSBpZiAoc3JjICYgU0xKSVRfSU1NKSB7CisJCWp1bXAgPSAoc3RydWN0IHNsaml0X2p1bXAqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2p1bXApKTsKKwkJRkFJTF9JRighanVtcCk7CisJCXNldF9qdW1wKGp1bXAsIGNvbXBpbGVyLCBKVU1QX0FERFIpOworCQlqdW1wLT51LnRhcmdldCA9IHNyY3c7CisjaWYgKGRlZmluZWQgU0xKSVRfUEFTU19FTlRSWV9BRERSX1RPX0NBTEwgJiYgU0xKSVRfUEFTU19FTlRSWV9BRERSX1RPX0NBTEwpCisJCWlmICh0eXBlID49IFNMSklUX0NBTEwwKQorCQkJanVtcC0+ZmxhZ3MgfD0gSVNfQ0FMTDsKKyNlbmRpZgorCQlGQUlMX0lGKGVtaXRfY29uc3QoY29tcGlsZXIsIFRNUF9DQUxMX1JFRywgMCkpOworCQlzcmNfciA9IFRNUF9DQUxMX1JFRzsKKwl9CisJZWxzZSB7CisJCUZBSUxfSUYoZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBXT1JEX0RBVEEsIFRNUF9DQUxMX1JFRywgMCwgVE1QX1JFRzEsIDAsIHNyYywgc3JjdykpOworCQlzcmNfciA9IFRNUF9DQUxMX1JFRzsKKwl9CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTVRDVFIgfCBTKHNyY19yKSkpOworCWlmIChqdW1wKQorCQlqdW1wLT5hZGRyID0gY29tcGlsZXItPnNpemU7CisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQkNDVFIgfCAoMjAgPDwgMjEpIHwgKHR5cGUgPj0gU0xKSVRfRkFTVF9DQUxMID8gMSA6IDApKTsKK30KKworLyogR2V0IGEgYml0IGZyb20gQ1IsIGFsbCBvdGhlciBiaXRzIGFyZSB6ZXJvZWQuICovCisjZGVmaW5lIEdFVF9DUl9CSVQoYml0LCBkc3QpIFwKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgTUZDUiB8IEQoZHN0KSkpOyBcCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFJMV0lOTSB8IFMoZHN0KSB8IEEoZHN0KSB8ICgoMSArIChiaXQpKSA8PCAxMSkgfCAoMzEgPDwgNikgfCAoMzEgPDwgMSkpKTsKKworI2RlZmluZSBJTlZFUlRfQklUKGRzdCkgXAorCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBYT1JJIHwgUyhkc3QpIHwgQShkc3QpIHwgMHgxKSk7CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wX2ZsYWdzKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3csCisJc2xqaXRfc2kgdHlwZSkKK3sKKwlzbGppdF9zaSByZWcsIGlucHV0X2ZsYWdzOworCXNsaml0X3NpIGZsYWdzID0gR0VUX0FMTF9GTEFHUyhvcCk7CisJc2xqaXRfc3cgb3JpZ2luYWxfZHN0dyA9IGRzdHc7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfZmxhZ3MoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdywgdHlwZSkpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCW9wID0gR0VUX09QQ09ERShvcCk7CisJcmVnID0gKG9wIDwgU0xKSVRfQUREICYmIEZBU1RfSVNfUkVHKGRzdCkpID8gZHN0IDogVE1QX1JFRzI7CisKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisJaWYgKG9wID49IFNMSklUX0FERCAmJiAoc3JjICYgU0xKSVRfTUVNKSkgeworCQlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorCQlpbnB1dF9mbGFncyA9IChmbGFncyAmIFNMSklUX0lOVF9PUCkgPyBJTlRfREFUQSA6IFdPUkRfREFUQTsKKyNlbHNlCisJCWlucHV0X2ZsYWdzID0gV09SRF9EQVRBOworI2VuZGlmCisJCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBpbnB1dF9mbGFncyB8IExPQURfREFUQSwgVE1QX1JFRzEsIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CisJCXNyYyA9IFRNUF9SRUcxOworCQlzcmN3ID0gMDsKKwl9CisKKwlzd2l0Y2ggKHR5cGUgJiAweGZmKSB7CisJY2FzZSBTTEpJVF9FUVVBTDoKKwkJR0VUX0NSX0JJVCgyLCByZWcpOworCQlicmVhazsKKworCWNhc2UgU0xKSVRfTk9UX0VRVUFMOgorCQlHRVRfQ1JfQklUKDIsIHJlZyk7CisJCUlOVkVSVF9CSVQocmVnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNMSklUX0xFU1M6CisJY2FzZSBTTEpJVF9EX0xFU1M6CisJCUdFVF9DUl9CSVQoNCArIDAsIHJlZyk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9HUkVBVEVSX0VRVUFMOgorCWNhc2UgU0xKSVRfRF9HUkVBVEVSX0VRVUFMOgorCQlHRVRfQ1JfQklUKDQgKyAwLCByZWcpOworCQlJTlZFUlRfQklUKHJlZyk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9HUkVBVEVSOgorCWNhc2UgU0xKSVRfRF9HUkVBVEVSOgorCQlHRVRfQ1JfQklUKDQgKyAxLCByZWcpOworCQlicmVhazsKKworCWNhc2UgU0xKSVRfTEVTU19FUVVBTDoKKwljYXNlIFNMSklUX0RfTEVTU19FUVVBTDoKKwkJR0VUX0NSX0JJVCg0ICsgMSwgcmVnKTsKKwkJSU5WRVJUX0JJVChyZWcpOworCQlicmVhazsKKworCWNhc2UgU0xKSVRfU0lHX0xFU1M6CisJCUdFVF9DUl9CSVQoMCwgcmVnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNMSklUX1NJR19HUkVBVEVSX0VRVUFMOgorCQlHRVRfQ1JfQklUKDAsIHJlZyk7CisJCUlOVkVSVF9CSVQocmVnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNMSklUX1NJR19HUkVBVEVSOgorCQlHRVRfQ1JfQklUKDEsIHJlZyk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9TSUdfTEVTU19FUVVBTDoKKwkJR0VUX0NSX0JJVCgxLCByZWcpOworCQlJTlZFUlRfQklUKHJlZyk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9PVkVSRkxPVzoKKwljYXNlIFNMSklUX01VTF9PVkVSRkxPVzoKKwkJR0VUX0NSX0JJVCgzLCByZWcpOworCQlicmVhazsKKworCWNhc2UgU0xKSVRfTk9UX09WRVJGTE9XOgorCWNhc2UgU0xKSVRfTVVMX05PVF9PVkVSRkxPVzoKKwkJR0VUX0NSX0JJVCgzLCByZWcpOworCQlJTlZFUlRfQklUKHJlZyk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9EX0VRVUFMOgorCQlHRVRfQ1JfQklUKDQgKyAyLCByZWcpOworCQlicmVhazsKKworCWNhc2UgU0xKSVRfRF9OT1RfRVFVQUw6CisJCUdFVF9DUl9CSVQoNCArIDIsIHJlZyk7CisJCUlOVkVSVF9CSVQocmVnKTsKKwkJYnJlYWs7CisKKwljYXNlIFNMSklUX0RfVU5PUkRFUkVEOgorCQlHRVRfQ1JfQklUKDQgKyAzLCByZWcpOworCQlicmVhazsKKworCWNhc2UgU0xKSVRfRF9PUkRFUkVEOgorCQlHRVRfQ1JfQklUKDQgKyAzLCByZWcpOworCQlJTlZFUlRfQklUKHJlZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKG9wIDwgU0xKSVRfQUREKSB7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1BQQ182NCAmJiBTTEpJVF9DT05GSUdfUFBDXzY0KQorCQlpZiAob3AgPT0gU0xKSVRfTU9WKQorCQkJaW5wdXRfZmxhZ3MgPSBXT1JEX0RBVEE7CisJCWVsc2UgeworCQkJb3AgPSBTTEpJVF9NT1ZfVUk7CisJCQlpbnB1dF9mbGFncyA9IElOVF9EQVRBOworCQl9CisjZWxzZQorCQlvcCA9IFNMSklUX01PVjsKKwkJaW5wdXRfZmxhZ3MgPSBXT1JEX0RBVEE7CisjZW5kaWYKKwkJaWYgKHJlZyAhPSBUTVBfUkVHMikKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AsIGlucHV0X2ZsYWdzLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBUTVBfUkVHMiwgMCk7CisJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKSBcCisJCXx8IChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCisJY29tcGlsZXItPnNraXBfY2hlY2tzID0gMTsKKyNlbmRpZgorCXJldHVybiBzbGppdF9lbWl0X29wMihjb21waWxlciwgb3AgfCBmbGFncywgZHN0LCBvcmlnaW5hbF9kc3R3LCBzcmMsIHNyY3csIFRNUF9SRUcyLCAwKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCogc2xqaXRfZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IGluaXRfdmFsdWUpCit7CisJc3RydWN0IHNsaml0X2NvbnN0ICpjb25zdF87CisJc2xqaXRfc2kgcmVnOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfY29uc3QoY29tcGlsZXIsIGRzdCwgZHN0dywgaW5pdF92YWx1ZSkpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKworCWNvbnN0XyA9IChzdHJ1Y3Qgc2xqaXRfY29uc3QqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2NvbnN0KSk7CisJUFRSX0ZBSUxfSUYoIWNvbnN0Xyk7CisJc2V0X2NvbnN0KGNvbnN0XywgY29tcGlsZXIpOworCisJcmVnID0gU0xPV19JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcyOworCisJUFRSX0ZBSUxfSUYoZW1pdF9jb25zdChjb21waWxlciwgcmVnLCBpbml0X3ZhbHVlKSk7CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKQorCQlQVFJfRkFJTF9JRihlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1YsIFdPUkRfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgVE1QX1JFRzIsIDApKTsKKwlyZXR1cm4gY29uc3RfOworfQpkaWZmIC0tZ2l0IGEvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlU1BBUkNfMzIuYyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVNQQVJDXzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyZTYyOQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVNQQVJDXzMyLmMKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiAgICBTdGFjay1sZXNzIEp1c3QtSW4tVGltZSBjb21waWxlcgorICoKKyAqICAgIENvcHlyaWdodCAyMDA5LTIwMTIgWm9sdGFuIEhlcmN6ZWcgKGh6bWVzdGVyQGZyZWVtYWlsLmh1KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAqICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworc3RhdGljIHNsaml0X3NpIGxvYWRfaW1tZWRpYXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgaW1tKQoreworCWlmIChpbW0gPD0gU0lNTV9NQVggJiYgaW1tID49IFNJTU1fTUlOKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IEQoZHN0KSB8IFMxKDApIHwgSU1NKGltbSksIERSKGRzdCkpOworCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFVEhJIHwgRChkc3QpIHwgKChpbW0gPj4gMTApICYgMHgzZmZmZmYpLCBEUihkc3QpKSk7CisJcmV0dXJuIChpbW0gJiAweDNmZikgPyBwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgRChkc3QpIHwgUzEoZHN0KSB8IElNTV9BUkcgfCAoaW1tICYgMHgzZmYpLCBEUihkc3QpKSA6IFNMSklUX1NVQ0NFU1M7Cit9CisKKyNkZWZpbmUgQVJHMihmbGFncywgc3JjMikgKChmbGFncyAmIFNSQzJfSU1NKSA/IElNTShzcmMyKSA6IFMyKHNyYzIpKQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfc2luZ2xlX29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBmbGFncywKKwlzbGppdF9zaSBkc3QsIHNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzIpCit7CisJU0xKSVRfQ09NUElMRV9BU1NFUlQoSUNDX0lTX1NFVCA9PSBTRVRfRkxBR1MsIGljY19pc19zZXRfYW5kX3NldF9mbGFnc19tdXN0X2JlX3RoZV9zYW1lKTsKKworCXN3aXRjaCAob3ApIHsKKwljYXNlIFNMSklUX01PVjoKKwljYXNlIFNMSklUX01PVl9VSToKKwljYXNlIFNMSklUX01PVl9TSToKKwljYXNlIFNMSklUX01PVl9QOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSAmJiAhKGZsYWdzICYgU1JDMl9JTU0pKTsKKwkJaWYgKGRzdCAhPSBzcmMyKQorCQkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBEKGRzdCkgfCBTMSgwKSB8IFMyKHNyYzIpLCBEUihkc3QpKTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX01PVl9VQjoKKwljYXNlIFNMSklUX01PVl9TQjoKKwkJU0xKSVRfQVNTRVJUKHNyYzEgPT0gVE1QX1JFRzEgJiYgIShmbGFncyAmIFNSQzJfSU1NKSk7CisJCWlmICgoZmxhZ3MgJiAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpID09IChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgeworCQkJaWYgKG9wID09IFNMSklUX01PVl9VQikKKwkJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBTkQgfCBEKGRzdCkgfCBTMShzcmMyKSB8IElNTSgweGZmKSwgRFIoZHN0KSk7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xMIHwgRChkc3QpIHwgUzEoc3JjMikgfCBJTU0oMjQpLCBEUihkc3QpKSk7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTUkEgfCBEKGRzdCkgfCBTMShkc3QpIHwgSU1NKDI0KSwgRFIoZHN0KSk7CisJCX0KKwkJZWxzZSBpZiAoZHN0ICE9IHNyYzIpCisJCQlTTEpJVF9BU1NFUlRfU1RPUCgpOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfTU9WX1VIOgorCWNhc2UgU0xKSVRfTU9WX1NIOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSAmJiAhKGZsYWdzICYgU1JDMl9JTU0pKTsKKwkJaWYgKChmbGFncyAmIChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgPT0gKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSB7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xMIHwgRChkc3QpIHwgUzEoc3JjMikgfCBJTU0oMTYpLCBEUihkc3QpKSk7CisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCAob3AgPT0gU0xKSVRfTU9WX1NIID8gU1JBIDogU1JMKSB8IEQoZHN0KSB8IFMxKGRzdCkgfCBJTU0oMTYpLCBEUihkc3QpKTsKKwkJfQorCQllbHNlIGlmIChkc3QgIT0gc3JjMikKKwkJCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9OT1Q6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBYTk9SIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IEQoZHN0KSB8IFMxKDApIHwgUzIoc3JjMiksIERSKGRzdCkgfCAoZmxhZ3MgJiBTRVRfRkxBR1MpKTsKKworCWNhc2UgU0xKSVRfQ0xaOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSAmJiAhKGZsYWdzICYgU1JDMl9JTU0pKTsKKwkJLyogc3BhcmMgMzIgZG9lcyBub3Qgc3VwcG9ydCBTTEpJVF9LRUVQX0ZMQUdTLiBOb3Qgc3VyZSBJIGNhbiBmaXggdGhpcy4gKi8KKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNVQiB8IFNFVF9GTEFHUyB8IEQoMCkgfCBTMShzcmMyKSB8IFMyKDApLCBTRVRfRkxBR1MpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgRChUTVBfUkVHMSkgfCBTMSgwKSB8IFMyKHNyYzIpLCBEUihUTVBfUkVHMSkpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEJJQ0MgfCBEQSgweDEpIHwgKDcgJiBESVNQX01BU0spLCBVTk1PVkFCTEVfSU5TKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBEKGRzdCkgfCBTMSgwKSB8IElNTSgzMiksIFVOTU9WQUJMRV9JTlMgfCAoZmxhZ3MgJiBTRVRfRkxBR1MpKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IEQoZHN0KSB8IFMxKDApIHwgSU1NKC0xKSwgRFIoZHN0KSkpOworCisJCS8qIExvb3AuICovCisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTVUIgfCBTRVRfRkxBR1MgfCBEKDApIHwgUzEoVE1QX1JFRzEpIHwgUzIoMCksIFNFVF9GTEFHUykpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0xMIHwgRChUTVBfUkVHMSkgfCBTMShUTVBfUkVHMSkgfCBJTU0oMSksIERSKFRNUF9SRUcxKSkpOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQklDQyB8IERBKDB4ZSkgfCAoLTIgJiBESVNQX01BU0spLCBVTk1PVkFCTEVfSU5TKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIEFERCB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBEKGRzdCkgfCBTMShkc3QpIHwgSU1NKDEpLCBVTk1PVkFCTEVfSU5TIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSk7CisKKwljYXNlIFNMSklUX0FERDoKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQUREIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IEQoZHN0KSB8IFMxKHNyYzEpIHwgQVJHMihmbGFncywgc3JjMiksIERSKGRzdCkgfCAoZmxhZ3MgJiBTRVRfRkxBR1MpKTsKKworCWNhc2UgU0xKSVRfQUREQzoKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQUREQyB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBEKGRzdCkgfCBTMShzcmMxKSB8IEFSRzIoZmxhZ3MsIHNyYzIpLCBEUihkc3QpIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSk7CisKKwljYXNlIFNMSklUX1NVQjoKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1VCIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSB8IEQoZHN0KSB8IFMxKHNyYzEpIHwgQVJHMihmbGFncywgc3JjMiksIERSKGRzdCkgfCAoZmxhZ3MgJiBTRVRfRkxBR1MpKTsKKworCWNhc2UgU0xKSVRfU1VCQzoKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgU1VCQyB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBEKGRzdCkgfCBTMShzcmMxKSB8IEFSRzIoZmxhZ3MsIHNyYzIpLCBEUihkc3QpIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSk7CisKKwljYXNlIFNMSklUX01VTDoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNNVUwgfCBEKGRzdCkgfCBTMShzcmMxKSB8IEFSRzIoZmxhZ3MsIHNyYzIpLCBEUihkc3QpKSk7CisJCWlmICghKGZsYWdzICYgU0VUX0ZMQUdTKSkKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU1JBIHwgRChUTVBfUkVHMSkgfCBTMShkc3QpIHwgSU1NKDMxKSwgRFIoVE1QX1JFRzEpKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBSRFkgfCBEKFRNUF9MSU5LKSwgRFIoVE1QX0xJTkspKSk7CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFNVQiB8IFNFVF9GTEFHUyB8IEQoMCkgfCBTMShUTVBfUkVHMSkgfCBTMihUTVBfTElOSyksIE1PVkFCTEVfSU5TIHwgU0VUX0ZMQUdTKTsKKworCWNhc2UgU0xKSVRfQU5EOgorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBBTkQgfCAoZmxhZ3MgJiBTRVRfRkxBR1MpIHwgRChkc3QpIHwgUzEoc3JjMSkgfCBBUkcyKGZsYWdzLCBzcmMyKSwgRFIoZHN0KSB8IChmbGFncyAmIFNFVF9GTEFHUykpOworCisJY2FzZSBTTEpJVF9PUjoKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgT1IgfCAoZmxhZ3MgJiBTRVRfRkxBR1MpIHwgRChkc3QpIHwgUzEoc3JjMSkgfCBBUkcyKGZsYWdzLCBzcmMyKSwgRFIoZHN0KSB8IChmbGFncyAmIFNFVF9GTEFHUykpOworCisJY2FzZSBTTEpJVF9YT1I6CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFhPUiB8IChmbGFncyAmIFNFVF9GTEFHUykgfCBEKGRzdCkgfCBTMShzcmMxKSB8IEFSRzIoZmxhZ3MsIHNyYzIpLCBEUihkc3QpIHwgKGZsYWdzICYgU0VUX0ZMQUdTKSk7CisKKwljYXNlIFNMSklUX1NITDoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNMTCB8IEQoZHN0KSB8IFMxKHNyYzEpIHwgQVJHMihmbGFncywgc3JjMiksIERSKGRzdCkpKTsKKwkJcmV0dXJuICEoZmxhZ3MgJiBTRVRfRkxBR1MpID8gU0xKSVRfU1VDQ0VTUyA6IHB1c2hfaW5zdChjb21waWxlciwgU1VCIHwgU0VUX0ZMQUdTIHwgRCgwKSB8IFMxKGRzdCkgfCBTMigwKSwgU0VUX0ZMQUdTKTsKKworCWNhc2UgU0xKSVRfTFNIUjoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNSTCB8IEQoZHN0KSB8IFMxKHNyYzEpIHwgQVJHMihmbGFncywgc3JjMiksIERSKGRzdCkpKTsKKwkJcmV0dXJuICEoZmxhZ3MgJiBTRVRfRkxBR1MpID8gU0xKSVRfU1VDQ0VTUyA6IHB1c2hfaW5zdChjb21waWxlciwgU1VCIHwgU0VUX0ZMQUdTIHwgRCgwKSB8IFMxKGRzdCkgfCBTMigwKSwgU0VUX0ZMQUdTKTsKKworCWNhc2UgU0xKSVRfQVNIUjoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNSQSB8IEQoZHN0KSB8IFMxKHNyYzEpIHwgQVJHMihmbGFncywgc3JjMiksIERSKGRzdCkpKTsKKwkJcmV0dXJuICEoZmxhZ3MgJiBTRVRfRkxBR1MpID8gU0xKSVRfU1VDQ0VTUyA6IHB1c2hfaW5zdChjb21waWxlciwgU1VCIHwgU0VUX0ZMQUdTIHwgRCgwKSB8IFMxKGRzdCkgfCBTMigwKSwgU0VUX0ZMQUdTKTsKKwl9CisKKwlTTEpJVF9BU1NFUlRfU1RPUCgpOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfY29uc3Qoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBpbml0X3ZhbHVlKQoreworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRVRISSB8IEQoZHN0KSB8ICgoaW5pdF92YWx1ZSA+PiAxMCkgJiAweDNmZmZmZiksIERSKGRzdCkpKTsKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IEQoZHN0KSB8IFMxKGRzdCkgfCBJTU1fQVJHIHwgKGluaXRfdmFsdWUgJiAweDNmZiksIERSKGRzdCkpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfanVtcF9hZGRyKHNsaml0X3V3IGFkZHIsIHNsaml0X3V3IG5ld19hZGRyKQoreworCXNsaml0X2lucyAqaW5zdCA9IChzbGppdF9pbnMqKWFkZHI7CisKKwlpbnN0WzBdID0gKGluc3RbMF0gJiAweGZmYzAwMDAwKSB8ICgobmV3X2FkZHIgPj4gMTApICYgMHgzZmZmZmYpOworCWluc3RbMV0gPSAoaW5zdFsxXSAmIDB4ZmZmZmZjMDApIHwgKG5ld19hZGRyICYgMHgzZmYpOworCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyAyKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2NvbnN0KHNsaml0X3V3IGFkZHIsIHNsaml0X3N3IG5ld19jb25zdGFudCkKK3sKKwlzbGppdF9pbnMgKmluc3QgPSAoc2xqaXRfaW5zKilhZGRyOworCisJaW5zdFswXSA9IChpbnN0WzBdICYgMHhmZmMwMDAwMCkgfCAoKG5ld19jb25zdGFudCA+PiAxMCkgJiAweDNmZmZmZik7CisJaW5zdFsxXSA9IChpbnN0WzFdICYgMHhmZmZmZmMwMCkgfCAobmV3X2NvbnN0YW50ICYgMHgzZmYpOworCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyAyKTsKK30KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVNQQVJDX2NvbW1vbi5jIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlU1BBUkNfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3YzQyNgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVNQQVJDX2NvbW1vbi5jCkBAIC0wLDAgKzEsMTQzNSBAQAorLyoKKyAqICAgIFN0YWNrLWxlc3MgSnVzdC1Jbi1UaW1lIGNvbXBpbGVyCisgKgorICogICAgQ29weXJpZ2h0IDIwMDktMjAxMiBab2x0YW4gSGVyY3plZyAoaHptZXN0ZXJAZnJlZW1haWwuaHUpLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgorICogICAgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UCisgKiBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgU0xKSVRfQ09OU1QgY2hhciogc2xqaXRfZ2V0X3BsYXRmb3JtX25hbWUodm9pZCkKK3sKKwlyZXR1cm4gIlNQQVJDIiBTTEpJVF9DUFVJTkZPOworfQorCisvKiBMZW5ndGggb2YgYW4gaW5zdHJ1Y3Rpb24gd29yZAorICAgQm90aCBmb3Igc3BhcmMtMzIgYW5kIHNwYXJjLTY0ICovCit0eXBlZGVmIHNsaml0X3VpIHNsaml0X2luczsKKworc3RhdGljIHZvaWQgc3BhcmNfY2FjaGVfZmx1c2goc2xqaXRfaW5zICpmcm9tLCBzbGppdF9pbnMgKnRvKQoreworI2lmIGRlZmluZWQoX19TVU5QUk9fQykgJiYgX19TVU5QUk9fQyA8IDB4NTkwCisJX19hc20gKAorCQkvKiBpZiAoZnJvbSA9PSB0bykgcmV0dXJuICovCisJCSJjbXAgJWkwLCAlaTFcbiIKKwkJImJlIC5sZWF2ZVxuIgorCQkibm9wXG4iCisKKwkJLyogbG9vcCB1bnRpbCBmcm9tID49IHRvICovCisJCSIubWFpbmxvb3A6XG4iCisJCSJmbHVzaCAlaTBcbiIKKwkJImFkZCAlaTAsIDgsICVpMFxuIgorCQkiY21wICVpMCwgJWkxXG4iCisJCSJiY3MgLm1haW5sb29wXG4iCisJCSJub3BcbiIKKworCQkvKiBUaGUgY29tcGFyaXNvbiB3YXMgZG9uZSBhYm92ZS4gKi8KKwkJImJuZSAubGVhdmVcbiIKKwkJLyogbm9wIGlzIG5vdCBuZWNlc3NhcnkgaGVyZSwgc2luY2UgdGhlCisJCSAgIHN1YiBvcGVyYXRpb24gaGFzIG5vIHNpZGUgZWZmZWN0LiAqLworCQkic3ViICVpMCwgNCwgJWkwXG4iCisJCSJmbHVzaCAlaTBcbiIKKwkJIi5sZWF2ZToiCisJKTsKKyNlbHNlCisJaWYgKFNMSklUX1VOTElLRUxZKGZyb20gPT0gdG8pKQorCQlyZXR1cm47CisKKwlkbyB7CisJCV9fYXNtX18gdm9sYXRpbGUgKAorCQkJImZsdXNoICUwXG4iCisJCQk6IDogInIiKGZyb20pCisJCSk7CisJCS8qIE9wZXJhdGVzIGF0IGxlYXN0IG9uIGRvdWJsZXdvcmQuICovCisJCWZyb20gKz0gMjsKKwl9IHdoaWxlIChmcm9tIDwgdG8pOworCisJaWYgKGZyb20gPT0gdG8pIHsKKwkJLyogRmx1c2ggdGhlIGxhc3Qgd29yZC4gKi8KKwkJZnJvbSAtLTsKKwkJX19hc21fXyB2b2xhdGlsZSAoCisJCQkiZmx1c2ggJTBcbiIKKwkJCTogOiAiciIoZnJvbSkKKwkJKTsKKwl9CisjZW5kaWYKK30KKworLyogVE1QX1JFRzIgaXMgbm90IHVzZWQgYnkgZ2V0cHV0X2FyZyAqLworI2RlZmluZSBUTVBfUkVHMQkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDIpCisjZGVmaW5lIFRNUF9SRUcyCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgMykKKyNkZWZpbmUgVE1QX1JFRzMJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyA0KQorI2RlZmluZSBUTVBfTElOSwkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDUpCisKKyNkZWZpbmUgVE1QX0ZSRUcxCSgwKQorI2RlZmluZSBUTVBfRlJFRzIJKChTTEpJVF9OVU1CRVJfT0ZfRkxPQVRfUkVHSVNURVJTICsgMSkgPDwgMSkKKworc3RhdGljIFNMSklUX0NPTlNUIHNsaml0X3ViIHJlZ19tYXBbU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDZdID0geworCTAsIDgsIDksIDEwLCAxMywgMjksIDI4LCAyNywgMjMsIDIyLCAyMSwgMjAsIDE5LCAxOCwgMTcsIDE2LCAyNiwgMjUsIDI0LCAxNCwgMSwgMTEsIDEyLCAxNQorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgSW5zdHJ1Y2lvbiBmb3JtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEQoZCkJCShyZWdfbWFwW2RdIDw8IDI1KQorI2RlZmluZSBEQShkKQkJKChkKSA8PCAyNSkKKyNkZWZpbmUgUzEoczEpCQkocmVnX21hcFtzMV0gPDwgMTQpCisjZGVmaW5lIFMyKHMyKQkJKHJlZ19tYXBbczJdKQorI2RlZmluZSBTMUEoczEpCQkoKHMxKSA8PCAxNCkKKyNkZWZpbmUgUzJBKHMyKQkJKHMyKQorI2RlZmluZSBJTU1fQVJHCQkweDIwMDAKKyNkZWZpbmUgRE9QKG9wKQkJKChvcCkgPDwgNSkKKyNkZWZpbmUgSU1NKGltbSkJKCgoaW1tKSAmIDB4MWZmZikgfCBJTU1fQVJHKQorCisjZGVmaW5lIERSKGRyKQkJKHJlZ19tYXBbZHJdKQorI2RlZmluZSBPUEMxKG9wY29kZSkJKChvcGNvZGUpIDw8IDMwKQorI2RlZmluZSBPUEMyKG9wY29kZSkJKChvcGNvZGUpIDw8IDIyKQorI2RlZmluZSBPUEMzKG9wY29kZSkJKChvcGNvZGUpIDw8IDE5KQorI2RlZmluZSBTRVRfRkxBR1MJT1BDMygweDEwKQorCisjZGVmaW5lIEFERAkJKE9QQzEoMHgyKSB8IE9QQzMoMHgwMCkpCisjZGVmaW5lIEFEREMJCShPUEMxKDB4MikgfCBPUEMzKDB4MDgpKQorI2RlZmluZSBBTkQJCShPUEMxKDB4MikgfCBPUEMzKDB4MDEpKQorI2RlZmluZSBBTkROCQkoT1BDMSgweDIpIHwgT1BDMygweDA1KSkKKyNkZWZpbmUgQ0FMTAkJKE9QQzEoMHgxKSkKKyNkZWZpbmUgRkFCU1MJCShPUEMxKDB4MikgfCBPUEMzKDB4MzQpIHwgRE9QKDB4MDkpKQorI2RlZmluZSBGQURERAkJKE9QQzEoMHgyKSB8IE9QQzMoMHgzNCkgfCBET1AoMHg0MikpCisjZGVmaW5lIEZBRERTCQkoT1BDMSgweDIpIHwgT1BDMygweDM0KSB8IERPUCgweDQxKSkKKyNkZWZpbmUgRkNNUEQJCShPUEMxKDB4MikgfCBPUEMzKDB4MzUpIHwgRE9QKDB4NTIpKQorI2RlZmluZSBGQ01QUwkJKE9QQzEoMHgyKSB8IE9QQzMoMHgzNSkgfCBET1AoMHg1MSkpCisjZGVmaW5lIEZESVZECQkoT1BDMSgweDIpIHwgT1BDMygweDM0KSB8IERPUCgweDRlKSkKKyNkZWZpbmUgRkRJVlMJCShPUEMxKDB4MikgfCBPUEMzKDB4MzQpIHwgRE9QKDB4NGQpKQorI2RlZmluZSBGRFRPSQkJKE9QQzEoMHgyKSB8IE9QQzMoMHgzNCkgfCBET1AoMHhkMikpCisjZGVmaW5lIEZEVE9TCQkoT1BDMSgweDIpIHwgT1BDMygweDM0KSB8IERPUCgweGM2KSkKKyNkZWZpbmUgRklUT0QJCShPUEMxKDB4MikgfCBPUEMzKDB4MzQpIHwgRE9QKDB4YzgpKQorI2RlZmluZSBGSVRPUwkJKE9QQzEoMHgyKSB8IE9QQzMoMHgzNCkgfCBET1AoMHhjNCkpCisjZGVmaW5lIEZNT1ZTCQkoT1BDMSgweDIpIHwgT1BDMygweDM0KSB8IERPUCgweDAxKSkKKyNkZWZpbmUgRk1VTEQJCShPUEMxKDB4MikgfCBPUEMzKDB4MzQpIHwgRE9QKDB4NGEpKQorI2RlZmluZSBGTVVMUwkJKE9QQzEoMHgyKSB8IE9QQzMoMHgzNCkgfCBET1AoMHg0OSkpCisjZGVmaW5lIEZORUdTCQkoT1BDMSgweDIpIHwgT1BDMygweDM0KSB8IERPUCgweDA1KSkKKyNkZWZpbmUgRlNUT0QJCShPUEMxKDB4MikgfCBPUEMzKDB4MzQpIHwgRE9QKDB4YzkpKQorI2RlZmluZSBGU1RPSQkJKE9QQzEoMHgyKSB8IE9QQzMoMHgzNCkgfCBET1AoMHhkMSkpCisjZGVmaW5lIEZTVUJECQkoT1BDMSgweDIpIHwgT1BDMygweDM0KSB8IERPUCgweDQ2KSkKKyNkZWZpbmUgRlNVQlMJCShPUEMxKDB4MikgfCBPUEMzKDB4MzQpIHwgRE9QKDB4NDUpKQorI2RlZmluZSBKTVBMCQkoT1BDMSgweDIpIHwgT1BDMygweDM4KSkKKyNkZWZpbmUgTk9QCQkoT1BDMSgweDApIHwgT1BDMigweDA0KSkKKyNkZWZpbmUgT1IJCShPUEMxKDB4MikgfCBPUEMzKDB4MDIpKQorI2RlZmluZSBPUk4JCShPUEMxKDB4MikgfCBPUEMzKDB4MDYpKQorI2RlZmluZSBSRFkJCShPUEMxKDB4MikgfCBPUEMzKDB4MjgpIHwgUzFBKDApKQorI2RlZmluZSBSRVNUT1JFCQkoT1BDMSgweDIpIHwgT1BDMygweDNkKSkKKyNkZWZpbmUgU0FWRQkJKE9QQzEoMHgyKSB8IE9QQzMoMHgzYykpCisjZGVmaW5lIFNFVEhJCQkoT1BDMSgweDApIHwgT1BDMigweDA0KSkKKyNkZWZpbmUgU0xMCQkoT1BDMSgweDIpIHwgT1BDMygweDI1KSkKKyNkZWZpbmUgU0xMWAkJKE9QQzEoMHgyKSB8IE9QQzMoMHgyNSkgfCAoMSA8PCAxMikpCisjZGVmaW5lIFNSQQkJKE9QQzEoMHgyKSB8IE9QQzMoMHgyNykpCisjZGVmaW5lIFNSQVgJCShPUEMxKDB4MikgfCBPUEMzKDB4MjcpIHwgKDEgPDwgMTIpKQorI2RlZmluZSBTUkwJCShPUEMxKDB4MikgfCBPUEMzKDB4MjYpKQorI2RlZmluZSBTUkxYCQkoT1BDMSgweDIpIHwgT1BDMygweDI2KSB8ICgxIDw8IDEyKSkKKyNkZWZpbmUgU1VCCQkoT1BDMSgweDIpIHwgT1BDMygweDA0KSkKKyNkZWZpbmUgU1VCQwkJKE9QQzEoMHgyKSB8IE9QQzMoMHgwYykpCisjZGVmaW5lIFRBCQkoT1BDMSgweDIpIHwgT1BDMygweDNhKSB8ICg4IDw8IDI1KSkKKyNkZWZpbmUgV1JZCQkoT1BDMSgweDIpIHwgT1BDMygweDMwKSB8IERBKDApKQorI2RlZmluZSBYT1IJCShPUEMxKDB4MikgfCBPUEMzKDB4MDMpKQorI2RlZmluZSBYTk9SCQkoT1BDMSgweDIpIHwgT1BDMygweDA3KSkKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpCisjZGVmaW5lIE1BWF9ESVNQCSgweDFmZmZmZikKKyNkZWZpbmUgTUlOX0RJU1AJKC0weDIwMDAwMCkKKyNkZWZpbmUgRElTUF9NQVNLCSgweDNmZmZmZikKKworI2RlZmluZSBCSUNDCQkoT1BDMSgweDApIHwgT1BDMigweDIpKQorI2RlZmluZSBGQkZDQwkJKE9QQzEoMHgwKSB8IE9QQzIoMHg2KSkKKyNkZWZpbmUgU0xMX1cJCVNMTAorI2RlZmluZSBTRElWCQkoT1BDMSgweDIpIHwgT1BDMygweDBmKSkKKyNkZWZpbmUgU01VTAkJKE9QQzEoMHgyKSB8IE9QQzMoMHgwYikpCisjZGVmaW5lIFVESVYJCShPUEMxKDB4MikgfCBPUEMzKDB4MGUpKQorI2RlZmluZSBVTVVMCQkoT1BDMSgweDIpIHwgT1BDMygweDBhKSkKKyNlbHNlCisjZGVmaW5lIFNMTF9XCQlTTExYCisjZW5kaWYKKworI2RlZmluZSBTSU1NX01BWAkoMHgwZmZmKQorI2RlZmluZSBTSU1NX01JTgkoLTB4MTAwMCkKKworLyogZGVzdF9yZWcgaXMgdGhlIGFic29sdXRlIG5hbWUgb2YgdGhlIHJlZ2lzdGVyCisgICBVc2VmdWwgZm9yIHJlb3JkZXJpbmcgaW5zdHJ1Y3Rpb25zIGluIHRoZSBkZWxheSBzbG90LiAqLworc3RhdGljIHNsaml0X3NpIHB1c2hfaW5zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9pbnMgaW5zLCBzbGppdF9zaSBkZWxheV9zbG90KQoreworCXNsaml0X2lucyAqcHRyOworCVNMSklUX0FTU0VSVCgoZGVsYXlfc2xvdCAmIERTVF9JTlNfTUFTSykgPT0gVU5NT1ZBQkxFX0lOUworCQl8fCAoZGVsYXlfc2xvdCAmIERTVF9JTlNfTUFTSykgPT0gTU9WQUJMRV9JTlMKKwkJfHwgKGRlbGF5X3Nsb3QgJiBEU1RfSU5TX01BU0spID09ICgoaW5zID4+IDI1KSAmIDB4MWYpKTsKKwlwdHIgPSAoc2xqaXRfaW5zKillbnN1cmVfYnVmKGNvbXBpbGVyLCBzaXplb2Yoc2xqaXRfaW5zKSk7CisJRkFJTF9JRighcHRyKTsKKwkqcHRyID0gaW5zOworCWNvbXBpbGVyLT5zaXplKys7CisJY29tcGlsZXItPmRlbGF5X3Nsb3QgPSBkZWxheV9zbG90OworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X2lucyogZGV0ZWN0X2p1bXBfdHlwZShzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfaW5zICpjb2RlX3B0ciwgc2xqaXRfaW5zICpjb2RlKQoreworCXNsaml0X3N3IGRpZmY7CisJc2xqaXRfdXcgdGFyZ2V0X2FkZHI7CisJc2xqaXRfaW5zICppbnN0OworCXNsaml0X2lucyBzYXZlZF9pbnN0OworCisJaWYgKGp1bXAtPmZsYWdzICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKQorCQlyZXR1cm4gY29kZV9wdHI7CisKKwlpZiAoanVtcC0+ZmxhZ3MgJiBKVU1QX0FERFIpCisJCXRhcmdldF9hZGRyID0ganVtcC0+dS50YXJnZXQ7CisJZWxzZSB7CisJCVNMSklUX0FTU0VSVChqdW1wLT5mbGFncyAmIEpVTVBfTEFCRUwpOworCQl0YXJnZXRfYWRkciA9IChzbGppdF91dykoY29kZSArIGp1bXAtPnUubGFiZWwtPnNpemUpOworCX0KKwlpbnN0ID0gKHNsaml0X2lucyopanVtcC0+YWRkcjsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpCisJaWYgKGp1bXAtPmZsYWdzICYgSVNfQ0FMTCkgeworCQkvKiBDYWxsIGlzIGFsd2F5cyBwYXRjaGFibGUgb24gc3BhcmMgMzIuICovCisJCWp1bXAtPmZsYWdzIHw9IFBBVENIX0NBTEw7CisJCWlmIChqdW1wLT5mbGFncyAmIElTX01PVkFCTEUpIHsKKwkJCWluc3RbMF0gPSBpbnN0Wy0xXTsKKwkJCWluc3RbLTFdID0gQ0FMTDsKKwkJCWp1bXAtPmFkZHIgLT0gc2l6ZW9mKHNsaml0X2lucyk7CisJCQlyZXR1cm4gaW5zdDsKKwkJfQorCQlpbnN0WzBdID0gQ0FMTDsKKwkJaW5zdFsxXSA9IE5PUDsKKwkJcmV0dXJuIGluc3QgKyAxOworCX0KKyNlbHNlCisJLyogQm90aCBjYWxscyBhbmQgQlByIGluc3RydWN0aW9ucyBzaGFsbCBub3QgcGFzcyB0aGlzIHBvaW50LiAqLworI2Vycm9yICJJbXBsZW1lbnRhdGlvbiByZXF1aXJlZCIKKyNlbmRpZgorCisJaWYgKGp1bXAtPmZsYWdzICYgSVNfQ09ORCkKKwkJaW5zdC0tOworCisJaWYgKGp1bXAtPmZsYWdzICYgSVNfTU9WQUJMRSkgeworCQlkaWZmID0gKChzbGppdF9zdyl0YXJnZXRfYWRkciAtIChzbGppdF9zdykoaW5zdCAtIDEpKSA+PiAyOworCQlpZiAoZGlmZiA8PSBNQVhfRElTUCAmJiBkaWZmID49IE1JTl9ESVNQKSB7CisJCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9COworCQkJaW5zdC0tOworCQkJaWYgKGp1bXAtPmZsYWdzICYgSVNfQ09ORCkgeworCQkJCXNhdmVkX2luc3QgPSBpbnN0WzBdOworCQkJCWluc3RbMF0gPSBpbnN0WzFdIF4gKDEgPDwgMjgpOworCQkJCWluc3RbMV0gPSBzYXZlZF9pbnN0OworCQkJfSBlbHNlIHsKKwkJCQlpbnN0WzFdID0gaW5zdFswXTsKKwkJCQlpbnN0WzBdID0gQklDQyB8IERBKDB4OCk7CisJCQl9CisJCQlqdW1wLT5hZGRyID0gKHNsaml0X3V3KWluc3Q7CisJCQlyZXR1cm4gaW5zdCArIDE7CisJCX0KKwl9CisKKwlkaWZmID0gKChzbGppdF9zdyl0YXJnZXRfYWRkciAtIChzbGppdF9zdykoaW5zdCkpID4+IDI7CisJaWYgKGRpZmYgPD0gTUFYX0RJU1AgJiYgZGlmZiA+PSBNSU5fRElTUCkgeworCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9COworCQlpZiAoanVtcC0+ZmxhZ3MgJiBJU19DT05EKQorCQkJaW5zdFswXSBePSAoMSA8PCAyOCk7CisJCWVsc2UKKwkJCWluc3RbMF0gPSBCSUNDIHwgREEoMHg4KTsKKwkJaW5zdFsxXSA9IE5PUDsKKwkJanVtcC0+YWRkciA9IChzbGppdF91dylpbnN0OworCQlyZXR1cm4gaW5zdCArIDE7CisJfQorCisJcmV0dXJuIGNvZGVfcHRyOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCogc2xqaXRfZ2VuZXJhdGVfY29kZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQoreworCXN0cnVjdCBzbGppdF9tZW1vcnlfZnJhZ21lbnQgKmJ1ZjsKKwlzbGppdF9pbnMgKmNvZGU7CisJc2xqaXRfaW5zICpjb2RlX3B0cjsKKwlzbGppdF9pbnMgKmJ1Zl9wdHI7CisJc2xqaXRfaW5zICpidWZfZW5kOworCXNsaml0X3V3IHdvcmRfY291bnQ7CisJc2xqaXRfdXcgYWRkcjsKKworCXN0cnVjdCBzbGppdF9sYWJlbCAqbGFiZWw7CisJc3RydWN0IHNsaml0X2p1bXAgKmp1bXA7CisJc3RydWN0IHNsaml0X2NvbnN0ICpjb25zdF87CisKKwlDSEVDS19FUlJPUl9QVFIoKTsKKwlDSEVDS19QVFIoY2hlY2tfc2xqaXRfZ2VuZXJhdGVfY29kZShjb21waWxlcikpOworCXJldmVyc2VfYnVmKGNvbXBpbGVyKTsKKworCWNvZGUgPSAoc2xqaXRfaW5zKilTTEpJVF9NQUxMT0NfRVhFQyhjb21waWxlci0+c2l6ZSAqIHNpemVvZihzbGppdF9pbnMpKTsKKwlQVFJfRkFJTF9XSVRIX0VYRUNfSUYoY29kZSk7CisJYnVmID0gY29tcGlsZXItPmJ1ZjsKKworCWNvZGVfcHRyID0gY29kZTsKKwl3b3JkX2NvdW50ID0gMDsKKwlsYWJlbCA9IGNvbXBpbGVyLT5sYWJlbHM7CisJanVtcCA9IGNvbXBpbGVyLT5qdW1wczsKKwljb25zdF8gPSBjb21waWxlci0+Y29uc3RzOworCWRvIHsKKwkJYnVmX3B0ciA9IChzbGppdF9pbnMqKWJ1Zi0+bWVtb3J5OworCQlidWZfZW5kID0gYnVmX3B0ciArIChidWYtPnVzZWRfc2l6ZSA+PiAyKTsKKwkJZG8geworCQkJKmNvZGVfcHRyID0gKmJ1Zl9wdHIrKzsKKwkJCVNMSklUX0FTU0VSVCghbGFiZWwgfHwgbGFiZWwtPnNpemUgPj0gd29yZF9jb3VudCk7CisJCQlTTEpJVF9BU1NFUlQoIWp1bXAgfHwganVtcC0+YWRkciA+PSB3b3JkX2NvdW50KTsKKwkJCVNMSklUX0FTU0VSVCghY29uc3RfIHx8IGNvbnN0Xy0+YWRkciA+PSB3b3JkX2NvdW50KTsKKwkJCS8qIFRoZXNlIHN0cnVjdHVyZXMgYXJlIG9yZGVyZWQgYnkgdGhlaXIgYWRkcmVzcy4gKi8KKwkJCWlmIChsYWJlbCAmJiBsYWJlbC0+c2l6ZSA9PSB3b3JkX2NvdW50KSB7CisJCQkJLyogSnVzdCByZWNvcmRpbmcgdGhlIGFkZHJlc3MuICovCisJCQkJbGFiZWwtPmFkZHIgPSAoc2xqaXRfdXcpY29kZV9wdHI7CisJCQkJbGFiZWwtPnNpemUgPSBjb2RlX3B0ciAtIGNvZGU7CisJCQkJbGFiZWwgPSBsYWJlbC0+bmV4dDsKKwkJCX0KKwkJCWlmIChqdW1wICYmIGp1bXAtPmFkZHIgPT0gd29yZF9jb3VudCkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpCisJCQkJanVtcC0+YWRkciA9IChzbGppdF91dykoY29kZV9wdHIgLSAzKTsKKyNlbHNlCisJCQkJanVtcC0+YWRkciA9IChzbGppdF91dykoY29kZV9wdHIgLSA2KTsKKyNlbmRpZgorCQkJCWNvZGVfcHRyID0gZGV0ZWN0X2p1bXBfdHlwZShqdW1wLCBjb2RlX3B0ciwgY29kZSk7CisJCQkJanVtcCA9IGp1bXAtPm5leHQ7CisJCQl9CisJCQlpZiAoY29uc3RfICYmIGNvbnN0Xy0+YWRkciA9PSB3b3JkX2NvdW50KSB7CisJCQkJLyogSnVzdCByZWNvcmRpbmcgdGhlIGFkZHJlc3MuICovCisJCQkJY29uc3RfLT5hZGRyID0gKHNsaml0X3V3KWNvZGVfcHRyOworCQkJCWNvbnN0XyA9IGNvbnN0Xy0+bmV4dDsKKwkJCX0KKwkJCWNvZGVfcHRyICsrOworCQkJd29yZF9jb3VudCArKzsKKwkJfSB3aGlsZSAoYnVmX3B0ciA8IGJ1Zl9lbmQpOworCisJCWJ1ZiA9IGJ1Zi0+bmV4dDsKKwl9IHdoaWxlIChidWYpOworCisJaWYgKGxhYmVsICYmIGxhYmVsLT5zaXplID09IHdvcmRfY291bnQpIHsKKwkJbGFiZWwtPmFkZHIgPSAoc2xqaXRfdXcpY29kZV9wdHI7CisJCWxhYmVsLT5zaXplID0gY29kZV9wdHIgLSBjb2RlOworCQlsYWJlbCA9IGxhYmVsLT5uZXh0OworCX0KKworCVNMSklUX0FTU0VSVCghbGFiZWwpOworCVNMSklUX0FTU0VSVCghanVtcCk7CisJU0xKSVRfQVNTRVJUKCFjb25zdF8pOworCVNMSklUX0FTU0VSVChjb2RlX3B0ciAtIGNvZGUgPD0gKHNsaml0X3NpKWNvbXBpbGVyLT5zaXplKTsKKworCWp1bXAgPSBjb21waWxlci0+anVtcHM7CisJd2hpbGUgKGp1bXApIHsKKwkJZG8geworCQkJYWRkciA9IChqdW1wLT5mbGFncyAmIEpVTVBfTEFCRUwpID8ganVtcC0+dS5sYWJlbC0+YWRkciA6IGp1bXAtPnUudGFyZ2V0OworCQkJYnVmX3B0ciA9IChzbGppdF9pbnMqKWp1bXAtPmFkZHI7CisKKwkJCWlmIChqdW1wLT5mbGFncyAmIFBBVENIX0NBTEwpIHsKKwkJCQlhZGRyID0gKHNsaml0X3N3KShhZGRyIC0ganVtcC0+YWRkcikgPj4gMjsKKwkJCQlTTEpJVF9BU1NFUlQoKHNsaml0X3N3KWFkZHIgPD0gMHgxZmZmZmZmZiAmJiAoc2xqaXRfc3cpYWRkciA+PSAtMHgyMDAwMDAwMCk7CisJCQkJYnVmX3B0clswXSA9IENBTEwgfCAoYWRkciAmIDB4M2ZmZmZmZmYpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGp1bXAtPmZsYWdzICYgUEFUQ0hfQikgeworCQkJCWFkZHIgPSAoc2xqaXRfc3cpKGFkZHIgLSBqdW1wLT5hZGRyKSA+PiAyOworCQkJCVNMSklUX0FTU0VSVCgoc2xqaXRfc3cpYWRkciA8PSBNQVhfRElTUCAmJiAoc2xqaXRfc3cpYWRkciA+PSBNSU5fRElTUCk7CisJCQkJYnVmX3B0clswXSA9IChidWZfcHRyWzBdICYgfkRJU1BfTUFTSykgfCAoYWRkciAmIERJU1BfTUFTSyk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIFNldCB0aGUgZmllbGRzIG9mIGltbWVkaWF0ZSBsb2Fkcy4gKi8KKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfU1BBUkNfMzIgJiYgU0xKSVRfQ09ORklHX1NQQVJDXzMyKQorCQkJYnVmX3B0clswXSA9IChidWZfcHRyWzBdICYgMHhmZmMwMDAwMCkgfCAoKGFkZHIgPj4gMTApICYgMHgzZmZmZmYpOworCQkJYnVmX3B0clsxXSA9IChidWZfcHRyWzFdICYgMHhmZmZmZmMwMCkgfCAoYWRkciAmIDB4M2ZmKTsKKyNlbHNlCisjZXJyb3IgIkltcGxlbWVudGF0aW9uIHJlcXVpcmVkIgorI2VuZGlmCisJCX0gd2hpbGUgKDApOworCQlqdW1wID0ganVtcC0+bmV4dDsKKwl9CisKKworCWNvbXBpbGVyLT5lcnJvciA9IFNMSklUX0VSUl9DT01QSUxFRDsKKwljb21waWxlci0+ZXhlY3V0YWJsZV9zaXplID0gKGNvZGVfcHRyIC0gY29kZSkgKiBzaXplb2Yoc2xqaXRfaW5zKTsKKwlTTEpJVF9DQUNIRV9GTFVTSChjb2RlLCBjb2RlX3B0cik7CisJcmV0dXJuIGNvZGU7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIEVudHJ5LCBleGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQ3JlYXRlcyBhbiBpbmRleCBpbiBkYXRhX3RyYW5zZmVyX2luc3RzIGFycmF5LiAqLworI2RlZmluZSBMT0FEX0RBVEEJMHgwMQorI2RlZmluZSBXT1JEX0RBVEEJMHgwMAorI2RlZmluZSBCWVRFX0RBVEEJMHgwMgorI2RlZmluZSBIQUxGX0RBVEEJMHgwNAorI2RlZmluZSBJTlRfREFUQQkweDA2CisjZGVmaW5lIFNJR05FRF9EQVRBCTB4MDgKKy8qIFNlcGFyYXRlcyBpbnRlZ2VyIGFuZCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgR1BSX1JFRwkJMHgwZgorI2RlZmluZSBET1VCTEVfREFUQQkweDEwCisjZGVmaW5lIFNJTkdMRV9EQVRBCTB4MTIKKworI2RlZmluZSBNRU1fTUFTSwkweDFmCisKKyNkZWZpbmUgV1JJVEVfQkFDSwkweDAwMDIwCisjZGVmaW5lIEFSR19URVNUCTB4MDAwNDAKKyNkZWZpbmUgQUxUX0tFRVBfQ0FDSEUJMHgwMDA4MAorI2RlZmluZSBDVU1VTEFUSVZFX09QCTB4MDAxMDAKKyNkZWZpbmUgSU1NX09QCQkweDAwMjAwCisjZGVmaW5lIFNSQzJfSU1NCTB4MDA0MDAKKworI2RlZmluZSBSRUdfREVTVAkweDAwODAwCisjZGVmaW5lIFJFRzJfU09VUkNFCTB4MDEwMDAKKyNkZWZpbmUgU0xPV19TUkMxCTB4MDIwMDAKKyNkZWZpbmUgU0xPV19TUkMyCTB4MDQwMDAKKyNkZWZpbmUgU0xPV19ERVNUCTB4MDgwMDAKKworLyogU0VUX0ZMQUdTICgweDEwIDw8IDE5KSBhbHNvIGJlbG9uZyBoZXJlISAqLworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1NQQVJDXzMyICYmIFNMSklUX0NPTkZJR19TUEFSQ18zMikKKyNpbmNsdWRlICJzbGppdE5hdGl2ZVNQQVJDXzMyLmMiCisjZWxzZQorI2luY2x1ZGUgInNsaml0TmF0aXZlU1BBUkNfNjQuYyIKKyNlbmRpZgorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAorCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2VudGVyKGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSkpOworCXNldF9lbWl0X2VudGVyKGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSk7CisKKwlsb2NhbF9zaXplID0gKGxvY2FsX3NpemUgKyBTTEpJVF9MT0NBTFNfT0ZGU0VUICsgNykgJiB+MHg3OworCWNvbXBpbGVyLT5sb2NhbF9zaXplID0gbG9jYWxfc2l6ZTsKKworCWlmIChsb2NhbF9zaXplIDw9IFNJTU1fTUFYKSB7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTQVZFIHwgRChTTEpJVF9TUCkgfCBTMShTTEpJVF9TUCkgfCBJTU0oLWxvY2FsX3NpemUpLCBVTk1PVkFCTEVfSU5TKSk7CisJfQorCWVsc2UgeworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMSwgLWxvY2FsX3NpemUpKTsKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNBVkUgfCBEKFNMSklUX1NQKSB8IFMxKFNMSklUX1NQKSB8IFMyKFRNUF9SRUcxKSwgVU5NT1ZBQkxFX0lOUykpOworCX0KKworCS8qIEFyZ3VtZW50cyBhcmUgaW4gdGhlaXIgYXBwcm9wcmlhdGUgcmVnaXN0ZXJzLiAqLworCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAorCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9zZXRfY29udGV4dChjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKKwlzZXRfc2V0X2NvbnRleHQoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKTsKKworCWNvbXBpbGVyLT5sb2NhbF9zaXplID0gKGxvY2FsX3NpemUgKyBTTEpJVF9MT0NBTFNfT0ZGU0VUICsgNykgJiB+MHg3OworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfcmV0dXJuKGNvbXBpbGVyLCBvcCwgc3JjLCBzcmN3KSk7CisKKwlpZiAob3AgIT0gU0xKSVRfTU9WIHx8ICFGQVNUX0lTX1JFRyhzcmMpKSB7CisJCUZBSUxfSUYoZW1pdF9tb3ZfYmVmb3JlX3JldHVybihjb21waWxlciwgb3AsIHNyYywgc3JjdykpOworCQlzcmMgPSBTTEpJVF9SMDsKKwl9CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgSk1QTCB8IEQoMCkgfCBTMUEoMzEpIHwgSU1NKDgpLCBVTk1PVkFCTEVfSU5TKSk7CisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgUkVTVE9SRSB8IEQoU0xKSVRfUjApIHwgUzEoc3JjKSB8IFMyKDApLCBVTk1PVkFCTEVfSU5TKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgT3BlcmF0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1NQQVJDXzMyICYmIFNMSklUX0NPTkZJR19TUEFSQ18zMikKKyNkZWZpbmUgQVJDSF8zMl82NChhLCBiKQlhCisjZWxzZQorI2RlZmluZSBBUkNIXzMyXzY0KGEsIGIpCWIKKyNlbmRpZgorCitzdGF0aWMgU0xKSVRfQ09OU1Qgc2xqaXRfaW5zIGRhdGFfdHJhbnNmZXJfaW5zdHNbMTYgKyA0XSA9IHsKKy8qIHUgdyBzICovIEFSQ0hfMzJfNjQoT1BDMSgzKSB8IE9QQzMoMHgwNCkgLyogc3R3ICovLCBPUEMxKDMpIHwgT1BDMygweDBlKSAvKiBzdHggKi8pLAorLyogdSB3IGwgKi8gQVJDSF8zMl82NChPUEMxKDMpIHwgT1BDMygweDAwKSAvKiBsZHV3ICovLCBPUEMxKDMpIHwgT1BDMygweDBiKSAvKiBsZHggKi8pLAorLyogdSBiIHMgKi8gT1BDMSgzKSB8IE9QQzMoMHgwNSkgLyogc3RiICovLAorLyogdSBiIGwgKi8gT1BDMSgzKSB8IE9QQzMoMHgwMSkgLyogbGR1YiAqLywKKy8qIHUgaCBzICovIE9QQzEoMykgfCBPUEMzKDB4MDYpIC8qIHN0aCAqLywKKy8qIHUgaCBsICovIE9QQzEoMykgfCBPUEMzKDB4MDIpIC8qIGxkdWggKi8sCisvKiB1IGkgcyAqLyBPUEMxKDMpIHwgT1BDMygweDA0KSAvKiBzdHcgKi8sCisvKiB1IGkgbCAqLyBPUEMxKDMpIHwgT1BDMygweDAwKSAvKiBsZHV3ICovLAorCisvKiBzIHcgcyAqLyBBUkNIXzMyXzY0KE9QQzEoMykgfCBPUEMzKDB4MDQpIC8qIHN0dyAqLywgT1BDMSgzKSB8IE9QQzMoMHgwZSkgLyogc3R4ICovKSwKKy8qIHMgdyBsICovIEFSQ0hfMzJfNjQoT1BDMSgzKSB8IE9QQzMoMHgwMCkgLyogbGR1dyAqLywgT1BDMSgzKSB8IE9QQzMoMHgwYikgLyogbGR4ICovKSwKKy8qIHMgYiBzICovIE9QQzEoMykgfCBPUEMzKDB4MDUpIC8qIHN0YiAqLywKKy8qIHMgYiBsICovIE9QQzEoMykgfCBPUEMzKDB4MDkpIC8qIGxkc2IgKi8sCisvKiBzIGggcyAqLyBPUEMxKDMpIHwgT1BDMygweDA2KSAvKiBzdGggKi8sCisvKiBzIGggbCAqLyBPUEMxKDMpIHwgT1BDMygweDBhKSAvKiBsZHNoICovLAorLyogcyBpIHMgKi8gT1BDMSgzKSB8IE9QQzMoMHgwNCkgLyogc3R3ICovLAorLyogcyBpIGwgKi8gQVJDSF8zMl82NChPUEMxKDMpIHwgT1BDMygweDAwKSAvKiBsZHV3ICovLCBPUEMxKDMpIHwgT1BDMygweDA4KSAvKiBsZHN3ICovKSwKKworLyogZCAgIHMgKi8gT1BDMSgzKSB8IE9QQzMoMHgyNyksCisvKiBkICAgbCAqLyBPUEMxKDMpIHwgT1BDMygweDIzKSwKKy8qIHMgICBzICovIE9QQzEoMykgfCBPUEMzKDB4MjQpLAorLyogcyAgIGwgKi8gT1BDMSgzKSB8IE9QQzMoMHgyMCksCit9OworCisjdW5kZWYgQVJDSF8zMl82NAorCisvKiBDYW4gcGVyZm9ybSBhbiBvcGVyYXRpb24gdXNpbmcgYXQgbW9zdCAxIGluc3RydWN0aW9uLiAqLworc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmdfZmFzdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCit7CisJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CisKKwlpZiAoIShmbGFncyAmIFdSSVRFX0JBQ0spIHx8ICEoYXJnICYgUkVHX01BU0spKSB7CisJCWlmICgoIShhcmcgJiBPRkZTX1JFR19NQVNLKSAmJiBhcmd3IDw9IFNJTU1fTUFYICYmIGFyZ3cgPj0gU0lNTV9NSU4pCisJCQkJfHwgKChhcmcgJiBPRkZTX1JFR19NQVNLKSAmJiAoYXJndyAmIDB4MykgPT0gMCkpIHsKKwkJCS8qIFdvcmtzIGZvciBib3RoIGFic291bHRlIGFuZCByZWxhdGl2ZSBhZGRyZXNzZXMgKGltbWVkaWF0ZSBjYXNlKS4gKi8KKwkJCWlmIChTTEpJVF9VTkxJS0VMWShmbGFncyAmIEFSR19URVNUKSkKKwkJCQlyZXR1cm4gMTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBkYXRhX3RyYW5zZmVyX2luc3RzW2ZsYWdzICYgTUVNX01BU0tdCisJCQkJfCAoKGZsYWdzICYgTUVNX01BU0spIDw9IEdQUl9SRUcgPyBEKHJlZykgOiBEQShyZWcpKQorCQkJCXwgUzEoYXJnICYgUkVHX01BU0spIHwgKChhcmcgJiBPRkZTX1JFR19NQVNLKSA/IFMyKE9GRlNfUkVHKGFyZykpIDogSU1NKGFyZ3cpKSwKKwkJCQkoKGZsYWdzICYgTUVNX01BU0spIDw9IEdQUl9SRUcgJiYgKGZsYWdzICYgTE9BRF9EQVRBKSkgPyBEUihyZWcpIDogTU9WQUJMRV9JTlMpKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogU2VlIGdldHB1dF9hcmcgYmVsb3cuCisgICBOb3RlOiBjYW5fY2FjaGUgaXMgY2FsbGVkIG9ubHkgZm9yIGJpbmFyeSBvcGVyYXRvcnMuIFRob3NlCisgICBvcGVyYXRvcnMgYWx3YXlzIHVzZXMgd29yZCBhcmd1bWVudHMgd2l0aG91dCB3cml0ZSBiYWNrLiAqLworc3RhdGljIHNsaml0X3NpIGNhbl9jYWNoZShzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3csIHNsaml0X3NpIG5leHRfYXJnLCBzbGppdF9zdyBuZXh0X2FyZ3cpCit7CisJU0xKSVRfQVNTRVJUKChhcmcgJiBTTEpJVF9NRU0pICYmIChuZXh0X2FyZyAmIFNMSklUX01FTSkpOworCisJLyogU2ltcGxlIG9wZXJhdGlvbiBleGNlcHQgZm9yIHVwZGF0ZXMuICovCisJaWYgKGFyZyAmIE9GRlNfUkVHX01BU0spIHsKKwkJYXJndyAmPSAweDM7CisJCVNMSklUX0FTU0VSVChhcmd3KTsKKwkJbmV4dF9hcmd3ICY9IDB4MzsKKwkJaWYgKChhcmcgJiBPRkZTX1JFR19NQVNLKSA9PSAobmV4dF9hcmcgJiBPRkZTX1JFR19NQVNLKSAmJiBhcmd3ID09IG5leHRfYXJndykKKwkJCXJldHVybiAxOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKChuZXh0X2FyZ3cgLSBhcmd3KSA8PSBTSU1NX01BWCAmJiAobmV4dF9hcmd3IC0gYXJndykgPj0gU0lNTV9NSU4pKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKworLyogRW1pdCB0aGUgbmVjZXNzYXJ5IGluc3RydWN0aW9ucy4gU2VlIGNhbl9jYWNoZSBhYm92ZS4gKi8KK3N0YXRpYyBzbGppdF9zaSBnZXRwdXRfYXJnKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfc2kgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKK3sKKwlzbGppdF9zaSBiYXNlLCBhcmcyLCBkZWxheV9zbG90OworCXNsaml0X2lucyBkZXN0OworCisJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CisJaWYgKCEobmV4dF9hcmcgJiBTTEpJVF9NRU0pKSB7CisJCW5leHRfYXJnID0gMDsKKwkJbmV4dF9hcmd3ID0gMDsKKwl9CisKKwliYXNlID0gYXJnICYgUkVHX01BU0s7CisJaWYgKFNMSklUX1VOTElLRUxZKGFyZyAmIE9GRlNfUkVHX01BU0spKSB7CisJCWFyZ3cgJj0gMHgzOworCQlTTEpJVF9BU1NFUlQoYXJndyAhPSAwKTsKKworCQkvKiBVc2luZyB0aGUgY2FjaGUuICovCisJCWlmICgoKFNMSklUX01FTSB8IChhcmcgJiBPRkZTX1JFR19NQVNLKSkgPT0gY29tcGlsZXItPmNhY2hlX2FyZykgJiYgKGFyZ3cgPT0gY29tcGlsZXItPmNhY2hlX2FyZ3cpKQorCQkJYXJnMiA9IFRNUF9SRUczOworCQllbHNlIHsKKwkJCWlmICgoYXJnICYgT0ZGU19SRUdfTUFTSykgPT0gKG5leHRfYXJnICYgT0ZGU19SRUdfTUFTSykgJiYgYXJndyA9PSAobmV4dF9hcmd3ICYgMHgzKSkgeworCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBTTEpJVF9NRU0gfCAoYXJnICYgT0ZGU19SRUdfTUFTSyk7CisJCQkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCQkJCWFyZzIgPSBUTVBfUkVHMzsKKwkJCX0KKwkJCWVsc2UgaWYgKChmbGFncyAmIExPQURfREFUQSkgJiYgKChmbGFncyAmIE1FTV9NQVNLKSA8PSBHUFJfUkVHKSAmJiByZWcgIT0gYmFzZSAmJiByZWcgIT0gT0ZGU19SRUcoYXJnKSkKKwkJCQlhcmcyID0gcmVnOworCQkJZWxzZSAvKiBJdCBtdXN0IGJlIGEgbW92IG9wZXJhdGlvbiwgc28gdG1wMSBtdXN0IGJlIGZyZWUgdG8gdXNlLiAqLworCQkJCWFyZzIgPSBUTVBfUkVHMTsKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTExfVyB8IEQoYXJnMikgfCBTMShPRkZTX1JFRyhhcmcpKSB8IElNTV9BUkcgfCBhcmd3LCBEUihhcmcyKSkpOworCQl9CisJfQorCWVsc2UgeworCQkvKiBVc2luZyB0aGUgY2FjaGUuICovCisJCWlmICgoY29tcGlsZXItPmNhY2hlX2FyZyA9PSBTTEpJVF9NRU0pICYmIChhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cpIDw9IFNJTU1fTUFYICYmIChhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cpID49IFNJTU1fTUlOKSB7CisJCQlpZiAoYXJndyAhPSBjb21waWxlci0+Y2FjaGVfYXJndykgeworCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBBREQgfCBEKFRNUF9SRUczKSB8IFMxKFRNUF9SRUczKSB8IElNTShhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cpLCBEUihUTVBfUkVHMykpKTsKKwkJCQljb21waWxlci0+Y2FjaGVfYXJndyA9IGFyZ3c7CisJCQl9CisJCQlhcmcyID0gVE1QX1JFRzM7CisJCX0gZWxzZSB7CisJCQlpZiAoKG5leHRfYXJndyAtIGFyZ3cpIDw9IFNJTU1fTUFYICYmIChuZXh0X2FyZ3cgLSBhcmd3KSA+PSBTSU1NX01JTikgeworCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBTTEpJVF9NRU07CisJCQkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCQkJCWFyZzIgPSBUTVBfUkVHMzsKKwkJCX0KKwkJCWVsc2UgaWYgKChmbGFncyAmIExPQURfREFUQSkgJiYgKChmbGFncyAmIE1FTV9NQVNLKSA8PSBHUFJfUkVHKSAmJiByZWcgIT0gYmFzZSkKKwkJCQlhcmcyID0gcmVnOworCQkJZWxzZSAvKiBJdCBtdXN0IGJlIGEgbW92IG9wZXJhdGlvbiwgc28gdG1wMSBtdXN0IGJlIGZyZWUgdG8gdXNlLiAqLworCQkJCWFyZzIgPSBUTVBfUkVHMTsKKwkJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIGFyZzIsIGFyZ3cpKTsKKwkJfQorCX0KKworCWRlc3QgPSAoKGZsYWdzICYgTUVNX01BU0spIDw9IEdQUl9SRUcgPyBEKHJlZykgOiBEQShyZWcpKTsKKwlkZWxheV9zbG90ID0gKChmbGFncyAmIE1FTV9NQVNLKSA8PSBHUFJfUkVHICYmIChmbGFncyAmIExPQURfREFUQSkpID8gRFIocmVnKSA6IE1PVkFCTEVfSU5TOworCWlmICghYmFzZSkKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSB8IGRlc3QgfCBTMShhcmcyKSB8IElNTSgwKSwgZGVsYXlfc2xvdCk7CisJaWYgKCEoZmxhZ3MgJiBXUklURV9CQUNLKSkKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSB8IGRlc3QgfCBTMShiYXNlKSB8IFMyKGFyZzIpLCBkZWxheV9zbG90KTsKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSB8IGRlc3QgfCBTMShiYXNlKSB8IFMyKGFyZzIpLCBkZWxheV9zbG90KSk7CisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgQUREIHwgRChiYXNlKSB8IFMxKGJhc2UpIHwgUzIoYXJnMiksIERSKGJhc2UpKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X29wX21lbShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCit7CisJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnLCBhcmd3KSkKKwkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZywgYXJndywgMCwgMCk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9vcF9tZW0yKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWcsIHNsaml0X3NpIGFyZzEsIHNsaml0X3N3IGFyZzF3LCBzbGppdF9zaSBhcmcyLCBzbGppdF9zdyBhcmcydykKK3sKKwlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcxLCBhcmcxdykpCisJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CisJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzLCByZWcsIGFyZzEsIGFyZzF3LCBhcmcyLCBhcmcydyk7Cit9CisKK3N0YXRpYyBzbGppdF9zaSBlbWl0X29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBmbGFncywKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJLyogYXJnMSBnb2VzIHRvIFRNUF9SRUcxIG9yIHNyYyByZWcKKwkgICBhcmcyIGdvZXMgdG8gVE1QX1JFRzIsIGltbSBvciBzcmMgcmVnCisJICAgVE1QX1JFRzMgY2FuIGJlIHVzZWQgZm9yIGNhY2hpbmcKKwkgICByZXN1bHQgZ29lcyB0byBUTVBfUkVHMiwgc28gcHV0IHJlc3VsdCBjYW4gdXNlIFRNUF9SRUcxIGFuZCBUTVBfUkVHMy4gKi8KKwlzbGppdF9zaSBkc3RfciA9IFRNUF9SRUcyOworCXNsaml0X3NpIHNyYzFfcjsKKwlzbGppdF9zdyBzcmMyX3IgPSAwOworCXNsaml0X3NpIHN1Z2dfc3JjMl9yID0gVE1QX1JFRzI7CisKKwlpZiAoIShmbGFncyAmIEFMVF9LRUVQX0NBQ0hFKSkgeworCQljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCX0KKworCWlmIChTTEpJVF9VTkxJS0VMWShkc3QgPT0gU0xKSVRfVU5VU0VEKSkgeworCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kgJiYgIShzcmMyICYgU0xKSVRfTUVNKSkKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKwllbHNlIGlmIChGQVNUX0lTX1JFRyhkc3QpKSB7CisJCWRzdF9yID0gZHN0OworCQlmbGFncyB8PSBSRUdfREVTVDsKKwkJaWYgKG9wID49IFNMSklUX01PViAmJiBvcCA8PSBTTEpJVF9NT1ZVX1NJKQorCQkJc3VnZ19zcmMyX3IgPSBkc3RfcjsKKwl9CisJZWxzZSBpZiAoKGRzdCAmIFNMSklUX01FTSkgJiYgIWdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MgfCBBUkdfVEVTVCwgVE1QX1JFRzEsIGRzdCwgZHN0dykpCisJCWZsYWdzIHw9IFNMT1dfREVTVDsKKworCWlmIChmbGFncyAmIElNTV9PUCkgeworCQlpZiAoKHNyYzIgJiBTTEpJVF9JTU0pICYmIHNyYzJ3KSB7CisJCQlpZiAoc3JjMncgPD0gU0lNTV9NQVggJiYgc3JjMncgPj0gU0lNTV9NSU4pIHsKKwkJCQlmbGFncyB8PSBTUkMyX0lNTTsKKwkJCQlzcmMyX3IgPSBzcmMydzsKKwkJCX0KKwkJfQorCQlpZiAoIShmbGFncyAmIFNSQzJfSU1NKSAmJiAoZmxhZ3MgJiBDVU1VTEFUSVZFX09QKSAmJiAoc3JjMSAmIFNMSklUX0lNTSkgJiYgc3JjMXcpIHsKKwkJCWlmIChzcmMxdyA8PSBTSU1NX01BWCAmJiBzcmMxdyA+PSBTSU1NX01JTikgeworCQkJCWZsYWdzIHw9IFNSQzJfSU1NOworCQkJCXNyYzJfciA9IHNyYzF3OworCisJCQkJLyogQW5kIHN3YXAgYXJndW1lbnRzLiAqLworCQkJCXNyYzEgPSBzcmMyOworCQkJCXNyYzF3ID0gc3JjMnc7CisJCQkJc3JjMiA9IFNMSklUX0lNTTsKKwkJCQkvKiBzcmMydyA9IHNyYzJfciB1bm5lZWRlZC4gKi8KKwkJCX0KKwkJfQorCX0KKworCS8qIFNvdXJjZSAxLiAqLworCWlmIChGQVNUX0lTX1JFRyhzcmMxKSkKKwkJc3JjMV9yID0gc3JjMTsKKwllbHNlIGlmIChzcmMxICYgU0xKSVRfSU1NKSB7CisJCWlmIChzcmMxdykgeworCQkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzEsIHNyYzF3KSk7CisJCQlzcmMxX3IgPSBUTVBfUkVHMTsKKwkJfQorCQllbHNlCisJCQlzcmMxX3IgPSAwOworCX0KKwllbHNlIHsKKwkJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MgfCBMT0FEX0RBVEEsIFRNUF9SRUcxLCBzcmMxLCBzcmMxdykpCisJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCWVsc2UKKwkJCWZsYWdzIHw9IFNMT1dfU1JDMTsKKwkJc3JjMV9yID0gVE1QX1JFRzE7CisJfQorCisJLyogU291cmNlIDIuICovCisJaWYgKEZBU1RfSVNfUkVHKHNyYzIpKSB7CisJCXNyYzJfciA9IHNyYzI7CisJCWZsYWdzIHw9IFJFRzJfU09VUkNFOworCQlpZiAoIShmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSkKKwkJCWRzdF9yID0gc3JjMl9yOworCX0KKwllbHNlIGlmIChzcmMyICYgU0xKSVRfSU1NKSB7CisJCWlmICghKGZsYWdzICYgU1JDMl9JTU0pKSB7CisJCQlpZiAoc3JjMncpIHsKKwkJCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBzdWdnX3NyYzJfciwgc3JjMncpKTsKKwkJCQlzcmMyX3IgPSBzdWdnX3NyYzJfcjsKKwkJCX0KKwkJCWVsc2UgeworCQkJCXNyYzJfciA9IDA7CisJCQkJaWYgKChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSkgJiYgKGRzdCAmIFNMSklUX01FTSkpCisJCQkJCWRzdF9yID0gMDsKKwkJCX0KKwkJfQorCX0KKwllbHNlIHsKKwkJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MgfCBMT0FEX0RBVEEsIHN1Z2dfc3JjMl9yLCBzcmMyLCBzcmMydykpCisJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCWVsc2UKKwkJCWZsYWdzIHw9IFNMT1dfU1JDMjsKKwkJc3JjMl9yID0gc3VnZ19zcmMyX3I7CisJfQorCisJaWYgKChmbGFncyAmIChTTE9XX1NSQzEgfCBTTE9XX1NSQzIpKSA9PSAoU0xPV19TUkMxIHwgU0xPV19TUkMyKSkgeworCQlTTEpJVF9BU1NFUlQoc3JjMl9yID09IFRNUF9SRUcyKTsKKwkJaWYgKCFjYW5fY2FjaGUoc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSAmJiBjYW5fY2FjaGUoc3JjMSwgc3JjMXcsIGRzdCwgZHN0dykpIHsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MgfCBMT0FEX0RBVEEsIFRNUF9SRUcyLCBzcmMyLCBzcmMydywgc3JjMSwgc3JjMXcpKTsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgZmxhZ3MgfCBMT0FEX0RBVEEsIFRNUF9SRUcxLCBzcmMxLCBzcmMxdywgZHN0LCBkc3R3KSk7CisJCX0KKwkJZWxzZSB7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMiwgc3JjMiwgc3JjMncsIGRzdCwgZHN0dykpOworCQl9CisJfQorCWVsc2UgaWYgKGZsYWdzICYgU0xPV19TUkMxKQorCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMSwgc3JjMSwgc3JjMXcsIGRzdCwgZHN0dykpOworCWVsc2UgaWYgKGZsYWdzICYgU0xPV19TUkMyKQorCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzIHwgTE9BRF9EQVRBLCBzdWdnX3NyYzJfciwgc3JjMiwgc3JjMncsIGRzdCwgZHN0dykpOworCisJRkFJTF9JRihlbWl0X3NpbmdsZV9vcChjb21waWxlciwgb3AsIGZsYWdzLCBkc3Rfciwgc3JjMV9yLCBzcmMyX3IpKTsKKworCWlmIChkc3QgJiBTTEpJVF9NRU0pIHsKKwkJaWYgKCEoZmxhZ3MgJiBTTE9XX0RFU1QpKSB7CisJCQlnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzLCBkc3RfciwgZHN0LCBkc3R3KTsKKwkJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CisJCX0KKwkJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzLCBkc3RfciwgZHN0LCBkc3R3LCAwLCAwKTsKKwl9CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AwKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wKQoreworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDAoY29tcGlsZXIsIG9wKSk7CisKKwlvcCA9IEdFVF9PUENPREUob3ApOworCXN3aXRjaCAob3ApIHsKKwljYXNlIFNMSklUX0JSRUFLUE9JTlQ6CisJCXJldHVybiBwdXNoX2luc3QoY29tcGlsZXIsIFRBLCBVTk1PVkFCTEVfSU5TKTsKKwljYXNlIFNMSklUX05PUDoKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgTk9QLCBVTk1PVkFCTEVfSU5TKTsKKwljYXNlIFNMSklUX0xVTVVMOgorCWNhc2UgU0xKSVRfTFNNVUw6CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1NQQVJDXzMyICYmIFNMSklUX0NPTkZJR19TUEFSQ18zMikKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIChvcCA9PSBTTEpJVF9MVU1VTCA/IFVNVUwgOiBTTVVMKSB8IEQoU0xKSVRfUjApIHwgUzEoU0xKSVRfUjApIHwgUzIoU0xKSVRfUjEpLCBEUihTTEpJVF9SMCkpKTsKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgUkRZIHwgRChTTEpJVF9SMSksIERSKFNMSklUX1IxKSk7CisjZWxzZQorI2Vycm9yICJJbXBsZW1lbnRhdGlvbiByZXF1aXJlZCIKKyNlbmRpZgorCWNhc2UgU0xKSVRfVURJVk1PRDoKKwljYXNlIFNMSklUX1NESVZNT0Q6CisJY2FzZSBTTEpJVF9VRElWSToKKwljYXNlIFNMSklUX1NESVZJOgorCQlTTEpJVF9DT01QSUxFX0FTU0VSVCgoU0xKSVRfVURJVk1PRCAmIDB4MikgPT0gMCAmJiBTTEpJVF9VRElWSSAtIDB4MiA9PSBTTEpJVF9VRElWTU9ELCBiYWRfZGl2X29wY29kZV9hc3NpZ25tZW50cyk7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1NQQVJDXzMyICYmIFNMSklUX0NPTkZJR19TUEFSQ18zMikKKwkJaWYgKChvcCB8IDB4MikgPT0gU0xKSVRfVURJVkkpCisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgV1JZIHwgUzEoMCksIE1PVkFCTEVfSU5TKSk7CisJCWVsc2UgeworCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNSQSB8IEQoVE1QX1JFRzEpIHwgUzEoU0xKSVRfUjApIHwgSU1NKDMxKSwgRFIoVE1QX1JFRzEpKSk7CisJCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgV1JZIHwgUzEoVE1QX1JFRzEpLCBNT1ZBQkxFX0lOUykpOworCQl9CisJCWlmIChvcCA8PSBTTEpJVF9TRElWTU9EKQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE9SIHwgRChUTVBfUkVHMikgfCBTMSgwKSB8IFMyKFNMSklUX1IwKSwgRFIoVE1QX1JFRzIpKSk7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCAoKG9wIHwgMHgyKSA9PSBTTEpJVF9VRElWSSA/IFVESVYgOiBTRElWKSB8IEQoU0xKSVRfUjApIHwgUzEoU0xKSVRfUjApIHwgUzIoU0xKSVRfUjEpLCBEUihTTEpJVF9SMCkpKTsKKwkJaWYgKG9wID49IFNMSklUX1VESVZJKQorCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTTVVMIHwgRChTTEpJVF9SMSkgfCBTMShTTEpJVF9SMCkgfCBTMihTTEpJVF9SMSksIERSKFNMSklUX1IxKSkpOworCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTVUIgfCBEKFNMSklUX1IxKSB8IFMxKFRNUF9SRUcyKSB8IFMyKFNMSklUX1IxKSwgRFIoU0xKSVRfUjEpKTsKKyNlbHNlCisjZXJyb3IgIkltcGxlbWVudGF0aW9uIHJlcXVpcmVkIgorI2VuZGlmCisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXNsaml0X3NpIGZsYWdzID0gR0VUX0ZMQUdTKG9wKSA/IFNFVF9GTEFHUyA6IDA7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AxKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOworCisJb3AgPSBHRVRfT1BDT0RFKG9wKTsKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBTTEpJVF9NT1Y6CisJY2FzZSBTTEpJVF9NT1ZfUDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgZmxhZ3MgfCBXT1JEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisKKwljYXNlIFNMSklUX01PVl9VSToKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VSSwgZmxhZ3MgfCBJTlRfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WX1NJOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NJLCBmbGFncyB8IElOVF9EQVRBIHwgU0lHTkVEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisKKwljYXNlIFNMSklUX01PVl9VQjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VQiwgZmxhZ3MgfCBCWVRFX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWIpc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZfU0I6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0IsIGZsYWdzIHwgQllURV9EQVRBIHwgU0lHTkVEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfc2Ipc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZfVUg6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVUgsIGZsYWdzIHwgSEFMRl9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3VoKXNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WX1NIOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NILCBmbGFncyB8IEhBTEZfREFUQSB8IFNJR05FRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3NoKXNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WVToKKwljYXNlIFNMSklUX01PVlVfUDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgZmxhZ3MgfCBXT1JEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZVX1VJOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VJLCBmbGFncyB8IElOVF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WVV9TSToKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TSSwgZmxhZ3MgfCBJTlRfREFUQSB8IFNJR05FRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WVV9VQjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VQiwgZmxhZ3MgfCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3ViKXNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WVV9TQjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TQiwgZmxhZ3MgfCBCWVRFX0RBVEEgfCBTSUdORURfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfc2Ipc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZVX1VIOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VILCBmbGFncyB8IEhBTEZfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWgpc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZVX1NIOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NILCBmbGFncyB8IEhBTEZfREFUQSB8IFNJR05FRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zaClzcmN3IDogc3Jjdyk7CisKKwljYXNlIFNMSklUX05PVDoKKwljYXNlIFNMSklUX0NMWjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCBmbGFncywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfTkVHOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfU1VCLCBmbGFncyB8IElNTV9PUCwgZHN0LCBkc3R3LCBTTEpJVF9JTU0sIDAsIHNyYywgc3Jjdyk7CisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJc2xqaXRfc2kgZmxhZ3MgPSBHRVRfRkxBR1Mob3ApID8gU0VUX0ZMQUdTIDogMDsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDIoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYzEsIHNyYzF3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYzIsIHNyYzJ3KTsKKworCW9wID0gR0VUX09QQ09ERShvcCk7CisJc3dpdGNoIChvcCkgeworCWNhc2UgU0xKSVRfQUREOgorCWNhc2UgU0xKSVRfQUREQzoKKwljYXNlIFNMSklUX01VTDoKKwljYXNlIFNMSklUX0FORDoKKwljYXNlIFNMSklUX09SOgorCWNhc2UgU0xKSVRfWE9SOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AsIGZsYWdzIHwgQ1VNVUxBVElWRV9PUCB8IElNTV9PUCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOworCisJY2FzZSBTTEpJVF9TVUI6CisJY2FzZSBTTEpJVF9TVUJDOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AsIGZsYWdzIHwgSU1NX09QLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX1NITDoKKwljYXNlIFNMSklUX0xTSFI6CisJY2FzZSBTTEpJVF9BU0hSOgorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpCisJCWlmIChzcmMyICYgU0xKSVRfSU1NKQorCQkJc3JjMncgJj0gMHgxZjsKKyNlbHNlCisJCVNMSklUX0FTU0VSVF9TVE9QKCk7CisjZW5kaWYKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCBmbGFncyB8IElNTV9PUCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOworCX0KKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHNsaml0X3NpIHJlZykKK3sKKwlDSEVDS19SRUdfSU5ERVgoY2hlY2tfc2xqaXRfZ2V0X3JlZ2lzdGVyX2luZGV4KHJlZykpOworCXJldHVybiByZWdfbWFwW3JlZ107Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQoreworCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CisJcmV0dXJuIHJlZyA8PCAxOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9jdXN0b20oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwl2b2lkICppbnN0cnVjdGlvbiwgc2xqaXRfc2kgc2l6ZSkKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgc2l6ZSkpOworCisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgKihzbGppdF9pbnMqKWluc3RydWN0aW9uLCBVTk1PVkFCTEVfSU5TKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgRmxvYXRpbmcgcG9pbnQgb3BlcmF0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfaXNfZnB1X2F2YWlsYWJsZSh2b2lkKQoreworI2lmZGVmIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEUKKwlyZXR1cm4gU0xKSVRfSVNfRlBVX0FWQUlMQUJMRTsKKyNlbHNlCisJLyogQXZhaWxhYmxlIGJ5IGRlZmF1bHQuICovCisJcmV0dXJuIDE7CisjZW5kaWYKK30KKworI2RlZmluZSBGTE9BVF9EQVRBKG9wKSAoRE9VQkxFX0RBVEEgfCAoKG9wICYgU0xKSVRfU0lOR0xFX09QKSA+PiA3KSkKKyNkZWZpbmUgU0VMRUNUX0ZPUChvcCwgc2luZ2xlLCBkb3VibGUpICgob3AgJiBTTEpJVF9TSU5HTEVfT1ApID8gc2luZ2xlIDogZG91YmxlKQorI2RlZmluZSBGTE9BVF9UTVBfTUVNX09GRlNFVCAoMjIgKiBzaXplb2Yoc2xqaXRfc3cpKQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jb252d19mcm9tZChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzEsIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CisJCXNyYyA9IFRNUF9GUkVHMTsKKwl9CisJZWxzZQorCQlzcmMgPDw9IDE7CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX0ZPUChvcCwgRlNUT0ksIEZEVE9JKSB8IERBKFRNUF9GUkVHMSkgfCBTMkEoc3JjKSwgTU9WQUJMRV9JTlMpKTsKKworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWlmIChGQVNUX0lTX1JFRyhkc3QpKSB7CisJCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBTSU5HTEVfREFUQSwgVE1QX0ZSRUcxLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVQsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBGTE9BVF9UTVBfTUVNX09GRlNFVCkpOworCQlyZXR1cm4gZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBXT1JEX0RBVEEgfCBMT0FEX0RBVEEsIGRzdCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIEZMT0FUX1RNUF9NRU1fT0ZGU0VULCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgRkxPQVRfVE1QX01FTV9PRkZTRVQpOworCX0KKworCS8qIFN0b3JlIHRoZSBpbnRlZ2VyIHZhbHVlIGZyb20gYSBWRlAgcmVnaXN0ZXIuICovCisJcmV0dXJuIGVtaXRfb3BfbWVtMihjb21waWxlciwgU0lOR0xFX0RBVEEsIFRNUF9GUkVHMSwgZHN0LCBkc3R3LCAwLCAwKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY29udmRfZnJvbXcoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyAoZHN0IDw8IDEpIDogVE1QX0ZSRUcxOworCisJaWYgKHNyYyAmIFNMSklUX0lNTSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01JKQorCQkJc3JjdyA9IChzbGppdF9zaSlzcmN3OworI2VuZGlmCisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9SRUcxLCBzcmN3KSk7CisJCXNyYyA9IFRNUF9SRUcxOworCQlzcmN3ID0gMDsKKwl9CisKKwlpZiAoRkFTVF9JU19SRUcoc3JjKSkgeworCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgV09SRF9EQVRBLCBzcmMsIFNMSklUX01FTTEoU0xKSVRfU1ApLCBGTE9BVF9UTVBfTUVNX09GRlNFVCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIEZMT0FUX1RNUF9NRU1fT0ZGU0VUKSk7CisJCXNyYyA9IFNMSklUX01FTTEoU0xKSVRfU1ApOworCQlzcmN3ID0gRkxPQVRfVE1QX01FTV9PRkZTRVQ7CisJfQorCisJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIFNJTkdMRV9EQVRBIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzEsIHNyYywgc3JjdywgZHN0LCBkc3R3KSk7CisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9GT1Aob3AsIEZJVE9TLCBGSVRPRCkgfCBEQShkc3RfcikgfCBTMkEoVE1QX0ZSRUcxKSwgTU9WQUJMRV9JTlMpKTsKKworCWlmIChkc3QgJiBTTEpJVF9NRU0pCisJCXJldHVybiBlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApLCBUTVBfRlJFRzEsIGRzdCwgZHN0dywgMCwgMCk7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxX2NtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlpZiAoc3JjMSAmIFNMSklUX01FTSkgeworCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJCXNyYzEgPSBUTVBfRlJFRzE7CisJfQorCWVsc2UKKwkJc3JjMSA8PD0gMTsKKworCWlmIChzcmMyICYgU0xKSVRfTUVNKSB7CisJCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcyLCBzcmMyLCBzcmMydywgMCwgMCkpOworCQlzcmMyID0gVE1QX0ZSRUcyOworCX0KKwllbHNlCisJCXNyYzIgPDw9IDE7CisKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfRk9QKG9wLCBGQ01QUywgRkNNUEQpIHwgUzFBKHNyYzEpIHwgUzJBKHNyYzIpLCBGQ0NfSVNfU0VUIHwgTU9WQUJMRV9JTlMpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc2xqaXRfc2kgZHN0X3I7CisKKwlDSEVDS19FUlJPUigpOworCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSAwOworCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gMDsKKworCVNMSklUX0NPTVBJTEVfQVNTRVJUKChTTEpJVF9TSU5HTEVfT1AgPT0gMHgxMDApICYmICEoRE9VQkxFX0RBVEEgJiAweDIpLCBmbG9hdF90cmFuc2Zlcl9iaXRfZXJyb3IpOworCVNFTEVDVF9GT1AxX09QRVJBVElPTl9XSVRIX0NIRUNLUyhjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjLCBzcmN3KTsKKworCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WRF9GUk9NUykKKwkJb3AgXj0gU0xKSVRfU0lOR0xFX09QOworCisJZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gKGRzdCA8PCAxKSA6IFRNUF9GUkVHMTsKKworCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBkc3Rfciwgc3JjLCBzcmN3LCBkc3QsIGRzdHcpKTsKKwkJc3JjID0gZHN0X3I7CisJfQorCWVsc2UKKwkJc3JjIDw8PSAxOworCisJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgeworCWNhc2UgU0xKSVRfRE1PVjoKKwkJaWYgKHNyYyAhPSBkc3RfcikgeworCQkJaWYgKGRzdF9yICE9IFRNUF9GUkVHMSkgeworCQkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGTU9WUyB8IERBKGRzdF9yKSB8IFMyQShzcmMpLCBNT1ZBQkxFX0lOUykpOworCQkJCWlmICghKG9wICYgU0xKSVRfU0lOR0xFX09QKSkKKwkJCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEZNT1ZTIHwgREEoZHN0X3IgfCAxKSB8IFMyQShzcmMgfCAxKSwgTU9WQUJMRV9JTlMpKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlkc3RfciA9IHNyYzsKKwkJfQorCQlicmVhazsKKwljYXNlIFNMSklUX0RORUc6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGTkVHUyB8IERBKGRzdF9yKSB8IFMyQShzcmMpLCBNT1ZBQkxFX0lOUykpOworCQlpZiAoZHN0X3IgIT0gc3JjICYmICEob3AgJiBTTEpJVF9TSU5HTEVfT1ApKQorCQkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEZNT1ZTIHwgREEoZHN0X3IgfCAxKSB8IFMyQShzcmMgfCAxKSwgTU9WQUJMRV9JTlMpKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9EQUJTOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRkFCU1MgfCBEQShkc3RfcikgfCBTMkEoc3JjKSwgTU9WQUJMRV9JTlMpKTsKKwkJaWYgKGRzdF9yICE9IHNyYyAmJiAhKG9wICYgU0xKSVRfU0lOR0xFX09QKSkKKwkJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBGTU9WUyB8IERBKGRzdF9yIHwgMSkgfCBTMkEoc3JjIHwgMSksIE1PVkFCTEVfSU5TKSk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfQ09OVkRfRlJPTVM6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfRk9QKG9wLCBGU1RPRCwgRkRUT1MpIHwgREEoZHN0X3IpIHwgUzJBKHNyYyksIE1PVkFCTEVfSU5TKSk7CisJCW9wIF49IFNMSklUX1NJTkdMRV9PUDsKKwkJYnJlYWs7CisJfQorCisJaWYgKGRzdCAmIFNMSklUX01FTSkKKwkJRkFJTF9JRihlbWl0X29wX21lbTIoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApLCBkc3RfciwgZHN0LCBkc3R3LCAwLCAwKSk7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQoreworCXNsaml0X3NpIGRzdF9yLCBmbGFncyA9IDA7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZm9wMihjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjMSwgc3JjMXcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjMiwgc3JjMncpOworCisJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCisJZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gKGRzdCA8PCAxKSA6IFRNUF9GUkVHMjsKKworCWlmIChzcmMxICYgU0xKSVRfTUVNKSB7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzEsIHNyYzEsIHNyYzF3KSkgeworCQkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQkJc3JjMSA9IFRNUF9GUkVHMTsKKwkJfSBlbHNlCisJCQlmbGFncyB8PSBTTE9XX1NSQzE7CisJfQorCWVsc2UKKwkJc3JjMSA8PD0gMTsKKworCWlmIChzcmMyICYgU0xKSVRfTUVNKSB7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3KSkgeworCQkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQkJc3JjMiA9IFRNUF9GUkVHMjsKKwkJfSBlbHNlCisJCQlmbGFncyB8PSBTTE9XX1NSQzI7CisJfQorCWVsc2UKKwkJc3JjMiA8PD0gMTsKKworCWlmICgoZmxhZ3MgJiAoU0xPV19TUkMxIHwgU0xPV19TUkMyKSkgPT0gKFNMT1dfU1JDMSB8IFNMT1dfU1JDMikpIHsKKwkJaWYgKCFjYW5fY2FjaGUoc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSAmJiBjYW5fY2FjaGUoc3JjMSwgc3JjMXcsIGRzdCwgZHN0dykpIHsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMiwgc3JjMiwgc3JjMncsIHNyYzEsIHNyYzF3KSk7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzEsIHNyYzEsIHNyYzF3LCBkc3QsIGRzdHcpKTsKKwkJfQorCQllbHNlIHsKKwkJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIEZMT0FUX0RBVEEob3ApIHwgTE9BRF9EQVRBLCBUTVBfRlJFRzIsIHNyYzIsIHNyYzJ3LCBkc3QsIGRzdHcpKTsKKwkJfQorCX0KKwllbHNlIGlmIChmbGFncyAmIFNMT1dfU1JDMSkKKwkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBGTE9BVF9EQVRBKG9wKSB8IExPQURfREFUQSwgVE1QX0ZSRUcxLCBzcmMxLCBzcmMxdywgZHN0LCBkc3R3KSk7CisJZWxzZSBpZiAoZmxhZ3MgJiBTTE9XX1NSQzIpCisJCUZBSUxfSUYoZ2V0cHV0X2FyZyhjb21waWxlciwgRkxPQVRfREFUQShvcCkgfCBMT0FEX0RBVEEsIFRNUF9GUkVHMiwgc3JjMiwgc3JjMncsIGRzdCwgZHN0dykpOworCisJaWYgKGZsYWdzICYgU0xPV19TUkMxKQorCQlzcmMxID0gVE1QX0ZSRUcxOworCWlmIChmbGFncyAmIFNMT1dfU1JDMikKKwkJc3JjMiA9IFRNUF9GUkVHMjsKKworCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKKwljYXNlIFNMSklUX0RBREQ6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfRk9QKG9wLCBGQUREUywgRkFEREQpIHwgREEoZHN0X3IpIHwgUzFBKHNyYzEpIHwgUzJBKHNyYzIpLCBNT1ZBQkxFX0lOUykpOworCQlicmVhazsKKworCWNhc2UgU0xKSVRfRFNVQjoKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIFNFTEVDVF9GT1Aob3AsIEZTVUJTLCBGU1VCRCkgfCBEQShkc3RfcikgfCBTMUEoc3JjMSkgfCBTMkEoc3JjMiksIE1PVkFCTEVfSU5TKSk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9ETVVMOgorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgU0VMRUNUX0ZPUChvcCwgRk1VTFMsIEZNVUxEKSB8IERBKGRzdF9yKSB8IFMxQShzcmMxKSB8IFMyQShzcmMyKSwgTU9WQUJMRV9JTlMpKTsKKwkJYnJlYWs7CisKKwljYXNlIFNMSklUX0RESVY6CisJCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBTRUxFQ1RfRk9QKG9wLCBGRElWUywgRkRJVkQpIHwgREEoZHN0X3IpIHwgUzFBKHNyYzEpIHwgUzJBKHNyYzIpLCBNT1ZBQkxFX0lOUykpOworCQlicmVhazsKKwl9CisKKwlpZiAoZHN0X3IgPT0gVE1QX0ZSRUcyKQorCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgRkxPQVRfREFUQShvcCksIFRNUF9GUkVHMiwgZHN0LCBkc3R3LCAwLCAwKSk7CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworI3VuZGVmIEZMT0FUX0RBVEEKKyN1bmRlZiBTRUxFQ1RfRk9QCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIE90aGVyIGluc3RydWN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2Zhc3RfZW50ZXIoY29tcGlsZXIsIGRzdCwgZHN0dykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKworCS8qIEZvciBVTlVTRUQgZHN0LiBVbmNvbW1vbiwgYnV0IHBvc3NpYmxlLiAqLworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWlmIChGQVNUX0lTX1JFRyhkc3QpKQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IEQoZHN0KSB8IFMxKDApIHwgUzIoVE1QX0xJTkspLCBEUihkc3QpKTsKKworCS8qIE1lbW9yeS4gKi8KKwlyZXR1cm4gZW1pdF9vcF9tZW0oY29tcGlsZXIsIFdPUkRfREFUQSwgVE1QX0xJTkssIGRzdCwgZHN0dyk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9yZXR1cm4oY29tcGlsZXIsIHNyYywgc3JjdykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCWlmIChGQVNUX0lTX1JFRyhzcmMpKQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBEKFRNUF9MSU5LKSB8IFMxKDApIHwgUzIoc3JjKSwgRFIoVE1QX0xJTkspKSk7CisJZWxzZSBpZiAoc3JjICYgU0xKSVRfTUVNKQorCQlGQUlMX0lGKGVtaXRfb3BfbWVtKGNvbXBpbGVyLCBXT1JEX0RBVEEgfCBMT0FEX0RBVEEsIFRNUF9MSU5LLCBzcmMsIHNyY3cpKTsKKwllbHNlIGlmIChzcmMgJiBTTEpJVF9JTU0pCisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIFRNUF9MSU5LLCBzcmN3KSk7CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgSk1QTCB8IEQoMCkgfCBTMShUTVBfTElOSykgfCBJTU0oOCksIFVOTU9WQUJMRV9JTlMpKTsKKwlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBOT1AsIFVOTU9WQUJMRV9JTlMpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBDb25kaXRpb25hbCBpbnN0cnVjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfbGFiZWwqIHNsaml0X2VtaXRfbGFiZWwoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKK3sKKwlzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfbGFiZWwoY29tcGlsZXIpKTsKKworCWlmIChjb21waWxlci0+bGFzdF9sYWJlbCAmJiBjb21waWxlci0+bGFzdF9sYWJlbC0+c2l6ZSA9PSBjb21waWxlci0+c2l6ZSkKKwkJcmV0dXJuIGNvbXBpbGVyLT5sYXN0X2xhYmVsOworCisJbGFiZWwgPSAoc3RydWN0IHNsaml0X2xhYmVsKillbnN1cmVfYWJ1Zihjb21waWxlciwgc2l6ZW9mKHN0cnVjdCBzbGppdF9sYWJlbCkpOworCVBUUl9GQUlMX0lGKCFsYWJlbCk7CisJc2V0X2xhYmVsKGxhYmVsLCBjb21waWxlcik7CisJY29tcGlsZXItPmRlbGF5X3Nsb3QgPSBVTk1PVkFCTEVfSU5TOworCXJldHVybiBsYWJlbDsKK30KKworc3RhdGljIHNsaml0X2lucyBnZXRfY2Moc2xqaXRfc2kgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNMSklUX0VRVUFMOgorCWNhc2UgU0xKSVRfTVVMX05PVF9PVkVSRkxPVzoKKwljYXNlIFNMSklUX0RfTk9UX0VRVUFMOiAvKiBVbm9yZGVyZWQuICovCisJCXJldHVybiBEQSgweDEpOworCisJY2FzZSBTTEpJVF9OT1RfRVFVQUw6CisJY2FzZSBTTEpJVF9NVUxfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9EX0VRVUFMOgorCQlyZXR1cm4gREEoMHg5KTsKKworCWNhc2UgU0xKSVRfTEVTUzoKKwljYXNlIFNMSklUX0RfR1JFQVRFUjogLyogVW5vcmRlcmVkLiAqLworCQlyZXR1cm4gREEoMHg1KTsKKworCWNhc2UgU0xKSVRfR1JFQVRFUl9FUVVBTDoKKwljYXNlIFNMSklUX0RfTEVTU19FUVVBTDoKKwkJcmV0dXJuIERBKDB4ZCk7CisKKwljYXNlIFNMSklUX0dSRUFURVI6CisJY2FzZSBTTEpJVF9EX0dSRUFURVJfRVFVQUw6IC8qIFVub3JkZXJlZC4gKi8KKwkJcmV0dXJuIERBKDB4Yyk7CisKKwljYXNlIFNMSklUX0xFU1NfRVFVQUw6CisJY2FzZSBTTEpJVF9EX0xFU1M6CisJCXJldHVybiBEQSgweDQpOworCisJY2FzZSBTTEpJVF9TSUdfTEVTUzoKKwkJcmV0dXJuIERBKDB4Myk7CisKKwljYXNlIFNMSklUX1NJR19HUkVBVEVSX0VRVUFMOgorCQlyZXR1cm4gREEoMHhiKTsKKworCWNhc2UgU0xKSVRfU0lHX0dSRUFURVI6CisJCXJldHVybiBEQSgweGEpOworCisJY2FzZSBTTEpJVF9TSUdfTEVTU19FUVVBTDoKKwkJcmV0dXJuIERBKDB4Mik7CisKKwljYXNlIFNMSklUX09WRVJGTE9XOgorCWNhc2UgU0xKSVRfRF9VTk9SREVSRUQ6CisJCXJldHVybiBEQSgweDcpOworCisJY2FzZSBTTEpJVF9OT1RfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9EX09SREVSRUQ6CisJCXJldHVybiBEQSgweGYpOworCisJZGVmYXVsdDoKKwkJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwkJcmV0dXJuIERBKDB4OCk7CisJfQorfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlKQoreworCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfanVtcChjb21waWxlciwgdHlwZSkpOworCisJanVtcCA9IChzdHJ1Y3Qgc2xqaXRfanVtcCopZW5zdXJlX2FidWYoY29tcGlsZXIsIHNpemVvZihzdHJ1Y3Qgc2xqaXRfanVtcCkpOworCVBUUl9GQUlMX0lGKCFqdW1wKTsKKwlzZXRfanVtcChqdW1wLCBjb21waWxlciwgdHlwZSAmIFNMSklUX1JFV1JJVEFCTEVfSlVNUCk7CisJdHlwZSAmPSAweGZmOworCisJaWYgKHR5cGUgPCBTTEpJVF9EX0VRVUFMKSB7CisJCWp1bXAtPmZsYWdzIHw9IElTX0NPTkQ7CisJCWlmICgoKGNvbXBpbGVyLT5kZWxheV9zbG90ICYgRFNUX0lOU19NQVNLKSAhPSBVTk1PVkFCTEVfSU5TKSAmJiAhKGNvbXBpbGVyLT5kZWxheV9zbG90ICYgSUNDX0lTX1NFVCkpCisJCQlqdW1wLT5mbGFncyB8PSBJU19NT1ZBQkxFOworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19TUEFSQ18zMiAmJiBTTEpJVF9DT05GSUdfU1BBUkNfMzIpCisJCVBUUl9GQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgQklDQyB8IGdldF9jYyh0eXBlIF4gMSkgfCA1LCBVTk1PVkFCTEVfSU5TKSk7CisjZWxzZQorI2Vycm9yICJJbXBsZW1lbnRhdGlvbiByZXF1aXJlZCIKKyNlbmRpZgorCX0KKwllbHNlIGlmICh0eXBlIDwgU0xKSVRfSlVNUCkgeworCQlqdW1wLT5mbGFncyB8PSBJU19DT05EOworCQlpZiAoKChjb21waWxlci0+ZGVsYXlfc2xvdCAmIERTVF9JTlNfTUFTSykgIT0gVU5NT1ZBQkxFX0lOUykgJiYgIShjb21waWxlci0+ZGVsYXlfc2xvdCAmIEZDQ19JU19TRVQpKQorCQkJanVtcC0+ZmxhZ3MgfD0gSVNfTU9WQUJMRTsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfU1BBUkNfMzIgJiYgU0xKSVRfQ09ORklHX1NQQVJDXzMyKQorCQlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEZCRkNDIHwgZ2V0X2NjKHR5cGUgXiAxKSB8IDUsIFVOTU9WQUJMRV9JTlMpKTsKKyNlbHNlCisjZXJyb3IgIkltcGxlbWVudGF0aW9uIHJlcXVpcmVkIgorI2VuZGlmCisJfSBlbHNlIHsKKwkJaWYgKChjb21waWxlci0+ZGVsYXlfc2xvdCAmIERTVF9JTlNfTUFTSykgIT0gVU5NT1ZBQkxFX0lOUykKKwkJCWp1bXAtPmZsYWdzIHw9IElTX01PVkFCTEU7CisJCWlmICh0eXBlID49IFNMSklUX0ZBU1RfQ0FMTCkKKwkJCWp1bXAtPmZsYWdzIHw9IElTX0NBTEw7CisJfQorCisJUFRSX0ZBSUxfSUYoZW1pdF9jb25zdChjb21waWxlciwgVE1QX1JFRzIsIDApKTsKKwlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEpNUEwgfCBEKHR5cGUgPj0gU0xKSVRfRkFTVF9DQUxMID8gVE1QX0xJTksgOiAwKSB8IFMxKFRNUF9SRUcyKSB8IElNTSgwKSwgVU5NT1ZBQkxFX0lOUykpOworCWp1bXAtPmFkZHIgPSBjb21waWxlci0+c2l6ZTsKKwlQVFJfRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIE5PUCwgVU5NT1ZBQkxFX0lOUykpOworCisJcmV0dXJuIGp1bXA7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2lqdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCA9IE5VTEw7CisJc2xqaXRfc2kgc3JjX3I7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfaWp1bXAoY29tcGlsZXIsIHR5cGUsIHNyYywgc3JjdykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCWlmIChGQVNUX0lTX1JFRyhzcmMpKQorCQlzcmNfciA9IHNyYzsKKwllbHNlIGlmIChzcmMgJiBTTEpJVF9JTU0pIHsKKwkJanVtcCA9IChzdHJ1Y3Qgc2xqaXRfanVtcCopZW5zdXJlX2FidWYoY29tcGlsZXIsIHNpemVvZihzdHJ1Y3Qgc2xqaXRfanVtcCkpOworCQlGQUlMX0lGKCFqdW1wKTsKKwkJc2V0X2p1bXAoanVtcCwgY29tcGlsZXIsIEpVTVBfQUREUik7CisJCWp1bXAtPnUudGFyZ2V0ID0gc3JjdzsKKwkJaWYgKChjb21waWxlci0+ZGVsYXlfc2xvdCAmIERTVF9JTlNfTUFTSykgIT0gVU5NT1ZBQkxFX0lOUykKKwkJCWp1bXAtPmZsYWdzIHw9IElTX01PVkFCTEU7CisJCWlmICh0eXBlID49IFNMSklUX0ZBU1RfQ0FMTCkKKwkJCWp1bXAtPmZsYWdzIHw9IElTX0NBTEw7CisKKwkJRkFJTF9JRihlbWl0X2NvbnN0KGNvbXBpbGVyLCBUTVBfUkVHMiwgMCkpOworCQlzcmNfciA9IFRNUF9SRUcyOworCX0KKwllbHNlIHsKKwkJRkFJTF9JRihlbWl0X29wX21lbShjb21waWxlciwgV09SRF9EQVRBIHwgTE9BRF9EQVRBLCBUTVBfUkVHMiwgc3JjLCBzcmN3KSk7CisJCXNyY19yID0gVE1QX1JFRzI7CisJfQorCisJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEpNUEwgfCBEKHR5cGUgPj0gU0xKSVRfRkFTVF9DQUxMID8gVE1QX0xJTksgOiAwKSB8IFMxKHNyY19yKSB8IElNTSgwKSwgVU5NT1ZBQkxFX0lOUykpOworCWlmIChqdW1wKQorCQlqdW1wLT5hZGRyID0gY29tcGlsZXItPnNpemU7CisJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgTk9QLCBVTk1PVkFCTEVfSU5TKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdywKKwlzbGppdF9zaSB0eXBlKQoreworCXNsaml0X3NpIHJlZywgZmxhZ3MgPSAoR0VUX0ZMQUdTKG9wKSA/IFNFVF9GTEFHUyA6IDApOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wX2ZsYWdzKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3csIHR5cGUpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisKKwlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfU1BBUkNfMzIgJiYgU0xKSVRfQ09ORklHX1NQQVJDXzMyKQorCW9wID0gR0VUX09QQ09ERShvcCk7CisJcmVnID0gKG9wIDwgU0xKSVRfQUREICYmIEZBU1RfSVNfUkVHKGRzdCkpID8gZHN0IDogVE1QX1JFRzI7CisKKwljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwljb21waWxlci0+Y2FjaGVfYXJndyA9IDA7CisJaWYgKG9wID49IFNMSklUX0FERCAmJiAoc3JjICYgU0xKSVRfTUVNKSkgeworCQlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CisJCUZBSUxfSUYoZW1pdF9vcF9tZW0yKGNvbXBpbGVyLCBXT1JEX0RBVEEgfCBMT0FEX0RBVEEsIFRNUF9SRUcxLCBzcmMsIHNyY3csIGRzdCwgZHN0dykpOworCQlzcmMgPSBUTVBfUkVHMTsKKwkJc3JjdyA9IDA7CisJfQorCisJdHlwZSAmPSAweGZmOworCWlmICh0eXBlIDwgU0xKSVRfRF9FUVVBTCkKKwkJRkFJTF9JRihwdXNoX2luc3QoY29tcGlsZXIsIEJJQ0MgfCBnZXRfY2ModHlwZSkgfCAzLCBVTk1PVkFCTEVfSU5TKSk7CisJZWxzZQorCQlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgRkJGQ0MgfCBnZXRfY2ModHlwZSkgfCAzLCBVTk1PVkFCTEVfSU5TKSk7CisKKwlGQUlMX0lGKHB1c2hfaW5zdChjb21waWxlciwgT1IgfCBEKHJlZykgfCBTMSgwKSB8IElNTSgxKSwgVU5NT1ZBQkxFX0lOUykpOworCUZBSUxfSUYocHVzaF9pbnN0KGNvbXBpbGVyLCBPUiB8IEQocmVnKSB8IFMxKDApIHwgSU1NKDApLCBVTk1PVkFCTEVfSU5TKSk7CisKKwlpZiAob3AgPj0gU0xKSVRfQUREKQorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AsIGZsYWdzIHwgQ1VNVUxBVElWRV9PUCB8IElNTV9PUCB8IEFMVF9LRUVQX0NBQ0hFLCBkc3QsIGRzdHcsIHNyYywgc3JjdywgVE1QX1JFRzIsIDApOworCisJcmV0dXJuIChyZWcgPT0gVE1QX1JFRzIpID8gZW1pdF9vcF9tZW0oY29tcGlsZXIsIFdPUkRfREFUQSwgVE1QX1JFRzIsIGRzdCwgZHN0dykgOiBTTEpJVF9TVUNDRVNTOworI2Vsc2UKKyNlcnJvciAiSW1wbGVtZW50YXRpb24gcmVxdWlyZWQiCisjZW5kaWYKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9jb25zdCogc2xqaXRfZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsIHNsaml0X3N3IGluaXRfdmFsdWUpCit7CisJc2xqaXRfc2kgcmVnOworCXN0cnVjdCBzbGppdF9jb25zdCAqY29uc3RfOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfY29uc3QoY29tcGlsZXIsIGRzdCwgZHN0dywgaW5pdF92YWx1ZSkpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKworCWNvbnN0XyA9IChzdHJ1Y3Qgc2xqaXRfY29uc3QqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2NvbnN0KSk7CisJUFRSX0ZBSUxfSUYoIWNvbnN0Xyk7CisJc2V0X2NvbnN0KGNvbnN0XywgY29tcGlsZXIpOworCisJcmVnID0gU0xPV19JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcyOworCisJUFRSX0ZBSUxfSUYoZW1pdF9jb25zdChjb21waWxlciwgcmVnLCBpbml0X3ZhbHVlKSk7CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKQorCQlQVFJfRkFJTF9JRihlbWl0X29wX21lbShjb21waWxlciwgV09SRF9EQVRBLCBUTVBfUkVHMiwgZHN0LCBkc3R3KSk7CisJcmV0dXJuIGNvbnN0XzsKK30KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVRJTEVHWC1lbmNvZGVyLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVUSUxFR1gtZW5jb2Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxOTYzMjkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVUSUxFR1gtZW5jb2Rlci5jCkBAIC0wLDAgKzEsMTAxNTkgQEAKKy8qCisgKiAgICBTdGFjay1sZXNzIEp1c3QtSW4tVGltZSBjb21waWxlcgorICoKKyAqICAgIENvcHlyaWdodCAyMDEzLTIwMTMgVGlsZXJhIENvcnBvcmF0aW9uKGppd2FuZ0B0aWxlcmEuY29tKS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgIENvcHlyaWdodCAyMDA5LTIwMTIgWm9sdGFuIEhlcmN6ZWcgKGh6bWVzdGVyQGZyZWVtYWlsLmh1KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAqICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogVGhpcyBjb2RlIGlzIG93bmVkIGJ5IFRpbGVyYSBDb3Jwb3JhdGlvbiwgYW5kIGRpc3RyaWJ1dGVkIGFzIHBhcnQKKyAgIG9mIG11bHRpcGxlIHByb2plY3RzLiBJbiBzbGppdCwgdGhlIGNvZGUgaXMgdW5kZXIgQlNEIGxpY2VuY2UuICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNkZWZpbmUgQkZEX1JFTE9DKHgpIFJfIyN4CisKKy8qIFNwZWNpYWwgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBUUkVHX0xSIDU1CisjZGVmaW5lIFRSRUdfU04gNTYKKyNkZWZpbmUgVFJFR19aRVJPIDYzCisKKy8qIENhbm9uaWNhbCBuYW1lIG9mIGVhY2ggcmVnaXN0ZXIuICovCitjb25zdCBjaGFyICpjb25zdCB0aWxlZ3hfcmVnaXN0ZXJfbmFtZXNbXSA9Cit7CisgICJyMCIsICAgInIxIiwgICJyMiIsICAicjMiLCAgInI0IiwgICJyNSIsICAicjYiLCAgInI3IiwKKyAgInI4IiwgICAicjkiLCAgInIxMCIsICJyMTEiLCAicjEyIiwgInIxMyIsICJyMTQiLCAicjE1IiwKKyAgInIxNiIsICAicjE3IiwgInIxOCIsICJyMTkiLCAicjIwIiwgInIyMSIsICJyMjIiLCAicjIzIiwKKyAgInIyNCIsICAicjI1IiwgInIyNiIsICJyMjciLCAicjI4IiwgInIyOSIsICJyMzAiLCAicjMxIiwKKyAgInIzMiIsICAicjMzIiwgInIzNCIsICJyMzUiLCAicjM2IiwgInIzNyIsICJyMzgiLCAicjM5IiwKKyAgInI0MCIsICAicjQxIiwgInI0MiIsICJyNDMiLCAicjQ0IiwgInI0NSIsICJyNDYiLCAicjQ3IiwKKyAgInI0OCIsICAicjQ5IiwgInI1MCIsICJyNTEiLCAicjUyIiwgInRwIiwgICJzcCIsICAibHIiLAorICAic24iLCAgImlkbjAiLCAiaWRuMSIsICJ1ZG4wIiwgInVkbjEiLCAidWRuMiIsICJ1ZG4zIiwgInplcm8iCit9OworCitlbnVtCit7CisgIFJfTk9ORSA9IDAsCisgIFJfVElMRUdYX05PTkUgPSAwLAorICBSX1RJTEVHWF82NCA9IDEsCisgIFJfVElMRUdYXzMyID0gMiwKKyAgUl9USUxFR1hfMTYgPSAzLAorICBSX1RJTEVHWF84ID0gNCwKKyAgUl9USUxFR1hfNjRfUENSRUwgPSA1LAorICBSX1RJTEVHWF8zMl9QQ1JFTCA9IDYsCisgIFJfVElMRUdYXzE2X1BDUkVMID0gNywKKyAgUl9USUxFR1hfOF9QQ1JFTCA9IDgsCisgIFJfVElMRUdYX0hXMCA9IDksCisgIFJfVElMRUdYX0hXMSA9IDEwLAorICBSX1RJTEVHWF9IVzIgPSAxMSwKKyAgUl9USUxFR1hfSFczID0gMTIsCisgIFJfVElMRUdYX0hXMF9MQVNUID0gMTMsCisgIFJfVElMRUdYX0hXMV9MQVNUID0gMTQsCisgIFJfVElMRUdYX0hXMl9MQVNUID0gMTUsCisgIFJfVElMRUdYX0NPUFkgPSAxNiwKKyAgUl9USUxFR1hfR0xPQl9EQVQgPSAxNywKKyAgUl9USUxFR1hfSk1QX1NMT1QgPSAxOCwKKyAgUl9USUxFR1hfUkVMQVRJVkUgPSAxOSwKKyAgUl9USUxFR1hfQlJPRkZfWDEgPSAyMCwKKyAgUl9USUxFR1hfSlVNUE9GRl9YMSA9IDIxLAorICBSX1RJTEVHWF9KVU1QT0ZGX1gxX1BMVCA9IDIyLAorICBSX1RJTEVHWF9JTU04X1gwID0gMjMsCisgIFJfVElMRUdYX0lNTThfWTAgPSAyNCwKKyAgUl9USUxFR1hfSU1NOF9YMSA9IDI1LAorICBSX1RJTEVHWF9JTU04X1kxID0gMjYsCisgIFJfVElMRUdYX0RFU1RfSU1NOF9YMSA9IDI3LAorICBSX1RJTEVHWF9NVF9JTU0xNF9YMSA9IDI4LAorICBSX1RJTEVHWF9NRl9JTU0xNF9YMSA9IDI5LAorICBSX1RJTEVHWF9NTVNUQVJUX1gwID0gMzAsCisgIFJfVElMRUdYX01NRU5EX1gwID0gMzEsCisgIFJfVElMRUdYX1NIQU1UX1gwID0gMzIsCisgIFJfVElMRUdYX1NIQU1UX1gxID0gMzMsCisgIFJfVElMRUdYX1NIQU1UX1kwID0gMzQsCisgIFJfVElMRUdYX1NIQU1UX1kxID0gMzUsCisgIFJfVElMRUdYX0lNTTE2X1gwX0hXMCA9IDM2LAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzAgPSAzNywKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcxID0gMzgsCisgIFJfVElMRUdYX0lNTTE2X1gxX0hXMSA9IDM5LAorICBSX1RJTEVHWF9JTU0xNl9YMF9IVzIgPSA0MCwKKyAgUl9USUxFR1hfSU1NMTZfWDFfSFcyID0gNDEsCisgIFJfVElMRUdYX0lNTTE2X1gwX0hXMyA9IDQyLAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzMgPSA0MywKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcwX0xBU1QgPSA0NCwKKyAgUl9USUxFR1hfSU1NMTZfWDFfSFcwX0xBU1QgPSA0NSwKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcxX0xBU1QgPSA0NiwKKyAgUl9USUxFR1hfSU1NMTZfWDFfSFcxX0xBU1QgPSA0NywKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcyX0xBU1QgPSA0OCwKKyAgUl9USUxFR1hfSU1NMTZfWDFfSFcyX0xBU1QgPSA0OSwKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcwX1BDUkVMID0gNTAsCisgIFJfVElMRUdYX0lNTTE2X1gxX0hXMF9QQ1JFTCA9IDUxLAorICBSX1RJTEVHWF9JTU0xNl9YMF9IVzFfUENSRUwgPSA1MiwKKyAgUl9USUxFR1hfSU1NMTZfWDFfSFcxX1BDUkVMID0gNTMsCisgIFJfVElMRUdYX0lNTTE2X1gwX0hXMl9QQ1JFTCA9IDU0LAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzJfUENSRUwgPSA1NSwKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFczX1BDUkVMID0gNTYsCisgIFJfVElMRUdYX0lNTTE2X1gxX0hXM19QQ1JFTCA9IDU3LAorICBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfTEFTVF9QQ1JFTCA9IDU4LAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfTEFTVF9QQ1JFTCA9IDU5LAorICBSX1RJTEVHWF9JTU0xNl9YMF9IVzFfTEFTVF9QQ1JFTCA9IDYwLAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzFfTEFTVF9QQ1JFTCA9IDYxLAorICBSX1RJTEVHWF9JTU0xNl9YMF9IVzJfTEFTVF9QQ1JFTCA9IDYyLAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzJfTEFTVF9QQ1JFTCA9IDYzLAorICBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfR09UID0gNjQsCisgIFJfVElMRUdYX0lNTTE2X1gxX0hXMF9HT1QgPSA2NSwKKworICBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfUExUX1BDUkVMID0gNjYsCisgIFJfVElMRUdYX0lNTTE2X1gxX0hXMF9QTFRfUENSRUwgPSA2NywKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcxX1BMVF9QQ1JFTCA9IDY4LAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzFfUExUX1BDUkVMID0gNjksCisgIFJfVElMRUdYX0lNTTE2X1gwX0hXMl9QTFRfUENSRUwgPSA3MCwKKyAgUl9USUxFR1hfSU1NMTZfWDFfSFcyX1BMVF9QQ1JFTCA9IDcxLAorCisgIFJfVElMRUdYX0lNTTE2X1gwX0hXMF9MQVNUX0dPVCA9IDcyLAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfTEFTVF9HT1QgPSA3MywKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcxX0xBU1RfR09UID0gNzQsCisgIFJfVElMRUdYX0lNTTE2X1gxX0hXMV9MQVNUX0dPVCA9IDc1LAorICBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfVExTX0dEID0gNzgsCisgIFJfVElMRUdYX0lNTTE2X1gxX0hXMF9UTFNfR0QgPSA3OSwKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcwX1RMU19MRSA9IDgwLAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfVExTX0xFID0gODEsCisgIFJfVElMRUdYX0lNTTE2X1gwX0hXMF9MQVNUX1RMU19MRSA9IDgyLAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfTEFTVF9UTFNfTEUgPSA4MywKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcxX0xBU1RfVExTX0xFID0gODQsCisgIFJfVElMRUdYX0lNTTE2X1gxX0hXMV9MQVNUX1RMU19MRSA9IDg1LAorICBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfTEFTVF9UTFNfR0QgPSA4NiwKKyAgUl9USUxFR1hfSU1NMTZfWDFfSFcwX0xBU1RfVExTX0dEID0gODcsCisgIFJfVElMRUdYX0lNTTE2X1gwX0hXMV9MQVNUX1RMU19HRCA9IDg4LAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzFfTEFTVF9UTFNfR0QgPSA4OSwKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcwX1RMU19JRSA9IDkyLAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzBfVExTX0lFID0gOTMsCisKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcwX0xBU1RfUExUX1BDUkVMID0gOTQsCisgIFJfVElMRUdYX0lNTTE2X1gxX0hXMF9MQVNUX1BMVF9QQ1JFTCA9IDk1LAorICBSX1RJTEVHWF9JTU0xNl9YMF9IVzFfTEFTVF9QTFRfUENSRUwgPSA5NiwKKyAgUl9USUxFR1hfSU1NMTZfWDFfSFcxX0xBU1RfUExUX1BDUkVMID0gOTcsCisgIFJfVElMRUdYX0lNTTE2X1gwX0hXMl9MQVNUX1BMVF9QQ1JFTCA9IDk4LAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzJfTEFTVF9QTFRfUENSRUwgPSA5OSwKKworICBSX1RJTEVHWF9JTU0xNl9YMF9IVzBfTEFTVF9UTFNfSUUgPSAxMDAsCisgIFJfVElMRUdYX0lNTTE2X1gxX0hXMF9MQVNUX1RMU19JRSA9IDEwMSwKKyAgUl9USUxFR1hfSU1NMTZfWDBfSFcxX0xBU1RfVExTX0lFID0gMTAyLAorICBSX1RJTEVHWF9JTU0xNl9YMV9IVzFfTEFTVF9UTFNfSUUgPSAxMDMsCisgIFJfVElMRUdYX1RMU19EVFBNT0Q2NCA9IDEwNiwKKyAgUl9USUxFR1hfVExTX0RUUE9GRjY0ID0gMTA3LAorICBSX1RJTEVHWF9UTFNfVFBPRkY2NCA9IDEwOCwKKyAgUl9USUxFR1hfVExTX0RUUE1PRDMyID0gMTA5LAorICBSX1RJTEVHWF9UTFNfRFRQT0ZGMzIgPSAxMTAsCisgIFJfVElMRUdYX1RMU19UUE9GRjMyID0gMTExLAorICBSX1RJTEVHWF9UTFNfR0RfQ0FMTCA9IDExMiwKKyAgUl9USUxFR1hfSU1NOF9YMF9UTFNfR0RfQUREID0gMTEzLAorICBSX1RJTEVHWF9JTU04X1gxX1RMU19HRF9BREQgPSAxMTQsCisgIFJfVElMRUdYX0lNTThfWTBfVExTX0dEX0FERCA9IDExNSwKKyAgUl9USUxFR1hfSU1NOF9ZMV9UTFNfR0RfQUREID0gMTE2LAorICBSX1RJTEVHWF9UTFNfSUVfTE9BRCA9IDExNywKKyAgUl9USUxFR1hfSU1NOF9YMF9UTFNfQUREID0gMTE4LAorICBSX1RJTEVHWF9JTU04X1gxX1RMU19BREQgPSAxMTksCisgIFJfVElMRUdYX0lNTThfWTBfVExTX0FERCA9IDEyMCwKKyAgUl9USUxFR1hfSU1NOF9ZMV9UTFNfQUREID0gMTIxLAorICBSX1RJTEVHWF9HTlVfVlRJTkhFUklUID0gMTI4LAorICBSX1RJTEVHWF9HTlVfVlRFTlRSWSA9IDEyOSwKKyAgUl9USUxFR1hfSVJFTEFUSVZFID0gMTMwLAorICBSX1RJTEVHWF9OVU0gPSAxMzEKK307CisKK3R5cGVkZWYgZW51bQoreworICBUSUxFR1hfUElQRUxJTkVfWDAsCisgIFRJTEVHWF9QSVBFTElORV9YMSwKKyAgVElMRUdYX1BJUEVMSU5FX1kwLAorICBUSUxFR1hfUElQRUxJTkVfWTEsCisgIFRJTEVHWF9QSVBFTElORV9ZMiwKK30gdGlsZWd4X3BpcGVsaW5lOworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB0aWxlZ3hfYnVuZGxlX2JpdHM7CisKKy8qIFRoZXNlIGFyZSB0aGUgYml0cyB0aGF0IGRldGVybWluZSBpZiBhIGJ1bmRsZSBpcyBpbiB0aGUgWCBlbmNvZGluZy4gKi8KKyNkZWZpbmUgVElMRUdYX0JVTkRMRV9NT0RFX01BU0sgKCh0aWxlZ3hfYnVuZGxlX2JpdHMpMyA8PCA2MikKKworZW51bQoreworICAvKiBNYXhpbXVtIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgaW4gYSBidW5kbGUgKDIgZm9yIFgsIDMgZm9yIFkpLiAqLworICBUSUxFR1hfTUFYX0lOU1RSVUNUSU9OU19QRVJfQlVORExFID0gMywKKworICAvKiBIb3cgbWFueSBkaWZmZXJlbnQgcGlwZWxpbmUgZW5jb2RpbmdzIGFyZSB0aGVyZT8gWDAsIFgxLCBZMCwgWTEsIFkyLiAqLworICBUSUxFR1hfTlVNX1BJUEVMSU5FX0VOQ09ESU5HUyA9IDUsCisKKyAgLyogTG9nIGJhc2UgMiBvZiBUSUxFR1hfQlVORExFX1NJWkVfSU5fQllURVMuICovCisgIFRJTEVHWF9MT0cyX0JVTkRMRV9TSVpFX0lOX0JZVEVTID0gMywKKworICAvKiBJbnN0cnVjdGlvbnMgdGFrZSB0aGlzIG1hbnkgYnl0ZXMuICovCisgIFRJTEVHWF9CVU5ETEVfU0laRV9JTl9CWVRFUyA9IDEgPDwgVElMRUdYX0xPRzJfQlVORExFX1NJWkVfSU5fQllURVMsCisKKyAgLyogTG9nIGJhc2UgMiBvZiBUSUxFR1hfQlVORExFX0FMSUdOTUVOVF9JTl9CWVRFUy4gKi8KKyAgVElMRUdYX0xPRzJfQlVORExFX0FMSUdOTUVOVF9JTl9CWVRFUyA9IDMsCisKKyAgLyogQnVuZGxlcyBzaG91bGQgYmUgYWxpZ25lZCBtb2R1bG8gdGhpcyBudW1iZXIgb2YgYnl0ZXMuICovCisgIFRJTEVHWF9CVU5ETEVfQUxJR05NRU5UX0lOX0JZVEVTID0KKyAgICAoMSA8PCBUSUxFR1hfTE9HMl9CVU5ETEVfQUxJR05NRU5UX0lOX0JZVEVTKSwKKworICAvKiBOdW1iZXIgb2YgcmVnaXN0ZXJzIChzb21lIGFyZSBtYWdpYywgc3VjaCBhcyBuZXR3b3JrIEkvTykuICovCisgIFRJTEVHWF9OVU1fUkVHSVNURVJTID0gNjQsCit9OworCisvKiBNYWtlIGEgZmV3ICJ0aWxlXyIgdmFyaWFibGVzIHRvIHNpbXBsaWZ5IGNvbW1vbiBjb2RlIGJldHdlZW4KKyAgIGFyY2hpdGVjdHVyZXMuICAqLworCit0eXBlZGVmIHRpbGVneF9idW5kbGVfYml0cyB0aWxlX2J1bmRsZV9iaXRzOworI2RlZmluZSBUSUxFX0JVTkRMRV9TSVpFX0lOX0JZVEVTIFRJTEVHWF9CVU5ETEVfU0laRV9JTl9CWVRFUworI2RlZmluZSBUSUxFX0JVTkRMRV9BTElHTk1FTlRfSU5fQllURVMgVElMRUdYX0JVTkRMRV9BTElHTk1FTlRfSU5fQllURVMKKyNkZWZpbmUgVElMRV9MT0cyX0JVTkRMRV9BTElHTk1FTlRfSU5fQllURVMgXAorICBUSUxFR1hfTE9HMl9CVU5ETEVfQUxJR05NRU5UX0lOX0JZVEVTCisKKy8qIDY0LWJpdCBwYXR0ZXJuIGZvciBhIHsgYnB0IDsgbm9wIH0gYnVuZGxlLiAqLworI2RlZmluZSBUSUxFR1hfQlBUX0JVTkRMRSAweDI4NmE0NGFlNTE0ODUwMDBVTEwKKwordHlwZWRlZiBlbnVtCit7CisgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLAorICBUSUxFR1hfT1BfVFlQRV9JTU1FRElBVEUsCisgIFRJTEVHWF9PUF9UWVBFX0FERFJFU1MsCisgIFRJTEVHWF9PUF9UWVBFX1NQUgorfSB0aWxlZ3hfb3BlcmFuZF90eXBlOworCitzdHJ1Y3QgdGlsZWd4X29wZXJhbmQKK3sKKyAgLyogSXMgdGhpcyBvcGVyYW5kIGEgcmVnaXN0ZXIsIGltbWVkaWF0ZSBvciBhZGRyZXNzPyAqLworICB0aWxlZ3hfb3BlcmFuZF90eXBlIHR5cGU7CisKKyAgLyogVGhlIGRlZmF1bHQgcmVsb2NhdGlvbiB0eXBlIGZvciB0aGlzIG9wZXJhbmQuICAqLworICBzaWduZWQgaW50IGRlZmF1bHRfcmVsb2MgOiAxNjsKKworICAvKiBIb3cgbWFueSBiaXRzIGlzIHRoaXMgdmFsdWU/ICh1c2VkIGZvciByYW5nZSBjaGVja2luZykgKi8KKyAgdW5zaWduZWQgaW50IG51bV9iaXRzIDogNTsKKworICAvKiBJcyB0aGUgdmFsdWUgc2lnbmVkPyAodXNlZCBmb3IgcmFuZ2UgY2hlY2tpbmcpICovCisgIHVuc2lnbmVkIGludCBpc19zaWduZWQgOiAxOworCisgIC8qIElzIHRoaXMgb3BlcmFuZCBhIHNvdXJjZSByZWdpc3Rlcj8gKi8KKyAgdW5zaWduZWQgaW50IGlzX3NyY19yZWcgOiAxOworCisgIC8qIElzIHRoaXMgb3BlcmFuZCB3cml0dGVuPyAoaS5lLiBpcyBpdCBhIGRlc3RpbmF0aW9uIHJlZ2lzdGVyKSAqLworICB1bnNpZ25lZCBpbnQgaXNfZGVzdF9yZWcgOiAxOworCisgIC8qIElzIHRoaXMgb3BlcmFuZCBQQy1yZWxhdGl2ZT8gKi8KKyAgdW5zaWduZWQgaW50IGlzX3BjX3JlbGF0aXZlIDogMTsKKworICAvKiBCeSBob3cgbWFueSBiaXRzIGRvIHdlIHJpZ2h0IHNoaWZ0IHRoZSB2YWx1ZSBiZWZvcmUgaW5zZXJ0aW5nPyAqLworICB1bnNpZ25lZCBpbnQgcmlnaHRzaGlmdCA6IDI7CisKKyAgLyogUmV0dXJuIHRoZSBiaXRzIGZvciB0aGlzIG9wZXJhbmQgdG8gYmUgT1JlZCBpbnRvIGFuIGV4aXN0aW5nIGJ1bmRsZS4gKi8KKyAgdGlsZWd4X2J1bmRsZV9iaXRzICgqaW5zZXJ0KSAoaW50IG9wKTsKKworICAvKiBFeHRyYWN0IHRoaXMgb3BlcmFuZCBhbmQgcmV0dXJuIGl0LiAqLworICB1bnNpZ25lZCBpbnQgKCpleHRyYWN0KSAodGlsZWd4X2J1bmRsZV9iaXRzIGJ1bmRsZSk7Cit9OworCit0eXBlZGVmIGVudW0KK3sKKyAgVElMRUdYX09QQ19CUFQsCisgIFRJTEVHWF9PUENfSU5GTywKKyAgVElMRUdYX09QQ19JTkZPTCwKKyAgVElMRUdYX09QQ19MRDRTX1RMUywKKyAgVElMRUdYX09QQ19MRF9UTFMsCisgIFRJTEVHWF9PUENfTU9WRSwKKyAgVElMRUdYX09QQ19NT1ZFSSwKKyAgVElMRUdYX09QQ19NT1ZFTEksCisgIFRJTEVHWF9PUENfUFJFRkVUQ0gsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfQUREX0wxLAorICBUSUxFR1hfT1BDX1BSRUZFVENIX0FERF9MMV9GQVVMVCwKKyAgVElMRUdYX09QQ19QUkVGRVRDSF9BRERfTDIsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfQUREX0wyX0ZBVUxULAorICBUSUxFR1hfT1BDX1BSRUZFVENIX0FERF9MMywKKyAgVElMRUdYX09QQ19QUkVGRVRDSF9BRERfTDNfRkFVTFQsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfTDEsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfTDFfRkFVTFQsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfTDIsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfTDJfRkFVTFQsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfTDMsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfTDNfRkFVTFQsCisgIFRJTEVHWF9PUENfUkFJU0UsCisgIFRJTEVHWF9PUENfQURELAorICBUSUxFR1hfT1BDX0FEREksCisgIFRJTEVHWF9PUENfQURETEksCisgIFRJTEVHWF9PUENfQUREWCwKKyAgVElMRUdYX09QQ19BRERYSSwKKyAgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWFNDLAorICBUSUxFR1hfT1BDX0FORCwKKyAgVElMRUdYX09QQ19BTkRJLAorICBUSUxFR1hfT1BDX0JFUVosCisgIFRJTEVHWF9PUENfQkVRWlQsCisgIFRJTEVHWF9PUENfQkZFWFRTLAorICBUSUxFR1hfT1BDX0JGRVhUVSwKKyAgVElMRUdYX09QQ19CRklOUywKKyAgVElMRUdYX09QQ19CR0VaLAorICBUSUxFR1hfT1BDX0JHRVpULAorICBUSUxFR1hfT1BDX0JHVFosCisgIFRJTEVHWF9PUENfQkdUWlQsCisgIFRJTEVHWF9PUENfQkxCQywKKyAgVElMRUdYX09QQ19CTEJDVCwKKyAgVElMRUdYX09QQ19CTEJTLAorICBUSUxFR1hfT1BDX0JMQlNULAorICBUSUxFR1hfT1BDX0JMRVosCisgIFRJTEVHWF9PUENfQkxFWlQsCisgIFRJTEVHWF9PUENfQkxUWiwKKyAgVElMRUdYX09QQ19CTFRaVCwKKyAgVElMRUdYX09QQ19CTkVaLAorICBUSUxFR1hfT1BDX0JORVpULAorICBUSUxFR1hfT1BDX0NMWiwKKyAgVElMRUdYX09QQ19DTU9WRVFaLAorICBUSUxFR1hfT1BDX0NNT1ZORVosCisgIFRJTEVHWF9PUENfQ01QRVEsCisgIFRJTEVHWF9PUENfQ01QRVFJLAorICBUSUxFR1hfT1BDX0NNUEVYQ0gsCisgIFRJTEVHWF9PUENfQ01QRVhDSDQsCisgIFRJTEVHWF9PUENfQ01QTEVTLAorICBUSUxFR1hfT1BDX0NNUExFVSwKKyAgVElMRUdYX09QQ19DTVBMVFMsCisgIFRJTEVHWF9PUENfQ01QTFRTSSwKKyAgVElMRUdYX09QQ19DTVBMVFUsCisgIFRJTEVHWF9PUENfQ01QTFRVSSwKKyAgVElMRUdYX09QQ19DTVBORSwKKyAgVElMRUdYX09QQ19DTVVMLAorICBUSUxFR1hfT1BDX0NNVUxBLAorICBUSUxFR1hfT1BDX0NNVUxBRiwKKyAgVElMRUdYX09QQ19DTVVMRiwKKyAgVElMRUdYX09QQ19DTVVMRlIsCisgIFRJTEVHWF9PUENfQ01VTEgsCisgIFRJTEVHWF9PUENfQ01VTEhSLAorICBUSUxFR1hfT1BDX0NSQzMyXzMyLAorICBUSUxFR1hfT1BDX0NSQzMyXzgsCisgIFRJTEVHWF9PUENfQ1RaLAorICBUSUxFR1hfT1BDX0RCTEFMSUdOLAorICBUSUxFR1hfT1BDX0RCTEFMSUdOMiwKKyAgVElMRUdYX09QQ19EQkxBTElHTjQsCisgIFRJTEVHWF9PUENfREJMQUxJR042LAorICBUSUxFR1hfT1BDX0RSQUlOLAorICBUSUxFR1hfT1BDX0RUTEJQUiwKKyAgVElMRUdYX09QQ19FWENILAorICBUSUxFR1hfT1BDX0VYQ0g0LAorICBUSUxFR1hfT1BDX0ZET1VCTEVfQUREX0ZMQUdTLAorICBUSUxFR1hfT1BDX0ZET1VCTEVfQUREU1VCLAorICBUSUxFR1hfT1BDX0ZET1VCTEVfTVVMX0ZMQUdTLAorICBUSUxFR1hfT1BDX0ZET1VCTEVfUEFDSzEsCisgIFRJTEVHWF9PUENfRkRPVUJMRV9QQUNLMiwKKyAgVElMRUdYX09QQ19GRE9VQkxFX1NVQl9GTEFHUywKKyAgVElMRUdYX09QQ19GRE9VQkxFX1VOUEFDS19NQVgsCisgIFRJTEVHWF9PUENfRkRPVUJMRV9VTlBBQ0tfTUlOLAorICBUSUxFR1hfT1BDX0ZFVENIQURELAorICBUSUxFR1hfT1BDX0ZFVENIQURENCwKKyAgVElMRUdYX09QQ19GRVRDSEFEREdFWiwKKyAgVElMRUdYX09QQ19GRVRDSEFEREdFWjQsCisgIFRJTEVHWF9PUENfRkVUQ0hBTkQsCisgIFRJTEVHWF9PUENfRkVUQ0hBTkQ0LAorICBUSUxFR1hfT1BDX0ZFVENIT1IsCisgIFRJTEVHWF9PUENfRkVUQ0hPUjQsCisgIFRJTEVHWF9PUENfRklOViwKKyAgVElMRUdYX09QQ19GTFVTSCwKKyAgVElMRUdYX09QQ19GTFVTSFdCLAorICBUSUxFR1hfT1BDX0ZOT1AsCisgIFRJTEVHWF9PUENfRlNJTkdMRV9BREQxLAorICBUSUxFR1hfT1BDX0ZTSU5HTEVfQUREU1VCMiwKKyAgVElMRUdYX09QQ19GU0lOR0xFX01VTDEsCisgIFRJTEVHWF9PUENfRlNJTkdMRV9NVUwyLAorICBUSUxFR1hfT1BDX0ZTSU5HTEVfUEFDSzEsCisgIFRJTEVHWF9PUENfRlNJTkdMRV9QQUNLMiwKKyAgVElMRUdYX09QQ19GU0lOR0xFX1NVQjEsCisgIFRJTEVHWF9PUENfSUNPSCwKKyAgVElMRUdYX09QQ19JTEwsCisgIFRJTEVHWF9PUENfSU5WLAorICBUSUxFR1hfT1BDX0lSRVQsCisgIFRJTEVHWF9PUENfSiwKKyAgVElMRUdYX09QQ19KQUwsCisgIFRJTEVHWF9PUENfSkFMUiwKKyAgVElMRUdYX09QQ19KQUxSUCwKKyAgVElMRUdYX09QQ19KUiwKKyAgVElMRUdYX09QQ19KUlAsCisgIFRJTEVHWF9PUENfTEQsCisgIFRJTEVHWF9PUENfTEQxUywKKyAgVElMRUdYX09QQ19MRDFTX0FERCwKKyAgVElMRUdYX09QQ19MRDFVLAorICBUSUxFR1hfT1BDX0xEMVVfQURELAorICBUSUxFR1hfT1BDX0xEMlMsCisgIFRJTEVHWF9PUENfTEQyU19BREQsCisgIFRJTEVHWF9PUENfTEQyVSwKKyAgVElMRUdYX09QQ19MRDJVX0FERCwKKyAgVElMRUdYX09QQ19MRDRTLAorICBUSUxFR1hfT1BDX0xENFNfQURELAorICBUSUxFR1hfT1BDX0xENFUsCisgIFRJTEVHWF9PUENfTEQ0VV9BREQsCisgIFRJTEVHWF9PUENfTERfQURELAorICBUSUxFR1hfT1BDX0xETkEsCisgIFRJTEVHWF9PUENfTEROQV9BREQsCisgIFRJTEVHWF9PUENfTEROVCwKKyAgVElMRUdYX09QQ19MRE5UMVMsCisgIFRJTEVHWF9PUENfTEROVDFTX0FERCwKKyAgVElMRUdYX09QQ19MRE5UMVUsCisgIFRJTEVHWF9PUENfTEROVDFVX0FERCwKKyAgVElMRUdYX09QQ19MRE5UMlMsCisgIFRJTEVHWF9PUENfTEROVDJTX0FERCwKKyAgVElMRUdYX09QQ19MRE5UMlUsCisgIFRJTEVHWF9PUENfTEROVDJVX0FERCwKKyAgVElMRUdYX09QQ19MRE5UNFMsCisgIFRJTEVHWF9PUENfTEROVDRTX0FERCwKKyAgVElMRUdYX09QQ19MRE5UNFUsCisgIFRJTEVHWF9PUENfTEROVDRVX0FERCwKKyAgVElMRUdYX09QQ19MRE5UX0FERCwKKyAgVElMRUdYX09QQ19MTkssCisgIFRJTEVHWF9PUENfTUYsCisgIFRJTEVHWF9PUENfTUZTUFIsCisgIFRJTEVHWF9PUENfTU0sCisgIFRJTEVHWF9PUENfTU5aLAorICBUSUxFR1hfT1BDX01UU1BSLAorICBUSUxFR1hfT1BDX01VTF9IU19IUywKKyAgVElMRUdYX09QQ19NVUxfSFNfSFUsCisgIFRJTEVHWF9PUENfTVVMX0hTX0xTLAorICBUSUxFR1hfT1BDX01VTF9IU19MVSwKKyAgVElMRUdYX09QQ19NVUxfSFVfSFUsCisgIFRJTEVHWF9PUENfTVVMX0hVX0xTLAorICBUSUxFR1hfT1BDX01VTF9IVV9MVSwKKyAgVElMRUdYX09QQ19NVUxfTFNfTFMsCisgIFRJTEVHWF9PUENfTVVMX0xTX0xVLAorICBUSUxFR1hfT1BDX01VTF9MVV9MVSwKKyAgVElMRUdYX09QQ19NVUxBX0hTX0hTLAorICBUSUxFR1hfT1BDX01VTEFfSFNfSFUsCisgIFRJTEVHWF9PUENfTVVMQV9IU19MUywKKyAgVElMRUdYX09QQ19NVUxBX0hTX0xVLAorICBUSUxFR1hfT1BDX01VTEFfSFVfSFUsCisgIFRJTEVHWF9PUENfTVVMQV9IVV9MUywKKyAgVElMRUdYX09QQ19NVUxBX0hVX0xVLAorICBUSUxFR1hfT1BDX01VTEFfTFNfTFMsCisgIFRJTEVHWF9PUENfTVVMQV9MU19MVSwKKyAgVElMRUdYX09QQ19NVUxBX0xVX0xVLAorICBUSUxFR1hfT1BDX01VTEFYLAorICBUSUxFR1hfT1BDX01VTFgsCisgIFRJTEVHWF9PUENfTVosCisgIFRJTEVHWF9PUENfTkFQLAorICBUSUxFR1hfT1BDX05PUCwKKyAgVElMRUdYX09QQ19OT1IsCisgIFRJTEVHWF9PUENfT1IsCisgIFRJTEVHWF9PUENfT1JJLAorICBUSUxFR1hfT1BDX1BDTlQsCisgIFRJTEVHWF9PUENfUkVWQklUUywKKyAgVElMRUdYX09QQ19SRVZCWVRFUywKKyAgVElMRUdYX09QQ19ST1RMLAorICBUSUxFR1hfT1BDX1JPVExJLAorICBUSUxFR1hfT1BDX1NITCwKKyAgVElMRUdYX09QQ19TSEwxNklOU0xJLAorICBUSUxFR1hfT1BDX1NITDFBREQsCisgIFRJTEVHWF9PUENfU0hMMUFERFgsCisgIFRJTEVHWF9PUENfU0hMMkFERCwKKyAgVElMRUdYX09QQ19TSEwyQUREWCwKKyAgVElMRUdYX09QQ19TSEwzQURELAorICBUSUxFR1hfT1BDX1NITDNBRERYLAorICBUSUxFR1hfT1BDX1NITEksCisgIFRJTEVHWF9PUENfU0hMWCwKKyAgVElMRUdYX09QQ19TSExYSSwKKyAgVElMRUdYX09QQ19TSFJTLAorICBUSUxFR1hfT1BDX1NIUlNJLAorICBUSUxFR1hfT1BDX1NIUlUsCisgIFRJTEVHWF9PUENfU0hSVUksCisgIFRJTEVHWF9PUENfU0hSVVgsCisgIFRJTEVHWF9PUENfU0hSVVhJLAorICBUSUxFR1hfT1BDX1NIVUZGTEVCWVRFUywKKyAgVElMRUdYX09QQ19TVCwKKyAgVElMRUdYX09QQ19TVDEsCisgIFRJTEVHWF9PUENfU1QxX0FERCwKKyAgVElMRUdYX09QQ19TVDIsCisgIFRJTEVHWF9PUENfU1QyX0FERCwKKyAgVElMRUdYX09QQ19TVDQsCisgIFRJTEVHWF9PUENfU1Q0X0FERCwKKyAgVElMRUdYX09QQ19TVF9BREQsCisgIFRJTEVHWF9PUENfU1ROVCwKKyAgVElMRUdYX09QQ19TVE5UMSwKKyAgVElMRUdYX09QQ19TVE5UMV9BREQsCisgIFRJTEVHWF9PUENfU1ROVDIsCisgIFRJTEVHWF9PUENfU1ROVDJfQURELAorICBUSUxFR1hfT1BDX1NUTlQ0LAorICBUSUxFR1hfT1BDX1NUTlQ0X0FERCwKKyAgVElMRUdYX09QQ19TVE5UX0FERCwKKyAgVElMRUdYX09QQ19TVUIsCisgIFRJTEVHWF9PUENfU1VCWCwKKyAgVElMRUdYX09QQ19TVUJYU0MsCisgIFRJTEVHWF9PUENfU1dJTlQwLAorICBUSUxFR1hfT1BDX1NXSU5UMSwKKyAgVElMRUdYX09QQ19TV0lOVDIsCisgIFRJTEVHWF9PUENfU1dJTlQzLAorICBUSUxFR1hfT1BDX1RCTElEWEIwLAorICBUSUxFR1hfT1BDX1RCTElEWEIxLAorICBUSUxFR1hfT1BDX1RCTElEWEIyLAorICBUSUxFR1hfT1BDX1RCTElEWEIzLAorICBUSUxFR1hfT1BDX1YxQURELAorICBUSUxFR1hfT1BDX1YxQURESSwKKyAgVElMRUdYX09QQ19WMUFERFVDLAorICBUSUxFR1hfT1BDX1YxQURJRkZVLAorICBUSUxFR1hfT1BDX1YxQVZHVSwKKyAgVElMRUdYX09QQ19WMUNNUEVRLAorICBUSUxFR1hfT1BDX1YxQ01QRVFJLAorICBUSUxFR1hfT1BDX1YxQ01QTEVTLAorICBUSUxFR1hfT1BDX1YxQ01QTEVVLAorICBUSUxFR1hfT1BDX1YxQ01QTFRTLAorICBUSUxFR1hfT1BDX1YxQ01QTFRTSSwKKyAgVElMRUdYX09QQ19WMUNNUExUVSwKKyAgVElMRUdYX09QQ19WMUNNUExUVUksCisgIFRJTEVHWF9PUENfVjFDTVBORSwKKyAgVElMRUdYX09QQ19WMURET1RQVSwKKyAgVElMRUdYX09QQ19WMURET1RQVUEsCisgIFRJTEVHWF9PUENfVjFERE9UUFVTLAorICBUSUxFR1hfT1BDX1YxRERPVFBVU0EsCisgIFRJTEVHWF9PUENfVjFET1RQLAorICBUSUxFR1hfT1BDX1YxRE9UUEEsCisgIFRJTEVHWF9PUENfVjFET1RQVSwKKyAgVElMRUdYX09QQ19WMURPVFBVQSwKKyAgVElMRUdYX09QQ19WMURPVFBVUywKKyAgVElMRUdYX09QQ19WMURPVFBVU0EsCisgIFRJTEVHWF9PUENfVjFJTlRfSCwKKyAgVElMRUdYX09QQ19WMUlOVF9MLAorICBUSUxFR1hfT1BDX1YxTUFYVSwKKyAgVElMRUdYX09QQ19WMU1BWFVJLAorICBUSUxFR1hfT1BDX1YxTUlOVSwKKyAgVElMRUdYX09QQ19WMU1JTlVJLAorICBUSUxFR1hfT1BDX1YxTU5aLAorICBUSUxFR1hfT1BDX1YxTVVMVFUsCisgIFRJTEVHWF9PUENfVjFNVUxVLAorICBUSUxFR1hfT1BDX1YxTVVMVVMsCisgIFRJTEVHWF9PUENfVjFNWiwKKyAgVElMRUdYX09QQ19WMVNBREFVLAorICBUSUxFR1hfT1BDX1YxU0FEVSwKKyAgVElMRUdYX09QQ19WMVNITCwKKyAgVElMRUdYX09QQ19WMVNITEksCisgIFRJTEVHWF9PUENfVjFTSFJTLAorICBUSUxFR1hfT1BDX1YxU0hSU0ksCisgIFRJTEVHWF9PUENfVjFTSFJVLAorICBUSUxFR1hfT1BDX1YxU0hSVUksCisgIFRJTEVHWF9PUENfVjFTVUIsCisgIFRJTEVHWF9PUENfVjFTVUJVQywKKyAgVElMRUdYX09QQ19WMkFERCwKKyAgVElMRUdYX09QQ19WMkFEREksCisgIFRJTEVHWF9PUENfVjJBRERTQywKKyAgVElMRUdYX09QQ19WMkFESUZGUywKKyAgVElMRUdYX09QQ19WMkFWR1MsCisgIFRJTEVHWF9PUENfVjJDTVBFUSwKKyAgVElMRUdYX09QQ19WMkNNUEVRSSwKKyAgVElMRUdYX09QQ19WMkNNUExFUywKKyAgVElMRUdYX09QQ19WMkNNUExFVSwKKyAgVElMRUdYX09QQ19WMkNNUExUUywKKyAgVElMRUdYX09QQ19WMkNNUExUU0ksCisgIFRJTEVHWF9PUENfVjJDTVBMVFUsCisgIFRJTEVHWF9PUENfVjJDTVBMVFVJLAorICBUSUxFR1hfT1BDX1YyQ01QTkUsCisgIFRJTEVHWF9PUENfVjJET1RQLAorICBUSUxFR1hfT1BDX1YyRE9UUEEsCisgIFRJTEVHWF9PUENfVjJJTlRfSCwKKyAgVElMRUdYX09QQ19WMklOVF9MLAorICBUSUxFR1hfT1BDX1YyTUFYUywKKyAgVElMRUdYX09QQ19WMk1BWFNJLAorICBUSUxFR1hfT1BDX1YyTUlOUywKKyAgVElMRUdYX09QQ19WMk1JTlNJLAorICBUSUxFR1hfT1BDX1YyTU5aLAorICBUSUxFR1hfT1BDX1YyTVVMRlNDLAorICBUSUxFR1hfT1BDX1YyTVVMUywKKyAgVElMRUdYX09QQ19WMk1VTFRTLAorICBUSUxFR1hfT1BDX1YyTVosCisgIFRJTEVHWF9PUENfVjJQQUNLSCwKKyAgVElMRUdYX09QQ19WMlBBQ0tMLAorICBUSUxFR1hfT1BDX1YyUEFDS1VDLAorICBUSUxFR1hfT1BDX1YyU0FEQVMsCisgIFRJTEVHWF9PUENfVjJTQURBVSwKKyAgVElMRUdYX09QQ19WMlNBRFMsCisgIFRJTEVHWF9PUENfVjJTQURVLAorICBUSUxFR1hfT1BDX1YyU0hMLAorICBUSUxFR1hfT1BDX1YyU0hMSSwKKyAgVElMRUdYX09QQ19WMlNITFNDLAorICBUSUxFR1hfT1BDX1YyU0hSUywKKyAgVElMRUdYX09QQ19WMlNIUlNJLAorICBUSUxFR1hfT1BDX1YyU0hSVSwKKyAgVElMRUdYX09QQ19WMlNIUlVJLAorICBUSUxFR1hfT1BDX1YyU1VCLAorICBUSUxFR1hfT1BDX1YyU1VCU0MsCisgIFRJTEVHWF9PUENfVjRBREQsCisgIFRJTEVHWF9PUENfVjRBRERTQywKKyAgVElMRUdYX09QQ19WNElOVF9ILAorICBUSUxFR1hfT1BDX1Y0SU5UX0wsCisgIFRJTEVHWF9PUENfVjRQQUNLU0MsCisgIFRJTEVHWF9PUENfVjRTSEwsCisgIFRJTEVHWF9PUENfVjRTSExTQywKKyAgVElMRUdYX09QQ19WNFNIUlMsCisgIFRJTEVHWF9PUENfVjRTSFJVLAorICBUSUxFR1hfT1BDX1Y0U1VCLAorICBUSUxFR1hfT1BDX1Y0U1VCU0MsCisgIFRJTEVHWF9PUENfV0g2NCwKKyAgVElMRUdYX09QQ19YT1IsCisgIFRJTEVHWF9PUENfWE9SSSwKKyAgVElMRUdYX09QQ19OT05FCit9IHRpbGVneF9tbmVtb25pYzsKKworZW51bQoreworICBUSUxFR1hfTUFYX09QRVJBTkRTID0gNCAvKiBiZmV4dHMgKi8KK307CisKK3N0cnVjdCB0aWxlZ3hfb3Bjb2RlCit7CisgIC8qIFRoZSBvcGNvZGUgbW5lbW9uaWMsIGUuZy4gImFkZCIgKi8KKyAgY29uc3QgY2hhciAqbmFtZTsKKworICAvKiBUaGUgZW51bSB2YWx1ZSBmb3IgdGhpcyBtbmVtb25pYy4gKi8KKyAgdGlsZWd4X21uZW1vbmljIG1uZW1vbmljOworCisgIC8qIEEgYml0IG1hc2sgb2Ygd2hpY2ggb2YgdGhlIGZpdmUgcGlwZXMgdGhpcyBpbnN0cnVjdGlvbgorICAgICBpcyBjb21wYXRpYmxlIHdpdGg6CisgICAgIFgwICAweDAxCisgICAgIFgxICAweDAyCisgICAgIFkwICAweDA0CisgICAgIFkxICAweDA4CisgICAgIFkyICAweDEwICovCisgIHVuc2lnbmVkIGNoYXIgcGlwZXM7CisKKyAgLyogSG93IG1hbnkgb3BlcmFuZHMgYXJlIHRoZXJlPyAqLworICB1bnNpZ25lZCBjaGFyIG51bV9vcGVyYW5kczsKKworICAvKiBXaGljaCByZWdpc3RlciBkb2VzIHRoaXMgd3JpdGUgaW1wbGljaXRseSwgb3IgVFJFR19aRVJPIGlmIG5vbmU/ICovCisgIHVuc2lnbmVkIGNoYXIgaW1wbGljaXRseV93cml0dGVuX3JlZ2lzdGVyOworCisgIC8qIENhbiB0aGlzIGJlIGJ1bmRsZWQgd2l0aCBvdGhlciBpbnN0cnVjdGlvbnMgKGFsbW9zdCBhbHdheXMgdHJ1ZSkuICovCisgIHVuc2lnbmVkIGNoYXIgY2FuX2J1bmRsZTsKKworICAvKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIG9wZXJhbmRzLiBFYWNoIG9mIHRoZXNlIGlzIGFuCisgICAqIGluZGV4IGludG8gdGhlIHRpbGVneF9vcGVyYW5kc1tdIHRhYmxlLiAqLworICB1bnNpZ25lZCBjaGFyIG9wZXJhbmRzW1RJTEVHWF9OVU1fUElQRUxJTkVfRU5DT0RJTkdTXVtUSUxFR1hfTUFYX09QRVJBTkRTXTsKKworICAvKiBBIG1hc2sgb2Ygd2hpY2ggYml0cyBoYXZlIHByZWRlZmluZWQgdmFsdWVzIGZvciBlYWNoIHBpcGVsaW5lLgorICAgKiBUaGlzIGlzIHVzZWZ1bCBmb3IgZGlzYXNzZW1ibHkuICovCisgIHRpbGVneF9idW5kbGVfYml0cyBmaXhlZF9iaXRfbWFza3NbVElMRUdYX05VTV9QSVBFTElORV9FTkNPRElOR1NdOworCisgIC8qIEZvciBlYWNoIGJpdCBzZXQgaW4gZml4ZWRfYml0X21hc2tzLCB3aGF0IHRoZSB2YWx1ZSBpcyBmb3IgdGhpcworICAgKiBpbnN0cnVjdGlvbi4gKi8KKyAgdGlsZWd4X2J1bmRsZV9iaXRzIGZpeGVkX2JpdF92YWx1ZXNbVElMRUdYX05VTV9QSVBFTElORV9FTkNPRElOR1NdOworfTsKKworLyogVXNlZCBmb3Igbm9uLXRleHR1YWwgZGlzYXNzZW1ibHkgaW50byBzdHJ1Y3RzLiAqLworc3RydWN0IHRpbGVneF9kZWNvZGVkX2luc3RydWN0aW9uCit7CisgIGNvbnN0IHN0cnVjdCB0aWxlZ3hfb3Bjb2RlICpvcGNvZGU7CisgIGNvbnN0IHN0cnVjdCB0aWxlZ3hfb3BlcmFuZCAqb3BlcmFuZHNbVElMRUdYX01BWF9PUEVSQU5EU107CisgIGxvbmcgbG9uZyBvcGVyYW5kX3ZhbHVlc1tUSUxFR1hfTUFYX09QRVJBTkRTXTsKK307CisKK2VudW0KK3sKKyAgQURESV9JTU04X09QQ09ERV9YMCA9IDEsCisgIEFERElfSU1NOF9PUENPREVfWDEgPSAxLAorICBBRERJX09QQ09ERV9ZMCA9IDAsCisgIEFERElfT1BDT0RFX1kxID0gMSwKKyAgQURETElfT1BDT0RFX1gwID0gMSwKKyAgQURETElfT1BDT0RFX1gxID0gMCwKKyAgQUREWElfSU1NOF9PUENPREVfWDAgPSAyLAorICBBRERYSV9JTU04X09QQ09ERV9YMSA9IDIsCisgIEFERFhJX09QQ09ERV9ZMCA9IDEsCisgIEFERFhJX09QQ09ERV9ZMSA9IDIsCisgIEFERFhMSV9PUENPREVfWDAgPSAyLAorICBBRERYTElfT1BDT0RFX1gxID0gMSwKKyAgQUREWFNDX1JSUl8wX09QQ09ERV9YMCA9IDEsCisgIEFERFhTQ19SUlJfMF9PUENPREVfWDEgPSAxLAorICBBRERYX1JSUl8wX09QQ09ERV9YMCA9IDIsCisgIEFERFhfUlJSXzBfT1BDT0RFX1gxID0gMiwKKyAgQUREWF9SUlJfMF9PUENPREVfWTAgPSAwLAorICBBRERYX1NQRUNJQUxfMF9PUENPREVfWTEgPSAwLAorICBBRERfUlJSXzBfT1BDT0RFX1gwID0gMywKKyAgQUREX1JSUl8wX09QQ09ERV9YMSA9IDMsCisgIEFERF9SUlJfMF9PUENPREVfWTAgPSAxLAorICBBRERfU1BFQ0lBTF8wX09QQ09ERV9ZMSA9IDEsCisgIEFORElfSU1NOF9PUENPREVfWDAgPSAzLAorICBBTkRJX0lNTThfT1BDT0RFX1gxID0gMywKKyAgQU5ESV9PUENPREVfWTAgPSAyLAorICBBTkRJX09QQ09ERV9ZMSA9IDMsCisgIEFORF9SUlJfMF9PUENPREVfWDAgPSA0LAorICBBTkRfUlJSXzBfT1BDT0RFX1gxID0gNCwKKyAgQU5EX1JSUl81X09QQ09ERV9ZMCA9IDAsCisgIEFORF9SUlJfNV9PUENPREVfWTEgPSAwLAorICBCRVFaVF9CUkFOQ0hfT1BDT0RFX1gxID0gMTYsCisgIEJFUVpfQlJBTkNIX09QQ09ERV9YMSA9IDE3LAorICBCRkVYVFNfQkZfT1BDT0RFX1gwID0gNCwKKyAgQkZFWFRVX0JGX09QQ09ERV9YMCA9IDUsCisgIEJGSU5TX0JGX09QQ09ERV9YMCA9IDYsCisgIEJGX09QQ09ERV9YMCA9IDMsCisgIEJHRVpUX0JSQU5DSF9PUENPREVfWDEgPSAxOCwKKyAgQkdFWl9CUkFOQ0hfT1BDT0RFX1gxID0gMTksCisgIEJHVFpUX0JSQU5DSF9PUENPREVfWDEgPSAyMCwKKyAgQkdUWl9CUkFOQ0hfT1BDT0RFX1gxID0gMjEsCisgIEJMQkNUX0JSQU5DSF9PUENPREVfWDEgPSAyMiwKKyAgQkxCQ19CUkFOQ0hfT1BDT0RFX1gxID0gMjMsCisgIEJMQlNUX0JSQU5DSF9PUENPREVfWDEgPSAyNCwKKyAgQkxCU19CUkFOQ0hfT1BDT0RFX1gxID0gMjUsCisgIEJMRVpUX0JSQU5DSF9PUENPREVfWDEgPSAyNiwKKyAgQkxFWl9CUkFOQ0hfT1BDT0RFX1gxID0gMjcsCisgIEJMVFpUX0JSQU5DSF9PUENPREVfWDEgPSAyOCwKKyAgQkxUWl9CUkFOQ0hfT1BDT0RFX1gxID0gMjksCisgIEJORVpUX0JSQU5DSF9PUENPREVfWDEgPSAzMCwKKyAgQk5FWl9CUkFOQ0hfT1BDT0RFX1gxID0gMzEsCisgIEJSQU5DSF9PUENPREVfWDEgPSAyLAorICBDTU9WRVFaX1JSUl8wX09QQ09ERV9YMCA9IDUsCisgIENNT1ZFUVpfUlJSXzRfT1BDT0RFX1kwID0gMCwKKyAgQ01PVk5FWl9SUlJfMF9PUENPREVfWDAgPSA2LAorICBDTU9WTkVaX1JSUl80X09QQ09ERV9ZMCA9IDEsCisgIENNUEVRSV9JTU04X09QQ09ERV9YMCA9IDQsCisgIENNUEVRSV9JTU04X09QQ09ERV9YMSA9IDQsCisgIENNUEVRSV9PUENPREVfWTAgPSAzLAorICBDTVBFUUlfT1BDT0RFX1kxID0gNCwKKyAgQ01QRVFfUlJSXzBfT1BDT0RFX1gwID0gNywKKyAgQ01QRVFfUlJSXzBfT1BDT0RFX1gxID0gNSwKKyAgQ01QRVFfUlJSXzNfT1BDT0RFX1kwID0gMCwKKyAgQ01QRVFfUlJSXzNfT1BDT0RFX1kxID0gMiwKKyAgQ01QRVhDSDRfUlJSXzBfT1BDT0RFX1gxID0gNiwKKyAgQ01QRVhDSF9SUlJfMF9PUENPREVfWDEgPSA3LAorICBDTVBMRVNfUlJSXzBfT1BDT0RFX1gwID0gOCwKKyAgQ01QTEVTX1JSUl8wX09QQ09ERV9YMSA9IDgsCisgIENNUExFU19SUlJfMl9PUENPREVfWTAgPSAwLAorICBDTVBMRVNfUlJSXzJfT1BDT0RFX1kxID0gMCwKKyAgQ01QTEVVX1JSUl8wX09QQ09ERV9YMCA9IDksCisgIENNUExFVV9SUlJfMF9PUENPREVfWDEgPSA5LAorICBDTVBMRVVfUlJSXzJfT1BDT0RFX1kwID0gMSwKKyAgQ01QTEVVX1JSUl8yX09QQ09ERV9ZMSA9IDEsCisgIENNUExUU0lfSU1NOF9PUENPREVfWDAgPSA1LAorICBDTVBMVFNJX0lNTThfT1BDT0RFX1gxID0gNSwKKyAgQ01QTFRTSV9PUENPREVfWTAgPSA0LAorICBDTVBMVFNJX09QQ09ERV9ZMSA9IDUsCisgIENNUExUU19SUlJfMF9PUENPREVfWDAgPSAxMCwKKyAgQ01QTFRTX1JSUl8wX09QQ09ERV9YMSA9IDEwLAorICBDTVBMVFNfUlJSXzJfT1BDT0RFX1kwID0gMiwKKyAgQ01QTFRTX1JSUl8yX09QQ09ERV9ZMSA9IDIsCisgIENNUExUVUlfSU1NOF9PUENPREVfWDAgPSA2LAorICBDTVBMVFVJX0lNTThfT1BDT0RFX1gxID0gNiwKKyAgQ01QTFRVX1JSUl8wX09QQ09ERV9YMCA9IDExLAorICBDTVBMVFVfUlJSXzBfT1BDT0RFX1gxID0gMTEsCisgIENNUExUVV9SUlJfMl9PUENPREVfWTAgPSAzLAorICBDTVBMVFVfUlJSXzJfT1BDT0RFX1kxID0gMywKKyAgQ01QTkVfUlJSXzBfT1BDT0RFX1gwID0gMTIsCisgIENNUE5FX1JSUl8wX09QQ09ERV9YMSA9IDEyLAorICBDTVBORV9SUlJfM19PUENPREVfWTAgPSAxLAorICBDTVBORV9SUlJfM19PUENPREVfWTEgPSAzLAorICBDTVVMQUZfUlJSXzBfT1BDT0RFX1gwID0gMTMsCisgIENNVUxBX1JSUl8wX09QQ09ERV9YMCA9IDE0LAorICBDTVVMRlJfUlJSXzBfT1BDT0RFX1gwID0gMTUsCisgIENNVUxGX1JSUl8wX09QQ09ERV9YMCA9IDE2LAorICBDTVVMSFJfUlJSXzBfT1BDT0RFX1gwID0gMTcsCisgIENNVUxIX1JSUl8wX09QQ09ERV9YMCA9IDE4LAorICBDTVVMX1JSUl8wX09QQ09ERV9YMCA9IDE5LAorICBDTlRMWl9VTkFSWV9PUENPREVfWDAgPSAxLAorICBDTlRMWl9VTkFSWV9PUENPREVfWTAgPSAxLAorICBDTlRUWl9VTkFSWV9PUENPREVfWDAgPSAyLAorICBDTlRUWl9VTkFSWV9PUENPREVfWTAgPSAyLAorICBDUkMzMl8zMl9SUlJfMF9PUENPREVfWDAgPSAyMCwKKyAgQ1JDMzJfOF9SUlJfMF9PUENPREVfWDAgPSAyMSwKKyAgREJMQUxJR04yX1JSUl8wX09QQ09ERV9YMCA9IDIyLAorICBEQkxBTElHTjJfUlJSXzBfT1BDT0RFX1gxID0gMTMsCisgIERCTEFMSUdONF9SUlJfMF9PUENPREVfWDAgPSAyMywKKyAgREJMQUxJR040X1JSUl8wX09QQ09ERV9YMSA9IDE0LAorICBEQkxBTElHTjZfUlJSXzBfT1BDT0RFX1gwID0gMjQsCisgIERCTEFMSUdONl9SUlJfMF9PUENPREVfWDEgPSAxNSwKKyAgREJMQUxJR05fUlJSXzBfT1BDT0RFX1gwID0gMjUsCisgIERSQUlOX1VOQVJZX09QQ09ERV9YMSA9IDEsCisgIERUTEJQUl9VTkFSWV9PUENPREVfWDEgPSAyLAorICBFWENINF9SUlJfMF9PUENPREVfWDEgPSAxNiwKKyAgRVhDSF9SUlJfMF9PUENPREVfWDEgPSAxNywKKyAgRkRPVUJMRV9BRERTVUJfUlJSXzBfT1BDT0RFX1gwID0gMjYsCisgIEZET1VCTEVfQUREX0ZMQUdTX1JSUl8wX09QQ09ERV9YMCA9IDI3LAorICBGRE9VQkxFX01VTF9GTEFHU19SUlJfMF9PUENPREVfWDAgPSAyOCwKKyAgRkRPVUJMRV9QQUNLMV9SUlJfMF9PUENPREVfWDAgPSAyOSwKKyAgRkRPVUJMRV9QQUNLMl9SUlJfMF9PUENPREVfWDAgPSAzMCwKKyAgRkRPVUJMRV9TVUJfRkxBR1NfUlJSXzBfT1BDT0RFX1gwID0gMzEsCisgIEZET1VCTEVfVU5QQUNLX01BWF9SUlJfMF9PUENPREVfWDAgPSAzMiwKKyAgRkRPVUJMRV9VTlBBQ0tfTUlOX1JSUl8wX09QQ09ERV9YMCA9IDMzLAorICBGRVRDSEFERDRfUlJSXzBfT1BDT0RFX1gxID0gMTgsCisgIEZFVENIQURER0VaNF9SUlJfMF9PUENPREVfWDEgPSAxOSwKKyAgRkVUQ0hBRERHRVpfUlJSXzBfT1BDT0RFX1gxID0gMjAsCisgIEZFVENIQUREX1JSUl8wX09QQ09ERV9YMSA9IDIxLAorICBGRVRDSEFORDRfUlJSXzBfT1BDT0RFX1gxID0gMjIsCisgIEZFVENIQU5EX1JSUl8wX09QQ09ERV9YMSA9IDIzLAorICBGRVRDSE9SNF9SUlJfMF9PUENPREVfWDEgPSAyNCwKKyAgRkVUQ0hPUl9SUlJfMF9PUENPREVfWDEgPSAyNSwKKyAgRklOVl9VTkFSWV9PUENPREVfWDEgPSAzLAorICBGTFVTSFdCX1VOQVJZX09QQ09ERV9YMSA9IDQsCisgIEZMVVNIX1VOQVJZX09QQ09ERV9YMSA9IDUsCisgIEZOT1BfVU5BUllfT1BDT0RFX1gwID0gMywKKyAgRk5PUF9VTkFSWV9PUENPREVfWDEgPSA2LAorICBGTk9QX1VOQVJZX09QQ09ERV9ZMCA9IDMsCisgIEZOT1BfVU5BUllfT1BDT0RFX1kxID0gOCwKKyAgRlNJTkdMRV9BREQxX1JSUl8wX09QQ09ERV9YMCA9IDM0LAorICBGU0lOR0xFX0FERFNVQjJfUlJSXzBfT1BDT0RFX1gwID0gMzUsCisgIEZTSU5HTEVfTVVMMV9SUlJfMF9PUENPREVfWDAgPSAzNiwKKyAgRlNJTkdMRV9NVUwyX1JSUl8wX09QQ09ERV9YMCA9IDM3LAorICBGU0lOR0xFX1BBQ0sxX1VOQVJZX09QQ09ERV9YMCA9IDQsCisgIEZTSU5HTEVfUEFDSzFfVU5BUllfT1BDT0RFX1kwID0gNCwKKyAgRlNJTkdMRV9QQUNLMl9SUlJfMF9PUENPREVfWDAgPSAzOCwKKyAgRlNJTkdMRV9TVUIxX1JSUl8wX09QQ09ERV9YMCA9IDM5LAorICBJQ09IX1VOQVJZX09QQ09ERV9YMSA9IDcsCisgIElMTF9VTkFSWV9PUENPREVfWDEgPSA4LAorICBJTExfVU5BUllfT1BDT0RFX1kxID0gOSwKKyAgSU1NOF9PUENPREVfWDAgPSA0LAorICBJTU04X09QQ09ERV9YMSA9IDMsCisgIElOVl9VTkFSWV9PUENPREVfWDEgPSA5LAorICBJUkVUX1VOQVJZX09QQ09ERV9YMSA9IDEwLAorICBKQUxSUF9VTkFSWV9PUENPREVfWDEgPSAxMSwKKyAgSkFMUlBfVU5BUllfT1BDT0RFX1kxID0gMTAsCisgIEpBTFJfVU5BUllfT1BDT0RFX1gxID0gMTIsCisgIEpBTFJfVU5BUllfT1BDT0RFX1kxID0gMTEsCisgIEpBTF9KVU1QX09QQ09ERV9YMSA9IDAsCisgIEpSUF9VTkFSWV9PUENPREVfWDEgPSAxMywKKyAgSlJQX1VOQVJZX09QQ09ERV9ZMSA9IDEyLAorICBKUl9VTkFSWV9PUENPREVfWDEgPSAxNCwKKyAgSlJfVU5BUllfT1BDT0RFX1kxID0gMTMsCisgIEpVTVBfT1BDT0RFX1gxID0gNCwKKyAgSl9KVU1QX09QQ09ERV9YMSA9IDEsCisgIExEMVNfQUREX0lNTThfT1BDT0RFX1gxID0gNywKKyAgTEQxU19PUENPREVfWTIgPSAwLAorICBMRDFTX1VOQVJZX09QQ09ERV9YMSA9IDE1LAorICBMRDFVX0FERF9JTU04X09QQ09ERV9YMSA9IDgsCisgIExEMVVfT1BDT0RFX1kyID0gMSwKKyAgTEQxVV9VTkFSWV9PUENPREVfWDEgPSAxNiwKKyAgTEQyU19BRERfSU1NOF9PUENPREVfWDEgPSA5LAorICBMRDJTX09QQ09ERV9ZMiA9IDIsCisgIExEMlNfVU5BUllfT1BDT0RFX1gxID0gMTcsCisgIExEMlVfQUREX0lNTThfT1BDT0RFX1gxID0gMTAsCisgIExEMlVfT1BDT0RFX1kyID0gMywKKyAgTEQyVV9VTkFSWV9PUENPREVfWDEgPSAxOCwKKyAgTEQ0U19BRERfSU1NOF9PUENPREVfWDEgPSAxMSwKKyAgTEQ0U19PUENPREVfWTIgPSAxLAorICBMRDRTX1VOQVJZX09QQ09ERV9YMSA9IDE5LAorICBMRDRVX0FERF9JTU04X09QQ09ERV9YMSA9IDEyLAorICBMRDRVX09QQ09ERV9ZMiA9IDIsCisgIExENFVfVU5BUllfT1BDT0RFX1gxID0gMjAsCisgIExETkFfVU5BUllfT1BDT0RFX1gxID0gMjEsCisgIExETlQxU19BRERfSU1NOF9PUENPREVfWDEgPSAxMywKKyAgTEROVDFTX1VOQVJZX09QQ09ERV9YMSA9IDIyLAorICBMRE5UMVVfQUREX0lNTThfT1BDT0RFX1gxID0gMTQsCisgIExETlQxVV9VTkFSWV9PUENPREVfWDEgPSAyMywKKyAgTEROVDJTX0FERF9JTU04X09QQ09ERV9YMSA9IDE1LAorICBMRE5UMlNfVU5BUllfT1BDT0RFX1gxID0gMjQsCisgIExETlQyVV9BRERfSU1NOF9PUENPREVfWDEgPSAxNiwKKyAgTEROVDJVX1VOQVJZX09QQ09ERV9YMSA9IDI1LAorICBMRE5UNFNfQUREX0lNTThfT1BDT0RFX1gxID0gMTcsCisgIExETlQ0U19VTkFSWV9PUENPREVfWDEgPSAyNiwKKyAgTEROVDRVX0FERF9JTU04X09QQ09ERV9YMSA9IDE4LAorICBMRE5UNFVfVU5BUllfT1BDT0RFX1gxID0gMjcsCisgIExETlRfQUREX0lNTThfT1BDT0RFX1gxID0gMTksCisgIExETlRfVU5BUllfT1BDT0RFX1gxID0gMjgsCisgIExEX0FERF9JTU04X09QQ09ERV9YMSA9IDIwLAorICBMRF9PUENPREVfWTIgPSAzLAorICBMRF9VTkFSWV9PUENPREVfWDEgPSAyOSwKKyAgTE5LX1VOQVJZX09QQ09ERV9YMSA9IDMwLAorICBMTktfVU5BUllfT1BDT0RFX1kxID0gMTQsCisgIExXTkFfQUREX0lNTThfT1BDT0RFX1gxID0gMjEsCisgIE1GU1BSX0lNTThfT1BDT0RFX1gxID0gMjIsCisgIE1GX1VOQVJZX09QQ09ERV9YMSA9IDMxLAorICBNTV9CRl9PUENPREVfWDAgPSA3LAorICBNTlpfUlJSXzBfT1BDT0RFX1gwID0gNDAsCisgIE1OWl9SUlJfMF9PUENPREVfWDEgPSAyNiwKKyAgTU5aX1JSUl80X09QQ09ERV9ZMCA9IDIsCisgIE1OWl9SUlJfNF9PUENPREVfWTEgPSAyLAorICBNT0RFX09QQ09ERV9ZQTIgPSAxLAorICBNT0RFX09QQ09ERV9ZQjIgPSAyLAorICBNT0RFX09QQ09ERV9ZQzIgPSAzLAorICBNVFNQUl9JTU04X09QQ09ERV9YMSA9IDIzLAorICBNVUxBWF9SUlJfMF9PUENPREVfWDAgPSA0MSwKKyAgTVVMQVhfUlJSXzNfT1BDT0RFX1kwID0gMiwKKyAgTVVMQV9IU19IU19SUlJfMF9PUENPREVfWDAgPSA0MiwKKyAgTVVMQV9IU19IU19SUlJfOV9PUENPREVfWTAgPSAwLAorICBNVUxBX0hTX0hVX1JSUl8wX09QQ09ERV9YMCA9IDQzLAorICBNVUxBX0hTX0xTX1JSUl8wX09QQ09ERV9YMCA9IDQ0LAorICBNVUxBX0hTX0xVX1JSUl8wX09QQ09ERV9YMCA9IDQ1LAorICBNVUxBX0hVX0hVX1JSUl8wX09QQ09ERV9YMCA9IDQ2LAorICBNVUxBX0hVX0hVX1JSUl85X09QQ09ERV9ZMCA9IDEsCisgIE1VTEFfSFVfTFNfUlJSXzBfT1BDT0RFX1gwID0gNDcsCisgIE1VTEFfSFVfTFVfUlJSXzBfT1BDT0RFX1gwID0gNDgsCisgIE1VTEFfTFNfTFNfUlJSXzBfT1BDT0RFX1gwID0gNDksCisgIE1VTEFfTFNfTFNfUlJSXzlfT1BDT0RFX1kwID0gMiwKKyAgTVVMQV9MU19MVV9SUlJfMF9PUENPREVfWDAgPSA1MCwKKyAgTVVMQV9MVV9MVV9SUlJfMF9PUENPREVfWDAgPSA1MSwKKyAgTVVMQV9MVV9MVV9SUlJfOV9PUENPREVfWTAgPSAzLAorICBNVUxYX1JSUl8wX09QQ09ERV9YMCA9IDUyLAorICBNVUxYX1JSUl8zX09QQ09ERV9ZMCA9IDMsCisgIE1VTF9IU19IU19SUlJfMF9PUENPREVfWDAgPSA1MywKKyAgTVVMX0hTX0hTX1JSUl84X09QQ09ERV9ZMCA9IDAsCisgIE1VTF9IU19IVV9SUlJfMF9PUENPREVfWDAgPSA1NCwKKyAgTVVMX0hTX0xTX1JSUl8wX09QQ09ERV9YMCA9IDU1LAorICBNVUxfSFNfTFVfUlJSXzBfT1BDT0RFX1gwID0gNTYsCisgIE1VTF9IVV9IVV9SUlJfMF9PUENPREVfWDAgPSA1NywKKyAgTVVMX0hVX0hVX1JSUl84X09QQ09ERV9ZMCA9IDEsCisgIE1VTF9IVV9MU19SUlJfMF9PUENPREVfWDAgPSA1OCwKKyAgTVVMX0hVX0xVX1JSUl8wX09QQ09ERV9YMCA9IDU5LAorICBNVUxfTFNfTFNfUlJSXzBfT1BDT0RFX1gwID0gNjAsCisgIE1VTF9MU19MU19SUlJfOF9PUENPREVfWTAgPSAyLAorICBNVUxfTFNfTFVfUlJSXzBfT1BDT0RFX1gwID0gNjEsCisgIE1VTF9MVV9MVV9SUlJfMF9PUENPREVfWDAgPSA2MiwKKyAgTVVMX0xVX0xVX1JSUl84X09QQ09ERV9ZMCA9IDMsCisgIE1aX1JSUl8wX09QQ09ERV9YMCA9IDYzLAorICBNWl9SUlJfMF9PUENPREVfWDEgPSAyNywKKyAgTVpfUlJSXzRfT1BDT0RFX1kwID0gMywKKyAgTVpfUlJSXzRfT1BDT0RFX1kxID0gMywKKyAgTkFQX1VOQVJZX09QQ09ERV9YMSA9IDMyLAorICBOT1BfVU5BUllfT1BDT0RFX1gwID0gNSwKKyAgTk9QX1VOQVJZX09QQ09ERV9YMSA9IDMzLAorICBOT1BfVU5BUllfT1BDT0RFX1kwID0gNSwKKyAgTk9QX1VOQVJZX09QQ09ERV9ZMSA9IDE1LAorICBOT1JfUlJSXzBfT1BDT0RFX1gwID0gNjQsCisgIE5PUl9SUlJfMF9PUENPREVfWDEgPSAyOCwKKyAgTk9SX1JSUl81X09QQ09ERV9ZMCA9IDEsCisgIE5PUl9SUlJfNV9PUENPREVfWTEgPSAxLAorICBPUklfSU1NOF9PUENPREVfWDAgPSA3LAorICBPUklfSU1NOF9PUENPREVfWDEgPSAyNCwKKyAgT1JfUlJSXzBfT1BDT0RFX1gwID0gNjUsCisgIE9SX1JSUl8wX09QQ09ERV9YMSA9IDI5LAorICBPUl9SUlJfNV9PUENPREVfWTAgPSAyLAorICBPUl9SUlJfNV9PUENPREVfWTEgPSAyLAorICBQQ05UX1VOQVJZX09QQ09ERV9YMCA9IDYsCisgIFBDTlRfVU5BUllfT1BDT0RFX1kwID0gNiwKKyAgUkVWQklUU19VTkFSWV9PUENPREVfWDAgPSA3LAorICBSRVZCSVRTX1VOQVJZX09QQ09ERV9ZMCA9IDcsCisgIFJFVkJZVEVTX1VOQVJZX09QQ09ERV9YMCA9IDgsCisgIFJFVkJZVEVTX1VOQVJZX09QQ09ERV9ZMCA9IDgsCisgIFJPVExJX1NISUZUX09QQ09ERV9YMCA9IDEsCisgIFJPVExJX1NISUZUX09QQ09ERV9YMSA9IDEsCisgIFJPVExJX1NISUZUX09QQ09ERV9ZMCA9IDAsCisgIFJPVExJX1NISUZUX09QQ09ERV9ZMSA9IDAsCisgIFJPVExfUlJSXzBfT1BDT0RFX1gwID0gNjYsCisgIFJPVExfUlJSXzBfT1BDT0RFX1gxID0gMzAsCisgIFJPVExfUlJSXzZfT1BDT0RFX1kwID0gMCwKKyAgUk9UTF9SUlJfNl9PUENPREVfWTEgPSAwLAorICBSUlJfMF9PUENPREVfWDAgPSA1LAorICBSUlJfMF9PUENPREVfWDEgPSA1LAorICBSUlJfMF9PUENPREVfWTAgPSA1LAorICBSUlJfMF9PUENPREVfWTEgPSA2LAorICBSUlJfMV9PUENPREVfWTAgPSA2LAorICBSUlJfMV9PUENPREVfWTEgPSA3LAorICBSUlJfMl9PUENPREVfWTAgPSA3LAorICBSUlJfMl9PUENPREVfWTEgPSA4LAorICBSUlJfM19PUENPREVfWTAgPSA4LAorICBSUlJfM19PUENPREVfWTEgPSA5LAorICBSUlJfNF9PUENPREVfWTAgPSA5LAorICBSUlJfNF9PUENPREVfWTEgPSAxMCwKKyAgUlJSXzVfT1BDT0RFX1kwID0gMTAsCisgIFJSUl81X09QQ09ERV9ZMSA9IDExLAorICBSUlJfNl9PUENPREVfWTAgPSAxMSwKKyAgUlJSXzZfT1BDT0RFX1kxID0gMTIsCisgIFJSUl83X09QQ09ERV9ZMCA9IDEyLAorICBSUlJfN19PUENPREVfWTEgPSAxMywKKyAgUlJSXzhfT1BDT0RFX1kwID0gMTMsCisgIFJSUl85X09QQ09ERV9ZMCA9IDE0LAorICBTSElGVF9PUENPREVfWDAgPSA2LAorICBTSElGVF9PUENPREVfWDEgPSA2LAorICBTSElGVF9PUENPREVfWTAgPSAxNSwKKyAgU0hJRlRfT1BDT0RFX1kxID0gMTQsCisgIFNITDE2SU5TTElfT1BDT0RFX1gwID0gNywKKyAgU0hMMTZJTlNMSV9PUENPREVfWDEgPSA3LAorICBTSEwxQUREWF9SUlJfMF9PUENPREVfWDAgPSA2NywKKyAgU0hMMUFERFhfUlJSXzBfT1BDT0RFX1gxID0gMzEsCisgIFNITDFBRERYX1JSUl83X09QQ09ERV9ZMCA9IDEsCisgIFNITDFBRERYX1JSUl83X09QQ09ERV9ZMSA9IDEsCisgIFNITDFBRERfUlJSXzBfT1BDT0RFX1gwID0gNjgsCisgIFNITDFBRERfUlJSXzBfT1BDT0RFX1gxID0gMzIsCisgIFNITDFBRERfUlJSXzFfT1BDT0RFX1kwID0gMCwKKyAgU0hMMUFERF9SUlJfMV9PUENPREVfWTEgPSAwLAorICBTSEwyQUREWF9SUlJfMF9PUENPREVfWDAgPSA2OSwKKyAgU0hMMkFERFhfUlJSXzBfT1BDT0RFX1gxID0gMzMsCisgIFNITDJBRERYX1JSUl83X09QQ09ERV9ZMCA9IDIsCisgIFNITDJBRERYX1JSUl83X09QQ09ERV9ZMSA9IDIsCisgIFNITDJBRERfUlJSXzBfT1BDT0RFX1gwID0gNzAsCisgIFNITDJBRERfUlJSXzBfT1BDT0RFX1gxID0gMzQsCisgIFNITDJBRERfUlJSXzFfT1BDT0RFX1kwID0gMSwKKyAgU0hMMkFERF9SUlJfMV9PUENPREVfWTEgPSAxLAorICBTSEwzQUREWF9SUlJfMF9PUENPREVfWDAgPSA3MSwKKyAgU0hMM0FERFhfUlJSXzBfT1BDT0RFX1gxID0gMzUsCisgIFNITDNBRERYX1JSUl83X09QQ09ERV9ZMCA9IDMsCisgIFNITDNBRERYX1JSUl83X09QQ09ERV9ZMSA9IDMsCisgIFNITDNBRERfUlJSXzBfT1BDT0RFX1gwID0gNzIsCisgIFNITDNBRERfUlJSXzBfT1BDT0RFX1gxID0gMzYsCisgIFNITDNBRERfUlJSXzFfT1BDT0RFX1kwID0gMiwKKyAgU0hMM0FERF9SUlJfMV9PUENPREVfWTEgPSAyLAorICBTSExJX1NISUZUX09QQ09ERV9YMCA9IDIsCisgIFNITElfU0hJRlRfT1BDT0RFX1gxID0gMiwKKyAgU0hMSV9TSElGVF9PUENPREVfWTAgPSAxLAorICBTSExJX1NISUZUX09QQ09ERV9ZMSA9IDEsCisgIFNITFhJX1NISUZUX09QQ09ERV9YMCA9IDMsCisgIFNITFhJX1NISUZUX09QQ09ERV9YMSA9IDMsCisgIFNITFhfUlJSXzBfT1BDT0RFX1gwID0gNzMsCisgIFNITFhfUlJSXzBfT1BDT0RFX1gxID0gMzcsCisgIFNITF9SUlJfMF9PUENPREVfWDAgPSA3NCwKKyAgU0hMX1JSUl8wX09QQ09ERV9YMSA9IDM4LAorICBTSExfUlJSXzZfT1BDT0RFX1kwID0gMSwKKyAgU0hMX1JSUl82X09QQ09ERV9ZMSA9IDEsCisgIFNIUlNJX1NISUZUX09QQ09ERV9YMCA9IDQsCisgIFNIUlNJX1NISUZUX09QQ09ERV9YMSA9IDQsCisgIFNIUlNJX1NISUZUX09QQ09ERV9ZMCA9IDIsCisgIFNIUlNJX1NISUZUX09QQ09ERV9ZMSA9IDIsCisgIFNIUlNfUlJSXzBfT1BDT0RFX1gwID0gNzUsCisgIFNIUlNfUlJSXzBfT1BDT0RFX1gxID0gMzksCisgIFNIUlNfUlJSXzZfT1BDT0RFX1kwID0gMiwKKyAgU0hSU19SUlJfNl9PUENPREVfWTEgPSAyLAorICBTSFJVSV9TSElGVF9PUENPREVfWDAgPSA1LAorICBTSFJVSV9TSElGVF9PUENPREVfWDEgPSA1LAorICBTSFJVSV9TSElGVF9PUENPREVfWTAgPSAzLAorICBTSFJVSV9TSElGVF9PUENPREVfWTEgPSAzLAorICBTSFJVWElfU0hJRlRfT1BDT0RFX1gwID0gNiwKKyAgU0hSVVhJX1NISUZUX09QQ09ERV9YMSA9IDYsCisgIFNIUlVYX1JSUl8wX09QQ09ERV9YMCA9IDc2LAorICBTSFJVWF9SUlJfMF9PUENPREVfWDEgPSA0MCwKKyAgU0hSVV9SUlJfMF9PUENPREVfWDAgPSA3NywKKyAgU0hSVV9SUlJfMF9PUENPREVfWDEgPSA0MSwKKyAgU0hSVV9SUlJfNl9PUENPREVfWTAgPSAzLAorICBTSFJVX1JSUl82X09QQ09ERV9ZMSA9IDMsCisgIFNIVUZGTEVCWVRFU19SUlJfMF9PUENPREVfWDAgPSA3OCwKKyAgU1QxX0FERF9JTU04X09QQ09ERV9YMSA9IDI1LAorICBTVDFfT1BDT0RFX1kyID0gMCwKKyAgU1QxX1JSUl8wX09QQ09ERV9YMSA9IDQyLAorICBTVDJfQUREX0lNTThfT1BDT0RFX1gxID0gMjYsCisgIFNUMl9PUENPREVfWTIgPSAxLAorICBTVDJfUlJSXzBfT1BDT0RFX1gxID0gNDMsCisgIFNUNF9BRERfSU1NOF9PUENPREVfWDEgPSAyNywKKyAgU1Q0X09QQ09ERV9ZMiA9IDIsCisgIFNUNF9SUlJfMF9PUENPREVfWDEgPSA0NCwKKyAgU1ROVDFfQUREX0lNTThfT1BDT0RFX1gxID0gMjgsCisgIFNUTlQxX1JSUl8wX09QQ09ERV9YMSA9IDQ1LAorICBTVE5UMl9BRERfSU1NOF9PUENPREVfWDEgPSAyOSwKKyAgU1ROVDJfUlJSXzBfT1BDT0RFX1gxID0gNDYsCisgIFNUTlQ0X0FERF9JTU04X09QQ09ERV9YMSA9IDMwLAorICBTVE5UNF9SUlJfMF9PUENPREVfWDEgPSA0NywKKyAgU1ROVF9BRERfSU1NOF9PUENPREVfWDEgPSAzMSwKKyAgU1ROVF9SUlJfMF9PUENPREVfWDEgPSA0OCwKKyAgU1RfQUREX0lNTThfT1BDT0RFX1gxID0gMzIsCisgIFNUX09QQ09ERV9ZMiA9IDMsCisgIFNUX1JSUl8wX09QQ09ERV9YMSA9IDQ5LAorICBTVUJYU0NfUlJSXzBfT1BDT0RFX1gwID0gNzksCisgIFNVQlhTQ19SUlJfMF9PUENPREVfWDEgPSA1MCwKKyAgU1VCWF9SUlJfMF9PUENPREVfWDAgPSA4MCwKKyAgU1VCWF9SUlJfMF9PUENPREVfWDEgPSA1MSwKKyAgU1VCWF9SUlJfMF9PUENPREVfWTAgPSAyLAorICBTVUJYX1JSUl8wX09QQ09ERV9ZMSA9IDIsCisgIFNVQl9SUlJfMF9PUENPREVfWDAgPSA4MSwKKyAgU1VCX1JSUl8wX09QQ09ERV9YMSA9IDUyLAorICBTVUJfUlJSXzBfT1BDT0RFX1kwID0gMywKKyAgU1VCX1JSUl8wX09QQ09ERV9ZMSA9IDMsCisgIFNXSU5UMF9VTkFSWV9PUENPREVfWDEgPSAzNCwKKyAgU1dJTlQxX1VOQVJZX09QQ09ERV9YMSA9IDM1LAorICBTV0lOVDJfVU5BUllfT1BDT0RFX1gxID0gMzYsCisgIFNXSU5UM19VTkFSWV9PUENPREVfWDEgPSAzNywKKyAgVEJMSURYQjBfVU5BUllfT1BDT0RFX1gwID0gOSwKKyAgVEJMSURYQjBfVU5BUllfT1BDT0RFX1kwID0gOSwKKyAgVEJMSURYQjFfVU5BUllfT1BDT0RFX1gwID0gMTAsCisgIFRCTElEWEIxX1VOQVJZX09QQ09ERV9ZMCA9IDEwLAorICBUQkxJRFhCMl9VTkFSWV9PUENPREVfWDAgPSAxMSwKKyAgVEJMSURYQjJfVU5BUllfT1BDT0RFX1kwID0gMTEsCisgIFRCTElEWEIzX1VOQVJZX09QQ09ERV9YMCA9IDEyLAorICBUQkxJRFhCM19VTkFSWV9PUENPREVfWTAgPSAxMiwKKyAgVU5BUllfUlJSXzBfT1BDT0RFX1gwID0gODIsCisgIFVOQVJZX1JSUl8wX09QQ09ERV9YMSA9IDUzLAorICBVTkFSWV9SUlJfMV9PUENPREVfWTAgPSAzLAorICBVTkFSWV9SUlJfMV9PUENPREVfWTEgPSAzLAorICBWMUFERElfSU1NOF9PUENPREVfWDAgPSA4LAorICBWMUFERElfSU1NOF9PUENPREVfWDEgPSAzMywKKyAgVjFBRERVQ19SUlJfMF9PUENPREVfWDAgPSA4MywKKyAgVjFBRERVQ19SUlJfMF9PUENPREVfWDEgPSA1NCwKKyAgVjFBRERfUlJSXzBfT1BDT0RFX1gwID0gODQsCisgIFYxQUREX1JSUl8wX09QQ09ERV9YMSA9IDU1LAorICBWMUFESUZGVV9SUlJfMF9PUENPREVfWDAgPSA4NSwKKyAgVjFBVkdVX1JSUl8wX09QQ09ERV9YMCA9IDg2LAorICBWMUNNUEVRSV9JTU04X09QQ09ERV9YMCA9IDksCisgIFYxQ01QRVFJX0lNTThfT1BDT0RFX1gxID0gMzQsCisgIFYxQ01QRVFfUlJSXzBfT1BDT0RFX1gwID0gODcsCisgIFYxQ01QRVFfUlJSXzBfT1BDT0RFX1gxID0gNTYsCisgIFYxQ01QTEVTX1JSUl8wX09QQ09ERV9YMCA9IDg4LAorICBWMUNNUExFU19SUlJfMF9PUENPREVfWDEgPSA1NywKKyAgVjFDTVBMRVVfUlJSXzBfT1BDT0RFX1gwID0gODksCisgIFYxQ01QTEVVX1JSUl8wX09QQ09ERV9YMSA9IDU4LAorICBWMUNNUExUU0lfSU1NOF9PUENPREVfWDAgPSAxMCwKKyAgVjFDTVBMVFNJX0lNTThfT1BDT0RFX1gxID0gMzUsCisgIFYxQ01QTFRTX1JSUl8wX09QQ09ERV9YMCA9IDkwLAorICBWMUNNUExUU19SUlJfMF9PUENPREVfWDEgPSA1OSwKKyAgVjFDTVBMVFVJX0lNTThfT1BDT0RFX1gwID0gMTEsCisgIFYxQ01QTFRVSV9JTU04X09QQ09ERV9YMSA9IDM2LAorICBWMUNNUExUVV9SUlJfMF9PUENPREVfWDAgPSA5MSwKKyAgVjFDTVBMVFVfUlJSXzBfT1BDT0RFX1gxID0gNjAsCisgIFYxQ01QTkVfUlJSXzBfT1BDT0RFX1gwID0gOTIsCisgIFYxQ01QTkVfUlJSXzBfT1BDT0RFX1gxID0gNjEsCisgIFYxRERPVFBVQV9SUlJfMF9PUENPREVfWDAgPSAxNjEsCisgIFYxRERPVFBVU0FfUlJSXzBfT1BDT0RFX1gwID0gOTMsCisgIFYxRERPVFBVU19SUlJfMF9PUENPREVfWDAgPSA5NCwKKyAgVjFERE9UUFVfUlJSXzBfT1BDT0RFX1gwID0gMTYyLAorICBWMURPVFBBX1JSUl8wX09QQ09ERV9YMCA9IDk1LAorICBWMURPVFBVQV9SUlJfMF9PUENPREVfWDAgPSAxNjMsCisgIFYxRE9UUFVTQV9SUlJfMF9PUENPREVfWDAgPSA5NiwKKyAgVjFET1RQVVNfUlJSXzBfT1BDT0RFX1gwID0gOTcsCisgIFYxRE9UUFVfUlJSXzBfT1BDT0RFX1gwID0gMTY0LAorICBWMURPVFBfUlJSXzBfT1BDT0RFX1gwID0gOTgsCisgIFYxSU5UX0hfUlJSXzBfT1BDT0RFX1gwID0gOTksCisgIFYxSU5UX0hfUlJSXzBfT1BDT0RFX1gxID0gNjIsCisgIFYxSU5UX0xfUlJSXzBfT1BDT0RFX1gwID0gMTAwLAorICBWMUlOVF9MX1JSUl8wX09QQ09ERV9YMSA9IDYzLAorICBWMU1BWFVJX0lNTThfT1BDT0RFX1gwID0gMTIsCisgIFYxTUFYVUlfSU1NOF9PUENPREVfWDEgPSAzNywKKyAgVjFNQVhVX1JSUl8wX09QQ09ERV9YMCA9IDEwMSwKKyAgVjFNQVhVX1JSUl8wX09QQ09ERV9YMSA9IDY0LAorICBWMU1JTlVJX0lNTThfT1BDT0RFX1gwID0gMTMsCisgIFYxTUlOVUlfSU1NOF9PUENPREVfWDEgPSAzOCwKKyAgVjFNSU5VX1JSUl8wX09QQ09ERV9YMCA9IDEwMiwKKyAgVjFNSU5VX1JSUl8wX09QQ09ERV9YMSA9IDY1LAorICBWMU1OWl9SUlJfMF9PUENPREVfWDAgPSAxMDMsCisgIFYxTU5aX1JSUl8wX09QQ09ERV9YMSA9IDY2LAorICBWMU1VTFRVX1JSUl8wX09QQ09ERV9YMCA9IDEwNCwKKyAgVjFNVUxVU19SUlJfMF9PUENPREVfWDAgPSAxMDUsCisgIFYxTVVMVV9SUlJfMF9PUENPREVfWDAgPSAxMDYsCisgIFYxTVpfUlJSXzBfT1BDT0RFX1gwID0gMTA3LAorICBWMU1aX1JSUl8wX09QQ09ERV9YMSA9IDY3LAorICBWMVNBREFVX1JSUl8wX09QQ09ERV9YMCA9IDEwOCwKKyAgVjFTQURVX1JSUl8wX09QQ09ERV9YMCA9IDEwOSwKKyAgVjFTSExJX1NISUZUX09QQ09ERV9YMCA9IDcsCisgIFYxU0hMSV9TSElGVF9PUENPREVfWDEgPSA3LAorICBWMVNITF9SUlJfMF9PUENPREVfWDAgPSAxMTAsCisgIFYxU0hMX1JSUl8wX09QQ09ERV9YMSA9IDY4LAorICBWMVNIUlNJX1NISUZUX09QQ09ERV9YMCA9IDgsCisgIFYxU0hSU0lfU0hJRlRfT1BDT0RFX1gxID0gOCwKKyAgVjFTSFJTX1JSUl8wX09QQ09ERV9YMCA9IDExMSwKKyAgVjFTSFJTX1JSUl8wX09QQ09ERV9YMSA9IDY5LAorICBWMVNIUlVJX1NISUZUX09QQ09ERV9YMCA9IDksCisgIFYxU0hSVUlfU0hJRlRfT1BDT0RFX1gxID0gOSwKKyAgVjFTSFJVX1JSUl8wX09QQ09ERV9YMCA9IDExMiwKKyAgVjFTSFJVX1JSUl8wX09QQ09ERV9YMSA9IDcwLAorICBWMVNVQlVDX1JSUl8wX09QQ09ERV9YMCA9IDExMywKKyAgVjFTVUJVQ19SUlJfMF9PUENPREVfWDEgPSA3MSwKKyAgVjFTVUJfUlJSXzBfT1BDT0RFX1gwID0gMTE0LAorICBWMVNVQl9SUlJfMF9PUENPREVfWDEgPSA3MiwKKyAgVjJBRERJX0lNTThfT1BDT0RFX1gwID0gMTQsCisgIFYyQURESV9JTU04X09QQ09ERV9YMSA9IDM5LAorICBWMkFERFNDX1JSUl8wX09QQ09ERV9YMCA9IDExNSwKKyAgVjJBRERTQ19SUlJfMF9PUENPREVfWDEgPSA3MywKKyAgVjJBRERfUlJSXzBfT1BDT0RFX1gwID0gMTE2LAorICBWMkFERF9SUlJfMF9PUENPREVfWDEgPSA3NCwKKyAgVjJBRElGRlNfUlJSXzBfT1BDT0RFX1gwID0gMTE3LAorICBWMkFWR1NfUlJSXzBfT1BDT0RFX1gwID0gMTE4LAorICBWMkNNUEVRSV9JTU04X09QQ09ERV9YMCA9IDE1LAorICBWMkNNUEVRSV9JTU04X09QQ09ERV9YMSA9IDQwLAorICBWMkNNUEVRX1JSUl8wX09QQ09ERV9YMCA9IDExOSwKKyAgVjJDTVBFUV9SUlJfMF9PUENPREVfWDEgPSA3NSwKKyAgVjJDTVBMRVNfUlJSXzBfT1BDT0RFX1gwID0gMTIwLAorICBWMkNNUExFU19SUlJfMF9PUENPREVfWDEgPSA3NiwKKyAgVjJDTVBMRVVfUlJSXzBfT1BDT0RFX1gwID0gMTIxLAorICBWMkNNUExFVV9SUlJfMF9PUENPREVfWDEgPSA3NywKKyAgVjJDTVBMVFNJX0lNTThfT1BDT0RFX1gwID0gMTYsCisgIFYyQ01QTFRTSV9JTU04X09QQ09ERV9YMSA9IDQxLAorICBWMkNNUExUU19SUlJfMF9PUENPREVfWDAgPSAxMjIsCisgIFYyQ01QTFRTX1JSUl8wX09QQ09ERV9YMSA9IDc4LAorICBWMkNNUExUVUlfSU1NOF9PUENPREVfWDAgPSAxNywKKyAgVjJDTVBMVFVJX0lNTThfT1BDT0RFX1gxID0gNDIsCisgIFYyQ01QTFRVX1JSUl8wX09QQ09ERV9YMCA9IDEyMywKKyAgVjJDTVBMVFVfUlJSXzBfT1BDT0RFX1gxID0gNzksCisgIFYyQ01QTkVfUlJSXzBfT1BDT0RFX1gwID0gMTI0LAorICBWMkNNUE5FX1JSUl8wX09QQ09ERV9YMSA9IDgwLAorICBWMkRPVFBBX1JSUl8wX09QQ09ERV9YMCA9IDEyNSwKKyAgVjJET1RQX1JSUl8wX09QQ09ERV9YMCA9IDEyNiwKKyAgVjJJTlRfSF9SUlJfMF9PUENPREVfWDAgPSAxMjcsCisgIFYySU5UX0hfUlJSXzBfT1BDT0RFX1gxID0gODEsCisgIFYySU5UX0xfUlJSXzBfT1BDT0RFX1gwID0gMTI4LAorICBWMklOVF9MX1JSUl8wX09QQ09ERV9YMSA9IDgyLAorICBWMk1BWFNJX0lNTThfT1BDT0RFX1gwID0gMTgsCisgIFYyTUFYU0lfSU1NOF9PUENPREVfWDEgPSA0MywKKyAgVjJNQVhTX1JSUl8wX09QQ09ERV9YMCA9IDEyOSwKKyAgVjJNQVhTX1JSUl8wX09QQ09ERV9YMSA9IDgzLAorICBWMk1JTlNJX0lNTThfT1BDT0RFX1gwID0gMTksCisgIFYyTUlOU0lfSU1NOF9PUENPREVfWDEgPSA0NCwKKyAgVjJNSU5TX1JSUl8wX09QQ09ERV9YMCA9IDEzMCwKKyAgVjJNSU5TX1JSUl8wX09QQ09ERV9YMSA9IDg0LAorICBWMk1OWl9SUlJfMF9PUENPREVfWDAgPSAxMzEsCisgIFYyTU5aX1JSUl8wX09QQ09ERV9YMSA9IDg1LAorICBWMk1VTEZTQ19SUlJfMF9PUENPREVfWDAgPSAxMzIsCisgIFYyTVVMU19SUlJfMF9PUENPREVfWDAgPSAxMzMsCisgIFYyTVVMVFNfUlJSXzBfT1BDT0RFX1gwID0gMTM0LAorICBWMk1aX1JSUl8wX09QQ09ERV9YMCA9IDEzNSwKKyAgVjJNWl9SUlJfMF9PUENPREVfWDEgPSA4NiwKKyAgVjJQQUNLSF9SUlJfMF9PUENPREVfWDAgPSAxMzYsCisgIFYyUEFDS0hfUlJSXzBfT1BDT0RFX1gxID0gODcsCisgIFYyUEFDS0xfUlJSXzBfT1BDT0RFX1gwID0gMTM3LAorICBWMlBBQ0tMX1JSUl8wX09QQ09ERV9YMSA9IDg4LAorICBWMlBBQ0tVQ19SUlJfMF9PUENPREVfWDAgPSAxMzgsCisgIFYyUEFDS1VDX1JSUl8wX09QQ09ERV9YMSA9IDg5LAorICBWMlNBREFTX1JSUl8wX09QQ09ERV9YMCA9IDEzOSwKKyAgVjJTQURBVV9SUlJfMF9PUENPREVfWDAgPSAxNDAsCisgIFYyU0FEU19SUlJfMF9PUENPREVfWDAgPSAxNDEsCisgIFYyU0FEVV9SUlJfMF9PUENPREVfWDAgPSAxNDIsCisgIFYyU0hMSV9TSElGVF9PUENPREVfWDAgPSAxMCwKKyAgVjJTSExJX1NISUZUX09QQ09ERV9YMSA9IDEwLAorICBWMlNITFNDX1JSUl8wX09QQ09ERV9YMCA9IDE0MywKKyAgVjJTSExTQ19SUlJfMF9PUENPREVfWDEgPSA5MCwKKyAgVjJTSExfUlJSXzBfT1BDT0RFX1gwID0gMTQ0LAorICBWMlNITF9SUlJfMF9PUENPREVfWDEgPSA5MSwKKyAgVjJTSFJTSV9TSElGVF9PUENPREVfWDAgPSAxMSwKKyAgVjJTSFJTSV9TSElGVF9PUENPREVfWDEgPSAxMSwKKyAgVjJTSFJTX1JSUl8wX09QQ09ERV9YMCA9IDE0NSwKKyAgVjJTSFJTX1JSUl8wX09QQ09ERV9YMSA9IDkyLAorICBWMlNIUlVJX1NISUZUX09QQ09ERV9YMCA9IDEyLAorICBWMlNIUlVJX1NISUZUX09QQ09ERV9YMSA9IDEyLAorICBWMlNIUlVfUlJSXzBfT1BDT0RFX1gwID0gMTQ2LAorICBWMlNIUlVfUlJSXzBfT1BDT0RFX1gxID0gOTMsCisgIFYyU1VCU0NfUlJSXzBfT1BDT0RFX1gwID0gMTQ3LAorICBWMlNVQlNDX1JSUl8wX09QQ09ERV9YMSA9IDk0LAorICBWMlNVQl9SUlJfMF9PUENPREVfWDAgPSAxNDgsCisgIFYyU1VCX1JSUl8wX09QQ09ERV9YMSA9IDk1LAorICBWNEFERFNDX1JSUl8wX09QQ09ERV9YMCA9IDE0OSwKKyAgVjRBRERTQ19SUlJfMF9PUENPREVfWDEgPSA5NiwKKyAgVjRBRERfUlJSXzBfT1BDT0RFX1gwID0gMTUwLAorICBWNEFERF9SUlJfMF9PUENPREVfWDEgPSA5NywKKyAgVjRJTlRfSF9SUlJfMF9PUENPREVfWDAgPSAxNTEsCisgIFY0SU5UX0hfUlJSXzBfT1BDT0RFX1gxID0gOTgsCisgIFY0SU5UX0xfUlJSXzBfT1BDT0RFX1gwID0gMTUyLAorICBWNElOVF9MX1JSUl8wX09QQ09ERV9YMSA9IDk5LAorICBWNFBBQ0tTQ19SUlJfMF9PUENPREVfWDAgPSAxNTMsCisgIFY0UEFDS1NDX1JSUl8wX09QQ09ERV9YMSA9IDEwMCwKKyAgVjRTSExTQ19SUlJfMF9PUENPREVfWDAgPSAxNTQsCisgIFY0U0hMU0NfUlJSXzBfT1BDT0RFX1gxID0gMTAxLAorICBWNFNITF9SUlJfMF9PUENPREVfWDAgPSAxNTUsCisgIFY0U0hMX1JSUl8wX09QQ09ERV9YMSA9IDEwMiwKKyAgVjRTSFJTX1JSUl8wX09QQ09ERV9YMCA9IDE1NiwKKyAgVjRTSFJTX1JSUl8wX09QQ09ERV9YMSA9IDEwMywKKyAgVjRTSFJVX1JSUl8wX09QQ09ERV9YMCA9IDE1NywKKyAgVjRTSFJVX1JSUl8wX09QQ09ERV9YMSA9IDEwNCwKKyAgVjRTVUJTQ19SUlJfMF9PUENPREVfWDAgPSAxNTgsCisgIFY0U1VCU0NfUlJSXzBfT1BDT0RFX1gxID0gMTA1LAorICBWNFNVQl9SUlJfMF9PUENPREVfWDAgPSAxNTksCisgIFY0U1VCX1JSUl8wX09QQ09ERV9YMSA9IDEwNiwKKyAgV0g2NF9VTkFSWV9PUENPREVfWDEgPSAzOCwKKyAgWE9SSV9JTU04X09QQ09ERV9YMCA9IDIwLAorICBYT1JJX0lNTThfT1BDT0RFX1gxID0gNDUsCisgIFhPUl9SUlJfMF9PUENPREVfWDAgPSAxNjAsCisgIFhPUl9SUlJfMF9PUENPREVfWDEgPSAxMDcsCisgIFhPUl9SUlJfNV9PUENPREVfWTAgPSAzLAorICBYT1JfUlJSXzVfT1BDT0RFX1kxID0gMworfTsKKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0JGRW5kX1gwKHRpbGVneF9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0JGT3Bjb2RlRXh0ZW5zaW9uX1gwKHRpbGVneF9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDI0KSkgJiAweGYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfQkZTdGFydF9YMCh0aWxlZ3hfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxOCkpICYgMHgzZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9Cck9mZl9YMSh0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiAzMSkpICYgMHgwMDAwMDAzZikgfAorICAgICAgICAgKCgodW5zaWduZWQgaW50KShuID4+IDM3KSkgJiAweDAwMDFmZmMwKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0JyVHlwZV9YMSh0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA1NCkpICYgMHgxZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9EZXN0X0ltbThfWDEodGlsZWd4X2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMzEpKSAmIDB4MDAwMDAwM2YpIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHgwMDAwMDBjMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9EZXN0X1gwKHRpbGVneF9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDApKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfRGVzdF9YMSh0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiAzMSkpICYgMHgzZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9EZXN0X1kwKHRpbGVneF9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDApKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfRGVzdF9ZMSh0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiAzMSkpICYgMHgzZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW0xNl9YMCh0aWxlZ3hfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMikpICYgMHhmZmZmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0ltbTE2X1gxKHRpbGVneF9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweGZmZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfSW1tOE9wY29kZUV4dGVuc2lvbl9YMCh0aWxlZ3hfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAyMCkpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW04T3Bjb2RlRXh0ZW5zaW9uX1gxKHRpbGVneF9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDUxKSkgJiAweGZmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0ltbThfWDAodGlsZWd4X2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMTIpKSAmIDB4ZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfSW1tOF9YMSh0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0MykpICYgMHhmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9JbW04X1kwKHRpbGVneF9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweGZmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0ltbThfWTEodGlsZWd4X2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4ZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfSnVtcE9mZl9YMSh0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiAzMSkpICYgMHg3ZmZmZmZmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X0p1bXBPcGNvZGVFeHRlbnNpb25fWDEodGlsZWd4X2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNTgpKSAmIDB4MSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9NRl9JbW0xNF9YMSh0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiAzNykpICYgMHgzZmZmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X01UX0ltbTE0X1gxKHRpbGVneF9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDMxKSkgJiAweDAwMDAwMDNmKSB8CisgICAgICAgICAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMzcpKSAmIDB4MDAwMDNmYzApOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfTW9kZSh0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA2MikpICYgMHgzKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X09wY29kZV9YMCh0aWxlZ3hfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAyOCkpICYgMHg3KTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X09wY29kZV9YMSh0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA1OSkpICYgMHg3KTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X09wY29kZV9ZMCh0aWxlZ3hfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAyNykpICYgMHhmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X09wY29kZV9ZMSh0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA1OCkpICYgMHhmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X09wY29kZV9ZMih0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKG4gPj4gMjYpKSAmIDB4MDAwMDAwMDEpIHwKKyAgICAgICAgICgoKHVuc2lnbmVkIGludCkobiA+PiA1NikpICYgMHgwMDAwMDAwMik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9SUlJPcGNvZGVFeHRlbnNpb25fWDAodGlsZWd4X2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMTgpKSAmIDB4M2ZmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1JSUk9wY29kZUV4dGVuc2lvbl9YMSh0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA0OSkpICYgMHgzZmYpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfUlJST3Bjb2RlRXh0ZW5zaW9uX1kwKHRpbGVneF9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDE4KSkgJiAweDMpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfUlJST3Bjb2RlRXh0ZW5zaW9uX1kxKHRpbGVneF9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQ5KSkgJiAweDMpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU2hBbXRfWDAodGlsZWd4X2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMTIpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU2hBbXRfWDEodGlsZWd4X2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU2hBbXRfWTAodGlsZWd4X2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMTIpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU2hBbXRfWTEodGlsZWd4X2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU2hpZnRPcGNvZGVFeHRlbnNpb25fWDAodGlsZWd4X2J1bmRsZV9iaXRzIG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKG4gPj4gMTgpKSAmIDB4M2ZmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NoaWZ0T3Bjb2RlRXh0ZW5zaW9uX1gxKHRpbGVneF9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQ5KSkgJiAweDNmZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9TaGlmdE9wY29kZUV4dGVuc2lvbl9ZMCh0aWxlZ3hfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxOCkpICYgMHgzKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NoaWZ0T3Bjb2RlRXh0ZW5zaW9uX1kxKHRpbGVneF9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQ5KSkgJiAweDMpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU3JjQV9YMCh0aWxlZ3hfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiA2KSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0FfWDEodGlsZWd4X2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMzcpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU3JjQV9ZMCh0aWxlZ3hfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiA2KSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0FfWTEodGlsZWd4X2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gMzcpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU3JjQV9ZMih0aWxlZ3hfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAyMCkpICYgMHgzZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9TcmNCRGVzdF9ZMih0aWxlZ3hfYnVuZGxlX2JpdHMgbikKK3sKKyAgcmV0dXJuICgoKHVuc2lnbmVkIGludCkobiA+PiA1MSkpICYgMHgzZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9TcmNCX1gwKHRpbGVneF9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1NyY0JfWDEodGlsZWd4X2J1bmRsZV9iaXRzIG4pCit7CisgIHJldHVybiAoKCh1bnNpZ25lZCBpbnQpKG4gPj4gNDMpKSAmIDB4M2YpOworfQorCitzdGF0aWMgX19pbmxpbmUgdW5zaWduZWQgaW50CitnZXRfU3JjQl9ZMCh0aWxlZ3hfYnVuZGxlX2JpdHMgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgobiA+PiAxMikpICYgMHgzZik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB1bnNpZ25lZCBpbnQKK2dldF9TcmNCX1kxKHRpbGVneF9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1VuYXJ5T3Bjb2RlRXh0ZW5zaW9uX1gwKHRpbGVneF9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1VuYXJ5T3Bjb2RlRXh0ZW5zaW9uX1gxKHRpbGVneF9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1VuYXJ5T3Bjb2RlRXh0ZW5zaW9uX1kwKHRpbGVneF9idW5kbGVfYml0cyBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKChuID4+IDEyKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIHVuc2lnbmVkIGludAorZ2V0X1VuYXJ5T3Bjb2RlRXh0ZW5zaW9uX1kxKHRpbGVneF9idW5kbGVfYml0cyBuKQoreworICByZXR1cm4gKCgodW5zaWduZWQgaW50KShuID4+IDQzKSkgJiAweDNmKTsKK30KKworc3RhdGljIF9faW5saW5lIGludAorc2lnbl9leHRlbmQoaW50IG4sIGludCBudW1fYml0cykKK3sKKyAgaW50IHNoaWZ0ID0gKGludCkoc2l6ZW9mKGludCkgKiA4IC0gbnVtX2JpdHMpOworICByZXR1cm4gKG4gPDwgc2hpZnQpID4+IHNoaWZ0OworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfQkZFbmRfWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX0JGT3Bjb2RlRXh0ZW5zaW9uX1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGYpIDw8IDI0KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX0JGU3RhcnRfWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDE4KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX0JyT2ZmX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlZ3hfYnVuZGxlX2JpdHMpKG4gJiAweDAwMDAwMDNmKSkgPDwgMzEpIHwKKyAgICAgICAgICgoKHRpbGVneF9idW5kbGVfYml0cykobiAmIDB4MDAwMWZmYzApKSA8PCAzNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9CclR5cGVfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVneF9idW5kbGVfYml0cykobiAmIDB4MWYpKSA8PCA1NCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9EZXN0X0ltbThfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVneF9idW5kbGVfYml0cykobiAmIDB4MDAwMDAwM2YpKSA8PCAzMSkgfAorICAgICAgICAgKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHgwMDAwMDBjMCkpIDw8IDQzKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX0Rlc3RfWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfRGVzdF9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHgzZikpIDw8IDMxKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX0Rlc3RfWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfRGVzdF9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHgzZikpIDw8IDMxKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX0ltbTE2X1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGZmZmYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX0ltbTE2X1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlZ3hfYnVuZGxlX2JpdHMpKG4gJiAweGZmZmYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9JbW04T3Bjb2RlRXh0ZW5zaW9uX1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweGZmKSA8PCAyMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9JbW04T3Bjb2RlRXh0ZW5zaW9uX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlZ3hfYnVuZGxlX2JpdHMpKG4gJiAweGZmKSkgPDwgNTEpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfSW1tOF9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHhmZikgPDwgMTIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfSW1tOF9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHhmZikpIDw8IDQzKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX0ltbThfWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4ZmYpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX0ltbThfWTEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVneF9idW5kbGVfYml0cykobiAmIDB4ZmYpKSA8PCA0Myk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9KdW1wT2ZmX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlZ3hfYnVuZGxlX2JpdHMpKG4gJiAweDdmZmZmZmYpKSA8PCAzMSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9KdW1wT3Bjb2RlRXh0ZW5zaW9uX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlZ3hfYnVuZGxlX2JpdHMpKG4gJiAweDEpKSA8PCA1OCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9NRl9JbW0xNF9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHgzZmZmKSkgPDwgMzcpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfTVRfSW1tMTRfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVneF9idW5kbGVfYml0cykobiAmIDB4MDAwMDAwM2YpKSA8PCAzMSkgfAorICAgICAgICAgKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHgwMDAwM2ZjMCkpIDw8IDM3KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX01vZGUoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVneF9idW5kbGVfYml0cykobiAmIDB4MykpIDw8IDYyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX09wY29kZV9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHg3KSA8PCAyOCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9PcGNvZGVfWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVneF9idW5kbGVfYml0cykobiAmIDB4NykpIDw8IDU5KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX09wY29kZV9ZMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHhmKSA8PCAyNyk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9PcGNvZGVfWTEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVneF9idW5kbGVfYml0cykobiAmIDB4ZikpIDw8IDU4KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX09wY29kZV9ZMihpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgwMDAwMDAwMSkgPDwgMjYpIHwKKyAgICAgICAgICgoKHRpbGVneF9idW5kbGVfYml0cykobiAmIDB4MDAwMDAwMDIpKSA8PCA1Nik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2ZmKSA8PCAxOCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDEoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVneF9idW5kbGVfYml0cykobiAmIDB4M2ZmKSkgPDwgNDkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfUlJST3Bjb2RlRXh0ZW5zaW9uX1kwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDMpIDw8IDE4KTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHgzKSkgPDwgNDkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfU2hBbXRfWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX1NoQW10X1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlZ3hfYnVuZGxlX2JpdHMpKG4gJiAweDNmKSkgPDwgNDMpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfU2hBbXRfWTAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2YpIDw8IDEyKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX1NoQW10X1kxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlZ3hfYnVuZGxlX2JpdHMpKG4gJiAweDNmKSkgPDwgNDMpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfU2hpZnRPcGNvZGVFeHRlbnNpb25fWDAoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgobiAmIDB4M2ZmKSA8PCAxOCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TaGlmdE9wY29kZUV4dGVuc2lvbl9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHgzZmYpKSA8PCA0OSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TaGlmdE9wY29kZUV4dGVuc2lvbl9ZMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzKSA8PCAxOCk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TaGlmdE9wY29kZUV4dGVuc2lvbl9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHgzKSkgPDwgNDkpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9YMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZikgPDwgNik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TcmNBX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlZ3hfYnVuZGxlX2JpdHMpKG4gJiAweDNmKSkgPDwgMzcpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9ZMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZikgPDwgNik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TcmNBX1kxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlZ3hfYnVuZGxlX2JpdHMpKG4gJiAweDNmKSkgPDwgMzcpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQV9ZMihpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZikgPDwgMjApOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQkRlc3RfWTIoaW50IG51bSkKK3sKKyAgY29uc3QgdW5zaWduZWQgaW50IG4gPSAodW5zaWduZWQgaW50KW51bTsKKyAgcmV0dXJuICgoKHRpbGVneF9idW5kbGVfYml0cykobiAmIDB4M2YpKSA8PCA1MSk7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TcmNCX1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDNmKSA8PCAxMik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9TcmNCX1gxKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKCh0aWxlZ3hfYnVuZGxlX2JpdHMpKG4gJiAweDNmKSkgPDwgNDMpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQl9ZMChpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKChuICYgMHgzZikgPDwgMTIpOworfQorCitzdGF0aWMgX19pbmxpbmUgdGlsZWd4X2J1bmRsZV9iaXRzCitjcmVhdGVfU3JjQl9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHgzZikpIDw8IDQzKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX1VuYXJ5T3Bjb2RlRXh0ZW5zaW9uX1gwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDNmKSA8PCAxMik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9VbmFyeU9wY29kZUV4dGVuc2lvbl9YMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHgzZikpIDw8IDQzKTsKK30KKworc3RhdGljIF9faW5saW5lIHRpbGVneF9idW5kbGVfYml0cworY3JlYXRlX1VuYXJ5T3Bjb2RlRXh0ZW5zaW9uX1kwKGludCBudW0pCit7CisgIGNvbnN0IHVuc2lnbmVkIGludCBuID0gKHVuc2lnbmVkIGludCludW07CisgIHJldHVybiAoKG4gJiAweDNmKSA8PCAxMik7Cit9CisKK3N0YXRpYyBfX2lubGluZSB0aWxlZ3hfYnVuZGxlX2JpdHMKK2NyZWF0ZV9VbmFyeU9wY29kZUV4dGVuc2lvbl9ZMShpbnQgbnVtKQoreworICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9ICh1bnNpZ25lZCBpbnQpbnVtOworICByZXR1cm4gKCgodGlsZWd4X2J1bmRsZV9iaXRzKShuICYgMHgzZikpIDw8IDQzKTsKK30KKworY29uc3Qgc3RydWN0IHRpbGVneF9vcGNvZGUgdGlsZWd4X29wY29kZXNbMzM2XSA9Cit7CisgeyAiYnB0IiwgVElMRUdYX09QQ19CUFQsIDB4MiwgMCwgVFJFR19aRVJPLCAwLAorICAgIHsgeyAwLCB9LCB7ICB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmZmZmY4MDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmE0NGFlMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiaW5mbyIsIFRJTEVHWF9PUENfSU5GTywgMHhmLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAgfSwgeyAxIH0sIHsgMiB9LCB7IDMgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZjAwZmZmVUxMLAorICAgICAgMHhmZmY4MDdmZjgwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MDAwZmZmVUxMLAorICAgICAgMHgzYzAwMDdmZjgwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDQwMzAwZmZmVUxMLAorICAgICAgMHgxODE4MDdmZjgwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDEwMDAwZmZmVUxMLAorICAgICAgMHgwYzAwMDdmZjgwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiaW5mb2wiLCBUSUxFR1hfT1BDX0lORk9MLCAweDMsIDEsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgNCB9LCB7IDUgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3MDAwMGZmZlVMTCwKKyAgICAgIDB4ZjgwMDA3ZmY4MDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDcwMDAwZmZmVUxMLAorICAgICAgMHgzODAwMDdmZjgwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkNHNfdGxzIiwgVElMRUdYX09QQ19MRDRTX1RMUywgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgNywgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE4NTgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibGRfdGxzIiwgVElMRUdYX09QQ19MRF9UTFMsIDB4MiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDcsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxOGEwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgIm1vdmUiLCBUSUxFR1hfT1BDX01PVkUsIDB4ZiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5IH0sIHsgNiwgNyB9LCB7IDEwLCAxMSB9LCB7IDEyLCAxMyB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmZmYwMDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwZmYwMDBVTEwsCisgICAgICAweDNjMDdmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTEwN2YwMDBVTEwsCisgICAgICAweDI4M2JmODAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNTAwYmYwMDBVTEwsCisgICAgICAweDJjMDVmODAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJtb3ZlaSIsIFRJTEVHWF9PUENfTU9WRUksIDB4ZiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCAwIH0sIHsgNiwgMSB9LCB7IDEwLCAyIH0sIHsgMTIsIDMgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZjAwZmMwVUxMLAorICAgICAgMHhmZmY4MDdlMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MDAwZmMwVUxMLAorICAgICAgMHgzYzAwMDdlMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDQwMTAwZmMwVUxMLAorICAgICAgMHgxODA4MDdlMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDAwMDAwZmMwVUxMLAorICAgICAgMHgwNDAwMDdlMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibW92ZWxpIiwgVElMRUdYX09QQ19NT1ZFTEksIDB4MywgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA0IH0sIHsgNiwgNSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDcwMDAwZmMwVUxMLAorICAgICAgMHhmODAwMDdlMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwMTAwMDBmYzBVTEwsCisgICAgICAweDAwMDAwN2UwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAicHJlZmV0Y2giLCBUSUxFR1hfT1BDX1BSRUZFVENILCAweDEyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAxNCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MWY4MDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHhjM2Y4MDAwMDA0MDAwMDAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTgwMWY4MDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDQxZjgwMDAwMDQwMDAwMDBVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAicHJlZmV0Y2hfYWRkX2wxIiwgVElMRUdYX09QQ19QUkVGRVRDSF9BRERfTDEsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDE1LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmY4MDAxZjgwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTg0MDAwMWY4MDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJwcmVmZXRjaF9hZGRfbDFfZmF1bHQiLCBUSUxFR1hfT1BDX1BSRUZFVENIX0FERF9MMV9GQVVMVCwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTUsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZjgwMDFmODAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxODM4MDAxZjgwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInByZWZldGNoX2FkZF9sMiIsIFRJTEVHWF9PUENfUFJFRkVUQ0hfQUREX0wyLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxNSwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmODAwMWY4MDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE4NTAwMDFmODAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAicHJlZmV0Y2hfYWRkX2wyX2ZhdWx0IiwgVElMRUdYX09QQ19QUkVGRVRDSF9BRERfTDJfRkFVTFQsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDE1LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmY4MDAxZjgwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTg0ODAwMWY4MDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJwcmVmZXRjaF9hZGRfbDMiLCBUSUxFR1hfT1BDX1BSRUZFVENIX0FERF9MMywgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTUsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZjgwMDFmODAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxODYwMDAxZjgwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInByZWZldGNoX2FkZF9sM19mYXVsdCIsIFRJTEVHWF9PUENfUFJFRkVUQ0hfQUREX0wzX0ZBVUxULCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxNSwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmODAwMWY4MDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE4NTgwMDFmODAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAicHJlZmV0Y2hfbDEiLCBUSUxFR1hfT1BDX1BSRUZFVENIX0wxLCAweDEyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAxNCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MWY4MDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHhjM2Y4MDAwMDA0MDAwMDAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTgwMWY4MDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDQxZjgwMDAwMDQwMDAwMDBVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAicHJlZmV0Y2hfbDFfZmF1bHQiLCBUSUxFR1hfT1BDX1BSRUZFVENIX0wxX0ZBVUxULCAweDEyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAxNCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MWY4MDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHhjM2Y4MDAwMDA0MDAwMDAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTc4MWY4MDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDQxZjgwMDAwMDAwMDAwMDBVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAicHJlZmV0Y2hfbDIiLCBUSUxFR1hfT1BDX1BSRUZFVENIX0wyLCAweDEyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAxNCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MWY4MDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHhjM2Y4MDAwMDA0MDAwMDAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTkwMWY4MDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDQzZjgwMDAwMDQwMDAwMDBVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAicHJlZmV0Y2hfbDJfZmF1bHQiLCBUSUxFR1hfT1BDX1BSRUZFVENIX0wyX0ZBVUxULCAweDEyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAxNCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MWY4MDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHhjM2Y4MDAwMDA0MDAwMDAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTg4MWY4MDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDQzZjgwMDAwMDAwMDAwMDBVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAicHJlZmV0Y2hfbDMiLCBUSUxFR1hfT1BDX1BSRUZFVENIX0wzLCAweDEyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAxNCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MWY4MDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHhjM2Y4MDAwMDA0MDAwMDAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YWEwMWY4MDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDgzZjgwMDAwMDAwMDAwMDBVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAicHJlZmV0Y2hfbDNfZmF1bHQiLCBUSUxFR1hfT1BDX1BSRUZFVENIX0wzX0ZBVUxULCAweDEyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAxNCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MWY4MDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHhjM2Y4MDAwMDA0MDAwMDAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTk4MWY4MDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDgxZjgwMDAwMDQwMDAwMDBVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAicmFpc2UiLCBUSUxFR1hfT1BDX1JBSVNFLCAweDIsIDAsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmZmZmODAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhNDRhZTgwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImFkZCIsIFRJTEVHWF9PUENfQURELCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDEwLCAxMSwgMTggfSwgeyAxMiwgMTMsIDE5IH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDBjMDAwMFVMTCwKKyAgICAgIDB4MjgwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDAyODA0MDAwMFVMTCwKKyAgICAgIDB4MTgwMjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImFkZGkiLCBUSUxFR1hfT1BDX0FEREksIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAwIH0sIHsgNiwgNywgMSB9LCB7IDEwLCAxMSwgMiB9LCB7IDEyLCAxMywgMyB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmMDAwMDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwMDAwMDBVTEwsCisgICAgICAweDNjMDAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNDAxMDAwMDBVTEwsCisgICAgICAweDE4MDgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHgwNDAwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiYWRkbGkiLCBUSUxFR1hfT1BDX0FERExJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgNCB9LCB7IDYsIDcsIDUgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3MDAwMDAwMFVMTCwKKyAgICAgIDB4ZjgwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDEwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJhZGR4IiwgVElMRUdYX09QQ19BRERYLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDEwLCAxMSwgMTggfSwgeyAxMiwgMTMsIDE5IH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDA4MDAwMFVMTCwKKyAgICAgIDB4MjgwNDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDAyODAwMDAwMFVMTCwKKyAgICAgIDB4MTgwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImFkZHhpIiwgVElMRUdYX09QQ19BRERYSSwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDAgfSwgeyA2LCA3LCAxIH0sIHsgMTAsIDExLCAyIH0sIHsgMTIsIDEzLCAzIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmYwMDAwMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODAwMDAwMFVMTCwKKyAgICAgIDB4M2MwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA0MDIwMDAwMFVMTCwKKyAgICAgIDB4MTgxMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDAwODAwMDAwMFVMTCwKKyAgICAgIDB4MDgwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImFkZHhsaSIsIFRJTEVHWF9PUENfQUREWExJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgNCB9LCB7IDYsIDcsIDUgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3MDAwMDAwMFVMTCwKKyAgICAgIDB4ZjgwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDIwMDAwMDAwVUxMLAorICAgICAgMHgwODAwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImFkZHhzYyIsIFRJTEVHWF9PUENfQUREWFNDLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTAwNDAwMDBVTEwsCisgICAgICAweDI4MDIwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiYW5kIiwgVElMRUdYX09QQ19BTkQsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMTAsIDExLCAxOCB9LCB7IDEyLCAxMywgMTkgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMHgzYzA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwMTAwMDAwVUxMLAorICAgICAgMHgyODA4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDUwMDAwMDAwVUxMLAorICAgICAgMHgyYzAwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiYW5kaSIsIFRJTEVHWF9PUENfQU5ESSwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDAgfSwgeyA2LCA3LCAxIH0sIHsgMTAsIDExLCAyIH0sIHsgMTIsIDEzLCAzIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmYwMDAwMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODAwMDAwMFVMTCwKKyAgICAgIDB4M2MwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA0MDMwMDAwMFVMTCwKKyAgICAgIDB4MTgxODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDAxMDAwMDAwMFVMTCwKKyAgICAgIDB4MGMwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImJlcXoiLCBUSUxFR1hfT1BDX0JFUVosIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTQ0MDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJiZXF6dCIsIFRJTEVHWF9PUENfQkVRWlQsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTQwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJiZmV4dHMiLCBUSUxFR1hfT1BDX0JGRVhUUywgMHgxLCA0LCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDIxLCAyMiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2YwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwMzQwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJiZmV4dHUiLCBUSUxFR1hfT1BDX0JGRVhUVSwgMHgxLCA0LCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDIxLCAyMiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2YwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwMzUwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJiZmlucyIsIFRJTEVHWF9PUENfQkZJTlMsIDB4MSwgNCwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSwgMjEsIDIyIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZjAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDAzNjAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImJnZXoiLCBUSUxFR1hfT1BDX0JHRVosIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTRjMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJiZ2V6dCIsIFRJTEVHWF9PUENfQkdFWlQsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTQ4MDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJiZ3R6IiwgVElMRUdYX09QQ19CR1RaLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA3LCAyMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZjMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE1NDAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiYmd0enQiLCBUSUxFR1hfT1BDX0JHVFpULCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA3LCAyMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZjMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE1MDAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiYmxiYyIsIFRJTEVHWF9PUENfQkxCQywgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNywgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmYzAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxNWMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImJsYmN0IiwgVElMRUdYX09QQ19CTEJDVCwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNywgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmYzAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxNTgwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImJsYnMiLCBUSUxFR1hfT1BDX0JMQlMsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTY0MDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJibGJzdCIsIFRJTEVHWF9PUENfQkxCU1QsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTYwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJibGV6IiwgVElMRUdYX09QQ19CTEVaLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA3LCAyMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZjMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE2YzAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiYmxlenQiLCBUSUxFR1hfT1BDX0JMRVpULCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA3LCAyMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZjMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE2ODAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiYmx0eiIsIFRJTEVHWF9PUENfQkxUWiwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNywgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmYzAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxNzQwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImJsdHp0IiwgVElMRUdYX09QQ19CTFRaVCwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNywgMjAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmYzAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxNzAwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImJuZXoiLCBUSUxFR1hfT1BDX0JORVosIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTdjMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJibmV6dCIsIFRJTEVHWF9PUENfQk5FWlQsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcsIDIwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTc4MDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJjbHoiLCBUSUxFR1hfT1BDX0NMWiwgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDkgfSwgeyAwLCB9LCB7IDEwLCAxMSB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZmZjAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwZmYwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNDgxMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDAwMDAwMDAwMzAwYzEwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImNtb3ZlcXoiLCBUSUxFR1hfT1BDX0NNT1ZFUVosIDB4NSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSwgMTYgfSwgeyAwLCB9LCB7IDI0LCAxMSwgMTggfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDE0MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgMHgwMDAwMDAwMDQ4MDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJjbW92bmV6IiwgVElMRUdYX09QQ19DTU9WTkVaLCAweDUsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjMsIDksIDE2IH0sIHsgMCwgfSwgeyAyNCwgMTEsIDE4IH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTAxODAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4MDAwMDAwMDA0ODA0MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiY21wZXEiLCBUSUxFR1hfT1BDX0NNUEVRLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDEwLCAxMSwgMTggfSwgeyAxMiwgMTMsIDE5IH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDFjMDAwMFVMTCwKKyAgICAgIDB4MjgwYTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA0MDAwMDAwMFVMTCwKKyAgICAgIDB4MjQwNDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImNtcGVxaSIsIFRJTEVHWF9PUENfQ01QRVFJLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMCB9LCB7IDYsIDcsIDEgfSwgeyAxMCwgMTEsIDIgfSwgeyAxMiwgMTMsIDMgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZjAwMDAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MDAwMDAwVUxMLAorICAgICAgMHgzYzAwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDQwNDAwMDAwVUxMLAorICAgICAgMHgxODIwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDE4MDAwMDAwVUxMLAorICAgICAgMHgxMDAwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiY21wZXhjaCIsIFRJTEVHWF9PUENfQ01QRVhDSCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODBlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImNtcGV4Y2g0IiwgVElMRUdYX09QQ19DTVBFWENINCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODBjMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImNtcGxlcyIsIFRJTEVHWF9PUENfQ01QTEVTLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDEwLCAxMSwgMTggfSwgeyAxMiwgMTMsIDE5IH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDIwMDAwMFVMTCwKKyAgICAgIDB4MjgxMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDAzODAwMDAwMFVMTCwKKyAgICAgIDB4MjAwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImNtcGxldSIsIFRJTEVHWF9PUENfQ01QTEVVLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDEwLCAxMSwgMTggfSwgeyAxMiwgMTMsIDE5IH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDI0MDAwMFVMTCwKKyAgICAgIDB4MjgxMjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDAzODA0MDAwMFVMTCwKKyAgICAgIDB4MjAwMjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImNtcGx0cyIsIFRJTEVHWF9PUENfQ01QTFRTLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDEwLCAxMSwgMTggfSwgeyAxMiwgMTMsIDE5IH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDI4MDAwMFVMTCwKKyAgICAgIDB4MjgxNDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDAzODA4MDAwMFVMTCwKKyAgICAgIDB4MjAwNDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImNtcGx0c2kiLCBUSUxFR1hfT1BDX0NNUExUU0ksIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAwIH0sIHsgNiwgNywgMSB9LCB7IDEwLCAxMSwgMiB9LCB7IDEyLCAxMywgMyB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmMDAwMDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwMDAwMDBVTEwsCisgICAgICAweDNjMDAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNDA1MDAwMDBVTEwsCisgICAgICAweDE4MjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwMjAwMDAwMDBVTEwsCisgICAgICAweDE0MDAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJjbXBsdHUiLCBUSUxFR1hfT1BDX0NNUExUVSwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAxMCwgMTEsIDE4IH0sIHsgMTIsIDEzLCAxOSB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAweDNjMDYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTAyYzAwMDBVTEwsCisgICAgICAweDI4MTYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwMzgwYzAwMDBVTEwsCisgICAgICAweDIwMDYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJjbXBsdHVpIiwgVElMRUdYX09QQ19DTVBMVFVJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMCB9LCB7IDYsIDcsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmYwMDAwMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDQwNjAwMDAwVUxMLAorICAgICAgMHgxODMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImNtcG5lIiwgVElMRUdYX09QQ19DTVBORSwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAxMCwgMTEsIDE4IH0sIHsgMTIsIDEzLCAxOSB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAweDNjMDYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTAzMDAwMDBVTEwsCisgICAgICAweDI4MTgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNDAwNDAwMDBVTEwsCisgICAgICAweDI0MDYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJjbXVsIiwgVElMRUdYX09QQ19DTVVMLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwNGMwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiY211bGEiLCBUSUxFR1hfT1BDX0NNVUxBLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjMsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDM4MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImNtdWxhZiIsIFRJTEVHWF9PUENfQ01VTEFGLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjMsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDM0MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImNtdWxmIiwgVElMRUdYX09QQ19DTVVMRiwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDQwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImNtdWxmciIsIFRJTEVHWF9PUENfQ01VTEZSLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwM2MwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiY211bGgiLCBUSUxFR1hfT1BDX0NNVUxILCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwNDgwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiY211bGhyIiwgVElMRUdYX09QQ19DTVVMSFIsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTA0NDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJjcmMzMl8zMiIsIFRJTEVHWF9PUENfQ1JDMzJfMzIsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTA1MDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJjcmMzMl84IiwgVElMRUdYX09QQ19DUkMzMl84LCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwNTQwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiY3R6IiwgVElMRUdYX09QQ19DVFosIDB4NSwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5IH0sIHsgMCwgfSwgeyAxMCwgMTEgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmZmYwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGZmMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTQ4MjAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgMHgwMDAwMDAwMDMwMGMyMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJkYmxhbGlnbiIsIFRJTEVHWF9PUENfREJMQUxJR04sIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwNjQwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZGJsYWxpZ24yIiwgVElMRUdYX09QQ19EQkxBTElHTjIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDU4MDAwMFVMTCwKKyAgICAgIDB4MjgxYTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJkYmxhbGlnbjQiLCBUSUxFR1hfT1BDX0RCTEFMSUdONCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwNWMwMDAwVUxMLAorICAgICAgMHgyODFjMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImRibGFsaWduNiIsIFRJTEVHWF9PUENfREJMQUxJR042LCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTA2MDAwMDBVTEwsCisgICAgICAweDI4MWUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZHJhaW4iLCBUSUxFR1hfT1BDX0RSQUlOLCAweDIsIDAsIFRSRUdfWkVSTywgMCwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhMDgwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImR0bGJwciIsIFRJTEVHWF9PUENfRFRMQlBSLCAweDIsIDEsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTEwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJleGNoIiwgVElMRUdYX09QQ19FWENILCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4MjIwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZXhjaDQiLCBUSUxFR1hfT1BDX0VYQ0g0LCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4MjAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZmRvdWJsZV9hZGRfZmxhZ3MiLCBUSUxFR1hfT1BDX0ZET1VCTEVfQUREX0ZMQUdTLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwNmMwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZmRvdWJsZV9hZGRzdWIiLCBUSUxFR1hfT1BDX0ZET1VCTEVfQUREU1VCLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjMsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDY4MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImZkb3VibGVfbXVsX2ZsYWdzIiwgVElMRUdYX09QQ19GRE9VQkxFX01VTF9GTEFHUywgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDcwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImZkb3VibGVfcGFjazEiLCBUSUxFR1hfT1BDX0ZET1VCTEVfUEFDSzEsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTA3NDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJmZG91YmxlX3BhY2syIiwgVElMRUdYX09QQ19GRE9VQkxFX1BBQ0syLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjMsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDc4MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImZkb3VibGVfc3ViX2ZsYWdzIiwgVElMRUdYX09QQ19GRE9VQkxFX1NVQl9GTEFHUywgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDdjMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImZkb3VibGVfdW5wYWNrX21heCIsIFRJTEVHWF9PUENfRkRPVUJMRV9VTlBBQ0tfTUFYLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwODAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZmRvdWJsZV91bnBhY2tfbWluIiwgVElMRUdYX09QQ19GRE9VQkxFX1VOUEFDS19NSU4sIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTA4NDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJmZXRjaGFkZCIsIFRJTEVHWF9PUENfRkVUQ0hBREQsIDB4MiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MjgyYTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJmZXRjaGFkZDQiLCBUSUxFR1hfT1BDX0ZFVENIQURENCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODI0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImZldGNoYWRkZ2V6IiwgVElMRUdYX09QQ19GRVRDSEFEREdFWiwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODI4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImZldGNoYWRkZ2V6NCIsIFRJTEVHWF9PUENfRkVUQ0hBRERHRVo0LCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4MjYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZmV0Y2hhbmQiLCBUSUxFR1hfT1BDX0ZFVENIQU5ELCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4MmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZmV0Y2hhbmQ0IiwgVElMRUdYX09QQ19GRVRDSEFORDQsIDB4MiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MjgyYzAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJmZXRjaG9yIiwgVElMRUdYX09QQ19GRVRDSE9SLCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4MzIwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZmV0Y2hvcjQiLCBUSUxFR1hfT1BDX0ZFVENIT1I0LCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4MzAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZmludiIsIFRJTEVHWF9PUENfRklOViwgMHgyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmExODAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZmx1c2giLCBUSUxFR1hfT1BDX0ZMVVNILCAweDIsIDEsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTI4MDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJmbHVzaHdiIiwgVElMRUdYX09QQ19GTFVTSFdCLCAweDIsIDAsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhMjAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImZub3AiLCBUSUxFR1hfT1BDX0ZOT1AsIDB4ZiwgMCwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAgfSwgeyAgfSwgeyAgfSwgeyAgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmZmMDAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGZmMDAwVUxMLAorICAgICAgMHgzYzA3ZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNDgzMDAwVUxMLAorICAgICAgMHgyODZhMzAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDMwMGMzMDAwVUxMLAorICAgICAgMHgxYzA2NDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZnNpbmdsZV9hZGQxIiwgVElMRUdYX09QQ19GU0lOR0xFX0FERDEsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTA4ODAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJmc2luZ2xlX2FkZHN1YjIiLCBUSUxFR1hfT1BDX0ZTSU5HTEVfQUREU1VCMiwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTA4YzAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJmc2luZ2xlX211bDEiLCBUSUxFR1hfT1BDX0ZTSU5HTEVfTVVMMSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDkwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImZzaW5nbGVfbXVsMiIsIFRJTEVHWF9PUENfRlNJTkdMRV9NVUwyLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwOTQwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiZnNpbmdsZV9wYWNrMSIsIFRJTEVHWF9PUENfRlNJTkdMRV9QQUNLMSwgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDkgfSwgeyAwLCB9LCB7IDEwLCAxMSB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZmZjAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwZmYwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNDg0MDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDAwMDAwMDAwMzAwYzQwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImZzaW5nbGVfcGFjazIiLCBUSUxFR1hfT1BDX0ZTSU5HTEVfUEFDSzIsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTA5ODAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJmc2luZ2xlX3N1YjEiLCBUSUxFR1hfT1BDX0ZTSU5HTEVfU1VCMSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MDljMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImljb2giLCBUSUxFR1hfT1BDX0lDT0gsIDB4MiwgMSwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhMzgwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImlsbCIsIFRJTEVHWF9PUENfSUxMLCAweGEsIDAsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7ICB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDB4M2MwN2Y4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhNDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDFjMDY0ODAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJpbnYiLCBUSUxFR1hfT1BDX0lOViwgMHgyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmE0ODAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiaXJldCIsIFRJTEVHWF9PUENfSVJFVCwgMHgyLCAwLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTUwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJqIiwgVElMRUdYX09QQ19KLCAweDIsIDEsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAyNSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmMwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI0MDAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiamFsIiwgVElMRUdYX09QQ19KQUwsIDB4MiwgMSwgVFJFR19MUiwgMSwKKyAgICB7IHsgMCwgfSwgeyAyNSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmMwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDIwMDAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAiamFsciIsIFRJTEVHWF9PUENfSkFMUiwgMHhhLCAxLCBUUkVHX0xSLCAxLAorICAgIHsgeyAwLCB9LCB7IDcgfSwgeyAwLCB9LCB7IDEzIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHgzYzA3ZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmE2MDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4MWMwNjU4MDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImphbHJwIiwgVElMRUdYX09QQ19KQUxSUCwgMHhhLCAxLCBUUkVHX0xSLCAxLAorICAgIHsgeyAwLCB9LCB7IDcgfSwgeyAwLCB9LCB7IDEzIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHgzYzA3ZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmE1ODAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4MWMwNjUwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImpyIiwgVElMRUdYX09QQ19KUiwgMHhhLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNyB9LCB7IDAsIH0sIHsgMTMgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweDNjMDdmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTcwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgMHgxYzA2NjgwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAianJwIiwgVElMRUdYX09QQ19KUlAsIDB4YSwgMSwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcgfSwgeyAwLCB9LCB7IDEzIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHgzYzA3ZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmE2ODAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4MWMwNjYwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkIiwgVElMRUdYX09QQ19MRCwgMHgxMiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMjYsIDE0IH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweGMyMDAwMDAwMDQwMDAwMDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhZTgwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4ODIwMDAwMDAwNDAwMDAwMFVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJsZDFzIiwgVElMRUdYX09QQ19MRDFTLCAweDEyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAyNiwgMTQgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDB4YzIwMDAwMDAwNDAwMDAwMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmE3ODAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgMHg0MDAwMDAwMDAwMDAwMDAwVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkMXNfYWRkIiwgVElMRUdYX09QQ19MRDFTX0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgMTUsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxODM4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkMXUiLCBUSUxFR1hfT1BDX0xEMVUsIDB4MTIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCA3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDI2LCAxNCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHhjMjAwMDAwMDA0MDAwMDAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTgwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDQwMDAwMDAwMDQwMDAwMDBVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibGQxdV9hZGQiLCBUSUxFR1hfT1BDX0xEMVVfQURELCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCAxNSwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE4NDAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibGQycyIsIFRJTEVHWF9PUENfTEQyUywgMHgxMiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMjYsIDE0IH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweGMyMDAwMDAwMDQwMDAwMDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhODgwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4NDIwMDAwMDAwMDAwMDAwMFVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJsZDJzX2FkZCIsIFRJTEVHWF9PUENfTEQyU19BREQsIDB4MiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDE1LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTg0ODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJsZDJ1IiwgVElMRUdYX09QQ19MRDJVLCAweDEyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAyNiwgMTQgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDB4YzIwMDAwMDAwNDAwMDAwMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmE5MDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgMHg0MjAwMDAwMDA0MDAwMDAwVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkMnVfYWRkIiwgVElMRUdYX09QQ19MRDJVX0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgMTUsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxODUwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkNHMiLCBUSUxFR1hfT1BDX0xENFMsIDB4MTIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCA3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDI2LCAxNCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHhjMjAwMDAwMDA0MDAwMDAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YTk4MDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDgwMDAwMDAwMDQwMDAwMDBVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibGQ0c19hZGQiLCBUSUxFR1hfT1BDX0xENFNfQURELCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCAxNSwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE4NTgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibGQ0dSIsIFRJTEVHWF9PUENfTEQ0VSwgMHgxMiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMjYsIDE0IH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweGMyMDAwMDAwMDQwMDAwMDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhYTAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4ODIwMDAwMDAwMDAwMDAwMFVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJsZDR1X2FkZCIsIFRJTEVHWF9PUENfTEQ0VV9BREQsIDB4MiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDE1LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTg2MDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJsZF9hZGQiLCBUSUxFR1hfT1BDX0xEX0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgMTUsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxOGEwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkbmEiLCBUSUxFR1hfT1BDX0xETkEsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhYTgwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkbmFfYWRkIiwgVElMRUdYX09QQ19MRE5BX0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgMTUsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxOGE4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkbnQiLCBUSUxFR1hfT1BDX0xETlQsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhZTAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkbnQxcyIsIFRJTEVHWF9PUENfTEROVDFTLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCA3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YWIwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJsZG50MXNfYWRkIiwgVElMRUdYX09QQ19MRE5UMVNfQURELCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCAxNSwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE4NjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibGRudDF1IiwgVElMRUdYX09QQ19MRE5UMVUsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhYjgwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkbnQxdV9hZGQiLCBUSUxFR1hfT1BDX0xETlQxVV9BREQsIDB4MiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDE1LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTg3MDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJsZG50MnMiLCBUSUxFR1hfT1BDX0xETlQyUywgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmFjMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibGRudDJzX2FkZCIsIFRJTEVHWF9PUENfTEROVDJTX0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgMTUsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxODc4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkbnQydSIsIFRJTEVHWF9PUENfTEROVDJVLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCA3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YWM4MDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJsZG50MnVfYWRkIiwgVElMRUdYX09QQ19MRE5UMlVfQURELCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCAxNSwgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE4ODAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibGRudDRzIiwgVElMRUdYX09QQ19MRE5UNFMsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhZDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkbnQ0c19hZGQiLCBUSUxFR1hfT1BDX0xETlQ0U19BREQsIDB4MiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDYsIDE1LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MTg4ODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJsZG50NHUiLCBUSUxFR1hfT1BDX0xETlQ0VSwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmFkODAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibGRudDR1X2FkZCIsIFRJTEVHWF9PUENfTEROVDRVX0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgMTUsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxODkwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxkbnRfYWRkIiwgVElMRUdYX09QQ19MRE5UX0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNiwgMTUsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxODk4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgImxuayIsIFRJTEVHWF9PUENfTE5LLCAweGEsIDEsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2IH0sIHsgMCwgfSwgeyAxMiB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDB4M2MwN2Y4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZhZjAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDFjMDY3MDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJtZiIsIFRJTEVHWF9PUENfTUYsIDB4MiwgMCwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7ICB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmFmODAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibWZzcHIiLCBUSUxFR1hfT1BDX01GU1BSLCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA2LCAyNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE4YjAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibW0iLCBUSUxFR1hfT1BDX01NLCAweDEsIDQsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjMsIDksIDIxLCAyMiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2YwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwMzcwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJtbnoiLCBUSUxFR1hfT1BDX01OWiwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAxMCwgMTEsIDE4IH0sIHsgMTIsIDEzLCAxOSB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAweDNjMDYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTBhMDAwMDBVTEwsCisgICAgICAweDI4MzQwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNDgwODAwMDBVTEwsCisgICAgICAweDI4MDQwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJtdHNwciIsIFRJTEVHWF9PUENfTVRTUFIsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDI4LCA3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MThiODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJtdWxfaHNfaHMiLCBUSUxFR1hfT1BDX01VTF9IU19IUywgMHg1LCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAxMCwgMTEsIDE4IH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTBkNDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4MDAwMDAwMDA2ODAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibXVsX2hzX2h1IiwgVElMRUdYX09QQ19NVUxfSFNfSFUsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTBkODAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJtdWxfaHNfbHMiLCBUSUxFR1hfT1BDX01VTF9IU19MUywgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MGRjMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgIm11bF9oc19sdSIsIFRJTEVHWF9PUENfTVVMX0hTX0xVLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwZTAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibXVsX2h1X2h1IiwgVElMRUdYX09QQ19NVUxfSFVfSFUsIDB4NSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMTAsIDExLCAxOCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwZTQwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDAwMDAwMDAwNjgwNDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgIm11bF9odV9scyIsIFRJTEVHWF9PUENfTVVMX0hVX0xTLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwZTgwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibXVsX2h1X2x1IiwgVElMRUdYX09QQ19NVUxfSFVfTFUsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTBlYzAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJtdWxfbHNfbHMiLCBUSUxFR1hfT1BDX01VTF9MU19MUywgMHg1LCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAxMCwgMTEsIDE4IH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTBmMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4MDAwMDAwMDA2ODA4MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibXVsX2xzX2x1IiwgVElMRUdYX09QQ19NVUxfTFNfTFUsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTBmNDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJtdWxfbHVfbHUiLCBUSUxFR1hfT1BDX01VTF9MVV9MVSwgMHg1LCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAxMCwgMTEsIDE4IH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTBmODAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4MDAwMDAwMDA2ODBjMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibXVsYV9oc19ocyIsIFRJTEVHWF9PUENfTVVMQV9IU19IUywgMHg1LCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5LCAxNiB9LCB7IDAsIH0sIHsgMjQsIDExLCAxOCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwYTgwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDAwMDAwMDAwNzAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgIm11bGFfaHNfaHUiLCBUSUxFR1hfT1BDX01VTEFfSFNfSFUsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwYWMwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibXVsYV9oc19scyIsIFRJTEVHWF9PUENfTVVMQV9IU19MUywgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTBiMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJtdWxhX2hzX2x1IiwgVElMRUdYX09QQ19NVUxBX0hTX0xVLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjMsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MGI0MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgIm11bGFfaHVfaHUiLCBUSUxFR1hfT1BDX01VTEFfSFVfSFUsIDB4NSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSwgMTYgfSwgeyAwLCB9LCB7IDI0LCAxMSwgMTggfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MGI4MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgMHgwMDAwMDAwMDcwMDQwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJtdWxhX2h1X2xzIiwgVElMRUdYX09QQ19NVUxBX0hVX0xTLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjMsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MGJjMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgIm11bGFfaHVfbHUiLCBUSUxFR1hfT1BDX01VTEFfSFVfTFUsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwYzAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibXVsYV9sc19scyIsIFRJTEVHWF9PUENfTVVMQV9MU19MUywgMHg1LCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5LCAxNiB9LCB7IDAsIH0sIHsgMjQsIDExLCAxOCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwYzQwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDAwMDAwMDAwNzAwODAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgIm11bGFfbHNfbHUiLCBUSUxFR1hfT1BDX01VTEFfTFNfTFUsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwYzgwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAibXVsYV9sdV9sdSIsIFRJTEVHWF9PUENfTVVMQV9MVV9MVSwgMHg1LCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5LCAxNiB9LCB7IDAsIH0sIHsgMjQsIDExLCAxOCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwY2MwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDAwMDAwMDAwNzAwYzAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgIm11bGF4IiwgVElMRUdYX09QQ19NVUxBWCwgMHg1LCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5LCAxNiB9LCB7IDAsIH0sIHsgMjQsIDExLCAxOCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwYTQwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDAwMDAwMDAwNDAwODAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgIm11bHgiLCBUSUxFR1hfT1BDX01VTFgsIDB4NSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMTAsIDExLCAxOCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUwZDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDAwMDAwMDAwNDAwYzAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgIm16IiwgVElMRUdYX09QQ19NWiwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAxMCwgMTEsIDE4IH0sIHsgMTIsIDEzLCAxOSB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAweDNjMDYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTBmYzAwMDBVTEwsCisgICAgICAweDI4MzYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNDgwYzAwMDBVTEwsCisgICAgICAweDI4MDYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJuYXAiLCBUSUxFR1hfT1BDX05BUCwgMHgyLCAwLCBUUkVHX1pFUk8sIDAsCisgICAgeyB7IDAsIH0sIHsgIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZmZjgwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg2YjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJub3AiLCBUSUxFR1hfT1BDX05PUCwgMHhmLCAwLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7ICB9LCB7ICB9LCB7ICB9LCB7ICB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmZmYwMDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwZmYwMDBVTEwsCisgICAgICAweDNjMDdmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTE0ODUwMDBVTEwsCisgICAgICAweDI4NmIwODAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwMzAwYzUwMDBVTEwsCisgICAgICAweDFjMDY3ODAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJub3IiLCBUSUxFR1hfT1BDX05PUiwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAxMCwgMTEsIDE4IH0sIHsgMTIsIDEzLCAxOSB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAweDNjMDYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTEwMDAwMDBVTEwsCisgICAgICAweDI4MzgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNTAwNDAwMDBVTEwsCisgICAgICAweDJjMDIwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJvciIsIFRJTEVHWF9PUENfT1IsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMTAsIDExLCAxOCB9LCB7IDEyLCAxMywgMTkgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMHgzYzA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxMDQwMDAwVUxMLAorICAgICAgMHgyODNhMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDUwMDgwMDAwVUxMLAorICAgICAgMHgyYzA0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAib3JpIiwgVElMRUdYX09QQ19PUkksIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAwIH0sIHsgNiwgNywgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZjAwMDAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNDA3MDAwMDBVTEwsCisgICAgICAweDE4YzAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAicGNudCIsIFRJTEVHWF9PUENfUENOVCwgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDkgfSwgeyAwLCB9LCB7IDEwLCAxMSB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZmZjAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwZmYwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNDg2MDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDAwMDAwMDAwMzAwYzYwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInJldmJpdHMiLCBUSUxFR1hfT1BDX1JFVkJJVFMsIDB4NSwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5IH0sIHsgMCwgfSwgeyAxMCwgMTEgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmZmYwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGZmMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTQ4NzAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgMHgwMDAwMDAwMDMwMGM3MDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJyZXZieXRlcyIsIFRJTEVHWF9PUENfUkVWQllURVMsIDB4NSwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5IH0sIHsgMCwgfSwgeyAxMCwgMTEgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmZmYwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGZmMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTQ4ODAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgMHgwMDAwMDAwMDMwMGM4MDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJyb3RsIiwgVElMRUdYX09QQ19ST1RMLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDEwLCAxMSwgMTggfSwgeyAxMiwgMTMsIDE5IH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTA4MDAwMFVMTCwKKyAgICAgIDB4MjgzYzAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA1ODAwMDAwMFVMTCwKKyAgICAgIDB4MzAwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInJvdGxpIiwgVElMRUdYX09QQ19ST1RMSSwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDI5IH0sIHsgNiwgNywgMzAgfSwgeyAxMCwgMTEsIDMxIH0sIHsgMTIsIDEzLCAzMiB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAweDNjMDYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNjAwNDAwMDBVTEwsCisgICAgICAweDMwMDIwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwMDAwMDBVTEwsCisgICAgICAweDM4MDAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJzaGwiLCBUSUxFR1hfT1BDX1NITCwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAxMCwgMTEsIDE4IH0sIHsgMTIsIDEzLCAxOSB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAweDNjMDYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTEyODAwMDBVTEwsCisgICAgICAweDI4NGMwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNTgwNDAwMDBVTEwsCisgICAgICAweDMwMDIwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJzaGwxNmluc2xpIiwgVElMRUdYX09QQ19TSEwxNklOU0xJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgNCB9LCB7IDYsIDcsIDUgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3MDAwMDAwMFVMTCwKKyAgICAgIDB4ZjgwMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDcwMDAwMDAwVUxMLAorICAgICAgMHgzODAwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInNobDFhZGQiLCBUSUxFR1hfT1BDX1NITDFBREQsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMTAsIDExLCAxOCB9LCB7IDEyLCAxMywgMTkgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMHgzYzA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxMTAwMDAwVUxMLAorICAgICAgMHgyODQwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDMwMDAwMDAwVUxMLAorICAgICAgMHgxYzAwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic2hsMWFkZHgiLCBUSUxFR1hfT1BDX1NITDFBRERYLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDEwLCAxMSwgMTggfSwgeyAxMiwgMTMsIDE5IH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTBjMDAwMFVMTCwKKyAgICAgIDB4MjgzZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA2MDA0MDAwMFVMTCwKKyAgICAgIDB4MzQwMjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInNobDJhZGQiLCBUSUxFR1hfT1BDX1NITDJBREQsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMTAsIDExLCAxOCB9LCB7IDEyLCAxMywgMTkgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMHgzYzA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxMTgwMDAwVUxMLAorICAgICAgMHgyODQ0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDMwMDQwMDAwVUxMLAorICAgICAgMHgxYzAyMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic2hsMmFkZHgiLCBUSUxFR1hfT1BDX1NITDJBRERYLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDEwLCAxMSwgMTggfSwgeyAxMiwgMTMsIDE5IH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTE0MDAwMFVMTCwKKyAgICAgIDB4Mjg0MjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA2MDA4MDAwMFVMTCwKKyAgICAgIDB4MzQwNDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInNobDNhZGQiLCBUSUxFR1hfT1BDX1NITDNBREQsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMTAsIDExLCAxOCB9LCB7IDEyLCAxMywgMTkgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMHgzYzA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxMjAwMDAwVUxMLAorICAgICAgMHgyODQ4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDMwMDgwMDAwVUxMLAorICAgICAgMHgxYzA0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic2hsM2FkZHgiLCBUSUxFR1hfT1BDX1NITDNBRERYLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDEwLCAxMSwgMTggfSwgeyAxMiwgMTMsIDE5IH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTFjMDAwMFVMTCwKKyAgICAgIDB4Mjg0NjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA2MDBjMDAwMFVMTCwKKyAgICAgIDB4MzQwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInNobGkiLCBUSUxFR1hfT1BDX1NITEksIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAyOSB9LCB7IDYsIDcsIDMwIH0sIHsgMTAsIDExLCAzMSB9LCB7IDEyLCAxMywgMzIgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMHgzYzA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDYwMDgwMDAwVUxMLAorICAgICAgMHgzMDA0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MDQwMDAwVUxMLAorICAgICAgMHgzODAyMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic2hseCIsIFRJTEVHWF9PUENfU0hMWCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxMjQwMDAwVUxMLAorICAgICAgMHgyODRhMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInNobHhpIiwgVElMRUdYX09QQ19TSExYSSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDI5IH0sIHsgNiwgNywgMzAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDYwMGMwMDAwVUxMLAorICAgICAgMHgzMDA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInNocnMiLCBUSUxFR1hfT1BDX1NIUlMsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMTAsIDExLCAxOCB9LCB7IDEyLCAxMywgMTkgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMHgzYzA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxMmMwMDAwVUxMLAorICAgICAgMHgyODRlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDU4MDgwMDAwVUxMLAorICAgICAgMHgzMDA0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic2hyc2kiLCBUSUxFR1hfT1BDX1NIUlNJLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMjkgfSwgeyA2LCA3LCAzMCB9LCB7IDEwLCAxMSwgMzEgfSwgeyAxMiwgMTMsIDMyIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA2MDEwMDAwMFVMTCwKKyAgICAgIDB4MzAwODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODA4MDAwMFVMTCwKKyAgICAgIDB4MzgwNDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInNocnUiLCBUSUxFR1hfT1BDX1NIUlUsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMTAsIDExLCAxOCB9LCB7IDEyLCAxMywgMTkgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMHgzYzA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxMzQwMDAwVUxMLAorICAgICAgMHgyODUyMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDU4MGMwMDAwVUxMLAorICAgICAgMHgzMDA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic2hydWkiLCBUSUxFR1hfT1BDX1NIUlVJLCAweGYsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMjkgfSwgeyA2LCA3LCAzMCB9LCB7IDEwLCAxMSwgMzEgfSwgeyAxMiwgMTMsIDMyIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4M2MwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA2MDE0MDAwMFVMTCwKKyAgICAgIDB4MzAwYTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBjMDAwMFVMTCwKKyAgICAgIDB4MzgwNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInNocnV4IiwgVElMRUdYX09QQ19TSFJVWCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxMzAwMDAwVUxMLAorICAgICAgMHgyODUwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInNocnV4aSIsIFRJTEVHWF9PUENfU0hSVVhJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMjkgfSwgeyA2LCA3LCAzMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNjAxODAwMDBVTEwsCisgICAgICAweDMwMGMwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic2h1ZmZsZWJ5dGVzIiwgVElMRUdYX09QQ19TSFVGRkxFQllURVMsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxMzgwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic3QiLCBUSUxFR1hfT1BDX1NULCAweDEyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMTQsIDMzIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweGMyMDAwMDAwMDQwMDAwMDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODYyMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4YzIwMDAwMDAwNDAwMDAwMFVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJzdDEiLCBUSUxFR1hfT1BDX1NUMSwgMHgxMiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDE0LCAzMyB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHhjMjAwMDAwMDA0MDAwMDAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg1NDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweGMwMDAwMDAwMDAwMDAwMDBVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic3QxX2FkZCIsIFRJTEVHWF9PUENfU1QxX0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTUsIDE3LCAzNCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE4YzgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic3QyIiwgVElMRUdYX09QQ19TVDIsIDB4MTIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAxNCwgMzMgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDB4YzIwMDAwMDAwNDAwMDAwMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NTYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgMHhjMDAwMDAwMDA0MDAwMDAwVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInN0Ml9hZGQiLCBUSUxFR1hfT1BDX1NUMl9BREQsIDB4MiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDE1LCAxNywgMzQgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxOGQwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInN0NCIsIFRJTEVHWF9PUENfU1Q0LCAweDEyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMTQsIDMzIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweGMyMDAwMDAwMDQwMDAwMDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODU4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4YzIwMDAwMDAwMDAwMDAwMFVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJzdDRfYWRkIiwgVElMRUdYX09QQ19TVDRfQURELCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxNSwgMTcsIDM0IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MThkODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJzdF9hZGQiLCBUSUxFR1hfT1BDX1NUX0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTUsIDE3LCAzNCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE5MDAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic3RudCIsIFRJTEVHWF9PUENfU1ROVCwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODYwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInN0bnQxIiwgVElMRUdYX09QQ19TVE5UMSwgMHgyLCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODVhMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInN0bnQxX2FkZCIsIFRJTEVHWF9PUENfU1ROVDFfQURELCAweDIsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyAxNSwgMTcsIDM0IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4MThlMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJzdG50MiIsIFRJTEVHWF9PUENfU1ROVDIsIDB4MiwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAtMVVMTCwKKyAgICAgIDB4Mjg1YzAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJzdG50Ml9hZGQiLCBUSUxFR1hfT1BDX1NUTlQyX0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTUsIDE3LCAzNCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE4ZTgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic3RudDQiLCBUSUxFR1hfT1BDX1NUTlQ0LCAweDIsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMCwgfSwgeyA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NWUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic3RudDRfYWRkIiwgVElMRUdYX09QQ19TVE5UNF9BREQsIDB4MiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAwLCB9LCB7IDE1LCAxNywgMzQgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgxOGYwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInN0bnRfYWRkIiwgVElMRUdYX09QQ19TVE5UX0FERCwgMHgyLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgMTUsIDE3LCAzNCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDE4ZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic3ViIiwgVElMRUdYX09QQ19TVUIsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMTAsIDExLCAxOCB9LCB7IDEyLCAxMywgMTkgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMHgzYzA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNDQwMDAwVUxMLAorICAgICAgMHgyODY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDI4MGMwMDAwVUxMLAorICAgICAgMHgxODA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAic3VieCIsIFRJTEVHWF9PUENfU1VCWCwgMHhmLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAxMCwgMTEsIDE4IH0sIHsgMTIsIDEzLCAxOSB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwYzAwMDBVTEwsCisgICAgICAweDNjMDYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTE0MDAwMDBVTEwsCisgICAgICAweDI4NjYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAweDAwMDAwMDAwMjgwODAwMDBVTEwsCisgICAgICAweDE4MDQwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJzdWJ4c2MiLCBUSUxFR1hfT1BDX1NVQlhTQywgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxM2MwMDAwVUxMLAorICAgICAgMHgyODY0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInN3aW50MCIsIFRJTEVHWF9PUENfU1dJTlQwLCAweDIsIDAsIFRSRUdfWkVSTywgMCwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZiMTAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInN3aW50MSIsIFRJTEVHWF9PUENfU1dJTlQxLCAweDIsIDAsIFRSRUdfWkVSTywgMCwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZiMTgwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInN3aW50MiIsIFRJTEVHWF9PUENfU1dJTlQyLCAweDIsIDAsIFRSRUdfWkVSTywgMCwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZiMjAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInN3aW50MyIsIFRJTEVHWF9PUENfU1dJTlQzLCAweDIsIDAsIFRSRUdfWkVSTywgMCwKKyAgICB7IHsgMCwgfSwgeyAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDBVTEwsCisgICAgICAweGZmZmZmODAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIC0xVUxMLAorICAgICAgMHgyODZiMjgwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInRibGlkeGIwIiwgVElMRUdYX09QQ19UQkxJRFhCMCwgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5IH0sIHsgMCwgfSwgeyAyNCwgMTEgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmZmYwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGZmMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTQ4OTAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgMHgwMDAwMDAwMDMwMGM5MDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ0YmxpZHhiMSIsIFRJTEVHWF9PUENfVEJMSURYQjEsIDB4NSwgMiwgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSB9LCB7IDAsIH0sIHsgMjQsIDExIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmZmMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDB4MDAwMDAwMDA3ODBmZjAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTE0OGEwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIDB4MDAwMDAwMDAzMDBjYTAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidGJsaWR4YjIiLCBUSUxFR1hfT1BDX1RCTElEWEIyLCAweDUsIDIsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjMsIDkgfSwgeyAwLCB9LCB7IDI0LCAxMSB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZmZjAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAweDAwMDAwMDAwNzgwZmYwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNDhiMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAweDAwMDAwMDAwMzAwY2IwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInRibGlkeGIzIiwgVElMRUdYX09QQ19UQkxJRFhCMywgMHg1LCAyLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5IH0sIHsgMCwgfSwgeyAyNCwgMTEgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmZmYwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGZmMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTQ4YzAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgMHgwMDAwMDAwMDMwMGNjMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MWFkZCIsIFRJTEVHWF9PUENfVjFBREQsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTUwMDAwMFVMTCwKKyAgICAgIDB4Mjg2ZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MWFkZGkiLCBUSUxFR1hfT1BDX1YxQURESSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDAgfSwgeyA2LCA3LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmMDAwMDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA0MDgwMDAwMFVMTCwKKyAgICAgIDB4MTkwODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MWFkZHVjIiwgVElMRUdYX09QQ19WMUFERFVDLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTE0YzAwMDBVTEwsCisgICAgICAweDI4NmMwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFhZGlmZnUiLCBUSUxFR1hfT1BDX1YxQURJRkZVLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNTQwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFhdmd1IiwgVElMRUdYX09QQ19WMUFWR1UsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTE1ODAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MWNtcGVxIiwgVElMRUdYX09QQ19WMUNNUEVRLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTE1YzAwMDBVTEwsCisgICAgICAweDI4NzAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFjbXBlcWkiLCBUSUxFR1hfT1BDX1YxQ01QRVFJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMCB9LCB7IDYsIDcsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmYwMDAwMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDQwOTAwMDAwVUxMLAorICAgICAgMHgxOTEwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxY21wbGVzIiwgVElMRUdYX09QQ19WMUNNUExFUywgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNjAwMDAwVUxMLAorICAgICAgMHgyODcyMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxY21wbGV1IiwgVElMRUdYX09QQ19WMUNNUExFVSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNjQwMDAwVUxMLAorICAgICAgMHgyODc0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxY21wbHRzIiwgVElMRUdYX09QQ19WMUNNUExUUywgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNjgwMDAwVUxMLAorICAgICAgMHgyODc2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxY21wbHRzaSIsIFRJTEVHWF9PUENfVjFDTVBMVFNJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMCB9LCB7IDYsIDcsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmYwMDAwMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDQwYTAwMDAwVUxMLAorICAgICAgMHgxOTE4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxY21wbHR1IiwgVElMRUdYX09QQ19WMUNNUExUVSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNmMwMDAwVUxMLAorICAgICAgMHgyODc4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxY21wbHR1aSIsIFRJTEVHWF9PUENfVjFDTVBMVFVJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMCB9LCB7IDYsIDcsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmYwMDAwMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDQwYjAwMDAwVUxMLAorICAgICAgMHgxOTIwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxY21wbmUiLCBUSUxFR1hfT1BDX1YxQ01QTkUsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTcwMDAwMFVMTCwKKyAgICAgIDB4Mjg3YTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MWRkb3RwdSIsIFRJTEVHWF9PUENfVjFERE9UUFUsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTI4ODAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MWRkb3RwdWEiLCBUSUxFR1hfT1BDX1YxRERPVFBVQSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTI4NDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MWRkb3RwdXMiLCBUSUxFR1hfT1BDX1YxRERPVFBVUywgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTc4MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxZGRvdHB1c2EiLCBUSUxFR1hfT1BDX1YxRERPVFBVU0EsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxNzQwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFkb3RwIiwgVElMRUdYX09QQ19WMURPVFAsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTE4ODAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MWRvdHBhIiwgVElMRUdYX09QQ19WMURPVFBBLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjMsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTdjMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxZG90cHUiLCBUSUxFR1hfT1BDX1YxRE9UUFUsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTI5MDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MWRvdHB1YSIsIFRJTEVHWF9PUENfVjFET1RQVUEsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyOGMwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFkb3RwdXMiLCBUSUxFR1hfT1BDX1YxRE9UUFVTLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxODQwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFkb3RwdXNhIiwgVElMRUdYX09QQ19WMURPVFBVU0EsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyAyMywgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxODAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFpbnRfaCIsIFRJTEVHWF9PUENfVjFJTlRfSCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxOGMwMDAwVUxMLAorICAgICAgMHgyODdjMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxaW50X2wiLCBUSUxFR1hfT1BDX1YxSU5UX0wsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTkwMDAwMFVMTCwKKyAgICAgIDB4Mjg3ZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MW1heHUiLCBUSUxFR1hfT1BDX1YxTUFYVSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxOTQwMDAwVUxMLAorICAgICAgMHgyODgwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxbWF4dWkiLCBUSUxFR1hfT1BDX1YxTUFYVUksIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAwIH0sIHsgNiwgNywgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZjAwMDAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNDBjMDAwMDBVTEwsCisgICAgICAweDE5MjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFtaW51IiwgVElMRUdYX09QQ19WMU1JTlUsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MTk4MDAwMFVMTCwKKyAgICAgIDB4Mjg4MjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MW1pbnVpIiwgVElMRUdYX09QQ19WMU1JTlVJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMCB9LCB7IDYsIDcsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmYwMDAwMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDQwZDAwMDAwVUxMLAorICAgICAgMHgxOTMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxbW56IiwgVElMRUdYX09QQ19WMU1OWiwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxOWMwMDAwVUxMLAorICAgICAgMHgyODg0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxbXVsdHUiLCBUSUxFR1hfT1BDX1YxTVVMVFUsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFhMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MW11bHUiLCBUSUxFR1hfT1BDX1YxTVVMVSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MWE4MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxbXVsdXMiLCBUSUxFR1hfT1BDX1YxTVVMVVMsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFhNDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MW16IiwgVElMRUdYX09QQ19WMU1aLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFhYzAwMDBVTEwsCisgICAgICAweDI4ODYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFzYWRhdSIsIFRJTEVHWF9PUENfVjFTQURBVSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFiMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MXNhZHUiLCBUSUxFR1hfT1BDX1YxU0FEVSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MWI0MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxc2hsIiwgVElMRUdYX09QQ19WMVNITCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxYjgwMDAwVUxMLAorICAgICAgMHgyODg4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYxc2hsaSIsIFRJTEVHWF9PUENfVjFTSExJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMjkgfSwgeyA2LCA3LCAzMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNjAxYzAwMDBVTEwsCisgICAgICAweDMwMGUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFzaHJzIiwgVElMRUdYX09QQ19WMVNIUlMsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MWJjMDAwMFVMTCwKKyAgICAgIDB4Mjg4YTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MXNocnNpIiwgVElMRUdYX09QQ19WMVNIUlNJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMjkgfSwgeyA2LCA3LCAzMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNjAyMDAwMDBVTEwsCisgICAgICAweDMwMTAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFzaHJ1IiwgVElMRUdYX09QQ19WMVNIUlUsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MWMwMDAwMFVMTCwKKyAgICAgIDB4Mjg4YzAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MXNocnVpIiwgVElMRUdYX09QQ19WMVNIUlVJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMjkgfSwgeyA2LCA3LCAzMCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNjAyNDAwMDBVTEwsCisgICAgICAweDMwMTIwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFzdWIiLCBUSUxFR1hfT1BDX1YxU1VCLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFjODAwMDBVTEwsCisgICAgICAweDI4OTAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjFzdWJ1YyIsIFRJTEVHWF9PUENfVjFTVUJVQywgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxYzQwMDAwVUxMLAorICAgICAgMHgyODhlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYyYWRkIiwgVElMRUdYX09QQ19WMkFERCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxZDAwMDAwVUxMLAorICAgICAgMHgyODk0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYyYWRkaSIsIFRJTEVHWF9PUENfVjJBRERJLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMCB9LCB7IDYsIDcsIDEgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmYwMDAwMFVMTCwKKyAgICAgIDB4ZmZmODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDQwZTAwMDAwVUxMLAorICAgICAgMHgxOTM4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYyYWRkc2MiLCBUSUxFR1hfT1BDX1YyQUREU0MsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MWNjMDAwMFVMTCwKKyAgICAgIDB4Mjg5MjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MmFkaWZmcyIsIFRJTEVHWF9PUENfVjJBRElGRlMsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFkNDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MmF2Z3MiLCBUSUxFR1hfT1BDX1YyQVZHUywgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MWQ4MDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYyY21wZXEiLCBUSUxFR1hfT1BDX1YyQ01QRVEsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MWRjMDAwMFVMTCwKKyAgICAgIDB4Mjg5NjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MmNtcGVxaSIsIFRJTEVHWF9PUENfVjJDTVBFUUksIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAwIH0sIHsgNiwgNywgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZjAwMDAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNDBmMDAwMDBVTEwsCisgICAgICAweDE5NDAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJjbXBsZXMiLCBUSUxFR1hfT1BDX1YyQ01QTEVTLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFlMDAwMDBVTEwsCisgICAgICAweDI4OTgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJjbXBsZXUiLCBUSUxFR1hfT1BDX1YyQ01QTEVVLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFlNDAwMDBVTEwsCisgICAgICAweDI4OWEwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJjbXBsdHMiLCBUSUxFR1hfT1BDX1YyQ01QTFRTLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFlODAwMDBVTEwsCisgICAgICAweDI4OWMwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJjbXBsdHNpIiwgVElMRUdYX09QQ19WMkNNUExUU0ksIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAwIH0sIHsgNiwgNywgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZjAwMDAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNDEwMDAwMDBVTEwsCisgICAgICAweDE5NDgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJjbXBsdHUiLCBUSUxFR1hfT1BDX1YyQ01QTFRVLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFlYzAwMDBVTEwsCisgICAgICAweDI4OWUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJjbXBsdHVpIiwgVElMRUdYX09QQ19WMkNNUExUVUksIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAwIH0sIHsgNiwgNywgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZjAwMDAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNDExMDAwMDBVTEwsCisgICAgICAweDE5NTAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJjbXBuZSIsIFRJTEVHWF9PUENfVjJDTVBORSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxZjAwMDAwVUxMLAorICAgICAgMHgyOGEwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYyZG90cCIsIFRJTEVHWF9PUENfVjJET1RQLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUxZjgwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJkb3RwYSIsIFRJTEVHWF9PUENfVjJET1RQQSwgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFmNDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MmludF9oIiwgVElMRUdYX09QQ19WMklOVF9ILCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTFmYzAwMDBVTEwsCisgICAgICAweDI4YTIwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJpbnRfbCIsIFRJTEVHWF9PUENfVjJJTlRfTCwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyMDAwMDAwVUxMLAorICAgICAgMHgyOGE0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYybWF4cyIsIFRJTEVHWF9PUENfVjJNQVhTLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTIwNDAwMDBVTEwsCisgICAgICAweDI4YTYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJtYXhzaSIsIFRJTEVHWF9PUENfVjJNQVhTSSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDAgfSwgeyA2LCA3LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmMDAwMDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA0MTIwMDAwMFVMTCwKKyAgICAgIDB4MTk1ODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2Mm1pbnMiLCBUSUxFR1hfT1BDX1YyTUlOUywgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyMDgwMDAwVUxMLAorICAgICAgMHgyOGE4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYybWluc2kiLCBUSUxFR1hfT1BDX1YyTUlOU0ksIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAwIH0sIHsgNiwgNywgMSB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZjAwMDAwVUxMLAorICAgICAgMHhmZmY4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNDEzMDAwMDBVTEwsCisgICAgICAweDE5NjAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJtbnoiLCBUSUxFR1hfT1BDX1YyTU5aLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTIwYzAwMDBVTEwsCisgICAgICAweDI4YWEwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJtdWxmc2MiLCBUSUxFR1hfT1BDX1YyTVVMRlNDLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyMTAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJtdWxzIiwgVElMRUdYX09QQ19WMk1VTFMsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTIxNDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2Mm11bHRzIiwgVElMRUdYX09QQ19WMk1VTFRTLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyMTgwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJteiIsIFRJTEVHWF9PUENfVjJNWiwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyMWMwMDAwVUxMLAorICAgICAgMHgyOGFjMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYycGFja2giLCBUSUxFR1hfT1BDX1YyUEFDS0gsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MjIwMDAwMFVMTCwKKyAgICAgIDB4MjhhZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MnBhY2tsIiwgVElMRUdYX09QQ19WMlBBQ0tMLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTIyNDAwMDBVTEwsCisgICAgICAweDI4YjAwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJwYWNrdWMiLCBUSUxFR1hfT1BDX1YyUEFDS1VDLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTIyODAwMDBVTEwsCisgICAgICAweDI4YjIwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJzYWRhcyIsIFRJTEVHWF9PUENfVjJTQURBUywgMHgxLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDIzLCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTIyYzAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MnNhZGF1IiwgVElMRUdYX09QQ19WMlNBREFVLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgMjMsIDksIDE2IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MjMwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYyc2FkcyIsIFRJTEVHWF9PUENfVjJTQURTLCAweDEsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyMzQwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjJzYWR1IiwgVElMRUdYX09QQ19WMlNBRFUsIDB4MSwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTIzODAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MnNobCIsIFRJTEVHWF9PUENfVjJTSEwsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MjQwMDAwMFVMTCwKKyAgICAgIDB4MjhiNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MnNobGkiLCBUSUxFR1hfT1BDX1YyU0hMSSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDI5IH0sIHsgNiwgNywgMzAgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDYwMjgwMDAwVUxMLAorICAgICAgMHgzMDE0MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYyc2hsc2MiLCBUSUxFR1hfT1BDX1YyU0hMU0MsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MjNjMDAwMFVMTCwKKyAgICAgIDB4MjhiNDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MnNocnMiLCBUSUxFR1hfT1BDX1YyU0hSUywgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyNDQwMDAwVUxMLAorICAgICAgMHgyOGI4MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYyc2hyc2kiLCBUSUxFR1hfT1BDX1YyU0hSU0ksIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAyOSB9LCB7IDYsIDcsIDMwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA2MDJjMDAwMFVMTCwKKyAgICAgIDB4MzAxNjAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MnNocnUiLCBUSUxFR1hfT1BDX1YyU0hSVSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyNDgwMDAwVUxMLAorICAgICAgMHgyOGJhMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInYyc2hydWkiLCBUSUxFR1hfT1BDX1YyU0hSVUksIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAyOSB9LCB7IDYsIDcsIDMwIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA2MDMwMDAwMFVMTCwKKyAgICAgIDB4MzAxODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MnN1YiIsIFRJTEVHWF9PUENfVjJTVUIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MjUwMDAwMFVMTCwKKyAgICAgIDB4MjhiZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2MnN1YnNjIiwgVElMRUdYX09QQ19WMlNVQlNDLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTI0YzAwMDBVTEwsCisgICAgICAweDI4YmMwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjRhZGQiLCBUSUxFR1hfT1BDX1Y0QURELCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTI1ODAwMDBVTEwsCisgICAgICAweDI4YzIwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjRhZGRzYyIsIFRJTEVHWF9PUENfVjRBRERTQywgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyNTQwMDAwVUxMLAorICAgICAgMHgyOGMwMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInY0aW50X2giLCBUSUxFR1hfT1BDX1Y0SU5UX0gsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MjVjMDAwMFVMTCwKKyAgICAgIDB4MjhjNDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2NGludF9sIiwgVElMRUdYX09QQ19WNElOVF9MLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTI2MDAwMDBVTEwsCisgICAgICAweDI4YzYwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjRwYWNrc2MiLCBUSUxFR1hfT1BDX1Y0UEFDS1NDLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTI2NDAwMDBVTEwsCisgICAgICAweDI4YzgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjRzaGwiLCBUSUxFR1hfT1BDX1Y0U0hMLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTI2YzAwMDBVTEwsCisgICAgICAweDI4Y2MwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjRzaGxzYyIsIFRJTEVHWF9PUENfVjRTSExTQywgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDE2IH0sIHsgNiwgNywgMTcgfSwgeyAwLCB9LCB7IDAsIH0sIHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsKKyAgICAgIDB4YzAwMDAwMDA3ZmZjMDAwMFVMTCwKKyAgICAgIDB4ZmZmZTAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyNjgwMDAwVUxMLAorICAgICAgMHgyOGNhMDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMCisgICAgfQorI2VuZGlmCisgIH0sCisgIHsgInY0c2hycyIsIFRJTEVHWF9PUENfVjRTSFJTLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTI3MDAwMDBVTEwsCisgICAgICAweDI4Y2UwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAidjRzaHJ1IiwgVElMRUdYX09QQ19WNFNIUlUsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1Mjc0MDAwMFVMTCwKKyAgICAgIDB4MjhkMDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2NHN1YiIsIFRJTEVHWF9PUENfVjRTVUIsIDB4MywgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmYzAwMDBVTEwsCisgICAgICAweGZmZmUwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA1MjdjMDAwMFVMTCwKKyAgICAgIDB4MjhkNDAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7ICJ2NHN1YnNjIiwgVElMRUdYX09QQ19WNFNVQlNDLCAweDMsIDMsIFRSRUdfWkVSTywgMSwKKyAgICB7IHsgOCwgOSwgMTYgfSwgeyA2LCA3LCAxNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMCisgICAgfSwKKyAgICB7CisgICAgICAweDAwMDAwMDAwNTI3ODAwMDBVTEwsCisgICAgICAweDI4ZDIwMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAid2g2NCIsIFRJTEVHWF9PUENfV0g2NCwgMHgyLCAxLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDAsIH0sIHsgNyB9LCB7IDAsIH0sIHsgMCwgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMFVMTCwKKyAgICAgIDB4ZmZmZmY4MDAwMDAwMDAwMFVMTCwKKyAgICAgIDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgLTFVTEwsCisgICAgICAweDI4NmIzMDAwMDAwMDAwMDBVTEwsCisgICAgICAtMVVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAieG9yIiwgVElMRUdYX09QQ19YT1IsIDB4ZiwgMywgVFJFR19aRVJPLCAxLAorICAgIHsgeyA4LCA5LCAxNiB9LCB7IDYsIDcsIDE3IH0sIHsgMTAsIDExLCAxOCB9LCB7IDEyLCAxMywgMTkgfSwgeyAwLCB9IH0sCisjaWZuZGVmIERJU0FTTV9PTkxZCisgICAgeworICAgICAgMHhjMDAwMDAwMDdmZmMwMDAwVUxMLAorICAgICAgMHhmZmZlMDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDc4MGMwMDAwVUxMLAorICAgICAgMHgzYzA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMFVMTAorICAgIH0sCisgICAgeworICAgICAgMHgwMDAwMDAwMDUyODAwMDAwVUxMLAorICAgICAgMHgyOGQ2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgMHgwMDAwMDAwMDUwMGMwMDAwVUxMLAorICAgICAgMHgyYzA2MDAwMDAwMDAwMDAwVUxMLAorICAgICAgLTFVTEwKKyAgICB9CisjZW5kaWYKKyAgfSwKKyAgeyAieG9yaSIsIFRJTEVHWF9PUENfWE9SSSwgMHgzLCAzLCBUUkVHX1pFUk8sIDEsCisgICAgeyB7IDgsIDksIDAgfSwgeyA2LCA3LCAxIH0sIHsgMCwgfSwgeyAwLCB9LCB7IDAsIH0gfSwKKyNpZm5kZWYgRElTQVNNX09OTFkKKyAgICB7CisgICAgICAweGMwMDAwMDAwN2ZmMDAwMDBVTEwsCisgICAgICAweGZmZjgwMDAwMDAwMDAwMDBVTEwsCisgICAgICAwVUxMLAorICAgICAgMFVMTCwKKyAgICAgIDBVTEwKKyAgICB9LAorICAgIHsKKyAgICAgIDB4MDAwMDAwMDA0MTQwMDAwMFVMTCwKKyAgICAgIDB4MTk2ODAwMDAwMDAwMDAwMFVMTCwKKyAgICAgIC0xVUxMLAorICAgICAgLTFVTEwsCisgICAgICAtMVVMTAorICAgIH0KKyNlbmRpZgorICB9LAorICB7IE5VTEwsIFRJTEVHWF9PUENfTk9ORSwgMCwgMCwgVFJFR19aRVJPLCAwLCB7IHsgMCwgfSB9LAorI2lmbmRlZiBESVNBU01fT05MWQorICAgIHsgMCwgfSwgeyAwLCB9CisjZW5kaWYKKyAgfQorfTsKKworI2RlZmluZSBCSVRGSUVMRChzdGFydCwgc2l6ZSkgKChzdGFydCkgfCAoKCgxIDw8IChzaXplKSkgLSAxKSA8PCA2KSkKKyNkZWZpbmUgQ0hJTEQoYXJyYXlfaW5kZXgpIChUSUxFR1hfT1BDX05PTkUgKyAoYXJyYXlfaW5kZXgpKQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVjb2RlX1gwX2ZzbVs5MzZdID0KK3sKKyAgQklURklFTEQoMjIsIDkpIC8qIGluZGV4IDAgKi8sCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwKKyAgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwKKyAgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwKKyAgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwKKyAgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwKKyAgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwKKyAgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwKKyAgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwKKyAgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwKKyAgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwKKyAgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgQ0hJTEQoNTEzKSwgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLAorICBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwKKyAgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLAorICBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwKKyAgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLAorICBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwKKyAgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLAorICBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwKKyAgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLAorICBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwKKyAgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19CRkVYVFMsCisgIFRJTEVHWF9PUENfQkZFWFRTLCBUSUxFR1hfT1BDX0JGRVhUUywgVElMRUdYX09QQ19CRkVYVFMsIFRJTEVHWF9PUENfQkZFWFRVLAorICBUSUxFR1hfT1BDX0JGRVhUVSwgVElMRUdYX09QQ19CRkVYVFUsIFRJTEVHWF9PUENfQkZFWFRVLCBUSUxFR1hfT1BDX0JGSU5TLAorICBUSUxFR1hfT1BDX0JGSU5TLCBUSUxFR1hfT1BDX0JGSU5TLCBUSUxFR1hfT1BDX0JGSU5TLCBUSUxFR1hfT1BDX01NLAorICBUSUxFR1hfT1BDX01NLCBUSUxFR1hfT1BDX01NLCBUSUxFR1hfT1BDX01NLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgQ0hJTEQoNTI4KSwgQ0hJTEQoNTc4KSwKKyAgQ0hJTEQoNTgzKSwgQ0hJTEQoNTg4KSwgQ0hJTEQoNTkzKSwgQ0hJTEQoNTk4KSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBDSElMRCg2MDMpLCBDSElMRCg2MjApLCBDSElMRCg2MzcpLCBDSElMRCg2NTQpLCBDSElMRCg2NzEpLAorICBDSElMRCg3MDMpLCBDSElMRCg3OTcpLCBDSElMRCg4MTQpLCBDSElMRCg4MzEpLCBDSElMRCg4NDgpLCBDSElMRCg4NjUpLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgQ0hJTEQoODg5KSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwKKyAgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwKKyAgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwKKyAgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwKKyAgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwKKyAgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwKKyAgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwKKyAgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwKKyAgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwKKyAgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwKKyAgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwgQ0hJTEQoOTA2KSwKKyAgQklURklFTEQoNiwgMikgLyogaW5kZXggNTEzICovLAorICBUSUxFR1hfT1BDX0FERExJLCBUSUxFR1hfT1BDX0FERExJLCBUSUxFR1hfT1BDX0FERExJLCBDSElMRCg1MTgpLAorICBCSVRGSUVMRCg4LCAyKSAvKiBpbmRleCA1MTggKi8sCisgIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfQURETEksIENISUxEKDUyMyksCisgIEJJVEZJRUxEKDEwLCAyKSAvKiBpbmRleCA1MjMgKi8sCisgIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfTU9WRUxJLAorICBCSVRGSUVMRCgyMCwgMikgLyogaW5kZXggNTI4ICovLAorICBUSUxFR1hfT1BDX05PTkUsIENISUxEKDUzMyksIFRJTEVHWF9PUENfQUREWEksIENISUxEKDU0OCksCisgIEJJVEZJRUxEKDYsIDIpIC8qIGluZGV4IDUzMyAqLywKKyAgVElMRUdYX09QQ19BRERJLCBUSUxFR1hfT1BDX0FEREksIFRJTEVHWF9PUENfQURESSwgQ0hJTEQoNTM4KSwKKyAgQklURklFTEQoOCwgMikgLyogaW5kZXggNTM4ICovLAorICBUSUxFR1hfT1BDX0FEREksIFRJTEVHWF9PUENfQURESSwgVElMRUdYX09QQ19BRERJLCBDSElMRCg1NDMpLAorICBCSVRGSUVMRCgxMCwgMikgLyogaW5kZXggNTQzICovLAorICBUSUxFR1hfT1BDX0FEREksIFRJTEVHWF9PUENfQURESSwgVElMRUdYX09QQ19BRERJLCBUSUxFR1hfT1BDX01PVkVJLAorICBCSVRGSUVMRCgwLCAyKSAvKiBpbmRleCA1NDggKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDU1MyksCisgIEJJVEZJRUxEKDIsIDIpIC8qIGluZGV4IDU1MyAqLywKKyAgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIFRJTEVHWF9PUENfQU5ESSwgQ0hJTEQoNTU4KSwKKyAgQklURklFTEQoNCwgMikgLyogaW5kZXggNTU4ICovLAorICBUSUxFR1hfT1BDX0FOREksIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBDSElMRCg1NjMpLAorICBCSVRGSUVMRCg2LCAyKSAvKiBpbmRleCA1NjMgKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDU2OCksCisgIEJJVEZJRUxEKDgsIDIpIC8qIGluZGV4IDU2OCAqLywKKyAgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIFRJTEVHWF9PUENfQU5ESSwgQ0hJTEQoNTczKSwKKyAgQklURklFTEQoMTAsIDIpIC8qIGluZGV4IDU3MyAqLywKKyAgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19JTkZPLAorICBCSVRGSUVMRCgyMCwgMikgLyogaW5kZXggNTc4ICovLAorICBUSUxFR1hfT1BDX0NNUEVRSSwgVElMRUdYX09QQ19DTVBMVFNJLCBUSUxFR1hfT1BDX0NNUExUVUksIFRJTEVHWF9PUENfT1JJLAorICBCSVRGSUVMRCgyMCwgMikgLyogaW5kZXggNTgzICovLAorICBUSUxFR1hfT1BDX1YxQURESSwgVElMRUdYX09QQ19WMUNNUEVRSSwgVElMRUdYX09QQ19WMUNNUExUU0ksCisgIFRJTEVHWF9PUENfVjFDTVBMVFVJLAorICBCSVRGSUVMRCgyMCwgMikgLyogaW5kZXggNTg4ICovLAorICBUSUxFR1hfT1BDX1YxTUFYVUksIFRJTEVHWF9PUENfVjFNSU5VSSwgVElMRUdYX09QQ19WMkFEREksCisgIFRJTEVHWF9PUENfVjJDTVBFUUksCisgIEJJVEZJRUxEKDIwLCAyKSAvKiBpbmRleCA1OTMgKi8sCisgIFRJTEVHWF9PUENfVjJDTVBMVFNJLCBUSUxFR1hfT1BDX1YyQ01QTFRVSSwgVElMRUdYX09QQ19WMk1BWFNJLAorICBUSUxFR1hfT1BDX1YyTUlOU0ksCisgIEJJVEZJRUxEKDIwLCAyKSAvKiBpbmRleCA1OTggKi8sCisgIFRJTEVHWF9PUENfWE9SSSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoMTgsIDQpIC8qIGluZGV4IDYwMyAqLywKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX0FERFhTQywgVElMRUdYX09QQ19BRERYLCBUSUxFR1hfT1BDX0FERCwKKyAgVElMRUdYX09QQ19BTkQsIFRJTEVHWF9PUENfQ01PVkVRWiwgVElMRUdYX09QQ19DTU9WTkVaLCBUSUxFR1hfT1BDX0NNUEVRLAorICBUSUxFR1hfT1BDX0NNUExFUywgVElMRUdYX09QQ19DTVBMRVUsIFRJTEVHWF9PUENfQ01QTFRTLCBUSUxFR1hfT1BDX0NNUExUVSwKKyAgVElMRUdYX09QQ19DTVBORSwgVElMRUdYX09QQ19DTVVMQUYsIFRJTEVHWF9PUENfQ01VTEEsIFRJTEVHWF9PUENfQ01VTEZSLAorICBCSVRGSUVMRCgxOCwgNCkgLyogaW5kZXggNjIwICovLAorICBUSUxFR1hfT1BDX0NNVUxGLCBUSUxFR1hfT1BDX0NNVUxIUiwgVElMRUdYX09QQ19DTVVMSCwgVElMRUdYX09QQ19DTVVMLAorICBUSUxFR1hfT1BDX0NSQzMyXzMyLCBUSUxFR1hfT1BDX0NSQzMyXzgsIFRJTEVHWF9PUENfREJMQUxJR04yLAorICBUSUxFR1hfT1BDX0RCTEFMSUdONCwgVElMRUdYX09QQ19EQkxBTElHTjYsIFRJTEVHWF9PUENfREJMQUxJR04sCisgIFRJTEVHWF9PUENfRkRPVUJMRV9BRERTVUIsIFRJTEVHWF9PUENfRkRPVUJMRV9BRERfRkxBR1MsCisgIFRJTEVHWF9PUENfRkRPVUJMRV9NVUxfRkxBR1MsIFRJTEVHWF9PUENfRkRPVUJMRV9QQUNLMSwKKyAgVElMRUdYX09QQ19GRE9VQkxFX1BBQ0syLCBUSUxFR1hfT1BDX0ZET1VCTEVfU1VCX0ZMQUdTLAorICBCSVRGSUVMRCgxOCwgNCkgLyogaW5kZXggNjM3ICovLAorICBUSUxFR1hfT1BDX0ZET1VCTEVfVU5QQUNLX01BWCwgVElMRUdYX09QQ19GRE9VQkxFX1VOUEFDS19NSU4sCisgIFRJTEVHWF9PUENfRlNJTkdMRV9BREQxLCBUSUxFR1hfT1BDX0ZTSU5HTEVfQUREU1VCMiwKKyAgVElMRUdYX09QQ19GU0lOR0xFX01VTDEsIFRJTEVHWF9PUENfRlNJTkdMRV9NVUwyLCBUSUxFR1hfT1BDX0ZTSU5HTEVfUEFDSzIsCisgIFRJTEVHWF9PUENfRlNJTkdMRV9TVUIxLCBUSUxFR1hfT1BDX01OWiwgVElMRUdYX09QQ19NVUxBWCwKKyAgVElMRUdYX09QQ19NVUxBX0hTX0hTLCBUSUxFR1hfT1BDX01VTEFfSFNfSFUsIFRJTEVHWF9PUENfTVVMQV9IU19MUywKKyAgVElMRUdYX09QQ19NVUxBX0hTX0xVLCBUSUxFR1hfT1BDX01VTEFfSFVfSFUsIFRJTEVHWF9PUENfTVVMQV9IVV9MUywKKyAgQklURklFTEQoMTgsIDQpIC8qIGluZGV4IDY1NCAqLywKKyAgVElMRUdYX09QQ19NVUxBX0hVX0xVLCBUSUxFR1hfT1BDX01VTEFfTFNfTFMsIFRJTEVHWF9PUENfTVVMQV9MU19MVSwKKyAgVElMRUdYX09QQ19NVUxBX0xVX0xVLCBUSUxFR1hfT1BDX01VTFgsIFRJTEVHWF9PUENfTVVMX0hTX0hTLAorICBUSUxFR1hfT1BDX01VTF9IU19IVSwgVElMRUdYX09QQ19NVUxfSFNfTFMsIFRJTEVHWF9PUENfTVVMX0hTX0xVLAorICBUSUxFR1hfT1BDX01VTF9IVV9IVSwgVElMRUdYX09QQ19NVUxfSFVfTFMsIFRJTEVHWF9PUENfTVVMX0hVX0xVLAorICBUSUxFR1hfT1BDX01VTF9MU19MUywgVElMRUdYX09QQ19NVUxfTFNfTFUsIFRJTEVHWF9PUENfTVVMX0xVX0xVLAorICBUSUxFR1hfT1BDX01aLAorICBCSVRGSUVMRCgxOCwgNCkgLyogaW5kZXggNjcxICovLAorICBUSUxFR1hfT1BDX05PUiwgQ0hJTEQoNjg4KSwgVElMRUdYX09QQ19ST1RMLCBUSUxFR1hfT1BDX1NITDFBRERYLAorICBUSUxFR1hfT1BDX1NITDFBREQsIFRJTEVHWF9PUENfU0hMMkFERFgsIFRJTEVHWF9PUENfU0hMMkFERCwKKyAgVElMRUdYX09QQ19TSEwzQUREWCwgVElMRUdYX09QQ19TSEwzQURELCBUSUxFR1hfT1BDX1NITFgsIFRJTEVHWF9PUENfU0hMLAorICBUSUxFR1hfT1BDX1NIUlMsIFRJTEVHWF9PUENfU0hSVVgsIFRJTEVHWF9PUENfU0hSVSwgVElMRUdYX09QQ19TSFVGRkxFQllURVMsCisgIFRJTEVHWF9PUENfU1VCWFNDLAorICBCSVRGSUVMRCgxMiwgMikgLyogaW5kZXggNjg4ICovLAorICBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBDSElMRCg2OTMpLAorICBCSVRGSUVMRCgxNCwgMikgLyogaW5kZXggNjkzICovLAorICBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBDSElMRCg2OTgpLAorICBCSVRGSUVMRCgxNiwgMikgLyogaW5kZXggNjk4ICovLAorICBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX01PVkUsCisgIEJJVEZJRUxEKDE4LCA0KSAvKiBpbmRleCA3MDMgKi8sCisgIFRJTEVHWF9PUENfU1VCWCwgVElMRUdYX09QQ19TVUIsIENISUxEKDcyMCksIFRJTEVHWF9PUENfVjFBRERVQywKKyAgVElMRUdYX09QQ19WMUFERCwgVElMRUdYX09QQ19WMUFESUZGVSwgVElMRUdYX09QQ19WMUFWR1UsCisgIFRJTEVHWF9PUENfVjFDTVBFUSwgVElMRUdYX09QQ19WMUNNUExFUywgVElMRUdYX09QQ19WMUNNUExFVSwKKyAgVElMRUdYX09QQ19WMUNNUExUUywgVElMRUdYX09QQ19WMUNNUExUVSwgVElMRUdYX09QQ19WMUNNUE5FLAorICBUSUxFR1hfT1BDX1YxRERPVFBVU0EsIFRJTEVHWF9PUENfVjFERE9UUFVTLCBUSUxFR1hfT1BDX1YxRE9UUEEsCisgIEJJVEZJRUxEKDEyLCA0KSAvKiBpbmRleCA3MjAgKi8sCisgIFRJTEVHWF9PUENfTk9ORSwgQ0hJTEQoNzM3KSwgQ0hJTEQoNzQyKSwgQ0hJTEQoNzQ3KSwgQ0hJTEQoNzUyKSwgQ0hJTEQoNzU3KSwKKyAgQ0hJTEQoNzYyKSwgQ0hJTEQoNzY3KSwgQ0hJTEQoNzcyKSwgQ0hJTEQoNzc3KSwgQ0hJTEQoNzgyKSwgQ0hJTEQoNzg3KSwKKyAgQ0hJTEQoNzkyKSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoMTYsIDIpIC8qIGluZGV4IDczNyAqLywKKyAgVElMRUdYX09QQ19DTFosIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIEJJVEZJRUxEKDE2LCAyKSAvKiBpbmRleCA3NDIgKi8sCisgIFRJTEVHWF9PUENfQ1RaLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMikgLyogaW5kZXggNzQ3ICovLAorICBUSUxFR1hfT1BDX0ZOT1AsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIEJJVEZJRUxEKDE2LCAyKSAvKiBpbmRleCA3NTIgKi8sCisgIFRJTEVHWF9PUENfRlNJTkdMRV9QQUNLMSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoMTYsIDIpIC8qIGluZGV4IDc1NyAqLywKKyAgVElMRUdYX09QQ19OT1AsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIEJJVEZJRUxEKDE2LCAyKSAvKiBpbmRleCA3NjIgKi8sCisgIFRJTEVHWF9PUENfUENOVCwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoMTYsIDIpIC8qIGluZGV4IDc2NyAqLywKKyAgVElMRUdYX09QQ19SRVZCSVRTLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMikgLyogaW5kZXggNzcyICovLAorICBUSUxFR1hfT1BDX1JFVkJZVEVTLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMikgLyogaW5kZXggNzc3ICovLAorICBUSUxFR1hfT1BDX1RCTElEWEIwLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMikgLyogaW5kZXggNzgyICovLAorICBUSUxFR1hfT1BDX1RCTElEWEIxLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMikgLyogaW5kZXggNzg3ICovLAorICBUSUxFR1hfT1BDX1RCTElEWEIyLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBCSVRGSUVMRCgxNiwgMikgLyogaW5kZXggNzkyICovLAorICBUSUxFR1hfT1BDX1RCTElEWEIzLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBCSVRGSUVMRCgxOCwgNCkgLyogaW5kZXggNzk3ICovLAorICBUSUxFR1hfT1BDX1YxRE9UUFVTQSwgVElMRUdYX09QQ19WMURPVFBVUywgVElMRUdYX09QQ19WMURPVFAsCisgIFRJTEVHWF9PUENfVjFJTlRfSCwgVElMRUdYX09QQ19WMUlOVF9MLCBUSUxFR1hfT1BDX1YxTUFYVSwKKyAgVElMRUdYX09QQ19WMU1JTlUsIFRJTEVHWF9PUENfVjFNTlosIFRJTEVHWF9PUENfVjFNVUxUVSwgVElMRUdYX09QQ19WMU1VTFVTLAorICBUSUxFR1hfT1BDX1YxTVVMVSwgVElMRUdYX09QQ19WMU1aLCBUSUxFR1hfT1BDX1YxU0FEQVUsIFRJTEVHWF9PUENfVjFTQURVLAorICBUSUxFR1hfT1BDX1YxU0hMLCBUSUxFR1hfT1BDX1YxU0hSUywKKyAgQklURklFTEQoMTgsIDQpIC8qIGluZGV4IDgxNCAqLywKKyAgVElMRUdYX09QQ19WMVNIUlUsIFRJTEVHWF9PUENfVjFTVUJVQywgVElMRUdYX09QQ19WMVNVQiwgVElMRUdYX09QQ19WMkFERFNDLAorICBUSUxFR1hfT1BDX1YyQURELCBUSUxFR1hfT1BDX1YyQURJRkZTLCBUSUxFR1hfT1BDX1YyQVZHUywKKyAgVElMRUdYX09QQ19WMkNNUEVRLCBUSUxFR1hfT1BDX1YyQ01QTEVTLCBUSUxFR1hfT1BDX1YyQ01QTEVVLAorICBUSUxFR1hfT1BDX1YyQ01QTFRTLCBUSUxFR1hfT1BDX1YyQ01QTFRVLCBUSUxFR1hfT1BDX1YyQ01QTkUsCisgIFRJTEVHWF9PUENfVjJET1RQQSwgVElMRUdYX09QQ19WMkRPVFAsIFRJTEVHWF9PUENfVjJJTlRfSCwKKyAgQklURklFTEQoMTgsIDQpIC8qIGluZGV4IDgzMSAqLywKKyAgVElMRUdYX09QQ19WMklOVF9MLCBUSUxFR1hfT1BDX1YyTUFYUywgVElMRUdYX09QQ19WMk1JTlMsIFRJTEVHWF9PUENfVjJNTlosCisgIFRJTEVHWF9PUENfVjJNVUxGU0MsIFRJTEVHWF9PUENfVjJNVUxTLCBUSUxFR1hfT1BDX1YyTVVMVFMsIFRJTEVHWF9PUENfVjJNWiwKKyAgVElMRUdYX09QQ19WMlBBQ0tILCBUSUxFR1hfT1BDX1YyUEFDS0wsIFRJTEVHWF9PUENfVjJQQUNLVUMsCisgIFRJTEVHWF9PUENfVjJTQURBUywgVElMRUdYX09QQ19WMlNBREFVLCBUSUxFR1hfT1BDX1YyU0FEUywKKyAgVElMRUdYX09QQ19WMlNBRFUsIFRJTEVHWF9PUENfVjJTSExTQywKKyAgQklURklFTEQoMTgsIDQpIC8qIGluZGV4IDg0OCAqLywKKyAgVElMRUdYX09QQ19WMlNITCwgVElMRUdYX09QQ19WMlNIUlMsIFRJTEVHWF9PUENfVjJTSFJVLCBUSUxFR1hfT1BDX1YyU1VCU0MsCisgIFRJTEVHWF9PUENfVjJTVUIsIFRJTEVHWF9PUENfVjRBRERTQywgVElMRUdYX09QQ19WNEFERCwgVElMRUdYX09QQ19WNElOVF9ILAorICBUSUxFR1hfT1BDX1Y0SU5UX0wsIFRJTEVHWF9PUENfVjRQQUNLU0MsIFRJTEVHWF9PUENfVjRTSExTQywKKyAgVElMRUdYX09QQ19WNFNITCwgVElMRUdYX09QQ19WNFNIUlMsIFRJTEVHWF9PUENfVjRTSFJVLCBUSUxFR1hfT1BDX1Y0U1VCU0MsCisgIFRJTEVHWF9PUENfVjRTVUIsCisgIEJJVEZJRUxEKDE4LCAzKSAvKiBpbmRleCA4NjUgKi8sCisgIENISUxEKDg3NCksIENISUxEKDg3NyksIENISUxEKDg4MCksIENISUxEKDg4MyksIENISUxEKDg4NiksIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIEJJVEZJRUxEKDIxLCAxKSAvKiBpbmRleCA4NzQgKi8sCisgIFRJTEVHWF9PUENfWE9SLCBUSUxFR1hfT1BDX05PTkUsCisgIEJJVEZJRUxEKDIxLCAxKSAvKiBpbmRleCA4NzcgKi8sCisgIFRJTEVHWF9PUENfVjFERE9UUFVBLCBUSUxFR1hfT1BDX05PTkUsCisgIEJJVEZJRUxEKDIxLCAxKSAvKiBpbmRleCA4ODAgKi8sCisgIFRJTEVHWF9PUENfVjFERE9UUFUsIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoMjEsIDEpIC8qIGluZGV4IDg4MyAqLywKKyAgVElMRUdYX09QQ19WMURPVFBVQSwgVElMRUdYX09QQ19OT05FLAorICBCSVRGSUVMRCgyMSwgMSkgLyogaW5kZXggODg2ICovLAorICBUSUxFR1hfT1BDX1YxRE9UUFUsIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoMTgsIDQpIC8qIGluZGV4IDg4OSAqLywKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX1JPVExJLCBUSUxFR1hfT1BDX1NITEksIFRJTEVHWF9PUENfU0hMWEksCisgIFRJTEVHWF9PUENfU0hSU0ksIFRJTEVHWF9PUENfU0hSVUksIFRJTEVHWF9PUENfU0hSVVhJLCBUSUxFR1hfT1BDX1YxU0hMSSwKKyAgVElMRUdYX09QQ19WMVNIUlNJLCBUSUxFR1hfT1BDX1YxU0hSVUksIFRJTEVHWF9PUENfVjJTSExJLAorICBUSUxFR1hfT1BDX1YyU0hSU0ksIFRJTEVHWF9PUENfVjJTSFJVSSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoMCwgMikgLyogaW5kZXggOTA2ICovLAorICBUSUxFR1hfT1BDX1NITDE2SU5TTEksIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwgVElMRUdYX09QQ19TSEwxNklOU0xJLAorICBDSElMRCg5MTEpLAorICBCSVRGSUVMRCgyLCAyKSAvKiBpbmRleCA5MTEgKi8sCisgIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwgVElMRUdYX09QQ19TSEwxNklOU0xJLCBUSUxFR1hfT1BDX1NITDE2SU5TTEksCisgIENISUxEKDkxNiksCisgIEJJVEZJRUxEKDQsIDIpIC8qIGluZGV4IDkxNiAqLywKKyAgVElMRUdYX09QQ19TSEwxNklOU0xJLCBUSUxFR1hfT1BDX1NITDE2SU5TTEksIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwKKyAgQ0hJTEQoOTIxKSwKKyAgQklURklFTEQoNiwgMikgLyogaW5kZXggOTIxICovLAorICBUSUxFR1hfT1BDX1NITDE2SU5TTEksIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwgVElMRUdYX09QQ19TSEwxNklOU0xJLAorICBDSElMRCg5MjYpLAorICBCSVRGSUVMRCg4LCAyKSAvKiBpbmRleCA5MjYgKi8sCisgIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwgVElMRUdYX09QQ19TSEwxNklOU0xJLCBUSUxFR1hfT1BDX1NITDE2SU5TTEksCisgIENISUxEKDkzMSksCisgIEJJVEZJRUxEKDEwLCAyKSAvKiBpbmRleCA5MzEgKi8sCisgIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwgVElMRUdYX09QQ19TSEwxNklOU0xJLCBUSUxFR1hfT1BDX1NITDE2SU5TTEksCisgIFRJTEVHWF9PUENfSU5GT0wsCit9OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVjb2RlX1gxX2ZzbVsxMjY2XSA9Cit7CisgIEJJVEZJRUxEKDUzLCA5KSAvKiBpbmRleCAwICovLAorICBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLAorICBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLAorICBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLAorICBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLAorICBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLAorICBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLAorICBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLAorICBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLAorICBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLAorICBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLAorICBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBDSElMRCg1MTMpLCBUSUxFR1hfT1BDX0FERFhMSSwKKyAgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLAorICBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwKKyAgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLAorICBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwKKyAgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLAorICBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwKKyAgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLAorICBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwKKyAgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksCisgIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLAorICBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwKKyAgVElMRUdYX09QQ19BRERYTEksIFRJTEVHWF9PUENfQUREWExJLCBUSUxFR1hfT1BDX0FERFhMSSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfQkVRWlQsCisgIFRJTEVHWF9PUENfQkVRWlQsIFRJTEVHWF9PUENfQkVRWiwgVElMRUdYX09QQ19CRVFaLCBUSUxFR1hfT1BDX0JHRVpULAorICBUSUxFR1hfT1BDX0JHRVpULCBUSUxFR1hfT1BDX0JHRVosIFRJTEVHWF9PUENfQkdFWiwgVElMRUdYX09QQ19CR1RaVCwKKyAgVElMRUdYX09QQ19CR1RaVCwgVElMRUdYX09QQ19CR1RaLCBUSUxFR1hfT1BDX0JHVFosIFRJTEVHWF9PUENfQkxCQ1QsCisgIFRJTEVHWF9PUENfQkxCQ1QsIFRJTEVHWF9PUENfQkxCQywgVElMRUdYX09QQ19CTEJDLCBUSUxFR1hfT1BDX0JMQlNULAorICBUSUxFR1hfT1BDX0JMQlNULCBUSUxFR1hfT1BDX0JMQlMsIFRJTEVHWF9PUENfQkxCUywgVElMRUdYX09QQ19CTEVaVCwKKyAgVElMRUdYX09QQ19CTEVaVCwgVElMRUdYX09QQ19CTEVaLCBUSUxFR1hfT1BDX0JMRVosIFRJTEVHWF9PUENfQkxUWlQsCisgIFRJTEVHWF9PUENfQkxUWlQsIFRJTEVHWF9PUENfQkxUWiwgVElMRUdYX09QQ19CTFRaLCBUSUxFR1hfT1BDX0JORVpULAorICBUSUxFR1hfT1BDX0JORVpULCBUSUxFR1hfT1BDX0JORVosIFRJTEVHWF9PUENfQk5FWiwgQ0hJTEQoNTI4KSwgQ0hJTEQoNTc4KSwKKyAgQ0hJTEQoNTk4KSwgQ0hJTEQoNzAzKSwgQ0hJTEQoNzIzKSwgQ0hJTEQoNzI4KSwgQ0hJTEQoNzUzKSwgQ0hJTEQoNzU4KSwKKyAgQ0hJTEQoNzYzKSwgQ0hJTEQoNzY4KSwgQ0hJTEQoNzczKSwgQ0hJTEQoNzc4KSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX0pBTCwKKyAgVElMRUdYX09QQ19KQUwsIFRJTEVHWF9PUENfSkFMLCBUSUxFR1hfT1BDX0pBTCwgVElMRUdYX09QQ19KQUwsCisgIFRJTEVHWF9PUENfSkFMLCBUSUxFR1hfT1BDX0pBTCwgVElMRUdYX09QQ19KQUwsIFRJTEVHWF9PUENfSkFMLAorICBUSUxFR1hfT1BDX0pBTCwgVElMRUdYX09QQ19KQUwsIFRJTEVHWF9PUENfSkFMLCBUSUxFR1hfT1BDX0pBTCwKKyAgVElMRUdYX09QQ19KQUwsIFRJTEVHWF9PUENfSkFMLCBUSUxFR1hfT1BDX0pBTCwgVElMRUdYX09QQ19KQUwsCisgIFRJTEVHWF9PUENfSkFMLCBUSUxFR1hfT1BDX0pBTCwgVElMRUdYX09QQ19KQUwsIFRJTEVHWF9PUENfSkFMLAorICBUSUxFR1hfT1BDX0pBTCwgVElMRUdYX09QQ19KQUwsIFRJTEVHWF9PUENfSkFMLCBUSUxFR1hfT1BDX0pBTCwKKyAgVElMRUdYX09QQ19KQUwsIFRJTEVHWF9PUENfSkFMLCBUSUxFR1hfT1BDX0pBTCwgVElMRUdYX09QQ19KQUwsCisgIFRJTEVHWF9PUENfSkFMLCBUSUxFR1hfT1BDX0pBTCwgVElMRUdYX09QQ19KQUwsIFRJTEVHWF9PUENfSiwgVElMRUdYX09QQ19KLAorICBUSUxFR1hfT1BDX0osIFRJTEVHWF9PUENfSiwgVElMRUdYX09QQ19KLCBUSUxFR1hfT1BDX0osIFRJTEVHWF9PUENfSiwKKyAgVElMRUdYX09QQ19KLCBUSUxFR1hfT1BDX0osIFRJTEVHWF9PUENfSiwgVElMRUdYX09QQ19KLCBUSUxFR1hfT1BDX0osCisgIFRJTEVHWF9PUENfSiwgVElMRUdYX09QQ19KLCBUSUxFR1hfT1BDX0osIFRJTEVHWF9PUENfSiwgVElMRUdYX09QQ19KLAorICBUSUxFR1hfT1BDX0osIFRJTEVHWF9PUENfSiwgVElMRUdYX09QQ19KLCBUSUxFR1hfT1BDX0osIFRJTEVHWF9PUENfSiwKKyAgVElMRUdYX09QQ19KLCBUSUxFR1hfT1BDX0osIFRJTEVHWF9PUENfSiwgVElMRUdYX09QQ19KLCBUSUxFR1hfT1BDX0osCisgIFRJTEVHWF9PUENfSiwgVElMRUdYX09QQ19KLCBUSUxFR1hfT1BDX0osIFRJTEVHWF9PUENfSiwgVElMRUdYX09QQ19KLAorICBDSElMRCg3ODMpLCBDSElMRCg4MDApLCBDSElMRCg4MzIpLCBDSElMRCg4NDkpLCBDSElMRCgxMTY4KSwgQ0hJTEQoMTE4NSksCisgIENISUxEKDEyMDIpLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBDSElMRCgxMjE5KSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwKKyAgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLAorICBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksCisgIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwKKyAgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLAorICBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksCisgIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwKKyAgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLAorICBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksCisgIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwKKyAgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLAorICBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksCisgIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwgQ0hJTEQoMTIzNiksIENISUxEKDEyMzYpLCBDSElMRCgxMjM2KSwKKyAgQ0hJTEQoMTIzNiksCisgIEJJVEZJRUxEKDM3LCAyKSAvKiBpbmRleCA1MTMgKi8sCisgIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfQURETEksIENISUxEKDUxOCksCisgIEJJVEZJRUxEKDM5LCAyKSAvKiBpbmRleCA1MTggKi8sCisgIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfQURETEksIENISUxEKDUyMyksCisgIEJJVEZJRUxEKDQxLCAyKSAvKiBpbmRleCA1MjMgKi8sCisgIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfQURETEksIFRJTEVHWF9PUENfTU9WRUxJLAorICBCSVRGSUVMRCg1MSwgMikgLyogaW5kZXggNTI4ICovLAorICBUSUxFR1hfT1BDX05PTkUsIENISUxEKDUzMyksIFRJTEVHWF9PUENfQUREWEksIENISUxEKDU0OCksCisgIEJJVEZJRUxEKDM3LCAyKSAvKiBpbmRleCA1MzMgKi8sCisgIFRJTEVHWF9PUENfQURESSwgVElMRUdYX09QQ19BRERJLCBUSUxFR1hfT1BDX0FEREksIENISUxEKDUzOCksCisgIEJJVEZJRUxEKDM5LCAyKSAvKiBpbmRleCA1MzggKi8sCisgIFRJTEVHWF9PUENfQURESSwgVElMRUdYX09QQ19BRERJLCBUSUxFR1hfT1BDX0FEREksIENISUxEKDU0MyksCisgIEJJVEZJRUxEKDQxLCAyKSAvKiBpbmRleCA1NDMgKi8sCisgIFRJTEVHWF9PUENfQURESSwgVElMRUdYX09QQ19BRERJLCBUSUxFR1hfT1BDX0FEREksIFRJTEVHWF9PUENfTU9WRUksCisgIEJJVEZJRUxEKDMxLCAyKSAvKiBpbmRleCA1NDggKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDU1MyksCisgIEJJVEZJRUxEKDMzLCAyKSAvKiBpbmRleCA1NTMgKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDU1OCksCisgIEJJVEZJRUxEKDM1LCAyKSAvKiBpbmRleCA1NTggKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDU2MyksCisgIEJJVEZJRUxEKDM3LCAyKSAvKiBpbmRleCA1NjMgKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDU2OCksCisgIEJJVEZJRUxEKDM5LCAyKSAvKiBpbmRleCA1NjggKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDU3MyksCisgIEJJVEZJRUxEKDQxLCAyKSAvKiBpbmRleCA1NzMgKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIFRJTEVHWF9PUENfSU5GTywKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDU3OCAqLywKKyAgVElMRUdYX09QQ19DTVBFUUksIFRJTEVHWF9PUENfQ01QTFRTSSwgVElMRUdYX09QQ19DTVBMVFVJLCBDSElMRCg1ODMpLAorICBCSVRGSUVMRCgzMSwgMikgLyogaW5kZXggNTgzICovLAorICBUSUxFR1hfT1BDX0xEMVNfQURELCBUSUxFR1hfT1BDX0xEMVNfQURELCBUSUxFR1hfT1BDX0xEMVNfQURELCBDSElMRCg1ODgpLAorICBCSVRGSUVMRCgzMywgMikgLyogaW5kZXggNTg4ICovLAorICBUSUxFR1hfT1BDX0xEMVNfQURELCBUSUxFR1hfT1BDX0xEMVNfQURELCBUSUxFR1hfT1BDX0xEMVNfQURELCBDSElMRCg1OTMpLAorICBCSVRGSUVMRCgzNSwgMikgLyogaW5kZXggNTkzICovLAorICBUSUxFR1hfT1BDX0xEMVNfQURELCBUSUxFR1hfT1BDX0xEMVNfQURELCBUSUxFR1hfT1BDX0xEMVNfQURELAorICBUSUxFR1hfT1BDX1BSRUZFVENIX0FERF9MMV9GQVVMVCwKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDU5OCAqLywKKyAgQ0hJTEQoNjAzKSwgQ0hJTEQoNjE4KSwgQ0hJTEQoNjMzKSwgQ0hJTEQoNjQ4KSwKKyAgQklURklFTEQoMzEsIDIpIC8qIGluZGV4IDYwMyAqLywKKyAgVElMRUdYX09QQ19MRDFVX0FERCwgVElMRUdYX09QQ19MRDFVX0FERCwgVElMRUdYX09QQ19MRDFVX0FERCwgQ0hJTEQoNjA4KSwKKyAgQklURklFTEQoMzMsIDIpIC8qIGluZGV4IDYwOCAqLywKKyAgVElMRUdYX09QQ19MRDFVX0FERCwgVElMRUdYX09QQ19MRDFVX0FERCwgVElMRUdYX09QQ19MRDFVX0FERCwgQ0hJTEQoNjEzKSwKKyAgQklURklFTEQoMzUsIDIpIC8qIGluZGV4IDYxMyAqLywKKyAgVElMRUdYX09QQ19MRDFVX0FERCwgVElMRUdYX09QQ19MRDFVX0FERCwgVElMRUdYX09QQ19MRDFVX0FERCwKKyAgVElMRUdYX09QQ19QUkVGRVRDSF9BRERfTDEsCisgIEJJVEZJRUxEKDMxLCAyKSAvKiBpbmRleCA2MTggKi8sCisgIFRJTEVHWF9PUENfTEQyU19BREQsIFRJTEVHWF9PUENfTEQyU19BREQsIFRJTEVHWF9PUENfTEQyU19BREQsIENISUxEKDYyMyksCisgIEJJVEZJRUxEKDMzLCAyKSAvKiBpbmRleCA2MjMgKi8sCisgIFRJTEVHWF9PUENfTEQyU19BREQsIFRJTEVHWF9PUENfTEQyU19BREQsIFRJTEVHWF9PUENfTEQyU19BREQsIENISUxEKDYyOCksCisgIEJJVEZJRUxEKDM1LCAyKSAvKiBpbmRleCA2MjggKi8sCisgIFRJTEVHWF9PUENfTEQyU19BREQsIFRJTEVHWF9PUENfTEQyU19BREQsIFRJTEVHWF9PUENfTEQyU19BREQsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfQUREX0wyX0ZBVUxULAorICBCSVRGSUVMRCgzMSwgMikgLyogaW5kZXggNjMzICovLAorICBUSUxFR1hfT1BDX0xEMlVfQURELCBUSUxFR1hfT1BDX0xEMlVfQURELCBUSUxFR1hfT1BDX0xEMlVfQURELCBDSElMRCg2MzgpLAorICBCSVRGSUVMRCgzMywgMikgLyogaW5kZXggNjM4ICovLAorICBUSUxFR1hfT1BDX0xEMlVfQURELCBUSUxFR1hfT1BDX0xEMlVfQURELCBUSUxFR1hfT1BDX0xEMlVfQURELCBDSElMRCg2NDMpLAorICBCSVRGSUVMRCgzNSwgMikgLyogaW5kZXggNjQzICovLAorICBUSUxFR1hfT1BDX0xEMlVfQURELCBUSUxFR1hfT1BDX0xEMlVfQURELCBUSUxFR1hfT1BDX0xEMlVfQURELAorICBUSUxFR1hfT1BDX1BSRUZFVENIX0FERF9MMiwKKyAgQklURklFTEQoMzEsIDIpIC8qIGluZGV4IDY0OCAqLywKKyAgQ0hJTEQoNjUzKSwgQ0hJTEQoNjUzKSwgQ0hJTEQoNjUzKSwgQ0hJTEQoNjczKSwKKyAgQklURklFTEQoNDMsIDIpIC8qIGluZGV4IDY1MyAqLywKKyAgQ0hJTEQoNjU4KSwgVElMRUdYX09QQ19MRDRTX0FERCwgVElMRUdYX09QQ19MRDRTX0FERCwgVElMRUdYX09QQ19MRDRTX0FERCwKKyAgQklURklFTEQoNDUsIDIpIC8qIGluZGV4IDY1OCAqLywKKyAgQ0hJTEQoNjYzKSwgVElMRUdYX09QQ19MRDRTX0FERCwgVElMRUdYX09QQ19MRDRTX0FERCwgVElMRUdYX09QQ19MRDRTX0FERCwKKyAgQklURklFTEQoNDcsIDIpIC8qIGluZGV4IDY2MyAqLywKKyAgQ0hJTEQoNjY4KSwgVElMRUdYX09QQ19MRDRTX0FERCwgVElMRUdYX09QQ19MRDRTX0FERCwgVElMRUdYX09QQ19MRDRTX0FERCwKKyAgQklURklFTEQoNDksIDIpIC8qIGluZGV4IDY2OCAqLywKKyAgVElMRUdYX09QQ19MRDRTX1RMUywgVElMRUdYX09QQ19MRDRTX0FERCwgVElMRUdYX09QQ19MRDRTX0FERCwKKyAgVElMRUdYX09QQ19MRDRTX0FERCwKKyAgQklURklFTEQoMzMsIDIpIC8qIGluZGV4IDY3MyAqLywKKyAgQ0hJTEQoNjUzKSwgQ0hJTEQoNjUzKSwgQ0hJTEQoNjUzKSwgQ0hJTEQoNjc4KSwKKyAgQklURklFTEQoMzUsIDIpIC8qIGluZGV4IDY3OCAqLywKKyAgQ0hJTEQoNjUzKSwgQ0hJTEQoNjUzKSwgQ0hJTEQoNjUzKSwgQ0hJTEQoNjgzKSwKKyAgQklURklFTEQoNDMsIDIpIC8qIGluZGV4IDY4MyAqLywKKyAgQ0hJTEQoNjg4KSwgVElMRUdYX09QQ19QUkVGRVRDSF9BRERfTDNfRkFVTFQsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfQUREX0wzX0ZBVUxULCBUSUxFR1hfT1BDX1BSRUZFVENIX0FERF9MM19GQVVMVCwKKyAgQklURklFTEQoNDUsIDIpIC8qIGluZGV4IDY4OCAqLywKKyAgQ0hJTEQoNjkzKSwgVElMRUdYX09QQ19QUkVGRVRDSF9BRERfTDNfRkFVTFQsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfQUREX0wzX0ZBVUxULCBUSUxFR1hfT1BDX1BSRUZFVENIX0FERF9MM19GQVVMVCwKKyAgQklURklFTEQoNDcsIDIpIC8qIGluZGV4IDY5MyAqLywKKyAgQ0hJTEQoNjk4KSwgVElMRUdYX09QQ19QUkVGRVRDSF9BRERfTDNfRkFVTFQsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfQUREX0wzX0ZBVUxULCBUSUxFR1hfT1BDX1BSRUZFVENIX0FERF9MM19GQVVMVCwKKyAgQklURklFTEQoNDksIDIpIC8qIGluZGV4IDY5OCAqLywKKyAgVElMRUdYX09QQ19MRDRTX1RMUywgVElMRUdYX09QQ19QUkVGRVRDSF9BRERfTDNfRkFVTFQsCisgIFRJTEVHWF9PUENfUFJFRkVUQ0hfQUREX0wzX0ZBVUxULCBUSUxFR1hfT1BDX1BSRUZFVENIX0FERF9MM19GQVVMVCwKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDcwMyAqLywKKyAgQ0hJTEQoNzA4KSwgVElMRUdYX09QQ19MRE5UMVNfQURELCBUSUxFR1hfT1BDX0xETlQxVV9BREQsCisgIFRJTEVHWF9PUENfTEROVDJTX0FERCwKKyAgQklURklFTEQoMzEsIDIpIC8qIGluZGV4IDcwOCAqLywKKyAgVElMRUdYX09QQ19MRDRVX0FERCwgVElMRUdYX09QQ19MRDRVX0FERCwgVElMRUdYX09QQ19MRDRVX0FERCwgQ0hJTEQoNzEzKSwKKyAgQklURklFTEQoMzMsIDIpIC8qIGluZGV4IDcxMyAqLywKKyAgVElMRUdYX09QQ19MRDRVX0FERCwgVElMRUdYX09QQ19MRDRVX0FERCwgVElMRUdYX09QQ19MRDRVX0FERCwgQ0hJTEQoNzE4KSwKKyAgQklURklFTEQoMzUsIDIpIC8qIGluZGV4IDcxOCAqLywKKyAgVElMRUdYX09QQ19MRDRVX0FERCwgVElMRUdYX09QQ19MRDRVX0FERCwgVElMRUdYX09QQ19MRDRVX0FERCwKKyAgVElMRUdYX09QQ19QUkVGRVRDSF9BRERfTDMsCisgIEJJVEZJRUxEKDUxLCAyKSAvKiBpbmRleCA3MjMgKi8sCisgIFRJTEVHWF9PUENfTEROVDJVX0FERCwgVElMRUdYX09QQ19MRE5UNFNfQURELCBUSUxFR1hfT1BDX0xETlQ0VV9BREQsCisgIFRJTEVHWF9PUENfTEROVF9BREQsCisgIEJJVEZJRUxEKDUxLCAyKSAvKiBpbmRleCA3MjggKi8sCisgIENISUxEKDczMyksIFRJTEVHWF9PUENfTEROQV9BREQsIFRJTEVHWF9PUENfTUZTUFIsIFRJTEVHWF9PUENfTVRTUFIsCisgIEJJVEZJRUxEKDQzLCAyKSAvKiBpbmRleCA3MzMgKi8sCisgIENISUxEKDczOCksIFRJTEVHWF9PUENfTERfQURELCBUSUxFR1hfT1BDX0xEX0FERCwgVElMRUdYX09QQ19MRF9BREQsCisgIEJJVEZJRUxEKDQ1LCAyKSAvKiBpbmRleCA3MzggKi8sCisgIENISUxEKDc0MyksIFRJTEVHWF9PUENfTERfQURELCBUSUxFR1hfT1BDX0xEX0FERCwgVElMRUdYX09QQ19MRF9BREQsCisgIEJJVEZJRUxEKDQ3LCAyKSAvKiBpbmRleCA3NDMgKi8sCisgIENISUxEKDc0OCksIFRJTEVHWF9PUENfTERfQURELCBUSUxFR1hfT1BDX0xEX0FERCwgVElMRUdYX09QQ19MRF9BREQsCisgIEJJVEZJRUxEKDQ5LCAyKSAvKiBpbmRleCA3NDggKi8sCisgIFRJTEVHWF9PUENfTERfVExTLCBUSUxFR1hfT1BDX0xEX0FERCwgVElMRUdYX09QQ19MRF9BREQsIFRJTEVHWF9PUENfTERfQURELAorICBCSVRGSUVMRCg1MSwgMikgLyogaW5kZXggNzUzICovLAorICBUSUxFR1hfT1BDX09SSSwgVElMRUdYX09QQ19TVDFfQURELCBUSUxFR1hfT1BDX1NUMl9BREQsIFRJTEVHWF9PUENfU1Q0X0FERCwKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDc1OCAqLywKKyAgVElMRUdYX09QQ19TVE5UMV9BREQsIFRJTEVHWF9PUENfU1ROVDJfQURELCBUSUxFR1hfT1BDX1NUTlQ0X0FERCwKKyAgVElMRUdYX09QQ19TVE5UX0FERCwKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDc2MyAqLywKKyAgVElMRUdYX09QQ19TVF9BREQsIFRJTEVHWF9PUENfVjFBRERJLCBUSUxFR1hfT1BDX1YxQ01QRVFJLAorICBUSUxFR1hfT1BDX1YxQ01QTFRTSSwKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDc2OCAqLywKKyAgVElMRUdYX09QQ19WMUNNUExUVUksIFRJTEVHWF9PUENfVjFNQVhVSSwgVElMRUdYX09QQ19WMU1JTlVJLAorICBUSUxFR1hfT1BDX1YyQURESSwKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDc3MyAqLywKKyAgVElMRUdYX09QQ19WMkNNUEVRSSwgVElMRUdYX09QQ19WMkNNUExUU0ksIFRJTEVHWF9PUENfVjJDTVBMVFVJLAorICBUSUxFR1hfT1BDX1YyTUFYU0ksCisgIEJJVEZJRUxEKDUxLCAyKSAvKiBpbmRleCA3NzggKi8sCisgIFRJTEVHWF9PUENfVjJNSU5TSSwgVElMRUdYX09QQ19YT1JJLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoNDksIDQpIC8qIGluZGV4IDc4MyAqLywKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX0FERFhTQywgVElMRUdYX09QQ19BRERYLCBUSUxFR1hfT1BDX0FERCwKKyAgVElMRUdYX09QQ19BTkQsIFRJTEVHWF9PUENfQ01QRVEsIFRJTEVHWF9PUENfQ01QRVhDSDQsIFRJTEVHWF9PUENfQ01QRVhDSCwKKyAgVElMRUdYX09QQ19DTVBMRVMsIFRJTEVHWF9PUENfQ01QTEVVLCBUSUxFR1hfT1BDX0NNUExUUywgVElMRUdYX09QQ19DTVBMVFUsCisgIFRJTEVHWF9PUENfQ01QTkUsIFRJTEVHWF9PUENfREJMQUxJR04yLCBUSUxFR1hfT1BDX0RCTEFMSUdONCwKKyAgVElMRUdYX09QQ19EQkxBTElHTjYsCisgIEJJVEZJRUxEKDQ5LCA0KSAvKiBpbmRleCA4MDAgKi8sCisgIFRJTEVHWF9PUENfRVhDSDQsIFRJTEVHWF9PUENfRVhDSCwgVElMRUdYX09QQ19GRVRDSEFERDQsCisgIFRJTEVHWF9PUENfRkVUQ0hBRERHRVo0LCBUSUxFR1hfT1BDX0ZFVENIQURER0VaLCBUSUxFR1hfT1BDX0ZFVENIQURELAorICBUSUxFR1hfT1BDX0ZFVENIQU5ENCwgVElMRUdYX09QQ19GRVRDSEFORCwgVElMRUdYX09QQ19GRVRDSE9SNCwKKyAgVElMRUdYX09QQ19GRVRDSE9SLCBUSUxFR1hfT1BDX01OWiwgVElMRUdYX09QQ19NWiwgVElMRUdYX09QQ19OT1IsCisgIENISUxEKDgxNyksIFRJTEVHWF9PUENfUk9UTCwgVElMRUdYX09QQ19TSEwxQUREWCwKKyAgQklURklFTEQoNDMsIDIpIC8qIGluZGV4IDgxNyAqLywKKyAgVElMRUdYX09QQ19PUiwgVElMRUdYX09QQ19PUiwgVElMRUdYX09QQ19PUiwgQ0hJTEQoODIyKSwKKyAgQklURklFTEQoNDUsIDIpIC8qIGluZGV4IDgyMiAqLywKKyAgVElMRUdYX09QQ19PUiwgVElMRUdYX09QQ19PUiwgVElMRUdYX09QQ19PUiwgQ0hJTEQoODI3KSwKKyAgQklURklFTEQoNDcsIDIpIC8qIGluZGV4IDgyNyAqLywKKyAgVElMRUdYX09QQ19PUiwgVElMRUdYX09QQ19PUiwgVElMRUdYX09QQ19PUiwgVElMRUdYX09QQ19NT1ZFLAorICBCSVRGSUVMRCg0OSwgNCkgLyogaW5kZXggODMyICovLAorICBUSUxFR1hfT1BDX1NITDFBREQsIFRJTEVHWF9PUENfU0hMMkFERFgsIFRJTEVHWF9PUENfU0hMMkFERCwKKyAgVElMRUdYX09QQ19TSEwzQUREWCwgVElMRUdYX09QQ19TSEwzQURELCBUSUxFR1hfT1BDX1NITFgsIFRJTEVHWF9PUENfU0hMLAorICBUSUxFR1hfT1BDX1NIUlMsIFRJTEVHWF9PUENfU0hSVVgsIFRJTEVHWF9PUENfU0hSVSwgVElMRUdYX09QQ19TVDEsCisgIFRJTEVHWF9PUENfU1QyLCBUSUxFR1hfT1BDX1NUNCwgVElMRUdYX09QQ19TVE5UMSwgVElMRUdYX09QQ19TVE5UMiwKKyAgVElMRUdYX09QQ19TVE5UNCwKKyAgQklURklFTEQoNDYsIDcpIC8qIGluZGV4IDg0OSAqLywKKyAgVElMRUdYX09QQ19TVE5ULCBUSUxFR1hfT1BDX1NUTlQsIFRJTEVHWF9PUENfU1ROVCwgVElMRUdYX09QQ19TVE5ULAorICBUSUxFR1hfT1BDX1NUTlQsIFRJTEVHWF9PUENfU1ROVCwgVElMRUdYX09QQ19TVE5ULCBUSUxFR1hfT1BDX1NUTlQsCisgIFRJTEVHWF9PUENfU1QsIFRJTEVHWF9PUENfU1QsIFRJTEVHWF9PUENfU1QsIFRJTEVHWF9PUENfU1QsIFRJTEVHWF9PUENfU1QsCisgIFRJTEVHWF9PUENfU1QsIFRJTEVHWF9PUENfU1QsIFRJTEVHWF9PUENfU1QsIFRJTEVHWF9PUENfU1VCWFNDLAorICBUSUxFR1hfT1BDX1NVQlhTQywgVElMRUdYX09QQ19TVUJYU0MsIFRJTEVHWF9PUENfU1VCWFNDLCBUSUxFR1hfT1BDX1NVQlhTQywKKyAgVElMRUdYX09QQ19TVUJYU0MsIFRJTEVHWF9PUENfU1VCWFNDLCBUSUxFR1hfT1BDX1NVQlhTQywgVElMRUdYX09QQ19TVUJYLAorICBUSUxFR1hfT1BDX1NVQlgsIFRJTEVHWF9PUENfU1VCWCwgVElMRUdYX09QQ19TVUJYLCBUSUxFR1hfT1BDX1NVQlgsCisgIFRJTEVHWF9PUENfU1VCWCwgVElMRUdYX09QQ19TVUJYLCBUSUxFR1hfT1BDX1NVQlgsIFRJTEVHWF9PUENfU1VCLAorICBUSUxFR1hfT1BDX1NVQiwgVElMRUdYX09QQ19TVUIsIFRJTEVHWF9PUENfU1VCLCBUSUxFR1hfT1BDX1NVQiwKKyAgVElMRUdYX09QQ19TVUIsIFRJTEVHWF9PUENfU1VCLCBUSUxFR1hfT1BDX1NVQiwgQ0hJTEQoOTc4KSwgQ0hJTEQoOTg3KSwKKyAgQ0hJTEQoMTA2NiksIENISUxEKDExNTApLCBDSElMRCgxMTU5KSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19WMUFERFVDLCBUSUxFR1hfT1BDX1YxQUREVUMsIFRJTEVHWF9PUENfVjFBRERVQywKKyAgVElMRUdYX09QQ19WMUFERFVDLCBUSUxFR1hfT1BDX1YxQUREVUMsIFRJTEVHWF9PUENfVjFBRERVQywKKyAgVElMRUdYX09QQ19WMUFERFVDLCBUSUxFR1hfT1BDX1YxQUREVUMsIFRJTEVHWF9PUENfVjFBREQsIFRJTEVHWF9PUENfVjFBREQsCisgIFRJTEVHWF9PUENfVjFBREQsIFRJTEVHWF9PUENfVjFBREQsIFRJTEVHWF9PUENfVjFBREQsIFRJTEVHWF9PUENfVjFBREQsCisgIFRJTEVHWF9PUENfVjFBREQsIFRJTEVHWF9PUENfVjFBREQsIFRJTEVHWF9PUENfVjFDTVBFUSwgVElMRUdYX09QQ19WMUNNUEVRLAorICBUSUxFR1hfT1BDX1YxQ01QRVEsIFRJTEVHWF9PUENfVjFDTVBFUSwgVElMRUdYX09QQ19WMUNNUEVRLAorICBUSUxFR1hfT1BDX1YxQ01QRVEsIFRJTEVHWF9PUENfVjFDTVBFUSwgVElMRUdYX09QQ19WMUNNUEVRLAorICBUSUxFR1hfT1BDX1YxQ01QTEVTLCBUSUxFR1hfT1BDX1YxQ01QTEVTLCBUSUxFR1hfT1BDX1YxQ01QTEVTLAorICBUSUxFR1hfT1BDX1YxQ01QTEVTLCBUSUxFR1hfT1BDX1YxQ01QTEVTLCBUSUxFR1hfT1BDX1YxQ01QTEVTLAorICBUSUxFR1hfT1BDX1YxQ01QTEVTLCBUSUxFR1hfT1BDX1YxQ01QTEVTLCBUSUxFR1hfT1BDX1YxQ01QTEVVLAorICBUSUxFR1hfT1BDX1YxQ01QTEVVLCBUSUxFR1hfT1BDX1YxQ01QTEVVLCBUSUxFR1hfT1BDX1YxQ01QTEVVLAorICBUSUxFR1hfT1BDX1YxQ01QTEVVLCBUSUxFR1hfT1BDX1YxQ01QTEVVLCBUSUxFR1hfT1BDX1YxQ01QTEVVLAorICBUSUxFR1hfT1BDX1YxQ01QTEVVLCBUSUxFR1hfT1BDX1YxQ01QTFRTLCBUSUxFR1hfT1BDX1YxQ01QTFRTLAorICBUSUxFR1hfT1BDX1YxQ01QTFRTLCBUSUxFR1hfT1BDX1YxQ01QTFRTLCBUSUxFR1hfT1BDX1YxQ01QTFRTLAorICBUSUxFR1hfT1BDX1YxQ01QTFRTLCBUSUxFR1hfT1BDX1YxQ01QTFRTLCBUSUxFR1hfT1BDX1YxQ01QTFRTLAorICBUSUxFR1hfT1BDX1YxQ01QTFRVLCBUSUxFR1hfT1BDX1YxQ01QTFRVLCBUSUxFR1hfT1BDX1YxQ01QTFRVLAorICBUSUxFR1hfT1BDX1YxQ01QTFRVLCBUSUxFR1hfT1BDX1YxQ01QTFRVLCBUSUxFR1hfT1BDX1YxQ01QTFRVLAorICBUSUxFR1hfT1BDX1YxQ01QTFRVLCBUSUxFR1hfT1BDX1YxQ01QTFRVLCBUSUxFR1hfT1BDX1YxQ01QTkUsCisgIFRJTEVHWF9PUENfVjFDTVBORSwgVElMRUdYX09QQ19WMUNNUE5FLCBUSUxFR1hfT1BDX1YxQ01QTkUsCisgIFRJTEVHWF9PUENfVjFDTVBORSwgVElMRUdYX09QQ19WMUNNUE5FLCBUSUxFR1hfT1BDX1YxQ01QTkUsCisgIFRJTEVHWF9PUENfVjFDTVBORSwgVElMRUdYX09QQ19WMUlOVF9ILCBUSUxFR1hfT1BDX1YxSU5UX0gsCisgIFRJTEVHWF9PUENfVjFJTlRfSCwgVElMRUdYX09QQ19WMUlOVF9ILCBUSUxFR1hfT1BDX1YxSU5UX0gsCisgIFRJTEVHWF9PUENfVjFJTlRfSCwgVElMRUdYX09QQ19WMUlOVF9ILCBUSUxFR1hfT1BDX1YxSU5UX0gsCisgIFRJTEVHWF9PUENfVjFJTlRfTCwgVElMRUdYX09QQ19WMUlOVF9MLCBUSUxFR1hfT1BDX1YxSU5UX0wsCisgIFRJTEVHWF9PUENfVjFJTlRfTCwgVElMRUdYX09QQ19WMUlOVF9MLCBUSUxFR1hfT1BDX1YxSU5UX0wsCisgIFRJTEVHWF9PUENfVjFJTlRfTCwgVElMRUdYX09QQ19WMUlOVF9MLAorICBCSVRGSUVMRCg0MywgMykgLyogaW5kZXggOTc4ICovLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfRFJBSU4sIFRJTEVHWF9PUENfRFRMQlBSLCBUSUxFR1hfT1BDX0ZJTlYsCisgIFRJTEVHWF9PUENfRkxVU0hXQiwgVElMRUdYX09QQ19GTFVTSCwgVElMRUdYX09QQ19GTk9QLCBUSUxFR1hfT1BDX0lDT0gsCisgIEJJVEZJRUxEKDQzLCAzKSAvKiBpbmRleCA5ODcgKi8sCisgIENISUxEKDk5NiksIFRJTEVHWF9PUENfSU5WLCBUSUxFR1hfT1BDX0lSRVQsIFRJTEVHWF9PUENfSkFMUlAsCisgIFRJTEVHWF9PUENfSkFMUiwgVElMRUdYX09QQ19KUlAsIFRJTEVHWF9PUENfSlIsIENISUxEKDEwNTEpLAorICBCSVRGSUVMRCgzMSwgMikgLyogaW5kZXggOTk2ICovLAorICBDSElMRCgxMDAxKSwgQ0hJTEQoMTAyNiksIFRJTEVHWF9PUENfSUxMLCBUSUxFR1hfT1BDX0lMTCwKKyAgQklURklFTEQoMzMsIDIpIC8qIGluZGV4IDEwMDEgKi8sCisgIFRJTEVHWF9PUENfSUxMLCBUSUxFR1hfT1BDX0lMTCwgVElMRUdYX09QQ19JTEwsIENISUxEKDEwMDYpLAorICBCSVRGSUVMRCgzNSwgMikgLyogaW5kZXggMTAwNiAqLywKKyAgVElMRUdYX09QQ19JTEwsIENISUxEKDEwMTEpLCBUSUxFR1hfT1BDX0lMTCwgVElMRUdYX09QQ19JTEwsCisgIEJJVEZJRUxEKDM3LCAyKSAvKiBpbmRleCAxMDExICovLAorICBUSUxFR1hfT1BDX0lMTCwgQ0hJTEQoMTAxNiksIFRJTEVHWF9PUENfSUxMLCBUSUxFR1hfT1BDX0lMTCwKKyAgQklURklFTEQoMzksIDIpIC8qIGluZGV4IDEwMTYgKi8sCisgIFRJTEVHWF9PUENfSUxMLCBDSElMRCgxMDIxKSwgVElMRUdYX09QQ19JTEwsIFRJTEVHWF9PUENfSUxMLAorICBCSVRGSUVMRCg0MSwgMikgLyogaW5kZXggMTAyMSAqLywKKyAgVElMRUdYX09QQ19JTEwsIFRJTEVHWF9PUENfSUxMLCBUSUxFR1hfT1BDX0JQVCwgVElMRUdYX09QQ19JTEwsCisgIEJJVEZJRUxEKDMzLCAyKSAvKiBpbmRleCAxMDI2ICovLAorICBUSUxFR1hfT1BDX0lMTCwgVElMRUdYX09QQ19JTEwsIFRJTEVHWF9PUENfSUxMLCBDSElMRCgxMDMxKSwKKyAgQklURklFTEQoMzUsIDIpIC8qIGluZGV4IDEwMzEgKi8sCisgIFRJTEVHWF9PUENfSUxMLCBDSElMRCgxMDM2KSwgVElMRUdYX09QQ19JTEwsIFRJTEVHWF9PUENfSUxMLAorICBCSVRGSUVMRCgzNywgMikgLyogaW5kZXggMTAzNiAqLywKKyAgVElMRUdYX09QQ19JTEwsIENISUxEKDEwNDEpLCBUSUxFR1hfT1BDX0lMTCwgVElMRUdYX09QQ19JTEwsCisgIEJJVEZJRUxEKDM5LCAyKSAvKiBpbmRleCAxMDQxICovLAorICBUSUxFR1hfT1BDX0lMTCwgQ0hJTEQoMTA0NiksIFRJTEVHWF9PUENfSUxMLCBUSUxFR1hfT1BDX0lMTCwKKyAgQklURklFTEQoNDEsIDIpIC8qIGluZGV4IDEwNDYgKi8sCisgIFRJTEVHWF9PUENfSUxMLCBUSUxFR1hfT1BDX0lMTCwgVElMRUdYX09QQ19SQUlTRSwgVElMRUdYX09QQ19JTEwsCisgIEJJVEZJRUxEKDMxLCAyKSAvKiBpbmRleCAxMDUxICovLAorICBUSUxFR1hfT1BDX0xEMVMsIFRJTEVHWF9PUENfTEQxUywgVElMRUdYX09QQ19MRDFTLCBDSElMRCgxMDU2KSwKKyAgQklURklFTEQoMzMsIDIpIC8qIGluZGV4IDEwNTYgKi8sCisgIFRJTEVHWF9PUENfTEQxUywgVElMRUdYX09QQ19MRDFTLCBUSUxFR1hfT1BDX0xEMVMsIENISUxEKDEwNjEpLAorICBCSVRGSUVMRCgzNSwgMikgLyogaW5kZXggMTA2MSAqLywKKyAgVElMRUdYX09QQ19MRDFTLCBUSUxFR1hfT1BDX0xEMVMsIFRJTEVHWF9PUENfTEQxUywKKyAgVElMRUdYX09QQ19QUkVGRVRDSF9MMV9GQVVMVCwKKyAgQklURklFTEQoNDMsIDMpIC8qIGluZGV4IDEwNjYgKi8sCisgIENISUxEKDEwNzUpLCBDSElMRCgxMDkwKSwgQ0hJTEQoMTEwNSksIENISUxEKDExMjApLCBDSElMRCgxMTM1KSwKKyAgVElMRUdYX09QQ19MRE5BLCBUSUxFR1hfT1BDX0xETlQxUywgVElMRUdYX09QQ19MRE5UMVUsCisgIEJJVEZJRUxEKDMxLCAyKSAvKiBpbmRleCAxMDc1ICovLAorICBUSUxFR1hfT1BDX0xEMVUsIFRJTEVHWF9PUENfTEQxVSwgVElMRUdYX09QQ19MRDFVLCBDSElMRCgxMDgwKSwKKyAgQklURklFTEQoMzMsIDIpIC8qIGluZGV4IDEwODAgKi8sCisgIFRJTEVHWF9PUENfTEQxVSwgVElMRUdYX09QQ19MRDFVLCBUSUxFR1hfT1BDX0xEMVUsIENISUxEKDEwODUpLAorICBCSVRGSUVMRCgzNSwgMikgLyogaW5kZXggMTA4NSAqLywKKyAgVElMRUdYX09QQ19MRDFVLCBUSUxFR1hfT1BDX0xEMVUsIFRJTEVHWF9PUENfTEQxVSwgVElMRUdYX09QQ19QUkVGRVRDSCwKKyAgQklURklFTEQoMzEsIDIpIC8qIGluZGV4IDEwOTAgKi8sCisgIFRJTEVHWF9PUENfTEQyUywgVElMRUdYX09QQ19MRDJTLCBUSUxFR1hfT1BDX0xEMlMsIENISUxEKDEwOTUpLAorICBCSVRGSUVMRCgzMywgMikgLyogaW5kZXggMTA5NSAqLywKKyAgVElMRUdYX09QQ19MRDJTLCBUSUxFR1hfT1BDX0xEMlMsIFRJTEVHWF9PUENfTEQyUywgQ0hJTEQoMTEwMCksCisgIEJJVEZJRUxEKDM1LCAyKSAvKiBpbmRleCAxMTAwICovLAorICBUSUxFR1hfT1BDX0xEMlMsIFRJTEVHWF9PUENfTEQyUywgVElMRUdYX09QQ19MRDJTLAorICBUSUxFR1hfT1BDX1BSRUZFVENIX0wyX0ZBVUxULAorICBCSVRGSUVMRCgzMSwgMikgLyogaW5kZXggMTEwNSAqLywKKyAgVElMRUdYX09QQ19MRDJVLCBUSUxFR1hfT1BDX0xEMlUsIFRJTEVHWF9PUENfTEQyVSwgQ0hJTEQoMTExMCksCisgIEJJVEZJRUxEKDMzLCAyKSAvKiBpbmRleCAxMTEwICovLAorICBUSUxFR1hfT1BDX0xEMlUsIFRJTEVHWF9PUENfTEQyVSwgVElMRUdYX09QQ19MRDJVLCBDSElMRCgxMTE1KSwKKyAgQklURklFTEQoMzUsIDIpIC8qIGluZGV4IDExMTUgKi8sCisgIFRJTEVHWF9PUENfTEQyVSwgVElMRUdYX09QQ19MRDJVLCBUSUxFR1hfT1BDX0xEMlUsIFRJTEVHWF9PUENfUFJFRkVUQ0hfTDIsCisgIEJJVEZJRUxEKDMxLCAyKSAvKiBpbmRleCAxMTIwICovLAorICBUSUxFR1hfT1BDX0xENFMsIFRJTEVHWF9PUENfTEQ0UywgVElMRUdYX09QQ19MRDRTLCBDSElMRCgxMTI1KSwKKyAgQklURklFTEQoMzMsIDIpIC8qIGluZGV4IDExMjUgKi8sCisgIFRJTEVHWF9PUENfTEQ0UywgVElMRUdYX09QQ19MRDRTLCBUSUxFR1hfT1BDX0xENFMsIENISUxEKDExMzApLAorICBCSVRGSUVMRCgzNSwgMikgLyogaW5kZXggMTEzMCAqLywKKyAgVElMRUdYX09QQ19MRDRTLCBUSUxFR1hfT1BDX0xENFMsIFRJTEVHWF9PUENfTEQ0UywKKyAgVElMRUdYX09QQ19QUkVGRVRDSF9MM19GQVVMVCwKKyAgQklURklFTEQoMzEsIDIpIC8qIGluZGV4IDExMzUgKi8sCisgIFRJTEVHWF9PUENfTEQ0VSwgVElMRUdYX09QQ19MRDRVLCBUSUxFR1hfT1BDX0xENFUsIENISUxEKDExNDApLAorICBCSVRGSUVMRCgzMywgMikgLyogaW5kZXggMTE0MCAqLywKKyAgVElMRUdYX09QQ19MRDRVLCBUSUxFR1hfT1BDX0xENFUsIFRJTEVHWF9PUENfTEQ0VSwgQ0hJTEQoMTE0NSksCisgIEJJVEZJRUxEKDM1LCAyKSAvKiBpbmRleCAxMTQ1ICovLAorICBUSUxFR1hfT1BDX0xENFUsIFRJTEVHWF9PUENfTEQ0VSwgVElMRUdYX09QQ19MRDRVLCBUSUxFR1hfT1BDX1BSRUZFVENIX0wzLAorICBCSVRGSUVMRCg0MywgMykgLyogaW5kZXggMTE1MCAqLywKKyAgVElMRUdYX09QQ19MRE5UMlMsIFRJTEVHWF9PUENfTEROVDJVLCBUSUxFR1hfT1BDX0xETlQ0UywgVElMRUdYX09QQ19MRE5UNFUsCisgIFRJTEVHWF9PUENfTEROVCwgVElMRUdYX09QQ19MRCwgVElMRUdYX09QQ19MTkssIFRJTEVHWF9PUENfTUYsCisgIEJJVEZJRUxEKDQzLCAzKSAvKiBpbmRleCAxMTU5ICovLAorICBUSUxFR1hfT1BDX05BUCwgVElMRUdYX09QQ19OT1AsIFRJTEVHWF9PUENfU1dJTlQwLCBUSUxFR1hfT1BDX1NXSU5UMSwKKyAgVElMRUdYX09QQ19TV0lOVDIsIFRJTEVHWF9PUENfU1dJTlQzLCBUSUxFR1hfT1BDX1dINjQsIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoNDksIDQpIC8qIGluZGV4IDExNjggKi8sCisgIFRJTEVHWF9PUENfVjFNQVhVLCBUSUxFR1hfT1BDX1YxTUlOVSwgVElMRUdYX09QQ19WMU1OWiwgVElMRUdYX09QQ19WMU1aLAorICBUSUxFR1hfT1BDX1YxU0hMLCBUSUxFR1hfT1BDX1YxU0hSUywgVElMRUdYX09QQ19WMVNIUlUsIFRJTEVHWF9PUENfVjFTVUJVQywKKyAgVElMRUdYX09QQ19WMVNVQiwgVElMRUdYX09QQ19WMkFERFNDLCBUSUxFR1hfT1BDX1YyQURELCBUSUxFR1hfT1BDX1YyQ01QRVEsCisgIFRJTEVHWF9PUENfVjJDTVBMRVMsIFRJTEVHWF9PUENfVjJDTVBMRVUsIFRJTEVHWF9PUENfVjJDTVBMVFMsCisgIFRJTEVHWF9PUENfVjJDTVBMVFUsCisgIEJJVEZJRUxEKDQ5LCA0KSAvKiBpbmRleCAxMTg1ICovLAorICBUSUxFR1hfT1BDX1YyQ01QTkUsIFRJTEVHWF9PUENfVjJJTlRfSCwgVElMRUdYX09QQ19WMklOVF9MLAorICBUSUxFR1hfT1BDX1YyTUFYUywgVElMRUdYX09QQ19WMk1JTlMsIFRJTEVHWF9PUENfVjJNTlosIFRJTEVHWF9PUENfVjJNWiwKKyAgVElMRUdYX09QQ19WMlBBQ0tILCBUSUxFR1hfT1BDX1YyUEFDS0wsIFRJTEVHWF9PUENfVjJQQUNLVUMsCisgIFRJTEVHWF9PUENfVjJTSExTQywgVElMRUdYX09QQ19WMlNITCwgVElMRUdYX09QQ19WMlNIUlMsIFRJTEVHWF9PUENfVjJTSFJVLAorICBUSUxFR1hfT1BDX1YyU1VCU0MsIFRJTEVHWF9PUENfVjJTVUIsCisgIEJJVEZJRUxEKDQ5LCA0KSAvKiBpbmRleCAxMjAyICovLAorICBUSUxFR1hfT1BDX1Y0QUREU0MsIFRJTEVHWF9PUENfVjRBREQsIFRJTEVHWF9PUENfVjRJTlRfSCwKKyAgVElMRUdYX09QQ19WNElOVF9MLCBUSUxFR1hfT1BDX1Y0UEFDS1NDLCBUSUxFR1hfT1BDX1Y0U0hMU0MsCisgIFRJTEVHWF9PUENfVjRTSEwsIFRJTEVHWF9PUENfVjRTSFJTLCBUSUxFR1hfT1BDX1Y0U0hSVSwgVElMRUdYX09QQ19WNFNVQlNDLAorICBUSUxFR1hfT1BDX1Y0U1VCLCBUSUxFR1hfT1BDX1hPUiwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBCSVRGSUVMRCg0OSwgNCkgLyogaW5kZXggMTIxOSAqLywKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX1JPVExJLCBUSUxFR1hfT1BDX1NITEksIFRJTEVHWF9PUENfU0hMWEksCisgIFRJTEVHWF9PUENfU0hSU0ksIFRJTEVHWF9PUENfU0hSVUksIFRJTEVHWF9PUENfU0hSVVhJLCBUSUxFR1hfT1BDX1YxU0hMSSwKKyAgVElMRUdYX09QQ19WMVNIUlNJLCBUSUxFR1hfT1BDX1YxU0hSVUksIFRJTEVHWF9PUENfVjJTSExJLAorICBUSUxFR1hfT1BDX1YyU0hSU0ksIFRJTEVHWF9PUENfVjJTSFJVSSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoMzEsIDIpIC8qIGluZGV4IDEyMzYgKi8sCisgIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwgVElMRUdYX09QQ19TSEwxNklOU0xJLCBUSUxFR1hfT1BDX1NITDE2SU5TTEksCisgIENISUxEKDEyNDEpLAorICBCSVRGSUVMRCgzMywgMikgLyogaW5kZXggMTI0MSAqLywKKyAgVElMRUdYX09QQ19TSEwxNklOU0xJLCBUSUxFR1hfT1BDX1NITDE2SU5TTEksIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwKKyAgQ0hJTEQoMTI0NiksCisgIEJJVEZJRUxEKDM1LCAyKSAvKiBpbmRleCAxMjQ2ICovLAorICBUSUxFR1hfT1BDX1NITDE2SU5TTEksIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwgVElMRUdYX09QQ19TSEwxNklOU0xJLAorICBDSElMRCgxMjUxKSwKKyAgQklURklFTEQoMzcsIDIpIC8qIGluZGV4IDEyNTEgKi8sCisgIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwgVElMRUdYX09QQ19TSEwxNklOU0xJLCBUSUxFR1hfT1BDX1NITDE2SU5TTEksCisgIENISUxEKDEyNTYpLAorICBCSVRGSUVMRCgzOSwgMikgLyogaW5kZXggMTI1NiAqLywKKyAgVElMRUdYX09QQ19TSEwxNklOU0xJLCBUSUxFR1hfT1BDX1NITDE2SU5TTEksIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwKKyAgQ0hJTEQoMTI2MSksCisgIEJJVEZJRUxEKDQxLCAyKSAvKiBpbmRleCAxMjYxICovLAorICBUSUxFR1hfT1BDX1NITDE2SU5TTEksIFRJTEVHWF9PUENfU0hMMTZJTlNMSSwgVElMRUdYX09QQ19TSEwxNklOU0xJLAorICBUSUxFR1hfT1BDX0lORk9MLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRlY29kZV9ZMF9mc21bMTc4XSA9Cit7CisgIEJJVEZJRUxEKDI3LCA0KSAvKiBpbmRleCAwICovLAorICBDSElMRCgxNyksIFRJTEVHWF9PUENfQUREWEksIENISUxEKDMyKSwgVElMRUdYX09QQ19DTVBFUUksCisgIFRJTEVHWF9PUENfQ01QTFRTSSwgQ0hJTEQoNjIpLCBDSElMRCg2NyksIENISUxEKDExOCksIENISUxEKDEyMyksCisgIENISUxEKDEyOCksIENISUxEKDEzMyksIENISUxEKDE1MyksIENISUxEKDE1OCksIENISUxEKDE2MyksIENISUxEKDE2OCksCisgIENISUxEKDE3MyksCisgIEJJVEZJRUxEKDYsIDIpIC8qIGluZGV4IDE3ICovLAorICBUSUxFR1hfT1BDX0FEREksIFRJTEVHWF9PUENfQURESSwgVElMRUdYX09QQ19BRERJLCBDSElMRCgyMiksCisgIEJJVEZJRUxEKDgsIDIpIC8qIGluZGV4IDIyICovLAorICBUSUxFR1hfT1BDX0FEREksIFRJTEVHWF9PUENfQURESSwgVElMRUdYX09QQ19BRERJLCBDSElMRCgyNyksCisgIEJJVEZJRUxEKDEwLCAyKSAvKiBpbmRleCAyNyAqLywKKyAgVElMRUdYX09QQ19BRERJLCBUSUxFR1hfT1BDX0FEREksIFRJTEVHWF9PUENfQURESSwgVElMRUdYX09QQ19NT1ZFSSwKKyAgQklURklFTEQoMCwgMikgLyogaW5kZXggMzIgKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDM3KSwKKyAgQklURklFTEQoMiwgMikgLyogaW5kZXggMzcgKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDQyKSwKKyAgQklURklFTEQoNCwgMikgLyogaW5kZXggNDIgKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDQ3KSwKKyAgQklURklFTEQoNiwgMikgLyogaW5kZXggNDcgKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDUyKSwKKyAgQklURklFTEQoOCwgMikgLyogaW5kZXggNTIgKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDU3KSwKKyAgQklURklFTEQoMTAsIDIpIC8qIGluZGV4IDU3ICovLAorICBUSUxFR1hfT1BDX0FOREksIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0lORk8sCisgIEJJVEZJRUxEKDE4LCAyKSAvKiBpbmRleCA2MiAqLywKKyAgVElMRUdYX09QQ19BRERYLCBUSUxFR1hfT1BDX0FERCwgVElMRUdYX09QQ19TVUJYLCBUSUxFR1hfT1BDX1NVQiwKKyAgQklURklFTEQoMTUsIDUpIC8qIGluZGV4IDY3ICovLAorICBUSUxFR1hfT1BDX1NITDFBREQsIFRJTEVHWF9PUENfU0hMMUFERCwgVElMRUdYX09QQ19TSEwxQURELAorICBUSUxFR1hfT1BDX1NITDFBREQsIFRJTEVHWF9PUENfU0hMMUFERCwgVElMRUdYX09QQ19TSEwxQURELAorICBUSUxFR1hfT1BDX1NITDFBREQsIFRJTEVHWF9PUENfU0hMMUFERCwgVElMRUdYX09QQ19TSEwyQURELAorICBUSUxFR1hfT1BDX1NITDJBREQsIFRJTEVHWF9PUENfU0hMMkFERCwgVElMRUdYX09QQ19TSEwyQURELAorICBUSUxFR1hfT1BDX1NITDJBREQsIFRJTEVHWF9PUENfU0hMMkFERCwgVElMRUdYX09QQ19TSEwyQURELAorICBUSUxFR1hfT1BDX1NITDJBREQsIFRJTEVHWF9PUENfU0hMM0FERCwgVElMRUdYX09QQ19TSEwzQURELAorICBUSUxFR1hfT1BDX1NITDNBREQsIFRJTEVHWF9PUENfU0hMM0FERCwgVElMRUdYX09QQ19TSEwzQURELAorICBUSUxFR1hfT1BDX1NITDNBREQsIFRJTEVHWF9PUENfU0hMM0FERCwgVElMRUdYX09QQ19TSEwzQURELCBDSElMRCgxMDApLAorICBDSElMRCgxMDkpLCBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLAorICBCSVRGSUVMRCgxMiwgMykgLyogaW5kZXggMTAwICovLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfQ0xaLCBUSUxFR1hfT1BDX0NUWiwgVElMRUdYX09QQ19GTk9QLAorICBUSUxFR1hfT1BDX0ZTSU5HTEVfUEFDSzEsIFRJTEVHWF9PUENfTk9QLCBUSUxFR1hfT1BDX1BDTlQsCisgIFRJTEVHWF9PUENfUkVWQklUUywKKyAgQklURklFTEQoMTIsIDMpIC8qIGluZGV4IDEwOSAqLywKKyAgVElMRUdYX09QQ19SRVZCWVRFUywgVElMRUdYX09QQ19UQkxJRFhCMCwgVElMRUdYX09QQ19UQkxJRFhCMSwKKyAgVElMRUdYX09QQ19UQkxJRFhCMiwgVElMRUdYX09QQ19UQkxJRFhCMywgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoMTgsIDIpIC8qIGluZGV4IDExOCAqLywKKyAgVElMRUdYX09QQ19DTVBMRVMsIFRJTEVHWF9PUENfQ01QTEVVLCBUSUxFR1hfT1BDX0NNUExUUywgVElMRUdYX09QQ19DTVBMVFUsCisgIEJJVEZJRUxEKDE4LCAyKSAvKiBpbmRleCAxMjMgKi8sCisgIFRJTEVHWF9PUENfQ01QRVEsIFRJTEVHWF9PUENfQ01QTkUsIFRJTEVHWF9PUENfTVVMQVgsIFRJTEVHWF9PUENfTVVMWCwKKyAgQklURklFTEQoMTgsIDIpIC8qIGluZGV4IDEyOCAqLywKKyAgVElMRUdYX09QQ19DTU9WRVFaLCBUSUxFR1hfT1BDX0NNT1ZORVosIFRJTEVHWF9PUENfTU5aLCBUSUxFR1hfT1BDX01aLAorICBCSVRGSUVMRCgxOCwgMikgLyogaW5kZXggMTMzICovLAorICBUSUxFR1hfT1BDX0FORCwgVElMRUdYX09QQ19OT1IsIENISUxEKDEzOCksIFRJTEVHWF9PUENfWE9SLAorICBCSVRGSUVMRCgxMiwgMikgLyogaW5kZXggMTM4ICovLAorICBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBDSElMRCgxNDMpLAorICBCSVRGSUVMRCgxNCwgMikgLyogaW5kZXggMTQzICovLAorICBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBDSElMRCgxNDgpLAorICBCSVRGSUVMRCgxNiwgMikgLyogaW5kZXggMTQ4ICovLAorICBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX09SLCBUSUxFR1hfT1BDX01PVkUsCisgIEJJVEZJRUxEKDE4LCAyKSAvKiBpbmRleCAxNTMgKi8sCisgIFRJTEVHWF9PUENfUk9UTCwgVElMRUdYX09QQ19TSEwsIFRJTEVHWF9PUENfU0hSUywgVElMRUdYX09QQ19TSFJVLAorICBCSVRGSUVMRCgxOCwgMikgLyogaW5kZXggMTU4ICovLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfU0hMMUFERFgsIFRJTEVHWF9PUENfU0hMMkFERFgsCisgIFRJTEVHWF9PUENfU0hMM0FERFgsCisgIEJJVEZJRUxEKDE4LCAyKSAvKiBpbmRleCAxNjMgKi8sCisgIFRJTEVHWF9PUENfTVVMX0hTX0hTLCBUSUxFR1hfT1BDX01VTF9IVV9IVSwgVElMRUdYX09QQ19NVUxfTFNfTFMsCisgIFRJTEVHWF9PUENfTVVMX0xVX0xVLAorICBCSVRGSUVMRCgxOCwgMikgLyogaW5kZXggMTY4ICovLAorICBUSUxFR1hfT1BDX01VTEFfSFNfSFMsIFRJTEVHWF9PUENfTVVMQV9IVV9IVSwgVElMRUdYX09QQ19NVUxBX0xTX0xTLAorICBUSUxFR1hfT1BDX01VTEFfTFVfTFUsCisgIEJJVEZJRUxEKDE4LCAyKSAvKiBpbmRleCAxNzMgKi8sCisgIFRJTEVHWF9PUENfUk9UTEksIFRJTEVHWF9PUENfU0hMSSwgVElMRUdYX09QQ19TSFJTSSwgVElMRUdYX09QQ19TSFJVSSwKK307CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkZWNvZGVfWTFfZnNtWzE2N10gPQoreworICBCSVRGSUVMRCg1OCwgNCkgLyogaW5kZXggMCAqLywKKyAgVElMRUdYX09QQ19OT05FLCBDSElMRCgxNyksIFRJTEVHWF9PUENfQUREWEksIENISUxEKDMyKSwgVElMRUdYX09QQ19DTVBFUUksCisgIFRJTEVHWF9PUENfQ01QTFRTSSwgQ0hJTEQoNjIpLCBDSElMRCg2NyksIENISUxEKDExNyksIENISUxEKDEyMiksCisgIENISUxEKDEyNyksIENISUxEKDEzMiksIENISUxEKDE1MiksIENISUxEKDE1NyksIENISUxEKDE2MiksIFRJTEVHWF9PUENfTk9ORSwKKyAgQklURklFTEQoMzcsIDIpIC8qIGluZGV4IDE3ICovLAorICBUSUxFR1hfT1BDX0FEREksIFRJTEVHWF9PUENfQURESSwgVElMRUdYX09QQ19BRERJLCBDSElMRCgyMiksCisgIEJJVEZJRUxEKDM5LCAyKSAvKiBpbmRleCAyMiAqLywKKyAgVElMRUdYX09QQ19BRERJLCBUSUxFR1hfT1BDX0FEREksIFRJTEVHWF9PUENfQURESSwgQ0hJTEQoMjcpLAorICBCSVRGSUVMRCg0MSwgMikgLyogaW5kZXggMjcgKi8sCisgIFRJTEVHWF9PUENfQURESSwgVElMRUdYX09QQ19BRERJLCBUSUxFR1hfT1BDX0FEREksIFRJTEVHWF9PUENfTU9WRUksCisgIEJJVEZJRUxEKDMxLCAyKSAvKiBpbmRleCAzMiAqLywKKyAgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIFRJTEVHWF9PUENfQU5ESSwgQ0hJTEQoMzcpLAorICBCSVRGSUVMRCgzMywgMikgLyogaW5kZXggMzcgKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDQyKSwKKyAgQklURklFTEQoMzUsIDIpIC8qIGluZGV4IDQyICovLAorICBUSUxFR1hfT1BDX0FOREksIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBDSElMRCg0NyksCisgIEJJVEZJRUxEKDM3LCAyKSAvKiBpbmRleCA0NyAqLywKKyAgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIFRJTEVHWF9PUENfQU5ESSwgQ0hJTEQoNTIpLAorICBCSVRGSUVMRCgzOSwgMikgLyogaW5kZXggNTIgKi8sCisgIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0FOREksIENISUxEKDU3KSwKKyAgQklURklFTEQoNDEsIDIpIC8qIGluZGV4IDU3ICovLAorICBUSUxFR1hfT1BDX0FOREksIFRJTEVHWF9PUENfQU5ESSwgVElMRUdYX09QQ19BTkRJLCBUSUxFR1hfT1BDX0lORk8sCisgIEJJVEZJRUxEKDQ5LCAyKSAvKiBpbmRleCA2MiAqLywKKyAgVElMRUdYX09QQ19BRERYLCBUSUxFR1hfT1BDX0FERCwgVElMRUdYX09QQ19TVUJYLCBUSUxFR1hfT1BDX1NVQiwKKyAgQklURklFTEQoNDcsIDQpIC8qIGluZGV4IDY3ICovLAorICBUSUxFR1hfT1BDX1NITDFBREQsIFRJTEVHWF9PUENfU0hMMUFERCwgVElMRUdYX09QQ19TSEwxQURELAorICBUSUxFR1hfT1BDX1NITDFBREQsIFRJTEVHWF9PUENfU0hMMkFERCwgVElMRUdYX09QQ19TSEwyQURELAorICBUSUxFR1hfT1BDX1NITDJBREQsIFRJTEVHWF9PUENfU0hMMkFERCwgVElMRUdYX09QQ19TSEwzQURELAorICBUSUxFR1hfT1BDX1NITDNBREQsIFRJTEVHWF9PUENfU0hMM0FERCwgVElMRUdYX09QQ19TSEwzQURELCBDSElMRCg4NCksCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PTkUsCisgIEJJVEZJRUxEKDQzLCAzKSAvKiBpbmRleCA4NCAqLywKKyAgQ0hJTEQoOTMpLCBDSElMRCg5NiksIENISUxEKDk5KSwgQ0hJTEQoMTAyKSwgQ0hJTEQoMTA1KSwgQ0hJTEQoMTA4KSwKKyAgQ0hJTEQoMTExKSwgQ0hJTEQoMTE0KSwKKyAgQklURklFTEQoNDYsIDEpIC8qIGluZGV4IDkzICovLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfRk5PUCwKKyAgQklURklFTEQoNDYsIDEpIC8qIGluZGV4IDk2ICovLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfSUxMLAorICBCSVRGSUVMRCg0NiwgMSkgLyogaW5kZXggOTkgKi8sCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19KQUxSUCwKKyAgQklURklFTEQoNDYsIDEpIC8qIGluZGV4IDEwMiAqLywKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX0pBTFIsCisgIEJJVEZJRUxEKDQ2LCAxKSAvKiBpbmRleCAxMDUgKi8sCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19KUlAsCisgIEJJVEZJRUxEKDQ2LCAxKSAvKiBpbmRleCAxMDggKi8sCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19KUiwKKyAgQklURklFTEQoNDYsIDEpIC8qIGluZGV4IDExMSAqLywKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX0xOSywKKyAgQklURklFTEQoNDYsIDEpIC8qIGluZGV4IDExNCAqLywKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX05PUCwKKyAgQklURklFTEQoNDksIDIpIC8qIGluZGV4IDExNyAqLywKKyAgVElMRUdYX09QQ19DTVBMRVMsIFRJTEVHWF9PUENfQ01QTEVVLCBUSUxFR1hfT1BDX0NNUExUUywgVElMRUdYX09QQ19DTVBMVFUsCisgIEJJVEZJRUxEKDQ5LCAyKSAvKiBpbmRleCAxMjIgKi8sCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX0NNUEVRLCBUSUxFR1hfT1BDX0NNUE5FLAorICBCSVRGSUVMRCg0OSwgMikgLyogaW5kZXggMTI3ICovLAorICBUSUxFR1hfT1BDX05PTkUsIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19NTlosIFRJTEVHWF9PUENfTVosCisgIEJJVEZJRUxEKDQ5LCAyKSAvKiBpbmRleCAxMzIgKi8sCisgIFRJTEVHWF9PUENfQU5ELCBUSUxFR1hfT1BDX05PUiwgQ0hJTEQoMTM3KSwgVElMRUdYX09QQ19YT1IsCisgIEJJVEZJRUxEKDQzLCAyKSAvKiBpbmRleCAxMzcgKi8sCisgIFRJTEVHWF9PUENfT1IsIFRJTEVHWF9PUENfT1IsIFRJTEVHWF9PUENfT1IsIENISUxEKDE0MiksCisgIEJJVEZJRUxEKDQ1LCAyKSAvKiBpbmRleCAxNDIgKi8sCisgIFRJTEVHWF9PUENfT1IsIFRJTEVHWF9PUENfT1IsIFRJTEVHWF9PUENfT1IsIENISUxEKDE0NyksCisgIEJJVEZJRUxEKDQ3LCAyKSAvKiBpbmRleCAxNDcgKi8sCisgIFRJTEVHWF9PUENfT1IsIFRJTEVHWF9PUENfT1IsIFRJTEVHWF9PUENfT1IsIFRJTEVHWF9PUENfTU9WRSwKKyAgQklURklFTEQoNDksIDIpIC8qIGluZGV4IDE1MiAqLywKKyAgVElMRUdYX09QQ19ST1RMLCBUSUxFR1hfT1BDX1NITCwgVElMRUdYX09QQ19TSFJTLCBUSUxFR1hfT1BDX1NIUlUsCisgIEJJVEZJRUxEKDQ5LCAyKSAvKiBpbmRleCAxNTcgKi8sCisgIFRJTEVHWF9PUENfTk9ORSwgVElMRUdYX09QQ19TSEwxQUREWCwgVElMRUdYX09QQ19TSEwyQUREWCwKKyAgVElMRUdYX09QQ19TSEwzQUREWCwKKyAgQklURklFTEQoNDksIDIpIC8qIGluZGV4IDE2MiAqLywKKyAgVElMRUdYX09QQ19ST1RMSSwgVElMRUdYX09QQ19TSExJLCBUSUxFR1hfT1BDX1NIUlNJLCBUSUxFR1hfT1BDX1NIUlVJLAorfTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRlY29kZV9ZMl9mc21bMTE4XSA9Cit7CisgIEJJVEZJRUxEKDYyLCAyKSAvKiBpbmRleCAwICovLAorICBUSUxFR1hfT1BDX05PTkUsIENISUxEKDUpLCBDSElMRCg2NiksIENISUxEKDEwOSksCisgIEJJVEZJRUxEKDU1LCAzKSAvKiBpbmRleCA1ICovLAorICBDSElMRCgxNCksIENISUxEKDE0KSwgQ0hJTEQoMTQpLCBDSElMRCgxNyksIENISUxEKDQwKSwgQ0hJTEQoNDApLCBDSElMRCg0MCksCisgIENISUxEKDQzKSwKKyAgQklURklFTEQoMjYsIDEpIC8qIGluZGV4IDE0ICovLAorICBUSUxFR1hfT1BDX0xEMVMsIFRJTEVHWF9PUENfTEQxVSwKKyAgQklURklFTEQoMjYsIDEpIC8qIGluZGV4IDE3ICovLAorICBDSElMRCgyMCksIENISUxEKDMwKSwKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDIwICovLAorICBUSUxFR1hfT1BDX0xEMVMsIFRJTEVHWF9PUENfTEQxUywgVElMRUdYX09QQ19MRDFTLCBDSElMRCgyNSksCisgIEJJVEZJRUxEKDUzLCAyKSAvKiBpbmRleCAyNSAqLywKKyAgVElMRUdYX09QQ19MRDFTLCBUSUxFR1hfT1BDX0xEMVMsIFRJTEVHWF9PUENfTEQxUywKKyAgVElMRUdYX09QQ19QUkVGRVRDSF9MMV9GQVVMVCwKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDMwICovLAorICBUSUxFR1hfT1BDX0xEMVUsIFRJTEVHWF9PUENfTEQxVSwgVElMRUdYX09QQ19MRDFVLCBDSElMRCgzNSksCisgIEJJVEZJRUxEKDUzLCAyKSAvKiBpbmRleCAzNSAqLywKKyAgVElMRUdYX09QQ19MRDFVLCBUSUxFR1hfT1BDX0xEMVUsIFRJTEVHWF9PUENfTEQxVSwgVElMRUdYX09QQ19QUkVGRVRDSCwKKyAgQklURklFTEQoMjYsIDEpIC8qIGluZGV4IDQwICovLAorICBUSUxFR1hfT1BDX0xEMlMsIFRJTEVHWF9PUENfTEQyVSwKKyAgQklURklFTEQoMjYsIDEpIC8qIGluZGV4IDQzICovLAorICBDSElMRCg0NiksIENISUxEKDU2KSwKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDQ2ICovLAorICBUSUxFR1hfT1BDX0xEMlMsIFRJTEVHWF9PUENfTEQyUywgVElMRUdYX09QQ19MRDJTLCBDSElMRCg1MSksCisgIEJJVEZJRUxEKDUzLCAyKSAvKiBpbmRleCA1MSAqLywKKyAgVElMRUdYX09QQ19MRDJTLCBUSUxFR1hfT1BDX0xEMlMsIFRJTEVHWF9PUENfTEQyUywKKyAgVElMRUdYX09QQ19QUkVGRVRDSF9MMl9GQVVMVCwKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDU2ICovLAorICBUSUxFR1hfT1BDX0xEMlUsIFRJTEVHWF9PUENfTEQyVSwgVElMRUdYX09QQ19MRDJVLCBDSElMRCg2MSksCisgIEJJVEZJRUxEKDUzLCAyKSAvKiBpbmRleCA2MSAqLywKKyAgVElMRUdYX09QQ19MRDJVLCBUSUxFR1hfT1BDX0xEMlUsIFRJTEVHWF9PUENfTEQyVSwgVElMRUdYX09QQ19QUkVGRVRDSF9MMiwKKyAgQklURklFTEQoNTYsIDIpIC8qIGluZGV4IDY2ICovLAorICBDSElMRCg3MSksIENISUxEKDc0KSwgQ0hJTEQoOTApLCBDSElMRCg5MyksCisgIEJJVEZJRUxEKDI2LCAxKSAvKiBpbmRleCA3MSAqLywKKyAgVElMRUdYX09QQ19OT05FLCBUSUxFR1hfT1BDX0xENFMsCisgIEJJVEZJRUxEKDI2LCAxKSAvKiBpbmRleCA3NCAqLywKKyAgVElMRUdYX09QQ19OT05FLCBDSElMRCg3NyksCisgIEJJVEZJRUxEKDUxLCAyKSAvKiBpbmRleCA3NyAqLywKKyAgVElMRUdYX09QQ19MRDRTLCBUSUxFR1hfT1BDX0xENFMsIFRJTEVHWF9PUENfTEQ0UywgQ0hJTEQoODIpLAorICBCSVRGSUVMRCg1MywgMikgLyogaW5kZXggODIgKi8sCisgIFRJTEVHWF9PUENfTEQ0UywgVElMRUdYX09QQ19MRDRTLCBUSUxFR1hfT1BDX0xENFMsIENISUxEKDg3KSwKKyAgQklURklFTEQoNTUsIDEpIC8qIGluZGV4IDg3ICovLAorICBUSUxFR1hfT1BDX0xENFMsIFRJTEVHWF9PUENfUFJFRkVUQ0hfTDNfRkFVTFQsCisgIEJJVEZJRUxEKDI2LCAxKSAvKiBpbmRleCA5MCAqLywKKyAgVElMRUdYX09QQ19MRDRVLCBUSUxFR1hfT1BDX0xELAorICBCSVRGSUVMRCgyNiwgMSkgLyogaW5kZXggOTMgKi8sCisgIENISUxEKDk2KSwgVElMRUdYX09QQ19MRCwKKyAgQklURklFTEQoNTEsIDIpIC8qIGluZGV4IDk2ICovLAorICBUSUxFR1hfT1BDX0xENFUsIFRJTEVHWF9PUENfTEQ0VSwgVElMRUdYX09QQ19MRDRVLCBDSElMRCgxMDEpLAorICBCSVRGSUVMRCg1MywgMikgLyogaW5kZXggMTAxICovLAorICBUSUxFR1hfT1BDX0xENFUsIFRJTEVHWF9PUENfTEQ0VSwgVElMRUdYX09QQ19MRDRVLCBDSElMRCgxMDYpLAorICBCSVRGSUVMRCg1NSwgMSkgLyogaW5kZXggMTA2ICovLAorICBUSUxFR1hfT1BDX0xENFUsIFRJTEVHWF9PUENfUFJFRkVUQ0hfTDMsCisgIEJJVEZJRUxEKDI2LCAxKSAvKiBpbmRleCAxMDkgKi8sCisgIENISUxEKDExMiksIENISUxEKDExNSksCisgIEJJVEZJRUxEKDU3LCAxKSAvKiBpbmRleCAxMTIgKi8sCisgIFRJTEVHWF9PUENfU1QxLCBUSUxFR1hfT1BDX1NUNCwKKyAgQklURklFTEQoNTcsIDEpIC8qIGluZGV4IDExNSAqLywKKyAgVElMRUdYX09QQ19TVDIsIFRJTEVHWF9PUENfU1QsCit9OworCisjdW5kZWYgQklURklFTEQKKyN1bmRlZiBDSElMRAorCitjb25zdCB1bnNpZ25lZCBzaG9ydCAqIGNvbnN0Cit0aWxlZ3hfYnVuZGxlX2RlY29kZXJfZnNtc1tUSUxFR1hfTlVNX1BJUEVMSU5FX0VOQ09ESU5HU10gPQoreworICBkZWNvZGVfWDBfZnNtLAorICBkZWNvZGVfWDFfZnNtLAorICBkZWNvZGVfWTBfZnNtLAorICBkZWNvZGVfWTFfZnNtLAorICBkZWNvZGVfWTJfZnNtCit9OworCitjb25zdCBzdHJ1Y3QgdGlsZWd4X29wZXJhbmQgdGlsZWd4X29wZXJhbmRzWzM1XSA9Cit7CisgIHsKKyAgICBUSUxFR1hfT1BfVFlQRV9JTU1FRElBVEUsIEJGRF9SRUxPQyhUSUxFR1hfSU1NOF9YMCksCisgICAgOCwgMSwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfSW1tOF9YMCwgZ2V0X0ltbThfWDAKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKFRJTEVHWF9JTU04X1gxKSwKKyAgICA4LCAxLCAwLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9JbW04X1gxLCBnZXRfSW1tOF9YMQorICB9LAorICB7CisgICAgVElMRUdYX09QX1RZUEVfSU1NRURJQVRFLCBCRkRfUkVMT0MoVElMRUdYX0lNTThfWTApLAorICAgIDgsIDEsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX0ltbThfWTAsIGdldF9JbW04X1kwCisgIH0sCisgIHsKKyAgICBUSUxFR1hfT1BfVFlQRV9JTU1FRElBVEUsIEJGRF9SRUxPQyhUSUxFR1hfSU1NOF9ZMSksCisgICAgOCwgMSwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfSW1tOF9ZMSwgZ2V0X0ltbThfWTEKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKFRJTEVHWF9JTU0xNl9YMF9IVzBfTEFTVCksCisgICAgMTYsIDEsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX0ltbTE2X1gwLCBnZXRfSW1tMTZfWDAKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKFRJTEVHWF9JTU0xNl9YMV9IVzBfTEFTVCksCisgICAgMTYsIDEsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX0ltbTE2X1gxLCBnZXRfSW1tMTZfWDEKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMCwgMSwgMCwgMCwKKyAgICBjcmVhdGVfRGVzdF9YMSwgZ2V0X0Rlc3RfWDEKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQV9YMSwgZ2V0X1NyY0FfWDEKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMCwgMSwgMCwgMCwKKyAgICBjcmVhdGVfRGVzdF9YMCwgZ2V0X0Rlc3RfWDAKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQV9YMCwgZ2V0X1NyY0FfWDAKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMCwgMSwgMCwgMCwKKyAgICBjcmVhdGVfRGVzdF9ZMCwgZ2V0X0Rlc3RfWTAKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQV9ZMCwgZ2V0X1NyY0FfWTAKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMCwgMSwgMCwgMCwKKyAgICBjcmVhdGVfRGVzdF9ZMSwgZ2V0X0Rlc3RfWTEKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQV9ZMSwgZ2V0X1NyY0FfWTEKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQV9ZMiwgZ2V0X1NyY0FfWTIKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMSwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQV9YMSwgZ2V0X1NyY0FfWDEKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQl9YMCwgZ2V0X1NyY0JfWDAKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQl9YMSwgZ2V0X1NyY0JfWDEKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQl9ZMCwgZ2V0X1NyY0JfWTAKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMSwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQl9ZMSwgZ2V0X1NyY0JfWTEKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX0FERFJFU1MsIEJGRF9SRUxPQyhUSUxFR1hfQlJPRkZfWDEpLAorICAgIDE3LCAxLCAwLCAwLCAxLCBUSUxFR1hfTE9HMl9CVU5ETEVfQUxJR05NRU5UX0lOX0JZVEVTLAorICAgIGNyZWF0ZV9Cck9mZl9YMSwgZ2V0X0JyT2ZmX1gxCisgIH0sCisgIHsKKyAgICBUSUxFR1hfT1BfVFlQRV9JTU1FRElBVEUsIEJGRF9SRUxPQyhUSUxFR1hfTU1TVEFSVF9YMCksCisgICAgNiwgMCwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfQkZTdGFydF9YMCwgZ2V0X0JGU3RhcnRfWDAKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKFRJTEVHWF9NTUVORF9YMCksCisgICAgNiwgMCwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfQkZFbmRfWDAsIGdldF9CRkVuZF9YMAorICB9LAorICB7CisgICAgVElMRUdYX09QX1RZUEVfUkVHSVNURVIsIEJGRF9SRUxPQyhOT05FKSwKKyAgICA2LCAwLCAxLCAxLCAwLCAwLAorICAgIGNyZWF0ZV9EZXN0X1gwLCBnZXRfRGVzdF9YMAorICB9LAorICB7CisgICAgVElMRUdYX09QX1RZUEVfUkVHSVNURVIsIEJGRF9SRUxPQyhOT05FKSwKKyAgICA2LCAwLCAxLCAxLCAwLCAwLAorICAgIGNyZWF0ZV9EZXN0X1kwLCBnZXRfRGVzdF9ZMAorICB9LAorICB7CisgICAgVElMRUdYX09QX1RZUEVfQUREUkVTUywgQkZEX1JFTE9DKFRJTEVHWF9KVU1QT0ZGX1gxKSwKKyAgICAyNywgMSwgMCwgMCwgMSwgVElMRUdYX0xPRzJfQlVORExFX0FMSUdOTUVOVF9JTl9CWVRFUywKKyAgICBjcmVhdGVfSnVtcE9mZl9YMSwgZ2V0X0p1bXBPZmZfWDEKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSLCBCRkRfUkVMT0MoTk9ORSksCisgICAgNiwgMCwgMCwgMSwgMCwgMCwKKyAgICBjcmVhdGVfU3JjQkRlc3RfWTIsIGdldF9TcmNCRGVzdF9ZMgorICB9LAorICB7CisgICAgVElMRUdYX09QX1RZUEVfU1BSLCBCRkRfUkVMT0MoVElMRUdYX01GX0lNTTE0X1gxKSwKKyAgICAxNCwgMCwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfTUZfSW1tMTRfWDEsIGdldF9NRl9JbW0xNF9YMQorICB9LAorICB7CisgICAgVElMRUdYX09QX1RZUEVfU1BSLCBCRkRfUkVMT0MoVElMRUdYX01UX0lNTTE0X1gxKSwKKyAgICAxNCwgMCwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfTVRfSW1tMTRfWDEsIGdldF9NVF9JbW0xNF9YMQorICB9LAorICB7CisgICAgVElMRUdYX09QX1RZUEVfSU1NRURJQVRFLCBCRkRfUkVMT0MoVElMRUdYX1NIQU1UX1gwKSwKKyAgICA2LCAwLCAwLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9TaEFtdF9YMCwgZ2V0X1NoQW10X1gwCisgIH0sCisgIHsKKyAgICBUSUxFR1hfT1BfVFlQRV9JTU1FRElBVEUsIEJGRF9SRUxPQyhUSUxFR1hfU0hBTVRfWDEpLAorICAgIDYsIDAsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX1NoQW10X1gxLCBnZXRfU2hBbXRfWDEKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKFRJTEVHWF9TSEFNVF9ZMCksCisgICAgNiwgMCwgMCwgMCwgMCwgMCwKKyAgICBjcmVhdGVfU2hBbXRfWTAsIGdldF9TaEFtdF9ZMAorICB9LAorICB7CisgICAgVElMRUdYX09QX1RZUEVfSU1NRURJQVRFLCBCRkRfUkVMT0MoVElMRUdYX1NIQU1UX1kxKSwKKyAgICA2LCAwLCAwLCAwLCAwLCAwLAorICAgIGNyZWF0ZV9TaEFtdF9ZMSwgZ2V0X1NoQW10X1kxCisgIH0sCisgIHsKKyAgICBUSUxFR1hfT1BfVFlQRV9SRUdJU1RFUiwgQkZEX1JFTE9DKE5PTkUpLAorICAgIDYsIDAsIDEsIDAsIDAsIDAsCisgICAgY3JlYXRlX1NyY0JEZXN0X1kyLCBnZXRfU3JjQkRlc3RfWTIKKyAgfSwKKyAgeworICAgIFRJTEVHWF9PUF9UWVBFX0lNTUVESUFURSwgQkZEX1JFTE9DKFRJTEVHWF9ERVNUX0lNTThfWDEpLAorICAgIDgsIDEsIDAsIDAsIDAsIDAsCisgICAgY3JlYXRlX0Rlc3RfSW1tOF9YMSwgZ2V0X0Rlc3RfSW1tOF9YMQorICB9Cit9OworCisvKiBHaXZlbiBhIHNldCBvZiBidW5kbGUgYml0cyBhbmQgYSBzcGVjaWZpYyBwaXBlLCByZXR1cm5zIHdoaWNoCisgKiBpbnN0cnVjdGlvbiB0aGUgYnVuZGxlIGNvbnRhaW5zIGluIHRoYXQgcGlwZS4KKyAqLworY29uc3Qgc3RydWN0IHRpbGVneF9vcGNvZGUgKgorZmluZF9vcGNvZGUodGlsZWd4X2J1bmRsZV9iaXRzIGJpdHMsIHRpbGVneF9waXBlbGluZSBwaXBlKQoreworICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqdGFibGUgPSB0aWxlZ3hfYnVuZGxlX2RlY29kZXJfZnNtc1twaXBlXTsKKyAgaW50IGluZGV4ID0gMDsKKworICB3aGlsZSAoMSkKKyAgeworICAgIHVuc2lnbmVkIHNob3J0IGJpdHNwZWMgPSB0YWJsZVtpbmRleF07CisgICAgdW5zaWduZWQgaW50IGJpdGZpZWxkID0KKyAgICAgICgodW5zaWduZWQgaW50KShiaXRzID4+IChiaXRzcGVjICYgNjMpKSkgJiAoYml0c3BlYyA+PiA2KTsKKworICAgIHVuc2lnbmVkIHNob3J0IG5leHQgPSB0YWJsZVtpbmRleCArIDEgKyBiaXRmaWVsZF07CisgICAgaWYgKG5leHQgPD0gVElMRUdYX09QQ19OT05FKQorICAgICAgcmV0dXJuICZ0aWxlZ3hfb3Bjb2Rlc1tuZXh0XTsKKworICAgIGluZGV4ID0gbmV4dCAtIFRJTEVHWF9PUENfTk9ORTsKKyAgfQorfQorCitpbnQKK3BhcnNlX2luc25fdGlsZWd4KHRpbGVneF9idW5kbGVfYml0cyBiaXRzLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHBjLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbGVneF9kZWNvZGVkX2luc3RydWN0aW9uCisgICAgICAgICAgICAgICAgICBkZWNvZGVkW1RJTEVHWF9NQVhfSU5TVFJVQ1RJT05TX1BFUl9CVU5ETEVdKQoreworICBpbnQgbnVtX2luc3RydWN0aW9ucyA9IDA7CisgIGludCBwaXBlOworCisgIGludCBtaW5fcGlwZSwgbWF4X3BpcGU7CisgIGlmICgoYml0cyAmIFRJTEVHWF9CVU5ETEVfTU9ERV9NQVNLKSA9PSAwKQorICB7CisgICAgbWluX3BpcGUgPSBUSUxFR1hfUElQRUxJTkVfWDA7CisgICAgbWF4X3BpcGUgPSBUSUxFR1hfUElQRUxJTkVfWDE7CisgIH0KKyAgZWxzZQorICB7CisgICAgbWluX3BpcGUgPSBUSUxFR1hfUElQRUxJTkVfWTA7CisgICAgbWF4X3BpcGUgPSBUSUxFR1hfUElQRUxJTkVfWTI7CisgIH0KKworICAvKiBGb3IgZWFjaCBwaXBlLCBmaW5kIGFuIGluc3RydWN0aW9uIHRoYXQgZml0cy4gKi8KKyAgZm9yIChwaXBlID0gbWluX3BpcGU7IHBpcGUgPD0gbWF4X3BpcGU7IHBpcGUrKykKKyAgeworICAgIGNvbnN0IHN0cnVjdCB0aWxlZ3hfb3Bjb2RlICpvcGM7CisgICAgc3RydWN0IHRpbGVneF9kZWNvZGVkX2luc3RydWN0aW9uICpkOworICAgIGludCBpOworCisgICAgZCA9ICZkZWNvZGVkW251bV9pbnN0cnVjdGlvbnMrK107CisgICAgb3BjID0gZmluZF9vcGNvZGUgKGJpdHMsICh0aWxlZ3hfcGlwZWxpbmUpcGlwZSk7CisgICAgZC0+b3Bjb2RlID0gb3BjOworCisgICAgLyogRGVjb2RlIGVhY2ggb3BlcmFuZCwgc2lnbiBleHRlbmRpbmcsIGV0Yy4gYXMgYXBwcm9wcmlhdGUuICovCisgICAgZm9yIChpID0gMDsgaSA8IG9wYy0+bnVtX29wZXJhbmRzOyBpKyspCisgICAgeworICAgICAgY29uc3Qgc3RydWN0IHRpbGVneF9vcGVyYW5kICpvcCA9CisgICAgICAgICZ0aWxlZ3hfb3BlcmFuZHNbb3BjLT5vcGVyYW5kc1twaXBlXVtpXV07CisgICAgICBpbnQgcmF3X29wdmFsID0gb3AtPmV4dHJhY3QgKGJpdHMpOworICAgICAgbG9uZyBsb25nIG9wdmFsOworCisgICAgICBpZiAob3AtPmlzX3NpZ25lZCkKKyAgICAgIHsKKyAgICAgICAgLyogU2lnbi1leHRlbmQgdGhlIG9wZXJhbmQuICovCisgICAgICAgIGludCBzaGlmdCA9IChpbnQpKChzaXplb2YoaW50KSAqIDgpIC0gb3AtPm51bV9iaXRzKTsKKyAgICAgICAgcmF3X29wdmFsID0gKHJhd19vcHZhbCA8PCBzaGlmdCkgPj4gc2hpZnQ7CisgICAgICB9CisKKyAgICAgIC8qIEFkanVzdCBQQy1yZWxhdGl2ZSBzY2FsZWQgYnJhbmNoIG9mZnNldHMuICovCisgICAgICBpZiAob3AtPnR5cGUgPT0gVElMRUdYX09QX1RZUEVfQUREUkVTUykKKyAgICAgICAgb3B2YWwgPSAocmF3X29wdmFsICogVElMRUdYX0JVTkRMRV9TSVpFX0lOX0JZVEVTKSArIHBjOworICAgICAgZWxzZQorICAgICAgICBvcHZhbCA9IHJhd19vcHZhbDsKKworICAgICAgLyogUmVjb3JkIHRoZSBmaW5hbCB2YWx1ZS4gKi8KKyAgICAgIGQtPm9wZXJhbmRzW2ldID0gb3A7CisgICAgICBkLT5vcGVyYW5kX3ZhbHVlc1tpXSA9IG9wdmFsOworICAgIH0KKyAgfQorCisgIHJldHVybiBudW1faW5zdHJ1Y3Rpb25zOworfQorCitzdHJ1Y3QgdGlsZWd4X3NwcgoreworICAvKiBUaGUgbnVtYmVyICovCisgIGludCBudW1iZXI7CisKKyAgLyogVGhlIG5hbWUgKi8KKyAgY29uc3QgY2hhciAqbmFtZTsKK307CisKK3N0YXRpYyBpbnQKK3RpbGVneF9zcHJfY29tcGFyZSAoY29uc3Qgdm9pZCAqYV9wdHIsIGNvbnN0IHZvaWQgKmJfcHRyKQoreworICBjb25zdCBzdHJ1Y3QgdGlsZWd4X3NwciAqYSA9IChjb25zdCBzdHJ1Y3QgdGlsZWd4X3NwciAqKSBhX3B0cjsKKyAgY29uc3Qgc3RydWN0IHRpbGVneF9zcHIgKmIgPSAoY29uc3Qgc3RydWN0IHRpbGVneF9zcHIgKikgYl9wdHI7CisgIHJldHVybiAoYS0+bnVtYmVyIC0gYi0+bnVtYmVyKTsKK30KKworY29uc3Qgc3RydWN0IHRpbGVneF9zcHIgdGlsZWd4X3NwcnNbXSA9IHsKKyAgeyAwLCAiTVBMX01FTV9FUlJPUl9TRVRfMCIgfSwKKyAgeyAxLCAiTVBMX01FTV9FUlJPUl9TRVRfMSIgfSwKKyAgeyAyLCAiTVBMX01FTV9FUlJPUl9TRVRfMiIgfSwKKyAgeyAzLCAiTVBMX01FTV9FUlJPUl9TRVRfMyIgfSwKKyAgeyA0LCAiTVBMX01FTV9FUlJPUiIgfSwKKyAgeyA1LCAiTUVNX0VSUk9SX0NCT1hfQUREUiIgfSwKKyAgeyA2LCAiTUVNX0VSUk9SX0NCT1hfU1RBVFVTIiB9LAorICB7IDcsICJNRU1fRVJST1JfRU5BQkxFIiB9LAorICB7IDgsICJNRU1fRVJST1JfTUJPWF9BRERSIiB9LAorICB7IDksICJNRU1fRVJST1JfTUJPWF9TVEFUVVMiIH0sCisgIHsgMTAsICJTQk9YX0VSUk9SIiB9LAorICB7IDExLCAiWEROX0RFTVVYX0VSUk9SIiB9LAorICB7IDI1NiwgIk1QTF9TSU5HTEVfU1RFUF8zX1NFVF8wIiB9LAorICB7IDI1NywgIk1QTF9TSU5HTEVfU1RFUF8zX1NFVF8xIiB9LAorICB7IDI1OCwgIk1QTF9TSU5HTEVfU1RFUF8zX1NFVF8yIiB9LAorICB7IDI1OSwgIk1QTF9TSU5HTEVfU1RFUF8zX1NFVF8zIiB9LAorICB7IDI2MCwgIk1QTF9TSU5HTEVfU1RFUF8zIiB9LAorICB7IDI2MSwgIlNJTkdMRV9TVEVQX0NPTlRST0xfMyIgfSwKKyAgeyA1MTIsICJNUExfU0lOR0xFX1NURVBfMl9TRVRfMCIgfSwKKyAgeyA1MTMsICJNUExfU0lOR0xFX1NURVBfMl9TRVRfMSIgfSwKKyAgeyA1MTQsICJNUExfU0lOR0xFX1NURVBfMl9TRVRfMiIgfSwKKyAgeyA1MTUsICJNUExfU0lOR0xFX1NURVBfMl9TRVRfMyIgfSwKKyAgeyA1MTYsICJNUExfU0lOR0xFX1NURVBfMiIgfSwKKyAgeyA1MTcsICJTSU5HTEVfU1RFUF9DT05UUk9MXzIiIH0sCisgIHsgNzY4LCAiTVBMX1NJTkdMRV9TVEVQXzFfU0VUXzAiIH0sCisgIHsgNzY5LCAiTVBMX1NJTkdMRV9TVEVQXzFfU0VUXzEiIH0sCisgIHsgNzcwLCAiTVBMX1NJTkdMRV9TVEVQXzFfU0VUXzIiIH0sCisgIHsgNzcxLCAiTVBMX1NJTkdMRV9TVEVQXzFfU0VUXzMiIH0sCisgIHsgNzcyLCAiTVBMX1NJTkdMRV9TVEVQXzEiIH0sCisgIHsgNzczLCAiU0lOR0xFX1NURVBfQ09OVFJPTF8xIiB9LAorICB7IDEwMjQsICJNUExfU0lOR0xFX1NURVBfMF9TRVRfMCIgfSwKKyAgeyAxMDI1LCAiTVBMX1NJTkdMRV9TVEVQXzBfU0VUXzEiIH0sCisgIHsgMTAyNiwgIk1QTF9TSU5HTEVfU1RFUF8wX1NFVF8yIiB9LAorICB7IDEwMjcsICJNUExfU0lOR0xFX1NURVBfMF9TRVRfMyIgfSwKKyAgeyAxMDI4LCAiTVBMX1NJTkdMRV9TVEVQXzAiIH0sCisgIHsgMTAyOSwgIlNJTkdMRV9TVEVQX0NPTlRST0xfMCIgfSwKKyAgeyAxMjgwLCAiTVBMX0lETl9DT01QTEVURV9TRVRfMCIgfSwKKyAgeyAxMjgxLCAiTVBMX0lETl9DT01QTEVURV9TRVRfMSIgfSwKKyAgeyAxMjgyLCAiTVBMX0lETl9DT01QTEVURV9TRVRfMiIgfSwKKyAgeyAxMjgzLCAiTVBMX0lETl9DT01QTEVURV9TRVRfMyIgfSwKKyAgeyAxMjg0LCAiTVBMX0lETl9DT01QTEVURSIgfSwKKyAgeyAxMjg1LCAiSUROX0NPTVBMRVRFX1BFTkRJTkciIH0sCisgIHsgMTUzNiwgIk1QTF9VRE5fQ09NUExFVEVfU0VUXzAiIH0sCisgIHsgMTUzNywgIk1QTF9VRE5fQ09NUExFVEVfU0VUXzEiIH0sCisgIHsgMTUzOCwgIk1QTF9VRE5fQ09NUExFVEVfU0VUXzIiIH0sCisgIHsgMTUzOSwgIk1QTF9VRE5fQ09NUExFVEVfU0VUXzMiIH0sCisgIHsgMTU0MCwgIk1QTF9VRE5fQ09NUExFVEUiIH0sCisgIHsgMTU0MSwgIlVETl9DT01QTEVURV9QRU5ESU5HIiB9LAorICB7IDE3OTIsICJNUExfSVRMQl9NSVNTX1NFVF8wIiB9LAorICB7IDE3OTMsICJNUExfSVRMQl9NSVNTX1NFVF8xIiB9LAorICB7IDE3OTQsICJNUExfSVRMQl9NSVNTX1NFVF8yIiB9LAorICB7IDE3OTUsICJNUExfSVRMQl9NSVNTX1NFVF8zIiB9LAorICB7IDE3OTYsICJNUExfSVRMQl9NSVNTIiB9LAorICB7IDE3OTcsICJJVExCX1RTQl9CQVNFX0FERFJfMCIgfSwKKyAgeyAxNzk4LCAiSVRMQl9UU0JfQkFTRV9BRERSXzEiIH0sCisgIHsgMTkyMCwgIklUTEJfQ1VSUkVOVF9BVFRSIiB9LAorICB7IDE5MjEsICJJVExCX0NVUlJFTlRfUEEiIH0sCisgIHsgMTkyMiwgIklUTEJfQ1VSUkVOVF9WQSIgfSwKKyAgeyAxOTIzLCAiSVRMQl9JTkRFWCIgfSwKKyAgeyAxOTI0LCAiSVRMQl9NQVRDSF8wIiB9LAorICB7IDE5MjUsICJJVExCX1BFUkYiIH0sCisgIHsgMTkyNiwgIklUTEJfUFIiIH0sCisgIHsgMTkyNywgIklUTEJfVFNCX0FERFJfMCIgfSwKKyAgeyAxOTI4LCAiSVRMQl9UU0JfQUREUl8xIiB9LAorICB7IDE5MjksICJJVExCX1RTQl9GSUxMX0NVUlJFTlRfQVRUUiIgfSwKKyAgeyAxOTMwLCAiSVRMQl9UU0JfRklMTF9NQVRDSCIgfSwKKyAgeyAxOTMxLCAiTlVNQkVSX0lUTEIiIH0sCisgIHsgMTkzMiwgIlJFUExBQ0VNRU5UX0lUTEIiIH0sCisgIHsgMTkzMywgIldJUkVEX0lUTEIiIH0sCisgIHsgMjA0OCwgIk1QTF9JTExfU0VUXzAiIH0sCisgIHsgMjA0OSwgIk1QTF9JTExfU0VUXzEiIH0sCisgIHsgMjA1MCwgIk1QTF9JTExfU0VUXzIiIH0sCisgIHsgMjA1MSwgIk1QTF9JTExfU0VUXzMiIH0sCisgIHsgMjA1MiwgIk1QTF9JTEwiIH0sCisgIHsgMjMwNCwgIk1QTF9HUFZfU0VUXzAiIH0sCisgIHsgMjMwNSwgIk1QTF9HUFZfU0VUXzEiIH0sCisgIHsgMjMwNiwgIk1QTF9HUFZfU0VUXzIiIH0sCisgIHsgMjMwNywgIk1QTF9HUFZfU0VUXzMiIH0sCisgIHsgMjMwOCwgIk1QTF9HUFYiIH0sCisgIHsgMjMwOSwgIkdQVl9SRUFTT04iIH0sCisgIHsgMjU2MCwgIk1QTF9JRE5fQUNDRVNTX1NFVF8wIiB9LAorICB7IDI1NjEsICJNUExfSUROX0FDQ0VTU19TRVRfMSIgfSwKKyAgeyAyNTYyLCAiTVBMX0lETl9BQ0NFU1NfU0VUXzIiIH0sCisgIHsgMjU2MywgIk1QTF9JRE5fQUNDRVNTX1NFVF8zIiB9LAorICB7IDI1NjQsICJNUExfSUROX0FDQ0VTUyIgfSwKKyAgeyAyNTY1LCAiSUROX0RFTVVYX0NPVU5UXzAiIH0sCisgIHsgMjU2NiwgIklETl9ERU1VWF9DT1VOVF8xIiB9LAorICB7IDI1NjcsICJJRE5fRkxVU0hfRUdSRVNTIiB9LAorICB7IDI1NjgsICJJRE5fUEVORElORyIgfSwKKyAgeyAyNTY5LCAiSUROX1JPVVRFX09SREVSIiB9LAorICB7IDI1NzAsICJJRE5fU1BfRklGT19DTlQiIH0sCisgIHsgMjY4OCwgIklETl9EQVRBX0FWQUlMIiB9LAorICB7IDI4MTYsICJNUExfVUROX0FDQ0VTU19TRVRfMCIgfSwKKyAgeyAyODE3LCAiTVBMX1VETl9BQ0NFU1NfU0VUXzEiIH0sCisgIHsgMjgxOCwgIk1QTF9VRE5fQUNDRVNTX1NFVF8yIiB9LAorICB7IDI4MTksICJNUExfVUROX0FDQ0VTU19TRVRfMyIgfSwKKyAgeyAyODIwLCAiTVBMX1VETl9BQ0NFU1MiIH0sCisgIHsgMjgyMSwgIlVETl9ERU1VWF9DT1VOVF8wIiB9LAorICB7IDI4MjIsICJVRE5fREVNVVhfQ09VTlRfMSIgfSwKKyAgeyAyODIzLCAiVUROX0RFTVVYX0NPVU5UXzIiIH0sCisgIHsgMjgyNCwgIlVETl9ERU1VWF9DT1VOVF8zIiB9LAorICB7IDI4MjUsICJVRE5fRkxVU0hfRUdSRVNTIiB9LAorICB7IDI4MjYsICJVRE5fUEVORElORyIgfSwKKyAgeyAyODI3LCAiVUROX1JPVVRFX09SREVSIiB9LAorICB7IDI4MjgsICJVRE5fU1BfRklGT19DTlQiIH0sCisgIHsgMjk0NCwgIlVETl9EQVRBX0FWQUlMIiB9LAorICB7IDMwNzIsICJNUExfU1dJTlRfM19TRVRfMCIgfSwKKyAgeyAzMDczLCAiTVBMX1NXSU5UXzNfU0VUXzEiIH0sCisgIHsgMzA3NCwgIk1QTF9TV0lOVF8zX1NFVF8yIiB9LAorICB7IDMwNzUsICJNUExfU1dJTlRfM19TRVRfMyIgfSwKKyAgeyAzMDc2LCAiTVBMX1NXSU5UXzMiIH0sCisgIHsgMzMyOCwgIk1QTF9TV0lOVF8yX1NFVF8wIiB9LAorICB7IDMzMjksICJNUExfU1dJTlRfMl9TRVRfMSIgfSwKKyAgeyAzMzMwLCAiTVBMX1NXSU5UXzJfU0VUXzIiIH0sCisgIHsgMzMzMSwgIk1QTF9TV0lOVF8yX1NFVF8zIiB9LAorICB7IDMzMzIsICJNUExfU1dJTlRfMiIgfSwKKyAgeyAzNTg0LCAiTVBMX1NXSU5UXzFfU0VUXzAiIH0sCisgIHsgMzU4NSwgIk1QTF9TV0lOVF8xX1NFVF8xIiB9LAorICB7IDM1ODYsICJNUExfU1dJTlRfMV9TRVRfMiIgfSwKKyAgeyAzNTg3LCAiTVBMX1NXSU5UXzFfU0VUXzMiIH0sCisgIHsgMzU4OCwgIk1QTF9TV0lOVF8xIiB9LAorICB7IDM4NDAsICJNUExfU1dJTlRfMF9TRVRfMCIgfSwKKyAgeyAzODQxLCAiTVBMX1NXSU5UXzBfU0VUXzEiIH0sCisgIHsgMzg0MiwgIk1QTF9TV0lOVF8wX1NFVF8yIiB9LAorICB7IDM4NDMsICJNUExfU1dJTlRfMF9TRVRfMyIgfSwKKyAgeyAzODQ0LCAiTVBMX1NXSU5UXzAiIH0sCisgIHsgNDA5NiwgIk1QTF9JTExfVFJBTlNfU0VUXzAiIH0sCisgIHsgNDA5NywgIk1QTF9JTExfVFJBTlNfU0VUXzEiIH0sCisgIHsgNDA5OCwgIk1QTF9JTExfVFJBTlNfU0VUXzIiIH0sCisgIHsgNDA5OSwgIk1QTF9JTExfVFJBTlNfU0VUXzMiIH0sCisgIHsgNDEwMCwgIk1QTF9JTExfVFJBTlMiIH0sCisgIHsgNDEwMSwgIklMTF9UUkFOU19SRUFTT04iIH0sCisgIHsgNDEwMiwgIklMTF9WQV9QQyIgfSwKKyAgeyA0MzUyLCAiTVBMX1VOQUxJR05fREFUQV9TRVRfMCIgfSwKKyAgeyA0MzUzLCAiTVBMX1VOQUxJR05fREFUQV9TRVRfMSIgfSwKKyAgeyA0MzU0LCAiTVBMX1VOQUxJR05fREFUQV9TRVRfMiIgfSwKKyAgeyA0MzU1LCAiTVBMX1VOQUxJR05fREFUQV9TRVRfMyIgfSwKKyAgeyA0MzU2LCAiTVBMX1VOQUxJR05fREFUQSIgfSwKKyAgeyA0NjA4LCAiTVBMX0RUTEJfTUlTU19TRVRfMCIgfSwKKyAgeyA0NjA5LCAiTVBMX0RUTEJfTUlTU19TRVRfMSIgfSwKKyAgeyA0NjEwLCAiTVBMX0RUTEJfTUlTU19TRVRfMiIgfSwKKyAgeyA0NjExLCAiTVBMX0RUTEJfTUlTU19TRVRfMyIgfSwKKyAgeyA0NjEyLCAiTVBMX0RUTEJfTUlTUyIgfSwKKyAgeyA0NjEzLCAiRFRMQl9UU0JfQkFTRV9BRERSXzAiIH0sCisgIHsgNDYxNCwgIkRUTEJfVFNCX0JBU0VfQUREUl8xIiB9LAorICB7IDQ3MzYsICJBQVIiIH0sCisgIHsgNDczNywgIkNBQ0hFX1BJTk5FRF9XQVlTIiB9LAorICB7IDQ3MzgsICJEVExCX0JBRF9BRERSIiB9LAorICB7IDQ3MzksICJEVExCX0JBRF9BRERSX1JFQVNPTiIgfSwKKyAgeyA0NzQwLCAiRFRMQl9DVVJSRU5UX0FUVFIiIH0sCisgIHsgNDc0MSwgIkRUTEJfQ1VSUkVOVF9QQSIgfSwKKyAgeyA0NzQyLCAiRFRMQl9DVVJSRU5UX1ZBIiB9LAorICB7IDQ3NDMsICJEVExCX0lOREVYIiB9LAorICB7IDQ3NDQsICJEVExCX01BVENIXzAiIH0sCisgIHsgNDc0NSwgIkRUTEJfUEVSRiIgfSwKKyAgeyA0NzQ2LCAiRFRMQl9UU0JfQUREUl8wIiB9LAorICB7IDQ3NDcsICJEVExCX1RTQl9BRERSXzEiIH0sCisgIHsgNDc0OCwgIkRUTEJfVFNCX0ZJTExfQ1VSUkVOVF9BVFRSIiB9LAorICB7IDQ3NDksICJEVExCX1RTQl9GSUxMX01BVENIIiB9LAorICB7IDQ3NTAsICJOVU1CRVJfRFRMQiIgfSwKKyAgeyA0NzUxLCAiUkVQTEFDRU1FTlRfRFRMQiIgfSwKKyAgeyA0NzUyLCAiV0lSRURfRFRMQiIgfSwKKyAgeyA0ODY0LCAiTVBMX0RUTEJfQUNDRVNTX1NFVF8wIiB9LAorICB7IDQ4NjUsICJNUExfRFRMQl9BQ0NFU1NfU0VUXzEiIH0sCisgIHsgNDg2NiwgIk1QTF9EVExCX0FDQ0VTU19TRVRfMiIgfSwKKyAgeyA0ODY3LCAiTVBMX0RUTEJfQUNDRVNTX1NFVF8zIiB9LAorICB7IDQ4NjgsICJNUExfRFRMQl9BQ0NFU1MiIH0sCisgIHsgNTEyMCwgIk1QTF9JRE5fRklSRVdBTExfU0VUXzAiIH0sCisgIHsgNTEyMSwgIk1QTF9JRE5fRklSRVdBTExfU0VUXzEiIH0sCisgIHsgNTEyMiwgIk1QTF9JRE5fRklSRVdBTExfU0VUXzIiIH0sCisgIHsgNTEyMywgIk1QTF9JRE5fRklSRVdBTExfU0VUXzMiIH0sCisgIHsgNTEyNCwgIk1QTF9JRE5fRklSRVdBTEwiIH0sCisgIHsgNTEyNSwgIklETl9ESVJFQ1RJT05fUFJPVEVDVCIgfSwKKyAgeyA1Mzc2LCAiTVBMX1VETl9GSVJFV0FMTF9TRVRfMCIgfSwKKyAgeyA1Mzc3LCAiTVBMX1VETl9GSVJFV0FMTF9TRVRfMSIgfSwKKyAgeyA1Mzc4LCAiTVBMX1VETl9GSVJFV0FMTF9TRVRfMiIgfSwKKyAgeyA1Mzc5LCAiTVBMX1VETl9GSVJFV0FMTF9TRVRfMyIgfSwKKyAgeyA1MzgwLCAiTVBMX1VETl9GSVJFV0FMTCIgfSwKKyAgeyA1MzgxLCAiVUROX0RJUkVDVElPTl9QUk9URUNUIiB9LAorICB7IDU2MzIsICJNUExfVElMRV9USU1FUl9TRVRfMCIgfSwKKyAgeyA1NjMzLCAiTVBMX1RJTEVfVElNRVJfU0VUXzEiIH0sCisgIHsgNTYzNCwgIk1QTF9USUxFX1RJTUVSX1NFVF8yIiB9LAorICB7IDU2MzUsICJNUExfVElMRV9USU1FUl9TRVRfMyIgfSwKKyAgeyA1NjM2LCAiTVBMX1RJTEVfVElNRVIiIH0sCisgIHsgNTYzNywgIlRJTEVfVElNRVJfQ09OVFJPTCIgfSwKKyAgeyA1ODg4LCAiTVBMX0FVWF9USUxFX1RJTUVSX1NFVF8wIiB9LAorICB7IDU4ODksICJNUExfQVVYX1RJTEVfVElNRVJfU0VUXzEiIH0sCisgIHsgNTg5MCwgIk1QTF9BVVhfVElMRV9USU1FUl9TRVRfMiIgfSwKKyAgeyA1ODkxLCAiTVBMX0FVWF9USUxFX1RJTUVSX1NFVF8zIiB9LAorICB7IDU4OTIsICJNUExfQVVYX1RJTEVfVElNRVIiIH0sCisgIHsgNTg5MywgIkFVWF9USUxFX1RJTUVSX0NPTlRST0wiIH0sCisgIHsgNjE0NCwgIk1QTF9JRE5fVElNRVJfU0VUXzAiIH0sCisgIHsgNjE0NSwgIk1QTF9JRE5fVElNRVJfU0VUXzEiIH0sCisgIHsgNjE0NiwgIk1QTF9JRE5fVElNRVJfU0VUXzIiIH0sCisgIHsgNjE0NywgIk1QTF9JRE5fVElNRVJfU0VUXzMiIH0sCisgIHsgNjE0OCwgIk1QTF9JRE5fVElNRVIiIH0sCisgIHsgNjE0OSwgIklETl9ERUFETE9DS19DT1VOVCIgfSwKKyAgeyA2MTUwLCAiSUROX0RFQURMT0NLX1RJTUVPVVQiIH0sCisgIHsgNjQwMCwgIk1QTF9VRE5fVElNRVJfU0VUXzAiIH0sCisgIHsgNjQwMSwgIk1QTF9VRE5fVElNRVJfU0VUXzEiIH0sCisgIHsgNjQwMiwgIk1QTF9VRE5fVElNRVJfU0VUXzIiIH0sCisgIHsgNjQwMywgIk1QTF9VRE5fVElNRVJfU0VUXzMiIH0sCisgIHsgNjQwNCwgIk1QTF9VRE5fVElNRVIiIH0sCisgIHsgNjQwNSwgIlVETl9ERUFETE9DS19DT1VOVCIgfSwKKyAgeyA2NDA2LCAiVUROX0RFQURMT0NLX1RJTUVPVVQiIH0sCisgIHsgNjY1NiwgIk1QTF9JRE5fQVZBSUxfU0VUXzAiIH0sCisgIHsgNjY1NywgIk1QTF9JRE5fQVZBSUxfU0VUXzEiIH0sCisgIHsgNjY1OCwgIk1QTF9JRE5fQVZBSUxfU0VUXzIiIH0sCisgIHsgNjY1OSwgIk1QTF9JRE5fQVZBSUxfU0VUXzMiIH0sCisgIHsgNjY2MCwgIk1QTF9JRE5fQVZBSUwiIH0sCisgIHsgNjY2MSwgIklETl9BVkFJTF9FTiIgfSwKKyAgeyA2OTEyLCAiTVBMX1VETl9BVkFJTF9TRVRfMCIgfSwKKyAgeyA2OTEzLCAiTVBMX1VETl9BVkFJTF9TRVRfMSIgfSwKKyAgeyA2OTE0LCAiTVBMX1VETl9BVkFJTF9TRVRfMiIgfSwKKyAgeyA2OTE1LCAiTVBMX1VETl9BVkFJTF9TRVRfMyIgfSwKKyAgeyA2OTE2LCAiTVBMX1VETl9BVkFJTCIgfSwKKyAgeyA2OTE3LCAiVUROX0FWQUlMX0VOIiB9LAorICB7IDcxNjgsICJNUExfSVBJXzNfU0VUXzAiIH0sCisgIHsgNzE2OSwgIk1QTF9JUElfM19TRVRfMSIgfSwKKyAgeyA3MTcwLCAiTVBMX0lQSV8zX1NFVF8yIiB9LAorICB7IDcxNzEsICJNUExfSVBJXzNfU0VUXzMiIH0sCisgIHsgNzE3MiwgIk1QTF9JUElfMyIgfSwKKyAgeyA3MTczLCAiSVBJX0VWRU5UXzMiIH0sCisgIHsgNzE3NCwgIklQSV9FVkVOVF9SRVNFVF8zIiB9LAorICB7IDcxNzUsICJJUElfRVZFTlRfU0VUXzMiIH0sCisgIHsgNzE3NiwgIklQSV9NQVNLXzMiIH0sCisgIHsgNzE3NywgIklQSV9NQVNLX1JFU0VUXzMiIH0sCisgIHsgNzE3OCwgIklQSV9NQVNLX1NFVF8zIiB9LAorICB7IDc0MjQsICJNUExfSVBJXzJfU0VUXzAiIH0sCisgIHsgNzQyNSwgIk1QTF9JUElfMl9TRVRfMSIgfSwKKyAgeyA3NDI2LCAiTVBMX0lQSV8yX1NFVF8yIiB9LAorICB7IDc0MjcsICJNUExfSVBJXzJfU0VUXzMiIH0sCisgIHsgNzQyOCwgIk1QTF9JUElfMiIgfSwKKyAgeyA3NDI5LCAiSVBJX0VWRU5UXzIiIH0sCisgIHsgNzQzMCwgIklQSV9FVkVOVF9SRVNFVF8yIiB9LAorICB7IDc0MzEsICJJUElfRVZFTlRfU0VUXzIiIH0sCisgIHsgNzQzMiwgIklQSV9NQVNLXzIiIH0sCisgIHsgNzQzMywgIklQSV9NQVNLX1JFU0VUXzIiIH0sCisgIHsgNzQzNCwgIklQSV9NQVNLX1NFVF8yIiB9LAorICB7IDc2ODAsICJNUExfSVBJXzFfU0VUXzAiIH0sCisgIHsgNzY4MSwgIk1QTF9JUElfMV9TRVRfMSIgfSwKKyAgeyA3NjgyLCAiTVBMX0lQSV8xX1NFVF8yIiB9LAorICB7IDc2ODMsICJNUExfSVBJXzFfU0VUXzMiIH0sCisgIHsgNzY4NCwgIk1QTF9JUElfMSIgfSwKKyAgeyA3Njg1LCAiSVBJX0VWRU5UXzEiIH0sCisgIHsgNzY4NiwgIklQSV9FVkVOVF9SRVNFVF8xIiB9LAorICB7IDc2ODcsICJJUElfRVZFTlRfU0VUXzEiIH0sCisgIHsgNzY4OCwgIklQSV9NQVNLXzEiIH0sCisgIHsgNzY4OSwgIklQSV9NQVNLX1JFU0VUXzEiIH0sCisgIHsgNzY5MCwgIklQSV9NQVNLX1NFVF8xIiB9LAorICB7IDc5MzYsICJNUExfSVBJXzBfU0VUXzAiIH0sCisgIHsgNzkzNywgIk1QTF9JUElfMF9TRVRfMSIgfSwKKyAgeyA3OTM4LCAiTVBMX0lQSV8wX1NFVF8yIiB9LAorICB7IDc5MzksICJNUExfSVBJXzBfU0VUXzMiIH0sCisgIHsgNzk0MCwgIk1QTF9JUElfMCIgfSwKKyAgeyA3OTQxLCAiSVBJX0VWRU5UXzAiIH0sCisgIHsgNzk0MiwgIklQSV9FVkVOVF9SRVNFVF8wIiB9LAorICB7IDc5NDMsICJJUElfRVZFTlRfU0VUXzAiIH0sCisgIHsgNzk0NCwgIklQSV9NQVNLXzAiIH0sCisgIHsgNzk0NSwgIklQSV9NQVNLX1JFU0VUXzAiIH0sCisgIHsgNzk0NiwgIklQSV9NQVNLX1NFVF8wIiB9LAorICB7IDgxOTIsICJNUExfUEVSRl9DT1VOVF9TRVRfMCIgfSwKKyAgeyA4MTkzLCAiTVBMX1BFUkZfQ09VTlRfU0VUXzEiIH0sCisgIHsgODE5NCwgIk1QTF9QRVJGX0NPVU5UX1NFVF8yIiB9LAorICB7IDgxOTUsICJNUExfUEVSRl9DT1VOVF9TRVRfMyIgfSwKKyAgeyA4MTk2LCAiTVBMX1BFUkZfQ09VTlQiIH0sCisgIHsgODE5NywgIlBFUkZfQ09VTlRfMCIgfSwKKyAgeyA4MTk4LCAiUEVSRl9DT1VOVF8xIiB9LAorICB7IDgxOTksICJQRVJGX0NPVU5UX0NUTCIgfSwKKyAgeyA4MjAwLCAiUEVSRl9DT1VOVF9ETl9DVEwiIH0sCisgIHsgODIwMSwgIlBFUkZfQ09VTlRfU1RTIiB9LAorICB7IDgyMDIsICJXQVRDSF9NQVNLIiB9LAorICB7IDgyMDMsICJXQVRDSF9WQUwiIH0sCisgIHsgODQ0OCwgIk1QTF9BVVhfUEVSRl9DT1VOVF9TRVRfMCIgfSwKKyAgeyA4NDQ5LCAiTVBMX0FVWF9QRVJGX0NPVU5UX1NFVF8xIiB9LAorICB7IDg0NTAsICJNUExfQVVYX1BFUkZfQ09VTlRfU0VUXzIiIH0sCisgIHsgODQ1MSwgIk1QTF9BVVhfUEVSRl9DT1VOVF9TRVRfMyIgfSwKKyAgeyA4NDUyLCAiTVBMX0FVWF9QRVJGX0NPVU5UIiB9LAorICB7IDg0NTMsICJBVVhfUEVSRl9DT1VOVF8wIiB9LAorICB7IDg0NTQsICJBVVhfUEVSRl9DT1VOVF8xIiB9LAorICB7IDg0NTUsICJBVVhfUEVSRl9DT1VOVF9DVEwiIH0sCisgIHsgODQ1NiwgIkFVWF9QRVJGX0NPVU5UX1NUUyIgfSwKKyAgeyA4NzA0LCAiTVBMX0lOVENUUkxfM19TRVRfMCIgfSwKKyAgeyA4NzA1LCAiTVBMX0lOVENUUkxfM19TRVRfMSIgfSwKKyAgeyA4NzA2LCAiTVBMX0lOVENUUkxfM19TRVRfMiIgfSwKKyAgeyA4NzA3LCAiTVBMX0lOVENUUkxfM19TRVRfMyIgfSwKKyAgeyA4NzA4LCAiTVBMX0lOVENUUkxfMyIgfSwKKyAgeyA4NzA5LCAiSU5UQ1RSTF8zX1NUQVRVUyIgfSwKKyAgeyA4NzEwLCAiSU5URVJSVVBUX01BU0tfMyIgfSwKKyAgeyA4NzExLCAiSU5URVJSVVBUX01BU0tfUkVTRVRfMyIgfSwKKyAgeyA4NzEyLCAiSU5URVJSVVBUX01BU0tfU0VUXzMiIH0sCisgIHsgODcxMywgIklOVEVSUlVQVF9WRUNUT1JfQkFTRV8zIiB9LAorICB7IDg3MTQsICJTSU5HTEVfU1RFUF9FTl8wXzMiIH0sCisgIHsgODcxNSwgIlNJTkdMRV9TVEVQX0VOXzFfMyIgfSwKKyAgeyA4NzE2LCAiU0lOR0xFX1NURVBfRU5fMl8zIiB9LAorICB7IDg3MTcsICJTSU5HTEVfU1RFUF9FTl8zXzMiIH0sCisgIHsgODgzMiwgIkVYX0NPTlRFWFRfM18wIiB9LAorICB7IDg4MzMsICJFWF9DT05URVhUXzNfMSIgfSwKKyAgeyA4ODM0LCAiU1lTVEVNX1NBVkVfM18wIiB9LAorICB7IDg4MzUsICJTWVNURU1fU0FWRV8zXzEiIH0sCisgIHsgODgzNiwgIlNZU1RFTV9TQVZFXzNfMiIgfSwKKyAgeyA4ODM3LCAiU1lTVEVNX1NBVkVfM18zIiB9LAorICB7IDg5NjAsICJNUExfSU5UQ1RSTF8yX1NFVF8wIiB9LAorICB7IDg5NjEsICJNUExfSU5UQ1RSTF8yX1NFVF8xIiB9LAorICB7IDg5NjIsICJNUExfSU5UQ1RSTF8yX1NFVF8yIiB9LAorICB7IDg5NjMsICJNUExfSU5UQ1RSTF8yX1NFVF8zIiB9LAorICB7IDg5NjQsICJNUExfSU5UQ1RSTF8yIiB9LAorICB7IDg5NjUsICJJTlRDVFJMXzJfU1RBVFVTIiB9LAorICB7IDg5NjYsICJJTlRFUlJVUFRfTUFTS18yIiB9LAorICB7IDg5NjcsICJJTlRFUlJVUFRfTUFTS19SRVNFVF8yIiB9LAorICB7IDg5NjgsICJJTlRFUlJVUFRfTUFTS19TRVRfMiIgfSwKKyAgeyA4OTY5LCAiSU5URVJSVVBUX1ZFQ1RPUl9CQVNFXzIiIH0sCisgIHsgODk3MCwgIlNJTkdMRV9TVEVQX0VOXzBfMiIgfSwKKyAgeyA4OTcxLCAiU0lOR0xFX1NURVBfRU5fMV8yIiB9LAorICB7IDg5NzIsICJTSU5HTEVfU1RFUF9FTl8yXzIiIH0sCisgIHsgODk3MywgIlNJTkdMRV9TVEVQX0VOXzNfMiIgfSwKKyAgeyA5MDg4LCAiRVhfQ09OVEVYVF8yXzAiIH0sCisgIHsgOTA4OSwgIkVYX0NPTlRFWFRfMl8xIiB9LAorICB7IDkwOTAsICJTWVNURU1fU0FWRV8yXzAiIH0sCisgIHsgOTA5MSwgIlNZU1RFTV9TQVZFXzJfMSIgfSwKKyAgeyA5MDkyLCAiU1lTVEVNX1NBVkVfMl8yIiB9LAorICB7IDkwOTMsICJTWVNURU1fU0FWRV8yXzMiIH0sCisgIHsgOTIxNiwgIk1QTF9JTlRDVFJMXzFfU0VUXzAiIH0sCisgIHsgOTIxNywgIk1QTF9JTlRDVFJMXzFfU0VUXzEiIH0sCisgIHsgOTIxOCwgIk1QTF9JTlRDVFJMXzFfU0VUXzIiIH0sCisgIHsgOTIxOSwgIk1QTF9JTlRDVFJMXzFfU0VUXzMiIH0sCisgIHsgOTIyMCwgIk1QTF9JTlRDVFJMXzEiIH0sCisgIHsgOTIyMSwgIklOVENUUkxfMV9TVEFUVVMiIH0sCisgIHsgOTIyMiwgIklOVEVSUlVQVF9NQVNLXzEiIH0sCisgIHsgOTIyMywgIklOVEVSUlVQVF9NQVNLX1JFU0VUXzEiIH0sCisgIHsgOTIyNCwgIklOVEVSUlVQVF9NQVNLX1NFVF8xIiB9LAorICB7IDkyMjUsICJJTlRFUlJVUFRfVkVDVE9SX0JBU0VfMSIgfSwKKyAgeyA5MjI2LCAiU0lOR0xFX1NURVBfRU5fMF8xIiB9LAorICB7IDkyMjcsICJTSU5HTEVfU1RFUF9FTl8xXzEiIH0sCisgIHsgOTIyOCwgIlNJTkdMRV9TVEVQX0VOXzJfMSIgfSwKKyAgeyA5MjI5LCAiU0lOR0xFX1NURVBfRU5fM18xIiB9LAorICB7IDkzNDQsICJFWF9DT05URVhUXzFfMCIgfSwKKyAgeyA5MzQ1LCAiRVhfQ09OVEVYVF8xXzEiIH0sCisgIHsgOTM0NiwgIlNZU1RFTV9TQVZFXzFfMCIgfSwKKyAgeyA5MzQ3LCAiU1lTVEVNX1NBVkVfMV8xIiB9LAorICB7IDkzNDgsICJTWVNURU1fU0FWRV8xXzIiIH0sCisgIHsgOTM0OSwgIlNZU1RFTV9TQVZFXzFfMyIgfSwKKyAgeyA5NDcyLCAiTVBMX0lOVENUUkxfMF9TRVRfMCIgfSwKKyAgeyA5NDczLCAiTVBMX0lOVENUUkxfMF9TRVRfMSIgfSwKKyAgeyA5NDc0LCAiTVBMX0lOVENUUkxfMF9TRVRfMiIgfSwKKyAgeyA5NDc1LCAiTVBMX0lOVENUUkxfMF9TRVRfMyIgfSwKKyAgeyA5NDc2LCAiTVBMX0lOVENUUkxfMCIgfSwKKyAgeyA5NDc3LCAiSU5UQ1RSTF8wX1NUQVRVUyIgfSwKKyAgeyA5NDc4LCAiSU5URVJSVVBUX01BU0tfMCIgfSwKKyAgeyA5NDc5LCAiSU5URVJSVVBUX01BU0tfUkVTRVRfMCIgfSwKKyAgeyA5NDgwLCAiSU5URVJSVVBUX01BU0tfU0VUXzAiIH0sCisgIHsgOTQ4MSwgIklOVEVSUlVQVF9WRUNUT1JfQkFTRV8wIiB9LAorICB7IDk0ODIsICJTSU5HTEVfU1RFUF9FTl8wXzAiIH0sCisgIHsgOTQ4MywgIlNJTkdMRV9TVEVQX0VOXzFfMCIgfSwKKyAgeyA5NDg0LCAiU0lOR0xFX1NURVBfRU5fMl8wIiB9LAorICB7IDk0ODUsICJTSU5HTEVfU1RFUF9FTl8zXzAiIH0sCisgIHsgOTYwMCwgIkVYX0NPTlRFWFRfMF8wIiB9LAorICB7IDk2MDEsICJFWF9DT05URVhUXzBfMSIgfSwKKyAgeyA5NjAyLCAiU1lTVEVNX1NBVkVfMF8wIiB9LAorICB7IDk2MDMsICJTWVNURU1fU0FWRV8wXzEiIH0sCisgIHsgOTYwNCwgIlNZU1RFTV9TQVZFXzBfMiIgfSwKKyAgeyA5NjA1LCAiU1lTVEVNX1NBVkVfMF8zIiB9LAorICB7IDk3MjgsICJNUExfQk9PVF9BQ0NFU1NfU0VUXzAiIH0sCisgIHsgOTcyOSwgIk1QTF9CT09UX0FDQ0VTU19TRVRfMSIgfSwKKyAgeyA5NzMwLCAiTVBMX0JPT1RfQUNDRVNTX1NFVF8yIiB9LAorICB7IDk3MzEsICJNUExfQk9PVF9BQ0NFU1NfU0VUXzMiIH0sCisgIHsgOTczMiwgIk1QTF9CT09UX0FDQ0VTUyIgfSwKKyAgeyA5NzMzLCAiQklHX0VORElBTl9DT05GSUciIH0sCisgIHsgOTczNCwgIkNBQ0hFX0lOVkFMSURBVElPTl9DT01QUkVTU0lPTl9NT0RFIiB9LAorICB7IDk3MzUsICJDQUNIRV9JTlZBTElEQVRJT05fTUFTS18wIiB9LAorICB7IDk3MzYsICJDQUNIRV9JTlZBTElEQVRJT05fTUFTS18xIiB9LAorICB7IDk3MzcsICJDQUNIRV9JTlZBTElEQVRJT05fTUFTS18yIiB9LAorICB7IDk3MzgsICJDQk9YX0NBQ0hFQVNSQU1fQ09ORklHIiB9LAorICB7IDk3MzksICJDQk9YX0NBQ0hFX0NPTkZJRyIgfSwKKyAgeyA5NzQwLCAiQ0JPWF9IT01FX01BUF9BRERSIiB9LAorICB7IDk3NDEsICJDQk9YX0hPTUVfTUFQX0RBVEEiIH0sCisgIHsgOTc0MiwgIkNCT1hfTU1BUF8wIiB9LAorICB7IDk3NDMsICJDQk9YX01NQVBfMSIgfSwKKyAgeyA5NzQ0LCAiQ0JPWF9NTUFQXzIiIH0sCisgIHsgOTc0NSwgIkNCT1hfTU1BUF8zIiB9LAorICB7IDk3NDYsICJDQk9YX01TUiIgfSwKKyAgeyA5NzQ3LCAiRElBR19CQ1NUX0NUTCIgfSwKKyAgeyA5NzQ4LCAiRElBR19CQ1NUX01BU0siIH0sCisgIHsgOTc0OSwgIkRJQUdfQkNTVF9UUklHR0VSIiB9LAorICB7IDk3NTAsICJESUFHX01VWF9DVEwiIH0sCisgIHsgOTc1MSwgIkRJQUdfVFJBQ0VfQ1RMIiB9LAorICB7IDk3NTIsICJESUFHX1RSQUNFX0RBVEEiIH0sCisgIHsgOTc1MywgIkRJQUdfVFJBQ0VfU1RTIiB9LAorICB7IDk3NTQsICJJRE5fREVNVVhfQlVGX1RIUkVTSCIgfSwKKyAgeyA5NzU1LCAiTDFfSV9QSU5fV0FZXzAiIH0sCisgIHsgOTc1NiwgIk1FTV9ST1VURV9PUkRFUiIgfSwKKyAgeyA5NzU3LCAiTUVNX1NUUklQRV9DT05GSUciIH0sCisgIHsgOTc1OCwgIlBFUkZfQ09VTlRfUExTIiB9LAorICB7IDk3NTksICJQU0VVRE9fUkFORE9NX05VTUJFUl9NT0RJRlkiIH0sCisgIHsgOTc2MCwgIlFVSUVTQ0VfQ1RMIiB9LAorICB7IDk3NjEsICJSU0hJTV9DT09SRCIgfSwKKyAgeyA5NzYyLCAiU0JPWF9DT05GSUciIH0sCisgIHsgOTc2MywgIlVETl9ERU1VWF9CVUZfVEhSRVNIIiB9LAorICB7IDk3NjQsICJYRE5fQ09SRV9TVEFSVkFUSU9OX0NPVU5UIiB9LAorICB7IDk3NjUsICJYRE5fUk9VTkRfUk9CSU5fQVJCX0NUTCIgfSwKKyAgeyA5ODU2LCAiQ1lDTEVfTU9ESUZZIiB9LAorICB7IDk4NTcsICJJX0FBUiIgfSwKKyAgeyA5OTg0LCAiTVBMX1dPUkxEX0FDQ0VTU19TRVRfMCIgfSwKKyAgeyA5OTg1LCAiTVBMX1dPUkxEX0FDQ0VTU19TRVRfMSIgfSwKKyAgeyA5OTg2LCAiTVBMX1dPUkxEX0FDQ0VTU19TRVRfMiIgfSwKKyAgeyA5OTg3LCAiTVBMX1dPUkxEX0FDQ0VTU19TRVRfMyIgfSwKKyAgeyA5OTg4LCAiTVBMX1dPUkxEX0FDQ0VTUyIgfSwKKyAgeyA5OTg5LCAiRE9ORSIgfSwKKyAgeyA5OTkwLCAiRFNUUkVBTV9QRiIgfSwKKyAgeyA5OTkxLCAiRkFJTCIgfSwKKyAgeyA5OTkyLCAiSU5URVJSVVBUX0NSSVRJQ0FMX1NFQ1RJT04iIH0sCisgIHsgOTk5MywgIlBBU1MiIH0sCisgIHsgOTk5NCwgIlBTRVVET19SQU5ET01fTlVNQkVSIiB9LAorICB7IDk5OTUsICJUSUxFX0NPT1JEIiB9LAorICB7IDk5OTYsICJUSUxFX1JURl9IV00iIH0sCisgIHsgMTAxMTIsICJDTVBFWENIX1ZBTFVFIiB9LAorICB7IDEwMTEzLCAiQ1lDTEUiIH0sCisgIHsgMTAxMTQsICJFVkVOVF9CRUdJTiIgfSwKKyAgeyAxMDExNSwgIkVWRU5UX0VORCIgfSwKKyAgeyAxMDExNiwgIlBST0NfU1RBVFVTIiB9LAorICB7IDEwMTE3LCAiU0lNX0NPTlRST0wiIH0sCisgIHsgMTAxMTgsICJTSU1fU09DS0VUIiB9LAorICB7IDEwMTE5LCAiU1RBVFVTX1NBVFVSQVRFIiB9LAorICB7IDEwMjQwLCAiTVBMX0lfQVNJRF9TRVRfMCIgfSwKKyAgeyAxMDI0MSwgIk1QTF9JX0FTSURfU0VUXzEiIH0sCisgIHsgMTAyNDIsICJNUExfSV9BU0lEX1NFVF8yIiB9LAorICB7IDEwMjQzLCAiTVBMX0lfQVNJRF9TRVRfMyIgfSwKKyAgeyAxMDI0NCwgIk1QTF9JX0FTSUQiIH0sCisgIHsgMTAyNDUsICJJX0FTSUQiIH0sCisgIHsgMTA0OTYsICJNUExfRF9BU0lEX1NFVF8wIiB9LAorICB7IDEwNDk3LCAiTVBMX0RfQVNJRF9TRVRfMSIgfSwKKyAgeyAxMDQ5OCwgIk1QTF9EX0FTSURfU0VUXzIiIH0sCisgIHsgMTA0OTksICJNUExfRF9BU0lEX1NFVF8zIiB9LAorICB7IDEwNTAwLCAiTVBMX0RfQVNJRCIgfSwKKyAgeyAxMDUwMSwgIkRfQVNJRCIgfSwKKyAgeyAxMDc1MiwgIk1QTF9ET1VCTEVfRkFVTFRfU0VUXzAiIH0sCisgIHsgMTA3NTMsICJNUExfRE9VQkxFX0ZBVUxUX1NFVF8xIiB9LAorICB7IDEwNzU0LCAiTVBMX0RPVUJMRV9GQVVMVF9TRVRfMiIgfSwKKyAgeyAxMDc1NSwgIk1QTF9ET1VCTEVfRkFVTFRfU0VUXzMiIH0sCisgIHsgMTA3NTYsICJNUExfRE9VQkxFX0ZBVUxUIiB9LAorICB7IDEwNzU3LCAiTEFTVF9JTlRFUlJVUFRfUkVBU09OIiB9LAorfTsKKworY29uc3QgaW50IHRpbGVneF9udW1fc3BycyA9IDQ0MTsKKworY29uc3QgY2hhciAqCitnZXRfdGlsZWd4X3Nwcl9uYW1lIChpbnQgbnVtKQoreworICB2b2lkICpyZXN1bHQ7CisgIHN0cnVjdCB0aWxlZ3hfc3ByIGtleTsKKworICBrZXkubnVtYmVyID0gbnVtOworICByZXN1bHQgPSBic2VhcmNoKChjb25zdCB2b2lkICopICZrZXksIChjb25zdCB2b2lkICopIHRpbGVneF9zcHJzLAorICAgICAgICAgICAgICAgICAgIHRpbGVneF9udW1fc3Bycywgc2l6ZW9mIChzdHJ1Y3QgdGlsZWd4X3NwciksCisgICAgICAgICAgICAgICAgICAgdGlsZWd4X3Nwcl9jb21wYXJlKTsKKworICBpZiAocmVzdWx0ID09IE5VTEwpCisgIHsKKyAgICByZXR1cm4gKE5VTEwpOworICB9CisgIGVsc2UKKyAgeworICAgIHN0cnVjdCB0aWxlZ3hfc3ByICpyZXN1bHRfcHRyID0gKHN0cnVjdCB0aWxlZ3hfc3ByICopIHJlc3VsdDsKKyAgICByZXR1cm4gKHJlc3VsdF9wdHItPm5hbWUpOworICB9Cit9CisKK2ludAorcHJpbnRfaW5zbl90aWxlZ3ggKHVuc2lnbmVkIGNoYXIgKiBtZW1hZGRyKQoreworICBzdHJ1Y3QgdGlsZWd4X2RlY29kZWRfaW5zdHJ1Y3Rpb24KKyAgICBkZWNvZGVkW1RJTEVHWF9NQVhfSU5TVFJVQ1RJT05TX1BFUl9CVU5ETEVdOworICB1bnNpZ25lZCBjaGFyIG9wYnVmW1RJTEVHWF9CVU5ETEVfU0laRV9JTl9CWVRFU107CisgIGludCBpLCBudW1faW5zdHJ1Y3Rpb25zLCBudW1fcHJpbnRlZDsKKyAgdGlsZWd4X21uZW1vbmljIHBhZGRpbmdfbW5lbW9uaWM7CisKKyAgbWVtY3B5KCh2b2lkICopb3BidWYsICh2b2lkICopbWVtYWRkciwgVElMRUdYX0JVTkRMRV9TSVpFX0lOX0JZVEVTKTsKKworICAvKiBQYXJzZSB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBidW5kbGUuICovCisgIG51bV9pbnN0cnVjdGlvbnMgPQorICAgIHBhcnNlX2luc25fdGlsZWd4ICgqKHVuc2lnbmVkIGxvbmcgbG9uZyAqKW9wYnVmLCAodW5zaWduZWQgbG9uZyBsb25nKW1lbWFkZHIsIGRlY29kZWQpOworCisgIC8qIFByaW50IHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGJ1bmRsZS4gKi8KKyAgcHJpbnRmKCJ7ICIpOworICBudW1fcHJpbnRlZCA9IDA7CisKKyAgLyogRGV0ZXJtaW5lIHdoaWNoIG5vcCBvcGNvZGUgaXMgdXNlZCBmb3IgcGFkZGluZyBhbmQgc2hvdWxkIGJlIHNraXBwZWQuICovCisgIHBhZGRpbmdfbW5lbW9uaWMgPSBUSUxFR1hfT1BDX0ZOT1A7CisgIGZvciAoaSA9IDA7IGkgPCBudW1faW5zdHJ1Y3Rpb25zOyBpKyspCisgIHsKKyAgICBpZiAoIWRlY29kZWRbaV0ub3Bjb2RlLT5jYW5fYnVuZGxlKQorICAgIHsKKyAgICAgIC8qIEluc3RydWN0aW9ucyB0aGF0IGNhbm5vdCBiZSBidW5kbGVkIGFyZSBwYWRkZWQgb3V0IHdpdGggbm9wcywKKyAgICAgICAgIHJhdGhlciB0aGFuIGZub3BzLiBEaXNwbGF5aW5nIHRoZW0gaXMgYWx3YXlzIGNsdXR0ZXIuICovCisgICAgICBwYWRkaW5nX21uZW1vbmljID0gVElMRUdYX09QQ19OT1A7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworICBmb3IgKGkgPSAwOyBpIDwgbnVtX2luc3RydWN0aW9uczsgaSsrKQorICB7CisgICAgY29uc3Qgc3RydWN0IHRpbGVneF9vcGNvZGUgKm9wY29kZSA9IGRlY29kZWRbaV0ub3Bjb2RlOworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgaW50IGo7CisKKyAgICAvKiBEbyBub3QgcHJpbnQgb3V0IGZub3BzLCB1bmxlc3MgZXZlcnl0aGluZyBpcyBhbiBmbm9wLCBpbgorICAgICAgIHdoaWNoIGNhc2Ugd2Ugd2lsbCBwcmludCBvdXQganVzdCB0aGUgbGFzdCBvbmUuICovCisgICAgaWYgKG9wY29kZS0+bW5lbW9uaWMgPT0gcGFkZGluZ19tbmVtb25pYworICAgICAgICAmJiAobnVtX3ByaW50ZWQgPiAwIHx8IGkgKyAxIDwgbnVtX2luc3RydWN0aW9ucykpCisgICAgICBjb250aW51ZTsKKworICAgIGlmIChudW1fcHJpbnRlZCA+IDApCisgICAgICBwcmludGYoIiA7ICIpOworICAgICsrbnVtX3ByaW50ZWQ7CisKKyAgICBuYW1lID0gb3Bjb2RlLT5uYW1lOworICAgIGlmIChuYW1lID09IE5VTEwpCisgICAgICBuYW1lID0gIjxpbnZhbGlkPiI7CisgICAgcHJpbnRmKCIlcyIsIG5hbWUpOworCisgICAgZm9yIChqID0gMDsgaiA8IG9wY29kZS0+bnVtX29wZXJhbmRzOyBqKyspCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG51bTsKKyAgICAgIGNvbnN0IHN0cnVjdCB0aWxlZ3hfb3BlcmFuZCAqb3A7CisgICAgICBjb25zdCBjaGFyICpzcHJfbmFtZTsKKworICAgICAgaWYgKGogPiAwKQorICAgICAgICBwcmludGYgKCIsIik7CisgICAgICBwcmludGYgKCIgIik7CisKKyAgICAgIG51bSA9IGRlY29kZWRbaV0ub3BlcmFuZF92YWx1ZXNbal07CisKKyAgICAgIG9wID0gZGVjb2RlZFtpXS5vcGVyYW5kc1tqXTsKKyAgICAgIHN3aXRjaCAob3AtPnR5cGUpCisgICAgICB7CisgICAgICBjYXNlIFRJTEVHWF9PUF9UWVBFX1JFR0lTVEVSOgorICAgICAgICBwcmludGYgKCIlcyIsIHRpbGVneF9yZWdpc3Rlcl9uYW1lc1soaW50KW51bV0pOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgVElMRUdYX09QX1RZUEVfU1BSOgorICAgICAgICBzcHJfbmFtZSA9IGdldF90aWxlZ3hfc3ByX25hbWUobnVtKTsKKyAgICAgICAgaWYgKHNwcl9uYW1lICE9IE5VTEwpCisgICAgICAgICAgcHJpbnRmICgiJXMiLCBzcHJfbmFtZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwcmludGYgKCIlZCIsIChpbnQpbnVtKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIFRJTEVHWF9PUF9UWVBFX0lNTUVESUFURToKKyAgICAgICAgcHJpbnRmICgiJWQiLCAoaW50KW51bSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBUSUxFR1hfT1BfVFlQRV9BRERSRVNTOgorICAgICAgICBwcmludGYgKCIweCUwMTZsbHgiLCBudW0pOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIGFib3J0ICgpOworICAgICAgfQorICAgIH0KKyAgfQorICBwcmludGYgKCIgfVxuIik7CisKKyAgcmV0dXJuIFRJTEVHWF9CVU5ETEVfU0laRV9JTl9CWVRFUzsKK30KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVRJTEVHWF82NC5jIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlVElMRUdYXzY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ0MDM5MgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVRJTEVHWF82NC5jCkBAIC0wLDAgKzEsMjU2MSBAQAorLyoKKyAqICAgIFN0YWNrLWxlc3MgSnVzdC1Jbi1UaW1lIGNvbXBpbGVyCisgKgorICogICAgQ29weXJpZ2h0IDIwMTMtMjAxMyBUaWxlcmEgQ29ycG9yYXRpb24oaml3YW5nQHRpbGVyYS5jb20pLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgQ29weXJpZ2h0IDIwMDktMjAxMiBab2x0YW4gSGVyY3plZyAoaHptZXN0ZXJAZnJlZW1haWwuaHUpLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgorICogICAgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdAorICogICAgICBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UCisgKiBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBUaWxlR1ggYXJjaGl0ZWN0dXJlLiAqLworLyogQ29udHJpYnV0ZWQgYnkgVGlsZXJhIENvcnBvcmF0aW9uLiAqLworI2luY2x1ZGUgInNsaml0TmF0aXZlVElMRUdYLWVuY29kZXIuYyIKKworI2RlZmluZSBTSU1NXzhCSVRfTUFYICgweDdmKQorI2RlZmluZSBTSU1NXzhCSVRfTUlOICgtMHg4MCkKKyNkZWZpbmUgU0lNTV8xNkJJVF9NQVggKDB4N2ZmZikKKyNkZWZpbmUgU0lNTV8xNkJJVF9NSU4gKC0weDgwMDApCisjZGVmaW5lIFNJTU1fMTdCSVRfTUFYICgweGZmZmYpCisjZGVmaW5lIFNJTU1fMTdCSVRfTUlOICgtMHgxMDAwMCkKKyNkZWZpbmUgU0lNTV8zMkJJVF9NQVggKDB4N2ZmZmZmZmYpCisjZGVmaW5lIFNJTU1fMzJCSVRfTUlOICgtMHg3ZmZmZmZmZiAtIDEpCisjZGVmaW5lIFNJTU1fNDhCSVRfTUFYICgweDdmZmZmZmZmMDAwMEwpCisjZGVmaW5lIFNJTU1fNDhCSVRfTUlOICgtMHg4MDAwMDAwMDAwMDBMKQorI2RlZmluZSBJTU0xNihpbW0pICgoaW1tKSAmIDB4ZmZmZikKKworI2RlZmluZSBVSU1NXzE2QklUX01BWCAoMHhmZmZmKQorCisjZGVmaW5lIFRNUF9SRUcxIChTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgMikKKyNkZWZpbmUgVE1QX1JFRzIgKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAzKQorI2RlZmluZSBUTVBfUkVHMyAoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDQpCisjZGVmaW5lIEFERFJfVE1QIChTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNSkKKyNkZWZpbmUgUElDX0FERFJfUkVHIFRNUF9SRUcyCisKK3N0YXRpYyBTTEpJVF9DT05TVCBzbGppdF91YiByZWdfbWFwW1NMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyA2XSA9IHsKKwk2MywgMCwgMSwgMiwgMywgNCwgMzAsIDMxLCAzMiwgMzMsIDM0LCA1NCwgNSwgMTYsIDYsIDcKK307CisKKyNkZWZpbmUgU0xKSVRfTE9DQUxTX1JFR19tYXBwZWQgNTQKKyNkZWZpbmUgVE1QX1JFRzFfbWFwcGVkIDUKKyNkZWZpbmUgVE1QX1JFRzJfbWFwcGVkIDE2CisjZGVmaW5lIFRNUF9SRUczX21hcHBlZCA2CisjZGVmaW5lIEFERFJfVE1QX21hcHBlZCA3CisKKy8qIEZsYWdzIGFyZSBrZWVwdCBpbiB2b2xhdGlsZSByZWdpc3RlcnMuICovCisjZGVmaW5lIEVRVUFMX0ZMQUcgOAorLyogQW5kIGNhcnJ5IGZsYWcgYXMgd2VsbC4gKi8KKyNkZWZpbmUgVUxFU1NfRkxBRyA5CisjZGVmaW5lIFVHUkVBVEVSX0ZMQUcgMTAKKyNkZWZpbmUgTEVTU19GTEFHIDExCisjZGVmaW5lIEdSRUFURVJfRkxBRyAxMgorI2RlZmluZSBPVkVSRkxPV19GTEFHIDEzCisKKyNkZWZpbmUgWkVSTyA2MworI2RlZmluZSBSQSA1NQorI2RlZmluZSBUTVBfRVJFRzEgMTQKKyNkZWZpbmUgVE1QX0VSRUcyIDE1CisKKyNkZWZpbmUgTE9BRF9EQVRBIDB4MDEKKyNkZWZpbmUgV09SRF9EQVRBIDB4MDAKKyNkZWZpbmUgQllURV9EQVRBIDB4MDIKKyNkZWZpbmUgSEFMRl9EQVRBIDB4MDQKKyNkZWZpbmUgSU5UX0RBVEEgMHgwNgorI2RlZmluZSBTSUdORURfREFUQSAweDA4CisjZGVmaW5lIERPVUJMRV9EQVRBIDB4MTAKKworLyogU2VwYXJhdGVzIGludGVnZXIgYW5kIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLworI2RlZmluZSBHUFJfUkVHIDB4ZgorCisjZGVmaW5lIE1FTV9NQVNLIDB4MWYKKworI2RlZmluZSBXUklURV9CQUNLIDB4MDAwMjAKKyNkZWZpbmUgQVJHX1RFU1QgMHgwMDA0MAorI2RlZmluZSBBTFRfS0VFUF9DQUNIRSAweDAwMDgwCisjZGVmaW5lIENVTVVMQVRJVkVfT1AgMHgwMDEwMAorI2RlZmluZSBMT0dJQ0FMX09QIDB4MDAyMDAKKyNkZWZpbmUgSU1NX09QIDB4MDA0MDAKKyNkZWZpbmUgU1JDMl9JTU0gMHgwMDgwMAorCisjZGVmaW5lIFVOVVNFRF9ERVNUIDB4MDEwMDAKKyNkZWZpbmUgUkVHX0RFU1QgMHgwMjAwMAorI2RlZmluZSBSRUcxX1NPVVJDRSAweDA0MDAwCisjZGVmaW5lIFJFRzJfU09VUkNFIDB4MDgwMDAKKyNkZWZpbmUgU0xPV19TUkMxIDB4MTAwMDAKKyNkZWZpbmUgU0xPV19TUkMyIDB4MjAwMDAKKyNkZWZpbmUgU0xPV19ERVNUIDB4NDAwMDAKKworLyogT25seSB0aGVzZSBmbGFncyBhcmUgc2V0LiBVTlVTRURfREVTVCBpcyBub3Qgc2V0IHdoZW4gbm8gZmxhZ3Mgc2hvdWxkIGJlIHNldC4KKyAqLworI2RlZmluZSBDSEVDS19GTEFHUyhsaXN0KSAoIShmbGFncyAmIFVOVVNFRF9ERVNUKSB8fCAob3AgJiBHRVRfRkxBR1MofihsaXN0KSkpKQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgU0xKSVRfQ09OU1QgY2hhciAqc2xqaXRfZ2V0X3BsYXRmb3JtX25hbWUodm9pZCkKK3sKKwlyZXR1cm4gIlRpbGVHWCIgU0xKSVRfQ1BVSU5GTzsKK30KKworLyogTGVuZ3RoIG9mIGFuIGluc3RydWN0aW9uIHdvcmQgKi8KK3R5cGVkZWYgc2xqaXRfdXcgc2xqaXRfaW5zOworCitzdHJ1Y3Qgaml0X2luc3RyIHsKKwljb25zdCBzdHJ1Y3QgdGlsZWd4X29wY29kZSogb3Bjb2RlOyAKKwl0aWxlZ3hfcGlwZWxpbmUgcGlwZTsKKwl1bnNpZ25lZCBsb25nIGlucHV0X3JlZ2lzdGVyczsKKwl1bnNpZ25lZCBsb25nIG91dHB1dF9yZWdpc3RlcnM7CisJaW50IG9wZXJhbmRfdmFsdWVbNF07CisJaW50IGxpbmU7Cit9OworCisvKiBPcGNvZGUgSGVscGVyIE1hY3JvcyAqLworI2RlZmluZSBUSUxFR1hfWF9NT0RFIDAKKworI2RlZmluZSBYX01PREUgY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkKKworI2RlZmluZSBGTk9QX1gwIFwKKwljcmVhdGVfT3Bjb2RlX1gwKFJSUl8wX09QQ09ERV9YMCkgfCBcCisJY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMChVTkFSWV9SUlJfMF9PUENPREVfWDApIHwgXAorCWNyZWF0ZV9VbmFyeU9wY29kZUV4dGVuc2lvbl9YMChGTk9QX1VOQVJZX09QQ09ERV9YMCkKKworI2RlZmluZSBGTk9QX1gxIFwKKwljcmVhdGVfT3Bjb2RlX1gxKFJSUl8wX09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMShVTkFSWV9SUlJfMF9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9VbmFyeU9wY29kZUV4dGVuc2lvbl9YMShGTk9QX1VOQVJZX09QQ09ERV9YMSkKKworI2RlZmluZSBOT1AgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgRk5PUF9YMCB8IEZOT1BfWDEKKworI2RlZmluZSBBTk9QX1gwIFwKKwljcmVhdGVfT3Bjb2RlX1gwKFJSUl8wX09QQ09ERV9YMCkgfCBcCisJY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMChVTkFSWV9SUlJfMF9PUENPREVfWDApIHwgXAorCWNyZWF0ZV9VbmFyeU9wY29kZUV4dGVuc2lvbl9YMChOT1BfVU5BUllfT1BDT0RFX1gwKQorCisjZGVmaW5lIEJQVCBjcmVhdGVfTW9kZShUSUxFR1hfWF9NT0RFKSB8IGNyZWF0ZV9PcGNvZGVfWDEoUlJSXzBfT1BDT0RFX1gxKSB8IFwKKwljcmVhdGVfUlJST3Bjb2RlRXh0ZW5zaW9uX1gxKFVOQVJZX1JSUl8wX09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX1VuYXJ5T3Bjb2RlRXh0ZW5zaW9uX1gxKElMTF9VTkFSWV9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9EZXN0X1gxKDB4MUMpIHwgY3JlYXRlX1NyY0FfWDEoMHgyNSkgfCBBTk9QX1gwCisKKyNkZWZpbmUgQUREX1gxIFwKKwljcmVhdGVfTW9kZShUSUxFR1hfWF9NT0RFKSB8IGNyZWF0ZV9PcGNvZGVfWDEoUlJSXzBfT1BDT0RFX1gxKSB8IFwKKwljcmVhdGVfUlJST3Bjb2RlRXh0ZW5zaW9uX1gxKEFERF9SUlJfMF9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIEFERElfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShJTU04X09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX0ltbThPcGNvZGVFeHRlbnNpb25fWDEoQURESV9JTU04X09QQ09ERV9YMSkgfCBGTk9QX1gwCisKKyNkZWZpbmUgU1VCX1gxIFwKKwljcmVhdGVfTW9kZShUSUxFR1hfWF9NT0RFKSB8IGNyZWF0ZV9PcGNvZGVfWDEoUlJSXzBfT1BDT0RFX1gxKSB8IFwKKwljcmVhdGVfUlJST3Bjb2RlRXh0ZW5zaW9uX1gxKFNVQl9SUlJfMF9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIE5PUl9YMSBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gxKFJSUl8wX09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMShOT1JfUlJSXzBfT1BDT0RFX1gxKSB8IEZOT1BfWDAKKworI2RlZmluZSBPUl9YMSBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gxKFJSUl8wX09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMShPUl9SUlJfMF9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIEFORF9YMSBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gxKFJSUl8wX09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMShBTkRfUlJSXzBfT1BDT0RFX1gxKSB8IEZOT1BfWDAKKworI2RlZmluZSBYT1JfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShSUlJfMF9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDEoWE9SX1JSUl8wX09QQ09ERV9YMSkgfCBGTk9QX1gwCisKKyNkZWZpbmUgQ01PVk5FWl9YMCBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gwKFJSUl8wX09QQ09ERV9YMCkgfCBcCisJY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMChDTU9WTkVaX1JSUl8wX09QQ09ERV9YMCkgfCBGTk9QX1gxCisKKyNkZWZpbmUgQ01PVkVRWl9YMCBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gwKFJSUl8wX09QQ09ERV9YMCkgfCBcCisJY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMChDTU9WRVFaX1JSUl8wX09QQ09ERV9YMCkgfCBGTk9QX1gxCisKKyNkZWZpbmUgQURETElfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShBRERMSV9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIFY0SU5UX0xfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShSUlJfMF9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDEoVjRJTlRfTF9SUlJfMF9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIEJGRVhUVV9YMCBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gwKEJGX09QQ09ERV9YMCkgfCBcCisJY3JlYXRlX0JGT3Bjb2RlRXh0ZW5zaW9uX1gwKEJGRVhUVV9CRl9PUENPREVfWDApIHwgRk5PUF9YMQorCisjZGVmaW5lIEJGRVhUU19YMCBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gwKEJGX09QQ09ERV9YMCkgfCBcCisJY3JlYXRlX0JGT3Bjb2RlRXh0ZW5zaW9uX1gwKEJGRVhUU19CRl9PUENPREVfWDApIHwgRk5PUF9YMQorCisjZGVmaW5lIFNITDE2SU5TTElfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShTSEwxNklOU0xJX09QQ09ERV9YMSkgfCBGTk9QX1gwCisKKyNkZWZpbmUgU1RfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShSUlJfMF9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDEoU1RfUlJSXzBfT1BDT0RFX1gxKSB8IGNyZWF0ZV9EZXN0X1gxKDB4MCkgfCBGTk9QX1gwCisKKyNkZWZpbmUgTERfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShSUlJfMF9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDEoVU5BUllfUlJSXzBfT1BDT0RFX1gxKSB8IFwKKwljcmVhdGVfVW5hcnlPcGNvZGVFeHRlbnNpb25fWDEoTERfVU5BUllfT1BDT0RFX1gxKSB8IEZOT1BfWDAKKworI2RlZmluZSBKUl9YMSBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gxKFJSUl8wX09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMShVTkFSWV9SUlJfMF9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9VbmFyeU9wY29kZUV4dGVuc2lvbl9YMShKUl9VTkFSWV9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIEpBTFJfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShSUlJfMF9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDEoVU5BUllfUlJSXzBfT1BDT0RFX1gxKSB8IFwKKwljcmVhdGVfVW5hcnlPcGNvZGVFeHRlbnNpb25fWDEoSkFMUl9VTkFSWV9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIENMWl9YMCBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gwKFJSUl8wX09QQ09ERV9YMCkgfCBcCisJY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMChVTkFSWV9SUlJfMF9PUENPREVfWDApIHwgXAorCWNyZWF0ZV9VbmFyeU9wY29kZUV4dGVuc2lvbl9YMChDTlRMWl9VTkFSWV9PUENPREVfWDApIHwgRk5PUF9YMQorCisjZGVmaW5lIENNUExUVUlfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShJTU04X09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX0ltbThPcGNvZGVFeHRlbnNpb25fWDEoQ01QTFRVSV9JTU04X09QQ09ERV9YMSkgfCBGTk9QX1gwCisKKyNkZWZpbmUgQ01QTFRVX1gxIFwKKwljcmVhdGVfTW9kZShUSUxFR1hfWF9NT0RFKSB8IGNyZWF0ZV9PcGNvZGVfWDEoUlJSXzBfT1BDT0RFX1gxKSB8IFwKKwljcmVhdGVfUlJST3Bjb2RlRXh0ZW5zaW9uX1gxKENNUExUVV9SUlJfMF9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIENNUExUU19YMSBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gxKFJSUl8wX09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX1JSUk9wY29kZUV4dGVuc2lvbl9YMShDTVBMVFNfUlJSXzBfT1BDT0RFX1gxKSB8IEZOT1BfWDAKKworI2RlZmluZSBYT1JJX1gxIFwKKwljcmVhdGVfTW9kZShUSUxFR1hfWF9NT0RFKSB8IGNyZWF0ZV9PcGNvZGVfWDEoSU1NOF9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9JbW04T3Bjb2RlRXh0ZW5zaW9uX1gxKFhPUklfSU1NOF9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIE9SSV9YMSBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gxKElNTThfT1BDT0RFX1gxKSB8IFwKKwljcmVhdGVfSW1tOE9wY29kZUV4dGVuc2lvbl9YMShPUklfSU1NOF9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIEFORElfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShJTU04X09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX0ltbThPcGNvZGVFeHRlbnNpb25fWDEoQU5ESV9JTU04X09QQ09ERV9YMSkgfCBGTk9QX1gwCisKKyNkZWZpbmUgU0hMSV9YMSBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gxKFNISUZUX09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX1NoaWZ0T3Bjb2RlRXh0ZW5zaW9uX1gxKFNITElfU0hJRlRfT1BDT0RFX1gxKSB8IEZOT1BfWDAKKworI2RlZmluZSBTSExfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShSUlJfMF9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDEoU0hMX1JSUl8wX09QQ09ERV9YMSkgfCBGTk9QX1gwCisKKyNkZWZpbmUgU0hSU0lfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShTSElGVF9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9TaGlmdE9wY29kZUV4dGVuc2lvbl9YMShTSFJTSV9TSElGVF9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIFNIUlNfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShSUlJfMF9PUENPREVfWDEpIHwgXAorCWNyZWF0ZV9SUlJPcGNvZGVFeHRlbnNpb25fWDEoU0hSU19SUlJfMF9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIFNIUlVJX1gxIFwKKwljcmVhdGVfTW9kZShUSUxFR1hfWF9NT0RFKSB8IGNyZWF0ZV9PcGNvZGVfWDEoU0hJRlRfT1BDT0RFX1gxKSB8IFwKKwljcmVhdGVfU2hpZnRPcGNvZGVFeHRlbnNpb25fWDEoU0hSVUlfU0hJRlRfT1BDT0RFX1gxKSB8IEZOT1BfWDAKKworI2RlZmluZSBTSFJVX1gxIFwKKwljcmVhdGVfTW9kZShUSUxFR1hfWF9NT0RFKSB8IGNyZWF0ZV9PcGNvZGVfWDEoUlJSXzBfT1BDT0RFX1gxKSB8IFwKKwljcmVhdGVfUlJST3Bjb2RlRXh0ZW5zaW9uX1gxKFNIUlVfUlJSXzBfT1BDT0RFX1gxKSB8IEZOT1BfWDAKKworI2RlZmluZSBCRVFaX1gxIFwKKwljcmVhdGVfTW9kZShUSUxFR1hfWF9NT0RFKSB8IGNyZWF0ZV9PcGNvZGVfWDEoQlJBTkNIX09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX0JyVHlwZV9YMShCRVFaX0JSQU5DSF9PUENPREVfWDEpIHwgRk5PUF9YMAorCisjZGVmaW5lIEJORVpfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShCUkFOQ0hfT1BDT0RFX1gxKSB8IFwKKwljcmVhdGVfQnJUeXBlX1gxKEJORVpfQlJBTkNIX09QQ09ERV9YMSkgfCBGTk9QX1gwCisKKyNkZWZpbmUgSl9YMSBcCisJY3JlYXRlX01vZGUoVElMRUdYX1hfTU9ERSkgfCBjcmVhdGVfT3Bjb2RlX1gxKEpVTVBfT1BDT0RFX1gxKSB8IFwKKwljcmVhdGVfSnVtcE9wY29kZUV4dGVuc2lvbl9YMShKX0pVTVBfT1BDT0RFX1gxKSB8IEZOT1BfWDAKKworI2RlZmluZSBKQUxfWDEgXAorCWNyZWF0ZV9Nb2RlKFRJTEVHWF9YX01PREUpIHwgY3JlYXRlX09wY29kZV9YMShKVU1QX09QQ09ERV9YMSkgfCBcCisJY3JlYXRlX0p1bXBPcGNvZGVFeHRlbnNpb25fWDEoSkFMX0pVTVBfT1BDT0RFX1gxKSB8IEZOT1BfWDAKKworI2RlZmluZSBERVNUX1gwKHgpIGNyZWF0ZV9EZXN0X1gwKHgpCisjZGVmaW5lIFNSQ0FfWDAoeCkgY3JlYXRlX1NyY0FfWDAoeCkKKyNkZWZpbmUgU1JDQl9YMCh4KSBjcmVhdGVfU3JjQl9YMCh4KQorI2RlZmluZSBERVNUX1gxKHgpIGNyZWF0ZV9EZXN0X1gxKHgpCisjZGVmaW5lIFNSQ0FfWDEoeCkgY3JlYXRlX1NyY0FfWDEoeCkKKyNkZWZpbmUgU1JDQl9YMSh4KSBjcmVhdGVfU3JjQl9YMSh4KQorI2RlZmluZSBJTU0xNl9YMSh4KSBjcmVhdGVfSW1tMTZfWDEoeCkKKyNkZWZpbmUgSU1NOF9YMSh4KSBjcmVhdGVfSW1tOF9YMSh4KQorI2RlZmluZSBCRlNUQVJUX1gwKHgpIGNyZWF0ZV9CRlN0YXJ0X1gwKHgpCisjZGVmaW5lIEJGRU5EX1gwKHgpIGNyZWF0ZV9CRkVuZF9YMCh4KQorI2RlZmluZSBTSElGVElNTV9YMSh4KSBjcmVhdGVfU2hBbXRfWDEoeCkKKyNkZWZpbmUgSk9GRl9YMSh4KSBjcmVhdGVfSnVtcE9mZl9YMSh4KQorI2RlZmluZSBCT0ZGX1gxKHgpIGNyZWF0ZV9Cck9mZl9YMSh4KQorCitzdGF0aWMgU0xKSVRfQ09OU1QgdGlsZWd4X21uZW1vbmljIGRhdGFfdHJhbnNmZXJfaW5zdHNbMTZdID0geworCS8qIHUgdyBzICovIFRJTEVHWF9PUENfU1QgICAvKiBzdCAqLywKKwkvKiB1IHcgbCAqLyBUSUxFR1hfT1BDX0xEICAgLyogbGQgKi8sCisJLyogdSBiIHMgKi8gVElMRUdYX09QQ19TVDEgIC8qIHN0MSAqLywKKwkvKiB1IGIgbCAqLyBUSUxFR1hfT1BDX0xEMVUgLyogbGQxdSAqLywKKwkvKiB1IGggcyAqLyBUSUxFR1hfT1BDX1NUMiAgLyogc3QyICovLAorCS8qIHUgaCBsICovIFRJTEVHWF9PUENfTEQyVSAvKiBsZDJ1ICovLAorCS8qIHUgaSBzICovIFRJTEVHWF9PUENfU1Q0ICAvKiBzdDQgKi8sCisJLyogdSBpIGwgKi8gVElMRUdYX09QQ19MRDRVIC8qIGxkNHUgKi8sCisJLyogcyB3IHMgKi8gVElMRUdYX09QQ19TVCAgIC8qIHN0ICovLAorCS8qIHMgdyBsICovIFRJTEVHWF9PUENfTEQgICAvKiBsZCAqLywKKwkvKiBzIGIgcyAqLyBUSUxFR1hfT1BDX1NUMSAgLyogc3QxICovLAorCS8qIHMgYiBsICovIFRJTEVHWF9PUENfTEQxUyAvKiBsZDFzICovLAorCS8qIHMgaCBzICovIFRJTEVHWF9PUENfU1QyICAvKiBzdDIgKi8sCisJLyogcyBoIGwgKi8gVElMRUdYX09QQ19MRDJTIC8qIGxkMnMgKi8sCisJLyogcyBpIHMgKi8gVElMRUdYX09QQ19TVDQgIC8qIHN0NCAqLywKKwkvKiBzIGkgbCAqLyBUSUxFR1hfT1BDX0xENFMgLyogbGQ0cyAqLywKK307CisKKyNpZmRlZiBUSUxFR1hfSklUX0RFQlVHCitzdGF0aWMgc2xqaXRfc2kgcHVzaF9pbnN0X2RlYnVnKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X2lucyBpbnMsIGludCBsaW5lKQoreworCXNsaml0X2lucyAqcHRyID0gKHNsaml0X2lucyAqKWVuc3VyZV9idWYoY29tcGlsZXIsIHNpemVvZihzbGppdF9pbnMpKTsKKwlGQUlMX0lGKCFwdHIpOworCSpwdHIgPSBpbnM7CisJY29tcGlsZXItPnNpemUrKzsKKwlwcmludGYoInwlMDRkfFMwfDpcdFx0IiwgbGluZSk7CisJcHJpbnRfaW5zbl90aWxlZ3gocHRyKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIHNsaml0X3NpIHB1c2hfaW5zdF9ub2RlYnVnKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X2lucyBpbnMpCit7CisJc2xqaXRfaW5zICpwdHIgPSAoc2xqaXRfaW5zICopZW5zdXJlX2J1Zihjb21waWxlciwgc2l6ZW9mKHNsaml0X2lucykpOworCUZBSUxfSUYoIXB0cik7CisJKnB0ciA9IGluczsKKwljb21waWxlci0+c2l6ZSsrOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCisjZGVmaW5lIHB1c2hfaW5zdChhLCBiKSBwdXNoX2luc3RfZGVidWcoYSwgYiwgX19MSU5FX18pCisjZWxzZQorc3RhdGljIHNsaml0X3NpIHB1c2hfaW5zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9pbnMgaW5zKQoreworCXNsaml0X2lucyAqcHRyID0gKHNsaml0X2lucyAqKWVuc3VyZV9idWYoY29tcGlsZXIsIHNpemVvZihzbGppdF9pbnMpKTsKKwlGQUlMX0lGKCFwdHIpOworCSpwdHIgPSBpbnM7CisJY29tcGlsZXItPnNpemUrKzsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKyNlbmRpZgorCisjZGVmaW5lIEJVTkRMRV9GT1JNQVRfTUFTSyhwMCwgcDEsIHAyKSBcCisJKChwMCkgfCAoKHAxKSA8PCA4KSB8ICgocDIpIDw8IDE2KSkKKworI2RlZmluZSBCVU5ETEVfRk9STUFUKHAwLCBwMSwgcDIpIFwKKwl7IFwKKwkJeyBcCisJCQkodGlsZWd4X3BpcGVsaW5lKShwMCksIFwKKwkJCSh0aWxlZ3hfcGlwZWxpbmUpKHAxKSwgXAorCQkJKHRpbGVneF9waXBlbGluZSkocDIpIFwKKwkJfSwgXAorCQlCVU5ETEVfRk9STUFUX01BU0soMSA8PCAocDApLCAxIDw8IChwMSksICgxIDw8IChwMikpKSBcCisJfQorCisjZGVmaW5lIE5PX1BJUEVMSU5FIFRJTEVHWF9OVU1fUElQRUxJTkVfRU5DT0RJTkdTCisKKyNkZWZpbmUgdGlsZWd4X2lzX3hfcGlwZWxpbmUocCkgKChpbnQpKHApIDw9IChpbnQpVElMRUdYX1BJUEVMSU5FX1gxKQorCisjZGVmaW5lIFBJKGVuY29kaW5nKSBcCisJcHVzaF9pbnN0KGNvbXBpbGVyLCBlbmNvZGluZykKKworI2RlZmluZSBQQjMob3Bjb2RlLCBkc3QsIHNyY2EsIHNyY2IpIFwKKwlwdXNoXzNfYnVmZmVyKGNvbXBpbGVyLCBvcGNvZGUsIGRzdCwgc3JjYSwgc3JjYiwgX19MSU5FX18pCisKKyNkZWZpbmUgUEIyKG9wY29kZSwgZHN0LCBzcmMpIFwKKwlwdXNoXzJfYnVmZmVyKGNvbXBpbGVyLCBvcGNvZGUsIGRzdCwgc3JjLCBfX0xJTkVfXykKKworI2RlZmluZSBKUihyZWcpIFwKKwlwdXNoX2pyX2J1ZmZlcihjb21waWxlciwgVElMRUdYX09QQ19KUiwgcmVnLCBfX0xJTkVfXykKKworI2RlZmluZSBBREQoZHN0LCBzcmNhLCBzcmNiKSBcCisJcHVzaF8zX2J1ZmZlcihjb21waWxlciwgVElMRUdYX09QQ19BREQsIGRzdCwgc3JjYSwgc3JjYiwgX19MSU5FX18pCisKKyNkZWZpbmUgU1VCKGRzdCwgc3JjYSwgc3JjYikgXAorCXB1c2hfM19idWZmZXIoY29tcGlsZXIsIFRJTEVHWF9PUENfU1VCLCBkc3QsIHNyY2EsIHNyY2IsIF9fTElORV9fKQorCisjZGVmaW5lIE1VTChkc3QsIHNyY2EsIHNyY2IpIFwKKwlwdXNoXzNfYnVmZmVyKGNvbXBpbGVyLCBUSUxFR1hfT1BDX01VTFgsIGRzdCwgc3JjYSwgc3JjYiwgX19MSU5FX18pCisKKyNkZWZpbmUgTk9SKGRzdCwgc3JjYSwgc3JjYikgXAorCXB1c2hfM19idWZmZXIoY29tcGlsZXIsIFRJTEVHWF9PUENfTk9SLCBkc3QsIHNyY2EsIHNyY2IsIF9fTElORV9fKQorCisjZGVmaW5lIE9SKGRzdCwgc3JjYSwgc3JjYikgXAorCXB1c2hfM19idWZmZXIoY29tcGlsZXIsIFRJTEVHWF9PUENfT1IsIGRzdCwgc3JjYSwgc3JjYiwgX19MSU5FX18pCisKKyNkZWZpbmUgWE9SKGRzdCwgc3JjYSwgc3JjYikgXAorCXB1c2hfM19idWZmZXIoY29tcGlsZXIsIFRJTEVHWF9PUENfWE9SLCBkc3QsIHNyY2EsIHNyY2IsIF9fTElORV9fKQorCisjZGVmaW5lIEFORChkc3QsIHNyY2EsIHNyY2IpIFwKKwlwdXNoXzNfYnVmZmVyKGNvbXBpbGVyLCBUSUxFR1hfT1BDX0FORCwgZHN0LCBzcmNhLCBzcmNiLCBfX0xJTkVfXykKKworI2RlZmluZSBDTFooZHN0LCBzcmMpIFwKKwlwdXNoXzJfYnVmZmVyKGNvbXBpbGVyLCBUSUxFR1hfT1BDX0NMWiwgZHN0LCBzcmMsIF9fTElORV9fKQorCisjZGVmaW5lIFNITEkoZHN0LCBzcmNhLCBzcmNiKSBcCisJcHVzaF8zX2J1ZmZlcihjb21waWxlciwgVElMRUdYX09QQ19TSExJLCBkc3QsIHNyY2EsIHNyY2IsIF9fTElORV9fKQorCisjZGVmaW5lIFNIUlVJKGRzdCwgc3JjYSwgaW1tKSBcCisJcHVzaF8zX2J1ZmZlcihjb21waWxlciwgVElMRUdYX09QQ19TSFJVSSwgZHN0LCBzcmNhLCBpbW0sIF9fTElORV9fKQorCisjZGVmaW5lIFhPUkkoZHN0LCBzcmNhLCBpbW0pIFwKKwlwdXNoXzNfYnVmZmVyKGNvbXBpbGVyLCBUSUxFR1hfT1BDX1hPUkksIGRzdCwgc3JjYSwgaW1tLCBfX0xJTkVfXykKKworI2RlZmluZSBPUkkoZHN0LCBzcmNhLCBpbW0pIFwKKwlwdXNoXzNfYnVmZmVyKGNvbXBpbGVyLCBUSUxFR1hfT1BDX09SSSwgZHN0LCBzcmNhLCBpbW0sIF9fTElORV9fKQorCisjZGVmaW5lIENNUExUVShkc3QsIHNyY2EsIHNyY2IpIFwKKwlwdXNoXzNfYnVmZmVyKGNvbXBpbGVyLCBUSUxFR1hfT1BDX0NNUExUVSwgZHN0LCBzcmNhLCBzcmNiLCBfX0xJTkVfXykKKworI2RlZmluZSBDTVBMVFMoZHN0LCBzcmNhLCBzcmNiKSBcCisJcHVzaF8zX2J1ZmZlcihjb21waWxlciwgVElMRUdYX09QQ19DTVBMVFMsIGRzdCwgc3JjYSwgc3JjYiwgX19MSU5FX18pCisKKyNkZWZpbmUgQ01QTFRVSShkc3QsIHNyY2EsIGltbSkgXAorCXB1c2hfM19idWZmZXIoY29tcGlsZXIsIFRJTEVHWF9PUENfQ01QTFRVSSwgZHN0LCBzcmNhLCBpbW0sIF9fTElORV9fKQorCisjZGVmaW5lIENNT1ZORVooZHN0LCBzcmNhLCBzcmNiKSBcCisJcHVzaF8zX2J1ZmZlcihjb21waWxlciwgVElMRUdYX09QQ19DTU9WTkVaLCBkc3QsIHNyY2EsIHNyY2IsIF9fTElORV9fKQorCisjZGVmaW5lIENNT1ZFUVooZHN0LCBzcmNhLCBzcmNiKSBcCisJcHVzaF8zX2J1ZmZlcihjb21waWxlciwgVElMRUdYX09QQ19DTU9WRVFaLCBkc3QsIHNyY2EsIHNyY2IsIF9fTElORV9fKQorCisjZGVmaW5lIEFERExJKGRzdCwgc3JjYSwgc3JjYikgXAorCXB1c2hfM19idWZmZXIoY29tcGlsZXIsIFRJTEVHWF9PUENfQURETEksIGRzdCwgc3JjYSwgc3JjYiwgX19MSU5FX18pCisKKyNkZWZpbmUgU0hMMTZJTlNMSShkc3QsIHNyY2EsIHNyY2IpIFwKKwlwdXNoXzNfYnVmZmVyKGNvbXBpbGVyLCBUSUxFR1hfT1BDX1NITDE2SU5TTEksIGRzdCwgc3JjYSwgc3JjYiwgX19MSU5FX18pCisKKyNkZWZpbmUgTERfQUREKGRzdCwgYWRkciwgYWRqdXN0KSBcCisJcHVzaF8zX2J1ZmZlcihjb21waWxlciwgVElMRUdYX09QQ19MRF9BREQsIGRzdCwgYWRkciwgYWRqdXN0LCBfX0xJTkVfXykKKworI2RlZmluZSBTVF9BREQoc3JjLCBhZGRyLCBhZGp1c3QpIFwKKwlwdXNoXzNfYnVmZmVyKGNvbXBpbGVyLCBUSUxFR1hfT1BDX1NUX0FERCwgc3JjLCBhZGRyLCBhZGp1c3QsIF9fTElORV9fKQorCisjZGVmaW5lIExEKGRzdCwgYWRkcikgXAorCXB1c2hfMl9idWZmZXIoY29tcGlsZXIsIFRJTEVHWF9PUENfTEQsIGRzdCwgYWRkciwgX19MSU5FX18pCisKKyNkZWZpbmUgQkZFWFRVKGRzdCwgc3JjLCBzdGFydCwgZW5kKSBcCisJcHVzaF80X2J1ZmZlcihjb21waWxlciwgVElMRUdYX09QQ19CRkVYVFUsIGRzdCwgc3JjLCBzdGFydCwgZW5kLCBfX0xJTkVfXykKKworI2RlZmluZSBCRkVYVFMoZHN0LCBzcmMsIHN0YXJ0LCBlbmQpIFwKKwlwdXNoXzRfYnVmZmVyKGNvbXBpbGVyLCBUSUxFR1hfT1BDX0JGRVhUUywgZHN0LCBzcmMsIHN0YXJ0LCBlbmQsIF9fTElORV9fKQorCisjZGVmaW5lIEFERF9TT0xPKGRlc3QsIHNyY2EsIHNyY2IpIFwKKwlwdXNoX2luc3QoY29tcGlsZXIsIEFERF9YMSB8IERFU1RfWDEoZGVzdCkgfCBTUkNBX1gxKHNyY2EpIHwgU1JDQl9YMShzcmNiKSkKKworI2RlZmluZSBBRERJX1NPTE8oZGVzdCwgc3JjYSwgaW1tKSBcCisJcHVzaF9pbnN0KGNvbXBpbGVyLCBBRERJX1gxIHwgREVTVF9YMShkZXN0KSB8IFNSQ0FfWDEoc3JjYSkgfCBJTU04X1gxKGltbSkpCisKKyNkZWZpbmUgQURETElfU09MTyhkZXN0LCBzcmNhLCBpbW0pIFwKKwlwdXNoX2luc3QoY29tcGlsZXIsIEFERExJX1gxIHwgREVTVF9YMShkZXN0KSB8IFNSQ0FfWDEoc3JjYSkgfCBJTU0xNl9YMShpbW0pKQorCisjZGVmaW5lIFNITDE2SU5TTElfU09MTyhkZXN0LCBzcmNhLCBpbW0pIFwKKwlwdXNoX2luc3QoY29tcGlsZXIsIFNITDE2SU5TTElfWDEgfCBERVNUX1gxKGRlc3QpIHwgU1JDQV9YMShzcmNhKSB8IElNTTE2X1gxKGltbSkpCisKKyNkZWZpbmUgSkFMUl9TT0xPKHJlZykgXAorCXB1c2hfaW5zdChjb21waWxlciwgSkFMUl9YMSB8IFNSQ0FfWDEocmVnKSkKKworI2RlZmluZSBKUl9TT0xPKHJlZykgXAorCXB1c2hfaW5zdChjb21waWxlciwgSlJfWDEgfCBTUkNBX1gxKHJlZykpCisKK3N0cnVjdCBGb3JtYXQgeworCS8qIE1hcHBpbmcgb2YgYnVuZGxlIGlzc3VlIHNsb3QgdG8gYXNzaWduZWQgcGlwZS4gKi8KKwl0aWxlZ3hfcGlwZWxpbmUgcGlwZVtUSUxFR1hfTUFYX0lOU1RSVUNUSU9OU19QRVJfQlVORExFXTsKKworCS8qIE1hc2sgb2YgcGlwZXMgdXNlZCBieSB0aGlzIGJ1bmRsZS4gKi8KKwl1bnNpZ25lZCBpbnQgcGlwZV9tYXNrOworfTsKKworY29uc3Qgc3RydWN0IEZvcm1hdCBmb3JtYXRzW10gPQoreworCS8qIEluIFkgZm9ybWF0IHdlIG11c3QgYWx3YXlzIGhhdmUgc29tZXRoaW5nIGluIFkyLCBzaW5jZSBpdCBoYXMKKwkqIG5vIGZub3AsIHNvIHRoaXMgY29udmV5cyB0aGF0IFkyIG11c3QgYWx3YXlzIGJlIHVzZWQuICovCisJQlVORExFX0ZPUk1BVChUSUxFR1hfUElQRUxJTkVfWTAsIFRJTEVHWF9QSVBFTElORV9ZMiwgTk9fUElQRUxJTkUpLAorCUJVTkRMRV9GT1JNQVQoVElMRUdYX1BJUEVMSU5FX1kxLCBUSUxFR1hfUElQRUxJTkVfWTIsIE5PX1BJUEVMSU5FKSwKKwlCVU5ETEVfRk9STUFUKFRJTEVHWF9QSVBFTElORV9ZMiwgVElMRUdYX1BJUEVMSU5FX1kwLCBOT19QSVBFTElORSksCisJQlVORExFX0ZPUk1BVChUSUxFR1hfUElQRUxJTkVfWTIsIFRJTEVHWF9QSVBFTElORV9ZMSwgTk9fUElQRUxJTkUpLAorCisJLyogWSBmb3JtYXQgaGFzIHRocmVlIGluc3RydWN0aW9ucy4gKi8KKwlCVU5ETEVfRk9STUFUKFRJTEVHWF9QSVBFTElORV9ZMCwgVElMRUdYX1BJUEVMSU5FX1kxLCBUSUxFR1hfUElQRUxJTkVfWTIpLAorCUJVTkRMRV9GT1JNQVQoVElMRUdYX1BJUEVMSU5FX1kwLCBUSUxFR1hfUElQRUxJTkVfWTIsIFRJTEVHWF9QSVBFTElORV9ZMSksCisJQlVORExFX0ZPUk1BVChUSUxFR1hfUElQRUxJTkVfWTEsIFRJTEVHWF9QSVBFTElORV9ZMCwgVElMRUdYX1BJUEVMSU5FX1kyKSwKKwlCVU5ETEVfRk9STUFUKFRJTEVHWF9QSVBFTElORV9ZMSwgVElMRUdYX1BJUEVMSU5FX1kyLCBUSUxFR1hfUElQRUxJTkVfWTApLAorCUJVTkRMRV9GT1JNQVQoVElMRUdYX1BJUEVMSU5FX1kyLCBUSUxFR1hfUElQRUxJTkVfWTAsIFRJTEVHWF9QSVBFTElORV9ZMSksCisJQlVORExFX0ZPUk1BVChUSUxFR1hfUElQRUxJTkVfWTIsIFRJTEVHWF9QSVBFTElORV9ZMSwgVElMRUdYX1BJUEVMSU5FX1kwKSwKKworCS8qIFggZm9ybWF0IGhhcyBvbmx5IHR3byBpbnN0cnVjdGlvbnMuICovCisJQlVORExFX0ZPUk1BVChUSUxFR1hfUElQRUxJTkVfWDAsIFRJTEVHWF9QSVBFTElORV9YMSwgTk9fUElQRUxJTkUpLAorCUJVTkRMRV9GT1JNQVQoVElMRUdYX1BJUEVMSU5FX1gxLCBUSUxFR1hfUElQRUxJTkVfWDAsIE5PX1BJUEVMSU5FKQorfTsKKworCitzdHJ1Y3Qgaml0X2luc3RyIGluc3RfYnVmW1RJTEVHWF9NQVhfSU5TVFJVQ1RJT05TX1BFUl9CVU5ETEVdOwordW5zaWduZWQgbG9uZyBpbnN0X2J1Zl9pbmRleDsKKwordGlsZWd4X3BpcGVsaW5lIGdldF9hbnlfdmFsaWRfcGlwZShjb25zdCBzdHJ1Y3QgdGlsZWd4X29wY29kZSogb3Bjb2RlKQoreworCS8qIEZJWE1FOiB0aWxlOiB3ZSBjb3VsZCBwcmVnZW5lcmF0ZSB0aGlzLiAqLworCWludCBwaXBlOworCWZvciAocGlwZSA9IDA7ICgob3Bjb2RlLT5waXBlcyAmICgxIDw8IHBpcGUpKSA9PSAwICYmIHBpcGUgPCBUSUxFR1hfTlVNX1BJUEVMSU5FX0VOQ09ESU5HUyk7IHBpcGUrKykKKwkJOworCXJldHVybiAodGlsZWd4X3BpcGVsaW5lKShwaXBlKTsKK30KKwordm9pZCBpbnNlcnRfbm9wKHRpbGVneF9tbmVtb25pYyBvcGMsIGludCBsaW5lKQoreworCWNvbnN0IHN0cnVjdCB0aWxlZ3hfb3Bjb2RlKiBvcGNvZGUgPSBOVUxMOworCisJbWVtbW92ZSgmaW5zdF9idWZbMV0sICZpbnN0X2J1ZlswXSwgaW5zdF9idWZfaW5kZXggKiBzaXplb2YgaW5zdF9idWZbMF0pOworCisJb3Bjb2RlID0gJnRpbGVneF9vcGNvZGVzW29wY107CisJaW5zdF9idWZbMF0ub3Bjb2RlID0gb3Bjb2RlOworCWluc3RfYnVmWzBdLnBpcGUgPSBnZXRfYW55X3ZhbGlkX3BpcGUob3Bjb2RlKTsKKwlpbnN0X2J1ZlswXS5pbnB1dF9yZWdpc3RlcnMgPSAwOworCWluc3RfYnVmWzBdLm91dHB1dF9yZWdpc3RlcnMgPSAwOworCWluc3RfYnVmWzBdLmxpbmUgPSBsaW5lOworCSsraW5zdF9idWZfaW5kZXg7Cit9CisKK2NvbnN0IHN0cnVjdCBGb3JtYXQqIGNvbXB1dGVfZm9ybWF0KCkKK3sKKwl1bnNpZ25lZCBpbnQgY29tcGF0aWJsZV9waXBlcyA9IEJVTkRMRV9GT1JNQVRfTUFTSygKKwkJaW5zdF9idWZbMF0ub3Bjb2RlLT5waXBlcywKKwkJaW5zdF9idWZbMV0ub3Bjb2RlLT5waXBlcywKKwkJKGluc3RfYnVmX2luZGV4ID09IDMgPyBpbnN0X2J1ZlsyXS5vcGNvZGUtPnBpcGVzIDogKDEgPDwgTk9fUElQRUxJTkUpKSk7CisKKwljb25zdCBzdHJ1Y3QgRm9ybWF0KiBtYXRjaCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IEZvcm1hdCAqYiA9IE5VTEw7CisJdW5zaWduZWQgaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZiBmb3JtYXRzIC8gc2l6ZW9mIGZvcm1hdHNbMF07IGkrKykgeworCQliID0gJmZvcm1hdHNbaV07CisJCWlmICgoYi0+cGlwZV9tYXNrICYgY29tcGF0aWJsZV9waXBlcykgPT0gYi0+cGlwZV9tYXNrKSB7CisJCQltYXRjaCA9IGI7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiBtYXRjaDsKK30KKworc2xqaXRfc2kgYXNzaWduX3BpcGVzKCkKK3sKKwl1bnNpZ25lZCBsb25nIG91dHB1dF9yZWdpc3RlcnMgPSAwOworCXVuc2lnbmVkIGludCBpID0gMDsKKworCWlmIChpbnN0X2J1Zl9pbmRleCA9PSAxKSB7CisJCXRpbGVneF9tbmVtb25pYyBvcGMgPSBpbnN0X2J1ZlswXS5vcGNvZGUtPmNhbl9idW5kbGUKKwkJCQkJPyBUSUxFR1hfT1BDX0ZOT1AgOiBUSUxFR1hfT1BDX05PUDsKKwkJaW5zZXJ0X25vcChvcGMsIF9fTElORV9fKTsKKwl9CisKKwljb25zdCBzdHJ1Y3QgRm9ybWF0KiBtYXRjaCA9IGNvbXB1dGVfZm9ybWF0KCk7CisKKwlpZiAobWF0Y2ggPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJZm9yIChpID0gMDsgaSA8IGluc3RfYnVmX2luZGV4OyBpKyspIHsKKworCQlpZiAoKGkgPiAwKSAmJiAoKGluc3RfYnVmW2ldLmlucHV0X3JlZ2lzdGVycyAmIG91dHB1dF9yZWdpc3RlcnMpICE9IDApKQorCQkJcmV0dXJuIC0xOworCisJCWlmICgoaSA+IDApICYmICgoaW5zdF9idWZbaV0ub3V0cHV0X3JlZ2lzdGVycyAmIG91dHB1dF9yZWdpc3RlcnMpICE9IDApKQorCQkJcmV0dXJuIC0xOworCisJCS8qIERvbid0IGluY2x1ZGUgUnplcm8gaW4gdGhlIG1hdGNoIHNldCwgdG8gYXZvaWQgdHJpZ2dlcmluZworCQkgICBuZWVkbGVzc2x5IG9uICdwcmVmZXRjaCcgaW5zdHJzLiAqLworCisJCW91dHB1dF9yZWdpc3RlcnMgfD0gaW5zdF9idWZbaV0ub3V0cHV0X3JlZ2lzdGVycyAmIDB4RkZGRkZGRkZGRkZGRkZMOworCisJCWluc3RfYnVmW2ldLnBpcGUgPSBtYXRjaC0+cGlwZVtpXTsKKwl9CisKKwkvKiBJZiBvbmx5IDIgaW5zdHJzLCBhbmQgaW4gWS1tb2RlLCBpbnNlcnQgYSBub3AuICovCisJaWYgKGluc3RfYnVmX2luZGV4ID09IDIgJiYgIXRpbGVneF9pc194X3BpcGVsaW5lKG1hdGNoLT5waXBlWzBdKSkgeworCQlpbnNlcnRfbm9wKFRJTEVHWF9PUENfRk5PUCwgX19MSU5FX18pOworCisJCS8qIFNlbGVjdCB0aGUgeWV0IHVuYXNzaWduZWQgcGlwZS4gKi8KKwkJdGlsZWd4X3BpcGVsaW5lIHBpcGUgPSAodGlsZWd4X3BpcGVsaW5lKSgoKFRJTEVHWF9QSVBFTElORV9ZMAorCQkJCQkrIFRJTEVHWF9QSVBFTElORV9ZMSArIFRJTEVHWF9QSVBFTElORV9ZMikKKwkJCQkJLSAoaW5zdF9idWZbMV0ucGlwZSArIGluc3RfYnVmWzJdLnBpcGUpKSk7CisKKwkJaW5zdF9idWZbMF0ucGlwZSA9IHBpcGU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3RpbGVneF9idW5kbGVfYml0cyBnZXRfYnVuZGxlX2JpdChzdHJ1Y3Qgaml0X2luc3RyICppbnN0KQoreworCWludCBpLCB2YWw7CisJY29uc3Qgc3RydWN0IHRpbGVneF9vcGNvZGUqIG9wY29kZSA9IGluc3QtPm9wY29kZTsKKwl0aWxlZ3hfYnVuZGxlX2JpdHMgYml0cyA9IG9wY29kZS0+Zml4ZWRfYml0X3ZhbHVlc1tpbnN0LT5waXBlXTsKKworCWNvbnN0IHN0cnVjdCB0aWxlZ3hfb3BlcmFuZCogb3BlcmFuZCA9IE5VTEw7CisJZm9yIChpID0gMDsgaSA8IG9wY29kZS0+bnVtX29wZXJhbmRzOyBpKyspIHsKKwkJb3BlcmFuZCA9ICZ0aWxlZ3hfb3BlcmFuZHNbb3Bjb2RlLT5vcGVyYW5kc1tpbnN0LT5waXBlXVtpXV07CisJCXZhbCA9IGluc3QtPm9wZXJhbmRfdmFsdWVbaV07CisKKwkJYml0cyB8PSBvcGVyYW5kLT5pbnNlcnQodmFsKTsKKwl9CisKKwlyZXR1cm4gYml0czsKK30KKworc3RhdGljIHNsaml0X3NpIHVwZGF0ZV9idWZmZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKK3sKKwlpbnQgaTsKKwlpbnQgb3JpZ19pbmRleCA9IGluc3RfYnVmX2luZGV4OworCXN0cnVjdCBqaXRfaW5zdHIgaW5zdDAgPSBpbnN0X2J1ZlswXTsKKwlzdHJ1Y3Qgaml0X2luc3RyIGluc3QxID0gaW5zdF9idWZbMV07CisJc3RydWN0IGppdF9pbnN0ciBpbnN0MiA9IGluc3RfYnVmWzJdOworCXRpbGVneF9idW5kbGVfYml0cyBiaXRzID0gMDsKKworCS8qIElmIHRoZSBidW5kbGUgaXMgdmFsaWQgYXMgaXMsIHBlcmZvcm0gdGhlIGVuY29kaW5nIGFuZCByZXR1cm4gMS4gKi8KKwlpZiAoYXNzaWduX3BpcGVzKCkgPT0gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgaW5zdF9idWZfaW5kZXg7IGkrKykgeworCQkJYml0cyB8PSBnZXRfYnVuZGxlX2JpdChpbnN0X2J1ZiArIGkpOworI2lmZGVmIFRJTEVHWF9KSVRfREVCVUcKKwkJCXByaW50ZigifCUwNGQiLCBpbnN0X2J1ZltpXS5saW5lKTsKKyNlbmRpZgorCQl9CisjaWZkZWYgVElMRUdYX0pJVF9ERUJVRworCQlpZiAoaW5zdF9idWZfaW5kZXggPT0gMykKKwkJCXByaW50ZigifE0wfDpcdCIpOworCQllbHNlCisJCQlwcmludGYoInxNMHw6XHRcdCIpOworCQlwcmludF9pbnNuX3RpbGVneCgmYml0cyk7CisjZW5kaWYKKworCQlpbnN0X2J1Zl9pbmRleCA9IDA7CisKKyNpZmRlZiBUSUxFR1hfSklUX0RFQlVHCisJCXJldHVybiBwdXNoX2luc3Rfbm9kZWJ1Zyhjb21waWxlciwgYml0cyk7CisjZWxzZQorCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBiaXRzKTsKKyNlbmRpZgorCX0KKworCS8qIElmIHRoZSBidW5kbGUgaXMgaW52YWxpZCwgc3BsaXQgaXQgaW4gdHdvLiBGaXJzdCBlbmNvZGUgdGhlIGZpcnN0IHR3bworCSAgIChvciBwb3NzaWJseSAxKSBpbnN0cnVjdGlvbnMsIGFuZCB0aGVuIHRoZSBsYXN0LCBzZXBhcmF0ZWx5LiBOb3RlIHRoYXQKKwkgICBhc3NpZ25fcGlwZXMgbWF5IGhhdmUgcmUtb3JkZXJlZCB0aGUgaW5zdHJzIChieSBpbnNlcnRpbmcgbm8tb3BzIGluCisJICAgbG93ZXIgc2xvdHMpIHNvIHdlIG5lZWQgdG8gcmVzZXQgdGhlbS4gKi8KKworCWluc3RfYnVmX2luZGV4ID0gb3JpZ19pbmRleCAtIDE7CisJaW5zdF9idWZbMF0gPSBpbnN0MDsKKwlpbnN0X2J1ZlsxXSA9IGluc3QxOworCWluc3RfYnVmWzJdID0gaW5zdDI7CisJaWYgKGFzc2lnbl9waXBlcygpID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IGluc3RfYnVmX2luZGV4OyBpKyspIHsKKwkJCWJpdHMgfD0gZ2V0X2J1bmRsZV9iaXQoaW5zdF9idWYgKyBpKTsKKyNpZmRlZiBUSUxFR1hfSklUX0RFQlVHCisJCQlwcmludGYoInwlMDRkIiwgaW5zdF9idWZbaV0ubGluZSk7CisjZW5kaWYKKwkJfQorCisjaWZkZWYgVElMRUdYX0pJVF9ERUJVRworCQlpZiAoaW5zdF9idWZfaW5kZXggPT0gMykKKwkJCXByaW50ZigifE0xfDpcdCIpOworCQllbHNlCisJCQlwcmludGYoInxNMXw6XHRcdCIpOworCQlwcmludF9pbnNuX3RpbGVneCgmYml0cyk7CisjZW5kaWYKKworCQlpZiAoKG9yaWdfaW5kZXggLSAxKSA9PSAyKSB7CisJCQlpbnN0X2J1ZlswXSA9IGluc3QyOworCQkJaW5zdF9idWZfaW5kZXggPSAxOworCQl9IGVsc2UgaWYgKChvcmlnX2luZGV4IC0gMSkgPT0gMSkgeworCQkJaW5zdF9idWZbMF0gPSBpbnN0MTsKKwkJCWluc3RfYnVmX2luZGV4ID0gMTsKKwkJfSBlbHNlCisJCQlTTEpJVF9BU1NFUlRfU1RPUCgpOworCisjaWZkZWYgVElMRUdYX0pJVF9ERUJVRworCQlyZXR1cm4gcHVzaF9pbnN0X25vZGVidWcoY29tcGlsZXIsIGJpdHMpOworI2Vsc2UKKwkJcmV0dXJuIHB1c2hfaW5zdChjb21waWxlciwgYml0cyk7CisjZW5kaWYKKwl9IGVsc2UgeworCQkvKiBXZSBoYWQgMyBpbnN0cnMgb2Ygd2hpY2ggdGhlIGZpcnN0IDIgY2FuJ3QgbGl2ZSBpbiB0aGUgc2FtZSBidW5kbGUuCisJCSAgIFNwbGl0IHRob3NlIHR3by4gTm90ZSB0aGF0IHdlIGRvbid0IHRyeSB0byB0aGVuIGNvbWJpbmUgdGhlIHNlY29uZAorCQkgICBhbmQgdGhpcmQgaW5zdHIgaW50byBhIHNpbmdsZSBidW5kbGUuICBGaXJzdCBpbnN0cnVjdGlvbjogKi8KKwkJaW5zdF9idWZfaW5kZXggPSAxOworCQlpbnN0X2J1ZlswXSA9IGluc3QwOworCQlpbnN0X2J1ZlsxXSA9IGluc3QxOworCQlpbnN0X2J1ZlsyXSA9IGluc3QyOworCQlpZiAoYXNzaWduX3BpcGVzKCkgPT0gMCkgeworCQkJZm9yIChpID0gMDsgaSA8IGluc3RfYnVmX2luZGV4OyBpKyspIHsKKwkJCQliaXRzIHw9IGdldF9idW5kbGVfYml0KGluc3RfYnVmICsgaSk7CisjaWZkZWYgVElMRUdYX0pJVF9ERUJVRworCQkJCXByaW50ZigifCUwNGQiLCBpbnN0X2J1ZltpXS5saW5lKTsKKyNlbmRpZgorCQkJfQorCisjaWZkZWYgVElMRUdYX0pJVF9ERUJVRworCQkJaWYgKGluc3RfYnVmX2luZGV4ID09IDMpCisJCQkJcHJpbnRmKCJ8TTJ8Olx0Iik7CisJCQllbHNlCisJCQkJcHJpbnRmKCJ8TTJ8Olx0XHQiKTsKKwkJCXByaW50X2luc25fdGlsZWd4KCZiaXRzKTsKKyNlbmRpZgorCisJCQlpbnN0X2J1ZlswXSA9IGluc3QxOworCQkJaW5zdF9idWZbMV0gPSBpbnN0MjsKKwkJCWluc3RfYnVmX2luZGV4ID0gb3JpZ19pbmRleCAtIDE7CisjaWZkZWYgVElMRUdYX0pJVF9ERUJVRworCQkJcmV0dXJuIHB1c2hfaW5zdF9ub2RlYnVnKGNvbXBpbGVyLCBiaXRzKTsKKyNlbHNlCisJCQlyZXR1cm4gcHVzaF9pbnN0KGNvbXBpbGVyLCBiaXRzKTsKKyNlbmRpZgorCQl9IGVsc2UKKwkJCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJfQorCisJU0xKSVRfQVNTRVJUX1NUT1AoKTsKK30KKworc3RhdGljIHNsaml0X3NpIGZsdXNoX2J1ZmZlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQoreworCXdoaWxlIChpbnN0X2J1Zl9pbmRleCAhPSAwKSB7CisJCUZBSUxfSUYodXBkYXRlX2J1ZmZlcihjb21waWxlcikpOworCX0KKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIHNsaml0X3NpIHB1c2hfNF9idWZmZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgdGlsZWd4X21uZW1vbmljIG9wYywgaW50IG9wMCwgaW50IG9wMSwgaW50IG9wMiwgaW50IG9wMywgaW50IGxpbmUpCit7CisJaWYgKGluc3RfYnVmX2luZGV4ID09IFRJTEVHWF9NQVhfSU5TVFJVQ1RJT05TX1BFUl9CVU5ETEUpCisJCUZBSUxfSUYodXBkYXRlX2J1ZmZlcihjb21waWxlcikpOworCisJY29uc3Qgc3RydWN0IHRpbGVneF9vcGNvZGUqIG9wY29kZSA9ICZ0aWxlZ3hfb3Bjb2Rlc1tvcGNdOworCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5vcGNvZGUgPSBvcGNvZGU7CisJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLnBpcGUgPSBnZXRfYW55X3ZhbGlkX3BpcGUob3Bjb2RlKTsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0ub3BlcmFuZF92YWx1ZVswXSA9IG9wMDsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0ub3BlcmFuZF92YWx1ZVsxXSA9IG9wMTsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0ub3BlcmFuZF92YWx1ZVsyXSA9IG9wMjsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0ub3BlcmFuZF92YWx1ZVszXSA9IG9wMzsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0uaW5wdXRfcmVnaXN0ZXJzID0gMUwgPDwgb3AxOworCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5vdXRwdXRfcmVnaXN0ZXJzID0gMUwgPDwgb3AwOworCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5saW5lID0gbGluZTsKKwlpbnN0X2J1Zl9pbmRleCsrOworCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBzbGppdF9zaSBwdXNoXzNfYnVmZmVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHRpbGVneF9tbmVtb25pYyBvcGMsIGludCBvcDAsIGludCBvcDEsIGludCBvcDIsIGludCBsaW5lKQoreworCWlmIChpbnN0X2J1Zl9pbmRleCA9PSBUSUxFR1hfTUFYX0lOU1RSVUNUSU9OU19QRVJfQlVORExFKQorCQlGQUlMX0lGKHVwZGF0ZV9idWZmZXIoY29tcGlsZXIpKTsKKworCWNvbnN0IHN0cnVjdCB0aWxlZ3hfb3Bjb2RlKiBvcGNvZGUgPSAmdGlsZWd4X29wY29kZXNbb3BjXTsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0ub3Bjb2RlID0gb3Bjb2RlOworCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5waXBlID0gZ2V0X2FueV92YWxpZF9waXBlKG9wY29kZSk7CisJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLm9wZXJhbmRfdmFsdWVbMF0gPSBvcDA7CisJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLm9wZXJhbmRfdmFsdWVbMV0gPSBvcDE7CisJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLm9wZXJhbmRfdmFsdWVbMl0gPSBvcDI7CisJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLmxpbmUgPSBsaW5lOworCisJc3dpdGNoIChvcGMpIHsKKwljYXNlIFRJTEVHWF9PUENfU1RfQUREOgorCQlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0uaW5wdXRfcmVnaXN0ZXJzID0gKDFMIDw8IG9wMCkgfCAoMUwgPDwgb3AxKTsKKwkJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLm91dHB1dF9yZWdpc3RlcnMgPSAxTCA8PCBvcDA7CisJCWJyZWFrOworCWNhc2UgVElMRUdYX09QQ19MRF9BREQ6CisJCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5pbnB1dF9yZWdpc3RlcnMgPSAxTCA8PCBvcDE7CisJCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5vdXRwdXRfcmVnaXN0ZXJzID0gKDFMIDw8IG9wMCkgfCAoMUwgPDwgb3AxKTsKKwkJYnJlYWs7CisJY2FzZSBUSUxFR1hfT1BDX0FERDoKKwljYXNlIFRJTEVHWF9PUENfQU5EOgorCWNhc2UgVElMRUdYX09QQ19TVUI6CisJY2FzZSBUSUxFR1hfT1BDX01VTFg6CisJY2FzZSBUSUxFR1hfT1BDX09SOgorCWNhc2UgVElMRUdYX09QQ19YT1I6CisJY2FzZSBUSUxFR1hfT1BDX05PUjoKKwljYXNlIFRJTEVHWF9PUENfU0hMOgorCWNhc2UgVElMRUdYX09QQ19TSFJVOgorCWNhc2UgVElMRUdYX09QQ19TSFJTOgorCWNhc2UgVElMRUdYX09QQ19DTVBMVFU6CisJY2FzZSBUSUxFR1hfT1BDX0NNUExUUzoKKwljYXNlIFRJTEVHWF9PUENfQ01PVkVRWjoKKwljYXNlIFRJTEVHWF9PUENfQ01PVk5FWjoKKwkJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLmlucHV0X3JlZ2lzdGVycyA9ICgxTCA8PCBvcDEpIHwgKDFMIDw8IG9wMik7CisJCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5vdXRwdXRfcmVnaXN0ZXJzID0gMUwgPDwgb3AwOworCQlicmVhazsKKwljYXNlIFRJTEVHWF9PUENfQURETEk6CisJY2FzZSBUSUxFR1hfT1BDX1hPUkk6CisJY2FzZSBUSUxFR1hfT1BDX09SSToKKwljYXNlIFRJTEVHWF9PUENfU0hMSToKKwljYXNlIFRJTEVHWF9PUENfU0hSVUk6CisJY2FzZSBUSUxFR1hfT1BDX1NIUlNJOgorCWNhc2UgVElMRUdYX09QQ19TSEwxNklOU0xJOgorCWNhc2UgVElMRUdYX09QQ19DTVBMVFVJOgorCWNhc2UgVElMRUdYX09QQ19DTVBMVFNJOgorCQlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0uaW5wdXRfcmVnaXN0ZXJzID0gMUwgPDwgb3AxOworCQlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0ub3V0cHV0X3JlZ2lzdGVycyA9IDFMIDw8IG9wMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJ1bnJlY29naW56ZWQgb3BjOiAlc1xuIiwgb3Bjb2RlLT5uYW1lKTsKKwkJU0xKSVRfQVNTRVJUX1NUT1AoKTsKKwl9CisKKwlpbnN0X2J1Zl9pbmRleCsrOworCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBzbGppdF9zaSBwdXNoXzJfYnVmZmVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHRpbGVneF9tbmVtb25pYyBvcGMsIGludCBvcDAsIGludCBvcDEsIGludCBsaW5lKQoreworCWlmIChpbnN0X2J1Zl9pbmRleCA9PSBUSUxFR1hfTUFYX0lOU1RSVUNUSU9OU19QRVJfQlVORExFKQorCQlGQUlMX0lGKHVwZGF0ZV9idWZmZXIoY29tcGlsZXIpKTsKKworCWNvbnN0IHN0cnVjdCB0aWxlZ3hfb3Bjb2RlKiBvcGNvZGUgPSAmdGlsZWd4X29wY29kZXNbb3BjXTsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0ub3Bjb2RlID0gb3Bjb2RlOworCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5waXBlID0gZ2V0X2FueV92YWxpZF9waXBlKG9wY29kZSk7CisJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLm9wZXJhbmRfdmFsdWVbMF0gPSBvcDA7CisJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLm9wZXJhbmRfdmFsdWVbMV0gPSBvcDE7CisJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLmxpbmUgPSBsaW5lOworCisJc3dpdGNoIChvcGMpIHsKKwljYXNlIFRJTEVHWF9PUENfQkVRWjoKKwljYXNlIFRJTEVHWF9PUENfQk5FWjoKKwkJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLmlucHV0X3JlZ2lzdGVycyA9IDFMIDw8IG9wMDsKKwkJYnJlYWs7CisJY2FzZSBUSUxFR1hfT1BDX1NUOgorCWNhc2UgVElMRUdYX09QQ19TVDE6CisJY2FzZSBUSUxFR1hfT1BDX1NUMjoKKwljYXNlIFRJTEVHWF9PUENfU1Q0OgorCQlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0uaW5wdXRfcmVnaXN0ZXJzID0gKDFMIDw8IG9wMCkgfCAoMUwgPDwgb3AxKTsKKwkJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLm91dHB1dF9yZWdpc3RlcnMgPSAwOworCQlicmVhazsKKwljYXNlIFRJTEVHWF9PUENfQ0xaOgorCWNhc2UgVElMRUdYX09QQ19MRDoKKwljYXNlIFRJTEVHWF9PUENfTEQxVToKKwljYXNlIFRJTEVHWF9PUENfTEQxUzoKKwljYXNlIFRJTEVHWF9PUENfTEQyVToKKwljYXNlIFRJTEVHWF9PUENfTEQyUzoKKwljYXNlIFRJTEVHWF9PUENfTEQ0VToKKwljYXNlIFRJTEVHWF9PUENfTEQ0UzoKKwkJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLmlucHV0X3JlZ2lzdGVycyA9IDFMIDw8IG9wMTsKKwkJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLm91dHB1dF9yZWdpc3RlcnMgPSAxTCA8PCBvcDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigidW5yZWNvZ2luemVkIG9wYzogJXNcbiIsIG9wY29kZS0+bmFtZSk7CisJCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJfQorCisJaW5zdF9idWZfaW5kZXgrKzsKKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgc2xqaXRfc2kgcHVzaF8wX2J1ZmZlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCB0aWxlZ3hfbW5lbW9uaWMgb3BjLCBpbnQgbGluZSkKK3sKKwlpZiAoaW5zdF9idWZfaW5kZXggPT0gVElMRUdYX01BWF9JTlNUUlVDVElPTlNfUEVSX0JVTkRMRSkKKwkJRkFJTF9JRih1cGRhdGVfYnVmZmVyKGNvbXBpbGVyKSk7CisKKwljb25zdCBzdHJ1Y3QgdGlsZWd4X29wY29kZSogb3Bjb2RlID0gJnRpbGVneF9vcGNvZGVzW29wY107CisJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLm9wY29kZSA9IG9wY29kZTsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0ucGlwZSA9IGdldF9hbnlfdmFsaWRfcGlwZShvcGNvZGUpOworCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5pbnB1dF9yZWdpc3RlcnMgPSAwOworCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5vdXRwdXRfcmVnaXN0ZXJzID0gMDsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0ubGluZSA9IGxpbmU7CisJaW5zdF9idWZfaW5kZXgrKzsKKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgc2xqaXRfc2kgcHVzaF9qcl9idWZmZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgdGlsZWd4X21uZW1vbmljIG9wYywgaW50IG9wMCwgaW50IGxpbmUpCit7CisJaWYgKGluc3RfYnVmX2luZGV4ID09IFRJTEVHWF9NQVhfSU5TVFJVQ1RJT05TX1BFUl9CVU5ETEUpCisJCUZBSUxfSUYodXBkYXRlX2J1ZmZlcihjb21waWxlcikpOworCisJY29uc3Qgc3RydWN0IHRpbGVneF9vcGNvZGUqIG9wY29kZSA9ICZ0aWxlZ3hfb3Bjb2Rlc1tvcGNdOworCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5vcGNvZGUgPSBvcGNvZGU7CisJaW5zdF9idWZbaW5zdF9idWZfaW5kZXhdLnBpcGUgPSBnZXRfYW55X3ZhbGlkX3BpcGUob3Bjb2RlKTsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0ub3BlcmFuZF92YWx1ZVswXSA9IG9wMDsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0uaW5wdXRfcmVnaXN0ZXJzID0gMUwgPDwgb3AwOworCWluc3RfYnVmW2luc3RfYnVmX2luZGV4XS5vdXRwdXRfcmVnaXN0ZXJzID0gMDsKKwlpbnN0X2J1ZltpbnN0X2J1Zl9pbmRleF0ubGluZSA9IGxpbmU7CisJaW5zdF9idWZfaW5kZXgrKzsKKyAKKwlyZXR1cm4gZmx1c2hfYnVmZmVyKGNvbXBpbGVyKTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9pbnMgKiBkZXRlY3RfanVtcF90eXBlKHN0cnVjdCBzbGppdF9qdW1wICpqdW1wLCBzbGppdF9pbnMgKmNvZGVfcHRyLCBzbGppdF9pbnMgKmNvZGUpCit7CisJc2xqaXRfc3cgZGlmZjsKKwlzbGppdF91dyB0YXJnZXRfYWRkcjsKKwlzbGppdF9pbnMgKmluc3Q7CisKKwlpZiAoanVtcC0+ZmxhZ3MgJiBTTEpJVF9SRVdSSVRBQkxFX0pVTVApCisJCXJldHVybiBjb2RlX3B0cjsKKworCWlmIChqdW1wLT5mbGFncyAmIEpVTVBfQUREUikKKwkJdGFyZ2V0X2FkZHIgPSBqdW1wLT51LnRhcmdldDsKKwllbHNlIHsKKwkJU0xKSVRfQVNTRVJUKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCk7CisJCXRhcmdldF9hZGRyID0gKHNsaml0X3V3KShjb2RlICsganVtcC0+dS5sYWJlbC0+c2l6ZSk7CisJfQorCisJaW5zdCA9IChzbGppdF9pbnMgKilqdW1wLT5hZGRyOworCWlmIChqdW1wLT5mbGFncyAmIElTX0NPTkQpCisJCWluc3QtLTsKKworCWRpZmYgPSAoKHNsaml0X3N3KSB0YXJnZXRfYWRkciAtIChzbGppdF9zdykgaW5zdCkgPj4gMzsKKwlpZiAoZGlmZiA8PSBTSU1NXzE3QklUX01BWCAmJiBkaWZmID49IFNJTU1fMTdCSVRfTUlOKSB7CisJCWp1bXAtPmZsYWdzIHw9IFBBVENIX0I7CisKKwkJaWYgKCEoanVtcC0+ZmxhZ3MgJiBJU19DT05EKSkgeworCQkJaWYgKGp1bXAtPmZsYWdzICYgSVNfSkFMKSB7CisJCQkJanVtcC0+ZmxhZ3MgJj0gfihQQVRDSF9CKTsKKwkJCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9KOworCQkJCWluc3RbMF0gPSBKQUxfWDE7CisKKyNpZmRlZiBUSUxFR1hfSklUX0RFQlVHCisJCQkJcHJpbnRmKCJbcnVudGltZSByZWxvY2F0ZV0lMDRkOlx0IiwgX19MSU5FX18pOworCQkJCXByaW50X2luc25fdGlsZWd4KGluc3QpOworI2VuZGlmCisJCQl9IGVsc2UgeworCQkJCWluc3RbMF0gPSBCRVFaX1gxIHwgU1JDQV9YMShaRVJPKTsKKworI2lmZGVmIFRJTEVHWF9KSVRfREVCVUcKKwkJCQlwcmludGYoIltydW50aW1lIHJlbG9jYXRlXSUwNGQ6XHQiLCBfX0xJTkVfXyk7CisJCQkJcHJpbnRfaW5zbl90aWxlZ3goaW5zdCk7CisjZW5kaWYKKwkJCX0KKworCQkJcmV0dXJuIGluc3Q7CisJCX0KKworCQlpbnN0WzBdID0gaW5zdFswXSBeICgweDdMIDw8IDU1KTsKKworI2lmZGVmIFRJTEVHWF9KSVRfREVCVUcKKwkJcHJpbnRmKCJbcnVudGltZSByZWxvY2F0ZV0lMDRkOlx0IiwgX19MSU5FX18pOworCQlwcmludF9pbnNuX3RpbGVneChpbnN0KTsKKyNlbmRpZgorCQlqdW1wLT5hZGRyIC09IHNpemVvZihzbGppdF9pbnMpOworCQlyZXR1cm4gaW5zdDsKKwl9CisKKwlpZiAoanVtcC0+ZmxhZ3MgJiBJU19DT05EKSB7CisJCWlmICgodGFyZ2V0X2FkZHIgJiB+MHgzRkZGRkZGRkwpID09ICgoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9pbnMpKSAmIH4weDNGRkZGRkZGTCkpIHsKKwkJCWp1bXAtPmZsYWdzIHw9IFBBVENIX0o7CisJCQlpbnN0WzBdID0gKGluc3RbMF0gJiB+KEJPRkZfWDEoLTEpKSkgfCBCT0ZGX1gxKDIpOworCQkJaW5zdFsxXSA9IEpfWDE7CisJCQlyZXR1cm4gaW5zdCArIDE7CisJCX0KKworCQlyZXR1cm4gY29kZV9wdHI7CisJfQorCisJaWYgKCh0YXJnZXRfYWRkciAmIH4weDNGRkZGRkZGTCkgPT0gKChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X2lucykpICYgfjB4M0ZGRkZGRkZMKSkgeworCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9KOworCisJCWlmIChqdW1wLT5mbGFncyAmIElTX0pBTCkgeworCQkJaW5zdFswXSA9IEpBTF9YMTsKKworI2lmZGVmIFRJTEVHWF9KSVRfREVCVUcKKwkJCXByaW50ZigiW3J1bnRpbWUgcmVsb2NhdGVdJTA0ZDpcdCIsIF9fTElORV9fKTsKKwkJCXByaW50X2luc25fdGlsZWd4KGluc3QpOworI2VuZGlmCisKKwkJfSBlbHNlIHsKKwkJCWluc3RbMF0gPSBKX1gxOworCisjaWZkZWYgVElMRUdYX0pJVF9ERUJVRworCQkJcHJpbnRmKCJbcnVudGltZSByZWxvY2F0ZV0lMDRkOlx0IiwgX19MSU5FX18pOworCQkJcHJpbnRfaW5zbl90aWxlZ3goaW5zdCk7CisjZW5kaWYKKwkJfQorCisJCXJldHVybiBpbnN0OworCX0KKworCXJldHVybiBjb2RlX3B0cjsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgKiBzbGppdF9nZW5lcmF0ZV9jb2RlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisJc3RydWN0IHNsaml0X21lbW9yeV9mcmFnbWVudCAqYnVmOworCXNsaml0X2lucyAqY29kZTsKKwlzbGppdF9pbnMgKmNvZGVfcHRyOworCXNsaml0X2lucyAqYnVmX3B0cjsKKwlzbGppdF9pbnMgKmJ1Zl9lbmQ7CisJc2xqaXRfdXcgd29yZF9jb3VudDsKKwlzbGppdF91dyBhZGRyOworCisJc3RydWN0IHNsaml0X2xhYmVsICpsYWJlbDsKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKwlzdHJ1Y3Qgc2xqaXRfY29uc3QgKmNvbnN0XzsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9nZW5lcmF0ZV9jb2RlKGNvbXBpbGVyKSk7CisJcmV2ZXJzZV9idWYoY29tcGlsZXIpOworCisJY29kZSA9IChzbGppdF9pbnMgKilTTEpJVF9NQUxMT0NfRVhFQyhjb21waWxlci0+c2l6ZSAqIHNpemVvZihzbGppdF9pbnMpKTsKKwlQVFJfRkFJTF9XSVRIX0VYRUNfSUYoY29kZSk7CisJYnVmID0gY29tcGlsZXItPmJ1ZjsKKworCWNvZGVfcHRyID0gY29kZTsKKwl3b3JkX2NvdW50ID0gMDsKKwlsYWJlbCA9IGNvbXBpbGVyLT5sYWJlbHM7CisJanVtcCA9IGNvbXBpbGVyLT5qdW1wczsKKwljb25zdF8gPSBjb21waWxlci0+Y29uc3RzOworCWRvIHsKKwkJYnVmX3B0ciA9IChzbGppdF9pbnMgKilidWYtPm1lbW9yeTsKKwkJYnVmX2VuZCA9IGJ1Zl9wdHIgKyAoYnVmLT51c2VkX3NpemUgPj4gMyk7CisJCWRvIHsKKwkJCSpjb2RlX3B0ciA9ICpidWZfcHRyKys7CisJCQlTTEpJVF9BU1NFUlQoIWxhYmVsIHx8IGxhYmVsLT5zaXplID49IHdvcmRfY291bnQpOworCQkJU0xKSVRfQVNTRVJUKCFqdW1wIHx8IGp1bXAtPmFkZHIgPj0gd29yZF9jb3VudCk7CisJCQlTTEpJVF9BU1NFUlQoIWNvbnN0XyB8fCBjb25zdF8tPmFkZHIgPj0gd29yZF9jb3VudCk7CisJCQkvKiBUaGVzZSBzdHJ1Y3R1cmVzIGFyZSBvcmRlcmVkIGJ5IHRoZWlyIGFkZHJlc3MuICovCisJCQlpZiAobGFiZWwgJiYgbGFiZWwtPnNpemUgPT0gd29yZF9jb3VudCkgeworCQkJCS8qIEp1c3QgcmVjb3JkaW5nIHRoZSBhZGRyZXNzLiAqLworCQkJCWxhYmVsLT5hZGRyID0gKHNsaml0X3V3KSBjb2RlX3B0cjsKKwkJCQlsYWJlbC0+c2l6ZSA9IGNvZGVfcHRyIC0gY29kZTsKKwkJCQlsYWJlbCA9IGxhYmVsLT5uZXh0OworCQkJfQorCisJCQlpZiAoanVtcCAmJiBqdW1wLT5hZGRyID09IHdvcmRfY291bnQpIHsKKwkJCQlpZiAoanVtcC0+ZmxhZ3MgJiBJU19KQUwpCisJCQkJCWp1bXAtPmFkZHIgPSAoc2xqaXRfdXcpKGNvZGVfcHRyIC0gNCk7CisJCQkJZWxzZQorCQkJCQlqdW1wLT5hZGRyID0gKHNsaml0X3V3KShjb2RlX3B0ciAtIDMpOworCisJCQkJY29kZV9wdHIgPSBkZXRlY3RfanVtcF90eXBlKGp1bXAsIGNvZGVfcHRyLCBjb2RlKTsKKwkJCQlqdW1wID0ganVtcC0+bmV4dDsKKwkJCX0KKworCQkJaWYgKGNvbnN0XyAmJiBjb25zdF8tPmFkZHIgPT0gd29yZF9jb3VudCkgeworCQkJCS8qIEp1c3QgcmVjb3JkaW5nIHRoZSBhZGRyZXNzLiAqLworCQkJCWNvbnN0Xy0+YWRkciA9IChzbGppdF91dykgY29kZV9wdHI7CisJCQkJY29uc3RfID0gY29uc3RfLT5uZXh0OworCQkJfQorCisJCQljb2RlX3B0cisrOworCQkJd29yZF9jb3VudCsrOworCQl9IHdoaWxlIChidWZfcHRyIDwgYnVmX2VuZCk7CisKKwkJYnVmID0gYnVmLT5uZXh0OworCX0gd2hpbGUgKGJ1Zik7CisKKwlpZiAobGFiZWwgJiYgbGFiZWwtPnNpemUgPT0gd29yZF9jb3VudCkgeworCQlsYWJlbC0+YWRkciA9IChzbGppdF91dykgY29kZV9wdHI7CisJCWxhYmVsLT5zaXplID0gY29kZV9wdHIgLSBjb2RlOworCQlsYWJlbCA9IGxhYmVsLT5uZXh0OworCX0KKworCVNMSklUX0FTU0VSVCghbGFiZWwpOworCVNMSklUX0FTU0VSVCghanVtcCk7CisJU0xKSVRfQVNTRVJUKCFjb25zdF8pOworCVNMSklUX0FTU0VSVChjb2RlX3B0ciAtIGNvZGUgPD0gKHNsaml0X3N3KWNvbXBpbGVyLT5zaXplKTsKKworCWp1bXAgPSBjb21waWxlci0+anVtcHM7CisJd2hpbGUgKGp1bXApIHsKKwkJZG8geworCQkJYWRkciA9IChqdW1wLT5mbGFncyAmIEpVTVBfTEFCRUwpID8ganVtcC0+dS5sYWJlbC0+YWRkciA6IGp1bXAtPnUudGFyZ2V0OworCQkJYnVmX3B0ciA9IChzbGppdF9pbnMgKilqdW1wLT5hZGRyOworCisJCQlpZiAoanVtcC0+ZmxhZ3MgJiBQQVRDSF9CKSB7CisJCQkJYWRkciA9IChzbGppdF9zdykoYWRkciAtIChqdW1wLT5hZGRyKSkgPj4gMzsKKwkJCQlTTEpJVF9BU1NFUlQoKHNsaml0X3N3KSBhZGRyIDw9IFNJTU1fMTdCSVRfTUFYICYmIChzbGppdF9zdykgYWRkciA+PSBTSU1NXzE3QklUX01JTik7CisJCQkJYnVmX3B0clswXSA9IChidWZfcHRyWzBdICYgfihCT0ZGX1gxKC0xKSkpIHwgQk9GRl9YMShhZGRyKTsKKworI2lmZGVmIFRJTEVHWF9KSVRfREVCVUcKKwkJCQlwcmludGYoIltydW50aW1lIHJlbG9jYXRlXSUwNGQ6XHQiLCBfX0xJTkVfXyk7CisJCQkJcHJpbnRfaW5zbl90aWxlZ3goYnVmX3B0cik7CisjZW5kaWYKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKGp1bXAtPmZsYWdzICYgUEFUQ0hfSikgeworCQkJCVNMSklUX0FTU0VSVCgoYWRkciAmIH4weDNGRkZGRkZGTCkgPT0gKChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X2lucykpICYgfjB4M0ZGRkZGRkZMKSk7CisJCQkJYWRkciA9IChzbGppdF9zdykoYWRkciAtIChqdW1wLT5hZGRyKSkgPj4gMzsKKwkJCQlidWZfcHRyWzBdID0gKGJ1Zl9wdHJbMF0gJiB+KEpPRkZfWDEoLTEpKSkgfCBKT0ZGX1gxKGFkZHIpOworCisjaWZkZWYgVElMRUdYX0pJVF9ERUJVRworCQkJCXByaW50ZigiW3J1bnRpbWUgcmVsb2NhdGVdJTA0ZDpcdCIsIF9fTElORV9fKTsKKwkJCQlwcmludF9pbnNuX3RpbGVneChidWZfcHRyKTsKKyNlbmRpZgorCQkJCWJyZWFrOworCQkJfQorCisJCQlTTEpJVF9BU1NFUlQoIShqdW1wLT5mbGFncyAmIElTX0pBTCkpOworCisJCQkvKiBTZXQgdGhlIGZpZWxkcyBvZiBpbW1lZGlhdGUgbG9hZHMuICovCisJCQlidWZfcHRyWzBdID0gKGJ1Zl9wdHJbMF0gJiB+KDB4RkZGRkwgPDwgNDMpKSB8ICgoKGFkZHIgPj4gMzIpICYgMHhGRkZGTCkgPDwgNDMpOworCQkJYnVmX3B0clsxXSA9IChidWZfcHRyWzFdICYgfigweEZGRkZMIDw8IDQzKSkgfCAoKChhZGRyID4+IDE2KSAmIDB4RkZGRkwpIDw8IDQzKTsKKwkJCWJ1Zl9wdHJbMl0gPSAoYnVmX3B0clsyXSAmIH4oMHhGRkZGTCA8PCA0MykpIHwgKChhZGRyICYgMHhGRkZGTCkgPDwgNDMpOworCQl9IHdoaWxlICgwKTsKKworCQlqdW1wID0ganVtcC0+bmV4dDsKKwl9CisKKwljb21waWxlci0+ZXJyb3IgPSBTTEpJVF9FUlJfQ09NUElMRUQ7CisJY29tcGlsZXItPmV4ZWN1dGFibGVfc2l6ZSA9IChjb2RlX3B0ciAtIGNvZGUpICogc2l6ZW9mKHNsaml0X2lucyk7CisJU0xKSVRfQ0FDSEVfRkxVU0goY29kZSwgY29kZV9wdHIpOworCXJldHVybiBjb2RlOworfQorCitzdGF0aWMgc2xqaXRfc2kgbG9hZF9pbW1lZGlhdGUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0X2FyLCBzbGppdF9zdyBpbW0pCit7CisKKwlpZiAoaW1tIDw9IFNJTU1fMTZCSVRfTUFYICYmIGltbSA+PSBTSU1NXzE2QklUX01JTikKKwkJcmV0dXJuIEFERExJKGRzdF9hciwgWkVSTywgaW1tKTsKKworCWlmIChpbW0gPD0gU0lNTV8zMkJJVF9NQVggJiYgaW1tID49IFNJTU1fMzJCSVRfTUlOKSB7CisJCUZBSUxfSUYoQURETEkoZHN0X2FyLCBaRVJPLCBpbW0gPj4gMTYpKTsKKwkJcmV0dXJuIFNITDE2SU5TTEkoZHN0X2FyLCBkc3RfYXIsIGltbSk7CisJfQorCisJaWYgKGltbSA8PSBTSU1NXzQ4QklUX01BWCAmJiBpbW0gPj0gU0lNTV80OEJJVF9NSU4pIHsKKwkJRkFJTF9JRihBRERMSShkc3RfYXIsIFpFUk8sIGltbSA+PiAzMikpOworCQlGQUlMX0lGKFNITDE2SU5TTEkoZHN0X2FyLCBkc3RfYXIsIGltbSA+PiAxNikpOworCQlyZXR1cm4gU0hMMTZJTlNMSShkc3RfYXIsIGRzdF9hciwgaW1tKTsKKwl9CisKKwlGQUlMX0lGKEFERExJKGRzdF9hciwgWkVSTywgaW1tID4+IDQ4KSk7CisJRkFJTF9JRihTSEwxNklOU0xJKGRzdF9hciwgZHN0X2FyLCBpbW0gPj4gMzIpKTsKKwlGQUlMX0lGKFNITDE2SU5TTEkoZHN0X2FyLCBkc3RfYXIsIGltbSA+PiAxNikpOworCXJldHVybiBTSEwxNklOU0xJKGRzdF9hciwgZHN0X2FyLCBpbW0pOworfQorCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9jb25zdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3RfYXIsIHNsaml0X3N3IGltbSwgaW50IGZsdXNoKQoreworCS8qIFNob3VsZCAqbm90KiBiZSBvcHRpbWl6ZWQgYXMgbG9hZF9pbW1lZGlhdGUsIGFzIHBjcmUgcmVsb2NhdGlvbgorCSAgIG1lY2hhbmlzbSB3aWxsIG1hdGNoIHRoaXMgZml4ZWQgNC1pbnN0cnVjdGlvbiBwYXR0ZXJuLiAqLworCWlmIChmbHVzaCkgeworCQlGQUlMX0lGKEFERExJX1NPTE8oZHN0X2FyLCBaRVJPLCBpbW0gPj4gMzIpKTsKKwkJRkFJTF9JRihTSEwxNklOU0xJX1NPTE8oZHN0X2FyLCBkc3RfYXIsIGltbSA+PiAxNikpOworCQlyZXR1cm4gU0hMMTZJTlNMSV9TT0xPKGRzdF9hciwgZHN0X2FyLCBpbW0pOworCX0KKworCUZBSUxfSUYoQURETEkoZHN0X2FyLCBaRVJPLCBpbW0gPj4gMzIpKTsKKwlGQUlMX0lGKFNITDE2SU5TTEkoZHN0X2FyLCBkc3RfYXIsIGltbSA+PiAxNikpOworCXJldHVybiBTSEwxNklOU0xJKGRzdF9hciwgZHN0X2FyLCBpbW0pOworfQorCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9jb25zdF82NChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3RfYXIsIHNsaml0X3N3IGltbSwgaW50IGZsdXNoKQoreworCS8qIFNob3VsZCAqbm90KiBiZSBvcHRpbWl6ZWQgYXMgbG9hZF9pbW1lZGlhdGUsIGFzIHBjcmUgcmVsb2NhdGlvbgorCSAgIG1lY2hhbmlzbSB3aWxsIG1hdGNoIHRoaXMgZml4ZWQgNC1pbnN0cnVjdGlvbiBwYXR0ZXJuLiAqLworCWlmIChmbHVzaCkgeworCQlGQUlMX0lGKEFERExJX1NPTE8ocmVnX21hcFtkc3RfYXJdLCBaRVJPLCBpbW0gPj4gNDgpKTsKKwkJRkFJTF9JRihTSEwxNklOU0xJX1NPTE8ocmVnX21hcFtkc3RfYXJdLCByZWdfbWFwW2RzdF9hcl0sIGltbSA+PiAzMikpOworCQlGQUlMX0lGKFNITDE2SU5TTElfU09MTyhyZWdfbWFwW2RzdF9hcl0sIHJlZ19tYXBbZHN0X2FyXSwgaW1tID4+IDE2KSk7CisJCXJldHVybiBTSEwxNklOU0xJX1NPTE8ocmVnX21hcFtkc3RfYXJdLCByZWdfbWFwW2RzdF9hcl0sIGltbSk7CisJfQorCisJRkFJTF9JRihBRERMSShyZWdfbWFwW2RzdF9hcl0sIFpFUk8sIGltbSA+PiA0OCkpOworCUZBSUxfSUYoU0hMMTZJTlNMSShyZWdfbWFwW2RzdF9hcl0sIHJlZ19tYXBbZHN0X2FyXSwgaW1tID4+IDMyKSk7CisJRkFJTF9JRihTSEwxNklOU0xJKHJlZ19tYXBbZHN0X2FyXSwgcmVnX21hcFtkc3RfYXJdLCBpbW0gPj4gMTYpKTsKKwlyZXR1cm4gU0hMMTZJTlNMSShyZWdfbWFwW2RzdF9hcl0sIHJlZ19tYXBbZHN0X2FyXSwgaW1tKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKKwlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQoreworCXNsaml0X2lucyBiYXNlOworCXNsaml0X3NpIGksIHRtcDsKKyAKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZW50ZXIoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CisJc2V0X2VtaXRfZW50ZXIoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKTsKKworCWxvY2FsX3NpemUgKz0gR0VUX1NBVkVEX1JFR0lTVEVSU19TSVpFKHNjcmF0Y2hlcywgc2F2ZWRzLCAxKTsKKwlsb2NhbF9zaXplID0gKGxvY2FsX3NpemUgKyA3KSAmIH43OworCWNvbXBpbGVyLT5sb2NhbF9zaXplID0gbG9jYWxfc2l6ZTsKKworCWlmIChsb2NhbF9zaXplIDw9IFNJTU1fMTZCSVRfTUFYKSB7CisJCS8qIEZyZXF1ZW50IGNhc2UuICovCisJCUZBSUxfSUYoQURETEkoU0xKSVRfTE9DQUxTX1JFR19tYXBwZWQsIFNMSklUX0xPQ0FMU19SRUdfbWFwcGVkLCAtbG9jYWxfc2l6ZSkpOworCQliYXNlID0gU0xKSVRfTE9DQUxTX1JFR19tYXBwZWQ7CisJfSBlbHNlIHsKKwkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzFfbWFwcGVkLCBsb2NhbF9zaXplKSk7CisJCUZBSUxfSUYoQUREKFRNUF9SRUcyX21hcHBlZCwgU0xKSVRfTE9DQUxTX1JFR19tYXBwZWQsIFpFUk8pKTsKKwkJRkFJTF9JRihTVUIoU0xKSVRfTE9DQUxTX1JFR19tYXBwZWQsIFNMSklUX0xPQ0FMU19SRUdfbWFwcGVkLCBUTVBfUkVHMV9tYXBwZWQpKTsKKwkJYmFzZSA9IFRNUF9SRUcyX21hcHBlZDsKKwkJbG9jYWxfc2l6ZSA9IDA7CisJfQorCisJLyogU2F2ZSB0aGUgcmV0dXJuIGFkZHJlc3MuICovCisJRkFJTF9JRihBRERMSShBRERSX1RNUF9tYXBwZWQsIGJhc2UsIGxvY2FsX3NpemUgLSA4KSk7CisJRkFJTF9JRihTVF9BREQoQUREUl9UTVBfbWFwcGVkLCBSQSwgLTgpKTsKKworCS8qIFNhdmUgdGhlIFMgcmVnaXN0ZXJzLiAqLworCXRtcCA9IHNhdmVkcyA8IFNMSklUX05VTUJFUl9PRl9TQVZFRF9SRUdJU1RFUlMgPyAoU0xKSVRfUzAgKyAxIC0gc2F2ZWRzKSA6IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsKKwlmb3IgKGkgPSBTTEpJVF9TMDsgaSA+PSB0bXA7IGktLSkgeworCQlGQUlMX0lGKFNUX0FERChBRERSX1RNUF9tYXBwZWQsIHJlZ19tYXBbaV0sIC04KSk7CisJfQorCisJLyogU2F2ZSB0aGUgUiByZWdpc3RlcnMgdGhhdCBuZWVkIHRvIGJlIHJlc2VydmVkLiAqLworCWZvciAoaSA9IHNjcmF0Y2hlczsgaSA+PSBTTEpJVF9GSVJTVF9TQVZFRF9SRUc7IGktLSkgeworCQlGQUlMX0lGKFNUX0FERChBRERSX1RNUF9tYXBwZWQsIHJlZ19tYXBbaV0sIC04KSk7CisJfQorCisJLyogTW92ZSB0aGUgYXJndW1lbnRzIHRvIFMgcmVnaXN0ZXJzLiAqLworCWZvciAoaSA9IDA7IGkgPCBhcmdzOyBpKyspIHsKKwkJRkFJTF9JRihBREQocmVnX21hcFtTTEpJVF9TMCAtIGldLCBpLCBaRVJPKSk7CisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAorCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9zZXRfY29udGV4dChjb21waWxlciwgb3B0aW9ucywgYXJncywgc2NyYXRjaGVzLCBzYXZlZHMsIGZzY3JhdGNoZXMsIGZzYXZlZHMsIGxvY2FsX3NpemUpKTsKKwlzZXRfc2V0X2NvbnRleHQoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKTsKKworCWxvY2FsX3NpemUgKz0gR0VUX1NBVkVEX1JFR0lTVEVSU19TSVpFKHNjcmF0Y2hlcywgc2F2ZWRzLCAxKTsKKwljb21waWxlci0+bG9jYWxfc2l6ZSA9IChsb2NhbF9zaXplICsgNykgJiB+NzsKKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBsb2NhbF9zaXplOworCXNsaml0X2lucyBiYXNlOworCXNsaml0X3NpIGksIHRtcDsKKwlzbGppdF9zaSBzYXZlZHM7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfcmV0dXJuKGNvbXBpbGVyLCBvcCwgc3JjLCBzcmN3KSk7CisKKwlGQUlMX0lGKGVtaXRfbW92X2JlZm9yZV9yZXR1cm4oY29tcGlsZXIsIG9wLCBzcmMsIHNyY3cpKTsKKworCWxvY2FsX3NpemUgPSBjb21waWxlci0+bG9jYWxfc2l6ZTsKKwlpZiAobG9jYWxfc2l6ZSA8PSBTSU1NXzE2QklUX01BWCkKKwkJYmFzZSA9IFNMSklUX0xPQ0FMU19SRUdfbWFwcGVkOworCWVsc2UgeworCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMV9tYXBwZWQsIGxvY2FsX3NpemUpKTsKKwkJRkFJTF9JRihBREQoVE1QX1JFRzFfbWFwcGVkLCBTTEpJVF9MT0NBTFNfUkVHX21hcHBlZCwgVE1QX1JFRzFfbWFwcGVkKSk7CisJCWJhc2UgPSBUTVBfUkVHMV9tYXBwZWQ7CisJCWxvY2FsX3NpemUgPSAwOworCX0KKworCS8qIFJlc3RvcmUgdGhlIHJldHVybiBhZGRyZXNzLiAqLworCUZBSUxfSUYoQURETEkoQUREUl9UTVBfbWFwcGVkLCBiYXNlLCBsb2NhbF9zaXplIC0gOCkpOworCUZBSUxfSUYoTERfQUREKFJBLCBBRERSX1RNUF9tYXBwZWQsIC04KSk7CisKKwkvKiBSZXN0b3JlIHRoZSBTIHJlZ2lzdGVycy4gKi8KKwlzYXZlZHMgPSBjb21waWxlci0+c2F2ZWRzOworCXRtcCA9IHNhdmVkcyA8IFNMSklUX05VTUJFUl9PRl9TQVZFRF9SRUdJU1RFUlMgPyAoU0xKSVRfUzAgKyAxIC0gc2F2ZWRzKSA6IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsKKwlmb3IgKGkgPSBTTEpJVF9TMDsgaSA+PSB0bXA7IGktLSkgeworCQlGQUlMX0lGKExEX0FERChyZWdfbWFwW2ldLCBBRERSX1RNUF9tYXBwZWQsIC04KSk7CisJfQorCisJLyogUmVzdG9yZSB0aGUgUiByZWdpc3RlcnMgdGhhdCBuZWVkIHRvIGJlIHJlc2VydmVkLiAqLworCWZvciAoaSA9IGNvbXBpbGVyLT5zY3JhdGNoZXM7IGkgPj0gU0xKSVRfRklSU1RfU0FWRURfUkVHOyBpLS0pIHsKKwkJRkFJTF9JRihMRF9BREQocmVnX21hcFtpXSwgQUREUl9UTVBfbWFwcGVkLCAtOCkpOworCX0KKworCWlmIChjb21waWxlci0+bG9jYWxfc2l6ZSA8PSBTSU1NXzE2QklUX01BWCkKKwkJRkFJTF9JRihBRERMSShTTEpJVF9MT0NBTFNfUkVHX21hcHBlZCwgU0xKSVRfTE9DQUxTX1JFR19tYXBwZWQsIGNvbXBpbGVyLT5sb2NhbF9zaXplKSk7CisJZWxzZQorCQlGQUlMX0lGKEFERChTTEpJVF9MT0NBTFNfUkVHX21hcHBlZCwgVE1QX1JFRzFfbWFwcGVkLCBaRVJPKSk7CisKKwlyZXR1cm4gSlIoUkEpOworfQorCisvKiByZWdfYXIgaXMgYW4gYWJzb3VsdXRlIHJlZ2lzdGVyISAqLworCisvKiBDYW4gcGVyZm9ybSBhbiBvcGVyYXRpb24gdXNpbmcgYXQgbW9zdCAxIGluc3RydWN0aW9uLiAqLworc3RhdGljIHNsaml0X3NpIGdldHB1dF9hcmdfZmFzdChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnX2FyLCBzbGppdF9zaSBhcmcsIHNsaml0X3N3IGFyZ3cpCit7CisJU0xKSVRfQVNTRVJUKGFyZyAmIFNMSklUX01FTSk7CisKKwlpZiAoKCEoZmxhZ3MgJiBXUklURV9CQUNLKSB8fCAhKGFyZyAmIFJFR19NQVNLKSkKKwkJCSYmICEoYXJnICYgT0ZGU19SRUdfTUFTSykgJiYgYXJndyA8PSBTSU1NXzE2QklUX01BWCAmJiBhcmd3ID49IFNJTU1fMTZCSVRfTUlOKSB7CisJCS8qIFdvcmtzIGZvciBib3RoIGFic291bHRlIGFuZCByZWxhdGl2ZSBhZGRyZXNzZXMuICovCisJCWlmIChTTEpJVF9VTkxJS0VMWShmbGFncyAmIEFSR19URVNUKSkKKwkJCXJldHVybiAxOworCisJCUZBSUxfSUYoQURETEkoQUREUl9UTVBfbWFwcGVkLCByZWdfbWFwW2FyZyAmIFJFR19NQVNLXSwgYXJndykpOworCisJCWlmIChmbGFncyAmIExPQURfREFUQSkKKwkJCUZBSUxfSUYoUEIyKGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10sIHJlZ19hciwgQUREUl9UTVBfbWFwcGVkKSk7CisJCWVsc2UKKwkJCUZBSUxfSUYoUEIyKGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10sIEFERFJfVE1QX21hcHBlZCwgcmVnX2FyKSk7CisKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKiBTZWUgZ2V0cHV0X2FyZyBiZWxvdy4KKyAgIE5vdGU6IGNhbl9jYWNoZSBpcyBjYWxsZWQgb25seSBmb3IgYmluYXJ5IG9wZXJhdG9ycy4gVGhvc2UKKyAgIG9wZXJhdG9ycyBhbHdheXMgdXNlcyB3b3JkIGFyZ3VtZW50cyB3aXRob3V0IHdyaXRlIGJhY2suICovCitzdGF0aWMgc2xqaXRfc2kgY2FuX2NhY2hlKHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfc2kgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKK3sKKwlTTEpJVF9BU1NFUlQoKGFyZyAmIFNMSklUX01FTSkgJiYgKG5leHRfYXJnICYgU0xKSVRfTUVNKSk7CisKKwkvKiBTaW1wbGUgb3BlcmF0aW9uIGV4Y2VwdCBmb3IgdXBkYXRlcy4gKi8KKwlpZiAoYXJnICYgT0ZGU19SRUdfTUFTSykgeworCQlhcmd3ICY9IDB4MzsKKwkJbmV4dF9hcmd3ICY9IDB4MzsKKwkJaWYgKGFyZ3cgJiYgYXJndyA9PSBuZXh0X2FyZ3cKKwkJCQkmJiAoYXJnID09IG5leHRfYXJnIHx8IChhcmcgJiBPRkZTX1JFR19NQVNLKSA9PSAobmV4dF9hcmcgJiBPRkZTX1JFR19NQVNLKSkpCisJCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGFyZyA9PSBuZXh0X2FyZykgeworCQlpZiAoKChuZXh0X2FyZ3cgLSBhcmd3KSA8PSBTSU1NXzE2QklUX01BWAorCQkJCSYmIChuZXh0X2FyZ3cgLSBhcmd3KSA+PSBTSU1NXzE2QklUX01JTikpCisJCQlyZXR1cm4gMTsKKworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogRW1pdCB0aGUgbmVjZXNzYXJ5IGluc3RydWN0aW9ucy4gU2VlIGNhbl9jYWNoZSBhYm92ZS4gKi8KK3N0YXRpYyBzbGppdF9zaSBnZXRwdXRfYXJnKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWdfYXIsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndywgc2xqaXRfc2kgbmV4dF9hcmcsIHNsaml0X3N3IG5leHRfYXJndykKK3sKKwlzbGppdF9zaSB0bXBfYXIsIGJhc2U7CisKKwlTTEpJVF9BU1NFUlQoYXJnICYgU0xKSVRfTUVNKTsKKwlpZiAoIShuZXh0X2FyZyAmIFNMSklUX01FTSkpIHsKKwkJbmV4dF9hcmcgPSAwOworCQluZXh0X2FyZ3cgPSAwOworCX0KKworCWlmICgoZmxhZ3MgJiBNRU1fTUFTSykgPD0gR1BSX1JFRyAmJiAoZmxhZ3MgJiBMT0FEX0RBVEEpKQorCQl0bXBfYXIgPSByZWdfYXI7CisJZWxzZQorCQl0bXBfYXIgPSBUTVBfUkVHMV9tYXBwZWQ7CisKKwliYXNlID0gYXJnICYgUkVHX01BU0s7CisKKwlpZiAoU0xKSVRfVU5MSUtFTFkoYXJnICYgT0ZGU19SRUdfTUFTSykpIHsKKwkJYXJndyAmPSAweDM7CisKKwkJaWYgKChmbGFncyAmIFdSSVRFX0JBQ0spICYmIHJlZ19hciA9PSByZWdfbWFwW2Jhc2VdKSB7CisJCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIExPQURfREFUQSkgJiYgcmVnX21hcFtUTVBfUkVHMV0gIT0gcmVnX2FyKTsKKwkJCUZBSUxfSUYoQUREKFRNUF9SRUcxX21hcHBlZCwgcmVnX2FyLCBaRVJPKSk7CisJCQlyZWdfYXIgPSBUTVBfUkVHMV9tYXBwZWQ7CisJCX0KKworCQkvKiBVc2luZyB0aGUgY2FjaGUuICovCisJCWlmIChhcmd3ID09IGNvbXBpbGVyLT5jYWNoZV9hcmd3KSB7CisJCQlpZiAoIShmbGFncyAmIFdSSVRFX0JBQ0spKSB7CisJCQkJaWYgKGFyZyA9PSBjb21waWxlci0+Y2FjaGVfYXJnKSB7CisJCQkJCWlmIChmbGFncyAmIExPQURfREFUQSkKKwkJCQkJCXJldHVybiBQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgcmVnX2FyLCBUTVBfUkVHM19tYXBwZWQpOworCQkJCQllbHNlCisJCQkJCQlyZXR1cm4gUEIyKGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10sIFRNUF9SRUczX21hcHBlZCwgcmVnX2FyKTsKKwkJCQl9CisKKwkJCQlpZiAoKFNMSklUX01FTSB8IChhcmcgJiBPRkZTX1JFR19NQVNLKSkgPT0gY29tcGlsZXItPmNhY2hlX2FyZykgeworCQkJCQlpZiAoYXJnID09IG5leHRfYXJnICYmIGFyZ3cgPT0gKG5leHRfYXJndyAmIDB4MykpIHsKKwkJCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBhcmc7CisJCQkJCQljb21waWxlci0+Y2FjaGVfYXJndyA9IGFyZ3c7CisJCQkJCQlGQUlMX0lGKEFERChUTVBfUkVHM19tYXBwZWQsIHJlZ19tYXBbYmFzZV0sIFRNUF9SRUczX21hcHBlZCkpOworCQkJCQkJaWYgKGZsYWdzICYgTE9BRF9EQVRBKQorCQkJCQkJCXJldHVybiBQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgcmVnX2FyLCBUTVBfUkVHM19tYXBwZWQpOworCQkJCQkJZWxzZQorCQkJCQkJCXJldHVybiBQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgVE1QX1JFRzNfbWFwcGVkLCByZWdfYXIpOworCQkJCQl9CisKKwkJCQkJRkFJTF9JRihBREQodG1wX2FyLCByZWdfbWFwW2Jhc2VdLCBUTVBfUkVHM19tYXBwZWQpKTsKKwkJCQkJaWYgKGZsYWdzICYgTE9BRF9EQVRBKQorCQkJCQkJcmV0dXJuIFBCMihkYXRhX3RyYW5zZmVyX2luc3RzW2ZsYWdzICYgTUVNX01BU0tdLCByZWdfYXIsIHRtcF9hcik7CisJCQkJCWVsc2UKKwkJCQkJCXJldHVybiBQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgdG1wX2FyLCByZWdfYXIpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKChTTEpJVF9NRU0gfCAoYXJnICYgT0ZGU19SRUdfTUFTSykpID09IGNvbXBpbGVyLT5jYWNoZV9hcmcpIHsKKwkJCQkJRkFJTF9JRihBREQocmVnX21hcFtiYXNlXSwgcmVnX21hcFtiYXNlXSwgVE1QX1JFRzNfbWFwcGVkKSk7CisJCQkJCWlmIChmbGFncyAmIExPQURfREFUQSkKKwkJCQkJCXJldHVybiBQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgcmVnX2FyLCByZWdfbWFwW2Jhc2VdKTsKKwkJCQkJZWxzZQorCQkJCQkJcmV0dXJuIFBCMihkYXRhX3RyYW5zZmVyX2luc3RzW2ZsYWdzICYgTUVNX01BU0tdLCByZWdfbWFwW2Jhc2VdLCByZWdfYXIpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChTTEpJVF9VTkxJS0VMWShhcmd3KSkgeworCQkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX01FTSB8IChhcmcgJiBPRkZTX1JFR19NQVNLKTsKKwkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJCUZBSUxfSUYoU0hMSShUTVBfUkVHM19tYXBwZWQsIHJlZ19tYXBbT0ZGU19SRUcoYXJnKV0sIGFyZ3cpKTsKKwkJfQorCisJCWlmICghKGZsYWdzICYgV1JJVEVfQkFDSykpIHsKKwkJCWlmIChhcmcgPT0gbmV4dF9hcmcgJiYgYXJndyA9PSAobmV4dF9hcmd3ICYgMHgzKSkgeworCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBhcmc7CisJCQkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCQkJCUZBSUxfSUYoQUREKFRNUF9SRUczX21hcHBlZCwgcmVnX21hcFtiYXNlXSwgcmVnX21hcFshYXJndyA/IE9GRlNfUkVHKGFyZykgOiBUTVBfUkVHM10pKTsKKwkJCQl0bXBfYXIgPSBUTVBfUkVHM19tYXBwZWQ7CisJCQl9IGVsc2UKKwkJCQlGQUlMX0lGKEFERCh0bXBfYXIsIHJlZ19tYXBbYmFzZV0sIHJlZ19tYXBbIWFyZ3cgPyBPRkZTX1JFRyhhcmcpIDogVE1QX1JFRzNdKSk7CisKKwkJCWlmIChmbGFncyAmIExPQURfREFUQSkKKwkJCQlyZXR1cm4gUEIyKGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10sIHJlZ19hciwgdG1wX2FyKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gUEIyKGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10sIHRtcF9hciwgcmVnX2FyKTsKKwkJfQorCisJCUZBSUxfSUYoQUREKHJlZ19tYXBbYmFzZV0sIHJlZ19tYXBbYmFzZV0sIHJlZ19tYXBbIWFyZ3cgPyBPRkZTX1JFRyhhcmcpIDogVE1QX1JFRzNdKSk7CisKKwkJaWYgKGZsYWdzICYgTE9BRF9EQVRBKQorCQkJcmV0dXJuIFBCMihkYXRhX3RyYW5zZmVyX2luc3RzW2ZsYWdzICYgTUVNX01BU0tdLCByZWdfYXIsIHJlZ19tYXBbYmFzZV0pOworCQllbHNlCisJCQlyZXR1cm4gUEIyKGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10sIHJlZ19tYXBbYmFzZV0sIHJlZ19hcik7CisJfQorCisJaWYgKFNMSklUX1VOTElLRUxZKGZsYWdzICYgV1JJVEVfQkFDSykgJiYgYmFzZSkgeworCQkvKiBVcGRhdGUgb25seSBhcHBsaWVzIGlmIGEgYmFzZSByZWdpc3RlciBleGlzdHMuICovCisJCWlmIChyZWdfYXIgPT0gcmVnX21hcFtiYXNlXSkgeworCQkJU0xKSVRfQVNTRVJUKCEoZmxhZ3MgJiBMT0FEX0RBVEEpICYmIFRNUF9SRUcxX21hcHBlZCAhPSByZWdfYXIpOworCQkJaWYgKGFyZ3cgPD0gU0lNTV8xNkJJVF9NQVggJiYgYXJndyA+PSBTSU1NXzE2QklUX01JTikgeworCQkJCUZBSUxfSUYoQURETEkoQUREUl9UTVBfbWFwcGVkLCByZWdfbWFwW2Jhc2VdLCBhcmd3KSk7CisJCQkJaWYgKGZsYWdzICYgTE9BRF9EQVRBKQorCQkJCQlGQUlMX0lGKFBCMihkYXRhX3RyYW5zZmVyX2luc3RzW2ZsYWdzICYgTUVNX01BU0tdLCByZWdfYXIsIEFERFJfVE1QX21hcHBlZCkpOworCQkJCWVsc2UKKwkJCQkJRkFJTF9JRihQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgQUREUl9UTVBfbWFwcGVkLCByZWdfYXIpKTsKKworCQkJCWlmIChhcmd3KQorCQkJCQlyZXR1cm4gQURETEkocmVnX21hcFtiYXNlXSwgcmVnX21hcFtiYXNlXSwgYXJndyk7CisKKwkJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJCX0KKworCQkJRkFJTF9JRihBREQoVE1QX1JFRzFfbWFwcGVkLCByZWdfYXIsIFpFUk8pKTsKKwkJCXJlZ19hciA9IFRNUF9SRUcxX21hcHBlZDsKKwkJfQorCisJCWlmIChhcmd3IDw9IFNJTU1fMTZCSVRfTUFYICYmIGFyZ3cgPj0gU0lNTV8xNkJJVF9NSU4pIHsKKwkJCWlmIChhcmd3KQorCQkJCUZBSUxfSUYoQURETEkocmVnX21hcFtiYXNlXSwgcmVnX21hcFtiYXNlXSwgYXJndykpOworCQl9IGVsc2UgeworCQkJaWYgKGNvbXBpbGVyLT5jYWNoZV9hcmcgPT0gU0xKSVRfTUVNCisJCQkJCSYmIGFyZ3cgLSBjb21waWxlci0+Y2FjaGVfYXJndyA8PSBTSU1NXzE2QklUX01BWAorCQkJCQkmJiBhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cgPj0gU0lNTV8xNkJJVF9NSU4pIHsKKwkJCQlpZiAoYXJndyAhPSBjb21waWxlci0+Y2FjaGVfYXJndykgeworCQkJCQlGQUlMX0lGKEFERChUTVBfUkVHM19tYXBwZWQsIFRNUF9SRUczX21hcHBlZCwgYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3KSk7CisJCQkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJCQl9CisKKwkJCQlGQUlMX0lGKEFERChyZWdfbWFwW2Jhc2VdLCByZWdfbWFwW2Jhc2VdLCBUTVBfUkVHM19tYXBwZWQpKTsKKwkJCX0gZWxzZSB7CisJCQkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX01FTTsKKwkJCQljb21waWxlci0+Y2FjaGVfYXJndyA9IGFyZ3c7CisJCQkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzNfbWFwcGVkLCBhcmd3KSk7CisJCQkJRkFJTF9JRihBREQocmVnX21hcFtiYXNlXSwgcmVnX21hcFtiYXNlXSwgVE1QX1JFRzNfbWFwcGVkKSk7CisJCQl9CisJCX0KKworCQlpZiAoZmxhZ3MgJiBMT0FEX0RBVEEpCisJCQlyZXR1cm4gUEIyKGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10sIHJlZ19hciwgcmVnX21hcFtiYXNlXSk7CisJCWVsc2UKKwkJCXJldHVybiBQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgcmVnX21hcFtiYXNlXSwgcmVnX2FyKTsKKwl9CisKKwlpZiAoY29tcGlsZXItPmNhY2hlX2FyZyA9PSBhcmcKKwkJCSYmIGFyZ3cgLSBjb21waWxlci0+Y2FjaGVfYXJndyA8PSBTSU1NXzE2QklUX01BWAorCQkJJiYgYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3ID49IFNJTU1fMTZCSVRfTUlOKSB7CisJCWlmIChhcmd3ICE9IGNvbXBpbGVyLT5jYWNoZV9hcmd3KSB7CisJCQlGQUlMX0lGKEFERExJKFRNUF9SRUczX21hcHBlZCwgVE1QX1JFRzNfbWFwcGVkLCBhcmd3IC0gY29tcGlsZXItPmNhY2hlX2FyZ3cpKTsKKwkJCWNvbXBpbGVyLT5jYWNoZV9hcmd3ID0gYXJndzsKKwkJfQorCisJCWlmIChmbGFncyAmIExPQURfREFUQSkKKwkJCXJldHVybiBQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgcmVnX2FyLCBUTVBfUkVHM19tYXBwZWQpOworCQllbHNlCisJCQlyZXR1cm4gUEIyKGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10sIFRNUF9SRUczX21hcHBlZCwgcmVnX2FyKTsKKwl9CisKKwlpZiAoY29tcGlsZXItPmNhY2hlX2FyZyA9PSBTTEpJVF9NRU0KKwkJCSYmIGFyZ3cgLSBjb21waWxlci0+Y2FjaGVfYXJndyA8PSBTSU1NXzE2QklUX01BWAorCQkJJiYgYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3ID49IFNJTU1fMTZCSVRfTUlOKSB7CisJCWlmIChhcmd3ICE9IGNvbXBpbGVyLT5jYWNoZV9hcmd3KQorCQkJRkFJTF9JRihBRERMSShUTVBfUkVHM19tYXBwZWQsIFRNUF9SRUczX21hcHBlZCwgYXJndyAtIGNvbXBpbGVyLT5jYWNoZV9hcmd3KSk7CisJfSBlbHNlIHsKKwkJY29tcGlsZXItPmNhY2hlX2FyZyA9IFNMSklUX01FTTsKKwkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzNfbWFwcGVkLCBhcmd3KSk7CisJfQorCisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSBhcmd3OworCisJaWYgKCFiYXNlKSB7CisJCWlmIChmbGFncyAmIExPQURfREFUQSkKKwkJCXJldHVybiBQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgcmVnX2FyLCBUTVBfUkVHM19tYXBwZWQpOworCQllbHNlCisJCQlyZXR1cm4gUEIyKGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10sIFRNUF9SRUczX21hcHBlZCwgcmVnX2FyKTsKKwl9CisKKwlpZiAoYXJnID09IG5leHRfYXJnCisJCQkmJiBuZXh0X2FyZ3cgLSBhcmd3IDw9IFNJTU1fMTZCSVRfTUFYCisJCQkmJiBuZXh0X2FyZ3cgLSBhcmd3ID49IFNJTU1fMTZCSVRfTUlOKSB7CisJCWNvbXBpbGVyLT5jYWNoZV9hcmcgPSBhcmc7CisJCUZBSUxfSUYoQUREKFRNUF9SRUczX21hcHBlZCwgVE1QX1JFRzNfbWFwcGVkLCByZWdfbWFwW2Jhc2VdKSk7CisJCWlmIChmbGFncyAmIExPQURfREFUQSkKKwkJCXJldHVybiBQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgcmVnX2FyLCBUTVBfUkVHM19tYXBwZWQpOworCQllbHNlCisJCQlyZXR1cm4gUEIyKGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10sIFRNUF9SRUczX21hcHBlZCwgcmVnX2FyKTsKKwl9CisKKwlGQUlMX0lGKEFERCh0bXBfYXIsIFRNUF9SRUczX21hcHBlZCwgcmVnX21hcFtiYXNlXSkpOworCisJaWYgKGZsYWdzICYgTE9BRF9EQVRBKQorCQlyZXR1cm4gUEIyKGRhdGFfdHJhbnNmZXJfaW5zdHNbZmxhZ3MgJiBNRU1fTUFTS10sIHJlZ19hciwgdG1wX2FyKTsKKwllbHNlCisJCXJldHVybiBQQjIoZGF0YV90cmFuc2Zlcl9pbnN0c1tmbGFncyAmIE1FTV9NQVNLXSwgdG1wX2FyLCByZWdfYXIpOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfb3BfbWVtKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSByZWdfYXIsIHNsaml0X3NpIGFyZywgc2xqaXRfc3cgYXJndykKK3sKKwlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncywgcmVnX2FyLCBhcmcsIGFyZ3cpKQorCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOworCisJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncywgcmVnX2FyLCBhcmcsIGFyZ3csIDAsIDApOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfb3BfbWVtMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgcmVnLCBzbGppdF9zaSBhcmcxLCBzbGppdF9zdyBhcmcxdywgc2xqaXRfc2kgYXJnMiwgc2xqaXRfc3cgYXJnMncpCit7CisJaWYgKGdldHB1dF9hcmdfZmFzdChjb21waWxlciwgZmxhZ3MsIHJlZywgYXJnMSwgYXJnMXcpKQorCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOworCXJldHVybiBnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncywgcmVnLCBhcmcxLCBhcmcxdywgYXJnMiwgYXJnMncpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mYXN0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dykKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgZHN0LCBkc3R3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCisJLyogRm9yIFVOVVNFRCBkc3QuIFVuY29tbW9uLCBidXQgcG9zc2libGUuICovCisJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQpCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJaWYgKEZBU1RfSVNfUkVHKGRzdCkpCisJCXJldHVybiBBREQocmVnX21hcFtkc3RdLCBSQSwgWkVSTyk7CisKKwkvKiBNZW1vcnkuICovCisJcmV0dXJuIGVtaXRfb3BfbWVtKGNvbXBpbGVyLCBXT1JEX0RBVEEsIFJBLCBkc3QsIGRzdHcpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mYXN0X3JldHVybihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2Zhc3RfcmV0dXJuKGNvbXBpbGVyLCBzcmMsIHNyY3cpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CisKKwlpZiAoRkFTVF9JU19SRUcoc3JjKSkKKwkJRkFJTF9JRihBREQoUkEsIHJlZ19tYXBbc3JjXSwgWkVSTykpOworCisJZWxzZSBpZiAoc3JjICYgU0xKSVRfTUVNKQorCQlGQUlMX0lGKGVtaXRfb3BfbWVtKGNvbXBpbGVyLCBXT1JEX0RBVEEgfCBMT0FEX0RBVEEsIFJBLCBzcmMsIHNyY3cpKTsKKworCWVsc2UgaWYgKHNyYyAmIFNMSklUX0lNTSkKKwkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgUkEsIHNyY3cpKTsKKworCXJldHVybiBKUihSQSk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9zaW5nbGVfb3Aoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGZsYWdzLCBzbGppdF9zaSBkc3QsIHNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzIpCit7CisJc2xqaXRfc2kgb3ZlcmZsb3dfcmEgPSAwOworCisJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgeworCWNhc2UgU0xKSVRfTU9WOgorCWNhc2UgU0xKSVRfTU9WX1A6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOworCQlpZiAoZHN0ICE9IHNyYzIpCisJCQlyZXR1cm4gQUREKHJlZ19tYXBbZHN0XSwgcmVnX21hcFtzcmMyXSwgWkVSTyk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9NT1ZfVUk6CisJY2FzZSBTTEpJVF9NT1ZfU0k6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOworCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0kpCisJCQkJcmV0dXJuIEJGRVhUUyhyZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMl0sIDAsIDMxKTsKKworCQkJcmV0dXJuIEJGRVhUVShyZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMl0sIDAsIDMxKTsKKwkJfSBlbHNlIGlmIChkc3QgIT0gc3JjMikgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gMCk7CisJCQlyZXR1cm4gQUREKHJlZ19tYXBbZHN0XSwgcmVnX21hcFtzcmMyXSwgWkVSTyk7CisJCX0KKworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfTU9WX1VCOgorCWNhc2UgU0xKSVRfTU9WX1NCOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSAmJiAhKGZsYWdzICYgU1JDMl9JTU0pKTsKKwkJaWYgKChmbGFncyAmIChSRUdfREVTVCB8IFJFRzJfU09VUkNFKSkgPT0gKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSB7CisJCQlpZiAob3AgPT0gU0xKSVRfTU9WX1NCKQorCQkJCXJldHVybiBCRkVYVFMocmVnX21hcFtkc3RdLCByZWdfbWFwW3NyYzJdLCAwLCA3KTsKKworCQkJcmV0dXJuIEJGRVhUVShyZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMl0sIDAsIDcpOworCQl9IGVsc2UgaWYgKGRzdCAhPSBzcmMyKSB7CisJCQlTTEpJVF9BU1NFUlQoc3JjMiA9PSAwKTsKKwkJCXJldHVybiBBREQocmVnX21hcFtkc3RdLCByZWdfbWFwW3NyYzJdLCBaRVJPKTsKKwkJfQorCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9NT1ZfVUg6CisJY2FzZSBTTEpJVF9NT1ZfU0g6CisJCVNMSklUX0FTU0VSVChzcmMxID09IFRNUF9SRUcxICYmICEoZmxhZ3MgJiBTUkMyX0lNTSkpOworCQlpZiAoKGZsYWdzICYgKFJFR19ERVNUIHwgUkVHMl9TT1VSQ0UpKSA9PSAoUkVHX0RFU1QgfCBSRUcyX1NPVVJDRSkpIHsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZfU0gpCisJCQkJcmV0dXJuIEJGRVhUUyhyZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMl0sIDAsIDE1KTsKKworCQkJcmV0dXJuIEJGRVhUVShyZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMl0sIDAsIDE1KTsKKwkJfSBlbHNlIGlmIChkc3QgIT0gc3JjMikgeworCQkJU0xKSVRfQVNTRVJUKHNyYzIgPT0gMCk7CisJCQlyZXR1cm4gQUREKHJlZ19tYXBbZHN0XSwgcmVnX21hcFtzcmMyXSwgWkVSTyk7CisJCX0KKworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfTk9UOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSAmJiAhKGZsYWdzICYgU1JDMl9JTU0pKTsKKwkJaWYgKG9wICYgU0xKSVRfU0VUX0UpCisJCQlGQUlMX0lGKE5PUihFUVVBTF9GTEFHLCByZWdfbWFwW3NyYzJdLCByZWdfbWFwW3NyYzJdKSk7CisJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpCisJCQlGQUlMX0lGKE5PUihyZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMl0sIHJlZ19tYXBbc3JjMl0pKTsKKworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfQ0xaOgorCQlTTEpJVF9BU1NFUlQoc3JjMSA9PSBUTVBfUkVHMSAmJiAhKGZsYWdzICYgU1JDMl9JTU0pKTsKKwkJaWYgKG9wICYgU0xKSVRfU0VUX0UpCisJCQlGQUlMX0lGKENMWihFUVVBTF9GTEFHLCByZWdfbWFwW3NyYzJdKSk7CisJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpCisJCQlGQUlMX0lGKENMWihyZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMl0pKTsKKworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfQUREOgorCQlpZiAoZmxhZ3MgJiBTUkMyX0lNTSkgeworCQkJaWYgKG9wICYgU0xKSVRfU0VUX08pIHsKKwkJCQlGQUlMX0lGKFNIUlVJKFRNUF9FUkVHMSwgcmVnX21hcFtzcmMxXSwgNjMpKTsKKwkJCQlpZiAoc3JjMiA8IDApCisJCQkJCUZBSUxfSUYoWE9SSShUTVBfRVJFRzEsIFRNUF9FUkVHMSwgMSkpOworCQkJfQorCisJCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkKKwkJCQlGQUlMX0lGKEFERExJKEVRVUFMX0ZMQUcsIHJlZ19tYXBbc3JjMV0sIHNyYzIpKTsKKworCQkJaWYgKG9wICYgU0xKSVRfU0VUX0MpIHsKKwkJCQlpZiAoc3JjMiA+PSAwKQorCQkJCQlGQUlMX0lGKE9SSShVTEVTU19GTEFHICxyZWdfbWFwW3NyYzFdLCBzcmMyKSk7CisJCQkJZWxzZSB7CisJCQkJCUZBSUxfSUYoQURETEkoVUxFU1NfRkxBRyAsWkVSTywgc3JjMikpOworCQkJCQlGQUlMX0lGKE9SKFVMRVNTX0ZMQUcscmVnX21hcFtzcmMxXSxVTEVTU19GTEFHKSk7CisJCQkJfQorCQkJfQorCisJCQkvKiBkc3QgbWF5IGJlIHRoZSBzYW1lIGFzIHNyYzEgb3Igc3JjMi4gKi8KKwkJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpCisJCQkJRkFJTF9JRihBRERMSShyZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMV0sIHNyYzIpKTsKKworCQkJaWYgKG9wICYgU0xKSVRfU0VUX08pIHsKKwkJCQlGQUlMX0lGKFNIUlVJKE9WRVJGTE9XX0ZMQUcsIHJlZ19tYXBbZHN0XSwgNjMpKTsKKworCQkJCWlmIChzcmMyIDwgMCkKKwkJCQkJRkFJTF9JRihYT1JJKE9WRVJGTE9XX0ZMQUcsIE9WRVJGTE9XX0ZMQUcsIDEpKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9PKSB7CisJCQkJRkFJTF9JRihYT1IoVE1QX0VSRUcxLCByZWdfbWFwW3NyYzFdLCByZWdfbWFwW3NyYzJdKSk7CisJCQkJRkFJTF9JRihTSFJVSShUTVBfRVJFRzEsIFRNUF9FUkVHMSwgNjMpKTsKKworCQkJCWlmIChzcmMxICE9IGRzdCkKKwkJCQkJb3ZlcmZsb3dfcmEgPSByZWdfbWFwW3NyYzFdOworCQkJCWVsc2UgaWYgKHNyYzIgIT0gZHN0KQorCQkJCQlvdmVyZmxvd19yYSA9IHJlZ19tYXBbc3JjMl07CisJCQkJZWxzZSB7CisJCQkJCS8qIFJhcmUgb2Nhc2lvbi4gKi8KKwkJCQkJRkFJTF9JRihBREQoVE1QX0VSRUcyLCByZWdfbWFwW3NyYzFdLCBaRVJPKSk7CisJCQkJCW92ZXJmbG93X3JhID0gVE1QX0VSRUcyOworCQkJCX0KKwkJCX0KKworCQkJaWYgKG9wICYgU0xKSVRfU0VUX0UpCisJCQkJRkFJTF9JRihBREQoRVFVQUxfRkxBRyAscmVnX21hcFtzcmMxXSwgcmVnX21hcFtzcmMyXSkpOworCisJCQlpZiAob3AgJiBTTEpJVF9TRVRfQykKKwkJCQlGQUlMX0lGKE9SKFVMRVNTX0ZMQUcscmVnX21hcFtzcmMxXSwgcmVnX21hcFtzcmMyXSkpOworCisJCQkvKiBkc3QgbWF5IGJlIHRoZSBzYW1lIGFzIHNyYzEgb3Igc3JjMi4gKi8KKwkJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpCisJCQkJRkFJTF9JRihBREQocmVnX21hcFtkc3RdLHJlZ19tYXBbc3JjMV0sIHJlZ19tYXBbc3JjMl0pKTsKKworCQkJaWYgKG9wICYgU0xKSVRfU0VUX08pIHsKKwkJCQlGQUlMX0lGKFhPUihPVkVSRkxPV19GTEFHLHJlZ19tYXBbZHN0XSwgb3ZlcmZsb3dfcmEpKTsKKwkJCQlGQUlMX0lGKFNIUlVJKE9WRVJGTE9XX0ZMQUcsIE9WRVJGTE9XX0ZMQUcsIDYzKSk7CisJCQl9CisJCX0KKworCQkvKiBhICsgYiA+PSBhIHwgYiAob3RoZXJ3aXNlLCB0aGUgY2Fycnkgc2hvdWxkIGJlIHNldCB0byAxKS4gKi8KKwkJaWYgKG9wICYgU0xKSVRfU0VUX0MpCisJCQlGQUlMX0lGKENNUExUVShVTEVTU19GTEFHICxyZWdfbWFwW2RzdF0gLFVMRVNTX0ZMQUcpKTsKKworCQlpZiAob3AgJiBTTEpJVF9TRVRfTykKKwkJCXJldHVybiBDTU9WTkVaKE9WRVJGTE9XX0ZMQUcsIFRNUF9FUkVHMSwgWkVSTyk7CisKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX0FEREM6CisJCWlmIChmbGFncyAmIFNSQzJfSU1NKSB7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfQykgeworCQkJCWlmIChzcmMyID49IDApCisJCQkJCUZBSUxfSUYoT1JJKFRNUF9FUkVHMSwgcmVnX21hcFtzcmMxXSwgc3JjMikpOworCQkJCWVsc2UgeworCQkJCQlGQUlMX0lGKEFERExJKFRNUF9FUkVHMSwgWkVSTywgc3JjMikpOworCQkJCQlGQUlMX0lGKE9SKFRNUF9FUkVHMSwgcmVnX21hcFtzcmMxXSwgVE1QX0VSRUcxKSk7CisJCQkJfQorCQkJfQorCisJCQlGQUlMX0lGKEFERExJKHJlZ19tYXBbZHN0XSwgcmVnX21hcFtzcmMxXSwgc3JjMikpOworCisJCX0gZWxzZSB7CisJCQlpZiAob3AgJiBTTEpJVF9TRVRfQykKKwkJCQlGQUlMX0lGKE9SKFRNUF9FUkVHMSwgcmVnX21hcFtzcmMxXSwgcmVnX21hcFtzcmMyXSkpOworCisJCQkvKiBkc3QgbWF5IGJlIHRoZSBzYW1lIGFzIHNyYzEgb3Igc3JjMi4gKi8KKwkJCUZBSUxfSUYoQUREKHJlZ19tYXBbZHN0XSwgcmVnX21hcFtzcmMxXSwgcmVnX21hcFtzcmMyXSkpOworCQl9CisKKwkJaWYgKG9wICYgU0xKSVRfU0VUX0MpCisJCQlGQUlMX0lGKENNUExUVShUTVBfRVJFRzEsIHJlZ19tYXBbZHN0XSwgVE1QX0VSRUcxKSk7CisKKwkJRkFJTF9JRihBREQocmVnX21hcFtkc3RdLCByZWdfbWFwW2RzdF0sIFVMRVNTX0ZMQUcpKTsKKworCQlpZiAoIShvcCAmIFNMSklUX1NFVF9DKSkKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJCS8qIFNldCBUTVBfRVJFRzIgKGRzdCA9PSAwKSAmJiAoVUxFU1NfRkxBRyA9PSAxKS4gKi8KKwkJRkFJTF9JRihDTVBMVFVJKFRNUF9FUkVHMiwgcmVnX21hcFtkc3RdLCAxKSk7CisJCUZBSUxfSUYoQU5EKFRNUF9FUkVHMiwgVE1QX0VSRUcyLCBVTEVTU19GTEFHKSk7CisJCS8qIFNldCBjYXJyeSBmbGFnLiAqLworCQlyZXR1cm4gT1IoVUxFU1NfRkxBRywgVE1QX0VSRUcyLCBUTVBfRVJFRzEpOworCisJY2FzZSBTTEpJVF9TVUI6CisJCWlmICgoZmxhZ3MgJiBTUkMyX0lNTSkgJiYgKChvcCAmIChTTEpJVF9TRVRfVSB8IFNMSklUX1NFVF9TKSkgfHwgc3JjMiA9PSBTSU1NXzE2QklUX01JTikpIHsKKwkJCUZBSUxfSUYoQURETEkoVE1QX1JFRzJfbWFwcGVkLCBaRVJPLCBzcmMyKSk7CisJCQlzcmMyID0gVE1QX1JFRzI7CisJCQlmbGFncyAmPSB+U1JDMl9JTU07CisJCX0KKworCQlpZiAoZmxhZ3MgJiBTUkMyX0lNTSkgeworCQkJaWYgKG9wICYgU0xKSVRfU0VUX08pIHsKKwkJCQlGQUlMX0lGKFNIUlVJKFRNUF9FUkVHMSxyZWdfbWFwW3NyYzFdLCA2MykpOworCisJCQkJaWYgKHNyYzIgPCAwKQorCQkJCQlGQUlMX0lGKFhPUkkoVE1QX0VSRUcxLCBUTVBfRVJFRzEsIDEpKTsKKworCQkJCWlmIChzcmMxICE9IGRzdCkKKwkJCQkJb3ZlcmZsb3dfcmEgPSByZWdfbWFwW3NyYzFdOworCQkJCWVsc2UgeworCQkJCQkvKiBSYXJlIG9jYXNpb24uICovCisJCQkJCUZBSUxfSUYoQUREKFRNUF9FUkVHMiwgcmVnX21hcFtzcmMxXSwgWkVSTykpOworCQkJCQlvdmVyZmxvd19yYSA9IFRNUF9FUkVHMjsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9FKQorCQkJCUZBSUxfSUYoQURETEkoRVFVQUxfRkxBRywgcmVnX21hcFtzcmMxXSwgLXNyYzIpKTsKKworCQkJaWYgKG9wICYgU0xKSVRfU0VUX0MpIHsKKwkJCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBBRERSX1RNUF9tYXBwZWQsIHNyYzIpKTsKKwkJCQlGQUlMX0lGKENNUExUVShVTEVTU19GTEFHLCByZWdfbWFwW3NyYzFdLCBBRERSX1RNUF9tYXBwZWQpKTsKKwkJCX0KKworCQkJLyogZHN0IG1heSBiZSB0aGUgc2FtZSBhcyBzcmMxIG9yIHNyYzIuICovCisJCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKQorCQkJCUZBSUxfSUYoQURETEkocmVnX21hcFtkc3RdLCByZWdfbWFwW3NyYzFdLCAtc3JjMikpOworCisJCX0gZWxzZSB7CisKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9PKSB7CisJCQkJRkFJTF9JRihYT1IoVE1QX0VSRUcxLCByZWdfbWFwW3NyYzFdLCByZWdfbWFwW3NyYzJdKSk7CisJCQkJRkFJTF9JRihTSFJVSShUTVBfRVJFRzEsIFRNUF9FUkVHMSwgNjMpKTsKKworCQkJCWlmIChzcmMxICE9IGRzdCkKKwkJCQkJb3ZlcmZsb3dfcmEgPSByZWdfbWFwW3NyYzFdOworCQkJCWVsc2UgeworCQkJCQkvKiBSYXJlIG9jYXNpb24uICovCisJCQkJCUZBSUxfSUYoQUREKFRNUF9FUkVHMiwgcmVnX21hcFtzcmMxXSwgWkVSTykpOworCQkJCQlvdmVyZmxvd19yYSA9IFRNUF9FUkVHMjsKKwkJCQl9CisJCQl9CisKKwkJCWlmIChvcCAmIFNMSklUX1NFVF9FKQorCQkJCUZBSUxfSUYoU1VCKEVRVUFMX0ZMQUcsIHJlZ19tYXBbc3JjMV0sIHJlZ19tYXBbc3JjMl0pKTsKKworCQkJaWYgKG9wICYgKFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX0MpKQorCQkJCUZBSUxfSUYoQ01QTFRVKFVMRVNTX0ZMQUcsIHJlZ19tYXBbc3JjMV0sIHJlZ19tYXBbc3JjMl0pKTsKKworCQkJaWYgKG9wICYgU0xKSVRfU0VUX1UpCisJCQkJRkFJTF9JRihDTVBMVFUoVUdSRUFURVJfRkxBRywgcmVnX21hcFtzcmMyXSwgcmVnX21hcFtzcmMxXSkpOworCisJCQlpZiAob3AgJiBTTEpJVF9TRVRfUykgeworCQkJCUZBSUxfSUYoQ01QTFRTKExFU1NfRkxBRyAscmVnX21hcFtzcmMxXSAscmVnX21hcFtzcmMyXSkpOworCQkJCUZBSUxfSUYoQ01QTFRTKEdSRUFURVJfRkxBRyAscmVnX21hcFtzcmMyXSAscmVnX21hcFtzcmMxXSkpOworCQkJfQorCisJCQkvKiBkc3QgbWF5IGJlIHRoZSBzYW1lIGFzIHNyYzEgb3Igc3JjMi4gKi8KKwkJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSB8IFNMSklUX1NFVF9VIHwgU0xKSVRfU0VUX1MgfCBTTEpJVF9TRVRfQykpCisJCQkJRkFJTF9JRihTVUIocmVnX21hcFtkc3RdLCByZWdfbWFwW3NyYzFdLCByZWdfbWFwW3NyYzJdKSk7CisJCX0KKworCQlpZiAob3AgJiBTTEpJVF9TRVRfTykgeworCQkJRkFJTF9JRihYT1IoT1ZFUkZMT1dfRkxBRywgcmVnX21hcFtkc3RdLCBvdmVyZmxvd19yYSkpOworCQkJRkFJTF9JRihTSFJVSShPVkVSRkxPV19GTEFHLCBPVkVSRkxPV19GTEFHLCA2MykpOworCQkJcmV0dXJuIENNT1ZFUVooT1ZFUkZMT1dfRkxBRywgVE1QX0VSRUcxLCBaRVJPKTsKKwkJfQorCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9TVUJDOgorCQlpZiAoKGZsYWdzICYgU1JDMl9JTU0pICYmIHNyYzIgPT0gU0lNTV8xNkJJVF9NSU4pIHsKKwkJCUZBSUxfSUYoQURETEkoVE1QX1JFRzJfbWFwcGVkLCBaRVJPLCBzcmMyKSk7CisJCQlzcmMyID0gVE1QX1JFRzI7CisJCQlmbGFncyAmPSB+U1JDMl9JTU07CisJCX0KKworCQlpZiAoZmxhZ3MgJiBTUkMyX0lNTSkgeworCQkJaWYgKG9wICYgU0xKSVRfU0VUX0MpIHsKKwkJCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBBRERSX1RNUF9tYXBwZWQsIC1zcmMyKSk7CisJCQkJRkFJTF9JRihDTVBMVFUoVE1QX0VSRUcxLCByZWdfbWFwW3NyYzFdLCBBRERSX1RNUF9tYXBwZWQpKTsKKwkJCX0KKworCQkJLyogZHN0IG1heSBiZSB0aGUgc2FtZSBhcyBzcmMxIG9yIHNyYzIuICovCisJCQlGQUlMX0lGKEFERExJKHJlZ19tYXBbZHN0XSwgcmVnX21hcFtzcmMxXSwgLXNyYzIpKTsKKworCQl9IGVsc2UgeworCQkJaWYgKG9wICYgU0xKSVRfU0VUX0MpCisJCQkJRkFJTF9JRihDTVBMVFUoVE1QX0VSRUcxLCByZWdfbWFwW3NyYzFdLCByZWdfbWFwW3NyYzJdKSk7CisJCQkJLyogZHN0IG1heSBiZSB0aGUgc2FtZSBhcyBzcmMxIG9yIHNyYzIuICovCisJCQlGQUlMX0lGKFNVQihyZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMV0sIHJlZ19tYXBbc3JjMl0pKTsKKwkJfQorCisJCWlmIChvcCAmIFNMSklUX1NFVF9DKQorCQkJRkFJTF9JRihDTU9WRVFaKFRNUF9FUkVHMSwgcmVnX21hcFtkc3RdLCBVTEVTU19GTEFHKSk7CisKKwkJRkFJTF9JRihTVUIocmVnX21hcFtkc3RdLCByZWdfbWFwW2RzdF0sIFVMRVNTX0ZMQUcpKTsKKworCQlpZiAob3AgJiBTTEpJVF9TRVRfQykKKwkJCUZBSUxfSUYoQUREKFVMRVNTX0ZMQUcsIFRNUF9FUkVHMSwgWkVSTykpOworCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9NVUw6CisJCWlmIChmbGFncyAmIFNSQzJfSU1NKSB7CisJCQlGQUlMX0lGKGxvYWRfaW1tZWRpYXRlKGNvbXBpbGVyLCBUTVBfUkVHMl9tYXBwZWQsIHNyYzIpKTsKKwkJCXNyYzIgPSBUTVBfUkVHMjsKKwkJCWZsYWdzICY9IH5TUkMyX0lNTTsKKwkJfQorCisJCUZBSUxfSUYoTVVMKHJlZ19tYXBbZHN0XSwgcmVnX21hcFtzcmMxXSwgcmVnX21hcFtzcmMyXSkpOworCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisjZGVmaW5lIEVNSVRfTE9HSUNBTChvcF9pbW0sIG9wX25vcm0pIFwKKwlpZiAoZmxhZ3MgJiBTUkMyX0lNTSkgeyBcCisJCUZBSUxfSUYobG9hZF9pbW1lZGlhdGUoY29tcGlsZXIsIEFERFJfVE1QX21hcHBlZCwgc3JjMikpOyBcCisJCWlmIChvcCAmIFNMSklUX1NFVF9FKSBcCisJCQlGQUlMX0lGKHB1c2hfM19idWZmZXIoIFwKKwkJCQljb21waWxlciwgb3Bfbm9ybSwgRVFVQUxfRkxBRywgcmVnX21hcFtzcmMxXSwgXAorCQkJCUFERFJfVE1QX21hcHBlZCwgX19MSU5FX18pKTsgXAorCQlpZiAoQ0hFQ0tfRkxBR1MoU0xKSVRfU0VUX0UpKSBcCisJCQlGQUlMX0lGKHB1c2hfM19idWZmZXIoIFwKKwkJCQljb21waWxlciwgb3Bfbm9ybSwgcmVnX21hcFtkc3RdLCByZWdfbWFwW3NyYzFdLCBcCisJCQkJQUREUl9UTVBfbWFwcGVkLCBfX0xJTkVfXykpOyBcCisJfSBlbHNlIHsgXAorCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkgXAorCQkJRkFJTF9JRihwdXNoXzNfYnVmZmVyKCBcCisJCQkJY29tcGlsZXIsIG9wX25vcm0sIEVRVUFMX0ZMQUcsIHJlZ19tYXBbc3JjMV0sIFwKKwkJCQlyZWdfbWFwW3NyYzJdLCBfX0xJTkVfXykpOyBcCisJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpIFwKKwkJCUZBSUxfSUYocHVzaF8zX2J1ZmZlciggXAorCQkJCWNvbXBpbGVyLCBvcF9ub3JtLCByZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMV0sIFwKKwkJCQlyZWdfbWFwW3NyYzJdLCBfX0xJTkVfXykpOyBcCisJfQorCisJY2FzZSBTTEpJVF9BTkQ6CisJCUVNSVRfTE9HSUNBTChUSUxFR1hfT1BDX0FOREksIFRJTEVHWF9PUENfQU5EKTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwljYXNlIFNMSklUX09SOgorCQlFTUlUX0xPR0lDQUwoVElMRUdYX09QQ19PUkksIFRJTEVHWF9PUENfT1IpOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCWNhc2UgU0xKSVRfWE9SOgorCQlFTUlUX0xPR0lDQUwoVElMRUdYX09QQ19YT1JJLCBUSUxFR1hfT1BDX1hPUik7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisjZGVmaW5lIEVNSVRfU0hJRlQob3BfaW1tLCBvcF9ub3JtKSBcCisJaWYgKGZsYWdzICYgU1JDMl9JTU0pIHsgXAorCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkgXAorCQkJRkFJTF9JRihwdXNoXzNfYnVmZmVyKCBcCisJCQkJY29tcGlsZXIsIG9wX2ltbSwgRVFVQUxfRkxBRywgcmVnX21hcFtzcmMxXSwgXAorCQkJCXNyYzIgJiAweDNGLCBfX0xJTkVfXykpOyBcCisJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpIFwKKwkJCUZBSUxfSUYocHVzaF8zX2J1ZmZlciggXAorCQkJCWNvbXBpbGVyLCBvcF9pbW0sIHJlZ19tYXBbZHN0XSwgcmVnX21hcFtzcmMxXSwgXAorCQkJCXNyYzIgJiAweDNGLCBfX0xJTkVfXykpOyBcCisJfSBlbHNlIHsgXAorCQlpZiAob3AgJiBTTEpJVF9TRVRfRSkgXAorCQkJRkFJTF9JRihwdXNoXzNfYnVmZmVyKCBcCisJCQkJY29tcGlsZXIsIG9wX25vcm0sIEVRVUFMX0ZMQUcsIHJlZ19tYXBbc3JjMV0sIFwKKwkJCQlyZWdfbWFwW3NyYzJdLCBfX0xJTkVfXykpOyBcCisJCWlmIChDSEVDS19GTEFHUyhTTEpJVF9TRVRfRSkpIFwKKwkJCUZBSUxfSUYocHVzaF8zX2J1ZmZlciggXAorCQkJCWNvbXBpbGVyLCBvcF9ub3JtLCByZWdfbWFwW2RzdF0sIHJlZ19tYXBbc3JjMV0sIFwKKwkJCQlyZWdfbWFwW3NyYzJdLCBfX0xJTkVfXykpOyBcCisJfQorCisJY2FzZSBTTEpJVF9TSEw6CisJCUVNSVRfU0hJRlQoVElMRUdYX09QQ19TSExJLCBUSUxFR1hfT1BDX1NITCk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9MU0hSOgorCQlFTUlUX1NISUZUKFRJTEVHWF9PUENfU0hSVUksIFRJTEVHWF9PUENfU0hSVSk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJY2FzZSBTTEpJVF9BU0hSOgorCQlFTUlUX1NISUZUKFRJTEVHWF9PUENfU0hSU0ksIFRJTEVHWF9PUENfU0hSUyk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCVNMSklUX0FTU0VSVF9TVE9QKCk7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBzbGppdF9zaSBlbWl0X29wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBmbGFncywgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywgc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJLyogYXJnMSBnb2VzIHRvIFRNUF9SRUcxIG9yIHNyYyByZWcuCisJICAgYXJnMiBnb2VzIHRvIFRNUF9SRUcyLCBpbW0gb3Igc3JjIHJlZy4KKwkgICBUTVBfUkVHMyBjYW4gYmUgdXNlZCBmb3IgY2FjaGluZy4KKwkgICByZXN1bHQgZ29lcyB0byBUTVBfUkVHMiwgc28gcHV0IHJlc3VsdCBjYW4gdXNlIFRNUF9SRUcxIGFuZCBUTVBfUkVHMy4gKi8KKwlzbGppdF9zaSBkc3RfciA9IFRNUF9SRUcyOworCXNsaml0X3NpIHNyYzFfcjsKKwlzbGppdF9zdyBzcmMyX3IgPSAwOworCXNsaml0X3NpIHN1Z2dfc3JjMl9yID0gVE1QX1JFRzI7CisKKwlpZiAoIShmbGFncyAmIEFMVF9LRUVQX0NBQ0hFKSkgeworCQljb21waWxlci0+Y2FjaGVfYXJnID0gMDsKKwkJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCX0KKworCWlmIChTTEpJVF9VTkxJS0VMWShkc3QgPT0gU0xKSVRfVU5VU0VEKSkgeworCQlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfU0kgJiYgIShzcmMyICYgU0xKSVRfTUVNKSkKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQlpZiAoR0VUX0ZMQUdTKG9wKSkKKwkJCWZsYWdzIHw9IFVOVVNFRF9ERVNUOworCX0gZWxzZSBpZiAoRkFTVF9JU19SRUcoZHN0KSkgeworCQlkc3RfciA9IGRzdDsKKwkJZmxhZ3MgfD0gUkVHX0RFU1Q7CisJCWlmIChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSkKKwkJCXN1Z2dfc3JjMl9yID0gZHN0X3I7CisJfSBlbHNlIGlmICgoZHN0ICYgU0xKSVRfTUVNKSAmJiAhZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncyB8IEFSR19URVNULCBUTVBfUkVHMV9tYXBwZWQsIGRzdCwgZHN0dykpCisJCWZsYWdzIHw9IFNMT1dfREVTVDsKKworCWlmIChmbGFncyAmIElNTV9PUCkgeworCQlpZiAoKHNyYzIgJiBTTEpJVF9JTU0pICYmIHNyYzJ3KSB7CisJCQlpZiAoKCEoZmxhZ3MgJiBMT0dJQ0FMX09QKQorCQkJCQkmJiAoc3JjMncgPD0gU0lNTV8xNkJJVF9NQVggJiYgc3JjMncgPj0gU0lNTV8xNkJJVF9NSU4pKQorCQkJCQl8fCAoKGZsYWdzICYgTE9HSUNBTF9PUCkgJiYgIShzcmMydyAmIH5VSU1NXzE2QklUX01BWCkpKSB7CisJCQkJZmxhZ3MgfD0gU1JDMl9JTU07CisJCQkJc3JjMl9yID0gc3JjMnc7CisJCQl9CisJCX0KKworCQlpZiAoIShmbGFncyAmIFNSQzJfSU1NKSAmJiAoZmxhZ3MgJiBDVU1VTEFUSVZFX09QKSAmJiAoc3JjMSAmIFNMSklUX0lNTSkgJiYgc3JjMXcpIHsKKwkJCWlmICgoIShmbGFncyAmIExPR0lDQUxfT1ApCisJCQkJCSYmIChzcmMxdyA8PSBTSU1NXzE2QklUX01BWCAmJiBzcmMxdyA+PSBTSU1NXzE2QklUX01JTikpCisJCQkJCXx8ICgoZmxhZ3MgJiBMT0dJQ0FMX09QKSAmJiAhKHNyYzF3ICYgflVJTU1fMTZCSVRfTUFYKSkpIHsKKwkJCQlmbGFncyB8PSBTUkMyX0lNTTsKKwkJCQlzcmMyX3IgPSBzcmMxdzsKKworCQkJCS8qIEFuZCBzd2FwIGFyZ3VtZW50cy4gKi8KKwkJCQlzcmMxID0gc3JjMjsKKwkJCQlzcmMxdyA9IHNyYzJ3OworCQkJCXNyYzIgPSBTTEpJVF9JTU07CisJCQkJLyogc3JjMncgPSBzcmMyX3IgdW5uZWVkZWQuICovCisJCQl9CisJCX0KKwl9CisKKwkvKiBTb3VyY2UgMS4gKi8KKwlpZiAoRkFTVF9JU19SRUcoc3JjMSkpIHsKKwkJc3JjMV9yID0gc3JjMTsKKwkJZmxhZ3MgfD0gUkVHMV9TT1VSQ0U7CisJfSBlbHNlIGlmIChzcmMxICYgU0xKSVRfSU1NKSB7CisJCWlmIChzcmMxdykgeworCQkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgVE1QX1JFRzFfbWFwcGVkLCBzcmMxdykpOworCQkJc3JjMV9yID0gVE1QX1JFRzE7CisJCX0gZWxzZQorCQkJc3JjMV9yID0gMDsKKwl9IGVsc2UgeworCQlpZiAoZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncyB8IExPQURfREFUQSwgVE1QX1JFRzFfbWFwcGVkLCBzcmMxLCBzcmMxdykpCisJCQlGQUlMX0lGKGNvbXBpbGVyLT5lcnJvcik7CisJCWVsc2UKKwkJCWZsYWdzIHw9IFNMT1dfU1JDMTsKKwkJc3JjMV9yID0gVE1QX1JFRzE7CisJfQorCisJLyogU291cmNlIDIuICovCisJaWYgKEZBU1RfSVNfUkVHKHNyYzIpKSB7CisJCXNyYzJfciA9IHNyYzI7CisJCWZsYWdzIHw9IFJFRzJfU09VUkNFOworCQlpZiAoIShmbGFncyAmIFJFR19ERVNUKSAmJiBvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSkKKwkJCWRzdF9yID0gc3JjMl9yOworCX0gZWxzZSBpZiAoc3JjMiAmIFNMSklUX0lNTSkgeworCQlpZiAoIShmbGFncyAmIFNSQzJfSU1NKSkgeworCQkJaWYgKHNyYzJ3KSB7CisJCQkJRkFJTF9JRihsb2FkX2ltbWVkaWF0ZShjb21waWxlciwgcmVnX21hcFtzdWdnX3NyYzJfcl0sIHNyYzJ3KSk7CisJCQkJc3JjMl9yID0gc3VnZ19zcmMyX3I7CisJCQl9IGVsc2UgeworCQkJCXNyYzJfciA9IDA7CisJCQkJaWYgKChvcCA+PSBTTEpJVF9NT1YgJiYgb3AgPD0gU0xKSVRfTU9WVV9TSSkgJiYgKGRzdCAmIFNMSklUX01FTSkpCisJCQkJCWRzdF9yID0gMDsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChnZXRwdXRfYXJnX2Zhc3QoY29tcGlsZXIsIGZsYWdzIHwgTE9BRF9EQVRBLCByZWdfbWFwW3N1Z2dfc3JjMl9yXSwgc3JjMiwgc3JjMncpKQorCQkJRkFJTF9JRihjb21waWxlci0+ZXJyb3IpOworCQllbHNlCisJCQlmbGFncyB8PSBTTE9XX1NSQzI7CisJCXNyYzJfciA9IHN1Z2dfc3JjMl9yOworCX0KKworCWlmICgoZmxhZ3MgJiAoU0xPV19TUkMxIHwgU0xPV19TUkMyKSkgPT0gKFNMT1dfU1JDMSB8IFNMT1dfU1JDMikpIHsKKwkJU0xKSVRfQVNTRVJUKHNyYzJfciA9PSBUTVBfUkVHMik7CisJCWlmICghY2FuX2NhY2hlKHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykgJiYgY2FuX2NhY2hlKHNyYzEsIHNyYzF3LCBkc3QsIGRzdHcpKSB7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMl9tYXBwZWQsIHNyYzIsIHNyYzJ3LCBzcmMxLCBzcmMxdykpOworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncyB8IExPQURfREFUQSwgVE1QX1JFRzFfbWFwcGVkLCBzcmMxLCBzcmMxdywgZHN0LCBkc3R3KSk7CisJCX0gZWxzZSB7CisJCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMV9tYXBwZWQsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCQkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncyB8IExPQURfREFUQSwgVE1QX1JFRzJfbWFwcGVkLCBzcmMyLCBzcmMydywgZHN0LCBkc3R3KSk7CisJCX0KKwl9IGVsc2UgaWYgKGZsYWdzICYgU0xPV19TUkMxKQorCQlGQUlMX0lGKGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzIHwgTE9BRF9EQVRBLCBUTVBfUkVHMV9tYXBwZWQsIHNyYzEsIHNyYzF3LCBkc3QsIGRzdHcpKTsKKwllbHNlIGlmIChmbGFncyAmIFNMT1dfU1JDMikKKwkJRkFJTF9JRihnZXRwdXRfYXJnKGNvbXBpbGVyLCBmbGFncyB8IExPQURfREFUQSwgcmVnX21hcFtzdWdnX3NyYzJfcl0sIHNyYzIsIHNyYzJ3LCBkc3QsIGRzdHcpKTsKKworCUZBSUxfSUYoZW1pdF9zaW5nbGVfb3AoY29tcGlsZXIsIG9wLCBmbGFncywgZHN0X3IsIHNyYzFfciwgc3JjMl9yKSk7CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKSB7CisJCWlmICghKGZsYWdzICYgU0xPV19ERVNUKSkgeworCQkJZ2V0cHV0X2FyZ19mYXN0KGNvbXBpbGVyLCBmbGFncywgcmVnX21hcFtkc3Rfcl0sIGRzdCwgZHN0dyk7CisJCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOworCQl9CisKKwkJcmV0dXJuIGdldHB1dF9hcmcoY29tcGlsZXIsIGZsYWdzLCByZWdfbWFwW2RzdF9yXSwgZHN0LCBkc3R3LCAwLCAwKTsKKwl9CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3LCBzbGppdF9zaSB0eXBlKQoreworCXNsaml0X3NpIHN1Z2dfZHN0X2FyLCBkc3RfYXI7CisJc2xqaXRfc2kgZmxhZ3MgPSBHRVRfQUxMX0ZMQUdTKG9wKTsKKwlzbGppdF9zaSBtZW1fdHlwZSA9IChvcCAmIFNMSklUX0lOVF9PUCkgPyAoSU5UX0RBVEEgfCBTSUdORURfREFUQSkgOiBXT1JEX0RBVEE7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfZmxhZ3MoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdywgdHlwZSkpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKworCW9wID0gR0VUX09QQ09ERShvcCk7CisJaWYgKG9wID09IFNMSklUX01PVl9TSSB8fCBvcCA9PSBTTEpJVF9NT1ZfVUkpCisJCW1lbV90eXBlID0gSU5UX0RBVEEgfCBTSUdORURfREFUQTsKKwlzdWdnX2RzdF9hciA9IHJlZ19tYXBbKG9wIDwgU0xKSVRfQUREICYmIEZBU1RfSVNfUkVHKGRzdCkpID8gZHN0IDogVE1QX1JFRzJdOworCisJY29tcGlsZXItPmNhY2hlX2FyZyA9IDA7CisJY29tcGlsZXItPmNhY2hlX2FyZ3cgPSAwOworCWlmIChvcCA+PSBTTEpJVF9BREQgJiYgKHNyYyAmIFNMSklUX01FTSkpIHsKKwkJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOworCQlGQUlMX0lGKGVtaXRfb3BfbWVtMihjb21waWxlciwgbWVtX3R5cGUgfCBMT0FEX0RBVEEsIFRNUF9SRUcxX21hcHBlZCwgc3JjLCBzcmN3LCBkc3QsIGRzdHcpKTsKKwkJc3JjID0gVE1QX1JFRzE7CisJCXNyY3cgPSAwOworCX0KKworCXN3aXRjaCAodHlwZSAmIDB4ZmYpIHsKKwljYXNlIFNMSklUX0VRVUFMOgorCWNhc2UgU0xKSVRfTk9UX0VRVUFMOgorCQlGQUlMX0lGKENNUExUVUkoc3VnZ19kc3RfYXIsIEVRVUFMX0ZMQUcsIDEpKTsKKwkJZHN0X2FyID0gc3VnZ19kc3RfYXI7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfTEVTUzoKKwljYXNlIFNMSklUX0dSRUFURVJfRVFVQUw6CisJCWRzdF9hciA9IFVMRVNTX0ZMQUc7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfR1JFQVRFUjoKKwljYXNlIFNMSklUX0xFU1NfRVFVQUw6CisJCWRzdF9hciA9IFVHUkVBVEVSX0ZMQUc7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfU0lHX0xFU1M6CisJY2FzZSBTTEpJVF9TSUdfR1JFQVRFUl9FUVVBTDoKKwkJZHN0X2FyID0gTEVTU19GTEFHOworCQlicmVhazsKKwljYXNlIFNMSklUX1NJR19HUkVBVEVSOgorCWNhc2UgU0xKSVRfU0lHX0xFU1NfRVFVQUw6CisJCWRzdF9hciA9IEdSRUFURVJfRkxBRzsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9PVkVSRkxPVzoKKwljYXNlIFNMSklUX05PVF9PVkVSRkxPVzoKKwkJZHN0X2FyID0gT1ZFUkZMT1dfRkxBRzsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9NVUxfT1ZFUkZMT1c6CisJY2FzZSBTTEpJVF9NVUxfTk9UX09WRVJGTE9XOgorCQlGQUlMX0lGKENNUExUVUkoc3VnZ19kc3RfYXIsIE9WRVJGTE9XX0ZMQUcsIDEpKTsKKwkJZHN0X2FyID0gc3VnZ19kc3RfYXI7CisJCXR5cGUgXj0gMHgxOyAvKiBGbGlwIHR5cGUgYml0IGZvciB0aGUgWE9SSSBiZWxvdy4gKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlTTEpJVF9BU1NFUlRfU1RPUCgpOworCQlkc3RfYXIgPSBzdWdnX2RzdF9hcjsKKwkJYnJlYWs7CisJfQorCisJaWYgKHR5cGUgJiAweDEpIHsKKwkJRkFJTF9JRihYT1JJKHN1Z2dfZHN0X2FyLCBkc3RfYXIsIDEpKTsKKwkJZHN0X2FyID0gc3VnZ19kc3RfYXI7CisJfQorCisJaWYgKG9wID49IFNMSklUX0FERCkgeworCQlpZiAoVE1QX1JFRzJfbWFwcGVkICE9IGRzdF9hcikKKwkJCUZBSUxfSUYoQUREKFRNUF9SRUcyX21hcHBlZCwgZHN0X2FyLCBaRVJPKSk7CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBvcCB8IGZsYWdzLCBtZW1fdHlwZSB8IENVTVVMQVRJVkVfT1AgfCBMT0dJQ0FMX09QIHwgSU1NX09QIHwgQUxUX0tFRVBfQ0FDSEUsIGRzdCwgZHN0dywgc3JjLCBzcmN3LCBUTVBfUkVHMiwgMCk7CisJfQorCisJaWYgKGRzdCAmIFNMSklUX01FTSkKKwkJcmV0dXJuIGVtaXRfb3BfbWVtKGNvbXBpbGVyLCBtZW1fdHlwZSwgZHN0X2FyLCBkc3QsIGRzdHcpOworCisJaWYgKHN1Z2dfZHN0X2FyICE9IGRzdF9hcikKKwkJcmV0dXJuIEFERChzdWdnX2RzdF9hciwgZHN0X2FyLCBaRVJPKTsKKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3ApIHsKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AwKGNvbXBpbGVyLCBvcCkpOworCisJb3AgPSBHRVRfT1BDT0RFKG9wKTsKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBTTEpJVF9OT1A6CisJCXJldHVybiBwdXNoXzBfYnVmZmVyKGNvbXBpbGVyLCBUSUxFR1hfT1BDX0ZOT1AsIF9fTElORV9fKTsKKworCWNhc2UgU0xKSVRfQlJFQUtQT0lOVDoKKwkJcmV0dXJuIFBJKEJQVCk7CisKKwljYXNlIFNMSklUX0xVTVVMOgorCWNhc2UgU0xKSVRfTFNNVUw6CisJY2FzZSBTTEpJVF9VRElWSToKKwljYXNlIFNMSklUX1NESVZJOgorCQlTTEpJVF9BU1NFUlRfU1RPUCgpOworCX0KKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDEoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CisKKwlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7CisJY2FzZSBTTEpJVF9NT1Y6CisJY2FzZSBTTEpJVF9NT1ZfUDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PViwgV09SRF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZfVUk6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfVUksIElOVF9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZfU0k6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0ksIElOVF9EQVRBIHwgU0lHTkVEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisKKwljYXNlIFNMSklUX01PVl9VQjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9VQiwgQllURV9EQVRBLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3ViKSBzcmN3IDogc3Jjdyk7CisKKwljYXNlIFNMSklUX01PVl9TQjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIFNMSklUX01PVl9TQiwgQllURV9EQVRBIHwgU0lHTkVEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfc2IpIHNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WX1VIOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VILCBIQUxGX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgKHNyYyAmIFNMSklUX0lNTSkgPyAoc2xqaXRfdWgpIHNyY3cgOiBzcmN3KTsKKworCWNhc2UgU0xKSVRfTU9WX1NIOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1NILCBIQUxGX0RBVEEgfCBTSUdORURfREFUQSwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zaCkgc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZVOgorCWNhc2UgU0xKSVRfTU9WVV9QOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBXT1JEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZVX1VJOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VJLCBJTlRfREFUQSB8IFdSSVRFX0JBQ0ssIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisKKwljYXNlIFNMSklUX01PVlVfU0k6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0ksIElOVF9EQVRBIHwgU0lHTkVEX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZVX1VCOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VCLCBCWVRFX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3ViKSBzcmN3IDogc3Jjdyk7CisKKwljYXNlIFNMSklUX01PVlVfU0I6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0IsIEJZVEVfREFUQSB8IFNJR05FRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zYikgc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9NT1ZVX1VIOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WX1VILCBIQUxGX0RBVEEgfCBXUklURV9CQUNLLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwLCBzcmMsIChzcmMgJiBTTEpJVF9JTU0pID8gKHNsaml0X3VoKSBzcmN3IDogc3Jjdyk7CisKKwljYXNlIFNMSklUX01PVlVfU0g6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1ZfU0gsIEhBTEZfREFUQSB8IFNJR05FRF9EQVRBIHwgV1JJVEVfQkFDSywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCAoc3JjICYgU0xKSVRfSU1NKSA/IChzbGppdF9zaCkgc3JjdyA6IHNyY3cpOworCisJY2FzZSBTTEpJVF9OT1Q6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBvcCwgMCwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfTkVHOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgU0xKSVRfU1VCIHwgR0VUX0FMTF9GTEFHUyhvcCksIElNTV9PUCwgZHN0LCBkc3R3LCBTTEpJVF9JTU0sIDAsIHNyYywgc3Jjdyk7CisKKwljYXNlIFNMSklUX0NMWjoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCAob3AgJiBTTEpJVF9JTlRfT1ApID8gSU5UX0RBVEEgOiBXT1JEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X29wMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywgc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X29wMihjb21waWxlciwgb3AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjMSwgc3JjMXcpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjMiwgc3JjMncpOworCisJc3dpdGNoIChHRVRfT1BDT0RFKG9wKSkgeworCWNhc2UgU0xKSVRfQUREOgorCWNhc2UgU0xKSVRfQUREQzoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCBDVU1VTEFUSVZFX09QIHwgSU1NX09QLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX1NVQjoKKwljYXNlIFNMSklUX1NVQkM6CisJCXJldHVybiBlbWl0X29wKGNvbXBpbGVyLCBvcCwgSU1NX09QLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX01VTDoKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCBDVU1VTEFUSVZFX09QLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX0FORDoKKwljYXNlIFNMSklUX09SOgorCWNhc2UgU0xKSVRfWE9SOgorCQlyZXR1cm4gZW1pdF9vcChjb21waWxlciwgb3AsIENVTVVMQVRJVkVfT1AgfCBMT0dJQ0FMX09QIHwgSU1NX09QLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisKKwljYXNlIFNMSklUX1NITDoKKwljYXNlIFNMSklUX0xTSFI6CisJY2FzZSBTTEpJVF9BU0hSOgorCQlpZiAoc3JjMiAmIFNMSklUX0lNTSkKKwkJCXNyYzJ3ICY9IDB4M2Y7CisJCWlmIChvcCAmIFNMSklUX0lOVF9PUCkKKwkJCXNyYzJ3ICY9IDB4MWY7CisKKwkJcmV0dXJuIGVtaXRfb3AoY29tcGlsZXIsIG9wLCBJTU1fT1AsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwl9CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHN0cnVjdCBzbGppdF9sYWJlbCAqIHNsaml0X2VtaXRfbGFiZWwoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKK3sKKwlzdHJ1Y3Qgc2xqaXRfbGFiZWwgKmxhYmVsOworCisJZmx1c2hfYnVmZmVyKGNvbXBpbGVyKTsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2xhYmVsKGNvbXBpbGVyKSk7CisKKwlpZiAoY29tcGlsZXItPmxhc3RfbGFiZWwgJiYgY29tcGlsZXItPmxhc3RfbGFiZWwtPnNpemUgPT0gY29tcGlsZXItPnNpemUpCisJCXJldHVybiBjb21waWxlci0+bGFzdF9sYWJlbDsKKworCWxhYmVsID0gKHN0cnVjdCBzbGppdF9sYWJlbCAqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2xhYmVsKSk7CisJUFRSX0ZBSUxfSUYoIWxhYmVsKTsKKwlzZXRfbGFiZWwobGFiZWwsIGNvbXBpbGVyKTsKKwlyZXR1cm4gbGFiZWw7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2lqdW1wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBzcmNfciA9IFRNUF9SRUcyOworCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wID0gTlVMTDsKKworCWZsdXNoX2J1ZmZlcihjb21waWxlcik7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfaWp1bXAoY29tcGlsZXIsIHR5cGUsIHNyYywgc3JjdykpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoc3JjLCBzcmN3KTsKKworCWlmIChGQVNUX0lTX1JFRyhzcmMpKSB7CisJCWlmIChyZWdfbWFwW3NyY10gIT0gMCkKKwkJCXNyY19yID0gc3JjOworCQllbHNlCisJCQlGQUlMX0lGKEFERF9TT0xPKFRNUF9SRUcyX21hcHBlZCwgcmVnX21hcFtzcmNdLCBaRVJPKSk7CisJfQorCisJaWYgKHR5cGUgPj0gU0xKSVRfQ0FMTDApIHsKKwkJU0xKSVRfQVNTRVJUKHJlZ19tYXBbUElDX0FERFJfUkVHXSA9PSAxNiAmJiBQSUNfQUREUl9SRUcgPT0gVE1QX1JFRzIpOworCQlpZiAoc3JjICYgKFNMSklUX0lNTSB8IFNMSklUX01FTSkpIHsKKwkJCWlmIChzcmMgJiBTTEpJVF9JTU0pCisJCQkJRkFJTF9JRihlbWl0X2NvbnN0KGNvbXBpbGVyLCByZWdfbWFwW1BJQ19BRERSX1JFR10sIHNyY3csIDEpKTsKKwkJCWVsc2UgeworCQkJCVNMSklUX0FTU0VSVChzcmNfciA9PSBUTVBfUkVHMiAmJiAoc3JjICYgU0xKSVRfTUVNKSk7CisJCQkJRkFJTF9JRihlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1YsIFdPUkRfREFUQSwgVE1QX1JFRzIsIDAsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpKTsKKwkJCX0KKworCQkJRkFJTF9JRihBRERfU09MTygwLCByZWdfbWFwW1NMSklUX1IwXSwgWkVSTykpOworCisJCQlGQUlMX0lGKEFERElfU09MTyg1NCwgNTQsIC0xNikpOworCisJCQlGQUlMX0lGKEpBTFJfU09MTyhyZWdfbWFwW1BJQ19BRERSX1JFR10pKTsKKworCQkJcmV0dXJuIEFERElfU09MTyg1NCwgNTQsIDE2KTsKKwkJfQorCisJCS8qIFJlZ2lzdGVyIGlucHV0LiAqLworCQlpZiAodHlwZSA+PSBTTEpJVF9DQUxMMSkKKwkJCUZBSUxfSUYoQUREX1NPTE8oMCwgcmVnX21hcFtTTEpJVF9SMF0sIFpFUk8pKTsKKworCQlGQUlMX0lGKEFERF9TT0xPKHJlZ19tYXBbUElDX0FERFJfUkVHXSwgcmVnX21hcFtzcmNfcl0sIFpFUk8pKTsKKworCQlGQUlMX0lGKEFERElfU09MTyg1NCwgNTQsIC0xNikpOworCisJCUZBSUxfSUYoSkFMUl9TT0xPKHJlZ19tYXBbc3JjX3JdKSk7CisKKwkJcmV0dXJuIEFERElfU09MTyg1NCwgNTQsIDE2KTsKKwl9CisKKwlpZiAoc3JjICYgU0xKSVRfSU1NKSB7CisJCWp1bXAgPSAoc3RydWN0IHNsaml0X2p1bXAgKillbnN1cmVfYWJ1Zihjb21waWxlciwgc2l6ZW9mKHN0cnVjdCBzbGppdF9qdW1wKSk7CisJCUZBSUxfSUYoIWp1bXApOworCQlzZXRfanVtcChqdW1wLCBjb21waWxlciwgSlVNUF9BRERSIHwgKCh0eXBlID49IFNMSklUX0ZBU1RfQ0FMTCkgPyBJU19KQUwgOiAwKSk7CisJCWp1bXAtPnUudGFyZ2V0ID0gc3JjdzsKKwkJRkFJTF9JRihlbWl0X2NvbnN0KGNvbXBpbGVyLCBUTVBfUkVHMl9tYXBwZWQsIDAsIDEpKTsKKworCQlpZiAodHlwZSA+PSBTTEpJVF9GQVNUX0NBTEwpIHsKKwkJCUZBSUxfSUYoQUREX1NPTE8oWkVSTywgWkVSTywgWkVSTykpOworCQkJanVtcC0+YWRkciA9IGNvbXBpbGVyLT5zaXplOworCQkJRkFJTF9JRihKUl9TT0xPKHJlZ19tYXBbc3JjX3JdKSk7CisJCX0gZWxzZSB7CisJCQlqdW1wLT5hZGRyID0gY29tcGlsZXItPnNpemU7CisJCQlGQUlMX0lGKEpSX1NPTE8ocmVnX21hcFtzcmNfcl0pKTsKKwkJfQorCisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCisJfSBlbHNlIGlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJRkFJTF9JRihlbWl0X29wKGNvbXBpbGVyLCBTTEpJVF9NT1YsIFdPUkRfREFUQSwgVE1QX1JFRzIsIDAsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpKTsKKwkJZmx1c2hfYnVmZmVyKGNvbXBpbGVyKTsKKwl9CisKKwlGQUlMX0lGKEpSX1NPTE8ocmVnX21hcFtzcmNfcl0pKTsKKworCWlmIChqdW1wKQorCQlqdW1wLT5hZGRyID0gY29tcGlsZXItPnNpemU7CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworI2RlZmluZSBCUl9aKHNyYykgXAorCWluc3QgPSBCRVFaX1gxIHwgU1JDQV9YMShzcmMpOyBcCisJZmxhZ3MgPSBJU19DT05EOworCisjZGVmaW5lIEJSX05aKHNyYykgXAorCWluc3QgPSBCTkVaX1gxIHwgU1JDQV9YMShzcmMpOyBcCisJZmxhZ3MgPSBJU19DT05EOworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAgKiBzbGppdF9lbWl0X2p1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSkKK3sKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKwlzbGppdF9pbnMgaW5zdDsKKwlzbGppdF9zaSBmbGFncyA9IDA7CisKKwlmbHVzaF9idWZmZXIoY29tcGlsZXIpOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfanVtcChjb21waWxlciwgdHlwZSkpOworCisJanVtcCA9IChzdHJ1Y3Qgc2xqaXRfanVtcCAqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2p1bXApKTsKKwlQVFJfRkFJTF9JRighanVtcCk7CisJc2V0X2p1bXAoanVtcCwgY29tcGlsZXIsIHR5cGUgJiBTTEpJVF9SRVdSSVRBQkxFX0pVTVApOworCXR5cGUgJj0gMHhmZjsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU0xKSVRfRVFVQUw6CisJCUJSX05aKEVRVUFMX0ZMQUcpOworCQlicmVhazsKKwljYXNlIFNMSklUX05PVF9FUVVBTDoKKwkJQlJfWihFUVVBTF9GTEFHKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9MRVNTOgorCQlCUl9aKFVMRVNTX0ZMQUcpOworCQlicmVhazsKKwljYXNlIFNMSklUX0dSRUFURVJfRVFVQUw6CisJCUJSX05aKFVMRVNTX0ZMQUcpOworCQlicmVhazsKKwljYXNlIFNMSklUX0dSRUFURVI6CisJCUJSX1ooVUdSRUFURVJfRkxBRyk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfTEVTU19FUVVBTDoKKwkJQlJfTlooVUdSRUFURVJfRkxBRyk7CisJCWJyZWFrOworCWNhc2UgU0xKSVRfU0lHX0xFU1M6CisJCUJSX1ooTEVTU19GTEFHKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9TSUdfR1JFQVRFUl9FUVVBTDoKKwkJQlJfTlooTEVTU19GTEFHKTsKKwkJYnJlYWs7CisJY2FzZSBTTEpJVF9TSUdfR1JFQVRFUjoKKwkJQlJfWihHUkVBVEVSX0ZMQUcpOworCQlicmVhazsKKwljYXNlIFNMSklUX1NJR19MRVNTX0VRVUFMOgorCQlCUl9OWihHUkVBVEVSX0ZMQUcpOworCQlicmVhazsKKwljYXNlIFNMSklUX09WRVJGTE9XOgorCWNhc2UgU0xKSVRfTVVMX09WRVJGTE9XOgorCQlCUl9aKE9WRVJGTE9XX0ZMQUcpOworCQlicmVhazsKKwljYXNlIFNMSklUX05PVF9PVkVSRkxPVzoKKwljYXNlIFNMSklUX01VTF9OT1RfT1ZFUkZMT1c6CisJCUJSX05aKE9WRVJGTE9XX0ZMQUcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBOb3QgY29uZGl0aW9uYWwgYnJhbmNoLiAqLworCQlpbnN0ID0gMDsKKwkJYnJlYWs7CisJfQorCisJanVtcC0+ZmxhZ3MgfD0gZmxhZ3M7CisKKwlpZiAoaW5zdCkgeworCQlpbnN0ID0gaW5zdCB8ICgodHlwZSA8PSBTTEpJVF9KVU1QKSA/IEJPRkZfWDEoNSkgOiBCT0ZGX1gxKDYpKTsKKwkJUFRSX0ZBSUxfSUYoUEkoaW5zdCkpOworCX0KKworCVBUUl9GQUlMX0lGKGVtaXRfY29uc3QoY29tcGlsZXIsIFRNUF9SRUcyX21hcHBlZCwgMCwgMSkpOworCWlmICh0eXBlIDw9IFNMSklUX0pVTVApIHsKKwkJanVtcC0+YWRkciA9IGNvbXBpbGVyLT5zaXplOworCQlQVFJfRkFJTF9JRihKUl9TT0xPKFRNUF9SRUcyX21hcHBlZCkpOworCX0gZWxzZSB7CisJCVNMSklUX0FTU0VSVChyZWdfbWFwW1BJQ19BRERSX1JFR10gPT0gMTYgJiYgUElDX0FERFJfUkVHID09IFRNUF9SRUcyKTsKKwkJLyogQ2Fubm90IGJlIG9wdGltaXplZCBvdXQgaWYgdHlwZSBpcyA+PSBDQUxMMC4gKi8KKwkJanVtcC0+ZmxhZ3MgfD0gSVNfSkFMIHwgKHR5cGUgPj0gU0xKSVRfQ0FMTDAgPyBTTEpJVF9SRVdSSVRBQkxFX0pVTVAgOiAwKTsKKwkJUFRSX0ZBSUxfSUYoQUREX1NPTE8oMCwgcmVnX21hcFtTTEpJVF9SMF0sIFpFUk8pKTsKKwkJanVtcC0+YWRkciA9IGNvbXBpbGVyLT5zaXplOworCQlQVFJfRkFJTF9JRihKQUxSX1NPTE8oVE1QX1JFRzJfbWFwcGVkKSk7CisJfQorCisJcmV0dXJuIGp1bXA7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9pc19mcHVfYXZhaWxhYmxlKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCVNMSklUX0FTU0VSVF9TVE9QKCk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsIHNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQoreworCVNMSklUX0FTU0VSVF9TVE9QKCk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzdHJ1Y3Qgc2xqaXRfY29uc3QgKiBzbGppdF9lbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdF92YWx1ZSkKK3sKKwlzdHJ1Y3Qgc2xqaXRfY29uc3QgKmNvbnN0XzsKKwlzbGppdF9zaSByZWc7CisKKwlmbHVzaF9idWZmZXIoY29tcGlsZXIpOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfY29uc3QoY29tcGlsZXIsIGRzdCwgZHN0dywgaW5pdF92YWx1ZSkpOworCUFESlVTVF9MT0NBTF9PRkZTRVQoZHN0LCBkc3R3KTsKKworCWNvbnN0XyA9IChzdHJ1Y3Qgc2xqaXRfY29uc3QgKillbnN1cmVfYWJ1Zihjb21waWxlciwgc2l6ZW9mKHN0cnVjdCBzbGppdF9jb25zdCkpOworCVBUUl9GQUlMX0lGKCFjb25zdF8pOworCXNldF9jb25zdChjb25zdF8sIGNvbXBpbGVyKTsKKworCXJlZyA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfUkVHMjsKKworCVBUUl9GQUlMX0lGKGVtaXRfY29uc3RfNjQoY29tcGlsZXIsIHJlZywgaW5pdF92YWx1ZSwgMSkpOworCisJaWYgKGRzdCAmIFNMSklUX01FTSkKKwkJUFRSX0ZBSUxfSUYoZW1pdF9vcChjb21waWxlciwgU0xKSVRfTU9WLCBXT1JEX0RBVEEsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDAsIFRNUF9SRUcyLCAwKSk7CisJcmV0dXJuIGNvbnN0XzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2p1bXBfYWRkcihzbGppdF91dyBhZGRyLCBzbGppdF91dyBuZXdfYWRkcikKK3sKKwlzbGppdF9pbnMgKmluc3QgPSAoc2xqaXRfaW5zICopYWRkcjsKKworCWluc3RbMF0gPSAoaW5zdFswXSAmIH4oMHhGRkZGTCA8PCA0MykpIHwgKCgobmV3X2FkZHIgPj4gMzIpICYgMHhmZmZmKSA8PCA0Myk7CisJaW5zdFsxXSA9IChpbnN0WzFdICYgfigweEZGRkZMIDw8IDQzKSkgfCAoKChuZXdfYWRkciA+PiAxNikgJiAweGZmZmYpIDw8IDQzKTsKKwlpbnN0WzJdID0gKGluc3RbMl0gJiB+KDB4RkZGRkwgPDwgNDMpKSB8ICgobmV3X2FkZHIgJiAweGZmZmYpIDw8IDQzKTsKKwlTTEpJVF9DQUNIRV9GTFVTSChpbnN0LCBpbnN0ICsgMyk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIHNsaml0X3NldF9jb25zdChzbGppdF91dyBhZGRyLCBzbGppdF9zdyBuZXdfY29uc3RhbnQpCit7CisJc2xqaXRfaW5zICppbnN0ID0gKHNsaml0X2lucyAqKWFkZHI7CisKKwlpbnN0WzBdID0gKGluc3RbMF0gJiB+KDB4RkZGRkwgPDwgNDMpKSB8ICgoKG5ld19jb25zdGFudCA+PiA0OCkgJiAweEZGRkZMKSA8PCA0Myk7CisJaW5zdFsxXSA9IChpbnN0WzFdICYgfigweEZGRkZMIDw8IDQzKSkgfCAoKChuZXdfY29uc3RhbnQgPj4gMzIpICYgMHhGRkZGTCkgPDwgNDMpOworCWluc3RbMl0gPSAoaW5zdFsyXSAmIH4oMHhGRkZGTCA8PCA0MykpIHwgKCgobmV3X2NvbnN0YW50ID4+IDE2KSAmIDB4RkZGRkwpIDw8IDQzKTsKKwlpbnN0WzNdID0gKGluc3RbM10gJiB+KDB4RkZGRkwgPDwgNDMpKSB8ICgobmV3X2NvbnN0YW50ICYgMHhGRkZGTCkgPDwgNDMpOworCVNMSklUX0NBQ0hFX0ZMVVNIKGluc3QsIGluc3QgKyA0KTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCit7CisJQ0hFQ0tfUkVHX0lOREVYKGNoZWNrX3Nsaml0X2dldF9yZWdpc3Rlcl9pbmRleChyZWcpKTsKKwlyZXR1cm4gcmVnX21hcFtyZWddOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcF9jdXN0b20oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwl2b2lkICppbnN0cnVjdGlvbiwgc2xqaXRfc2kgc2l6ZSkKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgc2l6ZSkpOworCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7Cit9CisKZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVg4Nl8zMi5jIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlWDg2XzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDcxMjljOAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVg4Nl8zMi5jCkBAIC0wLDAgKzEsNTUwIEBACisvKgorICogICAgU3RhY2stbGVzcyBKdXN0LUluLVRpbWUgY29tcGlsZXIKKyAqCisgKiAgICBDb3B5cmlnaHQgMjAwOS0yMDEyIFpvbHRhbiBIZXJjemVnIChoem1lc3RlckBmcmVlbWFpbC5odSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisgKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mCisgKiAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQKKyAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIHg4NiAzMi1iaXQgYXJjaCBkZXBlbmRlbnQgZnVuY3Rpb25zLiAqLworCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9kb19pbW0oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfdWIgb3Bjb2RlLCBzbGppdF9zdyBpbW0pCit7CisJc2xqaXRfdWIgKmluc3Q7CisKKwlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSArIHNpemVvZihzbGppdF9zdykpOworCUZBSUxfSUYoIWluc3QpOworCUlOQ19TSVpFKDEgKyBzaXplb2Yoc2xqaXRfc3cpKTsKKwkqaW5zdCsrID0gb3Bjb2RlOworCSooc2xqaXRfc3cqKWluc3QgPSBpbW07CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBzbGppdF91YiogZ2VuZXJhdGVfZmFyX2p1bXBfY29kZShzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfdWIgKmNvZGVfcHRyLCBzbGppdF9zaSB0eXBlKQoreworCWlmICh0eXBlID09IFNMSklUX0pVTVApIHsKKwkJKmNvZGVfcHRyKysgPSBKTVBfaTMyOworCQlqdW1wLT5hZGRyKys7CisJfQorCWVsc2UgaWYgKHR5cGUgPj0gU0xKSVRfRkFTVF9DQUxMKSB7CisJCSpjb2RlX3B0cisrID0gQ0FMTF9pMzI7CisJCWp1bXAtPmFkZHIrKzsKKwl9CisJZWxzZSB7CisJCSpjb2RlX3B0cisrID0gR1JPVVBfMEY7CisJCSpjb2RlX3B0cisrID0gZ2V0X2p1bXBfY29kZSh0eXBlKTsKKwkJanVtcC0+YWRkciArPSAyOworCX0KKworCWlmIChqdW1wLT5mbGFncyAmIEpVTVBfTEFCRUwpCisJCWp1bXAtPmZsYWdzIHw9IFBBVENIX01XOworCWVsc2UKKwkJKihzbGppdF9zdyopY29kZV9wdHIgPSBqdW1wLT51LnRhcmdldCAtIChqdW1wLT5hZGRyICsgNCk7CisJY29kZV9wdHIgKz0gNDsKKworCXJldHVybiBjb2RlX3B0cjsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZW50ZXIoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKKwlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQoreworCXNsaml0X3NpIHNpemU7CisJc2xqaXRfdWIgKmluc3Q7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZW50ZXIoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CisJc2V0X2VtaXRfZW50ZXIoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKTsKKworCWNvbXBpbGVyLT5hcmdzID0gYXJnczsKKwljb21waWxlci0+ZmxhZ3Nfc2F2ZWQgPSAwOworCisJc2l6ZSA9IDEgKyAoc2NyYXRjaGVzID4gNyA/IChzY3JhdGNoZXMgLSA3KSA6IDApICsgKHNhdmVkcyA8PSAzID8gc2F2ZWRzIDogMyk7CisjaWYgKGRlZmluZWQgU0xKSVRfWDg2XzMyX0ZBU1RDQUxMICYmIFNMSklUX1g4Nl8zMl9GQVNUQ0FMTCkKKwlzaXplICs9IChhcmdzID4gMCA/IChhcmdzICogMikgOiAwKSArIChhcmdzID4gMiA/IDIgOiAwKTsKKyNlbHNlCisJc2l6ZSArPSAoYXJncyA+IDAgPyAoMiArIGFyZ3MgKiAzKSA6IDApOworI2VuZGlmCisJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOworCUZBSUxfSUYoIWluc3QpOworCisJSU5DX1NJWkUoc2l6ZSk7CisJUFVTSF9SRUcocmVnX21hcFtUTVBfUkVHMV0pOworI2lmICEoZGVmaW5lZCBTTEpJVF9YODZfMzJfRkFTVENBTEwgJiYgU0xKSVRfWDg2XzMyX0ZBU1RDQUxMKQorCWlmIChhcmdzID4gMCkgeworCQkqaW5zdCsrID0gTU9WX3Jfcm07CisJCSppbnN0KysgPSBNT0RfUkVHIHwgKHJlZ19tYXBbVE1QX1JFRzFdIDw8IDMpIHwgMHg0IC8qIGVzcCAqLzsKKwl9CisjZW5kaWYKKwlpZiAoc2F2ZWRzID4gMiB8fCBzY3JhdGNoZXMgPiA3KQorCQlQVVNIX1JFRyhyZWdfbWFwW1NMSklUX1MyXSk7CisJaWYgKHNhdmVkcyA+IDEgfHwgc2NyYXRjaGVzID4gOCkKKwkJUFVTSF9SRUcocmVnX21hcFtTTEpJVF9TMV0pOworCWlmIChzYXZlZHMgPiAwIHx8IHNjcmF0Y2hlcyA+IDkpCisJCVBVU0hfUkVHKHJlZ19tYXBbU0xKSVRfUzBdKTsKKworI2lmIChkZWZpbmVkIFNMSklUX1g4Nl8zMl9GQVNUQ0FMTCAmJiBTTEpJVF9YODZfMzJfRkFTVENBTEwpCisJaWYgKGFyZ3MgPiAwKSB7CisJCSppbnN0KysgPSBNT1Zfcl9ybTsKKwkJKmluc3QrKyA9IE1PRF9SRUcgfCAocmVnX21hcFtTTEpJVF9TMF0gPDwgMykgfCByZWdfbWFwW1NMSklUX1IyXTsKKwl9CisJaWYgKGFyZ3MgPiAxKSB7CisJCSppbnN0KysgPSBNT1Zfcl9ybTsKKwkJKmluc3QrKyA9IE1PRF9SRUcgfCAocmVnX21hcFtTTEpJVF9TMV0gPDwgMykgfCByZWdfbWFwW1NMSklUX1IxXTsKKwl9CisJaWYgKGFyZ3MgPiAyKSB7CisJCSppbnN0KysgPSBNT1Zfcl9ybTsKKwkJKmluc3QrKyA9IE1PRF9ESVNQOCB8IChyZWdfbWFwW1NMSklUX1MyXSA8PCAzKSB8IDB4NCAvKiBlc3AgKi87CisJCSppbnN0KysgPSAweDI0OworCQkqaW5zdCsrID0gc2l6ZW9mKHNsaml0X3N3KSAqICgzICsgMik7IC8qIHNhdmVkcyA+PSAzIGFzIHdlbGwuICovCisJfQorI2Vsc2UKKwlpZiAoYXJncyA+IDApIHsKKwkJKmluc3QrKyA9IE1PVl9yX3JtOworCQkqaW5zdCsrID0gTU9EX0RJU1A4IHwgKHJlZ19tYXBbU0xKSVRfUzBdIDw8IDMpIHwgcmVnX21hcFtUTVBfUkVHMV07CisJCSppbnN0KysgPSBzaXplb2Yoc2xqaXRfc3cpICogMjsKKwl9CisJaWYgKGFyZ3MgPiAxKSB7CisJCSppbnN0KysgPSBNT1Zfcl9ybTsKKwkJKmluc3QrKyA9IE1PRF9ESVNQOCB8IChyZWdfbWFwW1NMSklUX1MxXSA8PCAzKSB8IHJlZ19tYXBbVE1QX1JFRzFdOworCQkqaW5zdCsrID0gc2l6ZW9mKHNsaml0X3N3KSAqIDM7CisJfQorCWlmIChhcmdzID4gMikgeworCQkqaW5zdCsrID0gTU9WX3Jfcm07CisJCSppbnN0KysgPSBNT0RfRElTUDggfCAocmVnX21hcFtTTEpJVF9TMl0gPDwgMykgfCByZWdfbWFwW1RNUF9SRUcxXTsKKwkJKmluc3QrKyA9IHNpemVvZihzbGppdF9zdykgKiA0OworCX0KKyNlbmRpZgorCisJU0xKSVRfQ09NUElMRV9BU1NFUlQoU0xKSVRfTE9DQUxTX09GRlNFVCA+PSAoMiArIDQpICogc2l6ZW9mKHNsaml0X3V3KSwgcmVxdWlyZV9hdF9sZWFzdF90d29fd29yZHMpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCS8qIElnbm9yZSBwdXNoZWQgcmVnaXN0ZXJzIGFuZCBTTEpJVF9MT0NBTFNfT0ZGU0VUIHdoZW4gY29tcHV0aW5nIHRoZSBhbGlnbmVkIGxvY2FsIHNpemUuICovCisJc2F2ZWRzID0gKDIgKyAoc2NyYXRjaGVzID4gNyA/IChzY3JhdGNoZXMgLSA3KSA6IDApICsgKHNhdmVkcyA8PSAzID8gc2F2ZWRzIDogMykpICogc2l6ZW9mKHNsaml0X3V3KTsKKwlsb2NhbF9zaXplID0gKChTTEpJVF9MT0NBTFNfT0ZGU0VUICsgc2F2ZWRzICsgbG9jYWxfc2l6ZSArIDE1KSAmIH4xNSkgLSBzYXZlZHM7CisjZWxzZQorCWlmIChvcHRpb25zICYgU0xKSVRfRE9VQkxFX0FMSUdOTUVOVCkgeworCQlsb2NhbF9zaXplID0gU0xKSVRfTE9DQUxTX09GRlNFVCArICgobG9jYWxfc2l6ZSArIDcpICYgfjcpOworCisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxNyk7CisJCUZBSUxfSUYoIWluc3QpOworCisJCUlOQ19TSVpFKDE3KTsKKwkJaW5zdFswXSA9IE1PVl9yX3JtOworCQlpbnN0WzFdID0gTU9EX1JFRyB8IChyZWdfbWFwW1RNUF9SRUcxXSA8PCAzKSB8IHJlZ19tYXBbU0xKSVRfU1BdOworCQlpbnN0WzJdID0gR1JPVVBfRjc7CisJCWluc3RbM10gPSBNT0RfUkVHIHwgKDAgPDwgMykgfCByZWdfbWFwW1NMSklUX1NQXTsKKwkJKihzbGppdF9zdyopKGluc3QgKyA0KSA9IDB4NDsKKwkJaW5zdFs4XSA9IEpORV9pODsKKwkJaW5zdFs5XSA9IDY7CisJCWluc3RbMTBdID0gR1JPVVBfQklOQVJZXzgxOworCQlpbnN0WzExXSA9IE1PRF9SRUcgfCAoNSA8PCAzKSB8IHJlZ19tYXBbU0xKSVRfU1BdOworCQkqKHNsaml0X3N3KikoaW5zdCArIDEyKSA9IDB4NDsKKwkJaW5zdFsxNl0gPSBQVVNIX3IgKyByZWdfbWFwW1RNUF9SRUcxXTsKKwl9CisJZWxzZQorCQlsb2NhbF9zaXplID0gU0xKSVRfTE9DQUxTX09GRlNFVCArICgobG9jYWxfc2l6ZSArIDMpICYgfjMpOworI2VuZGlmCisKKwljb21waWxlci0+bG9jYWxfc2l6ZSA9IGxvY2FsX3NpemU7CisjaWZkZWYgX1dJTjMyCisJaWYgKGxvY2FsX3NpemUgPiAxMDI0KSB7CisjaWYgKGRlZmluZWQgU0xKSVRfWDg2XzMyX0ZBU1RDQUxMICYmIFNMSklUX1g4Nl8zMl9GQVNUQ0FMTCkKKwkJRkFJTF9JRihlbWl0X2RvX2ltbShjb21waWxlciwgTU9WX3JfaTMyICsgcmVnX21hcFtTTEpJVF9SMF0sIGxvY2FsX3NpemUpKTsKKyNlbHNlCisJCWxvY2FsX3NpemUgLT0gU0xKSVRfTE9DQUxTX09GRlNFVDsKKwkJRkFJTF9JRihlbWl0X2RvX2ltbShjb21waWxlciwgTU9WX3JfaTMyICsgcmVnX21hcFtTTEpJVF9SMF0sIGxvY2FsX3NpemUpKTsKKwkJRkFJTF9JRihlbWl0X25vbl9jdW1fYmluYXJ5KGNvbXBpbGVyLCBTVUJfcl9ybSwgU1VCX3JtX3IsIFNVQiwgU1VCX0VBWF9pMzIsCisJCQlTTEpJVF9TUCwgMCwgU0xKSVRfU1AsIDAsIFNMSklUX0lNTSwgU0xKSVRfTE9DQUxTX09GRlNFVCkpOworI2VuZGlmCisJCUZBSUxfSUYoc2xqaXRfZW1pdF9panVtcChjb21waWxlciwgU0xKSVRfQ0FMTDEsIFNMSklUX0lNTSwgU0xKSVRfRlVOQ19PRkZTRVQoc2xqaXRfZ3Jvd19zdGFjaykpKTsKKwl9CisjZW5kaWYKKworCVNMSklUX0FTU0VSVChsb2NhbF9zaXplID4gMCk7CisJcmV0dXJuIGVtaXRfbm9uX2N1bV9iaW5hcnkoY29tcGlsZXIsIFNVQl9yX3JtLCBTVUJfcm1fciwgU1VCLCBTVUJfRUFYX2kzMiwKKwkJU0xKSVRfU1AsIDAsIFNMSklUX1NQLCAwLCBTTEpJVF9JTU0sIGxvY2FsX3NpemUpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfc2V0X2NvbnRleHQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBvcHRpb25zLCBzbGppdF9zaSBhcmdzLCBzbGppdF9zaSBzY3JhdGNoZXMsIHNsaml0X3NpIHNhdmVkcywKKwlzbGppdF9zaSBmc2NyYXRjaGVzLCBzbGppdF9zaSBmc2F2ZWRzLCBzbGppdF9zaSBsb2NhbF9zaXplKQoreworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfc2V0X2NvbnRleHQoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CisJc2V0X3NldF9jb250ZXh0KGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSk7CisKKwljb21waWxlci0+YXJncyA9IGFyZ3M7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlzYXZlZHMgPSAoMiArIChzY3JhdGNoZXMgPiA3ID8gKHNjcmF0Y2hlcyAtIDcpIDogMCkgKyAoc2F2ZWRzIDw9IDMgPyBzYXZlZHMgOiAzKSkgKiBzaXplb2Yoc2xqaXRfdXcpOworCWNvbXBpbGVyLT5sb2NhbF9zaXplID0gKChTTEpJVF9MT0NBTFNfT0ZGU0VUICsgc2F2ZWRzICsgbG9jYWxfc2l6ZSArIDE1KSAmIH4xNSkgLSBzYXZlZHM7CisjZWxzZQorCWlmIChvcHRpb25zICYgU0xKSVRfRE9VQkxFX0FMSUdOTUVOVCkKKwkJY29tcGlsZXItPmxvY2FsX3NpemUgPSBTTEpJVF9MT0NBTFNfT0ZGU0VUICsgKChsb2NhbF9zaXplICsgNykgJiB+Nyk7CisJZWxzZQorCQljb21waWxlci0+bG9jYWxfc2l6ZSA9IFNMSklUX0xPQ0FMU19PRkZTRVQgKyAoKGxvY2FsX3NpemUgKyAzKSAmIH4zKTsKKyNlbmRpZgorCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF9zaSBzaXplOworCXNsaml0X3ViICppbnN0OworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X3JldHVybihjb21waWxlciwgb3AsIHNyYywgc3JjdykpOworCVNMSklUX0FTU0VSVChjb21waWxlci0+YXJncyA+PSAwKTsKKworCWNvbXBpbGVyLT5mbGFnc19zYXZlZCA9IDA7CisJRkFJTF9JRihlbWl0X21vdl9iZWZvcmVfcmV0dXJuKGNvbXBpbGVyLCBvcCwgc3JjLCBzcmN3KSk7CisKKwlTTEpJVF9BU1NFUlQoY29tcGlsZXItPmxvY2FsX3NpemUgPiAwKTsKKwlGQUlMX0lGKGVtaXRfY3VtX2JpbmFyeShjb21waWxlciwgQUREX3Jfcm0sIEFERF9ybV9yLCBBREQsIEFERF9FQVhfaTMyLAorCQlTTEpJVF9TUCwgMCwgU0xKSVRfU1AsIDAsIFNMSklUX0lNTSwgY29tcGlsZXItPmxvY2FsX3NpemUpKTsKKworI2lmICFkZWZpbmVkKF9fQVBQTEVfXykKKwlpZiAoY29tcGlsZXItPm9wdGlvbnMgJiBTTEpJVF9ET1VCTEVfQUxJR05NRU5UKSB7CisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAzKTsKKwkJRkFJTF9JRighaW5zdCk7CisKKwkJSU5DX1NJWkUoMyk7CisJCWluc3RbMF0gPSBNT1Zfcl9ybTsKKwkJaW5zdFsxXSA9IChyZWdfbWFwW1NMSklUX1NQXSA8PCAzKSB8IDB4NCAvKiBTSUIgKi87CisJCWluc3RbMl0gPSAoNCA8PCAzKSB8IHJlZ19tYXBbU0xKSVRfU1BdOworCX0KKyNlbmRpZgorCisJc2l6ZSA9IDIgKyAoY29tcGlsZXItPnNjcmF0Y2hlcyA+IDcgPyAoY29tcGlsZXItPnNjcmF0Y2hlcyAtIDcpIDogMCkgKworCQkoY29tcGlsZXItPnNhdmVkcyA8PSAzID8gY29tcGlsZXItPnNhdmVkcyA6IDMpOworI2lmIChkZWZpbmVkIFNMSklUX1g4Nl8zMl9GQVNUQ0FMTCAmJiBTTEpJVF9YODZfMzJfRkFTVENBTEwpCisJaWYgKGNvbXBpbGVyLT5hcmdzID4gMikKKwkJc2l6ZSArPSAyOworI2Vsc2UKKwlpZiAoY29tcGlsZXItPmFyZ3MgPiAwKQorCQlzaXplICs9IDI7CisjZW5kaWYKKwlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgc2l6ZSk7CisJRkFJTF9JRighaW5zdCk7CisKKwlJTkNfU0laRShzaXplKTsKKworCWlmIChjb21waWxlci0+c2F2ZWRzID4gMCB8fCBjb21waWxlci0+c2NyYXRjaGVzID4gOSkKKwkJUE9QX1JFRyhyZWdfbWFwW1NMSklUX1MwXSk7CisJaWYgKGNvbXBpbGVyLT5zYXZlZHMgPiAxIHx8IGNvbXBpbGVyLT5zY3JhdGNoZXMgPiA4KQorCQlQT1BfUkVHKHJlZ19tYXBbU0xKSVRfUzFdKTsKKwlpZiAoY29tcGlsZXItPnNhdmVkcyA+IDIgfHwgY29tcGlsZXItPnNjcmF0Y2hlcyA+IDcpCisJCVBPUF9SRUcocmVnX21hcFtTTEpJVF9TMl0pOworCVBPUF9SRUcocmVnX21hcFtUTVBfUkVHMV0pOworI2lmIChkZWZpbmVkIFNMSklUX1g4Nl8zMl9GQVNUQ0FMTCAmJiBTTEpJVF9YODZfMzJfRkFTVENBTEwpCisJaWYgKGNvbXBpbGVyLT5hcmdzID4gMikKKwkJUkVUX0kxNihzaXplb2Yoc2xqaXRfc3cpKTsKKwllbHNlCisJCVJFVCgpOworI2Vsc2UKKwlSRVQoKTsKKyNlbmRpZgorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIE9wZXJhdG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogU2l6ZSBjb250YWlucyB0aGUgZmxhZ3MgYXMgd2VsbC4gKi8KK3N0YXRpYyBzbGppdF91YiogZW1pdF94ODZfaW5zdHJ1Y3Rpb24oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgc2l6ZSwKKwkvKiBUaGUgcmVnaXN0ZXIgb3IgaW1tZWRpYXRlIG9wZXJhbmQuICovCisJc2xqaXRfc2kgYSwgc2xqaXRfc3cgaW1tYSwKKwkvKiBUaGUgZ2VuZXJhbCBvcGVyYW5kIChub3QgaW1tZWRpYXRlKS4gKi8KKwlzbGppdF9zaSBiLCBzbGppdF9zdyBpbW1iKQoreworCXNsaml0X3ViICppbnN0OworCXNsaml0X3ViICpidWZfcHRyOworCXNsaml0X3NpIGZsYWdzID0gc2l6ZSAmIH4weGY7CisJc2xqaXRfc2kgaW5zdF9zaXplOworCisJLyogQm90aCBjYW5ub3QgYmUgc3dpdGNoZWQgb24uICovCisJU0xKSVRfQVNTRVJUKChmbGFncyAmIChFWDg2X0JJTl9JTlMgfCBFWDg2X1NISUZUX0lOUykpICE9IChFWDg2X0JJTl9JTlMgfCBFWDg2X1NISUZUX0lOUykpOworCS8qIFNpemUgZmxhZ3Mgbm90IGFsbG93ZWQgZm9yIHR5cGVkIGluc3RydWN0aW9ucy4gKi8KKwlTTEpJVF9BU1NFUlQoIShmbGFncyAmIChFWDg2X0JJTl9JTlMgfCBFWDg2X1NISUZUX0lOUykpIHx8IChmbGFncyAmIChFWDg2X0JZVEVfQVJHIHwgRVg4Nl9IQUxGX0FSRykpID09IDApOworCS8qIEJvdGggc2l6ZSBmbGFncyBjYW5ub3QgYmUgc3dpdGNoZWQgb24uICovCisJU0xKSVRfQVNTRVJUKChmbGFncyAmIChFWDg2X0JZVEVfQVJHIHwgRVg4Nl9IQUxGX0FSRykpICE9IChFWDg2X0JZVEVfQVJHIHwgRVg4Nl9IQUxGX0FSRykpOworCS8qIFNTRTIgYW5kIGltbWVkaWF0ZSBpcyBub3QgcG9zc2libGUuICovCisJU0xKSVRfQVNTRVJUKCEoYSAmIFNMSklUX0lNTSkgfHwgIShmbGFncyAmIEVYODZfU1NFMikpOworCVNMSklUX0FTU0VSVCgoZmxhZ3MgJiAoRVg4Nl9QUkVGX0YyIHwgRVg4Nl9QUkVGX0YzKSkgIT0gKEVYODZfUFJFRl9GMiB8IEVYODZfUFJFRl9GMykKKwkJJiYgKGZsYWdzICYgKEVYODZfUFJFRl9GMiB8IEVYODZfUFJFRl82NikpICE9IChFWDg2X1BSRUZfRjIgfCBFWDg2X1BSRUZfNjYpCisJCSYmIChmbGFncyAmIChFWDg2X1BSRUZfRjMgfCBFWDg2X1BSRUZfNjYpKSAhPSAoRVg4Nl9QUkVGX0YzIHwgRVg4Nl9QUkVGXzY2KSk7CisKKwlzaXplICY9IDB4ZjsKKwlpbnN0X3NpemUgPSBzaXplOworCisJaWYgKGZsYWdzICYgKEVYODZfUFJFRl9GMiB8IEVYODZfUFJFRl9GMykpCisJCWluc3Rfc2l6ZSsrOworCWlmIChmbGFncyAmIEVYODZfUFJFRl82NikKKwkJaW5zdF9zaXplKys7CisKKwkvKiBDYWxjdWxhdGUgc2l6ZSBvZiBiLiAqLworCWluc3Rfc2l6ZSArPSAxOyAvKiBtb2Qgci9tIGJ5dGUuICovCisJaWYgKGIgJiBTTEpJVF9NRU0pIHsKKwkJaWYgKChiICYgUkVHX01BU0spID09IFNMSklUX1VOVVNFRCkKKwkJCWluc3Rfc2l6ZSArPSBzaXplb2Yoc2xqaXRfc3cpOworCQllbHNlIGlmIChpbW1iICE9IDAgJiYgIShiICYgT0ZGU19SRUdfTUFTSykpIHsKKwkJCS8qIEltbWVkaWF0ZSBvcGVyYW5kLiAqLworCQkJaWYgKGltbWIgPD0gMTI3ICYmIGltbWIgPj0gLTEyOCkKKwkJCQlpbnN0X3NpemUgKz0gc2l6ZW9mKHNsaml0X3NiKTsKKwkJCWVsc2UKKwkJCQlpbnN0X3NpemUgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKwkJfQorCisJCWlmICgoYiAmIFJFR19NQVNLKSA9PSBTTEpJVF9TUCAmJiAhKGIgJiBPRkZTX1JFR19NQVNLKSkKKwkJCWIgfD0gVE9fT0ZGU19SRUcoU0xKSVRfU1ApOworCisJCWlmICgoYiAmIE9GRlNfUkVHX01BU0spICE9IFNMSklUX1VOVVNFRCkKKwkJCWluc3Rfc2l6ZSArPSAxOyAvKiBTSUIgYnl0ZS4gKi8KKwl9CisKKwkvKiBDYWxjdWxhdGUgc2l6ZSBvZiBhLiAqLworCWlmIChhICYgU0xKSVRfSU1NKSB7CisJCWlmIChmbGFncyAmIEVYODZfQklOX0lOUykgeworCQkJaWYgKGltbWEgPD0gMTI3ICYmIGltbWEgPj0gLTEyOCkgeworCQkJCWluc3Rfc2l6ZSArPSAxOworCQkJCWZsYWdzIHw9IEVYODZfQllURV9BUkc7CisJCQl9IGVsc2UKKwkJCQlpbnN0X3NpemUgKz0gNDsKKwkJfQorCQllbHNlIGlmIChmbGFncyAmIEVYODZfU0hJRlRfSU5TKSB7CisJCQlpbW1hICY9IDB4MWY7CisJCQlpZiAoaW1tYSAhPSAxKSB7CisJCQkJaW5zdF9zaXplICsrOworCQkJCWZsYWdzIHw9IEVYODZfQllURV9BUkc7CisJCQl9CisJCX0gZWxzZSBpZiAoZmxhZ3MgJiBFWDg2X0JZVEVfQVJHKQorCQkJaW5zdF9zaXplKys7CisJCWVsc2UgaWYgKGZsYWdzICYgRVg4Nl9IQUxGX0FSRykKKwkJCWluc3Rfc2l6ZSArPSBzaXplb2Yoc2hvcnQpOworCQllbHNlCisJCQlpbnN0X3NpemUgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKwl9CisJZWxzZQorCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIEVYODZfU0hJRlRfSU5TKSB8fCBhID09IFNMSklUX1BSRUZfU0hJRlRfUkVHKTsKKworCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyBpbnN0X3NpemUpOworCVBUUl9GQUlMX0lGKCFpbnN0KTsKKworCS8qIEVuY29kaW5nIHRoZSBieXRlLiAqLworCUlOQ19TSVpFKGluc3Rfc2l6ZSk7CisJaWYgKGZsYWdzICYgRVg4Nl9QUkVGX0YyKQorCQkqaW5zdCsrID0gMHhmMjsKKwlpZiAoZmxhZ3MgJiBFWDg2X1BSRUZfRjMpCisJCSppbnN0KysgPSAweGYzOworCWlmIChmbGFncyAmIEVYODZfUFJFRl82NikKKwkJKmluc3QrKyA9IDB4NjY7CisKKwlidWZfcHRyID0gaW5zdCArIHNpemU7CisKKwkvKiBFbmNvZGUgbW9kL3JtIGJ5dGUuICovCisJaWYgKCEoZmxhZ3MgJiBFWDg2X1NISUZUX0lOUykpIHsKKwkJaWYgKChmbGFncyAmIEVYODZfQklOX0lOUykgJiYgKGEgJiBTTEpJVF9JTU0pKQorCQkJKmluc3QgPSAoZmxhZ3MgJiBFWDg2X0JZVEVfQVJHKSA/IEdST1VQX0JJTkFSWV84MyA6IEdST1VQX0JJTkFSWV84MTsKKworCQlpZiAoKGEgJiBTTEpJVF9JTU0pIHx8IChhID09IDApKQorCQkJKmJ1Zl9wdHIgPSAwOworCQllbHNlIGlmICghKGZsYWdzICYgRVg4Nl9TU0UyX09QMSkpCisJCQkqYnVmX3B0ciA9IHJlZ19tYXBbYV0gPDwgMzsKKwkJZWxzZQorCQkJKmJ1Zl9wdHIgPSBhIDw8IDM7CisJfQorCWVsc2UgeworCQlpZiAoYSAmIFNMSklUX0lNTSkgeworCQkJaWYgKGltbWEgPT0gMSkKKwkJCQkqaW5zdCA9IEdST1VQX1NISUZUXzE7CisJCQllbHNlCisJCQkJKmluc3QgPSBHUk9VUF9TSElGVF9OOworCQl9IGVsc2UKKwkJCSppbnN0ID0gR1JPVVBfU0hJRlRfQ0w7CisJCSpidWZfcHRyID0gMDsKKwl9CisKKwlpZiAoIShiICYgU0xKSVRfTUVNKSkKKwkJKmJ1Zl9wdHIrKyB8PSBNT0RfUkVHICsgKCghKGZsYWdzICYgRVg4Nl9TU0UyX09QMikpID8gcmVnX21hcFtiXSA6IGIpOworCWVsc2UgaWYgKChiICYgUkVHX01BU0spICE9IFNMSklUX1VOVVNFRCkgeworCQlpZiAoKGIgJiBPRkZTX1JFR19NQVNLKSA9PSBTTEpJVF9VTlVTRUQgfHwgKGIgJiBPRkZTX1JFR19NQVNLKSA9PSBUT19PRkZTX1JFRyhTTEpJVF9TUCkpIHsKKwkJCWlmIChpbW1iICE9IDApIHsKKwkJCQlpZiAoaW1tYiA8PSAxMjcgJiYgaW1tYiA+PSAtMTI4KQorCQkJCQkqYnVmX3B0ciB8PSAweDQwOworCQkJCWVsc2UKKwkJCQkJKmJ1Zl9wdHIgfD0gMHg4MDsKKwkJCX0KKworCQkJaWYgKChiICYgT0ZGU19SRUdfTUFTSykgPT0gU0xKSVRfVU5VU0VEKQorCQkJCSpidWZfcHRyKysgfD0gcmVnX21hcFtiICYgUkVHX01BU0tdOworCQkJZWxzZSB7CisJCQkJKmJ1Zl9wdHIrKyB8PSAweDA0OworCQkJCSpidWZfcHRyKysgPSByZWdfbWFwW2IgJiBSRUdfTUFTS10gfCAocmVnX21hcFtPRkZTX1JFRyhiKV0gPDwgMyk7CisJCQl9CisKKwkJCWlmIChpbW1iICE9IDApIHsKKwkJCQlpZiAoaW1tYiA8PSAxMjcgJiYgaW1tYiA+PSAtMTI4KQorCQkJCQkqYnVmX3B0cisrID0gaW1tYjsgLyogOCBiaXQgZGlzcGxhY2VtZW50LiAqLworCQkJCWVsc2UgeworCQkJCQkqKHNsaml0X3N3KilidWZfcHRyID0gaW1tYjsgLyogMzIgYml0IGRpc3BsYWNlbWVudC4gKi8KKwkJCQkJYnVmX3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCSpidWZfcHRyKysgfD0gMHgwNDsKKwkJCSpidWZfcHRyKysgPSByZWdfbWFwW2IgJiBSRUdfTUFTS10gfCAocmVnX21hcFtPRkZTX1JFRyhiKV0gPDwgMykgfCAoaW1tYiA8PCA2KTsKKwkJfQorCX0KKwllbHNlIHsKKwkJKmJ1Zl9wdHIrKyB8PSAweDA1OworCQkqKHNsaml0X3N3KilidWZfcHRyID0gaW1tYjsgLyogMzIgYml0IGRpc3BsYWNlbWVudC4gKi8KKwkJYnVmX3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpOworCX0KKworCWlmIChhICYgU0xKSVRfSU1NKSB7CisJCWlmIChmbGFncyAmIEVYODZfQllURV9BUkcpCisJCQkqYnVmX3B0ciA9IGltbWE7CisJCWVsc2UgaWYgKGZsYWdzICYgRVg4Nl9IQUxGX0FSRykKKwkJCSooc2hvcnQqKWJ1Zl9wdHIgPSBpbW1hOworCQllbHNlIGlmICghKGZsYWdzICYgRVg4Nl9TSElGVF9JTlMpKQorCQkJKihzbGppdF9zdyopYnVmX3B0ciA9IGltbWE7CisJfQorCisJcmV0dXJuICEoZmxhZ3MgJiBFWDg2X1NISUZUX0lOUykgPyBpbnN0IDogKGluc3QgKyAxKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgQ2FsbCAvIHJldHVybiBpbnN0cnVjdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGNhbGxfd2l0aF9hcmdzKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHR5cGUpCit7CisJc2xqaXRfdWIgKmluc3Q7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9YODZfMzJfRkFTVENBTEwgJiYgU0xKSVRfWDg2XzMyX0ZBU1RDQUxMKQorCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIHR5cGUgPj0gU0xKSVRfQ0FMTDMgPyAxICsgMiArIDEgOiAxICsgMik7CisJRkFJTF9JRighaW5zdCk7CisJSU5DX1NJWkUodHlwZSA+PSBTTEpJVF9DQUxMMyA/IDIgKyAxIDogMik7CisKKwlpZiAodHlwZSA+PSBTTEpJVF9DQUxMMykKKwkJUFVTSF9SRUcocmVnX21hcFtTTEpJVF9SMl0pOworCSppbnN0KysgPSBNT1Zfcl9ybTsKKwkqaW5zdCsrID0gTU9EX1JFRyB8IChyZWdfbWFwW1NMSklUX1IyXSA8PCAzKSB8IHJlZ19tYXBbU0xKSVRfUjBdOworI2Vsc2UKKwlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCAqICh0eXBlIC0gU0xKSVRfQ0FMTDApKTsKKwlGQUlMX0lGKCFpbnN0KTsKKwlJTkNfU0laRSg0ICogKHR5cGUgLSBTTEpJVF9DQUxMMCkpOworCisJKmluc3QrKyA9IE1PVl9ybV9yOworCSppbnN0KysgPSBNT0RfRElTUDggfCAocmVnX21hcFtTTEpJVF9SMF0gPDwgMykgfCAweDQgLyogU0lCICovOworCSppbnN0KysgPSAoMHg0IC8qIG5vbmUqLyA8PCAzKSB8IHJlZ19tYXBbU0xKSVRfU1BdOworCSppbnN0KysgPSAwOworCWlmICh0eXBlID49IFNMSklUX0NBTEwyKSB7CisJCSppbnN0KysgPSBNT1Zfcm1fcjsKKwkJKmluc3QrKyA9IE1PRF9ESVNQOCB8IChyZWdfbWFwW1NMSklUX1IxXSA8PCAzKSB8IDB4NCAvKiBTSUIgKi87CisJCSppbnN0KysgPSAoMHg0IC8qIG5vbmUqLyA8PCAzKSB8IHJlZ19tYXBbU0xKSVRfU1BdOworCQkqaW5zdCsrID0gc2l6ZW9mKHNsaml0X3N3KTsKKwl9CisJaWYgKHR5cGUgPj0gU0xKSVRfQ0FMTDMpIHsKKwkJKmluc3QrKyA9IE1PVl9ybV9yOworCQkqaW5zdCsrID0gTU9EX0RJU1A4IHwgKHJlZ19tYXBbU0xKSVRfUjJdIDw8IDMpIHwgMHg0IC8qIFNJQiAqLzsKKwkJKmluc3QrKyA9ICgweDQgLyogbm9uZSovIDw8IDMpIHwgcmVnX21hcFtTTEpJVF9TUF07CisJCSppbnN0KysgPSAyICogc2l6ZW9mKHNsaml0X3N3KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcpCit7CisJc2xqaXRfdWIgKmluc3Q7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfZmFzdF9lbnRlcihjb21waWxlciwgZHN0LCBkc3R3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCisJQ0hFQ0tfRVhUUkFfUkVHUyhkc3QsIGRzdHcsICh2b2lkKTApOworCisJLyogRm9yIFVOVVNFRCBkc3QuIFVuY29tbW9uLCBidXQgcG9zc2libGUuICovCisJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQpCisJCWRzdCA9IFRNUF9SRUcxOworCisJaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKKwkJLyogVW51c2VkIGRlc3QgaXMgcG9zc2libGUgaGVyZS4gKi8KKwkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOworCQlGQUlMX0lGKCFpbnN0KTsKKworCQlJTkNfU0laRSgxKTsKKwkJUE9QX1JFRyhyZWdfbWFwW2RzdF0pOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwkvKiBNZW1vcnkuICovCisJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCAwLCAwLCBkc3QsIGRzdHcpOworCUZBSUxfSUYoIWluc3QpOworCSppbnN0KysgPSBQT1Bfcm07CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9lbWl0X2Zhc3RfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF91YiAqaW5zdDsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X3JldHVybihjb21waWxlciwgc3JjLCBzcmN3KSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOworCisJQ0hFQ0tfRVhUUkFfUkVHUyhzcmMsIHNyY3csICh2b2lkKTApOworCisJaWYgKEZBU1RfSVNfUkVHKHNyYykpIHsKKwkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEgKyAxKTsKKwkJRkFJTF9JRighaW5zdCk7CisKKwkJSU5DX1NJWkUoMSArIDEpOworCQlQVVNIX1JFRyhyZWdfbWFwW3NyY10pOworCX0KKwllbHNlIGlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCAwLCAwLCBzcmMsIHNyY3cpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJKmluc3QrKyA9IEdST1VQX0ZGOworCQkqaW5zdCB8PSBQVVNIX3JtOworCisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCUlOQ19TSVpFKDEpOworCX0KKwllbHNlIHsKKwkJLyogU0xKSVRfSU1NLiAqLworCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNSArIDEpOworCQlGQUlMX0lGKCFpbnN0KTsKKworCQlJTkNfU0laRSg1ICsgMSk7CisJCSppbnN0KysgPSBQVVNIX2kzMjsKKwkJKihzbGppdF9zdyopaW5zdCA9IHNyY3c7CisJCWluc3QgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKwl9CisKKwlSRVQoKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVg4Nl82NC5jIGIvZGlzdDIvc3JjL3Nsaml0L3Nsaml0TmF0aXZlWDg2XzY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc5MGQ4YQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVg4Nl82NC5jCkBAIC0wLDAgKzEsNzQ3IEBACisvKgorICogICAgU3RhY2stbGVzcyBKdXN0LUluLVRpbWUgY29tcGlsZXIKKyAqCisgKiAgICBDb3B5cmlnaHQgMjAwOS0yMDEyIFpvbHRhbiBIZXJjemVnIChoem1lc3RlckBmcmVlbWFpbC5odSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisgKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mCisgKiAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQKKyAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIHg4NiA2NC1iaXQgYXJjaCBkZXBlbmRlbnQgZnVuY3Rpb25zLiAqLworCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9sb2FkX2ltbTY0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHJlZywgc2xqaXRfc3cgaW1tKQoreworCXNsaml0X3ViICppbnN0OworCisJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDIgKyBzaXplb2Yoc2xqaXRfc3cpKTsKKwlGQUlMX0lGKCFpbnN0KTsKKwlJTkNfU0laRSgyICsgc2l6ZW9mKHNsaml0X3N3KSk7CisJKmluc3QrKyA9IFJFWF9XIHwgKChyZWdfbWFwW3JlZ10gPD0gNykgPyAwIDogUkVYX0IpOworCSppbnN0KysgPSBNT1Zfcl9pMzIgKyAocmVnX21hcFtyZWddICYgMHg3KTsKKwkqKHNsaml0X3N3KilpbnN0ID0gaW1tOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgc2xqaXRfdWIqIGdlbmVyYXRlX2Zhcl9qdW1wX2NvZGUoc3RydWN0IHNsaml0X2p1bXAgKmp1bXAsIHNsaml0X3ViICpjb2RlX3B0ciwgc2xqaXRfc2kgdHlwZSkKK3sKKwlpZiAodHlwZSA8IFNMSklUX0pVTVApIHsKKwkJLyogSW52ZXJ0IHR5cGUuICovCisJCSpjb2RlX3B0cisrID0gZ2V0X2p1bXBfY29kZSh0eXBlIF4gMHgxKSAtIDB4MTA7CisJCSpjb2RlX3B0cisrID0gMTAgKyAzOworCX0KKworCVNMSklUX0NPTVBJTEVfQVNTRVJUKHJlZ19tYXBbVE1QX1JFRzNdID09IDksIHRtcDNfaXNfOV9maXJzdCk7CisJKmNvZGVfcHRyKysgPSBSRVhfVyB8IFJFWF9COworCSpjb2RlX3B0cisrID0gTU9WX3JfaTMyICsgMTsKKwlqdW1wLT5hZGRyID0gKHNsaml0X3V3KWNvZGVfcHRyOworCisJaWYgKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCkKKwkJanVtcC0+ZmxhZ3MgfD0gUEFUQ0hfTUQ7CisJZWxzZQorCQkqKHNsaml0X3N3Kiljb2RlX3B0ciA9IGp1bXAtPnUudGFyZ2V0OworCisJY29kZV9wdHIgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKwkqY29kZV9wdHIrKyA9IFJFWF9COworCSpjb2RlX3B0cisrID0gR1JPVVBfRkY7CisJKmNvZGVfcHRyKysgPSAodHlwZSA+PSBTTEpJVF9GQVNUX0NBTEwpID8gKE1PRF9SRUcgfCBDQUxMX3JtIHwgMSkgOiAoTU9EX1JFRyB8IEpNUF9ybSB8IDEpOworCisJcmV0dXJuIGNvZGVfcHRyOworfQorCitzdGF0aWMgc2xqaXRfdWIqIGdlbmVyYXRlX2ZpeGVkX2p1bXAoc2xqaXRfdWIgKmNvZGVfcHRyLCBzbGppdF9zdyBhZGRyLCBzbGppdF9zaSB0eXBlKQoreworCXNsaml0X3N3IGRlbHRhID0gYWRkciAtICgoc2xqaXRfc3cpY29kZV9wdHIgKyAxICsgc2l6ZW9mKHNsaml0X3NpKSk7CisKKwlpZiAoZGVsdGEgPD0gSEFMRldPUkRfTUFYICYmIGRlbHRhID49IEhBTEZXT1JEX01JTikgeworCQkqY29kZV9wdHIrKyA9ICh0eXBlID09IDIpID8gQ0FMTF9pMzIgOiBKTVBfaTMyOworCQkqKHNsaml0X3N3Kiljb2RlX3B0ciA9IGRlbHRhOworCX0KKwllbHNlIHsKKwkJU0xKSVRfQ09NUElMRV9BU1NFUlQocmVnX21hcFtUTVBfUkVHM10gPT0gOSwgdG1wM19pc185X3NlY29uZCk7CisJCSpjb2RlX3B0cisrID0gUkVYX1cgfCBSRVhfQjsKKwkJKmNvZGVfcHRyKysgPSBNT1Zfcl9pMzIgKyAxOworCQkqKHNsaml0X3N3Kiljb2RlX3B0ciA9IGFkZHI7CisJCWNvZGVfcHRyICs9IHNpemVvZihzbGppdF9zdyk7CisJCSpjb2RlX3B0cisrID0gUkVYX0I7CisJCSpjb2RlX3B0cisrID0gR1JPVVBfRkY7CisJCSpjb2RlX3B0cisrID0gKHR5cGUgPT0gMikgPyAoTU9EX1JFRyB8IENBTExfcm0gfCAxKSA6IChNT0RfUkVHIHwgSk1QX3JtIHwgMSk7CisJfQorCisJcmV0dXJuIGNvZGVfcHRyOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9lbnRlcihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAorCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCit7CisJc2xqaXRfc2kgaSwgdG1wLCBzaXplLCBzYXZlZF9yZWdpc3Rlcl9zaXplOworCXNsaml0X3ViICppbnN0OworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2VudGVyKGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSkpOworCXNldF9lbWl0X2VudGVyKGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSk7CisKKwljb21waWxlci0+ZmxhZ3Nfc2F2ZWQgPSAwOworCisJLyogSW5jbHVkaW5nIHRoZSByZXR1cm4gYWRkcmVzcyBzYXZlZCBieSB0aGUgY2FsbCBpbnN0cnVjdGlvbi4gKi8KKwlzYXZlZF9yZWdpc3Rlcl9zaXplID0gR0VUX1NBVkVEX1JFR0lTVEVSU19TSVpFKHNjcmF0Y2hlcywgc2F2ZWRzLCAxKTsKKworCXRtcCA9IHNhdmVkcyA8IFNMSklUX05VTUJFUl9PRl9TQVZFRF9SRUdJU1RFUlMgPyAoU0xKSVRfUzAgKyAxIC0gc2F2ZWRzKSA6IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsKKwlmb3IgKGkgPSBTTEpJVF9TMDsgaSA+PSB0bXA7IGktLSkgeworCQlzaXplID0gcmVnX21hcFtpXSA+PSA4ID8gMiA6IDE7CisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyBzaXplKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCUlOQ19TSVpFKHNpemUpOworCQlpZiAocmVnX21hcFtpXSA+PSA4KQorCQkJKmluc3QrKyA9IFJFWF9COworCQlQVVNIX1JFRyhyZWdfbG1hcFtpXSk7CisJfQorCisJZm9yIChpID0gc2NyYXRjaGVzOyBpID49IFNMSklUX0ZJUlNUX1NBVkVEX1JFRzsgaS0tKSB7CisJCXNpemUgPSByZWdfbWFwW2ldID49IDggPyAyIDogMTsKKwkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJSU5DX1NJWkUoc2l6ZSk7CisJCWlmIChyZWdfbWFwW2ldID49IDgpCisJCQkqaW5zdCsrID0gUkVYX0I7CisJCVBVU0hfUkVHKHJlZ19sbWFwW2ldKTsKKwl9CisKKwlpZiAoYXJncyA+IDApIHsKKwkJc2l6ZSA9IGFyZ3MgKiAzOworCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgc2l6ZSk7CisJCUZBSUxfSUYoIWluc3QpOworCisJCUlOQ19TSVpFKHNpemUpOworCisjaWZuZGVmIF9XSU42NAorCQlpZiAoYXJncyA+IDApIHsKKwkJCSppbnN0KysgPSBSRVhfVzsKKwkJCSppbnN0KysgPSBNT1Zfcl9ybTsKKwkJCSppbnN0KysgPSBNT0RfUkVHIHwgKHJlZ19tYXBbU0xKSVRfUzBdIDw8IDMpIHwgMHg3IC8qIHJkaSAqLzsKKwkJfQorCQlpZiAoYXJncyA+IDEpIHsKKwkJCSppbnN0KysgPSBSRVhfVyB8IFJFWF9SOworCQkJKmluc3QrKyA9IE1PVl9yX3JtOworCQkJKmluc3QrKyA9IE1PRF9SRUcgfCAocmVnX2xtYXBbU0xKSVRfUzFdIDw8IDMpIHwgMHg2IC8qIHJzaSAqLzsKKwkJfQorCQlpZiAoYXJncyA+IDIpIHsKKwkJCSppbnN0KysgPSBSRVhfVyB8IFJFWF9SOworCQkJKmluc3QrKyA9IE1PVl9yX3JtOworCQkJKmluc3QrKyA9IE1PRF9SRUcgfCAocmVnX2xtYXBbU0xKSVRfUzJdIDw8IDMpIHwgMHgyIC8qIHJkeCAqLzsKKwkJfQorI2Vsc2UKKwkJaWYgKGFyZ3MgPiAwKSB7CisJCQkqaW5zdCsrID0gUkVYX1c7CisJCQkqaW5zdCsrID0gTU9WX3Jfcm07CisJCQkqaW5zdCsrID0gTU9EX1JFRyB8IChyZWdfbWFwW1NMSklUX1MwXSA8PCAzKSB8IDB4MSAvKiByY3ggKi87CisJCX0KKwkJaWYgKGFyZ3MgPiAxKSB7CisJCQkqaW5zdCsrID0gUkVYX1c7CisJCQkqaW5zdCsrID0gTU9WX3Jfcm07CisJCQkqaW5zdCsrID0gTU9EX1JFRyB8IChyZWdfbWFwW1NMSklUX1MxXSA8PCAzKSB8IDB4MiAvKiByZHggKi87CisJCX0KKwkJaWYgKGFyZ3MgPiAyKSB7CisJCQkqaW5zdCsrID0gUkVYX1cgfCBSRVhfQjsKKwkJCSppbnN0KysgPSBNT1Zfcl9ybTsKKwkJCSppbnN0KysgPSBNT0RfUkVHIHwgKHJlZ19tYXBbU0xKSVRfUzJdIDw8IDMpIHwgMHgwIC8qIHI4ICovOworCQl9CisjZW5kaWYKKwl9CisKKwlsb2NhbF9zaXplID0gKChsb2NhbF9zaXplICsgU0xKSVRfTE9DQUxTX09GRlNFVCArIHNhdmVkX3JlZ2lzdGVyX3NpemUgKyAxNSkgJiB+MTUpIC0gc2F2ZWRfcmVnaXN0ZXJfc2l6ZTsKKwljb21waWxlci0+bG9jYWxfc2l6ZSA9IGxvY2FsX3NpemU7CisKKyNpZmRlZiBfV0lONjQKKwlpZiAobG9jYWxfc2l6ZSA+IDEwMjQpIHsKKwkJLyogQWxsb2NhdGUgc3RhY2sgZm9yIHRoZSBjYWxsYmFjaywgd2hpY2ggZ3Jvd3MgdGhlIHN0YWNrLiAqLworCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCArICgzICsgc2l6ZW9mKHNsaml0X3NpKSkpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJSU5DX1NJWkUoNCArICgzICsgc2l6ZW9mKHNsaml0X3NpKSkpOworCQkqaW5zdCsrID0gUkVYX1c7CisJCSppbnN0KysgPSBHUk9VUF9CSU5BUllfODM7CisJCSppbnN0KysgPSBNT0RfUkVHIHwgU1VCIHwgNDsKKwkJLyogQWxsb2NhdGVkIHNpemUgZm9yIHJlZ2lzdGVycyBtdXN0IGJlIGRpdmlzaWJsZSBieSA4LiAqLworCQlTTEpJVF9BU1NFUlQoIShzYXZlZF9yZWdpc3Rlcl9zaXplICYgMHg3KSk7CisJCS8qIEFsaWduZWQgdG8gMTYgYnl0ZS4gKi8KKwkJaWYgKHNhdmVkX3JlZ2lzdGVyX3NpemUgJiAweDgpIHsKKwkJCSppbnN0KysgPSA1ICogc2l6ZW9mKHNsaml0X3N3KTsKKwkJCWxvY2FsX3NpemUgLT0gNSAqIHNpemVvZihzbGppdF9zdyk7CisJCX0gZWxzZSB7CisJCQkqaW5zdCsrID0gNCAqIHNpemVvZihzbGppdF9zdyk7CisJCQlsb2NhbF9zaXplIC09IDQgKiBzaXplb2Yoc2xqaXRfc3cpOworCQl9CisJCS8qIFNlY29uZCBpbnN0cnVjdGlvbiAqLworCQlTTEpJVF9DT01QSUxFX0FTU0VSVChyZWdfbWFwW1NMSklUX1IwXSA8IDgsIHRlbXBvcmFyeV9yZWcxX2lzX2xvcmVnKTsKKwkJKmluc3QrKyA9IFJFWF9XOworCQkqaW5zdCsrID0gTU9WX3JtX2kzMjsKKwkJKmluc3QrKyA9IE1PRF9SRUcgfCByZWdfbG1hcFtTTEpJVF9SMF07CisJCSooc2xqaXRfc2kqKWluc3QgPSBsb2NhbF9zaXplOworI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkgXAorCQkJfHwgKGRlZmluZWQgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTICYmIFNMSklUX0FSR1VNRU5UX0NIRUNLUykKKwkJY29tcGlsZXItPnNraXBfY2hlY2tzID0gMTsKKyNlbmRpZgorCQlGQUlMX0lGKHNsaml0X2VtaXRfaWp1bXAoY29tcGlsZXIsIFNMSklUX0NBTEwxLCBTTEpJVF9JTU0sIFNMSklUX0ZVTkNfT0ZGU0VUKHNsaml0X2dyb3dfc3RhY2spKSk7CisJfQorI2VuZGlmCisKKwlTTEpJVF9BU1NFUlQobG9jYWxfc2l6ZSA+IDApOworCWlmIChsb2NhbF9zaXplIDw9IDEyNykgeworCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCk7CisJCUZBSUxfSUYoIWluc3QpOworCQlJTkNfU0laRSg0KTsKKwkJKmluc3QrKyA9IFJFWF9XOworCQkqaW5zdCsrID0gR1JPVVBfQklOQVJZXzgzOworCQkqaW5zdCsrID0gTU9EX1JFRyB8IFNVQiB8IDQ7CisJCSppbnN0KysgPSBsb2NhbF9zaXplOworCX0KKwllbHNlIHsKKwkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDcpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJSU5DX1NJWkUoNyk7CisJCSppbnN0KysgPSBSRVhfVzsKKwkJKmluc3QrKyA9IEdST1VQX0JJTkFSWV84MTsKKwkJKmluc3QrKyA9IE1PRF9SRUcgfCBTVUIgfCA0OworCQkqKHNsaml0X3NpKilpbnN0ID0gbG9jYWxfc2l6ZTsKKwkJaW5zdCArPSBzaXplb2Yoc2xqaXRfc2kpOworCX0KKworI2lmZGVmIF9XSU42NAorCS8qIFNhdmUgeG1tNiByZWdpc3RlcjogbW92YXBzIFtyc3AgKyAweDIwXSwgeG1tNiAqLworCWlmIChmc2NyYXRjaGVzID49IDYgfHwgZnNhdmVkcyA+PSAxKSB7CisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA1KTsKKwkJRkFJTF9JRighaW5zdCk7CisJCUlOQ19TSVpFKDUpOworCQkqaW5zdCsrID0gR1JPVVBfMEY7CisJCSooc2xqaXRfc2kqKWluc3QgPSAweDIwMjQ3NDI5OworCX0KKyNlbmRpZgorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9zZXRfY29udGV4dChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIG9wdGlvbnMsIHNsaml0X3NpIGFyZ3MsIHNsaml0X3NpIHNjcmF0Y2hlcywgc2xqaXRfc2kgc2F2ZWRzLAorCXNsaml0X3NpIGZzY3JhdGNoZXMsIHNsaml0X3NpIGZzYXZlZHMsIHNsaml0X3NpIGxvY2FsX3NpemUpCit7CisJc2xqaXRfc2kgc2F2ZWRfcmVnaXN0ZXJfc2l6ZTsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfc2V0X2NvbnRleHQoY29tcGlsZXIsIG9wdGlvbnMsIGFyZ3MsIHNjcmF0Y2hlcywgc2F2ZWRzLCBmc2NyYXRjaGVzLCBmc2F2ZWRzLCBsb2NhbF9zaXplKSk7CisJc2V0X3NldF9jb250ZXh0KGNvbXBpbGVyLCBvcHRpb25zLCBhcmdzLCBzY3JhdGNoZXMsIHNhdmVkcywgZnNjcmF0Y2hlcywgZnNhdmVkcywgbG9jYWxfc2l6ZSk7CisKKwkvKiBJbmNsdWRpbmcgdGhlIHJldHVybiBhZGRyZXNzIHNhdmVkIGJ5IHRoZSBjYWxsIGluc3RydWN0aW9uLiAqLworCXNhdmVkX3JlZ2lzdGVyX3NpemUgPSBHRVRfU0FWRURfUkVHSVNURVJTX1NJWkUoc2NyYXRjaGVzLCBzYXZlZHMsIDEpOworCWNvbXBpbGVyLT5sb2NhbF9zaXplID0gKChsb2NhbF9zaXplICsgU0xKSVRfTE9DQUxTX09GRlNFVCArIHNhdmVkX3JlZ2lzdGVyX3NpemUgKyAxNSkgJiB+MTUpIC0gc2F2ZWRfcmVnaXN0ZXJfc2l6ZTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfcmV0dXJuKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLCBzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc2xqaXRfc2kgaSwgdG1wLCBzaXplOworCXNsaml0X3ViICppbnN0OworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X3JldHVybihjb21waWxlciwgb3AsIHNyYywgc3JjdykpOworCisJY29tcGlsZXItPmZsYWdzX3NhdmVkID0gMDsKKwlGQUlMX0lGKGVtaXRfbW92X2JlZm9yZV9yZXR1cm4oY29tcGlsZXIsIG9wLCBzcmMsIHNyY3cpKTsKKworI2lmZGVmIF9XSU42NAorCS8qIFJlc3RvcmUgeG1tNiByZWdpc3RlcjogbW92YXBzIHhtbTYsIFtyc3AgKyAweDIwXSAqLworCWlmIChjb21waWxlci0+ZnNjcmF0Y2hlcyA+PSA2IHx8IGNvbXBpbGVyLT5mc2F2ZWRzID49IDEpIHsKKwkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJSU5DX1NJWkUoNSk7CisJCSppbnN0KysgPSBHUk9VUF8wRjsKKwkJKihzbGppdF9zaSopaW5zdCA9IDB4MjAyNDc0Mjg7CisJfQorI2VuZGlmCisKKwlTTEpJVF9BU1NFUlQoY29tcGlsZXItPmxvY2FsX3NpemUgPiAwKTsKKwlpZiAoY29tcGlsZXItPmxvY2FsX3NpemUgPD0gMTI3KSB7CisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0KTsKKwkJRkFJTF9JRighaW5zdCk7CisJCUlOQ19TSVpFKDQpOworCQkqaW5zdCsrID0gUkVYX1c7CisJCSppbnN0KysgPSBHUk9VUF9CSU5BUllfODM7CisJCSppbnN0KysgPSBNT0RfUkVHIHwgQUREIHwgNDsKKwkJKmluc3QgPSBjb21waWxlci0+bG9jYWxfc2l6ZTsKKwl9CisJZWxzZSB7CisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA3KTsKKwkJRkFJTF9JRighaW5zdCk7CisJCUlOQ19TSVpFKDcpOworCQkqaW5zdCsrID0gUkVYX1c7CisJCSppbnN0KysgPSBHUk9VUF9CSU5BUllfODE7CisJCSppbnN0KysgPSBNT0RfUkVHIHwgQUREIHwgNDsKKwkJKihzbGppdF9zaSopaW5zdCA9IGNvbXBpbGVyLT5sb2NhbF9zaXplOworCX0KKworCXRtcCA9IGNvbXBpbGVyLT5zY3JhdGNoZXM7CisJZm9yIChpID0gU0xKSVRfRklSU1RfU0FWRURfUkVHOyBpIDw9IHRtcDsgaSsrKSB7CisJCXNpemUgPSByZWdfbWFwW2ldID49IDggPyAyIDogMTsKKwkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJSU5DX1NJWkUoc2l6ZSk7CisJCWlmIChyZWdfbWFwW2ldID49IDgpCisJCQkqaW5zdCsrID0gUkVYX0I7CisJCVBPUF9SRUcocmVnX2xtYXBbaV0pOworCX0KKworCXRtcCA9IGNvbXBpbGVyLT5zYXZlZHMgPCBTTEpJVF9OVU1CRVJfT0ZfU0FWRURfUkVHSVNURVJTID8gKFNMSklUX1MwICsgMSAtIGNvbXBpbGVyLT5zYXZlZHMpIDogU0xKSVRfRklSU1RfU0FWRURfUkVHOworCWZvciAoaSA9IHRtcDsgaSA8PSBTTEpJVF9TMDsgaSsrKSB7CisJCXNpemUgPSByZWdfbWFwW2ldID49IDggPyAyIDogMTsKKwkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJSU5DX1NJWkUoc2l6ZSk7CisJCWlmIChyZWdfbWFwW2ldID49IDgpCisJCQkqaW5zdCsrID0gUkVYX0I7CisJCVBPUF9SRUcocmVnX2xtYXBbaV0pOworCX0KKworCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxKTsKKwlGQUlMX0lGKCFpbnN0KTsKKwlJTkNfU0laRSgxKTsKKwlSRVQoKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgT3BlcmF0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9kb19pbW0zMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91YiByZXgsIHNsaml0X3ViIG9wY29kZSwgc2xqaXRfc3cgaW1tKQoreworCXNsaml0X3ViICppbnN0OworCXNsaml0X3NpIGxlbmd0aCA9IDEgKyAocmV4ID8gMSA6IDApICsgc2l6ZW9mKHNsaml0X3NpKTsKKworCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyBsZW5ndGgpOworCUZBSUxfSUYoIWluc3QpOworCUlOQ19TSVpFKGxlbmd0aCk7CisJaWYgKHJleCkKKwkJKmluc3QrKyA9IHJleDsKKwkqaW5zdCsrID0gb3Bjb2RlOworCSooc2xqaXRfc2kqKWluc3QgPSBpbW07CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBzbGppdF91YiogZW1pdF94ODZfaW5zdHJ1Y3Rpb24oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgc2l6ZSwKKwkvKiBUaGUgcmVnaXN0ZXIgb3IgaW1tZWRpYXRlIG9wZXJhbmQuICovCisJc2xqaXRfc2kgYSwgc2xqaXRfc3cgaW1tYSwKKwkvKiBUaGUgZ2VuZXJhbCBvcGVyYW5kIChub3QgaW1tZWRpYXRlKS4gKi8KKwlzbGppdF9zaSBiLCBzbGppdF9zdyBpbW1iKQoreworCXNsaml0X3ViICppbnN0OworCXNsaml0X3ViICpidWZfcHRyOworCXNsaml0X3ViIHJleCA9IDA7CisJc2xqaXRfc2kgZmxhZ3MgPSBzaXplICYgfjB4ZjsKKwlzbGppdF9zaSBpbnN0X3NpemU7CisKKwkvKiBUaGUgaW1tZWRpYXRlIG9wZXJhbmQgbXVzdCBiZSAzMiBiaXQuICovCisJU0xKSVRfQVNTRVJUKCEoYSAmIFNMSklUX0lNTSkgfHwgY29tcGlsZXItPm1vZGUzMiB8fCBJU19IQUxGV09SRChpbW1hKSk7CisJLyogQm90aCBjYW5ub3QgYmUgc3dpdGNoZWQgb24uICovCisJU0xKSVRfQVNTRVJUKChmbGFncyAmIChFWDg2X0JJTl9JTlMgfCBFWDg2X1NISUZUX0lOUykpICE9IChFWDg2X0JJTl9JTlMgfCBFWDg2X1NISUZUX0lOUykpOworCS8qIFNpemUgZmxhZ3Mgbm90IGFsbG93ZWQgZm9yIHR5cGVkIGluc3RydWN0aW9ucy4gKi8KKwlTTEpJVF9BU1NFUlQoIShmbGFncyAmIChFWDg2X0JJTl9JTlMgfCBFWDg2X1NISUZUX0lOUykpIHx8IChmbGFncyAmIChFWDg2X0JZVEVfQVJHIHwgRVg4Nl9IQUxGX0FSRykpID09IDApOworCS8qIEJvdGggc2l6ZSBmbGFncyBjYW5ub3QgYmUgc3dpdGNoZWQgb24uICovCisJU0xKSVRfQVNTRVJUKChmbGFncyAmIChFWDg2X0JZVEVfQVJHIHwgRVg4Nl9IQUxGX0FSRykpICE9IChFWDg2X0JZVEVfQVJHIHwgRVg4Nl9IQUxGX0FSRykpOworCS8qIFNTRTIgYW5kIGltbWVkaWF0ZSBpcyBub3QgcG9zc2libGUuICovCisJU0xKSVRfQVNTRVJUKCEoYSAmIFNMSklUX0lNTSkgfHwgIShmbGFncyAmIEVYODZfU1NFMikpOworCVNMSklUX0FTU0VSVCgoZmxhZ3MgJiAoRVg4Nl9QUkVGX0YyIHwgRVg4Nl9QUkVGX0YzKSkgIT0gKEVYODZfUFJFRl9GMiB8IEVYODZfUFJFRl9GMykKKwkJJiYgKGZsYWdzICYgKEVYODZfUFJFRl9GMiB8IEVYODZfUFJFRl82NikpICE9IChFWDg2X1BSRUZfRjIgfCBFWDg2X1BSRUZfNjYpCisJCSYmIChmbGFncyAmIChFWDg2X1BSRUZfRjMgfCBFWDg2X1BSRUZfNjYpKSAhPSAoRVg4Nl9QUkVGX0YzIHwgRVg4Nl9QUkVGXzY2KSk7CisKKwlzaXplICY9IDB4ZjsKKwlpbnN0X3NpemUgPSBzaXplOworCisJaWYgKCFjb21waWxlci0+bW9kZTMyICYmICEoZmxhZ3MgJiBFWDg2X05PX1JFWFcpKQorCQlyZXggfD0gUkVYX1c7CisJZWxzZSBpZiAoZmxhZ3MgJiBFWDg2X1JFWCkKKwkJcmV4IHw9IFJFWDsKKworCWlmIChmbGFncyAmIChFWDg2X1BSRUZfRjIgfCBFWDg2X1BSRUZfRjMpKQorCQlpbnN0X3NpemUrKzsKKwlpZiAoZmxhZ3MgJiBFWDg2X1BSRUZfNjYpCisJCWluc3Rfc2l6ZSsrOworCisJLyogQ2FsY3VsYXRlIHNpemUgb2YgYi4gKi8KKwlpbnN0X3NpemUgKz0gMTsgLyogbW9kIHIvbSBieXRlLiAqLworCWlmIChiICYgU0xKSVRfTUVNKSB7CisJCWlmICghKGIgJiBPRkZTX1JFR19NQVNLKSkgeworCQkJaWYgKE5PVF9IQUxGV09SRChpbW1iKSkgeworCQkJCWlmIChlbWl0X2xvYWRfaW1tNjQoY29tcGlsZXIsIFRNUF9SRUczLCBpbW1iKSkKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJaW1tYiA9IDA7CisJCQkJaWYgKGIgJiBSRUdfTUFTSykKKwkJCQkJYiB8PSBUT19PRkZTX1JFRyhUTVBfUkVHMyk7CisJCQkJZWxzZQorCQkJCQliIHw9IFRNUF9SRUczOworCQkJfQorCQkJZWxzZSBpZiAocmVnX2xtYXBbYiAmIFJFR19NQVNLXSA9PSA0KQorCQkJCWIgfD0gVE9fT0ZGU19SRUcoU0xKSVRfU1ApOworCQl9CisKKwkJaWYgKChiICYgUkVHX01BU0spID09IFNMSklUX1VOVVNFRCkKKwkJCWluc3Rfc2l6ZSArPSAxICsgc2l6ZW9mKHNsaml0X3NpKTsgLyogU0lCIGJ5dGUgcmVxdWlyZWQgdG8gYXZvaWQgUklQIGJhc2VkIGFkZHJlc3NpbmcuICovCisJCWVsc2UgeworCQkJaWYgKHJlZ19tYXBbYiAmIFJFR19NQVNLXSA+PSA4KQorCQkJCXJleCB8PSBSRVhfQjsKKworCQkJaWYgKGltbWIgIT0gMCAmJiAoIShiICYgT0ZGU19SRUdfTUFTSykgfHwgKGIgJiBPRkZTX1JFR19NQVNLKSA9PSBUT19PRkZTX1JFRyhTTEpJVF9TUCkpKSB7CisJCQkJLyogSW1tZWRpYXRlIG9wZXJhbmQuICovCisJCQkJaWYgKGltbWIgPD0gMTI3ICYmIGltbWIgPj0gLTEyOCkKKwkJCQkJaW5zdF9zaXplICs9IHNpemVvZihzbGppdF9zYik7CisJCQkJZWxzZQorCQkJCQlpbnN0X3NpemUgKz0gc2l6ZW9mKHNsaml0X3NpKTsKKwkJCX0KKwkJCWVsc2UgaWYgKHJlZ19sbWFwW2IgJiBSRUdfTUFTS10gPT0gNSkKKwkJCQlpbnN0X3NpemUgKz0gc2l6ZW9mKHNsaml0X3NiKTsKKworCQkJaWYgKChiICYgT0ZGU19SRUdfTUFTSykgIT0gU0xKSVRfVU5VU0VEKSB7CisJCQkJaW5zdF9zaXplICs9IDE7IC8qIFNJQiBieXRlLiAqLworCQkJCWlmIChyZWdfbWFwW09GRlNfUkVHKGIpXSA+PSA4KQorCQkJCQlyZXggfD0gUkVYX1g7CisJCQl9CisJCX0KKwl9CisJZWxzZSBpZiAoIShmbGFncyAmIEVYODZfU1NFMl9PUDIpICYmIHJlZ19tYXBbYl0gPj0gOCkKKwkJcmV4IHw9IFJFWF9COworCisJaWYgKGEgJiBTTEpJVF9JTU0pIHsKKwkJaWYgKGZsYWdzICYgRVg4Nl9CSU5fSU5TKSB7CisJCQlpZiAoaW1tYSA8PSAxMjcgJiYgaW1tYSA+PSAtMTI4KSB7CisJCQkJaW5zdF9zaXplICs9IDE7CisJCQkJZmxhZ3MgfD0gRVg4Nl9CWVRFX0FSRzsKKwkJCX0gZWxzZQorCQkJCWluc3Rfc2l6ZSArPSA0OworCQl9CisJCWVsc2UgaWYgKGZsYWdzICYgRVg4Nl9TSElGVF9JTlMpIHsKKwkJCWltbWEgJj0gY29tcGlsZXItPm1vZGUzMiA/IDB4MWYgOiAweDNmOworCQkJaWYgKGltbWEgIT0gMSkgeworCQkJCWluc3Rfc2l6ZSArKzsKKwkJCQlmbGFncyB8PSBFWDg2X0JZVEVfQVJHOworCQkJfQorCQl9IGVsc2UgaWYgKGZsYWdzICYgRVg4Nl9CWVRFX0FSRykKKwkJCWluc3Rfc2l6ZSsrOworCQllbHNlIGlmIChmbGFncyAmIEVYODZfSEFMRl9BUkcpCisJCQlpbnN0X3NpemUgKz0gc2l6ZW9mKHNob3J0KTsKKwkJZWxzZQorCQkJaW5zdF9zaXplICs9IHNpemVvZihzbGppdF9zaSk7CisJfQorCWVsc2UgeworCQlTTEpJVF9BU1NFUlQoIShmbGFncyAmIEVYODZfU0hJRlRfSU5TKSB8fCBhID09IFNMSklUX1BSRUZfU0hJRlRfUkVHKTsKKwkJLyogcmVnX21hcFtTTEpJVF9QUkVGX1NISUZUX1JFR10gaXMgbGVzcyB0aGFuIDguICovCisJCWlmICghKGZsYWdzICYgRVg4Nl9TU0UyX09QMSkgJiYgcmVnX21hcFthXSA+PSA4KQorCQkJcmV4IHw9IFJFWF9SOworCX0KKworCWlmIChyZXgpCisJCWluc3Rfc2l6ZSsrOworCisJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIGluc3Rfc2l6ZSk7CisJUFRSX0ZBSUxfSUYoIWluc3QpOworCisJLyogRW5jb2RpbmcgdGhlIGJ5dGUuICovCisJSU5DX1NJWkUoaW5zdF9zaXplKTsKKwlpZiAoZmxhZ3MgJiBFWDg2X1BSRUZfRjIpCisJCSppbnN0KysgPSAweGYyOworCWlmIChmbGFncyAmIEVYODZfUFJFRl9GMykKKwkJKmluc3QrKyA9IDB4ZjM7CisJaWYgKGZsYWdzICYgRVg4Nl9QUkVGXzY2KQorCQkqaW5zdCsrID0gMHg2NjsKKwlpZiAocmV4KQorCQkqaW5zdCsrID0gcmV4OworCWJ1Zl9wdHIgPSBpbnN0ICsgc2l6ZTsKKworCS8qIEVuY29kZSBtb2Qvcm0gYnl0ZS4gKi8KKwlpZiAoIShmbGFncyAmIEVYODZfU0hJRlRfSU5TKSkgeworCQlpZiAoKGZsYWdzICYgRVg4Nl9CSU5fSU5TKSAmJiAoYSAmIFNMSklUX0lNTSkpCisJCQkqaW5zdCA9IChmbGFncyAmIEVYODZfQllURV9BUkcpID8gR1JPVVBfQklOQVJZXzgzIDogR1JPVVBfQklOQVJZXzgxOworCisJCWlmICgoYSAmIFNMSklUX0lNTSkgfHwgKGEgPT0gMCkpCisJCQkqYnVmX3B0ciA9IDA7CisJCWVsc2UgaWYgKCEoZmxhZ3MgJiBFWDg2X1NTRTJfT1AxKSkKKwkJCSpidWZfcHRyID0gcmVnX2xtYXBbYV0gPDwgMzsKKwkJZWxzZQorCQkJKmJ1Zl9wdHIgPSBhIDw8IDM7CisJfQorCWVsc2UgeworCQlpZiAoYSAmIFNMSklUX0lNTSkgeworCQkJaWYgKGltbWEgPT0gMSkKKwkJCQkqaW5zdCA9IEdST1VQX1NISUZUXzE7CisJCQllbHNlCisJCQkJKmluc3QgPSBHUk9VUF9TSElGVF9OOworCQl9IGVsc2UKKwkJCSppbnN0ID0gR1JPVVBfU0hJRlRfQ0w7CisJCSpidWZfcHRyID0gMDsKKwl9CisKKwlpZiAoIShiICYgU0xKSVRfTUVNKSkKKwkJKmJ1Zl9wdHIrKyB8PSBNT0RfUkVHICsgKCghKGZsYWdzICYgRVg4Nl9TU0UyX09QMikpID8gcmVnX2xtYXBbYl0gOiBiKTsKKwllbHNlIGlmICgoYiAmIFJFR19NQVNLKSAhPSBTTEpJVF9VTlVTRUQpIHsKKwkJaWYgKChiICYgT0ZGU19SRUdfTUFTSykgPT0gU0xKSVRfVU5VU0VEIHx8IChiICYgT0ZGU19SRUdfTUFTSykgPT0gVE9fT0ZGU19SRUcoU0xKSVRfU1ApKSB7CisJCQlpZiAoaW1tYiAhPSAwIHx8IHJlZ19sbWFwW2IgJiBSRUdfTUFTS10gPT0gNSkgeworCQkJCWlmIChpbW1iIDw9IDEyNyAmJiBpbW1iID49IC0xMjgpCisJCQkJCSpidWZfcHRyIHw9IDB4NDA7CisJCQkJZWxzZQorCQkJCQkqYnVmX3B0ciB8PSAweDgwOworCQkJfQorCisJCQlpZiAoKGIgJiBPRkZTX1JFR19NQVNLKSA9PSBTTEpJVF9VTlVTRUQpCisJCQkJKmJ1Zl9wdHIrKyB8PSByZWdfbG1hcFtiICYgUkVHX01BU0tdOworCQkJZWxzZSB7CisJCQkJKmJ1Zl9wdHIrKyB8PSAweDA0OworCQkJCSpidWZfcHRyKysgPSByZWdfbG1hcFtiICYgUkVHX01BU0tdIHwgKHJlZ19sbWFwW09GRlNfUkVHKGIpXSA8PCAzKTsKKwkJCX0KKworCQkJaWYgKGltbWIgIT0gMCB8fCByZWdfbG1hcFtiICYgUkVHX01BU0tdID09IDUpIHsKKwkJCQlpZiAoaW1tYiA8PSAxMjcgJiYgaW1tYiA+PSAtMTI4KQorCQkJCQkqYnVmX3B0cisrID0gaW1tYjsgLyogOCBiaXQgZGlzcGxhY2VtZW50LiAqLworCQkJCWVsc2UgeworCQkJCQkqKHNsaml0X3NpKilidWZfcHRyID0gaW1tYjsgLyogMzIgYml0IGRpc3BsYWNlbWVudC4gKi8KKwkJCQkJYnVmX3B0ciArPSBzaXplb2Yoc2xqaXRfc2kpOworCQkJCX0KKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCWlmIChyZWdfbG1hcFtiICYgUkVHX01BU0tdID09IDUpCisJCQkJKmJ1Zl9wdHIgfD0gMHg0MDsKKwkJCSpidWZfcHRyKysgfD0gMHgwNDsKKwkJCSpidWZfcHRyKysgPSByZWdfbG1hcFtiICYgUkVHX01BU0tdIHwgKHJlZ19sbWFwW09GRlNfUkVHKGIpXSA8PCAzKSB8IChpbW1iIDw8IDYpOworCQkJaWYgKHJlZ19sbWFwW2IgJiBSRUdfTUFTS10gPT0gNSkKKwkJCQkqYnVmX3B0cisrID0gMDsKKwkJfQorCX0KKwllbHNlIHsKKwkJKmJ1Zl9wdHIrKyB8PSAweDA0OworCQkqYnVmX3B0cisrID0gMHgyNTsKKwkJKihzbGppdF9zaSopYnVmX3B0ciA9IGltbWI7IC8qIDMyIGJpdCBkaXNwbGFjZW1lbnQuICovCisJCWJ1Zl9wdHIgKz0gc2l6ZW9mKHNsaml0X3NpKTsKKwl9CisKKwlpZiAoYSAmIFNMSklUX0lNTSkgeworCQlpZiAoZmxhZ3MgJiBFWDg2X0JZVEVfQVJHKQorCQkJKmJ1Zl9wdHIgPSBpbW1hOworCQllbHNlIGlmIChmbGFncyAmIEVYODZfSEFMRl9BUkcpCisJCQkqKHNob3J0KilidWZfcHRyID0gaW1tYTsKKwkJZWxzZSBpZiAoIShmbGFncyAmIEVYODZfU0hJRlRfSU5TKSkKKwkJCSooc2xqaXRfc2kqKWJ1Zl9wdHIgPSBpbW1hOworCX0KKworCXJldHVybiAhKGZsYWdzICYgRVg4Nl9TSElGVF9JTlMpID8gaW5zdCA6IChpbnN0ICsgMSk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIENhbGwgLyByZXR1cm4gaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBjYWxsX3dpdGhfYXJncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlKQoreworCXNsaml0X3ViICppbnN0OworCisjaWZuZGVmIF9XSU42NAorCVNMSklUX0NPTVBJTEVfQVNTRVJUKHJlZ19tYXBbU0xKSVRfUjFdID09IDYgJiYgcmVnX21hcFtTTEpJVF9SMF0gPCA4ICYmIHJlZ19tYXBbU0xKSVRfUjJdIDwgOCwgYXJnc19yZWdpc3RlcnMpOworCisJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArICgodHlwZSA8IFNMSklUX0NBTEwzKSA/IDMgOiA2KSk7CisJRkFJTF9JRighaW5zdCk7CisJSU5DX1NJWkUoKHR5cGUgPCBTTEpJVF9DQUxMMykgPyAzIDogNik7CisJaWYgKHR5cGUgPj0gU0xKSVRfQ0FMTDMpIHsKKwkJKmluc3QrKyA9IFJFWF9XOworCQkqaW5zdCsrID0gTU9WX3Jfcm07CisJCSppbnN0KysgPSBNT0RfUkVHIHwgKDB4MiAvKiByZHggKi8gPDwgMykgfCByZWdfbG1hcFtTTEpJVF9SMl07CisJfQorCSppbnN0KysgPSBSRVhfVzsKKwkqaW5zdCsrID0gTU9WX3Jfcm07CisJKmluc3QrKyA9IE1PRF9SRUcgfCAoMHg3IC8qIHJkaSAqLyA8PCAzKSB8IHJlZ19sbWFwW1NMSklUX1IwXTsKKyNlbHNlCisJU0xKSVRfQ09NUElMRV9BU1NFUlQocmVnX21hcFtTTEpJVF9SMV0gPT0gMiAmJiByZWdfbWFwW1NMSklUX1IwXSA8IDggJiYgcmVnX21hcFtTTEpJVF9SMl0gPCA4LCBhcmdzX3JlZ2lzdGVycyk7CisKKwlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgKCh0eXBlIDwgU0xKSVRfQ0FMTDMpID8gMyA6IDYpKTsKKwlGQUlMX0lGKCFpbnN0KTsKKwlJTkNfU0laRSgodHlwZSA8IFNMSklUX0NBTEwzKSA/IDMgOiA2KTsKKwlpZiAodHlwZSA+PSBTTEpJVF9DQUxMMykgeworCQkqaW5zdCsrID0gUkVYX1cgfCBSRVhfUjsKKwkJKmluc3QrKyA9IE1PVl9yX3JtOworCQkqaW5zdCsrID0gTU9EX1JFRyB8ICgweDAgLyogcjggKi8gPDwgMykgfCByZWdfbG1hcFtTTEpJVF9SMl07CisJfQorCSppbnN0KysgPSBSRVhfVzsKKwkqaW5zdCsrID0gTU9WX3Jfcm07CisJKmluc3QrKyA9IE1PRF9SRUcgfCAoMHgxIC8qIHJjeCAqLyA8PCAzKSB8IHJlZ19sbWFwW1NMSklUX1IwXTsKKyNlbmRpZgorCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mYXN0X2VudGVyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dykKK3sKKwlzbGppdF91YiAqaW5zdDsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mYXN0X2VudGVyKGNvbXBpbGVyLCBkc3QsIGRzdHcpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisKKwkvKiBGb3IgVU5VU0VEIGRzdC4gVW5jb21tb24sIGJ1dCBwb3NzaWJsZS4gKi8KKwlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkKKwkJZHN0ID0gVE1QX1JFRzE7CisKKwlpZiAoRkFTVF9JU19SRUcoZHN0KSkgeworCQlpZiAocmVnX21hcFtkc3RdIDwgOCkgeworCQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQlJTkNfU0laRSgxKTsKKwkJCVBPUF9SRUcocmVnX2xtYXBbZHN0XSk7CisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJfQorCisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAyKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCUlOQ19TSVpFKDIpOworCQkqaW5zdCsrID0gUkVYX0I7CisJCVBPUF9SRUcocmVnX2xtYXBbZHN0XSk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCS8qIFJFWF9XIGlzIG5vdCBuZWNlc3NhcnkgKHNyYyBpcyBub3QgaW1tZWRpYXRlKS4gKi8KKwljb21waWxlci0+bW9kZTMyID0gMTsKKwlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIDAsIDAsIGRzdCwgZHN0dyk7CisJRkFJTF9JRighaW5zdCk7CisJKmluc3QrKyA9IFBPUF9ybTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfZmFzdF9yZXR1cm4oc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXNsaml0X3ViICppbnN0OworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2Zhc3RfcmV0dXJuKGNvbXBpbGVyLCBzcmMsIHNyY3cpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CisKKwlpZiAoKHNyYyAmIFNMSklUX0lNTSkgJiYgTk9UX0hBTEZXT1JEKHNyY3cpKSB7CisJCUZBSUxfSUYoZW1pdF9sb2FkX2ltbTY0KGNvbXBpbGVyLCBUTVBfUkVHMSwgc3JjdykpOworCQlzcmMgPSBUTVBfUkVHMTsKKwl9CisKKwlpZiAoRkFTVF9JU19SRUcoc3JjKSkgeworCQlpZiAocmVnX21hcFtzcmNdIDwgOCkgeworCQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEgKyAxKTsKKwkJCUZBSUxfSUYoIWluc3QpOworCisJCQlJTkNfU0laRSgxICsgMSk7CisJCQlQVVNIX1JFRyhyZWdfbG1hcFtzcmNdKTsKKwkJfQorCQllbHNlIHsKKwkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAyICsgMSk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKworCQkJSU5DX1NJWkUoMiArIDEpOworCQkJKmluc3QrKyA9IFJFWF9COworCQkJUFVTSF9SRUcocmVnX2xtYXBbc3JjXSk7CisJCX0KKwl9CisJZWxzZSBpZiAoc3JjICYgU0xKSVRfTUVNKSB7CisJCS8qIFJFWF9XIGlzIG5vdCBuZWNlc3NhcnkgKHNyYyBpcyBub3QgaW1tZWRpYXRlKS4gKi8KKwkJY29tcGlsZXItPm1vZGUzMiA9IDE7CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgMCwgMCwgc3JjLCBzcmN3KTsKKwkJRkFJTF9JRighaW5zdCk7CisJCSppbnN0KysgPSBHUk9VUF9GRjsKKwkJKmluc3QgfD0gUFVTSF9ybTsKKworCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CisJCUZBSUxfSUYoIWluc3QpOworCQlJTkNfU0laRSgxKTsKKwl9CisJZWxzZSB7CisJCVNMSklUX0FTU0VSVChJU19IQUxGV09SRChzcmN3KSk7CisJCS8qIFNMSklUX0lNTS4gKi8KKwkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUgKyAxKTsKKwkJRkFJTF9JRighaW5zdCk7CisKKwkJSU5DX1NJWkUoNSArIDEpOworCQkqaW5zdCsrID0gUFVTSF9pMzI7CisJCSooc2xqaXRfc2kqKWluc3QgPSBzcmN3OworCQlpbnN0ICs9IHNpemVvZihzbGppdF9zaSk7CisJfQorCisJUkVUKCk7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgRXh0ZW5kIGlucHV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9tb3ZfaW50KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNpZ24sCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF91YiogaW5zdDsKKwlzbGppdF9zaSBkc3RfcjsKKworCWNvbXBpbGVyLT5tb2RlMzIgPSAwOworCisJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQgJiYgIShzcmMgJiBTTEpJVF9NRU0pKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsgLyogRW1wdHkgaW5zdHJ1Y3Rpb24uICovCisKKwlpZiAoc3JjICYgU0xKSVRfSU1NKSB7CisJCWlmIChGQVNUX0lTX1JFRyhkc3QpKSB7CisJCQlpZiAoc2lnbiB8fCAoKHNsaml0X3V3KXNyY3cgPD0gMHg3ZmZmZmZmZikpIHsKKwkJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFNMSklUX0lNTSwgKHNsaml0X3N3KShzbGppdF9zaSlzcmN3LCBkc3QsIGRzdHcpOworCQkJCUZBSUxfSUYoIWluc3QpOworCQkJCSppbnN0ID0gTU9WX3JtX2kzMjsKKwkJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJCX0KKwkJCXJldHVybiBlbWl0X2xvYWRfaW1tNjQoY29tcGlsZXIsIGRzdCwgc3Jjdyk7CisJCX0KKwkJY29tcGlsZXItPm1vZGUzMiA9IDE7CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgU0xKSVRfSU1NLCAoc2xqaXRfc3cpKHNsaml0X3NpKXNyY3csIGRzdCwgZHN0dyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCA9IE1PVl9ybV9pMzI7CisJCWNvbXBpbGVyLT5tb2RlMzIgPSAwOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwlkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfUkVHMTsKKworCWlmICgoZHN0ICYgU0xKSVRfTUVNKSAmJiBGQVNUX0lTX1JFRyhzcmMpKQorCQlkc3RfciA9IHNyYzsKKwllbHNlIHsKKwkJaWYgKHNpZ24pIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0X3IsIDAsIHNyYywgc3Jjdyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0KysgPSBNT1ZTWERfcl9ybTsKKwkJfSBlbHNlIHsKKwkJCWNvbXBpbGVyLT5tb2RlMzIgPSAxOworCQkJRkFJTF9JRihlbWl0X21vdihjb21waWxlciwgZHN0X3IsIDAsIHNyYywgc3JjdykpOworCQkJY29tcGlsZXItPm1vZGUzMiA9IDA7CisJCX0KKwl9CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKSB7CisJCWNvbXBpbGVyLT5tb2RlMzIgPSAxOworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBkc3QsIGRzdHcpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJKmluc3QgPSBNT1Zfcm1fcjsKKwkJY29tcGlsZXItPm1vZGUzMiA9IDA7CisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVYODZfY29tbW9uLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXROYXRpdmVYODZfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2YzE1YQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3NyYy9zbGppdC9zbGppdE5hdGl2ZVg4Nl9jb21tb24uYwpAQCAtMCwwICsxLDMwMDQgQEAKKy8qCisgKiAgICBTdGFjay1sZXNzIEp1c3QtSW4tVGltZSBjb21waWxlcgorICoKKyAqICAgIENvcHlyaWdodCAyMDA5LTIwMTIgWm9sdGFuIEhlcmN6ZWcgKGh6bWVzdGVyQGZyZWVtYWlsLmh1KS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUKKyAqIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAqICAgICAgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3QKKyAqICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVAorICogU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIFNMSklUX0NPTlNUIGNoYXIqIHNsaml0X2dldF9wbGF0Zm9ybV9uYW1lKHZvaWQpCit7CisJcmV0dXJuICJ4ODYiIFNMSklUX0NQVUlORk87Cit9CisKKy8qCisgICAzMmIgcmVnaXN0ZXIgaW5kZXhlczoKKyAgICAgMCAtIEVBWAorICAgICAxIC0gRUNYCisgICAgIDIgLSBFRFgKKyAgICAgMyAtIEVCWAorICAgICA0IC0gbm9uZQorICAgICA1IC0gRUJQCisgICAgIDYgLSBFU0kKKyAgICAgNyAtIEVESQorKi8KKworLyoKKyAgIDY0YiByZWdpc3RlciBpbmRleGVzOgorICAgICAwIC0gUkFYCisgICAgIDEgLSBSQ1gKKyAgICAgMiAtIFJEWAorICAgICAzIC0gUkJYCisgICAgIDQgLSBub25lCisgICAgIDUgLSBSQlAKKyAgICAgNiAtIFJTSQorICAgICA3IC0gUkRJCisgICAgIDggLSBSOCAgIC0gRnJvbSBub3cgb24gUkVYIHByZWZpeCBpcyByZXF1aXJlZAorICAgICA5IC0gUjkKKyAgICAxMCAtIFIxMAorICAgIDExIC0gUjExCisgICAgMTIgLSBSMTIKKyAgICAxMyAtIFIxMworICAgIDE0IC0gUjE0CisgICAgMTUgLSBSMTUKKyovCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisKKy8qIExhc3QgcmVnaXN0ZXIgKyAxLiAqLworI2RlZmluZSBUTVBfUkVHMQkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDIpCisKK3N0YXRpYyBTTEpJVF9DT05TVCBzbGppdF91YiByZWdfbWFwW1NMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAzXSA9IHsKKwkwLCAwLCAyLCAxLCAwLCAwLCAwLCAwLCA3LCA2LCAzLCA0LCA1Cit9OworCisjZGVmaW5lIENIRUNLX0VYVFJBX1JFR1MocCwgdywgZG8pIFwKKwlpZiAocCA+PSBTTEpJVF9SMyAmJiBwIDw9IFNMSklUX1I2KSB7IFwKKwkJdyA9IFNMSklUX0xPQ0FMU19PRkZTRVQgKyAoKHApIC0gKFNMSklUX1IzICsgNCkpICogc2l6ZW9mKHNsaml0X3N3KTsgXAorCQlwID0gU0xKSVRfTUVNMShTTEpJVF9TUCk7IFwKKwkJZG87IFwKKwl9CisKKyNlbHNlIC8qIFNMSklUX0NPTkZJR19YODZfMzIgKi8KKworLyogTGFzdCByZWdpc3RlciArIDEuICovCisjZGVmaW5lIFRNUF9SRUcxCShTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgMikKKyNkZWZpbmUgVE1QX1JFRzIJKFNMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyAzKQorI2RlZmluZSBUTVBfUkVHMwkoU0xKSVRfTlVNQkVSX09GX1JFR0lTVEVSUyArIDQpCisKKy8qIE5vdGU6IHIxMiAmIDB4NyA9PSAwYjEwMCwgd2hpY2ggZGVjb2RlZCBhcyBTSUIgYnl0ZSBwcmVzZW50CisgICBOb3RlOiBhdm9pZCB0byB1c2UgcjEyIGFuZCByMTMgZm9yIG1lbW9yeSBhZGRlc3NpbmcKKyAgIHRoZXJlZm9yZSByMTIgaXMgYmV0dGVyIGZvciBTQVZFRF9FUkVHIHRoYW4gU0FWRURfUkVHLiAqLworI2lmbmRlZiBfV0lONjQKKy8qIDFzdCBwYXNzZWQgaW4gcmRpLCAybmQgYXJndW1lbnQgcGFzc2VkIGluIHJzaSwgM3JkIGluIHJkeC4gKi8KK3N0YXRpYyBTTEpJVF9DT05TVCBzbGppdF91YiByZWdfbWFwW1NMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyA1XSA9IHsKKwkwLCAwLCA2LCAxLCA4LCAxMSwgMTAsIDEyLCA1LCAxMywgMTQsIDE1LCAzLCA0LCAyLCA3LCA5Cit9OworLyogbG93LW1hcC4gcmVnX21hcCAmIDB4Ny4gKi8KK3N0YXRpYyBTTEpJVF9DT05TVCBzbGppdF91YiByZWdfbG1hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNV0gPSB7CisJMCwgMCwgNiwgMSwgMCwgMywgIDIsICA0LCAgNSwgIDUsICA2LCAgNywgMywgNCwgMiwgNywgMQorfTsKKyNlbHNlCisvKiAxc3QgcGFzc2VkIGluIHJjeCwgMm5kIGFyZ3VtZW50IHBhc3NlZCBpbiByZHgsIDNyZCBpbiByOC4gKi8KK3N0YXRpYyBTTEpJVF9DT05TVCBzbGppdF91YiByZWdfbWFwW1NMSklUX05VTUJFUl9PRl9SRUdJU1RFUlMgKyA1XSA9IHsKKwkwLCAwLCAyLCAxLCAxMSwgMTIsIDUsIDEzLCAxNCwgMTUsIDcsIDYsIDMsIDQsIDEwLCA4LCA5Cit9OworLyogbG93LW1hcC4gcmVnX21hcCAmIDB4Ny4gKi8KK3N0YXRpYyBTTEpJVF9DT05TVCBzbGppdF91YiByZWdfbG1hcFtTTEpJVF9OVU1CRVJfT0ZfUkVHSVNURVJTICsgNV0gPSB7CisJMCwgMCwgMiwgMSwgMywgIDQsICA1LCAgNSwgNiwgIDcsICA3LCA2LCAzLCA0LCAyLCAgMCwgMQorfTsKKyNlbmRpZgorCisjZGVmaW5lIFJFWF9XCQkweDQ4CisjZGVmaW5lIFJFWF9SCQkweDQ0CisjZGVmaW5lIFJFWF9YCQkweDQyCisjZGVmaW5lIFJFWF9CCQkweDQxCisjZGVmaW5lIFJFWAkJMHg0MAorCisjaWZuZGVmIF9XSU42NAorI2RlZmluZSBIQUxGV09SRF9NQVggMHg3ZmZmZmZmZmwKKyNkZWZpbmUgSEFMRldPUkRfTUlOIC0weDgwMDAwMDAwbAorI2Vsc2UKKyNkZWZpbmUgSEFMRldPUkRfTUFYIDB4N2ZmZmZmZmZsbAorI2RlZmluZSBIQUxGV09SRF9NSU4gLTB4ODAwMDAwMDBsbAorI2VuZGlmCisKKyNkZWZpbmUgSVNfSEFMRldPUkQoeCkJCSgoeCkgPD0gSEFMRldPUkRfTUFYICYmICh4KSA+PSBIQUxGV09SRF9NSU4pCisjZGVmaW5lIE5PVF9IQUxGV09SRCh4KQkJKCh4KSA+IEhBTEZXT1JEX01BWCB8fCAoeCkgPCBIQUxGV09SRF9NSU4pCisKKyNkZWZpbmUgQ0hFQ0tfRVhUUkFfUkVHUyhwLCB3LCBkbykKKworI2VuZGlmIC8qIFNMSklUX0NPTkZJR19YODZfMzIgKi8KKworI2RlZmluZSBUTVBfRlJFRwkoMCkKKworLyogU2l6ZSBmbGFncyBmb3IgZW1pdF94ODZfaW5zdHJ1Y3Rpb246ICovCisjZGVmaW5lIEVYODZfQklOX0lOUwkJMHgwMDEwCisjZGVmaW5lIEVYODZfU0hJRlRfSU5TCQkweDAwMjAKKyNkZWZpbmUgRVg4Nl9SRVgJCTB4MDA0MAorI2RlZmluZSBFWDg2X05PX1JFWFcJCTB4MDA4MAorI2RlZmluZSBFWDg2X0JZVEVfQVJHCQkweDAxMDAKKyNkZWZpbmUgRVg4Nl9IQUxGX0FSRwkJMHgwMjAwCisjZGVmaW5lIEVYODZfUFJFRl82NgkJMHgwNDAwCisjZGVmaW5lIEVYODZfUFJFRl9GMgkJMHgwODAwCisjZGVmaW5lIEVYODZfUFJFRl9GMwkJMHgxMDAwCisjZGVmaW5lIEVYODZfU1NFMl9PUDEJCTB4MjAwMAorI2RlZmluZSBFWDg2X1NTRTJfT1AyCQkweDQwMDAKKyNkZWZpbmUgRVg4Nl9TU0UyCQkoRVg4Nl9TU0UyX09QMSB8IEVYODZfU1NFMl9PUDIpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIEluc3RydWNpb24gZm9ybXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBBREQJCSgvKiBCSU5BUlkgKi8gMCA8PCAzKQorI2RlZmluZSBBRERfRUFYX2kzMgkweDA1CisjZGVmaW5lIEFERF9yX3JtCTB4MDMKKyNkZWZpbmUgQUREX3JtX3IJMHgwMQorI2RlZmluZSBBRERTRF94X3htCTB4NTgKKyNkZWZpbmUgQURDCQkoLyogQklOQVJZICovIDIgPDwgMykKKyNkZWZpbmUgQURDX0VBWF9pMzIJMHgxNQorI2RlZmluZSBBRENfcl9ybQkweDEzCisjZGVmaW5lIEFEQ19ybV9yCTB4MTEKKyNkZWZpbmUgQU5ECQkoLyogQklOQVJZICovIDQgPDwgMykKKyNkZWZpbmUgQU5EX0VBWF9pMzIJMHgyNQorI2RlZmluZSBBTkRfcl9ybQkweDIzCisjZGVmaW5lIEFORF9ybV9yCTB4MjEKKyNkZWZpbmUgQU5EUERfeF94bQkweDU0CisjZGVmaW5lIEJTUl9yX3JtCSgvKiBHUk9VUF8wRiAqLyAweGJkKQorI2RlZmluZSBDQUxMX2kzMgkweGU4CisjZGVmaW5lIENBTExfcm0JCSgvKiBHUk9VUF9GRiAqLyAyIDw8IDMpCisjZGVmaW5lIENEUQkJMHg5OQorI2RlZmluZSBDTU9WTkVfcl9ybQkoLyogR1JPVVBfMEYgKi8gMHg0NSkKKyNkZWZpbmUgQ01QCQkoLyogQklOQVJZICovIDcgPDwgMykKKyNkZWZpbmUgQ01QX0VBWF9pMzIJMHgzZAorI2RlZmluZSBDTVBfcl9ybQkweDNiCisjZGVmaW5lIENNUF9ybV9yCTB4MzkKKyNkZWZpbmUgQ1ZUUEQyUFNfeF94bQkweDVhCisjZGVmaW5lIENWVFNJMlNEX3hfcm0JMHgyYQorI2RlZmluZSBDVlRUU0QyU0lfcl94bQkweDJjCisjZGVmaW5lIERJVgkJKC8qIEdST1VQX0Y3ICovIDYgPDwgMykKKyNkZWZpbmUgRElWU0RfeF94bQkweDVlCisjZGVmaW5lIElOVDMJCTB4Y2MKKyNkZWZpbmUgSURJVgkJKC8qIEdST1VQX0Y3ICovIDcgPDwgMykKKyNkZWZpbmUgSU1VTAkJKC8qIEdST1VQX0Y3ICovIDUgPDwgMykKKyNkZWZpbmUgSU1VTF9yX3JtCSgvKiBHUk9VUF8wRiAqLyAweGFmKQorI2RlZmluZSBJTVVMX3Jfcm1faTgJMHg2YgorI2RlZmluZSBJTVVMX3Jfcm1faTMyCTB4NjkKKyNkZWZpbmUgSkVfaTgJCTB4NzQKKyNkZWZpbmUgSk5FX2k4CQkweDc1CisjZGVmaW5lIEpNUF9pOAkJMHhlYgorI2RlZmluZSBKTVBfaTMyCQkweGU5CisjZGVmaW5lIEpNUF9ybQkJKC8qIEdST1VQX0ZGICovIDQgPDwgMykKKyNkZWZpbmUgTEVBX3JfbQkJMHg4ZAorI2RlZmluZSBNT1Zfcl9ybQkweDhiCisjZGVmaW5lIE1PVl9yX2kzMgkweGI4CisjZGVmaW5lIE1PVl9ybV9yCTB4ODkKKyNkZWZpbmUgTU9WX3JtX2kzMgkweGM3CisjZGVmaW5lIE1PVl9ybThfaTgJMHhjNgorI2RlZmluZSBNT1Zfcm04X3I4CTB4ODgKKyNkZWZpbmUgTU9WU0RfeF94bQkweDEwCisjZGVmaW5lIE1PVlNEX3htX3gJMHgxMQorI2RlZmluZSBNT1ZTWERfcl9ybQkweDYzCisjZGVmaW5lIE1PVlNYX3Jfcm04CSgvKiBHUk9VUF8wRiAqLyAweGJlKQorI2RlZmluZSBNT1ZTWF9yX3JtMTYJKC8qIEdST1VQXzBGICovIDB4YmYpCisjZGVmaW5lIE1PVlpYX3Jfcm04CSgvKiBHUk9VUF8wRiAqLyAweGI2KQorI2RlZmluZSBNT1ZaWF9yX3JtMTYJKC8qIEdST1VQXzBGICovIDB4YjcpCisjZGVmaW5lIE1VTAkJKC8qIEdST1VQX0Y3ICovIDQgPDwgMykKKyNkZWZpbmUgTVVMU0RfeF94bQkweDU5CisjZGVmaW5lIE5FR19ybQkJKC8qIEdST1VQX0Y3ICovIDMgPDwgMykKKyNkZWZpbmUgTk9QCQkweDkwCisjZGVmaW5lIE5PVF9ybQkJKC8qIEdST1VQX0Y3ICovIDIgPDwgMykKKyNkZWZpbmUgT1IJCSgvKiBCSU5BUlkgKi8gMSA8PCAzKQorI2RlZmluZSBPUl9yX3JtCQkweDBiCisjZGVmaW5lIE9SX0VBWF9pMzIJMHgwZAorI2RlZmluZSBPUl9ybV9yCQkweDA5CisjZGVmaW5lIE9SX3JtOF9yOAkweDA4CisjZGVmaW5lIFBPUF9yCQkweDU4CisjZGVmaW5lIFBPUF9ybQkJMHg4ZgorI2RlZmluZSBQT1BGCQkweDlkCisjZGVmaW5lIFBVU0hfaTMyCTB4NjgKKyNkZWZpbmUgUFVTSF9yCQkweDUwCisjZGVmaW5lIFBVU0hfcm0JCSgvKiBHUk9VUF9GRiAqLyA2IDw8IDMpCisjZGVmaW5lIFBVU0hGCQkweDljCisjZGVmaW5lIFJFVF9uZWFyCTB4YzMKKyNkZWZpbmUgUkVUX2kxNgkJMHhjMgorI2RlZmluZSBTQkIJCSgvKiBCSU5BUlkgKi8gMyA8PCAzKQorI2RlZmluZSBTQkJfRUFYX2kzMgkweDFkCisjZGVmaW5lIFNCQl9yX3JtCTB4MWIKKyNkZWZpbmUgU0JCX3JtX3IJMHgxOQorI2RlZmluZSBTQVIJCSgvKiBTSElGVCAqLyA3IDw8IDMpCisjZGVmaW5lIFNITAkJKC8qIFNISUZUICovIDQgPDwgMykKKyNkZWZpbmUgU0hSCQkoLyogU0hJRlQgKi8gNSA8PCAzKQorI2RlZmluZSBTVUIJCSgvKiBCSU5BUlkgKi8gNSA8PCAzKQorI2RlZmluZSBTVUJfRUFYX2kzMgkweDJkCisjZGVmaW5lIFNVQl9yX3JtCTB4MmIKKyNkZWZpbmUgU1VCX3JtX3IJMHgyOQorI2RlZmluZSBTVUJTRF94X3htCTB4NWMKKyNkZWZpbmUgVEVTVF9FQVhfaTMyCTB4YTkKKyNkZWZpbmUgVEVTVF9ybV9yCTB4ODUKKyNkZWZpbmUgVUNPTUlTRF94X3htCTB4MmUKKyNkZWZpbmUgVU5QQ0tMUERfeF94bQkweDE0CisjZGVmaW5lIFhDSEdfRUFYX3IJMHg5MAorI2RlZmluZSBYQ0hHX3Jfcm0JMHg4NworI2RlZmluZSBYT1IJCSgvKiBCSU5BUlkgKi8gNiA8PCAzKQorI2RlZmluZSBYT1JfRUFYX2kzMgkweDM1CisjZGVmaW5lIFhPUl9yX3JtCTB4MzMKKyNkZWZpbmUgWE9SX3JtX3IJMHgzMQorI2RlZmluZSBYT1JQRF94X3htCTB4NTcKKworI2RlZmluZSBHUk9VUF8wRgkweDBmCisjZGVmaW5lIEdST1VQX0Y3CTB4ZjcKKyNkZWZpbmUgR1JPVVBfRkYJMHhmZgorI2RlZmluZSBHUk9VUF9CSU5BUllfODEJMHg4MQorI2RlZmluZSBHUk9VUF9CSU5BUllfODMJMHg4MworI2RlZmluZSBHUk9VUF9TSElGVF8xCTB4ZDEKKyNkZWZpbmUgR1JPVVBfU0hJRlRfTgkweGMxCisjZGVmaW5lIEdST1VQX1NISUZUX0NMCTB4ZDMKKworI2RlZmluZSBNT0RfUkVHCQkweGMwCisjZGVmaW5lIE1PRF9ESVNQOAkweDQwCisKKyNkZWZpbmUgSU5DX1NJWkUocykJCQkoKmluc3QrKyA9IChzKSwgY29tcGlsZXItPnNpemUgKz0gKHMpKQorCisjZGVmaW5lIFBVU0hfUkVHKHIpCQkJKCppbnN0KysgPSAoUFVTSF9yICsgKHIpKSkKKyNkZWZpbmUgUE9QX1JFRyhyKQkJCSgqaW5zdCsrID0gKFBPUF9yICsgKHIpKSkKKyNkZWZpbmUgUkVUKCkJCQkJKCppbnN0KysgPSAoUkVUX25lYXIpKQorI2RlZmluZSBSRVRfSTE2KG4pCQkJKCppbnN0KysgPSAoUkVUX2kxNiksICppbnN0KysgPSBuLCAqaW5zdCsrID0gMCkKKy8qIHIzMiwgci9tMzIgKi8KKyNkZWZpbmUgTU9WX1JNKG1vZCwgcmVnLCBybSkJCSgqaW5zdCsrID0gKE1PVl9yX3JtKSwgKmluc3QrKyA9IChtb2QpIDw8IDYgfCAocmVnKSA8PCAzIHwgKHJtKSkKKworLyogTXVsdGl0aHJlYWRpbmcgZG9lcyBub3QgYWZmZWN0IHRoZXNlIHN0YXRpYyB2YXJpYWJsZXMsIHNpbmNlIHRoZXkgc3RvcmUKKyAgIGJ1aWx0LWluIENQVSBmZWF0dXJlcy4gVGhlcmVmb3JlIHRoZXkgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IGRpZmZlcmVudCB0aHJlYWRzCisgICBpZiB0aGV5IGRldGVjdCB0aGUgQ1BVIGZlYXR1cmVzIGluIHRoZSBzYW1lIHRpbWUuICovCisjaWYgKGRlZmluZWQgU0xKSVRfREVURUNUX1NTRTIgJiYgU0xKSVRfREVURUNUX1NTRTIpCitzdGF0aWMgc2xqaXRfc2kgY3B1X2hhc19zc2UyID0gLTE7CisjZW5kaWYKK3N0YXRpYyBzbGppdF9zaSBjcHVfaGFzX2Ntb3YgPSAtMTsKKworI2lmZGVmIF9XSU4zMl9XQ0UKKyNpbmNsdWRlIDxjbW5pbnRyaW4uaD4KKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDE0MDAKKyNpbmNsdWRlIDxpbnRyaW4uaD4KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBnZXRfY3B1X2ZlYXR1cmVzKHZvaWQpCit7CisJc2xqaXRfdWkgZmVhdHVyZXM7CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAxNDAwCisKKwlpbnQgQ1BVSW5mb1s0XTsKKwlfX2NwdWlkKENQVUluZm8sIDEpOworCWZlYXR1cmVzID0gKHNsaml0X3VpKUNQVUluZm9bM107CisKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgfHwgZGVmaW5lZChfX1NVTlBST19DKQorCisJLyogQVQmVCBzeW50YXguICovCisJX19hc21fXyAoCisJCSJtb3ZsICQweDEsICUlZWF4XG4iCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQorCQkvKiBPbiB4ODYtMzIsIHRoZXJlIGlzIG5vIHJlZCB6b25lLCBzbyB0aGlzCisJCSAgIHNob3VsZCB3b3JrIChubyBuZWVkIGZvciBhIGxvY2FsIHZhcmlhYmxlKS4gKi8KKwkJInB1c2ggJSVlYnhcbiIKKyNlbmRpZgorCQkiY3B1aWRcbiIKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCSJwb3AgJSVlYnhcbiIKKyNlbmRpZgorCQkibW92bCAlJWVkeCwgJTBcbiIKKwkJOiAiPWciIChmZWF0dXJlcykKKwkJOgorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKwkJOiAiJWVheCIsICIlZWN4IiwgIiVlZHgiCisjZWxzZQorCQk6ICIlcmF4IiwgIiVyYngiLCAiJXJjeCIsICIlcmR4IgorI2VuZGlmCisJKTsKKworI2Vsc2UgLyogX01TQ19WRVIgJiYgX01TQ19WRVIgPj0gMTQwMCAqLworCisJLyogSW50ZWwgc3ludGF4LiAqLworCV9fYXNtIHsKKwkJbW92IGVheCwgMQorCQljcHVpZAorCQltb3YgZmVhdHVyZXMsIGVkeAorCX0KKworI2VuZGlmIC8qIF9NU0NfVkVSICYmIF9NU0NfVkVSID49IDE0MDAgKi8KKworI2lmIChkZWZpbmVkIFNMSklUX0RFVEVDVF9TU0UyICYmIFNMSklUX0RFVEVDVF9TU0UyKQorCWNwdV9oYXNfc3NlMiA9IChmZWF0dXJlcyA+PiAyNikgJiAweDE7CisjZW5kaWYKKwljcHVfaGFzX2Ntb3YgPSAoZmVhdHVyZXMgPj4gMTUpICYgMHgxOworfQorCitzdGF0aWMgc2xqaXRfdWIgZ2V0X2p1bXBfY29kZShzbGppdF9zaSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU0xKSVRfRVFVQUw6CisJY2FzZSBTTEpJVF9EX0VRVUFMOgorCQlyZXR1cm4gMHg4NCAvKiBqZSAqLzsKKworCWNhc2UgU0xKSVRfTk9UX0VRVUFMOgorCWNhc2UgU0xKSVRfRF9OT1RfRVFVQUw6CisJCXJldHVybiAweDg1IC8qIGpuZSAqLzsKKworCWNhc2UgU0xKSVRfTEVTUzoKKwljYXNlIFNMSklUX0RfTEVTUzoKKwkJcmV0dXJuIDB4ODIgLyogamMgKi87CisKKwljYXNlIFNMSklUX0dSRUFURVJfRVFVQUw6CisJY2FzZSBTTEpJVF9EX0dSRUFURVJfRVFVQUw6CisJCXJldHVybiAweDgzIC8qIGphZSAqLzsKKworCWNhc2UgU0xKSVRfR1JFQVRFUjoKKwljYXNlIFNMSklUX0RfR1JFQVRFUjoKKwkJcmV0dXJuIDB4ODcgLyogam5iZSAqLzsKKworCWNhc2UgU0xKSVRfTEVTU19FUVVBTDoKKwljYXNlIFNMSklUX0RfTEVTU19FUVVBTDoKKwkJcmV0dXJuIDB4ODYgLyogamJlICovOworCisJY2FzZSBTTEpJVF9TSUdfTEVTUzoKKwkJcmV0dXJuIDB4OGMgLyogamwgKi87CisKKwljYXNlIFNMSklUX1NJR19HUkVBVEVSX0VRVUFMOgorCQlyZXR1cm4gMHg4ZCAvKiBqbmwgKi87CisKKwljYXNlIFNMSklUX1NJR19HUkVBVEVSOgorCQlyZXR1cm4gMHg4ZiAvKiBqbmxlICovOworCisJY2FzZSBTTEpJVF9TSUdfTEVTU19FUVVBTDoKKwkJcmV0dXJuIDB4OGUgLyogamxlICovOworCisJY2FzZSBTTEpJVF9PVkVSRkxPVzoKKwljYXNlIFNMSklUX01VTF9PVkVSRkxPVzoKKwkJcmV0dXJuIDB4ODAgLyogam8gKi87CisKKwljYXNlIFNMSklUX05PVF9PVkVSRkxPVzoKKwljYXNlIFNMSklUX01VTF9OT1RfT1ZFUkZMT1c6CisJCXJldHVybiAweDgxIC8qIGpubyAqLzsKKworCWNhc2UgU0xKSVRfRF9VTk9SREVSRUQ6CisJCXJldHVybiAweDhhIC8qIGpwICovOworCisJY2FzZSBTTEpJVF9EX09SREVSRUQ6CisJCXJldHVybiAweDhiIC8qIGpwbyAqLzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzbGppdF91YiogZ2VuZXJhdGVfZmFyX2p1bXBfY29kZShzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcCwgc2xqaXRfdWIgKmNvZGVfcHRyLCBzbGppdF9zaSB0eXBlKTsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKK3N0YXRpYyBzbGppdF91YiogZ2VuZXJhdGVfZml4ZWRfanVtcChzbGppdF91YiAqY29kZV9wdHIsIHNsaml0X3N3IGFkZHIsIHNsaml0X3NpIHR5cGUpOworI2VuZGlmCisKK3N0YXRpYyBzbGppdF91YiogZ2VuZXJhdGVfbmVhcl9qdW1wX2NvZGUoc3RydWN0IHNsaml0X2p1bXAgKmp1bXAsIHNsaml0X3ViICpjb2RlX3B0ciwgc2xqaXRfdWIgKmNvZGUsIHNsaml0X3NpIHR5cGUpCit7CisJc2xqaXRfc2kgc2hvcnRfanVtcDsKKwlzbGppdF91dyBsYWJlbF9hZGRyOworCisJaWYgKGp1bXAtPmZsYWdzICYgSlVNUF9MQUJFTCkKKwkJbGFiZWxfYWRkciA9IChzbGppdF91dykoY29kZSArIGp1bXAtPnUubGFiZWwtPnNpemUpOworCWVsc2UKKwkJbGFiZWxfYWRkciA9IGp1bXAtPnUudGFyZ2V0OworCXNob3J0X2p1bXAgPSAoc2xqaXRfc3cpKGxhYmVsX2FkZHIgLSAoanVtcC0+YWRkciArIDIpKSA+PSAtMTI4ICYmIChzbGppdF9zdykobGFiZWxfYWRkciAtIChqdW1wLT5hZGRyICsgMikpIDw9IDEyNzsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwlpZiAoKHNsaml0X3N3KShsYWJlbF9hZGRyIC0gKGp1bXAtPmFkZHIgKyAxKSkgPiBIQUxGV09SRF9NQVggfHwgKHNsaml0X3N3KShsYWJlbF9hZGRyIC0gKGp1bXAtPmFkZHIgKyAxKSkgPCBIQUxGV09SRF9NSU4pCisJCXJldHVybiBnZW5lcmF0ZV9mYXJfanVtcF9jb2RlKGp1bXAsIGNvZGVfcHRyLCB0eXBlKTsKKyNlbmRpZgorCisJaWYgKHR5cGUgPT0gU0xKSVRfSlVNUCkgeworCQlpZiAoc2hvcnRfanVtcCkKKwkJCSpjb2RlX3B0cisrID0gSk1QX2k4OworCQllbHNlCisJCQkqY29kZV9wdHIrKyA9IEpNUF9pMzI7CisJCWp1bXAtPmFkZHIrKzsKKwl9CisJZWxzZSBpZiAodHlwZSA+PSBTTEpJVF9GQVNUX0NBTEwpIHsKKwkJc2hvcnRfanVtcCA9IDA7CisJCSpjb2RlX3B0cisrID0gQ0FMTF9pMzI7CisJCWp1bXAtPmFkZHIrKzsKKwl9CisJZWxzZSBpZiAoc2hvcnRfanVtcCkgeworCQkqY29kZV9wdHIrKyA9IGdldF9qdW1wX2NvZGUodHlwZSkgLSAweDEwOworCQlqdW1wLT5hZGRyKys7CisJfQorCWVsc2UgeworCQkqY29kZV9wdHIrKyA9IEdST1VQXzBGOworCQkqY29kZV9wdHIrKyA9IGdldF9qdW1wX2NvZGUodHlwZSk7CisJCWp1bXAtPmFkZHIgKz0gMjsKKwl9CisKKwlpZiAoc2hvcnRfanVtcCkgeworCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9NQjsKKwkJY29kZV9wdHIgKz0gc2l6ZW9mKHNsaml0X3NiKTsKKwl9IGVsc2UgeworCQlqdW1wLT5mbGFncyB8PSBQQVRDSF9NVzsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCWNvZGVfcHRyICs9IHNpemVvZihzbGppdF9zdyk7CisjZWxzZQorCQljb2RlX3B0ciArPSBzaXplb2Yoc2xqaXRfc2kpOworI2VuZGlmCisJfQorCisJcmV0dXJuIGNvZGVfcHRyOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCogc2xqaXRfZ2VuZXJhdGVfY29kZShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyKQoreworCXN0cnVjdCBzbGppdF9tZW1vcnlfZnJhZ21lbnQgKmJ1ZjsKKwlzbGppdF91YiAqY29kZTsKKwlzbGppdF91YiAqY29kZV9wdHI7CisJc2xqaXRfdWIgKmJ1Zl9wdHI7CisJc2xqaXRfdWIgKmJ1Zl9lbmQ7CisJc2xqaXRfdWIgbGVuOworCisJc3RydWN0IHNsaml0X2xhYmVsICpsYWJlbDsKKwlzdHJ1Y3Qgc2xqaXRfanVtcCAqanVtcDsKKwlzdHJ1Y3Qgc2xqaXRfY29uc3QgKmNvbnN0XzsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9nZW5lcmF0ZV9jb2RlKGNvbXBpbGVyKSk7CisJcmV2ZXJzZV9idWYoY29tcGlsZXIpOworCisJLyogU2Vjb25kIGNvZGUgZ2VuZXJhdGlvbiBwYXNzLiAqLworCWNvZGUgPSAoc2xqaXRfdWIqKVNMSklUX01BTExPQ19FWEVDKGNvbXBpbGVyLT5zaXplKTsKKwlQVFJfRkFJTF9XSVRIX0VYRUNfSUYoY29kZSk7CisJYnVmID0gY29tcGlsZXItPmJ1ZjsKKworCWNvZGVfcHRyID0gY29kZTsKKwlsYWJlbCA9IGNvbXBpbGVyLT5sYWJlbHM7CisJanVtcCA9IGNvbXBpbGVyLT5qdW1wczsKKwljb25zdF8gPSBjb21waWxlci0+Y29uc3RzOworCWRvIHsKKwkJYnVmX3B0ciA9IGJ1Zi0+bWVtb3J5OworCQlidWZfZW5kID0gYnVmX3B0ciArIGJ1Zi0+dXNlZF9zaXplOworCQlkbyB7CisJCQlsZW4gPSAqYnVmX3B0cisrOworCQkJaWYgKGxlbiA+IDApIHsKKwkJCQkvKiBUaGUgY29kZSBpcyBhbHJlYWR5IGdlbmVyYXRlZC4gKi8KKwkJCQlTTEpJVF9NRU1NT1ZFKGNvZGVfcHRyLCBidWZfcHRyLCBsZW4pOworCQkJCWNvZGVfcHRyICs9IGxlbjsKKwkJCQlidWZfcHRyICs9IGxlbjsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWlmICgqYnVmX3B0ciA+PSA0KSB7CisJCQkJCWp1bXAtPmFkZHIgPSAoc2xqaXRfdXcpY29kZV9wdHI7CisJCQkJCWlmICghKGp1bXAtPmZsYWdzICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKSkKKwkJCQkJCWNvZGVfcHRyID0gZ2VuZXJhdGVfbmVhcl9qdW1wX2NvZGUoanVtcCwgY29kZV9wdHIsIGNvZGUsICpidWZfcHRyIC0gNCk7CisJCQkJCWVsc2UKKwkJCQkJCWNvZGVfcHRyID0gZ2VuZXJhdGVfZmFyX2p1bXBfY29kZShqdW1wLCBjb2RlX3B0ciwgKmJ1Zl9wdHIgLSA0KTsKKwkJCQkJanVtcCA9IGp1bXAtPm5leHQ7CisJCQkJfQorCQkJCWVsc2UgaWYgKCpidWZfcHRyID09IDApIHsKKwkJCQkJbGFiZWwtPmFkZHIgPSAoc2xqaXRfdXcpY29kZV9wdHI7CisJCQkJCWxhYmVsLT5zaXplID0gY29kZV9wdHIgLSBjb2RlOworCQkJCQlsYWJlbCA9IGxhYmVsLT5uZXh0OworCQkJCX0KKwkJCQllbHNlIGlmICgqYnVmX3B0ciA9PSAxKSB7CisJCQkJCWNvbnN0Xy0+YWRkciA9ICgoc2xqaXRfdXcpY29kZV9wdHIpIC0gc2l6ZW9mKHNsaml0X3N3KTsKKwkJCQkJY29uc3RfID0gY29uc3RfLT5uZXh0OworCQkJCX0KKwkJCQllbHNlIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCQkJCSpjb2RlX3B0cisrID0gKCpidWZfcHRyID09IDIpID8gQ0FMTF9pMzIgOiBKTVBfaTMyOworCQkJCQlidWZfcHRyKys7CisJCQkJCSooc2xqaXRfc3cqKWNvZGVfcHRyID0gKihzbGppdF9zdyopYnVmX3B0ciAtICgoc2xqaXRfc3cpY29kZV9wdHIgKyBzaXplb2Yoc2xqaXRfc3cpKTsKKwkJCQkJY29kZV9wdHIgKz0gc2l6ZW9mKHNsaml0X3N3KTsKKwkJCQkJYnVmX3B0ciArPSBzaXplb2Yoc2xqaXRfc3cpIC0gMTsKKyNlbHNlCisJCQkJCWNvZGVfcHRyID0gZ2VuZXJhdGVfZml4ZWRfanVtcChjb2RlX3B0ciwgKihzbGppdF9zdyopKGJ1Zl9wdHIgKyAxKSwgKmJ1Zl9wdHIpOworCQkJCQlidWZfcHRyICs9IHNpemVvZihzbGppdF9zdyk7CisjZW5kaWYKKwkJCQl9CisJCQkJYnVmX3B0cisrOworCQkJfQorCQl9IHdoaWxlIChidWZfcHRyIDwgYnVmX2VuZCk7CisJCVNMSklUX0FTU0VSVChidWZfcHRyID09IGJ1Zl9lbmQpOworCQlidWYgPSBidWYtPm5leHQ7CisJfSB3aGlsZSAoYnVmKTsKKworCVNMSklUX0FTU0VSVCghbGFiZWwpOworCVNMSklUX0FTU0VSVCghanVtcCk7CisJU0xKSVRfQVNTRVJUKCFjb25zdF8pOworCisJanVtcCA9IGNvbXBpbGVyLT5qdW1wczsKKwl3aGlsZSAoanVtcCkgeworCQlpZiAoanVtcC0+ZmxhZ3MgJiBQQVRDSF9NQikgeworCQkJU0xKSVRfQVNTRVJUKChzbGppdF9zdykoanVtcC0+dS5sYWJlbC0+YWRkciAtIChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X3NiKSkpID49IC0xMjggJiYgKHNsaml0X3N3KShqdW1wLT51LmxhYmVsLT5hZGRyIC0gKGp1bXAtPmFkZHIgKyBzaXplb2Yoc2xqaXRfc2IpKSkgPD0gMTI3KTsKKwkJCSooc2xqaXRfdWIqKWp1bXAtPmFkZHIgPSAoc2xqaXRfdWIpKGp1bXAtPnUubGFiZWwtPmFkZHIgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zYikpKTsKKwkJfSBlbHNlIGlmIChqdW1wLT5mbGFncyAmIFBBVENIX01XKSB7CisJCQlpZiAoanVtcC0+ZmxhZ3MgJiBKVU1QX0xBQkVMKSB7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQorCQkJCSooc2xqaXRfc3cqKWp1bXAtPmFkZHIgPSAoc2xqaXRfc3cpKGp1bXAtPnUubGFiZWwtPmFkZHIgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zdykpKTsKKyNlbHNlCisJCQkJU0xKSVRfQVNTRVJUKChzbGppdF9zdykoanVtcC0+dS5sYWJlbC0+YWRkciAtIChqdW1wLT5hZGRyICsgc2l6ZW9mKHNsaml0X3NpKSkpID49IEhBTEZXT1JEX01JTiAmJiAoc2xqaXRfc3cpKGp1bXAtPnUubGFiZWwtPmFkZHIgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zaSkpKSA8PSBIQUxGV09SRF9NQVgpOworCQkJCSooc2xqaXRfc2kqKWp1bXAtPmFkZHIgPSAoc2xqaXRfc2kpKGp1bXAtPnUubGFiZWwtPmFkZHIgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zaSkpKTsKKyNlbmRpZgorCQkJfQorCQkJZWxzZSB7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQorCQkJCSooc2xqaXRfc3cqKWp1bXAtPmFkZHIgPSAoc2xqaXRfc3cpKGp1bXAtPnUudGFyZ2V0IC0gKGp1bXAtPmFkZHIgKyBzaXplb2Yoc2xqaXRfc3cpKSk7CisjZWxzZQorCQkJCVNMSklUX0FTU0VSVCgoc2xqaXRfc3cpKGp1bXAtPnUudGFyZ2V0IC0gKGp1bXAtPmFkZHIgKyBzaXplb2Yoc2xqaXRfc2kpKSkgPj0gSEFMRldPUkRfTUlOICYmIChzbGppdF9zdykoanVtcC0+dS50YXJnZXQgLSAoanVtcC0+YWRkciArIHNpemVvZihzbGppdF9zaSkpKSA8PSBIQUxGV09SRF9NQVgpOworCQkJCSooc2xqaXRfc2kqKWp1bXAtPmFkZHIgPSAoc2xqaXRfc2kpKGp1bXAtPnUudGFyZ2V0IC0gKGp1bXAtPmFkZHIgKyBzaXplb2Yoc2xqaXRfc2kpKSk7CisjZW5kaWYKKwkJCX0KKwkJfQorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJZWxzZSBpZiAoanVtcC0+ZmxhZ3MgJiBQQVRDSF9NRCkKKwkJCSooc2xqaXRfc3cqKWp1bXAtPmFkZHIgPSBqdW1wLT51LmxhYmVsLT5hZGRyOworI2VuZGlmCisKKwkJanVtcCA9IGp1bXAtPm5leHQ7CisJfQorCisJLyogTWF5YmUgd2Ugd2FzdGUgc29tZSBzcGFjZSBiZWNhdXNlIG9mIHNob3J0IGp1bXBzLiAqLworCVNMSklUX0FTU0VSVChjb2RlX3B0ciA8PSBjb2RlICsgY29tcGlsZXItPnNpemUpOworCWNvbXBpbGVyLT5lcnJvciA9IFNMSklUX0VSUl9DT01QSUxFRDsKKwljb21waWxlci0+ZXhlY3V0YWJsZV9zaXplID0gY29kZV9wdHIgLSBjb2RlOworCXJldHVybiAodm9pZCopY29kZTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgT3BlcmF0b3JzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9jdW1fYmluYXJ5KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfdWIgb3Bfcm0sIHNsaml0X3ViIG9wX21yLCBzbGppdF91YiBvcF9pbW0sIHNsaml0X3ViIG9wX2VheF9pbW0sCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KTsKKworc3RhdGljIHNsaml0X3NpIGVtaXRfbm9uX2N1bV9iaW5hcnkoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF91YiBvcF9ybSwgc2xqaXRfdWIgb3BfbXIsIHNsaml0X3ViIG9wX2ltbSwgc2xqaXRfdWIgb3BfZWF4X2ltbSwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpOworCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9tb3Yoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KTsKKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X3NhdmVfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlcikKK3sKKwlzbGppdF91YiAqaW5zdDsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKwlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNSk7CisJRkFJTF9JRighaW5zdCk7CisJSU5DX1NJWkUoNSk7CisjZWxzZQorCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA2KTsKKwlGQUlMX0lGKCFpbnN0KTsKKwlJTkNfU0laRSg2KTsKKwkqaW5zdCsrID0gUkVYX1c7CisjZW5kaWYKKwkqaW5zdCsrID0gTEVBX3JfbTsgLyogbGVhIGVzcC9yc3AsIFtlc3AvcnNwICsgc2l6ZW9mKHNsaml0X3N3KV0gKi8KKwkqaW5zdCsrID0gMHg2NDsKKwkqaW5zdCsrID0gMHgyNDsKKwkqaW5zdCsrID0gKHNsaml0X3ViKXNpemVvZihzbGppdF9zdyk7CisJKmluc3QrKyA9IFBVU0hGOworCWNvbXBpbGVyLT5mbGFnc19zYXZlZCA9IDE7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgZW1pdF9yZXN0b3JlX2ZsYWdzKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGtlZXBfZmxhZ3MpCit7CisJc2xqaXRfdWIgKmluc3Q7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDUpOworCUZBSUxfSUYoIWluc3QpOworCUlOQ19TSVpFKDUpOworCSppbnN0KysgPSBQT1BGOworI2Vsc2UKKwlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNik7CisJRkFJTF9JRighaW5zdCk7CisJSU5DX1NJWkUoNik7CisJKmluc3QrKyA9IFBPUEY7CisJKmluc3QrKyA9IFJFWF9XOworI2VuZGlmCisJKmluc3QrKyA9IExFQV9yX207IC8qIGxlYSBlc3AvcnNwLCBbZXNwL3JzcCAtIHNpemVvZihzbGppdF9zdyldICovCisJKmluc3QrKyA9IDB4NjQ7CisJKmluc3QrKyA9IDB4MjQ7CisJKmluc3QrKyA9IChzbGppdF91YiktKHNsaml0X3NiKXNpemVvZihzbGppdF9zdyk7CisJY29tcGlsZXItPmZsYWdzX3NhdmVkID0ga2VlcF9mbGFnczsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPG1hbGxvYy5oPgorCitzdGF0aWMgdm9pZCBTTEpJVF9DQUxMIHNsaml0X2dyb3dfc3RhY2soc2xqaXRfc3cgbG9jYWxfc2l6ZSkKK3sKKwkvKiBXb3JrYXJvdW5kIGZvciBjYWxsaW5nIHRoZSBpbnRlcm5hbCBfY2hrc3RrKCkgZnVuY3Rpb24gb24gV2luZG93cy4KKwlUaGlzIGZ1bmN0aW9uIHRvdWNoZXMgYWxsIDRrIHBhZ2VzIGJlbG9uZ3MgdG8gdGhlIHJlcXVlc3RlZCBzdGFjayBzcGFjZSwKKwl3aGljaCBzaXplIGlzIHBhc3NlZCBpbiBsb2NhbF9zaXplLiBUaGlzIGlzIG5lY2Vzc2FyeSBvbiBXaW5kb3dzIHdoZXJlCisJdGhlIHN0YWNrIGNhbiBvbmx5IGdyb3cgaW4gNGsgc3RlcHMuIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24ganVzdCBidXJuCisJQ1BVIGN5Y2xlcyBpZiB0aGUgc3RhY2sgaXMgbGFyZ2UgZW5vdWdoLiBIb3dldmVyLCB5b3UgZG9uJ3Qga25vdyBpdCBpbgorCWFkdmFuY2UsIHNvIGl0IG11c3QgYWx3YXlzIGJlIGNhbGxlZC4gSSB0aGluayB0aGlzIGlzIGEgYmFkIGRlc2lnbiBpbgorCWdlbmVyYWwgZXZlbiBpZiBpdCBoYXMgc29tZSByZWFzb25zLiAqLworCSoodm9sYXRpbGUgc2xqaXRfc2kqKWFsbG9jYShsb2NhbF9zaXplKSA9IDA7Cit9CisKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQorI2luY2x1ZGUgInNsaml0TmF0aXZlWDg2XzMyLmMiCisjZWxzZQorI2luY2x1ZGUgInNsaml0TmF0aXZlWDg2XzY0LmMiCisjZW5kaWYKKworc3RhdGljIHNsaml0X3NpIGVtaXRfbW92KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF91YiogaW5zdDsKKworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKSB7CisJCS8qIE5vIGRlc3RpbmF0aW9uLCBkb2Vzbid0IG5lZWQgdG8gc2V0dXAgZmxhZ3MuICovCisJCWlmIChzcmMgJiBTTEpJVF9NRU0pIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gTU9WX3Jfcm07CisJCX0KKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCWlmIChGQVNUX0lTX1JFRyhzcmMpKSB7CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgc3JjLCAwLCBkc3QsIGRzdHcpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJKmluc3QgPSBNT1Zfcm1fcjsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCWlmIChzcmMgJiBTTEpJVF9JTU0pIHsKKwkJaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCQlyZXR1cm4gZW1pdF9kb19pbW0oY29tcGlsZXIsIE1PVl9yX2kzMiArIHJlZ19tYXBbZHN0XSwgc3Jjdyk7CisjZWxzZQorCQkJaWYgKCFjb21waWxlci0+bW9kZTMyKSB7CisJCQkJaWYgKE5PVF9IQUxGV09SRChzcmN3KSkKKwkJCQkJcmV0dXJuIGVtaXRfbG9hZF9pbW02NChjb21waWxlciwgZHN0LCBzcmN3KTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlyZXR1cm4gZW1pdF9kb19pbW0zMihjb21waWxlciwgKHJlZ19tYXBbZHN0XSA+PSA4KSA/IFJFWF9CIDogMCwgTU9WX3JfaTMyICsgcmVnX2xtYXBbZHN0XSwgc3Jjdyk7CisjZW5kaWYKKwkJfQorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJaWYgKCFjb21waWxlci0+bW9kZTMyICYmIE5PVF9IQUxGV09SRChzcmN3KSkgeworCQkJRkFJTF9JRihlbWl0X2xvYWRfaW1tNjQoY29tcGlsZXIsIFRNUF9SRUcyLCBzcmN3KSk7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFRNUF9SRUcyLCAwLCBkc3QsIGRzdHcpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IE1PVl9ybV9yOworCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJCX0KKyNlbmRpZgorCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFNMSklUX0lNTSwgc3JjdywgZHN0LCBkc3R3KTsKKwkJRkFJTF9JRighaW5zdCk7CisJCSppbnN0ID0gTU9WX3JtX2kzMjsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCWlmIChGQVNUX0lTX1JFRyhkc3QpKSB7CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0LCAwLCBzcmMsIHNyY3cpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJKmluc3QgPSBNT1Zfcl9ybTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCisJLyogTWVtb3J5IHRvIG1lbW9yeSBtb3ZlLiBSZXF1aXJlcyB0d28gaW5zdHJ1Y3Rpb24uICovCisJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKwlGQUlMX0lGKCFpbnN0KTsKKwkqaW5zdCA9IE1PVl9yX3JtOworCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgVE1QX1JFRzEsIDAsIGRzdCwgZHN0dyk7CisJRkFJTF9JRighaW5zdCk7CisJKmluc3QgPSBNT1Zfcm1fcjsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworI2RlZmluZSBFTUlUX01PVihjb21waWxlciwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpIFwKKwlGQUlMX0lGKGVtaXRfbW92KGNvbXBpbGVyLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3ApCit7CisJc2xqaXRfdWIgKmluc3Q7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQorCXNsaml0X3NpIHNpemU7CisjZW5kaWYKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9vcDAoY29tcGlsZXIsIG9wKSk7CisKKwlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7CisJY2FzZSBTTEpJVF9CUkVBS1BPSU5UOgorCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CisJCUZBSUxfSUYoIWluc3QpOworCQlJTkNfU0laRSgxKTsKKwkJKmluc3QgPSBJTlQzOworCQlicmVhazsKKwljYXNlIFNMSklUX05PUDoKKwkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJSU5DX1NJWkUoMSk7CisJCSppbnN0ID0gTk9QOworCQlicmVhazsKKwljYXNlIFNMSklUX0xVTVVMOgorCWNhc2UgU0xKSVRfTFNNVUw6CisJY2FzZSBTTEpJVF9VRElWTU9EOgorCWNhc2UgU0xKSVRfU0RJVk1PRDoKKwljYXNlIFNMSklUX1VESVZJOgorCWNhc2UgU0xKSVRfU0RJVkk6CisJCWNvbXBpbGVyLT5mbGFnc19zYXZlZCA9IDA7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQorI2lmZGVmIF9XSU42NAorCQlTTEpJVF9DT01QSUxFX0FTU0VSVCgKKwkJCXJlZ19tYXBbU0xKSVRfUjBdID09IDAKKwkJCSYmIHJlZ19tYXBbU0xKSVRfUjFdID09IDIKKwkJCSYmIHJlZ19tYXBbVE1QX1JFRzFdID4gNywKKwkJCWludmFsaWRfcmVnaXN0ZXJfYXNzaWdubWVudF9mb3JfZGl2X211bCk7CisjZWxzZQorCQlTTEpJVF9DT01QSUxFX0FTU0VSVCgKKwkJCXJlZ19tYXBbU0xKSVRfUjBdID09IDAKKwkJCSYmIHJlZ19tYXBbU0xKSVRfUjFdIDwgNworCQkJJiYgcmVnX21hcFtUTVBfUkVHMV0gPT0gMiwKKwkJCWludmFsaWRfcmVnaXN0ZXJfYXNzaWdubWVudF9mb3JfZGl2X211bCk7CisjZW5kaWYKKwkJY29tcGlsZXItPm1vZGUzMiA9IG9wICYgU0xKSVRfSU5UX09QOworI2VuZGlmCisJCVNMSklUX0NPTVBJTEVfQVNTRVJUKChTTEpJVF9VRElWTU9EICYgMHgyKSA9PSAwICYmIFNMSklUX1VESVZJIC0gMHgyID09IFNMSklUX1VESVZNT0QsIGJhZF9kaXZfb3Bjb2RlX2Fzc2lnbm1lbnRzKTsKKworCQlvcCA9IEdFVF9PUENPREUob3ApOworCQlpZiAoKG9wIHwgMHgyKSA9PSBTTEpJVF9VRElWSSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikgfHwgZGVmaW5lZChfV0lONjQpCisJCQlFTUlUX01PVihjb21waWxlciwgVE1QX1JFRzEsIDAsIFNMSklUX1IxLCAwKTsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgU0xKSVRfUjEsIDAsIFNMSklUX1IxLCAwKTsKKyNlbHNlCisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFRNUF9SRUcxLCAwLCBUTVBfUkVHMSwgMCk7CisjZW5kaWYKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBYT1Jfcl9ybTsKKwkJfQorCisJCWlmICgob3AgfCAweDIpID09IFNMSklUX1NESVZJKSB7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKSB8fCBkZWZpbmVkKF9XSU42NCkKKwkJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgU0xKSVRfUjEsIDApOworI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCUlOQ19TSVpFKDEpOworCQkJKmluc3QgPSBDRFE7CisjZWxzZQorCQkJaWYgKGNvbXBpbGVyLT5tb2RlMzIpIHsKKwkJCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CisJCQkJRkFJTF9JRighaW5zdCk7CisJCQkJSU5DX1NJWkUoMSk7CisJCQkJKmluc3QgPSBDRFE7CisJCQl9IGVsc2UgeworCQkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAyKTsKKwkJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCQlJTkNfU0laRSgyKTsKKwkJCQkqaW5zdCsrID0gUkVYX1c7CisJCQkJKmluc3QgPSBDRFE7CisJCQl9CisjZW5kaWYKKwkJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQorCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMik7CisJCUZBSUxfSUYoIWluc3QpOworCQlJTkNfU0laRSgyKTsKKwkJKmluc3QrKyA9IEdST1VQX0Y3OworCQkqaW5zdCA9IE1PRF9SRUcgfCAoKG9wID49IFNMSklUX1VESVZNT0QpID8gcmVnX21hcFtUTVBfUkVHMV0gOiByZWdfbWFwW1NMSklUX1IxXSk7CisjZWxzZQorI2lmZGVmIF9XSU42NAorCQlzaXplID0gKCFjb21waWxlci0+bW9kZTMyIHx8IG9wID49IFNMSklUX1VESVZNT0QpID8gMyA6IDI7CisjZWxzZQorCQlzaXplID0gKCFjb21waWxlci0+bW9kZTMyKSA/IDMgOiAyOworI2VuZGlmCisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyBzaXplKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCUlOQ19TSVpFKHNpemUpOworI2lmZGVmIF9XSU42NAorCQlpZiAoIWNvbXBpbGVyLT5tb2RlMzIpCisJCQkqaW5zdCsrID0gUkVYX1cgfCAoKG9wID49IFNMSklUX1VESVZNT0QpID8gUkVYX0IgOiAwKTsKKwkJZWxzZSBpZiAob3AgPj0gU0xKSVRfVURJVk1PRCkKKwkJCSppbnN0KysgPSBSRVhfQjsKKwkJKmluc3QrKyA9IEdST1VQX0Y3OworCQkqaW5zdCA9IE1PRF9SRUcgfCAoKG9wID49IFNMSklUX1VESVZNT0QpID8gcmVnX2xtYXBbVE1QX1JFRzFdIDogcmVnX2xtYXBbU0xKSVRfUjFdKTsKKyNlbHNlCisJCWlmICghY29tcGlsZXItPm1vZGUzMikKKwkJCSppbnN0KysgPSBSRVhfVzsKKwkJKmluc3QrKyA9IEdST1VQX0Y3OworCQkqaW5zdCA9IE1PRF9SRUcgfCByZWdfbWFwW1NMSklUX1IxXTsKKyNlbmRpZgorI2VuZGlmCisJCXN3aXRjaCAob3ApIHsKKwkJY2FzZSBTTEpJVF9MVU1VTDoKKwkJCSppbnN0IHw9IE1VTDsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX0xTTVVMOgorCQkJKmluc3QgfD0gSU1VTDsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX1VESVZNT0Q6CisJCWNhc2UgU0xKSVRfVURJVkk6CisJCQkqaW5zdCB8PSBESVY7CisJCQlicmVhazsKKwkJY2FzZSBTTEpJVF9TRElWTU9EOgorCQljYXNlIFNMSklUX1NESVZJOgorCQkJKmluc3QgfD0gSURJVjsKKwkJCWJyZWFrOworCQl9CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KSAmJiAhZGVmaW5lZChfV0lONjQpCisJCWlmIChvcCA8PSBTTEpJVF9TRElWTU9EKQorCQkJRU1JVF9NT1YoY29tcGlsZXIsIFNMSklUX1IxLCAwLCBUTVBfUkVHMSwgMCk7CisjZWxzZQorCQlpZiAob3AgPj0gU0xKSVRfVURJVkkpCisJCQlFTUlUX01PVihjb21waWxlciwgU0xKSVRfUjEsIDAsIFRNUF9SRUcxLCAwKTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworI2RlZmluZSBFTkNPREVfUFJFRklYKHByZWZpeCkgXAorCWRvIHsgXAorCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7IFwKKwkJRkFJTF9JRighaW5zdCk7IFwKKwkJSU5DX1NJWkUoMSk7IFwKKwkJKmluc3QgPSAocHJlZml4KTsgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBzbGppdF9zaSBlbWl0X21vdl9ieXRlKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNpZ24sCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF91YiogaW5zdDsKKwlzbGppdF9zaSBkc3RfcjsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJc2xqaXRfc2kgd29ya19yOworI2VuZGlmCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJY29tcGlsZXItPm1vZGUzMiA9IDA7CisjZW5kaWYKKworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEICYmICEoc3JjICYgU0xKSVRfTUVNKSkKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7IC8qIEVtcHR5IGluc3RydWN0aW9uLiAqLworCisJaWYgKHNyYyAmIFNMSklUX0lNTSkgeworCQlpZiAoRkFTVF9JU19SRUcoZHN0KSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKwkJCXJldHVybiBlbWl0X2RvX2ltbShjb21waWxlciwgTU9WX3JfaTMyICsgcmVnX21hcFtkc3RdLCBzcmN3KTsKKyNlbHNlCisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFNMSklUX0lNTSwgc3JjdywgZHN0LCAwKTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBNT1Zfcm1faTMyOworCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisjZW5kaWYKKwkJfQorCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEgfCBFWDg2X0JZVEVfQVJHIHwgRVg4Nl9OT19SRVhXLCBTTEpJVF9JTU0sIHNyY3csIGRzdCwgZHN0dyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCA9IE1PVl9ybThfaTg7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcxOworCisJaWYgKChkc3QgJiBTTEpJVF9NRU0pICYmIEZBU1RfSVNfUkVHKHNyYykpIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCWlmIChyZWdfbWFwW3NyY10gPj0gNCkgeworCQkJU0xKSVRfQVNTRVJUKGRzdF9yID09IFRNUF9SRUcxKTsKKwkJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjLCAwKTsKKwkJfSBlbHNlCisJCQlkc3RfciA9IHNyYzsKKyNlbHNlCisJCWRzdF9yID0gc3JjOworI2VuZGlmCisJfQorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKwllbHNlIGlmIChGQVNUX0lTX1JFRyhzcmMpICYmIHJlZ19tYXBbc3JjXSA+PSA0KSB7CisJCS8qIHNyYywgZHN0IGFyZSByZWdpc3RlcnMuICovCisJCVNMSklUX0FTU0VSVChTTE9XX0lTX1JFRyhkc3QpKTsKKwkJaWYgKHJlZ19tYXBbZHN0XSA8IDQpIHsKKwkJCWlmIChkc3QgIT0gc3JjKQorCQkJCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3QsIDAsIHNyYywgMCk7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDIsIGRzdCwgMCwgZHN0LCAwKTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QrKyA9IEdST1VQXzBGOworCQkJKmluc3QgPSBzaWduID8gTU9WU1hfcl9ybTggOiBNT1ZaWF9yX3JtODsKKwkJfQorCQllbHNlIHsKKwkJCWlmIChkc3QgIT0gc3JjKQorCQkJCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3QsIDAsIHNyYywgMCk7CisJCQlpZiAoc2lnbikgeworCQkJCS8qIHNobCByZWcsIDI0ICovCisJCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxIHwgRVg4Nl9TSElGVF9JTlMsIFNMSklUX0lNTSwgMjQsIGRzdCwgMCk7CisJCQkJRkFJTF9JRighaW5zdCk7CisJCQkJKmluc3QgfD0gU0hMOworCQkJCS8qIHNhciByZWcsIDI0ICovCisJCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxIHwgRVg4Nl9TSElGVF9JTlMsIFNMSklUX0lNTSwgMjQsIGRzdCwgMCk7CisJCQkJRkFJTF9JRighaW5zdCk7CisJCQkJKmluc3QgfD0gU0FSOworCQkJfQorCQkJZWxzZSB7CisJCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxIHwgRVg4Nl9CSU5fSU5TLCBTTEpJVF9JTU0sIDB4ZmYsIGRzdCwgMCk7CisJCQkJRkFJTF9JRighaW5zdCk7CisJCQkJKihpbnN0ICsgMSkgfD0gQU5EOworCQkJfQorCQl9CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKyNlbmRpZgorCWVsc2UgeworCQkvKiBzcmMgY2FuIGJlIG1lbW9yeSBhZGRyIG9yIHJlZ19tYXBbc3JjXSA8IDQgb24geDg2XzMyIGFyY2hpdGVjdHVyZXMuICovCisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMiwgZHN0X3IsIDAsIHNyYywgc3Jjdyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCsrID0gR1JPVVBfMEY7CisJCSppbnN0ID0gc2lnbiA/IE1PVlNYX3Jfcm04IDogTU9WWlhfcl9ybTg7CisJfQorCisJaWYgKGRzdCAmIFNMSklUX01FTSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKwkJaWYgKGRzdF9yID09IFRNUF9SRUcxKSB7CisJCQkvKiBGaW5kIGEgbm9uLXVzZWQgcmVnaXN0ZXIsIHdob3NlIHJlZ19tYXBbc3JjXSA8IDQuICovCisJCQlpZiAoKGRzdCAmIFJFR19NQVNLKSA9PSBTTEpJVF9SMCkgeworCQkJCWlmICgoZHN0ICYgT0ZGU19SRUdfTUFTSykgPT0gVE9fT0ZGU19SRUcoU0xKSVRfUjEpKQorCQkJCQl3b3JrX3IgPSBTTEpJVF9SMjsKKwkJCQllbHNlCisJCQkJCXdvcmtfciA9IFNMSklUX1IxOworCQkJfQorCQkJZWxzZSB7CisJCQkJaWYgKChkc3QgJiBPRkZTX1JFR19NQVNLKSAhPSBUT19PRkZTX1JFRyhTTEpJVF9SMCkpCisJCQkJCXdvcmtfciA9IFNMSklUX1IwOworCQkJCWVsc2UgaWYgKChkc3QgJiBSRUdfTUFTSykgPT0gU0xKSVRfUjEpCisJCQkJCXdvcmtfciA9IFNMSklUX1IyOworCQkJCWVsc2UKKwkJCQkJd29ya19yID0gU0xKSVRfUjE7CisJCQl9CisKKwkJCWlmICh3b3JrX3IgPT0gU0xKSVRfUjApIHsKKwkJCQlFTkNPREVfUFJFRklYKFhDSEdfRUFYX3IgKyByZWdfbWFwW1RNUF9SRUcxXSk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIHdvcmtfciwgMCwgZHN0X3IsIDApOworCQkJCUZBSUxfSUYoIWluc3QpOworCQkJCSppbnN0ID0gWENIR19yX3JtOworCQkJfQorCisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIHdvcmtfciwgMCwgZHN0LCBkc3R3KTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBNT1Zfcm04X3I4OworCisJCQlpZiAod29ya19yID09IFNMSklUX1IwKSB7CisJCQkJRU5DT0RFX1BSRUZJWChYQ0hHX0VBWF9yICsgcmVnX21hcFtUTVBfUkVHMV0pOworCQkJfQorCQkJZWxzZSB7CisJCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCB3b3JrX3IsIDAsIGRzdF9yLCAwKTsKKwkJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCQkqaW5zdCA9IFhDSEdfcl9ybTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0X3IsIDAsIGRzdCwgZHN0dyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gTU9WX3JtOF9yODsKKwkJfQorI2Vsc2UKKwkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxIHwgRVg4Nl9SRVggfCBFWDg2X05PX1JFWFcsIGRzdF9yLCAwLCBkc3QsIGRzdHcpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJKmluc3QgPSBNT1Zfcm04X3I4OworI2VuZGlmCisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBzbGppdF9zaSBlbWl0X21vdl9oYWxmKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIHNpZ24sCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF91YiogaW5zdDsKKwlzbGppdF9zaSBkc3RfcjsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwljb21waWxlci0+bW9kZTMyID0gMDsKKyNlbmRpZgorCisJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQgJiYgIShzcmMgJiBTTEpJVF9NRU0pKQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsgLyogRW1wdHkgaW5zdHJ1Y3Rpb24uICovCisKKwlpZiAoc3JjICYgU0xKSVRfSU1NKSB7CisJCWlmIChGQVNUX0lTX1JFRyhkc3QpKSB7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQorCQkJcmV0dXJuIGVtaXRfZG9faW1tKGNvbXBpbGVyLCBNT1Zfcl9pMzIgKyByZWdfbWFwW2RzdF0sIHNyY3cpOworI2Vsc2UKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgU0xKSVRfSU1NLCBzcmN3LCBkc3QsIDApOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IE1PVl9ybV9pMzI7CisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKyNlbmRpZgorCQl9CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSB8IEVYODZfSEFMRl9BUkcgfCBFWDg2X05PX1JFWFcgfCBFWDg2X1BSRUZfNjYsIFNMSklUX0lNTSwgc3JjdywgZHN0LCBkc3R3KTsKKwkJRkFJTF9JRighaW5zdCk7CisJCSppbnN0ID0gTU9WX3JtX2kzMjsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCisJZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX1JFRzE7CisKKwlpZiAoKGRzdCAmIFNMSklUX01FTSkgJiYgRkFTVF9JU19SRUcoc3JjKSkKKwkJZHN0X3IgPSBzcmM7CisJZWxzZSB7CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMiwgZHN0X3IsIDAsIHNyYywgc3Jjdyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCsrID0gR1JPVVBfMEY7CisJCSppbnN0ID0gc2lnbiA/IE1PVlNYX3Jfcm0xNiA6IE1PVlpYX3Jfcm0xNjsKKwl9CisKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKSB7CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSB8IEVYODZfTk9fUkVYVyB8IEVYODZfUFJFRl82NiwgZHN0X3IsIDAsIGRzdCwgZHN0dyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCA9IE1PVl9ybV9yOworCX0KKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgc2xqaXRfc2kgZW1pdF91bmFyeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91YiBvcGNvZGUsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF91YiogaW5zdDsKKworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKSB7CisJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKwkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCAwLCAwLCBUTVBfUkVHMSwgMCk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCsrID0gR1JPVVBfRjc7CisJCSppbnN0IHw9IG9wY29kZTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCWlmIChkc3QgPT0gc3JjICYmIGRzdHcgPT0gc3JjdykgeworCQkvKiBTYW1lIGlucHV0IGFuZCBvdXRwdXQgKi8KKwkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCAwLCAwLCBkc3QsIGRzdHcpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJKmluc3QrKyA9IEdST1VQX0Y3OworCQkqaW5zdCB8PSBvcGNvZGU7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKwlpZiAoRkFTVF9JU19SRUcoZHN0KSkgeworCQlFTUlUX01PVihjb21waWxlciwgZHN0LCAwLCBzcmMsIHNyY3cpOworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIDAsIDAsIGRzdCwgZHN0dyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCsrID0gR1JPVVBfRjc7CisJCSppbnN0IHw9IG9wY29kZTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKwlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIDAsIDAsIFRNUF9SRUcxLCAwKTsKKwlGQUlMX0lGKCFpbnN0KTsKKwkqaW5zdCsrID0gR1JPVVBfRjc7CisJKmluc3QgfD0gb3Bjb2RlOworCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIHNsaml0X3NpIGVtaXRfbm90X3dpdGhfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXNsaml0X3ViKiBpbnN0OworCisJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQpIHsKKwkJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIDAsIDAsIFRNUF9SRUcxLCAwKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCSppbnN0KysgPSBHUk9VUF9GNzsKKwkJKmluc3QgfD0gTk9UX3JtOworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFRNUF9SRUcxLCAwLCBUTVBfUkVHMSwgMCk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCA9IE9SX3Jfcm07CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKwlpZiAoRkFTVF9JU19SRUcoZHN0KSkgeworCQlFTUlUX01PVihjb21waWxlciwgZHN0LCAwLCBzcmMsIHNyY3cpOworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIDAsIDAsIGRzdCwgZHN0dyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCsrID0gR1JPVVBfRjc7CisJCSppbnN0IHw9IE5PVF9ybTsKKwkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBkc3QsIDAsIGRzdCwgMCk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCA9IE9SX3Jfcm07CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKwlFTUlUX01PVihjb21waWxlciwgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCAwLCAwLCBUTVBfUkVHMSwgMCk7CisJRkFJTF9JRighaW5zdCk7CisJKmluc3QrKyA9IEdST1VQX0Y3OworCSppbnN0IHw9IE5PVF9ybTsKKwlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFRNUF9SRUcxLCAwLCBUTVBfUkVHMSwgMCk7CisJRkFJTF9JRighaW5zdCk7CisJKmluc3QgPSBPUl9yX3JtOworCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIHNsaml0X3NpIGVtaXRfY2x6KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wX2ZsYWdzLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc2xqaXRfdWIqIGluc3Q7CisJc2xqaXRfc2kgZHN0X3I7CisKKwlTTEpJVF9VTlVTRURfQVJHKG9wX2ZsYWdzKTsKKwlpZiAoU0xKSVRfVU5MSUtFTFkoZHN0ID09IFNMSklUX1VOVVNFRCkpIHsKKwkJLyogSnVzdCBzZXQgdGhlIHplcm8gZmxhZy4gKi8KKwkJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBzcmMsIHNyY3cpOworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIDAsIDAsIFRNUF9SRUcxLCAwKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCSppbnN0KysgPSBHUk9VUF9GNzsKKwkJKmluc3QgfD0gTk9UX3JtOworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKwkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxIHwgRVg4Nl9TSElGVF9JTlMsIFNMSklUX0lNTSwgMzEsIFRNUF9SRUcxLCAwKTsKKyNlbHNlCisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSB8IEVYODZfU0hJRlRfSU5TLCBTTEpJVF9JTU0sICEob3BfZmxhZ3MgJiBTTEpJVF9JTlRfT1ApID8gNjMgOiAzMSwgVE1QX1JFRzEsIDApOworI2VuZGlmCisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCB8PSBTSFI7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCWlmIChTTEpJVF9VTkxJS0VMWShzcmMgJiBTTEpJVF9JTU0pKSB7CisJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgU0xKSVRfSU1NLCBzcmN3KTsKKwkJc3JjID0gVE1QX1JFRzE7CisJCXNyY3cgPSAwOworCX0KKworCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMiwgVE1QX1JFRzEsIDAsIHNyYywgc3Jjdyk7CisJRkFJTF9JRighaW5zdCk7CisJKmluc3QrKyA9IEdST1VQXzBGOworCSppbnN0ID0gQlNSX3Jfcm07CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJaWYgKEZBU1RfSVNfUkVHKGRzdCkpCisJCWRzdF9yID0gZHN0OworCWVsc2UgeworCQkvKiBGaW5kIGFuIHVudXNlZCB0ZW1wb3JhcnkgcmVnaXN0ZXIuICovCisJCWlmICgoZHN0ICYgUkVHX01BU0spICE9IFNMSklUX1IwICYmIChkc3QgJiBPRkZTX1JFR19NQVNLKSAhPSBUT19PRkZTX1JFRyhTTEpJVF9SMCkpCisJCQlkc3RfciA9IFNMSklUX1IwOworCQllbHNlIGlmICgoZHN0ICYgUkVHX01BU0spICE9IFNMSklUX1IxICYmIChkc3QgJiBPRkZTX1JFR19NQVNLKSAhPSBUT19PRkZTX1JFRyhTTEpJVF9SMSkpCisJCQlkc3RfciA9IFNMSklUX1IxOworCQllbHNlCisJCQlkc3RfciA9IFNMSklUX1IyOworCQlFTUlUX01PVihjb21waWxlciwgZHN0LCBkc3R3LCBkc3RfciwgMCk7CisJfQorCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3RfciwgMCwgU0xKSVRfSU1NLCAzMiArIDMxKTsKKyNlbHNlCisJZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX1JFRzI7CisJY29tcGlsZXItPm1vZGUzMiA9IDA7CisJRU1JVF9NT1YoY29tcGlsZXIsIGRzdF9yLCAwLCBTTEpJVF9JTU0sICEob3BfZmxhZ3MgJiBTTEpJVF9JTlRfT1ApID8gNjQgKyA2MyA6IDMyICsgMzEpOworCWNvbXBpbGVyLT5tb2RlMzIgPSBvcF9mbGFncyAmIFNMSklUX0lOVF9PUDsKKyNlbmRpZgorCisJaWYgKGNwdV9oYXNfY21vdiA9PSAtMSkKKwkJZ2V0X2NwdV9mZWF0dXJlcygpOworCisJaWYgKGNwdV9oYXNfY21vdikgeworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDIsIGRzdF9yLCAwLCBUTVBfUkVHMSwgMCk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCsrID0gR1JPVVBfMEY7CisJCSppbnN0ID0gQ01PVk5FX3Jfcm07CisJfSBlbHNlIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0KTsKKwkJRkFJTF9JRighaW5zdCk7CisJCUlOQ19TSVpFKDQpOworCisJCSppbnN0KysgPSBKRV9pODsKKwkJKmluc3QrKyA9IDI7CisJCSppbnN0KysgPSBNT1Zfcl9ybTsKKwkJKmluc3QrKyA9IE1PRF9SRUcgfCAocmVnX21hcFtkc3Rfcl0gPDwgMykgfCByZWdfbWFwW1RNUF9SRUcxXTsKKyNlbHNlCisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA1KTsKKwkJRkFJTF9JRighaW5zdCk7CisJCUlOQ19TSVpFKDUpOworCisJCSppbnN0KysgPSBKRV9pODsKKwkJKmluc3QrKyA9IDM7CisJCSppbnN0KysgPSBSRVhfVyB8IChyZWdfbWFwW2RzdF9yXSA+PSA4ID8gUkVYX1IgOiAwKSB8IChyZWdfbWFwW1RNUF9SRUcxXSA+PSA4ID8gUkVYX0IgOiAwKTsKKwkJKmluc3QrKyA9IE1PVl9yX3JtOworCQkqaW5zdCsrID0gTU9EX1JFRyB8IChyZWdfbG1hcFtkc3Rfcl0gPDwgMykgfCByZWdfbG1hcFtUTVBfUkVHMV07CisjZW5kaWYKKwl9CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxIHwgRVg4Nl9CSU5fSU5TLCBTTEpJVF9JTU0sIDMxLCBkc3RfciwgMCk7CisjZWxzZQorCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSB8IEVYODZfQklOX0lOUywgU0xKSVRfSU1NLCAhKG9wX2ZsYWdzICYgU0xKSVRfSU5UX09QKSA/IDYzIDogMzEsIGRzdF9yLCAwKTsKKyNlbmRpZgorCUZBSUxfSUYoIWluc3QpOworCSooaW5zdCArIDEpIHw9IFhPUjsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKwlpZiAoZHN0ICYgU0xKSVRfTUVNKSB7CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0X3IsIDAsIGRzdCwgZHN0dyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCA9IFhDSEdfcl9ybTsKKwl9CisjZWxzZQorCWlmIChkc3QgJiBTTEpJVF9NRU0pCisJCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3QsIGRzdHcsIFRNUF9SRUcyLCAwKTsKKyNlbmRpZgorCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9vcDEoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlzbGppdF91YiogaW5zdDsKKwlzbGppdF9zaSB1cGRhdGUgPSAwOworCXNsaml0X3NpIG9wX2ZsYWdzID0gR0VUX0FMTF9GTEFHUyhvcCk7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQorCXNsaml0X3NpIGRzdF9pc19lcmVnID0gMDsKKwlzbGppdF9zaSBzcmNfaXNfZXJlZyA9IDA7CisjZWxzZQorIwlkZWZpbmUgc3JjX2lzX2VyZWcgMAorI2VuZGlmCisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AxKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMsIHNyY3cpOworCisJQ0hFQ0tfRVhUUkFfUkVHUyhkc3QsIGRzdHcsIGRzdF9pc19lcmVnID0gMSk7CisJQ0hFQ0tfRVhUUkFfUkVHUyhzcmMsIHNyY3csIHNyY19pc19lcmVnID0gMSk7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQorCWNvbXBpbGVyLT5tb2RlMzIgPSBvcF9mbGFncyAmIFNMSklUX0lOVF9PUDsKKyNlbmRpZgorCisJb3AgPSBHRVRfT1BDT0RFKG9wKTsKKwlpZiAob3AgPj0gU0xKSVRfTU9WICYmIG9wIDw9IFNMSklUX01PVlVfUCkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJY29tcGlsZXItPm1vZGUzMiA9IDA7CisjZW5kaWYKKworCQlpZiAob3BfZmxhZ3MgJiBTTEpJVF9JTlRfT1ApIHsKKwkJCWlmIChGQVNUX0lTX1JFRyhzcmMpICYmIHNyYyA9PSBkc3QpIHsKKwkJCQlpZiAoIVRZUEVfQ0FTVF9ORUVERUQob3ApKQorCQkJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJCX0KKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJCQlpZiAob3AgPT0gU0xKSVRfTU9WX1NJICYmIChzcmMgJiBTTEpJVF9NRU0pKQorCQkJCW9wID0gU0xKSVRfTU9WX1VJOworCQkJaWYgKG9wID09IFNMSklUX01PVlVfU0kgJiYgKHNyYyAmIFNMSklUX01FTSkpCisJCQkJb3AgPSBTTEpJVF9NT1ZVX1VJOworCQkJaWYgKG9wID09IFNMSklUX01PVl9VSSAmJiAoc3JjICYgU0xKSVRfSU1NKSkKKwkJCQlvcCA9IFNMSklUX01PVl9TSTsKKwkJCWlmIChvcCA9PSBTTEpJVF9NT1ZVX1VJICYmIChzcmMgJiBTTEpJVF9JTU0pKQorCQkJCW9wID0gU0xKSVRfTU9WVV9TSTsKKyNlbmRpZgorCQl9CisKKwkJU0xKSVRfQ09NUElMRV9BU1NFUlQoU0xKSVRfTU9WICsgOCA9PSBTTEpJVF9NT1ZVLCBtb3Z1X29mZnNldCk7CisJCWlmIChvcCA+PSBTTEpJVF9NT1ZVKSB7CisJCQl1cGRhdGUgPSAxOworCQkJb3AgLT0gODsKKwkJfQorCisJCWlmIChzcmMgJiBTTEpJVF9JTU0pIHsKKwkJCXN3aXRjaCAob3ApIHsKKwkJCWNhc2UgU0xKSVRfTU9WX1VCOgorCQkJCXNyY3cgPSAoc2xqaXRfdWIpc3JjdzsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0xKSVRfTU9WX1NCOgorCQkJCXNyY3cgPSAoc2xqaXRfc2Ipc3JjdzsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0xKSVRfTU9WX1VIOgorCQkJCXNyY3cgPSAoc2xqaXRfdWgpc3JjdzsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0xKSVRfTU9WX1NIOgorCQkJCXNyY3cgPSAoc2xqaXRfc2gpc3JjdzsKKwkJCQlicmVhazsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJCQljYXNlIFNMSklUX01PVl9VSToKKwkJCQlzcmN3ID0gKHNsaml0X3VpKXNyY3c7CisJCQkJYnJlYWs7CisJCQljYXNlIFNMSklUX01PVl9TSToKKwkJCQlzcmN3ID0gKHNsaml0X3NpKXNyY3c7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCX0KKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCQlpZiAoU0xKSVRfVU5MSUtFTFkoZHN0X2lzX2VyZWcpKQorCQkJCXJldHVybiBlbWl0X21vdihjb21waWxlciwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpOworI2VuZGlmCisJCX0KKworCQlpZiAoU0xKSVRfVU5MSUtFTFkodXBkYXRlKSAmJiAoc3JjICYgU0xKSVRfTUVNKSAmJiAhc3JjX2lzX2VyZWcgJiYgKHNyYyAmIFJFR19NQVNLKSAmJiAoc3JjdyAhPSAwIHx8IChzcmMgJiBPRkZTX1JFR19NQVNLKSAhPSAwKSkgeworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBzcmMgJiBSRUdfTUFTSywgMCwgc3JjLCBzcmN3KTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBMRUFfcl9tOworCQkJc3JjICY9IFNMSklUX01FTSB8IDB4ZjsKKwkJCXNyY3cgPSAwOworCQl9CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCWlmIChTTEpJVF9VTkxJS0VMWShkc3RfaXNfZXJlZykgJiYgKCEob3AgPT0gU0xKSVRfTU9WIHx8IG9wID09IFNMSklUX01PVl9VSSB8fCBvcCA9PSBTTEpJVF9NT1ZfU0kgfHwgb3AgPT0gU0xKSVRfTU9WX1ApIHx8IChzcmMgJiBTTEpJVF9NRU0pKSkgeworCQkJU0xKSVRfQVNTRVJUKGRzdCA9PSBTTEpJVF9NRU0xKFNMSklUX1NQKSk7CisJCQlkc3QgPSBUTVBfUkVHMTsKKwkJfQorI2VuZGlmCisKKwkJc3dpdGNoIChvcCkgeworCQljYXNlIFNMSklUX01PVjoKKwkJY2FzZSBTTEpJVF9NT1ZfUDoKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCWNhc2UgU0xKSVRfTU9WX1VJOgorCQljYXNlIFNMSklUX01PVl9TSToKKyNlbmRpZgorCQkJRkFJTF9JRihlbWl0X21vdihjb21waWxlciwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVl9VQjoKKwkJCUZBSUxfSUYoZW1pdF9tb3ZfYnl0ZShjb21waWxlciwgMCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVl9TQjoKKwkJCUZBSUxfSUYoZW1pdF9tb3ZfYnl0ZShjb21waWxlciwgMSwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVl9VSDoKKwkJCUZBSUxfSUYoZW1pdF9tb3ZfaGFsZihjb21waWxlciwgMCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVl9TSDoKKwkJCUZBSUxfSUYoZW1pdF9tb3ZfaGFsZihjb21waWxlciwgMSwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKKwkJCWJyZWFrOworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJY2FzZSBTTEpJVF9NT1ZfVUk6CisJCQlGQUlMX0lGKGVtaXRfbW92X2ludChjb21waWxlciwgMCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpKTsKKwkJCWJyZWFrOworCQljYXNlIFNMSklUX01PVl9TSToKKwkJCUZBSUxfSUYoZW1pdF9tb3ZfaW50KGNvbXBpbGVyLCAxLCBkc3QsIGRzdHcsIHNyYywgc3JjdykpOworCQkJYnJlYWs7CisjZW5kaWYKKwkJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl8zMiAmJiBTTEpJVF9DT05GSUdfWDg2XzMyKQorCQlpZiAoU0xKSVRfVU5MSUtFTFkoZHN0X2lzX2VyZWcpICYmIGRzdCA9PSBUTVBfUkVHMSkKKwkJCXJldHVybiBlbWl0X21vdihjb21waWxlciwgU0xKSVRfTUVNMShTTEpJVF9TUCksIGRzdHcsIFRNUF9SRUcxLCAwKTsKKyNlbmRpZgorCisJCWlmIChTTEpJVF9VTkxJS0VMWSh1cGRhdGUpICYmIChkc3QgJiBTTEpJVF9NRU0pICYmIChkc3QgJiBSRUdfTUFTSykgJiYgKGRzdHcgIT0gMCB8fCAoZHN0ICYgT0ZGU19SRUdfTUFTSykgIT0gMCkpIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0ICYgUkVHX01BU0ssIDAsIGRzdCwgZHN0dyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gTEVBX3JfbTsKKwkJfQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwlpZiAoU0xKSVRfVU5MSUtFTFkoR0VUX0ZMQUdTKG9wX2ZsYWdzKSkpCisJCWNvbXBpbGVyLT5mbGFnc19zYXZlZCA9IDA7CisKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBTTEpJVF9OT1Q6CisJCWlmIChTTEpJVF9VTkxJS0VMWShvcF9mbGFncyAmIFNMSklUX1NFVF9FKSkKKwkJCXJldHVybiBlbWl0X25vdF93aXRoX2ZsYWdzKGNvbXBpbGVyLCBkc3QsIGRzdHcsIHNyYywgc3Jjdyk7CisJCXJldHVybiBlbWl0X3VuYXJ5KGNvbXBpbGVyLCBOT1Rfcm0sIGRzdCwgZHN0dywgc3JjLCBzcmN3KTsKKworCWNhc2UgU0xKSVRfTkVHOgorCQlpZiAoU0xKSVRfVU5MSUtFTFkob3BfZmxhZ3MgJiBTTEpJVF9LRUVQX0ZMQUdTKSAmJiAhY29tcGlsZXItPmZsYWdzX3NhdmVkKQorCQkJRkFJTF9JRihlbWl0X3NhdmVfZmxhZ3MoY29tcGlsZXIpKTsKKwkJcmV0dXJuIGVtaXRfdW5hcnkoY29tcGlsZXIsIE5FR19ybSwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpOworCisJY2FzZSBTTEpJVF9DTFo6CisJCWlmIChTTEpJVF9VTkxJS0VMWShvcF9mbGFncyAmIFNMSklUX0tFRVBfRkxBR1MpICYmICFjb21waWxlci0+ZmxhZ3Nfc2F2ZWQpCisJCQlGQUlMX0lGKGVtaXRfc2F2ZV9mbGFncyhjb21waWxlcikpOworCQlyZXR1cm4gZW1pdF9jbHooY29tcGlsZXIsIG9wX2ZsYWdzLCBkc3QsIGRzdHcsIHNyYywgc3Jjdyk7CisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisjCXVuZGVmIHNyY19pc19lcmVnCisjZW5kaWYKK30KKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKworI2RlZmluZSBCSU5BUllfSU1NKG9wX2ltbSwgb3BfbXIsIGltbXcsIGFyZywgYXJndykgXAorCWlmIChJU19IQUxGV09SRChpbW13KSB8fCBjb21waWxlci0+bW9kZTMyKSB7IFwKKwkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxIHwgRVg4Nl9CSU5fSU5TLCBTTEpJVF9JTU0sIGltbXcsIGFyZywgYXJndyk7IFwKKwkJRkFJTF9JRighaW5zdCk7IFwKKwkJKihpbnN0ICsgMSkgfD0gKG9wX2ltbSk7IFwKKwl9IFwKKwllbHNlIHsgXAorCQlGQUlMX0lGKGVtaXRfbG9hZF9pbW02NChjb21waWxlciwgVE1QX1JFRzIsIGltbXcpKTsgXAorCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFRNUF9SRUcyLCAwLCBhcmcsIGFyZ3cpOyBcCisJCUZBSUxfSUYoIWluc3QpOyBcCisJCSppbnN0ID0gKG9wX21yKTsgXAorCX0KKworI2RlZmluZSBCSU5BUllfRUFYX0lNTShvcF9lYXhfaW1tLCBpbW13KSBcCisJRkFJTF9JRihlbWl0X2RvX2ltbTMyKGNvbXBpbGVyLCAoIWNvbXBpbGVyLT5tb2RlMzIpID8gUkVYX1cgOiAwLCAob3BfZWF4X2ltbSksIGltbXcpKQorCisjZWxzZQorCisjZGVmaW5lIEJJTkFSWV9JTU0ob3BfaW1tLCBvcF9tciwgaW1tdywgYXJnLCBhcmd3KSBcCisJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxIHwgRVg4Nl9CSU5fSU5TLCBTTEpJVF9JTU0sIGltbXcsIGFyZywgYXJndyk7IFwKKwlGQUlMX0lGKCFpbnN0KTsgXAorCSooaW5zdCArIDEpIHw9IChvcF9pbW0pOworCisjZGVmaW5lIEJJTkFSWV9FQVhfSU1NKG9wX2VheF9pbW0sIGltbXcpIFwKKwlGQUlMX0lGKGVtaXRfZG9faW1tKGNvbXBpbGVyLCAob3BfZWF4X2ltbSksIGltbXcpKQorCisjZW5kaWYKKworc3RhdGljIHNsaml0X3NpIGVtaXRfY3VtX2JpbmFyeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3ViIG9wX3JtLCBzbGppdF91YiBvcF9tciwgc2xqaXRfdWIgb3BfaW1tLCBzbGppdF91YiBvcF9lYXhfaW1tLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlzbGppdF91YiogaW5zdDsKKworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKSB7CisJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjMSwgc3JjMXcpOworCQlpZiAoc3JjMiAmIFNMSklUX0lNTSkgeworCQkJQklOQVJZX0lNTShvcF9pbW0sIG9wX21yLCBzcmMydywgVE1QX1JFRzEsIDApOworCQl9CisJCWVsc2UgeworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBUTVBfUkVHMSwgMCwgc3JjMiwgc3JjMncpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IG9wX3JtOworCQl9CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCWlmIChkc3QgPT0gc3JjMSAmJiBkc3R3ID09IHNyYzF3KSB7CisJCWlmIChzcmMyICYgU0xKSVRfSU1NKSB7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQorCQkJaWYgKChkc3QgPT0gU0xKSVRfUjApICYmIChzcmMydyA+IDEyNyB8fCBzcmMydyA8IC0xMjgpICYmIChjb21waWxlci0+bW9kZTMyIHx8IElTX0hBTEZXT1JEKHNyYzJ3KSkpIHsKKyNlbHNlCisJCQlpZiAoKGRzdCA9PSBTTEpJVF9SMCkgJiYgKHNyYzJ3ID4gMTI3IHx8IHNyYzJ3IDwgLTEyOCkpIHsKKyNlbmRpZgorCQkJCUJJTkFSWV9FQVhfSU1NKG9wX2VheF9pbW0sIHNyYzJ3KTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCUJJTkFSWV9JTU0ob3BfaW1tLCBvcF9tciwgc3JjMncsIGRzdCwgZHN0dyk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoRkFTVF9JU19SRUcoZHN0KSkgeworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBkc3QsIGRzdHcsIHNyYzIsIHNyYzJ3KTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBvcF9ybTsKKwkJfQorCQllbHNlIGlmIChGQVNUX0lTX1JFRyhzcmMyKSkgeworCQkJLyogU3BlY2lhbCBleGNlcHRpb24gZm9yIHNsaml0X2VtaXRfb3BfZmxhZ3MuICovCisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIHNyYzIsIHNyYzJ3LCBkc3QsIGRzdHcpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IG9wX21yOworCQl9CisJCWVsc2UgeworCQkJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBzcmMyLCBzcmMydyk7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFRNUF9SRUcxLCAwLCBkc3QsIGRzdHcpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IG9wX21yOworCQl9CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCS8qIE9ubHkgZm9yIGN1bXVsYXRpdmUgb3BlcmF0aW9ucy4gKi8KKwlpZiAoZHN0ID09IHNyYzIgJiYgZHN0dyA9PSBzcmMydykgeworCQlpZiAoc3JjMSAmIFNMSklUX0lNTSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJCWlmICgoZHN0ID09IFNMSklUX1IwKSAmJiAoc3JjMXcgPiAxMjcgfHwgc3JjMXcgPCAtMTI4KSAmJiAoY29tcGlsZXItPm1vZGUzMiB8fCBJU19IQUxGV09SRChzcmMxdykpKSB7CisjZWxzZQorCQkJaWYgKChkc3QgPT0gU0xKSVRfUjApICYmIChzcmMxdyA+IDEyNyB8fCBzcmMxdyA8IC0xMjgpKSB7CisjZW5kaWYKKwkJCQlCSU5BUllfRUFYX0lNTShvcF9lYXhfaW1tLCBzcmMxdyk7CisJCQl9CisJCQllbHNlIHsKKwkJCQlCSU5BUllfSU1NKG9wX2ltbSwgb3BfbXIsIHNyYzF3LCBkc3QsIGRzdHcpOworCQkJfQorCQl9CisJCWVsc2UgaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gb3Bfcm07CisJCX0KKwkJZWxzZSBpZiAoRkFTVF9JU19SRUcoc3JjMSkpIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgc3JjMSwgc3JjMXcsIGRzdCwgZHN0dyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gb3BfbXI7CisJCX0KKwkJZWxzZSB7CisJCQlFTUlUX01PVihjb21waWxlciwgVE1QX1JFRzEsIDAsIHNyYzEsIHNyYzF3KTsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgVE1QX1JFRzEsIDAsIGRzdCwgZHN0dyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gb3BfbXI7CisJCX0KKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCisJLyogR2VuZXJhbCB2ZXJzaW9uLiAqLworCWlmIChGQVNUX0lTX1JFRyhkc3QpKSB7CisJCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3QsIDAsIHNyYzEsIHNyYzF3KTsKKwkJaWYgKHNyYzIgJiBTTEpJVF9JTU0pIHsKKwkJCUJJTkFSWV9JTU0ob3BfaW1tLCBvcF9tciwgc3JjMncsIGRzdCwgMCk7CisJCX0KKwkJZWxzZSB7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdCwgMCwgc3JjMiwgc3JjMncpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IG9wX3JtOworCQl9CisJfQorCWVsc2UgeworCQkvKiBUaGlzIHZlcnNpb24gcmVxdWlyZXMgbGVzcyBtZW1vcnkgd3JpdGluZy4gKi8KKwkJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBzcmMxLCBzcmMxdyk7CisJCWlmIChzcmMyICYgU0xKSVRfSU1NKSB7CisJCQlCSU5BUllfSU1NKG9wX2ltbSwgb3BfbXIsIHNyYzJ3LCBUTVBfUkVHMSwgMCk7CisJCX0KKwkJZWxzZSB7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFRNUF9SRUcxLCAwLCBzcmMyLCBzcmMydyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gb3Bfcm07CisJCX0KKwkJRU1JVF9NT1YoY29tcGlsZXIsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDApOworCX0KKworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9ub25fY3VtX2JpbmFyeShzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3ViIG9wX3JtLCBzbGppdF91YiBvcF9tciwgc2xqaXRfdWIgb3BfaW1tLCBzbGppdF91YiBvcF9lYXhfaW1tLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlzbGppdF91YiogaW5zdDsKKworCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKSB7CisJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjMSwgc3JjMXcpOworCQlpZiAoc3JjMiAmIFNMSklUX0lNTSkgeworCQkJQklOQVJZX0lNTShvcF9pbW0sIG9wX21yLCBzcmMydywgVE1QX1JFRzEsIDApOworCQl9CisJCWVsc2UgeworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBUTVBfUkVHMSwgMCwgc3JjMiwgc3JjMncpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IG9wX3JtOworCQl9CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCWlmIChkc3QgPT0gc3JjMSAmJiBkc3R3ID09IHNyYzF3KSB7CisJCWlmIChzcmMyICYgU0xKSVRfSU1NKSB7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQorCQkJaWYgKChkc3QgPT0gU0xKSVRfUjApICYmIChzcmMydyA+IDEyNyB8fCBzcmMydyA8IC0xMjgpICYmIChjb21waWxlci0+bW9kZTMyIHx8IElTX0hBTEZXT1JEKHNyYzJ3KSkpIHsKKyNlbHNlCisJCQlpZiAoKGRzdCA9PSBTTEpJVF9SMCkgJiYgKHNyYzJ3ID4gMTI3IHx8IHNyYzJ3IDwgLTEyOCkpIHsKKyNlbmRpZgorCQkJCUJJTkFSWV9FQVhfSU1NKG9wX2VheF9pbW0sIHNyYzJ3KTsKKwkJCX0KKwkJCWVsc2UgeworCQkJCUJJTkFSWV9JTU0ob3BfaW1tLCBvcF9tciwgc3JjMncsIGRzdCwgZHN0dyk7CisJCQl9CisJCX0KKwkJZWxzZSBpZiAoRkFTVF9JU19SRUcoZHN0KSkgeworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBkc3QsIGRzdHcsIHNyYzIsIHNyYzJ3KTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBvcF9ybTsKKwkJfQorCQllbHNlIGlmIChGQVNUX0lTX1JFRyhzcmMyKSkgeworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBzcmMyLCBzcmMydywgZHN0LCBkc3R3KTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBvcF9tcjsKKwkJfQorCQllbHNlIHsKKwkJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjMiwgc3JjMncpOworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBUTVBfUkVHMSwgMCwgZHN0LCBkc3R3KTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBvcF9tcjsKKwkJfQorCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwkvKiBHZW5lcmFsIHZlcnNpb24uICovCisJaWYgKEZBU1RfSVNfUkVHKGRzdCkgJiYgZHN0ICE9IHNyYzIpIHsKKwkJRU1JVF9NT1YoY29tcGlsZXIsIGRzdCwgMCwgc3JjMSwgc3JjMXcpOworCQlpZiAoc3JjMiAmIFNMSklUX0lNTSkgeworCQkJQklOQVJZX0lNTShvcF9pbW0sIG9wX21yLCBzcmMydywgZHN0LCAwKTsKKwkJfQorCQllbHNlIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0LCAwLCBzcmMyLCBzcmMydyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gb3Bfcm07CisJCX0KKwl9CisJZWxzZSB7CisJCS8qIFRoaXMgdmVyc2lvbiByZXF1aXJlcyBsZXNzIG1lbW9yeSB3cml0aW5nLiAqLworCQlFTUlUX01PVihjb21waWxlciwgVE1QX1JFRzEsIDAsIHNyYzEsIHNyYzF3KTsKKwkJaWYgKHNyYzIgJiBTTEpJVF9JTU0pIHsKKwkJCUJJTkFSWV9JTU0ob3BfaW1tLCBvcF9tciwgc3JjMncsIFRNUF9SRUcxLCAwKTsKKwkJfQorCQllbHNlIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgVE1QX1JFRzEsIDAsIHNyYzIsIHNyYzJ3KTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBvcF9ybTsKKwkJfQorCQlFTUlUX01PVihjb21waWxlciwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCk7CisJfQorCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBzbGppdF9zaSBlbWl0X211bChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlzbGppdF91YiogaW5zdDsKKwlzbGppdF9zaSBkc3RfcjsKKworCWRzdF9yID0gRkFTVF9JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcxOworCisJLyogUmVnaXN0ZXIgZGVzdGluYXRpb24uICovCisJaWYgKGRzdF9yID09IHNyYzEgJiYgIShzcmMyICYgU0xKSVRfSU1NKSkgeworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDIsIGRzdF9yLCAwLCBzcmMyLCBzcmMydyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCsrID0gR1JPVVBfMEY7CisJCSppbnN0ID0gSU1VTF9yX3JtOworCX0KKwllbHNlIGlmIChkc3RfciA9PSBzcmMyICYmICEoc3JjMSAmIFNMSklUX0lNTSkpIHsKKwkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAyLCBkc3RfciwgMCwgc3JjMSwgc3JjMXcpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJKmluc3QrKyA9IEdST1VQXzBGOworCQkqaW5zdCA9IElNVUxfcl9ybTsKKwl9CisJZWxzZSBpZiAoc3JjMSAmIFNMSklUX0lNTSkgeworCQlpZiAoc3JjMiAmIFNMSklUX0lNTSkgeworCQkJRU1JVF9NT1YoY29tcGlsZXIsIGRzdF9yLCAwLCBTTEpJVF9JTU0sIHNyYzJ3KTsKKwkJCXNyYzIgPSBkc3RfcjsKKwkJCXNyYzJ3ID0gMDsKKwkJfQorCisJCWlmIChzcmMxdyA8PSAxMjcgJiYgc3JjMXcgPj0gLTEyOCkgeworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBkc3RfciwgMCwgc3JjMiwgc3JjMncpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IElNVUxfcl9ybV9pODsKKwkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxKTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJSU5DX1NJWkUoMSk7CisJCQkqaW5zdCA9IChzbGppdF9zYilzcmMxdzsKKwkJfQorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKwkJZWxzZSB7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBzcmMyLCBzcmMydyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gSU1VTF9yX3JtX2kzMjsKKwkJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0KTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJSU5DX1NJWkUoNCk7CisJCQkqKHNsaml0X3N3KilpbnN0ID0gc3JjMXc7CisJCX0KKyNlbHNlCisJCWVsc2UgaWYgKElTX0hBTEZXT1JEKHNyYzF3KSkgeworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBkc3RfciwgMCwgc3JjMiwgc3JjMncpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IElNVUxfcl9ybV9pMzI7CisJCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCUlOQ19TSVpFKDQpOworCQkJKihzbGppdF9zaSopaW5zdCA9IChzbGppdF9zaSlzcmMxdzsKKwkJfQorCQllbHNlIHsKKwkJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMiwgMCwgU0xKSVRfSU1NLCBzcmMxdyk7CisJCQlpZiAoZHN0X3IgIT0gc3JjMikKKwkJCQlFTUlUX01PVihjb21waWxlciwgZHN0X3IsIDAsIHNyYzIsIHNyYzJ3KTsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMiwgZHN0X3IsIDAsIFRNUF9SRUcyLCAwKTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QrKyA9IEdST1VQXzBGOworCQkJKmluc3QgPSBJTVVMX3Jfcm07CisJCX0KKyNlbmRpZgorCX0KKwllbHNlIGlmIChzcmMyICYgU0xKSVRfSU1NKSB7CisJCS8qIE5vdGU6IHNyYzEgaXMgTk9UIGltbWVkaWF0ZS4gKi8KKworCQlpZiAoc3JjMncgPD0gMTI3ICYmIHNyYzJ3ID49IC0xMjgpIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0X3IsIDAsIHNyYzEsIHNyYzF3KTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBJTVVMX3Jfcm1faTg7CisJCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCUlOQ19TSVpFKDEpOworCQkJKmluc3QgPSAoc2xqaXRfc2Ipc3JjMnc7CisJCX0KKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCWVsc2UgeworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBkc3RfciwgMCwgc3JjMSwgc3JjMXcpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IElNVUxfcl9ybV9pMzI7CisJCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgNCk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCUlOQ19TSVpFKDQpOworCQkJKihzbGppdF9zdyopaW5zdCA9IHNyYzJ3OworCQl9CisjZWxzZQorCQllbHNlIGlmIChJU19IQUxGV09SRChzcmMydykpIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0X3IsIDAsIHNyYzEsIHNyYzF3KTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBJTVVMX3Jfcm1faTMyOworCQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDQpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQlJTkNfU0laRSg0KTsKKwkJCSooc2xqaXRfc2kqKWluc3QgPSAoc2xqaXRfc2kpc3JjMnc7CisJCX0KKwkJZWxzZSB7CisJCQlFTUlUX01PVihjb21waWxlciwgVE1QX1JFRzIsIDAsIFNMSklUX0lNTSwgc3JjMncpOworCQkJaWYgKGRzdF9yICE9IHNyYzEpCisJCQkJRU1JVF9NT1YoY29tcGlsZXIsIGRzdF9yLCAwLCBzcmMxLCBzcmMxdyk7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDIsIGRzdF9yLCAwLCBUTVBfUkVHMiwgMCk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0KysgPSBHUk9VUF8wRjsKKwkJCSppbnN0ID0gSU1VTF9yX3JtOworCQl9CisjZW5kaWYKKwl9CisJZWxzZSB7CisJCS8qIE5laXRoZXIgYXJndW1lbnQgaXMgaW1tZWRpYXRlLiAqLworCQlpZiAoQUREUkVTU0lOR19ERVBFTkRTX09OKHNyYzIsIGRzdF9yKSkKKwkJCWRzdF9yID0gVE1QX1JFRzE7CisJCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3RfciwgMCwgc3JjMSwgc3JjMXcpOworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDIsIGRzdF9yLCAwLCBzcmMyLCBzcmMydyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCsrID0gR1JPVVBfMEY7CisJCSppbnN0ID0gSU1VTF9yX3JtOworCX0KKworCWlmIChkc3RfciA9PSBUTVBfUkVHMSkKKwkJRU1JVF9NT1YoY29tcGlsZXIsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDApOworCisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBzbGppdF9zaSBlbWl0X2xlYV9iaW5hcnkoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kga2VlcF9mbGFncywKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJc2xqaXRfdWIqIGluc3Q7CisJc2xqaXRfc2kgZHN0X3IsIGRvbmUgPSAwOworCisJLyogVGhlc2UgY2FzZXMgYmV0dGVyIGJlIGxlZnQgdG8gaGFuZGxlZCBieSBub3JtYWwgd2F5LiAqLworCWlmICgha2VlcF9mbGFncykgeworCQlpZiAoZHN0ID09IHNyYzEgJiYgZHN0dyA9PSBzcmMxdykKKwkJCXJldHVybiBTTEpJVF9FUlJfVU5TVVBQT1JURUQ7CisJCWlmIChkc3QgPT0gc3JjMiAmJiBkc3R3ID09IHNyYzJ3KQorCQkJcmV0dXJuIFNMSklUX0VSUl9VTlNVUFBPUlRFRDsKKwl9CisKKwlkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfUkVHMTsKKworCWlmIChGQVNUX0lTX1JFRyhzcmMxKSkgeworCQlpZiAoRkFTVF9JU19SRUcoc3JjMikpIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0X3IsIDAsIFNMSklUX01FTTIoc3JjMSwgc3JjMiksIDApOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IExFQV9yX207CisJCQlkb25lID0gMTsKKwkJfQorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJaWYgKChzcmMyICYgU0xKSVRfSU1NKSAmJiAoY29tcGlsZXItPm1vZGUzMiB8fCBJU19IQUxGV09SRChzcmMydykpKSB7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBTTEpJVF9NRU0xKHNyYzEpLCAoc2xqaXRfc2kpc3JjMncpOworI2Vsc2UKKwkJaWYgKHNyYzIgJiBTTEpJVF9JTU0pIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0X3IsIDAsIFNMSklUX01FTTEoc3JjMSksIHNyYzJ3KTsKKyNlbmRpZgorCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IExFQV9yX207CisJCQlkb25lID0gMTsKKwkJfQorCX0KKwllbHNlIGlmIChGQVNUX0lTX1JFRyhzcmMyKSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJaWYgKChzcmMxICYgU0xKSVRfSU1NKSAmJiAoY29tcGlsZXItPm1vZGUzMiB8fCBJU19IQUxGV09SRChzcmMxdykpKSB7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIGRzdF9yLCAwLCBTTEpJVF9NRU0xKHNyYzIpLCAoc2xqaXRfc2kpc3JjMXcpOworI2Vsc2UKKwkJaWYgKHNyYzEgJiBTTEpJVF9JTU0pIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgZHN0X3IsIDAsIFNMSklUX01FTTEoc3JjMiksIHNyYzF3KTsKKyNlbmRpZgorCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IExFQV9yX207CisJCQlkb25lID0gMTsKKwkJfQorCX0KKworCWlmIChkb25lKSB7CisJCWlmIChkc3RfciA9PSBUTVBfUkVHMSkKKwkJCXJldHVybiBlbWl0X21vdihjb21waWxlciwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKwlyZXR1cm4gU0xKSVRfRVJSX1VOU1VQUE9SVEVEOworfQorCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9jbXBfYmluYXJ5KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJc2xqaXRfdWIqIGluc3Q7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJaWYgKHNyYzEgPT0gU0xKSVRfUjAgJiYgKHNyYzIgJiBTTEpJVF9JTU0pICYmIChzcmMydyA+IDEyNyB8fCBzcmMydyA8IC0xMjgpICYmIChjb21waWxlci0+bW9kZTMyIHx8IElTX0hBTEZXT1JEKHNyYzJ3KSkpIHsKKyNlbHNlCisJaWYgKHNyYzEgPT0gU0xKSVRfUjAgJiYgKHNyYzIgJiBTTEpJVF9JTU0pICYmIChzcmMydyA+IDEyNyB8fCBzcmMydyA8IC0xMjgpKSB7CisjZW5kaWYKKwkJQklOQVJZX0VBWF9JTU0oQ01QX0VBWF9pMzIsIHNyYzJ3KTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCisJaWYgKEZBU1RfSVNfUkVHKHNyYzEpKSB7CisJCWlmIChzcmMyICYgU0xKSVRfSU1NKSB7CisJCQlCSU5BUllfSU1NKENNUCwgQ01QX3JtX3IsIHNyYzJ3LCBzcmMxLCAwKTsKKwkJfQorCQllbHNlIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgc3JjMSwgMCwgc3JjMiwgc3JjMncpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IENNUF9yX3JtOworCQl9CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCWlmIChGQVNUX0lTX1JFRyhzcmMyKSAmJiAhKHNyYzEgJiBTTEpJVF9JTU0pKSB7CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgc3JjMiwgMCwgc3JjMSwgc3JjMXcpOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJKmluc3QgPSBDTVBfcm1fcjsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCisJaWYgKHNyYzIgJiBTTEpJVF9JTU0pIHsKKwkJaWYgKHNyYzEgJiBTTEpJVF9JTU0pIHsKKwkJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjMSwgc3JjMXcpOworCQkJc3JjMSA9IFRNUF9SRUcxOworCQkJc3JjMXcgPSAwOworCQl9CisJCUJJTkFSWV9JTU0oQ01QLCBDTVBfcm1fciwgc3JjMncsIHNyYzEsIHNyYzF3KTsKKwl9CisJZWxzZSB7CisJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjMSwgc3JjMXcpOworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFRNUF9SRUcxLCAwLCBzcmMyLCBzcmMydyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCA9IENNUF9yX3JtOworCX0KKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIHNsaml0X3NpIGVtaXRfdGVzdF9iaW5hcnkoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlzbGppdF91YiogaW5zdDsKKworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwlpZiAoc3JjMSA9PSBTTEpJVF9SMCAmJiAoc3JjMiAmIFNMSklUX0lNTSkgJiYgKHNyYzJ3ID4gMTI3IHx8IHNyYzJ3IDwgLTEyOCkgJiYgKGNvbXBpbGVyLT5tb2RlMzIgfHwgSVNfSEFMRldPUkQoc3JjMncpKSkgeworI2Vsc2UKKwlpZiAoc3JjMSA9PSBTTEpJVF9SMCAmJiAoc3JjMiAmIFNMSklUX0lNTSkgJiYgKHNyYzJ3ID4gMTI3IHx8IHNyYzJ3IDwgLTEyOCkpIHsKKyNlbmRpZgorCQlCSU5BUllfRUFYX0lNTShURVNUX0VBWF9pMzIsIHNyYzJ3KTsKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQorCWlmIChzcmMyID09IFNMSklUX1IwICYmIChzcmMyICYgU0xKSVRfSU1NKSAmJiAoc3JjMXcgPiAxMjcgfHwgc3JjMXcgPCAtMTI4KSAmJiAoY29tcGlsZXItPm1vZGUzMiB8fCBJU19IQUxGV09SRChzcmMxdykpKSB7CisjZWxzZQorCWlmIChzcmMyID09IFNMSklUX1IwICYmIChzcmMxICYgU0xKSVRfSU1NKSAmJiAoc3JjMXcgPiAxMjcgfHwgc3JjMXcgPCAtMTI4KSkgeworI2VuZGlmCisJCUJJTkFSWV9FQVhfSU1NKFRFU1RfRUFYX2kzMiwgc3JjMXcpOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwlpZiAoIShzcmMxICYgU0xKSVRfSU1NKSkgeworCQlpZiAoc3JjMiAmIFNMSklUX0lNTSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJCWlmIChJU19IQUxGV09SRChzcmMydykgfHwgY29tcGlsZXItPm1vZGUzMikgeworCQkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgU0xKSVRfSU1NLCBzcmMydywgc3JjMSwgc3JjMXcpOworCQkJCUZBSUxfSUYoIWluc3QpOworCQkJCSppbnN0ID0gR1JPVVBfRjc7CisJCQl9CisJCQllbHNlIHsKKwkJCQlGQUlMX0lGKGVtaXRfbG9hZF9pbW02NChjb21waWxlciwgVE1QX1JFRzIsIHNyYzJ3KSk7CisJCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBUTVBfUkVHMiwgMCwgc3JjMSwgc3JjMXcpOworCQkJCUZBSUxfSUYoIWluc3QpOworCQkJCSppbnN0ID0gVEVTVF9ybV9yOworCQkJfQorI2Vsc2UKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgU0xKSVRfSU1NLCBzcmMydywgc3JjMSwgc3JjMXcpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IEdST1VQX0Y3OworI2VuZGlmCisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJfQorCQllbHNlIGlmIChGQVNUX0lTX1JFRyhzcmMxKSkgeworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBzcmMxLCAwLCBzcmMyLCBzcmMydyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gVEVTVF9ybV9yOworCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJCX0KKwl9CisKKwlpZiAoIShzcmMyICYgU0xKSVRfSU1NKSkgeworCQlpZiAoc3JjMSAmIFNMSklUX0lNTSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJCWlmIChJU19IQUxGV09SRChzcmMxdykgfHwgY29tcGlsZXItPm1vZGUzMikgeworCQkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgU0xKSVRfSU1NLCBzcmMxdywgc3JjMiwgc3JjMncpOworCQkJCUZBSUxfSUYoIWluc3QpOworCQkJCSppbnN0ID0gR1JPVVBfRjc7CisJCQl9CisJCQllbHNlIHsKKwkJCQlGQUlMX0lGKGVtaXRfbG9hZF9pbW02NChjb21waWxlciwgVE1QX1JFRzIsIHNyYzF3KSk7CisJCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBUTVBfUkVHMiwgMCwgc3JjMiwgc3JjMncpOworCQkJCUZBSUxfSUYoIWluc3QpOworCQkJCSppbnN0ID0gVEVTVF9ybV9yOworCQkJfQorI2Vsc2UKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgPSBHUk9VUF9GNzsKKyNlbmRpZgorCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJCX0KKwkJZWxzZSBpZiAoRkFTVF9JU19SRUcoc3JjMikpIHsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgc3JjMiwgMCwgc3JjMSwgc3JjMXcpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQkqaW5zdCA9IFRFU1Rfcm1fcjsKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQl9CisJfQorCisJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBzcmMxLCBzcmMxdyk7CisJaWYgKHNyYzIgJiBTTEpJVF9JTU0pIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJCWlmIChJU19IQUxGV09SRChzcmMydykgfHwgY29tcGlsZXItPm1vZGUzMikgeworCQkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxLCBTTEpJVF9JTU0sIHNyYzJ3LCBUTVBfUkVHMSwgMCk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gR1JPVVBfRjc7CisJCX0KKwkJZWxzZSB7CisJCQlGQUlMX0lGKGVtaXRfbG9hZF9pbW02NChjb21waWxlciwgVE1QX1JFRzIsIHNyYzJ3KSk7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFRNUF9SRUcyLCAwLCBUTVBfUkVHMSwgMCk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0ID0gVEVTVF9ybV9yOworCQl9CisjZWxzZQorCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIFNMSklUX0lNTSwgc3JjMncsIFRNUF9SRUcxLCAwKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCSppbnN0ID0gR1JPVVBfRjc7CisjZW5kaWYKKwl9CisJZWxzZSB7CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSwgVE1QX1JFRzEsIDAsIHNyYzIsIHNyYzJ3KTsKKwkJRkFJTF9JRighaW5zdCk7CisJCSppbnN0ID0gVEVTVF9ybV9yOworCX0KKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIHNsaml0X3NpIGVtaXRfc2hpZnQoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF91YiBtb2RlLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlzbGppdF91YiogaW5zdDsKKworCWlmICgoc3JjMiAmIFNMSklUX0lNTSkgfHwgKHNyYzIgPT0gU0xKSVRfUFJFRl9TSElGVF9SRUcpKSB7CisJCWlmIChkc3QgPT0gc3JjMSAmJiBkc3R3ID09IHNyYzF3KSB7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEgfCBFWDg2X1NISUZUX0lOUywgc3JjMiwgc3JjMncsIGRzdCwgZHN0dyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCSppbnN0IHw9IG1vZGU7CisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJfQorCQlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkgeworCQkJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBzcmMxLCBzcmMxdyk7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEgfCBFWDg2X1NISUZUX0lOUywgc3JjMiwgc3JjMncsIFRNUF9SRUcxLCAwKTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgfD0gbW9kZTsKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQl9CisJCWlmIChkc3QgPT0gU0xKSVRfUFJFRl9TSElGVF9SRUcgJiYgc3JjMiA9PSBTTEpJVF9QUkVGX1NISUZUX1JFRykgeworCQkJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBzcmMxLCBzcmMxdyk7CisJCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEgfCBFWDg2X1NISUZUX0lOUywgU0xKSVRfUFJFRl9TSElGVF9SRUcsIDAsIFRNUF9SRUcxLCAwKTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgfD0gbW9kZTsKKwkJCUVNSVRfTU9WKGNvbXBpbGVyLCBTTEpJVF9QUkVGX1NISUZUX1JFRywgMCwgVE1QX1JFRzEsIDApOworCQkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJCX0KKwkJaWYgKEZBU1RfSVNfUkVHKGRzdCkpIHsKKwkJCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3QsIDAsIHNyYzEsIHNyYzF3KTsKKwkJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSB8IEVYODZfU0hJRlRfSU5TLCBzcmMyLCBzcmMydywgZHN0LCAwKTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJKmluc3QgfD0gbW9kZTsKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQl9CisKKwkJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBzcmMxLCBzcmMxdyk7CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSB8IEVYODZfU0hJRlRfSU5TLCBzcmMyLCBzcmMydywgVE1QX1JFRzEsIDApOworCQlGQUlMX0lGKCFpbnN0KTsKKwkJKmluc3QgfD0gbW9kZTsKKwkJRU1JVF9NT1YoY29tcGlsZXIsIGRzdCwgZHN0dywgVE1QX1JFRzEsIDApOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwlpZiAoZHN0ID09IFNMSklUX1BSRUZfU0hJRlRfUkVHKSB7CisJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjMSwgc3JjMXcpOworCQlFTUlUX01PVihjb21waWxlciwgU0xKSVRfUFJFRl9TSElGVF9SRUcsIDAsIHNyYzIsIHNyYzJ3KTsKKwkJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAxIHwgRVg4Nl9TSElGVF9JTlMsIFNMSklUX1BSRUZfU0hJRlRfUkVHLCAwLCBUTVBfUkVHMSwgMCk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCB8PSBtb2RlOworCQlFTUlUX01PVihjb21waWxlciwgU0xKSVRfUFJFRl9TSElGVF9SRUcsIDAsIFRNUF9SRUcxLCAwKTsKKwl9CisJZWxzZSBpZiAoRkFTVF9JU19SRUcoZHN0KSAmJiBkc3QgIT0gc3JjMiAmJiAhQUREUkVTU0lOR19ERVBFTkRTX09OKHNyYzIsIGRzdCkpIHsKKwkJaWYgKHNyYzEgIT0gZHN0KQorCQkJRU1JVF9NT1YoY29tcGlsZXIsIGRzdCwgMCwgc3JjMSwgc3JjMXcpOworCQlFTUlUX01PVihjb21waWxlciwgVE1QX1JFRzEsIDAsIFNMSklUX1BSRUZfU0hJRlRfUkVHLCAwKTsKKwkJRU1JVF9NT1YoY29tcGlsZXIsIFNMSklUX1BSRUZfU0hJRlRfUkVHLCAwLCBzcmMyLCBzcmMydyk7CisJCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMSB8IEVYODZfU0hJRlRfSU5TLCBTTEpJVF9QUkVGX1NISUZUX1JFRywgMCwgZHN0LCAwKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCSppbnN0IHw9IG1vZGU7CisJCUVNSVRfTU9WKGNvbXBpbGVyLCBTTEpJVF9QUkVGX1NISUZUX1JFRywgMCwgVE1QX1JFRzEsIDApOworCX0KKwllbHNlIHsKKwkJLyogVGhpcyBjYXNlIGlzIHJlYWxseSBkaWZmaWN1bHQsIHNpbmNlIGVjeCBpdHNlbGYgbWF5IHVzZWQgZm9yCisJCSAgIGFkZHJlc3NpbmcsIGFuZCB3ZSBtdXN0IGVuc3VyZSB0byB3b3JrIGV2ZW4gaW4gdGhhdCBjYXNlLiAqLworCQlFTUlUX01PVihjb21waWxlciwgVE1QX1JFRzEsIDAsIHNyYzEsIHNyYzF3KTsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMiwgMCwgU0xKSVRfUFJFRl9TSElGVF9SRUcsIDApOworI2Vsc2UKKwkJLyogW2VzcCswXSBjb250YWlucyB0aGUgZmxhZ3MuICovCisJCUVNSVRfTU9WKGNvbXBpbGVyLCBTTEpJVF9NRU0xKFNMSklUX1NQKSwgc2l6ZW9mKHNsaml0X3N3KSwgU0xKSVRfUFJFRl9TSElGVF9SRUcsIDApOworI2VuZGlmCisJCUVNSVRfTU9WKGNvbXBpbGVyLCBTTEpJVF9QUkVGX1NISUZUX1JFRywgMCwgc3JjMiwgc3JjMncpOworCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEgfCBFWDg2X1NISUZUX0lOUywgU0xKSVRfUFJFRl9TSElGVF9SRUcsIDAsIFRNUF9SRUcxLCAwKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCSppbnN0IHw9IG1vZGU7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQorCQlFTUlUX01PVihjb21waWxlciwgU0xKSVRfUFJFRl9TSElGVF9SRUcsIDAsIFRNUF9SRUcyLCAwKTsKKyNlbHNlCisJCUVNSVRfTU9WKGNvbXBpbGVyLCBTTEpJVF9QUkVGX1NISUZUX1JFRywgMCwgU0xKSVRfTUVNMShTTEpJVF9TUCksIHNpemVvZihzbGppdF9zdykpOworI2VuZGlmCisJCUVNSVRfTU9WKGNvbXBpbGVyLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwKTsKKwl9CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIHNsaml0X3NpIGVtaXRfc2hpZnRfd2l0aF9mbGFncyhzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLAorCXNsaml0X3ViIG1vZGUsIHNsaml0X3NpIHNldF9mbGFncywKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjMSwgc2xqaXRfc3cgc3JjMXcsCisJc2xqaXRfc2kgc3JjMiwgc2xqaXRfc3cgc3JjMncpCit7CisJLyogVGhlIENQVSBkb2VzIG5vdCBzZXQgZmxhZ3MgaWYgdGhlIHNoaWZ0IGNvdW50IGlzIDAuICovCisJaWYgKHNyYzIgJiBTTEpJVF9JTU0pIHsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJCWlmICgoc3JjMncgJiAweDNmKSAhPSAwIHx8IChjb21waWxlci0+bW9kZTMyICYmIChzcmMydyAmIDB4MWYpICE9IDApKQorCQkJcmV0dXJuIGVtaXRfc2hpZnQoY29tcGlsZXIsIG1vZGUsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKyNlbHNlCisJCWlmICgoc3JjMncgJiAweDFmKSAhPSAwKQorCQkJcmV0dXJuIGVtaXRfc2hpZnQoY29tcGlsZXIsIG1vZGUsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKyNlbmRpZgorCQlpZiAoIXNldF9mbGFncykKKwkJCXJldHVybiBlbWl0X21vdihjb21waWxlciwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdyk7CisJCS8qIE9SIGRzdCwgc3JjLCAwICovCisJCXJldHVybiBlbWl0X2N1bV9iaW5hcnkoY29tcGlsZXIsIE9SX3Jfcm0sIE9SX3JtX3IsIE9SLCBPUl9FQVhfaTMyLAorCQkJZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgU0xKSVRfSU1NLCAwKTsKKwl9CisKKwlpZiAoIXNldF9mbGFncykKKwkJcmV0dXJuIGVtaXRfc2hpZnQoY29tcGlsZXIsIG1vZGUsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKworCWlmICghRkFTVF9JU19SRUcoZHN0KSkKKwkJRkFJTF9JRihlbWl0X2NtcF9iaW5hcnkoY29tcGlsZXIsIHNyYzEsIHNyYzF3LCBTTEpJVF9JTU0sIDApKTsKKworCUZBSUxfSUYoZW1pdF9zaGlmdChjb21waWxlcixtb2RlLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydykpOworCisJaWYgKEZBU1RfSVNfUkVHKGRzdCkpCisJCXJldHVybiBlbWl0X2NtcF9iaW5hcnkoY29tcGlsZXIsIGRzdCwgZHN0dywgU0xKSVRfSU1NLCAwKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMxLCBzcmMxdyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMyLCBzcmMydyk7CisKKwlDSEVDS19FWFRSQV9SRUdTKGRzdCwgZHN0dywgKHZvaWQpMCk7CisJQ0hFQ0tfRVhUUkFfUkVHUyhzcmMxLCBzcmMxdywgKHZvaWQpMCk7CisJQ0hFQ0tfRVhUUkFfUkVHUyhzcmMyLCBzcmMydywgKHZvaWQpMCk7CisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQorCWNvbXBpbGVyLT5tb2RlMzIgPSBvcCAmIFNMSklUX0lOVF9PUDsKKyNlbmRpZgorCisJaWYgKEdFVF9PUENPREUob3ApID49IFNMSklUX01VTCkgeworCQlpZiAoU0xKSVRfVU5MSUtFTFkoR0VUX0ZMQUdTKG9wKSkpCisJCQljb21waWxlci0+ZmxhZ3Nfc2F2ZWQgPSAwOworCQllbHNlIGlmIChTTEpJVF9VTkxJS0VMWShvcCAmIFNMSklUX0tFRVBfRkxBR1MpICYmICFjb21waWxlci0+ZmxhZ3Nfc2F2ZWQpCisJCQlGQUlMX0lGKGVtaXRfc2F2ZV9mbGFncyhjb21waWxlcikpOworCX0KKworCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKKwljYXNlIFNMSklUX0FERDoKKwkJaWYgKCFHRVRfRkxBR1Mob3ApKSB7CisJCQlpZiAoZW1pdF9sZWFfYmluYXJ5KGNvbXBpbGVyLCBvcCAmIFNMSklUX0tFRVBfRkxBR1MsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KSAhPSBTTEpJVF9FUlJfVU5TVVBQT1JURUQpCisJCQkJcmV0dXJuIGNvbXBpbGVyLT5lcnJvcjsKKwkJfQorCQllbHNlCisJCQljb21waWxlci0+ZmxhZ3Nfc2F2ZWQgPSAwOworCQlpZiAoU0xKSVRfVU5MSUtFTFkob3AgJiBTTEpJVF9LRUVQX0ZMQUdTKSAmJiAhY29tcGlsZXItPmZsYWdzX3NhdmVkKQorCQkJRkFJTF9JRihlbWl0X3NhdmVfZmxhZ3MoY29tcGlsZXIpKTsKKwkJcmV0dXJuIGVtaXRfY3VtX2JpbmFyeShjb21waWxlciwgQUREX3Jfcm0sIEFERF9ybV9yLCBBREQsIEFERF9FQVhfaTMyLAorCQkJZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOworCWNhc2UgU0xKSVRfQUREQzoKKwkJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5mbGFnc19zYXZlZCkpIC8qIEMgZmxhZyBtdXN0IGJlIHJlc3RvcmVkLiAqLworCQkJRkFJTF9JRihlbWl0X3Jlc3RvcmVfZmxhZ3MoY29tcGlsZXIsIDEpKTsKKwkJZWxzZSBpZiAoU0xKSVRfVU5MSUtFTFkob3AgJiBTTEpJVF9LRUVQX0ZMQUdTKSkKKwkJCUZBSUxfSUYoZW1pdF9zYXZlX2ZsYWdzKGNvbXBpbGVyKSk7CisJCWlmIChTTEpJVF9VTkxJS0VMWShHRVRfRkxBR1Mob3ApKSkKKwkJCWNvbXBpbGVyLT5mbGFnc19zYXZlZCA9IDA7CisJCXJldHVybiBlbWl0X2N1bV9iaW5hcnkoY29tcGlsZXIsIEFEQ19yX3JtLCBBRENfcm1fciwgQURDLCBBRENfRUFYX2kzMiwKKwkJCWRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwljYXNlIFNMSklUX1NVQjoKKwkJaWYgKCFHRVRfRkxBR1Mob3ApKSB7CisJCQlpZiAoKHNyYzIgJiBTTEpJVF9JTU0pICYmIGVtaXRfbGVhX2JpbmFyeShjb21waWxlciwgb3AgJiBTTEpJVF9LRUVQX0ZMQUdTLCBkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBTTEpJVF9JTU0sIC1zcmMydykgIT0gU0xKSVRfRVJSX1VOU1VQUE9SVEVEKQorCQkJCXJldHVybiBjb21waWxlci0+ZXJyb3I7CisJCX0KKwkJZWxzZQorCQkJY29tcGlsZXItPmZsYWdzX3NhdmVkID0gMDsKKwkJaWYgKFNMSklUX1VOTElLRUxZKG9wICYgU0xKSVRfS0VFUF9GTEFHUykgJiYgIWNvbXBpbGVyLT5mbGFnc19zYXZlZCkKKwkJCUZBSUxfSUYoZW1pdF9zYXZlX2ZsYWdzKGNvbXBpbGVyKSk7CisJCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQkJcmV0dXJuIGVtaXRfY21wX2JpbmFyeShjb21waWxlciwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwkJcmV0dXJuIGVtaXRfbm9uX2N1bV9iaW5hcnkoY29tcGlsZXIsIFNVQl9yX3JtLCBTVUJfcm1fciwgU1VCLCBTVUJfRUFYX2kzMiwKKwkJCWRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwljYXNlIFNMSklUX1NVQkM6CisJCWlmIChTTEpJVF9VTkxJS0VMWShjb21waWxlci0+ZmxhZ3Nfc2F2ZWQpKSAvKiBDIGZsYWcgbXVzdCBiZSByZXN0b3JlZC4gKi8KKwkJCUZBSUxfSUYoZW1pdF9yZXN0b3JlX2ZsYWdzKGNvbXBpbGVyLCAxKSk7CisJCWVsc2UgaWYgKFNMSklUX1VOTElLRUxZKG9wICYgU0xKSVRfS0VFUF9GTEFHUykpCisJCQlGQUlMX0lGKGVtaXRfc2F2ZV9mbGFncyhjb21waWxlcikpOworCQlpZiAoU0xKSVRfVU5MSUtFTFkoR0VUX0ZMQUdTKG9wKSkpCisJCQljb21waWxlci0+ZmxhZ3Nfc2F2ZWQgPSAwOworCQlyZXR1cm4gZW1pdF9ub25fY3VtX2JpbmFyeShjb21waWxlciwgU0JCX3Jfcm0sIFNCQl9ybV9yLCBTQkIsIFNCQl9FQVhfaTMyLAorCQkJZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOworCWNhc2UgU0xKSVRfTVVMOgorCQlyZXR1cm4gZW1pdF9tdWwoY29tcGlsZXIsIGRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwljYXNlIFNMSklUX0FORDoKKwkJaWYgKGRzdCA9PSBTTEpJVF9VTlVTRUQpCisJCQlyZXR1cm4gZW1pdF90ZXN0X2JpbmFyeShjb21waWxlciwgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwkJcmV0dXJuIGVtaXRfY3VtX2JpbmFyeShjb21waWxlciwgQU5EX3Jfcm0sIEFORF9ybV9yLCBBTkQsIEFORF9FQVhfaTMyLAorCQkJZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOworCWNhc2UgU0xKSVRfT1I6CisJCXJldHVybiBlbWl0X2N1bV9iaW5hcnkoY29tcGlsZXIsIE9SX3Jfcm0sIE9SX3JtX3IsIE9SLCBPUl9FQVhfaTMyLAorCQkJZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpOworCWNhc2UgU0xKSVRfWE9SOgorCQlyZXR1cm4gZW1pdF9jdW1fYmluYXJ5KGNvbXBpbGVyLCBYT1Jfcl9ybSwgWE9SX3JtX3IsIFhPUiwgWE9SX0VBWF9pMzIsCisJCQlkc3QsIGRzdHcsIHNyYzEsIHNyYzF3LCBzcmMyLCBzcmMydyk7CisJY2FzZSBTTEpJVF9TSEw6CisJCXJldHVybiBlbWl0X3NoaWZ0X3dpdGhfZmxhZ3MoY29tcGlsZXIsIFNITCwgR0VUX0ZMQUdTKG9wKSwKKwkJCWRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwljYXNlIFNMSklUX0xTSFI6CisJCXJldHVybiBlbWl0X3NoaWZ0X3dpdGhfZmxhZ3MoY29tcGlsZXIsIFNIUiwgR0VUX0ZMQUdTKG9wKSwKKwkJCWRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwljYXNlIFNMSklUX0FTSFI6CisJCXJldHVybiBlbWl0X3NoaWZ0X3dpdGhfZmxhZ3MoY29tcGlsZXIsIFNBUiwgR0VUX0ZMQUdTKG9wKSwKKwkJCWRzdCwgZHN0dywgc3JjMSwgc3JjMXcsIHNyYzIsIHNyYzJ3KTsKKwl9CisKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2dldF9yZWdpc3Rlcl9pbmRleChzbGppdF9zaSByZWcpCit7CisJQ0hFQ0tfUkVHX0lOREVYKGNoZWNrX3Nsaml0X2dldF9yZWdpc3Rlcl9pbmRleChyZWcpKTsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJaWYgKHJlZyA+PSBTTEpJVF9SMyAmJiByZWcgPD0gU0xKSVRfUjYpCisJCXJldHVybiAtMTsKKyNlbmRpZgorCXJldHVybiByZWdfbWFwW3JlZ107Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgoc2xqaXRfc2kgcmVnKQoreworCUNIRUNLX1JFR19JTkRFWChjaGVja19zbGppdF9nZXRfZmxvYXRfcmVnaXN0ZXJfaW5kZXgocmVnKSk7CisJcmV0dXJuIHJlZzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfY3VzdG9tKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJdm9pZCAqaW5zdHJ1Y3Rpb24sIHNsaml0X3NpIHNpemUpCit7CisJc2xqaXRfdWIgKmluc3Q7CisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfY3VzdG9tKGNvbXBpbGVyLCBpbnN0cnVjdGlvbiwgc2l6ZSkpOworCisJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIHNpemUpOworCUZBSUxfSUYoIWluc3QpOworCUlOQ19TSVpFKHNpemUpOworCVNMSklUX01FTU1PVkUoaW5zdCwgaW5zdHJ1Y3Rpb24sIHNpemUpOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qICBGbG9hdGluZyBwb2ludCBvcGVyYXRvcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIEFsaWdubWVudCArIDIgKiAxNiBieXRlcy4gKi8KK3N0YXRpYyBzbGppdF9zaSBzc2UyX2RhdGFbMyArICg0ICsgNCkgKiAyXTsKK3N0YXRpYyBzbGppdF9zaSAqc3NlMl9idWZmZXI7CisKK3N0YXRpYyB2b2lkIGluaXRfY29tcGlsZXIodm9pZCkKK3sKKwlzc2UyX2J1ZmZlciA9IChzbGppdF9zaSopKCgoc2xqaXRfdXcpc3NlMl9kYXRhICsgMTUpICYgfjB4Zik7CisJLyogU2luZ2xlIHByZWNpc2lvbiBjb25zdGFudHMuICovCisJc3NlMl9idWZmZXJbMF0gPSAweDgwMDAwMDAwOworCXNzZTJfYnVmZmVyWzRdID0gMHg3ZmZmZmZmZjsKKwkvKiBEb3VibGUgcHJlY2lzaW9uIGNvbnN0YW50cy4gKi8KKwlzc2UyX2J1ZmZlcls4XSA9IDA7CisJc3NlMl9idWZmZXJbOV0gPSAweDgwMDAwMDAwOworCXNzZTJfYnVmZmVyWzEyXSA9IDB4ZmZmZmZmZmY7CisJc3NlMl9idWZmZXJbMTNdID0gMHg3ZmZmZmZmZjsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2lzX2ZwdV9hdmFpbGFibGUodm9pZCkKK3sKKyNpZmRlZiBTTEpJVF9JU19GUFVfQVZBSUxBQkxFCisJcmV0dXJuIFNMSklUX0lTX0ZQVV9BVkFJTEFCTEU7CisjZWxpZiAoZGVmaW5lZCBTTEpJVF9ERVRFQ1RfU1NFMiAmJiBTTEpJVF9ERVRFQ1RfU1NFMikKKwlpZiAoY3B1X2hhc19zc2UyID09IC0xKQorCQlnZXRfY3B1X2ZlYXR1cmVzKCk7CisJcmV0dXJuIGNwdV9oYXNfc3NlMjsKKyNlbHNlIC8qIFNMSklUX0RFVEVDVF9TU0UyICovCisJcmV0dXJuIDE7CisjZW5kaWYgLyogU0xKSVRfREVURUNUX1NTRTIgKi8KK30KKworc3RhdGljIHNsaml0X3NpIGVtaXRfc3NlMihzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF91YiBvcGNvZGUsCisJc2xqaXRfc2kgc2luZ2xlLCBzbGppdF9zaSB4bW0xLCBzbGppdF9zaSB4bW0yLCBzbGppdF9zdyB4bW0ydykKK3sKKwlzbGppdF91YiAqaW5zdDsKKworCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMiB8IChzaW5nbGUgPyBFWDg2X1BSRUZfRjMgOiBFWDg2X1BSRUZfRjIpIHwgRVg4Nl9TU0UyLCB4bW0xLCAwLCB4bW0yLCB4bW0ydyk7CisJRkFJTF9JRighaW5zdCk7CisJKmluc3QrKyA9IEdST1VQXzBGOworCSppbnN0ID0gb3Bjb2RlOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgc2xqaXRfc2kgZW1pdF9zc2UyX2xvZ2ljKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3ViIG9wY29kZSwKKwlzbGppdF9zaSBwcmVmNjYsIHNsaml0X3NpIHhtbTEsIHNsaml0X3NpIHhtbTIsIHNsaml0X3N3IHhtbTJ3KQoreworCXNsaml0X3ViICppbnN0OworCisJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAyIHwgKHByZWY2NiA/IEVYODZfUFJFRl82NiA6IDApIHwgRVg4Nl9TU0UyLCB4bW0xLCAwLCB4bW0yLCB4bW0ydyk7CisJRkFJTF9JRighaW5zdCk7CisJKmluc3QrKyA9IEdST1VQXzBGOworCSppbnN0ID0gb3Bjb2RlOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIGVtaXRfc3NlMl9sb2FkKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsCisJc2xqaXRfc2kgc2luZ2xlLCBzbGppdF9zaSBkc3QsIHNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdykKK3sKKwlyZXR1cm4gZW1pdF9zc2UyKGNvbXBpbGVyLCBNT1ZTRF94X3htLCBzaW5nbGUsIGRzdCwgc3JjLCBzcmN3KTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBlbWl0X3NzZTJfc3RvcmUoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSBzaW5nbGUsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc2kgc3JjKQoreworCXJldHVybiBlbWl0X3NzZTIoY29tcGlsZXIsIE1PVlNEX3htX3gsIHNpbmdsZSwgc3JjLCBkc3QsIGRzdHcpOworfQorCitzdGF0aWMgU0xKSVRfSU5MSU5FIHNsaml0X3NpIHNsaml0X2VtaXRfZm9wMV9jb252d19mcm9tZChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSBvcCwKKwlzbGppdF9zaSBkc3QsIHNsaml0X3N3IGRzdHcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXNsaml0X3NpIGRzdF9yID0gU0xPV19JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcxOworCXNsaml0X3ViICppbnN0OworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQorCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WV19GUk9NRCkKKwkJY29tcGlsZXItPm1vZGUzMiA9IDA7CisjZW5kaWYKKworCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMiB8ICgob3AgJiBTTEpJVF9TSU5HTEVfT1ApID8gRVg4Nl9QUkVGX0YzIDogRVg4Nl9QUkVGX0YyKSB8IEVYODZfU1NFMl9PUDIsIGRzdF9yLCAwLCBzcmMsIHNyY3cpOworCUZBSUxfSUYoIWluc3QpOworCSppbnN0KysgPSBHUk9VUF8wRjsKKwkqaW5zdCA9IENWVFRTRDJTSV9yX3htOworCisJaWYgKGRzdF9yID09IFRNUF9SRUcxICYmIGRzdCAhPSBTTEpJVF9VTlVTRUQpCisJCXJldHVybiBlbWl0X21vdihjb21waWxlciwgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCk7CisJcmV0dXJuIFNMSklUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxX2NvbnZkX2Zyb213KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc2xqaXRfc2kgZHN0X3IgPSBGQVNUX0lTX1JFRyhkc3QpID8gZHN0IDogVE1QX0ZSRUc7CisJc2xqaXRfdWIgKmluc3Q7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01XKQorCQljb21waWxlci0+bW9kZTMyID0gMDsKKyNlbmRpZgorCisJaWYgKHNyYyAmIFNMSklUX0lNTSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0NPTlZEX0ZST01JKQorCQkJc3JjdyA9IChzbGppdF9zaSlzcmN3OworI2VuZGlmCisJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjLCBzcmN3KTsKKwkJc3JjID0gVE1QX1JFRzE7CisJCXNyY3cgPSAwOworCX0KKworCWluc3QgPSBlbWl0X3g4Nl9pbnN0cnVjdGlvbihjb21waWxlciwgMiB8ICgob3AgJiBTTEpJVF9TSU5HTEVfT1ApID8gRVg4Nl9QUkVGX0YzIDogRVg4Nl9QUkVGX0YyKSB8IEVYODZfU1NFMl9PUDEsIGRzdF9yLCAwLCBzcmMsIHNyY3cpOworCUZBSUxfSUYoIWluc3QpOworCSppbnN0KysgPSBHUk9VUF8wRjsKKwkqaW5zdCA9IENWVFNJMlNEX3hfcm07CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJY29tcGlsZXItPm1vZGUzMiA9IDE7CisjZW5kaWYKKwlpZiAoZHN0X3IgPT0gVE1QX0ZSRUcpCisJCXJldHVybiBlbWl0X3NzZTJfc3RvcmUoY29tcGlsZXIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3QsIGRzdHcsIFRNUF9GUkVHKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBzbGppdF9lbWl0X2ZvcDFfY21wKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIHNyYzEsIHNsaml0X3N3IHNyYzF3LAorCXNsaml0X3NpIHNyYzIsIHNsaml0X3N3IHNyYzJ3KQoreworCWNvbXBpbGVyLT5mbGFnc19zYXZlZCA9IDA7CisJaWYgKCFGQVNUX0lTX1JFRyhzcmMxKSkgeworCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2FkKGNvbXBpbGVyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgVE1QX0ZSRUcsIHNyYzEsIHNyYzF3KSk7CisJCXNyYzEgPSBUTVBfRlJFRzsKKwl9CisJcmV0dXJuIGVtaXRfc3NlMl9sb2dpYyhjb21waWxlciwgVUNPTUlTRF94X3htLCAhKG9wICYgU0xKSVRfU0lOR0xFX09QKSwgc3JjMSwgc3JjMiwgc3JjMncpOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AxKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMsIHNsaml0X3N3IHNyY3cpCit7CisJc2xqaXRfc2kgZHN0X3I7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJY29tcGlsZXItPm1vZGUzMiA9IDE7CisjZW5kaWYKKworCUNIRUNLX0VSUk9SKCk7CisJU0VMRUNUX0ZPUDFfT1BFUkFUSU9OX1dJVEhfQ0hFQ0tTKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMsIHNyY3cpOworCisJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX0RNT1YpIHsKKwkJaWYgKEZBU1RfSVNfUkVHKGRzdCkpCisJCQlyZXR1cm4gZW1pdF9zc2UyX2xvYWQoY29tcGlsZXIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3QsIHNyYywgc3Jjdyk7CisJCWlmIChGQVNUX0lTX1JFRyhzcmMpKQorCQkJcmV0dXJuIGVtaXRfc3NlMl9zdG9yZShjb21waWxlciwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIGRzdCwgZHN0dywgc3JjKTsKKwkJRkFJTF9JRihlbWl0X3NzZTJfbG9hZChjb21waWxlciwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIFRNUF9GUkVHLCBzcmMsIHNyY3cpKTsKKwkJcmV0dXJuIGVtaXRfc3NlMl9zdG9yZShjb21waWxlciwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIGRzdCwgZHN0dywgVE1QX0ZSRUcpOworCX0KKworCWlmIChHRVRfT1BDT0RFKG9wKSA9PSBTTEpJVF9DT05WRF9GUk9NUykgeworCQlkc3RfciA9IEZBU1RfSVNfUkVHKGRzdCkgPyBkc3QgOiBUTVBfRlJFRzsKKwkJaWYgKEZBU1RfSVNfUkVHKHNyYykpIHsKKwkJCS8qIFdlIG92ZXJ3cml0ZSB0aGUgaGlnaCBiaXRzIG9mIHNvdXJjZS4gRnJvbSBTTEpJVCBwb2ludCBvZiB2aWV3LAorCQkJICAgdGhpcyBpcyBub3QgYW4gaXNzdWUuCisJCQkgICBOb3RlOiBJbiBTU0UzLCB3ZSBjb3VsZCBhbHNvIHVzZSBNT1ZERFVQIGFuZCBNT1ZTTERVUC4gKi8KKwkJCUZBSUxfSUYoZW1pdF9zc2UyX2xvZ2ljKGNvbXBpbGVyLCBVTlBDS0xQRF94X3htLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgc3JjLCBzcmMsIDApKTsKKwkJfQorCQllbHNlIHsKKwkJCUZBSUxfSUYoZW1pdF9zc2UyX2xvYWQoY29tcGlsZXIsICEob3AgJiBTTEpJVF9TSU5HTEVfT1ApLCBUTVBfRlJFRywgc3JjLCBzcmN3KSk7CisJCQlzcmMgPSBUTVBfRlJFRzsKKwkJfQorCisJCUZBSUxfSUYoZW1pdF9zc2UyX2xvZ2ljKGNvbXBpbGVyLCBDVlRQRDJQU194X3htLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYywgMCkpOworCQlpZiAoZHN0X3IgPT0gVE1QX0ZSRUcpCisJCQlyZXR1cm4gZW1pdF9zc2UyX3N0b3JlKGNvbXBpbGVyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0LCBkc3R3LCBUTVBfRlJFRyk7CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCWlmIChTTE9XX0lTX1JFRyhkc3QpKSB7CisJCWRzdF9yID0gZHN0OworCQlpZiAoZHN0ICE9IHNyYykKKwkJCUZBSUxfSUYoZW1pdF9zc2UyX2xvYWQoY29tcGlsZXIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjLCBzcmN3KSk7CisJfQorCWVsc2UgeworCQlkc3RfciA9IFRNUF9GUkVHOworCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2FkKGNvbXBpbGVyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYywgc3JjdykpOworCX0KKworCXN3aXRjaCAoR0VUX09QQ09ERShvcCkpIHsKKwljYXNlIFNMSklUX0RORUc6CisJCUZBSUxfSUYoZW1pdF9zc2UyX2xvZ2ljKGNvbXBpbGVyLCBYT1JQRF94X3htLCAxLCBkc3RfciwgU0xKSVRfTUVNMCgpLCAoc2xqaXRfc3cpKG9wICYgU0xKSVRfU0lOR0xFX09QID8gc3NlMl9idWZmZXIgOiBzc2UyX2J1ZmZlciArIDgpKSk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9EQUJTOgorCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2dpYyhjb21waWxlciwgQU5EUERfeF94bSwgMSwgZHN0X3IsIFNMSklUX01FTTAoKSwgKHNsaml0X3N3KShvcCAmIFNMSklUX1NJTkdMRV9PUCA/IHNzZTJfYnVmZmVyICsgNCA6IHNzZTJfYnVmZmVyICsgMTIpKSk7CisJCWJyZWFrOworCX0KKworCWlmIChkc3RfciA9PSBUTVBfRlJFRykKKwkJcmV0dXJuIGVtaXRfc3NlMl9zdG9yZShjb21waWxlciwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIGRzdCwgZHN0dywgVE1QX0ZSRUcpOworCXJldHVybiBTTEpJVF9TVUNDRVNTOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZW1pdF9mb3AyKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIG9wLAorCXNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywKKwlzbGppdF9zaSBzcmMxLCBzbGppdF9zdyBzcmMxdywKKwlzbGppdF9zaSBzcmMyLCBzbGppdF9zdyBzcmMydykKK3sKKwlzbGppdF9zaSBkc3RfcjsKKworCUNIRUNLX0VSUk9SKCk7CisJQ0hFQ0soY2hlY2tfc2xqaXRfZW1pdF9mb3AyKGNvbXBpbGVyLCBvcCwgZHN0LCBkc3R3LCBzcmMxLCBzcmMxdywgc3JjMiwgc3JjMncpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMxLCBzcmMxdyk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChzcmMyLCBzcmMydyk7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJY29tcGlsZXItPm1vZGUzMiA9IDE7CisjZW5kaWYKKworCWlmIChGQVNUX0lTX1JFRyhkc3QpKSB7CisJCWRzdF9yID0gZHN0OworCQlpZiAoZHN0ID09IHNyYzEpCisJCQk7IC8qIERvIG5vdGhpbmcgaGVyZS4gKi8KKwkJZWxzZSBpZiAoZHN0ID09IHNyYzIgJiYgKG9wID09IFNMSklUX0RBREQgfHwgb3AgPT0gU0xKSVRfRE1VTCkpIHsKKwkJCS8qIFN3YXAgYXJndW1lbnRzLiAqLworCQkJc3JjMiA9IHNyYzE7CisJCQlzcmMydyA9IHNyYzF3OworCQl9CisJCWVsc2UgaWYgKGRzdCAhPSBzcmMyKQorCQkJRkFJTF9JRihlbWl0X3NzZTJfbG9hZChjb21waWxlciwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIGRzdF9yLCBzcmMxLCBzcmMxdykpOworCQllbHNlIHsKKwkJCWRzdF9yID0gVE1QX0ZSRUc7CisJCQlGQUlMX0lGKGVtaXRfc3NlMl9sb2FkKGNvbXBpbGVyLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgVE1QX0ZSRUcsIHNyYzEsIHNyYzF3KSk7CisJCX0KKwl9CisJZWxzZSB7CisJCWRzdF9yID0gVE1QX0ZSRUc7CisJCUZBSUxfSUYoZW1pdF9zc2UyX2xvYWQoY29tcGlsZXIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBUTVBfRlJFRywgc3JjMSwgc3JjMXcpKTsKKwl9CisKKwlzd2l0Y2ggKEdFVF9PUENPREUob3ApKSB7CisJY2FzZSBTTEpJVF9EQUREOgorCQlGQUlMX0lGKGVtaXRfc3NlMihjb21waWxlciwgQUREU0RfeF94bSwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIGRzdF9yLCBzcmMyLCBzcmMydykpOworCQlicmVhazsKKworCWNhc2UgU0xKSVRfRFNVQjoKKwkJRkFJTF9JRihlbWl0X3NzZTIoY29tcGlsZXIsIFNVQlNEX3hfeG0sIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3Rfciwgc3JjMiwgc3JjMncpKTsKKwkJYnJlYWs7CisKKwljYXNlIFNMSklUX0RNVUw6CisJCUZBSUxfSUYoZW1pdF9zc2UyKGNvbXBpbGVyLCBNVUxTRF94X3htLCBvcCAmIFNMSklUX1NJTkdMRV9PUCwgZHN0X3IsIHNyYzIsIHNyYzJ3KSk7CisJCWJyZWFrOworCisJY2FzZSBTTEpJVF9ERElWOgorCQlGQUlMX0lGKGVtaXRfc3NlMihjb21waWxlciwgRElWU0RfeF94bSwgb3AgJiBTTEpJVF9TSU5HTEVfT1AsIGRzdF9yLCBzcmMyLCBzcmMydykpOworCQlicmVhazsKKwl9CisKKwlpZiAoZHN0X3IgPT0gVE1QX0ZSRUcpCisJCXJldHVybiBlbWl0X3NzZTJfc3RvcmUoY29tcGlsZXIsIG9wICYgU0xKSVRfU0lOR0xFX09QLCBkc3QsIGRzdHcsIFRNUF9GUkVHKTsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgQ29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2xhYmVsKiBzbGppdF9lbWl0X2xhYmVsKHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIpCit7CisJc2xqaXRfdWIgKmluc3Q7CisJc3RydWN0IHNsaml0X2xhYmVsICpsYWJlbDsKKworCUNIRUNLX0VSUk9SX1BUUigpOworCUNIRUNLX1BUUihjaGVja19zbGppdF9lbWl0X2xhYmVsKGNvbXBpbGVyKSk7CisKKwkvKiBXZSBzaG91bGQgcmVzdG9yZSB0aGUgZmxhZ3MgYmVmb3JlIHRoZSBsYWJlbCwKKwkgICBzaW5jZSBvdGhlciB0YWtlbiBqdW1wcyBoYXMgdGhlaXIgb3duIGZsYWdzIGFzIHdlbGwuICovCisJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5mbGFnc19zYXZlZCkpCisJCVBUUl9GQUlMX0lGKGVtaXRfcmVzdG9yZV9mbGFncyhjb21waWxlciwgMCkpOworCisJaWYgKGNvbXBpbGVyLT5sYXN0X2xhYmVsICYmIGNvbXBpbGVyLT5sYXN0X2xhYmVsLT5zaXplID09IGNvbXBpbGVyLT5zaXplKQorCQlyZXR1cm4gY29tcGlsZXItPmxhc3RfbGFiZWw7CisKKwlsYWJlbCA9IChzdHJ1Y3Qgc2xqaXRfbGFiZWwqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2xhYmVsKSk7CisJUFRSX0ZBSUxfSUYoIWxhYmVsKTsKKwlzZXRfbGFiZWwobGFiZWwsIGNvbXBpbGVyKTsKKworCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDIpOworCVBUUl9GQUlMX0lGKCFpbnN0KTsKKworCSppbnN0KysgPSAwOworCSppbnN0KysgPSAwOworCisJcmV0dXJuIGxhYmVsOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2p1bXAqIHNsaml0X2VtaXRfanVtcChzdHJ1Y3Qgc2xqaXRfY29tcGlsZXIgKmNvbXBpbGVyLCBzbGppdF9zaSB0eXBlKQoreworCXNsaml0X3ViICppbnN0OworCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOworCisJQ0hFQ0tfRVJST1JfUFRSKCk7CisJQ0hFQ0tfUFRSKGNoZWNrX3Nsaml0X2VtaXRfanVtcChjb21waWxlciwgdHlwZSkpOworCisJaWYgKFNMSklUX1VOTElLRUxZKGNvbXBpbGVyLT5mbGFnc19zYXZlZCkpIHsKKwkJaWYgKCh0eXBlICYgMHhmZikgPD0gU0xKSVRfSlVNUCkKKwkJCVBUUl9GQUlMX0lGKGVtaXRfcmVzdG9yZV9mbGFncyhjb21waWxlciwgMCkpOworCQljb21waWxlci0+ZmxhZ3Nfc2F2ZWQgPSAwOworCX0KKworCWp1bXAgPSAoc3RydWN0IHNsaml0X2p1bXAqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2p1bXApKTsKKwlQVFJfRkFJTF9JRl9OVUxMKGp1bXApOworCXNldF9qdW1wKGp1bXAsIGNvbXBpbGVyLCB0eXBlICYgU0xKSVRfUkVXUklUQUJMRV9KVU1QKTsKKwl0eXBlICY9IDB4ZmY7CisKKwlpZiAodHlwZSA+PSBTTEpJVF9DQUxMMSkKKwkJUFRSX0ZBSUxfSUYoY2FsbF93aXRoX2FyZ3MoY29tcGlsZXIsIHR5cGUpKTsKKworCS8qIFdvcnN0IGNhc2Ugc2l6ZS4gKi8KKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJY29tcGlsZXItPnNpemUgKz0gKHR5cGUgPj0gU0xKSVRfSlVNUCkgPyA1IDogNjsKKyNlbHNlCisJY29tcGlsZXItPnNpemUgKz0gKHR5cGUgPj0gU0xKSVRfSlVNUCkgPyAoMTAgKyAzKSA6ICgyICsgMTAgKyAzKTsKKyNlbmRpZgorCisJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMik7CisJUFRSX0ZBSUxfSUZfTlVMTChpbnN0KTsKKworCSppbnN0KysgPSAwOworCSppbnN0KysgPSB0eXBlICsgNDsKKwlyZXR1cm4ganVtcDsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfaWp1bXAoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgdHlwZSwgc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXNsaml0X3ViICppbnN0OworCXN0cnVjdCBzbGppdF9qdW1wICpqdW1wOworCisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9lbWl0X2lqdW1wKGNvbXBpbGVyLCB0eXBlLCBzcmMsIHNyY3cpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CisKKwlDSEVDS19FWFRSQV9SRUdTKHNyYywgc3JjdywgKHZvaWQpMCk7CisKKwlpZiAoU0xKSVRfVU5MSUtFTFkoY29tcGlsZXItPmZsYWdzX3NhdmVkKSkgeworCQlpZiAodHlwZSA8PSBTTEpJVF9KVU1QKQorCQkJRkFJTF9JRihlbWl0X3Jlc3RvcmVfZmxhZ3MoY29tcGlsZXIsIDApKTsKKwkJY29tcGlsZXItPmZsYWdzX3NhdmVkID0gMDsKKwl9CisKKwlpZiAodHlwZSA+PSBTTEpJVF9DQUxMMSkgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKyNpZiAoZGVmaW5lZCBTTEpJVF9YODZfMzJfRkFTVENBTEwgJiYgU0xKSVRfWDg2XzMyX0ZBU1RDQUxMKQorCQlpZiAoc3JjID09IFNMSklUX1IyKSB7CisJCQlFTUlUX01PVihjb21waWxlciwgVE1QX1JFRzEsIDAsIHNyYywgMCk7CisJCQlzcmMgPSBUTVBfUkVHMTsKKwkJfQorCQlpZiAoc3JjID09IFNMSklUX01FTTEoU0xKSVRfU1ApICYmIHR5cGUgPj0gU0xKSVRfQ0FMTDMpCisJCQlzcmN3ICs9IHNpemVvZihzbGppdF9zdyk7CisjZW5kaWYKKyNlbmRpZgorI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkgJiYgZGVmaW5lZChfV0lONjQpCisJCWlmIChzcmMgPT0gU0xKSVRfUjIpIHsKKwkJCUVNSVRfTU9WKGNvbXBpbGVyLCBUTVBfUkVHMSwgMCwgc3JjLCAwKTsKKwkJCXNyYyA9IFRNUF9SRUcxOworCQl9CisjZW5kaWYKKwkJRkFJTF9JRihjYWxsX3dpdGhfYXJncyhjb21waWxlciwgdHlwZSkpOworCX0KKworCWlmIChzcmMgPT0gU0xKSVRfSU1NKSB7CisJCWp1bXAgPSAoc3RydWN0IHNsaml0X2p1bXAqKWVuc3VyZV9hYnVmKGNvbXBpbGVyLCBzaXplb2Yoc3RydWN0IHNsaml0X2p1bXApKTsKKwkJRkFJTF9JRl9OVUxMKGp1bXApOworCQlzZXRfanVtcChqdW1wLCBjb21waWxlciwgSlVNUF9BRERSKTsKKwkJanVtcC0+dS50YXJnZXQgPSBzcmN3OworCisJCS8qIFdvcnN0IGNhc2Ugc2l6ZS4gKi8KKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzMyICYmIFNMSklUX0NPTkZJR19YODZfMzIpCisJCWNvbXBpbGVyLT5zaXplICs9IDU7CisjZWxzZQorCQljb21waWxlci0+c2l6ZSArPSAxMCArIDM7CisjZW5kaWYKKworCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAyKTsKKwkJRkFJTF9JRl9OVUxMKGluc3QpOworCisJCSppbnN0KysgPSAwOworCQkqaW5zdCsrID0gdHlwZSArIDQ7CisJfQorCWVsc2UgeworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfNjQgJiYgU0xKSVRfQ09ORklHX1g4Nl82NCkKKwkJLyogUkVYX1cgaXMgbm90IG5lY2Vzc2FyeSAoc3JjIGlzIG5vdCBpbW1lZGlhdGUpLiAqLworCQljb21waWxlci0+bW9kZTMyID0gMTsKKyNlbmRpZgorCQlpbnN0ID0gZW1pdF94ODZfaW5zdHJ1Y3Rpb24oY29tcGlsZXIsIDEsIDAsIDAsIHNyYywgc3Jjdyk7CisJCUZBSUxfSUYoIWluc3QpOworCQkqaW5zdCsrID0gR1JPVVBfRkY7CisJCSppbnN0IHw9ICh0eXBlID49IFNMSklUX0ZBU1RfQ0FMTCkgPyBDQUxMX3JtIDogSk1QX3JtOworCX0KKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X2VtaXRfb3BfZmxhZ3Moc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgb3AsCisJc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LAorCXNsaml0X3NpIHNyYywgc2xqaXRfc3cgc3JjdywKKwlzbGppdF9zaSB0eXBlKQoreworCXNsaml0X3ViICppbnN0OworCXNsaml0X3ViIGNvbmRfc2V0ID0gMDsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJc2xqaXRfc2kgcmVnOworI2Vsc2UKKwkvKiBDSEVDS19FWFRSQV9SRUdTIG1pZ2ggb3ZlcndyaXRlIHRoZXNlIHZhbHVlcy4gKi8KKwlzbGppdF9zaSBkc3Rfc2F2ZSA9IGRzdDsKKwlzbGppdF9zdyBkc3R3X3NhdmUgPSBkc3R3OworI2VuZGlmCisKKwlDSEVDS19FUlJPUigpOworCUNIRUNLKGNoZWNrX3Nsaml0X2VtaXRfb3BfZmxhZ3MoY29tcGlsZXIsIG9wLCBkc3QsIGRzdHcsIHNyYywgc3JjdywgdHlwZSkpOworCVNMSklUX1VOVVNFRF9BUkcoc3Jjdyk7CisKKwlpZiAoZHN0ID09IFNMSklUX1VOVVNFRCkKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisJQ0hFQ0tfRVhUUkFfUkVHUyhkc3QsIGRzdHcsICh2b2lkKTApOworCWlmIChTTEpJVF9VTkxJS0VMWShjb21waWxlci0+ZmxhZ3Nfc2F2ZWQpKQorCQlGQUlMX0lGKGVtaXRfcmVzdG9yZV9mbGFncyhjb21waWxlciwgb3AgJiBTTEpJVF9LRUVQX0ZMQUdTKSk7CisKKwl0eXBlICY9IDB4ZmY7CisJLyogc2V0Y2MgPSBqY2MgKyAweDEwLiAqLworCWNvbmRfc2V0ID0gZ2V0X2p1bXBfY29kZSh0eXBlKSArIDB4MTA7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJaWYgKEdFVF9PUENPREUob3ApID09IFNMSklUX09SICYmICFHRVRfQUxMX0ZMQUdTKG9wKSAmJiBGQVNUX0lTX1JFRyhkc3QpICYmIGRzdCA9PSBzcmMpIHsKKwkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDQgKyAzKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCUlOQ19TSVpFKDQgKyAzKTsKKwkJLyogU2V0IGxvdyByZWdpc3RlciB0byBjb25kaXRpb25hbCBmbGFnLiAqLworCQkqaW5zdCsrID0gKHJlZ19tYXBbVE1QX1JFRzFdIDw9IDcpID8gUkVYIDogUkVYX0I7CisJCSppbnN0KysgPSBHUk9VUF8wRjsKKwkJKmluc3QrKyA9IGNvbmRfc2V0OworCQkqaW5zdCsrID0gTU9EX1JFRyB8IHJlZ19sbWFwW1RNUF9SRUcxXTsKKwkJKmluc3QrKyA9IFJFWCB8IChyZWdfbWFwW1RNUF9SRUcxXSA8PSA3ID8gMCA6IFJFWF9SKSB8IChyZWdfbWFwW2RzdF0gPD0gNyA/IDAgOiBSRVhfQik7CisJCSppbnN0KysgPSBPUl9ybThfcjg7CisJCSppbnN0KysgPSBNT0RfUkVHIHwgKHJlZ19sbWFwW1RNUF9SRUcxXSA8PCAzKSB8IHJlZ19sbWFwW2RzdF07CisJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCX0KKworCXJlZyA9IChvcCA9PSBTTEpJVF9NT1YgJiYgRkFTVF9JU19SRUcoZHN0KSkgPyBkc3QgOiBUTVBfUkVHMTsKKworCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyA0ICsgNCk7CisJRkFJTF9JRighaW5zdCk7CisJSU5DX1NJWkUoNCArIDQpOworCS8qIFNldCBsb3cgcmVnaXN0ZXIgdG8gY29uZGl0aW9uYWwgZmxhZy4gKi8KKwkqaW5zdCsrID0gKHJlZ19tYXBbcmVnXSA8PSA3KSA/IFJFWCA6IFJFWF9COworCSppbnN0KysgPSBHUk9VUF8wRjsKKwkqaW5zdCsrID0gY29uZF9zZXQ7CisJKmluc3QrKyA9IE1PRF9SRUcgfCByZWdfbG1hcFtyZWddOworCSppbnN0KysgPSBSRVhfVyB8IChyZWdfbWFwW3JlZ10gPD0gNyA/IDAgOiAoUkVYX0IgfCBSRVhfUikpOworCSppbnN0KysgPSBHUk9VUF8wRjsKKwkqaW5zdCsrID0gTU9WWlhfcl9ybTg7CisJKmluc3QgPSBNT0RfUkVHIHwgKHJlZ19sbWFwW3JlZ10gPDwgMykgfCByZWdfbG1hcFtyZWddOworCisJaWYgKHJlZyAhPSBUTVBfUkVHMSkKKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisKKwlpZiAoR0VUX09QQ09ERShvcCkgPCBTTEpJVF9BREQpIHsKKwkJY29tcGlsZXItPm1vZGUzMiA9IEdFVF9PUENPREUob3ApICE9IFNMSklUX01PVjsKKwkJcmV0dXJuIGVtaXRfbW92KGNvbXBpbGVyLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwKTsKKwl9CisjaWYgKGRlZmluZWQgU0xKSVRfVkVSQk9TRSAmJiBTTEpJVF9WRVJCT1NFKSBcCisJCXx8IChkZWZpbmVkIFNMSklUX0FSR1VNRU5UX0NIRUNLUyAmJiBTTEpJVF9BUkdVTUVOVF9DSEVDS1MpCisJY29tcGlsZXItPnNraXBfY2hlY2tzID0gMTsKKyNlbmRpZgorCXJldHVybiBzbGppdF9lbWl0X29wMihjb21waWxlciwgb3AsIGRzdCwgZHN0dywgZHN0LCBkc3R3LCBUTVBfUkVHMSwgMCk7CisjZWxzZSAvKiBTTEpJVF9DT05GSUdfWDg2XzY0ICovCisJaWYgKEdFVF9PUENPREUob3ApIDwgU0xKSVRfQUREICYmIEZBU1RfSVNfUkVHKGRzdCkpIHsKKwkJaWYgKHJlZ19tYXBbZHN0XSA8PSA0KSB7CisJCQkvKiBMb3cgYnl0ZSBpcyBhY2Nlc3NpYmxlLiAqLworCQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDMgKyAzKTsKKwkJCUZBSUxfSUYoIWluc3QpOworCQkJSU5DX1NJWkUoMyArIDMpOworCQkJLyogU2V0IGxvdyBieXRlIHRvIGNvbmRpdGlvbmFsIGZsYWcuICovCisJCQkqaW5zdCsrID0gR1JPVVBfMEY7CisJCQkqaW5zdCsrID0gY29uZF9zZXQ7CisJCQkqaW5zdCsrID0gTU9EX1JFRyB8IHJlZ19tYXBbZHN0XTsKKworCQkJKmluc3QrKyA9IEdST1VQXzBGOworCQkJKmluc3QrKyA9IE1PVlpYX3Jfcm04OworCQkJKmluc3QgPSBNT0RfUkVHIHwgKHJlZ19tYXBbZHN0XSA8PCAzKSB8IHJlZ19tYXBbZHN0XTsKKwkJCXJldHVybiBTTEpJVF9TVUNDRVNTOworCQl9CisKKwkJLyogTG93IGJ5dGUgaXMgbm90IGFjY2Vzc2libGUuICovCisJCWlmIChjcHVfaGFzX2Ntb3YgPT0gLTEpCisJCQlnZXRfY3B1X2ZlYXR1cmVzKCk7CisKKwkJaWYgKGNwdV9oYXNfY21vdikgeworCQkJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBTTEpJVF9JTU0sIDEpOworCQkJLyogYSB4b3IgcmVnLCByZWcgb3BlcmF0aW9uIHdvdWxkIG92ZXJ3cml0ZSB0aGUgZmxhZ3MuICovCisJCQlFTUlUX01PVihjb21waWxlciwgZHN0LCAwLCBTTEpJVF9JTU0sIDApOworCisJCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMyk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCUlOQ19TSVpFKDMpOworCisJCQkqaW5zdCsrID0gR1JPVVBfMEY7CisJCQkvKiBjbW92Y2MgPSBzZXRjYyAtIDB4NTAuICovCisJCQkqaW5zdCsrID0gY29uZF9zZXQgLSAweDUwOworCQkJKmluc3QrKyA9IE1PRF9SRUcgfCAocmVnX21hcFtkc3RdIDw8IDMpIHwgcmVnX21hcFtUTVBfUkVHMV07CisJCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwkJfQorCisJCWluc3QgPSAoc2xqaXRfdWIqKWVuc3VyZV9idWYoY29tcGlsZXIsIDEgKyAxICsgMyArIDMgKyAxKTsKKwkJRkFJTF9JRighaW5zdCk7CisJCUlOQ19TSVpFKDEgKyAzICsgMyArIDEpOworCQkqaW5zdCsrID0gWENIR19FQVhfciArIHJlZ19tYXBbVE1QX1JFRzFdOworCQkvKiBTZXQgYWwgdG8gY29uZGl0aW9uYWwgZmxhZy4gKi8KKwkJKmluc3QrKyA9IEdST1VQXzBGOworCQkqaW5zdCsrID0gY29uZF9zZXQ7CisJCSppbnN0KysgPSBNT0RfUkVHIHwgMCAvKiBlYXggKi87CisKKwkJKmluc3QrKyA9IEdST1VQXzBGOworCQkqaW5zdCsrID0gTU9WWlhfcl9ybTg7CisJCSppbnN0KysgPSBNT0RfUkVHIHwgKHJlZ19tYXBbZHN0XSA8PCAzKSB8IDAgLyogZWF4ICovOworCQkqaW5zdCsrID0gWENIR19FQVhfciArIHJlZ19tYXBbVE1QX1JFRzFdOworCQlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKKwl9CisKKwlpZiAoR0VUX09QQ09ERShvcCkgPT0gU0xKSVRfT1IgJiYgIUdFVF9BTExfRkxBR1Mob3ApICYmIEZBU1RfSVNfUkVHKGRzdCkgJiYgZHN0ID09IHNyYyAmJiByZWdfbWFwW2RzdF0gPD0gNCkgeworCQlTTEpJVF9DT01QSUxFX0FTU0VSVChyZWdfbWFwW1NMSklUX1IwXSA9PSAwLCBzY3JhdGNoX3JlZzFfbXVzdF9iZV9lYXgpOworCQlpZiAoZHN0ICE9IFNMSklUX1IwKSB7CisJCQlpbnN0ID0gKHNsaml0X3ViKillbnN1cmVfYnVmKGNvbXBpbGVyLCAxICsgMSArIDMgKyAyICsgMSk7CisJCQlGQUlMX0lGKCFpbnN0KTsKKwkJCUlOQ19TSVpFKDEgKyAzICsgMiArIDEpOworCQkJLyogU2V0IGxvdyByZWdpc3RlciB0byBjb25kaXRpb25hbCBmbGFnLiAqLworCQkJKmluc3QrKyA9IFhDSEdfRUFYX3IgKyByZWdfbWFwW1RNUF9SRUcxXTsKKwkJCSppbnN0KysgPSBHUk9VUF8wRjsKKwkJCSppbnN0KysgPSBjb25kX3NldDsKKwkJCSppbnN0KysgPSBNT0RfUkVHIHwgMCAvKiBlYXggKi87CisJCQkqaW5zdCsrID0gT1Jfcm04X3I4OworCQkJKmluc3QrKyA9IE1PRF9SRUcgfCAoMCAvKiBlYXggKi8gPDwgMykgfCByZWdfbWFwW2RzdF07CisJCQkqaW5zdCsrID0gWENIR19FQVhfciArIHJlZ19tYXBbVE1QX1JFRzFdOworCQl9CisJCWVsc2UgeworCQkJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDIgKyAzICsgMiArIDIpOworCQkJRkFJTF9JRighaW5zdCk7CisJCQlJTkNfU0laRSgyICsgMyArIDIgKyAyKTsKKwkJCS8qIFNldCBsb3cgcmVnaXN0ZXIgdG8gY29uZGl0aW9uYWwgZmxhZy4gKi8KKwkJCSppbnN0KysgPSBYQ0hHX3Jfcm07CisJCQkqaW5zdCsrID0gTU9EX1JFRyB8ICgxIC8qIGVjeCAqLyA8PCAzKSB8IHJlZ19tYXBbVE1QX1JFRzFdOworCQkJKmluc3QrKyA9IEdST1VQXzBGOworCQkJKmluc3QrKyA9IGNvbmRfc2V0OworCQkJKmluc3QrKyA9IE1PRF9SRUcgfCAxIC8qIGVjeCAqLzsKKwkJCSppbnN0KysgPSBPUl9ybThfcjg7CisJCQkqaW5zdCsrID0gTU9EX1JFRyB8ICgxIC8qIGVjeCAqLyA8PCAzKSB8IDAgLyogZWF4ICovOworCQkJKmluc3QrKyA9IFhDSEdfcl9ybTsKKwkJCSppbnN0KysgPSBNT0RfUkVHIHwgKDEgLyogZWN4ICovIDw8IDMpIHwgcmVnX21hcFtUTVBfUkVHMV07CisJCX0KKwkJcmV0dXJuIFNMSklUX1NVQ0NFU1M7CisJfQorCisJLyogU2V0IFRNUF9SRUcxIHRvIHRoZSBiaXQuICovCisJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMSArIDEgKyAzICsgMyArIDEpOworCUZBSUxfSUYoIWluc3QpOworCUlOQ19TSVpFKDEgKyAzICsgMyArIDEpOworCSppbnN0KysgPSBYQ0hHX0VBWF9yICsgcmVnX21hcFtUTVBfUkVHMV07CisJLyogU2V0IGFsIHRvIGNvbmRpdGlvbmFsIGZsYWcuICovCisJKmluc3QrKyA9IEdST1VQXzBGOworCSppbnN0KysgPSBjb25kX3NldDsKKwkqaW5zdCsrID0gTU9EX1JFRyB8IDAgLyogZWF4ICovOworCisJKmluc3QrKyA9IEdST1VQXzBGOworCSppbnN0KysgPSBNT1ZaWF9yX3JtODsKKwkqaW5zdCsrID0gTU9EX1JFRyB8ICgwIDw8IDMpIC8qIGVheCAqLyB8IDAgLyogZWF4ICovOworCisJKmluc3QrKyA9IFhDSEdfRUFYX3IgKyByZWdfbWFwW1RNUF9SRUcxXTsKKworCWlmIChHRVRfT1BDT0RFKG9wKSA8IFNMSklUX0FERCkKKwkJcmV0dXJuIGVtaXRfbW92KGNvbXBpbGVyLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwKTsKKworI2lmIChkZWZpbmVkIFNMSklUX1ZFUkJPU0UgJiYgU0xKSVRfVkVSQk9TRSkgXAorCQl8fCAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCWNvbXBpbGVyLT5za2lwX2NoZWNrcyA9IDE7CisjZW5kaWYKKwlyZXR1cm4gc2xqaXRfZW1pdF9vcDIoY29tcGlsZXIsIG9wLCBkc3Rfc2F2ZSwgZHN0d19zYXZlLCBkc3Rfc2F2ZSwgZHN0d19zYXZlLCBUTVBfUkVHMSwgMCk7CisjZW5kaWYgLyogU0xKSVRfQ09ORklHX1g4Nl82NCAqLworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfZ2V0X2xvY2FsX2Jhc2Uoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwgc2xqaXRfc2kgZHN0LCBzbGppdF9zdyBkc3R3LCBzbGppdF9zdyBvZmZzZXQpCit7CisJQ0hFQ0tfRVJST1IoKTsKKwlDSEVDSyhjaGVja19zbGppdF9nZXRfbG9jYWxfYmFzZShjb21waWxlciwgZHN0LCBkc3R3LCBvZmZzZXQpKTsKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKGRzdCwgZHN0dyk7CisKKwlDSEVDS19FWFRSQV9SRUdTKGRzdCwgZHN0dywgKHZvaWQpMCk7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJY29tcGlsZXItPm1vZGUzMiA9IDA7CisjZW5kaWYKKworCUFESlVTVF9MT0NBTF9PRkZTRVQoU0xKSVRfTUVNMShTTEpJVF9TUCksIG9mZnNldCk7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJaWYgKE5PVF9IQUxGV09SRChvZmZzZXQpKSB7CisJCUZBSUxfSUYoZW1pdF9sb2FkX2ltbTY0KGNvbXBpbGVyLCBUTVBfUkVHMSwgb2Zmc2V0KSk7CisjaWYgKGRlZmluZWQgU0xKSVRfREVCVUcgJiYgU0xKSVRfREVCVUcpCisJCVNMSklUX0FTU0VSVChlbWl0X2xlYV9iaW5hcnkoY29tcGlsZXIsIFNMSklUX0tFRVBfRkxBR1MsIGRzdCwgZHN0dywgU0xKSVRfU1AsIDAsIFRNUF9SRUcxLCAwKSAhPSBTTEpJVF9FUlJfVU5TVVBQT1JURUQpOworCQlyZXR1cm4gY29tcGlsZXItPmVycm9yOworI2Vsc2UKKwkJcmV0dXJuIGVtaXRfbGVhX2JpbmFyeShjb21waWxlciwgU0xKSVRfS0VFUF9GTEFHUywgZHN0LCBkc3R3LCBTTEpJVF9TUCwgMCwgVE1QX1JFRzEsIDApOworI2VuZGlmCisJfQorI2VuZGlmCisKKwlpZiAob2Zmc2V0ICE9IDApCisJCXJldHVybiBlbWl0X2xlYV9iaW5hcnkoY29tcGlsZXIsIFNMSklUX0tFRVBfRkxBR1MsIGRzdCwgZHN0dywgU0xKSVRfU1AsIDAsIFNMSklUX0lNTSwgb2Zmc2V0KTsKKwlyZXR1cm4gZW1pdF9tb3YoY29tcGlsZXIsIGRzdCwgZHN0dywgU0xKSVRfU1AsIDApOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X2NvbnN0KiBzbGppdF9lbWl0X2NvbnN0KHN0cnVjdCBzbGppdF9jb21waWxlciAqY29tcGlsZXIsIHNsaml0X3NpIGRzdCwgc2xqaXRfc3cgZHN0dywgc2xqaXRfc3cgaW5pdF92YWx1ZSkKK3sKKwlzbGppdF91YiAqaW5zdDsKKwlzdHJ1Y3Qgc2xqaXRfY29uc3QgKmNvbnN0XzsKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJc2xqaXRfc2kgcmVnOworI2VuZGlmCisKKwlDSEVDS19FUlJPUl9QVFIoKTsKKwlDSEVDS19QVFIoY2hlY2tfc2xqaXRfZW1pdF9jb25zdChjb21waWxlciwgZHN0LCBkc3R3LCBpbml0X3ZhbHVlKSk7CisJQURKVVNUX0xPQ0FMX09GRlNFVChkc3QsIGRzdHcpOworCisJQ0hFQ0tfRVhUUkFfUkVHUyhkc3QsIGRzdHcsICh2b2lkKTApOworCisJY29uc3RfID0gKHN0cnVjdCBzbGppdF9jb25zdCopZW5zdXJlX2FidWYoY29tcGlsZXIsIHNpemVvZihzdHJ1Y3Qgc2xqaXRfY29uc3QpKTsKKwlQVFJfRkFJTF9JRighY29uc3RfKTsKKwlzZXRfY29uc3QoY29uc3RfLCBjb21waWxlcik7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJY29tcGlsZXItPm1vZGUzMiA9IDA7CisJcmVnID0gU0xPV19JU19SRUcoZHN0KSA/IGRzdCA6IFRNUF9SRUcxOworCisJaWYgKGVtaXRfbG9hZF9pbW02NChjb21waWxlciwgcmVnLCBpbml0X3ZhbHVlKSkKKwkJcmV0dXJuIE5VTEw7CisjZWxzZQorCWlmIChkc3QgPT0gU0xKSVRfVU5VU0VEKQorCQlkc3QgPSBUTVBfUkVHMTsKKworCWlmIChlbWl0X21vdihjb21waWxlciwgZHN0LCBkc3R3LCBTTEpJVF9JTU0sIGluaXRfdmFsdWUpKQorCQlyZXR1cm4gTlVMTDsKKyNlbmRpZgorCisJaW5zdCA9IChzbGppdF91YiopZW5zdXJlX2J1Zihjb21waWxlciwgMik7CisJUFRSX0ZBSUxfSUYoIWluc3QpOworCisJKmluc3QrKyA9IDA7CisJKmluc3QrKyA9IDE7CisKKyNpZiAoZGVmaW5lZCBTTEpJVF9DT05GSUdfWDg2XzY0ICYmIFNMSklUX0NPTkZJR19YODZfNjQpCisJaWYgKGRzdCAmIFNMSklUX01FTSkKKwkJaWYgKGVtaXRfbW92KGNvbXBpbGVyLCBkc3QsIGRzdHcsIFRNUF9SRUcxLCAwKSkKKwkJCXJldHVybiBOVUxMOworI2VuZGlmCisKKwlyZXR1cm4gY29uc3RfOworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBzbGppdF9zZXRfanVtcF9hZGRyKHNsaml0X3V3IGFkZHIsIHNsaml0X3V3IG5ld19hZGRyKQoreworI2lmIChkZWZpbmVkIFNMSklUX0NPTkZJR19YODZfMzIgJiYgU0xKSVRfQ09ORklHX1g4Nl8zMikKKwkqKHNsaml0X3N3KilhZGRyID0gbmV3X2FkZHIgLSAoYWRkciArIDQpOworI2Vsc2UKKwkqKHNsaml0X3V3KilhZGRyID0gbmV3X2FkZHI7CisjZW5kaWYKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgc2xqaXRfc2V0X2NvbnN0KHNsaml0X3V3IGFkZHIsIHNsaml0X3N3IG5ld19jb25zdGFudCkKK3sKKwkqKHNsaml0X3N3KilhZGRyID0gbmV3X2NvbnN0YW50OworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc2xqaXRfc2kgc2xqaXRfeDg2X2lzX3NzZTJfYXZhaWxhYmxlKHZvaWQpCit7CisjaWYgKGRlZmluZWQgU0xKSVRfREVURUNUX1NTRTIgJiYgU0xKSVRfREVURUNUX1NTRTIpCisJaWYgKGNwdV9oYXNfc3NlMiA9PSAtMSkKKwkJZ2V0X2NwdV9mZWF0dXJlcygpOworCXJldHVybiBjcHVfaGFzX3NzZTI7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSBzbGppdF9zaSBzbGppdF94ODZfaXNfY21vdl9hdmFpbGFibGUodm9pZCkKK3sKKwlpZiAoY3B1X2hhc19jbW92ID09IC0xKQorCQlnZXRfY3B1X2ZlYXR1cmVzKCk7CisJcmV0dXJuIGNwdV9oYXNfY21vdjsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3NpIHNsaml0X3g4Nl9lbWl0X2Ntb3Yoc3RydWN0IHNsaml0X2NvbXBpbGVyICpjb21waWxlciwKKwlzbGppdF9zaSB0eXBlLAorCXNsaml0X3NpIGRzdF9yZWcsCisJc2xqaXRfc2kgc3JjLCBzbGppdF9zdyBzcmN3KQoreworCXNsaml0X3ViKiBpbnN0OworCisJQ0hFQ0tfRVJST1IoKTsKKyNpZiAoZGVmaW5lZCBTTEpJVF9BUkdVTUVOVF9DSEVDS1MgJiYgU0xKSVRfQVJHVU1FTlRfQ0hFQ0tTKQorCUNIRUNLX0FSR1VNRU5UKHNsaml0X3g4Nl9pc19jbW92X2F2YWlsYWJsZSgpKTsKKwlDSEVDS19BUkdVTUVOVCghKHR5cGUgJiB+KDB4ZmYgfCBTTEpJVF9JTlRfT1ApKSk7CisJQ0hFQ0tfQVJHVU1FTlQoKHR5cGUgJiAweGZmKSA+PSBTTEpJVF9FUVVBTCAmJiAodHlwZSAmIDB4ZmYpIDw9IFNMSklUX0RfT1JERVJFRCk7CisJQ0hFQ0tfQVJHVU1FTlQoRlVOQ1RJT05fQ0hFQ0tfSVNfUkVHKGRzdF9yZWcgJiB+U0xKSVRfSU5UX09QKSk7CisJRlVOQ1RJT05fQ0hFQ0tfU1JDKHNyYywgc3Jjdyk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZCBTTEpJVF9WRVJCT1NFICYmIFNMSklUX1ZFUkJPU0UpCisJaWYgKFNMSklUX1VOTElLRUxZKCEhY29tcGlsZXItPnZlcmJvc2UpKSB7CisJCWZwcmludGYoY29tcGlsZXItPnZlcmJvc2UsICIgIHg4Nl9jbW92JXMgJXMlcywgIiwKKwkJCSEoZHN0X3JlZyAmIFNMSklUX0lOVF9PUCkgPyAiIiA6ICIuaSIsCisJCQlKVU1QX1BSRUZJWCh0eXBlKSwganVtcF9uYW1lc1t0eXBlICYgMHhmZl0pOworCQlzbGppdF92ZXJib3NlX3JlZyhjb21waWxlciwgZHN0X3JlZyAmIH5TTEpJVF9JTlRfT1ApOworCQlmcHJpbnRmKGNvbXBpbGVyLT52ZXJib3NlLCAiLCAiKTsKKwkJc2xqaXRfdmVyYm9zZV9wYXJhbShjb21waWxlciwgc3JjLCBzcmN3KTsKKwkJZnByaW50Zihjb21waWxlci0+dmVyYm9zZSwgIlxuIik7CisJfQorI2VuZGlmCisKKwlBREpVU1RfTE9DQUxfT0ZGU0VUKHNyYywgc3Jjdyk7CisJQ0hFQ0tfRVhUUkFfUkVHUyhzcmMsIHNyY3csICh2b2lkKTApOworCisjaWYgKGRlZmluZWQgU0xKSVRfQ09ORklHX1g4Nl82NCAmJiBTTEpJVF9DT05GSUdfWDg2XzY0KQorCWNvbXBpbGVyLT5tb2RlMzIgPSBkc3RfcmVnICYgU0xKSVRfSU5UX09QOworI2VuZGlmCisJZHN0X3JlZyAmPSB+U0xKSVRfSU5UX09QOworCisJaWYgKFNMSklUX1VOTElLRUxZKHNyYyAmIFNMSklUX0lNTSkpIHsKKwkJRU1JVF9NT1YoY29tcGlsZXIsIFRNUF9SRUcxLCAwLCBTTEpJVF9JTU0sIHNyY3cpOworCQlzcmMgPSBUTVBfUkVHMTsKKwkJc3JjdyA9IDA7CisJfQorCisJaW5zdCA9IGVtaXRfeDg2X2luc3RydWN0aW9uKGNvbXBpbGVyLCAyLCBkc3RfcmVnLCAwLCBzcmMsIHNyY3cpOworCUZBSUxfSUYoIWluc3QpOworCSppbnN0KysgPSBHUk9VUF8wRjsKKwkqaW5zdCA9IGdldF9qdW1wX2NvZGUodHlwZSAmIDB4ZmYpIC0gMHg0MDsKKwlyZXR1cm4gU0xKSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL2Rpc3QyL3NyYy9zbGppdC9zbGppdFV0aWxzLmMgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRVdGlscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyOTRiNWYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi9zcmMvc2xqaXQvc2xqaXRVdGlscy5jCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogICAgU3RhY2stbGVzcyBKdXN0LUluLVRpbWUgY29tcGlsZXIKKyAqCisgKiAgICBDb3B5cmlnaHQgMjAwOS0yMDEyIFpvbHRhbiBIZXJjemVnIChoem1lc3RlckBmcmVlbWFpbC5odSkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlCisgKiBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mCisgKiAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0CisgKiAgICAgIG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQKKyAqIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogIExvY2tzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIChkZWZpbmVkIFNMSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SICYmIFNMSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SKSB8fCAoZGVmaW5lZCBTTEpJVF9VVElMX0dMT0JBTF9MT0NLICYmIFNMSklUX1VUSUxfR0xPQkFMX0xPQ0spCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9TSU5HTEVfVEhSRUFERUQgJiYgU0xKSVRfU0lOR0xFX1RIUkVBREVEKQorCisjaWYgKGRlZmluZWQgU0xKSVRfRVhFQ1VUQUJMRV9BTExPQ0FUT1IgJiYgU0xKSVRfRVhFQ1VUQUJMRV9BTExPQ0FUT1IpCisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBhbGxvY2F0b3JfZ3JhYl9sb2NrKHZvaWQpCit7CisJLyogQWx3YXlzIHN1Y2Nlc3NmdWwuICovCit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBhbGxvY2F0b3JfcmVsZWFzZV9sb2NrKHZvaWQpCit7CisJLyogQWx3YXlzIHN1Y2Nlc3NmdWwuICovCit9CisKKyNlbmRpZiAvKiBTTEpJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUiAqLworCisjaWYgKGRlZmluZWQgU0xKSVRfVVRJTF9HTE9CQUxfTE9DSyAmJiBTTEpJVF9VVElMX0dMT0JBTF9MT0NLKQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBTTEpJVF9DQUxMIHNsaml0X2dyYWJfbG9jayh2b2lkKQoreworCS8qIEFsd2F5cyBzdWNjZXNzZnVsLiAqLworfQorCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgdm9pZCBTTEpJVF9DQUxMIHNsaml0X3JlbGVhc2VfbG9jayh2b2lkKQoreworCS8qIEFsd2F5cyBzdWNjZXNzZnVsLiAqLworfQorCisjZW5kaWYgLyogU0xKSVRfVVRJTF9HTE9CQUxfTE9DSyAqLworCisjZWxpZiBkZWZpbmVkKF9XSU4zMikgLyogU0xKSVRfU0lOR0xFX1RIUkVBREVEICovCisKKyNpbmNsdWRlICJ3aW5kb3dzLmgiCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUiAmJiBTTEpJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUikKKworc3RhdGljIEhBTkRMRSBhbGxvY2F0b3JfbXV0ZXggPSAwOworCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgYWxsb2NhdG9yX2dyYWJfbG9jayh2b2lkKQoreworCS8qIE5vIGlkZWEgd2hhdCB0byBkbyBpZiBhbiBlcnJvciBvY2N1cmVzLiBTdGF0aWMgbXV0ZXhlcyBzaG91bGQgbmV2ZXIgZmFpbC4uLiAqLworCWlmICghYWxsb2NhdG9yX211dGV4KQorCQlhbGxvY2F0b3JfbXV0ZXggPSBDcmVhdGVNdXRleChOVUxMLCBUUlVFLCBOVUxMKTsKKwllbHNlCisJCVdhaXRGb3JTaW5nbGVPYmplY3QoYWxsb2NhdG9yX211dGV4LCBJTkZJTklURSk7Cit9CisKK3N0YXRpYyBTTEpJVF9JTkxJTkUgdm9pZCBhbGxvY2F0b3JfcmVsZWFzZV9sb2NrKHZvaWQpCit7CisJUmVsZWFzZU11dGV4KGFsbG9jYXRvcl9tdXRleCk7Cit9CisKKyNlbmRpZiAvKiBTTEpJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUiAqLworCisjaWYgKGRlZmluZWQgU0xKSVRfVVRJTF9HTE9CQUxfTE9DSyAmJiBTTEpJVF9VVElMX0dMT0JBTF9MT0NLKQorCitzdGF0aWMgSEFORExFIGdsb2JhbF9tdXRleCA9IDA7CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIFNMSklUX0NBTEwgc2xqaXRfZ3JhYl9sb2NrKHZvaWQpCit7CisJLyogTm8gaWRlYSB3aGF0IHRvIGRvIGlmIGFuIGVycm9yIG9jY3VyZXMuIFN0YXRpYyBtdXRleGVzIHNob3VsZCBuZXZlciBmYWlsLi4uICovCisJaWYgKCFnbG9iYWxfbXV0ZXgpCisJCWdsb2JhbF9tdXRleCA9IENyZWF0ZU11dGV4KE5VTEwsIFRSVUUsIE5VTEwpOworCWVsc2UKKwkJV2FpdEZvclNpbmdsZU9iamVjdChnbG9iYWxfbXV0ZXgsIElORklOSVRFKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgU0xKSVRfQ0FMTCBzbGppdF9yZWxlYXNlX2xvY2sodm9pZCkKK3sKKwlSZWxlYXNlTXV0ZXgoZ2xvYmFsX211dGV4KTsKK30KKworI2VuZGlmIC8qIFNMSklUX1VUSUxfR0xPQkFMX0xPQ0sgKi8KKworI2Vsc2UgLyogX1dJTjMyICovCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUiAmJiBTTEpJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUikKKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBhbGxvY2F0b3JfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCitzdGF0aWMgU0xKSVRfSU5MSU5FIHZvaWQgYWxsb2NhdG9yX2dyYWJfbG9jayh2b2lkKQoreworCXB0aHJlYWRfbXV0ZXhfbG9jaygmYWxsb2NhdG9yX211dGV4KTsKK30KKworc3RhdGljIFNMSklUX0lOTElORSB2b2lkIGFsbG9jYXRvcl9yZWxlYXNlX2xvY2sodm9pZCkKK3sKKwlwdGhyZWFkX211dGV4X3VubG9jaygmYWxsb2NhdG9yX211dGV4KTsKK30KKworI2VuZGlmIC8qIFNMSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SICovCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9VVElMX0dMT0JBTF9MT0NLICYmIFNMSklUX1VUSUxfR0xPQkFMX0xPQ0spCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ2xvYmFsX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHZvaWQgU0xKSVRfQ0FMTCBzbGppdF9ncmFiX2xvY2sodm9pZCkKK3sKKwlwdGhyZWFkX211dGV4X2xvY2soJmdsb2JhbF9tdXRleCk7Cit9CisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIFNMSklUX0NBTEwgc2xqaXRfcmVsZWFzZV9sb2NrKHZvaWQpCit7CisJcHRocmVhZF9tdXRleF91bmxvY2soJmdsb2JhbF9tdXRleCk7Cit9CisKKyNlbmRpZiAvKiBTTEpJVF9VVElMX0dMT0JBTF9MT0NLICovCisKKyNlbmRpZiAvKiBfV0lOMzIgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisvKiAgU3RhY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgKGRlZmluZWQgU0xKSVRfVVRJTF9TVEFDSyAmJiBTTEpJVF9VVElMX1NUQUNLKSB8fCAoZGVmaW5lZCBTTEpJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUiAmJiBTTEpJVF9FWEVDVVRBQkxFX0FMTE9DQVRPUikKKworI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNlbHNlCisvKiBQcm92aWRlcyBtbWFwIGZ1bmN0aW9uLiAqLworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisvKiBGb3IgZGV0ZWN0aW5nIHRoZSBwYWdlIHNpemUuICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZm5kZWYgTUFQX0FOT04KKworI2luY2x1ZGUgPGZjbnRsLmg+CisKKy8qIFNvbWUgb2xkIHN5c3RlbXMgZG9lcyBub3QgaGF2ZSBNQVBfQU5PTi4gKi8KK3N0YXRpYyBzbGppdF9zaSBkZXZfemVybyA9IC0xOworCisjaWYgKGRlZmluZWQgU0xKSVRfU0lOR0xFX1RIUkVBREVEICYmIFNMSklUX1NJTkdMRV9USFJFQURFRCkKKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBvcGVuX2Rldl96ZXJvKHZvaWQpCit7CisJZGV2X3plcm8gPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOworCXJldHVybiBkZXZfemVybyA8IDA7Cit9CisKKyNlbHNlIC8qIFNMSklUX1NJTkdMRV9USFJFQURFRCAqLworCisjaW5jbHVkZSA8cHRocmVhZC5oPgorCitzdGF0aWMgcHRocmVhZF9tdXRleF90IGRldl96ZXJvX211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKworc3RhdGljIFNMSklUX0lOTElORSBzbGppdF9zaSBvcGVuX2Rldl96ZXJvKHZvaWQpCit7CisJcHRocmVhZF9tdXRleF9sb2NrKCZkZXZfemVyb19tdXRleCk7CisJZGV2X3plcm8gPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOworCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZkZXZfemVyb19tdXRleCk7CisJcmV0dXJuIGRldl96ZXJvIDwgMDsKK30KKworI2VuZGlmIC8qIFNMSklUX1NJTkdMRV9USFJFQURFRCAqLworCisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAvKiBTTEpJVF9VVElMX1NUQUNLIHx8IFNMSklUX0VYRUNVVEFCTEVfQUxMT0NBVE9SICovCisKKyNpZiAoZGVmaW5lZCBTTEpJVF9VVElMX1NUQUNLICYmIFNMSklUX1VUSUxfU1RBQ0spCisKKy8qIFBsYW5uaW5nIHRvIG1ha2UgaXQgZXZlbiBtb3JlIGNsZXZlciBpbiB0aGUgZnV0dXJlLiAqLworc3RhdGljIHNsaml0X3N3IHNsaml0X3BhZ2VfYWxpZ24gPSAwOworCitTTEpJVF9BUElfRlVOQ19BVFRSSUJVVEUgc3RydWN0IHNsaml0X3N0YWNrKiBTTEpJVF9DQUxMIHNsaml0X2FsbG9jYXRlX3N0YWNrKHNsaml0X3V3IGxpbWl0LCBzbGppdF91dyBtYXhfbGltaXQsIHZvaWQgKmFsbG9jYXRvcl9kYXRhKQoreworCXN0cnVjdCBzbGppdF9zdGFjayAqc3RhY2s7CisJdW5pb24geworCQl2b2lkICpwdHI7CisJCXNsaml0X3V3IHV3OworCX0gYmFzZTsKKyNpZmRlZiBfV0lOMzIKKwlTWVNURU1fSU5GTyBzaTsKKyNlbmRpZgorCisJU0xKSVRfVU5VU0VEX0FSRyhhbGxvY2F0b3JfZGF0YSk7CisJaWYgKGxpbWl0ID4gbWF4X2xpbWl0IHx8IGxpbWl0IDwgMSkKKwkJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBfV0lOMzIKKwlpZiAoIXNsaml0X3BhZ2VfYWxpZ24pIHsKKwkJR2V0U3lzdGVtSW5mbygmc2kpOworCQlzbGppdF9wYWdlX2FsaWduID0gc2kuZHdQYWdlU2l6ZSAtIDE7CisJfQorI2Vsc2UKKwlpZiAoIXNsaml0X3BhZ2VfYWxpZ24pIHsKKwkJc2xqaXRfcGFnZV9hbGlnbiA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKwkJLyogU2hvdWxkIG5ldmVyIGhhcHBlbi4gKi8KKwkJaWYgKHNsaml0X3BhZ2VfYWxpZ24gPCAwKQorCQkJc2xqaXRfcGFnZV9hbGlnbiA9IDQwOTY7CisJCXNsaml0X3BhZ2VfYWxpZ24tLTsKKwl9CisjZW5kaWYKKworCS8qIEFsaWduIGxpbWl0IGFuZCBtYXhfbGltaXQuICovCisJbWF4X2xpbWl0ID0gKG1heF9saW1pdCArIHNsaml0X3BhZ2VfYWxpZ24pICYgfnNsaml0X3BhZ2VfYWxpZ247CisKKwlzdGFjayA9IChzdHJ1Y3Qgc2xqaXRfc3RhY2sqKVNMSklUX01BTExPQyhzaXplb2Yoc3RydWN0IHNsaml0X3N0YWNrKSwgYWxsb2NhdG9yX2RhdGEpOworCWlmICghc3RhY2spCisJCXJldHVybiBOVUxMOworCisjaWZkZWYgX1dJTjMyCisJYmFzZS5wdHIgPSBWaXJ0dWFsQWxsb2MoTlVMTCwgbWF4X2xpbWl0LCBNRU1fUkVTRVJWRSwgUEFHRV9SRUFEV1JJVEUpOworCWlmICghYmFzZS5wdHIpIHsKKwkJU0xKSVRfRlJFRShzdGFjaywgYWxsb2NhdG9yX2RhdGEpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc3RhY2stPmJhc2UgPSBiYXNlLnV3OworCXN0YWNrLT5saW1pdCA9IHN0YWNrLT5iYXNlOworCXN0YWNrLT5tYXhfbGltaXQgPSBzdGFjay0+YmFzZSArIG1heF9saW1pdDsKKwlpZiAoc2xqaXRfc3RhY2tfcmVzaXplKHN0YWNrLCBzdGFjay0+YmFzZSArIGxpbWl0KSkgeworCQlzbGppdF9mcmVlX3N0YWNrKHN0YWNrLCBhbGxvY2F0b3JfZGF0YSk7CisJCXJldHVybiBOVUxMOworCX0KKyNlbHNlCisjaWZkZWYgTUFQX0FOT04KKwliYXNlLnB0ciA9IG1tYXAoTlVMTCwgbWF4X2xpbWl0LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfUFJJVkFURSB8IE1BUF9BTk9OLCAtMSwgMCk7CisjZWxzZQorCWlmIChkZXZfemVybyA8IDApIHsKKwkJaWYgKG9wZW5fZGV2X3plcm8oKSkgeworCQkJU0xKSVRfRlJFRShzdGFjaywgYWxsb2NhdG9yX2RhdGEpOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9CisJYmFzZS5wdHIgPSBtbWFwKE5VTEwsIG1heF9saW1pdCwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUsIGRldl96ZXJvLCAwKTsKKyNlbmRpZgorCWlmIChiYXNlLnB0ciA9PSBNQVBfRkFJTEVEKSB7CisJCVNMSklUX0ZSRUUoc3RhY2ssIGFsbG9jYXRvcl9kYXRhKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXN0YWNrLT5iYXNlID0gYmFzZS51dzsKKwlzdGFjay0+bGltaXQgPSBzdGFjay0+YmFzZSArIGxpbWl0OworCXN0YWNrLT5tYXhfbGltaXQgPSBzdGFjay0+YmFzZSArIG1heF9saW1pdDsKKyNlbmRpZgorCXN0YWNrLT50b3AgPSBzdGFjay0+YmFzZTsKKwlyZXR1cm4gc3RhY2s7Cit9CisKKyN1bmRlZiBQQUdFX0FMSUdOCisKK1NMSklUX0FQSV9GVU5DX0FUVFJJQlVURSB2b2lkIFNMSklUX0NBTEwgc2xqaXRfZnJlZV9zdGFjayhzdHJ1Y3Qgc2xqaXRfc3RhY2sqIHN0YWNrLCB2b2lkICphbGxvY2F0b3JfZGF0YSkKK3sKKwlTTEpJVF9VTlVTRURfQVJHKGFsbG9jYXRvcl9kYXRhKTsKKyNpZmRlZiBfV0lOMzIKKwlWaXJ0dWFsRnJlZSgodm9pZCopc3RhY2stPmJhc2UsIDAsIE1FTV9SRUxFQVNFKTsKKyNlbHNlCisJbXVubWFwKCh2b2lkKilzdGFjay0+YmFzZSwgc3RhY2stPm1heF9saW1pdCAtIHN0YWNrLT5iYXNlKTsKKyNlbmRpZgorCVNMSklUX0ZSRUUoc3RhY2ssIGFsbG9jYXRvcl9kYXRhKTsKK30KKworU0xKSVRfQVBJX0ZVTkNfQVRUUklCVVRFIHNsaml0X3N3IFNMSklUX0NBTEwgc2xqaXRfc3RhY2tfcmVzaXplKHN0cnVjdCBzbGppdF9zdGFjayogc3RhY2ssIHNsaml0X3V3IG5ld19saW1pdCkKK3sKKwlzbGppdF91dyBhbGlnbmVkX29sZF9saW1pdDsKKwlzbGppdF91dyBhbGlnbmVkX25ld19saW1pdDsKKworCWlmICgobmV3X2xpbWl0ID4gc3RhY2stPm1heF9saW1pdCkgfHwgKG5ld19saW1pdCA8IHN0YWNrLT5iYXNlKSkKKwkJcmV0dXJuIC0xOworI2lmZGVmIF9XSU4zMgorCWFsaWduZWRfbmV3X2xpbWl0ID0gKG5ld19saW1pdCArIHNsaml0X3BhZ2VfYWxpZ24pICYgfnNsaml0X3BhZ2VfYWxpZ247CisJYWxpZ25lZF9vbGRfbGltaXQgPSAoc3RhY2stPmxpbWl0ICsgc2xqaXRfcGFnZV9hbGlnbikgJiB+c2xqaXRfcGFnZV9hbGlnbjsKKwlpZiAoYWxpZ25lZF9uZXdfbGltaXQgIT0gYWxpZ25lZF9vbGRfbGltaXQpIHsKKwkJaWYgKGFsaWduZWRfbmV3X2xpbWl0ID4gYWxpZ25lZF9vbGRfbGltaXQpIHsKKwkJCWlmICghVmlydHVhbEFsbG9jKCh2b2lkKilhbGlnbmVkX29sZF9saW1pdCwgYWxpZ25lZF9uZXdfbGltaXQgLSBhbGlnbmVkX29sZF9saW1pdCwgTUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpKQorCQkJCXJldHVybiAtMTsKKwkJfQorCQllbHNlIHsKKwkJCWlmICghVmlydHVhbEZyZWUoKHZvaWQqKWFsaWduZWRfbmV3X2xpbWl0LCBhbGlnbmVkX29sZF9saW1pdCAtIGFsaWduZWRfbmV3X2xpbWl0LCBNRU1fREVDT01NSVQpKQorCQkJCXJldHVybiAtMTsKKwkJfQorCX0KKwlzdGFjay0+bGltaXQgPSBuZXdfbGltaXQ7CisJcmV0dXJuIDA7CisjZWxzZQorCWlmIChuZXdfbGltaXQgPj0gc3RhY2stPmxpbWl0KSB7CisJCXN0YWNrLT5saW1pdCA9IG5ld19saW1pdDsKKwkJcmV0dXJuIDA7CisJfQorCWFsaWduZWRfbmV3X2xpbWl0ID0gKG5ld19saW1pdCArIHNsaml0X3BhZ2VfYWxpZ24pICYgfnNsaml0X3BhZ2VfYWxpZ247CisJYWxpZ25lZF9vbGRfbGltaXQgPSAoc3RhY2stPmxpbWl0ICsgc2xqaXRfcGFnZV9hbGlnbikgJiB+c2xqaXRfcGFnZV9hbGlnbjsKKwkvKiBJZiBtYWR2aXNlIGlzIGF2YWlsYWJsZSwgd2UgcmVsZWFzZSB0aGUgdW5uZWNlc3Nhcnkgc3BhY2UuICovCisjaWYgZGVmaW5lZChNQURWX0RPTlRORUVEKQorCWlmIChhbGlnbmVkX25ld19saW1pdCA8IGFsaWduZWRfb2xkX2xpbWl0KQorCQltYWR2aXNlKCh2b2lkKilhbGlnbmVkX25ld19saW1pdCwgYWxpZ25lZF9vbGRfbGltaXQgLSBhbGlnbmVkX25ld19saW1pdCwgTUFEVl9ET05UTkVFRCk7CisjZWxpZiBkZWZpbmVkKFBPU0lYX01BRFZfRE9OVE5FRUQpCisJaWYgKGFsaWduZWRfbmV3X2xpbWl0IDwgYWxpZ25lZF9vbGRfbGltaXQpCisJCXBvc2l4X21hZHZpc2UoKHZvaWQqKWFsaWduZWRfbmV3X2xpbWl0LCBhbGlnbmVkX29sZF9saW1pdCAtIGFsaWduZWRfbmV3X2xpbWl0LCBQT1NJWF9NQURWX0RPTlRORUVEKTsKKyNlbmRpZgorCXN0YWNrLT5saW1pdCA9IG5ld19saW1pdDsKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCisjZW5kaWYgLyogU0xKSVRfVVRJTF9TVEFDSyAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3QtZHJpdmVyIGIvZGlzdDIvdGVzdC1kcml2ZXIKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGU1NzViMAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3QtZHJpdmVyCkBAIC0wLDAgKzEsMTQ4IEBACisjISAvYmluL3NoCisjIHRlc3QtZHJpdmVyIC0gYmFzaWMgdGVzdHN1aXRlIGRyaXZlciBzY3JpcHQuCisKK3NjcmlwdHZlcnNpb249MjAxMy0wNy0xMy4yMjsgIyBVVEMKKworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKKyMgTWFrZSB1bmNvbmRpdGlvbmFsIGV4cGFuc2lvbiBvZiB1bmRlZmluZWQgdmFyaWFibGVzIGFuIGVycm9yLiAgVGhpcworIyBoZWxwcyBhIGxvdCBpbiBwcmV2ZW50aW5nIHR5cG8tcmVsYXRlZCBidWdzLgorc2V0IC11CisKK3VzYWdlX2Vycm9yICgpCit7CisgIGVjaG8gIiQwOiAkKiIgPiYyCisgIHByaW50X3VzYWdlID4mMgorICBleGl0IDIKK30KKworcHJpbnRfdXNhZ2UgKCkKK3sKKyAgY2F0IDw8RU5ECitVc2FnZToKKyAgdGVzdC1kcml2ZXIgLS10ZXN0LW5hbWU9TkFNRSAtLWxvZy1maWxlPVBBVEggLS10cnMtZmlsZT1QQVRICisgICAgICAgICAgICAgIFstLWV4cGVjdC1mYWlsdXJlPXt5ZXN8bm99XSBbLS1jb2xvci10ZXN0cz17eWVzfG5vfV0KKyAgICAgICAgICAgICAgWy0tZW5hYmxlLWhhcmQtZXJyb3JzPXt5ZXN8bm99XSBbLS1dCisgICAgICAgICAgICAgIFRFU1QtU0NSSVBUIFtURVNULVNDUklQVC1BUkdVTUVOVFNdCitUaGUgJy0tdGVzdC1uYW1lJywgJy0tbG9nLWZpbGUnIGFuZCAnLS10cnMtZmlsZScgb3B0aW9ucyBhcmUgbWFuZGF0b3J5LgorRU5ECit9CisKK3Rlc3RfbmFtZT0gIyBVc2VkIGZvciByZXBvcnRpbmcuCitsb2dfZmlsZT0gICMgV2hlcmUgdG8gc2F2ZSB0aGUgb3V0cHV0IG9mIHRoZSB0ZXN0IHNjcmlwdC4KK3Ryc19maWxlPSAgIyBXaGVyZSB0byBzYXZlIHRoZSBtZXRhZGF0YSBvZiB0aGUgdGVzdCBydW4uCitleHBlY3RfZmFpbHVyZT1ubworY29sb3JfdGVzdHM9bm8KK2VuYWJsZV9oYXJkX2Vycm9ycz15ZXMKK3doaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgIGNhc2UgJDEgaW4KKyAgLS1oZWxwKSBwcmludF91c2FnZTsgZXhpdCAkPzs7CisgIC0tdmVyc2lvbikgZWNobyAidGVzdC1kcml2ZXIgJHNjcmlwdHZlcnNpb24iOyBleGl0ICQ/OzsKKyAgLS10ZXN0LW5hbWUpIHRlc3RfbmFtZT0kMjsgc2hpZnQ7OworICAtLWxvZy1maWxlKSBsb2dfZmlsZT0kMjsgc2hpZnQ7OworICAtLXRycy1maWxlKSB0cnNfZmlsZT0kMjsgc2hpZnQ7OworICAtLWNvbG9yLXRlc3RzKSBjb2xvcl90ZXN0cz0kMjsgc2hpZnQ7OworICAtLWV4cGVjdC1mYWlsdXJlKSBleHBlY3RfZmFpbHVyZT0kMjsgc2hpZnQ7OworICAtLWVuYWJsZS1oYXJkLWVycm9ycykgZW5hYmxlX2hhcmRfZXJyb3JzPSQyOyBzaGlmdDs7CisgIC0tKSBzaGlmdDsgYnJlYWs7OworICAtKikgdXNhZ2VfZXJyb3IgImludmFsaWQgb3B0aW9uOiAnJDEnIjs7CisgICAqKSBicmVhazs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworbWlzc2luZ19vcHRzPQordGVzdCB4IiR0ZXN0X25hbWUiID0geCAmJiBtaXNzaW5nX29wdHM9IiRtaXNzaW5nX29wdHMgLS10ZXN0LW5hbWUiCit0ZXN0IHgiJGxvZ19maWxlIiAgPSB4ICYmIG1pc3Npbmdfb3B0cz0iJG1pc3Npbmdfb3B0cyAtLWxvZy1maWxlIgordGVzdCB4IiR0cnNfZmlsZSIgID0geCAmJiBtaXNzaW5nX29wdHM9IiRtaXNzaW5nX29wdHMgLS10cnMtZmlsZSIKK2lmIHRlc3QgeCIkbWlzc2luZ19vcHRzIiAhPSB4OyB0aGVuCisgIHVzYWdlX2Vycm9yICJ0aGUgZm9sbG93aW5nIG1hbmRhdG9yeSBvcHRpb25zIGFyZSBtaXNzaW5nOiRtaXNzaW5nX29wdHMiCitmaQorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIHVzYWdlX2Vycm9yICJtaXNzaW5nIGFyZ3VtZW50IgorZmkKKworaWYgdGVzdCAkY29sb3JfdGVzdHMgPSB5ZXM7IHRoZW4KKyAgIyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoICdsaWIvYW0vY2hlY2suYW06JChhbV9fdHR5X2NvbG9ycyknLgorICByZWQ9JxtbMDszMW0nICMgUmVkLgorICBncm49JxtbMDszMm0nICMgR3JlZW4uCisgIGxnbj0nG1sxOzMybScgIyBMaWdodCBncmVlbi4KKyAgYmx1PScbWzE7MzRtJyAjIEJsdWUuCisgIG1nbj0nG1swOzM1bScgIyBNYWdlbnRhLgorICBzdGQ9JxtbbScgICAgICMgTm8gY29sb3IuCitlbHNlCisgIHJlZD0gZ3JuPSBsZ249IGJsdT0gbWduPSBzdGQ9CitmaQorCitkb19leGl0PSdybSAtZiAkbG9nX2ZpbGUgJHRyc19maWxlOyAoZXhpdCAkc3QpOyBleGl0ICRzdCcKK3RyYXAgInN0PTEyOTsgJGRvX2V4aXQiIDEKK3RyYXAgInN0PTEzMDsgJGRvX2V4aXQiIDIKK3RyYXAgInN0PTE0MTsgJGRvX2V4aXQiIDEzCit0cmFwICJzdD0xNDM7ICRkb19leGl0IiAxNQorCisjIFRlc3Qgc2NyaXB0IGlzIHJ1biBoZXJlLgorIiRAIiA+JGxvZ19maWxlIDI+JjEKK2VzdGF0dXM9JD8KKworaWYgdGVzdCAkZW5hYmxlX2hhcmRfZXJyb3JzID0gbm8gJiYgdGVzdCAkZXN0YXR1cyAtZXEgOTk7IHRoZW4KKyAgdHdlYWtlZF9lc3RhdHVzPTEKK2Vsc2UKKyAgdHdlYWtlZF9lc3RhdHVzPSRlc3RhdHVzCitmaQorCitjYXNlICR0d2Vha2VkX2VzdGF0dXM6JGV4cGVjdF9mYWlsdXJlIGluCisgIDA6eWVzKSBjb2w9JHJlZCByZXM9WFBBU1MgcmVjaGVjaz15ZXMgZ2NvcHk9eWVzOzsKKyAgMDoqKSAgIGNvbD0kZ3JuIHJlcz1QQVNTICByZWNoZWNrPW5vICBnY29weT1ubzs7CisgIDc3OiopICBjb2w9JGJsdSByZXM9U0tJUCAgcmVjaGVjaz1ubyAgZ2NvcHk9eWVzOzsKKyAgOTk6KikgIGNvbD0kbWduIHJlcz1FUlJPUiByZWNoZWNrPXllcyBnY29weT15ZXM7OworICAqOnllcykgY29sPSRsZ24gcmVzPVhGQUlMIHJlY2hlY2s9bm8gIGdjb3B5PXllczs7CisgICo6KikgICBjb2w9JHJlZCByZXM9RkFJTCAgcmVjaGVjaz15ZXMgZ2NvcHk9eWVzOzsKK2VzYWMKKworIyBSZXBvcnQgdGhlIHRlc3Qgb3V0Y29tZSBhbmQgZXhpdCBzdGF0dXMgaW4gdGhlIGxvZ3MsIHNvIHRoYXQgb25lIGNhbgorIyBrbm93IHdoZXRoZXIgdGhlIHRlc3QgcGFzc2VkIG9yIGZhaWxlZCBzaW1wbHkgYnkgbG9va2luZyBhdCB0aGUgJy5sb2cnCisjIGZpbGUsIHdpdGhvdXQgdGhlIG5lZWQgb2YgYWxzbyBwZWFraW5nIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgJy50cnMnCisjIGZpbGUgKGF1dG9tYWtlIGJ1ZyMxMTgxNCkuCitlY2hvICIkcmVzICR0ZXN0X25hbWUgKGV4aXQgc3RhdHVzOiAkZXN0YXR1cykiID4+JGxvZ19maWxlCisKKyMgUmVwb3J0IG91dGNvbWUgdG8gY29uc29sZS4KK2VjaG8gIiR7Y29sfSR7cmVzfSR7c3RkfTogJHRlc3RfbmFtZSIKKworIyBSZWdpc3RlciB0aGUgdGVzdCByZXN1bHQsIGFuZCBvdGhlciByZWxldmFudCBtZXRhZGF0YS4KK2VjaG8gIjp0ZXN0LXJlc3VsdDogJHJlcyIgPiAkdHJzX2ZpbGUKK2VjaG8gIjpnbG9iYWwtdGVzdC1yZXN1bHQ6ICRyZXMiID4+ICR0cnNfZmlsZQorZWNobyAiOnJlY2hlY2s6ICRyZWNoZWNrIiA+PiAkdHJzX2ZpbGUKK2VjaG8gIjpjb3B5LWluLWdsb2JhbC1sb2c6ICRnY29weSIgPj4gJHRyc19maWxlCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS9ncmVwYmluYXJ5IGIvZGlzdDIvdGVzdGRhdGEvZ3JlcGJpbmFyeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWZhMTMwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvZ3JlcGJpbmFyeQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS9ncmVwZmlsZWxpc3QgYi9kaXN0Mi90ZXN0ZGF0YS9ncmVwZmlsZWxpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3M2VjNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBmaWxlbGlzdApAQCAtMCwwICsxLDMgQEAKK3Rlc3RkYXRhL2dyZXBpbnB1dHYKKwordGVzdGRhdGEvZ3JlcGlucHV0eApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvZ3JlcGlucHV0IGIvZGlzdDIvdGVzdGRhdGEvZ3JlcGlucHV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmMDBlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS9ncmVwaW5wdXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvZ3JlcGlucHV0MyBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBpbnB1dDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQwOWNmYwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBpbnB1dDMKQEAgLTAsMCArMSwxNSBAQAordHJpcGxlOgl0MV90eHQJczFfdGFnCXNfdHh0CXBfdGFnCXBfdHh0CW9fdGFnCW9fdHh0CisKK3RyaXBsZToJdDJfdHh0CXMxX3RhZwlzX3R4dAlwX3RhZwlwX3R4dAlvX3RhZwkKK0xvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ciBhZGlwaXNpY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uCisKK3RyaXBsZToJdDNfdHh0CXMyX3RhZwlzX3R4dAlwX3RhZwlwX3R4dAlvX3RhZwlvX3R4dAorCit0cmlwbGU6CXQ0X3R4dAlzMV90YWcJc190eHQJcF90YWcJcF90eHQJb190YWcJb190eHQKKwordHJpcGxlOgl0NV90eHQJczFfdGFnCXNfdHh0CXBfdGFnCXBfdHh0CW9fdGFnCQorb190eHQKKwordHJpcGxlOgl0Nl90eHQJczJfdGFnCXNfdHh0CXBfdGFnCXBfdHh0CW9fdGFnCW9fdHh0CisKK3RyaXBsZToJdDdfdHh0CXMxX3RhZwlzX3R4dAlwX3RhZwlwX3R4dAlvX3RhZwlvX3R4dApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvZ3JlcGlucHV0OCBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBpbnB1dDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc3OWNkYwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBpbnB1dDgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvZ3JlcGlucHV0diBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBpbnB1dHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMzZDMyNgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBpbnB1dHYKQEAgLTAsMCArMSw0IEBACitUaGUgcXVpY2sgYnJvd24KK2ZveCBqdW1wcworb3ZlciB0aGUgbGF6eSBkb2cuCitUaGlzIHRpbWUgaXQganVtcHMgYW5kIGp1bXBzIGFuZCBqdW1wcy4KZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL2dyZXBpbnB1dHggYi9kaXN0Mi90ZXN0ZGF0YS9ncmVwaW5wdXR4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczMGNjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS9ncmVwaW5wdXR4CkBAIC0wLDAgKzEsNDMgQEAKK1RoaXMgaXMgYSBzZWNvbmQgZmlsZSBvZiBpbnB1dCBmb3IgdGhlIHBjcmVncmVwIHRlc3RzLgorCitIZXJlIGlzIHRoZSBwYXR0ZXJuIGFnYWluLgorCitQYXR0ZXJuCitUaGF0IHRpbWUgaXQgd2FzIG9uIGEgbGluZSBieSBpdHNlbGYuCisKK1RvIHBhdCBvciBub3QgdG8gcGF0LCB0aGF0IGlzIHRoZSBxdWVzdGlvbi4KKworY29tcGxldGUgcGFpcgorb2YgbGluZXMKKworVGhhdCB3YXMgYSBjb21wbGV0ZSBwYWlyCitvZiBsaW5lcyBhbGwgYnkgdGhlbXNlbHZlcy4KKworY29tcGxldGUgcGFpcgorb2YgbGluZXMKKworQW5kIHRoZXJlIHRoZXkgd2VyZSBhZ2FpbiwgdG8gY2hlY2sgbGluZSBudW1iZXJzLgorCitvbmUKK3R3bwordGhyZWUKK2ZvdXIKK2ZpdmUKK3NpeAorc2V2ZW4KK2VpZ2h0CituaW5lCit0ZW4KK2VsZXZlbgordHdlbHZlCit0aGlydGVlbgorZm91cnRlZW4KK2ZpZnRlZW4KK3NpeHRlZW4KK3NldmVudGVlbgorZWlnaHRlZW4KK25pbmV0ZWVuCit0d2VudHkKKworVGhpcyBsaW5lIGNvbnRhaW5zIHBhdHRlcm4gbm90IG9uIGEgbGluZSBieSBpdHNlbGYuCitUaGlzIGlzIHRoZSBsYXN0IGxpbmUgb2YgdGhpcyBmaWxlLgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvZ3JlcGxpc3QgYi9kaXN0Mi90ZXN0ZGF0YS9ncmVwbGlzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDM0YWU5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvZ3JlcGxpc3QKQEAgLTAsMCArMSw3IEBACitUaGlzIGlzIGEgZmlsZSBvZiBwYXR0ZXJucyBmb3IgdGVzdGluZyB0aGUgLWYgb3B0aW9uLiBEb24ndCBpbmNsdWRlIGFueSBibGFuaworbGluZXMgYmVjYXVzZSB0aGV5IHdpbGwgbWF0Y2ggZXZlcnl0aGluZyEgVGhpcyBpcyBubyBsb25nZXIgdHJ1ZSwgc28gaGF2ZSBvbmUuCisKK3BhdHRlcm4KK2xpbmUgYnkgaXRzZWxmCisKK0VuZCBvZiB0aGUgbGlzdCBvZiBwYXR0ZXJucy4KZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL2dyZXBvdXRwdXQgYi9kaXN0Mi90ZXN0ZGF0YS9ncmVwb3V0cHV0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNjcwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS9ncmVwb3V0cHV0CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL2dyZXBvdXRwdXQ4IGIvZGlzdDIvdGVzdGRhdGEvZ3JlcG91dHB1dDgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFlZDZhZQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBvdXRwdXQ4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL2dyZXBvdXRwdXROIGIvZGlzdDIvdGVzdGRhdGEvZ3JlcG91dHB1dE4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY5Zjg4MAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBvdXRwdXROCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL2dyZXBwYXRONCBiL2Rpc3QyL3Rlc3RkYXRhL2dyZXBwYXRONApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTFiZmM3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvZ3JlcHBhdE40CkBAIC0wLDAgKzEsMiBAQAoreHh4DQoramtsClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MSBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3YmM4MAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDEKQEAgLTAsMCArMSw1Nzk1IEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciBmZWF0dXJlcyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggYWxsIHZlcnNpb25zIG9mCisjIFBlcmwgPj0gNS4xMCwgaW4gbm9uLVVURiBtb2RlLiBJdCBzaG91bGQgcnVuIGNsZWFuIGZvciB0aGUgOC1iaXQsIDE2LWJpdCwgYW5kCisjIDMyLWJpdCBQQ1JFIGxpYnJhcmllcywgYW5kIGFsc28gdXNpbmcgdGhlIHBlcmx0ZXN0LnBsIHNjcmlwdC4KKyAgICAKKyNmb3JiaWRfdXRmCisjbmV3bGluZV9kZWZhdWx0IGxmIGFueSBhbnljcmxmCisjcGVybHRlc3QKKworL3RoZSBxdWljayBicm93biBmb3gvCisgICAgdGhlIHF1aWNrIGJyb3duIGZveAorICAgIFdoYXQgZG8geW91IGtub3cgYWJvdXQgdGhlIHF1aWNrIGJyb3duIGZveD8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFRoZSBxdWljayBicm93biBGT1gKKyAgICBXaGF0IGRvIHlvdSBrbm93IGFib3V0IFRIRSBRVUlDSyBCUk9XTiBGT1g/CisKKy9UaGUgcXVpY2sgYnJvd24gZm94L2kKKyAgICB0aGUgcXVpY2sgYnJvd24gZm94CisgICAgVGhlIHF1aWNrIGJyb3duIEZPWAorICAgIFdoYXQgZG8geW91IGtub3cgYWJvdXQgdGhlIHF1aWNrIGJyb3duIGZveD8KKyAgICBXaGF0IGRvIHlvdSBrbm93IGFib3V0IFRIRSBRVUlDSyBCUk9XTiBGT1g/CisKKy9hYmNkXHRcblxyXGZcYVxlXDA3MVx4M2JcJFxcXD9jYXh5ei8KKyAgICBhYmNkXHRcblxyXGZcYVxlOTtcJFxcP2NheHl6CisKKy9hKmFiYz94eXorcHFyezN9YWJ7Mix9eHl7NCw1fXBxezAsNn1BQnswLH16ei8KKyAgICBhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWJjeHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFiY3h5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBBenoKKyAgICBhYWFiY3h5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFBenoKKyAgICBhYWFiY3h5enBxcnJyYWJieHl5eXlwcXFxcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFxcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFxcXFBenoKKyAgICBhYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYnh5enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWJ4eXp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWJ4eXp6enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWFhYnh5enp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFiY3h5enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWJjeHl6enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWFiY3h5enp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWFiY3h5enp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWFiY3h5enp6enBxcnJyYWJiYnh5eXl5cHFBenoKKyAgICBhYWFhYmN4eXp6enpwcXJycmFiYmJ4eXl5eXlwcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBBQnp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cEFCQnp6CisgICAgPj4+YWFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgID5hYWFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgID4+Pj5hYmN4eXpwcXJycmFiYnh5eXl5cHFBenoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFieHl6cHFycmFiYnh5eXl5cHFBenoKKyAgICBhYnh5enBxcnJycmFiYnh5eXl5cHFBenoKKyAgICBhYnh5enBxcnJyYWJ4eXl5eXBxQXp6CisgICAgYWFhYWJjeHl6enp6cHFycnJhYmJieHl5eXl5eXBxQXp6CisgICAgYWFhYWJjeHl6enp6cHFycnJhYmJieHl5eXBxQXp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFxcXFxcXFBenoKKworL14oYWJjKXsxLDJ9enovCisgICAgYWJjenoKKyAgICBhYmNhYmN6egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgenoKKyAgICBhYmNhYmNhYmN6egorICAgID4+YWJjenoKKworL14oYis/fGEpezEsMn0/Yy8KKyAgICBiYworICAgIGJiYworICAgIGJiYmMKKyAgICBiYWMKKyAgICBiYmFjCisgICAgYWFjCisgICAgYWJiYmJiYmJiYmJiYworICAgIGJiYmJiYmJiYmJiYWMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWMKKyAgICBhYmJiYmJiYmJiYmJhYworCisvXihiK3xhKXsxLDJ9Yy8KKyAgICBiYworICAgIGJiYworICAgIGJiYmMKKyAgICBiYWMKKyAgICBiYmFjCisgICAgYWFjCisgICAgYWJiYmJiYmJiYmJiYworICAgIGJiYmJiYmJiYmJiYWMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWMKKyAgICBhYmJiYmJiYmJiYmJhYworCisvXihiK3xhKXsxLDJ9P2JjLworICAgIGJiYworCisvXihiKnxiYSl7MSwyfT9iYy8KKyAgICBiYWJjCisgICAgYmJhYmMKKyAgICBiYWJhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhYmFiYmMKKyAgICBiYWJhYmFiYworCisvXihiYXxiKil7MSwyfT9iYy8KKyAgICBiYWJjCisgICAgYmJhYmMKKyAgICBiYWJhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhYmFiYmMKKyAgICBiYWJhYmFiYworCisvXlxjYVxjQVxjWztcYzovCisgICAgXHgwMVx4MDFcZTt6CisKKy9eW2FiXF1jZGVdLworICAgIGF0aGluZworICAgIGJ0aGluZworICAgIF10aGluZworICAgIGN0aGluZworICAgIGR0aGluZworICAgIGV0aGluZworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZnRoaW5nCisgICAgW3RoaW5nCisgICAgXFx0aGluZworCisvXltdY2RlXS8KKyAgICBddGhpbmcKKyAgICBjdGhpbmcKKyAgICBkdGhpbmcKKyAgICBldGhpbmcKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGF0aGluZworICAgIGZ0aGluZworCisvXlteYWJcXWNkZV0vCisgICAgZnRoaW5nCisgICAgW3RoaW5nCisgICAgXFx0aGluZworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYXRoaW5nCisgICAgYnRoaW5nCisgICAgXXRoaW5nCisgICAgY3RoaW5nCisgICAgZHRoaW5nCisgICAgZXRoaW5nCisKKy9eW15dY2RlXS8KKyAgICBhdGhpbmcKKyAgICBmdGhpbmcKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIF10aGluZworICAgIGN0aGluZworICAgIGR0aGluZworICAgIGV0aGluZworCisvXlyBLworICAgIIEKKworL17/LworICAgIP8KKworL15bMC05XSskLworICAgIDAKKyAgICAxCisgICAgMgorICAgIDMKKyAgICA0CisgICAgNQorICAgIDYKKyAgICA3CisgICAgOAorICAgIDkKKyAgICAxMAorICAgIDEwMAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCisKKy9eLipudGVyLworICAgIGVudGVyCisgICAgaW50ZXIKKyAgICB1cG9udGVyCisKKy9eeHh4WzAtOV0rJC8KKyAgICB4eHgwCisgICAgeHh4MTIzNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHh4CisKKy9eLitbMC05XVswLTldWzAtOV0kLworICAgIHgxMjMKKyAgICB4MTIzNAorICAgIHh4MTIzCisgICAgMTIzNDU2CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjMKKworL14uKz9bMC05XVswLTldWzAtOV0kLworICAgIHgxMjMKKyAgICB4MTIzNAorICAgIHh4MTIzCisgICAgMTIzNDU2CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjMKKworL14oW14hXSspISguKyk9YXBxdXh6XC5peHJcLnp6elwuYWNcLnVrJC8KKyAgICBhYmMhcHFyPWFwcXV4ei5peHIuenp6LmFjLnVrCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAhcHFyPWFwcXV4ei5peHIuenp6LmFjLnVrCisgICAgYWJjIT1hcHF1eHouaXhyLnp6ei5hYy51aworICAgIGFiYyFwcXI9YXBxdXh6Oml4ci56enouYWMudWsKKyAgICBhYmMhcHFyPWFwcXV4ei5peHIuenp6LmFjLnVraworCisvOi8KKyAgICBXZWxsLCB3ZSBuZWVkIGEgY29sb246IHNvbWV3aGVyZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgRmFpbCB3aXRob3V0IGEgY29sb24KKworLyhbXGRhLWY6XSspJC9pCisgICAgMGFiYworICAgIGFiYworICAgIGZlZAorICAgIEUKKyAgICA6OgorICAgIDVmMDM6MTJDMDo6OTMyZQorICAgIGZlZCBkZWYKKyAgICBBbnkgb2xkIHN0dWZmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAwenp6CisgICAgZ3p6egorICAgIGZlZFx4MjAKKyAgICBBbnkgb2xkIHJ1YmJpc2gKKworL14uKlwuKFxkezEsM30pXC4oXGR7MSwzfSlcLihcZHsxLDN9KSQvCisgICAgLjEuMi4zCisgICAgQS4xMi4xMjMuMAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgLjEuMi4zMzMzCisgICAgMS4yLjMKKyAgICAxMjM0LjIuMworCisvXihcZCspXHMrSU5ccytTT0FccysoXFMrKVxzKyhcUyspXHMqXChccyokLworICAgIDEgSU4gU09BIG5vbi1zcDEgbm9uLXNwMigKKyAgICAxICAgIElOICAgIFNPQSAgICBub24tc3AxICAgIG5vbi1zcDIgICAoCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxSU4gU09BIG5vbi1zcDEgbm9uLXNwMigKKworL15bYS16QS1aXGRdW2EtekEtWlxkXC1dKihcLlthLXpBLVpcZF1bYS16QS16XGRcLV0qKSpcLiQvCisgICAgYS4KKyAgICBaLgorICAgIDIuCisgICAgYWItYy5wcS1yLgorICAgIHN4ay56enouYWMudWsuCisgICAgeC0ueS0uCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAtYWJjLnBlcS4KKworL15cKlwuW2Etel0oW2EtelwtXGRdKlthLXpcZF0rKT8oXC5bYS16XShbYS16XC1cZF0qW2EtelxkXSspPykqJC8KKyAgICAqLmEKKyAgICAqLmIwLWEKKyAgICAqLmMzLWIuYworICAgICouYy1hLmItYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgKi4wCisgICAgKi5hLQorICAgICouYS1iLmMtCisgICAgKi5jLWEuMC1jCisKKy9eKD89YWIoZGUpKShhYmQpKGUpLworICAgIGFiZGUKKworL14oPyEoYWIpZGV8eCkoYWJkKShmKS8KKyAgICBhYmRmCisKKy9eKD89KGFiKGNkKSkpKGFiKS8KKyAgICBhYmNkCisKKy9eW1xkYS1mXShcLltcZGEtZl0pKiQvaQorICAgIGEuYi5jLmQKKyAgICBBLkIuQy5ECisgICAgYS5iLmMuMS4yLjMuQworCisvXlwiLipcIlxzKig7LiopPyQvCisgICAgXCIxMjM0XCIKKyAgICBcImFiY2RcIiA7CisgICAgXCJcIiA7IHJodWJhcmIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFwiMTIzNFwiIDogdGhpbmdzCisKKy9eJC8KKyAgICBcCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBIG5vbi1lbXB0eSBsaW5lCisKKy8gICBeICAgIGEgICAoPyMgYmVnaW5zIHdpdGggYSkgIGJcc2MgKD8jIHRoZW4gYiBjKSAkICg/IyB0aGVuIGVuZCkveAorICAgIGFiIGMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworICAgIGFiIGNkZQorCisvKD94KSAgIF4gICAgYSAgICg/IyBiZWdpbnMgd2l0aCBhKSAgYlxzYyAoPyMgdGhlbiBiIGMpICQgKD8jIHRoZW4gZW5kKS8KKyAgICBhYiBjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKKyAgICBhYiBjZGUKKworL14gICBhXCBiW2MgXWQgICAgICAgJC94CisgICAgYSBiY2QKKyAgICBhIGIgZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZAorICAgIGFiIGQKKworL14oYShiKGMpKSkoZChlKGYpKSkoaChpKGopKSkoayhsKG0pKSkkLworICAgIGFiY2RlZmhpamtsbQorCisvXig/OmEoYihjKSkpKD86ZChlKGYpKSkoPzpoKGkoaikpKSg/OmsobChtKSkpJC8KKyAgICBhYmNkZWZoaWprbG0KKworL15bXHddW1xXXVtcc11bXFNdW1xkXVtcRF1bXGJdW1xuXVtcY11dW1wwMjJdLworICAgIGErIFowK1x4MDhcblx4MWRceDEyCisKKy9eWy5eJHwoKSorP3ssfV0rLworICAgIC5eXCQoKispfHs/LD99CisKKy9eYSpcdy8KKyAgICB6CisgICAgYXoKKyAgICBhYWF6CisgICAgYQorICAgIGFhCisgICAgYWFhYQorICAgIGErCisgICAgYWErCisKKy9eYSo/XHcvCisgICAgegorICAgIGF6CisgICAgYWFhegorICAgIGEKKyAgICBhYQorICAgIGFhYWEKKyAgICBhKworICAgIGFhKworCisvXmErXHcvCisgICAgYXoKKyAgICBhYWF6CisgICAgYWEKKyAgICBhYWFhCisgICAgYWErCisKKy9eYSs/XHcvCisgICAgYXoKKyAgICBhYWF6CisgICAgYWEKKyAgICBhYWFhCisgICAgYWErCisKKy9eXGR7OH1cd3syLH0vCisgICAgMTIzNDU2Nzg5MAorICAgIDEyMzQ1Njc4YWIKKyAgICAxMjM0NTY3OF9fCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0NTY3CisKKy9eW2FlaW91XGRdezQsNX0kLworICAgIHVvaWUKKyAgICAxMjM0CisgICAgMTIzNDUKKyAgICBhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNDU2CisKKy9eW2FlaW91XGRdezQsNX0/LworICAgIHVvaWUKKyAgICAxMjM0CisgICAgMTIzNDUKKyAgICBhYWFhYQorICAgIDEyMzQ1NgorCisvXEEoYWJjfGRlZik9KFwxKXsyLDN9XFovCisgICAgYWJjPWFiY2FiYworICAgIGRlZj1kZWZkZWZkZWYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYz1kZWZkZWYKKworL14oYSkoYikoYykoZCkoZSkoZikoZykoaCkoaSkoaikoaylcMTEqKFwzXDQpXDEoPyMpMiQvCisgICAgYWJjZGVmZ2hpamtjZGEyCisgICAgYWJjZGVmZ2hpamtra2tjZGEyCisKKy8oY2F0KGEocmFjdHx0b25pYyl8ZXJwaWxsYXIpKSBcMSgpMigzKS8KKyAgICBjYXRhcmFjdCBjYXRhcmFjdDIzCisgICAgY2F0YXRvbmljIGNhdGF0b25pYzIzCisgICAgY2F0ZXJwaWxsYXIgY2F0ZXJwaWxsYXIyMworCisKKy9eRnJvbSArKFteIF0rKSArW2EtekEtWl1bYS16QS1aXVthLXpBLVpdICtbYS16QS1aXVthLXpBLVpdW2EtekEtWl0gK1swLTldP1swLTldICtbMC05XVswLTldOlswLTldWzAtOV0vCisgICAgRnJvbSBhYmNkICBNb24gU2VwIDAxIDEyOjMzOjAyIDE5OTcKKworL15Gcm9tXHMrXFMrXHMrKFthLXpBLVpdezN9XHMrKXsyfVxkezEsMn1ccytcZFxkOlxkXGQvCisgICAgRnJvbSBhYmNkICBNb24gU2VwIDAxIDEyOjMzOjAyIDE5OTcKKyAgICBGcm9tIGFiY2QgIE1vbiBTZXAgIDEgMTI6MzM6MDIgMTk5NworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgRnJvbSBhYmNkICBTZXAgMDEgMTI6MzM6MDIgMTk5NworCisvXjEyLjM0L3MKKyAgICAxMlxuMzQKKyAgICAxMlxyMzQKKworL1x3Kyg/PVx0KS8KKyAgICB0aGUgcXVpY2sgYnJvd25cdCBmb3gKKworL2Zvbyg/IWJhcikoLiopLworICAgIGZvb2JhciBpcyBmb29saXNoIHNlZT8KKworLyg/Oig/IWZvbykuLi58Xi57MCwyfSliYXIoLiopLworICAgIGZvb2JhciBjcm93YmFyIGV0YworICAgIGJhcnJlbAorICAgIDJiYXJyZWwKKyAgICBBIGJhcnJlbAorCisvXihcRCopKD89XGQpKD8hMTIzKS8KKyAgICBhYmM0NTYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYzEyMworCisvXjEyMzQoPyMgdGVzdCBuZXdsaW5lcworICBpbnNpZGUpLworICAgIDEyMzQKKworL14xMjM0ICNjb21tZW50IGluIGV4dGVuZGVkIHJlCisgIC94CisgICAgMTIzNAorCisvI3JodWJhcmIKKyAgYWJjZC94CisgICAgYWJjZAorCisvXmFiY2Qjcmh1YmFyYi94CisgICAgYWJjZAorCisvXihhKVwxezIsM30oLikvCisgICAgYWFhYgorICAgIGFhYWFiCisgICAgYWFhYWFiCisgICAgYWFhYWFhYgorCisvKD8hXilhYmMvCisgICAgdGhlIGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCisKKy8oPz1eKWFiYy8KKyAgICBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHRoZSBhYmMKKworL15bYWJdezEsM30oYWIqfGIpLworICAgIGFhYmJiYmIKKworL15bYWJdezEsM30/KGFiKnxiKS8KKyAgICBhYWJiYmJiCisKKy9eW2FiXXsxLDN9PyhhYio/fGIpLworICAgIGFhYmJiYmIKKworL15bYWJdezEsM30oYWIqP3xiKS8KKyAgICBhYWJiYmJiCisKKy8gICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCBsZWFkaW5nIGNvbW1lbnQKKyg/OiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgd29yZAorKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICApKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGEgcGVyaW9kCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisjIGFkZHJlc3MKK3wgICAgICAgICAgICAgICAgICAgICAjICBvcgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgICAgICAgICAgICAjIG9uZSB3b3JkLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5Li4uLgorKD86CitbXigpPD5ALDs6Ii5cXFxbXF1ceDgwLVx4ZmZcMDAwLVwwMTBcMDEyLVwwMzddICB8ICAjIGF0b20gYW5kIHNwYWNlIHBhcnRzLCBvci4uLgorXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgICAgICB8ICAjIGNvbW1lbnRzLCBvci4uLgorCisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCisjIHF1b3RlZCBzdHJpbmdzCispKgorPCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICAgICAgICAgICAgICAgICAgIyBsZWFkaW5nIDwKKyg/OiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKworKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICwgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKykqICMgZnVydGhlciBva2F5LCBpZiBsZWQgYnkgY29tbWEKKzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xvc2luZyBjb2xvbgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICApPyAjICAgICAgIG9wdGlvbmFsIHJvdXRlCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgd29yZAorKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICApKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGEgcGVyaW9kCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisjICAgICAgIGFkZHJlc3Mgc3BlYworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICA+ICMgICAgICAgICAgICAgICAgICB0cmFpbGluZyA+CisjIG5hbWUgYW5kIGFkZHJlc3MKKykgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50CisveAorICAgIEFsYW4gT3RoZXIgPHVzZXJcQGRvbS5haW4+CisgICAgPHVzZXJcQGRvbS5haW4+CisgICAgdXNlclxAZG9tLmFpbgorICAgIFwiQS4gT3RoZXJcIiA8dXNlci4xMjM0XEBkb20uYWluPiAoYSBjb21tZW50KQorICAgIEEuIE90aGVyIDx1c2VyLjEyMzRcQGRvbS5haW4+IChhIGNvbW1lbnQpCisgICAgXCIvcz11c2VyL291PWhvc3Qvbz1wbGFjZS9wcm1kPXV1Lnl5L2FkbWQ9IC9jPWdiL1wiXEB4NDAwLXJlLmxheQorICAgIEEgbWlzc2luZyBhbmdsZSA8dXNlclxAc29tZS53aGVyZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgVGhlIHF1aWNrIGJyb3duIGZveAorCisvW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCBsZWFkaW5nIGNvbW1lbnQKKyg/OgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorIyBBdG9tCit8ICAgICAgICAgICAgICAgICAgICAgICAjICBvcgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIKK1teXFxceDgwLVx4ZmZcblwwMTUiXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBub3JtYWwKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICBbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiApKiAgICAgICAgIyAgICggc3BlY2lhbCBub3JtYWwqICkqCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICIKKyMgUXVvdGVkIHN0cmluZworKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitcLgorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorIyBBdG9tCit8ICAgICAgICAgICAgICAgICAgICAgICAjICBvcgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIKK1teXFxceDgwLVx4ZmZcblwwMTUiXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBub3JtYWwKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICBbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiApKiAgICAgICAgIyAgICggc3BlY2lhbCBub3JtYWwqICkqCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICIKKyMgUXVvdGVkIHN0cmluZworKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBhZGRpdGlvbmFsIHdvcmRzCispKgorQAorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorXFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50cworKD86CitcLgorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorXFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50cworKSoKKyMgYWRkcmVzcworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgb3IKKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KKyMgQXRvbQorfCAgICAgICAgICAgICAgICAgICAgICAgIyAgb3IKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgbm9ybWFsCisoPzogIFxcIFteXHg4MC1ceGZmXSAgW15cXFx4ODAtXHhmZlxuXDAxNSJdICogKSogICAgICAgICMgICAoIHNwZWNpYWwgbm9ybWFsKiApKgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAiCisjIFF1b3RlZCBzdHJpbmcKKykKKyMgbGVhZGluZyB3b3JkCitbXigpPD5ALDs6Ii5cXFxbXF1ceDgwLVx4ZmZcMDAwLVwwMTBcMDEyLVwwMzddICogICAgICAgICAgICAgICAjICJub3JtYWwiIGF0b21zIGFuZCBvciBzcGFjZXMKKyg/OgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK3wKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgbm9ybWFsCisoPzogIFxcIFteXHg4MC1ceGZmXSAgW15cXFx4ODAtXHhmZlxuXDAxNSJdICogKSogICAgICAgICMgICAoIHNwZWNpYWwgbm9ybWFsKiApKgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAiCispICMgInNwZWNpYWwiIGNvbW1lbnQgb3IgcXVvdGVkIHN0cmluZworW14oKTw+QCw7OiIuXFxcW1xdXHg4MC1ceGZmXDAwMC1cMDEwXDAxMi1cMDM3XSAqICAgICAgICAgICAgIyAgbW9yZSAibm9ybWFsIgorKSoKKzwKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgPAorKD86CitACitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCisoPzoKK1wuCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCispKgorKD86ICwKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KK0AKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKK1xbICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudHMKKyg/OgorXC4KK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKK1xbICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudHMKKykqCispKiAgIyBhZGRpdGlvbmFsIGRvbWFpbnMKKzoKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudHMKKyk/ICAgICAjICAgICAgIG9wdGlvbmFsIHJvdXRlCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCisjIEF0b20KK3wgICAgICAgICAgICAgICAgICAgICAgICMgIG9yCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIG5vcm1hbAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIFteXFxceDgwLVx4ZmZcblwwMTUiXSAqICkqICAgICAgICAjICAgKCBzcGVjaWFsIG5vcm1hbCogKSoKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIgorIyBRdW90ZWQgc3RyaW5nCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1wuCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCisjIEF0b20KK3wgICAgICAgICAgICAgICAgICAgICAgICMgIG9yCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIG5vcm1hbAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIFteXFxceDgwLVx4ZmZcblwwMTUiXSAqICkqICAgICAgICAjICAgKCBzcGVjaWFsIG5vcm1hbCogKSoKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIgorIyBRdW90ZWQgc3RyaW5nCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIGFkZGl0aW9uYWwgd29yZHMKKykqCitACitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCisoPzoKK1wuCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCispKgorIyAgICAgICBhZGRyZXNzIHNwZWMKKz4gICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgID4KKyMgbmFtZSBhbmQgYWRkcmVzcworKQorL3gKKyAgICBBbGFuIE90aGVyIDx1c2VyXEBkb20uYWluPgorICAgIDx1c2VyXEBkb20uYWluPgorICAgIHVzZXJcQGRvbS5haW4KKyAgICBcIkEuIE90aGVyXCIgPHVzZXIuMTIzNFxAZG9tLmFpbj4gKGEgY29tbWVudCkKKyAgICBBLiBPdGhlciA8dXNlci4xMjM0XEBkb20uYWluPiAoYSBjb21tZW50KQorICAgIFwiL3M9dXNlci9vdT1ob3N0L289cGxhY2UvcHJtZD11dS55eS9hZG1kPSAvYz1nYi9cIlxAeDQwMC1yZS5sYXkKKyAgICBBIG1pc3NpbmcgYW5nbGUgPHVzZXJcQHNvbWUud2hlcmUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFRoZSBxdWljayBicm93biBmb3gKKworL2FiY1wwZGVmXDAwcHFyXDAwMHh5elwwMDAwQUIvCisgICAgYWJjXDBkZWZcMDBwcXJcMDAweHl6XDAwMDBBQgorICAgIGFiYzQ1NiBhYmNcMGRlZlwwMHBxclwwMDB4eXpcMDAwMEFCQ0RFCisKKy9hYmNceDBkZWZceDAwcHFyXHgwMDB4eXpceDAwMDBBQi8KKyAgICBhYmNceDBkZWZceDAwcHFyXHgwMDB4eXpceDAwMDBBQgorICAgIGFiYzQ1NiBhYmNceDBkZWZceDAwcHFyXHgwMDB4eXpceDAwMDBBQkNERQorCisvXltcMDAwLVwwMzddLworICAgIFwwQQorICAgIFwwMUIKKyAgICBcMDM3QworCisvXDAqLworICAgIFwwXDBcMFwwCisKKy9BXHgwezIsM31aLworICAgIFRoZSBBXHgwXHgwWgorICAgIEFuIEFcMFx4MFwwWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVwwWgorICAgIEFcMFx4MFwwXHgwWgorCisvXihjb3d8KVwxKGJlbGwpLworICAgIGNvd2Nvd2JlbGwKKyAgICBiZWxsCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBjb3diZWxsCisKKy9eXHMvCisgICAgXDA0MGFiYworICAgIFx4MGNhYmMKKyAgICBcbmFiYworICAgIFxyYWJjCisgICAgXHRhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworCisvXmEJYgorICAgIAwgIGMveAorICAgIGFiYworCisvXihhfClcMSpiLworICAgIGFiCisgICAgYWFhYWIKKyAgICBiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhY2IKKworL14oYXwpXDErYi8KKyAgICBhYWIKKyAgICBhYWFhYgorICAgIGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiCisKKy9eKGF8KVwxP2IvCisgICAgYWIKKyAgICBhYWIKKyAgICBiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhY2IKKworL14oYXwpXDF7Mn1iLworICAgIGFhYWIKKyAgICBiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYgorICAgIGFhYgorICAgIGFhYWFiCisKKy9eKGF8KVwxezIsM31iLworICAgIGFhYWIKKyAgICBhYWFhYgorICAgIGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiCisgICAgYWFiCisgICAgYWFhYWFiCisKKy9hYnsxLDN9YmMvCisgICAgYWJiYmJjCisgICAgYWJiYmMKKyAgICBhYmJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKKyAgICBhYmJiYmJjCisKKy8oW14uXSopXC4oW146XSopOltUIF0rKC4qKS8KKyAgICB0cmFjazEudGl0bGU6VEJsYWggYmxhaCBibGFoCisKKy8oW14uXSopXC4oW146XSopOltUIF0rKC4qKS9pCisgICAgdHJhY2sxLnRpdGxlOlRCbGFoIGJsYWggYmxhaAorCisvKFteLl0qKVwuKFteOl0qKTpbdCBdKyguKikvaQorICAgIHRyYWNrMS50aXRsZTpUQmxhaCBibGFoIGJsYWgKKworL15bVy1jXSskLworICAgIFdYWV9eYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB3eHkKKworL15bVy1jXSskL2kKKyAgICBXWFlfXmFiYworICAgIHd4eV9eQUJDCisKKy9eW1x4M2YtXHg1Rl0rJC9pCisgICAgV1hZX15hYmMKKyAgICB3eHlfXkFCQworCisvXmFiYyQvbQorICAgIGFiYworICAgIHFxcVxuYWJjCisgICAgYWJjXG56enoKKyAgICBxcXFcbmFiY1xuenp6CisKKy9eYWJjJC8KKyAgICBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHFxcVxuYWJjCisgICAgYWJjXG56enoKKyAgICBxcXFcbmFiY1xuenp6CisKKy9cQWFiY1xaL20KKyAgICBhYmMKKyAgICBhYmNcbiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHFxcVxuYWJjCisgICAgYWJjXG56enoKKyAgICBxcXFcbmFiY1xuenp6CisgICAgCisvXEEoLikqXFovcworICAgIGFiY1xuZGVmCisKKy9cQSguKSpcWi9tCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcbmRlZgorCisvKD86Yil8KD86OispLworICAgIGI6OmMKKyAgICBjOjpiCisKKy9bLWF6XSsvCisgICAgYXotCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiCisKKy9bYXotXSsvCisgICAgemEtCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiCisKKy9bYVwtel0rLworICAgIGEtegorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYgorCisvW2Etel0rLworICAgIGFiY2R4eXoKKworL1tcZC1dKy8KKyAgICAxMi0zNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhCisKKy9bXGQtel0rLworICAgIDEyLTM0egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhCisKKy9ceDVjLworICAgIFxcCisKKy9ceDIwWi8KKyAgICB0aGUgWm9vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBadWx1CisKKy8oYWJjKVwxL2kKKyAgICBhYmNhYmMKKyAgICBBQkNhYmMKKyAgICBhYmNBQkMKKworL2FiYyQvCisgICAgYWJjCisgICAgYWJjXG4KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY1xuZGVmCisKKy8oYWJjKVwxMjMvCisgICAgYWJjXHg1MworCisvKGFiYylcMjIzLworICAgIGFiY1x4OTMKKworLyhhYmMpXDMyMy8KKyAgICBhYmNceGQzCisKKy8oYWJjKVwxMDAvCisgICAgYWJjXHg0MAorICAgIGFiY1wxMDAKKworLyhhYmMpXDEwMDAvCisgICAgYWJjXHg0MDAKKyAgICBhYmNceDQwXHgzMAorICAgIGFiY1wxMDAwCisgICAgYWJjXDEwMFx4MzAKKyAgICBhYmNcMTAwXDA2MAorICAgIGFiY1wxMDBcNjAKKyAgICAKKy9eKEEpKEIpKEMpKEQpKEUpKEYpKEcpKEgpKEkpXDhcOSQvCisgICAgQUJDREVGR0hJSEkgCisKKy9eW0FcOEJcOUNdKyQvCisgICAgQThCOUMKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBBOEI5Q1x4MDAKKworLyhhKShiKShjKShkKShlKShmKShnKShoKShpKShqKShrKShsKVwxMlwxMjMvCisgICAgYWJjZGVmZ2hpamtsbFMKKworLyhhKShiKShjKShkKShlKShmKShnKShoKShpKShqKShrKVwxMlwxMjMvCisgICAgYWJjZGVmZ2hpamtcMTJTCisKKy9hezB9YmMvCisgICAgYmMKKworLyhhfChiYykpezAsMH0/eHl6LworICAgIHh5egorCisvYWJjW1wxMF1kZS8KKyAgICBhYmNcMDEwZGUKKworL2FiY1tcMV1kZS8KKyAgICBhYmNcMWRlCisKKy8oYWJjKVtcMV1kZS8KKyAgICBhYmNcMWRlCisKKy8oP3MpYS5iLworICAgIGFcbmIKKworL14oW15hXSkoW15cYl0pKFteY10qKShbXmRdezMsNH0pLworICAgIGJhTk9UY2NjY2QKKyAgICBiYU5PVGNjY2QKKyAgICBiYU5PVGNjZAorICAgIGJhY2NjZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYW55dGhpbmcKKyAgICBiXGJjICAgCisgICAgYmFjY2QKKworL1teYV0vCisgICAgQWJjCisgIAorL1teYV0vaQorICAgIEFiYyAKKworL1teYV0rLworICAgIEFBQWFBYmMKKyAgCisvW15hXSsvaQorICAgIEFBQWFBYmMgCisKKy9bXmFdKy8KKyAgICBiYmJcbmNjYworICAgCisvW15rXSQvCisgICAgYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmsgICAKKyAgIAorL1tea117MiwzfSQvCisgICAgYWJjCisgICAga2JjCisgICAga2FiYyAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiaworICAgIGFrYgorICAgIGFrayAKKworL15cZHs4LH1cQC4rW15rXSQvCisgICAgMTIzNDU2NzhcQGEuYi5jLmQKKyAgICAxMjM0NTY3ODlcQHgueS56CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0NTY3OFxAeC55LnVrCisgICAgMTIzNDU2N1xAYS5iLmMuZCAgICAgICAKKworLyhhKVwxezgsfS8KKyAgICBhYWFhYWFhYWEKKyAgICBhYWFhYWFhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhYWFhICAgCisKKy9bXmFdLworICAgIGFhYWFiY2QKKyAgICBhYUFhYmNkIAorCisvW15hXS9pCisgICAgYWFhYWJjZAorICAgIGFhQWFiY2QgCisKKy9bXmF6XS8KKyAgICBhYWFhYmNkCisgICAgYWFBYWJjZCAKKworL1teYXpdL2kKKyAgICBhYWFhYmNkCisgICAgYWFBYWJjZCAKKworL1wwMDBcMDAxXDAwMlwwMDNcMDA0XDAwNVwwMDZcMDA3XDAxMFwwMTFcMDEyXDAxM1wwMTRcMDE1XDAxNlwwMTdcMDIwXDAyMVwwMjJcMDIzXDAyNFwwMjVcMDI2XDAyN1wwMzBcMDMxXDAzMlwwMzNcMDM0XDAzNVwwMzZcMDM3XDA0MFwwNDFcMDQyXDA0M1wwNDRcMDQ1XDA0NlwwNDdcMDUwXDA1MVwwNTJcMDUzXDA1NFwwNTVcMDU2XDA1N1wwNjBcMDYxXDA2MlwwNjNcMDY0XDA2NVwwNjZcMDY3XDA3MFwwNzFcMDcyXDA3M1wwNzRcMDc1XDA3NlwwNzdcMTAwXDEwMVwxMDJcMTAzXDEwNFwxMDVcMTA2XDEwN1wxMTBcMTExXDExMlwxMTNcMTE0XDExNVwxMTZcMTE3XDEyMFwxMjFcMTIyXDEyM1wxMjRcMTI1XDEyNlwxMjdcMTMwXDEzMVwxMzJcMTMzXDEzNFwxMzVcMTM2XDEzN1wxNDBcMTQxXDE0MlwxNDNcMTQ0XDE0NVwxNDZcMTQ3XDE1MFwxNTFcMTUyXDE1M1wxNTRcMTU1XDE1NlwxNTdcMTYwXDE2MVwxNjJcMTYzXDE2NFwxNjVcMTY2XDE2N1wxNzBcMTcxXDE3MlwxNzNcMTc0XDE3NVwxNzZcMTc3XDIwMFwyMDFcMjAyXDIwM1wyMDRcMjA1XDIwNlwyMDdcMjEwXDIxMVwyMTJcMjEzXDIxNFwyMTVcMjE2XDIxN1wyMjBcMjIxXDIyMlwyMjNcMjI0XDIyNVwyMjZcMjI3XDIzMFwyMzFcMjMyXDIzM1wyMzRcMjM1XDIzNlwyMzdcMjQwXDI0MVwyNDJcMjQzXDI0NFwyNDVcMjQ2XDI0N1wyNTBcMjUxXDI1MlwyNTNcMjU0XDI1NVwyNTZcMjU3XDI2MFwyNjFcMjYyXDI2M1wyNjRcMjY1XDI2NlwyNjdcMjcwXDI3MVwyNzJcMjczXDI3NFwyNzVcMjc2XDI3N1wzMDBcMzAxXDMwMlwzMDNcMzA0XDMwNVwzMDZcMzA3XDMxMFwzMTFcMzEyXDMxM1wzMTRcMzE1XDMxNlwzMTdcMzIwXDMyMVwzMjJcMzIzXDMyNFwzMjVcMzI2XDMyN1wzMzBcMzMxXDMzMlwzMzNcMzM0XDMzNVwzMzZcMzM3XDM0MFwzNDFcMzQyXDM0M1wzNDRcMzQ1XDM0NlwzNDdcMzUwXDM1MVwzNTJcMzUzXDM1NFwzNTVcMzU2XDM1N1wzNjBcMzYxXDM2MlwzNjNcMzY0XDM2NVwzNjZcMzY3XDM3MFwzNzFcMzcyXDM3M1wzNzRcMzc1XDM3NlwzNzcvCisgXDAwMFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzdcMDQwXDA0MVwwNDJcMDQzXDA0NFwwNDVcMDQ2XDA0N1wwNTBcMDUxXDA1MlwwNTNcMDU0XDA1NVwwNTZcMDU3XDA2MFwwNjFcMDYyXDA2M1wwNjRcMDY1XDA2NlwwNjdcMDcwXDA3MVwwNzJcMDczXDA3NFwwNzVcMDc2XDA3N1wxMDBcMTAxXDEwMlwxMDNcMTA0XDEwNVwxMDZcMTA3XDExMFwxMTFcMTEyXDExM1wxMTRcMTE1XDExNlwxMTdcMTIwXDEyMVwxMjJcMTIzXDEyNFwxMjVcMTI2XDEyN1wxMzBcMTMxXDEzMlwxMzNcMTM0XDEzNVwxMzZcMTM3XDE0MFwxNDFcMTQyXDE0M1wxNDRcMTQ1XDE0NlwxNDdcMTUwXDE1MVwxNTJcMTUzXDE1NFwxNTVcMTU2XDE1N1wxNjBcMTYxXDE2MlwxNjNcMTY0XDE2NVwxNjZcMTY3XDE3MFwxNzFcMTcyXDE3M1wxNzRcMTc1XDE3NlwxNzdcMjAwXDIwMVwyMDJcMjAzXDIwNFwyMDVcMjA2XDIwN1wyMTBcMjExXDIxMlwyMTNcMjE0XDIxNVwyMTZcMjE3XDIyMFwyMjFcMjIyXDIyM1wyMjRcMjI1XDIyNlwyMjdcMjMwXDIzMVwyMzJcMjMzXDIzNFwyMzVcMjM2XDIzN1wyNDBcMjQxXDI0MlwyNDNcMjQ0XDI0NVwyNDZcMjQ3XDI1MFwyNTFcMjUyXDI1M1wyNTRcMjU1XDI1NlwyNTdcMjYwXDI2MVwyNjJcMjYzXDI2NFwyNjVcMjY2XDI2N1wyNzBcMjcxXDI3MlwyNzNcMjc0XDI3NVwyNzZcMjc3XDMwMFwzMDFcMzAyXDMwM1wzMDRcMzA1XDMwNlwzMDdcMzEwXDMxMVwzMTJcMzEzXDMxNFwzMTVcMzE2XDMxN1wzMjBcMzIxXDMyMlwzMjNcMzI0XDMyNVwzMjZcMzI3XDMzMFwzMzFcMzMyXDMzM1wzMzRcMzM1XDMzNlwzMzdcMzQwXDM0MVwzNDJcMzQzXDM0NFwzNDVcMzQ2XDM0N1wzNTBcMzUxXDM1MlwzNTNcMzU0XDM1NVwzNTZcMzU3XDM2MFwzNjFcMzYyXDM2M1wzNjRcMzY1XDM2NlwzNjdcMzcwXDM3MVwzNzJcMzczXDM3NFwzNzVcMzc2XDM3NworCisvUFteKl1UQUlSRVteKl17MSw2fT9MTC8KKyAgICB4eHh4eHh4eHh4eFBTVEFJUkVJU0xMeHh4eHh4eHh4CisKKy9QW14qXVRBSVJFW14qXXsxLH0/TEwvCisgICAgeHh4eHh4eHh4eHhQU1RBSVJFSVNMTHh4eHh4eHh4eAorCisvKFwuXGRcZFsxLTldPylcZCsvCisgICAgMS4yMzAwMDM5MzgKKyAgICAxLjg3NTAwMDI4MiAgIAorICAgIDEuMjM1ICAKKyAgICAgICAgICAgICAgICAgIAorLyhcLlxkXGQoKD89MCl8XGQoPz1cZCkpKS8KKyAgICAxLjIzMDAwMzkzOCAgICAgIAorICAgIDEuODc1MDAwMjgyCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgMS4yMzUgCisgICAgCisvYSg/KWIvCisgICAgYWIgCisgCisvXGIoZm9vKVxzKyhcdyspL2kKKyAgICBGb29kIGlzIG9uIHRoZSBmb28gdGFibGUKKyAgICAKKy9mb28oLiopYmFyLworICAgIFRoZSBmb29kIGlzIHVuZGVyIHRoZSBiYXIgaW4gdGhlIGJhcm4uCisgICAgCisvZm9vKC4qPyliYXIvCisgICAgVGhlIGZvb2QgaXMgdW5kZXIgdGhlIGJhciBpbiB0aGUgYmFybi4KKworLyguKikoXGQqKS8KKyAgICBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworICAgIAorLyguKikoXGQrKS8KKyAgICBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworIAorLyguKj8pKFxkKikvCisgICAgSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKworLyguKj8pKFxkKykvCisgICAgSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKworLyguKikoXGQrKSQvCisgICAgSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKworLyguKj8pKFxkKykkLworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisKKy8oLiopXGIoXGQrKSQvCisgICAgSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKworLyguKlxEKShcZCspJC8KKyAgICBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworCisvXlxEKig/ITEyMykvCisgICAgQUJDMTIzCisgICAgIAorL14oXEQqKSg/PVxkKSg/ITEyMykvCisgICAgQUJDNDQ1CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkMxMjMKKyAgICAKKy9eW1ctXTQ2XS8KKyAgICBXNDZdNzg5IAorICAgIC00Nl03ODkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFdhbGwKKyAgICBaZWJyYQorICAgIDQyCisgICAgW2FiY2RdIAorICAgIF1hYmNkWworICAgICAgIAorL15bVy1cXTQ2XS8KKyAgICBXNDZdNzg5IAorICAgIFdhbGwKKyAgICBaZWJyYQorICAgIFh5bG9waG9uZSAgCisgICAgNDIKKyAgICBbYWJjZF0gCisgICAgXWFiY2RbCisgICAgXFxiYWNrc2xhc2ggCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAtNDZdNzg5CisgICAgd2VsbAorICAgIAorL1xkXGRcL1xkXGRcL1xkXGRcZFxkLworICAgIDAxLzAxLzIwMDAKKworL3dvcmQgKD86W2EtekEtWjAtOV0rICl7MCwxMH1vdGhlcndvcmQvCisgICAgd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyayBvdGhlcndvcmQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHdvcmQgY2F0IGRvZyBlbGVwaGFudCBtdXNzZWwgY293IGhvcnNlIGNhbmFyeSBiYWJvb24gc25ha2Ugc2hhcmsKKworL3dvcmQgKD86W2EtekEtWjAtOV0rICl7MCwzMDB9b3RoZXJ3b3JkLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyayB0aGUgcXVpY2sgYnJvd24gZm94IGFuZCB0aGUgbGF6eSBkb2cgYW5kIHNldmVyYWwgb3RoZXIgd29yZHMgZ2V0dGluZyBjbG9zZSB0byB0aGlydHkgYnkgbm93IEkgaG9wZQorCisvXihhKXswLDB9LworICAgIGJjZAorICAgIGFiYworICAgIGFhYiAgICAgCisKKy9eKGEpezAsMX0vCisgICAgYmNkCisgICAgYWJjCisgICAgYWFiICAKKworL14oYSl7MCwyfS8KKyAgICBiY2QKKyAgICBhYmMKKyAgICBhYWIgIAorCisvXihhKXswLDN9LworICAgIGJjZAorICAgIGFiYworICAgIGFhYgorICAgIGFhYSAgIAorCisvXihhKXswLH0vCisgICAgYmNkCisgICAgYWJjCisgICAgYWFiCisgICAgYWFhCisgICAgYWFhYWFhYWEgICAgCisKKy9eKGEpezEsMX0vCisgICAgYWJjCisgICAgYWFiICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJjZAorCisvXihhKXsxLDJ9LworICAgIGFiYworICAgIGFhYiAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiY2QKKworL14oYSl7MSwzfS8KKyAgICBhYmMKKyAgICBhYWIKKyAgICBhYWEgICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJjZAorCisvXihhKXsxLH0vCisgICAgYWJjCisgICAgYWFiCisgICAgYWFhCisgICAgYWFhYWFhYWEgICAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiY2QKKworLy4qXC5naWYvCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ubworCisvLnswLH1cLmdpZi8KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisKKy8uKlwuZ2lmL20KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisKKy8uKlwuZ2lmL3MKKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisKKy8uKlwuZ2lmL21zCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ubworICAgIAorLy4qJC8KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisKKy8uKiQvbQorICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKworLy4qJC9zCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ubworCisvLiokL21zCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ubworICAgIAorLy4qJC8KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vXG4KKworLy4qJC9tCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ub1xuCisKKy8uKiQvcworICAgIGJvcmZsZVxuYmliLmdpZlxubm9cbgorCisvLiokL21zCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ub1xuCisgICAgCisvKC4qWHxeQikvCisgICAgYWJjZGVcbjEyMzRYeXoKKyAgICBCYXJGb28gCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkZVxuQmFyICAKKworLyguKlh8XkIpL20KKyAgICBhYmNkZVxuMTIzNFh5egorICAgIEJhckZvbyAKKyAgICBhYmNkZVxuQmFyICAKKworLyguKlh8XkIpL3MKKyAgICBhYmNkZVxuMTIzNFh5egorICAgIEJhckZvbyAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlXG5CYXIgIAorCisvKC4qWHxeQikvbXMKKyAgICBhYmNkZVxuMTIzNFh5egorICAgIEJhckZvbyAKKyAgICBhYmNkZVxuQmFyICAKKworLyg/cykoLipYfF5CKS8KKyAgICBhYmNkZVxuMTIzNFh5egorICAgIEJhckZvbyAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYmNkZVxuQmFyICAKKworLyg/czouKlh8XkIpLworICAgIGFiY2RlXG4xMjM0WHl6CisgICAgQmFyRm9vIAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiY2RlXG5CYXIgIAorCisvXi4qQi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY1xuQgorICAgICAKKy8oP3MpXi4qQi8KKyAgICBhYmNcbkIKKworLyg/bSleLipCLworICAgIGFiY1xuQgorICAgICAKKy8oP21zKV4uKkIvCisgICAgYWJjXG5CCisKKy8oP21zKV5CLworICAgIGFiY1xuQgorCisvKD9zKUIkLworICAgIEJcbgorCisvXlswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XS8KKyAgICAxMjM0NTY2NTQzMjEKKyAgCisvXlxkXGRcZFxkXGRcZFxkXGRcZFxkXGRcZC8KKyAgICAxMjM0NTY2NTQzMjEgCisKKy9eW1xkXVtcZF1bXGRdW1xkXVtcZF1bXGRdW1xkXVtcZF1bXGRdW1xkXVtcZF1bXGRdLworICAgIDEyMzQ1NjY1NDMyMQorICAKKy9eW2FiY117MTJ9LworICAgIGFiY2FiY2FiY2FiYworICAgIAorL15bYS1jXXsxMn0vCisgICAgYWJjYWJjYWJjYWJjCisgICAgCisvXihhfGJ8Yyl7MTJ9LworICAgIGFiY2FiY2FiY2FiYyAKKworL15bYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eTAxMjM0NTY3ODldLworICAgIG4KK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICB6IAorCisvYWJjZGV7MCwwfS8KKyAgICBhYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNlICAKKworL2FiW2NkXXswLDB9ZS8KKyAgICBhYmUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlIAorICAgIAorL2FiKGMpezAsMH1kLworICAgIGFiZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZCAgIAorCisvYShiKikvCisgICAgYQorICAgIGFiCisgICAgYWJiYmIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJiYmJiICAgIAorICAgIAorL2FiXGR7MH1lLworICAgIGFiZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIxZSAgIAorICAgIAorLyIoW15cXCJdK3xcXC4pKiIvCisgICAgdGhlIFwicXVpY2tcIiBicm93biBmb3gKKyAgICBcInRoZSBcXFwicXVpY2tcXFwiIGJyb3duIGZveFwiIAorCisvLio/L2csYWZ0ZXJ0ZXh0CisgICAgYWJjCisgIAorL1xiL2csYWZ0ZXJ0ZXh0CisgICAgYWJjIAorCisvXGIvZyxhZnRlcnRleHQKKyAgICBhYmMgCisKKy8vZworICAgIGFiYworCisvPHRyKFtcd1xXXHNcZF1bXjw+XXswLH0pPjxURChbXHdcV1xzXGRdW148Pl17MCx9KT4oW1xkXXswLH1cLikoLiopKCg8QlI+KFtcd1xXXHNcZF1bXjw+XXswLH0pfFtcc117MCx9KSk8XC9hPjxcL1REPjxURChbXHdcV1xzXGRdW148Pl17MCx9KT4oW1x3XFdcc1xkXVtePD5dezAsfSk8XC9URD48VEQoW1x3XFdcc1xkXVtePD5dezAsfSk+KFtcd1xXXHNcZF1bXjw+XXswLH0pPFwvVEQ+PFwvVFI+L2lzCisgIDxUUiBCR0NPTE9SPScjREJFOUU5Jz48VEQgYWxpZ249bGVmdCB2YWxpZ249dG9wPjQzLjxhIGhyZWY9J2pvYmxpc3QuY2ZtP0pvYklEPTk0IDY3MzUmS2V5d29yZD0nPldvcmQgUHJvY2Vzc29yPEJSPihOLTEyODYpPC9hPjwvVEQ+PFREIGFsaWduPWxlZnQgdmFsaWduPXRvcD5MZWdhIGxzdGFmZi5jb208L1REPjxURCBhbGlnbj1sZWZ0IHZhbGlnbj10b3A+Q0EgLSBTdGF0ZXdpZGU8L1REPjwvVFI+CisKKy9hW15hXWIvCisgICAgYWNiCisgICAgYVxuYgorICAgIAorL2EuYi8KKyAgICBhY2IKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhXG5iICAgCisgICAgCisvYVteYV1iL3MKKyAgICBhY2IKKyAgICBhXG5iICAKKyAgICAKKy9hLmIvcworICAgIGFjYgorICAgIGFcbmIgIAorCisvXihiKz98YSl7MSwyfT9jLworICAgIGJhYworICAgIGJiYWMKKyAgICBiYmJhYworICAgIGJiYmJhYworICAgIGJiYmJiYWMgCisKKy9eKGIrfGEpezEsMn0/Yy8KKyAgICBiYWMKKyAgICBiYmFjCisgICAgYmJiYWMKKyAgICBiYmJiYWMKKyAgICBiYmJiYmFjIAorICAgIAorLyg/IVxBKXgvbQorICAgIGFcYnhcbgorICAgIGFcbnhcbgorXD0gRXhwZWN0IG5vIG1hdGNoICAgICAKKyAgICB4XG5iXG4KKyAgICAKKy8oQXxCKSo/Q0QvCisgICAgQ0QgCisgICAgCisvKEF8QikqQ0QvCisgICAgQ0QgCisKKy8oQUIpKj9cMS8KKyAgICBBQkFCQUIKKworLyhBQikqXDEvCisgICAgQUJBQkFCCisgICAgCisvKD88IWJhcilmb28vCisgICAgZm9vCisgICAgY2F0Zm9vZAorICAgIGFyZm9vdGxlCisgICAgcmZvb3NoCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYXJmb28KKyAgICB0b3diYXJmb28KKworL1x3ezN9KD88IWJhcilmb28vCisgICAgY2F0Zm9vZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZm9vCisgICAgYmFyZm9vCisgICAgdG93YmFyZm9vCisKKy8oPzw9KGZvbylhKWJhci8KKyAgICBmb29hYmFyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYXIKKyAgICBmb29iYmFyCisgICAgICAKKy9cQWFiY1x6L20KKyAgICBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY1xuICAgCisgICAgcXFxXG5hYmMKKyAgICBhYmNcbnp6egorICAgIHFxcVxuYWJjXG56enoKKworIig/Pi4qLylmb28iCisgICAgL3RoaXMvaXMvYS92ZXJ5L2xvbmcvbGluZS9pbi9kZWVkL3dpdGgvdmVyeS9tYW55L3NsYXNoZXMvaW4vYW5kL2ZvbworXD0gRXhwZWN0IG5vIG1hdGNoICAgICAKKyAgICAvdGhpcy9pcy9hL3ZlcnkvbG9uZy9saW5lL2luL2RlZWQvd2l0aC92ZXJ5L21hbnkvc2xhc2hlcy9pbi9pdC95b3Uvc2VlLworCisvKD8+KFwuXGRcZFsxLTldPykpXGQrLworICAgIDEuMjMwMDAzOTM4CisgICAgMS44NzUwMDAyODIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICAxLjIzNSAKKworL14oKD8+XHcrKXwoPz5ccyspKSokLworICAgIG5vdyBpcyB0aGUgdGltZSBmb3IgYWxsIGdvb2QgbWVuIHRvIGNvbWUgdG8gdGhlIGFpZCBvZiB0aGUgcGFydHkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHRoaXMgaXMgbm90IGEgbGluZSB3aXRoIG9ubHkgd29yZHMgYW5kIHNwYWNlcyEKKyAgICAKKy8oXGQrKShcdykvCisgICAgMTIzNDVhCisgICAgMTIzNDUrIAorCisvKCg/PlxkKykpKFx3KS8KKyAgICAxMjM0NWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQ1KyAKKworLyg/PmErKWIvCisgICAgYWFhYgorCisvKCg/PmErKWIpLworICAgIGFhYWIKKworLyg/PihhKykpYi8KKyAgICBhYWFiCisKKy8oPz5iKSsvCisgICAgYWFhYmJiY2NjCisKKy8oPz5hK3xiK3xjKykqYy8KKyAgICBhYWFiYmJiY2NjY2QKKworLygoPz5bXigpXSspfFwoW14oKV0qXCkpKy8KKyAgICAoKGFiYyhhZGUpdWZoKCkoKXgKKyAgICAKKy9cKCgoPz5bXigpXSspfFwoW14oKV0rXCkpK1wpLworICAgIChhYmMpCisgICAgKGFiYyhkZWYpeHl6KQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgKCgoKWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhICAgCisKKy9hKD8taSliL2kKKyAgICBhYgorICAgIEFiCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYUIKKyAgICBBQgorICAgICAgICAKKy8oYSAoP3gpYiBjKWQgZS8KKyAgICBhIGJjZCBlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhIGIgY2QgZQorICAgIGFiY2QgZSAgIAorICAgIGEgYmNkZSAKKyAKKy8oYSBiKD94KWMgZCAoPy14KWUgZikvCisgICAgYSBiY2RlIGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlZiAgCisKKy8oYSg/aSliKWMvCisgICAgYWJjCisgICAgYUJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYkMKKyAgICBhQkMgIAorICAgIEFiYworICAgIEFCYworICAgIEFCQworICAgIEFiQworICAgIAorL2EoP2k6YiljLworICAgIGFiYworICAgIGFCYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIEFCQworICAgIGFiQworICAgIGFCQworICAgIAorL2EoP2k6YikqYy8KKyAgICBhQmMKKyAgICBhQkJjCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYUJDCisgICAgYUJCQworICAgIAorL2EoPz1iKD9pKWMpXHdcd2QvCisgICAgYWJjZAorICAgIGFiQ2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFCQ2QKKyAgICBhYmNEICAgICAKKyAgICAKKy8oP3MtaTptb3JlLip0aGFuKS4qbWlsbGlvbi9pCisgICAgbW9yZSB0aGFuIG1pbGxpb24KKyAgICBtb3JlIHRoYW4gTUlMTElPTgorICAgIG1vcmUgXG4gdGhhbiBNaWxsaW9uIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgTU9SRSBUSEFOIE1JTExJT04gICAgCisgICAgbW9yZSBcbiB0aGFuIFxuIG1pbGxpb24gCisKKy8oPzooP3MtaSltb3JlLip0aGFuKS4qbWlsbGlvbi9pCisgICAgbW9yZSB0aGFuIG1pbGxpb24KKyAgICBtb3JlIHRoYW4gTUlMTElPTgorICAgIG1vcmUgXG4gdGhhbiBNaWxsaW9uIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgTU9SRSBUSEFOIE1JTExJT04gICAgCisgICAgbW9yZSBcbiB0aGFuIFxuIG1pbGxpb24gCisgICAgCisvKD8+YSg/aSliKykrYy8KKyAgICBhYmMKKyAgICBhQmJjCisgICAgYUJCYyAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiYworICAgIGFiQWIgICAgCisgICAgYWJiQyAKKyAgICAKKy8oPz1hKD9pKWIpXHdcd2MvCisgICAgYWJjCisgICAgYUJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYiAKKyAgICBhYkMKKyAgICBhQkMgICAgIAorICAgIAorLyg/PD1hKD9pKWIpKFx3XHcpYy8KKyAgICBhYnh4YworICAgIGFCeHhjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYnh4YworICAgIEFCeHhjCisgICAgYWJ4eEMgICAgICAKKworLyg/OihhKXxiKSg/KDEpQXxCKS8KKyAgICBhQQorICAgIGJCCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhQgorICAgIGJBICAgIAorCisvXihhKT8oPygxKWF8YikrJC8KKyAgICBhYQorICAgIGIKKyAgICBiYiAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYiAgIAorICAgIAorIyBQZXJsIGdldHMgdGhpcyBuZXh0IG9uZSB3cm9uZyBpZiB0aGUgcGF0dGVybiBlbmRzIHdpdGggJDsgaW4gdGhhdCBjYXNlIGl0CisjIGZhaWxzIHRvIG1hdGNoICIxMiIuIAorCisvXig/KD89YWJjKVx3ezN9OnxcZFxkKS8KKyAgICBhYmM6CisgICAgMTIKKyAgICAxMjMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5eiAgICAKKworL14oPyg/IWFiYylcZFxkfFx3ezN9OikkLworICAgIGFiYzoKKyAgICAxMgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzCisgICAgeHl6ICAgIAorICAgIAorLyg/KD88PWZvbyliYXJ8Y2F0KS8KKyAgICBmb29iYXIKKyAgICBjYXQKKyAgICBmY2F0CisgICAgZm9jYXQgICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGZvb2NhdCAgCisKKy8oPyg/PCFmb28pY2F0fGJhcikvCisgICAgZm9vYmFyCisgICAgY2F0CisgICAgZmNhdAorICAgIGZvY2F0ICAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBmb29jYXQgIAorCisvKCBcKCApPyBbXigpXSsgKD8oMSkgXCkgfCkgL3gKKyAgICBhYmNkCisgICAgKGFiY2QpCisgICAgdGhlIHF1aWNrIChhYmNkKSBmb3gKKyAgICAoYWJjZCAgIAorCisvKCBcKCApPyBbXigpXSsgKD8oMSkgXCkgKSAveAorICAgIGFiY2QKKyAgICAoYWJjZCkKKyAgICB0aGUgcXVpY2sgKGFiY2QpIGZveAorICAgIChhYmNkICAgCisKKy9eKD8oMilhfCgxKSgyKSkrJC8KKyAgICAxMgorICAgIDEyYQorICAgIDEyYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQgICAgCisKKy8oKD9pKWJsYWgpXHMrXDEvCisgICAgYmxhaCBibGFoCisgICAgQkxBSCBCTEFICisgICAgQmxhaCBCbGFoCisgICAgYmxhSCBibGFICitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBibGFoIEJMQUgKKyAgICBCbGFoIGJsYWggICAgICAKKyAgICBibGFIIGJsYWggCisKKy8oKD9pKWJsYWgpXHMrKD9pOlwxKS8KKyAgICBibGFoIGJsYWgKKyAgICBCTEFIIEJMQUgKKyAgICBCbGFoIEJsYWgKKyAgICBibGFIIGJsYUgKKyAgICBibGFoIEJMQUgKKyAgICBCbGFoIGJsYWggICAgICAKKyAgICBibGFIIGJsYWggCisKKy8oPz5hKikqLworICAgIGEKKyAgICBhYQorICAgIGFhYWEKKyAgICAKKy8oYWJjfCkrLworICAgIGFiYworICAgIGFiY2FiYworICAgIGFiY2FiY2FiYworICAgIHh5eiAgICAgIAorCisvKFthXSopKi8KKyAgICBhCisgICAgYWFhYWEgCisgCisvKFthYl0qKSovCisgICAgYQorICAgIGIKKyAgICBhYmFiYWIKKyAgICBhYWFhYmNkZQorICAgIGJiYmIgICAgCisgCisvKFteYV0qKSovCisgICAgYgorICAgIGJiYmIKKyAgICBhYWEgICAKKyAKKy8oW15hYl0qKSovCisgICAgY2NjYworICAgIGFiYWIgIAorIAorLyhbYV0qPykqLworICAgIGEKKyAgICBhYWFhIAorIAorLyhbYWJdKj8pKi8KKyAgICBhCisgICAgYgorICAgIGFiYWIKKyAgICBiYWJhICAgCisgCisvKFteYV0qPykqLworICAgIGIKKyAgICBiYmJiCisgICAgYWFhICAgCisgCisvKFteYWJdKj8pKi8KKyAgICBjCisgICAgY2NjYworICAgIGJhYmEgICAKKyAKKy8oPz5hKikqLworICAgIGEKKyAgICBhYWFiY2RlIAorIAorLygoPz5hKikpKi8KKyAgICBhYWFhYQorICAgIGFhYmJhYSAKKyAKKy8oKD8+YSo/KSkqLworICAgIGFhYWFhCisgICAgYWFiYmFhIAorCisvKD8oPz1bXmEtel0rW2Etel0pICBcZHsyfS1bYS16XXszfS1cZHsyfSAgfCAgXGR7Mn0tXGR7Mn0tXGR7Mn0gKSAveAorICAgIDEyLXNlcC05OAorICAgIDEyLTA5LTk4CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBzZXAtMTItOTgKKyAgICAgICAgCisvKD88PShmb28pKWJhclwxLworICAgIGZvb2JhcmZvbworICAgIGZvb2JhcmZvb3RsaW5nIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZm9vYmFyCisgICAgYmFyZm9vICAgCisKKy8oP2k6c2F0dXJkYXl8c3VuZGF5KS8KKyAgICBzYXR1cmRheQorICAgIHN1bmRheQorICAgIFNhdHVyZGF5CisgICAgU3VuZGF5CisgICAgU0FUVVJEQVkKKyAgICBTVU5EQVkKKyAgICBTdW5EYXkKKyAgICAKKy8oYSg/aSliY3xCQil4LworICAgIGFiY3gKKyAgICBhQkN4CisgICAgYmJ4CisgICAgQkJ4CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNYCisgICAgYUJDWAorICAgIGJiWAorICAgIEJCWCAgICAgICAgICAgICAgIAorCisvXihbYWJdKD9pKVtjZF18W2VmXSkvCisgICAgYWMKKyAgICBhQworICAgIGJECisgICAgZWxlcGhhbnQKKyAgICBFdXJvcGUgCisgICAgZnJvZworICAgIEZyYW5jZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWZyaWNhICAgICAKKworL14oYWJ8YSg/aSlbYi1jXSg/bS1pKWR8eCg/aSl5fHopLworICAgIGFiCisgICAgYUJkCisgICAgeHkKKyAgICB4WQorICAgIHplYnJhCisgICAgWmFtYmVzaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYUNEICAKKyAgICBYWSAgCisKKy8oPzw9Zm9vXG4pXmJhci9tCisgICAgZm9vXG5iYXIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhcgorICAgIGJhelxuYmFyICAgCisKKy8oPzw9KD88IWZvbyliYXIpYmF6LworICAgIGJhcmJhegorICAgIGJhcmJhcmJheiAKKyAgICBrb29iYXJiYXogCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYXoKKyAgICBmb29iYXJiYXogCisKKyMgVGhlIGNhc2VzIG9mIGFhYWEgYW5kIGFhYWFhYSBhcmUgbWlzc2VkIG91dCBiZWxvdyBiZWNhdXNlIFBlcmwgZG9lcyB0aGluZ3MKKyMgZGlmZmVyZW50bHkuIFdlIGtub3cgdGhhdCBvZGQsIGFuZCBtYXliZSBpbmNvcnJlY3QsIHRoaW5ncyBoYXBwZW4gd2l0aAorIyByZWN1cnNpdmUgcmVmZXJlbmNlcyBpbiBQZXJsLCBhcyBmYXIgYXMgNS4xMS4zIC0gc2VlIHNvbWUgc3R1ZmYgaW4gdGVzdCAjMi4KKworL14oYVwxPyl7NH0kLworICAgIGFhYWFhCisgICAgYWFhYWFhYQorICAgIGFhYWFhYWFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKKyAgICBhYQorICAgIGFhYQorICAgIGFhYWFhYWFhCisgICAgYWFhYWFhYWFhCisgICAgYWFhYWFhYWFhYWEKKyAgICBhYWFhYWFhYWFhYWEKKyAgICBhYWFhYWFhYWFhYWFhCisgICAgYWFhYWFhYWFhYWFhYWEKKyAgICBhYWFhYWFhYWFhYWFhYWEKKyAgICBhYWFhYWFhYWFhYWFhYWFhCisKKy9eKGFcMT8pKGFcMT8pKGFcMj8pKGFcMz8pJC8KKyAgICBhYWFhCisgICAgYWFhYWEKKyAgICBhYWFhYWEKKyAgICBhYWFhYWFhCisgICAgYWFhYWFhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorICAgIGFhCisgICAgYWFhCisgICAgYWFhYWFhYWEKKyAgICBhYWFhYWFhYWEKKyAgICBhYWFhYWFhYWFhYQorICAgIGFhYWFhYWFhYWFhYQorICAgIGFhYWFhYWFhYWFhYWEKKyAgICBhYWFhYWFhYWFhYWFhYQorICAgIGFhYWFhYWFhYWFhYWFhYQorICAgIGFhYWFhYWFhYWFhYWFhYWEgICAgICAgICAgICAgICAKKworIyBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSB0YWtlbiBmcm9tIHRoZSBQZXJsIDUuMDA1IHRlc3Qgc3VpdGU7IHNvbWUgb2YgdGhlbQorIyBhcmUgY29tcGF0aWJsZSB3aXRoIDUuMDA0LCBidXQgSSdkIHJhdGhlciBub3QgaGF2ZSB0byBzb3J0IHRoZW0gb3V0LgorCisvYWJjLworICAgIGFiYworICAgIHhhYmN5CisgICAgYWJhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHhiYworICAgIGF4YworICAgIGFieAorCisvYWIqYy8KKyAgICBhYmMKKworL2FiKmJjLworICAgIGFiYworICAgIGFiYmMKKyAgICBhYmJiYmMKKworLy57MX0vCisgICAgYWJiYmJjCisKKy8uezMsNH0vCisgICAgYWJiYmJjCisKKy9hYnswLH1iYy8KKyAgICBhYmJiYmMKKworL2FiK2JjLworICAgIGFiYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworICAgIGFicQorCisvYWJ7MSx9YmMvCisKKy9hYitiYy8KKyAgICBhYmJiYmMKKworL2FiezEsfWJjLworICAgIGFiYmJiYworCisvYWJ7MSwzfWJjLworICAgIGFiYmJiYworCisvYWJ7Myw0fWJjLworICAgIGFiYmJiYworCisvYWJ7NCw1fWJjLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJxCisgICAgYWJiYmJjCisKKy9hYj9iYy8KKyAgICBhYmJjCisgICAgYWJjCisKKy9hYnswLDF9YmMvCisgICAgYWJjCisKKy9hYj9iYy8KKworL2FiP2MvCisgICAgYWJjCisKKy9hYnswLDF9Yy8KKyAgICBhYmMKKworL15hYmMkLworICAgIGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJiYmJjCisgICAgYWJjYworCisvXmFiYy8KKyAgICBhYmNjCisKKy9eYWJjJC8KKworL2FiYyQvCisgICAgYWFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFiY2QKKworL14vCisgICAgYWJjCisKKy8kLworICAgIGFiYworCisvYS5jLworICAgIGFiYworICAgIGF4YworCisvYS4qYy8KKyAgICBheHl6YworCisvYVtiY11kLworICAgIGFiZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYXh5emQKKyAgICBhYmMKKworL2FbYi1kXWUvCisgICAgYWNlCisKKy9hW2ItZF0vCisgICAgYWFjCisKKy9hWy1iXS8KKyAgICBhLQorCisvYVtiLV0vCisgICAgYS0KKworL2FdLworICAgIGFdCisKKy9hW11dYi8KKyAgICBhXWIKKworL2FbXmJjXWQvCisgICAgYWVkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmQKKyAgICBhYmQKKworL2FbXi1iXWMvCisgICAgYWRjCisKKy9hW15dYl1jLworICAgIGFkYworICAgIGEtYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYV1jCisKKy9cYmFcYi8KKyAgICBhLQorICAgIC1hCisgICAgLWEtCisKKy9cYnlcYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5CisgICAgeXoKKyAgICB4eXoKKworL1xCYVxCLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYS0KKyAgICAtYQorICAgIC1hLQorCisvXEJ5XGIvCisgICAgeHkKKworL1xieVxCLworICAgIHl6CisKKy9cQnlcQi8KKyAgICB4eXoKKworL1x3LworICAgIGEKKworL1xXLworICAgIC0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKKworL2Fcc2IvCisgICAgYSBiCisKKy9hXFNiLworICAgIGEtYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYSBiCisKKy9cZC8KKyAgICAxCisKKy9cRC8KKyAgICAtCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxCisKKy9bXHddLworICAgIGEKKworL1tcV10vCisgICAgLQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorCisvYVtcc11iLworICAgIGEgYgorCisvYVtcU11iLworICAgIGEtYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYSBiCisKKy9bXGRdLworICAgIDEKKworL1tcRF0vCisgICAgLQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMQorCisvYWJ8Y2QvCisgICAgYWJjCisgICAgYWJjZAorCisvKCllZi8KKyAgICBkZWYKKworLyRiLworCisvYVwoYi8KKyAgICBhKGIKKworL2FcKCpiLworICAgIGFiCisgICAgYSgoYgorCisvYVxcYi8KKyAgICBhXFxiCisKKy8oKGEpKS8KKyAgICBhYmMKKworLyhhKWIoYykvCisgICAgYWJjCisKKy9hK2IrYy8KKyAgICBhYWJiYWJjCisKKy9hezEsfWJ7MSx9Yy8KKyAgICBhYWJiYWJjCisKKy9hLis/Yy8KKyAgICBhYmNhYmMKKworLyhhK3xiKSovCisgICAgYWIKKworLyhhK3xiKXswLH0vCisgICAgYWIKKworLyhhK3xiKSsvCisgICAgYWIKKworLyhhK3xiKXsxLH0vCisgICAgYWIKKworLyhhK3xiKT8vCisgICAgYWIKKworLyhhK3xiKXswLDF9LworICAgIGFiCisKKy9bXmFiXSovCisgICAgY2RlCisKKy9hYmMvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiCisKKy9hKi8KKyAgICBcCisKKy8oW2FiY10pKmQvCisgICAgYWJiYmNkCisKKy8oW2FiY10pKmJjZC8KKyAgICBhYmNkCisKKy9hfGJ8Y3xkfGUvCisgICAgZQorCisvKGF8YnxjfGR8ZSlmLworICAgIGVmCisKKy9hYmNkKmVmZy8KKyAgICBhYmNkZWZnCisKKy9hYiovCisgICAgeGFieWFiYmJ6CisgICAgeGF5YWJiYnoKKworLyhhYnxjZCllLworICAgIGFiY2RlCisKKy9bYWJoZ2VmZGNdaWovCisgICAgaGlqCisKKy9eKGFifGNkKWUvCisKKy8oYWJjfCllZi8KKyAgICBhYmNkZWYKKworLyhhfGIpYypkLworICAgIGFiY2QKKworLyhhYnxhYiopYmMvCisgICAgYWJjCisKKy9hKFtiY10qKWMqLworICAgIGFiYworCisvYShbYmNdKikoYypkKS8KKyAgICBhYmNkCisKKy9hKFtiY10rKShjKmQpLworICAgIGFiY2QKKworL2EoW2JjXSopKGMrZCkvCisgICAgYWJjZAorCisvYVtiY2RdKmRjZGNkZS8KKyAgICBhZGNkY2RlCisKKy9hW2JjZF0rZGNkY2RlLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGUKKyAgICBhZGNkY2RlCisKKy8oYWJ8YSliKmMvCisgICAgYWJjCisKKy8oKGEpKGIpYykoZCkvCisgICAgYWJjZAorCisvW2EtekEtWl9dW2EtekEtWjAtOV9dKi8KKyAgICBhbHBoYQorCisvXmEoYmMrfGJbZWhdKWd8LmgkLworICAgIGFiaAorCisvKGJjK2QkfGVmKmcufGg/aShqfGspKS8KKyAgICBlZmZnegorICAgIGlqCisgICAgcmVmZmd6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBlZmZnCisgICAgYmNkZAorCisvKCgoKCgoKCgoKGEpKSkpKSkpKSkpLworICAgIGEKKworLygoKCgoKCgoKChhKSkpKSkpKSkpKVwxMC8KKyAgICBhYQorCisvKCgoKCgoKCgoYSkpKSkpKSkpKS8KKyAgICBhCisKKy9tdWx0aXBsZSB3b3JkcyBvZiB0ZXh0LworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWEKKyAgICB1aC11aAorCisvbXVsdGlwbGUgd29yZHMvCisgICAgbXVsdGlwbGUgd29yZHMsIHllYWgKKworLyguKiljKC4qKS8KKyAgICBhYmNkZQorCisvXCgoLiopLCAoLiopXCkvCisgICAgKGEsIGIpCisKKy9ba10vCisKKy9hYmNkLworICAgIGFiY2QKKworL2EoYmMpZC8KKyAgICBhYmNkCisKKy9hWy1dP2MvCisgICAgYWMKKworLyhhYmMpXDEvCisgICAgYWJjYWJjCisKKy8oW2EtY10qKVwxLworICAgIGFiY2FiYworCisvKGEpfFwxLworICAgIGEKKyAgICBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeAorCisvKChbYS1jXSliKj9cMikqLworICAgIGFiYWJiYmNiYworCisvKChbYS1jXSliKj9cMil7M30vCisgICAgYWJhYmJiY2JjCisKKy8oKFwzfGIpXDIoYSl4KSsvCisgICAgYWFheGFiYXhiYWF4YmJheAorCisvKChcM3xiKVwyKGEpKXsyLH0vCisgICAgYmJhYWJhYmJhYmFhYWFhYmJhYWFhYmJhCisKKy9hYmMvaQorICAgIEFCQworICAgIFhBQkNZCisgICAgQUJBQkMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFheGFieGJheGJieAorICAgIFhCQworICAgIEFYQworICAgIEFCWAorCisvYWIqYy9pCisgICAgQUJDCisKKy9hYipiYy9pCisgICAgQUJDCisgICAgQUJCQworCisvYWIqP2JjL2kKKyAgICBBQkJCQkMKKworL2FiezAsfT9iYy9pCisgICAgQUJCQkJDCisKKy9hYis/YmMvaQorICAgIEFCQkMKKworL2FiK2JjL2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQworICAgIEFCUQorCisvYWJ7MSx9YmMvaQorCisvYWIrYmMvaQorICAgIEFCQkJCQworCisvYWJ7MSx9P2JjL2kKKyAgICBBQkJCQkMKKworL2FiezEsM30/YmMvaQorICAgIEFCQkJCQworCisvYWJ7Myw0fT9iYy9pCisgICAgQUJCQkJDCisKKy9hYns0LDV9P2JjL2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCUQorICAgIEFCQkJCQworCisvYWI/P2JjL2kKKyAgICBBQkJDCisgICAgQUJDCisKKy9hYnswLDF9P2JjL2kKKyAgICBBQkMKKworL2FiPz9iYy9pCisKKy9hYj8/Yy9pCisgICAgQUJDCisKKy9hYnswLDF9P2MvaQorICAgIEFCQworCisvXmFiYyQvaQorICAgIEFCQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJCQkJDCisgICAgQUJDQworCisvXmFiYy9pCisgICAgQUJDQworCisvXmFiYyQvaQorCisvYWJjJC9pCisgICAgQUFCQworCisvXi9pCisgICAgQUJDCisKKy8kL2kKKyAgICBBQkMKKworL2EuYy9pCisgICAgQUJDCisgICAgQVhDCisKKy9hLio/Yy9pCisgICAgQVhZWkMKKworL2EuKmMvaQorICAgIEFBQkMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVpECisKKy9hW2JjXWQvaQorICAgIEFCRAorCisvYVtiLWRdZS9pCisgICAgQUNFCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkMKKyAgICBBQkQKKworL2FbYi1kXS9pCisgICAgQUFDCisKKy9hWy1iXS9pCisgICAgQS0KKworL2FbYi1dL2kKKyAgICBBLQorCisvYV0vaQorICAgIEFdCisKKy9hW11dYi9pCisgICAgQV1CCisKKy9hW15iY11kL2kKKyAgICBBRUQKKworL2FbXi1iXWMvaQorICAgIEFEQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJECisgICAgQS1DCisKKy9hW15dYl1jL2kKKyAgICBBREMKKworL2FifGNkL2kKKyAgICBBQkMKKyAgICBBQkNECisKKy8oKWVmL2kKKyAgICBERUYKKworLyRiL2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFdQworICAgIEIKKworL2FcKGIvaQorICAgIEEoQgorCisvYVwoKmIvaQorICAgIEFCCisgICAgQSgoQgorCisvYVxcYi9pCisgICAgQVxcYgorICAgIGFcXEIgCisKKy8oKGEpKS9pCisgICAgQUJDCisKKy8oYSliKGMpL2kKKyAgICBBQkMKKworL2ErYitjL2kKKyAgICBBQUJCQUJDCisKKy9hezEsfWJ7MSx9Yy9pCisgICAgQUFCQkFCQworCisvYS4rP2MvaQorICAgIEFCQ0FCQworCisvYS4qP2MvaQorICAgIEFCQ0FCQworCisvYS57MCw1fT9jL2kKKyAgICBBQkNBQkMKKworLyhhK3xiKSovaQorICAgIEFCCisKKy8oYSt8Yil7MCx9L2kKKyAgICBBQgorCisvKGErfGIpKy9pCisgICAgQUIKKworLyhhK3xiKXsxLH0vaQorICAgIEFCCisKKy8oYSt8Yik/L2kKKyAgICBBQgorCisvKGErfGIpezAsMX0vaQorICAgIEFCCisKKy8oYSt8Yil7MCwxfT8vaQorICAgIEFCCisKKy9bXmFiXSovaQorICAgIENERQorCisvKFthYmNdKSpkL2kKKyAgICBBQkJCQ0QKKworLyhbYWJjXSkqYmNkL2kKKyAgICBBQkNECisKKy9hfGJ8Y3xkfGUvaQorICAgIEUKKworLyhhfGJ8Y3xkfGUpZi9pCisgICAgRUYKKworL2FiY2QqZWZnL2kKKyAgICBBQkNERUZHCisKKy9hYiovaQorICAgIFhBQllBQkJCWgorICAgIFhBWUFCQkJaCisKKy8oYWJ8Y2QpZS9pCisgICAgQUJDREUKKworL1thYmhnZWZkY11pai9pCisgICAgSElKCisKKy9eKGFifGNkKWUvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJDREUKKworLyhhYmN8KWVmL2kKKyAgICBBQkNERUYKKworLyhhfGIpYypkL2kKKyAgICBBQkNECisKKy8oYWJ8YWIqKWJjL2kKKyAgICBBQkMKKworL2EoW2JjXSopYyovaQorICAgIEFCQworCisvYShbYmNdKikoYypkKS9pCisgICAgQUJDRAorCisvYShbYmNdKykoYypkKS9pCisgICAgQUJDRAorCisvYShbYmNdKikoYytkKS9pCisgICAgQUJDRAorCisvYVtiY2RdKmRjZGNkZS9pCisgICAgQURDRENERQorCisvYVtiY2RdK2RjZGNkZS9pCisKKy8oYWJ8YSliKmMvaQorICAgIEFCQworCisvKChhKShiKWMpKGQpL2kKKyAgICBBQkNECisKKy9bYS16QS1aX11bYS16QS1aMC05X10qL2kKKyAgICBBTFBIQQorCisvXmEoYmMrfGJbZWhdKWd8LmgkL2kKKyAgICBBQkgKKworLyhiYytkJHxlZipnLnxoP2koanxrKSkvaQorICAgIEVGRkdaCisgICAgSUoKKyAgICBSRUZGR1oKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFEQ0RDREUKKyAgICBFRkZHCisgICAgQkNERAorCisvKCgoKCgoKCgoKGEpKSkpKSkpKSkpL2kKKyAgICBBCisKKy8oKCgoKCgoKCgoYSkpKSkpKSkpKSlcMTAvaQorICAgIEFBCisKKy8oKCgoKCgoKChhKSkpKSkpKSkpL2kKKyAgICBBCisKKy8oPzooPzooPzooPzooPzooPzooPzooPzooPzooYSkpKSkpKSkpKSkvaQorICAgIEEKKworLyg/Oig/Oig/Oig/Oig/Oig/Oig/Oig/Oig/OihhfGJ8YykpKSkpKSkpKSkvaQorICAgIEMKKworL211bHRpcGxlIHdvcmRzIG9mIHRleHQvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUEKKyAgICBVSC1VSAorCisvbXVsdGlwbGUgd29yZHMvaQorICAgIE1VTFRJUExFIFdPUkRTLCBZRUFICisKKy8oLiopYyguKikvaQorICAgIEFCQ0RFCisKKy9cKCguKiksICguKilcKS9pCisgICAgKEEsIEIpCisKKy9ba10vaQorCisvYWJjZC9pCisgICAgQUJDRAorCisvYShiYylkL2kKKyAgICBBQkNECisKKy9hWy1dP2MvaQorICAgIEFDCisKKy8oYWJjKVwxL2kKKyAgICBBQkNBQkMKKworLyhbYS1jXSopXDEvaQorICAgIEFCQ0FCQworCisvYSg/IWIpLi8KKyAgICBhYmFkCisKKy9hKD89ZCkuLworICAgIGFiYWQKKworL2EoPz1jfGQpLi8KKyAgICBhYmFkCisKKy9hKD86YnxjfGQpKC4pLworICAgIGFjZQorCisvYSg/OmJ8Y3xkKSooLikvCisgICAgYWNlCisKKy9hKD86YnxjfGQpKz8oLikvCisgICAgYWNlCisgICAgYWNkYmNkYmUKKworL2EoPzpifGN8ZCkrKC4pLworICAgIGFjZGJjZGJlCisKKy9hKD86YnxjfGQpezJ9KC4pLworICAgIGFjZGJjZGJlCisKKy9hKD86YnxjfGQpezQsNX0oLikvCisgICAgYWNkYmNkYmUKKworL2EoPzpifGN8ZCl7NCw1fT8oLikvCisgICAgYWNkYmNkYmUKKworLygoZm9vKXwoYmFyKSkqLworICAgIGZvb2JhcgorCisvYSg/OmJ8Y3xkKXs2LDd9KC4pLworICAgIGFjZGJjZGJlCisKKy9hKD86YnxjfGQpezYsN30/KC4pLworICAgIGFjZGJjZGJlCisKKy9hKD86YnxjfGQpezUsNn0oLikvCisgICAgYWNkYmNkYmUKKworL2EoPzpifGN8ZCl7NSw2fT8oLikvCisgICAgYWNkYmNkYmUKKworL2EoPzpifGN8ZCl7NSw3fSguKS8KKyAgICBhY2RiY2RiZQorCisvYSg/OmJ8Y3xkKXs1LDd9PyguKS8KKyAgICBhY2RiY2RiZQorCisvYSg/OmJ8KGN8ZSl7MSwyfT98ZCkrPyguKS8KKyAgICBhY2UKKworL14oLispP0IvCisgICAgQUIKKworL14oW15hLXpdKXwoXF4pJC8KKyAgICAuCisKKy9eWzw+XSYvCisgICAgPCZPVVQKKworL14oYVwxPyl7NH0kLworICAgIGFhYWFhYWFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCCisgICAgYWFhYWFhYWFhCisgICAgYWFhYWFhYWFhYWEKKworL14oYSg/KDEpXDEpKXs0fSQvCisgICAgYWFhYWFhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYWFhYWFhCisgICAgYWFhYWFhYWFhYWEKKworLyg/OihmKShvKShvKXwoYikoYSkocikpKi8KKyAgICBmb29iYXIKKworLyg/PD1hKWIvCisgICAgYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGNiCisgICAgYgorCisvKD88IWMpYi8KKyAgICBhYgorICAgIGIKKyAgICBiCisKKy8oPzouLikqYS8KKyAgICBhYmEKKworLyg/Oi4uKSo/YS8KKyAgICBhYmEKKworL14oPzpifGEoPz0oLikpKSpcMS8KKyAgICBhYmMKKworL14oKXszLDV9LworICAgIGFiYworCisvXihhKykqYXgvCisgICAgYWF4CisKKy9eKChhfGIpKykqYXgvCisgICAgYWF4CisKKy9eKChhfGJjKSspKmF4LworICAgIGFheAorCisvKGF8eCkqYWIvCisgICAgY2FiCisKKy8oYSkqYWIvCisgICAgY2FiCisKKy8oPzooP2kpYSliLworICAgIGFiCisKKy8oKD9pKWEpYi8KKyAgICBhYgorCisvKD86KD9pKWEpYi8KKyAgICBBYgorCisvKCg/aSlhKWIvCisgICAgQWIKKworLyg/Oig/aSlhKWIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBjYgorICAgIGFCCisKKy8oKD9pKWEpYi8KKworLyg/aTphKWIvCisgICAgYWIKKworLygoP2k6YSkpYi8KKyAgICBhYgorCisvKD9pOmEpYi8KKyAgICBBYgorCisvKCg/aTphKSliLworICAgIEFiCisKKy8oP2k6YSliLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYUIKKyAgICBhQgorCisvKCg/aTphKSliLworCisvKD86KD8taSlhKWIvaQorICAgIGFiCisKKy8oKD8taSlhKWIvaQorICAgIGFiCisKKy8oPzooPy1pKWEpYi9pCisgICAgYUIKKworLygoPy1pKWEpYi9pCisgICAgYUIKKworLyg/Oig/LWkpYSliL2kKKyAgICBhQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWIKKyAgICBBQgorCisvKD8taTphKWIvaQorICAgIGFiCisKKy8oKD8taTphKSliL2kKKyAgICBhYgorCisvKD8taTphKWIvaQorICAgIGFCCisKKy8oKD8taTphKSliL2kKKyAgICBhQgorCisvKD8taTphKWIvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUIKKyAgICBBYgorCisvKCg/LWk6YSkpYi9pCisKKy8oPy1pOmEpYi9pCisgICAgYUIKKworLygoPy1pOmEpKWIvaQorICAgIGFCCisKKy8oPy1pOmEpYi9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYgorICAgIEFCCisKKy8oKD8taTphKSliL2kKKworLygoPy1pOmEuKSliL2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCCisgICAgYVxuQgorCisvKCg/cy1pOmEuKSliL2kKKyAgICBhXG5CCisKKy8oPzpjfGQpKD86KSg/OmEoPzopKD86YikoPzpiKD86KSkoPzpiKD86KSg/OmIpKSkvCisgICAgY2FiYmJiCisKKy8oPzpjfGQpKD86KSg/OmFhYWFhYWFhKD86KSg/OmJiYmJiYmJiKSg/OmJiYmJiYmJiKD86KSkoPzpiYmJiYmJiYig/OikoPzpiYmJiYmJiYikpKS8KKyAgICBjYWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorCisvKGFiKVxkXDEvaQorICAgIEFiNGFiCisgICAgYWI0QWIKKworL2Zvb1x3KlxkezR9YmF6LworICAgIGZvb2JhcjEyMzRiYXoKKworL3gofn4pKig/Oig/OkYpPyk/LworICAgIHh+fgorCisvXmEoPyN4eHgpezN9Yy8KKyAgICBhYWFjCisKKy9eYSAoPyN4eHgpICg/I3l5eSkgezN9Yy94CisgICAgYWFhYworCisvKD88IVtjZF0pYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEJcbkIKKyAgICBkYmNiCisKKy8oPzwhW2NkXSlbYWJdLworICAgIGRiYWFjYgorCisvKD88IShjfGQpKWIvCisKKy8oPzwhKGN8ZCkpW2FiXS8KKyAgICBkYmFhY2IKKworLyg/PCFjZClbYWJdLworICAgIGNkYWNjYgorCisvXig/OmE/Yj8pKiQvCisgICAgXAorICAgIGEKKyAgICBhYgorICAgIGFhYSAgIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZGJjYgorICAgIGEtLQorICAgIGFhLS0gCisKKy8oKD9zKV5hKC4pKSgoP20pXmIkKS8KKyAgICBhXG5iXG5jXG4KKworLygoP20pXmIkKS8KKyAgICBhXG5iXG5jXG4KKworLyg/bSleYi8KKyAgICBhXG5iXG4KKworLyg/bSleKGIpLworICAgIGFcbmJcbgorCisvKCg/bSleYikvCisgICAgYVxuYlxuCisKKy9cbigoP20pXmIpLworICAgIGFcbmJcbgorCisvKCg/cykuKWMoPyEuKS8KKyAgICBhXG5iXG5jXG4KKyAgICBhXG5iXG5jXG4KKworLygoP3MpYi4pYyg/IS4pLworICAgIGFcbmJcbmNcbgorICAgIGFcbmJcbmNcbgorCisvXmIvCisKKy8oKV5iLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxuYlxuY1xuCisgICAgYVxuYlxuY1xuCisKKy8oKD9tKV5iKS8KKyAgICBhXG5iXG5jXG4KKworLyh4KT8oPygxKWF8YikvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCisgICAgYQorCisvKHgpPyg/KDEpYnxhKS8KKyAgICBhCisKKy8oKT8oPygxKWJ8YSkvCisgICAgYQorCisvKCkoPygxKWJ8YSkvCisKKy8oKT8oPygxKWF8YikvCisgICAgYQorCisvXihcKCk/YmxhaCg/KDEpKFwpKSkkLworICAgIChibGFoKQorICAgIGJsYWgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKKyAgICBibGFoKQorICAgIChibGFoCisKKy9eKFwoKyk/YmxhaCg/KDEpKFwpKSkkLworICAgIChibGFoKQorICAgIGJsYWgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJsYWgpCisgICAgKGJsYWgKKworLyg/KD8hYSlhfGIpLworCisvKD8oPyFhKWJ8YSkvCisgICAgYQorCisvKD8oPz1hKWJ8YSkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCisgICAgYQorCisvKD8oPz1hKWF8YikvCisgICAgYQorCisvKD89KGErPykpKFwxYWIpLworICAgIGFhYWIKKworL14oPz0oYSs/KSlcMWFiLworCisvKFx3KzopKy8KKyAgICBvbmU6CisKKy8kKD88PV4oYSkpLworICAgIGEKKworLyg/PShhKz8pKShcMWFiKS8KKyAgICBhYWFiCisKKy9eKD89KGErPykpXDFhYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWIKKyAgICBhYWFiCisKKy8oW1x3Ol0rOjopPyhcdyspJC8KKyAgICBhYmNkCisgICAgeHk6ejo6OmFiY2QKKworL15bXmJjZF0qKGMrKS8KKyAgICBhZXh5Y2QKKworLyhhKiliKy8KKyAgICBjYWFiCisKKy8oW1x3Ol0rOjopPyhcdyspJC8KKyAgICBhYmNkCisgICAgeHk6ejo6OmFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2Q6CisgICAgYWJjZDoKKworL15bXmJjZF0qKGMrKS8KKyAgICBhZXh5Y2QKKworLyg+YSspYWIvCisKKy8oPz5hKyliLworICAgIGFhYWIKKworLyhbWzpdKykvCisgICAgYTpbYl06CisKKy8oW1s9XSspLworICAgIGE9W2JdPQorCisvKFtbLl0rKS8KKyAgICBhLltiXS4KKworLygoPz5hKyliKS8KKyAgICBhYWFiCisKKy8oPz4oYSspKWIvCisgICAgYWFhYgorCisvKCg/PlteKCldKyl8XChbXigpXSpcKSkrLworICAgICgoYWJjKGFkZSl1ZmgoKSgpeAorCisvYVxaLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYgorICAgIGFcbmJcbgorCisvYlxaLworICAgIGFcbmJcbgorCisvYlx6LworCisvYlxaLworICAgIGFcbmIKKworL2Jcei8KKyAgICBhXG5iCisgICAgCisvXig/Pig/KDEpXC58KCkpW15cV19dKD8+W2EtejAtOS1dKlteXFdfXSk/KSskLworICAgIGEKKyAgICBhYmMKKyAgICBhLWIKKyAgICAwLTkgCisgICAgYS5iCisgICAgNS42LjcgIAorICAgIHRoZS5xdWljay5icm93bi5mb3gKKyAgICBhMTAwLmIyMDAuMzAwYyAgCisgICAgMTItYWIuMTI0NSAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFwKKyAgICAuYQorICAgIC1hCisgICAgYS0KKyAgICBhLiAgCisgICAgYV9iIAorICAgIGEuLQorICAgIGEuLiAgCisgICAgYWIuLmJjIAorICAgIHRoZS5xdWljay5icm93bi5mb3gtCisgICAgdGhlLnF1aWNrLmJyb3duLmZveC4KKyAgICB0aGUucXVpY2suYnJvd24uZm94XworICAgIHRoZS5xdWljay5icm93bi5mb3grICAgICAgIAorCisvKD8+LiopKD88PShhYmNkfHd4eXopKS8KKyAgICBhbHBoYWJldGFiY2QKKyAgICBlbmRpbmd3eHl6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhIHJhdGhlciBsb25nIHN0cmluZyB0aGF0IGRvZXNuJ3QgZW5kIHdpdGggb25lIG9mIHRoZW0KKworL3dvcmQgKD8+KD86KD8hb3RoZXJ3b3JkKVthLXpBLVowLTldKyApezAsMzB9KW90aGVyd29yZC8KKyAgICB3b3JkIGNhdCBkb2cgZWxlcGhhbnQgbXVzc2VsIGNvdyBob3JzZSBjYW5hcnkgYmFib29uIHNuYWtlIHNoYXJrIG90aGVyd29yZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyaworICAKKy93b3JkICg/PlthLXpBLVowLTldKyApezAsMzB9b3RoZXJ3b3JkLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyayB0aGUgcXVpY2sgYnJvd24gZm94IGFuZCB0aGUgbGF6eSBkb2cgYW5kIHNldmVyYWwgb3RoZXIgd29yZHMgZ2V0dGluZyBjbG9zZSB0byB0aGlydHkgYnkgbm93IEkgaG9wZQorCisvKD88PVxkezN9KD8hOTk5KSlmb28vCisgICAgOTk5Zm9vCisgICAgMTIzOTk5Zm9vIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzYWJjZm9vCisgICAgCisvKD88PSg/IS4uLjk5OSlcZHszfSlmb28vCisgICAgOTk5Zm9vCisgICAgMTIzOTk5Zm9vIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzYWJjZm9vCisKKy8oPzw9XGR7M30oPyE5OTkpLi4uKWZvby8KKyAgICAxMjNhYmNmb28KKyAgICAxMjM0NTZmb28gCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM5OTlmb28gIAorICAgIAorLyg/PD1cZHszfS4uLikoPzwhOTk5KWZvby8KKyAgICAxMjNhYmNmb28gICAKKyAgICAxMjM0NTZmb28gCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM5OTlmb28gIAorCisvPGFbXHNdK2hyZWZbXHNdKj1bXHNdKiAgICAgICAgICAjIGZpbmQgPGEgaHJlZj0KKyAoW1wiXCddKT8gICAgICAgICAgICAgICAgICAgICAgICMgZmluZCBzaW5nbGUgb3IgZG91YmxlIHF1b3RlCisgKD8oMSkgKC4qPylcMSB8IChbXlxzXSspKSAgICAgICAjIGlmIHF1b3RlIGZvdW5kLCBtYXRjaCB1cCB0byBuZXh0IG1hdGNoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHF1b3RlLCBvdGhlcndpc2UgbWF0Y2ggdXAgdG8gbmV4dCBzcGFjZQorL2lzeAorICAgIDxhIGhyZWY9YWJjZCB4eXoKKyAgICA8YSBocmVmPVwiYWJjZCB4eXogcHFyXCIgY2F0cworICAgIDxhIGhyZWY9XCdhYmNkIHh5eiBwcXJcJyBjYXRzCisKKy88YVxzK2hyZWZccyo9XHMqICAgICAgICAgICAgICAgICMgZmluZCA8YSBocmVmPQorIChbIiddKT8gICAgICAgICAgICAgICAgICAgICAgICAgIyBmaW5kIHNpbmdsZSBvciBkb3VibGUgcXVvdGUKKyAoPygxKSAoLio/KVwxIHwgKFxTKykpICAgICAgICAgICMgaWYgcXVvdGUgZm91bmQsIG1hdGNoIHVwIHRvIG5leHQgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcXVvdGUsIG90aGVyd2lzZSBtYXRjaCB1cCB0byBuZXh0IHNwYWNlCisvaXN4CisgICAgPGEgaHJlZj1hYmNkIHh5egorICAgIDxhIGhyZWY9XCJhYmNkIHh5eiBwcXJcIiBjYXRzCisgICAgPGEgaHJlZiAgICAgICA9ICAgICAgIFwnYWJjZCB4eXogcHFyXCcgY2F0cworCisvPGFccytocmVmKD8+XHMqKT0oPz5ccyopICAgICAgICAjIGZpbmQgPGEgaHJlZj0KKyAoWyInXSk/ICAgICAgICAgICAgICAgICAgICAgICAgICMgZmluZCBzaW5nbGUgb3IgZG91YmxlIHF1b3RlCisgKD8oMSkgKC4qPylcMSB8IChcUyspKSAgICAgICAgICAjIGlmIHF1b3RlIGZvdW5kLCBtYXRjaCB1cCB0byBuZXh0IG1hdGNoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHF1b3RlLCBvdGhlcndpc2UgbWF0Y2ggdXAgdG8gbmV4dCBzcGFjZQorL2lzeAorICAgIDxhIGhyZWY9YWJjZCB4eXoKKyAgICA8YSBocmVmPVwiYWJjZCB4eXogcHFyXCIgY2F0cworICAgIDxhIGhyZWYgICAgICAgPSAgICAgICBcJ2FiY2QgeHl6IHBxclwnIGNhdHMKKworLygoWikrfEEpKi8KKyAgICBaQUJDREVGRworCisvKFooKXxBKSovCisgICAgWkFCQ0RFRkcKKworLyhaKCgpKXxBKSovCisgICAgWkFCQ0RFRkcKKworLygoPz5aKSt8QSkqLworICAgIFpBQkNERUZHCisKKy8oKD8+KSt8QSkqLworICAgIFpBQkNERUZHCisKKy9hKi9nCisgICAgYWJiYWIKKworL15bXGQtYV0vCisgICAgYWJjZGUKKyAgICAtdGhpbmdzCisgICAgMGRpZ2l0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiY2RlZiAgICAKKyAgICAKKy9bWzpzcGFjZTpdXSsvCisgICAgPiBceDA5XHgwYVx4MGNceDBkXHgwYjwKKyAgICAgCisvW1s6Ymxhbms6XV0rLworICAgID4gXHgwOVx4MGFceDBjXHgwZFx4MGI8CisgICAgIAorL1tcc10rLworICAgID4gXHgwOVx4MGFceDBjXHgwZFx4MGI8CisgICAgIAorL1xzKy8KKyAgICA+IFx4MDlceDBhXHgwY1x4MGRceDBiPAorICAgICAKKy9hC2IveAorICAgIGFiCisKKy8oPyFcQSl4L20KKyAgICBhXG54YlxuCisKKy8oPyFeKXgvbQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxueGJcbgorCisvYWJjXFFhYmNcRWFiYy8KKyAgICBhYmNhYmNhYmMKKyAgICAKKy9hYmNcUSgqK3xcRWFiYy8KKyAgICBhYmMoKit8YWJjIAorCisvICAgYWJjXFEgYWJjXEVhYmMveAorICAgIGFiYyBhYmNhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2FiY2FiYyAgCisgICAgCisvYWJjI2NvbW1lbnQKKyAgICBcUSNub3QgY29tbWVudAorICAgIGxpdGVyYWxcRS94CisgICAgYWJjI25vdCBjb21tZW50XG4gICAgbGl0ZXJhbCAgICAgCisKKy9hYmMjY29tbWVudAorICAgIFxRI25vdCBjb21tZW50CisgICAgbGl0ZXJhbC94CisgICAgYWJjI25vdCBjb21tZW50XG4gICAgbGl0ZXJhbCAgICAgCisKKy9hYmMjY29tbWVudAorICAgIFxRI25vdCBjb21tZW50CisgICAgbGl0ZXJhbFxFICNtb3JlIGNvbW1lbnQKKyAgICAveAorICAgIGFiYyNub3QgY29tbWVudFxuICAgIGxpdGVyYWwgICAgIAorCisvYWJjI2NvbW1lbnQKKyAgICBcUSNub3QgY29tbWVudAorICAgIGxpdGVyYWxcRSAjbW9yZSBjb21tZW50L3gKKyAgICBhYmMjbm90IGNvbW1lbnRcbiAgICBsaXRlcmFsICAgICAKKworL1xRYWJjXCR4eXpcRS8KKyAgICBhYmNcXFwkeHl6CisKKy9cUWFiY1xFXCRcUXh5elxFLworICAgIGFiY1wkeHl6CisKKy9cR2FiYy8KKyAgICBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5emFiYyAgCisKKy9cR2FiYy4vZworICAgIGFiYzFhYmMyeHl6YWJjMworCisvYWJjLi9nCisgICAgYWJjMWFiYzJ4eXphYmMzIAorCisvYSg/eDogYiBjIClkLworICAgIFhhYmNkWQorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFhhIGIgYyBkIFkgCisKKy8oKD94KXggeSB6IHwgYSBiIGMpLworICAgIFhhYmNZCisgICAgQXh5ekIgCisKKy8oP2kpQUIoPy1pKUMvCisgICAgWGFiQ1kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhhYmNZICAKKworLygoP2kpQUIoPy1pKUN8RClFLworICAgIGFiQ0UKKyAgICBERQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjRQorICAgIGFiQ2UgIAorICAgIGRFCisgICAgRGUgICAgCisKKy8oLiopXGQrXDEvCisgICAgYWJjMTIzYWJjCisgICAgYWJjMTIzYmMgCisKKy8oLiopXGQrXDEvcworICAgIGFiYzEyM2FiYworICAgIGFiYzEyM2JjIAorICAgIAorLygoLiopKVxkK1wxLworICAgIGFiYzEyM2FiYworICAgIGFiYzEyM2JjICAKKworIyBUaGlzIHRlc3RzIGZvciBhbiBJUHY2IGFkZHJlc3MgaW4gdGhlIGZvcm0gd2hlcmUgaXQgY2FuIGhhdmUgdXAgdG8KKyMgZWlnaHQgY29tcG9uZW50cywgb25lIGFuZCBvbmx5IG9uZSBvZiB3aGljaCBpcyBlbXB0eS4gVGhpcyBtdXN0IGJlCisjIGFuIGludGVybmFsIGNvbXBvbmVudC4gCisKKy9eKD8hOikgICAgICAgICAgICAgICAgICAgICAgICMgY29sb24gZGlzYWxsb3dlZCBhdCBzdGFydAorICAoPzogICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGFydCBvZiBpdGVtCisgICAgKD86IFswLTlhLWZdezEsNH0gfCAgICAgICAjIDEtNCBoZXggZGlnaXRzIG9yCisgICAgKD8oMSkwIHwgKCkgKSApICAgICAgICAgICAjIGlmIG51bGwgcHJldmlvdXNseSBtYXRjaGVkLCBmYWlsOyBlbHNlIG51bGwKKyAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICMgZm9sbG93ZWQgYnkgY29sb24KKyAgKXsxLDd9ICAgICAgICAgICAgICAgICAgICAgICMgZW5kIGl0ZW07IDEtNyBvZiB0aGVtIHJlcXVpcmVkICAgICAgICAgICAgICAgCisgIFswLTlhLWZdezEsNH0gJCAgICAgICAgICAgICAjIGZpbmFsIGhleCBudW1iZXIgYXQgZW5kIG9mIHN0cmluZworICAoPygxKXwuKSAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRoZXJlIHdhcyBhbiBlbXB0eSBjb21wb25lbnQKKyAgL2l4CisgICAgYTEyMzo6YTEyMworICAgIGExMjM6YjM0Mjo6YWJjZAorICAgIGExMjM6YjM0Mjo6MzI0ZTphYmNkCisgICAgYTEyMzpkZGRlOmIzNDI6OjMyNGU6YWJjZAorICAgIGExMjM6ZGRkZTpiMzQyOjozMjRlOmRjYmE6YWJjZAorICAgIGExMjM6ZGRkZTo5OTk5OmIzNDI6OjMyNGU6ZGNiYTphYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxOjI6Mzo0OjU6Njo3OjgKKyAgICBhMTIzOmJjZTpkZGRlOjk5OTk6YjM0Mjo6MzI0ZTpkY2JhOmFiY2QKKyAgICBhMTIzOjo5OTk5OmIzNDI6OjMyNGU6ZGNiYTphYmNkCisgICAgYWJjZGU6MjozOjQ6NTo2Ojc6OAorICAgIDo6MQorICAgIGFiY2Q6ZmVlMDoxMjM6OiAgIAorICAgIDoxCisgICAgMTogIAorCisvW3pcUWEtZF1cRV0vCisgICAgegorICAgIGEKKyAgICAtCisgICAgZAorICAgIF0gCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiICAgICAKKworLyhhKykqYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgCisgICAgCisvKD9pKXJlZyg/OnVsKD86W2HkXXxhZSlyfGV4KS8KKyAgICBSRUd1bGFyCisgICAgcmVndWxhZXIKKyAgICBSZWdleCAgCisgICAgcmVndWzkciAKKworL8Xm5eRb4C3/wC3fXSsvCisgICAgxebl5OAKKyAgICDF5uXk/worICAgIMXm5eTACisgICAgxebl5N8KKworLyg/PD1aKVguLworICBceDg0WEFaWEIKKworL2FiIGNkICg/eCkgZGUgZmcvCisgICAgYWIgY2QgZGVmZworCisvYWIgY2QoP3gpIGRlIGZnLworICAgIGFiIGNkZGVmZworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiY2RkZWZnCisKKy8oPzwhW15mXW9vKShiYXIpLworICAgIGZvb2JhclggCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYm9vYmFyWAorCisvKD88IVteZl0pWC8KKyAgICBvZmZYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBvbnlYICAKKworLyg/PD1bXmZdKVgvCisgICAgb255WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgb2ZmWCAKKworL14vZ20KKyAgICBhXG5iXG5jXG4KKyAgICBcIAorICAgIAorLyg/PD1DXG4pXi9nbQorICAgIEFcbkNcbkNcbiAKKworLyg/Oig/KDEpYXxiKShYKSkrLworICAgIGJYYVgKKworLyg/Oig/KDEpXDFhfGIpKFh8WSkpKy8KKyAgICBiWFhhWVlhWQorICAgIGJYWWFYWGFYICAKKworLygpKCkoKSgpKCkoKSgpKCkoKSg/Oig/KDEwKVwxMGF8YikoWHxZKSkrLworICAgIGJYWGFZWWFZCisKKy9bWyxhYmMsXStdLworICAgIGFiY10KKyAgICBhLGJdCisgICAgW2EsYixjXSAgCisKKy8oPy14OiApL3gKKyAgICBBXHgyMEIKKyAgICAKKyIoP3gpKD8teDogXHMqI1xzKikiCisgICAgQSAjIEIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICMgIAorCisiKD94LWlzKSg/Oig/LWl4cykgXHMqI1xzKikgaW5jbHVkZSIKKyAgICBBICNpbmNsdWRlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBI2luY2x1ZGUgIAorICAgIEEgI0luY2x1ZGUKKworL2EqYipcdy8KKyAgICBhYWFiYmJiCisgICAgYWFhYQorICAgIGEKKworL2EqYj9cdy8KKyAgICBhYWFiYmJiCisgICAgYWFhYQorICAgIGEKKworL2EqYnswLDR9XHcvCisgICAgYWFhYmJiYgorICAgIGFhYWEKKyAgICBhCisKKy9hKmJ7MCx9XHcvCisgICAgYWFhYmJiYgorICAgIGFhYWEKKyAgICBhCisgICAgCisvYSpcZCpcdy8KKyAgICAwYQorICAgIGEgCisgICAgCisvYSpiICpcdy94CisgICAgYSAKKworL2EqYiNjb21tZW50CisgICpcdy94CisgICAgYSAKKworL2EqIGIgKlx3L3gKKyAgICBhIAorCisvXlx3Kz0uKihcXFxuLiopKi8KKyAgICBhYmM9eHl6XFxcbnBxcgorCisvKD89KFx3KykpXDE6LworICAgIGFiY2Q6CisKKy9eKD89KFx3KykpXDE6LworICAgIGFiY2Q6CisKKy9eXEVhYmMvCisgICAgYWJjCisgICAgCisvXltcRWFiY10vCisgICAgYQorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIEUgCisgICAgCisvXlthLVxFY10vCisgICAgYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgLQorICAgIEUgICAgCisKKy9eW2FcRVxFLVxFY10vCisgICAgYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgLQorICAgIEUgICAgCisKKy9eW1xFXFFhXEUtXFF6XEVdKy8KKyAgICBiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAtICAKKyAgICAKKy9eW2FcUV1iY1xFXS8KKyAgICBhCisgICAgXQorICAgIGMKKyAgICAKKy9eW2EtXFFcRV0vCisgICAgYQorICAgIC0gICAgIAorCisvXihhKCkqKSovCisgICAgYWFhYQorCisvXig/OmEoPzooPzopKSopKi8KKyAgICBhYWFhCisKKy9eKGEoKSspKy8KKyAgICBhYWFhCisKKy9eKD86YSg/Oig/OikpKykrLworICAgIGFhYWEKKworLyhhKXswLDN9KD8oMSlifChjfCkpKkQvCisgICAgYWJiRAorICAgIGNjY2NECisgICAgRCAgCisKKy8oYXwpKlxkLworICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisKKy8oPz5hfCkqXGQvCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTQKK1w9IEV4cGVjdCBubyBtYXRjaAorICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKworLyg/OmF8KSpcZC8KKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorCisvXFovZworICBhYmNcbgorICAKKy9eKD9zKSg/Pi4qKSg/PCFcbikvCisgIGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgIGFiY1xuICAKKworL14oPyFbXlxuXSpcblx6KS8KKyAgYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgYWJjXG4gCisgIAorL1x6KD88IVxuKS8KKyAgYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgYWJjXG4gIAorCisvKC4qKC4pPykqLworICAgIGFiY2QKKworLyggKEEgfCAoPygxKTB8KSApKiAgICkveAorICAgIGFiY2QKKworLyggKCAoPygxKTB8KSApKiAgICkveAorICAgIGFiY2QKKworLyggICg/KDEpMHwpKiAgICkveAorICAgIGFiY2QKKworL1tbOmFiY2Q6eHl6XV0vCisgICAgYV0KKyAgICA6XSAKKyAgICAKKy9bYWJjWzp4XF1wcXJdLworICAgIGEKKyAgICBbCisgICAgOgorICAgIF0KKyAgICBwICAgIAorCisvLipbb3BdW3h5el0vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBmb29hYmNmb28KKworLyg/KD89LipiKWJ8XikvCisgICBhZGMKKyAgIGFiYyAKKworLyg/KD89Xi4qYilifF4pLworICAgYWRjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgIGFiYyAKKworLyg/KD89LipiKWJ8XikqLworICAgYWRjCisgICBhYmMgCisKKy8oPyg/PS4qYilifF4pKy8KKyAgIGFkYworICAgYWJjIAorCisvKD8oPz1iKS4qYnxeZCkvCisgICAgYWJjCisKKy8oPyg/PS4qYikuKmJ8XmQpLworICAgIGFiYworCisvXiUoKD8oPz1bYV0pW14lXSl8YikqJSQvCisgICAgJWFiJQorCisvKD9pKWEoPy1pKWJ8Yy8KKyAgICBYYWJYCisgICAgWEFiWAorICAgIENjQyAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhBQlggICAKKworL1tceDAwLVx4ZmZcc10rLworICAgIFx4MGFceDBiXHgwY1x4MGQKKworLyhhYmMpXDEvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICBhYmMKKworLyhhYmMpXDEvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgIGFiYworCisvW15hXSovaQorICAgIDEyYWJjCisgICAgMTJBQkMKKworL1teYV0qKy9pCisgICAgMTJhYmMKKyAgICAxMkFCQworCisvW15hXSo/WC9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMmFiYworICAgIDEyQUJDCisgICAgCisvW15hXSs/WC9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMmFiYworICAgIDEyQUJDCisKKy9bXmFdP1gvaQorICAgIDEyYVhiY1gKKyAgICAxMkFYQkNYCisgICAgQkNYIAorCisvW15hXT8/WC9pCisgICAgMTJhWGJjWAorICAgIDEyQVhCQ1gKKyAgICBCQ1gKKyAgICAKKy9bXmFdPytYL2kKKyAgICAxMmFYYmNYCisgICAgMTJBWEJDWAorICAgIEJDWCAKKworL1teYV17MiwzfS9pCisgICAgYWJjZGVmCisgICAgQUJDREVGICAKKworL1teYV17MiwzfT8vaQorICAgIGFiY2RlZgorICAgIEFCQ0RFRiAgCisKKy9bXmFdezIsM30rL2kKKyAgICBhYmNkZWYKKyAgICBBQkNERUYgIAorCisvKChhfCkrKStaLworICAgIFoKKworLyhhKWJ8KGEpYy8KKyAgICBhYworCisvKD8+KGEpKWJ8KGEpYy8KKyAgICBhYworCisvKD89KGEpKWFifChhKWMvCisgICAgYWMKKworLygoPz4oYSkpYnwoYSljKS8KKyAgICBhYworCisvKCg/PihhKSlifChhKWMpKysvCisgICAgYWMKKworLyg/Oig/PihhKSlifChhKWMpKysvCisgICAgYWMKKworLyg/PSg/PihhKSlifChhKWMpKC4uKS8KKyAgICBhYworCisvKD8+KD8+KGEpKWJ8KGEpYykvCisgICAgYWMKKworLyg/Oig/PihbYWJdKSkpK2E9L2FmdGVydGV4dAorICAgID1iYT0KKworLyg/PihbYWJdKSkrYT0vYWZ0ZXJ0ZXh0CisgICAgPWJhPQorCisvKCg/PihhKyliKSsoYWFiYWIpKS8KKyAgICBhYWFhYmFhYWJhYWJhYgorCisvKD8+YSt8YWIpKz9jLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFiYworCisvKD8+YSt8YWIpK2MvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWJjCisKKy8oPzphK3xhYikrYy8KKyAgICBhYWJjCisKKy8oPyg/PShhKSlhKS8KKyAgICBhCisKKy8oPyg/PShhKSlhKShiKS8KKyAgICBhYgorCisvXig/OmF8YWIpKytjLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYWJjCisKKy9eKD8+YXxhYikrK2MvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhYmMKKworL14oPzphfGFiKStjLworICAgIGFhYWFiYworCisvKD89YWJjKXszfWFiYy9hZnRlcnRleHQKKyAgICBhYmNhYmNhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5eiAgCisgICAgCisvKD89YWJjKSthYmMvYWZ0ZXJ0ZXh0CisgICAgYWJjYWJjYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXogIAorICAgIAorLyg/PWFiYykrK2FiYy9hZnRlcnRleHQKKyAgICBhYmNhYmNhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5eiAgCisgICAgCisvKD89YWJjKXswfXh5ei8KKyAgICB4eXogCisKKy8oPz1hYmMpezF9eHl6LworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6IAorICAgIAorLyg/PShhKSk/Li8KKyAgICBhYgorICAgIGJjCisgICAgICAKKy8oPz0oYSkpPz8uLworICAgIGFiCisgICAgYmMKKworL14oPz0oPzEpKT9bYXpdKFthYmNdKWQvCisgICAgYWJkIAorICAgIHpjZHh4IAorCisvXig/IWEpezB9XHcrLworICAgIGFhYWFhCisKKy8oPzw9KGFiYykpP3h5ei8KKyAgICBhYmN4eXoKKyAgICBwcXJ4eXogCisKKy9eW1xnPGE+XSsvCisgICAgZ2dnPDw8YWFhPj4+CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcXGdhICAKKyAgICAKKy9eW1xnYV0rLworICAgIGdnZ2FnYWdheHl6IAorICAgIAorL15bOmFbOmRpZ2l0Ol1dKy8KKyAgICBhYWFhNDQ0Ojo6WiAKKworL15bOmFbOmRpZ2l0Ol06Yl0rLworICAgIGFhYWE0NDQ6OjpiYmJaIAorCisvWzphXXh4eFtiOl0vCisgICAgIDp4eHg6CisgICAgIAorLyg/PD1hezJ9KWIvaQorICAgIHhhYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4YWJjICAKKworLyg/PCFhezJ9KWIvaQorICAgIHhhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHhhYWJjICAKKworLyg/PD1hXGgpYy8KKyAgICB4YSBjCisgICAgCisvKD88PVteYV17Mn0pYi8KKyAgICBheHhiYworICAgIGFBQWJjIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeGFhYmMgICAgCisKKy8oPzw9W15hXXsyfSliL2kKKyAgICBheHhiYyAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhQUFiYyAKKyAgICB4YWFiYyAgICAKKworLyg/PD1hXEgpYy8KKyAgICBhYmMKKworLyg/PD1hXFYpYy8KKyAgICBhYmMKKyAgICAKKy8oPzw9YVx2KWMvCisgICAgYVxuYworCisvKD8oPz1jKWN8ZCkrK1kvCisgICAgWGNjY2RkWVgKKworLyg/KD89YyljfGQpKitZLworICAgIFhjY2NkZFlYCisKKy9eKGF7MiwzfSl7Mix9K2EvCisgICAgYWFhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYWFhCisgICAgYWFhYWFhYWFhIAorCisvXihhezIsM30pKythLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYWFhCisKKy9eKGF7MiwzfSkqK2EvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhYWEKKworL1xIXGhcVlx2LworICAgIFggWFx4MGEKKyAgICBYXHgwOVhceDBiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceGEwIFhceDBhICAgCisgICAgCisvXEgqXGgrXFY/XHZ7Myw0fS8KKyAgICBceDA5XHgyMFx4YTBYXHgwYVx4MGJceDBjXHgwZFx4MGEKKyAgICBceDA5XHgyMFx4YTBceDBhXHgwYlx4MGNceDBkXHgwYQorICAgIFx4MDlceDIwXHhhMFx4MGFceDBiXHgwYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFx4MDlceDIwXHhhMFx4MGFceDBiCisgICAgIAorL1xIezMsNH0vCisgICAgWFkgIEFCQ0RFCisgICAgWFkgIFBRUiBTVCAKKyAgICAKKy8uXGh7Myw0fS4vCisgICAgWFkgIEFCICAgIFBRUlMKKworL1xoKlhcaD9cSCtZXEg/Wi8KKyAgICA+WE5OTllaCisgICAgPiAgWCBOWVFaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICA+WFlaICAgCisgICAgPiAgWCBOWSBaCisKKy9cdipYXHY/WVx2K1pcVipceDBhXFYrXHgwYlxWezIsM31ceDBjLworICAgID5YWVx4MGFaXHgwYUFceDBiTk5ceDBjCisgICAgPlx4MGFceDBkWFx4MGFZXHgwYVx4MGJaWlpceDBhQUFBXHgwYk5OTlx4MGMKKworLyhmb28pXEtiYXIvCisgICAgZm9vYmFyCisgICAKKy8oZm9vKShcS2JhcnxiYXopLworICAgIGZvb2JhcgorICAgIGZvb2JheiAKKworLyhmb29cS2JhciliYXovCisgICAgZm9vYmFyYmF6CisKKy9hYmNcS3xkZWZcSy9nLGFmdGVydGV4dAorICAgIFhhYmNkZWZnaGkKKworL2FiXEtjfGRlXEtmL2csYWZ0ZXJ0ZXh0CisgICAgWGFiY2RlZmdoaQorICAgIAorLyg/PUMpL2csYWZ0ZXJ0ZXh0CisgICAgQUJDREVDQkEKKyAgICAKKy9eYWJjXEsvYWZ0ZXJ0ZXh0CisgICAgYWJjZGVmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBkZWZhYmN4eXogICAKKworL14oYShiKSlcMVxnMVxnezF9XGctMVxney0xfVxney0yfVovCisgICAgYWJhYmFiYWJiYmFiWlhYWFgKKworLyg/PEE+dG9tfGJvbiktXGd7QX0vCisgICAgdG9tLXRvbQorICAgIGJvbi1ib24gCisgICAgCisvKF4oYXxiXGd7LTF9KSkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYWN4eHgKKworLyg/fChhYmMpfCh4eXopKVwxLworICAgIGFiY2FiYworICAgIHh5enh5eiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY3h5egorICAgIHh5emFiYyAgIAorICAgIAorLyg/fChhYmMpfCh4eXopKSg/MSkvCisgICAgYWJjYWJjCisgICAgeHl6YWJjIAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIHh5enh5eiAKKyAKKy9eWCg/NSkoYSkoP3woYil8KHEpKShjKShkKShZKS8KKyAgICBYWWFiY2RZCisKKy9eWCg/NykoYSkoP3woYnwocikocykpfChxKSkoYykoZCkoWSkvCisgICAgWFlhYmNkWQorCisvXlgoPzcpKGEpKD98KGJ8KD98KHIpfCh0KSkocykpfChxKSkoYykoZCkoWSkvCisgICAgWFlhYmNkWQorCisvKD8nYWJjJ1x3Kyk6XGs8YWJjPnsyfS8KKyAgICBhOmFheHl6CisgICAgYWI6YWJhYnh5egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYTpheHl6CisgICAgYWI6YWJ4eXoKKworLyg/J2FiYydcdyspOlxne2FiY317Mn0vCisgICAgYTphYXh5egorICAgIGFiOmFiYWJ4eXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGE6YXh5egorICAgIGFiOmFieHl6CisKKy9eKD88YWI+YSk/ICg/KDxhYj4pYnxjKSAoPygnYWInKWR8ZSkveAorICAgIGFiZAorICAgIGNlCisKKy9eKGEuKVxnLTFaLworICAgIGFYYVhaCisKKy9eKGEuKVxney0xfVovCisgICAgYVhhWFoKKworL14oPyhERUZJTkUpICg/PEE+IGEpICg/PEI+IGIpICkgICg/JkEpICg/JkIpIC94CisgICAgYWJjZAorCisvKD88TkFNRT4oPyZOQU1FX1BBVCkpXHMrKD88QUREUj4oPyZBRERSRVNTX1BBVCkpCisgICg/KERFRklORSkKKyAgKD88TkFNRV9QQVQ+W2Etel0rKQorICAoPzxBRERSRVNTX1BBVD5cZCspCisgICkveAorICAgIG1ldGNhbGZlIDMzCisKKy8oPyhERUZJTkUpKD88Ynl0ZT4yWzAtNF1cZHwyNVswLTVdfDFcZFxkfFsxLTldP1xkKSlcYig/JmJ5dGUpKFwuKD8mYnl0ZSkpezN9LworICAgIDEuMi4zLjQKKyAgICAxMzEuMTExLjEwLjIwNgorICAgIDEwLjAuMC4wCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMC42CisgICAgNDU1LjMuNC41CisKKy9cYig/JmJ5dGUpKFwuKD8mYnl0ZSkpezN9KD8oREVGSU5FKSg/PGJ5dGU+MlswLTRdXGR8MjVbMC01XXwxXGRcZHxbMS05XT9cZCkpLworICAgIDEuMi4zLjQKKyAgICAxMzEuMTExLjEwLjIwNgorICAgIDEwLjAuMC4wCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMC42CisgICAgNDU1LjMuNC41CisKKy9eKFx3Kyt8XHMrKykqJC8KKyAgICBub3cgaXMgdGhlIHRpbWUgZm9yIGFsbCBnb29kIG1lbiB0byBjb21lIHRvIHRoZSBhaWQgb2YgdGhlIHBhcnR5CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB0aGlzIGlzIG5vdCBhIGxpbmUgd2l0aCBvbmx5IHdvcmRzIGFuZCBzcGFjZXMhCisKKy8oXGQrKykoXHcpLworICAgIDEyMzQ1YQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNDUrCisKKy9hKytiLworICAgIGFhYWIKKworLyhhKytiKS8KKyAgICBhYWFiCisKKy8oYSsrKWIvCisgICAgYWFhYgorCisvKFteKCldKyt8XChbXigpXSpcKSkrLworICAgICgoYWJjKGFkZSl1ZmgoKSgpeAorCisvXCgoW14oKV0rK3xcKFteKCldK1wpKStcKS8KKyAgICAoYWJjKQorICAgIChhYmMoZGVmKXh5eikKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICgoKClhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorCisvXihbXigpXXxcKCg/MSkqXCkpKiQvCisgICAgYWJjCisgICAgYShiKWMKKyAgICBhKGIoYykpZAorXD0gRXhwZWN0IG5vIG1hdGNoKQorICAgIGEoYihjKWQKKworL14+YWJjPihbXigpXXxcKCg/MSkqXCkpKjx4eXo8JC8KKyAgID5hYmM+MTIzPHh5ejwKKyAgID5hYmM+MSgyKTM8eHl6PAorICAgPmFiYz4oMSgyKTMpPHh5ejwKKworL14oPzooKC4pKD8xKVwyfCl8KCguKSg/MylcNHwuKSkkL2kKKyAgICAxMjIxCisgICAgU2F0YW5vc2NpbGxhdGVteW1ldGFsbGljc29uYXRhcworICAgIEFtYW5hcGxhbmFjYW5hbFBhbmFtYQorICAgIEFibGV3YXNJZXJlSXNhd0VsYmEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFRoZXF1aWNrYnJvd25mb3gKKworL14oXGQrfFwoKD8xKShbKyotXSkoPzEpXCl8LSg/MSkpJC8KKyAgICAxMgorICAgICgoKDIrMikqLTMpLTcpCisgICAgLTEyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAoKDIrMikqLTMpLTcpCisKKy9eKHgoeXwoPzEpezJ9KXopLworICAgIHh5egorICAgIHh4eXp4eXp6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eHl6egorICAgIHh4eXp4eXp4eXp6CisKKy8oKDwgKD86ICg/KFIpIFxkKysgIHwgW148Pl0qKykgfCAoPzIpKSAqID4pKS94CisgICAgPD4KKyAgICA8YWJjZD4KKyAgICA8YWJjIDwxMjM+IGhpaj4KKyAgICA8YWJjIDxkZWY+IGhpaj4KKyAgICA8YWJjPD5kZWY+CisgICAgPGFiYzw+CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICA8YWJjCisKKy9eYSsoKkZBSUwpLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYWFhCisgICAgCisvYStiP2MrKCpGQUlMKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWJjY2MKKworL2ErYj8oKlBSVU5FKWMrKCpGQUlMKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWJjY2MKKworL2ErYj8oKkNPTU1JVCljKygqRkFJTCkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFiY2NjCisgICAgCisvYStiPygqU0tJUCljKygqRkFJTCkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFiY2NjYWFhYmNjYworCisvXig/OmFhYSgqVEhFTilcd3s2fXxiYmIoKlRIRU4pXHd7NX18Y2NjKCpUSEVOKVx3ezR9fFx3ezN9KS8KKyAgICBhYWF4eHh4eHgKKyAgICBhYWErKysrKysgCisgICAgYmJieHh4eHgKKyAgICBiYmIrKysrKyAKKyAgICBjY2N4eHh4CisgICAgY2NjKysrKyAKKyAgICBkZGRkZGRkZCAgIAorCisvXihhYWEoKlRIRU4pXHd7Nn18YmJiKCpUSEVOKVx3ezV9fGNjYygqVEhFTilcd3s0fXxcd3szfSkvCisgICAgYWFheHh4eHh4CisgICAgYWFhKysrKysrIAorICAgIGJiYnh4eHh4CisgICAgYmJiKysrKysgCisgICAgY2NjeHh4eAorICAgIGNjYysrKysgCisgICAgZGRkZGRkZGQgICAKKworL2ErYj8oKlRIRU4pYysoKkZBSUwpLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYmNjYworCisvKEEgKEF8QigqQUNDRVBUKXxDKSBEKShFKS94CisgICAgQUIKKyAgICBBQlgKKyAgICBBQURFCisgICAgQUNERQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUQgCisgICAgICAgIAorL15cVyorKD86KCguKVxXKisoPzEpXFcqK1wyfCl8KCguKVxXKisoPzMpXFcqK1w0fFxXKisuXFcqKykpXFcqKyQvaQorICAgIDEyMjEKKyAgICBTYXRhbiwgb3NjaWxsYXRlIG15IG1ldGFsbGljIHNvbmF0YXMhCisgICAgQSBtYW4sIGEgcGxhbiwgYSBjYW5hbDogUGFuYW1hIQorICAgIEFibGUgd2FzIEkgZXJlIEkgc2F3IEVsYmEuCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGUgcXVpY2sgYnJvd24gZm94CisKKy9eKCguKSg/MSlcMnwuKSQvCisgICAgYQorICAgIGFiYQorICAgIGFhYmFhICAKKyAgICBhYmNkY2JhIAorICAgIHBxYWFiYWFxcCAgCisgICAgYWJsZXdhc2llcmVpc2F3ZWxiYQorXD0gRXhwZWN0IG5vIG1hdGNoICAgICAKKyAgICByaHViYXJiCisgICAgdGhlIHF1aWNrIGJyb3duIGZveCAgCisKKy8oYSkoPzw9Yig/MSkpLworICAgIGJhegorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgY2F6ICAKKyAgICAKKy8oPzw9Yig/MSkpKGEpLworICAgIHpiYWF6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWEgIAorICAgIAorLyg/PFg+YSkoPzw9Yig/JlgpKS8KKyAgICBiYXoKKworL14oP3woYWJjKXwoZGVmKSlcMS8KKyAgICBhYmNhYmMKKyAgICBkZWZkZWYgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkZWYKKyAgICBkZWZhYmMgICAKKyAgICAKKy9eKD98KGFiYyl8KGRlZikpKD8xKS8KKyAgICBhYmNhYmMKKyAgICBkZWZhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGRlZmRlZgorICAgIGFiY2RlZiAgICAKKworLyg/OmEoPzxxdW90ZT4gKD88YXBvc3Ryb3BoZT4nKXwoPzxyZWFscXVvdGU+IikpIHxiKD88cXVvdGU+ICg/PGFwb3N0cm9waGU+Jyl8KD88cmVhbHF1b3RlPiIpKSApICg/KCdxdW90ZScpW2Etel0rfFswLTldKykveCxkdXBuYW1lcworICAgIGFcImFhYWFhCisgICAgYlwiYWFhYWEgCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYlwiMTExMTEKKworLyg/Oig/MSl8QikoQSgqRil8QykvCisgICAgQUJDRAorICAgIENDRAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQ0FEICAgCisKKy9eKD86KD8xKXxCKShBKCpGKXxDKS8KKyAgICBDQ0QKKyAgICBCQ0QgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkNECisgICAgQ0FECisgICAgQkFEICAgIAorCisvKD86KD8xKXxCKShBKCpBQ0NFUFQpWFh8QylELworICAgIEFBRAorICAgIEFDRAorICAgIEJBRAorICAgIEJDRAorICAgIEJBWCAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQ1gKKyAgICBBQkMgICAKKworLyg/KERFRklORSkoQSkpQig/MSlDLworICAgIEJBQworCisvKD8oREVGSU5FKSgoQSlcMikpQig/MSlDLworICAgIEJBQUMKKworLyg/PHBuPiBcKCAoIFteKCldKysgfCAoPyZwbikgKSogXCkgKS94CisgICAgKGFiKGNkKWVmKQorCisvXig/PWEoKlNLSVApYnxhYykvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYworICAgIAorL14oPz1hKCpQUlVORSliKS8KKyAgICBhYiAgCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWMKKworL14oPz1hKCpBQ0NFUFQpYikvCisgICAgYWMKKworLyg/PmFcS2IpLworICAgIGFiCisKKy8oKD8+YVxLYikpLworICAgIGFiCisKKy8oYVxLYikvCisgICAgYWIKKyAgICAKKy9eYVxLY3p8YWMvCisgICAgYWMKKyAgICAKKy8oPz5hXEtienxhYikvCisgICAgYWIgCisKKy9eKD8mdCkoPyhERUZJTkUpKD88dD5hXEtiKSkkLworICAgIGFiCisKKy9eKFteKCldfFwoKD8xKSpcKSkqJC8KKyAgICBhKGIpYworICAgIGEoYihjKWQpZSAKKworLyg/UDxMMT4oP1A8TDI+MCkoP1A+TDEpfCg/UD5MMikpLworICAgIDAKKyAgICAwMAorICAgIDAwMDAgIAorCisvKD9QPEwxPig/UDxMMj4wKXwoP1A+TDIpKD9QPkwxKSkvCisgICAgMAorICAgIDAwCisgICAgMDAwMCAgCisKKyMgVGhpcyBvbmUgZG9lcyBmYWlsLCBhcyBleHBlY3RlZCwgaW4gUGVybC4gSXQgbmVlZHMgdGhlIGNvbXBsZXggaXRlbSBhdCB0aGUKKyMgZW5kIG9mIHRoZSBwYXR0ZXJuLiBBIHNpbmdsZSBsZXR0ZXIgaW5zdGVhZCBvZiAoQnxEKSBtYWtlcyBpdCBub3QgZmFpbCwgd2hpY2gKKyMgSSB0aGluayBpcyBhIFBlcmwgYnVnLgorCisvQSgqQ09NTUlUKShCfEQpLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUNBQlgKKworIyBDaGVjayB0aGUgdXNlIG9mIG5hbWVzIGZvciBmYWlsdXJlCisKKy9eKEEoKlBSVU5FOkEpQnxDKCpQUlVORTpCKUQpL21hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFDCisgICAgQ0IgICAgCisgICAgCisvKCpNQVJLOkEpKCpTS0lQOkIpKEN8WCkvbWFyaworICAgIEMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEQKKyAgICAgCisvXihBKCpUSEVOOkEpQnxDKCpUSEVOOkIpRCkvbWFyaworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQ0IgICAgCisKKy9eKD86QSgqVEhFTjpBKUJ8QygqVEhFTjpCKUQpL21hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIENCICAgIAorICAgIAorL14oPz5BKCpUSEVOOkEpQnxDKCpUSEVOOkIpRCkvbWFyaworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQ0IgICAgCisgICAgCisjIFRoaXMgc2hvdWxkIHN1Y2NlZWQsIGFzIHRoZSBza2lwIGNhdXNlcyBidW1wIHRvIG9mZnNldCAxICh0aGUgbWFyaykuIE5vdGUKKyMgdGhhdCB3ZSBoYXZlIHRvIGhhdmUgc29tZXRoaW5nIGNvbXBsaWNhdGVkIHN1Y2ggYXMgKEJ8WikgYXQgdGhlIGVuZCBiZWNhdXNlLAorIyBmb3IgUGVybCwgYSBzaW1wbGUgY2hhcmFjdGVyIHNvbWVob3cgY2F1c2VzIGFuIHVud2FudGVkIG9wdGltaXphdGlvbiB0byBtZXNzCisjIHdpdGggdGhlIGhhbmRsaW5nIG9mIGJhY2t0cmFja2luZyB2ZXJicy4KKworL0EoKk1BUks6QSlBKygqU0tJUDpBKShCfFopIHwgQUMveCxtYXJrCisgICAgQUFBQworICAgIAorIyBUZXN0IHNraXBwaW5nIG92ZXIgYSBub24tbWF0Y2hpbmcgbWFyay4KKworL0EoKk1BUks6QSlBKygqTUFSSzpCKSgqU0tJUDpBKShCfFopIHwgQUMveCxtYXJrCisgICAgQUFBQworICAgIAorIyBDaGVjayBzaG9ydGhhbmQgZm9yIE1BUksuCisKKy9BKCo6QSlBKygqU0tJUDpBKShCfFopIHwgQUMveCxtYXJrCisgICAgQUFBQworCisvKCo6QSlBKygqU0tJUDpBKShCfFopL21hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFBQUMKKworIyBUaGlzIHNob3VsZCBzdWNjZWVkLCBhcyBhIG5vbi1leGlzdGVudCBza2lwIG5hbWUgZGlzYWJsZXMgdGhlIHNraXAuCisKKy9BKCpNQVJLOkEpQSsoKlNLSVA6QikoQnxaKSB8IEFDL3gsbWFyaworICAgIEFBQUMKKworL0EoKk1BUks6QSlBKygqU0tJUDpCKShCfFopIHwgQUMoKjpCKS94LG1hcmsKKyAgICBBQUFDCisKKyMgQ09NTUlUIGF0IHRoZSBzdGFydCBvZiBhIHBhdHRlcm4gc2hvdWxkIGFjdCBsaWtlIGFuIGFuY2hvci4gQWdhaW4sIGhvd2V2ZXIsCisjIHdlIG5lZWQgdGhlIGNvbXBsaWNhdGlvbiBmb3IgUGVybC4KKworLygqQ09NTUlUKShBfFApKEJ8UCkoQ3xQKS8KKyAgICBBQkNERUZHCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBERUZHQUJDICAKKworIyBDT01NSVQgaW5zaWRlIGFuIGF0b21pYyBncm91cCBjYW4ndCBzdG9wIGJhY2t0cmFja2luZyBvdmVyIHRoZSBncm91cC4KKworLyhcdyspKD8+YigqQ09NTUlUKSlcd3syfS8KKyAgICBhYmJiCisKKy8oXHcrKWIoKkNPTU1JVClcd3syfS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYmIKKworIyBDaGVjayBvcGVuaW5nIHBhcmVucyBpbiBjb21tZW50IHdoZW4gc2Vla2luZyBmb3J3YXJkIHJlZmVyZW5jZS4KKworLyg/JnQpKD8jKCkoPyhERUZJTkUpKD88dD5hKSkvCisgICAgYmFjCisKKyMgQ09NTUlUIHNob3VsZCBvdmVycmlkZSBUSEVOLgorCisvKD8+KCpDT01NSVQpKD8+eWVzfG5vKSgqVEhFTikoKkYpKT8vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgeWVzCisKKy8oPz4oKkNPTU1JVCkoeWVzfG5vKSgqVEhFTikoKkYpKT8vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgeWVzCisKKy9iPygqU0tJUCljLworICAgIGJjCisgICAgYWJjCisgICAKKy8oKlNLSVApYmMvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCisKKy8oKlNLSVApYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEgCisKKy8oP1A8YWJuPig/UD1hYm4peHh4fCkrLworICAgIHh4eAorCisvKD9pOihbXmJdKSkoPzEpLworICAgIGFhCisgICAgYUEgICAgIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIKKyAgICBhQgorICAgIEJhCisgICAgYmEKKworL14oPyZ0KSorKD8oREVGSU5FKSg/PHQ+YSkpXHckLworICAgIGFhYWFhYVgKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYWFhYWEgCisKKy9eKD8mdCkqKD8oREVGSU5FKSg/PHQ+YSkpXHckLworICAgIGFhYWFhYVgKKyAgICBhYWFhYWEgCisKKy9eKGEpKisoXHcpLworICAgIGFhYWFYCisgICAgWVogCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWFhYQorCisvXig/OmEpKisoXHcpLworICAgIGFhYWFYCisgICAgWVogCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWFhYQorCisvXihhKSsrKFx3KS8KKyAgICBhYWFhWAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFhYWEKKyAgICBZWiAKKworL14oPzphKSsrKFx3KS8KKyAgICBhYWFhWAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFhYWEKKyAgICBZWiAKKworL14oYSk/KyhcdykvCisgICAgYWFhYVgKKyAgICBZWiAKKworL14oPzphKT8rKFx3KS8KKyAgICBhYWFhWAorICAgIFlaIAorCisvXihhKXsyLH0rKFx3KS8KKyAgICBhYWFhWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhCisgICAgWVogCisKKy9eKD86YSl7Mix9KyhcdykvCisgICAgYWFhYVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYQorICAgIFlaIAorCisvKGF8KSooPzEpYi8KKyAgICBiCisgICAgYWIKKyAgICBhYWIgIAorCisvKGEpKysoPzEpYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiIAorICAgIGFhYgorCisvKGEpKisoPzEpYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiCisgICAgYWFiICAKKworLyg/MSkoPzooYikpezB9LworICAgIGIKKworLyhmb28gKCBcKCAoKD86KD8+IFteKCldKyApfCg/MikpKikgXCkgKSApL3gKKyAgICBmb28oYmFyKGJheikrYmF6KGJvcCkpCisKKy8oQSAoQXxCKCpBQ0NFUFQpfEMpIEQpKEUpL3gKKyAgICBBQgorCisvXEEuKj8oYXxiYykvCisgICAgYmEKKworL1xBLio/KD86YXxiYykrKy8KKyAgICBiYQorCisvXEEuKj8oYXxiYykrKy8KKyAgICBiYQorCisvXEEuKj8oPzphfGJjfGQpLworICAgIGJhCisKKy8oPzooYikpKysvCisgICAgYmVldGxlCisKKy8oPyg/PShhKCpBQ0NFUFQpeikpYSkvCisgICAgYQorCisvXihhKSg/MSkrYWIvCisgICAgYWFhYWIKKyAgICAKKy9eKGEpKD8xKSsrYWIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhYgorCisvXig/PWEoKjpNKSlhWi9tYXJrCisgICAgYVpiYworCisvXig/ISgqOk0pYilhWi9tYXJrCisgICAgYVpiYworCisvKD8oREVGSU5FKShhKSk/Yig/MSkvCisgICAgYmFja2dhbW1vbgorCisvXlxOKy8KKyAgICBhYmNcbmRlZgorICAgIAorL15cTnsxLH0vCisgICAgYWJjXG5kZWYgCisKKy8oPyhSKWErfCg/UiliKS8KKyAgICBhYWFhYmNkZQorCisvKD8oUilhK3woKD9SKSliKS8KKyAgICBhYWFhYmNkZQorCisvKCg/KFIpYSt8KD8xKWIpKS8KKyAgICBhYWFhYmNkZQorCisvKCg/KFIxKWErfCg/MSliKSkvCisgICAgYWFhYWJjZGUKKyAgICAKKy8oKD8oUilhfCg/MSkpKSovCisgICAgYWFhCisKKy8oKD8oUilhfCg/MSkpKSsvCisgICAgYWFhIAorCisvYSgqOmFueSAKK25hbWUpL21hcmsKKyAgICBhYmMKKyAgICAKKy8oPz4oPyZ0KWN8KD8mdCkpKD8oREVGSU5FKSg/PHQ+YXxiKCpQUlVORSljKSkvCisgICAgYQorICAgIGJhCisgICAgYmJhIAorICAgIAorIyBDaGVja2luZyByZXZpc2VkICgqVEhFTikgaGFuZGxpbmcuCisKKyMgQ2FwdHVyZQorCisvXi4qPyAoYSgqVEhFTiliKSBjL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKKworL14uKj8gKGEoKlRIRU4pYnwoKkYpKSBjL3gKKyAgICBhYWJjCisKKy9eLio/ICggKGEoKlRIRU4pYikgfCAoKkYpICkgYy94CisgICAgYWFiYworCisvXi4qPyAoIChhKCpUSEVOKWIpICkgYy94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWJjCisKKyMgTm9uLWNhcHR1cmUKKworL14uKj8gKD86YSgqVEhFTiliKSBjL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKKworL14uKj8gKD86YSgqVEhFTilifCgqRikpIGMveAorICAgIGFhYmMKKworL14uKj8gKD86ICg/OmEoKlRIRU4pYikgfCAoKkYpICkgYy94CisgICAgYWFiYworCisvXi4qPyAoPzogKD86YSgqVEhFTiliKSApIGMveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFiYworCisjIEF0b21pYworCisvXi4qPyAoPz5hKCpUSEVOKWIpIGMveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFiYworCisvXi4qPyAoPz5hKCpUSEVOKWJ8KCpGKSkgYy94CisgICAgYWFiYworCisvXi4qPyAoPz4gKD8+YSgqVEhFTiliKSB8ICgqRikgKSBjL3gKKyAgICBhYWJjCisKKy9eLio/ICg/PiAoPz5hKCpUSEVOKWIpICkgYy94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWJjCisKKyMgUG9zc2Vzc2l2ZSBjYXB0dXJlCisKKy9eLio/IChhKCpUSEVOKWIpKysgYy94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWJjCisKKy9eLio/IChhKCpUSEVOKWJ8KCpGKSkrKyBjL3gKKyAgICBhYWJjCisKKy9eLio/ICggKGEoKlRIRU4pYikrKyB8ICgqRikgKSsrIGMveAorICAgIGFhYmMKKworL14uKj8gKCAoYSgqVEhFTiliKSsrICkrKyBjL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKKworIyBQb3NzZXNzaXZlIG5vbi1jYXB0dXJlCisKKy9eLio/ICg/OmEoKlRIRU4pYikrKyBjL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKKworL14uKj8gKD86YSgqVEhFTilifCgqRikpKysgYy94CisgICAgYWFiYworCisvXi4qPyAoPzogKD86YSgqVEhFTiliKSsrIHwgKCpGKSApKysgYy94CisgICAgYWFiYworCisvXi4qPyAoPzogKD86YSgqVEhFTiliKSsrICkrKyBjL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKKyAgICAKKyMgQ29uZGl0aW9uIGFzc2VydGlvbgorCisvXig/KD89YSgqVEhFTiliKWFifGFjKS8KKyAgICBhYworIAorIyBDb25kaXRpb24KKworL14uKj8oPyg/PWEpYXxiKCpUSEVOKWMpLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmEKKworL14uKj8oPzooPyg/PWEpYXxiKCpUSEVOKWMpfGQpLworICAgIGJhCisKKy9eLio/KD8oPz1hKWEoKlRIRU4pYnxjKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFjCisKKyMgQXNzZXJ0aW9uCisKKy9eLiooPz1hKCpUSEVOKWIpLworICAgIGFhYmMKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD8+YSgqOm0pKS9pbXN4LG1hcmsKKyAgICBhCisKKy8oPz4oYSkoKjptKSkvaW1zeCxtYXJrCisgICAgYQorCisvKD88PWEoKkFDQ0VQVCliKWMvCisgICAgeGFjZAorCisvKD88PShhKCpBQ0NFUFQpYikpYy8KKyAgICB4YWNkCisKKy8oPzw9KGEoKkNPTU1JVCliKSljLworICAgIHhhYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgeGFjZAorICAgIAorLyg/PCFhKCpGQUlMKWIpYy8KKyAgICB4Y2QKKyAgICBhY2QgCisKKy8oPzw9YSgqOk4pYiljL21hcmsKKyAgICB4YWJjZAorICAgIAorLyg/PD1hKCpQUlVORSliKWMvCisgICAgeGFiY2QgCisKKy8oPzw9YSgqU0tJUCliKWMvCisgICAgeGFiY2QgCisKKy8oPzw9YSgqVEhFTiliKWMvCisgICAgeGFiY2QgCisKKy8oYSkoPzIpezJ9KC4pLworICAgIGFiY2QKKworLygqTUFSSzpBKSgqUFJVTkU6QikoQ3xYKS9tYXJrCisgICAgQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgRCAKKworLygqTUFSSzpBKSgqUFJVTkU6QikoQ3xYKS9tYXJrCisgICAgQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgRCAKKworLygqTUFSSzpBKSgqVEhFTjpCKShDfFgpL21hcmsKKyAgICBDCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBEIAorCisvKCpNQVJLOkEpKCpUSEVOOkIpKEN8WCkvbWFyayxub19zdGFydF9vcHRpbWl6ZQorICAgIEMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEQgCisKKy8oKk1BUks6QSkoKlRIRU46QikoQ3xYKS9tYXJrCisgICAgQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgRCAKKworIyBUaGlzIHNob3VsZCBmYWlsLCBhcyB0aGUgc2tpcCBjYXVzZXMgYSBidW1wIHRvIG9mZnNldCAzICh0aGUgc2tpcCkuCisKKy9BKCpNQVJLOkEpQSsoKlNLSVApKEJ8WikgfCBBQy94LG1hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFBQUMKKworIyBTYW1lIAorCisvQSgqTUFSSzpBKUErKCpNQVJLOkIpKCpTS0lQOkIpKEJ8WikgfCBBQy94LG1hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFBQUMKKworL0EoKjpBKUErKCpTS0lQKShCfFopIHwgQUMveCxtYXJrCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQUFDCisKKyMgVGhpcyBzaG91bGQgZmFpbCwgYXMgYSBudWxsIG5hbWUgaXMgdGhlIHNhbWUgYXMgbm8gbmFtZS4KKworL0EoKk1BUks6QSlBKygqU0tJUDopKEJ8WikgfCBBQy94LG1hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFBQUMKKworIyBBIGNoZWNrIG9uIHdoYXQgaGFwcGVucyBhZnRlciBoaXR0aW5nIGEgbWFyayBhbmQgdGhlbSBidW1waW5nIGFsb25nIHRvCisjIHNvbWV0aGluZyB0aGF0IGRvZXMgbm90IGV2ZW4gc3RhcnQuIFBlcmwgcmVwb3J0cyB0YWdzIGFmdGVyIHRoZSBmYWlsdXJlcworIyBoZXJlLCB0aG91Z2ggaXQgZG9lcyBub3Qgd2hlbiB0aGUgaW5kaXZpZHVhbCBsZXR0ZXJzIGFyZSBtYWRlIGludG8gc29tZXRoaW5nCisjIG1vcmUgY29tcGxpY2F0ZWQuCisKKy9BKCo6QSlCfFhYKCo6QilZL21hcmsKKyAgICBBQUJDCisgICAgWFhZWiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhBUVEgIAorICAgIFhBUVFYWlogIAorICAgIEFYUVFRIAorICAgIEFYWFFRUSAKKyAgICAKKy9eKEEoKlRIRU46QSlCfEMoKlRIRU46QilEKS9tYXJrCisgICAgQUIKKyAgICBDRAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUMKKyAgICBDQiAgICAKKyAgICAKKy9eKEEoKlBSVU5FOkEpQnxDKCpQUlVORTpCKUQpL21hcmsKKyAgICBBQgorICAgIENECitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQworICAgIENCICAgIAorICAgIAorIyBBbiBlbXB0eSBuYW1lIGRvZXMgbm90IHBhc3MgYmFjayBhbiBlbXB0eSBzdHJpbmcuIEl0IGlzIHRoZSBzYW1lIGFzIGlmIG5vCisjIG5hbWUgd2VyZSBnaXZlbi4KKworL14oQSgqUFJVTkU6KUJ8QygqUFJVTkU6QilEKS9tYXJrCisgICAgQUIKKyAgICBDRCAKKworIyBQUlVORSBnb2VzIHRvIG5leHQgYnVtcGFsb25nOyBDT01NSVQgZG9lcyBub3QuCisgICAgCisvQSgqUFJVTkU6QSlCL21hcmsKKyAgICBBQ0FCCisKKyMgTWFyayBuYW1lcyBjYW4gYmUgZHVwbGljYXRlZC4KKworL0EoKjpBKUJ8WCgqOkEpWS9tYXJrCisgICAgQUFCQworICAgIFhYWVogCisgICAgCisvYigqOm0pZnxhKCo6bil3L21hcmsKKyAgICBhdyAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYmMKKworL2IoKjptKWZ8YXcvbWFyaworICAgIGFiYXcKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYmMKKyAgICBhYmF4IAorCisvQSgqTUFSSzpBKUErKCpTS0lQOkIpKEJ8WikgfCBBQUMveCxtYXJrCisgICAgQUFBQworCisvYSgqUFJVTkU6WCliY3xxcS9tYXJrLG5vX3N0YXJ0X29wdGltaXplCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBheHkKKworL2EoKlRIRU46WCliY3xxcS9tYXJrLG5vX3N0YXJ0X29wdGltaXplCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBheHkKKworLyg/PWEoKk1BUks6QSliKS4ueC9tYXJrCisgICAgYWJ4eQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJwcSAgCisKKy8oPz1hKCpNQVJLOkEpYikuLigqOlkpeC9tYXJrCisgICAgYWJ4eQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJwcSAgCisKKy8oPz1hKCpQUlVORTpBKWIpLi54L21hcmsKKyAgICBhYnh5CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYnBxICAKKworLyg/PWEoKlBSVU5FOkEpYikuLigqOlkpeC9tYXJrCisgICAgYWJ4eQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJwcSAgCisKKy8oPz1hKCpUSEVOOkEpYikuLngvbWFyaworICAgIGFieHkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFicHEgIAorCisvKD89YSgqVEhFTjpBKWIpLi4oKjpZKXgvbWFyaworICAgIGFieHkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFicHEgIAorCisvKGFub3RoZXIpPyhcMT8pdGVzdC8KKyAgICBoZWxsbyB3b3JsZCB0ZXN0CisKKy8oYW5vdGhlcik/KFwxKyl0ZXN0LworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgaGVsbG8gd29ybGQgdGVzdAorCisvKGEoKkNPTU1JVCliKXswfWEoPzEpfGFhYy8KKyAgICBhYWMKKworLygoPzphPykqKSpjLworICAgIGFhYyAgIAorCisvKCg/PmE/KSopKmMvCisgICAgYWFjICAgCisKKy8oPz4uKj9hKSg/PD1iYSkvCisgICAgYWJhCisKKy8oPzouKj9hKSg/PD1iYSkvCisgICAgYWJhCisKKy8oPz4uKj9hKWIvcworICAgIGFhYgorCisvKD8+Lio/YSliLworICAgIGFhYgorCisvKD8+XmEpYi9zCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWIKKworLyg/Pi4qPykoPzw9KGFiY2QpfCh3eHl6KSkvCisgICAgYWxwaGFiZXRhYmNkCisgICAgZW5kaW5nd3h5eiAKKworLyg/Pi4qKSg/PD0oYWJjZCl8KHd4eXopKS8KKyAgICBhbHBoYWJldGFiY2QKKyAgICBlbmRpbmd3eHl6IAorCisiKD8+LiopZm9vIgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGZvb3h5egorICAgIAorIig/Pi4qPylmb28iCisgICAgYWJjZGZvb3h5egorCisvKD86KGEoKlBSVU5FKWIpKXswfSg/Oig/MSl8YWMpLworICAgIGFjCisgICAgCisvKD86KGEoKlNLSVApYikpezB9KD86KD8xKXxhYykvCisgICAgYWMgCisKKy8oPzw9KCpTS0lQKWFjKWEvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYQorCisvQSgqTUFSSzpBKUErKCpTS0lQOkIpKEJ8WikgfCBBQy94LG1hcmsKKyAgICBBQUFDCisKKy9hKCpTS0lQOm0peHxhYygqOm4pKCpTS0lQOm4pZHxhYy9tYXJrCisgICAgYWNhY2QKKworL0EoKlNLSVA6bSl4fEEoKlNLSVA6bil4fEFCL21hcmsKKyAgICBBQgorCisvKCgqU0tJUDpyKWQpezB9YSgqU0tJUDptKXh8YWMoKjpuKXxhYy9tYXJrCisgICAgYWNhY2QKKworIyBUZXN0cyB0aGF0IHRyeSB0byBmaWd1cmUgb3V0IGhvdyBQZXJsIHdvcmtzLiBNeSBoeXBvdGhlc2lzIGlzIHRoYXQgdGhlIGZpcnN0CisjIHZlcmIgdGhhdCBpcyBiYWNrdHJhY2tlZCBvbnRvIGlzIHRoZSBvbmUgdGhhdCBhY3RzLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBjYXNlCisjIGFsbW9zdCBhbGwgdGhlIHRpbWUsIGJ1dCB0aGVyZSBpcyBvbmUgZXhjZXB0aW9uIHRoYXQgaXMgcGVyaGFwcyBhIGJ1Zy4KKworIyBUaGlzIG1hdGNoZXMgImFhYWFjIjsgZWFjaCBQUlVORSBhZHZhbmNlcyBvbmUgY2hhcmFjdGVyIHVudGlsIHRoZSBzdWJqZWN0IG5vCisjIGxvbmdlciBzdGFydHMgd2l0aCA1ICdhJ3MuCisKKy9hYWFhYSgqUFJVTkUpYnxhK2MvCisgICAgYWFhYWFhYworCisjIFB1dHRpbmcgU0tJUCBpbiBmcm9udCBvZiBQUlVORSBtYWtlcyBubyBkaWZmZXJlbmNlLCBhcyBpdCBpcyBuZXZlcgorIyBiYWNrdHJhY2tlZCBvbnRvLCB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYSBsYWJlbC4KKworL2FhYWFhKCpTS0lQKSgqUFJVTkUpYnxhK2MvCisgICAgYWFhYWFhYworCisvYWFhYWEoKlNLSVA6TikoKlBSVU5FKWJ8YStjLworICAgIGFhYWFhYWMKKworL2FhYWEoKjpOKWEoKlNLSVA6TikoKlBSVU5FKWJ8YStjLworICAgIGFhYWFhYWMKKworIyBQdXR0aW5nIFRIRU4gaW4gZnJvbnQgbWFrZXMgbm8gZGlmZmVyZW5jZS4KKyAgICAKKy9hYWFhYSgqVEhFTikoKlBSVU5FKWJ8YStjLworICAgIGFhYWFhYWMKKyAKKyMgSG93ZXZlciwgcHV0dGluZyBDT01NSVQgaW4gZnJvbnQgb2YgdGhlIHBydW5lIGNoYW5nZXMgaXQgdG8gIm5vIG1hdGNoIi4gSSAKKyMgdGhpbmsgdGhpcyBpcyBpbmNvbnNpc3RlbnQgYW5kIHBvc3NpYmx5IGEgYnVnLiBGb3IgdGhlIG1vbWVudCwgcnVubmluZyB0aGlzCisjIHRlc3QgaXMgbW92ZWQgb3V0IG9mIHRoZSBQZXJsLWNvbXBhdGlibGUgZmlsZS4gCisKKy9hYWFhYSgqQ09NTUlUKSgqUFJVTkUpYnxhK2MvCisgICAgCisjIE9LLCBsZXRzIHBsYXkgdGhlIHNhbWUgZ2FtZSBhZ2FpbiB1c2luZyBTS0lQIGluc3RlYWQgb2YgUFJVTkUuCisKKyMgVGhpcyBtYXRjaGVzICJhYyIgYmVjYXVzZSBTS0lQIGZvcmNlcyB0aGUgbmV4dCBtYXRjaCB0byBzdGFydCBvbiB0aGUKKyMgc2l4dGggImEiLiAKKworL2FhYWFhKCpTS0lQKWJ8YStjLworICAgIGFhYWFhYWMKKyAKKyMgUHV0dGluZyBQUlVORSBpbiBmcm9udCBtYWtlcyBubyBkaWZmZXJlbmNlLiAKKworL2FhYWFhKCpQUlVORSkoKlNLSVApYnxhK2MvCisgICAgYWFhYWFhYworCisjIFB1dHRpbmcgVEhFTiBpbiBmcm9udCBtYWtlcyBubyBkaWZmZXJlbmNlLiAKKworL2FhYWFhKCpUSEVOKSgqU0tJUClifGErYy8KKyAgICBhYWFhYWFjCisKKyMgSW4gdGhpcyBjYXNlLCBuZWl0aGVyIGRvZXMgQ09NTUlULiBUaGlzIHN0aWxsIG1hdGNoZXMgImFjIi4gCisKKy9hYWFhYSgqQ09NTUlUKSgqU0tJUClifGErYy8KKyAgICBhYWFhYWFjCisgICAgCisjIFRoaXMgZ2l2ZXMgIm5vIG1hdGNoIiwgYXMgZXhwZWN0ZWQuIAorCisvYWFhYWEoKkNPTU1JVClifGErYy8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWFhYWMKKworIyAtLS0tIFRlc3RzIHVzaW5nIFRIRU4gLS0tLQorCisjIFRoaXMgbWF0Y2hlcyAiYWFhYWFhYyIsIGFzIGV4cGVjdGVkLiAKKworL2FhYWFhKCpUSEVOKWJ8YStjLworICAgIGFhYWFhYWMKKworIyBQdXR0aW5nIFNLSVAgaW4gZnJvbnQgbWFrZXMgbm8gZGlmZmVyZW5jZS4gCisKKy9hYWFhYSgqU0tJUCkoKlRIRU4pYnxhK2MvCisgICAgYWFhYWFhYworICAgIAorIyBQdXR0aW5nIFBSVU5FIGluIGZyb250IG1ha2VzIG5vIGRpZmZlcmVuY2UuIAorCisvYWFhYWEoKlBSVU5FKSgqVEhFTilifGErYy8KKyAgICBhYWFhYWFjCisgICAgCisjIFB1dHRpbmcgQ09NTUlUIGluIGZyb250IG1ha2VzIG5vIGRpZmZlcmVuY2UuIAorCisvYWFhYWEoKkNPTU1JVCkoKlRIRU4pYnxhK2MvCisgICAgYWFhYWFhYworICAgIAorIyBFbmQgb2YgInByaW9yaXR5IiB0ZXN0cyAgCisKKy9hYWFhYSgqOm0pKCpQUlVORTptKSgqU0tJUDptKW18YSsvCisgICAgYWFhYWFhCisKKy9hYWFhYSgqOm0pKCpNQVJLOm0pKCpQUlVORSkoKlNLSVA6bSltfGErLworICAgIGFhYWFhYQorCisvYWFhYWEoKjpuKSgqUFJVTkU6bSkoKlNLSVA6bSltfGErLworICAgIGFhYWFhYQorCisvYWFhYWEoKjpuKSgqTUFSSzptKSgqUFJVTkUpKCpTS0lQOm0pbXxhKy8KKyAgICBhYWFhYWEKKworL2EoKk1BUks6QSlhYSgqUFJVTkU6QSlhKCpTS0lQOkEpYnxhK2MvCisgICAgYWFhYWMKKworL2EoKk1BUks6QSlhYSgqTUFSSzpBKWEoKlNLSVA6QSlifGErYy8KKyAgICBhYWFhYworCisvYWFhKCpQUlVORTpBKWEoKlNLSVA6QSlifGErYy8KKyAgICBhYWFhYworCisvYWFhKCpNQVJLOkEpYSgqU0tJUDpBKWJ8YStjLworICAgIGFhYWFjCisKKy9hKCo6bSlhKCpDT01NSVQpKCpTS0lQOm0pYnxhK2MvbWFyaworICAgIGFhYWFhYWMKKworLy4/KGF8YigqVEhFTiljKS8KKyAgICBiYQorCisvKGEoKkNPTU1JVCliKWN8YWJkLworICAgIGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJkCisKKy8oPz1hKCpDT01NSVQpYilhYmN8YWJkLworICAgIGFiYworICAgIGFiZAorCisvKD8+YSgqQ09NTUlUKWIpY3xhYmQvCisgICAgYWJjCisgICAgYWJkCisKKy9hKD89YigqQ09NTUlUKWMpW15kXXxhYmQvCisgICAgYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmQKKworL2EoPz1iYykufGFiZC8KKyAgICBhYmQKKyAgICBhYmMgCisgICAgCisvYSg/PmIoKkNPTU1JVCljKWR8YWJkLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZWFiZCAKKworL2EoPz5iYylkfGFiZC8KKyAgICBhYmNlYWJkIAorCisvKD8+YSgqQ09NTUlUKWIpY3xhYmQvCisgICAgYWJkCisKKy8oPz5hKCpDT01NSVQpYylkfGFiZC8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiZAorCisvKCg/PWEoKkNPTU1JVCliKWFifGFjKXswfSg/Oig/MSl8YShjKSkvCisgICAgYWMgCisgICAgCisjIFRoZXNlIHRlc3RzIHdlcmUgZm9ybWVybHkgaW4gdGVzdCAyLCBidXQgY2hhbmdlcyBpbiBQQ1JFIGFuZCBQZXJsIGhhdmUKKyMgbWFkZSB0aGVtIGNvbXBhdGlibGUuIAorICAgIAorL14oYSk/KD8oMSlhfGIpKyQvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCisKKy8oPz1hXEtiKWFiLworICAgIGFiIAorCisvKD8hYVxLYilhYy8KKyAgICBhYyAKKyAgICAKKy9eYWJjKD88PWJcS2MpZC8KKyAgICBhYmNkCisKKy9eYWJjKD88IWJcS3EpZC8KKyAgICBhYmNkCisKKy9BKCpQUlVORTpBKUErKCpTS0lQOkEpKEJ8WikgfCBBQy94LG1hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFBQUMKKworL14oKGFiY3xhYmN4KSgqVEhFTil5fGFiY2QpLworICAgIGFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYmN4eSAKKyAgICAKKy9eKCh5ZXN8bm8pKCpUSEVOKSgqRikpPy8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHllcworCisvKEEgKC4qKSAgIEM/ICgqVEhFTikgIHwgQSBEKSAoKkZBSUwpL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiY2RDQmVmZ0JoaUJxegorCisvKEEgKC4qKSAgIEM/ICgqVEhFTikgIHwgQSBEKSB6L3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiY2RDQmVmZ0JoaUJxegorCisvKEEgKC4qKSAgIEM/ICgqVEhFTikgIHwgQSBEKSBccyogKCpGQUlMKS94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYmNkQ0JlZmdCaGlCcXoKKworLyhBICguKikgICBDPyAoKlRIRU4pICB8IEEgRCkgXHMqIHoveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWJjZENCZWZnQmhpQnF6CisKKy8oQSAoLiopICAgKD86Q3wpICgqVEhFTikgIHwgQSBEKSAoKkZBSUwpL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiY2RDQmVmZ0JoaUJxegorCisvKEEgKC4qKSAgICg/OkN8KSAoKlRIRU4pICB8IEEgRCkgei94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYmNkQ0JlZmdCaGlCcXoKKworLyhBICguKikgICBDezAsNn0gKCpUSEVOKSAgfCBBIEQpICgqRkFJTCkveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWJjZENCZWZnQmhpQnF6CisKKy8oQSAoLiopICAgQ3swLDZ9ICgqVEhFTikgIHwgQSBEKSB6L3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiY2RDQmVmZ0JoaUJxegorCisvKEEgKC4qKSAgIChDRSl7MCw2fSAoKlRIRU4pICB8IEEgRCkgKCpGQUlMKS94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYmNkQ0VCZWZnQmhpQnF6CisKKy8oQSAoLiopICAgKENFKXswLDZ9ICgqVEhFTikgIHwgQSBEKSB6L3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiY2RDRUJlZmdCaGlCcXoKKworLyhBICguKikgICAoQ0UqKXswLDZ9ICgqVEhFTikgIHwgQSBEKSAoKkZBSUwpL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiY2RDQmVmZ0JoaUJxegorCisvKEEgKC4qKSAgIChDRSopezAsNn0gKCpUSEVOKSAgfCBBIEQpIHoveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWJjZENCZWZnQmhpQnF6CisKKy8oPz1hKCpDT01NSVQpYnxhYylhY3xhYy8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFjCisKKy8oPz1hKCpDT01NSVQpYnwoYWMpKSBhYyB8IChhKWMveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWMKKworIyAtLS0tCisKKy8oPyg/IWIoKlRIRU4pYSlibnxibm4pLworICAgIGJubiAKKworLyg/IWIoKlNLSVApYSlibnxibm4vCisgICAgYm5uCisgICAgCisvKD8oPyFiKCpTS0lQKWEpYm58Ym5uKS8KKyAgICBibm4gCisKKy8oPyFiKCpQUlVORSlhKWJufGJubi8KKyAgICBibm4KKyAgICAKKy8oPyg/IWIoKlBSVU5FKWEpYm58Ym5uKS8KKyAgICBibm4gCisgICAKKy8oPyFiKCpDT01NSVQpYSlibnxibm4vCisgICAgYm5uCisgICAgCisvKD8oPyFiKCpDT01NSVQpYSlibnxibm4pLworICAgYm5uIAorCisvKD89YigqU0tJUClhKWJufGJubi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJubgorCisvKD89YigqVEhFTilhKWJufGJubi8KKyAgICBibm4KKyAgICAKKy9eKD8hYSgqU0tJUCliKS8KKyAgICBhYworCisvXig/IWEoKlNLSVApYikuLi8KKyAgICBhY2QKKworLyg/IWEoKlNLSVApYikuLi8KKyAgICBhY2QKKworL14oPyg/IWEoKlNLSVApYikpLworICAgIGFjCisKKy9eKD8hYSgqUFJVTkUpYikuLi8KKyAgICBhY2QKKworLyg/IWEoKlBSVU5FKWIpLi4vCisgICAgYWNkCisKKy8oPyFhKCpDT01NSVQpYilhY3xjZC8KKyAgICBhYworCisvXEEuKj8oPzphfGJjKS8KKyAgICBiYQorCisvXihBKCpUSEVOKUJ8QygqVEhFTilEKS8KKyAgICBDRCAgICAgICAgICAgCisKKy8oKjptKG0pKD8meSkoPyhERUZJTkUpKD88eT5iKSkvbWFyaworICAgIGFiYworCisvKCpQUlVORTptKG0pKD8meSkoPyhERUZJTkUpKD88eT5iKSkvbWFyaworICAgIGFiYworCisvKCpTS0lQOm0obSkoPyZ5KSg/KERFRklORSkoPzx5PmIpKS9tYXJrCisgICAgYWJjCisKKy8oKlRIRU46bShtKSg/JnkpKD8oREVGSU5FKSg/PHk+YikpL21hcmsKKyAgICBhYmMKKworL15cZCpcd3s0fS8KKyAgICAxMjM0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjMgCisKKy9eW15iXSpcd3s0fS8KKyAgICBhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWEgICAgIAorCisvXlteYl0qXHd7NH0vaQorICAgIGFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYSAgICAgCisKKy9eYSpcd3s0fS8KKyAgICBhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWEgICAgIAorCisvXmEqXHd7NH0vaQorICAgIGFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYSAgICAgCisKKy8oPzooPzxuPmZvbyl8KD88bj5iYXIpKVxrPG4+L2R1cG5hbWVzCisgICAgZm9vZm9vCisgICAgYmFyYmFyCisKKy8oPzxuPkEpKD86KD88bj5mb28pfCg/PG4+YmFyKSlcazxuPi9kdXBuYW1lcworICAgIEFmb29BCisgICAgQWJhckEgIAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIEFmb29mb28KKyAgICBBYmFyYmFyCisKKy9eKFxkKylccytJTlxzK1NPQVxzKyhcUyspXHMrKFxTKylccypcKFxzKiQvCisgICAgMSBJTiBTT0Egbm9uLXNwMSBub24tc3AyKAorCisvXiAoPzooPzxBPkEpfCg/J0InQikoPzxBPkEpKSAoPygnQScpeCkgKD8oPEI+KXkpJC94LGR1cG5hbWVzCisgICAgQXgKKyAgICBCQXh5IAorICAgIAorL15BXHhaLworICAgIEFcMFogCisKKy9eQVxvezEyM31CLworICAgIEFcMTIzQgorCisvIF4gYSArICsgYiAkIC94CisgICAgYWFhYWIKKyAgICAKKy8gXiBhICsgI2NvbW1lbnQKKyAgKyBiICQgL3gKKyAgICBhYWFhYgorICAgIAorLyBeIGEgKyAjY29tbWVudAorICAjY29tbWVudAorICArIGIgJCAveAorICAgIGFhYWFiCisgICAgCisvIF4gKD8+IGEgKyApIGIgJCAveAorICAgIGFhYWFiIAorCisvIF4gKCBhICsgKSArICsgXHcgJCAveAorICAgIGFhYWFiIAorCisvKD86YVxLYikqKy9hZnRlcnRleHQKKyAgICBhYmFiYworCisvKD8+YVxLYikqL2FmdGVydGV4dAorICAgIGFiYWJjCisKKy8oPzphXEtiKSovYWZ0ZXJ0ZXh0CisgICAgYWJhYmMKKworLyhhXEtiKSorL2FmdGVydGV4dAorICAgIGFiYWJjCisKKy8oYVxLYikqL2FmdGVydGV4dAorICAgIGFiYWJjCisKKy8oPzp4fCg/Oih4eHx5eSkrfHh8eHx4fHh8eCl8YXxhfGEpYmMvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhY2IKKworJ1xBKD86W15cIl0rK3xcIig/OlteXCJdKit8XCJcIikqK1wiKSsrJworICAgIE5PTiBRVU9URUQgXCJRVU9UXCJcIkVEXCIgQUZURVIgXCJOT1QgTUFUQ0hFRAorCisnXEEoPzpbXlwiXSsrfFwiKD86W15cIl0rK3xcIlwiKSorXCIpKysnCisgICAgTk9OIFFVT1RFRCBcIlFVT1RcIlwiRURcIiBBRlRFUiBcIk5PVCBNQVRDSEVECisKKydcQSg/OlteXCJdKyt8XCIoPzpbXlwiXSsrfFwiXCIpKytcIikrKycKKyAgICBOT04gUVVPVEVEIFwiUVVPVFwiXCJFRFwiIEFGVEVSIFwiTk9UIE1BVENIRUQKKworJ1xBKFteXCIxXSsrfFtcIjJdKFteXCIzXSorfFtcIjRdW1wiNV0pKitbXCI2XSkrKycKKyAgICBOT04gUVVPVEVEIFwiUVVPVFwiXCJFRFwiIEFGVEVSIFwiTk9UIE1BVENIRUQKKworL15cdysoPz5ccyopKD88PVx3KS8KKyAgICB0ZXN0IHRlc3QKKworLyg/UDxzYW1lPmEpKD9QPHNhbWU+YikvZyxkdXBuYW1lcworICAgIGFiYmFiYQorCisvKD9QPHNhbWU+YSkoP1A8c2FtZT5iKSg/UD1zYW1lKS9nLGR1cG5hbWVzCisgICAgYWJiYWJhCisKKy8oP1A9c2FtZSk/KD9QPHNhbWU+YSkoP1A8c2FtZT5iKS9nLGR1cG5hbWVzCisgICAgYWJiYWJhCisKKy8oPzooP1A9c2FtZSk/KD86KD9QPHNhbWU+YSl8KD9QPHNhbWU+YikpKD9QPXNhbWUpKSsvZyxkdXBuYW1lcworICAgIGJiYmFhYWJhYWJiCisKKy8oPzooP1A9c2FtZSk/KD86KD9QPXNhbWUpKD9QPHNhbWU+YSkoP1A9c2FtZSl8KD9QPXNhbWUpPyg/UDxzYW1lPmIpKD9QPXNhbWUpKXsyfSg/UD1zYW1lKSg/UDxzYW1lPmMpKD9QPXNhbWUpKXsyfSg/UDxzYW1lPnopPy9nLGR1cG5hbWVzCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYmJhYWFjY2NjYWFhYmJiY2MKKworLyg/UDxOYW1lPmEpPyg/UDxOYW1lMj5iKT8oPyg8TmFtZT4pY3xkKSpsLworICAgIGFjbAorICAgIGJkbAorICAgIGFkbAorICAgIGJjbCAgICAKKworL1xzYWJjLworICAgIFx4ezBifWFiYworCisvW1xRYV1cRV0rLworICAgIGFhXV0KKworL1tcUV1hXEVdKy8KKyAgICBhYV1dCisKKy9BKCgoKCgoKChhKSkpKSkpKSlcOEIvIAorICAgIEFhYUIKKworL0EoKCgoKCgoKChhKSkpKSkpKSkpXDlCLyAKKyAgICBBYWFCCisgICAgCisvQVtcOFw5XUIvCisgICAgQThCCisgICAgQTlCICAKKworLyh8YWIpKj9kLworICAgYWJkCisgICB4eWQgCisKKy8oPzooKGFiY2QpKXwoKCg/Oig/Oig/Oig/OmFiY3woPzphYmNkZWYpKSkpYilhYmNkZWZnaGkpYWJjKXwoKCpBQ0NFUFQpKSkvCisgICAgMTIzNGFiY2QKKworLyhcMnxhKShcMSkvCisgICAgYWFhCisKKy8oXDIpKFwxKS8KKworIloqKHxkKil7MjE2fSIKKworIig/MSkoPyM/Jyl7OH0oYSkiCisgICAgYmFhYWFhYWFhYWMKKworLygoKCgoKCgoKCgoKHgpKSkpKSkpKSkpKSlcMTIvCisgICAgeHgKKworL0FbXDhdQltcOV1DLworICAgIEE4QjlDCisKKy8oPzEpKCkoKCgoKChcMSsrKSlceDg1KSspfCkpLworICAgIFx4ODVceDg1CisKKyIoP3woXGsnUG0nKXwoPydQbScpKSIKKyAgICBhYmNkCisKKy8oP3woYWFhKXwoYikpXGd7MX0vCisgICAgYWFhYWFhCisgICAgYmIgCisKKy8oP3woYWFhKXwoYikpKD8xKS8KKyAgICBhYWFhYWEKKyAgICBiYWFhIAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGJiIAorCisvKD98KGFhYSl8KGIpKS8KKyAgICB4YWFhCisgICAgeGJjIAorCisvKD98KD8nYSdhYWEpfCg/J2EnYikpXGsnYScvCisgICAgYWFhYWFhCisgICAgYmIgCisKKy8oP3woPydhJ2FhYSl8KD8nYSdiKSkoPydhJ2NjY2MpXGsnYScvZHVwbmFtZXMKKyAgICBhYWFjY2NjYWFhCisgICAgYmNjY2NiIAorCisjIEVuZCBvZiB0ZXN0aW5wdXQxIApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MTAgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTBlMWM5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MTAKQEAgLTAsMCArMSw0NDggQEAKKyMgVGhpcyBzZXQgb2YgdGVzdHMgaXMgZm9yIFVURi04IHN1cHBvcnQgYW5kIFVuaWNvZGUgcHJvcGVydHkgc3VwcG9ydCwgd2l0aAorIyByZWxldmFuY2Ugb25seSBmb3IgdGhlIDgtYml0IGxpYnJhcnkuCisKKyMgVGhlIG5leHQgNCBwYXR0ZXJucyBoYXZlIFVURi04IGVycm9ycworCisvW8NdL3V0ZgorCisvwy91dGYKKworL8PDw3h4eC91dGYKKworL8OCgoKCgoKCgsMvdXRmCisKKyMgTm93IHRlc3Qgc3ViamVjdHMKKworL2JhZHV0Zi91dGYKK1w9IEV4cGVjdCBVVEYtOCBlcnJvcnMKKyAgICBYXHhkZgorICAgIFhYXHhlZgorICAgIFhYWFx4ZWZceDgwCisgICAgWFx4ZjcKKyAgICBYWFx4ZjdceDgwCisgICAgWFhYXHhmN1x4ODBceDgwCisgICAgXHhmYgorICAgIFx4ZmJceDgwCisgICAgXHhmYlx4ODBceDgwCisgICAgXHhmYlx4ODBceDgwXHg4MAorICAgIFx4ZmQKKyAgICBceGZkXHg4MAorICAgIFx4ZmRceDgwXHg4MAorICAgIFx4ZmRceDgwXHg4MFx4ODAKKyAgICBceGZkXHg4MFx4ODBceDgwXHg4MAorICAgIFx4ZGZceDdmCisgICAgXHhlZlx4N2ZceDgwCisgICAgXHhlZlx4ODBceDdmCisgICAgXHhmN1x4N2ZceDgwXHg4MAorICAgIFx4ZjdceDgwXHg3Zlx4ODAKKyAgICBceGY3XHg4MFx4ODBceDdmCisgICAgXHhmYlx4N2ZceDgwXHg4MFx4ODAKKyAgICBceGZiXHg4MFx4N2ZceDgwXHg4MAorICAgIFx4ZmJceDgwXHg4MFx4N2ZceDgwCisgICAgXHhmYlx4ODBceDgwXHg4MFx4N2YKKyAgICBceGZkXHg3Zlx4ODBceDgwXHg4MFx4ODAKKyAgICBceGZkXHg4MFx4N2ZceDgwXHg4MFx4ODAKKyAgICBceGZkXHg4MFx4ODBceDdmXHg4MFx4ODAKKyAgICBceGZkXHg4MFx4ODBceDgwXHg3Zlx4ODAKKyAgICBceGZkXHg4MFx4ODBceDgwXHg4MFx4N2YKKyAgICBceGVkXHhhMFx4ODAKKyAgICBceGMwXHg4ZgorICAgIFx4ZTBceDgwXHg4ZgorICAgIFx4ZjBceDgwXHg4MFx4OGYKKyAgICBceGY4XHg4MFx4ODBceDgwXHg4ZgorICAgIFx4ZmNceDgwXHg4MFx4ODBceDgwXHg4ZgorICAgIFx4ODAKKyAgICBceGZlCisgICAgXHhmZgorCisvYmFkdXRmL3V0ZgorXD0gRXhwZWN0IFVURi04IGVycm9ycworICAgIFhYXHhmYlx4ODBceDgwXHg4MFx4ODAKKyAgICBYWFx4ZmRceDgwXHg4MFx4ODBceDgwXHg4MAorICAgIFhYXHhmN1x4YmZceGJmXHhiZgorCisvc2hvcnR1dGYvdXRmCitcPSBFeHBlY3QgVVRGLTggZXJyb3JzCisgICAgWFhceGRmXD1waAorICAgIFhYXHhlZlw9cGgKKyAgICBYWFx4ZWZceDgwXD1waAorICAgIFx4ZjdcPXBoCisgICAgXHhmN1x4ODBcPXBoCisgICAgXHhmN1x4ODBceDgwXD1waAorICAgIFx4ZmJcPXBoCisgICAgXHhmYlx4ODBcPXBoCisgICAgXHhmYlx4ODBceDgwXD1waAorICAgIFx4ZmJceDgwXHg4MFx4ODBcPXBoCisgICAgXHhmZFw9cGgKKyAgICBceGZkXHg4MFw9cGgKKyAgICBceGZkXHg4MFx4ODBcPXBoCisgICAgXHhmZFx4ODBceDgwXHg4MFw9cGgKKyAgICBceGZkXHg4MFx4ODBceDgwXHg4MFw9cGgKKworL2FueXRoaW5nL3V0ZgorXD0gRXhwZWN0IFVURi04IGVycm9ycworICAgIFhceGMwXHg4MAorICAgIFhYXHhjMVx4OGYKKyAgICBYWFhceGUwXHg5Zlx4ODAKKyAgICBceGYwXHg4Zlx4ODBceDgwCisgICAgXHhmOFx4ODdceDgwXHg4MFx4ODAKKyAgICBceGZjXHg4M1x4ODBceDgwXHg4MFx4ODAKKyAgICBceGZlXHg4MFx4ODBceDgwXHg4MFx4ODAKKyAgICBceGZmXHg4MFx4ODBceDgwXHg4MFx4ODAKKyAgICBceGY4XHg4OFx4ODBceDgwXHg4MAorICAgIFx4ZjlceDg3XHg4MFx4ODBceDgwCisgICAgXHhmY1x4ODRceDgwXHg4MFx4ODBceDgwCisgICAgXHhmZFx4ODNceDgwXHg4MFx4ODBceDgwCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceGMzXHg4ZgorICAgIFx4ZTBceGFmXHg4MAorICAgIFx4ZTFceDgwXHg4MAorICAgIFx4ZjBceDlmXHg4MFx4ODAKKyAgICBceGYxXHg4Zlx4ODBceDgwCisgICAgXHhmOFx4ODhceDgwXHg4MFx4ODBcPW5vX3V0Zl9jaGVjaworICAgIFx4ZjlceDg3XHg4MFx4ODBceDgwXD1ub191dGZfY2hlY2sKKyAgICBceGZjXHg4NFx4ODBceDgwXHg4MFx4ODBcPW5vX3V0Zl9jaGVjaworICAgIFx4ZmRceDgzXHg4MFx4ODBceDgwXHg4MFw9bm9fdXRmX2NoZWNrCisgICAgCisjIFNpbWlsYXIgdGVzdHMgd2l0aCBvZmZzZXRzCisKKy9iYWR1dGYvdXRmCitcPSBFeHBlY3QgVVRGLTggZXJyb3JzCisgICAgWFx4ZGZhYmNkCisgICAgWFx4ZGZhYmNkXD1vZmZzZXQ9MQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWFx4ZGZhYmNkXD1vZmZzZXQ9MgorCisvKD88PXgpYmFkdXRmL3V0ZgorXD0gRXhwZWN0IFVURi04IGVycm9ycworICAgIFhceGRmYWJjZAorICAgIFhceGRmYWJjZFw9b2Zmc2V0PTEKKyAgICBYXHhkZmFiY2RcPW9mZnNldD0yCisgICAgWFx4ZGZhYmNkXHhkZlw9b2Zmc2V0PTMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhceGRmYWJjZFw9b2Zmc2V0PTMKKworLyg/PD14eCliYWR1dGYvdXRmCitcPSBFeHBlY3QgVVRGLTggZXJyb3JzCisgICAgWFx4ZGZhYmNkCisgICAgWFx4ZGZhYmNkXD1vZmZzZXQ9MQorICAgIFhceGRmYWJjZFw9b2Zmc2V0PTIKKyAgICBYXHhkZmFiY2RcPW9mZnNldD0zCisKKy8oPzw9eHh4eCliYWR1dGYvdXRmCitcPSBFeHBlY3QgVVRGLTggZXJyb3JzCisgICAgWFx4ZGZhYmNkCisgICAgWFx4ZGZhYmNkXD1vZmZzZXQ9MQorICAgIFhceGRmYWJjZFw9b2Zmc2V0PTIKKyAgICBYXHhkZmFiY2RcPW9mZnNldD0zCisgICAgWFx4ZGZhYmNceGRmXD1vZmZzZXQ9NgorICAgIFhceGRmYWJjXHhkZlw9b2Zmc2V0PTcKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhceGRmYWJjZFw9b2Zmc2V0PTYKKyAKKy9ceHsxMDB9L0lCLHV0ZgorCisvXHh7MTAwMH0vSUIsdXRmCisKKy9ceHsxMDAwMH0vSUIsdXRmCisKKy9ceHsxMDAwMDB9L0lCLHV0ZgorCisvXHh7MTBmZmZmfS9JQix1dGYKKworL1tceHtmZn1dL0lCLHV0ZgorCisvW1x4ezEwMH1dL0lCLHV0ZgorCisvXHg4MC9JQix1dGYKKworL1x4ZmYvSUIsdXRmCisKKy9ceHtENTVjfVx4e2FkNmR9XHh7QzVCNH0vSUIsdXRmCisgICAgXHh7RDU1Y31ceHthZDZkfVx4e0M1QjR9CisKKy9ceHs2NWU1fVx4ezY3MmN9XHh7OGE5ZX0vSUIsdXRmCisgICAgXHh7NjVlNX1ceHs2NzJjfVx4ezhhOWV9CisKKy9ceHs4MH0vSUIsdXRmCisKKy9ceHswODR9L0lCLHV0ZgorCisvXHh7MTA0fS9JQix1dGYKKworL1x4ezg2MX0vSUIsdXRmCisKKy9ceHsyMTJhYn0vSUIsdXRmCisKKy9bXmFiXHhDMC1ceEYwXS9JQix1dGYKKyAgICBceHtmMX0KKyAgICBceHtiZn0KKyAgICBceHsxMDB9CisgICAgXHh7MTAwMH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4e2MwfQorICAgIFx4e2YwfQorCisvxIB7Myw0fS9JQix1dGYKKyAgXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwXHh7MTAwfQorCisvKFx4ezEwMH0rfHgpL0lCLHV0ZgorCisvKFx4ezEwMH0qYXx4KS9JQix1dGYKKworLyhceHsxMDB9ezAsMn1hfHgpL0lCLHV0ZgorCisvKFx4ezEwMH17MSwyfWF8eCkvSUIsdXRmCisKKy9ceHsxMDB9L0lCLHV0ZgorCisvYVx4ezEwMH1ceHsxMDF9Ki9JQix1dGYKKworL2FceHsxMDB9XHh7MTAxfSsvSUIsdXRmCisKKy9bXlx4e2M0fV0vSUIKKworL1tceHsxMDB9XS9JQix1dGYKKyAgICBceHsxMDB9CisgICAgWlx4ezEwMH0KKyAgICBceHsxMDB9WgorCisvW1x4ZmZdL0lCLHV0ZgorICAgID5ceHtmZn08CisKKy9bXlx4ZmZdL0lCLHV0ZgorCisvXHh7MTAwfWFiYyh4eXooPzEpKS9JQix1dGYKKworL1w3NzcvSSx1dGYKKyAgXHh7MWZmfQorICBcNzc3CisKKy9ceHsxMDB9K1x4ezIwMH0vSUIsdXRmCisKKy9ceHsxMDB9K1gvSUIsdXRmCisKKy9eW1xRxIBcRS1cUcWQXEUvQix1dGYKKworIyBUaGlzIHRlc3RzIHRoZSBzdHJpY3RlciBVVEYtOCBjaGVjayBhY2NvcmRpbmcgdG8gUkZDIDM2MjkuCisKKy9YL3V0ZgorXD0gRXhwZWN0IFVURi04IGVycm9ycworICAgIFx4e2Q4MDB9CisgICAgXHh7ZGEwMH0KKyAgICBceHtkZmZmfQorICAgIFx4ezExMDAwMH0KKyAgICBceHsyMDAwMDAwfQorICAgIFx4ezdmZmZmZmZmfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7ZDgwMH1cPW5vX3V0Zl9jaGVjaworICAgIFx4e2RhMDB9XD1ub191dGZfY2hlY2sKKyAgICBceHtkZmZmfVw9bm9fdXRmX2NoZWNrCisgICAgXHh7MTEwMDAwfVw9bm9fdXRmX2NoZWNrCisgICAgXHh7MjAwMDAwMH1cPW5vX3V0Zl9jaGVjaworICAgIFx4ezdmZmZmZmZmfVw9bm9fdXRmX2NoZWNrCisKKy8oKlVURjgpXHh7MTIzNH0vCisgICAgYWJjZFx4ezEyMzR9cHFyCisKKy8oKkNSTEYpKCpVVEYpKCpCU1JfVU5JQ09ERSlhXFJiL0kKKworL1xoL0ksdXRmCisgICAgQUJDXHh7MDl9CisgICAgQUJDXHh7MjB9CisgICAgQUJDXHh7YTB9CisgICAgQUJDXHh7MTY4MH0KKyAgICBBQkNceHsxODBlfQorICAgIEFCQ1x4ezIwMDB9CisgICAgQUJDXHh7MjAyZn0KKyAgICBBQkNceHsyMDVmfQorICAgIEFCQ1x4ezMwMDB9CisKKy9cdi9JLHV0ZgorICAgIEFCQ1x4ezBhfQorICAgIEFCQ1x4ezBifQorICAgIEFCQ1x4ezBjfQorICAgIEFCQ1x4ezBkfQorICAgIEFCQ1x4ezg1fQorICAgIEFCQ1x4ezIwMjh9CisKKy9caCpBL0ksdXRmCisgICAgQ0RCQUJDCisKKy9cditBL0ksdXRmCisKKy9ccz94eHhccy9JLHV0ZgorCisvXHN4eHhccy9JLHV0Zix0YWJsZXM9MgorICAgIEFCXHh7ODV9eHh4XHh7YTB9WFlaCisgICAgQUJceHthMH14eHhceHs4NX1YWVoKKworL1xTIFxTL0ksdXRmLHRhYmxlcz0yCisgICAgXHh7YTJ9IFx4ezg0fQorICAgIEEgWgorCisvYSsvdXRmCisgICAgYVx4ezEyM31hYVw9b2Zmc2V0PTEKKyAgICBhXHh7MTIzfWFhXD1vZmZzZXQ9MworICAgIGFceHsxMjN9YWFcPW9mZnNldD00CitcPSBFeHBlY3QgYmFkIG9mZnNldCB2YWx1ZQorICAgIGFceHsxMjN9YWFcPW9mZnNldD02CitcPSBFeHBlY3QgYmFkIFVURi04IG9mZnNldCAgICAgCisgICAgYVx4ezEyM31hYVw9b2Zmc2V0PTIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceHsxMjN9YWFcPW9mZnNldD01CisKKy9ceHsxMjM0fSsvSWksdXRmCisKKy9ceHsxMjM0fSs/L0lpLHV0ZgorCisvXHh7MTIzNH0rKy9JaSx1dGYKKworL1x4ezEyMzR9ezJ9L0lpLHV0ZgorCisvW15ceHtjNH1dL0lCLHV0ZgorCisvWCtceHsyMDB9L0lCLHV0ZgorCisvXFIvSSx1dGYKKworL1w3NzcvSUIsdXRmCisKKy9cdytceHtDNH0vQix1dGYKKyAgICBhXHh7QzR9XHh7QzR9CisKKy9cdytceHtDNH0vQix1dGYsdGFibGVzPTIKKyAgICBhXHh7QzR9XHh7QzR9CisKKy9cVytceHtDNH0vQix1dGYKKyAgICAhXHh7QzR9CisKKy9cVytceHtDNH0vQix1dGYsdGFibGVzPTIKKyAgICAhXHh7QzR9CisKKy9cVytceHtBMX0vQix1dGYKKyAgICAhXHh7QTF9CisKKy9cVytceHtBMX0vQix1dGYsdGFibGVzPTIKKyAgICAhXHh7QTF9CisKKy9YXHMrXHh7QTB9L0IsdXRmCisgICAgWFx4MjBceHtBMH1ceHtBMH0KKworL1hccytceHtBMH0vQix1dGYsdGFibGVzPTIKKyAgICBYXHgyMFx4e0EwfVx4e0EwfQorCisvXFMrXHh7QTB9L0IsdXRmCisgICAgWFx4e0EwfVx4e0EwfQorCisvXFMrXHh7QTB9L0IsdXRmLHRhYmxlcz0yCisgICAgWFx4e0EwfVx4e0EwfQorCisvXHh7YTB9K1xzIS9CLHV0ZgorICAgIFx4e2EwfVx4MjAhCisKKy9ceHthMH0rXHMhL0IsdXRmLHRhYmxlcz0yCisgICAgXHh7YTB9XHgyMCEKKworL0EvdXRmCisgIFx4e2ZmMDAwMDQxfQorICBceHs3ZjAwMDA0MX0KKworLygqVVRGOClhYmMvbmV2ZXJfdXRmCisKKy9hYmMvdXRmLG5ldmVyX3V0ZgorCisvQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9L0lCaSx1dGYKKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS9JQix1dGYKKworL0FCXHh7MWZiMH0vSUIsdXRmCisKKy9BQlx4ezFmYjB9L0lCaSx1dGYKKworL1x4ezQwMX1ceHs0MjB9XHh7NDIxfVx4ezQyMn1ceHs0MjN9XHh7NDI0fVx4ezQyNX1ceHs0MjZ9XHh7NDI3fVx4ezQyOH1ceHs0Mjl9XHh7NDJhfVx4ezQyYn1ceHs0MmN9XHh7NDJkfVx4ezQyZX1ceHs0MmZ9L0lpLHV0ZgorICAgIFx4ezQwMX1ceHs0MjB9XHh7NDIxfVx4ezQyMn1ceHs0MjN9XHh7NDI0fVx4ezQyNX1ceHs0MjZ9XHh7NDI3fVx4ezQyOH1ceHs0Mjl9XHh7NDJhfVx4ezQyYn1ceHs0MmN9XHh7NDJkfVx4ezQyZX1ceHs0MmZ9CisgICAgXHh7NDUxfVx4ezQ0MH1ceHs0NDF9XHh7NDQyfVx4ezQ0M31ceHs0NDR9XHh7NDQ1fVx4ezQ0Nn1ceHs0NDd9XHh7NDQ4fVx4ezQ0OX1ceHs0NGF9XHh7NDRifVx4ezQ0Y31ceHs0NGR9XHh7NDRlfVx4ezQ0Zn0KKworL1visaVdL0JpLHV0ZgorCisvW17isaVdL0JpLHV0ZgorCisvXGgvSQorCisvXHYvSQorCisvXFIvSQorCisvW1s6Ymxhbms6XV0vQix1Y3AKKworL1x4ezIxMmF9Ky9JaSx1dGYKKyAgICBLS2trXHh7MjEyYX0KKworL3MrL0lpLHV0ZgorICAgIFNTc3NceHsxN2Z9CisKKy9ceHsxMDB9KkEvSUIsdXRmCisgICAgQQorCisvXHh7MTAwfSpcZCg/UikvSUIsdXRmCisKKy9bWlx4ezEwMH1dL0lCLHV0ZgorICAgIFpceHsxMDB9CisgICAgXHh7MTAwfQorICAgIFx4ezEwMH1aCisKKy9bei1ceHsxMDB9XS9JQix1dGYKKworL1t6XFFhLWRdxIBcRV0vSUIsdXRmCisgICAgXHh7MTAwfQorICAgIMSAIAorCisvW2FiXHh7MTAwfV1hYmMoeHl6KD8xKSkvSUIsdXRmCisKKy9ceHsxMDB9KlxzL0lCLHV0ZgorCisvXHh7MTAwfSpcZC9JQix1dGYKKworL1x4ezEwMH0qXHcvSUIsdXRmCisKKy9ceHsxMDB9KlxEL0lCLHV0ZgorCisvXHh7MTAwfSpcUy9JQix1dGYKKworL1x4ezEwMH0qXFcvSUIsdXRmCisKKy9bXHh7MTA1fS1ceHsxMDl9XS9JQmksdXRmCisgICAgXHh7MTA0fQorICAgIFx4ezEwNX0KKyAgICBceHsxMDl9ICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezEwMH0KKyAgICBceHsxMGF9IAorICAgIAorL1t6LVx4ezEwMH1dL0lCaSx1dGYKKyAgICBaCisgICAgegorICAgIFx4ezM5Y30KKyAgICBceHsxNzh9CisgICAgfAorICAgIFx4ezgwfQorICAgIFx4e2ZmfQorICAgIFx4ezEwMH0KKyAgICBceHsxMDF9IAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MTAyfQorICAgIFkKKyAgICB5ICAgICAgICAgICAKKworL1t6LVx4ezEwMH1dL0lCaSx1dGYKKworL1x4ezNhM31CL0lCaSx1dGYKKworL2FiYy91dGYscmVwbGFjZT3DCisgICAgYWJjCisKKy8oPzw9KGEpKD8tMSkpeC9JLHV0ZgorICAgIGFceDgwenhcPW9mZnNldD0zCisKKyMgRW5kIG9mIHRlc3RpbnB1dDEwCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxMSBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZGVmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxMQpAQCAtMCwwICsxLDM1NiBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBpcyBmb3IgdGhlIDE2LWJpdCBhbmQgMzItYml0IGxpYnJhcmllcycgYmFzaWMgKG5vbi1VVEYpCisjIGZlYXR1cmVzIHRoYXQgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIDgtYml0IGxpYnJhcnksIG9yIHdoaWNoIGdpdmUKKyMgZGlmZmVyZW50IG91dHB1dCBpbiAxNi1iaXQgb3IgMzItYml0IG1vZGUuIFRoZSBvdXRwdXQgZm9yIHRoZSB0d28gd2lkdGhzIGlzCisjIGRpZmZlcmVudCwgc28gdGhleSBoYXZlIHNlcGFyYXRlIG91dHB1dCBmaWxlcy4KKyAgICAKKyNmb3JiaWRfdXRmCisjbmV3bGluZV9kZWZhdWx0IExGIEFOWSBBTllDUkxGCisKKy9bXlx4e2M0fV0vSUIKKyAgCisvXHh7MTAwfS9JCisKKy8gICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCBsZWFkaW5nIGNvbW1lbnQKKyg/OiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgd29yZAorKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICApKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGEgcGVyaW9kCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisjIGFkZHJlc3MKK3wgICAgICAgICAgICAgICAgICAgICAjICBvcgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgICAgICAgICAgICAjIG9uZSB3b3JkLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5Li4uLgorKD86CitbXigpPD5ALDs6Ii5cXFxbXF1ceDgwLVx4ZmZcMDAwLVwwMTBcMDEyLVwwMzddICB8ICAjIGF0b20gYW5kIHNwYWNlIHBhcnRzLCBvci4uLgorXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgICAgICB8ICAjIGNvbW1lbnRzLCBvci4uLgorCisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCisjIHF1b3RlZCBzdHJpbmdzCispKgorPCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICAgICAgICAgICAgICAgICAgIyBsZWFkaW5nIDwKKyg/OiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKworKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICwgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKykqICMgZnVydGhlciBva2F5LCBpZiBsZWQgYnkgY29tbWEKKzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xvc2luZyBjb2xvbgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICApPyAjICAgICAgIG9wdGlvbmFsIHJvdXRlCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgd29yZAorKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICApKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGEgcGVyaW9kCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisjICAgICAgIGFkZHJlc3Mgc3BlYworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICA+ICMgICAgICAgICAgICAgICAgICB0cmFpbGluZyA+CisjIG5hbWUgYW5kIGFkZHJlc3MKKykgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50CisvSXgKKworL1tcaF0vQgorICAgID5ceDA5PAorCisvW1xoXSsvQgorICAgID5ceDA5XHgyMFx4YTA8CisKKy9bXHZdL0IKKworL1teXGhdL0IKKworL1xoKy9JCisgICAgXHh7MTY4MX1ceHsyMDBifVx4ezE2ODB9XHh7MjAwMH1ceHsyMDJmfVx4ezMwMDB9CisgICAgXHh7MzAwMX1ceHsyZmZmfVx4ezIwMGF9XHhhMFx4ezIwMDB9CisKKy9bXGhceHtkYzAwfV0rL0lCCisgICAgXHh7MTY4MX1ceHsyMDBifVx4ezE2ODB9XHh7MjAwMH1ceHsyMDJmfVx4ezMwMDB9CisgICAgXHh7MzAwMX1ceHsyZmZmfVx4ezIwMGF9XHhhMFx4ezIwMDB9CisKKy9cSCsvSQorICAgIFx4ezE2ODB9XHh7MTgwZX1ceHsxNjdmfVx4ezE2ODF9XHh7MTgwZH1ceHsxODBmfQorICAgIFx4ezIwMDB9XHh7MjAwYX1ceHsxZmZmfVx4ezIwMGJ9CisgICAgXHh7MjAyZn1ceHsyMDVmfVx4ezIwMmV9XHh7MjAzMH1ceHsyMDVlfVx4ezIwNjB9CisgICAgXHhhMFx4ezMwMDB9XHg5Zlx4YTFceHsyZmZmfVx4ezMwMDF9CisKKy9bXEhceHtkODAwfV0rLworICAgIFx4ezE2ODB9XHh7MTgwZX1ceHsxNjdmfVx4ezE2ODF9XHh7MTgwZH1ceHsxODBmfQorICAgIFx4ezIwMDB9XHh7MjAwYX1ceHsxZmZmfVx4ezIwMGJ9CisgICAgXHh7MjAyZn1ceHsyMDVmfVx4ezIwMmV9XHh7MjAzMH1ceHsyMDVlfVx4ezIwNjB9CisgICAgXHhhMFx4ezMwMDB9XHg5Zlx4YTFceHsyZmZmfVx4ezMwMDF9CisKKy9cdisvSQorICAgIFx4ezIwMjd9XHh7MjAzMH1ceHsyMDI4fVx4ezIwMjl9CisgICAgXHgwOVx4MGVceDg0XHg4Nlx4ODVceDBhXHgwYlx4MGNceDBkCisKKy9bXHZceHtkYzAwfV0rL0lCCisgICAgXHh7MjAyN31ceHsyMDMwfVx4ezIwMjh9XHh7MjAyOX0KKyAgICBceDA5XHgwZVx4ODRceDg2XHg4NVx4MGFceDBiXHgwY1x4MGQKKworL1xWKy9JCisgICAgXHh7MjAyOH1ceHsyMDI5fVx4ezIwMjd9XHh7MjAzMH0KKyAgICBceDg1XHgwYVx4MGJceDBjXHgwZFx4MDlceDBlXHg4NFx4ODYKKworL1tcVlx4e2Q4MDB9XSsvCisgICAgXHh7MjAyOH1ceHsyMDI5fVx4ezIwMjd9XHh7MjAzMH0KKyAgICBceDg1XHgwYVx4MGJceDBjXHgwZFx4MDlceDBlXHg4NFx4ODYKKworL1xSKy9JLGJzcj11bmljb2RlCisgICAgXHh7MjAyN31ceHsyMDMwfVx4ezIwMjh9XHh7MjAyOX0KKyAgICBceDA5XHgwZVx4ODRceDg2XHg4NVx4MGFceDBiXHgwY1x4MGQKKworL1x4e2Q4MDB9XHh7ZDdmZn1ceHtkYzAwfVx4e2RjMDB9XHh7ZGNmZn1ceHtkZDAwfS9JCisgICAgXHh7ZDgwMH1ceHtkN2ZmfVx4e2RjMDB9XHh7ZGMwMH1ceHtkY2ZmfVx4e2RkMDB9CisKKy9bXlx4ezgwfV1bXlx4e2ZmfV1bXlx4ezEwMH1dW15ceHsxMDAwfV1bXlx4e2ZmZmZ9XS9CCisKKy9bXlx4ezgwfV1bXlx4e2ZmfV1bXlx4ezEwMH1dW15ceHsxMDAwfV1bXlx4e2ZmZmZ9XS9CaQorCisvW15ceHsxMDB9XSpbXlx4ezEwMDB9XStbXlx4e2ZmZmZ9XT8/W15ceHs4MDAwfV17NCx9W15ceHs3ZmZmfV17Miw5fT9bXlx4ezEwMH1dezUsNn0rL0IKKworL1teXHh7MTAwfV0qW15ceHsxMDAwfV0rW15ceHtmZmZmfV0/P1teXHh7ODAwMH1dezQsfVteXHh7N2ZmZn1dezIsOX0/W15ceHsxMDB9XXs1LDZ9Ky9CaQorCisvKCo6MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRilYWC9tYXJrCisgICAgWFgKKyAgICAgCisvKCo6MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFKVhYL21hcmsKKyAgICBYWAorCisvXHUwMTAwL0IsYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZgorCisvW1x1MDEwMC1cdTAyMDBdL0IsYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZgorCisvXHVkODAwL0IsYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZgorCisvXlx4e2ZmZmZ9Ky9pCisgICAgXHh7ZmZmZn0KKworL15ceHtmZmZmfT8vaQorICAgIFx4e2ZmZmZ9CisKKy9eXHh7ZmZmZn0qL2kKKyAgICBceHtmZmZmfQorCisvXlx4e2ZmZmZ9ezN9L2kKKyAgICBceHtmZmZmfVx4e2ZmZmZ9XHh7ZmZmZn0KKworL15ceHtmZmZmfXswLDN9L2kKKyAgICBceHtmZmZmfQorCisvW15ceDAwLWFdezEyLH1bXmItXHhmZl0qL0IKKworL1teXHNdKlxzKiBbXlxXXStcVysgW15cZF0qP1xkMCBbXlxkXHddezQsNn0/XHcqQS9CCisKKy9hKltiLVx4ezIwMH1dP2EjYSpbYi1ceHsyMDB9XT9iI1thLWZdKltnLVx4ezIwMH1dKiNbZy1ceHsyMDB9XSpbYS1jXSojW2ctXHh7MjAwfV0qW2EtaF0qL0IKKworL15bXHh7MTIzNH1ceHs0MzIxfV17Miw0fT8vCisgICAgXHh7MTIzNH1ceHsxMjM0fVx4ezEyMzR9CisKKyMgQ2hlY2sgbWF4aW11bSBub24tVVRGIGNoYXJhY3RlciBzaXplIGZvciB0aGUgMTYtYml0IGxpYnJhcnkuCisKKy9ceHtmZmZmfS8KKyAgICBBXHh7ZmZmZn1CCisKKy9ceHsxMDAwMH0vCisKKy9cb3syMDAwMH0vCisKKyMgQ2hlY2sgbWF4aW11bSBjaGFyYWN0ZXIgc2l6ZSBmb3IgdGhlIDMyLWJpdCBsaWJyYXJ5LiBUaGVzZSB3aWxsIGFsbCBnaXZlCisjIGVycm9ycyBpbiB0aGUgMTYtYml0IGxpYnJhcnkuCisKKy9ceHsxMTAwMDB9LworCisvXHh7N2ZmZmZmZmZ9LworCisvXHh7ODAwMDAwMDB9LworCisvXHh7ZmZmZmZmZmZ9LworCisvXHh7MTAwMDAwMDAwfS8KKworL1xvezE3Nzc3Nzc3Nzc3fS8KKworL1xvezIwMDAwMDAwMDAwfS8KKworL1xvezM3Nzc3Nzc3Nzc3fS8KKworL1xvezQwMDAwMDAwMDAwfS8KKworL1x4ezdmZmZmZmZmfVx4ezdmZmZmZmZmfS9JCisKKy9ceHs4MDAwMDAwMH1ceHs4MDAwMDAwMH0vSQorCisvXHh7ZmZmZmZmZmZ9XHh7ZmZmZmZmZmZ9L0kKKworIyBOb24tVVRGIGNoYXJhY3RlcnMgCisKKy8uezIsM30vCisgICAgXHh7NDAwMDAwfVx4ezQwMDAwMX1ceHs0MDAwMDJ9XHh7NDAwMDAzfQorCisvXHh7NDAwMDAwfVx4ezgwMDAwMH0vSUJpCisKKyMgQ2hlY2sgY2hhcmFjdGVyIHJhbmdlcyAKKworL1tcSF0vSUIKKworL1tcVl0vSUIKKworLygqVEhFTjpcW0FdezY1NTAxfSkvZXhwYW5kCisKKyMgRW5kIG9mIHRlc3RpbnB1dDExCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxMiBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDEyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0YTc3MTUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxMgpAQCAtMCwwICsxLDM0NiBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBpcyBmb3IgVVRGLTE2IGFuZCBVVEYtMzIgc3VwcG9ydCwgaW5jbHVkaW5nIFVuaWNvZGUKKyMgcHJvcGVydGllcy4gSXQgaXMgcmVsZXZhbnQgb25seSB0byB0aGUgMTYtYml0IGFuZCAzMi1iaXQgbGlicmFyaWVzLiBUaGUKKyMgb3V0cHV0IGlzIGRpZmZlcmVudCBmb3IgZWFjaCBsaWJyYXJ5LCBzbyB0aGVyZSBhcmUgc2VwYXJhdGUgb3V0cHV0IGZpbGVzLgorCisvw8PDeHh4L0lCLHV0Zixub191dGZfY2hlY2sKKworL2FiYy91dGYKKyAgICDDXQorCisjIENoZWNrIG1heGltdW0gY2hhcmFjdGVyIHNpemUgCisKKy9ceHtmZmZmfS9JQix1dGYKKworL1x4ezEwMDAwfS9JQix1dGYKKworL1x4ezEwMH0vSUIsdXRmCisKKy9ceHsxMDAwfS9JQix1dGYKKworL1x4ezEwMDAwfS9JQix1dGYKKworL1x4ezEwMDAwMH0vSUIsdXRmCisKKy9ceHsxMGZmZmZ9L0lCLHV0ZgorCisvW1x4e2ZmfV0vSUIsdXRmCisKKy9bXHh7MTAwfV0vSUIsdXRmCisKKy9ceDgwL0lCLHV0ZgorCisvXHhmZi9JQix1dGYKKworL1x4e0Q1NWN9XHh7YWQ2ZH1ceHtDNUI0fS9JQix1dGYKKyAgICBceHtENTVjfVx4e2FkNmR9XHh7QzVCNH0KKworL1x4ezY1ZTV9XHh7NjcyY31ceHs4YTllfS9JQix1dGYKKyAgICBceHs2NWU1fVx4ezY3MmN9XHh7OGE5ZX0KKworL1x4ezgwfS9JQix1dGYKKworL1x4ezA4NH0vSUIsdXRmCisKKy9ceHsxMDR9L0lCLHV0ZgorCisvXHh7ODYxfS9JQix1dGYKKworL1x4ezIxMmFifS9JQix1dGYKKworL1teYWJceEMwLVx4RjBdL0lCLHV0ZgorICAgIFx4e2YxfQorICAgIFx4e2JmfQorICAgIFx4ezEwMH0KKyAgICBceHsxMDAwfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7YzB9CisgICAgXHh7ZjB9CisKKy/EgHszLDR9L0lCLHV0ZgorICBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDBceHsxMDB9CisKKy8oXHh7MTAwfSt8eCkvSUIsdXRmCisKKy8oXHh7MTAwfSphfHgpL0lCLHV0ZgorCisvKFx4ezEwMH17MCwyfWF8eCkvSUIsdXRmCisKKy8oXHh7MTAwfXsxLDJ9YXx4KS9JQix1dGYKKworL1x4ezEwMH0vSUIsdXRmCisKKy9hXHh7MTAwfVx4ezEwMX0qL0lCLHV0ZgorCisvYVx4ezEwMH1ceHsxMDF9Ky9JQix1dGYKKworL1teXHh7YzR9XS9JQgorCisvW1x4ezEwMH1dL0lCLHV0ZgorICAgIFx4ezEwMH0KKyAgICBaXHh7MTAwfQorICAgIFx4ezEwMH1aCisKKy9bXHhmZl0vSUIsdXRmCisgICAgPlx4e2ZmfTwKKworL1teXHhmZl0vSUIsdXRmCisKKy9ceHsxMDB9YWJjKHh5eig/MSkpL0lCLHV0ZgorCisvXDc3Ny9JLHV0ZgorICBceHsxZmZ9CisgIFw3NzcKKworL1x4ezEwMH0rXHh7MjAwfS9JQix1dGYKKworL1x4ezEwMH0rWC9JQix1dGYKKworL15bXFHEgFxFLVxRxZBcRS9CLHV0ZgorCisvWC91dGYKKyAgICBYWFx4e2Q4MDB9XD1ub191dGZfY2hlY2sKKyAgICBYWFx4e2RhMDB9XD1ub191dGZfY2hlY2sKKyAgICBYWFx4e2RjMDB9XD1ub191dGZfY2hlY2sKKyAgICBYWFx4e2RlMDB9XD1ub191dGZfY2hlY2sKKyAgICBYWFx4e2RmZmZ9XD1ub191dGZfY2hlY2sKK1w9IEV4cGVjdCBVVEYgZXJyb3IKKyAgICBYWFx4e2Q4MDB9CisgICAgWFhceHtkYTAwfQorICAgIFhYXHh7ZGMwMH0KKyAgICBYWFx4e2RlMDB9CisgICAgWFhceHtkZmZmfQorICAgIFhYXHh7MTEwMDAwfQorICAgIFhYXHh7ZDgwMH1ceHsxMjM0fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWFhceHtkODAwfVw9b2Zmc2V0PTMKKyAgICAKKy8oPzw9LilYL3V0ZgorICAgIFhYXHh7ZDgwMH1cPW9mZnNldD0zCisKKy8oKlVURjE2KVx4ezExMjM0fS8KKyAgYWJjZFx4ezExMjM0fXBxcgorCisvKCpVVEYpXHh7MTEyMzR9L0kKKyAgYWJjZFx4ezExMjM0fXBxcgorCisvKCpVVEYtMzIpXHh7MTEyMzR9LworICBhYmNkXHh7MTEyMzR9cHFyCisKKy8oKlVURi0zMilceHsxMTJ9LworICBhYmNkXHh7MTEyMzR9cHFyCisKKy8oKkNSTEYpKCpVVEYxNikoKkJTUl9VTklDT0RFKWFcUmIvSQorCisvKCpDUkxGKSgqVVRGMzIpKCpCU1JfVU5JQ09ERSlhXFJiL0kKKworL1xoL0ksdXRmCisgICAgQUJDXHh7MDl9CisgICAgQUJDXHh7MjB9CisgICAgQUJDXHh7YTB9CisgICAgQUJDXHh7MTY4MH0KKyAgICBBQkNceHsxODBlfQorICAgIEFCQ1x4ezIwMDB9CisgICAgQUJDXHh7MjAyZn0KKyAgICBBQkNceHsyMDVmfQorICAgIEFCQ1x4ezMwMDB9CisKKy9cdi9JLHV0ZgorICAgIEFCQ1x4ezBhfQorICAgIEFCQ1x4ezBifQorICAgIEFCQ1x4ezBjfQorICAgIEFCQ1x4ezBkfQorICAgIEFCQ1x4ezg1fQorICAgIEFCQ1x4ezIwMjh9CisKKy9caCpBL0ksdXRmCisgICAgQ0RCQUJDCisgICAgXHh7MjAwMH1BQkMKKworL1xSKkEvSSxic3I9dW5pY29kZSx1dGYKKyAgICBDREJBQkMKKyAgICBceHsyMDI4fUEKKworL1x2K0EvSSx1dGYKKworL1xzP3h4eFxzL0ksdXRmCisKKy9cc3h4eFxzL0ksdXRmLHRhYmxlcz0yCisgICAgQUJceHs4NX14eHhceHthMH1YWVoKKyAgICBBQlx4e2EwfXh4eFx4ezg1fVhZWgorCisvXFMgXFMvSSx1dGYsdGFibGVzPTIKKyAgICBceHthMn0gXHh7ODR9CisgICAgQSBaCisKKy9hKy91dGYKKyAgICBhXHh7MTIzfWFhXD1vZmZzZXQ9MQorICAgIGFceHsxMjN9YWFcPW9mZnNldD0yCisgICAgYVx4ezEyM31hYVw9b2Zmc2V0PTMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceHsxMjN9YWFcPW9mZnNldD00CitcPSBFeHBlY3QgYmFkIG9mZnNldCBlcnJvciAgICAgCisgICAgYVx4ezEyM31hYVw9b2Zmc2V0PTUKKyAgICBhXHh7MTIzfWFhXD1vZmZzZXQ9NgorCisvXHh7MTIzNH0rL0lpLHV0ZgorCisvXHh7MTIzNH0rPy9JaSx1dGYKKworL1x4ezEyMzR9KysvSWksdXRmCisKKy9ceHsxMjM0fXsyfS9JaSx1dGYKKworL1teXHh7YzR9XS9JQix1dGYKKworL1grXHh7MjAwfS9JQix1dGYKKworL1xSL0ksdXRmCisKKyMgQ2hlY2sgYmFkIG9mZnNldCAKKworL2EvdXRmCitcPSBFeHBlY3QgYmFkIFVURi0xNiBvZmZzZXQsIG9yIG5vIG1hdGNoIGluIDMyLWJpdAorICAgIFx4ezEwMDAwfVw9b2Zmc2V0PTEKKyAgICBceHsxMDAwMH1hYlw9b2Zmc2V0PTEKK1w9IEV4cGVjdCAxNi1iaXQgbWF0Y2gsIDMyLWJpdCBubyBtYXRjaAorICAgIFx4ezEwMDAwfWFiXD1vZmZzZXQ9MgorXD0gRXhwZWN0IG5vIG1hdGNoICAgICAKKyAgICBceHsxMDAwMH1hYlw9b2Zmc2V0PTMKK1w9IEV4cGVjdCBubyBtYXRjaCBpbiAxNi1iaXQsIGJhZCBvZmZzZXQgaW4gMzItYml0ICAgIAorICAgIFx4ezEwMDAwfWFiXD1vZmZzZXQ9NAorXD0gRXhwZWN0IGJhZCBvZmZzZXQgICAgIAorICAgIFx4ezEwMDAwfWFiXD1vZmZzZXQ9NQorCisv7byAL3V0ZgorCisvXHcrXHh7QzR9L0IsdXRmCisgICAgYVx4e0M0fVx4e0M0fQorCisvXHcrXHh7QzR9L0IsdXRmLHRhYmxlcz0yCisgICAgYVx4e0M0fVx4e0M0fQorICAgIAorL1xXK1x4e0M0fS9CLHV0ZgorICAgICFceHtDNH0KKyAKKy9cVytceHtDNH0vQix1dGYsdGFibGVzPTIKKyAgICAhXHh7QzR9CisKKy9cVytceHtBMX0vQix1dGYKKyAgICAhXHh7QTF9CisgCisvXFcrXHh7QTF9L0IsdXRmLHRhYmxlcz0yCisgICAgIVx4e0ExfQorCisvWFxzK1x4e0EwfS9CLHV0ZgorICAgIFhceDIwXHh7QTB9XHh7QTB9CisKKy9YXHMrXHh7QTB9L0IsdXRmLHRhYmxlcz0yCisgICAgWFx4MjBceHtBMH1ceHtBMH0KKworL1xTK1x4e0EwfS9CLHV0ZgorICAgIFhceHtBMH1ceHtBMH0KKworL1xTK1x4e0EwfS9CLHV0Zix0YWJsZXM9MgorICAgIFhceHtBMH1ceHtBMH0KKworL1x4e2EwfStccyEvQix1dGYKKyAgICBceHthMH1ceDIwIQorCisvXHh7YTB9K1xzIS9CLHV0Zix0YWJsZXM9MgorICAgIFx4e2EwfVx4MjAhCisKKy8oKlVURilhYmMvbmV2ZXJfdXRmCisKKy9hYmMvdXRmLG5ldmVyX3V0ZgorCisvQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9L0lCaSx1dGYKKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS9JQix1dGYKKworL0FCXHh7MWZiMH0vSUIsdXRmCisKKy9BQlx4ezFmYjB9L0lCaSx1dGYKKworL1x4ezQwMX1ceHs0MjB9XHh7NDIxfVx4ezQyMn1ceHs0MjN9XHh7NDI0fVx4ezQyNX1ceHs0MjZ9XHh7NDI3fVx4ezQyOH1ceHs0Mjl9XHh7NDJhfVx4ezQyYn1ceHs0MmN9XHh7NDJkfVx4ezQyZX1ceHs0MmZ9L0lpLHV0ZgorICAgIFx4ezQwMX1ceHs0MjB9XHh7NDIxfVx4ezQyMn1ceHs0MjN9XHh7NDI0fVx4ezQyNX1ceHs0MjZ9XHh7NDI3fVx4ezQyOH1ceHs0Mjl9XHh7NDJhfVx4ezQyYn1ceHs0MmN9XHh7NDJkfVx4ezQyZX1ceHs0MmZ9CisgICAgXHh7NDUxfVx4ezQ0MH1ceHs0NDF9XHh7NDQyfVx4ezQ0M31ceHs0NDR9XHh7NDQ1fVx4ezQ0Nn1ceHs0NDd9XHh7NDQ4fVx4ezQ0OX1ceHs0NGF9XHh7NDRifVx4ezQ0Y31ceHs0NGR9XHh7NDRlfVx4ezQ0Zn0KKworL1visaVdL0JpLHV0ZgorCisvW17isaVdL0JpLHV0ZgorCisvW1s6Ymxhbms6XV0vQix1Y3AKKworL1x4ezIxMmF9Ky9JaSx1dGYKKyAgICBLS2trXHh7MjEyYX0KKworL3MrL0lpLHV0ZgorICAgIFNTc3NceHsxN2Z9CisKKyMgTm9uLVVURiBjaGFyYWN0ZXJzIHNob3VsZCBnaXZlIGVycm9ycyBpbiBib3RoIDE2LWJpdCBhbmQgMzItYml0IG1vZGVzLgorCisvXHh7MTEwMDAwfS91dGYKKworL1xvezQyMDAwMDB9L3V0ZgorCisvXHh7MTAwfSpBL0lCLHV0ZgorICAgIEEKKworL1x4ezEwMH0qXGQoP1IpL0lCLHV0ZgorCisvW1pceHsxMDB9XS9JQix1dGYKKyAgICBaXHh7MTAwfQorICAgIFx4ezEwMH0KKyAgICBceHsxMDB9WgorCisvW3otXHh7MTAwfV0vSUIsdXRmCisKKy9belxRYS1kXcSAXEVdL0lCLHV0ZgorICAgIFx4ezEwMH0KKyAgICDEgCAKKworL1thYlx4ezEwMH1dYWJjKHh5eig/MSkpL0lCLHV0ZgorCisvXHh7MTAwfSpccy9JQix1dGYKKworL1x4ezEwMH0qXGQvSUIsdXRmCisKKy9ceHsxMDB9Klx3L0lCLHV0ZgorCisvXHh7MTAwfSpcRC9JQix1dGYKKworL1x4ezEwMH0qXFMvSUIsdXRmCisKKy9ceHsxMDB9KlxXL0lCLHV0ZgorCisvW1x4ezEwNX0tXHh7MTA5fV0vSUJpLHV0ZgorICAgIFx4ezEwNH0KKyAgICBceHsxMDV9CisgICAgXHh7MTA5fSAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9CisgICAgXHh7MTBhfSAKKyAgICAKKy9bei1ceHsxMDB9XS9JQmksdXRmCisgICAgWgorICAgIHoKKyAgICBceHszOWN9CisgICAgXHh7MTc4fQorICAgIHwKKyAgICBceHs4MH0KKyAgICBceHtmZn0KKyAgICBceHsxMDB9CisgICAgXHh7MTAxfSAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezEwMn0KKyAgICBZCisgICAgeSAgICAgICAgICAgCisKKy9bei1ceHsxMDB9XS9JQmksdXRmCisKKy9ceHszYTN9Qi9JQmksdXRmCisKKy8uL3V0ZgorICAgIFx4ezExMDAwMH0KKworIyBFbmQgb2YgdGVzdGlucHV0MTIKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDEzIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhYzI1ZgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDEzCkBAIC0wLDAgKzEsMjIgQEAKKyMgVGhlc2UgREZBIHRlc3RzIGFyZSBmb3IgdGhlIGhhbmRsaW5nIG9mIGNoYXJhY3RlcnMgZ3JlYXRlciB0aGFuIDI1NSBpbgorIyAxNi1iaXQgb3IgMzItYml0LCBub24tVVRGIG1vZGUuIAorCisjZm9yYmlkX3V0ZgorI3N1YmplY3QgZGZhCisKKy9eXHh7ZmZmZn0rL2kKKyAgICBceHtmZmZmfQorCisvXlx4e2ZmZmZ9Py9pCisgICAgXHh7ZmZmZn0KKworL15ceHtmZmZmfSovaQorICAgIFx4e2ZmZmZ9CisKKy9eXHh7ZmZmZn17M30vaQorICAgIFx4e2ZmZmZ9XHh7ZmZmZn1ceHtmZmZmfQorCisvXlx4e2ZmZmZ9ezAsM30vaQorICAgIFx4e2ZmZmZ9CisKKyMgRW5kIG9mIHRlc3RpbnB1dDEzCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxNCBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDE0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5N2YzZWMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxNApAQCAtMCwwICsxLDM3IEBACisjIFRoZXNlIHRlc3Qgc3BlY2lhbCAobW9zdGx5IGVycm9yKSBVVEYgZmVhdHVyZXMgb2YgREZBIG1hdGNoaW5nLiBUaGV5IGFyZSBhIAorIyBzZWxlY3Rpb24gb2YgdGhlIG1vcmUgY29tcHJlaGVuc2l2ZSB0ZXN0cyB0aGF0IGFyZSBydW4gZm9yIG5vbi1ERkEgbWF0Y2hpbmcuCisjIFRoZSBvdXRwdXQgaXMgZGlmZmVyZW50IGZvciB0aGUgZGlmZmVyZW50IHdpZHRocy4KKworI3N1YmplY3QgZGZhCisKKy9YL3V0ZgorICAgIFhYXHh7ZDgwMH0KKyAgICBYWFx4e2Q4MDB9XD1vZmZzZXQ9MworICAgIFhYXHh7ZDgwMH1cPW5vX3V0Zl9jaGVjaworICAgIFhYXHh7ZGEwMH0KKyAgICBYWFx4e2RhMDB9XD1ub191dGZfY2hlY2sKKyAgICBYWFx4e2RjMDB9CisgICAgWFhceHtkYzAwfVw9bm9fdXRmX2NoZWNrCisgICAgWFhceHtkZTAwfQorICAgIFhYXHh7ZGUwMH1cPW5vX3V0Zl9jaGVjaworICAgIFhYXHh7ZGZmZn0KKyAgICBYWFx4e2RmZmZ9XD1ub191dGZfY2hlY2sKKyAgICBYWFx4ezExMDAwMH0KKyAgICBYWFx4e2Q4MDB9XHh7MTIzNH0KKyAgICAgICAgICAKKy9iYWR1dGYvdXRmCisgICAgWFx4ZGYKKyAgICBYWFx4ZWYKKyAgICBYWFhceGVmXHg4MAorICAgIFhceGY3CisgICAgWFhceGY3XHg4MAorICAgIFhYWFx4ZjdceDgwXHg4MAorCisvc2hvcnR1dGYvdXRmCisgICAgWFhceGRmXD1waAorICAgIFhYXHhlZlw9cGgKKyAgICBYWFx4ZWZceDgwXD1waAorICAgIFx4ZjdcPXBoCisgICAgXHhmN1x4ODBcPXBoCisKKyMgRW5kIG9mIHRlc3RpbnB1dDE0CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxNSBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDE1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlYTlmZmQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxNQpAQCAtMCwwICsxLDE2MyBAQAorIyBUaGVzZSBhcmU6CisjCisjICgxKSBUZXN0cyBvZiB0aGUgbWF0Y2gtbGltaXRpbmcgZmVhdHVyZXMuIFRoZSByZXN1bHRzIGFyZSBkaWZmZXJlbnQgZm9yCisjIGludGVycHJldGl2ZSBvciBKSVQgbWF0Y2hpbmcsIHNvIHRoaXMgdGVzdCBzaG91bGQgbm90IGJlIHJ1biB3aXRoIEpJVC4gVGhlCisjIHNhbWUgdGVzdHMgYXJlIHJ1biB1c2luZyBKSVQgaW4gdGVzdCAxNy4KKworIyAoMikgT3RoZXIgdGVzdHMgdGhhdCBtdXN0IG5vdCBiZSBydW4gd2l0aCBKSVQuCisKKy8oYSspKnp6L0kKKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhenpiYmJiYmJcPWZpbmRfbGltaXRzCisgIGFhYWFhYWFhYWFhYWF6XD1maW5kX2xpbWl0cworCishKCg/OlxzfC8vLipcXG58L1sqXSg/OlxcbnwuKSo/WypdLykqKSFJCisgICAvKiB0aGlzIGlzIGEgQyBzdHlsZSBjb21tZW50ICovXD1maW5kX2xpbWl0cworCisvXig/PmEpKysvCisgICAgYWFcPWZpbmRfbGltaXRzCisgICAgYWFhYWFhYWFhXD1maW5kX2xpbWl0cworICAgIAorLyhhKSg/MSkrKy8KKyAgICBhYVw9ZmluZF9saW1pdHMKKyAgICBhYWFhYWFhYWFcPWZpbmRfbGltaXRzCisKKy9hKD86LikqP2EvaW1zCisgICAgYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmFcPWZpbmRfbGltaXRzCisgICAgCisvYSg/Oi4oKlRIRU4pKSo/YS9pbXMKKyAgICBhYmJiYmJiYmJiYmJiYmJiYmJiYmJiYVw9ZmluZF9saW1pdHMKKworL2EoPzouKCpUSEVOOkFCQykpKj9hL2ltcworICAgIGFiYmJiYmJiYmJiYmJiYmJiYmJiYmJhXD1maW5kX2xpbWl0cworCisvXig/PmErKSg/PmIrKSg/PmMrKSg/PmQrKSg/PmUrKS8KKyAgICAgYWFiYmNjZGRlZVw9ZmluZF9saW1pdHMKKworL14oPz4oYSspKSg/PihiKykpKD8+KGMrKSkoPz4oZCspKSg/PihlKykpLworICAgICBhYWJiY2NkZGVlXD1maW5kX2xpbWl0cworCisvXig/PihhKykpKD8+YispKD8+KGMrKSkoPz5kKykoPz4oZSspKS8KKyAgICAgYWFiYmNjZGRlZVw9ZmluZF9saW1pdHMKKworLygqTElNSVRfTUFUQ0g9MTJiYylhYmMvCisKKy8oKkxJTUlUX01BVENIPTQyOTQ5NjcyOTApYWJjLworCisvKCpMSU1JVF9SRUNVUlNJT049NDI5NDk2NzI4MClhYmMvSQorCisvKGErKSp6ei8KKyAgICBhYWFhYWFhYWFhYWFhegorICAgIGFhYWFhYWFhYWFhYWF6XD1tYXRjaF9saW1pdD0zMDAwCisKKy8oYSspKnp6LworICAgIGFhYWFhYWFhYWFhYWF6XD1yZWN1cnNpb25fbGltaXQ9MTAKKworLygqTElNSVRfTUFUQ0g9MzAwMCkoYSspKnp6L0kKKyAgICBhYWFhYWFhYWFhYWFhegorICAgIGFhYWFhYWFhYWFhYWF6XD1tYXRjaF9saW1pdD02MDAwMAorCisvKCpMSU1JVF9NQVRDSD02MDAwMCkoKkxJTUlUX01BVENIPTMwMDApKGErKSp6ei9JCisgICAgYWFhYWFhYWFhYWFhYXoKKworLygqTElNSVRfTUFUQ0g9NjAwMDApKGErKSp6ei9JCisgICAgYWFhYWFhYWFhYWFhYXoKKyAgICBhYWFhYWFhYWFhYWFhelw9bWF0Y2hfbGltaXQ9MzAwMAorCisvKCpMSU1JVF9SRUNVUlNJT049MTApKGErKSp6ei9JCisgICAgYWFhYWFhYWFhYWFhYXoKKyAgICBhYWFhYWFhYWFhYWFhelw9cmVjdXJzaW9uX2xpbWl0PTEwMDAKKworLygqTElNSVRfUkVDVVJTSU9OPTEwKSgqTElNSVRfUkVDVVJTSU9OPTEwMDApKGErKSp6ei9JCisgICAgYWFhYWFhYWFhYWFhYXoKKworLygqTElNSVRfUkVDVVJTSU9OPTEwMDApKGErKSp6ei9JCisgICAgYWFhYWFhYWFhYWFhYXoKKyAgICBhYWFhYWFhYWFhYWFhelw9cmVjdXJzaW9uX2xpbWl0PTEwCisgICAgCisjIFRoZXNlIHRocmVlIGhhdmUgaW5maW5pdGVseSBuZXN0ZWQgcmVjdXJzaW9ucy4gCisgICAgCisvKCg/MikpKCg/MSkpLworICAgIGFiYworCisvKCg/KFIyKWErfCg/MSliKSkvCisgICAgYWFhYWJjZGUKKworLyg/KFIpYSooPzEpfCgoP1IpKWIpLworICAgIGFhYWFiY2RlCisgICAgCisjIFRoZSBhbGx1c2VkdGV4dCBtb2RpZmllciBkb2VzIG5vdCB3b3JrIHdpdGggSklULCB3aGljaCBkb2VzIG5vdCBtYWludGFpbgorIyB0aGUgbGVmdGNoYXIvcmlnaHRjaGFyIGRhdGEuCisKKy9hYmMoPz14eXopL2FsbHVzZWR0ZXh0CisgICAgYWJjeHl6cHFyCisgICAgYWJjeHl6cHFyXD1hZnRlcnRleHQKKyAgICAKKy8oPzw9cHFyKWFiYyg/PXh5eikvYWxsdXNlZHRleHQKKyAgICB4eXpwcXJhYmN4eXpwcXIKKyAgICB4eXpwcXJhYmN4eXpwcXJcPWFmdGVydGV4dAorICAgIAorL2FcYi8KKyAgICBhLlw9YWxsdXNlZHRleHQKKyAgICBhXD1hbGx1c2VkdGV4dCAgCisKKy9hYmNcS3h5ei8KKyAgICBhYmN4eXpcPWFsbHVzZWR0ZXh0CisKKy9hYmMoPz14eXooKkFDQ0VQVCkpLworICAgIGFiY3h5elw9YWxsdXNlZHRleHQKKworL2FiYyg/PWFiY2RlKSg/PWFiKS9hbGx1c2VkdGV4dAorICAgIGFiY2FiY2RlZmcKKyAgICAKKyMgVGhlc2UgdGVzdHMgcHJvdm9rZSByZWN1cnNpb24gbG9vcHMsIHdoaWNoIGdpdmUgYSBkaWZmZXJlbnQgZXJyb3IgbWVzc2FnZQorIyB3aGVuIEpJVCBpcyB1c2VkLgorCisvKD9SKS9JCisgICAgYWJjZAorCisvKGF8KD9SKSkvSQorICAgIGFiY2QKKyAgICBkZWZnIAorCisvKGFifChiY3woZGV8KD9SKSkpKS9JCisgICAgYWJjZAorICAgIGZnaGkgCisKKy8oYWJ8KGJjfChkZXwoPzEpKSkpL0kKKyAgICBhYmNkCisgICAgZmdoaSAKKworL3goYWJ8KGJjfChkZXwoPzEpeCl4KXgpL0kKKyAgICB4YWIxMjMKKyAgICB4ZmdoaSAKKworLyg/IVx3KSg/UikvCisgICAgYWJjZAorICAgID1hYmMgCisKKy8oPz1cdykoP1IpLworICAgID1hYmMgCisgICAgYWJjZAorCisvKD88IVx3KSg/UikvCisgICAgYWJjZAorCisvKD88PVx3KSg/UikvCisgICAgYWJjZAorCisvKGErfCg/UiliKS8KKyAgICBhYWEKKyAgICBiYmIgCisKKy9bXlx4ZmZdKCg/MSkpL0JJCisgICAgYWJjZAorICAgIAorIyBUaGVzZSB0ZXN0cyBkb24ndCBiZWhhdmUgdGhlIHNhbWUgd2l0aCBKSVQgCisKKy9cdysoP0MxKS9CSSxub19hdXRvX3Bvc3Nlc3MKKyAgICBhYmNcPWNhbGxvdXRfZmFpbD0xCisKKy8oKk5PX0FVVE9fUE9TU0VTUylcdysoP0MxKS9CSQorICAgIGFiY1w9Y2FsbG91dF9mYWlsPTEKKworIyBFbmQgb2YgdGVzdGlucHV0MTUKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDE2IGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE0ODIwNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDE2CkBAIC0wLDAgKzEsOSBAQAorIyBUaGlzIHRlc3QgaXMgcnVuIG9ubHkgd2hlbiBKSVQgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLiBJdCBjaGVja3MgdGhhdCBhbgorIyBhdHRlbXB0IHRvIHVzZSBpdCBoYXMgdGhlIGV4cGVjdGVkIGJlaGF2aW91ci4gSXQgYWxzbyB0ZXN0cyB0aGluZ3MgdGhhdAorIyBhcmUgZGlmZmVyZW50IHdpdGhvdXQgSklULgorCisvYWJjL0ksaml0LGppdHZlcmlmeQorCisvYSovSQorCisjIEVuZCBvZiB0ZXN0aW5wdXQxNgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MTcgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxNwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDc0ZWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MTcKQEAgLTAsMCArMSwyNzYgQEAKKyMgVGhpcyB0ZXN0IGlzIHJ1biBvbmx5IHdoZW4gSklUIHN1cHBvcnQgaXMgYXZhaWxhYmxlLiBJdCBjaGVja3MgSklUIGNvbXBsZXRlCisjIGFuZCBwYXJ0aWFsIG1vZGVzLCBhbmQgdGhpbmdzIHRoYXQgYXJlIGRpZmZlcmVudCB3aXRoIEpJVC4KKworI3BhdHRlcm4gaml0dmVyaWZ5CisKKyMgSklUIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBwYXR0ZXJuIChjYWxsb3V0IGF0IHN0YXJ0IG9mIGNvbmRpdGlvbikuCisKKy8oPyg/QzEpKD89YSlhKS9JCisKKyMgVGhlIGZvbGxvd2luZyBwYXR0ZXJuIGNhbm5vdCBiZSBjb21waWxlZCBieSBKSVQuCisKKy9iKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYiovSQorCisjIENoZWNrIHRoYXQgYW4gaW5maW5pdGUgcmVjdXJzaW9uIGxvb3AgaXMgY2F1Z2h0LgorCisvKD8oUilhKig/MSl8KCg/UikpYikvCisgICAgYWFhYWJjZGUKKworL2FiY2QvSQorICAgIGFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorCisvKCpOT19KSVQpYWJjZC9JCisgICAgYWJjZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6CisKKy9hYmNkLworICAgIGFiY2QKKyAgICBhYlw9cHMKKyAgICBhYlw9cGgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorCisvYWJjZC9qaXRmYXN0CisgICAgYWJjZAorICAgIGFiXD1wcworICAgIGFiXD1waAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6CisKKy9hYmNkL2ppdD0xCisgICAgYWJjZAorICAgIGFiXD1wcworICAgIGFiXD1waAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6CisgICAgeHl6XD1wcworCisvYWJjZC9qaXQ9MSxqaXRmYXN0CisgICAgYWJjZAorICAgIGFiXD1wcworICAgIGFiXD1waAorICAgIHh5elw9cHMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorCisvYWJjZC9qaXQ9MgorICAgIGFiY2QKKyAgICBhYlw9cHMKKyAgICBhYlw9cGgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorCisvYWJjZC9qaXQ9MixqaXRmYXN0CisgICAgYWJjZAorICAgIGFiXD1wcworICAgIGFiXD1waAorICAgIHh5egorCisvYWJjZC9qaXQ9MworICAgIGFiY2QKKyAgICBhYlw9cHMKKyAgICBhYlw9cGgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorCisvYWJjZC9qaXQ9NAorICAgIGFiY2QKKyAgICBhYlw9cHMKKyAgICBhYlw9cGgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorCisvYWJjZC9qaXQ9NQorICAgIGFiY2QKKyAgICBhYlw9cHMKKyAgICBhYlw9cGgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorCisvYWJjZC9qaXQ9NgorICAgIGFiY2QKKyAgICBhYlw9cHMKKyAgICBhYlw9cGgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorCisvYWJjZC9qaXQ9NworICAgIGFiY2QKKyAgICBhYlw9cHMKKyAgICBhYlw9cGgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorCisvYWJjZC9JLGppdD0yCisKKy8oKk5PX1NUQVJUX09QVClhKCo6bSliL21hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKKworL14xMjM0NTY3OGFiY2QvbQorICAgIDEyMzQ1Njc4YWJjZAorICAgIAorIyBMaW1pdHMgdGVzdHMgdGhhdCBnaXZlIGRpZmZlcmVudCBvdXRwdXQgd2l0aCBKSVQuIAorCisvKGErKSp6ei9JCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYXp6YmJiYmJiXD1maW5kX2xpbWl0cworXD0gRXhwZWN0IG5vIG1hdGNoCisgIGFhYWFhYWFhYWFhYWF6XD1maW5kX2xpbWl0cworCishKCg/OlxzfC8vLipcXG58L1sqXSg/OlxcbnwuKSo/WypdLykqKSFJCisgICAvKiB0aGlzIGlzIGEgQyBzdHlsZSBjb21tZW50ICovXD1maW5kX2xpbWl0cworCisvXig/PmEpKysvCisgICAgYWFcPWZpbmRfbGltaXRzCisgICAgYWFhYWFhYWFhXD1maW5kX2xpbWl0cworICAgIAorLyhhKSg/MSkrKy8KKyAgICBhYVw9ZmluZF9saW1pdHMKKyAgICBhYWFhYWFhYWFcPWZpbmRfbGltaXRzCisKKy9hKD86LikqP2EvaW1zCisgICAgYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmFcPWZpbmRfbGltaXRzCisgICAgCisvYSg/Oi4oKlRIRU4pKSo/YS9pbXMKKyAgICBhYmJiYmJiYmJiYmJiYmJiYmJiYmJiYVw9ZmluZF9saW1pdHMKKworL2EoPzouKCpUSEVOOkFCQykpKj9hL2ltcworICAgIGFiYmJiYmJiYmJiYmJiYmJiYmJiYmJhXD1maW5kX2xpbWl0cworCisvXig/PmErKSg/PmIrKSg/PmMrKSg/PmQrKSg/PmUrKS8KKyAgICAgYWFiYmNjZGRlZVw9ZmluZF9saW1pdHMKKworL14oPz4oYSspKSg/PihiKykpKD8+KGMrKSkoPz4oZCspKSg/PihlKykpLworICAgICBhYWJiY2NkZGVlXD1maW5kX2xpbWl0cworCisvXig/PihhKykpKD8+YispKD8+KGMrKSkoPz5kKykoPz4oZSspKS8KKyAgICAgYWFiYmNjZGRlZVw9ZmluZF9saW1pdHMKKworL14oPz4oYSspKSg/PmIrKSg/PihjKykpKD8+ZCspKD8+KGUrKSkvaml0ZmFzdAorICAgICBhYWJiY2NkZGVlXD1maW5kX2xpbWl0cworICAgICBhYWJiY2NkZGVlXD1qaXRzdGFjaz0xCisKKy8oYSspKnp6LworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYWFhYWFhYWFhYXoKK1w9IEV4cGVjdCBsaW1pdCBleGNlZWRlZAorICAgIGFhYWFhYWFhYWFhYWF6XD1tYXRjaF9saW1pdD0zMDAwCisKKy8oKkxJTUlUX01BVENIPTMwMDApKGErKSp6ei9JCisgICAgYWFhYWFhYWFhYWFhYXoKKyAgICBhYWFhYWFhYWFhYWFhelw9bWF0Y2hfbGltaXQ9NjAwMDAKKworLygqTElNSVRfTUFUQ0g9NjAwMDApKCpMSU1JVF9NQVRDSD0zMDAwKShhKykqenovSQorICAgIGFhYWFhYWFhYWFhYWF6CisKKy8oKkxJTUlUX01BVENIPTYwMDAwKShhKykqenovSQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYWFhYWFhYWFhYXoKK1w9IEV4cGVjdCBsaW1pdCBleGNlZWRlZAorICAgIGFhYWFhYWFhYWFhYWF6XD1tYXRjaF9saW1pdD0zMDAwCisKKyMgVGhlc2UgdGhyZWUgaGF2ZSBpbmZpbml0ZWx5IG5lc3RlZCByZWN1cnNpb25zLiAKKyAgICAKKy8oKD8yKSkoKD8xKSkvCisgICAgYWJjCisKKy8oKD8oUjIpYSt8KD8xKWIpKS8KKyAgICBhYWFhYmNkZQorCisvKD8oUilhKig/MSl8KCg/UikpYikvCisgICAgYWFhYWJjZGUKKyAgICAKKyMgSW52YWxpZCBvcHRpb25zIGRpc2FibGUgSklUIHdoZW4gY2FsbGVkIHZpYSBwY3JlMl9tYXRjaCgpLCBjYXVzaW5nIHRoZQorIyBtYXRjaCB0byBoYXBwZW4gdmlhIHRoZSBpbnRlcnByZXRlciwgYnV0IGZvciBmYXN0IEpJVCBpbnZhbGlkIG9wdGlvbnMgYXJlCisjIGlnbm9yZWQsIHNvIGFuIHVuYW5jaG9yZWQgbWF0Y2ggaGFwcGVucy4KKworL2FiY2QvCisgICAgYWJjZFw9YW5jaG9yZWQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGZhaWwgYWJjZFw9YW5jaG9yZWQgCisgICAgCisvYWJjZC9qaXRmYXN0CisgICAgYWJjZFw9YW5jaG9yZWQgCisgICAgc3VjY2VlZCBhYmNkXD1hbmNob3JlZCAKKyAgICAKKyMgUHVzaC9wb3AgZG9lcyBub3QgbG9zZSB0aGUgSklUIGluZm9ybWF0aW9uLCB0aG91Z2ggaml0dmVyaWZ5IGFwcGxpZXMgb25seSB0bworIyBjb21waWxhdGlvbiwgYnV0IHNlcmlhbGl6aW5nIChzYXZlL2xvYWQpIGRpc2NhcmRzIEpJVCBkYXRhIGNvbXBsZXRlbHkuCisKKy9eYWJjXEtkZWYvaW5mbyxwdXNoCisjcG9wIGppdHZlcmlmeQorICAgIGFiY2RlZgorCisvXmFiY1xLZGVmL2luZm8scHVzaAorI3NhdmUgdGVzdHNhdmVkMQorI2xvYWQgdGVzdHNhdmVkMQorI3BvcCBqaXR2ZXJpZnkKKyAgICBhYmNkZWYKKyAgICAKKyNsb2FkIHRlc3RzYXZlZDEKKyNwb3Agaml0LGppdHZlcmlmeQorICAgIGFiY2RlZgorICAgIAorIyBUZXN0IHBhdHRlcm4gY29tcGlsYXRpb24KKworLyg/OmF8YnxjfGR8ZSkoP1IpL2ppdD0xCisKKy8oPzphfGJ8Y3xkfGUpKD9SKSg/Uikvaml0PTEKKworLyhhKD86YXxifGN8ZHxlKWIpezgsMTZ9L2ppdD0xCisKKy8oPzp8YXwpezEwMH14L2ppdD0xCisKKyMgVGhlc2UgdGVzdHMgcHJvdm9rZSByZWN1cnNpb24gbG9vcHMsIHdoaWNoIGdpdmUgYSBkaWZmZXJlbnQgZXJyb3IgbWVzc2FnZQorIyB3aGVuIEpJVCBpcyB1c2VkLgorCisvKD9SKS9JCisgICAgYWJjZAorCisvKGF8KD9SKSkvSQorICAgIGFiY2QKKyAgICBkZWZnIAorCisvKGFifChiY3woZGV8KD9SKSkpKS9JCisgICAgYWJjZAorICAgIGZnaGkgCisKKy8oYWJ8KGJjfChkZXwoPzEpKSkpL0kKKyAgICBhYmNkCisgICAgZmdoaSAKKworL3goYWJ8KGJjfChkZXwoPzEpeCl4KXgpL0kKKyAgICB4YWIxMjMKKyAgICB4ZmdoaSAKKworLyg/IVx3KSg/UikvCisgICAgYWJjZAorICAgID1hYmMgCisKKy8oPz1cdykoP1IpLworICAgID1hYmMgCisgICAgYWJjZAorCisvKD88IVx3KSg/UikvCisgICAgYWJjZAorCisvKD88PVx3KSg/UikvCisgICAgYWJjZAorCisvKGErfCg/UiliKS8KKyAgICBhYWEKKyAgICBiYmIgCisKKy9bXlx4ZmZdKCg/MSkpL0JJCisgICAgYWJjZAorCisvKHgoPzEpKXs0fS8KKworL1theG1dezd9LworCisvKC58LikqP2J4LworICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYmF4CisKKyMgRW5kIG9mIHRlc3RpbnB1dDE3CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxOCBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDE4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NWI4NDIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxOApAQCAtMCwwICsxLDEwMSBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBpcyBydW4gb25seSB3aXRoIHRoZSA4LWJpdCBsaWJyYXJ5LiBJdCB0ZXN0cyB0aGUgUE9TSVgKKyMgaW50ZXJmYWNlLCB3aGljaCBpcyBzdXBwb3J0ZWQgb25seSB3aXRoIHRoZSA4LWJpdCBsaWJyYXJ5LiBUaGlzIHRlc3Qgc2hvdWxkCisjIG5vdCBiZSBydW4gd2l0aCBKSVQgKHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBQT1NJWCBpbnRlcmZhY2UpLgorICAgIAorI2ZvcmJpZF91dGYKKyNwYXR0ZXJuIHBvc2l4CisKKyMgVGVzdCBpbnZhbGlkIG9wdGlvbnMKKworL2FiYy9hdXRvX2NhbGxvdXQKKworL2FiYy8KKyAgIGFiY1w9ZmluZF9saW1pdHMKKworL2FiYy8KKyAgYWJjXD1wYXJ0aWFsX2hhcmQKKworIyBSZWFsIHRlc3RzCisKKy9hYmMvCisgICAgYWJjCisKKy9eYWJjfGRlZi8KKyAgICBhYmNkZWYKKyAgICBhYmNkZWZcPW5vdGJvbAorCisvLiooKGFiYykkfChkZWYpKS8KKyAgICBkZWZhYmMKKyAgICBkZWZhYmNcPW5vdGVvbAorCisvdGhlIHF1aWNrIGJyb3duIGZveC8KKyAgICB0aGUgcXVpY2sgYnJvd24gZm94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGUgUXVpY2sgQnJvd24gRm94CisKKy90aGUgcXVpY2sgYnJvd24gZm94L2kKKyAgICB0aGUgcXVpY2sgYnJvd24gZm94CisgICAgVGhlIFF1aWNrIEJyb3duIEZveAorCisvKCpMRilhYmMuZGVmLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjXG5kZWYKKworLygqTEYpYWJjJC8KKyAgICBhYmMKKyAgICBhYmNcbgorCisvKGFiYylcMi8KKworLyhhYmNcMSkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKKworL2EqKGIrKSh6KSh6KS8KKyAgICBhYWFhYmJiYnp6enoKKyAgICBhYWFhYmJiYnp6enpcPW92ZWN0b3I9MAorICAgIGFhYWFiYmJienp6elw9b3ZlY3Rvcj0xCisgICAgYWFhYWJiYmJ6enp6XD1vdmVjdG9yPTIKKworLygqQU5ZKWFiLmNkLworICAgIGFiLWNkCisgICAgYWI9Y2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiXG5jZAorCisvYWIuY2QvcworICAgIGFiLWNkCisgICAgYWI9Y2QKKyAgICBhYlxuY2QKKworL2EoYiljL25vX2F1dG9fY2FwdHVyZQorICAgIGFiYworCisvYSg/UDxuYW1lPmIpYy9ub19hdXRvX2NhcHR1cmUKKyAgICBhYmMKKworL2E/fGI/LworICAgIGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZGRkXD1ub3RlbXB0eQorCisvXHcrQS8KKyAgIENEQUFBQUIKKworL1x3K0EvdW5ncmVlZHkKKyAgIENEQUFBQUIKKyAgIAorL1xCaXNzXEIvSSxhZnRlcnRleHQKKyAgICBNaXNzaXNzaXBwaQorCisvYWJjL1wKKworIig/KD9DKSIKKworL2FiY2Qvc3Vic3RpdHV0ZV9leHRlbmRlZAorCisvXFtBXXsxMDAwMDAwfSoqL2V4cGFuZCxyZWdlcnJvcl9idWZmc2l6ZT0zMQorCisvXFtBXXsxMDAwMDAwfSoqL2V4cGFuZCxyZWdlcnJvcl9idWZmc2l6ZT0zMgorCisjIEVuZCBvZiB0ZXN0ZGF0YS90ZXN0aW5wdXQxOApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MTkgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQxOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTkwZjFhCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MTkKQEAgLTAsMCArMSwxOCBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBpcyBydW4gb25seSB3aXRoIHRoZSA4LWJpdCBsaWJyYXJ5LiBJdCB0ZXN0cyB0aGUgUE9TSVgKKyMgaW50ZXJmYWNlIHdpdGggVVRGL1VDUCBzdXBwb3J0LCB3aGljaCBpcyBzdXBwb3J0ZWQgb25seSB3aXRoIHRoZSA4LWJpdAorIyBsaWJyYXJ5LiBUaGlzIHRlc3Qgc2hvdWxkIG5vdCBiZSBydW4gd2l0aCBKSVQgKHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZQorIyBQT1NJWCBpbnRlcmZhY2UpLgorICAgIAorI3BhdHRlcm4gcG9zaXgKKworL2FceHsxMjM0fWIvdXRmCisgICAgYVx4ezEyMzR9YgorCisvXHcvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICArKytceHtjMn0KKworL1x3L3VjcAorICAgICsrK1x4e2MyfQorICAgIAorIyBFbmQgb2YgdGVzdGRhdGEvdGVzdGlucHV0MTkKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDIgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MWNjYTEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQyCkBAIC0wLDAgKzEsNDgwMyBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBpcyBub3QgUGVybC1jb21wYXRpYmxlLiBJdCBjaGVja3Mgb24gc3BlY2lhbCBmZWF0dXJlcworIyBvZiBQQ1JFMidzIEFQSSwgZXJyb3IgZGlhZ25vc3RpY3MsIGFuZCB0aGUgY29tcGlsZWQgY29kZSBvZiBzb21lIHBhdHRlcm5zLgorIyBJdCBhbHNvIGNoZWNrcyB0aGUgbm9uLVBlcmwgc3ludGF4IHRoYXQgUENSRTIgc3VwcG9ydHMgKFB5dGhvbiwgLk5FVCwgCisjIE9uaWd1cnVtYSkuIFRoZXJlIGFyZSBhbHNvIHNvbWUgdGVzdHMgd2hlcmUgUENSRTIgYW5kIFBlcmwgZGlmZmVyLCAKKyMgZWl0aGVyIGJlY2F1c2UgUENSRTIgY2FuJ3QgYmUgY29tcGF0aWJsZSwgb3IgdGhlcmUgaXMgYSBwb3NzaWJsZSBQZXJsIAorIyBidWcuCisKKyMgTk9URTogVGhpcyBpcyBhIG5vbi1VVEYgc2V0IG9mIHRlc3RzLiBXaGVuIFVURiBzdXBwb3J0IGlzIG5lZWRlZCwgdXNlCisjIHRlc3QgNS4gCisKKyNmb3JiaWRfdXRmCisjbmV3bGluZV9kZWZhdWx0IGxmIGFueSBhbnljcmxmCisKKyMgVGVzdCBiaW5hcnkgemVyb2VzIGluIHRoZSBwYXR0ZXJuCisKKyMgL2FcMEIvIHdoZXJlIDAgaXMgYSBiaW5hcnkgemVybworLzYxIDVjIDAwIDYyL0IsaGV4CisgICAgYVx4ezB9YgorCisjIC9hMGIvIHdoZXJlIDAgaXMgYSBiaW5hcnkgemVybworLzYxIDAwIDYyL0IsaGV4CisgICAgYVx4ezB9YgorCisjIC8oPyNCMEMpREUvIHdoZXJlIDAgaXMgYSBiaW5hcnkgemVybworLzI4IDNmIDIzIDQyIDAwIDQzIDI5IDQ0IDQ1L0IsaGV4CisgICAgREUKKworLyhhKWJ8L0kKKworL2FiYy9JCisgICAgYWJjCisgICAgZGVmYWJjCisgICAgYWJjXD1hbmNob3JlZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZGVmYWJjXD1hbmNob3JlZAorICAgIEFCQworCisvXmFiYy9JCisgICAgYWJjCisgICAgYWJjXD1hbmNob3JlZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZGVmYWJjCisgICAgZGVmYWJjXD1hbmNob3JlZAorCisvYStiYy9JCisKKy9hKmJjL0kKKworL2F7M31iYy9JCisKKy8oYWJjfGEreikvSQorCisvXmFiYyQvSQorICAgIGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZGVmXG5hYmMKKworL2FiXGlkZWYvCisKKy8oP1gpYWJcaWRlZi8KKworL3h7NSw0fS8KKworL3p7NjU1MzZ9LworCisvW2FiY2QvCisKKy9bXEJdL0IKKworL1tcUl0vQgorCisvW1xYXS9CCisKKy9bei1hXS8KKworL14qLworCisvKGFiYy8KKworLyg/IyBhYmMvCisKKy8oP3opYWJjLworCisvLipiL0kKKworLy4qP2IvSQorCisvY2F0fGRvZ3xlbGVwaGFudC9JCisgICAgdGhpcyBzZW50ZW5jZSBldmVudHVhbGx5IG1lbnRpb25zIGEgY2F0CisgICAgdGhpcyBzZW50ZW5jZXMgcmFtYmxlcyBvbiBhbmQgb24gZm9yIGEgd2hpbGUgYW5kIHRoZW4gcmVhY2hlcyBlbGVwaGFudAorCisvY2F0fGRvZ3xlbGVwaGFudC9JCisgICAgdGhpcyBzZW50ZW5jZSBldmVudHVhbGx5IG1lbnRpb25zIGEgY2F0CisgICAgdGhpcyBzZW50ZW5jZXMgcmFtYmxlcyBvbiBhbmQgb24gZm9yIGEgd2hpbGUgYW5kIHRoZW4gcmVhY2hlcyBlbGVwaGFudAorCisvY2F0fGRvZ3xlbGVwaGFudC9JaQorICAgIHRoaXMgc2VudGVuY2UgZXZlbnR1YWxseSBtZW50aW9ucyBhIENBVCBjYXQKKyAgICB0aGlzIHNlbnRlbmNlcyByYW1ibGVzIG9uIGFuZCBvbiBmb3IgYSB3aGlsZSB0byBlbGVwaGFudCBFbGVQaGFudAorCisvYXxbYmNkXS9JCisKKy8oYXxbXlxkWl0pL0kKKworLyhhfGIpKltcc10vSQorCisvKGFiXDIpLworCisvezQsNX1hYmMvCisKKy8oYSkoYikoYylcMi9JCisgICAgYWJjYgorICAgIGFiY2JcPW92ZWN0b3I9MAorICAgIGFiY2JcPW92ZWN0b3I9MQorICAgIGFiY2JcPW92ZWN0b3I9MgorICAgIGFiY2JcPW92ZWN0b3I9MworICAgIGFiY2JcPW92ZWN0b3I9NAorCisvKGEpYmN8KGEpKGIpXDIvSQorICAgIGFiYworICAgIGFiY1w9b3ZlY3Rvcj0wCisgICAgYWJjXD1vdmVjdG9yPTEKKyAgICBhYmNcPW92ZWN0b3I9MgorICAgIGFiYQorICAgIGFiYVw9b3ZlY3Rvcj0wCisgICAgYWJhXD1vdmVjdG9yPTEKKyAgICBhYmFcPW92ZWN0b3I9MgorICAgIGFiYVw9b3ZlY3Rvcj0zCisgICAgYWJhXD1vdmVjdG9yPTQKKworL2FiYyQvSSxkb2xsYXJfZW5kb25seQorICAgIGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjXG4KKyAgICBhYmNcbmRlZgorCisvKGEpKGIpKGMpKGQpKGUpXDYvCisKKy90aGUgcXVpY2sgYnJvd24gZm94L0kKKyAgICB0aGUgcXVpY2sgYnJvd24gZm94CisgICAgdGhpcyBpcyBhIGxpbmUgd2l0aCB0aGUgcXVpY2sgYnJvd24gZm94CisKKy90aGUgcXVpY2sgYnJvd24gZm94L0ksYW5jaG9yZWQKKyAgICB0aGUgcXVpY2sgYnJvd24gZm94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB0aGlzIGlzIGEgbGluZSB3aXRoIHRoZSBxdWljayBicm93biBmb3gKKworL2FiKD96KWNkLworCisvXmFiY3xkZWYvSQorICAgIGFiY2RlZgorICAgIGFiY2RlZlw9bm90Ym9sCisKKy8uKigoYWJjKSR8KGRlZikpL0kKKyAgICBkZWZhYmMKKyAgICBkZWZhYmNcPW5vdGVvbAorCisvKS8KKworL2FbXWIvCisKKy9bXmFlaW91IF17Myx9L0kKKyAgICBjby1wcm9jZXNzb3JzLCBhbmQgZm9yCisKKy88Lio+L0kKKyAgICBhYmM8ZGVmPmdoaTxrbG0+bm9wCisKKy88Lio/Pi9JCisgICAgYWJjPGRlZj5naGk8a2xtPm5vcAorCisvPC4qPi9JLHVuZ3JlZWR5CisgICAgYWJjPGRlZj5naGk8a2xtPm5vcAorCisvKD9VKTwuKj4vSQorICAgIGFiYzxkZWY+Z2hpPGtsbT5ub3AKKworLzwuKj8+L0ksdW5ncmVlZHkKKyAgICBhYmM8ZGVmPmdoaTxrbG0+bm9wCisKKy89ezMsfS9JLHVuZ3JlZWR5CisgICAgYWJjPT09PT09PT1kZWYKKworLyg/VSk9ezMsfT8vSQorICAgIGFiYz09PT09PT09ZGVmCisKKy8oPzwhYmFyfGNhdHRsZSlmb28vSQorICAgIGZvbworICAgIGNhdGZvbworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgdGhlIGJhcmZvbworICAgIGFuZCBjYXR0bGVmb28KKworLyg/PD1hKyliLworCisvKD88PWFhYXxiezAsM30pYi8KKworLyg/PCEoZm9vKWFcMSliYXIvCisKKy8oP2kpYWJjL0kKKworLyhhfCg/bSlhKS9JCisKKy8oP2kpXjEyMzQvSQorCisvKF5ifCg/aSleZCkvSQorCisvKD9zKS4qL0kKKworL1thYmNkXS9JCisKKy8oP2kpW2FiY2RdL0kKKworLyg/bSlbeHldfChifGMpL0kKKworLyheYXxeYikvSW0KKworLyg/aSkoXmF8XmIpL0ltCisKKy8oYSkoPygxKWF8YnxjKS8KKworLyg/KD89YSlhfGJ8YykvCisKKy8oPygxYSkvCisKKy8oPygxYSkpLworCisvKD8oP2kpKS8KKworLyg/KGFiYykpLworCisvKD8oPzxhYikpLworCisvKCg/cylibGFoKVxzK1wxL0kKKworLygoP2kpYmxhaClccytcMS9JCisKKy8oKD9pKWIpL0lCCisKKy8oYSpifCg/aTpjKig/LWkpZCkpL0kKKworL2EkL0kKKyAgICBhCisgICAgYVxuCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXD1ub3Rlb2wKKyAgICBhXG5cPW5vdGVvbAorCisvYSQvSW0KKyAgICBhCisgICAgYVxuCisgICAgYVxuXD1ub3Rlb2wKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcPW5vdGVvbAorCisvXEFhYmMvSW0KKworL15hYmMvSW0KKworL14oKGErKSg/VSkoW2FiXSspKD8tVSkoW2JjXSspKFx3KikpL0kKKyAgYWFhYWFiYmJiYmNjY2NjZGVmCisKKy8oPzw9Zm9vKVthYl0vSQorCisvKD88IWZvbykoYWxwaGF8b21lZ2EpL0kKKworLyg/IWFscGhhYmV0KVthYl0vSQorCisvKD88PWZvb1xuKV5iYXIvSW0KKyAgICBmb29cbmJhcmJhcgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgcmh1YmFyYgorICAgIGJhcmJlbGwKKyAgICBhYmNcbmJhcnRvbgorCisvXig/PD1mb29cbiliYXIvSW0KKyAgICBmb29cbmJhcmJhcgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgcmh1YmFyYgorICAgIGJhcmJlbGwKKyAgICBhYmNcbmJhcnRvbgorCisvKD8+XmFiYykvSW0KKyAgICBhYmMKKyAgICBkZWZcbmFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZGVmYWJjCisKKy8oPzw9YWIoYyspZCllZi8KKworLyg/PD1hYig/PD1jKylkKWVmLworCisvKD88PWFiKGN8ZGUpZilnLworCisvVGhlIG5leHQgdGhyZWUgYXJlIGluIHRlc3RpbnB1dDIgYmVjYXVzZSB0aGV5IGhhdmUgdmFyaWFibGUgbGVuZ3RoIGJyYW5jaGVzLworCisvKD88PWJ1bGxvY2t8ZG9ua2V5KS1jYXJ0L0kKKyAgICB0aGUgYnVsbG9jay1jYXJ0CisgICAgYSBkb25rZXktY2FydCByYWNlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBjYXJ0CisgICAgaG9yc2UtYW5kLWNhcnQKKworLyg/PD1hYig/aSl4fHl8eikvSQorCisvKD8+LiopKD88PShhYmNkKXwoeHl6KSkvSQorICAgIGFscGhhYmV0YWJjZAorICAgIGVuZGluZ3h5egorCisvKD88PWFiKD9pKXgoPy1pKXl8KD9pKXp8YilaWi9JCisgICAgYWJ4eVpaCisgICAgYWJYeVpaCisgICAgWlpaCisgICAgelpaCisgICAgYlpaCisgICAgQlpaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBaWgorICAgIGFiWFlaWgorICAgIHp6egorICAgIGJ6egorCisvKD88IShmb28pYSliYXIvSQorICAgIGJhcgorICAgIGZvb2JiYXIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGZvb2FiYXIKKworIyBUaGlzIG9uZSBpcyBoZXJlIGJlY2F1c2UgUGVybCBiZWhhdmVzIGRpZmZlcmVudGx5OyBzZWUgYWxzbyB0aGUgZm9sbG93aW5nLgorCisvXihhXDE/KXs0fSQvSQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYQorICAgIGFhYWFhYQorICAgIAorIyBQZXJsIGRvZXMgbm90IGZhaWwgdGhlc2UgdHdvIGZvciB0aGUgZmluYWwgc3ViamVjdHMuIE5laXRoZXIgZGlkIFBDUkUgdW50aWwKKyMgcmVsZWFzZSA4LjAxLiBUaGUgcHJvYmxlbSBpcyBpbiBiYWNrdHJhY2tpbmcgaW50byBhIHN1YnBhdHRlcm4gdGhhdCBjb250YWlucworIyBhIHJlY3Vyc2l2ZSByZWZlcmVuY2UgdG8gaXRzZWxmLiBQQ1JFIGhhcyBub3cgbWFkZSB0aGVzZSBpbnRvIGF0b21pYyBwYXR0ZXJucy4KKworL14oeGF8PT9cMWEpezJ9JC8KKyAgICB4YT14YWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHhhPXhhYWEKKworL14oeGF8PT9cMWEpKyQvCisgICAgeGE9eGFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4YT14YWFhCisKKyMgVGhlc2UgYXJlIHN5bnRheCB0ZXN0cyBmcm9tIFBlcmwgNS4wMDUKKworL2FbYi1hXS8KKworL2FbXWIvCisKKy9hWy8KKworLyphLworCisvKCopYi8KKworL2FiYykvCisKKy8oYWJjLworCisvYSoqLworCisvKSgvCisKKy9cMS8KKworL1wyLworCisvKGEpfFwyLworCisvYVtiLWFdL0lpCisKKy9hW11iL0lpCisKKy9hWy9JaQorCisvKmEvSWkKKworLygqKWIvSWkKKworL2FiYykvSWkKKworLyhhYmMvSWkKKworL2EqKi9JaQorCisvKSgvSWkKKworLzooPzovCisKKy8oPzwlKWIvCisKKy9hKD97KWIvCisKKy9hKD97e30pYi8KKworL2EoP3t9fSliLworCisvYSg/eyJ7In0pYi8KKworL2EoP3sieyJ9fSliLworCisvKD8oMT8pYXxiKS8KKworL1thWzp4eXo6LworCisvKD88PXgrKXkvCisKKy9hezM3LDE3fS8KKworL2FiYy9cCisKKy9hYmMvXGkKKworLyhhKWJjKGQpL0kKKyAgICBhYmNkCisgICAgYWJjZFw9Y29weT0yCisgICAgYWJjZFw9Y29weT01CisKKy8oLnsyMH0pL0kKKyAgICBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorICAgIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XD1jb3B5PTEKKyAgICBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elw9Z2V0PTEKKworLyguezE1fSkvSQorICAgIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CisgICAgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcPWNvcHk9MSxnZXQ9MQorCisvKC57MTZ9KS9JCisgICAgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKKyAgICBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elw9Y29weT0xLGdldD0xLGdldGFsbAorCisvXihhfChiYykpZGUoZikvSQorICAgIGFkZWZcPWdldD0xLGdldD0yLGdldD0zLGdldD00LGdldGFsbAorICAgIGJjZGVmXD1nZXQ9MSxnZXQ9MixnZXQ9MyxnZXQ9NCxnZXRhbGwKKyAgICBhZGVmZ2hpamtcPWNvcHk9MAorCisvXmFiY1wwMGRlZi9JCisgICAgYWJjXDAwZGVmXD1jb3B5PTAsZ2V0YWxsCisKKy93b3JkICgoPzpbYS16QS1aMC05XSsgKSgoPzpbYS16QS1aMC05XSsgKSgoPzpbYS16QS1aMC05XSsgKSgoPzpbYS16QS1aMC05XSsKKykoKD86W2EtekEtWjAtOV0rICkoKD86W2EtekEtWjAtOV0rICkoKD86W2EtekEtWjAtOV0rICkoKD86W2EtekEtWjAtOV0rCispPyk/KT8pPyk/KT8pPyk/KT9vdGhlcndvcmQvSQorCisvLipYL0lCCisKKy8uKlgvSUJzCisKKy8oLipYfF5CKS9JQgorCisvKC4qWHxeQikvSUJzCisKKy8oP3MpKC4qWHxeQikvSUIKKworLyg/czouKlh8XkIpL0lCCisKKy9cQmlzc1xCL0ksYWZ0ZXJ0ZXh0CisgICAgTWlzc2lzc2lwcGkKKworL2lzcy9JLGFmdGVydGV4dCxhbHRnbG9iYWwKKyAgICBNaXNzaXNzaXBwaQorCisvXEJpc3NcQi9JLGFmdGVydGV4dCxhbHRnbG9iYWwKKyAgICBNaXNzaXNzaXBwaQorCisvXEJpc3NcQi9JZyxhZnRlcnRleHQKKyAgICBNaXNzaXNzaXBwaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgTWlzc2lzc2lwcGlcPWFuY2hvcmVkCisKKy8oPzw9W01zXSlpc3MvSWcsYWZ0ZXJ0ZXh0CisgICAgTWlzc2lzc2lwcGkKKworLyg/PD1bTXNdKWlzcy9JLGFmdGVydGV4dCxhbHRnbG9iYWwKKyAgICBNaXNzaXNzaXBwaQorCisvXmlzcy9JZyxhZnRlcnRleHQKKyAgICBpc3Npc3NpcHBpCisKKy8uKmlzcy9JZyxhZnRlcnRleHQKKyAgICBhYmNpc3Ncbnh5emlzc3BxcgorCisvLmkuL0lnLGFmdGVydGV4dAorICAgIE1pc3Npc3NpcHBpCisgICAgTWlzc2lzc2lwcGlcPWFuY2hvcmVkCisgICAgTWlzc291cmkgcml2ZXIKKyAgICBNaXNzb3VyaSByaXZlclw9YW5jaG9yZWQKKworL14uaXMvSWcsYWZ0ZXJ0ZXh0CisgICAgTWlzc2lzc2lwcGkKKworL15hYlxuL0lnLGFmdGVydGV4dAorICAgIGFiXG5hYlxuY2QKKworL15hYlxuL0lnbSxhZnRlcnRleHQKKyAgICBhYlxuYWJcbmNkCisKKy9eL2dtLG5ld2xpbmU9YW55CisgICAgYVxyYlxuY1xyXG54eXpcPWFmdGVydGV4dAorCisvYWJjL0kKKworL2FiY3xiYWMvSQorCisvKGFiY3xiYWMpL0kKKworLyhhYmN8KGN8ZGMpKS9JCisKKy8oYWJjfChkfGRlKWMpL0kKKworL2EqL0kKKworL2ErL0kKKworLyhiYWF8YSspL0kKKworL2F7MCwzfS9JCisKKy9iYWF7Myx9L0kKKworLyIoW15cXCJdK3xcXC4pKiIvSQorCisvKGFiY3xhYltjZF0pL0kKKworLyhhfC4pL0kKKworL2F8YmF8XHcvSQorCisvYWJjKD89cHFyKS9JCisKKy8uLi4oPzw9YWJjKS9JCisKKy9hYmMoPyFwcXIpL0kKKworL2FiLi9JCisKKy9hYlt4eXpdL0kKKworL2FiYyovSQorCisvYWIuYyovSQorCisvYS5jKi9JCisKKy8uYyovSQorCisvYWMqL0kKKworLyhhLmMqfGIuYyopL0kKKworL2EuYyp8YWJhL0kKKworLy4rYS9JCisKKy8oPz1hYmNkYSlhLiovSQorCisvKD89YSlhLiovSQorCisvYShiKSovSQorCisvYVxkKi9JCisKKy9hYlxkKi9JCisKKy9hKFxkKSovSQorCisvYWJjZGV7MCwwfS9JCisKKy9hYlxkKy9JCisKKy9hKD8oMSliKSguKS9JCisKKy9hKD8oMSliYWd8YmlnKSguKS9JCisKKy9hKD8oMSliYWd8YmlnKSooLikvSQorCisvYSg/KDEpYmFnfGJpZykrKC4pL0kKKworL2EoPygxKWIuLnxiLi4pKC4pL0kKKworL2FiXGR7MH1lL0kKKworL2E/Yj8vSQorICAgIGEKKyAgICBiCisgICAgYWIKKyAgICBcCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcPW5vdGVtcHR5CisKKy98LS9JCisgICAgYWJjZAorICAgIC1hYmMKKyAgICBhYi1jXD1ub3RlbXB0eQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjXD1ub3RlbXB0eQorCisvXi4/YWJjZC9JCisKKy9cKCAgICAgICAgICAgICAjICggYXQgc3RhcnQKKyAgKD86ICAgICAgICAgICAjIE5vbi1jYXB0dXJpbmcgYnJhY2tldAorICAoPz5bXigpXSspICAgICMgRWl0aGVyIGEgc2VxdWVuY2Ugb2Ygbm9uLWJyYWNrZXRzIChubyBiYWNrdHJhY2tpbmcpCisgIHwgICAgICAgICAgICAgIyBPcgorICAoP1IpICAgICAgICAgICMgUmVjdXJzZSAtIGkuZS4gbmVzdGVkIGJyYWNrZXRlZCBzdHJpbmcKKyAgKSogICAgICAgICAgICAjIFplcm8gb3IgbW9yZSBjb250ZW50cworICBcKSAgICAgICAgICAgICMgQ2xvc2luZyApCisgIC9JeAorICAgIChhYmNkKQorICAgIChhYmNkKXh5egorICAgIHh5eihhYmNkKQorICAgIChhYih4eSljZClwcXIKKyAgICAoYWIoeHljZClwcXIKKyAgICAoKSBhYmMgKCkKKyAgICAxMihhYmNkZShmc2gpeHl6KGZvbyhiYXIpKWxtbm8pODkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2QKKyAgICBhYmNkKQorICAgIChhYmNkCisKKy9cKCAgKCAoPz5bXigpXSspIHwgKD9SKSApKiBcKSAvSWd4CisgICAgKGFiKHh5KWNkKXBxcgorICAgIDEoYWJjZCkoeCh5KXopcHFyCisKKy9cKCAgKD86ICg/PlteKCldKykgfCAoP1IpICkgXCkgL0l4CisgICAgKGFiY2QpCisgICAgKGFiKHh5KWNkKQorICAgIChhKGIoYylkKWUpCisgICAgKChhYikpCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAoKQorCisvXCggICg/OiAoPz5bXigpXSspIHwgKD9SKSApPyBcKSAvSXgKKyAgICAoKQorICAgIDEyKGFiY2RlKGZzaCl4eXooZm9vKGJhcikpbG1ubyk4OQorCisvXCggICggKD8+W14oKV0rKSB8ICg/UikgKSogXCkgL0l4CisgICAgKGFiKHh5KWNkKQorCisvXCggKCAoICg/PlteKCldKykgfCAoP1IpICkqICkgXCkgL0l4CisgICAgKGFiKHh5KWNkKQorCisvXCggKDEyMyk/ICggKCAoPz5bXigpXSspIHwgKD9SKSApKiApIFwpIC9JeAorICAgIChhYih4eSljZCkKKyAgICAoMTIzYWIoeHkpY2QpCisKKy9cKCAoICgxMjMpPyAoICg/PlteKCldKykgfCAoP1IpICkqICkgXCkgL0l4CisgICAgKGFiKHh5KWNkKQorICAgICgxMjNhYih4eSljZCkKKworL1woICgoKCgoKCgoKCggKCAoPz5bXigpXSspIHwgKD9SKSApKiApKSkpKSkpKSkpIFwpIC9JeAorICAgIChhYih4eSljZCkKKworL1woICggKCAoPz5bXigpPD5dKykgfCAoKD8+W14oKV0rKSkgfCAoP1IpICkqICkgXCkgL0l4CisgICAgKGFiY2QoeHl6PHA+cXJzKTEyMykKKworL1woICggKCAoPz5bXigpXSspIHwgKCg/UikpICkqICkgXCkgL0l4CisgICAgKGFiKGNkKWVmKQorICAgIChhYihjZChlZilnaClpaikKKworL15bWzphbG51bTpdXS9JQgorCisvXltbOl5hbG51bTpdXS9JQgorCisvXltbOmFscGhhOl1dL0lCCisKKy9eW1s6XmFscGhhOl1dL0lCCisKKy9bX1s6YWxwaGE6XV0vSQorCisvXltbOmFzY2lpOl1dL0lCCisKKy9eW1s6XmFzY2lpOl1dL0lCCisKKy9eW1s6Ymxhbms6XV0vSUIKKworL15bWzpeYmxhbms6XV0vSUIKKworL1tcblx4MGJceDBjXHgwZFs6Ymxhbms6XV0vSQorCisvXltbOmNudHJsOl1dL0lCCisKKy9eW1s6ZGlnaXQ6XV0vSUIKKworL15bWzpncmFwaDpdXS9JQgorCisvXltbOmxvd2VyOl1dL0lCCisKKy9eW1s6cHJpbnQ6XV0vSUIKKworL15bWzpwdW5jdDpdXS9JQgorCisvXltbOnNwYWNlOl1dL0lCCisKKy9eW1s6dXBwZXI6XV0vSUIKKworL15bWzp4ZGlnaXQ6XV0vSUIKKworL15bWzp3b3JkOl1dL0lCCisKKy9eW1s6XmNudHJsOl1dL0lCCisKKy9eWzEyWzpeZGlnaXQ6XV0vSUIKKworL15bWzpeYmxhbms6XV0vSUIKKworL1swMVs6YWxwaGE6XSVdL0lCCisKKy9bWy5jaC5dXS9JCisKKy9bWz1jaD1dXS9JCisKKy9bWzpyaHViYXJiOl1dL0kKKworL1tbOnVwcGVyOl1dL0lpCisgICAgQQorICAgIGEKKworL1tbOmxvd2VyOl1dL0lpCisgICAgQQorICAgIGEKKworLygoPy1pKVtbOmxvd2VyOl1dKVtbOmxvd2VyOl1dL0lpCisgICAgYWIKKyAgICBhQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWIKKyAgICBBQgorCisvW1wyMDAtXDExMF0vSQorCisvXig/KDApZnxiKW9vL0kKKworIyBUaGlzIG9uZSdzIGhlcmUgYmVjYXVzZSBvZiB0aGUgbGFyZ2Ugb3V0cHV0IHZlY3RvciBuZWVkZWQKKworLyhcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFx3KylccysoXDI3MCkvSQorICAgICAxIDIgMyA0IDUgNiA3IDggOSAxMCAxMSAxMiAxMyAxNCAxNSAxNiAxNyAxOCAxOSAyMCAyMSAyMiAyMyAyNCAyNSAyNiAyNyAyOCAyOSAzMCAzMSAzMiAzMyAzNCAzNSAzNiAzNyAzOCAzOSA0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NyA0OCA0OSA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyA1OCA1OSA2MCA2MSA2MiA2MyA2NCA2NSA2NiA2NyA2OCA2OSA3MCA3MSA3MiA3MyA3NCA3NSA3NiA3NyA3OCA3OSA4MCA4MSA4MiA4MyA4NCA4NSA4NiA4NyA4OCA4OSA5MCA5MSA5MiA5MyA5NCA5NSA5NiA5NyA5OCA5OSAxMDAgMTAxIDEwMiAxMDMgMTA0IDEwNSAxMDYgMTA3IDEwOCAxMDkgMTEwIDExMSAxMTIgMTEzIDExNCAxMTUgMTE2IDExNyAxMTggMTE5IDEyMCAxMjEgMTIyIDEyMyAxMjQgMTI1IDEyNiAxMjcgMTI4IDEyOSAxMzAgMTMxIDEzMiAxMzMgMTM0IDEzNSAxMzYgMTM3IDEzOCAxMzkgMTQwIDE0MSAxNDIgMTQzIDE0NCAxNDUgMTQ2IDE0NyAxNDggMTQ5IDE1MCAxNTEgMTUyIDE1MyAxNTQgMTU1IDE1NiAxNTcgMTU4IDE1OSAxNjAgMTYxIDE2MiAxNjMgMTY0IDE2NSAxNjYgMTY3IDE2OCAxNjkgMTcwIDE3MSAxNzIgMTczIDE3NCAxNzUgMTc2IDE3NyAxNzggMTc5IDE4MCAxODEgMTgyIDE4MyAxODQgMTg1IDE4NiAxODcgMTg4IDE4OSAxOTAgMTkxIDE5MiAxOTMgMTk0IDE5NSAxOTYgMTk3IDE5OCAxOTkgMjAwIDIwMSAyMDIgMjAzIDIwNCAyMDUgMjA2IDIwNyAyMDggMjA5IDIxMCAyMTEgMjEyIDIxMyAyMTQgMjE1IDIxNiAyMTcgMjE4IDIxOSAyMjAgMjIxIDIyMiAyMjMgMjI0IDIyNSAyMjYgMjI3IDIyOCAyMjkgMjMwIDIzMSAyMzIgMjMzIDIzNCAyMzUgMjM2IDIzNyAyMzggMjM5IDI0MCAyNDEgMjQyIDI0MyAyNDQgMjQ1IDI0NiAyNDcgMjQ4IDI0OSAyNTAgMjUxIDI1MiAyNTMgMjU0IDI1NSAyNTYgMjU3IDI1OCAyNTkgMjYwIDI2MSAyNjIgMjYzIDI2NCAyNjUgMjY2IDI2NyAyNjggMjY5IEFCQyBBQkNcPW92ZWN0b3I9MzAwCisKKyMgVGhpcyBvbmUncyBoZXJlIGJlY2F1c2UgUGVybCBkb2VzIHRoaXMgZGlmZmVyZW50bHkgYW5kIFBDUkUyIGNhbid0IGF0IHByZXNlbnQKKworLyhtYWluKE8pPykrL0kKKyAgICBtYWlubWFpbgorICAgIG1haW5PbWFpbgorCisjIFRoZXNlIGFyZSBhbGwgY2FzZXMgd2hlcmUgUGVybCBkb2VzIGl0IGRpZmZlcmVudGx5IChuZXN0ZWQgY2FwdHVyZXMpCisKKy9eKGEoYik/KSskL0kKKyAgICBhYmEKKworL14oYWEoYmIpPykrJC9JCisgICAgYWFiYmFhCisKKy9eKGFhfGFhKGJiKSkrJC9JCisgICAgYWFiYmFhCisKKy9eKGFhKGJiKT8/KSskL0kKKyAgICBhYWJiYWEKKworL14oPzphYShiYik/KSskL0kKKyAgICBhYWJiYWEKKworL14oYWEoYihiKSk/KSskL0kKKyAgICBhYWJiYWEKKworL14oPzphYShiKGIpKT8pKyQvSQorICAgIGFhYmJhYQorCisvXig/OmFhKGIoPzpiKSk/KSskL0kKKyAgICBhYWJiYWEKKworL14oPzphYShiYig/OmIpKT8pKyQvSQorICAgIGFhYmJiYWEKKworL14oPzphYShiKD86YmIpKT8pKyQvSQorICAgIGFhYmJiYWEKKworL14oPzphYSg/OmIoYikpPykrJC9JCisgICAgYWFiYmFhCisKKy9eKD86YWEoPzpiKGJiKSk/KSskL0kKKyAgICBhYWJiYmFhCisKKy9eKGFhKGIoYmIpKT8pKyQvSQorICAgIGFhYmJiYWEKKworL14oYWEoYmIoYmIpKT8pKyQvSQorICAgIGFhYmJiYmFhCisKKyMgLS0tLS0tLS0tLS0tLS0tLQorCisvIy9JQngKKworL2EjL0lCeAorCisvW1xzXS9JQgorCisvW1xTXS9JQgorCisvYSg/aSliL0lCCisgICAgYWIKKyAgICBhQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUIKKworLyhhKD9pKWIpL0lCCisgICAgYWIKKyAgICBhQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUIKKworLyAgICg/aSlhYmMvSUJ4CisKKy8jdGhpcyBpcyBhIGNvbW1lbnQKKyAgKD9pKWFiYy9JQngKKworLzEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MC9JQgorCisvXFExMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAvSUIKKworL1xRXEUvSUIKKyAgICBcCisKKy9cUVxFeC9JQgorCisvIFxRXEUvSUIKKworL2FcUVxFL0lCCisgIGFiYworICBiY2EKKyAgYmFjCisKKy9hXFFcRWIvSUIKKyAgYWJjCisKKy9cUVxFYWJjL0lCCisKKy94Kitcdy9JQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHh4eHgKKworL3g/Ky9JQgorCisveCsrL0lCCisKKy94ezEsM30rL0Isbm9fYXV0b19wb3NzZXNzCisKKy94ezEsM30rL0JpLG5vX2F1dG9fcG9zc2VzcworCisvW154XXsxLDN9Ky9CLG5vX2F1dG9fcG9zc2VzcworCisvW154XXsxLDN9Ky9CaSxub19hdXRvX3Bvc3Nlc3MKKworLyh4KSorL0lCCisKKy9eKFx3Kyt8XHMrKykqJC9JCisgICAgbm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBtZW4gdG8gY29tZSB0byB0aGUgYWlkIG9mIHRoZSBwYXJ0eQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgdGhpcyBpcyBub3QgYSBsaW5lIHdpdGggb25seSB3b3JkcyBhbmQgc3BhY2VzIQorCisvKFxkKyspKFx3KS9JCisgICAgMTIzNDVhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0NSsKKworL2ErK2IvSQorICAgIGFhYWIKKworLyhhKytiKS9JCisgICAgYWFhYgorCisvKGErKyliL0kKKyAgICBhYWFiCisKKy8oW14oKV0rK3xcKFteKCldKlwpKSsvSQorICAgICgoYWJjKGFkZSl1ZmgoKSgpeAorCisvXCgoW14oKV0rK3xcKFteKCldK1wpKStcKS9JCisgICAgKGFiYykKKyAgICAoYWJjKGRlZil4eXopCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAoKCgpYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKworLyhhYmMpezEsM30rL0lCCisKKy9hKz8rL0kKKworL2F7MiwzfT8rYi9JCisKKy8oP1UpYSs/Ky9JCisKKy9hezIsM30/K2IvSSx1bmdyZWVkeQorCisveCg/VSlhKytiL0lCCisgICAgeGFhYWFiCisKKy8oP1UpeGErK2IvSUIKKyAgICB4YWFhYWIKKworL14oKGErKSg/VSkoW2FiXSspKD8tVSkoW2JjXSspKFx3KikpL0lCCisKKy9eeCg/VSlhK2IvSUIKKworL154KD9VKShhKyliL0lCCisKKy9bLnguXS9JCisKKy9bPXg9XS9JCisKKy9bOng6XS9JCisKKy9cbC9JCisKKy9cTC9JCisKKy9cTntuYW1lfS9JCisKKy9cdS9JCisKKy9cVS9JCisKKy9hezEsM31iL3VuZ3JlZWR5CisgICAgYWIKKworL1svSQorCisvW2EtL0kKKworL1tbOnNwYWNlOl0vSQorCisvW1xzXS9JQgorCisvW1s6c3BhY2U6XV0vSUIKKworL1tbOnNwYWNlOl1hYmNkZV0vSUIKKworLzwgKD86ICg/KFIpIFxkKysgIHwgW148Pl0qKykgfCAoP1IpKSAqID4vSXgKKyAgICA8PgorICAgIDxhYmNkPgorICAgIDxhYmMgPDEyMz4gaGlqPgorICAgIDxhYmMgPGRlZj4gaGlqPgorICAgIDxhYmM8PmRlZj4KKyAgICA8YWJjPD4KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDxhYmMKKworLzhKXCRXRVw8XC5yWFwraXhcW2QxYlwhSFwjXD92VjB2cktcOlpIMVw9Mk1cPmlWXDtcP2FQaEZCXDxcKnZXXEBRV1xAc085XH1jZlpBXC1pXCd3XCVoS2Q2Z3QxVUpQXCwxNV9cI1FZXCRNXF5Nc3NfVVwvXF1cJkxLOVxbNXZRdWJcXndcW0tERFw8RWptaFVaXD9cLmFrcDJkRlw+cW1qXDsyXH1ZV0ZkWXhcLkFwXF1oakNQVFBcKG4yOGtcKzNcO29cJldYcXNcL2dPWGRyXCRcOnJcJ2RvMFw7YjRjXChmX0dyXD1cIlxcNFwpXFswMVQ3YWpRSnZMXCRXXH5tTF9zU1wvNGhcOnhcKlxbWk5cPUtMc1wmTDV6WFwvXC9cPml0XCxvXDphVVwoXDtaXD5wV1wmVDdvUFwnMktcXkVcOng5XCdjXFtcJXpcLVwsNjRKUTVBZUhfR1wjS2lqVUtnaFF3XF5cXHZlYTNhXD9ra2FfR1wkOFwjXGBcKmt5bnN4ekJMcnVcJ1xda19cWzdGclZ4XH1cXlw9XCRibHhcPnNcLU5cJWpcO0RcKmFaRG5zd1w6WUtaXCVRXC5LbmU5XCNoUFw/XCtiM1woU092TFwsXF5cO1wmdTVcQFw/NUM1QmhiXD1tXC12RWhfTDE1SmxcXVVcKTBSUDZce3FcJUxcXl96NUVcJ0R3NlhcYi9JQgorCisvXCRcPFwuWFwraXhcW2QxYlwhSFwjXD92VjB2cktcOlpIMVw9Mk1cPmlWXDtcP2FQaEZCXDxcKnZXXEBRV1xAc085XH1jZlpBXC1pXCd3XCVoS2Q2Z3QxVUpQXCwxNV9cI1FZXCRNXF5Nc3NfVVwvXF1cJkxLOVxbNXZRdWJcXndcW0tERFw8RWptaFVaXD9cLmFrcDJkRlw+cW1qXDsyXH1ZV0ZkWXhcLkFwXF1oakNQVFBcKG4yOGtcKzNcO29cJldYcXNcL2dPWGRyXCRcOnJcJ2RvMFw7YjRjXChmX0dyXD1cIlxcNFwpXFswMVQ3YWpRSnZMXCRXXH5tTF9zU1wvNGhcOnhcKlxbWk5cPUtMc1wmTDV6WFwvXC9cPml0XCxvXDphVVwoXDtaXD5wV1wmVDdvUFwnMktcXkVcOng5XCdjXFtcJXpcLVwsNjRKUTVBZUhfR1wjS2lqVUtnaFF3XF5cXHZlYTNhXD9ra2FfR1wkOFwjXGBcKmt5bnN4ekJMcnVcJ1xda19cWzdGclZ4XH1cXlw9XCRibHhcPnNcLU5cJWpcO0RcKmFaRG5zd1w6WUtaXCVRXC5LbmU5XCNoUFw/XCtiM1woU092TFwsXF5cO1wmdTVcQFw/NUM1QmhiXD1tXC12RWhfTDE1SmxcXVVcKTBSUDZce3FcJUxcXl96NUVcJ0R3NlhcYi9JQgorCisvKC4qKVxkK1wxL0kKKworLyguKilcZCsvSQorCisvKC4qKVxkK1wxL0lzCisKKy8oLiopXGQrL0lzCisKKy8oLiooeHl6KSlcZCtcMi9JCisKKy8oKC4qKSlcZCtcMS9JCisgICAgYWJjMTIzYmMKKworL2FbYl0vSQorCisvKD89YSkuKi9JCisKKy8oPz1hYmMpLnh5ei9JaQorCisvKD89YWJjKSg/aSkueHl6L0kKKworLyg/PWEpKD89YikvSQorCisvKD89LilhL0kKKworLygoPz1hYmNkYSlhKS9JCisKKy8oKD89YWJjZGEpYWIpL0kKKworLygpYS9JCisKKy8oPzooPz0uKXwoPzwheCkpYS9JCisKKy8oPygxKWFifGFjKSguKS9JCisKKy8oPygxKWFienxhY3opKC4pL0kKKworLyg/KDEpYWJ6KSguKS9JCisKKy8oPygxKWFieikoMSkyMy9JCisKKy8oYSkrL0kKKworLyhhKXsyLDN9L0kKKworLyhhKSovSQorCisvW2FdL0kKKworL1thYl0vSQorCisvW2FiXS9JCisKKy9bXmFdL0kKKworL1xkNDU2L0kKKworL1xkNDU2L0kKKworL2FeYi9JCisKKy9eYS9JbQorICBhYmNkZQorICB4eVxuYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgeHlhYmMKKworL2N8YWJjL0kKKworLyg/aSlbYWJdL0kKKworL1thYl0oP2kpY2QvSQorCisvYWJjKD9DKWRlZi9JCisgICAgYWJjZGVmCisgICAgMTIzNGFiY2RlZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjeHl6CisgICAgYWJjeHl6ZgorCisvYWJjKD9DKWRlKD9DMSlmL0kKKyAgICAxMjNhYmNkZWYKKworLyg/QzEpXGRhYmMoP0MyKWRlZi9JCisgICAgMTIzNGFiY2RlZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGVmCisKKy8oP0MxKVxkYWJjKD9DMilkZWYvSQorICAgIDEyMzRhYmNkZWYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlZgorCisvKD9DMjU1KWFiL0kKKworLyg/QzI1NilhYi9JCisKKy8oP0NhYil4eC9JCisKKy8oP0MxMnZyKXgvSQorCisvYWJjKD9DKWRlZi9JCisgICAgXHg4M1x4MFx4NjFiY2RlZgorCisvKGFiYykoP0MpZGUoP0MxKWYvSQorICAgIDEyM2FiY2RlZgorICAgIDEyM2FiY2RlZlw9Y2FsbG91dF9jYXB0dXJlCisgICAgMTIzYWJjZGVmQy1cPWNhbGxvdXRfbm9uZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzYWJjZGVmXD1jYWxsb3V0X2ZhaWw9MQorCisvKD9DMCkoYWJjKD9DMSkpKi9JCisgICAgYWJjYWJjYWJjCisgICAgYWJjYWJjXD1jYWxsb3V0X2ZhaWw9MTozCisgICAgYWJjYWJjYWJjXD1jYWxsb3V0X2ZhaWw9MTozCisKKy8oXGR7M30oP0MpKSovSQorICAgIDEyM1w9Y2FsbG91dF9jYXB0dXJlCisgICAgMTIzNDU2XD1jYWxsb3V0X2NhcHR1cmUKKyAgICAxMjM0NTY3ODlcPWNhbGxvdXRfY2FwdHVyZQorCisvKCh4eXopKD9DKXB8KD9DMSl4eXphYmMpL0kKKyAgICB4eXphYmNcPWNhbGxvdXRfY2FwdHVyZQorCisvKFgpKCh4eXopKD9DKXB8KD9DMSl4eXphYmMpL0kKKyAgICBYeHl6YWJjXD1jYWxsb3V0X2NhcHR1cmUKKworLyg/PShhYmMpKSg/QylhYmNkZWYvSQorICAgIGFiY2RlZlw9Y2FsbG91dF9jYXB0dXJlCisKKy8oPyEoYWJjKSg/QzEpZCkoP0MyKWFiY3h5ei9JCisgICAgYWJjeHl6XD1jYWxsb3V0X2NhcHR1cmUKKworLyg/PD0oYWJjKSg/QykpeHl6L0kKKyAgIGFiY3h5elw9Y2FsbG91dF9jYXB0dXJlCisKKy9hKGIrKShjKikoP0MxKS9JCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmJiYmJjY2NcPWNhbGxvdXRfZGF0YT0xCisKKy9hKGIrPykoYyo/KSg/QzEpL0kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYmJiYmNjY1w9Y2FsbG91dF9kYXRhPTEKKworLyg/QylhYmMvSQorCisvKD9DKV5hYmMvSQorCisvKD9DKWF8Yi9JCisKKy94KGFifChiY3woZGV8KD9SKSkpKS9JCisgICAgeGFiCisgICAgeGJjCisgICAgeGRlCisgICAgeHhhYgorICAgIHh4eGFiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eWFiCisKKy9eKFteKCldfFwoKD8xKSpcKSkqJC9JCisgICAgYWJjCisgICAgYShiKWMKKyAgICBhKGIoYykpZAorXD0gRXhwZWN0IG5vIG1hdGNoKQorICAgIGEoYihjKWQKKworL14+YWJjPihbXigpXXxcKCg/MSkqXCkpKjx4eXo8JC9JCisgICA+YWJjPjEyMzx4eXo8CisgICA+YWJjPjEoMikzPHh5ejwKKyAgID5hYmM+KDEoMikzKTx4eXo8CisKKy8oYSg/MSliKS9JQgorCisvKGEoPzEpK2IpL0lCCisKKy9eKFxkK3xcKCg/MSkoWysqLV0pKD8xKVwpfC0oPzEpKSQvSQorICAgIDEyCisgICAgKCgoMisyKSotMyktNykKKyAgICAtMTIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICgoMisyKSotMyktNykKKworL14oeCh5fCg/MSl7Mn0peikvSQorICAgIHh5egorICAgIHh4eXp4eXp6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eHl6egorICAgIHh4eXp4eXp4eXp6CisKKy8oKDwgKD86ICg/KFIpIFxkKysgIHwgW148Pl0qKykgfCAoPzIpKSAqID4pKS9JeAorICAgIDw+CisgICAgPGFiY2Q+CisgICAgPGFiYyA8MTIzPiBoaWo+CisgICAgPGFiYyA8ZGVmPiBoaWo+CisgICAgPGFiYzw+ZGVmPgorICAgIDxhYmM8PgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgPGFiYworCisvKD8xKS9JCisKKy8oKD8yKShhYmMpL0kKKworL14oYWJjKWRlZig/MSkvSQorICAgIGFiY2RlZmFiYworCisvXihhfGJ8Yyk9KD8xKSsvSQorICAgIGE9YQorICAgIGE9YgorICAgIGE9YmMKKworL14oYXxifGMpPSgoPzEpKSsvSQorICAgIGE9YQorICAgIGE9YgorICAgIGE9YmMKKworL2EoP1A8bmFtZTE+YnxjKWQoP1A8bG9uZ2VybmFtZTI+ZSkvSUIKKyAgICBhYmRlCisgICAgYWNkZQorCisvKD86YSg/UDxjPmMoP1A8ZD5kKSkpKD9QPGE+YSkvSUIKKworLyg/UDxhPmEpLi4uKD9QPWEpYmJiKD9QPmEpZC9JQgorCisvXlxXKig/Oig/UDxvbmU+KD9QPHR3bz4uKVxXKig/UD5vbmUpXFcqKD9QPXR3byl8KXwoP1A8dGhyZWU+KD9QPGZvdXI+LilcVyooP1A+dGhyZWUpXFcqKD9QPWZvdXIpfFxXKi5cVyopKVxXKiQvSWkKKyAgICAxMjIxCisgICAgU2F0YW4sIG9zY2lsbGF0ZSBteSBtZXRhbGxpYyBzb25hdGFzIQorICAgIEEgbWFuLCBhIHBsYW4sIGEgY2FuYWw6IFBhbmFtYSEKKyAgICBBYmxlIHdhcyBJIGVyZSBJIHNhdyBFbGJhLgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgVGhlIHF1aWNrIGJyb3duIGZveAorCisvKCg/KFIpYXxiKSlcMSg/MSk/L0kKKyAgYmIKKyAgYmJhYQorCisvKC4qKWEvSXMKKworLyguKilhXDEvSXMKKworLyguKilhKGIpXDIvSXMKKworLygoLiopYXwoLiopYil6L0lzCisKKy8oKC4qKWF8KC4qKWIpelwxL0lzCisKKy8oKC4qKWF8KC4qKWIpelwyL0lzCisKKy8oKC4qKWF8KC4qKWIpelwzL0lzCisKKy8oKC4qKWF8XiguKiliKXpcMy9JcworCisvKC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKWEvSXMKKworLyguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKilhXDMxL0lzCisKKy8oLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKilhXDMyL0lzCisKKy8oYSkoYmMpL0lCLG5vX2F1dG9fY2FwdHVyZQorICBhYmMKKworLyg/UDxvbmU+YSkoYmMpL0lCLG5vX2F1dG9fY2FwdHVyZQorICBhYmMKKworLyhhKSg/UDxuYW1lZD5iYykvSUIsbm9fYXV0b19jYXB0dXJlCisKKy8oYWFhKD9DMSliYmJ8YWIpL0kKKyAgIGFhYWJiYgorICAgYWFhYmJiXD1jYWxsb3V0X2RhdGE9MAorICAgYWFhYmJiXD1jYWxsb3V0X2RhdGE9MQorXD0gRXhwZWN0IG5vIG1hdGNoICAgIAorICAgYWFhYmJiXD1jYWxsb3V0X2RhdGE9LTEKKworL2FiKD9QPG9uZT5jZCllZig/UDx0d28+Z2gpL0kKKyAgICBhYmNkZWZnaAorICAgIGFiY2RlZmdoXD1jb3B5PTEsZ2V0PXR3bworICAgIGFiY2RlZmdoXD1jb3B5PW9uZSxjb3B5PXR3bworICAgIGFiY2RlZmdoXD1jb3B5PXRocmVlCisKKy8oP1A8VGVzPikoP1A8VGVzdD4pL0lCCisKKy8oP1A8VGVzdD4pKD9QPFRlcz4pL0lCCisKKy8oP1A8Wj56eikoP1A8QT5hYSkvSQorICAgIHp6YWFcPWNvcHk9WgorICAgIHp6YWFcPWNvcHk9QQorCisvKD9QPHg+ZWtzKSg/UDx4PmVjY3MpL0kKKworLyg/UDxhYmM+YWJjKD9QPGRlZj5kZWYpKD9QPGFiYz54eXopKS9JCisKKyJcWygoP1A8ZWxlbT5cZCspKCwoP1A+ZWxlbSkpKilcXSJJCisgICAgWzEwLDIwLDMwLDUsNSw0LDQsMiw0MywyMyw0MjM0XQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgW10KKworIlxbKCg/UDxlbGVtPlxkKykoLCg/UD5lbGVtKSkqKT9cXSJJCisgICAgWzEwLDIwLDMwLDUsNSw0LDQsMiw0MywyMyw0MjM0XQorICAgIFtdCisKKy8oYShiKD8yKWMpKT8vSUIKKworLyhhKGIoPzIpYykpKi9JQgorCisvKGEoYig/MiljKSl7MCwyfS9JQgorCisvW2FiXXsxfSsvQgorCisvKCkoPzEpezF9L0IKKworLygpKD8xKS9CCisKKy8oKHdcL3wtfHdpdGgpKihmcmVlfGltbWVkaWF0ZSkqLio/c2hpcHBpbmdccypbIS4tXSopL0lpCisgICAgIEJhYnkgQmpvcm4gQWN0aXZlIENhcnJpZXIgLSBXaXRoIGZyZWUgU0hJUFBJTkchIQorCisvKCh3XC98LXx3aXRoKSooZnJlZXxpbW1lZGlhdGUpKi4qP3NoaXBwaW5nXHMqWyEuLV0qKS9JaQorICAgICBCYWJ5IEJqb3JuIEFjdGl2ZSBDYXJyaWVyIC0gV2l0aCBmcmVlIFNISVBQSU5HISEKKworL2EqLipiL0lCCisKKy8oYXxiKSouP2MvSUIKKworL2FiYyg/QzI1NSlkZSg/QylmL0lCCisKKy9hYmNkZS9JQixhdXRvX2NhbGxvdXQKKyAgYWJjZGUKK1w9IEV4cGVjdCBubyBtYXRjaAorICBhYmNkZmUKKworL2EqYi9JQixhdXRvX2NhbGxvdXQKKyAgYWIKKyAgYWFhYWIKKyAgYWFhYWNiCisKKy9hKmIvSUIsYXV0b19jYWxsb3V0CisgIGFiCisgIGFhYWFiCisgIGFhYWFjYgorCisvYStiL0lCLGF1dG9fY2FsbG91dAorICBhYgorICBhYWFhYgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICBhYWFhY2IKKworLyhhYmN8ZGVmKXgvSUIsYXV0b19jYWxsb3V0CisgIGFiY3gKKyAgZGVmeAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICBhYmNkZWZ6eAorCisvKGFiY3xkZWYpeC9JQixhdXRvX2NhbGxvdXQKKyAgYWJjeAorICBkZWZ4CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgIGFiY2RlZnp4CisKKy8oYWJ8Y2QpezMsNH0vSSxhdXRvX2NhbGxvdXQKKyAgYWJhYmFiCisgIGFiY2RhYmNkCisgIGFiY2RjZGNkY2RjZAorCisvKFthYl17LDR9Y3x4eSkvSUIsYXV0b19jYWxsb3V0CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgTm90ZTogdGhhdCB7IGRvZXMgTk9UIGludHJvZHVjZSBhIHF1YW50aWZpZXIKKworLyhbYWJdeyw0fWN8eHkpL0lCLGF1dG9fY2FsbG91dAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIE5vdGU6IHRoYXQgeyBkb2VzIE5PVCBpbnRyb2R1Y2UgYSBxdWFudGlmaWVyCisKKy8oW2FiXXsxLDR9Y3x4eSl7NCw1fT8xMjMvSUIsYXV0b19jYWxsb3V0CisgICAgYWFjYWFjYWFjYWFjYWFjMTIzCisKKy9cYi4qL0kKKyAgYWIgY2RcPW9mZnNldD0xCisKKy9cYi4qL0lzCisgIGFiIGNkXD1zdGFydG9mZnNldD0xCisKKy8oPyEuYmNkKS4qL0kKKyAgWGJjZDEyMzQ1CisKKy9hYmNkZS9JCisgICAgYWJcPXBzCisgICAgYWJjXD1wcworICAgIGFiY2RcPXBzCisgICAgYWJjZGVcPXBzCisgICAgdGhlIHF1aWNrIGJyb3duIGFiY1w9cHMKK1w9IEV4cGVjdCBubyBtYXRjaFw9cHMKKyAgICB0aGUgcXVpY2sgYnJvd24gYWJ4eXogZm94XD1wcworCisiXigwP1sxLTldfFsxMl1bMC05XXwzWzAxXSkvKDA/WzEtOV18MVswMTJdKS8oMjApP1xkXGQkIkkKKyAgICAxMy8wNS8wNFw9cHMKKyAgICAxMy81LzIwMDRcPXBzCisgICAgMDIvMDUvMDlcPXBzCisgICAgMVw9cHMKKyAgICAxLzJcPXBzCisgICAgMS8yLzBcPXBzCisgICAgMS8yLzA0XD1wcworICAgIDBcPXBzCisgICAgMDIvXD1wcworICAgIDAyLzBcPXBzCisgICAgMDIvMVw9cHMKK1w9IEV4cGVjdCBubyBtYXRjaFw9cHMKKyAgICBcPXBzCisgICAgMTIzXD1wcworICAgIDMzLzQvMDRcPXBzCisgICAgMy8xMy8wNFw9cHMKKyAgICAwLzEvMjAwM1w9cHMKKyAgICAwL1w9cHMKKyAgICAwMi8wL1w9cHMKKyAgICAwMi8xM1w9cHMKKworLzB7MCwyfUFCQy9JCisKKy9cZHszLH1BQkMvSQorCisvXGQqQUJDL0kKKworL1thYmNdK0RFL0kKKworL1thYmNdPzEyMy9JCisgICAgMTIzXD1wcworICAgIGFcPXBzCisgICAgYlw9cHMKKyAgICBjXD1wcworICAgIGMxMlw9cHMKKyAgICBjMTIzXD1wcworCisvXig/OlxkKXszLDV9WC9JCisgICAgMVw9cHMKKyAgICAxMjNcPXBzCisgICAgMTIzWAorICAgIDEyMzRcPXBzCisgICAgMTIzNFgKKyAgICAxMjM0NVw9cHMKKyAgICAxMjM0NVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDFYCisgICAgMTIzNDU2XD1wcworCisiPChcdyspLz8+KC4pKjwvKFwxKT4iSWdtcworICAgIDwhRE9DVFlQRSBzZWl0ZSBTWVNURU0gImh0dHA6Ly93d3cubGNvLmxpbmVhcy5kZS94bWxDbXMuZHRkIj5cbjxzZWl0ZT5cbjxkb2t1bWVudGVuaW5mb3JtYXRpb24+XG48c2VpdGVudGl0ZWw+UGFydG5lciBkZXIgTENPPC9zZWl0ZW50aXRlbD5cbjxzcHJhY2hlPmRlPC9zcHJhY2hlPlxuPHNlaXRlbmJlc2NocmVpYnVuZz5QYXJ0bmVyIGRlciBMSU5FQVMgQ29uc3VsdGluZ1xuR21iSDwvc2VpdGVuYmVzY2hyZWlidW5nPlxuPHNjaGx1ZXNzZWx3b3J0ZT5MSU5FQVMgQ29uc3VsdGluZyBHbWJIIEhhbWJ1cmdcblBhcnRuZXJmaXJtZW48L3NjaGx1ZXNzZWx3b3J0ZT5cbjxyZXZpc2l0PjMwIGRheXM8L3JldmlzaXQ+XG48cm9ib3RzPmluZGV4LGZvbGxvdzwvcm9ib3RzPlxuPG1lbnVlaW5mb3JtYXRpb24+XG48YWt0aXY+amE8L2FrdGl2PlxuPG1lbnVlcG9zaXRpb24+MzwvbWVudWVwb3NpdGlvbj5cbjxtZW51ZXRleHQ+UGFydG5lcjwvbWVudWV0ZXh0PlxuPC9tZW51ZWluZm9ybWF0aW9uPlxuPGxhc3RlZGl0ZWQ+XG48YXV0b3I+TENPPC9hdXRvcj5cbjxmaXJtYT5MSU5FQVMgQ29uc3VsdGluZzwvZmlybWE+XG48ZGF0dW0+MTUuMTAuMjAwMzwvZGF0dW0+XG48L2xhc3RlZGl0ZWQ+XG48L2Rva3VtZW50ZW5pbmZvcm1hdGlvbj5cbjxpbmhhbHQ+XG5cbjxhYnNhdHp1ZWJlcnNjaHJpZnQ+RGllIFBhcnRuZXJmaXJtZW4gZGVyIExJTkVBUyBDb25zdWx0aW5nXG5HbWJIPC9hYnNhdHp1ZWJlcnNjaHJpZnQ+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5jYS5jb20vIiB6aWVsZmVuc3Rlcj0iX2JsYW5rIj5cbjxiaWxkIG5hbWU9ImxvZ29fY2EuZ2lmIiByYWhtZW49Im5vIi8+PC9saW5rPiA8bGlua1xuemllbD0iaHR0cDovL3d3dy5leS5jb20vIiB6aWVsZmVuc3Rlcj0iX2JsYW5rIj48YmlsZFxubmFtZT0ibG9nb19ldXkuZ2lmIiByYWhtZW49Im5vIi8+PC9saW5rPlxuPC9hYnNhdHo+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5jaXNjby5kZS8iIHppZWxmZW5zdGVyPSJfYmxhbmsiPlxuPGJpbGQgbmFtZT0ibG9nb19jaXNjby5naWYiIHJhaG1lbj0iamEiLz48L2xpbms+PC9hYnNhdHo+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5hdGVsaW9uLmRlLyJcbnppZWxmZW5zdGVyPSJfYmxhbmsiPjxiaWxkXG5uYW1lPSJsb2dvX2F0ZWxpb24uZ2lmIiByYWhtZW49Im5vIi8+PC9saW5rPlxuPC9hYnNhdHo+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5saW5lLWluZm9ybWF0aW9uLmRlLyJcbnppZWxmZW5zdGVyPSJfYmxhbmsiPlxuPGJpbGQgbmFtZT0ibG9nb19saW5lX2luZm9ybWF0aW9uLmdpZiIgcmFobWVuPSJubyIvPjwvbGluaz5cbjwvYWJzYXR6PlxuXG48YWJzYXR6PjxiaWxkIG5hbWU9ImxvZ29fYXcuZ2lmIiByYWhtZW49Im5vIi8+PC9hYnNhdHo+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5pbmNvZ25pcy5kZS8iXG56aWVsZmVuc3Rlcj0iX2JsYW5rIj48YmlsZFxubmFtZT0ibG9nb19pbmNvZ25pcy5naWYiIHJhaG1lbj0ibm8iLz48L2xpbms+PC9hYnNhdHo+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5hZGRjcmFmdC5jb20vIlxuemllbGZlbnN0ZXI9Il9ibGFuayI+PGJpbGRcbm5hbWU9ImxvZ29fYWRkY3JhZnQuZ2lmIiByYWhtZW49Im5vIi8+PC9saW5rPjwvYWJzYXR6PlxuXG48YWJzYXR6PjxsaW5rIHppZWw9Imh0dHA6Ly93d3cuY29tZW5kby5jb20vIlxuemllbGZlbnN0ZXI9Il9ibGFuayI+PGJpbGRcbm5hbWU9ImxvZ29fY29tZW5kby5naWYiIHJhaG1lbj0ibm8iLz48L2xpbms+PC9hYnNhdHo+XG5cbjwvaW5oYWx0PlxuPC9zZWl0ZT5cPWppdHN0YWNrPTEwMjQKKworL2xpbmVcbmJyZWFrL0kKKyAgICB0aGlzIGlzIGEgbGluZVxuYnJlYWsKKyAgICBsaW5lIG9uZVxudGhpcyBpcyBhIGxpbmVcbmJyZWFrIGluIHRoZSBzZWNvbmQgbGluZQorCisvbGluZVxuYnJlYWsvSSxmaXJzdGxpbmUKKyAgICB0aGlzIGlzIGEgbGluZVxuYnJlYWsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGxpbmUgb25lXG50aGlzIGlzIGEgbGluZVxuYnJlYWsgaW4gdGhlIHNlY29uZCBsaW5lCisKKy9saW5lXG5icmVhay9JbSxmaXJzdGxpbmUKKyAgICB0aGlzIGlzIGEgbGluZVxuYnJlYWsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGxpbmUgb25lXG50aGlzIGlzIGEgbGluZVxuYnJlYWsgaW4gdGhlIHNlY29uZCBsaW5lCisKKy8oP2kpKD8taSlBYkNkL0kKKyAgICBBYkNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkCisKKy9hezExMTExMTExMTExMTExMTExMTExfS9JCisKKy8oKXs2NDI5NDk2NzI5NX0vSQorCisvKCl7Miw0Mjk0OTY3Mjk1fS9JCisKKyIoP2k6YSkoP2k6YikoP2k6YykoP2k6ZCkoP2k6ZSkoP2k6ZikoP2k6ZykoP2k6aCkoP2k6aSkoP2k6aikoaykoP2k6bClBXDFCIkkKKyAgICBhYmNkZWZnaGlqa2xBa0IKKworIig/UDxuMD5hKSg/UDxuMT5iKSg/UDxuMj5jKSg/UDxuMz5kKSg/UDxuND5lKSg/UDxuNT5mKSg/UDxuNj5nKSg/UDxuNz5oKSg/UDxuOD5pKSg/UDxuOT5qKSg/UDxuMTA+aykoP1A8bjExPmwpQVwxMUIiSQorICAgIGFiY2RlZmdoaWprbEFrQgorCisiKGEpKGIpKGMpKGQpKGUpKGYpKGcpKGgpKGkpKGopKGspKGwpQVwxMUIiSQorICAgIGFiY2RlZmdoaWprbEFrQgorCisiKD9QPG5hbWUwPmEpKD9QPG5hbWUxPmEpKD9QPG5hbWUyPmEpKD9QPG5hbWUzPmEpKD9QPG5hbWU0PmEpKD9QPG5hbWU1PmEpKD9QPG5hbWU2PmEpKD9QPG5hbWU3PmEpKD9QPG5hbWU4PmEpKD9QPG5hbWU5PmEpKD9QPG5hbWUxMD5hKSg/UDxuYW1lMTE+YSkoP1A8bmFtZTEyPmEpKD9QPG5hbWUxMz5hKSg/UDxuYW1lMTQ+YSkoP1A8bmFtZTE1PmEpKD9QPG5hbWUxNj5hKSg/UDxuYW1lMTc+YSkoP1A8bmFtZTE4PmEpKD9QPG5hbWUxOT5hKSg/UDxuYW1lMjA+YSkoP1A8bmFtZTIxPmEpKD9QPG5hbWUyMj5hKSg/UDxuYW1lMjM+YSkoP1A8bmFtZTI0PmEpKD9QPG5hbWUyNT5hKSg/UDxuYW1lMjY+YSkoP1A8bmFtZTI3PmEpKD9QPG5hbWUyOD5hKSg/UDxuYW1lMjk+YSkoP1A8bmFtZTMwPmEpKD9QPG5hbWUzMT5hKSg/UDxuYW1lMzI+YSkoP1A8bmFtZTMzPmEpKD9QPG5hbWUzND5hKSg/UDxuYW1lMzU+YSkoP1A8bmFtZTM2PmEpKD9QPG5hbWUzNz5hKSg/UDxuYW1lMzg+YSkoP1A8bmFtZTM5PmEpKD9QPG5hbWU0MD5hKSg/UDxuYW1lNDE+YSkoP1A8bmFtZTQyPmEpKD9QPG5hbWU0Mz5hKSg/UDxuYW1lNDQ+YSkoP1A8bmFtZTQ1PmEpKD9QPG5hbWU0Nj5hKSg/UDxuYW1lNDc+YSkoP1A8bmFtZTQ4PmEpKD9QPG5hbWU0OT5hKSg/UDxuYW1lNTA+YSkoP1A8bmFtZTUxPmEpKD9QPG5hbWU1Mj5hKSg/UDxuYW1lNTM+YSkoP1A8bmFtZTU0PmEpKD9QPG5hbWU1NT5hKSg/UDxuYW1lNTY+YSkoP1A8bmFtZTU3PmEpKD9QPG5hbWU1OD5hKSg/UDxuYW1lNTk+YSkoP1A8bmFtZTYwPmEpKD9QPG5hbWU2MT5hKSg/UDxuYW1lNjI+YSkoP1A8bmFtZTYzPmEpKD9QPG5hbWU2ND5hKSg/UDxuYW1lNjU+YSkoP1A8bmFtZTY2PmEpKD9QPG5hbWU2Nz5hKSg/UDxuYW1lNjg+YSkoP1A8bmFtZTY5PmEpKD9QPG5hbWU3MD5hKSg/UDxuYW1lNzE+YSkoP1A8bmFtZTcyPmEpKD9QPG5hbWU3Mz5hKSg/UDxuYW1lNzQ+YSkoP1A8bmFtZTc1PmEpKD9QPG5hbWU3Nj5hKSg/UDxuYW1lNzc+YSkoP1A8bmFtZTc4PmEpKD9QPG5hbWU3OT5hKSg/UDxuYW1lODA+YSkoP1A8bmFtZTgxPmEpKD9QPG5hbWU4Mj5hKSg/UDxuYW1lODM+YSkoP1A8bmFtZTg0PmEpKD9QPG5hbWU4NT5hKSg/UDxuYW1lODY+YSkoP1A8bmFtZTg3PmEpKD9QPG5hbWU4OD5hKSg/UDxuYW1lODk+YSkoP1A8bmFtZTkwPmEpKD9QPG5hbWU5MT5hKSg/UDxuYW1lOTI+YSkoP1A8bmFtZTkzPmEpKD9QPG5hbWU5ND5hKSg/UDxuYW1lOTU+YSkoP1A8bmFtZTk2PmEpKD9QPG5hbWU5Nz5hKSg/UDxuYW1lOTg+YSkoP1A8bmFtZTk5PmEpKD9QPG5hbWUxMDA+YSkiSQorICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisKKyIoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkoYSkiSQorICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisKKy9bXigpXSooPzpcKCg/UilcKVteKCldKikqL0kKKyAgICAodGhpcyhhbmQpdGhhdAorICAgICh0aGlzKGFuZCl0aGF0KQorICAgICh0aGlzKGFuZCl0aGF0KXN0dWZmCisKKy9bXigpXSooPzpcKCg/Pig/UikpXClbXigpXSopKi9JCisgICAgKHRoaXMoYW5kKXRoYXQKKyAgICAodGhpcyhhbmQpdGhhdCkKKworL1teKCldKig/OlwoKD9SKVwpKSpbXigpXSovSQorICAgICh0aGlzKGFuZCl0aGF0CisgICAgKHRoaXMoYW5kKXRoYXQpCisKKy8oPzpcKCg/UilcKSkqW14oKV0qL0kKKyAgICAodGhpcyhhbmQpdGhhdAorICAgICh0aGlzKGFuZCl0aGF0KQorICAgICgodGhpcykpCisKKy8oPzpcKCg/UilcKSl8W14oKV0qL0kKKyAgICAodGhpcyhhbmQpdGhhdAorICAgICh0aGlzKGFuZCl0aGF0KQorICAgICh0aGlzKQorICAgICgodGhpcykpCisKKy9ceHswMDAwZmZ9L0kKKworL14oKD9QPEE+YTEpfCg/UDxBPmEyKWIpL0kKKworL14oKD9QPEE+YTEpfCg/UDxBPmEyKWIpL0ksZHVwbmFtZXMKKyAgICBhMWJcPWNvcHk9QQorICAgIGEyYlw9Y29weT1BCisgICAgYTFiXD1jb3B5PVosY29weT1BCisgICAgCisvKD98KD88YT4pKD88Yj4pKD88YT4pfCg/PGE+KSg/PGI+KSg/PGE+KSkvSSxkdXBuYW1lcworCisvXig/UDxBPmEpKD9QPEE+YikvSSxkdXBuYW1lcworICAgIGFiXD1jb3B5PUEKKworL14oP1A8QT5hKSg/UDxBPmIpfGNkL0ksZHVwbmFtZXMKKyAgICBhYlw9Y29weT1BCisgICAgY2RcPWNvcHk9QQorCisvXig/UDxBPmEpKD9QPEE+Yil8Y2QoP1A8QT5lZikoP1A8QT5naCkvSSxkdXBuYW1lcworICAgIGNkZWZnaFw9Y29weT1BCisKKy9eKCg/UDxBPmExKXwoP1A8QT5hMiliKS9JLGR1cG5hbWVzCisgICAgYTFiXD1nZXQ9QQorICAgIGEyYlw9Z2V0PUEKKyAgICBhMWJcPWdldD1aLGdldD1BCisKKy9eKD9QPEE+YSkoP1A8QT5iKS9JLGR1cG5hbWVzCisgICAgYWJcPWdldD1BCisKKy9eKD9QPEE+YSkoP1A8QT5iKXxjZC9JLGR1cG5hbWVzCisgICAgYWJcPWdldD1BCisgICAgY2RcPWdldD1BCisKKy9eKD9QPEE+YSkoP1A8QT5iKXxjZCg/UDxBPmVmKSg/UDxBPmdoKS9JLGR1cG5hbWVzCisgICAgY2RlZmdoXD1nZXQ9QQorCisvKD9KKV4oKD9QPEE+YTEpfCg/UDxBPmEyKWIpL0kKKyAgICBhMWJcPWNvcHk9QQorICAgIGEyYlw9Y29weT1BCisKKy9eKD9QPEE+YSkgKD9KOig/UDxCPmIpKD9QPEI+YykpICg/UDxBPmQpL0kKKworIyBJbiB0aGlzIG5leHQgdGVzdCwgSiBpcyBub3Qgc2V0IGF0IHRoZSBvdXRlciBsZXZlbDsgY29uc2VxdWVudGx5IGl0IGlzbid0IHNldAorIyBpbiB0aGUgcGF0dGVybidzIG9wdGlvbnM7IGNvbnNlcXVlbnRseSBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZSgpIHByb2R1Y2VzCisjIGEgcmFuZG9tIHZhbHVlLgorCisvXig/UDxBPmEpICg/SjooP1A8Qj5iKSg/UDxCPmMpKSAoP1A8Qz5kKS9JCisgICAgYSBiYyBkXD1jb3B5PUEsY29weT1CLGNvcHk9QworCisvXig/UDxBPmEpPyg/KEEpYXxiKS9JCisgICAgYWFiYworICAgIGJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKKworLyg/Oig/KFpaKWF8YikoP1A8Wlo+WCkpKy9JCisgICAgYlhhWAorCisvKD86KD8oMnkpYXxiKShYKSkrL0kKKworLyg/Oig/KFpBKWF8YikoP1A8Wlo+WCkpKy9JCisKKy8oPzooPyhaWilhfGIpKD8oWlopYXxiKSg/UDxaWj5YKSkrL0kKKyAgICBiYlhhYVgKKworLyg/Oig/KFpaKWF8XChiXCkpXFwoP1A8Wlo+WCkpKy9JCisgICAgKGIpXFxYYVxcWAorCisvKD9QPEFCQy9JCisKKy8oPzooPyhBKSg/UD1BKWF8YikoP1A8QT5YfFkpKSsvSQorICAgIGJYWGFZWWFZCisgICAgYlhZYVhYYVgKKworLygpKCkoKSgpKCkoKSgpKCkoKSg/Oig/KEEpKD9QPUEpYXxiKSg/UDxBPlh8WSkpKy9JCisgICAgYlhYYVlZYVkKKworL1xzKixccyovSQorICAgIFx4MGIsXHgwYgorICAgIFx4MGMsXHgwZAorCisvXmFiYy9JbSxuZXdsaW5lPWxmCisgICAgeHl6XG5hYmMKKyAgICB4eXpcclxuYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXpccmFiYworICAgIHh5emFiY1xyCisgICAgeHl6YWJjXHJwcXIKKyAgICB4eXphYmNcclxuCisgICAgeHl6YWJjXHJcbnBxcgorCisvXmFiYy9JbSxuZXdsaW5lPWNybGYKKyAgICB4eXpcclxuYWJjbGY+CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXpcbmFiY2xmCisgICAgeHl6XHJhYmNsZgorICAgIAorL15hYmMvSW0sbmV3bGluZT1jcgorICAgIHh5elxyYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXpcbmFiYworICAgIHh5elxyXG5hYmMKKworL15hYmMvSW0sbmV3bGluZT1iYWQKKworLy4qL0ksbmV3bGluZT1sZgorICAgIGFiY1xuZGVmCisgICAgYWJjXHJkZWYKKyAgICBhYmNcclxuZGVmCisKKy8uKi9JLG5ld2xpbmU9Y3IKKyAgICBhYmNcbmRlZgorICAgIGFiY1xyZGVmCisgICAgYWJjXHJcbmRlZgorCisvLiovSSxuZXdsaW5lPWNybGYKKyAgICBhYmNcbmRlZgorICAgIGFiY1xyZGVmCisgICAgYWJjXHJcbmRlZgorCisvXHcrKC4pKC4pP2RlZi9JcworICAgIGFiY1xuZGVmCisgICAgYWJjXHJkZWYKKyAgICBhYmNcclxuZGVmCisKKy8oP1A8Qj4yNVswLTVdfDJbMC00XVxkfFswMV0/XGQ/XGQpKD86XC4oP1A+QikpezN9L0kKKworLygpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkKKyAoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpCisgKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKQorICgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkKKyAoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpCisgKC4oLikpL0l4CisgICAgWFlcPW92ZWN0b3I9MTMzCisKKy8oYSpifCg/aTpjKig/LWkpZCkpL0kKKworLygpW2FiXXh5ei9JCisKKy8ofClbYWJdeHl6L0kKKworLyh8YylbYWJdeHl6L0kKKworLyh8Yz8pW2FiXXh5ei9JCisKKy8oZD98Yz8pW2FiXXh5ei9JCisKKy8oZD98YylbYWJdeHl6L0kKKworL15hKmJcZC9JQgorCisvXmEqK2JcZC9JQgorCisvXmEqP2JcZC9JQgorCisvXmErQVxkL0lCCisgICAgYWFhQTUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWE1CisKKy9eYSpBXGQvSUJpCisgICAgYWFhQTUKKyAgICBhYWFhNQorCisvKGEqfGIqKVtjZF0vSQorCisvKGErfGIqKVtjZF0vSQorCisvKGEqfGIrKVtjZF0vSQorCisvKGErfGIrKVtjZF0vSQorCisvKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKAorICgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgKKyAoKCgKKyBhCisgKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKQorICkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkKKyApKSkKKy9JeAorICBsYXJnZSBuZXN0CisKKy9hKlxkL0IKKworL2EqXEQvQgorCisvMCpcZC9CCisKKy8wKlxEL0IKKworL2EqXHMvQgorCisvYSpcUy9CCisKKy8gKlxzL0IKKworLyAqXFMvQgorCisvYSpcdy9CCisKKy9hKlxXL0IKKworLz0qXHcvQgorCisvPSpcVy9CCisKKy9cZCphL0IKKworL1xkKjIvQgorCisvXGQqXGQvQgorCisvXGQqXEQvQgorCisvXGQqXHMvQgorCisvXGQqXFMvQgorCisvXGQqXHcvQgorCisvXGQqXFcvQgorCisvXEQqYS9CCisKKy9cRCoyL0IKKworL1xEKlxkL0IKKworL1xEKlxEL0IKKworL1xEKlxzL0IKKworL1xEKlxTL0IKKworL1xEKlx3L0IKKworL1xEKlxXL0IKKworL1xzKmEvQgorCisvXHMqMi9CCisKKy9ccypcZC9CCisKKy9ccypcRC9CCisKKy9ccypccy9CCisKKy9ccypcUy9CCisKKy9ccypcdy9CCisKKy9ccypcVy9CCisKKy9cUyphL0IKKworL1xTKjIvQgorCisvXFMqXGQvQgorCisvXFMqXEQvQgorCisvXFMqXHMvQgorCisvXFMqXFMvQgorCisvXFMqXHcvQgorCisvXFMqXFcvQgorCisvXHcqYS9CCisKKy9cdyoyL0IKKworL1x3KlxkL0IKKworL1x3KlxEL0IKKworL1x3KlxzL0IKKworL1x3KlxTL0IKKworL1x3Klx3L0IKKworL1x3KlxXL0IKKworL1xXKmEvQgorCisvXFcqMi9CCisKKy9cVypcZC9CCisKKy9cVypcRC9CCisKKy9cVypccy9CCisKKy9cVypcUy9CCisKKy9cVypcdy9CCisKKy9cVypcVy9CCisKKy9bXmFdK2EvQgorCisvW15hXSthL0JpCisKKy9bXmFdK0EvQmkKKworL1teYV0rYi9CCisKKy9bXmFdK1xkL0IKKworL2EqW15hXS9CCisKKy8oP1A8YWJjPngpKD9QPHh5ej55KS9JCisgICAgeHlcPWNvcHk9YWJjLGNvcHk9eHl6CisKKy8oPzxhYmM+eCkoPyd4eXoneSkvSQorICAgIHh5XD1jb3B5PWFiYyxjb3B5PXh5egorCisvKD88YWJjJ3gpKD8neHl6J3kpL0kKKworLyg/PGFiYz54KSg/J3h5ej55KS9JCisKKy8oP1AnYWJjJ3gpKD9QPHh5ej55KS9JCisKKy9eKD86KD8oWlopYXxiKSg/PFpaPlgpKSsvCisgICAgYlhhWAorICAgIGJYYlgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFYYVgKKyAgICBhWGJYCisKKy9eKD9QPmFiYykoPzxhYmNkPnh4eCkvCisKKy9eKD9QPmFiYykoPzxhYmM+eHx5KS8KKyAgICB4eAorICAgIHh5CisgICAgeXkKKyAgICB5eAorCisvXig/UD5hYmMpKD9QPGFiYz54fHkpLworICAgIHh4CisgICAgeHkKKyAgICB5eQorICAgIHl4CisKKy9eKCg/KGFiYylhfGIpKD88YWJjPnh8eSkpKy8KKyAgICBieGF5CisgICAgYnhieQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYXhieQorCisvXigoKD9QPWFiYyl8WCkoPzxhYmM+eHx5KSkrLworICAgIFh4WHh4eAorICAgIFh4WHl5eAorICAgIFh4WHl4eAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeAorCisvXig/MSkoYWJjKS8KKyAgICBhYmNhYmMKKworL14oPzooPzpcMXxYKShhfGIpKSsvCisgICAgWGFhYQorICAgIFhhYmEKKworL15bXEVcUWFcRS1cUXpcRV0rL0IKKworL15bYVxRXWJjXEVdL0IKKworL15bYS1cUVxFXS9CCisKKy9eKD9QPmFiYylbKCldKD88YWJjPikvQgorCisvXigoPyhhYmMpeSlbKCldKD9QPGFiYz54KSkrL0IKKyAgICAoeHkpeAorCisvXig/UD5hYmMpXFEoKVxFKD88YWJjPikvQgorCisvXig/UD5hYmMpW2FcUShdXEUoXSg/PGFiYz4pL0IKKworL14oP1A+YWJjKSAjIHRoaXMgaXMgKGEgY29tbWVudCkKKyAgKD88YWJjPikvQngKKworL15cVyooPzooPzxvbmU+KD88dHdvPi4pXFcqKD8mb25lKVxXKlxrPHR3bz58KXwoPzx0aHJlZT4oPzxmb3VyPi4pXFcqKD8mdGhyZWUpXFcqXGsnZm91cid8XFcqLlxXKikpXFcqJC9JaQorICAgIDEyMjEKKyAgICBTYXRhbiwgb3NjaWxsYXRlIG15IG1ldGFsbGljIHNvbmF0YXMhCisgICAgQSBtYW4sIGEgcGxhbiwgYSBjYW5hbDogUGFuYW1hIQorICAgIEFibGUgd2FzIEkgZXJlIEkgc2F3IEVsYmEuCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGUgcXVpY2sgYnJvd24gZm94CisKKy8oPz0oXHcrKSlcMTovSQorICAgIGFiY2Q6CisKKy8oPz0oPydhYmMnXHcrKSlcazxhYmM+Oi9JCisgICAgYWJjZDoKKworLyg/J2FiYydhfGIpKD88YWJjPmR8ZSlcazxhYmM+ezJ9L2R1cG5hbWVzCisgICAgYWRhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWRkZAorICAgIGFkYmIKKworLyg/J2FiYydhfGIpKD88YWJjPmR8ZSkoPyZhYmMpezJ9L2R1cG5hbWVzCisgICAgYmRhYQorICAgIGJkYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJkZGQKKworLyg/KDxiYykpLworCisvKD8oJycpKS8KKworLyg/KCdSJylzdHVmZikvCisKKy8oKGFiYyAoPyhSKSAoPyhSMSkxKSAoPyhSMikyKSBYICB8ICAoPzEpICAoPzIpICAgKD9SKSApKSkgL3gKKyAgICBhYmNhYmMxWGFiYzJYYWJjWGFiY2FiYworCisvKD88QT4gKD8nQicgYWJjICg/KFIpICg/KFImQSkxKSAoPyhSJkIpMikgWCAgfCAgKD8xKSAgKD8yKSAgICg/UikgKSkpIC94CisgICAgYWJjYWJjMVhhYmMyWGFiY1hhYmNhYmMKKworLyg/PEE+ICg/J0InIGFiYyAoPyhSKSAoPyhSJkMpMSkgKD8oUiZCKTIpIFggIHwgICg/MSkgICg/MikgICAoP1IpICkpKSAveAorCisvXig/KERFRklORSkgYWJjIHwgeHl6ICkgL3gKKworLyg/KERFRklORSkgYWJjKSB4eXovSXgKKworLyhhfCkqXGQvCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTRcPW92ZWN0b3I9MAorXD0gRXhwZWN0IG5vIG1hdGNoCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYVw9b3ZlY3Rvcj0wCisKKy9eYS5iL25ld2xpbmU9bGYKKyAgICBhXHJiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXG5iCisKKy9eYS5iL25ld2xpbmU9Y3IKKyAgICBhXG5iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHJiCisKKy9eYS5iL25ld2xpbmU9YW55Y3JsZgorICAgIGFceDg1YgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxyYgorCisvXmEuYi9uZXdsaW5lPWFueQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxuYgorICAgIGFccmIKKyAgICBhXHg4NWIKKworL15hYmMuL2dteCxuZXdsaW5lPWFueQorICAgIGFiYzEgXHgwYWFiYzIgXHgwYmFiYzN4eCBceDBjYWJjNCBceDBkYWJjNXh4IFx4MGRceDBhYWJjNiBceDg1YWJjNyBKVU5LCisKKy9hYmMuJC9nbXgsbmV3bGluZT1hbnkKKyAgICBhYmMxXHgwYSBhYmMyXHgwYiBhYmMzXHgwYyBhYmM0XHgwZCBhYmM1XHgwZFx4MGEgYWJjNlx4ODUgYWJjNyBhYmM5CisKKy9eYVxSYi9ic3I9dW5pY29kZQorICAgIGFcbmIKKyAgICBhXHJiCisgICAgYVxyXG5iCisgICAgYVx4MGJiCisgICAgYVx4MGNiCisgICAgYVx4ODViCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXG5ccmIKKworL15hXFIqYi9ic3I9dW5pY29kZQorICAgIGFiCisgICAgYVxuYgorICAgIGFccmIKKyAgICBhXHJcbmIKKyAgICBhXHgwYmIKKyAgICBhXHgwY2IKKyAgICBhXHg4NWIKKyAgICBhXG5ccmIKKyAgICBhXG5cclx4ODVceDBjYgorCisvXmFcUitiL2Jzcj11bmljb2RlCisgICAgYVxuYgorICAgIGFccmIKKyAgICBhXHJcbmIKKyAgICBhXHgwYmIKKyAgICBhXHgwY2IKKyAgICBhXHg4NWIKKyAgICBhXG5ccmIKKyAgICBhXG5cclx4ODVceDBjYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIKKworL15hXFJ7MSwzfWIvYnNyPXVuaWNvZGUKKyAgICBhXG5iCisgICAgYVxuXHJiCisgICAgYVxuXHJceDg1YgorICAgIGFcclxuXHJcbmIKKyAgICBhXHJcblxyXG5cclxuYgorICAgIGFcblxyXG5ccmIKKyAgICBhXG5cblxyXG5iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXG5cblxuXHJiCisgICAgYVxyCisKKy8oPyZhYmMpWCg/PGFiYz5QKS9JCisgICAgYWJjUFhQMTIzCisKKy8oPzEpWCg/PGFiYz5QKS9JCisgICAgYWJjUFhQMTIzCisKKy8oPzphKD8mYWJjKWIpKig/PGFiYz54KS8KKyAgICAxMjNheGJheGJheGJ4NDU2CisgICAgMTIzYXhiYXhiYXhiNDU2CisKKy8oPzphKD8mYWJjKWIpezEsNX0oPzxhYmM+eCkvCisgICAgMTIzYXhiYXhiYXhieDQ1NgorCisvKD86YSg/JmFiYyliKXsyLDV9KD88YWJjPngpLworICAgIDEyM2F4YmF4YmF4Yng0NTYKKworLyg/OmEoPyZhYmMpYil7Mix9KD88YWJjPngpLworICAgIDEyM2F4YmF4YmF4Yng0NTYKKworLyhhYmMpKD9pOig/MSkpLworICAgIGRlZmFiY2FiY3h5egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgREVGYWJjQUJDWFlaCisKKy8oYWJjKSg/Oig/aSkoPzEpKS8KKyAgICBkZWZhYmNhYmN4eXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIERFRmFiY0FCQ1hZWgorCisvXihhKVxnLTIvCisKKy9eKGEpXGcvCisKKy9eKGEpXGd7MH0vCisKKy9eKGEpXGd7My8KKworL14oYSlcZ3thYX0vCisKKy9eYS5iL25ld2xpbmU9bGYKKyAgICBhXHJiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXG5iCisKKy8uK2Zvby8KKyAgICBhZm9vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcclxuZm9vCisgICAgXG5mb28KKworLy4rZm9vL25ld2xpbmU9Y3JsZgorICAgIGFmb28KKyAgICBcbmZvbworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHJcbmZvbworCisvLitmb28vbmV3bGluZT1hbnkKKyAgICBhZm9vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcbmZvbworICAgIFxyXG5mb28KKworLy4rZm9vL3MKKyAgICBhZm9vCisgICAgXHJcbmZvbworICAgIFxuZm9vCisgICAgCisvXiQvZ20sbmV3bGluZT1hbnkKKyAgICBhYmNcclxyeHl6CisgICAgYWJjXG5ccnh5eiAgCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWJjXHJcbnh5egorCisvKD9tKV4kL2csbmV3bGluZT1hbnksYWZ0ZXJ0ZXh0CisgICAgYWJjXHJcblxyXG4KKworLyg/bSleJHxeXHJcbi9nLG5ld2xpbmU9YW55LGFmdGVydGV4dAorICAgIGFiY1xyXG5cclxuCisgICAgCisvKD9tKSQvZyxuZXdsaW5lPWFueSxhZnRlcnRleHQKKyAgICBhYmNcclxuXHJcbgorCisvYWJjLiQvZ214LG5ld2xpbmU9YW55Y3JsZgorICAgIGFiYzFceDBhIGFiYzJceDBiIGFiYzNceDBjIGFiYzRceDBkIGFiYzVceDBkXHgwYSBhYmM2XHg4NSBhYmM5CisKKy9eWC9tCisgICAgWEFCQworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFhBQkNcPW5vdGJvbAorCisvKGFifGMpKD8tMSkvQgorICAgIGFiYworCisveHkoPysxKShhYmMpL0IKKyAgICB4eWFiY2FiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHlhYmMgIAorICAgIAorL3goPy0wKXkvCisKKy94KD8tMSl5LworCisveCg/KzApeS8KKworL3goPysxKXkvCisKKy9eKGFiYyk/KD8oLTEpWHxZKS9CCisgICAgYWJjWAorICAgIFkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY1kgICAKKyAgICAKKy9eKCg/KCsxKVh8WSkoYWJjKSkrL0IKKyAgICBZYWJjWGFiYworICAgIFlhYmNYYWJjWGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWGFiY1hhYmMgIAorCisvKD8oLTEpYSkvQgorCisvKCg/KC0xKWEpKS9CCisKKy8oKD8oLTIpYSkpL0IKKworL14oPygrMSlYfFkpKC4pL0IKKyAgICBZIQorCisvKD88QT50b218Ym9uKS1ca3tBfS8KKyAgICB0b20tdG9tCisgICAgYm9uLWJvbiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHRvbS1ib24gIAorCisvXGd7QS8KKworLyg/fChhYmMpfCh4eXopKS9CCisgICA+YWJjPAorICAgPnh5ejwgCisKKy8oeCkoP3woYWJjKXwoeHl6KSkoeCkvQgorICAgIHhhYmN4CisgICAgeHh5enggCisKKy8oeCkoP3woYWJjKShwcXIpfCh4eXopKSh4KS9CCisgICAgeGFiY3BxcngKKyAgICB4eHl6eCAKKworL1xIKytYL0IKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhYWFgKKyAgICAKKy9cSCtcaFkvQgorICAgIFhYWFggWSAKKworL1xIKyBZL0IKKworL1xoK0EvQgorCisvXHYqQi9CCisKKy9cVitceDBhL0IKKworL0ErXGgvQgorCisvICpcSC9CCisKKy9BKlx2L0IKKworL1x4MGIqXFYvQgorCisvXGQrXGgvQgorCisvXGQqXHYvQgorCisvUytcaFxTK1x2L0IKKworL1x3ezMsfVxoXHcrXHYvQgorCisvXGgrXGRcaCtcd1xoK1xTXGgrXEgvQgorCisvXHYrXGRcditcd1x2K1xTXHYrXFYvQgorCisvXEgrXGhcSCtcZC9CCisKKy9cVitcdlxWK1x3L0IKKworL1woICg/OiBbXigpXSogfCAoP1IpICkqIFwpL3gKKygwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMDApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKVw9aml0c3RhY2s9MTAyNAorCisvW1xFXUFBQS8KKworL1tcUVxFXUFBQS8KKworL1teXEVdQUFBLworCisvW15cUVxFXUFBQS8KKworL1tcRV5dQUFBLworCisvW1xRXEVeXUFBQS8KKworL0EoKlBSVU5FKUIoKlNLSVApQygqVEhFTilEKCpDT01NSVQpRSgqRilGKCpGQUlMKUcoPyEpSCgqQUNDRVBUKUkvQgorCisvXmErKCpGQUlMKS9hdXRvX2NhbGxvdXQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWFhYQorICAgIAorL2ErYj9jKygqRkFJTCkvYXV0b19jYWxsb3V0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFiY2NjCisKKy9hK2I/KCpQUlVORSljKygqRkFJTCkvYXV0b19jYWxsb3V0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFiY2NjCisKKy9hK2I/KCpDT01NSVQpYysoKkZBSUwpL2F1dG9fY2FsbG91dAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYmNjYworICAgIAorL2ErYj8oKlNLSVApYysoKkZBSUwpL2F1dG9fY2FsbG91dAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYmNjY2FhYWJjY2MKKworL2ErYj8oKlRIRU4pYysoKkZBSUwpL2F1dG9fY2FsbG91dAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYmNjYworICAgIAorL2EoKk1BUkspYi8KKworLyg/aTpBezEsfVw2NjY2NjY2NjY2KS8KKworL1xnNjY2NjY2NjY2Ni8KKworL1tcZzY2NjY2NjY2NjZdL0IKKworLyg/MSlcY1svCisKKy8uK0EvbmV3bGluZT1jcmxmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcclxuQQorICAgIAorL1xuQS9uZXdsaW5lPWNybGYKKyAgICBcclxuQSAKKworL1tcclxuXUEvbmV3bGluZT1jcmxmCisgICAgXHJcbkEgCisKKy8oXHJ8XG4pQS9uZXdsaW5lPWNybGYKKyAgICBcclxuQSAKKworL2EoKkNSKWIvCisKKy8oKkNSKWEuYi8KKyAgICBhXG5iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHJiICAKKworLygqQ1IpYS5iL25ld2xpbmU9bGYKKyAgICBhXG5iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHJiICAKKworLygqTEYpYS5iL25ld2xpbmU9Q1JMRgorICAgIGFccmIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcbmIgIAorCisvKCpDUkxGKWEuYi8KKyAgICBhXHJiCisgICAgYVxuYiAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHJcbmIgIAorCisvKCpBTllDUkxGKWEuYi9uZXdsaW5lPUNSCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHJiCisgICAgYVxuYiAgCisgICAgYVxyXG5iICAKKworLygqQU5ZKWEuYi9uZXdsaW5lPWNyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHJiCisgICAgYVxuYiAgCisgICAgYVxyXG5iICAKKyAgICBhXHg4NWIgCisgICAgCisvKCpBTlkpLiovZworICAgIGFiY1xyXG5kZWYKKworLygqQU5ZQ1JMRikuKi9nCisgICAgYWJjXHJcbmRlZgorCisvKCpDUkxGKS4qL2cKKyAgICBhYmNcclxuZGVmCisKKy9hXFJiL0ksYnNyPWFueWNybGYKKyAgICBhXHJiCisgICAgYVxuYgorICAgIGFcclxuYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ODViCisgICAgYVx4MGJiICAgICAKKworL2FcUmIvSSxic3I9dW5pY29kZQorICAgIGFccmIKKyAgICBhXG5iCisgICAgYVxyXG5iCisgICAgYVx4ODViCisgICAgYVx4MGJiICAgICAKKyAgICAKKy9hXFI/Yi9JLGJzcj1hbnljcmxmCisgICAgYVxyYgorICAgIGFcbmIKKyAgICBhXHJcbmIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceDg1YgorICAgIGFceDBiYiAgICAgCisKKy9hXFI/Yi9JLGJzcj11bmljb2RlCisgICAgYVxyYgorICAgIGFcbmIKKyAgICBhXHJcbmIKKyAgICBhXHg4NWIKKyAgICBhXHgwYmIgICAgIAorICAgIAorL2FcUnsyLDR9Yi9JLGJzcj1hbnljcmxmCisgICAgYVxyXG5cbmIKKyAgICBhXG5cclxyYgorICAgIGFcclxuXHJcblxyXG5cclxuYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ODVceDg1YgorICAgIGFceDBiXHgwYmIgICAgIAorCisvYVxSezIsNH1iL0ksYnNyPXVuaWNvZGUKKyAgICBhXHJccmIKKyAgICBhXG5cblxuYgorICAgIGFcclxuXG5cclxyYgorICAgIGFceDg1XHg4NWIKKyAgICBhXHgwYlx4MGJiICAgICAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhXHJcclxyXHJccmIgCisgCisvKCpCU1JfQU5ZQ1JMRilhXFJiL0kKKyAgICBhXG5iCisgICAgYVxyYiAKKworLygqQlNSX1VOSUNPREUpYVxSYi9JCisgICAgYVx4ODViCisKKy8oKkJTUl9BTllDUkxGKSgqQ1JMRilhXFJiL0kKKyAgICBhXG5iCisgICAgYVxyYiAKKworLygqQ1JMRikoKkJTUl9VTklDT0RFKWFcUmIvSQorICAgIGFceDg1YgorCisvKCpDUkxGKSgqQlNSX0FOWUNSTEYpKCpDUilhYi9JCisKKy8oPzxhPikoPyYpLworCisvKD88YWJjPikoPyZhKS8KKworLyg/PGE+KSg/JmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhKS8KKworLyg/Ky1hKS8KKworLyg/LSthKS8KKworLyg/KC0xKSkvCisKKy8oPygrMTApKS8KKworLyg/KDEwKSkvCisKKy8oPygrMikpKCkoKS8KKworLyg/KDIpKSgpKCkvCisKKy9caycnLworCisvXGs8Pi8KKworL1xre30vCisKKy9cay8KKworL1xrYWJjLworCisvKD9QPSkvCisKKy8oP1A+KS8KKworL1tbOmZvbzpdXS8KKworL1tbOjEyMzQ6XV0vCisKKy9bWzpmXG9vOl1dLworCisvW1s6IDpdXS8KKworL1tbOi4uLjpdXS8KKworL1tbOmxcb3dlcjpdXS8KKworL1tbOmFiY1w6XV0vCisKKy9bYWJjWzp4XF1wcXI6XV0vCisKKy9bWzphXGR6Ol1dLworCisvKF4oYXxiXGc8LTEnYykpLworCisvXig/KzEpKD88YT54fHkpezB9ei8KKyAgICB4enh4CisgICAgeXp5eSAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh4eiAgCisKKy8oXDMpKFwxKShhKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGNhdAorCisvKFwzKShcMSkoYSkvYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGNhdAorICAgIAorL1RBXS8KKyAgICBUaGUgQUNUQV0gY29tZXMgCisKKy9UQV0vYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIFRoZSBBQ1RBXSBjb21lcyAKKworLyg/MilbXWEoKWJdKGFiYykvCisgICAgYWJjYmFiYworCisvKD8yKVteXWEoKWJdKGFiYykvCisgICAgYWJjYmFiYworCisvKD8xKVtdYSgpYl0oYWJjKS8KKyAgICBhYmNiYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWJjWGFiYworCisvKD8xKVteXWEoKWJdKGFiYykvCisgICAgYWJjWGFiYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiY2JhYmMKKworLyg/MilbXWEoKWJdKGFiYykoeHl6KS8KKyAgICB4eXpiYWJjeHl6CisKKy8oPyZOKVtdYSg/PE4+KV0oPzxNPmFiYykvCisgICBhYmM8YWJjCisKKy8oPyZOKVtdYSg/PE4+KV0oYWJjKS8KKyAgIGFiYzxhYmMKKworL2FbXWIvCisKKy9hW15dYi8KKworL2FbXWIvYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIKKworL2FbXStiL2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiIAorCisvYVtdKitiL2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiIAorCisvYVteXWIvYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGFYYgorICAgIGFcbmIgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYiAgCisgICAgCisvYVteXStiL2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBhWGIKKyAgICBhXG5YXG5YYiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiICAKKworL2EoPyEpYi9CCisKKy8oPyEpP2EvQgorICAgIGFiCisKKy9hKCpGQUlMKStiLworCisvKGFiY3xwcXJ8MTIzKXswfVt4eXpdL0kKKworLyg/KD89LipiKWJ8XikvSSxhdXRvX2NhbGxvdXQKKyAgIGFkYworICAgYWJjIAorICAgCisvKD8oPz1iKS4qYnxeZCkvSQorCisvKD8oPz0uKmIpLipifF5kKS9JCisKKy94eXovYXV0b19jYWxsb3V0CisgIHh5eiAKKyAgYWJjeHl6IAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICBhYmMKKyAgYWJjeHlwcXIgIAorICAKKy94eXovYXV0b19jYWxsb3V0LG5vX3N0YXJ0X29wdGltaXplCisgIGFiY3h5eiAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgYWJjCisgIGFiY3h5cHFyICAKKyAgCisvKCpOT19TVEFSVF9PUFQpeHl6L2F1dG9fY2FsbG91dAorICBhYmN4eXoKKyAgCisvKCpOT19BVVRPX1BPU1NFU1MpYStiL0IKKworL3h5ei9hdXRvX2NhbGxvdXQsbm9fc3RhcnRfb3B0aW1pemUKKyAgYWJjeHl6IAorCisvXiIoKD8oPz1bYV0pW14iXSl8YikqIiQvYXV0b19jYWxsb3V0CisgICAgImFiIgorCisvXiIoKD8oPz1bYV0pW14iXSl8YikqIiQvCisgICAgImFiIgorCisvXlgoPzUpKGEpKD98KGIpfChxKSkoYykoZClZLworICAgIFhZYWJjZFkKKworL15YKD8mTikoYSkoP3woYil8KHEpKShjKShkKSg/PE4+WSkvCisgICAgWFlhYmNkWQorIAorL1hhezIsNH1iLworICAgIFhcPXBzCisgICAgWGFcPXBzCisgICAgWGFhXD1wcworICAgIFhhYWFcPXBzCisgICAgWGFhYWFcPXBzCisgICAgCisvWGF7Miw0fT9iLworICAgIFhcPXBzCisgICAgWGFcPXBzCisgICAgWGFhXD1wcworICAgIFhhYWFcPXBzCisgICAgWGFhYWFcPXBzCisgICAgCisvWGF7Miw0fStiLworICAgIFhcPXBzCisgICAgWGFcPXBzCisgICAgWGFhXD1wcworICAgIFhhYWFcPXBzCisgICAgWGFhYWFcPXBzCisgICAgCisvWFxkezIsNH1iLworICAgIFhcPXBzCisgICAgWDNcPXBzCisgICAgWDMzXD1wcworICAgIFgzMzNcPXBzCisgICAgWDMzMzNcPXBzCisgICAgCisvWFxkezIsNH0/Yi8KKyAgICBYXD1wcworICAgIFgzXD1wcworICAgIFgzM1w9cHMKKyAgICBYMzMzXD1wcworICAgIFgzMzMzXD1wcworICAgIAorL1hcZHsyLDR9K2IvCisgICAgWFw9cHMKKyAgICBYM1w9cHMKKyAgICBYMzNcPXBzCisgICAgWDMzM1w9cHMKKyAgICBYMzMzM1w9cHMKKyAgICAKKy9YXER7Miw0fWIvCisgICAgWFw9cHMKKyAgICBYYVw9cHMKKyAgICBYYWFcPXBzCisgICAgWGFhYVw9cHMKKyAgICBYYWFhYVw9cHMKKyAgICAKKy9YXER7Miw0fT9iLworICAgIFhcPXBzCisgICAgWGFcPXBzCisgICAgWGFhXD1wcworICAgIFhhYWFcPXBzCisgICAgWGFhYWFcPXBzCisgICAgCisvWFxEezIsNH0rYi8KKyAgICBYXD1wcworICAgIFhhXD1wcworICAgIFhhYVw9cHMKKyAgICBYYWFhXD1wcworICAgIFhhYWFhXD1wcworICAgIAorL1hbYWJjXXsyLDR9Yi8KKyAgICBYXD1wcworICAgIFhhXD1wcworICAgIFhhYVw9cHMKKyAgICBYYWFhXD1wcworICAgIFhhYWFhXD1wcworICAgIAorL1hbYWJjXXsyLDR9P2IvCisgICAgWFw9cHMKKyAgICBYYVw9cHMKKyAgICBYYWFcPXBzCisgICAgWGFhYVw9cHMKKyAgICBYYWFhYVw9cHMKKyAgICAKKy9YW2FiY117Miw0fStiLworICAgIFhcPXBzCisgICAgWGFcPXBzCisgICAgWGFhXD1wcworICAgIFhhYWFcPXBzCisgICAgWGFhYWFcPXBzCisgICAgCisvWFteYV17Miw0fWIvCisgICAgWFw9cHMKKyAgICBYelw9cHMKKyAgICBYenpcPXBzCisgICAgWHp6elw9cHMKKyAgICBYenp6elw9cHMKKyAgICAKKy9YW15hXXsyLDR9P2IvCisgICAgWFw9cHMKKyAgICBYelw9cHMKKyAgICBYenpcPXBzCisgICAgWHp6elw9cHMKKyAgICBYenp6elw9cHMKKyAgICAKKy9YW15hXXsyLDR9K2IvCisgICAgWFw9cHMKKyAgICBYelw9cHMKKyAgICBYenpcPXBzCisgICAgWHp6elw9cHMKKyAgICBYenp6elw9cHMKKyAgICAKKy8oWSlYXDF7Miw0fWIvCisgICAgWVhcPXBzCisgICAgWVhZXD1wcworICAgIFlYWVlcPXBzCisgICAgWVhZWVlcPXBzCisgICAgWVhZWVlZXD1wcworICAgIAorLyhZKVhcMXsyLDR9P2IvCisgICAgWVhcPXBzCisgICAgWVhZXD1wcworICAgIFlYWVlcPXBzCisgICAgWVhZWVlcPXBzCisgICAgWVhZWVlZXD1wcworICAgIAorLyhZKVhcMXsyLDR9K2IvCisgICAgWVhcPXBzCisgICAgWVhZXD1wcworICAgIFlYWVlcPXBzCisgICAgWVhZWVlcPXBzCisgICAgWVhZWVlZXD1wcworICAgIAorL1wrK1xLWnxcZCtYfDkrWS9zdGFydGNoYXIKKyAgICArKysrMTIzOTk5XD1wcworICAgICsrKysxMjM5OTlZXD1wcworICAgICsrKytaMTIzNFw9cHMKKworL1ooKkYpLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWlw9cHMKKyAgICBaQVw9cHMKKyAgICAKKy9aKD8hKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFpcPXBzCisgICAgWkFcPXBzCisKKy9kb2coc2JvZHkpPy8KKyAgICBkb2dzXD1wcworICAgIGRvZ3NcPXBoCisgICAgCisvZG9nKHNib2R5KT8/LworICAgIGRvZ3NcPXBzCisgICAgZG9nc1w9cGgKKworL2RvZ3xkb2dzYm9keS8KKyAgICBkb2dzXD1wcworICAgIGRvZ3NcPXBoCisgCisvZG9nc2JvZHl8ZG9nLworICAgIGRvZ3NcPXBzCisgICAgZG9nc1w9cGgKKworL1xidGhlIGNhdFxiLworICAgIHRoZSBjYXRcPXBzCisgICAgdGhlIGNhdFw9cGgKKworL2FiYy8KKyAgIGFiY1w9cHMKKyAgIGFiY1w9cGgKKyAgIAorL2FiY1xLMTIzL3N0YXJ0Y2hhcgorICAgIHh5emFiYzEyM3BxcgorICAgIHh5emFiYzEyXD1wcworICAgIHh5emFiYzEyXD1waAorICAgIAorLyg/PD1hYmMpMTIzLworICAgIHh5emFiYzEyM3BxciAKKyAgICB4eXphYmMxMlw9cHMKKyAgICB4eXphYmMxMlw9cGgKKworL1xiYWJjXGIvCisgICAgKysrYWJjKysrCisgICAgKysrYWJcPXBzCisgICAgKysrYWJcPXBoCisKKy8oPyZ3b3JkKSg/JmVsZW1lbnQpKD8oREVGSU5FKSg/PGVsZW1lbnQ+PFtebV1bXj5dPltePF0pKD88d29yZD5cdyorKSkvQgorCisvKD8md29yZCkoPyZlbGVtZW50KSg/KERFRklORSkoPzxlbGVtZW50PjxbXlxkXVtePl0+W148XSkoPzx3b3JkPlx3KispKS9CCisKKy8oYWIpKHgoeSl6KGNkKCpBQ0NFUFQpKSlwcS9CCisKKy9hYmNcSy9hZnRlcnRleHQsc3RhcnRjaGFyCisgICAgYWJjZGVmCisgICAgYWJjZGVmXD1ub3RlbXB0eV9hdHN0YXJ0CisgICAgeHl6YWJjZGVmXD1ub3RlbXB0eV9hdHN0YXJ0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkZWZcPW5vdGVtcHR5CisgICAgeHl6YWJjZGVmXD1ub3RlbXB0eQorICAgIAorL14oPzooPz1hYmMpfGFiY1xLKS9hZnRlcnRleHQsc3RhcnRjaGFyCisgICAgYWJjZGVmCisgICAgYWJjZGVmXD1ub3RlbXB0eV9hdHN0YXJ0CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWJjZGVmXD1ub3RlbXB0eQorCisvYT9iPy9hZnRlcnRleHQKKyAgICB4eXoKKyAgICB4eXphYmMKKyAgICB4eXphYmNcPW5vdGVtcHR5CisgICAgeHl6YWJjXD1ub3RlbXB0eV9hdHN0YXJ0CisgICAgeHl6XD1ub3RlbXB0eV9hdHN0YXJ0CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgeHl6XD1ub3RlbXB0eQorCisvXmE/Yj8vYWZ0ZXJ0ZXh0CisgICAgeHl6CisgICAgeHl6YWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgeHl6YWJjXD1ub3RlbXB0eQorICAgIHh5emFiY1w9bm90ZW1wdHlfYXRzdGFydAorICAgIHh5elw9bm90ZW1wdHlfYXRzdGFydAorICAgIHh5elw9bm90ZW1wdHkKKyAgICAKKy9eKD88bmFtZT5hfGJcZzxuYW1lPmMpLworICAgIGFhYWEKKyAgICBiYWN4eHgKKyAgICBiYmFjY3h4eCAKKyAgICBiYmJhY2NjeHgKKworL14oPzxuYW1lPmF8YlxnJ25hbWUnYykvCisgICAgYWFhYQorICAgIGJhY3h4eAorICAgIGJiYWNjeHh4IAorICAgIGJiYmFjY2N4eAorCisvXihhfGJcZzwxPmMpLworICAgIGFhYWEKKyAgICBiYWN4eHgKKyAgICBiYmFjY3h4eCAKKyAgICBiYmJhY2NjeHgKKworL14oYXxiXGcnMSdjKS8KKyAgICBhYWFhCisgICAgYmFjeHh4CisgICAgYmJhY2N4eHggCisgICAgYmJiYWNjY3h4CisKKy9eKGF8YlxnJy0xJ2MpLworICAgIGFhYWEKKyAgICBiYWN4eHgKKyAgICBiYmFjY3h4eCAKKyAgICBiYmJhY2NjeHgKKworLyheKGF8YlxnPC0xPmMpKS8KKyAgICBhYWFhCisgICAgYmFjeHh4CisgICAgYmJhY2N4eHggCisgICAgYmJiYWNjY3h4CisKKy8oPy1pOlxnPG5hbWU+KSg/aTooPzxuYW1lPmEpKS8KKyAgICBYYWFYCisgICAgWEFBWCAKKworLyg/aTpcZzxuYW1lPikoPy1pOig/PG5hbWU+YSkpLworICAgIFhhYVgKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBYQUFYIAorCisvKD8taTpcZzwrMT4pKD9pOihhKSkvCisgICAgWGFhWAorICAgIFhBQVggCisKKy8oPz0oPzxyZWdleD4oPyNzaW1wbGVzeW50YXgpXCQoPzxuYW1lPlthLXpBLVpfXHh7N2Z9LVx4e2ZmfV1bYS16QS1aMC05X1x4ezdmfS1ceHtmZn1dKikoPzpcWyg/PGluZGV4PlthLXpBLVowLTlfXHh7N2Z9LVx4e2ZmfV0rfFwkXGc8bmFtZT4pXF18LT5cZzxuYW1lPihcKC4qP1wpKT8pP3woPyNzaW1wbGUgc3ludGF4IHdpdGhicmFjZXMpXCRceyg/OlxnPG5hbWU+KD88aW5kaWNlcz5cWyg/OlxnPGluZGV4PnwnKD86XFwufFteJ1xcXSkqJ3wiKD86XGc8cmVnZXg+fFxcLnxbXiJcXF0pKiIpXF0pP3xcZzxjb21wbGV4PnxcJFx7XGc8Y29tcGxleD5cfSlcfXwoPyNjb21wbGV4c3ludGF4KVx7KD88Y29tcGxleD5cJCg/PHNlZ21lbnQ+XGc8bmFtZT4oXGc8aW5kaWNlcz4qfFwoLio/XCkpPykoPzotPlxnPHNlZ21lbnQ+KSp8XCRcZzxjb21wbGV4PnxcJFx7XGc8Y29tcGxleD5cfSlcfSkpXHsvCisKKy8oPzxuPmF8YnxjKVxnPG4+Ki8KKyAgIGFiYworICAgYWNjY2NiYmIgCisKKy9eWCg/NykoYSkoP3woYil8KHEpKHIpKHMpKShjKShkKShZKS8KKyAgICBYWWFiY2RZCisKKy8oPzw9Yig/MSl8enp6KShhKS8KKyAgICB4YmFheAorICAgIHh6enpheCAKKworLyhhKSg/PD1iXDEpLworCisvKGEpKD88PWIrKD8xKSkvCisKKy8oYSspKD88PWIoPzEpKS8KKworLyhhKD88PWIoPzEpKSkvCisKKy8oPzw9Yig/MSkpeHl6LworCisvKD88PWIoPzEpKXh5eihiKylwcXJzdHV2ZXcvCisKKy8oYXxiYylcMS9JCisKKy8oYXxiYylcMXsyLDN9L0kKKworLyhhfGJjKSg/MSkvSQorCisvKGF8YlwxKShhfGJcMSkvSQorCisvKGF8YlwxKXsyfS9JCisKKy8oYXxiYmJiXDEpKGF8YmJiYlwxKS9JCisKKy8oYXxiYmJiXDEpezJ9L0kKKworL15Gcm9tICsoW14gXSspICtbYS16QS1aXVthLXpBLVpdW2EtekEtWl0gK1thLXpBLVpdW2EtekEtWl1bYS16QS1aXSArWzAtOV0/WzAtOV0gK1swLTldWzAtOV06WzAtOV1bMC05XS9JCisKKy88dHIoW1x3XFdcc1xkXVtePD5dezAsfSk+PFREKFtcd1xXXHNcZF1bXjw+XXswLH0pPihbXGRdezAsfVwuKSguKikoKDxCUj4oW1x3XFdcc1xkXVtePD5dezAsfSl8W1xzXXswLH0pKTxcL2E+PFwvVEQ+PFREKFtcd1xXXHNcZF1bXjw+XXswLH0pPihbXHdcV1xzXGRdW148Pl17MCx9KTxcL1REPjxURChbXHdcV1xzXGRdW148Pl17MCx9KT4oW1x3XFdcc1xkXVtePD5dezAsfSk8XC9URD48XC9UUj4vSWlzCisKKyIoPz4uKi8pZm9vIkkKKworLyg/KD89W15hLXpdK1thLXpdKSAgXGR7Mn0tW2Etel17M30tXGR7Mn0gIHwgIFxkezJ9LVxkezJ9LVxkezJ9ICkgL0l4CisKKy8oPzooPzooPzooPzooPzooPzooPzooPzooPzooYXxifGMpKSkpKSkpKSkpL0lpCisKKy8oPzpjfGQpKD86KSg/OmFhYWFhYWFhKD86KSg/OmJiYmJiYmJiKSg/OmJiYmJiYmJiKD86KSkoPzpiYmJiYmJiYig/OikoPzpiYmJiYmJiYikpKS9JCisKKy88YVtcc10raHJlZltcc10qPVtcc10qICAgICAgICAgICMgZmluZCA8YSBocmVmPQorIChbXCJcJ10pPyAgICAgICAgICAgICAgICAgICAgICAgIyBmaW5kIHNpbmdsZSBvciBkb3VibGUgcXVvdGUKKyAoPygxKSAoLio/KVwxIHwgKFteXHNdKykpICAgICAgICMgaWYgcXVvdGUgZm91bmQsIG1hdGNoIHVwIHRvIG5leHQgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcXVvdGUsIG90aGVyd2lzZSBtYXRjaCB1cCB0byBuZXh0IHNwYWNlCisvSWlzeAorCisvXig/ITopICAgICAgICAgICAgICAgICAgICAgICAjIGNvbG9uIGRpc2FsbG93ZWQgYXQgc3RhcnQKKyAgKD86ICAgICAgICAgICAgICAgICAgICAgICAgICMgc3RhcnQgb2YgaXRlbQorICAgICg/OiBbMC05YS1mXXsxLDR9IHwgICAgICAgIyAxLTQgaGV4IGRpZ2l0cyBvcgorICAgICg/KDEpMCB8ICgpICkgKSAgICAgICAgICAgIyBpZiBudWxsIHByZXZpb3VzbHkgbWF0Y2hlZCwgZmFpbDsgZWxzZSBudWxsCisgICAgOiAgICAgICAgICAgICAgICAgICAgICAgICAjIGZvbGxvd2VkIGJ5IGNvbG9uCisgICl7MSw3fSAgICAgICAgICAgICAgICAgICAgICAjIGVuZCBpdGVtOyAxLTcgb2YgdGhlbSByZXF1aXJlZCAgICAgICAgICAgICAgIAorICBbMC05YS1mXXsxLDR9ICQgICAgICAgICAgICAgIyBmaW5hbCBoZXggbnVtYmVyIGF0IGVuZCBvZiBzdHJpbmcKKyAgKD8oMSl8LikgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgdGhhdCB0aGVyZSB3YXMgYW4gZW1wdHkgY29tcG9uZW50CisgIC9JaXgKKworLyg/fCg/PGE+QSl8KD88YT5CKSkvSQorICAgIEFCXD1jb3B5PWEKKyAgICBCQVw9Y29weT1hCisKKy8oP3woPzxhPkEpfCg/PGI+QikpLworCisvKD86YSg/PHF1b3RlPiAoPzxhcG9zdHJvcGhlPicpfCg/PHJlYWxxdW90ZT4iKSkgfAorICAgIGIoPzxxdW90ZT4gKD88YXBvc3Ryb3BoZT4nKXwoPzxyZWFscXVvdGU+IikpICkgCisgICAgKD8oJ3F1b3RlJylbYS16XSt8WzAtOV0rKS9JeCxkdXBuYW1lcworICAgIGEiYWFhYWEKKyAgICBiImFhYWFhIAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGIiMTExMTEKKyAgICBhIjExMTExIAorICAgIAorL14oP3woYSkoYikoYykoPzxEPmQpfCg/PEQ+ZSkpICg/KCdEJylYfFkpL0lCeCxkdXBuYW1lcworICAgIGFiY2RYCisgICAgZVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RZCisgICAgZXkgICAgIAorICAgIAorLyg/PEE+YSkgKGIpKGMpICAoPzxBPmQgICg/KFImQSkkIHwgKD80KSkgKS9JQngsZHVwbmFtZXMKKyAgICBhYmNkZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGRlICAKKworL2FiY2QqLworICAgIHh4eHhhYmNkXD1wcworICAgIHh4eHhhYmNkXD1waAorCisvYWJjZCovaQorICAgIHh4eHhhYmNkXD1wcworICAgIHh4eHhhYmNkXD1waAorICAgIFhYWFhBQkNEXD1wcworICAgIFhYWFhBQkNEXD1waAorCisvYWJjXGQqLworICAgIHh4eHhhYmMxXD1wcworICAgIHh4eHhhYmMxXD1waAorCisvKGEpYmNcMSovCisgICAgeHh4eGFiY2FcPXBzCisgICAgeHh4eGFiY2FcPXBoCisKKy9hYmNbZGVdKi8KKyAgICB4eHh4YWJjZGVcPXBzCisgICAgeHh4eGFiY2RlXD1waAorCisjIFRoaXMgaXMgbm90IGluIHRoZSBQZXJsLWNvbXBhdGlibGUgdGVzdCBiZWNhdXNlIFBlcmwgc2VlbXMgY3VycmVudGx5IHRvIGJlCisjIGJyb2tlbiBhbmQgbm90IGJlaGF2aW5nIGFzIHNwZWNpZmllZCBpbiB0aGF0IGl0ICpkb2VzKiBidW1wYWxvbmcgYWZ0ZXIKKyMgaGl0dGluZyAoKkNPTU1JVCkuIAorCisvKD8xKShBKCpDT01NSVQpfEIpRC8KKyAgICBBQkQKKyAgICBYQUJECisgICAgQkFECisgICAgQUJYQUJEICAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBBQlggCisgICAgQkFYQkFEICAKKworLyhcMykoXDEpKGEpL2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBjYXQKKworLyhcMykoXDEpKGEpL0ksYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGNhdAorCisvKFwzKShcMSkoYSkvSQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgY2F0CisKKy9pKD8oREVGSU5FKSg/PHM+YSkpL0kKKyAgICBpCisgICAgCisvKClpKD8oMSlhKS9JCisgICAgaWEKKworLyg/aSlhKD8taSlifGMvQgorICAgIFhhYlgKKyAgICBYQWJYCisgICAgQ2NDIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWEFCWCAgIAorCisvKD9pKWEoP3MpYnxjL0IKKworLyg/aSlhKD9zLWkpYnxjL0IKKworL14oYWIoY1wxKWR8eCl7Mn0kL0IKKyAgICB4YWJjeGQKKyAgICAKKy9eKD8mdCkqKyg/KERFRklORSkoPzx0Pi4pKSQvQgorCisvXig/JnQpKig/KERFRklORSkoPzx0Pi4pKSQvQgorCisjIFRoaXMgb25lIGlzIGhlcmUgYmVjYXVzZSBQZXJsIGdpdmVzIHRoZSBtYXRjaCBhcyAiYiIgcmF0aGVyIHRoYW4gImFiIi4gSQorIyBiZWxpZXZlIHRoaXMgdG8gYmUgYSBQZXJsIGJ1Zy4KKyAgICAgIAorLyg/PmFcS2IpenwoYWIpLworICAgIGFiXD1zdGFydGNoYXIgCisKKy8oP1A8TDE+KD9QPEwyPjB8KXwoP1A+TDIpKD9QPkwxKSkvCisgICAgYWJjZAorICAgIDBhYmMgCisKKy9hYmMoKk1BUks6KXBxci8KKworL2FiYygqOilwcXIvCisKKy9hYmMoKkZBSUw6MTIzKXh5ei8KKworIyBUaGlzIHNob3VsZCwgYW5kIGRvZXMsIGZhaWwuIEluIFBlcmwsIGl0IGRvZXMgbm90LCB3aGljaCBJIHRoaW5rIGlzIGEgCisjIGJ1ZyBiZWNhdXNlIHJlcGxhY2luZyB0aGUgQiBpbiB0aGUgcGF0dGVybiBieSAoQnxEKSBkb2VzIG1ha2UgaXQgZmFpbC4KKworL0EoKkNPTU1JVClCL2FmdGVydGV4dCxtYXJrCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQ0FCWAorCisjIFRoZXNlIHNob3VsZCBiZSBkaWZmZXJlbnQsIGJ1dCBpbiBQZXJsIHRoZXkgYXJlIG5vdCwgd2hpY2ggSSB0aGluaworIyBpcyBhIGJ1ZyBpbiBQZXJsLgorCisvQSgqVEhFTilCfEEoKlRIRU4pQy9tYXJrCisgICAgQUMKKworL0EoKlBSVU5FKUJ8QSgqUFJVTkUpQy9tYXJrCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQworICAgIAorIyBNYXJrIG5hbWVzIGNhbiBiZSBkdXBsaWNhdGVkLiBQZXJsIGRvZXNuJ3QgZ2l2ZSBhIG1hcmsgZm9yIHRoaXMgb25lLAorIyB0aG91Z2ggUENSRTIgZG9lcy4KKworL15BKCo6QSlCfF5YKCo6QSlZL21hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhBUVEKKyAgICAKKyMgQ09NTUlUIGF0IHRoZSBzdGFydCBvZiBhIHBhdHRlcm4gc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGFuIGFuY2hvci4gUGVybCAKKyMgb3B0aW1pemF0aW9ucyBkZWZlYXQgdGhpcy4gU28gZG9lcyB0aGUgUENSRTIgb3B0aW1pemF0aW9uIHVubGVzcyB3ZSBkaXNhYmxlCisjIGl0LgorCisvKCpDT01NSVQpQUJDLworICAgIEFCQ0RFRkcKKyAgICAKKy8oKkNPTU1JVClBQkMvbm9fc3RhcnRfb3B0aW1pemUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIERFRkdBQkMKKyAgICAKKy9eKGFiIChjKygqVEhFTiljZCkgfCB4eXopL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2NjZCAgCisKKy9eKGFiIChjKygqUFJVTkUpY2QpIHwgeHl6KS94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNjY2QgIAorCisvXihhYiAoYysoKkZBSUwpY2QpIHwgeHl6KS94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNjY2QgIAorICAgIAorIyBQZXJsIGdldHMgc29tZSBvZiB0aGVzZSB3cm9uZworCisvKD8+LigqQUNDRVBUKSkqPzUvCisgICAgYWJjZGUKKworLyguKCpBQ0NFUFQpKSo/NS8KKyAgICBhYmNkZQorCisvKC4oKkFDQ0VQVCkpNS8KKyAgICBhYmNkZQorCisvKC4oKkFDQ0VQVCkpKjUvCisgICAgYWJjZGUKKworL0FcTkIuL0IKKyAgICBBQ0JECitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBXG5CCisgICAgQUNCXG4gICAKKworL0FcTkIuL0JzCisgICAgQUNCRAorICAgIEFDQlxuIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVxuQiAgCisgIAorL0FcTkIvbmV3bGluZT1jcmxmCisgICAgQVxuQgorICAgIEFcckIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFcclxuQiAgICAKKworL1xSK2IvQgorCisvXFIrXG4vQgorCisvXFIrXGQvQgorCisvXGQqXFIvQgorCisvXHMqXFIvQgorICAgIFx4MjBceDBhCisgICAgXHgyMFx4MGQKKyAgICBceDIwXHgwZFx4MGEKKworL1xTKlxSL0IKKyAgICBhXHgwYQorCisvWFxoKlxSL0IKKyAgICBYXHgyMFx4MGEKKworL1hcSCpcUi9CCisgICAgWFx4MGRceDBhCisKKy9YXEgrXFIvQgorICAgIFhceDBkXHgwYQorCisvWFxIKytcUi9CCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYXHgwZFx4MGEKKworLyg/PD1hYmMpZGVmLworICAgIGFiY1w9cGgKKworL2FiYyQvCisgICAgYWJjCisgICAgYWJjXD1wcworICAgIGFiY1w9cGgKKworL2FiYyQvbQorICAgIGFiYworICAgIGFiY1xuCisgICAgYWJjXD1waAorICAgIGFiY1xuXD1waAorICAgIGFiY1w9cHMKKyAgICBhYmNcblw9cHMKKworL2FiY1x6LworICAgIGFiYworICAgIGFiY1w9cHMKKyAgICBhYmNcPXBoCisKKy9hYmNcWi8KKyAgICBhYmMKKyAgICBhYmNcPXBzCisgICAgYWJjXD1waAorCisvYWJjXGIvCisgICAgYWJjCisgICAgYWJjXD1wcworICAgIGFiY1w9cGgKKworL2FiY1xCLworICAgIGFiY1w9cHMKKyAgICBhYmNcPXBoCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKKworLy4rLworXD0gQmFkIG9mZnNldHMKKyAgICBhYmNcPW9mZnNldD00CisgICAgYWJjXD1vZmZzZXQ9LTQgCitcPSBWYWxpZCBkYXRhCisgICAgYWJjXD1vZmZzZXQ9MAorICAgIGFiY1w9b2Zmc2V0PTEKKyAgICBhYmNcPW9mZnNldD0yCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcPW9mZnNldD0zCisKKy9eXGPEoy8KKworLyg/UDxhYm4+KD9QPWFibil4eHgpL0IKKworLyhhXDF6KS9CCisKKy8oP1A8YWJuPig/UD1hYm4pKD88YmFkc3R1Znh4eCkvQgorCisvKD9QPGFibj4oP1A9YXhuKXh4eCkvQgorCisvKD9QPGFibj4oP1A9YXhuKXh4eCkoPzxheG4+eXkpL0IKKworIyBUaGVzZSB0ZXN0cyBhcmUgaGVyZSBiZWNhdXNlIFBlcmwgZ2V0cyB0aGUgZmlyc3Qgb25lIHdyb25nLiAKKworLyhcUiopKC4pL3MKKyAgICBcclxuCisgICAgXHJcclxuXG5cciAKKyAgICBcclxyXG5cblxyXG4gCisKKy8oXFIpKiguKS9zCisgICAgXHJcbgorICAgIFxyXHJcblxuXHIgCisgICAgXHJcclxuXG5cclxuIAorCisvKCg/PlxyXG58XG58XHgwYnxcZnxccnxceDg1KSopKC4pL3MKKyAgICBcclxuCisgICAgXHJcclxuXG5cciAKKyAgICBcclxyXG5cblxyXG4gCisKKyMgLS0tLS0tLS0tLS0tLSAKKworL15hYmMkL0IKKworL15hYmMkL0JtCisKKy9eKGEpKisoXHcpLworICAgIGFhYWFYCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWFhYQorCisvXig/OmEpKisoXHcpLworICAgIGFhYWFYCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWFhYQorCisvKGEpKysxMjM0L0lCCisKKy8oW2FiY10pKysxMjM0L0kKKworLyg/PD0oYWJjKSspWC8KKworLyheYWIpL0kKKworLyheYWIpKysvSQorCisvKF5hYnxeKSsvSQorCisvKF5hYnxeKSsrL0kKKworLyg/Ol5hYikvSQorCisvKD86XmFiKSsrL0kKKworLyg/Ol5hYnxeKSsvSQorCisvKD86XmFifF4pKysvSQorCisvKC4qYWIpL0kKKworLyguKmFiKSsrL0kKKworLyguKmFifC4qKSsvSQorCisvKC4qYWJ8LiopKysvSQorCisvKD86LiphYikvSQorCisvKD86LiphYikrKy9JCisKKy8oPzouKmFifC4qKSsvSQorCisvKD86LiphYnwuKikrKy9JCisKKy8oPz1hKVtiY2RdL0kKKworLygoPz1hKSlbYmNkXS9JCisKKy8oKD89YSkpK1tiY2RdL0kKKworLygoPz1hKSkrK1tiY2RdL0kKKworLyg/PWErKVtiY2RdL0lpCisKKy8oPz1hKz8pW2JjZF0vSWkKKworLyg/PWErKylbYmNkXS9JaQorCisvKD89YXszfSlbYmNkXS9JaQorCisvKGFiYylcMSsvCisKKyMgUGVybCBkb2Vzbid0IGdldCB0aGVzZSByaWdodCBJTU8gKHRoZSAzcmQgaXMgUENSRTItc3BlY2lmaWMpIAorCisvKD8xKSg/OihiKCpBQ0NFUFQpKSl7MH0vCisgICAgYgorCisvKD8xKSg/OihiKCpBQ0NFUFQpKSl7MH1jLworICAgIGJjCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYiAKKworLyg/MSkoPzooKCpBQ0NFUFQpKSl7MH1jLworICAgIGMKKyAgICBjXD1ub3RlbXB0eQorCisvXi4qPyg/KD89YSlhfGIoKlRIRU4pYykvCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYmEKKworL14uKj8oPyg/PWEpYXxiYykvCisgICAgYmEKKworL14uKj8oPyg/PWEpYSgqVEhFTilifGMpLworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFjCisKKy9eLio/KD8oPz1hKWEoKlRIRU4pYiljLworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFjCisKKy9eLio/KGEoKlRIRU4pYiljLworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFhYmMKKyAgICAKKy9eLio/ICg/MSkgYyAoPyhERUZJTkUpKGEoKlRIRU4pYikpL3gKKyAgICBhYWJjCisKKy9eLio/KGEoKlRIRU4pYnx6KWMvCisgICAgYWFiYworCisvXi4qPyh6fGEoKlRIRU4pYiljLworICAgIGFhYmMKKworIyBUaGVzZSBhcmUgaGVyZSBiZWNhdXNlIHRoZXkgYXJlIG5vdCBQZXJsLWNvbXBhdGlibGU7IHRoZSBzdHVkeWluZyBtZWFucyB0aGUKKyMgbWFyayBpcyBub3Qgc2Vlbi4KKworLygqTUFSSzpBKSgqU0tJUDpCKShDfFgpL21hcmsKKyAgICBDCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgRAorICAgICAKKy8oKjpBKUErKCpTS0lQOkEpKEJ8WikvbWFyaworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIEFBQUMKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyIoPz1hKigqQUNDRVBUKWIpYyIKKyAgICBjCisgICAgY1w9bm90ZW1wdHkKKyAgICAKKy8oPzEpYyg/KERFRklORSkoKCpBQ0NFUFQpYikpLworICAgIGMKKyAgICBjXD1ub3RlbXB0eQorICAgIAorLyg/PigqQUNDRVBUKWIpYy8KKyAgICBjCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgY1w9bm90ZW1wdHkKKworLyg/Oig/PihhKSkpK2ElL2FsbGFmdGVydGV4dAorICAgICVhYSUKKworLyhhKWJ8YWMvYWxsYWZ0ZXJ0ZXh0CisgICAgYWNcPW92ZWN0b3I9MQorICAgIAorLyhhKShiKXh8YWJjL2FsbGFmdGVydGV4dAorICAgICBhYmNcPW92ZWN0b3I9MgorCisvKGEpYmN8KGEpKGIpXDIvCisgICAgYWJjXD1vdmVjdG9yPTEKKyAgICBhYmNcPW92ZWN0b3I9MgorICAgIGFiYVw9b3ZlY3Rvcj0xCisgICAgYWJhXD1vdmVjdG9yPTIKKyAgICBhYmFcPW92ZWN0b3I9MworICAgIGFiYVw9b3ZlY3Rvcj00CisKKy8oPyhERUZJTkUpKGEoPzIpfGIpKGIoPzEpfGEpKSg/Oig/MSl8KD8yKSkvSQorCisvKGEoPzIpfGIpKGIoPzEpfGEpKD86KD8xKXwoPzIpKS9JCisKKy8oYSg/Mil8YikoYig/MSl8YSkoPzEpKD8yKS9JCisKKy8oYWJjKSg/MSkvSQorCisvKD86KGZvbyl8KGJhcil8KGJheikpWC9hbGxjYXB0dXJlcworICAgIGJhemZvb1gKKyAgICBmb29iYXpiYXJYCisgICAgYmFyZm9vWAorICAgIGJhelgKKyAgICBmb29iYXJiYXpYICAgIAorICAgIGJhemZvb1hcPW92ZWN0b3I9MAorICAgIGJhemZvb1hcPW92ZWN0b3I9MQorICAgIGJhemZvb1hcPW92ZWN0b3I9MgorICAgIGJhemZvb1hcPW92ZWN0b3I9MworCisvKD89YWJjKXszfWFiYy9CCisKKy8oPz1hYmMpK2FiYy9CCisKKy8oPz1hYmMpKythYmMvQgorCisvKD89YWJjKXswfXh5ei9CCisKKy8oPz0oYSkpPy4vQgorCisvKD89KGEpKT8/Li9CCisKKy9eKD89KGEpKXswfWIoPzEpL0IKKworLyg/KERFRklORSkoYSkpP2IoPzEpL0IKKworL14oPz0oPzEpKT9bYXpdKFthYmNdKWQvQgorCisvXig/IWEpezB9XHcrL0IKKworLyg/PD0oYWJjKSk/eHl6L0IKKworL1s6YVs6YWJjXWI6XS9CCisKKy9eKGEoKjpBKShkfGUoKjpCKSl6fGFlcSkvYXV0b19jYWxsb3V0CisgICAgYWR6CisgICAgYWV6CisgICAgYWVxd2VydHkKKworLy4oKkYpLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjXD1waAorCisvXGJ0eXBlXGJcVyo/XGJ0ZXh0XGJcVyo/XGJqYXZhc2NyaXB0XGIvSQorCisvXGJ0eXBlXGJcVyo/XGJ0ZXh0XGJcVyo/XGJqYXZhc2NyaXB0XGJ8XGJ1cmxcYlxXKj9cYnNoZWxsOnw8aW5wdXRcYi4qP1xidHlwZVxiXFcqP1xiaW1hZ2VcYnxcYm9ua2V5dXBcYlxXKj9cPS9JCisKKy9hKCpTS0lQKWN8YigqQUNDRVBUKXwvSSxhZnRlcnRleHQKKyAgICBhCisKKy9hKCpTS0lQKWN8YigqQUNDRVBUKWNkKCpBQ0NFUFQpfHgvSQorICAgIGF4CisKKydhKigqQUNDRVBUKWInYWZ0ZXJ0ZXh0CisgICAgYWJjXD1ub3RlbXB0eV9hdHN0YXJ0CisgICAgYmJiXD1ub3RlbXB0eV9hdHN0YXJ0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcPW5vdGVtcHR5X2F0c3RhcnQKKworLygqQUNDRVBUKWEvSSxhZnRlcnRleHQKKyAgICBiYXgKKworL3ooKkFDQ0VQVClhL0ksYWZ0ZXJ0ZXh0CisgICAgYmF4emJ4CisKKy9eKD8+YSspKD8+KHorKSlcdy9CCisgICAgYWFhYXp6enpiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYXp6ICAKKworLyguKShcMXxhKD8yKSkvCisgICAgYmFiCisgICAgCisvXDF8KC4pKD9SKVwxLworICAgIGNiYmJjCisgICAgCisvKC4pKCg/KDEpY3xhKXxhKD8yKSkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYWEgIAorCisvKD9QPGFibj4oP1A9YWJuKXh4eCkvQgorCisvKGFcMXopL0IKKworL15hXHg0MXovYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGFBegorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYXg0MXoKKworL15hW21ceDQxXXovYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGFBegorCisvXmFceDF6L2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBheDF6CisKKy9eYVx1MDA0MXovYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGFBegorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYXUwMDQxegorCisvXmFbbVx1MDA0MV16L2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBhQXoKKworL15hXHUwNDF6L2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBhdTA0MXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFBegorCisvXmFcVTAwNDF6L2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBhVTAwNDF6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhQXoKKworLyg/KD89YyljfGQpKytZL0IKKworLyg/KD89YyljfGQpKitZL0IKKworL2FbXE5CXWMvCisgICAgYU5jCisgICAgCisvYVtCLVxOY10vCisKKy9hW0JcTmNdLworCisvKGEpKD8yKXswLDE5OTl9PyhiKS8KKworLyhhKSg/KERFRklORSkoYikpKD8yKXswLDE5OTl9Pyg/MikvCisKKyMgVGhpcyB0ZXN0LCB3aXRoIHNvbWV0aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gaW5kaXZpZHVhbCBsZXR0ZXJzLCBjYXVzZXMKKyMgZGlmZmVyZW50IGJlaGF2aW91ciBpbiBQZXJsLiBQZXJoYXBzIGl0IGRpc2FibGVzIHNvbWUgb3B0aW1pemF0aW9uOyBubyB0YWcgaXMKKyMgcGFzc2VkIGJhY2sgZm9yIHRoZSBmYWlsdXJlcywgd2hlcmVhcyBpbiBQQ1JFMiB0aGVyZSBpcyBhIHRhZy4KKyAgICAKKy8oQXxQKSgqOkEpKEJ8UCkgfCAoWHxQKShYfFApKCo6QikoWXxQKS94LG1hcmsKKyAgICBBQUJDCisgICAgWFhZWiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhBUVEgIAorICAgIFhBUVFYWlogIAorICAgIEFYUVFRIAorICAgIEFYWFFRUSAKKworIyBQZXJsIGRvZXNuJ3QgZ2l2ZSBtYXJrcyBmb3IgdGhlc2UsIHRob3VnaCBpdCBkb2VzIGlmIHRoZSBhbHRlcm5hdGl2ZXMgYXJlCisjIHJlcGxhY2VkIGJ5IHNpbmdsZSBsZXR0ZXJzLiAKKyAgICAKKy8oYnxxKSgqOm0pZnxhKCo6bil3L21hcmsKKyAgICBhdyAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYmMKKworLyhxfGIpKCo6bSlmfGEoKjpuKXcvbWFyaworICAgIGF3IAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiYworCisjIEFmdGVyIGEgcGFydGlhbCBtYXRjaCwgdGhlIGJlaGF2aW91ciBpcyBhcyBmb3IgYSBmYWlsdXJlLiAKKworL15hKCo6WCliY2RlL21hcmsKKyAgIGFiY1w9cHMKKyAgIAorIyBUaGVzZSBhcmUgaGVyZSBiZWNhdXNlIFBlcmwgZG9lc24ndCByZXR1cm4gYSBtYXJrLCBleGNlcHQgZm9yIHRoZSBmaXJzdC4KKworLyg/PSgqOngpKShxfCkvYWZ0ZXJ0ZXh0LG1hcmsKKyAgICBhYmMKKworLyg/PSgqOngpKSgoKjp5KXF8KS9hZnRlcnRleHQsbWFyaworICAgIGFiYworCisvKD89KCo6eCkpKD86KCo6eSlxfCkvYWZ0ZXJ0ZXh0LG1hcmsKKyAgICBhYmMKKworLyg/PSgqOngpKSg/PigqOnkpcXwpL2FmdGVydGV4dCxtYXJrCisgICAgYWJjCisKKy8oPz1hKCo6eCkpKD8hYSgqOnkpYykvYWZ0ZXJ0ZXh0LG1hcmsKKyAgICBhYgorCisvKD89YSgqOngpKSg/PWEoKjp5KWN8KS9hZnRlcnRleHQsbWFyaworICAgIGFiCisKKy8oLi4pXDEvCisgICAgYWJcPXBzCisgICAgYWJhXD1wcworICAgIGFiYWJcPXBzCisKKy8oLi4pXDEvaQorICAgIGFiXD1wcworICAgIGFiQVw9cHMKKyAgICBhQkFiXD1wcworCisvKC4uKVwxezIsfS8KKyAgICBhYlw9cHMKKyAgICBhYmFcPXBzCisgICAgYWJhYlw9cHMKKyAgICBhYmFiYVw9cHMKKyAgICBhYmFiYWJcPXBzCisgICAgYWJhYmFiXD1waAorICAgIGFiYWJhYmFcPXBzCisgICAgYWJhYmFiYVw9cGgKKworLyguLilcMXsyLH0vaQorICAgIGFiXD1wcworICAgIGFCYVw9cHMKKyAgICBhQkFiXD1wcworICAgIEFiYUJBXD1wcworICAgIGFiQUJBYlw9cHMKKyAgICBhQkFiYUJcPXBoCisgICAgYWJBQmFiQVw9cHMKKyAgICBhYmFCQUJhXD1waAorCisvKC4uKVwxezIsfT94L2kKKyAgICBhYlw9cHMKKyAgICBhYkFcPXBzCisgICAgYUJBYlw9cHMKKyAgICBhYmFCQVw9cHMKKyAgICBhYkFiYUJcPXBzCisgICAgYWJhQmFiQVw9cHMKKyAgICBhYkFiQUJhQnhcPXBzCisKKy9eKC4uKVwxLworICAgIGFiYVw9cHMKKworL14oLi4pXDF7MiwzfXgvCisgICAgYWJhXD1wcworICAgIGFiYWJhXD1wcworICAgIGFiYWJhXD1waAorICAgIGFiYWJhYngKKyAgICBhYmFiYWJhYnggIAorCisvXiguLilcMXsyLDN9P3gvCisgICAgYWJhXD1wcworICAgIGFiYWJhXD1wcworICAgIGFiYWJhXD1waAorICAgIGFiYWJhYngKKyAgICBhYmFiYWJhYnggIAorICAgIAorL14oLi4pKFwxezIsM30pYWIvCisgICAgYWJhYmFiYWIKKworL15cUi8KKyAgICBcclw9cHMKKyAgICBcclw9cGgKKyAgICAKKy9eXFJ7MiwzfXgvCisgICAgXHJcPXBzCisgICAgXHJcPXBoCisgICAgXHJcclw9cHMKKyAgICBcclxyXD1waAorICAgIFxyXHJcclw9cHMKKyAgICBcclxyXHJcPXBoCisgICAgXHJccngKKyAgICBcclxyXHJ4ICAgIAorCisvXlxSezIsM30/eC8KKyAgICBcclw9cHMKKyAgICBcclw9cGgKKyAgICBcclxyXD1wcworICAgIFxyXHJcPXBoCisgICAgXHJcclxyXD1wcworICAgIFxyXHJcclw9cGgKKyAgICBcclxyeAorICAgIFxyXHJccnggICAgCisgICAgCisvXlxSP3gvCisgICAgXHJcPXBzCisgICAgXHJcPXBoCisgICAgeAorICAgIFxyeCAgCisKKy9eXFIreC8KKyAgICBcclw9cHMKKyAgICBcclw9cGgKKyAgICBcclxuXD1wcworICAgIFxyXG5cPXBoCisgICAgXHJ4ICAKKworL15hJC9uZXdsaW5lPWNybGYKKyAgICBhXHJcPXBzCisgICAgYVxyXD1waAorCisvXmEkL20sbmV3bGluZT1jcmxmCisgICAgYVxyXD1wcworICAgIGFcclw9cGgKKworL14oYSR8YVxyKS9uZXdsaW5lPWNybGYKKyAgICBhXHJcPXBzCisgICAgYVxyXD1waAorCisvXihhJHxhXHIpL20sbmV3bGluZT1jcmxmCisgICAgYVxyXD1wcworICAgIGFcclw9cGgKKworLy4vbmV3bGluZT1jcmxmCisgICAgXHJcPXBzCisgICAgXHJcPXBoCisgIAorLy57MiwzfS9uZXdsaW5lPWNybGYKKyAgICBcclw9cHMKKyAgICBcclw9cGgKKyAgICBcclxyXD1wcworICAgIFxyXHJcPXBoCisgICAgXHJcclxyXD1wcworICAgIFxyXHJcclw9cGgKKworLy57MiwzfT8vbmV3bGluZT1jcmxmCisgICAgXHJcPXBzCisgICAgXHJcPXBoCisgICAgXHJcclw9cHMKKyAgICBcclxyXD1waAorICAgIFxyXHJcclw9cHMKKyAgICBcclxyXHJcPXBoCisKKyJBQihDKEQpKShFKEYpKT8oPyg/PVwyKSg/PVw0KSkiCisgICAgQUJDREdISVw9b3ZlY3Rvcj0wMQorICAgIAorIyBUaGVzZSBhcmUgYWxsIHJ1biBhcyByZWFsIG1hdGNoZXMgaW4gdGVzdCAxOyBoZXJlIHdlIGFyZSBqdXN0IGNoZWNraW5nIHRoZQorIyBzZXR0aW5ncyBvZiB0aGUgYW5jaG9yZWQgYW5kIHN0YXJ0bGluZSBiaXRzLiAgCisKKy8oPz4uKj9hKSg/PD1iYSkvSQorCisvKD86Lio/YSkoPzw9YmEpL0kKKworLy4qP2EoKlBSVU5FKWIvSQorCisvLio/YSgqUFJVTkUpYi9JcworCisvXmEoKlBSVU5FKWIvSXMKKworLy4qP2EoKlNLSVApYi9JCisKKy8oPz4uKj9hKWIvSXMKKworLyg/Pi4qP2EpYi9JCisKKy8oPz5eYSliL0lzCisKKy8oPz4uKj8pKD88PShhYmNkKXwod3h5eikpL0kKKworLyg/Pi4qKSg/PD0oYWJjZCl8KHd4eXopKS9JCisKKyIoPz4uKilmb28iSQorCisiKD8+Lio/KWZvbyJJCisKKy8oPz5eYWJjKS9JbQorCisvKD8+LiphYmMpL0ltCisKKy8oPzouKmFiYykvSW0KKworLyg/OihhKSsoP0MxKWJifGFhKD9DMiliKS8KKyAgICBhYWJcPWNhbGxvdXRfY2FwdHVyZQorICAgCisvKD86KGEpKysoP0MxKWJifGFhKD9DMiliKS8KKyAgICBhYWJcPWNhbGxvdXRfY2FwdHVyZQorICAgIAorLyg/Oig/PihhKSkoP0MxKWJifGFhKD9DMiliKS8KKyAgICBhYWJcPWNhbGxvdXRfY2FwdHVyZQorCisvKD86KD8xKSg/QzEpeHxhYig/QzIpKSgoYSkpezB9LworICAgIGFhYlw9Y2FsbG91dF9jYXB0dXJlCisKKy8oPzEpKD9DMSkoKGEpKD9DMikpezB9LworICAgIGFhYlw9Y2FsbG91dF9jYXB0dXJlCisKKy8oPzooYSkrKD9DMSliYnxhYSg/QzIpYikrKy8KKyAgICBhYWJcPWNhbGxvdXRfY2FwdHVyZQorICAgIGFhYlw9Y2FsbG91dF9jYXB0dXJlLG92ZWN0b3I9MQorCisvKGFiKXh8YWIvCisgICAgYWJcPW92ZWN0b3I9MAorICAgIGFiXD1vdmVjdG9yPTEKKyAgCisvKD88PTEyMykoKk1BUks6eHgpYWJjL21hcmsKKyAgICB4eHh4MTIzYVw9cGgKKyAgICB4eHh4MTIzYVw9cHMKKyAgICAKKy8xMjNcS2FiYy9zdGFydGNoYXIKKyAgICB4eHh4MTIzYVw9cGgKKyAgICB4eHh4MTIzYVw9cHMKKworL14oPyg/PWEpYWF8YmIpL2F1dG9fY2FsbG91dAorICAgIGJiCisKKy8oP0MxKV4oP0MyKSg/KD9DOTkpKD89KD9DMylhKD9DNCkpKD9DNSlhKD9DNilhKD9DNyl8KD9DOCliKD9DOSliKD9DMTApKSg/QzExKS8KKyAgICBiYgorCisjIFBlcmwgc2VlbXMgdG8gaGF2ZSBhIGJ1ZyB3aXRoIHRoaXMgb25lLgorCisvYWFhYWEoKkNPTU1JVCkoKlBSVU5FKWJ8YStjLworICAgIGFhYWFhYWMKKyAgICAKKyMgSGVyZSBhcmUgc29tZSB0aGF0IFBlcmwgdHJlYXRzIGRpZmZlcmVudGx5IGJlY2F1c2Ugb2YgdGhlIHdheSBpdCBoYW5kbGVzCisjIGJhY2t0cmFja2luZyB2ZXJicy4gCisKKy8oPyFhKCpDT01NSVQpYilhY3xhZC8KKyAgICAgYWMKKyAgICAgYWQgCisKKy9eKD8hYSgqVEhFTilifGFjKS4uLworICAgICBhZCAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICBhYworCisvXig/PWEoKlRIRU4pYnxhYykvCisgICAgYWMKKyAgICAKKy9cQS4qPyg/OmF8YigqVEhFTiljKS8KKyAgICBiYQorCisvXEEuKj8oPzphfGIoKlRIRU4pYykrKy8KKyAgICBiYQorCisvXEEuKj8oPzphfGIoKlRIRU4pY3xkKS8KKyAgICBiYQorCisvKD86KGEoKk1BUks6WClhKygqU0tJUDpYKWIpKXswfSg/Oig/MSl8YWFjKS8KKyAgICBhYWMgCisKKy9cQS4qPyhhfGIoKlRIRU4pYykvCisgICAgYmEKKworL14oQSgqVEhFTilCfEEoKlRIRU4pRCkvCisgICAgQUQgICAgICAgICAgIAorICAgIAorLyg/IWIoKlRIRU4pYSlibnxibm4vCisgICAgYm5uCisKKy8oPyg/PWIoKlNLSVApYSlibnxibm4pLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYm5uCisKKy8oPz1iKCpUSEVOKWF8KWJufGJubi8KKyAgICBibm4KKworIyBUaGlzIHRlc3QgY2F1c2VzIGEgc2VnZmF1bHQgd2l0aCBQZXJsIDUuMTguMCAKKworL14oPz0oYSkpezB9Yig/MSkvCisgICAgYmFja2dhbW1vbgorCisvKD98KD88bj5mKXwoPzxuPmIpKS9JLGR1cG5hbWVzCisKKy8oPzxhPmFiYykoPzxhPnopXGs8YT4oKS9JQixkdXBuYW1lcworCisvYSpbYmNkXS9CCisKKy9bYmNkXSphL0IKKworIyBBIGNvbXBsZXRlIHNldCBvZiB0ZXN0cyBmb3IgYXV0by1wb3NzZXNzaWZpY2F0aW9uIG9mIGNoYXJhY3RlciB0eXBlcywgYnV0CisjIG9taXR0aW5nIFxDIGJlY2F1c2UgaXQgbWlnaHQgYmUgZGlzYWJsZWQgKGl0IGhhcyBpdHMgb3duIHRlc3RzKS4KKworL1xEK1xEIFxEK1xkIFxEK1xTIFxEK1xzIFxEK1xXIFxEK1x3IFxEKy4gXEQrXFIgXEQrXEggXEQrXGggXEQrXFYgXEQrXHYgXEQrXFogXEQrXHogXEQrJC9CeAorCisvXGQrXEQgXGQrXGQgXGQrXFMgXGQrXHMgXGQrXFcgXGQrXHcgXGQrLiBcZCtcUiBcZCtcSCBcZCtcaCBcZCtcViBcZCtcdiBcZCtcWiBcZCtceiBcZCskL0J4CisKKy9cUytcRCBcUytcZCBcUytcUyBcUytccyBcUytcVyBcUytcdyBcUysuIFxTK1xSIFxTK1xIIFxTK1xoIFxTK1xWIFxTK1x2IFxTK1xaIFxTK1x6IFxTKyQvQngKKworL1xzK1xEIFxzK1xkIFxzK1xTIFxzK1xzIFxzK1xXIFxzK1x3IFxzKy4gXHMrXFIgXHMrXEggXHMrXGggXHMrXFYgXHMrXHYgXHMrXFogXHMrXHogXHMrJC9CeAorCisvXFcrXEQgXFcrXGQgXFcrXFMgXFcrXHMgXFcrXFcgXFcrXHcgXFcrLiBcVytcUiBcVytcSCBcVytcaCBcVytcViBcVytcdiBcVytcWiBcVytceiBcVyskL0J4CisKKy9cdytcRCBcdytcZCBcdytcUyBcdytccyBcdytcVyBcdytcdyBcdysuIFx3K1xSIFx3K1xIIFx3K1xoIFx3K1xWIFx3K1x2IFx3K1xaIFx3K1x6IFx3KyQvQngKKworL1xSK1xEIFxSK1xkIFxSK1xTIFxSK1xzIFxSK1xXIFxSK1x3IFxSKy4gXFIrXFIgXFIrXEggXFIrXGggXFIrXFYgXFIrXHYgXFIrXFogXFIrXHogXFIrJC9CeAorCisvXEgrXEQgXEgrXGQgXEgrXFMgXEgrXHMgXEgrXFcgXEgrXHcgXEgrLiBcSCtcUiBcSCtcSCBcSCtcaCBcSCtcViBcSCtcdiBcSCtcWiBcSCtceiBcSCskL0J4CisKKy9caCtcRCBcaCtcZCBcaCtcUyBcaCtccyBcaCtcVyBcaCtcdyBcaCsuIFxoK1xSIFxoK1xIIFxoK1xoIFxoK1xWIFxoK1x2IFxoK1xaIFxoK1x6IFxoKyQvQngKKworL1xWK1xEIFxWK1xkIFxWK1xTIFxWK1xzIFxWK1xXIFxWK1x3IFxWKy4gXFYrXFIgXFYrXEggXFYrXGggXFYrXFYgXFYrXHYgXFYrXFogXFYrXHogXFYrJC9CeAorCisvXHYrXEQgXHYrXGQgXHYrXFMgXHYrXHMgXHYrXFcgXHYrXHcgXHYrLiBcditcUiBcditcSCBcditcaCBcditcViBcditcdiBcditcWiBcditceiBcdiskL0J4CisKKy8gYStcRCAgYStcZCAgYStcUyAgYStccyAgYStcVyAgYStcdyAgYSsuICBhK1xSICBhK1xIICBhK1xoICBhK1xWICBhK1x2ICBhK1xaICBhK1x6ICBhKyQvQngKKworL1xuK1xEIFxuK1xkIFxuK1xTIFxuK1xzIFxuK1xXIFxuK1x3IFxuKy4gXG4rXFIgXG4rXEggXG4rXGggXG4rXFYgXG4rXHYgXG4rXFogXG4rXHogXG4rJC9CeAorCisvIC4rXEQgIC4rXGQgIC4rXFMgIC4rXHMgIC4rXFcgIC4rXHcgIC4rLiAgLitcUiAgLitcSCAgLitcaCAgLitcViAgLitcdiAgLitcWiAgLitceiAgLiskL0J4CisKKy8gLitcRCAgLitcZCAgLitcUyAgLitccyAgLitcVyAgLitcdyAgLisuICAuK1xSICAuK1xIICAuK1xoICAuK1xWICAuK1x2ICAuK1xaICAuK1x6ICAuKyQvQnN4CisKKy8gXEQrJCAgXGQrJCAgXFMrJCAgXHMrJCAgXFcrJCAgXHcrJCAgXFIrJCAgXEgrJCAgXGgrJCAgXFYrJCBcdiskICBhKyQgICBcbiskICAuKyQgIC4rJC9CbXgKKworLyg/PWErKWEoYSspKythL0IKKworL2ErKGJifGNjKWErKD86YmJ8Y2MpYSsoPz5iYnxjYylhKyg/OmJifGNjKSthKyhhYSlhKyg/OmJifGFhKS9CCisKKy9hKyhiYnxjYyk/I2ErKD86YmJ8Y2MpPz8jYSsoPzpiYnxjYyk/KyNhKyg/OmJifGNjKSojYSsoYmJ8Y2MpP2EjYSsoPzphYSk/L0IKKworL2ErKD86YmIpP2EjYSsoPzp8fHwpI2ErKD86fGIpYSNhKyg/Onx8fCk/YS9CCisKKy9bYWJdKi9CCisgICAgYWFhYQorCisvW2FiXSo/L0IKKyAgICBhYWFhCisKKy9bYWJdPy9CCisgICAgYWFhYQorCisvW2FiXT8/L0IKKyAgICBhYWFhCisKKy9bYWJdKy9CCisgICAgYWFhYQorCisvW2FiXSs/L0IKKyAgICBhYWFhCisKKy9bYWJdezIsM30vQgorICAgIGFhYWEKKworL1thYl17MiwzfT8vQgorICAgIGFhYWEKKworL1thYl17Mix9L0IKKyAgICBhYWFhCisKKy9bYWJdezIsfT8vQgorICAgIGFhYWEKKworL1xkK1xzezAsNX09XHMqXFM/PVx3ezAsNH1cVyovQgorCisvW2EtZF17NSwxMn1bZS16MC05XSojW15hLXpdK1tiLXldKmFbMi03XT9bXjAtOWEtel0rL0IKKworL1thLXpdKlxzI1sgXHRdP1xTI1thLWNdKlxTI1tDLUddKz9cZCNbNC04XSpcRCNbNC05LF0qXEQjWyEkXXswLDV9XHcjW00tWGYtbF0rXFcjW2EtYyxdP1xXL0IKKworL2ErKGFhfGJiKSpjI2EqKGJifGNjKSphI2E/KGJifGNjKSpkI1thLWZdKihnfGhoKSpmL0IKKworL1thLWZdKihnfGhofGkpKmkjW2EteF17NCx9KHl7MCw2fSkqeSNbYS1rXSsobGx8bW0pK24vQgorCisvW2EtZl0qKD8+Z2d8aGgpKyNbYS1mXSooPz5nZ3xoaCk/I1thLWZdKig/PmdnfGhoKSphI1thLWZdKig/PmdnfGhoKSpoL0IKKworL1thLWNdKmQvSUIKKworL1thLWNdK2QvSUIKKworL1thLWNdP2QvSUIKKworL1thLWNdezQsNn1kL0lCCisKKy9bYS1jXXswLDZ9ZC9JQgorCisjIEVuZCBvZiBzcGVjaWFsIGF1dG8tcG9zc2Vzc2l2ZSB0ZXN0cyAKKworL15BXG97MTIzOX1CLworICAgIEFcMTIzQgorCisvXkFcb0IvCisgICAgCisvXkFceHt6en1CLworCisvXkFceHsxMlovCisKKy9eQVx4ey8KKworL1thYl0rKy9CLG5vX2F1dG9fcG9zc2VzcworCisvW15hYl0qKy9CLG5vX2F1dG9fcG9zc2VzcworCisvYXs0fSsvQixub19hdXRvX3Bvc3Nlc3MKKworL2F7NH0rL0JpLG5vX2F1dG9fcG9zc2VzcworCisvW2EtWzpkaWdpdDpdXSsvCisKKy9bQS1bOmRpZ2l0Ol1dKy8KKworL1thLVsueHh4Ll1dKy8KKworL1thLVs9eHh4PV1dKy8KKworL1thLVsheHh4IV1dKy8KKworL1tBLVsheHh4IV1dKy8KKyAgICBBXV1dCisKKy9bYS1cZF0rLworCisvKD88MGFiYz54eCkvCisKKy8oPyYxYWJjKXh4KD88MWFiYz55KS8KKworLyg/PGFiLWNkPnh4KS8KKworLyg/JzBhYmMneHgpLworCisvKD9QPDBhYmM+eHgpLworCisvXGs8NWdoaj4vCisKKy9cayc1Z2hqJy8KKworL1xrezJmZ2h9LworCisvKD9QPTh5dWtpKS8KKworL1xnezRkZn0vCisKKy8oPyYxYWJjKXh4KD88MWFiYz55KS8KKworLyg/UD4xYWJjKXh4KD88MWFiYz55KS8KKworL1xnJzNnaCcvCisKKy9cZzw1Zmc+LworCisvKD8oPDRnaD4pYWJjKS8KKworLyg/KCc0Z2gnKWFiYykvCisKKy8oPyg0Z2gpYWJjKS8KKworLyg/KFImNnloKWFiYykvCisKKy8oKChhXDIpfChhKilcZzwtMT4pKSphPy9CCisKKyMgVGVzdCB0aGUgdWdseSAic3RhcnQgb3IgZW5kIG9mIHdvcmQiIGNvbXBhdGliaWxpdHkgc3ludGF4LgorCisvW1s6PDpdXXJlZFtbOj46XV0vQgorICAgIGxpdHRsZSByZWQgcmlkaW5nIGhvb2QKKyAgICBhIC9yZWQvIHRoaW5nIAorICAgIHJlZCBpcyBhIGNvbG91cgorICAgIHB1dCBpdCBhbGwgb24gcmVkICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIG5vIHJlZHVjdGlvbgorICAgIEFsZnJlZCBXaW5pZnJlZAorICAgIAorL1thWzo8Ol1dIHNob3VsZCBnaXZlIGVycm9yLworCisvKD89YWJcSykvYWZ0ZXJ0ZXh0CisgICAgYWJjZFw9c3RhcnRjaGFyCisKKy9hYmNkL25ld2xpbmU9bGYsZmlyc3RsaW5lCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eFxueGFiY2QKKyAgICAKKyMgVGVzdCBzdGFjayBndWFyZCBleHRlcm5hbCBjYWxscy4KKworLygoKGEpKSkvc3RhY2tndWFyZD0xCisKKy8oKChhKSkpL3N0YWNrZ3VhcmQ9MgorCisvKCgoYSkpKS9zdGFja2d1YXJkPTMKKworLygoKCgoYSkpKSkpLworCisjIEVuZCBzdGFjayBndWFyZCB0ZXN0cworCisvXlx3Kyg/PlxzKikoPzw9XHcpL0IKKworL1xvdGhpbmcvCisKKy9cb3t9LworCisvXG97d2hhdGV2ZXJ9LworCisvXHh0aGluZy8KKworL1x4e30vCisKKy9ceHt3aGF0ZXZlcn0vCisKKy9BXDhCLworCisvQVw5Qi8KKworIyBUaGlzIG9uZSBpcyBoZXJlIGJlY2F1c2UgUGVybCBmYWlscyB0byBtYXRjaCAiMTIiIGZvciB0aGlzIHBhdHRlcm4gd2hlbiB0aGUgJCAKKyMgaXMgcHJlc2VudC4KKyAgICAKKy9eKD8oPz1hYmMpXHd7M306fFxkXGQpJC8KKyAgICBhYmM6CisgICAgMTIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMworICAgIHh5eiAgICAKKworIyBQZXJsIGdldHMgdGhpcyBvbmUgd3JvbmcsIGdpdmluZyAiYSIgYXMgdGhlIGFmdGVyIHRleHQgZm9yIGNhIGFuZCBmYWlsaW5nIHRvIAorIyBtYXRjaCBmb3IgY2QuCisKKy8oPyg/PWFiKWFiKS9hZnRlcnRleHQKKyAgICBhYnh4eAorICAgIGNhCisgICAgY2QgCisgICAgCisjIFRoaXMgc2hvdWxkIHRlc3QgYm90aCBwYXRocyBmb3IgcHJvY2Vzc2luZyBPUF9SRUNVUlNFLiAKKworLyg/KFIpYSt8KD9SKWIpLworICAgIGFhYWFiY2RlCisgICAgYWFhYWJjZGVcPW92ZWN0b3I9MTAwCisKKy9hKj9iKj8vCisgICAgYWIKKworLygqTk9URU1QVFkpYSo/Yio/LworICAgIGFiCisgICAgYmEKKyAgICBjYiAgCisKKy8oKk5PVEVNUFRZX0FUU1RBUlQpYSo/Yio/L2FmdGVydGV4dAorICAgIGFiCisgICAgY2RhYiAKKworLyg/KFZFUlNJT04+PTEwLjApeWVzfG5vKS9JCisgICAgeWVzbm8KKyAgICAKKy8oPyhWRVJTSU9OPTgpeWVzKXszfS9CSSxhZnRlcnRleHQKKyAgICB5ZXNubworCisvKD8oVkVSU0lPTj04KXllc3xubyl7M30vSQorICAgIHllc25vbm9ub3llcworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeWVzbm8gICAKKworLyg/Oig/PFZFUlNJT04+YWJjKXx4eXopKD8oVkVSU0lPTil5ZXN8bm8pL0kKKyAgICBhYmN5ZXMKKyAgICB4eXpubworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjbm8KKyAgICB4eXp5ZXMgICAgCisKKy8oPyhWRVJTSU9OPDEwKXllc3xubykvCisKKy8oPyhWRVJTSU9OPjEwKXllc3xubykvCisKKy8oPyhWRVJTSU9OPj0xMC4wLjApeWVzfG5vKS8KKworLyg/KFZFUlNJT049MTAuMTAxKXllc3xubykvCisKKy9hYmNkL0kKKworL2FiY2QvSSxub19zdGFydF9vcHRpbWl6ZQorCisvKHxhYikqP2QvSQorICAgYWJkCisgICB4eWQgCisKKy8ofGFiKSo/ZC9JLG5vX3N0YXJ0X29wdGltaXplCisgICBhYmQKKyAgIHh5ZCAKKworL1xrPEE+Kig/PEE+YWEpKD88QT5iYikvbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGFhYmIKKworLygoKCgoYSkpKSkpL3BhcmVuc19uZXN0X2xpbWl0PTIKKworL2FiYy9yZXBsYWNlPVhZWgorICAgIDEyMzEyMworICAgIDEyM2FiYzEyMworICAgIDEyM2FiYzEyM2FiYzEyMworICAgIDEyMzEyM1w9emVyb190ZXJtaW5hdGUKKyAgICAxMjNhYmMxMjNcPXplcm9fdGVybWluYXRlCisgICAgMTIzYWJjMTIzYWJjMTIzXD16ZXJvX3Rlcm1pbmF0ZQorCisvYWJjL2cscmVwbGFjZT1YWVoKKyAgICAxMjNhYmMxMjMKKyAgICAxMjNhYmMxMjNhYmMxMjMKKworL2FiYy9yZXBsYWNlPVgkJFoKKyAgICAxMjNhYmMxMjMKKworL2FiYy9nLHJlcGxhY2U9WCQkWgorICAgIDEyM2FiYzEyM2FiYzEyMworCisvYShiKWMoZCllL3JlcGxhY2U9WCQxWSR7Mn1aCisgICAgImFiY2RlIgorCisvYShiKWMoZCllL3JlcGxhY2U9WCQxWSR7Mn1aLGdsb2JhbAorICAgICJhYmNkZS1hYmNkZSIKKworL2EoPzxPTkU+YiljKD88VFdPPmQpZS9yZXBsYWNlPVgkT05FKyR7VFdPfVoKKyAgICAiYWJjZGUiCisKKy9hKD88T05FPmIpYyg/PFRXTz5kKWUvZyxyZXBsYWNlPVgkT05FKyR7VFdPfVoKKyAgICAiYWJjZGUtYWJjZGUtIgorCisvYWJjL3JlcGxhY2U9YSQrKworICAgIDEyM2FiYworCisvYWJjL3JlcGxhY2U9YSRiYWQKKyAgICAxMjNhYmMKKworL2FiYy9yZXBsYWNlPWEke0EyMzQ1Njc4OTAxMjM0NTY3ODlfMTIzNDU2Nzg5MDEyfXoKKyAgICAxMjNhYmMKKworL2FiYy9yZXBsYWNlPWEke0EyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyM316CisgICAgMTIzYWJjCisKKy9hYmMvcmVwbGFjZT1hJHtiY2QKKyAgICAxMjNhYmMKKworL2FiYy9yZXBsYWNlPWEke2IrZH16CisgICAgMTIzYWJjCisKKy9hYmMvcmVwbGFjZT1bMTBdWFlaCisgICAgMTIzYWJjMTIzCisKKy9hYmMvcmVwbGFjZT1bOV1YWVoKKyAgICAxMjNhYmMxMjMKKyAgICAKKy9hYmMvcmVwbGFjZT14eXoKKyAgICAxYWJjMlw9cGFydGlhbF9oYXJkCisKKy9hYmMvcmVwbGFjZT14eXoKKyAgICAxMjNhYmM0NTYKKyAgICAxMjNhYmM0NTZcPXJlcGxhY2U9cHFyCisgICAgMTIzYWJjNDU2YWJjNzg5CisgICAgMTIzYWJjNDU2YWJjNzg5XD1nCisKKy8oPzw9YWJjKSh8ZGVmKS9nLHJlcGxhY2U9PCQwPgorICAgIDEyM2FiY3h5emFiY2RlZjc4OWFiY3BxcgorICAgIAorLy4vcmVwbGFjZT0kMAorICAgIGEKKyAgICAKKy8oLikoLikvcmVwbGFjZT0kMiskMQorICAgIGFiYworICAgIAorLyg/PEE+LikoPzxCPi4pL3JlcGxhY2U9JEIrJEEKKyAgICBhYmMKKyAgICAKKy8oLikoLikvZyxyZXBsYWNlPSQyJDEKKyAgICBhYmNkZWZnaCAgCisgICAgCisvKCo6cGVhcilhcHBsZXwoKjpvcmFuZ2UpbGVtb258KCo6c3RyYXdiZXJyeSlibGFja2JlcnJ5L2cscmVwbGFjZT0keypNQVJLfQorICAgIGFwcGxlIGxlbW9uIGJsYWNrYmVycnkKKyAgICBhcHBsZSBzdHJ1ZGVsCisgICAgZnJ1aXRsZXNzICAKKworLygqOnBlYXIpYXBwbGV8KCo6b3JhbmdlKWxlbW9ufCgqOnN0cmF3YmVycnkpYmxhY2tiZXJyeS9yZXBsYWNlPSR7Kk1BUkt9IHNhdWNlLAorICAgIGFwcGxlIGxlbW9uIGJsYWNrYmVycnkKKworLygqOnBlYXIpYXBwbGV8KCo6b3JhbmdlKWxlbW9ufCgqOnN0cmF3YmVycnkpYmxhY2tiZXJyeS9nLHJlcGxhY2U9PCQqTUFSSz4KKyAgICBhcHBsZSBsZW1vbiBibGFja2JlcnJ5CisgICAgYXBwbGUgc3RydWRlbAorICAgIGZydWl0bGVzcyAgCisgICAgCisvKCo6cGVhcilhcHBsZS9nLHJlcGxhY2U9JHsqTUFSS0lOR30gCisgICAgYXBwbGUgbGVtb24gYmxhY2tiZXJyeQorCisvKCo6cGVhcilhcHBsZS9nLHJlcGxhY2U9JHsqTUFSSy10aW1lCisgICAgYXBwbGUgbGVtb24gYmxhY2tiZXJyeQorCisvKCo6cGVhcilhcHBsZS9nLHJlcGxhY2U9JHsqbWFya30gCisgICAgYXBwbGUgbGVtb24gYmxhY2tiZXJyeQorCisvKCo6cGVhcilhcHBsZXwoKjpvcmFuZ2UpbGVtb258KCo6c3RyYXdiZXJyeSlibGFja2JlcnJ5L2cscmVwbGFjZT08JCpNQVJLRVQ+CisgICAgYXBwbGUgbGVtb24gYmxhY2tiZXJyeQorCisvKCo6cGVhcilhcHBsZXwoKjpvcmFuZ2UpbGVtb258KCo6c3RyYXdiZXJyeSlibGFja2JlcnJ5L2cscmVwbGFjZT1bMjJdJHsqTUFSS30KKyAgICBhcHBsZSBsZW1vbiBibGFja2JlcnJ5CisgICAgYXBwbGUgbGVtb24gYmxhY2tiZXJyeVw9c3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGgKKworLygqOnBlYXIpYXBwbGV8KCo6b3JhbmdlKWxlbW9ufCgqOnN0cmF3YmVycnkpYmxhY2tiZXJyeS9nLHJlcGxhY2U9WzIzXSR7Kk1BUkt9CisgICAgYXBwbGUgbGVtb24gYmxhY2tiZXJyeQorCisvYWJjLworICAgIDEyM2FiYzEyM1w9cmVwbGFjZT1bOV1YWVoKKyAgICAxMjNhYmMxMjNcPXN1YnN0aXR1dGVfb3ZlcmZsb3dfbGVuZ3RoLHJlcGxhY2U9WzldWFlaCisgICAgMTIzYWJjMTIzXD1zdWJzdGl0dXRlX292ZXJmbG93X2xlbmd0aCxyZXBsYWNlPVs2XVhZWgorICAgIDEyM2FiYzEyM1w9c3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGgscmVwbGFjZT1bMV1YWVoKKyAgICAxMjNhYmMxMjNcPXN1YnN0aXR1dGVfb3ZlcmZsb3dfbGVuZ3RoLHJlcGxhY2U9WzBdWFlaCisKKy9hKGIpYy8KKyAgICAxMjNhYmMxMjNcPXJlcGxhY2U9WzldeCQxegorICAgIDEyM2FiYzEyM1w9c3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGgscmVwbGFjZT1bOV14JDF6CisgICAgMTIzYWJjMTIzXD1zdWJzdGl0dXRlX292ZXJmbG93X2xlbmd0aCxyZXBsYWNlPVs2XXgkMXoKKyAgICAxMjNhYmMxMjNcPXN1YnN0aXR1dGVfb3ZlcmZsb3dfbGVuZ3RoLHJlcGxhY2U9WzFdeCQxegorICAgIDEyM2FiYzEyM1w9c3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGgscmVwbGFjZT1bMF14JDF6CisKKyIoKD89KD8oPz0oPyg/PSg/KD89KCkpKSkpKSkpKSIKKyAgICBhCisKKyIoPyg/PSk9PSkoKCgoKCgoKCg/PSkpKSkpKSkpKSIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKKworLyhhKShiKXwoYykvCisgICAgWGNYXD1vdmVjdG9yPTIsZ2V0PTEsZ2V0PTIsZ2V0PTMsZ2V0PTQsZ2V0YWxsCisgICAgCisveCg/PWFiXEspLworICAgIHhhYlw9Z2V0PTAgCisgICAgeGFiXD1jb3B5PTAgCisgICAgeGFiXD1nZXRhbGwKKworLyg/PEE+YSl8KD88QT5iKS9kdXBuYW1lcworICAgIGFcPW92ZWN0b3I9MSxjb3B5PUEsZ2V0PUEsZ2V0PTIKKyAgICBhXD1vdmVjdG9yPTIsY29weT1BLGdldD1BLGdldD0yCisgICAgYlw9b3ZlY3Rvcj0yLGNvcHk9QSxnZXQ9QSxnZXQ9MgorCisvYShiKWMoZCkvCisgICAgYWJjXD1waCxjb3B5PTAsY29weT0xLGdldGFsbAorCisvXmFiYy9pbmZvCisKKy9eYWJjL2luZm8sbm9fZG90c3Rhcl9hbmNob3IKKworLy4qXGQvaW5mbyxhdXRvX2NhbGxvdXQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYQorCisvLipcZC9pbmZvLG5vX2RvdHN0YXJfYW5jaG9yLGF1dG9fY2FsbG91dAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhCisKKy8uKlxkL2RvdGFsbCxpbmZvCisKKy8uKlxkL2RvdGFsbCxub19kb3RzdGFyX2FuY2hvcixpbmZvCisKKy8oKk5PX0RPVFNUQVJfQU5DSE9SKSg/cykuKlxkL2luZm8KKworJ14oPzooYSl8YikoPygxKUF8QiknCisgICAgYUExMjNcPW92ZWN0b3I9MQorICAgIGFBMTIzXD1vdmVjdG9yPTIKKworJ14oPzooPzxBQT5hKXxiKSg/KDxBQT4pQXxCKScKKyAgICBhQTEyM1w9b3ZlY3Rvcj0xCisgICAgYUExMjNcPW92ZWN0b3I9MgorCisnXig/PEFBPikoPzooPzxBQT5hKXxiKSg/KDxBQT4pQXxCKSdkdXBuYW1lcworICAgIGFBMTIzXD1vdmVjdG9yPTEKKyAgICBhQTEyM1w9b3ZlY3Rvcj0yCisgICAgYUExMjNcPW92ZWN0b3I9MworCisnXig/Oig/PEFBPlgpfCkoPzooPzxBQT5hKXxiKVxre0FBfSdkdXBuYW1lcworICAgIGFhMTIzXD1vdmVjdG9yPTEKKyAgICBhYTEyM1w9b3ZlY3Rvcj0yCisgICAgYWExMjNcPW92ZWN0b3I9MworCisvKD88TjExMT4oP0opKD88TjExMT4xKDExMTExMSkxMXwpMXwxfCkoPyg8TjExMT4pMSkvCisKKy8oPzxOPig/SikoPzxOPikpKD8tSilcazxOPi8KKworIyBRdWFudGlmaWVycyBhcmUgbm90IGFsbG93ZWQgb24gY29uZGl0aW9uIGFzc2VydGlvbnMsIGJ1dCBhcmUgb3RoZXJ3aXNlCisjIE9LIGluIGNvbmRpdGlvbnMuCisKKy8oPyg/PTApPykrLworCisvKD8oPz0wKSg/PTAwKT8wMDc2NSkvCisgICAgIDAwNzY1CisKKy8oPyg/PTApKD89MDApPzAwNzY1fCg/ITMpLjU2KS8KKyAgICAgMDA3NjUKKyAgICAgNDU2CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAgMzU2ICAgCisKKydeKGEpKisoXHcpJworICAgIGcKKyAgICBnXD1vdmVjdG9yPTEgCisKKydeKD86YSkqKyhcdyknCisgICAgZworICAgIGdcPW92ZWN0b3I9MSAKKyAgICAKKyMgVGhlc2UgdHdvIHBhdHRlcm4gc2hvd2VkcyB1cCBjb21waWxlLXRpbWUgYnVncworCisiKCg/Mil7MCwxOTk5fSgpKT8iCisKKy8oKD8rMSkoXDEpKS9CCisKKyMgQ2FsbG91dHMgd2l0aCBzdHJpbmcgYXJndW1lbnRzCisKKy9hKD9DIi8KKworL2EoP0MiYS8KKworL2EoP0MiYSIvCisKKy9hKD9DImEiYmNkZSg/QyJiIil4eXovCisKKy9hKD9DImEpYiIiYyIpL0IKKworL2FiKD9DIiBhbnkgdGV4dCB3aXRoIHNwYWNlcyAiKWNkZS9CCisgICAgYWJjZGUKKyAgICAxMmFiY2RlCisKKy9eYShiKWMoP0MxKWRlZi8KKyAgICAgIGFiY2RlZgorCisvXmEoYiljKD9DIkFCIilkZWYvCisgICAgICBhYmNkZWYKKworL15hKGIpYyg/QzEpZGVmLworICAgICAgYWJjZGVmXD1jYWxsb3V0X2NhcHR1cmUKKworL15hKGIpYyg/Q3tBQn0pZGVmL0IKKyAgICAgIGFiY2RlZlw9Y2FsbG91dF9jYXB0dXJlCisKKy8oP0NgYWBgYmApKD9DJ2EnJ2InKSg/QyJhIiJiIikoP0NeYV5eYl4pKD9DJWElJWIlKSg/QyNhIyNiIykoP0MkYSQkYiQpKD9De2F9fWJ9KS9CLGNhbGxvdXRfaW5mbworCisvKD86YSg/Q2Bjb2RlYCkpezN9L0IKKworL14oPyg/QzI1KSg/PWFiYylhYmNkfHh5eikvQixjYWxsb3V0X2luZm8KKyAgICBhYmNkZWZnCisgICAgeHl6MTIzIAorCisvXig/KD9DJGFiYyQpKD89YWJjKWFiY2R8eHl6KS9CCisgICAgYWJjZGVmZworICAgIHh5ejEyMyAKKworL15hYig/QydmaXJzdCcpY2QoP0Mic2Vjb25kIillZi8KKyAgICBhYmNkZWZnCisKKy8oPzphKD9DYGNvZGVgKSl7M31YLworICAgIGFhYVhZCisKKyMgQmluYXJ5IHplcm8gaW4gY2FsbG91dCBzdHJpbmcKKyMgIGEgICggID8gIEMgICcgIHggICAgIHogICcgICkgIGIKKy8gNjEgMjggM2YgNDMgMjcgNzggMDAgN2EgMjcgMjkgNjIvaGV4LGNhbGxvdXRfaW5mbworICAgIGFiY2RlZmdoCisKKy8oPyg/ISleKS8KKworLyg/KD8hKWF8YikvCisgICAgYmJiCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWFhIAorCisjIEpJVCBnaXZlcyBhIGRpZmZlcmVudCBlcnJvciBtZXNzYWdlIGZvciB0aGUgaW5maW5pdGUgcmVjdXJzaW9uCisKKyIoKk5PX0pJVCkoKD8yKSspKCg/MSkpeyIKKyAgICBhYmNkeworCisjIFBlcmwgZmFpbHMgdG8gZGlhZ25vc2UgdGhlIGFic2VuY2Ugb2YgYW4gYXNzZXJ0aW9uCisKKyIoPyg/PEU+LiohLiopPykiCisKKyJYKCg/MikoKSorKXsyfSsiQgorCisiWCgoPzIpKCkqKyl7Mn0iQgorCisvKD88PVxiQUJRKDMoPy03KSkpLworCisvKD88PVxiQUJRKDMoPys3KSkpLworCisiOyg/PD0oKSgoPzMpKSgoPzIpKSkiCisKKyMgUGVybCBsb29wcyBvbiB0aGlzIChQQ1JFMiB1c2VkIHRvISkKKworLyg/PD1cS2EpL2csYWZ0ZXJ0ZXh0CisgICAgYWFhYWEKKworLyg/PD1cS2EpL2FsdGdsb2JhbCxhZnRlcnRleHQKKyAgICBhYWFhYQorCisvKCg/Mil7NzN9KD8yKSkoKD8xKSkvaW5mbworCisvYWJjLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXFs5eCF4eHgoXXs5OTk5fQorICAgIAorLyhhYmMpKi8KKyAgICBcW2FiY117NX0gCisKKy9eL2dtCisgICAgXG5cblxuCisKKy9eL2dtLGFsdF9jaXJjdW1mbGV4CisgICAgXG5cblxuCisKKy8oKCgoKCgoKHgpKSkpKSkpKVw4MS8KKyAgICB4eDEKKworLygoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoeCkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpXDgwLworICAgIHh4CisKKy9cODAvCisKKy9BXDhCXDlDLworICAgIEE4QjlDCisgICAgCisvKD94OigoPydhJykpICMgY29tbWVudCAod2l0aCBwYXJlbnRoZXNlcykgYW5kIHwgdmVydGljYWwKKyg/LXg6I25vdCBhIGNvbW1lbnQgKD8nYicpKSAjIHRoaXMgaXMgYSBjb21tZW50ICgpCisoPydjJykpICMgbm90IGEgY29tbWVudCAoPydkJykvaW5mbworCisvKD98KD8nYScpKDIpKD8nYicpfCg/J2EnKSg/J2EnKSgzKSkvSSxkdXBuYW1lcworICAgIEEyM0IKKyAgICBCMzJBIAorCisjIFRoZXNlIGFyZSBzb21lIHBhdHRlcm5zIHRoYXQgdXNlZCB0byBjYXVzZSBidWZmZXIgb3ZlcmZsb3dzIG9yIG90aGVyIGVycm9ycworIyB3aGlsZSBjb21waWxpbmcuIAorCisvLigoPzIpKD9SKXxcMXwkKSgpL0IKKworLy4oKD8zKSg/UikoKSg/Mil8XDF8JCkoKS9CCisKKy8oXDkqKyg/Mik7XDMrKygpMnwpKyt7LworCisvXFZceDg1XDkqKygoPzIpXDMrKygpMikqOjIvCisKKy8oKCg/KFIpKXswLDJ9KSAoPyd4JygoPydSJykoKD8nUicpKSkpKS9kdXBuYW1lcworCisvKCgoPyhYKSl7MCwyfSkgKD8neCcoKD8nWCcpKCg/J1gnKSkpKSkvZHVwbmFtZXMKKworLygoKD8oUikpezAsMn0pICg/J3gnKCg/J1gnKSgoPydSJykpKSkpLworCisiKD9KKSg/J2QnKD8nZCdcZ3tkfSkpIgorCisiKD89ISgoPzIpKD8pKSh7OCg/PD0oPzEpezI5fThiYmJiXHgxNlx4ZFx4YzZeKCQoXHhhOUg0KXs0fWh9PzEpQikpXHgxNScpIgorCisvQSg/JycpWi8KKworIig/SjooP3woPydSJykoXGsnUicpfCgoPydSJykpKSkiCisKKy8oPzw9fChcLFwkKD83MzU5MTYyMDQ0OTAwNTgyODgxNilceGE4Lns3fSl7Nn1ceDA5KS8KKworL14oPzooPygxKXh8KSspKyQoKS9CCisKKy9bWzo+Ol1dKD88KS8KKworLygoP3gpKCo6MCkpIyg/Jy8KKworLyg/QyRbJCkoPzxdLworCisvKD9DJCkkKSg/PF0vCisKKy8oPyhSKSkqKy9CCisgICAgYWJjZAorCisvKCg/eCkoPyMpKSMoPycvCisKKy8oKD94KSg/IykpIyg/J2FiYycpL0kKKworL1tbOlxcXSg/PFs6Ol0vCisKKy9bWzpcXF0oPydhYmMnKVthOl0vSQorCisiW1tbLlx4ZThOcVx4ZmZxXHhmZlx4ZTBceDJ8fHw6Ok5xXHhmZnFceGZmXHhlMFx4Nlx4Mnx8fDo6W1tbOls6Ojo6OjpbW1tbWzo6Ojo6Ojo6WzpbW1s6Wzo6OltbW1tbW1tbW1tbWzo6Ojo6Ojo6Ojo6Ojo6Ojo6W1suXHhlOE5xXHhmZnFceGZmXHhlMFx4Mnx8fDo6TnFceGZmcVx4ZmZceGUwXHg2XHgyfHx8OjpbW1s6Wzo6Ojo6OltbW1tbOjo6Ojo6OjpbOltbWzpbOjo6W1tbW1tbW1tbW1tbW1s6OjpFW1tbOls6W1s6Wzo6OltbOjo6RVtbWzpbOltbOidbOjo6OjpFW1tbOls6Ojo6OjpbW1s6W1tbW1tbWzo6RVtbWzpbOjo6Ojo6W1tbOltbW1tbW1tbOltbOjpbOjo6OltbOjo6Ojo6OltbOltbW1tbW1s6W1s6Ols6W1s6W34iCisKKy8oKSg/KFIpMCkqKy9CCisKKy8oP1ItOig/PC8KKworLyg/KD9De1xRfSkoPyEoPycvCisKKy8oPyg/Q3tcUX0pKD8hKD8nYWJjJykpKS9JCisKKy8oPzEpezM5MTh9KCgoKCgwKFxrJ1InKSkpKSg/SikoPydSJyg/J1InXDMpezk5fSkpKS9JCisKKy8oP3woYWFhKXwoYikpXGd7MX0vSQorCisvKD98KGFhYSl8KGIpKSg/MSkvSQorCisvKD98KGFhYSl8KGIpKS9JCisKKy8oP3woPydhJ2FhYSl8KD8nYSdiKSlcaydhJy9JCisKKy8oP3woPydhJ2FhYSl8KD8nYSdiKSkoPydhJ2NjY2MpXGsnYScvSSxkdXBuYW1lcworCisvYWJ7M2NkLworICAgIGFiezNjZAorCisvYWJ7MyxjZC8KKyAgICBhYnszLGNkCisKKy9hYnszLDRhfWNkLworICAgIGFiezMsNGF9Y2QKKworL3s0LDVhfWJjLworICAgIHs0LDVhfWJjCisKKy9ceDB7YWJ9LworICAgIFwwe2FifSAKKworL14oYShiKSlcMVxnMVxnezF9XGctMVxney0xfVxney0wMn1aLworICAgIGFiYWJhYmFiYmJhYlpYWFhYCisKKy8uKj9hKCpQUlVORSliLworICAgIGFhYgorCisvLio/YSgqUFJVTkUpYi9zCisgICAgYWFiCisKKy9eYSgqUFJVTkUpYi9zCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWIKKworLy4qP2EoKlNLSVApYi8KKyAgICBhYWIKKworLyg/KDgwMDAwMDAwMDAvCisKKy8oKD8oUjgwMDAwMDAwMDApKSkvCisKKy8wKD8wKXwoMSkoKlRIRU4pKCpTS0lQOjApKCpGQUlMKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDAxCisKKy8oPygxKSgpXDk4MzA0MFwyKS8KKworLygqTElNSVRfTUFUQ0g9KWFiYy8KKworLygqQ1JMRikoKkxJTUlUX01BVENIPSlhYmMvCisKKy8oPzphYik/KD86YWIpKD86YWIpLworICAgIGFiYWIKKyAgICBhYmFiYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYQorCisvKCgqTUFSSzpBKSkrK2EoKlNLSVA6QiliLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFjYgorCisvKCpNQVJLOmFcemIpei9hbHRfdmVyYm5hbWVzIAorICAgIAorLygqOmFiXHQoZFwpYyl4eHgvCisKKy8oKjphYlx0KGRcKWMpeHh4L2FsdF92ZXJibmFtZXMsbWFyaworICAgIGN4eHh6CisKKy8oKjpBXFF4eCl4XEVCKXgvYWx0X3ZlcmJuYW1lcyxtYXJrCisgICAgeAorICAgIAorLygqOkFcRXh4eEIpeC9hbHRfdmVyYm5hbWVzLG1hcmsKKyAgICB4IAorICAgIAorLygqOiBBIFwgYW5kICNjb21tZW50CisgICAgIFwgQil4L3gsYWx0X3ZlcmJuYW1lcyxtYXJrCisgICAgeCAgCisgICAgCisvKCo6QQorQil4L2FsdF92ZXJibmFtZXMsbWFyayAKKyAgICB4CisKKy8oKjphYmNcUXBxcikvYWx0X3ZlcmJuYW1lcworCisvYWJjL3VzZV9vZmZzZXRfbGltaXQKKyAgICAxMjM0YWJjZGVcPW9mZnNldF9saW1pdD0xMDAKKyAgICAxMjM0YWJjZGVcPW9mZnNldF9saW1pdD05CisgICAgMTIzNGFiY2RlXD1vZmZzZXRfbGltaXQ9NAorICAgIDEyMzRhYmNkZVw9b2Zmc2V0X2xpbWl0PTQsb2Zmc2V0PTQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzRhYmNkZVw9b2Zmc2V0X2xpbWl0PTQsb2Zmc2V0PTUKKyAgICAxMjM0YWJjZGVcPW9mZnNldF9saW1pdD0zCisKKy8oPzw9YWJjKS91c2Vfb2Zmc2V0X2xpbWl0CisgICAgMTIzNGFiY1w9b2Zmc2V0X2xpbWl0PTcKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzRhYmNcPW9mZnNldF9saW1pdD02CisgICAgCisvQS9nLHJlcGxhY2U9LSx1c2Vfb2Zmc2V0X2xpbWl0CisgICAgWEFYQVhBWEFYQVw9b2Zmc2V0X2xpbWl0PTQKKworL2FiYy8KK1w9IEV4cGVjdCBlcnJvcgorICAgIDEyMzRhYmNkZVw9b2Zmc2V0X2xpbWl0PTQKKworL15cdy9tLHVzZV9vZmZzZXRfbGltaXQKKyAgICBcbi4uXG5hYVw9b2Zmc2V0X2xpbWl0PTMKKyAgICBcbi4uXG5hYVw9b2Zmc2V0X2xpbWl0PTQKKworL2FiY2QvbnVsbF9jb250ZXh0CisgICAgYWJjZFw9bnVsbF9jb250ZXh0CitcPSBFeHBlY3QgZXJyb3IgICAgIAorICAgIGFiY2RcPW51bGxfY29udGV4dCxmaW5kX2xpbWl0cworICAgIGFiY2RcPWFsbHVzZWR0ZXh0LHN0YXJ0Y2hhciAKKworL2FiY2QvcmVwbGFjZT13XHJ4XHg4Mnlcb3szMzN9eihcUTEyXCQzNCQkXHgzNFxFNSQkKSxzdWJzdGl0dXRlX2V4dGVuZGVkCisgICAgYWJjZAorICAgIAorL2EoYmMpKERFKS9yZXBsYWNlPWFcdSQxXFUkMVxFJDFcbCQyXEwkMlxFYWJcVWFiXExZWlxFRG9uZSxzdWJzdGl0dXRlX2V4dGVuZGVkCisgICAgYWJjREUKKyAKKy9hYmNkL3JlcGxhY2U9eHlca3osc3Vic3RpdHV0ZV9leHRlbmRlZAorICAgIGFiY2QKKworL2EoPzooYil8KGMpKS9zdWJzdGl0dXRlX2V4dGVuZGVkLHJlcGxhY2U9WCR7MTorMTotMX1YJHsyOisyOi0yfQorICAgIGFiCisgICAgYWMKKyAgICBhYlw9cmVwbGFjZT0kezE6KyQxXDokMTokMn0KKyAgICBhY1w9cmVwbGFjZT0kezE6KyQxXDokMTokMn0KKworL2EoPzooYil8KGMpKS9zdWJzdGl0dXRlX2V4dGVuZGVkLHJlcGxhY2U9WCR7MTotMTotMX1YJHsyOi0yOi0yfQorICAgIGFiCisgICAgYWMKKworLyhhKS9zdWJzdGl0dXRlX2V4dGVuZGVkLHJlcGxhY2U9PiR7MTorXFEkMTp7fSQkXEUrXFUkMX08CisgICAgYQorCisvWChiKVkvc3Vic3RpdHV0ZV9leHRlbmRlZAorICAgIFhiWVw9cmVwbGFjZT14JHsxOiskMVxVJDF9eQorICAgIFhiWVw9cmVwbGFjZT1cVXgkezE6KyQxJDF9eQorCisvYS9zdWJzdGl0dXRlX2V4dGVuZGVkLHJlcGxhY2U9JHsqTUFSSzorYTpifQorICAgIGEKKworLyhhYmNkKS9yZXBsYWNlPSR7MToreHlca3p9LHN1YnN0aXR1dGVfZXh0ZW5kZWQKKyAgICBhYmNkCisKKy8oYWJjZCkvCisgICAgYWJjZFw9cmVwbGFjZT0kezE6K3h5XGt6fSxzdWJzdGl0dXRlX2V4dGVuZGVkCisKKy9hYmNkL3N1YnN0aXR1dGVfZXh0ZW5kZWQscmVwbGFjZT0+JDE8CisgICAgYWJjZAorCisvYWJjZC9zdWJzdGl0dXRlX2V4dGVuZGVkLHJlcGxhY2U9Pnh4eCR7eHl6fTw8PAorICAgIGFiY2QKKworLyg/SikoPzooPzxBPmEpfCg/PEE+YikpL3JlcGxhY2U9PCRBPgorICAgIFthXQorICAgIFtiXSAKK1w9IEV4cGVjdCBlcnJvciAgICAgCisgICAgKGEpXD1vdmVjdG9yPTEKKworLyhhKXwoYikvcmVwbGFjZT08JDE+CitcPSBFeHBlY3QgZXJyb3IKKyAgICBiCisKKy8oYWEpKEJCKS9zdWJzdGl0dXRlX2V4dGVuZGVkLHJlcGxhY2U9XFUkMVxMJDJcRSQxLi5cVSQxXGwkMiQxCisgICAgYWFCQgorCisvXihvKFwxezcyfXtcIntcXHswMDAwMDA1OTA3OX1cZCopezc0fX0pezE5fS9JCisKKy8oKHAoPydLLworCisvKChwKD8nSy9ub19hdXRvX2NhcHR1cmUKKworL2FiYy9yZXBsYWNlPUEkMzEyMzQ1Njc4OVoKKyAgICBhYmMKKworLyg/PCFhezY1NTM1fWF7NX0peC9JCisKKy8oPzwhYXs2NTUzNX0peC9JCisKKy8oPz1hXEspL3JlcGxhY2U9egorICAgIEJhQ2FECisgICAgCisvKD8nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHJ3Rvb2xvbmcpLworIAorLyg/J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGJ2p1c3RyaWdodCkvIAorCisjIFRoZXNlIHR3byB1c2UgemVyby10ZXJtaW5hdGlvbgorL2FiY2QvbWF4X3BhdHRlcm5fbGVuZ3RoPTMKKworL2FiYy9tYXhfcGF0dGVybl9sZW5ndGg9MworCisjIFRoZXNlIHR3bywgYmVpbmcgaGV4LCBwYXNzIHRoZSBsZW5ndGgKKy9hYmNkZWZhYi9oZXgsbWF4X3BhdHRlcm5fbGVuZ3RoPTMKKworL2FiY2RlZi9oZXgsbWF4X3BhdHRlcm5fbGVuZ3RoPTMKKworIyBUaGVzZSB0d28gcGF0dGVybnMgdXNlZCB0byB0YWtlIGEgbG9uZyB0aW1lIHRvIGNvbXBpbGUKKworIiguKikKKygoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKQorKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpCisoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkieEkKKworIig/PD1hKCkKKygoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKQorKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpCisoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkKK2EpInhJCisKKyMgV2hlbiAoP3wgaXMgdXNlZCBhbmQgZ3JvdXBzIG9mIHRoZSBzYW1lIG51bWJlciBtYXkgYmUgZGlmZmVyZW50LAorIyB3ZSBoYXZlIHRvIHJlbHkgb24gYSBjb3VudCB0byBjYXRjaCBvdmVybHkgY29tcGxpY2F0ZWQgcGF0dGVybnMuCisKKyIoP3woKXwoKSkoLiopCisoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkKKygoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKQorKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpInhJCisKKyIoP3woKXwoKSkoPzw9YSgpCisoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkKKygoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKQorKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpCithKSJ4SQorCisjIFRlc3QgdGhlIHVzZSBvZiBtYWxsb2MgZm9yIGNhY2hpbmcgZ3JvdXAgaW5mb3JtYXRpb24gd2hlbiB0aGVyZSBhcmUgbW9yZQorIyBncm91cHMgdGhhbiBmaXQgaW50byB0aGUgb24tc3RhY2sgd29ya3NwYWNlLgorCisvXFsoKV17MTAyNH0vSSxleHBhbmQKKworIyBUZXN0IG1pbmxlbmd0aCBjYXBwZWQgYXQgNjU1MzUKKworLyhBezY1MDAwfSlcMXs2NTAwMH0vSQorCisjIFRlc3QgZ3JvdXAgc2NhbnMgd2hlbiBudW1iZXJzIGFyZSBub3QgdW5pcXVlCisKKy8oP3woKSt8KGEpKykvQkkKKworLyg/fChhKSt8KCkrKS9CSQorCisvKD98KCl8KGEpKS9CSQorCisvKD98KGEpfCgpKS9CSQorCisjIFRlc3QgQ1JMRiBoYW5kbGluZyBpbiBlbXB0eSBzdHJpbmcgc3Vic3RpdHV0aW9ucworCisvXiQvZ20sbmV3bGluZT1hbnljcmxmLHJlcGxhY2U9LQorICAgIFhcclxuXHJcblkKKworL14kL2dtLG5ld2xpbmU9Y3JsZixyZXBsYWNlPS0KKyAgICBYXHJcblxyXG5ZCisKKy9eJC9nbSxuZXdsaW5lPWFueSxyZXBsYWNlPS0KKyAgICBYXHJcblxyXG5ZCisKKyIoKkFOWUNSTEYpKD9tKV4oLipbXjAtOVxyXG5dLip8KSQiZyxyZXBsYWNlPU5hTgorICAgIDE1XHJcbmZvb1xyXG4yMFxyXG5iYXJcclxuYmF6XHJcblxyXG4yMAorCisvYVtbOnB1bmN0Ol1iXS9iaW5jb2RlCisKKy9hW2JbOnB1bmN0Ol1dL2JpbmNvZGUKKworL0woPyMofCsrPCEoMik/L0IKKworL0woPyMofCsrPCEoMik/L0Isbm9fYXV0b19wb3NzZXNzCisKKy9MKD8jKHwrKzwhKDIpPy9CLGF1dG9fY2FsbG91dAorCisvTCg/Iyh8Kys8ISgyKT8vQixub19hdXRvX3Bvc3Nlc3MsYXV0b19jYWxsb3V0CisKKy8oQSopXEUrL0IsYXV0b19jYWxsb3V0CisKKy8oKVxRXEUqXS9CLGF1dG9fY2FsbG91dAorICAgIGFbYmNdZAorCisvXHg4YStmfDtUPygqOjsuJz9gKFx4ZWFwICl7IVteKCkheSonJ0MqKD8nO117MTsoXHgwOCkvQixhbHRfdmVyYm5hbWVzLGR1cG5hbWVzLGV4dGVuZGVkCisKKyMgVGVzdHMgZm9yIE5VTEwgY2hhcmFjdGVycyBpbiBjb21tZW50cyBhbmQgdmVyYiAibmFtZXMiIGFuZCBjYWxsb3V0cworCisjIC9BI0JceDAwQ1x4MGFaLworLzQxIDIzIDQyIDAwIDQzIDBhIDVhL0J4LGhleAorCisjIC9BKyNCXHgwMENceDBhKy8KKy80MSAyYiAyMyA0MiAwMCA0MyAwYSAyYi9CeCxoZXgKKworIyAvQSgqOkJceDAwVyNYXDAwWVx4MGFDKVovCisvNDEgMjggMmEgM2EgNDIgMDAgNTcgMjMgNTggMDAgNTkgMGEgNDMgMjkgNWEvQngsaGV4LGFsdF92ZXJibmFtZXMKKworIyAvQSgqOkJceDAwVyNYXDAwWVx4MGFDKVovCisvNDEgMjggMmEgM2EgNDIgMDAgNTcgMjMgNTggMDAgNTkgMGEgNDMgMjkgNWEvQngsaGV4CisKKyMgL0EoP0N7WFx4MDBZfSlCLworLzQxIDI4IDNmIDQzIDdiIDU4IDAwIDU5IDdkIDI5IDQyL0IsaGV4CisKKyMgL0EoPyNYXHgwMFkpQi8KKy80MSAyOCAzZiAyMyA3YiAwMCA3ZCAyOSA0Mi9CLGhleAorCisjIFRlc3RzIGZvciBsZWFkaW5nIGNvbW1lbnQgaW4gZXh0ZW5kZWQgcGF0dGVybnMKKworLyAoPy14KTo/L2V4dGVuZGVkCisKKy8LKD8teCk6Py9leHRlbmRlZAorCisvMGIgMjggM2YgMmQgNzggMjkgM2EvaGV4LGV4dGVuZGVkCisKKy8jY29tbWVudAorKD8teCk6Py9leHRlbmRlZAorCisvKDgoKjo2Xlx4MDl4XHhhNmxcKTYhfFx4ZDA6W146fClceDA5ZFxaXGR7ODUqbSg/Jyg/PDEhKSpcV1sqXHhmZl0hIWhcd10qXHhiZTsvYWx0X2JzdXgsYWx0X3ZlcmJuYW1lcyxhbGxvd19lbXB0eV9jbGFzcyxkb2xsYXJfZW5kb25seSxleHRlbmRlZCxtdWx0aWxpbmUsbmV2ZXJfdXRmLG5vX2RvdHN0YXJfYW5jaG9yLG5vX3N0YXJ0X29wdGltaXplCisKKy9hfChiKWMvcmVwbGFjZT0+JDE8LHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkKKyAgICBjYXQKKyAgICB4YmNvbSAKKworL2F8KGIpYy8KKyAgICBjYXRcPXJlcGxhY2U9PiQxPAorICAgIGNhdFw9cmVwbGFjZT0+JDE8LHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkKKyAgICB4YmNvbVw9cmVwbGFjZT0+JDE8LHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkKKworL2F8KGIpYy9zdWJzdGl0dXRlX2V4dGVuZGVkCisgICAgY2F0XD1yZXBsYWNlPT4kezI6LXh4fTwKKyAgICBjYXRcPXJlcGxhY2U9PiR7MjoteHh9PCxzdWJzdGl0dXRlX3Vua25vd25fdW5zZXQKKyAgICBjYXRcPXJlcGxhY2U9PiR7WDoteHh9PCxzdWJzdGl0dXRlX3Vua25vd25fdW5zZXQKKworL2F8KD8nWCdiKWMvcmVwbGFjZT0+JFg8LHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkKKyAgICBjYXQKKyAgICB4YmNvbSAKKworL2F8KD8nWCdiKWMvcmVwbGFjZT0+JFk8LHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkKKyAgICBjYXQKKyAgICBjYXRcPXN1YnN0aXR1dGVfdW5rbm93bl91bnNldCAKKyAgICBjYXRcPXN1YnN0aXR1dGVfdW5rbm93bl91bnNldCwtc3Vic3RpdHV0ZV91bnNldF9lbXB0eSAKKworL2F8KGIpYy9yZXBsYWNlPT4kMjwsc3Vic3RpdHV0ZV91bnNldF9lbXB0eQorICAgIGNhdAorICAgIGNhdFw9c3Vic3RpdHV0ZV91bmtub3duX3Vuc2V0IAorICAgIGNhdFw9c3Vic3RpdHV0ZV91bmtub3duX3Vuc2V0LC1zdWJzdGl0dXRlX3Vuc2V0X2VtcHR5IAorCisvKCkoKSgpL3VzZV9vZmZzZXRfbGltaXQKKyAgICBcPW92ZWN0b3I9MTEwMDAwMDAwMDAKKyAgICBcPWNhbGxvdXRfZmFpbD0xMTAwMDAwMDAwMAorICAgIFw9Y2FsbG91dF9mYWlsPTE6MTEwMDAwMDAwMDAKKyAgICBcPWNhbGxvdXRfZGF0YT0xMTAwMDAwMDAwMCAKKyAgICBcPWNhbGxvdXRfZGF0YT0tMTEwMDAwMDAwMDAgCisgICAgXD1vZmZzZXRfbGltaXQ9MTEwMDAwMDAwMDAwMDAwMDAwMDAwMCAKKyAgICBcPWNvcHk9MTEwMDAwMDAwMDAgCisKKy8oKk1BUks6QVx4MDBiKS9tYXJrCisgICAgYWJjCisKKy8oKk1BUks6QVx4MDBiKS9tYXJrLGFsdF92ZXJibmFtZXMKKyAgICBhYmMKKworIyAvKCpNQVJLOkFceDAwYikvCisvMjggMmEgNGQgNDEgNTIgNGIgM2EgNDEgMDAgNjIgMjkvbWFyayxoZXgKKyAgICBhYmMKKworIyAvKCpNQVJLOkFceDAwYikvCisvMjggMmEgNGQgNDEgNTIgNGIgM2EgNDEgMDAgNjIgMjkvbWFyayxoZXgsYWx0X3ZlcmJuYW1lcworICAgIGFiYworCisjIEVuZCBvZiB0ZXN0aW5wdXQyIApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MjAgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQyMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWMzMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MjAKQEAgLTAsMCArMSw2MyBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBleGVyY2lzZXMgdGhlIHNlcmlhbGl6YXRpb24vZGVzZXJpYWxpemF0aW9uIGZ1bmN0aW9ucyBpbgorIyB0aGUgbGlicmFyeS4gSXQgZG9lcyBub3QgdXNlIFVURiBvciBKSVQuCisKKyNmb3JiaWRfdXRmCisKKyMgQ29tcGlsZSBzZXZlcmFsIHBhdHRlcm5zLCBwdXNoIHRoZW0gb250byB0aGUgc3RhY2ssIGFuZCB0aGVuIHdyaXRlIHRoZW0KKyMgYWxsIHRvIGEgZmlsZS4KKworI3BhdHRlcm4gcHVzaAorCisvKD88TkFNRT4oPyZOQU1FX1BBVCkpXHMrKD88QUREUj4oPyZBRERSRVNTX1BBVCkpCisgICg/KERFRklORSkKKyAgKD88TkFNRV9QQVQ+W2Etel0rKQorICAoPzxBRERSRVNTX1BBVD5cZCspCisgICkveAorL14oPzooKC4pKD8xKVwyfCl8KCguKSg/MylcNHwuKSkkL2kKKworI3NhdmUgdGVzdHNhdmVkMQorCisjIERvIGl0IGFnYWluIGZvciBzb21lIG1vcmUgcGF0dGVybnMuCisKKy8oKk1BUks6QSkoKlNLSVA6QikoQ3xYKS9tYXJrCisvKD86KD88bj5mb28pfCg/PG4+YmFyKSlcazxuPi9kdXBuYW1lcworCisjc2F2ZSB0ZXN0c2F2ZWQyCisjcGF0dGVybiAtcHVzaAorCisjIFJlbG9hZCB0aGUgcGF0dGVybnMsIHRoZW4gcG9wIHRoZW0gb25lIGJ5IG9uZSBhbmQgY2hlY2sgdGhlbS4KKworI2xvYWQgdGVzdHNhdmVkMQorI2xvYWQgdGVzdHNhdmVkMgorCisjcG9wIGluZm8KKyAgICBmb29mb28gICAgICAgICAgICAgCisgICAgYmFyYmFyCisgICAgCisjcG9wIG1hcmsKKyAgICBDCitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIEQgCisgICAgCisjcG9wCisgICAgQW1hbmFwbGFuYWNhbmFsUGFuYW1hICAgCisKKyNwb3AgaW5mbworICAgIG1ldGNhbGZlIDMzCisgICAgCisjIENoZWNrIGZvciBhbiBlcnJvciB3aGVuIGRpZmZlcmVudCB0YWJsZXMgYXJlIHVzZWQuCisKKy9hYmMvcHVzaCx0YWJsZXM9MQorL3h5ei9wdXNoLHRhYmxlcz0yCisjc2F2ZSB0ZXN0c2F2ZWQxCisKKyNwb3AKKyAgICB4eXoKKworI3BvcAorICAgIGFiYworCisjcG9wIHNob3VsZCBnaXZlIGFuIGVycm9yCisgICAgcHFyCisKKyMgRW5kIG9mIHRlc3RpbnB1dDIwCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQyMSBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMWZiZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQyMQpAQCAtMCwwICsxLDE2IEBACisjIFRoZXNlIGFyZSB0ZXN0cyBvZiBcQyB0aGF0IGRvIG5vdCBpbnZvbHZlIFVURi4gVGhleSBhcmUgbm90IHJ1biB3aGVuIFxDIGlzCisjIGRpc2FibGVkIGJ5IGNvbXBpbGluZyB3aXRoIC0tZW5hYmxlLW5ldmVyLWJhY2tzbGFzaC1DLgorCisvXEMrXEQgXEMrXGQgXEMrXFMgXEMrXHMgXEMrXFcgXEMrXHcgXEMrLiBcQytcUiBcQytcSCBcQytcaCBcQytcViBcQytcdiBcQytcWiBcQytceiBcQyskL0J4CisKKy9cRCtcQyBcZCtcQyBcUytcQyBccytcQyBcVytcQyBcdytcQyAuK1xDIFxSK1xDIFxIK1xDIFxoK1xDIFxWK1xDIFx2K1xDIGErXEMgXG4rXEMgXEMrXEMvQngKKworL2FiXENkZS9uZXZlcl9iYWNrc2xhc2hfYworCisvYWJcQ2RlL2luZm8KKyAgICBhYlhkZQorICAgIAorLyg/PD1hYlxDZGUpWC8KKyAgICBhYlpkZVgKKworIyBFbmQgb2YgdGVzdGlucHV0MjEKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDIyIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY4NGNmNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDIyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDIzIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0MjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBhOWJjNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDIzCkBAIC0wLDAgKzEsNyBAQAorIyBUaGlzIHRlc3QgaXMgcnVuIHdoZW4gUENSRTIgaGFzIGJlZW4gYnVpbHQgd2l0aCAtLWVuYWJsZS1uZXZlci1iYWNrc2xhc2gtQywKKyMgd2hpY2ggZGlzYWJsZXMgdGhlIHVzZSBvZiBcQy4gQWxsIHdlIGNhbiBkbyBpcyBjaGVjayB0aGF0IGl0IGdpdmVzIHRoZSAKKyMgY29ycmVjdCBlcnJvciBtZXNzYWdlLgorCisvYVxDYi8KKworIyBFbmQgb2YgdGVzdGlucHV0MjMKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDMgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZTk1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQzCkBAIC0wLDAgKzEsMTA0IEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGNoZWNrcyBsb2NhbC1zcGVjaWZpYyBmZWF0dXJlcywgdXNpbmcgdGhlICJmcl9GUiIgbG9jYWxlLiAKKyMgSXQgaXMgbm90IFBlcmwtY29tcGF0aWJsZS4gV2hlbiBydW4gdmlhIFJ1blRlc3QsIHRoZSBsb2NhbGUgaXMgZWRpdGVkIHRvCisjIGJlIHdoaWNoZXZlciBvZiAiZnJfRlIiLCAiZnJlbmNoIiwgb3IgImZyIiBpcyBmb3VuZCB0byBleGlzdC4gVGhlcmUgaXMKKyMgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGNhbGxlZCB3aW50ZXN0aW5wdXQzIGZvciB1c2Ugb24gV2luZG93cywKKyMgd2hlcmUgdGhlIGxvY2FsZSBpcyBjYWxsZWQgImZyZW5jaCIgYW5kIHRoZSB0ZXN0cyBhcmUgcnVuIHVzaW5nCisjIFJ1blRlc3QuYmF0LiAKKworI2ZvcmJpZF91dGYKKworL15bXHddKy8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIMljb2xlCisKKy9eW1x3XSsvbG9jYWxlPWZyX0ZSCisgICAgyWNvbGUKKworL15bXHddKy8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIMljb2xlCisKKy9eW1xXXSsvCisgICAgyWNvbGUKKworL15bXFddKy9sb2NhbGU9ZnJfRlIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIMljb2xlCisKKy9bXGJdLworICAgIFxiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCisKKy9bXGJdL2xvY2FsZT1mcl9GUgorICAgIFxiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCisKKy9eXHcrLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgyWNvbGUKKworL15cdysvbG9jYWxlPWZyX0ZSCisgICAgyWNvbGUKKworLyguKylcYiguKykvCisgICAgyWNvbGUKKworLyguKylcYiguKykvbG9jYWxlPWZyX0ZSCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICDJY29sZQorCisvyWNvbGUvaQorICAgIMljb2xlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICDpY29sZQorCisvyWNvbGUvaSxsb2NhbGU9ZnJfRlIKKyAgICDJY29sZQorICAgIOljb2xlCisKKy9cdy9JCisKKy9cdy9JLGxvY2FsZT1mcl9GUgorCisjIEFsbCByZW1haW5pbmcgdGVzdHMgYXJlIGluIHRoZSBmcl9GUiBsb2NhbGUsIHNvIHNldCB0aGUgZGVmYXVsdC4KKworI3BhdHRlcm4gbG9jYWxlPWZyX0ZSCisKKy9eW1x4YzgtXHhjOV0vaQorICAgIMljb2xlCisgICAg6WNvbGUKKworL15bXHhjOC1ceGM5XS8KKyAgICDJY29sZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAg6WNvbGUKKworL1xXKy8KKyAgICA+Pj5ceGFhPDw8CisgICAgPj4+XHhiYTw8PCAKKworL1tcV10rLworICAgID4+Plx4YWE8PDwKKyAgICA+Pj5ceGJhPDw8IAorCisvW15bOmFscGhhOl1dKy8KKyAgICA+Pj5ceGFhPDw8CisgICAgPj4+XHhiYTw8PCAKKworL1x3Ky8KKyAgICA+Pj5ceGFhPDw8CisgICAgPj4+XHhiYTw8PCAKKworL1tcd10rLworICAgID4+Plx4YWE8PDwKKyAgICA+Pj5ceGJhPDw8IAorCisvW1s6YWxwaGE6XV0rLworICAgID4+Plx4YWE8PDwKKyAgICA+Pj5ceGJhPDw8IAorICAgIAorL1tbOmFscGhhOl1dW1s6bG93ZXI6XV1bWzp1cHBlcjpdXS9JQgorCisjIEVuZCBvZiB0ZXN0aW5wdXQzIApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0NCBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U5MTQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDQKQEAgLTAsMCArMSwyMjg1IEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciBVVEYgc3VwcG9ydCwgaW5jbHVkaW5nIFVuaWNvZGUgcHJvcGVydGllcy4gVGhlIAorIyBVbmljb2RlIHRlc3RzIGFyZSBhbGwgY29tcGF0aWJsZSB3aXRoIGFsbCB2ZXJzaW9ucyBvZiBQZXJsID49IDUuMTAsIGJ1dAorIyBzb21lIG9mIHRoZSBwcm9wZXJ0eSB0ZXN0cyBtYXkgZGlmZmVyIGJlY2F1c2Ugb2YgZGlmZmVyZW50IHZlcnNpb25zIG9mCisjIFVuaWNvZGUgaW4gdXNlIGJ5IFBDUkUyIGFuZCBQZXJsLgorCisjbmV3bGluZV9kZWZhdWx0IGxmIGFueWNybGYgYW55CisjcGVybHRlc3QKKworL2EuYi91dGYKKyAgICBhY2IKKyAgICBhXHg3ZmIKKyAgICBhXHh7MTAwfWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcbmIKKworL2EoLnszfSliL3V0ZgorICAgIGFceHs0MDAwfXh5YgorICAgIGFceHs0MDAwfVx4N2Z5YgorICAgIGFceHs0MDAwfVx4ezEwMH15YgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ezQwMDB9YgorICAgIGFjXG5jYgorCisvYSguKj8pKC4pLworICAgIGFceGMwXHg4OGIKKworL2EoLio/KSguKS91dGYKKyAgICBhXHh7MTAwfWIKKworL2EoLiopKC4pLworICAgIGFceGMwXHg4OGIKKworL2EoLiopKC4pL3V0ZgorICAgIGFceHsxMDB9YgorCisvYSguKSguKS8KKyAgICBhXHhjMFx4OTJiY2QKKworL2EoLikoLikvdXRmCisgICAgYVx4ezI0MH1iY2QKKworL2EoLj8pKC4pLworICAgIGFceGMwXHg5MmJjZAorCisvYSguPykoLikvdXRmCisgICAgYVx4ezI0MH1iY2QKKworL2EoLj8/KSguKS8KKyAgICBhXHhjMFx4OTJiY2QKKworL2EoLj8/KSguKS91dGYKKyAgICBhXHh7MjQwfWJjZAorCisvYSguezN9KWIvdXRmCisgICAgYVx4ezEyMzR9eHliCisgICAgYVx4ezEyMzR9XHh7NDMyMX15YgorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MTIzNH1iCisgICAgYWNcbmNiCisKKy9hKC57Myx9KWIvdXRmCisgICAgYVx4ezEyMzR9eHliCisgICAgYVx4ezEyMzR9XHh7NDMyMX15YgorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iCisgICAgYXh4eHhiY2RlZmdoaWpiCisgICAgYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfVx4ezM0MjF9YgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ezEyMzR9YgorCisvYSguezMsfT8pYi91dGYKKyAgICBhXHh7MTIzNH14eWIKKyAgICBhXHh7MTIzNH1ceHs0MzIxfXliCisgICAgYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfWIKKyAgICBheHh4eGJjZGVmZ2hpamIKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9XHh7MzQyMX1iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MTIzNH1iCisKKy9hKC57Myw1fSliL3V0ZgorICAgIGFceHsxMjM0fXh5YgorICAgIGFceHsxMjM0fVx4ezQzMjF9eWIKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9YgorICAgIGF4eHh4YmNkZWZnaGlqYgorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1ceHszNDIxfWIKKyAgICBheGJ4eGJjZGVmZ2hpamIKKyAgICBheHh4eHhiY2RlZmdoaWpiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MTIzNH1iCisgICAgYXh4eHh4eGJjZGVmZ2hpamIKKworL2EoLnszLDV9PyliL3V0ZgorICAgIGFceHsxMjM0fXh5YgorICAgIGFceHsxMjM0fVx4ezQzMjF9eWIKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9YgorICAgIGF4eHh4YmNkZWZnaGlqYgorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1ceHszNDIxfWIKKyAgICBheGJ4eGJjZGVmZ2hpamIKKyAgICBheHh4eHhiY2RlZmdoaWpiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MTIzNH1iCisgICAgYXh4eHh4eGJjZGVmZ2hpamIKKworL15bYVx4e2MwfV0vdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9CisKKy8oPzw9YVhiKWNkL3V0ZgorICAgIGFYYmNkCisKKy8oPzw9YVx4ezEwMH1iKWNkL3V0ZgorICAgIGFceHsxMDB9YmNkCisKKy8oPzw9YVx4ezEwMDAwMH1iKWNkL3V0ZgorICAgIGFceHsxMDAwMDB9YmNkCisKKy8oPzpceHsxMDB9KXszfWIvdXRmCisgICAgXHh7MTAwfVx4ezEwMH1ceHsxMDB9YgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MTAwfVx4ezEwMH1iCisKKy9ceHthYn0vdXRmCisgICAgXHh7YWJ9CisgICAgXHhjMlx4YWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4MDB7YWJ9CisKKy8oPzw9KC4pKVgvdXRmCisgICAgV1hZWgorICAgIFx4ezI1Nn1YWVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhZWgorCisvW15hXSsvZyx1dGYKKyAgICBiY2QKKyAgICBceHsxMDB9YVlceHsyNTZ9WgorCisvXlteYV17Mn0vdXRmCisgICAgXHh7MTAwfWJjCisKKy9eW15hXXsyLH0vdXRmCisgICAgXHh7MTAwfWJjQWEKKworL15bXmFdezIsfT8vdXRmCisgICAgXHh7MTAwfWJjYQorCisvW15hXSsvZ2ksdXRmCisgICAgYmNkCisgICAgXHh7MTAwfWFZXHh7MjU2fVoKKworL15bXmFdezJ9L2ksdXRmCisgICAgXHh7MTAwfWJjCisKKy9eW15hXXsyLH0vaSx1dGYKKyAgICBceHsxMDB9YmNBYQorCisvXlteYV17Mix9Py9pLHV0ZgorICAgIFx4ezEwMH1iY2EKKworL1x4ezEwMH17MCwwfS91dGYKKyAgICBhYmNkCisKKy9ceHsxMDB9Py91dGYKKyAgICBhYmNkCisgICAgXHh7MTAwfVx4ezEwMH0KKworL1x4ezEwMH17MCwzfS91dGYKKyAgICBceHsxMDB9XHh7MTAwfQorICAgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKworL1x4ezEwMH0qL3V0ZgorICAgIGFiY2UKKyAgICBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisKKy9ceHsxMDB9ezEsMX0vdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKworL1x4ezEwMH17MSwzfS91dGYKKyAgICBhYmNkXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfQorCisvXHh7MTAwfSsvdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKworL1x4ezEwMH17M30vdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVhYCisKKy9ceHsxMDB9ezMsNX0vdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1YWAorCisvXHh7MTAwfXszLH0vdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1YWAorCisvKD88PWFceHsxMDB9ezJ9YilYL3V0ZixhZnRlcnRleHQKKyAgICBYeXl5YVx4ezEwMH1ceHsxMDB9Ylh6enoKKworL1xEKi91dGYKKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisKKy9cRCovdXRmCisgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfQorCisvXEQvdXRmCisgICAgMVgyCisgICAgMVx4ezEwMH0yCisKKy8+XFMvdXRmCisgICAgPiA+WCBZCisgICAgPiA+XHh7MTAwfSBZCisKKy9cZC91dGYKKyAgICBceHsxMDB9MworCisvXHMvdXRmCisgICAgXHh7MTAwfSBYCisKKy9cRCsvdXRmCisgICAgMTJhYmNkMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQKKworL1xEezIsM30vdXRmCisgICAgMTJhYmNkMzQKKyAgICAxMmFiMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQKKyAgICAxMmEzNAorCisvXER7MiwzfT8vdXRmCisgICAgMTJhYmNkMzQKKyAgICAxMmFiMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQKKyAgICAxMmEzNAorCisvXGQrL3V0ZgorICAgIDEyYWJjZDM0CisKKy9cZHsyLDN9L3V0ZgorICAgIDEyYWJjZDM0CisgICAgMTIzNGFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEuNAorCisvXGR7MiwzfT8vdXRmCisgICAgMTJhYmNkMzQKKyAgICAxMjM0YWJjZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMS40CisKKy9cUysvdXRmCisgICAgMTJhYmNkMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFwgICAgXAorCisvXFN7MiwzfS91dGYKKyAgICAxMmFiY2QzNAorICAgIDEyMzRhYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcICAgICBcCisKKy9cU3syLDN9Py91dGYKKyAgICAxMmFiY2QzNAorICAgIDEyMzRhYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcICAgICBcCisKKy8+XHMrPC91dGYsYWZ0ZXJ0ZXh0CisgICAgMTI+ICAgICAgPDM0CisKKy8+XHN7MiwzfTwvdXRmLGFmdGVydGV4dAorICAgIGFiPiAgPGNkCisgICAgYWI+ICAgPGNlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYj4gICAgPGNkCisKKy8+XHN7MiwzfT88L3V0ZixhZnRlcnRleHQKKyAgICBhYj4gIDxjZAorICAgIGFiPiAgIDxjZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWI+ICAgIDxjZAorCisvXHcrL3V0ZgorICAgIDEyICAgICAgMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICsrKz0qIQorCisvXHd7MiwzfS91dGYKKyAgICBhYiAgY2QKKyAgICBhYmNkIGNlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhLmIuYworCisvXHd7MiwzfT8vdXRmCisgICAgYWIgIGNkCisgICAgYWJjZCBjZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYS5iLmMKKworL1xXKy91dGYKKyAgICAxMj09PT0zNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZAorCisvXFd7MiwzfS91dGYKKyAgICBhYj09PT1jZAorICAgIGFiPT1jZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYS5iLmMKKworL1xXezIsM30/L3V0ZgorICAgIGFiPT09PWNkCisgICAgYWI9PWNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhLmIuYworCisvW1x4ezEwMH1dL3V0ZgorICAgIFx4ezEwMH0KKyAgICBaXHh7MTAwfQorICAgIFx4ezEwMH1aCisKKy9bWlx4ezEwMH1dL3V0ZgorICAgIFpceHsxMDB9CisgICAgXHh7MTAwfQorICAgIFx4ezEwMH1aCisKKy9bXHh7MTAwfVx4ezIwMH1dL3V0ZgorICAgIGFiXHh7MTAwfWNkCisgICAgYWJceHsyMDB9Y2QKKworL1tceHsxMDB9LVx4ezIwMH1dL3V0ZgorICAgIGFiXHh7MTAwfWNkCisgICAgYWJceHsyMDB9Y2QKKyAgICBhYlx4ezExMX1jZAorCisvW3otXHh7MjAwfV0vdXRmCisgICAgYWJceHsxMDB9Y2QKKyAgICBhYlx4ezIwMH1jZAorICAgIGFiXHh7MTExfWNkCisgICAgYWJ6Y2QKKyAgICBhYnxjZAorCisvW1FceHsxMDB9XHh7MjAwfV0vdXRmCisgICAgYWJceHsxMDB9Y2QKKyAgICBhYlx4ezIwMH1jZAorICAgIFE/CisKKy9bUVx4ezEwMH0tXHh7MjAwfV0vdXRmCisgICAgYWJceHsxMDB9Y2QKKyAgICBhYlx4ezIwMH1jZAorICAgIGFiXHh7MTExfWNkCisgICAgUT8KKworL1tRei1ceHsyMDB9XS91dGYKKyAgICBhYlx4ezEwMH1jZAorICAgIGFiXHh7MjAwfWNkCisgICAgYWJceHsxMTF9Y2QKKyAgICBhYnpjZAorICAgIGFifGNkCisgICAgUT8KKworL1tceHsxMDB9XHh7MjAwfV17MSwzfS91dGYKKyAgICBhYlx4ezEwMH1jZAorICAgIGFiXHh7MjAwfWNkCisgICAgYWJceHsyMDB9XHh7MTAwfVx4ezIwMH1ceHsxMDB9Y2QKKworL1tceHsxMDB9XHh7MjAwfV17MSwzfT8vdXRmCisgICAgYWJceHsxMDB9Y2QKKyAgICBhYlx4ezIwMH1jZAorICAgIGFiXHh7MjAwfVx4ezEwMH1ceHsyMDB9XHh7MTAwfWNkCisKKy9bUVx4ezEwMH1ceHsyMDB9XXsxLDN9L3V0ZgorICAgIGFiXHh7MTAwfWNkCisgICAgYWJceHsyMDB9Y2QKKyAgICBhYlx4ezIwMH1ceHsxMDB9XHh7MjAwfVx4ezEwMH1jZAorCisvW1FceHsxMDB9XHh7MjAwfV17MSwzfT8vdXRmCisgICAgYWJceHsxMDB9Y2QKKyAgICBhYlx4ezIwMH1jZAorICAgIGFiXHh7MjAwfVx4ezEwMH1ceHsyMDB9XHh7MTAwfWNkCisKKy8oPzw9W1x4ezEwMH1ceHsyMDB9XSlYL3V0ZgorICAgIGFiY1x4ezIwMH1YCisgICAgYWJjXHh7MTAwfVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKworLyg/PD1bUVx4ezEwMH1ceHsyMDB9XSlYL3V0ZgorICAgIGFiY1x4ezIwMH1YCisgICAgYWJjXHh7MTAwfVgKKyAgICBhYlFYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCisKKy8oPzw9W1x4ezEwMH1ceHsyMDB9XXszfSlYL3V0ZgorICAgIGFiY1x4ezEwMH1ceHsyMDB9XHh7MTAwfVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY1x4ezIwMH1YCisgICAgWAorCisvW15ceHsxMDB9XHh7MjAwfV1YL3V0ZgorICAgIEFYCisgICAgXHh7MTUwfVgKKyAgICBceHs1MDB9WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MTAwfVgKKyAgICBceHsyMDB9WAorCisvW15RXHh7MTAwfVx4ezIwMH1dWC91dGYKKyAgICBBWAorICAgIFx4ezE1MH1YCisgICAgXHh7NTAwfVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezEwMH1YCisgICAgXHh7MjAwfVgKKyAgICBRWAorCisvW15ceHsxMDB9LVx4ezIwMH1dWC91dGYKKyAgICBBWAorICAgIFx4ezUwMH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9WAorICAgIFx4ezE1MH1YCisgICAgXHh7MjAwfVgKKworL1t6LVx4ezEwMH1dL2ksdXRmCisgICAgegorICAgIFoKKyAgICBceHsxMDB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDJ9CisgICAgeQorCisvW1x4RkZdLworICAgID5ceGZmPAorCisvW1x4ZmZdL3V0ZgorICAgID5ceHtmZn08CisKKy9bXlx4RkZdLworICAgIFhZWgorCisvW15ceGZmXS91dGYKKyAgICBYWVoKKyAgICBceHsxMjN9CisKKy9eW2FjXSpiL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgIHhiCisKKy9eW2FjXHh7MTAwfV0qYi91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICB4YgorCisvXlteeF0qYi9pLHV0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgIHhiCisKKy9eW154XSpiL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgIHhiCisKKy9eXGQqYi91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICB4YgorCisvKHxhKS9nLHV0ZgorICAgIGNhdGFjCisgICAgYVx4ezI1Nn1hCisKKy9eXHh7ODV9JC9pLHV0ZgorICAgIFx4ezg1fQorCisvXuGItC91dGYKKyAgICDhiLQKKworL15c4Yi0L3V0ZgorICAgIOGItAorCisiKD9zKSguezEsNX0pInV0ZgorICAgIGFiY2RlZmcKKyAgICBhYgorCisvYSpceHsxMDB9Klx3L3V0ZgorICAgIGEKKworL1xTXFMvZyx1dGYKKyAgICBBXHh7YTN9QkMKKworL1xTezJ9L2csdXRmCisgICAgQVx4e2EzfUJDCisKKy9cV1xXL2csdXRmCisgICAgK1x4e2EzfT09CisKKy9cV3syfS9nLHV0ZgorICAgICtceHthM309PQorCisvXFMvZyx1dGYKKyAgICBceHs0NDJ9XHh7NDM1fVx4ezQ0MX1ceHs0NDJ9CisKKy9bXFNdL2csdXRmCisgICAgXHh7NDQyfVx4ezQzNX1ceHs0NDF9XHh7NDQyfQorCisvXEQvZyx1dGYKKyAgICBceHs0NDJ9XHh7NDM1fVx4ezQ0MX1ceHs0NDJ9CisKKy9bXERdL2csdXRmCisgICAgXHh7NDQyfVx4ezQzNX1ceHs0NDF9XHh7NDQyfQorCisvXFcvZyx1dGYKKyAgICBceHsyNDQyfVx4ezI0MzV9XHh7MjQ0MX1ceHsyNDQyfQorCisvW1xXXS9nLHV0ZgorICAgIFx4ezI0NDJ9XHh7MjQzNX1ceHsyNDQxfVx4ezI0NDJ9CisKKy9bXFNcc10qL3V0ZgorICAgIGFiY1xuXHJceHs0NDJ9XHh7NDM1fVx4ezQ0MX1ceHs0NDJ9eHl6CisKKy9bXHh7NDFmfVxTXS9nLHV0ZgorICAgIFx4ezQ0Mn1ceHs0MzV9XHh7NDQxfVx4ezQ0Mn0KKworLy5bXlxTXS4vZyx1dGYKKyAgICBhYmMgZGVmXHh7NDQyfVx4ezQ0M314eXpcbnBxcgorCisvLlteXFNcbl0uL2csdXRmCisgICAgYWJjIGRlZlx4ezQ0Mn1ceHs0NDN9eHl6XG5wcXIKKworL1tbOl5hbG51bTpdXS9nLHV0ZgorICAgICtceHsyNDQyfQorCisvW1s6XmFscGhhOl1dL2csdXRmCisgICAgK1x4ezI0NDJ9CisKKy9bWzpeYXNjaWk6XV0vZyx1dGYKKyAgICBBXHh7NDQyfQorCisvW1s6XmJsYW5rOl1dL2csdXRmCisgICAgQVx4ezQ0Mn0KKworL1tbOl5jbnRybDpdXS9nLHV0ZgorICAgIEFceHs0NDJ9CisKKy9bWzpeZGlnaXQ6XV0vZyx1dGYKKyAgICBBXHh7NDQyfQorCisvW1s6XmdyYXBoOl1dL2csdXRmCisgICAgXHgxOVx4e2UwMWZmfQorCisvW1s6Xmxvd2VyOl1dL2csdXRmCisgICAgQVx4ezQyMn0KKworL1tbOl5wcmludDpdXS9nLHV0ZgorICAgIFx4ezE5fVx4e2UwMWZmfQorCisvW1s6XnB1bmN0Ol1dL2csdXRmCisgICAgQVx4ezQ0Mn0KKworL1tbOl5zcGFjZTpdXS9nLHV0ZgorICAgIEFceHs0NDJ9CisKKy9bWzpedXBwZXI6XV0vZyx1dGYKKyAgICBhXHh7NDQyfQorCisvW1s6XndvcmQ6XV0vZyx1dGYKKyAgICArXHh7MjQ0Mn0KKworL1tbOl54ZGlnaXQ6XV0vZyx1dGYKKyAgICBNXHh7NDQyfQorCisvW15BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWsOAw4HDgsODw4TDhcOGw4fDiMOJw4rDi8OMw43DjsOPw5DDkcOSw5PDlMOVw5bDmMOZw5rDm8Ocw53DnsSAxILEhMSGxIjEisSMxI7EkMSSxJTElsSYxJrEnMSexKDEosSkxKbEqMSqxKzErsSwxLLEtMS2xLnEu8S9xL/FgcWDxYXFh8WKxYzFjsWQxZLFlMWWxZjFmsWcxZ7FoMWixaTFpsWoxarFrMWuxbDFssW0xbbFuMW5xbvFvcaBxoLGhMaGxofGicaKxovGjsaPxpDGkcaTxpTGlsaXxpjGnMadxp/GoMaixqTGpsanxqnGrMauxq/GscayxrPGtca3xrjGvMeEx4fHiseNx4/HkceTx5XHl8eZx5vHnsegx6LHpMemx6jHqsesx67Hsce0x7bHt8e4x7rHvMe+yIDIgsiEyIbIiMiKyIzIjsiQyJLIlMiWyJjImsicyJ7IoMiiyKTIpsioyKrIrMiuyLDIssi6yLvIvci+yYHOhs6IzonOis6Mzo7Oj86RzpLOk86UzpXOls6XzpjOmc6azpvOnM6dzp7On86gzqHOo86kzqXOps6nzqjOqc6qzqvPks+Tz5TPmM+az5zPns+gz6LPpM+mz6jPqs+sz67PtM+3z7nPus+9z77Pv9CA0IHQgtCD0ITQhdCG0IfQiNCJ0IrQi9CM0I3QjtCP0JDQkdCS0JPQlNCV0JbQl9CY0JnQmtCb0JzQndCe0J/QoNCh0KLQo9Ck0KXQptCn0KjQqdCq0KvQrNCt0K7Qr9Gg0aLRpNGm0ajRqtGs0a7RsNGy0bTRttG40brRvNG+0oDSitKM0o7SkNKS0pTSltKY0prSnNKe0qDSotKk0qbSqNKq0qzSrtKw0rLStNK20rjSutK80r7TgNOB04PThdOH04nTi9ON05DTktOU05bTmNOa05zTntOg06LTpNOm06jTqtOs067TsNOy07TTttO41IDUgtSE1IbUiNSK1IzUjtSx1LLUs9S01LXUttS31LjUudS61LvUvNS91L7Uv9WA1YHVgtWD1YTVhdWG1YfViNWJ1YrVi9WM1Y3VjtWP1ZDVkdWS1ZPVlNWV1ZbhgqDhgqHhgqLhgqPhgqThgqXhgqbhgqfhgqjhgqnhgqrhgqvhgqzhgq3hgq7hgq/hgrDhgrHhgrLhgrPhgrThgrXhgrbhgrfhgrjhgrnhgrrhgrvhgrzhgr3hgr7hgr/hg4Dhg4Hhg4Lhg4Phg4Thg4XhuIDhuILhuIThuIbhuIjhuIrhuIzhuI7huJDhuJLhuJThuJbhuJjhuJrhuJzhuJ7huKDhuKLhuKThuKbhuKjhuKrhuKzhuK7huLDhuLLhuLThuLbhuLjhuLrhuLzhuL7huYDhuYLhuYThuYbhuYjhuYrhuYzhuY7huZDhuZLhuZThuZbhuZjhuZrhuZzhuZ7huaDhuaLhuaThuabhuajhuarhuazhua7hubDhubLhubThubbhubjhubrhubzhub7huoDhuoLhuoThuobhuojhuorhuozhuo7hupDhupLhupThuqDhuqLhuqThuqbhuqjhuqrhuqzhuq7hurDhurLhurThurbhurjhurrhurzhur7hu4Dhu4Lhu4Thu4bhu4jhu4rhu4zhu47hu5Dhu5Lhu5Thu5bhu5jhu5rhu5zhu57hu6Dhu6Lhu6Thu6bhu6jhu6rhu6zhu67hu7Dhu7Lhu7Thu7bhu7jhvIjhvInhvIrhvIvhvIzhvI3hvI7hvI/hvJjhvJnhvJrhvJvhvJzhvJ3hvKjhvKnhvKrhvKvhvKzhvK3hvK7hvK/hvLjhvLnhvLrhvLvhvLzhvL3hvL7hvL/hvYjhvYnhvYrhvYvhvYzhvY3hvZnhvZvhvZ3hvZ/hvajhvanhvarhvavhvazhva3hva7hva/hvrjhvrnhvrrhvrvhv4jhv4nhv4rhv4vhv5jhv5nhv5rhv5vhv6jhv6nhv6rhv6vhv6zhv7jhv7nhv7rhv7thYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5esKqwrXCusOfw6DDocOiw6PDpMOlw6bDp8Oow6nDqsOrw6zDrcOuw6/DsMOxw7LDs8O0w7XDtsO4w7nDusO7w7zDvcO+w7/EgcSDxIXEh8SJxIvEjcSPxJHEk8SVxJfEmcSbxJ3En8ShxKPEpcSnxKnEq8StxK/EscSzxLXEt8S4xLrEvMS+xYDFgsWExYbFiMWJxYvFjcWPxZHFk8WVxZfFmcWbxZ3Fn8WhxaPFpcWnxanFq8Wtxa/FscWzxbXFt8W6xbzFvsW/xoDGg8aFxojGjMaNxpLGlcaZxprGm8aexqHGo8alxqjGqsarxq3GsMa0xrbGuca6xr3Gvsa/x4bHiceMx47HkMeSx5THlseYx5rHnMedx5/Hocejx6XHp8epx6vHrcevx7DHs8e1x7nHu8e9x7/IgciDyIXIh8iJyIvIjciPyJHIk8iVyJfImcibyJ3In8ihyKPIpcinyKnIq8ityK/IscizyLTItci2yLfIuMi5yLzIv8mAyZDJkcmSyZPJlMmVyZbJl8mYyZnJmsmbyZzJncmeyZ/JoMmhyaLJo8mkyaXJpsmnyajJqcmqyavJrMmtya7Jr8mwybHJssmzybTJtcm2ybfJuMm5ybrJu8m8yb3Jvsm/yoDKgcqCyoPKhMqFyobKh8qIyonKisqLyozKjcqOyo/KkMqRypLKk8qUypXKlsqXypjKmcqaypvKnMqdyp7Kn8qgyqHKosqjyqTKpcqmyqfKqMqpyqrKq8qsyq3KrsqvzpDOrM6tzq7Or86wzrHOss6zzrTOtc62zrfOuM65zrrOu868zr3Ovs6/z4DPgc+Cz4PPhM+Fz4bPh8+Iz4nPis+Lz4zPjc+Oz5DPkc+Vz5bPl8+Zz5vPnc+fz6HPo8+lz6fPqc+rz63Pr8+wz7HPss+zz7XPuM+7z7zQsNCx0LLQs9C00LXQttC30LjQudC60LvQvNC90L7Qv9GA0YHRgtGD0YTRhdGG0YfRiNGJ0YrRi9GM0Y3RjtGP0ZDRkdGS0ZPRlNGV0ZbRl9GY0ZnRmtGb0ZzRndGe0Z/RodGj0aXRp9Gp0avRrdGv0bHRs9G10bfRudG70b3Rv9KB0ovSjdKP0pHSk9KV0pfSmdKb0p3Sn9Kh0qPSpdKn0qnSq9Kt0q/SsdKz0rXSt9K50rvSvdK/04LThNOG04jTitOM047TkdOT05XTl9OZ05vTndOf06HTo9Ol06fTqdOr063Tr9Ox07PTtdO307nUgdSD1IXUh9SJ1IvUjdSP1aHVotWj1aTVpdWm1afVqNWp1arVq9Ws1a3VrtWv1bDVsdWy1bPVtNW11bbVt9W41bnVutW71bzVvdW+1b/WgNaB1oLWg9aE1oXWhtaH4bSA4bSB4bSC4bSD4bSE4bSF4bSG4bSH4bSI4bSJ4bSK4bSL4bSM4bSN4bSO4bSP4bSQ4bSR4bSS4bST4bSU4bSV4bSW4bSX4bSY4bSZ4bSa4bSb4bSc4bSd4bSe4bSf4bSg4bSh4bSi4bSj4bSk4bSl4bSm4bSn4bSo4bSp4bSq4bSr4bWi4bWj4bWk4bWl4bWm4bWn4bWo4bWp4bWq4bWr4bWs4bWt4bWu4bWv4bWw4bWx4bWy4bWz4bW04bW14bW24bW34bW54bW64bW74bW84bW94bW+4bW/4baA4baB4baC4baD4baE4baF4baG4baH4baI4baJ4baK4baL4baM4baN4baO4baP4baQ4baR4baS4baT4baU4baV4baW4baX4baY4baZ4baa4biB4biD4biF4biH4biJ4biL4biN4biP4biR4biT4biV4biX4biZ4bib4bid4bif4bih4bij4bil4bin4bip4bir4bit4biv4bix4biz4bi14bi34bi54bi74bi94bi/4bmB4bmD4bmF4bmH4bmJ4bmL4bmN4bmP4bmR4bmT4bmV4bmX4bmZ4bmb4bmd4bmf4bmh4bmj4bml4bmn4bmp4bmr4bmt4bmv4bmx4bmz4bm14bm34bm54bm74bm94bm/4bqB4bqD4bqF4bqH4bqJ4bqL4bqN4bqP4bqR4bqT4bqV4bqW4bqX4bqY4bqZ4bqa4bqb4bqh4bqj4bql4bqn4bqp4bqr4bqt4bqv4bqx4bqz4bq14bq34bq54bq74bq94bq/4buB4buD4buF4buH4buJ4buL4buN4buP4buR4buT4buV4buX4buZ4bub4bud4buf4buh4buj4bul4bun4bup4bur4but4buv4bux4buz4bu14bu34bu54byA4byB4byC4byD4byE4byF4byG4byH4byQ4byR4byS4byT4byU4byV4byg4byh4byi4byj4byk4byl4bym4byn4byw4byx4byy4byz4by04by14by24by34b2A4b2B4b2C4b2D4b2E4b2F4b2Q4b2R4b2S4b2T4b2U4b2V4b2W4b2X4b2g4b2h4b2i4b2j4b2k4b2l4b2m4b2n4b2w4b2x4b2y4b2z4b204b214b224b234b244b254b264b274b284b294b6A4b6B4b6C4b6D4b6E4b6F4b6G4b6H4b6Q4b6R4b6S4b6T4b6U4b6V4b6W4b6X4b6g4b6h4b6i4b6j4b6k4b6l4b6m4b6n4b6w4b6x4b6y4b6z4b604b624b634b6+4b+C4b+D4b+E4b+G4b+H4b+Q4b+R4b+S4b+T4b+W4b+X4b+g4b+h4b+i4b+j4b+k4b+l4b+m4b+n4b+y4b+z4b+04b+24b+34rKB4rKD4rKF4rKH4rKJ4rKL4rKN4rKP4rKR4rKT4rKV4rKX4rKZ4rKb4rKd4rKf4rKh4rKj4rKl4rKn4rKp4rKr4rKt4rKv4rKx4rKz4rK14rK34rK54rK74rK94rK/4rOB4rOD4rOF4rOH4rOJ4rOL4rON4rOP4rOR4rOT4rOV4rOX4rOZ4rOb4rOd4rOf4rOh4rOj4rOk4rSA4rSB4rSC4rSD4rSE4rSF4rSG4rSH4rSI4rSJ4rSK4rSL4rSM4rSN4rSO4rSP4rSQ4rSR4rSS4rST4rSU4rSV4rSW4rSX4rSY4rSZ4rSa4rSb4rSc4rSd4rSe4rSf4rSg4rSh4rSi4rSj4rSk4rSl76yA76yB76yC76yD76yE76yF76yG76yT76yU76yV76yW76yXXGQtX15dL3V0ZgorCisvXlteZF0qPyQvCisgICAgYWJjCisKKy9eW15kXSo/JC91dGYKKyAgICBhYmMKKworL15bXmRdKj8kL2kKKyAgICBhYmMKKworL15bXmRdKj8kL2ksdXRmCisgICAgYWJjCisKKy8oP2kpW1x4YzNceGE5XHhjM1x4YmRdfFtceGMzXHhhOVx4YzNceGJkQV0vdXRmCisKKy9eW2FceHtjMH1dYi91dGYKKyAgICBceHtjMH1iCisKKy9eKFthXHh7YzB9XSo/KWFhL3V0ZgorICAgIGFceHtjMH1hYWFhLworCisvXihbYVx4e2MwfV0qPylhYS91dGYKKyAgICBhXHh7YzB9YWFhYS8KKyAgICBhXHh7YzB9YVx4e2MwfWFhYS8KKworL14oW2FceHtjMH1dKilhYS91dGYKKyAgICBhXHh7YzB9YWFhYS8KKyAgICBhXHh7YzB9YVx4e2MwfWFhYS8KKworL14oW2FceHtjMH1dKilhXHh7YzB9L3V0ZgorICAgIGFceHtjMH1hYWFhLworICAgIGFceHtjMH1hXHh7YzB9YWFhLworCisvQSovZyx1dGYKKyAgICBBQUJceHsxMjN9QkFBCisKKy8oYWJjKVwxL2ksdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgIGFiYworCisvKGFiYylcMS91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgYWJjCisKKy9hKCo6YVx4ezEyMzR9YikvdXRmLG1hcmsKKyAgICBhYmMKKworL2EoKjphwqNiKS91dGYsbWFyaworICAgIGFiYworCisjIE5vbmNoYXJhY3RlcnMKKworLy4vdXRmCisgICAgXHh7ZmZmZX0KKyAgICBceHtmZmZmfQorICAgIFx4ezFmZmZlfQorICAgIFx4ezFmZmZmfQorICAgIFx4ezJmZmZlfQorICAgIFx4ezJmZmZmfQorICAgIFx4ezNmZmZlfQorICAgIFx4ezNmZmZmfQorICAgIFx4ezRmZmZlfQorICAgIFx4ezRmZmZmfQorICAgIFx4ezVmZmZlfQorICAgIFx4ezVmZmZmfQorICAgIFx4ezZmZmZlfQorICAgIFx4ezZmZmZmfQorICAgIFx4ezdmZmZlfQorICAgIFx4ezdmZmZmfQorICAgIFx4ezhmZmZlfQorICAgIFx4ezhmZmZmfQorICAgIFx4ezlmZmZlfQorICAgIFx4ezlmZmZmfQorICAgIFx4e2FmZmZlfQorICAgIFx4e2FmZmZmfQorICAgIFx4e2JmZmZlfQorICAgIFx4e2JmZmZmfQorICAgIFx4e2NmZmZlfQorICAgIFx4e2NmZmZmfQorICAgIFx4e2RmZmZlfQorICAgIFx4e2RmZmZmfQorICAgIFx4e2VmZmZlfQorICAgIFx4e2VmZmZmfQorICAgIFx4e2ZmZmZlfQorICAgIFx4e2ZmZmZmfQorICAgIFx4ezEwZmZmZX0KKyAgICBceHsxMGZmZmZ9CisgICAgXHh7ZmRkMH0KKyAgICBceHtmZGQxfQorICAgIFx4e2ZkZDJ9CisgICAgXHh7ZmRkM30KKyAgICBceHtmZGQ0fQorICAgIFx4e2ZkZDV9CisgICAgXHh7ZmRkNn0KKyAgICBceHtmZGQ3fQorICAgIFx4e2ZkZDh9CisgICAgXHh7ZmRkOX0KKyAgICBceHtmZGRhfQorICAgIFx4e2ZkZGJ9CisgICAgXHh7ZmRkY30KKyAgICBceHtmZGRkfQorICAgIFx4e2ZkZGV9CisgICAgXHh7ZmRkZn0KKyAgICBceHtmZGUwfQorICAgIFx4e2ZkZTF9CisgICAgXHh7ZmRlMn0KKyAgICBceHtmZGUzfQorICAgIFx4e2ZkZTR9CisgICAgXHh7ZmRlNX0KKyAgICBceHtmZGU2fQorICAgIFx4e2ZkZTd9CisgICAgXHh7ZmRlOH0KKyAgICBceHtmZGU5fQorICAgIFx4e2ZkZWF9CisgICAgXHh7ZmRlYn0KKyAgICBceHtmZGVjfQorICAgIFx4e2ZkZWR9CisgICAgXHh7ZmRlZX0KKyAgICBceHtmZGVmfQorCisvXlxkKlx3ezR9L3V0ZgorICAgIDEyMzQKK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgMTIzCisKKy9eW15iXSpcd3s0fS91dGYKKyAgICBhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIGFhYQorCisvXlteYl0qXHd7NH0vaSx1dGYKKyAgICBhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIGFhYQorCisvXlx4ezEwMH0qLns0fS91dGYKKyAgICBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfQorCisvXlx4ezEwMH0qLns0fS9pLHV0ZgorICAgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgXHh7MTAwfVx4ezEwMH1ceHsxMDB9CisKKy9eYStbYVx4ezIwMH1dL3V0ZgorICAgIGFhCisKKy9eLlxCLlxCLi91dGYKKyAgICBceHsxMDEyM31ceHsxMDEyNH1ceHsxMDEyNX0KKworL14jW15ceHtmZmZmfV0jW15ceHtmZmZmfV0jW15ceHtmZmZmfV0jL3V0ZgorICAgICNceHsxMDAwMH0jXHh7MTAwfSNceHsxMGZmZmZ9IworICAgIAorIyBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQgdGVzdHMgCisKKy9eXHBDXHBMXHBNXHBOXHBQXHBTXHBaPC91dGYKKyAgICBceDdmXHh7YzB9XHh7MzBmfVx4ezY2MH1ceHs2NmN9XHh7ZjAxfVx4ezE2ODB9PAorICAgIFxucFx4ezMwMH05IVwkIDwgCitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIGFwXHh7MzAwfTkhXCQgPCAKKyAgCisvXlxQQy91dGYKKyAgICBYCitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIFx4N2YKKyAgCisvXlxQTC91dGYKKyAgICA5CitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIFx4e2MwfQorICAKKy9eXFBNL3V0ZgorICAgIFgKK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgXHh7MzBmfQorICAKKy9eXFBOL3V0ZgorICAgIFgKK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgXHh7NjYwfQorICAKKy9eXFBQL3V0ZgorICAgIFgKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBceHs2NmN9CisgIAorL15cUFMvdXRmCisgICAgWAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFx4e2YwMX0KKyAgCisvXlxQWi91dGYKKyAgICBYCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgXHh7MTY4MH0KKyAgICAKKy9eXHB7Q2N9L3V0ZgorICAgIFx4ezAxN30KKyAgICBceHswOWZ9IAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MDYwMH0gCisgIAorL15ccHtDZn0vdXRmCisgICAgXHh7NjAxfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MDlmfSAKKyAgCisvXlxwe0NufS91dGYKKyAgICBceHtlMDAwMH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezA5Zn0gCisgIAorL15ccHtDb30vdXRmCisgICAgXHh7ZjhmZn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezA5Zn0gCisgIAorL15ccHtMbH0vdXRmCisgICAgYQorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFoKKyAgICBceHtlMDAwfSAgCisgIAorL15ccHtMbX0vdXRmCisgICAgXHh7MmIwfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYSAKKyAgCisvXlxwe0xvfS91dGYKKyAgICBceHsxYmJ9CisgICAgXHh7MzQwMH0KKyAgICBceHszNDAxfQorICAgIFx4ezRkMDB9CisgICAgXHh7NGRiNH0KKyAgICBceHs0ZGI1fSAgICAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhIAorICAgIFx4ezJiMH0KKyAgICBceHs0ZGI2fSAKKyAgCisvXlxwe0x0fS91dGYKKyAgICBceHsxYzV9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhIAorICAgIFx4ezJiMH0KKyAgCisvXlxwe0x1fS91dGYKKyAgICBBCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsyYjB9CisgIAorL15ccHtNY30vdXRmCisgICAgXHh7OTAzfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezMwMH0KKyAgICAgICAKKy9eXHB7TWV9L3V0ZgorICAgIFx4ezQ4OH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBceHs5MDN9CisgICAgXHh7MzAwfQorICAKKy9eXHB7TW59L3V0ZgorICAgIFx4ezMwMH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBceHs5MDN9CisgIAorL15ccHtOZH0rL3V0ZgorICAgIDAxMjM0NTY3ODlceHs2NjB9XHh7NjYxfVx4ezY2Mn1ceHs2NjN9XHh7NjY0fVx4ezY2NX1ceHs2NjZ9XHh7NjY3fVx4ezY2OH1ceHs2Njl9XHh7NjZhfQorICAgIFx4ezZmMH1ceHs2ZjF9XHh7NmYyfVx4ezZmM31ceHs2ZjR9XHh7NmY1fVx4ezZmNn1ceHs2Zjd9XHh7NmY4fVx4ezZmOX1ceHs2ZmF9CisgICAgXHh7OTY2fVx4ezk2N31ceHs5Njh9XHh7OTY5fVx4ezk2YX1ceHs5NmJ9XHh7OTZjfVx4ezk2ZH1ceHs5NmV9XHh7OTZmfVx4ezk3MH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgCisvXlxwe05sfS91dGYKKyAgICBceHsxNmVlfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezk2Nn0KKyAgCisvXlxwe05vfS91dGYKKyAgICBceHtiMn0KKyAgICBceHtiM30KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBceHsxNmVlfQorICAKKy9eXHB7UGN9L3V0ZgorICAgIFx4NWYKKyAgICBceHsyMDNmfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIC0KKyAgICBceHs1OGF9CisgIAorL15ccHtQZH0vdXRmCisgICAgLQorICAgIFx4ezU4YX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBceHsyMDNmfQorICAKKy9eXHB7UGV9L3V0ZgorICAgICkKKyAgICBdCisgICAgfQorICAgIFx4e2YzYn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBceHsyMDNmfQorICAgICgKKyAgICBbCisgICAgeworICAgIFx4e2YzY30KKyAgCisvXlxwe1BmfS91dGYKKyAgICBceHtiYn0KKyAgICBceHsyMDE5fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezIwM2Z9CisgIAorL15ccHtQaX0vdXRmCisgICAgXHh7YWJ9CisgICAgXHh7MjAxOH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBceHsyMDNmfQorICAKKy9eXHB7UG99L3V0ZgorICAgICEKKyAgICBceHszN2V9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCisgICAgXHh7MjAzZn0KKyAgCisvXlxwe1BzfS91dGYKKyAgICAoCisgICAgWworICAgIHsKKyAgICBceHtmM2N9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCisgICAgKQorICAgIF0KKyAgICB9CisgICAgXHh7ZjNifQorICAKKy9eXHB7U2t9L3V0ZgorICAgIFx4ezJjMn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBceHs5ZjJ9CisgIAorL15ccHtTbX0rL3V0ZgorICAgICs8fH5ceHthY31ceHsyMDQ0fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezlmMn0KKyAgCisvXlxwe1NvfS91dGYKKyAgICBceHthNn0KKyAgICBceHs0ODJ9IAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezlmMn0KKyAgCisvXlxwe1psfS91dGYKKyAgICBceHsyMDI4fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezIwMjl9CisgIAorL15ccHtacH0vdXRmCisgICAgXHh7MjAyOX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBceHsyMDI4fQorICAKKy9ccHtOZH0rKC4uKS91dGYKKyAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvXHB7TmR9Kz8oLi4pL3V0ZgorICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworICAKKy9ccHtOZH17Mix9KC4uKS91dGYKKyAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvXHB7TmR9ezIsfT8oLi4pL3V0ZgorICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworICAKKy9ccHtOZH0qKC4uKS91dGYKKyAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvXHB7TmR9Kj8oLi4pL3V0ZgorICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworICAKKy9ccHtOZH17Mn0oLi4pL3V0ZgorICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworICAKKy9ccHtOZH17MiwzfSguLikvdXRmCisgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgIAorL1xwe05kfXsyLDN9PyguLikvdXRmCisgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgIAorL1xwe05kfT8oLi4pL3V0ZgorICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworICAKKy9ccHtOZH0/PyguLikvdXRmCisgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgIAorL1xwe05kfSorKC4uKS91dGYKKyAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvXHB7TmR9KisoLi4uKS91dGYKKyAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvXHB7TmR9KisoLi4uLikvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvKD88PUFccHtOZH0pWFlaL3V0ZgorICAgIEEyWFlaCisgICAgMTIzQTVYWVpQUVIKKyAgICBBQkFceHs2NjB9WFlacHFyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWFlaCisgICAgWFlaICAgICAKKyAgICAKKy8oPzwhXHBMKVhZWi91dGYKKyAgICAxWFlaCisgICAgQUI9WFlaLi4gCisgICAgWFlaIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgV1hZWiAKKworL1tcUHtOZH1dKy91dGYKKyAgICBhYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0CisKKy9cRCsvdXRmCisgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCisgICAgIAorL1xQe05kfSsvdXRmCisgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCisKKy9bXERdKy91dGYKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKKworL1tcUHtOZH1dKy91dGYKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKKworL1tcRFxQe05kfV0rL3V0ZgorICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorCisvXHBML3V0ZgorICAgIGEKKyAgICBBIAorCisvXHBML2ksdXRmCisgICAgYQorICAgIEEgCisgICAgCisvXHB7THV9L3V0ZgorICAgIEEKKyAgICBhWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjICAgCisKKy9ccHtMbH0vdXRmCisgICAgYQorICAgIEF6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkMgICAKKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS91dGYKKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfSAgIAorICAgIEFceHszYjF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorICAgIEFceHszOTF9XHh7MTA0NEZ9XHh7ZmYzYX1ceHsxZmIwfQorICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmY1YX1ceHsxZmIwfQorICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmI4fQorCisvQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9L2ksdXRmCisgICAgQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9CisgICAgYVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9ICAgCisgICAgQVx4ezNiMX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9CisgICAgQVx4ezM5MX1ceHsxMDQ0Rn1ceHtmZjNhfVx4ezFmYjB9CisgICAgQVx4ezM5MX1ceHsxMDQyN31ceHtmZjVhfVx4ezFmYjB9CisgICAgQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjh9CisKKy9ceHszOTF9Ky9pLHV0ZgorICAgIFx4ezM5MX1ceHszYjF9XHh7M2IxfVx4ezNiMX1ceHszOTF9CisKKy9ceHszOTF9ezMsNX0oLikvaSx1dGYKKyAgICBceHszOTF9XHh7M2IxfVx4ezNiMX1ceHszYjF9XHh7MzkxfVgKKworL1x4ezM5MX17Myw1fT8oLikvaSx1dGYKKyAgICBceHszOTF9XHh7M2IxfVx4ezNiMX1ceHszYjF9XHh7MzkxfVgKKworL1tceHszOTF9XHh7ZmYzYX1dL2ksdXRmCisgICAgXHh7MzkxfQorICAgIFx4e2ZmM2F9CisgICAgXHh7M2IxfQorICAgIFx4e2ZmNWF9ICAgCisgICAgCisvXihcWCopQy91dGYKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX0gCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9QyAKKworL14oXFgqPylDL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfSAKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX1DIAorCisvXihcWCopKC4pL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfSAKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX1DIAorCisvXihcWCo/KSguKS91dGYKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX0gCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9QyAKKworL15cWCguKS91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn0KKworL15cWHsyLDN9KC4pL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfUJceHszMDB9WAorICAgIEFceHszMDB9XHh7MzAxfUJceHszMDB9Q1x4ezMwMH1ceHszMDF9CisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DXHh7MzAwfVx4ezMwMX1YCisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DXHh7MzAwfVx4ezMwMX1EQVx4ezMwMH1YCisgICAgCisvXlxYezIsM30/KC4pL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfUJceHszMDB9WAorICAgIEFceHszMDB9XHh7MzAxfUJceHszMDB9Q1x4ezMwMH1ceHszMDF9CisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DXHh7MzAwfVx4ezMwMX1YCisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DXHh7MzAwfVx4ezMwMX1EQVx4ezMwMH1YCisKKy9eXFgvdXRmCisgICAgQQorICAgIEFceHszMDB9QkMgCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDIAorICAgIFx4ezMwMH0gIAorCisvXlxwe0hhbn0rL3V0ZgorICAgIFx4ezJlODF9XHh7MzAwN31ceHsyZjgwNH1ceHszMWEwfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MmU3Zn0gIAorCisvXlxQe0thdGFrYW5hfSsvdXRmCisgICAgXHh7MzEwNX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezMwZmZ9ICAKKworL15bXHB7QXJhYmljfV0vdXRmCisgICAgXHh7MDZlOX0KKyAgICBceHswNjBifQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWFx4ezA2ZTl9ICAgCisKKy9eW1xQe1lpfV0vdXRmCisgICAgXHh7MmY4MDB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHthMDE0fQorICAgIFx4e2E0YzZ9ICAgCisgICAgCisvXlxwe0FueX1YL3V0ZgorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFggIAorICAgIAorL15cUHtBbnl9WC91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYCisgICAgCisvXlxwe0FueX0/WC91dGYKKyAgICBYWVoKKyAgICBBWFlaCisgICAgXHh7MTIzNH1YWVogCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQlhZWiAgIAorCisvXlxQe0FueX0/WC91dGYKKyAgICBYWVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWiAKKyAgICBBQlhZWiAgIAorCisvXlxwe0FueX0rWC91dGYKKyAgICBBWFlaCisgICAgXHh7MTIzNH1YWVoKKyAgICBBXHh7MTIzNH1YWVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhZWgorCisvXlxQe0FueX0rWC91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWgorICAgIEFceHsxMjM0fVhZWgorICAgIFhZWgorCisvXlxwe0FueX0qWC91dGYKKyAgICBYWVoKKyAgICBBWFlaCisgICAgXHh7MTIzNH1YWVoKKyAgICBBXHh7MTIzNH1YWVoKKworL15cUHtBbnl9KlgvdXRmCisgICAgWFlaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWFlaCisgICAgXHh7MTIzNH1YWVoKKyAgICBBXHh7MTIzNH1YWVoKKworL15bXHB7QW55fV1YL3V0ZgorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFggIAorICAgIAorL15bXFB7QW55fV1YL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVgKKyAgICAKKy9eW1xwe0FueX1dP1gvdXRmCisgICAgWFlaCisgICAgQVhZWgorICAgIFx4ezEyMzR9WFlaIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJYWVogICAKKworL15bXFB7QW55fV0/WC91dGYKKyAgICBYWVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWiAKKyAgICBBQlhZWiAgIAorCisvXltccHtBbnl9XStYL3V0ZgorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWgorICAgIEFceHsxMjM0fVhZWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWFlaCisKKy9eW1xQe0FueX1dK1gvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWFlaCisgICAgXHh7MTIzNH1YWVoKKyAgICBBXHh7MTIzNH1YWVoKKyAgICBYWVoKKworL15bXHB7QW55fV0qWC91dGYKKyAgICBYWVoKKyAgICBBWFlaCisgICAgXHh7MTIzNH1YWVoKKyAgICBBXHh7MTIzNH1YWVoKKworL15bXFB7QW55fV0qWC91dGYKKyAgICBYWVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWgorICAgIEFceHsxMjM0fVhZWgorCisvXlxwe0FueX17Myw1fT8vdXRmCisgICAgYWJjZGVmZ2gKKyAgICBceHsxMjM0fVxuXHJceHszNDU2fXh5eiAKKworL15ccHtBbnl9ezMsNX0vdXRmCisgICAgYWJjZGVmZ2gKKyAgICBceHsxMjM0fVxuXHJceHszNDU2fXh5eiAKKworL15cUHtBbnl9ezMsNX0/L3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGVmZ2gKKyAgICBceHsxMjM0fVxuXHJceHszNDU2fXh5eiAKKworL15ccHtMJn1YL3V0ZgorICAgICBBWFkKKyAgICAgYVhZCisgICAgIFx4ezFjNX1YWQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MWJifVhZCisgICAgXHh7MmIwfVhZCisgICAgIVhZICAgICAgCisKKy9eW1xwe0wmfV1YL3V0ZgorICAgIEFYWQorICAgIGFYWQorICAgICBceHsxYzV9WFkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezFiYn1YWQorICAgIFx4ezJiMH1YWQorICAgICFYWSAgICAgIAorCisvXlxwe0wmfStYL3V0ZgorICAgIEFYWQorICAgIGFYWQorICAgIEFiY2RlWHl6IAorICAgIFx4ezFjNX1BYlhZCisgICAgYWJjREVYeXBxcmVYbG1uIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MWJifVhZCisgICAgXHh7MmIwfVhZCisgICAgIVhZICAgICAgCisKKy9eW1xwe0wmfV0rWC91dGYKKyAgICBBWFkKKyAgICBhWFkKKyAgICBBYmNkZVh5eiAKKyAgICBceHsxYzV9QWJYWQorICAgIGFiY0RFWHlwcXJlWGxtbiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezFiYn1YWQorICAgIFx4ezJiMH1YWQorICAgICFYWSAgICAgIAorCisvXlxwe0wmfSs/WC91dGYKKyAgICBBWFkKKyAgICBhWFkKKyAgICBBYmNkZVh5eiAKKyAgICBceHsxYzV9QWJYWQorICAgIGFiY0RFWHlwcXJlWGxtbiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezFiYn1YWQorICAgIFx4ezJiMH1YWQorICAgICFYWSAgICAgIAorCisvXltccHtMJn1dKz9YL3V0ZgorICAgIEFYWQorICAgIGFYWQorICAgIEFiY2RlWHl6IAorICAgIFx4ezFjNX1BYlhZCisgICAgYWJjREVYeXBxcmVYbG1uIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MWJifVhZCisgICAgXHh7MmIwfVhZCisgICAgIVhZICAgICAgCisKKy9eXFB7TCZ9WC91dGYKKyAgICAhWFkKKyAgICBceHsxYmJ9WFkKKyAgICBceHsyYjB9WFkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezFjNX1YWQorICAgIEFYWSAgICAgIAorCisvXltcUHtMJn1dWC91dGYKKyAgICAhWFkKKyAgICBceHsxYmJ9WFkKKyAgICBceHsyYjB9WFkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezFjNX1YWQorICAgIEFYWSAgICAgIAorCisvXihccHtafVteXHB7Q31ccHtafV0rKSokLworICAgIFx4YTAhCisKKy9eW1xwTF0oYWJjKSg/MSkvCisgICAgQWFiY2FiY1laICAgIAorCisvKFtccExdPShhYmMpKSpYLworICAgIEw9YWJjWAorCisvXlxwe0JhbGluZXNlfVxwe0N1bmVpZm9ybX1ccHtOa299XHB7UGhhZ3NfUGF9XHB7UGhvZW5pY2lhbn0vdXRmCisgICAgXHh7MWIwMH1ceHsxMjAwMH1ceHs3YzB9XHh7YTg0MH1ceHsxMDkwMH0KKworIyBDaGVjayBwcm9wZXJ0eSBzdXBwb3J0IGluIG5vbi1VVEYgbW9kZQorIAorL1xwe0x9ezR9LworICAgIDEyM2FiY2RlZmcKKyAgICAxMjNhYmNceGM0XHhjNXp6CisKKy9cWHsxLDN9XGQvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceDhhQkNECisgIAorL1xYP1xkLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHg4YUJDRCAKKworL1xQe0x9P1xkLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHg4YUJDRCAKKworL1tcUFBQXHg4YV17MSx9XHg4MC8KKyAgICBBXHg4MAorCisvXltccHtBcmFiaWN9XS91dGYKKyAgICBceHs2MDR9CisgICAgXHh7NjBlfSAKKyAgICBceHs2NTZ9IAorICAgIFx4ezY1N30gCisgICAgXHh7NjU4fSAKKyAgICBceHs2NTl9IAorICAgIFx4ezY1YX0gCisgICAgXHh7NjVifSAKKyAgICBceHs2NWN9IAorICAgIFx4ezY1ZH0gCisgICAgXHh7NjVlfSAKKyAgICBceHs2NWZ9CisgICAgXHh7NjZhfSAKKyAgICBceHs2ZTl9IAorICAgIFx4ezZlZn0KKyAgICBceHs2ZmF9ICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezY1MH0KKyAgICBceHs2NTF9ICAKKyAgICBceHs2NTJ9ICAKKyAgICBceHs2NTN9ICAKKyAgICBceHs2NTR9IAorICAgIFx4ezY1NX0gCisgICAgCisvXlxwe0N5cmlsbGljfS91dGYKKyAgICBceHsxZDJifSAKKyAgICAKKy9eXHB7Q29tbW9ufS91dGYKKyAgICBceHs1ODl9CisgICAgXHh7NjBjfQorICAgIFx4ezYxZn0gIAorICAgIFx4ezk2NH0KKyAgICBceHs5NjV9ICAKKworL15ccHtJbmhlcml0ZWR9L3V0ZgorICAgIFx4ezY0Yn0KKyAgICBceHs2NTR9CisgICAgXHh7NjU1fQorICAgIFx4ezIwMGN9IAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7NjRhfQorICAgIFx4ezY1Nn0gICAgIAorCisvXlxwe1NoYXZpYW59L3V0ZgorICAgIFx4ezEwNDUwfQorICAgIFx4ezEwNDdmfQorICAgIAorL15ccHtEZXNlcmV0fS91dGYKKyAgICBceHsxMDQwMH0KKyAgICBceHsxMDQ0Zn0KKyAgICAKKy9eXHB7T3NtYW55YX0vdXRmCisgICAgXHh7MTA0ODB9CisgICAgXHh7MTA0OWR9CisgICAgXHh7MTA0YTB9CisgICAgXHh7MTA0YTl9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDQ5ZX0KKyAgICBceHsxMDQ5Zn0KKyAgICBceHsxMDRhYX0gICAgICAgICAgIAorCisvXHB7Q2FyaWFufVxwe0NoYW19XHB7S2F5YWhfTGl9XHB7TGVwY2hhfVxwe0x5Y2lhbn1ccHtMeWRpYW59XHB7T2xfQ2hpa2l9XHB7UmVqYW5nfVxwe1NhdXJhc2h0cmF9XHB7U3VuZGFuZXNlfVxwe1ZhaX0vdXRmCisgICAgXHh7MTAyQTR9XHh7QUE1Mn1ceHtBOTFEfVx4ezFDNDZ9XHh7MTAyODN9XHh7MTA5MkV9XHh7MUM2Qn1ceHtBOTNCfVx4e0E4QkZ9XHh7MUJBMH1ceHtBNTBBfT09PT0KKworL1x4e2E3N2R9XHh7MWQ3OX0vaSx1dGYKKyAgICBceHthNzdkfVx4ezFkNzl9CisgICAgXHh7MWQ3OX1ceHthNzdkfSAKKworL1x4e2E3N2R9XHh7MWQ3OX0vdXRmCisgICAgXHh7YTc3ZH1ceHsxZDc5fQorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFx4ezFkNzl9XHh7YTc3ZH0gCisKKy8oQSlcMS9pLHV0ZgorICAgIEFBCisgICAgQWEKKyAgICBhYQorICAgIGFBCisKKy8oXHh7MTBhfSlcMS9pLHV0ZgorICAgIFx4ezEwYX1ceHsxMGF9CisgICAgXHh7MTBhfVx4ezEwYn0KKyAgICBceHsxMGJ9XHh7MTBifQorICAgIFx4ezEwYn1ceHsxMGF9CisgICAgCisjIFRoZSBuZXh0IHR3byB0ZXN0cyBhcmUgZm9yIHByb3BlcnR5IHN1cHBvcnQgaW4gbm9uLVVURiBtb2RlCisKKy8oPzpccHtMdX18XHgyMCkrLworICAgIFx4NDFceDIwXHg1MFx4QzJceDU0XHhDOVx4MjBceDU0XHg0Rlx4NDRceDQxXHg1OQorCisvW1xwe0x1fVx4MjBdKy8KKyAgICBceDQxXHgyMFx4NTBceEMyXHg1NFx4QzlceDIwXHg1NFx4NEZceDQ0XHg0MVx4NTkKKworL1xwe0F2ZXN0YW59XHB7QmFtdW19XHB7RWd5cHRpYW5fSGllcm9nbHlwaHN9XHB7SW1wZXJpYWxfQXJhbWFpY31ccHtJbnNjcmlwdGlvbmFsX1BhaGxhdml9XHB7SW5zY3JpcHRpb25hbF9QYXJ0aGlhbn1ccHtKYXZhbmVzZX1ccHtLYWl0aGl9XHB7TGlzdX1ccHtNZWV0ZWlfTWF5ZWt9XHB7T2xkX1NvdXRoX0FyYWJpYW59XHB7T2xkX1R1cmtpY31ccHtTYW1hcml0YW59XHB7VGFpX1RoYW19XHB7VGFpX1ZpZXR9L3V0ZgorICAgIFx4ezEwYjAwfVx4e2E2ZWZ9XHh7MTMwMDd9XHh7MTA4NTd9XHh7MTBiNzh9XHh7MTBiNTh9XHh7YTk4MH1ceHsxMTBjMX1ceHthNGZmfVx4e2FiYzB9XHh7MTBhN2R9XHh7MTBjNDh9XHh7MDgwMH1ceHsxYWFkfVx4e2FhYzB9CisKKy9eXHcrL3V0Zix1Y3AKKyAgICBBel9ceHthYX1ceHtjMH1ceHsxYzV9XHh7MmIwfVx4ezNiNn1ceHsxZDdjOX1ceHsyZmExZH0xXHh7NjYwfVx4e2JlZn1ceHsxNmVlfQorCisvXltbOnhkaWdpdDpdXSovdXRmLHVjcAorICAgIDFhXHh7NjYwfVx4e2JlZn1ceHsxNmVlfQorICAKKy9eXGQrL3V0Zix1Y3AKKyAgICAxXHh7NjYwfVx4e2JlZn1ceHsxNmVlfQorICAKKy9eW1s6ZGlnaXQ6XV0rL3V0Zix1Y3AKKyAgICAxXHh7NjYwfVx4e2JlZn1ceHsxNmVlfQorCisvXj5ccysvdXRmLHVjcAorICAgID5ceHsyMH1ceHthMH1ceHsxNjgwfVx4ezIwMjh9XHh7MjAyOX1ceHsyMDJmfVx4ezl9XHh7Yn0gCisgIAorL14+XHBaKy91dGYsdWNwCisgICAgPlx4ezIwfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHsyMDI5fVx4ezIwMmZ9XHh7OX1ceHtifSAKKyAgCisvXj5bWzpzcGFjZTpdXSovdXRmLHVjcAorICAgID5ceHsyMH1ceHthMH1ceHsxNjgwfVx4ezIwMjh9XHh7MjAyOX1ceHsyMDJmfVx4ezl9XHh7Yn0gCisKKy9ePltbOmJsYW5rOl1dKi91dGYsdWNwCisgICAgPlx4ezIwfVx4e2EwfVx4ezE2ODB9XHh7MjAwMH1ceHsyMDJmfVx4ezl9XHh7Yn1ceHsyMDI4fSAKKworL15bWzphbHBoYTpdXSovdXRmLHVjcAorICAgIEF6XHh7YWF9XHh7YzB9XHh7MWM1fVx4ezJiMH1ceHszYjZ9XHh7MWQ3Yzl9XHh7MmZhMWR9CisKKy9eW1s6YWxudW06XV0qL3V0Zix1Y3AKKyAgICBBelx4e2FhfVx4e2MwfVx4ezFjNX1ceHsyYjB9XHh7M2I2fVx4ezFkN2M5fVx4ezJmYTFkfTFceHs2NjB9XHh7YmVmfVx4ezE2ZWV9CisKKy9eW1s6Y250cmw6XV0qL3V0Zix1Y3AKKyAgICBceHswfVx4ezA5fVx4ezFmfVx4ezdmfVx4ezlmfSAKKworL15bWzpncmFwaDpdXSovdXRmLHVjcAorICAgIEFceHthMX1ceHthMH0KKworL15bWzpwcmludDpdXSovdXRmLHVjcAorICAgIEEgelx4e2EwfVx4e2ExfQorCisvXltbOnB1bmN0Ol1dKi91dGYsdWNwCisgICAgLitceHthMX1ceHthMH0KKworL1xwe1pzfSo/XFIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHhGQ2IgICAKKworL1xwe1pzfSpcUi8KK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhXHhGQ2IgICAKKworL+KxpS9pLHV0ZgorICAgIOKxpQorICAgIMi6eCAKKyAgICDIuiAKKworL1visaVdL2ksdXRmCisgICAg4rGlCisgICAgyLp4IAorICAgIMi6IAorCisvyLovaSx1dGYKKyAgICDIugorICAgIOKxpQorICAgIAorIyBUaGVzZSBhcmUgdGVzdHMgZm9yIGV4dGVuZGVkIGdyYXBoZW1lIGNsdXN0ZXJzICAKKworL15cWC91dGYsYWZ0ZXJ0ZXh0CisgICAgR1x4ezM0ZX1ceHszNGV9WAorICAgIFx4ezM0ZX1ceHszNGV9WAorICAgIFx4MDRYCisgICAgXHh7MTEwMH1YCisgICAgXHh7MTEwMH1ceHszNGV9WAorICAgIFx4ezFiMDR9XHh7MWIwNH1YIAorICAgICpUaGVzZSBtYXRjaCB1cCB0byB0aGUgcm9tYW4gbGV0dGVycworICAgIFx4ezExMTF9XHh7MTExMX1MLEwKKyAgICBceHsxMTExfVx4ezExMTF9XHh7MTE2OX1MLEwsVgorICAgIFx4ezExMTF9XHh7YWU0Y31MLCBMVgorICAgIFx4ezExMTF9XHh7YWQ4OX1MLCBMVlQKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTE2OX1MLCBMViwgVgorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxMTY5fVx4ezExNjl9TCwgTFYsIFYsIFYKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTE2OX1ceHsxMWZlfUwsIExWLCBWLCBUCisgICAgXHh7MTExMX1ceHthZDg5fVx4ezExZmV9TCwgTFZULCBUCisgICAgXHh7MTExMX1ceHthZDg5fVx4ezExZmV9XHh7MTFmZX1MLCBMVlQsIFQsIFQKKyAgICBceHthZDg5fVx4ezExZmV9XHh7MTFmZX1MVlQsIFQsIFQKKyAgICAqVGhlc2UgbWF0Y2gganVzdCB0aGUgZmlyc3QgY29kZXBvaW50IChpbnZhbGlkIHNlcXVlbmNlKQorICAgIFx4ezExMTF9XHh7MTFmZX1MLCBUCisgICAgXHh7YWU0Y31ceHsxMTExfUxWLCBMCisgICAgXHh7YWU0Y31ceHthZTRjfUxWLCBMVgorICAgIFx4e2FlNGN9XHh7YWQ4OX1MViwgTFZUCisgICAgXHh7MTE2OX1ceHsxMTExfVYsIEwKKyAgICBceHsxMTY5fVx4e2FlNGN9ViwgTFYKKyAgICBceHsxMTY5fVx4e2FkODl9ViwgTFZUCisgICAgXHh7YWQ4OX1ceHsxMTExfUxWVCwgTAorICAgIFx4e2FkODl9XHh7MTE2OX1MVlQsIFYKKyAgICBceHthZDg5fVx4e2FlNGN9TFZULCBMVgorICAgIFx4e2FkODl9XHh7YWQ4OX1MVlQsIExWVAorICAgIFx4ezExZmV9XHh7MTExMX1ULCBMCisgICAgXHh7MTFmZX1ceHsxMTY5fVQsIFYKKyAgICBceHsxMWZlfVx4e2FlNGN9VCwgTFYKKyAgICBceHsxMWZlfVx4e2FkODl9VCwgTFZUCisgICAgKlRlc3QgZXh0ZW5kIGFuZCBzcGFjaW5nIG1hcmsKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MDcxMX1MLCBMViwgZXh0ZW5kCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezFiMDR9TCwgTFYsIHNwYWNpbmcgbWFyaworICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxYjA0fVx4ezA3MTF9XHh7MWIwNH1MLCBMViwgc3BhY2luZyBtYXJrLCBleHRlbmQsIHNwYWNpbmcgbWFyaworICAgICpUZXN0IENSLCBMRiwgYW5kIGNvbnRyb2wKKyAgICBceDBkXHh7MDcxMX1DUiwgZXh0ZW5kCisgICAgXHgwZFx4ezFiMDR9Q1IsIHNwYWNpbmdtYXJrCisgICAgXHgwYVx4ezA3MTF9TEYsIGV4dGVuZAorICAgIFx4MGFceHsxYjA0fUxGLCBzcGFjaW5nbWFyaworICAgIFx4MGJceHswNzExfUNvbnRyb2wsIGV4dGVuZAorICAgIFx4MDlceHsxYjA0fUNvbnRyb2wsIHNwYWNpbmdtYXJrCisgICAgKlRoZXJlIGFyZSBubyBQcmVwZW5kIGNoYXJhY3RlcnMsIHNvIHdlIGNhbid0IHRlc3QgUHJlcGVuZCwgQ1IKKyAgICAKKy9eKD8+XFh7Mn0pWC91dGYsYWZ0ZXJ0ZXh0CisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgICAgCisvXlxYezIsNH1YL3V0ZixhZnRlcnRleHQKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKworL15cWHsyLDR9P1gvdXRmLGFmdGVydGV4dAorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorCisvXFgqWi91dGYsbm9fc3RhcnRfb3B0aW1pemUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFceHszMDB9CisKKy9cWCooLikvdXRmLG5vX3N0YXJ0X29wdGltaXplCisgICAgQVx4ezExMTF9XHh7YWU0Y31ceHsxMTY5fQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxZTllfSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisKKy9belx4ezFlOWV9XSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisKKy9ceHswMGRmfSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisKKy9belx4ezAwZGZ9XSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisKKy9ceHsxZjg4fSsvaSx1dGYKKyAgICBceHsxZjg4fVx4ezFmODB9IAorCisvW3pceHsxZjg4fV0rL2ksdXRmCisgICAgXHh7MWY4OH1ceHsxZjgwfSAKKyAgICAKKyMgQ2hhcmFjdGVycyB3aXRoIG1vcmUgdGhhbiBvbmUgb3RoZXIgY2FzZTsgdGVzdCBpbiBjbGFzc2VzIAorCisvW3pceHswMGI1fV0rL2ksdXRmCisgICAgXHh7MDBiNX1ceHswMzljfVx4ezAzYmN9CisKKy9belx4ezAzOWN9XSsvaSx1dGYKKyAgICBceHswMGI1fVx4ezAzOWN9XHh7MDNiY30KKworL1t6XHh7MDNiY31dKy9pLHV0ZgorICAgIFx4ezAwYjV9XHh7MDM5Y31ceHswM2JjfQorCisvW3pceHswMGM1fV0rL2ksdXRmCisgICAgXHh7MDBjNX1ceHswMGU1fVx4ezIxMmJ9CisKKy9belx4ezAwZTV9XSsvaSx1dGYKKyAgICBceHswMGM1fVx4ezAwZTV9XHh7MjEyYn0KKworL1t6XHh7MjEyYn1dKy9pLHV0ZgorICAgIFx4ezAwYzV9XHh7MDBlNX1ceHsyMTJifQorCisvW3pceHswMWM0fV0rL2ksdXRmCisgICAgXHh7MDFjNH1ceHswMWM1fVx4ezAxYzZ9CisKKy9belx4ezAxYzV9XSsvaSx1dGYKKyAgICBceHswMWM0fVx4ezAxYzV9XHh7MDFjNn0KKworL1t6XHh7MDFjNn1dKy9pLHV0ZgorICAgIFx4ezAxYzR9XHh7MDFjNX1ceHswMWM2fQorCisvW3pceHswMWM3fV0rL2ksdXRmCisgICAgXHh7MDFjN31ceHswMWM4fVx4ezAxYzl9CisKKy9belx4ezAxYzh9XSsvaSx1dGYKKyAgICBceHswMWM3fVx4ezAxYzh9XHh7MDFjOX0KKworL1t6XHh7MDFjOX1dKy9pLHV0ZgorICAgIFx4ezAxYzd9XHh7MDFjOH1ceHswMWM5fQorCisvW3pceHswMWNhfV0rL2ksdXRmCisgICAgXHh7MDFjYX1ceHswMWNifVx4ezAxY2N9CisKKy9belx4ezAxY2J9XSsvaSx1dGYKKyAgICBceHswMWNhfVx4ezAxY2J9XHh7MDFjY30KKworL1t6XHh7MDFjY31dKy9pLHV0ZgorICAgIFx4ezAxY2F9XHh7MDFjYn1ceHswMWNjfQorCisvW3pceHswMWYxfV0rL2ksdXRmCisgICAgXHh7MDFmMX1ceHswMWYyfVx4ezAxZjN9CisKKy9belx4ezAxZjJ9XSsvaSx1dGYKKyAgICBceHswMWYxfVx4ezAxZjJ9XHh7MDFmM30KKworL1t6XHh7MDFmM31dKy9pLHV0ZgorICAgIFx4ezAxZjF9XHh7MDFmMn1ceHswMWYzfQorCisvW3pceHswMzQ1fV0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKworL1t6XHh7MDM5OX1dKy9pLHV0ZgorICAgIFx4ezAzNDV9XHh7MDM5OX1ceHswM2I5fVx4ezFmYmV9CisKKy9belx4ezAzYjl9XSsvaSx1dGYKKyAgICBceHswMzQ1fVx4ezAzOTl9XHh7MDNiOX1ceHsxZmJlfQorCisvW3pceHsxZmJlfV0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKworL1t6XHh7MDM5Mn1dKy9pLHV0ZgorICAgIFx4ezAzOTJ9XHh7MDNiMn1ceHswM2QwfQorCisvW3pceHswM2IyfV0rL2ksdXRmCisgICAgXHh7MDM5Mn1ceHswM2IyfVx4ezAzZDB9CisKKy9belx4ezAzZDB9XSsvaSx1dGYKKyAgICBceHswMzkyfVx4ezAzYjJ9XHh7MDNkMH0KKworL1t6XHh7MDM5NX1dKy9pLHV0ZgorICAgIFx4ezAzOTV9XHh7MDNiNX1ceHswM2Y1fQorCisvW3pceHswM2I1fV0rL2ksdXRmCisgICAgXHh7MDM5NX1ceHswM2I1fVx4ezAzZjV9CisKKy9belx4ezAzZjV9XSsvaSx1dGYKKyAgICBceHswMzk1fVx4ezAzYjV9XHh7MDNmNX0KKworL1t6XHh7MDM5OH1dKy9pLHV0ZgorICAgIFx4ezAzOTh9XHh7MDNiOH1ceHswM2QxfVx4ezAzZjR9CisKKy9belx4ezAzYjh9XSsvaSx1dGYKKyAgICBceHswMzk4fVx4ezAzYjh9XHh7MDNkMX1ceHswM2Y0fQorCisvW3pceHswM2QxfV0rL2ksdXRmCisgICAgXHh7MDM5OH1ceHswM2I4fVx4ezAzZDF9XHh7MDNmNH0KKworL1t6XHh7MDNmNH1dKy9pLHV0ZgorICAgIFx4ezAzOTh9XHh7MDNiOH1ceHswM2QxfVx4ezAzZjR9CisKKy9belx4ezAzOWF9XSsvaSx1dGYKKyAgICBceHswMzlhfVx4ezAzYmF9XHh7MDNmMH0KKworL1t6XHh7MDNiYX1dKy9pLHV0ZgorICAgIFx4ezAzOWF9XHh7MDNiYX1ceHswM2YwfQorCisvW3pceHswM2YwfV0rL2ksdXRmCisgICAgXHh7MDM5YX1ceHswM2JhfVx4ezAzZjB9CisKKy9belx4ezAzYTB9XSsvaSx1dGYKKyAgICBceHswM2EwfVx4ezAzYzB9XHh7MDNkNn0gCisKKy9belx4ezAzYzB9XSsvaSx1dGYKKyAgICBceHswM2EwfVx4ezAzYzB9XHh7MDNkNn0gCisKKy9belx4ezAzZDZ9XSsvaSx1dGYKKyAgICBceHswM2EwfVx4ezAzYzB9XHh7MDNkNn0gCisKKy9belx4ezAzYTF9XSsvaSx1dGYKKyAgICBceHswM2ExfVx4ezAzYzF9XHh7MDNmMX0KKworL1t6XHh7MDNjMX1dKy9pLHV0ZgorICAgIFx4ezAzYTF9XHh7MDNjMX1ceHswM2YxfQorCisvW3pceHswM2YxfV0rL2ksdXRmCisgICAgXHh7MDNhMX1ceHswM2MxfVx4ezAzZjF9CisKKy9belx4ezAzYTN9XSsvaSx1dGYKKyAgICBceHswM0EzfVx4ezAzQzJ9XHh7MDNDM30KKworL1t6XHh7MDNjMn1dKy9pLHV0ZgorICAgIFx4ezAzQTN9XHh7MDNDMn1ceHswM0MzfQorCisvW3pceHswM2MzfV0rL2ksdXRmCisgICAgXHh7MDNBM31ceHswM0MyfVx4ezAzQzN9CisKKy9belx4ezAzYTZ9XSsvaSx1dGYKKyAgICBceHswM2E2fVx4ezAzYzZ9XHh7MDNkNX0gCisKKy9belx4ezAzYzZ9XSsvaSx1dGYKKyAgICBceHswM2E2fVx4ezAzYzZ9XHh7MDNkNX0gCisKKy9belx4ezAzZDV9XSsvaSx1dGYKKyAgICBceHswM2E2fVx4ezAzYzZ9XHh7MDNkNX0gCisKKy9belx4ezAzYzl9XSsvaSx1dGYKKyAgICBceHswM2M5fVx4ezAzYTl9XHh7MjEyNn0KKworL1t6XHh7MDNhOX1dKy9pLHV0ZgorICAgIFx4ezAzYzl9XHh7MDNhOX1ceHsyMTI2fQorCisvW3pceHsyMTI2fV0rL2ksdXRmCisgICAgXHh7MDNjOX1ceHswM2E5fVx4ezIxMjZ9CisKKy9belx4ezFlNjB9XSsvaSx1dGYKKyAgICBceHsxZTYwfVx4ezFlNjF9XHh7MWU5Yn0KKworL1t6XHh7MWU2MX1dKy9pLHV0ZgorICAgIFx4ezFlNjB9XHh7MWU2MX1ceHsxZTlifQorCisvW3pceHsxZTlifV0rL2ksdXRmCisgICAgXHh7MWU2MH1ceHsxZTYxfVx4ezFlOWJ9CisKKyMgUGVybCA1LjEyLjQgZ2V0cyB0aGVzZSB3cm9uZywgYnV0IDUuMTUuMyBpcyBPSyAKKworL1t6XHh7MDA0Yn1dKy9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorCisvW3pceHswMDZifV0rL2ksdXRmCisgICAgXHh7MDA0Yn1ceHswMDZifVx4ezIxMmF9CisKKy9belx4ezIxMmF9XSsvaSx1dGYKKyAgICBceHswMDRifVx4ezAwNmJ9XHh7MjEyYX0KKworL1t6XHh7MDA1M31dKy9pLHV0ZgorICAgIFx4ezAwNTN9XHh7MDA3M31ceHswMTdmfQorCisvW3pceHswMDczfV0rL2ksdXRmCisgICAgXHh7MDA1M31ceHswMDczfVx4ezAxN2Z9CisKKy9belx4ezAxN2Z9XSsvaSx1dGYKKyAgICBceHswMDUzfVx4ezAwNzN9XHh7MDE3Zn0KKyAgICAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorCisvKM6jzobOnM6fzqMpIFwxL2ksdXRmCisgICAgzqPOhs6czp/OoyDOo86GzpzOn86jCisgICAgzqPOhs6czp/OoyDPg86szrzOv8+CCisgICAgz4POrM68zr/PgiDPg86szrzOv8+CCisgICAgz4POrM68zr/PgiDPg86szrzOv8+DCisgICAgz4POrM68zr/PgiDOo86GzpzOn86jICAKKworLyjPg86szrzOv8+CKSBcMS9pLHV0ZgorICAgIM6jzobOnM6fzqMgzqPOhs6czp/OoworICAgIM6jzobOnM6fzqMgz4POrM68zr/PggorICAgIM+DzqzOvM6/z4Igz4POrM68zr/PggorICAgIM+DzqzOvM6/z4Igz4POrM68zr/PgworICAgIM+DzqzOvM6/z4IgzqPOhs6czp/OoyAgCisKKy8ozqPOhs6czp/OoykgXDEqL2ksdXRmCisgICAgzqPOhs6czp/Oo1x4MjAKKyAgICDOo86GzpzOn86jIM6jzobOnM6fzqPPg86szrzOv8+Cz4POrM68zr/PggorCisjIFBlcmwgbWF0Y2hlcyB0aGVzZSAKKworL1x4ezAwYjV9Ky9pLHV0ZgorICAgIFx4ezAwYjV9XHh7MDM5Y31ceHswM2JjfQorCisvXHh7MDM5Y30rL2ksdXRmCisgICAgXHh7MDBiNX1ceHswMzljfVx4ezAzYmN9CisKKy9ceHswM2JjfSsvaSx1dGYKKyAgICBceHswMGI1fVx4ezAzOWN9XHh7MDNiY30KKworCisvXHh7MDBjNX0rL2ksdXRmCisgICAgXHh7MDBjNX1ceHswMGU1fVx4ezIxMmJ9CisKKy9ceHswMGU1fSsvaSx1dGYKKyAgICBceHswMGM1fVx4ezAwZTV9XHh7MjEyYn0KKworL1x4ezIxMmJ9Ky9pLHV0ZgorICAgIFx4ezAwYzV9XHh7MDBlNX1ceHsyMTJifQorCisKKy9ceHswMWM0fSsvaSx1dGYKKyAgICBceHswMWM0fVx4ezAxYzV9XHh7MDFjNn0KKworL1x4ezAxYzV9Ky9pLHV0ZgorICAgIFx4ezAxYzR9XHh7MDFjNX1ceHswMWM2fQorCisvXHh7MDFjNn0rL2ksdXRmCisgICAgXHh7MDFjNH1ceHswMWM1fVx4ezAxYzZ9CisKKworL1x4ezAxYzd9Ky9pLHV0ZgorICAgIFx4ezAxYzd9XHh7MDFjOH1ceHswMWM5fQorCisvXHh7MDFjOH0rL2ksdXRmCisgICAgXHh7MDFjN31ceHswMWM4fVx4ezAxYzl9CisKKy9ceHswMWM5fSsvaSx1dGYKKyAgICBceHswMWM3fVx4ezAxYzh9XHh7MDFjOX0KKworCisvXHh7MDFjYX0rL2ksdXRmCisgICAgXHh7MDFjYX1ceHswMWNifVx4ezAxY2N9CisKKy9ceHswMWNifSsvaSx1dGYKKyAgICBceHswMWNhfVx4ezAxY2J9XHh7MDFjY30KKworL1x4ezAxY2N9Ky9pLHV0ZgorICAgIFx4ezAxY2F9XHh7MDFjYn1ceHswMWNjfQorCisKKy9ceHswMWYxfSsvaSx1dGYKKyAgICBceHswMWYxfVx4ezAxZjJ9XHh7MDFmM30KKworL1x4ezAxZjJ9Ky9pLHV0ZgorICAgIFx4ezAxZjF9XHh7MDFmMn1ceHswMWYzfQorCisvXHh7MDFmM30rL2ksdXRmCisgICAgXHh7MDFmMX1ceHswMWYyfVx4ezAxZjN9CisKKworL1x4ezAzNDV9Ky9pLHV0ZgorICAgIFx4ezAzNDV9XHh7MDM5OX1ceHswM2I5fVx4ezFmYmV9CisKKy9ceHswMzk5fSsvaSx1dGYKKyAgICBceHswMzQ1fVx4ezAzOTl9XHh7MDNiOX1ceHsxZmJlfQorCisvXHh7MDNiOX0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKworL1x4ezFmYmV9Ky9pLHV0ZgorICAgIFx4ezAzNDV9XHh7MDM5OX1ceHswM2I5fVx4ezFmYmV9CisKKworL1x4ezAzOTJ9Ky9pLHV0ZgorICAgIFx4ezAzOTJ9XHh7MDNiMn1ceHswM2QwfQorCisvXHh7MDNiMn0rL2ksdXRmCisgICAgXHh7MDM5Mn1ceHswM2IyfVx4ezAzZDB9CisKKy9ceHswM2QwfSsvaSx1dGYKKyAgICBceHswMzkyfVx4ezAzYjJ9XHh7MDNkMH0KKyAgICAKKworL1x4ezAzOTV9Ky9pLHV0ZgorICAgIFx4ezAzOTV9XHh7MDNiNX1ceHswM2Y1fQorCisvXHh7MDNiNX0rL2ksdXRmCisgICAgXHh7MDM5NX1ceHswM2I1fVx4ezAzZjV9CisKKy9ceHswM2Y1fSsvaSx1dGYKKyAgICBceHswMzk1fVx4ezAzYjV9XHh7MDNmNX0KKworCisvXHh7MDM5OH0rL2ksdXRmCisgICAgXHh7MDM5OH1ceHswM2I4fVx4ezAzZDF9XHh7MDNmNH0KKworL1x4ezAzYjh9Ky9pLHV0ZgorICAgIFx4ezAzOTh9XHh7MDNiOH1ceHswM2QxfVx4ezAzZjR9CisKKy9ceHswM2QxfSsvaSx1dGYKKyAgICBceHswMzk4fVx4ezAzYjh9XHh7MDNkMX1ceHswM2Y0fQorCisvXHh7MDNmNH0rL2ksdXRmCisgICAgXHh7MDM5OH1ceHswM2I4fVx4ezAzZDF9XHh7MDNmNH0KKyAgICAKKworL1x4ezAzOWF9Ky9pLHV0ZgorICAgIFx4ezAzOWF9XHh7MDNiYX1ceHswM2YwfQorCisvXHh7MDNiYX0rL2ksdXRmCisgICAgXHh7MDM5YX1ceHswM2JhfVx4ezAzZjB9CisKKy9ceHswM2YwfSsvaSx1dGYKKyAgICBceHswMzlhfVx4ezAzYmF9XHh7MDNmMH0KKyAgICAKKworL1x4ezAzYTB9Ky9pLHV0ZgorICAgIFx4ezAzYTB9XHh7MDNjMH1ceHswM2Q2fSAKKworL1x4ezAzYzB9Ky9pLHV0ZgorICAgIFx4ezAzYTB9XHh7MDNjMH1ceHswM2Q2fSAKKworL1x4ezAzZDZ9Ky9pLHV0ZgorICAgIFx4ezAzYTB9XHh7MDNjMH1ceHswM2Q2fSAKKworCisvXHh7MDNhMX0rL2ksdXRmCisgICAgXHh7MDNhMX1ceHswM2MxfVx4ezAzZjF9CisKKy9ceHswM2MxfSsvaSx1dGYKKyAgICBceHswM2ExfVx4ezAzYzF9XHh7MDNmMX0KKworL1x4ezAzZjF9Ky9pLHV0ZgorICAgIFx4ezAzYTF9XHh7MDNjMX1ceHswM2YxfQorCisKKy9ceHswM2EzfSsvaSx1dGYKKyAgICBceHswM0EzfVx4ezAzQzJ9XHh7MDNDM30KKworL1x4ezAzYzJ9Ky9pLHV0ZgorICAgIFx4ezAzQTN9XHh7MDNDMn1ceHswM0MzfQorCisvXHh7MDNjM30rL2ksdXRmCisgICAgXHh7MDNBM31ceHswM0MyfVx4ezAzQzN9CisgICAgCisKKy9ceHswM2E2fSsvaSx1dGYKKyAgICBceHswM2E2fVx4ezAzYzZ9XHh7MDNkNX0gCisKKy9ceHswM2M2fSsvaSx1dGYKKyAgICBceHswM2E2fVx4ezAzYzZ9XHh7MDNkNX0gCisKKy9ceHswM2Q1fSsvaSx1dGYKKyAgICBceHswM2E2fVx4ezAzYzZ9XHh7MDNkNX0gCisKKworL1x4ezAzYzl9Ky9pLHV0ZgorICAgIFx4ezAzYzl9XHh7MDNhOX1ceHsyMTI2fQorCisvXHh7MDNhOX0rL2ksdXRmCisgICAgXHh7MDNjOX1ceHswM2E5fVx4ezIxMjZ9CisKKy9ceHsyMTI2fSsvaSx1dGYKKyAgICBceHswM2M5fVx4ezAzYTl9XHh7MjEyNn0KKyAgICAKKworL1x4ezFlNjB9Ky9pLHV0ZgorICAgIFx4ezFlNjB9XHh7MWU2MX1ceHsxZTlifQorCisvXHh7MWU2MX0rL2ksdXRmCisgICAgXHh7MWU2MH1ceHsxZTYxfVx4ezFlOWJ9CisKKy9ceHsxZTlifSsvaSx1dGYKKyAgICBceHsxZTYwfVx4ezFlNjF9XHh7MWU5Yn0KKyAgICAKKworL1x4ezFlOWV9Ky9pLHV0ZgorICAgIFx4ezFlOWV9XHh7MDBkZn0KKworL1x4ezAwZGZ9Ky9pLHV0ZgorICAgIFx4ezFlOWV9XHh7MDBkZn0KKyAgICAKKworL1x4ezFmODh9Ky9pLHV0ZgorICAgIFx4ezFmODh9XHh7MWY4MH0gCisKKy9ceHsxZjgwfSsvaSx1dGYKKyAgICBceHsxZjg4fVx4ezFmODB9IAorCisjIFBlcmwgNS4xMi40IGdldHMgdGhlc2Ugd3JvbmcsIGJ1dCA1LjE1LjMgaXMgT0sgCisKKy9ceHswMDRifSsvaSx1dGYKKyAgICBceHswMDRifVx4ezAwNmJ9XHh7MjEyYX0KKworL1x4ezAwNmJ9Ky9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorCisvXHh7MjEyYX0rL2ksdXRmCisgICAgXHh7MDA0Yn1ceHswMDZifVx4ezIxMmF9CisKKworL1x4ezAwNTN9Ky9pLHV0ZgorICAgIFx4ezAwNTN9XHh7MDA3M31ceHswMTdmfQorCisvXHh7MDA3M30rL2ksdXRmCisgICAgXHh7MDA1M31ceHswMDczfVx4ezAxN2Z9CisKKy9ceHswMTdmfSsvaSx1dGYKKyAgICBceHswMDUzfVx4ezAwNzN9XHh7MDE3Zn0KKworL15ccHtBbnl9KlxkezR9L3V0ZgorICAgIDEyMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMyAKKworL15cWCpcd3s0fS91dGYKKyAgICAxMjM0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjMgIAorCisvXkFccytaL3V0Zix1Y3AKKyAgICBBXHh7MjAwNX1aCisgICAgQVx4ezg1fVx4ezIwMDV9WgorCisvXkFbXHNdK1ovdXRmLHVjcAorICAgIEFceHsyMDA1fVoKKyAgICBBXHh7ODV9XHh7MjAwNX1aCisKKy9eW1s6Z3JhcGg6XV0rJC91dGYsdWNwCisgICAgTGV0dGVyOkFCQworICAgIE1hcms6XHh7MzAwfVx4ezFkMTcyfVx4ezFkMTdifQorICAgIE51bWJlcjo5XHh7NjYwfQorICAgIFB1bmN0dWF0aW9uOlx4ezY2YX0sOworICAgIFN5bWJvbDpceHs2ZGV9PD5ceHtmZmZjfQorICAgIENmLXByb3BlcnR5Olx4e2FkfVx4ezYwMH1ceHs2MDF9XHh7NjAyfVx4ezYwM31ceHs2MDR9XHh7NmRkfVx4ezcwZn0KKyAgICBceHsyMDBifVx4ezIwMGN9XHh7MjAwZH1ceHsyMDBlfVx4ezIwMGZ9CisgICAgXHh7MjAyYX1ceHsyMDJifVx4ezIwMmN9XHh7MjAyZH1ceHsyMDJlfQorICAgIFx4ezIwNjB9XHh7MjA2MX1ceHsyMDYyfVx4ezIwNjN9XHh7MjA2NH0KKyAgICBceHsyMDZhfVx4ezIwNmJ9XHh7MjA2Y31ceHsyMDZkfVx4ezIwNmV9XHh7MjA2Zn0KKyAgICBceHtmZWZmfQorICAgIFx4e2ZmZjl9XHh7ZmZmYX1ceHtmZmZifQorICAgIFx4ezExMGJkfQorICAgIFx4ezFkMTczfVx4ezFkMTc0fVx4ezFkMTc1fVx4ezFkMTc2fVx4ezFkMTc3fVx4ezFkMTc4fVx4ezFkMTc5fVx4ezFkMTdhfQorICAgIFx4e2UwMDAxfQorICAgIFx4e2UwMDIwfVx4e2UwMDMwfVx4e2UwMDQwfVx4e2UwMDUwfVx4e2UwMDYwfVx4e2UwMDcwfVx4e2UwMDdmfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MDl9CisgICAgXHh7MGF9CisgICAgXHh7MUR9CisgICAgXHh7MjB9CisgICAgXHh7ODV9CisgICAgXHh7YTB9CisgICAgXHh7MTY4MH0KKyAgICBceHsyMDI4fQorICAgIFx4ezIwMjl9CisgICAgXHh7MjAyZn0KKyAgICBceHsyMDY1fQorICAgIFx4ezMwMDB9CisgICAgXHh7ZTAwMDJ9CisgICAgXHh7ZTAwMWZ9CisgICAgXHh7ZTAwODB9IAorCisvXltbOnByaW50Ol1dKyQvdXRmLHVjcAorICAgIFNwYWNlOiBceHthMH0KKyAgICBceHsxNjgwfVx4ezIwMDB9XHh7MjAwMX1ceHsyMDAyfVx4ezIwMDN9XHh7MjAwNH1ceHsyMDA1fQorICAgIFx4ezIwMDZ9XHh7MjAwN31ceHsyMDA4fVx4ezIwMDl9XHh7MjAwYX0gCisgICAgXHh7MjAyZn1ceHsyMDVmfSAKKyAgICBceHszMDAwfQorICAgIExldHRlcjpBQkMKKyAgICBNYXJrOlx4ezMwMH1ceHsxZDE3Mn1ceHsxZDE3Yn0KKyAgICBOdW1iZXI6OVx4ezY2MH0KKyAgICBQdW5jdHVhdGlvbjpceHs2NmF9LDsKKyAgICBTeW1ib2w6XHh7NmRlfTw+XHh7ZmZmY30KKyAgICBDZi1wcm9wZXJ0eTpceHthZH1ceHs2MDB9XHh7NjAxfVx4ezYwMn1ceHs2MDN9XHh7NjA0fVx4ezZkZH1ceHs3MGZ9CisgICAgXHh7MjAwYn1ceHsyMDBjfVx4ezIwMGR9XHh7MjAwZX1ceHsyMDBmfQorICAgIFx4ezIwMmF9XHh7MjAyYn1ceHsyMDJjfVx4ezIwMmR9XHh7MjAyZX0KKyAgICBceHsyMDJmfQorICAgIFx4ezIwNjB9XHh7MjA2MX1ceHsyMDYyfVx4ezIwNjN9XHh7MjA2NH0KKyAgICBceHsyMDZhfVx4ezIwNmJ9XHh7MjA2Y31ceHsyMDZkfVx4ezIwNmV9XHh7MjA2Zn0KKyAgICBceHtmZWZmfQorICAgIFx4e2ZmZjl9XHh7ZmZmYX1ceHtmZmZifQorICAgIFx4ezExMGJkfQorICAgIFx4ezFkMTczfVx4ezFkMTc0fVx4ezFkMTc1fVx4ezFkMTc2fVx4ezFkMTc3fVx4ezFkMTc4fVx4ezFkMTc5fVx4ezFkMTdhfQorICAgIFx4e2UwMDAxfQorICAgIFx4e2UwMDIwfVx4e2UwMDMwfVx4e2UwMDQwfVx4e2UwMDUwfVx4e2UwMDYwfVx4e2UwMDcwfVx4e2UwMDdmfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MDl9CisgICAgXHh7MUR9CisgICAgXHh7ODV9CisgICAgXHh7MjAyOH0KKyAgICBceHsyMDI5fQorICAgIFx4ezIwNjV9CisgICAgXHh7ZTAwMDJ9CisgICAgXHh7ZTAwMWZ9CisgICAgXHh7ZTAwODB9IAorCisvXltbOnB1bmN0Ol1dKyQvdXRmLHVjcAorICAgIFwkKzw9Pl5gfH4KKyAgICAhXCIjJSYnKCkqLC0uLzo7P0BbXFxdX3t9CisgICAgXHh7YTF9XHh7YTd9ICAKKyAgICBceHszN2V9IAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGUgIAorCisvXltbOl5ncmFwaDpdXSskL3V0Zix1Y3AKKyAgICBceHswOX1ceHswYX1ceHsxRH1ceHsyMH1ceHs4NX1ceHthMH1ceHsxNjgwfQorICAgIFx4ezIwMjh9XHh7MjAyOX1ceHsyMDJmfVx4ezIwNjV9CisgICAgXHh7MzAwMH1ceHtlMDAwMn1ceHtlMDAxZn1ceHtlMDA4MH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIExldHRlcjpBQkMKKyAgICBNYXJrOlx4ezMwMH1ceHsxZDE3Mn1ceHsxZDE3Yn0KKyAgICBOdW1iZXI6OVx4ezY2MH0KKyAgICBQdW5jdHVhdGlvbjpceHs2NmF9LDsKKyAgICBTeW1ib2w6XHh7NmRlfTw+XHh7ZmZmY30KKyAgICBDZi1wcm9wZXJ0eTpceHthZH1ceHs2MDB9XHh7NjAxfVx4ezYwMn1ceHs2MDN9XHh7NjA0fVx4ezZkZH1ceHs3MGZ9CisgICAgXHh7MjAwYn1ceHsyMDBjfVx4ezIwMGR9XHh7MjAwZX1ceHsyMDBmfQorICAgIFx4ezIwMmF9XHh7MjAyYn1ceHsyMDJjfVx4ezIwMmR9XHh7MjAyZX0KKyAgICBceHsyMDYwfVx4ezIwNjF9XHh7MjA2Mn1ceHsyMDYzfVx4ezIwNjR9CisgICAgXHh7MjA2YX1ceHsyMDZifVx4ezIwNmN9XHh7MjA2ZH1ceHsyMDZlfVx4ezIwNmZ9CisgICAgXHh7ZmVmZn0KKyAgICBceHtmZmY5fVx4e2ZmZmF9XHh7ZmZmYn0KKyAgICBceHsxMTBiZH0KKyAgICBceHsxZDE3M31ceHsxZDE3NH1ceHsxZDE3NX1ceHsxZDE3Nn1ceHsxZDE3N31ceHsxZDE3OH1ceHsxZDE3OX1ceHsxZDE3YX0KKyAgICBceHtlMDAwMX0KKyAgICBceHtlMDAyMH1ceHtlMDAzMH1ceHtlMDA0MH1ceHtlMDA1MH1ceHtlMDA2MH1ceHtlMDA3MH1ceHtlMDA3Zn0KKworL15bWzpecHJpbnQ6XV0rJC91dGYsdWNwCisgICAgXHh7MDl9XHh7MUR9XHh7ODV9XHh7MjAyOH1ceHsyMDI5fVx4ezIwNjV9CisgICAgXHh7ZTAwMDJ9XHh7ZTAwMWZ9XHh7ZTAwODB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBTcGFjZTogXHh7YTB9CisgICAgXHh7MTY4MH1ceHsyMDAwfVx4ezIwMDF9XHh7MjAwMn1ceHsyMDAzfVx4ezIwMDR9XHh7MjAwNX0KKyAgICBceHsyMDA2fVx4ezIwMDd9XHh7MjAwOH1ceHsyMDA5fVx4ezIwMGF9IAorICAgIFx4ezIwMmZ9XHh7MjA1Zn0gCisgICAgXHh7MzAwMH0KKyAgICBMZXR0ZXI6QUJDCisgICAgTWFyazpceHszMDB9XHh7MWQxNzJ9XHh7MWQxN2J9CisgICAgTnVtYmVyOjlceHs2NjB9CisgICAgUHVuY3R1YXRpb246XHh7NjZhfSw7CisgICAgU3ltYm9sOlx4ezZkZX08Plx4e2ZmZmN9CisgICAgQ2YtcHJvcGVydHk6XHh7YWR9XHh7NjAwfVx4ezYwMX1ceHs2MDJ9XHh7NjAzfVx4ezYwNH1ceHs2ZGR9XHh7NzBmfQorICAgIFx4ezIwMGJ9XHh7MjAwY31ceHsyMDBkfVx4ezIwMGV9XHh7MjAwZn0KKyAgICBceHsyMDJhfVx4ezIwMmJ9XHh7MjAyY31ceHsyMDJkfVx4ezIwMmV9CisgICAgXHh7MjAyZn0KKyAgICBceHsyMDYwfVx4ezIwNjF9XHh7MjA2Mn1ceHsyMDYzfVx4ezIwNjR9CisgICAgXHh7MjA2YX1ceHsyMDZifVx4ezIwNmN9XHh7MjA2ZH1ceHsyMDZlfVx4ezIwNmZ9CisgICAgXHh7ZmVmZn0KKyAgICBceHtmZmY5fVx4e2ZmZmF9XHh7ZmZmYn0KKyAgICBceHsxMTBiZH0KKyAgICBceHsxZDE3M31ceHsxZDE3NH1ceHsxZDE3NX1ceHsxZDE3Nn1ceHsxZDE3N31ceHsxZDE3OH1ceHsxZDE3OX1ceHsxZDE3YX0KKyAgICBceHtlMDAwMX0KKyAgICBceHtlMDAyMH1ceHtlMDAzMH1ceHtlMDA0MH1ceHtlMDA1MH1ceHtlMDA2MH1ceHtlMDA3MH1ceHtlMDA3Zn0KKworL15bWzpecHVuY3Q6XV0rJC91dGYsdWNwCisgICAgYWJjZGUgIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXCQrPD0+XmB8fgorICAgICFcIiMlJicoKSosLS4vOjs/QFtcXF1fe30KKyAgICBceHthMX1ceHthN30gIAorICAgIFx4ezM3ZX0gCisKKy9bUlNUXSsvaSx1dGYsdWNwCisgICAgU3NceHsxN2Z9CisgICAgCisvW1ItVF0rL2ksdXRmLHVjcAorICAgIFNzXHh7MTdmfQorCisvW3EtdV0rL2ksdXRmLHVjcAorICAgIFNzXHh7MTdmfQorCisvXnM/Yy9pbSx1dGYKKyAgICBzY2F0CisgICAgCisjIFRoZSBuZXh0IGZvdXIgdGVzdHMgYXJlIGZvciByZXBlYXRlZCBjYXNlbGVzcyBiYWNrIHJlZmVyZW5jZXMgd2hlbiB0aGUgCisjIGNvZGUgdW5pdCBsZW5ndGggb2YgdGhlIG1hdGNoZWQgdGV4dCBpcyBkaWZmZXJlbnQgdG8gdGhhdCBvZiB0aGUgb3JpZ2luYWwKKyMgZ3JvdXAgaW4gdGhlIFVURi04IGNhc2UuCisKKy9eKFx4ezIzYX0pXDEqKC4pL2ksdXRmCisgICAgXHh7MjNhfVx4ezIzYX1ceHsyM2F9XHh7MjNhfQorICAgIFx4ezIzYX1ceHsyYzY1fVx4ezJjNjV9XHh7MmM2NX0KKyAgICBceHsyM2F9XHh7MjNhfVx4ezJjNjV9XHh7MjNhfQorCisvXihceHsyM2F9KVwxKiguLikvaSx1dGYKKyAgICBceHsyM2F9XHh7MmM2NX1ceHsyYzY1fVx4ezJjNjV9CisgICAgXHh7MjNhfVx4ezIzYX1ceHsyYzY1fVx4ezIzYX0KKworL14oXHh7MjNhfSlcMSooLi4uKS9pLHV0ZgorICAgIFx4ezIzYX1ceHsyYzY1fVx4ezJjNjV9XHh7MmM2NX0KKyAgICBceHsyM2F9XHh7MjNhfVx4ezJjNjV9XHh7MjNhfQorCisvXihceHsyM2F9KVwxKiguLi4uKS9pLHV0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MjNhfVx4ezJjNjV9XHh7MmM2NX1ceHsyYzY1fQorICAgIFx4ezIzYX1ceHsyM2F9XHh7MmM2NX1ceHsyM2F9CisKKy9bQS1gXS9pLHV0ZgorICAgIGFiY2RlZmdoaWprbG1ubworCisiW1xTXFZcSF0idXRmCisKKy9bXlxwe0FueX1dKit4L3V0ZgorICAgIHgKKworL1tbOnB1bmN0Ol1dL3V0Zix1Y3AKKyAgICBceHtiNH0gCisKKy9bWzpeYXNjaWk6XV0vdXRmLHVjcAorICAgIFx4ezEwMH0KKyAgICBceHsyMDB9CisgICAgXHh7MzAwfQorICAgIFx4ezM3ZX0KK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgYWEKKyAgICA5OQorICAgIAorL1tbOl5hc2NpaTpdXHddL3V0Zix1Y3AKKyAgICBhYQorICAgIDk5CisgICAgZ2cKKyAgICBceHsxMDB9CisgICAgXHh7MjAwfQorICAgIFx4ezMwMH0KKyAgICBceHszN2V9CisKKy9bXHdbOl5hc2NpaTpdXS91dGYsdWNwCisgICAgYWEKKyAgICA5OQorICAgIGdnCisgICAgXHh7MTAwfQorICAgIFx4ezIwMH0KKyAgICBceHszMDB9CisgICAgXHh7MzdlfQorCisvW15bOmFzY2lpOl1cV10vdXRmLHVjcAorICAgIFx4ezEwMH0KKyAgICBceHsyMDB9CitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIGFhCisgICAgOTkKKyAgICBnZworICAgIFx4ezM3ZX0KKworL1teWzpeYXNjaWk6XVxkXS91dGYsdWNwCisgICAgYQorICAgIH4KKyAgICBcYQorICAgIFx4ezdmfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMAorICAgIFx4ezM4OX0KKyAgICBceHsyMGFjfQorCisjIEVuZCBvZiB0ZXN0aW5wdXQ0CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQ1IGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0NQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTEzYTdjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0NQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQ2IGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0NgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjRiNDBmCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0NgpAQCAtMCwwICsxLDQ4ODIgQEAKKyMgVGhpcyBzZXQgb2YgdGVzdHMgY2hlY2sgdGhlIERGQSBtYXRjaGluZyBmdW5jdGlvbmFsaXR5IG9mIHBjcmUyX2RmYV9tYXRjaCgpLAorIyBleGNsdWRpbmcgVVRGIGFuZCBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQuIEFsbCBtYXRjaGVzIGFyZSBkb25lIHVzaW5nIERGQSwKKyMgZm9yY2VkIGJ5IHNldHRpbmcgYSBkZWZhdWx0IHN1YmplY3QgbW9kaWZpZXIgYXQgdGhlIHN0YXJ0LgorICAgIAorI2ZvcmJpZF91dGYKKyNzdWJqZWN0IGRmYQorI25ld2xpbmVfZGVmYXVsdCBsZiBhbnljcmxmIGFueQorICAgICAKKy9hYmMvCisgICAgYWJjCisgICAgCisvYWIqYy8KKyAgICBhYmMKKyAgICBhYmJiYmMKKyAgICBhYworICAgIAorL2FiK2MvCisgICAgYWJjCisgICAgYWJiYmJiYmMKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYworICAgIGFiCisgICAgCisvYSovbm9fYXV0b19wb3NzZXNzCisgICAgYQorICAgIGFhYWFhYWFhYWFhYWFhYWFhCisgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhXD1vdmVjdG9yPTEwIAorICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYVw9ZGZhX3Nob3J0ZXN0CisgICAgCisvKGF8YWJjZHxhZnJpY2FuKS8KKyAgICBhCisgICAgYWJjZAorICAgIGFmcmljYW4KKyAgICAKKy9eYWJjLworICAgIGFiY2RlZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6YWJjCisgICAgeHl6XG5hYmMgICAgCisgICAgCisvXmFiYy9tCisgICAgYWJjZGVmCisgICAgeHl6XG5hYmMgICAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXphYmMKKyAgICAKKy9cQWFiYy8KKyAgICBhYmNkZWYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5emFiYworICAgIHh5elxuYWJjICAgIAorICAgIAorL1xBYWJjL20KKyAgICBhYmNkZWYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5emFiYworICAgIHh5elxuYWJjICAgIAorICAgIAorL1xHYWJjLworICAgIGFiY2RlZgorICAgIHh5emFiY1w9b2Zmc2V0PTMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5emFiYyAgICAKKyAgICB4eXphYmNcPW9mZnNldD0yCisgICAgCisveFxkeVxEei8KKyAgICB4OXl6egorICAgIHgweSt6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXoKKyAgICB4eHkweiAgICAgCisgICAgCisveFxzeVxTei8KKyAgICB4IHl6egorICAgIHggeSt6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXoKKyAgICB4eHl5egorICAgIAorL3hcd3lcV3ovCisgICAgeHh5K3oKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh4eTB6CisgICAgeCt5K3ogICAgICAgICAKKyAgICAKKy94LnkvCisgICAgeCt5CisgICAgeC15CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4XG55CisgICAgCisveC55L3MKKyAgICB4K3kKKyAgICB4LXkKKyAgICB4XG55CisKKy8oYS5iKD9zKWMuZHx4LnkpcC5xLworICAgIGErYmMrZHArcQorICAgIGErYmNcbmRwK3EKKyAgICB4XG55cCtxIAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFcbmJjXG5kcCtxCisgICAgYStiY1xuZHBcbnEKKyAgICB4XG55cFxucSAKKworL2FcZFx6LworICAgIGJhMAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmEwXG4KKyAgICBiYTBcbmNkICAgCisKKy9hXGRcei9tCisgICAgYmEwCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYTBcbgorICAgIGJhMFxuY2QgICAKKworL2FcZFxaLworICAgIGJhMAorICAgIGJhMFxuCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYTBcbmNkICAgCisKKy9hXGRcWi9tCisgICAgYmEwCisgICAgYmEwXG4KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhMFxuY2QgICAKKworL2FcZCQvCisgICAgYmEwCisgICAgYmEwXG4KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhMFxuY2QgICAKKworL2FcZCQvbQorICAgIGJhMAorICAgIGJhMFxuCisgICAgYmEwXG5jZCAgIAorCisvYWJjL2kKKyAgICBhYmMKKyAgICBhQmMKKyAgICBBQkMKKyAgICAKKy9bXmFdLworICAgIGFiY2QKKyAgICAKKy9hYj9cdy8KKyAgICBhYnoKKyAgICBhYmJ6CisgICAgYXp6ICAKKworL3h7MCwzfXl6LworICAgIGF5enEKKyAgICBheHl6cQorICAgIGF4eHl6CisgICAgYXh4eHl6cQorICAgIGF4eHh4eXpxCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBheAorICAgIGF4eCAgICAgCisgICAgICAKKy94ezN9eXovCisgICAgYXh4eHl6cQorICAgIGF4eHh4eXpxCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBheAorICAgIGF4eCAgICAgCisgICAgYXl6cQorICAgIGF4eXpxCisgICAgYXh4eXoKKyAgICAgIAorL3h7MiwzfXl6LworICAgIGF4eHl6CisgICAgYXh4eHl6cQorICAgIGF4eHh4eXpxCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBheAorICAgIGF4eCAgICAgCisgICAgYXl6cQorICAgIGF4eXpxCisgICAgICAKKy9bXmFdKy9ub19hdXRvX3Bvc3Nlc3MKKyAgICBiYWMKKyAgICBiY2RlZmF4CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhYSAgIAorCisvW15hXSovbm9fYXV0b19wb3NzZXNzCisgICAgYmFjCisgICAgYmNkZWZheAorICAgIGFhYWFhICAgCisgICAgCisvW15hXXszLDV9L25vX2F1dG9fcG9zc2VzcworICAgIHh5egorICAgIGF3eHl6YQorICAgIGFiY2RlZmEKKyAgICBhYmNkZWZnaGlqaworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYXh5YQorICAgIGF4YQorICAgIGFhYWFhICAgICAgICAgCisKKy9cZCovCisgICAgMTIzNGI1NjcKKyAgICB4eXoKKyAgICAKKy9cRCovCisgICAgYTEyMzRiNTY3CisgICAgeHl6CisgICAgIAorL1xkKy8KKyAgICBhYjEyMzRjNTYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorICAgIAorL1xEKy8KKyAgICBhYjEyM2M1NgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgNzg5CisgICAgCisvXGQ/QS8KKyAgICAwNDVBQkMKKyAgICBBQkMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhZWgorICAgIAorL1xEP0EvCisgICAgQUJDCisgICAgQkFDCisgICAgOUFCQyAgICAgICAgICAgICAKKworL2ErLworICAgIGFhYWEKKworL14uKnh5ei8KKyAgICB4eXoKKyAgICBnZ2dnZ2dnZ3h5egorICAgIAorL14uK3h5ei8KKyAgICBhYmNkeHl6CisgICAgYXh5egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6CisgICAgCisvXi4/eHl6LworICAgIHh5egorICAgIGN4eXogICAgICAgCisKKy9eXGR7MiwzfVgvCisgICAgMTJYCisgICAgMTIzWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIDFYCisgICAgMTIzNFggICAgIAorCisvXlthYmNkXVxkLworICAgIGE0NQorICAgIGI5MworICAgIGM5OXoKKyAgICBkMDQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGU0NQorICAgIGFiY2QgICAgICAKKyAgICBhYmNkMTIzNAorICAgIDEyMzQgIAorCisvXlthYmNkXSpcZC8KKyAgICBhNDUKKyAgICBiOTMKKyAgICBjOTl6CisgICAgZDA0CisgICAgYWJjZDEyMzQKKyAgICAxMjM0ICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGU0NQorICAgIGFiY2QgICAgICAKKworL15bYWJjZF0rXGQvCisgICAgYTQ1CisgICAgYjkzCisgICAgYzk5egorICAgIGQwNAorICAgIGFiY2QxMjM0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0ICAKKyAgICBlNDUKKyAgICBhYmNkICAgICAgCisKKy9eYStYLworICAgIGFYCisgICAgYWFYIAorCisvXlthYmNkXT9cZC8KKyAgICBhNDUKKyAgICBiOTMKKyAgICBjOTl6CisgICAgZDA0CisgICAgMTIzNCAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkMTIzNAorICAgIGU0NQorCisvXlthYmNkXXsyLDN9XGQvCisgICAgYWI0NQorICAgIGJjZDkzCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0IAorICAgIGEzNiAKKyAgICBhYmNkMTIzNAorICAgIGVlNDUKKworL14oYWJjKSpcZC8KKyAgICBhYmM0NQorICAgIGFiY2FiY2FiYzQ1CisgICAgNDJ4eXogCisKKy9eKGFiYykrXGQvCisgICAgYWJjNDUKKyAgICBhYmNhYmNhYmM0NQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgNDJ4eXogCisKKy9eKGFiYyk/XGQvCisgICAgYWJjNDUKKyAgICA0Mnh5eiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2FiY2FiYzQ1CisKKy9eKGFiYyl7MiwzfVxkLworICAgIGFiY2FiYzQ1CisgICAgYWJjYWJjYWJjNDUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2FiY2FiY2FiYzQ1CisgICAgYWJjNDUKKyAgICA0Mnh5eiAKKworLzEoYWJjfHh5eikyKD8xKTMvCisgICAgMWFiYzJhYmMzNDU2CisgICAgMWFiYzJ4eXozNDU2IAorCisvXihhKlx3fGFiKT0oYSpcd3xhYikvCisgICAgYWI9YWIKKworL14oYSpcd3xhYik9KD8xKS8KKyAgICBhYj1hYgorCisvXihbXigpXXxcKCg/MSkqXCkpKiQvCisgICAgYWJjCisgICAgYShiKWMKKyAgICBhKGIoYykpZCAgCitcPSBFeHBlY3Qgbm8gbWF0Y2gpCisgICAgYShiKGMpZCAgCisKKy9ePmFiYz4oW14oKV18XCgoPzEpKlwpKSo8eHl6PCQvCisgICAgPmFiYz4xMjM8eHl6PAorICAgID5hYmM+MSgyKTM8eHl6PAorICAgID5hYmM+KDEoMikzKTx4eXo8CisKKy9eKD8+YSopXGQvCisgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE5ODc2CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKworLzwgKD86ICg/KFIpIFxkKysgIHwgW148Pl0qKykgfCAoP1IpKSAqID4veAorICAgIDw+CisgICAgPGFiY2Q+CisgICAgPGFiYyA8MTIzPiBoaWo+CisgICAgPGFiYyA8ZGVmPiBoaWo+CisgICAgPGFiYzw+ZGVmPiAKKyAgICA8YWJjPD4gICAgICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDxhYmMKKworL14oPyg/PWFiYylcd3szfTp8XGRcZCkkLworICAgIGFiYzogICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgICAgICAgICAgICAgICAgIAorICAgIDEyMyAgICAgICAgICAgICAgICAgICAgICAgCisgICAgeHl6ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorL14oPyg/IWFiYylcZFxkfFx3ezN9OikkLworICAgIGFiYzogICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAxMiAgICAgICAgIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzCisgICAgeHl6ICAgIAorCisvXig/PWFiYylcd3s1fTokLworICAgIGFiY2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgCitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgICAgICAgICAgICAgICAgICAKKyAgICBhYmMuLiAKKyAgICAxMjMgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHZ3eHl6ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorL14oPyFhYmMpXGRcZCQvCisgICAgMTIgICAgICAgICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlOgorICAgIGFiYy4uICAKKyAgICAxMjMKKyAgICB2d3h5eiAgICAKKworLyg/PD1hYmN8eHkpMTIzLworICAgIGFiYzEyMzQ1CisgICAgd3h5MTIzegorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzYWJjCisKKy8oPzwhYWJjfHh5KTEyMy8KKyAgICAxMjNhYmMKKyAgICBtbm8xMjM0NTYgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMxMjM0NQorICAgIHd4eTEyM3oKKworL2FiYyg/QzEpeHl6LworICAgIGFiY3h5egorICAgIDEyM2FiY3h5ejk5OSAKKworLyhhYnxjZCl7Myw0fS9hdXRvX2NhbGxvdXQKKyAgYWJhYmFiCisgIGFiY2RhYmNkCisgIGFiY2RjZGNkY2RjZCAgCisKKy9eYWJjLworICAgIGFiY2RlZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGVmXD1ub3Rib2wKKworL14oYSp8eHl6KS8KKyAgICBiY2QKKyAgICBhYWFiY2QKKyAgICB4eXoKKyAgICB4eXpcPW5vdGVtcHR5CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiY2RcPW5vdGVtcHR5CisgICAgCisveHl6JC8KKyAgICB4eXoKKyAgICB4eXpcbgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6XD1ub3Rlb2wKKyAgICB4eXpcblw9bm90ZW9sCisgICAgCisveHl6JC9tCisgICAgeHl6CisgICAgeHl6XG4gCisgICAgYWJjeHl6XG5wcXIgCisgICAgYWJjeHl6XG5wcXJcPW5vdGVvbAorICAgIHh5elxuXD1ub3Rlb2wKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5elw9bm90ZW9sCisKKy9cR2FiYy8KKyAgICBhYmNkZWYKKyAgICBkZWZhYmN4eXpcPW9mZnNldD0zCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgZGVmYWJjeHl6CisKKy9eYWJjZGVmLworICAgIGFiXD1wcworICAgIGFiY2RlXD1wcworICAgIGFiY2RlZlw9cHMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFieFw9cHMKKworL15hezIsNH1cZCt6LworICAgIGFcPXBzCisgICAgYWFcPXBzCisgICAgYWEyXD1wcworICAgIGFhYVw9cHMKKyAgICBhYWEyM1w9cHMKKyAgICBhYWFhMTIzNDVcPXBzCisgICAgYWEwelw9cHMKKyAgICBhYWFhNDQ0NDQ0NDQ0NDQ0NHpcPXBzCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhelw9cHMKKyAgICBhYWFhYVw9cHMKKyAgICBhNTZcPXBzCisKKy9eYWJjZGVmLworICAgYWJjXD1wcworICAgZGVmXD1kZmFfcmVzdGFydAorICAgCisvKD88PWZvbyliYXIvCisgICBmb29iXD1wcyxvZmZzZXQ9MgorICAgZm9vYmFyLi4uXD1wcyxkZmFfcmVzdGFydCxvZmZzZXQ9NAorICAgZm9vYmFyXD1vZmZzZXQ9MgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICB4eXpmb1w9cHMKKyAgIG9iYXJcPWRmYV9yZXN0YXJ0CisKKy8oYWIqKGNkfGVmKSkrWC8KKyAgICBsa2pobGtqaGxramhsa2poYWJiYmJiYmNkYWVmYWJiYmJiYmJlZmFcPXBzLG5vdGJvbCxub3Rlb2wKKyAgICBjZGFiYmJiYmJiYlw9cHMsbm90Ym9sLGRmYV9yZXN0YXJ0LG5vdGVvbAorICAgIGVmYWJiYmJiYmJiYmJiYmJiYmJcPXBzLG5vdGJvbCxkZmFfcmVzdGFydCxub3Rlb2wKKyAgICBiYmJiYmJiYmJiYmJjZFh5YXNkZmFkZlw9cHMsbm90Ym9sLGRmYV9yZXN0YXJ0LG5vdGVvbAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWRmYWRhZGFrbGhsa2Fsa2FqaGxramFoZGZhc2RmYXNkZmxhZHNmamtqXD1wcyxub3Rlb2wKKworL3RoZSBxdWljayBicm93biBmb3gvCisgICAgdGhlIHF1aWNrIGJyb3duIGZveAorICAgIFdoYXQgZG8geW91IGtub3cgYWJvdXQgdGhlIHF1aWNrIGJyb3duIGZveD8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFRoZSBxdWljayBicm93biBGT1gKKyAgICBXaGF0IGRvIHlvdSBrbm93IGFib3V0IFRIRSBRVUlDSyBCUk9XTiBGT1g/CisKKy9UaGUgcXVpY2sgYnJvd24gZm94L2kKKyAgICB0aGUgcXVpY2sgYnJvd24gZm94CisgICAgVGhlIHF1aWNrIGJyb3duIEZPWAorICAgIFdoYXQgZG8geW91IGtub3cgYWJvdXQgdGhlIHF1aWNrIGJyb3duIGZveD8KKyAgICBXaGF0IGRvIHlvdSBrbm93IGFib3V0IFRIRSBRVUlDSyBCUk9XTiBGT1g/CisKKy9hYmNkXHRcblxyXGZcYVxlXDA3MVx4M2JcJFxcXD9jYXh5ei8KKyAgICBhYmNkXHRcblxyXGZcYVxlOTtcJFxcP2NheHl6CisKKy9hKmFiYz94eXorcHFyezN9YWJ7Mix9eHl7NCw1fXBxezAsNn1BQnswLH16ei8KKyAgICBhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWJjeHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFiY3h5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBBenoKKyAgICBhYWFiY3h5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFBenoKKyAgICBhYWFiY3h5enBxcnJyYWJieHl5eXlwcXFxcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFxcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFxcXFBenoKKyAgICBhYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYnh5enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWJ4eXp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWJ4eXp6enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWFhYnh5enp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFiY3h5enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWJjeHl6enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWFiY3h5enp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWFiY3h5enp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWFiY3h5enp6enBxcnJyYWJiYnh5eXl5cHFBenoKKyAgICBhYWFhYmN4eXp6enpwcXJycmFiYmJ4eXl5eXlwcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBBQnp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cEFCQnp6CisgICAgPj4+YWFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgID5hYWFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgID4+Pj5hYmN4eXpwcXJycmFiYnh5eXl5cHFBenoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFieHl6cHFycmFiYnh5eXl5cHFBenoKKyAgICBhYnh5enBxcnJycmFiYnh5eXl5cHFBenoKKyAgICBhYnh5enBxcnJyYWJ4eXl5eXBxQXp6CisgICAgYWFhYWJjeHl6enp6cHFycnJhYmJieHl5eXl5eXBxQXp6CisgICAgYWFhYWJjeHl6enp6cHFycnJhYmJieHl5eXBxQXp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFxcXFxcXFBenoKKworL14oYWJjKXsxLDJ9enovCisgICAgYWJjenoKKyAgICBhYmNhYmN6egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgenoKKyAgICBhYmNhYmNhYmN6egorICAgID4+YWJjenoKKworL14oYis/fGEpezEsMn0/Yy8KKyAgICBiYworICAgIGJiYworICAgIGJiYmMKKyAgICBiYWMKKyAgICBiYmFjCisgICAgYWFjCisgICAgYWJiYmJiYmJiYmJiYworICAgIGJiYmJiYmJiYmJiYWMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWMKKyAgICBhYmJiYmJiYmJiYmJhYworCisvXihiK3xhKXsxLDJ9Yy8KKyAgICBiYworICAgIGJiYworICAgIGJiYmMKKyAgICBiYWMKKyAgICBiYmFjCisgICAgYWFjCisgICAgYWJiYmJiYmJiYmJiYworICAgIGJiYmJiYmJiYmJiYWMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWMKKyAgICBhYmJiYmJiYmJiYmJhYworCisvXihiK3xhKXsxLDJ9P2JjLworICAgIGJiYworCisvXihiKnxiYSl7MSwyfT9iYy8KKyAgICBiYWJjCisgICAgYmJhYmMKKyAgICBiYWJhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhYmFiYmMKKyAgICBiYWJhYmFiYworCisvXihiYXxiKil7MSwyfT9iYy8KKyAgICBiYWJjCisgICAgYmJhYmMKKyAgICBiYWJhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhYmFiYmMKKyAgICBiYWJhYmFiYworCisvXlxjYVxjQVxjW1xje1xjOi8KKyAgICBceDAxXHgwMVxlO3oKKworL15bYWJcXWNkZV0vCisgICAgYXRoaW5nCisgICAgYnRoaW5nCisgICAgXXRoaW5nCisgICAgY3RoaW5nCisgICAgZHRoaW5nCisgICAgZXRoaW5nCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBmdGhpbmcKKyAgICBbdGhpbmcKKyAgICBcXHRoaW5nCisKKy9eW11jZGVdLworICAgIF10aGluZworICAgIGN0aGluZworICAgIGR0aGluZworICAgIGV0aGluZworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYXRoaW5nCisgICAgZnRoaW5nCisKKy9eW15hYlxdY2RlXS8KKyAgICBmdGhpbmcKKyAgICBbdGhpbmcKKyAgICBcXHRoaW5nCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhdGhpbmcKKyAgICBidGhpbmcKKyAgICBddGhpbmcKKyAgICBjdGhpbmcKKyAgICBkdGhpbmcKKyAgICBldGhpbmcKKworL15bXl1jZGVdLworICAgIGF0aGluZworICAgIGZ0aGluZworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXXRoaW5nCisgICAgY3RoaW5nCisgICAgZHRoaW5nCisgICAgZXRoaW5nCisKKy9eXIEvCisgICAggQorCisvXv8vCisgICAg/worCisvXlswLTldKyQvCisgICAgMAorICAgIDEKKyAgICAyCisgICAgMworICAgIDQKKyAgICA1CisgICAgNgorICAgIDcKKyAgICA4CisgICAgOQorICAgIDEwCisgICAgMTAwCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKKworL14uKm50ZXIvCisgICAgZW50ZXIKKyAgICBpbnRlcgorICAgIHVwb250ZXIKKworL154eHhbMC05XSskLworICAgIHh4eDAKKyAgICB4eHgxMjM0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eHgKKworL14uK1swLTldWzAtOV1bMC05XSQvCisgICAgeDEyMworICAgIHh4MTIzCisgICAgMTIzNDU2CisgICAgeDEyMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMworCisvXi4rP1swLTldWzAtOV1bMC05XSQvCisgICAgeDEyMworICAgIHh4MTIzCisgICAgMTIzNDU2CisgICAgeDEyMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMworCisvXihbXiFdKykhKC4rKT1hcHF1eHpcLml4clwuenp6XC5hY1wudWskLworICAgIGFiYyFwcXI9YXBxdXh6Lml4ci56enouYWMudWsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICFwcXI9YXBxdXh6Lml4ci56enouYWMudWsKKyAgICBhYmMhPWFwcXV4ei5peHIuenp6LmFjLnVrCisgICAgYWJjIXBxcj1hcHF1eHo6aXhyLnp6ei5hYy51aworICAgIGFiYyFwcXI9YXBxdXh6Lml4ci56enouYWMudWtrCisKKy86LworICAgIFdlbGwsIHdlIG5lZWQgYSBjb2xvbjogc29tZXdoZXJlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBObyBtYXRjaCB3aXRob3V0IGEgY29sb24KKworLyhbXGRhLWY6XSspJC9pCisgICAgMGFiYworICAgIGFiYworICAgIGZlZAorICAgIEUKKyAgICA6OgorICAgIDVmMDM6MTJDMDo6OTMyZQorICAgIGZlZCBkZWYKKyAgICBBbnkgb2xkIHN0dWZmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAwenp6CisgICAgZ3p6egorICAgIGZlZFx4MjAKKyAgICBBbnkgb2xkIHJ1YmJpc2gKKworL14uKlwuKFxkezEsM30pXC4oXGR7MSwzfSlcLihcZHsxLDN9KSQvCisgICAgLjEuMi4zCisgICAgQS4xMi4xMjMuMAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgLjEuMi4zMzMzCisgICAgMS4yLjMKKyAgICAxMjM0LjIuMworCisvXihcZCspXHMrSU5ccytTT0FccysoXFMrKVxzKyhcUyspXHMqXChccyokLworICAgIDEgSU4gU09BIG5vbi1zcDEgbm9uLXNwMigKKyAgICAxICAgIElOICAgIFNPQSAgICBub24tc3AxICAgIG5vbi1zcDIgICAoCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxSU4gU09BIG5vbi1zcDEgbm9uLXNwMigKKworL15bYS16QS1aXGRdW2EtekEtWlxkXC1dKihcLlthLXpBLVpcZF1bYS16QS16XGRcLV0qKSpcLiQvCisgICAgYS4KKyAgICBaLgorICAgIDIuCisgICAgYWItYy5wcS1yLgorICAgIHN4ay56enouYWMudWsuCisgICAgeC0ueS0uCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAtYWJjLnBlcS4KKworL15cKlwuW2Etel0oW2EtelwtXGRdKlthLXpcZF0rKT8oXC5bYS16XShbYS16XC1cZF0qW2EtelxkXSspPykqJC8KKyAgICAqLmEKKyAgICAqLmIwLWEKKyAgICAqLmMzLWIuYworICAgICouYy1hLmItYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgKi4wCisgICAgKi5hLQorICAgICouYS1iLmMtCisgICAgKi5jLWEuMC1jCisKKy9eKD89YWIoZGUpKShhYmQpKGUpLworICAgIGFiZGUKKworL14oPyEoYWIpZGV8eCkoYWJkKShmKS8KKyAgICBhYmRmCisKKy9eKD89KGFiKGNkKSkpKGFiKS8KKyAgICBhYmNkCisKKy9eW1xkYS1mXShcLltcZGEtZl0pKiQvaQorICAgIGEuYi5jLmQKKyAgICBBLkIuQy5ECisgICAgYS5iLmMuMS4yLjMuQworCisvXlwiLipcIlxzKig7LiopPyQvCisgICAgXCIxMjM0XCIKKyAgICBcImFiY2RcIiA7CisgICAgXCJcIiA7IHJodWJhcmIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFwiMTIzNFwiIDogdGhpbmdzCisKKy9eJC8KKyAgICBcCisKKy8gICBeICAgIGEgICAoPyMgYmVnaW5zIHdpdGggYSkgIGJcc2MgKD8jIHRoZW4gYiBjKSAkICg/IyB0aGVuIGVuZCkveAorICAgIGFiIGMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworICAgIGFiIGNkZQorCisvKD94KSAgIF4gICAgYSAgICg/IyBiZWdpbnMgd2l0aCBhKSAgYlxzYyAoPyMgdGhlbiBiIGMpICQgKD8jIHRoZW4gZW5kKS8KKyAgICBhYiBjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKKyAgICBhYiBjZGUKKworL14gICBhXCBiW2MgXWQgICAgICAgJC94CisgICAgYSBiY2QKKyAgICBhIGIgZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZAorICAgIGFiIGQKKworL14oYShiKGMpKSkoZChlKGYpKSkoaChpKGopKSkoayhsKG0pKSkkLworICAgIGFiY2RlZmhpamtsbQorCisvXig/OmEoYihjKSkpKD86ZChlKGYpKSkoPzpoKGkoaikpKSg/OmsobChtKSkpJC8KKyAgICBhYmNkZWZoaWprbG0KKworL15bXHddW1xXXVtcc11bXFNdW1xkXVtcRF1bXGJdW1xuXVtcY11dW1wwMjJdLworICAgIGErIFowK1x4MDhcblx4MWRceDEyCisKKy9eWy5eJHwoKSorP3ssfV0rLworICAgIC5eXCQoKispfHs/LD99CisKKy9eYSpcdy8KKyAgICB6CisgICAgYXoKKyAgICBhYWF6CisgICAgYQorICAgIGFhCisgICAgYWFhYQorICAgIGErCisgICAgYWErCisKKy9eYSo/XHcvCisgICAgegorICAgIGF6CisgICAgYWFhegorICAgIGEKKyAgICBhYQorICAgIGFhYWEKKyAgICBhKworICAgIGFhKworCisvXmErXHcvCisgICAgYXoKKyAgICBhYWF6CisgICAgYWEKKyAgICBhYWFhCisgICAgYWErCisKKy9eYSs/XHcvCisgICAgYXoKKyAgICBhYWF6CisgICAgYWEKKyAgICBhYWFhCisgICAgYWErCisKKy9eXGR7OH1cd3syLH0vCisgICAgMTIzNDU2Nzg5MAorICAgIDEyMzQ1Njc4YWIKKyAgICAxMjM0NTY3OF9fCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0NTY3CisKKy9eW2FlaW91XGRdezQsNX0kLworICAgIHVvaWUKKyAgICAxMjM0CisgICAgMTIzNDUKKyAgICBhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNDU2CisKKy9eW2FlaW91XGRdezQsNX0/LworICAgIHVvaWUKKyAgICAxMjM0CisgICAgMTIzNDUKKyAgICBhYWFhYQorICAgIDEyMzQ1NgorCisvXkZyb20gKyhbXiBdKykgK1thLXpBLVpdW2EtekEtWl1bYS16QS1aXSArW2EtekEtWl1bYS16QS1aXVthLXpBLVpdICtbMC05XT9bMC05XSArWzAtOV1bMC05XTpbMC05XVswLTldLworICAgIEZyb20gYWJjZCAgTW9uIFNlcCAwMSAxMjozMzowMiAxOTk3CisKKy9eRnJvbVxzK1xTK1xzKyhbYS16QS1aXXszfVxzKyl7Mn1cZHsxLDJ9XHMrXGRcZDpcZFxkLworICAgIEZyb20gYWJjZCAgTW9uIFNlcCAwMSAxMjozMzowMiAxOTk3CisgICAgRnJvbSBhYmNkICBNb24gU2VwICAxIDEyOjMzOjAyIDE5OTcKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEZyb20gYWJjZCAgU2VwIDAxIDEyOjMzOjAyIDE5OTcKKworL14xMi4zNC9zCisgICAgMTJcbjM0CisgICAgMTJccjM0CisKKy9cdysoPz1cdCkvCisgICAgdGhlIHF1aWNrIGJyb3duXHQgZm94CisKKy9mb28oPyFiYXIpKC4qKS8KKyAgICBmb29iYXIgaXMgZm9vbGlzaCBzZWU/CisKKy8oPzooPyFmb28pLi4ufF4uezAsMn0pYmFyKC4qKS8KKyAgICBmb29iYXIgY3Jvd2JhciBldGMKKyAgICBiYXJyZWwKKyAgICAyYmFycmVsCisgICAgQSBiYXJyZWwKKworL14oXEQqKSg/PVxkKSg/ITEyMykvCisgICAgYWJjNDU2CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMxMjMKKworL14xMjM0KD8jIHRlc3QgbmV3bGluZXMKKyAgaW5zaWRlKS8KKyAgICAxMjM0CisKKy9eMTIzNCAjY29tbWVudCBpbiBleHRlbmRlZCByZQorICAveAorICAgIDEyMzQKKworLyNyaHViYXJiCisgIGFiY2QveAorICAgIGFiY2QKKworL15hYmNkI3JodWJhcmIveAorICAgIGFiY2QKKworLyg/IV4pYWJjLworICAgIHRoZSBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworCisvKD89XilhYmMvCisgICAgYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB0aGUgYWJjCisKKy9eW2FiXXsxLDN9KGFiKnxiKS9ub19hdXRvX3Bvc3Nlc3MKKyAgICBhYWJiYmJiCisKKy9eW2FiXXsxLDN9PyhhYip8Yikvbm9fYXV0b19wb3NzZXNzCisgICAgYWFiYmJiYgorCisvXlthYl17MSwzfT8oYWIqP3xiKS9ub19hdXRvX3Bvc3Nlc3MKKyAgICBhYWJiYmJiCisKKy9eW2FiXXsxLDN9KGFiKj98Yikvbm9fYXV0b19wb3NzZXNzCisgICAgYWFiYmJiYgorCisvICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgbGVhZGluZyBjb21tZW50CisoPzogICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHdvcmQKKyg/OiAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgKSogIyBmdXJ0aGVyIG9rYXksIGlmIGxlZCBieSBhIHBlcmlvZAorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBAICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCBzdWJkb21haW4KKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBsZWQgYnkgYSBwZXJpb2QuLi4KKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAjICAgLi4uZnVydGhlciBva2F5CispKgorIyBhZGRyZXNzCit8ICAgICAgICAgICAgICAgICAgICAgIyAgb3IKKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKykgICAgICAgICAgICAgIyBvbmUgd29yZCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieS4uLi4KKyg/OgorW14oKTw+QCw7OiIuXFxcW1xdXHg4MC1ceGZmXDAwMC1cMDEwXDAxMi1cMDM3XSAgfCAgIyBhdG9tIGFuZCBzcGFjZSBwYXJ0cywgb3IuLi4KK1woCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICAgICAgfCAgIyBjb21tZW50cywgb3IuLi4KKworIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorIyBxdW90ZWQgc3RyaW5ncworKSoKKzwgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICMgbGVhZGluZyA8CisoPzogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisKKyg/OiAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAsICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCispKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGNvbW1hCis6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNsb3NpbmcgY29sb24KKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgKT8gIyAgICAgICBvcHRpb25hbCByb3V0ZQorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHdvcmQKKyg/OiAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgKSogIyBmdXJ0aGVyIG9rYXksIGlmIGxlZCBieSBhIHBlcmlvZAorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBAICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCBzdWJkb21haW4KKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBsZWQgYnkgYSBwZXJpb2QuLi4KKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAjICAgLi4uZnVydGhlciBva2F5CispKgorIyAgICAgICBhZGRyZXNzIHNwZWMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgPiAjICAgICAgICAgICAgICAgICAgdHJhaWxpbmcgPgorIyBuYW1lIGFuZCBhZGRyZXNzCispICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudAorL3gKKyAgICBBbGFuIE90aGVyIDx1c2VyXEBkb20uYWluPgorICAgIDx1c2VyXEBkb20uYWluPgorICAgIHVzZXJcQGRvbS5haW4KKyAgICBcIkEuIE90aGVyXCIgPHVzZXIuMTIzNFxAZG9tLmFpbj4gKGEgY29tbWVudCkKKyAgICBBLiBPdGhlciA8dXNlci4xMjM0XEBkb20uYWluPiAoYSBjb21tZW50KQorICAgIFwiL3M9dXNlci9vdT1ob3N0L289cGxhY2UvcHJtZD11dS55eS9hZG1kPSAvYz1nYi9cIlxAeDQwMC1yZS5sYXkKKyAgICBBIG1pc3NpbmcgYW5nbGUgPHVzZXJcQHNvbWUud2hlcmUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFRoZSBxdWljayBicm93biBmb3gKKworL1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgbGVhZGluZyBjb21tZW50CisoPzoKKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KKyMgQXRvbQorfCAgICAgICAgICAgICAgICAgICAgICAgIyAgb3IKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgbm9ybWFsCisoPzogIFxcIFteXHg4MC1ceGZmXSAgW15cXFx4ODAtXHhmZlxuXDAxNSJdICogKSogICAgICAgICMgICAoIHNwZWNpYWwgbm9ybWFsKiApKgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAiCisjIFF1b3RlZCBzdHJpbmcKKykKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyg/OgorXC4KK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KKyMgQXRvbQorfCAgICAgICAgICAgICAgICAgICAgICAgIyAgb3IKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgbm9ybWFsCisoPzogIFxcIFteXHg4MC1ceGZmXSAgW15cXFx4ODAtXHhmZlxuXDAxNSJdICogKSogICAgICAgICMgICAoIHNwZWNpYWwgbm9ybWFsKiApKgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAiCisjIFF1b3RlZCBzdHJpbmcKKykKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgYWRkaXRpb25hbCB3b3JkcworKSoKK0AKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKK1xbICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudHMKKyg/OgorXC4KK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKK1xbICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudHMKKykqCisjIGFkZHJlc3MKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIG9yCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCisjIEF0b20KK3wgICAgICAgICAgICAgICAgICAgICAgICMgIG9yCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIG5vcm1hbAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIFteXFxceDgwLVx4ZmZcblwwMTUiXSAqICkqICAgICAgICAjICAgKCBzcGVjaWFsIG5vcm1hbCogKSoKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIgorIyBRdW90ZWQgc3RyaW5nCispCisjIGxlYWRpbmcgd29yZAorW14oKTw+QCw7OiIuXFxcW1xdXHg4MC1ceGZmXDAwMC1cMDEwXDAxMi1cMDM3XSAqICAgICAgICAgICAgICAgIyAibm9ybWFsIiBhdG9tcyBhbmQgb3Igc3BhY2VzCisoPzoKKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCit8CisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIG5vcm1hbAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIFteXFxceDgwLVx4ZmZcblwwMTUiXSAqICkqICAgICAgICAjICAgKCBzcGVjaWFsIG5vcm1hbCogKSoKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIgorKSAjICJzcGVjaWFsIiBjb21tZW50IG9yIHF1b3RlZCBzdHJpbmcKK1teKCk8PkAsOzoiLlxcXFtcXVx4ODAtXHhmZlwwMDAtXDAxMFwwMTItXDAzN10gKiAgICAgICAgICAgICMgIG1vcmUgIm5vcm1hbCIKKykqCis8CitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIDwKKyg/OgorQAorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorXFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50cworKD86CitcLgorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorXFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50cworKSoKKyg/OiAsCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCitACitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCisoPzoKK1wuCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCispKgorKSogICMgYWRkaXRpb25hbCBkb21haW5zCis6CitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCispPyAgICAgIyAgICAgICBvcHRpb25hbCByb3V0ZQorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorIyBBdG9tCit8ICAgICAgICAgICAgICAgICAgICAgICAjICBvcgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIKK1teXFxceDgwLVx4ZmZcblwwMTUiXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBub3JtYWwKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICBbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiApKiAgICAgICAgIyAgICggc3BlY2lhbCBub3JtYWwqICkqCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICIKKyMgUXVvdGVkIHN0cmluZworKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitcLgorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorIyBBdG9tCit8ICAgICAgICAgICAgICAgICAgICAgICAjICBvcgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIKK1teXFxceDgwLVx4ZmZcblwwMTUiXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBub3JtYWwKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICBbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiApKiAgICAgICAgIyAgICggc3BlY2lhbCBub3JtYWwqICkqCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICIKKyMgUXVvdGVkIHN0cmluZworKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBhZGRpdGlvbmFsIHdvcmRzCispKgorQAorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorXFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50cworKD86CitcLgorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorXFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50cworKSoKKyMgICAgICAgYWRkcmVzcyBzcGVjCis+ICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICA+CisjIG5hbWUgYW5kIGFkZHJlc3MKKykKKy94CisgICAgQWxhbiBPdGhlciA8dXNlclxAZG9tLmFpbj4KKyAgICA8dXNlclxAZG9tLmFpbj4KKyAgICB1c2VyXEBkb20uYWluCisgICAgXCJBLiBPdGhlclwiIDx1c2VyLjEyMzRcQGRvbS5haW4+IChhIGNvbW1lbnQpCisgICAgQS4gT3RoZXIgPHVzZXIuMTIzNFxAZG9tLmFpbj4gKGEgY29tbWVudCkKKyAgICBcIi9zPXVzZXIvb3U9aG9zdC9vPXBsYWNlL3BybWQ9dXUueXkvYWRtZD0gL2M9Z2IvXCJcQHg0MDAtcmUubGF5CisgICAgQSBtaXNzaW5nIGFuZ2xlIDx1c2VyXEBzb21lLndoZXJlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGUgcXVpY2sgYnJvd24gZm94CisKKy9hYmNcMGRlZlwwMHBxclwwMDB4eXpcMDAwMEFCLworICAgIGFiY1wwZGVmXDAwcHFyXDAwMHh5elwwMDAwQUIKKyAgICBhYmM0NTYgYWJjXDBkZWZcMDBwcXJcMDAweHl6XDAwMDBBQkNERQorCisvYWJjXHgwZGVmXHgwMHBxclx4MDAweHl6XHgwMDAwQUIvCisgICAgYWJjXHgwZGVmXHgwMHBxclx4MDAweHl6XHgwMDAwQUIKKyAgICBhYmM0NTYgYWJjXHgwZGVmXHgwMHBxclx4MDAweHl6XHgwMDAwQUJDREUKKworL15bXDAwMC1cMDM3XS8KKyAgICBcMEEKKyAgICBcMDFCCisgICAgXDAzN0MKKworL1wwKi8KKyAgICBcMFwwXDBcMAorCisvQVx4MHsyLDN9Wi8KKyAgICBUaGUgQVx4MFx4MFoKKyAgICBBbiBBXDBceDBcMFoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFcMFoKKyAgICBBXDBceDBcMFx4MFoKKworL15ccy8KKyAgICBcMDQwYWJjCisgICAgXHgwY2FiYworICAgIFxuYWJjCisgICAgXHJhYmMKKyAgICBcdGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCisKKy9eYQliCisgICAgDCAgYy94CisgICAgYWJjCisKKy9hYnsxLDN9YmMvCisgICAgYWJiYmJjCisgICAgYWJiYmMKKyAgICBhYmJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKKyAgICBhYmJiYmJjCisKKy8oW14uXSopXC4oW146XSopOltUIF0rKC4qKS8KKyAgICB0cmFjazEudGl0bGU6VEJsYWggYmxhaCBibGFoCisKKy8oW14uXSopXC4oW146XSopOltUIF0rKC4qKS9pCisgICAgdHJhY2sxLnRpdGxlOlRCbGFoIGJsYWggYmxhaAorCisvKFteLl0qKVwuKFteOl0qKTpbdCBdKyguKikvaQorICAgIHRyYWNrMS50aXRsZTpUQmxhaCBibGFoIGJsYWgKKworL15bVy1jXSskLworICAgIFdYWV9eYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB3eHkKKworL15bVy1jXSskL2kKKyAgICBXWFlfXmFiYworICAgIHd4eV9eQUJDCisKKy9eW1x4M2YtXHg1Rl0rJC9pCisgICAgV1hZX15hYmMKKyAgICB3eHlfXkFCQworCisvXmFiYyQvbQorICAgIGFiYworICAgIHFxcVxuYWJjCisgICAgYWJjXG56enoKKyAgICBxcXFcbmFiY1xuenp6CisKKy9eYWJjJC8KKyAgICBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHFxcVxuYWJjCisgICAgYWJjXG56enoKKyAgICBxcXFcbmFiY1xuenp6CisKKy9cQWFiY1xaL20KKyAgICBhYmMKKyAgICBhYmNcbiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHFxcVxuYWJjCisgICAgYWJjXG56enoKKyAgICBxcXFcbmFiY1xuenp6CisgICAgCisvXEEoLikqXFovcworICAgIGFiY1xuZGVmCisKKy9cQSguKSpcWi9tCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcbmRlZgorCisvKD86Yil8KD86OispLworICAgIGI6OmMKKyAgICBjOjpiCisKKy9bLWF6XSsvCisgICAgYXotCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiCisKKy9bYXotXSsvCisgICAgemEtCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiCisKKy9bYVwtel0rLworICAgIGEtegorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYgorCisvW2Etel0rLworICAgIGFiY2R4eXoKKworL1tcZC1dKy8KKyAgICAxMi0zNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhCisKKy9bXGQtel0rLworICAgIDEyLTM0egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhCisKKy9ceDVjLworICAgIFxcCisKKy9ceDIwWi8KKyAgICB0aGUgWm9vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBadWx1CisKKy9hYnszY2QvCisgICAgYWJ7M2NkCisKKy9hYnszLGNkLworICAgIGFiezMsY2QKKworL2FiezMsNGF9Y2QvCisgICAgYWJ7Myw0YX1jZAorCisvezQsNWF9YmMvCisgICAgezQsNWF9YmMKKworL15hLmIvbmV3bGluZT1sZgorICAgIGFccmIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcbmIKKworL2FiYyQvCisgICAgYWJjCisgICAgYWJjXG4KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY1xuZGVmCisKKy8oYWJjKVwxMjMvCisgICAgYWJjXHg1MworCisvKGFiYylcMjIzLworICAgIGFiY1x4OTMKKworLyhhYmMpXDMyMy8KKyAgICBhYmNceGQzCisKKy8oYWJjKVwxMDAvCisgICAgYWJjXHg0MAorICAgIGFiY1wxMDAKKworLyhhYmMpXDEwMDAvCisgICAgYWJjXHg0MDAKKyAgICBhYmNceDQwXHgzMAorICAgIGFiY1wxMDAwCisgICAgYWJjXDEwMFx4MzAKKyAgICBhYmNcMTAwXDA2MAorICAgIGFiY1wxMDBcNjAKKworLyhhKShiKShjKShkKShlKShmKShnKShoKShpKShqKShrKVwxMlwxMjMvCisgICAgYWJjZGVmZ2hpamtcMTJTCisKKy9hezB9YmMvCisgICAgYmMKKworLyhhfChiYykpezAsMH0/eHl6LworICAgIHh5egorCisvYWJjW1wxMF1kZS8KKyAgICBhYmNcMDEwZGUKKworL2FiY1tcMV1kZS8KKyAgICBhYmNcMWRlCisKKy8oYWJjKVtcMV1kZS8KKyAgICBhYmNcMWRlCisKKy8oP3MpYS5iLworICAgIGFcbmIKKworL14oW15hXSkoW15cYl0pKFteY10qKShbXmRdezMsNH0pLworICAgIGJhTk9UY2NjY2QKKyAgICBiYU5PVGNjY2QKKyAgICBiYU5PVGNjZAorICAgIGJhY2NjZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYW55dGhpbmcKKyAgICBiXGJjICAgCisgICAgYmFjY2QKKworL1teYV0vCisgICAgQWJjCisgIAorL1teYV0vaQorICAgIEFiYyAKKworL1teYV0rLworICAgIEFBQWFBYmMKKyAgCisvW15hXSsvaQorICAgIEFBQWFBYmMgCisKKy9bXmFdKy8KKyAgICBiYmJcbmNjYworICAgCisvW15rXSQvCisgICAgYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmsgICAKKyAgIAorL1tea117MiwzfSQvCisgICAgYWJjCisgICAga2JjCisgICAga2FiYyAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiaworICAgIGFrYgorICAgIGFrayAKKworL15cZHs4LH1cQC4rW15rXSQvCisgICAgMTIzNDU2NzhcQGEuYi5jLmQKKyAgICAxMjM0NTY3ODlcQHgueS56CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0NTY3OFxAeC55LnVrCisgICAgMTIzNDU2N1xAYS5iLmMuZCAgICAgICAKKworL1teYV0vCisgICAgYWFhYWJjZAorICAgIGFhQWFiY2QgCisKKy9bXmFdL2kKKyAgICBhYWFhYmNkCisgICAgYWFBYWJjZCAKKworL1teYXpdLworICAgIGFhYWFiY2QKKyAgICBhYUFhYmNkIAorCisvW15hel0vaQorICAgIGFhYWFiY2QKKyAgICBhYUFhYmNkIAorCisvXDAwMFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzdcMDQwXDA0MVwwNDJcMDQzXDA0NFwwNDVcMDQ2XDA0N1wwNTBcMDUxXDA1MlwwNTNcMDU0XDA1NVwwNTZcMDU3XDA2MFwwNjFcMDYyXDA2M1wwNjRcMDY1XDA2NlwwNjdcMDcwXDA3MVwwNzJcMDczXDA3NFwwNzVcMDc2XDA3N1wxMDBcMTAxXDEwMlwxMDNcMTA0XDEwNVwxMDZcMTA3XDExMFwxMTFcMTEyXDExM1wxMTRcMTE1XDExNlwxMTdcMTIwXDEyMVwxMjJcMTIzXDEyNFwxMjVcMTI2XDEyN1wxMzBcMTMxXDEzMlwxMzNcMTM0XDEzNVwxMzZcMTM3XDE0MFwxNDFcMTQyXDE0M1wxNDRcMTQ1XDE0NlwxNDdcMTUwXDE1MVwxNTJcMTUzXDE1NFwxNTVcMTU2XDE1N1wxNjBcMTYxXDE2MlwxNjNcMTY0XDE2NVwxNjZcMTY3XDE3MFwxNzFcMTcyXDE3M1wxNzRcMTc1XDE3NlwxNzdcMjAwXDIwMVwyMDJcMjAzXDIwNFwyMDVcMjA2XDIwN1wyMTBcMjExXDIxMlwyMTNcMjE0XDIxNVwyMTZcMjE3XDIyMFwyMjFcMjIyXDIyM1wyMjRcMjI1XDIyNlwyMjdcMjMwXDIzMVwyMzJcMjMzXDIzNFwyMzVcMjM2XDIzN1wyNDBcMjQxXDI0MlwyNDNcMjQ0XDI0NVwyNDZcMjQ3XDI1MFwyNTFcMjUyXDI1M1wyNTRcMjU1XDI1NlwyNTdcMjYwXDI2MVwyNjJcMjYzXDI2NFwyNjVcMjY2XDI2N1wyNzBcMjcxXDI3MlwyNzNcMjc0XDI3NVwyNzZcMjc3XDMwMFwzMDFcMzAyXDMwM1wzMDRcMzA1XDMwNlwzMDdcMzEwXDMxMVwzMTJcMzEzXDMxNFwzMTVcMzE2XDMxN1wzMjBcMzIxXDMyMlwzMjNcMzI0XDMyNVwzMjZcMzI3XDMzMFwzMzFcMzMyXDMzM1wzMzRcMzM1XDMzNlwzMzdcMzQwXDM0MVwzNDJcMzQzXDM0NFwzNDVcMzQ2XDM0N1wzNTBcMzUxXDM1MlwzNTNcMzU0XDM1NVwzNTZcMzU3XDM2MFwzNjFcMzYyXDM2M1wzNjRcMzY1XDM2NlwzNjdcMzcwXDM3MVwzNzJcMzczXDM3NFwzNzVcMzc2XDM3Ny8KKyBcMDAwXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzN1wwNDBcMDQxXDA0MlwwNDNcMDQ0XDA0NVwwNDZcMDQ3XDA1MFwwNTFcMDUyXDA1M1wwNTRcMDU1XDA1NlwwNTdcMDYwXDA2MVwwNjJcMDYzXDA2NFwwNjVcMDY2XDA2N1wwNzBcMDcxXDA3MlwwNzNcMDc0XDA3NVwwNzZcMDc3XDEwMFwxMDFcMTAyXDEwM1wxMDRcMTA1XDEwNlwxMDdcMTEwXDExMVwxMTJcMTEzXDExNFwxMTVcMTE2XDExN1wxMjBcMTIxXDEyMlwxMjNcMTI0XDEyNVwxMjZcMTI3XDEzMFwxMzFcMTMyXDEzM1wxMzRcMTM1XDEzNlwxMzdcMTQwXDE0MVwxNDJcMTQzXDE0NFwxNDVcMTQ2XDE0N1wxNTBcMTUxXDE1MlwxNTNcMTU0XDE1NVwxNTZcMTU3XDE2MFwxNjFcMTYyXDE2M1wxNjRcMTY1XDE2NlwxNjdcMTcwXDE3MVwxNzJcMTczXDE3NFwxNzVcMTc2XDE3N1wyMDBcMjAxXDIwMlwyMDNcMjA0XDIwNVwyMDZcMjA3XDIxMFwyMTFcMjEyXDIxM1wyMTRcMjE1XDIxNlwyMTdcMjIwXDIyMVwyMjJcMjIzXDIyNFwyMjVcMjI2XDIyN1wyMzBcMjMxXDIzMlwyMzNcMjM0XDIzNVwyMzZcMjM3XDI0MFwyNDFcMjQyXDI0M1wyNDRcMjQ1XDI0NlwyNDdcMjUwXDI1MVwyNTJcMjUzXDI1NFwyNTVcMjU2XDI1N1wyNjBcMjYxXDI2MlwyNjNcMjY0XDI2NVwyNjZcMjY3XDI3MFwyNzFcMjcyXDI3M1wyNzRcMjc1XDI3NlwyNzdcMzAwXDMwMVwzMDJcMzAzXDMwNFwzMDVcMzA2XDMwN1wzMTBcMzExXDMxMlwzMTNcMzE0XDMxNVwzMTZcMzE3XDMyMFwzMjFcMzIyXDMyM1wzMjRcMzI1XDMyNlwzMjdcMzMwXDMzMVwzMzJcMzMzXDMzNFwzMzVcMzM2XDMzN1wzNDBcMzQxXDM0MlwzNDNcMzQ0XDM0NVwzNDZcMzQ3XDM1MFwzNTFcMzUyXDM1M1wzNTRcMzU1XDM1NlwzNTdcMzYwXDM2MVwzNjJcMzYzXDM2NFwzNjVcMzY2XDM2N1wzNzBcMzcxXDM3MlwzNzNcMzc0XDM3NVwzNzZcMzc3CisKKy9QW14qXVRBSVJFW14qXXsxLDZ9P0xMLworICAgIHh4eHh4eHh4eHh4UFNUQUlSRUlTTEx4eHh4eHh4eHgKKworL1BbXipdVEFJUkVbXipdezEsfT9MTC8KKyAgICB4eHh4eHh4eHh4eFBTVEFJUkVJU0xMeHh4eHh4eHh4CisKKy8oXC5cZFxkWzEtOV0/KVxkKy8KKyAgICAxLjIzMDAwMzkzOAorICAgIDEuODc1MDAwMjgyICAgCisgICAgMS4yMzUgIAorICAgICAgICAgICAgICAgICAgCisvKFwuXGRcZCgoPz0wKXxcZCg/PVxkKSkpLworICAgIDEuMjMwMDAzOTM4ICAgICAgCisgICAgMS44NzUwMDAyODIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICAxLjIzNSAKKyAgICAKKy9hKD8pYi8KKyAgICBhYiAKKyAKKy9cYihmb28pXHMrKFx3KykvaQorICAgIEZvb2QgaXMgb24gdGhlIGZvbyB0YWJsZQorICAgIAorL2ZvbyguKiliYXIvCisgICAgVGhlIGZvb2QgaXMgdW5kZXIgdGhlIGJhciBpbiB0aGUgYmFybi4KKyAgICAKKy9mb28oLio/KWJhci8KKyAgICBUaGUgZm9vZCBpcyB1bmRlciB0aGUgYmFyIGluIHRoZSBiYXJuLgorCisvKC4qKShcZCopL25vX2F1dG9fcG9zc2VzcworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgICAgCisvKC4qKShcZCspLworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgCisvKC4qPykoXGQqKS9ub19hdXRvX3Bvc3Nlc3MKKyAgICBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworCisvKC4qPykoXGQrKS8KKyAgICBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworCisvKC4qKShcZCspJC8KKyAgICBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworCisvKC4qPykoXGQrKSQvCisgICAgSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKworLyguKilcYihcZCspJC8KKyAgICBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworCisvKC4qXEQpKFxkKykkLworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisKKy9eXEQqKD8hMTIzKS8KKyAgICBBQkMxMjMKKyAgICAgCisvXihcRCopKD89XGQpKD8hMTIzKS8KKyAgICBBQkM0NDUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQzEyMworICAgIAorL15bVy1dNDZdLworICAgIFc0Nl03ODkgCisgICAgLTQ2XTc4OQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgV2FsbAorICAgIFplYnJhCisgICAgNDIKKyAgICBbYWJjZF0gCisgICAgXWFiY2RbCisgICAgICAgCisvXltXLVxdNDZdLworICAgIFc0Nl03ODkgCisgICAgV2FsbAorICAgIFplYnJhCisgICAgWHlsb3Bob25lICAKKyAgICA0MgorICAgIFthYmNkXSAKKyAgICBdYWJjZFsKKyAgICBcXGJhY2tzbGFzaCAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIC00Nl03ODkKKyAgICB3ZWxsCisgICAgCisvXGRcZFwvXGRcZFwvXGRcZFxkXGQvCisgICAgMDEvMDEvMjAwMAorCisvd29yZCAoPzpbYS16QS1aMC05XSsgKXswLDEwfW90aGVyd29yZC8KKyAgd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyayBvdGhlcndvcmQKK1w9IEV4cGVjdCBubyBtYXRjaAorICB3b3JkIGNhdCBkb2cgZWxlcGhhbnQgbXVzc2VsIGNvdyBob3JzZSBjYW5hcnkgYmFib29uIHNuYWtlIHNoYXJrCisKKy93b3JkICg/OlthLXpBLVowLTldKyApezAsMzAwfW90aGVyd29yZC8KK1w9IEV4cGVjdCBubyBtYXRjaAorICB3b3JkIGNhdCBkb2cgZWxlcGhhbnQgbXVzc2VsIGNvdyBob3JzZSBjYW5hcnkgYmFib29uIHNuYWtlIHNoYXJrIHRoZSBxdWljayBicm93biBmb3ggYW5kIHRoZSBsYXp5IGRvZyBhbmQgc2V2ZXJhbCBvdGhlciB3b3JkcyBnZXR0aW5nIGNsb3NlIHRvIHRoaXJ0eSBieSBub3cgSSBob3BlCisKKy9eKGEpezAsMH0vCisgICAgYmNkCisgICAgYWJjCisgICAgYWFiICAgICAKKworL14oYSl7MCwxfS8KKyAgICBiY2QKKyAgICBhYmMKKyAgICBhYWIgIAorCisvXihhKXswLDJ9LworICAgIGJjZAorICAgIGFiYworICAgIGFhYiAgCisKKy9eKGEpezAsM30vCisgICAgYmNkCisgICAgYWJjCisgICAgYWFiCisgICAgYWFhICAgCisKKy9eKGEpezAsfS8KKyAgICBiY2QKKyAgICBhYmMKKyAgICBhYWIKKyAgICBhYWEKKyAgICBhYWFhYWFhYSAgICAKKworL14oYSl7MSwxfS8KKyAgICBhYmMKKyAgICBhYWIgIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmNkCisKKy9eKGEpezEsMn0vCisgICAgYWJjCisgICAgYWFiICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJjZAorCisvXihhKXsxLDN9LworICAgIGFiYworICAgIGFhYgorICAgIGFhYSAgIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmNkCisKKy9eKGEpezEsfS8KKyAgICBhYmMKKyAgICBhYWIKKyAgICBhYWEKKyAgICBhYWFhYWFhYSAgICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJjZAorCisvLipcLmdpZi8KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisKKy8uezAsfVwuZ2lmLworICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKworLy4qXC5naWYvbQorICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKworLy4qXC5naWYvcworICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKworLy4qXC5naWYvbXMKKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisgICAgCisvLiokLworICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKworLy4qJC9tCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ubworCisvLiokL3MKKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisKKy8uKiQvbXMKKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisgICAgCisvLiokLworICAgIGJvcmZsZVxuYmliLmdpZlxubm9cbgorCisvLiokL20KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vXG4KKworLy4qJC9zCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ub1xuCisKKy8uKiQvbXMKKyAgICBib3JmbGVcbmJpYi5naWZcbm5vXG4KKyAgICAKKy8oLipYfF5CKS8KKyAgICBhYmNkZVxuMTIzNFh5egorICAgIEJhckZvbyAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlXG5CYXIgIAorCisvKC4qWHxeQikvbQorICAgIGFiY2RlXG4xMjM0WHl6CisgICAgQmFyRm9vIAorICAgIGFiY2RlXG5CYXIgIAorCisvKC4qWHxeQikvcworICAgIGFiY2RlXG4xMjM0WHl6CisgICAgQmFyRm9vIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGVcbkJhciAgCisKKy8oLipYfF5CKS9tcworICAgIGFiY2RlXG4xMjM0WHl6CisgICAgQmFyRm9vIAorICAgIGFiY2RlXG5CYXIgIAorCisvKD9zKSguKlh8XkIpLworICAgIGFiY2RlXG4xMjM0WHl6CisgICAgQmFyRm9vIAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiY2RlXG5CYXIgIAorCisvKD9zOi4qWHxeQikvCisgICAgYWJjZGVcbjEyMzRYeXoKKyAgICBCYXJGb28gCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWJjZGVcbkJhciAgCisKKy9eLipCLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjXG5CCisgICAgIAorLyg/cyleLipCLworICAgIGFiY1xuQgorCisvKD9tKV4uKkIvCisgICAgYWJjXG5CCisgICAgIAorLyg/bXMpXi4qQi8KKyAgICBhYmNcbkIKKworLyg/bXMpXkIvCisgICAgYWJjXG5CCisKKy8oP3MpQiQvCisgICAgQlxuCisKKy9eWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldLworICAgIDEyMzQ1NjY1NDMyMQorICAKKy9eXGRcZFxkXGRcZFxkXGRcZFxkXGRcZFxkLworICAgIDEyMzQ1NjY1NDMyMSAKKworL15bXGRdW1xkXVtcZF1bXGRdW1xkXVtcZF1bXGRdW1xkXVtcZF1bXGRdW1xkXVtcZF0vCisgICAgMTIzNDU2NjU0MzIxCisgIAorL15bYWJjXXsxMn0vCisgICAgYWJjYWJjYWJjYWJjCisgICAgCisvXlthLWNdezEyfS8KKyAgICBhYmNhYmNhYmNhYmMKKyAgICAKKy9eKGF8YnxjKXsxMn0vCisgICAgYWJjYWJjYWJjYWJjIAorCisvXlthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5MDEyMzQ1Njc4OV0vCisgICAgbgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIHogCisKKy9hYmNkZXswLDB9LworICAgIGFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2UgIAorCisvYWJbY2RdezAsMH1lLworICAgIGFiZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGUgCisgICAgCisvYWIoYyl7MCwwfWQvCisgICAgYWJkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkICAgCisKKy9hKGIqKS8KKyAgICBhCisgICAgYWIKKyAgICBhYmJiYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmJiYmIgICAgCisgICAgCisvYWJcZHswfWUvCisgICAgYWJlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYjFlICAgCisgICAgCisvIihbXlxcIl0rfFxcLikqIi8KKyAgICB0aGUgXCJxdWlja1wiIGJyb3duIGZveAorICAgIFwidGhlIFxcXCJxdWlja1xcXCIgYnJvd24gZm94XCIgCisKKy8uKj8vZyxhZnRlcnRleHQKKyAgICBhYmMKKyAgCisvXGIvZyxhZnRlcnRleHQKKyAgICBhYmMgCisKKy9cYi9nLGFmdGVydGV4dAorICAgIGFiYyAKKworLy9nCisgICAgYWJjCisKKy88dHIoW1x3XFdcc1xkXVtePD5dezAsfSk+PFREKFtcd1xXXHNcZF1bXjw+XXswLH0pPihbXGRdezAsfVwuKSguKikoKDxCUj4oW1x3XFdcc1xkXVtePD5dezAsfSl8W1xzXXswLH0pKTxcL2E+PFwvVEQ+PFREKFtcd1xXXHNcZF1bXjw+XXswLH0pPihbXHdcV1xzXGRdW148Pl17MCx9KTxcL1REPjxURChbXHdcV1xzXGRdW148Pl17MCx9KT4oW1x3XFdcc1xkXVtePD5dezAsfSk8XC9URD48XC9UUj4vaXMKKyAgPFRSIEJHQ09MT1I9JyNEQkU5RTknPjxURCBhbGlnbj1sZWZ0IHZhbGlnbj10b3A+NDMuPGEgaHJlZj0nam9ibGlzdC5jZm0/Sm9iSUQ9OTQgNjczNSZLZXl3b3JkPSc+V29yZCBQcm9jZXNzb3I8QlI+KE4tMTI4Nik8L2E+PC9URD48VEQgYWxpZ249bGVmdCB2YWxpZ249dG9wPkxlZ2EgbHN0YWZmLmNvbTwvVEQ+PFREIGFsaWduPWxlZnQgdmFsaWduPXRvcD5DQSAtIFN0YXRld2lkZTwvVEQ+PC9UUj4KKworL2FbXmFdYi8KKyAgICBhY2IKKyAgICBhXG5iCisgICAgCisvYS5iLworICAgIGFjYgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFcbmIgICAKKyAgICAKKy9hW15hXWIvcworICAgIGFjYgorICAgIGFcbmIgIAorICAgIAorL2EuYi9zCisgICAgYWNiCisgICAgYVxuYiAgCisKKy9eKGIrP3xhKXsxLDJ9P2MvCisgICAgYmFjCisgICAgYmJhYworICAgIGJiYmFjCisgICAgYmJiYmFjCisgICAgYmJiYmJhYyAKKworL14oYit8YSl7MSwyfT9jLworICAgIGJhYworICAgIGJiYWMKKyAgICBiYmJhYworICAgIGJiYmJhYworICAgIGJiYmJiYWMgCisgICAgCisvKD8hXEEpeC9tCisgICAgYVxieFxuICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHhcbmJcbgorICAgIAorL1x4MHthYn0vCisgICAgXDB7YWJ9IAorCisvKEF8QikqP0NELworICAgIENEIAorICAgIAorLyhBfEIpKkNELworICAgIENEIAorCisvKD88IWJhcilmb28vCisgICAgZm9vCisgICAgY2F0Zm9vZAorICAgIGFyZm9vdGxlCisgICAgcmZvb3NoCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYXJmb28KKyAgICB0b3diYXJmb28KKworL1x3ezN9KD88IWJhcilmb28vCisgICAgY2F0Zm9vZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZm9vCisgICAgYmFyZm9vCisgICAgdG93YmFyZm9vCisKKy8oPzw9KGZvbylhKWJhci8KKyAgICBmb29hYmFyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYXIKKyAgICBmb29iYmFyCisgICAgICAKKy9cQWFiY1x6L20KKyAgICBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY1xuICAgCisgICAgcXFxXG5hYmMKKyAgICBhYmNcbnp6egorICAgIHFxcVxuYWJjXG56enoKKworIig/Pi4qLylmb28iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAvdGhpcy9pcy9hL3ZlcnkvbG9uZy9saW5lL2luL2RlZWQvd2l0aC92ZXJ5L21hbnkvc2xhc2hlcy9pbi9pdC95b3Uvc2VlLworCisiKD8+LiovKWZvbyIKKyAgICAvdGhpcy9pcy9hL3ZlcnkvbG9uZy9saW5lL2luL2RlZWQvd2l0aC92ZXJ5L21hbnkvc2xhc2hlcy9pbi9hbmQvZm9vCisKKy8oPz4oXC5cZFxkWzEtOV0/KSlcZCsvCisgICAgMS4yMzAwMDM5MzgKKyAgICAxLjg3NTAwMDI4MgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIDEuMjM1IAorCisvXigoPz5cdyspfCg/PlxzKykpKiQvCisgICAgbm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBtZW4gdG8gY29tZSB0byB0aGUgYWlkIG9mIHRoZSBwYXJ0eQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgdGhpcyBpcyBub3QgYSBsaW5lIHdpdGggb25seSB3b3JkcyBhbmQgc3BhY2VzIQorICAgIAorLyhcZCspKFx3KS8KKyAgICAxMjM0NWEKKyAgICAxMjM0NSsgCisKKy8oKD8+XGQrKSkoXHcpLworICAgIDEyMzQ1YQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNDUrIAorCisvKD8+YSspYi8KKyAgICBhYWFiCisKKy8oKD8+YSspYikvCisgICAgYWFhYgorCisvKD8+KGErKSliLworICAgIGFhYWIKKworLyg/PmIpKy8KKyAgICBhYWFiYmJjY2MKKworLyg/PmErfGIrfGMrKSpjLworICAgIGFhYWJiYmJjY2NjZAorICAgIAorLyhhK3xiK3xjKykqYy8KKyAgICBhYWFiYmJiY2NjY2QKKworLygoPz5bXigpXSspfFwoW14oKV0qXCkpKy8KKyAgICAoKGFiYyhhZGUpdWZoKCkoKXgKKyAgICAKKy9cKCgoPz5bXigpXSspfFwoW14oKV0rXCkpK1wpLworICAgIChhYmMpCisgICAgKGFiYyhkZWYpeHl6KQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgKCgoKWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhICAgCisKKy9hKD8taSliL2kKKyAgICBhYgorICAgIEFiCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYUIKKyAgICBBQgorICAgICAgICAKKy8oYSAoP3gpYiBjKWQgZS8KKyAgICBhIGJjZCBlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhIGIgY2QgZQorICAgIGFiY2QgZSAgIAorICAgIGEgYmNkZSAKKyAKKy8oYSBiKD94KWMgZCAoPy14KWUgZikvCisgICAgYSBiY2RlIGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlZiAgCisKKy8oYSg/aSliKWMvCisgICAgYWJjCisgICAgYUJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYkMKKyAgICBhQkMgIAorICAgIEFiYworICAgIEFCYworICAgIEFCQworICAgIEFiQworICAgIAorL2EoP2k6YiljLworICAgIGFiYworICAgIGFCYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIEFCQworICAgIGFiQworICAgIGFCQworICAgIAorL2EoP2k6YikqYy8KKyAgICBhQmMKKyAgICBhQkJjCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYUJDCisgICAgYUJCQworICAgIAorL2EoPz1iKD9pKWMpXHdcd2QvCisgICAgYWJjZAorICAgIGFiQ2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFCQ2QKKyAgICBhYmNEICAgICAKKyAgICAKKy8oP3MtaTptb3JlLip0aGFuKS4qbWlsbGlvbi9pCisgICAgbW9yZSB0aGFuIG1pbGxpb24KKyAgICBtb3JlIHRoYW4gTUlMTElPTgorICAgIG1vcmUgXG4gdGhhbiBNaWxsaW9uIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgTU9SRSBUSEFOIE1JTExJT04gICAgCisgICAgbW9yZSBcbiB0aGFuIFxuIG1pbGxpb24gCisKKy8oPzooP3MtaSltb3JlLip0aGFuKS4qbWlsbGlvbi9pCisgICAgbW9yZSB0aGFuIG1pbGxpb24KKyAgICBtb3JlIHRoYW4gTUlMTElPTgorICAgIG1vcmUgXG4gdGhhbiBNaWxsaW9uIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgTU9SRSBUSEFOIE1JTExJT04gICAgCisgICAgbW9yZSBcbiB0aGFuIFxuIG1pbGxpb24gCisgICAgCisvKD8+YSg/aSliKykrYy8KKyAgICBhYmMKKyAgICBhQmJjCisgICAgYUJCYyAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiYworICAgIGFiQWIgICAgCisgICAgYWJiQyAKKyAgICAKKy8oPz1hKD9pKWIpXHdcd2MvCisgICAgYWJjCisgICAgYUJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYiAKKyAgICBhYkMKKyAgICBhQkMgICAgIAorICAgIAorLyg/PD1hKD9pKWIpKFx3XHcpYy8KKyAgICBhYnh4YworICAgIGFCeHhjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYnh4YworICAgIEFCeHhjCisgICAgYWJ4eEMgICAgICAKKworL14oPyg/PWFiYylcd3szfTp8XGRcZCkkLworICAgIGFiYzoKKyAgICAxMgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzCisgICAgeHl6ICAgIAorCisvXig/KD8hYWJjKVxkXGR8XHd7M306KSQvCisgICAgYWJjOgorICAgIDEyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjMKKyAgICB4eXogICAgCisgICAgCisvKD8oPzw9Zm9vKWJhcnxjYXQpLworICAgIGZvb2JhcgorICAgIGNhdAorICAgIGZjYXQKKyAgICBmb2NhdCAgIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZm9vY2F0ICAKKworLyg/KD88IWZvbyljYXR8YmFyKS8KKyAgICBmb29iYXIKKyAgICBjYXQKKyAgICBmY2F0CisgICAgZm9jYXQgICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGZvb2NhdCAgCisKKy8oPz5hKikqLworICAgIGEKKyAgICBhYQorICAgIGFhYWEKKyAgICAKKy8oYWJjfCkrLworICAgIGFiYworICAgIGFiY2FiYworICAgIGFiY2FiY2FiYworICAgIHh5eiAgICAgIAorCisvKFthXSopKi8KKyAgICBhCisgICAgYWFhYWEgCisgCisvKFthYl0qKSovCisgICAgYQorICAgIGIKKyAgICBhYmFiYWIKKyAgICBhYWFhYmNkZQorICAgIGJiYmIgICAgCisgCisvKFteYV0qKSovCisgICAgYgorICAgIGJiYmIKKyAgICBhYWEgICAKKyAKKy8oW15hYl0qKSovCisgICAgY2NjYworICAgIGFiYWIgIAorIAorLyhbYV0qPykqLworICAgIGEKKyAgICBhYWFhIAorIAorLyhbYWJdKj8pKi8KKyAgICBhCisgICAgYgorICAgIGFiYWIKKyAgICBiYWJhICAgCisgCisvKFteYV0qPykqLworICAgIGIKKyAgICBiYmJiCisgICAgYWFhICAgCisgCisvKFteYWJdKj8pKi8KKyAgICBjCisgICAgY2NjYworICAgIGJhYmEgICAKKyAKKy8oPz5hKikqLworICAgIGEKKyAgICBhYWFiY2RlIAorIAorLygoPz5hKikpKi8KKyAgICBhYWFhYQorICAgIGFhYmJhYSAKKyAKKy8oKD8+YSo/KSkqLworICAgIGFhYWFhCisgICAgYWFiYmFhIAorCisvKD8oPz1bXmEtel0rW2Etel0pICBcZHsyfS1bYS16XXszfS1cZHsyfSAgfCAgXGR7Mn0tXGR7Mn0tXGR7Mn0gKSAveAorICAgIDEyLXNlcC05OAorICAgIDEyLTA5LTk4CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBzZXAtMTItOTgKKyAgICAgICAgCisvKD9pOnNhdHVyZGF5fHN1bmRheSkvCisgICAgc2F0dXJkYXkKKyAgICBzdW5kYXkKKyAgICBTYXR1cmRheQorICAgIFN1bmRheQorICAgIFNBVFVSREFZCisgICAgU1VOREFZCisgICAgU3VuRGF5CisgICAgCisvKGEoP2kpYmN8QkIpeC8KKyAgICBhYmN4CisgICAgYUJDeAorICAgIGJieAorICAgIEJCeAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjWAorICAgIGFCQ1gKKyAgICBiYlgKKyAgICBCQlggICAgICAgICAgICAgICAKKworL14oW2FiXSg/aSlbY2RdfFtlZl0pLworICAgIGFjCisgICAgYUMKKyAgICBiRAorICAgIGVsZXBoYW50CisgICAgRXVyb3BlIAorICAgIGZyb2cKKyAgICBGcmFuY2UKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFmcmljYSAgICAgCisKKy9eKGFifGEoP2kpW2ItY10oP20taSlkfHgoP2kpeXx6KS8KKyAgICBhYgorICAgIGFCZAorICAgIHh5CisgICAgeFkKKyAgICB6ZWJyYQorICAgIFphbWJlc2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFDRCAgCisgICAgWFkgIAorCisvKD88PWZvb1xuKV5iYXIvbQorICAgIGZvb1xuYmFyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYXIKKyAgICBiYXpcbmJhciAgIAorCisvKD88PSg/PCFmb28pYmFyKWJhei8KKyAgICBiYXJiYXoKKyAgICBiYXJiYXJiYXogCisgICAga29vYmFyYmF6IAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmF6CisgICAgZm9vYmFyYmF6IAorCisjIFRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHRha2VuIGZyb20gdGhlIFBlcmwgNS4wMDUgdGVzdCBzdWl0ZTsgc29tZSBvZiB0aGVtCisjIGFyZSBjb21wYXRpYmxlIHdpdGggNS4wMDQsIGJ1dCBJJ2QgcmF0aGVyIG5vdCBoYXZlIHRvIHNvcnQgdGhlbSBvdXQuCisKKy9hYmMvCisgICAgYWJjCisgICAgeGFiY3kKKyAgICBhYmFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeGJjCisgICAgYXhjCisgICAgYWJ4CisKKy9hYipjLworICAgIGFiYworCisvYWIqYmMvCisgICAgYWJjCisgICAgYWJiYworICAgIGFiYmJiYworCisvLnsxfS8KKyAgICBhYmJiYmMKKworLy57Myw0fS8KKyAgICBhYmJiYmMKKworL2FiezAsfWJjLworICAgIGFiYmJiYworCisvYWIrYmMvCisgICAgYWJiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCisgICAgYWJxCisKKy9hYitiYy8KKyAgICBhYmJiYmMKKworL2FiezEsfWJjLworICAgIGFiYmJiYworCisvYWJ7MSwzfWJjLworICAgIGFiYmJiYworCisvYWJ7Myw0fWJjLworICAgIGFiYmJiYworCisvYWJ7NCw1fWJjLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJxCisgICAgYWJiYmJjCisKKy9hYj9iYy8KKyAgICBhYmJjCisgICAgYWJjCisKKy9hYnswLDF9YmMvCisgICAgYWJjCisKKy9hYj9iYy8KKworL2FiP2MvCisgICAgYWJjCisKKy9hYnswLDF9Yy8KKyAgICBhYmMKKworL15hYmMkLworICAgIGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJiYmJjCisgICAgYWJjYworCisvXmFiYy8KKyAgICBhYmNjCisKKy9eYWJjJC8KKworL2FiYyQvCisgICAgYWFiYworICAgIGFhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmNkCisKKy9eLworICAgIGFiYworCisvJC8KKyAgICBhYmMKKworL2EuYy8KKyAgICBhYmMKKyAgICBheGMKKworL2EuKmMvCisgICAgYXh5emMKKworL2FbYmNdZC8KKyAgICBhYmQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGF4eXpkCisgICAgYWJjCisKKy9hW2ItZF1lLworICAgIGFjZQorCisvYVtiLWRdLworICAgIGFhYworCisvYVstYl0vCisgICAgYS0KKworL2FbYi1dLworICAgIGEtCisKKy9hXS8KKyAgICBhXQorCisvYVtdXWIvCisgICAgYV1iCisKKy9hW15iY11kLworICAgIGFlZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJkCisgICAgYWJkCisKKy9hW14tYl1jLworICAgIGFkYworCisvYVteXWJdYy8KKyAgICBhZGMKKyAgICBhLWMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFdYworCisvXGJhXGIvCisgICAgYS0KKyAgICAtYQorICAgIC1hLQorCisvXGJ5XGIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eQorICAgIHl6CisgICAgeHl6CisKKy9cQmFcQi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEtCisgICAgLWEKKyAgICAtYS0KKworL1xCeVxiLworICAgIHh5CisKKy9cYnlcQi8KKyAgICB5egorCisvXEJ5XEIvCisgICAgeHl6CisKKy9cdy8KKyAgICBhCisKKy9cVy8KKyAgICAtCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCisKKy9hXHNiLworICAgIGEgYgorCisvYVxTYi8KKyAgICBhLWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEgYgorCisvXGQvCisgICAgMQorCisvXEQvCisgICAgLQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMQorCisvW1x3XS8KKyAgICBhCisKKy9bXFddLworICAgIC0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKKworL2FbXHNdYi8KKyAgICBhIGIKKworL2FbXFNdYi8KKyAgICBhLWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEgYgorCisvW1xkXS8KKyAgICAxCisKKy9bXERdLworICAgIC0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEKKworL2FifGNkLworICAgIGFiYworICAgIGFiY2QKKworLygpZWYvCisgICAgZGVmCisKKy8kYi8KKworL2FcKGIvCisgICAgYShiCisKKy9hXCgqYi8KKyAgICBhYgorICAgIGEoKGIKKworL2FcXGIvCisgICAgYVxcYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxiCisKKy8oKGEpKS8KKyAgICBhYmMKKworLyhhKWIoYykvCisgICAgYWJjCisKKy9hK2IrYy8KKyAgICBhYWJiYWJjCisKKy9hezEsfWJ7MSx9Yy8KKyAgICBhYWJiYWJjCisKKy9hLis/Yy8KKyAgICBhYmNhYmMKKworLyhhK3xiKSovCisgICAgYWIKKworLyhhK3xiKXswLH0vCisgICAgYWIKKworLyhhK3xiKSsvCisgICAgYWIKKworLyhhK3xiKXsxLH0vCisgICAgYWIKKworLyhhK3xiKT8vCisgICAgYWIKKworLyhhK3xiKXswLDF9LworICAgIGFiCisKKy9bXmFiXSovCisgICAgY2RlCisKKy9hYmMvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiCisKKy9hKi8KKworLyhbYWJjXSkqZC8KKyAgICBhYmJiY2QKKworLyhbYWJjXSkqYmNkLworICAgIGFiY2QKKworL2F8YnxjfGR8ZS8KKyAgICBlCisKKy8oYXxifGN8ZHxlKWYvCisgICAgZWYKKworL2FiY2QqZWZnLworICAgIGFiY2RlZmcKKworL2FiKi8KKyAgICB4YWJ5YWJiYnoKKyAgICB4YXlhYmJiegorCisvKGFifGNkKWUvCisgICAgYWJjZGUKKworL1thYmhnZWZkY11pai8KKyAgICBoaWoKKworL14oYWJ8Y2QpZS8KKworLyhhYmN8KWVmLworICAgIGFiY2RlZgorCisvKGF8YiljKmQvCisgICAgYWJjZAorCisvKGFifGFiKiliYy8KKyAgICBhYmMKKworL2EoW2JjXSopYyovCisgICAgYWJjCisKKy9hKFtiY10qKShjKmQpLworICAgIGFiY2QKKworL2EoW2JjXSspKGMqZCkvCisgICAgYWJjZAorCisvYShbYmNdKikoYytkKS8KKyAgICBhYmNkCisKKy9hW2JjZF0qZGNkY2RlLworICAgIGFkY2RjZGUKKworL2FbYmNkXStkY2RjZGUvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkZQorICAgIGFkY2RjZGUKKworLyhhYnxhKWIqYy8KKyAgICBhYmMKKworLygoYSkoYiljKShkKS8KKyAgICBhYmNkCisKKy9bYS16QS1aX11bYS16QS1aMC05X10qLworICAgIGFscGhhCisKKy9eYShiYyt8YltlaF0pZ3wuaCQvCisgICAgYWJoCisKKy8oYmMrZCR8ZWYqZy58aD9pKGp8aykpLworICAgIGVmZmd6CisgICAgaWoKKyAgICByZWZmZ3oKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGVmZmcKKyAgICBiY2RkCisKKy8oKCgoKCgoKCgoYSkpKSkpKSkpKSkvCisgICAgYQorCisvKCgoKCgoKCgoYSkpKSkpKSkpKS8KKyAgICBhCisKKy9tdWx0aXBsZSB3b3JkcyBvZiB0ZXh0LworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWEKKyAgICB1aC11aAorCisvbXVsdGlwbGUgd29yZHMvCisgICAgbXVsdGlwbGUgd29yZHMsIHllYWgKKworLyguKiljKC4qKS8KKyAgICBhYmNkZQorCisvXCgoLiopLCAoLiopXCkvCisgICAgKGEsIGIpCisKKy9ba10vCisKKy9hYmNkLworICAgIGFiY2QKKworL2EoYmMpZC8KKyAgICBhYmNkCisKKy9hWy1dP2MvCisgICAgYWMKKworL2FiYy9pCisgICAgQUJDCisgICAgWEFCQ1kKKyAgICBBQkFCQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWF4YWJ4YmF4YmJ4CisgICAgWEJDCisgICAgQVhDCisgICAgQUJYCisKKy9hYipjL2kKKyAgICBBQkMKKworL2FiKmJjL2kKKyAgICBBQkMKKyAgICBBQkJDCisKKy9hYio/YmMvaQorICAgIEFCQkJCQworCisvYWJ7MCx9P2JjL2kKKyAgICBBQkJCQkMKKworL2FiKz9iYy9pCisgICAgQUJCQworCisvYWIrYmMvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJDCisgICAgQUJRCisKKy9hYnsxLH1iYy9pCisKKy9hYitiYy9pCisgICAgQUJCQkJDCisKKy9hYnsxLH0/YmMvaQorICAgIEFCQkJCQworCisvYWJ7MSwzfT9iYy9pCisgICAgQUJCQkJDCisKKy9hYnszLDR9P2JjL2kKKyAgICBBQkJCQkMKKworL2FiezQsNX0/YmMvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJRCisgICAgQUJCQkJDCisKKy9hYj8/YmMvaQorICAgIEFCQkMKKyAgICBBQkMKKworL2FiezAsMX0/YmMvaQorICAgIEFCQworCisvYWI/P2JjL2kKKworL2FiPz9jL2kKKyAgICBBQkMKKworL2FiezAsMX0/Yy9pCisgICAgQUJDCisKKy9eYWJjJC9pCisgICAgQUJDCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkJCQkMKKyAgICBBQkNDCisKKy9eYWJjL2kKKyAgICBBQkNDCisKKy9eYWJjJC9pCisKKy9hYmMkL2kKKyAgICBBQUJDCisKKy9eL2kKKyAgICBBQkMKKworLyQvaQorICAgIEFCQworCisvYS5jL2kKKyAgICBBQkMKKyAgICBBWEMKKworL2EuKj9jL2kKKyAgICBBWFlaQworCisvYS4qYy9pCisgICAgQUFCQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVhZWkQKKworL2FbYmNdZC9pCisgICAgQUJECisKKy9hW2ItZF1lL2kKKyAgICBBQ0UKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQworICAgIEFCRAorCisvYVtiLWRdL2kKKyAgICBBQUMKKworL2FbLWJdL2kKKyAgICBBLQorCisvYVtiLV0vaQorICAgIEEtCisKKy9hXS9pCisgICAgQV0KKworL2FbXV1iL2kKKyAgICBBXUIKKworL2FbXmJjXWQvaQorICAgIEFFRAorCisvYVteLWJdYy9pCisgICAgQURDCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkQKKyAgICBBLUMKKworL2FbXl1iXWMvaQorICAgIEFEQworCisvYWJ8Y2QvaQorICAgIEFCQworICAgIEFCQ0QKKworLygpZWYvaQorICAgIERFRgorCisvJGIvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQV1DCisgICAgQgorCisvYVwoYi9pCisgICAgQShCCisKKy9hXCgqYi9pCisgICAgQUIKKyAgICBBKChCCisKKy9hXFxiL2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFcPW5vdGJvbAorCisvKChhKSkvaQorICAgIEFCQworCisvKGEpYihjKS9pCisgICAgQUJDCisKKy9hK2IrYy9pCisgICAgQUFCQkFCQworCisvYXsxLH1iezEsfWMvaQorICAgIEFBQkJBQkMKKworL2EuKz9jL2kKKyAgICBBQkNBQkMKKworL2EuKj9jL2kKKyAgICBBQkNBQkMKKworL2EuezAsNX0/Yy9pCisgICAgQUJDQUJDCisKKy8oYSt8YikqL2kKKyAgICBBQgorCisvKGErfGIpezAsfS9pCisgICAgQUIKKworLyhhK3xiKSsvaQorICAgIEFCCisKKy8oYSt8Yil7MSx9L2kKKyAgICBBQgorCisvKGErfGIpPy9pCisgICAgQUIKKworLyhhK3xiKXswLDF9L2kKKyAgICBBQgorCisvKGErfGIpezAsMX0/L2kKKyAgICBBQgorCisvW15hYl0qL2kKKyAgICBDREUKKworL2FiYy9pCisKKy9hKi9pCisKKy8oW2FiY10pKmQvaQorICAgIEFCQkJDRAorCisvKFthYmNdKSpiY2QvaQorICAgIEFCQ0QKKworL2F8YnxjfGR8ZS9pCisgICAgRQorCisvKGF8YnxjfGR8ZSlmL2kKKyAgICBFRgorCisvYWJjZCplZmcvaQorICAgIEFCQ0RFRkcKKworL2FiKi9pCisgICAgWEFCWUFCQkJaCisgICAgWEFZQUJCQloKKworLyhhYnxjZCllL2kKKyAgICBBQkNERQorCisvW2FiaGdlZmRjXWlqL2kKKyAgICBISUoKKworL14oYWJ8Y2QpZS9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkNERQorCisvKGFiY3wpZWYvaQorICAgIEFCQ0RFRgorCisvKGF8YiljKmQvaQorICAgIEFCQ0QKKworLyhhYnxhYiopYmMvaQorICAgIEFCQworCisvYShbYmNdKiljKi9pCisgICAgQUJDCisKKy9hKFtiY10qKShjKmQpL2kKKyAgICBBQkNECisKKy9hKFtiY10rKShjKmQpL2kKKyAgICBBQkNECisKKy9hKFtiY10qKShjK2QpL2kKKyAgICBBQkNECisKKy9hW2JjZF0qZGNkY2RlL2kKKyAgICBBRENEQ0RFCisKKy9hW2JjZF0rZGNkY2RlL2kKKworLyhhYnxhKWIqYy9pCisgICAgQUJDCisKKy8oKGEpKGIpYykoZCkvaQorICAgIEFCQ0QKKworL1thLXpBLVpfXVthLXpBLVowLTlfXSovaQorICAgIEFMUEhBCisKKy9eYShiYyt8YltlaF0pZ3wuaCQvaQorICAgIEFCSAorCisvKGJjK2QkfGVmKmcufGg/aShqfGspKS9pCisgICAgRUZGR1oKKyAgICBJSgorICAgIFJFRkZHWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQURDRENERQorICAgIEVGRkcKKyAgICBCQ0RECisKKy8oKCgoKCgoKCgoYSkpKSkpKSkpKSkvaQorICAgIEEKKworLygoKCgoKCgoKGEpKSkpKSkpKSkvaQorICAgIEEKKworLyg/Oig/Oig/Oig/Oig/Oig/Oig/Oig/Oig/OihhKSkpKSkpKSkpKS9pCisgICAgQQorCisvKD86KD86KD86KD86KD86KD86KD86KD86KD86KGF8YnxjKSkpKSkpKSkpKS9pCisgICAgQworCisvbXVsdGlwbGUgd29yZHMgb2YgdGV4dC9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQQorICAgIFVILVVICisKKy9tdWx0aXBsZSB3b3Jkcy9pCisgICAgTVVMVElQTEUgV09SRFMsIFlFQUgKKworLyguKiljKC4qKS9pCisgICAgQUJDREUKKworL1woKC4qKSwgKC4qKVwpL2kKKyAgICAoQSwgQikKKworL1trXS9pCisKKy9hYmNkL2kKKyAgICBBQkNECisKKy9hKGJjKWQvaQorICAgIEFCQ0QKKworL2FbLV0/Yy9pCisgICAgQUMKKworL2EoPyFiKS4vCisgICAgYWJhZAorCisvYSg/PWQpLi8KKyAgICBhYmFkCisKKy9hKD89Y3xkKS4vCisgICAgYWJhZAorCisvYSg/OmJ8Y3xkKSguKS8KKyAgICBhY2UKKworL2EoPzpifGN8ZCkqKC4pLworICAgIGFjZQorCisvYSg/OmJ8Y3xkKSs/KC4pLworICAgIGFjZQorICAgIGFjZGJjZGJlCisKKy9hKD86YnxjfGQpKyguKS8KKyAgICBhY2RiY2RiZQorCisvYSg/OmJ8Y3xkKXsyfSguKS8KKyAgICBhY2RiY2RiZQorCisvYSg/OmJ8Y3xkKXs0LDV9KC4pLworICAgIGFjZGJjZGJlCisKKy9hKD86YnxjfGQpezQsNX0/KC4pLworICAgIGFjZGJjZGJlCisKKy8oKGZvbyl8KGJhcikpKi8KKyAgICBmb29iYXIKKworL2EoPzpifGN8ZCl7Niw3fSguKS8KKyAgICBhY2RiY2RiZQorCisvYSg/OmJ8Y3xkKXs2LDd9PyguKS8KKyAgICBhY2RiY2RiZQorCisvYSg/OmJ8Y3xkKXs1LDZ9KC4pLworICAgIGFjZGJjZGJlCisKKy9hKD86YnxjfGQpezUsNn0/KC4pLworICAgIGFjZGJjZGJlCisKKy9hKD86YnxjfGQpezUsN30oLikvCisgICAgYWNkYmNkYmUKKworL2EoPzpifGN8ZCl7NSw3fT8oLikvCisgICAgYWNkYmNkYmUKKworL2EoPzpifChjfGUpezEsMn0/fGQpKz8oLikvCisgICAgYWNlCisKKy9eKC4rKT9CLworICAgIEFCCisKKy9eKFteYS16XSl8KFxeKSQvCisgICAgLgorCisvXls8Pl0mLworICAgIDwmT1VUCisKKy8oPzooZikobykobyl8KGIpKGEpKHIpKSovCisgICAgZm9vYmFyCisKKy8oPzw9YSliLworICAgIGFiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBjYgorICAgIGIKKworLyg/PCFjKWIvCisgICAgYWIKKyAgICBiCisgICAgYgorCisvKD86Li4pKmEvCisgICAgYWJhCisKKy8oPzouLikqP2EvCisgICAgYWJhCisKKy9eKCl7Myw1fS8KKyAgICBhYmMKKworL14oYSspKmF4LworICAgIGFheAorCisvXigoYXxiKSspKmF4LworICAgIGFheAorCisvXigoYXxiYykrKSpheC8KKyAgICBhYXgKKworLyhhfHgpKmFiLworICAgIGNhYgorCisvKGEpKmFiLworICAgIGNhYgorCisvKD86KD9pKWEpYi8KKyAgICBhYgorCisvKCg/aSlhKWIvCisgICAgYWIKKworLyg/Oig/aSlhKWIvCisgICAgQWIKKworLygoP2kpYSliLworICAgIEFiCisKKy8oPzooP2kpYSliLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgY2IKKyAgICBhQgorCisvKCg/aSlhKWIvCisKKy8oP2k6YSliLworICAgIGFiCisKKy8oKD9pOmEpKWIvCisgICAgYWIKKworLyg/aTphKWIvCisgICAgQWIKKworLygoP2k6YSkpYi8KKyAgICBBYgorCisvKD9pOmEpYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFCCisgICAgYUIKKworLygoP2k6YSkpYi8KKworLyg/Oig/LWkpYSliL2kKKyAgICBhYgorCisvKCg/LWkpYSliL2kKKyAgICBhYgorCisvKD86KD8taSlhKWIvaQorICAgIGFCCisKKy8oKD8taSlhKWIvaQorICAgIGFCCisKKy8oPzooPy1pKWEpYi9pCisgICAgYUIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiCisKKy8oKD8taSlhKWIvaQorCisvKD86KD8taSlhKWIvaQorICAgIGFCCisKKy8oKD8taSlhKWIvaQorICAgIGFCCisKKy8oPzooPy1pKWEpYi9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYgorICAgIEFCCisKKy8oKD8taSlhKWIvaQorCisvKD8taTphKWIvaQorICAgIGFiCisKKy8oKD8taTphKSliL2kKKyAgICBhYgorCisvKD8taTphKWIvaQorICAgIGFCCisKKy8oKD8taTphKSliL2kKKyAgICBhQgorCisvKD8taTphKWIvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUIKKyAgICBBYgorCisvKCg/LWk6YSkpYi9pCisKKy8oPy1pOmEpYi9pCisgICAgYUIKKworLygoPy1pOmEpKWIvaQorICAgIGFCCisKKy8oPy1pOmEpYi9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYgorICAgIEFCCisKKy8oKD8taTphKSliL2kKKworLygoPy1pOmEuKSliL2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCCisgICAgYVxuQgorCisvKCg/cy1pOmEuKSliL2kKKyAgICBhXG5CCisKKy8oPzpjfGQpKD86KSg/OmEoPzopKD86YikoPzpiKD86KSkoPzpiKD86KSg/OmIpKSkvCisgICAgY2FiYmJiCisKKy8oPzpjfGQpKD86KSg/OmFhYWFhYWFhKD86KSg/OmJiYmJiYmJiKSg/OmJiYmJiYmJiKD86KSkoPzpiYmJiYmJiYig/OikoPzpiYmJiYmJiYikpKS8KKyAgICBjYWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorCisvZm9vXHcqXGR7NH1iYXovCisgICAgZm9vYmFyMTIzNGJhegorCisveCh+fikqKD86KD86Rik/KT8vCisgICAgeH5+CisKKy9eYSg/I3h4eCl7M31jLworICAgIGFhYWMKKworL15hICg/I3h4eCkgKD8jeXl5KSB7M31jL3gKKyAgICBhYWFjCisKKy8oPzwhW2NkXSliLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQlxuQgorICAgIGRiY2IKKworLyg/PCFbY2RdKVthYl0vCisgICAgZGJhYWNiCisKKy8oPzwhKGN8ZCkpYi8KKworLyg/PCEoY3xkKSlbYWJdLworICAgIGRiYWFjYgorCisvKD88IWNkKVthYl0vCisgICAgY2RhY2NiCisKKy9eKD86YT9iPykqJC8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGRiY2IKKyAgICBhLS0KKworLygoP3MpXmEoLikpKCg/bSleYiQpLworICAgIGFcbmJcbmNcbgorCisvKCg/bSleYiQpLworICAgIGFcbmJcbmNcbgorCisvKD9tKV5iLworICAgIGFcbmJcbgorCisvKD9tKV4oYikvCisgICAgYVxuYlxuCisKKy8oKD9tKV5iKS8KKyAgICBhXG5iXG4KKworL1xuKCg/bSleYikvCisgICAgYVxuYlxuCisKKy8oKD9zKS4pYyg/IS4pLworICAgIGFcbmJcbmNcbgorICAgIGFcbmJcbmNcbgorCisvKCg/cyliLiljKD8hLikvCisgICAgYVxuYlxuY1xuCisgICAgYVxuYlxuY1xuCisKKy9eYi8KKworLygpXmIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXG5iXG5jXG4KKyAgICBhXG5iXG5jXG4KKworLygoP20pXmIpLworICAgIGFcbmJcbmNcbgorCisvKD8oPyFhKWF8YikvCisKKy8oPyg/IWEpYnxhKS8KKyAgICBhCisKKy8oPyg/PWEpYnxhKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKKyAgICBhCisKKy8oPyg/PWEpYXxiKS8KKyAgICBhCisKKy8oXHcrOikrLworICAgIG9uZToKKworLyQoPzw9XihhKSkvCisgICAgYQorCisvKFtcdzpdKzo6KT8oXHcrKSQvCisgICAgYWJjZAorICAgIHh5Ono6OjphYmNkCisKKy9eW15iY2RdKihjKykvCisgICAgYWV4eWNkCisKKy8oYSopYisvCisgICAgY2FhYgorCisvKFtcdzpdKzo6KT8oXHcrKSQvCisgICAgYWJjZAorICAgIHh5Ono6OjphYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkOgorICAgIGFiY2Q6CisKKy9eW15iY2RdKihjKykvCisgICAgYWV4eWNkCisKKy8oPmErKWFiLworCisvKD8+YSspYi8KKyAgICBhYWFiCisKKy8oW1s6XSspLworICAgIGE6W2JdOgorCisvKFtbPV0rKS8KKyAgICBhPVtiXT0KKworLyhbWy5dKykvCisgICAgYS5bYl0uCisKKy8oKD8+YSspYikvCisgICAgYWFhYgorCisvKD8+KGErKSliLworICAgIGFhYWIKKworLygoPz5bXigpXSspfFwoW14oKV0qXCkpKy8KKyAgICAoKGFiYyhhZGUpdWZoKCkoKXgKKworL2FcWi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWIKKyAgICBhXG5iXG4KKworL2JcWi8KKyAgICBhXG5iXG4KKworL2Jcei8KKworL2JcWi8KKyAgICBhXG5iCisKKy9iXHovCisgICAgYVxuYgorICAgIAorLyg/Pi4qKSg/PD0oYWJjZHx3eHl6KSkvCisgICAgYWxwaGFiZXRhYmNkCisgICAgZW5kaW5nd3h5egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYSByYXRoZXIgbG9uZyBzdHJpbmcgdGhhdCBkb2Vzbid0IGVuZCB3aXRoIG9uZSBvZiB0aGVtCisKKy93b3JkICg/Pig/Oig/IW90aGVyd29yZClbYS16QS1aMC05XSsgKXswLDMwfSlvdGhlcndvcmQvCisgICAgd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyayBvdGhlcndvcmQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHdvcmQgY2F0IGRvZyBlbGVwaGFudCBtdXNzZWwgY293IGhvcnNlIGNhbmFyeSBiYWJvb24gc25ha2Ugc2hhcmsKKyAgCisvd29yZCAoPz5bYS16QS1aMC05XSsgKXswLDMwfW90aGVyd29yZC8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHdvcmQgY2F0IGRvZyBlbGVwaGFudCBtdXNzZWwgY293IGhvcnNlIGNhbmFyeSBiYWJvb24gc25ha2Ugc2hhcmsgdGhlIHF1aWNrIGJyb3duIGZveCBhbmQgdGhlIGxhenkgZG9nIGFuZCBzZXZlcmFsIG90aGVyIHdvcmRzIGdldHRpbmcgY2xvc2UgdG8gdGhpcnR5IGJ5IG5vdyBJIGhvcGUKKworLyg/PD1cZHszfSg/ITk5OSkpZm9vLworICAgIDk5OWZvbworICAgIDEyMzk5OWZvbyAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyM2FiY2ZvbworICAgIAorLyg/PD0oPyEuLi45OTkpXGR7M30pZm9vLworICAgIDk5OWZvbworICAgIDEyMzk5OWZvbyAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyM2FiY2ZvbworCisvKD88PVxkezN9KD8hOTk5KS4uLilmb28vCisgICAgMTIzYWJjZm9vCisgICAgMTIzNDU2Zm9vIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzOTk5Zm9vICAKKyAgICAKKy8oPzw9XGR7M30uLi4pKD88ITk5OSlmb28vCisgICAgMTIzYWJjZm9vICAgCisgICAgMTIzNDU2Zm9vIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzOTk5Zm9vICAKKworLygoWikrfEEpKi8KKyAgICBaQUJDREVGRworCisvKFooKXxBKSovCisgICAgWkFCQ0RFRkcKKworLyhaKCgpKXxBKSovCisgICAgWkFCQ0RFRkcKKworLygoPz5aKSt8QSkqLworICAgIFpBQkNERUZHCisKKy8oKD8+KSt8QSkqLworICAgIFpBQkNERUZHCisKKy9hKi9nCisgICAgYWJiYWIKKworL15bXGQtYV0vCisgICAgYWJjZGUKKyAgICAtdGhpbmdzCisgICAgMGRpZ2l0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiY2RlZiAgICAKKyAgICAKKy9bWzpzcGFjZTpdXSsvCisgICAgPiBceDA5XHgwYVx4MGNceDBkXHgwYjwKKyAgICAgCisvW1s6Ymxhbms6XV0rLworICAgID4gXHgwOVx4MGFceDBjXHgwZFx4MGI8CisgICAgIAorL1tcc10rLworICAgID4gXHgwOVx4MGFceDBjXHgwZFx4MGI8CisgICAgIAorL1xzKy8KKyAgICA+IFx4MDlceDBhXHgwY1x4MGRceDBiPAorICAgICAKKy9hC2IveAorICAgIGFiCisKKy8oPyFcQSl4L20KKyAgYVxueGJcbgorCisvKD8hXil4L20KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcbnhiXG4KKworL2FiY1xRYWJjXEVhYmMvCisgICAgYWJjYWJjYWJjCisgICAgCisvYWJjXFEoKit8XEVhYmMvCisgICAgYWJjKCorfGFiYyAKKworLyAgIGFiY1xRIGFiY1xFYWJjL3gKKyAgICBhYmMgYWJjYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNhYmNhYmMgIAorICAgIAorL2FiYyNjb21tZW50CisgICAgXFEjbm90IGNvbW1lbnQKKyAgICBsaXRlcmFsXEUveAorICAgIGFiYyNub3QgY29tbWVudFxuICAgIGxpdGVyYWwgICAgIAorCisvYWJjI2NvbW1lbnQKKyAgICBcUSNub3QgY29tbWVudAorICAgIGxpdGVyYWwveAorICAgIGFiYyNub3QgY29tbWVudFxuICAgIGxpdGVyYWwgICAgIAorCisvYWJjI2NvbW1lbnQKKyAgICBcUSNub3QgY29tbWVudAorICAgIGxpdGVyYWxcRSAjbW9yZSBjb21tZW50CisgICAgL3gKKyAgICBhYmMjbm90IGNvbW1lbnRcbiAgICBsaXRlcmFsICAgICAKKworL2FiYyNjb21tZW50CisgICAgXFEjbm90IGNvbW1lbnQKKyAgICBsaXRlcmFsXEUgI21vcmUgY29tbWVudC94CisgICAgYWJjI25vdCBjb21tZW50XG4gICAgbGl0ZXJhbCAgICAgCisKKy9cUWFiY1wkeHl6XEUvCisgICAgYWJjXFxcJHh5egorCisvXFFhYmNcRVwkXFF4eXpcRS8KKyAgICBhYmNcJHh5egorCisvXEdhYmMvCisgICAgYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXphYmMgIAorCisvXEdhYmMuL2cKKyAgICBhYmMxYWJjMnh5emFiYzMKKworL2FiYy4vZworICAgIGFiYzFhYmMyeHl6YWJjMyAKKworL2EoP3g6IGIgYyApZC8KKyAgICBYYWJjZFkKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBYYSBiIGMgZCBZIAorCisvKCg/eCl4IHkgeiB8IGEgYiBjKS8KKyAgICBYYWJjWQorICAgIEF4eXpCIAorCisvKD9pKUFCKD8taSlDLworICAgIFhhYkNZCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYYWJjWSAgCisKKy8oKD9pKUFCKD8taSlDfEQpRS8KKyAgICBhYkNFCisgICAgREUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY0UKKyAgICBhYkNlICAKKyAgICBkRQorICAgIERlICAgIAorCisvW3pcUWEtZF1cRV0vCisgICAgegorICAgIGEKKyAgICAtCisgICAgZAorICAgIF0gCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiICAgICAKKworLyhhKykqYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEgCisgICAgCisvKD9pKXJlZyg/OnVsKD86W2HkXXxhZSlyfGV4KS8KKyAgICBSRUd1bGFyCisgICAgcmVndWxhZXIKKyAgICBSZWdleCAgCisgICAgcmVndWzkciAKKworL8Xm5eRb4C3/wC3fXSsvCisgICAgxebl5OAKKyAgICDF5uXk/worICAgIMXm5eTACisgICAgxebl5N8KKworLyg/PD1aKVguLworICAgIFx4ODRYQVpYQgorCisvXig/KDIpYXwoMSkoMikpKyQvCisgICAgMTIzYQorCisvKD88PWF8YmJiYiljLworICAgIGFjCisgICAgYmJiYmMKKworL2xpbmVcbmJyZWFrLworICAgIHRoaXMgaXMgYSBsaW5lXG5icmVhaworICAgIGxpbmUgb25lXG50aGlzIGlzIGEgbGluZVxuYnJlYWsgaW4gdGhlIHNlY29uZCBsaW5lIAorCisvbGluZVxuYnJlYWsvZmlyc3RsaW5lCisgICAgdGhpcyBpcyBhIGxpbmVcbmJyZWFrCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgbGluZSBvbmVcbnRoaXMgaXMgYSBsaW5lXG5icmVhayBpbiB0aGUgc2Vjb25kIGxpbmUgCisKKy9saW5lXG5icmVhay9tLGZpcnN0bGluZQorICAgIHRoaXMgaXMgYSBsaW5lXG5icmVhaworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGxpbmUgb25lXG50aGlzIGlzIGEgbGluZVxuYnJlYWsgaW4gdGhlIHNlY29uZCBsaW5lIAorCisvMTIzNC8KKyAgICAxMjNcPXBzCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYTRcPXBzLGRmYV9yZXN0YXJ0CisKKy8xMjM0LworICAgIDEyM1w9cHMKKyAgICA0XD1wcyxkZmFfcmVzdGFydAorCisvXi9nbQorICAgIGFcbmJcbmNcbgorICAgIFwgCisgICAgCisvKD88PUNcbileL2dtCisgICAgQVxuQ1xuQ1xuIAorCisvKD9zKUE/Qi8KKyAgICBBQgorICAgIGFCICAKKworLyg/cylBKkIvCisgICAgQUIKKyAgICBhQiAgCisKKy8oP20pQT9CLworICAgIEFCCisgICAgYUIgIAorCisvKD9tKUEqQi8KKyAgICBBQgorICAgIGFCICAKKworL0NvbnRlbnQtVHlwZVx4M0FbXlxyXG5dezYsfS8KKyAgICBDb250ZW50LVR5cGU6eHh4eHh5eXkgCisKKy9Db250ZW50LVR5cGVceDNBW15cclxuXXs2LH16LworICAgIENvbnRlbnQtVHlwZTp4eHh4eHl5eXoKKworL0NvbnRlbnQtVHlwZVx4M0FbXmFdezYsfS8KKyAgICBDb250ZW50LVR5cGU6eHh4eXl5IAorCisvQ29udGVudC1UeXBlXHgzQVteYV17Nix9ei8KKyAgICBDb250ZW50LVR5cGU6eHh4eXl5egorCisvXmFiYy9JbSxuZXdsaW5lPWxmCisgICAgeHl6XG5hYmMKKyAgICB4eXpcclxuYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXpccmFiYworICAgIHh5emFiY1xyCisgICAgeHl6YWJjXHJwcXIKKyAgICB4eXphYmNcclxuCisgICAgeHl6YWJjXHJcbnBxcgorCisvXmFiYy9JbSxuZXdsaW5lPWNybGYKKyAgICB4eXpcclxuYWJjbGY+CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXpcbmFiY2xmCisgICAgeHl6XHJhYmNsZgorICAgIAorL15hYmMvSW0sbmV3bGluZT1jcgorICAgIHh5elxyYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXpcbmFiYworICAgIHh5elxyXG5hYmMKKworLy4qL0ksbmV3bGluZT1sZgorICAgIGFiY1xuZGVmCisgICAgYWJjXHJkZWYKKyAgICBhYmNcclxuZGVmCisKKy8uKi9JLG5ld2xpbmU9Y3IKKyAgICBhYmNcbmRlZgorICAgIGFiY1xyZGVmCisgICAgYWJjXHJcbmRlZgorCisvLiovSSxuZXdsaW5lPWNybGYKKyAgICBhYmNcbmRlZgorICAgIGFiY1xyZGVmCisgICAgYWJjXHJcbmRlZgorCisvXHcrKC4pKC4pP2RlZi9JcworICAgIGFiY1xuZGVmCisgICAgYWJjXHJkZWYKKyAgICBhYmNcclxuZGVmCisKKy9cdysoLikoLik/ZGVmL3MKKyAgICBhYmNcbmRlZgorICAgIGFiY1xyZGVmCisgICAgYWJjXHJcbmRlZgorCisvXlx3Kz0uKihcXFxuLiopKi8KKyAgICBhYmM9eHl6XFxcbnBxcgorCisvXihhKCkqKSovCisgICAgYWFhYQorCisvXig/OmEoPzooPzopKSopKi8KKyAgICBhYWFhCisKKy9eKGEoKSspKy8KKyAgICBhYWFhCisKKy9eKD86YSg/Oig/OikpKykrLworICAgIGFhYWEKKworLyhhfCkqXGQvCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTQKK1w9IEV4cGVjdCBubyBtYXRjaAorICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKworLyg/PmF8KSpcZC8KKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorCisvKD86YXwpKlxkLworICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisKKy9eYS5iL25ld2xpbmU9bGYKKyAgICBhXHJiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXG5iCisKKy9eYS5iL25ld2xpbmU9Y3IKKyAgICBhXG5iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHJiCisKKy9eYS5iL25ld2xpbmU9YW55Y3JsZgorICAgIGFceDg1YgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxyYgorCisvXmEuYi9uZXdsaW5lPWFueQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxuYgorICAgIGFccmIKKyAgICBhXHg4NWIKKworL15hYmMuL2dteCxuZXdsaW5lPWFueQorICAgIGFiYzEgXHgwYWFiYzIgXHgwYmFiYzN4eCBceDBjYWJjNCBceDBkYWJjNXh4IFx4MGRceDBhYWJjNiBceDg1YWJjNyBKVU5LCisKKy9hYmMuJC9nbXgsbmV3bGluZT1hbnkKKyAgICBhYmMxXHgwYSBhYmMyXHgwYiBhYmMzXHgwYyBhYmM0XHgwZCBhYmM1XHgwZFx4MGEgYWJjNlx4ODUgYWJjOQorCisvXmFcUmIvYnNyPXVuaWNvZGUKKyAgICBhXG5iCisgICAgYVxyYgorICAgIGFcclxuYgorICAgIGFceDBiYgorICAgIGFceDBjYgorICAgIGFceDg1YiAgIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxuXHJiICAgIAorCisvXmFcUipiL2Jzcj11bmljb2RlCisgICAgYWIKKyAgICBhXG5iCisgICAgYVxyYgorICAgIGFcclxuYgorICAgIGFceDBiYgorICAgIGFceDBjYgorICAgIGFceDg1YiAgIAorICAgIGFcblxyYiAgICAKKyAgICBhXG5cclx4ODVceDBjYiAKKworL15hXFIrYi9ic3I9dW5pY29kZQorICAgIGFcbmIKKyAgICBhXHJiCisgICAgYVxyXG5iCisgICAgYVx4MGJiCisgICAgYVx4MGNiCisgICAgYVx4ODViICAgCisgICAgYVxuXHJiICAgIAorICAgIGFcblxyXHg4NVx4MGNiIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIgIAorICAgIAorL15hXFJ7MSwzfWIvYnNyPXVuaWNvZGUKKyAgICBhXG5iCisgICAgYVxuXHJiCisgICAgYVxuXHJceDg1YgorICAgIGFcclxuXHJcbmIgCisgICAgYVxyXG5cclxuXHJcbmIgCisgICAgYVxuXHJcblxyYgorICAgIGFcblxuXHJcbmIgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXG5cblxuXHJiCisgICAgYVxyCisKKy8uK2Zvby8KKyAgICBhZm9vCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgXHJcbmZvbyAKKyAgICBcbmZvbyAKKworLy4rZm9vL25ld2xpbmU9Y3JsZgorICAgIGFmb28KKyAgICBcbmZvbyAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBcclxuZm9vIAorCisvLitmb28vbmV3bGluZT1hbnkKKyAgICBhZm9vCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgXG5mb28gCisgICAgXHJcbmZvbyAKKworLy4rZm9vL3MKKyAgICBhZm9vCisgICAgXHJcbmZvbyAKKyAgICBcbmZvbyAKKworL14kL2dtLG5ld2xpbmU9YW55CisgICAgYWJjXHJccnh5egorICAgIGFiY1xuXHJ4eXogIAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiY1xyXG54eXoKKworL15YL20KKyAgICBYQUJDCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgWEFCQ1w9bm90Ym9sCisKKy8oP20pXiQvZyxuZXdsaW5lPWFueSxhZnRlcnRleHQKKyAgICBhYmNcclxuXHJcbgorCisvKD9tKV4kfF5cclxuL2csbmV3bGluZT1hbnksYWZ0ZXJ0ZXh0CisgICAgYWJjXHJcblxyXG4KKyAgICAKKy8oP20pJC9nLG5ld2xpbmU9YW55LGFmdGVydGV4dAorICAgIGFiY1xyXG5cclxuCisKKy8oP3woYWJjKXwoeHl6KSkvCisgICA+YWJjPAorICAgPnh5ejwgCisKKy8oeCkoP3woYWJjKXwoeHl6KSkoeCkvCisgICAgeGFiY3gKKyAgICB4eHl6eCAKKworLyh4KSg/fChhYmMpKHBxcil8KHh5eikpKHgpLworICAgIHhhYmNwcXJ4CisgICAgeHh5enggCisKKy8oP3woYWJjKXwoeHl6KSkoPzEpLworICAgIGFiY2FiYworICAgIHh5emFiYyAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICB4eXp4eXogCisgCisvXEhcaFxWXHYvCisgICAgWCBYXHgwYQorICAgIFhceDA5WFx4MGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4YTAgWFx4MGEgICAKKyAgICAKKy9cSCpcaCtcVj9cdnszLDR9LworICAgIFx4MDlceDIwXHhhMFhceDBhXHgwYlx4MGNceDBkXHgwYQorICAgIFx4MDlceDIwXHhhMFx4MGFceDBiXHgwY1x4MGRceDBhCisgICAgXHgwOVx4MjBceGEwXHgwYVx4MGJceDBjCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgXHgwOVx4MjBceGEwXHgwYVx4MGIKKyAgICAgCisvXEh7Myw0fS8KKyAgICBYWSAgQUJDREUKKyAgICBYWSAgUFFSIFNUIAorICAgIAorLy5caHszLDR9Li8KKyAgICBYWSAgQUIgICAgUFFSUworCisvXGgqWFxoP1xIK1lcSD9aLworICAgID5YTk5OWVoKKyAgICA+ICBYIE5ZUVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgID5YWVogICAKKyAgICA+ICBYIE5ZIFoKKworL1x2Klhcdj9ZXHYrWlxWKlx4MGFcVitceDBiXFZ7MiwzfVx4MGMvCisgICAgPlhZXHgwYVpceDBhQVx4MGJOTlx4MGMKKyAgICA+XHgwYVx4MGRYXHgwYVlceDBhXHgwYlpaWlx4MGFBQUFceDBiTk5OXHgwYworCisvLitBL25ld2xpbmU9Y3JsZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHJcbkEKKyAgICAKKy9cbkEvbmV3bGluZT1jcmxmCisgICAgXHJcbkEgCisKKy9bXHJcbl1BL25ld2xpbmU9Y3JsZgorICAgIFxyXG5BIAorCisvKFxyfFxuKUEvbmV3bGluZT1jcmxmCisgICAgXHJcbkEgCisKKy9hXFJiL0ksYnNyPWFueWNybGYKKyAgICBhXHJiCisgICAgYVxuYgorICAgIGFcclxuYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ODViCisgICAgYVx4MGJiICAgICAKKworL2FcUmIvSSxic3I9dW5pY29kZQorICAgIGFccmIKKyAgICBhXG5iCisgICAgYVxyXG5iCisgICAgYVx4ODViCisgICAgYVx4MGJiICAgICAKKyAgICAKKy9hXFI/Yi9JLGJzcj1hbnljcmxmCisgICAgYVxyYgorICAgIGFcbmIKKyAgICBhXHJcbmIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceDg1YgorICAgIGFceDBiYiAgICAgCisKKy9hXFI/Yi9JLGJzcj11bmljb2RlCisgICAgYVxyYgorICAgIGFcbmIKKyAgICBhXHJcbmIKKyAgICBhXHg4NWIKKyAgICBhXHgwYmIgICAgIAorICAgIAorL2FcUnsyLDR9Yi9JLGJzcj1hbnljcmxmCisgICAgYVxyXG5cbmIKKyAgICBhXG5cclxyYgorICAgIGFcclxuXHJcblxyXG5cclxuYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4MGJceDBiYiAgICAgCisgICAgYVx4ODVceDg1YgorCisvYVxSezIsNH1iL0ksYnNyPXVuaWNvZGUKKyAgICBhXHJccmIKKyAgICBhXG5cblxuYgorICAgIGFcclxuXG5cclxyYgorICAgIGFceDg1XHg4NWIKKyAgICBhXHgwYlx4MGJiICAgICAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhXHJcclxyXHJccmIgCisgICAgCisvYSg/ISl8XHdiYy8KKyAgICBhYmMgCisKKy9hW11iL2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiCisKKy9hW10rYi9hbHRfYnN1eCxhbGxvd19lbXB0eV9jbGFzcyxtYXRjaF91bnNldF9iYWNrcmVmLGR1cG5hbWVzCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYiAKKworL2FbXSorYi9hbHRfYnN1eCxhbGxvd19lbXB0eV9jbGFzcyxtYXRjaF91bnNldF9iYWNrcmVmLGR1cG5hbWVzCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYiAKKworL2FbXl1iL2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBhWGIKKyAgICBhXG5iIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIgIAorICAgIAorL2FbXl0rYi9hbHRfYnN1eCxhbGxvd19lbXB0eV9jbGFzcyxtYXRjaF91bnNldF9iYWNrcmVmLGR1cG5hbWVzCisgICAgYVhiCisgICAgYVxuWFxuWGIgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYiAgCisKKy9YJC9kb2xsYXJfZW5kb25seQorICAgIFgKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBYXG4gCisKKy9YJC8KKyAgICBYCisgICAgWFxuIAorCisveHl6L2F1dG9fY2FsbG91dAorICB4eXogCisgIGFiY3h5eiAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgYWJjCisgIGFiY3h5cHFyICAKKworL3h5ei9hdXRvX2NhbGxvdXQsbm9fc3RhcnRfb3B0aW1pemUKKyAgYWJjeHl6IAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICBhYmMKKyAgYWJjeHlwcXIgIAorCisvKCpOT19TVEFSVF9PUFQpeHl6L2F1dG9fY2FsbG91dAorICBhYmN4eXogCisgIAorLyg/QylhYi8KKyAgYWIKKyAgYWJcPWNhbGxvdXRfbm9uZQorICAKKy9hYi9hdXRvX2NhbGxvdXQKKyAgYWIKKyAgYWJcPWNhbGxvdXRfbm9uZQorCisvXiIoKD8oPz1bYV0pW14iXSl8YikqIiQvYXV0b19jYWxsb3V0CisgICAgImFiIgorICAgICJhYiJcPWNhbGxvdXRfbm9uZQorCisvXGQrWHw5K1kvCisgICAgKysrKzEyMzk5OVw9cHMKKyAgICArKysrMTIzOTk5WVw9cHMKKworL1ooKkYpLworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFpcPXBzCisgICAgWkFcPXBzCisgICAgCisvWig/ISkvCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgWlw9cHMKKyAgICBaQVw9cHMKKworL2RvZyhzYm9keSk/LworICAgIGRvZ3NcPXBzCisgICAgZG9nc1w9cGgKKyAgICAKKy9kb2coc2JvZHkpPz8vCisgICAgZG9nc1w9cHMKKyAgICBkb2dzXD1waAorCisvZG9nfGRvZ3Nib2R5LworICAgIGRvZ3NcPXBzCisgICAgZG9nc1w9cGgKKyAKKy9kb2dzYm9keXxkb2cvCisgICAgZG9nc1w9cHMKKyAgICBkb2dzXD1waAorCisvWigqRilRfFpYWS8KKyAgICBaXD1wcworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFpBXD1wcworICAgIFhcPXBzCisKKy9cYnRoZSBjYXRcYi8KKyAgICB0aGUgY2F0XD1wcworICAgIHRoZSBjYXRcPXBoCisKKy9kb2coc2JvZHkpPy8KKyAgICBkb2dzXD1wcworICAgIGJvZHlcPWRmYV9yZXN0YXJ0CisKKy9kb2coc2JvZHkpPy8KKyAgICBkb2dzXD1waAorICAgIGJvZHlcPWRmYV9yZXN0YXJ0CisKKy9hYmMvCisgICBhYmNcPXBzCisgICBhYmNcPXBoCisKKy9hYmNcSzEyMy8KKyAgICB4eXphYmMxMjNwcXIKKyAgICAKKy8oPzw9YWJjKTEyMy8KKyAgICB4eXphYmMxMjNwcXIgCisgICAgeHl6YWJjMTJcPXBzCisgICAgeHl6YWJjMTJcPXBoCisKKy9cYmFiY1xiLworICAgICsrK2FiYysrKworICAgICsrK2FiXD1wcworICAgICsrK2FiXD1waAorCisvKD89QykvZyxhZnRlcnRleHQKKyAgICBBQkNERUNCQQorCisvKGFiY3xkZWZ8eHl6KS9JCisgICAgdGVyaGprO2FiY2RhYWRzZmUKKyAgICB0aGUgcXVpY2sgeHl6IGJyb3duIGZveCAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHRoZWprO2FkbGZqIGFlbmpsO2ZkYSBhc2RmYXNkIGVoajtranh5YXNpdXBkCisKKy8oYWJjfGRlZnx4eXopL0ksbm9fc3RhcnRfb3B0aW1pemUKKyAgICB0ZXJoams7YWJjZGFhZHNmZQorICAgIHRoZSBxdWljayB4eXogYnJvd24gZm94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB0aGVqazthZGxmaiBhZW5qbDtmZGEgYXNkZmFzZCBlaGo7a2p4eWFzaXVwZAorCisvYWJjZCovYWZ0ZXJ0ZXh0CisgICAgeHh4eGFiY2RcPXBzCisgICAgeHh4eGFiY2RcPXBoCisgICAgZGRkeHh4XD1kZmFfcmVzdGFydAorICAgIHh4eHhhYmNkXD1waAorICAgIHh4eFw9ZGZhX3Jlc3RhcnQKKworL2FiY2QqL2kKKyAgICB4eHh4YWJjZFw9cHMKKyAgICB4eHh4YWJjZFw9cGgKKyAgICBYWFhYQUJDRFw9cHMKKyAgICBYWFhYQUJDRFw9cGgKKworL2FiY1xkKi8KKyAgICB4eHh4YWJjMVw9cHMKKyAgICB4eHh4YWJjMVw9cGgKKworL2FiY1tkZV0qLworICAgIHh4eHhhYmNkZVw9cHMKKyAgICB4eHh4YWJjZGVcPXBoCisKKy8oPzooPzEpfEIpKEEoKkYpfEMpLworICAgIEFCQ0QKKyAgICBDQ0QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIENBRCAgIAorCisvXig/Oig/MSl8QikoQSgqRil8QykvCisgICAgQ0NECisgICAgQkNEIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJDRAorICAgIENBRAorICAgIEJBRCAgICAKKworL14oPyFhKCpTS0lQKWIpLworICAgIGFjCisgICAgCisvXig/PWEoKlNLSVApYnxhYykvCisgICAgYWMKKyAgICAKKy9eKD89YSgqVEhFTilifGFjKS8KKyAgICBhYworICAgIAorL14oPz1hKCpQUlVORSliKS8KKyAgICBhYiAgCisKKy9eKD8oPyFhKCpTS0lQKWIpKS8KKyAgICBhYworCisvKD88PWFiYylkZWYvCisgICAgYWJjXD1waAorCisvYWJjJC8KKyAgICBhYmMKKyAgICBhYmNcPXBzCisgICAgYWJjXD1waAorCisvYWJjJC9tCisgICAgYWJjCisgICAgYWJjXG4KKyAgICBhYmNcPXBoCisgICAgYWJjXG5cPXBoCisgICAgYWJjXD1wcworICAgIGFiY1xuXD1wcworCisvYWJjXHovCisgICAgYWJjCisgICAgYWJjXD1wcworICAgIGFiY1w9cGgKKworL2FiY1xaLworICAgIGFiYworICAgIGFiY1w9cHMKKyAgICBhYmNcPXBoCisKKy9hYmNcYi8KKyAgICBhYmMKKyAgICBhYmNcPXBzCisgICAgYWJjXD1waAorCisvYWJjXEIvCisgICAgYWJjXD1wcworICAgIGFiY1w9cGgKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYmMKKworLy4rLworICAgIGFiY1w9b2Zmc2V0PTAKKyAgICBhYmNcPW9mZnNldD0xCisgICAgYWJjXD1vZmZzZXQ9MgorXD0gQmFkIG9mZnNldHMKKyAgICBhYmNcPW9mZnNldD00CisgICAgYWJjXD1vZmZzZXQ9LTQgCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWJjXD1vZmZzZXQ9MworCisvXig/OmEpKytcdy8KKyAgICAgYWFhYWIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICAgYWFhYSAKKyAgICAgYmJiIAorCisvXig/OmFhfCg/OmEpKytcdykvCisgICAgIGFhYWFiCisgICAgIGFhYWEgCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgIGJiYiAKKworL14oPzphKSorXHcvCisgICAgIGFhYWFiCisgICAgIGJiYiAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICAgYWFhYSAKKworL14oYSkrK1x3LworICAgICBhYWFhYgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgICBhYWFhIAorICAgICBiYmIgCisKKy9eKGF8KSsrXHcvCisgICAgIGFhYWFiCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgIGFhYWEgCisgICAgIGJiYiAKKworLyg/PWFiYyl7M31hYmMvYWZ0ZXJ0ZXh0CisgICAgYWJjYWJjYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXogIAorICAgIAorLyg/PWFiYykrYWJjL2FmdGVydGV4dAorICAgIGFiY2FiY2FiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6ICAKKyAgICAKKy8oPz1hYmMpKythYmMvYWZ0ZXJ0ZXh0CisgICAgYWJjYWJjYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXogIAorICAgIAorLyg/PWFiYyl7MH14eXovCisgICAgeHl6IAorCisvKD89YWJjKXsxfXh5ei8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5eiAKKyAgICAKKy8oPz0oYSkpPy4vCisgICAgYWIKKyAgICBiYworICAgICAgCisvKD89KGEpKT8/Li8KKyAgICBhYgorICAgIGJjCisKKy9eKD89KGEpKXswfWIoPzEpLworICAgIGJhY2tnYW1tb24KKworL14oPz0oPzEpKT9bYXpdKFthYmNdKWQvCisgICAgYWJkIAorICAgIHpjZHh4IAorCisvXig/IWEpezB9XHcrLworICAgIGFhYWFhCisKKy8oPzw9KGFiYykpP3h5ei8KKyAgICBhYmN4eXoKKyAgICBwcXJ4eXogCisKKy8oKD8yKSkoKD8xKSkvCisgICAgYWJjCisKKy8oPyhSKWErfCg/UiliKS8KKyAgICBhYWFhYmNkZQorCisvKD8oUilhK3woKD9SKSliKS8KKyAgICBhYWFhYmNkZQorCisvKCg/KFIpYSt8KD8xKWIpKS8KKyAgICBhYWFhYmNkZQorCisvKCg/KFIyKWErfCg/MSliKSkvCisgICAgYWFhYWJjZGUKKworLyg/KFIpYSooPzEpfCgoP1IpKWIpLworICAgIGFhYWFiY2RlCisKKy8oYSspL25vX2F1dG9fcG9zc2VzcworICAgIGFhYWFcPW92ZWN0b3I9MworICAgIGFhYWFcPW92ZWN0b3I9NAorCisvXlxSLworICAgIFxyXD1wcworICAgIFxyXD1waAorICAgIAorL15cUnsyLDN9eC8KKyAgICBcclw9cHMKKyAgICBcclw9cGgKKyAgICBcclxyXD1wcworICAgIFxyXHJcPXBoCisgICAgXHJcclxyXD1wcworICAgIFxyXHJcclw9cGgKKyAgICBcclxyeAorICAgIFxyXHJccnggICAgCisKKy9eXFJ7MiwzfT94LworICAgIFxyXD1wcworICAgIFxyXD1waAorICAgIFxyXHJcPXBzCisgICAgXHJcclw9cGgKKyAgICBcclxyXHJcPXBzCisgICAgXHJcclxyXD1waAorICAgIFxyXHJ4CisgICAgXHJcclxyeCAgICAKKyAgICAKKy9eXFI/eC8KKyAgICBcclw9cHMKKyAgICBcclw9cGgKKyAgICB4CisgICAgXHJ4ICAKKworL15cUit4LworICAgIFxyXD1wcworICAgIFxyXD1waAorICAgIFxyXG5cPXBzCisgICAgXHJcblw9cGgKKyAgICBccnggIAorCisvXmEkL25ld2xpbmU9Y3JsZgorICAgIGFcclw9cHMKKyAgICBhXHJcPXBoCisKKy9eYSQvbSxuZXdsaW5lPWNybGYKKyAgICBhXHJcPXBzCisgICAgYVxyXD1waAorCisvXihhJHxhXHIpL25ld2xpbmU9Y3JsZgorICAgIGFcclw9cHMKKyAgICBhXHJcPXBoCisKKy9eKGEkfGFccikvbSxuZXdsaW5lPWNybGYKKyAgICBhXHJcPXBzCisgICAgYVxyXD1waAorCisvLi9uZXdsaW5lPWNybGYKKyAgICBcclw9cHMKKyAgICBcclw9cGgKKyAgCisvLnsyLDN9L25ld2xpbmU9Y3JsZgorICAgIFxyXD1wcworICAgIFxyXD1waAorICAgIFxyXHJcPXBzCisgICAgXHJcclw9cGgKKyAgICBcclxyXHJcPXBzCisgICAgXHJcclxyXD1waAorCisvLnsyLDN9Py9uZXdsaW5lPWNybGYKKyAgICBcclw9cHMKKyAgICBcclw9cGgKKyAgICBcclxyXD1wcworICAgIFxyXHJcPXBoCisgICAgXHJcclxyXD1wcworICAgIFxyXHJcclw9cGgKKworIyBUZXN0IHNpbXBsZSB2YWxpZGl0eSBjaGVjayBmb3IgcmVzdGFydHMgCisKKy9hYmNkZWYvCisgICBhYmNcPWRmYV9yZXN0YXJ0CisKKy88SCgoPyg/ITxIfEY+KSguKXwoP1IpKSsrKSpGPi8KKyAgICB0ZXh0IDxIIG1vcmUgdGV4dCA8SCB0ZXh0aW5nIG1vcmUgIGhleEEwLSJceEEwIiAgICBoZXggYWJvdmUgN0YtIlx4QkMiIEY+IHRleHQgeHh4eHggPEggdGV4dCBGPiB0ZXh0IEY+IHRleHQyIDxIIHRleHQgc2FtcGxlIEY+IG1vcmUgdGV4dC4KKworL14oPz4uezR9KWFiY3xeXHdcdy54YWJjZC8KKyAgICB4eHh4YWJjZAorICAgIHh4XHhhMHhhYmNkIAorCisvXiguezR9KXsyfSthYmN8Xlx3XHcueFx3XHdcd1x3YWJjZC8KKyAgICB4eHh4eHh4eGFiY2QKKyAgICB4eFx4YTB4eHh4eGFiY2QgCisKKy9hYmNkLworICAgIGFiY2RcPW92ZWN0b3I9MAorCisjIFRoZXNlIHRlc3RzIHNob3cgdXAgYXV0by1wb3NzZXNzaWZpY2F0aW9uIAorCisvW2FiXSovCisgICAgYWFhYQorICAgIAorL1thYl0qPy8KKyAgICBhYWFhCisgICAgCisvW2FiXT8vCisgICAgYWFhYQorICAgIAorL1thYl0/Py8KKyAgICBhYWFhCisgICAgCisvW2FiXSsvCisgICAgYWFhYQorICAgIAorL1thYl0rPy8KKyAgICBhYWFhCisgICAgCisvW2FiXXsyLDN9LworICAgIGFhYWEKKyAgICAKKy9bYWJdezIsM30/LworICAgIGFhYWEKKyAgICAKKy9bYWJdezIsfS8KKyAgICBhYWFhICAgIAorCisvW2FiXXsyLH0/LworICAgIGFhYWEgICAgCisKKydcQSg/OlteXCJdKyt8XCIoPzpbXlwiXSorfFwiXCIpKitcIikrKycKKyAgICBOT04gUVVPVEVEIFwiUVVPVFwiXCJFRFwiIEFGVEVSIFwiTk9UIE1BVENIRUQKKworJ1xBKD86W15cIl0rK3xcIig/OlteXCJdKyt8XCJcIikqK1wiKSsrJworICAgIE5PTiBRVU9URUQgXCJRVU9UXCJcIkVEXCIgQUZURVIgXCJOT1QgTUFUQ0hFRAorCisvYWJjKD89eHl6KS9hbGx1c2VkdGV4dAorICAgIGFiY3h5enBxcgorICAgIGFiY3h5enBxclw9YWZ0ZXJ0ZXh0CisgICAgCisvKD88PXBxcilhYmMoPz14eXopL2FsbHVzZWR0ZXh0CisgICAgeHl6cHFyYWJjeHl6cHFyCisgICAgeHl6cHFyYWJjeHl6cHFyXD1hZnRlcnRleHQKKyAgICAKKy9hXGIvCisgICAgYS5cPWFsbHVzZWR0ZXh0CisgICAgYVw9YWxsdXNlZHRleHQgIAorCisvYWJjKD89YWJjZGUpKD89YWIpL2FsbHVzZWR0ZXh0CisgICAgYWJjYWJjZGVmZworCisvYSo/Yio/LworICAgIGFiCisKKy8oKk5PVEVNUFRZKWEqP2IqPy8KKyAgICBhYgorICAgIGJhCisgICAgY2IgIAorCisvKCpOT1RFTVBUWV9BVFNUQVJUKWEqP2IqPy9hZnRlcnRleHQKKyAgICBhYgorICAgIGNkYWIgCisKKy8oYSkoYil8KGMpLworICAgIFhjWFw9b3ZlY3Rvcj0yLGdldD0xLGdldD0yLGdldD0zLGdldD00LGdldGFsbAorCisvKD88QT5hYSkvCisgICAgYWFcPWdldD1BCisgICAgYWFcPWNvcHk9QSAKKworL2ErL25vX2F1dG9fcG9zc2VzcworICAgIGFcPW92ZWN0b3I9MixnZXQ9MSxnZXQ9MixnZXRhbGwKKyAgICBhYWFcPW92ZWN0b3I9MixnZXQ9MSxnZXQ9MixnZXRhbGwKKworL2EoYiljKGQpLworICAgIGFiY1w9cGgsY29weT0wLGNvcHk9MSxnZXRhbGwKKworL2FiKD9DIiBhbnkgdGV4dCB3aXRoIHNwYWNlcyAiKWNkZS9CCisgICAgYWJjZGUKKyAgICAxMmFiY2RlCisKKy9eYShiKWMoP0MxKWRlZi8KKyAgICAgIGFiY2RlZgorCisvXmEoYiljKD9DIkFCIilkZWYvCisgICAgICBhYmNkZWYKKworL15hKGIpYyg/QzEpZGVmLworICAgICAgYWJjZGVmXD1jYWxsb3V0X2NhcHR1cmUKKworL15hKGIpYyg/Q3tBQn0pZGVmL0IKKyAgICAgIGFiY2RlZlw9Y2FsbG91dF9jYXB0dXJlCisKKy9eKD8oP0MyNSkoPz1hYmMpYWJjZHx4eXopL0IKKyAgICBhYmNkZWZnCisgICAgeHl6MTIzIAorCisvXig/KD9DJGFiYyQpKD89YWJjKWFiY2R8eHl6KS9CCisgICAgYWJjZGVmZworICAgIHh5ejEyMyAKKworL15hYig/QydmaXJzdCcpY2QoP0Mic2Vjb25kIillZi8KKyAgICBhYmNkZWZnCisKKy8oPzphKD9DYGNvZGVgKSl7M31YLworICAgIGFhYVhZCisKKyMgQmluYXJ5IHplcm8gaW4gY2FsbG91dCBzdHJpbmcKKyMgIGEgICggID8gIEMgICcgIHggICAgIHogICcgICkgIGIKKy8gNjEgMjggM2YgNDMgMjcgNzggMDAgN2EgMjcgMjkgNjIvaGV4CisgICAgYWJjZGVmZ2gKKworLyg/KD8hKWF8YikvCisgICAgYmJiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWEgCisKKy9eL2dtCisgICAgXG5cblxuCisKKy9eL2dtLGFsdF9jaXJjdW1mbGV4CisgICAgXG5cblxuCisKKy9hYmMvdXNlX29mZnNldF9saW1pdAorICAgIDEyMzRhYmNkZVw9b2Zmc2V0X2xpbWl0PTEwMAorICAgIDEyMzRhYmNkZVw9b2Zmc2V0X2xpbWl0PTkKKyAgICAxMjM0YWJjZGVcPW9mZnNldF9saW1pdD00CisgICAgMTIzNGFiY2RlXD1vZmZzZXRfbGltaXQ9NCxvZmZzZXQ9NAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNGFiY2RlXD1vZmZzZXRfbGltaXQ9NCxvZmZzZXQ9NQorICAgIDEyMzRhYmNkZVw9b2Zmc2V0X2xpbWl0PTMKKworLyg/PD1hYmMpL3VzZV9vZmZzZXRfbGltaXQKKyAgICAxMjM0YWJjXD1vZmZzZXRfbGltaXQ9NworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNGFiY1w9b2Zmc2V0X2xpbWl0PTYKKworL2FiY2QvbnVsbF9jb250ZXh0CisgICAgYWJjZFw9bnVsbF9jb250ZXh0CisKKyMgRW5kIG9mIHRlc3RpbnB1dDYKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDcgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzAyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQ3CkBAIC0wLDAgKzEsMjA5NiBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBjaGVja3MgVVRGIGFuZCBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQgd2l0aCB0aGUgREZBCisjIG1hdGNoaW5nIGZ1bmN0aW9uYWxpdHkgb2YgcGNyZV9kZmFfbWF0Y2goKS4gQSBkZWZhdWx0IHN1YmplY3QgbW9kaWZpZXIgaXMKKyMgdXNlZCB0byBmb3JjZSBERkEgbWF0Y2hpbmcgZm9yIGFsbCB0ZXN0cy4KKworI3N1YmplY3QgZGZhCisjbmV3bGluZV9kZWZhdWx0IExGIGFueSBhbnlDUkxGCisKKy9ceHsxMDB9YWIvdXRmCisgIFx4ezEwMH1hYgorICAKKy9hXHh7MTAwfSpiL3V0ZgorICAgIGFiCisgICAgYVx4ezEwMH1iICAKKyAgICBhXHh7MTAwfVx4ezEwMH1iICAKKyAgICAKKy9hXHh7MTAwfStiL3V0ZgorICAgIGFceHsxMDB9YiAgCisgICAgYVx4ezEwMH1ceHsxMDB9YiAgCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWIKKyAgICAgCisvXGJYL3V0ZgorICAgIFhvYW5vbgorICAgICtYb2Fub24KKyAgICBceHszMDB9WG9hbm9uIAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFlYb2Fub24gIAorICAgIAorL1xCWC91dGYKKyAgICBZWG9hbm9uCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYb2Fub24KKyAgICArWG9hbm9uICAgIAorICAgIFx4ezMwMH1Yb2Fub24gCisKKy9YXGIvdXRmCisgICAgWCtvYW5vbgorICAgIFpYXHh7MzAwfW9hbm9uIAorICAgIEZBWCAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBYb2Fub24gIAorICAgIAorL1hcQi91dGYKKyAgICBYb2Fub24gIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWCtvYW5vbgorICAgIFpYXHh7MzAwfW9hbm9uIAorICAgIEZBWCAKKyAgICAKKy9bXmFdL3V0ZgorICAgIGFiY2QKKyAgICBhXHh7MTAwfSAgIAorCisvXlthYmNceHsxMjN9XHh7NDAwfS1ceHs0MDJ9XXsyLDN9XGQvdXRmCisgICAgYWI5OQorICAgIFx4ezEyM31ceHsxMjN9NDUKKyAgICBceHs0MDB9XHh7NDAxfVx4ezQwMn02ICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGQ5OQorICAgIFx4ezEyM31ceHsxMjJ9NCAgIAorICAgIFx4ezQwMH1ceHs0MDN9NiAgCisgICAgXHh7NDAwfVx4ezQwMX1ceHs0MDJ9XHh7NDAyfTYgIAorCisvYS5iL3V0ZgorICAgIGFjYgorICAgIGFceDdmYgorICAgIGFceHsxMDB9YiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcbmIgIAorCisvYSguezN9KWIvdXRmCisgICAgYVx4ezQwMDB9eHliIAorICAgIGFceHs0MDAwfVx4N2Z5YiAKKyAgICBhXHh7NDAwMH1ceHsxMDB9eWIgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7NDAwMH1iIAorICAgIGFjXG5jYiAKKworL2EoLio/KSguKS8KKyAgICBhXHhjMFx4ODhiCisKKy9hKC4qPykoLikvdXRmCisgICAgYVx4ezEwMH1iCisKKy9hKC4qKSguKS8KKyAgICBhXHhjMFx4ODhiCisKKy9hKC4qKSguKS91dGYKKyAgICBhXHh7MTAwfWIKKworL2EoLikoLikvCisgICAgYVx4YzBceDkyYmNkCisKKy9hKC4pKC4pL3V0ZgorICAgIGFceHsyNDB9YmNkCisKKy9hKC4/KSguKS8KKyAgICBhXHhjMFx4OTJiY2QKKworL2EoLj8pKC4pL3V0ZgorICAgIGFceHsyNDB9YmNkCisKKy9hKC4/PykoLikvCisgICAgYVx4YzBceDkyYmNkCisKKy9hKC4/PykoLikvdXRmCisgICAgYVx4ezI0MH1iY2QKKworL2EoLnszfSliL3V0ZgorICAgIGFceHsxMjM0fXh5YiAKKyAgICBhXHh7MTIzNH1ceHs0MzIxfXliIAorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ezEyMzR9YiAKKyAgICBhY1xuY2IgCisKKy9hKC57Myx9KWIvdXRmCisgICAgYVx4ezEyMzR9eHliIAorICAgIGFceHsxMjM0fVx4ezQzMjF9eWIgCisgICAgYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfWIgCisgICAgYXh4eHhiY2RlZmdoaWpiIAorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1ceHszNDIxfWIgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MTIzNH1iIAorCisvYSguezMsfT8pYi91dGYKKyAgICBhXHh7MTIzNH14eWIgCisgICAgYVx4ezEyMzR9XHh7NDMyMX15YiAKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9YiAKKyAgICBheHh4eGJjZGVmZ2hpamIgCisgICAgYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfVx4ezM0MjF9YiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceHsxMjM0fWIgCisKKy9hKC57Myw1fSliL3V0ZgorICAgIGFceHsxMjM0fXh5YiAKKyAgICBhXHh7MTIzNH1ceHs0MzIxfXliIAorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iIAorICAgIGF4eHh4YmNkZWZnaGlqYiAKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9XHh7MzQyMX1iIAorICAgIGF4Ynh4YmNkZWZnaGlqYiAKKyAgICBheHh4eHhiY2RlZmdoaWpiIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ezEyMzR9YiAKKyAgICBheHh4eHh4YmNkZWZnaGlqYiAKKworL2EoLnszLDV9PyliL3V0ZgorICAgIGFceHsxMjM0fXh5YiAKKyAgICBhXHh7MTIzNH1ceHs0MzIxfXliIAorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iIAorICAgIGF4eHh4YmNkZWZnaGlqYiAKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9XHh7MzQyMX1iIAorICAgIGF4Ynh4YmNkZWZnaGlqYiAKKyAgICBheHh4eHhiY2RlZmdoaWpiIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ezEyMzR9YiAKKyAgICBheHh4eHh4YmNkZWZnaGlqYiAKKworL15bYVx4e2MwfV0vdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9CisKKy8oPzw9YVhiKWNkL3V0ZgorICAgIGFYYmNkCisKKy8oPzw9YVx4ezEwMH1iKWNkL3V0ZgorICAgIGFceHsxMDB9YmNkCisKKy8oPzw9YVx4ezEwMDAwMH1iKWNkL3V0ZgorICAgIGFceHsxMDAwMDB9YmNkCisgICAgCisvKD86XHh7MTAwfSl7M31iL3V0ZgorICAgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfWIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBceHsxMDB9XHh7MTAwfWIKKworL1x4e2FifS91dGYKKyAgICBceHthYn0gCisgICAgXHhjMlx4YWIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBceDAwe2FifQorCisvKD88PSguKSlYL3V0ZgorICAgIFdYWVoKKyAgICBceHsyNTZ9WFlaIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWFlaIAorCisvW15hXSsvZyx1dGYKKyAgICBiY2QKKyAgICBceHsxMDB9YVlceHsyNTZ9WiAKKyAgICAKKy9eW15hXXsyfS91dGYKKyAgICBceHsxMDB9YmMKKyAKKy9eW15hXXsyLH0vdXRmCisgICAgXHh7MTAwfWJjQWEKKworL15bXmFdezIsfT8vdXRmCisgICAgXHh7MTAwfWJjYQorCisvW15hXSsvZ2ksdXRmCisgICAgYmNkCisgICAgXHh7MTAwfWFZXHh7MjU2fVogCisgICAgCisvXlteYV17Mn0vaSx1dGYKKyAgICBceHsxMDB9YmMKKyAKKy9eW15hXXsyLH0vaSx1dGYKKyAgICBceHsxMDB9YmNBYQorCisvXlteYV17Mix9Py9pLHV0ZgorICAgIFx4ezEwMH1iY2EKKworL1x4ezEwMH17MCwwfS91dGYKKyAgICBhYmNkCisgCisvXHh7MTAwfT8vdXRmCisgICAgYWJjZAorICAgIFx4ezEwMH1ceHsxMDB9IAorCisvXHh7MTAwfXswLDN9L3V0ZgorICAgIFx4ezEwMH1ceHsxMDB9IAorICAgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0gCisgICAgCisvXHh7MTAwfSovdXRmCisgICAgYWJjZQorICAgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0gCisKKy9ceHsxMDB9ezEsMX0vdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0gCisKKy9ceHsxMDB9ezEsM30vdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0gCisKKy9ceHsxMDB9Ky91dGYKKyAgICBhYmNkXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfSAKKworL1x4ezEwMH17M30vdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVhYCisKKy9ceHsxMDB9ezMsNX0vdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1YWAorCisvXHh7MTAwfXszLH0vdXRmLG5vX2F1dG9fcG9zc2VzcworICAgIGFiY2RceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9WFgKKworLyg/PD1hXHh7MTAwfXsyfWIpWC91dGYKKyAgICBYeXl5YVx4ezEwMH1ceHsxMDB9Ylh6enoKKworL1xEKi91dGYsbm9fYXV0b19wb3NzZXNzCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorCisvXEQqL3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisKKy9cRC91dGYKKyAgICAxWDIKKyAgICAxXHh7MTAwfTIgCisgIAorLz5cUy91dGYKKyAgICA+ID5YIFkKKyAgICA+ID5ceHsxMDB9IFkKKyAgCisvXGQvdXRmCisgICAgXHh7MTAwfTMKKyAgICAKKy9ccy91dGYKKyAgICBceHsxMDB9IFgKKyAgICAKKy9cRCsvdXRmCisgICAgMTJhYmNkMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQgIAorCisvXER7MiwzfS91dGYKKyAgICAxMmFiY2QzNAorICAgIDEyYWIzNAorXD0gRXhwZWN0IG5vIG1hdGNoICAKKyAgICAxMjM0CisgICAgMTJhMzQgIAorCisvXER7MiwzfT8vdXRmCisgICAgMTJhYmNkMzQKKyAgICAxMmFiMzQKK1w9IEV4cGVjdCBubyBtYXRjaCAgCisgICAgMTIzNAorICAgIDEyYTM0ICAKKworL1xkKy91dGYKKyAgICAxMmFiY2QzNAorCisvXGR7MiwzfS91dGYKKyAgICAxMmFiY2QzNAorICAgIDEyMzRhYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2ggIAorICAgIDEuNCAKKworL1xkezIsM30/L3V0ZgorICAgIDEyYWJjZDM0CisgICAgMTIzNGFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaCAgCisgICAgMS40IAorCisvXFMrL3V0ZgorICAgIDEyYWJjZDM0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcICAgIFwgCisKKy9cU3syLDN9L3V0ZgorICAgIDEyYWJjZDM0CisgICAgMTIzNGFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFwgICAgIFwgIAorCisvXFN7MiwzfT8vdXRmCisgICAgMTJhYmNkMzQKKyAgICAxMjM0YWJjZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXCAgICAgXCAgCisKKy8+XHMrPC91dGYKKyAgICAxMj4gICAgICA8MzQKKworLz5cc3syLDN9PC91dGYKKyAgICBhYj4gIDxjZAorICAgIGFiPiAgIDxjZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWI+ICAgIDxjZCAKKworLz5cc3syLDN9PzwvdXRmCisgICAgYWI+ICA8Y2QKKyAgICBhYj4gICA8Y2UKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiPiAgICA8Y2QgCisKKy9cdysvdXRmCisgICAgMTIgICAgICAzNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgKysrPSohIAorCisvXHd7MiwzfS91dGYKKyAgICBhYiAgY2QKKyAgICBhYmNkIGNlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhLmIuYworCisvXHd7MiwzfT8vdXRmCisgICAgYWIgIGNkCisgICAgYWJjZCBjZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYS5iLmMKKworL1xXKy91dGYKKyAgICAxMj09PT0zNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZCAKKworL1xXezIsM30vdXRmCisgICAgYWI9PT09Y2QKKyAgICBhYj09Y2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEuYi5jCisKKy9cV3syLDN9Py91dGYKKyAgICBhYj09PT1jZAorICAgIGFiPT1jZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYS5iLmMKKworL1tceHsxMDB9XS91dGYKKyAgICBceHsxMDB9CisgICAgWlx4ezEwMH0KKyAgICBceHsxMDB9WgorCisvW1pceHsxMDB9XS91dGYKKyAgICBaXHh7MTAwfQorICAgIFx4ezEwMH0KKyAgICBceHsxMDB9WgorCisvW1x4ezEwMH1ceHsyMDB9XS91dGYKKyAgIGFiXHh7MTAwfWNkCisgICBhYlx4ezIwMH1jZAorCisvW1x4ezEwMH0tXHh7MjAwfV0vdXRmCisgICBhYlx4ezEwMH1jZAorICAgYWJceHsyMDB9Y2QKKyAgIGFiXHh7MTExfWNkIAorCisvW3otXHh7MjAwfV0vdXRmCisgICBhYlx4ezEwMH1jZAorICAgYWJceHsyMDB9Y2QKKyAgIGFiXHh7MTExfWNkIAorICAgYWJ6Y2QKKyAgIGFifGNkICAKKworL1tRXHh7MTAwfVx4ezIwMH1dL3V0ZgorICAgYWJceHsxMDB9Y2QKKyAgIGFiXHh7MjAwfWNkCisgICBRPyAKKworL1tRXHh7MTAwfS1ceHsyMDB9XS91dGYKKyAgIGFiXHh7MTAwfWNkCisgICBhYlx4ezIwMH1jZAorICAgYWJceHsxMTF9Y2QgCisgICBRPyAKKworL1tRei1ceHsyMDB9XS91dGYKKyAgIGFiXHh7MTAwfWNkCisgICBhYlx4ezIwMH1jZAorICAgYWJceHsxMTF9Y2QgCisgICBhYnpjZAorICAgYWJ8Y2QgIAorICAgUT8gCisKKy9bXHh7MTAwfVx4ezIwMH1dezEsM30vdXRmCisgICBhYlx4ezEwMH1jZAorICAgYWJceHsyMDB9Y2QKKyAgIGFiXHh7MjAwfVx4ezEwMH1ceHsyMDB9XHh7MTAwfWNkCisKKy9bXHh7MTAwfVx4ezIwMH1dezEsM30/L3V0ZgorICAgYWJceHsxMDB9Y2QKKyAgIGFiXHh7MjAwfWNkCisgICBhYlx4ezIwMH1ceHsxMDB9XHh7MjAwfVx4ezEwMH1jZAorCisvW1FceHsxMDB9XHh7MjAwfV17MSwzfS91dGYKKyAgIGFiXHh7MTAwfWNkCisgICBhYlx4ezIwMH1jZAorICAgYWJceHsyMDB9XHh7MTAwfVx4ezIwMH1ceHsxMDB9Y2QKKworL1tRXHh7MTAwfVx4ezIwMH1dezEsM30/L3V0ZgorICAgYWJceHsxMDB9Y2QKKyAgIGFiXHh7MjAwfWNkCisgICBhYlx4ezIwMH1ceHsxMDB9XHh7MjAwfVx4ezEwMH1jZAorCisvKD88PVtceHsxMDB9XHh7MjAwfV0pWC91dGYKKyAgICBhYmNceHsyMDB9WAorICAgIGFiY1x4ezEwMH1YIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWCAgCisKKy8oPzw9W1FceHsxMDB9XHh7MjAwfV0pWC91dGYKKyAgICBhYmNceHsyMDB9WAorICAgIGFiY1x4ezEwMH1YIAorICAgIGFiUVggCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYICAKKworLyg/PD1bXHh7MTAwfVx4ezIwMH1dezN9KVgvdXRmCisgICAgYWJjXHh7MTAwfVx4ezIwMH1ceHsxMDB9WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjXHh7MjAwfVgKKyAgICBYICAKKworL1teXHh7MTAwfVx4ezIwMH1dWC91dGYKKyAgICBBWAorICAgIFx4ezE1MH1YCisgICAgXHh7NTAwfVggCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9WAorICAgIFx4ezIwMH1YICAgCisKKy9bXlFceHsxMDB9XHh7MjAwfV1YL3V0ZgorICAgIEFYCisgICAgXHh7MTUwfVgKKyAgICBceHs1MDB9WCAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezEwMH1YCisgICAgXHh7MjAwfVggICAKKyAgICBRWCAKKworL1teXHh7MTAwfS1ceHsyMDB9XVgvdXRmCisgICAgQVgKKyAgICBceHs1MDB9WCAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezEwMH1YCisgICAgXHh7MTUwfVgKKyAgICBceHsyMDB9WCAgIAorCisvW3otXHh7MTAwfV0vaSx1dGYKKyAgICB6CisgICAgWiAKKyAgICBceHsxMDB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDJ9CisgICAgeSAgICAKKworL1tceEZGXS8KKyAgICA+XHhmZjwKKworL1tceGZmXS91dGYKKyAgICA+XHh7ZmZ9PAorCisvW15ceEZGXS8KKyAgICBYWVoKKworL1teXHhmZl0vdXRmCisgICAgWFlaCisgICAgXHh7MTIzfSAKKworL15bYWNdKmIvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4YgorCisvXlthY1x4ezEwMH1dKmIvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4YgorCisvXlteeF0qYi9pLHV0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeGIKKworL15bXnhdKmIvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4YgorICAKKy9eXGQqYi91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHhiIAorCisvKHxhKS9nLHV0ZgorICAgIGNhdGFjCisgICAgYVx4ezI1Nn1hIAorCisvXlx4ezg1fSQvaSx1dGYKKyAgICBceHs4NX0KKworL15hYmMuL2dteCxuZXdsaW5lPWFueSx1dGYKKyAgICBhYmMxIFx4MGFhYmMyIFx4MGJhYmMzeHggXHgwY2FiYzQgXHgwZGFiYzV4eCBceDBkXHgwYWFiYzYgXHh7MDA4NX1hYmM3IFx4ezIwMjh9YWJjOCBceHsyMDI5fWFiYzkgSlVOSworCisvYWJjLiQvZ214LG5ld2xpbmU9YW55LHV0ZgorICAgIGFiYzFceDBhIGFiYzJceDBiIGFiYzNceDBjIGFiYzRceDBkIGFiYzVceDBkXHgwYSBhYmM2XHh7MDA4NX0gYWJjN1x4ezIwMjh9IGFiYzhceHsyMDI5fSBhYmM5CisKKy9eYVxSYi9ic3I9dW5pY29kZSx1dGYKKyAgICBhXG5iCisgICAgYVxyYgorICAgIGFcclxuYgorICAgIGFceDBiYgorICAgIGFceDBjYgorICAgIGFceHs4NX1iICAgCisgICAgYVx4ezIwMjh9YiAKKyAgICBhXHh7MjAyOX1iIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxuXHJiICAgIAorCisvXmFcUipiL2Jzcj11bmljb2RlLHV0ZgorICAgIGFiCisgICAgYVxuYgorICAgIGFccmIKKyAgICBhXHJcbmIKKyAgICBhXHgwYmIKKyAgICBhXHgwY1x4ezIwMjh9XHh7MjAyOX1iCisgICAgYVx4ezg1fWIgICAKKyAgICBhXG5ccmIgICAgCisgICAgYVxuXHJceHs4NX1ceDBjYiAKKworL15hXFIrYi9ic3I9dW5pY29kZSx1dGYKKyAgICBhXG5iCisgICAgYVxyYgorICAgIGFcclxuYgorICAgIGFceDBiYgorICAgIGFceDBjXHh7MjAyOH1ceHsyMDI5fWIKKyAgICBhXHh7ODV9YiAgIAorICAgIGFcblxyYiAgICAKKyAgICBhXG5cclx4ezg1fVx4MGNiIAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIgIAorCisvXmFcUnsxLDN9Yi9ic3I9dW5pY29kZSx1dGYKKyAgICBhXG5iCisgICAgYVxuXHJiCisgICAgYVxuXHJceHs4NX1iCisgICAgYVxyXG5cclxuYiAKKyAgICBhXHJcblxyXG5cclxuYiAKKyAgICBhXG5cclxuXHJiCisgICAgYVxuXG5cclxuYiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcblxuXG5ccmIKKyAgICBhXHIKKworL1xoK1xWP1x2ezMsNH0vdXRmLG5vX2F1dG9fcG9zc2VzcworICAgIFx4MDlceDIwXHh7YTB9WFx4MGFceDBiXHgwY1x4MGRceDBhCisKKy9cVj9cdnszLDR9L3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICBceDIwXHh7YTB9WFx4MGFceDBiXHgwY1x4MGRceDBhCisKKy9caCtcVj9cdnszLDR9L3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICA+XHgwOVx4MjBceHthMH1YXHgwYVx4MGFceDBhPAorCisvXFY/XHZ7Myw0fS91dGYsbm9fYXV0b19wb3NzZXNzCisgICAgPlx4MDlceDIwXHh7YTB9WFx4MGFceDBhXHgwYTwKKworL1xIXGhcVlx2L3V0ZgorICAgIFggWFx4MGEKKyAgICBYXHgwOVhceDBiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHthMH0gWFx4MGEgICAKKyAgICAKKy9cSCpcaCtcVj9cdnszLDR9L3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICBceDA5XHgyMFx4e2EwfVhceDBhXHgwYlx4MGNceDBkXHgwYQorICAgIFx4MDlceDIwXHh7YTB9XHgwYVx4MGJceDBjXHgwZFx4MGEKKyAgICBceDA5XHgyMFx4e2EwfVx4MGFceDBiXHgwYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFx4MDlceDIwXHh7YTB9XHgwYVx4MGIKKyAgICAgCisvXEhcaFxWXHYvdXRmCisgICAgXHh7MzAwMX1ceHszMDAwfVx4ezIwMzB9XHh7MjAyOH0KKyAgICBYXHh7MTgwZX1YXHh7ODV9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsyMDA5fSBYXHgwYSAgIAorICAgIAorL1xIKlxoK1xWP1x2ezMsNH0vdXRmLG5vX2F1dG9fcG9zc2VzcworICAgIFx4ezE2ODB9XHh7MTgwZX1ceHsyMDA3fVhceHsyMDI4fVx4ezIwMjl9XHgwY1x4MGRceDBhCisgICAgXHgwOVx4ezIwNWZ9XHh7YTB9XHgwYVx4ezIwMjl9XHgwY1x4ezIwMjh9XHgwYQorICAgIFx4MDlceDIwXHh7MjAyZn1ceDBhXHgwYlx4MGMKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBceDA5XHh7MjAwYX1ceHthMH1ceHsyMDI4fVx4MGIKKyAgICAgCisvYVxSYi9JLGJzcj1hbnljcmxmLHV0ZgorICAgIGFccmIKKyAgICBhXG5iCisgICAgYVxyXG5iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7ODV9YgorICAgIGFceDBiYiAgICAgCisKKy9hXFJiL0ksYnNyPXVuaWNvZGUsdXRmCisgICAgYVxyYgorICAgIGFcbmIKKyAgICBhXHJcbmIKKyAgICBhXHh7ODV9YgorICAgIGFceDBiYiAgICAgCisgICAgCisvYVxSP2IvSSxic3I9YW55Y3JsZix1dGYKKyAgICBhXHJiCisgICAgYVxuYgorICAgIGFcclxuYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ezg1fWIKKyAgICBhXHgwYmIgICAgIAorCisvYVxSP2IvSSxic3I9dW5pY29kZSx1dGYKKyAgICBhXHJiCisgICAgYVxuYgorICAgIGFcclxuYgorICAgIGFceHs4NX1iCisgICAgYVx4MGJiICAgICAKKyAKKy9YL25ld2xpbmU9YW55LHV0ZixmaXJzdGxpbmUKKyAgICBBXHh7MWVjNX1BQkNYWVoKKworL2FiY2QqL3V0ZgorICAgIHh4eHhhYmNkXD1wcworICAgIHh4eHhhYmNkXD1waAorCisvYWJjZCovaSx1dGYKKyAgICB4eHh4YWJjZFw9cHMKKyAgICB4eHh4YWJjZFw9cGgKKyAgICBYWFhYQUJDRFw9cHMKKyAgICBYWFhYQUJDRFw9cGgKKworL2FiY1xkKi91dGYKKyAgICB4eHh4YWJjMVw9cHMKKyAgICB4eHh4YWJjMVw9cGgKKworL2FiY1tkZV0qL3V0ZgorICAgIHh4eHhhYmNkZVw9cHMKKyAgICB4eHh4YWJjZGVcPXBoCisKKy9cYnRoZSBjYXRcYi91dGYKKyAgICB0aGUgY2F0XD1wcworICAgIHRoZSBjYXRcPXBoCisKKy8uL25ld2xpbmU9Y3JsZix1dGYKKyAgICBcclw9cHMKKyAgICBcclw9cGgKKyAgCisvLnsyLDN9L25ld2xpbmU9Y3JsZix1dGYKKyAgICBcclw9cHMKKyAgICBcclw9cGgKKyAgICBcclxyXD1wcworICAgIFxyXHJcPXBoCisgICAgXHJcclxyXD1wcworICAgIFxyXHJcclw9cGgKKworLy57MiwzfT8vbmV3bGluZT1jcmxmLHV0ZgorICAgIFxyXD1wcworICAgIFxyXD1waAorICAgIFxyXHJcPXBzCisgICAgXHJcclw9cGgKKyAgICBcclxyXHJcPXBzCisgICAgXHJcclxyXD1waAorCisvW15ceHsxMDB9XS91dGYKKyAgICBceHsxMDB9XHh7MTAxfVgKKworL1teXHh7MTAwfV0rL3V0ZgorICAgIFx4ezEwMH1ceHsxMDF9WAorCisvXHBMXFB7TmR9L3V0ZgorICAgIEFCCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBMAorICAgIDAwCisKKy9cWC4vdXRmCisgICAgQUIKKyAgICBBXHh7MzAwfUJDCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHszMDB9CisKKy9cWFxYL3V0ZgorICAgIEFCQworICAgIEFceHszMDB9Qlx4ezMwMH1ceHszMDF9QworICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MzAwfQorCisvXlxwTCsvdXRmCisgICAgYWJjZAorICAgIGEKKworL15cUEwrL3V0ZgorICAgIDEyMzQKKyAgICA9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkCisKKy9eXFgrL3V0ZgorICAgIGFiY2RBXHh7MzAwfVx4ezMwMX1ceHszMDJ9CisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfQorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1BXHh7MzAwfVx4ezMwMX1ceHszMDJ9CisgICAgYQorICAgIFx4ezMwMH1ceHszMDF9XHh7MzAyfQorCisvXFg/YWJjL3V0ZgorICAgIGFiYworICAgIEFceHszMDB9YWJjCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUFceHszMDB9QVx4ezMwMH1BXHh7MzAwfWFiY3h5egorICAgIFx4ezMwMH1hYmMKKworL15cWD9hYmMvdXRmCisgICAgYWJjCisgICAgQVx4ezMwMH1hYmMKKyAgICBceHszMDB9YWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QVx4ezMwMH1BXHh7MzAwfUFceHszMDB9YWJjeHl6CisKKy9cWCphYmMvdXRmCisgICAgYWJjCisgICAgQVx4ezMwMH1hYmMKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QVx4ezMwMH1BXHh7MzAwfUFceHszMDB9YWJjeHl6CisgICAgXHh7MzAwfWFiYworCisvXlxYKmFiYy91dGYKKyAgICBhYmMKKyAgICBBXHh7MzAwfWFiYworICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1BXHh7MzAwfUFceHszMDB9QVx4ezMwMH1hYmN4eXoKKyAgICBceHszMDB9YWJjCisKKy9eXHBMPz0uL3V0ZgorICAgIEE9YgorICAgID1jCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxPTIKKyAgICBBQUFBPWIKKworL15ccEwqPS4vdXRmCisgICAgQUFBQT1iCisgICAgPWMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDE9MgorCisvXlxYezIsM31YL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1BXHh7MzAwfVx4ezMwMX1ceHszMDJ9WAorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1BXHh7MzAwfVx4ezMwMX1ceHszMDJ9QVx4ezMwMH1ceHszMDF9XHh7MzAyfVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9WAorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1BXHh7MzAwfVx4ezMwMX1ceHszMDJ9QVx4ezMwMH1ceHszMDF9XHh7MzAyfUFceHszMDB9XHh7MzAxfVx4ezMwMn1YCisKKy9eXHBDXHBMXHBNXHBOXHBQXHBTXHBaPC91dGYKKyAgICBceDdmXHh7YzB9XHh7MzBmfVx4ezY2MH1ceHs2NmN9XHh7ZjAxfVx4ezE2ODB9PAorICAgIFxucFx4ezMwMH05IVwkIDwKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFwXHh7MzAwfTkhXCQgPAorICAKKy9eXFBDL3V0ZgorICAgIFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4N2YKKyAgCisvXlxQTC91dGYKKyAgICA5CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHtjMH0KKyAgCisvXlxQTS91dGYKKyAgICBYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHszMGZ9CisgIAorL15cUE4vdXRmCisgICAgWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7NjYwfQorICAKKy9eXFBQL3V0ZgorICAgIFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezY2Y30KKyAgCisvXlxQUy91dGYKKyAgICBYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHtmMDF9CisgIAorL15cUFovdXRmCisgICAgWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MTY4MH0KKyAgICAKKy9eXHB7Q2N9L3V0ZgorICAgIFx4ezAxN30KKyAgICBceHswOWZ9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHswNjAwfQorICAKKy9eXHB7Q2Z9L3V0ZgorICAgIFx4ezYwMX0KKyAgICBceHsxODBlfQorICAgIFx4ezA2MWN9CisgICAgXHh7MjA2Nn0KKyAgICBceHsyMDY3fQorICAgIFx4ezIwNjh9CisgICAgXHh7MjA2OX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezA5Zn0KKyAgCisvXlxwe0NufS91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezA5Zn0KKyAgCisvXlxwe0NvfS91dGYKKyAgICBceHtmOGZmfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MDlmfQorICAKKy9eXHB7Q3N9L3V0ZgorICAgIFx4e2RmZmZ9XD1ub191dGZfY2hlY2sKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezA5Zn0KKyAgCisvXlxwe0xsfS91dGYKKyAgICBhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBaCisgICAgXHh7ZTAwMH0KKyAgCisvXlxwe0xtfS91dGYKKyAgICBceHsyYjB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCisgIAorL15ccHtMb30vdXRmCisgICAgXHh7MWJifQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorICAgIFx4ezJiMH0KKyAgCisvXlxwe0x0fS91dGYKKyAgICBceHsxYzV9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCisgICAgXHh7MmIwfQorICAKKy9eXHB7THV9L3V0ZgorICAgIEEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezJiMH0KKyAgCisvXlxwe01jfS91dGYKKyAgICBceHs5MDN9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCisgICAgXHh7MzAwfQorICAgICAgIAorL15ccHtNZX0vdXRmCisgICAgXHh7NDg4fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezkwM30KKyAgICBceHszMDB9CisgIAorL15ccHtNbn0vdXRmCisgICAgXHh7MzAwfQorICAgIFx4ezFhMWJ9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCisgICAgXHh7OTAzfQorICAKKy9eXHB7TmR9Ky91dGYsbm9fYXV0b19wb3NzZXNzCisgICAgMDEyMzQ1Njc4OVx4ezY2MH1ceHs2NjF9XHh7NjYyfVx4ezY2M31ceHs2NjR9XHh7NjY1fVx4ezY2Nn1ceHs2Njd9XHh7NjY4fVx4ezY2OX1ceHs2NmF9CisgICAgXHh7NmYwfVx4ezZmMX1ceHs2ZjJ9XHh7NmYzfVx4ezZmNH1ceHs2ZjV9XHh7NmY2fVx4ezZmN31ceHs2Zjh9XHh7NmY5fVx4ezZmYX0KKyAgICBceHs5NjZ9XHh7OTY3fVx4ezk2OH1ceHs5Njl9XHh7OTZhfVx4ezk2Yn1ceHs5NmN9XHh7OTZkfVx4ezk2ZX1ceHs5NmZ9XHh7OTcwfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAKKy9eXHB7Tmx9L3V0ZgorICAgIFx4ezE2ZWV9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCisgICAgXHh7OTY2fQorICAKKy9eXHB7Tm99L3V0ZgorICAgIFx4e2IyfQorICAgIFx4e2IzfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezE2ZWV9CisgIAorL15ccHtQY30vdXRmCisgICAgXHg1ZgorICAgIFx4ezIwM2Z9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCisgICAgLQorICAgIFx4ezU4YX0KKyAgCisvXlxwe1BkfS91dGYKKyAgICAtCisgICAgXHh7NThhfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezIwM2Z9CisgIAorL15ccHtQZX0vdXRmCisgICAgKQorICAgIF0KKyAgICB9CisgICAgXHh7ZjNifQorICAgIFx4ezIzMDl9CisgICAgXHh7MjMwYn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBceHsyMDNmfQorICAgICgKKyAgICBbCisgICAgeworICAgIFx4e2YzY30KKworL15ccHtQZn0vdXRmCisgICAgXHh7YmJ9CisgICAgXHh7MjAxOX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBceHsyMDNmfQorICAKKy9eXHB7UGl9L3V0ZgorICAgIFx4e2FifQorICAgIFx4ezIwMTh9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCisgICAgXHh7MjAzZn0KKyAgCisvXlxwe1BvfS91dGYKKyAgICAhCisgICAgXHh7MzdlfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezIwM2Z9CisgIAorL15ccHtQc30vdXRmCisgICAgKAorICAgIFsKKyAgICB7CisgICAgXHh7ZjNjfQorICAgIFx4ezIzMDh9CisgICAgXHh7MjMwYX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICApCisgICAgXQorICAgIH0KKyAgICBceHtmM2J9CisgIAorL15ccHtTY30rL3V0ZgorICAgICRceHthMn1ceHthM31ceHthNH1ceHthNX1ceHthNn0KKyAgICBceHs5ZjJ9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCisgICAgXHh7MmMyfQorICAKKy9eXHB7U2t9L3V0ZgorICAgIFx4ezJjMn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICBceHs5ZjJ9CisgIAorL15ccHtTbX0rL3V0ZgorICAgICs8fH5ceHthY31ceHsyMDQ0fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezlmMn0KKyAgCisvXlxwe1NvfS91dGYKKyAgICBceHthNn0KKyAgICBceHs0ODJ9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCisgICAgXHh7OWYyfQorICAKKy9eXHB7Wmx9L3V0ZgorICAgIFx4ezIwMjh9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCisgICAgXHh7MjAyOX0KKyAgCisvXlxwe1pwfS91dGYKKyAgICBceHsyMDI5fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIFx4ezIwMjh9CisgIAorL15ccHtac30vdXRmCisgICAgXCBcCisgICAgXHh7YTB9CisgICAgXHh7MTY4MH0KKyAgICBceHsyMDAwfQorICAgIFx4ezIwMDF9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsyMDI4fQorICAgIFx4ezIwMGR9CisgIAorL1xwe05kfSsoLi4pL3V0ZgorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgIAorL1xwe05kfSs/KC4uKS91dGYKKyAgICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworICAKKy9ccHtOZH17Mix9KC4uKS91dGYKKyAgICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworICAKKy9ccHtOZH17Mix9PyguLikvdXRmCisgICAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvXHB7TmR9KiguLikvdXRmCisgICAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvXHB7TmR9Kj8oLi4pL3V0ZgorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgIAorL1xwe05kfXsyfSguLikvdXRmCisgICAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvXHB7TmR9ezIsM30oLi4pL3V0ZgorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgIAorL1xwe05kfXsyLDN9PyguLikvdXRmCisgICAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvXHB7TmR9PyguLikvdXRmCisgICAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvXHB7TmR9Pz8oLi4pL3V0ZgorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgIAorL1xwe05kfSorKC4uKS91dGYKKyAgICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworICAKKy9ccHtOZH0qKyguLi4pL3V0ZgorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgIAorL1xwe05kfSorKC4uLi4pL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAgCisvXHB7THV9L2ksdXRmCisgICAgQQorICAgIGFceHsxMGEwfUIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKKyAgICBceHsxZDAwfQorCisvXHB7Xkx1fS9pLHV0ZgorICAgIDEyMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQworCisvXFB7THV9L2ksdXRmCisgICAgMTIzNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJDCisKKy8oPzw9QVxwe05kfSlYWVovdXRmCisgICAgQTJYWVoKKyAgICAxMjNBNVhZWlBRUgorICAgIEFCQVx4ezY2MH1YWVpwcXIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVoKKyAgICBYWVoKKyAgICAKKy8oPzwhXHBMKVhZWi91dGYKKyAgICAxWFlaCisgICAgQUI9WFlaLi4KKyAgICBYWVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFdYWVoKKworL1tccHtOZH1dL3V0ZgorICAgIDEyMzQKKworL1tccHtOZH0rLV0rL3V0ZgorICAgIDEyMzQKKyAgICAxMi0zNAorICAgIDEyK1x4ezY2MX0tMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2QKKworL1tcUHtOZH1dKy91dGYKKyAgICBhYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0CisKKy9cRCsvdXRmLG5vX2F1dG9fcG9zc2VzcworICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorICAgICAKKy9cUHtOZH0rL3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKKworL1tcRF0rL3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKKworL1tcUHtOZH1dKy91dGYsbm9fYXV0b19wb3NzZXNzCisgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCisKKy9bXERcUHtOZH1dKy91dGYsbm9fYXV0b19wb3NzZXNzCisgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCisKKy9ccEwvdXRmCisgICAgYQorICAgIEEKKworL1xwTC9pLHV0ZgorICAgIGEKKyAgICBBCisgICAgCisvXHB7THV9L3V0ZgorICAgIEEKKyAgICBhWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCisKKy9ccHtMdX0vaSx1dGYKKyAgICBBCisgICAgYVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworCisvXHB7TGx9L3V0ZgorICAgIGEKKyAgICBBegorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJDCisKKy9ccHtMbH0vaSx1dGYKKyAgICBhCisgICAgQXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQworCisvXlx4e2MwfSQvaSx1dGYKKyAgICBceHtjMH0KKyAgICBceHtlMH0KKworL15ceHtlMH0kL2ksdXRmCisgICAgXHh7YzB9CisgICAgXHh7ZTB9CisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vdXRmCisgICAgQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAgICBBXHh7M2IxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAgICBBXHh7MzkxfVx4ezEwNDRGfVx4e2ZmM2F9XHh7MWZiMH0KKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmNWF9XHh7MWZiMH0KKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiOH0KKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS9pLHV0ZgorICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorICAgIGFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorICAgIEFceHszYjF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorICAgIEFceHszOTF9XHh7MTA0NEZ9XHh7ZmYzYX1ceHsxZmIwfQorICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmY1YX1ceHsxZmIwfQorICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmI4fQorCisvXHh7MzkxfSsvaSx1dGYKKyAgICBceHszOTF9XHh7M2IxfVx4ezNiMX1ceHszYjF9XHh7MzkxfQorCisvXHh7MzkxfXszLDV9KC4pL2ksdXRmCisgICAgXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX1YCisKKy9ceHszOTF9ezMsNX0/KC4pL2ksdXRmCisgICAgXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX1YCisKKy9bXHh7MzkxfVx4e2ZmM2F9XS9pLHV0ZgorICAgIFx4ezM5MX0KKyAgICBceHtmZjNhfQorICAgIFx4ezNiMX0KKyAgICBceHtmZjVhfQorICAgIAorL1tceHtjMH1ceHszOTF9XS9pLHV0ZgorICAgIFx4e2MwfQorICAgIFx4e2UwfQorCisvW1x4ezEwNX0tXHh7MTA5fV0vaSx1dGYKKyAgICBceHsxMDR9CisgICAgXHh7MTA1fQorICAgIFx4ezEwOX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezEwMH0KKyAgICBceHsxMGF9CisgICAgCisvW3otXHh7MTAwfV0vaSx1dGYKKyAgICBaCisgICAgegorICAgIFx4ezM5Y30KKyAgICBceHsxNzh9CisgICAgfAorICAgIFx4ezgwfQorICAgIFx4e2ZmfQorICAgIFx4ezEwMH0KKyAgICBceHsxMDF9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDJ9CisgICAgWQorICAgIHkKKworL1t6LVx4ezEwMH1dL2ksdXRmCisKKy9eXFgvdXRmCisgICAgQQorICAgIEFceHszMDB9QkMKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkMKKyAgICBceHszMDB9CisKKy9eKFxYKilDL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfQorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfUMKKworL14oXFgqPylDL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfQorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfUMKKworL14oXFgqKSguKS91dGYKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX0KKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX1DCisKKy9eKFxYKj8pKC4pL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfQorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfUMKKworL15cWCguKS91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn0KKworL15cWHsyLDN9KC4pL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfUJceHszMDB9WAorICAgIEFceHszMDB9XHh7MzAxfUJceHszMDB9Q1x4ezMwMH1ceHszMDF9CisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DXHh7MzAwfVx4ezMwMX1YCisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DXHh7MzAwfVx4ezMwMX1EQVx4ezMwMH1YCisgICAgCisvXlxYezIsM30/KC4pL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfUJceHszMDB9WAorICAgIEFceHszMDB9XHh7MzAxfUJceHszMDB9Q1x4ezMwMH1ceHszMDF9CisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DXHh7MzAwfVx4ezMwMX1YCisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DXHh7MzAwfVx4ezMwMX1EQVx4ezMwMH1YCisKKy9eXHBOezIsM31YLworICAgIDEyWAorICAgIDEyM1gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICAxWAorICAgIDEyMzRYCisKKy9ceHsxMDB9L2ksdXRmCisgICAgXHh7MTAwfQorICAgIFx4ezEwMX0KKyAgICAKKy9eXHB7SGFufSsvdXRmCisgICAgXHh7MmU4MX1ceHszMDA3fVx4ezJmODA0fVx4ezMxYTB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsyZTdmfQorCisvXlxQe0thdGFrYW5hfSsvdXRmCisgICAgXHh7MzEwNX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezMwZmZ9CisKKy9eW1xwe0FyYWJpY31dL3V0ZgorICAgIFx4ezA2ZTl9CisgICAgXHh7MDYwYn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhceHswNmU5fQorCisvXltcUHtZaX1dL3V0ZgorICAgIFx4ezJmODAwfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7YTAxNH0KKyAgICBceHthNGM2fQorCisvXlxwe0FueX1YL3V0ZgorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorICAgIAorL15cUHtBbnl9WC91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYCisgICAgCisvXlxwe0FueX0/WC91dGYKKyAgICBYWVoKKyAgICBBWFlaCisgICAgXHh7MTIzNH1YWVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCWFlaCisKKy9eXFB7QW55fT9YL3V0ZgorICAgIFhZWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVhZWgorICAgIFx4ezEyMzR9WFlaCisgICAgQUJYWVoKKworL15ccHtBbnl9K1gvdXRmCisgICAgQVhZWgorICAgIFx4ezEyMzR9WFlaCisgICAgQVx4ezEyMzR9WFlaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYWVoKKworL15cUHtBbnl9K1gvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWFlaCisgICAgXHh7MTIzNH1YWVoKKyAgICBBXHh7MTIzNH1YWVoKKyAgICBYWVoKKworL15ccHtBbnl9KlgvdXRmCisgICAgWFlaCisgICAgQVhZWgorICAgIFx4ezEyMzR9WFlaCisgICAgQVx4ezEyMzR9WFlaCisKKy9eXFB7QW55fSpYL3V0ZgorICAgIFhZWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVhZWgorICAgIFx4ezEyMzR9WFlaCisgICAgQVx4ezEyMzR9WFlaCisKKy9eW1xwe0FueX1dWC91dGYKKyAgICBBWFlaCisgICAgXHh7MTIzNH1YWVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKKyAgICAKKy9eW1xQe0FueX1dWC91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYCisgICAgCisvXltccHtBbnl9XT9YL3V0ZgorICAgIFhZWgorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJYWVoKKworL15bXFB7QW55fV0/WC91dGYKKyAgICBYWVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWgorICAgIEFCWFlaCisKKy9eW1xwe0FueX1dK1gvdXRmCisgICAgQVhZWgorICAgIFx4ezEyMzR9WFlaCisgICAgQVx4ezEyMzR9WFlaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYWVoKKworL15bXFB7QW55fV0rWC91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWgorICAgIEFceHsxMjM0fVhZWgorICAgIFhZWgorCisvXltccHtBbnl9XSpYL3V0ZgorICAgIFhZWgorICAgIEFYWVoKKyAgICBceHsxMjM0fVhZWgorICAgIEFceHsxMjM0fVhZWgorCisvXltcUHtBbnl9XSpYL3V0ZgorICAgIFhZWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVhZWgorICAgIFx4ezEyMzR9WFlaCisgICAgQVx4ezEyMzR9WFlaCisKKy9eXHB7QW55fXszLDV9Py91dGYKKyAgICBhYmNkZWZnaAorICAgIFx4ezEyMzR9XG5cclx4ezM0NTZ9eHl6CisKKy9eXHB7QW55fXszLDV9L3V0ZgorICAgIGFiY2RlZmdoCisgICAgXHh7MTIzNH1cblxyXHh7MzQ1Nn14eXoKKworL15cUHtBbnl9ezMsNX0/L3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGVmZ2gKKyAgICBceHsxMjM0fVxuXHJceHszNDU2fXh5egorCisvXlxwe0wmfVgvdXRmCisgICAgIEFYWQorICAgICBhWFkKKyAgICAgXHh7MWM1fVhZCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAgXHh7MWJifVhZCisgICAgIFx4ezJiMH1YWQorICAgICAhWFkKKworL15bXHB7TCZ9XVgvdXRmCisgICAgIEFYWQorICAgICBhWFkKKyAgICAgXHh7MWM1fVhZCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAgXHh7MWJifVhZCisgICAgIFx4ezJiMH1YWQorICAgICAhWFkKKworL15ccHtMJn0rWC91dGYKKyAgICAgQVhZCisgICAgIGFYWQorICAgICBBYmNkZVh5egorICAgICBceHsxYzV9QWJYWQorICAgICBhYmNERVh5cHFyZVhsbW4KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICBceHsxYmJ9WFkKKyAgICAgXHh7MmIwfVhZCisgICAgICFYWQorCisvXltccHtMJn1dK1gvdXRmCisgICAgIEFYWQorICAgICBhWFkKKyAgICAgQWJjZGVYeXoKKyAgICAgXHh7MWM1fUFiWFkKKyAgICAgYWJjREVYeXBxcmVYbG1uCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAgXHh7MWJifVhZCisgICAgIFx4ezJiMH1YWQorICAgICAhWFkKKworL15ccHtMJn0rP1gvdXRmCisgICAgIEFYWQorICAgICBhWFkKKyAgICAgQWJjZGVYeXoKKyAgICAgXHh7MWM1fUFiWFkKKyAgICAgYWJjREVYeXBxcmVYbG1uCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAgXHh7MWJifVhZCisgICAgIFx4ezJiMH1YWQorICAgICAhWFkKKworL15bXHB7TCZ9XSs/WC91dGYKKyAgICAgQVhZCisgICAgIGFYWQorICAgICBBYmNkZVh5egorICAgICBceHsxYzV9QWJYWQorICAgICBhYmNERVh5cHFyZVhsbW4KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICBceHsxYmJ9WFkKKyAgICAgXHh7MmIwfVhZCisgICAgICFYWQorCisvXlxQe0wmfVgvdXRmCisgICAgICFYWQorICAgICBceHsxYmJ9WFkKKyAgICAgXHh7MmIwfVhZCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAgXHh7MWM1fVhZCisgICAgIEFYWQorCisvXltcUHtMJn1dWC91dGYKKyAgICAgIVhZCisgICAgIFx4ezFiYn1YWQorICAgICBceHsyYjB9WFkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICBceHsxYzV9WFkKKyAgICAgQVhZCisKKy9eXHh7MDIzYX0rPyhceHswMTMwfSspL2ksdXRmCisgIFx4ezAyM2F9XHh7MmM2NX1ceHswMTMwfQorICAKKy9eXHh7MDIzYX0rKFteWF0pL2ksdXRmCisgIFx4ezAyM2F9XHh7MmM2NX1YCisgCisvXHh7YzB9K1x4ezExNn0rL2ksdXRmCisgICAgXHh7YzB9XHh7ZTB9XHh7MTE2fVx4ezExN30KKworL1tceHtjMH1ceHsxMTZ9XSsvaSx1dGYKKyAgICBceHtjMH1ceHtlMH1ceHsxMTZ9XHh7MTE3fQorCisjIENoZWNrIHByb3BlcnR5IHN1cHBvcnQgaW4gbm9uLVVURi04IG1vZGUKKyAKKy9ccHtMfXs0fS8KKyAgICAxMjNhYmNkZWZnCisgICAgMTIzYWJjXHhjNFx4YzV6egorCisvXHB7Q2FyaWFufVxwe0NoYW19XHB7S2F5YWhfTGl9XHB7TGVwY2hhfVxwe0x5Y2lhbn1ccHtMeWRpYW59XHB7T2xfQ2hpa2l9XHB7UmVqYW5nfVxwe1NhdXJhc2h0cmF9XHB7U3VuZGFuZXNlfVxwe1ZhaX0vdXRmCisgICAgXHh7MTAyQTR9XHh7QUE1Mn1ceHtBOTFEfVx4ezFDNDZ9XHh7MTAyODN9XHh7MTA5MkV9XHh7MUM2Qn1ceHtBOTNCfVx4e0E4QkZ9XHh7MUJBMH1ceHtBNTBBfT09PT0KKworL1x4e2E3N2R9XHh7MWQ3OX0vaSx1dGYKKyAgICBceHthNzdkfVx4ezFkNzl9CisgICAgXHh7MWQ3OX1ceHthNzdkfQorCisvXHh7YTc3ZH1ceHsxZDc5fS91dGYKKyAgICBceHthNzdkfVx4ezFkNzl9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxZDc5fVx4e2E3N2R9CisKKy9eXHB7WGFufS91dGYKKyAgICBBQkNECisgICAgMTIzNAorICAgIFx4ezZjYX0KKyAgICBceHthNmN9CisgICAgXHh7MTBhN30KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIF9BQkMKKworL15ccHtYYW59Ky91dGYKKyAgICBBQkNEMTIzNFx4ezZjYX1ceHthNmN9XHh7MTBhN31fCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBfQUJDCisKKy9eXHB7WGFufSovdXRmCisgICAgQUJDRDEyMzRceHs2Y2F9XHh7YTZjfVx4ezEwYTd9XworICAgIAorL15ccHtYYW59ezIsOX0vdXRmCisgICAgQUJDRDEyMzRceHs2Y2F9XHh7YTZjfVx4ezEwYTd9XworICAgIAorL15bXHB7WGFufV0vdXRmCisgICAgQUJDRDEyMzRfCisgICAgMTIzNGFiY2RfCisgICAgXHh7NmNhfQorICAgIFx4e2E2Y30KKyAgICBceHsxMGE3fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgX0FCQworIAorL15bXHB7WGFufV0rL3V0ZgorICAgIEFCQ0QxMjM0XHh7NmNhfVx4e2E2Y31ceHsxMGE3fV8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIF9BQkMKKworL14+XHB7WHNwfS91dGYKKyAgICA+XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MGJ9CisKKy9ePlxwe1hzcH0rL3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKworL14+XHB7WHNwfSovdXRmLG5vX2F1dG9fcG9zc2VzcworICAgID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorICAgIAorL14+XHB7WHNwfXsyLDl9L3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAgICAKKy9ePltccHtYc3B9XS91dGYsbm9fYXV0b19wb3NzZXNzCisgICAgPlx4ezIwMjh9XHh7MGJ9CisgCisvXj5bXHB7WHNwfV0rL3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKworL14+XHB7WHBzfS91dGYKKyAgICA+XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorICAgID5ceHthMH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezBifQorCisvXj5ccHtYcHN9Ky91dGYKKyAgICA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKworL14+XHB7WHBzfSs/L3V0ZgorICAgID5ceHsxNjgwfVx4ezIwMjh9XHh7MGJ9CisKKy9ePlxwe1hwc30qL3V0ZgorICAgID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorICAgIAorL14+XHB7WHBzfXsyLDl9L3V0ZgorICAgID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorICAgIAorL14+XHB7WHBzfXsyLDl9Py91dGYKKyAgICA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAgICAKKy9ePltccHtYcHN9XS91dGYKKyAgICA+XHh7MjAyOH1ceHswYn0KKyAKKy9ePltccHtYcHN9XSsvdXRmCisgICAgPiBceHswOX1ceHswYX1ceHswY31ceHswZH1ceHthMH1ceHsxNjgwfVx4ezIwMjh9XHh7MGJ9CisKKy9eXHB7WHdkfS91dGYKKyAgICBBQkNECisgICAgMTIzNAorICAgIFx4ezZjYX0KKyAgICBceHthNmN9CisgICAgXHh7MTBhN30KKyAgICBfQUJDCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBbXQorCisvXlxwe1h3ZH0rL3V0ZgorICAgIEFCQ0QxMjM0XHh7NmNhfVx4e2E2Y31ceHsxMGE3fV8KKworL15ccHtYd2R9Ki91dGYKKyAgICBBQkNEMTIzNFx4ezZjYX1ceHthNmN9XHh7MTBhN31fCisgICAgCisvXlxwe1h3ZH17Miw5fS91dGYKKyAgICBBXzEyXHh7NmNhfVx4e2E2Y31ceHsxMGE3fQorICAgIAorL15bXHB7WHdkfV0vdXRmCisgICAgQUJDRDEyMzRfCisgICAgMTIzNGFiY2RfCisgICAgXHh7NmNhfQorICAgIFx4e2E2Y30KKyAgICBceHsxMGE3fQorICAgIF9BQkMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFtdCisgCisvXltccHtYd2R9XSsvdXRmCisgICAgQUJDRDEyMzRceHs2Y2F9XHh7YTZjfVx4ezEwYTd9XworCisjIFVuaWNvZGUgcHJvcGVydGllcyBmb3IgXGIgYWJkIFxCIAorCisvXGIuLi5cQi91dGYsdWNwCisgICAgYWJjXworICAgIFx4ezM3ZX1hYmNceHszNzZ9CisgICAgXHh7MzdlfVx4ezM3Nn1ceHszNzF9XHh7MzkzfVx4ezM5NH0KKyAgICAhXHh7YzB9KytceHtjMX1ceHtjMn0KKyAgICAhXHh7YzB9KysrKysKKworIyBXaXRob3V0IFBDUkVfVUNQLCBub24tQVNDSUkgYWx3YXlzIGZhaWwsIGV2ZW4gaWYgPCAyNTYgIAorCisvXGIuLi5cQi91dGYKKyAgICBhYmNfCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHszN2V9YWJjXHh7Mzc2fQorICAgIFx4ezM3ZX1ceHszNzZ9XHh7MzcxfVx4ezM5M31ceHszOTR9CisgICAgIVx4e2MwfSsrXHh7YzF9XHh7YzJ9CisgICAgIVx4e2MwfSsrKysrCisKKyMgV2l0aCBQQ1JFX1VDUCwgbm9uLVVURjggY2hhcnMgdGhhdCBhcmUgPCAyNTYgc3RpbGwgY2hlY2sgcHJvcGVydGllcyAgCisKKy9cYi4uLlxCL3VjcAorICAgIGFiY18KKyAgICAhXHh7YzB9KytceHtjMX1ceHtjMn0KKyAgICAhXHh7YzB9KysrKysKKyAgICAKKyMgQ2FzZWxlc3Mgc2luZ2xlIG5lZ2F0ZWQgY2hhcmFjdGVycyA+IDEyNyBuZWVkIFVDUCBzdXBwb3J0IAorCisvW15ceHsxMDB9XS9pLHV0ZgorICAgIFx4ezEwMH1ceHsxMDF9WAorCisvW15ceHsxMDB9XSsvaSx1dGYKKyAgICBceHsxMDB9XHh7MTAxfVhYCisKKy9eXFgvdXRmCisgICAgQVw9cHMKKyAgICBBXD1waAorICAgIEFceHszMDB9XHh7MzAxfVw9cHMKKyAgICBBXHh7MzAwfVx4ezMwMX1cPXBoCisgICAgQVx4ezMwMX1cPXBzCisgICAgQVx4ezMwMX1cPXBoCisgICAgCisvXlxYezIsM30vdXRmCisgICAgQVw9cHMKKyAgICBBXD1waAorICAgIEFBXD1wcworICAgIEFBXD1waAorICAgIEFceHszMDB9XHh7MzAxfVw9cHMKKyAgICBBXHh7MzAwfVx4ezMwMX1cPXBoCisgICAgQVx4ezMwMH1ceHszMDF9QVx4ezMwMH1ceHszMDF9XD1wcworICAgIEFceHszMDB9XHh7MzAxfUFceHszMDB9XHh7MzAxfVw9cGgKKworL15cWHsyfS91dGYKKyAgICBBQVw9cHMKKyAgICBBQVw9cGgKKyAgICBBXHh7MzAwfVx4ezMwMX1BXHh7MzAwfVx4ezMwMX1cPXBzCisgICAgQVx4ezMwMH1ceHszMDF9QVx4ezMwMH1ceHszMDF9XD1waAorICAgIAorL15cWCsvdXRmCisgICAgQUFcPXBzCisgICAgQUFcPXBoCisKKy9eXFgrP1ovdXRmCisgICAgQUFcPXBzCisgICAgQUFcPXBoCisKKyMgVGhlc2UgYXJlIHRlc3RzIGZvciBleHRlbmRlZCBncmFwaGVtZSBjbHVzdGVycyAgCisKKy9eXFgvdXRmLGFmdGVydGV4dAorICAgIEdceHszNGV9XHh7MzRlfVgKKyAgICBceHszNGV9XHh7MzRlfVgKKyAgICBceDA0WAorICAgIFx4ezExMDB9WAorICAgIFx4ezExMDB9XHh7MzRlfVgKKyAgICBceHsxYjA0fVx4ezFiMDR9WAorXD0gVGhlc2UgbWF0Y2ggdXAgdG8gdGhlIHJvbWFuIGxldHRlcnMKKyAgICBceHsxMTExfVx4ezExMTF9TCxMCisgICAgXHh7MTExMX1ceHsxMTExfVx4ezExNjl9TCxMLFYKKyAgICBceHsxMTExfVx4e2FlNGN9TCwgTFYKKyAgICBceHsxMTExfVx4e2FkODl9TCwgTFZUCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExNjl9TCwgTFYsIFYKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTE2OX1ceHsxMTY5fUwsIExWLCBWLCBWCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExNjl9XHh7MTFmZX1MLCBMViwgViwgVAorICAgIFx4ezExMTF9XHh7YWQ4OX1ceHsxMWZlfUwsIExWVCwgVAorICAgIFx4ezExMTF9XHh7YWQ4OX1ceHsxMWZlfVx4ezExZmV9TCwgTFZULCBULCBUCisgICAgXHh7YWQ4OX1ceHsxMWZlfVx4ezExZmV9TFZULCBULCBUCitcPSBUaGVzZSBtYXRjaCBqdXN0IHRoZSBmaXJzdCBjb2RlcG9pbnQgKGludmFsaWQgc2VxdWVuY2UpCisgICAgXHh7MTExMX1ceHsxMWZlfUwsIFQKKyAgICBceHthZTRjfVx4ezExMTF9TFYsIEwKKyAgICBceHthZTRjfVx4e2FlNGN9TFYsIExWCisgICAgXHh7YWU0Y31ceHthZDg5fUxWLCBMVlQKKyAgICBceHsxMTY5fVx4ezExMTF9ViwgTAorICAgIFx4ezExNjl9XHh7YWU0Y31WLCBMVgorICAgIFx4ezExNjl9XHh7YWQ4OX1WLCBMVlQKKyAgICBceHthZDg5fVx4ezExMTF9TFZULCBMCisgICAgXHh7YWQ4OX1ceHsxMTY5fUxWVCwgVgorICAgIFx4e2FkODl9XHh7YWU0Y31MVlQsIExWCisgICAgXHh7YWQ4OX1ceHthZDg5fUxWVCwgTFZUCisgICAgXHh7MTFmZX1ceHsxMTExfVQsIEwKKyAgICBceHsxMWZlfVx4ezExNjl9VCwgVgorICAgIFx4ezExZmV9XHh7YWU0Y31ULCBMVgorICAgIFx4ezExZmV9XHh7YWQ4OX1ULCBMVlQKK1w9IFRlc3QgZXh0ZW5kIGFuZCBzcGFjaW5nIG1hcmsKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MDcxMX1MLCBMViwgZXh0ZW5kCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezFiMDR9TCwgTFYsIHNwYWNpbmcgbWFyaworICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxYjA0fVx4ezA3MTF9XHh7MWIwNH1MLCBMViwgc3BhY2luZyBtYXJrLCBleHRlbmQsIHNwYWNpbmcgbWFyaworXD0gVGVzdCBDUiwgTEYsIGFuZCBjb250cm9sCisgICAgXHgwZFx4ezA3MTF9Q1IsIGV4dGVuZAorICAgIFx4MGRceHsxYjA0fUNSLCBzcGFjaW5nbWFyaworICAgIFx4MGFceHswNzExfUxGLCBleHRlbmQKKyAgICBceDBhXHh7MWIwNH1MRiwgc3BhY2luZ21hcmsKKyAgICBceDBiXHh7MDcxMX1Db250cm9sLCBleHRlbmQKKyAgICBceDA5XHh7MWIwNH1Db250cm9sLCBzcGFjaW5nbWFyaworXD0gVGhlcmUgYXJlIG5vIFByZXBlbmQgY2hhcmFjdGVycywgc28gd2UgY2FuJ3QgdGVzdCBQcmVwZW5kLCBDUgorICAgIAorL14oPz5cWHsyfSlYL3V0ZixhZnRlcnRleHQKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAgICAKKy9eXFh7Miw0fVgvdXRmLGFmdGVydGV4dAorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorCisvXlxYezIsNH0/WC91dGYsYWZ0ZXJ0ZXh0CisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisKKy9ceHsxZTllfSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisKKy9belx4ezFlOWV9XSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisKKy9ceHswMGRmfSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisKKy9belx4ezAwZGZ9XSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisKKy9ceHsxZjg4fSsvaSx1dGYKKyAgICBceHsxZjg4fVx4ezFmODB9CisKKy9belx4ezFmODh9XSsvaSx1dGYKKyAgICBceHsxZjg4fVx4ezFmODB9CisKKyMgUGVybCBtYXRjaGVzIHRoZXNlIAorCisvXHh7MDBiNX0rL2ksdXRmCisgICAgXHh7MDBiNX1ceHswMzljfVx4ezAzYmN9CisKKy9ceHswMzljfSsvaSx1dGYKKyAgICBceHswMGI1fVx4ezAzOWN9XHh7MDNiY30KKworL1x4ezAzYmN9Ky9pLHV0ZgorICAgIFx4ezAwYjV9XHh7MDM5Y31ceHswM2JjfQorCisKKy9ceHswMGM1fSsvaSx1dGYKKyAgICBceHswMGM1fVx4ezAwZTV9XHh7MjEyYn0KKworL1x4ezAwZTV9Ky9pLHV0ZgorICAgIFx4ezAwYzV9XHh7MDBlNX1ceHsyMTJifQorCisvXHh7MjEyYn0rL2ksdXRmCisgICAgXHh7MDBjNX1ceHswMGU1fVx4ezIxMmJ9CisKKy9ceHswMWM0fSsvaSx1dGYKKyAgICBceHswMWM0fVx4ezAxYzV9XHh7MDFjNn0KKworL1x4ezAxYzV9Ky9pLHV0ZgorICAgIFx4ezAxYzR9XHh7MDFjNX1ceHswMWM2fQorCisvXHh7MDFjNn0rL2ksdXRmCisgICAgXHh7MDFjNH1ceHswMWM1fVx4ezAxYzZ9CisKKy9ceHswMWM3fSsvaSx1dGYKKyAgICBceHswMWM3fVx4ezAxYzh9XHh7MDFjOX0KKworL1x4ezAxYzh9Ky9pLHV0ZgorICAgIFx4ezAxYzd9XHh7MDFjOH1ceHswMWM5fQorCisvXHh7MDFjOX0rL2ksdXRmCisgICAgXHh7MDFjN31ceHswMWM4fVx4ezAxYzl9CisKKworL1x4ezAxY2F9Ky9pLHV0ZgorICAgIFx4ezAxY2F9XHh7MDFjYn1ceHswMWNjfQorCisvXHh7MDFjYn0rL2ksdXRmCisgICAgXHh7MDFjYX1ceHswMWNifVx4ezAxY2N9CisKKy9ceHswMWNjfSsvaSx1dGYKKyAgICBceHswMWNhfVx4ezAxY2J9XHh7MDFjY30KKworL1x4ezAxZjF9Ky9pLHV0ZgorICAgIFx4ezAxZjF9XHh7MDFmMn1ceHswMWYzfQorCisvXHh7MDFmMn0rL2ksdXRmCisgICAgXHh7MDFmMX1ceHswMWYyfVx4ezAxZjN9CisKKy9ceHswMWYzfSsvaSx1dGYKKyAgICBceHswMWYxfVx4ezAxZjJ9XHh7MDFmM30KKworL1x4ezAzNDV9Ky9pLHV0ZgorICAgIFx4ezAzNDV9XHh7MDM5OX1ceHswM2I5fVx4ezFmYmV9CisKKy9ceHswMzk5fSsvaSx1dGYKKyAgICBceHswMzQ1fVx4ezAzOTl9XHh7MDNiOX1ceHsxZmJlfQorCisvXHh7MDNiOX0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKworL1x4ezFmYmV9Ky9pLHV0ZgorICAgIFx4ezAzNDV9XHh7MDM5OX1ceHswM2I5fVx4ezFmYmV9CisKKy9ceHswMzkyfSsvaSx1dGYKKyAgICBceHswMzkyfVx4ezAzYjJ9XHh7MDNkMH0KKworL1x4ezAzYjJ9Ky9pLHV0ZgorICAgIFx4ezAzOTJ9XHh7MDNiMn1ceHswM2QwfQorCisvXHh7MDNkMH0rL2ksdXRmCisgICAgXHh7MDM5Mn1ceHswM2IyfVx4ezAzZDB9CisgICAgCisKKy9ceHswMzk1fSsvaSx1dGYKKyAgICBceHswMzk1fVx4ezAzYjV9XHh7MDNmNX0KKworL1x4ezAzYjV9Ky9pLHV0ZgorICAgIFx4ezAzOTV9XHh7MDNiNX1ceHswM2Y1fQorCisvXHh7MDNmNX0rL2ksdXRmCisgICAgXHh7MDM5NX1ceHswM2I1fVx4ezAzZjV9CisKKy9ceHswMzk4fSsvaSx1dGYKKyAgICBceHswMzk4fVx4ezAzYjh9XHh7MDNkMX1ceHswM2Y0fQorCisvXHh7MDNiOH0rL2ksdXRmCisgICAgXHh7MDM5OH1ceHswM2I4fVx4ezAzZDF9XHh7MDNmNH0KKworL1x4ezAzZDF9Ky9pLHV0ZgorICAgIFx4ezAzOTh9XHh7MDNiOH1ceHswM2QxfVx4ezAzZjR9CisKKy9ceHswM2Y0fSsvaSx1dGYKKyAgICBceHswMzk4fVx4ezAzYjh9XHh7MDNkMX1ceHswM2Y0fQorCisvXHh7MDM5YX0rL2ksdXRmCisgICAgXHh7MDM5YX1ceHswM2JhfVx4ezAzZjB9CisKKy9ceHswM2JhfSsvaSx1dGYKKyAgICBceHswMzlhfVx4ezAzYmF9XHh7MDNmMH0KKworL1x4ezAzZjB9Ky9pLHV0ZgorICAgIFx4ezAzOWF9XHh7MDNiYX1ceHswM2YwfQorICAgIAorL1x4ezAzYTB9Ky9pLHV0ZgorICAgIFx4ezAzYTB9XHh7MDNjMH1ceHswM2Q2fQorCisvXHh7MDNjMH0rL2ksdXRmCisgICAgXHh7MDNhMH1ceHswM2MwfVx4ezAzZDZ9CisKKy9ceHswM2Q2fSsvaSx1dGYKKyAgICBceHswM2EwfVx4ezAzYzB9XHh7MDNkNn0KKworL1x4ezAzYTF9Ky9pLHV0ZgorICAgIFx4ezAzYTF9XHh7MDNjMX1ceHswM2YxfQorCisvXHh7MDNjMX0rL2ksdXRmCisgICAgXHh7MDNhMX1ceHswM2MxfVx4ezAzZjF9CisKKy9ceHswM2YxfSsvaSx1dGYKKyAgICBceHswM2ExfVx4ezAzYzF9XHh7MDNmMX0KKworL1x4ezAzYTN9Ky9pLHV0ZgorICAgIFx4ezAzQTN9XHh7MDNDMn1ceHswM0MzfQorCisvXHh7MDNjMn0rL2ksdXRmCisgICAgXHh7MDNBM31ceHswM0MyfVx4ezAzQzN9CisKKy9ceHswM2MzfSsvaSx1dGYKKyAgICBceHswM0EzfVx4ezAzQzJ9XHh7MDNDM30KKworL1x4ezAzYTZ9Ky9pLHV0ZgorICAgIFx4ezAzYTZ9XHh7MDNjNn1ceHswM2Q1fQorCisvXHh7MDNjNn0rL2ksdXRmCisgICAgXHh7MDNhNn1ceHswM2M2fVx4ezAzZDV9CisKKy9ceHswM2Q1fSsvaSx1dGYKKyAgICBceHswM2E2fVx4ezAzYzZ9XHh7MDNkNX0KKworL1x4ezAzYzl9Ky9pLHV0ZgorICAgIFx4ezAzYzl9XHh7MDNhOX1ceHsyMTI2fQorCisvXHh7MDNhOX0rL2ksdXRmCisgICAgXHh7MDNjOX1ceHswM2E5fVx4ezIxMjZ9CisKKy9ceHsyMTI2fSsvaSx1dGYKKyAgICBceHswM2M5fVx4ezAzYTl9XHh7MjEyNn0KKyAgICAKKy9ceHsxZTYwfSsvaSx1dGYKKyAgICBceHsxZTYwfVx4ezFlNjF9XHh7MWU5Yn0KKworL1x4ezFlNjF9Ky9pLHV0ZgorICAgIFx4ezFlNjB9XHh7MWU2MX1ceHsxZTlifQorCisvXHh7MWU5Yn0rL2ksdXRmCisgICAgXHh7MWU2MH1ceHsxZTYxfVx4ezFlOWJ9CisgICAgCisvXHh7MWU5ZX0rL2ksdXRmCisgICAgXHh7MWU5ZX1ceHswMGRmfQorCisvXHh7MDBkZn0rL2ksdXRmCisgICAgXHh7MWU5ZX1ceHswMGRmfQorICAgIAorL1x4ezFmODh9Ky9pLHV0ZgorICAgIFx4ezFmODh9XHh7MWY4MH0KKworL1x4ezFmODB9Ky9pLHV0ZgorICAgIFx4ezFmODh9XHh7MWY4MH0KKworL1x4ezAwNGJ9Ky9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorCisvXHh7MDA2Yn0rL2ksdXRmCisgICAgXHh7MDA0Yn1ceHswMDZifVx4ezIxMmF9CisKKy9ceHsyMTJhfSsvaSx1dGYKKyAgICBceHswMDRifVx4ezAwNmJ9XHh7MjEyYX0KKworL1x4ezAwNTN9Ky9pLHV0ZgorICAgIFx4ezAwNTN9XHh7MDA3M31ceHswMTdmfQorCisvXHh7MDA3M30rL2ksdXRmCisgICAgXHh7MDA1M31ceHswMDczfVx4ezAxN2Z9CisKKy9ceHswMTdmfSsvaSx1dGYKKyAgICBceHswMDUzfVx4ezAwNzN9XHh7MDE3Zn0KKworL2lzdC9pLHV0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgaWt0CisKKy9pcyt0L2ksdXRmCisgICAgaVNzXHh7MTdmfXQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGlrdAorCisvaXMrP3QvaSx1dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGlrdAorCisvaXM/dC9pLHV0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgaWt0CisKKy9pc3syfXQvaSx1dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGlza3QKKworL15ccHtYdWN9L3V0ZgorICAgICRhYmMKKyAgICBAYWJjCisgICAgYGFiYworICAgIFx4ezEyMzR9YWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKKworL15ccHtYdWN9Ky91dGYKKyAgICAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9KioKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezlmfQorCisvXlxwe1h1Y30rPy91dGYKKyAgICAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9KioKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezlmfQorCisvXlxwe1h1Y30rP1wqL3V0ZgorICAgICRAYFx4e2EwfVx4ezEyMzR9XHh7ZTAwMH0qKgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7OWZ9CisKKy9eXHB7WHVjfSsrL3V0ZgorICAgICRAYFx4e2EwfVx4ezEyMzR9XHh7ZTAwMH0qKgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7OWZ9CisKKy9eXHB7WHVjfXszLDV9L3V0ZgorICAgICRAYFx4e2EwfVx4ezEyMzR9XHh7ZTAwMH0qKgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7OWZ9CisKKy9eXHB7WHVjfXszLDV9Py91dGYKKyAgICAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9KioKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezlmfQorCisvXltccHtYdWN9XS91dGYKKyAgICAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9KioKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezlmfQorCisvXltccHtYdWN9XSsvdXRmCisgICAgJEBgXHh7YTB9XHh7MTIzNH1ceHtlMDAwfSoqCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHs5Zn0KKworL15cUHtYdWN9L3V0ZgorICAgIGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgJGFiYworICAgIEBhYmMKKyAgICBgYWJjCisgICAgXHh7MTIzNH1hYmMKKworL15bXFB7WHVjfV0vdXRmCisgICAgYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAkYWJjCisgICAgQGFiYworICAgIGBhYmMKKyAgICBceHsxMjM0fWFiYworCisvXkFccytaL3V0Zix1Y3AKKyAgICBBXHh7MjAwNX1aCisgICAgQVx4ezg1fVx4ezE4MGV9XHh7MjAwNX1aCisKKy9eQVtcc10rWi91dGYsdWNwCisgICAgQVx4ezIwMDV9WgorICAgIEFceHs4NX1ceHsxODBlfVx4ezIwMDV9WgorCisvKD88PVx4ezEwMH0pXHh7MjAwfSg/PVx4ezMwMH0pL3V0ZixhbGx1c2VkdGV4dAorICAgIFx4ezEwMH1ceHsyMDB9XHh7MzAwfQorCisjIEVuZCBvZiB0ZXN0aW5wdXQ3CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXQ4IGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTNiMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0OApAQCAtMCwwICsxLDE4NSBAQAorIyBUaGVyZSBhcmUgdHdvIHNvcnRzIG9mIHBhdHRlcm5zIGluIHRoaXMgdGVzdC4gQSBudW1iZXIgb2YgdGhlbSBhcmUKKyMgcmVwcmVzZW50YXRpdmUgcGF0dGVybnMgd2hvc2UgbGVuZ3RocyBhbmQgb2Zmc2V0cyBhcmUgY2hlY2tlZC4gVGhpcyBpcyBqdXN0IGEKKyMgZG91YmxlY2hlY2sgdGVzdCB0byBlbnN1cmUgdGhlIHNpemVzIGRvbid0IGdvIGhvcnJpYmx5IHdyb25nIHdoZW4gc29tZXRoaW5nCisjIGlzIGNoYW5nZWQuIFRoZSBvcGVyYXRpb24gb2YgdGhlc2UgcGF0dGVybnMgaXMgY2hlY2tlZCBpbiBvdGhlciB0ZXN0cy4KKyMKKyMgVGhpcyBmaWxlIGFsc28gY29udGFpbnMgdGVzdHMgd2hvc2Ugb3V0cHV0IHZhcmllcyB3aXRoIGNvZGUgdW5pdCBzaXplIGFuZC9vcgorIyBsaW5rIHNpemUuIFVuaWNvZGUgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhlc2UgdGVzdHMuIFRoZXJlIGFyZSBzZXBhcmF0ZQorIyBvdXRwdXQgZmlsZXMgZm9yIGVhY2ggY29kZSB1bml0IHNpemUgYW5kIGxpbmsgc2l6ZS4KKworI3BhdHRlcm4gZnVsbGJpbmNvZGUsbWVtb3J5CisKKy8oKD9pKWIpLworCisvKD9zKSguKlh8XkIpLworCisvKD9zOi4qWHxeQikvCisKKy9eW1s6YWxudW06XV0vCisKKy8jL0l4CisKKy9hIy9JeAorCisveD8rLworCisveCsrLworCisveHsxLDN9Ky8KKworLyh4KSorLworCisvXigoYSspKD9VKShbYWJdKykoPy1VKShbYmNdKykoXHcqKSkvCisKKyI4SlwkV0VcPFwuclhcK2l4XFtkMWJcIUhcI1w/dlYwdnJLXDpaSDFcPTJNXD5pVlw7XD9hUGhGQlw8XCp2V1xAUVdcQHNPOVx9Y2ZaQVwtaVwnd1wlaEtkNmd0MVVKUFwsMTVfXCNRWVwkTVxeTXNzX1VcL1xdXCZMSzlcWzV2UXViXF53XFtLRERcPEVqbWhVWlw/XC5ha3AyZEZcPnFtalw7Mlx9WVdGZFl4XC5BcFxdaGpDUFRQXChuMjhrXCszXDtvXCZXWHFzXC9nT1hkclwkXDpyXCdkbzBcO2I0Y1woZl9Hclw9XCJcXDRcKVxbMDFUN2FqUUp2TFwkV1x+bUxfc1NcLzRoXDp4XCpcW1pOXD1LTHNcJkw1elhcL1wvXD5pdFwsb1w6YVVcKFw7Wlw+cFdcJlQ3b1BcJzJLXF5FXDp4OVwnY1xbXCV6XC1cLDY0SlE1QWVIX0dcI0tpalVLZ2hRd1xeXFx2ZWEzYVw/a2thX0dcJDhcI1xgXCpreW5zeHpCTHJ1XCdcXWtfXFs3RnJWeFx9XF5cPVwkYmx4XD5zXC1OXCVqXDtEXCphWkRuc3dcOllLWlwlUVwuS25lOVwjaFBcP1wrYjNcKFNPdkxcLFxeXDtcJnU1XEBcPzVDNUJoYlw9bVwtdkVoX0wxNUpsXF1VXCkwUlA2XHtxXCVMXF5fejVFXCdEdzZYXGIiCisKKyJcJFw8XC5YXCtpeFxbZDFiXCFIXCNcP3ZWMHZyS1w6WkgxXD0yTVw+aVZcO1w/YVBoRkJcPFwqdldcQFFXXEBzTzlcfWNmWkFcLWlcJ3dcJWhLZDZndDFVSlBcLDE1X1wjUVlcJE1cXk1zc19VXC9cXVwmTEs5XFs1dlF1Ylxed1xbS0REXDxFam1oVVpcP1wuYWtwMmRGXD5xbWpcOzJcfVlXRmRZeFwuQXBcXWhqQ1BUUFwobjI4a1wrM1w7b1wmV1hxc1wvZ09YZHJcJFw6clwnZG8wXDtiNGNcKGZfR3JcPVwiXFw0XClcWzAxVDdhalFKdkxcJFdcfm1MX3NTXC80aFw6eFwqXFtaTlw9S0xzXCZMNXpYXC9cL1w+aXRcLG9cOmFVXChcO1pcPnBXXCZUN29QXCcyS1xeRVw6eDlcJ2NcW1wlelwtXCw2NEpRNUFlSF9HXCNLaWpVS2doUXdcXlxcdmVhM2FcP2trYV9HXCQ4XCNcYFwqa3luc3h6QkxydVwnXF1rX1xbN0ZyVnhcfVxeXD1cJGJseFw+c1wtTlwlalw7RFwqYVpEbnN3XDpZS1pcJVFcLktuZTlcI2hQXD9cK2IzXChTT3ZMXCxcXlw7XCZ1NVxAXD81QzVCaGJcPW1cLXZFaF9MMTVKbFxdVVwpMFJQNlx7cVwlTFxeX3o1RVwnRHc2WFxiIgorCisvKGEoPzEpYikvCisKKy8oYSg/MSkrYikvCisKKy9hKD9QPG5hbWUxPmJ8YylkKD9QPGxvbmdlcm5hbWUyPmUpLworCisvKD86YSg/UDxjPmMoP1A8ZD5kKSkpKD9QPGE+YSkvCisKKy8oP1A8YT5hKS4uLig/UD1hKWJiYig/UD5hKWQvCisKKy9hYmMoP0MyNTUpZGUoP0MpZi8KKworL2FiY2RlL2F1dG9fY2FsbG91dAorCisvXHh7MTAwfS91dGYKKworL1x4ezEwMDB9L3V0ZgorCisvXHh7MTAwMDB9L3V0ZgorCisvXHh7MTAwMDAwfS91dGYKKworL1x4ezEwZmZmZn0vdXRmCisKKy9ceHsxMTAwMDB9L3V0ZgorCisvW1x4e2ZmfV0vdXRmCisKKy9bXHh7MTAwfV0vdXRmCisKKy9ceDgwL3V0ZgorCisvXHhmZi91dGYKKworL1x4ezAwNDF9XHh7MjI2Mn1ceHswMzkxfVx4ezAwMmV9L0ksdXRmCisKKy9ceHtENTVjfVx4e2FkNmR9XHh7QzVCNH0vSSx1dGYKKworL1x4ezY1ZTV9XHh7NjcyY31ceHs4YTllfS9JLHV0ZgorCisvW1x4ezEwMH1dL3V0ZgorCisvW1pceHsxMDB9XS91dGYKKworL15bXHh7MTAwfVxFLVxRXEVceHsxNTB9XS91dGYKKworL15bXFHEgFxFLVxRxZBcRV0vdXRmCisKKy9eW1xRxIBcRS1cUcWQXEUvdXRmCisKKy9bXHB7TH1dLworCisvW1xwe15MfV0vCisKKy9bXFB7TH1dLworCisvW1xQe15MfV0vCisKKy9bYWJjXHB7TH1ceHswNjYwfV0vdXRmCisKKy9bXHB7TmR9XS91dGYKKworL1tccHtOZH0rLV0rL3V0ZgorCisvQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9L2ksdXRmCisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vdXRmCisKKy9bXHh7MTA1fS1ceHsxMDl9XS9pLHV0ZgorCisvKCAoICg/KDEpMHwpICkqICAgKS94CisKKy8oICAoPygxKTB8KSogICApL3gKKworL1thXS8KKworL1thXS91dGYKKworL1tceGFhXS8KKworL1tceGFhXS91dGYKKworL1teYV0vCisKKy9bXmFdL3V0ZgorCisvW15ceGFhXS8KKworL1teXHhhYV0vdXRmCisKKyNwYXR0ZXJuIC1tZW1vcnkKKworL1teXGRdL3V0Zix1Y3AKKworL1tbOl5hbHBoYTpdWzpeY250cmw6XV0rL3V0Zix1Y3AKKworL1tbOl5jbnRybDpdWzpeYWxwaGE6XV0rL3V0Zix1Y3AKKworL1tbOmFscGhhOl1dKy91dGYsdWNwCisKKy9bWzpeYWxwaGE6XVxTXSsvdXRmLHVjcAorCisvYWJjKGR8ZSkoKlRIRU4peCgxMjMoKlRIRU4pNHw1NjcoYnxxKSgqVEhFTil4eCkvCisKKy8oKChhXDIpfChhKilcZzwtMT4pKSphPy8KKworLygoPysxKShcMSkpLworCisiKD8xKSg/Iz8nKXsyfShhKSIKKworLy4oKD8yKSg/Uil8XDF8JCkoKS8KKworLy4oKD8zKSg/UikoKSg/Mil8XDF8JCkoKS8KKworLyg/MSkoKSgoKCgoKFwxKyspKVx4ODUpKyl8KSkvCisKKyMgQ2hlY2sgdGhlIGFic29sdXRlIGxpbWl0IG9uIG5lc3RpbmcgKD98IGV0Yy4gVGhpcyB2YXJpZXMgd2l0aCBjb2RlIHVuaXQKKyMgd2lkdGggYmVjYXVzZSB0aGUgd29ya3NwYWNlIGlzIGEgZGlmZmVyZW50IG51bWJlciBvZiBieXRlcy4gSXQgd2lsbCBmYWlsCisjIHdpdGggbGluayBzaXplIDIgaW4gOC1iaXQgYW5kIDE2LWJpdCBidXQgbm90IGluIDMyLWJpdC4KKworLyg/fCg/fCg/SjooP3woP3g6KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98CispKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkKKy9wYXJlbnNfbmVzdF9saW1pdD0xMDAwLC1mdWxsYmluY29kZQorCisjIFVzZSAiZXhwYW5kIiB0byBjcmVhdGUgc29tZSB2ZXJ5IGxvbmcgcGF0dGVybnMgd2l0aCBuZXN0ZWQgcGFyZW50aGVzZXMsIGluCisjIG9yZGVyIHRvIHRlc3Qgd29ya3NwYWNlIG92ZXJmbG93LiBBZ2FpbiwgdGhpcyB2YXJpZXMgd2l0aCBjb2RlIHVuaXQgd2lkdGgsCisjIGFuZCBldmVuIHdpdGggaXQgZmFpbHMgaW4gdHdvIG1vZGVzLCB0aGUgZXJyb3Igb2Zmc2V0IGRpZmZlcnMuIEl0IGFsc28gdmFyaWVzCisjIHdpdGggbGluayBzaXplIC0gaGVuY2UgbXVsdGlwbGUgdGVzdHMgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxMDV9KlRIRU46XFtBXXsyNTV9XFspXXsxMDZ9L2V4cGFuZCwtZnVsbGJpbmNvZGUKKworLyg/J0FCQydcW1tiYXJdKF17MTA2fSpUSEVOOlxbQV17MjU1fVxbKV17MTA3fS9leHBhbmQsLWZ1bGxiaW5jb2RlCisKKy8oPydBQkMnXFtbYmFyXShdezE1OX0qVEhFTjpcW0FdezI1NX1cWyldezE2MH0vZXhwYW5kLC1mdWxsYmluY29kZQorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxOTl9KlRIRU46XFtBXXsyNTV9XFspXXsyMDB9L2V4cGFuZCwtZnVsbGJpbmNvZGUKKworLyg/J0FCQydcW1tiYXJdKF17Mjk5fSpUSEVOOlxbQV17MjU1fVxbKV17MzAwfS9leHBhbmQsLWZ1bGxiaW5jb2RlCisKKy8oPygxKSg/MSkpezgsfSsoKS9kZWJ1ZworICAgIGFiY2QKKworLyg/KDEpfGEoPzEpYil7Mix9KygpL2RlYnVnCisgICAgYWJjZGUKKworLygoPzEpKD8yKSg/MykoPzQpKD81KSg/NikoPzcpKD84KSg/OSkoPzkpKD84KSg/NykoPzYpKD81KSg/NCkoPzMpKD8yKSg/MSkoPzApKXsyLH0oKSgpKCkoKSgpKCkoKSgpKCkvZGVidWcKKworIyBFbmQgb2YgdGVzdGlucHV0OApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0OSBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyNmY1ZgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RpbnB1dDkKQEAgLTAsMCArMSwyNjEgQEAKKyMgVGhpcyBzZXQgb2YgdGVzdHMgaXMgcnVuIG9ubHkgd2l0aCB0aGUgOC1iaXQgbGlicmFyeS4gVGhleSBtdXN0IG5vdCByZXF1aXJlIAorIyBVVEYtOCBvciBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQuICovCisgICAgCisjZm9yYmlkX3V0ZgorI25ld2xpbmVfZGVmYXVsdCBsZiBhbnkgYW55Y3JsZgorCisvYWIvCitcPSBFeHBlY3QgZXJyb3IgbWVzc2FnZSAodG9vIGJpZyBjaGFyKSBhbmQgbm8gbWF0Y2gKKyAgICBBXHh7MTIzfUIKKyAgICBBXG97NDQzfUIKKyAgCisvXHh7MTAwfS9JCisKKy9cb3s0MDB9L0kKKworLyAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIGxlYWRpbmcgY29tbWVudAorKD86ICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKykgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCB3b3JkCisoPzogICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKykgICkqICMgZnVydGhlciBva2F5LCBpZiBsZWQgYnkgYSBwZXJpb2QKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKyMgYWRkcmVzcworfCAgICAgICAgICAgICAgICAgICAgICMgIG9yCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICMgb25lIHdvcmQsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkuLi4uCisoPzoKK1teKCk8PkAsOzoiLlxcXFtcXVx4ODAtXHhmZlwwMDAtXDAxMFwwMTItXDAzN10gIHwgICMgYXRvbSBhbmQgc3BhY2UgcGFydHMsIG9yLi4uCitcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICAgICAgIHwgICMgY29tbWVudHMsIG9yLi4uCisKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKyMgcXVvdGVkIHN0cmluZ3MKKykqCis8ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgICAgICAgICAgICAgICAgICAjIGxlYWRpbmcgPAorKD86ICBAICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCBzdWJkb21haW4KKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBsZWQgYnkgYSBwZXJpb2QuLi4KKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAjICAgLi4uZnVydGhlciBva2F5CispKgorCisoPzogICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgLCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBAICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCBzdWJkb21haW4KKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBsZWQgYnkgYSBwZXJpb2QuLi4KKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAjICAgLi4uZnVydGhlciBva2F5CispKgorKSogIyBmdXJ0aGVyIG9rYXksIGlmIGxlZCBieSBjb21tYQorOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjbG9zaW5nIGNvbG9uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICk/ICMgICAgICAgb3B0aW9uYWwgcm91dGUKKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKykgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCB3b3JkCisoPzogICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKykgICkqICMgZnVydGhlciBva2F5LCBpZiBsZWQgYnkgYSBwZXJpb2QKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKyMgICAgICAgYWRkcmVzcyBzcGVjCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogID4gIyAgICAgICAgICAgICAgICAgIHRyYWlsaW5nID4KKyMgbmFtZSBhbmQgYWRkcmVzcworKSAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnQKKy9JeAorCisvXGgvSQorCisvXEgvSQorCisvXHYvSQorCisvXFYvSQorCisvXFIvSQorCisvW1xoXS9CCisgICAgPlx4MDk8CisKKy9bXGhdKy9CCisgICAgPlx4MDlceDIwXHhhMDwKKworL1tcdl0vQgorCisvW1xIXS9CCisKKy9bXlxoXS9CCisKKy9bXFZdL0IKKworL1tceDBhXFZdL0IKKworL1w3NzcvSQorCisvKCo6MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRilYWC9tYXJrCisgICAgWFgKKyAgICAgCisvKCo6MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRilYWC9tYXJrLGFsdF92ZXJibmFtZXMKKyAgICBYWAorICAgICAKKy8oKjowMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREUpWFgvbWFyaworICAgIFhYCisKKy8oKjowMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREUpWFgvbWFyayxhbHRfdmVyYm5hbWVzCisgICAgWFgKKworL1x1MDEwMC9hbHRfYnN1eCxhbGxvd19lbXB0eV9jbGFzcyxtYXRjaF91bnNldF9iYWNrcmVmLGR1cG5hbWVzCisKKy9bXHUwMTAwLVx1MDIwMF0vYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworCisvW15ceDAwLWFdezEyLH1bXmItXHhmZl0qL0IKKworL1teXHNdKlxzKiBbXlxXXStcVysgW15cZF0qP1xkMCBbXlxkXHddezQsNn0/XHcqQS9CCisKKy8oKk1BUks6YVx4ezEwMH1iKXovYWx0X3ZlcmJuYW1lcyAKKworIyBFbmQgb2YgdGVzdGlucHV0OQpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0RUJDIGIvZGlzdDIvdGVzdGRhdGEvdGVzdGlucHV0RUJDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZGYyMGIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0aW5wdXRFQkMKQEAgLTAsMCArMSwxMzcgQEAKKyMgVGhpcyBpcyBhIHNwZWNpYWxpemVkIHRlc3QgZm9yIGNoZWNraW5nLCB3aGVuIFBDUkUyIGlzIGNvbXBpbGVkIHdpdGggdGhlCisjIEVCQ0RJQyBvcHRpb24gYnV0IGluIGFuIEFTQ0lJIGVudmlyb25tZW50LCB0aGF0IG5ld2xpbmUsIHdoaXRlIHNwYWNlLCBhbmQgXGMKKyMgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nLiBJdCBjYXRjaGVzIGNhc2VzIHdoZXJlIGV4cGxpY2l0IHZhbHVlcyBzdWNoIGFzIDB4MGEKKyMgaGF2ZSBiZWVuIHVzZWQgaW5zdGVhZCBvZiBuYW1lcyBsaWtlIENIQVJfTEYuIE5lZWRsZXNzIHRvIHNheSwgaXQgaXMgbm90IGEKKyMgZ2VudWluZSBFQkNESUMgdGVzdCEgSW4gcGF0dGVybnMsIGFscGhhYmV0aWMgY2hhcmFjdGVycyB0aGF0IGZvbGxvdyBhCisjIGJhY2tzbGFzaCBtdXN0IGJlIGluIEVCQ0RJQyBjb2RlLiBJbiBkYXRhLCBOTCwgTkVMLCBMRiwgRVNDLCBhbmQgREVMIG11c3QgYmUKKyMgaW4gRUJDRElDLCBidXQgY2FuIG9mIGNvdXJzZSBiZSBzcGVjaWZpZWQgYXMgZXNjYXBlcy4KKworIyBUZXN0IGRlZmF1bHQgbmV3bGluZSBhbmQgdmFyaWF0aW9ucworCisvXkEvbQorICAgIEFCQworICAgIDEyXHgxNUFCQworCisvXkEvbSxuZXdsaW5lPWFueQorICAgIDEyXHgxNUFCQworICAgIDEyXHgwZEFCQworICAgIDEyXHgwZFx4MTVBQkMKKyAgICAxMlx4MjVBQkMKKworL15BL20sbmV3bGluZT1hbnljcmxmCisgICAgMTJceDE1QUJDCisgICAgMTJceDBkQUJDCisgICAgMTJceDBkXHgxNUFCQworICAgICoqIEZhaWwKKyAgICAxMlx4MjVBQkMKKworIyBUZXN0IFxoCisKKy9eQVyILworICAgIEEgQgorICAgIEFceDQxQiAKKworIyBUZXN0IFxICisKKy9eQVzILworICAgIEFCCisgICAgQVx4NDJCIAorICAgICoqIEZhaWwKKyAgICBBIEIKKyAgICBBXHg0MUIgCisKKyMgVGVzdCBcUgorCisvXkFc2S8KKyAgICBBXHgxNUIKKyAgICBBXHgwZEIKKyAgICBBXHgyNUIKKyAgICBBXHgwYkIKKyAgICBBXHgwY0IKKyAgICAqKiBGYWlsCisgICAgQSBCCisKKyMgVGVzdCBcdgorCisvXkFcpS8KKyAgICBBXHgxNUIKKyAgICBBXHgwZEIKKyAgICBBXHgyNUIKKyAgICBBXHgwYkIKKyAgICBBXHgwY0IKKyAgICAqKiBGYWlsCisgICAgQSBCCisKKyMgVGVzdCBcVgorCisvXkFc5S8KKyAgICBBIEIKKyAgICAqKiBGYWlsCisgICAgQVx4MTVCCisgICAgQVx4MGRCCisgICAgQVx4MjVCCisgICAgQVx4MGJCCisgICAgQVx4MGNCCisgICAgCisjIEZvciByZXBlYXRlZCBpdGVtcywgdXNlIGFuIGF0b21pYyBncm91cCBzbyB0aGF0IHRoZSBvdXRwdXQgaXMgdGhlIHNhbWUKKyMgZm9yIERGQSBtYXRjaGluZyAob3RoZXJ3aXNlIGl0IG1heSBzaG93IG11bHRpcGxlIG1hdGNoZXMpLgorCisjIFRlc3QgXGgrCisKKy9eQSg/PlyIKykvCisgICAgQSBCCisKKyMgVGVzdCBcSCsKKworL15BKD8+XMgrKS8KKyAgICBBQgorICAgICoqIEZhaWwKKyAgICBBIEIKKworIyBUZXN0IFxSKworCisvXkEoPz5c2SspLworICAgIEFceDE1QgorICAgIEFceDBkQgorICAgIEFceDI1QgorICAgIEFceDBiQgorICAgIEFceDBjQgorICAgICoqIEZhaWwKKyAgICBBIEIKKworIyBUZXN0IFx2KworCisvXkEoPz5cpSspLworICAgIEFceDE1QgorICAgIEFceDBkQgorICAgIEFceDI1QgorICAgIEFceDBiQgorICAgIEFceDBjQgorICAgICoqIEZhaWwKKyAgICBBIEIKKworIyBUZXN0IFxWKworCisvXkEoPz5c5SspLworICAgIEEgQgorICAgICoqIEZhaWwKKyAgICBBXHgxNUIKKyAgICBBXHgwZEIKKyAgICBBXHgyNUIKKyAgICBBXHgwYkIKKyAgICBBXHgwY0IKKyAgICAKKyMgVGVzdCBcYyBmdW5jdGlvbmFsaXR5IAorICAgIAorL1yDQFyDQVyDYlyDQ1yDZFyDRVyDZlyDR1yDaFyDSVyDSlyDS1yDbFyDbVyDTlyDT1yDcFyDcVyDclyDU1yDVFyDdVyDVlyDV1yDWFyDeVyDWi8KKyAgICBceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZgorCisvXINbXINcXINdXINeXINfLworICAgIFx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmCisgICAgCisvXIM/LworICAgIEFceGZmQgorCisvXIMmLworCisjIEVuZApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDEgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjhiZjkxCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDEKQEAgLTAsMCArMSw5MjYwIEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciBmZWF0dXJlcyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggYWxsIHZlcnNpb25zIG9mCisjIFBlcmwgPj0gNS4xMCwgaW4gbm9uLVVURiBtb2RlLiBJdCBzaG91bGQgcnVuIGNsZWFuIGZvciB0aGUgOC1iaXQsIDE2LWJpdCwgYW5kCisjIDMyLWJpdCBQQ1JFIGxpYnJhcmllcywgYW5kIGFsc28gdXNpbmcgdGhlIHBlcmx0ZXN0LnBsIHNjcmlwdC4KKyAgICAKKyNmb3JiaWRfdXRmCisjbmV3bGluZV9kZWZhdWx0IGxmIGFueSBhbnljcmxmCisjcGVybHRlc3QKKworL3RoZSBxdWljayBicm93biBmb3gvCisgICAgdGhlIHF1aWNrIGJyb3duIGZveAorIDA6IHRoZSBxdWljayBicm93biBmb3gKKyAgICBXaGF0IGRvIHlvdSBrbm93IGFib3V0IHRoZSBxdWljayBicm93biBmb3g/CisgMDogdGhlIHF1aWNrIGJyb3duIGZveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgVGhlIHF1aWNrIGJyb3duIEZPWAorTm8gbWF0Y2gKKyAgICBXaGF0IGRvIHlvdSBrbm93IGFib3V0IFRIRSBRVUlDSyBCUk9XTiBGT1g/CitObyBtYXRjaAorCisvVGhlIHF1aWNrIGJyb3duIGZveC9pCisgICAgdGhlIHF1aWNrIGJyb3duIGZveAorIDA6IHRoZSBxdWljayBicm93biBmb3gKKyAgICBUaGUgcXVpY2sgYnJvd24gRk9YCisgMDogVGhlIHF1aWNrIGJyb3duIEZPWAorICAgIFdoYXQgZG8geW91IGtub3cgYWJvdXQgdGhlIHF1aWNrIGJyb3duIGZveD8KKyAwOiB0aGUgcXVpY2sgYnJvd24gZm94CisgICAgV2hhdCBkbyB5b3Uga25vdyBhYm91dCBUSEUgUVVJQ0sgQlJPV04gRk9YPworIDA6IFRIRSBRVUlDSyBCUk9XTiBGT1gKKworL2FiY2RcdFxuXHJcZlxhXGVcMDcxXHgzYlwkXFxcP2NheHl6LworICAgIGFiY2RcdFxuXHJcZlxhXGU5O1wkXFw/Y2F4eXoKKyAwOiBhYmNkXHgwOVx4MGFceDBkXHgwY1x4MDdceDFiOTskXD9jYXh5egorCisvYSphYmM/eHl6K3BxcnszfWFiezIsfXh5ezQsNX1wcXswLDZ9QUJ7MCx9enovCisgICAgYWJ4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgMDogYWJ4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWJ4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWJ4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgMDogYWFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgMDogYWFhYWJ4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYmN4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYmN4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWJjeHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgMDogYWFiY3h5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBBenoKKyAwOiBhYWFiY3h5enBxcnJyYWJieHl5eXlwQXp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWFiY3h5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcUF6egorIDA6IGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFBenoKKyAwOiBhYWFiY3h5enBxcnJyYWJieHl5eXlwcXFxQXp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFxcXFBenoKKyAwOiBhYWFiY3h5enBxcnJyYWJieHl5eXlwcXFxcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFxcUF6egorIDA6IGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFxcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFxcXFBenoKKyAwOiBhYWFiY3h5enBxcnJyYWJieHl5eXlwcXFxcXFxQXp6CisgICAgYWFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgMDogYWFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWJ4eXp6cHFycnJhYmJ4eXl5eXBxQXp6CisgMDogYWJ4eXp6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFieHl6enpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWJ4eXp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWJ4eXp6enpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWFieHl6enp6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFhYWJ4eXp6enpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWFhYnh5enp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFiY3h5enpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYmN4eXp6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFiY3h5enp6cHFycnJhYmJ4eXl5eXBxQXp6CisgMDogYWFiY3h5enp6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFhYmN4eXp6enpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWFiY3h5enp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWFiY3h5enp6enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFhYWFiY3h5enp6enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWFiY3h5enp6enBxcnJyYWJiYnh5eXl5cHFBenoKKyAwOiBhYWFhYmN4eXp6enpwcXJycmFiYmJ4eXl5eXBxQXp6CisgICAgYWFhYWJjeHl6enp6cHFycnJhYmJieHl5eXl5cHFBenoKKyAwOiBhYWFhYmN4eXp6enpwcXJycmFiYmJ4eXl5eXlwcUF6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBBQnp6CisgMDogYWFhYmN4eXpwcXJycmFiYnh5eXl5cEFCenoKKyAgICBhYWFiY3h5enBxcnJyYWJieHl5eXlwQUJCenoKKyAwOiBhYWFiY3h5enBxcnJyYWJieHl5eXlwQUJCenoKKyAgICA+Pj5hYWFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgMDogYWFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgID5hYWFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFhYWFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgPj4+PmFiY3h5enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFiY3h5enBxcnJyYWJieHl5eXlwcUF6egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJ4eXpwcXJyYWJieHl5eXlwcUF6egorTm8gbWF0Y2gKKyAgICBhYnh5enBxcnJycmFiYnh5eXl5cHFBenoKK05vIG1hdGNoCisgICAgYWJ4eXpwcXJycmFieHl5eXlwcUF6egorTm8gbWF0Y2gKKyAgICBhYWFhYmN4eXp6enpwcXJycmFiYmJ4eXl5eXl5cHFBenoKK05vIG1hdGNoCisgICAgYWFhYWJjeHl6enp6cHFycnJhYmJieHl5eXBxQXp6CitObyBtYXRjaAorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFxcXFxQXp6CitObyBtYXRjaAorCisvXihhYmMpezEsMn16ei8KKyAgICBhYmN6egorIDA6IGFiY3p6CisgMTogYWJjCisgICAgYWJjYWJjenoKKyAwOiBhYmNhYmN6egorIDE6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgenoKK05vIG1hdGNoCisgICAgYWJjYWJjYWJjenoKK05vIG1hdGNoCisgICAgPj5hYmN6egorTm8gbWF0Y2gKKworL14oYis/fGEpezEsMn0/Yy8KKyAgICBiYworIDA6IGJjCisgMTogYgorICAgIGJiYworIDA6IGJiYworIDE6IGIKKyAgICBiYmJjCisgMDogYmJiYworIDE6IGJiCisgICAgYmFjCisgMDogYmFjCisgMTogYQorICAgIGJiYWMKKyAwOiBiYmFjCisgMTogYQorICAgIGFhYworIDA6IGFhYworIDE6IGEKKyAgICBhYmJiYmJiYmJiYmJjCisgMDogYWJiYmJiYmJiYmJiYworIDE6IGJiYmJiYmJiYmJiCisgICAgYmJiYmJiYmJiYmJhYworIDA6IGJiYmJiYmJiYmJiYWMKKyAxOiBhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFjCitObyBtYXRjaAorICAgIGFiYmJiYmJiYmJiYmFjCitObyBtYXRjaAorCisvXihiK3xhKXsxLDJ9Yy8KKyAgICBiYworIDA6IGJjCisgMTogYgorICAgIGJiYworIDA6IGJiYworIDE6IGJiCisgICAgYmJiYworIDA6IGJiYmMKKyAxOiBiYmIKKyAgICBiYWMKKyAwOiBiYWMKKyAxOiBhCisgICAgYmJhYworIDA6IGJiYWMKKyAxOiBhCisgICAgYWFjCisgMDogYWFjCisgMTogYQorICAgIGFiYmJiYmJiYmJiYmMKKyAwOiBhYmJiYmJiYmJiYmJjCisgMTogYmJiYmJiYmJiYmIKKyAgICBiYmJiYmJiYmJiYmFjCisgMDogYmJiYmJiYmJiYmJhYworIDE6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWMKK05vIG1hdGNoCisgICAgYWJiYmJiYmJiYmJiYWMKK05vIG1hdGNoCisKKy9eKGIrfGEpezEsMn0/YmMvCisgICAgYmJjCisgMDogYmJjCisgMTogYgorCisvXihiKnxiYSl7MSwyfT9iYy8KKyAgICBiYWJjCisgMDogYmFiYworIDE6IGJhCisgICAgYmJhYmMKKyAwOiBiYmFiYworIDE6IGJhCisgICAgYmFiYWJjCisgMDogYmFiYWJjCisgMTogYmEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhYmFiYmMKK05vIG1hdGNoCisgICAgYmFiYWJhYmMKK05vIG1hdGNoCisKKy9eKGJhfGIqKXsxLDJ9P2JjLworICAgIGJhYmMKKyAwOiBiYWJjCisgMTogYmEKKyAgICBiYmFiYworIDA6IGJiYWJjCisgMTogYmEKKyAgICBiYWJhYmMKKyAwOiBiYWJhYmMKKyAxOiBiYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmFiYWJiYworTm8gbWF0Y2gKKyAgICBiYWJhYmFiYworTm8gbWF0Y2gKKworL15cY2FcY0FcY1s7XGM6LworICAgIFx4MDFceDAxXGU7egorIDA6IFx4MDFceDAxXHgxYjt6CisKKy9eW2FiXF1jZGVdLworICAgIGF0aGluZworIDA6IGEKKyAgICBidGhpbmcKKyAwOiBiCisgICAgXXRoaW5nCisgMDogXQorICAgIGN0aGluZworIDA6IGMKKyAgICBkdGhpbmcKKyAwOiBkCisgICAgZXRoaW5nCisgMDogZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZnRoaW5nCitObyBtYXRjaAorICAgIFt0aGluZworTm8gbWF0Y2gKKyAgICBcXHRoaW5nCitObyBtYXRjaAorCisvXltdY2RlXS8KKyAgICBddGhpbmcKKyAwOiBdCisgICAgY3RoaW5nCisgMDogYworICAgIGR0aGluZworIDA6IGQKKyAgICBldGhpbmcKKyAwOiBlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhdGhpbmcKK05vIG1hdGNoCisgICAgZnRoaW5nCitObyBtYXRjaAorCisvXlteYWJcXWNkZV0vCisgICAgZnRoaW5nCisgMDogZgorICAgIFt0aGluZworIDA6IFsKKyAgICBcXHRoaW5nCisgMDogXAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYXRoaW5nCitObyBtYXRjaAorICAgIGJ0aGluZworTm8gbWF0Y2gKKyAgICBddGhpbmcKK05vIG1hdGNoCisgICAgY3RoaW5nCitObyBtYXRjaAorICAgIGR0aGluZworTm8gbWF0Y2gKKyAgICBldGhpbmcKK05vIG1hdGNoCisKKy9eW15dY2RlXS8KKyAgICBhdGhpbmcKKyAwOiBhCisgICAgZnRoaW5nCisgMDogZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXXRoaW5nCitObyBtYXRjaAorICAgIGN0aGluZworTm8gbWF0Y2gKKyAgICBkdGhpbmcKK05vIG1hdGNoCisgICAgZXRoaW5nCitObyBtYXRjaAorCisvXlyBLworICAgIIEKKyAwOiBceDgxCisKKy9e/y8KKyAgICD/CisgMDogXHhmZgorCisvXlswLTldKyQvCisgICAgMAorIDA6IDAKKyAgICAxCisgMDogMQorICAgIDIKKyAwOiAyCisgICAgMworIDA6IDMKKyAgICA0CisgMDogNAorICAgIDUKKyAwOiA1CisgICAgNgorIDA6IDYKKyAgICA3CisgMDogNworICAgIDgKKyAwOiA4CisgICAgOQorIDA6IDkKKyAgICAxMAorIDA6IDEwCisgICAgMTAwCisgMDogMTAwCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKK05vIG1hdGNoCisKKy9eLipudGVyLworICAgIGVudGVyCisgMDogZW50ZXIKKyAgICBpbnRlcgorIDA6IGludGVyCisgICAgdXBvbnRlcgorIDA6IHVwb250ZXIKKworL154eHhbMC05XSskLworICAgIHh4eDAKKyAwOiB4eHgwCisgICAgeHh4MTIzNAorIDA6IHh4eDEyMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh4eAorTm8gbWF0Y2gKKworL14uK1swLTldWzAtOV1bMC05XSQvCisgICAgeDEyMworIDA6IHgxMjMKKyAgICB4MTIzNAorIDA6IHgxMjM0CisgICAgeHgxMjMKKyAwOiB4eDEyMworICAgIDEyMzQ1NgorIDA6IDEyMzQ1NgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzCitObyBtYXRjaAorCisvXi4rP1swLTldWzAtOV1bMC05XSQvCisgICAgeDEyMworIDA6IHgxMjMKKyAgICB4MTIzNAorIDA6IHgxMjM0CisgICAgeHgxMjMKKyAwOiB4eDEyMworICAgIDEyMzQ1NgorIDA6IDEyMzQ1NgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzCitObyBtYXRjaAorCisvXihbXiFdKykhKC4rKT1hcHF1eHpcLml4clwuenp6XC5hY1wudWskLworICAgIGFiYyFwcXI9YXBxdXh6Lml4ci56enouYWMudWsKKyAwOiBhYmMhcHFyPWFwcXV4ei5peHIuenp6LmFjLnVrCisgMTogYWJjCisgMjogcHFyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAhcHFyPWFwcXV4ei5peHIuenp6LmFjLnVrCitObyBtYXRjaAorICAgIGFiYyE9YXBxdXh6Lml4ci56enouYWMudWsKK05vIG1hdGNoCisgICAgYWJjIXBxcj1hcHF1eHo6aXhyLnp6ei5hYy51aworTm8gbWF0Y2gKKyAgICBhYmMhcHFyPWFwcXV4ei5peHIuenp6LmFjLnVraworTm8gbWF0Y2gKKworLzovCisgICAgV2VsbCwgd2UgbmVlZCBhIGNvbG9uOiBzb21ld2hlcmUKKyAwOiA6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBGYWlsIHdpdGhvdXQgYSBjb2xvbgorTm8gbWF0Y2gKKworLyhbXGRhLWY6XSspJC9pCisgICAgMGFiYworIDA6IDBhYmMKKyAxOiAwYWJjCisgICAgYWJjCisgMDogYWJjCisgMTogYWJjCisgICAgZmVkCisgMDogZmVkCisgMTogZmVkCisgICAgRQorIDA6IEUKKyAxOiBFCisgICAgOjoKKyAwOiA6OgorIDE6IDo6CisgICAgNWYwMzoxMkMwOjo5MzJlCisgMDogNWYwMzoxMkMwOjo5MzJlCisgMTogNWYwMzoxMkMwOjo5MzJlCisgICAgZmVkIGRlZgorIDA6IGRlZgorIDE6IGRlZgorICAgIEFueSBvbGQgc3R1ZmYKKyAwOiBmZgorIDE6IGZmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAwenp6CitObyBtYXRjaAorICAgIGd6enoKK05vIG1hdGNoCisgICAgZmVkXHgyMAorTm8gbWF0Y2gKKyAgICBBbnkgb2xkIHJ1YmJpc2gKK05vIG1hdGNoCisKKy9eLipcLihcZHsxLDN9KVwuKFxkezEsM30pXC4oXGR7MSwzfSkkLworICAgIC4xLjIuMworIDA6IC4xLjIuMworIDE6IDEKKyAyOiAyCisgMzogMworICAgIEEuMTIuMTIzLjAKKyAwOiBBLjEyLjEyMy4wCisgMTogMTIKKyAyOiAxMjMKKyAzOiAwCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAuMS4yLjMzMzMKK05vIG1hdGNoCisgICAgMS4yLjMKK05vIG1hdGNoCisgICAgMTIzNC4yLjMKK05vIG1hdGNoCisKKy9eKFxkKylccytJTlxzK1NPQVxzKyhcUyspXHMrKFxTKylccypcKFxzKiQvCisgICAgMSBJTiBTT0Egbm9uLXNwMSBub24tc3AyKAorIDA6IDEgSU4gU09BIG5vbi1zcDEgbm9uLXNwMigKKyAxOiAxCisgMjogbm9uLXNwMQorIDM6IG5vbi1zcDIKKyAgICAxICAgIElOICAgIFNPQSAgICBub24tc3AxICAgIG5vbi1zcDIgICAoCisgMDogMSAgICBJTiAgICBTT0EgICAgbm9uLXNwMSAgICBub24tc3AyICAgKAorIDE6IDEKKyAyOiBub24tc3AxCisgMzogbm9uLXNwMgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMUlOIFNPQSBub24tc3AxIG5vbi1zcDIoCitObyBtYXRjaAorCisvXlthLXpBLVpcZF1bYS16QS1aXGRcLV0qKFwuW2EtekEtWlxkXVthLXpBLXpcZFwtXSopKlwuJC8KKyAgICBhLgorIDA6IGEuCisgICAgWi4KKyAwOiBaLgorICAgIDIuCisgMDogMi4KKyAgICBhYi1jLnBxLXIuCisgMDogYWItYy5wcS1yLgorIDE6IC5wcS1yCisgICAgc3hrLnp6ei5hYy51ay4KKyAwOiBzeGsuenp6LmFjLnVrLgorIDE6IC51aworICAgIHgtLnktLgorIDA6IHgtLnktLgorIDE6IC55LQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgLWFiYy5wZXEuCitObyBtYXRjaAorCisvXlwqXC5bYS16XShbYS16XC1cZF0qW2EtelxkXSspPyhcLlthLXpdKFthLXpcLVxkXSpbYS16XGRdKyk/KSokLworICAgICouYQorIDA6ICouYQorICAgICouYjAtYQorIDA6ICouYjAtYQorIDE6IDAtYQorICAgICouYzMtYi5jCisgMDogKi5jMy1iLmMKKyAxOiAzLWIKKyAyOiAuYworICAgICouYy1hLmItYworIDA6ICouYy1hLmItYworIDE6IC1hCisgMjogLmItYworIDM6IC1jCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAqLjAKK05vIG1hdGNoCisgICAgKi5hLQorTm8gbWF0Y2gKKyAgICAqLmEtYi5jLQorTm8gbWF0Y2gKKyAgICAqLmMtYS4wLWMKK05vIG1hdGNoCisKKy9eKD89YWIoZGUpKShhYmQpKGUpLworICAgIGFiZGUKKyAwOiBhYmRlCisgMTogZGUKKyAyOiBhYmQKKyAzOiBlCisKKy9eKD8hKGFiKWRlfHgpKGFiZCkoZikvCisgICAgYWJkZgorIDA6IGFiZGYKKyAxOiA8dW5zZXQ+CisgMjogYWJkCisgMzogZgorCisvXig/PShhYihjZCkpKShhYikvCisgICAgYWJjZAorIDA6IGFiCisgMTogYWJjZAorIDI6IGNkCisgMzogYWIKKworL15bXGRhLWZdKFwuW1xkYS1mXSkqJC9pCisgICAgYS5iLmMuZAorIDA6IGEuYi5jLmQKKyAxOiAuZAorICAgIEEuQi5DLkQKKyAwOiBBLkIuQy5ECisgMTogLkQKKyAgICBhLmIuYy4xLjIuMy5DCisgMDogYS5iLmMuMS4yLjMuQworIDE6IC5DCisKKy9eXCIuKlwiXHMqKDsuKik/JC8KKyAgICBcIjEyMzRcIgorIDA6ICIxMjM0IgorICAgIFwiYWJjZFwiIDsKKyAwOiAiYWJjZCIgOworIDE6IDsKKyAgICBcIlwiIDsgcmh1YmFyYgorIDA6ICIiIDsgcmh1YmFyYgorIDE6IDsgcmh1YmFyYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXCIxMjM0XCIgOiB0aGluZ3MKK05vIG1hdGNoCisKKy9eJC8KKyAgICBcCisgMDogCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBIG5vbi1lbXB0eSBsaW5lCitObyBtYXRjaAorCisvICAgXiAgICBhICAgKD8jIGJlZ2lucyB3aXRoIGEpICBiXHNjICg/IyB0aGVuIGIgYykgJCAoPyMgdGhlbiBlbmQpL3gKKyAgICBhYiBjCisgMDogYWIgYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCitObyBtYXRjaAorICAgIGFiIGNkZQorTm8gbWF0Y2gKKworLyg/eCkgICBeICAgIGEgICAoPyMgYmVnaW5zIHdpdGggYSkgIGJcc2MgKD8jIHRoZW4gYiBjKSAkICg/IyB0aGVuIGVuZCkvCisgICAgYWIgYworIDA6IGFiIGMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworTm8gbWF0Y2gKKyAgICBhYiBjZGUKK05vIG1hdGNoCisKKy9eICAgYVwgYltjIF1kICAgICAgICQveAorICAgIGEgYmNkCisgMDogYSBiY2QKKyAgICBhIGIgZAorIDA6IGEgYiBkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkCitObyBtYXRjaAorICAgIGFiIGQKK05vIG1hdGNoCisKKy9eKGEoYihjKSkpKGQoZShmKSkpKGgoaShqKSkpKGsobChtKSkpJC8KKyAgICBhYmNkZWZoaWprbG0KKyAwOiBhYmNkZWZoaWprbG0KKyAxOiBhYmMKKyAyOiBiYworIDM6IGMKKyA0OiBkZWYKKyA1OiBlZgorIDY6IGYKKyA3OiBoaWoKKyA4OiBpagorIDk6IGoKKzEwOiBrbG0KKzExOiBsbQorMTI6IG0KKworL14oPzphKGIoYykpKSg/OmQoZShmKSkpKD86aChpKGopKSkoPzprKGwobSkpKSQvCisgICAgYWJjZGVmaGlqa2xtCisgMDogYWJjZGVmaGlqa2xtCisgMTogYmMKKyAyOiBjCisgMzogZWYKKyA0OiBmCisgNTogaWoKKyA2OiBqCisgNzogbG0KKyA4OiBtCisKKy9eW1x3XVtcV11bXHNdW1xTXVtcZF1bXERdW1xiXVtcbl1bXGNdXVtcMDIyXS8KKyAgICBhKyBaMCtceDA4XG5ceDFkXHgxMgorIDA6IGErIFowK1x4MDhceDBhXHgxZFx4MTIKKworL15bLl4kfCgpKis/eyx9XSsvCisgICAgLl5cJCgqKyl8ez8sP30KKyAwOiAuXiQoKispfHs/LD99CisKKy9eYSpcdy8KKyAgICB6CisgMDogegorICAgIGF6CisgMDogYXoKKyAgICBhYWF6CisgMDogYWFhegorICAgIGEKKyAwOiBhCisgICAgYWEKKyAwOiBhYQorICAgIGFhYWEKKyAwOiBhYWFhCisgICAgYSsKKyAwOiBhCisgICAgYWErCisgMDogYWEKKworL15hKj9cdy8KKyAgICB6CisgMDogegorICAgIGF6CisgMDogYQorICAgIGFhYXoKKyAwOiBhCisgICAgYQorIDA6IGEKKyAgICBhYQorIDA6IGEKKyAgICBhYWFhCisgMDogYQorICAgIGErCisgMDogYQorICAgIGFhKworIDA6IGEKKworL15hK1x3LworICAgIGF6CisgMDogYXoKKyAgICBhYWF6CisgMDogYWFhegorICAgIGFhCisgMDogYWEKKyAgICBhYWFhCisgMDogYWFhYQorICAgIGFhKworIDA6IGFhCisKKy9eYSs/XHcvCisgICAgYXoKKyAwOiBhegorICAgIGFhYXoKKyAwOiBhYQorICAgIGFhCisgMDogYWEKKyAgICBhYWFhCisgMDogYWEKKyAgICBhYSsKKyAwOiBhYQorCisvXlxkezh9XHd7Mix9LworICAgIDEyMzQ1Njc4OTAKKyAwOiAxMjM0NTY3ODkwCisgICAgMTIzNDU2NzhhYgorIDA6IDEyMzQ1Njc4YWIKKyAgICAxMjM0NTY3OF9fCisgMDogMTIzNDU2NzhfXworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNDU2NworTm8gbWF0Y2gKKworL15bYWVpb3VcZF17NCw1fSQvCisgICAgdW9pZQorIDA6IHVvaWUKKyAgICAxMjM0CisgMDogMTIzNAorICAgIDEyMzQ1CisgMDogMTIzNDUKKyAgICBhYWFhYQorIDA6IGFhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0NTYKK05vIG1hdGNoCisKKy9eW2FlaW91XGRdezQsNX0/LworICAgIHVvaWUKKyAwOiB1b2llCisgICAgMTIzNAorIDA6IDEyMzQKKyAgICAxMjM0NQorIDA6IDEyMzQKKyAgICBhYWFhYQorIDA6IGFhYWEKKyAgICAxMjM0NTYKKyAwOiAxMjM0CisKKy9cQShhYmN8ZGVmKT0oXDEpezIsM31cWi8KKyAgICBhYmM9YWJjYWJjCisgMDogYWJjPWFiY2FiYworIDE6IGFiYworIDI6IGFiYworICAgIGRlZj1kZWZkZWZkZWYKKyAwOiBkZWY9ZGVmZGVmZGVmCisgMTogZGVmCisgMjogZGVmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmM9ZGVmZGVmCitObyBtYXRjaAorCisvXihhKShiKShjKShkKShlKShmKShnKShoKShpKShqKShrKVwxMSooXDNcNClcMSg/IykyJC8KKyAgICBhYmNkZWZnaGlqa2NkYTIKKyAwOiBhYmNkZWZnaGlqa2NkYTIKKyAxOiBhCisgMjogYgorIDM6IGMKKyA0OiBkCisgNTogZQorIDY6IGYKKyA3OiBnCisgODogaAorIDk6IGkKKzEwOiBqCisxMTogaworMTI6IGNkCisgICAgYWJjZGVmZ2hpamtra2tjZGEyCisgMDogYWJjZGVmZ2hpamtra2tjZGEyCisgMTogYQorIDI6IGIKKyAzOiBjCisgNDogZAorIDU6IGUKKyA2OiBmCisgNzogZworIDg6IGgKKyA5OiBpCisxMDogagorMTE6IGsKKzEyOiBjZAorCisvKGNhdChhKHJhY3R8dG9uaWMpfGVycGlsbGFyKSkgXDEoKTIoMykvCisgICAgY2F0YXJhY3QgY2F0YXJhY3QyMworIDA6IGNhdGFyYWN0IGNhdGFyYWN0MjMKKyAxOiBjYXRhcmFjdAorIDI6IGFyYWN0CisgMzogcmFjdAorIDQ6IAorIDU6IDMKKyAgICBjYXRhdG9uaWMgY2F0YXRvbmljMjMKKyAwOiBjYXRhdG9uaWMgY2F0YXRvbmljMjMKKyAxOiBjYXRhdG9uaWMKKyAyOiBhdG9uaWMKKyAzOiB0b25pYworIDQ6IAorIDU6IDMKKyAgICBjYXRlcnBpbGxhciBjYXRlcnBpbGxhcjIzCisgMDogY2F0ZXJwaWxsYXIgY2F0ZXJwaWxsYXIyMworIDE6IGNhdGVycGlsbGFyCisgMjogZXJwaWxsYXIKKyAzOiA8dW5zZXQ+CisgNDogCisgNTogMworCisKKy9eRnJvbSArKFteIF0rKSArW2EtekEtWl1bYS16QS1aXVthLXpBLVpdICtbYS16QS1aXVthLXpBLVpdW2EtekEtWl0gK1swLTldP1swLTldICtbMC05XVswLTldOlswLTldWzAtOV0vCisgICAgRnJvbSBhYmNkICBNb24gU2VwIDAxIDEyOjMzOjAyIDE5OTcKKyAwOiBGcm9tIGFiY2QgIE1vbiBTZXAgMDEgMTI6MzMKKyAxOiBhYmNkCisKKy9eRnJvbVxzK1xTK1xzKyhbYS16QS1aXXszfVxzKyl7Mn1cZHsxLDJ9XHMrXGRcZDpcZFxkLworICAgIEZyb20gYWJjZCAgTW9uIFNlcCAwMSAxMjozMzowMiAxOTk3CisgMDogRnJvbSBhYmNkICBNb24gU2VwIDAxIDEyOjMzCisgMTogU2VwIAorICAgIEZyb20gYWJjZCAgTW9uIFNlcCAgMSAxMjozMzowMiAxOTk3CisgMDogRnJvbSBhYmNkICBNb24gU2VwICAxIDEyOjMzCisgMTogU2VwICAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEZyb20gYWJjZCAgU2VwIDAxIDEyOjMzOjAyIDE5OTcKK05vIG1hdGNoCisKKy9eMTIuMzQvcworICAgIDEyXG4zNAorIDA6IDEyXHgwYTM0CisgICAgMTJccjM0CisgMDogMTJceDBkMzQKKworL1x3Kyg/PVx0KS8KKyAgICB0aGUgcXVpY2sgYnJvd25cdCBmb3gKKyAwOiBicm93bgorCisvZm9vKD8hYmFyKSguKikvCisgICAgZm9vYmFyIGlzIGZvb2xpc2ggc2VlPworIDA6IGZvb2xpc2ggc2VlPworIDE6IGxpc2ggc2VlPworCisvKD86KD8hZm9vKS4uLnxeLnswLDJ9KWJhciguKikvCisgICAgZm9vYmFyIGNyb3diYXIgZXRjCisgMDogcm93YmFyIGV0YworIDE6ICBldGMKKyAgICBiYXJyZWwKKyAwOiBiYXJyZWwKKyAxOiByZWwKKyAgICAyYmFycmVsCisgMDogMmJhcnJlbAorIDE6IHJlbAorICAgIEEgYmFycmVsCisgMDogQSBiYXJyZWwKKyAxOiByZWwKKworL14oXEQqKSg/PVxkKSg/ITEyMykvCisgICAgYWJjNDU2CisgMDogYWJjCisgMTogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMxMjMKK05vIG1hdGNoCisKKy9eMTIzNCg/IyB0ZXN0IG5ld2xpbmVzCisgIGluc2lkZSkvCisgICAgMTIzNAorIDA6IDEyMzQKKworL14xMjM0ICNjb21tZW50IGluIGV4dGVuZGVkIHJlCisgIC94CisgICAgMTIzNAorIDA6IDEyMzQKKworLyNyaHViYXJiCisgIGFiY2QveAorICAgIGFiY2QKKyAwOiBhYmNkCisKKy9eYWJjZCNyaHViYXJiL3gKKyAgICBhYmNkCisgMDogYWJjZAorCisvXihhKVwxezIsM30oLikvCisgICAgYWFhYgorIDA6IGFhYWIKKyAxOiBhCisgMjogYgorICAgIGFhYWFiCisgMDogYWFhYWIKKyAxOiBhCisgMjogYgorICAgIGFhYWFhYgorIDA6IGFhYWFhCisgMTogYQorIDI6IGEKKyAgICBhYWFhYWFiCisgMDogYWFhYWEKKyAxOiBhCisgMjogYQorCisvKD8hXilhYmMvCisgICAgdGhlIGFiYworIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCitObyBtYXRjaAorCisvKD89XilhYmMvCisgICAgYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB0aGUgYWJjCitObyBtYXRjaAorCisvXlthYl17MSwzfShhYip8YikvCisgICAgYWFiYmJiYgorIDA6IGFhYmIKKyAxOiBiCisKKy9eW2FiXXsxLDN9PyhhYip8YikvCisgICAgYWFiYmJiYgorIDA6IGFhYmJiYmIKKyAxOiBhYmJiYmIKKworL15bYWJdezEsM30/KGFiKj98YikvCisgICAgYWFiYmJiYgorIDA6IGFhCisgMTogYQorCisvXlthYl17MSwzfShhYio/fGIpLworICAgIGFhYmJiYmIKKyAwOiBhYWJiCisgMTogYgorCisvICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgbGVhZGluZyBjb21tZW50CisoPzogICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHdvcmQKKyg/OiAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgKSogIyBmdXJ0aGVyIG9rYXksIGlmIGxlZCBieSBhIHBlcmlvZAorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBAICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCBzdWJkb21haW4KKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBsZWQgYnkgYSBwZXJpb2QuLi4KKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAjICAgLi4uZnVydGhlciBva2F5CispKgorIyBhZGRyZXNzCit8ICAgICAgICAgICAgICAgICAgICAgIyAgb3IKKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKykgICAgICAgICAgICAgIyBvbmUgd29yZCwgb3B0aW9uYWxseSBmb2xsb3dlZCBieS4uLi4KKyg/OgorW14oKTw+QCw7OiIuXFxcW1xdXHg4MC1ceGZmXDAwMC1cMDEwXDAxMi1cMDM3XSAgfCAgIyBhdG9tIGFuZCBzcGFjZSBwYXJ0cywgb3IuLi4KK1woCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICAgICAgfCAgIyBjb21tZW50cywgb3IuLi4KKworIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorIyBxdW90ZWQgc3RyaW5ncworKSoKKzwgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICMgbGVhZGluZyA8CisoPzogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisKKyg/OiAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAsICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCispKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGNvbW1hCis6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNsb3NpbmcgY29sb24KKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgKT8gIyAgICAgICBvcHRpb25hbCByb3V0ZQorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHdvcmQKKyg/OiAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgKSogIyBmdXJ0aGVyIG9rYXksIGlmIGxlZCBieSBhIHBlcmlvZAorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBAICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCBzdWJkb21haW4KKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBsZWQgYnkgYSBwZXJpb2QuLi4KKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAjICAgLi4uZnVydGhlciBva2F5CispKgorIyAgICAgICBhZGRyZXNzIHNwZWMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgPiAjICAgICAgICAgICAgICAgICAgdHJhaWxpbmcgPgorIyBuYW1lIGFuZCBhZGRyZXNzCispICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudAorL3gKKyAgICBBbGFuIE90aGVyIDx1c2VyXEBkb20uYWluPgorIDA6IEFsYW4gT3RoZXIgPHVzZXJAZG9tLmFpbj4KKyAgICA8dXNlclxAZG9tLmFpbj4KKyAwOiB1c2VyQGRvbS5haW4KKyAgICB1c2VyXEBkb20uYWluCisgMDogdXNlckBkb20uYWluCisgICAgXCJBLiBPdGhlclwiIDx1c2VyLjEyMzRcQGRvbS5haW4+IChhIGNvbW1lbnQpCisgMDogIkEuIE90aGVyIiA8dXNlci4xMjM0QGRvbS5haW4+IChhIGNvbW1lbnQpCisgICAgQS4gT3RoZXIgPHVzZXIuMTIzNFxAZG9tLmFpbj4gKGEgY29tbWVudCkKKyAwOiAgT3RoZXIgPHVzZXIuMTIzNEBkb20uYWluPiAoYSBjb21tZW50KQorICAgIFwiL3M9dXNlci9vdT1ob3N0L289cGxhY2UvcHJtZD11dS55eS9hZG1kPSAvYz1nYi9cIlxAeDQwMC1yZS5sYXkKKyAwOiAiL3M9dXNlci9vdT1ob3N0L289cGxhY2UvcHJtZD11dS55eS9hZG1kPSAvYz1nYi8iQHg0MDAtcmUubGF5CisgICAgQSBtaXNzaW5nIGFuZ2xlIDx1c2VyXEBzb21lLndoZXJlCisgMDogdXNlckBzb21lLndoZXJlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGUgcXVpY2sgYnJvd24gZm94CitObyBtYXRjaAorCisvW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCBsZWFkaW5nIGNvbW1lbnQKKyg/OgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorIyBBdG9tCit8ICAgICAgICAgICAgICAgICAgICAgICAjICBvcgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIKK1teXFxceDgwLVx4ZmZcblwwMTUiXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBub3JtYWwKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICBbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiApKiAgICAgICAgIyAgICggc3BlY2lhbCBub3JtYWwqICkqCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICIKKyMgUXVvdGVkIHN0cmluZworKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitcLgorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorIyBBdG9tCit8ICAgICAgICAgICAgICAgICAgICAgICAjICBvcgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIKK1teXFxceDgwLVx4ZmZcblwwMTUiXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBub3JtYWwKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICBbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiApKiAgICAgICAgIyAgICggc3BlY2lhbCBub3JtYWwqICkqCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICIKKyMgUXVvdGVkIHN0cmluZworKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBhZGRpdGlvbmFsIHdvcmRzCispKgorQAorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorXFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50cworKD86CitcLgorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorXFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50cworKSoKKyMgYWRkcmVzcworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgb3IKKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KKyMgQXRvbQorfCAgICAgICAgICAgICAgICAgICAgICAgIyAgb3IKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgbm9ybWFsCisoPzogIFxcIFteXHg4MC1ceGZmXSAgW15cXFx4ODAtXHhmZlxuXDAxNSJdICogKSogICAgICAgICMgICAoIHNwZWNpYWwgbm9ybWFsKiApKgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAiCisjIFF1b3RlZCBzdHJpbmcKKykKKyMgbGVhZGluZyB3b3JkCitbXigpPD5ALDs6Ii5cXFxbXF1ceDgwLVx4ZmZcMDAwLVwwMTBcMDEyLVwwMzddICogICAgICAgICAgICAgICAjICJub3JtYWwiIGF0b21zIGFuZCBvciBzcGFjZXMKKyg/OgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK3wKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgbm9ybWFsCisoPzogIFxcIFteXHg4MC1ceGZmXSAgW15cXFx4ODAtXHhmZlxuXDAxNSJdICogKSogICAgICAgICMgICAoIHNwZWNpYWwgbm9ybWFsKiApKgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAiCispICMgInNwZWNpYWwiIGNvbW1lbnQgb3IgcXVvdGVkIHN0cmluZworW14oKTw+QCw7OiIuXFxcW1xdXHg4MC1ceGZmXDAwMC1cMDEwXDAxMi1cMDM3XSAqICAgICAgICAgICAgIyAgbW9yZSAibm9ybWFsIgorKSoKKzwKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgPAorKD86CitACitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCisoPzoKK1wuCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCispKgorKD86ICwKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KK0AKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKK1xbICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudHMKKyg/OgorXC4KK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKK1xbICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudHMKKykqCispKiAgIyBhZGRpdGlvbmFsIGRvbWFpbnMKKzoKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudHMKKyk/ICAgICAjICAgICAgIG9wdGlvbmFsIHJvdXRlCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCisjIEF0b20KK3wgICAgICAgICAgICAgICAgICAgICAgICMgIG9yCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIG5vcm1hbAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIFteXFxceDgwLVx4ZmZcblwwMTUiXSAqICkqICAgICAgICAjICAgKCBzcGVjaWFsIG5vcm1hbCogKSoKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIgorIyBRdW90ZWQgc3RyaW5nCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1wuCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCisjIEF0b20KK3wgICAgICAgICAgICAgICAgICAgICAgICMgIG9yCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIG5vcm1hbAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIFteXFxceDgwLVx4ZmZcblwwMTUiXSAqICkqICAgICAgICAjICAgKCBzcGVjaWFsIG5vcm1hbCogKSoKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIgorIyBRdW90ZWQgc3RyaW5nCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIGFkZGl0aW9uYWwgd29yZHMKKykqCitACitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCisoPzoKK1wuCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCispKgorIyAgICAgICBhZGRyZXNzIHNwZWMKKz4gICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgID4KKyMgbmFtZSBhbmQgYWRkcmVzcworKQorL3gKKyAgICBBbGFuIE90aGVyIDx1c2VyXEBkb20uYWluPgorIDA6IEFsYW4gT3RoZXIgPHVzZXJAZG9tLmFpbj4KKyAgICA8dXNlclxAZG9tLmFpbj4KKyAwOiB1c2VyQGRvbS5haW4KKyAgICB1c2VyXEBkb20uYWluCisgMDogdXNlckBkb20uYWluCisgICAgXCJBLiBPdGhlclwiIDx1c2VyLjEyMzRcQGRvbS5haW4+IChhIGNvbW1lbnQpCisgMDogIkEuIE90aGVyIiA8dXNlci4xMjM0QGRvbS5haW4+CisgICAgQS4gT3RoZXIgPHVzZXIuMTIzNFxAZG9tLmFpbj4gKGEgY29tbWVudCkKKyAwOiAgT3RoZXIgPHVzZXIuMTIzNEBkb20uYWluPgorICAgIFwiL3M9dXNlci9vdT1ob3N0L289cGxhY2UvcHJtZD11dS55eS9hZG1kPSAvYz1nYi9cIlxAeDQwMC1yZS5sYXkKKyAwOiAiL3M9dXNlci9vdT1ob3N0L289cGxhY2UvcHJtZD11dS55eS9hZG1kPSAvYz1nYi8iQHg0MDAtcmUubGF5CisgICAgQSBtaXNzaW5nIGFuZ2xlIDx1c2VyXEBzb21lLndoZXJlCisgMDogdXNlckBzb21lLndoZXJlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGUgcXVpY2sgYnJvd24gZm94CitObyBtYXRjaAorCisvYWJjXDBkZWZcMDBwcXJcMDAweHl6XDAwMDBBQi8KKyAgICBhYmNcMGRlZlwwMHBxclwwMDB4eXpcMDAwMEFCCisgMDogYWJjXHgwMGRlZlx4MDBwcXJceDAweHl6XHgwMDBBQgorICAgIGFiYzQ1NiBhYmNcMGRlZlwwMHBxclwwMDB4eXpcMDAwMEFCQ0RFCisgMDogYWJjXHgwMGRlZlx4MDBwcXJceDAweHl6XHgwMDBBQgorCisvYWJjXHgwZGVmXHgwMHBxclx4MDAweHl6XHgwMDAwQUIvCisgICAgYWJjXHgwZGVmXHgwMHBxclx4MDAweHl6XHgwMDAwQUIKKyAwOiBhYmNceDBkZWZceDAwcHFyXHgwMDB4eXpceDAwMDBBQgorICAgIGFiYzQ1NiBhYmNceDBkZWZceDAwcHFyXHgwMDB4eXpceDAwMDBBQkNERQorIDA6IGFiY1x4MGRlZlx4MDBwcXJceDAwMHh5elx4MDAwMEFCCisKKy9eW1wwMDAtXDAzN10vCisgICAgXDBBCisgMDogXHgwMAorICAgIFwwMUIKKyAwOiBceDAxCisgICAgXDAzN0MKKyAwOiBceDFmCisKKy9cMCovCisgICAgXDBcMFwwXDAKKyAwOiBceDAwXHgwMFx4MDBceDAwCisKKy9BXHgwezIsM31aLworICAgIFRoZSBBXHgwXHgwWgorIDA6IEFceDAwXHgwMFoKKyAgICBBbiBBXDBceDBcMFoKKyAwOiBBXHgwMFx4MDBceDAwWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVwwWgorTm8gbWF0Y2gKKyAgICBBXDBceDBcMFx4MFoKK05vIG1hdGNoCisKKy9eKGNvd3wpXDEoYmVsbCkvCisgICAgY293Y293YmVsbAorIDA6IGNvd2Nvd2JlbGwKKyAxOiBjb3cKKyAyOiBiZWxsCisgICAgYmVsbAorIDA6IGJlbGwKKyAxOiAKKyAyOiBiZWxsCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBjb3diZWxsCitObyBtYXRjaAorCisvXlxzLworICAgIFwwNDBhYmMKKyAwOiAgCisgICAgXHgwY2FiYworIDA6IFx4MGMKKyAgICBcbmFiYworIDA6IFx4MGEKKyAgICBccmFiYworIDA6IFx4MGQKKyAgICBcdGFiYworIDA6IFx4MDkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworTm8gbWF0Y2gKKworL15hCWIKKyAgICAMICBjL3gKKyAgICBhYmMKKyAwOiBhYmMKKworL14oYXwpXDEqYi8KKyAgICBhYgorIDA6IGFiCisgMTogYQorICAgIGFhYWFiCisgMDogYWFhYWIKKyAxOiBhCisgICAgYgorIDA6IGIKKyAxOiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFjYgorTm8gbWF0Y2gKKworL14oYXwpXDErYi8KKyAgICBhYWIKKyAwOiBhYWIKKyAxOiBhCisgICAgYWFhYWIKKyAwOiBhYWFhYgorIDE6IGEKKyAgICBiCisgMDogYgorIDE6IAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIKK05vIG1hdGNoCisKKy9eKGF8KVwxP2IvCisgICAgYWIKKyAwOiBhYgorIDE6IGEKKyAgICBhYWIKKyAwOiBhYWIKKyAxOiBhCisgICAgYgorIDA6IGIKKyAxOiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFjYgorTm8gbWF0Y2gKKworL14oYXwpXDF7Mn1iLworICAgIGFhYWIKKyAwOiBhYWFiCisgMTogYQorICAgIGIKKyAwOiBiCisgMTogCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYgorTm8gbWF0Y2gKKyAgICBhYWIKK05vIG1hdGNoCisgICAgYWFhYWIKK05vIG1hdGNoCisKKy9eKGF8KVwxezIsM31iLworICAgIGFhYWIKKyAwOiBhYWFiCisgMTogYQorICAgIGFhYWFiCisgMDogYWFhYWIKKyAxOiBhCisgICAgYgorIDA6IGIKKyAxOiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiCitObyBtYXRjaAorICAgIGFhYgorTm8gbWF0Y2gKKyAgICBhYWFhYWIKK05vIG1hdGNoCisKKy9hYnsxLDN9YmMvCisgICAgYWJiYmJjCisgMDogYWJiYmJjCisgICAgYWJiYmMKKyAwOiBhYmJiYworICAgIGFiYmMKKyAwOiBhYmJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKK05vIG1hdGNoCisgICAgYWJiYmJiYworTm8gbWF0Y2gKKworLyhbXi5dKilcLihbXjpdKik6W1QgXSsoLiopLworICAgIHRyYWNrMS50aXRsZTpUQmxhaCBibGFoIGJsYWgKKyAwOiB0cmFjazEudGl0bGU6VEJsYWggYmxhaCBibGFoCisgMTogdHJhY2sxCisgMjogdGl0bGUKKyAzOiBCbGFoIGJsYWggYmxhaAorCisvKFteLl0qKVwuKFteOl0qKTpbVCBdKyguKikvaQorICAgIHRyYWNrMS50aXRsZTpUQmxhaCBibGFoIGJsYWgKKyAwOiB0cmFjazEudGl0bGU6VEJsYWggYmxhaCBibGFoCisgMTogdHJhY2sxCisgMjogdGl0bGUKKyAzOiBCbGFoIGJsYWggYmxhaAorCisvKFteLl0qKVwuKFteOl0qKTpbdCBdKyguKikvaQorICAgIHRyYWNrMS50aXRsZTpUQmxhaCBibGFoIGJsYWgKKyAwOiB0cmFjazEudGl0bGU6VEJsYWggYmxhaCBibGFoCisgMTogdHJhY2sxCisgMjogdGl0bGUKKyAzOiBCbGFoIGJsYWggYmxhaAorCisvXltXLWNdKyQvCisgICAgV1hZX15hYmMKKyAwOiBXWFlfXmFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgd3h5CitObyBtYXRjaAorCisvXltXLWNdKyQvaQorICAgIFdYWV9eYWJjCisgMDogV1hZX15hYmMKKyAgICB3eHlfXkFCQworIDA6IHd4eV9eQUJDCisKKy9eW1x4M2YtXHg1Rl0rJC9pCisgICAgV1hZX15hYmMKKyAwOiBXWFlfXmFiYworICAgIHd4eV9eQUJDCisgMDogd3h5X15BQkMKKworL15hYmMkL20KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBxcXFcbmFiYworIDA6IGFiYworICAgIGFiY1xuenp6CisgMDogYWJjCisgICAgcXFxXG5hYmNcbnp6egorIDA6IGFiYworCisvXmFiYyQvCisgICAgYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBxcXFcbmFiYworTm8gbWF0Y2gKKyAgICBhYmNcbnp6egorTm8gbWF0Y2gKKyAgICBxcXFcbmFiY1xuenp6CitObyBtYXRjaAorCisvXEFhYmNcWi9tCisgICAgYWJjCisgMDogYWJjCisgICAgYWJjXG4gCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBxcXFcbmFiYworTm8gbWF0Y2gKKyAgICBhYmNcbnp6egorTm8gbWF0Y2gKKyAgICBxcXFcbmFiY1xuenp6CitObyBtYXRjaAorICAgIAorL1xBKC4pKlxaL3MKKyAgICBhYmNcbmRlZgorIDA6IGFiY1x4MGFkZWYKKyAxOiBmCisKKy9cQSguKSpcWi9tCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcbmRlZgorTm8gbWF0Y2gKKworLyg/OmIpfCg/OjorKS8KKyAgICBiOjpjCisgMDogYgorICAgIGM6OmIKKyAwOiA6OgorCisvWy1hel0rLworICAgIGF6LQorIDA6IGF6LQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYgorTm8gbWF0Y2gKKworL1thei1dKy8KKyAgICB6YS0KKyAwOiB6YS0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGIKK05vIG1hdGNoCisKKy9bYVwtel0rLworICAgIGEtegorIDA6IGEtegorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYgorTm8gbWF0Y2gKKworL1thLXpdKy8KKyAgICBhYmNkeHl6CisgMDogYWJjZHh5egorCisvW1xkLV0rLworICAgIDEyLTM0CisgMDogMTItMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYQorTm8gbWF0Y2gKKworL1tcZC16XSsvCisgICAgMTItMzR6CisgMDogMTItMzR6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWEKK05vIG1hdGNoCisKKy9ceDVjLworICAgIFxcCisgMDogXAorCisvXHgyMFovCisgICAgdGhlIFpvbworIDA6ICBaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBadWx1CitObyBtYXRjaAorCisvKGFiYylcMS9pCisgICAgYWJjYWJjCisgMDogYWJjYWJjCisgMTogYWJjCisgICAgQUJDYWJjCisgMDogQUJDYWJjCisgMTogQUJDCisgICAgYWJjQUJDCisgMDogYWJjQUJDCisgMTogYWJjCisKKy9hYmMkLworICAgIGFiYworIDA6IGFiYworICAgIGFiY1xuCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcbmRlZgorTm8gbWF0Y2gKKworLyhhYmMpXDEyMy8KKyAgICBhYmNceDUzCisgMDogYWJjUworIDE6IGFiYworCisvKGFiYylcMjIzLworICAgIGFiY1x4OTMKKyAwOiBhYmNceDkzCisgMTogYWJjCisKKy8oYWJjKVwzMjMvCisgICAgYWJjXHhkMworIDA6IGFiY1x4ZDMKKyAxOiBhYmMKKworLyhhYmMpXDEwMC8KKyAgICBhYmNceDQwCisgMDogYWJjQAorIDE6IGFiYworICAgIGFiY1wxMDAKKyAwOiBhYmNACisgMTogYWJjCisKKy8oYWJjKVwxMDAwLworICAgIGFiY1x4NDAwCisgMDogYWJjQDAKKyAxOiBhYmMKKyAgICBhYmNceDQwXHgzMAorIDA6IGFiY0AwCisgMTogYWJjCisgICAgYWJjXDEwMDAKKyAwOiBhYmNAMAorIDE6IGFiYworICAgIGFiY1wxMDBceDMwCisgMDogYWJjQDAKKyAxOiBhYmMKKyAgICBhYmNcMTAwXDA2MAorIDA6IGFiY0AwCisgMTogYWJjCisgICAgYWJjXDEwMFw2MAorIDA6IGFiY0AwCisgMTogYWJjCisgICAgCisvXihBKShCKShDKShEKShFKShGKShHKShIKShJKVw4XDkkLworICAgIEFCQ0RFRkdISUhJIAorIDA6IEFCQ0RFRkdISUhJCisgMTogQQorIDI6IEIKKyAzOiBDCisgNDogRAorIDU6IEUKKyA2OiBGCisgNzogRworIDg6IEgKKyA5OiBJCisKKy9eW0FcOEJcOUNdKyQvCisgICAgQThCOUMKKyAwOiBBOEI5QworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIEE4QjlDXHgwMAorTm8gbWF0Y2gKKworLyhhKShiKShjKShkKShlKShmKShnKShoKShpKShqKShrKShsKVwxMlwxMjMvCisgICAgYWJjZGVmZ2hpamtsbFMKKyAwOiBhYmNkZWZnaGlqa2xsUworIDE6IGEKKyAyOiBiCisgMzogYworIDQ6IGQKKyA1OiBlCisgNjogZgorIDc6IGcKKyA4OiBoCisgOTogaQorMTA6IGoKKzExOiBrCisxMjogbAorCisvKGEpKGIpKGMpKGQpKGUpKGYpKGcpKGgpKGkpKGopKGspXDEyXDEyMy8KKyAgICBhYmNkZWZnaGlqa1wxMlMKKyAwOiBhYmNkZWZnaGlqa1x4MGFTCisgMTogYQorIDI6IGIKKyAzOiBjCisgNDogZAorIDU6IGUKKyA2OiBmCisgNzogZworIDg6IGgKKyA5OiBpCisxMDogagorMTE6IGsKKworL2F7MH1iYy8KKyAgICBiYworIDA6IGJjCisKKy8oYXwoYmMpKXswLDB9P3h5ei8KKyAgICB4eXoKKyAwOiB4eXoKKworL2FiY1tcMTBdZGUvCisgICAgYWJjXDAxMGRlCisgMDogYWJjXHgwOGRlCisKKy9hYmNbXDFdZGUvCisgICAgYWJjXDFkZQorIDA6IGFiY1x4MDFkZQorCisvKGFiYylbXDFdZGUvCisgICAgYWJjXDFkZQorIDA6IGFiY1x4MDFkZQorIDE6IGFiYworCisvKD9zKWEuYi8KKyAgICBhXG5iCisgMDogYVx4MGFiCisKKy9eKFteYV0pKFteXGJdKShbXmNdKikoW15kXXszLDR9KS8KKyAgICBiYU5PVGNjY2NkCisgMDogYmFOT1RjY2NjCisgMTogYgorIDI6IGEKKyAzOiBOT1QKKyA0OiBjY2NjCisgICAgYmFOT1RjY2NkCisgMDogYmFOT1RjY2MKKyAxOiBiCisgMjogYQorIDM6IE5PVAorIDQ6IGNjYworICAgIGJhTk9UY2NkCisgMDogYmFOT1RjYworIDE6IGIKKyAyOiBhCisgMzogTk8KKyA0OiBUY2MKKyAgICBiYWNjY2QKKyAwOiBiYWNjYworIDE6IGIKKyAyOiBhCisgMzogCisgNDogY2NjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhbnl0aGluZworTm8gbWF0Y2gKKyAgICBiXGJjICAgCitObyBtYXRjaAorICAgIGJhY2NkCitObyBtYXRjaAorCisvW15hXS8KKyAgICBBYmMKKyAwOiBBCisgIAorL1teYV0vaQorICAgIEFiYyAKKyAwOiBiCisKKy9bXmFdKy8KKyAgICBBQUFhQWJjCisgMDogQUFBCisgIAorL1teYV0rL2kKKyAgICBBQUFhQWJjIAorIDA6IGJjCisKKy9bXmFdKy8KKyAgICBiYmJcbmNjYworIDA6IGJiYlx4MGFjY2MKKyAgIAorL1tea10kLworICAgIGFiYworIDA6IGMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiayAgIAorTm8gbWF0Y2gKKyAgIAorL1tea117MiwzfSQvCisgICAgYWJjCisgMDogYWJjCisgICAga2JjCisgMDogYmMKKyAgICBrYWJjIAorIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJrCitObyBtYXRjaAorICAgIGFrYgorTm8gbWF0Y2gKKyAgICBha2sgCitObyBtYXRjaAorCisvXlxkezgsfVxALitbXmtdJC8KKyAgICAxMjM0NTY3OFxAYS5iLmMuZAorIDA6IDEyMzQ1Njc4QGEuYi5jLmQKKyAgICAxMjM0NTY3ODlcQHgueS56CisgMDogMTIzNDU2Nzg5QHgueS56CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0NTY3OFxAeC55LnVrCitObyBtYXRjaAorICAgIDEyMzQ1NjdcQGEuYi5jLmQgICAgICAgCitObyBtYXRjaAorCisvKGEpXDF7OCx9LworICAgIGFhYWFhYWFhYQorIDA6IGFhYWFhYWFhYQorIDE6IGEKKyAgICBhYWFhYWFhYWFhCisgMDogYWFhYWFhYWFhYQorIDE6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWFhYWEgICAKK05vIG1hdGNoCisKKy9bXmFdLworICAgIGFhYWFiY2QKKyAwOiBiCisgICAgYWFBYWJjZCAKKyAwOiBBCisKKy9bXmFdL2kKKyAgICBhYWFhYmNkCisgMDogYgorICAgIGFhQWFiY2QgCisgMDogYgorCisvW15hel0vCisgICAgYWFhYWJjZAorIDA6IGIKKyAgICBhYUFhYmNkIAorIDA6IEEKKworL1teYXpdL2kKKyAgICBhYWFhYmNkCisgMDogYgorICAgIGFhQWFiY2QgCisgMDogYgorCisvXDAwMFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzdcMDQwXDA0MVwwNDJcMDQzXDA0NFwwNDVcMDQ2XDA0N1wwNTBcMDUxXDA1MlwwNTNcMDU0XDA1NVwwNTZcMDU3XDA2MFwwNjFcMDYyXDA2M1wwNjRcMDY1XDA2NlwwNjdcMDcwXDA3MVwwNzJcMDczXDA3NFwwNzVcMDc2XDA3N1wxMDBcMTAxXDEwMlwxMDNcMTA0XDEwNVwxMDZcMTA3XDExMFwxMTFcMTEyXDExM1wxMTRcMTE1XDExNlwxMTdcMTIwXDEyMVwxMjJcMTIzXDEyNFwxMjVcMTI2XDEyN1wxMzBcMTMxXDEzMlwxMzNcMTM0XDEzNVwxMzZcMTM3XDE0MFwxNDFcMTQyXDE0M1wxNDRcMTQ1XDE0NlwxNDdcMTUwXDE1MVwxNTJcMTUzXDE1NFwxNTVcMTU2XDE1N1wxNjBcMTYxXDE2MlwxNjNcMTY0XDE2NVwxNjZcMTY3XDE3MFwxNzFcMTcyXDE3M1wxNzRcMTc1XDE3NlwxNzdcMjAwXDIwMVwyMDJcMjAzXDIwNFwyMDVcMjA2XDIwN1wyMTBcMjExXDIxMlwyMTNcMjE0XDIxNVwyMTZcMjE3XDIyMFwyMjFcMjIyXDIyM1wyMjRcMjI1XDIyNlwyMjdcMjMwXDIzMVwyMzJcMjMzXDIzNFwyMzVcMjM2XDIzN1wyNDBcMjQxXDI0MlwyNDNcMjQ0XDI0NVwyNDZcMjQ3XDI1MFwyNTFcMjUyXDI1M1wyNTRcMjU1XDI1NlwyNTdcMjYwXDI2MVwyNjJcMjYzXDI2NFwyNjVcMjY2XDI2N1wyNzBcMjcxXDI3MlwyNzNcMjc0XDI3NVwyNzZcMjc3XDMwMFwzMDFcMzAyXDMwM1wzMDRcMzA1XDMwNlwzMDdcMzEwXDMxMVwzMTJcMzEzXDMxNFwzMTVcMzE2XDMxN1wzMjBcMzIxXDMyMlwzMjNcMzI0XDMyNVwzMjZcMzI3XDMzMFwzMzFcMzMyXDMzM1wzMzRcMzM1XDMzNlwzMzdcMzQwXDM0MVwzNDJcMzQzXDM0NFwzNDVcMzQ2XDM0N1wzNTBcMzUxXDM1MlwzNTNcMzU0XDM1NVwzNTZcMzU3XDM2MFwzNjFcMzYyXDM2M1wzNjRcMzY1XDM2NlwzNjdcMzcwXDM3MVwzNzJcMzczXDM3NFwzNzVcMzc2XDM3Ny8KKyBcMDAwXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzN1wwNDBcMDQxXDA0MlwwNDNcMDQ0XDA0NVwwNDZcMDQ3XDA1MFwwNTFcMDUyXDA1M1wwNTRcMDU1XDA1NlwwNTdcMDYwXDA2MVwwNjJcMDYzXDA2NFwwNjVcMDY2XDA2N1wwNzBcMDcxXDA3MlwwNzNcMDc0XDA3NVwwNzZcMDc3XDEwMFwxMDFcMTAyXDEwM1wxMDRcMTA1XDEwNlwxMDdcMTEwXDExMVwxMTJcMTEzXDExNFwxMTVcMTE2XDExN1wxMjBcMTIxXDEyMlwxMjNcMTI0XDEyNVwxMjZcMTI3XDEzMFwxMzFcMTMyXDEzM1wxMzRcMTM1XDEzNlwxMzdcMTQwXDE0MVwxNDJcMTQzXDE0NFwxNDVcMTQ2XDE0N1wxNTBcMTUxXDE1MlwxNTNcMTU0XDE1NVwxNTZcMTU3XDE2MFwxNjFcMTYyXDE2M1wxNjRcMTY1XDE2NlwxNjdcMTcwXDE3MVwxNzJcMTczXDE3NFwxNzVcMTc2XDE3N1wyMDBcMjAxXDIwMlwyMDNcMjA0XDIwNVwyMDZcMjA3XDIxMFwyMTFcMjEyXDIxM1wyMTRcMjE1XDIxNlwyMTdcMjIwXDIyMVwyMjJcMjIzXDIyNFwyMjVcMjI2XDIyN1wyMzBcMjMxXDIzMlwyMzNcMjM0XDIzNVwyMzZcMjM3XDI0MFwyNDFcMjQyXDI0M1wyNDRcMjQ1XDI0NlwyNDdcMjUwXDI1MVwyNTJcMjUzXDI1NFwyNTVcMjU2XDI1N1wyNjBcMjYxXDI2MlwyNjNcMjY0XDI2NVwyNjZcMjY3XDI3MFwyNzFcMjcyXDI3M1wyNzRcMjc1XDI3NlwyNzdcMzAwXDMwMVwzMDJcMzAzXDMwNFwzMDVcMzA2XDMwN1wzMTBcMzExXDMxMlwzMTNcMzE0XDMxNVwzMTZcMzE3XDMyMFwzMjFcMzIyXDMyM1wzMjRcMzI1XDMyNlwzMjdcMzMwXDMzMVwzMzJcMzMzXDMzNFwzMzVcMzM2XDMzN1wzNDBcMzQxXDM0MlwzNDNcMzQ0XDM0NVwzNDZcMzQ3XDM1MFwzNTFcMzUyXDM1M1wzNTRcMzU1XDM1NlwzNTdcMzYwXDM2MVwzNjJcMzYzXDM2NFwzNjVcMzY2XDM2N1wzNzBcMzcxXDM3MlwzNzNcMzc0XDM3NVwzNzZcMzc3CisgMDogXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZgorCisvUFteKl1UQUlSRVteKl17MSw2fT9MTC8KKyAgICB4eHh4eHh4eHh4eFBTVEFJUkVJU0xMeHh4eHh4eHh4CisgMDogUFNUQUlSRUlTTEwKKworL1BbXipdVEFJUkVbXipdezEsfT9MTC8KKyAgICB4eHh4eHh4eHh4eFBTVEFJUkVJU0xMeHh4eHh4eHh4CisgMDogUFNUQUlSRUlTTEwKKworLyhcLlxkXGRbMS05XT8pXGQrLworICAgIDEuMjMwMDAzOTM4CisgMDogLjIzMDAwMzkzOAorIDE6IC4yMworICAgIDEuODc1MDAwMjgyICAgCisgMDogLjg3NTAwMDI4MgorIDE6IC44NzUKKyAgICAxLjIzNSAgCisgMDogLjIzNQorIDE6IC4yMworICAgICAgICAgICAgICAgICAgCisvKFwuXGRcZCgoPz0wKXxcZCg/PVxkKSkpLworICAgIDEuMjMwMDAzOTM4ICAgICAgCisgMDogLjIzCisgMTogLjIzCisgMjogCisgICAgMS44NzUwMDAyODIKKyAwOiAuODc1CisgMTogLjg3NQorIDI6IDUKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICAxLjIzNSAKK05vIG1hdGNoCisgICAgCisvYSg/KWIvCisgICAgYWIgCisgMDogYWIKKyAKKy9cYihmb28pXHMrKFx3KykvaQorICAgIEZvb2QgaXMgb24gdGhlIGZvbyB0YWJsZQorIDA6IGZvbyB0YWJsZQorIDE6IGZvbworIDI6IHRhYmxlCisgICAgCisvZm9vKC4qKWJhci8KKyAgICBUaGUgZm9vZCBpcyB1bmRlciB0aGUgYmFyIGluIHRoZSBiYXJuLgorIDA6IGZvb2QgaXMgdW5kZXIgdGhlIGJhciBpbiB0aGUgYmFyCisgMTogZCBpcyB1bmRlciB0aGUgYmFyIGluIHRoZSAKKyAgICAKKy9mb28oLio/KWJhci8KKyAgICBUaGUgZm9vZCBpcyB1bmRlciB0aGUgYmFyIGluIHRoZSBiYXJuLgorIDA6IGZvb2QgaXMgdW5kZXIgdGhlIGJhcgorIDE6IGQgaXMgdW5kZXIgdGhlIAorCisvKC4qKShcZCopLworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMDogSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKyAxOiBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworIDI6IAorICAgIAorLyguKikoXGQrKS8KKyAgICBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworIDA6IEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMTogSSBoYXZlIDIgbnVtYmVyczogNTMxNAorIDI6IDcKKyAKKy8oLio/KShcZCopLworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMDogCisgMTogCisgMjogCisKKy8oLio/KShcZCspLworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMDogSSBoYXZlIDIKKyAxOiBJIGhhdmUgCisgMjogMgorCisvKC4qKShcZCspJC8KKyAgICBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworIDA6IEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMTogSSBoYXZlIDIgbnVtYmVyczogNTMxNAorIDI6IDcKKworLyguKj8pKFxkKykkLworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMDogSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKyAxOiBJIGhhdmUgMiBudW1iZXJzOiAKKyAyOiA1MzE0NworCisvKC4qKVxiKFxkKykkLworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMDogSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKyAxOiBJIGhhdmUgMiBudW1iZXJzOiAKKyAyOiA1MzE0NworCisvKC4qXEQpKFxkKykkLworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMDogSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKyAxOiBJIGhhdmUgMiBudW1iZXJzOiAKKyAyOiA1MzE0NworCisvXlxEKig/ITEyMykvCisgICAgQUJDMTIzCisgMDogQUIKKyAgICAgCisvXihcRCopKD89XGQpKD8hMTIzKS8KKyAgICBBQkM0NDUKKyAwOiBBQkMKKyAxOiBBQkMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQzEyMworTm8gbWF0Y2gKKyAgICAKKy9eW1ctXTQ2XS8KKyAgICBXNDZdNzg5IAorIDA6IFc0Nl0KKyAgICAtNDZdNzg5CisgMDogLTQ2XQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgV2FsbAorTm8gbWF0Y2gKKyAgICBaZWJyYQorTm8gbWF0Y2gKKyAgICA0MgorTm8gbWF0Y2gKKyAgICBbYWJjZF0gCitObyBtYXRjaAorICAgIF1hYmNkWworTm8gbWF0Y2gKKyAgICAgICAKKy9eW1ctXF00Nl0vCisgICAgVzQ2XTc4OSAKKyAwOiBXCisgICAgV2FsbAorIDA6IFcKKyAgICBaZWJyYQorIDA6IFoKKyAgICBYeWxvcGhvbmUgIAorIDA6IFgKKyAgICA0MgorIDA6IDQKKyAgICBbYWJjZF0gCisgMDogWworICAgIF1hYmNkWworIDA6IF0KKyAgICBcXGJhY2tzbGFzaCAKKyAwOiBcCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAtNDZdNzg5CitObyBtYXRjaAorICAgIHdlbGwKK05vIG1hdGNoCisgICAgCisvXGRcZFwvXGRcZFwvXGRcZFxkXGQvCisgICAgMDEvMDEvMjAwMAorIDA6IDAxLzAxLzIwMDAKKworL3dvcmQgKD86W2EtekEtWjAtOV0rICl7MCwxMH1vdGhlcndvcmQvCisgICAgd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyayBvdGhlcndvcmQKKyAwOiB3b3JkIGNhdCBkb2cgZWxlcGhhbnQgbXVzc2VsIGNvdyBob3JzZSBjYW5hcnkgYmFib29uIHNuYWtlIHNoYXJrIG90aGVyd29yZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyaworTm8gbWF0Y2gKKworL3dvcmQgKD86W2EtekEtWjAtOV0rICl7MCwzMDB9b3RoZXJ3b3JkLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyayB0aGUgcXVpY2sgYnJvd24gZm94IGFuZCB0aGUgbGF6eSBkb2cgYW5kIHNldmVyYWwgb3RoZXIgd29yZHMgZ2V0dGluZyBjbG9zZSB0byB0aGlydHkgYnkgbm93IEkgaG9wZQorTm8gbWF0Y2gKKworL14oYSl7MCwwfS8KKyAgICBiY2QKKyAwOiAKKyAgICBhYmMKKyAwOiAKKyAgICBhYWIgICAgIAorIDA6IAorCisvXihhKXswLDF9LworICAgIGJjZAorIDA6IAorICAgIGFiYworIDA6IGEKKyAxOiBhCisgICAgYWFiICAKKyAwOiBhCisgMTogYQorCisvXihhKXswLDJ9LworICAgIGJjZAorIDA6IAorICAgIGFiYworIDA6IGEKKyAxOiBhCisgICAgYWFiICAKKyAwOiBhYQorIDE6IGEKKworL14oYSl7MCwzfS8KKyAgICBiY2QKKyAwOiAKKyAgICBhYmMKKyAwOiBhCisgMTogYQorICAgIGFhYgorIDA6IGFhCisgMTogYQorICAgIGFhYSAgIAorIDA6IGFhYQorIDE6IGEKKworL14oYSl7MCx9LworICAgIGJjZAorIDA6IAorICAgIGFiYworIDA6IGEKKyAxOiBhCisgICAgYWFiCisgMDogYWEKKyAxOiBhCisgICAgYWFhCisgMDogYWFhCisgMTogYQorICAgIGFhYWFhYWFhICAgIAorIDA6IGFhYWFhYWFhCisgMTogYQorCisvXihhKXsxLDF9LworICAgIGFiYworIDA6IGEKKyAxOiBhCisgICAgYWFiICAKKyAwOiBhCisgMTogYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmNkCitObyBtYXRjaAorCisvXihhKXsxLDJ9LworICAgIGFiYworIDA6IGEKKyAxOiBhCisgICAgYWFiICAKKyAwOiBhYQorIDE6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJjZAorTm8gbWF0Y2gKKworL14oYSl7MSwzfS8KKyAgICBhYmMKKyAwOiBhCisgMTogYQorICAgIGFhYgorIDA6IGFhCisgMTogYQorICAgIGFhYSAgIAorIDA6IGFhYQorIDE6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJjZAorTm8gbWF0Y2gKKworL14oYSl7MSx9LworICAgIGFiYworIDA6IGEKKyAxOiBhCisgICAgYWFiCisgMDogYWEKKyAxOiBhCisgICAgYWFhCisgMDogYWFhCisgMTogYQorICAgIGFhYWFhYWFhICAgIAorIDA6IGFhYWFhYWFhCisgMTogYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmNkCitObyBtYXRjaAorCisvLipcLmdpZi8KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisgMDogYmliLmdpZgorCisvLnswLH1cLmdpZi8KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisgMDogYmliLmdpZgorCisvLipcLmdpZi9tCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ubworIDA6IGJpYi5naWYKKworLy4qXC5naWYvcworICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKyAwOiBib3JmbGVceDBhYmliLmdpZgorCisvLipcLmdpZi9tcworICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKyAwOiBib3JmbGVceDBhYmliLmdpZgorICAgIAorLy4qJC8KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisgMDogbm8KKworLy4qJC9tCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ubworIDA6IGJvcmZsZQorCisvLiokL3MKKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisgMDogYm9yZmxlXHgwYWJpYi5naWZceDBhbm8KKworLy4qJC9tcworICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKyAwOiBib3JmbGVceDBhYmliLmdpZlx4MGFubworICAgIAorLy4qJC8KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vXG4KKyAwOiBubworCisvLiokL20KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vXG4KKyAwOiBib3JmbGUKKworLy4qJC9zCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ub1xuCisgMDogYm9yZmxlXHgwYWJpYi5naWZceDBhbm9ceDBhCisKKy8uKiQvbXMKKyAgICBib3JmbGVcbmJpYi5naWZcbm5vXG4KKyAwOiBib3JmbGVceDBhYmliLmdpZlx4MGFub1x4MGEKKyAgICAKKy8oLipYfF5CKS8KKyAgICBhYmNkZVxuMTIzNFh5egorIDA6IDEyMzRYCisgMTogMTIzNFgKKyAgICBCYXJGb28gCisgMDogQgorIDE6IEIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlXG5CYXIgIAorTm8gbWF0Y2gKKworLyguKlh8XkIpL20KKyAgICBhYmNkZVxuMTIzNFh5egorIDA6IDEyMzRYCisgMTogMTIzNFgKKyAgICBCYXJGb28gCisgMDogQgorIDE6IEIKKyAgICBhYmNkZVxuQmFyICAKKyAwOiBCCisgMTogQgorCisvKC4qWHxeQikvcworICAgIGFiY2RlXG4xMjM0WHl6CisgMDogYWJjZGVceDBhMTIzNFgKKyAxOiBhYmNkZVx4MGExMjM0WAorICAgIEJhckZvbyAKKyAwOiBCCisgMTogQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGVcbkJhciAgCitObyBtYXRjaAorCisvKC4qWHxeQikvbXMKKyAgICBhYmNkZVxuMTIzNFh5egorIDA6IGFiY2RlXHgwYTEyMzRYCisgMTogYWJjZGVceDBhMTIzNFgKKyAgICBCYXJGb28gCisgMDogQgorIDE6IEIKKyAgICBhYmNkZVxuQmFyICAKKyAwOiBCCisgMTogQgorCisvKD9zKSguKlh8XkIpLworICAgIGFiY2RlXG4xMjM0WHl6CisgMDogYWJjZGVceDBhMTIzNFgKKyAxOiBhYmNkZVx4MGExMjM0WAorICAgIEJhckZvbyAKKyAwOiBCCisgMTogQgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiY2RlXG5CYXIgIAorTm8gbWF0Y2gKKworLyg/czouKlh8XkIpLworICAgIGFiY2RlXG4xMjM0WHl6CisgMDogYWJjZGVceDBhMTIzNFgKKyAgICBCYXJGb28gCisgMDogQgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiY2RlXG5CYXIgIAorTm8gbWF0Y2gKKworL14uKkIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcbkIKK05vIG1hdGNoCisgICAgIAorLyg/cyleLipCLworICAgIGFiY1xuQgorIDA6IGFiY1x4MGFCCisKKy8oP20pXi4qQi8KKyAgICBhYmNcbkIKKyAwOiBCCisgICAgIAorLyg/bXMpXi4qQi8KKyAgICBhYmNcbkIKKyAwOiBhYmNceDBhQgorCisvKD9tcyleQi8KKyAgICBhYmNcbkIKKyAwOiBCCisKKy8oP3MpQiQvCisgICAgQlxuCisgMDogQgorCisvXlswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XS8KKyAgICAxMjM0NTY2NTQzMjEKKyAwOiAxMjM0NTY2NTQzMjEKKyAgCisvXlxkXGRcZFxkXGRcZFxkXGRcZFxkXGRcZC8KKyAgICAxMjM0NTY2NTQzMjEgCisgMDogMTIzNDU2NjU0MzIxCisKKy9eW1xkXVtcZF1bXGRdW1xkXVtcZF1bXGRdW1xkXVtcZF1bXGRdW1xkXVtcZF1bXGRdLworICAgIDEyMzQ1NjY1NDMyMQorIDA6IDEyMzQ1NjY1NDMyMQorICAKKy9eW2FiY117MTJ9LworICAgIGFiY2FiY2FiY2FiYworIDA6IGFiY2FiY2FiY2FiYworICAgIAorL15bYS1jXXsxMn0vCisgICAgYWJjYWJjYWJjYWJjCisgMDogYWJjYWJjYWJjYWJjCisgICAgCisvXihhfGJ8Yyl7MTJ9LworICAgIGFiY2FiY2FiY2FiYyAKKyAwOiBhYmNhYmNhYmNhYmMKKyAxOiBjCisKKy9eW2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHkwMTIzNDU2Nzg5XS8KKyAgICBuCisgMDogbgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIHogCitObyBtYXRjaAorCisvYWJjZGV7MCwwfS8KKyAgICBhYmNkCisgMDogYWJjZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZSAgCitObyBtYXRjaAorCisvYWJbY2RdezAsMH1lLworICAgIGFiZQorIDA6IGFiZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGUgCitObyBtYXRjaAorICAgIAorL2FiKGMpezAsMH1kLworICAgIGFiZAorIDA6IGFiZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZCAgIAorTm8gbWF0Y2gKKworL2EoYiopLworICAgIGEKKyAwOiBhCisgMTogCisgICAgYWIKKyAwOiBhYgorIDE6IGIKKyAgICBhYmJiYgorIDA6IGFiYmJiCisgMTogYmJiYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmJiYmIgICAgCitObyBtYXRjaAorICAgIAorL2FiXGR7MH1lLworICAgIGFiZQorIDA6IGFiZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIxZSAgIAorTm8gbWF0Y2gKKyAgICAKKy8iKFteXFwiXSt8XFwuKSoiLworICAgIHRoZSBcInF1aWNrXCIgYnJvd24gZm94CisgMDogInF1aWNrIgorIDE6IHF1aWNrCisgICAgXCJ0aGUgXFxcInF1aWNrXFxcIiBicm93biBmb3hcIiAKKyAwOiAidGhlIFwicXVpY2tcIiBicm93biBmb3giCisgMTogIGJyb3duIGZveAorCisvLio/L2csYWZ0ZXJ0ZXh0CisgICAgYWJjCisgMDogCisgMCsgYWJjCisgMDogYQorIDArIGJjCisgMDogCisgMCsgYmMKKyAwOiBiCisgMCsgYworIDA6IAorIDArIGMKKyAwOiBjCisgMCsgCisgMDogCisgMCsgCisgIAorL1xiL2csYWZ0ZXJ0ZXh0CisgICAgYWJjIAorIDA6IAorIDArIGFiYworIDA6IAorIDArIAorCisvXGIvZyxhZnRlcnRleHQKKyAgICBhYmMgCisgMDogCisgMCsgYWJjCisgMDogCisgMCsgCisKKy8vZworICAgIGFiYworIDA6IAorIDA6IAorIDA6IAorIDA6IAorCisvPHRyKFtcd1xXXHNcZF1bXjw+XXswLH0pPjxURChbXHdcV1xzXGRdW148Pl17MCx9KT4oW1xkXXswLH1cLikoLiopKCg8QlI+KFtcd1xXXHNcZF1bXjw+XXswLH0pfFtcc117MCx9KSk8XC9hPjxcL1REPjxURChbXHdcV1xzXGRdW148Pl17MCx9KT4oW1x3XFdcc1xkXVtePD5dezAsfSk8XC9URD48VEQoW1x3XFdcc1xkXVtePD5dezAsfSk+KFtcd1xXXHNcZF1bXjw+XXswLH0pPFwvVEQ+PFwvVFI+L2lzCisgIDxUUiBCR0NPTE9SPScjREJFOUU5Jz48VEQgYWxpZ249bGVmdCB2YWxpZ249dG9wPjQzLjxhIGhyZWY9J2pvYmxpc3QuY2ZtP0pvYklEPTk0IDY3MzUmS2V5d29yZD0nPldvcmQgUHJvY2Vzc29yPEJSPihOLTEyODYpPC9hPjwvVEQ+PFREIGFsaWduPWxlZnQgdmFsaWduPXRvcD5MZWdhIGxzdGFmZi5jb208L1REPjxURCBhbGlnbj1sZWZ0IHZhbGlnbj10b3A+Q0EgLSBTdGF0ZXdpZGU8L1REPjwvVFI+CisgMDogPFRSIEJHQ09MT1I9JyNEQkU5RTknPjxURCBhbGlnbj1sZWZ0IHZhbGlnbj10b3A+NDMuPGEgaHJlZj0nam9ibGlzdC5jZm0/Sm9iSUQ9OTQgNjczNSZLZXl3b3JkPSc+V29yZCBQcm9jZXNzb3I8QlI+KE4tMTI4Nik8L2E+PC9URD48VEQgYWxpZ249bGVmdCB2YWxpZ249dG9wPkxlZ2EgbHN0YWZmLmNvbTwvVEQ+PFREIGFsaWduPWxlZnQgdmFsaWduPXRvcD5DQSAtIFN0YXRld2lkZTwvVEQ+PC9UUj4KKyAxOiAgQkdDT0xPUj0nI0RCRTlFOScKKyAyOiAgYWxpZ249bGVmdCB2YWxpZ249dG9wCisgMzogNDMuCisgNDogPGEgaHJlZj0nam9ibGlzdC5jZm0/Sm9iSUQ9OTQgNjczNSZLZXl3b3JkPSc+V29yZCBQcm9jZXNzb3I8QlI+KE4tMTI4NikKKyA1OiAKKyA2OiAKKyA3OiA8dW5zZXQ+CisgODogIGFsaWduPWxlZnQgdmFsaWduPXRvcAorIDk6IExlZ2EgbHN0YWZmLmNvbQorMTA6ICBhbGlnbj1sZWZ0IHZhbGlnbj10b3AKKzExOiBDQSAtIFN0YXRld2lkZQorCisvYVteYV1iLworICAgIGFjYgorIDA6IGFjYgorICAgIGFcbmIKKyAwOiBhXHgwYWIKKyAgICAKKy9hLmIvCisgICAgYWNiCisgMDogYWNiCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYVxuYiAgIAorTm8gbWF0Y2gKKyAgICAKKy9hW15hXWIvcworICAgIGFjYgorIDA6IGFjYgorICAgIGFcbmIgIAorIDA6IGFceDBhYgorICAgIAorL2EuYi9zCisgICAgYWNiCisgMDogYWNiCisgICAgYVxuYiAgCisgMDogYVx4MGFiCisKKy9eKGIrP3xhKXsxLDJ9P2MvCisgICAgYmFjCisgMDogYmFjCisgMTogYQorICAgIGJiYWMKKyAwOiBiYmFjCisgMTogYQorICAgIGJiYmFjCisgMDogYmJiYWMKKyAxOiBhCisgICAgYmJiYmFjCisgMDogYmJiYmFjCisgMTogYQorICAgIGJiYmJiYWMgCisgMDogYmJiYmJhYworIDE6IGEKKworL14oYit8YSl7MSwyfT9jLworICAgIGJhYworIDA6IGJhYworIDE6IGEKKyAgICBiYmFjCisgMDogYmJhYworIDE6IGEKKyAgICBiYmJhYworIDA6IGJiYmFjCisgMTogYQorICAgIGJiYmJhYworIDA6IGJiYmJhYworIDE6IGEKKyAgICBiYmJiYmFjIAorIDA6IGJiYmJiYWMKKyAxOiBhCisgICAgCisvKD8hXEEpeC9tCisgICAgYVxieFxuCisgMDogeAorICAgIGFcbnhcbgorIDA6IHgKK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgeFxuYlxuCitObyBtYXRjaAorICAgIAorLyhBfEIpKj9DRC8KKyAgICBDRCAKKyAwOiBDRAorICAgIAorLyhBfEIpKkNELworICAgIENEIAorIDA6IENECisKKy8oQUIpKj9cMS8KKyAgICBBQkFCQUIKKyAwOiBBQkFCCisgMTogQUIKKworLyhBQikqXDEvCisgICAgQUJBQkFCCisgMDogQUJBQkFCCisgMTogQUIKKyAgICAKKy8oPzwhYmFyKWZvby8KKyAgICBmb28KKyAwOiBmb28KKyAgICBjYXRmb29kCisgMDogZm9vCisgICAgYXJmb290bGUKKyAwOiBmb28KKyAgICByZm9vc2gKKyAwOiBmb28KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhcmZvbworTm8gbWF0Y2gKKyAgICB0b3diYXJmb28KK05vIG1hdGNoCisKKy9cd3szfSg/PCFiYXIpZm9vLworICAgIGNhdGZvb2QKKyAwOiBjYXRmb28KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGZvbworTm8gbWF0Y2gKKyAgICBiYXJmb28KK05vIG1hdGNoCisgICAgdG93YmFyZm9vCitObyBtYXRjaAorCisvKD88PShmb28pYSliYXIvCisgICAgZm9vYWJhcgorIDA6IGJhcgorIDE6IGZvbworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmFyCitObyBtYXRjaAorICAgIGZvb2JiYXIKK05vIG1hdGNoCisgICAgICAKKy9cQWFiY1x6L20KKyAgICBhYmMKKyAwOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY1xuICAgCitObyBtYXRjaAorICAgIHFxcVxuYWJjCitObyBtYXRjaAorICAgIGFiY1xuenp6CitObyBtYXRjaAorICAgIHFxcVxuYWJjXG56enoKK05vIG1hdGNoCisKKyIoPz4uKi8pZm9vIgorICAgIC90aGlzL2lzL2EvdmVyeS9sb25nL2xpbmUvaW4vZGVlZC93aXRoL3ZlcnkvbWFueS9zbGFzaGVzL2luL2FuZC9mb28KKyAwOiAvdGhpcy9pcy9hL3ZlcnkvbG9uZy9saW5lL2luL2RlZWQvd2l0aC92ZXJ5L21hbnkvc2xhc2hlcy9pbi9hbmQvZm9vCitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIC90aGlzL2lzL2EvdmVyeS9sb25nL2xpbmUvaW4vZGVlZC93aXRoL3ZlcnkvbWFueS9zbGFzaGVzL2luL2l0L3lvdS9zZWUvCitObyBtYXRjaAorCisvKD8+KFwuXGRcZFsxLTldPykpXGQrLworICAgIDEuMjMwMDAzOTM4CisgMDogLjIzMDAwMzkzOAorIDE6IC4yMworICAgIDEuODc1MDAwMjgyCisgMDogLjg3NTAwMDI4MgorIDE6IC44NzUKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICAxLjIzNSAKK05vIG1hdGNoCisKKy9eKCg/Plx3Kyl8KD8+XHMrKSkqJC8KKyAgICBub3cgaXMgdGhlIHRpbWUgZm9yIGFsbCBnb29kIG1lbiB0byBjb21lIHRvIHRoZSBhaWQgb2YgdGhlIHBhcnR5CisgMDogbm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBtZW4gdG8gY29tZSB0byB0aGUgYWlkIG9mIHRoZSBwYXJ0eQorIDE6IHBhcnR5CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB0aGlzIGlzIG5vdCBhIGxpbmUgd2l0aCBvbmx5IHdvcmRzIGFuZCBzcGFjZXMhCitObyBtYXRjaAorICAgIAorLyhcZCspKFx3KS8KKyAgICAxMjM0NWEKKyAwOiAxMjM0NWEKKyAxOiAxMjM0NQorIDI6IGEKKyAgICAxMjM0NSsgCisgMDogMTIzNDUKKyAxOiAxMjM0CisgMjogNQorCisvKCg/PlxkKykpKFx3KS8KKyAgICAxMjM0NWEKKyAwOiAxMjM0NWEKKyAxOiAxMjM0NQorIDI6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQ1KyAKK05vIG1hdGNoCisKKy8oPz5hKyliLworICAgIGFhYWIKKyAwOiBhYWFiCisKKy8oKD8+YSspYikvCisgICAgYWFhYgorIDA6IGFhYWIKKyAxOiBhYWFiCisKKy8oPz4oYSspKWIvCisgICAgYWFhYgorIDA6IGFhYWIKKyAxOiBhYWEKKworLyg/PmIpKy8KKyAgICBhYWFiYmJjY2MKKyAwOiBiYmIKKworLyg/PmErfGIrfGMrKSpjLworICAgIGFhYWJiYmJjY2NjZAorIDA6IGFhYWJiYmJjCisKKy8oKD8+W14oKV0rKXxcKFteKCldKlwpKSsvCisgICAgKChhYmMoYWRlKXVmaCgpKCl4CisgMDogYWJjKGFkZSl1ZmgoKSgpeAorIDE6IHgKKyAgICAKKy9cKCgoPz5bXigpXSspfFwoW14oKV0rXCkpK1wpLworICAgIChhYmMpCisgMDogKGFiYykKKyAxOiBhYmMKKyAgICAoYWJjKGRlZil4eXopCisgMDogKGFiYyhkZWYpeHl6KQorIDE6IHh5egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgKCgoKWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhICAgCitObyBtYXRjaAorCisvYSg/LWkpYi9pCisgICAgYWIKKyAwOiBhYgorICAgIEFiCisgMDogQWIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhQgorTm8gbWF0Y2gKKyAgICBBQgorTm8gbWF0Y2gKKyAgICAgICAgCisvKGEgKD94KWIgYylkIGUvCisgICAgYSBiY2QgZQorIDA6IGEgYmNkIGUKKyAxOiBhIGJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhIGIgY2QgZQorTm8gbWF0Y2gKKyAgICBhYmNkIGUgICAKK05vIG1hdGNoCisgICAgYSBiY2RlIAorTm8gbWF0Y2gKKyAKKy8oYSBiKD94KWMgZCAoPy14KWUgZikvCisgICAgYSBiY2RlIGYKKyAwOiBhIGJjZGUgZgorIDE6IGEgYmNkZSBmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkZWYgIAorTm8gbWF0Y2gKKworLyhhKD9pKWIpYy8KKyAgICBhYmMKKyAwOiBhYmMKKyAxOiBhYgorICAgIGFCYworIDA6IGFCYworIDE6IGFCCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYkMKK05vIG1hdGNoCisgICAgYUJDICAKK05vIG1hdGNoCisgICAgQWJjCitObyBtYXRjaAorICAgIEFCYworTm8gbWF0Y2gKKyAgICBBQkMKK05vIG1hdGNoCisgICAgQWJDCitObyBtYXRjaAorICAgIAorL2EoP2k6YiljLworICAgIGFiYworIDA6IGFiYworICAgIGFCYworIDA6IGFCYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIEFCQworTm8gbWF0Y2gKKyAgICBhYkMKK05vIG1hdGNoCisgICAgYUJDCitObyBtYXRjaAorICAgIAorL2EoP2k6YikqYy8KKyAgICBhQmMKKyAwOiBhQmMKKyAgICBhQkJjCisgMDogYUJCYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFCQworTm8gbWF0Y2gKKyAgICBhQkJDCitObyBtYXRjaAorICAgIAorL2EoPz1iKD9pKWMpXHdcd2QvCisgICAgYWJjZAorIDA6IGFiY2QKKyAgICBhYkNkCisgMDogYWJDZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYUJDZAorTm8gbWF0Y2gKKyAgICBhYmNEICAgICAKK05vIG1hdGNoCisgICAgCisvKD9zLWk6bW9yZS4qdGhhbikuKm1pbGxpb24vaQorICAgIG1vcmUgdGhhbiBtaWxsaW9uCisgMDogbW9yZSB0aGFuIG1pbGxpb24KKyAgICBtb3JlIHRoYW4gTUlMTElPTgorIDA6IG1vcmUgdGhhbiBNSUxMSU9OCisgICAgbW9yZSBcbiB0aGFuIE1pbGxpb24gCisgMDogbW9yZSBceDBhIHRoYW4gTWlsbGlvbgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgTU9SRSBUSEFOIE1JTExJT04gICAgCitObyBtYXRjaAorICAgIG1vcmUgXG4gdGhhbiBcbiBtaWxsaW9uIAorTm8gbWF0Y2gKKworLyg/Oig/cy1pKW1vcmUuKnRoYW4pLiptaWxsaW9uL2kKKyAgICBtb3JlIHRoYW4gbWlsbGlvbgorIDA6IG1vcmUgdGhhbiBtaWxsaW9uCisgICAgbW9yZSB0aGFuIE1JTExJT04KKyAwOiBtb3JlIHRoYW4gTUlMTElPTgorICAgIG1vcmUgXG4gdGhhbiBNaWxsaW9uIAorIDA6IG1vcmUgXHgwYSB0aGFuIE1pbGxpb24KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIE1PUkUgVEhBTiBNSUxMSU9OICAgIAorTm8gbWF0Y2gKKyAgICBtb3JlIFxuIHRoYW4gXG4gbWlsbGlvbiAKK05vIG1hdGNoCisgICAgCisvKD8+YSg/aSliKykrYy8KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBhQmJjCisgMDogYUJiYworICAgIGFCQmMgCisgMDogYUJCYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWJjCitObyBtYXRjaAorICAgIGFiQWIgICAgCitObyBtYXRjaAorICAgIGFiYkMgCitObyBtYXRjaAorICAgIAorLyg/PWEoP2kpYilcd1x3Yy8KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBhQmMKKyAwOiBhQmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiIAorTm8gbWF0Y2gKKyAgICBhYkMKK05vIG1hdGNoCisgICAgYUJDICAgICAKK05vIG1hdGNoCisgICAgCisvKD88PWEoP2kpYikoXHdcdyljLworICAgIGFieHhjCisgMDogeHhjCisgMTogeHgKKyAgICBhQnh4YworIDA6IHh4YworIDE6IHh4CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYnh4YworTm8gbWF0Y2gKKyAgICBBQnh4YworTm8gbWF0Y2gKKyAgICBhYnh4QyAgICAgIAorTm8gbWF0Y2gKKworLyg/OihhKXxiKSg/KDEpQXxCKS8KKyAgICBhQQorIDA6IGFBCisgMTogYQorICAgIGJCCisgMDogYkIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFCCitObyBtYXRjaAorICAgIGJBICAgIAorTm8gbWF0Y2gKKworL14oYSk/KD8oMSlhfGIpKyQvCisgICAgYWEKKyAwOiBhYQorIDE6IGEKKyAgICBiCisgMDogYgorICAgIGJiICAKKyAwOiBiYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIgICAKK05vIG1hdGNoCisgICAgCisjIFBlcmwgZ2V0cyB0aGlzIG5leHQgb25lIHdyb25nIGlmIHRoZSBwYXR0ZXJuIGVuZHMgd2l0aCAkOyBpbiB0aGF0IGNhc2UgaXQKKyMgZmFpbHMgdG8gbWF0Y2ggIjEyIi4gCisKKy9eKD8oPz1hYmMpXHd7M306fFxkXGQpLworICAgIGFiYzoKKyAwOiBhYmM6CisgICAgMTIKKyAwOiAxMgorICAgIDEyMworIDA6IDEyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXogICAgCitObyBtYXRjaAorCisvXig/KD8hYWJjKVxkXGR8XHd7M306KSQvCisgICAgYWJjOgorIDA6IGFiYzoKKyAgICAxMgorIDA6IDEyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjMKK05vIG1hdGNoCisgICAgeHl6ICAgIAorTm8gbWF0Y2gKKyAgICAKKy8oPyg/PD1mb28pYmFyfGNhdCkvCisgICAgZm9vYmFyCisgMDogYmFyCisgICAgY2F0CisgMDogY2F0CisgICAgZmNhdAorIDA6IGNhdAorICAgIGZvY2F0ICAgCisgMDogY2F0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBmb29jYXQgIAorTm8gbWF0Y2gKKworLyg/KD88IWZvbyljYXR8YmFyKS8KKyAgICBmb29iYXIKKyAwOiBiYXIKKyAgICBjYXQKKyAwOiBjYXQKKyAgICBmY2F0CisgMDogY2F0CisgICAgZm9jYXQgICAKKyAwOiBjYXQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGZvb2NhdCAgCitObyBtYXRjaAorCisvKCBcKCApPyBbXigpXSsgKD8oMSkgXCkgfCkgL3gKKyAgICBhYmNkCisgMDogYWJjZAorICAgIChhYmNkKQorIDA6IChhYmNkKQorIDE6ICgKKyAgICB0aGUgcXVpY2sgKGFiY2QpIGZveAorIDA6IHRoZSBxdWljayAKKyAgICAoYWJjZCAgIAorIDA6IGFiY2QKKworLyggXCggKT8gW14oKV0rICg/KDEpIFwpICkgL3gKKyAgICBhYmNkCisgMDogYWJjZAorICAgIChhYmNkKQorIDA6IChhYmNkKQorIDE6ICgKKyAgICB0aGUgcXVpY2sgKGFiY2QpIGZveAorIDA6IHRoZSBxdWljayAKKyAgICAoYWJjZCAgIAorIDA6IGFiY2QKKworL14oPygyKWF8KDEpKDIpKSskLworICAgIDEyCisgMDogMTIKKyAxOiAxCisgMjogMgorICAgIDEyYQorIDA6IDEyYQorIDE6IDEKKyAyOiAyCisgICAgMTJhYQorIDA6IDEyYWEKKyAxOiAxCisgMjogMgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNCAgICAKK05vIG1hdGNoCisKKy8oKD9pKWJsYWgpXHMrXDEvCisgICAgYmxhaCBibGFoCisgMDogYmxhaCBibGFoCisgMTogYmxhaAorICAgIEJMQUggQkxBSAorIDA6IEJMQUggQkxBSAorIDE6IEJMQUgKKyAgICBCbGFoIEJsYWgKKyAwOiBCbGFoIEJsYWgKKyAxOiBCbGFoCisgICAgYmxhSCBibGFICisgMDogYmxhSCBibGFICisgMTogYmxhSAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmxhaCBCTEFICitObyBtYXRjaAorICAgIEJsYWggYmxhaCAgICAgIAorTm8gbWF0Y2gKKyAgICBibGFIIGJsYWggCitObyBtYXRjaAorCisvKCg/aSlibGFoKVxzKyg/aTpcMSkvCisgICAgYmxhaCBibGFoCisgMDogYmxhaCBibGFoCisgMTogYmxhaAorICAgIEJMQUggQkxBSAorIDA6IEJMQUggQkxBSAorIDE6IEJMQUgKKyAgICBCbGFoIEJsYWgKKyAwOiBCbGFoIEJsYWgKKyAxOiBCbGFoCisgICAgYmxhSCBibGFICisgMDogYmxhSCBibGFICisgMTogYmxhSAorICAgIGJsYWggQkxBSAorIDA6IGJsYWggQkxBSAorIDE6IGJsYWgKKyAgICBCbGFoIGJsYWggICAgICAKKyAwOiBCbGFoIGJsYWgKKyAxOiBCbGFoCisgICAgYmxhSCBibGFoIAorIDA6IGJsYUggYmxhaAorIDE6IGJsYUgKKworLyg/PmEqKSovCisgICAgYQorIDA6IGEKKyAgICBhYQorIDA6IGFhCisgICAgYWFhYQorIDA6IGFhYWEKKyAgICAKKy8oYWJjfCkrLworICAgIGFiYworIDA6IGFiYworIDE6IAorICAgIGFiY2FiYworIDA6IGFiY2FiYworIDE6IAorICAgIGFiY2FiY2FiYworIDA6IGFiY2FiY2FiYworIDE6IAorICAgIHh5eiAgICAgIAorIDA6IAorIDE6IAorCisvKFthXSopKi8KKyAgICBhCisgMDogYQorIDE6IAorICAgIGFhYWFhIAorIDA6IGFhYWFhCisgMTogCisgCisvKFthYl0qKSovCisgICAgYQorIDA6IGEKKyAxOiAKKyAgICBiCisgMDogYgorIDE6IAorICAgIGFiYWJhYgorIDA6IGFiYWJhYgorIDE6IAorICAgIGFhYWFiY2RlCisgMDogYWFhYWIKKyAxOiAKKyAgICBiYmJiICAgIAorIDA6IGJiYmIKKyAxOiAKKyAKKy8oW15hXSopKi8KKyAgICBiCisgMDogYgorIDE6IAorICAgIGJiYmIKKyAwOiBiYmJiCisgMTogCisgICAgYWFhICAgCisgMDogCisgMTogCisgCisvKFteYWJdKikqLworICAgIGNjY2MKKyAwOiBjY2NjCisgMTogCisgICAgYWJhYiAgCisgMDogCisgMTogCisgCisvKFthXSo/KSovCisgICAgYQorIDA6IAorIDE6IAorICAgIGFhYWEgCisgMDogCisgMTogCisgCisvKFthYl0qPykqLworICAgIGEKKyAwOiAKKyAxOiAKKyAgICBiCisgMDogCisgMTogCisgICAgYWJhYgorIDA6IAorIDE6IAorICAgIGJhYmEgICAKKyAwOiAKKyAxOiAKKyAKKy8oW15hXSo/KSovCisgICAgYgorIDA6IAorIDE6IAorICAgIGJiYmIKKyAwOiAKKyAxOiAKKyAgICBhYWEgICAKKyAwOiAKKyAxOiAKKyAKKy8oW15hYl0qPykqLworICAgIGMKKyAwOiAKKyAxOiAKKyAgICBjY2NjCisgMDogCisgMTogCisgICAgYmFiYSAgIAorIDA6IAorIDE6IAorIAorLyg/PmEqKSovCisgICAgYQorIDA6IGEKKyAgICBhYWFiY2RlIAorIDA6IGFhYQorIAorLygoPz5hKikpKi8KKyAgICBhYWFhYQorIDA6IGFhYWFhCisgMTogCisgICAgYWFiYmFhIAorIDA6IGFhCisgMTogCisgCisvKCg/PmEqPykpKi8KKyAgICBhYWFhYQorIDA6IAorIDE6IAorICAgIGFhYmJhYSAKKyAwOiAKKyAxOiAKKworLyg/KD89W15hLXpdK1thLXpdKSAgXGR7Mn0tW2Etel17M30tXGR7Mn0gIHwgIFxkezJ9LVxkezJ9LVxkezJ9ICkgL3gKKyAgICAxMi1zZXAtOTgKKyAwOiAxMi1zZXAtOTgKKyAgICAxMi0wOS05OAorIDA6IDEyLTA5LTk4CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBzZXAtMTItOTgKK05vIG1hdGNoCisgICAgICAgIAorLyg/PD0oZm9vKSliYXJcMS8KKyAgICBmb29iYXJmb28KKyAwOiBiYXJmb28KKyAxOiBmb28KKyAgICBmb29iYXJmb290bGluZyAKKyAwOiBiYXJmb28KKyAxOiBmb28KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGZvb2JhcgorTm8gbWF0Y2gKKyAgICBiYXJmb28gICAKK05vIG1hdGNoCisKKy8oP2k6c2F0dXJkYXl8c3VuZGF5KS8KKyAgICBzYXR1cmRheQorIDA6IHNhdHVyZGF5CisgICAgc3VuZGF5CisgMDogc3VuZGF5CisgICAgU2F0dXJkYXkKKyAwOiBTYXR1cmRheQorICAgIFN1bmRheQorIDA6IFN1bmRheQorICAgIFNBVFVSREFZCisgMDogU0FUVVJEQVkKKyAgICBTVU5EQVkKKyAwOiBTVU5EQVkKKyAgICBTdW5EYXkKKyAwOiBTdW5EYXkKKyAgICAKKy8oYSg/aSliY3xCQil4LworICAgIGFiY3gKKyAwOiBhYmN4CisgMTogYWJjCisgICAgYUJDeAorIDA6IGFCQ3gKKyAxOiBhQkMKKyAgICBiYngKKyAwOiBiYngKKyAxOiBiYgorICAgIEJCeAorIDA6IEJCeAorIDE6IEJCCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNYCitObyBtYXRjaAorICAgIGFCQ1gKK05vIG1hdGNoCisgICAgYmJYCitObyBtYXRjaAorICAgIEJCWCAgICAgICAgICAgICAgIAorTm8gbWF0Y2gKKworL14oW2FiXSg/aSlbY2RdfFtlZl0pLworICAgIGFjCisgMDogYWMKKyAxOiBhYworICAgIGFDCisgMDogYUMKKyAxOiBhQworICAgIGJECisgMDogYkQKKyAxOiBiRAorICAgIGVsZXBoYW50CisgMDogZQorIDE6IGUKKyAgICBFdXJvcGUgCisgMDogRQorIDE6IEUKKyAgICBmcm9nCisgMDogZgorIDE6IGYKKyAgICBGcmFuY2UKKyAwOiBGCisgMTogRgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWZyaWNhICAgICAKK05vIG1hdGNoCisKKy9eKGFifGEoP2kpW2ItY10oP20taSlkfHgoP2kpeXx6KS8KKyAgICBhYgorIDA6IGFiCisgMTogYWIKKyAgICBhQmQKKyAwOiBhQmQKKyAxOiBhQmQKKyAgICB4eQorIDA6IHh5CisgMTogeHkKKyAgICB4WQorIDA6IHhZCisgMTogeFkKKyAgICB6ZWJyYQorIDA6IHoKKyAxOiB6CisgICAgWmFtYmVzaQorIDA6IFoKKyAxOiBaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhQ0QgIAorTm8gbWF0Y2gKKyAgICBYWSAgCitObyBtYXRjaAorCisvKD88PWZvb1xuKV5iYXIvbQorICAgIGZvb1xuYmFyCisgMDogYmFyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYXIKK05vIG1hdGNoCisgICAgYmF6XG5iYXIgICAKK05vIG1hdGNoCisKKy8oPzw9KD88IWZvbyliYXIpYmF6LworICAgIGJhcmJhegorIDA6IGJhegorICAgIGJhcmJhcmJheiAKKyAwOiBiYXoKKyAgICBrb29iYXJiYXogCisgMDogYmF6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYXoKK05vIG1hdGNoCisgICAgZm9vYmFyYmF6IAorTm8gbWF0Y2gKKworIyBUaGUgY2FzZXMgb2YgYWFhYSBhbmQgYWFhYWFhIGFyZSBtaXNzZWQgb3V0IGJlbG93IGJlY2F1c2UgUGVybCBkb2VzIHRoaW5ncworIyBkaWZmZXJlbnRseS4gV2Uga25vdyB0aGF0IG9kZCwgYW5kIG1heWJlIGluY29ycmVjdCwgdGhpbmdzIGhhcHBlbiB3aXRoCisjIHJlY3Vyc2l2ZSByZWZlcmVuY2VzIGluIFBlcmwsIGFzIGZhciBhcyA1LjExLjMgLSBzZWUgc29tZSBzdHVmZiBpbiB0ZXN0ICMyLgorCisvXihhXDE/KXs0fSQvCisgICAgYWFhYWEKKyAwOiBhYWFhYQorIDE6IGEKKyAgICBhYWFhYWFhCisgMDogYWFhYWFhYQorIDE6IGEKKyAgICBhYWFhYWFhYWFhCisgMDogYWFhYWFhYWFhYQorIDE6IGFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKK05vIG1hdGNoCisgICAgYWEKK05vIG1hdGNoCisgICAgYWFhCitObyBtYXRjaAorICAgIGFhYWFhYWFhCitObyBtYXRjaAorICAgIGFhYWFhYWFhYQorTm8gbWF0Y2gKKyAgICBhYWFhYWFhYWFhYQorTm8gbWF0Y2gKKyAgICBhYWFhYWFhYWFhYWEKK05vIG1hdGNoCisgICAgYWFhYWFhYWFhYWFhYQorTm8gbWF0Y2gKKyAgICBhYWFhYWFhYWFhYWFhYQorTm8gbWF0Y2gKKyAgICBhYWFhYWFhYWFhYWFhYWEKK05vIG1hdGNoCisgICAgYWFhYWFhYWFhYWFhYWFhYQorTm8gbWF0Y2gKKworL14oYVwxPykoYVwxPykoYVwyPykoYVwzPykkLworICAgIGFhYWEKKyAwOiBhYWFhCisgMTogYQorIDI6IGEKKyAzOiBhCisgNDogYQorICAgIGFhYWFhCisgMDogYWFhYWEKKyAxOiBhCisgMjogYWEKKyAzOiBhCisgNDogYQorICAgIGFhYWFhYQorIDA6IGFhYWFhYQorIDE6IGEKKyAyOiBhYQorIDM6IGEKKyA0OiBhYQorICAgIGFhYWFhYWEKKyAwOiBhYWFhYWFhCisgMTogYQorIDI6IGFhCisgMzogYWFhCisgNDogYQorICAgIGFhYWFhYWFhYWEKKyAwOiBhYWFhYWFhYWFhCisgMTogYQorIDI6IGFhCisgMzogYWFhCisgNDogYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorTm8gbWF0Y2gKKyAgICBhYQorTm8gbWF0Y2gKKyAgICBhYWEKK05vIG1hdGNoCisgICAgYWFhYWFhYWEKK05vIG1hdGNoCisgICAgYWFhYWFhYWFhCitObyBtYXRjaAorICAgIGFhYWFhYWFhYWFhCitObyBtYXRjaAorICAgIGFhYWFhYWFhYWFhYQorTm8gbWF0Y2gKKyAgICBhYWFhYWFhYWFhYWFhCitObyBtYXRjaAorICAgIGFhYWFhYWFhYWFhYWFhCitObyBtYXRjaAorICAgIGFhYWFhYWFhYWFhYWFhYQorTm8gbWF0Y2gKKyAgICBhYWFhYWFhYWFhYWFhYWFhICAgICAgICAgICAgICAgCitObyBtYXRjaAorCisjIFRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHRha2VuIGZyb20gdGhlIFBlcmwgNS4wMDUgdGVzdCBzdWl0ZTsgc29tZSBvZiB0aGVtCisjIGFyZSBjb21wYXRpYmxlIHdpdGggNS4wMDQsIGJ1dCBJJ2QgcmF0aGVyIG5vdCBoYXZlIHRvIHNvcnQgdGhlbSBvdXQuCisKKy9hYmMvCisgICAgYWJjCisgMDogYWJjCisgICAgeGFiY3kKKyAwOiBhYmMKKyAgICBhYmFiYworIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeGJjCitObyBtYXRjaAorICAgIGF4YworTm8gbWF0Y2gKKyAgICBhYngKK05vIG1hdGNoCisKKy9hYipjLworICAgIGFiYworIDA6IGFiYworCisvYWIqYmMvCisgICAgYWJjCisgMDogYWJjCisgICAgYWJiYworIDA6IGFiYmMKKyAgICBhYmJiYmMKKyAwOiBhYmJiYmMKKworLy57MX0vCisgICAgYWJiYmJjCisgMDogYQorCisvLnszLDR9LworICAgIGFiYmJiYworIDA6IGFiYmIKKworL2FiezAsfWJjLworICAgIGFiYmJiYworIDA6IGFiYmJiYworCisvYWIrYmMvCisgICAgYWJiYworIDA6IGFiYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworTm8gbWF0Y2gKKyAgICBhYnEKK05vIG1hdGNoCisKKy9hYnsxLH1iYy8KKworL2FiK2JjLworICAgIGFiYmJiYworIDA6IGFiYmJiYworCisvYWJ7MSx9YmMvCisgICAgYWJiYmJjCisgMDogYWJiYmJjCisKKy9hYnsxLDN9YmMvCisgICAgYWJiYmJjCisgMDogYWJiYmJjCisKKy9hYnszLDR9YmMvCisgICAgYWJiYmJjCisgMDogYWJiYmJjCisKKy9hYns0LDV9YmMvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYnEKK05vIG1hdGNoCisgICAgYWJiYmJjCitObyBtYXRjaAorCisvYWI/YmMvCisgICAgYWJiYworIDA6IGFiYmMKKyAgICBhYmMKKyAwOiBhYmMKKworL2FiezAsMX1iYy8KKyAgICBhYmMKKyAwOiBhYmMKKworL2FiP2JjLworCisvYWI/Yy8KKyAgICBhYmMKKyAwOiBhYmMKKworL2FiezAsMX1jLworICAgIGFiYworIDA6IGFiYworCisvXmFiYyQvCisgICAgYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmJiYmMKK05vIG1hdGNoCisgICAgYWJjYworTm8gbWF0Y2gKKworL15hYmMvCisgICAgYWJjYworIDA6IGFiYworCisvXmFiYyQvCisKKy9hYmMkLworICAgIGFhYmMKKyAwOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmNkCitObyBtYXRjaAorCisvXi8KKyAgICBhYmMKKyAwOiAKKworLyQvCisgICAgYWJjCisgMDogCisKKy9hLmMvCisgICAgYWJjCisgMDogYWJjCisgICAgYXhjCisgMDogYXhjCisKKy9hLipjLworICAgIGF4eXpjCisgMDogYXh5emMKKworL2FbYmNdZC8KKyAgICBhYmQKKyAwOiBhYmQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGF4eXpkCitObyBtYXRjaAorICAgIGFiYworTm8gbWF0Y2gKKworL2FbYi1kXWUvCisgICAgYWNlCisgMDogYWNlCisKKy9hW2ItZF0vCisgICAgYWFjCisgMDogYWMKKworL2FbLWJdLworICAgIGEtCisgMDogYS0KKworL2FbYi1dLworICAgIGEtCisgMDogYS0KKworL2FdLworICAgIGFdCisgMDogYV0KKworL2FbXV1iLworICAgIGFdYgorIDA6IGFdYgorCisvYVteYmNdZC8KKyAgICBhZWQKKyAwOiBhZWQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiZAorTm8gbWF0Y2gKKyAgICBhYmQKK05vIG1hdGNoCisKKy9hW14tYl1jLworICAgIGFkYworIDA6IGFkYworCisvYVteXWJdYy8KKyAgICBhZGMKKyAwOiBhZGMKKyAgICBhLWMKKyAwOiBhLWMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFdYworTm8gbWF0Y2gKKworL1xiYVxiLworICAgIGEtCisgMDogYQorICAgIC1hCisgMDogYQorICAgIC1hLQorIDA6IGEKKworL1xieVxiLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHkKK05vIG1hdGNoCisgICAgeXoKK05vIG1hdGNoCisgICAgeHl6CitObyBtYXRjaAorCisvXEJhXEIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhLQorTm8gbWF0Y2gKKyAgICAtYQorTm8gbWF0Y2gKKyAgICAtYS0KK05vIG1hdGNoCisKKy9cQnlcYi8KKyAgICB4eQorIDA6IHkKKworL1xieVxCLworICAgIHl6CisgMDogeQorCisvXEJ5XEIvCisgICAgeHl6CisgMDogeQorCisvXHcvCisgICAgYQorIDA6IGEKKworL1xXLworICAgIC0KKyAwOiAtCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCitObyBtYXRjaAorCisvYVxzYi8KKyAgICBhIGIKKyAwOiBhIGIKKworL2FcU2IvCisgICAgYS1iCisgMDogYS1iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhIGIKK05vIG1hdGNoCisKKy9cZC8KKyAgICAxCisgMDogMQorCisvXEQvCisgICAgLQorIDA6IC0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEKK05vIG1hdGNoCisKKy9bXHddLworICAgIGEKKyAwOiBhCisKKy9bXFddLworICAgIC0KKyAwOiAtCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCitObyBtYXRjaAorCisvYVtcc11iLworICAgIGEgYgorIDA6IGEgYgorCisvYVtcU11iLworICAgIGEtYgorIDA6IGEtYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYSBiCitObyBtYXRjaAorCisvW1xkXS8KKyAgICAxCisgMDogMQorCisvW1xEXS8KKyAgICAtCisgMDogLQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMQorTm8gbWF0Y2gKKworL2FifGNkLworICAgIGFiYworIDA6IGFiCisgICAgYWJjZAorIDA6IGFiCisKKy8oKWVmLworICAgIGRlZgorIDA6IGVmCisgMTogCisKKy8kYi8KKworL2FcKGIvCisgICAgYShiCisgMDogYShiCisKKy9hXCgqYi8KKyAgICBhYgorIDA6IGFiCisgICAgYSgoYgorIDA6IGEoKGIKKworL2FcXGIvCisgICAgYVxcYgorIDA6IGFcYgorCisvKChhKSkvCisgICAgYWJjCisgMDogYQorIDE6IGEKKyAyOiBhCisKKy8oYSliKGMpLworICAgIGFiYworIDA6IGFiYworIDE6IGEKKyAyOiBjCisKKy9hK2IrYy8KKyAgICBhYWJiYWJjCisgMDogYWJjCisKKy9hezEsfWJ7MSx9Yy8KKyAgICBhYWJiYWJjCisgMDogYWJjCisKKy9hLis/Yy8KKyAgICBhYmNhYmMKKyAwOiBhYmMKKworLyhhK3xiKSovCisgICAgYWIKKyAwOiBhYgorIDE6IGIKKworLyhhK3xiKXswLH0vCisgICAgYWIKKyAwOiBhYgorIDE6IGIKKworLyhhK3xiKSsvCisgICAgYWIKKyAwOiBhYgorIDE6IGIKKworLyhhK3xiKXsxLH0vCisgICAgYWIKKyAwOiBhYgorIDE6IGIKKworLyhhK3xiKT8vCisgICAgYWIKKyAwOiBhCisgMTogYQorCisvKGErfGIpezAsMX0vCisgICAgYWIKKyAwOiBhCisgMTogYQorCisvW15hYl0qLworICAgIGNkZQorIDA6IGNkZQorCisvYWJjLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYgorTm8gbWF0Y2gKKworL2EqLworICAgIFwKKyAwOiAKKworLyhbYWJjXSkqZC8KKyAgICBhYmJiY2QKKyAwOiBhYmJiY2QKKyAxOiBjCisKKy8oW2FiY10pKmJjZC8KKyAgICBhYmNkCisgMDogYWJjZAorIDE6IGEKKworL2F8YnxjfGR8ZS8KKyAgICBlCisgMDogZQorCisvKGF8YnxjfGR8ZSlmLworICAgIGVmCisgMDogZWYKKyAxOiBlCisKKy9hYmNkKmVmZy8KKyAgICBhYmNkZWZnCisgMDogYWJjZGVmZworCisvYWIqLworICAgIHhhYnlhYmJiegorIDA6IGFiCisgICAgeGF5YWJiYnoKKyAwOiBhCisKKy8oYWJ8Y2QpZS8KKyAgICBhYmNkZQorIDA6IGNkZQorIDE6IGNkCisKKy9bYWJoZ2VmZGNdaWovCisgICAgaGlqCisgMDogaGlqCisKKy9eKGFifGNkKWUvCisKKy8oYWJjfCllZi8KKyAgICBhYmNkZWYKKyAwOiBlZgorIDE6IAorCisvKGF8YiljKmQvCisgICAgYWJjZAorIDA6IGJjZAorIDE6IGIKKworLyhhYnxhYiopYmMvCisgICAgYWJjCisgMDogYWJjCisgMTogYQorCisvYShbYmNdKiljKi8KKyAgICBhYmMKKyAwOiBhYmMKKyAxOiBiYworCisvYShbYmNdKikoYypkKS8KKyAgICBhYmNkCisgMDogYWJjZAorIDE6IGJjCisgMjogZAorCisvYShbYmNdKykoYypkKS8KKyAgICBhYmNkCisgMDogYWJjZAorIDE6IGJjCisgMjogZAorCisvYShbYmNdKikoYytkKS8KKyAgICBhYmNkCisgMDogYWJjZAorIDE6IGIKKyAyOiBjZAorCisvYVtiY2RdKmRjZGNkZS8KKyAgICBhZGNkY2RlCisgMDogYWRjZGNkZQorCisvYVtiY2RdK2RjZGNkZS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlCitObyBtYXRjaAorICAgIGFkY2RjZGUKK05vIG1hdGNoCisKKy8oYWJ8YSliKmMvCisgICAgYWJjCisgMDogYWJjCisgMTogYWIKKworLygoYSkoYiljKShkKS8KKyAgICBhYmNkCisgMDogYWJjZAorIDE6IGFiYworIDI6IGEKKyAzOiBiCisgNDogZAorCisvW2EtekEtWl9dW2EtekEtWjAtOV9dKi8KKyAgICBhbHBoYQorIDA6IGFscGhhCisKKy9eYShiYyt8YltlaF0pZ3wuaCQvCisgICAgYWJoCisgMDogYmgKKworLyhiYytkJHxlZipnLnxoP2koanxrKSkvCisgICAgZWZmZ3oKKyAwOiBlZmZnegorIDE6IGVmZmd6CisgICAgaWoKKyAwOiBpagorIDE6IGlqCisgMjogagorICAgIHJlZmZnegorIDA6IGVmZmd6CisgMTogZWZmZ3oKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGVmZmcKK05vIG1hdGNoCisgICAgYmNkZAorTm8gbWF0Y2gKKworLygoKCgoKCgoKChhKSkpKSkpKSkpKS8KKyAgICBhCisgMDogYQorIDE6IGEKKyAyOiBhCisgMzogYQorIDQ6IGEKKyA1OiBhCisgNjogYQorIDc6IGEKKyA4OiBhCisgOTogYQorMTA6IGEKKworLygoKCgoKCgoKChhKSkpKSkpKSkpKVwxMC8KKyAgICBhYQorIDA6IGFhCisgMTogYQorIDI6IGEKKyAzOiBhCisgNDogYQorIDU6IGEKKyA2OiBhCisgNzogYQorIDg6IGEKKyA5OiBhCisxMDogYQorCisvKCgoKCgoKCgoYSkpKSkpKSkpKS8KKyAgICBhCisgMDogYQorIDE6IGEKKyAyOiBhCisgMzogYQorIDQ6IGEKKyA1OiBhCisgNjogYQorIDc6IGEKKyA4OiBhCisgOTogYQorCisvbXVsdGlwbGUgd29yZHMgb2YgdGV4dC8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhCitObyBtYXRjaAorICAgIHVoLXVoCitObyBtYXRjaAorCisvbXVsdGlwbGUgd29yZHMvCisgICAgbXVsdGlwbGUgd29yZHMsIHllYWgKKyAwOiBtdWx0aXBsZSB3b3JkcworCisvKC4qKWMoLiopLworICAgIGFiY2RlCisgMDogYWJjZGUKKyAxOiBhYgorIDI6IGRlCisKKy9cKCguKiksICguKilcKS8KKyAgICAoYSwgYikKKyAwOiAoYSwgYikKKyAxOiBhCisgMjogYgorCisvW2tdLworCisvYWJjZC8KKyAgICBhYmNkCisgMDogYWJjZAorCisvYShiYylkLworICAgIGFiY2QKKyAwOiBhYmNkCisgMTogYmMKKworL2FbLV0/Yy8KKyAgICBhYworIDA6IGFjCisKKy8oYWJjKVwxLworICAgIGFiY2FiYworIDA6IGFiY2FiYworIDE6IGFiYworCisvKFthLWNdKilcMS8KKyAgICBhYmNhYmMKKyAwOiBhYmNhYmMKKyAxOiBhYmMKKworLyhhKXxcMS8KKyAgICBhCisgMDogYQorIDE6IGEKKyAgICBhYgorIDA6IGEKKyAxOiBhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4CitObyBtYXRjaAorCisvKChbYS1jXSliKj9cMikqLworICAgIGFiYWJiYmNiYworIDA6IGFiYWJiCisgMTogYmIKKyAyOiBiCisKKy8oKFthLWNdKWIqP1wyKXszfS8KKyAgICBhYmFiYmJjYmMKKyAwOiBhYmFiYmJjYmMKKyAxOiBjYmMKKyAyOiBjCisKKy8oKFwzfGIpXDIoYSl4KSsvCisgICAgYWFheGFiYXhiYWF4YmJheAorIDA6IGJiYXgKKyAxOiBiYmF4CisgMjogYgorIDM6IGEKKworLygoXDN8YilcMihhKSl7Mix9LworICAgIGJiYWFiYWJiYWJhYWFhYWJiYWFhYWJiYQorIDA6IGJiYWFhYWJiYQorIDE6IGJiYQorIDI6IGIKKyAzOiBhCisKKy9hYmMvaQorICAgIEFCQworIDA6IEFCQworICAgIFhBQkNZCisgMDogQUJDCisgICAgQUJBQkMKKyAwOiBBQkMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFheGFieGJheGJieAorTm8gbWF0Y2gKKyAgICBYQkMKK05vIG1hdGNoCisgICAgQVhDCitObyBtYXRjaAorICAgIEFCWAorTm8gbWF0Y2gKKworL2FiKmMvaQorICAgIEFCQworIDA6IEFCQworCisvYWIqYmMvaQorICAgIEFCQworIDA6IEFCQworICAgIEFCQkMKKyAwOiBBQkJDCisKKy9hYio/YmMvaQorICAgIEFCQkJCQworIDA6IEFCQkJCQworCisvYWJ7MCx9P2JjL2kKKyAgICBBQkJCQkMKKyAwOiBBQkJCQkMKKworL2FiKz9iYy9pCisgICAgQUJCQworIDA6IEFCQkMKKworL2FiK2JjL2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQworTm8gbWF0Y2gKKyAgICBBQlEKK05vIG1hdGNoCisKKy9hYnsxLH1iYy9pCisKKy9hYitiYy9pCisgICAgQUJCQkJDCisgMDogQUJCQkJDCisKKy9hYnsxLH0/YmMvaQorICAgIEFCQkJCQworIDA6IEFCQkJCQworCisvYWJ7MSwzfT9iYy9pCisgICAgQUJCQkJDCisgMDogQUJCQkJDCisKKy9hYnszLDR9P2JjL2kKKyAgICBBQkJCQkMKKyAwOiBBQkJCQkMKKworL2FiezQsNX0/YmMvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJRCitObyBtYXRjaAorICAgIEFCQkJCQworTm8gbWF0Y2gKKworL2FiPz9iYy9pCisgICAgQUJCQworIDA6IEFCQkMKKyAgICBBQkMKKyAwOiBBQkMKKworL2FiezAsMX0/YmMvaQorICAgIEFCQworIDA6IEFCQworCisvYWI/P2JjL2kKKworL2FiPz9jL2kKKyAgICBBQkMKKyAwOiBBQkMKKworL2FiezAsMX0/Yy9pCisgICAgQUJDCisgMDogQUJDCisKKy9eYWJjJC9pCisgICAgQUJDCisgMDogQUJDCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkJCQkMKK05vIG1hdGNoCisgICAgQUJDQworTm8gbWF0Y2gKKworL15hYmMvaQorICAgIEFCQ0MKKyAwOiBBQkMKKworL15hYmMkL2kKKworL2FiYyQvaQorICAgIEFBQkMKKyAwOiBBQkMKKworL14vaQorICAgIEFCQworIDA6IAorCisvJC9pCisgICAgQUJDCisgMDogCisKKy9hLmMvaQorICAgIEFCQworIDA6IEFCQworICAgIEFYQworIDA6IEFYQworCisvYS4qP2MvaQorICAgIEFYWVpDCisgMDogQVhZWkMKKworL2EuKmMvaQorICAgIEFBQkMKKyAwOiBBQUJDCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWFlaRAorTm8gbWF0Y2gKKworL2FbYmNdZC9pCisgICAgQUJECisgMDogQUJECisKKy9hW2ItZF1lL2kKKyAgICBBQ0UKKyAwOiBBQ0UKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQworTm8gbWF0Y2gKKyAgICBBQkQKK05vIG1hdGNoCisKKy9hW2ItZF0vaQorICAgIEFBQworIDA6IEFDCisKKy9hWy1iXS9pCisgICAgQS0KKyAwOiBBLQorCisvYVtiLV0vaQorICAgIEEtCisgMDogQS0KKworL2FdL2kKKyAgICBBXQorIDA6IEFdCisKKy9hW11dYi9pCisgICAgQV1CCisgMDogQV1CCisKKy9hW15iY11kL2kKKyAgICBBRUQKKyAwOiBBRUQKKworL2FbXi1iXWMvaQorICAgIEFEQworIDA6IEFEQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJECitObyBtYXRjaAorICAgIEEtQworTm8gbWF0Y2gKKworL2FbXl1iXWMvaQorICAgIEFEQworIDA6IEFEQworCisvYWJ8Y2QvaQorICAgIEFCQworIDA6IEFCCisgICAgQUJDRAorIDA6IEFCCisKKy8oKWVmL2kKKyAgICBERUYKKyAwOiBFRgorIDE6IAorCisvJGIvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQV1DCitObyBtYXRjaAorICAgIEIKK05vIG1hdGNoCisKKy9hXChiL2kKKyAgICBBKEIKKyAwOiBBKEIKKworL2FcKCpiL2kKKyAgICBBQgorIDA6IEFCCisgICAgQSgoQgorIDA6IEEoKEIKKworL2FcXGIvaQorICAgIEFcXGIKKyAwOiBBXGIKKyAgICBhXFxCIAorIDA6IGFcQgorCisvKChhKSkvaQorICAgIEFCQworIDA6IEEKKyAxOiBBCisgMjogQQorCisvKGEpYihjKS9pCisgICAgQUJDCisgMDogQUJDCisgMTogQQorIDI6IEMKKworL2ErYitjL2kKKyAgICBBQUJCQUJDCisgMDogQUJDCisKKy9hezEsfWJ7MSx9Yy9pCisgICAgQUFCQkFCQworIDA6IEFCQworCisvYS4rP2MvaQorICAgIEFCQ0FCQworIDA6IEFCQworCisvYS4qP2MvaQorICAgIEFCQ0FCQworIDA6IEFCQworCisvYS57MCw1fT9jL2kKKyAgICBBQkNBQkMKKyAwOiBBQkMKKworLyhhK3xiKSovaQorICAgIEFCCisgMDogQUIKKyAxOiBCCisKKy8oYSt8Yil7MCx9L2kKKyAgICBBQgorIDA6IEFCCisgMTogQgorCisvKGErfGIpKy9pCisgICAgQUIKKyAwOiBBQgorIDE6IEIKKworLyhhK3xiKXsxLH0vaQorICAgIEFCCisgMDogQUIKKyAxOiBCCisKKy8oYSt8Yik/L2kKKyAgICBBQgorIDA6IEEKKyAxOiBBCisKKy8oYSt8Yil7MCwxfS9pCisgICAgQUIKKyAwOiBBCisgMTogQQorCisvKGErfGIpezAsMX0/L2kKKyAgICBBQgorIDA6IAorCisvW15hYl0qL2kKKyAgICBDREUKKyAwOiBDREUKKworLyhbYWJjXSkqZC9pCisgICAgQUJCQkNECisgMDogQUJCQkNECisgMTogQworCisvKFthYmNdKSpiY2QvaQorICAgIEFCQ0QKKyAwOiBBQkNECisgMTogQQorCisvYXxifGN8ZHxlL2kKKyAgICBFCisgMDogRQorCisvKGF8YnxjfGR8ZSlmL2kKKyAgICBFRgorIDA6IEVGCisgMTogRQorCisvYWJjZCplZmcvaQorICAgIEFCQ0RFRkcKKyAwOiBBQkNERUZHCisKKy9hYiovaQorICAgIFhBQllBQkJCWgorIDA6IEFCCisgICAgWEFZQUJCQloKKyAwOiBBCisKKy8oYWJ8Y2QpZS9pCisgICAgQUJDREUKKyAwOiBDREUKKyAxOiBDRAorCisvW2FiaGdlZmRjXWlqL2kKKyAgICBISUoKKyAwOiBISUoKKworL14oYWJ8Y2QpZS9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkNERQorTm8gbWF0Y2gKKworLyhhYmN8KWVmL2kKKyAgICBBQkNERUYKKyAwOiBFRgorIDE6IAorCisvKGF8YiljKmQvaQorICAgIEFCQ0QKKyAwOiBCQ0QKKyAxOiBCCisKKy8oYWJ8YWIqKWJjL2kKKyAgICBBQkMKKyAwOiBBQkMKKyAxOiBBCisKKy9hKFtiY10qKWMqL2kKKyAgICBBQkMKKyAwOiBBQkMKKyAxOiBCQworCisvYShbYmNdKikoYypkKS9pCisgICAgQUJDRAorIDA6IEFCQ0QKKyAxOiBCQworIDI6IEQKKworL2EoW2JjXSspKGMqZCkvaQorICAgIEFCQ0QKKyAwOiBBQkNECisgMTogQkMKKyAyOiBECisKKy9hKFtiY10qKShjK2QpL2kKKyAgICBBQkNECisgMDogQUJDRAorIDE6IEIKKyAyOiBDRAorCisvYVtiY2RdKmRjZGNkZS9pCisgICAgQURDRENERQorIDA6IEFEQ0RDREUKKworL2FbYmNkXStkY2RjZGUvaQorCisvKGFifGEpYipjL2kKKyAgICBBQkMKKyAwOiBBQkMKKyAxOiBBQgorCisvKChhKShiKWMpKGQpL2kKKyAgICBBQkNECisgMDogQUJDRAorIDE6IEFCQworIDI6IEEKKyAzOiBCCisgNDogRAorCisvW2EtekEtWl9dW2EtekEtWjAtOV9dKi9pCisgICAgQUxQSEEKKyAwOiBBTFBIQQorCisvXmEoYmMrfGJbZWhdKWd8LmgkL2kKKyAgICBBQkgKKyAwOiBCSAorCisvKGJjK2QkfGVmKmcufGg/aShqfGspKS9pCisgICAgRUZGR1oKKyAwOiBFRkZHWgorIDE6IEVGRkdaCisgICAgSUoKKyAwOiBJSgorIDE6IElKCisgMjogSgorICAgIFJFRkZHWgorIDA6IEVGRkdaCisgMTogRUZGR1oKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFEQ0RDREUKK05vIG1hdGNoCisgICAgRUZGRworTm8gbWF0Y2gKKyAgICBCQ0RECitObyBtYXRjaAorCisvKCgoKCgoKCgoKGEpKSkpKSkpKSkpL2kKKyAgICBBCisgMDogQQorIDE6IEEKKyAyOiBBCisgMzogQQorIDQ6IEEKKyA1OiBBCisgNjogQQorIDc6IEEKKyA4OiBBCisgOTogQQorMTA6IEEKKworLygoKCgoKCgoKChhKSkpKSkpKSkpKVwxMC9pCisgICAgQUEKKyAwOiBBQQorIDE6IEEKKyAyOiBBCisgMzogQQorIDQ6IEEKKyA1OiBBCisgNjogQQorIDc6IEEKKyA4OiBBCisgOTogQQorMTA6IEEKKworLygoKCgoKCgoKGEpKSkpKSkpKSkvaQorICAgIEEKKyAwOiBBCisgMTogQQorIDI6IEEKKyAzOiBBCisgNDogQQorIDU6IEEKKyA2OiBBCisgNzogQQorIDg6IEEKKyA5OiBBCisKKy8oPzooPzooPzooPzooPzooPzooPzooPzooPzooYSkpKSkpKSkpKSkvaQorICAgIEEKKyAwOiBBCisgMTogQQorCisvKD86KD86KD86KD86KD86KD86KD86KD86KD86KGF8YnxjKSkpKSkpKSkpKS9pCisgICAgQworIDA6IEMKKyAxOiBDCisKKy9tdWx0aXBsZSB3b3JkcyBvZiB0ZXh0L2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFBCitObyBtYXRjaAorICAgIFVILVVICitObyBtYXRjaAorCisvbXVsdGlwbGUgd29yZHMvaQorICAgIE1VTFRJUExFIFdPUkRTLCBZRUFICisgMDogTVVMVElQTEUgV09SRFMKKworLyguKiljKC4qKS9pCisgICAgQUJDREUKKyAwOiBBQkNERQorIDE6IEFCCisgMjogREUKKworL1woKC4qKSwgKC4qKVwpL2kKKyAgICAoQSwgQikKKyAwOiAoQSwgQikKKyAxOiBBCisgMjogQgorCisvW2tdL2kKKworL2FiY2QvaQorICAgIEFCQ0QKKyAwOiBBQkNECisKKy9hKGJjKWQvaQorICAgIEFCQ0QKKyAwOiBBQkNECisgMTogQkMKKworL2FbLV0/Yy9pCisgICAgQUMKKyAwOiBBQworCisvKGFiYylcMS9pCisgICAgQUJDQUJDCisgMDogQUJDQUJDCisgMTogQUJDCisKKy8oW2EtY10qKVwxL2kKKyAgICBBQkNBQkMKKyAwOiBBQkNBQkMKKyAxOiBBQkMKKworL2EoPyFiKS4vCisgICAgYWJhZAorIDA6IGFkCisKKy9hKD89ZCkuLworICAgIGFiYWQKKyAwOiBhZAorCisvYSg/PWN8ZCkuLworICAgIGFiYWQKKyAwOiBhZAorCisvYSg/OmJ8Y3xkKSguKS8KKyAgICBhY2UKKyAwOiBhY2UKKyAxOiBlCisKKy9hKD86YnxjfGQpKiguKS8KKyAgICBhY2UKKyAwOiBhY2UKKyAxOiBlCisKKy9hKD86YnxjfGQpKz8oLikvCisgICAgYWNlCisgMDogYWNlCisgMTogZQorICAgIGFjZGJjZGJlCisgMDogYWNkCisgMTogZAorCisvYSg/OmJ8Y3xkKSsoLikvCisgICAgYWNkYmNkYmUKKyAwOiBhY2RiY2RiZQorIDE6IGUKKworL2EoPzpifGN8ZCl7Mn0oLikvCisgICAgYWNkYmNkYmUKKyAwOiBhY2RiCisgMTogYgorCisvYSg/OmJ8Y3xkKXs0LDV9KC4pLworICAgIGFjZGJjZGJlCisgMDogYWNkYmNkYgorIDE6IGIKKworL2EoPzpifGN8ZCl7NCw1fT8oLikvCisgICAgYWNkYmNkYmUKKyAwOiBhY2RiY2QKKyAxOiBkCisKKy8oKGZvbyl8KGJhcikpKi8KKyAgICBmb29iYXIKKyAwOiBmb29iYXIKKyAxOiBiYXIKKyAyOiBmb28KKyAzOiBiYXIKKworL2EoPzpifGN8ZCl7Niw3fSguKS8KKyAgICBhY2RiY2RiZQorIDA6IGFjZGJjZGJlCisgMTogZQorCisvYSg/OmJ8Y3xkKXs2LDd9PyguKS8KKyAgICBhY2RiY2RiZQorIDA6IGFjZGJjZGJlCisgMTogZQorCisvYSg/OmJ8Y3xkKXs1LDZ9KC4pLworICAgIGFjZGJjZGJlCisgMDogYWNkYmNkYmUKKyAxOiBlCisKKy9hKD86YnxjfGQpezUsNn0/KC4pLworICAgIGFjZGJjZGJlCisgMDogYWNkYmNkYgorIDE6IGIKKworL2EoPzpifGN8ZCl7NSw3fSguKS8KKyAgICBhY2RiY2RiZQorIDA6IGFjZGJjZGJlCisgMTogZQorCisvYSg/OmJ8Y3xkKXs1LDd9PyguKS8KKyAgICBhY2RiY2RiZQorIDA6IGFjZGJjZGIKKyAxOiBiCisKKy9hKD86YnwoY3xlKXsxLDJ9P3xkKSs/KC4pLworICAgIGFjZQorIDA6IGFjZQorIDE6IGMKKyAyOiBlCisKKy9eKC4rKT9CLworICAgIEFCCisgMDogQUIKKyAxOiBBCisKKy9eKFteYS16XSl8KFxeKSQvCisgICAgLgorIDA6IC4KKyAxOiAuCisKKy9eWzw+XSYvCisgICAgPCZPVVQKKyAwOiA8JgorCisvXihhXDE/KXs0fSQvCisgICAgYWFhYWFhYWFhYQorIDA6IGFhYWFhYWFhYWEKKyAxOiBhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQgorTm8gbWF0Y2gKKyAgICBhYWFhYWFhYWEKK05vIG1hdGNoCisgICAgYWFhYWFhYWFhYWEKK05vIG1hdGNoCisKKy9eKGEoPygxKVwxKSl7NH0kLworICAgIGFhYWFhYWFhYWEKKyAwOiBhYWFhYWFhYWFhCisgMTogYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYWFhYWFhCitObyBtYXRjaAorICAgIGFhYWFhYWFhYWFhCitObyBtYXRjaAorCisvKD86KGYpKG8pKG8pfChiKShhKShyKSkqLworICAgIGZvb2JhcgorIDA6IGZvb2JhcgorIDE6IGYKKyAyOiBvCisgMzogbworIDQ6IGIKKyA1OiBhCisgNjogcgorCisvKD88PWEpYi8KKyAgICBhYgorIDA6IGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGNiCitObyBtYXRjaAorICAgIGIKK05vIG1hdGNoCisKKy8oPzwhYyliLworICAgIGFiCisgMDogYgorICAgIGIKKyAwOiBiCisgICAgYgorIDA6IGIKKworLyg/Oi4uKSphLworICAgIGFiYQorIDA6IGFiYQorCisvKD86Li4pKj9hLworICAgIGFiYQorIDA6IGEKKworL14oPzpifGEoPz0oLikpKSpcMS8KKyAgICBhYmMKKyAwOiBhYgorIDE6IGIKKworL14oKXszLDV9LworICAgIGFiYworIDA6IAorIDE6IAorCisvXihhKykqYXgvCisgICAgYWF4CisgMDogYWF4CisgMTogYQorCisvXigoYXxiKSspKmF4LworICAgIGFheAorIDA6IGFheAorIDE6IGEKKyAyOiBhCisKKy9eKChhfGJjKSspKmF4LworICAgIGFheAorIDA6IGFheAorIDE6IGEKKyAyOiBhCisKKy8oYXx4KSphYi8KKyAgICBjYWIKKyAwOiBhYgorCisvKGEpKmFiLworICAgIGNhYgorIDA6IGFiCisKKy8oPzooP2kpYSliLworICAgIGFiCisgMDogYWIKKworLygoP2kpYSliLworICAgIGFiCisgMDogYWIKKyAxOiBhCisKKy8oPzooP2kpYSliLworICAgIEFiCisgMDogQWIKKworLygoP2kpYSliLworICAgIEFiCisgMDogQWIKKyAxOiBBCisKKy8oPzooP2kpYSliLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgY2IKK05vIG1hdGNoCisgICAgYUIKK05vIG1hdGNoCisKKy8oKD9pKWEpYi8KKworLyg/aTphKWIvCisgICAgYWIKKyAwOiBhYgorCisvKCg/aTphKSliLworICAgIGFiCisgMDogYWIKKyAxOiBhCisKKy8oP2k6YSliLworICAgIEFiCisgMDogQWIKKworLygoP2k6YSkpYi8KKyAgICBBYgorIDA6IEFiCisgMTogQQorCisvKD9pOmEpYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFCCitObyBtYXRjaAorICAgIGFCCitObyBtYXRjaAorCisvKCg/aTphKSliLworCisvKD86KD8taSlhKWIvaQorICAgIGFiCisgMDogYWIKKworLygoPy1pKWEpYi9pCisgICAgYWIKKyAwOiBhYgorIDE6IGEKKworLyg/Oig/LWkpYSliL2kKKyAgICBhQgorIDA6IGFCCisKKy8oKD8taSlhKWIvaQorICAgIGFCCisgMDogYUIKKyAxOiBhCisKKy8oPzooPy1pKWEpYi9pCisgICAgYUIKKyAwOiBhQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWIKK05vIG1hdGNoCisgICAgQUIKK05vIG1hdGNoCisKKy8oPy1pOmEpYi9pCisgICAgYWIKKyAwOiBhYgorCisvKCg/LWk6YSkpYi9pCisgICAgYWIKKyAwOiBhYgorIDE6IGEKKworLyg/LWk6YSliL2kKKyAgICBhQgorIDA6IGFCCisKKy8oKD8taTphKSliL2kKKyAgICBhQgorIDA6IGFCCisgMTogYQorCisvKD8taTphKWIvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUIKK05vIG1hdGNoCisgICAgQWIKK05vIG1hdGNoCisKKy8oKD8taTphKSliL2kKKworLyg/LWk6YSliL2kKKyAgICBhQgorIDA6IGFCCisKKy8oKD8taTphKSliL2kKKyAgICBhQgorIDA6IGFCCisgMTogYQorCisvKD8taTphKWIvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWIKK05vIG1hdGNoCisgICAgQUIKK05vIG1hdGNoCisKKy8oKD8taTphKSliL2kKKworLygoPy1pOmEuKSliL2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCCitObyBtYXRjaAorICAgIGFcbkIKK05vIG1hdGNoCisKKy8oKD9zLWk6YS4pKWIvaQorICAgIGFcbkIKKyAwOiBhXHgwYUIKKyAxOiBhXHgwYQorCisvKD86Y3xkKSg/OikoPzphKD86KSg/OmIpKD86Yig/OikpKD86Yig/OikoPzpiKSkpLworICAgIGNhYmJiYgorIDA6IGNhYmJiYgorCisvKD86Y3xkKSg/OikoPzphYWFhYWFhYSg/OikoPzpiYmJiYmJiYikoPzpiYmJiYmJiYig/OikpKD86YmJiYmJiYmIoPzopKD86YmJiYmJiYmIpKSkvCisgICAgY2FhYWFhYWFhYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKyAwOiBjYWFhYWFhYWFiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYgorCisvKGFiKVxkXDEvaQorICAgIEFiNGFiCisgMDogQWI0YWIKKyAxOiBBYgorICAgIGFiNEFiCisgMDogYWI0QWIKKyAxOiBhYgorCisvZm9vXHcqXGR7NH1iYXovCisgICAgZm9vYmFyMTIzNGJhegorIDA6IGZvb2JhcjEyMzRiYXoKKworL3gofn4pKig/Oig/OkYpPyk/LworICAgIHh+fgorIDA6IHh+fgorIDE6IH5+CisKKy9eYSg/I3h4eCl7M31jLworICAgIGFhYWMKKyAwOiBhYWFjCisKKy9eYSAoPyN4eHgpICg/I3l5eSkgezN9Yy94CisgICAgYWFhYworIDA6IGFhYWMKKworLyg/PCFbY2RdKWIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBCXG5CCitObyBtYXRjaAorICAgIGRiY2IKK05vIG1hdGNoCisKKy8oPzwhW2NkXSlbYWJdLworICAgIGRiYWFjYgorIDA6IGEKKworLyg/PCEoY3xkKSliLworCisvKD88IShjfGQpKVthYl0vCisgICAgZGJhYWNiCisgMDogYQorCisvKD88IWNkKVthYl0vCisgICAgY2RhY2NiCisgMDogYgorCisvXig/OmE/Yj8pKiQvCisgICAgXAorIDA6IAorICAgIGEKKyAwOiBhCisgICAgYWIKKyAwOiBhYgorICAgIGFhYSAgIAorIDA6IGFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZGJjYgorTm8gbWF0Y2gKKyAgICBhLS0KK05vIG1hdGNoCisgICAgYWEtLSAKK05vIG1hdGNoCisKKy8oKD9zKV5hKC4pKSgoP20pXmIkKS8KKyAgICBhXG5iXG5jXG4KKyAwOiBhXHgwYWIKKyAxOiBhXHgwYQorIDI6IFx4MGEKKyAzOiBiCisKKy8oKD9tKV5iJCkvCisgICAgYVxuYlxuY1xuCisgMDogYgorIDE6IGIKKworLyg/bSleYi8KKyAgICBhXG5iXG4KKyAwOiBiCisKKy8oP20pXihiKS8KKyAgICBhXG5iXG4KKyAwOiBiCisgMTogYgorCisvKCg/bSleYikvCisgICAgYVxuYlxuCisgMDogYgorIDE6IGIKKworL1xuKCg/bSleYikvCisgICAgYVxuYlxuCisgMDogXHgwYWIKKyAxOiBiCisKKy8oKD9zKS4pYyg/IS4pLworICAgIGFcbmJcbmNcbgorIDA6IFx4MGFjCisgMTogXHgwYQorICAgIGFcbmJcbmNcbgorIDA6IFx4MGFjCisgMTogXHgwYQorCisvKCg/cyliLiljKD8hLikvCisgICAgYVxuYlxuY1xuCisgMDogYlx4MGFjCisgMTogYlx4MGEKKyAgICBhXG5iXG5jXG4KKyAwOiBiXHgwYWMKKyAxOiBiXHgwYQorCisvXmIvCisKKy8oKV5iLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxuYlxuY1xuCitObyBtYXRjaAorICAgIGFcbmJcbmNcbgorTm8gbWF0Y2gKKworLygoP20pXmIpLworICAgIGFcbmJcbmNcbgorIDA6IGIKKyAxOiBiCisKKy8oeCk/KD8oMSlhfGIpLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorTm8gbWF0Y2gKKyAgICBhCitObyBtYXRjaAorCisvKHgpPyg/KDEpYnxhKS8KKyAgICBhCisgMDogYQorCisvKCk/KD8oMSlifGEpLworICAgIGEKKyAwOiBhCisKKy8oKSg/KDEpYnxhKS8KKworLygpPyg/KDEpYXxiKS8KKyAgICBhCisgMDogYQorIDE6IAorCisvXihcKCk/YmxhaCg/KDEpKFwpKSkkLworICAgIChibGFoKQorIDA6IChibGFoKQorIDE6ICgKKyAyOiApCisgICAgYmxhaAorIDA6IGJsYWgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKK05vIG1hdGNoCisgICAgYmxhaCkKK05vIG1hdGNoCisgICAgKGJsYWgKK05vIG1hdGNoCisKKy9eKFwoKyk/YmxhaCg/KDEpKFwpKSkkLworICAgIChibGFoKQorIDA6IChibGFoKQorIDE6ICgKKyAyOiApCisgICAgYmxhaAorIDA6IGJsYWgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJsYWgpCitObyBtYXRjaAorICAgIChibGFoCitObyBtYXRjaAorCisvKD8oPyFhKWF8YikvCisKKy8oPyg/IWEpYnxhKS8KKyAgICBhCisgMDogYQorCisvKD8oPz1hKWJ8YSkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCitObyBtYXRjaAorICAgIGEKK05vIG1hdGNoCisKKy8oPyg/PWEpYXxiKS8KKyAgICBhCisgMDogYQorCisvKD89KGErPykpKFwxYWIpLworICAgIGFhYWIKKyAwOiBhYWIKKyAxOiBhCisgMjogYWFiCisKKy9eKD89KGErPykpXDFhYi8KKworLyhcdys6KSsvCisgICAgb25lOgorIDA6IG9uZToKKyAxOiBvbmU6CisKKy8kKD88PV4oYSkpLworICAgIGEKKyAwOiAKKyAxOiBhCisKKy8oPz0oYSs/KSkoXDFhYikvCisgICAgYWFhYgorIDA6IGFhYgorIDE6IGEKKyAyOiBhYWIKKworL14oPz0oYSs/KSlcMWFiLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYgorTm8gbWF0Y2gKKyAgICBhYWFiCitObyBtYXRjaAorCisvKFtcdzpdKzo6KT8oXHcrKSQvCisgICAgYWJjZAorIDA6IGFiY2QKKyAxOiA8dW5zZXQ+CisgMjogYWJjZAorICAgIHh5Ono6OjphYmNkCisgMDogeHk6ejo6OmFiY2QKKyAxOiB4eTp6Ojo6CisgMjogYWJjZAorCisvXlteYmNkXSooYyspLworICAgIGFleHljZAorIDA6IGFleHljCisgMTogYworCisvKGEqKWIrLworICAgIGNhYWIKKyAwOiBhYWIKKyAxOiBhYQorCisvKFtcdzpdKzo6KT8oXHcrKSQvCisgICAgYWJjZAorIDA6IGFiY2QKKyAxOiA8dW5zZXQ+CisgMjogYWJjZAorICAgIHh5Ono6OjphYmNkCisgMDogeHk6ejo6OmFiY2QKKyAxOiB4eTp6Ojo6CisgMjogYWJjZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZDoKK05vIG1hdGNoCisgICAgYWJjZDoKK05vIG1hdGNoCisKKy9eW15iY2RdKihjKykvCisgICAgYWV4eWNkCisgMDogYWV4eWMKKyAxOiBjCisKKy8oPmErKWFiLworCisvKD8+YSspYi8KKyAgICBhYWFiCisgMDogYWFhYgorCisvKFtbOl0rKS8KKyAgICBhOltiXToKKyAwOiA6WworIDE6IDpbCisKKy8oW1s9XSspLworICAgIGE9W2JdPQorIDA6ID1bCisgMTogPVsKKworLyhbWy5dKykvCisgICAgYS5bYl0uCisgMDogLlsKKyAxOiAuWworCisvKCg/PmErKWIpLworICAgIGFhYWIKKyAwOiBhYWFiCisgMTogYWFhYgorCisvKD8+KGErKSliLworICAgIGFhYWIKKyAwOiBhYWFiCisgMTogYWFhCisKKy8oKD8+W14oKV0rKXxcKFteKCldKlwpKSsvCisgICAgKChhYmMoYWRlKXVmaCgpKCl4CisgMDogYWJjKGFkZSl1ZmgoKSgpeAorIDE6IHgKKworL2FcWi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWIKK05vIG1hdGNoCisgICAgYVxuYlxuCitObyBtYXRjaAorCisvYlxaLworICAgIGFcbmJcbgorIDA6IGIKKworL2Jcei8KKworL2JcWi8KKyAgICBhXG5iCisgMDogYgorCisvYlx6LworICAgIGFcbmIKKyAwOiBiCisgICAgCisvXig/Pig/KDEpXC58KCkpW15cV19dKD8+W2EtejAtOS1dKlteXFdfXSk/KSskLworICAgIGEKKyAwOiBhCisgMTogCisgICAgYWJjCisgMDogYWJjCisgMTogCisgICAgYS1iCisgMDogYS1iCisgMTogCisgICAgMC05IAorIDA6IDAtOQorIDE6IAorICAgIGEuYgorIDA6IGEuYgorIDE6IAorICAgIDUuNi43ICAKKyAwOiA1LjYuNworIDE6IAorICAgIHRoZS5xdWljay5icm93bi5mb3gKKyAwOiB0aGUucXVpY2suYnJvd24uZm94CisgMTogCisgICAgYTEwMC5iMjAwLjMwMGMgIAorIDA6IGExMDAuYjIwMC4zMDBjCisgMTogCisgICAgMTItYWIuMTI0NSAKKyAwOiAxMi1hYi4xMjQ1CisgMTogCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcCitObyBtYXRjaAorICAgIC5hCitObyBtYXRjaAorICAgIC1hCitObyBtYXRjaAorICAgIGEtCitObyBtYXRjaAorICAgIGEuICAKK05vIG1hdGNoCisgICAgYV9iIAorTm8gbWF0Y2gKKyAgICBhLi0KK05vIG1hdGNoCisgICAgYS4uICAKK05vIG1hdGNoCisgICAgYWIuLmJjIAorTm8gbWF0Y2gKKyAgICB0aGUucXVpY2suYnJvd24uZm94LQorTm8gbWF0Y2gKKyAgICB0aGUucXVpY2suYnJvd24uZm94LgorTm8gbWF0Y2gKKyAgICB0aGUucXVpY2suYnJvd24uZm94XworTm8gbWF0Y2gKKyAgICB0aGUucXVpY2suYnJvd24uZm94KyAgICAgICAKK05vIG1hdGNoCisKKy8oPz4uKikoPzw9KGFiY2R8d3h5eikpLworICAgIGFscGhhYmV0YWJjZAorIDA6IGFscGhhYmV0YWJjZAorIDE6IGFiY2QKKyAgICBlbmRpbmd3eHl6CisgMDogZW5kaW5nd3h5egorIDE6IHd4eXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEgcmF0aGVyIGxvbmcgc3RyaW5nIHRoYXQgZG9lc24ndCBlbmQgd2l0aCBvbmUgb2YgdGhlbQorTm8gbWF0Y2gKKworL3dvcmQgKD8+KD86KD8hb3RoZXJ3b3JkKVthLXpBLVowLTldKyApezAsMzB9KW90aGVyd29yZC8KKyAgICB3b3JkIGNhdCBkb2cgZWxlcGhhbnQgbXVzc2VsIGNvdyBob3JzZSBjYW5hcnkgYmFib29uIHNuYWtlIHNoYXJrIG90aGVyd29yZAorIDA6IHdvcmQgY2F0IGRvZyBlbGVwaGFudCBtdXNzZWwgY293IGhvcnNlIGNhbmFyeSBiYWJvb24gc25ha2Ugc2hhcmsgb3RoZXJ3b3JkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB3b3JkIGNhdCBkb2cgZWxlcGhhbnQgbXVzc2VsIGNvdyBob3JzZSBjYW5hcnkgYmFib29uIHNuYWtlIHNoYXJrCitObyBtYXRjaAorICAKKy93b3JkICg/PlthLXpBLVowLTldKyApezAsMzB9b3RoZXJ3b3JkLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyayB0aGUgcXVpY2sgYnJvd24gZm94IGFuZCB0aGUgbGF6eSBkb2cgYW5kIHNldmVyYWwgb3RoZXIgd29yZHMgZ2V0dGluZyBjbG9zZSB0byB0aGlydHkgYnkgbm93IEkgaG9wZQorTm8gbWF0Y2gKKworLyg/PD1cZHszfSg/ITk5OSkpZm9vLworICAgIDk5OWZvbworIDA6IGZvbworICAgIDEyMzk5OWZvbyAKKyAwOiBmb28KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyM2FiY2ZvbworTm8gbWF0Y2gKKyAgICAKKy8oPzw9KD8hLi4uOTk5KVxkezN9KWZvby8KKyAgICA5OTlmb28KKyAwOiBmb28KKyAgICAxMjM5OTlmb28gCisgMDogZm9vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjNhYmNmb28KK05vIG1hdGNoCisKKy8oPzw9XGR7M30oPyE5OTkpLi4uKWZvby8KKyAgICAxMjNhYmNmb28KKyAwOiBmb28KKyAgICAxMjM0NTZmb28gCisgMDogZm9vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM5OTlmb28gIAorTm8gbWF0Y2gKKyAgICAKKy8oPzw9XGR7M30uLi4pKD88ITk5OSlmb28vCisgICAgMTIzYWJjZm9vICAgCisgMDogZm9vCisgICAgMTIzNDU2Zm9vIAorIDA6IGZvbworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzOTk5Zm9vICAKK05vIG1hdGNoCisKKy88YVtcc10raHJlZltcc10qPVtcc10qICAgICAgICAgICMgZmluZCA8YSBocmVmPQorIChbXCJcJ10pPyAgICAgICAgICAgICAgICAgICAgICAgIyBmaW5kIHNpbmdsZSBvciBkb3VibGUgcXVvdGUKKyAoPygxKSAoLio/KVwxIHwgKFteXHNdKykpICAgICAgICMgaWYgcXVvdGUgZm91bmQsIG1hdGNoIHVwIHRvIG5leHQgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcXVvdGUsIG90aGVyd2lzZSBtYXRjaCB1cCB0byBuZXh0IHNwYWNlCisvaXN4CisgICAgPGEgaHJlZj1hYmNkIHh5egorIDA6IDxhIGhyZWY9YWJjZAorIDE6IDx1bnNldD4KKyAyOiA8dW5zZXQ+CisgMzogYWJjZAorICAgIDxhIGhyZWY9XCJhYmNkIHh5eiBwcXJcIiBjYXRzCisgMDogPGEgaHJlZj0iYWJjZCB4eXogcHFyIgorIDE6ICIKKyAyOiBhYmNkIHh5eiBwcXIKKyAgICA8YSBocmVmPVwnYWJjZCB4eXogcHFyXCcgY2F0cworIDA6IDxhIGhyZWY9J2FiY2QgeHl6IHBxcicKKyAxOiAnCisgMjogYWJjZCB4eXogcHFyCisKKy88YVxzK2hyZWZccyo9XHMqICAgICAgICAgICAgICAgICMgZmluZCA8YSBocmVmPQorIChbIiddKT8gICAgICAgICAgICAgICAgICAgICAgICAgIyBmaW5kIHNpbmdsZSBvciBkb3VibGUgcXVvdGUKKyAoPygxKSAoLio/KVwxIHwgKFxTKykpICAgICAgICAgICMgaWYgcXVvdGUgZm91bmQsIG1hdGNoIHVwIHRvIG5leHQgbWF0Y2hpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcXVvdGUsIG90aGVyd2lzZSBtYXRjaCB1cCB0byBuZXh0IHNwYWNlCisvaXN4CisgICAgPGEgaHJlZj1hYmNkIHh5egorIDA6IDxhIGhyZWY9YWJjZAorIDE6IDx1bnNldD4KKyAyOiA8dW5zZXQ+CisgMzogYWJjZAorICAgIDxhIGhyZWY9XCJhYmNkIHh5eiBwcXJcIiBjYXRzCisgMDogPGEgaHJlZj0iYWJjZCB4eXogcHFyIgorIDE6ICIKKyAyOiBhYmNkIHh5eiBwcXIKKyAgICA8YSBocmVmICAgICAgID0gICAgICAgXCdhYmNkIHh5eiBwcXJcJyBjYXRzCisgMDogPGEgaHJlZiAgICAgICA9ICAgICAgICdhYmNkIHh5eiBwcXInCisgMTogJworIDI6IGFiY2QgeHl6IHBxcgorCisvPGFccytocmVmKD8+XHMqKT0oPz5ccyopICAgICAgICAjIGZpbmQgPGEgaHJlZj0KKyAoWyInXSk/ICAgICAgICAgICAgICAgICAgICAgICAgICMgZmluZCBzaW5nbGUgb3IgZG91YmxlIHF1b3RlCisgKD8oMSkgKC4qPylcMSB8IChcUyspKSAgICAgICAgICAjIGlmIHF1b3RlIGZvdW5kLCBtYXRjaCB1cCB0byBuZXh0IG1hdGNoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHF1b3RlLCBvdGhlcndpc2UgbWF0Y2ggdXAgdG8gbmV4dCBzcGFjZQorL2lzeAorICAgIDxhIGhyZWY9YWJjZCB4eXoKKyAwOiA8YSBocmVmPWFiY2QKKyAxOiA8dW5zZXQ+CisgMjogPHVuc2V0PgorIDM6IGFiY2QKKyAgICA8YSBocmVmPVwiYWJjZCB4eXogcHFyXCIgY2F0cworIDA6IDxhIGhyZWY9ImFiY2QgeHl6IHBxciIKKyAxOiAiCisgMjogYWJjZCB4eXogcHFyCisgICAgPGEgaHJlZiAgICAgICA9ICAgICAgIFwnYWJjZCB4eXogcHFyXCcgY2F0cworIDA6IDxhIGhyZWYgICAgICAgPSAgICAgICAnYWJjZCB4eXogcHFyJworIDE6ICcKKyAyOiBhYmNkIHh5eiBwcXIKKworLygoWikrfEEpKi8KKyAgICBaQUJDREVGRworIDA6IFpBCisgMTogQQorIDI6IFoKKworLyhaKCl8QSkqLworICAgIFpBQkNERUZHCisgMDogWkEKKyAxOiBBCisgMjogCisKKy8oWigoKSl8QSkqLworICAgIFpBQkNERUZHCisgMDogWkEKKyAxOiBBCisgMjogCisgMzogCisKKy8oKD8+WikrfEEpKi8KKyAgICBaQUJDREVGRworIDA6IFpBCisgMTogQQorCisvKCg/PikrfEEpKi8KKyAgICBaQUJDREVGRworIDA6IAorIDE6IAorCisvYSovZworICAgIGFiYmFiCisgMDogYQorIDA6IAorIDA6IAorIDA6IGEKKyAwOiAKKyAwOiAKKworL15bXGQtYV0vCisgICAgYWJjZGUKKyAwOiBhCisgICAgLXRoaW5ncworIDA6IC0KKyAgICAwZGlnaXQKKyAwOiAwCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiY2RlZiAgICAKK05vIG1hdGNoCisgICAgCisvW1s6c3BhY2U6XV0rLworICAgID4gXHgwOVx4MGFceDBjXHgwZFx4MGI8CisgMDogIFx4MDlceDBhXHgwY1x4MGRceDBiCisgICAgIAorL1tbOmJsYW5rOl1dKy8KKyAgICA+IFx4MDlceDBhXHgwY1x4MGRceDBiPAorIDA6ICBceDA5CisgICAgIAorL1tcc10rLworICAgID4gXHgwOVx4MGFceDBjXHgwZFx4MGI8CisgMDogIFx4MDlceDBhXHgwY1x4MGRceDBiCisgICAgIAorL1xzKy8KKyAgICA+IFx4MDlceDBhXHgwY1x4MGRceDBiPAorIDA6ICBceDA5XHgwYVx4MGNceDBkXHgwYgorICAgICAKKy9hC2IveAorICAgIGFiCisgMDogYWIKKworLyg/IVxBKXgvbQorICAgIGFcbnhiXG4KKyAwOiB4CisKKy8oPyFeKXgvbQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxueGJcbgorTm8gbWF0Y2gKKworL2FiY1xRYWJjXEVhYmMvCisgICAgYWJjYWJjYWJjCisgMDogYWJjYWJjYWJjCisgICAgCisvYWJjXFEoKit8XEVhYmMvCisgICAgYWJjKCorfGFiYyAKKyAwOiBhYmMoKit8YWJjCisKKy8gICBhYmNcUSBhYmNcRWFiYy94CisgICAgYWJjIGFiY2FiYworIDA6IGFiYyBhYmNhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2FiY2FiYyAgCitObyBtYXRjaAorICAgIAorL2FiYyNjb21tZW50CisgICAgXFEjbm90IGNvbW1lbnQKKyAgICBsaXRlcmFsXEUveAorICAgIGFiYyNub3QgY29tbWVudFxuICAgIGxpdGVyYWwgICAgIAorIDA6IGFiYyNub3QgY29tbWVudFx4MGEgICAgbGl0ZXJhbAorCisvYWJjI2NvbW1lbnQKKyAgICBcUSNub3QgY29tbWVudAorICAgIGxpdGVyYWwveAorICAgIGFiYyNub3QgY29tbWVudFxuICAgIGxpdGVyYWwgICAgIAorIDA6IGFiYyNub3QgY29tbWVudFx4MGEgICAgbGl0ZXJhbAorCisvYWJjI2NvbW1lbnQKKyAgICBcUSNub3QgY29tbWVudAorICAgIGxpdGVyYWxcRSAjbW9yZSBjb21tZW50CisgICAgL3gKKyAgICBhYmMjbm90IGNvbW1lbnRcbiAgICBsaXRlcmFsICAgICAKKyAwOiBhYmMjbm90IGNvbW1lbnRceDBhICAgIGxpdGVyYWwKKworL2FiYyNjb21tZW50CisgICAgXFEjbm90IGNvbW1lbnQKKyAgICBsaXRlcmFsXEUgI21vcmUgY29tbWVudC94CisgICAgYWJjI25vdCBjb21tZW50XG4gICAgbGl0ZXJhbCAgICAgCisgMDogYWJjI25vdCBjb21tZW50XHgwYSAgICBsaXRlcmFsCisKKy9cUWFiY1wkeHl6XEUvCisgICAgYWJjXFxcJHh5egorIDA6IGFiY1wkeHl6CisKKy9cUWFiY1xFXCRcUXh5elxFLworICAgIGFiY1wkeHl6CisgMDogYWJjJHh5egorCisvXEdhYmMvCisgICAgYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXphYmMgIAorTm8gbWF0Y2gKKworL1xHYWJjLi9nCisgICAgYWJjMWFiYzJ4eXphYmMzCisgMDogYWJjMQorIDA6IGFiYzIKKworL2FiYy4vZworICAgIGFiYzFhYmMyeHl6YWJjMyAKKyAwOiBhYmMxCisgMDogYWJjMgorIDA6IGFiYzMKKworL2EoP3g6IGIgYyApZC8KKyAgICBYYWJjZFkKKyAwOiBhYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgWGEgYiBjIGQgWSAKK05vIG1hdGNoCisKKy8oKD94KXggeSB6IHwgYSBiIGMpLworICAgIFhhYmNZCisgMDogYWJjCisgMTogYWJjCisgICAgQXh5ekIgCisgMDogeHl6CisgMTogeHl6CisKKy8oP2kpQUIoPy1pKUMvCisgICAgWGFiQ1kKKyAwOiBhYkMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhhYmNZICAKK05vIG1hdGNoCisKKy8oKD9pKUFCKD8taSlDfEQpRS8KKyAgICBhYkNFCisgMDogYWJDRQorIDE6IGFiQworICAgIERFCisgMDogREUKKyAxOiBECitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNFCitObyBtYXRjaAorICAgIGFiQ2UgIAorTm8gbWF0Y2gKKyAgICBkRQorTm8gbWF0Y2gKKyAgICBEZSAgICAKK05vIG1hdGNoCisKKy8oLiopXGQrXDEvCisgICAgYWJjMTIzYWJjCisgMDogYWJjMTIzYWJjCisgMTogYWJjCisgICAgYWJjMTIzYmMgCisgMDogYmMxMjNiYworIDE6IGJjCisKKy8oLiopXGQrXDEvcworICAgIGFiYzEyM2FiYworIDA6IGFiYzEyM2FiYworIDE6IGFiYworICAgIGFiYzEyM2JjIAorIDA6IGJjMTIzYmMKKyAxOiBiYworICAgIAorLygoLiopKVxkK1wxLworICAgIGFiYzEyM2FiYworIDA6IGFiYzEyM2FiYworIDE6IGFiYworIDI6IGFiYworICAgIGFiYzEyM2JjICAKKyAwOiBiYzEyM2JjCisgMTogYmMKKyAyOiBiYworCisjIFRoaXMgdGVzdHMgZm9yIGFuIElQdjYgYWRkcmVzcyBpbiB0aGUgZm9ybSB3aGVyZSBpdCBjYW4gaGF2ZSB1cCB0bworIyBlaWdodCBjb21wb25lbnRzLCBvbmUgYW5kIG9ubHkgb25lIG9mIHdoaWNoIGlzIGVtcHR5LiBUaGlzIG11c3QgYmUKKyMgYW4gaW50ZXJuYWwgY29tcG9uZW50LiAKKworL14oPyE6KSAgICAgICAgICAgICAgICAgICAgICAgIyBjb2xvbiBkaXNhbGxvd2VkIGF0IHN0YXJ0CisgICg/OiAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0IG9mIGl0ZW0KKyAgICAoPzogWzAtOWEtZl17MSw0fSB8ICAgICAgICMgMS00IGhleCBkaWdpdHMgb3IKKyAgICAoPygxKTAgfCAoKSApICkgICAgICAgICAgICMgaWYgbnVsbCBwcmV2aW91c2x5IG1hdGNoZWQsIGZhaWw7IGVsc2UgbnVsbAorICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgIyBmb2xsb3dlZCBieSBjb2xvbgorICApezEsN30gICAgICAgICAgICAgICAgICAgICAgIyBlbmQgaXRlbTsgMS03IG9mIHRoZW0gcmVxdWlyZWQgICAgICAgICAgICAgICAKKyAgWzAtOWEtZl17MSw0fSAkICAgICAgICAgICAgICMgZmluYWwgaGV4IG51bWJlciBhdCBlbmQgb2Ygc3RyaW5nCisgICg/KDEpfC4pICAgICAgICAgICAgICAgICAgICAjIGNoZWNrIHRoYXQgdGhlcmUgd2FzIGFuIGVtcHR5IGNvbXBvbmVudAorICAvaXgKKyAgICBhMTIzOjphMTIzCisgMDogYTEyMzo6YTEyMworIDE6IAorICAgIGExMjM6YjM0Mjo6YWJjZAorIDA6IGExMjM6YjM0Mjo6YWJjZAorIDE6IAorICAgIGExMjM6YjM0Mjo6MzI0ZTphYmNkCisgMDogYTEyMzpiMzQyOjozMjRlOmFiY2QKKyAxOiAKKyAgICBhMTIzOmRkZGU6YjM0Mjo6MzI0ZTphYmNkCisgMDogYTEyMzpkZGRlOmIzNDI6OjMyNGU6YWJjZAorIDE6IAorICAgIGExMjM6ZGRkZTpiMzQyOjozMjRlOmRjYmE6YWJjZAorIDA6IGExMjM6ZGRkZTpiMzQyOjozMjRlOmRjYmE6YWJjZAorIDE6IAorICAgIGExMjM6ZGRkZTo5OTk5OmIzNDI6OjMyNGU6ZGNiYTphYmNkCisgMDogYTEyMzpkZGRlOjk5OTk6YjM0Mjo6MzI0ZTpkY2JhOmFiY2QKKyAxOiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDE6MjozOjQ6NTo2Ojc6OAorTm8gbWF0Y2gKKyAgICBhMTIzOmJjZTpkZGRlOjk5OTk6YjM0Mjo6MzI0ZTpkY2JhOmFiY2QKK05vIG1hdGNoCisgICAgYTEyMzo6OTk5OTpiMzQyOjozMjRlOmRjYmE6YWJjZAorTm8gbWF0Y2gKKyAgICBhYmNkZToyOjM6NDo1OjY6Nzo4CitObyBtYXRjaAorICAgIDo6MQorTm8gbWF0Y2gKKyAgICBhYmNkOmZlZTA6MTIzOjogICAKK05vIG1hdGNoCisgICAgOjEKK05vIG1hdGNoCisgICAgMTogIAorTm8gbWF0Y2gKKworL1t6XFFhLWRdXEVdLworICAgIHoKKyAwOiB6CisgICAgYQorIDA6IGEKKyAgICAtCisgMDogLQorICAgIGQKKyAwOiBkCisgICAgXSAKKyAwOiBdCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiICAgICAKK05vIG1hdGNoCisKKy8oYSspKmIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIAorTm8gbWF0Y2gKKyAgICAKKy8oP2kpcmVnKD86dWwoPzpbYeRdfGFlKXJ8ZXgpLworICAgIFJFR3VsYXIKKyAwOiBSRUd1bGFyCisgICAgcmVndWxhZXIKKyAwOiByZWd1bGFlcgorICAgIFJlZ2V4ICAKKyAwOiBSZWdleAorICAgIHJlZ3Vs5HIgCisgMDogcmVndWxceGU0cgorCisvxebl5FvgLf/ALd9dKy8KKyAgICDF5uXk4AorIDA6IFx4YzVceGU2XHhlNVx4ZTRceGUwCisgICAgxebl5P8KKyAwOiBceGM1XHhlNlx4ZTVceGU0XHhmZgorICAgIMXm5eTACisgMDogXHhjNVx4ZTZceGU1XHhlNFx4YzAKKyAgICDF5uXk3worIDA6IFx4YzVceGU2XHhlNVx4ZTRceGRmCisKKy8oPzw9WilYLi8KKyAgXHg4NFhBWlhCCisgMDogWEIKKworL2FiIGNkICg/eCkgZGUgZmcvCisgICAgYWIgY2QgZGVmZworIDA6IGFiIGNkIGRlZmcKKworL2FiIGNkKD94KSBkZSBmZy8KKyAgICBhYiBjZGRlZmcKKyAwOiBhYiBjZGRlZmcKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYmNkZGVmZworTm8gbWF0Y2gKKworLyg/PCFbXmZdb28pKGJhcikvCisgICAgZm9vYmFyWCAKKyAwOiBiYXIKKyAxOiBiYXIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBib29iYXJYCitObyBtYXRjaAorCisvKD88IVteZl0pWC8KKyAgICBvZmZYCisgMDogWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgb255WCAgCitObyBtYXRjaAorCisvKD88PVteZl0pWC8KKyAgICBvbnlYCisgMDogWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgb2ZmWCAKK05vIG1hdGNoCisKKy9eL2dtCisgICAgYVxuYlxuY1xuCisgMDogCisgMDogCisgMDogCisgICAgXCAKKyAwOiAKKyAgICAKKy8oPzw9Q1xuKV4vZ20KKyAgICBBXG5DXG5DXG4gCisgMDogCisKKy8oPzooPygxKWF8YikoWCkpKy8KKyAgICBiWGFYCisgMDogYlhhWAorIDE6IFgKKworLyg/Oig/KDEpXDFhfGIpKFh8WSkpKy8KKyAgICBiWFhhWVlhWQorIDA6IGJYWGFZWWFZCisgMTogWQorICAgIGJYWWFYWGFYICAKKyAwOiBiWAorIDE6IFgKKworLygpKCkoKSgpKCkoKSgpKCkoKSg/Oig/KDEwKVwxMGF8YikoWHxZKSkrLworICAgIGJYWGFZWWFZCisgMDogYlgKKyAxOiAKKyAyOiAKKyAzOiAKKyA0OiAKKyA1OiAKKyA2OiAKKyA3OiAKKyA4OiAKKyA5OiAKKzEwOiBYCisKKy9bWyxhYmMsXStdLworICAgIGFiY10KKyAwOiBhYmNdCisgICAgYSxiXQorIDA6IGEsYl0KKyAgICBbYSxiLGNdICAKKyAwOiBbYSxiLGNdCisKKy8oPy14OiApL3gKKyAgICBBXHgyMEIKKyAwOiAgCisgICAgCisiKD94KSg/LXg6IFxzKiNccyopIgorICAgIEEgIyBCCisgMDogICMgCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAjICAKK05vIG1hdGNoCisKKyIoP3gtaXMpKD86KD8taXhzKSBccyojXHMqKSBpbmNsdWRlIgorICAgIEEgI2luY2x1ZGUKKyAwOiAgI2luY2x1ZGUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEEjaW5jbHVkZSAgCitObyBtYXRjaAorICAgIEEgI0luY2x1ZGUKK05vIG1hdGNoCisKKy9hKmIqXHcvCisgICAgYWFhYmJiYgorIDA6IGFhYWJiYmIKKyAgICBhYWFhCisgMDogYWFhYQorICAgIGEKKyAwOiBhCisKKy9hKmI/XHcvCisgICAgYWFhYmJiYgorIDA6IGFhYWJiCisgICAgYWFhYQorIDA6IGFhYWEKKyAgICBhCisgMDogYQorCisvYSpiezAsNH1cdy8KKyAgICBhYWFiYmJiCisgMDogYWFhYmJiYgorICAgIGFhYWEKKyAwOiBhYWFhCisgICAgYQorIDA6IGEKKworL2EqYnswLH1cdy8KKyAgICBhYWFiYmJiCisgMDogYWFhYmJiYgorICAgIGFhYWEKKyAwOiBhYWFhCisgICAgYQorIDA6IGEKKyAgICAKKy9hKlxkKlx3LworICAgIDBhCisgMDogMGEKKyAgICBhIAorIDA6IGEKKyAgICAKKy9hKmIgKlx3L3gKKyAgICBhIAorIDA6IGEKKworL2EqYiNjb21tZW50CisgICpcdy94CisgICAgYSAKKyAwOiBhCisKKy9hKiBiICpcdy94CisgICAgYSAKKyAwOiBhCisKKy9eXHcrPS4qKFxcXG4uKikqLworICAgIGFiYz14eXpcXFxucHFyCisgMDogYWJjPXh5elwKKworLyg/PShcdyspKVwxOi8KKyAgICBhYmNkOgorIDA6IGFiY2Q6CisgMTogYWJjZAorCisvXig/PShcdyspKVwxOi8KKyAgICBhYmNkOgorIDA6IGFiY2Q6CisgMTogYWJjZAorCisvXlxFYWJjLworICAgIGFiYworIDA6IGFiYworICAgIAorL15bXEVhYmNdLworICAgIGEKKyAwOiBhCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgRSAKK05vIG1hdGNoCisgICAgCisvXlthLVxFY10vCisgICAgYgorIDA6IGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIC0KK05vIG1hdGNoCisgICAgRSAgICAKK05vIG1hdGNoCisKKy9eW2FcRVxFLVxFY10vCisgICAgYgorIDA6IGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIC0KK05vIG1hdGNoCisgICAgRSAgICAKK05vIG1hdGNoCisKKy9eW1xFXFFhXEUtXFF6XEVdKy8KKyAgICBiCisgMDogYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgLSAgCitObyBtYXRjaAorICAgIAorL15bYVxRXWJjXEVdLworICAgIGEKKyAwOiBhCisgICAgXQorIDA6IF0KKyAgICBjCisgMDogYworICAgIAorL15bYS1cUVxFXS8KKyAgICBhCisgMDogYQorICAgIC0gICAgIAorIDA6IC0KKworL14oYSgpKikqLworICAgIGFhYWEKKyAwOiBhYWFhCisgMTogYQorIDI6IAorCisvXig/OmEoPzooPzopKSopKi8KKyAgICBhYWFhCisgMDogYWFhYQorCisvXihhKCkrKSsvCisgICAgYWFhYQorIDA6IGFhYWEKKyAxOiBhCisgMjogCisKKy9eKD86YSg/Oig/OikpKykrLworICAgIGFhYWEKKyAwOiBhYWFhCisKKy8oYSl7MCwzfSg/KDEpYnwoY3wpKSpELworICAgIGFiYkQKKyAwOiBhYmJECisgMTogYQorICAgIGNjY2NECisgMDogY2NjY0QKKyAxOiA8dW5zZXQ+CisgMjogCisgICAgRCAgCisgMDogRAorIDE6IDx1bnNldD4KKyAyOiAKKworLyhhfCkqXGQvCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTQKKyAwOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE0CisgMTogCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitObyBtYXRjaAorCisvKD8+YXwpKlxkLworICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE0CisgMDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorTm8gbWF0Y2gKKworLyg/OmF8KSpcZC8KKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhNAorIDA6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTQKK1w9IEV4cGVjdCBubyBtYXRjaAorICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK05vIG1hdGNoCisKKy9cWi9nCisgIGFiY1xuCisgMDogCisgMDogCisgIAorL14oP3MpKD8+LiopKD88IVxuKS8KKyAgYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgYWJjXG4gIAorTm8gbWF0Y2gKKworL14oPyFbXlxuXSpcblx6KS8KKyAgYWJjCisgMDogCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgYWJjXG4gCitObyBtYXRjaAorICAKKy9ceig/PCFcbikvCisgIGFiYworIDA6IAorXD0gRXhwZWN0IG5vIG1hdGNoCisgIGFiY1xuICAKK05vIG1hdGNoCisKKy8oLiooLik/KSovCisgICAgYWJjZAorIDA6IGFiY2QKKyAxOiAKKworLyggKEEgfCAoPygxKTB8KSApKiAgICkveAorICAgIGFiY2QKKyAwOiAKKyAxOiAKKyAyOiAKKworLyggKCAoPygxKTB8KSApKiAgICkveAorICAgIGFiY2QKKyAwOiAKKyAxOiAKKyAyOiAKKworLyggICg/KDEpMHwpKiAgICkveAorICAgIGFiY2QKKyAwOiAKKyAxOiAKKworL1tbOmFiY2Q6eHl6XV0vCisgICAgYV0KKyAwOiBhXQorICAgIDpdIAorIDA6IDpdCisgICAgCisvW2FiY1s6eFxdcHFyXS8KKyAgICBhCisgMDogYQorICAgIFsKKyAwOiBbCisgICAgOgorIDA6IDoKKyAgICBdCisgMDogXQorICAgIHAgICAgCisgMDogcAorCisvLipbb3BdW3h5el0vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBmb29hYmNmb28KK05vIG1hdGNoCisKKy8oPyg/PS4qYilifF4pLworICAgYWRjCisgMDogCisgICBhYmMgCisgMDogYgorCisvKD8oPz1eLipiKWJ8XikvCisgICBhZGMKKyAwOiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgYWJjIAorTm8gbWF0Y2gKKworLyg/KD89LipiKWJ8XikqLworICAgYWRjCisgMDogCisgICBhYmMgCisgMDogCisKKy8oPyg/PS4qYilifF4pKy8KKyAgIGFkYworIDA6IAorICAgYWJjIAorIDA6IGIKKworLyg/KD89YikuKmJ8XmQpLworICAgIGFiYworIDA6IGIKKworLyg/KD89LipiKS4qYnxeZCkvCisgICAgYWJjCisgMDogYWIKKworL14lKCg/KD89W2FdKVteJV0pfGIpKiUkLworICAgICVhYiUKKyAwOiAlYWIlCisgMTogCisKKy8oP2kpYSg/LWkpYnxjLworICAgIFhhYlgKKyAwOiBhYgorICAgIFhBYlgKKyAwOiBBYgorICAgIENjQyAKKyAwOiBjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYQUJYICAgCitObyBtYXRjaAorCisvW1x4MDAtXHhmZlxzXSsvCisgICAgXHgwYVx4MGJceDBjXHgwZAorIDA6IFx4MGFceDBiXHgwY1x4MGQKKworLyhhYmMpXDEvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICBhYmMKK05vIG1hdGNoCisKKy8oYWJjKVwxLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICBhYmMKK05vIG1hdGNoCisKKy9bXmFdKi9pCisgICAgMTJhYmMKKyAwOiAxMgorICAgIDEyQUJDCisgMDogMTIKKworL1teYV0qKy9pCisgICAgMTJhYmMKKyAwOiAxMgorICAgIDEyQUJDCisgMDogMTIKKworL1teYV0qP1gvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTJhYmMKK05vIG1hdGNoCisgICAgMTJBQkMKK05vIG1hdGNoCisgICAgCisvW15hXSs/WC9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMmFiYworTm8gbWF0Y2gKKyAgICAxMkFCQworTm8gbWF0Y2gKKworL1teYV0/WC9pCisgICAgMTJhWGJjWAorIDA6IFgKKyAgICAxMkFYQkNYCisgMDogWAorICAgIEJDWCAKKyAwOiBDWAorCisvW15hXT8/WC9pCisgICAgMTJhWGJjWAorIDA6IFgKKyAgICAxMkFYQkNYCisgMDogWAorICAgIEJDWAorIDA6IENYCisgICAgCisvW15hXT8rWC9pCisgICAgMTJhWGJjWAorIDA6IGNYCisgICAgMTJBWEJDWAorIDA6IENYCisgICAgQkNYIAorIDA6IENYCisKKy9bXmFdezIsM30vaQorICAgIGFiY2RlZgorIDA6IGJjZAorICAgIEFCQ0RFRiAgCisgMDogQkNECisKKy9bXmFdezIsM30/L2kKKyAgICBhYmNkZWYKKyAwOiBiYworICAgIEFCQ0RFRiAgCisgMDogQkMKKworL1teYV17MiwzfSsvaQorICAgIGFiY2RlZgorIDA6IGJjZAorICAgIEFCQ0RFRiAgCisgMDogQkNECisKKy8oKGF8KSspK1ovCisgICAgWgorIDA6IFoKKyAxOiAKKyAyOiAKKworLyhhKWJ8KGEpYy8KKyAgICBhYworIDA6IGFjCisgMTogPHVuc2V0PgorIDI6IGEKKworLyg/PihhKSlifChhKWMvCisgICAgYWMKKyAwOiBhYworIDE6IDx1bnNldD4KKyAyOiBhCisKKy8oPz0oYSkpYWJ8KGEpYy8KKyAgICBhYworIDA6IGFjCisgMTogPHVuc2V0PgorIDI6IGEKKworLygoPz4oYSkpYnwoYSljKS8KKyAgICBhYworIDA6IGFjCisgMTogYWMKKyAyOiA8dW5zZXQ+CisgMzogYQorCisvKCg/PihhKSlifChhKWMpKysvCisgICAgYWMKKyAwOiBhYworIDE6IGFjCisgMjogPHVuc2V0PgorIDM6IGEKKworLyg/Oig/PihhKSlifChhKWMpKysvCisgICAgYWMKKyAwOiBhYworIDE6IDx1bnNldD4KKyAyOiBhCisKKy8oPz0oPz4oYSkpYnwoYSljKSguLikvCisgICAgYWMKKyAwOiBhYworIDE6IDx1bnNldD4KKyAyOiBhCisgMzogYWMKKworLyg/Pig/PihhKSlifChhKWMpLworICAgIGFjCisgMDogYWMKKyAxOiA8dW5zZXQ+CisgMjogYQorCisvKD86KD8+KFthYl0pKSkrYT0vYWZ0ZXJ0ZXh0CisgICAgPWJhPQorIDA6IGJhPQorIDArIAorIDE6IGIKKworLyg/PihbYWJdKSkrYT0vYWZ0ZXJ0ZXh0CisgICAgPWJhPQorIDA6IGJhPQorIDArIAorIDE6IGIKKworLygoPz4oYSspYikrKGFhYmFiKSkvCisgICAgYWFhYWJhYWFiYWFiYWIKKyAwOiBhYWFhYmFhYWJhYWJhYgorIDE6IGFhYWFiYWFhYmFhYmFiCisgMjogYWFhCisgMzogYWFiYWIKKworLyg/PmErfGFiKSs/Yy8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKK05vIG1hdGNoCisKKy8oPz5hK3xhYikrYy8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKK05vIG1hdGNoCisKKy8oPzphK3xhYikrYy8KKyAgICBhYWJjCisgMDogYWFiYworCisvKD8oPz0oYSkpYSkvCisgICAgYQorIDA6IGEKKyAxOiBhCisKKy8oPyg/PShhKSlhKShiKS8KKyAgICBhYgorIDA6IGFiCisgMTogYQorIDI6IGIKKworL14oPzphfGFiKSsrYy8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWFiYworTm8gbWF0Y2gKKworL14oPz5hfGFiKSsrYy8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWFiYworTm8gbWF0Y2gKKworL14oPzphfGFiKStjLworICAgIGFhYWFiYworIDA6IGFhYWFiYworCisvKD89YWJjKXszfWFiYy9hZnRlcnRleHQKKyAgICBhYmNhYmNhYmMKKyAwOiBhYmMKKyAwKyBhYmNhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5eiAgCitObyBtYXRjaAorICAgIAorLyg/PWFiYykrYWJjL2FmdGVydGV4dAorICAgIGFiY2FiY2FiYworIDA6IGFiYworIDArIGFiY2FiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6ICAKK05vIG1hdGNoCisgICAgCisvKD89YWJjKSsrYWJjL2FmdGVydGV4dAorICAgIGFiY2FiY2FiYworIDA6IGFiYworIDArIGFiY2FiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6ICAKK05vIG1hdGNoCisgICAgCisvKD89YWJjKXswfXh5ei8KKyAgICB4eXogCisgMDogeHl6CisKKy8oPz1hYmMpezF9eHl6LworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6IAorTm8gbWF0Y2gKKyAgICAKKy8oPz0oYSkpPy4vCisgICAgYWIKKyAwOiBhCisgMTogYQorICAgIGJjCisgMDogYgorICAgICAgCisvKD89KGEpKT8/Li8KKyAgICBhYgorIDA6IGEKKyAgICBiYworIDA6IGIKKworL14oPz0oPzEpKT9bYXpdKFthYmNdKWQvCisgICAgYWJkIAorIDA6IGFiZAorIDE6IGIKKyAgICB6Y2R4eCAKKyAwOiB6Y2QKKyAxOiBjCisKKy9eKD8hYSl7MH1cdysvCisgICAgYWFhYWEKKyAwOiBhYWFhYQorCisvKD88PShhYmMpKT94eXovCisgICAgYWJjeHl6CisgMDogeHl6CisgMTogYWJjCisgICAgcHFyeHl6IAorIDA6IHh5egorCisvXltcZzxhPl0rLworICAgIGdnZzw8PGFhYT4+PgorIDA6IGdnZzw8PGFhYT4+PgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXFxnYSAgCitObyBtYXRjaAorICAgIAorL15bXGdhXSsvCisgICAgZ2dnYWdhZ2F4eXogCisgMDogZ2dnYWdhZ2EKKyAgICAKKy9eWzphWzpkaWdpdDpdXSsvCisgICAgYWFhYTQ0NDo6OlogCisgMDogYWFhYTQ0NDo6OgorCisvXls6YVs6ZGlnaXQ6XTpiXSsvCisgICAgYWFhYTQ0NDo6OmJiYlogCisgMDogYWFhYTQ0NDo6OmJiYgorCisvWzphXXh4eFtiOl0vCisgICAgIDp4eHg6CisgMDogOnh4eDoKKyAgICAgCisvKD88PWF7Mn0pYi9pCisgICAgeGFhYmMKKyAwOiBiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4YWJjICAKK05vIG1hdGNoCisKKy8oPzwhYXsyfSliL2kKKyAgICB4YWJjCisgMDogYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeGFhYmMgIAorTm8gbWF0Y2gKKworLyg/PD1hXGgpYy8KKyAgICB4YSBjCisgMDogYworICAgIAorLyg/PD1bXmFdezJ9KWIvCisgICAgYXh4YmMKKyAwOiBiCisgICAgYUFBYmMgCisgMDogYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeGFhYmMgICAgCitObyBtYXRjaAorCisvKD88PVteYV17Mn0pYi9pCisgICAgYXh4YmMgIAorIDA6IGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFBQWJjIAorTm8gbWF0Y2gKKyAgICB4YWFiYyAgICAKK05vIG1hdGNoCisKKy8oPzw9YVxIKWMvCisgICAgYWJjCisgMDogYworCisvKD88PWFcViljLworICAgIGFiYworIDA6IGMKKyAgICAKKy8oPzw9YVx2KWMvCisgICAgYVxuYworIDA6IGMKKworLyg/KD89YyljfGQpKytZLworICAgIFhjY2NkZFlYCisgMDogY2NjZGRZCisKKy8oPyg/PWMpY3xkKSorWS8KKyAgICBYY2NjZGRZWAorIDA6IGNjY2RkWQorCisvXihhezIsM30pezIsfSthLworICAgIGFhYWFhYWEKKyAwOiBhYWFhYWFhCisgMTogYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhYWEKK05vIG1hdGNoCisgICAgYWFhYWFhYWFhIAorTm8gbWF0Y2gKKworL14oYXsyLDN9KSsrYS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWFhYQorTm8gbWF0Y2gKKworL14oYXsyLDN9KSorYS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWFhYQorTm8gbWF0Y2gKKworL1xIXGhcVlx2LworICAgIFggWFx4MGEKKyAwOiBYIFhceDBhCisgICAgWFx4MDlYXHgwYgorIDA6IFhceDA5WFx4MGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4YTAgWFx4MGEgICAKK05vIG1hdGNoCisgICAgCisvXEgqXGgrXFY/XHZ7Myw0fS8KKyAgICBceDA5XHgyMFx4YTBYXHgwYVx4MGJceDBjXHgwZFx4MGEKKyAwOiBceDA5IFx4YTBYXHgwYVx4MGJceDBjXHgwZAorICAgIFx4MDlceDIwXHhhMFx4MGFceDBiXHgwY1x4MGRceDBhCisgMDogXHgwOSBceGEwXHgwYVx4MGJceDBjXHgwZAorICAgIFx4MDlceDIwXHhhMFx4MGFceDBiXHgwYworIDA6IFx4MDkgXHhhMFx4MGFceDBiXHgwYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFx4MDlceDIwXHhhMFx4MGFceDBiCitObyBtYXRjaAorICAgICAKKy9cSHszLDR9LworICAgIFhZICBBQkNERQorIDA6IEFCQ0QKKyAgICBYWSAgUFFSIFNUIAorIDA6IFBRUgorICAgIAorLy5caHszLDR9Li8KKyAgICBYWSAgQUIgICAgUFFSUworIDA6IEIgICAgUAorCisvXGgqWFxoP1xIK1lcSD9aLworICAgID5YTk5OWVoKKyAwOiBYTk5OWVoKKyAgICA+ICBYIE5ZUVoKKyAwOiAgIFggTllRWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgPlhZWiAgIAorTm8gbWF0Y2gKKyAgICA+ICBYIE5ZIFoKK05vIG1hdGNoCisKKy9cdipYXHY/WVx2K1pcVipceDBhXFYrXHgwYlxWezIsM31ceDBjLworICAgID5YWVx4MGFaXHgwYUFceDBiTk5ceDBjCisgMDogWFlceDBhWlx4MGFBXHgwYk5OXHgwYworICAgID5ceDBhXHgwZFhceDBhWVx4MGFceDBiWlpaXHgwYUFBQVx4MGJOTk5ceDBjCisgMDogXHgwYVx4MGRYXHgwYVlceDBhXHgwYlpaWlx4MGFBQUFceDBiTk5OXHgwYworCisvKGZvbylcS2Jhci8KKyAgICBmb29iYXIKKyAwOiBiYXIKKyAxOiBmb28KKyAgIAorLyhmb28pKFxLYmFyfGJheikvCisgICAgZm9vYmFyCisgMDogYmFyCisgMTogZm9vCisgMjogYmFyCisgICAgZm9vYmF6IAorIDA6IGZvb2JhegorIDE6IGZvbworIDI6IGJhegorCisvKGZvb1xLYmFyKWJhei8KKyAgICBmb29iYXJiYXoKKyAwOiBiYXJiYXoKKyAxOiBmb29iYXIKKworL2FiY1xLfGRlZlxLL2csYWZ0ZXJ0ZXh0CisgICAgWGFiY2RlZmdoaQorIDA6IAorIDArIGRlZmdoaQorIDA6IAorIDArIGdoaQorCisvYWJcS2N8ZGVcS2YvZyxhZnRlcnRleHQKKyAgICBYYWJjZGVmZ2hpCisgMDogYworIDArIGRlZmdoaQorIDA6IGYKKyAwKyBnaGkKKyAgICAKKy8oPz1DKS9nLGFmdGVydGV4dAorICAgIEFCQ0RFQ0JBCisgMDogCisgMCsgQ0RFQ0JBCisgMDogCisgMCsgQ0JBCisgICAgCisvXmFiY1xLL2FmdGVydGV4dAorICAgIGFiY2RlZgorIDA6IAorIDArIGRlZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZGVmYWJjeHl6ICAgCitObyBtYXRjaAorCisvXihhKGIpKVwxXGcxXGd7MX1cZy0xXGd7LTF9XGd7LTJ9Wi8KKyAgICBhYmFiYWJhYmJiYWJaWFhYWAorIDA6IGFiYWJhYmFiYmJhYloKKyAxOiBhYgorIDI6IGIKKworLyg/PEE+dG9tfGJvbiktXGd7QX0vCisgICAgdG9tLXRvbQorIDA6IHRvbS10b20KKyAxOiB0b20KKyAgICBib24tYm9uIAorIDA6IGJvbi1ib24KKyAxOiBib24KKyAgICAKKy8oXihhfGJcZ3stMX0pKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhY3h4eAorTm8gbWF0Y2gKKworLyg/fChhYmMpfCh4eXopKVwxLworICAgIGFiY2FiYworIDA6IGFiY2FiYworIDE6IGFiYworICAgIHh5enh5eiAKKyAwOiB4eXp4eXoKKyAxOiB4eXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY3h5egorTm8gbWF0Y2gKKyAgICB4eXphYmMgICAKK05vIG1hdGNoCisgICAgCisvKD98KGFiYyl8KHh5eikpKD8xKS8KKyAgICBhYmNhYmMKKyAwOiBhYmNhYmMKKyAxOiBhYmMKKyAgICB4eXphYmMgCisgMDogeHl6YWJjCisgMTogeHl6CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgeHl6eHl6IAorTm8gbWF0Y2gKKyAKKy9eWCg/NSkoYSkoP3woYil8KHEpKShjKShkKShZKS8KKyAgICBYWWFiY2RZCisgMDogWFlhYmNkWQorIDE6IGEKKyAyOiBiCisgMzogYworIDQ6IGQKKyA1OiBZCisKKy9eWCg/NykoYSkoP3woYnwocikocykpfChxKSkoYykoZCkoWSkvCisgICAgWFlhYmNkWQorIDA6IFhZYWJjZFkKKyAxOiBhCisgMjogYgorIDM6IDx1bnNldD4KKyA0OiA8dW5zZXQ+CisgNTogYworIDY6IGQKKyA3OiBZCisKKy9eWCg/NykoYSkoP3woYnwoP3wocil8KHQpKShzKSl8KHEpKShjKShkKShZKS8KKyAgICBYWWFiY2RZCisgMDogWFlhYmNkWQorIDE6IGEKKyAyOiBiCisgMzogPHVuc2V0PgorIDQ6IDx1bnNldD4KKyA1OiBjCisgNjogZAorIDc6IFkKKworLyg/J2FiYydcdyspOlxrPGFiYz57Mn0vCisgICAgYTphYXh5egorIDA6IGE6YWEKKyAxOiBhCisgICAgYWI6YWJhYnh5egorIDA6IGFiOmFiYWIKKyAxOiBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYTpheHl6CitObyBtYXRjaAorICAgIGFiOmFieHl6CitObyBtYXRjaAorCisvKD8nYWJjJ1x3Kyk6XGd7YWJjfXsyfS8KKyAgICBhOmFheHl6CisgMDogYTphYQorIDE6IGEKKyAgICBhYjphYmFieHl6CisgMDogYWI6YWJhYgorIDE6IGFiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhOmF4eXoKK05vIG1hdGNoCisgICAgYWI6YWJ4eXoKK05vIG1hdGNoCisKKy9eKD88YWI+YSk/ICg/KDxhYj4pYnxjKSAoPygnYWInKWR8ZSkveAorICAgIGFiZAorIDA6IGFiZAorIDE6IGEKKyAgICBjZQorIDA6IGNlCisKKy9eKGEuKVxnLTFaLworICAgIGFYYVhaCisgMDogYVhhWFoKKyAxOiBhWAorCisvXihhLilcZ3stMX1aLworICAgIGFYYVhaCisgMDogYVhhWFoKKyAxOiBhWAorCisvXig/KERFRklORSkgKD88QT4gYSkgKD88Qj4gYikgKSAgKD8mQSkgKD8mQikgL3gKKyAgICBhYmNkCisgMDogYWIKKworLyg/PE5BTUU+KD8mTkFNRV9QQVQpKVxzKyg/PEFERFI+KD8mQUREUkVTU19QQVQpKQorICAoPyhERUZJTkUpCisgICg/PE5BTUVfUEFUPlthLXpdKykKKyAgKD88QUREUkVTU19QQVQ+XGQrKQorICApL3gKKyAgICBtZXRjYWxmZSAzMworIDA6IG1ldGNhbGZlIDMzCisgMTogbWV0Y2FsZmUKKyAyOiAzMworCisvKD8oREVGSU5FKSg/PGJ5dGU+MlswLTRdXGR8MjVbMC01XXwxXGRcZHxbMS05XT9cZCkpXGIoPyZieXRlKShcLig/JmJ5dGUpKXszfS8KKyAgICAxLjIuMy40CisgMDogMS4yLjMuNAorIDE6IDx1bnNldD4KKyAyOiAuNAorICAgIDEzMS4xMTEuMTAuMjA2CisgMDogMTMxLjExMS4xMC4yMDYKKyAxOiA8dW5zZXQ+CisgMjogLjIwNgorICAgIDEwLjAuMC4wCisgMDogMTAuMC4wLjAKKyAxOiA8dW5zZXQ+CisgMjogLjAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEwLjYKK05vIG1hdGNoCisgICAgNDU1LjMuNC41CitObyBtYXRjaAorCisvXGIoPyZieXRlKShcLig/JmJ5dGUpKXszfSg/KERFRklORSkoPzxieXRlPjJbMC00XVxkfDI1WzAtNV18MVxkXGR8WzEtOV0/XGQpKS8KKyAgICAxLjIuMy40CisgMDogMS4yLjMuNAorIDE6IC40CisgICAgMTMxLjExMS4xMC4yMDYKKyAwOiAxMzEuMTExLjEwLjIwNgorIDE6IC4yMDYKKyAgICAxMC4wLjAuMAorIDA6IDEwLjAuMC4wCisgMTogLjAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEwLjYKK05vIG1hdGNoCisgICAgNDU1LjMuNC41CitObyBtYXRjaAorCisvXihcdysrfFxzKyspKiQvCisgICAgbm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBtZW4gdG8gY29tZSB0byB0aGUgYWlkIG9mIHRoZSBwYXJ0eQorIDA6IG5vdyBpcyB0aGUgdGltZSBmb3IgYWxsIGdvb2QgbWVuIHRvIGNvbWUgdG8gdGhlIGFpZCBvZiB0aGUgcGFydHkKKyAxOiBwYXJ0eQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgdGhpcyBpcyBub3QgYSBsaW5lIHdpdGggb25seSB3b3JkcyBhbmQgc3BhY2VzIQorTm8gbWF0Y2gKKworLyhcZCsrKShcdykvCisgICAgMTIzNDVhCisgMDogMTIzNDVhCisgMTogMTIzNDUKKyAyOiBhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0NSsKK05vIG1hdGNoCisKKy9hKytiLworICAgIGFhYWIKKyAwOiBhYWFiCisKKy8oYSsrYikvCisgICAgYWFhYgorIDA6IGFhYWIKKyAxOiBhYWFiCisKKy8oYSsrKWIvCisgICAgYWFhYgorIDA6IGFhYWIKKyAxOiBhYWEKKworLyhbXigpXSsrfFwoW14oKV0qXCkpKy8KKyAgICAoKGFiYyhhZGUpdWZoKCkoKXgKKyAwOiBhYmMoYWRlKXVmaCgpKCl4CisgMTogeAorCisvXCgoW14oKV0rK3xcKFteKCldK1wpKStcKS8KKyAgICAoYWJjKQorIDA6IChhYmMpCisgMTogYWJjCisgICAgKGFiYyhkZWYpeHl6KQorIDA6IChhYmMoZGVmKXh5eikKKyAxOiB4eXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICgoKClhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorTm8gbWF0Y2gKKworL14oW14oKV18XCgoPzEpKlwpKSokLworICAgIGFiYworIDA6IGFiYworIDE6IGMKKyAgICBhKGIpYworIDA6IGEoYiljCisgMTogYworICAgIGEoYihjKSlkCisgMDogYShiKGMpKWQKKyAxOiBkCitcPSBFeHBlY3Qgbm8gbWF0Y2gpCisgICAgYShiKGMpZAorTm8gbWF0Y2gKKworL14+YWJjPihbXigpXXxcKCg/MSkqXCkpKjx4eXo8JC8KKyAgID5hYmM+MTIzPHh5ejwKKyAwOiA+YWJjPjEyMzx4eXo8CisgMTogMworICAgPmFiYz4xKDIpMzx4eXo8CisgMDogPmFiYz4xKDIpMzx4eXo8CisgMTogMworICAgPmFiYz4oMSgyKTMpPHh5ejwKKyAwOiA+YWJjPigxKDIpMyk8eHl6PAorIDE6ICgxKDIpMykKKworL14oPzooKC4pKD8xKVwyfCl8KCguKSg/MylcNHwuKSkkL2kKKyAgICAxMjIxCisgMDogMTIyMQorIDE6IDEyMjEKKyAyOiAxCisgICAgU2F0YW5vc2NpbGxhdGVteW1ldGFsbGljc29uYXRhcworIDA6IFNhdGFub3NjaWxsYXRlbXltZXRhbGxpY3NvbmF0YXMKKyAxOiA8dW5zZXQ+CisgMjogPHVuc2V0PgorIDM6IFNhdGFub3NjaWxsYXRlbXltZXRhbGxpY3NvbmF0YXMKKyA0OiBTCisgICAgQW1hbmFwbGFuYWNhbmFsUGFuYW1hCisgMDogQW1hbmFwbGFuYWNhbmFsUGFuYW1hCisgMTogPHVuc2V0PgorIDI6IDx1bnNldD4KKyAzOiBBbWFuYXBsYW5hY2FuYWxQYW5hbWEKKyA0OiBBCisgICAgQWJsZXdhc0llcmVJc2F3RWxiYQorIDA6IEFibGV3YXNJZXJlSXNhd0VsYmEKKyAxOiA8dW5zZXQ+CisgMjogPHVuc2V0PgorIDM6IEFibGV3YXNJZXJlSXNhd0VsYmEKKyA0OiBBCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGVxdWlja2Jyb3duZm94CitObyBtYXRjaAorCisvXihcZCt8XCgoPzEpKFsrKi1dKSg/MSlcKXwtKD8xKSkkLworICAgIDEyCisgMDogMTIKKyAxOiAxMgorICAgICgoKDIrMikqLTMpLTcpCisgMDogKCgoMisyKSotMyktNykKKyAxOiAoKCgyKzIpKi0zKS03KQorIDI6IC0KKyAgICAtMTIKKyAwOiAtMTIKKyAxOiAtMTIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICgoMisyKSotMyktNykKK05vIG1hdGNoCisKKy9eKHgoeXwoPzEpezJ9KXopLworICAgIHh5egorIDA6IHh5egorIDE6IHh5egorIDI6IHkKKyAgICB4eHl6eHl6egorIDA6IHh4eXp4eXp6CisgMTogeHh5enh5enoKKyAyOiB4eXp4eXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh4eXp6CitObyBtYXRjaAorICAgIHh4eXp4eXp4eXp6CitObyBtYXRjaAorCisvKCg8ICg/OiAoPyhSKSBcZCsrICB8IFtePD5dKispIHwgKD8yKSkgKiA+KSkveAorICAgIDw+CisgMDogPD4KKyAxOiA8PgorIDI6IDw+CisgICAgPGFiY2Q+CisgMDogPGFiY2Q+CisgMTogPGFiY2Q+CisgMjogPGFiY2Q+CisgICAgPGFiYyA8MTIzPiBoaWo+CisgMDogPGFiYyA8MTIzPiBoaWo+CisgMTogPGFiYyA8MTIzPiBoaWo+CisgMjogPGFiYyA8MTIzPiBoaWo+CisgICAgPGFiYyA8ZGVmPiBoaWo+CisgMDogPGRlZj4KKyAxOiA8ZGVmPgorIDI6IDxkZWY+CisgICAgPGFiYzw+ZGVmPgorIDA6IDxhYmM8PmRlZj4KKyAxOiA8YWJjPD5kZWY+CisgMjogPGFiYzw+ZGVmPgorICAgIDxhYmM8PgorIDA6IDw+CisgMTogPD4KKyAyOiA8PgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgPGFiYworTm8gbWF0Y2gKKworL15hKygqRkFJTCkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhYWEKK05vIG1hdGNoCisgICAgCisvYStiP2MrKCpGQUlMKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWJjY2MKK05vIG1hdGNoCisKKy9hK2I/KCpQUlVORSljKygqRkFJTCkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFiY2NjCitObyBtYXRjaAorCisvYStiPygqQ09NTUlUKWMrKCpGQUlMKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWJjY2MKK05vIG1hdGNoCisgICAgCisvYStiPygqU0tJUCljKygqRkFJTCkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFiY2NjYWFhYmNjYworTm8gbWF0Y2gKKworL14oPzphYWEoKlRIRU4pXHd7Nn18YmJiKCpUSEVOKVx3ezV9fGNjYygqVEhFTilcd3s0fXxcd3szfSkvCisgICAgYWFheHh4eHh4CisgMDogYWFheHh4eHh4CisgICAgYWFhKysrKysrIAorIDA6IGFhYQorICAgIGJiYnh4eHh4CisgMDogYmJieHh4eHgKKyAgICBiYmIrKysrKyAKKyAwOiBiYmIKKyAgICBjY2N4eHh4CisgMDogY2NjeHh4eAorICAgIGNjYysrKysgCisgMDogY2NjCisgICAgZGRkZGRkZGQgICAKKyAwOiBkZGQKKworL14oYWFhKCpUSEVOKVx3ezZ9fGJiYigqVEhFTilcd3s1fXxjY2MoKlRIRU4pXHd7NH18XHd7M30pLworICAgIGFhYXh4eHh4eAorIDA6IGFhYXh4eHh4eAorIDE6IGFhYXh4eHh4eAorICAgIGFhYSsrKysrKyAKKyAwOiBhYWEKKyAxOiBhYWEKKyAgICBiYmJ4eHh4eAorIDA6IGJiYnh4eHh4CisgMTogYmJieHh4eHgKKyAgICBiYmIrKysrKyAKKyAwOiBiYmIKKyAxOiBiYmIKKyAgICBjY2N4eHh4CisgMDogY2NjeHh4eAorIDE6IGNjY3h4eHgKKyAgICBjY2MrKysrIAorIDA6IGNjYworIDE6IGNjYworICAgIGRkZGRkZGRkICAgCisgMDogZGRkCisgMTogZGRkCisKKy9hK2I/KCpUSEVOKWMrKCpGQUlMKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWJjY2MKK05vIG1hdGNoCisKKy8oQSAoQXxCKCpBQ0NFUFQpfEMpIEQpKEUpL3gKKyAgICBBQgorIDA6IEFCCisgMTogQUIKKyAyOiBCCisgICAgQUJYCisgMDogQUIKKyAxOiBBQgorIDI6IEIKKyAgICBBQURFCisgMDogQUFERQorIDE6IEFBRAorIDI6IEEKKyAzOiBFCisgICAgQUNERQorIDA6IEFDREUKKyAxOiBBQ0QKKyAyOiBDCisgMzogRQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUQgCitObyBtYXRjaAorICAgICAgICAKKy9eXFcqKyg/OigoLilcVyorKD8xKVxXKitcMnwpfCgoLilcVyorKD8zKVxXKitcNHxcVyorLlxXKispKVxXKiskL2kKKyAgICAxMjIxCisgMDogMTIyMQorIDE6IDEyMjEKKyAyOiAxCisgICAgU2F0YW4sIG9zY2lsbGF0ZSBteSBtZXRhbGxpYyBzb25hdGFzIQorIDA6IFNhdGFuLCBvc2NpbGxhdGUgbXkgbWV0YWxsaWMgc29uYXRhcyEKKyAxOiA8dW5zZXQ+CisgMjogPHVuc2V0PgorIDM6IFNhdGFuLCBvc2NpbGxhdGUgbXkgbWV0YWxsaWMgc29uYXRhcworIDQ6IFMKKyAgICBBIG1hbiwgYSBwbGFuLCBhIGNhbmFsOiBQYW5hbWEhCisgMDogQSBtYW4sIGEgcGxhbiwgYSBjYW5hbDogUGFuYW1hIQorIDE6IDx1bnNldD4KKyAyOiA8dW5zZXQ+CisgMzogQSBtYW4sIGEgcGxhbiwgYSBjYW5hbDogUGFuYW1hCisgNDogQQorICAgIEFibGUgd2FzIEkgZXJlIEkgc2F3IEVsYmEuCisgMDogQWJsZSB3YXMgSSBlcmUgSSBzYXcgRWxiYS4KKyAxOiA8dW5zZXQ+CisgMjogPHVuc2V0PgorIDM6IEFibGUgd2FzIEkgZXJlIEkgc2F3IEVsYmEKKyA0OiBBCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGUgcXVpY2sgYnJvd24gZm94CitObyBtYXRjaAorCisvXigoLikoPzEpXDJ8LikkLworICAgIGEKKyAwOiBhCisgMTogYQorICAgIGFiYQorIDA6IGFiYQorIDE6IGFiYQorIDI6IGEKKyAgICBhYWJhYSAgCisgMDogYWFiYWEKKyAxOiBhYWJhYQorIDI6IGEKKyAgICBhYmNkY2JhIAorIDA6IGFiY2RjYmEKKyAxOiBhYmNkY2JhCisgMjogYQorICAgIHBxYWFiYWFxcCAgCisgMDogcHFhYWJhYXFwCisgMTogcHFhYWJhYXFwCisgMjogcAorICAgIGFibGV3YXNpZXJlaXNhd2VsYmEKKyAwOiBhYmxld2FzaWVyZWlzYXdlbGJhCisgMTogYWJsZXdhc2llcmVpc2F3ZWxiYQorIDI6IGEKK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgcmh1YmFyYgorTm8gbWF0Y2gKKyAgICB0aGUgcXVpY2sgYnJvd24gZm94ICAKK05vIG1hdGNoCisKKy8oYSkoPzw9Yig/MSkpLworICAgIGJhegorIDA6IGEKKyAxOiBhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBjYXogIAorTm8gbWF0Y2gKKyAgICAKKy8oPzw9Yig/MSkpKGEpLworICAgIHpiYWF6CisgMDogYQorIDE6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYSAgCitObyBtYXRjaAorICAgIAorLyg/PFg+YSkoPzw9Yig/JlgpKS8KKyAgICBiYXoKKyAwOiBhCisgMTogYQorCisvXig/fChhYmMpfChkZWYpKVwxLworICAgIGFiY2FiYworIDA6IGFiY2FiYworIDE6IGFiYworICAgIGRlZmRlZiAKKyAwOiBkZWZkZWYKKyAxOiBkZWYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlZgorTm8gbWF0Y2gKKyAgICBkZWZhYmMgICAKK05vIG1hdGNoCisgICAgCisvXig/fChhYmMpfChkZWYpKSg/MSkvCisgICAgYWJjYWJjCisgMDogYWJjYWJjCisgMTogYWJjCisgICAgZGVmYWJjCisgMDogZGVmYWJjCisgMTogZGVmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBkZWZkZWYKK05vIG1hdGNoCisgICAgYWJjZGVmICAgIAorTm8gbWF0Y2gKKworLyg/OmEoPzxxdW90ZT4gKD88YXBvc3Ryb3BoZT4nKXwoPzxyZWFscXVvdGU+IikpIHxiKD88cXVvdGU+ICg/PGFwb3N0cm9waGU+Jyl8KD88cmVhbHF1b3RlPiIpKSApICg/KCdxdW90ZScpW2Etel0rfFswLTldKykveCxkdXBuYW1lcworICAgIGFcImFhYWFhCisgMDogYSJhYWFhYQorIDE6ICIKKyAyOiA8dW5zZXQ+CisgMzogIgorICAgIGJcImFhYWFhIAorIDA6IGIiYWFhYWEKKyAxOiA8dW5zZXQ+CisgMjogPHVuc2V0PgorIDM6IDx1bnNldD4KKyA0OiAiCisgNTogPHVuc2V0PgorIDY6ICIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBiXCIxMTExMQorTm8gbWF0Y2gKKworLyg/Oig/MSl8QikoQSgqRil8QykvCisgICAgQUJDRAorIDA6IEJDCisgMTogQworICAgIENDRAorIDA6IENDCisgMTogQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQ0FEICAgCitObyBtYXRjaAorCisvXig/Oig/MSl8QikoQSgqRil8QykvCisgICAgQ0NECisgMDogQ0MKKyAxOiBDCisgICAgQkNEIAorIDA6IEJDCisgMTogQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJDRAorTm8gbWF0Y2gKKyAgICBDQUQKK05vIG1hdGNoCisgICAgQkFEICAgIAorTm8gbWF0Y2gKKworLyg/Oig/MSl8QikoQSgqQUNDRVBUKVhYfEMpRC8KKyAgICBBQUQKKyAwOiBBQQorIDE6IEEKKyAgICBBQ0QKKyAwOiBBQ0QKKyAxOiBDCisgICAgQkFECisgMDogQkEKKyAxOiBBCisgICAgQkNECisgMDogQkNECisgMTogQworICAgIEJBWCAgCisgMDogQkEKKyAxOiBBCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQ1gKK05vIG1hdGNoCisgICAgQUJDICAgCitObyBtYXRjaAorCisvKD8oREVGSU5FKShBKSlCKD8xKUMvCisgICAgQkFDCisgMDogQkFDCisKKy8oPyhERUZJTkUpKChBKVwyKSlCKD8xKUMvCisgICAgQkFBQworIDA6IEJBQUMKKworLyg/PHBuPiBcKCAoIFteKCldKysgfCAoPyZwbikgKSogXCkgKS94CisgICAgKGFiKGNkKWVmKQorIDA6IChhYihjZCllZikKKyAxOiAoYWIoY2QpZWYpCisgMjogZWYKKworL14oPz1hKCpTS0lQKWJ8YWMpLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWMKK05vIG1hdGNoCisgICAgCisvXig/PWEoKlBSVU5FKWIpLworICAgIGFiICAKKyAwOiAKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYworTm8gbWF0Y2gKKworL14oPz1hKCpBQ0NFUFQpYikvCisgICAgYWMKKyAwOiAKKworLyg/PmFcS2IpLworICAgIGFiCisgMDogYgorCisvKCg/PmFcS2IpKS8KKyAgICBhYgorIDA6IGIKKyAxOiBhYgorCisvKGFcS2IpLworICAgIGFiCisgMDogYgorIDE6IGFiCisgICAgCisvXmFcS2N6fGFjLworICAgIGFjCisgMDogYWMKKyAgICAKKy8oPz5hXEtienxhYikvCisgICAgYWIgCisgMDogYWIKKworL14oPyZ0KSg/KERFRklORSkoPzx0PmFcS2IpKSQvCisgICAgYWIKKyAwOiBiCisKKy9eKFteKCldfFwoKD8xKSpcKSkqJC8KKyAgICBhKGIpYworIDA6IGEoYiljCisgMTogYworICAgIGEoYihjKWQpZSAKKyAwOiBhKGIoYylkKWUKKyAxOiBlCisKKy8oP1A8TDE+KD9QPEwyPjApKD9QPkwxKXwoP1A+TDIpKS8KKyAgICAwCisgMDogMAorIDE6IDAKKyAgICAwMAorIDA6IDAwCisgMTogMDAKKyAyOiAwCisgICAgMDAwMCAgCisgMDogMDAwMAorIDE6IDAwMDAKKyAyOiAwCisKKy8oP1A8TDE+KD9QPEwyPjApfCg/UD5MMikoP1A+TDEpKS8KKyAgICAwCisgMDogMAorIDE6IDAKKyAyOiAwCisgICAgMDAKKyAwOiAwCisgMTogMAorIDI6IDAKKyAgICAwMDAwICAKKyAwOiAwCisgMTogMAorIDI6IDAKKworIyBUaGlzIG9uZSBkb2VzIGZhaWwsIGFzIGV4cGVjdGVkLCBpbiBQZXJsLiBJdCBuZWVkcyB0aGUgY29tcGxleCBpdGVtIGF0IHRoZQorIyBlbmQgb2YgdGhlIHBhdHRlcm4uIEEgc2luZ2xlIGxldHRlciBpbnN0ZWFkIG9mIChCfEQpIG1ha2VzIGl0IG5vdCBmYWlsLCB3aGljaAorIyBJIHRoaW5rIGlzIGEgUGVybCBidWcuCisKKy9BKCpDT01NSVQpKEJ8RCkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQ0FCWAorTm8gbWF0Y2gKKworIyBDaGVjayB0aGUgdXNlIG9mIG5hbWVzIGZvciBmYWlsdXJlCisKKy9eKEEoKlBSVU5FOkEpQnxDKCpQUlVORTpCKUQpL21hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFDCitObyBtYXRjaCwgbWFyayA9IEEKKyAgICBDQiAgICAKK05vIG1hdGNoLCBtYXJrID0gQgorICAgIAorLygqTUFSSzpBKSgqU0tJUDpCKShDfFgpL21hcmsKKyAgICBDCisgMDogQworIDE6IEMKK01LOiBBCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBECitObyBtYXRjaCwgbWFyayA9IEEKKyAgICAgCisvXihBKCpUSEVOOkEpQnxDKCpUSEVOOkIpRCkvbWFyaworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQ0IgICAgCitObyBtYXRjaCwgbWFyayA9IEIKKworL14oPzpBKCpUSEVOOkEpQnxDKCpUSEVOOkIpRCkvbWFyaworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQ0IgICAgCitObyBtYXRjaCwgbWFyayA9IEIKKyAgICAKKy9eKD8+QSgqVEhFTjpBKUJ8QygqVEhFTjpCKUQpL21hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIENCICAgIAorTm8gbWF0Y2gsIG1hcmsgPSBCCisgICAgCisjIFRoaXMgc2hvdWxkIHN1Y2NlZWQsIGFzIHRoZSBza2lwIGNhdXNlcyBidW1wIHRvIG9mZnNldCAxICh0aGUgbWFyaykuIE5vdGUKKyMgdGhhdCB3ZSBoYXZlIHRvIGhhdmUgc29tZXRoaW5nIGNvbXBsaWNhdGVkIHN1Y2ggYXMgKEJ8WikgYXQgdGhlIGVuZCBiZWNhdXNlLAorIyBmb3IgUGVybCwgYSBzaW1wbGUgY2hhcmFjdGVyIHNvbWVob3cgY2F1c2VzIGFuIHVud2FudGVkIG9wdGltaXphdGlvbiB0byBtZXNzCisjIHdpdGggdGhlIGhhbmRsaW5nIG9mIGJhY2t0cmFja2luZyB2ZXJicy4KKworL0EoKk1BUks6QSlBKygqU0tJUDpBKShCfFopIHwgQUMveCxtYXJrCisgICAgQUFBQworIDA6IEFDCisgICAgCisjIFRlc3Qgc2tpcHBpbmcgb3ZlciBhIG5vbi1tYXRjaGluZyBtYXJrLgorCisvQSgqTUFSSzpBKUErKCpNQVJLOkIpKCpTS0lQOkEpKEJ8WikgfCBBQy94LG1hcmsKKyAgICBBQUFDCisgMDogQUMKKyAgICAKKyMgQ2hlY2sgc2hvcnRoYW5kIGZvciBNQVJLLgorCisvQSgqOkEpQSsoKlNLSVA6QSkoQnxaKSB8IEFDL3gsbWFyaworICAgIEFBQUMKKyAwOiBBQworCisvKCo6QSlBKygqU0tJUDpBKShCfFopL21hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFBQUMKK05vIG1hdGNoLCBtYXJrID0gQQorCisjIFRoaXMgc2hvdWxkIHN1Y2NlZWQsIGFzIGEgbm9uLWV4aXN0ZW50IHNraXAgbmFtZSBkaXNhYmxlcyB0aGUgc2tpcC4KKworL0EoKk1BUks6QSlBKygqU0tJUDpCKShCfFopIHwgQUMveCxtYXJrCisgICAgQUFBQworIDA6IEFDCisKKy9BKCpNQVJLOkEpQSsoKlNLSVA6QikoQnxaKSB8IEFDKCo6QikveCxtYXJrCisgICAgQUFBQworIDA6IEFDCitNSzogQgorCisjIENPTU1JVCBhdCB0aGUgc3RhcnQgb2YgYSBwYXR0ZXJuIHNob3VsZCBhY3QgbGlrZSBhbiBhbmNob3IuIEFnYWluLCBob3dldmVyLAorIyB3ZSBuZWVkIHRoZSBjb21wbGljYXRpb24gZm9yIFBlcmwuCisKKy8oKkNPTU1JVCkoQXxQKShCfFApKEN8UCkvCisgICAgQUJDREVGRworIDA6IEFCQworIDE6IEEKKyAyOiBCCisgMzogQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgREVGR0FCQyAgCitObyBtYXRjaAorCisjIENPTU1JVCBpbnNpZGUgYW4gYXRvbWljIGdyb3VwIGNhbid0IHN0b3AgYmFja3RyYWNraW5nIG92ZXIgdGhlIGdyb3VwLgorCisvKFx3KykoPz5iKCpDT01NSVQpKVx3ezJ9LworICAgIGFiYmIKKyAwOiBhYmJiCisgMTogYQorCisvKFx3KyliKCpDT01NSVQpXHd7Mn0vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmJiCitObyBtYXRjaAorCisjIENoZWNrIG9wZW5pbmcgcGFyZW5zIGluIGNvbW1lbnQgd2hlbiBzZWVraW5nIGZvcndhcmQgcmVmZXJlbmNlLgorCisvKD8mdCkoPyMoKSg/KERFRklORSkoPzx0PmEpKS8KKyAgICBiYWMKKyAwOiBhCisKKyMgQ09NTUlUIHNob3VsZCBvdmVycmlkZSBUSEVOLgorCisvKD8+KCpDT01NSVQpKD8+eWVzfG5vKSgqVEhFTikoKkYpKT8vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgeWVzCitObyBtYXRjaAorCisvKD8+KCpDT01NSVQpKHllc3xubykoKlRIRU4pKCpGKSk/LworXD0gRXhwZWN0IG5vIG1hdGNoCisgIHllcworTm8gbWF0Y2gKKworL2I/KCpTS0lQKWMvCisgICAgYmMKKyAwOiBiYworICAgIGFiYworIDA6IGJjCisgICAKKy8oKlNLSVApYmMvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCitObyBtYXRjaAorCisvKCpTS0lQKWIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhIAorTm8gbWF0Y2gKKworLyg/UDxhYm4+KD9QPWFibil4eHh8KSsvCisgICAgeHh4CisgMDogCisgMTogCisKKy8oP2k6KFteYl0pKSg/MSkvCisgICAgYWEKKyAwOiBhYQorIDE6IGEKKyAgICBhQSAgICAgCisgMDogYUEKKyAxOiBhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYgorTm8gbWF0Y2gKKyAgICBhQgorTm8gbWF0Y2gKKyAgICBCYQorTm8gbWF0Y2gKKyAgICBiYQorTm8gbWF0Y2gKKworL14oPyZ0KSorKD8oREVGSU5FKSg/PHQ+YSkpXHckLworICAgIGFhYWFhYVgKKyAwOiBhYWFhYWFYCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWFhYWFhIAorTm8gbWF0Y2gKKworL14oPyZ0KSooPyhERUZJTkUpKD88dD5hKSlcdyQvCisgICAgYWFhYWFhWAorIDA6IGFhYWFhYVgKKyAgICBhYWFhYWEgCisgMDogYWFhYWFhCisKKy9eKGEpKisoXHcpLworICAgIGFhYWFYCisgMDogYWFhYVgKKyAxOiBhCisgMjogWAorICAgIFlaIAorIDA6IFkKKyAxOiA8dW5zZXQ+CisgMjogWQorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFhYWEKK05vIG1hdGNoCisKKy9eKD86YSkqKyhcdykvCisgICAgYWFhYVgKKyAwOiBhYWFhWAorIDE6IFgKKyAgICBZWiAKKyAwOiBZCisgMTogWQorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFhYWEKK05vIG1hdGNoCisKKy9eKGEpKysoXHcpLworICAgIGFhYWFYCisgMDogYWFhYVgKKyAxOiBhCisgMjogWAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFhYWEKK05vIG1hdGNoCisgICAgWVogCitObyBtYXRjaAorCisvXig/OmEpKysoXHcpLworICAgIGFhYWFYCisgMDogYWFhYVgKKyAxOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWFhYQorTm8gbWF0Y2gKKyAgICBZWiAKK05vIG1hdGNoCisKKy9eKGEpPysoXHcpLworICAgIGFhYWFYCisgMDogYWEKKyAxOiBhCisgMjogYQorICAgIFlaIAorIDA6IFkKKyAxOiA8dW5zZXQ+CisgMjogWQorCisvXig/OmEpPysoXHcpLworICAgIGFhYWFYCisgMDogYWEKKyAxOiBhCisgICAgWVogCisgMDogWQorIDE6IFkKKworL14oYSl7Mix9KyhcdykvCisgICAgYWFhYVgKKyAwOiBhYWFhWAorIDE6IGEKKyAyOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWEKK05vIG1hdGNoCisgICAgWVogCitObyBtYXRjaAorCisvXig/OmEpezIsfSsoXHcpLworICAgIGFhYWFYCisgMDogYWFhYVgKKyAxOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWEKK05vIG1hdGNoCisgICAgWVogCitObyBtYXRjaAorCisvKGF8KSooPzEpYi8KKyAgICBiCisgMDogYgorIDE6IAorICAgIGFiCisgMDogYWIKKyAxOiAKKyAgICBhYWIgIAorIDA6IGFhYgorIDE6IAorCisvKGEpKysoPzEpYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiIAorTm8gbWF0Y2gKKyAgICBhYWIKK05vIG1hdGNoCisKKy8oYSkqKyg/MSliLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIKK05vIG1hdGNoCisgICAgYWFiICAKK05vIG1hdGNoCisKKy8oPzEpKD86KGIpKXswfS8KKyAgICBiCisgMDogYgorCisvKGZvbyAoIFwoICgoPzooPz4gW14oKV0rICl8KD8yKSkqKSBcKSApICkveAorICAgIGZvbyhiYXIoYmF6KStiYXooYm9wKSkKKyAwOiBmb28oYmFyKGJheikrYmF6KGJvcCkpCisgMTogZm9vKGJhcihiYXopK2Jheihib3ApKQorIDI6IChiYXIoYmF6KStiYXooYm9wKSkKKyAzOiBiYXIoYmF6KStiYXooYm9wKQorCisvKEEgKEF8QigqQUNDRVBUKXxDKSBEKShFKS94CisgICAgQUIKKyAwOiBBQgorIDE6IEFCCisgMjogQgorCisvXEEuKj8oYXxiYykvCisgICAgYmEKKyAwOiBiYQorIDE6IGEKKworL1xBLio/KD86YXxiYykrKy8KKyAgICBiYQorIDA6IGJhCisKKy9cQS4qPyhhfGJjKSsrLworICAgIGJhCisgMDogYmEKKyAxOiBhCisKKy9cQS4qPyg/OmF8YmN8ZCkvCisgICAgYmEKKyAwOiBiYQorCisvKD86KGIpKSsrLworICAgIGJlZXRsZQorIDA6IGIKKyAxOiBiCisKKy8oPyg/PShhKCpBQ0NFUFQpeikpYSkvCisgICAgYQorIDA6IGEKKyAxOiBhCisKKy9eKGEpKD8xKSthYi8KKyAgICBhYWFhYgorIDA6IGFhYWFiCisgMTogYQorICAgIAorL14oYSkoPzEpKythYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWFiCitObyBtYXRjaAorCisvXig/PWEoKjpNKSlhWi9tYXJrCisgICAgYVpiYworIDA6IGFaCitNSzogTQorCisvXig/ISgqOk0pYilhWi9tYXJrCisgICAgYVpiYworIDA6IGFaCisKKy8oPyhERUZJTkUpKGEpKT9iKD8xKS8KKyAgICBiYWNrZ2FtbW9uCisgMDogYmEKKworL15cTisvCisgICAgYWJjXG5kZWYKKyAwOiBhYmMKKyAgICAKKy9eXE57MSx9LworICAgIGFiY1xuZGVmIAorIDA6IGFiYworCisvKD8oUilhK3woP1IpYikvCisgICAgYWFhYWJjZGUKKyAwOiBhYWFhYgorCisvKD8oUilhK3woKD9SKSliKS8KKyAgICBhYWFhYmNkZQorIDA6IGFhYWFiCisgMTogYWFhYQorCisvKCg/KFIpYSt8KD8xKWIpKS8KKyAgICBhYWFhYmNkZQorIDA6IGFhYWFiCisgMTogYWFhYWIKKworLygoPyhSMSlhK3woPzEpYikpLworICAgIGFhYWFiY2RlCisgMDogYWFhYWIKKyAxOiBhYWFhYgorICAgIAorLygoPyhSKWF8KD8xKSkpKi8KKyAgICBhYWEKKyAwOiBhYWEKKyAxOiBhCisKKy8oKD8oUilhfCg/MSkpKSsvCisgICAgYWFhIAorIDA6IGFhYQorIDE6IGEKKworL2EoKjphbnkgCituYW1lKS9tYXJrCisgICAgYWJjCisgMDogYQorTUs6IGFueSBceDBhbmFtZQorICAgIAorLyg/Pig/JnQpY3woPyZ0KSkoPyhERUZJTkUpKD88dD5hfGIoKlBSVU5FKWMpKS8KKyAgICBhCisgMDogYQorICAgIGJhCisgMDogYQorICAgIGJiYSAKKyAwOiBhCisgICAgCisjIENoZWNraW5nIHJldmlzZWQgKCpUSEVOKSBoYW5kbGluZy4KKworIyBDYXB0dXJlCisKKy9eLio/IChhKCpUSEVOKWIpIGMveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFiYworTm8gbWF0Y2gKKworL14uKj8gKGEoKlRIRU4pYnwoKkYpKSBjL3gKKyAgICBhYWJjCisgMDogYWFiYworIDE6IGFiCisKKy9eLio/ICggKGEoKlRIRU4pYikgfCAoKkYpICkgYy94CisgICAgYWFiYworIDA6IGFhYmMKKyAxOiBhYgorIDI6IGFiCisKKy9eLio/ICggKGEoKlRIRU4pYikgKSBjL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKK05vIG1hdGNoCisKKyMgTm9uLWNhcHR1cmUKKworL14uKj8gKD86YSgqVEhFTiliKSBjL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKK05vIG1hdGNoCisKKy9eLio/ICg/OmEoKlRIRU4pYnwoKkYpKSBjL3gKKyAgICBhYWJjCisgMDogYWFiYworCisvXi4qPyAoPzogKD86YSgqVEhFTiliKSB8ICgqRikgKSBjL3gKKyAgICBhYWJjCisgMDogYWFiYworCisvXi4qPyAoPzogKD86YSgqVEhFTiliKSApIGMveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFiYworTm8gbWF0Y2gKKworIyBBdG9taWMKKworL14uKj8gKD8+YSgqVEhFTiliKSBjL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKK05vIG1hdGNoCisKKy9eLio/ICg/PmEoKlRIRU4pYnwoKkYpKSBjL3gKKyAgICBhYWJjCisgMDogYWFiYworCisvXi4qPyAoPz4gKD8+YSgqVEhFTiliKSB8ICgqRikgKSBjL3gKKyAgICBhYWJjCisgMDogYWFiYworCisvXi4qPyAoPz4gKD8+YSgqVEhFTiliKSApIGMveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFiYworTm8gbWF0Y2gKKworIyBQb3NzZXNzaXZlIGNhcHR1cmUKKworL14uKj8gKGEoKlRIRU4pYikrKyBjL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKK05vIG1hdGNoCisKKy9eLio/IChhKCpUSEVOKWJ8KCpGKSkrKyBjL3gKKyAgICBhYWJjCisgMDogYWFiYworIDE6IGFiCisKKy9eLio/ICggKGEoKlRIRU4pYikrKyB8ICgqRikgKSsrIGMveAorICAgIGFhYmMKKyAwOiBhYWJjCisgMTogYWIKKyAyOiBhYgorCisvXi4qPyAoIChhKCpUSEVOKWIpKysgKSsrIGMveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFiYworTm8gbWF0Y2gKKworIyBQb3NzZXNzaXZlIG5vbi1jYXB0dXJlCisKKy9eLio/ICg/OmEoKlRIRU4pYikrKyBjL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKK05vIG1hdGNoCisKKy9eLio/ICg/OmEoKlRIRU4pYnwoKkYpKSsrIGMveAorICAgIGFhYmMKKyAwOiBhYWJjCisKKy9eLio/ICg/OiAoPzphKCpUSEVOKWIpKysgfCAoKkYpICkrKyBjL3gKKyAgICBhYWJjCisgMDogYWFiYworCisvXi4qPyAoPzogKD86YSgqVEhFTiliKSsrICkrKyBjL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYmMKK05vIG1hdGNoCisgICAgCisjIENvbmRpdGlvbiBhc3NlcnRpb24KKworL14oPyg/PWEoKlRIRU4pYilhYnxhYykvCisgICAgYWMKKyAwOiBhYworIAorIyBDb25kaXRpb24KKworL14uKj8oPyg/PWEpYXxiKCpUSEVOKWMpLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmEKK05vIG1hdGNoCisKKy9eLio/KD86KD8oPz1hKWF8YigqVEhFTiljKXxkKS8KKyAgICBiYQorIDA6IGJhCisKKy9eLio/KD8oPz1hKWEoKlRIRU4pYnxjKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFjCitObyBtYXRjaAorCisjIEFzc2VydGlvbgorCisvXi4qKD89YSgqVEhFTiliKS8KKyAgICBhYWJjCisgMDogYQorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oPz5hKCo6bSkpL2ltc3gsbWFyaworICAgIGEKKyAwOiBhCitNSzogbQorCisvKD8+KGEpKCo6bSkpL2ltc3gsbWFyaworICAgIGEKKyAwOiBhCisgMTogYQorTUs6IG0KKworLyg/PD1hKCpBQ0NFUFQpYiljLworICAgIHhhY2QKKyAwOiBjCisKKy8oPzw9KGEoKkFDQ0VQVCliKSljLworICAgIHhhY2QKKyAwOiBjCisgMTogYQorCisvKD88PShhKCpDT01NSVQpYikpYy8KKyAgICB4YWJjZAorIDA6IGMKKyAxOiBhYgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIHhhY2QKK05vIG1hdGNoCisgICAgCisvKD88IWEoKkZBSUwpYiljLworICAgIHhjZAorIDA6IGMKKyAgICBhY2QgCisgMDogYworCisvKD88PWEoKjpOKWIpYy9tYXJrCisgICAgeGFiY2QKKyAwOiBjCitNSzogTgorICAgIAorLyg/PD1hKCpQUlVORSliKWMvCisgICAgeGFiY2QgCisgMDogYworCisvKD88PWEoKlNLSVApYiljLworICAgIHhhYmNkIAorIDA6IGMKKworLyg/PD1hKCpUSEVOKWIpYy8KKyAgICB4YWJjZCAKKyAwOiBjCisKKy8oYSkoPzIpezJ9KC4pLworICAgIGFiY2QKKyAwOiBhYmNkCisgMTogYQorIDI6IGQKKworLygqTUFSSzpBKSgqUFJVTkU6QikoQ3xYKS9tYXJrCisgICAgQworIDA6IEMKKyAxOiBDCitNSzogQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgRCAKK05vIG1hdGNoLCBtYXJrID0gQgorCisvKCpNQVJLOkEpKCpQUlVORTpCKShDfFgpL21hcmsKKyAgICBDCisgMDogQworIDE6IEMKK01LOiBCCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBEIAorTm8gbWF0Y2gsIG1hcmsgPSBCCisKKy8oKk1BUks6QSkoKlRIRU46QikoQ3xYKS9tYXJrCisgICAgQworIDA6IEMKKyAxOiBDCitNSzogQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgRCAKK05vIG1hdGNoLCBtYXJrID0gQgorCisvKCpNQVJLOkEpKCpUSEVOOkIpKEN8WCkvbWFyayxub19zdGFydF9vcHRpbWl6ZQorICAgIEMKKyAwOiBDCisgMTogQworTUs6IEIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEQgCitObyBtYXRjaCwgbWFyayA9IEIKKworLygqTUFSSzpBKSgqVEhFTjpCKShDfFgpL21hcmsKKyAgICBDCisgMDogQworIDE6IEMKK01LOiBCCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBEIAorTm8gbWF0Y2gsIG1hcmsgPSBCCisKKyMgVGhpcyBzaG91bGQgZmFpbCwgYXMgdGhlIHNraXAgY2F1c2VzIGEgYnVtcCB0byBvZmZzZXQgMyAodGhlIHNraXApLgorCisvQSgqTUFSSzpBKUErKCpTS0lQKShCfFopIHwgQUMveCxtYXJrCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQUFDCitObyBtYXRjaCwgbWFyayA9IEEKKworIyBTYW1lIAorCisvQSgqTUFSSzpBKUErKCpNQVJLOkIpKCpTS0lQOkIpKEJ8WikgfCBBQy94LG1hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFBQUMKK05vIG1hdGNoLCBtYXJrID0gQgorCisvQSgqOkEpQSsoKlNLSVApKEJ8WikgfCBBQy94LG1hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFBQUMKK05vIG1hdGNoLCBtYXJrID0gQQorCisjIFRoaXMgc2hvdWxkIGZhaWwsIGFzIGEgbnVsbCBuYW1lIGlzIHRoZSBzYW1lIGFzIG5vIG5hbWUuCisKKy9BKCpNQVJLOkEpQSsoKlNLSVA6KShCfFopIHwgQUMveCxtYXJrCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQUFDCitObyBtYXRjaCwgbWFyayA9IEEKKworIyBBIGNoZWNrIG9uIHdoYXQgaGFwcGVucyBhZnRlciBoaXR0aW5nIGEgbWFyayBhbmQgdGhlbSBidW1waW5nIGFsb25nIHRvCisjIHNvbWV0aGluZyB0aGF0IGRvZXMgbm90IGV2ZW4gc3RhcnQuIFBlcmwgcmVwb3J0cyB0YWdzIGFmdGVyIHRoZSBmYWlsdXJlcworIyBoZXJlLCB0aG91Z2ggaXQgZG9lcyBub3Qgd2hlbiB0aGUgaW5kaXZpZHVhbCBsZXR0ZXJzIGFyZSBtYWRlIGludG8gc29tZXRoaW5nCisjIG1vcmUgY29tcGxpY2F0ZWQuCisKKy9BKCo6QSlCfFhYKCo6QilZL21hcmsKKyAgICBBQUJDCisgMDogQUIKK01LOiBBCisgICAgWFhZWiAKKyAwOiBYWFkKK01LOiBCCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYQVFRICAKK05vIG1hdGNoLCBtYXJrID0gQQorICAgIFhBUVFYWlogIAorTm8gbWF0Y2gsIG1hcmsgPSBBCisgICAgQVhRUVEgCitObyBtYXRjaCwgbWFyayA9IEEKKyAgICBBWFhRUVEgCitObyBtYXRjaCwgbWFyayA9IEIKKyAgICAKKy9eKEEoKlRIRU46QSlCfEMoKlRIRU46QilEKS9tYXJrCisgICAgQUIKKyAwOiBBQgorIDE6IEFCCitNSzogQQorICAgIENECisgMDogQ0QKKyAxOiBDRAorTUs6IEIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFDCitObyBtYXRjaCwgbWFyayA9IEEKKyAgICBDQiAgICAKK05vIG1hdGNoLCBtYXJrID0gQgorICAgIAorL14oQSgqUFJVTkU6QSlCfEMoKlBSVU5FOkIpRCkvbWFyaworICAgIEFCCisgMDogQUIKKyAxOiBBQgorTUs6IEEKKyAgICBDRAorIDA6IENECisgMTogQ0QKK01LOiBCCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQworTm8gbWF0Y2gsIG1hcmsgPSBBCisgICAgQ0IgICAgCitObyBtYXRjaCwgbWFyayA9IEIKKyAgICAKKyMgQW4gZW1wdHkgbmFtZSBkb2VzIG5vdCBwYXNzIGJhY2sgYW4gZW1wdHkgc3RyaW5nLiBJdCBpcyB0aGUgc2FtZSBhcyBpZiBubworIyBuYW1lIHdlcmUgZ2l2ZW4uCisKKy9eKEEoKlBSVU5FOilCfEMoKlBSVU5FOkIpRCkvbWFyaworICAgIEFCCisgMDogQUIKKyAxOiBBQgorICAgIENEIAorIDA6IENECisgMTogQ0QKK01LOiBCCisKKyMgUFJVTkUgZ29lcyB0byBuZXh0IGJ1bXBhbG9uZzsgQ09NTUlUIGRvZXMgbm90LgorICAgIAorL0EoKlBSVU5FOkEpQi9tYXJrCisgICAgQUNBQgorIDA6IEFCCitNSzogQQorCisjIE1hcmsgbmFtZXMgY2FuIGJlIGR1cGxpY2F0ZWQuCisKKy9BKCo6QSlCfFgoKjpBKVkvbWFyaworICAgIEFBQkMKKyAwOiBBQgorTUs6IEEKKyAgICBYWFlaIAorIDA6IFhZCitNSzogQQorICAgIAorL2IoKjptKWZ8YSgqOm4pdy9tYXJrCisgICAgYXcgCisgMDogYXcKK01LOiBuCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWJjCitObyBtYXRjaCwgbWFyayA9IG0KKworL2IoKjptKWZ8YXcvbWFyaworICAgIGFiYXcKKyAwOiBhdworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiYworTm8gbWF0Y2gsIG1hcmsgPSBtCisgICAgYWJheCAKK05vIG1hdGNoLCBtYXJrID0gbQorCisvQSgqTUFSSzpBKUErKCpTS0lQOkIpKEJ8WikgfCBBQUMveCxtYXJrCisgICAgQUFBQworIDA6IEFBQworCisvYSgqUFJVTkU6WCliY3xxcS9tYXJrLG5vX3N0YXJ0X29wdGltaXplCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBheHkKK05vIG1hdGNoLCBtYXJrID0gWAorCisvYSgqVEhFTjpYKWJjfHFxL21hcmssbm9fc3RhcnRfb3B0aW1pemUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGF4eQorTm8gbWF0Y2gsIG1hcmsgPSBYCisKKy8oPz1hKCpNQVJLOkEpYikuLngvbWFyaworICAgIGFieHkKKyAwOiBhYngKK01LOiBBCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYnBxICAKK05vIG1hdGNoCisKKy8oPz1hKCpNQVJLOkEpYikuLigqOlkpeC9tYXJrCisgICAgYWJ4eQorIDA6IGFieAorTUs6IFkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFicHEgIAorTm8gbWF0Y2gKKworLyg/PWEoKlBSVU5FOkEpYikuLngvbWFyaworICAgIGFieHkKKyAwOiBhYngKK01LOiBBCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYnBxICAKK05vIG1hdGNoCisKKy8oPz1hKCpQUlVORTpBKWIpLi4oKjpZKXgvbWFyaworICAgIGFieHkKKyAwOiBhYngKK01LOiBZCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYnBxICAKK05vIG1hdGNoCisKKy8oPz1hKCpUSEVOOkEpYikuLngvbWFyaworICAgIGFieHkKKyAwOiBhYngKK01LOiBBCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYnBxICAKK05vIG1hdGNoCisKKy8oPz1hKCpUSEVOOkEpYikuLigqOlkpeC9tYXJrCisgICAgYWJ4eQorIDA6IGFieAorTUs6IFkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFicHEgIAorTm8gbWF0Y2gKKworLyhhbm90aGVyKT8oXDE/KXRlc3QvCisgICAgaGVsbG8gd29ybGQgdGVzdAorIDA6IHRlc3QKKyAxOiA8dW5zZXQ+CisgMjogCisKKy8oYW5vdGhlcik/KFwxKyl0ZXN0LworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgaGVsbG8gd29ybGQgdGVzdAorTm8gbWF0Y2gKKworLyhhKCpDT01NSVQpYil7MH1hKD8xKXxhYWMvCisgICAgYWFjCisgMDogYWFjCisKKy8oKD86YT8pKikqYy8KKyAgICBhYWMgICAKKyAwOiBhYWMKKyAxOiAKKworLygoPz5hPykqKSpjLworICAgIGFhYyAgIAorIDA6IGFhYworIDE6IAorCisvKD8+Lio/YSkoPzw9YmEpLworICAgIGFiYQorIDA6IGJhCisKKy8oPzouKj9hKSg/PD1iYSkvCisgICAgYWJhCisgMDogYWJhCisKKy8oPz4uKj9hKWIvcworICAgIGFhYgorIDA6IGFiCisKKy8oPz4uKj9hKWIvCisgICAgYWFiCisgMDogYWIKKworLyg/Pl5hKWIvcworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFiCitObyBtYXRjaAorCisvKD8+Lio/KSg/PD0oYWJjZCl8KHd4eXopKS8KKyAgICBhbHBoYWJldGFiY2QKKyAwOiAKKyAxOiBhYmNkCisgICAgZW5kaW5nd3h5eiAKKyAwOiAKKyAxOiA8dW5zZXQ+CisgMjogd3h5egorCisvKD8+LiopKD88PShhYmNkKXwod3h5eikpLworICAgIGFscGhhYmV0YWJjZAorIDA6IGFscGhhYmV0YWJjZAorIDE6IGFiY2QKKyAgICBlbmRpbmd3eHl6IAorIDA6IGVuZGluZ3d4eXoKKyAxOiA8dW5zZXQ+CisgMjogd3h5egorCisiKD8+LiopZm9vIgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGZvb3h5egorTm8gbWF0Y2gKKyAgICAKKyIoPz4uKj8pZm9vIgorICAgIGFiY2Rmb294eXoKKyAwOiBmb28KKworLyg/OihhKCpQUlVORSliKSl7MH0oPzooPzEpfGFjKS8KKyAgICBhYworIDA6IGFjCisgICAgCisvKD86KGEoKlNLSVApYikpezB9KD86KD8xKXxhYykvCisgICAgYWMgCisgMDogYWMKKworLyg/PD0oKlNLSVApYWMpYS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhCitObyBtYXRjaAorCisvQSgqTUFSSzpBKUErKCpTS0lQOkIpKEJ8WikgfCBBQy94LG1hcmsKKyAgICBBQUFDCisgMDogQUMKKworL2EoKlNLSVA6bSl4fGFjKCo6bikoKlNLSVA6bilkfGFjL21hcmsKKyAgICBhY2FjZAorIDA6IGFjZAorTUs6IG4KKworL0EoKlNLSVA6bSl4fEEoKlNLSVA6bil4fEFCL21hcmsKKyAgICBBQgorIDA6IEFCCisKKy8oKCpTS0lQOnIpZCl7MH1hKCpTS0lQOm0peHxhYygqOm4pfGFjL21hcmsKKyAgICBhY2FjZAorIDA6IGFjCitNSzogbgorCisjIFRlc3RzIHRoYXQgdHJ5IHRvIGZpZ3VyZSBvdXQgaG93IFBlcmwgd29ya3MuIE15IGh5cG90aGVzaXMgaXMgdGhhdCB0aGUgZmlyc3QKKyMgdmVyYiB0aGF0IGlzIGJhY2t0cmFja2VkIG9udG8gaXMgdGhlIG9uZSB0aGF0IGFjdHMuIFRoaXMgc2VlbXMgdG8gYmUgdGhlIGNhc2UKKyMgYWxtb3N0IGFsbCB0aGUgdGltZSwgYnV0IHRoZXJlIGlzIG9uZSBleGNlcHRpb24gdGhhdCBpcyBwZXJoYXBzIGEgYnVnLgorCisjIFRoaXMgbWF0Y2hlcyAiYWFhYWMiOyBlYWNoIFBSVU5FIGFkdmFuY2VzIG9uZSBjaGFyYWN0ZXIgdW50aWwgdGhlIHN1YmplY3Qgbm8KKyMgbG9uZ2VyIHN0YXJ0cyB3aXRoIDUgJ2Ency4KKworL2FhYWFhKCpQUlVORSlifGErYy8KKyAgICBhYWFhYWFjCisgMDogYWFhYWMKKworIyBQdXR0aW5nIFNLSVAgaW4gZnJvbnQgb2YgUFJVTkUgbWFrZXMgbm8gZGlmZmVyZW5jZSwgYXMgaXQgaXMgbmV2ZXIKKyMgYmFja3RyYWNrZWQgb250bywgd2hldGhlciBvciBub3QgaXQgaGFzIGEgbGFiZWwuCisKKy9hYWFhYSgqU0tJUCkoKlBSVU5FKWJ8YStjLworICAgIGFhYWFhYWMKKyAwOiBhYWFhYworCisvYWFhYWEoKlNLSVA6TikoKlBSVU5FKWJ8YStjLworICAgIGFhYWFhYWMKKyAwOiBhYWFhYworCisvYWFhYSgqOk4pYSgqU0tJUDpOKSgqUFJVTkUpYnxhK2MvCisgICAgYWFhYWFhYworIDA6IGFhYWFjCisKKyMgUHV0dGluZyBUSEVOIGluIGZyb250IG1ha2VzIG5vIGRpZmZlcmVuY2UuCisgICAgCisvYWFhYWEoKlRIRU4pKCpQUlVORSlifGErYy8KKyAgICBhYWFhYWFjCisgMDogYWFhYWMKKyAKKyMgSG93ZXZlciwgcHV0dGluZyBDT01NSVQgaW4gZnJvbnQgb2YgdGhlIHBydW5lIGNoYW5nZXMgaXQgdG8gIm5vIG1hdGNoIi4gSSAKKyMgdGhpbmsgdGhpcyBpcyBpbmNvbnNpc3RlbnQgYW5kIHBvc3NpYmx5IGEgYnVnLiBGb3IgdGhlIG1vbWVudCwgcnVubmluZyB0aGlzCisjIHRlc3QgaXMgbW92ZWQgb3V0IG9mIHRoZSBQZXJsLWNvbXBhdGlibGUgZmlsZS4gCisKKy9hYWFhYSgqQ09NTUlUKSgqUFJVTkUpYnxhK2MvCisgICAgCisjIE9LLCBsZXRzIHBsYXkgdGhlIHNhbWUgZ2FtZSBhZ2FpbiB1c2luZyBTS0lQIGluc3RlYWQgb2YgUFJVTkUuCisKKyMgVGhpcyBtYXRjaGVzICJhYyIgYmVjYXVzZSBTS0lQIGZvcmNlcyB0aGUgbmV4dCBtYXRjaCB0byBzdGFydCBvbiB0aGUKKyMgc2l4dGggImEiLiAKKworL2FhYWFhKCpTS0lQKWJ8YStjLworICAgIGFhYWFhYWMKKyAwOiBhYworIAorIyBQdXR0aW5nIFBSVU5FIGluIGZyb250IG1ha2VzIG5vIGRpZmZlcmVuY2UuIAorCisvYWFhYWEoKlBSVU5FKSgqU0tJUClifGErYy8KKyAgICBhYWFhYWFjCisgMDogYWMKKworIyBQdXR0aW5nIFRIRU4gaW4gZnJvbnQgbWFrZXMgbm8gZGlmZmVyZW5jZS4gCisKKy9hYWFhYSgqVEhFTikoKlNLSVApYnxhK2MvCisgICAgYWFhYWFhYworIDA6IGFjCisKKyMgSW4gdGhpcyBjYXNlLCBuZWl0aGVyIGRvZXMgQ09NTUlULiBUaGlzIHN0aWxsIG1hdGNoZXMgImFjIi4gCisKKy9hYWFhYSgqQ09NTUlUKSgqU0tJUClifGErYy8KKyAgICBhYWFhYWFjCisgMDogYWMKKyAgICAKKyMgVGhpcyBnaXZlcyAibm8gbWF0Y2giLCBhcyBleHBlY3RlZC4gCisKKy9hYWFhYSgqQ09NTUlUKWJ8YStjLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYWFhYworTm8gbWF0Y2gKKworIyAtLS0tIFRlc3RzIHVzaW5nIFRIRU4gLS0tLQorCisjIFRoaXMgbWF0Y2hlcyAiYWFhYWFhYyIsIGFzIGV4cGVjdGVkLiAKKworL2FhYWFhKCpUSEVOKWJ8YStjLworICAgIGFhYWFhYWMKKyAwOiBhYWFhYWFjCisKKyMgUHV0dGluZyBTS0lQIGluIGZyb250IG1ha2VzIG5vIGRpZmZlcmVuY2UuIAorCisvYWFhYWEoKlNLSVApKCpUSEVOKWJ8YStjLworICAgIGFhYWFhYWMKKyAwOiBhYWFhYWFjCisgICAgCisjIFB1dHRpbmcgUFJVTkUgaW4gZnJvbnQgbWFrZXMgbm8gZGlmZmVyZW5jZS4gCisKKy9hYWFhYSgqUFJVTkUpKCpUSEVOKWJ8YStjLworICAgIGFhYWFhYWMKKyAwOiBhYWFhYWFjCisgICAgCisjIFB1dHRpbmcgQ09NTUlUIGluIGZyb250IG1ha2VzIG5vIGRpZmZlcmVuY2UuIAorCisvYWFhYWEoKkNPTU1JVCkoKlRIRU4pYnxhK2MvCisgICAgYWFhYWFhYworIDA6IGFhYWFhYWMKKyAgICAKKyMgRW5kIG9mICJwcmlvcml0eSIgdGVzdHMgIAorCisvYWFhYWEoKjptKSgqUFJVTkU6bSkoKlNLSVA6bSltfGErLworICAgIGFhYWFhYQorIDA6IGEKKworL2FhYWFhKCo6bSkoKk1BUks6bSkoKlBSVU5FKSgqU0tJUDptKW18YSsvCisgICAgYWFhYWFhCisgMDogYQorCisvYWFhYWEoKjpuKSgqUFJVTkU6bSkoKlNLSVA6bSltfGErLworICAgIGFhYWFhYQorIDA6IGFhYWEKKworL2FhYWFhKCo6bikoKk1BUks6bSkoKlBSVU5FKSgqU0tJUDptKW18YSsvCisgICAgYWFhYWFhCisgMDogYQorCisvYSgqTUFSSzpBKWFhKCpQUlVORTpBKWEoKlNLSVA6QSlifGErYy8KKyAgICBhYWFhYworIDA6IGFhYworCisvYSgqTUFSSzpBKWFhKCpNQVJLOkEpYSgqU0tJUDpBKWJ8YStjLworICAgIGFhYWFjCisgMDogYWMKKworL2FhYSgqUFJVTkU6QSlhKCpTS0lQOkEpYnxhK2MvCisgICAgYWFhYWMKKyAwOiBhYWMKKworL2FhYSgqTUFSSzpBKWEoKlNLSVA6QSlifGErYy8KKyAgICBhYWFhYworIDA6IGFjCisKKy9hKCo6bSlhKCpDT01NSVQpKCpTS0lQOm0pYnxhK2MvbWFyaworICAgIGFhYWFhYWMKKyAwOiBhYworCisvLj8oYXxiKCpUSEVOKWMpLworICAgIGJhCisgMDogYmEKKyAxOiBhCisKKy8oYSgqQ09NTUlUKWIpY3xhYmQvCisgICAgYWJjCisgMDogYWJjCisgMTogYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiZAorTm8gbWF0Y2gKKworLyg/PWEoKkNPTU1JVCliKWFiY3xhYmQvCisgICAgYWJjCisgMDogYWJjCisgICAgYWJkCisgMDogYWJkCisKKy8oPz5hKCpDT01NSVQpYiljfGFiZC8KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBhYmQKKyAwOiBhYmQKKworL2EoPz1iKCpDT01NSVQpYylbXmRdfGFiZC8KKyAgICBhYmMKKyAwOiBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJkCitObyBtYXRjaAorCisvYSg/PWJjKS58YWJkLworICAgIGFiZAorIDA6IGFiZAorICAgIGFiYyAKKyAwOiBhYgorICAgIAorL2EoPz5iKCpDT01NSVQpYylkfGFiZC8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2VhYmQgCitObyBtYXRjaAorCisvYSg/PmJjKWR8YWJkLworICAgIGFiY2VhYmQgCisgMDogYWJkCisKKy8oPz5hKCpDT01NSVQpYiljfGFiZC8KKyAgICBhYmQKKyAwOiBhYmQKKworLyg/PmEoKkNPTU1JVCljKWR8YWJkLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJkCitObyBtYXRjaAorCisvKCg/PWEoKkNPTU1JVCliKWFifGFjKXswfSg/Oig/MSl8YShjKSkvCisgICAgYWMgCisgMDogYWMKKyAxOiA8dW5zZXQ+CisgMjogYworICAgIAorIyBUaGVzZSB0ZXN0cyB3ZXJlIGZvcm1lcmx5IGluIHRlc3QgMiwgYnV0IGNoYW5nZXMgaW4gUENSRSBhbmQgUGVybCBoYXZlCisjIG1hZGUgdGhlbSBjb21wYXRpYmxlLiAKKyAgICAKKy9eKGEpPyg/KDEpYXxiKSskLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorTm8gbWF0Y2gKKworLyg/PWFcS2IpYWIvCisgICAgYWIgCisgMDogYgorCisvKD8hYVxLYilhYy8KKyAgICBhYyAKKyAwOiBhYworICAgIAorL15hYmMoPzw9YlxLYylkLworICAgIGFiY2QKKyAwOiBjZAorCisvXmFiYyg/PCFiXEtxKWQvCisgICAgYWJjZAorIDA6IGFiY2QKKworL0EoKlBSVU5FOkEpQSsoKlNLSVA6QSkoQnxaKSB8IEFDL3gsbWFyaworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUFBQworTm8gbWF0Y2gsIG1hcmsgPSBBCisKKy9eKChhYmN8YWJjeCkoKlRIRU4peXxhYmNkKS8KKyAgICBhYmNkCisgMDogYWJjZAorIDE6IGFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYmN4eSAKK05vIG1hdGNoCisgICAgCisvXigoeWVzfG5vKSgqVEhFTikoKkYpKT8vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB5ZXMKK05vIG1hdGNoCisKKy8oQSAoLiopICAgQz8gKCpUSEVOKSAgfCBBIEQpICgqRkFJTCkveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWJjZENCZWZnQmhpQnF6CitObyBtYXRjaAorCisvKEEgKC4qKSAgIEM/ICgqVEhFTikgIHwgQSBEKSB6L3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiY2RDQmVmZ0JoaUJxegorTm8gbWF0Y2gKKworLyhBICguKikgICBDPyAoKlRIRU4pICB8IEEgRCkgXHMqICgqRkFJTCkveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWJjZENCZWZnQmhpQnF6CitObyBtYXRjaAorCisvKEEgKC4qKSAgIEM/ICgqVEhFTikgIHwgQSBEKSBccyogei94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYmNkQ0JlZmdCaGlCcXoKK05vIG1hdGNoCisKKy8oQSAoLiopICAgKD86Q3wpICgqVEhFTikgIHwgQSBEKSAoKkZBSUwpL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiY2RDQmVmZ0JoaUJxegorTm8gbWF0Y2gKKworLyhBICguKikgICAoPzpDfCkgKCpUSEVOKSAgfCBBIEQpIHoveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWJjZENCZWZnQmhpQnF6CitObyBtYXRjaAorCisvKEEgKC4qKSAgIEN7MCw2fSAoKlRIRU4pICB8IEEgRCkgKCpGQUlMKS94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYmNkQ0JlZmdCaGlCcXoKK05vIG1hdGNoCisKKy8oQSAoLiopICAgQ3swLDZ9ICgqVEhFTikgIHwgQSBEKSB6L3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiY2RDQmVmZ0JoaUJxegorTm8gbWF0Y2gKKworLyhBICguKikgICAoQ0UpezAsNn0gKCpUSEVOKSAgfCBBIEQpICgqRkFJTCkveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWJjZENFQmVmZ0JoaUJxegorTm8gbWF0Y2gKKworLyhBICguKikgICAoQ0UpezAsNn0gKCpUSEVOKSAgfCBBIEQpIHoveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWJjZENFQmVmZ0JoaUJxegorTm8gbWF0Y2gKKworLyhBICguKikgICAoQ0UqKXswLDZ9ICgqVEhFTikgIHwgQSBEKSAoKkZBSUwpL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiY2RDQmVmZ0JoaUJxegorTm8gbWF0Y2gKKworLyhBICguKikgICAoQ0UqKXswLDZ9ICgqVEhFTikgIHwgQSBEKSB6L3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFiY2RDQmVmZ0JoaUJxegorTm8gbWF0Y2gKKworLyg/PWEoKkNPTU1JVClifGFjKWFjfGFjLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWMKK05vIG1hdGNoCisKKy8oPz1hKCpDT01NSVQpYnwoYWMpKSBhYyB8IChhKWMveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWMKK05vIG1hdGNoCisKKyMgLS0tLQorCisvKD8oPyFiKCpUSEVOKWEpYm58Ym5uKS8KKyAgICBibm4gCisgMDogYm4KKworLyg/IWIoKlNLSVApYSlibnxibm4vCisgICAgYm5uCisgMDogYm4KKyAgICAKKy8oPyg/IWIoKlNLSVApYSlibnxibm4pLworICAgIGJubiAKKyAwOiBibgorCisvKD8hYigqUFJVTkUpYSlibnxibm4vCisgICAgYm5uCisgMDogYm4KKyAgICAKKy8oPyg/IWIoKlBSVU5FKWEpYm58Ym5uKS8KKyAgICBibm4gCisgMDogYm4KKyAgIAorLyg/IWIoKkNPTU1JVClhKWJufGJubi8KKyAgICBibm4KKyAwOiBibgorICAgIAorLyg/KD8hYigqQ09NTUlUKWEpYm58Ym5uKS8KKyAgIGJubiAKKyAwOiBibgorCisvKD89YigqU0tJUClhKWJufGJubi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJubgorTm8gbWF0Y2gKKworLyg/PWIoKlRIRU4pYSlibnxibm4vCisgICAgYm5uCisgMDogYm5uCisgICAgCisvXig/IWEoKlNLSVApYikvCisgICAgYWMKKyAwOiAKKworL14oPyFhKCpTS0lQKWIpLi4vCisgICAgYWNkCisgMDogYWMKKworLyg/IWEoKlNLSVApYikuLi8KKyAgICBhY2QKKyAwOiBhYworCisvXig/KD8hYSgqU0tJUCliKSkvCisgICAgYWMKKyAwOiAKKworL14oPyFhKCpQUlVORSliKS4uLworICAgIGFjZAorIDA6IGFjCisKKy8oPyFhKCpQUlVORSliKS4uLworICAgIGFjZAorIDA6IGFjCisKKy8oPyFhKCpDT01NSVQpYilhY3xjZC8KKyAgICBhYworIDA6IGFjCisKKy9cQS4qPyg/OmF8YmMpLworICAgIGJhCisgMDogYmEKKworL14oQSgqVEhFTilCfEMoKlRIRU4pRCkvCisgICAgQ0QgICAgICAgICAgIAorIDA6IENECisgMTogQ0QKKworLygqOm0obSkoPyZ5KSg/KERFRklORSkoPzx5PmIpKS9tYXJrCisgICAgYWJjCisgMDogYgorTUs6IG0obQorCisvKCpQUlVORTptKG0pKD8meSkoPyhERUZJTkUpKD88eT5iKSkvbWFyaworICAgIGFiYworIDA6IGIKK01LOiBtKG0KKworLygqU0tJUDptKG0pKD8meSkoPyhERUZJTkUpKD88eT5iKSkvbWFyaworICAgIGFiYworIDA6IGIKKworLygqVEhFTjptKG0pKD8meSkoPyhERUZJTkUpKD88eT5iKSkvbWFyaworICAgIGFiYworIDA6IGIKK01LOiBtKG0KKworL15cZCpcd3s0fS8KKyAgICAxMjM0CisgMDogMTIzNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzIAorTm8gbWF0Y2gKKworL15bXmJdKlx3ezR9LworICAgIGFhYWEKKyAwOiBhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWEgICAgIAorTm8gbWF0Y2gKKworL15bXmJdKlx3ezR9L2kKKyAgICBhYWFhCisgMDogYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhICAgICAKK05vIG1hdGNoCisKKy9eYSpcd3s0fS8KKyAgICBhYWFhCisgMDogYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhICAgICAKK05vIG1hdGNoCisKKy9eYSpcd3s0fS9pCisgICAgYWFhYQorIDA6IGFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYSAgICAgCitObyBtYXRjaAorCisvKD86KD88bj5mb28pfCg/PG4+YmFyKSlcazxuPi9kdXBuYW1lcworICAgIGZvb2ZvbworIDA6IGZvb2ZvbworIDE6IGZvbworICAgIGJhcmJhcgorIDA6IGJhcmJhcgorIDE6IDx1bnNldD4KKyAyOiBiYXIKKworLyg/PG4+QSkoPzooPzxuPmZvbyl8KD88bj5iYXIpKVxrPG4+L2R1cG5hbWVzCisgICAgQWZvb0EKKyAwOiBBZm9vQQorIDE6IEEKKyAyOiBmb28KKyAgICBBYmFyQSAgCisgMDogQWJhckEKKyAxOiBBCisgMjogPHVuc2V0PgorIDM6IGJhcgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIEFmb29mb28KK05vIG1hdGNoCisgICAgQWJhcmJhcgorTm8gbWF0Y2gKKworL14oXGQrKVxzK0lOXHMrU09BXHMrKFxTKylccysoXFMrKVxzKlwoXHMqJC8KKyAgICAxIElOIFNPQSBub24tc3AxIG5vbi1zcDIoCisgMDogMSBJTiBTT0Egbm9uLXNwMSBub24tc3AyKAorIDE6IDEKKyAyOiBub24tc3AxCisgMzogbm9uLXNwMgorCisvXiAoPzooPzxBPkEpfCg/J0InQikoPzxBPkEpKSAoPygnQScpeCkgKD8oPEI+KXkpJC94LGR1cG5hbWVzCisgICAgQXgKKyAwOiBBeAorIDE6IEEKKyAgICBCQXh5IAorIDA6IEJBeHkKKyAxOiA8dW5zZXQ+CisgMjogQgorIDM6IEEKKyAgICAKKy9eQVx4Wi8KKyAgICBBXDBaIAorIDA6IEFceDAwWgorCisvXkFcb3sxMjN9Qi8KKyAgICBBXDEyM0IKKyAwOiBBU0IKKworLyBeIGEgKyArIGIgJCAveAorICAgIGFhYWFiCisgMDogYWFhYWIKKyAgICAKKy8gXiBhICsgI2NvbW1lbnQKKyAgKyBiICQgL3gKKyAgICBhYWFhYgorIDA6IGFhYWFiCisgICAgCisvIF4gYSArICNjb21tZW50CisgICNjb21tZW50CisgICsgYiAkIC94CisgICAgYWFhYWIKKyAwOiBhYWFhYgorICAgIAorLyBeICg/PiBhICsgKSBiICQgL3gKKyAgICBhYWFhYiAKKyAwOiBhYWFhYgorCisvIF4gKCBhICsgKSArICsgXHcgJCAveAorICAgIGFhYWFiIAorIDA6IGFhYWFiCisgMTogYWFhYQorCisvKD86YVxLYikqKy9hZnRlcnRleHQKKyAgICBhYmFiYworIDA6IGIKKyAwKyBjCisKKy8oPz5hXEtiKSovYWZ0ZXJ0ZXh0CisgICAgYWJhYmMKKyAwOiBiCisgMCsgYworCisvKD86YVxLYikqL2FmdGVydGV4dAorICAgIGFiYWJjCisgMDogYgorIDArIGMKKworLyhhXEtiKSorL2FmdGVydGV4dAorICAgIGFiYWJjCisgMDogYgorIDArIGMKKyAxOiBhYgorCisvKGFcS2IpKi9hZnRlcnRleHQKKyAgICBhYmFiYworIDA6IGIKKyAwKyBjCisgMTogYWIKKworLyg/Onh8KD86KHh4fHl5KSt8eHx4fHh8eHx4KXxhfGF8YSliYy8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFjYgorTm8gbWF0Y2gKKworJ1xBKD86W15cIl0rK3xcIig/OlteXCJdKit8XCJcIikqK1wiKSsrJworICAgIE5PTiBRVU9URUQgXCJRVU9UXCJcIkVEXCIgQUZURVIgXCJOT1QgTUFUQ0hFRAorIDA6IE5PTiBRVU9URUQgIlFVT1QiIkVEIiBBRlRFUiAKKworJ1xBKD86W15cIl0rK3xcIig/OlteXCJdKyt8XCJcIikqK1wiKSsrJworICAgIE5PTiBRVU9URUQgXCJRVU9UXCJcIkVEXCIgQUZURVIgXCJOT1QgTUFUQ0hFRAorIDA6IE5PTiBRVU9URUQgIlFVT1QiIkVEIiBBRlRFUiAKKworJ1xBKD86W15cIl0rK3xcIig/OlteXCJdKyt8XCJcIikrK1wiKSsrJworICAgIE5PTiBRVU9URUQgXCJRVU9UXCJcIkVEXCIgQUZURVIgXCJOT1QgTUFUQ0hFRAorIDA6IE5PTiBRVU9URUQgIlFVT1QiIkVEIiBBRlRFUiAKKworJ1xBKFteXCIxXSsrfFtcIjJdKFteXCIzXSorfFtcIjRdW1wiNV0pKitbXCI2XSkrKycKKyAgICBOT04gUVVPVEVEIFwiUVVPVFwiXCJFRFwiIEFGVEVSIFwiTk9UIE1BVENIRUQKKyAwOiBOT04gUVVPVEVEICJRVU9UIiJFRCIgQUZURVIgCisgMTogIEFGVEVSIAorIDI6IAorCisvXlx3Kyg/PlxzKikoPzw9XHcpLworICAgIHRlc3QgdGVzdAorIDA6IHRlcworCisvKD9QPHNhbWU+YSkoP1A8c2FtZT5iKS9nLGR1cG5hbWVzCisgICAgYWJiYWJhCisgMDogYWIKKyAxOiBhCisgMjogYgorIDA6IGFiCisgMTogYQorIDI6IGIKKworLyg/UDxzYW1lPmEpKD9QPHNhbWU+YikoP1A9c2FtZSkvZyxkdXBuYW1lcworICAgIGFiYmFiYQorIDA6IGFiYQorIDE6IGEKKyAyOiBiCisKKy8oP1A9c2FtZSk/KD9QPHNhbWU+YSkoP1A8c2FtZT5iKS9nLGR1cG5hbWVzCisgICAgYWJiYWJhCisgMDogYWIKKyAxOiBhCisgMjogYgorIDA6IGFiCisgMTogYQorIDI6IGIKKworLyg/Oig/UD1zYW1lKT8oPzooP1A8c2FtZT5hKXwoP1A8c2FtZT5iKSkoP1A9c2FtZSkpKy9nLGR1cG5hbWVzCisgICAgYmJiYWFhYmFhYmIKKyAwOiBiYmJhYWFiYQorIDE6IGEKKyAyOiBiCisgMDogYmIKKyAxOiA8dW5zZXQ+CisgMjogYgorCisvKD86KD9QPXNhbWUpPyg/Oig/UD1zYW1lKSg/UDxzYW1lPmEpKD9QPXNhbWUpfCg/UD1zYW1lKT8oP1A8c2FtZT5iKSg/UD1zYW1lKSl7Mn0oP1A9c2FtZSkoP1A8c2FtZT5jKSg/UD1zYW1lKSl7Mn0oP1A8c2FtZT56KT8vZyxkdXBuYW1lcworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmJiYWFhY2NjY2FhYWJiYmNjCitObyBtYXRjaAorCisvKD9QPE5hbWU+YSk/KD9QPE5hbWUyPmIpPyg/KDxOYW1lPiljfGQpKmwvCisgICAgYWNsCisgMDogYWNsCisgMTogYQorICAgIGJkbAorIDA6IGJkbAorIDE6IDx1bnNldD4KKyAyOiBiCisgICAgYWRsCisgMDogZGwKKyAgICBiY2wgICAgCisgMDogbAorCisvXHNhYmMvCisgICAgXHh7MGJ9YWJjCisgMDogXHgwYmFiYworCisvW1xRYV1cRV0rLworICAgIGFhXV0KKyAwOiBhYV1dCisKKy9bXFFdYVxFXSsvCisgICAgYWFdXQorIDA6IGFhXV0KKworL0EoKCgoKCgoKGEpKSkpKSkpKVw4Qi8gCisgICAgQWFhQgorIDA6IEFhYUIKKyAxOiBhCisgMjogYQorIDM6IGEKKyA0OiBhCisgNTogYQorIDY6IGEKKyA3OiBhCisgODogYQorCisvQSgoKCgoKCgoKGEpKSkpKSkpKSlcOUIvIAorICAgIEFhYUIKKyAwOiBBYWFCCisgMTogYQorIDI6IGEKKyAzOiBhCisgNDogYQorIDU6IGEKKyA2OiBhCisgNzogYQorIDg6IGEKKyA5OiBhCisgICAgCisvQVtcOFw5XUIvCisgICAgQThCCisgMDogQThCCisgICAgQTlCICAKKyAwOiBBOUIKKworLyh8YWIpKj9kLworICAgYWJkCisgMDogYWJkCisgMTogYWIKKyAgIHh5ZCAKKyAwOiBkCisKKy8oPzooKGFiY2QpKXwoKCg/Oig/Oig/Oig/OmFiY3woPzphYmNkZWYpKSkpYilhYmNkZWZnaGkpYWJjKXwoKCpBQ0NFUFQpKSkvCisgICAgMTIzNGFiY2QKKyAwOiAKKyAxOiA8dW5zZXQ+CisgMjogPHVuc2V0PgorIDM6IDx1bnNldD4KKyA0OiA8dW5zZXQ+CisgNTogCisKKy8oXDJ8YSkoXDEpLworICAgIGFhYQorIDA6IGFhCisgMTogYQorIDI6IGEKKworLyhcMikoXDEpLworCisiWioofGQqKXsyMTZ9IgorCisiKD8xKSg/Iz8nKXs4fShhKSIKKyAgICBiYWFhYWFhYWFhYworIDA6IGFhYWFhYWFhYQorIDE6IGEKKworLygoKCgoKCgoKCgoKHgpKSkpKSkpKSkpKSlcMTIvCisgICAgeHgKKyAwOiB4eAorIDE6IHgKKyAyOiB4CisgMzogeAorIDQ6IHgKKyA1OiB4CisgNjogeAorIDc6IHgKKyA4OiB4CisgOTogeAorMTA6IHgKKzExOiB4CisxMjogeAorCisvQVtcOF1CW1w5XUMvCisgICAgQThCOUMKKyAwOiBBOEI5QworCisvKD8xKSgpKCgoKCgoXDErKykpXHg4NSkrKXwpKS8KKyAgICBceDg1XHg4NQorIDA6IFx4ODVceDg1CisgMTogCisgMjogXHg4NVx4ODUKKyAzOiBceDg1XHg4NQorIDQ6IFx4ODVceDg1CisgNTogXHg4NQorIDY6IAorIDc6IAorCisiKD98KFxrJ1BtJyl8KD8nUG0nKSkiCisgICAgYWJjZAorIDA6IAorIDE6IAorCisvKD98KGFhYSl8KGIpKVxnezF9LworICAgIGFhYWFhYQorIDA6IGFhYWFhYQorIDE6IGFhYQorICAgIGJiIAorIDA6IGJiCisgMTogYgorCisvKD98KGFhYSl8KGIpKSg/MSkvCisgICAgYWFhYWFhCisgMDogYWFhYWFhCisgMTogYWFhCisgICAgYmFhYSAKKyAwOiBiYWFhCisgMTogYgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGJiIAorTm8gbWF0Y2gKKworLyg/fChhYWEpfChiKSkvCisgICAgeGFhYQorIDA6IGFhYQorIDE6IGFhYQorICAgIHhiYyAKKyAwOiBiCisgMTogYgorCisvKD98KD8nYSdhYWEpfCg/J2EnYikpXGsnYScvCisgICAgYWFhYWFhCisgMDogYWFhYWFhCisgMTogYWFhCisgICAgYmIgCisgMDogYmIKKyAxOiBiCisKKy8oP3woPydhJ2FhYSl8KD8nYSdiKSkoPydhJ2NjY2MpXGsnYScvZHVwbmFtZXMKKyAgICBhYWFjY2NjYWFhCisgMDogYWFhY2NjY2FhYQorIDE6IGFhYQorIDI6IGNjY2MKKyAgICBiY2NjY2IgCisgMDogYmNjY2NiCisgMTogYgorIDI6IGNjY2MKKworIyBFbmQgb2YgdGVzdGlucHV0MSAKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxMCBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzYxZjBmCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDEwCkBAIC0wLDAgKzEsMTU0MiBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBpcyBmb3IgVVRGLTggc3VwcG9ydCBhbmQgVW5pY29kZSBwcm9wZXJ0eSBzdXBwb3J0LCB3aXRoCisjIHJlbGV2YW5jZSBvbmx5IGZvciB0aGUgOC1iaXQgbGlicmFyeS4KKworIyBUaGUgbmV4dCA0IHBhdHRlcm5zIGhhdmUgVVRGLTggZXJyb3JzCisKKy9bw10vdXRmCitGYWlsZWQ6IGVycm9yIC04IGF0IG9mZnNldCAxOiBVVEYtOCBlcnJvcjogYnl0ZSAyIHRvcCBiaXRzIG5vdCAweDgwCisKKy/DL3V0ZgorRmFpbGVkOiBlcnJvciAtMyBhdCBvZmZzZXQgMDogVVRGLTggZXJyb3I6IDEgYnl0ZSBtaXNzaW5nIGF0IGVuZAorCisvw8PDeHh4L3V0ZgorRmFpbGVkOiBlcnJvciAtOCBhdCBvZmZzZXQgMDogVVRGLTggZXJyb3I6IGJ5dGUgMiB0b3AgYml0cyBub3QgMHg4MAorCisvw4KCgoKCgoKCwy91dGYKK0ZhaWxlZDogZXJyb3IgLTIyIGF0IG9mZnNldCAyOiBVVEYtOCBlcnJvcjogaXNvbGF0ZWQgYnl0ZSB3aXRoIDB4ODAgYml0IHNldAorCisjIE5vdyB0ZXN0IHN1YmplY3RzCisKKy9iYWR1dGYvdXRmCitcPSBFeHBlY3QgVVRGLTggZXJyb3JzCisgICAgWFx4ZGYKK0ZhaWxlZDogZXJyb3IgLTM6IFVURi04IGVycm9yOiAxIGJ5dGUgbWlzc2luZyBhdCBlbmQgYXQgb2Zmc2V0IDEKKyAgICBYWFx4ZWYKK0ZhaWxlZDogZXJyb3IgLTQ6IFVURi04IGVycm9yOiAyIGJ5dGVzIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAyCisgICAgWFhYXHhlZlx4ODAKK0ZhaWxlZDogZXJyb3IgLTM6IFVURi04IGVycm9yOiAxIGJ5dGUgbWlzc2luZyBhdCBlbmQgYXQgb2Zmc2V0IDMKKyAgICBYXHhmNworRmFpbGVkOiBlcnJvciAtNTogVVRGLTggZXJyb3I6IDMgYnl0ZXMgbWlzc2luZyBhdCBlbmQgYXQgb2Zmc2V0IDEKKyAgICBYWFx4ZjdceDgwCitGYWlsZWQ6IGVycm9yIC00OiBVVEYtOCBlcnJvcjogMiBieXRlcyBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMgorICAgIFhYWFx4ZjdceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtMzogVVRGLTggZXJyb3I6IDEgYnl0ZSBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMworICAgIFx4ZmIKK0ZhaWxlZDogZXJyb3IgLTY6IFVURi04IGVycm9yOiA0IGJ5dGVzIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAwCisgICAgXHhmYlx4ODAKK0ZhaWxlZDogZXJyb3IgLTU6IFVURi04IGVycm9yOiAzIGJ5dGVzIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAwCisgICAgXHhmYlx4ODBceDgwCitGYWlsZWQ6IGVycm9yIC00OiBVVEYtOCBlcnJvcjogMiBieXRlcyBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMAorICAgIFx4ZmJceDgwXHg4MFx4ODAKK0ZhaWxlZDogZXJyb3IgLTM6IFVURi04IGVycm9yOiAxIGJ5dGUgbWlzc2luZyBhdCBlbmQgYXQgb2Zmc2V0IDAKKyAgICBceGZkCitGYWlsZWQ6IGVycm9yIC03OiBVVEYtOCBlcnJvcjogNSBieXRlcyBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMAorICAgIFx4ZmRceDgwCitGYWlsZWQ6IGVycm9yIC02OiBVVEYtOCBlcnJvcjogNCBieXRlcyBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMAorICAgIFx4ZmRceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtNTogVVRGLTggZXJyb3I6IDMgYnl0ZXMgbWlzc2luZyBhdCBlbmQgYXQgb2Zmc2V0IDAKKyAgICBceGZkXHg4MFx4ODBceDgwCitGYWlsZWQ6IGVycm9yIC00OiBVVEYtOCBlcnJvcjogMiBieXRlcyBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMAorICAgIFx4ZmRceDgwXHg4MFx4ODBceDgwCitGYWlsZWQ6IGVycm9yIC0zOiBVVEYtOCBlcnJvcjogMSBieXRlIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAwCisgICAgXHhkZlx4N2YKK0ZhaWxlZDogZXJyb3IgLTg6IFVURi04IGVycm9yOiBieXRlIDIgdG9wIGJpdHMgbm90IDB4ODAgYXQgb2Zmc2V0IDAKKyAgICBceGVmXHg3Zlx4ODAKK0ZhaWxlZDogZXJyb3IgLTg6IFVURi04IGVycm9yOiBieXRlIDIgdG9wIGJpdHMgbm90IDB4ODAgYXQgb2Zmc2V0IDAKKyAgICBceGVmXHg4MFx4N2YKK0ZhaWxlZDogZXJyb3IgLTk6IFVURi04IGVycm9yOiBieXRlIDMgdG9wIGJpdHMgbm90IDB4ODAgYXQgb2Zmc2V0IDAKKyAgICBceGY3XHg3Zlx4ODBceDgwCitGYWlsZWQ6IGVycm9yIC04OiBVVEYtOCBlcnJvcjogYnl0ZSAyIHRvcCBiaXRzIG5vdCAweDgwIGF0IG9mZnNldCAwCisgICAgXHhmN1x4ODBceDdmXHg4MAorRmFpbGVkOiBlcnJvciAtOTogVVRGLTggZXJyb3I6IGJ5dGUgMyB0b3AgYml0cyBub3QgMHg4MCBhdCBvZmZzZXQgMAorICAgIFx4ZjdceDgwXHg4MFx4N2YKK0ZhaWxlZDogZXJyb3IgLTEwOiBVVEYtOCBlcnJvcjogYnl0ZSA0IHRvcCBiaXRzIG5vdCAweDgwIGF0IG9mZnNldCAwCisgICAgXHhmYlx4N2ZceDgwXHg4MFx4ODAKK0ZhaWxlZDogZXJyb3IgLTg6IFVURi04IGVycm9yOiBieXRlIDIgdG9wIGJpdHMgbm90IDB4ODAgYXQgb2Zmc2V0IDAKKyAgICBceGZiXHg4MFx4N2ZceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtOTogVVRGLTggZXJyb3I6IGJ5dGUgMyB0b3AgYml0cyBub3QgMHg4MCBhdCBvZmZzZXQgMAorICAgIFx4ZmJceDgwXHg4MFx4N2ZceDgwCitGYWlsZWQ6IGVycm9yIC0xMDogVVRGLTggZXJyb3I6IGJ5dGUgNCB0b3AgYml0cyBub3QgMHg4MCBhdCBvZmZzZXQgMAorICAgIFx4ZmJceDgwXHg4MFx4ODBceDdmCitGYWlsZWQ6IGVycm9yIC0xMTogVVRGLTggZXJyb3I6IGJ5dGUgNSB0b3AgYml0cyBub3QgMHg4MCBhdCBvZmZzZXQgMAorICAgIFx4ZmRceDdmXHg4MFx4ODBceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtODogVVRGLTggZXJyb3I6IGJ5dGUgMiB0b3AgYml0cyBub3QgMHg4MCBhdCBvZmZzZXQgMAorICAgIFx4ZmRceDgwXHg3Zlx4ODBceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtOTogVVRGLTggZXJyb3I6IGJ5dGUgMyB0b3AgYml0cyBub3QgMHg4MCBhdCBvZmZzZXQgMAorICAgIFx4ZmRceDgwXHg4MFx4N2ZceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtMTA6IFVURi04IGVycm9yOiBieXRlIDQgdG9wIGJpdHMgbm90IDB4ODAgYXQgb2Zmc2V0IDAKKyAgICBceGZkXHg4MFx4ODBceDgwXHg3Zlx4ODAKK0ZhaWxlZDogZXJyb3IgLTExOiBVVEYtOCBlcnJvcjogYnl0ZSA1IHRvcCBiaXRzIG5vdCAweDgwIGF0IG9mZnNldCAwCisgICAgXHhmZFx4ODBceDgwXHg4MFx4ODBceDdmCitGYWlsZWQ6IGVycm9yIC0xMjogVVRGLTggZXJyb3I6IGJ5dGUgNiB0b3AgYml0cyBub3QgMHg4MCBhdCBvZmZzZXQgMAorICAgIFx4ZWRceGEwXHg4MAorRmFpbGVkOiBlcnJvciAtMTY6IFVURi04IGVycm9yOiBjb2RlIHBvaW50cyAweGQ4MDAtMHhkZmZmIGFyZSBub3QgZGVmaW5lZCBhdCBvZmZzZXQgMAorICAgIFx4YzBceDhmCitGYWlsZWQ6IGVycm9yIC0xNzogVVRGLTggZXJyb3I6IG92ZXJsb25nIDItYnl0ZSBzZXF1ZW5jZSBhdCBvZmZzZXQgMAorICAgIFx4ZTBceDgwXHg4ZgorRmFpbGVkOiBlcnJvciAtMTg6IFVURi04IGVycm9yOiBvdmVybG9uZyAzLWJ5dGUgc2VxdWVuY2UgYXQgb2Zmc2V0IDAKKyAgICBceGYwXHg4MFx4ODBceDhmCitGYWlsZWQ6IGVycm9yIC0xOTogVVRGLTggZXJyb3I6IG92ZXJsb25nIDQtYnl0ZSBzZXF1ZW5jZSBhdCBvZmZzZXQgMAorICAgIFx4ZjhceDgwXHg4MFx4ODBceDhmCitGYWlsZWQ6IGVycm9yIC0yMDogVVRGLTggZXJyb3I6IG92ZXJsb25nIDUtYnl0ZSBzZXF1ZW5jZSBhdCBvZmZzZXQgMAorICAgIFx4ZmNceDgwXHg4MFx4ODBceDgwXHg4ZgorRmFpbGVkOiBlcnJvciAtMjE6IFVURi04IGVycm9yOiBvdmVybG9uZyA2LWJ5dGUgc2VxdWVuY2UgYXQgb2Zmc2V0IDAKKyAgICBceDgwCitGYWlsZWQ6IGVycm9yIC0yMjogVVRGLTggZXJyb3I6IGlzb2xhdGVkIGJ5dGUgd2l0aCAweDgwIGJpdCBzZXQgYXQgb2Zmc2V0IDAKKyAgICBceGZlCitGYWlsZWQ6IGVycm9yIC0yMzogVVRGLTggZXJyb3I6IGlsbGVnYWwgYnl0ZSAoMHhmZSBvciAweGZmKSBhdCBvZmZzZXQgMAorICAgIFx4ZmYKK0ZhaWxlZDogZXJyb3IgLTIzOiBVVEYtOCBlcnJvcjogaWxsZWdhbCBieXRlICgweGZlIG9yIDB4ZmYpIGF0IG9mZnNldCAwCisKKy9iYWR1dGYvdXRmCitcPSBFeHBlY3QgVVRGLTggZXJyb3JzCisgICAgWFhceGZiXHg4MFx4ODBceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtMTM6IFVURi04IGVycm9yOiA1LWJ5dGUgY2hhcmFjdGVyIGlzIG5vdCBhbGxvd2VkIChSRkMgMzYyOSkgYXQgb2Zmc2V0IDIKKyAgICBYWFx4ZmRceDgwXHg4MFx4ODBceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtMTQ6IFVURi04IGVycm9yOiA2LWJ5dGUgY2hhcmFjdGVyIGlzIG5vdCBhbGxvd2VkIChSRkMgMzYyOSkgYXQgb2Zmc2V0IDIKKyAgICBYWFx4ZjdceGJmXHhiZlx4YmYKK0ZhaWxlZDogZXJyb3IgLTE1OiBVVEYtOCBlcnJvcjogY29kZSBwb2ludHMgZ3JlYXRlciB0aGFuIDB4MTBmZmZmIGFyZSBub3QgZGVmaW5lZCBhdCBvZmZzZXQgMgorCisvc2hvcnR1dGYvdXRmCitcPSBFeHBlY3QgVVRGLTggZXJyb3JzCisgICAgWFhceGRmXD1waAorRmFpbGVkOiBlcnJvciAtMzogVVRGLTggZXJyb3I6IDEgYnl0ZSBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMgorICAgIFhYXHhlZlw9cGgKK0ZhaWxlZDogZXJyb3IgLTQ6IFVURi04IGVycm9yOiAyIGJ5dGVzIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAyCisgICAgWFhceGVmXHg4MFw9cGgKK0ZhaWxlZDogZXJyb3IgLTM6IFVURi04IGVycm9yOiAxIGJ5dGUgbWlzc2luZyBhdCBlbmQgYXQgb2Zmc2V0IDIKKyAgICBceGY3XD1waAorRmFpbGVkOiBlcnJvciAtNTogVVRGLTggZXJyb3I6IDMgYnl0ZXMgbWlzc2luZyBhdCBlbmQgYXQgb2Zmc2V0IDAKKyAgICBceGY3XHg4MFw9cGgKK0ZhaWxlZDogZXJyb3IgLTQ6IFVURi04IGVycm9yOiAyIGJ5dGVzIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAwCisgICAgXHhmN1x4ODBceDgwXD1waAorRmFpbGVkOiBlcnJvciAtMzogVVRGLTggZXJyb3I6IDEgYnl0ZSBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMAorICAgIFx4ZmJcPXBoCitGYWlsZWQ6IGVycm9yIC02OiBVVEYtOCBlcnJvcjogNCBieXRlcyBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMAorICAgIFx4ZmJceDgwXD1waAorRmFpbGVkOiBlcnJvciAtNTogVVRGLTggZXJyb3I6IDMgYnl0ZXMgbWlzc2luZyBhdCBlbmQgYXQgb2Zmc2V0IDAKKyAgICBceGZiXHg4MFx4ODBcPXBoCitGYWlsZWQ6IGVycm9yIC00OiBVVEYtOCBlcnJvcjogMiBieXRlcyBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMAorICAgIFx4ZmJceDgwXHg4MFx4ODBcPXBoCitGYWlsZWQ6IGVycm9yIC0zOiBVVEYtOCBlcnJvcjogMSBieXRlIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAwCisgICAgXHhmZFw9cGgKK0ZhaWxlZDogZXJyb3IgLTc6IFVURi04IGVycm9yOiA1IGJ5dGVzIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAwCisgICAgXHhmZFx4ODBcPXBoCitGYWlsZWQ6IGVycm9yIC02OiBVVEYtOCBlcnJvcjogNCBieXRlcyBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMAorICAgIFx4ZmRceDgwXHg4MFw9cGgKK0ZhaWxlZDogZXJyb3IgLTU6IFVURi04IGVycm9yOiAzIGJ5dGVzIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAwCisgICAgXHhmZFx4ODBceDgwXHg4MFw9cGgKK0ZhaWxlZDogZXJyb3IgLTQ6IFVURi04IGVycm9yOiAyIGJ5dGVzIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAwCisgICAgXHhmZFx4ODBceDgwXHg4MFx4ODBcPXBoCitGYWlsZWQ6IGVycm9yIC0zOiBVVEYtOCBlcnJvcjogMSBieXRlIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAwCisKKy9hbnl0aGluZy91dGYKK1w9IEV4cGVjdCBVVEYtOCBlcnJvcnMKKyAgICBYXHhjMFx4ODAKK0ZhaWxlZDogZXJyb3IgLTE3OiBVVEYtOCBlcnJvcjogb3ZlcmxvbmcgMi1ieXRlIHNlcXVlbmNlIGF0IG9mZnNldCAxCisgICAgWFhceGMxXHg4ZgorRmFpbGVkOiBlcnJvciAtMTc6IFVURi04IGVycm9yOiBvdmVybG9uZyAyLWJ5dGUgc2VxdWVuY2UgYXQgb2Zmc2V0IDIKKyAgICBYWFhceGUwXHg5Zlx4ODAKK0ZhaWxlZDogZXJyb3IgLTE4OiBVVEYtOCBlcnJvcjogb3ZlcmxvbmcgMy1ieXRlIHNlcXVlbmNlIGF0IG9mZnNldCAzCisgICAgXHhmMFx4OGZceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtMTk6IFVURi04IGVycm9yOiBvdmVybG9uZyA0LWJ5dGUgc2VxdWVuY2UgYXQgb2Zmc2V0IDAKKyAgICBceGY4XHg4N1x4ODBceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtMjA6IFVURi04IGVycm9yOiBvdmVybG9uZyA1LWJ5dGUgc2VxdWVuY2UgYXQgb2Zmc2V0IDAKKyAgICBceGZjXHg4M1x4ODBceDgwXHg4MFx4ODAKK0ZhaWxlZDogZXJyb3IgLTIxOiBVVEYtOCBlcnJvcjogb3ZlcmxvbmcgNi1ieXRlIHNlcXVlbmNlIGF0IG9mZnNldCAwCisgICAgXHhmZVx4ODBceDgwXHg4MFx4ODBceDgwCitGYWlsZWQ6IGVycm9yIC0yMzogVVRGLTggZXJyb3I6IGlsbGVnYWwgYnl0ZSAoMHhmZSBvciAweGZmKSBhdCBvZmZzZXQgMAorICAgIFx4ZmZceDgwXHg4MFx4ODBceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtMjM6IFVURi04IGVycm9yOiBpbGxlZ2FsIGJ5dGUgKDB4ZmUgb3IgMHhmZikgYXQgb2Zmc2V0IDAKKyAgICBceGY4XHg4OFx4ODBceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtMTM6IFVURi04IGVycm9yOiA1LWJ5dGUgY2hhcmFjdGVyIGlzIG5vdCBhbGxvd2VkIChSRkMgMzYyOSkgYXQgb2Zmc2V0IDAKKyAgICBceGY5XHg4N1x4ODBceDgwXHg4MAorRmFpbGVkOiBlcnJvciAtMTM6IFVURi04IGVycm9yOiA1LWJ5dGUgY2hhcmFjdGVyIGlzIG5vdCBhbGxvd2VkIChSRkMgMzYyOSkgYXQgb2Zmc2V0IDAKKyAgICBceGZjXHg4NFx4ODBceDgwXHg4MFx4ODAKK0ZhaWxlZDogZXJyb3IgLTE0OiBVVEYtOCBlcnJvcjogNi1ieXRlIGNoYXJhY3RlciBpcyBub3QgYWxsb3dlZCAoUkZDIDM2MjkpIGF0IG9mZnNldCAwCisgICAgXHhmZFx4ODNceDgwXHg4MFx4ODBceDgwCitGYWlsZWQ6IGVycm9yIC0xNDogVVRGLTggZXJyb3I6IDYtYnl0ZSBjaGFyYWN0ZXIgaXMgbm90IGFsbG93ZWQgKFJGQyAzNjI5KSBhdCBvZmZzZXQgMAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHhjM1x4OGYKK05vIG1hdGNoCisgICAgXHhlMFx4YWZceDgwCitObyBtYXRjaAorICAgIFx4ZTFceDgwXHg4MAorTm8gbWF0Y2gKKyAgICBceGYwXHg5Zlx4ODBceDgwCitObyBtYXRjaAorICAgIFx4ZjFceDhmXHg4MFx4ODAKK05vIG1hdGNoCisgICAgXHhmOFx4ODhceDgwXHg4MFx4ODBcPW5vX3V0Zl9jaGVjaworTm8gbWF0Y2gKKyAgICBceGY5XHg4N1x4ODBceDgwXHg4MFw9bm9fdXRmX2NoZWNrCitObyBtYXRjaAorICAgIFx4ZmNceDg0XHg4MFx4ODBceDgwXHg4MFw9bm9fdXRmX2NoZWNrCitObyBtYXRjaAorICAgIFx4ZmRceDgzXHg4MFx4ODBceDgwXHg4MFw9bm9fdXRmX2NoZWNrCitObyBtYXRjaAorICAgIAorIyBTaW1pbGFyIHRlc3RzIHdpdGggb2Zmc2V0cworCisvYmFkdXRmL3V0ZgorXD0gRXhwZWN0IFVURi04IGVycm9ycworICAgIFhceGRmYWJjZAorRmFpbGVkOiBlcnJvciAtODogVVRGLTggZXJyb3I6IGJ5dGUgMiB0b3AgYml0cyBub3QgMHg4MCBhdCBvZmZzZXQgMQorICAgIFhceGRmYWJjZFw9b2Zmc2V0PTEKK0ZhaWxlZDogZXJyb3IgLTg6IFVURi04IGVycm9yOiBieXRlIDIgdG9wIGJpdHMgbm90IDB4ODAgYXQgb2Zmc2V0IDEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhceGRmYWJjZFw9b2Zmc2V0PTIKK05vIG1hdGNoCisKKy8oPzw9eCliYWR1dGYvdXRmCitcPSBFeHBlY3QgVVRGLTggZXJyb3JzCisgICAgWFx4ZGZhYmNkCitGYWlsZWQ6IGVycm9yIC04OiBVVEYtOCBlcnJvcjogYnl0ZSAyIHRvcCBiaXRzIG5vdCAweDgwIGF0IG9mZnNldCAxCisgICAgWFx4ZGZhYmNkXD1vZmZzZXQ9MQorRmFpbGVkOiBlcnJvciAtODogVVRGLTggZXJyb3I6IGJ5dGUgMiB0b3AgYml0cyBub3QgMHg4MCBhdCBvZmZzZXQgMQorICAgIFhceGRmYWJjZFw9b2Zmc2V0PTIKK0ZhaWxlZDogZXJyb3IgLTg6IFVURi04IGVycm9yOiBieXRlIDIgdG9wIGJpdHMgbm90IDB4ODAgYXQgb2Zmc2V0IDEKKyAgICBYXHhkZmFiY2RceGRmXD1vZmZzZXQ9MworRmFpbGVkOiBlcnJvciAtMzogVVRGLTggZXJyb3I6IDEgYnl0ZSBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgNgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWFx4ZGZhYmNkXD1vZmZzZXQ9MworTm8gbWF0Y2gKKworLyg/PD14eCliYWR1dGYvdXRmCitcPSBFeHBlY3QgVVRGLTggZXJyb3JzCisgICAgWFx4ZGZhYmNkCitGYWlsZWQ6IGVycm9yIC04OiBVVEYtOCBlcnJvcjogYnl0ZSAyIHRvcCBiaXRzIG5vdCAweDgwIGF0IG9mZnNldCAxCisgICAgWFx4ZGZhYmNkXD1vZmZzZXQ9MQorRmFpbGVkOiBlcnJvciAtODogVVRGLTggZXJyb3I6IGJ5dGUgMiB0b3AgYml0cyBub3QgMHg4MCBhdCBvZmZzZXQgMQorICAgIFhceGRmYWJjZFw9b2Zmc2V0PTIKK0ZhaWxlZDogZXJyb3IgLTg6IFVURi04IGVycm9yOiBieXRlIDIgdG9wIGJpdHMgbm90IDB4ODAgYXQgb2Zmc2V0IDEKKyAgICBYXHhkZmFiY2RcPW9mZnNldD0zCitGYWlsZWQ6IGVycm9yIC04OiBVVEYtOCBlcnJvcjogYnl0ZSAyIHRvcCBiaXRzIG5vdCAweDgwIGF0IG9mZnNldCAxCisKKy8oPzw9eHh4eCliYWR1dGYvdXRmCitcPSBFeHBlY3QgVVRGLTggZXJyb3JzCisgICAgWFx4ZGZhYmNkCitGYWlsZWQ6IGVycm9yIC04OiBVVEYtOCBlcnJvcjogYnl0ZSAyIHRvcCBiaXRzIG5vdCAweDgwIGF0IG9mZnNldCAxCisgICAgWFx4ZGZhYmNkXD1vZmZzZXQ9MQorRmFpbGVkOiBlcnJvciAtODogVVRGLTggZXJyb3I6IGJ5dGUgMiB0b3AgYml0cyBub3QgMHg4MCBhdCBvZmZzZXQgMQorICAgIFhceGRmYWJjZFw9b2Zmc2V0PTIKK0ZhaWxlZDogZXJyb3IgLTg6IFVURi04IGVycm9yOiBieXRlIDIgdG9wIGJpdHMgbm90IDB4ODAgYXQgb2Zmc2V0IDEKKyAgICBYXHhkZmFiY2RcPW9mZnNldD0zCitGYWlsZWQ6IGVycm9yIC04OiBVVEYtOCBlcnJvcjogYnl0ZSAyIHRvcCBiaXRzIG5vdCAweDgwIGF0IG9mZnNldCAxCisgICAgWFx4ZGZhYmNceGRmXD1vZmZzZXQ9NgorRmFpbGVkOiBlcnJvciAtMzogVVRGLTggZXJyb3I6IDEgYnl0ZSBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgNQorICAgIFhceGRmYWJjXHhkZlw9b2Zmc2V0PTcKK0ZhaWxlZDogZXJyb3IgLTMzOiBiYWQgb2Zmc2V0IHZhbHVlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYXHhkZmFiY2RcPW9mZnNldD02CitObyBtYXRjaAorIAorL1x4ezEwMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhjNAorTGFzdCBjb2RlIHVuaXQgPSBceDgwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMDB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDAwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGUxCitMYXN0IGNvZGUgdW5pdCA9IFx4ODAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTAwMDB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDAwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhmMAorTGFzdCBjb2RlIHVuaXQgPSBceDgwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMDAwMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMDAwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhmNAorTGFzdCBjb2RlIHVuaXQgPSBceDgwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwZmZmZn0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwZmZmZn0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhmNAorTGFzdCBjb2RlIHVuaXQgPSBceGJmCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1tceHtmZn1dL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHtmZn0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhjMworTGFzdCBjb2RlIHVuaXQgPSBceGJmCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1tceHsxMDB9XS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGM0CitMYXN0IGNvZGUgdW5pdCA9IFx4ODAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHg4MC9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ODB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4YzIKK0xhc3QgY29kZSB1bml0ID0gXHg4MAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceGZmL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHtmZn0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhjMworTGFzdCBjb2RlIHVuaXQgPSBceGJmCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4e0Q1NWN9XHh7YWQ2ZH1ceHtDNUI0fS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ZDU1Y31ceHthZDZkfVx4e2M1YjR9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ZWQKK0xhc3QgY29kZSB1bml0ID0gXHhiNAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgXHh7RDU1Y31ceHthZDZkfVx4e0M1QjR9CisgMDogXHh7ZDU1Y31ceHthZDZkfVx4e2M1YjR9CisKKy9ceHs2NWU1fVx4ezY3MmN9XHh7OGE5ZX0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezY1ZTV9XHh7NjcyY31ceHs4YTllfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGU2CitMYXN0IGNvZGUgdW5pdCA9IFx4OWUKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIFx4ezY1ZTV9XHh7NjcyY31ceHs4YTllfQorIDA6IFx4ezY1ZTV9XHh7NjcyY31ceHs4YTllfQorCisvXHh7ODB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHs4MH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhjMgorTGFzdCBjb2RlIHVuaXQgPSBceDgwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezA4NH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezg0fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGMyCitMYXN0IGNvZGUgdW5pdCA9IFx4ODQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTA0fS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTA0fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGM0CitMYXN0IGNvZGUgdW5pdCA9IFx4ODQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7ODYxfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ODYxfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGUwCitMYXN0IGNvZGUgdW5pdCA9IFx4YTEKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MjEyYWJ9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsyMTJhYn0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhmMAorTGFzdCBjb2RlIHVuaXQgPSBceGFiCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1teYWJceEMwLVx4RjBdL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwMC1gYy1ceGJmXHhmMS1ceGZmXSAobmVnKQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDA5IFx4MGEgCisgIFx4MGIgXHgwYyBceDBkIFx4MGUgXHgwZiBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IAorICBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgXHgxZiBceDIwICEgIiAjICQgJSAmICcgKCApICogKyAsIC0gLiAvIDAgMSAyIDMgNCAKKyAgNSA2IDcgOCA5IDogOyA8ID0gPiA/IEAgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSAKKyAgWiBbIFwgXSBeIF8gYCBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiB7IHwgfSB+IFx4N2YgCisgIFx4YzIgXHhjMyBceGM0IFx4YzUgXHhjNiBceGM3IFx4YzggXHhjOSBceGNhIFx4Y2IgXHhjYyBceGNkIFx4Y2UgXHhjZiBceGQwIAorICBceGQxIFx4ZDIgXHhkMyBceGQ0IFx4ZDUgXHhkNiBceGQ3IFx4ZDggXHhkOSBceGRhIFx4ZGIgXHhkYyBceGRkIFx4ZGUgXHhkZiAKKyAgXHhlMCBceGUxIFx4ZTIgXHhlMyBceGU0IFx4ZTUgXHhlNiBceGU3IFx4ZTggXHhlOSBceGVhIFx4ZWIgXHhlYyBceGVkIFx4ZWUgCisgIFx4ZWYgXHhmMCBceGYxIFx4ZjIgXHhmMyBceGY0IFx4ZjUgXHhmNiBceGY3IFx4ZjggXHhmOSBceGZhIFx4ZmIgXHhmYyBceGZkIAorICBceGZlIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBceHtmMX0KKyAwOiBceHtmMX0KKyAgICBceHtiZn0KKyAwOiBceHtiZn0KKyAgICBceHsxMDB9CisgMDogXHh7MTAwfQorICAgIFx4ezEwMDB9CisgMDogXHh7MTAwMH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4e2MwfQorTm8gbWF0Y2gKKyAgICBceHtmMH0KK05vIG1hdGNoCisKKy/EgHszLDR9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9ezN9CisgICAgICAgIFx4ezEwMH0/KworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGM0CitMYXN0IGNvZGUgdW5pdCA9IFx4ODAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDBceHsxMDB9CisgMDogXHh7MTAwfVx4ezEwMH1ceHsxMDB9CisKKy8oXHh7MTAwfSt8eCkvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBceHsxMDB9KysKKyAgICAgICAgQWx0CisgICAgICAgIHgKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IHggXHhjNCAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKFx4ezEwMH0qYXx4KS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIFx4ezEwMH0qKworICAgICAgICBhCisgICAgICAgIEFsdAorICAgICAgICB4CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIHggXHhjNCAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKFx4ezEwMH17MCwyfWF8eCkvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBceHsxMDB9ezAsMn0rCisgICAgICAgIGEKKyAgICAgICAgQWx0CisgICAgICAgIHgKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgeCBceGM0IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oXHh7MTAwfXsxLDJ9YXx4KS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIFx4ezEwMH0KKyAgICAgICAgXHh7MTAwfXswLDF9KworICAgICAgICBhCisgICAgICAgIEFsdAorICAgICAgICB4CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiB4IFx4YzQgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhjNAorTGFzdCBjb2RlIHVuaXQgPSBceDgwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL2FceHsxMDB9XHh7MTAxfSovSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIGFceHsxMDB9CisgICAgICAgIFx4ezEwMX0qKworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gXHg4MAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9hXHh7MTAwfVx4ezEwMX0rL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhXHh7MTAwfQorICAgICAgICBceHsxMDF9KysKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9IFx4ODEKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvW15ceHtjNH1dL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFteXHh7YzR9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bXHh7MTAwfV0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhjNAorTGFzdCBjb2RlIHVuaXQgPSBceDgwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBceHsxMDB9CisgMDogXHh7MTAwfQorICAgIFpceHsxMDB9CisgMDogXHh7MTAwfQorICAgIFx4ezEwMH1aCisgMDogXHh7MTAwfQorCisvW1x4ZmZdL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHtmZn0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhjMworTGFzdCBjb2RlIHVuaXQgPSBceGJmCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICA+XHh7ZmZ9PAorIDA6IFx4e2ZmfQorCisvW15ceGZmXS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW15ceHtmZn1dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTAwfWFiYyh4eXooPzEpKS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwfWFiYworICAgICAgICBDQnJhIDEKKyAgICAgICAgeHl6CisgICAgICAgIFJlY3Vyc2UKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4YzQKK0xhc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDcKKworL1w3NzcvSSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGM3CitMYXN0IGNvZGUgdW5pdCA9IFx4YmYKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICBceHsxZmZ9CisgMDogXHh7MWZmfQorICBcNzc3CisgMDogXHh7MWZmfQorCisvXHh7MTAwfStceHsyMDB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KysKKyAgICAgICAgXHh7MjAwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGM0CitMYXN0IGNvZGUgdW5pdCA9IFx4ODAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvXHh7MTAwfStYL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KysKKyAgICAgICAgWAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGM0CitMYXN0IGNvZGUgdW5pdCA9ICdYJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9eW1xRxIBcRS1cUcWQXEUvQix1dGYKK0ZhaWxlZDogZXJyb3IgMTA2IGF0IG9mZnNldCAxNTogbWlzc2luZyB0ZXJtaW5hdGluZyBdIGZvciBjaGFyYWN0ZXIgY2xhc3MKKworIyBUaGlzIHRlc3RzIHRoZSBzdHJpY3RlciBVVEYtOCBjaGVjayBhY2NvcmRpbmcgdG8gUkZDIDM2MjkuCisKKy9YL3V0ZgorXD0gRXhwZWN0IFVURi04IGVycm9ycworICAgIFx4e2Q4MDB9CitGYWlsZWQ6IGVycm9yIC0xNjogVVRGLTggZXJyb3I6IGNvZGUgcG9pbnRzIDB4ZDgwMC0weGRmZmYgYXJlIG5vdCBkZWZpbmVkIGF0IG9mZnNldCAwCisgICAgXHh7ZGEwMH0KK0ZhaWxlZDogZXJyb3IgLTE2OiBVVEYtOCBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWQgYXQgb2Zmc2V0IDAKKyAgICBceHtkZmZmfQorRmFpbGVkOiBlcnJvciAtMTY6IFVURi04IGVycm9yOiBjb2RlIHBvaW50cyAweGQ4MDAtMHhkZmZmIGFyZSBub3QgZGVmaW5lZCBhdCBvZmZzZXQgMAorICAgIFx4ezExMDAwMH0KK0ZhaWxlZDogZXJyb3IgLTE1OiBVVEYtOCBlcnJvcjogY29kZSBwb2ludHMgZ3JlYXRlciB0aGFuIDB4MTBmZmZmIGFyZSBub3QgZGVmaW5lZCBhdCBvZmZzZXQgMAorICAgIFx4ezIwMDAwMDB9CitGYWlsZWQ6IGVycm9yIC0xMzogVVRGLTggZXJyb3I6IDUtYnl0ZSBjaGFyYWN0ZXIgaXMgbm90IGFsbG93ZWQgKFJGQyAzNjI5KSBhdCBvZmZzZXQgMAorICAgIFx4ezdmZmZmZmZmfQorRmFpbGVkOiBlcnJvciAtMTQ6IFVURi04IGVycm9yOiA2LWJ5dGUgY2hhcmFjdGVyIGlzIG5vdCBhbGxvd2VkIChSRkMgMzYyOSkgYXQgb2Zmc2V0IDAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4e2Q4MDB9XD1ub191dGZfY2hlY2sKK05vIG1hdGNoCisgICAgXHh7ZGEwMH1cPW5vX3V0Zl9jaGVjaworTm8gbWF0Y2gKKyAgICBceHtkZmZmfVw9bm9fdXRmX2NoZWNrCitObyBtYXRjaAorICAgIFx4ezExMDAwMH1cPW5vX3V0Zl9jaGVjaworTm8gbWF0Y2gKKyAgICBceHsyMDAwMDAwfVw9bm9fdXRmX2NoZWNrCitObyBtYXRjaAorICAgIFx4ezdmZmZmZmZmfVw9bm9fdXRmX2NoZWNrCitObyBtYXRjaAorCisvKCpVVEY4KVx4ezEyMzR9LworICAgIGFiY2RceHsxMjM0fXBxcgorIDA6IFx4ezEyMzR9CisKKy8oKkNSTEYpKCpVVEYpKCpCU1JfVU5JQ09ERSlhXFJiL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogdXRmCitcUiBtYXRjaGVzIGFueSBVbmljb2RlIG5ld2xpbmUKK0ZvcmNlZCBuZXdsaW5lIGlzIENSTEYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvXGgvSSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDA5IFx4MjAgXHhjMiBceGUxIFx4ZTIgXHhlMyAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIEFCQ1x4ezA5fQorIDA6IFx4ezA5fQorICAgIEFCQ1x4ezIwfQorIDA6ICAKKyAgICBBQkNceHthMH0KKyAwOiBceHthMH0KKyAgICBBQkNceHsxNjgwfQorIDA6IFx4ezE2ODB9CisgICAgQUJDXHh7MTgwZX0KKyAwOiBceHsxODBlfQorICAgIEFCQ1x4ezIwMDB9CisgMDogXHh7MjAwMH0KKyAgICBBQkNceHsyMDJmfQorIDA6IFx4ezIwMmZ9CisgICAgQUJDXHh7MjA1Zn0KKyAwOiBceHsyMDVmfQorICAgIEFCQ1x4ezMwMDB9CisgMDogXHh7MzAwMH0KKworL1x2L0ksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwYSBceDBiIFx4MGMgXHgwZCBceGMyIFx4ZTIgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBBQkNceHswYX0KKyAwOiBceHswYX0KKyAgICBBQkNceHswYn0KKyAwOiBceHswYn0KKyAgICBBQkNceHswY30KKyAwOiBceHswY30KKyAgICBBQkNceHswZH0KKyAwOiBceHswZH0KKyAgICBBQkNceHs4NX0KKyAwOiBceHs4NX0KKyAgICBBQkNceHsyMDI4fQorIDA6IFx4ezIwMjh9CisKKy9caCpBL0ksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDIwIEEgXHhjMiBceGUxIFx4ZTIgXHhlMyAKK0xhc3QgY29kZSB1bml0ID0gJ0EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBDREJBQkMKKyAwOiBBCisKKy9cditBL0ksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwYSBceDBiIFx4MGMgXHgwZCBceGMyIFx4ZTIgCitMYXN0IGNvZGUgdW5pdCA9ICdBJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9ccz94eHhccy9JLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDkgXHgwYSBceDBiIFx4MGMgXHgwZCBceDIwIHggCitMYXN0IGNvZGUgdW5pdCA9ICd4JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisKKy9cc3h4eFxzL0ksdXRmLHRhYmxlcz0yCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDBhIFx4MGIgXHgwYyBceDBkIFx4MjAgXHhjMiAKK0xhc3QgY29kZSB1bml0ID0gJ3gnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDUKKyAgICBBQlx4ezg1fXh4eFx4e2EwfVhZWgorIDA6IFx4ezg1fXh4eFx4e2EwfQorICAgIEFCXHh7YTB9eHh4XHh7ODV9WFlaCisgMDogXHh7YTB9eHh4XHh7ODV9CisKKy9cUyBcUy9JLHV0Zix0YWJsZXM9MgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDAgXHgwMSBceDAyIFx4MDMgXHgwNCBceDA1IFx4MDYgXHgwNyBceDA4IFx4MGUgXHgwZiAKKyAgXHgxMCBceDExIFx4MTIgXHgxMyBceDE0IFx4MTUgXHgxNiBceDE3IFx4MTggXHgxOSBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgCisgIFx4MWYgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIAorICBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFogWyBcIF0gXiBfIGAgYSBiIGMgZCBlIGYgZyBoIAorICBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiB7IHwgfSB+IFx4N2YgXHhjMCBceGMxIFx4YzIgXHhjMyBceGM0IAorICBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgXHhkMCBceGQxIFx4ZDIgXHhkMyAKKyAgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIFx4ZGYgXHhlMCBceGUxIFx4ZTIgCisgIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCBceGVlIFx4ZWYgXHhmMCBceGYxIAorICBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgXHhmZCBceGZlIFx4ZmYgCitMYXN0IGNvZGUgdW5pdCA9ICcgJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgXHh7YTJ9IFx4ezg0fQorIDA6IFx4e2EyfSBceHs4NH0KKyAgICBBIFoKKyAwOiBBIFoKKworL2ErL3V0ZgorICAgIGFceHsxMjN9YWFcPW9mZnNldD0xCisgMDogYWEKKyAgICBhXHh7MTIzfWFhXD1vZmZzZXQ9MworIDA6IGFhCisgICAgYVx4ezEyM31hYVw9b2Zmc2V0PTQKKyAwOiBhCitcPSBFeHBlY3QgYmFkIG9mZnNldCB2YWx1ZQorICAgIGFceHsxMjN9YWFcPW9mZnNldD02CitGYWlsZWQ6IGVycm9yIC0zMzogYmFkIG9mZnNldCB2YWx1ZQorXD0gRXhwZWN0IGJhZCBVVEYtOCBvZmZzZXQgICAgIAorICAgIGFceHsxMjN9YWFcPW9mZnNldD0yCitFcnJvciAtMzYgKGJhZCBVVEYtOCBvZmZzZXQpCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MTIzfWFhXD1vZmZzZXQ9NQorTm8gbWF0Y2gKKworL1x4ezEyMzR9Ky9JaSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MgdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceGUxIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMjM0fSs/L0lpLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4ZTEgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEyMzR9KysvSWksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHhlMSAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTIzNH17Mn0vSWksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHhlMSAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvW15ceHtjNH1dL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXlx4e2M0fV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9YK1x4ezIwMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFgrKworICAgICAgICBceHsyMDB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdYJworTGFzdCBjb2RlIHVuaXQgPSBceDgwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworL1xSL0ksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwYSBceDBiIFx4MGMgXHgwZCBceGMyIFx4ZTIgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1w3NzcvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezFmZn0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhjNworTGFzdCBjb2RlIHVuaXQgPSBceGJmCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x3K1x4e0M0fS9CLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcdysrCisgICAgICAgIFx4e2M0fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBhXHh7QzR9XHh7QzR9CisgMDogYVx4e2M0fQorCisvXHcrXHh7QzR9L0IsdXRmLHRhYmxlcz0yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx3KworICAgICAgICBceHtjNH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYVx4e0M0fVx4e0M0fQorIDA6IGFceHtjNH1ceHtjNH0KKworL1xXK1x4e0M0fS9CLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcVysKKyAgICAgICAgXHh7YzR9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICFceHtDNH0KKyAwOiAhXHh7YzR9CisKKy9cVytceHtDNH0vQix1dGYsdGFibGVzPTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFcrKworICAgICAgICBceHtjNH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIVx4e0M0fQorIDA6ICFceHtjNH0KKworL1xXK1x4e0ExfS9CLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcVysKKyAgICAgICAgXHh7YTF9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICFceHtBMX0KKyAwOiAhXHh7YTF9CisKKy9cVytceHtBMX0vQix1dGYsdGFibGVzPTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFcrCisgICAgICAgIFx4e2ExfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAhXHh7QTF9CisgMDogIVx4e2ExfQorCisvWFxzK1x4e0EwfS9CLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBYCisgICAgICAgIFxzKysKKyAgICAgICAgXHh7YTB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFhceDIwXHh7QTB9XHh7QTB9CisgMDogWCBceHthMH0KKworL1hccytceHtBMH0vQix1dGYsdGFibGVzPTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgWAorICAgICAgICBccysKKyAgICAgICAgXHh7YTB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFhceDIwXHh7QTB9XHh7QTB9CisgMDogWCBceHthMH1ceHthMH0KKworL1xTK1x4e0EwfS9CLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcUysKKyAgICAgICAgXHh7YTB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFhceHtBMH1ceHtBMH0KKyAwOiBYXHh7YTB9XHh7YTB9CisKKy9cUytceHtBMH0vQix1dGYsdGFibGVzPTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFMrKworICAgICAgICBceHthMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgWFx4e0EwfVx4e0EwfQorIDA6IFhceHthMH0KKworL1x4e2EwfStccyEvQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7YTB9KysKKyAgICAgICAgXHMKKyAgICAgICAgIQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBceHthMH1ceDIwIQorIDA6IFx4e2EwfSAhCisKKy9ceHthMH0rXHMhL0IsdXRmLHRhYmxlcz0yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4e2EwfSsKKyAgICAgICAgXHMKKyAgICAgICAgIQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBceHthMH1ceDIwIQorIDA6IFx4e2EwfSAhCisKKy9BL3V0ZgorICBceHtmZjAwMDA0MX0KKyoqIENoYXJhY3RlciBceHtmZjAwMDA0MX0gaXMgZ3JlYXRlciB0aGFuIDB4N2ZmZmZmZmYgYW5kIHNvIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gVVRGLTgKKyAgXHh7N2YwMDAwNDF9CitGYWlsZWQ6IGVycm9yIC0xNDogVVRGLTggZXJyb3I6IDYtYnl0ZSBjaGFyYWN0ZXIgaXMgbm90IGFsbG93ZWQgKFJGQyAzNjI5KSBhdCBvZmZzZXQgMAorCisvKCpVVEY4KWFiYy9uZXZlcl91dGYKK0ZhaWxlZDogZXJyb3IgMTc0IGF0IG9mZnNldCA3OiB1c2luZyBVVEYgaXMgZGlzYWJsZWQgYnkgdGhlIGFwcGxpY2F0aW9uCisKKy9hYmMvdXRmLG5ldmVyX3V0ZgorRmFpbGVkOiBlcnJvciAxNzQgYXQgb2Zmc2V0IDA6IHVzaW5nIFVURiBpcyBkaXNhYmxlZCBieSB0aGUgYXBwbGljYXRpb24KKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS9JQmksdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MgdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnQScgKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnQScKK0xhc3QgY29kZSB1bml0ID0gXHhiMAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisKKy9BQlx4ezFmYjB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBBQlx4ezFmYjB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdBJworTGFzdCBjb2RlIHVuaXQgPSBceGIwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL0FCXHh7MWZiMH0vSUJpLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAvaSBBQlx4ezFmYjB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdBJyAoY2FzZWxlc3MpCitMYXN0IGNvZGUgdW5pdCA9ICdCJyAoY2FzZWxlc3MpCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL1x4ezQwMX1ceHs0MjB9XHh7NDIxfVx4ezQyMn1ceHs0MjN9XHh7NDI0fVx4ezQyNX1ceHs0MjZ9XHh7NDI3fVx4ezQyOH1ceHs0Mjl9XHh7NDJhfVx4ezQyYn1ceHs0MmN9XHh7NDJkfVx4ezQyZX1ceHs0MmZ9L0lpLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4ZDAgXHhkMSAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMTcKKyAgICBceHs0MDF9XHh7NDIwfVx4ezQyMX1ceHs0MjJ9XHh7NDIzfVx4ezQyNH1ceHs0MjV9XHh7NDI2fVx4ezQyN31ceHs0Mjh9XHh7NDI5fVx4ezQyYX1ceHs0MmJ9XHh7NDJjfVx4ezQyZH1ceHs0MmV9XHh7NDJmfQorIDA6IFx4ezQwMX1ceHs0MjB9XHh7NDIxfVx4ezQyMn1ceHs0MjN9XHh7NDI0fVx4ezQyNX1ceHs0MjZ9XHh7NDI3fVx4ezQyOH1ceHs0Mjl9XHh7NDJhfVx4ezQyYn1ceHs0MmN9XHh7NDJkfVx4ezQyZX1ceHs0MmZ9CisgICAgXHh7NDUxfVx4ezQ0MH1ceHs0NDF9XHh7NDQyfVx4ezQ0M31ceHs0NDR9XHh7NDQ1fVx4ezQ0Nn1ceHs0NDd9XHh7NDQ4fVx4ezQ0OX1ceHs0NGF9XHh7NDRifVx4ezQ0Y31ceHs0NGR9XHh7NDRlfVx4ezQ0Zn0KKyAwOiBceHs0NTF9XHh7NDQwfVx4ezQ0MX1ceHs0NDJ9XHh7NDQzfVx4ezQ0NH1ceHs0NDV9XHh7NDQ2fVx4ezQ0N31ceHs0NDh9XHh7NDQ5fVx4ezQ0YX1ceHs0NGJ9XHh7NDRjfVx4ezQ0ZH1ceHs0NGV9XHh7NDRmfQorCisvW+KxpV0vQmksdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIFx4ezJjNjV9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW17isaVdL0JpLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAvaSBbXlx4ezJjNjV9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xoL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDIwIFx4YTAgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x2L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogXHgwYSBceDBiIFx4MGMgXHgwZCBceDg1IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9cUi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MGEgXHgwYiBceDBjIFx4MGQgXHg4NSAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvW1s6Ymxhbms6XV0vQix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4MDkgXHhhMF0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsyMTJhfSsvSWksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogSyBrIFx4ZTIgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBLS2trXHh7MjEyYX0KKyAwOiBLS2trXHh7MjEyYX0KKworL3MrL0lpLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFMgcyBceGM1IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgU1Nzc1x4ezE3Zn0KKyAwOiBTU3NzXHh7MTdmfQorCisvXHh7MTAwfSpBL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KisKKyAgICAgICAgQQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBBIFx4YzQgCitMYXN0IGNvZGUgdW5pdCA9ICdBJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgQQorIDA6IEEKKworL1x4ezEwMH0qXGQoP1IpL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KisKKyAgICAgICAgXGQKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIDEgMiAzIDQgNSA2IDcgOCA5IFx4YzQgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1taXHh7MTAwfV0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtaXHh7MTAwfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogWiBceGM0IFx4YzUgXHhjNiBceGM3IFx4YzggXHhjOSBceGNhIFx4Y2IgXHhjYyBceGNkIAorICBceGNlIFx4Y2YgXHhkMCBceGQxIFx4ZDIgXHhkMyBceGQ0IFx4ZDUgXHhkNiBceGQ3IFx4ZDggXHhkOSBceGRhIFx4ZGIgXHhkYyAKKyAgXHhkZCBceGRlIFx4ZGYgXHhlMCBceGUxIFx4ZTIgXHhlMyBceGU0IFx4ZTUgXHhlNiBceGU3IFx4ZTggXHhlOSBceGVhIFx4ZWIgCisgIFx4ZWMgXHhlZCBceGVlIFx4ZWYgXHhmMCBceGYxIFx4ZjIgXHhmMyBceGY0IFx4ZjUgXHhmNiBceGY3IFx4ZjggXHhmOSBceGZhIAorICBceGZiIFx4ZmMgXHhmZCBceGZlIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBaXHh7MTAwfQorIDA6IFoKKyAgICBceHsxMDB9CisgMDogXHh7MTAwfQorICAgIFx4ezEwMH1aCisgMDogXHh7MTAwfQorCisvW3otXHh7MTAwfV0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFt6LVx4ZmZceHsxMDB9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiB6IHsgfCB9IH4gXHg3ZiBceGMyIFx4YzMgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgCisgIFx4Y2EgXHhjYiBceGNjIFx4Y2QgXHhjZSBceGNmIFx4ZDAgXHhkMSBceGQyIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IAorICBceGQ5IFx4ZGEgXHhkYiBceGRjIFx4ZGQgXHhkZSBceGRmIFx4ZTAgXHhlMSBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyAKKyAgXHhlOCBceGU5IFx4ZWEgXHhlYiBceGVjIFx4ZWQgXHhlZSBceGVmIFx4ZjAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgCisgIFx4ZjcgXHhmOCBceGY5IFx4ZmEgXHhmYiBceGZjIFx4ZmQgXHhmZSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9belxRYS1kXcSAXEVdL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXC1cXWFkelx4ezEwMH1dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IC0gXSBhIGQgeiBceGM0IFx4YzUgXHhjNiBceGM3IFx4YzggXHhjOSBceGNhIFx4Y2IgXHhjYyAKKyAgXHhjZCBceGNlIFx4Y2YgXHhkMCBceGQxIFx4ZDIgXHhkMyBceGQ0IFx4ZDUgXHhkNiBceGQ3IFx4ZDggXHhkOSBceGRhIFx4ZGIgCisgIFx4ZGMgXHhkZCBceGRlIFx4ZGYgXHhlMCBceGUxIFx4ZTIgXHhlMyBceGU0IFx4ZTUgXHhlNiBceGU3IFx4ZTggXHhlOSBceGVhIAorICBceGViIFx4ZWMgXHhlZCBceGVlIFx4ZWYgXHhmMCBceGYxIFx4ZjIgXHhmMyBceGY0IFx4ZjUgXHhmNiBceGY3IFx4ZjggXHhmOSAKKyAgXHhmYSBceGZiIFx4ZmMgXHhmZCBceGZlIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBceHsxMDB9CisgMDogXHh7MTAwfQorICAgIMSAIAorIDA6IFx4ezEwMH0KKworL1thYlx4ezEwMH1dYWJjKHh5eig/MSkpL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYWJceHsxMDB9XQorICAgICAgICBhYmMKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIHh5egorICAgICAgICBSZWN1cnNlCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCAKKyAgXHhjZSBceGNmIFx4ZDAgXHhkMSBceGQyIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgCisgIFx4ZGQgXHhkZSBceGRmIFx4ZTAgXHhlMSBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIAorICBceGVjIFx4ZWQgXHhlZSBceGVmIFx4ZjAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSAKKyAgXHhmYiBceGZjIFx4ZmQgXHhmZSBceGZmIAorTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNworCisvXHh7MTAwfSpccy9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwfSorCisgICAgICAgIFxzCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDkgXHgwYSBceDBiIFx4MGMgXHgwZCBceDIwIFx4YzQgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMH0qXGQvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0qKworICAgICAgICBcZAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIDEgMiAzIDQgNSA2IDcgOCA5IFx4YzQgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMH0qXHcvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0qKworICAgICAgICBcdworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIDEgMiAzIDQgNSA2IDcgOCA5IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgCisgIFEgUiBTIFQgVSBWIFcgWCBZIFogXyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogCisgIFx4YzQgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMH0qXEQvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0qCisgICAgICAgIFxECisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDAgXHgwMSBceDAyIFx4MDMgXHgwNCBceDA1IFx4MDYgXHgwNyBceDA4IFx4MDkgXHgwYSAKKyAgXHgwYiBceDBjIFx4MGQgXHgwZSBceDBmIFx4MTAgXHgxMSBceDEyIFx4MTMgXHgxNCBceDE1IFx4MTYgXHgxNyBceDE4IFx4MTkgCisgIFx4MWEgXHgxYiBceDFjIFx4MWQgXHgxZSBceDFmIFx4MjAgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gOiA7IDwgPSA+IAorICA/IEAgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaIFsgXCBdIF4gXyBgIGEgYiBjIAorICBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogeyB8IH0gfiBceDdmIFx4YzAgXHhjMSBceGMyIAorICBceGMzIFx4YzQgXHhjNSBceGM2IFx4YzcgXHhjOCBceGM5IFx4Y2EgXHhjYiBceGNjIFx4Y2QgXHhjZSBceGNmIFx4ZDAgXHhkMSAKKyAgXHhkMiBceGQzIFx4ZDQgXHhkNSBceGQ2IFx4ZDcgXHhkOCBceGQ5IFx4ZGEgXHhkYiBceGRjIFx4ZGQgXHhkZSBceGRmIFx4ZTAgCisgIFx4ZTEgXHhlMiBceGUzIFx4ZTQgXHhlNSBceGU2IFx4ZTcgXHhlOCBceGU5IFx4ZWEgXHhlYiBceGVjIFx4ZWQgXHhlZSBceGVmIAorICBceGYwIFx4ZjEgXHhmMiBceGYzIFx4ZjQgXHhmNSBceGY2IFx4ZjcgXHhmOCBceGY5IFx4ZmEgXHhmYiBceGZjIFx4ZmQgXHhmZSAKKyAgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTAwfSpcUy9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwfSoKKyAgICAgICAgXFMKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwMCBceDAxIFx4MDIgXHgwMyBceDA0IFx4MDUgXHgwNiBceDA3IFx4MDggXHgwZSBceDBmIAorICBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IFx4MWEgXHgxYiBceDFjIFx4MWQgXHgxZSAKKyAgXHgxZiAhICIgIyAkICUgJiAnICggKSAqICsgLCAtIC4gLyAwIDEgMiAzIDQgNSA2IDcgOCA5IDogOyA8ID0gPiA/IEAgQSBCIEMgCisgIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gYCBhIGIgYyBkIGUgZiBnIGggCisgIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IHsgfCB9IH4gXHg3ZiBceGMwIFx4YzEgXHhjMiBceGMzIFx4YzQgCisgIFx4YzUgXHhjNiBceGM3IFx4YzggXHhjOSBceGNhIFx4Y2IgXHhjYyBceGNkIFx4Y2UgXHhjZiBceGQwIFx4ZDEgXHhkMiBceGQzIAorICBceGQ0IFx4ZDUgXHhkNiBceGQ3IFx4ZDggXHhkOSBceGRhIFx4ZGIgXHhkYyBceGRkIFx4ZGUgXHhkZiBceGUwIFx4ZTEgXHhlMiAKKyAgXHhlMyBceGU0IFx4ZTUgXHhlNiBceGU3IFx4ZTggXHhlOSBceGVhIFx4ZWIgXHhlYyBceGVkIFx4ZWUgXHhlZiBceGYwIFx4ZjEgCisgIFx4ZjIgXHhmMyBceGY0IFx4ZjUgXHhmNiBceGY3IFx4ZjggXHhmOSBceGZhIFx4ZmIgXHhmYyBceGZkIFx4ZmUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTAwfSpcVy9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwfSoKKyAgICAgICAgXFcKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwMCBceDAxIFx4MDIgXHgwMyBceDA0IFx4MDUgXHgwNiBceDA3IFx4MDggXHgwOSBceDBhIAorICBceDBiIFx4MGMgXHgwZCBceDBlIFx4MGYgXHgxMCBceDExIFx4MTIgXHgxMyBceDE0IFx4MTUgXHgxNiBceDE3IFx4MTggXHgxOSAKKyAgXHgxYSBceDFiIFx4MWMgXHgxZCBceDFlIFx4MWYgXHgyMCAhICIgIyAkICUgJiAnICggKSAqICsgLCAtIC4gLyA6IDsgPCA9ID4gCisgID8gQCBbIFwgXSBeIGAgeyB8IH0gfiBceDdmIFx4YzAgXHhjMSBceGMyIFx4YzMgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgCisgIFx4Y2EgXHhjYiBceGNjIFx4Y2QgXHhjZSBceGNmIFx4ZDAgXHhkMSBceGQyIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IAorICBceGQ5IFx4ZGEgXHhkYiBceGRjIFx4ZGQgXHhkZSBceGRmIFx4ZTAgXHhlMSBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyAKKyAgXHhlOCBceGU5IFx4ZWEgXHhlYiBceGVjIFx4ZWQgXHhlZSBceGVmIFx4ZjAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgCisgIFx4ZjcgXHhmOCBceGY5IFx4ZmEgXHhmYiBceGZjIFx4ZmQgXHhmZSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bXHh7MTA1fS1ceHsxMDl9XS9JQmksdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtceHsxMDR9LVx4ezEwOX1dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4YzQgXHhjNSBceGM2IFx4YzcgXHhjOCBceGM5IFx4Y2EgXHhjYiBceGNjIFx4Y2QgXHhjZSAKKyAgXHhjZiBceGQwIFx4ZDEgXHhkMiBceGQzIFx4ZDQgXHhkNSBceGQ2IFx4ZDcgXHhkOCBceGQ5IFx4ZGEgXHhkYiBceGRjIFx4ZGQgCisgIFx4ZGUgXHhkZiBceGUwIFx4ZTEgXHhlMiBceGUzIFx4ZTQgXHhlNSBceGU2IFx4ZTcgXHhlOCBceGU5IFx4ZWEgXHhlYiBceGVjIAorICBceGVkIFx4ZWUgXHhlZiBceGYwIFx4ZjEgXHhmMiBceGYzIFx4ZjQgXHhmNSBceGY2IFx4ZjcgXHhmOCBceGY5IFx4ZmEgXHhmYiAKKyAgXHhmYyBceGZkIFx4ZmUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4ezEwNH0KKyAwOiBceHsxMDR9CisgICAgXHh7MTA1fQorIDA6IFx4ezEwNX0KKyAgICBceHsxMDl9ICAKKyAwOiBceHsxMDl9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9CitObyBtYXRjaAorICAgIFx4ezEwYX0gCitObyBtYXRjaAorICAgIAorL1t6LVx4ezEwMH1dL0lCaSx1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1p6LVx4ZmZceHszOWN9XHh7M2JjfVx4ezIxMmJ9XHh7MWU5ZX1ceHsyMTJifVx4ezE3OH1ceHsxMDB9LVx4ezEwMX1dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFogeiB7IHwgfSB+IFx4N2YgXHhjMiBceGMzIFx4YzQgXHhjNSBceGM2IFx4YzcgXHhjOCAKKyAgXHhjOSBceGNhIFx4Y2IgXHhjYyBceGNkIFx4Y2UgXHhjZiBceGQwIFx4ZDEgXHhkMiBceGQzIFx4ZDQgXHhkNSBceGQ2IFx4ZDcgCisgIFx4ZDggXHhkOSBceGRhIFx4ZGIgXHhkYyBceGRkIFx4ZGUgXHhkZiBceGUwIFx4ZTEgXHhlMiBceGUzIFx4ZTQgXHhlNSBceGU2IAorICBceGU3IFx4ZTggXHhlOSBceGVhIFx4ZWIgXHhlYyBceGVkIFx4ZWUgXHhlZiBceGYwIFx4ZjEgXHhmMiBceGYzIFx4ZjQgXHhmNSAKKyAgXHhmNiBceGY3IFx4ZjggXHhmOSBceGZhIFx4ZmIgXHhmYyBceGZkIFx4ZmUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFoKKyAwOiBaCisgICAgegorIDA6IHoKKyAgICBceHszOWN9CisgMDogXHh7MzljfQorICAgIFx4ezE3OH0KKyAwOiBceHsxNzh9CisgICAgfAorIDA6IHwKKyAgICBceHs4MH0KKyAwOiBceHs4MH0KKyAgICBceHtmZn0KKyAwOiBceHtmZn0KKyAgICBceHsxMDB9CisgMDogXHh7MTAwfQorICAgIFx4ezEwMX0gCisgMDogXHh7MTAxfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MTAyfQorTm8gbWF0Y2gKKyAgICBZCitObyBtYXRjaAorICAgIHkgICAgICAgICAgIAorTm8gbWF0Y2gKKworL1t6LVx4ezEwMH1dL0lCaSx1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1p6LVx4ZmZceHszOWN9XHh7M2JjfVx4ezIxMmJ9XHh7MWU5ZX1ceHsyMTJifVx4ezE3OH1ceHsxMDB9LVx4ezEwMX1dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFogeiB7IHwgfSB+IFx4N2YgXHhjMiBceGMzIFx4YzQgXHhjNSBceGM2IFx4YzcgXHhjOCAKKyAgXHhjOSBceGNhIFx4Y2IgXHhjYyBceGNkIFx4Y2UgXHhjZiBceGQwIFx4ZDEgXHhkMiBceGQzIFx4ZDQgXHhkNSBceGQ2IFx4ZDcgCisgIFx4ZDggXHhkOSBceGRhIFx4ZGIgXHhkYyBceGRkIFx4ZGUgXHhkZiBceGUwIFx4ZTEgXHhlMiBceGUzIFx4ZTQgXHhlNSBceGU2IAorICBceGU3IFx4ZTggXHhlOSBceGVhIFx4ZWIgXHhlYyBceGVkIFx4ZWUgXHhlZiBceGYwIFx4ZjEgXHhmMiBceGYzIFx4ZjQgXHhmNSAKKyAgXHhmNiBceGY3IFx4ZjggXHhmOSBceGZhIFx4ZmIgXHhmYyBceGZkIFx4ZmUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7M2EzfUIvSUJpLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBjbGlzdCAwM2EzIDAzYzIgMDNjMworICAgICAvaSBCCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4Y2UgXHhjZiAKK0xhc3QgY29kZSB1bml0ID0gJ0InIChjYXNlbGVzcykKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvYWJjL3V0ZixyZXBsYWNlPcMKKyAgICBhYmMKK0ZhaWxlZDogZXJyb3IgLTM6IFVURi04IGVycm9yOiAxIGJ5dGUgbWlzc2luZyBhdCBlbmQKKworLyg/PD0oYSkoPy0xKSl4L0ksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBsb29rYmVoaW5kID0gMgorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAneCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIGFceDgwenhcPW9mZnNldD0zCitGYWlsZWQ6IGVycm9yIC0yMjogVVRGLTggZXJyb3I6IGlzb2xhdGVkIGJ5dGUgd2l0aCAweDgwIGJpdCBzZXQgYXQgb2Zmc2V0IDEKKworIyBFbmQgb2YgdGVzdGlucHV0MTAKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxMS0xNiBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxMS0xNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2UwNGJjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDExLTE2CkBAIC0wLDAgKzEsNjQ2IEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciB0aGUgMTYtYml0IGFuZCAzMi1iaXQgbGlicmFyaWVzJyBiYXNpYyAobm9uLVVURikKKyMgZmVhdHVyZXMgdGhhdCBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgOC1iaXQgbGlicmFyeSwgb3Igd2hpY2ggZ2l2ZQorIyBkaWZmZXJlbnQgb3V0cHV0IGluIDE2LWJpdCBvciAzMi1iaXQgbW9kZS4gVGhlIG91dHB1dCBmb3IgdGhlIHR3byB3aWR0aHMgaXMKKyMgZGlmZmVyZW50LCBzbyB0aGV5IGhhdmUgc2VwYXJhdGUgb3V0cHV0IGZpbGVzLgorICAgIAorI2ZvcmJpZF91dGYKKyNuZXdsaW5lX2RlZmF1bHQgTEYgQU5ZIEFOWUNSTEYKKworL1teXHh7YzR9XS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXlx4e2M0fV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAKKy9ceHsxMDB9L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gXHh7MTAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8gICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCBsZWFkaW5nIGNvbW1lbnQKKyg/OiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgd29yZAorKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICApKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGEgcGVyaW9kCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisjIGFkZHJlc3MKK3wgICAgICAgICAgICAgICAgICAgICAjICBvcgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgICAgICAgICAgICAjIG9uZSB3b3JkLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5Li4uLgorKD86CitbXigpPD5ALDs6Ii5cXFxbXF1ceDgwLVx4ZmZcMDAwLVwwMTBcMDEyLVwwMzddICB8ICAjIGF0b20gYW5kIHNwYWNlIHBhcnRzLCBvci4uLgorXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgICAgICB8ICAjIGNvbW1lbnRzLCBvci4uLgorCisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCisjIHF1b3RlZCBzdHJpbmdzCispKgorPCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICAgICAgICAgICAgICAgICAgIyBsZWFkaW5nIDwKKyg/OiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKworKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICwgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKykqICMgZnVydGhlciBva2F5LCBpZiBsZWQgYnkgY29tbWEKKzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xvc2luZyBjb2xvbgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICApPyAjICAgICAgIG9wdGlvbmFsIHJvdXRlCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgd29yZAorKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICApKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGEgcGVyaW9kCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisjICAgICAgIGFkZHJlc3Mgc3BlYworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICA+ICMgICAgICAgICAgICAgICAgICB0cmFpbGluZyA+CisjIG5hbWUgYW5kIGFkZHJlc3MKKykgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50CisvSXgKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29udGFpbnMgZXhwbGljaXQgQ1Igb3IgTEYgbWF0Y2gKK09wdGlvbnM6IGV4dGVuZGVkCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDA5IFx4MjAgISAiICMgJCAlICYgJyAoICogKyAtIC8gMCAxIDIgMyA0IDUgNiA3IDggCisgIDkgPSA/IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBeIF8gYCBhIGIgYyBkIGUgCisgIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IHsgfCB9IH4gXHg3ZiBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9bXGhdL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4MDkgXHhhMFx4ezE2ODB9XHh7MTgwZX1ceHsyMDAwfS1ceHsyMDBhfVx4ezIwMmZ9XHh7MjA1Zn1ceHszMDAwfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgPlx4MDk8CisgMDogXHgwOQorCisvW1xoXSsvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwOSBceGEwXHh7MTY4MH1ceHsxODBlfVx4ezIwMDB9LVx4ezIwMGF9XHh7MjAyZn1ceHsyMDVmfVx4ezMwMDB9XSsrCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgID5ceDA5XHgyMFx4YTA8CisgMDogXHgwOSBceGEwCisKKy9bXHZdL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4MGEtXHgwZFx4ODVceHsyMDI4fS1ceHsyMDI5fV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXlxoXS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFteXHgwOSBceGEwXHh7MTY4MH1ceHsxODBlfVx4ezIwMDB9LVx4ezIwMGF9XHh7MjAyZn1ceHsyMDVmfVx4ezMwMDB9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xoKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDkgXHgyMCBceGEwIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBceHsxNjgxfVx4ezIwMGJ9XHh7MTY4MH1ceHsyMDAwfVx4ezIwMmZ9XHh7MzAwMH0KKyAwOiBceHsxNjgwfVx4ezIwMDB9XHh7MjAyZn1ceHszMDAwfQorICAgIFx4ezMwMDF9XHh7MmZmZn1ceHsyMDBhfVx4YTBceHsyMDAwfQorIDA6IFx4ezIwMGF9XHhhMFx4ezIwMDB9CisKKy9bXGhceHtkYzAwfV0rL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtceDA5IFx4YTBceHsxNjgwfVx4ezE4MGV9XHh7MjAwMH0tXHh7MjAwYX1ceHsyMDJmfVx4ezIwNWZ9XHh7MzAwMH1ceHtkYzAwfV0rKworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDIwIFx4YTAgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4ezE2ODF9XHh7MjAwYn1ceHsxNjgwfVx4ezIwMDB9XHh7MjAyZn1ceHszMDAwfQorIDA6IFx4ezE2ODB9XHh7MjAwMH1ceHsyMDJmfVx4ezMwMDB9CisgICAgXHh7MzAwMX1ceHsyZmZmfVx4ezIwMGF9XHhhMFx4ezIwMDB9CisgMDogXHh7MjAwYX1ceGEwXHh7MjAwMH0KKworL1xIKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4ezE2ODB9XHh7MTgwZX1ceHsxNjdmfVx4ezE2ODF9XHh7MTgwZH1ceHsxODBmfQorIDA6IFx4ezE2N2Z9XHh7MTY4MX1ceHsxODBkfVx4ezE4MGZ9CisgICAgXHh7MjAwMH1ceHsyMDBhfVx4ezFmZmZ9XHh7MjAwYn0KKyAwOiBceHsxZmZmfVx4ezIwMGJ9CisgICAgXHh7MjAyZn1ceHsyMDVmfVx4ezIwMmV9XHh7MjAzMH1ceHsyMDVlfVx4ezIwNjB9CisgMDogXHh7MjAyZX1ceHsyMDMwfVx4ezIwNWV9XHh7MjA2MH0KKyAgICBceGEwXHh7MzAwMH1ceDlmXHhhMVx4ezJmZmZ9XHh7MzAwMX0KKyAwOiBceDlmXHhhMVx4ezJmZmZ9XHh7MzAwMX0KKworL1tcSFx4e2Q4MDB9XSsvCisgICAgXHh7MTY4MH1ceHsxODBlfVx4ezE2N2Z9XHh7MTY4MX1ceHsxODBkfVx4ezE4MGZ9CisgMDogXHh7MTY3Zn1ceHsxNjgxfVx4ezE4MGR9XHh7MTgwZn0KKyAgICBceHsyMDAwfVx4ezIwMGF9XHh7MWZmZn1ceHsyMDBifQorIDA6IFx4ezFmZmZ9XHh7MjAwYn0KKyAgICBceHsyMDJmfVx4ezIwNWZ9XHh7MjAyZX1ceHsyMDMwfVx4ezIwNWV9XHh7MjA2MH0KKyAwOiBceHsyMDJlfVx4ezIwMzB9XHh7MjA1ZX1ceHsyMDYwfQorICAgIFx4YTBceHszMDAwfVx4OWZceGExXHh7MmZmZn1ceHszMDAxfQorIDA6IFx4OWZceGExXHh7MmZmZn1ceHszMDAxfQorCisvXHYrL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogXHgwYSBceDBiIFx4MGMgXHgwZCBceDg1IFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBceHsyMDI3fVx4ezIwMzB9XHh7MjAyOH1ceHsyMDI5fQorIDA6IFx4ezIwMjh9XHh7MjAyOX0KKyAgICBceDA5XHgwZVx4ODRceDg2XHg4NVx4MGFceDBiXHgwY1x4MGQKKyAwOiBceDg1XHgwYVx4MGJceDBjXHgwZAorCisvW1x2XHh7ZGMwMH1dKy9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwYS1ceDBkXHg4NVx4ezIwMjh9LVx4ezIwMjl9XHh7ZGMwMH1dKysKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MGEgXHgwYiBceDBjIFx4MGQgXHg4NSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgXHh7MjAyN31ceHsyMDMwfVx4ezIwMjh9XHh7MjAyOX0KKyAwOiBceHsyMDI4fVx4ezIwMjl9CisgICAgXHgwOVx4MGVceDg0XHg4Nlx4ODVceDBhXHgwYlx4MGNceDBkCisgMDogXHg4NVx4MGFceDBiXHgwY1x4MGQKKworL1xWKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4ezIwMjh9XHh7MjAyOX1ceHsyMDI3fVx4ezIwMzB9CisgMDogXHh7MjAyN31ceHsyMDMwfQorICAgIFx4ODVceDBhXHgwYlx4MGNceDBkXHgwOVx4MGVceDg0XHg4NgorIDA6IFx4MDlceDBlXHg4NFx4ODYKKworL1tcVlx4e2Q4MDB9XSsvCisgICAgXHh7MjAyOH1ceHsyMDI5fVx4ezIwMjd9XHh7MjAzMH0KKyAwOiBceHsyMDI3fVx4ezIwMzB9CisgICAgXHg4NVx4MGFceDBiXHgwY1x4MGRceDA5XHgwZVx4ODRceDg2CisgMDogXHgwOVx4MGVceDg0XHg4NgorCisvXFIrL0ksYnNyPXVuaWNvZGUKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorXFIgbWF0Y2hlcyBhbnkgVW5pY29kZSBuZXdsaW5lCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDBhIFx4MGIgXHgwYyBceDBkIFx4ODUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4ezIwMjd9XHh7MjAzMH1ceHsyMDI4fVx4ezIwMjl9CisgMDogXHh7MjAyOH1ceHsyMDI5fQorICAgIFx4MDlceDBlXHg4NFx4ODZceDg1XHgwYVx4MGJceDBjXHgwZAorIDA6IFx4ODVceDBhXHgwYlx4MGNceDBkCisKKy9ceHtkODAwfVx4e2Q3ZmZ9XHh7ZGMwMH1ceHtkYzAwfVx4e2RjZmZ9XHh7ZGQwMH0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSBceHtkODAwfQorTGFzdCBjb2RlIHVuaXQgPSBceHtkZDAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA2CisgICAgXHh7ZDgwMH1ceHtkN2ZmfVx4e2RjMDB9XHh7ZGMwMH1ceHtkY2ZmfVx4e2RkMDB9CisgMDogXHh7ZDgwMH1ceHtkN2ZmfVx4e2RjMDB9XHh7ZGMwMH1ceHtkY2ZmfVx4e2RkMDB9CisKKy9bXlx4ezgwfV1bXlx4e2ZmfV1bXlx4ezEwMH1dW15ceHsxMDAwfV1bXlx4e2ZmZmZ9XS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFteXHh7ODB9XQorICAgICAgICBbXlx4e2ZmfV0KKyAgICAgICAgW15ceHsxMDB9XQorICAgICAgICBbXlx4ezEwMDB9XQorICAgICAgICBbXlx4e2ZmZmZ9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHh7ODB9XVteXHh7ZmZ9XVteXHh7MTAwfV1bXlx4ezEwMDB9XVteXHh7ZmZmZn1dL0JpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIFteXHh7ODB9XQorICAgICAvaSBbXlx4e2ZmfV0KKyAgICAgL2kgW15ceHsxMDB9XQorICAgICAvaSBbXlx4ezEwMDB9XQorICAgICAvaSBbXlx4e2ZmZmZ9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHh7MTAwfV0qW15ceHsxMDAwfV0rW15ceHtmZmZmfV0/P1teXHh7ODAwMH1dezQsfVteXHh7N2ZmZn1dezIsOX0/W15ceHsxMDB9XXs1LDZ9Ky9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFteXHh7MTAwfV0qCisgICAgICAgIFteXHh7MTAwMH1dKworICAgICAgICBbXlx4e2ZmZmZ9XT8/CisgICAgICAgIFteXHh7ODAwMH1dezR9CisgICAgICAgIFteXHh7ODAwMH1dKgorICAgICAgICBbXlx4ezdmZmZ9XXsyfQorICAgICAgICBbXlx4ezdmZmZ9XXswLDd9PworICAgICAgICBbXlx4ezEwMH1dezV9CisgICAgICAgIFteXHh7MTAwfV0/KworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHh7MTAwfV0qW15ceHsxMDAwfV0rW15ceHtmZmZmfV0/P1teXHh7ODAwMH1dezQsfVteXHh7N2ZmZn1dezIsOX0/W15ceHsxMDB9XXs1LDZ9Ky9CaQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAvaSBbXlx4ezEwMH1dKgorICAgICAvaSBbXlx4ezEwMDB9XSsKKyAgICAgL2kgW15ceHtmZmZmfV0/PworICAgICAvaSBbXlx4ezgwMDB9XXs0fQorICAgICAvaSBbXlx4ezgwMDB9XSoKKyAgICAgL2kgW15ceHs3ZmZmfV17Mn0KKyAgICAgL2kgW15ceHs3ZmZmfV17MCw3fT8KKyAgICAgL2kgW15ceHsxMDB9XXs1fQorICAgICAvaSBbXlx4ezEwMH1dPysKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oKjowMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGKVhYL21hcmsKKyAgICBYWAorIDA6IFhYCitNSzogMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRgorICAgICAKKy8oKjowMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREUpWFgvbWFyaworICAgIFhYCisgMDogWFgKK01LOiAwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREUKKworL1x1MDEwMC9CLGFsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tcdTAxMDAtXHUwMjAwXS9CLGFsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4ezEwMH0tXHh7MjAwfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cdWQ4MDAvQixhbHRfYnN1eCxhbGxvd19lbXB0eV9jbGFzcyxtYXRjaF91bnNldF9iYWNrcmVmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4e2Q4MDB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXlx4e2ZmZmZ9Ky9pCisgICAgXHh7ZmZmZn0KKyAwOiBceHtmZmZmfQorCisvXlx4e2ZmZmZ9Py9pCisgICAgXHh7ZmZmZn0KKyAwOiBceHtmZmZmfQorCisvXlx4e2ZmZmZ9Ki9pCisgICAgXHh7ZmZmZn0KKyAwOiBceHtmZmZmfQorCisvXlx4e2ZmZmZ9ezN9L2kKKyAgICBceHtmZmZmfVx4e2ZmZmZ9XHh7ZmZmZn0KKyAwOiBceHtmZmZmfVx4e2ZmZmZ9XHh7ZmZmZn0KKworL15ceHtmZmZmfXswLDN9L2kKKyAgICBceHtmZmZmfQorIDA6IFx4e2ZmZmZ9CisKKy9bXlx4MDAtYV17MTIsfVteYi1ceGZmXSovQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYi1ceGZmXSAobmVnKXsxMix9CisgICAgICAgIFtceDAwLWFdIChuZWcpKisKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXlxzXSpccyogW15cV10rXFcrIFteXGRdKj9cZDAgW15cZFx3XXs0LDZ9P1x3KkEvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwMC1ceDA4XHgwZS1ceDFmIS1ceGZmXSAobmVnKSoKKyAgICAgICAgXHMqCisgICAgICAgICAKKyAgICAgICAgWzAtOUEtWl9hLXpdKysKKyAgICAgICAgXFcrCisgICAgICAgICAKKyAgICAgICAgW1x4MDAtLzotXHhmZl0gKG5lZykqPworICAgICAgICBcZAorICAgICAgICAwIAorICAgICAgICBbXHgwMC0vOi1AWy1eYHstXHhmZl0gKG5lZyl7NCw2fT8KKyAgICAgICAgXHcqCisgICAgICAgIEEKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hKltiLVx4ezIwMH1dP2EjYSpbYi1ceHsyMDB9XT9iI1thLWZdKltnLVx4ezIwMH1dKiNbZy1ceHsyMDB9XSpbYS1jXSojW2ctXHh7MjAwfV0qW2EtaF0qL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYSoKKyAgICAgICAgW2ItXHhmZlx4ezEwMH0tXHh7MjAwfV0/KworICAgICAgICBhIworICAgICAgICBhKisKKyAgICAgICAgW2ItXHhmZlx4ezEwMH0tXHh7MjAwfV0/CisgICAgICAgIGIjCisgICAgICAgIFthLWZdKisKKyAgICAgICAgW2ctXHhmZlx4ezEwMH0tXHh7MjAwfV0qKworICAgICAgICAjCisgICAgICAgIFtnLVx4ZmZceHsxMDB9LVx4ezIwMH1dKisKKyAgICAgICAgW2EtY10qKworICAgICAgICAjCisgICAgICAgIFtnLVx4ZmZceHsxMDB9LVx4ezIwMH1dKgorICAgICAgICBbYS1oXSorCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXltceHsxMjM0fVx4ezQzMjF9XXsyLDR9Py8KKyAgICBceHsxMjM0fVx4ezEyMzR9XHh7MTIzNH0KKyAwOiBceHsxMjM0fVx4ezEyMzR9CisKKyMgQ2hlY2sgbWF4aW11bSBub24tVVRGIGNoYXJhY3RlciBzaXplIGZvciB0aGUgMTYtYml0IGxpYnJhcnkuCisKKy9ceHtmZmZmfS8KKyAgICBBXHh7ZmZmZn1CCisgMDogXHh7ZmZmZn0KKworL1x4ezEwMDAwfS8KK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCA4OiBjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBceHt9IG9yIFxve30gaXMgdG9vIGxhcmdlCisKKy9cb3syMDAwMH0vCisKKyMgQ2hlY2sgbWF4aW11bSBjaGFyYWN0ZXIgc2l6ZSBmb3IgdGhlIDMyLWJpdCBsaWJyYXJ5LiBUaGVzZSB3aWxsIGFsbCBnaXZlCisjIGVycm9ycyBpbiB0aGUgMTYtYml0IGxpYnJhcnkuCisKKy9ceHsxMTAwMDB9LworRmFpbGVkOiBlcnJvciAxMzQgYXQgb2Zmc2V0IDk6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx4e30gb3IgXG97fSBpcyB0b28gbGFyZ2UKKworL1x4ezdmZmZmZmZmfS8KK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCAxMTogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisvXHh7ODAwMDAwMDB9LworRmFpbGVkOiBlcnJvciAxMzQgYXQgb2Zmc2V0IDExOiBjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBceHt9IG9yIFxve30gaXMgdG9vIGxhcmdlCisKKy9ceHtmZmZmZmZmZn0vCitGYWlsZWQ6IGVycm9yIDEzNCBhdCBvZmZzZXQgMTE6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx4e30gb3IgXG97fSBpcyB0b28gbGFyZ2UKKworL1x4ezEwMDAwMDAwMH0vCitGYWlsZWQ6IGVycm9yIDEzNCBhdCBvZmZzZXQgMTI6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx4e30gb3IgXG97fSBpcyB0b28gbGFyZ2UKKworL1xvezE3Nzc3Nzc3Nzc3fS8KK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCAxNDogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisvXG97MjAwMDAwMDAwMDB9LworRmFpbGVkOiBlcnJvciAxMzQgYXQgb2Zmc2V0IDE0OiBjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBceHt9IG9yIFxve30gaXMgdG9vIGxhcmdlCisKKy9cb3szNzc3Nzc3Nzc3N30vCitGYWlsZWQ6IGVycm9yIDEzNCBhdCBvZmZzZXQgMTQ6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx4e30gb3IgXG97fSBpcyB0b28gbGFyZ2UKKworL1xvezQwMDAwMDAwMDAwfS8KK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCAxNDogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisvXHh7N2ZmZmZmZmZ9XHh7N2ZmZmZmZmZ9L0kKK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCAxMTogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisvXHh7ODAwMDAwMDB9XHh7ODAwMDAwMDB9L0kKK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCAxMTogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisvXHh7ZmZmZmZmZmZ9XHh7ZmZmZmZmZmZ9L0kKK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCAxMTogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisjIE5vbi1VVEYgY2hhcmFjdGVycyAKKworLy57MiwzfS8KKyAgICBceHs0MDAwMDB9XHh7NDAwMDAxfVx4ezQwMDAwMn1ceHs0MDAwMDN9CisqKiBDaGFyYWN0ZXIgXHh7NDAwMDAwfSBpcyBncmVhdGVyIHRoYW4gMHhmZmZmIGFuZCBVVEYtMTYgbW9kZSBpcyBub3QgZW5hYmxlZC4KKyoqIFRydW5jYXRpb24gd2lsbCBwcm9iYWJseSBnaXZlIHRoZSB3cm9uZyByZXN1bHQuCisqKiBDaGFyYWN0ZXIgXHh7NDAwMDAxfSBpcyBncmVhdGVyIHRoYW4gMHhmZmZmIGFuZCBVVEYtMTYgbW9kZSBpcyBub3QgZW5hYmxlZC4KKyoqIFRydW5jYXRpb24gd2lsbCBwcm9iYWJseSBnaXZlIHRoZSB3cm9uZyByZXN1bHQuCisqKiBDaGFyYWN0ZXIgXHh7NDAwMDAyfSBpcyBncmVhdGVyIHRoYW4gMHhmZmZmIGFuZCBVVEYtMTYgbW9kZSBpcyBub3QgZW5hYmxlZC4KKyoqIFRydW5jYXRpb24gd2lsbCBwcm9iYWJseSBnaXZlIHRoZSB3cm9uZyByZXN1bHQuCisqKiBDaGFyYWN0ZXIgXHh7NDAwMDAzfSBpcyBncmVhdGVyIHRoYW4gMHhmZmZmIGFuZCBVVEYtMTYgbW9kZSBpcyBub3QgZW5hYmxlZC4KKyoqIFRydW5jYXRpb24gd2lsbCBwcm9iYWJseSBnaXZlIHRoZSB3cm9uZyByZXN1bHQuCisgMDogXHgwMFx4MDFceDAyCisKKy9ceHs0MDAwMDB9XHh7ODAwMDAwfS9JQmkKK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCA5OiBjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBceHt9IG9yIFxve30gaXMgdG9vIGxhcmdlCisKKyMgQ2hlY2sgY2hhcmFjdGVyIHJhbmdlcyAKKworL1tcSF0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4MDAtXHgwOFx4MGEtXHgxZiEtXHg5Zlx4YTEtXHhmZlx4ezEwMH0tXHh7MTY3Zn1ceHsxNjgxfS1ceHsxODBkfVx4ezE4MGZ9LVx4ezFmZmZ9XHh7MjAwYn0tXHh7MjAyZX1ceHsyMDMwfS1ceHsyMDVlfVx4ezIwNjB9LVx4ezJmZmZ9XHh7MzAwMX0tXHh7ZmZmZn1dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDBhIFx4MGIgCisgIFx4MGMgXHgwZCBceDBlIFx4MGYgXHgxMCBceDExIFx4MTIgXHgxMyBceDE0IFx4MTUgXHgxNiBceDE3IFx4MTggXHgxOSBceDFhIAorICBceDFiIFx4MWMgXHgxZCBceDFlIFx4MWYgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSAKKyAgOiA7IDwgPSA+ID8gQCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFogWyBcIF0gXiAKKyAgXyBgIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiB7IHwgfSB+IFx4N2YgXHg4MCAKKyAgXHg4MSBceDgyIFx4ODMgXHg4NCBceDg1IFx4ODYgXHg4NyBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgCisgIFx4OTAgXHg5MSBceDkyIFx4OTMgXHg5NCBceDk1IFx4OTYgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIAorICBceDlmIFx4YTEgXHhhMiBceGEzIFx4YTQgXHhhNSBceGE2IFx4YTcgXHhhOCBceGE5IFx4YWEgXHhhYiBceGFjIFx4YWQgXHhhZSAKKyAgXHhhZiBceGIwIFx4YjEgXHhiMiBceGIzIFx4YjQgXHhiNSBceGI2IFx4YjcgXHhiOCBceGI5IFx4YmEgXHhiYiBceGJjIFx4YmQgCisgIFx4YmUgXHhiZiBceGMwIFx4YzEgXHhjMiBceGMzIFx4YzQgXHhjNSBceGM2IFx4YzcgXHhjOCBceGM5IFx4Y2EgXHhjYiBceGNjIAorICBceGNkIFx4Y2UgXHhjZiBceGQwIFx4ZDEgXHhkMiBceGQzIFx4ZDQgXHhkNSBceGQ2IFx4ZDcgXHhkOCBceGQ5IFx4ZGEgXHhkYiAKKyAgXHhkYyBceGRkIFx4ZGUgXHhkZiBceGUwIFx4ZTEgXHhlMiBceGUzIFx4ZTQgXHhlNSBceGU2IFx4ZTcgXHhlOCBceGU5IFx4ZWEgCisgIFx4ZWIgXHhlYyBceGVkIFx4ZWUgXHhlZiBceGYwIFx4ZjEgXHhmMiBceGYzIFx4ZjQgXHhmNSBceGY2IFx4ZjcgXHhmOCBceGY5IAorICBceGZhIFx4ZmIgXHhmYyBceGZkIFx4ZmUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvW1xWXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwMC1ceDA5XHgwZS1ceDg0XHg4Ni1ceGZmXHh7MTAwfS1ceHsyMDI3fVx4ezIwMmF9LVx4e2ZmZmZ9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogXHgwMCBceDAxIFx4MDIgXHgwMyBceDA0IFx4MDUgXHgwNiBceDA3IFx4MDggXHgwOSBceDBlIAorICBceDBmIFx4MTAgXHgxMSBceDEyIFx4MTMgXHgxNCBceDE1IFx4MTYgXHgxNyBceDE4IFx4MTkgXHgxYSBceDFiIFx4MWMgXHgxZCAKKyAgXHgxZSBceDFmIFx4MjAgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSA6IDsgPCA9ID4gCisgID8gQCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFogWyBcIF0gXiBfIGAgYSBiIGMgCisgIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiB7IHwgfSB+IFx4N2YgXHg4MCBceDgxIFx4ODIgCisgIFx4ODMgXHg4NCBceDg2IFx4ODcgXHg4OCBceDg5IFx4OGEgXHg4YiBceDhjIFx4OGQgXHg4ZSBceDhmIFx4OTAgXHg5MSBceDkyIAorICBceDkzIFx4OTQgXHg5NSBceDk2IFx4OTcgXHg5OCBceDk5IFx4OWEgXHg5YiBceDljIFx4OWQgXHg5ZSBceDlmIFx4YTAgXHhhMSAKKyAgXHhhMiBceGEzIFx4YTQgXHhhNSBceGE2IFx4YTcgXHhhOCBceGE5IFx4YWEgXHhhYiBceGFjIFx4YWQgXHhhZSBceGFmIFx4YjAgCisgIFx4YjEgXHhiMiBceGIzIFx4YjQgXHhiNSBceGI2IFx4YjcgXHhiOCBceGI5IFx4YmEgXHhiYiBceGJjIFx4YmQgXHhiZSBceGJmIAorICBceGMwIFx4YzEgXHhjMiBceGMzIFx4YzQgXHhjNSBceGM2IFx4YzcgXHhjOCBceGM5IFx4Y2EgXHhjYiBceGNjIFx4Y2QgXHhjZSAKKyAgXHhjZiBceGQwIFx4ZDEgXHhkMiBceGQzIFx4ZDQgXHhkNSBceGQ2IFx4ZDcgXHhkOCBceGQ5IFx4ZGEgXHhkYiBceGRjIFx4ZGQgCisgIFx4ZGUgXHhkZiBceGUwIFx4ZTEgXHhlMiBceGUzIFx4ZTQgXHhlNSBceGU2IFx4ZTcgXHhlOCBceGU5IFx4ZWEgXHhlYiBceGVjIAorICBceGVkIFx4ZWUgXHhlZiBceGYwIFx4ZjEgXHhmMiBceGYzIFx4ZjQgXHhmNSBceGY2IFx4ZjcgXHhmOCBceGY5IFx4ZmEgXHhmYiAKKyAgXHhmYyBceGZkIFx4ZmUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKCpUSEVOOlxbQV17NjU1MDF9KS9leHBhbmQKKworIyBFbmQgb2YgdGVzdGlucHV0MTEKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxMS0zMiBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxMS0zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTBlYmUwCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDExLTMyCkBAIC0wLDAgKzEsNjQ5IEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciB0aGUgMTYtYml0IGFuZCAzMi1iaXQgbGlicmFyaWVzJyBiYXNpYyAobm9uLVVURikKKyMgZmVhdHVyZXMgdGhhdCBhcmUgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgOC1iaXQgbGlicmFyeSwgb3Igd2hpY2ggZ2l2ZQorIyBkaWZmZXJlbnQgb3V0cHV0IGluIDE2LWJpdCBvciAzMi1iaXQgbW9kZS4gVGhlIG91dHB1dCBmb3IgdGhlIHR3byB3aWR0aHMgaXMKKyMgZGlmZmVyZW50LCBzbyB0aGV5IGhhdmUgc2VwYXJhdGUgb3V0cHV0IGZpbGVzLgorICAgIAorI2ZvcmJpZF91dGYKKyNuZXdsaW5lX2RlZmF1bHQgTEYgQU5ZIEFOWUNSTEYKKworL1teXHh7YzR9XS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXlx4e2M0fV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAKKy9ceHsxMDB9L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gXHh7MTAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8gICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCBsZWFkaW5nIGNvbW1lbnQKKyg/OiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgd29yZAorKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICApKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGEgcGVyaW9kCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisjIGFkZHJlc3MKK3wgICAgICAgICAgICAgICAgICAgICAjICBvcgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgICAgICAgICAgICAjIG9uZSB3b3JkLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5Li4uLgorKD86CitbXigpPD5ALDs6Ii5cXFxbXF1ceDgwLVx4ZmZcMDAwLVwwMTBcMDEyLVwwMzddICB8ICAjIGF0b20gYW5kIHNwYWNlIHBhcnRzLCBvci4uLgorXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgICAgICB8ICAjIGNvbW1lbnRzLCBvci4uLgorCisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCisjIHF1b3RlZCBzdHJpbmdzCispKgorPCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICAgICAgICAgICAgICAgICAgIyBsZWFkaW5nIDwKKyg/OiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKworKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICwgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKykqICMgZnVydGhlciBva2F5LCBpZiBsZWQgYnkgY29tbWEKKzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xvc2luZyBjb2xvbgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICApPyAjICAgICAgIG9wdGlvbmFsIHJvdXRlCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgd29yZAorKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICApKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGEgcGVyaW9kCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisjICAgICAgIGFkZHJlc3Mgc3BlYworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICA+ICMgICAgICAgICAgICAgICAgICB0cmFpbGluZyA+CisjIG5hbWUgYW5kIGFkZHJlc3MKKykgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50CisvSXgKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29udGFpbnMgZXhwbGljaXQgQ1Igb3IgTEYgbWF0Y2gKK09wdGlvbnM6IGV4dGVuZGVkCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDA5IFx4MjAgISAiICMgJCAlICYgJyAoICogKyAtIC8gMCAxIDIgMyA0IDUgNiA3IDggCisgIDkgPSA/IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBeIF8gYCBhIGIgYyBkIGUgCisgIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IHsgfCB9IH4gXHg3ZiBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9bXGhdL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4MDkgXHhhMFx4ezE2ODB9XHh7MTgwZX1ceHsyMDAwfS1ceHsyMDBhfVx4ezIwMmZ9XHh7MjA1Zn1ceHszMDAwfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgPlx4MDk8CisgMDogXHgwOQorCisvW1xoXSsvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwOSBceGEwXHh7MTY4MH1ceHsxODBlfVx4ezIwMDB9LVx4ezIwMGF9XHh7MjAyZn1ceHsyMDVmfVx4ezMwMDB9XSsrCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgID5ceDA5XHgyMFx4YTA8CisgMDogXHgwOSBceGEwCisKKy9bXHZdL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4MGEtXHgwZFx4ODVceHsyMDI4fS1ceHsyMDI5fV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXlxoXS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFteXHgwOSBceGEwXHh7MTY4MH1ceHsxODBlfVx4ezIwMDB9LVx4ezIwMGF9XHh7MjAyZn1ceHsyMDVmfVx4ezMwMDB9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xoKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDkgXHgyMCBceGEwIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBceHsxNjgxfVx4ezIwMGJ9XHh7MTY4MH1ceHsyMDAwfVx4ezIwMmZ9XHh7MzAwMH0KKyAwOiBceHsxNjgwfVx4ezIwMDB9XHh7MjAyZn1ceHszMDAwfQorICAgIFx4ezMwMDF9XHh7MmZmZn1ceHsyMDBhfVx4YTBceHsyMDAwfQorIDA6IFx4ezIwMGF9XHhhMFx4ezIwMDB9CisKKy9bXGhceHtkYzAwfV0rL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtceDA5IFx4YTBceHsxNjgwfVx4ezE4MGV9XHh7MjAwMH0tXHh7MjAwYX1ceHsyMDJmfVx4ezIwNWZ9XHh7MzAwMH1ceHtkYzAwfV0rKworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDIwIFx4YTAgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4ezE2ODF9XHh7MjAwYn1ceHsxNjgwfVx4ezIwMDB9XHh7MjAyZn1ceHszMDAwfQorIDA6IFx4ezE2ODB9XHh7MjAwMH1ceHsyMDJmfVx4ezMwMDB9CisgICAgXHh7MzAwMX1ceHsyZmZmfVx4ezIwMGF9XHhhMFx4ezIwMDB9CisgMDogXHh7MjAwYX1ceGEwXHh7MjAwMH0KKworL1xIKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4ezE2ODB9XHh7MTgwZX1ceHsxNjdmfVx4ezE2ODF9XHh7MTgwZH1ceHsxODBmfQorIDA6IFx4ezE2N2Z9XHh7MTY4MX1ceHsxODBkfVx4ezE4MGZ9CisgICAgXHh7MjAwMH1ceHsyMDBhfVx4ezFmZmZ9XHh7MjAwYn0KKyAwOiBceHsxZmZmfVx4ezIwMGJ9CisgICAgXHh7MjAyZn1ceHsyMDVmfVx4ezIwMmV9XHh7MjAzMH1ceHsyMDVlfVx4ezIwNjB9CisgMDogXHh7MjAyZX1ceHsyMDMwfVx4ezIwNWV9XHh7MjA2MH0KKyAgICBceGEwXHh7MzAwMH1ceDlmXHhhMVx4ezJmZmZ9XHh7MzAwMX0KKyAwOiBceDlmXHhhMVx4ezJmZmZ9XHh7MzAwMX0KKworL1tcSFx4e2Q4MDB9XSsvCisgICAgXHh7MTY4MH1ceHsxODBlfVx4ezE2N2Z9XHh7MTY4MX1ceHsxODBkfVx4ezE4MGZ9CisgMDogXHh7MTY3Zn1ceHsxNjgxfVx4ezE4MGR9XHh7MTgwZn0KKyAgICBceHsyMDAwfVx4ezIwMGF9XHh7MWZmZn1ceHsyMDBifQorIDA6IFx4ezFmZmZ9XHh7MjAwYn0KKyAgICBceHsyMDJmfVx4ezIwNWZ9XHh7MjAyZX1ceHsyMDMwfVx4ezIwNWV9XHh7MjA2MH0KKyAwOiBceHsyMDJlfVx4ezIwMzB9XHh7MjA1ZX1ceHsyMDYwfQorICAgIFx4YTBceHszMDAwfVx4OWZceGExXHh7MmZmZn1ceHszMDAxfQorIDA6IFx4OWZceGExXHh7MmZmZn1ceHszMDAxfQorCisvXHYrL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogXHgwYSBceDBiIFx4MGMgXHgwZCBceDg1IFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBceHsyMDI3fVx4ezIwMzB9XHh7MjAyOH1ceHsyMDI5fQorIDA6IFx4ezIwMjh9XHh7MjAyOX0KKyAgICBceDA5XHgwZVx4ODRceDg2XHg4NVx4MGFceDBiXHgwY1x4MGQKKyAwOiBceDg1XHgwYVx4MGJceDBjXHgwZAorCisvW1x2XHh7ZGMwMH1dKy9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwYS1ceDBkXHg4NVx4ezIwMjh9LVx4ezIwMjl9XHh7ZGMwMH1dKysKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MGEgXHgwYiBceDBjIFx4MGQgXHg4NSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgXHh7MjAyN31ceHsyMDMwfVx4ezIwMjh9XHh7MjAyOX0KKyAwOiBceHsyMDI4fVx4ezIwMjl9CisgICAgXHgwOVx4MGVceDg0XHg4Nlx4ODVceDBhXHgwYlx4MGNceDBkCisgMDogXHg4NVx4MGFceDBiXHgwY1x4MGQKKworL1xWKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4ezIwMjh9XHh7MjAyOX1ceHsyMDI3fVx4ezIwMzB9CisgMDogXHh7MjAyN31ceHsyMDMwfQorICAgIFx4ODVceDBhXHgwYlx4MGNceDBkXHgwOVx4MGVceDg0XHg4NgorIDA6IFx4MDlceDBlXHg4NFx4ODYKKworL1tcVlx4e2Q4MDB9XSsvCisgICAgXHh7MjAyOH1ceHsyMDI5fVx4ezIwMjd9XHh7MjAzMH0KKyAwOiBceHsyMDI3fVx4ezIwMzB9CisgICAgXHg4NVx4MGFceDBiXHgwY1x4MGRceDA5XHgwZVx4ODRceDg2CisgMDogXHgwOVx4MGVceDg0XHg4NgorCisvXFIrL0ksYnNyPXVuaWNvZGUKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorXFIgbWF0Y2hlcyBhbnkgVW5pY29kZSBuZXdsaW5lCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDBhIFx4MGIgXHgwYyBceDBkIFx4ODUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4ezIwMjd9XHh7MjAzMH1ceHsyMDI4fVx4ezIwMjl9CisgMDogXHh7MjAyOH1ceHsyMDI5fQorICAgIFx4MDlceDBlXHg4NFx4ODZceDg1XHgwYVx4MGJceDBjXHgwZAorIDA6IFx4ODVceDBhXHgwYlx4MGNceDBkCisKKy9ceHtkODAwfVx4e2Q3ZmZ9XHh7ZGMwMH1ceHtkYzAwfVx4e2RjZmZ9XHh7ZGQwMH0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSBceHtkODAwfQorTGFzdCBjb2RlIHVuaXQgPSBceHtkZDAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA2CisgICAgXHh7ZDgwMH1ceHtkN2ZmfVx4e2RjMDB9XHh7ZGMwMH1ceHtkY2ZmfVx4e2RkMDB9CisgMDogXHh7ZDgwMH1ceHtkN2ZmfVx4e2RjMDB9XHh7ZGMwMH1ceHtkY2ZmfVx4e2RkMDB9CisKKy9bXlx4ezgwfV1bXlx4e2ZmfV1bXlx4ezEwMH1dW15ceHsxMDAwfV1bXlx4e2ZmZmZ9XS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFteXHh7ODB9XQorICAgICAgICBbXlx4e2ZmfV0KKyAgICAgICAgW15ceHsxMDB9XQorICAgICAgICBbXlx4ezEwMDB9XQorICAgICAgICBbXlx4e2ZmZmZ9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHh7ODB9XVteXHh7ZmZ9XVteXHh7MTAwfV1bXlx4ezEwMDB9XVteXHh7ZmZmZn1dL0JpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIFteXHh7ODB9XQorICAgICAvaSBbXlx4e2ZmfV0KKyAgICAgL2kgW15ceHsxMDB9XQorICAgICAvaSBbXlx4ezEwMDB9XQorICAgICAvaSBbXlx4e2ZmZmZ9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHh7MTAwfV0qW15ceHsxMDAwfV0rW15ceHtmZmZmfV0/P1teXHh7ODAwMH1dezQsfVteXHh7N2ZmZn1dezIsOX0/W15ceHsxMDB9XXs1LDZ9Ky9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFteXHh7MTAwfV0qCisgICAgICAgIFteXHh7MTAwMH1dKworICAgICAgICBbXlx4e2ZmZmZ9XT8/CisgICAgICAgIFteXHh7ODAwMH1dezR9CisgICAgICAgIFteXHh7ODAwMH1dKgorICAgICAgICBbXlx4ezdmZmZ9XXsyfQorICAgICAgICBbXlx4ezdmZmZ9XXswLDd9PworICAgICAgICBbXlx4ezEwMH1dezV9CisgICAgICAgIFteXHh7MTAwfV0/KworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHh7MTAwfV0qW15ceHsxMDAwfV0rW15ceHtmZmZmfV0/P1teXHh7ODAwMH1dezQsfVteXHh7N2ZmZn1dezIsOX0/W15ceHsxMDB9XXs1LDZ9Ky9CaQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAvaSBbXlx4ezEwMH1dKgorICAgICAvaSBbXlx4ezEwMDB9XSsKKyAgICAgL2kgW15ceHtmZmZmfV0/PworICAgICAvaSBbXlx4ezgwMDB9XXs0fQorICAgICAvaSBbXlx4ezgwMDB9XSoKKyAgICAgL2kgW15ceHs3ZmZmfV17Mn0KKyAgICAgL2kgW15ceHs3ZmZmfV17MCw3fT8KKyAgICAgL2kgW15ceHsxMDB9XXs1fQorICAgICAvaSBbXlx4ezEwMH1dPysKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oKjowMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGKVhYL21hcmsKKyAgICBYWAorIDA6IFhYCitNSzogMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRgorICAgICAKKy8oKjowMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREUpWFgvbWFyaworICAgIFhYCisgMDogWFgKK01LOiAwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREUKKworL1x1MDEwMC9CLGFsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tcdTAxMDAtXHUwMjAwXS9CLGFsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4ezEwMH0tXHh7MjAwfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cdWQ4MDAvQixhbHRfYnN1eCxhbGxvd19lbXB0eV9jbGFzcyxtYXRjaF91bnNldF9iYWNrcmVmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4e2Q4MDB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXlx4e2ZmZmZ9Ky9pCisgICAgXHh7ZmZmZn0KKyAwOiBceHtmZmZmfQorCisvXlx4e2ZmZmZ9Py9pCisgICAgXHh7ZmZmZn0KKyAwOiBceHtmZmZmfQorCisvXlx4e2ZmZmZ9Ki9pCisgICAgXHh7ZmZmZn0KKyAwOiBceHtmZmZmfQorCisvXlx4e2ZmZmZ9ezN9L2kKKyAgICBceHtmZmZmfVx4e2ZmZmZ9XHh7ZmZmZn0KKyAwOiBceHtmZmZmfVx4e2ZmZmZ9XHh7ZmZmZn0KKworL15ceHtmZmZmfXswLDN9L2kKKyAgICBceHtmZmZmfQorIDA6IFx4e2ZmZmZ9CisKKy9bXlx4MDAtYV17MTIsfVteYi1ceGZmXSovQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYi1ceGZmXSAobmVnKXsxMix9CisgICAgICAgIFtceDAwLWFdIChuZWcpKisKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXlxzXSpccyogW15cV10rXFcrIFteXGRdKj9cZDAgW15cZFx3XXs0LDZ9P1x3KkEvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwMC1ceDA4XHgwZS1ceDFmIS1ceGZmXSAobmVnKSoKKyAgICAgICAgXHMqCisgICAgICAgICAKKyAgICAgICAgWzAtOUEtWl9hLXpdKysKKyAgICAgICAgXFcrCisgICAgICAgICAKKyAgICAgICAgW1x4MDAtLzotXHhmZl0gKG5lZykqPworICAgICAgICBcZAorICAgICAgICAwIAorICAgICAgICBbXHgwMC0vOi1AWy1eYHstXHhmZl0gKG5lZyl7NCw2fT8KKyAgICAgICAgXHcqCisgICAgICAgIEEKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hKltiLVx4ezIwMH1dP2EjYSpbYi1ceHsyMDB9XT9iI1thLWZdKltnLVx4ezIwMH1dKiNbZy1ceHsyMDB9XSpbYS1jXSojW2ctXHh7MjAwfV0qW2EtaF0qL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYSoKKyAgICAgICAgW2ItXHhmZlx4ezEwMH0tXHh7MjAwfV0/KworICAgICAgICBhIworICAgICAgICBhKisKKyAgICAgICAgW2ItXHhmZlx4ezEwMH0tXHh7MjAwfV0/CisgICAgICAgIGIjCisgICAgICAgIFthLWZdKisKKyAgICAgICAgW2ctXHhmZlx4ezEwMH0tXHh7MjAwfV0qKworICAgICAgICAjCisgICAgICAgIFtnLVx4ZmZceHsxMDB9LVx4ezIwMH1dKisKKyAgICAgICAgW2EtY10qKworICAgICAgICAjCisgICAgICAgIFtnLVx4ZmZceHsxMDB9LVx4ezIwMH1dKgorICAgICAgICBbYS1oXSorCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXltceHsxMjM0fVx4ezQzMjF9XXsyLDR9Py8KKyAgICBceHsxMjM0fVx4ezEyMzR9XHh7MTIzNH0KKyAwOiBceHsxMjM0fVx4ezEyMzR9CisKKyMgQ2hlY2sgbWF4aW11bSBub24tVVRGIGNoYXJhY3RlciBzaXplIGZvciB0aGUgMTYtYml0IGxpYnJhcnkuCisKKy9ceHtmZmZmfS8KKyAgICBBXHh7ZmZmZn1CCisgMDogXHh7ZmZmZn0KKworL1x4ezEwMDAwfS8KKworL1xvezIwMDAwfS8KKworIyBDaGVjayBtYXhpbXVtIGNoYXJhY3RlciBzaXplIGZvciB0aGUgMzItYml0IGxpYnJhcnkuIFRoZXNlIHdpbGwgYWxsIGdpdmUKKyMgZXJyb3JzIGluIHRoZSAxNi1iaXQgbGlicmFyeS4KKworL1x4ezExMDAwMH0vCisKKy9ceHs3ZmZmZmZmZn0vCisKKy9ceHs4MDAwMDAwMH0vCisKKy9ceHtmZmZmZmZmZn0vCisKKy9ceHsxMDAwMDAwMDB9LworRmFpbGVkOiBlcnJvciAxMzQgYXQgb2Zmc2V0IDEyOiBjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBceHt9IG9yIFxve30gaXMgdG9vIGxhcmdlCisKKy9cb3sxNzc3Nzc3Nzc3N30vCisKKy9cb3syMDAwMDAwMDAwMH0vCisKKy9cb3szNzc3Nzc3Nzc3N30vCisKKy9cb3s0MDAwMDAwMDAwMH0vCitGYWlsZWQ6IGVycm9yIDEzNCBhdCBvZmZzZXQgMTQ6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx4e30gb3IgXG97fSBpcyB0b28gbGFyZ2UKKworL1x4ezdmZmZmZmZmfVx4ezdmZmZmZmZmfS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezdmZmZmZmZmfQorTGFzdCBjb2RlIHVuaXQgPSBceHs3ZmZmZmZmZn0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvXHh7ODAwMDAwMDB9XHh7ODAwMDAwMDB9L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gXHh7ODAwMDAwMDB9CitMYXN0IGNvZGUgdW5pdCA9IFx4ezgwMDAwMDAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9ceHtmZmZmZmZmZn1ceHtmZmZmZmZmZn0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSBceHtmZmZmZmZmZn0KK0xhc3QgY29kZSB1bml0ID0gXHh7ZmZmZmZmZmZ9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworIyBOb24tVVRGIGNoYXJhY3RlcnMgCisKKy8uezIsM30vCisgICAgXHh7NDAwMDAwfVx4ezQwMDAwMX1ceHs0MDAwMDJ9XHh7NDAwMDAzfQorIDA6IFx4ezQwMDAwMH1ceHs0MDAwMDF9XHh7NDAwMDAyfQorCisvXHh7NDAwMDAwfVx4ezgwMDAwMH0vSUJpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIFx4ezQwMDAwMH1ceHs4MDAwMDB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcworRmlyc3QgY29kZSB1bml0ID0gXHh7NDAwMDAwfQorTGFzdCBjb2RlIHVuaXQgPSBceHs4MDAwMDB9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworIyBDaGVjayBjaGFyYWN0ZXIgcmFuZ2VzIAorCisvW1xIXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwMC1ceDA4XHgwYS1ceDFmIS1ceDlmXHhhMS1ceGZmXHh7MTAwfS1ceHsxNjdmfVx4ezE2ODF9LVx4ezE4MGR9XHh7MTgwZn0tXHh7MWZmZn1ceHsyMDBifS1ceHsyMDJlfVx4ezIwMzB9LVx4ezIwNWV9XHh7MjA2MH0tXHh7MmZmZn1ceHszMDAxfS1ceHtmZmZmZmZmZn1dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDBhIFx4MGIgCisgIFx4MGMgXHgwZCBceDBlIFx4MGYgXHgxMCBceDExIFx4MTIgXHgxMyBceDE0IFx4MTUgXHgxNiBceDE3IFx4MTggXHgxOSBceDFhIAorICBceDFiIFx4MWMgXHgxZCBceDFlIFx4MWYgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSAKKyAgOiA7IDwgPSA+ID8gQCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFogWyBcIF0gXiAKKyAgXyBgIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiB7IHwgfSB+IFx4N2YgXHg4MCAKKyAgXHg4MSBceDgyIFx4ODMgXHg4NCBceDg1IFx4ODYgXHg4NyBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgCisgIFx4OTAgXHg5MSBceDkyIFx4OTMgXHg5NCBceDk1IFx4OTYgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIAorICBceDlmIFx4YTEgXHhhMiBceGEzIFx4YTQgXHhhNSBceGE2IFx4YTcgXHhhOCBceGE5IFx4YWEgXHhhYiBceGFjIFx4YWQgXHhhZSAKKyAgXHhhZiBceGIwIFx4YjEgXHhiMiBceGIzIFx4YjQgXHhiNSBceGI2IFx4YjcgXHhiOCBceGI5IFx4YmEgXHhiYiBceGJjIFx4YmQgCisgIFx4YmUgXHhiZiBceGMwIFx4YzEgXHhjMiBceGMzIFx4YzQgXHhjNSBceGM2IFx4YzcgXHhjOCBceGM5IFx4Y2EgXHhjYiBceGNjIAorICBceGNkIFx4Y2UgXHhjZiBceGQwIFx4ZDEgXHhkMiBceGQzIFx4ZDQgXHhkNSBceGQ2IFx4ZDcgXHhkOCBceGQ5IFx4ZGEgXHhkYiAKKyAgXHhkYyBceGRkIFx4ZGUgXHhkZiBceGUwIFx4ZTEgXHhlMiBceGUzIFx4ZTQgXHhlNSBceGU2IFx4ZTcgXHhlOCBceGU5IFx4ZWEgCisgIFx4ZWIgXHhlYyBceGVkIFx4ZWUgXHhlZiBceGYwIFx4ZjEgXHhmMiBceGYzIFx4ZjQgXHhmNSBceGY2IFx4ZjcgXHhmOCBceGY5IAorICBceGZhIFx4ZmIgXHhmYyBceGZkIFx4ZmUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvW1xWXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwMC1ceDA5XHgwZS1ceDg0XHg4Ni1ceGZmXHh7MTAwfS1ceHsyMDI3fVx4ezIwMmF9LVx4e2ZmZmZmZmZmfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDAgXHgwMSBceDAyIFx4MDMgXHgwNCBceDA1IFx4MDYgXHgwNyBceDA4IFx4MDkgXHgwZSAKKyAgXHgwZiBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IFx4MWEgXHgxYiBceDFjIFx4MWQgCisgIFx4MWUgXHgxZiBceDIwICEgIiAjICQgJSAmICcgKCApICogKyAsIC0gLiAvIDAgMSAyIDMgNCA1IDYgNyA4IDkgOiA7IDwgPSA+IAorICA/IEAgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaIFsgXCBdIF4gXyBgIGEgYiBjIAorICBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogeyB8IH0gfiBceDdmIFx4ODAgXHg4MSBceDgyIAorICBceDgzIFx4ODQgXHg4NiBceDg3IFx4ODggXHg4OSBceDhhIFx4OGIgXHg4YyBceDhkIFx4OGUgXHg4ZiBceDkwIFx4OTEgXHg5MiAKKyAgXHg5MyBceDk0IFx4OTUgXHg5NiBceDk3IFx4OTggXHg5OSBceDlhIFx4OWIgXHg5YyBceDlkIFx4OWUgXHg5ZiBceGEwIFx4YTEgCisgIFx4YTIgXHhhMyBceGE0IFx4YTUgXHhhNiBceGE3IFx4YTggXHhhOSBceGFhIFx4YWIgXHhhYyBceGFkIFx4YWUgXHhhZiBceGIwIAorICBceGIxIFx4YjIgXHhiMyBceGI0IFx4YjUgXHhiNiBceGI3IFx4YjggXHhiOSBceGJhIFx4YmIgXHhiYyBceGJkIFx4YmUgXHhiZiAKKyAgXHhjMCBceGMxIFx4YzIgXHhjMyBceGM0IFx4YzUgXHhjNiBceGM3IFx4YzggXHhjOSBceGNhIFx4Y2IgXHhjYyBceGNkIFx4Y2UgCisgIFx4Y2YgXHhkMCBceGQxIFx4ZDIgXHhkMyBceGQ0IFx4ZDUgXHhkNiBceGQ3IFx4ZDggXHhkOSBceGRhIFx4ZGIgXHhkYyBceGRkIAorICBceGRlIFx4ZGYgXHhlMCBceGUxIFx4ZTIgXHhlMyBceGU0IFx4ZTUgXHhlNiBceGU3IFx4ZTggXHhlOSBceGVhIFx4ZWIgXHhlYyAKKyAgXHhlZCBceGVlIFx4ZWYgXHhmMCBceGYxIFx4ZjIgXHhmMyBceGY0IFx4ZjUgXHhmNiBceGY3IFx4ZjggXHhmOSBceGZhIFx4ZmIgCisgIFx4ZmMgXHhmZCBceGZlIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLygqVEhFTjpcW0FdezY1NTAxfSkvZXhwYW5kCisKKyMgRW5kIG9mIHRlc3RpbnB1dDExCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTItMTYgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTItMTYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgzYTAzMgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxMi0xNgpAQCAtMCwwICsxLDEzNzAgQEAKKyMgVGhpcyBzZXQgb2YgdGVzdHMgaXMgZm9yIFVURi0xNiBhbmQgVVRGLTMyIHN1cHBvcnQsIGluY2x1ZGluZyBVbmljb2RlCisjIHByb3BlcnRpZXMuIEl0IGlzIHJlbGV2YW50IG9ubHkgdG8gdGhlIDE2LWJpdCBhbmQgMzItYml0IGxpYnJhcmllcy4gVGhlCisjIG91dHB1dCBpcyBkaWZmZXJlbnQgZm9yIGVhY2ggbGlicmFyeSwgc28gdGhlcmUgYXJlIHNlcGFyYXRlIG91dHB1dCBmaWxlcy4KKworL8PDw3h4eC9JQix1dGYsbm9fdXRmX2NoZWNrCisqKiBGYWlsZWQ6IGludmFsaWQgVVRGLTggc3RyaW5nIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gMTYtYml0IHN0cmluZworCisvYWJjL3V0ZgorICAgIMNdCisqKiBGYWlsZWQ6IGludmFsaWQgVVRGLTggc3RyaW5nIGNhbm5vdCBiZSB1c2VkIGFzIGlucHV0IGluIFVURiBtb2RlCisKKyMgQ2hlY2sgbWF4aW11bSBjaGFyYWN0ZXIgc2l6ZSAKKworL1x4e2ZmZmZ9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHtmZmZmfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHtmZmZmfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDAwMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMDAwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHtkODAwfQorTGFzdCBjb2RlIHVuaXQgPSBceHtkYzAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEwMH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTAwMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMDB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEwMDB9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMDAwfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwMDB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4e2Q4MDB9CitMYXN0IGNvZGUgdW5pdCA9IFx4e2RjMDB9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMDAwMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMDAwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7ZGJjMH0KK0xhc3QgY29kZSB1bml0ID0gXHh7ZGMwMH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTBmZmZmfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTBmZmZmfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHtkYmZmfQorTGFzdCBjb2RlIHVuaXQgPSBceHtkZmZmfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bXHh7ZmZ9XS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ZmZ9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ZmYKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvW1x4ezEwMH1dL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEwMH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHg4MC9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ODB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ODAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHhmZi9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ZmZ9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ZmYKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7RDU1Y31ceHthZDZkfVx4e0M1QjR9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHtkNTVjfVx4e2FkNmR9XHh7YzViNH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7ZDU1Y30KK0xhc3QgY29kZSB1bml0ID0gXHh7YzViNH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIFx4e0Q1NWN9XHh7YWQ2ZH1ceHtDNUI0fQorIDA6IFx4e2Q1NWN9XHh7YWQ2ZH1ceHtjNWI0fQorCisvXHh7NjVlNX1ceHs2NzJjfVx4ezhhOWV9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHs2NWU1fVx4ezY3MmN9XHh7OGE5ZX0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7NjVlNX0KK0xhc3QgY29kZSB1bml0ID0gXHh7OGE5ZX0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIFx4ezY1ZTV9XHh7NjcyY31ceHs4YTllfQorIDA6IFx4ezY1ZTV9XHh7NjcyY31ceHs4YTllfQorCisvXHh7ODB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHs4MH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHg4MAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHswODR9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHs4NH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHg4NAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDR9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDR9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEwNH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7ODYxfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ODYxfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHs4NjF9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezIxMmFifS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MjEyYWJ9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4e2Q4NDR9CitMYXN0IGNvZGUgdW5pdCA9IFx4e2RlYWJ9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1teYWJceEMwLVx4RjBdL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwMC1gYy1ceGJmXHhmMS1ceGZmXSAobmVnKQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDA5IFx4MGEgCisgIFx4MGIgXHgwYyBceDBkIFx4MGUgXHgwZiBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IAorICBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgXHgxZiBceDIwICEgIiAjICQgJSAmICcgKCApICogKyAsIC0gLiAvIDAgMSAyIDMgNCAKKyAgNSA2IDcgOCA5IDogOyA8ID0gPiA/IEAgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSAKKyAgWiBbIFwgXSBeIF8gYCBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiB7IHwgfSB+IFx4N2YgCisgIFx4ODAgXHg4MSBceDgyIFx4ODMgXHg4NCBceDg1IFx4ODYgXHg4NyBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIAorICBceDhmIFx4OTAgXHg5MSBceDkyIFx4OTMgXHg5NCBceDk1IFx4OTYgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCAKKyAgXHg5ZSBceDlmIFx4YTAgXHhhMSBceGEyIFx4YTMgXHhhNCBceGE1IFx4YTYgXHhhNyBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgCisgIFx4YWQgXHhhZSBceGFmIFx4YjAgXHhiMSBceGIyIFx4YjMgXHhiNCBceGI1IFx4YjYgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIAorICBceGJjIFx4YmQgXHhiZSBceGJmIFx4ZjEgXHhmMiBceGYzIFx4ZjQgXHhmNSBceGY2IFx4ZjcgXHhmOCBceGY5IFx4ZmEgXHhmYiAKKyAgXHhmYyBceGZkIFx4ZmUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4e2YxfQorIDA6IFx4e2YxfQorICAgIFx4e2JmfQorIDA6IFx4e2JmfQorICAgIFx4ezEwMH0KKyAwOiBceHsxMDB9CisgICAgXHh7MTAwMH0KKyAwOiBceHsxMDAwfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7YzB9CitObyBtYXRjaAorICAgIFx4e2YwfQorTm8gbWF0Y2gKKworL8SAezMsNH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH17M30KKyAgICAgICAgXHh7MTAwfT8rCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEwMH0KK0xhc3QgY29kZSB1bml0ID0gXHh7MTAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMFx4ezEwMH0KKyAwOiBceHsxMDB9XHh7MTAwfVx4ezEwMH0KKworLyhceHsxMDB9K3x4KS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIFx4ezEwMH0rKworICAgICAgICBBbHQKKyAgICAgICAgeAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogeCBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oXHh7MTAwfSphfHgpL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgXHh7MTAwfSorCisgICAgICAgIGEKKyAgICAgICAgQWx0CisgICAgICAgIHgKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgeCBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oXHh7MTAwfXswLDJ9YXx4KS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIFx4ezEwMH17MCwyfSsKKyAgICAgICAgYQorICAgICAgICBBbHQKKyAgICAgICAgeAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogYSB4IFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyhceHsxMDB9ezEsMn1hfHgpL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgXHh7MTAwfQorICAgICAgICBceHsxMDB9ezAsMX0rCisgICAgICAgIGEKKyAgICAgICAgQWx0CisgICAgICAgIHgKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IHggXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTAwfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsxMDB9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL2FceHsxMDB9XHh7MTAxfSovSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIGFceHsxMDB9CisgICAgICAgIFx4ezEwMX0qKworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gXHh7MTAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9hXHh7MTAwfVx4ezEwMX0rL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhXHh7MTAwfQorICAgICAgICBceHsxMDF9KysKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9IFx4ezEwMX0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvW15ceHtjNH1dL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFteXHh7YzR9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bXHh7MTAwfV0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7MTAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBaXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBceHsxMDB9WgorIDA6IFx4ezEwMH0KKworL1tceGZmXS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ZmZ9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ZmYKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgID5ceHtmZn08CisgMDogXHh7ZmZ9CisKKy9bXlx4ZmZdL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXlx4e2ZmfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDB9YWJjKHh5eig/MSkpL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9YWJjCisgICAgICAgIENCcmEgMQorICAgICAgICB4eXoKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7MTAwfQorTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNworCisvXDc3Ny9JLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezFmZn0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICBceHsxZmZ9CisgMDogXHh7MWZmfQorICBcNzc3CisgMDogXHh7MWZmfQorCisvXHh7MTAwfStceHsyMDB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KysKKyAgICAgICAgXHh7MjAwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsxMDB9CitMYXN0IGNvZGUgdW5pdCA9IFx4ezIwMH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvXHh7MTAwfStYL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KysKKyAgICAgICAgWAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsxMDB9CitMYXN0IGNvZGUgdW5pdCA9ICdYJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9eW1xRxIBcRS1cUcWQXEUvQix1dGYKK0ZhaWxlZDogZXJyb3IgMTA2IGF0IG9mZnNldCAxMzogbWlzc2luZyB0ZXJtaW5hdGluZyBdIGZvciBjaGFyYWN0ZXIgY2xhc3MKKworL1gvdXRmCisgICAgWFhceHtkODAwfVw9bm9fdXRmX2NoZWNrCisgMDogWAorICAgIFhYXHh7ZGEwMH1cPW5vX3V0Zl9jaGVjaworIDA6IFgKKyAgICBYWFx4e2RjMDB9XD1ub191dGZfY2hlY2sKKyAwOiBYCisgICAgWFhceHtkZTAwfVw9bm9fdXRmX2NoZWNrCisgMDogWAorICAgIFhYXHh7ZGZmZn1cPW5vX3V0Zl9jaGVjaworIDA6IFgKK1w9IEV4cGVjdCBVVEYgZXJyb3IKKyAgICBYWFx4e2Q4MDB9CitGYWlsZWQ6IGVycm9yIC0yNDogVVRGLTE2IGVycm9yOiBtaXNzaW5nIGxvdyBzdXJyb2dhdGUgYXQgZW5kIGF0IG9mZnNldCAyCisgICAgWFhceHtkYTAwfQorRmFpbGVkOiBlcnJvciAtMjQ6IFVURi0xNiBlcnJvcjogbWlzc2luZyBsb3cgc3Vycm9nYXRlIGF0IGVuZCBhdCBvZmZzZXQgMgorICAgIFhYXHh7ZGMwMH0KK0ZhaWxlZDogZXJyb3IgLTI2OiBVVEYtMTYgZXJyb3I6IGlzb2xhdGVkIGxvdyBzdXJyb2dhdGUgYXQgb2Zmc2V0IDIKKyAgICBYWFx4e2RlMDB9CitGYWlsZWQ6IGVycm9yIC0yNjogVVRGLTE2IGVycm9yOiBpc29sYXRlZCBsb3cgc3Vycm9nYXRlIGF0IG9mZnNldCAyCisgICAgWFhceHtkZmZmfQorRmFpbGVkOiBlcnJvciAtMjY6IFVURi0xNiBlcnJvcjogaXNvbGF0ZWQgbG93IHN1cnJvZ2F0ZSBhdCBvZmZzZXQgMgorICAgIFhYXHh7MTEwMDAwfQorKiogRmFpbGVkOiBjaGFyYWN0ZXIgXHh7MTEwMDAwfSBpcyBncmVhdGVyIHRoYW4gMHgxMGZmZmYgYW5kIHNvIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gVVRGLTE2CisgICAgWFhceHtkODAwfVx4ezEyMzR9CitGYWlsZWQ6IGVycm9yIC0yNTogVVRGLTE2IGVycm9yOiBpbnZhbGlkIGxvdyBzdXJyb2dhdGUgYXQgb2Zmc2V0IDMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhYXHh7ZDgwMH1cPW9mZnNldD0zCitObyBtYXRjaAorICAgIAorLyg/PD0uKVgvdXRmCisgICAgWFhceHtkODAwfVw9b2Zmc2V0PTMKK0ZhaWxlZDogZXJyb3IgLTI0OiBVVEYtMTYgZXJyb3I6IG1pc3NpbmcgbG93IHN1cnJvZ2F0ZSBhdCBlbmQgYXQgb2Zmc2V0IDIKKworLygqVVRGMTYpXHh7MTEyMzR9LworICBhYmNkXHh7MTEyMzR9cHFyCisgMDogXHh7MTEyMzR9CisKKy8oKlVURilceHsxMTIzNH0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4e2Q4MDR9CitMYXN0IGNvZGUgdW5pdCA9IFx4e2RlMzR9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgYWJjZFx4ezExMjM0fXBxcgorIDA6IFx4ezExMjM0fQorCisvKCpVVEYtMzIpXHh7MTEyMzR9LworRmFpbGVkOiBlcnJvciAxMzQgYXQgb2Zmc2V0IDE3OiBjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBceHt9IG9yIFxve30gaXMgdG9vIGxhcmdlCisgIGFiY2RceHsxMTIzNH1wcXIKKworLygqVVRGLTMyKVx4ezExMn0vCitGYWlsZWQ6IGVycm9yIDE2MCBhdCBvZmZzZXQgNTogKCpWRVJCKSBub3QgcmVjb2duaXplZCBvciBtYWxmb3JtZWQKKyAgYWJjZFx4ezExMjM0fXBxcgorCisvKCpDUkxGKSgqVVRGMTYpKCpCU1JfVU5JQ09ERSlhXFJiL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogdXRmCitcUiBtYXRjaGVzIGFueSBVbmljb2RlIG5ld2xpbmUKK0ZvcmNlZCBuZXdsaW5lIGlzIENSTEYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvKCpDUkxGKSgqVVRGMzIpKCpCU1JfVU5JQ09ERSlhXFJiL0kKK0ZhaWxlZDogZXJyb3IgMTYwIGF0IG9mZnNldCAxMjogKCpWRVJCKSBub3QgcmVjb2duaXplZCBvciBtYWxmb3JtZWQKKworL1xoL0ksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDIwIFx4YTAgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIEFCQ1x4ezA5fQorIDA6IFx4ezA5fQorICAgIEFCQ1x4ezIwfQorIDA6ICAKKyAgICBBQkNceHthMH0KKyAwOiBceHthMH0KKyAgICBBQkNceHsxNjgwfQorIDA6IFx4ezE2ODB9CisgICAgQUJDXHh7MTgwZX0KKyAwOiBceHsxODBlfQorICAgIEFCQ1x4ezIwMDB9CisgMDogXHh7MjAwMH0KKyAgICBBQkNceHsyMDJmfQorIDA6IFx4ezIwMmZ9CisgICAgQUJDXHh7MjA1Zn0KKyAwOiBceHsyMDVmfQorICAgIEFCQ1x4ezMwMDB9CisgMDogXHh7MzAwMH0KKworL1x2L0ksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwYSBceDBiIFx4MGMgXHgwZCBceDg1IFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBBQkNceHswYX0KKyAwOiBceHswYX0KKyAgICBBQkNceHswYn0KKyAwOiBceHswYn0KKyAgICBBQkNceHswY30KKyAwOiBceHswY30KKyAgICBBQkNceHswZH0KKyAwOiBceHswZH0KKyAgICBBQkNceHs4NX0KKyAwOiBceHs4NX0KKyAgICBBQkNceHsyMDI4fQorIDA6IFx4ezIwMjh9CisKKy9caCpBL0ksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDIwIEEgXHhhMCBceGZmIAorTGFzdCBjb2RlIHVuaXQgPSAnQScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIENEQkFCQworIDA6IEEKKyAgICBceHsyMDAwfUFCQworIDA6IFx4ezIwMDB9QQorCisvXFIqQS9JLGJzcj11bmljb2RlLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1xSIG1hdGNoZXMgYW55IFVuaWNvZGUgbmV3bGluZQorU3RhcnRpbmcgY29kZSB1bml0czogXHgwYSBceDBiIFx4MGMgXHgwZCBBIFx4ODUgXHhmZiAKK0xhc3QgY29kZSB1bml0ID0gJ0EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBDREJBQkMKKyAwOiBBCisgICAgXHh7MjAyOH1BCisgMDogXHh7MjAyOH1BCisKKy9cditBL0ksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwYSBceDBiIFx4MGMgXHgwZCBceDg1IFx4ZmYgCitMYXN0IGNvZGUgdW5pdCA9ICdBJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9ccz94eHhccy9JLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDkgXHgwYSBceDBiIFx4MGMgXHgwZCBceDIwIHggCitMYXN0IGNvZGUgdW5pdCA9ICd4JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisKKy9cc3h4eFxzL0ksdXRmLHRhYmxlcz0yCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDBhIFx4MGIgXHgwYyBceDBkIFx4MjAgXHg4NSBceGEwIAorTGFzdCBjb2RlIHVuaXQgPSAneCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNQorICAgIEFCXHh7ODV9eHh4XHh7YTB9WFlaCisgMDogXHh7ODV9eHh4XHh7YTB9CisgICAgQUJceHthMH14eHhceHs4NX1YWVoKKyAwOiBceHthMH14eHhceHs4NX0KKworL1xTIFxTL0ksdXRmLHRhYmxlcz0yCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwMCBceDAxIFx4MDIgXHgwMyBceDA0IFx4MDUgXHgwNiBceDA3IFx4MDggXHgwZSBceDBmIAorICBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IFx4MWEgXHgxYiBceDFjIFx4MWQgXHgxZSAKKyAgXHgxZiAhICIgIyAkICUgJiAnICggKSAqICsgLCAtIC4gLyAwIDEgMiAzIDQgNSA2IDcgOCA5IDogOyA8ID0gPiA/IEAgQSBCIEMgCisgIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gYCBhIGIgYyBkIGUgZiBnIGggCisgIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IHsgfCB9IH4gXHg3ZiBceDgwIFx4ODEgXHg4MiBceDgzIFx4ODQgCisgIFx4ODYgXHg4NyBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyBceDk0IAorICBceDk1IFx4OTYgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIFx4OWYgXHhhMSBceGEyIFx4YTMgXHhhNCAKKyAgXHhhNSBceGE2IFx4YTcgXHhhOCBceGE5IFx4YWEgXHhhYiBceGFjIFx4YWQgXHhhZSBceGFmIFx4YjAgXHhiMSBceGIyIFx4YjMgCisgIFx4YjQgXHhiNSBceGI2IFx4YjcgXHhiOCBceGI5IFx4YmEgXHhiYiBceGJjIFx4YmQgXHhiZSBceGJmIFx4YzAgXHhjMSBceGMyIAorICBceGMzIFx4YzQgXHhjNSBceGM2IFx4YzcgXHhjOCBceGM5IFx4Y2EgXHhjYiBceGNjIFx4Y2QgXHhjZSBceGNmIFx4ZDAgXHhkMSAKKyAgXHhkMiBceGQzIFx4ZDQgXHhkNSBceGQ2IFx4ZDcgXHhkOCBceGQ5IFx4ZGEgXHhkYiBceGRjIFx4ZGQgXHhkZSBceGRmIFx4ZTAgCisgIFx4ZTEgXHhlMiBceGUzIFx4ZTQgXHhlNSBceGU2IFx4ZTcgXHhlOCBceGU5IFx4ZWEgXHhlYiBceGVjIFx4ZWQgXHhlZSBceGVmIAorICBceGYwIFx4ZjEgXHhmMiBceGYzIFx4ZjQgXHhmNSBceGY2IFx4ZjcgXHhmOCBceGY5IFx4ZmEgXHhmYiBceGZjIFx4ZmQgXHhmZSAKKyAgXHhmZiAKK0xhc3QgY29kZSB1bml0ID0gJyAnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBceHthMn0gXHh7ODR9CisgMDogXHh7YTJ9IFx4ezg0fQorICAgIEEgWgorIDA6IEEgWgorCisvYSsvdXRmCisgICAgYVx4ezEyM31hYVw9b2Zmc2V0PTEKKyAwOiBhYQorICAgIGFceHsxMjN9YWFcPW9mZnNldD0yCisgMDogYWEKKyAgICBhXHh7MTIzfWFhXD1vZmZzZXQ9MworIDA6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceHsxMjN9YWFcPW9mZnNldD00CitObyBtYXRjaAorXD0gRXhwZWN0IGJhZCBvZmZzZXQgZXJyb3IgICAgIAorICAgIGFceHsxMjN9YWFcPW9mZnNldD01CitGYWlsZWQ6IGVycm9yIC0zMzogYmFkIG9mZnNldCB2YWx1ZQorICAgIGFceHsxMjN9YWFcPW9mZnNldD02CitGYWlsZWQ6IGVycm9yIC0zMzogYmFkIG9mZnNldCB2YWx1ZQorCisvXHh7MTIzNH0rL0lpLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEyMzR9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEyMzR9Kz8vSWksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7MTIzNH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTIzNH0rKy9JaSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MgdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsxMjM0fQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMjM0fXsyfS9JaSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MgdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsxMjM0fQorTGFzdCBjb2RlIHVuaXQgPSBceHsxMjM0fQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9bXlx4e2M0fV0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFteXHh7YzR9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1grXHh7MjAwfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgWCsrCisgICAgICAgIFx4ezIwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gJ1gnCitMYXN0IGNvZGUgdW5pdCA9IFx4ezIwMH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvXFIvSSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDBhIFx4MGIgXHgwYyBceDBkIFx4ODUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisjIENoZWNrIGJhZCBvZmZzZXQgCisKKy9hL3V0ZgorXD0gRXhwZWN0IGJhZCBVVEYtMTYgb2Zmc2V0LCBvciBubyBtYXRjaCBpbiAzMi1iaXQKKyAgICBceHsxMDAwMH1cPW9mZnNldD0xCitFcnJvciAtMzYgKGJhZCBVVEYtMTYgb2Zmc2V0KQorICAgIFx4ezEwMDAwfWFiXD1vZmZzZXQ9MQorRXJyb3IgLTM2IChiYWQgVVRGLTE2IG9mZnNldCkKK1w9IEV4cGVjdCAxNi1iaXQgbWF0Y2gsIDMyLWJpdCBubyBtYXRjaAorICAgIFx4ezEwMDAwfWFiXD1vZmZzZXQ9MgorIDA6IGEKK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgXHh7MTAwMDB9YWJcPW9mZnNldD0zCitObyBtYXRjaAorXD0gRXhwZWN0IG5vIG1hdGNoIGluIDE2LWJpdCwgYmFkIG9mZnNldCBpbiAzMi1iaXQgICAgCisgICAgXHh7MTAwMDB9YWJcPW9mZnNldD00CitObyBtYXRjaAorXD0gRXhwZWN0IGJhZCBvZmZzZXQgICAgIAorICAgIFx4ezEwMDAwfWFiXD1vZmZzZXQ9NQorRmFpbGVkOiBlcnJvciAtMzM6IGJhZCBvZmZzZXQgdmFsdWUKKworL+28gC91dGYKK0ZhaWxlZDogZXJyb3IgLTI2IGF0IG9mZnNldCAwOiBVVEYtMTYgZXJyb3I6IGlzb2xhdGVkIGxvdyBzdXJyb2dhdGUKKworL1x3K1x4e0M0fS9CLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcdysrCisgICAgICAgIFx4e2M0fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBhXHh7QzR9XHh7QzR9CisgMDogYVx4e2M0fQorCisvXHcrXHh7QzR9L0IsdXRmLHRhYmxlcz0yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx3KworICAgICAgICBceHtjNH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYVx4e0M0fVx4e0M0fQorIDA6IGFceHtjNH1ceHtjNH0KKyAgICAKKy9cVytceHtDNH0vQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFcrCisgICAgICAgIFx4e2M0fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAhXHh7QzR9CisgMDogIVx4e2M0fQorIAorL1xXK1x4e0M0fS9CLHV0Zix0YWJsZXM9MgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcVysrCisgICAgICAgIFx4e2M0fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAhXHh7QzR9CisgMDogIVx4e2M0fQorCisvXFcrXHh7QTF9L0IsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxXKworICAgICAgICBceHthMX0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIVx4e0ExfQorIDA6ICFceHthMX0KKyAKKy9cVytceHtBMX0vQix1dGYsdGFibGVzPTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFcrCisgICAgICAgIFx4e2ExfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAhXHh7QTF9CisgMDogIVx4e2ExfQorCisvWFxzK1x4e0EwfS9CLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBYCisgICAgICAgIFxzKysKKyAgICAgICAgXHh7YTB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFhceDIwXHh7QTB9XHh7QTB9CisgMDogWCBceHthMH0KKworL1hccytceHtBMH0vQix1dGYsdGFibGVzPTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgWAorICAgICAgICBccysKKyAgICAgICAgXHh7YTB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFhceDIwXHh7QTB9XHh7QTB9CisgMDogWCBceHthMH1ceHthMH0KKworL1xTK1x4e0EwfS9CLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcUysKKyAgICAgICAgXHh7YTB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFhceHtBMH1ceHtBMH0KKyAwOiBYXHh7YTB9XHh7YTB9CisKKy9cUytceHtBMH0vQix1dGYsdGFibGVzPTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFMrKworICAgICAgICBceHthMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgWFx4e0EwfVx4e0EwfQorIDA6IFhceHthMH0KKworL1x4e2EwfStccyEvQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7YTB9KysKKyAgICAgICAgXHMKKyAgICAgICAgIQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBceHthMH1ceDIwIQorIDA6IFx4e2EwfSAhCisKKy9ceHthMH0rXHMhL0IsdXRmLHRhYmxlcz0yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4e2EwfSsKKyAgICAgICAgXHMKKyAgICAgICAgIQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBceHthMH1ceDIwIQorIDA6IFx4e2EwfSAhCisKKy8oKlVURilhYmMvbmV2ZXJfdXRmCitGYWlsZWQ6IGVycm9yIDE3NCBhdCBvZmZzZXQgNjogdXNpbmcgVVRGIGlzIGRpc2FibGVkIGJ5IHRoZSBhcHBsaWNhdGlvbgorCisvYWJjL3V0ZixuZXZlcl91dGYKK0ZhaWxlZDogZXJyb3IgMTc0IGF0IG9mZnNldCAwOiB1c2luZyBVVEYgaXMgZGlzYWJsZWQgYnkgdGhlIGFwcGxpY2F0aW9uCisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vSUJpLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAvaSBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorRmlyc3QgY29kZSB1bml0ID0gJ0EnIChjYXNlbGVzcykKK0xhc3QgY29kZSB1bml0ID0gXHh7MWZiMH0gKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnQScKK0xhc3QgY29kZSB1bml0ID0gXHh7MWZiMH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNQorCisvQUJceHsxZmIwfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQUJceHsxZmIwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnQScKK0xhc3QgY29kZSB1bml0ID0gXHh7MWZiMH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvQUJceHsxZmIwfS9JQmksdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIEFCXHh7MWZiMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorRmlyc3QgY29kZSB1bml0ID0gJ0EnIChjYXNlbGVzcykKK0xhc3QgY29kZSB1bml0ID0gXHh7MWZiMH0gKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9ceHs0MDF9XHh7NDIwfVx4ezQyMX1ceHs0MjJ9XHh7NDIzfVx4ezQyNH1ceHs0MjV9XHh7NDI2fVx4ezQyN31ceHs0Mjh9XHh7NDI5fVx4ezQyYX1ceHs0MmJ9XHh7NDJjfVx4ezQyZH1ceHs0MmV9XHh7NDJmfS9JaSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MgdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHs0MDF9IChjYXNlbGVzcykKK0xhc3QgY29kZSB1bml0ID0gXHh7NDJmfSAoY2FzZWxlc3MpCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDE3CisgICAgXHh7NDAxfVx4ezQyMH1ceHs0MjF9XHh7NDIyfVx4ezQyM31ceHs0MjR9XHh7NDI1fVx4ezQyNn1ceHs0Mjd9XHh7NDI4fVx4ezQyOX1ceHs0MmF9XHh7NDJifVx4ezQyY31ceHs0MmR9XHh7NDJlfVx4ezQyZn0KKyAwOiBceHs0MDF9XHh7NDIwfVx4ezQyMX1ceHs0MjJ9XHh7NDIzfVx4ezQyNH1ceHs0MjV9XHh7NDI2fVx4ezQyN31ceHs0Mjh9XHh7NDI5fVx4ezQyYX1ceHs0MmJ9XHh7NDJjfVx4ezQyZH1ceHs0MmV9XHh7NDJmfQorICAgIFx4ezQ1MX1ceHs0NDB9XHh7NDQxfVx4ezQ0Mn1ceHs0NDN9XHh7NDQ0fVx4ezQ0NX1ceHs0NDZ9XHh7NDQ3fVx4ezQ0OH1ceHs0NDl9XHh7NDRhfVx4ezQ0Yn1ceHs0NGN9XHh7NDRkfVx4ezQ0ZX1ceHs0NGZ9CisgMDogXHh7NDUxfVx4ezQ0MH1ceHs0NDF9XHh7NDQyfVx4ezQ0M31ceHs0NDR9XHh7NDQ1fVx4ezQ0Nn1ceHs0NDd9XHh7NDQ4fVx4ezQ0OX1ceHs0NGF9XHh7NDRifVx4ezQ0Y31ceHs0NGR9XHh7NDRlfVx4ezQ0Zn0KKworL1visaVdL0JpLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAvaSBceHsyYzY1fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1te4rGlXS9CaSx1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgL2kgW15ceHsyYzY1fV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzpibGFuazpdXS9CLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwOSBceGEwXHh7MTY4MH1ceHsxODBlfVx4ezIwMDB9LVx4ezIwMGF9XHh7MjAyZn1ceHsyMDVmfVx4ezMwMDB9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezIxMmF9Ky9JaSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MgdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBLIGsgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIEtLa2tceHsyMTJhfQorIDA6IEtLa2tceHsyMTJhfQorCisvcysvSWksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogUyBzIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBTU3NzXHh7MTdmfQorIDA6IFNTc3NceHsxN2Z9CisKKyMgTm9uLVVURiBjaGFyYWN0ZXJzIHNob3VsZCBnaXZlIGVycm9ycyBpbiBib3RoIDE2LWJpdCBhbmQgMzItYml0IG1vZGVzLgorCisvXHh7MTEwMDAwfS91dGYKK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCA5OiBjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBceHt9IG9yIFxve30gaXMgdG9vIGxhcmdlCisKKy9cb3s0MjAwMDAwfS91dGYKK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCAxMDogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisvXHh7MTAwfSpBL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KisKKyAgICAgICAgQQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBBIFx4ZmYgCitMYXN0IGNvZGUgdW5pdCA9ICdBJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgQQorIDA6IEEKKworL1x4ezEwMH0qXGQoP1IpL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KisKKyAgICAgICAgXGQKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIDEgMiAzIDQgNSA2IDcgOCA5IFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1taXHh7MTAwfV0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtaXHh7MTAwfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogWiBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgWlx4ezEwMH0KKyAwOiBaCisgICAgXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBceHsxMDB9WgorIDA6IFx4ezEwMH0KKworL1t6LVx4ezEwMH1dL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbei1ceGZmXHh7MTAwfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogeiB7IHwgfSB+IFx4N2YgXHg4MCBceDgxIFx4ODIgXHg4MyBceDg0IFx4ODUgXHg4NiBceDg3IAorICBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyBceDk0IFx4OTUgXHg5NiAKKyAgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIFx4OWYgXHhhMCBceGExIFx4YTIgXHhhMyBceGE0IFx4YTUgCisgIFx4YTYgXHhhNyBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIFx4YjIgXHhiMyBceGI0IAorICBceGI1IFx4YjYgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhjMCBceGMxIFx4YzIgXHhjMyAKKyAgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgXHhkMCBceGQxIFx4ZDIgCisgIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIFx4ZGYgXHhlMCBceGUxIAorICBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCBceGVlIFx4ZWYgXHhmMCAKKyAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgXHhmZCBceGZlIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1t6XFFhLWRdxIBcRV0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtcLVxdYWR6XHh7MTAwfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogLSBdIGEgZCB6IFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBceHsxMDB9CisgMDogXHh7MTAwfQorICAgIMSAIAorIDA6IFx4ezEwMH0KKworL1thYlx4ezEwMH1dYWJjKHh5eig/MSkpL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYWJceHsxMDB9XQorICAgICAgICBhYmMKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIHh5egorICAgICAgICBSZWN1cnNlCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgXHhmZiAKK0xhc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDcKKworL1x4ezEwMH0qXHMvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0qKworICAgICAgICBccworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDA5IFx4MGEgXHgwYiBceDBjIFx4MGQgXHgyMCBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDB9KlxkL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KisKKyAgICAgICAgXGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDB9Klx3L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KisKKyAgICAgICAgXHcKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIAorICBRIFIgUyBUIFUgViBXIFggWSBaIF8gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IAorICBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDB9KlxEL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KgorICAgICAgICBcRAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDA5IFx4MGEgCisgIFx4MGIgXHgwYyBceDBkIFx4MGUgXHgwZiBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IAorICBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgXHgxZiBceDIwICEgIiAjICQgJSAmICcgKCApICogKyAsIC0gLiAvIDogOyA8ID0gPiAKKyAgPyBAIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gYCBhIGIgYyAKKyAgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IHsgfCB9IH4gXHg3ZiBceDgwIFx4ODEgXHg4MiAKKyAgXHg4MyBceDg0IFx4ODUgXHg4NiBceDg3IFx4ODggXHg4OSBceDhhIFx4OGIgXHg4YyBceDhkIFx4OGUgXHg4ZiBceDkwIFx4OTEgCisgIFx4OTIgXHg5MyBceDk0IFx4OTUgXHg5NiBceDk3IFx4OTggXHg5OSBceDlhIFx4OWIgXHg5YyBceDlkIFx4OWUgXHg5ZiBceGEwIAorICBceGExIFx4YTIgXHhhMyBceGE0IFx4YTUgXHhhNiBceGE3IFx4YTggXHhhOSBceGFhIFx4YWIgXHhhYyBceGFkIFx4YWUgXHhhZiAKKyAgXHhiMCBceGIxIFx4YjIgXHhiMyBceGI0IFx4YjUgXHhiNiBceGI3IFx4YjggXHhiOSBceGJhIFx4YmIgXHhiYyBceGJkIFx4YmUgCisgIFx4YmYgXHhjMCBceGMxIFx4YzIgXHhjMyBceGM0IFx4YzUgXHhjNiBceGM3IFx4YzggXHhjOSBceGNhIFx4Y2IgXHhjYyBceGNkIAorICBceGNlIFx4Y2YgXHhkMCBceGQxIFx4ZDIgXHhkMyBceGQ0IFx4ZDUgXHhkNiBceGQ3IFx4ZDggXHhkOSBceGRhIFx4ZGIgXHhkYyAKKyAgXHhkZCBceGRlIFx4ZGYgXHhlMCBceGUxIFx4ZTIgXHhlMyBceGU0IFx4ZTUgXHhlNiBceGU3IFx4ZTggXHhlOSBceGVhIFx4ZWIgCisgIFx4ZWMgXHhlZCBceGVlIFx4ZWYgXHhmMCBceGYxIFx4ZjIgXHhmMyBceGY0IFx4ZjUgXHhmNiBceGY3IFx4ZjggXHhmOSBceGZhIAorICBceGZiIFx4ZmMgXHhmZCBceGZlIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMH0qXFMvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0qCisgICAgICAgIFxTCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDAgXHgwMSBceDAyIFx4MDMgXHgwNCBceDA1IFx4MDYgXHgwNyBceDA4IFx4MGUgXHgwZiAKKyAgXHgxMCBceDExIFx4MTIgXHgxMyBceDE0IFx4MTUgXHgxNiBceDE3IFx4MTggXHgxOSBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgCisgIFx4MWYgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIAorICBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFogWyBcIF0gXiBfIGAgYSBiIGMgZCBlIGYgZyBoIAorICBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiB7IHwgfSB+IFx4N2YgXHg4MCBceDgxIFx4ODIgXHg4MyBceDg0IAorICBceDg1IFx4ODYgXHg4NyBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyAKKyAgXHg5NCBceDk1IFx4OTYgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIFx4OWYgXHhhMCBceGExIFx4YTIgCisgIFx4YTMgXHhhNCBceGE1IFx4YTYgXHhhNyBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIAorICBceGIyIFx4YjMgXHhiNCBceGI1IFx4YjYgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhjMCAKKyAgXHhjMSBceGMyIFx4YzMgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgCisgIFx4ZDAgXHhkMSBceGQyIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIAorICBceGRmIFx4ZTAgXHhlMSBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCAKKyAgXHhlZSBceGVmIFx4ZjAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgCisgIFx4ZmQgXHhmZSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDB9KlxXL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KgorICAgICAgICBcVworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDA5IFx4MGEgCisgIFx4MGIgXHgwYyBceDBkIFx4MGUgXHgwZiBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IAorICBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgXHgxZiBceDIwICEgIiAjICQgJSAmICcgKCApICogKyAsIC0gLiAvIDogOyA8ID0gPiAKKyAgPyBAIFsgXCBdIF4gYCB7IHwgfSB+IFx4N2YgXHg4MCBceDgxIFx4ODIgXHg4MyBceDg0IFx4ODUgXHg4NiBceDg3IFx4ODggXHg4OSAKKyAgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyBceDk0IFx4OTUgXHg5NiBceDk3IFx4OTggCisgIFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIFx4OWYgXHhhMCBceGExIFx4YTIgXHhhMyBceGE0IFx4YTUgXHhhNiBceGE3IAorICBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIFx4YjIgXHhiMyBceGI0IFx4YjUgXHhiNiAKKyAgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhjMCBceGMxIFx4YzIgXHhjMyBceGM0IFx4YzUgCisgIFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgXHhkMCBceGQxIFx4ZDIgXHhkMyBceGQ0IAorICBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIFx4ZGYgXHhlMCBceGUxIFx4ZTIgXHhlMyAKKyAgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCBceGVlIFx4ZWYgXHhmMCBceGYxIFx4ZjIgCisgIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgXHhmZCBceGZlIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1tceHsxMDV9LVx4ezEwOX1dL0lCaSx1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4ezEwNH0tXHh7MTA5fV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4ezEwNH0KKyAwOiBceHsxMDR9CisgICAgXHh7MTA1fQorIDA6IFx4ezEwNX0KKyAgICBceHsxMDl9ICAKKyAwOiBceHsxMDl9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9CitObyBtYXRjaAorICAgIFx4ezEwYX0gCitObyBtYXRjaAorICAgIAorL1t6LVx4ezEwMH1dL0lCaSx1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1p6LVx4ZmZceHszOWN9XHh7M2JjfVx4ezIxMmJ9XHh7MWU5ZX1ceHsyMTJifVx4ezE3OH1ceHsxMDB9LVx4ezEwMX1dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFogeiB7IHwgfSB+IFx4N2YgXHg4MCBceDgxIFx4ODIgXHg4MyBceDg0IFx4ODUgXHg4NiAKKyAgXHg4NyBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyBceDk0IFx4OTUgCisgIFx4OTYgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIFx4OWYgXHhhMCBceGExIFx4YTIgXHhhMyBceGE0IAorICBceGE1IFx4YTYgXHhhNyBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIFx4YjIgXHhiMyAKKyAgXHhiNCBceGI1IFx4YjYgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhjMCBceGMxIFx4YzIgCisgIFx4YzMgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgXHhkMCBceGQxIAorICBceGQyIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIFx4ZGYgXHhlMCAKKyAgXHhlMSBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCBceGVlIFx4ZWYgCisgIFx4ZjAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgXHhmZCBceGZlIAorICBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgWgorIDA6IFoKKyAgICB6CisgMDogegorICAgIFx4ezM5Y30KKyAwOiBceHszOWN9CisgICAgXHh7MTc4fQorIDA6IFx4ezE3OH0KKyAgICB8CisgMDogfAorICAgIFx4ezgwfQorIDA6IFx4ezgwfQorICAgIFx4e2ZmfQorIDA6IFx4e2ZmfQorICAgIFx4ezEwMH0KKyAwOiBceHsxMDB9CisgICAgXHh7MTAxfSAKKyAwOiBceHsxMDF9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDJ9CitObyBtYXRjaAorICAgIFkKK05vIG1hdGNoCisgICAgeSAgICAgICAgICAgCitObyBtYXRjaAorCisvW3otXHh7MTAwfV0vSUJpLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbWnotXHhmZlx4ezM5Y31ceHszYmN9XHh7MjEyYn1ceHsxZTllfVx4ezIxMmJ9XHh7MTc4fVx4ezEwMH0tXHh7MTAxfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogWiB6IHsgfCB9IH4gXHg3ZiBceDgwIFx4ODEgXHg4MiBceDgzIFx4ODQgXHg4NSBceDg2IAorICBceDg3IFx4ODggXHg4OSBceDhhIFx4OGIgXHg4YyBceDhkIFx4OGUgXHg4ZiBceDkwIFx4OTEgXHg5MiBceDkzIFx4OTQgXHg5NSAKKyAgXHg5NiBceDk3IFx4OTggXHg5OSBceDlhIFx4OWIgXHg5YyBceDlkIFx4OWUgXHg5ZiBceGEwIFx4YTEgXHhhMiBceGEzIFx4YTQgCisgIFx4YTUgXHhhNiBceGE3IFx4YTggXHhhOSBceGFhIFx4YWIgXHhhYyBceGFkIFx4YWUgXHhhZiBceGIwIFx4YjEgXHhiMiBceGIzIAorICBceGI0IFx4YjUgXHhiNiBceGI3IFx4YjggXHhiOSBceGJhIFx4YmIgXHhiYyBceGJkIFx4YmUgXHhiZiBceGMwIFx4YzEgXHhjMiAKKyAgXHhjMyBceGM0IFx4YzUgXHhjNiBceGM3IFx4YzggXHhjOSBceGNhIFx4Y2IgXHhjYyBceGNkIFx4Y2UgXHhjZiBceGQwIFx4ZDEgCisgIFx4ZDIgXHhkMyBceGQ0IFx4ZDUgXHhkNiBceGQ3IFx4ZDggXHhkOSBceGRhIFx4ZGIgXHhkYyBceGRkIFx4ZGUgXHhkZiBceGUwIAorICBceGUxIFx4ZTIgXHhlMyBceGU0IFx4ZTUgXHhlNiBceGU3IFx4ZTggXHhlOSBceGVhIFx4ZWIgXHhlYyBceGVkIFx4ZWUgXHhlZiAKKyAgXHhmMCBceGYxIFx4ZjIgXHhmMyBceGY0IFx4ZjUgXHhmNiBceGY3IFx4ZjggXHhmOSBceGZhIFx4ZmIgXHhmYyBceGZkIFx4ZmUgCisgIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezNhM31CL0lCaSx1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgY2xpc3QgMDNhMyAwM2MyIDAzYzMKKyAgICAgL2kgQgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MgdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceGZmIAorTGFzdCBjb2RlIHVuaXQgPSAnQicgKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy8uL3V0ZgorICAgIFx4ezExMDAwMH0KKyoqIEZhaWxlZDogY2hhcmFjdGVyIFx4ezExMDAwMH0gaXMgZ3JlYXRlciB0aGFuIDB4MTBmZmZmIGFuZCBzbyBjYW5ub3QgYmUgY29udmVydGVkIHRvIFVURi0xNgorCisjIEVuZCBvZiB0ZXN0aW5wdXQxMgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDEyLTMyIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDEyLTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZjE4MzQKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTItMzIKQEAgLTAsMCArMSwxMzY0IEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGlzIGZvciBVVEYtMTYgYW5kIFVURi0zMiBzdXBwb3J0LCBpbmNsdWRpbmcgVW5pY29kZQorIyBwcm9wZXJ0aWVzLiBJdCBpcyByZWxldmFudCBvbmx5IHRvIHRoZSAxNi1iaXQgYW5kIDMyLWJpdCBsaWJyYXJpZXMuIFRoZQorIyBvdXRwdXQgaXMgZGlmZmVyZW50IGZvciBlYWNoIGxpYnJhcnksIHNvIHRoZXJlIGFyZSBzZXBhcmF0ZSBvdXRwdXQgZmlsZXMuCisKKy/Dw8N4eHgvSUIsdXRmLG5vX3V0Zl9jaGVjaworKiogRmFpbGVkOiBpbnZhbGlkIFVURi04IHN0cmluZyBjYW5ub3QgYmUgY29udmVydGVkIHRvIDMyLWJpdCBzdHJpbmcKKworL2FiYy91dGYKKyAgICDDXQorKiogRmFpbGVkOiBpbnZhbGlkIFVURi04IHN0cmluZyBjYW5ub3QgYmUgdXNlZCBhcyBpbnB1dCBpbiBVVEYgbW9kZQorCisjIENoZWNrIG1heGltdW0gY2hhcmFjdGVyIHNpemUgCisKKy9ceHtmZmZmfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ZmZmZn0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7ZmZmZn0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTAwMDB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDAwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7MTAwMDB9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7MTAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDAwfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7MTAwMH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTAwMDB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDAwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7MTAwMDB9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMDAwMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMDAwMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7MTAwMDAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMGZmZmZ9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMGZmZmZ9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEwZmZmZn0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvW1x4e2ZmfV0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4e2ZmfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGZmCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1tceHsxMDB9XS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsxMDB9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ODAvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezgwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceDgwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ZmYvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4e2ZmfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGZmCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4e0Q1NWN9XHh7YWQ2ZH1ceHtDNUI0fS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ZDU1Y31ceHthZDZkfVx4e2M1YjR9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4e2Q1NWN9CitMYXN0IGNvZGUgdW5pdCA9IFx4e2M1YjR9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBceHtENTVjfVx4e2FkNmR9XHh7QzVCNH0KKyAwOiBceHtkNTVjfVx4e2FkNmR9XHh7YzViNH0KKworL1x4ezY1ZTV9XHh7NjcyY31ceHs4YTllfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7NjVlNX1ceHs2NzJjfVx4ezhhOWV9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezY1ZTV9CitMYXN0IGNvZGUgdW5pdCA9IFx4ezhhOWV9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBceHs2NWU1fVx4ezY3MmN9XHh7OGE5ZX0KKyAwOiBceHs2NWU1fVx4ezY3MmN9XHh7OGE5ZX0KKworL1x4ezgwfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ODB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ODAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MDg0fS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7ODR9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ODQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTA0fS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTA0fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsxMDR9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezg2MX0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezg2MX0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7ODYxfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsyMTJhYn0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezIxMmFifQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsyMTJhYn0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvW15hYlx4QzAtXHhGMF0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtceDAwLWBjLVx4YmZceGYxLVx4ZmZdIChuZWcpCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDAgXHgwMSBceDAyIFx4MDMgXHgwNCBceDA1IFx4MDYgXHgwNyBceDA4IFx4MDkgXHgwYSAKKyAgXHgwYiBceDBjIFx4MGQgXHgwZSBceDBmIFx4MTAgXHgxMSBceDEyIFx4MTMgXHgxNCBceDE1IFx4MTYgXHgxNyBceDE4IFx4MTkgCisgIFx4MWEgXHgxYiBceDFjIFx4MWQgXHgxZSBceDFmIFx4MjAgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IAorICA1IDYgNyA4IDkgOiA7IDwgPSA+ID8gQCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIAorICBaIFsgXCBdIF4gXyBgIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IHsgfCB9IH4gXHg3ZiAKKyAgXHg4MCBceDgxIFx4ODIgXHg4MyBceDg0IFx4ODUgXHg4NiBceDg3IFx4ODggXHg4OSBceDhhIFx4OGIgXHg4YyBceDhkIFx4OGUgCisgIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyBceDk0IFx4OTUgXHg5NiBceDk3IFx4OTggXHg5OSBceDlhIFx4OWIgXHg5YyBceDlkIAorICBceDllIFx4OWYgXHhhMCBceGExIFx4YTIgXHhhMyBceGE0IFx4YTUgXHhhNiBceGE3IFx4YTggXHhhOSBceGFhIFx4YWIgXHhhYyAKKyAgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIFx4YjIgXHhiMyBceGI0IFx4YjUgXHhiNiBceGI3IFx4YjggXHhiOSBceGJhIFx4YmIgCisgIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIAorICBceGZjIFx4ZmQgXHhmZSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgXHh7ZjF9CisgMDogXHh7ZjF9CisgICAgXHh7YmZ9CisgMDogXHh7YmZ9CisgICAgXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBceHsxMDAwfQorIDA6IFx4ezEwMDB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHtjMH0KK05vIG1hdGNoCisgICAgXHh7ZjB9CitObyBtYXRjaAorCisvxIB7Myw0fS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwfXszfQorICAgICAgICBceHsxMDB9PysKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7MTAwfQorTGFzdCBjb2RlIHVuaXQgPSBceHsxMDB9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwXHh7MTAwfQorIDA6IFx4ezEwMH1ceHsxMDB9XHh7MTAwfQorCisvKFx4ezEwMH0rfHgpL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgXHh7MTAwfSsrCisgICAgICAgIEFsdAorICAgICAgICB4CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiB4IFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyhceHsxMDB9KmF8eCkvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBceHsxMDB9KisKKyAgICAgICAgYQorICAgICAgICBBbHQKKyAgICAgICAgeAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogYSB4IFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyhceHsxMDB9ezAsMn1hfHgpL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgXHh7MTAwfXswLDJ9KworICAgICAgICBhCisgICAgICAgIEFsdAorICAgICAgICB4CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIHggXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKFx4ezEwMH17MSwyfWF8eCkvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBceHsxMDB9CisgICAgICAgIFx4ezEwMH17MCwxfSsKKyAgICAgICAgYQorICAgICAgICBBbHQKKyAgICAgICAgeAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogeCBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEwMH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvYVx4ezEwMH1ceHsxMDF9Ki9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYVx4ezEwMH0KKyAgICAgICAgXHh7MTAxfSorCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSBceHsxMDB9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworL2FceHsxMDB9XHh7MTAxfSsvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIGFceHsxMDB9CisgICAgICAgIFx4ezEwMX0rKworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gXHh7MTAxfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9bXlx4e2M0fV0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW15ceHtjNH1dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1tceHsxMDB9XS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7MTAwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsxMDB9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBceHsxMDB9CisgMDogXHh7MTAwfQorICAgIFpceHsxMDB9CisgMDogXHh7MTAwfQorICAgIFx4ezEwMH1aCisgMDogXHh7MTAwfQorCisvW1x4ZmZdL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHtmZn0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhmZgorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgPlx4e2ZmfTwKKyAwOiBceHtmZn0KKworL1teXHhmZl0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFteXHh7ZmZ9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMH1hYmMoeHl6KD8xKSkvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH1hYmMKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIHh5egorICAgICAgICBSZWN1cnNlCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsxMDB9CitMYXN0IGNvZGUgdW5pdCA9ICd6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA3CisKKy9cNzc3L0ksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7MWZmfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgIFx4ezFmZn0KKyAwOiBceHsxZmZ9CisgIFw3NzcKKyAwOiBceHsxZmZ9CisKKy9ceHsxMDB9K1x4ezIwMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0rKworICAgICAgICBceHsyMDB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEwMH0KK0xhc3QgY29kZSB1bml0ID0gXHh7MjAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9ceHsxMDB9K1gvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0rKworICAgICAgICBYCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEwMH0KK0xhc3QgY29kZSB1bml0ID0gJ1gnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworL15bXFHEgFxFLVxRxZBcRS9CLHV0ZgorRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDEzOiBtaXNzaW5nIHRlcm1pbmF0aW5nIF0gZm9yIGNoYXJhY3RlciBjbGFzcworCisvWC91dGYKKyAgICBYWFx4e2Q4MDB9XD1ub191dGZfY2hlY2sKKyAwOiBYCisgICAgWFhceHtkYTAwfVw9bm9fdXRmX2NoZWNrCisgMDogWAorICAgIFhYXHh7ZGMwMH1cPW5vX3V0Zl9jaGVjaworIDA6IFgKKyAgICBYWFx4e2RlMDB9XD1ub191dGZfY2hlY2sKKyAwOiBYCisgICAgWFhceHtkZmZmfVw9bm9fdXRmX2NoZWNrCisgMDogWAorXD0gRXhwZWN0IFVURiBlcnJvcgorICAgIFhYXHh7ZDgwMH0KK0ZhaWxlZDogZXJyb3IgLTI3OiBVVEYtMzIgZXJyb3I6IGNvZGUgcG9pbnRzIDB4ZDgwMC0weGRmZmYgYXJlIG5vdCBkZWZpbmVkIGF0IG9mZnNldCAyCisgICAgWFhceHtkYTAwfQorRmFpbGVkOiBlcnJvciAtMjc6IFVURi0zMiBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWQgYXQgb2Zmc2V0IDIKKyAgICBYWFx4e2RjMDB9CitGYWlsZWQ6IGVycm9yIC0yNzogVVRGLTMyIGVycm9yOiBjb2RlIHBvaW50cyAweGQ4MDAtMHhkZmZmIGFyZSBub3QgZGVmaW5lZCBhdCBvZmZzZXQgMgorICAgIFhYXHh7ZGUwMH0KK0ZhaWxlZDogZXJyb3IgLTI3OiBVVEYtMzIgZXJyb3I6IGNvZGUgcG9pbnRzIDB4ZDgwMC0weGRmZmYgYXJlIG5vdCBkZWZpbmVkIGF0IG9mZnNldCAyCisgICAgWFhceHtkZmZmfQorRmFpbGVkOiBlcnJvciAtMjc6IFVURi0zMiBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWQgYXQgb2Zmc2V0IDIKKyAgICBYWFx4ezExMDAwMH0KK0ZhaWxlZDogZXJyb3IgLTI4OiBVVEYtMzIgZXJyb3I6IGNvZGUgcG9pbnRzIGdyZWF0ZXIgdGhhbiAweDEwZmZmZiBhcmUgbm90IGRlZmluZWQgYXQgb2Zmc2V0IDIKKyAgICBYWFx4e2Q4MDB9XHh7MTIzNH0KK0ZhaWxlZDogZXJyb3IgLTI3OiBVVEYtMzIgZXJyb3I6IGNvZGUgcG9pbnRzIDB4ZDgwMC0weGRmZmYgYXJlIG5vdCBkZWZpbmVkIGF0IG9mZnNldCAyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYWFx4e2Q4MDB9XD1vZmZzZXQ9MworTm8gbWF0Y2gKKyAgICAKKy8oPzw9LilYL3V0ZgorICAgIFhYXHh7ZDgwMH1cPW9mZnNldD0zCitGYWlsZWQ6IGVycm9yIC0yNzogVVRGLTMyIGVycm9yOiBjb2RlIHBvaW50cyAweGQ4MDAtMHhkZmZmIGFyZSBub3QgZGVmaW5lZCBhdCBvZmZzZXQgMgorCisvKCpVVEYxNilceHsxMTIzNH0vCitGYWlsZWQ6IGVycm9yIDE2MCBhdCBvZmZzZXQgNTogKCpWRVJCKSBub3QgcmVjb2duaXplZCBvciBtYWxmb3JtZWQKKyAgYWJjZFx4ezExMjM0fXBxcgorCisvKCpVVEYpXHh7MTEyMzR9L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsxMTIzNH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICBhYmNkXHh7MTEyMzR9cHFyCisgMDogXHh7MTEyMzR9CisKKy8oKlVURi0zMilceHsxMTIzNH0vCitGYWlsZWQ6IGVycm9yIDE2MCBhdCBvZmZzZXQgNTogKCpWRVJCKSBub3QgcmVjb2duaXplZCBvciBtYWxmb3JtZWQKKyAgYWJjZFx4ezExMjM0fXBxcgorCisvKCpVVEYtMzIpXHh7MTEyfS8KK0ZhaWxlZDogZXJyb3IgMTYwIGF0IG9mZnNldCA1OiAoKlZFUkIpIG5vdCByZWNvZ25pemVkIG9yIG1hbGZvcm1lZAorICBhYmNkXHh7MTEyMzR9cHFyCisKKy8oKkNSTEYpKCpVVEYxNikoKkJTUl9VTklDT0RFKWFcUmIvSQorRmFpbGVkOiBlcnJvciAxNjAgYXQgb2Zmc2V0IDEyOiAoKlZFUkIpIG5vdCByZWNvZ25pemVkIG9yIG1hbGZvcm1lZAorCisvKCpDUkxGKSgqVVRGMzIpKCpCU1JfVU5JQ09ERSlhXFJiL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogdXRmCitcUiBtYXRjaGVzIGFueSBVbmljb2RlIG5ld2xpbmUKK0ZvcmNlZCBuZXdsaW5lIGlzIENSTEYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvXGgvSSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDA5IFx4MjAgXHhhMCBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgQUJDXHh7MDl9CisgMDogXHh7MDl9CisgICAgQUJDXHh7MjB9CisgMDogIAorICAgIEFCQ1x4e2EwfQorIDA6IFx4e2EwfQorICAgIEFCQ1x4ezE2ODB9CisgMDogXHh7MTY4MH0KKyAgICBBQkNceHsxODBlfQorIDA6IFx4ezE4MGV9CisgICAgQUJDXHh7MjAwMH0KKyAwOiBceHsyMDAwfQorICAgIEFCQ1x4ezIwMmZ9CisgMDogXHh7MjAyZn0KKyAgICBBQkNceHsyMDVmfQorIDA6IFx4ezIwNWZ9CisgICAgQUJDXHh7MzAwMH0KKyAwOiBceHszMDAwfQorCisvXHYvSSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDBhIFx4MGIgXHgwYyBceDBkIFx4ODUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIEFCQ1x4ezBhfQorIDA6IFx4ezBhfQorICAgIEFCQ1x4ezBifQorIDA6IFx4ezBifQorICAgIEFCQ1x4ezBjfQorIDA6IFx4ezBjfQorICAgIEFCQ1x4ezBkfQorIDA6IFx4ezBkfQorICAgIEFCQ1x4ezg1fQorIDA6IFx4ezg1fQorICAgIEFCQ1x4ezIwMjh9CisgMDogXHh7MjAyOH0KKworL1xoKkEvSSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDA5IFx4MjAgQSBceGEwIFx4ZmYgCitMYXN0IGNvZGUgdW5pdCA9ICdBJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgQ0RCQUJDCisgMDogQQorICAgIFx4ezIwMDB9QUJDCisgMDogXHh7MjAwMH1BCisKKy9cUipBL0ksYnNyPXVuaWNvZGUsdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorXFIgbWF0Y2hlcyBhbnkgVW5pY29kZSBuZXdsaW5lCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDBhIFx4MGIgXHgwYyBceDBkIEEgXHg4NSBceGZmIAorTGFzdCBjb2RlIHVuaXQgPSAnQScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIENEQkFCQworIDA6IEEKKyAgICBceHsyMDI4fUEKKyAwOiBceHsyMDI4fUEKKworL1x2K0EvSSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDBhIFx4MGIgXHgwYyBceDBkIFx4ODUgXHhmZiAKK0xhc3QgY29kZSB1bml0ID0gJ0EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworL1xzP3h4eFxzL0ksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDBhIFx4MGIgXHgwYyBceDBkIFx4MjAgeCAKK0xhc3QgY29kZSB1bml0ID0gJ3gnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKworL1xzeHh4XHMvSSx1dGYsdGFibGVzPTIKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDA5IFx4MGEgXHgwYiBceDBjIFx4MGQgXHgyMCBceDg1IFx4YTAgCitMYXN0IGNvZGUgdW5pdCA9ICd4JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisgICAgQUJceHs4NX14eHhceHthMH1YWVoKKyAwOiBceHs4NX14eHhceHthMH0KKyAgICBBQlx4e2EwfXh4eFx4ezg1fVhZWgorIDA6IFx4e2EwfXh4eFx4ezg1fQorCisvXFMgXFMvSSx1dGYsdGFibGVzPTIKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDBlIFx4MGYgCisgIFx4MTAgXHgxMSBceDEyIFx4MTMgXHgxNCBceDE1IFx4MTYgXHgxNyBceDE4IFx4MTkgXHgxYSBceDFiIFx4MWMgXHgxZCBceDFlIAorICBceDFmICEgIiAjICQgJSAmICcgKCApICogKyAsIC0gLiAvIDAgMSAyIDMgNCA1IDYgNyA4IDkgOiA7IDwgPSA+ID8gQCBBIEIgQyAKKyAgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaIFsgXCBdIF4gXyBgIGEgYiBjIGQgZSBmIGcgaCAKKyAgaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogeyB8IH0gfiBceDdmIFx4ODAgXHg4MSBceDgyIFx4ODMgXHg4NCAKKyAgXHg4NiBceDg3IFx4ODggXHg4OSBceDhhIFx4OGIgXHg4YyBceDhkIFx4OGUgXHg4ZiBceDkwIFx4OTEgXHg5MiBceDkzIFx4OTQgCisgIFx4OTUgXHg5NiBceDk3IFx4OTggXHg5OSBceDlhIFx4OWIgXHg5YyBceDlkIFx4OWUgXHg5ZiBceGExIFx4YTIgXHhhMyBceGE0IAorICBceGE1IFx4YTYgXHhhNyBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIFx4YjIgXHhiMyAKKyAgXHhiNCBceGI1IFx4YjYgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhjMCBceGMxIFx4YzIgCisgIFx4YzMgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgXHhkMCBceGQxIAorICBceGQyIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIFx4ZGYgXHhlMCAKKyAgXHhlMSBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCBceGVlIFx4ZWYgCisgIFx4ZjAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgXHhmZCBceGZlIAorICBceGZmIAorTGFzdCBjb2RlIHVuaXQgPSAnICcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIFx4e2EyfSBceHs4NH0KKyAwOiBceHthMn0gXHh7ODR9CisgICAgQSBaCisgMDogQSBaCisKKy9hKy91dGYKKyAgICBhXHh7MTIzfWFhXD1vZmZzZXQ9MQorIDA6IGFhCisgICAgYVx4ezEyM31hYVw9b2Zmc2V0PTIKKyAwOiBhYQorICAgIGFceHsxMjN9YWFcPW9mZnNldD0zCisgMDogYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ezEyM31hYVw9b2Zmc2V0PTQKK05vIG1hdGNoCitcPSBFeHBlY3QgYmFkIG9mZnNldCBlcnJvciAgICAgCisgICAgYVx4ezEyM31hYVw9b2Zmc2V0PTUKK0ZhaWxlZDogZXJyb3IgLTMzOiBiYWQgb2Zmc2V0IHZhbHVlCisgICAgYVx4ezEyM31hYVw9b2Zmc2V0PTYKK0ZhaWxlZDogZXJyb3IgLTMzOiBiYWQgb2Zmc2V0IHZhbHVlCisKKy9ceHsxMjM0fSsvSWksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7MTIzNH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHh7MTIzNH0rPy9JaSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MgdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHsxMjM0fQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMjM0fSsrL0lpLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEyMzR9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEyMzR9ezJ9L0lpLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezEyMzR9CitMYXN0IGNvZGUgdW5pdCA9IFx4ezEyMzR9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworL1teXHh7YzR9XS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW15ceHtjNH1dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvWCtceHsyMDB9L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBYKysKKyAgICAgICAgXHh7MjAwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnWCcKK0xhc3QgY29kZSB1bml0ID0gXHh7MjAwfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9cUi9JLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MGEgXHgwYiBceDBjIFx4MGQgXHg4NSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKyMgQ2hlY2sgYmFkIG9mZnNldCAKKworL2EvdXRmCitcPSBFeHBlY3QgYmFkIFVURi0xNiBvZmZzZXQsIG9yIG5vIG1hdGNoIGluIDMyLWJpdAorICAgIFx4ezEwMDAwfVw9b2Zmc2V0PTEKK05vIG1hdGNoCisgICAgXHh7MTAwMDB9YWJcPW9mZnNldD0xCisgMDogYQorXD0gRXhwZWN0IDE2LWJpdCBtYXRjaCwgMzItYml0IG5vIG1hdGNoCisgICAgXHh7MTAwMDB9YWJcPW9mZnNldD0yCitObyBtYXRjaAorXD0gRXhwZWN0IG5vIG1hdGNoICAgICAKKyAgICBceHsxMDAwMH1hYlw9b2Zmc2V0PTMKK05vIG1hdGNoCitcPSBFeHBlY3Qgbm8gbWF0Y2ggaW4gMTYtYml0LCBiYWQgb2Zmc2V0IGluIDMyLWJpdCAgICAKKyAgICBceHsxMDAwMH1hYlw9b2Zmc2V0PTQKK0ZhaWxlZDogZXJyb3IgLTMzOiBiYWQgb2Zmc2V0IHZhbHVlCitcPSBFeHBlY3QgYmFkIG9mZnNldCAgICAgCisgICAgXHh7MTAwMDB9YWJcPW9mZnNldD01CitGYWlsZWQ6IGVycm9yIC0zMzogYmFkIG9mZnNldCB2YWx1ZQorCisv7byAL3V0ZgorRmFpbGVkOiBlcnJvciAtMjcgYXQgb2Zmc2V0IDA6IFVURi0zMiBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWQKKworL1x3K1x4e0M0fS9CLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcdysrCisgICAgICAgIFx4e2M0fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBhXHh7QzR9XHh7QzR9CisgMDogYVx4e2M0fQorCisvXHcrXHh7QzR9L0IsdXRmLHRhYmxlcz0yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx3KworICAgICAgICBceHtjNH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYVx4e0M0fVx4e0M0fQorIDA6IGFceHtjNH1ceHtjNH0KKyAgICAKKy9cVytceHtDNH0vQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFcrCisgICAgICAgIFx4e2M0fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAhXHh7QzR9CisgMDogIVx4e2M0fQorIAorL1xXK1x4e0M0fS9CLHV0Zix0YWJsZXM9MgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcVysrCisgICAgICAgIFx4e2M0fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAhXHh7QzR9CisgMDogIVx4e2M0fQorCisvXFcrXHh7QTF9L0IsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxXKworICAgICAgICBceHthMX0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIVx4e0ExfQorIDA6ICFceHthMX0KKyAKKy9cVytceHtBMX0vQix1dGYsdGFibGVzPTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFcrCisgICAgICAgIFx4e2ExfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAhXHh7QTF9CisgMDogIVx4e2ExfQorCisvWFxzK1x4e0EwfS9CLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBYCisgICAgICAgIFxzKysKKyAgICAgICAgXHh7YTB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFhceDIwXHh7QTB9XHh7QTB9CisgMDogWCBceHthMH0KKworL1hccytceHtBMH0vQix1dGYsdGFibGVzPTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgWAorICAgICAgICBccysKKyAgICAgICAgXHh7YTB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFhceDIwXHh7QTB9XHh7QTB9CisgMDogWCBceHthMH1ceHthMH0KKworL1xTK1x4e0EwfS9CLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcUysKKyAgICAgICAgXHh7YTB9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFhceHtBMH1ceHtBMH0KKyAwOiBYXHh7YTB9XHh7YTB9CisKKy9cUytceHtBMH0vQix1dGYsdGFibGVzPTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFMrKworICAgICAgICBceHthMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgWFx4e0EwfVx4e0EwfQorIDA6IFhceHthMH0KKworL1x4e2EwfStccyEvQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHh7YTB9KysKKyAgICAgICAgXHMKKyAgICAgICAgIQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBceHthMH1ceDIwIQorIDA6IFx4e2EwfSAhCisKKy9ceHthMH0rXHMhL0IsdXRmLHRhYmxlcz0yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4e2EwfSsKKyAgICAgICAgXHMKKyAgICAgICAgIQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBceHthMH1ceDIwIQorIDA6IFx4e2EwfSAhCisKKy8oKlVURilhYmMvbmV2ZXJfdXRmCitGYWlsZWQ6IGVycm9yIDE3NCBhdCBvZmZzZXQgNjogdXNpbmcgVVRGIGlzIGRpc2FibGVkIGJ5IHRoZSBhcHBsaWNhdGlvbgorCisvYWJjL3V0ZixuZXZlcl91dGYKK0ZhaWxlZDogZXJyb3IgMTc0IGF0IG9mZnNldCAwOiB1c2luZyBVVEYgaXMgZGlzYWJsZWQgYnkgdGhlIGFwcGxpY2F0aW9uCisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vSUJpLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAvaSBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorRmlyc3QgY29kZSB1bml0ID0gJ0EnIChjYXNlbGVzcykKK0xhc3QgY29kZSB1bml0ID0gXHh7MWZiMH0gKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnQScKK0xhc3QgY29kZSB1bml0ID0gXHh7MWZiMH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNQorCisvQUJceHsxZmIwfS9JQix1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQUJceHsxZmIwfQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnQScKK0xhc3QgY29kZSB1bml0ID0gXHh7MWZiMH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvQUJceHsxZmIwfS9JQmksdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIEFCXHh7MWZiMH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorRmlyc3QgY29kZSB1bml0ID0gJ0EnIChjYXNlbGVzcykKK0xhc3QgY29kZSB1bml0ID0gXHh7MWZiMH0gKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9ceHs0MDF9XHh7NDIwfVx4ezQyMX1ceHs0MjJ9XHh7NDIzfVx4ezQyNH1ceHs0MjV9XHh7NDI2fVx4ezQyN31ceHs0Mjh9XHh7NDI5fVx4ezQyYX1ceHs0MmJ9XHh7NDJjfVx4ezQyZH1ceHs0MmV9XHh7NDJmfS9JaSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MgdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHs0MDF9IChjYXNlbGVzcykKK0xhc3QgY29kZSB1bml0ID0gXHh7NDJmfSAoY2FzZWxlc3MpCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDE3CisgICAgXHh7NDAxfVx4ezQyMH1ceHs0MjF9XHh7NDIyfVx4ezQyM31ceHs0MjR9XHh7NDI1fVx4ezQyNn1ceHs0Mjd9XHh7NDI4fVx4ezQyOX1ceHs0MmF9XHh7NDJifVx4ezQyY31ceHs0MmR9XHh7NDJlfVx4ezQyZn0KKyAwOiBceHs0MDF9XHh7NDIwfVx4ezQyMX1ceHs0MjJ9XHh7NDIzfVx4ezQyNH1ceHs0MjV9XHh7NDI2fVx4ezQyN31ceHs0Mjh9XHh7NDI5fVx4ezQyYX1ceHs0MmJ9XHh7NDJjfVx4ezQyZH1ceHs0MmV9XHh7NDJmfQorICAgIFx4ezQ1MX1ceHs0NDB9XHh7NDQxfVx4ezQ0Mn1ceHs0NDN9XHh7NDQ0fVx4ezQ0NX1ceHs0NDZ9XHh7NDQ3fVx4ezQ0OH1ceHs0NDl9XHh7NDRhfVx4ezQ0Yn1ceHs0NGN9XHh7NDRkfVx4ezQ0ZX1ceHs0NGZ9CisgMDogXHh7NDUxfVx4ezQ0MH1ceHs0NDF9XHh7NDQyfVx4ezQ0M31ceHs0NDR9XHh7NDQ1fVx4ezQ0Nn1ceHs0NDd9XHh7NDQ4fVx4ezQ0OX1ceHs0NGF9XHh7NDRifVx4ezQ0Y31ceHs0NGR9XHh7NDRlfVx4ezQ0Zn0KKworL1visaVdL0JpLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAvaSBceHsyYzY1fQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1te4rGlXS9CaSx1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgL2kgW15ceHsyYzY1fV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzpibGFuazpdXS9CLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwOSBceGEwXHh7MTY4MH1ceHsxODBlfVx4ezIwMDB9LVx4ezIwMGF9XHh7MjAyZn1ceHsyMDVmfVx4ezMwMDB9XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezIxMmF9Ky9JaSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MgdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBLIGsgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIEtLa2tceHsyMTJhfQorIDA6IEtLa2tceHsyMTJhfQorCisvcysvSWksdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogUyBzIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBTU3NzXHh7MTdmfQorIDA6IFNTc3NceHsxN2Z9CisKKyMgTm9uLVVURiBjaGFyYWN0ZXJzIHNob3VsZCBnaXZlIGVycm9ycyBpbiBib3RoIDE2LWJpdCBhbmQgMzItYml0IG1vZGVzLgorCisvXHh7MTEwMDAwfS91dGYKK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCA5OiBjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBceHt9IG9yIFxve30gaXMgdG9vIGxhcmdlCisKKy9cb3s0MjAwMDAwfS91dGYKK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCAxMDogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisvXHh7MTAwfSpBL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KisKKyAgICAgICAgQQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBBIFx4ZmYgCitMYXN0IGNvZGUgdW5pdCA9ICdBJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgQQorIDA6IEEKKworL1x4ezEwMH0qXGQoP1IpL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KisKKyAgICAgICAgXGQKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIDEgMiAzIDQgNSA2IDcgOCA5IFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1taXHh7MTAwfV0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtaXHh7MTAwfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogWiBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgWlx4ezEwMH0KKyAwOiBaCisgICAgXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBceHsxMDB9WgorIDA6IFx4ezEwMH0KKworL1t6LVx4ezEwMH1dL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbei1ceGZmXHh7MTAwfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogeiB7IHwgfSB+IFx4N2YgXHg4MCBceDgxIFx4ODIgXHg4MyBceDg0IFx4ODUgXHg4NiBceDg3IAorICBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyBceDk0IFx4OTUgXHg5NiAKKyAgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIFx4OWYgXHhhMCBceGExIFx4YTIgXHhhMyBceGE0IFx4YTUgCisgIFx4YTYgXHhhNyBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIFx4YjIgXHhiMyBceGI0IAorICBceGI1IFx4YjYgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhjMCBceGMxIFx4YzIgXHhjMyAKKyAgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgXHhkMCBceGQxIFx4ZDIgCisgIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIFx4ZGYgXHhlMCBceGUxIAorICBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCBceGVlIFx4ZWYgXHhmMCAKKyAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgXHhmZCBceGZlIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1t6XFFhLWRdxIBcRV0vSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtcLVxdYWR6XHh7MTAwfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogLSBdIGEgZCB6IFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBceHsxMDB9CisgMDogXHh7MTAwfQorICAgIMSAIAorIDA6IFx4ezEwMH0KKworL1thYlx4ezEwMH1dYWJjKHh5eig/MSkpL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYWJceHsxMDB9XQorICAgICAgICBhYmMKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIHh5egorICAgICAgICBSZWN1cnNlCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgXHhmZiAKK0xhc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDcKKworL1x4ezEwMH0qXHMvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0qKworICAgICAgICBccworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDA5IFx4MGEgXHgwYiBceDBjIFx4MGQgXHgyMCBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDB9KlxkL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KisKKyAgICAgICAgXGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDB9Klx3L0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KisKKyAgICAgICAgXHcKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIAorICBRIFIgUyBUIFUgViBXIFggWSBaIF8gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IAorICBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDB9KlxEL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KgorICAgICAgICBcRAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDA5IFx4MGEgCisgIFx4MGIgXHgwYyBceDBkIFx4MGUgXHgwZiBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IAorICBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgXHgxZiBceDIwICEgIiAjICQgJSAmICcgKCApICogKyAsIC0gLiAvIDogOyA8ID0gPiAKKyAgPyBAIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIFwgXSBeIF8gYCBhIGIgYyAKKyAgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IHsgfCB9IH4gXHg3ZiBceDgwIFx4ODEgXHg4MiAKKyAgXHg4MyBceDg0IFx4ODUgXHg4NiBceDg3IFx4ODggXHg4OSBceDhhIFx4OGIgXHg4YyBceDhkIFx4OGUgXHg4ZiBceDkwIFx4OTEgCisgIFx4OTIgXHg5MyBceDk0IFx4OTUgXHg5NiBceDk3IFx4OTggXHg5OSBceDlhIFx4OWIgXHg5YyBceDlkIFx4OWUgXHg5ZiBceGEwIAorICBceGExIFx4YTIgXHhhMyBceGE0IFx4YTUgXHhhNiBceGE3IFx4YTggXHhhOSBceGFhIFx4YWIgXHhhYyBceGFkIFx4YWUgXHhhZiAKKyAgXHhiMCBceGIxIFx4YjIgXHhiMyBceGI0IFx4YjUgXHhiNiBceGI3IFx4YjggXHhiOSBceGJhIFx4YmIgXHhiYyBceGJkIFx4YmUgCisgIFx4YmYgXHhjMCBceGMxIFx4YzIgXHhjMyBceGM0IFx4YzUgXHhjNiBceGM3IFx4YzggXHhjOSBceGNhIFx4Y2IgXHhjYyBceGNkIAorICBceGNlIFx4Y2YgXHhkMCBceGQxIFx4ZDIgXHhkMyBceGQ0IFx4ZDUgXHhkNiBceGQ3IFx4ZDggXHhkOSBceGRhIFx4ZGIgXHhkYyAKKyAgXHhkZCBceGRlIFx4ZGYgXHhlMCBceGUxIFx4ZTIgXHhlMyBceGU0IFx4ZTUgXHhlNiBceGU3IFx4ZTggXHhlOSBceGVhIFx4ZWIgCisgIFx4ZWMgXHhlZCBceGVlIFx4ZWYgXHhmMCBceGYxIFx4ZjIgXHhmMyBceGY0IFx4ZjUgXHhmNiBceGY3IFx4ZjggXHhmOSBceGZhIAorICBceGZiIFx4ZmMgXHhmZCBceGZlIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezEwMH0qXFMvSUIsdXRmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezEwMH0qCisgICAgICAgIFxTCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDAgXHgwMSBceDAyIFx4MDMgXHgwNCBceDA1IFx4MDYgXHgwNyBceDA4IFx4MGUgXHgwZiAKKyAgXHgxMCBceDExIFx4MTIgXHgxMyBceDE0IFx4MTUgXHgxNiBceDE3IFx4MTggXHgxOSBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgCisgIFx4MWYgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIAorICBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFogWyBcIF0gXiBfIGAgYSBiIGMgZCBlIGYgZyBoIAorICBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiB7IHwgfSB+IFx4N2YgXHg4MCBceDgxIFx4ODIgXHg4MyBceDg0IAorICBceDg1IFx4ODYgXHg4NyBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyAKKyAgXHg5NCBceDk1IFx4OTYgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIFx4OWYgXHhhMCBceGExIFx4YTIgCisgIFx4YTMgXHhhNCBceGE1IFx4YTYgXHhhNyBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIAorICBceGIyIFx4YjMgXHhiNCBceGI1IFx4YjYgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhjMCAKKyAgXHhjMSBceGMyIFx4YzMgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgCisgIFx4ZDAgXHhkMSBceGQyIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIAorICBceGRmIFx4ZTAgXHhlMSBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCAKKyAgXHhlZSBceGVmIFx4ZjAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgCisgIFx4ZmQgXHhmZSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9ceHsxMDB9KlxXL0lCLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBceHsxMDB9KgorICAgICAgICBcVworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDA5IFx4MGEgCisgIFx4MGIgXHgwYyBceDBkIFx4MGUgXHgwZiBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IAorICBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgXHgxZiBceDIwICEgIiAjICQgJSAmICcgKCApICogKyAsIC0gLiAvIDogOyA8ID0gPiAKKyAgPyBAIFsgXCBdIF4gYCB7IHwgfSB+IFx4N2YgXHg4MCBceDgxIFx4ODIgXHg4MyBceDg0IFx4ODUgXHg4NiBceDg3IFx4ODggXHg4OSAKKyAgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyBceDk0IFx4OTUgXHg5NiBceDk3IFx4OTggCisgIFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIFx4OWYgXHhhMCBceGExIFx4YTIgXHhhMyBceGE0IFx4YTUgXHhhNiBceGE3IAorICBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIFx4YjIgXHhiMyBceGI0IFx4YjUgXHhiNiAKKyAgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhjMCBceGMxIFx4YzIgXHhjMyBceGM0IFx4YzUgCisgIFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgXHhkMCBceGQxIFx4ZDIgXHhkMyBceGQ0IAorICBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIFx4ZGYgXHhlMCBceGUxIFx4ZTIgXHhlMyAKKyAgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCBceGVlIFx4ZWYgXHhmMCBceGYxIFx4ZjIgCisgIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgXHhmZCBceGZlIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1tceHsxMDV9LVx4ezEwOX1dL0lCaSx1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4ezEwNH0tXHh7MTA5fV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIFx4ezEwNH0KKyAwOiBceHsxMDR9CisgICAgXHh7MTA1fQorIDA6IFx4ezEwNX0KKyAgICBceHsxMDl9ICAKKyAwOiBceHsxMDl9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9CitObyBtYXRjaAorICAgIFx4ezEwYX0gCitObyBtYXRjaAorICAgIAorL1t6LVx4ezEwMH1dL0lCaSx1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1p6LVx4ZmZceHszOWN9XHh7M2JjfVx4ezIxMmJ9XHh7MWU5ZX1ceHsyMTJifVx4ezE3OH1ceHsxMDB9LVx4ezEwMX1dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcyB1dGYKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFogeiB7IHwgfSB+IFx4N2YgXHg4MCBceDgxIFx4ODIgXHg4MyBceDg0IFx4ODUgXHg4NiAKKyAgXHg4NyBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyBceDk0IFx4OTUgCisgIFx4OTYgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIFx4OWYgXHhhMCBceGExIFx4YTIgXHhhMyBceGE0IAorICBceGE1IFx4YTYgXHhhNyBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIFx4YjIgXHhiMyAKKyAgXHhiNCBceGI1IFx4YjYgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhjMCBceGMxIFx4YzIgCisgIFx4YzMgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgXHhkMCBceGQxIAorICBceGQyIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIFx4ZGYgXHhlMCAKKyAgXHhlMSBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCBceGVlIFx4ZWYgCisgIFx4ZjAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgXHhmZCBceGZlIAorICBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgWgorIDA6IFoKKyAgICB6CisgMDogegorICAgIFx4ezM5Y30KKyAwOiBceHszOWN9CisgICAgXHh7MTc4fQorIDA6IFx4ezE3OH0KKyAgICB8CisgMDogfAorICAgIFx4ezgwfQorIDA6IFx4ezgwfQorICAgIFx4e2ZmfQorIDA6IFx4e2ZmfQorICAgIFx4ezEwMH0KKyAwOiBceHsxMDB9CisgICAgXHh7MTAxfSAKKyAwOiBceHsxMDF9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDJ9CitObyBtYXRjaAorICAgIFkKK05vIG1hdGNoCisgICAgeSAgICAgICAgICAgCitObyBtYXRjaAorCisvW3otXHh7MTAwfV0vSUJpLHV0ZgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbWnotXHhmZlx4ezM5Y31ceHszYmN9XHh7MjEyYn1ceHsxZTllfVx4ezIxMmJ9XHh7MTc4fVx4ezEwMH0tXHh7MTAxfV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzIHV0ZgorU3RhcnRpbmcgY29kZSB1bml0czogWiB6IHsgfCB9IH4gXHg3ZiBceDgwIFx4ODEgXHg4MiBceDgzIFx4ODQgXHg4NSBceDg2IAorICBceDg3IFx4ODggXHg4OSBceDhhIFx4OGIgXHg4YyBceDhkIFx4OGUgXHg4ZiBceDkwIFx4OTEgXHg5MiBceDkzIFx4OTQgXHg5NSAKKyAgXHg5NiBceDk3IFx4OTggXHg5OSBceDlhIFx4OWIgXHg5YyBceDlkIFx4OWUgXHg5ZiBceGEwIFx4YTEgXHhhMiBceGEzIFx4YTQgCisgIFx4YTUgXHhhNiBceGE3IFx4YTggXHhhOSBceGFhIFx4YWIgXHhhYyBceGFkIFx4YWUgXHhhZiBceGIwIFx4YjEgXHhiMiBceGIzIAorICBceGI0IFx4YjUgXHhiNiBceGI3IFx4YjggXHhiOSBceGJhIFx4YmIgXHhiYyBceGJkIFx4YmUgXHhiZiBceGMwIFx4YzEgXHhjMiAKKyAgXHhjMyBceGM0IFx4YzUgXHhjNiBceGM3IFx4YzggXHhjOSBceGNhIFx4Y2IgXHhjYyBceGNkIFx4Y2UgXHhjZiBceGQwIFx4ZDEgCisgIFx4ZDIgXHhkMyBceGQ0IFx4ZDUgXHhkNiBceGQ3IFx4ZDggXHhkOSBceGRhIFx4ZGIgXHhkYyBceGRkIFx4ZGUgXHhkZiBceGUwIAorICBceGUxIFx4ZTIgXHhlMyBceGU0IFx4ZTUgXHhlNiBceGU3IFx4ZTggXHhlOSBceGVhIFx4ZWIgXHhlYyBceGVkIFx4ZWUgXHhlZiAKKyAgXHhmMCBceGYxIFx4ZjIgXHhmMyBceGY0IFx4ZjUgXHhmNiBceGY3IFx4ZjggXHhmOSBceGZhIFx4ZmIgXHhmYyBceGZkIFx4ZmUgCisgIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1x4ezNhM31CL0lCaSx1dGYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgY2xpc3QgMDNhMyAwM2MyIDAzYzMKKyAgICAgL2kgQgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MgdXRmCitTdGFydGluZyBjb2RlIHVuaXRzOiBceGZmIAorTGFzdCBjb2RlIHVuaXQgPSAnQicgKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy8uL3V0ZgorICAgIFx4ezExMDAwMH0KK0ZhaWxlZDogZXJyb3IgLTI4OiBVVEYtMzIgZXJyb3I6IGNvZGUgcG9pbnRzIGdyZWF0ZXIgdGhhbiAweDEwZmZmZiBhcmUgbm90IGRlZmluZWQgYXQgb2Zmc2V0IDAKKworIyBFbmQgb2YgdGVzdGlucHV0MTIKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxMyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzM3ZWJlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDEzCkBAIC0wLDAgKzEsMjcgQEAKKyMgVGhlc2UgREZBIHRlc3RzIGFyZSBmb3IgdGhlIGhhbmRsaW5nIG9mIGNoYXJhY3RlcnMgZ3JlYXRlciB0aGFuIDI1NSBpbgorIyAxNi1iaXQgb3IgMzItYml0LCBub24tVVRGIG1vZGUuIAorCisjZm9yYmlkX3V0ZgorI3N1YmplY3QgZGZhCisKKy9eXHh7ZmZmZn0rL2kKKyAgICBceHtmZmZmfQorIDA6IFx4e2ZmZmZ9CisKKy9eXHh7ZmZmZn0/L2kKKyAgICBceHtmZmZmfQorIDA6IFx4e2ZmZmZ9CisKKy9eXHh7ZmZmZn0qL2kKKyAgICBceHtmZmZmfQorIDA6IFx4e2ZmZmZ9CisKKy9eXHh7ZmZmZn17M30vaQorICAgIFx4e2ZmZmZ9XHh7ZmZmZn1ceHtmZmZmfQorIDA6IFx4e2ZmZmZ9XHh7ZmZmZn1ceHtmZmZmfQorCisvXlx4e2ZmZmZ9ezAsM30vaQorICAgIFx4e2ZmZmZ9CisgMDogXHh7ZmZmZn0KKworIyBFbmQgb2YgdGVzdGlucHV0MTMKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxNC0xNiBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxNC0xNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWI3ZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDE0LTE2CkBAIC0wLDAgKzEsNjEgQEAKKyMgVGhlc2UgdGVzdCBzcGVjaWFsIChtb3N0bHkgZXJyb3IpIFVURiBmZWF0dXJlcyBvZiBERkEgbWF0Y2hpbmcuIFRoZXkgYXJlIGEgCisjIHNlbGVjdGlvbiBvZiB0aGUgbW9yZSBjb21wcmVoZW5zaXZlIHRlc3RzIHRoYXQgYXJlIHJ1biBmb3Igbm9uLURGQSBtYXRjaGluZy4KKyMgVGhlIG91dHB1dCBpcyBkaWZmZXJlbnQgZm9yIHRoZSBkaWZmZXJlbnQgd2lkdGhzLgorCisjc3ViamVjdCBkZmEKKworL1gvdXRmCisgICAgWFhceHtkODAwfQorRmFpbGVkOiBlcnJvciAtMjQ6IFVURi0xNiBlcnJvcjogbWlzc2luZyBsb3cgc3Vycm9nYXRlIGF0IGVuZCBhdCBvZmZzZXQgMgorICAgIFhYXHh7ZDgwMH1cPW9mZnNldD0zCitObyBtYXRjaAorICAgIFhYXHh7ZDgwMH1cPW5vX3V0Zl9jaGVjaworIDA6IFgKKyAgICBYWFx4e2RhMDB9CitGYWlsZWQ6IGVycm9yIC0yNDogVVRGLTE2IGVycm9yOiBtaXNzaW5nIGxvdyBzdXJyb2dhdGUgYXQgZW5kIGF0IG9mZnNldCAyCisgICAgWFhceHtkYTAwfVw9bm9fdXRmX2NoZWNrCisgMDogWAorICAgIFhYXHh7ZGMwMH0KK0ZhaWxlZDogZXJyb3IgLTI2OiBVVEYtMTYgZXJyb3I6IGlzb2xhdGVkIGxvdyBzdXJyb2dhdGUgYXQgb2Zmc2V0IDIKKyAgICBYWFx4e2RjMDB9XD1ub191dGZfY2hlY2sKKyAwOiBYCisgICAgWFhceHtkZTAwfQorRmFpbGVkOiBlcnJvciAtMjY6IFVURi0xNiBlcnJvcjogaXNvbGF0ZWQgbG93IHN1cnJvZ2F0ZSBhdCBvZmZzZXQgMgorICAgIFhYXHh7ZGUwMH1cPW5vX3V0Zl9jaGVjaworIDA6IFgKKyAgICBYWFx4e2RmZmZ9CitGYWlsZWQ6IGVycm9yIC0yNjogVVRGLTE2IGVycm9yOiBpc29sYXRlZCBsb3cgc3Vycm9nYXRlIGF0IG9mZnNldCAyCisgICAgWFhceHtkZmZmfVw9bm9fdXRmX2NoZWNrCisgMDogWAorICAgIFhYXHh7MTEwMDAwfQorKiogRmFpbGVkOiBjaGFyYWN0ZXIgXHh7MTEwMDAwfSBpcyBncmVhdGVyIHRoYW4gMHgxMGZmZmYgYW5kIHNvIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gVVRGLTE2CisgICAgWFhceHtkODAwfVx4ezEyMzR9CitGYWlsZWQ6IGVycm9yIC0yNTogVVRGLTE2IGVycm9yOiBpbnZhbGlkIGxvdyBzdXJyb2dhdGUgYXQgb2Zmc2V0IDMKKyAgICAgICAgICAKKy9iYWR1dGYvdXRmCisgICAgWFx4ZGYKK05vIG1hdGNoCisgICAgWFhceGVmCitObyBtYXRjaAorICAgIFhYWFx4ZWZceDgwCitObyBtYXRjaAorICAgIFhceGY3CitObyBtYXRjaAorICAgIFhYXHhmN1x4ODAKK05vIG1hdGNoCisgICAgWFhYXHhmN1x4ODBceDgwCitObyBtYXRjaAorCisvc2hvcnR1dGYvdXRmCisgICAgWFhceGRmXD1waAorTm8gbWF0Y2gKKyAgICBYWFx4ZWZcPXBoCitObyBtYXRjaAorICAgIFhYXHhlZlx4ODBcPXBoCitObyBtYXRjaAorICAgIFx4ZjdcPXBoCitObyBtYXRjaAorICAgIFx4ZjdceDgwXD1waAorTm8gbWF0Y2gKKworIyBFbmQgb2YgdGVzdGlucHV0MTQKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxNC0zMiBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxNC0zMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGQ3ZmE2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDE0LTMyCkBAIC0wLDAgKzEsNjEgQEAKKyMgVGhlc2UgdGVzdCBzcGVjaWFsIChtb3N0bHkgZXJyb3IpIFVURiBmZWF0dXJlcyBvZiBERkEgbWF0Y2hpbmcuIFRoZXkgYXJlIGEgCisjIHNlbGVjdGlvbiBvZiB0aGUgbW9yZSBjb21wcmVoZW5zaXZlIHRlc3RzIHRoYXQgYXJlIHJ1biBmb3Igbm9uLURGQSBtYXRjaGluZy4KKyMgVGhlIG91dHB1dCBpcyBkaWZmZXJlbnQgZm9yIHRoZSBkaWZmZXJlbnQgd2lkdGhzLgorCisjc3ViamVjdCBkZmEKKworL1gvdXRmCisgICAgWFhceHtkODAwfQorRmFpbGVkOiBlcnJvciAtMjc6IFVURi0zMiBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWQgYXQgb2Zmc2V0IDIKKyAgICBYWFx4e2Q4MDB9XD1vZmZzZXQ9MworTm8gbWF0Y2gKKyAgICBYWFx4e2Q4MDB9XD1ub191dGZfY2hlY2sKKyAwOiBYCisgICAgWFhceHtkYTAwfQorRmFpbGVkOiBlcnJvciAtMjc6IFVURi0zMiBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWQgYXQgb2Zmc2V0IDIKKyAgICBYWFx4e2RhMDB9XD1ub191dGZfY2hlY2sKKyAwOiBYCisgICAgWFhceHtkYzAwfQorRmFpbGVkOiBlcnJvciAtMjc6IFVURi0zMiBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWQgYXQgb2Zmc2V0IDIKKyAgICBYWFx4e2RjMDB9XD1ub191dGZfY2hlY2sKKyAwOiBYCisgICAgWFhceHtkZTAwfQorRmFpbGVkOiBlcnJvciAtMjc6IFVURi0zMiBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWQgYXQgb2Zmc2V0IDIKKyAgICBYWFx4e2RlMDB9XD1ub191dGZfY2hlY2sKKyAwOiBYCisgICAgWFhceHtkZmZmfQorRmFpbGVkOiBlcnJvciAtMjc6IFVURi0zMiBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWQgYXQgb2Zmc2V0IDIKKyAgICBYWFx4e2RmZmZ9XD1ub191dGZfY2hlY2sKKyAwOiBYCisgICAgWFhceHsxMTAwMDB9CitGYWlsZWQ6IGVycm9yIC0yODogVVRGLTMyIGVycm9yOiBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gMHgxMGZmZmYgYXJlIG5vdCBkZWZpbmVkIGF0IG9mZnNldCAyCisgICAgWFhceHtkODAwfVx4ezEyMzR9CitGYWlsZWQ6IGVycm9yIC0yNzogVVRGLTMyIGVycm9yOiBjb2RlIHBvaW50cyAweGQ4MDAtMHhkZmZmIGFyZSBub3QgZGVmaW5lZCBhdCBvZmZzZXQgMgorICAgICAgICAgIAorL2JhZHV0Zi91dGYKKyAgICBYXHhkZgorTm8gbWF0Y2gKKyAgICBYWFx4ZWYKK05vIG1hdGNoCisgICAgWFhYXHhlZlx4ODAKK05vIG1hdGNoCisgICAgWFx4ZjcKK05vIG1hdGNoCisgICAgWFhceGY3XHg4MAorTm8gbWF0Y2gKKyAgICBYWFhceGY3XHg4MFx4ODAKK05vIG1hdGNoCisKKy9zaG9ydHV0Zi91dGYKKyAgICBYWFx4ZGZcPXBoCitObyBtYXRjaAorICAgIFhYXHhlZlw9cGgKK05vIG1hdGNoCisgICAgWFhceGVmXHg4MFw9cGgKK05vIG1hdGNoCisgICAgXHhmN1w9cGgKK05vIG1hdGNoCisgICAgXHhmN1x4ODBcPXBoCitObyBtYXRjaAorCisjIEVuZCBvZiB0ZXN0aW5wdXQxNApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDE0LTggYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTQtOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZmIwZGMxCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDE0LTgKQEAgLTAsMCArMSw2MSBAQAorIyBUaGVzZSB0ZXN0IHNwZWNpYWwgKG1vc3RseSBlcnJvcikgVVRGIGZlYXR1cmVzIG9mIERGQSBtYXRjaGluZy4gVGhleSBhcmUgYSAKKyMgc2VsZWN0aW9uIG9mIHRoZSBtb3JlIGNvbXByZWhlbnNpdmUgdGVzdHMgdGhhdCBhcmUgcnVuIGZvciBub24tREZBIG1hdGNoaW5nLgorIyBUaGUgb3V0cHV0IGlzIGRpZmZlcmVudCBmb3IgdGhlIGRpZmZlcmVudCB3aWR0aHMuCisKKyNzdWJqZWN0IGRmYQorCisvWC91dGYKKyAgICBYWFx4e2Q4MDB9CitGYWlsZWQ6IGVycm9yIC0xNjogVVRGLTggZXJyb3I6IGNvZGUgcG9pbnRzIDB4ZDgwMC0weGRmZmYgYXJlIG5vdCBkZWZpbmVkIGF0IG9mZnNldCAyCisgICAgWFhceHtkODAwfVw9b2Zmc2V0PTMKK0Vycm9yIC0zNiAoYmFkIFVURi04IG9mZnNldCkKKyAgICBYWFx4e2Q4MDB9XD1ub191dGZfY2hlY2sKKyAwOiBYCisgICAgWFhceHtkYTAwfQorRmFpbGVkOiBlcnJvciAtMTY6IFVURi04IGVycm9yOiBjb2RlIHBvaW50cyAweGQ4MDAtMHhkZmZmIGFyZSBub3QgZGVmaW5lZCBhdCBvZmZzZXQgMgorICAgIFhYXHh7ZGEwMH1cPW5vX3V0Zl9jaGVjaworIDA6IFgKKyAgICBYWFx4e2RjMDB9CitGYWlsZWQ6IGVycm9yIC0xNjogVVRGLTggZXJyb3I6IGNvZGUgcG9pbnRzIDB4ZDgwMC0weGRmZmYgYXJlIG5vdCBkZWZpbmVkIGF0IG9mZnNldCAyCisgICAgWFhceHtkYzAwfVw9bm9fdXRmX2NoZWNrCisgMDogWAorICAgIFhYXHh7ZGUwMH0KK0ZhaWxlZDogZXJyb3IgLTE2OiBVVEYtOCBlcnJvcjogY29kZSBwb2ludHMgMHhkODAwLTB4ZGZmZiBhcmUgbm90IGRlZmluZWQgYXQgb2Zmc2V0IDIKKyAgICBYWFx4e2RlMDB9XD1ub191dGZfY2hlY2sKKyAwOiBYCisgICAgWFhceHtkZmZmfQorRmFpbGVkOiBlcnJvciAtMTY6IFVURi04IGVycm9yOiBjb2RlIHBvaW50cyAweGQ4MDAtMHhkZmZmIGFyZSBub3QgZGVmaW5lZCBhdCBvZmZzZXQgMgorICAgIFhYXHh7ZGZmZn1cPW5vX3V0Zl9jaGVjaworIDA6IFgKKyAgICBYWFx4ezExMDAwMH0KK0ZhaWxlZDogZXJyb3IgLTE1OiBVVEYtOCBlcnJvcjogY29kZSBwb2ludHMgZ3JlYXRlciB0aGFuIDB4MTBmZmZmIGFyZSBub3QgZGVmaW5lZCBhdCBvZmZzZXQgMgorICAgIFhYXHh7ZDgwMH1ceHsxMjM0fQorRmFpbGVkOiBlcnJvciAtMTY6IFVURi04IGVycm9yOiBjb2RlIHBvaW50cyAweGQ4MDAtMHhkZmZmIGFyZSBub3QgZGVmaW5lZCBhdCBvZmZzZXQgMgorICAgICAgICAgIAorL2JhZHV0Zi91dGYKKyAgICBYXHhkZgorRmFpbGVkOiBlcnJvciAtMzogVVRGLTggZXJyb3I6IDEgYnl0ZSBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMQorICAgIFhYXHhlZgorRmFpbGVkOiBlcnJvciAtNDogVVRGLTggZXJyb3I6IDIgYnl0ZXMgbWlzc2luZyBhdCBlbmQgYXQgb2Zmc2V0IDIKKyAgICBYWFhceGVmXHg4MAorRmFpbGVkOiBlcnJvciAtMzogVVRGLTggZXJyb3I6IDEgYnl0ZSBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMworICAgIFhceGY3CitGYWlsZWQ6IGVycm9yIC01OiBVVEYtOCBlcnJvcjogMyBieXRlcyBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMQorICAgIFhYXHhmN1x4ODAKK0ZhaWxlZDogZXJyb3IgLTQ6IFVURi04IGVycm9yOiAyIGJ5dGVzIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAyCisgICAgWFhYXHhmN1x4ODBceDgwCitGYWlsZWQ6IGVycm9yIC0zOiBVVEYtOCBlcnJvcjogMSBieXRlIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAzCisKKy9zaG9ydHV0Zi91dGYKKyAgICBYWFx4ZGZcPXBoCitGYWlsZWQ6IGVycm9yIC0zOiBVVEYtOCBlcnJvcjogMSBieXRlIG1pc3NpbmcgYXQgZW5kIGF0IG9mZnNldCAyCisgICAgWFhceGVmXD1waAorRmFpbGVkOiBlcnJvciAtNDogVVRGLTggZXJyb3I6IDIgYnl0ZXMgbWlzc2luZyBhdCBlbmQgYXQgb2Zmc2V0IDIKKyAgICBYWFx4ZWZceDgwXD1waAorRmFpbGVkOiBlcnJvciAtMzogVVRGLTggZXJyb3I6IDEgYnl0ZSBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMgorICAgIFx4ZjdcPXBoCitGYWlsZWQ6IGVycm9yIC01OiBVVEYtOCBlcnJvcjogMyBieXRlcyBtaXNzaW5nIGF0IGVuZCBhdCBvZmZzZXQgMAorICAgIFx4ZjdceDgwXD1waAorRmFpbGVkOiBlcnJvciAtNDogVVRGLTggZXJyb3I6IDIgYnl0ZXMgbWlzc2luZyBhdCBlbmQgYXQgb2Zmc2V0IDAKKworIyBFbmQgb2YgdGVzdGlucHV0MTQKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxNSBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjI5YTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDE1CkBAIC0wLDAgKzEsMzgzIEBACisjIFRoZXNlIGFyZToKKyMKKyMgKDEpIFRlc3RzIG9mIHRoZSBtYXRjaC1saW1pdGluZyBmZWF0dXJlcy4gVGhlIHJlc3VsdHMgYXJlIGRpZmZlcmVudCBmb3IKKyMgaW50ZXJwcmV0aXZlIG9yIEpJVCBtYXRjaGluZywgc28gdGhpcyB0ZXN0IHNob3VsZCBub3QgYmUgcnVuIHdpdGggSklULiBUaGUKKyMgc2FtZSB0ZXN0cyBhcmUgcnVuIHVzaW5nIEpJVCBpbiB0ZXN0IDE3LgorCisjICgyKSBPdGhlciB0ZXN0cyB0aGF0IG11c3Qgbm90IGJlIHJ1biB3aXRoIEpJVC4KKworLyhhKykqenovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIHogCitMYXN0IGNvZGUgdW5pdCA9ICd6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYXp6YmJiYmJiXD1maW5kX2xpbWl0cworTWluaW11bSBtYXRjaCBsaW1pdCA9IDgKK01pbmltdW0gcmVjdXJzaW9uIGxpbWl0ID0gNgorIDA6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYXp6CisgMTogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgIGFhYWFhYWFhYWFhYWF6XD1maW5kX2xpbWl0cworTWluaW11bSBtYXRjaCBsaW1pdCA9IDMyNzY4CitNaW5pbXVtIHJlY3Vyc2lvbiBsaW1pdCA9IDI5CitObyBtYXRjaAorCishKCg/OlxzfC8vLipcXG58L1sqXSg/OlxcbnwuKSo/WypdLykqKSFJCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgLyogdGhpcyBpcyBhIEMgc3R5bGUgY29tbWVudCAqL1w9ZmluZF9saW1pdHMKK01pbmltdW0gbWF0Y2ggbGltaXQgPSAxMjAKK01pbmltdW0gcmVjdXJzaW9uIGxpbWl0ID0gNgorIDA6IC8qIHRoaXMgaXMgYSBDIHN0eWxlIGNvbW1lbnQgKi8KKyAxOiAvKiB0aGlzIGlzIGEgQyBzdHlsZSBjb21tZW50ICovCisKKy9eKD8+YSkrKy8KKyAgICBhYVw9ZmluZF9saW1pdHMKK01pbmltdW0gbWF0Y2ggbGltaXQgPSA1CitNaW5pbXVtIHJlY3Vyc2lvbiBsaW1pdCA9IDIKKyAwOiBhYQorICAgIGFhYWFhYWFhYVw9ZmluZF9saW1pdHMKK01pbmltdW0gbWF0Y2ggbGltaXQgPSAxMgorTWluaW11bSByZWN1cnNpb24gbGltaXQgPSAyCisgMDogYWFhYWFhYWFhCisgICAgCisvKGEpKD8xKSsrLworICAgIGFhXD1maW5kX2xpbWl0cworTWluaW11bSBtYXRjaCBsaW1pdCA9IDcKK01pbmltdW0gcmVjdXJzaW9uIGxpbWl0ID0gNAorIDA6IGFhCisgMTogYQorICAgIGFhYWFhYWFhYVw9ZmluZF9saW1pdHMKK01pbmltdW0gbWF0Y2ggbGltaXQgPSAyMQorTWluaW11bSByZWN1cnNpb24gbGltaXQgPSA0CisgMDogYWFhYWFhYWFhCisgMTogYQorCisvYSg/Oi4pKj9hL2ltcworICAgIGFiYmJiYmJiYmJiYmJiYmJiYmJiYmJhXD1maW5kX2xpbWl0cworTWluaW11bSBtYXRjaCBsaW1pdCA9IDY1CitNaW5pbXVtIHJlY3Vyc2lvbiBsaW1pdCA9IDIKKyAwOiBhYmJiYmJiYmJiYmJiYmJiYmJiYmJiYQorICAgIAorL2EoPzouKCpUSEVOKSkqP2EvaW1zCisgICAgYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmFcPWZpbmRfbGltaXRzCitNaW5pbXVtIG1hdGNoIGxpbWl0ID0gODYKK01pbmltdW0gcmVjdXJzaW9uIGxpbWl0ID0gNDUKKyAwOiBhYmJiYmJiYmJiYmJiYmJiYmJiYmJiYQorCisvYSg/Oi4oKlRIRU46QUJDKSkqP2EvaW1zCisgICAgYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmFcPWZpbmRfbGltaXRzCitNaW5pbXVtIG1hdGNoIGxpbWl0ID0gODYKK01pbmltdW0gcmVjdXJzaW9uIGxpbWl0ID0gNDUKKyAwOiBhYmJiYmJiYmJiYmJiYmJiYmJiYmJiYQorCisvXig/PmErKSg/PmIrKSg/PmMrKSg/PmQrKSg/PmUrKS8KKyAgICAgYWFiYmNjZGRlZVw9ZmluZF9saW1pdHMKK01pbmltdW0gbWF0Y2ggbGltaXQgPSA3CitNaW5pbXVtIHJlY3Vyc2lvbiBsaW1pdCA9IDIKKyAwOiBhYWJiY2NkZGVlCisKKy9eKD8+KGErKSkoPz4oYispKSg/PihjKykpKD8+KGQrKSkoPz4oZSspKS8KKyAgICAgYWFiYmNjZGRlZVw9ZmluZF9saW1pdHMKK01pbmltdW0gbWF0Y2ggbGltaXQgPSAxNworTWluaW11bSByZWN1cnNpb24gbGltaXQgPSAxNgorIDA6IGFhYmJjY2RkZWUKKyAxOiBhYQorIDI6IGJiCisgMzogY2MKKyA0OiBkZAorIDU6IGVlCisKKy9eKD8+KGErKSkoPz5iKykoPz4oYyspKSg/PmQrKSg/PihlKykpLworICAgICBhYWJiY2NkZGVlXD1maW5kX2xpbWl0cworTWluaW11bSBtYXRjaCBsaW1pdCA9IDEzCitNaW5pbXVtIHJlY3Vyc2lvbiBsaW1pdCA9IDEwCisgMDogYWFiYmNjZGRlZQorIDE6IGFhCisgMjogY2MKKyAzOiBlZQorCisvKCpMSU1JVF9NQVRDSD0xMmJjKWFiYy8KK0ZhaWxlZDogZXJyb3IgMTYwIGF0IG9mZnNldCAxNzogKCpWRVJCKSBub3QgcmVjb2duaXplZCBvciBtYWxmb3JtZWQKKworLygqTElNSVRfTUFUQ0g9NDI5NDk2NzI5MClhYmMvCitGYWlsZWQ6IGVycm9yIDE2MCBhdCBvZmZzZXQgMjQ6ICgqVkVSQikgbm90IHJlY29nbml6ZWQgb3IgbWFsZm9ybWVkCisKKy8oKkxJTUlUX1JFQ1VSU0lPTj00Mjk0OTY3MjgwKWFiYy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1JlY3Vyc2lvbiBsaW1pdCA9IDQyOTQ5NjcyODAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvKGErKSp6ei8KKyAgICBhYWFhYWFhYWFhYWFhegorTm8gbWF0Y2gKKyAgICBhYWFhYWFhYWFhYWFhelw9bWF0Y2hfbGltaXQ9MzAwMAorRmFpbGVkOiBlcnJvciAtNDc6IG1hdGNoIGxpbWl0IGV4Y2VlZGVkCisKKy8oYSspKnp6LworICAgIGFhYWFhYWFhYWFhYWF6XD1yZWN1cnNpb25fbGltaXQ9MTAKK0ZhaWxlZDogZXJyb3IgLTUzOiByZWN1cnNpb24gbGltaXQgZXhjZWVkZWQKKworLygqTElNSVRfTUFUQ0g9MzAwMCkoYSspKnp6L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF0Y2ggbGltaXQgPSAzMDAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIHogCitMYXN0IGNvZGUgdW5pdCA9ICd6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWFhYWFhYWFhYWFhYXoKK0ZhaWxlZDogZXJyb3IgLTQ3OiBtYXRjaCBsaW1pdCBleGNlZWRlZAorICAgIGFhYWFhYWFhYWFhYWF6XD1tYXRjaF9saW1pdD02MDAwMAorRmFpbGVkOiBlcnJvciAtNDc6IG1hdGNoIGxpbWl0IGV4Y2VlZGVkCisKKy8oKkxJTUlUX01BVENIPTYwMDAwKSgqTElNSVRfTUFUQ0g9MzAwMCkoYSspKnp6L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF0Y2ggbGltaXQgPSAzMDAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIHogCitMYXN0IGNvZGUgdW5pdCA9ICd6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWFhYWFhYWFhYWFhYXoKK0ZhaWxlZDogZXJyb3IgLTQ3OiBtYXRjaCBsaW1pdCBleGNlZWRlZAorCisvKCpMSU1JVF9NQVRDSD02MDAwMCkoYSspKnp6L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF0Y2ggbGltaXQgPSA2MDAwMAorU3RhcnRpbmcgY29kZSB1bml0czogYSB6IAorTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYWFhYWFhYWFhYWF6CitObyBtYXRjaAorICAgIGFhYWFhYWFhYWFhYWF6XD1tYXRjaF9saW1pdD0zMDAwCitGYWlsZWQ6IGVycm9yIC00NzogbWF0Y2ggbGltaXQgZXhjZWVkZWQKKworLygqTElNSVRfUkVDVVJTSU9OPTEwKShhKykqenovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitSZWN1cnNpb24gbGltaXQgPSAxMAorU3RhcnRpbmcgY29kZSB1bml0czogYSB6IAorTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYWFhYWFhYWFhYWF6CitGYWlsZWQ6IGVycm9yIC01MzogcmVjdXJzaW9uIGxpbWl0IGV4Y2VlZGVkCisgICAgYWFhYWFhYWFhYWFhYXpcPXJlY3Vyc2lvbl9saW1pdD0xMDAwCitGYWlsZWQ6IGVycm9yIC01MzogcmVjdXJzaW9uIGxpbWl0IGV4Y2VlZGVkCisKKy8oKkxJTUlUX1JFQ1VSU0lPTj0xMCkoKkxJTUlUX1JFQ1VSU0lPTj0xMDAwKShhKykqenovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitSZWN1cnNpb24gbGltaXQgPSAxMDAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIHogCitMYXN0IGNvZGUgdW5pdCA9ICd6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWFhYWFhYWFhYWFhYXoKK05vIG1hdGNoCisKKy8oKkxJTUlUX1JFQ1VSU0lPTj0xMDAwKShhKykqenovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitSZWN1cnNpb24gbGltaXQgPSAxMDAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIHogCitMYXN0IGNvZGUgdW5pdCA9ICd6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWFhYWFhYWFhYWFhYXoKK05vIG1hdGNoCisgICAgYWFhYWFhYWFhYWFhYXpcPXJlY3Vyc2lvbl9saW1pdD0xMAorRmFpbGVkOiBlcnJvciAtNTM6IHJlY3Vyc2lvbiBsaW1pdCBleGNlZWRlZAorICAgIAorIyBUaGVzZSB0aHJlZSBoYXZlIGluZmluaXRlbHkgbmVzdGVkIHJlY3Vyc2lvbnMuIAorICAgIAorLygoPzIpKSgoPzEpKS8KKyAgICBhYmMKK0ZhaWxlZDogZXJyb3IgLTUyOiBuZXN0ZWQgcmVjdXJzaW9uIGF0IHRoZSBzYW1lIHN1YmplY3QgcG9zaXRpb24KKworLygoPyhSMilhK3woPzEpYikpLworICAgIGFhYWFiY2RlCitGYWlsZWQ6IGVycm9yIC01MjogbmVzdGVkIHJlY3Vyc2lvbiBhdCB0aGUgc2FtZSBzdWJqZWN0IHBvc2l0aW9uCisKKy8oPyhSKWEqKD8xKXwoKD9SKSliKS8KKyAgICBhYWFhYmNkZQorRmFpbGVkOiBlcnJvciAtNTI6IG5lc3RlZCByZWN1cnNpb24gYXQgdGhlIHNhbWUgc3ViamVjdCBwb3NpdGlvbgorICAgIAorIyBUaGUgYWxsdXNlZHRleHQgbW9kaWZpZXIgZG9lcyBub3Qgd29yayB3aXRoIEpJVCwgd2hpY2ggZG9lcyBub3QgbWFpbnRhaW4KKyMgdGhlIGxlZnRjaGFyL3JpZ2h0Y2hhciBkYXRhLgorCisvYWJjKD89eHl6KS9hbGx1c2VkdGV4dAorICAgIGFiY3h5enBxcgorIDA6IGFiY3h5egorICAgICAgID4+PgorICAgIGFiY3h5enBxclw9YWZ0ZXJ0ZXh0CisgMDogYWJjeHl6CisgICAgICAgPj4+CisgMCsgeHl6cHFyCisgICAgCisvKD88PXBxcilhYmMoPz14eXopL2FsbHVzZWR0ZXh0CisgICAgeHl6cHFyYWJjeHl6cHFyCisgMDogcHFyYWJjeHl6CisgICAgPDw8ICAgPj4+CisgICAgeHl6cHFyYWJjeHl6cHFyXD1hZnRlcnRleHQKKyAwOiBwcXJhYmN4eXoKKyAgICA8PDwgICA+Pj4KKyAwKyB4eXpwcXIKKyAgICAKKy9hXGIvCisgICAgYS5cPWFsbHVzZWR0ZXh0CisgMDogYS4KKyAgICAgPgorICAgIGFcPWFsbHVzZWR0ZXh0ICAKKyAwOiBhCisKKy9hYmNcS3h5ei8KKyAgICBhYmN4eXpcPWFsbHVzZWR0ZXh0CisgMDogYWJjeHl6CisgICAgPDw8ICAgCisKKy9hYmMoPz14eXooKkFDQ0VQVCkpLworICAgIGFiY3h5elw9YWxsdXNlZHRleHQKKyAwOiBhYmN4eXoKKyAgICAgICA+Pj4KKworL2FiYyg/PWFiY2RlKSg/PWFiKS9hbGx1c2VkdGV4dAorICAgIGFiY2FiY2RlZmcKKyAwOiBhYmNhYmNkZQorICAgICAgID4+Pj4+CisgICAgCisjIFRoZXNlIHRlc3RzIHByb3Zva2UgcmVjdXJzaW9uIGxvb3BzLCB3aGljaCBnaXZlIGEgZGlmZmVyZW50IGVycm9yIG1lc3NhZ2UKKyMgd2hlbiBKSVQgaXMgdXNlZC4KKworLyg/UikvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICBhYmNkCitGYWlsZWQ6IGVycm9yIC01MjogbmVzdGVkIHJlY3Vyc2lvbiBhdCB0aGUgc2FtZSBzdWJqZWN0IHBvc2l0aW9uCisKKy8oYXwoP1IpKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY2QKKyAwOiBhCisgMTogYQorICAgIGRlZmcgCitGYWlsZWQ6IGVycm9yIC01MjogbmVzdGVkIHJlY3Vyc2lvbiBhdCB0aGUgc2FtZSBzdWJqZWN0IHBvc2l0aW9uCisKKy8oYWJ8KGJjfChkZXwoP1IpKSkpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgYWJjZAorIDA6IGFiCisgMTogYWIKKyAgICBmZ2hpIAorRmFpbGVkOiBlcnJvciAtNTI6IG5lc3RlZCByZWN1cnNpb24gYXQgdGhlIHNhbWUgc3ViamVjdCBwb3NpdGlvbgorCisvKGFifChiY3woZGV8KD8xKSkpKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY2QKKyAwOiBhYgorIDE6IGFiCisgICAgZmdoaSAKK0ZhaWxlZDogZXJyb3IgLTUyOiBuZXN0ZWQgcmVjdXJzaW9uIGF0IHRoZSBzYW1lIHN1YmplY3QgcG9zaXRpb24KKworL3goYWJ8KGJjfChkZXwoPzEpeCl4KXgpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworRmlyc3QgY29kZSB1bml0ID0gJ3gnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICB4YWIxMjMKKyAwOiB4YWIKKyAxOiBhYgorICAgIHhmZ2hpIAorRmFpbGVkOiBlcnJvciAtNTI6IG5lc3RlZCByZWN1cnNpb24gYXQgdGhlIHNhbWUgc3ViamVjdCBwb3NpdGlvbgorCisvKD8hXHcpKD9SKS8KKyAgICBhYmNkCitGYWlsZWQ6IGVycm9yIC01MjogbmVzdGVkIHJlY3Vyc2lvbiBhdCB0aGUgc2FtZSBzdWJqZWN0IHBvc2l0aW9uCisgICAgPWFiYyAKK0ZhaWxlZDogZXJyb3IgLTUyOiBuZXN0ZWQgcmVjdXJzaW9uIGF0IHRoZSBzYW1lIHN1YmplY3QgcG9zaXRpb24KKworLyg/PVx3KSg/UikvCisgICAgPWFiYyAKK0ZhaWxlZDogZXJyb3IgLTUyOiBuZXN0ZWQgcmVjdXJzaW9uIGF0IHRoZSBzYW1lIHN1YmplY3QgcG9zaXRpb24KKyAgICBhYmNkCitGYWlsZWQ6IGVycm9yIC01MjogbmVzdGVkIHJlY3Vyc2lvbiBhdCB0aGUgc2FtZSBzdWJqZWN0IHBvc2l0aW9uCisKKy8oPzwhXHcpKD9SKS8KKyAgICBhYmNkCitGYWlsZWQ6IGVycm9yIC01MjogbmVzdGVkIHJlY3Vyc2lvbiBhdCB0aGUgc2FtZSBzdWJqZWN0IHBvc2l0aW9uCisKKy8oPzw9XHcpKD9SKS8KKyAgICBhYmNkCitGYWlsZWQ6IGVycm9yIC01MjogbmVzdGVkIHJlY3Vyc2lvbiBhdCB0aGUgc2FtZSBzdWJqZWN0IHBvc2l0aW9uCisKKy8oYSt8KD9SKWIpLworICAgIGFhYQorIDA6IGFhYQorIDE6IGFhYQorICAgIGJiYiAKK0ZhaWxlZDogZXJyb3IgLTUyOiBuZXN0ZWQgcmVjdXJzaW9uIGF0IHRoZSBzYW1lIHN1YmplY3QgcG9zaXRpb24KKworL1teXHhmZl0oKD8xKSkvQkkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW15ceHtmZn1dCisgICAgICAgIENCcmEgMQorICAgICAgICBSZWN1cnNlCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgYWJjZAorRmFpbGVkOiBlcnJvciAtNTI6IG5lc3RlZCByZWN1cnNpb24gYXQgdGhlIHNhbWUgc3ViamVjdCBwb3NpdGlvbgorICAgIAorIyBUaGVzZSB0ZXN0cyBkb24ndCBiZWhhdmUgdGhlIHNhbWUgd2l0aCBKSVQgCisKKy9cdysoP0MxKS9CSSxub19hdXRvX3Bvc3Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHcrCisgICAgICAgIENhbGxvdXQgMSA4IDAKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IG5vX2F1dG9fcG9zc2VzcworU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIAorICBRIFIgUyBUIFUgViBXIFggWSBaIF8gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgYWJjXD1jYWxsb3V0X2ZhaWw9MQorLS0tPmFiYworICAxIF4gIF4gICAgCisgIDEgXiBeICAgICAKKyAgMSBeXiAgICAgIAorICAxICBeIF4gICAgCisgIDEgIF5eICAgICAKKyAgMSAgIF5eICAgIAorTm8gbWF0Y2gKKworLygqTk9fQVVUT19QT1NTRVNTKVx3Kyg/QzEpL0JJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx3KworICAgICAgICBDYWxsb3V0IDEgMjYgMAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogbm9fYXV0b19wb3NzZXNzCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIDEgMiAzIDQgNSA2IDcgOCA5IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgCisgIFEgUiBTIFQgVSBWIFcgWCBZIFogXyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBhYmNcPWNhbGxvdXRfZmFpbD0xCistLS0+YWJjCisgIDEgXiAgXiAgICAKKyAgMSBeIF4gICAgIAorICAxIF5eICAgICAgCisgIDEgIF4gXiAgICAKKyAgMSAgXl4gICAgIAorICAxICAgXl4gICAgCitObyBtYXRjaAorCisjIEVuZCBvZiB0ZXN0aW5wdXQxNQpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDE2IGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxNjU2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTYKQEAgLTAsMCArMSwxNyBAQAorIyBUaGlzIHRlc3QgaXMgcnVuIG9ubHkgd2hlbiBKSVQgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLiBJdCBjaGVja3MgdGhhdCBhbgorIyBhdHRlbXB0IHRvIHVzZSBpdCBoYXMgdGhlIGV4cGVjdGVkIGJlaGF2aW91ci4gSXQgYWxzbyB0ZXN0cyB0aGluZ3MgdGhhdAorIyBhcmUgZGlmZmVyZW50IHdpdGhvdXQgSklULgorCisvYWJjL0ksaml0LGppdHZlcmlmeQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2MnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKK0pJVCBzdXBwb3J0IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyB2ZXJzaW9uIG9mIFBDUkUyCisKKy9hKi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisjIEVuZCBvZiB0ZXN0aW5wdXQxNgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDE3IGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDE3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZWY0MzgKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTcKQEAgLTAsMCArMSw1MTEgQEAKKyMgVGhpcyB0ZXN0IGlzIHJ1biBvbmx5IHdoZW4gSklUIHN1cHBvcnQgaXMgYXZhaWxhYmxlLiBJdCBjaGVja3MgSklUIGNvbXBsZXRlCisjIGFuZCBwYXJ0aWFsIG1vZGVzLCBhbmQgdGhpbmdzIHRoYXQgYXJlIGRpZmZlcmVudCB3aXRoIEpJVC4KKworI3BhdHRlcm4gaml0dmVyaWZ5CisKKyMgSklUIGRvZXMgbm90IHN1cHBvcnQgdGhpcyBwYXR0ZXJuIChjYWxsb3V0IGF0IHN0YXJ0IG9mIGNvbmRpdGlvbikuCisKKy8oPyg/QzEpKD89YSlhKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorSklUIGNvbXBpbGF0aW9uIHdhcyBub3Qgc3VjY2Vzc2Z1bCAobm8gbW9yZSBtZW1vcnkpCisKKyMgVGhlIGZvbGxvd2luZyBwYXR0ZXJuIGNhbm5vdCBiZSBjb21waWxlZCBieSBKSVQuCisKKy9iKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYipiKmIqYiovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKK0pJVCBjb21waWxhdGlvbiB3YXMgbm90IHN1Y2Nlc3NmdWwgKG5vIG1vcmUgbWVtb3J5KQorCisjIENoZWNrIHRoYXQgYW4gaW5maW5pdGUgcmVjdXJzaW9uIGxvb3AgaXMgY2F1Z2h0LgorCisvKD8oUilhKig/MSl8KCg/UikpYikvCisgICAgYWFhYWJjZGUKK0ZhaWxlZDogZXJyb3IgLTQ2OiBKSVQgc3RhY2sgbGltaXQgcmVhY2hlZAorCisvYWJjZC9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnZCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorSklUIGNvbXBpbGF0aW9uIHdhcyBzdWNjZXNzZnVsCisgICAgYWJjZAorIDA6IGFiY2QgKEpJVCkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorTm8gbWF0Y2ggKEpJVCkKKworLygqTk9fSklUKWFiY2QvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2QnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKK0pJVCBjb21waWxhdGlvbiB3YXMgbm90IHN1Y2Nlc3NmdWwKKyAgICBhYmNkCisgMDogYWJjZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6CitObyBtYXRjaAorCisvYWJjZC8KKyAgICBhYmNkCisgMDogYWJjZCAoSklUKQorICAgIGFiXD1wcworUGFydGlhbCBtYXRjaDogYWIgKEpJVCkKKyAgICBhYlw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiIChKSVQpCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXoKK05vIG1hdGNoIChKSVQpCisKKy9hYmNkL2ppdGZhc3QKKyAgICBhYmNkCisgMDogYWJjZCAoSklUKQorICAgIGFiXD1wcworUGFydGlhbCBtYXRjaDogYWIgKEpJVCkKKyAgICBhYlw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiIChKSVQpCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXoKK05vIG1hdGNoIChKSVQpCisKKy9hYmNkL2ppdD0xCisgICAgYWJjZAorIDA6IGFiY2QgKEpJVCkKKyAgICBhYlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiCisgICAgYWJcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6CitObyBtYXRjaCAoSklUKQorICAgIHh5elw9cHMKK05vIG1hdGNoCisKKy9hYmNkL2ppdD0xLGppdGZhc3QKKyAgICBhYmNkCisgMDogYWJjZCAoSklUKQorICAgIGFiXD1wcworRmFpbGVkOiBlcnJvciAtNDU6IGJhZCBKSVQgb3B0aW9uCisgICAgYWJcPXBoCitGYWlsZWQ6IGVycm9yIC00NTogYmFkIEpJVCBvcHRpb24KKyAgICB4eXpcPXBzCitGYWlsZWQ6IGVycm9yIC00NTogYmFkIEpJVCBvcHRpb24KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorTm8gbWF0Y2ggKEpJVCkKKworL2FiY2Qvaml0PTIKKyAgICBhYmNkCisgMDogYWJjZAorICAgIGFiXD1wcworUGFydGlhbCBtYXRjaDogYWIgKEpJVCkKKyAgICBhYlw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXoKK05vIG1hdGNoCisKKy9hYmNkL2ppdD0yLGppdGZhc3QKKyAgICBhYmNkCitGYWlsZWQ6IGVycm9yIC00NTogYmFkIEpJVCBvcHRpb24KKyAgICBhYlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiIChKSVQpCisgICAgYWJcPXBoCitGYWlsZWQ6IGVycm9yIC00NTogYmFkIEpJVCBvcHRpb24KKyAgICB4eXoKK0ZhaWxlZDogZXJyb3IgLTQ1OiBiYWQgSklUIG9wdGlvbgorCisvYWJjZC9qaXQ9MworICAgIGFiY2QKKyAwOiBhYmNkIChKSVQpCisgICAgYWJcPXBzCitQYXJ0aWFsIG1hdGNoOiBhYiAoSklUKQorICAgIGFiXD1waAorUGFydGlhbCBtYXRjaDogYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorTm8gbWF0Y2ggKEpJVCkKKworL2FiY2Qvaml0PTQKKyAgICBhYmNkCisgMDogYWJjZAorICAgIGFiXD1wcworUGFydGlhbCBtYXRjaDogYWIKKyAgICBhYlw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiIChKSVQpCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXoKK05vIG1hdGNoCisKKy9hYmNkL2ppdD01CisgICAgYWJjZAorIDA6IGFiY2QgKEpJVCkKKyAgICBhYlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiCisgICAgYWJcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYiAoSklUKQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6CitObyBtYXRjaCAoSklUKQorCisvYWJjZC9qaXQ9NgorICAgIGFiY2QKKyAwOiBhYmNkCisgICAgYWJcPXBzCitQYXJ0aWFsIG1hdGNoOiBhYiAoSklUKQorICAgIGFiXD1waAorUGFydGlhbCBtYXRjaDogYWIgKEpJVCkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorTm8gbWF0Y2gKKworL2FiY2Qvaml0PTcKKyAgICBhYmNkCisgMDogYWJjZCAoSklUKQorICAgIGFiXD1wcworUGFydGlhbCBtYXRjaDogYWIgKEpJVCkKKyAgICBhYlw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiIChKSVQpCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXoKK05vIG1hdGNoIChKSVQpCisKKy9hYmNkL0ksaml0PTIKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdkJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CitKSVQgY29tcGlsYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKworLygqTk9fU1RBUlRfT1BUKWEoKjptKWIvbWFyaworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorTm8gbWF0Y2gsIG1hcmsgPSBtIChKSVQpCisKKy9eMTIzNDU2NzhhYmNkL20KKyAgICAxMjM0NTY3OGFiY2QKKyAwOiAxMjM0NTY3OGFiY2QgKEpJVCkKKyAgICAKKyMgTGltaXRzIHRlc3RzIHRoYXQgZ2l2ZSBkaWZmZXJlbnQgb3V0cHV0IHdpdGggSklULiAKKworLyhhKykqenovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIHogCitMYXN0IGNvZGUgdW5pdCA9ICd6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCitKSVQgY29tcGlsYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhenpiYmJiYmJcPWZpbmRfbGltaXRzCitNaW5pbXVtIG1hdGNoIGxpbWl0ID0gMgorIDA6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYXp6IChKSVQpCisgMTogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgYWFhYWFhYWFhYWFhYXpcPWZpbmRfbGltaXRzCitNaW5pbXVtIG1hdGNoIGxpbWl0ID0gMTYzODMKK05vIG1hdGNoIChKSVQpCisKKyEoKD86XHN8Ly8uKlxcbnwvWypdKD86XFxufC4pKj9bKl0vKSopIUkKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCitKSVQgY29tcGlsYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKyAgIC8qIHRoaXMgaXMgYSBDIHN0eWxlIGNvbW1lbnQgKi9cPWZpbmRfbGltaXRzCitNaW5pbXVtIG1hdGNoIGxpbWl0ID0gMjkKKyAwOiAvKiB0aGlzIGlzIGEgQyBzdHlsZSBjb21tZW50ICovIChKSVQpCisgMTogLyogdGhpcyBpcyBhIEMgc3R5bGUgY29tbWVudCAqLworCisvXig/PmEpKysvCisgICAgYWFcPWZpbmRfbGltaXRzCitNaW5pbXVtIG1hdGNoIGxpbWl0ID0gMQorIDA6IGFhIChKSVQpCisgICAgYWFhYWFhYWFhXD1maW5kX2xpbWl0cworTWluaW11bSBtYXRjaCBsaW1pdCA9IDEKKyAwOiBhYWFhYWFhYWEgKEpJVCkKKyAgICAKKy8oYSkoPzEpKysvCisgICAgYWFcPWZpbmRfbGltaXRzCitNaW5pbXVtIG1hdGNoIGxpbWl0ID0gMQorIDA6IGFhIChKSVQpCisgMTogYQorICAgIGFhYWFhYWFhYVw9ZmluZF9saW1pdHMKK01pbmltdW0gbWF0Y2ggbGltaXQgPSAxCisgMDogYWFhYWFhYWFhIChKSVQpCisgMTogYQorCisvYSg/Oi4pKj9hL2ltcworICAgIGFiYmJiYmJiYmJiYmJiYmJiYmJiYmJhXD1maW5kX2xpbWl0cworTWluaW11bSBtYXRjaCBsaW1pdCA9IDIyCisgMDogYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmEgKEpJVCkKKyAgICAKKy9hKD86LigqVEhFTikpKj9hL2ltcworICAgIGFiYmJiYmJiYmJiYmJiYmJiYmJiYmJhXD1maW5kX2xpbWl0cworTWluaW11bSBtYXRjaCBsaW1pdCA9IDIyCisgMDogYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmEgKEpJVCkKKworL2EoPzouKCpUSEVOOkFCQykpKj9hL2ltcworICAgIGFiYmJiYmJiYmJiYmJiYmJiYmJiYmJhXD1maW5kX2xpbWl0cworTWluaW11bSBtYXRjaCBsaW1pdCA9IDIyCisgMDogYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmEgKEpJVCkKKworL14oPz5hKykoPz5iKykoPz5jKykoPz5kKykoPz5lKykvCisgICAgIGFhYmJjY2RkZWVcPWZpbmRfbGltaXRzCitNaW5pbXVtIG1hdGNoIGxpbWl0ID0gNQorIDA6IGFhYmJjY2RkZWUgKEpJVCkKKworL14oPz4oYSspKSg/PihiKykpKD8+KGMrKSkoPz4oZCspKSg/PihlKykpLworICAgICBhYWJiY2NkZGVlXD1maW5kX2xpbWl0cworTWluaW11bSBtYXRjaCBsaW1pdCA9IDUKKyAwOiBhYWJiY2NkZGVlIChKSVQpCisgMTogYWEKKyAyOiBiYgorIDM6IGNjCisgNDogZGQKKyA1OiBlZQorCisvXig/PihhKykpKD8+YispKD8+KGMrKSkoPz5kKykoPz4oZSspKS8KKyAgICAgYWFiYmNjZGRlZVw9ZmluZF9saW1pdHMKK01pbmltdW0gbWF0Y2ggbGltaXQgPSA1CisgMDogYWFiYmNjZGRlZSAoSklUKQorIDE6IGFhCisgMjogY2MKKyAzOiBlZQorCisvXig/PihhKykpKD8+YispKD8+KGMrKSkoPz5kKykoPz4oZSspKS9qaXRmYXN0CisgICAgIGFhYmJjY2RkZWVcPWZpbmRfbGltaXRzCitNaW5pbXVtIG1hdGNoIGxpbWl0ID0gNQorIDA6IGFhYmJjY2RkZWUgKEpJVCkKKyAxOiBhYQorIDI6IGNjCisgMzogZWUKKyAgICAgYWFiYmNjZGRlZVw9aml0c3RhY2s9MQorIDA6IGFhYmJjY2RkZWUgKEpJVCkKKyAxOiBhYQorIDI6IGNjCisgMzogZWUKKworLyhhKykqenovCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhYWFhYWFhYWFhegorTm8gbWF0Y2ggKEpJVCkKK1w9IEV4cGVjdCBsaW1pdCBleGNlZWRlZAorICAgIGFhYWFhYWFhYWFhYWF6XD1tYXRjaF9saW1pdD0zMDAwCitGYWlsZWQ6IGVycm9yIC00NzogbWF0Y2ggbGltaXQgZXhjZWVkZWQKKworLygqTElNSVRfTUFUQ0g9MzAwMCkoYSspKnp6L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF0Y2ggbGltaXQgPSAzMDAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIHogCitMYXN0IGNvZGUgdW5pdCA9ICd6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCitKSVQgY29tcGlsYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKyAgICBhYWFhYWFhYWFhYWFhegorRmFpbGVkOiBlcnJvciAtNDc6IG1hdGNoIGxpbWl0IGV4Y2VlZGVkCisgICAgYWFhYWFhYWFhYWFhYXpcPW1hdGNoX2xpbWl0PTYwMDAwCitGYWlsZWQ6IGVycm9yIC00NzogbWF0Y2ggbGltaXQgZXhjZWVkZWQKKworLygqTElNSVRfTUFUQ0g9NjAwMDApKCpMSU1JVF9NQVRDSD0zMDAwKShhKykqenovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXRjaCBsaW1pdCA9IDMwMDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgeiAKK0xhc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKK0pJVCBjb21waWxhdGlvbiB3YXMgc3VjY2Vzc2Z1bAorICAgIGFhYWFhYWFhYWFhYWF6CitGYWlsZWQ6IGVycm9yIC00NzogbWF0Y2ggbGltaXQgZXhjZWVkZWQKKworLygqTElNSVRfTUFUQ0g9NjAwMDApKGErKSp6ei9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01hdGNoIGxpbWl0ID0gNjAwMDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgeiAKK0xhc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKK0pJVCBjb21waWxhdGlvbiB3YXMgc3VjY2Vzc2Z1bAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYWFhYWFhYWFhYXoKK05vIG1hdGNoIChKSVQpCitcPSBFeHBlY3QgbGltaXQgZXhjZWVkZWQKKyAgICBhYWFhYWFhYWFhYWFhelw9bWF0Y2hfbGltaXQ9MzAwMAorRmFpbGVkOiBlcnJvciAtNDc6IG1hdGNoIGxpbWl0IGV4Y2VlZGVkCisKKyMgVGhlc2UgdGhyZWUgaGF2ZSBpbmZpbml0ZWx5IG5lc3RlZCByZWN1cnNpb25zLiAKKyAgICAKKy8oKD8yKSkoKD8xKSkvCisgICAgYWJjCitGYWlsZWQ6IGVycm9yIC00NjogSklUIHN0YWNrIGxpbWl0IHJlYWNoZWQKKworLygoPyhSMilhK3woPzEpYikpLworICAgIGFhYWFiY2RlCitGYWlsZWQ6IGVycm9yIC00NjogSklUIHN0YWNrIGxpbWl0IHJlYWNoZWQKKworLyg/KFIpYSooPzEpfCgoP1IpKWIpLworICAgIGFhYWFiY2RlCitGYWlsZWQ6IGVycm9yIC00NjogSklUIHN0YWNrIGxpbWl0IHJlYWNoZWQKKyAgICAKKyMgSW52YWxpZCBvcHRpb25zIGRpc2FibGUgSklUIHdoZW4gY2FsbGVkIHZpYSBwY3JlMl9tYXRjaCgpLCBjYXVzaW5nIHRoZQorIyBtYXRjaCB0byBoYXBwZW4gdmlhIHRoZSBpbnRlcnByZXRlciwgYnV0IGZvciBmYXN0IEpJVCBpbnZhbGlkIG9wdGlvbnMgYXJlCisjIGlnbm9yZWQsIHNvIGFuIHVuYW5jaG9yZWQgbWF0Y2ggaGFwcGVucy4KKworL2FiY2QvCisgICAgYWJjZFw9YW5jaG9yZWQKKyAwOiBhYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBmYWlsIGFiY2RcPWFuY2hvcmVkIAorTm8gbWF0Y2gKKyAgICAKKy9hYmNkL2ppdGZhc3QKKyAgICBhYmNkXD1hbmNob3JlZCAKKyAwOiBhYmNkIChKSVQpCisgICAgc3VjY2VlZCBhYmNkXD1hbmNob3JlZCAKKyAwOiBhYmNkIChKSVQpCisgICAgCisjIFB1c2gvcG9wIGRvZXMgbm90IGxvc2UgdGhlIEpJVCBpbmZvcm1hdGlvbiwgdGhvdWdoIGppdHZlcmlmeSBhcHBsaWVzIG9ubHkgdG8KKyMgY29tcGlsYXRpb24sIGJ1dCBzZXJpYWxpemluZyAoc2F2ZS9sb2FkKSBkaXNjYXJkcyBKSVQgZGF0YSBjb21wbGV0ZWx5LgorCisvXmFiY1xLZGVmL2luZm8scHVzaAorKiogQXBwbGllcyBvbmx5IHRvIGNvbXBpbGUgd2hlbiBwYXR0ZXJuIGlzIHN0YWNrZWQgd2l0aCAncHVzaCc6IGppdHZlcmlmeQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA2CitKSVQgY29tcGlsYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKyNwb3Agaml0dmVyaWZ5CisgICAgYWJjZGVmCisgMDogZGVmIChKSVQpCisKKy9eYWJjXEtkZWYvaW5mbyxwdXNoCisqKiBBcHBsaWVzIG9ubHkgdG8gY29tcGlsZSB3aGVuIHBhdHRlcm4gaXMgc3RhY2tlZCB3aXRoICdwdXNoJzogaml0dmVyaWZ5CitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDYKK0pJVCBjb21waWxhdGlvbiB3YXMgc3VjY2Vzc2Z1bAorI3NhdmUgdGVzdHNhdmVkMQorI2xvYWQgdGVzdHNhdmVkMQorI3BvcCBqaXR2ZXJpZnkKKyAgICBhYmNkZWYKKyAwOiBkZWYKKyAgICAKKyNsb2FkIHRlc3RzYXZlZDEKKyNwb3Agaml0LGppdHZlcmlmeQorICAgIGFiY2RlZgorIDA6IGRlZiAoSklUKQorICAgIAorIyBUZXN0IHBhdHRlcm4gY29tcGlsYXRpb24KKworLyg/OmF8YnxjfGR8ZSkoP1IpL2ppdD0xCisKKy8oPzphfGJ8Y3xkfGUpKD9SKSg/Uikvaml0PTEKKworLyhhKD86YXxifGN8ZHxlKWIpezgsMTZ9L2ppdD0xCisKKy8oPzp8YXwpezEwMH14L2ppdD0xCisKKyMgVGhlc2UgdGVzdHMgcHJvdm9rZSByZWN1cnNpb24gbG9vcHMsIHdoaWNoIGdpdmUgYSBkaWZmZXJlbnQgZXJyb3IgbWVzc2FnZQorIyB3aGVuIEpJVCBpcyB1c2VkLgorCisvKD9SKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorSklUIGNvbXBpbGF0aW9uIHdhcyBzdWNjZXNzZnVsCisgICAgYWJjZAorRmFpbGVkOiBlcnJvciAtNDY6IEpJVCBzdGFjayBsaW1pdCByZWFjaGVkCisKKy8oYXwoP1IpKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorSklUIGNvbXBpbGF0aW9uIHdhcyBzdWNjZXNzZnVsCisgICAgYWJjZAorIDA6IGEgKEpJVCkKKyAxOiBhCisgICAgZGVmZyAKK0ZhaWxlZDogZXJyb3IgLTQ2OiBKSVQgc3RhY2sgbGltaXQgcmVhY2hlZAorCisvKGFifChiY3woZGV8KD9SKSkpKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorSklUIGNvbXBpbGF0aW9uIHdhcyBzdWNjZXNzZnVsCisgICAgYWJjZAorIDA6IGFiIChKSVQpCisgMTogYWIKKyAgICBmZ2hpIAorRmFpbGVkOiBlcnJvciAtNDY6IEpJVCBzdGFjayBsaW1pdCByZWFjaGVkCisKKy8oYWJ8KGJjfChkZXwoPzEpKSkpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCitKSVQgY29tcGlsYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKyAgICBhYmNkCisgMDogYWIgKEpJVCkKKyAxOiBhYgorICAgIGZnaGkgCitGYWlsZWQ6IGVycm9yIC00NjogSklUIHN0YWNrIGxpbWl0IHJlYWNoZWQKKworL3goYWJ8KGJjfChkZXwoPzEpeCl4KXgpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworRmlyc3QgY29kZSB1bml0ID0gJ3gnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKK0pJVCBjb21waWxhdGlvbiB3YXMgc3VjY2Vzc2Z1bAorICAgIHhhYjEyMworIDA6IHhhYiAoSklUKQorIDE6IGFiCisgICAgeGZnaGkgCitGYWlsZWQ6IGVycm9yIC00NjogSklUIHN0YWNrIGxpbWl0IHJlYWNoZWQKKworLyg/IVx3KSg/UikvCisgICAgYWJjZAorRmFpbGVkOiBlcnJvciAtNDY6IEpJVCBzdGFjayBsaW1pdCByZWFjaGVkCisgICAgPWFiYyAKK0ZhaWxlZDogZXJyb3IgLTQ2OiBKSVQgc3RhY2sgbGltaXQgcmVhY2hlZAorCisvKD89XHcpKD9SKS8KKyAgICA9YWJjIAorRmFpbGVkOiBlcnJvciAtNDY6IEpJVCBzdGFjayBsaW1pdCByZWFjaGVkCisgICAgYWJjZAorRmFpbGVkOiBlcnJvciAtNDY6IEpJVCBzdGFjayBsaW1pdCByZWFjaGVkCisKKy8oPzwhXHcpKD9SKS8KKyAgICBhYmNkCitGYWlsZWQ6IGVycm9yIC00NjogSklUIHN0YWNrIGxpbWl0IHJlYWNoZWQKKworLyg/PD1cdykoP1IpLworICAgIGFiY2QKK0ZhaWxlZDogZXJyb3IgLTQ2OiBKSVQgc3RhY2sgbGltaXQgcmVhY2hlZAorCisvKGErfCg/UiliKS8KKyAgICBhYWEKKyAwOiBhYWEgKEpJVCkKKyAxOiBhYWEKKyAgICBiYmIgCitGYWlsZWQ6IGVycm9yIC00NjogSklUIHN0YWNrIGxpbWl0IHJlYWNoZWQKKworL1teXHhmZl0oKD8xKSkvQkkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW15ceHtmZn1dCisgICAgICAgIENCcmEgMQorICAgICAgICBSZWN1cnNlCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCitKSVQgY29tcGlsYXRpb24gd2FzIHN1Y2Nlc3NmdWwKKyAgICBhYmNkCitGYWlsZWQ6IGVycm9yIC00NjogSklUIHN0YWNrIGxpbWl0IHJlYWNoZWQKKworLyh4KD8xKSl7NH0vCisKKy9bYXhtXXs3fS8KKworLygufC4pKj9ieC8KKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWJheAorRmFpbGVkOiBlcnJvciAtNDc6IG1hdGNoIGxpbWl0IGV4Y2VlZGVkCisKKyMgRW5kIG9mIHRlc3RpbnB1dDE3CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTggYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ZmZmZgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxOApAQCAtMCwwICsxLDE1MyBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBpcyBydW4gb25seSB3aXRoIHRoZSA4LWJpdCBsaWJyYXJ5LiBJdCB0ZXN0cyB0aGUgUE9TSVgKKyMgaW50ZXJmYWNlLCB3aGljaCBpcyBzdXBwb3J0ZWQgb25seSB3aXRoIHRoZSA4LWJpdCBsaWJyYXJ5LiBUaGlzIHRlc3Qgc2hvdWxkCisjIG5vdCBiZSBydW4gd2l0aCBKSVQgKHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgZm9yIHRoZSBQT1NJWCBpbnRlcmZhY2UpLgorICAgIAorI2ZvcmJpZF91dGYKKyNwYXR0ZXJuIHBvc2l4CisKKyMgVGVzdCBpbnZhbGlkIG9wdGlvbnMKKworL2FiYy9hdXRvX2NhbGxvdXQKKyoqIElnbm9yZWQgd2l0aCBQT1NJWCBpbnRlcmZhY2U6IGF1dG9fY2FsbG91dAorCisvYWJjLworICAgYWJjXD1maW5kX2xpbWl0cworKiogSWdub3JlZCB3aXRoIFBPU0lYIGludGVyZmFjZTogZmluZF9saW1pdHMKKyAwOiBhYmMKKworL2FiYy8KKyAgYWJjXD1wYXJ0aWFsX2hhcmQKKyoqIElnbm9yZWQgd2l0aCBQT1NJWCBpbnRlcmZhY2U6IHBhcnRpYWxfaGFyZAorIDA6IGFiYworCisjIFJlYWwgdGVzdHMKKworL2FiYy8KKyAgICBhYmMKKyAwOiBhYmMKKworL15hYmN8ZGVmLworICAgIGFiY2RlZgorIDA6IGFiYworICAgIGFiY2RlZlw9bm90Ym9sCisgMDogZGVmCisKKy8uKigoYWJjKSR8KGRlZikpLworICAgIGRlZmFiYworIDA6IGRlZmFiYworIDE6IGFiYworIDI6IGFiYworICAgIGRlZmFiY1w9bm90ZW9sCisgMDogZGVmCisgMTogZGVmCisgMzogZGVmCisKKy90aGUgcXVpY2sgYnJvd24gZm94LworICAgIHRoZSBxdWljayBicm93biBmb3gKKyAwOiB0aGUgcXVpY2sgYnJvd24gZm94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGUgUXVpY2sgQnJvd24gRm94CitObyBtYXRjaDogUE9TSVggY29kZSAxNzogbWF0Y2ggZmFpbGVkCisKKy90aGUgcXVpY2sgYnJvd24gZm94L2kKKyAgICB0aGUgcXVpY2sgYnJvd24gZm94CisgMDogdGhlIHF1aWNrIGJyb3duIGZveAorICAgIFRoZSBRdWljayBCcm93biBGb3gKKyAwOiBUaGUgUXVpY2sgQnJvd24gRm94CisKKy8oKkxGKWFiYy5kZWYvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcbmRlZgorTm8gbWF0Y2g6IFBPU0lYIGNvZGUgMTc6IG1hdGNoIGZhaWxlZAorCisvKCpMRilhYmMkLworICAgIGFiYworIDA6IGFiYworICAgIGFiY1xuCisgMDogYWJjCisKKy8oYWJjKVwyLworRmFpbGVkOiBQT1NJWCBjb2RlIDE1OiBiYWQgYmFjayByZWZlcmVuY2UgYXQgb2Zmc2V0IDYgICAgIAorCisvKGFiY1wxKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworTm8gbWF0Y2g6IFBPU0lYIGNvZGUgMTc6IG1hdGNoIGZhaWxlZAorCisvYSooYispKHopKHopLworICAgIGFhYWFiYmJienp6egorIDA6IGFhYWFiYmJienoKKyAxOiBiYmJiCisgMjogegorIDM6IHoKKyAgICBhYWFhYmJiYnp6enpcPW92ZWN0b3I9MAorTWF0Y2hlZCB3aXRob3V0IGNhcHR1cmUKKyAgICBhYWFhYmJiYnp6enpcPW92ZWN0b3I9MQorIDA6IGFhYWFiYmJienoKKyAgICBhYWFhYmJiYnp6enpcPW92ZWN0b3I9MgorIDA6IGFhYWFiYmJienoKKyAxOiBiYmJiCisKKy8oKkFOWSlhYi5jZC8KKyAgICBhYi1jZAorIDA6IGFiLWNkCisgICAgYWI9Y2QKKyAwOiBhYj1jZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJcbmNkCitObyBtYXRjaDogUE9TSVggY29kZSAxNzogbWF0Y2ggZmFpbGVkCisKKy9hYi5jZC9zCisgICAgYWItY2QKKyAwOiBhYi1jZAorICAgIGFiPWNkCisgMDogYWI9Y2QKKyAgICBhYlxuY2QKKyAwOiBhYlx4MGFjZAorCisvYShiKWMvbm9fYXV0b19jYXB0dXJlCisgICAgYWJjCitNYXRjaGVkIHdpdGggUkVHX05PU1VCCisKKy9hKD9QPG5hbWU+YiljL25vX2F1dG9fY2FwdHVyZQorICAgIGFiYworTWF0Y2hlZCB3aXRoIFJFR19OT1NVQgorCisvYT98Yj8vCisgICAgYWJjCisgMDogYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZGRkXD1ub3RlbXB0eQorTm8gbWF0Y2g6IFBPU0lYIGNvZGUgMTc6IG1hdGNoIGZhaWxlZAorCisvXHcrQS8KKyAgIENEQUFBQUIKKyAwOiBDREFBQUEKKworL1x3K0EvdW5ncmVlZHkKKyAgIENEQUFBQUIKKyAwOiBDREEKKyAgIAorL1xCaXNzXEIvSSxhZnRlcnRleHQKKyoqIElnbm9yZWQgd2l0aCBQT1NJWCBpbnRlcmZhY2U6IGluZm8KKyAgICBNaXNzaXNzaXBwaQorIDA6IGlzcworIDArIGlzc2lwcGkKKworL2FiYy9cCitGYWlsZWQ6IFBPU0lYIGNvZGUgOTogYmFkIGVzY2FwZSBzZXF1ZW5jZSBhdCBvZmZzZXQgMyAgICAgCisKKyIoPyg/QykiCitGYWlsZWQ6IFBPU0lYIGNvZGUgMzogcGF0dGVybiBlcnJvciBhdCBvZmZzZXQgMiAgICAgCisKKy9hYmNkL3N1YnN0aXR1dGVfZXh0ZW5kZWQKKyoqIElnbm9yZWQgd2l0aCBQT1NJWCBpbnRlcmZhY2U6IHN1YnN0aXR1dGVfZXh0ZW5kZWQKKworL1xbQV17MTAwMDAwMH0qKi9leHBhbmQscmVnZXJyb3JfYnVmZnNpemU9MzEKK0ZhaWxlZDogUE9TSVggY29kZSA0OiA/ICogKyBpbnZhbGlkIGF0IG9mZnNldCAxMDAwMDAKKyoqIHJlZ2Vycm9yKCkgbWVzc2FnZSB0cnVuY2F0ZWQKKworL1xbQV17MTAwMDAwMH0qKi9leHBhbmQscmVnZXJyb3JfYnVmZnNpemU9MzIKK0ZhaWxlZDogUE9TSVggY29kZSA0OiA/ICogKyBpbnZhbGlkIGF0IG9mZnNldCAxMDAwMDAxCisKKyMgRW5kIG9mIHRlc3RkYXRhL3Rlc3RpbnB1dDE4CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTkgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MTkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQxNjljYQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQxOQpAQCAtMCwwICsxLDIxIEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGlzIHJ1biBvbmx5IHdpdGggdGhlIDgtYml0IGxpYnJhcnkuIEl0IHRlc3RzIHRoZSBQT1NJWAorIyBpbnRlcmZhY2Ugd2l0aCBVVEYvVUNQIHN1cHBvcnQsIHdoaWNoIGlzIHN1cHBvcnRlZCBvbmx5IHdpdGggdGhlIDgtYml0CisjIGxpYnJhcnkuIFRoaXMgdGVzdCBzaG91bGQgbm90IGJlIHJ1biB3aXRoIEpJVCAod2hpY2ggaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhlCisjIFBPU0lYIGludGVyZmFjZSkuCisgICAgCisjcGF0dGVybiBwb3NpeAorCisvYVx4ezEyMzR9Yi91dGYKKyAgICBhXHh7MTIzNH1iCisgMDogYVx4ezEyMzR9YgorCisvXHcvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICArKytceHtjMn0KK05vIG1hdGNoOiBQT1NJWCBjb2RlIDE3OiBtYXRjaCBmYWlsZWQKKworL1x3L3VjcAorICAgICsrK1x4e2MyfQorIDA6IFx4YzIKKyAgICAKKyMgRW5kIG9mIHRlc3RkYXRhL3Rlc3RpbnB1dDE5CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MiBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNzg0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MgpAQCAtMCwwICsxLDE1MTYxIEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGlzIG5vdCBQZXJsLWNvbXBhdGlibGUuIEl0IGNoZWNrcyBvbiBzcGVjaWFsIGZlYXR1cmVzCisjIG9mIFBDUkUyJ3MgQVBJLCBlcnJvciBkaWFnbm9zdGljcywgYW5kIHRoZSBjb21waWxlZCBjb2RlIG9mIHNvbWUgcGF0dGVybnMuCisjIEl0IGFsc28gY2hlY2tzIHRoZSBub24tUGVybCBzeW50YXggdGhhdCBQQ1JFMiBzdXBwb3J0cyAoUHl0aG9uLCAuTkVULCAKKyMgT25pZ3VydW1hKS4gVGhlcmUgYXJlIGFsc28gc29tZSB0ZXN0cyB3aGVyZSBQQ1JFMiBhbmQgUGVybCBkaWZmZXIsIAorIyBlaXRoZXIgYmVjYXVzZSBQQ1JFMiBjYW4ndCBiZSBjb21wYXRpYmxlLCBvciB0aGVyZSBpcyBhIHBvc3NpYmxlIFBlcmwgCisjIGJ1Zy4KKworIyBOT1RFOiBUaGlzIGlzIGEgbm9uLVVURiBzZXQgb2YgdGVzdHMuIFdoZW4gVVRGIHN1cHBvcnQgaXMgbmVlZGVkLCB1c2UKKyMgdGVzdCA1LiAKKworI2ZvcmJpZF91dGYKKyNuZXdsaW5lX2RlZmF1bHQgbGYgYW55IGFueWNybGYKKworIyBUZXN0IGJpbmFyeSB6ZXJvZXMgaW4gdGhlIHBhdHRlcm4KKworIyAvYVwwQi8gd2hlcmUgMCBpcyBhIGJpbmFyeSB6ZXJvCisvNjEgNWMgMDAgNjIvQixoZXgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYVx4MDBiCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGFceHswfWIKKyAwOiBhXHgwMGIKKworIyAvYTBiLyB3aGVyZSAwIGlzIGEgYmluYXJ5IHplcm8KKy82MSAwMCA2Mi9CLGhleAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhXHgwMGIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYVx4ezB9YgorIDA6IGFceDAwYgorCisjIC8oPyNCMEMpREUvIHdoZXJlIDAgaXMgYSBiaW5hcnkgemVybworLzI4IDNmIDIzIDQyIDAwIDQzIDI5IDQ0IDQ1L0IsaGV4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIERFCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIERFCisgMDogREUKKworLyhhKWJ8L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy9hYmMvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2MnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBhYmMKKyAwOiBhYmMKKyAgICBkZWZhYmMKKyAwOiBhYmMKKyAgICBhYmNcPWFuY2hvcmVkCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBkZWZhYmNcPWFuY2hvcmVkCitObyBtYXRjaAorICAgIEFCQworTm8gbWF0Y2gKKworL15hYmMvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYWJjCisgMDogYWJjCisgICAgYWJjXD1hbmNob3JlZAorIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZGVmYWJjCitObyBtYXRjaAorICAgIGRlZmFiY1w9YW5jaG9yZWQKK05vIG1hdGNoCisKKy9hK2JjL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9hKmJjL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIAorTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvYXszfWJjL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisKKy8oYWJjfGEreikvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvXmFiYyQvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBkZWZcbmFiYworTm8gbWF0Y2gKKworL2FiXGlkZWYvCitGYWlsZWQ6IGVycm9yIDEwMyBhdCBvZmZzZXQgMzogdW5yZWNvZ25pemVkIGNoYXJhY3RlciBmb2xsb3dzIFwKKworLyg/WClhYlxpZGVmLworRmFpbGVkOiBlcnJvciAxMTEgYXQgb2Zmc2V0IDI6IHVucmVjb2duaXplZCBjaGFyYWN0ZXIgYWZ0ZXIgKD8gb3IgKD8tCisKKy94ezUsNH0vCitGYWlsZWQ6IGVycm9yIDEwNCBhdCBvZmZzZXQgNTogbnVtYmVycyBvdXQgb2Ygb3JkZXIgaW4ge30gcXVhbnRpZmllcgorCisvens2NTUzNn0vCitGYWlsZWQ6IGVycm9yIDEwNSBhdCBvZmZzZXQgNzogbnVtYmVyIHRvbyBiaWcgaW4ge30gcXVhbnRpZmllcgorCisvW2FiY2QvCitGYWlsZWQ6IGVycm9yIDEwNiBhdCBvZmZzZXQgNTogbWlzc2luZyB0ZXJtaW5hdGluZyBdIGZvciBjaGFyYWN0ZXIgY2xhc3MKKworL1tcQl0vQgorRmFpbGVkOiBlcnJvciAxMDcgYXQgb2Zmc2V0IDI6IGludmFsaWQgZXNjYXBlIHNlcXVlbmNlIGluIGNoYXJhY3RlciBjbGFzcworCisvW1xSXS9CCitGYWlsZWQ6IGVycm9yIDEwNyBhdCBvZmZzZXQgMjogaW52YWxpZCBlc2NhcGUgc2VxdWVuY2UgaW4gY2hhcmFjdGVyIGNsYXNzCisKKy9bXFhdL0IKK0ZhaWxlZDogZXJyb3IgMTA3IGF0IG9mZnNldCAyOiBpbnZhbGlkIGVzY2FwZSBzZXF1ZW5jZSBpbiBjaGFyYWN0ZXIgY2xhc3MKKworL1t6LWFdLworRmFpbGVkOiBlcnJvciAxMDggYXQgb2Zmc2V0IDM6IHJhbmdlIG91dCBvZiBvcmRlciBpbiBjaGFyYWN0ZXIgY2xhc3MKKworL14qLworRmFpbGVkOiBlcnJvciAxMDkgYXQgb2Zmc2V0IDE6IHF1YW50aWZpZXIgZG9lcyBub3QgZm9sbG93IGEgcmVwZWF0YWJsZSBpdGVtCisKKy8oYWJjLworRmFpbGVkOiBlcnJvciAxMTQgYXQgb2Zmc2V0IDQ6IG1pc3NpbmcgY2xvc2luZyBwYXJlbnRoZXNpcworCisvKD8jIGFiYy8KK0ZhaWxlZDogZXJyb3IgMTE4IGF0IG9mZnNldCA3OiBtaXNzaW5nICkgYWZ0ZXIgKD8jIGNvbW1lbnQKKworLyg/eilhYmMvCitGYWlsZWQ6IGVycm9yIDExMSBhdCBvZmZzZXQgMjogdW5yZWNvZ25pemVkIGNoYXJhY3RlciBhZnRlciAoPyBvciAoPy0KKworLy4qYi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLy4qP2IvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9jYXR8ZG9nfGVsZXBoYW50L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogYyBkIGUgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICB0aGlzIHNlbnRlbmNlIGV2ZW50dWFsbHkgbWVudGlvbnMgYSBjYXQKKyAwOiBjYXQKKyAgICB0aGlzIHNlbnRlbmNlcyByYW1ibGVzIG9uIGFuZCBvbiBmb3IgYSB3aGlsZSBhbmQgdGhlbiByZWFjaGVzIGVsZXBoYW50CisgMDogZWxlcGhhbnQKKworL2NhdHxkb2d8ZWxlcGhhbnQvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBjIGQgZSAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIHRoaXMgc2VudGVuY2UgZXZlbnR1YWxseSBtZW50aW9ucyBhIGNhdAorIDA6IGNhdAorICAgIHRoaXMgc2VudGVuY2VzIHJhbWJsZXMgb24gYW5kIG9uIGZvciBhIHdoaWxlIGFuZCB0aGVuIHJlYWNoZXMgZWxlcGhhbnQKKyAwOiBlbGVwaGFudAorCisvY2F0fGRvZ3xlbGVwaGFudC9JaQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcworU3RhcnRpbmcgY29kZSB1bml0czogQyBEIEUgYyBkIGUgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICB0aGlzIHNlbnRlbmNlIGV2ZW50dWFsbHkgbWVudGlvbnMgYSBDQVQgY2F0CisgMDogQ0FUCisgICAgdGhpcyBzZW50ZW5jZXMgcmFtYmxlcyBvbiBhbmQgb24gZm9yIGEgd2hpbGUgdG8gZWxlcGhhbnQgRWxlUGhhbnQKKyAwOiBlbGVwaGFudAorCisvYXxbYmNkXS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiBjIGQgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyhhfFteXGRaXSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDA5IFx4MGEgCisgIFx4MGIgXHgwYyBceDBkIFx4MGUgXHgwZiBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IAorICBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgXHgxZiBceDIwICEgIiAjICQgJSAmICcgKCApICogKyAsIC0gLiAvIDogOyA8ID0gPiAKKyAgPyBAIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWyBcIF0gXiBfIGAgYSBiIGMgZCAKKyAgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiB7IHwgfSB+IFx4N2YgXHg4MCBceDgxIFx4ODIgXHg4MyAKKyAgXHg4NCBceDg1IFx4ODYgXHg4NyBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgXHg5MCBceDkxIFx4OTIgCisgIFx4OTMgXHg5NCBceDk1IFx4OTYgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIFx4OWYgXHhhMCBceGExIAorICBceGEyIFx4YTMgXHhhNCBceGE1IFx4YTYgXHhhNyBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgXHhhZCBceGFlIFx4YWYgXHhiMCAKKyAgXHhiMSBceGIyIFx4YjMgXHhiNCBceGI1IFx4YjYgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIFx4YmMgXHhiZCBceGJlIFx4YmYgCisgIFx4YzAgXHhjMSBceGMyIFx4YzMgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIAorICBceGNmIFx4ZDAgXHhkMSBceGQyIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCAKKyAgXHhkZSBceGRmIFx4ZTAgXHhlMSBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgCisgIFx4ZWQgXHhlZSBceGVmIFx4ZjAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIAorICBceGZjIFx4ZmQgXHhmZSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oYXxiKSpbXHNdL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDBhIFx4MGIgXHgwYyBceDBkIFx4MjAgYSBiIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oYWJcMikvCitGYWlsZWQ6IGVycm9yIDExNSBhdCBvZmZzZXQgNDogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKy97NCw1fWFiYy8KK0ZhaWxlZDogZXJyb3IgMTA5IGF0IG9mZnNldCA0OiBxdWFudGlmaWVyIGRvZXMgbm90IGZvbGxvdyBhIHJlcGVhdGFibGUgaXRlbQorCisvKGEpKGIpKGMpXDIvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAzCitNYXggYmFjayByZWZlcmVuY2UgPSAyCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2MnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKyAgICBhYmNiCisgMDogYWJjYgorIDE6IGEKKyAyOiBiCisgMzogYworICAgIGFiY2JcPW92ZWN0b3I9MAorIDA6IGFiY2IKKyAxOiBhCisgMjogYgorIDM6IGMKKyAgICBhYmNiXD1vdmVjdG9yPTEKK01hdGNoZWQsIGJ1dCB0b28gbWFueSBzdWJzdHJpbmdzCisgMDogYWJjYgorICAgIGFiY2JcPW92ZWN0b3I9MgorTWF0Y2hlZCwgYnV0IHRvbyBtYW55IHN1YnN0cmluZ3MKKyAwOiBhYmNiCisgMTogYQorICAgIGFiY2JcPW92ZWN0b3I9MworTWF0Y2hlZCwgYnV0IHRvbyBtYW55IHN1YnN0cmluZ3MKKyAwOiBhYmNiCisgMTogYQorIDI6IGIKKyAgICBhYmNiXD1vdmVjdG9yPTQKKyAwOiBhYmNiCisgMTogYQorIDI6IGIKKyAzOiBjCisKKy8oYSliY3woYSkoYilcMi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK01heCBiYWNrIHJlZmVyZW5jZSA9IDIKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYWJjCisgMDogYWJjCisgMTogYQorICAgIGFiY1w9b3ZlY3Rvcj0wCisgMDogYWJjCisgMTogYQorICAgIGFiY1w9b3ZlY3Rvcj0xCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGFiYworICAgIGFiY1w9b3ZlY3Rvcj0yCisgMDogYWJjCisgMTogYQorICAgIGFiYQorIDA6IGFiYQorIDE6IDx1bnNldD4KKyAyOiBhCisgMzogYgorICAgIGFiYVw9b3ZlY3Rvcj0wCisgMDogYWJhCisgMTogPHVuc2V0PgorIDI6IGEKKyAzOiBiCisgICAgYWJhXD1vdmVjdG9yPTEKK01hdGNoZWQsIGJ1dCB0b28gbWFueSBzdWJzdHJpbmdzCisgMDogYWJhCisgICAgYWJhXD1vdmVjdG9yPTIKK01hdGNoZWQsIGJ1dCB0b28gbWFueSBzdWJzdHJpbmdzCisgMDogYWJhCisgMTogPHVuc2V0PgorICAgIGFiYVw9b3ZlY3Rvcj0zCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGFiYQorIDE6IDx1bnNldD4KKyAyOiBhCisgICAgYWJhXD1vdmVjdG9yPTQKKyAwOiBhYmEKKyAxOiA8dW5zZXQ+CisgMjogYQorIDM6IGIKKworL2FiYyQvSSxkb2xsYXJfZW5kb25seQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBkb2xsYXJfZW5kb25seQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcbgorTm8gbWF0Y2gKKyAgICBhYmNcbmRlZgorTm8gbWF0Y2gKKworLyhhKShiKShjKShkKShlKVw2LworRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDE2OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworL3RoZSBxdWljayBicm93biBmb3gvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAndCcKK0xhc3QgY29kZSB1bml0ID0gJ3gnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDE5CisgICAgdGhlIHF1aWNrIGJyb3duIGZveAorIDA6IHRoZSBxdWljayBicm93biBmb3gKKyAgICB0aGlzIGlzIGEgbGluZSB3aXRoIHRoZSBxdWljayBicm93biBmb3gKKyAwOiB0aGUgcXVpY2sgYnJvd24gZm94CisKKy90aGUgcXVpY2sgYnJvd24gZm94L0ksYW5jaG9yZWQKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMTkKKyAgICB0aGUgcXVpY2sgYnJvd24gZm94CisgMDogdGhlIHF1aWNrIGJyb3duIGZveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgdGhpcyBpcyBhIGxpbmUgd2l0aCB0aGUgcXVpY2sgYnJvd24gZm94CitObyBtYXRjaAorCisvYWIoP3opY2QvCitGYWlsZWQ6IGVycm9yIDExMSBhdCBvZmZzZXQgNDogdW5yZWNvZ25pemVkIGNoYXJhY3RlciBhZnRlciAoPyBvciAoPy0KKworL15hYmN8ZGVmL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYWJjZGVmCisgMDogYWJjCisgICAgYWJjZGVmXD1ub3Rib2wKKyAwOiBkZWYKKworLy4qKChhYmMpJHwoZGVmKSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAzCitGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBkZWZhYmMKKyAwOiBkZWZhYmMKKyAxOiBhYmMKKyAyOiBhYmMKKyAgICBkZWZhYmNcPW5vdGVvbAorIDA6IGRlZgorIDE6IGRlZgorIDI6IDx1bnNldD4KKyAzOiBkZWYKKworLykvCitGYWlsZWQ6IGVycm9yIDEyMiBhdCBvZmZzZXQgMDogdW5tYXRjaGVkIGNsb3NpbmcgcGFyZW50aGVzaXMKKworL2FbXWIvCitGYWlsZWQ6IGVycm9yIDEwNiBhdCBvZmZzZXQgNDogbWlzc2luZyB0ZXJtaW5hdGluZyBdIGZvciBjaGFyYWN0ZXIgY2xhc3MKKworL1teYWVpb3UgXXszLH0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDA5IFx4MGEgCisgIFx4MGIgXHgwYyBceDBkIFx4MGUgXHgwZiBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IAorICBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgXHgxZiAhICIgIyAkICUgJiAnICggKSAqICsgLCAtIC4gLyAwIDEgMiAzIDQgNSA2IAorICA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiBbIAorICBcIF0gXiBfIGAgYiBjIGQgZiBnIGggaiBrIGwgbSBuIHAgcSByIHMgdCB2IHcgeCB5IHogeyB8IH0gfiBceDdmIFx4ODAgXHg4MSAKKyAgXHg4MiBceDgzIFx4ODQgXHg4NSBceDg2IFx4ODcgXHg4OCBceDg5IFx4OGEgXHg4YiBceDhjIFx4OGQgXHg4ZSBceDhmIFx4OTAgCisgIFx4OTEgXHg5MiBceDkzIFx4OTQgXHg5NSBceDk2IFx4OTcgXHg5OCBceDk5IFx4OWEgXHg5YiBceDljIFx4OWQgXHg5ZSBceDlmIAorICBceGEwIFx4YTEgXHhhMiBceGEzIFx4YTQgXHhhNSBceGE2IFx4YTcgXHhhOCBceGE5IFx4YWEgXHhhYiBceGFjIFx4YWQgXHhhZSAKKyAgXHhhZiBceGIwIFx4YjEgXHhiMiBceGIzIFx4YjQgXHhiNSBceGI2IFx4YjcgXHhiOCBceGI5IFx4YmEgXHhiYiBceGJjIFx4YmQgCisgIFx4YmUgXHhiZiBceGMwIFx4YzEgXHhjMiBceGMzIFx4YzQgXHhjNSBceGM2IFx4YzcgXHhjOCBceGM5IFx4Y2EgXHhjYiBceGNjIAorICBceGNkIFx4Y2UgXHhjZiBceGQwIFx4ZDEgXHhkMiBceGQzIFx4ZDQgXHhkNSBceGQ2IFx4ZDcgXHhkOCBceGQ5IFx4ZGEgXHhkYiAKKyAgXHhkYyBceGRkIFx4ZGUgXHhkZiBceGUwIFx4ZTEgXHhlMiBceGUzIFx4ZTQgXHhlNSBceGU2IFx4ZTcgXHhlOCBceGU5IFx4ZWEgCisgIFx4ZWIgXHhlYyBceGVkIFx4ZWUgXHhlZiBceGYwIFx4ZjEgXHhmMiBceGYzIFx4ZjQgXHhmNSBceGY2IFx4ZjcgXHhmOCBceGY5IAorICBceGZhIFx4ZmIgXHhmYyBceGZkIFx4ZmUgXHhmZiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGNvLXByb2Nlc3NvcnMsIGFuZCBmb3IKKyAwOiAtcHIKKworLzwuKj4vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnPCcKK0xhc3QgY29kZSB1bml0ID0gJz4nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhYmM8ZGVmPmdoaTxrbG0+bm9wCisgMDogPGRlZj5naGk8a2xtPgorCisvPC4qPz4vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnPCcKK0xhc3QgY29kZSB1bml0ID0gJz4nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhYmM8ZGVmPmdoaTxrbG0+bm9wCisgMDogPGRlZj4KKworLzwuKj4vSSx1bmdyZWVkeQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1bmdyZWVkeQorRmlyc3QgY29kZSB1bml0ID0gJzwnCitMYXN0IGNvZGUgdW5pdCA9ICc+JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWJjPGRlZj5naGk8a2xtPm5vcAorIDA6IDxkZWY+CisKKy8oP1UpPC4qPi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICc8JworTGFzdCBjb2RlIHVuaXQgPSAnPicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFiYzxkZWY+Z2hpPGtsbT5ub3AKKyAwOiA8ZGVmPgorCisvPC4qPz4vSSx1bmdyZWVkeQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1bmdyZWVkeQorRmlyc3QgY29kZSB1bml0ID0gJzwnCitMYXN0IGNvZGUgdW5pdCA9ICc+JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWJjPGRlZj5naGk8a2xtPm5vcAorIDA6IDxkZWY+Z2hpPGtsbT4KKworLz17Myx9L0ksdW5ncmVlZHkKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdW5ncmVlZHkKK0ZpcnN0IGNvZGUgdW5pdCA9ICc9JworTGFzdCBjb2RlIHVuaXQgPSAnPScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGFiYz09PT09PT09ZGVmCisgMDogPT09CisKKy8oP1UpPXszLH0/L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJz0nCitMYXN0IGNvZGUgdW5pdCA9ICc9JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYWJjPT09PT09PT1kZWYKKyAwOiA9PT09PT09PQorCisvKD88IWJhcnxjYXR0bGUpZm9vL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF4IGxvb2tiZWhpbmQgPSA2CitGaXJzdCBjb2RlIHVuaXQgPSAnZicKK0xhc3QgY29kZSB1bml0ID0gJ28nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBmb28KKyAwOiBmb28KKyAgICBjYXRmb28KKyAwOiBmb28KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHRoZSBiYXJmb28KK05vIG1hdGNoCisgICAgYW5kIGNhdHRsZWZvbworTm8gbWF0Y2gKKworLyg/PD1hKyliLworRmFpbGVkOiBlcnJvciAxMjUgYXQgb2Zmc2V0IDY6IGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIG5vdCBmaXhlZCBsZW5ndGgKKworLyg/PD1hYWF8YnswLDN9KWIvCitGYWlsZWQ6IGVycm9yIDEyNSBhdCBvZmZzZXQgMTQ6IGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIG5vdCBmaXhlZCBsZW5ndGgKKworLyg/PCEoZm9vKWFcMSliYXIvCitGYWlsZWQ6IGVycm9yIDEyNSBhdCBvZmZzZXQgMTI6IGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIG5vdCBmaXhlZCBsZW5ndGgKKworLyg/aSlhYmMvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScgKGNhc2VsZXNzKQorTGFzdCBjb2RlIHVuaXQgPSAnYycgKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy8oYXwoP20pYSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKD9pKV4xMjM0L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvKF5ifCg/aSleZCkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oP3MpLiovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy9bYWJjZF0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgYyBkIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oP2kpW2FiY2RdL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogQSBCIEMgRCBhIGIgYyBkIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oP20pW3h5XXwoYnxjKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGIgYyB4IHkgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyheYXxeYikvSW0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorT3B0aW9uczogbXVsdGlsaW5lCitGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyg/aSkoXmF8XmIpL0ltCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK09wdGlvbnM6IG11bHRpbGluZQorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oYSkoPygxKWF8YnxjKS8KK0ZhaWxlZDogZXJyb3IgMTI3IGF0IG9mZnNldCAxMzogY29uZGl0aW9uYWwgZ3JvdXAgY29udGFpbnMgbW9yZSB0aGFuIHR3byBicmFuY2hlcworCisvKD8oPz1hKWF8YnxjKS8KK0ZhaWxlZDogZXJyb3IgMTI3IGF0IG9mZnNldCAxMjogY29uZGl0aW9uYWwgZ3JvdXAgY29udGFpbnMgbW9yZSB0aGFuIHR3byBicmFuY2hlcworCisvKD8oMWEpLworRmFpbGVkOiBlcnJvciAxMjYgYXQgb2Zmc2V0IDQ6IG1hbGZvcm1lZCBudW1iZXIgb3IgbmFtZSBhZnRlciAoPygKKworLyg/KDFhKSkvCitGYWlsZWQ6IGVycm9yIDEyNiBhdCBvZmZzZXQgNDogbWFsZm9ybWVkIG51bWJlciBvciBuYW1lIGFmdGVyICg/KAorCisvKD8oP2kpKS8KK0ZhaWxlZDogZXJyb3IgMTI4IGF0IG9mZnNldCAzOiBhc3NlcnRpb24gZXhwZWN0ZWQgYWZ0ZXIgKD8oIG9yICg/KD9DKQorCisvKD8oYWJjKSkvCitGYWlsZWQ6IGVycm9yIDExNSBhdCBvZmZzZXQgNzogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKy8oPyg/PGFiKSkvCitGYWlsZWQ6IGVycm9yIDEyOCBhdCBvZmZzZXQgMzogYXNzZXJ0aW9uIGV4cGVjdGVkIGFmdGVyICg/KCBvciAoPyg/QykKKworLygoP3MpYmxhaClccytcMS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdiJworTGFzdCBjb2RlIHVuaXQgPSAnaCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gOQorCisvKCg/aSlibGFoKVxzK1wxL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorRmlyc3QgY29kZSB1bml0ID0gJ2InIChjYXNlbGVzcykKK0xhc3QgY29kZSB1bml0ID0gJ2gnIChjYXNlbGVzcykKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gOQorCisvKCg/aSliKS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgL2kgYgorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdiJyAoY2FzZWxlc3MpCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyhhKmJ8KD9pOmMqKD8taSlkKSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBDIGEgYiBjIGQgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL2EkL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBhCisgMDogYQorICAgIGFcbgorIDA6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcPW5vdGVvbAorTm8gbWF0Y2gKKyAgICBhXG5cPW5vdGVvbAorTm8gbWF0Y2gKKworL2EkL0ltCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IG11bHRpbGluZQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBhCisgMDogYQorICAgIGFcbgorIDA6IGEKKyAgICBhXG5cPW5vdGVvbAorIDA6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcPW5vdGVvbAorTm8gbWF0Y2gKKworL1xBYWJjL0ltCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heCBsb29rYmVoaW5kID0gMQorQ29tcGlsZSBvcHRpb25zOiBtdWx0aWxpbmUKK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQgbXVsdGlsaW5lCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL15hYmMvSW0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogbXVsdGlsaW5lCitGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9eKChhKykoP1UpKFthYl0rKSg/LVUpKFtiY10rKShcdyopKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDUKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgYWFhYWFiYmJiYmNjY2NjZGVmCisgMDogYWFhYWFiYmJiYmNjY2NjZGVmCisgMTogYWFhYWFiYmJiYmNjY2NjZGVmCisgMjogYWFhYWEKKyAzOiBiCisgNDogYmJiYmNjY2NjCisgNTogZGVmCisKKy8oPzw9Zm9vKVthYl0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXggbG9va2JlaGluZCA9IDMKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKD88IWZvbykoYWxwaGF8b21lZ2EpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGxvb2tiZWhpbmQgPSAzCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIG8gCitMYXN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisKKy8oPyFhbHBoYWJldClbYWJdL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oPzw9Zm9vXG4pXmJhci9JbQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXggbG9va2JlaGluZCA9IDQKK0NvbnRhaW5zIGV4cGxpY2l0IENSIG9yIExGIG1hdGNoCitPcHRpb25zOiBtdWx0aWxpbmUKK0xhc3QgY29kZSB1bml0ID0gJ3InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBmb29cbmJhcmJhcgorIDA6IGJhcgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgcmh1YmFyYgorTm8gbWF0Y2gKKyAgICBiYXJiZWxsCitObyBtYXRjaAorICAgIGFiY1xuYmFydG9uCitObyBtYXRjaAorCisvXig/PD1mb29cbiliYXIvSW0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF4IGxvb2tiZWhpbmQgPSA0CitDb250YWlucyBleHBsaWNpdCBDUiBvciBMRiBtYXRjaAorT3B0aW9uczogbXVsdGlsaW5lCitGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCitMYXN0IGNvZGUgdW5pdCA9ICdyJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgZm9vXG5iYXJiYXIKKyAwOiBiYXIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHJodWJhcmIKK05vIG1hdGNoCisgICAgYmFyYmVsbAorTm8gbWF0Y2gKKyAgICBhYmNcbmJhcnRvbgorTm8gbWF0Y2gKKworLyg/Pl5hYmMpL0ltCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IG11bHRpbGluZQorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGFiYworIDA6IGFiYworICAgIGRlZlxuYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBkZWZhYmMKK05vIG1hdGNoCisKKy8oPzw9YWIoYyspZCllZi8KK0ZhaWxlZDogZXJyb3IgMTI1IGF0IG9mZnNldCAxMTogbG9va2JlaGluZCBhc3NlcnRpb24gaXMgbm90IGZpeGVkIGxlbmd0aAorCisvKD88PWFiKD88PWMrKWQpZWYvCitGYWlsZWQ6IGVycm9yIDEyNSBhdCBvZmZzZXQgMTI6IGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIG5vdCBmaXhlZCBsZW5ndGgKKworLyg/PD1hYihjfGRlKWYpZy8KK0ZhaWxlZDogZXJyb3IgMTI1IGF0IG9mZnNldCAxMzogbG9va2JlaGluZCBhc3NlcnRpb24gaXMgbm90IGZpeGVkIGxlbmd0aAorCisvVGhlIG5leHQgdGhyZWUgYXJlIGluIHRlc3RpbnB1dDIgYmVjYXVzZSB0aGV5IGhhdmUgdmFyaWFibGUgbGVuZ3RoIGJyYW5jaGVzLworCisvKD88PWJ1bGxvY2t8ZG9ua2V5KS1jYXJ0L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF4IGxvb2tiZWhpbmQgPSA3CitGaXJzdCBjb2RlIHVuaXQgPSAnLScKK0xhc3QgY29kZSB1bml0ID0gJ3QnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDUKKyAgICB0aGUgYnVsbG9jay1jYXJ0CisgMDogLWNhcnQKKyAgICBhIGRvbmtleS1jYXJ0IHJhY2UKKyAwOiAtY2FydAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgY2FydAorTm8gbWF0Y2gKKyAgICBob3JzZS1hbmQtY2FydAorTm8gbWF0Y2gKKworLyg/PD1hYig/aSl4fHl8eikvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXggbG9va2JlaGluZCA9IDMKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKD8+LiopKD88PShhYmNkKXwoeHl6KSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitNYXggbG9va2JlaGluZCA9IDQKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFscGhhYmV0YWJjZAorIDA6IGFscGhhYmV0YWJjZAorIDE6IGFiY2QKKyAgICBlbmRpbmd4eXoKKyAwOiBlbmRpbmd4eXoKKyAxOiA8dW5zZXQ+CisgMjogeHl6CisKKy8oPzw9YWIoP2kpeCg/LWkpeXwoP2kpenxiKVpaL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF4IGxvb2tiZWhpbmQgPSA0CitGaXJzdCBjb2RlIHVuaXQgPSAnWicKK0xhc3QgY29kZSB1bml0ID0gJ1onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhYnh5WloKKyAwOiBaWgorICAgIGFiWHlaWgorIDA6IFpaCisgICAgWlpaCisgMDogWloKKyAgICB6WloKKyAwOiBaWgorICAgIGJaWgorIDA6IFpaCisgICAgQlpaCisgMDogWloKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFpaCitObyBtYXRjaAorICAgIGFiWFlaWgorTm8gbWF0Y2gKKyAgICB6enoKK05vIG1hdGNoCisgICAgYnp6CitObyBtYXRjaAorCisvKD88IShmb28pYSliYXIvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggbG9va2JlaGluZCA9IDQKK0ZpcnN0IGNvZGUgdW5pdCA9ICdiJworTGFzdCBjb2RlIHVuaXQgPSAncicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGJhcgorIDA6IGJhcgorICAgIGZvb2JiYXIKKyAwOiBiYXIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGZvb2FiYXIKK05vIG1hdGNoCisKKyMgVGhpcyBvbmUgaXMgaGVyZSBiZWNhdXNlIFBlcmwgYmVoYXZlcyBkaWZmZXJlbnRseTsgc2VlIGFsc28gdGhlIGZvbGxvd2luZy4KKworL14oYVwxPyl7NH0kL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYQorTm8gbWF0Y2gKKyAgICBhYWFhYWEKK05vIG1hdGNoCisgICAgCisjIFBlcmwgZG9lcyBub3QgZmFpbCB0aGVzZSB0d28gZm9yIHRoZSBmaW5hbCBzdWJqZWN0cy4gTmVpdGhlciBkaWQgUENSRSB1bnRpbAorIyByZWxlYXNlIDguMDEuIFRoZSBwcm9ibGVtIGlzIGluIGJhY2t0cmFja2luZyBpbnRvIGEgc3VicGF0dGVybiB0aGF0IGNvbnRhaW5zCisjIGEgcmVjdXJzaXZlIHJlZmVyZW5jZSB0byBpdHNlbGYuIFBDUkUgaGFzIG5vdyBtYWRlIHRoZXNlIGludG8gYXRvbWljIHBhdHRlcm5zLgorCisvXih4YXw9P1wxYSl7Mn0kLworICAgIHhhPXhhYQorIDA6IHhhPXhhYQorIDE6ID14YWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHhhPXhhYWEKK05vIG1hdGNoCisKKy9eKHhhfD0/XDFhKSskLworICAgIHhhPXhhYQorIDA6IHhhPXhhYQorIDE6ID14YWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHhhPXhhYWEKK05vIG1hdGNoCisKKyMgVGhlc2UgYXJlIHN5bnRheCB0ZXN0cyBmcm9tIFBlcmwgNS4wMDUKKworL2FbYi1hXS8KK0ZhaWxlZDogZXJyb3IgMTA4IGF0IG9mZnNldCA0OiByYW5nZSBvdXQgb2Ygb3JkZXIgaW4gY2hhcmFjdGVyIGNsYXNzCisKKy9hW11iLworRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDQ6IG1pc3NpbmcgdGVybWluYXRpbmcgXSBmb3IgY2hhcmFjdGVyIGNsYXNzCisKKy9hWy8KK0ZhaWxlZDogZXJyb3IgMTA2IGF0IG9mZnNldCAyOiBtaXNzaW5nIHRlcm1pbmF0aW5nIF0gZm9yIGNoYXJhY3RlciBjbGFzcworCisvKmEvCitGYWlsZWQ6IGVycm9yIDEwOSBhdCBvZmZzZXQgMDogcXVhbnRpZmllciBkb2VzIG5vdCBmb2xsb3cgYSByZXBlYXRhYmxlIGl0ZW0KKworLygqKWIvCitGYWlsZWQ6IGVycm9yIDEwOSBhdCBvZmZzZXQgMTogcXVhbnRpZmllciBkb2VzIG5vdCBmb2xsb3cgYSByZXBlYXRhYmxlIGl0ZW0KKworL2FiYykvCitGYWlsZWQ6IGVycm9yIDEyMiBhdCBvZmZzZXQgMzogdW5tYXRjaGVkIGNsb3NpbmcgcGFyZW50aGVzaXMKKworLyhhYmMvCitGYWlsZWQ6IGVycm9yIDExNCBhdCBvZmZzZXQgNDogbWlzc2luZyBjbG9zaW5nIHBhcmVudGhlc2lzCisKKy9hKiovCitGYWlsZWQ6IGVycm9yIDEwOSBhdCBvZmZzZXQgMjogcXVhbnRpZmllciBkb2VzIG5vdCBmb2xsb3cgYSByZXBlYXRhYmxlIGl0ZW0KKworLykoLworRmFpbGVkOiBlcnJvciAxMjIgYXQgb2Zmc2V0IDA6IHVubWF0Y2hlZCBjbG9zaW5nIHBhcmVudGhlc2lzCisKKy9cMS8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCAxOiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworL1wyLworRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDE6IHJlZmVyZW5jZSB0byBub24tZXhpc3RlbnQgc3VicGF0dGVybgorCisvKGEpfFwyLworRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDU6IHJlZmVyZW5jZSB0byBub24tZXhpc3RlbnQgc3VicGF0dGVybgorCisvYVtiLWFdL0lpCitGYWlsZWQ6IGVycm9yIDEwOCBhdCBvZmZzZXQgNDogcmFuZ2Ugb3V0IG9mIG9yZGVyIGluIGNoYXJhY3RlciBjbGFzcworCisvYVtdYi9JaQorRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDQ6IG1pc3NpbmcgdGVybWluYXRpbmcgXSBmb3IgY2hhcmFjdGVyIGNsYXNzCisKKy9hWy9JaQorRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDI6IG1pc3NpbmcgdGVybWluYXRpbmcgXSBmb3IgY2hhcmFjdGVyIGNsYXNzCisKKy8qYS9JaQorRmFpbGVkOiBlcnJvciAxMDkgYXQgb2Zmc2V0IDA6IHF1YW50aWZpZXIgZG9lcyBub3QgZm9sbG93IGEgcmVwZWF0YWJsZSBpdGVtCisKKy8oKiliL0lpCitGYWlsZWQ6IGVycm9yIDEwOSBhdCBvZmZzZXQgMTogcXVhbnRpZmllciBkb2VzIG5vdCBmb2xsb3cgYSByZXBlYXRhYmxlIGl0ZW0KKworL2FiYykvSWkKK0ZhaWxlZDogZXJyb3IgMTIyIGF0IG9mZnNldCAzOiB1bm1hdGNoZWQgY2xvc2luZyBwYXJlbnRoZXNpcworCisvKGFiYy9JaQorRmFpbGVkOiBlcnJvciAxMTQgYXQgb2Zmc2V0IDQ6IG1pc3NpbmcgY2xvc2luZyBwYXJlbnRoZXNpcworCisvYSoqL0lpCitGYWlsZWQ6IGVycm9yIDEwOSBhdCBvZmZzZXQgMjogcXVhbnRpZmllciBkb2VzIG5vdCBmb2xsb3cgYSByZXBlYXRhYmxlIGl0ZW0KKworLykoL0lpCitGYWlsZWQ6IGVycm9yIDEyMiBhdCBvZmZzZXQgMDogdW5tYXRjaGVkIGNsb3NpbmcgcGFyZW50aGVzaXMKKworLzooPzovCitGYWlsZWQ6IGVycm9yIDExNCBhdCBvZmZzZXQgNDogbWlzc2luZyBjbG9zaW5nIHBhcmVudGhlc2lzCisKKy8oPzwlKWIvCitGYWlsZWQ6IGVycm9yIDEyNCBhdCBvZmZzZXQgMzogbGV0dGVyIG9yIHVuZGVyc2NvcmUgZXhwZWN0ZWQgYWZ0ZXIgKD88IG9yICg/JworCisvYSg/eyliLworRmFpbGVkOiBlcnJvciAxMTEgYXQgb2Zmc2V0IDM6IHVucmVjb2duaXplZCBjaGFyYWN0ZXIgYWZ0ZXIgKD8gb3IgKD8tCisKKy9hKD97e30pYi8KK0ZhaWxlZDogZXJyb3IgMTExIGF0IG9mZnNldCAzOiB1bnJlY29nbml6ZWQgY2hhcmFjdGVyIGFmdGVyICg/IG9yICg/LQorCisvYSg/e319KWIvCitGYWlsZWQ6IGVycm9yIDExMSBhdCBvZmZzZXQgMzogdW5yZWNvZ25pemVkIGNoYXJhY3RlciBhZnRlciAoPyBvciAoPy0KKworL2EoP3sieyJ9KWIvCitGYWlsZWQ6IGVycm9yIDExMSBhdCBvZmZzZXQgMzogdW5yZWNvZ25pemVkIGNoYXJhY3RlciBhZnRlciAoPyBvciAoPy0KKworL2EoP3sieyJ9fSliLworRmFpbGVkOiBlcnJvciAxMTEgYXQgb2Zmc2V0IDM6IHVucmVjb2duaXplZCBjaGFyYWN0ZXIgYWZ0ZXIgKD8gb3IgKD8tCisKKy8oPygxPylhfGIpLworRmFpbGVkOiBlcnJvciAxMjYgYXQgb2Zmc2V0IDQ6IG1hbGZvcm1lZCBudW1iZXIgb3IgbmFtZSBhZnRlciAoPygKKworL1thWzp4eXo6LworRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDg6IG1pc3NpbmcgdGVybWluYXRpbmcgXSBmb3IgY2hhcmFjdGVyIGNsYXNzCisKKy8oPzw9eCspeS8KK0ZhaWxlZDogZXJyb3IgMTI1IGF0IG9mZnNldCA2OiBsb29rYmVoaW5kIGFzc2VydGlvbiBpcyBub3QgZml4ZWQgbGVuZ3RoCisKKy9hezM3LDE3fS8KK0ZhaWxlZDogZXJyb3IgMTA0IGF0IG9mZnNldCA3OiBudW1iZXJzIG91dCBvZiBvcmRlciBpbiB7fSBxdWFudGlmaWVyCisKKy9hYmMvXAorRmFpbGVkOiBlcnJvciAxMDEgYXQgb2Zmc2V0IDM6IFwgYXQgZW5kIG9mIHBhdHRlcm4KKworL2FiYy9caQorRmFpbGVkOiBlcnJvciAxMDEgYXQgb2Zmc2V0IDM6IFwgYXQgZW5kIG9mIHBhdHRlcm4KKworLyhhKWJjKGQpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdkJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisgICAgYWJjZAorIDA6IGFiY2QKKyAxOiBhCisgMjogZAorICAgIGFiY2RcPWNvcHk9MgorIDA6IGFiY2QKKyAxOiBhCisgMjogZAorIDJDIGQgKDEpCisgICAgYWJjZFw9Y29weT01CisgMDogYWJjZAorIDE6IGEKKyAyOiBkCitDb3B5IHN1YnN0cmluZyA1IGZhaWxlZCAoLTQ5KTogdW5rbm93biBzdWJzdHJpbmcKKworLyguezIwfSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIwCisgICAgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKKyAwOiBhYmNkZWZnaGlqa2xtbm9wcXJzdAorIDE6IGFiY2RlZmdoaWprbG1ub3BxcnN0CisgICAgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcPWNvcHk9MQorIDA6IGFiY2RlZmdoaWprbG1ub3BxcnN0CisgMTogYWJjZGVmZ2hpamtsbW5vcHFyc3QKKyAxQyBhYmNkZWZnaGlqa2xtbm9wcXJzdCAoMjApCisgICAgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcPWdldD0xCisgMDogYWJjZGVmZ2hpamtsbW5vcHFyc3QKKyAxOiBhYmNkZWZnaGlqa2xtbm9wcXJzdAorIDFHIGFiY2RlZmdoaWprbG1ub3BxcnN0ICgyMCkKKworLyguezE1fSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDE1CisgICAgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKKyAwOiBhYmNkZWZnaGlqa2xtbm8KKyAxOiBhYmNkZWZnaGlqa2xtbm8KKyAgICBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elw9Y29weT0xLGdldD0xCisgMDogYWJjZGVmZ2hpamtsbW5vCisgMTogYWJjZGVmZ2hpamtsbW5vCisgMUMgYWJjZGVmZ2hpamtsbW5vICgxNSkKKyAxRyBhYmNkZWZnaGlqa2xtbm8gKDE1KQorCisvKC57MTZ9KS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMTYKKyAgICBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorIDA6IGFiY2RlZmdoaWprbG1ub3AKKyAxOiBhYmNkZWZnaGlqa2xtbm9wCisgICAgYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcPWNvcHk9MSxnZXQ9MSxnZXRhbGwKKyAwOiBhYmNkZWZnaGlqa2xtbm9wCisgMTogYWJjZGVmZ2hpamtsbW5vcAorIDFDIGFiY2RlZmdoaWprbG1ub3AgKDE2KQorIDFHIGFiY2RlZmdoaWprbG1ub3AgKDE2KQorIDBMIGFiY2RlZmdoaWprbG1ub3AKKyAxTCBhYmNkZWZnaGlqa2xtbm9wCisKKy9eKGF8KGJjKSlkZShmKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKyAgICBhZGVmXD1nZXQ9MSxnZXQ9MixnZXQ9MyxnZXQ9NCxnZXRhbGwKKyAwOiBhZGVmCisgMTogYQorIDI6IDx1bnNldD4KKyAzOiBmCisgMUcgYSAoMSkKK0dldCBzdWJzdHJpbmcgMiBmYWlsZWQgKC01NSk6IHJlcXVlc3RlZCB2YWx1ZSBpcyBub3Qgc2V0CisgM0cgZiAoMSkKK0dldCBzdWJzdHJpbmcgNCBmYWlsZWQgKC00OSk6IHVua25vd24gc3Vic3RyaW5nCisgMEwgYWRlZgorIDFMIGEKKyAyTCAKKyAzTCBmCisgICAgYmNkZWZcPWdldD0xLGdldD0yLGdldD0zLGdldD00LGdldGFsbAorIDA6IGJjZGVmCisgMTogYmMKKyAyOiBiYworIDM6IGYKKyAxRyBiYyAoMikKKyAyRyBiYyAoMikKKyAzRyBmICgxKQorR2V0IHN1YnN0cmluZyA0IGZhaWxlZCAoLTQ5KTogdW5rbm93biBzdWJzdHJpbmcKKyAwTCBiY2RlZgorIDFMIGJjCisgMkwgYmMKKyAzTCBmCisgICAgYWRlZmdoaWprXD1jb3B5PTAKKyAwOiBhZGVmCisgMTogYQorIDI6IDx1bnNldD4KKyAzOiBmCisgMEMgYWRlZiAoNCkKKworL15hYmNcMDBkZWYvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA3CisgICAgYWJjXDAwZGVmXD1jb3B5PTAsZ2V0YWxsCisgMDogYWJjXHgwMGRlZgorIDBDIGFiY1x4MDBkZWYgKDcpCisgMEwgYWJjXHgwMGRlZgorCisvd29yZCAoKD86W2EtekEtWjAtOV0rICkoKD86W2EtekEtWjAtOV0rICkoKD86W2EtekEtWjAtOV0rICkoKD86W2EtekEtWjAtOV0rCispKCg/OlthLXpBLVowLTldKyApKCg/OlthLXpBLVowLTldKyApKCg/OlthLXpBLVowLTldKyApKCg/OlthLXpBLVowLTldKworKT8pPyk/KT8pPyk/KT8pPyk/b3RoZXJ3b3JkL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gOAorQ29udGFpbnMgZXhwbGljaXQgQ1Igb3IgTEYgbWF0Y2gKK0ZpcnN0IGNvZGUgdW5pdCA9ICd3JworTGFzdCBjb2RlIHVuaXQgPSAnZCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMTQKKworLy4qWC9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBBbnkqCisgICAgICAgIFgKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK0xhc3QgY29kZSB1bml0ID0gJ1gnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLy4qWC9JQnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQWxsQW55KgorICAgICAgICBYCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IGRvdGFsbAorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZCBkb3RhbGwKK0xhc3QgY29kZSB1bml0ID0gJ1gnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyguKlh8XkIpL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBBbnkqCisgICAgICAgIFgKKyAgICAgICAgQWx0CisgICAgICAgIF4KKyAgICAgICAgQgorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKC4qWHxeQikvSUJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBBbGxBbnkqCisgICAgICAgIFgKKyAgICAgICAgQWx0CisgICAgICAgIF4KKyAgICAgICAgQgorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0NvbXBpbGUgb3B0aW9uczogZG90YWxsCitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkIGRvdGFsbAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oP3MpKC4qWHxeQikvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIEFsbEFueSoKKyAgICAgICAgWAorICAgICAgICBBbHQKKyAgICAgICAgXgorICAgICAgICBCCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKD9zOi4qWHxeQikvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQnJhCisgICAgICAgIEFsbEFueSoKKyAgICAgICAgWAorICAgICAgICBBbHQKKyAgICAgICAgXgorICAgICAgICBCCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXEJpc3NcQi9JLGFmdGVydGV4dAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXggbG9va2JlaGluZCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdpJworTGFzdCBjb2RlIHVuaXQgPSAncycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIE1pc3Npc3NpcHBpCisgMDogaXNzCisgMCsgaXNzaXBwaQorCisvaXNzL0ksYWZ0ZXJ0ZXh0LGFsdGdsb2JhbAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnaScKK0xhc3QgY29kZSB1bml0ID0gJ3MnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBNaXNzaXNzaXBwaQorIDA6IGlzcworIDArIGlzc2lwcGkKKyAwOiBpc3MKKyAwKyBpcHBpCisKKy9cQmlzc1xCL0ksYWZ0ZXJ0ZXh0LGFsdGdsb2JhbAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXggbG9va2JlaGluZCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdpJworTGFzdCBjb2RlIHVuaXQgPSAncycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIE1pc3Npc3NpcHBpCisgMDogaXNzCisgMCsgaXNzaXBwaQorCisvXEJpc3NcQi9JZyxhZnRlcnRleHQKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF4IGxvb2tiZWhpbmQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnaScKK0xhc3QgY29kZSB1bml0ID0gJ3MnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBNaXNzaXNzaXBwaQorIDA6IGlzcworIDArIGlzc2lwcGkKKyAwOiBpc3MKKyAwKyBpcHBpCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBNaXNzaXNzaXBwaVw9YW5jaG9yZWQKK05vIG1hdGNoCisKKy8oPzw9W01zXSlpc3MvSWcsYWZ0ZXJ0ZXh0CitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heCBsb29rYmVoaW5kID0gMQorRmlyc3QgY29kZSB1bml0ID0gJ2knCitMYXN0IGNvZGUgdW5pdCA9ICdzJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgTWlzc2lzc2lwcGkKKyAwOiBpc3MKKyAwKyBpc3NpcHBpCisgMDogaXNzCisgMCsgaXBwaQorCisvKD88PVtNc10paXNzL0ksYWZ0ZXJ0ZXh0LGFsdGdsb2JhbAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXggbG9va2JlaGluZCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdpJworTGFzdCBjb2RlIHVuaXQgPSAncycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIE1pc3Npc3NpcHBpCisgMDogaXNzCisgMCsgaXNzaXBwaQorCisvXmlzcy9JZyxhZnRlcnRleHQKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGlzc2lzc2lwcGkKKyAwOiBpc3MKKyAwKyBpc3NpcHBpCisKKy8uKmlzcy9JZyxhZnRlcnRleHQKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorTGFzdCBjb2RlIHVuaXQgPSAncycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGFiY2lzc1xueHl6aXNzcHFyCisgMDogYWJjaXNzCisgMCsgXHgwYXh5emlzc3BxcgorIDA6IHh5emlzcworIDArIHBxcgorCisvLmkuL0lnLGFmdGVydGV4dAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitMYXN0IGNvZGUgdW5pdCA9ICdpJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgTWlzc2lzc2lwcGkKKyAwOiBNaXMKKyAwKyBzaXNzaXBwaQorIDA6IHNpcworIDArIHNpcHBpCisgMDogc2lwCisgMCsgcGkKKyAgICBNaXNzaXNzaXBwaVw9YW5jaG9yZWQKKyAwOiBNaXMKKyAwKyBzaXNzaXBwaQorIDA6IHNpcworIDArIHNpcHBpCisgMDogc2lwCisgMCsgcGkKKyAgICBNaXNzb3VyaSByaXZlcgorIDA6IE1pcworIDArIHNvdXJpIHJpdmVyCisgMDogcmkgCisgMCsgcml2ZXIKKyAwOiByaXYKKyAwKyBlcgorICAgIE1pc3NvdXJpIHJpdmVyXD1hbmNob3JlZAorIDA6IE1pcworIDArIHNvdXJpIHJpdmVyCisKKy9eLmlzL0lnLGFmdGVydGV4dAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgTWlzc2lzc2lwcGkKKyAwOiBNaXMKKyAwKyBzaXNzaXBwaQorCisvXmFiXG4vSWcsYWZ0ZXJ0ZXh0CitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbnRhaW5zIGV4cGxpY2l0IENSIG9yIExGIG1hdGNoCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYWJcbmFiXG5jZAorIDA6IGFiXHgwYQorIDArIGFiXHgwYWNkCisKKy9eYWJcbi9JZ20sYWZ0ZXJ0ZXh0CitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbnRhaW5zIGV4cGxpY2l0IENSIG9yIExGIG1hdGNoCitPcHRpb25zOiBtdWx0aWxpbmUKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK0xhc3QgY29kZSB1bml0ID0gXHgwYQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYWJcbmFiXG5jZAorIDA6IGFiXHgwYQorIDArIGFiXHgwYWNkCisgMDogYWJceDBhCisgMCsgY2QKKworL14vZ20sbmV3bGluZT1hbnkKKyAgICBhXHJiXG5jXHJcbnh5elw9YWZ0ZXJ0ZXh0CisgMDogCisgMCsgYVx4MGRiXHgwYWNceDBkXHgwYXh5egorIDA6IAorIDArIGJceDBhY1x4MGRceDBheHl6CisgMDogCisgMCsgY1x4MGRceDBheHl6CisgMDogCisgMCsgeHl6CisKKy9hYmMvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2MnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL2FiY3xiYWMvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy8oYWJjfGJhYykvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy8oYWJjfChjfGRjKSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGMgZCAKK0xhc3QgY29kZSB1bml0ID0gJ2MnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyhhYmN8KGR8ZGUpYykvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGQgCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9hKi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvYSsvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKGJhYXxhKykvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgCitMYXN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9hezAsM30vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworL2JhYXszLH0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYicKK0xhc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDUKKworLyIoW15cXCJdK3xcXC4pKiIvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnIicKK0xhc3QgY29kZSB1bml0ID0gJyInCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLyhhYmN8YWJbY2RdKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy8oYXwuKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvYXxiYXxcdy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDAgMSAyIDMgNCA1IDYgNyA4IDkgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCAKKyAgUSBSIFMgVCBVIFYgVyBYIFkgWiBfIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvYWJjKD89cHFyKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAncicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvLi4uKD88PWFiYykvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXggbG9va2JlaGluZCA9IDMKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvYWJjKD8hcHFyKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvYWIuL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9hYlt4eXpdL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9hYmMqL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9hYi5jKi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvYS5jKi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy8uYyovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL2FjKi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oYS5jKnxiLmMqKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvYS5jKnxhYmEvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvLithL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTGFzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKD89YWJjZGEpYS4qL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oPz1hKWEuKi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9hKGIpKi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9hXGQqL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL2FiXGQqL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9hKFxkKSovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvYWJjZGV7MCwwfS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnZCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvYWJcZCsvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL2EoPygxKWIpKC4pL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworL2EoPygxKWJhZ3xiaWcpKC4pL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdnJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisKKy9hKD8oMSliYWd8YmlnKSooLikvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvYSg/KDEpYmFnfGJpZykrKC4pL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdnJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisKKy9hKD8oMSliLi58Yi4uKSguKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNQorCisvYWJcZHswfWUvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2UnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL2E/Yj8vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICBhCisgMDogYQorICAgIGIKKyAwOiBiCisgICAgYWIKKyAwOiBhYgorICAgIFwKKyAwOiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFw9bm90ZW1wdHkKK05vIG1hdGNoCisKKy98LS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY2QKKyAwOiAKKyAgICAtYWJjCisgMDogCisgICAgYWItY1w9bm90ZW1wdHkKKyAwOiAtCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcPW5vdGVtcHR5CitObyBtYXRjaAorCisvXi4/YWJjZC9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitMYXN0IGNvZGUgdW5pdCA9ICdkJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisKKy9cKCAgICAgICAgICAgICAjICggYXQgc3RhcnQKKyAgKD86ICAgICAgICAgICAjIE5vbi1jYXB0dXJpbmcgYnJhY2tldAorICAoPz5bXigpXSspICAgICMgRWl0aGVyIGEgc2VxdWVuY2Ugb2Ygbm9uLWJyYWNrZXRzIChubyBiYWNrdHJhY2tpbmcpCisgIHwgICAgICAgICAgICAgIyBPcgorICAoP1IpICAgICAgICAgICMgUmVjdXJzZSAtIGkuZS4gbmVzdGVkIGJyYWNrZXRlZCBzdHJpbmcKKyAgKSogICAgICAgICAgICAjIFplcm8gb3IgbW9yZSBjb250ZW50cworICBcKSAgICAgICAgICAgICMgQ2xvc2luZyApCisgIC9JeAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBleHRlbmRlZAorRmlyc3QgY29kZSB1bml0ID0gJygnCitMYXN0IGNvZGUgdW5pdCA9ICcpJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgKGFiY2QpCisgMDogKGFiY2QpCisgICAgKGFiY2QpeHl6CisgMDogKGFiY2QpCisgICAgeHl6KGFiY2QpCisgMDogKGFiY2QpCisgICAgKGFiKHh5KWNkKXBxcgorIDA6IChhYih4eSljZCkKKyAgICAoYWIoeHljZClwcXIKKyAwOiAoeHljZCkKKyAgICAoKSBhYmMgKCkKKyAwOiAoKQorICAgIDEyKGFiY2RlKGZzaCl4eXooZm9vKGJhcikpbG1ubyk4OQorIDA6IChhYmNkZShmc2gpeHl6KGZvbyhiYXIpKWxtbm8pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkCitObyBtYXRjaAorICAgIGFiY2QpCitObyBtYXRjaAorICAgIChhYmNkCitObyBtYXRjaAorCisvXCggICggKD8+W14oKV0rKSB8ICg/UikgKSogXCkgL0lneAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiBleHRlbmRlZAorRmlyc3QgY29kZSB1bml0ID0gJygnCitMYXN0IGNvZGUgdW5pdCA9ICcpJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgKGFiKHh5KWNkKXBxcgorIDA6IChhYih4eSljZCkKKyAxOiBjZAorICAgIDEoYWJjZCkoeCh5KXopcHFyCisgMDogKGFiY2QpCisgMTogYWJjZAorIDA6ICh4KHkpeikKKyAxOiB6CisKKy9cKCAgKD86ICg/PlteKCldKykgfCAoP1IpICkgXCkgL0l4CitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGV4dGVuZGVkCitGaXJzdCBjb2RlIHVuaXQgPSAnKCcKK0xhc3QgY29kZSB1bml0ID0gJyknCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICAoYWJjZCkKKyAwOiAoYWJjZCkKKyAgICAoYWIoeHkpY2QpCisgMDogKHh5KQorICAgIChhKGIoYylkKWUpCisgMDogKGMpCisgICAgKChhYikpCisgMDogKChhYikpCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAoKQorTm8gbWF0Y2gKKworL1woICAoPzogKD8+W14oKV0rKSB8ICg/UikgKT8gXCkgL0l4CitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGV4dGVuZGVkCitGaXJzdCBjb2RlIHVuaXQgPSAnKCcKK0xhc3QgY29kZSB1bml0ID0gJyknCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICAoKQorIDA6ICgpCisgICAgMTIoYWJjZGUoZnNoKXh5eihmb28oYmFyKSlsbW5vKTg5CisgMDogKGZzaCkKKworL1woICAoICg/PlteKCldKykgfCAoP1IpICkqIFwpIC9JeAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiBleHRlbmRlZAorRmlyc3QgY29kZSB1bml0ID0gJygnCitMYXN0IGNvZGUgdW5pdCA9ICcpJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgKGFiKHh5KWNkKQorIDA6IChhYih4eSljZCkKKyAxOiBjZAorCisvXCggKCAoICg/PlteKCldKykgfCAoP1IpICkqICkgXCkgL0l4CitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK09wdGlvbnM6IGV4dGVuZGVkCitGaXJzdCBjb2RlIHVuaXQgPSAnKCcKK0xhc3QgY29kZSB1bml0ID0gJyknCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICAoYWIoeHkpY2QpCisgMDogKGFiKHh5KWNkKQorIDE6IGFiKHh5KWNkCisgMjogY2QKKworL1woICgxMjMpPyAoICggKD8+W14oKV0rKSB8ICg/UikgKSogKSBcKSAvSXgKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworT3B0aW9uczogZXh0ZW5kZWQKK0ZpcnN0IGNvZGUgdW5pdCA9ICcoJworTGFzdCBjb2RlIHVuaXQgPSAnKScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIChhYih4eSljZCkKKyAwOiAoYWIoeHkpY2QpCisgMTogPHVuc2V0PgorIDI6IGFiKHh5KWNkCisgMzogY2QKKyAgICAoMTIzYWIoeHkpY2QpCisgMDogKDEyM2FiKHh5KWNkKQorIDE6IDEyMworIDI6IGFiKHh5KWNkCisgMzogY2QKKworL1woICggKDEyMyk/ICggKD8+W14oKV0rKSB8ICg/UikgKSogKSBcKSAvSXgKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworT3B0aW9uczogZXh0ZW5kZWQKK0ZpcnN0IGNvZGUgdW5pdCA9ICcoJworTGFzdCBjb2RlIHVuaXQgPSAnKScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIChhYih4eSljZCkKKyAwOiAoYWIoeHkpY2QpCisgMTogYWIoeHkpY2QKKyAyOiA8dW5zZXQ+CisgMzogY2QKKyAgICAoMTIzYWIoeHkpY2QpCisgMDogKDEyM2FiKHh5KWNkKQorIDE6IDEyM2FiKHh5KWNkCisgMjogMTIzCisgMzogY2QKKworL1woICgoKCgoKCgoKCggKCAoPz5bXigpXSspIHwgKD9SKSApKiApKSkpKSkpKSkpIFwpIC9JeAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxMQorT3B0aW9uczogZXh0ZW5kZWQKK0ZpcnN0IGNvZGUgdW5pdCA9ICcoJworTGFzdCBjb2RlIHVuaXQgPSAnKScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIChhYih4eSljZCkKKyAwOiAoYWIoeHkpY2QpCisgMTogYWIoeHkpY2QKKyAyOiBhYih4eSljZAorIDM6IGFiKHh5KWNkCisgNDogYWIoeHkpY2QKKyA1OiBhYih4eSljZAorIDY6IGFiKHh5KWNkCisgNzogYWIoeHkpY2QKKyA4OiBhYih4eSljZAorIDk6IGFiKHh5KWNkCisxMDogYWIoeHkpY2QKKzExOiBjZAorCisvXCggKCAoICg/PlteKCk8Pl0rKSB8ICgoPz5bXigpXSspKSB8ICg/UikgKSogKSBcKSAvSXgKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworT3B0aW9uczogZXh0ZW5kZWQKK0ZpcnN0IGNvZGUgdW5pdCA9ICcoJworTGFzdCBjb2RlIHVuaXQgPSAnKScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIChhYmNkKHh5ejxwPnFycykxMjMpCisgMDogKGFiY2QoeHl6PHA+cXJzKTEyMykKKyAxOiBhYmNkKHh5ejxwPnFycykxMjMKKyAyOiAxMjMKKworL1woICggKCAoPz5bXigpXSspIHwgKCg/UikpICkqICkgXCkgL0l4CitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK09wdGlvbnM6IGV4dGVuZGVkCitGaXJzdCBjb2RlIHVuaXQgPSAnKCcKK0xhc3QgY29kZSB1bml0ID0gJyknCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICAoYWIoY2QpZWYpCisgMDogKGFiKGNkKWVmKQorIDE6IGFiKGNkKWVmCisgMjogZWYKKyAzOiAoY2QpCisgICAgKGFiKGNkKGVmKWdoKWlqKQorIDA6IChhYihjZChlZilnaClpaikKKyAxOiBhYihjZChlZilnaClpagorIDI6IGlqCisgMzogKGNkKGVmKWdoKQorCisvXltbOmFsbnVtOl1dL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgWzAtOUEtWmEtel0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL15bWzpeYWxudW06XV0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBbXHgwMC0vOi1AWy1gey1ceGZmXSAobmVnKQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXltbOmFscGhhOl1dL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgW0EtWmEtel0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL15bWzpeYWxwaGE6XV0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBbXHgwMC1AWy1gey1ceGZmXSAobmVnKQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvW19bOmFscGhhOl1dL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaIAorICBfIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXltbOmFzY2lpOl1dL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgW1x4MDAtXHg3Zl0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL15bWzpeYXNjaWk6XV0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBbXHg4MC1ceGZmXSAobmVnKQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXltbOmJsYW5rOl1dL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgW1x4MDkgXQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXltbOl5ibGFuazpdXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIFtceDAwLVx4MDhceDBhLVx4MWYhLVx4ZmZdIChuZWcpCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bXG5ceDBiXHgwY1x4MGRbOmJsYW5rOl1dL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29udGFpbnMgZXhwbGljaXQgQ1Igb3IgTEYgbWF0Y2gKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDkgXHgwYSBceDBiIFx4MGMgXHgwZCBceDIwIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9eW1s6Y250cmw6XV0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBbXHgwMC1ceDFmXHg3Zl0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL15bWzpkaWdpdDpdXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIFswLTldCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9eW1s6Z3JhcGg6XV0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBbIS1+XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXltbOmxvd2VyOl1dL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgW2Etel0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL15bWzpwcmludDpdXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIFsgLX5dCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9eW1s6cHVuY3Q6XV0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBbIS0vOi1AWy1gey1+XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXltbOnNwYWNlOl1dL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgW1x4MDktXHgwZCBdCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9eW1s6dXBwZXI6XV0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBbQS1aXQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXltbOnhkaWdpdDpdXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIFswLTlBLUZhLWZdCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9eW1s6d29yZDpdXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIFswLTlBLVpfYS16XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXltbOl5jbnRybDpdXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIFsgLX5ceDgwLVx4ZmZdIChuZWcpCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9eWzEyWzpeZGlnaXQ6XV0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBbXHgwMC0vMTI6LVx4ZmZdIChuZWcpCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9eW1s6XmJsYW5rOl1dL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgW1x4MDAtXHgwOFx4MGEtXHgxZiEtXHhmZl0gKG5lZykKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1swMVs6YWxwaGE6XSVdL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFslMDFBLVphLXpdCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiAlIDAgMSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgCisgIFggWSBaIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvW1suY2guXV0vSQorRmFpbGVkOiBlcnJvciAxMTMgYXQgb2Zmc2V0IDE6IFBPU0lYIGNvbGxhdGluZyBlbGVtZW50cyBhcmUgbm90IHN1cHBvcnRlZAorCisvW1s9Y2g9XV0vSQorRmFpbGVkOiBlcnJvciAxMTMgYXQgb2Zmc2V0IDE6IFBPU0lYIGNvbGxhdGluZyBlbGVtZW50cyBhcmUgbm90IHN1cHBvcnRlZAorCisvW1s6cmh1YmFyYjpdXS9JCitGYWlsZWQ6IGVycm9yIDEzMCBhdCBvZmZzZXQgMzogdW5rbm93biBQT1NJWCBjbGFzcyBuYW1lCisKKy9bWzp1cHBlcjpdXS9JaQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcworU3RhcnRpbmcgY29kZSB1bml0czogQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaIAorICBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBBCisgMDogQQorICAgIGEKKyAwOiBhCisKKy9bWzpsb3dlcjpdXS9JaQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcworU3RhcnRpbmcgY29kZSB1bml0czogQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaIAorICBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBBCisgMDogQQorICAgIGEKKyAwOiBhCisKKy8oKD8taSlbWzpsb3dlcjpdXSlbWzpsb3dlcjpdXS9JaQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiBjYXNlbGVzcworU3RhcnRpbmcgY29kZSB1bml0czogYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWIKKyAwOiBhYgorIDE6IGEKKyAgICBhQgorIDA6IGFCCisgMTogYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWIKK05vIG1hdGNoCisgICAgQUIKK05vIG1hdGNoCisKKy9bXDIwMC1cMTEwXS9JCitGYWlsZWQ6IGVycm9yIDEwOCBhdCBvZmZzZXQgOTogcmFuZ2Ugb3V0IG9mIG9yZGVyIGluIGNoYXJhY3RlciBjbGFzcworCisvXig/KDApZnxiKW9vL0kKK0ZhaWxlZDogZXJyb3IgMTM1IGF0IG9mZnNldCA2OiBpbnZhbGlkIGNvbmRpdGlvbiAoPygwKQorCisjIFRoaXMgb25lJ3MgaGVyZSBiZWNhdXNlIG9mIHRoZSBsYXJnZSBvdXRwdXQgdmVjdG9yIG5lZWRlZAorCisvKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXGQrKD86XHN8JCkpKFxkKyg/OlxzfCQpKShcZCsoPzpcc3wkKSkoXHcrKVxzKyhcMjcwKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDI3MQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMjcwCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIDEgMiAzIDQgNSA2IDcgOCA5IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyNzIKKyAgICAgMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEgMzIgMzMgMzQgMzUgMzYgMzcgMzggMzkgNDAgNDEgNDIgNDMgNDQgNDUgNDYgNDcgNDggNDkgNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNTggNTkgNjAgNjEgNjIgNjMgNjQgNjUgNjYgNjcgNjggNjkgNzAgNzEgNzIgNzMgNzQgNzUgNzYgNzcgNzggNzkgODAgODEgODIgODMgODQgODUgODYgODcgODggODkgOTAgOTEgOTIgOTMgOTQgOTUgOTYgOTcgOTggOTkgMTAwIDEwMSAxMDIgMTAzIDEwNCAxMDUgMTA2IDEwNyAxMDggMTA5IDExMCAxMTEgMTEyIDExMyAxMTQgMTE1IDExNiAxMTcgMTE4IDExOSAxMjAgMTIxIDEyMiAxMjMgMTI0IDEyNSAxMjYgMTI3IDEyOCAxMjkgMTMwIDEzMSAxMzIgMTMzIDEzNCAxMzUgMTM2IDEzNyAxMzggMTM5IDE0MCAxNDEgMTQyIDE0MyAxNDQgMTQ1IDE0NiAxNDcgMTQ4IDE0OSAxNTAgMTUxIDE1MiAxNTMgMTU0IDE1NSAxNTYgMTU3IDE1OCAxNTkgMTYwIDE2MSAxNjIgMTYzIDE2NCAxNjUgMTY2IDE2NyAxNjggMTY5IDE3MCAxNzEgMTcyIDE3MyAxNzQgMTc1IDE3NiAxNzcgMTc4IDE3OSAxODAgMTgxIDE4MiAxODMgMTg0IDE4NSAxODYgMTg3IDE4OCAxODkgMTkwIDE5MSAxOTIgMTkzIDE5NCAxOTUgMTk2IDE5NyAxOTggMTk5IDIwMCAyMDEgMjAyIDIwMyAyMDQgMjA1IDIwNiAyMDcgMjA4IDIwOSAyMTAgMjExIDIxMiAyMTMgMjE0IDIxNSAyMTYgMjE3IDIxOCAyMTkgMjIwIDIyMSAyMjIgMjIzIDIyNCAyMjUgMjI2IDIyNyAyMjggMjI5IDIzMCAyMzEgMjMyIDIzMyAyMzQgMjM1IDIzNiAyMzcgMjM4IDIzOSAyNDAgMjQxIDI0MiAyNDMgMjQ0IDI0NSAyNDYgMjQ3IDI0OCAyNDkgMjUwIDI1MSAyNTIgMjUzIDI1NCAyNTUgMjU2IDI1NyAyNTggMjU5IDI2MCAyNjEgMjYyIDI2MyAyNjQgMjY1IDI2NiAyNjcgMjY4IDI2OSBBQkMgQUJDXD1vdmVjdG9yPTMwMAorIDA6IDEgMiAzIDQgNSA2IDcgOCA5IDEwIDExIDEyIDEzIDE0IDE1IDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxIDMyIDMzIDM0IDM1IDM2IDM3IDM4IDM5IDQwIDQxIDQyIDQzIDQ0IDQ1IDQ2IDQ3IDQ4IDQ5IDUwIDUxIDUyIDUzIDU0IDU1IDU2IDU3IDU4IDU5IDYwIDYxIDYyIDYzIDY0IDY1IDY2IDY3IDY4IDY5IDcwIDcxIDcyIDczIDc0IDc1IDc2IDc3IDc4IDc5IDgwIDgxIDgyIDgzIDg0IDg1IDg2IDg3IDg4IDg5IDkwIDkxIDkyIDkzIDk0IDk1IDk2IDk3IDk4IDk5IDEwMCAxMDEgMTAyIDEwMyAxMDQgMTA1IDEwNiAxMDcgMTA4IDEwOSAxMTAgMTExIDExMiAxMTMgMTE0IDExNSAxMTYgMTE3IDExOCAxMTkgMTIwIDEyMSAxMjIgMTIzIDEyNCAxMjUgMTI2IDEyNyAxMjggMTI5IDEzMCAxMzEgMTMyIDEzMyAxMzQgMTM1IDEzNiAxMzcgMTM4IDEzOSAxNDAgMTQxIDE0MiAxNDMgMTQ0IDE0NSAxNDYgMTQ3IDE0OCAxNDkgMTUwIDE1MSAxNTIgMTUzIDE1NCAxNTUgMTU2IDE1NyAxNTggMTU5IDE2MCAxNjEgMTYyIDE2MyAxNjQgMTY1IDE2NiAxNjcgMTY4IDE2OSAxNzAgMTcxIDE3MiAxNzMgMTc0IDE3NSAxNzYgMTc3IDE3OCAxNzkgMTgwIDE4MSAxODIgMTgzIDE4NCAxODUgMTg2IDE4NyAxODggMTg5IDE5MCAxOTEgMTkyIDE5MyAxOTQgMTk1IDE5NiAxOTcgMTk4IDE5OSAyMDAgMjAxIDIwMiAyMDMgMjA0IDIwNSAyMDYgMjA3IDIwOCAyMDkgMjEwIDIxMSAyMTIgMjEzIDIxNCAyMTUgMjE2IDIxNyAyMTggMjE5IDIyMCAyMjEgMjIyIDIyMyAyMjQgMjI1IDIyNiAyMjcgMjI4IDIyOSAyMzAgMjMxIDIzMiAyMzMgMjM0IDIzNSAyMzYgMjM3IDIzOCAyMzkgMjQwIDI0MSAyNDIgMjQzIDI0NCAyNDUgMjQ2IDI0NyAyNDggMjQ5IDI1MCAyNTEgMjUyIDI1MyAyNTQgMjU1IDI1NiAyNTcgMjU4IDI1OSAyNjAgMjYxIDI2MiAyNjMgMjY0IDI2NSAyNjYgMjY3IDI2OCAyNjkgQUJDIEFCQworIDE6IDEgCisgMjogMiAKKyAzOiAzIAorIDQ6IDQgCisgNTogNSAKKyA2OiA2IAorIDc6IDcgCisgODogOCAKKyA5OiA5IAorMTA6IDEwIAorMTE6IDExIAorMTI6IDEyIAorMTM6IDEzIAorMTQ6IDE0IAorMTU6IDE1IAorMTY6IDE2IAorMTc6IDE3IAorMTg6IDE4IAorMTk6IDE5IAorMjA6IDIwIAorMjE6IDIxIAorMjI6IDIyIAorMjM6IDIzIAorMjQ6IDI0IAorMjU6IDI1IAorMjY6IDI2IAorMjc6IDI3IAorMjg6IDI4IAorMjk6IDI5IAorMzA6IDMwIAorMzE6IDMxIAorMzI6IDMyIAorMzM6IDMzIAorMzQ6IDM0IAorMzU6IDM1IAorMzY6IDM2IAorMzc6IDM3IAorMzg6IDM4IAorMzk6IDM5IAorNDA6IDQwIAorNDE6IDQxIAorNDI6IDQyIAorNDM6IDQzIAorNDQ6IDQ0IAorNDU6IDQ1IAorNDY6IDQ2IAorNDc6IDQ3IAorNDg6IDQ4IAorNDk6IDQ5IAorNTA6IDUwIAorNTE6IDUxIAorNTI6IDUyIAorNTM6IDUzIAorNTQ6IDU0IAorNTU6IDU1IAorNTY6IDU2IAorNTc6IDU3IAorNTg6IDU4IAorNTk6IDU5IAorNjA6IDYwIAorNjE6IDYxIAorNjI6IDYyIAorNjM6IDYzIAorNjQ6IDY0IAorNjU6IDY1IAorNjY6IDY2IAorNjc6IDY3IAorNjg6IDY4IAorNjk6IDY5IAorNzA6IDcwIAorNzE6IDcxIAorNzI6IDcyIAorNzM6IDczIAorNzQ6IDc0IAorNzU6IDc1IAorNzY6IDc2IAorNzc6IDc3IAorNzg6IDc4IAorNzk6IDc5IAorODA6IDgwIAorODE6IDgxIAorODI6IDgyIAorODM6IDgzIAorODQ6IDg0IAorODU6IDg1IAorODY6IDg2IAorODc6IDg3IAorODg6IDg4IAorODk6IDg5IAorOTA6IDkwIAorOTE6IDkxIAorOTI6IDkyIAorOTM6IDkzIAorOTQ6IDk0IAorOTU6IDk1IAorOTY6IDk2IAorOTc6IDk3IAorOTg6IDk4IAorOTk6IDk5IAorMTAwOiAxMDAgCisxMDE6IDEwMSAKKzEwMjogMTAyIAorMTAzOiAxMDMgCisxMDQ6IDEwNCAKKzEwNTogMTA1IAorMTA2OiAxMDYgCisxMDc6IDEwNyAKKzEwODogMTA4IAorMTA5OiAxMDkgCisxMTA6IDExMCAKKzExMTogMTExIAorMTEyOiAxMTIgCisxMTM6IDExMyAKKzExNDogMTE0IAorMTE1OiAxMTUgCisxMTY6IDExNiAKKzExNzogMTE3IAorMTE4OiAxMTggCisxMTk6IDExOSAKKzEyMDogMTIwIAorMTIxOiAxMjEgCisxMjI6IDEyMiAKKzEyMzogMTIzIAorMTI0OiAxMjQgCisxMjU6IDEyNSAKKzEyNjogMTI2IAorMTI3OiAxMjcgCisxMjg6IDEyOCAKKzEyOTogMTI5IAorMTMwOiAxMzAgCisxMzE6IDEzMSAKKzEzMjogMTMyIAorMTMzOiAxMzMgCisxMzQ6IDEzNCAKKzEzNTogMTM1IAorMTM2OiAxMzYgCisxMzc6IDEzNyAKKzEzODogMTM4IAorMTM5OiAxMzkgCisxNDA6IDE0MCAKKzE0MTogMTQxIAorMTQyOiAxNDIgCisxNDM6IDE0MyAKKzE0NDogMTQ0IAorMTQ1OiAxNDUgCisxNDY6IDE0NiAKKzE0NzogMTQ3IAorMTQ4OiAxNDggCisxNDk6IDE0OSAKKzE1MDogMTUwIAorMTUxOiAxNTEgCisxNTI6IDE1MiAKKzE1MzogMTUzIAorMTU0OiAxNTQgCisxNTU6IDE1NSAKKzE1NjogMTU2IAorMTU3OiAxNTcgCisxNTg6IDE1OCAKKzE1OTogMTU5IAorMTYwOiAxNjAgCisxNjE6IDE2MSAKKzE2MjogMTYyIAorMTYzOiAxNjMgCisxNjQ6IDE2NCAKKzE2NTogMTY1IAorMTY2OiAxNjYgCisxNjc6IDE2NyAKKzE2ODogMTY4IAorMTY5OiAxNjkgCisxNzA6IDE3MCAKKzE3MTogMTcxIAorMTcyOiAxNzIgCisxNzM6IDE3MyAKKzE3NDogMTc0IAorMTc1OiAxNzUgCisxNzY6IDE3NiAKKzE3NzogMTc3IAorMTc4OiAxNzggCisxNzk6IDE3OSAKKzE4MDogMTgwIAorMTgxOiAxODEgCisxODI6IDE4MiAKKzE4MzogMTgzIAorMTg0OiAxODQgCisxODU6IDE4NSAKKzE4NjogMTg2IAorMTg3OiAxODcgCisxODg6IDE4OCAKKzE4OTogMTg5IAorMTkwOiAxOTAgCisxOTE6IDE5MSAKKzE5MjogMTkyIAorMTkzOiAxOTMgCisxOTQ6IDE5NCAKKzE5NTogMTk1IAorMTk2OiAxOTYgCisxOTc6IDE5NyAKKzE5ODogMTk4IAorMTk5OiAxOTkgCisyMDA6IDIwMCAKKzIwMTogMjAxIAorMjAyOiAyMDIgCisyMDM6IDIwMyAKKzIwNDogMjA0IAorMjA1OiAyMDUgCisyMDY6IDIwNiAKKzIwNzogMjA3IAorMjA4OiAyMDggCisyMDk6IDIwOSAKKzIxMDogMjEwIAorMjExOiAyMTEgCisyMTI6IDIxMiAKKzIxMzogMjEzIAorMjE0OiAyMTQgCisyMTU6IDIxNSAKKzIxNjogMjE2IAorMjE3OiAyMTcgCisyMTg6IDIxOCAKKzIxOTogMjE5IAorMjIwOiAyMjAgCisyMjE6IDIyMSAKKzIyMjogMjIyIAorMjIzOiAyMjMgCisyMjQ6IDIyNCAKKzIyNTogMjI1IAorMjI2OiAyMjYgCisyMjc6IDIyNyAKKzIyODogMjI4IAorMjI5OiAyMjkgCisyMzA6IDIzMCAKKzIzMTogMjMxIAorMjMyOiAyMzIgCisyMzM6IDIzMyAKKzIzNDogMjM0IAorMjM1OiAyMzUgCisyMzY6IDIzNiAKKzIzNzogMjM3IAorMjM4OiAyMzggCisyMzk6IDIzOSAKKzI0MDogMjQwIAorMjQxOiAyNDEgCisyNDI6IDI0MiAKKzI0MzogMjQzIAorMjQ0OiAyNDQgCisyNDU6IDI0NSAKKzI0NjogMjQ2IAorMjQ3OiAyNDcgCisyNDg6IDI0OCAKKzI0OTogMjQ5IAorMjUwOiAyNTAgCisyNTE6IDI1MSAKKzI1MjogMjUyIAorMjUzOiAyNTMgCisyNTQ6IDI1NCAKKzI1NTogMjU1IAorMjU2OiAyNTYgCisyNTc6IDI1NyAKKzI1ODogMjU4IAorMjU5OiAyNTkgCisyNjA6IDI2MCAKKzI2MTogMjYxIAorMjYyOiAyNjIgCisyNjM6IDI2MyAKKzI2NDogMjY0IAorMjY1OiAyNjUgCisyNjY6IDI2NiAKKzI2NzogMjY3IAorMjY4OiAyNjggCisyNjk6IDI2OSAKKzI3MDogQUJDCisyNzE6IEFCQworCisjIFRoaXMgb25lJ3MgaGVyZSBiZWNhdXNlIFBlcmwgZG9lcyB0aGlzIGRpZmZlcmVudGx5IGFuZCBQQ1JFMiBjYW4ndCBhdCBwcmVzZW50CisKKy8obWFpbihPKT8pKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK0ZpcnN0IGNvZGUgdW5pdCA9ICdtJworTGFzdCBjb2RlIHVuaXQgPSAnbicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorICAgIG1haW5tYWluCisgMDogbWFpbm1haW4KKyAxOiBtYWluCisgICAgbWFpbk9tYWluCisgMDogbWFpbk9tYWluCisgMTogbWFpbgorIDI6IE8KKworIyBUaGVzZSBhcmUgYWxsIGNhc2VzIHdoZXJlIFBlcmwgZG9lcyBpdCBkaWZmZXJlbnRseSAobmVzdGVkIGNhcHR1cmVzKQorCisvXihhKGIpPykrJC9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBhYmEKKyAwOiBhYmEKKyAxOiBhCisgMjogYgorCisvXihhYShiYik/KSskL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYmJhYQorIDA6IGFhYmJhYQorIDE6IGFhCisgMjogYmIKKworL14oYWF8YWEoYmIpKSskL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYmJhYQorIDA6IGFhYmJhYQorIDE6IGFhCisgMjogYmIKKworL14oYWEoYmIpPz8pKyQvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWFiYmFhCisgMDogYWFiYmFhCisgMTogYWEKKyAyOiBiYgorCisvXig/OmFhKGJiKT8pKyQvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWFiYmFhCisgMDogYWFiYmFhCisgMTogYmIKKworL14oYWEoYihiKSk/KSskL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYmJhYQorIDA6IGFhYmJhYQorIDE6IGFhCisgMjogYmIKKyAzOiBiCisKKy9eKD86YWEoYihiKSk/KSskL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYmJhYQorIDA6IGFhYmJhYQorIDE6IGJiCisgMjogYgorCisvXig/OmFhKGIoPzpiKSk/KSskL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYmJhYQorIDA6IGFhYmJhYQorIDE6IGJiCisKKy9eKD86YWEoYmIoPzpiKSk/KSskL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYmJiYWEKKyAwOiBhYWJiYmFhCisgMTogYmJiCisKKy9eKD86YWEoYig/OmJiKSk/KSskL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYmJiYWEKKyAwOiBhYWJiYmFhCisgMTogYmJiCisKKy9eKD86YWEoPzpiKGIpKT8pKyQvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWFiYmFhCisgMDogYWFiYmFhCisgMTogYgorCisvXig/OmFhKD86YihiYikpPykrJC9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhYWJiYmFhCisgMDogYWFiYmJhYQorIDE6IGJiCisKKy9eKGFhKGIoYmIpKT8pKyQvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAzCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWFiYmJhYQorIDA6IGFhYmJiYWEKKyAxOiBhYQorIDI6IGJiYgorIDM6IGJiCisKKy9eKGFhKGJiKGJiKSk/KSskL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYmJiYmFhCisgMDogYWFiYmJiYWEKKyAxOiBhYQorIDI6IGJiYmIKKyAzOiBiYgorCisjIC0tLS0tLS0tLS0tLS0tLS0KKworLyMvSUJ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitPcHRpb25zOiBleHRlbmRlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy9hIy9JQngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogZXh0ZW5kZWQKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bXHNdL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtceDA5LVx4MGQgXQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDBhIFx4MGIgXHgwYyBceDBkIFx4MjAgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1tcU10vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4MDAtXHgwOFx4MGUtXHgxZiEtXHhmZl0gKG5lZykKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDAgXHgwMSBceDAyIFx4MDMgXHgwNCBceDA1IFx4MDYgXHgwNyBceDA4IFx4MGUgXHgwZiAKKyAgXHgxMCBceDExIFx4MTIgXHgxMyBceDE0IFx4MTUgXHgxNiBceDE3IFx4MTggXHgxOSBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgCisgIFx4MWYgISAiICMgJCAlICYgJyAoICkgKiArICwgLSAuIC8gMCAxIDIgMyA0IDUgNiA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIAorICBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFogWyBcIF0gXiBfIGAgYSBiIGMgZCBlIGYgZyBoIAorICBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiB7IHwgfSB+IFx4N2YgXHg4MCBceDgxIFx4ODIgXHg4MyBceDg0IAorICBceDg1IFx4ODYgXHg4NyBceDg4IFx4ODkgXHg4YSBceDhiIFx4OGMgXHg4ZCBceDhlIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyAKKyAgXHg5NCBceDk1IFx4OTYgXHg5NyBceDk4IFx4OTkgXHg5YSBceDliIFx4OWMgXHg5ZCBceDllIFx4OWYgXHhhMCBceGExIFx4YTIgCisgIFx4YTMgXHhhNCBceGE1IFx4YTYgXHhhNyBceGE4IFx4YTkgXHhhYSBceGFiIFx4YWMgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIAorICBceGIyIFx4YjMgXHhiNCBceGI1IFx4YjYgXHhiNyBceGI4IFx4YjkgXHhiYSBceGJiIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhjMCAKKyAgXHhjMSBceGMyIFx4YzMgXHhjNCBceGM1IFx4YzYgXHhjNyBceGM4IFx4YzkgXHhjYSBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgCisgIFx4ZDAgXHhkMSBceGQyIFx4ZDMgXHhkNCBceGQ1IFx4ZDYgXHhkNyBceGQ4IFx4ZDkgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIAorICBceGRmIFx4ZTAgXHhlMSBceGUyIFx4ZTMgXHhlNCBceGU1IFx4ZTYgXHhlNyBceGU4IFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCAKKyAgXHhlZSBceGVmIFx4ZjAgXHhmMSBceGYyIFx4ZjMgXHhmNCBceGY1IFx4ZjYgXHhmNyBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgCisgIFx4ZmQgXHhmZSBceGZmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9hKD9pKWIvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYQorICAgICAvaSBiCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InIChjYXNlbGVzcykKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFiCisgMDogYWIKKyAgICBhQgorIDA6IGFCCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQgorTm8gbWF0Y2gKKworLyhhKD9pKWIpL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBhCisgICAgIC9pIGIKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InIChjYXNlbGVzcykKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFiCisgMDogYWIKKyAxOiBhYgorICAgIGFCCisgMDogYUIKKyAxOiBhQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUIKK05vIG1hdGNoCisKKy8gICAoP2kpYWJjL0lCeAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAvaSBhYmMKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGV4dGVuZGVkCitGaXJzdCBjb2RlIHVuaXQgPSAnYScgKGNhc2VsZXNzKQorTGFzdCBjb2RlIHVuaXQgPSAnYycgKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy8jdGhpcyBpcyBhIGNvbW1lbnQKKyAgKD9pKWFiYy9JQngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgL2kgYWJjCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBleHRlbmRlZAorRmlyc3QgY29kZSB1bml0ID0gJ2EnIChjYXNlbGVzcykKK0xhc3QgY29kZSB1bml0ID0gJ2MnIChjYXNlbGVzcykKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJzEnCitMYXN0IGNvZGUgdW5pdCA9ICcwJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzMDAKKworL1xRMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJzEnCitMYXN0IGNvZGUgdW5pdCA9ICcwJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzMDAKKworL1xRXEUvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIFwKKyAwOiAKKworL1xRXEV4L0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIHgKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICd4JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8gXFFcRS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICAgCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnICcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvYVxRXEUvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgYWJjCisgMDogYQorICBiY2EKKyAwOiBhCisgIGJhYworIDA6IGEKKworL2FcUVxFYi9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhYgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgIGFiYworIDA6IGFiCisKKy9cUVxFYWJjL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIGFiYworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy94Kitcdy9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICB4KisKKyAgICAgICAgXHcKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDAgMSAyIDMgNCA1IDYgNyA4IDkgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCAKKyAgUSBSIFMgVCBVIFYgVyBYIFkgWiBfIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHh4eHgKK05vIG1hdGNoCisKKy94PysvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgeD8rCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworL3grKy9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICB4KysKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICd4JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy94ezEsM30rL0Isbm9fYXV0b19wb3NzZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIHgKKyAgICAgICAgeHswLDJ9KworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL3h7MSwzfSsvQmksbm9fYXV0b19wb3NzZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIHgKKyAgICAgL2kgeHswLDJ9KworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teeF17MSwzfSsvQixub19hdXRvX3Bvc3Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW154XQorICAgICAgICBbXnhdezAsMn0rCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW154XXsxLDN9Ky9CaSxub19hdXRvX3Bvc3Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgL2kgW154XQorICAgICAvaSBbXnhdezAsMn0rCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKHgpKisvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQnJhcG9zemVybworICAgICAgICBDQnJhUG9zIDEKKyAgICAgICAgeAorICAgICAgICBLZXRScG9zCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworL14oXHcrK3xccysrKSokL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIG5vdyBpcyB0aGUgdGltZSBmb3IgYWxsIGdvb2QgbWVuIHRvIGNvbWUgdG8gdGhlIGFpZCBvZiB0aGUgcGFydHkKKyAwOiBub3cgaXMgdGhlIHRpbWUgZm9yIGFsbCBnb29kIG1lbiB0byBjb21lIHRvIHRoZSBhaWQgb2YgdGhlIHBhcnR5CisgMTogcGFydHkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHRoaXMgaXMgbm90IGEgbGluZSB3aXRoIG9ubHkgd29yZHMgYW5kIHNwYWNlcyEKK05vIG1hdGNoCisKKy8oXGQrKykoXHcpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIDEyMzQ1YQorIDA6IDEyMzQ1YQorIDE6IDEyMzQ1CisgMjogYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNDUrCitObyBtYXRjaAorCisvYSsrYi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYWIKKyAwOiBhYWFiCisKKy8oYSsrYikvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhYWFiCisgMDogYWFhYgorIDE6IGFhYWIKKworLyhhKyspYi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFhYWIKKyAwOiBhYWFiCisgMTogYWFhCisKKy8oW14oKV0rK3xcKFteKCldKlwpKSsvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDAwIFx4MDEgXHgwMiBceDAzIFx4MDQgXHgwNSBceDA2IFx4MDcgXHgwOCBceDA5IFx4MGEgCisgIFx4MGIgXHgwYyBceDBkIFx4MGUgXHgwZiBceDEwIFx4MTEgXHgxMiBceDEzIFx4MTQgXHgxNSBceDE2IFx4MTcgXHgxOCBceDE5IAorICBceDFhIFx4MWIgXHgxYyBceDFkIFx4MWUgXHgxZiBceDIwICEgIiAjICQgJSAmICcgKCAqICsgLCAtIC4gLyAwIDEgMiAzIDQgNSAKKyAgNiA3IDggOSA6IDsgPCA9ID4gPyBAIEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiAKKyAgWyBcIF0gXiBfIGAgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IHsgfCB9IH4gXHg3ZiAKKyAgXHg4MCBceDgxIFx4ODIgXHg4MyBceDg0IFx4ODUgXHg4NiBceDg3IFx4ODggXHg4OSBceDhhIFx4OGIgXHg4YyBceDhkIFx4OGUgCisgIFx4OGYgXHg5MCBceDkxIFx4OTIgXHg5MyBceDk0IFx4OTUgXHg5NiBceDk3IFx4OTggXHg5OSBceDlhIFx4OWIgXHg5YyBceDlkIAorICBceDllIFx4OWYgXHhhMCBceGExIFx4YTIgXHhhMyBceGE0IFx4YTUgXHhhNiBceGE3IFx4YTggXHhhOSBceGFhIFx4YWIgXHhhYyAKKyAgXHhhZCBceGFlIFx4YWYgXHhiMCBceGIxIFx4YjIgXHhiMyBceGI0IFx4YjUgXHhiNiBceGI3IFx4YjggXHhiOSBceGJhIFx4YmIgCisgIFx4YmMgXHhiZCBceGJlIFx4YmYgXHhjMCBceGMxIFx4YzIgXHhjMyBceGM0IFx4YzUgXHhjNiBceGM3IFx4YzggXHhjOSBceGNhIAorICBceGNiIFx4Y2MgXHhjZCBceGNlIFx4Y2YgXHhkMCBceGQxIFx4ZDIgXHhkMyBceGQ0IFx4ZDUgXHhkNiBceGQ3IFx4ZDggXHhkOSAKKyAgXHhkYSBceGRiIFx4ZGMgXHhkZCBceGRlIFx4ZGYgXHhlMCBceGUxIFx4ZTIgXHhlMyBceGU0IFx4ZTUgXHhlNiBceGU3IFx4ZTggCisgIFx4ZTkgXHhlYSBceGViIFx4ZWMgXHhlZCBceGVlIFx4ZWYgXHhmMCBceGYxIFx4ZjIgXHhmMyBceGY0IFx4ZjUgXHhmNiBceGY3IAorICBceGY4IFx4ZjkgXHhmYSBceGZiIFx4ZmMgXHhmZCBceGZlIFx4ZmYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICAoKGFiYyhhZGUpdWZoKCkoKXgKKyAwOiBhYmMoYWRlKXVmaCgpKCl4CisgMTogeAorCisvXCgoW14oKV0rK3xcKFteKCldK1wpKStcKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICcoJworTGFzdCBjb2RlIHVuaXQgPSAnKScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIChhYmMpCisgMDogKGFiYykKKyAxOiBhYmMKKyAgICAoYWJjKGRlZil4eXopCisgMDogKGFiYyhkZWYpeHl6KQorIDE6IHh5egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgKCgoKWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitObyBtYXRjaAorCisvKGFiYyl7MSwzfSsvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgT25jZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICBCcmF6ZXJvCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICBCcmF6ZXJvCisgICAgICAgIENCcmEgMQorICAgICAgICBhYmMKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvYSs/Ky9JCitGYWlsZWQ6IGVycm9yIDEwOSBhdCBvZmZzZXQgMzogcXVhbnRpZmllciBkb2VzIG5vdCBmb2xsb3cgYSByZXBlYXRhYmxlIGl0ZW0KKworL2F7MiwzfT8rYi9JCitGYWlsZWQ6IGVycm9yIDEwOSBhdCBvZmZzZXQgNzogcXVhbnRpZmllciBkb2VzIG5vdCBmb2xsb3cgYSByZXBlYXRhYmxlIGl0ZW0KKworLyg/VSlhKz8rL0kKK0ZhaWxlZDogZXJyb3IgMTA5IGF0IG9mZnNldCA3OiBxdWFudGlmaWVyIGRvZXMgbm90IGZvbGxvdyBhIHJlcGVhdGFibGUgaXRlbQorCisvYXsyLDN9PytiL0ksdW5ncmVlZHkKK0ZhaWxlZDogZXJyb3IgMTA5IGF0IG9mZnNldCA3OiBxdWFudGlmaWVyIGRvZXMgbm90IGZvbGxvdyBhIHJlcGVhdGFibGUgaXRlbQorCisveCg/VSlhKytiL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIHgKKyAgICAgICAgYSsrCisgICAgICAgIGIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICd4JworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIHhhYWFhYgorIDA6IHhhYWFhYgorCisvKD9VKXhhKytiL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIHgKKyAgICAgICAgYSsrCisgICAgICAgIGIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICd4JworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIHhhYWFhYgorIDA6IHhhYWFhYgorCisvXigoYSspKD9VKShbYWJdKykoPy1VKShbYmNdKykoXHcqKSkvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBDQnJhIDEKKyAgICAgICAgQ0JyYSAyCisgICAgICAgIGErCisgICAgICAgIEtldAorICAgICAgICBDQnJhIDMKKyAgICAgICAgW2FiXSs/CisgICAgICAgIEtldAorICAgICAgICBDQnJhIDQKKyAgICAgICAgW2JjXSsKKyAgICAgICAgS2V0CisgICAgICAgIENCcmEgNQorICAgICAgICBcdyorCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDUKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL154KD9VKWErYi9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIHgKKyAgICAgICAgYSsrCisgICAgICAgIGIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9eeCg/VSkoYSspYi9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIHgKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGErPworICAgICAgICBLZXQKKyAgICAgICAgYgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL1sueC5dL0kKK0ZhaWxlZDogZXJyb3IgMTEzIGF0IG9mZnNldCAwOiBQT1NJWCBjb2xsYXRpbmcgZWxlbWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQKKworL1s9eD1dL0kKK0ZhaWxlZDogZXJyb3IgMTEzIGF0IG9mZnNldCAwOiBQT1NJWCBjb2xsYXRpbmcgZWxlbWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQKKworL1s6eDpdL0kKK0ZhaWxlZDogZXJyb3IgMTEyIGF0IG9mZnNldCAwOiBQT1NJWCBuYW1lZCBjbGFzc2VzIGFyZSBzdXBwb3J0ZWQgb25seSB3aXRoaW4gYSBjbGFzcworCisvXGwvSQorRmFpbGVkOiBlcnJvciAxMzcgYXQgb2Zmc2V0IDE6IFBDUkUgZG9lcyBub3Qgc3VwcG9ydCBcTCwgXGwsIFxOe25hbWV9LCBcVSwgb3IgXHUKKworL1xML0kKK0ZhaWxlZDogZXJyb3IgMTM3IGF0IG9mZnNldCAxOiBQQ1JFIGRvZXMgbm90IHN1cHBvcnQgXEwsIFxsLCBcTntuYW1lfSwgXFUsIG9yIFx1CisKKy9cTntuYW1lfS9JCitGYWlsZWQ6IGVycm9yIDEzNyBhdCBvZmZzZXQgMTogUENSRSBkb2VzIG5vdCBzdXBwb3J0IFxMLCBcbCwgXE57bmFtZX0sIFxVLCBvciBcdQorCisvXHUvSQorRmFpbGVkOiBlcnJvciAxMzcgYXQgb2Zmc2V0IDE6IFBDUkUgZG9lcyBub3Qgc3VwcG9ydCBcTCwgXGwsIFxOe25hbWV9LCBcVSwgb3IgXHUKKworL1xVL0kKK0ZhaWxlZDogZXJyb3IgMTM3IGF0IG9mZnNldCAxOiBQQ1JFIGRvZXMgbm90IHN1cHBvcnQgXEwsIFxsLCBcTntuYW1lfSwgXFUsIG9yIFx1CisKKy9hezEsM31iL3VuZ3JlZWR5CisgICAgYWIKKyAwOiBhYgorCisvWy9JCitGYWlsZWQ6IGVycm9yIDEwNiBhdCBvZmZzZXQgMTogbWlzc2luZyB0ZXJtaW5hdGluZyBdIGZvciBjaGFyYWN0ZXIgY2xhc3MKKworL1thLS9JCitGYWlsZWQ6IGVycm9yIDEwNiBhdCBvZmZzZXQgMzogbWlzc2luZyB0ZXJtaW5hdGluZyBdIGZvciBjaGFyYWN0ZXIgY2xhc3MKKworL1tbOnNwYWNlOl0vSQorRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDEwOiBtaXNzaW5nIHRlcm1pbmF0aW5nIF0gZm9yIGNoYXJhY3RlciBjbGFzcworCisvW1xzXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwOS1ceDBkIF0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDkgXHgwYSBceDBiIFx4MGMgXHgwZCBceDIwIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bWzpzcGFjZTpdXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwOS1ceDBkIF0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDkgXHgwYSBceDBiIFx4MGMgXHgwZCBceDIwIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bWzpzcGFjZTpdYWJjZGVdL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtceDA5LVx4MGQgYS1lXQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogXHgwOSBceDBhIFx4MGIgXHgwYyBceDBkIFx4MjAgYSBiIGMgZCBlIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy88ICg/OiAoPyhSKSBcZCsrICB8IFtePD5dKispIHwgKD9SKSkgKiA+L0l4CitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGV4dGVuZGVkCitGaXJzdCBjb2RlIHVuaXQgPSAnPCcKK0xhc3QgY29kZSB1bml0ID0gJz4nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICA8PgorIDA6IDw+CisgICAgPGFiY2Q+CisgMDogPGFiY2Q+CisgICAgPGFiYyA8MTIzPiBoaWo+CisgMDogPGFiYyA8MTIzPiBoaWo+CisgICAgPGFiYyA8ZGVmPiBoaWo+CisgMDogPGRlZj4KKyAgICA8YWJjPD5kZWY+CisgMDogPGFiYzw+ZGVmPgorICAgIDxhYmM8PgorIDA6IDw+CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICA8YWJjCitObyBtYXRjaAorCisvOEpcJFdFXDxcLnJYXCtpeFxbZDFiXCFIXCNcP3ZWMHZyS1w6WkgxXD0yTVw+aVZcO1w/YVBoRkJcPFwqdldcQFFXXEBzTzlcfWNmWkFcLWlcJ3dcJWhLZDZndDFVSlBcLDE1X1wjUVlcJE1cXk1zc19VXC9cXVwmTEs5XFs1dlF1Ylxed1xbS0REXDxFam1oVVpcP1wuYWtwMmRGXD5xbWpcOzJcfVlXRmRZeFwuQXBcXWhqQ1BUUFwobjI4a1wrM1w7b1wmV1hxc1wvZ09YZHJcJFw6clwnZG8wXDtiNGNcKGZfR3JcPVwiXFw0XClcWzAxVDdhalFKdkxcJFdcfm1MX3NTXC80aFw6eFwqXFtaTlw9S0xzXCZMNXpYXC9cL1w+aXRcLG9cOmFVXChcO1pcPnBXXCZUN29QXCcyS1xeRVw6eDlcJ2NcW1wlelwtXCw2NEpRNUFlSF9HXCNLaWpVS2doUXdcXlxcdmVhM2FcP2trYV9HXCQ4XCNcYFwqa3luc3h6QkxydVwnXF1rX1xbN0ZyVnhcfVxeXD1cJGJseFw+c1wtTlwlalw7RFwqYVpEbnN3XDpZS1pcJVFcLktuZTlcI2hQXD9cK2IzXChTT3ZMXCxcXlw7XCZ1NVxAXD81QzVCaGJcPW1cLXZFaF9MMTVKbFxdVVwpMFJQNlx7cVwlTFxeX3o1RVwnRHc2WFxiL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIDhKJFdFPC5yWCtpeFtkMWIhSCM/dlYwdnJLOlpIMT0yTT5pVjs/YVBoRkI8KnZXQFFXQHNPOX1jZlpBLWkndyVoS2Q2Z3QxVUpQLDE1XyNRWSRNXk1zc19VL10mTEs5WzV2UXViXndbS0REPEVqbWhVWj8uYWtwMmRGPnFtajsyfVlXRmRZeC5BcF1oakNQVFAobjI4ayszO28mV1hxcy9nT1hkciQ6cidkbzA7YjRjKGZfR3I9Ilw0KVswMVQ3YWpRSnZMJFd+bUxfc1MvNGg6eCpbWk49S0xzJkw1elgvLz5pdCxvOmFVKDtaPnBXJlQ3b1AnMkteRTp4OSdjWyV6LSw2NEpRNUFlSF9HI0tpalVLZ2hRd15cdmVhM2E/a2thX0ckOCNgKmt5bnN4ekJMcnUnXWtfWzdGclZ4fV49JGJseD5zLU4lajtEKmFaRG5zdzpZS1olUS5LbmU5I2hQPytiMyhTT3ZMLF47JnU1QD81QzVCaGI9bS12RWhfTDE1SmxdVSkwUlA2e3ElTF5fejVFJ0R3NlgKKyAgICAgICAgXGIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heCBsb29rYmVoaW5kID0gMQorRmlyc3QgY29kZSB1bml0ID0gJzgnCitMYXN0IGNvZGUgdW5pdCA9ICdYJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0MDkKKworL1wkXDxcLlhcK2l4XFtkMWJcIUhcI1w/dlYwdnJLXDpaSDFcPTJNXD5pVlw7XD9hUGhGQlw8XCp2V1xAUVdcQHNPOVx9Y2ZaQVwtaVwnd1wlaEtkNmd0MVVKUFwsMTVfXCNRWVwkTVxeTXNzX1VcL1xdXCZMSzlcWzV2UXViXF53XFtLRERcPEVqbWhVWlw/XC5ha3AyZEZcPnFtalw7Mlx9WVdGZFl4XC5BcFxdaGpDUFRQXChuMjhrXCszXDtvXCZXWHFzXC9nT1hkclwkXDpyXCdkbzBcO2I0Y1woZl9Hclw9XCJcXDRcKVxbMDFUN2FqUUp2TFwkV1x+bUxfc1NcLzRoXDp4XCpcW1pOXD1LTHNcJkw1elhcL1wvXD5pdFwsb1w6YVVcKFw7Wlw+cFdcJlQ3b1BcJzJLXF5FXDp4OVwnY1xbXCV6XC1cLDY0SlE1QWVIX0dcI0tpalVLZ2hRd1xeXFx2ZWEzYVw/a2thX0dcJDhcI1xgXCpreW5zeHpCTHJ1XCdcXWtfXFs3RnJWeFx9XF5cPVwkYmx4XD5zXC1OXCVqXDtEXCphWkRuc3dcOllLWlwlUVwuS25lOVwjaFBcP1wrYjNcKFNPdkxcLFxeXDtcJnU1XEBcPzVDNUJoYlw9bVwtdkVoX0wxNUpsXF1VXCkwUlA2XHtxXCVMXF5fejVFXCdEdzZYXGIvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgJDwuWCtpeFtkMWIhSCM/dlYwdnJLOlpIMT0yTT5pVjs/YVBoRkI8KnZXQFFXQHNPOX1jZlpBLWkndyVoS2Q2Z3QxVUpQLDE1XyNRWSRNXk1zc19VL10mTEs5WzV2UXViXndbS0REPEVqbWhVWj8uYWtwMmRGPnFtajsyfVlXRmRZeC5BcF1oakNQVFAobjI4ayszO28mV1hxcy9nT1hkciQ6cidkbzA7YjRjKGZfR3I9Ilw0KVswMVQ3YWpRSnZMJFd+bUxfc1MvNGg6eCpbWk49S0xzJkw1elgvLz5pdCxvOmFVKDtaPnBXJlQ3b1AnMkteRTp4OSdjWyV6LSw2NEpRNUFlSF9HI0tpalVLZ2hRd15cdmVhM2E/a2thX0ckOCNgKmt5bnN4ekJMcnUnXWtfWzdGclZ4fV49JGJseD5zLU4lajtEKmFaRG5zdzpZS1olUS5LbmU5I2hQPytiMyhTT3ZMLF47JnU1QD81QzVCaGI9bS12RWhfTDE1SmxdVSkwUlA2e3ElTF5fejVFJ0R3NlgKKyAgICAgICAgXGIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heCBsb29rYmVoaW5kID0gMQorRmlyc3QgY29kZSB1bml0ID0gJyQnCitMYXN0IGNvZGUgdW5pdCA9ICdYJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0MDQKKworLyguKilcZCtcMS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKC4qKVxkKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKC4qKVxkK1wxL0lzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK09wdGlvbnM6IGRvdGFsbAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oLiopXGQrL0lzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0NvbXBpbGUgb3B0aW9uczogZG90YWxsCitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkIGRvdGFsbAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oLiooeHl6KSlcZCtcMi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK01heCBiYWNrIHJlZmVyZW5jZSA9IDIKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK0xhc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDcKKworLygoLiopKVxkK1wxL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgYWJjMTIzYmMKKyAwOiBiYzEyM2JjCisgMTogYmMKKyAyOiBiYworCisvYVtiXS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKD89YSkuKi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy8oPz1hYmMpLnh5ei9JaQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcworRmlyc3QgY29kZSB1bml0ID0gJ2EnIChjYXNlbGVzcykKK0xhc3QgY29kZSB1bml0ID0gJ3onIChjYXNlbGVzcykKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvKD89YWJjKSg/aSkueHl6L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICd6JyAoY2FzZWxlc3MpCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKworLyg/PWEpKD89YikvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKD89LilhL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLygoPz1hYmNkYSlhKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKCg/PWFiY2RhKWFiKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKClhL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyg/Oig/PS4pfCg/PCF4KSlhL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF4IGxvb2tiZWhpbmQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKD8oMSlhYnxhYykoLikvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvKD8oMSlhYnp8YWN6KSguKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvKD8oMSlhYnopKC4pL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oPygxKWFieikoMSkyMy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK0xhc3QgY29kZSB1bml0ID0gJzMnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworLyhhKSsvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKGEpezIsM30vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLyhhKSovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworL1thXS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bYWJdL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bYWJdL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bXmFdL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9cZDQ1Ni9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDAgMSAyIDMgNCA1IDYgNyA4IDkgCitMYXN0IGNvZGUgdW5pdCA9ICc2JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisKKy9cZDQ1Ni9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDAgMSAyIDMgNCA1IDYgNyA4IDkgCitMYXN0IGNvZGUgdW5pdCA9ICc2JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisKKy9hXmIvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworL15hL0ltCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IG11bHRpbGluZQorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorTGFzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICBhYmNkZQorIDA6IGEKKyAgeHlcbmFiYworIDA6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICB4eWFiYworTm8gbWF0Y2gKKworL2N8YWJjL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogYSBjIAorTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKD9pKVthYl0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBBIEIgYSBiIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bYWJdKD9pKWNkL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIAorTGFzdCBjb2RlIHVuaXQgPSAnZCcgKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9hYmMoP0MpZGVmL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdmJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA2CisgICAgYWJjZGVmCistLS0+YWJjZGVmCisgIDAgXiAgXiAgICAgICBkCisgMDogYWJjZGVmCisgICAgMTIzNGFiY2RlZgorLS0tPjEyMzRhYmNkZWYKKyAgMCAgICAgXiAgXiAgICAgICBkCisgMDogYWJjZGVmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmN4eXoKK05vIG1hdGNoCisgICAgYWJjeHl6ZgorLS0tPmFiY3h5emYKKyAgMCBeICBeICAgICAgICBkCitObyBtYXRjaAorCisvYWJjKD9DKWRlKD9DMSlmL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdmJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA2CisgICAgMTIzYWJjZGVmCistLS0+MTIzYWJjZGVmCisgIDAgICAgXiAgXiAgICAgICBkCisgIDEgICAgXiAgICBeICAgICBmCisgMDogYWJjZGVmCisKKy8oP0MxKVxkYWJjKD9DMilkZWYvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIDEgMiAzIDQgNSA2IDcgOCA5IAorTGFzdCBjb2RlIHVuaXQgPSAnZicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNworICAgIDEyMzRhYmNkZWYKKy0tLT4xMjM0YWJjZGVmCisgIDEgXiAgICAgICAgICAgICAgXGQKKyAgMSAgXiAgICAgICAgICAgICBcZAorICAxICAgXiAgICAgICAgICAgIFxkCisgIDEgICAgXiAgICAgICAgICAgXGQKKyAgMiAgICBeICAgXiAgICAgICBkCisgMDogNGFiY2RlZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGVmCitObyBtYXRjaAorCisvKD9DMSlcZGFiYyg/QzIpZGVmL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSAKK0xhc3QgY29kZSB1bml0ID0gJ2YnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDcKKyAgICAxMjM0YWJjZGVmCistLS0+MTIzNGFiY2RlZgorICAxIF4gICAgICAgICAgICAgIFxkCisgIDEgIF4gICAgICAgICAgICAgXGQKKyAgMSAgIF4gICAgICAgICAgICBcZAorICAxICAgIF4gICAgICAgICAgIFxkCisgIDIgICAgXiAgIF4gICAgICAgZAorIDA6IDRhYmNkZWYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlZgorTm8gbWF0Y2gKKworLyg/QzI1NSlhYi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKD9DMjU2KWFiL0kKK0ZhaWxlZDogZXJyb3IgMTM4IGF0IG9mZnNldCA2OiBudW1iZXIgYWZ0ZXIgKD9DIGlzIGdyZWF0ZXIgdGhhbiAyNTUKKworLyg/Q2FiKXh4L0kKK0ZhaWxlZDogZXJyb3IgMTgyIGF0IG9mZnNldCAzOiB1bnJlY29nbml6ZWQgc3RyaW5nIGRlbGltaXRlciBmb2xsb3dzICg/QworCisvKD9DMTJ2cil4L0kKK0ZhaWxlZDogZXJyb3IgMTM5IGF0IG9mZnNldCA1OiBjbG9zaW5nIHBhcmVudGhlc2lzIGZvciAoP0MgZXhwZWN0ZWQKKworL2FiYyg/QylkZWYvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2YnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDYKKyAgICBceDgzXHgwXHg2MWJjZGVmCistLS0+XHg4M1x4MDBhYmNkZWYKKyAgMCAgICAgICAgIF4gIF4gICAgICAgZAorIDA6IGFiY2RlZgorCisvKGFiYykoP0MpZGUoP0MxKWYvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2YnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDYKKyAgICAxMjNhYmNkZWYKKy0tLT4xMjNhYmNkZWYKKyAgMCAgICBeICBeICAgICAgIGQKKyAgMSAgICBeICAgIF4gICAgIGYKKyAwOiBhYmNkZWYKKyAxOiBhYmMKKyAgICAxMjNhYmNkZWZcPWNhbGxvdXRfY2FwdHVyZQorQ2FsbG91dCAwOiBsYXN0IGNhcHR1cmUgPSAxCisgMDogPHVuc2V0PgorIDE6IGFiYworLS0tPjEyM2FiY2RlZgorICAgICAgIF4gIF4gICAgICAgZAorQ2FsbG91dCAxOiBsYXN0IGNhcHR1cmUgPSAxCisgMDogPHVuc2V0PgorIDE6IGFiYworLS0tPjEyM2FiY2RlZgorICAgICAgIF4gICAgXiAgICAgZgorIDA6IGFiY2RlZgorIDE6IGFiYworICAgIDEyM2FiY2RlZkMtXD1jYWxsb3V0X25vbmUKKyAwOiBhYmNkZWYKKyAxOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyM2FiY2RlZlw9Y2FsbG91dF9mYWlsPTEKKy0tLT4xMjNhYmNkZWYKKyAgMCAgICBeICBeICAgICAgIGQKKyAgMSAgICBeICAgIF4gICAgIGYKK05vIG1hdGNoCisKKy8oP0MwKShhYmMoP0MxKSkqL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgYWJjYWJjYWJjCistLS0+YWJjYWJjYWJjCisgIDAgXiAgICAgICAgICAgICAoYWJjKD9DMSkpKgorICAxIF4gIF4gICAgICAgICAgKQorICAxIF4gICAgIF4gICAgICAgKQorICAxIF4gICAgICAgIF4gICAgKQorIDA6IGFiY2FiY2FiYworIDE6IGFiYworICAgIGFiY2FiY1w9Y2FsbG91dF9mYWlsPTE6MworLS0tPmFiY2FiYworICAwIF4gICAgICAgICAgKGFiYyg/QzEpKSoKKyAgMSBeICBeICAgICAgICkKKyAgMSBeICAgICBeICAgICkKKyAwOiBhYmNhYmMKKyAxOiBhYmMKKyAgICBhYmNhYmNhYmNcPWNhbGxvdXRfZmFpbD0xOjMKKy0tLT5hYmNhYmNhYmMKKyAgMCBeICAgICAgICAgICAgIChhYmMoP0MxKSkqCisgIDEgXiAgXiAgICAgICAgICApCisgIDEgXiAgICAgXiAgICAgICApCisgIDEgXiAgICAgICAgXiAgICApCisgMDogYWJjYWJjCisgMTogYWJjCisKKy8oXGR7M30oP0MpKSovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICAxMjNcPWNhbGxvdXRfY2FwdHVyZQorQ2FsbG91dCAwOiBsYXN0IGNhcHR1cmUgPSAwCisgMDogPHVuc2V0PgorLS0tPjEyMworICAgIF4gIF4gICAgKQorIDA6IDEyMworIDE6IDEyMworICAgIDEyMzQ1Nlw9Y2FsbG91dF9jYXB0dXJlCitDYWxsb3V0IDA6IGxhc3QgY2FwdHVyZSA9IDAKKyAwOiA8dW5zZXQ+CistLS0+MTIzNDU2CisgICAgXiAgXiAgICAgICApCitDYWxsb3V0IDA6IGxhc3QgY2FwdHVyZSA9IDEKKyAwOiA8dW5zZXQ+CisgMTogMTIzCistLS0+MTIzNDU2CisgICAgXiAgICAgXiAgICApCisgMDogMTIzNDU2CisgMTogNDU2CisgICAgMTIzNDU2Nzg5XD1jYWxsb3V0X2NhcHR1cmUKK0NhbGxvdXQgMDogbGFzdCBjYXB0dXJlID0gMAorIDA6IDx1bnNldD4KKy0tLT4xMjM0NTY3ODkKKyAgICBeICBeICAgICAgICAgICkKK0NhbGxvdXQgMDogbGFzdCBjYXB0dXJlID0gMQorIDA6IDx1bnNldD4KKyAxOiAxMjMKKy0tLT4xMjM0NTY3ODkKKyAgICBeICAgICBeICAgICAgICkKK0NhbGxvdXQgMDogbGFzdCBjYXB0dXJlID0gMQorIDA6IDx1bnNldD4KKyAxOiA0NTYKKy0tLT4xMjM0NTY3ODkKKyAgICBeICAgICAgICBeICAgICkKKyAwOiAxMjM0NTY3ODkKKyAxOiA3ODkKKworLygoeHl6KSg/QylwfCg/QzEpeHl6YWJjKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK0ZpcnN0IGNvZGUgdW5pdCA9ICd4JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisgICAgeHl6YWJjXD1jYWxsb3V0X2NhcHR1cmUKK0NhbGxvdXQgMDogbGFzdCBjYXB0dXJlID0gMgorIDA6IDx1bnNldD4KKyAxOiA8dW5zZXQ+CisgMjogeHl6CistLS0+eHl6YWJjCisgICAgXiAgXiAgICAgICBwCitDYWxsb3V0IDE6IGxhc3QgY2FwdHVyZSA9IDAKKyAwOiA8dW5zZXQ+CistLS0+eHl6YWJjCisgICAgXiAgICAgICAgICB4CisgMDogeHl6YWJjCisgMTogeHl6YWJjCisKKy8oWCkoKHh5eikoP0MpcHwoP0MxKXh5emFiYykvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAzCitGaXJzdCBjb2RlIHVuaXQgPSAnWCcKK0xhc3QgY29kZSB1bml0ID0gJ3gnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDUKKyAgICBYeHl6YWJjXD1jYWxsb3V0X2NhcHR1cmUKK0NhbGxvdXQgMDogbGFzdCBjYXB0dXJlID0gMworIDA6IDx1bnNldD4KKyAxOiBYCisgMjogPHVuc2V0PgorIDM6IHh5egorLS0tPlh4eXphYmMKKyAgICBeICAgXiAgICAgICBwCitDYWxsb3V0IDE6IGxhc3QgY2FwdHVyZSA9IDEKKyAwOiA8dW5zZXQ+CisgMTogWAorLS0tPlh4eXphYmMKKyAgICBeXiAgICAgICAgICB4CisgMDogWHh5emFiYworIDE6IFgKKyAyOiB4eXphYmMKKworLyg/PShhYmMpKSg/QylhYmNkZWYvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2YnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDYKKyAgICBhYmNkZWZcPWNhbGxvdXRfY2FwdHVyZQorQ2FsbG91dCAwOiBsYXN0IGNhcHR1cmUgPSAxCisgMDogPHVuc2V0PgorIDE6IGFiYworLS0tPmFiY2RlZgorICAgIF4gICAgICAgICAgYQorIDA6IGFiY2RlZgorIDE6IGFiYworCisvKD8hKGFiYykoP0MxKWQpKD9DMilhYmN4eXovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDYKKyAgICBhYmN4eXpcPWNhbGxvdXRfY2FwdHVyZQorQ2FsbG91dCAxOiBsYXN0IGNhcHR1cmUgPSAxCisgMDogPHVuc2V0PgorIDE6IGFiYworLS0tPmFiY3h5egorICAgIF4gIF4gICAgICAgZAorQ2FsbG91dCAyOiBsYXN0IGNhcHR1cmUgPSAwCisgMDogPHVuc2V0PgorLS0tPmFiY3h5egorICAgIF4gICAgICAgICAgYQorIDA6IGFiY3h5egorCisvKD88PShhYmMpKD9DKSl4eXovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggbG9va2JlaGluZCA9IDMKK0ZpcnN0IGNvZGUgdW5pdCA9ICd4JworTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgYWJjeHl6XD1jYWxsb3V0X2NhcHR1cmUKK0NhbGxvdXQgMDogbGFzdCBjYXB0dXJlID0gMQorIDA6IDx1bnNldD4KKyAxOiBhYmMKKy0tLT5hYmN4eXoKKyAgICAgICBeICAgICAgICkKKyAwOiB4eXoKKyAxOiBhYmMKKworL2EoYispKGMqKSg/QzEpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmJiYmJjY2NcPWNhbGxvdXRfZGF0YT0xCistLS0+YWJiYmJiY2NjCisgIDEgXiAgICAgICAgXiAgICAKK0NhbGxvdXQgZGF0YSA9IDEKK05vIG1hdGNoCisKKy9hKGIrPykoYyo/KSg/QzEpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmJiYmJjY2NcPWNhbGxvdXRfZGF0YT0xCistLS0+YWJiYmJiY2NjCisgIDEgXiBeICAgICAgICAgICAKK0NhbGxvdXQgZGF0YSA9IDEKKyAgMSBeICBeICAgICAgICAgIAorQ2FsbG91dCBkYXRhID0gMQorICAxIF4gICBeICAgICAgICAgCitDYWxsb3V0IGRhdGEgPSAxCisgIDEgXiAgICBeICAgICAgICAKK0NhbGxvdXQgZGF0YSA9IDEKKyAgMSBeICAgICBeICAgICAgIAorQ2FsbG91dCBkYXRhID0gMQorICAxIF4gICAgICBeICAgICAgCitDYWxsb3V0IGRhdGEgPSAxCisgIDEgXiAgICAgICBeICAgICAKK0NhbGxvdXQgZGF0YSA9IDEKKyAgMSBeICAgICAgICBeICAgIAorQ2FsbG91dCBkYXRhID0gMQorTm8gbWF0Y2gKKworLyg/QylhYmMvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2MnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworLyg/QyleYWJjL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvKD9DKWF8Yi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisveChhYnwoYmN8KGRlfCg/UikpKSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAzCitGaXJzdCBjb2RlIHVuaXQgPSAneCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIHhhYgorIDA6IHhhYgorIDE6IGFiCisgICAgeGJjCisgMDogeGJjCisgMTogYmMKKyAyOiBiYworICAgIHhkZQorIDA6IHhkZQorIDE6IGRlCisgMjogZGUKKyAzOiBkZQorICAgIHh4YWIKKyAwOiB4eGFiCisgMTogeGFiCisgMjogeGFiCisgMzogeGFiCisgICAgeHh4YWIKKyAwOiB4eHhhYgorIDE6IHh4YWIKKyAyOiB4eGFiCisgMzogeHhhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHlhYgorTm8gbWF0Y2gKKworL14oW14oKV18XCgoPzEpKlwpKSokL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiYworIDA6IGFiYworIDE6IGMKKyAgICBhKGIpYworIDA6IGEoYiljCisgMTogYworICAgIGEoYihjKSlkCisgMDogYShiKGMpKWQKKyAxOiBkCitcPSBFeHBlY3Qgbm8gbWF0Y2gpCisgICAgYShiKGMpZAorTm8gbWF0Y2gKKworL14+YWJjPihbXigpXXxcKCg/MSkqXCkpKjx4eXo8JC9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitMYXN0IGNvZGUgdW5pdCA9ICc8JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxMAorICAgPmFiYz4xMjM8eHl6PAorIDA6ID5hYmM+MTIzPHh5ejwKKyAxOiAzCisgICA+YWJjPjEoMikzPHh5ejwKKyAwOiA+YWJjPjEoMikzPHh5ejwKKyAxOiAzCisgICA+YWJjPigxKDIpMyk8eHl6PAorIDA6ID5hYmM+KDEoMikzKTx4eXo8CisgMTogKDEoMikzKQorCisvKGEoPzEpYikvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGEKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBiCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy8oYSg/MSkrYikvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGEKKyAgICAgICAgT25jZQorICAgICAgICBSZWN1cnNlCisgICAgICAgIEtldFJtYXgKKyAgICAgICAgYgorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvXihcZCt8XCgoPzEpKFsrKi1dKSg/MSlcKXwtKD8xKSkkL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICAgIDEyCisgMDogMTIKKyAxOiAxMgorICAgICgoKDIrMikqLTMpLTcpCisgMDogKCgoMisyKSotMyktNykKKyAxOiAoKCgyKzIpKi0zKS03KQorIDI6IC0KKyAgICAtMTIKKyAwOiAtMTIKKyAxOiAtMTIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICgoMisyKSotMyktNykKK05vIG1hdGNoCisKKy9eKHgoeXwoPzEpezJ9KXopL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIHh5egorIDA6IHh5egorIDE6IHh5egorIDI6IHkKKyAgICB4eHl6eHl6egorIDA6IHh4eXp4eXp6CisgMTogeHh5enh5enoKKyAyOiB4eXp4eXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh4eXp6CitObyBtYXRjaAorICAgIHh4eXp4eXp4eXp6CitObyBtYXRjaAorCisvKCg8ICg/OiAoPyhSKSBcZCsrICB8IFtePD5dKispIHwgKD8yKSkgKiA+KSkvSXgKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorT3B0aW9uczogZXh0ZW5kZWQKK0ZpcnN0IGNvZGUgdW5pdCA9ICc8JworTGFzdCBjb2RlIHVuaXQgPSAnPicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIDw+CisgMDogPD4KKyAxOiA8PgorIDI6IDw+CisgICAgPGFiY2Q+CisgMDogPGFiY2Q+CisgMTogPGFiY2Q+CisgMjogPGFiY2Q+CisgICAgPGFiYyA8MTIzPiBoaWo+CisgMDogPGFiYyA8MTIzPiBoaWo+CisgMTogPGFiYyA8MTIzPiBoaWo+CisgMjogPGFiYyA8MTIzPiBoaWo+CisgICAgPGFiYyA8ZGVmPiBoaWo+CisgMDogPGRlZj4KKyAxOiA8ZGVmPgorIDI6IDxkZWY+CisgICAgPGFiYzw+ZGVmPgorIDA6IDxhYmM8PmRlZj4KKyAxOiA8YWJjPD5kZWY+CisgMjogPGFiYzw+ZGVmPgorICAgIDxhYmM8PgorIDA6IDw+CisgMTogPD4KKyAyOiA8PgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgPGFiYworTm8gbWF0Y2gKKworLyg/MSkvSQorRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDM6IHJlZmVyZW5jZSB0byBub24tZXhpc3RlbnQgc3VicGF0dGVybgorCisvKCg/MikoYWJjKS9JCitGYWlsZWQ6IGVycm9yIDExNCBhdCBvZmZzZXQgMTA6IG1pc3NpbmcgY2xvc2luZyBwYXJlbnRoZXNpcworCisvXihhYmMpZGVmKD8xKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDkKKyAgICBhYmNkZWZhYmMKKyAwOiBhYmNkZWZhYmMKKyAxOiBhYmMKKworL14oYXxifGMpPSg/MSkrL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGE9YQorIDA6IGE9YQorIDE6IGEKKyAgICBhPWIKKyAwOiBhPWIKKyAxOiBhCisgICAgYT1iYworIDA6IGE9YmMKKyAxOiBhCisKKy9eKGF8YnxjKT0oKD8xKSkrL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGE9YQorIDA6IGE9YQorIDE6IGEKKyAyOiBhCisgICAgYT1iCisgMDogYT1iCisgMTogYQorIDI6IGIKKyAgICBhPWJjCisgMDogYT1iYworIDE6IGEKKyAyOiBjCisKKy9hKD9QPG5hbWUxPmJ8YylkKD9QPGxvbmdlcm5hbWUyPmUpL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIGEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGIKKyAgICAgICAgQWx0CisgICAgICAgIGMKKyAgICAgICAgS2V0CisgICAgICAgIGQKKyAgICAgICAgQ0JyYSAyCisgICAgICAgIGUKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIGxvbmdlcm5hbWUyICAgMgorICBuYW1lMSAgICAgICAgIDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnZScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorICAgIGFiZGUKKyAwOiBhYmRlCisgMTogYgorIDI6IGUKKyAgICBhY2RlCisgMDogYWNkZQorIDE6IGMKKyAyOiBlCisKKy8oPzphKD9QPGM+Yyg/UDxkPmQpKSkoP1A8YT5hKS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBCcmEKKyAgICAgICAgYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgYworICAgICAgICBDQnJhIDIKKyAgICAgICAgZAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBDQnJhIDMKKyAgICAgICAgYQorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgYSAgIDMKKyAgYyAgIDEKKyAgZCAgIDIKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvKD9QPGE+YSkuLi4oP1A9YSliYmIoP1A+YSlkL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBhCisgICAgICAgIEtldAorICAgICAgICBBbnkKKyAgICAgICAgQW55CisgICAgICAgIEFueQorICAgICAgICBcMQorICAgICAgICBiYmIKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIGEgICAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2QnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEwCisKKy9eXFcqKD86KD9QPG9uZT4oP1A8dHdvPi4pXFcqKD9QPm9uZSlcVyooP1A9dHdvKXwpfCg/UDx0aHJlZT4oP1A8Zm91cj4uKVxXKig/UD50aHJlZSlcVyooP1A9Zm91cil8XFcqLlxXKikpXFcqJC9JaQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSA0CitNYXggYmFjayByZWZlcmVuY2UgPSA0CitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIGZvdXIgICAgNAorICBvbmUgICAgIDEKKyAgdGhyZWUgICAzCisgIHR3byAgICAgMgorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworQ29tcGlsZSBvcHRpb25zOiBjYXNlbGVzcworT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZCBjYXNlbGVzcworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgMTIyMQorIDA6IDEyMjEKKyAxOiAxMjIxCisgMjogMQorICAgIFNhdGFuLCBvc2NpbGxhdGUgbXkgbWV0YWxsaWMgc29uYXRhcyEKKyAwOiBTYXRhbiwgb3NjaWxsYXRlIG15IG1ldGFsbGljIHNvbmF0YXMhCisgMTogPHVuc2V0PgorIDI6IDx1bnNldD4KKyAzOiBTYXRhbiwgb3NjaWxsYXRlIG15IG1ldGFsbGljIHNvbmF0YXMKKyA0OiBTCisgICAgQSBtYW4sIGEgcGxhbiwgYSBjYW5hbDogUGFuYW1hIQorIDA6IEEgbWFuLCBhIHBsYW4sIGEgY2FuYWw6IFBhbmFtYSEKKyAxOiA8dW5zZXQ+CisgMjogPHVuc2V0PgorIDM6IEEgbWFuLCBhIHBsYW4sIGEgY2FuYWw6IFBhbmFtYQorIDQ6IEEKKyAgICBBYmxlIHdhcyBJIGVyZSBJIHNhdyBFbGJhLgorIDA6IEFibGUgd2FzIEkgZXJlIEkgc2F3IEVsYmEuCisgMTogPHVuc2V0PgorIDI6IDx1bnNldD4KKyAzOiBBYmxlIHdhcyBJIGVyZSBJIHNhdyBFbGJhCisgNDogQQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgVGhlIHF1aWNrIGJyb3duIGZveAorTm8gbWF0Y2gKKworLygoPyhSKWF8YikpXDEoPzEpPy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICBiYgorIDA6IGJiCisgMTogYgorICBiYmFhCisgMDogYmJhCisgMTogYgorCisvKC4qKWEvSXMKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorQ29tcGlsZSBvcHRpb25zOiBkb3RhbGwKK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQgZG90YWxsCitMYXN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oLiopYVwxL0lzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK09wdGlvbnM6IGRvdGFsbAorTGFzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKC4qKWEoYilcMi9JcworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitNYXggYmFjayByZWZlcmVuY2UgPSAyCitDb21waWxlIG9wdGlvbnM6IGRvdGFsbAorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZCBkb3RhbGwKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworLygoLiopYXwoLiopYil6L0lzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK0NvbXBpbGUgb3B0aW9uczogZG90YWxsCitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkIGRvdGFsbAorTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKCguKilhfCguKiliKXpcMS9JcworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAzCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitPcHRpb25zOiBkb3RhbGwKK0xhc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworLygoLiopYXwoLiopYil6XDIvSXMKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworTWF4IGJhY2sgcmVmZXJlbmNlID0gMgorT3B0aW9uczogZG90YWxsCitMYXN0IGNvZGUgdW5pdCA9ICd6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy8oKC4qKWF8KC4qKWIpelwzL0lzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK01heCBiYWNrIHJlZmVyZW5jZSA9IDMKK09wdGlvbnM6IGRvdGFsbAorTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKCguKilhfF4oLiopYil6XDMvSXMKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworTWF4IGJhY2sgcmVmZXJlbmNlID0gMworQ29tcGlsZSBvcHRpb25zOiBkb3RhbGwKK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQgZG90YWxsCitMYXN0IGNvZGUgdW5pdCA9ICd6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy8oLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopYS9JcworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAzMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworQ29tcGlsZSBvcHRpb25zOiBkb3RhbGwKK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQgZG90YWxsCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworLyguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKilhXDMxL0lzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMxCitNYXggYmFjayByZWZlcmVuY2UgPSAzMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworT3B0aW9uczogZG90YWxsCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworLyguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKXwoLiopfCguKil8KC4qKWFcMzIvSXMKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMzIKK01heCBiYWNrIHJlZmVyZW5jZSA9IDMyCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitPcHRpb25zOiBkb3RhbGwKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKGEpKGJjKS9JQixub19hdXRvX2NhcHR1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQnJhCisgICAgICAgIGEKKyAgICAgICAgS2V0CisgICAgICAgIEJyYQorICAgICAgICBiYworICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IG5vX2F1dG9fY2FwdHVyZQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgIGFiYworIDA6IGFiYworCisvKD9QPG9uZT5hKShiYykvSUIsbm9fYXV0b19jYXB0dXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBhCisgICAgICAgIEtldAorICAgICAgICBCcmEKKyAgICAgICAgYmMKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIG9uZSAgIDEKK09wdGlvbnM6IG5vX2F1dG9fY2FwdHVyZQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgIGFiYworIDA6IGFiYworIDE6IGEKKworLyhhKSg/UDxuYW1lZD5iYykvSUIsbm9fYXV0b19jYXB0dXJlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEJyYQorICAgICAgICBhCisgICAgICAgIEtldAorICAgICAgICBDQnJhIDEKKyAgICAgICAgYmMKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIG5hbWVkICAgMQorT3B0aW9uczogbm9fYXV0b19jYXB0dXJlCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2MnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworLyhhYWEoP0MxKWJiYnxhYikvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgIGFhYWJiYgorLS0tPmFhYWJiYgorICAxIF4gIF4gICAgICAgYgorIDA6IGFhYWJiYgorIDE6IGFhYWJiYgorICAgYWFhYmJiXD1jYWxsb3V0X2RhdGE9MAorLS0tPmFhYWJiYgorICAxIF4gIF4gICAgICAgYgorIDA6IGFhYWJiYgorIDE6IGFhYWJiYgorICAgYWFhYmJiXD1jYWxsb3V0X2RhdGE9MQorLS0tPmFhYWJiYgorICAxIF4gIF4gICAgICAgYgorQ2FsbG91dCBkYXRhID0gMQorIDA6IGFiCisgMTogYWIKK1w9IEV4cGVjdCBubyBtYXRjaCAgICAKKyAgIGFhYWJiYlw9Y2FsbG91dF9kYXRhPS0xCistLS0+YWFhYmJiCisgIDEgXiAgXiAgICAgICBiCitDYWxsb3V0IGRhdGEgPSAtMQorTm8gbWF0Y2gKKworL2FiKD9QPG9uZT5jZCllZig/UDx0d28+Z2gpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBvbmUgICAxCisgIHR3byAgIDIKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnaCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gOAorICAgIGFiY2RlZmdoCisgMDogYWJjZGVmZ2gKKyAxOiBjZAorIDI6IGdoCisgICAgYWJjZGVmZ2hcPWNvcHk9MSxnZXQ9dHdvCisgMDogYWJjZGVmZ2gKKyAxOiBjZAorIDI6IGdoCisgMUMgY2QgKDIpCisgIEcgZ2ggKDIpIHR3byAoZ3JvdXAgMikKKyAgICBhYmNkZWZnaFw9Y29weT1vbmUsY29weT10d28KKyAwOiBhYmNkZWZnaAorIDE6IGNkCisgMjogZ2gKKyAgQyBjZCAoMikgb25lIChncm91cCAxKQorICBDIGdoICgyKSB0d28gKGdyb3VwIDIpCisgICAgYWJjZGVmZ2hcPWNvcHk9dGhyZWUKKyAwOiBhYmNkZWZnaAorIDE6IGNkCisgMjogZ2gKK051bWJlciBub3QgZm91bmQgZm9yIGdyb3VwICd0aHJlZScKK0NvcHkgc3Vic3RyaW5nICd0aHJlZScgZmFpbGVkICgtNDkpOiB1bmtub3duIHN1YnN0cmluZworCisvKD9QPFRlcz4pKD9QPFRlc3Q+KS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgS2V0CisgICAgICAgIENCcmEgMgorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgVGVzICAgIDEKKyAgVGVzdCAgIDIKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKD9QPFRlc3Q+KSg/UDxUZXM+KS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgS2V0CisgICAgICAgIENCcmEgMgorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgVGVzICAgIDIKKyAgVGVzdCAgIDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKD9QPFo+enopKD9QPEE+YWEpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBBICAgMgorICBaICAgMQorRmlyc3QgY29kZSB1bml0ID0gJ3onCitMYXN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisgICAgenphYVw9Y29weT1aCisgMDogenphYQorIDE6IHp6CisgMjogYWEKKyAgQyB6eiAoMikgWiAoZ3JvdXAgMSkKKyAgICB6emFhXD1jb3B5PUEKKyAwOiB6emFhCisgMTogenoKKyAyOiBhYQorICBDIGFhICgyKSBBIChncm91cCAyKQorCisvKD9QPHg+ZWtzKSg/UDx4PmVjY3MpL0kKK0ZhaWxlZDogZXJyb3IgMTQzIGF0IG9mZnNldCAxNTogdHdvIG5hbWVkIHN1YnBhdHRlcm5zIGhhdmUgdGhlIHNhbWUgbmFtZSAoUENSRTJfRFVQTkFNRVMgbm90IHNldCkKKworLyg/UDxhYmM+YWJjKD9QPGRlZj5kZWYpKD9QPGFiYz54eXopKS9JCitGYWlsZWQ6IGVycm9yIDE0MyBhdCBvZmZzZXQgMzA6IHR3byBuYW1lZCBzdWJwYXR0ZXJucyBoYXZlIHRoZSBzYW1lIG5hbWUgKFBDUkUyX0RVUE5BTUVTIG5vdCBzZXQpCisKKyJcWygoP1A8ZWxlbT5cZCspKCwoP1A+ZWxlbSkpKilcXSJJCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgZWxlbSAgIDIKK0ZpcnN0IGNvZGUgdW5pdCA9ICdbJworTGFzdCBjb2RlIHVuaXQgPSAnXScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIFsxMCwyMCwzMCw1LDUsNCw0LDIsNDMsMjMsNDIzNF0KKyAwOiBbMTAsMjAsMzAsNSw1LDQsNCwyLDQzLDIzLDQyMzRdCisgMTogMTAsMjAsMzAsNSw1LDQsNCwyLDQzLDIzLDQyMzQKKyAyOiAxMAorIDM6ICw0MjM0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBbXQorTm8gbWF0Y2gKKworIlxbKCg/UDxlbGVtPlxkKykoLCg/UD5lbGVtKSkqKT9cXSJJCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgZWxlbSAgIDIKK0ZpcnN0IGNvZGUgdW5pdCA9ICdbJworTGFzdCBjb2RlIHVuaXQgPSAnXScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIFsxMCwyMCwzMCw1LDUsNCw0LDIsNDMsMjMsNDIzNF0KKyAwOiBbMTAsMjAsMzAsNSw1LDQsNCwyLDQzLDIzLDQyMzRdCisgMTogMTAsMjAsMzAsNSw1LDQsNCwyLDQzLDIzLDQyMzQKKyAyOiAxMAorIDM6ICw0MjM0CisgICAgW10KKyAwOiBbXQorCisvKGEoYig/MiljKSk/L0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEJyYXplcm8KKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGEKKyAgICAgICAgQ0JyYSAyCisgICAgICAgIGIKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBjCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKGEoYig/MiljKSkqL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEJyYXplcm8KKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGEKKyAgICAgICAgQ0JyYSAyCisgICAgICAgIGIKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBjCisgICAgICAgIEtldAorICAgICAgICBLZXRSbWF4CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworLyhhKGIoPzIpYykpezAsMn0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQnJhemVybworICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGEKKyAgICAgICAgQ0JyYSAyCisgICAgICAgIGIKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBjCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgQnJhemVybworICAgICAgICBDQnJhIDEKKyAgICAgICAgYQorICAgICAgICBDQnJhIDIKKyAgICAgICAgYgorICAgICAgICBSZWN1cnNlCisgICAgICAgIGMKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvW2FiXXsxfSsvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYWJdCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCkoPzEpezF9L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIEtldAorICAgICAgICBSZWN1cnNlCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCkoPzEpL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIEtldAorICAgICAgICBSZWN1cnNlCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCh3XC98LXx3aXRoKSooZnJlZXxpbW1lZGlhdGUpKi4qP3NoaXBwaW5nXHMqWyEuLV0qKS9JaQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAzCitPcHRpb25zOiBjYXNlbGVzcworTGFzdCBjb2RlIHVuaXQgPSAnZycgKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA4CisgICAgIEJhYnkgQmpvcm4gQWN0aXZlIENhcnJpZXIgLSBXaXRoIGZyZWUgU0hJUFBJTkchIQorIDA6IEJhYnkgQmpvcm4gQWN0aXZlIENhcnJpZXIgLSBXaXRoIGZyZWUgU0hJUFBJTkchIQorIDE6IEJhYnkgQmpvcm4gQWN0aXZlIENhcnJpZXIgLSBXaXRoIGZyZWUgU0hJUFBJTkchIQorCisvKCh3XC98LXx3aXRoKSooZnJlZXxpbW1lZGlhdGUpKi4qP3NoaXBwaW5nXHMqWyEuLV0qKS9JaQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAzCitPcHRpb25zOiBjYXNlbGVzcworTGFzdCBjb2RlIHVuaXQgPSAnZycgKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA4CisgICAgIEJhYnkgQmpvcm4gQWN0aXZlIENhcnJpZXIgLSBXaXRoIGZyZWUgU0hJUFBJTkchIQorIDA6IEJhYnkgQmpvcm4gQWN0aXZlIENhcnJpZXIgLSBXaXRoIGZyZWUgU0hJUFBJTkchIQorIDE6IEJhYnkgQmpvcm4gQWN0aXZlIENhcnJpZXIgLSBXaXRoIGZyZWUgU0hJUFBJTkchIQorCisvYSouKmIvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYSoKKyAgICAgICAgQW55KgorICAgICAgICBiCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oYXxiKSouP2MvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQnJhemVybworICAgICAgICBDQnJhIDEKKyAgICAgICAgYQorICAgICAgICBBbHQKKyAgICAgICAgYgorICAgICAgICBLZXRSbWF4CisgICAgICAgIEFueT8KKyAgICAgICAgYworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvYWJjKD9DMjU1KWRlKD9DKWYvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYWJjCisgICAgICAgIENhbGxvdXQgMjU1IDEwIDEKKyAgICAgICAgZGUKKyAgICAgICAgQ2FsbG91dCAwIDE2IDEKKyAgICAgICAgZgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdmJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA2CisKKy9hYmNkZS9JQixhdXRvX2NhbGxvdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ2FsbG91dCAyNTUgMCAxCisgICAgICAgIGEKKyAgICAgICAgQ2FsbG91dCAyNTUgMSAxCisgICAgICAgIGIKKyAgICAgICAgQ2FsbG91dCAyNTUgMiAxCisgICAgICAgIGMKKyAgICAgICAgQ2FsbG91dCAyNTUgMyAxCisgICAgICAgIGQKKyAgICAgICAgQ2FsbG91dCAyNTUgNCAxCisgICAgICAgIGUKKyAgICAgICAgQ2FsbG91dCAyNTUgNSAwCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBhdXRvX2NhbGxvdXQKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnZScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNQorICBhYmNkZQorLS0tPmFiY2RlCisgKzAgXiAgICAgICAgIGEKKyArMSBeXiAgICAgICAgYgorICsyIF4gXiAgICAgICBjCisgKzMgXiAgXiAgICAgIGQKKyArNCBeICAgXiAgICAgZQorICs1IF4gICAgXiAgICAKKyAwOiBhYmNkZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgIGFiY2RmZQorLS0tPmFiY2RmZQorICswIF4gICAgICAgICAgYQorICsxIF5eICAgICAgICAgYgorICsyIF4gXiAgICAgICAgYworICszIF4gIF4gICAgICAgZAorICs0IF4gICBeICAgICAgZQorTm8gbWF0Y2gKKworL2EqYi9JQixhdXRvX2NhbGxvdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ2FsbG91dCAyNTUgMCAyCisgICAgICAgIGEqKworICAgICAgICBDYWxsb3V0IDI1NSAyIDEKKyAgICAgICAgYgorICAgICAgICBDYWxsb3V0IDI1NSAzIDAKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGF1dG9fY2FsbG91dAorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIAorTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorICBhYgorLS0tPmFiCisgKzAgXiAgICAgIGEqCisgKzIgXl4gICAgIGIKKyArMyBeIF4gICAgCisgMDogYWIKKyAgYWFhYWIKKy0tLT5hYWFhYgorICswIF4gICAgICAgICBhKgorICsyIF4gICBeICAgICBiCisgKzMgXiAgICBeICAgIAorIDA6IGFhYWFiCisgIGFhYWFjYgorLS0tPmFhYWFjYgorICswIF4gICAgICAgICAgYSoKKyArMiBeICAgXiAgICAgIGIKKyArMCAgXiAgICAgICAgIGEqCisgKzIgIF4gIF4gICAgICBiCisgKzAgICBeICAgICAgICBhKgorICsyICAgXiBeICAgICAgYgorICswICAgIF4gICAgICAgYSoKKyArMiAgICBeXiAgICAgIGIKKyArMCAgICAgIF4gICAgIGEqCisgKzIgICAgICBeICAgICBiCisgKzMgICAgICBeXiAgICAKKyAwOiBiCisKKy9hKmIvSUIsYXV0b19jYWxsb3V0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENhbGxvdXQgMjU1IDAgMgorICAgICAgICBhKisKKyAgICAgICAgQ2FsbG91dCAyNTUgMiAxCisgICAgICAgIGIKKyAgICAgICAgQ2FsbG91dCAyNTUgMyAwCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBhdXRvX2NhbGxvdXQKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiAKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgYWIKKy0tLT5hYgorICswIF4gICAgICBhKgorICsyIF5eICAgICBiCisgKzMgXiBeICAgIAorIDA6IGFiCisgIGFhYWFiCistLS0+YWFhYWIKKyArMCBeICAgICAgICAgYSoKKyArMiBeICAgXiAgICAgYgorICszIF4gICAgXiAgICAKKyAwOiBhYWFhYgorICBhYWFhY2IKKy0tLT5hYWFhY2IKKyArMCBeICAgICAgICAgIGEqCisgKzIgXiAgIF4gICAgICBiCisgKzAgIF4gICAgICAgICBhKgorICsyICBeICBeICAgICAgYgorICswICAgXiAgICAgICAgYSoKKyArMiAgIF4gXiAgICAgIGIKKyArMCAgICBeICAgICAgIGEqCisgKzIgICAgXl4gICAgICBiCisgKzAgICAgICBeICAgICBhKgorICsyICAgICAgXiAgICAgYgorICszICAgICAgXl4gICAgCisgMDogYgorCisvYStiL0lCLGF1dG9fY2FsbG91dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDYWxsb3V0IDI1NSAwIDIKKyAgICAgICAgYSsrCisgICAgICAgIENhbGxvdXQgMjU1IDIgMQorICAgICAgICBiCisgICAgICAgIENhbGxvdXQgMjU1IDMgMAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogYXV0b19jYWxsb3V0CitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgYWIKKy0tLT5hYgorICswIF4gICAgICBhKworICsyIF5eICAgICBiCisgKzMgXiBeICAgIAorIDA6IGFiCisgIGFhYWFiCistLS0+YWFhYWIKKyArMCBeICAgICAgICAgYSsKKyArMiBeICAgXiAgICAgYgorICszIF4gICAgXiAgICAKKyAwOiBhYWFhYgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICBhYWFhY2IKKy0tLT5hYWFhY2IKKyArMCBeICAgICAgICAgIGErCisgKzIgXiAgIF4gICAgICBiCisgKzAgIF4gICAgICAgICBhKworICsyICBeICBeICAgICAgYgorICswICAgXiAgICAgICAgYSsKKyArMiAgIF4gXiAgICAgIGIKKyArMCAgICBeICAgICAgIGErCisgKzIgICAgXl4gICAgICBiCitObyBtYXRjaAorCisvKGFiY3xkZWYpeC9JQixhdXRvX2NhbGxvdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ2FsbG91dCAyNTUgMCA5CisgICAgICAgIENCcmEgMQorICAgICAgICBDYWxsb3V0IDI1NSAxIDEKKyAgICAgICAgYQorICAgICAgICBDYWxsb3V0IDI1NSAyIDEKKyAgICAgICAgYgorICAgICAgICBDYWxsb3V0IDI1NSAzIDEKKyAgICAgICAgYworICAgICAgICBDYWxsb3V0IDI1NSA0IDAKKyAgICAgICAgQWx0CisgICAgICAgIENhbGxvdXQgMjU1IDUgMQorICAgICAgICBkCisgICAgICAgIENhbGxvdXQgMjU1IDYgMQorICAgICAgICBlCisgICAgICAgIENhbGxvdXQgMjU1IDcgMQorICAgICAgICBmCisgICAgICAgIENhbGxvdXQgMjU1IDggMAorICAgICAgICBLZXQKKyAgICAgICAgQ2FsbG91dCAyNTUgOSAxCisgICAgICAgIHgKKyAgICAgICAgQ2FsbG91dCAyNTUgMTAgMAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorT3B0aW9uczogYXV0b19jYWxsb3V0CitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGQgCitMYXN0IGNvZGUgdW5pdCA9ICd4JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisgIGFiY3gKKy0tLT5hYmN4CisgKzAgXiAgICAgICAgKGFiY3xkZWYpCisgKzEgXiAgICAgICAgYQorICsyIF5eICAgICAgIGIKKyArMyBeIF4gICAgICBjCisgKzQgXiAgXiAgICAgfAorICs5IF4gIF4gICAgIHgKKysxMCBeICAgXiAgICAKKyAwOiBhYmN4CisgMTogYWJjCisgIGRlZngKKy0tLT5kZWZ4CisgKzAgXiAgICAgICAgKGFiY3xkZWYpCisgKzEgXiAgICAgICAgYQorICs1IF4gICAgICAgIGQKKyArNiBeXiAgICAgICBlCisgKzcgXiBeICAgICAgZgorICs4IF4gIF4gICAgICkKKyArOSBeICBeICAgICB4CisrMTAgXiAgIF4gICAgCisgMDogZGVmeAorIDE6IGRlZgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICBhYmNkZWZ6eAorLS0tPmFiY2RlZnp4CisgKzAgXiAgICAgICAgICAgIChhYmN8ZGVmKQorICsxIF4gICAgICAgICAgICBhCisgKzIgXl4gICAgICAgICAgIGIKKyArMyBeIF4gICAgICAgICAgYworICs0IF4gIF4gICAgICAgICB8CisgKzkgXiAgXiAgICAgICAgIHgKKyArNSBeICAgICAgICAgICAgZAorICswICAgIF4gICAgICAgICAoYWJjfGRlZikKKyArMSAgICBeICAgICAgICAgYQorICs1ICAgIF4gICAgICAgICBkCisgKzYgICAgXl4gICAgICAgIGUKKyArNyAgICBeIF4gICAgICAgZgorICs4ICAgIF4gIF4gICAgICApCisgKzkgICAgXiAgXiAgICAgIHgKK05vIG1hdGNoCisKKy8oYWJjfGRlZil4L0lCLGF1dG9fY2FsbG91dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDYWxsb3V0IDI1NSAwIDkKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIENhbGxvdXQgMjU1IDEgMQorICAgICAgICBhCisgICAgICAgIENhbGxvdXQgMjU1IDIgMQorICAgICAgICBiCisgICAgICAgIENhbGxvdXQgMjU1IDMgMQorICAgICAgICBjCisgICAgICAgIENhbGxvdXQgMjU1IDQgMAorICAgICAgICBBbHQKKyAgICAgICAgQ2FsbG91dCAyNTUgNSAxCisgICAgICAgIGQKKyAgICAgICAgQ2FsbG91dCAyNTUgNiAxCisgICAgICAgIGUKKyAgICAgICAgQ2FsbG91dCAyNTUgNyAxCisgICAgICAgIGYKKyAgICAgICAgQ2FsbG91dCAyNTUgOCAwCisgICAgICAgIEtldAorICAgICAgICBDYWxsb3V0IDI1NSA5IDEKKyAgICAgICAgeAorICAgICAgICBDYWxsb3V0IDI1NSAxMCAwCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiBhdXRvX2NhbGxvdXQKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgZCAKK0xhc3QgY29kZSB1bml0ID0gJ3gnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKyAgYWJjeAorLS0tPmFiY3gKKyArMCBeICAgICAgICAoYWJjfGRlZikKKyArMSBeICAgICAgICBhCisgKzIgXl4gICAgICAgYgorICszIF4gXiAgICAgIGMKKyArNCBeICBeICAgICB8CisgKzkgXiAgXiAgICAgeAorKzEwIF4gICBeICAgIAorIDA6IGFiY3gKKyAxOiBhYmMKKyAgZGVmeAorLS0tPmRlZngKKyArMCBeICAgICAgICAoYWJjfGRlZikKKyArMSBeICAgICAgICBhCisgKzUgXiAgICAgICAgZAorICs2IF5eICAgICAgIGUKKyArNyBeIF4gICAgICBmCisgKzggXiAgXiAgICAgKQorICs5IF4gIF4gICAgIHgKKysxMCBeICAgXiAgICAKKyAwOiBkZWZ4CisgMTogZGVmCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgIGFiY2RlZnp4CistLS0+YWJjZGVmengKKyArMCBeICAgICAgICAgICAgKGFiY3xkZWYpCisgKzEgXiAgICAgICAgICAgIGEKKyArMiBeXiAgICAgICAgICAgYgorICszIF4gXiAgICAgICAgICBjCisgKzQgXiAgXiAgICAgICAgIHwKKyArOSBeICBeICAgICAgICAgeAorICs1IF4gICAgICAgICAgICBkCisgKzAgICAgXiAgICAgICAgIChhYmN8ZGVmKQorICsxICAgIF4gICAgICAgICBhCisgKzUgICAgXiAgICAgICAgIGQKKyArNiAgICBeXiAgICAgICAgZQorICs3ICAgIF4gXiAgICAgICBmCisgKzggICAgXiAgXiAgICAgICkKKyArOSAgICBeICBeICAgICAgeAorTm8gbWF0Y2gKKworLyhhYnxjZCl7Myw0fS9JLGF1dG9fY2FsbG91dAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiBhdXRvX2NhbGxvdXQKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYyAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNgorICBhYmFiYWIKKy0tLT5hYmFiYWIKKyArMCBeICAgICAgICAgIChhYnxjZCl7Myw0fQorICsxIF4gICAgICAgICAgYQorICsyIF5eICAgICAgICAgYgorICszIF4gXiAgICAgICAgfAorICsxIF4gXiAgICAgICAgYQorICsyIF4gIF4gICAgICAgYgorICszIF4gICBeICAgICAgfAorICsxIF4gICBeICAgICAgYQorICsyIF4gICAgXiAgICAgYgorICszIF4gICAgIF4gICAgfAorICsxIF4gICAgIF4gICAgYQorICs0IF4gICAgIF4gICAgYworKzEyIF4gICAgIF4gICAgCisgMDogYWJhYmFiCisgMTogYWIKKyAgYWJjZGFiY2QKKy0tLT5hYmNkYWJjZAorICswIF4gICAgICAgICAgICAoYWJ8Y2QpezMsNH0KKyArMSBeICAgICAgICAgICAgYQorICsyIF5eICAgICAgICAgICBiCisgKzMgXiBeICAgICAgICAgIHwKKyArMSBeIF4gICAgICAgICAgYQorICs0IF4gXiAgICAgICAgICBjCisgKzUgXiAgXiAgICAgICAgIGQKKyArNiBeICAgXiAgICAgICAgKQorICsxIF4gICBeICAgICAgICBhCisgKzIgXiAgICBeICAgICAgIGIKKyArMyBeICAgICBeICAgICAgfAorICsxIF4gICAgIF4gICAgICBhCisgKzQgXiAgICAgXiAgICAgIGMKKyArNSBeICAgICAgXiAgICAgZAorICs2IF4gICAgICAgXiAgICApCisrMTIgXiAgICAgICBeICAgIAorIDA6IGFiY2RhYmNkCisgMTogY2QKKyAgYWJjZGNkY2RjZGNkCistLS0+YWJjZGNkY2RjZGNkCisgKzAgXiAgICAgICAgICAgICAgICAoYWJ8Y2QpezMsNH0KKyArMSBeICAgICAgICAgICAgICAgIGEKKyArMiBeXiAgICAgICAgICAgICAgIGIKKyArMyBeIF4gICAgICAgICAgICAgIHwKKyArMSBeIF4gICAgICAgICAgICAgIGEKKyArNCBeIF4gICAgICAgICAgICAgIGMKKyArNSBeICBeICAgICAgICAgICAgIGQKKyArNiBeICAgXiAgICAgICAgICAgICkKKyArMSBeICAgXiAgICAgICAgICAgIGEKKyArNCBeICAgXiAgICAgICAgICAgIGMKKyArNSBeICAgIF4gICAgICAgICAgIGQKKyArNiBeICAgICBeICAgICAgICAgICkKKyArMSBeICAgICBeICAgICAgICAgIGEKKyArNCBeICAgICBeICAgICAgICAgIGMKKyArNSBeICAgICAgXiAgICAgICAgIGQKKyArNiBeICAgICAgIF4gICAgICAgICkKKysxMiBeICAgICAgIF4gICAgICAgIAorIDA6IGFiY2RjZGNkCisgMTogY2QKKworLyhbYWJdeyw0fWN8eHkpL0lCLGF1dG9fY2FsbG91dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDYWxsb3V0IDI1NSAwIDE0CisgICAgICAgIENCcmEgMQorICAgICAgICBDYWxsb3V0IDI1NSAxIDQKKyAgICAgICAgW2FiXQorICAgICAgICBDYWxsb3V0IDI1NSA1IDEKKyAgICAgICAgeworICAgICAgICBDYWxsb3V0IDI1NSA2IDEKKyAgICAgICAgLAorICAgICAgICBDYWxsb3V0IDI1NSA3IDEKKyAgICAgICAgNAorICAgICAgICBDYWxsb3V0IDI1NSA4IDEKKyAgICAgICAgfQorICAgICAgICBDYWxsb3V0IDI1NSA5IDEKKyAgICAgICAgYworICAgICAgICBDYWxsb3V0IDI1NSAxMCAwCisgICAgICAgIEFsdAorICAgICAgICBDYWxsb3V0IDI1NSAxMSAxCisgICAgICAgIHgKKyAgICAgICAgQ2FsbG91dCAyNTUgMTIgMQorICAgICAgICB5CisgICAgICAgIENhbGxvdXQgMjU1IDEzIDAKKyAgICAgICAgS2V0CisgICAgICAgIENhbGxvdXQgMjU1IDE0IDAKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK09wdGlvbnM6IGF1dG9fY2FsbG91dAorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIHggCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBOb3RlOiB0aGF0IHsgZG9lcyBOT1QgaW50cm9kdWNlIGEgcXVhbnRpZmllcgorLS0tPk5vdGU6IHRoYXQgeyBkb2VzIE5PVCBpbnRyb2R1Y2UgYSBxdWFudGlmaWVyCisgKzAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbYWJdeyw0fWN8eHkpCisgKzEgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthYl0KKyArNSAgICAgICAgIF5eICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeworKzExICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4CisgKzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgIChbYWJdeyw0fWN8eHkpCisgKzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgIFthYl0KKyArNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eICAgICAgICAgICAgICAgeworKzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgICB4CisgKzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgIChbYWJdeyw0fWN8eHkpCisgKzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgIFthYl0KKyArNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXiAgICAgICAgICAgeworKzExICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICB4CitObyBtYXRjaAorCisvKFthYl17LDR9Y3x4eSkvSUIsYXV0b19jYWxsb3V0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENhbGxvdXQgMjU1IDAgMTQKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIENhbGxvdXQgMjU1IDEgNAorICAgICAgICBbYWJdCisgICAgICAgIENhbGxvdXQgMjU1IDUgMQorICAgICAgICB7CisgICAgICAgIENhbGxvdXQgMjU1IDYgMQorICAgICAgICAsCisgICAgICAgIENhbGxvdXQgMjU1IDcgMQorICAgICAgICA0CisgICAgICAgIENhbGxvdXQgMjU1IDggMQorICAgICAgICB9CisgICAgICAgIENhbGxvdXQgMjU1IDkgMQorICAgICAgICBjCisgICAgICAgIENhbGxvdXQgMjU1IDEwIDAKKyAgICAgICAgQWx0CisgICAgICAgIENhbGxvdXQgMjU1IDExIDEKKyAgICAgICAgeAorICAgICAgICBDYWxsb3V0IDI1NSAxMiAxCisgICAgICAgIHkKKyAgICAgICAgQ2FsbG91dCAyNTUgMTMgMAorICAgICAgICBLZXQKKyAgICAgICAgQ2FsbG91dCAyNTUgMTQgMAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorT3B0aW9uczogYXV0b19jYWxsb3V0CitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgeCAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIE5vdGU6IHRoYXQgeyBkb2VzIE5PVCBpbnRyb2R1Y2UgYSBxdWFudGlmaWVyCistLS0+Tm90ZTogdGhhdCB7IGRvZXMgTk9UIGludHJvZHVjZSBhIHF1YW50aWZpZXIKKyArMCAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFthYl17LDR9Y3x4eSkKKyArMSAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FiXQorICs1ICAgICAgICAgXl4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisrMTEgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgKKyArMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgKFthYl17LDR9Y3x4eSkKKyArMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgW2FiXQorICs1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl4gICAgICAgICAgICAgICB7CisrMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgIHgKKyArMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgKFthYl17LDR9Y3x4eSkKKyArMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgW2FiXQorICs1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eICAgICAgICAgICB7CisrMTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgIHgKK05vIG1hdGNoCisKKy8oW2FiXXsxLDR9Y3x4eSl7NCw1fT8xMjMvSUIsYXV0b19jYWxsb3V0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENhbGxvdXQgMjU1IDAgMjEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIENhbGxvdXQgMjU1IDEgOQorICAgICAgICBbYWJdezEsNH0rCisgICAgICAgIENhbGxvdXQgMjU1IDEwIDEKKyAgICAgICAgYworICAgICAgICBDYWxsb3V0IDI1NSAxMSAwCisgICAgICAgIEFsdAorICAgICAgICBDYWxsb3V0IDI1NSAxMiAxCisgICAgICAgIHgKKyAgICAgICAgQ2FsbG91dCAyNTUgMTMgMQorICAgICAgICB5CisgICAgICAgIENhbGxvdXQgMjU1IDE0IDAKKyAgICAgICAgS2V0CisgICAgICAgIENCcmEgMQorICAgICAgICBDYWxsb3V0IDI1NSAxIDkKKyAgICAgICAgW2FiXXsxLDR9KworICAgICAgICBDYWxsb3V0IDI1NSAxMCAxCisgICAgICAgIGMKKyAgICAgICAgQ2FsbG91dCAyNTUgMTEgMAorICAgICAgICBBbHQKKyAgICAgICAgQ2FsbG91dCAyNTUgMTIgMQorICAgICAgICB4CisgICAgICAgIENhbGxvdXQgMjU1IDEzIDEKKyAgICAgICAgeQorICAgICAgICBDYWxsb3V0IDI1NSAxNCAwCisgICAgICAgIEtldAorICAgICAgICBDQnJhIDEKKyAgICAgICAgQ2FsbG91dCAyNTUgMSA5CisgICAgICAgIFthYl17MSw0fSsKKyAgICAgICAgQ2FsbG91dCAyNTUgMTAgMQorICAgICAgICBjCisgICAgICAgIENhbGxvdXQgMjU1IDExIDAKKyAgICAgICAgQWx0CisgICAgICAgIENhbGxvdXQgMjU1IDEyIDEKKyAgICAgICAgeAorICAgICAgICBDYWxsb3V0IDI1NSAxMyAxCisgICAgICAgIHkKKyAgICAgICAgQ2FsbG91dCAyNTUgMTQgMAorICAgICAgICBLZXQKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIENhbGxvdXQgMjU1IDEgOQorICAgICAgICBbYWJdezEsNH0rCisgICAgICAgIENhbGxvdXQgMjU1IDEwIDEKKyAgICAgICAgYworICAgICAgICBDYWxsb3V0IDI1NSAxMSAwCisgICAgICAgIEFsdAorICAgICAgICBDYWxsb3V0IDI1NSAxMiAxCisgICAgICAgIHgKKyAgICAgICAgQ2FsbG91dCAyNTUgMTMgMQorICAgICAgICB5CisgICAgICAgIENhbGxvdXQgMjU1IDE0IDAKKyAgICAgICAgS2V0CisgICAgICAgIEJyYW1pbnplcm8KKyAgICAgICAgQ0JyYSAxCisgICAgICAgIENhbGxvdXQgMjU1IDEgOQorICAgICAgICBbYWJdezEsNH0rCisgICAgICAgIENhbGxvdXQgMjU1IDEwIDEKKyAgICAgICAgYworICAgICAgICBDYWxsb3V0IDI1NSAxMSAwCisgICAgICAgIEFsdAorICAgICAgICBDYWxsb3V0IDI1NSAxMiAxCisgICAgICAgIHgKKyAgICAgICAgQ2FsbG91dCAyNTUgMTMgMQorICAgICAgICB5CisgICAgICAgIENhbGxvdXQgMjU1IDE0IDAKKyAgICAgICAgS2V0CisgICAgICAgIENhbGxvdXQgMjU1IDIxIDEKKyAgICAgICAgMQorICAgICAgICBDYWxsb3V0IDI1NSAyMiAxCisgICAgICAgIDIKKyAgICAgICAgQ2FsbG91dCAyNTUgMjMgMQorICAgICAgICAzCisgICAgICAgIENhbGxvdXQgMjU1IDI0IDAKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK09wdGlvbnM6IGF1dG9fY2FsbG91dAorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIHggCitMYXN0IGNvZGUgdW5pdCA9ICczJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxMQorICAgIGFhY2FhY2FhY2FhY2FhYzEyMworLS0tPmFhY2FhY2FhY2FhY2FhYzEyMworICswIF4gICAgICAgICAgICAgICAgICAgICAgKFthYl17MSw0fWN8eHkpezQsNX0/CisgKzEgXiAgICAgICAgICAgICAgICAgICAgICBbYWJdezEsNH0KKysxMCBeIF4gICAgICAgICAgICAgICAgICAgIGMKKysxMSBeICBeICAgICAgICAgICAgICAgICAgIHwKKyArMSBeICBeICAgICAgICAgICAgICAgICAgIFthYl17MSw0fQorKzEwIF4gICAgXiAgICAgICAgICAgICAgICAgYworKzExIF4gICAgIF4gICAgICAgICAgICAgICAgfAorICsxIF4gICAgIF4gICAgICAgICAgICAgICAgW2FiXXsxLDR9CisrMTAgXiAgICAgICBeICAgICAgICAgICAgICBjCisrMTEgXiAgICAgICAgXiAgICAgICAgICAgICB8CisgKzEgXiAgICAgICAgXiAgICAgICAgICAgICBbYWJdezEsNH0KKysxMCBeICAgICAgICAgIF4gICAgICAgICAgIGMKKysxMSBeICAgICAgICAgICBeICAgICAgICAgIHwKKysyMSBeICAgICAgICAgICBeICAgICAgICAgIDEKKyArMSBeICAgICAgICAgICBeICAgICAgICAgIFthYl17MSw0fQorKzEwIF4gICAgICAgICAgICAgXiAgICAgICAgYworKzExIF4gICAgICAgICAgICAgIF4gICAgICAgfAorKzIxIF4gICAgICAgICAgICAgIF4gICAgICAgMQorKzIyIF4gICAgICAgICAgICAgICBeICAgICAgMgorKzIzIF4gICAgICAgICAgICAgICAgXiAgICAgMworKzI0IF4gICAgICAgICAgICAgICAgIF4gICAgCisgMDogYWFjYWFjYWFjYWFjYWFjMTIzCisgMTogYWFjCisKKy9cYi4qL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF4IGxvb2tiZWhpbmQgPSAxCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgYWIgY2RcPW9mZnNldD0xCisgMDogIGNkCisKKy9cYi4qL0lzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heCBsb29rYmVoaW5kID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworT3B0aW9uczogZG90YWxsCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgYWIgY2RcPXN0YXJ0b2Zmc2V0PTEKKyAwOiAgY2QKKworLyg/IS5iY2QpLiovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgWGJjZDEyMzQ1CisgMDogYmNkMTIzNDUKKworL2FiY2RlL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdlJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisgICAgYWJcPXBzCitQYXJ0aWFsIG1hdGNoOiBhYgorICAgIGFiY1w9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiYworICAgIGFiY2RcPXBzCitQYXJ0aWFsIG1hdGNoOiBhYmNkCisgICAgYWJjZGVcPXBzCisgMDogYWJjZGUKKyAgICB0aGUgcXVpY2sgYnJvd24gYWJjXD1wcworUGFydGlhbCBtYXRjaDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2hcPXBzCisgICAgdGhlIHF1aWNrIGJyb3duIGFieHl6IGZveFw9cHMKK05vIG1hdGNoCisKKyJeKDA/WzEtOV18WzEyXVswLTldfDNbMDFdKS8oMD9bMS05XXwxWzAxMl0pLygyMCk/XGRcZCQiSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAzCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorTGFzdCBjb2RlIHVuaXQgPSAnLycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNgorICAgIDEzLzA1LzA0XD1wcworIDA6IDEzLzA1LzA0CisgMTogMTMKKyAyOiAwNQorICAgIDEzLzUvMjAwNFw9cHMKKyAwOiAxMy81LzIwMDQKKyAxOiAxMworIDI6IDUKKyAzOiAyMAorICAgIDAyLzA1LzA5XD1wcworIDA6IDAyLzA1LzA5CisgMTogMDIKKyAyOiAwNQorICAgIDFcPXBzCitQYXJ0aWFsIG1hdGNoOiAxCisgICAgMS8yXD1wcworUGFydGlhbCBtYXRjaDogMS8yCisgICAgMS8yLzBcPXBzCitQYXJ0aWFsIG1hdGNoOiAxLzIvMAorICAgIDEvMi8wNFw9cHMKKyAwOiAxLzIvMDQKKyAxOiAxCisgMjogMgorICAgIDBcPXBzCitQYXJ0aWFsIG1hdGNoOiAwCisgICAgMDIvXD1wcworUGFydGlhbCBtYXRjaDogMDIvCisgICAgMDIvMFw9cHMKK1BhcnRpYWwgbWF0Y2g6IDAyLzAKKyAgICAwMi8xXD1wcworUGFydGlhbCBtYXRjaDogMDIvMQorXD0gRXhwZWN0IG5vIG1hdGNoXD1wcworICAgIFw9cHMKK05vIG1hdGNoCisgICAgMTIzXD1wcworTm8gbWF0Y2gKKyAgICAzMy80LzA0XD1wcworTm8gbWF0Y2gKKyAgICAzLzEzLzA0XD1wcworTm8gbWF0Y2gKKyAgICAwLzEvMjAwM1w9cHMKK05vIG1hdGNoCisgICAgMC9cPXBzCitObyBtYXRjaAorICAgIDAyLzAvXD1wcworTm8gbWF0Y2gKKyAgICAwMi8xM1w9cHMKK05vIG1hdGNoCisKKy8wezAsMn1BQkMvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIEEgCitMYXN0IGNvZGUgdW5pdCA9ICdDJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9cZHszLH1BQkMvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIDEgMiAzIDQgNSA2IDcgOCA5IAorTGFzdCBjb2RlIHVuaXQgPSAnQycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNgorCisvXGQqQUJDL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSBBIAorTGFzdCBjb2RlIHVuaXQgPSAnQycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvW2FiY10rREUvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgYyAKK0xhc3QgY29kZSB1bml0ID0gJ0UnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL1thYmNdPzEyMy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDEgYSBiIGMgCitMYXN0IGNvZGUgdW5pdCA9ICczJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgMTIzXD1wcworIDA6IDEyMworICAgIGFcPXBzCitQYXJ0aWFsIG1hdGNoOiBhCisgICAgYlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGIKKyAgICBjXD1wcworUGFydGlhbCBtYXRjaDogYworICAgIGMxMlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGMxMgorICAgIGMxMjNcPXBzCisgMDogYzEyMworCisvXig/OlxkKXszLDV9WC9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitMYXN0IGNvZGUgdW5pdCA9ICdYJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisgICAgMVw9cHMKK1BhcnRpYWwgbWF0Y2g6IDEKKyAgICAxMjNcPXBzCitQYXJ0aWFsIG1hdGNoOiAxMjMKKyAgICAxMjNYCisgMDogMTIzWAorICAgIDEyMzRcPXBzCitQYXJ0aWFsIG1hdGNoOiAxMjM0CisgICAgMTIzNFgKKyAwOiAxMjM0WAorICAgIDEyMzQ1XD1wcworUGFydGlhbCBtYXRjaDogMTIzNDUKKyAgICAxMjM0NVgKKyAwOiAxMjM0NVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDFYCitObyBtYXRjaAorICAgIDEyMzQ1Nlw9cHMKK05vIG1hdGNoCisKKyI8KFx3KykvPz4oLikqPC8oXDEpPiJJZ21zCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK09wdGlvbnM6IGRvdGFsbCBtdWx0aWxpbmUKK0ZpcnN0IGNvZGUgdW5pdCA9ICc8JworTGFzdCBjb2RlIHVuaXQgPSAnPicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNworICAgIDwhRE9DVFlQRSBzZWl0ZSBTWVNURU0gImh0dHA6Ly93d3cubGNvLmxpbmVhcy5kZS94bWxDbXMuZHRkIj5cbjxzZWl0ZT5cbjxkb2t1bWVudGVuaW5mb3JtYXRpb24+XG48c2VpdGVudGl0ZWw+UGFydG5lciBkZXIgTENPPC9zZWl0ZW50aXRlbD5cbjxzcHJhY2hlPmRlPC9zcHJhY2hlPlxuPHNlaXRlbmJlc2NocmVpYnVuZz5QYXJ0bmVyIGRlciBMSU5FQVMgQ29uc3VsdGluZ1xuR21iSDwvc2VpdGVuYmVzY2hyZWlidW5nPlxuPHNjaGx1ZXNzZWx3b3J0ZT5MSU5FQVMgQ29uc3VsdGluZyBHbWJIIEhhbWJ1cmdcblBhcnRuZXJmaXJtZW48L3NjaGx1ZXNzZWx3b3J0ZT5cbjxyZXZpc2l0PjMwIGRheXM8L3JldmlzaXQ+XG48cm9ib3RzPmluZGV4LGZvbGxvdzwvcm9ib3RzPlxuPG1lbnVlaW5mb3JtYXRpb24+XG48YWt0aXY+amE8L2FrdGl2PlxuPG1lbnVlcG9zaXRpb24+MzwvbWVudWVwb3NpdGlvbj5cbjxtZW51ZXRleHQ+UGFydG5lcjwvbWVudWV0ZXh0PlxuPC9tZW51ZWluZm9ybWF0aW9uPlxuPGxhc3RlZGl0ZWQ+XG48YXV0b3I+TENPPC9hdXRvcj5cbjxmaXJtYT5MSU5FQVMgQ29uc3VsdGluZzwvZmlybWE+XG48ZGF0dW0+MTUuMTAuMjAwMzwvZGF0dW0+XG48L2xhc3RlZGl0ZWQ+XG48L2Rva3VtZW50ZW5pbmZvcm1hdGlvbj5cbjxpbmhhbHQ+XG5cbjxhYnNhdHp1ZWJlcnNjaHJpZnQ+RGllIFBhcnRuZXJmaXJtZW4gZGVyIExJTkVBUyBDb25zdWx0aW5nXG5HbWJIPC9hYnNhdHp1ZWJlcnNjaHJpZnQ+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5jYS5jb20vIiB6aWVsZmVuc3Rlcj0iX2JsYW5rIj5cbjxiaWxkIG5hbWU9ImxvZ29fY2EuZ2lmIiByYWhtZW49Im5vIi8+PC9saW5rPiA8bGlua1xuemllbD0iaHR0cDovL3d3dy5leS5jb20vIiB6aWVsZmVuc3Rlcj0iX2JsYW5rIj48YmlsZFxubmFtZT0ibG9nb19ldXkuZ2lmIiByYWhtZW49Im5vIi8+PC9saW5rPlxuPC9hYnNhdHo+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5jaXNjby5kZS8iIHppZWxmZW5zdGVyPSJfYmxhbmsiPlxuPGJpbGQgbmFtZT0ibG9nb19jaXNjby5naWYiIHJhaG1lbj0iamEiLz48L2xpbms+PC9hYnNhdHo+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5hdGVsaW9uLmRlLyJcbnppZWxmZW5zdGVyPSJfYmxhbmsiPjxiaWxkXG5uYW1lPSJsb2dvX2F0ZWxpb24uZ2lmIiByYWhtZW49Im5vIi8+PC9saW5rPlxuPC9hYnNhdHo+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5saW5lLWluZm9ybWF0aW9uLmRlLyJcbnppZWxmZW5zdGVyPSJfYmxhbmsiPlxuPGJpbGQgbmFtZT0ibG9nb19saW5lX2luZm9ybWF0aW9uLmdpZiIgcmFobWVuPSJubyIvPjwvbGluaz5cbjwvYWJzYXR6PlxuXG48YWJzYXR6PjxiaWxkIG5hbWU9ImxvZ29fYXcuZ2lmIiByYWhtZW49Im5vIi8+PC9hYnNhdHo+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5pbmNvZ25pcy5kZS8iXG56aWVsZmVuc3Rlcj0iX2JsYW5rIj48YmlsZFxubmFtZT0ibG9nb19pbmNvZ25pcy5naWYiIHJhaG1lbj0ibm8iLz48L2xpbms+PC9hYnNhdHo+XG5cbjxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5hZGRjcmFmdC5jb20vIlxuemllbGZlbnN0ZXI9Il9ibGFuayI+PGJpbGRcbm5hbWU9ImxvZ29fYWRkY3JhZnQuZ2lmIiByYWhtZW49Im5vIi8+PC9saW5rPjwvYWJzYXR6PlxuXG48YWJzYXR6PjxsaW5rIHppZWw9Imh0dHA6Ly93d3cuY29tZW5kby5jb20vIlxuemllbGZlbnN0ZXI9Il9ibGFuayI+PGJpbGRcbm5hbWU9ImxvZ29fY29tZW5kby5naWYiIHJhaG1lbj0ibm8iLz48L2xpbms+PC9hYnNhdHo+XG5cbjwvaW5oYWx0PlxuPC9zZWl0ZT5cPWppdHN0YWNrPTEwMjQKKyAwOiA8c2VpdGU+XHgwYTxkb2t1bWVudGVuaW5mb3JtYXRpb24+XHgwYTxzZWl0ZW50aXRlbD5QYXJ0bmVyIGRlciBMQ088L3NlaXRlbnRpdGVsPlx4MGE8c3ByYWNoZT5kZTwvc3ByYWNoZT5ceDBhPHNlaXRlbmJlc2NocmVpYnVuZz5QYXJ0bmVyIGRlciBMSU5FQVMgQ29uc3VsdGluZ1x4MGFHbWJIPC9zZWl0ZW5iZXNjaHJlaWJ1bmc+XHgwYTxzY2hsdWVzc2Vsd29ydGU+TElORUFTIENvbnN1bHRpbmcgR21iSCBIYW1idXJnXHgwYVBhcnRuZXJmaXJtZW48L3NjaGx1ZXNzZWx3b3J0ZT5ceDBhPHJldmlzaXQ+MzAgZGF5czwvcmV2aXNpdD5ceDBhPHJvYm90cz5pbmRleCxmb2xsb3c8L3JvYm90cz5ceDBhPG1lbnVlaW5mb3JtYXRpb24+XHgwYTxha3Rpdj5qYTwvYWt0aXY+XHgwYTxtZW51ZXBvc2l0aW9uPjM8L21lbnVlcG9zaXRpb24+XHgwYTxtZW51ZXRleHQ+UGFydG5lcjwvbWVudWV0ZXh0Plx4MGE8L21lbnVlaW5mb3JtYXRpb24+XHgwYTxsYXN0ZWRpdGVkPlx4MGE8YXV0b3I+TENPPC9hdXRvcj5ceDBhPGZpcm1hPkxJTkVBUyBDb25zdWx0aW5nPC9maXJtYT5ceDBhPGRhdHVtPjE1LjEwLjIwMDM8L2RhdHVtPlx4MGE8L2xhc3RlZGl0ZWQ+XHgwYTwvZG9rdW1lbnRlbmluZm9ybWF0aW9uPlx4MGE8aW5oYWx0Plx4MGFceDBhPGFic2F0enVlYmVyc2NocmlmdD5EaWUgUGFydG5lcmZpcm1lbiBkZXIgTElORUFTIENvbnN1bHRpbmdceDBhR21iSDwvYWJzYXR6dWViZXJzY2hyaWZ0Plx4MGFceDBhPGFic2F0ej48bGluayB6aWVsPSJodHRwOi8vd3d3LmNhLmNvbS8iIHppZWxmZW5zdGVyPSJfYmxhbmsiPlx4MGE8YmlsZCBuYW1lPSJsb2dvX2NhLmdpZiIgcmFobWVuPSJubyIvPjwvbGluaz4gPGxpbmtceDBhemllbD0iaHR0cDovL3d3dy5leS5jb20vIiB6aWVsZmVuc3Rlcj0iX2JsYW5rIj48YmlsZFx4MGFuYW1lPSJsb2dvX2V1eS5naWYiIHJhaG1lbj0ibm8iLz48L2xpbms+XHgwYTwvYWJzYXR6Plx4MGFceDBhPGFic2F0ej48bGluayB6aWVsPSJodHRwOi8vd3d3LmNpc2NvLmRlLyIgemllbGZlbnN0ZXI9Il9ibGFuayI+XHgwYTxiaWxkIG5hbWU9ImxvZ29fY2lzY28uZ2lmIiByYWhtZW49ImphIi8+PC9saW5rPjwvYWJzYXR6Plx4MGFceDBhPGFic2F0ej48bGluayB6aWVsPSJodHRwOi8vd3d3LmF0ZWxpb24uZGUvIlx4MGF6aWVsZmVuc3Rlcj0iX2JsYW5rIj48YmlsZFx4MGFuYW1lPSJsb2dvX2F0ZWxpb24uZ2lmIiByYWhtZW49Im5vIi8+PC9saW5rPlx4MGE8L2Fic2F0ej5ceDBhXHgwYTxhYnNhdHo+PGxpbmsgemllbD0iaHR0cDovL3d3dy5saW5lLWluZm9ybWF0aW9uLmRlLyJceDBhemllbGZlbnN0ZXI9Il9ibGFuayI+XHgwYTxiaWxkIG5hbWU9ImxvZ29fbGluZV9pbmZvcm1hdGlvbi5naWYiIHJhaG1lbj0ibm8iLz48L2xpbms+XHgwYTwvYWJzYXR6Plx4MGFceDBhPGFic2F0ej48YmlsZCBuYW1lPSJsb2dvX2F3LmdpZiIgcmFobWVuPSJubyIvPjwvYWJzYXR6Plx4MGFceDBhPGFic2F0ej48bGluayB6aWVsPSJodHRwOi8vd3d3LmluY29nbmlzLmRlLyJceDBhemllbGZlbnN0ZXI9Il9ibGFuayI+PGJpbGRceDBhbmFtZT0ibG9nb19pbmNvZ25pcy5naWYiIHJhaG1lbj0ibm8iLz48L2xpbms+PC9hYnNhdHo+XHgwYVx4MGE8YWJzYXR6PjxsaW5rIHppZWw9Imh0dHA6Ly93d3cuYWRkY3JhZnQuY29tLyJceDBhemllbGZlbnN0ZXI9Il9ibGFuayI+PGJpbGRceDBhbmFtZT0ibG9nb19hZGRjcmFmdC5naWYiIHJhaG1lbj0ibm8iLz48L2xpbms+PC9hYnNhdHo+XHgwYVx4MGE8YWJzYXR6PjxsaW5rIHppZWw9Imh0dHA6Ly93d3cuY29tZW5kby5jb20vIlx4MGF6aWVsZmVuc3Rlcj0iX2JsYW5rIj48YmlsZFx4MGFuYW1lPSJsb2dvX2NvbWVuZG8uZ2lmIiByYWhtZW49Im5vIi8+PC9saW5rPjwvYWJzYXR6Plx4MGFceDBhPC9pbmhhbHQ+XHgwYTwvc2VpdGU+CisgMTogc2VpdGUKKyAyOiBceDBhCisgMzogc2VpdGUKKworL2xpbmVcbmJyZWFrL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29udGFpbnMgZXhwbGljaXQgQ1Igb3IgTEYgbWF0Y2gKK0ZpcnN0IGNvZGUgdW5pdCA9ICdsJworTGFzdCBjb2RlIHVuaXQgPSAnaycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMTAKKyAgICB0aGlzIGlzIGEgbGluZVxuYnJlYWsKKyAwOiBsaW5lXHgwYWJyZWFrCisgICAgbGluZSBvbmVcbnRoaXMgaXMgYSBsaW5lXG5icmVhayBpbiB0aGUgc2Vjb25kIGxpbmUKKyAwOiBsaW5lXHgwYWJyZWFrCisKKy9saW5lXG5icmVhay9JLGZpcnN0bGluZQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb250YWlucyBleHBsaWNpdCBDUiBvciBMRiBtYXRjaAorT3B0aW9uczogZmlyc3RsaW5lCitGaXJzdCBjb2RlIHVuaXQgPSAnbCcKK0xhc3QgY29kZSB1bml0ID0gJ2snCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEwCisgICAgdGhpcyBpcyBhIGxpbmVcbmJyZWFrCisgMDogbGluZVx4MGFicmVhaworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgbGluZSBvbmVcbnRoaXMgaXMgYSBsaW5lXG5icmVhayBpbiB0aGUgc2Vjb25kIGxpbmUKK05vIG1hdGNoCisKKy9saW5lXG5icmVhay9JbSxmaXJzdGxpbmUKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29udGFpbnMgZXhwbGljaXQgQ1Igb3IgTEYgbWF0Y2gKK09wdGlvbnM6IGZpcnN0bGluZSBtdWx0aWxpbmUKK0ZpcnN0IGNvZGUgdW5pdCA9ICdsJworTGFzdCBjb2RlIHVuaXQgPSAnaycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMTAKKyAgICB0aGlzIGlzIGEgbGluZVxuYnJlYWsKKyAwOiBsaW5lXHgwYWJyZWFrCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBsaW5lIG9uZVxudGhpcyBpcyBhIGxpbmVcbmJyZWFrIGluIHRoZSBzZWNvbmQgbGluZQorTm8gbWF0Y2gKKworLyg/aSkoPy1pKUFiQ2QvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnQScKK0xhc3QgY29kZSB1bml0ID0gJ2QnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKyAgICBBYkNkCisgMDogQWJDZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZAorTm8gbWF0Y2gKKworL2F7MTExMTExMTExMTExMTExMTExMTF9L0kKK0ZhaWxlZDogZXJyb3IgMTA1IGF0IG9mZnNldCA4OiBudW1iZXIgdG9vIGJpZyBpbiB7fSBxdWFudGlmaWVyCisKKy8oKXs2NDI5NDk2NzI5NX0vSQorRmFpbGVkOiBlcnJvciAxMDUgYXQgb2Zmc2V0IDk6IG51bWJlciB0b28gYmlnIGluIHt9IHF1YW50aWZpZXIKKworLygpezIsNDI5NDk2NzI5NX0vSQorRmFpbGVkOiBlcnJvciAxMDUgYXQgb2Zmc2V0IDExOiBudW1iZXIgdG9vIGJpZyBpbiB7fSBxdWFudGlmaWVyCisKKyIoP2k6YSkoP2k6YikoP2k6YykoP2k6ZCkoP2k6ZSkoP2k6ZikoP2k6ZykoP2k6aCkoP2k6aSkoP2k6aikoaykoP2k6bClBXDFCIkkKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorRmlyc3QgY29kZSB1bml0ID0gJ2EnIChjYXNlbGVzcykKK0xhc3QgY29kZSB1bml0ID0gJ0InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDE1CisgICAgYWJjZGVmZ2hpamtsQWtCCisgMDogYWJjZGVmZ2hpamtsQWtCCisgMTogaworCisiKD9QPG4wPmEpKD9QPG4xPmIpKD9QPG4yPmMpKD9QPG4zPmQpKD9QPG40PmUpKD9QPG41PmYpKD9QPG42PmcpKD9QPG43PmgpKD9QPG44PmkpKD9QPG45PmopKD9QPG4xMD5rKSg/UDxuMTE+bClBXDExQiJJCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEyCitNYXggYmFjayByZWZlcmVuY2UgPSAxMQorTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBuMCAgICAxCisgIG4xICAgIDIKKyAgbjEwICAxMQorICBuMTEgIDEyCisgIG4yICAgIDMKKyAgbjMgICAgNAorICBuNCAgICA1CisgIG41ICAgIDYKKyAgbjYgICAgNworICBuNyAgICA4CisgIG44ICAgIDkKKyAgbjkgICAxMAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdCJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxNQorICAgIGFiY2RlZmdoaWprbEFrQgorIDA6IGFiY2RlZmdoaWprbEFrQgorIDE6IGEKKyAyOiBiCisgMzogYworIDQ6IGQKKyA1OiBlCisgNjogZgorIDc6IGcKKyA4OiBoCisgOTogaQorMTA6IGoKKzExOiBrCisxMjogbAorCisiKGEpKGIpKGMpKGQpKGUpKGYpKGcpKGgpKGkpKGopKGspKGwpQVwxMUIiSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxMgorTWF4IGJhY2sgcmVmZXJlbmNlID0gMTEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnQicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMTUKKyAgICBhYmNkZWZnaGlqa2xBa0IKKyAwOiBhYmNkZWZnaGlqa2xBa0IKKyAxOiBhCisgMjogYgorIDM6IGMKKyA0OiBkCisgNTogZQorIDY6IGYKKyA3OiBnCisgODogaAorIDk6IGkKKzEwOiBqCisxMTogaworMTI6IGwKKworIig/UDxuYW1lMD5hKSg/UDxuYW1lMT5hKSg/UDxuYW1lMj5hKSg/UDxuYW1lMz5hKSg/UDxuYW1lND5hKSg/UDxuYW1lNT5hKSg/UDxuYW1lNj5hKSg/UDxuYW1lNz5hKSg/UDxuYW1lOD5hKSg/UDxuYW1lOT5hKSg/UDxuYW1lMTA+YSkoP1A8bmFtZTExPmEpKD9QPG5hbWUxMj5hKSg/UDxuYW1lMTM+YSkoP1A8bmFtZTE0PmEpKD9QPG5hbWUxNT5hKSg/UDxuYW1lMTY+YSkoP1A8bmFtZTE3PmEpKD9QPG5hbWUxOD5hKSg/UDxuYW1lMTk+YSkoP1A8bmFtZTIwPmEpKD9QPG5hbWUyMT5hKSg/UDxuYW1lMjI+YSkoP1A8bmFtZTIzPmEpKD9QPG5hbWUyND5hKSg/UDxuYW1lMjU+YSkoP1A8bmFtZTI2PmEpKD9QPG5hbWUyNz5hKSg/UDxuYW1lMjg+YSkoP1A8bmFtZTI5PmEpKD9QPG5hbWUzMD5hKSg/UDxuYW1lMzE+YSkoP1A8bmFtZTMyPmEpKD9QPG5hbWUzMz5hKSg/UDxuYW1lMzQ+YSkoP1A8bmFtZTM1PmEpKD9QPG5hbWUzNj5hKSg/UDxuYW1lMzc+YSkoP1A8bmFtZTM4PmEpKD9QPG5hbWUzOT5hKSg/UDxuYW1lNDA+YSkoP1A8bmFtZTQxPmEpKD9QPG5hbWU0Mj5hKSg/UDxuYW1lNDM+YSkoP1A8bmFtZTQ0PmEpKD9QPG5hbWU0NT5hKSg/UDxuYW1lNDY+YSkoP1A8bmFtZTQ3PmEpKD9QPG5hbWU0OD5hKSg/UDxuYW1lNDk+YSkoP1A8bmFtZTUwPmEpKD9QPG5hbWU1MT5hKSg/UDxuYW1lNTI+YSkoP1A8bmFtZTUzPmEpKD9QPG5hbWU1ND5hKSg/UDxuYW1lNTU+YSkoP1A8bmFtZTU2PmEpKD9QPG5hbWU1Nz5hKSg/UDxuYW1lNTg+YSkoP1A8bmFtZTU5PmEpKD9QPG5hbWU2MD5hKSg/UDxuYW1lNjE+YSkoP1A8bmFtZTYyPmEpKD9QPG5hbWU2Mz5hKSg/UDxuYW1lNjQ+YSkoP1A8bmFtZTY1PmEpKD9QPG5hbWU2Nj5hKSg/UDxuYW1lNjc+YSkoP1A8bmFtZTY4PmEpKD9QPG5hbWU2OT5hKSg/UDxuYW1lNzA+YSkoP1A8bmFtZTcxPmEpKD9QPG5hbWU3Mj5hKSg/UDxuYW1lNzM+YSkoP1A8bmFtZTc0PmEpKD9QPG5hbWU3NT5hKSg/UDxuYW1lNzY+YSkoP1A8bmFtZTc3PmEpKD9QPG5hbWU3OD5hKSg/UDxuYW1lNzk+YSkoP1A8bmFtZTgwPmEpKD9QPG5hbWU4MT5hKSg/UDxuYW1lODI+YSkoP1A8bmFtZTgzPmEpKD9QPG5hbWU4ND5hKSg/UDxuYW1lODU+YSkoP1A8bmFtZTg2PmEpKD9QPG5hbWU4Nz5hKSg/UDxuYW1lODg+YSkoP1A8bmFtZTg5PmEpKD9QPG5hbWU5MD5hKSg/UDxuYW1lOTE+YSkoP1A8bmFtZTkyPmEpKD9QPG5hbWU5Mz5hKSg/UDxuYW1lOTQ+YSkoP1A8bmFtZTk1PmEpKD9QPG5hbWU5Nj5hKSg/UDxuYW1lOTc+YSkoP1A8bmFtZTk4PmEpKD9QPG5hbWU5OT5hKSg/UDxuYW1lMTAwPmEpIkkKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMTAxCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIG5hbWUwICAgICAxCisgIG5hbWUxICAgICAyCisgIG5hbWUxMCAgIDExCisgIG5hbWUxMDAgMTAxCisgIG5hbWUxMSAgIDEyCisgIG5hbWUxMiAgIDEzCisgIG5hbWUxMyAgIDE0CisgIG5hbWUxNCAgIDE1CisgIG5hbWUxNSAgIDE2CisgIG5hbWUxNiAgIDE3CisgIG5hbWUxNyAgIDE4CisgIG5hbWUxOCAgIDE5CisgIG5hbWUxOSAgIDIwCisgIG5hbWUyICAgICAzCisgIG5hbWUyMCAgIDIxCisgIG5hbWUyMSAgIDIyCisgIG5hbWUyMiAgIDIzCisgIG5hbWUyMyAgIDI0CisgIG5hbWUyNCAgIDI1CisgIG5hbWUyNSAgIDI2CisgIG5hbWUyNiAgIDI3CisgIG5hbWUyNyAgIDI4CisgIG5hbWUyOCAgIDI5CisgIG5hbWUyOSAgIDMwCisgIG5hbWUzICAgICA0CisgIG5hbWUzMCAgIDMxCisgIG5hbWUzMSAgIDMyCisgIG5hbWUzMiAgIDMzCisgIG5hbWUzMyAgIDM0CisgIG5hbWUzNCAgIDM1CisgIG5hbWUzNSAgIDM2CisgIG5hbWUzNiAgIDM3CisgIG5hbWUzNyAgIDM4CisgIG5hbWUzOCAgIDM5CisgIG5hbWUzOSAgIDQwCisgIG5hbWU0ICAgICA1CisgIG5hbWU0MCAgIDQxCisgIG5hbWU0MSAgIDQyCisgIG5hbWU0MiAgIDQzCisgIG5hbWU0MyAgIDQ0CisgIG5hbWU0NCAgIDQ1CisgIG5hbWU0NSAgIDQ2CisgIG5hbWU0NiAgIDQ3CisgIG5hbWU0NyAgIDQ4CisgIG5hbWU0OCAgIDQ5CisgIG5hbWU0OSAgIDUwCisgIG5hbWU1ICAgICA2CisgIG5hbWU1MCAgIDUxCisgIG5hbWU1MSAgIDUyCisgIG5hbWU1MiAgIDUzCisgIG5hbWU1MyAgIDU0CisgIG5hbWU1NCAgIDU1CisgIG5hbWU1NSAgIDU2CisgIG5hbWU1NiAgIDU3CisgIG5hbWU1NyAgIDU4CisgIG5hbWU1OCAgIDU5CisgIG5hbWU1OSAgIDYwCisgIG5hbWU2ICAgICA3CisgIG5hbWU2MCAgIDYxCisgIG5hbWU2MSAgIDYyCisgIG5hbWU2MiAgIDYzCisgIG5hbWU2MyAgIDY0CisgIG5hbWU2NCAgIDY1CisgIG5hbWU2NSAgIDY2CisgIG5hbWU2NiAgIDY3CisgIG5hbWU2NyAgIDY4CisgIG5hbWU2OCAgIDY5CisgIG5hbWU2OSAgIDcwCisgIG5hbWU3ICAgICA4CisgIG5hbWU3MCAgIDcxCisgIG5hbWU3MSAgIDcyCisgIG5hbWU3MiAgIDczCisgIG5hbWU3MyAgIDc0CisgIG5hbWU3NCAgIDc1CisgIG5hbWU3NSAgIDc2CisgIG5hbWU3NiAgIDc3CisgIG5hbWU3NyAgIDc4CisgIG5hbWU3OCAgIDc5CisgIG5hbWU3OSAgIDgwCisgIG5hbWU4ICAgICA5CisgIG5hbWU4MCAgIDgxCisgIG5hbWU4MSAgIDgyCisgIG5hbWU4MiAgIDgzCisgIG5hbWU4MyAgIDg0CisgIG5hbWU4NCAgIDg1CisgIG5hbWU4NSAgIDg2CisgIG5hbWU4NiAgIDg3CisgIG5hbWU4NyAgIDg4CisgIG5hbWU4OCAgIDg5CisgIG5hbWU4OSAgIDkwCisgIG5hbWU5ICAgIDEwCisgIG5hbWU5MCAgIDkxCisgIG5hbWU5MSAgIDkyCisgIG5hbWU5MiAgIDkzCisgIG5hbWU5MyAgIDk0CisgIG5hbWU5NCAgIDk1CisgIG5hbWU5NSAgIDk2CisgIG5hbWU5NiAgIDk3CisgIG5hbWU5NyAgIDk4CisgIG5hbWU5OCAgIDk5CisgIG5hbWU5OSAgMTAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEwMQorICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgMTogYQorIDI6IGEKKyAzOiBhCisgNDogYQorIDU6IGEKKyA2OiBhCisgNzogYQorIDg6IGEKKyA5OiBhCisxMDogYQorMTE6IGEKKzEyOiBhCisxMzogYQorMTQ6IGEKKworIihhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKShhKSJJCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEwMQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxMDEKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorTWF0Y2hlZCwgYnV0IHRvbyBtYW55IHN1YnN0cmluZ3MKKyAwOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDE6IGEKKyAyOiBhCisgMzogYQorIDQ6IGEKKyA1OiBhCisgNjogYQorIDc6IGEKKyA4OiBhCisgOTogYQorMTA6IGEKKzExOiBhCisxMjogYQorMTM6IGEKKzE0OiBhCisKKy9bXigpXSooPzpcKCg/UilcKVteKCldKikqL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgKHRoaXMoYW5kKXRoYXQKKyAwOiAKKyAgICAodGhpcyhhbmQpdGhhdCkKKyAwOiAodGhpcyhhbmQpdGhhdCkKKyAgICAodGhpcyhhbmQpdGhhdClzdHVmZgorIDA6ICh0aGlzKGFuZCl0aGF0KXN0dWZmCisKKy9bXigpXSooPzpcKCg/Pig/UikpXClbXigpXSopKi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgICh0aGlzKGFuZCl0aGF0CisgMDogCisgICAgKHRoaXMoYW5kKXRoYXQpCisgMDogKHRoaXMoYW5kKXRoYXQpCisKKy9bXigpXSooPzpcKCg/UilcKSkqW14oKV0qL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgKHRoaXMoYW5kKXRoYXQKKyAwOiAKKyAgICAodGhpcyhhbmQpdGhhdCkKKyAwOiAodGhpcyhhbmQpdGhhdCkKKworLyg/OlwoKD9SKVwpKSpbXigpXSovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICAodGhpcyhhbmQpdGhhdAorIDA6IAorICAgICh0aGlzKGFuZCl0aGF0KQorIDA6IAorICAgICgodGhpcykpCisgMDogKCh0aGlzKSkKKworLyg/OlwoKD9SKVwpKXxbXigpXSovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICAodGhpcyhhbmQpdGhhdAorIDA6IAorICAgICh0aGlzKGFuZCl0aGF0KQorIDA6IAorICAgICh0aGlzKQorIDA6ICh0aGlzKQorICAgICgodGhpcykpCisgMDogKCh0aGlzKSkKKworL1x4ezAwMDBmZn0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSBceGZmCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL14oKD9QPEE+YTEpfCg/UDxBPmEyKWIpL0kKK0ZhaWxlZDogZXJyb3IgMTQzIGF0IG9mZnNldCAxNzogdHdvIG5hbWVkIHN1YnBhdHRlcm5zIGhhdmUgdGhlIHNhbWUgbmFtZSAoUENSRTJfRFVQTkFNRVMgbm90IHNldCkKKworL14oKD9QPEE+YTEpfCg/UDxBPmEyKWIpL0ksZHVwbmFtZXMKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBBICAgMgorICBBICAgMworQ29tcGlsZSBvcHRpb25zOiBkdXBuYW1lcworT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZCBkdXBuYW1lcworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYTFiXD1jb3B5PUEKKyAwOiBhMQorIDE6IGExCisgMjogYTEKKyAgQyBhMSAoMikgQSAobm9uLXVuaXF1ZSkKKyAgICBhMmJcPWNvcHk9QQorIDA6IGEyYgorIDE6IGEyYgorIDI6IDx1bnNldD4KKyAzOiBhMgorICBDIGEyICgyKSBBIChub24tdW5pcXVlKQorICAgIGExYlw9Y29weT1aLGNvcHk9QQorIDA6IGExCisgMTogYTEKKyAyOiBhMQorTnVtYmVyIG5vdCBmb3VuZCBmb3IgZ3JvdXAgJ1onCitDb3B5IHN1YnN0cmluZyAnWicgZmFpbGVkICgtNDkpOiB1bmtub3duIHN1YnN0cmluZworICBDIGExICgyKSBBIChub24tdW5pcXVlKQorICAgIAorLyg/fCg/PGE+KSg/PGI+KSg/PGE+KXwoPzxhPikoPzxiPikoPzxhPikpL0ksZHVwbmFtZXMKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBhICAgMQorICBhICAgMworICBiICAgMgorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworT3B0aW9uczogZHVwbmFtZXMKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvXig/UDxBPmEpKD9QPEE+YikvSSxkdXBuYW1lcworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIEEgICAxCisgIEEgICAyCitDb21waWxlIG9wdGlvbnM6IGR1cG5hbWVzCitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkIGR1cG5hbWVzCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhYlw9Y29weT1BCisgMDogYWIKKyAxOiBhCisgMjogYgorICBDIGEgKDEpIEEgKG5vbi11bmlxdWUpCisKKy9eKD9QPEE+YSkoP1A8QT5iKXxjZC9JLGR1cG5hbWVzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgQSAgIDEKKyAgQSAgIDIKK09wdGlvbnM6IGR1cG5hbWVzCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhYlw9Y29weT1BCisgMDogYWIKKyAxOiBhCisgMjogYgorICBDIGEgKDEpIEEgKG5vbi11bmlxdWUpCisgICAgY2RcPWNvcHk9QQorIDA6IGNkCitDb3B5IHN1YnN0cmluZyAnQScgZmFpbGVkICgtNTUpOiByZXF1ZXN0ZWQgdmFsdWUgaXMgbm90IHNldAorCisvXig/UDxBPmEpKD9QPEE+Yil8Y2QoP1A8QT5lZikoP1A8QT5naCkvSSxkdXBuYW1lcworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSA0CitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIEEgICAxCisgIEEgICAyCisgIEEgICAzCisgIEEgICA0CitPcHRpb25zOiBkdXBuYW1lcworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgY2RlZmdoXD1jb3B5PUEKKyAwOiBjZGVmZ2gKKyAxOiA8dW5zZXQ+CisgMjogPHVuc2V0PgorIDM6IGVmCisgNDogZ2gKKyAgQyBlZiAoMikgQSAobm9uLXVuaXF1ZSkKKworL14oKD9QPEE+YTEpfCg/UDxBPmEyKWIpL0ksZHVwbmFtZXMKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBBICAgMgorICBBICAgMworQ29tcGlsZSBvcHRpb25zOiBkdXBuYW1lcworT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZCBkdXBuYW1lcworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYTFiXD1nZXQ9QQorIDA6IGExCisgMTogYTEKKyAyOiBhMQorICBHIGExICgyKSBBIChub24tdW5pcXVlKQorICAgIGEyYlw9Z2V0PUEKKyAwOiBhMmIKKyAxOiBhMmIKKyAyOiA8dW5zZXQ+CisgMzogYTIKKyAgRyBhMiAoMikgQSAobm9uLXVuaXF1ZSkKKyAgICBhMWJcPWdldD1aLGdldD1BCisgMDogYTEKKyAxOiBhMQorIDI6IGExCitOdW1iZXIgbm90IGZvdW5kIGZvciBncm91cCAnWicKK0dldCBzdWJzdHJpbmcgJ1onIGZhaWxlZCAoLTQ5KTogdW5rbm93biBzdWJzdHJpbmcKKyAgRyBhMSAoMikgQSAobm9uLXVuaXF1ZSkKKworL14oP1A8QT5hKSg/UDxBPmIpL0ksZHVwbmFtZXMKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBBICAgMQorICBBICAgMgorQ29tcGlsZSBvcHRpb25zOiBkdXBuYW1lcworT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZCBkdXBuYW1lcworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYWJcPWdldD1BCisgMDogYWIKKyAxOiBhCisgMjogYgorICBHIGEgKDEpIEEgKG5vbi11bmlxdWUpCisKKy9eKD9QPEE+YSkoP1A8QT5iKXxjZC9JLGR1cG5hbWVzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgQSAgIDEKKyAgQSAgIDIKK09wdGlvbnM6IGR1cG5hbWVzCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhYlw9Z2V0PUEKKyAwOiBhYgorIDE6IGEKKyAyOiBiCisgIEcgYSAoMSkgQSAobm9uLXVuaXF1ZSkKKyAgICBjZFw9Z2V0PUEKKyAwOiBjZAorR2V0IHN1YnN0cmluZyAnQScgZmFpbGVkICgtNTUpOiByZXF1ZXN0ZWQgdmFsdWUgaXMgbm90IHNldAorCisvXig/UDxBPmEpKD9QPEE+Yil8Y2QoP1A8QT5lZikoP1A8QT5naCkvSSxkdXBuYW1lcworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSA0CitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIEEgICAxCisgIEEgICAyCisgIEEgICAzCisgIEEgICA0CitPcHRpb25zOiBkdXBuYW1lcworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgY2RlZmdoXD1nZXQ9QQorIDA6IGNkZWZnaAorIDE6IDx1bnNldD4KKyAyOiA8dW5zZXQ+CisgMzogZWYKKyA0OiBnaAorICBHIGVmICgyKSBBIChub24tdW5pcXVlKQorCisvKD9KKV4oKD9QPEE+YTEpfCg/UDxBPmEyKWIpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBBICAgMgorICBBICAgMworQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK0R1cGxpY2F0ZSBuYW1lIHN0YXR1cyBjaGFuZ2VzCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhMWJcPWNvcHk9QQorIDA6IGExCisgMTogYTEKKyAyOiBhMQorICBDIGExICgyKSBBIChub24tdW5pcXVlKQorICAgIGEyYlw9Y29weT1BCisgMDogYTJiCisgMTogYTJiCisgMjogPHVuc2V0PgorIDM6IGEyCisgIEMgYTIgKDIpIEEgKG5vbi11bmlxdWUpCisKKy9eKD9QPEE+YSkgKD9KOig/UDxCPmIpKD9QPEI+YykpICg/UDxBPmQpL0kKK0ZhaWxlZDogZXJyb3IgMTQzIGF0IG9mZnNldCAzNzogdHdvIG5hbWVkIHN1YnBhdHRlcm5zIGhhdmUgdGhlIHNhbWUgbmFtZSAoUENSRTJfRFVQTkFNRVMgbm90IHNldCkKKworIyBJbiB0aGlzIG5leHQgdGVzdCwgSiBpcyBub3Qgc2V0IGF0IHRoZSBvdXRlciBsZXZlbDsgY29uc2VxdWVudGx5IGl0IGlzbid0IHNldAorIyBpbiB0aGUgcGF0dGVybidzIG9wdGlvbnM7IGNvbnNlcXVlbnRseSBwY3JlMl9zdWJzdHJpbmdfZ2V0X2J5bmFtZSgpIHByb2R1Y2VzCisjIGEgcmFuZG9tIHZhbHVlLgorCisvXig/UDxBPmEpICg/SjooP1A8Qj5iKSg/UDxCPmMpKSAoP1A8Qz5kKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDQKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgQSAgIDEKKyAgQiAgIDIKKyAgQiAgIDMKKyAgQyAgIDQKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitEdXBsaWNhdGUgbmFtZSBzdGF0dXMgY2hhbmdlcworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA2CisgICAgYSBiYyBkXD1jb3B5PUEsY29weT1CLGNvcHk9QworIDA6IGEgYmMgZAorIDE6IGEKKyAyOiBiCisgMzogYworIDQ6IGQKKyAgQyBhICgxKSBBIChncm91cCAxKQorICBDIGIgKDEpIEIgKG5vbi11bmlxdWUpCisgIEMgZCAoMSkgQyAoZ3JvdXAgNCkKKworL14oP1A8QT5hKT8oPyhBKWF8YikvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIEEgICAxCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgYWFiYworIDA6IGFhCisgMTogYQorICAgIGJjCisgMDogYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCitObyBtYXRjaAorCisvKD86KD8oWlopYXxiKSg/UDxaWj5YKSkrL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBaWiAgIDEKK0xhc3QgY29kZSB1bml0ID0gJ1gnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBiWGFYCisgMDogYlhhWAorIDE6IFgKKworLyg/Oig/KDJ5KWF8YikoWCkpKy9JCitGYWlsZWQ6IGVycm9yIDEyNiBhdCBvZmZzZXQgNzogbWFsZm9ybWVkIG51bWJlciBvciBuYW1lIGFmdGVyICg/KAorCisvKD86KD8oWkEpYXxiKSg/UDxaWj5YKSkrL0kKK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCA5OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworLyg/Oig/KFpaKWF8YikoPyhaWilhfGIpKD9QPFpaPlgpKSsvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIFpaICAgMQorTGFzdCBjb2RlIHVuaXQgPSAnWCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGJiWGFhWAorIDA6IGJiWGFhWAorIDE6IFgKKworLyg/Oig/KFpaKWF8XChiXCkpXFwoP1A8Wlo+WCkpKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgWlogICAxCitMYXN0IGNvZGUgdW5pdCA9ICdYJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgKGIpXFxYYVxcWAorIDA6IChiKVxYYVxYCisgMTogWAorCisvKD9QPEFCQy9JCitGYWlsZWQ6IGVycm9yIDE0MiBhdCBvZmZzZXQgNzogc3ludGF4IGVycm9yIGluIHN1YnBhdHRlcm4gbmFtZSAobWlzc2luZyB0ZXJtaW5hdG9yKQorCisvKD86KD8oQSkoP1A9QSlhfGIpKD9QPEE+WHxZKSkrL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBBICAgMQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYlhYYVlZYVkKKyAwOiBiWFhhWVlhWQorIDE6IFkKKyAgICBiWFlhWFhhWAorIDA6IGJYCisgMTogWAorCisvKCkoKSgpKCkoKSgpKCkoKSgpKD86KD8oQSkoP1A9QSlhfGIpKD9QPEE+WHxZKSkrL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMTAKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEwCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIEEgIDEwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBiWFhhWVlhWQorIDA6IGJYWGFZWWFZCisgMTogCisgMjogCisgMzogCisgNDogCisgNTogCisgNjogCisgNzogCisgODogCisgOTogCisxMDogWQorCisvXHMqLFxzKi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDkgXHgwYSBceDBiIFx4MGMgXHgwZCBceDIwICwgCitMYXN0IGNvZGUgdW5pdCA9ICcsJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgXHgwYixceDBiCisgMDogXHgwYixceDBiCisgICAgXHgwYyxceDBkCisgMDogXHgwYyxceDBkCisKKy9eYWJjL0ltLG5ld2xpbmU9bGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogbXVsdGlsaW5lCitGb3JjZWQgbmV3bGluZSBpcyBMRgorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIHh5elxuYWJjCisgMDogYWJjCisgICAgeHl6XHJcbmFiYworIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6XHJhYmMKK05vIG1hdGNoCisgICAgeHl6YWJjXHIKK05vIG1hdGNoCisgICAgeHl6YWJjXHJwcXIKK05vIG1hdGNoCisgICAgeHl6YWJjXHJcbgorTm8gbWF0Y2gKKyAgICB4eXphYmNcclxucHFyCitObyBtYXRjaAorCisvXmFiYy9JbSxuZXdsaW5lPWNybGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogbXVsdGlsaW5lCitGb3JjZWQgbmV3bGluZSBpcyBDUkxGCitGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgeHl6XHJcbmFiY2xmPgorIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6XG5hYmNsZgorTm8gbWF0Y2gKKyAgICB4eXpccmFiY2xmCitObyBtYXRjaAorICAgIAorL15hYmMvSW0sbmV3bGluZT1jcgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBtdWx0aWxpbmUKK0ZvcmNlZCBuZXdsaW5lIGlzIENSCitGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgeHl6XHJhYmMKKyAwOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5elxuYWJjCitObyBtYXRjaAorICAgIHh5elxyXG5hYmMKK05vIG1hdGNoCisKKy9eYWJjL0ltLG5ld2xpbmU9YmFkCisqKiBJbnZhbGlkIHZhbHVlIGluICduZXdsaW5lPWJhZCcKKworLy4qL0ksbmV3bGluZT1sZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitGb3JjZWQgbmV3bGluZSBpcyBMRgorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgYWJjXG5kZWYKKyAwOiBhYmMKKyAgICBhYmNccmRlZgorIDA6IGFiY1x4MGRkZWYKKyAgICBhYmNcclxuZGVmCisgMDogYWJjXHgwZAorCisvLiovSSxuZXdsaW5lPWNyCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK0ZvcmNlZCBuZXdsaW5lIGlzIENSCitGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICBhYmNcbmRlZgorIDA6IGFiY1x4MGFkZWYKKyAgICBhYmNccmRlZgorIDA6IGFiYworICAgIGFiY1xyXG5kZWYKKyAwOiBhYmMKKworLy4qL0ksbmV3bGluZT1jcmxmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK0ZvcmNlZCBuZXdsaW5lIGlzIENSTEYKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY1xuZGVmCisgMDogYWJjXHgwYWRlZgorICAgIGFiY1xyZGVmCisgMDogYWJjXHgwZGRlZgorICAgIGFiY1xyXG5kZWYKKyAwOiBhYmMKKworL1x3KyguKSguKT9kZWYvSXMKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorT3B0aW9uczogZG90YWxsCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIDEgMiAzIDQgNSA2IDcgOCA5IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgCisgIFEgUiBTIFQgVSBWIFcgWCBZIFogXyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogCitMYXN0IGNvZGUgdW5pdCA9ICdmJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisgICAgYWJjXG5kZWYKKyAwOiBhYmNceDBhZGVmCisgMTogXHgwYQorICAgIGFiY1xyZGVmCisgMDogYWJjXHgwZGRlZgorIDE6IFx4MGQKKyAgICBhYmNcclxuZGVmCisgMDogYWJjXHgwZFx4MGFkZWYKKyAxOiBceDBkCisgMjogXHgwYQorCisvKD9QPEI+MjVbMC01XXwyWzAtNF1cZHxbMDFdP1xkP1xkKSg/OlwuKD9QPkIpKXszfS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgQiAgIDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDAgMSAyIDMgNCA1IDYgNyA4IDkgCitMYXN0IGNvZGUgdW5pdCA9ICcuJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA3CisKKy8oKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpCisgKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKQorICgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkKKyAoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpCisgKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKQorICguKC4pKS9JeAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxMDIKK09wdGlvbnM6IGV4dGVuZGVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBYWVw9b3ZlY3Rvcj0xMzMKKyAwOiBYWQorIDE6IAorIDI6IAorIDM6IAorIDQ6IAorIDU6IAorIDY6IAorIDc6IAorIDg6IAorIDk6IAorMTA6IAorMTE6IAorMTI6IAorMTM6IAorMTQ6IAorMTU6IAorMTY6IAorMTc6IAorMTg6IAorMTk6IAorMjA6IAorMjE6IAorMjI6IAorMjM6IAorMjQ6IAorMjU6IAorMjY6IAorMjc6IAorMjg6IAorMjk6IAorMzA6IAorMzE6IAorMzI6IAorMzM6IAorMzQ6IAorMzU6IAorMzY6IAorMzc6IAorMzg6IAorMzk6IAorNDA6IAorNDE6IAorNDI6IAorNDM6IAorNDQ6IAorNDU6IAorNDY6IAorNDc6IAorNDg6IAorNDk6IAorNTA6IAorNTE6IAorNTI6IAorNTM6IAorNTQ6IAorNTU6IAorNTY6IAorNTc6IAorNTg6IAorNTk6IAorNjA6IAorNjE6IAorNjI6IAorNjM6IAorNjQ6IAorNjU6IAorNjY6IAorNjc6IAorNjg6IAorNjk6IAorNzA6IAorNzE6IAorNzI6IAorNzM6IAorNzQ6IAorNzU6IAorNzY6IAorNzc6IAorNzg6IAorNzk6IAorODA6IAorODE6IAorODI6IAorODM6IAorODQ6IAorODU6IAorODY6IAorODc6IAorODg6IAorODk6IAorOTA6IAorOTE6IAorOTI6IAorOTM6IAorOTQ6IAorOTU6IAorOTY6IAorOTc6IAorOTg6IAorOTk6IAorMTAwOiAKKzEwMTogWFkKKzEwMjogWQorCisvKGEqYnwoP2k6YyooPy1pKWQpKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IEMgYSBiIGMgZCAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKClbYWJdeHl6L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIAorTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvKHwpW2FiXXh5ei9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiAKK0xhc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKworLyh8YylbYWJdeHl6L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIGMgCitMYXN0IGNvZGUgdW5pdCA9ICd6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisKKy8ofGM/KVthYl14eXovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgYyAKK0xhc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKworLyhkP3xjPylbYWJdeHl6L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIGMgZCAKK0xhc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKworLyhkP3xjKVthYl14eXovSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgYyBkIAorTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvXmEqYlxkL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgYSorCisgICAgICAgIGIKKyAgICAgICAgXGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9eYSorYlxkL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgYSorCisgICAgICAgIGIKKyAgICAgICAgXGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9eYSo/YlxkL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgYSorCisgICAgICAgIGIKKyAgICAgICAgXGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9eYStBXGQvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBhKysKKyAgICAgICAgQQorICAgICAgICBcZAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK0xhc3QgY29kZSB1bml0ID0gJ0EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBhYWFBNQorIDA6IGFhYUE1CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhNQorTm8gbWF0Y2gKKworL15hKkFcZC9JQmkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAvaSBhKgorICAgICAvaSBBCisgICAgICAgIFxkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IGNhc2VsZXNzCitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkIGNhc2VsZXNzCitMYXN0IGNvZGUgdW5pdCA9ICdBJyAoY2FzZWxlc3MpCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhYWFBNQorIDA6IGFhYUE1CisgICAgYWFhYTUKKyAwOiBhYWFhNQorCisvKGEqfGIqKVtjZF0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgYyBkIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oYSt8YiopW2NkXS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiBjIGQgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyhhKnxiKylbY2RdL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIGMgZCAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKGErfGIrKVtjZF0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLygoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgKKyAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoCisgKCgoCisgYQorICkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkKKyApKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpCisgKSkpCisvSXgKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMjAzCitPcHRpb25zOiBleHRlbmRlZAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgbGFyZ2UgbmVzdAorTWF0Y2hlZCwgYnV0IHRvbyBtYW55IHN1YnN0cmluZ3MKKyAwOiBhCisgMTogYQorIDI6IGEKKyAzOiBhCisgNDogYQorIDU6IGEKKyA2OiBhCisgNzogYQorIDg6IGEKKyA5OiBhCisxMDogYQorMTE6IGEKKzEyOiBhCisxMzogYQorMTQ6IGEKKworL2EqXGQvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhKisKKyAgICAgICAgXGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hKlxEL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYSoKKyAgICAgICAgXEQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8wKlxkL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgMCoKKyAgICAgICAgXGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8wKlxEL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgMCorCisgICAgICAgIFxECisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYSpccy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIGEqKworICAgICAgICBccworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2EqXFMvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhKgorICAgICAgICBcUworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyAqXHMvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICAgKgorICAgICAgICBccworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyAqXFMvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICAgKisKKyAgICAgICAgXFMKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hKlx3L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYSoKKyAgICAgICAgXHcKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hKlxXL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYSorCisgICAgICAgIFxXCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvPSpcdy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgID0qKworICAgICAgICBcdworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLz0qXFcvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICA9KgorICAgICAgICBcVworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xkKmEvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcZCorCisgICAgICAgIGEKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cZCoyL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXGQqCisgICAgICAgIDIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cZCpcZC9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxkKgorICAgICAgICBcZAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xkKlxEL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXGQqKworICAgICAgICBcRAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xkKlxzL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXGQqKworICAgICAgICBccworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xkKlxTL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXGQqCisgICAgICAgIFxTCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXGQqXHcvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcZCoKKyAgICAgICAgXHcKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cZCpcVy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxkKisKKyAgICAgICAgXFcKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cRCphL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXEQqCisgICAgICAgIGEKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cRCoyL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXEQqKworICAgICAgICAyCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXEQqXGQvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcRCorCisgICAgICAgIFxkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXEQqXEQvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcRCoKKyAgICAgICAgXEQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cRCpccy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxEKgorICAgICAgICBccworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xEKlxTL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXEQqCisgICAgICAgIFxTCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXEQqXHcvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcRCoKKyAgICAgICAgXHcKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cRCpcVy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxEKgorICAgICAgICBcVworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xzKmEvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBccyorCisgICAgICAgIGEKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ccyoyL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHMqKworICAgICAgICAyCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHMqXGQvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBccyorCisgICAgICAgIFxkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHMqXEQvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBccyoKKyAgICAgICAgXEQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ccypccy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxzKgorICAgICAgICBccworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xzKlxTL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHMqKworICAgICAgICBcUworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xzKlx3L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHMqKworICAgICAgICBcdworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xzKlxXL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHMqCisgICAgICAgIFxXCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXFMqYS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxTKgorICAgICAgICBhCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXFMqMi9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxTKgorICAgICAgICAyCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXFMqXGQvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcUyoKKyAgICAgICAgXGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cUypcRC9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxTKgorICAgICAgICBcRAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xTKlxzL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFMqKworICAgICAgICBccworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xTKlxTL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFMqCisgICAgICAgIFxTCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXFMqXHcvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcUyoKKyAgICAgICAgXHcKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cUypcVy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxTKgorICAgICAgICBcVworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x3KmEvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcdyoKKyAgICAgICAgYQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x3KjIvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcdyoKKyAgICAgICAgMgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x3KlxkL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHcqCisgICAgICAgIFxkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHcqXEQvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcdyoKKyAgICAgICAgXEQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cdypccy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx3KisKKyAgICAgICAgXHMKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cdypcUy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx3KgorICAgICAgICBcUworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x3Klx3L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHcqCisgICAgICAgIFx3CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHcqXFcvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcdyorCisgICAgICAgIFxXCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXFcqYS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxXKisKKyAgICAgICAgYQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xXKjIvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcVyorCisgICAgICAgIDIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cVypcZC9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxXKisKKyAgICAgICAgXGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cVypcRC9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxXKgorICAgICAgICBcRAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xXKlxzL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFcqCisgICAgICAgIFxzCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXFcqXFMvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcVyoKKyAgICAgICAgXFMKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cVypcdy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxXKisKKyAgICAgICAgXHcKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cVypcVy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxXKgorICAgICAgICBcVworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teYV0rYS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFteYV0rKworICAgICAgICBhCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15hXSthL0JpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIFteYV0rKworICAgICAvaSBhCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15hXStBL0JpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIFteYV0rKworICAgICAvaSBBCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15hXStiL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW15hXSsKKyAgICAgICAgYgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teYV0rXGQvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXmFdKworICAgICAgICBcZAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2EqW15hXS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIGEqKworICAgICAgICBbXmFdCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD9QPGFiYz54KSg/UDx4eXo+eSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIGFiYyAgIDEKKyAgeHl6ICAgMgorRmlyc3QgY29kZSB1bml0ID0gJ3gnCitMYXN0IGNvZGUgdW5pdCA9ICd5JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgeHlcPWNvcHk9YWJjLGNvcHk9eHl6CisgMDogeHkKKyAxOiB4CisgMjogeQorICBDIHggKDEpIGFiYyAoZ3JvdXAgMSkKKyAgQyB5ICgxKSB4eXogKGdyb3VwIDIpCisKKy8oPzxhYmM+eCkoPyd4eXoneSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIGFiYyAgIDEKKyAgeHl6ICAgMgorRmlyc3QgY29kZSB1bml0ID0gJ3gnCitMYXN0IGNvZGUgdW5pdCA9ICd5JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgeHlcPWNvcHk9YWJjLGNvcHk9eHl6CisgMDogeHkKKyAxOiB4CisgMjogeQorICBDIHggKDEpIGFiYyAoZ3JvdXAgMSkKKyAgQyB5ICgxKSB4eXogKGdyb3VwIDIpCisKKy8oPzxhYmMneCkoPyd4eXoneSkvSQorRmFpbGVkOiBlcnJvciAxNDIgYXQgb2Zmc2V0IDY6IHN5bnRheCBlcnJvciBpbiBzdWJwYXR0ZXJuIG5hbWUgKG1pc3NpbmcgdGVybWluYXRvcikKKworLyg/PGFiYz54KSg/J3h5ej55KS9JCitGYWlsZWQ6IGVycm9yIDE0MiBhdCBvZmZzZXQgMTU6IHN5bnRheCBlcnJvciBpbiBzdWJwYXR0ZXJuIG5hbWUgKG1pc3NpbmcgdGVybWluYXRvcikKKworLyg/UCdhYmMneCkoP1A8eHl6PnkpL0kKK0ZhaWxlZDogZXJyb3IgMTQxIGF0IG9mZnNldCAzOiB1bnJlY29nbml6ZWQgY2hhcmFjdGVyIGFmdGVyICg/UAorCisvXig/Oig/KFpaKWF8YikoPzxaWj5YKSkrLworICAgIGJYYVgKKyAwOiBiWGFYCisgMTogWAorICAgIGJYYlgKKyAwOiBiWAorIDE6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFYYVgKK05vIG1hdGNoCisgICAgYVhiWAorTm8gbWF0Y2gKKworL14oP1A+YWJjKSg/PGFiY2Q+eHh4KS8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCA4OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworL14oP1A+YWJjKSg/PGFiYz54fHkpLworICAgIHh4CisgMDogeHgKKyAxOiB4CisgICAgeHkKKyAwOiB4eQorIDE6IHkKKyAgICB5eQorIDA6IHl5CisgMTogeQorICAgIHl4CisgMDogeXgKKyAxOiB4CisKKy9eKD9QPmFiYykoP1A8YWJjPnh8eSkvCisgICAgeHgKKyAwOiB4eAorIDE6IHgKKyAgICB4eQorIDA6IHh5CisgMTogeQorICAgIHl5CisgMDogeXkKKyAxOiB5CisgICAgeXgKKyAwOiB5eAorIDE6IHgKKworL14oKD8oYWJjKWF8YikoPzxhYmM+eHx5KSkrLworICAgIGJ4YXkKKyAwOiBieGF5CisgMTogYXkKKyAyOiB5CisgICAgYnhieQorIDA6IGJ4CisgMTogYngKKyAyOiB4CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBheGJ5CitObyBtYXRjaAorCisvXigoKD9QPWFiYyl8WCkoPzxhYmM+eHx5KSkrLworICAgIFh4WHh4eAorIDA6IFh4WHh4eAorIDE6IHh4CisgMjogeAorIDM6IHgKKyAgICBYeFh5eXgKKyAwOiBYeFh5eXgKKyAxOiB5eAorIDI6IHkKKyAzOiB4CisgICAgWHhYeXh4CisgMDogWHhYeQorIDE6IFh5CisgMjogWAorIDM6IHkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHgKK05vIG1hdGNoCisKKy9eKD8xKShhYmMpLworICAgIGFiY2FiYworIDA6IGFiY2FiYworIDE6IGFiYworCisvXig/Oig/OlwxfFgpKGF8YikpKy8KKyAgICBYYWFhCisgMDogWGFhYQorIDE6IGEKKyAgICBYYWJhCisgMDogWGEKKyAxOiBhCisKKy9eW1xFXFFhXEUtXFF6XEVdKy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgW2Etel0rKworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15bYVxRXWJjXEVdL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBbXF1hLWNdCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXlthLVxRXEVdL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBbXC1hXQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL14oP1A+YWJjKVsoKV0oPzxhYmM+KS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgUmVjdXJzZQorICAgICAgICBbKCldCisgICAgICAgIENCcmEgMQorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eKCg/KGFiYyl5KVsoKV0oP1A8YWJjPngpKSsvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIENCcmEgMQorICAgICAgICBDb25kCisgICAgICAyIENvbmQgcmVmCisgICAgICAgIHkKKyAgICAgICAgS2V0CisgICAgICAgIFsoKV0KKyAgICAgICAgQ0JyYSAyCisgICAgICAgIHgKKyAgICAgICAgS2V0CisgICAgICAgIEtldFJtYXgKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgKHh5KXgKKyAwOiAoeHkpeAorIDE6IHkpeAorIDI6IHgKKworL14oP1A+YWJjKVxRKClcRSg/PGFiYz4pL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBSZWN1cnNlCisgICAgICAgICgpCisgICAgICAgIENCcmEgMQorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eKD9QPmFiYylbYVxRKF1cRShdKD88YWJjPikvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIFJlY3Vyc2UKKyAgICAgICAgWyhcXWFdCisgICAgICAgIENCcmEgMQorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eKD9QPmFiYykgIyB0aGlzIGlzIChhIGNvbW1lbnQpCisgICg/PGFiYz4pL0J4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgUmVjdXJzZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXlxXKig/Oig/PG9uZT4oPzx0d28+LilcVyooPyZvbmUpXFcqXGs8dHdvPnwpfCg/PHRocmVlPig/PGZvdXI+LilcVyooPyZ0aHJlZSlcVypcaydmb3VyJ3xcVyouXFcqKSlcVyokL0lpCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDQKK01heCBiYWNrIHJlZmVyZW5jZSA9IDQKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgZm91ciAgICA0CisgIG9uZSAgICAgMQorICB0aHJlZSAgIDMKKyAgdHdvICAgICAyCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitDb21waWxlIG9wdGlvbnM6IGNhc2VsZXNzCitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkIGNhc2VsZXNzCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICAxMjIxCisgMDogMTIyMQorIDE6IDEyMjEKKyAyOiAxCisgICAgU2F0YW4sIG9zY2lsbGF0ZSBteSBtZXRhbGxpYyBzb25hdGFzIQorIDA6IFNhdGFuLCBvc2NpbGxhdGUgbXkgbWV0YWxsaWMgc29uYXRhcyEKKyAxOiA8dW5zZXQ+CisgMjogPHVuc2V0PgorIDM6IFNhdGFuLCBvc2NpbGxhdGUgbXkgbWV0YWxsaWMgc29uYXRhcworIDQ6IFMKKyAgICBBIG1hbiwgYSBwbGFuLCBhIGNhbmFsOiBQYW5hbWEhCisgMDogQSBtYW4sIGEgcGxhbiwgYSBjYW5hbDogUGFuYW1hIQorIDE6IDx1bnNldD4KKyAyOiA8dW5zZXQ+CisgMzogQSBtYW4sIGEgcGxhbiwgYSBjYW5hbDogUGFuYW1hCisgNDogQQorICAgIEFibGUgd2FzIEkgZXJlIEkgc2F3IEVsYmEuCisgMDogQWJsZSB3YXMgSSBlcmUgSSBzYXcgRWxiYS4KKyAxOiA8dW5zZXQ+CisgMjogPHVuc2V0PgorIDM6IEFibGUgd2FzIEkgZXJlIEkgc2F3IEVsYmEKKyA0OiBBCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGUgcXVpY2sgYnJvd24gZm94CitObyBtYXRjaAorCisvKD89KFx3KykpXDE6L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIAorICBRIFIgUyBUIFUgViBXIFggWSBaIF8gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IAorTGFzdCBjb2RlIHVuaXQgPSAnOicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFiY2Q6CisgMDogYWJjZDoKKyAxOiBhYmNkCisKKy8oPz0oPydhYmMnXHcrKSlcazxhYmM+Oi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgYWJjICAgMQorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIAorICBRIFIgUyBUIFUgViBXIFggWSBaIF8gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IAorTGFzdCBjb2RlIHVuaXQgPSAnOicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFiY2Q6CisgMDogYWJjZDoKKyAxOiBhYmNkCisKKy8oPydhYmMnYXxiKSg/PGFiYz5kfGUpXGs8YWJjPnsyfS9kdXBuYW1lcworICAgIGFkYWEKKyAwOiBhZGFhCisgMTogYQorIDI6IGQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFkZGQKK05vIG1hdGNoCisgICAgYWRiYgorTm8gbWF0Y2gKKworLyg/J2FiYydhfGIpKD88YWJjPmR8ZSkoPyZhYmMpezJ9L2R1cG5hbWVzCisgICAgYmRhYQorIDA6IGJkYWEKKyAxOiBiCisgMjogZAorICAgIGJkYWIKKyAwOiBiZGFiCisgMTogYgorIDI6IGQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJkZGQKK05vIG1hdGNoCisKKy8oPyg8YmMpKS8KK0ZhaWxlZDogZXJyb3IgMTI2IGF0IG9mZnNldCA2OiBtYWxmb3JtZWQgbnVtYmVyIG9yIG5hbWUgYWZ0ZXIgKD8oCisKKy8oPygnJykpLworRmFpbGVkOiBlcnJvciAxMjggYXQgb2Zmc2V0IDQ6IGFzc2VydGlvbiBleHBlY3RlZCBhZnRlciAoPyggb3IgKD8oP0MpCisKKy8oPygnUicpc3R1ZmYpLworRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDc6IHJlZmVyZW5jZSB0byBub24tZXhpc3RlbnQgc3VicGF0dGVybgorCisvKChhYmMgKD8oUikgKD8oUjEpMSkgKD8oUjIpMikgWCAgfCAgKD8xKSAgKD8yKSAgICg/UikgKSkpIC94CisgICAgYWJjYWJjMVhhYmMyWGFiY1hhYmNhYmMKKyAwOiBhYmNhYmMxWGFiYzJYYWJjWAorIDE6IGFiY2FiYzFYYWJjMlhhYmNYCisgMjogYWJjYWJjMVhhYmMyWGFiY1gKKworLyg/PEE+ICg/J0InIGFiYyAoPyhSKSAoPyhSJkEpMSkgKD8oUiZCKTIpIFggIHwgICg/MSkgICg/MikgICAoP1IpICkpKSAveAorICAgIGFiY2FiYzFYYWJjMlhhYmNYYWJjYWJjCisgMDogYWJjYWJjMVhhYmMyWGFiY1gKKyAxOiBhYmNhYmMxWGFiYzJYYWJjWAorIDI6IGFiY2FiYzFYYWJjMlhhYmNYCisKKy8oPzxBPiAoPydCJyBhYmMgKD8oUikgKD8oUiZDKTEpICg/KFImQikyKSBYICB8ICAoPzEpICAoPzIpICAgKD9SKSApKSkgL3gKK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCAyOTogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKy9eKD8oREVGSU5FKSBhYmMgfCB4eXogKSAveAorRmFpbGVkOiBlcnJvciAxNTQgYXQgb2Zmc2V0IDIyOiBERUZJTkUgZ3JvdXAgY29udGFpbnMgbW9yZSB0aGFuIG9uZSBicmFuY2gKKworLyg/KERFRklORSkgYWJjKSB4eXovSXgKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogZXh0ZW5kZWQKK0ZpcnN0IGNvZGUgdW5pdCA9ICd4JworTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvKGF8KSpcZC8KKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhNFw9b3ZlY3Rvcj0wCisgMDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhNAorIDE6IAorXD0gRXhwZWN0IG5vIG1hdGNoCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYVw9b3ZlY3Rvcj0wCitObyBtYXRjaAorCisvXmEuYi9uZXdsaW5lPWxmCisgICAgYVxyYgorIDA6IGFceDBkYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxuYgorTm8gbWF0Y2gKKworL15hLmIvbmV3bGluZT1jcgorICAgIGFcbmIKKyAwOiBhXHgwYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFccmIKK05vIG1hdGNoCisKKy9eYS5iL25ld2xpbmU9YW55Y3JsZgorICAgIGFceDg1YgorIDA6IGFceDg1YgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxyYgorTm8gbWF0Y2gKKworL15hLmIvbmV3bGluZT1hbnkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcbmIKK05vIG1hdGNoCisgICAgYVxyYgorTm8gbWF0Y2gKKyAgICBhXHg4NWIKK05vIG1hdGNoCisKKy9eYWJjLi9nbXgsbmV3bGluZT1hbnkKKyAgICBhYmMxIFx4MGFhYmMyIFx4MGJhYmMzeHggXHgwY2FiYzQgXHgwZGFiYzV4eCBceDBkXHgwYWFiYzYgXHg4NWFiYzcgSlVOSworIDA6IGFiYzEKKyAwOiBhYmMyCisgMDogYWJjMworIDA6IGFiYzQKKyAwOiBhYmM1CisgMDogYWJjNgorIDA6IGFiYzcKKworL2FiYy4kL2dteCxuZXdsaW5lPWFueQorICAgIGFiYzFceDBhIGFiYzJceDBiIGFiYzNceDBjIGFiYzRceDBkIGFiYzVceDBkXHgwYSBhYmM2XHg4NSBhYmM3IGFiYzkKKyAwOiBhYmMxCisgMDogYWJjMgorIDA6IGFiYzMKKyAwOiBhYmM0CisgMDogYWJjNQorIDA6IGFiYzYKKyAwOiBhYmM5CisKKy9eYVxSYi9ic3I9dW5pY29kZQorICAgIGFcbmIKKyAwOiBhXHgwYWIKKyAgICBhXHJiCisgMDogYVx4MGRiCisgICAgYVxyXG5iCisgMDogYVx4MGRceDBhYgorICAgIGFceDBiYgorIDA6IGFceDBiYgorICAgIGFceDBjYgorIDA6IGFceDBjYgorICAgIGFceDg1YgorIDA6IGFceDg1YgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxuXHJiCitObyBtYXRjaAorCisvXmFcUipiL2Jzcj11bmljb2RlCisgICAgYWIKKyAwOiBhYgorICAgIGFcbmIKKyAwOiBhXHgwYWIKKyAgICBhXHJiCisgMDogYVx4MGRiCisgICAgYVxyXG5iCisgMDogYVx4MGRceDBhYgorICAgIGFceDBiYgorIDA6IGFceDBiYgorICAgIGFceDBjYgorIDA6IGFceDBjYgorICAgIGFceDg1YgorIDA6IGFceDg1YgorICAgIGFcblxyYgorIDA6IGFceDBhXHgwZGIKKyAgICBhXG5cclx4ODVceDBjYgorIDA6IGFceDBhXHgwZFx4ODVceDBjYgorCisvXmFcUitiL2Jzcj11bmljb2RlCisgICAgYVxuYgorIDA6IGFceDBhYgorICAgIGFccmIKKyAwOiBhXHgwZGIKKyAgICBhXHJcbmIKKyAwOiBhXHgwZFx4MGFiCisgICAgYVx4MGJiCisgMDogYVx4MGJiCisgICAgYVx4MGNiCisgMDogYVx4MGNiCisgICAgYVx4ODViCisgMDogYVx4ODViCisgICAgYVxuXHJiCisgMDogYVx4MGFceDBkYgorICAgIGFcblxyXHg4NVx4MGNiCisgMDogYVx4MGFceDBkXHg4NVx4MGNiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYgorTm8gbWF0Y2gKKworL15hXFJ7MSwzfWIvYnNyPXVuaWNvZGUKKyAgICBhXG5iCisgMDogYVx4MGFiCisgICAgYVxuXHJiCisgMDogYVx4MGFceDBkYgorICAgIGFcblxyXHg4NWIKKyAwOiBhXHgwYVx4MGRceDg1YgorICAgIGFcclxuXHJcbmIKKyAwOiBhXHgwZFx4MGFceDBkXHgwYWIKKyAgICBhXHJcblxyXG5cclxuYgorIDA6IGFceDBkXHgwYVx4MGRceDBhXHgwZFx4MGFiCisgICAgYVxuXHJcblxyYgorIDA6IGFceDBhXHgwZFx4MGFceDBkYgorICAgIGFcblxuXHJcbmIKKyAwOiBhXHgwYVx4MGFceDBkXHgwYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcblxuXG5ccmIKK05vIG1hdGNoCisgICAgYVxyCitObyBtYXRjaAorCisvKD8mYWJjKVgoPzxhYmM+UCkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIGFiYyAgIDEKK0xhc3QgY29kZSB1bml0ID0gJ1AnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBhYmNQWFAxMjMKKyAwOiBQWFAKKyAxOiBQCisKKy8oPzEpWCg/PGFiYz5QKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgYWJjICAgMQorTGFzdCBjb2RlIHVuaXQgPSAnUCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGFiY1BYUDEyMworIDA6IFBYUAorIDE6IFAKKworLyg/OmEoPyZhYmMpYikqKD88YWJjPngpLworICAgIDEyM2F4YmF4YmF4Yng0NTYKKyAwOiBheGJheGJheGJ4CisgMTogeAorICAgIDEyM2F4YmF4YmF4YjQ1NgorIDA6IHgKKyAxOiB4CisKKy8oPzphKD8mYWJjKWIpezEsNX0oPzxhYmM+eCkvCisgICAgMTIzYXhiYXhiYXhieDQ1NgorIDA6IGF4YmF4YmF4YngKKyAxOiB4CisKKy8oPzphKD8mYWJjKWIpezIsNX0oPzxhYmM+eCkvCisgICAgMTIzYXhiYXhiYXhieDQ1NgorIDA6IGF4YmF4YmF4YngKKyAxOiB4CisKKy8oPzphKD8mYWJjKWIpezIsfSg/PGFiYz54KS8KKyAgICAxMjNheGJheGJheGJ4NDU2CisgMDogYXhiYXhiYXhieAorIDE6IHgKKworLyhhYmMpKD9pOig/MSkpLworICAgIGRlZmFiY2FiY3h5egorIDA6IGFiY2FiYworIDE6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgREVGYWJjQUJDWFlaCitObyBtYXRjaAorCisvKGFiYykoPzooP2kpKD8xKSkvCisgICAgZGVmYWJjYWJjeHl6CisgMDogYWJjYWJjCisgMTogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBERUZhYmNBQkNYWVoKK05vIG1hdGNoCisKKy9eKGEpXGctMi8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCA3OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworL14oYSlcZy8KK0ZhaWxlZDogZXJyb3IgMTU4IGF0IG9mZnNldCA1OiBhIG51bWJlcmVkIHJlZmVyZW5jZSBtdXN0IG5vdCBiZSB6ZXJvCisKKy9eKGEpXGd7MH0vCitGYWlsZWQ6IGVycm9yIDE1OCBhdCBvZmZzZXQgODogYSBudW1iZXJlZCByZWZlcmVuY2UgbXVzdCBub3QgYmUgemVybworCisvXihhKVxnezMvCitGYWlsZWQ6IGVycm9yIDE1NyBhdCBvZmZzZXQgODogXGcgaXMgbm90IGZvbGxvd2VkIGJ5IGEgYnJhY2VkLCBhbmdsZS1icmFja2V0ZWQsIG9yIHF1b3RlZCBuYW1lL251bWJlciBvciBieSBhIHBsYWluIG51bWJlcgorCisvXihhKVxne2FhfS8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCA5OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworL15hLmIvbmV3bGluZT1sZgorICAgIGFccmIKKyAwOiBhXHgwZGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcbmIKK05vIG1hdGNoCisKKy8uK2Zvby8KKyAgICBhZm9vCisgMDogYWZvbworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHJcbmZvbworTm8gbWF0Y2gKKyAgICBcbmZvbworTm8gbWF0Y2gKKworLy4rZm9vL25ld2xpbmU9Y3JsZgorICAgIGFmb28KKyAwOiBhZm9vCisgICAgXG5mb28KKyAwOiBceDBhZm9vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcclxuZm9vCitObyBtYXRjaAorCisvLitmb28vbmV3bGluZT1hbnkKKyAgICBhZm9vCisgMDogYWZvbworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXG5mb28KK05vIG1hdGNoCisgICAgXHJcbmZvbworTm8gbWF0Y2gKKworLy4rZm9vL3MKKyAgICBhZm9vCisgMDogYWZvbworICAgIFxyXG5mb28KKyAwOiBceDBkXHgwYWZvbworICAgIFxuZm9vCisgMDogXHgwYWZvbworICAgIAorL14kL2dtLG5ld2xpbmU9YW55CisgICAgYWJjXHJccnh5egorIDA6IAorICAgIGFiY1xuXHJ4eXogIAorIDA6IAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiY1xyXG54eXoKK05vIG1hdGNoCisKKy8oP20pXiQvZyxuZXdsaW5lPWFueSxhZnRlcnRleHQKKyAgICBhYmNcclxuXHJcbgorIDA6IAorIDArIFx4MGRceDBhCisKKy8oP20pXiR8XlxyXG4vZyxuZXdsaW5lPWFueSxhZnRlcnRleHQKKyAgICBhYmNcclxuXHJcbgorIDA6IAorIDArIFx4MGRceDBhCisgMDogXHgwZFx4MGEKKyAwKyAKKyAgICAKKy8oP20pJC9nLG5ld2xpbmU9YW55LGFmdGVydGV4dAorICAgIGFiY1xyXG5cclxuCisgMDogCisgMCsgXHgwZFx4MGFceDBkXHgwYQorIDA6IAorIDArIFx4MGRceDBhCisgMDogCisgMCsgCisKKy9hYmMuJC9nbXgsbmV3bGluZT1hbnljcmxmCisgICAgYWJjMVx4MGEgYWJjMlx4MGIgYWJjM1x4MGMgYWJjNFx4MGQgYWJjNVx4MGRceDBhIGFiYzZceDg1IGFiYzkKKyAwOiBhYmMxCisgMDogYWJjNAorIDA6IGFiYzUKKyAwOiBhYmM5CisKKy9eWC9tCisgICAgWEFCQworIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBYQUJDXD1ub3Rib2wKK05vIG1hdGNoCisKKy8oYWJ8YykoPy0xKS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBhYgorICAgICAgICBBbHQKKyAgICAgICAgYworICAgICAgICBLZXQKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBhYmMKKyAwOiBhYmMKKyAxOiBhYgorCisveHkoPysxKShhYmMpL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgeHkKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB4eWFiY2FiYworIDA6IHh5YWJjYWJjCisgMTogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eWFiYyAgCitObyBtYXRjaAorICAgIAorL3goPy0wKXkvCitGYWlsZWQ6IGVycm9yIDE1OCBhdCBvZmZzZXQgNTogYSBudW1iZXJlZCByZWZlcmVuY2UgbXVzdCBub3QgYmUgemVybworCisveCg/LTEpeS8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCA1OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworL3goPyswKXkvCitGYWlsZWQ6IGVycm9yIDE1OCBhdCBvZmZzZXQgNTogYSBudW1iZXJlZCByZWZlcmVuY2UgbXVzdCBub3QgYmUgemVybworCisveCg/KzEpeS8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCA1OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworL14oYWJjKT8oPygtMSlYfFkpL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBCcmF6ZXJvCisgICAgICAgIENCcmEgMQorICAgICAgICBhYmMKKyAgICAgICAgS2V0CisgICAgICAgIENvbmQKKyAgICAgIDEgQ29uZCByZWYKKyAgICAgICAgWAorICAgICAgICBBbHQKKyAgICAgICAgWQorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYWJjWAorIDA6IGFiY1gKKyAxOiBhYmMKKyAgICBZCisgMDogWQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjWSAgIAorTm8gbWF0Y2gKKyAgICAKKy9eKCg/KCsxKVh8WSkoYWJjKSkrL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBDQnJhIDEKKyAgICAgICAgQ29uZAorICAgICAgMiBDb25kIHJlZgorICAgICAgICBYCisgICAgICAgIEFsdAorICAgICAgICBZCisgICAgICAgIEtldAorICAgICAgICBDQnJhIDIKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICBLZXRSbWF4CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFlhYmNYYWJjCisgMDogWWFiY1hhYmMKKyAxOiBYYWJjCisgMjogYWJjCisgICAgWWFiY1hhYmNYYWJjCisgMDogWWFiY1hhYmNYYWJjCisgMTogWGFiYworIDI6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWGFiY1hhYmMgIAorTm8gbWF0Y2gKKworLyg/KC0xKWEpL0IKK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCA2OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworLygoPygtMSlhKSkvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgQ29uZAorICAgICAgMSBDb25kIHJlZgorICAgICAgICBhCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oKD8oLTIpYSkpL0IKK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCA3OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworL14oPygrMSlYfFkpKC4pL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBDb25kCisgICAgICAxIENvbmQgcmVmCisgICAgICAgIFgKKyAgICAgICAgQWx0CisgICAgICAgIFkKKyAgICAgICAgS2V0CisgICAgICAgIENCcmEgMQorICAgICAgICBBbnkKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFkhCisgMDogWSEKKyAxOiAhCisKKy8oPzxBPnRvbXxib24pLVxre0F9LworICAgIHRvbS10b20KKyAwOiB0b20tdG9tCisgMTogdG9tCisgICAgYm9uLWJvbiAKKyAwOiBib24tYm9uCisgMTogYm9uCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB0b20tYm9uICAKK05vIG1hdGNoCisKKy9cZ3tBLworRmFpbGVkOiBlcnJvciAxNDIgYXQgb2Zmc2V0IDQ6IHN5bnRheCBlcnJvciBpbiBzdWJwYXR0ZXJuIG5hbWUgKG1pc3NpbmcgdGVybWluYXRvcikKKworLyg/fChhYmMpfCh4eXopKS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICBBbHQKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIHh5egorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgPmFiYzwKKyAwOiBhYmMKKyAxOiBhYmMKKyAgID54eXo8IAorIDA6IHh5egorIDE6IHh5egorCisvKHgpKD98KGFiYyl8KHh5eikpKHgpL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIHgKKyAgICAgICAgS2V0CisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDIKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICBBbHQKKyAgICAgICAgQ0JyYSAyCisgICAgICAgIHh5egorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIENCcmEgMworICAgICAgICB4CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB4YWJjeAorIDA6IHhhYmN4CisgMTogeAorIDI6IGFiYworIDM6IHgKKyAgICB4eHl6eCAKKyAwOiB4eHl6eAorIDE6IHgKKyAyOiB4eXoKKyAzOiB4CisKKy8oeCkoP3woYWJjKShwcXIpfCh4eXopKSh4KS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICB4CisgICAgICAgIEtldAorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAyCisgICAgICAgIGFiYworICAgICAgICBLZXQKKyAgICAgICAgQ0JyYSAzCisgICAgICAgIHBxcgorICAgICAgICBLZXQKKyAgICAgICAgQWx0CisgICAgICAgIENCcmEgMgorICAgICAgICB4eXoKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBDQnJhIDQKKyAgICAgICAgeAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgeGFiY3BxcngKKyAwOiB4YWJjcHFyeAorIDE6IHgKKyAyOiBhYmMKKyAzOiBwcXIKKyA0OiB4CisgICAgeHh5enggCisgMDogeHh5engKKyAxOiB4CisgMjogeHl6CisgMzogPHVuc2V0PgorIDQ6IHgKKworL1xIKytYL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXEgrKworICAgICAgICBYCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWFhYWAorTm8gbWF0Y2gKKyAgICAKKy9cSCtcaFkvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcSCsrCisgICAgICAgIFxoCisgICAgICAgIFkKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgWFhYWCBZIAorIDA6IFhYWFggWQorCisvXEgrIFkvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcSCsrCisgICAgICAgICBZCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXGgrQS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxoKysKKyAgICAgICAgQQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x2KkIvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcdiorCisgICAgICAgIEIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cVitceDBhL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFYrKworICAgICAgICBceDBhCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvQStcaC9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEErKworICAgICAgICBcaAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyAqXEgvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICAgKisKKyAgICAgICAgXEgKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9BKlx2L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQSorCisgICAgICAgIFx2CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHgwYipcVi9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4MGIqKworICAgICAgICBcVgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xkK1xoL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXGQrKworICAgICAgICBcaAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xkKlx2L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXGQqKworICAgICAgICBcdgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1MrXGhcUytcdi9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFMrKworICAgICAgICBcaAorICAgICAgICBcUysrCisgICAgICAgIFx2CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHd7Myx9XGhcdytcdi9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx3ezN9CisgICAgICAgIFx3KisKKyAgICAgICAgXGgKKyAgICAgICAgXHcrKworICAgICAgICBcdgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xoK1xkXGgrXHdcaCtcU1xoK1xIL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXGgrKworICAgICAgICBcZAorICAgICAgICBcaCsrCisgICAgICAgIFx3CisgICAgICAgIFxoKysKKyAgICAgICAgXFMKKyAgICAgICAgXGgrKworICAgICAgICBcSAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x2K1xkXHYrXHdcditcU1x2K1xWL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHYrKworICAgICAgICBcZAorICAgICAgICBcdisrCisgICAgICAgIFx3CisgICAgICAgIFx2KysKKyAgICAgICAgXFMKKyAgICAgICAgXHYrKworICAgICAgICBcVgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xIK1xoXEgrXGQvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcSCsrCisgICAgICAgIFxoCisgICAgICAgIFxIKworICAgICAgICBcZAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xWK1x2XFYrXHcvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcVisrCisgICAgICAgIFx2CisgICAgICAgIFxWKworICAgICAgICBcdworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1woICg/OiBbXigpXSogfCAoP1IpICkqIFwpL3gKKygwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMDApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKVw9aml0c3RhY2s9MTAyNAorIDA6ICgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMCgwKDAoMDApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKTApMCkwKQorCisvW1xFXUFBQS8KK0ZhaWxlZDogZXJyb3IgMTA2IGF0IG9mZnNldCA3OiBtaXNzaW5nIHRlcm1pbmF0aW5nIF0gZm9yIGNoYXJhY3RlciBjbGFzcworCisvW1xRXEVdQUFBLworRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDk6IG1pc3NpbmcgdGVybWluYXRpbmcgXSBmb3IgY2hhcmFjdGVyIGNsYXNzCisKKy9bXlxFXUFBQS8KK0ZhaWxlZDogZXJyb3IgMTA2IGF0IG9mZnNldCA4OiBtaXNzaW5nIHRlcm1pbmF0aW5nIF0gZm9yIGNoYXJhY3RlciBjbGFzcworCisvW15cUVxFXUFBQS8KK0ZhaWxlZDogZXJyb3IgMTA2IGF0IG9mZnNldCAxMDogbWlzc2luZyB0ZXJtaW5hdGluZyBdIGZvciBjaGFyYWN0ZXIgY2xhc3MKKworL1tcRV5dQUFBLworRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDg6IG1pc3NpbmcgdGVybWluYXRpbmcgXSBmb3IgY2hhcmFjdGVyIGNsYXNzCisKKy9bXFFcRV5dQUFBLworRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDEwOiBtaXNzaW5nIHRlcm1pbmF0aW5nIF0gZm9yIGNoYXJhY3RlciBjbGFzcworCisvQSgqUFJVTkUpQigqU0tJUClDKCpUSEVOKUQoKkNPTU1JVClFKCpGKUYoKkZBSUwpRyg/ISlIKCpBQ0NFUFQpSS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEEKKyAgICAgICAgKlBSVU5FCisgICAgICAgIEIKKyAgICAgICAgKlNLSVAKKyAgICAgICAgQworICAgICAgICAqVEhFTgorICAgICAgICBECisgICAgICAgICpDT01NSVQKKyAgICAgICAgRQorICAgICAgICAqRkFJTAorICAgICAgICBGCisgICAgICAgICpGQUlMCisgICAgICAgIEcKKyAgICAgICAgKkZBSUwKKyAgICAgICAgSAorICAgICAgICAqQUNDRVBUCisgICAgICAgIEkKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eYSsoKkZBSUwpL2F1dG9fY2FsbG91dAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYWFhCistLS0+YWFhYWFhCisgKzAgXiAgICAgICAgICBeCisgKzEgXiAgICAgICAgICBhKworICszIF4gICAgIF4gICAgKCpGQUlMKQorICszIF4gICAgXiAgICAgKCpGQUlMKQorICszIF4gICBeICAgICAgKCpGQUlMKQorICszIF4gIF4gICAgICAgKCpGQUlMKQorICszIF4gXiAgICAgICAgKCpGQUlMKQorICszIF5eICAgICAgICAgKCpGQUlMKQorTm8gbWF0Y2gKKyAgICAKKy9hK2I/YysoKkZBSUwpL2F1dG9fY2FsbG91dAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYmNjYworLS0tPmFhYWJjY2MKKyArMCBeICAgICAgICAgICBhKworICsyIF4gIF4gICAgICAgIGI/CisgKzQgXiAgIF4gICAgICAgYysKKyArNiBeICAgICAgXiAgICAoKkZBSUwpCisgKzYgXiAgICAgXiAgICAgKCpGQUlMKQorICs2IF4gICAgXiAgICAgICgqRkFJTCkKKyArMCAgXiAgICAgICAgICBhKworICsyICBeIF4gICAgICAgIGI/CisgKzQgIF4gIF4gICAgICAgYysKKyArNiAgXiAgICAgXiAgICAoKkZBSUwpCisgKzYgIF4gICAgXiAgICAgKCpGQUlMKQorICs2ICBeICAgXiAgICAgICgqRkFJTCkKKyArMCAgIF4gICAgICAgICBhKworICsyICAgXl4gICAgICAgIGI/CisgKzQgICBeIF4gICAgICAgYysKKyArNiAgIF4gICAgXiAgICAoKkZBSUwpCisgKzYgICBeICAgXiAgICAgKCpGQUlMKQorICs2ICAgXiAgXiAgICAgICgqRkFJTCkKK05vIG1hdGNoCisKKy9hK2I/KCpQUlVORSljKygqRkFJTCkvYXV0b19jYWxsb3V0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFiY2NjCistLS0+YWFhYmNjYworICswIF4gICAgICAgICAgIGErCisgKzIgXiAgXiAgICAgICAgYj8KKyArNCBeICAgXiAgICAgICAoKlBSVU5FKQorKzEyIF4gICBeICAgICAgIGMrCisrMTQgXiAgICAgIF4gICAgKCpGQUlMKQorKzE0IF4gICAgIF4gICAgICgqRkFJTCkKKysxNCBeICAgIF4gICAgICAoKkZBSUwpCisgKzAgIF4gICAgICAgICAgYSsKKyArMiAgXiBeICAgICAgICBiPworICs0ICBeICBeICAgICAgICgqUFJVTkUpCisrMTIgIF4gIF4gICAgICAgYysKKysxNCAgXiAgICAgXiAgICAoKkZBSUwpCisrMTQgIF4gICAgXiAgICAgKCpGQUlMKQorKzE0ICBeICAgXiAgICAgICgqRkFJTCkKKyArMCAgIF4gICAgICAgICBhKworICsyICAgXl4gICAgICAgIGI/CisgKzQgICBeIF4gICAgICAgKCpQUlVORSkKKysxMiAgIF4gXiAgICAgICBjKworKzE0ICAgXiAgICBeICAgICgqRkFJTCkKKysxNCAgIF4gICBeICAgICAoKkZBSUwpCisrMTQgICBeICBeICAgICAgKCpGQUlMKQorTm8gbWF0Y2gKKworL2ErYj8oKkNPTU1JVCljKygqRkFJTCkvYXV0b19jYWxsb3V0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFiY2NjCistLS0+YWFhYmNjYworICswIF4gICAgICAgICAgIGErCisgKzIgXiAgXiAgICAgICAgYj8KKyArNCBeICAgXiAgICAgICAoKkNPTU1JVCkKKysxMyBeICAgXiAgICAgICBjKworKzE1IF4gICAgICBeICAgICgqRkFJTCkKKysxNSBeICAgICBeICAgICAoKkZBSUwpCisrMTUgXiAgICBeICAgICAgKCpGQUlMKQorTm8gbWF0Y2gKKyAgICAKKy9hK2I/KCpTS0lQKWMrKCpGQUlMKS9hdXRvX2NhbGxvdXQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWJjY2NhYWFiY2NjCistLS0+YWFhYmNjY2FhYWJjY2MKKyArMCBeICAgICAgICAgICAgICAgICAgYSsKKyArMiBeICBeICAgICAgICAgICAgICAgYj8KKyArNCBeICAgXiAgICAgICAgICAgICAgKCpTS0lQKQorKzExIF4gICBeICAgICAgICAgICAgICBjKworKzEzIF4gICAgICBeICAgICAgICAgICAoKkZBSUwpCisrMTMgXiAgICAgXiAgICAgICAgICAgICgqRkFJTCkKKysxMyBeICAgIF4gICAgICAgICAgICAgKCpGQUlMKQorICswICAgICAgICBeICAgICAgICAgICBhKworICsyICAgICAgICBeICBeICAgICAgICBiPworICs0ICAgICAgICBeICAgXiAgICAgICAoKlNLSVApCisrMTEgICAgICAgIF4gICBeICAgICAgIGMrCisrMTMgICAgICAgIF4gICAgICBeICAgICgqRkFJTCkKKysxMyAgICAgICAgXiAgICAgXiAgICAgKCpGQUlMKQorKzEzICAgICAgICBeICAgIF4gICAgICAoKkZBSUwpCitObyBtYXRjaAorCisvYStiPygqVEhFTiljKygqRkFJTCkvYXV0b19jYWxsb3V0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFiY2NjCistLS0+YWFhYmNjYworICswIF4gICAgICAgICAgIGErCisgKzIgXiAgXiAgICAgICAgYj8KKyArNCBeICAgXiAgICAgICAoKlRIRU4pCisrMTEgXiAgIF4gICAgICAgYysKKysxMyBeICAgICAgXiAgICAoKkZBSUwpCisrMTMgXiAgICAgXiAgICAgKCpGQUlMKQorKzEzIF4gICAgXiAgICAgICgqRkFJTCkKKyArMCAgXiAgICAgICAgICBhKworICsyICBeIF4gICAgICAgIGI/CisgKzQgIF4gIF4gICAgICAgKCpUSEVOKQorKzExICBeICBeICAgICAgIGMrCisrMTMgIF4gICAgIF4gICAgKCpGQUlMKQorKzEzICBeICAgIF4gICAgICgqRkFJTCkKKysxMyAgXiAgIF4gICAgICAoKkZBSUwpCisgKzAgICBeICAgICAgICAgYSsKKyArMiAgIF5eICAgICAgICBiPworICs0ICAgXiBeICAgICAgICgqVEhFTikKKysxMSAgIF4gXiAgICAgICBjKworKzEzICAgXiAgICBeICAgICgqRkFJTCkKKysxMyAgIF4gICBeICAgICAoKkZBSUwpCisrMTMgICBeICBeICAgICAgKCpGQUlMKQorTm8gbWF0Y2gKKyAgICAKKy9hKCpNQVJLKWIvCitGYWlsZWQ6IGVycm9yIDE2NiBhdCBvZmZzZXQgNzogKCpNQVJLKSBtdXN0IGhhdmUgYW4gYXJndW1lbnQKKworLyg/aTpBezEsfVw2NjY2NjY2NjY2KS8KK0ZhaWxlZDogZXJyb3IgMTYxIGF0IG9mZnNldCAxOTogbnVtYmVyIGlzIHRvbyBiaWcKKworL1xnNjY2NjY2NjY2Ni8KK0ZhaWxlZDogZXJyb3IgMTYxIGF0IG9mZnNldCAxMTogbnVtYmVyIGlzIHRvbyBiaWcKKworL1tcZzY2NjY2NjY2NjZdL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgWzZnXQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/MSlcY1svCitGYWlsZWQ6IGVycm9yIDExNSBhdCBvZmZzZXQgMzogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKy8uK0EvbmV3bGluZT1jcmxmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcclxuQQorTm8gbWF0Y2gKKyAgICAKKy9cbkEvbmV3bGluZT1jcmxmCisgICAgXHJcbkEgCisgMDogXHgwYUEKKworL1tcclxuXUEvbmV3bGluZT1jcmxmCisgICAgXHJcbkEgCisgMDogXHgwYUEKKworLyhccnxcbilBL25ld2xpbmU9Y3JsZgorICAgIFxyXG5BIAorIDA6IFx4MGFBCisgMTogXHgwYQorCisvYSgqQ1IpYi8KK0ZhaWxlZDogZXJyb3IgMTYwIGF0IG9mZnNldCA1OiAoKlZFUkIpIG5vdCByZWNvZ25pemVkIG9yIG1hbGZvcm1lZAorCisvKCpDUilhLmIvCisgICAgYVxuYgorIDA6IGFceDBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxyYiAgCitObyBtYXRjaAorCisvKCpDUilhLmIvbmV3bGluZT1sZgorICAgIGFcbmIKKyAwOiBhXHgwYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFccmIgIAorTm8gbWF0Y2gKKworLygqTEYpYS5iL25ld2xpbmU9Q1JMRgorICAgIGFccmIKKyAwOiBhXHgwZGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcbmIgIAorTm8gbWF0Y2gKKworLygqQ1JMRilhLmIvCisgICAgYVxyYgorIDA6IGFceDBkYgorICAgIGFcbmIgIAorIDA6IGFceDBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxyXG5iICAKK05vIG1hdGNoCisKKy8oKkFOWUNSTEYpYS5iL25ld2xpbmU9Q1IKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFccmIKK05vIG1hdGNoCisgICAgYVxuYiAgCitObyBtYXRjaAorICAgIGFcclxuYiAgCitObyBtYXRjaAorCisvKCpBTlkpYS5iL25ld2xpbmU9Y3IKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFccmIKK05vIG1hdGNoCisgICAgYVxuYiAgCitObyBtYXRjaAorICAgIGFcclxuYiAgCitObyBtYXRjaAorICAgIGFceDg1YiAKK05vIG1hdGNoCisgICAgCisvKCpBTlkpLiovZworICAgIGFiY1xyXG5kZWYKKyAwOiBhYmMKKyAwOiAKKyAwOiBkZWYKKyAwOiAKKworLygqQU5ZQ1JMRikuKi9nCisgICAgYWJjXHJcbmRlZgorIDA6IGFiYworIDA6IAorIDA6IGRlZgorIDA6IAorCisvKCpDUkxGKS4qL2cKKyAgICBhYmNcclxuZGVmCisgMDogYWJjCisgMDogCisgMDogZGVmCisgMDogCisKKy9hXFJiL0ksYnNyPWFueWNybGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorXFIgbWF0Y2hlcyBDUiwgTEYsIG9yIENSTEYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGFccmIKKyAwOiBhXHgwZGIKKyAgICBhXG5iCisgMDogYVx4MGFiCisgICAgYVxyXG5iCisgMDogYVx4MGRceDBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ODViCitObyBtYXRjaAorICAgIGFceDBiYiAgICAgCitObyBtYXRjaAorCisvYVxSYi9JLGJzcj11bmljb2RlCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1xSIG1hdGNoZXMgYW55IFVuaWNvZGUgbmV3bGluZQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYVxyYgorIDA6IGFceDBkYgorICAgIGFcbmIKKyAwOiBhXHgwYWIKKyAgICBhXHJcbmIKKyAwOiBhXHgwZFx4MGFiCisgICAgYVx4ODViCisgMDogYVx4ODViCisgICAgYVx4MGJiICAgICAKKyAwOiBhXHgwYmIKKyAgICAKKy9hXFI/Yi9JLGJzcj1hbnljcmxmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1xSIG1hdGNoZXMgQ1IsIExGLCBvciBDUkxGCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhXHJiCisgMDogYVx4MGRiCisgICAgYVxuYgorIDA6IGFceDBhYgorICAgIGFcclxuYgorIDA6IGFceDBkXHgwYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceDg1YgorTm8gbWF0Y2gKKyAgICBhXHgwYmIgICAgIAorTm8gbWF0Y2gKKworL2FcUj9iL0ksYnNyPXVuaWNvZGUKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorXFIgbWF0Y2hlcyBhbnkgVW5pY29kZSBuZXdsaW5lCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhXHJiCisgMDogYVx4MGRiCisgICAgYVxuYgorIDA6IGFceDBhYgorICAgIGFcclxuYgorIDA6IGFceDBkXHgwYWIKKyAgICBhXHg4NWIKKyAwOiBhXHg4NWIKKyAgICBhXHgwYmIgICAgIAorIDA6IGFceDBiYgorICAgIAorL2FcUnsyLDR9Yi9JLGJzcj1hbnljcmxmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1xSIG1hdGNoZXMgQ1IsIExGLCBvciBDUkxGCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKyAgICBhXHJcblxuYgorIDA6IGFceDBkXHgwYVx4MGFiCisgICAgYVxuXHJccmIKKyAwOiBhXHgwYVx4MGRceDBkYgorICAgIGFcclxuXHJcblxyXG5cclxuYgorIDA6IGFceDBkXHgwYVx4MGRceDBhXHgwZFx4MGFceDBkXHgwYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceDg1XHg4NWIKK05vIG1hdGNoCisgICAgYVx4MGJceDBiYiAgICAgCitObyBtYXRjaAorCisvYVxSezIsNH1iL0ksYnNyPXVuaWNvZGUKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorXFIgbWF0Y2hlcyBhbnkgVW5pY29kZSBuZXdsaW5lCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKyAgICBhXHJccmIKKyAwOiBhXHgwZFx4MGRiCisgICAgYVxuXG5cbmIKKyAwOiBhXHgwYVx4MGFceDBhYgorICAgIGFcclxuXG5cclxyYgorIDA6IGFceDBkXHgwYVx4MGFceDBkXHgwZGIKKyAgICBhXHg4NVx4ODViCisgMDogYVx4ODVceDg1YgorICAgIGFceDBiXHgwYmIgICAgIAorIDA6IGFceDBiXHgwYmIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhXHJcclxyXHJccmIgCitObyBtYXRjaAorIAorLygqQlNSX0FOWUNSTEYpYVxSYi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1xSIG1hdGNoZXMgQ1IsIExGLCBvciBDUkxGCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBhXG5iCisgMDogYVx4MGFiCisgICAgYVxyYiAKKyAwOiBhXHgwZGIKKworLygqQlNSX1VOSUNPREUpYVxSYi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1xSIG1hdGNoZXMgYW55IFVuaWNvZGUgbmV3bGluZQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYVx4ODViCisgMDogYVx4ODViCisKKy8oKkJTUl9BTllDUkxGKSgqQ1JMRilhXFJiL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorXFIgbWF0Y2hlcyBDUiwgTEYsIG9yIENSTEYKK0ZvcmNlZCBuZXdsaW5lIGlzIENSTEYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGFcbmIKKyAwOiBhXHgwYWIKKyAgICBhXHJiIAorIDA6IGFceDBkYgorCisvKCpDUkxGKSgqQlNSX1VOSUNPREUpYVxSYi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1xSIG1hdGNoZXMgYW55IFVuaWNvZGUgbmV3bGluZQorRm9yY2VkIG5ld2xpbmUgaXMgQ1JMRgorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYVx4ODViCisgMDogYVx4ODViCisKKy8oKkNSTEYpKCpCU1JfQU5ZQ1JMRikoKkNSKWFiL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorXFIgbWF0Y2hlcyBDUiwgTEYsIG9yIENSTEYKK0ZvcmNlZCBuZXdsaW5lIGlzIENSCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLyg/PGE+KSg/JikvCitGYWlsZWQ6IGVycm9yIDE2MiBhdCBvZmZzZXQgOTogc3VicGF0dGVybiBuYW1lIGV4cGVjdGVkCisKKy8oPzxhYmM+KSg/JmEpLworRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDEyOiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworLyg/PGE+KSg/JmFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhKS8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCAzMjogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKy8oPystYSkvCitGYWlsZWQ6IGVycm9yIDE2MyBhdCBvZmZzZXQgMzogZGlnaXQgZXhwZWN0ZWQgYWZ0ZXIgKD8rCisKKy8oPy0rYSkvCitGYWlsZWQ6IGVycm9yIDExMSBhdCBvZmZzZXQgMzogdW5yZWNvZ25pemVkIGNoYXJhY3RlciBhZnRlciAoPyBvciAoPy0KKworLyg/KC0xKSkvCitGYWlsZWQ6IGVycm9yIDExNSBhdCBvZmZzZXQgNjogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKy8oPygrMTApKS8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCA3OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworLyg/KDEwKSkvCitGYWlsZWQ6IGVycm9yIDExNSBhdCBvZmZzZXQgNjogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKy8oPygrMikpKCkoKS8KKworLyg/KDIpKSgpKCkvCisKKy9caycnLworRmFpbGVkOiBlcnJvciAxNjIgYXQgb2Zmc2V0IDM6IHN1YnBhdHRlcm4gbmFtZSBleHBlY3RlZAorCisvXGs8Pi8KK0ZhaWxlZDogZXJyb3IgMTYyIGF0IG9mZnNldCAzOiBzdWJwYXR0ZXJuIG5hbWUgZXhwZWN0ZWQKKworL1xre30vCitGYWlsZWQ6IGVycm9yIDE2MiBhdCBvZmZzZXQgMzogc3VicGF0dGVybiBuYW1lIGV4cGVjdGVkCisKKy9cay8KK0ZhaWxlZDogZXJyb3IgMTY5IGF0IG9mZnNldCAxOiBcayBpcyBub3QgZm9sbG93ZWQgYnkgYSBicmFjZWQsIGFuZ2xlLWJyYWNrZXRlZCwgb3IgcXVvdGVkIG5hbWUKKworL1xrYWJjLworRmFpbGVkOiBlcnJvciAxNjkgYXQgb2Zmc2V0IDE6IFxrIGlzIG5vdCBmb2xsb3dlZCBieSBhIGJyYWNlZCwgYW5nbGUtYnJhY2tldGVkLCBvciBxdW90ZWQgbmFtZQorCisvKD9QPSkvCitGYWlsZWQ6IGVycm9yIDE2MiBhdCBvZmZzZXQgNDogc3VicGF0dGVybiBuYW1lIGV4cGVjdGVkCisKKy8oP1A+KS8KK0ZhaWxlZDogZXJyb3IgMTYyIGF0IG9mZnNldCA0OiBzdWJwYXR0ZXJuIG5hbWUgZXhwZWN0ZWQKKworL1tbOmZvbzpdXS8KK0ZhaWxlZDogZXJyb3IgMTMwIGF0IG9mZnNldCAzOiB1bmtub3duIFBPU0lYIGNsYXNzIG5hbWUKKworL1tbOjEyMzQ6XV0vCitGYWlsZWQ6IGVycm9yIDEzMCBhdCBvZmZzZXQgMzogdW5rbm93biBQT1NJWCBjbGFzcyBuYW1lCisKKy9bWzpmXG9vOl1dLworRmFpbGVkOiBlcnJvciAxMzAgYXQgb2Zmc2V0IDM6IHVua25vd24gUE9TSVggY2xhc3MgbmFtZQorCisvW1s6IDpdXS8KK0ZhaWxlZDogZXJyb3IgMTMwIGF0IG9mZnNldCAzOiB1bmtub3duIFBPU0lYIGNsYXNzIG5hbWUKKworL1tbOi4uLjpdXS8KK0ZhaWxlZDogZXJyb3IgMTMwIGF0IG9mZnNldCAzOiB1bmtub3duIFBPU0lYIGNsYXNzIG5hbWUKKworL1tbOmxcb3dlcjpdXS8KK0ZhaWxlZDogZXJyb3IgMTMwIGF0IG9mZnNldCAzOiB1bmtub3duIFBPU0lYIGNsYXNzIG5hbWUKKworL1tbOmFiY1w6XV0vCitGYWlsZWQ6IGVycm9yIDEzMCBhdCBvZmZzZXQgMzogdW5rbm93biBQT1NJWCBjbGFzcyBuYW1lCisKKy9bYWJjWzp4XF1wcXI6XV0vCitGYWlsZWQ6IGVycm9yIDEzMCBhdCBvZmZzZXQgNjogdW5rbm93biBQT1NJWCBjbGFzcyBuYW1lCisKKy9bWzphXGR6Ol1dLworRmFpbGVkOiBlcnJvciAxMzAgYXQgb2Zmc2V0IDM6IHVua25vd24gUE9TSVggY2xhc3MgbmFtZQorCisvKF4oYXxiXGc8LTEnYykpLworRmFpbGVkOiBlcnJvciAxNTcgYXQgb2Zmc2V0IDg6IFxnIGlzIG5vdCBmb2xsb3dlZCBieSBhIGJyYWNlZCwgYW5nbGUtYnJhY2tldGVkLCBvciBxdW90ZWQgbmFtZS9udW1iZXIgb3IgYnkgYSBwbGFpbiBudW1iZXIKKworL14oPysxKSg/PGE+eHx5KXswfXovCisgICAgeHp4eAorIDA6IHh6CisgICAgeXp5eSAKKyAwOiB5egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHh6ICAKK05vIG1hdGNoCisKKy8oXDMpKFwxKShhKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGNhdAorTm8gbWF0Y2gKKworLyhcMykoXDEpKGEpL2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBjYXQKKyAwOiBhCisgMTogCisgMjogCisgMzogYQorICAgIAorL1RBXS8KKyAgICBUaGUgQUNUQV0gY29tZXMgCisgMDogVEFdCisKKy9UQV0vYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIFRoZSBBQ1RBXSBjb21lcyAKKyAwOiBUQV0KKworLyg/MilbXWEoKWJdKGFiYykvCitGYWlsZWQ6IGVycm9yIDExNSBhdCBvZmZzZXQgMzogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisgICAgYWJjYmFiYworCisvKD8yKVteXWEoKWJdKGFiYykvCitGYWlsZWQ6IGVycm9yIDExNSBhdCBvZmZzZXQgMzogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisgICAgYWJjYmFiYworCisvKD8xKVtdYSgpYl0oYWJjKS8KKyAgICBhYmNiYWJjCisgMDogYWJjYmFiYworIDE6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiY1hhYmMKK05vIG1hdGNoCisKKy8oPzEpW15dYSgpYl0oYWJjKS8KKyAgICBhYmNYYWJjCisgMDogYWJjWGFiYworIDE6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiY2JhYmMKK05vIG1hdGNoCisKKy8oPzIpW11hKCliXShhYmMpKHh5eikvCisgICAgeHl6YmFiY3h5egorIDA6IHh5emJhYmN4eXoKKyAxOiBhYmMKKyAyOiB4eXoKKworLyg/Jk4pW11hKD88Tj4pXSg/PE0+YWJjKS8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCA0OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKyAgIGFiYzxhYmMKKworLyg/Jk4pW11hKD88Tj4pXShhYmMpLworRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDQ6IHJlZmVyZW5jZSB0byBub24tZXhpc3RlbnQgc3VicGF0dGVybgorICAgYWJjPGFiYworCisvYVtdYi8KK0ZhaWxlZDogZXJyb3IgMTA2IGF0IG9mZnNldCA0OiBtaXNzaW5nIHRlcm1pbmF0aW5nIF0gZm9yIGNoYXJhY3RlciBjbGFzcworCisvYVteXWIvCitGYWlsZWQ6IGVycm9yIDEwNiBhdCBvZmZzZXQgNTogbWlzc2luZyB0ZXJtaW5hdGluZyBdIGZvciBjaGFyYWN0ZXIgY2xhc3MKKworL2FbXWIvYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIKK05vIG1hdGNoCisKKy9hW10rYi9hbHRfYnN1eCxhbGxvd19lbXB0eV9jbGFzcyxtYXRjaF91bnNldF9iYWNrcmVmLGR1cG5hbWVzCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYiAKK05vIG1hdGNoCisKKy9hW10qK2IvYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIgCitObyBtYXRjaAorCisvYVteXWIvYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGFYYgorIDA6IGFYYgorICAgIGFcbmIgCisgMDogYVx4MGFiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYiAgCitObyBtYXRjaAorICAgIAorL2FbXl0rYi9hbHRfYnN1eCxhbGxvd19lbXB0eV9jbGFzcyxtYXRjaF91bnNldF9iYWNrcmVmLGR1cG5hbWVzCisgICAgYVhiCisgMDogYVhiCisgICAgYVxuWFxuWGIgCisgMDogYVx4MGFYXHgwYVhiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYiAgCitObyBtYXRjaAorCisvYSg/ISliL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYQorICAgICAgICAqRkFJTAorICAgICAgICBiCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD8hKT9hL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQnJhemVybworICAgICAgICBBc3NlcnQgbm90CisgICAgICAgIEtldAorICAgICAgICBhCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGFiCisgMDogYQorCisvYSgqRkFJTCkrYi8KK0ZhaWxlZDogZXJyb3IgMTA5IGF0IG9mZnNldCA4OiBxdWFudGlmaWVyIGRvZXMgbm90IGZvbGxvdyBhIHJlcGVhdGFibGUgaXRlbQorCisvKGFiY3xwcXJ8MTIzKXswfVt4eXpdL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorU3RhcnRpbmcgY29kZSB1bml0czogeCB5IHogCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyg/KD89LipiKWJ8XikvSSxhdXRvX2NhbGxvdXQKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworT3B0aW9uczogYXV0b19jYWxsb3V0CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgIGFkYworLS0tPmFkYworICswIF4gICAgICAgKD8oPz0uKmIpYnxeKQorICsyIF4gICAgICAgKD89LipiKQorICs1IF4gICAgICAgLioKKyArNyBeICBeICAgIGIKKyArNyBeIF4gICAgIGIKKyArNyBeXiAgICAgIGIKKyArNyBeICAgICAgIGIKKysxMSBeICAgICAgIF4KKysxMiBeICAgICAgICkKKysxMyBeICAgICAgIAorIDA6IAorICAgYWJjIAorLS0tPmFiYworICswIF4gICAgICAgKD8oPz0uKmIpYnxeKQorICsyIF4gICAgICAgKD89LipiKQorICs1IF4gICAgICAgLioKKyArNyBeICBeICAgIGIKKyArNyBeIF4gICAgIGIKKyArNyBeXiAgICAgIGIKKyArOCBeIF4gICAgICkKKyArOSBeICAgICAgIGIKKyArMCAgXiAgICAgICg/KD89LipiKWJ8XikKKyArMiAgXiAgICAgICg/PS4qYikKKyArNSAgXiAgICAgIC4qCisgKzcgIF4gXiAgICBiCisgKzcgIF5eICAgICBiCisgKzcgIF4gICAgICBiCisgKzggIF5eICAgICApCisgKzkgIF4gICAgICBiCisrMTAgIF5eICAgICB8CisrMTMgIF5eICAgICAKKyAwOiBiCisgICAKKy8oPyg/PWIpLipifF5kKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKD8oPz0uKmIpLipifF5kKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisveHl6L2F1dG9fY2FsbG91dAorICB4eXogCistLS0+eHl6CisgKzAgXiAgICAgICB4CisgKzEgXl4gICAgICB5CisgKzIgXiBeICAgICB6CisgKzMgXiAgXiAgICAKKyAwOiB4eXoKKyAgYWJjeHl6IAorLS0tPmFiY3h5egorICswICAgIF4gICAgICAgeAorICsxICAgIF5eICAgICAgeQorICsyICAgIF4gXiAgICAgegorICszICAgIF4gIF4gICAgCisgMDogeHl6CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgIGFiYworTm8gbWF0Y2gKKyAgYWJjeHlwcXIgIAorTm8gbWF0Y2gKKyAgCisveHl6L2F1dG9fY2FsbG91dCxub19zdGFydF9vcHRpbWl6ZQorICBhYmN4eXogCistLS0+YWJjeHl6CisgKzAgXiAgICAgICAgICB4CisgKzAgIF4gICAgICAgICB4CisgKzAgICBeICAgICAgICB4CisgKzAgICAgXiAgICAgICB4CisgKzEgICAgXl4gICAgICB5CisgKzIgICAgXiBeICAgICB6CisgKzMgICAgXiAgXiAgICAKKyAwOiB4eXoKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgYWJjCistLS0+YWJjCisgKzAgXiAgICAgICB4CisgKzAgIF4gICAgICB4CisgKzAgICBeICAgICB4CisgKzAgICAgXiAgICB4CitObyBtYXRjaAorICBhYmN4eXBxciAgCistLS0+YWJjeHlwcXIKKyArMCBeICAgICAgICAgICAgeAorICswICBeICAgICAgICAgICB4CisgKzAgICBeICAgICAgICAgIHgKKyArMCAgICBeICAgICAgICAgeAorICsxICAgIF5eICAgICAgICB5CisgKzIgICAgXiBeICAgICAgIHoKKyArMCAgICAgXiAgICAgICAgeAorICswICAgICAgXiAgICAgICB4CisgKzAgICAgICAgXiAgICAgIHgKKyArMCAgICAgICAgXiAgICAgeAorICswICAgICAgICAgXiAgICB4CitObyBtYXRjaAorICAKKy8oKk5PX1NUQVJUX09QVCl4eXovYXV0b19jYWxsb3V0CisgIGFiY3h5egorLS0tPmFiY3h5egorKzE1IF4gICAgICAgICAgeAorKzE1ICBeICAgICAgICAgeAorKzE1ICAgXiAgICAgICAgeAorKzE1ICAgIF4gICAgICAgeAorKzE2ICAgIF5eICAgICAgeQorKzE3ICAgIF4gXiAgICAgegorKzE4ICAgIF4gIF4gICAgCisgMDogeHl6CisgIAorLygqTk9fQVVUT19QT1NTRVNTKWErYi9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIGErCisgICAgICAgIGIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy94eXovYXV0b19jYWxsb3V0LG5vX3N0YXJ0X29wdGltaXplCisgIGFiY3h5eiAKKy0tLT5hYmN4eXoKKyArMCBeICAgICAgICAgIHgKKyArMCAgXiAgICAgICAgIHgKKyArMCAgIF4gICAgICAgIHgKKyArMCAgICBeICAgICAgIHgKKyArMSAgICBeXiAgICAgIHkKKyArMiAgICBeIF4gICAgIHoKKyArMyAgICBeICBeICAgIAorIDA6IHh5egorCisvXiIoKD8oPz1bYV0pW14iXSl8YikqIiQvYXV0b19jYWxsb3V0CisgICAgImFiIgorLS0tPiJhYiIKKyArMCBeICAgICAgICBeCisgKzEgXiAgICAgICAgIgorICsyIF5eICAgICAgICgoPyg/PVthXSlbXiJdKXxiKSoKKyArMyBeXiAgICAgICAoPyg/PVthXSlbXiJdKQorICs1IF5eICAgICAgICg/PVthXSkKKyArOCBeXiAgICAgICBbYV0KKysxMSBeIF4gICAgICApCisrMTIgXl4gICAgICAgW14iXQorKzE2IF4gXiAgICAgICkKKysxNyBeIF4gICAgICB8CisgKzMgXiBeICAgICAgKD8oPz1bYV0pW14iXSkKKyArNSBeIF4gICAgICAoPz1bYV0pCisgKzggXiBeICAgICAgW2FdCisrMTcgXiBeICAgICAgfAorKzIxIF4gXiAgICAgICIKKysxOCBeIF4gICAgICBiCisrMTkgXiAgXiAgICAgKQorICszIF4gIF4gICAgICg/KD89W2FdKVteIl0pCisgKzUgXiAgXiAgICAgKD89W2FdKQorICs4IF4gIF4gICAgIFthXQorKzE3IF4gIF4gICAgIHwKKysyMSBeICBeICAgICAiCisrMjIgXiAgIF4gICAgJAorKzIzIF4gICBeICAgIAorIDA6ICJhYiIKKyAxOiAKKworL14iKCg/KD89W2FdKVteIl0pfGIpKiIkLworICAgICJhYiIKKyAwOiAiYWIiCisgMTogCisKKy9eWCg/NSkoYSkoP3woYil8KHEpKShjKShkKVkvCitGYWlsZWQ6IGVycm9yIDExNSBhdCBvZmZzZXQgNTogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisgICAgWFlhYmNkWQorCisvXlgoPyZOKShhKSg/fChiKXwocSkpKGMpKGQpKD88Tj5ZKS8KKyAgICBYWWFiY2RZCisgMDogWFlhYmNkWQorIDE6IGEKKyAyOiBiCisgMzogYworIDQ6IGQKKyA1OiBZCisgCisvWGF7Miw0fWIvCisgICAgWFw9cHMKK1BhcnRpYWwgbWF0Y2g6IFgKKyAgICBYYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhCisgICAgWGFhXD1wcworUGFydGlhbCBtYXRjaDogWGFhCisgICAgWGFhYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhYWEKKyAgICBYYWFhYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhYWFhCisgICAgCisvWGF7Miw0fT9iLworICAgIFhcPXBzCitQYXJ0aWFsIG1hdGNoOiBYCisgICAgWGFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYQorICAgIFhhYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhYQorICAgIFhhYWFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYWFhCisgICAgWGFhYWFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYWFhYQorICAgIAorL1hhezIsNH0rYi8KKyAgICBYXD1wcworUGFydGlhbCBtYXRjaDogWAorICAgIFhhXD1wcworUGFydGlhbCBtYXRjaDogWGEKKyAgICBYYWFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYWEKKyAgICBYYWFhXD1wcworUGFydGlhbCBtYXRjaDogWGFhYQorICAgIFhhYWFhXD1wcworUGFydGlhbCBtYXRjaDogWGFhYWEKKyAgICAKKy9YXGR7Miw0fWIvCisgICAgWFw9cHMKK1BhcnRpYWwgbWF0Y2g6IFgKKyAgICBYM1w9cHMKK1BhcnRpYWwgbWF0Y2g6IFgzCisgICAgWDMzXD1wcworUGFydGlhbCBtYXRjaDogWDMzCisgICAgWDMzM1w9cHMKK1BhcnRpYWwgbWF0Y2g6IFgzMzMKKyAgICBYMzMzM1w9cHMKK1BhcnRpYWwgbWF0Y2g6IFgzMzMzCisgICAgCisvWFxkezIsNH0/Yi8KKyAgICBYXD1wcworUGFydGlhbCBtYXRjaDogWAorICAgIFgzXD1wcworUGFydGlhbCBtYXRjaDogWDMKKyAgICBYMzNcPXBzCitQYXJ0aWFsIG1hdGNoOiBYMzMKKyAgICBYMzMzXD1wcworUGFydGlhbCBtYXRjaDogWDMzMworICAgIFgzMzMzXD1wcworUGFydGlhbCBtYXRjaDogWDMzMzMKKyAgICAKKy9YXGR7Miw0fStiLworICAgIFhcPXBzCitQYXJ0aWFsIG1hdGNoOiBYCisgICAgWDNcPXBzCitQYXJ0aWFsIG1hdGNoOiBYMworICAgIFgzM1w9cHMKK1BhcnRpYWwgbWF0Y2g6IFgzMworICAgIFgzMzNcPXBzCitQYXJ0aWFsIG1hdGNoOiBYMzMzCisgICAgWDMzMzNcPXBzCitQYXJ0aWFsIG1hdGNoOiBYMzMzMworICAgIAorL1hcRHsyLDR9Yi8KKyAgICBYXD1wcworUGFydGlhbCBtYXRjaDogWAorICAgIFhhXD1wcworUGFydGlhbCBtYXRjaDogWGEKKyAgICBYYWFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYWEKKyAgICBYYWFhXD1wcworUGFydGlhbCBtYXRjaDogWGFhYQorICAgIFhhYWFhXD1wcworUGFydGlhbCBtYXRjaDogWGFhYWEKKyAgICAKKy9YXER7Miw0fT9iLworICAgIFhcPXBzCitQYXJ0aWFsIG1hdGNoOiBYCisgICAgWGFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYQorICAgIFhhYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhYQorICAgIFhhYWFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYWFhCisgICAgWGFhYWFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYWFhYQorICAgIAorL1hcRHsyLDR9K2IvCisgICAgWFw9cHMKK1BhcnRpYWwgbWF0Y2g6IFgKKyAgICBYYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhCisgICAgWGFhXD1wcworUGFydGlhbCBtYXRjaDogWGFhCisgICAgWGFhYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhYWEKKyAgICBYYWFhYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhYWFhCisgICAgCisvWFthYmNdezIsNH1iLworICAgIFhcPXBzCitQYXJ0aWFsIG1hdGNoOiBYCisgICAgWGFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYQorICAgIFhhYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhYQorICAgIFhhYWFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYWFhCisgICAgWGFhYWFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYWFhYQorICAgIAorL1hbYWJjXXsyLDR9P2IvCisgICAgWFw9cHMKK1BhcnRpYWwgbWF0Y2g6IFgKKyAgICBYYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhCisgICAgWGFhXD1wcworUGFydGlhbCBtYXRjaDogWGFhCisgICAgWGFhYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhYWEKKyAgICBYYWFhYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFhhYWFhCisgICAgCisvWFthYmNdezIsNH0rYi8KKyAgICBYXD1wcworUGFydGlhbCBtYXRjaDogWAorICAgIFhhXD1wcworUGFydGlhbCBtYXRjaDogWGEKKyAgICBYYWFcPXBzCitQYXJ0aWFsIG1hdGNoOiBYYWEKKyAgICBYYWFhXD1wcworUGFydGlhbCBtYXRjaDogWGFhYQorICAgIFhhYWFhXD1wcworUGFydGlhbCBtYXRjaDogWGFhYWEKKyAgICAKKy9YW15hXXsyLDR9Yi8KKyAgICBYXD1wcworUGFydGlhbCBtYXRjaDogWAorICAgIFh6XD1wcworUGFydGlhbCBtYXRjaDogWHoKKyAgICBYenpcPXBzCitQYXJ0aWFsIG1hdGNoOiBYenoKKyAgICBYenp6XD1wcworUGFydGlhbCBtYXRjaDogWHp6egorICAgIFh6enp6XD1wcworUGFydGlhbCBtYXRjaDogWHp6enoKKyAgICAKKy9YW15hXXsyLDR9P2IvCisgICAgWFw9cHMKK1BhcnRpYWwgbWF0Y2g6IFgKKyAgICBYelw9cHMKK1BhcnRpYWwgbWF0Y2g6IFh6CisgICAgWHp6XD1wcworUGFydGlhbCBtYXRjaDogWHp6CisgICAgWHp6elw9cHMKK1BhcnRpYWwgbWF0Y2g6IFh6enoKKyAgICBYenp6elw9cHMKK1BhcnRpYWwgbWF0Y2g6IFh6enp6CisgICAgCisvWFteYV17Miw0fStiLworICAgIFhcPXBzCitQYXJ0aWFsIG1hdGNoOiBYCisgICAgWHpcPXBzCitQYXJ0aWFsIG1hdGNoOiBYegorICAgIFh6elw9cHMKK1BhcnRpYWwgbWF0Y2g6IFh6egorICAgIFh6enpcPXBzCitQYXJ0aWFsIG1hdGNoOiBYenp6CisgICAgWHp6enpcPXBzCitQYXJ0aWFsIG1hdGNoOiBYenp6egorICAgIAorLyhZKVhcMXsyLDR9Yi8KKyAgICBZWFw9cHMKK1BhcnRpYWwgbWF0Y2g6IFlYCisgICAgWVhZXD1wcworUGFydGlhbCBtYXRjaDogWVhZCisgICAgWVhZWVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFlYWVkKKyAgICBZWFlZWVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFlYWVlZCisgICAgWVhZWVlZXD1wcworUGFydGlhbCBtYXRjaDogWVhZWVlZCisgICAgCisvKFkpWFwxezIsNH0/Yi8KKyAgICBZWFw9cHMKK1BhcnRpYWwgbWF0Y2g6IFlYCisgICAgWVhZXD1wcworUGFydGlhbCBtYXRjaDogWVhZCisgICAgWVhZWVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFlYWVkKKyAgICBZWFlZWVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFlYWVlZCisgICAgWVhZWVlZXD1wcworUGFydGlhbCBtYXRjaDogWVhZWVlZCisgICAgCisvKFkpWFwxezIsNH0rYi8KKyAgICBZWFw9cHMKK1BhcnRpYWwgbWF0Y2g6IFlYCisgICAgWVhZXD1wcworUGFydGlhbCBtYXRjaDogWVhZCisgICAgWVhZWVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFlYWVkKKyAgICBZWFlZWVw9cHMKK1BhcnRpYWwgbWF0Y2g6IFlYWVlZCisgICAgWVhZWVlZXD1wcworUGFydGlhbCBtYXRjaDogWVhZWVlZCisgICAgCisvXCsrXEtafFxkK1h8OStZL3N0YXJ0Y2hhcgorICAgICsrKysxMjM5OTlcPXBzCitQYXJ0aWFsIG1hdGNoOiAxMjM5OTkKKyAgICArKysrMTIzOTk5WVw9cHMKKyAwOiA5OTlZCisgICAgKysrK1oxMjM0XD1wcworIDA6ICsrKytaCisgICAgXl5eXgorCisvWigqRikvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBaXD1wcworTm8gbWF0Y2gKKyAgICBaQVw9cHMKK05vIG1hdGNoCisgICAgCisvWig/ISkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBaXD1wcworTm8gbWF0Y2gKKyAgICBaQVw9cHMKK05vIG1hdGNoCisKKy9kb2coc2JvZHkpPy8KKyAgICBkb2dzXD1wcworIDA6IGRvZworICAgIGRvZ3NcPXBoCitQYXJ0aWFsIG1hdGNoOiBkb2dzCisgICAgCisvZG9nKHNib2R5KT8/LworICAgIGRvZ3NcPXBzCisgMDogZG9nCisgICAgZG9nc1w9cGgKKyAwOiBkb2cKKworL2RvZ3xkb2dzYm9keS8KKyAgICBkb2dzXD1wcworIDA6IGRvZworICAgIGRvZ3NcPXBoCisgMDogZG9nCisgCisvZG9nc2JvZHl8ZG9nLworICAgIGRvZ3NcPXBzCisgMDogZG9nCisgICAgZG9nc1w9cGgKK1BhcnRpYWwgbWF0Y2g6IGRvZ3MKKworL1xidGhlIGNhdFxiLworICAgIHRoZSBjYXRcPXBzCisgMDogdGhlIGNhdAorICAgIHRoZSBjYXRcPXBoCitQYXJ0aWFsIG1hdGNoOiB0aGUgY2F0CisKKy9hYmMvCisgICBhYmNcPXBzCisgMDogYWJjCisgICBhYmNcPXBoCisgMDogYWJjCisgICAKKy9hYmNcSzEyMy9zdGFydGNoYXIKKyAgICB4eXphYmMxMjNwcXIKKyAwOiBhYmMxMjMKKyAgICBeXl4KKyAgICB4eXphYmMxMlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiYzEyCisgICAgeHl6YWJjMTJcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmMxMgorICAgIAorLyg/PD1hYmMpMTIzLworICAgIHh5emFiYzEyM3BxciAKKyAwOiAxMjMKKyAgICB4eXphYmMxMlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiYzEyCisgICAgICAgICAgICAgICA8PDwKKyAgICB4eXphYmMxMlw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiYzEyCisgICAgICAgICAgICAgICA8PDwKKworL1xiYWJjXGIvCisgICAgKysrYWJjKysrCisgMDogYWJjCisgICAgKysrYWJcPXBzCitQYXJ0aWFsIG1hdGNoOiArYWIKKyAgICAgICAgICAgICAgIDwKKyAgICArKythYlw9cGgKK1BhcnRpYWwgbWF0Y2g6ICthYgorICAgICAgICAgICAgICAgPAorCisvKD8md29yZCkoPyZlbGVtZW50KSg/KERFRklORSkoPzxlbGVtZW50PjxbXm1dW14+XT5bXjxdKSg/PHdvcmQ+XHcqKykpL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBSZWN1cnNlCisgICAgICAgIENvbmQKKyAgICAgICAgQ29uZCBmYWxzZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgPAorICAgICAgICBbXm1dCisgICAgICAgIFtePl0KKyAgICAgICAgPgorICAgICAgICBbXjxdCisgICAgICAgIEtldAorICAgICAgICBDQnJhIDIKKyAgICAgICAgXHcqKworICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD8md29yZCkoPyZlbGVtZW50KSg/KERFRklORSkoPzxlbGVtZW50PjxbXlxkXVtePl0+W148XSkoPzx3b3JkPlx3KispKS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFJlY3Vyc2UKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBDb25kCisgICAgICAgIENvbmQgZmFsc2UKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIDwKKyAgICAgICAgW1x4MDAtLzotXHhmZl0gKG5lZykKKyAgICAgICAgW14+XQorICAgICAgICA+CisgICAgICAgIFtePF0KKyAgICAgICAgS2V0CisgICAgICAgIENCcmEgMgorICAgICAgICBcdyorCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oYWIpKHgoeSl6KGNkKCpBQ0NFUFQpKSlwcS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBhYgorICAgICAgICBLZXQKKyAgICAgICAgQ0JyYSAyCisgICAgICAgIHgKKyAgICAgICAgQ0JyYSAzCisgICAgICAgIHkKKyAgICAgICAgS2V0CisgICAgICAgIHoKKyAgICAgICAgQ0JyYSA0CisgICAgICAgIGNkCisgICAgICAgIENsb3NlIDQKKyAgICAgICAgQ2xvc2UgMgorICAgICAgICAqQUNDRVBUCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgcHEKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hYmNcSy9hZnRlcnRleHQsc3RhcnRjaGFyCisgICAgYWJjZGVmCisgMDogYWJjCisgICAgXl5eCisgMCsgZGVmCisgICAgYWJjZGVmXD1ub3RlbXB0eV9hdHN0YXJ0CisgMDogYWJjCisgICAgXl5eCisgMCsgZGVmCisgICAgeHl6YWJjZGVmXD1ub3RlbXB0eV9hdHN0YXJ0CisgMDogYWJjCisgICAgXl5eCisgMCsgZGVmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkZWZcPW5vdGVtcHR5CitObyBtYXRjaAorICAgIHh5emFiY2RlZlw9bm90ZW1wdHkKK05vIG1hdGNoCisgICAgCisvXig/Oig/PWFiYyl8YWJjXEspL2FmdGVydGV4dCxzdGFydGNoYXIKKyAgICBhYmNkZWYKKyAwOiAKKyAwKyBhYmNkZWYKKyAgICBhYmNkZWZcPW5vdGVtcHR5X2F0c3RhcnQKKyAwOiBhYmMKKyAgICBeXl4KKyAwKyBkZWYKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYmNkZWZcPW5vdGVtcHR5CitObyBtYXRjaAorCisvYT9iPy9hZnRlcnRleHQKKyAgICB4eXoKKyAwOiAKKyAwKyB4eXoKKyAgICB4eXphYmMKKyAwOiAKKyAwKyB4eXphYmMKKyAgICB4eXphYmNcPW5vdGVtcHR5CisgMDogYWIKKyAwKyBjCisgICAgeHl6YWJjXD1ub3RlbXB0eV9hdHN0YXJ0CisgMDogCisgMCsgeXphYmMKKyAgICB4eXpcPW5vdGVtcHR5X2F0c3RhcnQKKyAwOiAKKyAwKyB5egorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIHh5elw9bm90ZW1wdHkKK05vIG1hdGNoCisKKy9eYT9iPy9hZnRlcnRleHQKKyAgICB4eXoKKyAwOiAKKyAwKyB4eXoKKyAgICB4eXphYmMKKyAwOiAKKyAwKyB4eXphYmMKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICB4eXphYmNcPW5vdGVtcHR5CitObyBtYXRjaAorICAgIHh5emFiY1w9bm90ZW1wdHlfYXRzdGFydAorTm8gbWF0Y2gKKyAgICB4eXpcPW5vdGVtcHR5X2F0c3RhcnQKK05vIG1hdGNoCisgICAgeHl6XD1ub3RlbXB0eQorTm8gbWF0Y2gKKyAgICAKKy9eKD88bmFtZT5hfGJcZzxuYW1lPmMpLworICAgIGFhYWEKKyAwOiBhCisgMTogYQorICAgIGJhY3h4eAorIDA6IGJhYworIDE6IGJhYworICAgIGJiYWNjeHh4IAorIDA6IGJiYWNjCisgMTogYmJhY2MKKyAgICBiYmJhY2NjeHgKKyAwOiBiYmJhY2NjCisgMTogYmJiYWNjYworCisvXig/PG5hbWU+YXxiXGcnbmFtZSdjKS8KKyAgICBhYWFhCisgMDogYQorIDE6IGEKKyAgICBiYWN4eHgKKyAwOiBiYWMKKyAxOiBiYWMKKyAgICBiYmFjY3h4eCAKKyAwOiBiYmFjYworIDE6IGJiYWNjCisgICAgYmJiYWNjY3h4CisgMDogYmJiYWNjYworIDE6IGJiYmFjY2MKKworL14oYXxiXGc8MT5jKS8KKyAgICBhYWFhCisgMDogYQorIDE6IGEKKyAgICBiYWN4eHgKKyAwOiBiYWMKKyAxOiBiYWMKKyAgICBiYmFjY3h4eCAKKyAwOiBiYmFjYworIDE6IGJiYWNjCisgICAgYmJiYWNjY3h4CisgMDogYmJiYWNjYworIDE6IGJiYmFjY2MKKworL14oYXxiXGcnMSdjKS8KKyAgICBhYWFhCisgMDogYQorIDE6IGEKKyAgICBiYWN4eHgKKyAwOiBiYWMKKyAxOiBiYWMKKyAgICBiYmFjY3h4eCAKKyAwOiBiYmFjYworIDE6IGJiYWNjCisgICAgYmJiYWNjY3h4CisgMDogYmJiYWNjYworIDE6IGJiYmFjY2MKKworL14oYXxiXGcnLTEnYykvCisgICAgYWFhYQorIDA6IGEKKyAxOiBhCisgICAgYmFjeHh4CisgMDogYmFjCisgMTogYmFjCisgICAgYmJhY2N4eHggCisgMDogYmJhY2MKKyAxOiBiYmFjYworICAgIGJiYmFjY2N4eAorIDA6IGJiYmFjY2MKKyAxOiBiYmJhY2NjCisKKy8oXihhfGJcZzwtMT5jKSkvCisgICAgYWFhYQorIDA6IGEKKyAxOiBhCisgMjogYQorICAgIGJhY3h4eAorIDA6IGJhYworIDE6IGJhYworIDI6IGJhYworICAgIGJiYWNjeHh4IAorIDA6IGJiYWNjCisgMTogYmJhY2MKKyAyOiBiYmFjYworICAgIGJiYmFjY2N4eAorIDA6IGJiYmFjY2MKKyAxOiBiYmJhY2NjCisgMjogYmJiYWNjYworCisvKD8taTpcZzxuYW1lPikoP2k6KD88bmFtZT5hKSkvCisgICAgWGFhWAorIDA6IGFhCisgMTogYQorICAgIFhBQVggCisgMDogQUEKKyAxOiBBCisKKy8oP2k6XGc8bmFtZT4pKD8taTooPzxuYW1lPmEpKS8KKyAgICBYYWFYCisgMDogYWEKKyAxOiBhCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgWEFBWCAKK05vIG1hdGNoCisKKy8oPy1pOlxnPCsxPikoP2k6KGEpKS8KKyAgICBYYWFYCisgMDogYWEKKyAxOiBhCisgICAgWEFBWCAKKyAwOiBBQQorIDE6IEEKKworLyg/PSg/PHJlZ2V4Pig/I3NpbXBsZXN5bnRheClcJCg/PG5hbWU+W2EtekEtWl9ceHs3Zn0tXHh7ZmZ9XVthLXpBLVowLTlfXHh7N2Z9LVx4e2ZmfV0qKSg/OlxbKD88aW5kZXg+W2EtekEtWjAtOV9ceHs3Zn0tXHh7ZmZ9XSt8XCRcZzxuYW1lPilcXXwtPlxnPG5hbWU+KFwoLio/XCkpPyk/fCg/I3NpbXBsZSBzeW50YXggd2l0aGJyYWNlcylcJFx7KD86XGc8bmFtZT4oPzxpbmRpY2VzPlxbKD86XGc8aW5kZXg+fCcoPzpcXC58W14nXFxdKSonfCIoPzpcZzxyZWdleD58XFwufFteIlxcXSkqIilcXSk/fFxnPGNvbXBsZXg+fFwkXHtcZzxjb21wbGV4Plx9KVx9fCg/I2NvbXBsZXhzeW50YXgpXHsoPzxjb21wbGV4PlwkKD88c2VnbWVudD5cZzxuYW1lPihcZzxpbmRpY2VzPip8XCguKj9cKSk/KSg/Oi0+XGc8c2VnbWVudD4pKnxcJFxnPGNvbXBsZXg+fFwkXHtcZzxjb21wbGV4Plx9KVx9KSlcey8KKworLyg/PG4+YXxifGMpXGc8bj4qLworICAgYWJjCisgMDogYWJjCisgMTogYQorICAgYWNjY2NiYmIgCisgMDogYWNjY2NiYmIKKyAxOiBhCisKKy9eWCg/NykoYSkoP3woYil8KHEpKHIpKHMpKShjKShkKShZKS8KKyAgICBYWWFiY2RZCisgMDogWFlhYmNkWQorIDE6IGEKKyAyOiBiCisgMzogPHVuc2V0PgorIDQ6IDx1bnNldD4KKyA1OiBjCisgNjogZAorIDc6IFkKKworLyg/PD1iKD8xKXx6enopKGEpLworICAgIHhiYWF4CisgMDogYQorIDE6IGEKKyAgICB4enp6YXggCisgMDogYQorIDE6IGEKKworLyhhKSg/PD1iXDEpLworRmFpbGVkOiBlcnJvciAxMjUgYXQgb2Zmc2V0IDEwOiBsb29rYmVoaW5kIGFzc2VydGlvbiBpcyBub3QgZml4ZWQgbGVuZ3RoCisKKy8oYSkoPzw9YisoPzEpKS8KK0ZhaWxlZDogZXJyb3IgMTI1IGF0IG9mZnNldCAxMzogbG9va2JlaGluZCBhc3NlcnRpb24gaXMgbm90IGZpeGVkIGxlbmd0aAorCisvKGErKSg/PD1iKD8xKSkvCitGYWlsZWQ6IGVycm9yIDEyNSBhdCBvZmZzZXQgMTQ6IGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIG5vdCBmaXhlZCBsZW5ndGgKKworLyhhKD88PWIoPzEpKSkvCitGYWlsZWQ6IGVycm9yIDEyNSBhdCBvZmZzZXQgMTM6IGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIG5vdCBmaXhlZCBsZW5ndGgKKworLyg/PD1iKD8xKSl4eXovCitGYWlsZWQ6IGVycm9yIDExNSBhdCBvZmZzZXQgODogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKy8oPzw9Yig/MSkpeHl6KGIrKXBxcnN0dXZldy8KK0ZhaWxlZDogZXJyb3IgMTI1IGF0IG9mZnNldCAyNjogbG9va2JlaGluZCBhc3NlcnRpb24gaXMgbm90IGZpeGVkIGxlbmd0aAorCisvKGF8YmMpXDEvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLyhhfGJjKVwxezIsM30vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworLyhhfGJjKSg/MSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLyhhfGJcMSkoYXxiXDEpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy8oYXxiXDEpezJ9L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy8oYXxiYmJiXDEpKGF8YmJiYlwxKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKGF8YmJiYlwxKXsyfS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvXkZyb20gKyhbXiBdKykgK1thLXpBLVpdW2EtekEtWl1bYS16QS1aXSArW2EtekEtWl1bYS16QS1aXVthLXpBLVpdICtbMC05XT9bMC05XSArWzAtOV1bMC05XTpbMC05XVswLTldL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK0xhc3QgY29kZSB1bml0ID0gJzonCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIyCisKKy88dHIoW1x3XFdcc1xkXVtePD5dezAsfSk+PFREKFtcd1xXXHNcZF1bXjw+XXswLH0pPihbXGRdezAsfVwuKSguKikoKDxCUj4oW1x3XFdcc1xkXVtePD5dezAsfSl8W1xzXXswLH0pKTxcL2E+PFwvVEQ+PFREKFtcd1xXXHNcZF1bXjw+XXswLH0pPihbXHdcV1xzXGRdW148Pl17MCx9KTxcL1REPjxURChbXHdcV1xzXGRdW148Pl17MCx9KT4oW1x3XFdcc1xkXVtePD5dezAsfSk8XC9URD48XC9UUj4vSWlzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDExCitPcHRpb25zOiBjYXNlbGVzcyBkb3RhbGwKK0ZpcnN0IGNvZGUgdW5pdCA9ICc8JworTGFzdCBjb2RlIHVuaXQgPSAnPicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNDcKKworIig/Pi4qLylmb28iSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitMYXN0IGNvZGUgdW5pdCA9ICdvJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisKKy8oPyg/PVteYS16XStbYS16XSkgIFxkezJ9LVthLXpdezN9LVxkezJ9ICB8ICBcZHsyfS1cZHsyfS1cZHsyfSApIC9JeAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBleHRlbmRlZAorTGFzdCBjb2RlIHVuaXQgPSAnLScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gOAorCisvKD86KD86KD86KD86KD86KD86KD86KD86KD86KGF8YnxjKSkpKSkpKSkpKS9JaQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiBjYXNlbGVzcworU3RhcnRpbmcgY29kZSB1bml0czogQSBCIEMgYSBiIGMgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyg/OmN8ZCkoPzopKD86YWFhYWFhYWEoPzopKD86YmJiYmJiYmIpKD86YmJiYmJiYmIoPzopKSg/OmJiYmJiYmJiKD86KSg/OmJiYmJiYmJiKSkpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogYyBkIAorTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNDEKKworLzxhW1xzXStocmVmW1xzXSo9W1xzXSogICAgICAgICAgIyBmaW5kIDxhIGhyZWY9CisgKFtcIlwnXSk/ICAgICAgICAgICAgICAgICAgICAgICAjIGZpbmQgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZQorICg/KDEpICguKj8pXDEgfCAoW15cc10rKSkgICAgICAgIyBpZiBxdW90ZSBmb3VuZCwgbWF0Y2ggdXAgdG8gbmV4dCBtYXRjaGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBxdW90ZSwgb3RoZXJ3aXNlIG1hdGNoIHVwIHRvIG5leHQgc3BhY2UKKy9JaXN4CitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK09wdGlvbnM6IGNhc2VsZXNzIGRvdGFsbCBleHRlbmRlZAorRmlyc3QgY29kZSB1bml0ID0gJzwnCitMYXN0IGNvZGUgdW5pdCA9ICc9JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA5CisKKy9eKD8hOikgICAgICAgICAgICAgICAgICAgICAgICMgY29sb24gZGlzYWxsb3dlZCBhdCBzdGFydAorICAoPzogICAgICAgICAgICAgICAgICAgICAgICAgIyBzdGFydCBvZiBpdGVtCisgICAgKD86IFswLTlhLWZdezEsNH0gfCAgICAgICAjIDEtNCBoZXggZGlnaXRzIG9yCisgICAgKD8oMSkwIHwgKCkgKSApICAgICAgICAgICAjIGlmIG51bGwgcHJldmlvdXNseSBtYXRjaGVkLCBmYWlsOyBlbHNlIG51bGwKKyAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICMgZm9sbG93ZWQgYnkgY29sb24KKyAgKXsxLDd9ICAgICAgICAgICAgICAgICAgICAgICMgZW5kIGl0ZW07IDEtNyBvZiB0aGVtIHJlcXVpcmVkICAgICAgICAgICAgICAgCisgIFswLTlhLWZdezEsNH0gJCAgICAgICAgICAgICAjIGZpbmFsIGhleCBudW1iZXIgYXQgZW5kIG9mIHN0cmluZworICAoPygxKXwuKSAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRoZXJlIHdhcyBhbiBlbXB0eSBjb21wb25lbnQKKyAgL0lpeAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitDb21waWxlIG9wdGlvbnM6IGNhc2VsZXNzIGV4dGVuZGVkCitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkIGNhc2VsZXNzIGV4dGVuZGVkCitMYXN0IGNvZGUgdW5pdCA9ICc6JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy8oP3woPzxhPkEpfCg/PGE+QikpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBhICAgMQorU3RhcnRpbmcgY29kZSB1bml0czogQSBCIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgQUJcPWNvcHk9YQorIDA6IEEKKyAxOiBBCisgIEMgQSAoMSkgYSAoZ3JvdXAgMSkKKyAgICBCQVw9Y29weT1hCisgMDogQgorIDE6IEIKKyAgQyBCICgxKSBhIChncm91cCAxKQorCisvKD98KD88YT5BKXwoPzxiPkIpKS8KK0ZhaWxlZDogZXJyb3IgMTY1IGF0IG9mZnNldCAxNTogZGlmZmVyZW50IG5hbWVzIGZvciBzdWJwYXR0ZXJucyBvZiB0aGUgc2FtZSBudW1iZXIgYXJlIG5vdCBhbGxvd2VkCisKKy8oPzphKD88cXVvdGU+ICg/PGFwb3N0cm9waGU+Jyl8KD88cmVhbHF1b3RlPiIpKSB8CisgICAgYig/PHF1b3RlPiAoPzxhcG9zdHJvcGhlPicpfCg/PHJlYWxxdW90ZT4iKSkgKSAKKyAgICAoPygncXVvdGUnKVthLXpdK3xbMC05XSspL0l4LGR1cG5hbWVzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDYKK01heCBiYWNrIHJlZmVyZW5jZSA9IDQKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgYXBvc3Ryb3BoZSAgIDIKKyAgYXBvc3Ryb3BoZSAgIDUKKyAgcXVvdGUgICAgICAgIDEKKyAgcXVvdGUgICAgICAgIDQKKyAgcmVhbHF1b3RlICAgIDMKKyAgcmVhbHF1b3RlICAgIDYKK09wdGlvbnM6IGR1cG5hbWVzIGV4dGVuZGVkCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBhImFhYWFhCisgMDogYSJhYWFhYQorIDE6ICIKKyAyOiA8dW5zZXQ+CisgMzogIgorICAgIGIiYWFhYWEgCisgMDogYiJhYWFhYQorIDE6IDx1bnNldD4KKyAyOiA8dW5zZXQ+CisgMzogPHVuc2V0PgorIDQ6ICIKKyA1OiA8dW5zZXQ+CisgNjogIgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGIiMTExMTEKK05vIG1hdGNoCisgICAgYSIxMTExMSAKK05vIG1hdGNoCisgICAgCisvXig/fChhKShiKShjKSg/PEQ+ZCl8KD88RD5lKSkgKD8oJ0QnKVh8WSkvSUJ4LGR1cG5hbWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBhCisgICAgICAgIEtldAorICAgICAgICBDQnJhIDIKKyAgICAgICAgYgorICAgICAgICBLZXQKKyAgICAgICAgQ0JyYSAzCisgICAgICAgIGMKKyAgICAgICAgS2V0CisgICAgICAgIENCcmEgNAorICAgICAgICBkCisgICAgICAgIEtldAorICAgICAgICBBbHQKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGUKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBDb25kCisgICAgICAgIENvbmQgcmVmIDxEPjIKKyAgICAgICAgWAorICAgICAgICBBbHQKKyAgICAgICAgWQorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDQKK01heCBiYWNrIHJlZmVyZW5jZSA9IDQKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgRCAgIDQKKyAgRCAgIDEKK0NvbXBpbGUgb3B0aW9uczogZHVwbmFtZXMgZXh0ZW5kZWQKK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQgZHVwbmFtZXMgZXh0ZW5kZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFiY2RYCisgMDogYWJjZFgKKyAxOiBhCisgMjogYgorIDM6IGMKKyA0OiBkCisgICAgZVgKKyAwOiBlWAorIDE6IGUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RZCitObyBtYXRjaAorICAgIGV5ICAgICAKK05vIG1hdGNoCisgICAgCisvKD88QT5hKSAoYikoYykgICg/PEE+ZCAgKD8oUiZBKSQgfCAoPzQpKSApL0lCeCxkdXBuYW1lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgYQorICAgICAgICBLZXQKKyAgICAgICAgQ0JyYSAyCisgICAgICAgIGIKKyAgICAgICAgS2V0CisgICAgICAgIENCcmEgMworICAgICAgICBjCisgICAgICAgIEtldAorICAgICAgICBDQnJhIDQKKyAgICAgICAgZAorICAgICAgICBDb25kCisgICAgICAgIENvbmQgcmVjdXJzZSA8QT4yCisgICAgICAgICQKKyAgICAgICAgQWx0CisgICAgICAgIFJlY3Vyc2UKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gNAorTWF4IGJhY2sgcmVmZXJlbmNlID0gNAorTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBBICAgMQorICBBICAgNAorT3B0aW9uczogZHVwbmFtZXMgZXh0ZW5kZWQKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnZCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorICAgIGFiY2RkCisgMDogYWJjZGQKKyAxOiBhCisgMjogYgorIDM6IGMKKyA0OiBkZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGRlICAKK05vIG1hdGNoCisKKy9hYmNkKi8KKyAgICB4eHh4YWJjZFw9cHMKKyAwOiBhYmNkCisgICAgeHh4eGFiY2RcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmNkCisKKy9hYmNkKi9pCisgICAgeHh4eGFiY2RcPXBzCisgMDogYWJjZAorICAgIHh4eHhhYmNkXD1waAorUGFydGlhbCBtYXRjaDogYWJjZAorICAgIFhYWFhBQkNEXD1wcworIDA6IEFCQ0QKKyAgICBYWFhYQUJDRFw9cGgKK1BhcnRpYWwgbWF0Y2g6IEFCQ0QKKworL2FiY1xkKi8KKyAgICB4eHh4YWJjMVw9cHMKKyAwOiBhYmMxCisgICAgeHh4eGFiYzFcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmMxCisKKy8oYSliY1wxKi8KKyAgICB4eHh4YWJjYVw9cHMKKyAwOiBhYmNhCisgMTogYQorICAgIHh4eHhhYmNhXD1waAorUGFydGlhbCBtYXRjaDogYWJjYQorCisvYWJjW2RlXSovCisgICAgeHh4eGFiY2RlXD1wcworIDA6IGFiY2RlCisgICAgeHh4eGFiY2RlXD1waAorUGFydGlhbCBtYXRjaDogYWJjZGUKKworIyBUaGlzIGlzIG5vdCBpbiB0aGUgUGVybC1jb21wYXRpYmxlIHRlc3QgYmVjYXVzZSBQZXJsIHNlZW1zIGN1cnJlbnRseSB0byBiZQorIyBicm9rZW4gYW5kIG5vdCBiZWhhdmluZyBhcyBzcGVjaWZpZWQgaW4gdGhhdCBpdCAqZG9lcyogYnVtcGFsb25nIGFmdGVyCisjIGhpdHRpbmcgKCpDT01NSVQpLiAKKworLyg/MSkoQSgqQ09NTUlUKXxCKUQvCisgICAgQUJECisgMDogQUJECisgMTogQgorICAgIFhBQkQKKyAwOiBBQkQKKyAxOiBCCisgICAgQkFECisgMDogQkFECisgMTogQQorICAgIEFCWEFCRCAgCisgMDogQUJECisgMTogQgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIEFCWCAKK05vIG1hdGNoCisgICAgQkFYQkFEICAKK05vIG1hdGNoCisKKy8oXDMpKFwxKShhKS9hbHRfYnN1eCxhbGxvd19lbXB0eV9jbGFzcyxtYXRjaF91bnNldF9iYWNrcmVmLGR1cG5hbWVzCisgICAgY2F0CisgMDogYQorIDE6IAorIDI6IAorIDM6IGEKKworLyhcMykoXDEpKGEpL0ksYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAzCitNYXggYmFjayByZWZlcmVuY2UgPSAzCitPcHRpb25zOiBhbHRfYnN1eCBhbGxvd19lbXB0eV9jbGFzcyBkdXBuYW1lcyBtYXRjaF91bnNldF9iYWNrcmVmCitMYXN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgY2F0CisgMDogYQorIDE6IAorIDI6IAorIDM6IGEKKworLyhcMykoXDEpKGEpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworTWF4IGJhY2sgcmVmZXJlbmNlID0gMworTGFzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgY2F0CitObyBtYXRjaAorCisvaSg/KERFRklORSkoPzxzPmEpKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgcyAgIDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdpJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisgICAgaQorIDA6IGkKKyAgICAKKy8oKWkoPygxKWEpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorRmlyc3QgY29kZSB1bml0ID0gJ2knCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBpYQorIDA6IGlhCisgMTogCisKKy8oP2kpYSg/LWkpYnxjL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgL2kgYQorICAgICAgICBiCisgICAgICAgIEFsdAorICAgICAgICBjCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFhhYlgKKyAwOiBhYgorICAgIFhBYlgKKyAwOiBBYgorICAgIENjQyAKKyAwOiBjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYQUJYICAgCitObyBtYXRjaAorCisvKD9pKWEoP3MpYnxjL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgL2kgYWIKKyAgICAgICAgQWx0CisgICAgIC9pIGMKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oP2kpYSg/cy1pKWJ8Yy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIGEKKyAgICAgICAgYgorICAgICAgICBBbHQKKyAgICAgICAgYworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL14oYWIoY1wxKWR8eCl7Mn0kL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBPbmNlCisgICAgICAgIENCcmEgMQorICAgICAgICBhYgorICAgICAgICBDQnJhIDIKKyAgICAgICAgYworICAgICAgICBcMQorICAgICAgICBLZXQKKyAgICAgICAgZAorICAgICAgICBBbHQKKyAgICAgICAgeAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIE9uY2UKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGFiCisgICAgICAgIENCcmEgMgorICAgICAgICBjCisgICAgICAgIFwxCisgICAgICAgIEtldAorICAgICAgICBkCisgICAgICAgIEFsdAorICAgICAgICB4CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgJAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICB4YWJjeGQKKyAwOiB4YWJjeGQKKyAxOiBhYmN4ZAorIDI6IGN4CisgICAgCisvXig/JnQpKisoPyhERUZJTkUpKD88dD4uKSkkL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBCcmFwb3N6ZXJvCisgICAgICAgIFNCcmFQb3MKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBLZXRScG9zCisgICAgICAgIENvbmQKKyAgICAgICAgQ29uZCBmYWxzZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgQW55CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgJAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL14oPyZ0KSooPyhERUZJTkUpKD88dD4uKSkkL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBCcmF6ZXJvCisgICAgICAgIE9uY2UKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBLZXRSbWF4CisgICAgICAgIENvbmQKKyAgICAgICAgQ29uZCBmYWxzZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgQW55CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgJAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUaGlzIG9uZSBpcyBoZXJlIGJlY2F1c2UgUGVybCBnaXZlcyB0aGUgbWF0Y2ggYXMgImIiIHJhdGhlciB0aGFuICJhYiIuIEkKKyMgYmVsaWV2ZSB0aGlzIHRvIGJlIGEgUGVybCBidWcuCisgICAgICAKKy8oPz5hXEtiKXp8KGFiKS8KKyAgICBhYlw9c3RhcnRjaGFyIAorIDA6IGFiCisgMTogYWIKKworLyg/UDxMMT4oP1A8TDI+MHwpfCg/UD5MMikoP1A+TDEpKS8KKyAgICBhYmNkCisgMDogCisgMTogCisgMjogCisgICAgMGFiYyAKKyAwOiAwCisgMTogMAorIDI6IDAKKworL2FiYygqTUFSSzopcHFyLworRmFpbGVkOiBlcnJvciAxNjYgYXQgb2Zmc2V0IDEwOiAoKk1BUkspIG11c3QgaGF2ZSBhbiBhcmd1bWVudAorCisvYWJjKCo6KXBxci8KK0ZhaWxlZDogZXJyb3IgMTY2IGF0IG9mZnNldCA2OiAoKk1BUkspIG11c3QgaGF2ZSBhbiBhcmd1bWVudAorCisvYWJjKCpGQUlMOjEyMyl4eXovCitGYWlsZWQ6IGVycm9yIDE1OSBhdCBvZmZzZXQgMTM6IGFuIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIGZvciAoKkFDQ0VQVCksICgqRkFJTCksIG9yICgqQ09NTUlUKQorCisjIFRoaXMgc2hvdWxkLCBhbmQgZG9lcywgZmFpbC4gSW4gUGVybCwgaXQgZG9lcyBub3QsIHdoaWNoIEkgdGhpbmsgaXMgYSAKKyMgYnVnIGJlY2F1c2UgcmVwbGFjaW5nIHRoZSBCIGluIHRoZSBwYXR0ZXJuIGJ5IChCfEQpIGRvZXMgbWFrZSBpdCBmYWlsLgorCisvQSgqQ09NTUlUKUIvYWZ0ZXJ0ZXh0LG1hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFDQUJYCitObyBtYXRjaAorCisjIFRoZXNlIHNob3VsZCBiZSBkaWZmZXJlbnQsIGJ1dCBpbiBQZXJsIHRoZXkgYXJlIG5vdCwgd2hpY2ggSSB0aGluaworIyBpcyBhIGJ1ZyBpbiBQZXJsLgorCisvQSgqVEhFTilCfEEoKlRIRU4pQy9tYXJrCisgICAgQUMKKyAwOiBBQworCisvQSgqUFJVTkUpQnxBKCpQUlVORSlDL21hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFDCitObyBtYXRjaAorICAgIAorIyBNYXJrIG5hbWVzIGNhbiBiZSBkdXBsaWNhdGVkLiBQZXJsIGRvZXNuJ3QgZ2l2ZSBhIG1hcmsgZm9yIHRoaXMgb25lLAorIyB0aG91Z2ggUENSRTIgZG9lcy4KKworL15BKCo6QSlCfF5YKCo6QSlZL21hcmsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhBUVEKK05vIG1hdGNoLCBtYXJrID0gQQorICAgIAorIyBDT01NSVQgYXQgdGhlIHN0YXJ0IG9mIGEgcGF0dGVybiBzaG91bGQgYmUgdGhlIHNhbWUgYXMgYW4gYW5jaG9yLiBQZXJsIAorIyBvcHRpbWl6YXRpb25zIGRlZmVhdCB0aGlzLiBTbyBkb2VzIHRoZSBQQ1JFMiBvcHRpbWl6YXRpb24gdW5sZXNzIHdlIGRpc2FibGUKKyMgaXQuCisKKy8oKkNPTU1JVClBQkMvCisgICAgQUJDREVGRworIDA6IEFCQworICAgIAorLygqQ09NTUlUKUFCQy9ub19zdGFydF9vcHRpbWl6ZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgREVGR0FCQworTm8gbWF0Y2gKKyAgICAKKy9eKGFiIChjKygqVEhFTiljZCkgfCB4eXopL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2NjZCAgCitObyBtYXRjaAorCisvXihhYiAoYysoKlBSVU5FKWNkKSB8IHh5eikveAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjY2NkICAKK05vIG1hdGNoCisKKy9eKGFiIChjKygqRkFJTCljZCkgfCB4eXopL3gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2NjZCAgCitObyBtYXRjaAorICAgIAorIyBQZXJsIGdldHMgc29tZSBvZiB0aGVzZSB3cm9uZworCisvKD8+LigqQUNDRVBUKSkqPzUvCisgICAgYWJjZGUKKyAwOiBhCisKKy8oLigqQUNDRVBUKSkqPzUvCisgICAgYWJjZGUKKyAwOiBhCisgMTogYQorCisvKC4oKkFDQ0VQVCkpNS8KKyAgICBhYmNkZQorIDA6IGEKKyAxOiBhCisKKy8oLigqQUNDRVBUKSkqNS8KKyAgICBhYmNkZQorIDA6IGEKKyAxOiBhCisKKy9BXE5CLi9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEEKKyAgICAgICAgQW55CisgICAgICAgIEIKKyAgICAgICAgQW55CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIEFDQkQKKyAwOiBBQ0JECitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBXG5CCitObyBtYXRjaAorICAgIEFDQlxuICAgCitObyBtYXRjaAorCisvQVxOQi4vQnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQQorICAgICAgICBBbnkKKyAgICAgICAgQgorICAgICAgICBBbGxBbnkKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgQUNCRAorIDA6IEFDQkQKKyAgICBBQ0JcbiAKKyAwOiBBQ0JceDBhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBXG5CICAKK05vIG1hdGNoCisgIAorL0FcTkIvbmV3bGluZT1jcmxmCisgICAgQVxuQgorIDA6IEFceDBhQgorICAgIEFcckIKKyAwOiBBXHgwZEIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFcclxuQiAgICAKK05vIG1hdGNoCisKKy9cUitiL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFIrKworICAgICAgICBiCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXFIrXG4vQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcUisKKyAgICAgICAgXHgwYQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xSK1xkL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFIrKworICAgICAgICBcZAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xkKlxSL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXGQqKworICAgICAgICBcUgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xzKlxSL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHMqCisgICAgICAgIFxSCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFx4MjBceDBhCisgMDogIFx4MGEKKyAgICBceDIwXHgwZAorIDA6ICBceDBkCisgICAgXHgyMFx4MGRceDBhCisgMDogIFx4MGRceDBhCisKKy9cUypcUi9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxTKisKKyAgICAgICAgXFIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYVx4MGEKKyAwOiBhXHgwYQorCisvWFxoKlxSL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgWAorICAgICAgICBcaCorCisgICAgICAgIFxSCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIFhceDIwXHgwYQorIDA6IFggXHgwYQorCisvWFxIKlxSL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgWAorICAgICAgICBcSCoKKyAgICAgICAgXFIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgWFx4MGRceDBhCisgMDogWFx4MGRceDBhCisKKy9YXEgrXFIvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBYCisgICAgICAgIFxIKworICAgICAgICBcUgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBYXHgwZFx4MGEKKyAwOiBYXHgwZFx4MGEKKworL1hcSCsrXFIvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBYCisgICAgICAgIFxIKysKKyAgICAgICAgXFIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYXHgwZFx4MGEKK05vIG1hdGNoCisKKy8oPzw9YWJjKWRlZi8KKyAgICBhYmNcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmMKKyAgICAgICAgICAgICAgIDw8PAorCisvYWJjJC8KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBhYmNcPXBzCisgMDogYWJjCisgICAgYWJjXD1waAorUGFydGlhbCBtYXRjaDogYWJjCisKKy9hYmMkL20KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBhYmNcbgorIDA6IGFiYworICAgIGFiY1w9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiYworICAgIGFiY1xuXD1waAorIDA6IGFiYworICAgIGFiY1w9cHMKKyAwOiBhYmMKKyAgICBhYmNcblw9cHMKKyAwOiBhYmMKKworL2FiY1x6LworICAgIGFiYworIDA6IGFiYworICAgIGFiY1w9cHMKKyAwOiBhYmMKKyAgICBhYmNcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmMKKworL2FiY1xaLworICAgIGFiYworIDA6IGFiYworICAgIGFiY1w9cHMKKyAwOiBhYmMKKyAgICBhYmNcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmMKKworL2FiY1xiLworICAgIGFiYworIDA6IGFiYworICAgIGFiY1w9cHMKKyAwOiBhYmMKKyAgICBhYmNcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmMKKworL2FiY1xCLworICAgIGFiY1w9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiYworICAgIGFiY1w9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCitObyBtYXRjaAorCisvLisvCitcPSBCYWQgb2Zmc2V0cworICAgIGFiY1w9b2Zmc2V0PTQKK0ZhaWxlZDogZXJyb3IgLTMzOiBiYWQgb2Zmc2V0IHZhbHVlCisgICAgYWJjXD1vZmZzZXQ9LTQgCisqKiBJbnZhbGlkIHZhbHVlIGluICdvZmZzZXQ9LTQnCitcPSBWYWxpZCBkYXRhCisgICAgYWJjXD1vZmZzZXQ9MAorIDA6IGFiYworICAgIGFiY1w9b2Zmc2V0PTEKKyAwOiBiYworICAgIGFiY1w9b2Zmc2V0PTIKKyAwOiBjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcPW9mZnNldD0zCitObyBtYXRjaAorCisvXlxjxKMvCitGYWlsZWQ6IGVycm9yIDE2OCBhdCBvZmZzZXQgMzogXGMgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHByaW50YWJsZSBBU0NJSSBjaGFyYWN0ZXIKKworLyg/UDxhYm4+KD9QPWFibil4eHgpL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgT25jZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgXDEKKyAgICAgICAgeHh4CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oYVwxeikvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBPbmNlCisgICAgICAgIENCcmEgMQorICAgICAgICBhCisgICAgICAgIFwxCisgICAgICAgIHoKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/UDxhYm4+KD9QPWFibikoPzxiYWRzdHVmeHh4KS9CCitGYWlsZWQ6IGVycm9yIDE0MiBhdCBvZmZzZXQgMjk6IHN5bnRheCBlcnJvciBpbiBzdWJwYXR0ZXJuIG5hbWUgKG1pc3NpbmcgdGVybWluYXRvcikKKworLyg/UDxhYm4+KD9QPWF4bil4eHgpL0IKK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCAxNTogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKy8oP1A8YWJuPig/UD1heG4peHh4KSg/PGF4bj55eSkvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgXDIKKyAgICAgICAgeHh4CisgICAgICAgIEtldAorICAgICAgICBDQnJhIDIKKyAgICAgICAgeXkKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRoZXNlIHRlc3RzIGFyZSBoZXJlIGJlY2F1c2UgUGVybCBnZXRzIHRoZSBmaXJzdCBvbmUgd3JvbmcuIAorCisvKFxSKikoLikvcworICAgIFxyXG4KKyAwOiBceDBkCisgMTogCisgMjogXHgwZAorICAgIFxyXHJcblxuXHIgCisgMDogXHgwZFx4MGRceDBhXHgwYVx4MGQKKyAxOiBceDBkXHgwZFx4MGFceDBhCisgMjogXHgwZAorICAgIFxyXHJcblxuXHJcbiAKKyAwOiBceDBkXHgwZFx4MGFceDBhXHgwZAorIDE6IFx4MGRceDBkXHgwYVx4MGEKKyAyOiBceDBkCisKKy8oXFIpKiguKS9zCisgICAgXHJcbgorIDA6IFx4MGQKKyAxOiA8dW5zZXQ+CisgMjogXHgwZAorICAgIFxyXHJcblxuXHIgCisgMDogXHgwZFx4MGRceDBhXHgwYVx4MGQKKyAxOiBceDBhCisgMjogXHgwZAorICAgIFxyXHJcblxuXHJcbiAKKyAwOiBceDBkXHgwZFx4MGFceDBhXHgwZAorIDE6IFx4MGEKKyAyOiBceDBkCisKKy8oKD8+XHJcbnxcbnxceDBifFxmfFxyfFx4ODUpKikoLikvcworICAgIFxyXG4KKyAwOiBceDBkCisgMTogCisgMjogXHgwZAorICAgIFxyXHJcblxuXHIgCisgMDogXHgwZFx4MGRceDBhXHgwYVx4MGQKKyAxOiBceDBkXHgwZFx4MGFceDBhCisgMjogXHgwZAorICAgIFxyXHJcblxuXHJcbiAKKyAwOiBceDBkXHgwZFx4MGFceDBhXHgwZAorIDE6IFx4MGRceDBkXHgwYVx4MGEKKyAyOiBceDBkCisKKyMgLS0tLS0tLS0tLS0tLSAKKworL15hYmMkL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBhYmMKKyAgICAgICAgJAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15hYmMkL0JtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9tIF4KKyAgICAgICAgYWJjCisgICAgIC9tICQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eKGEpKisoXHcpLworICAgIGFhYWFYCisgMDogYWFhYVgKKyAxOiBhCisgMjogWAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFhYWEKK05vIG1hdGNoCisKKy9eKD86YSkqKyhcdykvCisgICAgYWFhYVgKKyAwOiBhYWFhWAorIDE6IFgKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYWFhCitObyBtYXRjaAorCisvKGEpKysxMjM0L0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmFQb3MgMQorICAgICAgICBhCisgICAgICAgIEtldFJwb3MKKyAgICAgICAgMTIzNAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICc0JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisKKy8oW2FiY10pKysxMjM0L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIGMgCitMYXN0IGNvZGUgdW5pdCA9ICc0JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA1CisKKy8oPzw9KGFiYykrKVgvCitGYWlsZWQ6IGVycm9yIDEyNSBhdCBvZmZzZXQgMTA6IGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIG5vdCBmaXhlZCBsZW5ndGgKKworLyheYWIpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKF5hYikrKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLyheYWJ8XikrL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKF5hYnxeKSsrL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworQ29tcGlsZSBvcHRpb25zOiA8bm9uZT4KK092ZXJhbGwgb3B0aW9uczogYW5jaG9yZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKD86XmFiKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLyg/Ol5hYikrKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLyg/Ol5hYnxeKSsvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy8oPzpeYWJ8XikrKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworLyguKmFiKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLyguKmFiKSsrL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKC4qYWJ8LiopKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKC4qYWJ8LiopKysvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworLyg/Oi4qYWIpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKD86LiphYikrKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLyg/Oi4qYWJ8LiopKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKD86LiphYnwuKikrKy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKD89YSlbYmNkXS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oKD89YSkpW2JjZF0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKCg/PWEpKStbYmNkXS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oKD89YSkpKytbYmNkXS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oPz1hKylbYmNkXS9JaQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBjYXNlbGVzcworRmlyc3QgY29kZSB1bml0ID0gJ2EnIChjYXNlbGVzcykKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKD89YSs/KVtiY2RdL0lpCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGNhc2VsZXNzCitGaXJzdCBjb2RlIHVuaXQgPSAnYScgKGNhc2VsZXNzKQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oPz1hKyspW2JjZF0vSWkKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJyAoY2FzZWxlc3MpCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyg/PWF7M30pW2JjZF0vSWkKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogY2FzZWxlc3MKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJyAoY2FzZWxlc3MpCitMYXN0IGNvZGUgdW5pdCA9ICdhJyAoY2FzZWxlc3MpCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyhhYmMpXDErLworCisjIFBlcmwgZG9lc24ndCBnZXQgdGhlc2UgcmlnaHQgSU1PICh0aGUgM3JkIGlzIFBDUkUyLXNwZWNpZmljKSAKKworLyg/MSkoPzooYigqQUNDRVBUKSkpezB9LworICAgIGIKKyAwOiBiCisKKy8oPzEpKD86KGIoKkFDQ0VQVCkpKXswfWMvCisgICAgYmMKKyAwOiBiYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGIgCitObyBtYXRjaAorCisvKD8xKSg/OigoKkFDQ0VQVCkpKXswfWMvCisgICAgYworIDA6IGMKKyAgICBjXD1ub3RlbXB0eQorIDA6IGMKKworL14uKj8oPyg/PWEpYXxiKCpUSEVOKWMpLworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGJhCitObyBtYXRjaAorCisvXi4qPyg/KD89YSlhfGJjKS8KKyAgICBiYQorIDA6IGJhCisKKy9eLio/KD8oPz1hKWEoKlRIRU4pYnxjKS8KK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYworTm8gbWF0Y2gKKworL14uKj8oPyg/PWEpYSgqVEhFTiliKWMvCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWMKK05vIG1hdGNoCisKKy9eLio/KGEoKlRIRU4pYiljLworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFhYmMKK05vIG1hdGNoCisgICAgCisvXi4qPyAoPzEpIGMgKD8oREVGSU5FKShhKCpUSEVOKWIpKS94CisgICAgYWFiYworIDA6IGFhYmMKKworL14uKj8oYSgqVEhFTilifHopYy8KKyAgICBhYWJjCisgMDogYWFiYworIDE6IGFiCisKKy9eLio/KHp8YSgqVEhFTiliKWMvCisgICAgYWFiYworIDA6IGFhYmMKKyAxOiBhYgorCisjIFRoZXNlIGFyZSBoZXJlIGJlY2F1c2UgdGhleSBhcmUgbm90IFBlcmwtY29tcGF0aWJsZTsgdGhlIHN0dWR5aW5nIG1lYW5zIHRoZQorIyBtYXJrIGlzIG5vdCBzZWVuLgorCisvKCpNQVJLOkEpKCpTS0lQOkIpKEN8WCkvbWFyaworICAgIEMKKyAwOiBDCisgMTogQworTUs6IEEKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBECitObyBtYXRjaCwgbWFyayA9IEEKKyAgICAgCisvKCo6QSlBKygqU0tJUDpBKShCfFopL21hcmsKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBBQUFDCitObyBtYXRjaCwgbWFyayA9IEEKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyIoPz1hKigqQUNDRVBUKWIpYyIKKyAgICBjCisgMDogYworICAgIGNcPW5vdGVtcHR5CisgMDogYworICAgIAorLyg/MSljKD8oREVGSU5FKSgoKkFDQ0VQVCliKSkvCisgICAgYworIDA6IGMKKyAgICBjXD1ub3RlbXB0eQorIDA6IGMKKyAgICAKKy8oPz4oKkFDQ0VQVCliKWMvCisgICAgYworIDA6IAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGNcPW5vdGVtcHR5CitObyBtYXRjaAorCisvKD86KD8+KGEpKSkrYSUvYWxsYWZ0ZXJ0ZXh0CisgICAgJWFhJQorIDA6IGFhJQorIDArIAorIDE6IGEKKyAxKyBhJQorCisvKGEpYnxhYy9hbGxhZnRlcnRleHQKKyAgICBhY1w9b3ZlY3Rvcj0xCisgMDogYWMKKyAwKyAKKyAgICAKKy8oYSkoYil4fGFiYy9hbGxhZnRlcnRleHQKKyAgICAgYWJjXD1vdmVjdG9yPTIKKyAwOiBhYmMKKyAwKyAKKworLyhhKWJjfChhKShiKVwyLworICAgIGFiY1w9b3ZlY3Rvcj0xCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGFiYworICAgIGFiY1w9b3ZlY3Rvcj0yCisgMDogYWJjCisgMTogYQorICAgIGFiYVw9b3ZlY3Rvcj0xCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGFiYQorICAgIGFiYVw9b3ZlY3Rvcj0yCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGFiYQorIDE6IDx1bnNldD4KKyAgICBhYmFcPW92ZWN0b3I9MworTWF0Y2hlZCwgYnV0IHRvbyBtYW55IHN1YnN0cmluZ3MKKyAwOiBhYmEKKyAxOiA8dW5zZXQ+CisgMjogYQorICAgIGFiYVw9b3ZlY3Rvcj00CisgMDogYWJhCisgMTogPHVuc2V0PgorIDI6IGEKKyAzOiBiCisKKy8oPyhERUZJTkUpKGEoPzIpfGIpKGIoPzEpfGEpKSg/Oig/MSl8KD8yKSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyhhKD8yKXxiKShiKD8xKXxhKSg/Oig/MSl8KD8yKSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworLyhhKD8yKXxiKShiKD8xKXxhKSg/MSkoPzIpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisKKy8oYWJjKSg/MSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2MnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDYKKworLyg/Oihmb28pfChiYXIpfChiYXopKVgvYWxsY2FwdHVyZXMKKyAgICBiYXpmb29YCisgMDogZm9vWAorIDE6IGZvbworIDI6IDx1bnNldD4KKyAzOiA8dW5zZXQ+CisgICAgZm9vYmF6YmFyWAorIDA6IGJhclgKKyAxOiA8dW5zZXQ+CisgMjogYmFyCisgMzogPHVuc2V0PgorICAgIGJhcmZvb1gKKyAwOiBmb29YCisgMTogZm9vCisgMjogPHVuc2V0PgorIDM6IDx1bnNldD4KKyAgICBiYXpYCisgMDogYmF6WAorIDE6IDx1bnNldD4KKyAyOiA8dW5zZXQ+CisgMzogYmF6CisgICAgZm9vYmFyYmF6WCAgICAKKyAwOiBiYXpYCisgMTogPHVuc2V0PgorIDI6IDx1bnNldD4KKyAzOiBiYXoKKyAgICBiYXpmb29YXD1vdmVjdG9yPTAKKyAwOiBmb29YCisgMTogZm9vCisgMjogPHVuc2V0PgorIDM6IDx1bnNldD4KKyAgICBiYXpmb29YXD1vdmVjdG9yPTEKK01hdGNoZWQsIGJ1dCB0b28gbWFueSBzdWJzdHJpbmdzCisgMDogZm9vWAorICAgIGJhemZvb1hcPW92ZWN0b3I9MgorIDA6IGZvb1gKKyAxOiBmb28KKyAgICBiYXpmb29YXD1vdmVjdG9yPTMKKyAwOiBmb29YCisgMTogZm9vCisgMjogPHVuc2V0PgorCisvKD89YWJjKXszfWFiYy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEFzc2VydAorICAgICAgICBhYmMKKyAgICAgICAgS2V0CisgICAgICAgIGFiYworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/PWFiYykrYWJjL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQXNzZXJ0CisgICAgICAgIGFiYworICAgICAgICBLZXQKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD89YWJjKSsrYWJjL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQXNzZXJ0CisgICAgICAgIGFiYworICAgICAgICBLZXQKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD89YWJjKXswfXh5ei9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFNraXAgemVybworICAgICAgICBBc3NlcnQKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICB4eXoKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oPz0oYSkpPy4vQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBCcmF6ZXJvCisgICAgICAgIEFzc2VydAorICAgICAgICBDQnJhIDEKKyAgICAgICAgYQorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEFueQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/PShhKSk/Py4vQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBCcmFtaW56ZXJvCisgICAgICAgIEFzc2VydAorICAgICAgICBDQnJhIDEKKyAgICAgICAgYQorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEFueQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL14oPz0oYSkpezB9Yig/MSkvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIFNraXAgemVybworICAgICAgICBBc3NlcnQKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGEKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBiCisgICAgICAgIFJlY3Vyc2UKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oPyhERUZJTkUpKGEpKT9iKD8xKS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENvbmQKKyAgICAgICAgQ29uZCBmYWxzZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgYQorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIGIKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL14oPz0oPzEpKT9bYXpdKFthYmNdKWQvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIEJyYXplcm8KKyAgICAgICAgQXNzZXJ0CisgICAgICAgIFJlY3Vyc2UKKyAgICAgICAgS2V0CisgICAgICAgIFthel0KKyAgICAgICAgQ0JyYSAxCisgICAgICAgIFthLWNdCisgICAgICAgIEtldAorICAgICAgICBkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXig/IWEpezB9XHcrL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBTa2lwIHplcm8KKyAgICAgICAgQXNzZXJ0IG5vdAorICAgICAgICBhCisgICAgICAgIEtldAorICAgICAgICBcdysrCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD88PShhYmMpKT94eXovQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBCcmF6ZXJvCisgICAgICAgIEFzc2VydEIKKyAgICAgICAgUmV2ZXJzZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgeHl6CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvWzphWzphYmNdYjpdL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgWzpbYS1jXQorICAgICAgICBiOl0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eKGEoKjpBKShkfGUoKjpCKSl6fGFlcSkvYXV0b19jYWxsb3V0CisgICAgYWR6CistLS0+YWR6CisgKzAgXiAgICAgICBeCisgKzEgXiAgICAgICAoYSgqOkEpKGR8ZSgqOkIpKXp8YWVxKQorICsyIF4gICAgICAgYQorICszIF5eICAgICAgKCo6QSkKKyArOCBeXiAgICAgIChkfGUoKjpCKSkKK0xhdGVzdCBNYXJrOiBBCisgKzkgXl4gICAgICBkCisrMTAgXiBeICAgICB8CisrMTggXiBeICAgICB6CisrMTkgXiAgXiAgICB8CisrMjQgXiAgXiAgICAKKyAwOiBhZHoKKyAxOiBhZHoKKyAyOiBkCisgICAgYWV6CistLS0+YWV6CisgKzAgXiAgICAgICBeCisgKzEgXiAgICAgICAoYSgqOkEpKGR8ZSgqOkIpKXp8YWVxKQorICsyIF4gICAgICAgYQorICszIF5eICAgICAgKCo6QSkKKyArOCBeXiAgICAgIChkfGUoKjpCKSkKK0xhdGVzdCBNYXJrOiBBCisgKzkgXl4gICAgICBkCisrMTEgXl4gICAgICBlCisrMTIgXiBeICAgICAoKjpCKQorKzE3IF4gXiAgICAgKQorTGF0ZXN0IE1hcms6IEIKKysxOCBeIF4gICAgIHoKKysxOSBeICBeICAgIHwKKysyNCBeICBeICAgIAorIDA6IGFlegorIDE6IGFlegorIDI6IGUKKyAgICBhZXF3ZXJ0eQorLS0tPmFlcXdlcnR5CisgKzAgXiAgICAgICAgICAgIF4KKyArMSBeICAgICAgICAgICAgKGEoKjpBKShkfGUoKjpCKSl6fGFlcSkKKyArMiBeICAgICAgICAgICAgYQorICszIF5eICAgICAgICAgICAoKjpBKQorICs4IF5eICAgICAgICAgICAoZHxlKCo6QikpCitMYXRlc3QgTWFyazogQQorICs5IF5eICAgICAgICAgICBkCisrMTEgXl4gICAgICAgICAgIGUKKysxMiBeIF4gICAgICAgICAgKCo6QikKKysxNyBeIF4gICAgICAgICAgKQorTGF0ZXN0IE1hcms6IEIKKysxOCBeIF4gICAgICAgICAgegorKzIwIF4gICAgICAgICAgICBhCisrMjEgXl4gICAgICAgICAgIGUKKysyMiBeIF4gICAgICAgICAgcQorKzIzIF4gIF4gICAgICAgICApCisrMjQgXiAgXiAgICAgICAgIAorIDA6IGFlcQorIDE6IGFlcQorCisvLigqRikvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcPXBoCitObyBtYXRjaAorCisvXGJ0eXBlXGJcVyo/XGJ0ZXh0XGJcVyo/XGJqYXZhc2NyaXB0XGIvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXggbG9va2JlaGluZCA9IDEKK0ZpcnN0IGNvZGUgdW5pdCA9ICd0JworTGFzdCBjb2RlIHVuaXQgPSAndCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMTgKKworL1xidHlwZVxiXFcqP1xidGV4dFxiXFcqP1xiamF2YXNjcmlwdFxifFxidXJsXGJcVyo/XGJzaGVsbDp8PGlucHV0XGIuKj9cYnR5cGVcYlxXKj9cYmltYWdlXGJ8XGJvbmtleXVwXGJcVyo/XD0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXggbG9va2JlaGluZCA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDwgbyB0IHUgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDgKKworL2EoKlNLSVApY3xiKCpBQ0NFUFQpfC9JLGFmdGVydGV4dAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICBhCisgMDogCisgMCsgCisKKy9hKCpTS0lQKWN8YigqQUNDRVBUKWNkKCpBQ0NFUFQpfHgvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgeCAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGF4CisgMDogeAorCisnYSooKkFDQ0VQVCliJ2FmdGVydGV4dAorICAgIGFiY1w9bm90ZW1wdHlfYXRzdGFydAorIDA6IGEKKyAwKyBiYworICAgIGJiYlw9bm90ZW1wdHlfYXRzdGFydAorIDA6IAorIDArIGJiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcPW5vdGVtcHR5X2F0c3RhcnQKK05vIG1hdGNoCisKKy8oKkFDQ0VQVClhL0ksYWZ0ZXJ0ZXh0CitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGJheAorIDA6IAorIDArIGJheAorCisveigqQUNDRVBUKWEvSSxhZnRlcnRleHQKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorRmlyc3QgY29kZSB1bml0ID0gJ3onCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICBiYXh6YngKKyAwOiB6CisgMCsgYngKKworL14oPz5hKykoPz4oeispKVx3L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBPbmNlX05DCisgICAgICAgIGErKworICAgICAgICBLZXQKKyAgICAgICAgT25jZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgeisrCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgXHcKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYWFhYXp6enpiCisgMDogYWFhYXp6enpiCisgMTogenp6egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWF6eiAgCitObyBtYXRjaAorCisvKC4pKFwxfGEoPzIpKS8KKyAgICBiYWIKKyAwOiBiYWIKKyAxOiBiCisgMjogYWIKKyAgICAKKy9cMXwoLikoP1IpXDEvCisgICAgY2JiYmMKKyAwOiBjYmJiYworIDE6IGMKKyAgICAKKy8oLikoKD8oMSljfGEpfGEoPzIpKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhYSAgCitObyBtYXRjaAorCisvKD9QPGFibj4oP1A9YWJuKXh4eCkvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBPbmNlCisgICAgICAgIENCcmEgMQorICAgICAgICBcMQorICAgICAgICB4eHgKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyhhXDF6KS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIE9uY2UKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGEKKyAgICAgICAgXDEKKyAgICAgICAgegorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXmFceDQxei9hbHRfYnN1eCxhbGxvd19lbXB0eV9jbGFzcyxtYXRjaF91bnNldF9iYWNrcmVmLGR1cG5hbWVzCisgICAgYUF6CisgMDogYUF6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBheDQxegorTm8gbWF0Y2gKKworL15hW21ceDQxXXovYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGFBegorIDA6IGFBegorCisvXmFceDF6L2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBheDF6CisgMDogYXgxegorCisvXmFcdTAwNDF6L2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBhQXoKKyAwOiBhQXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGF1MDA0MXoKK05vIG1hdGNoCisKKy9eYVttXHUwMDQxXXovYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGFBegorIDA6IGFBegorCisvXmFcdTA0MXovYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGF1MDQxegorIDA6IGF1MDQxegorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYUF6CitObyBtYXRjaAorCisvXmFcVTAwNDF6L2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBhVTAwNDF6CisgMDogYVUwMDQxegorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYUF6CitObyBtYXRjaAorCisvKD8oPz1jKWN8ZCkrK1kvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBCcmFQb3MKKyAgICAgICAgQ29uZAorICAgICAgICBBc3NlcnQKKyAgICAgICAgYworICAgICAgICBLZXQKKyAgICAgICAgYworICAgICAgICBBbHQKKyAgICAgICAgZAorICAgICAgICBLZXQKKyAgICAgICAgS2V0UnBvcworICAgICAgICBZCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD8oPz1jKWN8ZCkqK1kvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBCcmFwb3N6ZXJvCisgICAgICAgIEJyYVBvcworICAgICAgICBDb25kCisgICAgICAgIEFzc2VydAorICAgICAgICBjCisgICAgICAgIEtldAorICAgICAgICBjCisgICAgICAgIEFsdAorICAgICAgICBkCisgICAgICAgIEtldAorICAgICAgICBLZXRScG9zCisgICAgICAgIFkKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hW1xOQl1jLworRmFpbGVkOiBlcnJvciAxNzEgYXQgb2Zmc2V0IDM6IFxOIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYSBjbGFzcworICAgIGFOYworICAgIAorL2FbQi1cTmNdLworRmFpbGVkOiBlcnJvciAxNTAgYXQgb2Zmc2V0IDU6IGludmFsaWQgcmFuZ2UgaW4gY2hhcmFjdGVyIGNsYXNzCisKKy9hW0JcTmNdLworRmFpbGVkOiBlcnJvciAxNzEgYXQgb2Zmc2V0IDQ6IFxOIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYSBjbGFzcworCisvKGEpKD8yKXswLDE5OTl9PyhiKS8KKworLyhhKSg/KERFRklORSkoYikpKD8yKXswLDE5OTl9Pyg/MikvCisKKyMgVGhpcyB0ZXN0LCB3aXRoIHNvbWV0aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gaW5kaXZpZHVhbCBsZXR0ZXJzLCBjYXVzZXMKKyMgZGlmZmVyZW50IGJlaGF2aW91ciBpbiBQZXJsLiBQZXJoYXBzIGl0IGRpc2FibGVzIHNvbWUgb3B0aW1pemF0aW9uOyBubyB0YWcgaXMKKyMgcGFzc2VkIGJhY2sgZm9yIHRoZSBmYWlsdXJlcywgd2hlcmVhcyBpbiBQQ1JFMiB0aGVyZSBpcyBhIHRhZy4KKyAgICAKKy8oQXxQKSgqOkEpKEJ8UCkgfCAoWHxQKShYfFApKCo6QikoWXxQKS94LG1hcmsKKyAgICBBQUJDCisgMDogQUIKKyAxOiBBCisgMjogQgorTUs6IEEKKyAgICBYWFlaIAorIDA6IFhYWQorIDE6IDx1bnNldD4KKyAyOiA8dW5zZXQ+CisgMzogWAorIDQ6IFgKKyA1OiBZCitNSzogQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWEFRUSAgCitObyBtYXRjaCwgbWFyayA9IEEKKyAgICBYQVFRWFpaICAKK05vIG1hdGNoLCBtYXJrID0gQQorICAgIEFYUVFRIAorTm8gbWF0Y2gsIG1hcmsgPSBBCisgICAgQVhYUVFRIAorTm8gbWF0Y2gsIG1hcmsgPSBCCisKKyMgUGVybCBkb2Vzbid0IGdpdmUgbWFya3MgZm9yIHRoZXNlLCB0aG91Z2ggaXQgZG9lcyBpZiB0aGUgYWx0ZXJuYXRpdmVzIGFyZQorIyByZXBsYWNlZCBieSBzaW5nbGUgbGV0dGVycy4gCisgICAgCisvKGJ8cSkoKjptKWZ8YSgqOm4pdy9tYXJrCisgICAgYXcgCisgMDogYXcKK01LOiBuCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWJjCitObyBtYXRjaCwgbWFyayA9IG0KKworLyhxfGIpKCo6bSlmfGEoKjpuKXcvbWFyaworICAgIGF3IAorIDA6IGF3CitNSzogbgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiYworTm8gbWF0Y2gsIG1hcmsgPSBtCisKKyMgQWZ0ZXIgYSBwYXJ0aWFsIG1hdGNoLCB0aGUgYmVoYXZpb3VyIGlzIGFzIGZvciBhIGZhaWx1cmUuIAorCisvXmEoKjpYKWJjZGUvbWFyaworICAgYWJjXD1wcworUGFydGlhbCBtYXRjaCwgbWFyaz1YOiBhYmMKKyAgIAorIyBUaGVzZSBhcmUgaGVyZSBiZWNhdXNlIFBlcmwgZG9lc24ndCByZXR1cm4gYSBtYXJrLCBleGNlcHQgZm9yIHRoZSBmaXJzdC4KKworLyg/PSgqOngpKShxfCkvYWZ0ZXJ0ZXh0LG1hcmsKKyAgICBhYmMKKyAwOiAKKyAwKyBhYmMKKyAxOiAKK01LOiB4CisKKy8oPz0oKjp4KSkoKCo6eSlxfCkvYWZ0ZXJ0ZXh0LG1hcmsKKyAgICBhYmMKKyAwOiAKKyAwKyBhYmMKKyAxOiAKK01LOiB4CisKKy8oPz0oKjp4KSkoPzooKjp5KXF8KS9hZnRlcnRleHQsbWFyaworICAgIGFiYworIDA6IAorIDArIGFiYworTUs6IHgKKworLyg/PSgqOngpKSg/PigqOnkpcXwpL2FmdGVydGV4dCxtYXJrCisgICAgYWJjCisgMDogCisgMCsgYWJjCitNSzogeAorCisvKD89YSgqOngpKSg/IWEoKjp5KWMpL2FmdGVydGV4dCxtYXJrCisgICAgYWIKKyAwOiAKKyAwKyBhYgorTUs6IHgKKworLyg/PWEoKjp4KSkoPz1hKCo6eSljfCkvYWZ0ZXJ0ZXh0LG1hcmsKKyAgICBhYgorIDA6IAorIDArIGFiCitNSzogeAorCisvKC4uKVwxLworICAgIGFiXD1wcworUGFydGlhbCBtYXRjaDogYWIKKyAgICBhYmFcPXBzCitQYXJ0aWFsIG1hdGNoOiBhYmEKKyAgICBhYmFiXD1wcworIDA6IGFiYWIKKyAxOiBhYgorCisvKC4uKVwxL2kKKyAgICBhYlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiCisgICAgYWJBXD1wcworUGFydGlhbCBtYXRjaDogYWJBCisgICAgYUJBYlw9cHMKKyAwOiBhQkFiCisgMTogYUIKKworLyguLilcMXsyLH0vCisgICAgYWJcPXBzCitQYXJ0aWFsIG1hdGNoOiBhYgorICAgIGFiYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiYQorICAgIGFiYWJcPXBzCitQYXJ0aWFsIG1hdGNoOiBhYmFiCisgICAgYWJhYmFcPXBzCitQYXJ0aWFsIG1hdGNoOiBhYmFiYQorICAgIGFiYWJhYlw9cHMKKyAwOiBhYmFiYWIKKyAxOiBhYgorICAgIGFiYWJhYlw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiYWJhYgorICAgIGFiYWJhYmFcPXBzCisgMDogYWJhYmFiCisgMTogYWIKKyAgICBhYmFiYWJhXD1waAorUGFydGlhbCBtYXRjaDogYWJhYmFiYQorCisvKC4uKVwxezIsfS9pCisgICAgYWJcPXBzCitQYXJ0aWFsIG1hdGNoOiBhYgorICAgIGFCYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFCYQorICAgIGFCQWJcPXBzCitQYXJ0aWFsIG1hdGNoOiBhQkFiCisgICAgQWJhQkFcPXBzCitQYXJ0aWFsIG1hdGNoOiBBYmFCQQorICAgIGFiQUJBYlw9cHMKKyAwOiBhYkFCQWIKKyAxOiBhYgorICAgIGFCQWJhQlw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFCQWJhQgorICAgIGFiQUJhYkFcPXBzCisgMDogYWJBQmFiCisgMTogYWIKKyAgICBhYmFCQUJhXD1waAorUGFydGlhbCBtYXRjaDogYWJhQkFCYQorCisvKC4uKVwxezIsfT94L2kKKyAgICBhYlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiCisgICAgYWJBXD1wcworUGFydGlhbCBtYXRjaDogYWJBCisgICAgYUJBYlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFCQWIKKyAgICBhYmFCQVw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiYUJBCisgICAgYWJBYmFCXD1wcworUGFydGlhbCBtYXRjaDogYWJBYmFCCisgICAgYWJhQmFiQVw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiYUJhYkEKKyAgICBhYkFiQUJhQnhcPXBzCisgMDogYWJBYkFCYUJ4CisgMTogYWIKKworL14oLi4pXDEvCisgICAgYWJhXD1wcworUGFydGlhbCBtYXRjaDogYWJhCisKKy9eKC4uKVwxezIsM314LworICAgIGFiYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiYQorICAgIGFiYWJhXD1wcworUGFydGlhbCBtYXRjaDogYWJhYmEKKyAgICBhYmFiYVw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiYWJhCisgICAgYWJhYmFieAorIDA6IGFiYWJhYngKKyAxOiBhYgorICAgIGFiYWJhYmFieCAgCisgMDogYWJhYmFiYWJ4CisgMTogYWIKKworL14oLi4pXDF7MiwzfT94LworICAgIGFiYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiYQorICAgIGFiYWJhXD1wcworUGFydGlhbCBtYXRjaDogYWJhYmEKKyAgICBhYmFiYVw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiYWJhCisgICAgYWJhYmFieAorIDA6IGFiYWJhYngKKyAxOiBhYgorICAgIGFiYWJhYmFieCAgCisgMDogYWJhYmFiYWJ4CisgMTogYWIKKyAgICAKKy9eKC4uKShcMXsyLDN9KWFiLworICAgIGFiYWJhYmFiCisgMDogYWJhYmFiYWIKKyAxOiBhYgorIDI6IGFiYWIKKworL15cUi8KKyAgICBcclw9cHMKKyAwOiBceDBkCisgICAgXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkCisgICAgCisvXlxSezIsM314LworICAgIFxyXD1wcworUGFydGlhbCBtYXRjaDogXHgwZAorICAgIFxyXD1waAorUGFydGlhbCBtYXRjaDogXHgwZAorICAgIFxyXHJcPXBzCitQYXJ0aWFsIG1hdGNoOiBceDBkXHgwZAorICAgIFxyXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkXHgwZAorICAgIFxyXHJcclw9cHMKK1BhcnRpYWwgbWF0Y2g6IFx4MGRceDBkXHgwZAorICAgIFxyXHJcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4MGRceDBkXHgwZAorICAgIFxyXHJ4CisgMDogXHgwZFx4MGR4CisgICAgXHJcclxyeCAgICAKKyAwOiBceDBkXHgwZFx4MGR4CisKKy9eXFJ7MiwzfT94LworICAgIFxyXD1wcworUGFydGlhbCBtYXRjaDogXHgwZAorICAgIFxyXD1waAorUGFydGlhbCBtYXRjaDogXHgwZAorICAgIFxyXHJcPXBzCitQYXJ0aWFsIG1hdGNoOiBceDBkXHgwZAorICAgIFxyXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkXHgwZAorICAgIFxyXHJcclw9cHMKK1BhcnRpYWwgbWF0Y2g6IFx4MGRceDBkXHgwZAorICAgIFxyXHJcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4MGRceDBkXHgwZAorICAgIFxyXHJ4CisgMDogXHgwZFx4MGR4CisgICAgXHJcclxyeCAgICAKKyAwOiBceDBkXHgwZFx4MGR4CisgICAgCisvXlxSP3gvCisgICAgXHJcPXBzCitQYXJ0aWFsIG1hdGNoOiBceDBkCisgICAgXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkCisgICAgeAorIDA6IHgKKyAgICBccnggIAorIDA6IFx4MGR4CisKKy9eXFIreC8KKyAgICBcclw9cHMKK1BhcnRpYWwgbWF0Y2g6IFx4MGQKKyAgICBcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4MGQKKyAgICBcclxuXD1wcworUGFydGlhbCBtYXRjaDogXHgwZFx4MGEKKyAgICBcclxuXD1waAorUGFydGlhbCBtYXRjaDogXHgwZFx4MGEKKyAgICBccnggIAorIDA6IFx4MGR4CisKKy9eYSQvbmV3bGluZT1jcmxmCisgICAgYVxyXD1wcworUGFydGlhbCBtYXRjaDogYVx4MGQKKyAgICBhXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBhXHgwZAorCisvXmEkL20sbmV3bGluZT1jcmxmCisgICAgYVxyXD1wcworUGFydGlhbCBtYXRjaDogYVx4MGQKKyAgICBhXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBhXHgwZAorCisvXihhJHxhXHIpL25ld2xpbmU9Y3JsZgorICAgIGFcclw9cHMKKyAwOiBhXHgwZAorIDE6IGFceDBkCisgICAgYVxyXD1waAorUGFydGlhbCBtYXRjaDogYVx4MGQKKworL14oYSR8YVxyKS9tLG5ld2xpbmU9Y3JsZgorICAgIGFcclw9cHMKKyAwOiBhXHgwZAorIDE6IGFceDBkCisgICAgYVxyXD1waAorUGFydGlhbCBtYXRjaDogYVx4MGQKKworLy4vbmV3bGluZT1jcmxmCisgICAgXHJcPXBzCisgMDogXHgwZAorICAgIFxyXD1waAorUGFydGlhbCBtYXRjaDogXHgwZAorICAKKy8uezIsM30vbmV3bGluZT1jcmxmCisgICAgXHJcPXBzCitQYXJ0aWFsIG1hdGNoOiBceDBkCisgICAgXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkCisgICAgXHJcclw9cHMKKyAwOiBceDBkXHgwZAorICAgIFxyXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkXHgwZAorICAgIFxyXHJcclw9cHMKKyAwOiBceDBkXHgwZFx4MGQKKyAgICBcclxyXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkXHgwZFx4MGQKKworLy57MiwzfT8vbmV3bGluZT1jcmxmCisgICAgXHJcPXBzCitQYXJ0aWFsIG1hdGNoOiBceDBkCisgICAgXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkCisgICAgXHJcclw9cHMKKyAwOiBceDBkXHgwZAorICAgIFxyXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkXHgwZAorICAgIFxyXHJcclw9cHMKKyAwOiBceDBkXHgwZAorICAgIFxyXHJcclw9cGgKKyAwOiBceDBkXHgwZAorCisiQUIoQyhEKSkoRShGKSk/KD8oPz1cMikoPz1cNCkpIgorICAgIEFCQ0RHSElcPW92ZWN0b3I9MDEKK01hdGNoZWQsIGJ1dCB0b28gbWFueSBzdWJzdHJpbmdzCisgMDogQUJDRAorICAgIAorIyBUaGVzZSBhcmUgYWxsIHJ1biBhcyByZWFsIG1hdGNoZXMgaW4gdGVzdCAxOyBoZXJlIHdlIGFyZSBqdXN0IGNoZWNraW5nIHRoZQorIyBzZXR0aW5ncyBvZiB0aGUgYW5jaG9yZWQgYW5kIHN0YXJ0bGluZSBiaXRzLiAgCisKKy8oPz4uKj9hKSg/PD1iYSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXggbG9va2JlaGluZCA9IDIKK0xhc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyg/Oi4qP2EpKD88PWJhKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heCBsb29rYmVoaW5kID0gMgorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorTGFzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvLio/YSgqUFJVTkUpYi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKworLy4qP2EoKlBSVU5FKWIvSXMKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogZG90YWxsCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKy9eYSgqUFJVTkUpYi9JcworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IGRvdGFsbAorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZCBkb3RhbGwKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvLio/YSgqU0tJUCliL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKD8+Lio/YSliL0lzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGRvdGFsbAorTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKD8+Lio/YSliL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKD8+XmEpYi9JcworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IGRvdGFsbAorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZCBkb3RhbGwKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvKD8+Lio/KSg/PD0oYWJjZCl8KHd4eXopKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK01heCBsb29rYmVoaW5kID0gNAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy8oPz4uKikoPzw9KGFiY2QpfCh3eHl6KSkvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitNYXggbG9va2JlaGluZCA9IDQKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisiKD8+LiopZm9vIkkKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTGFzdCBjb2RlIHVuaXQgPSAnbycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisiKD8+Lio/KWZvbyJJCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0xhc3QgY29kZSB1bml0ID0gJ28nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworLyg/Pl5hYmMpL0ltCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IG11bHRpbGluZQorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvKD8+LiphYmMpL0ltCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IG11bHRpbGluZQorTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvKD86LiphYmMpL0ltCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IG11bHRpbGluZQorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvKD86KGEpKyg/QzEpYmJ8YWEoP0MyKWIpLworICAgIGFhYlw9Y2FsbG91dF9jYXB0dXJlCitDYWxsb3V0IDE6IGxhc3QgY2FwdHVyZSA9IDEKKyAwOiA8dW5zZXQ+CisgMTogYQorLS0tPmFhYgorICAgIF4gXiAgICAgYgorQ2FsbG91dCAxOiBsYXN0IGNhcHR1cmUgPSAxCisgMDogPHVuc2V0PgorIDE6IGEKKy0tLT5hYWIKKyAgICBeXiAgICAgIGIKK0NhbGxvdXQgMjogbGFzdCBjYXB0dXJlID0gMAorIDA6IDx1bnNldD4KKy0tLT5hYWIKKyAgICBeIF4gICAgIGIKKyAwOiBhYWIKKyAgIAorLyg/OihhKSsrKD9DMSliYnxhYSg/QzIpYikvCisgICAgYWFiXD1jYWxsb3V0X2NhcHR1cmUKK0NhbGxvdXQgMTogbGFzdCBjYXB0dXJlID0gMQorIDA6IDx1bnNldD4KKyAxOiBhCistLS0+YWFiCisgICAgXiBeICAgICBiCitDYWxsb3V0IDI6IGxhc3QgY2FwdHVyZSA9IDAKKyAwOiA8dW5zZXQ+CistLS0+YWFiCisgICAgXiBeICAgICBiCisgMDogYWFiCisgICAgCisvKD86KD8+KGEpKSg/QzEpYmJ8YWEoP0MyKWIpLworICAgIGFhYlw9Y2FsbG91dF9jYXB0dXJlCitDYWxsb3V0IDE6IGxhc3QgY2FwdHVyZSA9IDEKKyAwOiA8dW5zZXQ+CisgMTogYQorLS0tPmFhYgorICAgIF5eICAgICAgYgorQ2FsbG91dCAyOiBsYXN0IGNhcHR1cmUgPSAwCisgMDogPHVuc2V0PgorLS0tPmFhYgorICAgIF4gXiAgICAgYgorIDA6IGFhYgorCisvKD86KD8xKSg/QzEpeHxhYig/QzIpKSgoYSkpezB9LworICAgIGFhYlw9Y2FsbG91dF9jYXB0dXJlCitDYWxsb3V0IDE6IGxhc3QgY2FwdHVyZSA9IDAKKyAwOiA8dW5zZXQ+CistLS0+YWFiCisgICAgXl4gICAgICB4CitDYWxsb3V0IDE6IGxhc3QgY2FwdHVyZSA9IDAKKyAwOiA8dW5zZXQ+CistLS0+YWFiCisgICAgIF5eICAgICB4CitDYWxsb3V0IDI6IGxhc3QgY2FwdHVyZSA9IDAKKyAwOiA8dW5zZXQ+CistLS0+YWFiCisgICAgIF4gXiAgICApCisgMDogYWIKKworLyg/MSkoP0MxKSgoYSkoP0MyKSl7MH0vCisgICAgYWFiXD1jYWxsb3V0X2NhcHR1cmUKK0NhbGxvdXQgMjogbGFzdCBjYXB0dXJlID0gMgorIDA6IDx1bnNldD4KKyAxOiA8dW5zZXQ+CisgMjogYQorLS0tPmFhYgorICAgIF5eICAgICAgKQorQ2FsbG91dCAxOiBsYXN0IGNhcHR1cmUgPSAwCisgMDogPHVuc2V0PgorLS0tPmFhYgorICAgIF5eICAgICAgKChhKSg/QzIpKXswfQorIDA6IGEKKworLyg/OihhKSsoP0MxKWJifGFhKD9DMiliKSsrLworICAgIGFhYlw9Y2FsbG91dF9jYXB0dXJlCitDYWxsb3V0IDE6IGxhc3QgY2FwdHVyZSA9IDEKKyAwOiA8dW5zZXQ+CisgMTogYQorLS0tPmFhYgorICAgIF4gXiAgICAgYgorQ2FsbG91dCAxOiBsYXN0IGNhcHR1cmUgPSAxCisgMDogPHVuc2V0PgorIDE6IGEKKy0tLT5hYWIKKyAgICBeXiAgICAgIGIKK0NhbGxvdXQgMjogbGFzdCBjYXB0dXJlID0gMAorIDA6IDx1bnNldD4KKy0tLT5hYWIKKyAgICBeIF4gICAgIGIKKyAwOiBhYWIKKyAgICBhYWJcPWNhbGxvdXRfY2FwdHVyZSxvdmVjdG9yPTEKK0NhbGxvdXQgMTogbGFzdCBjYXB0dXJlID0gMQorIDA6IDx1bnNldD4KKy0tLT5hYWIKKyAgICBeIF4gICAgIGIKK0NhbGxvdXQgMTogbGFzdCBjYXB0dXJlID0gMQorIDA6IDx1bnNldD4KKy0tLT5hYWIKKyAgICBeXiAgICAgIGIKK0NhbGxvdXQgMjogbGFzdCBjYXB0dXJlID0gMAorIDA6IDx1bnNldD4KKy0tLT5hYWIKKyAgICBeIF4gICAgIGIKKyAwOiBhYWIKKworLyhhYil4fGFiLworICAgIGFiXD1vdmVjdG9yPTAKKyAwOiBhYgorICAgIGFiXD1vdmVjdG9yPTEKKyAwOiBhYgorICAKKy8oPzw9MTIzKSgqTUFSSzp4eClhYmMvbWFyaworICAgIHh4eHgxMjNhXD1waAorUGFydGlhbCBtYXRjaCwgbWFyaz14eDogMTIzYQorICAgICAgICAgICAgICAgICAgICAgICAgPDw8CisgICAgeHh4eDEyM2FcPXBzCitQYXJ0aWFsIG1hdGNoLCBtYXJrPXh4OiAxMjNhCisgICAgICAgICAgICAgICAgICAgICAgICA8PDwKKyAgICAKKy8xMjNcS2FiYy9zdGFydGNoYXIKKyAgICB4eHh4MTIzYVw9cGgKK1BhcnRpYWwgbWF0Y2g6IDEyM2EKKyAgICB4eHh4MTIzYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IDEyM2EKKworL14oPyg/PWEpYWF8YmIpL2F1dG9fY2FsbG91dAorICAgIGJiCistLS0+YmIKKyArMCBeICAgICAgXgorICsxIF4gICAgICAoPyg/PWEpYWF8YmIpCisgKzMgXiAgICAgICg/PWEpCisgKzYgXiAgICAgIGEKKysxMSBeICAgICAgYgorKzEyIF5eICAgICBiCisrMTMgXiBeICAgICkKKysxNCBeIF4gICAgCisgMDogYmIKKworLyg/QzEpXig/QzIpKD8oP0M5OSkoPz0oP0MzKWEoP0M0KSkoP0M1KWEoP0M2KWEoP0M3KXwoP0M4KWIoP0M5KWIoP0MxMCkpKD9DMTEpLworICAgIGJiCistLS0+YmIKKyAgMSBeICAgICAgXgorICAyIF4gICAgICAoPyg/Qzk5KSg/PSg/QzMpYSg/QzQpKSg/QzUpYSg/QzYpYSg/QzcpfCg/QzgpYig/QzkpYig/QzEwKSkKKyA5OSBeICAgICAgKD89KD9DMylhKD9DNCkpCisgIDMgXiAgICAgIGEKKyAgOCBeICAgICAgYgorICA5IF5eICAgICBiCisgMTAgXiBeICAgICkKKyAxMSBeIF4gICAgCisgMDogYmIKKworIyBQZXJsIHNlZW1zIHRvIGhhdmUgYSBidWcgd2l0aCB0aGlzIG9uZS4KKworL2FhYWFhKCpDT01NSVQpKCpQUlVORSlifGErYy8KKyAgICBhYWFhYWFjCisgMDogYWFhYWMKKyAgICAKKyMgSGVyZSBhcmUgc29tZSB0aGF0IFBlcmwgdHJlYXRzIGRpZmZlcmVudGx5IGJlY2F1c2Ugb2YgdGhlIHdheSBpdCBoYW5kbGVzCisjIGJhY2t0cmFja2luZyB2ZXJicy4gCisKKy8oPyFhKCpDT01NSVQpYilhY3xhZC8KKyAgICAgYWMKKyAwOiBhYworICAgICBhZCAKKyAwOiBhZAorCisvXig/IWEoKlRIRU4pYnxhYykuLi8KKyAgICAgYWQgCisgMDogYWQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICBhYworTm8gbWF0Y2gKKworL14oPz1hKCpUSEVOKWJ8YWMpLworICAgIGFjCisgMDogCisgICAgCisvXEEuKj8oPzphfGIoKlRIRU4pYykvCisgICAgYmEKKyAwOiBiYQorCisvXEEuKj8oPzphfGIoKlRIRU4pYykrKy8KKyAgICBiYQorIDA6IGJhCisKKy9cQS4qPyg/OmF8YigqVEhFTiljfGQpLworICAgIGJhCisgMDogYmEKKworLyg/OihhKCpNQVJLOlgpYSsoKlNLSVA6WCliKSl7MH0oPzooPzEpfGFhYykvCisgICAgYWFjIAorIDA6IGFhYworCisvXEEuKj8oYXxiKCpUSEVOKWMpLworICAgIGJhCisgMDogYmEKKyAxOiBhCisKKy9eKEEoKlRIRU4pQnxBKCpUSEVOKUQpLworICAgIEFEICAgICAgICAgICAKKyAwOiBBRAorIDE6IEFECisgICAgCisvKD8hYigqVEhFTilhKWJufGJubi8KKyAgICBibm4KKyAwOiBibgorCisvKD8oPz1iKCpTS0lQKWEpYm58Ym5uKS8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJubgorTm8gbWF0Y2gKKworLyg/PWIoKlRIRU4pYXwpYm58Ym5uLworICAgIGJubgorIDA6IGJuCisKKyMgVGhpcyB0ZXN0IGNhdXNlcyBhIHNlZ2ZhdWx0IHdpdGggUGVybCA1LjE4LjAgCisKKy9eKD89KGEpKXswfWIoPzEpLworICAgIGJhY2tnYW1tb24KKyAwOiBiYQorCisvKD98KD88bj5mKXwoPzxuPmIpKS9JLGR1cG5hbWVzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgbiAgIDEKK09wdGlvbnM6IGR1cG5hbWVzCitTdGFydGluZyBjb2RlIHVuaXRzOiBiIGYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworLyg/PGE+YWJjKSg/PGE+eilcazxhPigpL0lCLGR1cG5hbWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBhYmMKKyAgICAgICAgS2V0CisgICAgICAgIENCcmEgMgorICAgICAgICB6CisgICAgICAgIEtldAorICAgICAgICBcazxhPjIKKyAgICAgICAgQ0JyYSAzCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMworTWF4IGJhY2sgcmVmZXJlbmNlID0gMgorTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBhICAgMQorICBhICAgMgorT3B0aW9uczogZHVwbmFtZXMKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAneicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNQorCisvYSpbYmNkXS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIGEqKworICAgICAgICBbYi1kXQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tiY2RdKmEvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYi1kXSorCisgICAgICAgIGEKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgQSBjb21wbGV0ZSBzZXQgb2YgdGVzdHMgZm9yIGF1dG8tcG9zc2Vzc2lmaWNhdGlvbiBvZiBjaGFyYWN0ZXIgdHlwZXMsIGJ1dAorIyBvbWl0dGluZyBcQyBiZWNhdXNlIGl0IG1pZ2h0IGJlIGRpc2FibGVkIChpdCBoYXMgaXRzIG93biB0ZXN0cykuCisKKy9cRCtcRCBcRCtcZCBcRCtcUyBcRCtccyBcRCtcVyBcRCtcdyBcRCsuIFxEK1xSIFxEK1xIIFxEK1xoIFxEK1xWIFxEK1x2IFxEK1xaIFxEK1x6IFxEKyQvQngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXEQrCisgICAgICAgIFxECisgICAgICAgIFxEKysKKyAgICAgICAgXGQKKyAgICAgICAgXEQrCisgICAgICAgIFxTCisgICAgICAgIFxEKworICAgICAgICBccworICAgICAgICBcRCsKKyAgICAgICAgXFcKKyAgICAgICAgXEQrCisgICAgICAgIFx3CisgICAgICAgIFxEKworICAgICAgICBBbnkKKyAgICAgICAgXEQrCisgICAgICAgIFxSCisgICAgICAgIFxEKworICAgICAgICBcSAorICAgICAgICBcRCsKKyAgICAgICAgXGgKKyAgICAgICAgXEQrCisgICAgICAgIFxWCisgICAgICAgIFxEKworICAgICAgICBcdgorICAgICAgICBcRCsKKyAgICAgICAgXFoKKyAgICAgICAgXEQrKworICAgICAgICBcegorICAgICAgICBcRCsKKyAgICAgICAgJAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xkK1xEIFxkK1xkIFxkK1xTIFxkK1xzIFxkK1xXIFxkK1x3IFxkKy4gXGQrXFIgXGQrXEggXGQrXGggXGQrXFYgXGQrXHYgXGQrXFogXGQrXHogXGQrJC9CeAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcZCsrCisgICAgICAgIFxECisgICAgICAgIFxkKworICAgICAgICBcZAorICAgICAgICBcZCsKKyAgICAgICAgXFMKKyAgICAgICAgXGQrKworICAgICAgICBccworICAgICAgICBcZCsrCisgICAgICAgIFxXCisgICAgICAgIFxkKworICAgICAgICBcdworICAgICAgICBcZCsKKyAgICAgICAgQW55CisgICAgICAgIFxkKysKKyAgICAgICAgXFIKKyAgICAgICAgXGQrCisgICAgICAgIFxICisgICAgICAgIFxkKysKKyAgICAgICAgXGgKKyAgICAgICAgXGQrCisgICAgICAgIFxWCisgICAgICAgIFxkKysKKyAgICAgICAgXHYKKyAgICAgICAgXGQrKworICAgICAgICBcWgorICAgICAgICBcZCsrCisgICAgICAgIFx6CisgICAgICAgIFxkKysKKyAgICAgICAgJAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xTK1xEIFxTK1xkIFxTK1xTIFxTK1xzIFxTK1xXIFxTK1x3IFxTKy4gXFMrXFIgXFMrXEggXFMrXGggXFMrXFYgXFMrXHYgXFMrXFogXFMrXHogXFMrJC9CeAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcUysKKyAgICAgICAgXEQKKyAgICAgICAgXFMrCisgICAgICAgIFxkCisgICAgICAgIFxTKworICAgICAgICBcUworICAgICAgICBcUysrCisgICAgICAgIFxzCisgICAgICAgIFxTKworICAgICAgICBcVworICAgICAgICBcUysKKyAgICAgICAgXHcKKyAgICAgICAgXFMrCisgICAgICAgIEFueQorICAgICAgICBcUysrCisgICAgICAgIFxSCisgICAgICAgIFxTKworICAgICAgICBcSAorICAgICAgICBcUysrCisgICAgICAgIFxoCisgICAgICAgIFxTKworICAgICAgICBcVgorICAgICAgICBcUysrCisgICAgICAgIFx2CisgICAgICAgIFxTKysKKyAgICAgICAgXFoKKyAgICAgICAgXFMrKworICAgICAgICBcegorICAgICAgICBcUysrCisgICAgICAgICQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ccytcRCBccytcZCBccytcUyBccytccyBccytcVyBccytcdyBccysuIFxzK1xSIFxzK1xIIFxzK1xoIFxzK1xWIFxzK1x2IFxzK1xaIFxzK1x6IFxzKyQvQngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHMrCisgICAgICAgIFxECisgICAgICAgIFxzKysKKyAgICAgICAgXGQKKyAgICAgICAgXHMrKworICAgICAgICBcUworICAgICAgICBccysKKyAgICAgICAgXHMKKyAgICAgICAgXHMrCisgICAgICAgIFxXCisgICAgICAgIFxzKysKKyAgICAgICAgXHcKKyAgICAgICAgXHMrCisgICAgICAgIEFueQorICAgICAgICBccysKKyAgICAgICAgXFIKKyAgICAgICAgXHMrCisgICAgICAgIFxICisgICAgICAgIFxzKworICAgICAgICBcaAorICAgICAgICBccysKKyAgICAgICAgXFYKKyAgICAgICAgXHMrCisgICAgICAgIFx2CisgICAgICAgIFxzKworICAgICAgICBcWgorICAgICAgICBccysrCisgICAgICAgIFx6CisgICAgICAgIFxzKworICAgICAgICAkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXFcrXEQgXFcrXGQgXFcrXFMgXFcrXHMgXFcrXFcgXFcrXHcgXFcrLiBcVytcUiBcVytcSCBcVytcaCBcVytcViBcVytcdiBcVytcWiBcVytceiBcVyskL0J4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxXKworICAgICAgICBcRAorICAgICAgICBcVysrCisgICAgICAgIFxkCisgICAgICAgIFxXKworICAgICAgICBcUworICAgICAgICBcVysKKyAgICAgICAgXHMKKyAgICAgICAgXFcrCisgICAgICAgIFxXCisgICAgICAgIFxXKysKKyAgICAgICAgXHcKKyAgICAgICAgXFcrCisgICAgICAgIEFueQorICAgICAgICBcVysKKyAgICAgICAgXFIKKyAgICAgICAgXFcrCisgICAgICAgIFxICisgICAgICAgIFxXKworICAgICAgICBcaAorICAgICAgICBcVysKKyAgICAgICAgXFYKKyAgICAgICAgXFcrCisgICAgICAgIFx2CisgICAgICAgIFxXKworICAgICAgICBcWgorICAgICAgICBcVysrCisgICAgICAgIFx6CisgICAgICAgIFxXKworICAgICAgICAkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHcrXEQgXHcrXGQgXHcrXFMgXHcrXHMgXHcrXFcgXHcrXHcgXHcrLiBcdytcUiBcdytcSCBcdytcaCBcdytcViBcdytcdiBcdytcWiBcdytceiBcdyskL0J4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx3KworICAgICAgICBcRAorICAgICAgICBcdysKKyAgICAgICAgXGQKKyAgICAgICAgXHcrCisgICAgICAgIFxTCisgICAgICAgIFx3KysKKyAgICAgICAgXHMKKyAgICAgICAgXHcrKworICAgICAgICBcVworICAgICAgICBcdysKKyAgICAgICAgXHcKKyAgICAgICAgXHcrCisgICAgICAgIEFueQorICAgICAgICBcdysrCisgICAgICAgIFxSCisgICAgICAgIFx3KworICAgICAgICBcSAorICAgICAgICBcdysrCisgICAgICAgIFxoCisgICAgICAgIFx3KworICAgICAgICBcVgorICAgICAgICBcdysrCisgICAgICAgIFx2CisgICAgICAgIFx3KysKKyAgICAgICAgXFoKKyAgICAgICAgXHcrKworICAgICAgICBcegorICAgICAgICBcdysrCisgICAgICAgICQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cUitcRCBcUitcZCBcUitcUyBcUitccyBcUitcVyBcUitcdyBcUisuIFxSK1xSIFxSK1xIIFxSK1xoIFxSK1xWIFxSK1x2IFxSK1xaIFxSK1x6IFxSKyQvQngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFIrCisgICAgICAgIFxECisgICAgICAgIFxSKysKKyAgICAgICAgXGQKKyAgICAgICAgXFIrCisgICAgICAgIFxTCisgICAgICAgIFxSKysKKyAgICAgICAgXHMKKyAgICAgICAgXFIrCisgICAgICAgIFxXCisgICAgICAgIFxSKysKKyAgICAgICAgXHcKKyAgICAgICAgXFIrKworICAgICAgICBBbnkKKyAgICAgICAgXFIrCisgICAgICAgIFxSCisgICAgICAgIFxSKworICAgICAgICBcSAorICAgICAgICBcUisrCisgICAgICAgIFxoCisgICAgICAgIFxSKworICAgICAgICBcVgorICAgICAgICBcUisKKyAgICAgICAgXHYKKyAgICAgICAgXFIrCisgICAgICAgIFxaCisgICAgICAgIFxSKysKKyAgICAgICAgXHoKKyAgICAgICAgXFIrCisgICAgICAgICQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cSCtcRCBcSCtcZCBcSCtcUyBcSCtccyBcSCtcVyBcSCtcdyBcSCsuIFxIK1xSIFxIK1xIIFxIK1xoIFxIK1xWIFxIK1x2IFxIK1xaIFxIK1x6IFxIKyQvQngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXEgrCisgICAgICAgIFxECisgICAgICAgIFxIKworICAgICAgICBcZAorICAgICAgICBcSCsKKyAgICAgICAgXFMKKyAgICAgICAgXEgrCisgICAgICAgIFxzCisgICAgICAgIFxIKworICAgICAgICBcVworICAgICAgICBcSCsKKyAgICAgICAgXHcKKyAgICAgICAgXEgrCisgICAgICAgIEFueQorICAgICAgICBcSCsKKyAgICAgICAgXFIKKyAgICAgICAgXEgrCisgICAgICAgIFxICisgICAgICAgIFxIKysKKyAgICAgICAgXGgKKyAgICAgICAgXEgrCisgICAgICAgIFxWCisgICAgICAgIFxIKworICAgICAgICBcdgorICAgICAgICBcSCsKKyAgICAgICAgXFoKKyAgICAgICAgXEgrKworICAgICAgICBcegorICAgICAgICBcSCsKKyAgICAgICAgJAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xoK1xEIFxoK1xkIFxoK1xTIFxoK1xzIFxoK1xXIFxoK1x3IFxoKy4gXGgrXFIgXGgrXEggXGgrXGggXGgrXFYgXGgrXHYgXGgrXFogXGgrXHogXGgrJC9CeAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcaCsKKyAgICAgICAgXEQKKyAgICAgICAgXGgrKworICAgICAgICBcZAorICAgICAgICBcaCsrCisgICAgICAgIFxTCisgICAgICAgIFxoKworICAgICAgICBccworICAgICAgICBcaCsKKyAgICAgICAgXFcKKyAgICAgICAgXGgrKworICAgICAgICBcdworICAgICAgICBcaCsKKyAgICAgICAgQW55CisgICAgICAgIFxoKysKKyAgICAgICAgXFIKKyAgICAgICAgXGgrKworICAgICAgICBcSAorICAgICAgICBcaCsKKyAgICAgICAgXGgKKyAgICAgICAgXGgrCisgICAgICAgIFxWCisgICAgICAgIFxoKysKKyAgICAgICAgXHYKKyAgICAgICAgXGgrCisgICAgICAgIFxaCisgICAgICAgIFxoKysKKyAgICAgICAgXHoKKyAgICAgICAgXGgrCisgICAgICAgICQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cVitcRCBcVitcZCBcVitcUyBcVitccyBcVitcVyBcVitcdyBcVisuIFxWK1xSIFxWK1xIIFxWK1xoIFxWK1xWIFxWK1x2IFxWK1xaIFxWK1x6IFxWKyQvQngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXFYrCisgICAgICAgIFxECisgICAgICAgIFxWKworICAgICAgICBcZAorICAgICAgICBcVisKKyAgICAgICAgXFMKKyAgICAgICAgXFYrCisgICAgICAgIFxzCisgICAgICAgIFxWKworICAgICAgICBcVworICAgICAgICBcVisKKyAgICAgICAgXHcKKyAgICAgICAgXFYrCisgICAgICAgIEFueQorICAgICAgICBcVisrCisgICAgICAgIFxSCisgICAgICAgIFxWKworICAgICAgICBcSAorICAgICAgICBcVisKKyAgICAgICAgXGgKKyAgICAgICAgXFYrCisgICAgICAgIFxWCisgICAgICAgIFxWKysKKyAgICAgICAgXHYKKyAgICAgICAgXFYrCisgICAgICAgIFxaCisgICAgICAgIFxWKysKKyAgICAgICAgXHoKKyAgICAgICAgXFYrCisgICAgICAgICQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cditcRCBcditcZCBcditcUyBcditccyBcditcVyBcditcdyBcdisuIFx2K1xSIFx2K1xIIFx2K1xoIFx2K1xWIFx2K1x2IFx2K1xaIFx2K1x6IFx2KyQvQngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHYrCisgICAgICAgIFxECisgICAgICAgIFx2KysKKyAgICAgICAgXGQKKyAgICAgICAgXHYrKworICAgICAgICBcUworICAgICAgICBcdisKKyAgICAgICAgXHMKKyAgICAgICAgXHYrCisgICAgICAgIFxXCisgICAgICAgIFx2KysKKyAgICAgICAgXHcKKyAgICAgICAgXHYrCisgICAgICAgIEFueQorICAgICAgICBcdisKKyAgICAgICAgXFIKKyAgICAgICAgXHYrCisgICAgICAgIFxICisgICAgICAgIFx2KysKKyAgICAgICAgXGgKKyAgICAgICAgXHYrKworICAgICAgICBcVgorICAgICAgICBcdisKKyAgICAgICAgXHYKKyAgICAgICAgXHYrCisgICAgICAgIFxaCisgICAgICAgIFx2KysKKyAgICAgICAgXHoKKyAgICAgICAgXHYrCisgICAgICAgICQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8gYStcRCAgYStcZCAgYStcUyAgYStccyAgYStcVyAgYStcdyAgYSsuICBhK1xSICBhK1xIICBhK1xoICBhK1xWICBhK1x2ICBhK1xaICBhK1x6ICBhKyQvQngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYSsKKyAgICAgICAgXEQKKyAgICAgICAgYSsrCisgICAgICAgIFxkCisgICAgICAgIGErCisgICAgICAgIFxTCisgICAgICAgIGErKworICAgICAgICBccworICAgICAgICBhKysKKyAgICAgICAgXFcKKyAgICAgICAgYSsKKyAgICAgICAgXHcKKyAgICAgICAgYSsKKyAgICAgICAgQW55CisgICAgICAgIGErKworICAgICAgICBcUgorICAgICAgICBhKworICAgICAgICBcSAorICAgICAgICBhKysKKyAgICAgICAgXGgKKyAgICAgICAgYSsKKyAgICAgICAgXFYKKyAgICAgICAgYSsrCisgICAgICAgIFx2CisgICAgICAgIGErKworICAgICAgICBcWgorICAgICAgICBhKysKKyAgICAgICAgXHoKKyAgICAgICAgYSsrCisgICAgICAgICQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9cbitcRCBcbitcZCBcbitcUyBcbitccyBcbitcVyBcbitcdyBcbisuIFxuK1xSIFxuK1xIIFxuK1xoIFxuK1xWIFxuK1x2IFxuK1xaIFxuK1x6IFxuKyQvQngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXHgwYSsKKyAgICAgICAgXEQKKyAgICAgICAgXHgwYSsrCisgICAgICAgIFxkCisgICAgICAgIFx4MGErKworICAgICAgICBcUworICAgICAgICBceDBhKworICAgICAgICBccworICAgICAgICBceDBhKworICAgICAgICBcVworICAgICAgICBceDBhKysKKyAgICAgICAgXHcKKyAgICAgICAgXHgwYSsKKyAgICAgICAgQW55CisgICAgICAgIFx4MGErCisgICAgICAgIFxSCisgICAgICAgIFx4MGErCisgICAgICAgIFxICisgICAgICAgIFx4MGErKworICAgICAgICBcaAorICAgICAgICBceDBhKysKKyAgICAgICAgXFYKKyAgICAgICAgXHgwYSsKKyAgICAgICAgXHYKKyAgICAgICAgXHgwYSsKKyAgICAgICAgXFoKKyAgICAgICAgXHgwYSsrCisgICAgICAgIFx6CisgICAgICAgIFx4MGErCisgICAgICAgICQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8gLitcRCAgLitcZCAgLitcUyAgLitccyAgLitcVyAgLitcdyAgLisuICAuK1xSICAuK1xIICAuK1xoICAuK1xWICAuK1x2ICAuK1xaICAuK1x6ICAuKyQvQngKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQW55KworICAgICAgICBcRAorICAgICAgICBBbnkrCisgICAgICAgIFxkCisgICAgICAgIEFueSsKKyAgICAgICAgXFMKKyAgICAgICAgQW55KworICAgICAgICBccworICAgICAgICBBbnkrCisgICAgICAgIFxXCisgICAgICAgIEFueSsKKyAgICAgICAgXHcKKyAgICAgICAgQW55KworICAgICAgICBBbnkKKyAgICAgICAgQW55KysKKyAgICAgICAgXFIKKyAgICAgICAgQW55KworICAgICAgICBcSAorICAgICAgICBBbnkrCisgICAgICAgIFxoCisgICAgICAgIEFueSsKKyAgICAgICAgXFYKKyAgICAgICAgQW55KworICAgICAgICBcdgorICAgICAgICBBbnkrCisgICAgICAgIFxaCisgICAgICAgIEFueSsrCisgICAgICAgIFx6CisgICAgICAgIEFueSsKKyAgICAgICAgJAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyAuK1xEICAuK1xkICAuK1xTICAuK1xzICAuK1xXICAuK1x3ICAuKy4gIC4rXFIgIC4rXEggIC4rXGggIC4rXFYgIC4rXHYgIC4rXFogIC4rXHogIC4rJC9Cc3gKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQWxsQW55KworICAgICAgICBcRAorICAgICAgICBBbGxBbnkrCisgICAgICAgIFxkCisgICAgICAgIEFsbEFueSsKKyAgICAgICAgXFMKKyAgICAgICAgQWxsQW55KworICAgICAgICBccworICAgICAgICBBbGxBbnkrCisgICAgICAgIFxXCisgICAgICAgIEFsbEFueSsKKyAgICAgICAgXHcKKyAgICAgICAgQWxsQW55KworICAgICAgICBBbGxBbnkKKyAgICAgICAgQWxsQW55KworICAgICAgICBcUgorICAgICAgICBBbGxBbnkrCisgICAgICAgIFxICisgICAgICAgIEFsbEFueSsKKyAgICAgICAgXGgKKyAgICAgICAgQWxsQW55KworICAgICAgICBcVgorICAgICAgICBBbGxBbnkrCisgICAgICAgIFx2CisgICAgICAgIEFsbEFueSsKKyAgICAgICAgXFoKKyAgICAgICAgQWxsQW55KysKKyAgICAgICAgXHoKKyAgICAgICAgQWxsQW55KworICAgICAgICAkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvIFxEKyQgIFxkKyQgIFxTKyQgIFxzKyQgIFxXKyQgIFx3KyQgIFxSKyQgIFxIKyQgIFxoKyQgIFxWKyQgXHYrJCAgYSskICAgXG4rJCAgLiskICAuKyQvQm14CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxEKworICAgICAvbSAkCisgICAgICAgIFxkKysKKyAgICAgL20gJAorICAgICAgICBcUysrCisgICAgIC9tICQKKyAgICAgICAgXHMrCisgICAgIC9tICQKKyAgICAgICAgXFcrCisgICAgIC9tICQKKyAgICAgICAgXHcrKworICAgICAvbSAkCisgICAgICAgIFxSKworICAgICAvbSAkCisgICAgICAgIFxIKworICAgICAvbSAkCisgICAgICAgIFxoKworICAgICAvbSAkCisgICAgICAgIFxWKworICAgICAvbSAkCisgICAgICAgIFx2KworICAgICAvbSAkCisgICAgICAgIGErCisgICAgIC9tICQKKyAgICAgICAgXHgwYSsKKyAgICAgL20gJAorICAgICAgICBBbnkrCisgICAgIC9tICQKKyAgICAgICAgQW55KworICAgICAvbSAkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD89YSspYShhKykrK2EvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBBc3NlcnQKKyAgICAgICAgYSsrCisgICAgICAgIEtldAorICAgICAgICBhCisgICAgICAgIENCcmFQb3MgMQorICAgICAgICBhKysKKyAgICAgICAgS2V0UnBvcworICAgICAgICBhCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYSsoYmJ8Y2MpYSsoPzpiYnxjYylhKyg/PmJifGNjKWErKD86YmJ8Y2MpK2ErKGFhKWErKD86YmJ8YWEpL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgYSsrCisgICAgICAgIENCcmEgMQorICAgICAgICBiYgorICAgICAgICBBbHQKKyAgICAgICAgY2MKKyAgICAgICAgS2V0CisgICAgICAgIGErKworICAgICAgICBCcmEKKyAgICAgICAgYmIKKyAgICAgICAgQWx0CisgICAgICAgIGNjCisgICAgICAgIEtldAorICAgICAgICBhKysKKyAgICAgICAgT25jZV9OQworICAgICAgICBiYgorICAgICAgICBBbHQKKyAgICAgICAgY2MKKyAgICAgICAgS2V0CisgICAgICAgIGErKworICAgICAgICBCcmEKKyAgICAgICAgYmIKKyAgICAgICAgQWx0CisgICAgICAgIGNjCisgICAgICAgIEtldFJtYXgKKyAgICAgICAgYSsKKyAgICAgICAgQ0JyYSAyCisgICAgICAgIGFhCisgICAgICAgIEtldAorICAgICAgICBhKworICAgICAgICBCcmEKKyAgICAgICAgYmIKKyAgICAgICAgQWx0CisgICAgICAgIGFhCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2ErKGJifGNjKT8jYSsoPzpiYnxjYyk/PyNhKyg/OmJifGNjKT8rI2ErKD86YmJ8Y2MpKiNhKyhiYnxjYyk/YSNhKyg/OmFhKT8vQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhKysKKyAgICAgICAgQnJhemVybworICAgICAgICBDQnJhIDEKKyAgICAgICAgYmIKKyAgICAgICAgQWx0CisgICAgICAgIGNjCisgICAgICAgIEtldAorICAgICAgICAjCisgICAgICAgIGErKworICAgICAgICBCcmFtaW56ZXJvCisgICAgICAgIEJyYQorICAgICAgICBiYgorICAgICAgICBBbHQKKyAgICAgICAgY2MKKyAgICAgICAgS2V0CisgICAgICAgICMKKyAgICAgICAgYSsrCisgICAgICAgIE9uY2UKKyAgICAgICAgQnJhemVybworICAgICAgICBCcmEKKyAgICAgICAgYmIKKyAgICAgICAgQWx0CisgICAgICAgIGNjCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgIworICAgICAgICBhKysKKyAgICAgICAgQnJhemVybworICAgICAgICBCcmEKKyAgICAgICAgYmIKKyAgICAgICAgQWx0CisgICAgICAgIGNjCisgICAgICAgIEtldFJtYXgKKyAgICAgICAgIworICAgICAgICBhKworICAgICAgICBCcmF6ZXJvCisgICAgICAgIENCcmEgMgorICAgICAgICBiYgorICAgICAgICBBbHQKKyAgICAgICAgY2MKKyAgICAgICAgS2V0CisgICAgICAgIGEjCisgICAgICAgIGErCisgICAgICAgIEJyYXplcm8KKyAgICAgICAgQnJhCisgICAgICAgIGFhCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2ErKD86YmIpP2EjYSsoPzp8fHwpI2ErKD86fGIpYSNhKyg/Onx8fCk/YS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIGErCisgICAgICAgIEJyYXplcm8KKyAgICAgICAgQnJhCisgICAgICAgIGJiCisgICAgICAgIEtldAorICAgICAgICBhIworICAgICAgICBhKysKKyAgICAgICAgQnJhCisgICAgICAgIEFsdAorICAgICAgICBBbHQKKyAgICAgICAgQWx0CisgICAgICAgIEtldAorICAgICAgICAjCisgICAgICAgIGErCisgICAgICAgIEJyYQorICAgICAgICBBbHQKKyAgICAgICAgYgorICAgICAgICBLZXQKKyAgICAgICAgYSMKKyAgICAgICAgYSsKKyAgICAgICAgQnJhemVybworICAgICAgICBCcmEKKyAgICAgICAgQWx0CisgICAgICAgIEFsdAorICAgICAgICBBbHQKKyAgICAgICAgS2V0CisgICAgICAgIGEKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bYWJdKi9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFthYl0qKworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBhYWFhCisgMDogYWFhYQorCisvW2FiXSo/L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW2FiXSo/CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGFhYWEKKyAwOiAKKworL1thYl0/L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW2FiXT8rCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGFhYWEKKyAwOiBhCisKKy9bYWJdPz8vQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYWJdPz8KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYWFhYQorIDA6IAorCisvW2FiXSsvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYWJdKysKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYWFhYQorIDA6IGFhYWEKKworL1thYl0rPy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFthYl0rPworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBhYWFhCisgMDogYQorCisvW2FiXXsyLDN9L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW2FiXXsyLDN9KworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBhYWFhCisgMDogYWFhCisKKy9bYWJdezIsM30/L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW2FiXXsyLDN9PworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBhYWFhCisgMDogYWEKKworL1thYl17Mix9L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW2FiXXsyLH0rCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGFhYWEKKyAwOiBhYWFhCisKKy9bYWJdezIsfT8vQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYWJdezIsfT8KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYWFhYQorIDA6IGFhCisKKy9cZCtcc3swLDV9PVxzKlxTPz1cd3swLDR9XFcqL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXGQrKworICAgICAgICBcc3swLDV9KworICAgICAgICA9CisgICAgICAgIFxzKisKKyAgICAgICAgXFM/CisgICAgICAgID0KKyAgICAgICAgXHd7MCw0fSsKKyAgICAgICAgXFcqKworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1thLWRdezUsMTJ9W2UtejAtOV0qI1teYS16XStbYi15XSphWzItN10/W14wLTlhLXpdKy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFthLWRdezUsMTJ9KworICAgICAgICBbMC05ZS16XSorCisgICAgICAgICMKKyAgICAgICAgW1x4MDAtYHstXHhmZl0gKG5lZykrKworICAgICAgICBbYi15XSorCisgICAgICAgIGEKKyAgICAgICAgWzItN10/KworICAgICAgICBbXHgwMC0vOi1gey1ceGZmXSAobmVnKSsrCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW2Etel0qXHMjWyBcdF0/XFMjW2EtY10qXFMjW0MtR10rP1xkI1s0LThdKlxEI1s0LTksXSpcRCNbISRdezAsNX1cdyNbTS1YZi1sXStcVyNbYS1jLF0/XFcvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYS16XSorCisgICAgICAgIFxzCisgICAgICAgICMKKyAgICAgICAgW1x4MDkgXT8rCisgICAgICAgIFxTCisgICAgICAgICMKKyAgICAgICAgW2EtY10qCisgICAgICAgIFxTCisgICAgICAgICMKKyAgICAgICAgW0MtR10rKworICAgICAgICBcZAorICAgICAgICAjCisgICAgICAgIFs0LThdKisKKyAgICAgICAgXEQKKyAgICAgICAgIworICAgICAgICBbLDQtOV0qCisgICAgICAgIFxECisgICAgICAgICMKKyAgICAgICAgWyEkXXswLDV9KworICAgICAgICBcdworICAgICAgICAjCisgICAgICAgIFtNLVhmLWxdKysKKyAgICAgICAgXFcKKyAgICAgICAgIworICAgICAgICBbLGEtY10/CisgICAgICAgIFxXCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYSsoYWF8YmIpKmMjYSooYmJ8Y2MpKmEjYT8oYmJ8Y2MpKmQjW2EtZl0qKGd8aGgpKmYvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhKworICAgICAgICBCcmF6ZXJvCisgICAgICAgIENCcmEgMQorICAgICAgICBhYQorICAgICAgICBBbHQKKyAgICAgICAgYmIKKyAgICAgICAgS2V0Um1heAorICAgICAgICBjIworICAgICAgICBhKgorICAgICAgICBCcmF6ZXJvCisgICAgICAgIENCcmEgMgorICAgICAgICBiYgorICAgICAgICBBbHQKKyAgICAgICAgY2MKKyAgICAgICAgS2V0Um1heAorICAgICAgICBhIworICAgICAgICBhPysKKyAgICAgICAgQnJhemVybworICAgICAgICBDQnJhIDMKKyAgICAgICAgYmIKKyAgICAgICAgQWx0CisgICAgICAgIGNjCisgICAgICAgIEtldFJtYXgKKyAgICAgICAgZCMKKyAgICAgICAgW2EtZl0qCisgICAgICAgIEJyYXplcm8KKyAgICAgICAgQ0JyYSA0CisgICAgICAgIGcKKyAgICAgICAgQWx0CisgICAgICAgIGhoCisgICAgICAgIEtldFJtYXgKKyAgICAgICAgZgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1thLWZdKihnfGhofGkpKmkjW2EteF17NCx9KHl7MCw2fSkqeSNbYS1rXSsobGx8bW0pK24vQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYS1mXSorCisgICAgICAgIEJyYXplcm8KKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGcKKyAgICAgICAgQWx0CisgICAgICAgIGhoCisgICAgICAgIEFsdAorICAgICAgICBpCisgICAgICAgIEtldFJtYXgKKyAgICAgICAgaSMKKyAgICAgICAgW2EteF17NCx9CisgICAgICAgIEJyYXplcm8KKyAgICAgICAgU0NCcmEgMgorICAgICAgICB5ezAsNn0KKyAgICAgICAgS2V0Um1heAorICAgICAgICB5IworICAgICAgICBbYS1rXSsrCisgICAgICAgIENCcmEgMworICAgICAgICBsbAorICAgICAgICBBbHQKKyAgICAgICAgbW0KKyAgICAgICAgS2V0Um1heAorICAgICAgICBuCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW2EtZl0qKD8+Z2d8aGgpKyNbYS1mXSooPz5nZ3xoaCk/I1thLWZdKig/PmdnfGhoKSphI1thLWZdKig/PmdnfGhoKSpoL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW2EtZl0qKworICAgICAgICBPbmNlX05DCisgICAgICAgIGdnCisgICAgICAgIEFsdAorICAgICAgICBoaAorICAgICAgICBLZXRSbWF4CisgICAgICAgICMKKyAgICAgICAgW2EtZl0qKworICAgICAgICBCcmF6ZXJvCisgICAgICAgIE9uY2VfTkMKKyAgICAgICAgZ2cKKyAgICAgICAgQWx0CisgICAgICAgIGhoCisgICAgICAgIEtldAorICAgICAgICAjCisgICAgICAgIFthLWZdKgorICAgICAgICBCcmF6ZXJvCisgICAgICAgIE9uY2VfTkMKKyAgICAgICAgZ2cKKyAgICAgICAgQWx0CisgICAgICAgIGhoCisgICAgICAgIEtldFJtYXgKKyAgICAgICAgYSMKKyAgICAgICAgW2EtZl0qKworICAgICAgICBCcmF6ZXJvCisgICAgICAgIE9uY2VfTkMKKyAgICAgICAgZ2cKKyAgICAgICAgQWx0CisgICAgICAgIGhoCisgICAgICAgIEtldFJtYXgKKyAgICAgICAgaAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1thLWNdKmQvSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW2EtY10qKworICAgICAgICBkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgYyBkIAorTGFzdCBjb2RlIHVuaXQgPSAnZCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvW2EtY10rZC9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYS1jXSsrCisgICAgICAgIGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiBjIAorTGFzdCBjb2RlIHVuaXQgPSAnZCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorCisvW2EtY10/ZC9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYS1jXT8rCisgICAgICAgIGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiBjIGQgCitMYXN0IGNvZGUgdW5pdCA9ICdkJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9bYS1jXXs0LDZ9ZC9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYS1jXXs0LDZ9KworICAgICAgICBkCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgYyAKK0xhc3QgY29kZSB1bml0ID0gJ2QnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDUKKworL1thLWNdezAsNn1kL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFthLWNdezAsNn0rCisgICAgICAgIGQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiBjIGQgCitMYXN0IGNvZGUgdW5pdCA9ICdkJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKyMgRW5kIG9mIHNwZWNpYWwgYXV0by1wb3NzZXNzaXZlIHRlc3RzIAorCisvXkFcb3sxMjM5fUIvCitGYWlsZWQ6IGVycm9yIDE2NCBhdCBvZmZzZXQgODogbm9uLW9jdGFsIGNoYXJhY3RlciBpbiBcb3t9IChjbG9zaW5nIGJyYWNlIG1pc3Npbmc/KQorICAgIEFcMTIzQgorCisvXkFcb0IvCitGYWlsZWQ6IGVycm9yIDE1NSBhdCBvZmZzZXQgMzogbWlzc2luZyBvcGVuaW5nIGJyYWNlIGFmdGVyIFxvCisgICAgCisvXkFceHt6en1CLworRmFpbGVkOiBlcnJvciAxNjcgYXQgb2Zmc2V0IDU6IG5vbi1oZXggY2hhcmFjdGVyIGluIFx4e30gKGNsb3NpbmcgYnJhY2UgbWlzc2luZz8pCisKKy9eQVx4ezEyWi8KK0ZhaWxlZDogZXJyb3IgMTY3IGF0IG9mZnNldCA3OiBub24taGV4IGNoYXJhY3RlciBpbiBceHt9IChjbG9zaW5nIGJyYWNlIG1pc3Npbmc/KQorCisvXkFceHsvCitGYWlsZWQ6IGVycm9yIDE2NyBhdCBvZmZzZXQgNTogbm9uLWhleCBjaGFyYWN0ZXIgaW4gXHh7fSAoY2xvc2luZyBicmFjZSBtaXNzaW5nPykKKworL1thYl0rKy9CLG5vX2F1dG9fcG9zc2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbYWJdKysKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXmFiXSorL0Isbm9fYXV0b19wb3NzZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtceDAwLWBjLVx4ZmZdIChuZWcpKisKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hezR9Ky9CLG5vX2F1dG9fcG9zc2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhezR9CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYXs0fSsvQmksbm9fYXV0b19wb3NzZXNzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgIC9pIGF7NH0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bYS1bOmRpZ2l0Ol1dKy8KK0ZhaWxlZDogZXJyb3IgMTUwIGF0IG9mZnNldCAzOiBpbnZhbGlkIHJhbmdlIGluIGNoYXJhY3RlciBjbGFzcworCisvW0EtWzpkaWdpdDpdXSsvCitGYWlsZWQ6IGVycm9yIDE1MCBhdCBvZmZzZXQgMzogaW52YWxpZCByYW5nZSBpbiBjaGFyYWN0ZXIgY2xhc3MKKworL1thLVsueHh4Ll1dKy8KK0ZhaWxlZDogZXJyb3IgMTUwIGF0IG9mZnNldCAzOiBpbnZhbGlkIHJhbmdlIGluIGNoYXJhY3RlciBjbGFzcworCisvW2EtWz14eHg9XV0rLworRmFpbGVkOiBlcnJvciAxNTAgYXQgb2Zmc2V0IDM6IGludmFsaWQgcmFuZ2UgaW4gY2hhcmFjdGVyIGNsYXNzCisKKy9bYS1bIXh4eCFdXSsvCitGYWlsZWQ6IGVycm9yIDEwOCBhdCBvZmZzZXQgMzogcmFuZ2Ugb3V0IG9mIG9yZGVyIGluIGNoYXJhY3RlciBjbGFzcworCisvW0EtWyF4eHghXV0rLworICAgIEFdXV0KKyAwOiBBXV1dCisKKy9bYS1cZF0rLworRmFpbGVkOiBlcnJvciAxNTAgYXQgb2Zmc2V0IDQ6IGludmFsaWQgcmFuZ2UgaW4gY2hhcmFjdGVyIGNsYXNzCisKKy8oPzwwYWJjPnh4KS8KK0ZhaWxlZDogZXJyb3IgMTQ0IGF0IG9mZnNldCAzOiBncm91cCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIG5vbi1kaWdpdAorCisvKD8mMWFiYyl4eCg/PDFhYmM+eSkvCitGYWlsZWQ6IGVycm9yIDE0NCBhdCBvZmZzZXQgMTM6IGdyb3VwIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbm9uLWRpZ2l0CisKKy8oPzxhYi1jZD54eCkvCitGYWlsZWQ6IGVycm9yIDE0MiBhdCBvZmZzZXQgNTogc3ludGF4IGVycm9yIGluIHN1YnBhdHRlcm4gbmFtZSAobWlzc2luZyB0ZXJtaW5hdG9yKQorCisvKD8nMGFiYyd4eCkvCitGYWlsZWQ6IGVycm9yIDE0NCBhdCBvZmZzZXQgMzogZ3JvdXAgbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBub24tZGlnaXQKKworLyg/UDwwYWJjPnh4KS8KK0ZhaWxlZDogZXJyb3IgMTQ0IGF0IG9mZnNldCA0OiBncm91cCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIG5vbi1kaWdpdAorCisvXGs8NWdoaj4vCitGYWlsZWQ6IGVycm9yIDE0NCBhdCBvZmZzZXQgMzogZ3JvdXAgbmFtZSBtdXN0IHN0YXJ0IHdpdGggYSBub24tZGlnaXQKKworL1xrJzVnaGonLworRmFpbGVkOiBlcnJvciAxNDQgYXQgb2Zmc2V0IDM6IGdyb3VwIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbm9uLWRpZ2l0CisKKy9ca3syZmdofS8KK0ZhaWxlZDogZXJyb3IgMTQ0IGF0IG9mZnNldCAzOiBncm91cCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIG5vbi1kaWdpdAorCisvKD9QPTh5dWtpKS8KK0ZhaWxlZDogZXJyb3IgMTQ0IGF0IG9mZnNldCA0OiBncm91cCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIG5vbi1kaWdpdAorCisvXGd7NGRmfS8KK0ZhaWxlZDogZXJyb3IgMTQ0IGF0IG9mZnNldCAzOiBncm91cCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIG5vbi1kaWdpdAorCisvKD8mMWFiYyl4eCg/PDFhYmM+eSkvCitGYWlsZWQ6IGVycm9yIDE0NCBhdCBvZmZzZXQgMTM6IGdyb3VwIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbm9uLWRpZ2l0CisKKy8oP1A+MWFiYyl4eCg/PDFhYmM+eSkvCitGYWlsZWQ6IGVycm9yIDE0NCBhdCBvZmZzZXQgMTQ6IGdyb3VwIG5hbWUgbXVzdCBzdGFydCB3aXRoIGEgbm9uLWRpZ2l0CisKKy9cZyczZ2gnLworRmFpbGVkOiBlcnJvciAxNTcgYXQgb2Zmc2V0IDI6IFxnIGlzIG5vdCBmb2xsb3dlZCBieSBhIGJyYWNlZCwgYW5nbGUtYnJhY2tldGVkLCBvciBxdW90ZWQgbmFtZS9udW1iZXIgb3IgYnkgYSBwbGFpbiBudW1iZXIKKworL1xnPDVmZz4vCitGYWlsZWQ6IGVycm9yIDE1NyBhdCBvZmZzZXQgMjogXGcgaXMgbm90IGZvbGxvd2VkIGJ5IGEgYnJhY2VkLCBhbmdsZS1icmFja2V0ZWQsIG9yIHF1b3RlZCBuYW1lL251bWJlciBvciBieSBhIHBsYWluIG51bWJlcgorCisvKD8oPDRnaD4pYWJjKS8KK0ZhaWxlZDogZXJyb3IgMTQ0IGF0IG9mZnNldCA0OiBncm91cCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIG5vbi1kaWdpdAorCisvKD8oJzRnaCcpYWJjKS8KK0ZhaWxlZDogZXJyb3IgMTQ0IGF0IG9mZnNldCA0OiBncm91cCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIG5vbi1kaWdpdAorCisvKD8oNGdoKWFiYykvCitGYWlsZWQ6IGVycm9yIDEyNiBhdCBvZmZzZXQgNDogbWFsZm9ybWVkIG51bWJlciBvciBuYW1lIGFmdGVyICg/KAorCisvKD8oUiY2eWgpYWJjKS8KK0ZhaWxlZDogZXJyb3IgMTQ0IGF0IG9mZnNldCA1OiBncm91cCBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhIG5vbi1kaWdpdAorCisvKCgoYVwyKXwoYSopXGc8LTE+KSkqYT8vQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBCcmF6ZXJvCisgICAgICAgIFNDQnJhIDEKKyAgICAgICAgT25jZQorICAgICAgICBDQnJhIDIKKyAgICAgICAgQ0JyYSAzCisgICAgICAgIGEKKyAgICAgICAgXDIKKyAgICAgICAgS2V0CisgICAgICAgIEFsdAorICAgICAgICBDQnJhIDQKKyAgICAgICAgYSoKKyAgICAgICAgS2V0CisgICAgICAgIFJlY3Vyc2UKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBLZXRSbWF4CisgICAgICAgIGE/KworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUZXN0IHRoZSB1Z2x5ICJzdGFydCBvciBlbmQgb2Ygd29yZCIgY29tcGF0aWJpbGl0eSBzeW50YXguCisKKy9bWzo8Ol1dcmVkW1s6PjpdXS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFxiCisgICAgICAgIEFzc2VydAorICAgICAgICBcdworICAgICAgICBLZXQKKyAgICAgICAgcmVkCisgICAgICAgIFxiCisgICAgICAgIEFzc2VydEIKKyAgICAgICAgUmV2ZXJzZQorICAgICAgICBcdworICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgbGl0dGxlIHJlZCByaWRpbmcgaG9vZAorIDA6IHJlZAorICAgIGEgL3JlZC8gdGhpbmcgCisgMDogcmVkCisgICAgcmVkIGlzIGEgY29sb3VyCisgMDogcmVkCisgICAgcHV0IGl0IGFsbCBvbiByZWQgIAorIDA6IHJlZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgbm8gcmVkdWN0aW9uCitObyBtYXRjaAorICAgIEFsZnJlZCBXaW5pZnJlZAorTm8gbWF0Y2gKKyAgICAKKy9bYVs6PDpdXSBzaG91bGQgZ2l2ZSBlcnJvci8KK0ZhaWxlZDogZXJyb3IgMTMwIGF0IG9mZnNldCA0OiB1bmtub3duIFBPU0lYIGNsYXNzIG5hbWUKKworLyg/PWFiXEspL2FmdGVydGV4dAorICAgIGFiY2RcPXN0YXJ0Y2hhcgorU3RhcnQgb2YgbWF0Y2hlZCBzdHJpbmcgaXMgYmV5b25kIGl0cyBlbmQgLSBkaXNwbGF5aW5nIGZyb20gZW5kIHRvIHN0YXJ0LgorIDA6IGFiCisgMCsgYWJjZAorCisvYWJjZC9uZXdsaW5lPWxmLGZpcnN0bGluZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHhcbnhhYmNkCitObyBtYXRjaAorICAgIAorIyBUZXN0IHN0YWNrIGd1YXJkIGV4dGVybmFsIGNhbGxzLgorCisvKCgoYSkpKS9zdGFja2d1YXJkPTEKK0ZhaWxlZDogZXJyb3IgMTMzIGF0IG9mZnNldCAyOiBwYXJlbnRoZXNlcyBhcmUgdG9vIGRlZXBseSBuZXN0ZWQgKHN0YWNrIGNoZWNrKQorCisvKCgoYSkpKS9zdGFja2d1YXJkPTIKK0ZhaWxlZDogZXJyb3IgMTMzIGF0IG9mZnNldCAzOiBwYXJlbnRoZXNlcyBhcmUgdG9vIGRlZXBseSBuZXN0ZWQgKHN0YWNrIGNoZWNrKQorCisvKCgoYSkpKS9zdGFja2d1YXJkPTMKKworLygoKCgoYSkpKSkpLworCisjIEVuZCBzdGFjayBndWFyZCB0ZXN0cworCisvXlx3Kyg/PlxzKikoPzw9XHcpL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBcdysKKyAgICAgICAgT25jZV9OQworICAgICAgICBccyorCisgICAgICAgIEtldAorICAgICAgICBBc3NlcnRCCisgICAgICAgIFJldmVyc2UKKyAgICAgICAgXHcKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXG90aGluZy8KK0ZhaWxlZDogZXJyb3IgMTU1IGF0IG9mZnNldCAxOiBtaXNzaW5nIG9wZW5pbmcgYnJhY2UgYWZ0ZXIgXG8KKworL1xve30vCitGYWlsZWQ6IGVycm9yIDE3OCBhdCBvZmZzZXQgMTogZGlnaXRzIG1pc3NpbmcgaW4gXHh7fSBvciBcb3t9CisKKy9cb3t3aGF0ZXZlcn0vCitGYWlsZWQ6IGVycm9yIDE2NCBhdCBvZmZzZXQgMzogbm9uLW9jdGFsIGNoYXJhY3RlciBpbiBcb3t9IChjbG9zaW5nIGJyYWNlIG1pc3Npbmc/KQorCisvXHh0aGluZy8KKworL1x4e30vCitGYWlsZWQ6IGVycm9yIDE3OCBhdCBvZmZzZXQgMzogZGlnaXRzIG1pc3NpbmcgaW4gXHh7fSBvciBcb3t9CisKKy9ceHt3aGF0ZXZlcn0vCitGYWlsZWQ6IGVycm9yIDE2NyBhdCBvZmZzZXQgMzogbm9uLWhleCBjaGFyYWN0ZXIgaW4gXHh7fSAoY2xvc2luZyBicmFjZSBtaXNzaW5nPykKKworL0FcOEIvCitGYWlsZWQ6IGVycm9yIDExNSBhdCBvZmZzZXQgMjogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKy9BXDlCLworRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDI6IHJlZmVyZW5jZSB0byBub24tZXhpc3RlbnQgc3VicGF0dGVybgorCisjIFRoaXMgb25lIGlzIGhlcmUgYmVjYXVzZSBQZXJsIGZhaWxzIHRvIG1hdGNoICIxMiIgZm9yIHRoaXMgcGF0dGVybiB3aGVuIHRoZSAkIAorIyBpcyBwcmVzZW50LgorICAgIAorL14oPyg/PWFiYylcd3szfTp8XGRcZCkkLworICAgIGFiYzoKKyAwOiBhYmM6CisgICAgMTIKKyAwOiAxMgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzCitObyBtYXRjaAorICAgIHh5eiAgICAKK05vIG1hdGNoCisKKyMgUGVybCBnZXRzIHRoaXMgb25lIHdyb25nLCBnaXZpbmcgImEiIGFzIHRoZSBhZnRlciB0ZXh0IGZvciBjYSBhbmQgZmFpbGluZyB0byAKKyMgbWF0Y2ggZm9yIGNkLgorCisvKD8oPz1hYilhYikvYWZ0ZXJ0ZXh0CisgICAgYWJ4eHgKKyAwOiBhYgorIDArIHh4eAorICAgIGNhCisgMDogCisgMCsgY2EKKyAgICBjZCAKKyAwOiAKKyAwKyBjZAorICAgIAorIyBUaGlzIHNob3VsZCB0ZXN0IGJvdGggcGF0aHMgZm9yIHByb2Nlc3NpbmcgT1BfUkVDVVJTRS4gCisKKy8oPyhSKWErfCg/UiliKS8KKyAgICBhYWFhYmNkZQorIDA6IGFhYWFiCisgICAgYWFhYWJjZGVcPW92ZWN0b3I9MTAwCisgMDogYWFhYWIKKworL2EqP2IqPy8KKyAgICBhYgorIDA6IAorCisvKCpOT1RFTVBUWSlhKj9iKj8vCisgICAgYWIKKyAwOiBhCisgICAgYmEKKyAwOiBiCisgICAgY2IgIAorIDA6IGIKKworLygqTk9URU1QVFlfQVRTVEFSVClhKj9iKj8vYWZ0ZXJ0ZXh0CisgICAgYWIKKyAwOiBhCisgMCsgYgorICAgIGNkYWIgCisgMDogCisgMCsgZGFiCisKKy8oPyhWRVJTSU9OPj0xMC4wKXllc3xubykvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICB5ZXNubworIDA6IHllcworICAgIAorLyg/KFZFUlNJT049OCl5ZXMpezN9L0JJLGFmdGVydGV4dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDb25kCisgICAgICAgIENvbmQgZmFsc2UKKyAgICAgICAgeWVzCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgeWVzbm8KKyAwOiAKKyAwKyB5ZXNubworCisvKD8oVkVSU0lPTj04KXllc3xubyl7M30vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDYKKyAgICB5ZXNub25vbm95ZXMKKyAwOiBub25vbm8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHllc25vICAgCitObyBtYXRjaAorCisvKD86KD88VkVSU0lPTj5hYmMpfHh5eikoPyhWRVJTSU9OKXllc3xubykvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIFZFUlNJT04gICAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIHggCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDUKKyAgICBhYmN5ZXMKKyAwOiBhYmN5ZXMKKyAxOiBhYmMKKyAgICB4eXpubworIDA6IHh5em5vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNubworTm8gbWF0Y2gKKyAgICB4eXp5ZXMgICAgCitObyBtYXRjaAorCisvKD8oVkVSU0lPTjwxMCl5ZXN8bm8pLworRmFpbGVkOiBlcnJvciAxNzkgYXQgb2Zmc2V0IDEwOiBzeW50YXggZXJyb3IgaW4gKD8oVkVSU0lPTiBjb25kaXRpb24KKworLyg/KFZFUlNJT04+MTApeWVzfG5vKS8KK0ZhaWxlZDogZXJyb3IgMTc5IGF0IG9mZnNldCAxMTogc3ludGF4IGVycm9yIGluICg/KFZFUlNJT04gY29uZGl0aW9uCisKKy8oPyhWRVJTSU9OPj0xMC4wLjApeWVzfG5vKS8KK0ZhaWxlZDogZXJyb3IgMTc5IGF0IG9mZnNldCAxNjogc3ludGF4IGVycm9yIGluICg/KFZFUlNJT04gY29uZGl0aW9uCisKKy8oPyhWRVJTSU9OPTEwLjEwMSl5ZXN8bm8pLworRmFpbGVkOiBlcnJvciAxNzkgYXQgb2Zmc2V0IDE3OiBzeW50YXggZXJyb3IgaW4gKD8oVkVSU0lPTiBjb25kaXRpb24KKworL2FiY2QvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2QnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKworL2FiY2QvSSxub19zdGFydF9vcHRpbWl6ZQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBub19zdGFydF9vcHRpbWl6ZQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy8ofGFiKSo/ZC9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgZCAKK0xhc3QgY29kZSB1bml0ID0gJ2QnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgIGFiZAorIDA6IGFiZAorIDE6IGFiCisgICB4eWQgCisgMDogZAorCisvKHxhYikqP2QvSSxub19zdGFydF9vcHRpbWl6ZQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitPcHRpb25zOiBub19zdGFydF9vcHRpbWl6ZQorTGFzdCBjb2RlIHVuaXQgPSAnZCcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgYWJkCisgMDogYWJkCisgMTogYWIKKyAgIHh5ZCAKKyAwOiBkCisKKy9cazxBPiooPzxBPmFhKSg/PEE+YmIpL21hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBhYWJiCisgMDogYWFiYgorIDE6IGFhCisgMjogYmIKKworLygoKCgoYSkpKSkpL3BhcmVuc19uZXN0X2xpbWl0PTIKK0ZhaWxlZDogZXJyb3IgMTE5IGF0IG9mZnNldCAzOiBwYXJlbnRoZXNlcyBhcmUgdG9vIGRlZXBseSBuZXN0ZWQKKworL2FiYy9yZXBsYWNlPVhZWgorICAgIDEyMzEyMworIDA6IDEyMzEyMworICAgIDEyM2FiYzEyMworIDE6IDEyM1hZWjEyMworICAgIDEyM2FiYzEyM2FiYzEyMworIDE6IDEyM1hZWjEyM2FiYzEyMworICAgIDEyMzEyM1w9emVyb190ZXJtaW5hdGUKKyAwOiAxMjMxMjMKKyAgICAxMjNhYmMxMjNcPXplcm9fdGVybWluYXRlCisgMTogMTIzWFlaMTIzCisgICAgMTIzYWJjMTIzYWJjMTIzXD16ZXJvX3Rlcm1pbmF0ZQorIDE6IDEyM1hZWjEyM2FiYzEyMworCisvYWJjL2cscmVwbGFjZT1YWVoKKyAgICAxMjNhYmMxMjMKKyAxOiAxMjNYWVoxMjMKKyAgICAxMjNhYmMxMjNhYmMxMjMKKyAyOiAxMjNYWVoxMjNYWVoxMjMKKworL2FiYy9yZXBsYWNlPVgkJFoKKyAgICAxMjNhYmMxMjMKKyAxOiAxMjNYJFoxMjMKKworL2FiYy9nLHJlcGxhY2U9WCQkWgorICAgIDEyM2FiYzEyM2FiYzEyMworIDI6IDEyM1gkWjEyM1gkWjEyMworCisvYShiKWMoZCllL3JlcGxhY2U9WCQxWSR7Mn1aCisgICAgImFiY2RlIgorIDE6ICJYYllkWiIKKworL2EoYiljKGQpZS9yZXBsYWNlPVgkMVkkezJ9WixnbG9iYWwKKyAgICAiYWJjZGUtYWJjZGUiCisgMjogIlhiWWRaLVhiWWRaIgorCisvYSg/PE9ORT5iKWMoPzxUV08+ZCllL3JlcGxhY2U9WCRPTkUrJHtUV099WgorICAgICJhYmNkZSIKKyAxOiAiWGIrZFoiCisKKy9hKD88T05FPmIpYyg/PFRXTz5kKWUvZyxyZXBsYWNlPVgkT05FKyR7VFdPfVoKKyAgICAiYWJjZGUtYWJjZGUtIgorIDI6ICJYYitkWi1YYitkWi0iCisKKy9hYmMvcmVwbGFjZT1hJCsrCisgICAgMTIzYWJjCitGYWlsZWQ6IGVycm9yIC0zNSBhdCBvZmZzZXQgMiBpbiByZXBsYWNlbWVudDogaW52YWxpZCByZXBsYWNlbWVudCBzdHJpbmcKKworL2FiYy9yZXBsYWNlPWEkYmFkCisgICAgMTIzYWJjCitGYWlsZWQ6IGVycm9yIC00OSBhdCBvZmZzZXQgNSBpbiByZXBsYWNlbWVudDogdW5rbm93biBzdWJzdHJpbmcKKworL2FiYy9yZXBsYWNlPWEke0EyMzQ1Njc4OTAxMjM0NTY3ODlfMTIzNDU2Nzg5MDEyfXoKKyAgICAxMjNhYmMKK0ZhaWxlZDogZXJyb3IgLTQ5IGF0IG9mZnNldCAzNiBpbiByZXBsYWNlbWVudDogdW5rbm93biBzdWJzdHJpbmcKKworL2FiYy9yZXBsYWNlPWEke0EyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyM316CisgICAgMTIzYWJjCitGYWlsZWQ6IGVycm9yIC0zNSBhdCBvZmZzZXQgMzUgaW4gcmVwbGFjZW1lbnQ6IGludmFsaWQgcmVwbGFjZW1lbnQgc3RyaW5nCisKKy9hYmMvcmVwbGFjZT1hJHtiY2QKKyAgICAxMjNhYmMKK0ZhaWxlZDogZXJyb3IgLTU4IGF0IG9mZnNldCA2IGluIHJlcGxhY2VtZW50OiBleHBlY3RlZCBjbG9zaW5nIGN1cmx5IGJyYWNrZXQgaW4gcmVwbGFjZW1lbnQgc3RyaW5nCisKKy9hYmMvcmVwbGFjZT1hJHtiK2R9egorICAgIDEyM2FiYworRmFpbGVkOiBlcnJvciAtNTggYXQgb2Zmc2V0IDQgaW4gcmVwbGFjZW1lbnQ6IGV4cGVjdGVkIGNsb3NpbmcgY3VybHkgYnJhY2tldCBpbiByZXBsYWNlbWVudCBzdHJpbmcKKworL2FiYy9yZXBsYWNlPVsxMF1YWVoKKyAgICAxMjNhYmMxMjMKKyAxOiAxMjNYWVoxMjMKKworL2FiYy9yZXBsYWNlPVs5XVhZWgorICAgIDEyM2FiYzEyMworRmFpbGVkOiBlcnJvciAtNDg6IG5vIG1vcmUgbWVtb3J5CisgICAgCisvYWJjL3JlcGxhY2U9eHl6CisgICAgMWFiYzJcPXBhcnRpYWxfaGFyZAorRmFpbGVkOiBlcnJvciAtMzQ6IGJhZCBvcHRpb24gdmFsdWUKKworL2FiYy9yZXBsYWNlPXh5egorICAgIDEyM2FiYzQ1NgorIDE6IDEyM3h5ejQ1NgorICAgIDEyM2FiYzQ1Nlw9cmVwbGFjZT1wcXIKKyAxOiAxMjNwcXI0NTYKKyAgICAxMjNhYmM0NTZhYmM3ODkKKyAxOiAxMjN4eXo0NTZhYmM3ODkKKyAgICAxMjNhYmM0NTZhYmM3ODlcPWcKKyAyOiAxMjN4eXo0NTZ4eXo3ODkKKworLyg/PD1hYmMpKHxkZWYpL2cscmVwbGFjZT08JDA+CisgICAgMTIzYWJjeHl6YWJjZGVmNzg5YWJjcHFyCisgNDogMTIzYWJjPD54eXphYmM8PjxkZWY+Nzg5YWJjPD5wcXIKKyAgICAKKy8uL3JlcGxhY2U9JDAKKyAgICBhCisgMTogYQorICAgIAorLyguKSguKS9yZXBsYWNlPSQyKyQxCisgICAgYWJjCisgMTogYithYworICAgIAorLyg/PEE+LikoPzxCPi4pL3JlcGxhY2U9JEIrJEEKKyAgICBhYmMKKyAxOiBiK2FjCisgICAgCisvKC4pKC4pL2cscmVwbGFjZT0kMiQxCisgICAgYWJjZGVmZ2ggIAorIDQ6IGJhZGNmZWhnCisgICAgCisvKCo6cGVhcilhcHBsZXwoKjpvcmFuZ2UpbGVtb258KCo6c3RyYXdiZXJyeSlibGFja2JlcnJ5L2cscmVwbGFjZT0keypNQVJLfQorICAgIGFwcGxlIGxlbW9uIGJsYWNrYmVycnkKKyAzOiBwZWFyIG9yYW5nZSBzdHJhd2JlcnJ5CisgICAgYXBwbGUgc3RydWRlbAorIDE6IHBlYXIgc3RydWRlbAorICAgIGZydWl0bGVzcyAgCisgMDogZnJ1aXRsZXNzCisKKy8oKjpwZWFyKWFwcGxlfCgqOm9yYW5nZSlsZW1vbnwoKjpzdHJhd2JlcnJ5KWJsYWNrYmVycnkvcmVwbGFjZT0keypNQVJLfSBzYXVjZSwKKyAgICBhcHBsZSBsZW1vbiBibGFja2JlcnJ5CisgMTogcGVhciBzYXVjZSBsZW1vbiBibGFja2JlcnJ5CisKKy8oKjpwZWFyKWFwcGxlfCgqOm9yYW5nZSlsZW1vbnwoKjpzdHJhd2JlcnJ5KWJsYWNrYmVycnkvZyxyZXBsYWNlPTwkKk1BUks+CisgICAgYXBwbGUgbGVtb24gYmxhY2tiZXJyeQorIDM6IDxwZWFyPiA8b3JhbmdlPiA8c3RyYXdiZXJyeT4KKyAgICBhcHBsZSBzdHJ1ZGVsCisgMTogPHBlYXI+IHN0cnVkZWwKKyAgICBmcnVpdGxlc3MgIAorIDA6IGZydWl0bGVzcworICAgIAorLygqOnBlYXIpYXBwbGUvZyxyZXBsYWNlPSR7Kk1BUktJTkd9IAorICAgIGFwcGxlIGxlbW9uIGJsYWNrYmVycnkKK0ZhaWxlZDogZXJyb3IgLTM1IGF0IG9mZnNldCAxMSBpbiByZXBsYWNlbWVudDogaW52YWxpZCByZXBsYWNlbWVudCBzdHJpbmcKKworLygqOnBlYXIpYXBwbGUvZyxyZXBsYWNlPSR7Kk1BUkstdGltZQorICAgIGFwcGxlIGxlbW9uIGJsYWNrYmVycnkKK0ZhaWxlZDogZXJyb3IgLTU4IGF0IG9mZnNldCA3IGluIHJlcGxhY2VtZW50OiBleHBlY3RlZCBjbG9zaW5nIGN1cmx5IGJyYWNrZXQgaW4gcmVwbGFjZW1lbnQgc3RyaW5nCisKKy8oKjpwZWFyKWFwcGxlL2cscmVwbGFjZT0keyptYXJrfSAKKyAgICBhcHBsZSBsZW1vbiBibGFja2JlcnJ5CitGYWlsZWQ6IGVycm9yIC0zNSBhdCBvZmZzZXQgOCBpbiByZXBsYWNlbWVudDogaW52YWxpZCByZXBsYWNlbWVudCBzdHJpbmcKKworLygqOnBlYXIpYXBwbGV8KCo6b3JhbmdlKWxlbW9ufCgqOnN0cmF3YmVycnkpYmxhY2tiZXJyeS9nLHJlcGxhY2U9PCQqTUFSS0VUPgorICAgIGFwcGxlIGxlbW9uIGJsYWNrYmVycnkKK0ZhaWxlZDogZXJyb3IgLTM1IGF0IG9mZnNldCA5IGluIHJlcGxhY2VtZW50OiBpbnZhbGlkIHJlcGxhY2VtZW50IHN0cmluZworCisvKCo6cGVhcilhcHBsZXwoKjpvcmFuZ2UpbGVtb258KCo6c3RyYXdiZXJyeSlibGFja2JlcnJ5L2cscmVwbGFjZT1bMjJdJHsqTUFSS30KKyAgICBhcHBsZSBsZW1vbiBibGFja2JlcnJ5CitGYWlsZWQ6IGVycm9yIC00ODogbm8gbW9yZSBtZW1vcnkKKyAgICBhcHBsZSBsZW1vbiBibGFja2JlcnJ5XD1zdWJzdGl0dXRlX292ZXJmbG93X2xlbmd0aAorRmFpbGVkOiBlcnJvciAtNDg6IG5vIG1vcmUgbWVtb3J5OiAyMyBjb2RlIHVuaXRzIGFyZSBuZWVkZWQKKworLygqOnBlYXIpYXBwbGV8KCo6b3JhbmdlKWxlbW9ufCgqOnN0cmF3YmVycnkpYmxhY2tiZXJyeS9nLHJlcGxhY2U9WzIzXSR7Kk1BUkt9CisgICAgYXBwbGUgbGVtb24gYmxhY2tiZXJyeQorIDM6IHBlYXIgb3JhbmdlIHN0cmF3YmVycnkKKworL2FiYy8KKyAgICAxMjNhYmMxMjNcPXJlcGxhY2U9WzldWFlaCitGYWlsZWQ6IGVycm9yIC00ODogbm8gbW9yZSBtZW1vcnkKKyAgICAxMjNhYmMxMjNcPXN1YnN0aXR1dGVfb3ZlcmZsb3dfbGVuZ3RoLHJlcGxhY2U9WzldWFlaCitGYWlsZWQ6IGVycm9yIC00ODogbm8gbW9yZSBtZW1vcnk6IDEwIGNvZGUgdW5pdHMgYXJlIG5lZWRlZAorICAgIDEyM2FiYzEyM1w9c3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGgscmVwbGFjZT1bNl1YWVoKK0ZhaWxlZDogZXJyb3IgLTQ4OiBubyBtb3JlIG1lbW9yeTogMTAgY29kZSB1bml0cyBhcmUgbmVlZGVkCisgICAgMTIzYWJjMTIzXD1zdWJzdGl0dXRlX292ZXJmbG93X2xlbmd0aCxyZXBsYWNlPVsxXVhZWgorRmFpbGVkOiBlcnJvciAtNDg6IG5vIG1vcmUgbWVtb3J5OiAxMCBjb2RlIHVuaXRzIGFyZSBuZWVkZWQKKyAgICAxMjNhYmMxMjNcPXN1YnN0aXR1dGVfb3ZlcmZsb3dfbGVuZ3RoLHJlcGxhY2U9WzBdWFlaCitGYWlsZWQ6IGVycm9yIC00ODogbm8gbW9yZSBtZW1vcnk6IDEwIGNvZGUgdW5pdHMgYXJlIG5lZWRlZAorCisvYShiKWMvCisgICAgMTIzYWJjMTIzXD1yZXBsYWNlPVs5XXgkMXoKK0ZhaWxlZDogZXJyb3IgLTQ4OiBubyBtb3JlIG1lbW9yeQorICAgIDEyM2FiYzEyM1w9c3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGgscmVwbGFjZT1bOV14JDF6CitGYWlsZWQ6IGVycm9yIC00ODogbm8gbW9yZSBtZW1vcnk6IDEwIGNvZGUgdW5pdHMgYXJlIG5lZWRlZAorICAgIDEyM2FiYzEyM1w9c3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGgscmVwbGFjZT1bNl14JDF6CitGYWlsZWQ6IGVycm9yIC00ODogbm8gbW9yZSBtZW1vcnk6IDEwIGNvZGUgdW5pdHMgYXJlIG5lZWRlZAorICAgIDEyM2FiYzEyM1w9c3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGgscmVwbGFjZT1bMV14JDF6CitGYWlsZWQ6IGVycm9yIC00ODogbm8gbW9yZSBtZW1vcnk6IDEwIGNvZGUgdW5pdHMgYXJlIG5lZWRlZAorICAgIDEyM2FiYzEyM1w9c3Vic3RpdHV0ZV9vdmVyZmxvd19sZW5ndGgscmVwbGFjZT1bMF14JDF6CitGYWlsZWQ6IGVycm9yIC00ODogbm8gbW9yZSBtZW1vcnk6IDEwIGNvZGUgdW5pdHMgYXJlIG5lZWRlZAorCisiKCg/PSg/KD89KD8oPz0oPyg/PSgpKSkpKSkpKSkiCisgICAgYQorIDA6IAorIDE6IAorIDI6IAorCisiKD8oPz0pPT0pKCgoKCgoKCgoPz0pKSkpKSkpKSkiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCitObyBtYXRjaAorCisvKGEpKGIpfChjKS8KKyAgICBYY1hcPW92ZWN0b3I9MixnZXQ9MSxnZXQ9MixnZXQ9MyxnZXQ9NCxnZXRhbGwKK01hdGNoZWQsIGJ1dCB0b28gbWFueSBzdWJzdHJpbmdzCisgMDogYworIDE6IDx1bnNldD4KK0dldCBzdWJzdHJpbmcgMSBmYWlsZWQgKC01NSk6IHJlcXVlc3RlZCB2YWx1ZSBpcyBub3Qgc2V0CitHZXQgc3Vic3RyaW5nIDIgZmFpbGVkICgtNTQpOiByZXF1ZXN0ZWQgdmFsdWUgaXMgbm90IGF2YWlsYWJsZQorR2V0IHN1YnN0cmluZyAzIGZhaWxlZCAoLTU0KTogcmVxdWVzdGVkIHZhbHVlIGlzIG5vdCBhdmFpbGFibGUKK0dldCBzdWJzdHJpbmcgNCBmYWlsZWQgKC00OSk6IHVua25vd24gc3Vic3RyaW5nCisgMEwgYworIDFMIAorICAgIAorL3goPz1hYlxLKS8KKyAgICB4YWJcPWdldD0wIAorU3RhcnQgb2YgbWF0Y2hlZCBzdHJpbmcgaXMgYmV5b25kIGl0cyBlbmQgLSBkaXNwbGF5aW5nIGZyb20gZW5kIHRvIHN0YXJ0LgorIDA6IGFiCisgMEcgICgwKQorICAgIHhhYlw9Y29weT0wIAorU3RhcnQgb2YgbWF0Y2hlZCBzdHJpbmcgaXMgYmV5b25kIGl0cyBlbmQgLSBkaXNwbGF5aW5nIGZyb20gZW5kIHRvIHN0YXJ0LgorIDA6IGFiCisgMEMgICgwKQorICAgIHhhYlw9Z2V0YWxsCitTdGFydCBvZiBtYXRjaGVkIHN0cmluZyBpcyBiZXlvbmQgaXRzIGVuZCAtIGRpc3BsYXlpbmcgZnJvbSBlbmQgdG8gc3RhcnQuCisgMDogYWIKKyAwTCAKKworLyg/PEE+YSl8KD88QT5iKS9kdXBuYW1lcworICAgIGFcPW92ZWN0b3I9MSxjb3B5PUEsZ2V0PUEsZ2V0PTIKK01hdGNoZWQsIGJ1dCB0b28gbWFueSBzdWJzdHJpbmdzCisgMDogYQorQ29weSBzdWJzdHJpbmcgJ0EnIGZhaWxlZCAoLTU0KTogcmVxdWVzdGVkIHZhbHVlIGlzIG5vdCBhdmFpbGFibGUKK0dldCBzdWJzdHJpbmcgMiBmYWlsZWQgKC01NCk6IHJlcXVlc3RlZCB2YWx1ZSBpcyBub3QgYXZhaWxhYmxlCitHZXQgc3Vic3RyaW5nICdBJyBmYWlsZWQgKC01NCk6IHJlcXVlc3RlZCB2YWx1ZSBpcyBub3QgYXZhaWxhYmxlCisgICAgYVw9b3ZlY3Rvcj0yLGNvcHk9QSxnZXQ9QSxnZXQ9MgorIDA6IGEKKyAxOiBhCisgIEMgYSAoMSkgQSAobm9uLXVuaXF1ZSkKK0dldCBzdWJzdHJpbmcgMiBmYWlsZWQgKC01NCk6IHJlcXVlc3RlZCB2YWx1ZSBpcyBub3QgYXZhaWxhYmxlCisgIEcgYSAoMSkgQSAobm9uLXVuaXF1ZSkKKyAgICBiXD1vdmVjdG9yPTIsY29weT1BLGdldD1BLGdldD0yCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGIKKyAxOiA8dW5zZXQ+CitDb3B5IHN1YnN0cmluZyAnQScgZmFpbGVkICgtNTUpOiByZXF1ZXN0ZWQgdmFsdWUgaXMgbm90IHNldAorR2V0IHN1YnN0cmluZyAyIGZhaWxlZCAoLTU0KTogcmVxdWVzdGVkIHZhbHVlIGlzIG5vdCBhdmFpbGFibGUKK0dldCBzdWJzdHJpbmcgJ0EnIGZhaWxlZCAoLTU1KTogcmVxdWVzdGVkIHZhbHVlIGlzIG5vdCBzZXQKKworL2EoYiljKGQpLworICAgIGFiY1w9cGgsY29weT0wLGNvcHk9MSxnZXRhbGwKK1BhcnRpYWwgbWF0Y2g6IGFiYworIDBDIGFiYyAoMykKK0NvcHkgc3Vic3RyaW5nIDEgZmFpbGVkICgtMik6IHBhcnRpYWwgbWF0Y2gKK2dldCBzdWJzdHJpbmcgbGlzdCBmYWlsZWQgKC0yKTogcGFydGlhbCBtYXRjaAorCisvXmFiYy9pbmZvCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL15hYmMvaW5mbyxub19kb3RzdGFyX2FuY2hvcgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IG5vX2RvdHN0YXJfYW5jaG9yCitPdmVyYWxsIG9wdGlvbnM6IGFuY2hvcmVkIG5vX2RvdHN0YXJfYW5jaG9yCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworLy4qXGQvaW5mbyxhdXRvX2NhbGxvdXQKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogYXV0b19jYWxsb3V0CitGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYQorLS0tPmFhYQorICswIF4gICAgICAgLioKKyArMiBeICBeICAgIFxkCisgKzIgXiBeICAgICBcZAorICsyIF5eICAgICAgXGQKKyArMiBeICAgICAgIFxkCitObyBtYXRjaAorCisvLipcZC9pbmZvLG5vX2RvdHN0YXJfYW5jaG9yLGF1dG9fY2FsbG91dAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBhdXRvX2NhbGxvdXQgbm9fZG90c3Rhcl9hbmNob3IKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhCistLS0+YWFhCisgKzAgXiAgICAgICAuKgorICsyIF4gIF4gICAgXGQKKyArMiBeIF4gICAgIFxkCisgKzIgXl4gICAgICBcZAorICsyIF4gICAgICAgXGQKKyArMCAgXiAgICAgIC4qCisgKzIgIF4gXiAgICBcZAorICsyICBeXiAgICAgXGQKKyArMiAgXiAgICAgIFxkCisgKzAgICBeICAgICAuKgorICsyICAgXl4gICAgXGQKKyArMiAgIF4gICAgIFxkCitObyBtYXRjaAorCisvLipcZC9kb3RhbGwsaW5mbworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb21waWxlIG9wdGlvbnM6IGRvdGFsbAorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZCBkb3RhbGwKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvLipcZC9kb3RhbGwsbm9fZG90c3Rhcl9hbmNob3IsaW5mbworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBkb3RhbGwgbm9fZG90c3Rhcl9hbmNob3IKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKCpOT19ET1RTVEFSX0FOQ0hPUikoP3MpLipcZC9pbmZvCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK0NvbXBpbGUgb3B0aW9uczogPG5vbmU+CitPdmVyYWxsIG9wdGlvbnM6IG5vX2RvdHN0YXJfYW5jaG9yCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworJ14oPzooYSl8YikoPygxKUF8QiknCisgICAgYUExMjNcPW92ZWN0b3I9MQorTWF0Y2hlZCwgYnV0IHRvbyBtYW55IHN1YnN0cmluZ3MKKyAwOiBhQQorICAgIGFBMTIzXD1vdmVjdG9yPTIKKyAwOiBhQQorIDE6IGEKKworJ14oPzooPzxBQT5hKXxiKSg/KDxBQT4pQXxCKScKKyAgICBhQTEyM1w9b3ZlY3Rvcj0xCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGFBCisgICAgYUExMjNcPW92ZWN0b3I9MgorIDA6IGFBCisgMTogYQorCisnXig/PEFBPikoPzooPzxBQT5hKXxiKSg/KDxBQT4pQXxCKSdkdXBuYW1lcworICAgIGFBMTIzXD1vdmVjdG9yPTEKK01hdGNoZWQsIGJ1dCB0b28gbWFueSBzdWJzdHJpbmdzCisgMDogYUEKKyAgICBhQTEyM1w9b3ZlY3Rvcj0yCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGFBCisgMTogCisgICAgYUExMjNcPW92ZWN0b3I9MworIDA6IGFBCisgMTogCisgMjogYQorCisnXig/Oig/PEFBPlgpfCkoPzooPzxBQT5hKXxiKVxre0FBfSdkdXBuYW1lcworICAgIGFhMTIzXD1vdmVjdG9yPTEKK01hdGNoZWQsIGJ1dCB0b28gbWFueSBzdWJzdHJpbmdzCisgMDogYWEKKyAgICBhYTEyM1w9b3ZlY3Rvcj0yCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGFhCisgMTogPHVuc2V0PgorICAgIGFhMTIzXD1vdmVjdG9yPTMKKyAwOiBhYQorIDE6IDx1bnNldD4KKyAyOiBhCisKKy8oPzxOMTExPig/SikoPzxOMTExPjEoMTExMTExKTExfCkxfDF8KSg/KDxOMTExPikxKS8KKworLyg/PE4+KD9KKSg/PE4+KSkoPy1KKVxrPE4+LworCisjIFF1YW50aWZpZXJzIGFyZSBub3QgYWxsb3dlZCBvbiBjb25kaXRpb24gYXNzZXJ0aW9ucywgYnV0IGFyZSBvdGhlcndpc2UKKyMgT0sgaW4gY29uZGl0aW9ucy4KKworLyg/KD89MCk/KSsvCitGYWlsZWQ6IGVycm9yIDEwOSBhdCBvZmZzZXQgNzogcXVhbnRpZmllciBkb2VzIG5vdCBmb2xsb3cgYSByZXBlYXRhYmxlIGl0ZW0KKworLyg/KD89MCkoPz0wMCk/MDA3NjUpLworICAgICAwMDc2NQorIDA6IDAwNzY1CisKKy8oPyg/PTApKD89MDApPzAwNzY1fCg/ITMpLjU2KS8KKyAgICAgMDA3NjUKKyAwOiAwMDc2NQorICAgICA0NTYKKyAwOiA0NTYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICAzNTYgICAKK05vIG1hdGNoCisKKydeKGEpKisoXHcpJworICAgIGcKKyAwOiBnCisgMTogPHVuc2V0PgorIDI6IGcKKyAgICBnXD1vdmVjdG9yPTEgCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGcKKworJ14oPzphKSorKFx3KScKKyAgICBnCisgMDogZworIDE6IGcKKyAgICBnXD1vdmVjdG9yPTEgCitNYXRjaGVkLCBidXQgdG9vIG1hbnkgc3Vic3RyaW5ncworIDA6IGcKKyAgICAKKyMgVGhlc2UgdHdvIHBhdHRlcm4gc2hvd2VkcyB1cCBjb21waWxlLXRpbWUgYnVncworCisiKCg/Mil7MCwxOTk5fSgpKT8iCisKKy8oKD8rMSkoXDEpKS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIE9uY2UKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIFJlY3Vyc2UKKyAgICAgICAgQ0JyYSAyCisgICAgICAgIFwxCisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIENhbGxvdXRzIHdpdGggc3RyaW5nIGFyZ3VtZW50cworCisvYSg/QyIvCitGYWlsZWQ6IGVycm9yIDE4MSBhdCBvZmZzZXQgNDogbWlzc2luZyB0ZXJtaW5hdGluZyBkZWxpbWl0ZXIgZm9yIGNhbGxvdXQgd2l0aCBzdHJpbmcgYXJndW1lbnQKKworL2EoP0MiYS8KK0ZhaWxlZDogZXJyb3IgMTgxIGF0IG9mZnNldCA0OiBtaXNzaW5nIHRlcm1pbmF0aW5nIGRlbGltaXRlciBmb3IgY2FsbG91dCB3aXRoIHN0cmluZyBhcmd1bWVudAorCisvYSg/QyJhIi8KK0ZhaWxlZDogZXJyb3IgMTM5IGF0IG9mZnNldCA3OiBjbG9zaW5nIHBhcmVudGhlc2lzIGZvciAoP0MgZXhwZWN0ZWQKKworL2EoP0MiYSJiY2RlKD9DImIiKXh5ei8KK0ZhaWxlZDogZXJyb3IgMTM5IGF0IG9mZnNldCA3OiBjbG9zaW5nIHBhcmVudGhlc2lzIGZvciAoP0MgZXhwZWN0ZWQKKworL2EoP0MiYSliIiJjIikvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhCisgICAgICAgIENhbGxvdXRTdHIgImEpYiJjIiA1IDEzIDAKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hYig/QyIgYW55IHRleHQgd2l0aCBzcGFjZXMgIiljZGUvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhYgorICAgICAgICBDYWxsb3V0U3RyICIgYW55IHRleHQgd2l0aCBzcGFjZXMgIiA2IDMwIDEKKyAgICAgICAgY2RlCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGFiY2RlCitDYWxsb3V0ICg2KTogIiBhbnkgdGV4dCB3aXRoIHNwYWNlcyAiCistLS0+YWJjZGUKKyAgICBeIF4gICAgICAgYworIDA6IGFiY2RlCisgICAgMTJhYmNkZQorQ2FsbG91dCAoNik6ICIgYW55IHRleHQgd2l0aCBzcGFjZXMgIgorLS0tPjEyYWJjZGUKKyAgICAgIF4gXiAgICAgICBjCisgMDogYWJjZGUKKworL15hKGIpYyg/QzEpZGVmLworICAgICAgYWJjZGVmCistLS0+YWJjZGVmCisgIDEgXiAgXiAgICAgICBkCisgMDogYWJjZGVmCisgMTogYgorCisvXmEoYiljKD9DIkFCIilkZWYvCisgICAgICBhYmNkZWYKK0NhbGxvdXQgKDEwKTogIkFCIgorLS0tPmFiY2RlZgorICAgIF4gIF4gICAgICAgZAorIDA6IGFiY2RlZgorIDE6IGIKKworL15hKGIpYyg/QzEpZGVmLworICAgICAgYWJjZGVmXD1jYWxsb3V0X2NhcHR1cmUKK0NhbGxvdXQgMTogbGFzdCBjYXB0dXJlID0gMQorIDA6IDx1bnNldD4KKyAxOiBiCistLS0+YWJjZGVmCisgICAgXiAgXiAgICAgICBkCisgMDogYWJjZGVmCisgMTogYgorCisvXmEoYiljKD9De0FCfSlkZWYvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIGEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGIKKyAgICAgICAgS2V0CisgICAgICAgIGMKKyAgICAgICAgQ2FsbG91dFN0ciB7QUJ9IDEwIDE0IDEKKyAgICAgICAgZGVmCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgYWJjZGVmXD1jYWxsb3V0X2NhcHR1cmUKK0NhbGxvdXQgKDEwKToge0FCfSBsYXN0IGNhcHR1cmUgPSAxCisgMDogPHVuc2V0PgorIDE6IGIKKy0tLT5hYmNkZWYKKyAgICBeICBeICAgICAgIGQKKyAwOiBhYmNkZWYKKyAxOiBiCisKKy8oP0NgYWBgYmApKD9DJ2EnJ2InKSg/QyJhIiJiIikoP0NeYV5eYl4pKD9DJWElJWIlKSg/QyNhIyNiIykoP0MkYSQkYiQpKD9De2F9fWJ9KS9CLGNhbGxvdXRfaW5mbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDYWxsb3V0U3RyIGBhYGJgIDQgMTAgMAorICAgICAgICBDYWxsb3V0U3RyICdhJ2InIDE0IDIwIDAKKyAgICAgICAgQ2FsbG91dFN0ciAiYSJiIiAyNCAzMCAwCisgICAgICAgIENhbGxvdXRTdHIgXmFeYl4gMzQgNDAgMAorICAgICAgICBDYWxsb3V0U3RyICVhJWIlIDQ0IDUwIDAKKyAgICAgICAgQ2FsbG91dFN0ciAjYSNiIyA1NCA2MCAwCisgICAgICAgIENhbGxvdXRTdHIgJGEkYiQgNjQgNzAgMAorICAgICAgICBDYWxsb3V0U3RyIHthfWJ9IDc0IDgwIDAKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYWxsb3V0IGBhYGJgICAoCitDYWxsb3V0ICdhJ2InICAoCitDYWxsb3V0ICJhImIiICAoCitDYWxsb3V0IF5hXmJeICAoCitDYWxsb3V0ICVhJWIlICAoCitDYWxsb3V0ICNhI2IjICAoCitDYWxsb3V0ICRhJGIkICAoCitDYWxsb3V0IHthfWJ9ICAKKworLyg/OmEoP0NgY29kZWApKXszfS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEJyYQorICAgICAgICBhCisgICAgICAgIENhbGxvdXRTdHIgYGNvZGVgIDggMTQgMAorICAgICAgICBLZXQKKyAgICAgICAgQnJhCisgICAgICAgIGEKKyAgICAgICAgQ2FsbG91dFN0ciBgY29kZWAgOCAxNCAwCisgICAgICAgIEtldAorICAgICAgICBCcmEKKyAgICAgICAgYQorICAgICAgICBDYWxsb3V0U3RyIGBjb2RlYCA4IDE0IDAKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXig/KD9DMjUpKD89YWJjKWFiY2R8eHl6KS9CLGNhbGxvdXRfaW5mbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBeCisgICAgICAgIENvbmQKKyAgICAgICAgQ2FsbG91dCAyNSA5IDcKKyAgICAgICAgQXNzZXJ0CisgICAgICAgIGFiYworICAgICAgICBLZXQKKyAgICAgICAgYWJjZAorICAgICAgICBBbHQKKyAgICAgICAgeHl6CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhbGxvdXQgMjUgICg/PWFiYykKKyAgICBhYmNkZWZnCistLS0+YWJjZGVmZworIDI1IF4gICAgICAgICAgICg/PWFiYykKKyAwOiBhYmNkCisgICAgeHl6MTIzIAorLS0tPnh5ejEyMworIDI1IF4gICAgICAgICAgKD89YWJjKQorIDA6IHh5egorCisvXig/KD9DJGFiYyQpKD89YWJjKWFiY2R8eHl6KS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgQ29uZAorICAgICAgICBDYWxsb3V0U3RyICRhYmMkIDcgMTIgNworICAgICAgICBBc3NlcnQKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICBhYmNkCisgICAgICAgIEFsdAorICAgICAgICB4eXoKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGFiY2RlZmcKK0NhbGxvdXQgKDcpOiAkYWJjJAorLS0tPmFiY2RlZmcKKyAgICBeICAgICAgICAgICAoPz1hYmMpCisgMDogYWJjZAorICAgIHh5ejEyMyAKK0NhbGxvdXQgKDcpOiAkYWJjJAorLS0tPnh5ejEyMworICAgIF4gICAgICAgICAgKD89YWJjKQorIDA6IHh5egorCisvXmFiKD9DJ2ZpcnN0JyljZCg/QyJzZWNvbmQiKWVmLworICAgIGFiY2RlZmcKK0NhbGxvdXQgKDcpOiAnZmlyc3QnCistLS0+YWJjZGVmZworICAgIF4gXiAgICAgICAgIGMKK0NhbGxvdXQgKDIwKTogInNlY29uZCIKKy0tLT5hYmNkZWZnCisgICAgXiAgIF4gICAgICAgZQorIDA6IGFiY2RlZgorCisvKD86YSg/Q2Bjb2RlYCkpezN9WC8KKyAgICBhYWFYWQorQ2FsbG91dCAoOCk6IGBjb2RlYAorLS0tPmFhYVhZCisgICAgXl4gICAgICAgICkKK0NhbGxvdXQgKDgpOiBgY29kZWAKKy0tLT5hYWFYWQorICAgIF4gXiAgICAgICApCitDYWxsb3V0ICg4KTogYGNvZGVgCistLS0+YWFhWFkKKyAgICBeICBeICAgICAgKQorIDA6IGFhYVgKKworIyBCaW5hcnkgemVybyBpbiBjYWxsb3V0IHN0cmluZworIyAgYSAgKCAgPyAgQyAgJyAgeCAgICAgeiAgJyAgKSAgYgorLyA2MSAyOCAzZiA0MyAyNyA3OCAwMCA3YSAyNyAyOSA2Mi9oZXgsY2FsbG91dF9pbmZvCitDYWxsb3V0ICd4XHgwMHonICBiCisgICAgYWJjZGVmZ2gKK0NhbGxvdXQgKDUpOiAneFx4MDB6JworLS0tPmFiY2RlZmdoCisgICAgXl4gICAgICAgICAgIGIKKyAwOiBhYgorCisvKD8oPyEpXikvCisKKy8oPyg/ISlhfGIpLworICAgIGJiYgorIDA6IGIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYWEgCitObyBtYXRjaAorCisjIEpJVCBnaXZlcyBhIGRpZmZlcmVudCBlcnJvciBtZXNzYWdlIGZvciB0aGUgaW5maW5pdGUgcmVjdXJzaW9uCisKKyIoKk5PX0pJVCkoKD8yKSspKCg/MSkpeyIKKyAgICBhYmNkeworRmFpbGVkOiBlcnJvciAtNTI6IG5lc3RlZCByZWN1cnNpb24gYXQgdGhlIHNhbWUgc3ViamVjdCBwb3NpdGlvbgorCisjIFBlcmwgZmFpbHMgdG8gZGlhZ25vc2UgdGhlIGFic2VuY2Ugb2YgYW4gYXNzZXJ0aW9uCisKKyIoPyg/PEU+LiohLiopPykiCitGYWlsZWQ6IGVycm9yIDEyOCBhdCBvZmZzZXQgMzogYXNzZXJ0aW9uIGV4cGVjdGVkIGFmdGVyICg/KCBvciAoPyg/QykKKworIlgoKD8yKSgpKispezJ9KyJCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFgKKyAgICAgICAgT25jZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBCcmFwb3N6ZXJvCisgICAgICAgIFNDQnJhUG9zIDIKKyAgICAgICAgS2V0UnBvcworICAgICAgICBLZXQKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIFJlY3Vyc2UKKyAgICAgICAgQnJhcG9zemVybworICAgICAgICBTQ0JyYVBvcyAyCisgICAgICAgIEtldFJwb3MKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIlgoKD8yKSgpKispezJ9IkIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgWAorICAgICAgICBDQnJhIDEKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBCcmFwb3N6ZXJvCisgICAgICAgIFNDQnJhUG9zIDIKKyAgICAgICAgS2V0UnBvcworICAgICAgICBLZXQKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIFJlY3Vyc2UKKyAgICAgICAgQnJhcG9zemVybworICAgICAgICBTQ0JyYVBvcyAyCisgICAgICAgIEtldFJwb3MKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD88PVxiQUJRKDMoPy03KSkpLworRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDE1OiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworLyg/PD1cYkFCUSgzKD8rNykpKS8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCAxNTogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKyI7KD88PSgpKCg/MykpKCg/MikpKSIKK0ZhaWxlZDogZXJyb3IgMTI1IGF0IG9mZnNldCAyMDogbG9va2JlaGluZCBhc3NlcnRpb24gaXMgbm90IGZpeGVkIGxlbmd0aAorCisjIFBlcmwgbG9vcHMgb24gdGhpcyAoUENSRTIgdXNlZCB0byEpCisKKy8oPzw9XEthKS9nLGFmdGVydGV4dAorICAgIGFhYWFhCisgMDogYQorIDArIGFhYWEKKyAwOiBhCisgMCsgYWFhCisgMDogYQorIDArIGFhCisgMDogYQorIDArIGEKKyAwOiBhCisgMCsgCisKKy8oPzw9XEthKS9hbHRnbG9iYWwsYWZ0ZXJ0ZXh0CisgICAgYWFhYWEKKyAwOiBhCisgMCsgYWFhYQorIDA6IGEKKyAwKyBhYWEKKyAwOiBhCisgMCsgYWEKKyAwOiBhCisgMCsgYQorIDA6IGEKKyAwKyAKKworLygoPzIpezczfSg/MikpKCg/MSkpL2luZm8KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy9hYmMvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcWzl4IXh4eChdezk5OTl9CitObyBtYXRjaAorICAgIAorLyhhYmMpKi8KKyAgICBcW2FiY117NX0gCisgMDogYWJjYWJjYWJjYWJjYWJjCisgMTogYWJjCisKKy9eL2dtCisgICAgXG5cblxuCisgMDogCisgMDogCisgMDogCisKKy9eL2dtLGFsdF9jaXJjdW1mbGV4CisgICAgXG5cblxuCisgMDogCisgMDogCisgMDogCisgMDogCisKKy8oKCgoKCgoKHgpKSkpKSkpKVw4MS8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCAxOTogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisgICAgeHgxCisKKy8oKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKHgpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKVw4MC8KKyAgICB4eAorTWF0Y2hlZCwgYnV0IHRvbyBtYW55IHN1YnN0cmluZ3MKKyAwOiB4eAorIDE6IHgKKyAyOiB4CisgMzogeAorIDQ6IHgKKyA1OiB4CisgNjogeAorIDc6IHgKKyA4OiB4CisgOTogeAorMTA6IHgKKzExOiB4CisxMjogeAorMTM6IHgKKzE0OiB4CisKKy9cODAvCitGYWlsZWQ6IGVycm9yIDExNSBhdCBvZmZzZXQgMjogcmVmZXJlbmNlIHRvIG5vbi1leGlzdGVudCBzdWJwYXR0ZXJuCisKKy9BXDhCXDlDLworRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDI6IHJlZmVyZW5jZSB0byBub24tZXhpc3RlbnQgc3VicGF0dGVybgorICAgIEE4QjlDCisgICAgCisvKD94OigoPydhJykpICMgY29tbWVudCAod2l0aCBwYXJlbnRoZXNlcykgYW5kIHwgdmVydGljYWwKKyg/LXg6I25vdCBhIGNvbW1lbnQgKD8nYicpKSAjIHRoaXMgaXMgYSBjb21tZW50ICgpCisoPydjJykpICMgbm90IGEgY29tbWVudCAoPydkJykvaW5mbworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSA1CitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIGEgICAyCisgIGIgICAzCisgIGMgICA0CisgIGQgICA1CitGaXJzdCBjb2RlIHVuaXQgPSAnIycKK0xhc3QgY29kZSB1bml0ID0gJyAnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMyCisKKy8oP3woPydhJykoMikoPydiJyl8KD8nYScpKD8nYScpKDMpKS9JLGR1cG5hbWVzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDMKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgYSAgIDEKKyAgYSAgIDIKKyAgYiAgIDMKK09wdGlvbnM6IGR1cG5hbWVzCitTdGFydGluZyBjb2RlIHVuaXRzOiAyIDMgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKyAgICBBMjNCCisgMDogMgorIDE6IAorIDI6IDIKKyAzOiAKKyAgICBCMzJBIAorIDA6IDMKKyAxOiAKKyAyOiAKKyAzOiAzCisKKyMgVGhlc2UgYXJlIHNvbWUgcGF0dGVybnMgdGhhdCB1c2VkIHRvIGNhdXNlIGJ1ZmZlciBvdmVyZmxvd3Mgb3Igb3RoZXIgZXJyb3JzCisjIHdoaWxlIGNvbXBpbGluZy4gCisKKy8uKCg/MikoP1IpfFwxfCQpKCkvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBBbnkKKyAgICAgICAgT25jZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBSZWN1cnNlCisgICAgICAgIEFsdAorICAgICAgICBcMQorICAgICAgICBBbHQKKyAgICAgICAgJAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIENCcmEgMgorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8uKCg/MykoP1IpKCkoPzIpfFwxfCQpKCkvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBBbnkKKyAgICAgICAgT25jZQorICAgICAgICBDQnJhIDEKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBSZWN1cnNlCisgICAgICAgIENCcmEgMgorICAgICAgICBLZXQKKyAgICAgICAgUmVjdXJzZQorICAgICAgICBBbHQKKyAgICAgICAgXDEKKyAgICAgICAgQWx0CisgICAgICAgICQKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBDQnJhIDMKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKFw5KisoPzIpO1wzKysoKTJ8KSsrey8KK0ZhaWxlZDogZXJyb3IgMTE1IGF0IG9mZnNldCAyOiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworL1xWXHg4NVw5KisoKD8yKVwzKysoKTIpKjoyLworRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDc6IHJlZmVyZW5jZSB0byBub24tZXhpc3RlbnQgc3VicGF0dGVybgorCisvKCgoPyhSKSl7MCwyfSkgKD8neCcoKD8nUicpKCg/J1InKSkpKSkvZHVwbmFtZXMKKworLygoKD8oWCkpezAsMn0pICg/J3gnKCg/J1gnKSgoPydYJykpKSkpL2R1cG5hbWVzCisKKy8oKCg/KFIpKXswLDJ9KSAoPyd4JygoPydYJykoKD8nUicpKSkpKS8KKworIig/SikoPydkJyg/J2QnXGd7ZH0pKSIKKworIig/PSEoKD8yKSg/KSkoezgoPzw9KD8xKXsyOX04YmJiYlx4MTZceGRceGM2XigkKFx4YTlINCl7NH1ofT8xKUIpKVx4MTUnKSIKK0ZhaWxlZDogZXJyb3IgMTI1IGF0IG9mZnNldCA3MjogbG9va2JlaGluZCBhc3NlcnRpb24gaXMgbm90IGZpeGVkIGxlbmd0aAorCisvQSg/JycpWi8KK0ZhaWxlZDogZXJyb3IgMTYyIGF0IG9mZnNldCA0OiBzdWJwYXR0ZXJuIG5hbWUgZXhwZWN0ZWQKKworIig/SjooP3woPydSJykoXGsnUicpfCgoPydSJykpKSkiCisKKy8oPzw9fChcLFwkKD83MzU5MTYyMDQ0OTAwNTgyODgxNilceGE4Lns3fSl7Nn1ceDA5KS8KK0ZhaWxlZDogZXJyb3IgMTYxIGF0IG9mZnNldCAzMjogbnVtYmVyIGlzIHRvbyBiaWcKKworL14oPzooPygxKXh8KSspKyQoKS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgU0JyYQorICAgICAgICBTQ29uZAorICAgICAgMSBDb25kIHJlZgorICAgICAgICB4CisgICAgICAgIEFsdAorICAgICAgICBLZXRSbWF4CisgICAgICAgIEtldFJtYXgKKyAgICAgICAgJAorICAgICAgICBDQnJhIDEKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6PjpdXSg/PCkvCitGYWlsZWQ6IGVycm9yIDEyNCBhdCBvZmZzZXQgMTA6IGxldHRlciBvciB1bmRlcnNjb3JlIGV4cGVjdGVkIGFmdGVyICg/PCBvciAoPycKKworLygoP3gpKCo6MCkpIyg/Jy8KK0ZhaWxlZDogZXJyb3IgMTI0IGF0IG9mZnNldCAxNTogbGV0dGVyIG9yIHVuZGVyc2NvcmUgZXhwZWN0ZWQgYWZ0ZXIgKD88IG9yICg/JworCisvKD9DJFskKSg/PF0vCitGYWlsZWQ6IGVycm9yIDEyNCBhdCBvZmZzZXQgMTA6IGxldHRlciBvciB1bmRlcnNjb3JlIGV4cGVjdGVkIGFmdGVyICg/PCBvciAoPycKKworLyg/QyQpJCkoPzxdLworRmFpbGVkOiBlcnJvciAxMjQgYXQgb2Zmc2V0IDEwOiBsZXR0ZXIgb3IgdW5kZXJzY29yZSBleHBlY3RlZCBhZnRlciAoPzwgb3IgKD8nCisKKy8oPyhSKSkqKy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEJyYXBvc3plcm8KKyAgICAgICAgU0JyYVBvcworICAgICAgICBTQ29uZAorICAgICAgICBDb25kIHJlY3Vyc2UgYW55CisgICAgICAgIEtldAorICAgICAgICBLZXRScG9zCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGFiY2QKKyAwOiAKKworLygoP3gpKD8jKSkjKD8nLworRmFpbGVkOiBlcnJvciAxMjQgYXQgb2Zmc2V0IDE0OiBsZXR0ZXIgb3IgdW5kZXJzY29yZSBleHBlY3RlZCBhZnRlciAoPzwgb3IgKD8nCisKKy8oKD94KSg/IykpIyg/J2FiYycpL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMgorTmFtZWQgY2FwdHVyaW5nIHN1YnBhdHRlcm5zOgorICBhYmMgICAyCitGaXJzdCBjb2RlIHVuaXQgPSAnIycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvW1s6XFxdKD88Wzo6XS8KK0ZhaWxlZDogZXJyb3IgMTI0IGF0IG9mZnNldCA5OiBsZXR0ZXIgb3IgdW5kZXJzY29yZSBleHBlY3RlZCBhZnRlciAoPzwgb3IgKD8nCisKKy9bWzpcXF0oPydhYmMnKVthOl0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIGFiYyAgIDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDogWyBcIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisKKyJbW1suXHhlOE5xXHhmZnFceGZmXHhlMFx4Mnx8fDo6TnFceGZmcVx4ZmZceGUwXHg2XHgyfHx8OjpbW1s6Wzo6Ojo6OltbW1tbOjo6Ojo6OjpbOltbWzpbOjo6W1tbW1tbW1tbW1tbOjo6Ojo6Ojo6Ojo6Ojo6OjpbWy5ceGU4TnFceGZmcVx4ZmZceGUwXHgyfHx8OjpOcVx4ZmZxXHhmZlx4ZTBceDZceDJ8fHw6OltbWzpbOjo6Ojo6W1tbW1s6Ojo6Ojo6Ols6W1tbOls6OjpbW1tbW1tbW1tbW1tbWzo6OkVbW1s6WzpbWzpbOjo6W1s6OjpFW1tbOls6W1s6J1s6Ojo6OkVbW1s6Wzo6Ojo6OltbWzpbW1tbW1tbOjpFW1tbOls6Ojo6OjpbW1s6W1tbW1tbW1s6W1s6Ols6Ojo6W1s6Ojo6Ojo6W1s6W1tbW1tbWzpbWzo6WzpbWzpbfiIKK0ZhaWxlZDogZXJyb3IgMTA2IGF0IG9mZnNldCAzNTM6IG1pc3NpbmcgdGVybWluYXRpbmcgXSBmb3IgY2hhcmFjdGVyIGNsYXNzCisKKy8oKSg/KFIpMCkqKy9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBLZXQKKyAgICAgICAgQnJhcG9zemVybworICAgICAgICBTQnJhUG9zCisgICAgICAgIFNDb25kCisgICAgICAgIENvbmQgcmVjdXJzZSBhbnkKKyAgICAgICAgMAorICAgICAgICBLZXQKKyAgICAgICAgS2V0UnBvcworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/Ui06KD88LworRmFpbGVkOiBlcnJvciAxMjkgYXQgb2Zmc2V0IDM6ICg/UiBvciAoP1srLV1kaWdpdHMgbXVzdCBiZSBmb2xsb3dlZCBieSApCisKKy8oPyg/Q3tcUX0pKD8hKD8nLworRmFpbGVkOiBlcnJvciAxMjQgYXQgb2Zmc2V0IDE2OiBsZXR0ZXIgb3IgdW5kZXJzY29yZSBleHBlY3RlZCBhZnRlciAoPzwgb3IgKD8nCisKKy8oPyg/Q3tcUX0pKD8hKD8nYWJjJykpKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgYWJjICAgMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy8oPzEpezM5MTh9KCgoKCgwKFxrJ1InKSkpKSg/SikoPydSJyg/J1InXDMpezk5fSkpKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDgKK01heCBiYWNrIHJlZmVyZW5jZSA9IDgKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgUiAgIDcKKyAgUiAgIDgKK0R1cGxpY2F0ZSBuYW1lIHN0YXR1cyBjaGFuZ2VzCitMYXN0IGNvZGUgdW5pdCA9ICcwJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA2NTUzNQorCisvKD98KGFhYSl8KGIpKVxnezF9L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorU3RhcnRpbmcgY29kZSB1bml0czogYSBiIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy8oP3woYWFhKXwoYikpKD8xKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvKD98KGFhYSl8KGIpKS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgYiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvKD98KD8nYSdhYWEpfCg/J2EnYikpXGsnYScvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIGEgICAxCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworLyg/fCg/J2EnYWFhKXwoPydhJ2IpKSg/J2EnY2NjYylcaydhJy9JLGR1cG5hbWVzCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK01heCBiYWNrIHJlZmVyZW5jZSA9IDIKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgYSAgIDEKKyAgYSAgIDIKK09wdGlvbnM6IGR1cG5hbWVzCitTdGFydGluZyBjb2RlIHVuaXRzOiBhIGIgCitMYXN0IGNvZGUgdW5pdCA9ICdjJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy9hYnszY2QvCisgICAgYWJ7M2NkCisgMDogYWJ7M2NkCisKKy9hYnszLGNkLworICAgIGFiezMsY2QKKyAwOiBhYnszLGNkCisKKy9hYnszLDRhfWNkLworICAgIGFiezMsNGF9Y2QKKyAwOiBhYnszLDRhfWNkCisKKy97NCw1YX1iYy8KKyAgICB7NCw1YX1iYworIDA6IHs0LDVhfWJjCisKKy9ceDB7YWJ9LworICAgIFwwe2FifSAKKyAwOiBceDAwe2FifQorCisvXihhKGIpKVwxXGcxXGd7MX1cZy0xXGd7LTF9XGd7LTAyfVovCisgICAgYWJhYmFiYWJiYmFiWlhYWFgKKyAwOiBhYmFiYWJhYmJiYWJaCisgMTogYWIKKyAyOiBiCisKKy8uKj9hKCpQUlVORSliLworICAgIGFhYgorIDA6IGFiCisKKy8uKj9hKCpQUlVORSliL3MKKyAgICBhYWIKKyAwOiBhYgorCisvXmEoKlBSVU5FKWIvcworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFiCitObyBtYXRjaAorCisvLio/YSgqU0tJUCliLworICAgIGFhYgorIDA6IGFiCisKKy8oPyg4MDAwMDAwMDAwLworRmFpbGVkOiBlcnJvciAxNjEgYXQgb2Zmc2V0IDEzOiBudW1iZXIgaXMgdG9vIGJpZworCisvKCg/KFI4MDAwMDAwMDAwKSkpLworRmFpbGVkOiBlcnJvciAxNjEgYXQgb2Zmc2V0IDE2OiBudW1iZXIgaXMgdG9vIGJpZworCisvMCg/MCl8KDEpKCpUSEVOKSgqU0tJUDowKSgqRkFJTCkvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAwMQorTm8gbWF0Y2gKKworLyg/KDEpKClcOTgzMDQwXDIpLworRmFpbGVkOiBlcnJvciAxMTUgYXQgb2Zmc2V0IDEzOiByZWZlcmVuY2UgdG8gbm9uLWV4aXN0ZW50IHN1YnBhdHRlcm4KKworLygqTElNSVRfTUFUQ0g9KWFiYy8KK0ZhaWxlZDogZXJyb3IgMTYwIGF0IG9mZnNldCAxNDogKCpWRVJCKSBub3QgcmVjb2duaXplZCBvciBtYWxmb3JtZWQKKworLygqQ1JMRikoKkxJTUlUX01BVENIPSlhYmMvCitGYWlsZWQ6IGVycm9yIDE2MCBhdCBvZmZzZXQgMjE6ICgqVkVSQikgbm90IHJlY29nbml6ZWQgb3IgbWFsZm9ybWVkCisKKy8oPzphYik/KD86YWIpKD86YWIpLworICAgIGFiYWIKKyAwOiBhYmFiCisgICAgYWJhYmFiCisgMDogYWJhYmFiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmEKK05vIG1hdGNoCisKKy8oKCpNQVJLOkEpKSsrYSgqU0tJUDpCKWIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWNiCitObyBtYXRjaAorCisvKCpNQVJLOmFcemIpei9hbHRfdmVyYm5hbWVzIAorRmFpbGVkOiBlcnJvciAxNDAgYXQgb2Zmc2V0IDk6IGludmFsaWQgZXNjYXBlIHNlcXVlbmNlIGluICgqVkVSQikgbmFtZQorICAgIAorLygqOmFiXHQoZFwpYyl4eHgvCitGYWlsZWQ6IGVycm9yIDEyMiBhdCBvZmZzZXQgMTI6IHVubWF0Y2hlZCBjbG9zaW5nIHBhcmVudGhlc2lzCisKKy8oKjphYlx0KGRcKWMpeHh4L2FsdF92ZXJibmFtZXMsbWFyaworICAgIGN4eHh6CisgMDogeHh4CitNSzogYWJceDA5KGQpYworCisvKCo6QVxReHgpeFxFQil4L2FsdF92ZXJibmFtZXMsbWFyaworICAgIHgKKyAwOiB4CitNSzogQXh4KXhCCisgICAgCisvKCo6QVxFeHh4Qil4L2FsdF92ZXJibmFtZXMsbWFyaworICAgIHggCisgMDogeAorTUs6IEF4eHhCCisgICAgCisvKCo6IEEgXCBhbmQgI2NvbW1lbnQKKyAgICAgXCBCKXgveCxhbHRfdmVyYm5hbWVzLG1hcmsKKyAgICB4ICAKKyAwOiB4CitNSzogQSBhbmQgQgorICAgIAorLygqOkEKK0IpeC9hbHRfdmVyYm5hbWVzLG1hcmsgCisgICAgeAorIDA6IHgKK01LOiBBXHgwYUIKKworLygqOmFiY1xRcHFyKS9hbHRfdmVyYm5hbWVzCitGYWlsZWQ6IGVycm9yIDE2MCBhdCBvZmZzZXQgMTI6ICgqVkVSQikgbm90IHJlY29nbml6ZWQgb3IgbWFsZm9ybWVkCisKKy9hYmMvdXNlX29mZnNldF9saW1pdAorICAgIDEyMzRhYmNkZVw9b2Zmc2V0X2xpbWl0PTEwMAorIDA6IGFiYworICAgIDEyMzRhYmNkZVw9b2Zmc2V0X2xpbWl0PTkKKyAwOiBhYmMKKyAgICAxMjM0YWJjZGVcPW9mZnNldF9saW1pdD00CisgMDogYWJjCisgICAgMTIzNGFiY2RlXD1vZmZzZXRfbGltaXQ9NCxvZmZzZXQ9NAorIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNGFiY2RlXD1vZmZzZXRfbGltaXQ9NCxvZmZzZXQ9NQorTm8gbWF0Y2gKKyAgICAxMjM0YWJjZGVcPW9mZnNldF9saW1pdD0zCitObyBtYXRjaAorCisvKD88PWFiYykvdXNlX29mZnNldF9saW1pdAorICAgIDEyMzRhYmNcPW9mZnNldF9saW1pdD03CisgMDogCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0YWJjXD1vZmZzZXRfbGltaXQ9NgorTm8gbWF0Y2gKKyAgICAKKy9BL2cscmVwbGFjZT0tLHVzZV9vZmZzZXRfbGltaXQKKyAgICBYQVhBWEFYQVhBXD1vZmZzZXRfbGltaXQ9NAorIDI6IFgtWC1YQVhBWEEKKworL2FiYy8KK1w9IEV4cGVjdCBlcnJvcgorICAgIDEyMzRhYmNkZVw9b2Zmc2V0X2xpbWl0PTQKK0ZhaWxlZDogZXJyb3IgLTU2OiBvZmZzZXQgbGltaXQgc2V0IHdpdGhvdXQgUENSRTJfVVNFX09GRlNFVF9MSU1JVAorCisvXlx3L20sdXNlX29mZnNldF9saW1pdAorICAgIFxuLi5cbmFhXD1vZmZzZXRfbGltaXQ9MworTm8gbWF0Y2gKKyAgICBcbi4uXG5hYVw9b2Zmc2V0X2xpbWl0PTQKKyAwOiBhCisKKy9hYmNkL251bGxfY29udGV4dAorICAgIGFiY2RcPW51bGxfY29udGV4dAorIDA6IGFiY2QKK1w9IEV4cGVjdCBlcnJvciAgICAgCisgICAgYWJjZFw9bnVsbF9jb250ZXh0LGZpbmRfbGltaXRzCisqKiBOb3QgYWxsb3dlZCB0b2dldGhlcjogZmluZF9saW1pdHMgbnVsbF9jb250ZXh0CisgICAgYWJjZFw9YWxsdXNlZHRleHQsc3RhcnRjaGFyIAorKiogTm90IGFsbG93ZWQgdG9nZXRoZXI6IGFsbHVzZWR0ZXh0IHN0YXJ0Y2hhcgorCisvYWJjZC9yZXBsYWNlPXdccnhceDgyeVxvezMzM316KFxRMTJcJDM0JCRceDM0XEU1JCQpLHN1YnN0aXR1dGVfZXh0ZW5kZWQKKyAgICBhYmNkCisgMTogd1x4MGR4XHg4MnlceGRieigxMlwkMzQkJFx4MzQ1JCkKKyAgICAKKy9hKGJjKShERSkvcmVwbGFjZT1hXHUkMVxVJDFcRSQxXGwkMlxMJDJcRWFiXFVhYlxMWVpcRURvbmUsc3Vic3RpdHV0ZV9leHRlbmRlZAorICAgIGFiY0RFCisgMTogYUJjQkNiY2RFZGVhYkFCeXpEb25lCisgCisvYWJjZC9yZXBsYWNlPXh5XGt6LHN1YnN0aXR1dGVfZXh0ZW5kZWQKKyAgICBhYmNkCitGYWlsZWQ6IGVycm9yIC01NyBhdCBvZmZzZXQgNCBpbiByZXBsYWNlbWVudDogYmFkIGVzY2FwZSBzZXF1ZW5jZSBpbiByZXBsYWNlbWVudCBzdHJpbmcKKworL2EoPzooYil8KGMpKS9zdWJzdGl0dXRlX2V4dGVuZGVkLHJlcGxhY2U9WCR7MTorMTotMX1YJHsyOisyOi0yfQorICAgIGFiCisgMTogWDFYLTIKKyAgICBhYworIDE6IFgtMVgyCisgICAgYWJcPXJlcGxhY2U9JHsxOiskMVw6JDE6JDJ9CisgMTogYjpiCisgICAgYWNcPXJlcGxhY2U9JHsxOiskMVw6JDE6JDJ9CisgMTogYworCisvYSg/OihiKXwoYykpL3N1YnN0aXR1dGVfZXh0ZW5kZWQscmVwbGFjZT1YJHsxOi0xOi0xfVgkezI6LTI6LTJ9CisgICAgYWIKKyAxOiBYYlgyOi0yCisgICAgYWMKKyAxOiBYMTotMVhjCisKKy8oYSkvc3Vic3RpdHV0ZV9leHRlbmRlZCxyZXBsYWNlPT4kezE6K1xRJDE6e30kJFxFK1xVJDF9PAorICAgIGEKKyAxOiA+JDE6e30kJCtBPAorCisvWChiKVkvc3Vic3RpdHV0ZV9leHRlbmRlZAorICAgIFhiWVw9cmVwbGFjZT14JHsxOiskMVxVJDF9eQorIDE6IHhiQlkKKyAgICBYYllcPXJlcGxhY2U9XFV4JHsxOiskMSQxfXkKKyAxOiBYQkJZCisKKy9hL3N1YnN0aXR1dGVfZXh0ZW5kZWQscmVwbGFjZT0keypNQVJLOithOmJ9CisgICAgYQorRmFpbGVkOiBlcnJvciAtNTggYXQgb2Zmc2V0IDcgaW4gcmVwbGFjZW1lbnQ6IGV4cGVjdGVkIGNsb3NpbmcgY3VybHkgYnJhY2tldCBpbiByZXBsYWNlbWVudCBzdHJpbmcKKworLyhhYmNkKS9yZXBsYWNlPSR7MToreHlca3p9LHN1YnN0aXR1dGVfZXh0ZW5kZWQKKyAgICBhYmNkCitGYWlsZWQ6IGVycm9yIC01NyBhdCBvZmZzZXQgOCBpbiByZXBsYWNlbWVudDogYmFkIGVzY2FwZSBzZXF1ZW5jZSBpbiByZXBsYWNlbWVudCBzdHJpbmcKKworLyhhYmNkKS8KKyAgICBhYmNkXD1yZXBsYWNlPSR7MToreHlca3p9LHN1YnN0aXR1dGVfZXh0ZW5kZWQKK0ZhaWxlZDogZXJyb3IgLTU3IGF0IG9mZnNldCA4IGluIHJlcGxhY2VtZW50OiBiYWQgZXNjYXBlIHNlcXVlbmNlIGluIHJlcGxhY2VtZW50IHN0cmluZworCisvYWJjZC9zdWJzdGl0dXRlX2V4dGVuZGVkLHJlcGxhY2U9PiQxPAorICAgIGFiY2QKK0ZhaWxlZDogZXJyb3IgLTQ5IGF0IG9mZnNldCAzIGluIHJlcGxhY2VtZW50OiB1bmtub3duIHN1YnN0cmluZworCisvYWJjZC9zdWJzdGl0dXRlX2V4dGVuZGVkLHJlcGxhY2U9Pnh4eCR7eHl6fTw8PAorICAgIGFiY2QKK0ZhaWxlZDogZXJyb3IgLTQ5IGF0IG9mZnNldCAxMCBpbiByZXBsYWNlbWVudDogdW5rbm93biBzdWJzdHJpbmcKKworLyg/SikoPzooPzxBPmEpfCg/PEE+YikpL3JlcGxhY2U9PCRBPgorICAgIFthXQorIDE6IFs8YT5dCisgICAgW2JdIAorIDE6IFs8Yj5dCitcPSBFeHBlY3QgZXJyb3IgICAgIAorICAgIChhKVw9b3ZlY3Rvcj0xCitGYWlsZWQ6IGVycm9yIC01NCBhdCBvZmZzZXQgMyBpbiByZXBsYWNlbWVudDogcmVxdWVzdGVkIHZhbHVlIGlzIG5vdCBhdmFpbGFibGUKKworLyhhKXwoYikvcmVwbGFjZT08JDE+CitcPSBFeHBlY3QgZXJyb3IKKyAgICBiCitGYWlsZWQ6IGVycm9yIC01NSBhdCBvZmZzZXQgMyBpbiByZXBsYWNlbWVudDogcmVxdWVzdGVkIHZhbHVlIGlzIG5vdCBzZXQKKworLyhhYSkoQkIpL3N1YnN0aXR1dGVfZXh0ZW5kZWQscmVwbGFjZT1cVSQxXEwkMlxFJDEuLlxVJDFcbCQyJDEKKyAgICBhYUJCCisgMTogQUFiYmFhLi5BQWJCYWEKKworL14obyhcMXs3Mn17XCJ7XFx7MDAwMDAwNTkwNzl9XGQqKXs3NH19KXsxOX0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitDb21waWxlIG9wdGlvbnM6IDxub25lPgorT3ZlcmFsbCBvcHRpb25zOiBhbmNob3JlZAorTGFzdCBjb2RlIHVuaXQgPSAnfScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNjU1MzUKKworLygocCg/J0svCitGYWlsZWQ6IGVycm9yIDE0MiBhdCBvZmZzZXQgNzogc3ludGF4IGVycm9yIGluIHN1YnBhdHRlcm4gbmFtZSAobWlzc2luZyB0ZXJtaW5hdG9yKQorCisvKChwKD8nSy9ub19hdXRvX2NhcHR1cmUKK0ZhaWxlZDogZXJyb3IgMTQyIGF0IG9mZnNldCA3OiBzeW50YXggZXJyb3IgaW4gc3VicGF0dGVybiBuYW1lIChtaXNzaW5nIHRlcm1pbmF0b3IpCisKKy9hYmMvcmVwbGFjZT1BJDMxMjM0NTY3ODlaCisgICAgYWJjCitGYWlsZWQ6IGVycm9yIC00OSBhdCBvZmZzZXQgMyBpbiByZXBsYWNlbWVudDogdW5rbm93biBzdWJzdHJpbmcKKworLyg/PCFhezY1NTM1fWF7NX0peC9JCitGYWlsZWQ6IGVycm9yIDE4NyBhdCBvZmZzZXQgMTY6IGxvb2tiZWhpbmQgYXNzZXJ0aW9uIGlzIHRvbyBsb25nCisKKy8oPzwhYXs2NTUzNX0peC9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heCBsb29rYmVoaW5kID0gNjU1MzUKK0ZpcnN0IGNvZGUgdW5pdCA9ICd4JworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy8oPz1hXEspL3JlcGxhY2U9egorICAgIEJhQ2FECitGYWlsZWQ6IGVycm9yIC02MDogbWF0Y2ggd2l0aCBlbmQgYmVmb3JlIHN0YXJ0IGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAKKy8oPydhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkcndG9vbG9uZykvCitGYWlsZWQ6IGVycm9yIDE0OCBhdCBvZmZzZXQgMzY6IHN1YnBhdHRlcm4gbmFtZSBpcyB0b28gbG9uZyAobWF4aW11bSAzMiBjaGFyYWN0ZXJzKQorIAorLyg/J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGJ2p1c3RyaWdodCkvIAorCisjIFRoZXNlIHR3byB1c2UgemVyby10ZXJtaW5hdGlvbgorL2FiY2QvbWF4X3BhdHRlcm5fbGVuZ3RoPTMKK0ZhaWxlZDogZXJyb3IgMTg4IGF0IG9mZnNldCAwOiBwYXR0ZXJuIHN0cmluZyBpcyBsb25nZXIgdGhhbiB0aGUgbGltaXQgc2V0IGJ5IHRoZSBhcHBsaWNhdGlvbgorCisvYWJjL21heF9wYXR0ZXJuX2xlbmd0aD0zCisKKyMgVGhlc2UgdHdvLCBiZWluZyBoZXgsIHBhc3MgdGhlIGxlbmd0aAorL2FiY2RlZmFiL2hleCxtYXhfcGF0dGVybl9sZW5ndGg9MworRmFpbGVkOiBlcnJvciAxODggYXQgb2Zmc2V0IDA6IHBhdHRlcm4gc3RyaW5nIGlzIGxvbmdlciB0aGFuIHRoZSBsaW1pdCBzZXQgYnkgdGhlIGFwcGxpY2F0aW9uCisKKy9hYmNkZWYvaGV4LG1heF9wYXR0ZXJuX2xlbmd0aD0zCisKKyMgVGhlc2UgdHdvIHBhdHRlcm5zIHVzZWQgdG8gdGFrZSBhIGxvbmcgdGltZSB0byBjb21waWxlCisKKyIoLiopCisoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkKKygoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKQorKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpInhJCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEyCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitPcHRpb25zOiBleHRlbmRlZAorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKyIoPzw9YSgpCisoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkKKygoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKQorKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpCithKSJ4SQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxMgorTWF4IGxvb2tiZWhpbmQgPSAyCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitPcHRpb25zOiBleHRlbmRlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKyMgV2hlbiAoP3wgaXMgdXNlZCBhbmQgZ3JvdXBzIG9mIHRoZSBzYW1lIG51bWJlciBtYXkgYmUgZGlmZmVyZW50LAorIyB3ZSBoYXZlIHRvIHJlbHkgb24gYSBjb3VudCB0byBjYXRjaCBvdmVybHkgY29tcGxpY2F0ZWQgcGF0dGVybnMuCisKKyIoP3woKXwoKSkoLiopCisoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkKKygoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKQorKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpInhJCitGYWlsZWQ6IGVycm9yIDE4NiBhdCBvZmZzZXQgMTQ4OiByZWd1bGFyIGV4cHJlc3Npb24gaXMgdG9vIGNvbXBsaWNhdGVkCisKKyIoP3woKXwoKSkoPzw9YSgpCisoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkoKD8tMikoPy0yKSkKKygoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKSgoPy0yKSg/LTIpKQorKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpKCg/LTIpKD8tMikpCithKSJ4SQorRmFpbGVkOiBlcnJvciAxODYgYXQgb2Zmc2V0IDE1NDogcmVndWxhciBleHByZXNzaW9uIGlzIHRvbyBjb21wbGljYXRlZAorCisjIFRlc3QgdGhlIHVzZSBvZiBtYWxsb2MgZm9yIGNhY2hpbmcgZ3JvdXAgaW5mb3JtYXRpb24gd2hlbiB0aGVyZSBhcmUgbW9yZQorIyBncm91cHMgdGhhbiBmaXQgaW50byB0aGUgb24tc3RhY2sgd29ya3NwYWNlLgorCisvXFsoKV17MTAyNH0vSSxleHBhbmQKK0V4cGFuZGVkOiAoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKSgpKCkoKQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxMDI0CitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworIyBUZXN0IG1pbmxlbmd0aCBjYXBwZWQgYXQgNjU1MzUKKworLyhBezY1MDAwfSlcMXs2NTAwMH0vSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitGaXJzdCBjb2RlIHVuaXQgPSAnQScKK0xhc3QgY29kZSB1bml0ID0gJ0EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDY1NTM1CisKKyMgVGVzdCBncm91cCBzY2FucyB3aGVuIG51bWJlcnMgYXJlIG5vdCB1bmlxdWUKKworLyg/fCgpK3woYSkrKS9CSQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBCcmEKKyAgICAgICAgU0NCcmEgMQorICAgICAgICBLZXRSbWF4CisgICAgICAgIEFsdAorICAgICAgICBDQnJhIDEKKyAgICAgICAgYQorICAgICAgICBLZXRSbWF4CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy8oP3woYSkrfCgpKykvQkkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQnJhCisgICAgICAgIENCcmEgMQorICAgICAgICBhCisgICAgICAgIEtldFJtYXgKKyAgICAgICAgQWx0CisgICAgICAgIFNDQnJhIDEKKyAgICAgICAgS2V0Um1heAorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvKD98KCl8KGEpKS9CSQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBCcmEKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIEtldAorICAgICAgICBBbHQKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIGEKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy8oP3woYSl8KCkpL0JJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEJyYQorICAgICAgICBDQnJhIDEKKyAgICAgICAgYQorICAgICAgICBLZXQKKyAgICAgICAgQWx0CisgICAgICAgIENCcmEgMQorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworIyBUZXN0IENSTEYgaGFuZGxpbmcgaW4gZW1wdHkgc3RyaW5nIHN1YnN0aXR1dGlvbnMKKworL14kL2dtLG5ld2xpbmU9YW55Y3JsZixyZXBsYWNlPS0KKyAgICBYXHJcblxyXG5ZCisgMTogWFx4MGRceDBhLVx4MGRceDBhWQorCisvXiQvZ20sbmV3bGluZT1jcmxmLHJlcGxhY2U9LQorICAgIFhcclxuXHJcblkKKyAxOiBYXHgwZFx4MGEtXHgwZFx4MGFZCisKKy9eJC9nbSxuZXdsaW5lPWFueSxyZXBsYWNlPS0KKyAgICBYXHJcblxyXG5ZCisgMTogWFx4MGRceDBhLVx4MGRceDBhWQorCisiKCpBTllDUkxGKSg/bSleKC4qW14wLTlcclxuXS4qfCkkImcscmVwbGFjZT1OYU4KKyAgICAxNVxyXG5mb29cclxuMjBcclxuYmFyXHJcbmJhelxyXG5cclxuMjAKKyA0OiAxNVx4MGRceDBhTmFOXHgwZFx4MGEyMFx4MGRceDBhTmFOXHgwZFx4MGFOYU5ceDBkXHgwYU5hTlx4MGRceDBhMjAKKworL2FbWzpwdW5jdDpdYl0vYmluY29kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhCisgICAgICAgIFshLS86LUBbLWBiey1+XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2FbYls6cHVuY3Q6XV0vYmluY29kZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhCisgICAgICAgIFshLS86LUBbLWBiey1+XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL0woPyMofCsrPCEoMik/L0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgTD8rCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvTCg/Iyh8Kys8ISgyKT8vQixub19hdXRvX3Bvc3Nlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgTD8KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9MKD8jKHwrKzwhKDIpPy9CLGF1dG9fY2FsbG91dAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBDYWxsb3V0IDI1NSAwIDE0CisgICAgICAgIEw/KworICAgICAgICBDYWxsb3V0IDI1NSAxNCAwCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvTCg/Iyh8Kys8ISgyKT8vQixub19hdXRvX3Bvc3Nlc3MsYXV0b19jYWxsb3V0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENhbGxvdXQgMjU1IDAgMTQKKyAgICAgICAgTD8KKyAgICAgICAgQ2FsbG91dCAyNTUgMTQgMAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyhBKilcRSsvQixhdXRvX2NhbGxvdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQ2FsbG91dCAyNTUgMCA3CisgICAgICAgIFNDQnJhIDEKKyAgICAgICAgQ2FsbG91dCAyNTUgMSAyCisgICAgICAgIEEqCisgICAgICAgIENhbGxvdXQgMjU1IDMgMAorICAgICAgICBLZXRSbWF4CisgICAgICAgIENhbGxvdXQgMjU1IDcgMAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLygpXFFcRSpdL0IsYXV0b19jYWxsb3V0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIENhbGxvdXQgMjU1IDAgNworICAgICAgICBCcmF6ZXJvCisgICAgICAgIFNDQnJhIDEKKyAgICAgICAgQ2FsbG91dCAyNTUgMSAwCisgICAgICAgIEtldFJtYXgKKyAgICAgICAgQ2FsbG91dCAyNTUgNyAxCisgICAgICAgIF0KKyAgICAgICAgQ2FsbG91dCAyNTUgOCAwCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGFbYmNdZAorLS0tPmFbYmNdZAorICswICAgICBeICAgICAgKClcUVxFKgorICsxICAgICBeICAgICAgKQorICs3ICAgICBeICAgICAgXQorICs4ICAgICBeXiAgICAgCisgMDogXQorIDE6IAorCisvXHg4YStmfDtUPygqOjsuJz9gKFx4ZWFwICl7IVteKCkheSonJ0MqKD8nO117MTsoXHgwOCkvQixhbHRfdmVyYm5hbWVzLGR1cG5hbWVzLGV4dGVuZGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFx4ezhhfSsrCisgICAgICAgIGYKKyAgICAgICAgQWx0CisgICAgICAgIDsKKyAgICAgICAgVD8KKyAgICAgICAgKk1BUksgOy4nP2AoXHh7ZWF9cAorICAgICAgICB7IQorICAgICAgICBbXHgwMC0gIi0mKy06PC0+QC1CRC14ei1ceGZmXSAobmVnKQorICAgICAgICB7MTsKKyAgICAgICAgQ0JyYSAxCisgICAgICAgIFx4MDgKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIFRlc3RzIGZvciBOVUxMIGNoYXJhY3RlcnMgaW4gY29tbWVudHMgYW5kIHZlcmIgIm5hbWVzIiBhbmQgY2FsbG91dHMKKworIyAvQSNCXHgwMENceDBhWi8KKy80MSAyMyA0MiAwMCA0MyAwYSA1YS9CeCxoZXgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgQVoKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgL0ErI0JceDAwQ1x4MGErLworLzQxIDJiIDIzIDQyIDAwIDQzIDBhIDJiL0J4LGhleAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBBKysKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgL0EoKjpCXHgwMFcjWFwwMFlceDBhQylaLworLzQxIDI4IDJhIDNhIDQyIDAwIDU3IDIzIDU4IDAwIDU5IDBhIDQzIDI5IDVhL0J4LGhleCxhbHRfdmVyYm5hbWVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEEKKyAgICAgICAgKk1BUksgQlx4ezB9V0MKKyAgICAgICAgWgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyAvQSgqOkJceDAwVyNYXDAwWVx4MGFDKVovCisvNDEgMjggMmEgM2EgNDIgMDAgNTcgMjMgNTggMDAgNTkgMGEgNDMgMjkgNWEvQngsaGV4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEEKKyAgICAgICAgKk1BUksgQlx4ezB9VyNYXHh7MH1ZXHh7YX1DCisgICAgICAgIFoKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgL0EoP0N7WFx4MDBZfSlCLworLzQxIDI4IDNmIDQzIDdiIDU4IDAwIDU5IDdkIDI5IDQyL0IsaGV4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEEKKyAgICAgICAgQ2FsbG91dFN0ciB7WFx4ezB9WX0gNSAxMCAxCisgICAgICAgIEIKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgL0EoPyNYXHgwMFkpQi8KKy80MSAyOCAzZiAyMyA3YiAwMCA3ZCAyOSA0Mi9CLGhleAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBBQgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBUZXN0cyBmb3IgbGVhZGluZyBjb21tZW50IGluIGV4dGVuZGVkIHBhdHRlcm5zCisKKy8gKD8teCk6Py9leHRlbmRlZAorCisvCyg/LXgpOj8vZXh0ZW5kZWQKKworLzBiIDI4IDNmIDJkIDc4IDI5IDNhL2hleCxleHRlbmRlZAorCisvI2NvbW1lbnQKKyg/LXgpOj8vZXh0ZW5kZWQKKworLyg4KCo6Nl5ceDA5eFx4YTZsXCk2IXxceGQwOlteOnwpXHgwOWRcWlxkezg1Km0oPycoPzwxISkqXFdbKlx4ZmZdISFoXHddKlx4YmU7L2FsdF9ic3V4LGFsdF92ZXJibmFtZXMsYWxsb3dfZW1wdHlfY2xhc3MsZG9sbGFyX2VuZG9ubHksZXh0ZW5kZWQsbXVsdGlsaW5lLG5ldmVyX3V0Zixub19kb3RzdGFyX2FuY2hvcixub19zdGFydF9vcHRpbWl6ZQorRmFpbGVkOiBlcnJvciAxMjQgYXQgb2Zmc2V0IDQ5OiBsZXR0ZXIgb3IgdW5kZXJzY29yZSBleHBlY3RlZCBhZnRlciAoPzwgb3IgKD8nCisKKy9hfChiKWMvcmVwbGFjZT0+JDE8LHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkKKyAgICBjYXQKKyAxOiBjPjx0CisgICAgeGJjb20gCisgMTogeD5iPG9tCisKKy9hfChiKWMvCisgICAgY2F0XD1yZXBsYWNlPT4kMTwKK0ZhaWxlZDogZXJyb3IgLTU1IGF0IG9mZnNldCAzIGluIHJlcGxhY2VtZW50OiByZXF1ZXN0ZWQgdmFsdWUgaXMgbm90IHNldAorICAgIGNhdFw9cmVwbGFjZT0+JDE8LHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkKKyAxOiBjPjx0CisgICAgeGJjb21cPXJlcGxhY2U9PiQxPCxzdWJzdGl0dXRlX3Vuc2V0X2VtcHR5CisgMTogeD5iPG9tCisKKy9hfChiKWMvc3Vic3RpdHV0ZV9leHRlbmRlZAorICAgIGNhdFw9cmVwbGFjZT0+JHsyOi14eH08CitGYWlsZWQ6IGVycm9yIC00OSBhdCBvZmZzZXQgOSBpbiByZXBsYWNlbWVudDogdW5rbm93biBzdWJzdHJpbmcKKyAgICBjYXRcPXJlcGxhY2U9PiR7MjoteHh9PCxzdWJzdGl0dXRlX3Vua25vd25fdW5zZXQKKyAxOiBjPnh4PHQKKyAgICBjYXRcPXJlcGxhY2U9PiR7WDoteHh9PCxzdWJzdGl0dXRlX3Vua25vd25fdW5zZXQKKyAxOiBjPnh4PHQKKworL2F8KD8nWCdiKWMvcmVwbGFjZT0+JFg8LHN1YnN0aXR1dGVfdW5zZXRfZW1wdHkKKyAgICBjYXQKKyAxOiBjPjx0CisgICAgeGJjb20gCisgMTogeD5iPG9tCisKKy9hfCg/J1gnYiljL3JlcGxhY2U9PiRZPCxzdWJzdGl0dXRlX3Vuc2V0X2VtcHR5CisgICAgY2F0CitGYWlsZWQ6IGVycm9yIC00OSBhdCBvZmZzZXQgMyBpbiByZXBsYWNlbWVudDogdW5rbm93biBzdWJzdHJpbmcKKyAgICBjYXRcPXN1YnN0aXR1dGVfdW5rbm93bl91bnNldCAKKyAxOiBjPjx0CisgICAgY2F0XD1zdWJzdGl0dXRlX3Vua25vd25fdW5zZXQsLXN1YnN0aXR1dGVfdW5zZXRfZW1wdHkgCitGYWlsZWQ6IGVycm9yIC01NSBhdCBvZmZzZXQgMyBpbiByZXBsYWNlbWVudDogcmVxdWVzdGVkIHZhbHVlIGlzIG5vdCBzZXQKKworL2F8KGIpYy9yZXBsYWNlPT4kMjwsc3Vic3RpdHV0ZV91bnNldF9lbXB0eQorICAgIGNhdAorRmFpbGVkOiBlcnJvciAtNDkgYXQgb2Zmc2V0IDMgaW4gcmVwbGFjZW1lbnQ6IHVua25vd24gc3Vic3RyaW5nCisgICAgY2F0XD1zdWJzdGl0dXRlX3Vua25vd25fdW5zZXQgCisgMTogYz48dAorICAgIGNhdFw9c3Vic3RpdHV0ZV91bmtub3duX3Vuc2V0LC1zdWJzdGl0dXRlX3Vuc2V0X2VtcHR5IAorRmFpbGVkOiBlcnJvciAtNTUgYXQgb2Zmc2V0IDMgaW4gcmVwbGFjZW1lbnQ6IHJlcXVlc3RlZCB2YWx1ZSBpcyBub3Qgc2V0CisKKy8oKSgpKCkvdXNlX29mZnNldF9saW1pdAorICAgIFw9b3ZlY3Rvcj0xMTAwMDAwMDAwMAorKiogSW52YWxpZCB2YWx1ZSBpbiAnb3ZlY3Rvcj0xMTAwMDAwMDAwMCcKKyAgICBcPWNhbGxvdXRfZmFpbD0xMTAwMDAwMDAwMAorKiogSW52YWxpZCB2YWx1ZSBpbiAnY2FsbG91dF9mYWlsPTExMDAwMDAwMDAwJworICAgIFw9Y2FsbG91dF9mYWlsPTE6MTEwMDAwMDAwMDAKKyoqIEludmFsaWQgdmFsdWUgaW4gJ2NhbGxvdXRfZmFpbD0xOjExMDAwMDAwMDAwJworICAgIFw9Y2FsbG91dF9kYXRhPTExMDAwMDAwMDAwIAorKiogSW52YWxpZCB2YWx1ZSBpbiAnY2FsbG91dF9kYXRhPTExMDAwMDAwMDAwJworICAgIFw9Y2FsbG91dF9kYXRhPS0xMTAwMDAwMDAwMCAKKyoqIEludmFsaWQgdmFsdWUgaW4gJ2NhbGxvdXRfZGF0YT0tMTEwMDAwMDAwMDAnCisgICAgXD1vZmZzZXRfbGltaXQ9MTEwMDAwMDAwMDAwMDAwMDAwMDAwMCAKKyoqIEludmFsaWQgdmFsdWUgaW4gJ29mZnNldF9saW1pdD0xMTAwMDAwMDAwMDAwMDAwMDAwMDAwJworICAgIFw9Y29weT0xMTAwMDAwMDAwMCAKKyoqIEludmFsaWQgdmFsdWUgaW4gJ2NvcHk9MTEwMDAwMDAwMDAnCisKKy8oKk1BUks6QVx4MDBiKS9tYXJrCisgICAgYWJjCisgMDogCitNSzogQVx4MDBiCisKKy8oKk1BUks6QVx4MDBiKS9tYXJrLGFsdF92ZXJibmFtZXMKKyAgICBhYmMKKyAwOiAKK01LOiBBXHgwMGIKKworIyAvKCpNQVJLOkFceDAwYikvCisvMjggMmEgNGQgNDEgNTIgNGIgM2EgNDEgMDAgNjIgMjkvbWFyayxoZXgKKyAgICBhYmMKKyAwOiAKK01LOiBBXHgwMGIKKworIyAvKCpNQVJLOkFceDAwYikvCisvMjggMmEgNGQgNDEgNTIgNGIgM2EgNDEgMDAgNjIgMjkvbWFyayxoZXgsYWx0X3ZlcmJuYW1lcworICAgIGFiYworIDA6IAorTUs6IEFceDAwYgorCisjIEVuZCBvZiB0ZXN0aW5wdXQyIApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIwIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MjMwODAKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjAKQEAgLTAsMCArMSwxMDEgQEAKKyMgVGhpcyBzZXQgb2YgdGVzdHMgZXhlcmNpc2VzIHRoZSBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBmdW5jdGlvbnMgaW4KKyMgdGhlIGxpYnJhcnkuIEl0IGRvZXMgbm90IHVzZSBVVEYgb3IgSklULgorCisjZm9yYmlkX3V0ZgorCisjIENvbXBpbGUgc2V2ZXJhbCBwYXR0ZXJucywgcHVzaCB0aGVtIG9udG8gdGhlIHN0YWNrLCBhbmQgdGhlbiB3cml0ZSB0aGVtCisjIGFsbCB0byBhIGZpbGUuCisKKyNwYXR0ZXJuIHB1c2gKKworLyg/PE5BTUU+KD8mTkFNRV9QQVQpKVxzKyg/PEFERFI+KD8mQUREUkVTU19QQVQpKQorICAoPyhERUZJTkUpCisgICg/PE5BTUVfUEFUPlthLXpdKykKKyAgKD88QUREUkVTU19QQVQ+XGQrKQorICApL3gKKy9eKD86KCguKSg/MSlcMnwpfCgoLikoPzMpXDR8LikpJC9pCisKKyNzYXZlIHRlc3RzYXZlZDEKKworIyBEbyBpdCBhZ2FpbiBmb3Igc29tZSBtb3JlIHBhdHRlcm5zLgorCisvKCpNQVJLOkEpKCpTS0lQOkIpKEN8WCkvbWFyaworKiogSWdub3JlZCB3aGVuIGNvbXBpbGVkIHBhdHRlcm4gaXMgc3RhY2tlZCB3aXRoICdwdXNoJzogbWFyaworLyg/Oig/PG4+Zm9vKXwoPzxuPmJhcikpXGs8bj4vZHVwbmFtZXMKKworI3NhdmUgdGVzdHNhdmVkMgorI3BhdHRlcm4gLXB1c2gKKworIyBSZWxvYWQgdGhlIHBhdHRlcm5zLCB0aGVuIHBvcCB0aGVtIG9uZSBieSBvbmUgYW5kIGNoZWNrIHRoZW0uCisKKyNsb2FkIHRlc3RzYXZlZDEKKyNsb2FkIHRlc3RzYXZlZDIKKworI3BvcCBpbmZvCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDIKK01heCBiYWNrIHJlZmVyZW5jZSA9IDIKK05hbWVkIGNhcHR1cmluZyBzdWJwYXR0ZXJuczoKKyAgbiAgIDEKKyAgbiAgIDIKK09wdGlvbnM6IGR1cG5hbWVzCitTdGFydGluZyBjb2RlIHVuaXRzOiBiIGYgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDYKKyAgICBmb29mb28gICAgICAgICAgICAgCisgMDogZm9vZm9vCisgMTogZm9vCisgICAgYmFyYmFyCisgMDogYmFyYmFyCisgMTogPHVuc2V0PgorIDI6IGJhcgorICAgIAorI3BvcCBtYXJrCisgICAgQworIDA6IEMKKyAxOiBDCitNSzogQQorXD0gRXhwZWN0IG5vIG1hdGNoICAgICAKKyAgICBEIAorTm8gbWF0Y2gsIG1hcmsgPSBBCisgICAgCisjcG9wCisgICAgQW1hbmFwbGFuYWNhbmFsUGFuYW1hICAgCisgMDogQW1hbmFwbGFuYWNhbmFsUGFuYW1hCisgMTogPHVuc2V0PgorIDI6IDx1bnNldD4KKyAzOiBBbWFuYXBsYW5hY2FuYWxQYW5hbWEKKyA0OiBBCisKKyNwb3AgaW5mbworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSA0CitOYW1lZCBjYXB0dXJpbmcgc3VicGF0dGVybnM6CisgIEFERFIgICAgICAgICAgMgorICBBRERSRVNTX1BBVCAgIDQKKyAgTkFNRSAgICAgICAgICAxCisgIE5BTUVfUEFUICAgICAgMworT3B0aW9uczogZXh0ZW5kZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIG1ldGNhbGZlIDMzCisgMDogbWV0Y2FsZmUgMzMKKyAxOiBtZXRjYWxmZQorIDI6IDMzCisgICAgCisjIENoZWNrIGZvciBhbiBlcnJvciB3aGVuIGRpZmZlcmVudCB0YWJsZXMgYXJlIHVzZWQuCisKKy9hYmMvcHVzaCx0YWJsZXM9MQorL3h5ei9wdXNoLHRhYmxlcz0yCisjc2F2ZSB0ZXN0c2F2ZWQxCitTZXJpYWxpemF0aW9uIGZhaWxlZDogZXJyb3IgLTMwOiBwYXR0ZXJucyBkbyBub3QgYWxsIHVzZSB0aGUgc2FtZSBjaGFyYWN0ZXIgdGFibGVzCisKKyNwb3AKKyAgICB4eXoKKyAwOiB4eXoKKworI3BvcAorICAgIGFiYworIDA6IGFiYworCisjcG9wIHNob3VsZCBnaXZlIGFuIGVycm9yCisqKiBDYW4ndCBwb3Agb2ZmIGFuIGVtcHR5IHN0YWNrCisgICAgcHFyCisKKyMgRW5kIG9mIHRlc3RpbnB1dDIwCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjEgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJmM2Y2MAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQyMQpAQCAtMCwwICsxLDk0IEBACisjIFRoZXNlIGFyZSB0ZXN0cyBvZiBcQyB0aGF0IGRvIG5vdCBpbnZvbHZlIFVURi4gVGhleSBhcmUgbm90IHJ1biB3aGVuIFxDIGlzCisjIGRpc2FibGVkIGJ5IGNvbXBpbGluZyB3aXRoIC0tZW5hYmxlLW5ldmVyLWJhY2tzbGFzaC1DLgorCisvXEMrXEQgXEMrXGQgXEMrXFMgXEMrXHMgXEMrXFcgXEMrXHcgXEMrLiBcQytcUiBcQytcSCBcQytcaCBcQytcViBcQytcdiBcQytcWiBcQytceiBcQyskL0J4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIEFsbEFueSsKKyAgICAgICAgXEQKKyAgICAgICAgQWxsQW55KworICAgICAgICBcZAorICAgICAgICBBbGxBbnkrCisgICAgICAgIFxTCisgICAgICAgIEFsbEFueSsKKyAgICAgICAgXHMKKyAgICAgICAgQWxsQW55KworICAgICAgICBcVworICAgICAgICBBbGxBbnkrCisgICAgICAgIFx3CisgICAgICAgIEFsbEFueSsKKyAgICAgICAgQW55CisgICAgICAgIEFsbEFueSsKKyAgICAgICAgXFIKKyAgICAgICAgQWxsQW55KworICAgICAgICBcSAorICAgICAgICBBbGxBbnkrCisgICAgICAgIFxoCisgICAgICAgIEFsbEFueSsKKyAgICAgICAgXFYKKyAgICAgICAgQWxsQW55KworICAgICAgICBcdgorICAgICAgICBBbGxBbnkrCisgICAgICAgIFxaCisgICAgICAgIEFsbEFueSsrCisgICAgICAgIFx6CisgICAgICAgIEFsbEFueSsKKyAgICAgICAgJAorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1xEK1xDIFxkK1xDIFxTK1xDIFxzK1xDIFxXK1xDIFx3K1xDIC4rXEMgXFIrXEMgXEgrXEMgXGgrXEMgXFYrXEMgXHYrXEMgYStcQyBcbitcQyBcQytcQy9CeAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBcRCsKKyAgICAgICAgQWxsQW55CisgICAgICAgIFxkKworICAgICAgICBBbGxBbnkKKyAgICAgICAgXFMrCisgICAgICAgIEFsbEFueQorICAgICAgICBccysKKyAgICAgICAgQWxsQW55CisgICAgICAgIFxXKworICAgICAgICBBbGxBbnkKKyAgICAgICAgXHcrCisgICAgICAgIEFsbEFueQorICAgICAgICBBbnkrCisgICAgICAgIEFsbEFueQorICAgICAgICBcUisKKyAgICAgICAgQWxsQW55CisgICAgICAgIFxIKworICAgICAgICBBbGxBbnkKKyAgICAgICAgXGgrCisgICAgICAgIEFsbEFueQorICAgICAgICBcVisKKyAgICAgICAgQWxsQW55CisgICAgICAgIFx2KworICAgICAgICBBbGxBbnkKKyAgICAgICAgYSsKKyAgICAgICAgQWxsQW55CisgICAgICAgIFx4MGErCisgICAgICAgIEFsbEFueQorICAgICAgICBBbGxBbnkrCisgICAgICAgIEFsbEFueQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2FiXENkZS9uZXZlcl9iYWNrc2xhc2hfYworRmFpbGVkOiBlcnJvciAxODMgYXQgb2Zmc2V0IDM6IHVzaW5nIFxDIGlzIGRpc2FibGVkIGJ5IHRoZSBhcHBsaWNhdGlvbgorCisvYWJcQ2RlL2luZm8KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorQ29udGFpbnMgXEMKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnZScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNQorICAgIGFiWGRlCisgMDogYWJYZGUKKyAgICAKKy8oPzw9YWJcQ2RlKVgvCisgICAgYWJaZGVYCisgMDogWAorCisjIEVuZCBvZiB0ZXN0aW5wdXQyMQpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIyLTE2IGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIyLTE2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMWZkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjItMTYKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIyLTMyIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIyLTMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxZDBiMDUKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjItMzIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIyLTggYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjItOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2IzMWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIyLTgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIzIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYTFjMzkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MjMKQEAgLTAsMCArMSw4IEBACisjIFRoaXMgdGVzdCBpcyBydW4gd2hlbiBQQ1JFMiBoYXMgYmVlbiBidWlsdCB3aXRoIC0tZW5hYmxlLW5ldmVyLWJhY2tzbGFzaC1DLAorIyB3aGljaCBkaXNhYmxlcyB0aGUgdXNlIG9mIFxDLiBBbGwgd2UgY2FuIGRvIGlzIGNoZWNrIHRoYXQgaXQgZ2l2ZXMgdGhlIAorIyBjb3JyZWN0IGVycm9yIG1lc3NhZ2UuCisKKy9hXENiLworRmFpbGVkOiBlcnJvciAxODUgYXQgb2Zmc2V0IDI6IHVzaW5nIFxDIGlzIGRpc2FibGVkIGluIHRoaXMgUENSRTIgbGlicmFyeQorCisjIEVuZCBvZiB0ZXN0aW5wdXQyMwpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDMgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWU4YzVjCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDMKQEAgLTAsMCArMSwxNjMgQEAKKyMgVGhpcyBzZXQgb2YgdGVzdHMgY2hlY2tzIGxvY2FsLXNwZWNpZmljIGZlYXR1cmVzLCB1c2luZyB0aGUgImZyX0ZSIiBsb2NhbGUuIAorIyBJdCBpcyBub3QgUGVybC1jb21wYXRpYmxlLiBXaGVuIHJ1biB2aWEgUnVuVGVzdCwgdGhlIGxvY2FsZSBpcyBlZGl0ZWQgdG8KKyMgYmUgd2hpY2hldmVyIG9mICJmcl9GUiIsICJmcmVuY2giLCBvciAiZnIiIGlzIGZvdW5kIHRvIGV4aXN0LiBUaGVyZSBpcworIyBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgY2FsbGVkIHdpbnRlc3RpbnB1dDMgZm9yIHVzZSBvbiBXaW5kb3dzLAorIyB3aGVyZSB0aGUgbG9jYWxlIGlzIGNhbGxlZCAiZnJlbmNoIiBhbmQgdGhlIHRlc3RzIGFyZSBydW4gdXNpbmcKKyMgUnVuVGVzdC5iYXQuIAorCisjZm9yYmlkX3V0ZgorCisvXltcd10rLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgyWNvbGUKK05vIG1hdGNoCisKKy9eW1x3XSsvbG9jYWxlPWZyX0ZSCisgICAgyWNvbGUKKyAwOiDJY29sZQorCisvXltcd10rLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgyWNvbGUKK05vIG1hdGNoCisKKy9eW1xXXSsvCisgICAgyWNvbGUKKyAwOiBceGM5CisKKy9eW1xXXSsvbG9jYWxlPWZyX0ZSCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICDJY29sZQorTm8gbWF0Y2gKKworL1tcYl0vCisgICAgXGIKKyAwOiBceDA4CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCitObyBtYXRjaAorCisvW1xiXS9sb2NhbGU9ZnJfRlIKKyAgICBcYgorIDA6IFx4MDgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKK05vIG1hdGNoCisKKy9eXHcrLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgyWNvbGUKK05vIG1hdGNoCisKKy9eXHcrL2xvY2FsZT1mcl9GUgorICAgIMljb2xlCisgMDogyWNvbGUKKworLyguKylcYiguKykvCisgICAgyWNvbGUKKyAwOiBceGM5Y29sZQorIDE6IFx4YzkKKyAyOiBjb2xlCisKKy8oLispXGIoLispL2xvY2FsZT1mcl9GUgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgyWNvbGUKK05vIG1hdGNoCisKKy/JY29sZS9pCisgICAgyWNvbGUKKyAwOiBceGM5Y29sZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAg6WNvbGUKK05vIG1hdGNoCisKKy/JY29sZS9pLGxvY2FsZT1mcl9GUgorICAgIMljb2xlCisgMDogyWNvbGUKKyAgICDpY29sZQorIDA6IOljb2xlCisKKy9cdy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDAgMSAyIDMgNCA1IDYgNyA4IDkgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCAKKyAgUSBSIFMgVCBVIFYgVyBYIFkgWiBfIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHcvSSxsb2NhbGU9ZnJfRlIKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIAorICBRIFIgUyBUIFUgViBXIFggWSBaIF8gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IAorICCqILUguiDAIMEgwiDDIMQgxSDGIMcgyCDJIMogyyDMIM0gziDPINAg0SDSINMg1CDVINYg2CDZINog2yDcIN0g3iDfIOAg4SDiIAorICDjIOQg5SDmIOcg6CDpIOog6yDsIO0g7iDvIPAg8SDyIPMg9CD1IPYg+CD5IPog+yD8IP0g/iD/IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKyMgQWxsIHJlbWFpbmluZyB0ZXN0cyBhcmUgaW4gdGhlIGZyX0ZSIGxvY2FsZSwgc28gc2V0IHRoZSBkZWZhdWx0LgorCisjcGF0dGVybiBsb2NhbGU9ZnJfRlIKKworL15bXHhjOC1ceGM5XS9pCisgICAgyWNvbGUKKyAwOiDJCisgICAg6WNvbGUKKyAwOiDpCisKKy9eW1x4YzgtXHhjOV0vCisgICAgyWNvbGUKKyAwOiDJCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICDpY29sZQorTm8gbWF0Y2gKKworL1xXKy8KKyAgICA+Pj5ceGFhPDw8CisgMDogPj4+CisgICAgPj4+XHhiYTw8PCAKKyAwOiA+Pj4KKworL1tcV10rLworICAgID4+Plx4YWE8PDwKKyAwOiA+Pj4KKyAgICA+Pj5ceGJhPDw8IAorIDA6ID4+PgorCisvW15bOmFscGhhOl1dKy8KKyAgICA+Pj5ceGFhPDw8CisgMDogPj4+CisgICAgPj4+XHhiYTw8PCAKKyAwOiA+Pj4KKworL1x3Ky8KKyAgICA+Pj5ceGFhPDw8CisgMDogqgorICAgID4+Plx4YmE8PDwgCisgMDogugorCisvW1x3XSsvCisgICAgPj4+XHhhYTw8PAorIDA6IKoKKyAgICA+Pj5ceGJhPDw8IAorIDA6ILoKKworL1tbOmFscGhhOl1dKy8KKyAgICA+Pj5ceGFhPDw8CisgMDogqgorICAgID4+Plx4YmE8PDwgCisgMDogugorICAgIAorL1tbOmFscGhhOl1dW1s6bG93ZXI6XV1bWzp1cHBlcjpdXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbQS1aYS16XHhhYVx4YjVceGJhXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1ceGZmXQorICAgICAgICBbYS16XHhiNVx4ZGYtXHhmNlx4ZjgtXHhmZl0KKyAgICAgICAgW0EtWlx4YzAtXHhkNlx4ZDgtXHhkZV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiAKKyAgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IKogtSC6IMAgwSDCIMMgxCDFIMYgxyAKKyAgyCDJIMogyyDMIM0gziDPINAg0SDSINMg1CDVINYg2CDZINog2yDcIN0g3iDfIOAg4SDiIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SAKKyAg7iDvIPAg8SDyIPMg9CD1IPYg+CD5IPog+yD8IP0g/iD/IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKyMgRW5kIG9mIHRlc3RpbnB1dDMgCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0M0EgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0M0EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWIwMGJlOAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQzQQpAQCAtMCwwICsxLDE2MyBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBjaGVja3MgbG9jYWwtc3BlY2lmaWMgZmVhdHVyZXMsIHVzaW5nIHRoZSAiZnJfRlIiIGxvY2FsZS4gCisjIEl0IGlzIG5vdCBQZXJsLWNvbXBhdGlibGUuIFdoZW4gcnVuIHZpYSBSdW5UZXN0LCB0aGUgbG9jYWxlIGlzIGVkaXRlZCB0bworIyBiZSB3aGljaGV2ZXIgb2YgImZyX0ZSIiwgImZyZW5jaCIsIG9yICJmciIgaXMgZm91bmQgdG8gZXhpc3QuIFRoZXJlIGlzCisjIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBjYWxsZWQgd2ludGVzdGlucHV0MyBmb3IgdXNlIG9uIFdpbmRvd3MsCisjIHdoZXJlIHRoZSBsb2NhbGUgaXMgY2FsbGVkICJmcmVuY2giIGFuZCB0aGUgdGVzdHMgYXJlIHJ1biB1c2luZworIyBSdW5UZXN0LmJhdC4gCisKKyNmb3JiaWRfdXRmCisKKy9eW1x3XSsvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICDJY29sZQorTm8gbWF0Y2gKKworL15bXHddKy9sb2NhbGU9ZnJfRlIKKyAgICDJY29sZQorIDA6IMljb2xlCisKKy9eW1x3XSsvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICDJY29sZQorTm8gbWF0Y2gKKworL15bXFddKy8KKyAgICDJY29sZQorIDA6IFx4YzkKKworL15bXFddKy9sb2NhbGU9ZnJfRlIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIMljb2xlCitObyBtYXRjaAorCisvW1xiXS8KKyAgICBcYgorIDA6IFx4MDgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKK05vIG1hdGNoCisKKy9bXGJdL2xvY2FsZT1mcl9GUgorICAgIFxiCisgMDogXHgwOAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorTm8gbWF0Y2gKKworL15cdysvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICDJY29sZQorTm8gbWF0Y2gKKworL15cdysvbG9jYWxlPWZyX0ZSCisgICAgyWNvbGUKKyAwOiDJY29sZQorCisvKC4rKVxiKC4rKS8KKyAgICDJY29sZQorIDA6IFx4Yzljb2xlCisgMTogXHhjOQorIDI6IGNvbGUKKworLyguKylcYiguKykvbG9jYWxlPWZyX0ZSCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICDJY29sZQorTm8gbWF0Y2gKKworL8ljb2xlL2kKKyAgICDJY29sZQorIDA6IFx4Yzljb2xlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICDpY29sZQorTm8gbWF0Y2gKKworL8ljb2xlL2ksbG9jYWxlPWZyX0ZSCisgICAgyWNvbGUKKyAwOiDJY29sZQorICAgIOljb2xlCisgMDog6WNvbGUKKworL1x3L0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIAorICBRIFIgUyBUIFUgViBXIFggWSBaIF8gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9cdy9JLGxvY2FsZT1mcl9GUgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiAwIDEgMiAzIDQgNSA2IDcgOCA5IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgCisgIFEgUiBTIFQgVSBWIFcgWCBZIFogXyBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogCisgIKogtSC6IMAgwSDCIMMgxCDFIMYgxyDIIMkgyiDLIMwgzSDOIM8g0CDRINIg0yDUINUg1iDYINkg2iDbINwg3SDeIN8g4CDhIOIgCisgIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SDuIO8g8CDxIPIg8yD0IPUg9iD4IPkg+iD7IPwg/SD+IP8gCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworIyBBbGwgcmVtYWluaW5nIHRlc3RzIGFyZSBpbiB0aGUgZnJfRlIgbG9jYWxlLCBzbyBzZXQgdGhlIGRlZmF1bHQuCisKKyNwYXR0ZXJuIGxvY2FsZT1mcl9GUgorCisvXltceGM4LVx4YzldL2kKKyAgICDJY29sZQorIDA6IMkKKyAgICDpY29sZQorIDA6IOkKKworL15bXHhjOC1ceGM5XS8KKyAgICDJY29sZQorIDA6IMkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIOljb2xlCitObyBtYXRjaAorCisvXFcrLworICAgID4+Plx4YWE8PDwKKyAwOiA+Pj4KKyAgICA+Pj5ceGJhPDw8IAorIDA6ID4+PgorCisvW1xXXSsvCisgICAgPj4+XHhhYTw8PAorIDA6ID4+PgorICAgID4+Plx4YmE8PDwgCisgMDogPj4+CisKKy9bXls6YWxwaGE6XV0rLworICAgID4+Plx4YWE8PDwKKyAwOiA+Pj4KKyAgICA+Pj5ceGJhPDw8IAorIDA6ID4+PgorCisvXHcrLworICAgID4+Plx4YWE8PDwKKyAwOiCqCisgICAgPj4+XHhiYTw8PCAKKyAwOiC6CisKKy9bXHddKy8KKyAgICA+Pj5ceGFhPDw8CisgMDogqgorICAgID4+Plx4YmE8PDwgCisgMDogugorCisvW1s6YWxwaGE6XV0rLworICAgID4+Plx4YWE8PDwKKyAwOiCqCisgICAgPj4+XHhiYTw8PCAKKyAwOiC6CisgICAgCisvW1s6YWxwaGE6XV1bWzpsb3dlcjpdXVtbOnVwcGVyOl1dL0lCCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtBLVphLXpceGFhXHhiNVx4YmFceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx4ZmZdCisgICAgICAgIFthLXpceGFhXHhiNVx4YmFceGRmLVx4ZjZceGY4LVx4ZmZdCisgICAgICAgIFtBLVpceGMwLVx4ZDZceGQ4LVx4ZGVdCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFogCisgIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiCqILUguiDAIMEgwiDDIMQgxSDGIMcgCisgIMggySDKIMsgzCDNIM4gzyDQINEg0iDTINQg1SDWINgg2SDaINsg3CDdIN4g3yDgIOEg4iDjIOQg5SDmIOcg6CDpIOog6yDsIO0gCisgIO4g7yDwIPEg8iDzIPQg9SD2IPgg+SD6IPsg/CD9IP4g/yAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisjIEVuZCBvZiB0ZXN0aW5wdXQzIApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDNCIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDNCCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMGZjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0M0IKQEAgLTAsMCArMSwxNjMgQEAKKyMgVGhpcyBzZXQgb2YgdGVzdHMgY2hlY2tzIGxvY2FsLXNwZWNpZmljIGZlYXR1cmVzLCB1c2luZyB0aGUgImZyX0ZSIiBsb2NhbGUuIAorIyBJdCBpcyBub3QgUGVybC1jb21wYXRpYmxlLiBXaGVuIHJ1biB2aWEgUnVuVGVzdCwgdGhlIGxvY2FsZSBpcyBlZGl0ZWQgdG8KKyMgYmUgd2hpY2hldmVyIG9mICJmcl9GUiIsICJmcmVuY2giLCBvciAiZnIiIGlzIGZvdW5kIHRvIGV4aXN0LiBUaGVyZSBpcworIyBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGlzIGZpbGUgY2FsbGVkIHdpbnRlc3RpbnB1dDMgZm9yIHVzZSBvbiBXaW5kb3dzLAorIyB3aGVyZSB0aGUgbG9jYWxlIGlzIGNhbGxlZCAiZnJlbmNoIiBhbmQgdGhlIHRlc3RzIGFyZSBydW4gdXNpbmcKKyMgUnVuVGVzdC5iYXQuIAorCisjZm9yYmlkX3V0ZgorCisvXltcd10rLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgyWNvbGUKK05vIG1hdGNoCisKKy9eW1x3XSsvbG9jYWxlPWZyX0ZSCisgICAgyWNvbGUKKyAwOiDJY29sZQorCisvXltcd10rLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgyWNvbGUKK05vIG1hdGNoCisKKy9eW1xXXSsvCisgICAgyWNvbGUKKyAwOiBceGM5CisKKy9eW1xXXSsvbG9jYWxlPWZyX0ZSCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICDJY29sZQorTm8gbWF0Y2gKKworL1tcYl0vCisgICAgXGIKKyAwOiBceDA4CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCitObyBtYXRjaAorCisvW1xiXS9sb2NhbGU9ZnJfRlIKKyAgICBcYgorIDA6IFx4MDgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKK05vIG1hdGNoCisKKy9eXHcrLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgyWNvbGUKK05vIG1hdGNoCisKKy9eXHcrL2xvY2FsZT1mcl9GUgorICAgIMljb2xlCisgMDogyWNvbGUKKworLyguKylcYiguKykvCisgICAgyWNvbGUKKyAwOiBceGM5Y29sZQorIDE6IFx4YzkKKyAyOiBjb2xlCisKKy8oLispXGIoLispL2xvY2FsZT1mcl9GUgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgyWNvbGUKK05vIG1hdGNoCisKKy/JY29sZS9pCisgICAgyWNvbGUKKyAwOiBceGM5Y29sZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAg6WNvbGUKK05vIG1hdGNoCisKKy/JY29sZS9pLGxvY2FsZT1mcl9GUgorICAgIMljb2xlCisgMDogyWNvbGUKKyAgICDpY29sZQorIDA6IOljb2xlCisKKy9cdy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDAgMSAyIDMgNCA1IDYgNyA4IDkgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCAKKyAgUSBSIFMgVCBVIFYgVyBYIFkgWiBfIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHcvSSxsb2NhbGU9ZnJfRlIKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3RhcnRpbmcgY29kZSB1bml0czogMCAxIDIgMyA0IDUgNiA3IDggOSBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIAorICBRIFIgUyBUIFUgViBXIFggWSBaIF8gYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IAorICCqILUguiDAIMEgwiDDIMQgxSDGIMcgyCDJIMogyyDMIM0gziDPINAg0SDSINMg1CDVINYg2CDZINog2yDcIN0g3iDfIOAg4SDiIAorICDjIOQg5SDmIOcg6CDpIOog6yDsIO0g7iDvIPAg8SDyIPMg9CD1IPYg+CD5IPog+yD8IP0g/iD/IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKyMgQWxsIHJlbWFpbmluZyB0ZXN0cyBhcmUgaW4gdGhlIGZyX0ZSIGxvY2FsZSwgc28gc2V0IHRoZSBkZWZhdWx0LgorCisjcGF0dGVybiBsb2NhbGU9ZnJfRlIKKworL15bXHhjOC1ceGM5XS9pCisgICAgyWNvbGUKKyAwOiDJCisgICAg6WNvbGUKKyAwOiDpCisKKy9eW1x4YzgtXHhjOV0vCisgICAgyWNvbGUKKyAwOiDJCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICDpY29sZQorTm8gbWF0Y2gKKworL1xXKy8KKyAgICA+Pj5ceGFhPDw8CisgMDogPj4+CisgICAgPj4+XHhiYTw8PCAKKyAwOiA+Pj4KKworL1tcV10rLworICAgID4+Plx4YWE8PDwKKyAwOiA+Pj4KKyAgICA+Pj5ceGJhPDw8IAorIDA6ID4+PgorCisvW15bOmFscGhhOl1dKy8KKyAgICA+Pj5ceGFhPDw8CisgMDogPj4+CisgICAgPj4+XHhiYTw8PCAKKyAwOiA+Pj4KKworL1x3Ky8KKyAgICA+Pj5ceGFhPDw8CisgMDogqgorICAgID4+Plx4YmE8PDwgCisgMDogugorCisvW1x3XSsvCisgICAgPj4+XHhhYTw8PAorIDA6IKoKKyAgICA+Pj5ceGJhPDw8IAorIDA6ILoKKworL1tbOmFscGhhOl1dKy8KKyAgICA+Pj5ceGFhPDw8CisgMDogqgorICAgID4+Plx4YmE8PDwgCisgMDogugorICAgIAorL1tbOmFscGhhOl1dW1s6bG93ZXI6XV1bWzp1cHBlcjpdXS9JQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbQS1aYS16XHg4M1x4OGFceDhjXHg4ZVx4OWFceDljXHg5ZVx4OWZceGFhXHhiNVx4YmFceGMwLVx4ZDZceGQ4LVx4ZjZceGY4LVx4ZmZdCisgICAgICAgIFthLXpceDgzXHg5YVx4OWNceDllXHhhYVx4YjVceGJhXHhkZi1ceGY2XHhmOC1ceGZmXQorICAgICAgICBbQS1aXHg4YVx4OGNceDhlXHg5Zlx4YzAtXHhkNlx4ZDgtXHhkZV0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYIFkgWiAKKyAgYSBiIGMgZCBlIGYgZyBoIGkgaiBrIGwgbSBuIG8gcCBxIHIgcyB0IHUgdiB3IHggeSB6IKogtSC6IMAgwSDCIMMgxCDFIMYgxyAKKyAgyCDJIMogyyDMIM0gziDPINAg0SDSINMg1CDVINYg2CDZINog2yDcIN0g3iDfIOAg4SDiIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SAKKyAg7iDvIPAg8SDyIPMg9CD1IPYg+CD5IPog+yD8IP0g/iD/IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKyMgRW5kIG9mIHRlc3RpbnB1dDMgCmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0NCBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwMWQ0MTEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0NApAQCAtMCwwICsxLDM3MDYgQEAKKyMgVGhpcyBzZXQgb2YgdGVzdHMgaXMgZm9yIFVURiBzdXBwb3J0LCBpbmNsdWRpbmcgVW5pY29kZSBwcm9wZXJ0aWVzLiBUaGUgCisjIFVuaWNvZGUgdGVzdHMgYXJlIGFsbCBjb21wYXRpYmxlIHdpdGggYWxsIHZlcnNpb25zIG9mIFBlcmwgPj0gNS4xMCwgYnV0CisjIHNvbWUgb2YgdGhlIHByb3BlcnR5IHRlc3RzIG1heSBkaWZmZXIgYmVjYXVzZSBvZiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YKKyMgVW5pY29kZSBpbiB1c2UgYnkgUENSRTIgYW5kIFBlcmwuCisKKyNuZXdsaW5lX2RlZmF1bHQgbGYgYW55Y3JsZiBhbnkKKyNwZXJsdGVzdAorCisvYS5iL3V0ZgorICAgIGFjYgorIDA6IGFjYgorICAgIGFceDdmYgorIDA6IGFceHs3Zn1iCisgICAgYVx4ezEwMH1iCisgMDogYVx4ezEwMH1iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXG5iCitObyBtYXRjaAorCisvYSguezN9KWIvdXRmCisgICAgYVx4ezQwMDB9eHliCisgMDogYVx4ezQwMDB9eHliCisgMTogXHh7NDAwMH14eQorICAgIGFceHs0MDAwfVx4N2Z5YgorIDA6IGFceHs0MDAwfVx4ezdmfXliCisgMTogXHh7NDAwMH1ceHs3Zn15CisgICAgYVx4ezQwMDB9XHh7MTAwfXliCisgMDogYVx4ezQwMDB9XHh7MTAwfXliCisgMTogXHh7NDAwMH1ceHsxMDB9eQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ezQwMDB9YgorTm8gbWF0Y2gKKyAgICBhY1xuY2IKK05vIG1hdGNoCisKKy9hKC4qPykoLikvCisgICAgYVx4YzBceDg4YgorIDA6IGFceGMwCisgMTogCisgMjogXHhjMAorCisvYSguKj8pKC4pL3V0ZgorICAgIGFceHsxMDB9YgorIDA6IGFceHsxMDB9CisgMTogCisgMjogXHh7MTAwfQorCisvYSguKikoLikvCisgICAgYVx4YzBceDg4YgorIDA6IGFceGMwXHg4OGIKKyAxOiBceGMwXHg4OAorIDI6IGIKKworL2EoLiopKC4pL3V0ZgorICAgIGFceHsxMDB9YgorIDA6IGFceHsxMDB9YgorIDE6IFx4ezEwMH0KKyAyOiBiCisKKy9hKC4pKC4pLworICAgIGFceGMwXHg5MmJjZAorIDA6IGFceGMwXHg5MgorIDE6IFx4YzAKKyAyOiBceDkyCisKKy9hKC4pKC4pL3V0ZgorICAgIGFceHsyNDB9YmNkCisgMDogYVx4ezI0MH1iCisgMTogXHh7MjQwfQorIDI6IGIKKworL2EoLj8pKC4pLworICAgIGFceGMwXHg5MmJjZAorIDA6IGFceGMwXHg5MgorIDE6IFx4YzAKKyAyOiBceDkyCisKKy9hKC4/KSguKS91dGYKKyAgICBhXHh7MjQwfWJjZAorIDA6IGFceHsyNDB9YgorIDE6IFx4ezI0MH0KKyAyOiBiCisKKy9hKC4/PykoLikvCisgICAgYVx4YzBceDkyYmNkCisgMDogYVx4YzAKKyAxOiAKKyAyOiBceGMwCisKKy9hKC4/PykoLikvdXRmCisgICAgYVx4ezI0MH1iY2QKKyAwOiBhXHh7MjQwfQorIDE6IAorIDI6IFx4ezI0MH0KKworL2EoLnszfSliL3V0ZgorICAgIGFceHsxMjM0fXh5YgorIDA6IGFceHsxMjM0fXh5YgorIDE6IFx4ezEyMzR9eHkKKyAgICBhXHh7MTIzNH1ceHs0MzIxfXliCisgMDogYVx4ezEyMzR9XHh7NDMyMX15YgorIDE6IFx4ezEyMzR9XHh7NDMyMX15CisgICAgYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfWIKKyAwOiBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9YgorIDE6IFx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ezEyMzR9YgorTm8gbWF0Y2gKKyAgICBhY1xuY2IKK05vIG1hdGNoCisKKy9hKC57Myx9KWIvdXRmCisgICAgYVx4ezEyMzR9eHliCisgMDogYVx4ezEyMzR9eHliCisgMTogXHh7MTIzNH14eQorICAgIGFceHsxMjM0fVx4ezQzMjF9eWIKKyAwOiBhXHh7MTIzNH1ceHs0MzIxfXliCisgMTogXHh7MTIzNH1ceHs0MzIxfXkKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9YgorIDA6IGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iCisgMTogXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9CisgICAgYXh4eHhiY2RlZmdoaWpiCisgMDogYXh4eHhiY2RlZmdoaWpiCisgMTogeHh4eGJjZGVmZ2hpagorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1ceHszNDIxfWIKKyAwOiBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9XHh7MzQyMX1iCisgMTogXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9XHh7MzQyMX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceHsxMjM0fWIKK05vIG1hdGNoCisKKy9hKC57Myx9PyliL3V0ZgorICAgIGFceHsxMjM0fXh5YgorIDA6IGFceHsxMjM0fXh5YgorIDE6IFx4ezEyMzR9eHkKKyAgICBhXHh7MTIzNH1ceHs0MzIxfXliCisgMDogYVx4ezEyMzR9XHh7NDMyMX15YgorIDE6IFx4ezEyMzR9XHh7NDMyMX15CisgICAgYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfWIKKyAwOiBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9YgorIDE6IFx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfQorICAgIGF4eHh4YmNkZWZnaGlqYgorIDA6IGF4eHh4YgorIDE6IHh4eHgKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9XHh7MzQyMX1iCisgMDogYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfVx4ezM0MjF9YgorIDE6IFx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfVx4ezM0MjF9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MTIzNH1iCitObyBtYXRjaAorCisvYSguezMsNX0pYi91dGYKKyAgICBhXHh7MTIzNH14eWIKKyAwOiBhXHh7MTIzNH14eWIKKyAxOiBceHsxMjM0fXh5CisgICAgYVx4ezEyMzR9XHh7NDMyMX15YgorIDA6IGFceHsxMjM0fVx4ezQzMjF9eWIKKyAxOiBceHsxMjM0fVx4ezQzMjF9eQorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iCisgMDogYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfWIKKyAxOiBceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn0KKyAgICBheHh4eGJjZGVmZ2hpamIKKyAwOiBheHh4eGIKKyAxOiB4eHh4CisgICAgYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfVx4ezM0MjF9YgorIDA6IGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1ceHszNDIxfWIKKyAxOiBceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1ceHszNDIxfQorICAgIGF4Ynh4YmNkZWZnaGlqYgorIDA6IGF4Ynh4YgorIDE6IHhieHgKKyAgICBheHh4eHhiY2RlZmdoaWpiCisgMDogYXh4eHh4YgorIDE6IHh4eHh4CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MTIzNH1iCitObyBtYXRjaAorICAgIGF4eHh4eHhiY2RlZmdoaWpiCitObyBtYXRjaAorCisvYSguezMsNX0/KWIvdXRmCisgICAgYVx4ezEyMzR9eHliCisgMDogYVx4ezEyMzR9eHliCisgMTogXHh7MTIzNH14eQorICAgIGFceHsxMjM0fVx4ezQzMjF9eWIKKyAwOiBhXHh7MTIzNH1ceHs0MzIxfXliCisgMTogXHh7MTIzNH1ceHs0MzIxfXkKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9YgorIDA6IGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iCisgMTogXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9CisgICAgYXh4eHhiY2RlZmdoaWpiCisgMDogYXh4eHhiCisgMTogeHh4eAorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1ceHszNDIxfWIKKyAwOiBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9XHh7MzQyMX1iCisgMTogXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9XHh7MzQyMX0KKyAgICBheGJ4eGJjZGVmZ2hpamIKKyAwOiBheGJ4eGIKKyAxOiB4Ynh4CisgICAgYXh4eHh4YmNkZWZnaGlqYgorIDA6IGF4eHh4eGIKKyAxOiB4eHh4eAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ezEyMzR9YgorTm8gbWF0Y2gKKyAgICBheHh4eHh4YmNkZWZnaGlqYgorTm8gbWF0Y2gKKworL15bYVx4e2MwfV0vdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9CitObyBtYXRjaAorCisvKD88PWFYYiljZC91dGYKKyAgICBhWGJjZAorIDA6IGNkCisKKy8oPzw9YVx4ezEwMH1iKWNkL3V0ZgorICAgIGFceHsxMDB9YmNkCisgMDogY2QKKworLyg/PD1hXHh7MTAwMDAwfWIpY2QvdXRmCisgICAgYVx4ezEwMDAwMH1iY2QKKyAwOiBjZAorCisvKD86XHh7MTAwfSl7M31iL3V0ZgorICAgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfWIKKyAwOiBceHsxMDB9XHh7MTAwfVx4ezEwMH1iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9XHh7MTAwfWIKK05vIG1hdGNoCisKKy9ceHthYn0vdXRmCisgICAgXHh7YWJ9CisgMDogXHh7YWJ9CisgICAgXHhjMlx4YWIKKyAwOiBceHthYn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4MDB7YWJ9CitObyBtYXRjaAorCisvKD88PSguKSlYL3V0ZgorICAgIFdYWVoKKyAwOiBYCisgMTogVworICAgIFx4ezI1Nn1YWVoKKyAwOiBYCisgMTogXHh7MjU2fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWFlaCitObyBtYXRjaAorCisvW15hXSsvZyx1dGYKKyAgICBiY2QKKyAwOiBiY2QKKyAgICBceHsxMDB9YVlceHsyNTZ9WgorIDA6IFx4ezEwMH0KKyAwOiBZXHh7MjU2fVoKKworL15bXmFdezJ9L3V0ZgorICAgIFx4ezEwMH1iYworIDA6IFx4ezEwMH1iCisKKy9eW15hXXsyLH0vdXRmCisgICAgXHh7MTAwfWJjQWEKKyAwOiBceHsxMDB9YmNBCisKKy9eW15hXXsyLH0/L3V0ZgorICAgIFx4ezEwMH1iY2EKKyAwOiBceHsxMDB9YgorCisvW15hXSsvZ2ksdXRmCisgICAgYmNkCisgMDogYmNkCisgICAgXHh7MTAwfWFZXHh7MjU2fVoKKyAwOiBceHsxMDB9CisgMDogWVx4ezI1Nn1aCisKKy9eW15hXXsyfS9pLHV0ZgorICAgIFx4ezEwMH1iYworIDA6IFx4ezEwMH1iCisKKy9eW15hXXsyLH0vaSx1dGYKKyAgICBceHsxMDB9YmNBYQorIDA6IFx4ezEwMH1iYworCisvXlteYV17Mix9Py9pLHV0ZgorICAgIFx4ezEwMH1iY2EKKyAwOiBceHsxMDB9YgorCisvXHh7MTAwfXswLDB9L3V0ZgorICAgIGFiY2QKKyAwOiAKKworL1x4ezEwMH0/L3V0ZgorICAgIGFiY2QKKyAwOiAKKyAgICBceHsxMDB9XHh7MTAwfQorIDA6IFx4ezEwMH0KKworL1x4ezEwMH17MCwzfS91dGYKKyAgICBceHsxMDB9XHh7MTAwfQorIDA6IFx4ezEwMH1ceHsxMDB9CisgICAgXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfQorIDA6IFx4ezEwMH1ceHsxMDB9XHh7MTAwfQorCisvXHh7MTAwfSovdXRmCisgICAgYWJjZQorIDA6IAorICAgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKyAwOiBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisKKy9ceHsxMDB9ezEsMX0vdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKyAwOiBceHsxMDB9CisKKy9ceHsxMDB9ezEsM30vdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKyAwOiBceHsxMDB9XHh7MTAwfVx4ezEwMH0KKworL1x4ezEwMH0rL3V0ZgorICAgIGFiY2RceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisgMDogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfQorCisvXHh7MTAwfXszfS91dGYKKyAgICBhYmNkXHh7MTAwfVx4ezEwMH1ceHsxMDB9WFgKKyAwOiBceHsxMDB9XHh7MTAwfVx4ezEwMH0KKworL1x4ezEwMH17Myw1fS91dGYKKyAgICBhYmNkXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVhYCisgMDogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKworL1x4ezEwMH17Myx9L3V0ZgorICAgIGFiY2RceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9WFgKKyAwOiBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisKKy8oPzw9YVx4ezEwMH17Mn1iKVgvdXRmLGFmdGVydGV4dAorICAgIFh5eXlhXHh7MTAwfVx4ezEwMH1iWHp6egorIDA6IFgKKyAwKyB6enoKKworL1xEKi91dGYKKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgMDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisKKy9cRCovdXRmCisgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfQorIDA6IFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfQorCisvXEQvdXRmCisgICAgMVgyCisgMDogWAorICAgIDFceHsxMDB9MgorIDA6IFx4ezEwMH0KKworLz5cUy91dGYKKyAgICA+ID5YIFkKKyAwOiA+WAorICAgID4gPlx4ezEwMH0gWQorIDA6ID5ceHsxMDB9CisKKy9cZC91dGYKKyAgICBceHsxMDB9MworIDA6IDMKKworL1xzL3V0ZgorICAgIFx4ezEwMH0gWAorIDA6ICAKKworL1xEKy91dGYKKyAgICAxMmFiY2QzNAorIDA6IGFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQKK05vIG1hdGNoCisKKy9cRHsyLDN9L3V0ZgorICAgIDEyYWJjZDM0CisgMDogYWJjCisgICAgMTJhYjM0CisgMDogYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQKK05vIG1hdGNoCisgICAgMTJhMzQKK05vIG1hdGNoCisKKy9cRHsyLDN9Py91dGYKKyAgICAxMmFiY2QzNAorIDA6IGFiCisgICAgMTJhYjM0CisgMDogYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQKK05vIG1hdGNoCisgICAgMTJhMzQKK05vIG1hdGNoCisKKy9cZCsvdXRmCisgICAgMTJhYmNkMzQKKyAwOiAxMgorCisvXGR7MiwzfS91dGYKKyAgICAxMmFiY2QzNAorIDA6IDEyCisgICAgMTIzNGFiY2QKKyAwOiAxMjMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEuNAorTm8gbWF0Y2gKKworL1xkezIsM30/L3V0ZgorICAgIDEyYWJjZDM0CisgMDogMTIKKyAgICAxMjM0YWJjZAorIDA6IDEyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxLjQKK05vIG1hdGNoCisKKy9cUysvdXRmCisgICAgMTJhYmNkMzQKKyAwOiAxMmFiY2QzNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXCAgICBcCitObyBtYXRjaAorCisvXFN7MiwzfS91dGYKKyAgICAxMmFiY2QzNAorIDA6IDEyYQorICAgIDEyMzRhYmNkCisgMDogMTIzCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcICAgICBcCitObyBtYXRjaAorCisvXFN7MiwzfT8vdXRmCisgICAgMTJhYmNkMzQKKyAwOiAxMgorICAgIDEyMzRhYmNkCisgMDogMTIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFwgICAgIFwKK05vIG1hdGNoCisKKy8+XHMrPC91dGYsYWZ0ZXJ0ZXh0CisgICAgMTI+ICAgICAgPDM0CisgMDogPiAgICAgIDwKKyAwKyAzNAorCisvPlxzezIsM308L3V0ZixhZnRlcnRleHQKKyAgICBhYj4gIDxjZAorIDA6ID4gIDwKKyAwKyBjZAorICAgIGFiPiAgIDxjZQorIDA6ID4gICA8CisgMCsgY2UKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiPiAgICA8Y2QKK05vIG1hdGNoCisKKy8+XHN7MiwzfT88L3V0ZixhZnRlcnRleHQKKyAgICBhYj4gIDxjZAorIDA6ID4gIDwKKyAwKyBjZAorICAgIGFiPiAgIDxjZQorIDA6ID4gICA8CisgMCsgY2UKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiPiAgICA8Y2QKK05vIG1hdGNoCisKKy9cdysvdXRmCisgICAgMTIgICAgICAzNAorIDA6IDEyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICArKys9KiEKK05vIG1hdGNoCisKKy9cd3syLDN9L3V0ZgorICAgIGFiICBjZAorIDA6IGFiCisgICAgYWJjZCBjZQorIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYS5iLmMKK05vIG1hdGNoCisKKy9cd3syLDN9Py91dGYKKyAgICBhYiAgY2QKKyAwOiBhYgorICAgIGFiY2QgY2UKKyAwOiBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYS5iLmMKK05vIG1hdGNoCisKKy9cVysvdXRmCisgICAgMTI9PT09MzQKKyAwOiA9PT09CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkCitObyBtYXRjaAorCisvXFd7MiwzfS91dGYKKyAgICBhYj09PT1jZAorIDA6ID09PQorICAgIGFiPT1jZAorIDA6ID09CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhLmIuYworTm8gbWF0Y2gKKworL1xXezIsM30/L3V0ZgorICAgIGFiPT09PWNkCisgMDogPT0KKyAgICBhYj09Y2QKKyAwOiA9PQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYS5iLmMKK05vIG1hdGNoCisKKy9bXHh7MTAwfV0vdXRmCisgICAgXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBaXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBceHsxMDB9WgorIDA6IFx4ezEwMH0KKworL1taXHh7MTAwfV0vdXRmCisgICAgWlx4ezEwMH0KKyAwOiBaCisgICAgXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBceHsxMDB9WgorIDA6IFx4ezEwMH0KKworL1tceHsxMDB9XHh7MjAwfV0vdXRmCisgICAgYWJceHsxMDB9Y2QKKyAwOiBceHsxMDB9CisgICAgYWJceHsyMDB9Y2QKKyAwOiBceHsyMDB9CisKKy9bXHh7MTAwfS1ceHsyMDB9XS91dGYKKyAgICBhYlx4ezEwMH1jZAorIDA6IFx4ezEwMH0KKyAgICBhYlx4ezIwMH1jZAorIDA6IFx4ezIwMH0KKyAgICBhYlx4ezExMX1jZAorIDA6IFx4ezExMX0KKworL1t6LVx4ezIwMH1dL3V0ZgorICAgIGFiXHh7MTAwfWNkCisgMDogXHh7MTAwfQorICAgIGFiXHh7MjAwfWNkCisgMDogXHh7MjAwfQorICAgIGFiXHh7MTExfWNkCisgMDogXHh7MTExfQorICAgIGFiemNkCisgMDogegorICAgIGFifGNkCisgMDogfAorCisvW1FceHsxMDB9XHh7MjAwfV0vdXRmCisgICAgYWJceHsxMDB9Y2QKKyAwOiBceHsxMDB9CisgICAgYWJceHsyMDB9Y2QKKyAwOiBceHsyMDB9CisgICAgUT8KKyAwOiBRCisKKy9bUVx4ezEwMH0tXHh7MjAwfV0vdXRmCisgICAgYWJceHsxMDB9Y2QKKyAwOiBceHsxMDB9CisgICAgYWJceHsyMDB9Y2QKKyAwOiBceHsyMDB9CisgICAgYWJceHsxMTF9Y2QKKyAwOiBceHsxMTF9CisgICAgUT8KKyAwOiBRCisKKy9bUXotXHh7MjAwfV0vdXRmCisgICAgYWJceHsxMDB9Y2QKKyAwOiBceHsxMDB9CisgICAgYWJceHsyMDB9Y2QKKyAwOiBceHsyMDB9CisgICAgYWJceHsxMTF9Y2QKKyAwOiBceHsxMTF9CisgICAgYWJ6Y2QKKyAwOiB6CisgICAgYWJ8Y2QKKyAwOiB8CisgICAgUT8KKyAwOiBRCisKKy9bXHh7MTAwfVx4ezIwMH1dezEsM30vdXRmCisgICAgYWJceHsxMDB9Y2QKKyAwOiBceHsxMDB9CisgICAgYWJceHsyMDB9Y2QKKyAwOiBceHsyMDB9CisgICAgYWJceHsyMDB9XHh7MTAwfVx4ezIwMH1ceHsxMDB9Y2QKKyAwOiBceHsyMDB9XHh7MTAwfVx4ezIwMH0KKworL1tceHsxMDB9XHh7MjAwfV17MSwzfT8vdXRmCisgICAgYWJceHsxMDB9Y2QKKyAwOiBceHsxMDB9CisgICAgYWJceHsyMDB9Y2QKKyAwOiBceHsyMDB9CisgICAgYWJceHsyMDB9XHh7MTAwfVx4ezIwMH1ceHsxMDB9Y2QKKyAwOiBceHsyMDB9CisKKy9bUVx4ezEwMH1ceHsyMDB9XXsxLDN9L3V0ZgorICAgIGFiXHh7MTAwfWNkCisgMDogXHh7MTAwfQorICAgIGFiXHh7MjAwfWNkCisgMDogXHh7MjAwfQorICAgIGFiXHh7MjAwfVx4ezEwMH1ceHsyMDB9XHh7MTAwfWNkCisgMDogXHh7MjAwfVx4ezEwMH1ceHsyMDB9CisKKy9bUVx4ezEwMH1ceHsyMDB9XXsxLDN9Py91dGYKKyAgICBhYlx4ezEwMH1jZAorIDA6IFx4ezEwMH0KKyAgICBhYlx4ezIwMH1jZAorIDA6IFx4ezIwMH0KKyAgICBhYlx4ezIwMH1ceHsxMDB9XHh7MjAwfVx4ezEwMH1jZAorIDA6IFx4ezIwMH0KKworLyg/PD1bXHh7MTAwfVx4ezIwMH1dKVgvdXRmCisgICAgYWJjXHh7MjAwfVgKKyAwOiBYCisgICAgYWJjXHh7MTAwfVgKKyAwOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorCisvKD88PVtRXHh7MTAwfVx4ezIwMH1dKVgvdXRmCisgICAgYWJjXHh7MjAwfVgKKyAwOiBYCisgICAgYWJjXHh7MTAwfVgKKyAwOiBYCisgICAgYWJRWAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisKKy8oPzw9W1x4ezEwMH1ceHsyMDB9XXszfSlYL3V0ZgorICAgIGFiY1x4ezEwMH1ceHsyMDB9XHh7MTAwfVgKKyAwOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNceHsyMDB9WAorTm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorCisvW15ceHsxMDB9XHh7MjAwfV1YL3V0ZgorICAgIEFYCisgMDogQVgKKyAgICBceHsxNTB9WAorIDA6IFx4ezE1MH1YCisgICAgXHh7NTAwfVgKKyAwOiBceHs1MDB9WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MTAwfVgKK05vIG1hdGNoCisgICAgXHh7MjAwfVgKK05vIG1hdGNoCisKKy9bXlFceHsxMDB9XHh7MjAwfV1YL3V0ZgorICAgIEFYCisgMDogQVgKKyAgICBceHsxNTB9WAorIDA6IFx4ezE1MH1YCisgICAgXHh7NTAwfVgKKyAwOiBceHs1MDB9WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MTAwfVgKK05vIG1hdGNoCisgICAgXHh7MjAwfVgKK05vIG1hdGNoCisgICAgUVgKK05vIG1hdGNoCisKKy9bXlx4ezEwMH0tXHh7MjAwfV1YL3V0ZgorICAgIEFYCisgMDogQVgKKyAgICBceHs1MDB9WAorIDA6IFx4ezUwMH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9WAorTm8gbWF0Y2gKKyAgICBceHsxNTB9WAorTm8gbWF0Y2gKKyAgICBceHsyMDB9WAorTm8gbWF0Y2gKKworL1t6LVx4ezEwMH1dL2ksdXRmCisgICAgegorIDA6IHoKKyAgICBaCisgMDogWgorICAgIFx4ezEwMH0KKyAwOiBceHsxMDB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDJ9CitObyBtYXRjaAorICAgIHkKK05vIG1hdGNoCisKKy9bXHhGRl0vCisgICAgPlx4ZmY8CisgMDogXHhmZgorCisvW1x4ZmZdL3V0ZgorICAgID5ceHtmZn08CisgMDogXHh7ZmZ9CisKKy9bXlx4RkZdLworICAgIFhZWgorIDA6IFgKKworL1teXHhmZl0vdXRmCisgICAgWFlaCisgMDogWAorICAgIFx4ezEyM30KKyAwOiBceHsxMjN9CisKKy9eW2FjXSpiL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgIHhiCitObyBtYXRjaAorCisvXlthY1x4ezEwMH1dKmIvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgeGIKK05vIG1hdGNoCisKKy9eW154XSpiL2ksdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgeGIKK05vIG1hdGNoCisKKy9eW154XSpiL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgIHhiCitObyBtYXRjaAorCisvXlxkKmIvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgeGIKK05vIG1hdGNoCisKKy8ofGEpL2csdXRmCisgICAgY2F0YWMKKyAwOiAKKyAxOiAKKyAwOiAKKyAxOiAKKyAwOiBhCisgMTogYQorIDA6IAorIDE6IAorIDA6IAorIDE6IAorIDA6IGEKKyAxOiBhCisgMDogCisgMTogCisgMDogCisgMTogCisgICAgYVx4ezI1Nn1hCisgMDogCisgMTogCisgMDogYQorIDE6IGEKKyAwOiAKKyAxOiAKKyAwOiAKKyAxOiAKKyAwOiBhCisgMTogYQorIDA6IAorIDE6IAorCisvXlx4ezg1fSQvaSx1dGYKKyAgICBceHs4NX0KKyAwOiBceHs4NX0KKworL17hiLQvdXRmCisgICAg4Yi0CisgMDogXHh7MTIzNH0KKworL15c4Yi0L3V0ZgorICAgIOGItAorIDA6IFx4ezEyMzR9CisKKyIoP3MpKC57MSw1fSkidXRmCisgICAgYWJjZGVmZworIDA6IGFiY2RlCisgMTogYWJjZGUKKyAgICBhYgorIDA6IGFiCisgMTogYWIKKworL2EqXHh7MTAwfSpcdy91dGYKKyAgICBhCisgMDogYQorCisvXFNcUy9nLHV0ZgorICAgIEFceHthM31CQworIDA6IEFceHthM30KKyAwOiBCQworCisvXFN7Mn0vZyx1dGYKKyAgICBBXHh7YTN9QkMKKyAwOiBBXHh7YTN9CisgMDogQkMKKworL1xXXFcvZyx1dGYKKyAgICArXHh7YTN9PT0KKyAwOiArXHh7YTN9CisgMDogPT0KKworL1xXezJ9L2csdXRmCisgICAgK1x4e2EzfT09CisgMDogK1x4e2EzfQorIDA6ID09CisKKy9cUy9nLHV0ZgorICAgIFx4ezQ0Mn1ceHs0MzV9XHh7NDQxfVx4ezQ0Mn0KKyAwOiBceHs0NDJ9CisgMDogXHh7NDM1fQorIDA6IFx4ezQ0MX0KKyAwOiBceHs0NDJ9CisKKy9bXFNdL2csdXRmCisgICAgXHh7NDQyfVx4ezQzNX1ceHs0NDF9XHh7NDQyfQorIDA6IFx4ezQ0Mn0KKyAwOiBceHs0MzV9CisgMDogXHh7NDQxfQorIDA6IFx4ezQ0Mn0KKworL1xEL2csdXRmCisgICAgXHh7NDQyfVx4ezQzNX1ceHs0NDF9XHh7NDQyfQorIDA6IFx4ezQ0Mn0KKyAwOiBceHs0MzV9CisgMDogXHh7NDQxfQorIDA6IFx4ezQ0Mn0KKworL1tcRF0vZyx1dGYKKyAgICBceHs0NDJ9XHh7NDM1fVx4ezQ0MX1ceHs0NDJ9CisgMDogXHh7NDQyfQorIDA6IFx4ezQzNX0KKyAwOiBceHs0NDF9CisgMDogXHh7NDQyfQorCisvXFcvZyx1dGYKKyAgICBceHsyNDQyfVx4ezI0MzV9XHh7MjQ0MX1ceHsyNDQyfQorIDA6IFx4ezI0NDJ9CisgMDogXHh7MjQzNX0KKyAwOiBceHsyNDQxfQorIDA6IFx4ezI0NDJ9CisKKy9bXFddL2csdXRmCisgICAgXHh7MjQ0Mn1ceHsyNDM1fVx4ezI0NDF9XHh7MjQ0Mn0KKyAwOiBceHsyNDQyfQorIDA6IFx4ezI0MzV9CisgMDogXHh7MjQ0MX0KKyAwOiBceHsyNDQyfQorCisvW1xTXHNdKi91dGYKKyAgICBhYmNcblxyXHh7NDQyfVx4ezQzNX1ceHs0NDF9XHh7NDQyfXh5egorIDA6IGFiY1x4ezBhfVx4ezBkfVx4ezQ0Mn1ceHs0MzV9XHh7NDQxfVx4ezQ0Mn14eXoKKworL1tceHs0MWZ9XFNdL2csdXRmCisgICAgXHh7NDQyfVx4ezQzNX1ceHs0NDF9XHh7NDQyfQorIDA6IFx4ezQ0Mn0KKyAwOiBceHs0MzV9CisgMDogXHh7NDQxfQorIDA6IFx4ezQ0Mn0KKworLy5bXlxTXS4vZyx1dGYKKyAgICBhYmMgZGVmXHh7NDQyfVx4ezQ0M314eXpcbnBxcgorIDA6IGMgZAorIDA6IHpceHswYX1wCisKKy8uW15cU1xuXS4vZyx1dGYKKyAgICBhYmMgZGVmXHh7NDQyfVx4ezQ0M314eXpcbnBxcgorIDA6IGMgZAorCisvW1s6XmFsbnVtOl1dL2csdXRmCisgICAgK1x4ezI0NDJ9CisgMDogKworIDA6IFx4ezI0NDJ9CisKKy9bWzpeYWxwaGE6XV0vZyx1dGYKKyAgICArXHh7MjQ0Mn0KKyAwOiArCisgMDogXHh7MjQ0Mn0KKworL1tbOl5hc2NpaTpdXS9nLHV0ZgorICAgIEFceHs0NDJ9CisgMDogXHh7NDQyfQorCisvW1s6XmJsYW5rOl1dL2csdXRmCisgICAgQVx4ezQ0Mn0KKyAwOiBBCisgMDogXHh7NDQyfQorCisvW1s6XmNudHJsOl1dL2csdXRmCisgICAgQVx4ezQ0Mn0KKyAwOiBBCisgMDogXHh7NDQyfQorCisvW1s6XmRpZ2l0Ol1dL2csdXRmCisgICAgQVx4ezQ0Mn0KKyAwOiBBCisgMDogXHh7NDQyfQorCisvW1s6XmdyYXBoOl1dL2csdXRmCisgICAgXHgxOVx4e2UwMWZmfQorIDA6IFx4ezE5fQorIDA6IFx4e2UwMWZmfQorCisvW1s6Xmxvd2VyOl1dL2csdXRmCisgICAgQVx4ezQyMn0KKyAwOiBBCisgMDogXHh7NDIyfQorCisvW1s6XnByaW50Ol1dL2csdXRmCisgICAgXHh7MTl9XHh7ZTAxZmZ9CisgMDogXHh7MTl9CisgMDogXHh7ZTAxZmZ9CisKKy9bWzpecHVuY3Q6XV0vZyx1dGYKKyAgICBBXHh7NDQyfQorIDA6IEEKKyAwOiBceHs0NDJ9CisKKy9bWzpec3BhY2U6XV0vZyx1dGYKKyAgICBBXHh7NDQyfQorIDA6IEEKKyAwOiBceHs0NDJ9CisKKy9bWzpedXBwZXI6XV0vZyx1dGYKKyAgICBhXHh7NDQyfQorIDA6IGEKKyAwOiBceHs0NDJ9CisKKy9bWzped29yZDpdXS9nLHV0ZgorICAgICtceHsyNDQyfQorIDA6ICsKKyAwOiBceHsyNDQyfQorCisvW1s6XnhkaWdpdDpdXS9nLHV0ZgorICAgIE1ceHs0NDJ9CisgMDogTQorIDA6IFx4ezQ0Mn0KKworL1teQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVrDgMOBw4LDg8OEw4XDhsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5jDmcOaw5vDnMOdw57EgMSCxITEhsSIxIrEjMSOxJDEksSUxJbEmMSaxJzEnsSgxKLEpMSmxKjEqsSsxK7EsMSyxLTEtsS5xLvEvcS/xYHFg8WFxYfFisWMxY7FkMWSxZTFlsWYxZrFnMWexaDFosWkxabFqMWqxazFrsWwxbLFtMW2xbjFucW7xb3GgcaCxoTGhsaHxonGisaLxo7Gj8aQxpHGk8aUxpbGl8aYxpzGncafxqDGosakxqbGp8apxqzGrsavxrHGssazxrXGt8a4xrzHhMeHx4rHjcePx5HHk8eVx5fHmcebx57HoMeix6THpseox6rHrMeux7HHtMe2x7fHuMe6x7zHvsiAyILIhMiGyIjIisiMyI7IkMiSyJTIlsiYyJrInMieyKDIosikyKbIqMiqyKzIrsiwyLLIusi7yL3IvsmBzobOiM6JzorOjM6Ozo/Okc6SzpPOlM6VzpbOl86YzpnOms6bzpzOnc6ezp/OoM6hzqPOpM6lzqbOp86ozqnOqs6rz5LPk8+Uz5jPms+cz57PoM+iz6TPps+oz6rPrM+uz7TPt8+5z7rPvc++z7/QgNCB0ILQg9CE0IXQhtCH0IjQidCK0IvQjNCN0I7Qj9CQ0JHQktCT0JTQldCW0JfQmNCZ0JrQm9Cc0J3QntCf0KDQodCi0KPQpNCl0KbQp9Co0KnQqtCr0KzQrdCu0K/RoNGi0aTRptGo0arRrNGu0bDRstG00bbRuNG60bzRvtKA0orSjNKO0pDSktKU0pbSmNKa0pzSntKg0qLSpNKm0qjSqtKs0q7SsNKy0rTSttK40rrSvNK+04DTgdOD04XTh9OJ04vTjdOQ05LTlNOW05jTmtOc057ToNOi06TTptOo06rTrNOu07DTstO007bTuNSA1ILUhNSG1IjUitSM1I7UsdSy1LPUtNS11LbUt9S41LnUutS71LzUvdS+1L/VgNWB1YLVg9WE1YXVhtWH1YjVidWK1YvVjNWN1Y7Vj9WQ1ZHVktWT1ZTVldWW4YKg4YKh4YKi4YKj4YKk4YKl4YKm4YKn4YKo4YKp4YKq4YKr4YKs4YKt4YKu4YKv4YKw4YKx4YKy4YKz4YK04YK14YK24YK34YK44YK54YK64YK74YK84YK94YK+4YK/4YOA4YOB4YOC4YOD4YOE4YOF4biA4biC4biE4biG4biI4biK4biM4biO4biQ4biS4biU4biW4biY4bia4bic4bie4big4bii4bik4bim4bio4biq4bis4biu4biw4biy4bi04bi24bi44bi64bi84bi+4bmA4bmC4bmE4bmG4bmI4bmK4bmM4bmO4bmQ4bmS4bmU4bmW4bmY4bma4bmc4bme4bmg4bmi4bmk4bmm4bmo4bmq4bms4bmu4bmw4bmy4bm04bm24bm44bm64bm84bm+4bqA4bqC4bqE4bqG4bqI4bqK4bqM4bqO4bqQ4bqS4bqU4bqg4bqi4bqk4bqm4bqo4bqq4bqs4bqu4bqw4bqy4bq04bq24bq44bq64bq84bq+4buA4buC4buE4buG4buI4buK4buM4buO4buQ4buS4buU4buW4buY4bua4buc4bue4bug4bui4buk4bum4buo4buq4bus4buu4buw4buy4bu04bu24bu44byI4byJ4byK4byL4byM4byN4byO4byP4byY4byZ4bya4byb4byc4byd4byo4byp4byq4byr4bys4byt4byu4byv4by44by54by64by74by84by94by+4by/4b2I4b2J4b2K4b2L4b2M4b2N4b2Z4b2b4b2d4b2f4b2o4b2p4b2q4b2r4b2s4b2t4b2u4b2v4b644b654b664b674b+I4b+J4b+K4b+L4b+Y4b+Z4b+a4b+b4b+o4b+p4b+q4b+r4b+s4b+44b+54b+64b+7YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXrCqsK1wrrDn8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDuMO5w7rDu8O8w73DvsO/xIHEg8SFxIfEicSLxI3Ej8SRxJPElcSXxJnEm8SdxJ/EocSjxKXEp8SpxKvErcSvxLHEs8S1xLfEuMS6xLzEvsWAxYLFhMWGxYjFicWLxY3Fj8WRxZPFlcWXxZnFm8WdxZ/FocWjxaXFp8WpxavFrcWvxbHFs8W1xbfFusW8xb7Fv8aAxoPGhcaIxozGjcaSxpXGmcaaxpvGnsahxqPGpcaoxqrGq8atxrDGtMa2xrnGusa9xr7Gv8eGx4nHjMeOx5DHkseUx5bHmMeax5zHncefx6HHo8elx6fHqcerx63Hr8ewx7PHtce5x7vHvce/yIHIg8iFyIfIiciLyI3Ij8iRyJPIlciXyJnIm8idyJ/IocijyKXIp8ipyKvIrcivyLHIs8i0yLXItsi3yLjIuci8yL/JgMmQyZHJksmTyZTJlcmWyZfJmMmZyZrJm8mcyZ3JnsmfyaDJocmiyaPJpMmlyabJp8moyanJqsmryazJrcmuya/JsMmxybLJs8m0ybXJtsm3ybjJucm6ybvJvMm9yb7Jv8qAyoHKgsqDyoTKhcqGyofKiMqJyorKi8qMyo3KjsqPypDKkcqSypPKlMqVypbKl8qYypnKmsqbypzKncqeyp/KoMqhyqLKo8qkyqXKpsqnyqjKqcqqyqvKrMqtyq7Kr86QzqzOrc6uzq/OsM6xzrLOs860zrXOts63zrjOuc66zrvOvM69zr7Ov8+Az4HPgs+Dz4TPhc+Gz4fPiM+Jz4rPi8+Mz43Pjs+Qz5HPlc+Wz5fPmc+bz53Pn8+hz6PPpc+nz6nPq8+tz6/PsM+xz7LPs8+1z7jPu8+80LDQsdCy0LPQtNC10LbQt9C40LnQutC70LzQvdC+0L/RgNGB0YLRg9GE0YXRhtGH0YjRidGK0YvRjNGN0Y7Rj9GQ0ZHRktGT0ZTRldGW0ZfRmNGZ0ZrRm9Gc0Z3RntGf0aHRo9Gl0afRqdGr0a3Rr9Gx0bPRtdG30bnRu9G90b/SgdKL0o3Sj9KR0pPSldKX0pnSm9Kd0p/SodKj0qXSp9Kp0qvSrdKv0rHSs9K10rfSudK70r3Sv9OC04TThtOI04rTjNOO05HTk9OV05fTmdOb053Tn9Oh06PTpdOn06nTq9Ot06/TsdOz07XTt9O51IHUg9SF1IfUidSL1I3Uj9Wh1aLVo9Wk1aXVptWn1ajVqdWq1avVrNWt1a7Vr9Ww1bHVstWz1bTVtdW21bfVuNW51brVu9W81b3VvtW/1oDWgdaC1oPWhNaF1obWh+G0gOG0geG0guG0g+G0hOG0heG0huG0h+G0iOG0ieG0iuG0i+G0jOG0jeG0juG0j+G0kOG0keG0kuG0k+G0lOG0leG0luG0l+G0mOG0meG0muG0m+G0nOG0neG0nuG0n+G0oOG0oeG0ouG0o+G0pOG0peG0puG0p+G0qOG0qeG0quG0q+G1ouG1o+G1pOG1peG1puG1p+G1qOG1qeG1quG1q+G1rOG1reG1ruG1r+G1sOG1seG1suG1s+G1tOG1teG1tuG1t+G1ueG1uuG1u+G1vOG1veG1vuG1v+G2gOG2geG2guG2g+G2hOG2heG2huG2h+G2iOG2ieG2iuG2i+G2jOG2jeG2juG2j+G2kOG2keG2kuG2k+G2lOG2leG2luG2l+G2mOG2meG2muG4geG4g+G4heG4h+G4ieG4i+G4jeG4j+G4keG4k+G4leG4l+G4meG4m+G4neG4n+G4oeG4o+G4peG4p+G4qeG4q+G4reG4r+G4seG4s+G4teG4t+G4ueG4u+G4veG4v+G5geG5g+G5heG5h+G5ieG5i+G5jeG5j+G5keG5k+G5leG5l+G5meG5m+G5neG5n+G5oeG5o+G5peG5p+G5qeG5q+G5reG5r+G5seG5s+G5teG5t+G5ueG5u+G5veG5v+G6geG6g+G6heG6h+G6ieG6i+G6jeG6j+G6keG6k+G6leG6luG6l+G6mOG6meG6muG6m+G6oeG6o+G6peG6p+G6qeG6q+G6reG6r+G6seG6s+G6teG6t+G6ueG6u+G6veG6v+G7geG7g+G7heG7h+G7ieG7i+G7jeG7j+G7keG7k+G7leG7l+G7meG7m+G7neG7n+G7oeG7o+G7peG7p+G7qeG7q+G7reG7r+G7seG7s+G7teG7t+G7ueG8gOG8geG8guG8g+G8hOG8heG8huG8h+G8kOG8keG8kuG8k+G8lOG8leG8oOG8oeG8ouG8o+G8pOG8peG8puG8p+G8sOG8seG8suG8s+G8tOG8teG8tuG8t+G9gOG9geG9guG9g+G9hOG9heG9kOG9keG9kuG9k+G9lOG9leG9luG9l+G9oOG9oeG9ouG9o+G9pOG9peG9puG9p+G9sOG9seG9suG9s+G9tOG9teG9tuG9t+G9uOG9ueG9uuG9u+G9vOG9veG+gOG+geG+guG+g+G+hOG+heG+huG+h+G+kOG+keG+kuG+k+G+lOG+leG+luG+l+G+oOG+oeG+ouG+o+G+pOG+peG+puG+p+G+sOG+seG+suG+s+G+tOG+tuG+t+G+vuG/guG/g+G/hOG/huG/h+G/kOG/keG/kuG/k+G/luG/l+G/oOG/oeG/ouG/o+G/pOG/peG/puG/p+G/suG/s+G/tOG/tuG/t+KygeKyg+KyheKyh+KyieKyi+KyjeKyj+KykeKyk+KyleKyl+KymeKym+KyneKyn+KyoeKyo+KypeKyp+KyqeKyq+KyreKyr+KyseKys+KyteKyt+KyueKyu+KyveKyv+KzgeKzg+KzheKzh+KzieKzi+KzjeKzj+KzkeKzk+KzleKzl+KzmeKzm+KzneKzn+KzoeKzo+KzpOK0gOK0geK0guK0g+K0hOK0heK0huK0h+K0iOK0ieK0iuK0i+K0jOK0jeK0juK0j+K0kOK0keK0kuK0k+K0lOK0leK0luK0l+K0mOK0meK0muK0m+K0nOK0neK0nuK0n+K0oOK0oeK0ouK0o+K0pOK0pe+sgO+sge+sgu+sg++shO+she+shu+sk++slO+sle+slu+sl1xkLV9eXS91dGYKKworL15bXmRdKj8kLworICAgIGFiYworIDA6IGFiYworCisvXlteZF0qPyQvdXRmCisgICAgYWJjCisgMDogYWJjCisKKy9eW15kXSo/JC9pCisgICAgYWJjCisgMDogYWJjCisKKy9eW15kXSo/JC9pLHV0ZgorICAgIGFiYworIDA6IGFiYworCisvKD9pKVtceGMzXHhhOVx4YzNceGJkXXxbXHhjM1x4YTlceGMzXHhiZEFdL3V0ZgorCisvXlthXHh7YzB9XWIvdXRmCisgICAgXHh7YzB9YgorIDA6IFx4e2MwfWIKKworL14oW2FceHtjMH1dKj8pYWEvdXRmCisgICAgYVx4e2MwfWFhYWEvCisgMDogYVx4e2MwfWFhCisgMTogYVx4e2MwfQorCisvXihbYVx4e2MwfV0qPylhYS91dGYKKyAgICBhXHh7YzB9YWFhYS8KKyAwOiBhXHh7YzB9YWEKKyAxOiBhXHh7YzB9CisgICAgYVx4e2MwfWFceHtjMH1hYWEvCisgMDogYVx4e2MwfWFceHtjMH1hYQorIDE6IGFceHtjMH1hXHh7YzB9CisKKy9eKFthXHh7YzB9XSopYWEvdXRmCisgICAgYVx4e2MwfWFhYWEvCisgMDogYVx4e2MwfWFhYWEKKyAxOiBhXHh7YzB9YWEKKyAgICBhXHh7YzB9YVx4e2MwfWFhYS8KKyAwOiBhXHh7YzB9YVx4e2MwfWFhYQorIDE6IGFceHtjMH1hXHh7YzB9YQorCisvXihbYVx4e2MwfV0qKWFceHtjMH0vdXRmCisgICAgYVx4e2MwfWFhYWEvCisgMDogYVx4e2MwfQorIDE6IAorICAgIGFceHtjMH1hXHh7YzB9YWFhLworIDA6IGFceHtjMH1hXHh7YzB9CisgMTogYVx4e2MwfQorCisvQSovZyx1dGYKKyAgICBBQUJceHsxMjN9QkFBCisgMDogQUEKKyAwOiAKKyAwOiAKKyAwOiAKKyAwOiBBQQorIDA6IAorCisvKGFiYylcMS9pLHV0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICBhYmMKK05vIG1hdGNoCisKKy8oYWJjKVwxL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICBhYmMKK05vIG1hdGNoCisKKy9hKCo6YVx4ezEyMzR9YikvdXRmLG1hcmsKKyAgICBhYmMKKyAwOiBhCitNSzogYVx4ezEyMzR9YgorCisvYSgqOmHCo2IpL3V0ZixtYXJrCisgICAgYWJjCisgMDogYQorTUs6IGFceHthM31iCisKKyMgTm9uY2hhcmFjdGVycworCisvLi91dGYKKyAgICBceHtmZmZlfQorIDA6IFx4e2ZmZmV9CisgICAgXHh7ZmZmZn0KKyAwOiBceHtmZmZmfQorICAgIFx4ezFmZmZlfQorIDA6IFx4ezFmZmZlfQorICAgIFx4ezFmZmZmfQorIDA6IFx4ezFmZmZmfQorICAgIFx4ezJmZmZlfQorIDA6IFx4ezJmZmZlfQorICAgIFx4ezJmZmZmfQorIDA6IFx4ezJmZmZmfQorICAgIFx4ezNmZmZlfQorIDA6IFx4ezNmZmZlfQorICAgIFx4ezNmZmZmfQorIDA6IFx4ezNmZmZmfQorICAgIFx4ezRmZmZlfQorIDA6IFx4ezRmZmZlfQorICAgIFx4ezRmZmZmfQorIDA6IFx4ezRmZmZmfQorICAgIFx4ezVmZmZlfQorIDA6IFx4ezVmZmZlfQorICAgIFx4ezVmZmZmfQorIDA6IFx4ezVmZmZmfQorICAgIFx4ezZmZmZlfQorIDA6IFx4ezZmZmZlfQorICAgIFx4ezZmZmZmfQorIDA6IFx4ezZmZmZmfQorICAgIFx4ezdmZmZlfQorIDA6IFx4ezdmZmZlfQorICAgIFx4ezdmZmZmfQorIDA6IFx4ezdmZmZmfQorICAgIFx4ezhmZmZlfQorIDA6IFx4ezhmZmZlfQorICAgIFx4ezhmZmZmfQorIDA6IFx4ezhmZmZmfQorICAgIFx4ezlmZmZlfQorIDA6IFx4ezlmZmZlfQorICAgIFx4ezlmZmZmfQorIDA6IFx4ezlmZmZmfQorICAgIFx4e2FmZmZlfQorIDA6IFx4e2FmZmZlfQorICAgIFx4e2FmZmZmfQorIDA6IFx4e2FmZmZmfQorICAgIFx4e2JmZmZlfQorIDA6IFx4e2JmZmZlfQorICAgIFx4e2JmZmZmfQorIDA6IFx4e2JmZmZmfQorICAgIFx4e2NmZmZlfQorIDA6IFx4e2NmZmZlfQorICAgIFx4e2NmZmZmfQorIDA6IFx4e2NmZmZmfQorICAgIFx4e2RmZmZlfQorIDA6IFx4e2RmZmZlfQorICAgIFx4e2RmZmZmfQorIDA6IFx4e2RmZmZmfQorICAgIFx4e2VmZmZlfQorIDA6IFx4e2VmZmZlfQorICAgIFx4e2VmZmZmfQorIDA6IFx4e2VmZmZmfQorICAgIFx4e2ZmZmZlfQorIDA6IFx4e2ZmZmZlfQorICAgIFx4e2ZmZmZmfQorIDA6IFx4e2ZmZmZmfQorICAgIFx4ezEwZmZmZX0KKyAwOiBceHsxMGZmZmV9CisgICAgXHh7MTBmZmZmfQorIDA6IFx4ezEwZmZmZn0KKyAgICBceHtmZGQwfQorIDA6IFx4e2ZkZDB9CisgICAgXHh7ZmRkMX0KKyAwOiBceHtmZGQxfQorICAgIFx4e2ZkZDJ9CisgMDogXHh7ZmRkMn0KKyAgICBceHtmZGQzfQorIDA6IFx4e2ZkZDN9CisgICAgXHh7ZmRkNH0KKyAwOiBceHtmZGQ0fQorICAgIFx4e2ZkZDV9CisgMDogXHh7ZmRkNX0KKyAgICBceHtmZGQ2fQorIDA6IFx4e2ZkZDZ9CisgICAgXHh7ZmRkN30KKyAwOiBceHtmZGQ3fQorICAgIFx4e2ZkZDh9CisgMDogXHh7ZmRkOH0KKyAgICBceHtmZGQ5fQorIDA6IFx4e2ZkZDl9CisgICAgXHh7ZmRkYX0KKyAwOiBceHtmZGRhfQorICAgIFx4e2ZkZGJ9CisgMDogXHh7ZmRkYn0KKyAgICBceHtmZGRjfQorIDA6IFx4e2ZkZGN9CisgICAgXHh7ZmRkZH0KKyAwOiBceHtmZGRkfQorICAgIFx4e2ZkZGV9CisgMDogXHh7ZmRkZX0KKyAgICBceHtmZGRmfQorIDA6IFx4e2ZkZGZ9CisgICAgXHh7ZmRlMH0KKyAwOiBceHtmZGUwfQorICAgIFx4e2ZkZTF9CisgMDogXHh7ZmRlMX0KKyAgICBceHtmZGUyfQorIDA6IFx4e2ZkZTJ9CisgICAgXHh7ZmRlM30KKyAwOiBceHtmZGUzfQorICAgIFx4e2ZkZTR9CisgMDogXHh7ZmRlNH0KKyAgICBceHtmZGU1fQorIDA6IFx4e2ZkZTV9CisgICAgXHh7ZmRlNn0KKyAwOiBceHtmZGU2fQorICAgIFx4e2ZkZTd9CisgMDogXHh7ZmRlN30KKyAgICBceHtmZGU4fQorIDA6IFx4e2ZkZTh9CisgICAgXHh7ZmRlOX0KKyAwOiBceHtmZGU5fQorICAgIFx4e2ZkZWF9CisgMDogXHh7ZmRlYX0KKyAgICBceHtmZGVifQorIDA6IFx4e2ZkZWJ9CisgICAgXHh7ZmRlY30KKyAwOiBceHtmZGVjfQorICAgIFx4e2ZkZWR9CisgMDogXHh7ZmRlZH0KKyAgICBceHtmZGVlfQorIDA6IFx4e2ZkZWV9CisgICAgXHh7ZmRlZn0KKyAwOiBceHtmZGVmfQorCisvXlxkKlx3ezR9L3V0ZgorICAgIDEyMzQKKyAwOiAxMjM0CitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIDEyMworTm8gbWF0Y2gKKworL15bXmJdKlx3ezR9L3V0ZgorICAgIGFhYWEKKyAwOiBhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIGFhYQorTm8gbWF0Y2gKKworL15bXmJdKlx3ezR9L2ksdXRmCisgICAgYWFhYQorIDA6IGFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgYWFhCitObyBtYXRjaAorCisvXlx4ezEwMH0qLns0fS91dGYKKyAgICBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisgMDogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfQorXD0gRXhwZWN0IG5vIG1hdGNoICAgICAKKyAgICBceHsxMDB9XHh7MTAwfVx4ezEwMH0KK05vIG1hdGNoCisKKy9eXHh7MTAwfSouezR9L2ksdXRmCisgICAgXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfQorIDA6IFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgXHh7MTAwfVx4ezEwMH1ceHsxMDB9CitObyBtYXRjaAorCisvXmErW2FceHsyMDB9XS91dGYKKyAgICBhYQorIDA6IGFhCisKKy9eLlxCLlxCLi91dGYKKyAgICBceHsxMDEyM31ceHsxMDEyNH1ceHsxMDEyNX0KKyAwOiBceHsxMDEyM31ceHsxMDEyNH1ceHsxMDEyNX0KKworL14jW15ceHtmZmZmfV0jW15ceHtmZmZmfV0jW15ceHtmZmZmfV0jL3V0ZgorICAgICNceHsxMDAwMH0jXHh7MTAwfSNceHsxMGZmZmZ9IworIDA6ICNceHsxMDAwMH0jXHh7MTAwfSNceHsxMGZmZmZ9IworICAgIAorIyBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQgdGVzdHMgCisKKy9eXHBDXHBMXHBNXHBOXHBQXHBTXHBaPC91dGYKKyAgICBceDdmXHh7YzB9XHh7MzBmfVx4ezY2MH1ceHs2NmN9XHh7ZjAxfVx4ezE2ODB9PAorIDA6IFx4ezdmfVx4e2MwfVx4ezMwZn1ceHs2NjB9XHh7NjZjfVx4e2YwMX1ceHsxNjgwfTwKKyAgICBcbnBceHszMDB9OSFcJCA8IAorIDA6IFx4ezBhfXBceHszMDB9OSEkIDwKK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgYXBceHszMDB9OSFcJCA8IAorTm8gbWF0Y2gKKyAgCisvXlxQQy91dGYKKyAgICBYCisgMDogWAorXD0gRXhwZWN0IG5vIG1hdGNoICAgICAKKyAgICBceDdmCitObyBtYXRjaAorICAKKy9eXFBML3V0ZgorICAgIDkKKyAwOiA5CitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIFx4e2MwfQorTm8gbWF0Y2gKKyAgCisvXlxQTS91dGYKKyAgICBYCisgMDogWAorXD0gRXhwZWN0IG5vIG1hdGNoICAgICAKKyAgICBceHszMGZ9CitObyBtYXRjaAorICAKKy9eXFBOL3V0ZgorICAgIFgKKyAwOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgIAorICAgIFx4ezY2MH0KK05vIG1hdGNoCisgIAorL15cUFAvdXRmCisgICAgWAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBceHs2NmN9CitObyBtYXRjaAorICAKKy9eXFBTL3V0ZgorICAgIFgKKyAwOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgXHh7ZjAxfQorTm8gbWF0Y2gKKyAgCisvXlxQWi91dGYKKyAgICBYCisgMDogWAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFx4ezE2ODB9CitObyBtYXRjaAorICAgIAorL15ccHtDY30vdXRmCisgICAgXHh7MDE3fQorIDA6IFx4ezE3fQorICAgIFx4ezA5Zn0gCisgMDogXHh7OWZ9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHswNjAwfSAKK05vIG1hdGNoCisgIAorL15ccHtDZn0vdXRmCisgICAgXHh7NjAxfQorIDA6IFx4ezYwMX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezA5Zn0gCitObyBtYXRjaAorICAKKy9eXHB7Q259L3V0ZgorICAgIFx4e2UwMDAwfQorIDA6IFx4e2UwMDAwfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MDlmfSAKK05vIG1hdGNoCisgIAorL15ccHtDb30vdXRmCisgICAgXHh7ZjhmZn0KKyAwOiBceHtmOGZmfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MDlmfSAKK05vIG1hdGNoCisgIAorL15ccHtMbH0vdXRmCisgICAgYQorIDA6IGEKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBaCitObyBtYXRjaAorICAgIFx4e2UwMDB9ICAKK05vIG1hdGNoCisgIAorL15ccHtMbX0vdXRmCisgICAgXHh7MmIwfQorIDA6IFx4ezJiMH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEgCitObyBtYXRjaAorICAKKy9eXHB7TG99L3V0ZgorICAgIFx4ezFiYn0KKyAwOiBceHsxYmJ9CisgICAgXHh7MzQwMH0KKyAwOiBceHszNDAwfQorICAgIFx4ezM0MDF9CisgMDogXHh7MzQwMX0KKyAgICBceHs0ZDAwfQorIDA6IFx4ezRkMDB9CisgICAgXHh7NGRiNH0KKyAwOiBceHs0ZGI0fQorICAgIFx4ezRkYjV9ICAgICAKKyAwOiBceHs0ZGI1fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYSAKK05vIG1hdGNoCisgICAgXHh7MmIwfQorTm8gbWF0Y2gKKyAgICBceHs0ZGI2fSAKK05vIG1hdGNoCisgIAorL15ccHtMdH0vdXRmCisgICAgXHh7MWM1fQorIDA6IFx4ezFjNX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEgCitObyBtYXRjaAorICAgIFx4ezJiMH0KK05vIG1hdGNoCisgIAorL15ccHtMdX0vdXRmCisgICAgQQorIDA6IEEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezJiMH0KK05vIG1hdGNoCisgIAorL15ccHtNY30vdXRmCisgICAgXHh7OTAzfQorIDA6IFx4ezkwM30KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgXHh7MzAwfQorTm8gbWF0Y2gKKyAgICAgICAKKy9eXHB7TWV9L3V0ZgorICAgIFx4ezQ4OH0KKyAwOiBceHs0ODh9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgIFx4ezkwM30KK05vIG1hdGNoCisgICAgXHh7MzAwfQorTm8gbWF0Y2gKKyAgCisvXlxwe01ufS91dGYKKyAgICBceHszMDB9CisgMDogXHh7MzAwfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHs5MDN9CitObyBtYXRjaAorICAKKy9eXHB7TmR9Ky91dGYKKyAgICAwMTIzNDU2Nzg5XHh7NjYwfVx4ezY2MX1ceHs2NjJ9XHh7NjYzfVx4ezY2NH1ceHs2NjV9XHh7NjY2fVx4ezY2N31ceHs2Njh9XHh7NjY5fVx4ezY2YX0KKyAwOiAwMTIzNDU2Nzg5XHh7NjYwfVx4ezY2MX1ceHs2NjJ9XHh7NjYzfVx4ezY2NH1ceHs2NjV9XHh7NjY2fVx4ezY2N31ceHs2Njh9XHh7NjY5fQorICAgIFx4ezZmMH1ceHs2ZjF9XHh7NmYyfVx4ezZmM31ceHs2ZjR9XHh7NmY1fVx4ezZmNn1ceHs2Zjd9XHh7NmY4fVx4ezZmOX1ceHs2ZmF9CisgMDogXHh7NmYwfVx4ezZmMX1ceHs2ZjJ9XHh7NmYzfVx4ezZmNH1ceHs2ZjV9XHh7NmY2fVx4ezZmN31ceHs2Zjh9XHh7NmY5fQorICAgIFx4ezk2Nn1ceHs5Njd9XHh7OTY4fVx4ezk2OX1ceHs5NmF9XHh7OTZifVx4ezk2Y31ceHs5NmR9XHh7OTZlfVx4ezk2Zn1ceHs5NzB9CisgMDogXHh7OTY2fVx4ezk2N31ceHs5Njh9XHh7OTY5fVx4ezk2YX1ceHs5NmJ9XHh7OTZjfVx4ezk2ZH1ceHs5NmV9XHh7OTZmfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgCisvXlxwe05sfS91dGYKKyAgICBceHsxNmVlfQorIDA6IFx4ezE2ZWV9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgIFx4ezk2Nn0KK05vIG1hdGNoCisgIAorL15ccHtOb30vdXRmCisgICAgXHh7YjJ9CisgMDogXHh7YjJ9CisgICAgXHh7YjN9CisgMDogXHh7YjN9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgIFx4ezE2ZWV9CitObyBtYXRjaAorICAKKy9eXHB7UGN9L3V0ZgorICAgIFx4NWYKKyAwOiBfCisgICAgXHh7MjAzZn0KKyAwOiBceHsyMDNmfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICAtCitObyBtYXRjaAorICAgIFx4ezU4YX0KK05vIG1hdGNoCisgIAorL15ccHtQZH0vdXRmCisgICAgLQorIDA6IC0KKyAgICBceHs1OGF9CisgMDogXHh7NThhfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHsyMDNmfQorTm8gbWF0Y2gKKyAgCisvXlxwe1BlfS91dGYKKyAgICApCisgMDogKQorICAgIF0KKyAwOiBdCisgICAgfQorIDA6IH0KKyAgICBceHtmM2J9CisgMDogXHh7ZjNifQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHsyMDNmfQorTm8gbWF0Y2gKKyAgICAoCitObyBtYXRjaAorICAgIFsKK05vIG1hdGNoCisgICAgeworTm8gbWF0Y2gKKyAgICBceHtmM2N9CitObyBtYXRjaAorICAKKy9eXHB7UGZ9L3V0ZgorICAgIFx4e2JifQorIDA6IFx4e2JifQorICAgIFx4ezIwMTl9CisgMDogXHh7MjAxOX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgXHh7MjAzZn0KK05vIG1hdGNoCisgIAorL15ccHtQaX0vdXRmCisgICAgXHh7YWJ9CisgMDogXHh7YWJ9CisgICAgXHh7MjAxOH0KKyAwOiBceHsyMDE4fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHsyMDNmfQorTm8gbWF0Y2gKKyAgCisvXlxwe1BvfS91dGYKKyAgICAhCisgMDogIQorICAgIFx4ezM3ZX0KKyAwOiBceHszN2V9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgIFx4ezIwM2Z9CitObyBtYXRjaAorICAKKy9eXHB7UHN9L3V0ZgorICAgICgKKyAwOiAoCisgICAgWworIDA6IFsKKyAgICB7CisgMDogeworICAgIFx4e2YzY30KKyAwOiBceHtmM2N9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgICkKK05vIG1hdGNoCisgICAgXQorTm8gbWF0Y2gKKyAgICB9CitObyBtYXRjaAorICAgIFx4e2YzYn0KK05vIG1hdGNoCisgIAorL15ccHtTa30vdXRmCisgICAgXHh7MmMyfQorIDA6IFx4ezJjMn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgXHh7OWYyfQorTm8gbWF0Y2gKKyAgCisvXlxwe1NtfSsvdXRmCisgICAgKzx8flx4e2FjfVx4ezIwNDR9CisgMDogKzx8flx4e2FjfVx4ezIwNDR9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgIFx4ezlmMn0KK05vIG1hdGNoCisgIAorL15ccHtTb30vdXRmCisgICAgXHh7YTZ9CisgMDogXHh7YTZ9CisgICAgXHh7NDgyfSAKKyAwOiBceHs0ODJ9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgIFx4ezlmMn0KK05vIG1hdGNoCisgIAorL15ccHtabH0vdXRmCisgICAgXHh7MjAyOH0KKyAwOiBceHsyMDI4fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHsyMDI5fQorTm8gbWF0Y2gKKyAgCisvXlxwe1pwfS91dGYKKyAgICBceHsyMDI5fQorIDA6IFx4ezIwMjl9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgIFx4ezIwMjh9CitObyBtYXRjaAorICAKKy9ccHtOZH0rKC4uKS91dGYKKyAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAwOiBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQgorIDE6IEFCCisgIAorL1xwe05kfSs/KC4uKS91dGYKKyAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAwOiBceHs2NjB9XHh7NjYxfVx4ezY2Mn0KKyAxOiBceHs2NjF9XHh7NjYyfQorICAKKy9ccHtOZH17Mix9KC4uKS91dGYKKyAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAwOiBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQgorIDE6IEFCCisgIAorL1xwe05kfXsyLH0/KC4uKS91dGYKKyAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAwOiBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BCisgMTogXHh7NjYyfUEKKyAgCisvXHB7TmR9KiguLikvdXRmCisgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgMDogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUIKKyAxOiBBQgorICAKKy9ccHtOZH0qPyguLikvdXRmCisgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgMDogXHh7NjYwfVx4ezY2MX0KKyAxOiBceHs2NjB9XHh7NjYxfQorICAKKy9ccHtOZH17Mn0oLi4pL3V0ZgorICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworIDA6IFx4ezY2MH1ceHs2NjF9XHh7NjYyfUEKKyAxOiBceHs2NjJ9QQorICAKKy9ccHtOZH17MiwzfSguLikvdXRmCisgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgMDogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUIKKyAxOiBBQgorICAKKy9ccHtOZH17MiwzfT8oLi4pL3V0ZgorICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworIDA6IFx4ezY2MH1ceHs2NjF9XHh7NjYyfUEKKyAxOiBceHs2NjJ9QQorICAKKy9ccHtOZH0/KC4uKS91dGYKKyAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAwOiBceHs2NjB9XHh7NjYxfVx4ezY2Mn0KKyAxOiBceHs2NjF9XHh7NjYyfQorICAKKy9ccHtOZH0/PyguLikvdXRmCisgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgMDogXHh7NjYwfVx4ezY2MX0KKyAxOiBceHs2NjB9XHh7NjYxfQorICAKKy9ccHtOZH0qKyguLikvdXRmCisgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgMDogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUIKKyAxOiBBQgorICAKKy9ccHtOZH0qKyguLi4pL3V0ZgorICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworIDA6IFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworIDE6IEFCQworICAKKy9ccHtOZH0qKyguLi4uKS91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworTm8gbWF0Y2gKKyAgCisvKD88PUFccHtOZH0pWFlaL3V0ZgorICAgIEEyWFlaCisgMDogWFlaCisgICAgMTIzQTVYWVpQUVIKKyAwOiBYWVoKKyAgICBBQkFceHs2NjB9WFlacHFyCisgMDogWFlaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWFlaCitObyBtYXRjaAorICAgIFhZWiAgICAgCitObyBtYXRjaAorICAgIAorLyg/PCFccEwpWFlaL3V0ZgorICAgIDFYWVoKKyAwOiBYWVoKKyAgICBBQj1YWVouLiAKKyAwOiBYWVoKKyAgICBYWVogCisgMDogWFlaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBXWFlaIAorTm8gbWF0Y2gKKworL1tcUHtOZH1dKy91dGYKKyAgICBhYmNkCisgMDogYWJjZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNAorTm8gbWF0Y2gKKworL1xEKy91dGYKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDA6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorTm8gbWF0Y2gKKyAgICAgCisvXFB7TmR9Ky91dGYKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDA6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorTm8gbWF0Y2gKKworL1tcRF0rL3V0ZgorICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgMDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitObyBtYXRjaAorCisvW1xQe05kfV0rL3V0ZgorICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgMDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitObyBtYXRjaAorCisvW1xEXFB7TmR9XSsvdXRmCisgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAwOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK05vIG1hdGNoCisKKy9ccEwvdXRmCisgICAgYQorIDA6IGEKKyAgICBBIAorIDA6IEEKKworL1xwTC9pLHV0ZgorICAgIGEKKyAwOiBhCisgICAgQSAKKyAwOiBBCisgICAgCisvXHB7THV9L3V0ZgorICAgIEEKKyAwOiBBCisgICAgYVoKKyAwOiBaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMgICAKK05vIG1hdGNoCisKKy9ccHtMbH0vdXRmCisgICAgYQorIDA6IGEKKyAgICBBegorIDA6IHoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQyAgIAorTm8gbWF0Y2gKKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS91dGYKKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAwOiBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfSAgIAorTm8gbWF0Y2gKKyAgICBBXHh7M2IxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KK05vIG1hdGNoCisgICAgQVx4ezM5MX1ceHsxMDQ0Rn1ceHtmZjNhfVx4ezFmYjB9CitObyBtYXRjaAorICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmY1YX1ceHsxZmIwfQorTm8gbWF0Y2gKKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiOH0KK05vIG1hdGNoCisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vaSx1dGYKKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAwOiBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAgICBhXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0gICAKKyAwOiBhXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAgICBBXHh7M2IxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAwOiBBXHh7M2IxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAgICBBXHh7MzkxfVx4ezEwNDRGfVx4e2ZmM2F9XHh7MWZiMH0KKyAwOiBBXHh7MzkxfVx4ezEwNDRmfVx4e2ZmM2F9XHh7MWZiMH0KKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmNWF9XHh7MWZiMH0KKyAwOiBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmNWF9XHh7MWZiMH0KKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiOH0KKyAwOiBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiOH0KKworL1x4ezM5MX0rL2ksdXRmCisgICAgXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX0KKyAwOiBceHszOTF9XHh7M2IxfVx4ezNiMX1ceHszYjF9XHh7MzkxfQorCisvXHh7MzkxfXszLDV9KC4pL2ksdXRmCisgICAgXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX1YCisgMDogXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX1YCisgMTogWAorCisvXHh7MzkxfXszLDV9PyguKS9pLHV0ZgorICAgIFx4ezM5MX1ceHszYjF9XHh7M2IxfVx4ezNiMX1ceHszOTF9WAorIDA6IFx4ezM5MX1ceHszYjF9XHh7M2IxfVx4ezNiMX0KKyAxOiBceHszYjF9CisKKy9bXHh7MzkxfVx4e2ZmM2F9XS9pLHV0ZgorICAgIFx4ezM5MX0KKyAwOiBceHszOTF9CisgICAgXHh7ZmYzYX0KKyAwOiBceHtmZjNhfQorICAgIFx4ezNiMX0KKyAwOiBceHszYjF9CisgICAgXHh7ZmY1YX0gICAKKyAwOiBceHtmZjVhfQorICAgIAorL14oXFgqKUMvdXRmCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9IAorIDA6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQworIDE6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9QyAKKyAwOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX1DCisgMTogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9CisKKy9eKFxYKj8pQy91dGYKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX0gCisgMDogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDCisgMTogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUIKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX1DIAorIDA6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQworIDE6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CCisKKy9eKFxYKikoLikvdXRmCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9IAorIDA6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0EKKyAxOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkMKKyAyOiBBCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9QyAKKyAwOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX1DCisgMTogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9CisgMjogQworCisvXihcWCo/KSguKS91dGYKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX0gCisgMDogQQorIDE6IAorIDI6IEEKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX1DIAorIDA6IEEKKyAxOiAKKyAyOiBBCisKKy9eXFgoLikvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9CitObyBtYXRjaAorCisvXlxYezIsM30oLikvdXRmCisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1YCisgMDogQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1YCisgMTogWAorICAgIEFceHszMDB9XHh7MzAxfUJceHszMDB9Q1x4ezMwMH1ceHszMDF9CisgMDogQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DCisgMTogQworICAgIEFceHszMDB9XHh7MzAxfUJceHszMDB9Q1x4ezMwMH1ceHszMDF9WAorIDA6IEFceHszMDB9XHh7MzAxfUJceHszMDB9Q1x4ezMwMH1ceHszMDF9WAorIDE6IFgKKyAgICBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfURBXHh7MzAwfVgKKyAwOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfUQKKyAxOiBECisgICAgCisvXlxYezIsM30/KC4pL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfUJceHszMDB9WAorIDA6IEFceHszMDB9XHh7MzAxfUJceHszMDB9WAorIDE6IFgKKyAgICBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfQorIDA6IEFceHszMDB9XHh7MzAxfUJceHszMDB9QworIDE6IEMKKyAgICBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfVgKKyAwOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUMKKyAxOiBDCisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DXHh7MzAwfVx4ezMwMX1EQVx4ezMwMH1YCisgMDogQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DCisgMTogQworCisvXlxYL3V0ZgorICAgIEEKKyAwOiBBCisgICAgQVx4ezMwMH1CQyAKKyAwOiBBXHh7MzAwfQorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQyAKKyAwOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9CisgICAgXHh7MzAwfSAgCisgMDogXHh7MzAwfQorCisvXlxwe0hhbn0rL3V0ZgorICAgIFx4ezJlODF9XHh7MzAwN31ceHsyZjgwNH1ceHszMWEwfQorIDA6IFx4ezJlODF9XHh7MzAwN31ceHsyZjgwNH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezJlN2Z9ICAKK05vIG1hdGNoCisKKy9eXFB7S2F0YWthbmF9Ky91dGYKKyAgICBceHszMTA1fQorIDA6IFx4ezMxMDV9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHszMGZmfSAgCitObyBtYXRjaAorCisvXltccHtBcmFiaWN9XS91dGYKKyAgICBceHswNmU5fQorIDA6IFx4ezZlOX0KKyAgICBceHswNjBifQorIDA6IFx4ezYwYn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhceHswNmU5fSAgIAorTm8gbWF0Y2gKKworL15bXFB7WWl9XS91dGYKKyAgICBceHsyZjgwMH0KKyAwOiBceHsyZjgwMH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4e2EwMTR9CitObyBtYXRjaAorICAgIFx4e2E0YzZ9ICAgCitObyBtYXRjaAorICAgIAorL15ccHtBbnl9WC91dGYKKyAgICBBWFlaCisgMDogQVgKKyAgICBceHsxMjM0fVhZWiAKKyAwOiBceHsxMjM0fVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFggIAorTm8gbWF0Y2gKKyAgICAKKy9eXFB7QW55fVgvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWAorTm8gbWF0Y2gKKyAgICAKKy9eXHB7QW55fT9YL3V0ZgorICAgIFhZWgorIDA6IFgKKyAgICBBWFlaCisgMDogQVgKKyAgICBceHsxMjM0fVhZWiAKKyAwOiBceHsxMjM0fVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCWFlaICAgCitObyBtYXRjaAorCisvXlxQe0FueX0/WC91dGYKKyAgICBYWVoKKyAwOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWFlaCitObyBtYXRjaAorICAgIFx4ezEyMzR9WFlaIAorTm8gbWF0Y2gKKyAgICBBQlhZWiAgIAorTm8gbWF0Y2gKKworL15ccHtBbnl9K1gvdXRmCisgICAgQVhZWgorIDA6IEFYCisgICAgXHh7MTIzNH1YWVoKKyAwOiBceHsxMjM0fVgKKyAgICBBXHh7MTIzNH1YWVoKKyAwOiBBXHh7MTIzNH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYWVoKK05vIG1hdGNoCisKKy9eXFB7QW55fStYL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVhZWgorTm8gbWF0Y2gKKyAgICBceHsxMjM0fVhZWgorTm8gbWF0Y2gKKyAgICBBXHh7MTIzNH1YWVoKK05vIG1hdGNoCisgICAgWFlaCitObyBtYXRjaAorCisvXlxwe0FueX0qWC91dGYKKyAgICBYWVoKKyAwOiBYCisgICAgQVhZWgorIDA6IEFYCisgICAgXHh7MTIzNH1YWVoKKyAwOiBceHsxMjM0fVgKKyAgICBBXHh7MTIzNH1YWVoKKyAwOiBBXHh7MTIzNH1YCisKKy9eXFB7QW55fSpYL3V0ZgorICAgIFhZWgorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVoKK05vIG1hdGNoCisgICAgXHh7MTIzNH1YWVoKK05vIG1hdGNoCisgICAgQVx4ezEyMzR9WFlaCitObyBtYXRjaAorCisvXltccHtBbnl9XVgvdXRmCisgICAgQVhZWgorIDA6IEFYCisgICAgXHh7MTIzNH1YWVogCisgMDogXHh7MTIzNH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYICAKK05vIG1hdGNoCisgICAgCisvXltcUHtBbnl9XVgvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWAorTm8gbWF0Y2gKKyAgICAKKy9eW1xwe0FueX1dP1gvdXRmCisgICAgWFlaCisgMDogWAorICAgIEFYWVoKKyAwOiBBWAorICAgIFx4ezEyMzR9WFlaIAorIDA6IFx4ezEyMzR9WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJYWVogICAKK05vIG1hdGNoCisKKy9eW1xQe0FueX1dP1gvdXRmCisgICAgWFlaCisgMDogWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVhZWgorTm8gbWF0Y2gKKyAgICBceHsxMjM0fVhZWiAKK05vIG1hdGNoCisgICAgQUJYWVogICAKK05vIG1hdGNoCisKKy9eW1xwe0FueX1dK1gvdXRmCisgICAgQVhZWgorIDA6IEFYCisgICAgXHh7MTIzNH1YWVoKKyAwOiBceHsxMjM0fVgKKyAgICBBXHh7MTIzNH1YWVoKKyAwOiBBXHh7MTIzNH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYWVoKK05vIG1hdGNoCisKKy9eW1xQe0FueX1dK1gvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWFlaCitObyBtYXRjaAorICAgIFx4ezEyMzR9WFlaCitObyBtYXRjaAorICAgIEFceHsxMjM0fVhZWgorTm8gbWF0Y2gKKyAgICBYWVoKK05vIG1hdGNoCisKKy9eW1xwe0FueX1dKlgvdXRmCisgICAgWFlaCisgMDogWAorICAgIEFYWVoKKyAwOiBBWAorICAgIFx4ezEyMzR9WFlaCisgMDogXHh7MTIzNH1YCisgICAgQVx4ezEyMzR9WFlaCisgMDogQVx4ezEyMzR9WAorCisvXltcUHtBbnl9XSpYL3V0ZgorICAgIFhZWgorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVoKK05vIG1hdGNoCisgICAgXHh7MTIzNH1YWVoKK05vIG1hdGNoCisgICAgQVx4ezEyMzR9WFlaCitObyBtYXRjaAorCisvXlxwe0FueX17Myw1fT8vdXRmCisgICAgYWJjZGVmZ2gKKyAwOiBhYmMKKyAgICBceHsxMjM0fVxuXHJceHszNDU2fXh5eiAKKyAwOiBceHsxMjM0fVx4ezBhfVx4ezBkfQorCisvXlxwe0FueX17Myw1fS91dGYKKyAgICBhYmNkZWZnaAorIDA6IGFiY2RlCisgICAgXHh7MTIzNH1cblxyXHh7MzQ1Nn14eXogCisgMDogXHh7MTIzNH1ceHswYX1ceHswZH1ceHszNDU2fXgKKworL15cUHtBbnl9ezMsNX0/L3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGVmZ2gKK05vIG1hdGNoCisgICAgXHh7MTIzNH1cblxyXHh7MzQ1Nn14eXogCitObyBtYXRjaAorCisvXlxwe0wmfVgvdXRmCisgICAgIEFYWQorIDA6IEFYCisgICAgIGFYWQorIDA6IGFYCisgICAgIFx4ezFjNX1YWQorIDA6IFx4ezFjNX1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxYmJ9WFkKK05vIG1hdGNoCisgICAgXHh7MmIwfVhZCitObyBtYXRjaAorICAgICFYWSAgICAgIAorTm8gbWF0Y2gKKworL15bXHB7TCZ9XVgvdXRmCisgICAgQVhZCisgMDogQVgKKyAgICBhWFkKKyAwOiBhWAorICAgICBceHsxYzV9WFkKKyAwOiBceHsxYzV9WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MWJifVhZCitObyBtYXRjaAorICAgIFx4ezJiMH1YWQorTm8gbWF0Y2gKKyAgICAhWFkgICAgICAKK05vIG1hdGNoCisKKy9eXHB7TCZ9K1gvdXRmCisgICAgQVhZCisgMDogQVgKKyAgICBhWFkKKyAwOiBhWAorICAgIEFiY2RlWHl6IAorIDA6IEFiY2RlWAorICAgIFx4ezFjNX1BYlhZCisgMDogXHh7MWM1fUFiWAorICAgIGFiY0RFWHlwcXJlWGxtbiAKKyAwOiBhYmNERVh5cHFyZVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezFiYn1YWQorTm8gbWF0Y2gKKyAgICBceHsyYjB9WFkKK05vIG1hdGNoCisgICAgIVhZICAgICAgCitObyBtYXRjaAorCisvXltccHtMJn1dK1gvdXRmCisgICAgQVhZCisgMDogQVgKKyAgICBhWFkKKyAwOiBhWAorICAgIEFiY2RlWHl6IAorIDA6IEFiY2RlWAorICAgIFx4ezFjNX1BYlhZCisgMDogXHh7MWM1fUFiWAorICAgIGFiY0RFWHlwcXJlWGxtbiAKKyAwOiBhYmNERVh5cHFyZVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezFiYn1YWQorTm8gbWF0Y2gKKyAgICBceHsyYjB9WFkKK05vIG1hdGNoCisgICAgIVhZICAgICAgCitObyBtYXRjaAorCisvXlxwe0wmfSs/WC91dGYKKyAgICBBWFkKKyAwOiBBWAorICAgIGFYWQorIDA6IGFYCisgICAgQWJjZGVYeXogCisgMDogQWJjZGVYCisgICAgXHh7MWM1fUFiWFkKKyAwOiBceHsxYzV9QWJYCisgICAgYWJjREVYeXBxcmVYbG1uIAorIDA6IGFiY0RFWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MWJifVhZCitObyBtYXRjaAorICAgIFx4ezJiMH1YWQorTm8gbWF0Y2gKKyAgICAhWFkgICAgICAKK05vIG1hdGNoCisKKy9eW1xwe0wmfV0rP1gvdXRmCisgICAgQVhZCisgMDogQVgKKyAgICBhWFkKKyAwOiBhWAorICAgIEFiY2RlWHl6IAorIDA6IEFiY2RlWAorICAgIFx4ezFjNX1BYlhZCisgMDogXHh7MWM1fUFiWAorICAgIGFiY0RFWHlwcXJlWGxtbiAKKyAwOiBhYmNERVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezFiYn1YWQorTm8gbWF0Y2gKKyAgICBceHsyYjB9WFkKK05vIG1hdGNoCisgICAgIVhZICAgICAgCitObyBtYXRjaAorCisvXlxQe0wmfVgvdXRmCisgICAgIVhZCisgMDogIVgKKyAgICBceHsxYmJ9WFkKKyAwOiBceHsxYmJ9WAorICAgIFx4ezJiMH1YWQorIDA6IFx4ezJiMH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxYzV9WFkKK05vIG1hdGNoCisgICAgQVhZICAgICAgCitObyBtYXRjaAorCisvXltcUHtMJn1dWC91dGYKKyAgICAhWFkKKyAwOiAhWAorICAgIFx4ezFiYn1YWQorIDA6IFx4ezFiYn1YCisgICAgXHh7MmIwfVhZCisgMDogXHh7MmIwfVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezFjNX1YWQorTm8gbWF0Y2gKKyAgICBBWFkgICAgICAKK05vIG1hdGNoCisKKy9eKFxwe1p9W15ccHtDfVxwe1p9XSspKiQvCisgICAgXHhhMCEKKyAwOiBceGEwIQorIDE6IFx4YTAhCisKKy9eW1xwTF0oYWJjKSg/MSkvCisgICAgQWFiY2FiY1laICAgIAorIDA6IEFhYmNhYmMKKyAxOiBhYmMKKworLyhbXHBMXT0oYWJjKSkqWC8KKyAgICBMPWFiY1gKKyAwOiBMPWFiY1gKKyAxOiBMPWFiYworIDI6IGFiYworCisvXlxwe0JhbGluZXNlfVxwe0N1bmVpZm9ybX1ccHtOa299XHB7UGhhZ3NfUGF9XHB7UGhvZW5pY2lhbn0vdXRmCisgICAgXHh7MWIwMH1ceHsxMjAwMH1ceHs3YzB9XHh7YTg0MH1ceHsxMDkwMH0KKyAwOiBceHsxYjAwfVx4ezEyMDAwfVx4ezdjMH1ceHthODQwfVx4ezEwOTAwfQorCisjIENoZWNrIHByb3BlcnR5IHN1cHBvcnQgaW4gbm9uLVVURiBtb2RlCisgCisvXHB7TH17NH0vCisgICAgMTIzYWJjZGVmZworIDA6IGFiY2QKKyAgICAxMjNhYmNceGM0XHhjNXp6CisgMDogYWJjXHhjNAorCisvXFh7MSwzfVxkLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHg4YUJDRAorTm8gbWF0Y2gKKyAgCisvXFg/XGQvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceDhhQkNEIAorTm8gbWF0Y2gKKworL1xQe0x9P1xkLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHg4YUJDRCAKK05vIG1hdGNoCisKKy9bXFBQUFx4OGFdezEsfVx4ODAvCisgICAgQVx4ODAKKyAwOiBBXHg4MAorCisvXltccHtBcmFiaWN9XS91dGYKKyAgICBceHs2MDR9CisgMDogXHh7NjA0fQorICAgIFx4ezYwZX0gCisgMDogXHh7NjBlfQorICAgIFx4ezY1Nn0gCisgMDogXHh7NjU2fQorICAgIFx4ezY1N30gCisgMDogXHh7NjU3fQorICAgIFx4ezY1OH0gCisgMDogXHh7NjU4fQorICAgIFx4ezY1OX0gCisgMDogXHh7NjU5fQorICAgIFx4ezY1YX0gCisgMDogXHh7NjVhfQorICAgIFx4ezY1Yn0gCisgMDogXHh7NjVifQorICAgIFx4ezY1Y30gCisgMDogXHh7NjVjfQorICAgIFx4ezY1ZH0gCisgMDogXHh7NjVkfQorICAgIFx4ezY1ZX0gCisgMDogXHh7NjVlfQorICAgIFx4ezY1Zn0KKyAwOiBceHs2NWZ9CisgICAgXHh7NjZhfSAKKyAwOiBceHs2NmF9CisgICAgXHh7NmU5fSAKKyAwOiBceHs2ZTl9CisgICAgXHh7NmVmfQorIDA6IFx4ezZlZn0KKyAgICBceHs2ZmF9ICAKKyAwOiBceHs2ZmF9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHs2NTB9CitObyBtYXRjaAorICAgIFx4ezY1MX0gIAorTm8gbWF0Y2gKKyAgICBceHs2NTJ9ICAKK05vIG1hdGNoCisgICAgXHh7NjUzfSAgCitObyBtYXRjaAorICAgIFx4ezY1NH0gCitObyBtYXRjaAorICAgIFx4ezY1NX0gCitObyBtYXRjaAorICAgIAorL15ccHtDeXJpbGxpY30vdXRmCisgICAgXHh7MWQyYn0gCisgMDogXHh7MWQyYn0KKyAgICAKKy9eXHB7Q29tbW9ufS91dGYKKyAgICBceHs1ODl9CisgMDogXHh7NTg5fQorICAgIFx4ezYwY30KKyAwOiBceHs2MGN9CisgICAgXHh7NjFmfSAgCisgMDogXHh7NjFmfQorICAgIFx4ezk2NH0KKyAwOiBceHs5NjR9CisgICAgXHh7OTY1fSAgCisgMDogXHh7OTY1fQorCisvXlxwe0luaGVyaXRlZH0vdXRmCisgICAgXHh7NjRifQorIDA6IFx4ezY0Yn0KKyAgICBceHs2NTR9CisgMDogXHh7NjU0fQorICAgIFx4ezY1NX0KKyAwOiBceHs2NTV9CisgICAgXHh7MjAwY30gCisgMDogXHh7MjAwY30KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezY0YX0KK05vIG1hdGNoCisgICAgXHh7NjU2fSAgICAgCitObyBtYXRjaAorCisvXlxwe1NoYXZpYW59L3V0ZgorICAgIFx4ezEwNDUwfQorIDA6IFx4ezEwNDUwfQorICAgIFx4ezEwNDdmfQorIDA6IFx4ezEwNDdmfQorICAgIAorL15ccHtEZXNlcmV0fS91dGYKKyAgICBceHsxMDQwMH0KKyAwOiBceHsxMDQwMH0KKyAgICBceHsxMDQ0Zn0KKyAwOiBceHsxMDQ0Zn0KKyAgICAKKy9eXHB7T3NtYW55YX0vdXRmCisgICAgXHh7MTA0ODB9CisgMDogXHh7MTA0ODB9CisgICAgXHh7MTA0OWR9CisgMDogXHh7MTA0OWR9CisgICAgXHh7MTA0YTB9CisgMDogXHh7MTA0YTB9CisgICAgXHh7MTA0YTl9CisgMDogXHh7MTA0YTl9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDQ5ZX0KK05vIG1hdGNoCisgICAgXHh7MTA0OWZ9CitObyBtYXRjaAorICAgIFx4ezEwNGFhfSAgICAgICAgICAgCitObyBtYXRjaAorCisvXHB7Q2FyaWFufVxwe0NoYW19XHB7S2F5YWhfTGl9XHB7TGVwY2hhfVxwe0x5Y2lhbn1ccHtMeWRpYW59XHB7T2xfQ2hpa2l9XHB7UmVqYW5nfVxwe1NhdXJhc2h0cmF9XHB7U3VuZGFuZXNlfVxwe1ZhaX0vdXRmCisgICAgXHh7MTAyQTR9XHh7QUE1Mn1ceHtBOTFEfVx4ezFDNDZ9XHh7MTAyODN9XHh7MTA5MkV9XHh7MUM2Qn1ceHtBOTNCfVx4e0E4QkZ9XHh7MUJBMH1ceHtBNTBBfT09PT0KKyAwOiBceHsxMDJhNH1ceHthYTUyfVx4e2E5MWR9XHh7MWM0Nn1ceHsxMDI4M31ceHsxMDkyZX1ceHsxYzZifVx4e2E5M2J9XHh7YThiZn1ceHsxYmEwfVx4e2E1MGF9CisKKy9ceHthNzdkfVx4ezFkNzl9L2ksdXRmCisgICAgXHh7YTc3ZH1ceHsxZDc5fQorIDA6IFx4e2E3N2R9XHh7MWQ3OX0KKyAgICBceHsxZDc5fVx4e2E3N2R9IAorIDA6IFx4ezFkNzl9XHh7YTc3ZH0KKworL1x4e2E3N2R9XHh7MWQ3OX0vdXRmCisgICAgXHh7YTc3ZH1ceHsxZDc5fQorIDA6IFx4e2E3N2R9XHh7MWQ3OX0KK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBceHsxZDc5fVx4e2E3N2R9IAorTm8gbWF0Y2gKKworLyhBKVwxL2ksdXRmCisgICAgQUEKKyAwOiBBQQorIDE6IEEKKyAgICBBYQorIDA6IEFhCisgMTogQQorICAgIGFhCisgMDogYWEKKyAxOiBhCisgICAgYUEKKyAwOiBhQQorIDE6IGEKKworLyhceHsxMGF9KVwxL2ksdXRmCisgICAgXHh7MTBhfVx4ezEwYX0KKyAwOiBceHsxMGF9XHh7MTBhfQorIDE6IFx4ezEwYX0KKyAgICBceHsxMGF9XHh7MTBifQorIDA6IFx4ezEwYX1ceHsxMGJ9CisgMTogXHh7MTBhfQorICAgIFx4ezEwYn1ceHsxMGJ9CisgMDogXHh7MTBifVx4ezEwYn0KKyAxOiBceHsxMGJ9CisgICAgXHh7MTBifVx4ezEwYX0KKyAwOiBceHsxMGJ9XHh7MTBhfQorIDE6IFx4ezEwYn0KKyAgICAKKyMgVGhlIG5leHQgdHdvIHRlc3RzIGFyZSBmb3IgcHJvcGVydHkgc3VwcG9ydCBpbiBub24tVVRGIG1vZGUKKworLyg/Olxwe0x1fXxceDIwKSsvCisgICAgXHg0MVx4MjBceDUwXHhDMlx4NTRceEM5XHgyMFx4NTRceDRGXHg0NFx4NDFceDU5CisgMDogQSBQXHhjMlRceGM5IFRPREFZCisKKy9bXHB7THV9XHgyMF0rLworICAgIFx4NDFceDIwXHg1MFx4QzJceDU0XHhDOVx4MjBceDU0XHg0Rlx4NDRceDQxXHg1OQorIDA6IEEgUFx4YzJUXHhjOSBUT0RBWQorCisvXHB7QXZlc3Rhbn1ccHtCYW11bX1ccHtFZ3lwdGlhbl9IaWVyb2dseXBoc31ccHtJbXBlcmlhbF9BcmFtYWljfVxwe0luc2NyaXB0aW9uYWxfUGFobGF2aX1ccHtJbnNjcmlwdGlvbmFsX1BhcnRoaWFufVxwe0phdmFuZXNlfVxwe0thaXRoaX1ccHtMaXN1fVxwe01lZXRlaV9NYXlla31ccHtPbGRfU291dGhfQXJhYmlhbn1ccHtPbGRfVHVya2ljfVxwe1NhbWFyaXRhbn1ccHtUYWlfVGhhbX1ccHtUYWlfVmlldH0vdXRmCisgICAgXHh7MTBiMDB9XHh7YTZlZn1ceHsxMzAwN31ceHsxMDg1N31ceHsxMGI3OH1ceHsxMGI1OH1ceHthOTgwfVx4ezExMGMxfVx4e2E0ZmZ9XHh7YWJjMH1ceHsxMGE3ZH1ceHsxMGM0OH1ceHswODAwfVx4ezFhYWR9XHh7YWFjMH0KKyAwOiBceHsxMGIwMH1ceHthNmVmfVx4ezEzMDA3fVx4ezEwODU3fVx4ezEwYjc4fVx4ezEwYjU4fVx4e2E5ODB9XHh7MTEwYzF9XHh7YTRmZn1ceHthYmMwfVx4ezEwYTdkfVx4ezEwYzQ4fVx4ezgwMH1ceHsxYWFkfVx4e2FhYzB9CisKKy9eXHcrL3V0Zix1Y3AKKyAgICBBel9ceHthYX1ceHtjMH1ceHsxYzV9XHh7MmIwfVx4ezNiNn1ceHsxZDdjOX1ceHsyZmExZH0xXHh7NjYwfVx4e2JlZn1ceHsxNmVlfQorIDA6IEF6X1x4e2FhfVx4e2MwfVx4ezFjNX1ceHsyYjB9XHh7M2I2fVx4ezFkN2M5fVx4ezJmYTFkfTFceHs2NjB9XHh7YmVmfVx4ezE2ZWV9CisKKy9eW1s6eGRpZ2l0Ol1dKi91dGYsdWNwCisgICAgMWFceHs2NjB9XHh7YmVmfVx4ezE2ZWV9CisgMDogMWEKKyAgCisvXlxkKy91dGYsdWNwCisgICAgMVx4ezY2MH1ceHtiZWZ9XHh7MTZlZX0KKyAwOiAxXHh7NjYwfVx4e2JlZn0KKyAgCisvXltbOmRpZ2l0Ol1dKy91dGYsdWNwCisgICAgMVx4ezY2MH1ceHtiZWZ9XHh7MTZlZX0KKyAwOiAxXHh7NjYwfVx4e2JlZn0KKworL14+XHMrL3V0Zix1Y3AKKyAgICA+XHh7MjB9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezIwMjl9XHh7MjAyZn1ceHs5fVx4e2J9IAorIDA6ID4gXHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezIwMjl9XHh7MjAyZn1ceHswOX1ceHswYn0KKyAgCisvXj5ccForL3V0Zix1Y3AKKyAgICA+XHh7MjB9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezIwMjl9XHh7MjAyZn1ceHs5fVx4e2J9IAorIDA6ID4gXHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezIwMjl9XHh7MjAyZn0KKyAgCisvXj5bWzpzcGFjZTpdXSovdXRmLHVjcAorICAgID5ceHsyMH1ceHthMH1ceHsxNjgwfVx4ezIwMjh9XHh7MjAyOX1ceHsyMDJmfVx4ezl9XHh7Yn0gCisgMDogPiBceHthMH1ceHsxNjgwfVx4ezIwMjh9XHh7MjAyOX1ceHsyMDJmfVx4ezA5fVx4ezBifQorCisvXj5bWzpibGFuazpdXSovdXRmLHVjcAorICAgID5ceHsyMH1ceHthMH1ceHsxNjgwfVx4ezIwMDB9XHh7MjAyZn1ceHs5fVx4e2J9XHh7MjAyOH0gCisgMDogPiBceHthMH1ceHsxNjgwfVx4ezIwMDB9XHh7MjAyZn1ceHswOX0KKworL15bWzphbHBoYTpdXSovdXRmLHVjcAorICAgIEF6XHh7YWF9XHh7YzB9XHh7MWM1fVx4ezJiMH1ceHszYjZ9XHh7MWQ3Yzl9XHh7MmZhMWR9CisgMDogQXpceHthYX1ceHtjMH1ceHsxYzV9XHh7MmIwfVx4ezNiNn1ceHsxZDdjOX1ceHsyZmExZH0KKworL15bWzphbG51bTpdXSovdXRmLHVjcAorICAgIEF6XHh7YWF9XHh7YzB9XHh7MWM1fVx4ezJiMH1ceHszYjZ9XHh7MWQ3Yzl9XHh7MmZhMWR9MVx4ezY2MH1ceHtiZWZ9XHh7MTZlZX0KKyAwOiBBelx4e2FhfVx4e2MwfVx4ezFjNX1ceHsyYjB9XHh7M2I2fVx4ezFkN2M5fVx4ezJmYTFkfTFceHs2NjB9XHh7YmVmfVx4ezE2ZWV9CisKKy9eW1s6Y250cmw6XV0qL3V0Zix1Y3AKKyAgICBceHswfVx4ezA5fVx4ezFmfVx4ezdmfVx4ezlmfSAKKyAwOiBceHswMH1ceHswOX1ceHsxZn1ceHs3Zn1ceHs5Zn0KKworL15bWzpncmFwaDpdXSovdXRmLHVjcAorICAgIEFceHthMX1ceHthMH0KKyAwOiBBXHh7YTF9CisKKy9eW1s6cHJpbnQ6XV0qL3V0Zix1Y3AKKyAgICBBIHpceHthMH1ceHthMX0KKyAwOiBBIHpceHthMH1ceHthMX0KKworL15bWzpwdW5jdDpdXSovdXRmLHVjcAorICAgIC4rXHh7YTF9XHh7YTB9CisgMDogLitceHthMX0KKworL1xwe1pzfSo/XFIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHhGQ2IgICAKK05vIG1hdGNoCisKKy9ccHtac30qXFIvCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYVx4RkNiICAgCitObyBtYXRjaAorCisv4rGlL2ksdXRmCisgICAg4rGlCisgMDogXHh7MmM2NX0KKyAgICDIunggCisgMDogXHh7MjNhfQorICAgIMi6IAorIDA6IFx4ezIzYX0KKworL1visaVdL2ksdXRmCisgICAg4rGlCisgMDogXHh7MmM2NX0KKyAgICDIunggCisgMDogXHh7MjNhfQorICAgIMi6IAorIDA6IFx4ezIzYX0KKworL8i6L2ksdXRmCisgICAgyLoKKyAwOiBceHsyM2F9CisgICAg4rGlCisgMDogXHh7MmM2NX0KKyAgICAKKyMgVGhlc2UgYXJlIHRlc3RzIGZvciBleHRlbmRlZCBncmFwaGVtZSBjbHVzdGVycyAgCisKKy9eXFgvdXRmLGFmdGVydGV4dAorICAgIEdceHszNGV9XHh7MzRlfVgKKyAwOiBHXHh7MzRlfVx4ezM0ZX0KKyAwKyBYCisgICAgXHh7MzRlfVx4ezM0ZX1YCisgMDogXHh7MzRlfVx4ezM0ZX0KKyAwKyBYCisgICAgXHgwNFgKKyAwOiBceHswNH0KKyAwKyBYCisgICAgXHh7MTEwMH1YCisgMDogXHh7MTEwMH0KKyAwKyBYCisgICAgXHh7MTEwMH1ceHszNGV9WAorIDA6IFx4ezExMDB9XHh7MzRlfQorIDArIFgKKyAgICBceHsxYjA0fVx4ezFiMDR9WCAKKyAwOiBceHsxYjA0fVx4ezFiMDR9CisgMCsgWAorICAgICpUaGVzZSBtYXRjaCB1cCB0byB0aGUgcm9tYW4gbGV0dGVycworIDA6ICoKKyAwKyBUaGVzZSBtYXRjaCB1cCB0byB0aGUgcm9tYW4gbGV0dGVycworICAgIFx4ezExMTF9XHh7MTExMX1MLEwKKyAwOiBceHsxMTExfVx4ezExMTF9CisgMCsgTCxMCisgICAgXHh7MTExMX1ceHsxMTExfVx4ezExNjl9TCxMLFYKKyAwOiBceHsxMTExfVx4ezExMTF9XHh7MTE2OX0KKyAwKyBMLEwsVgorICAgIFx4ezExMTF9XHh7YWU0Y31MLCBMVgorIDA6IFx4ezExMTF9XHh7YWU0Y30KKyAwKyBMLCBMVgorICAgIFx4ezExMTF9XHh7YWQ4OX1MLCBMVlQKKyAwOiBceHsxMTExfVx4e2FkODl9CisgMCsgTCwgTFZUCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExNjl9TCwgTFYsIFYKKyAwOiBceHsxMTExfVx4e2FlNGN9XHh7MTE2OX0KKyAwKyBMLCBMViwgVgorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxMTY5fVx4ezExNjl9TCwgTFYsIFYsIFYKKyAwOiBceHsxMTExfVx4e2FlNGN9XHh7MTE2OX1ceHsxMTY5fQorIDArIEwsIExWLCBWLCBWCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExNjl9XHh7MTFmZX1MLCBMViwgViwgVAorIDA6IFx4ezExMTF9XHh7YWU0Y31ceHsxMTY5fVx4ezExZmV9CisgMCsgTCwgTFYsIFYsIFQKKyAgICBceHsxMTExfVx4e2FkODl9XHh7MTFmZX1MLCBMVlQsIFQKKyAwOiBceHsxMTExfVx4e2FkODl9XHh7MTFmZX0KKyAwKyBMLCBMVlQsIFQKKyAgICBceHsxMTExfVx4e2FkODl9XHh7MTFmZX1ceHsxMWZlfUwsIExWVCwgVCwgVAorIDA6IFx4ezExMTF9XHh7YWQ4OX1ceHsxMWZlfVx4ezExZmV9CisgMCsgTCwgTFZULCBULCBUCisgICAgXHh7YWQ4OX1ceHsxMWZlfVx4ezExZmV9TFZULCBULCBUCisgMDogXHh7YWQ4OX1ceHsxMWZlfVx4ezExZmV9CisgMCsgTFZULCBULCBUCisgICAgKlRoZXNlIG1hdGNoIGp1c3QgdGhlIGZpcnN0IGNvZGVwb2ludCAoaW52YWxpZCBzZXF1ZW5jZSkKKyAwOiAqCisgMCsgVGhlc2UgbWF0Y2gganVzdCB0aGUgZmlyc3QgY29kZXBvaW50IChpbnZhbGlkIHNlcXVlbmNlKQorICAgIFx4ezExMTF9XHh7MTFmZX1MLCBUCisgMDogXHh7MTExMX0KKyAwKyBceHsxMWZlfUwsIFQKKyAgICBceHthZTRjfVx4ezExMTF9TFYsIEwKKyAwOiBceHthZTRjfQorIDArIFx4ezExMTF9TFYsIEwKKyAgICBceHthZTRjfVx4e2FlNGN9TFYsIExWCisgMDogXHh7YWU0Y30KKyAwKyBceHthZTRjfUxWLCBMVgorICAgIFx4e2FlNGN9XHh7YWQ4OX1MViwgTFZUCisgMDogXHh7YWU0Y30KKyAwKyBceHthZDg5fUxWLCBMVlQKKyAgICBceHsxMTY5fVx4ezExMTF9ViwgTAorIDA6IFx4ezExNjl9CisgMCsgXHh7MTExMX1WLCBMCisgICAgXHh7MTE2OX1ceHthZTRjfVYsIExWCisgMDogXHh7MTE2OX0KKyAwKyBceHthZTRjfVYsIExWCisgICAgXHh7MTE2OX1ceHthZDg5fVYsIExWVAorIDA6IFx4ezExNjl9CisgMCsgXHh7YWQ4OX1WLCBMVlQKKyAgICBceHthZDg5fVx4ezExMTF9TFZULCBMCisgMDogXHh7YWQ4OX0KKyAwKyBceHsxMTExfUxWVCwgTAorICAgIFx4e2FkODl9XHh7MTE2OX1MVlQsIFYKKyAwOiBceHthZDg5fQorIDArIFx4ezExNjl9TFZULCBWCisgICAgXHh7YWQ4OX1ceHthZTRjfUxWVCwgTFYKKyAwOiBceHthZDg5fQorIDArIFx4e2FlNGN9TFZULCBMVgorICAgIFx4e2FkODl9XHh7YWQ4OX1MVlQsIExWVAorIDA6IFx4e2FkODl9CisgMCsgXHh7YWQ4OX1MVlQsIExWVAorICAgIFx4ezExZmV9XHh7MTExMX1ULCBMCisgMDogXHh7MTFmZX0KKyAwKyBceHsxMTExfVQsIEwKKyAgICBceHsxMWZlfVx4ezExNjl9VCwgVgorIDA6IFx4ezExZmV9CisgMCsgXHh7MTE2OX1ULCBWCisgICAgXHh7MTFmZX1ceHthZTRjfVQsIExWCisgMDogXHh7MTFmZX0KKyAwKyBceHthZTRjfVQsIExWCisgICAgXHh7MTFmZX1ceHthZDg5fVQsIExWVAorIDA6IFx4ezExZmV9CisgMCsgXHh7YWQ4OX1ULCBMVlQKKyAgICAqVGVzdCBleHRlbmQgYW5kIHNwYWNpbmcgbWFyaworIDA6ICoKKyAwKyBUZXN0IGV4dGVuZCBhbmQgc3BhY2luZyBtYXJrCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezA3MTF9TCwgTFYsIGV4dGVuZAorIDA6IFx4ezExMTF9XHh7YWU0Y31ceHs3MTF9CisgMCsgTCwgTFYsIGV4dGVuZAorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxYjA0fUwsIExWLCBzcGFjaW5nIG1hcmsKKyAwOiBceHsxMTExfVx4e2FlNGN9XHh7MWIwNH0KKyAwKyBMLCBMViwgc3BhY2luZyBtYXJrCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezFiMDR9XHh7MDcxMX1ceHsxYjA0fUwsIExWLCBzcGFjaW5nIG1hcmssIGV4dGVuZCwgc3BhY2luZyBtYXJrCisgMDogXHh7MTExMX1ceHthZTRjfVx4ezFiMDR9XHh7NzExfVx4ezFiMDR9CisgMCsgTCwgTFYsIHNwYWNpbmcgbWFyaywgZXh0ZW5kLCBzcGFjaW5nIG1hcmsKKyAgICAqVGVzdCBDUiwgTEYsIGFuZCBjb250cm9sCisgMDogKgorIDArIFRlc3QgQ1IsIExGLCBhbmQgY29udHJvbAorICAgIFx4MGRceHswNzExfUNSLCBleHRlbmQKKyAwOiBceHswZH0KKyAwKyBceHs3MTF9Q1IsIGV4dGVuZAorICAgIFx4MGRceHsxYjA0fUNSLCBzcGFjaW5nbWFyaworIDA6IFx4ezBkfQorIDArIFx4ezFiMDR9Q1IsIHNwYWNpbmdtYXJrCisgICAgXHgwYVx4ezA3MTF9TEYsIGV4dGVuZAorIDA6IFx4ezBhfQorIDArIFx4ezcxMX1MRiwgZXh0ZW5kCisgICAgXHgwYVx4ezFiMDR9TEYsIHNwYWNpbmdtYXJrCisgMDogXHh7MGF9CisgMCsgXHh7MWIwNH1MRiwgc3BhY2luZ21hcmsKKyAgICBceDBiXHh7MDcxMX1Db250cm9sLCBleHRlbmQKKyAwOiBceHswYn0KKyAwKyBceHs3MTF9Q29udHJvbCwgZXh0ZW5kCisgICAgXHgwOVx4ezFiMDR9Q29udHJvbCwgc3BhY2luZ21hcmsKKyAwOiBceHswOX0KKyAwKyBceHsxYjA0fUNvbnRyb2wsIHNwYWNpbmdtYXJrCisgICAgKlRoZXJlIGFyZSBubyBQcmVwZW5kIGNoYXJhY3RlcnMsIHNvIHdlIGNhbid0IHRlc3QgUHJlcGVuZCwgQ1IKKyAwOiAqCisgMCsgVGhlcmUgYXJlIG5vIFByZXBlbmQgY2hhcmFjdGVycywgc28gd2UgY2FuJ3QgdGVzdCBQcmVwZW5kLCBDUgorICAgIAorL14oPz5cWHsyfSlYL3V0ZixhZnRlcnRleHQKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAwOiBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAwKyAKKyAgICAKKy9eXFh7Miw0fVgvdXRmLGFmdGVydGV4dAorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorIDA6IFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorIDArIAorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAwOiBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgMCsgCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAwOiBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorIDArIAorCisvXlxYezIsNH0/WC91dGYsYWZ0ZXJ0ZXh0CisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgMDogXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgMCsgCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorIDA6IFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAwKyAKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorIDA6IFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgMCsgCisKKy9cWCpaL3V0Zixub19zdGFydF9vcHRpbWl6ZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVx4ezMwMH0KK05vIG1hdGNoCisKKy9cWCooLikvdXRmLG5vX3N0YXJ0X29wdGltaXplCisgICAgQVx4ezExMTF9XHh7YWU0Y31ceHsxMTY5fQorIDA6IEFceHsxMTExfQorIDE6IFx4ezExMTF9CisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezFlOWV9Ky9pLHV0ZgorICAgIFx4ezFlOWV9XHh7MDBkZn0KKyAwOiBceHsxZTllfVx4e2RmfQorCisvW3pceHsxZTllfV0rL2ksdXRmCisgICAgXHh7MWU5ZX1ceHswMGRmfQorIDA6IFx4ezFlOWV9XHh7ZGZ9CisKKy9ceHswMGRmfSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisgMDogXHh7MWU5ZX1ceHtkZn0KKworL1t6XHh7MDBkZn1dKy9pLHV0ZgorICAgIFx4ezFlOWV9XHh7MDBkZn0KKyAwOiBceHsxZTllfVx4e2RmfQorCisvXHh7MWY4OH0rL2ksdXRmCisgICAgXHh7MWY4OH1ceHsxZjgwfSAKKyAwOiBceHsxZjg4fVx4ezFmODB9CisKKy9belx4ezFmODh9XSsvaSx1dGYKKyAgICBceHsxZjg4fVx4ezFmODB9IAorIDA6IFx4ezFmODh9XHh7MWY4MH0KKyAgICAKKyMgQ2hhcmFjdGVycyB3aXRoIG1vcmUgdGhhbiBvbmUgb3RoZXIgY2FzZTsgdGVzdCBpbiBjbGFzc2VzIAorCisvW3pceHswMGI1fV0rL2ksdXRmCisgICAgXHh7MDBiNX1ceHswMzljfVx4ezAzYmN9CisgMDogXHh7YjV9XHh7MzljfVx4ezNiY30KKworL1t6XHh7MDM5Y31dKy9pLHV0ZgorICAgIFx4ezAwYjV9XHh7MDM5Y31ceHswM2JjfQorIDA6IFx4e2I1fVx4ezM5Y31ceHszYmN9CisKKy9belx4ezAzYmN9XSsvaSx1dGYKKyAgICBceHswMGI1fVx4ezAzOWN9XHh7MDNiY30KKyAwOiBceHtiNX1ceHszOWN9XHh7M2JjfQorCisvW3pceHswMGM1fV0rL2ksdXRmCisgICAgXHh7MDBjNX1ceHswMGU1fVx4ezIxMmJ9CisgMDogXHh7YzV9XHh7ZTV9XHh7MjEyYn0KKworL1t6XHh7MDBlNX1dKy9pLHV0ZgorICAgIFx4ezAwYzV9XHh7MDBlNX1ceHsyMTJifQorIDA6IFx4e2M1fVx4e2U1fVx4ezIxMmJ9CisKKy9belx4ezIxMmJ9XSsvaSx1dGYKKyAgICBceHswMGM1fVx4ezAwZTV9XHh7MjEyYn0KKyAwOiBceHtjNX1ceHtlNX1ceHsyMTJifQorCisvW3pceHswMWM0fV0rL2ksdXRmCisgICAgXHh7MDFjNH1ceHswMWM1fVx4ezAxYzZ9CisgMDogXHh7MWM0fVx4ezFjNX1ceHsxYzZ9CisKKy9belx4ezAxYzV9XSsvaSx1dGYKKyAgICBceHswMWM0fVx4ezAxYzV9XHh7MDFjNn0KKyAwOiBceHsxYzR9XHh7MWM1fVx4ezFjNn0KKworL1t6XHh7MDFjNn1dKy9pLHV0ZgorICAgIFx4ezAxYzR9XHh7MDFjNX1ceHswMWM2fQorIDA6IFx4ezFjNH1ceHsxYzV9XHh7MWM2fQorCisvW3pceHswMWM3fV0rL2ksdXRmCisgICAgXHh7MDFjN31ceHswMWM4fVx4ezAxYzl9CisgMDogXHh7MWM3fVx4ezFjOH1ceHsxYzl9CisKKy9belx4ezAxYzh9XSsvaSx1dGYKKyAgICBceHswMWM3fVx4ezAxYzh9XHh7MDFjOX0KKyAwOiBceHsxYzd9XHh7MWM4fVx4ezFjOX0KKworL1t6XHh7MDFjOX1dKy9pLHV0ZgorICAgIFx4ezAxYzd9XHh7MDFjOH1ceHswMWM5fQorIDA6IFx4ezFjN31ceHsxYzh9XHh7MWM5fQorCisvW3pceHswMWNhfV0rL2ksdXRmCisgICAgXHh7MDFjYX1ceHswMWNifVx4ezAxY2N9CisgMDogXHh7MWNhfVx4ezFjYn1ceHsxY2N9CisKKy9belx4ezAxY2J9XSsvaSx1dGYKKyAgICBceHswMWNhfVx4ezAxY2J9XHh7MDFjY30KKyAwOiBceHsxY2F9XHh7MWNifVx4ezFjY30KKworL1t6XHh7MDFjY31dKy9pLHV0ZgorICAgIFx4ezAxY2F9XHh7MDFjYn1ceHswMWNjfQorIDA6IFx4ezFjYX1ceHsxY2J9XHh7MWNjfQorCisvW3pceHswMWYxfV0rL2ksdXRmCisgICAgXHh7MDFmMX1ceHswMWYyfVx4ezAxZjN9CisgMDogXHh7MWYxfVx4ezFmMn1ceHsxZjN9CisKKy9belx4ezAxZjJ9XSsvaSx1dGYKKyAgICBceHswMWYxfVx4ezAxZjJ9XHh7MDFmM30KKyAwOiBceHsxZjF9XHh7MWYyfVx4ezFmM30KKworL1t6XHh7MDFmM31dKy9pLHV0ZgorICAgIFx4ezAxZjF9XHh7MDFmMn1ceHswMWYzfQorIDA6IFx4ezFmMX1ceHsxZjJ9XHh7MWYzfQorCisvW3pceHswMzQ1fV0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKyAwOiBceHszNDV9XHh7Mzk5fVx4ezNiOX1ceHsxZmJlfQorCisvW3pceHswMzk5fV0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKyAwOiBceHszNDV9XHh7Mzk5fVx4ezNiOX1ceHsxZmJlfQorCisvW3pceHswM2I5fV0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKyAwOiBceHszNDV9XHh7Mzk5fVx4ezNiOX1ceHsxZmJlfQorCisvW3pceHsxZmJlfV0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKyAwOiBceHszNDV9XHh7Mzk5fVx4ezNiOX1ceHsxZmJlfQorCisvW3pceHswMzkyfV0rL2ksdXRmCisgICAgXHh7MDM5Mn1ceHswM2IyfVx4ezAzZDB9CisgMDogXHh7MzkyfVx4ezNiMn1ceHszZDB9CisKKy9belx4ezAzYjJ9XSsvaSx1dGYKKyAgICBceHswMzkyfVx4ezAzYjJ9XHh7MDNkMH0KKyAwOiBceHszOTJ9XHh7M2IyfVx4ezNkMH0KKworL1t6XHh7MDNkMH1dKy9pLHV0ZgorICAgIFx4ezAzOTJ9XHh7MDNiMn1ceHswM2QwfQorIDA6IFx4ezM5Mn1ceHszYjJ9XHh7M2QwfQorCisvW3pceHswMzk1fV0rL2ksdXRmCisgICAgXHh7MDM5NX1ceHswM2I1fVx4ezAzZjV9CisgMDogXHh7Mzk1fVx4ezNiNX1ceHszZjV9CisKKy9belx4ezAzYjV9XSsvaSx1dGYKKyAgICBceHswMzk1fVx4ezAzYjV9XHh7MDNmNX0KKyAwOiBceHszOTV9XHh7M2I1fVx4ezNmNX0KKworL1t6XHh7MDNmNX1dKy9pLHV0ZgorICAgIFx4ezAzOTV9XHh7MDNiNX1ceHswM2Y1fQorIDA6IFx4ezM5NX1ceHszYjV9XHh7M2Y1fQorCisvW3pceHswMzk4fV0rL2ksdXRmCisgICAgXHh7MDM5OH1ceHswM2I4fVx4ezAzZDF9XHh7MDNmNH0KKyAwOiBceHszOTh9XHh7M2I4fVx4ezNkMX1ceHszZjR9CisKKy9belx4ezAzYjh9XSsvaSx1dGYKKyAgICBceHswMzk4fVx4ezAzYjh9XHh7MDNkMX1ceHswM2Y0fQorIDA6IFx4ezM5OH1ceHszYjh9XHh7M2QxfVx4ezNmNH0KKworL1t6XHh7MDNkMX1dKy9pLHV0ZgorICAgIFx4ezAzOTh9XHh7MDNiOH1ceHswM2QxfVx4ezAzZjR9CisgMDogXHh7Mzk4fVx4ezNiOH1ceHszZDF9XHh7M2Y0fQorCisvW3pceHswM2Y0fV0rL2ksdXRmCisgICAgXHh7MDM5OH1ceHswM2I4fVx4ezAzZDF9XHh7MDNmNH0KKyAwOiBceHszOTh9XHh7M2I4fVx4ezNkMX1ceHszZjR9CisKKy9belx4ezAzOWF9XSsvaSx1dGYKKyAgICBceHswMzlhfVx4ezAzYmF9XHh7MDNmMH0KKyAwOiBceHszOWF9XHh7M2JhfVx4ezNmMH0KKworL1t6XHh7MDNiYX1dKy9pLHV0ZgorICAgIFx4ezAzOWF9XHh7MDNiYX1ceHswM2YwfQorIDA6IFx4ezM5YX1ceHszYmF9XHh7M2YwfQorCisvW3pceHswM2YwfV0rL2ksdXRmCisgICAgXHh7MDM5YX1ceHswM2JhfVx4ezAzZjB9CisgMDogXHh7MzlhfVx4ezNiYX1ceHszZjB9CisKKy9belx4ezAzYTB9XSsvaSx1dGYKKyAgICBceHswM2EwfVx4ezAzYzB9XHh7MDNkNn0gCisgMDogXHh7M2EwfVx4ezNjMH1ceHszZDZ9CisKKy9belx4ezAzYzB9XSsvaSx1dGYKKyAgICBceHswM2EwfVx4ezAzYzB9XHh7MDNkNn0gCisgMDogXHh7M2EwfVx4ezNjMH1ceHszZDZ9CisKKy9belx4ezAzZDZ9XSsvaSx1dGYKKyAgICBceHswM2EwfVx4ezAzYzB9XHh7MDNkNn0gCisgMDogXHh7M2EwfVx4ezNjMH1ceHszZDZ9CisKKy9belx4ezAzYTF9XSsvaSx1dGYKKyAgICBceHswM2ExfVx4ezAzYzF9XHh7MDNmMX0KKyAwOiBceHszYTF9XHh7M2MxfVx4ezNmMX0KKworL1t6XHh7MDNjMX1dKy9pLHV0ZgorICAgIFx4ezAzYTF9XHh7MDNjMX1ceHswM2YxfQorIDA6IFx4ezNhMX1ceHszYzF9XHh7M2YxfQorCisvW3pceHswM2YxfV0rL2ksdXRmCisgICAgXHh7MDNhMX1ceHswM2MxfVx4ezAzZjF9CisgMDogXHh7M2ExfVx4ezNjMX1ceHszZjF9CisKKy9belx4ezAzYTN9XSsvaSx1dGYKKyAgICBceHswM0EzfVx4ezAzQzJ9XHh7MDNDM30KKyAwOiBceHszYTN9XHh7M2MyfVx4ezNjM30KKworL1t6XHh7MDNjMn1dKy9pLHV0ZgorICAgIFx4ezAzQTN9XHh7MDNDMn1ceHswM0MzfQorIDA6IFx4ezNhM31ceHszYzJ9XHh7M2MzfQorCisvW3pceHswM2MzfV0rL2ksdXRmCisgICAgXHh7MDNBM31ceHswM0MyfVx4ezAzQzN9CisgMDogXHh7M2EzfVx4ezNjMn1ceHszYzN9CisKKy9belx4ezAzYTZ9XSsvaSx1dGYKKyAgICBceHswM2E2fVx4ezAzYzZ9XHh7MDNkNX0gCisgMDogXHh7M2E2fVx4ezNjNn1ceHszZDV9CisKKy9belx4ezAzYzZ9XSsvaSx1dGYKKyAgICBceHswM2E2fVx4ezAzYzZ9XHh7MDNkNX0gCisgMDogXHh7M2E2fVx4ezNjNn1ceHszZDV9CisKKy9belx4ezAzZDV9XSsvaSx1dGYKKyAgICBceHswM2E2fVx4ezAzYzZ9XHh7MDNkNX0gCisgMDogXHh7M2E2fVx4ezNjNn1ceHszZDV9CisKKy9belx4ezAzYzl9XSsvaSx1dGYKKyAgICBceHswM2M5fVx4ezAzYTl9XHh7MjEyNn0KKyAwOiBceHszYzl9XHh7M2E5fVx4ezIxMjZ9CisKKy9belx4ezAzYTl9XSsvaSx1dGYKKyAgICBceHswM2M5fVx4ezAzYTl9XHh7MjEyNn0KKyAwOiBceHszYzl9XHh7M2E5fVx4ezIxMjZ9CisKKy9belx4ezIxMjZ9XSsvaSx1dGYKKyAgICBceHswM2M5fVx4ezAzYTl9XHh7MjEyNn0KKyAwOiBceHszYzl9XHh7M2E5fVx4ezIxMjZ9CisKKy9belx4ezFlNjB9XSsvaSx1dGYKKyAgICBceHsxZTYwfVx4ezFlNjF9XHh7MWU5Yn0KKyAwOiBceHsxZTYwfVx4ezFlNjF9XHh7MWU5Yn0KKworL1t6XHh7MWU2MX1dKy9pLHV0ZgorICAgIFx4ezFlNjB9XHh7MWU2MX1ceHsxZTlifQorIDA6IFx4ezFlNjB9XHh7MWU2MX1ceHsxZTlifQorCisvW3pceHsxZTlifV0rL2ksdXRmCisgICAgXHh7MWU2MH1ceHsxZTYxfVx4ezFlOWJ9CisgMDogXHh7MWU2MH1ceHsxZTYxfVx4ezFlOWJ9CisKKyMgUGVybCA1LjEyLjQgZ2V0cyB0aGVzZSB3cm9uZywgYnV0IDUuMTUuMyBpcyBPSyAKKworL1t6XHh7MDA0Yn1dKy9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorIDA6IEtrXHh7MjEyYX0KKworL1t6XHh7MDA2Yn1dKy9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorIDA6IEtrXHh7MjEyYX0KKworL1t6XHh7MjEyYX1dKy9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorIDA6IEtrXHh7MjEyYX0KKworL1t6XHh7MDA1M31dKy9pLHV0ZgorICAgIFx4ezAwNTN9XHh7MDA3M31ceHswMTdmfQorIDA6IFNzXHh7MTdmfQorCisvW3pceHswMDczfV0rL2ksdXRmCisgICAgXHh7MDA1M31ceHswMDczfVx4ezAxN2Z9CisgMDogU3NceHsxN2Z9CisKKy9belx4ezAxN2Z9XSsvaSx1dGYKKyAgICBceHswMDUzfVx4ezAwNzN9XHh7MDE3Zn0KKyAwOiBTc1x4ezE3Zn0KKyAgICAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIAorCisvKM6jzobOnM6fzqMpIFwxL2ksdXRmCisgICAgzqPOhs6czp/OoyDOo86GzpzOn86jCisgMDogXHh7M2EzfVx4ezM4Nn1ceHszOWN9XHh7MzlmfVx4ezNhM30gXHh7M2EzfVx4ezM4Nn1ceHszOWN9XHh7MzlmfVx4ezNhM30KKyAxOiBceHszYTN9XHh7Mzg2fVx4ezM5Y31ceHszOWZ9XHh7M2EzfQorICAgIM6jzobOnM6fzqMgz4POrM68zr/PggorIDA6IFx4ezNhM31ceHszODZ9XHh7MzljfVx4ezM5Zn1ceHszYTN9IFx4ezNjM31ceHszYWN9XHh7M2JjfVx4ezNiZn1ceHszYzJ9CisgMTogXHh7M2EzfVx4ezM4Nn1ceHszOWN9XHh7MzlmfVx4ezNhM30KKyAgICDPg86szrzOv8+CIM+DzqzOvM6/z4IKKyAwOiBceHszYzN9XHh7M2FjfVx4ezNiY31ceHszYmZ9XHh7M2MyfSBceHszYzN9XHh7M2FjfVx4ezNiY31ceHszYmZ9XHh7M2MyfQorIDE6IFx4ezNjM31ceHszYWN9XHh7M2JjfVx4ezNiZn1ceHszYzJ9CisgICAgz4POrM68zr/PgiDPg86szrzOv8+DCisgMDogXHh7M2MzfVx4ezNhY31ceHszYmN9XHh7M2JmfVx4ezNjMn0gXHh7M2MzfVx4ezNhY31ceHszYmN9XHh7M2JmfVx4ezNjM30KKyAxOiBceHszYzN9XHh7M2FjfVx4ezNiY31ceHszYmZ9XHh7M2MyfQorICAgIM+DzqzOvM6/z4IgzqPOhs6czp/OoyAgCisgMDogXHh7M2MzfVx4ezNhY31ceHszYmN9XHh7M2JmfVx4ezNjMn0gXHh7M2EzfVx4ezM4Nn1ceHszOWN9XHh7MzlmfVx4ezNhM30KKyAxOiBceHszYzN9XHh7M2FjfVx4ezNiY31ceHszYmZ9XHh7M2MyfQorCisvKM+DzqzOvM6/z4IpIFwxL2ksdXRmCisgICAgzqPOhs6czp/OoyDOo86GzpzOn86jCisgMDogXHh7M2EzfVx4ezM4Nn1ceHszOWN9XHh7MzlmfVx4ezNhM30gXHh7M2EzfVx4ezM4Nn1ceHszOWN9XHh7MzlmfVx4ezNhM30KKyAxOiBceHszYTN9XHh7Mzg2fVx4ezM5Y31ceHszOWZ9XHh7M2EzfQorICAgIM6jzobOnM6fzqMgz4POrM68zr/PggorIDA6IFx4ezNhM31ceHszODZ9XHh7MzljfVx4ezM5Zn1ceHszYTN9IFx4ezNjM31ceHszYWN9XHh7M2JjfVx4ezNiZn1ceHszYzJ9CisgMTogXHh7M2EzfVx4ezM4Nn1ceHszOWN9XHh7MzlmfVx4ezNhM30KKyAgICDPg86szrzOv8+CIM+DzqzOvM6/z4IKKyAwOiBceHszYzN9XHh7M2FjfVx4ezNiY31ceHszYmZ9XHh7M2MyfSBceHszYzN9XHh7M2FjfVx4ezNiY31ceHszYmZ9XHh7M2MyfQorIDE6IFx4ezNjM31ceHszYWN9XHh7M2JjfVx4ezNiZn1ceHszYzJ9CisgICAgz4POrM68zr/PgiDPg86szrzOv8+DCisgMDogXHh7M2MzfVx4ezNhY31ceHszYmN9XHh7M2JmfVx4ezNjMn0gXHh7M2MzfVx4ezNhY31ceHszYmN9XHh7M2JmfVx4ezNjM30KKyAxOiBceHszYzN9XHh7M2FjfVx4ezNiY31ceHszYmZ9XHh7M2MyfQorICAgIM+DzqzOvM6/z4IgzqPOhs6czp/OoyAgCisgMDogXHh7M2MzfVx4ezNhY31ceHszYmN9XHh7M2JmfVx4ezNjMn0gXHh7M2EzfVx4ezM4Nn1ceHszOWN9XHh7MzlmfVx4ezNhM30KKyAxOiBceHszYzN9XHh7M2FjfVx4ezNiY31ceHszYmZ9XHh7M2MyfQorCisvKM6jzobOnM6fzqMpIFwxKi9pLHV0ZgorICAgIM6jzobOnM6fzqNceDIwCisgMDogXHh7M2EzfVx4ezM4Nn1ceHszOWN9XHh7MzlmfVx4ezNhM30gCisgMTogXHh7M2EzfVx4ezM4Nn1ceHszOWN9XHh7MzlmfVx4ezNhM30KKyAgICDOo86GzpzOn86jIM6jzobOnM6fzqPPg86szrzOv8+Cz4POrM68zr/PggorIDA6IFx4ezNhM31ceHszODZ9XHh7MzljfVx4ezM5Zn1ceHszYTN9IFx4ezNhM31ceHszODZ9XHh7MzljfVx4ezM5Zn1ceHszYTN9XHh7M2MzfVx4ezNhY31ceHszYmN9XHh7M2JmfVx4ezNjMn1ceHszYzN9XHh7M2FjfVx4ezNiY31ceHszYmZ9XHh7M2MyfQorIDE6IFx4ezNhM31ceHszODZ9XHh7MzljfVx4ezM5Zn1ceHszYTN9CisKKyMgUGVybCBtYXRjaGVzIHRoZXNlIAorCisvXHh7MDBiNX0rL2ksdXRmCisgICAgXHh7MDBiNX1ceHswMzljfVx4ezAzYmN9CisgMDogXHh7YjV9XHh7MzljfVx4ezNiY30KKworL1x4ezAzOWN9Ky9pLHV0ZgorICAgIFx4ezAwYjV9XHh7MDM5Y31ceHswM2JjfQorIDA6IFx4e2I1fVx4ezM5Y31ceHszYmN9CisKKy9ceHswM2JjfSsvaSx1dGYKKyAgICBceHswMGI1fVx4ezAzOWN9XHh7MDNiY30KKyAwOiBceHtiNX1ceHszOWN9XHh7M2JjfQorCisKKy9ceHswMGM1fSsvaSx1dGYKKyAgICBceHswMGM1fVx4ezAwZTV9XHh7MjEyYn0KKyAwOiBceHtjNX1ceHtlNX1ceHsyMTJifQorCisvXHh7MDBlNX0rL2ksdXRmCisgICAgXHh7MDBjNX1ceHswMGU1fVx4ezIxMmJ9CisgMDogXHh7YzV9XHh7ZTV9XHh7MjEyYn0KKworL1x4ezIxMmJ9Ky9pLHV0ZgorICAgIFx4ezAwYzV9XHh7MDBlNX1ceHsyMTJifQorIDA6IFx4e2M1fVx4e2U1fVx4ezIxMmJ9CisKKworL1x4ezAxYzR9Ky9pLHV0ZgorICAgIFx4ezAxYzR9XHh7MDFjNX1ceHswMWM2fQorIDA6IFx4ezFjNH1ceHsxYzV9XHh7MWM2fQorCisvXHh7MDFjNX0rL2ksdXRmCisgICAgXHh7MDFjNH1ceHswMWM1fVx4ezAxYzZ9CisgMDogXHh7MWM0fVx4ezFjNX1ceHsxYzZ9CisKKy9ceHswMWM2fSsvaSx1dGYKKyAgICBceHswMWM0fVx4ezAxYzV9XHh7MDFjNn0KKyAwOiBceHsxYzR9XHh7MWM1fVx4ezFjNn0KKworCisvXHh7MDFjN30rL2ksdXRmCisgICAgXHh7MDFjN31ceHswMWM4fVx4ezAxYzl9CisgMDogXHh7MWM3fVx4ezFjOH1ceHsxYzl9CisKKy9ceHswMWM4fSsvaSx1dGYKKyAgICBceHswMWM3fVx4ezAxYzh9XHh7MDFjOX0KKyAwOiBceHsxYzd9XHh7MWM4fVx4ezFjOX0KKworL1x4ezAxYzl9Ky9pLHV0ZgorICAgIFx4ezAxYzd9XHh7MDFjOH1ceHswMWM5fQorIDA6IFx4ezFjN31ceHsxYzh9XHh7MWM5fQorCisKKy9ceHswMWNhfSsvaSx1dGYKKyAgICBceHswMWNhfVx4ezAxY2J9XHh7MDFjY30KKyAwOiBceHsxY2F9XHh7MWNifVx4ezFjY30KKworL1x4ezAxY2J9Ky9pLHV0ZgorICAgIFx4ezAxY2F9XHh7MDFjYn1ceHswMWNjfQorIDA6IFx4ezFjYX1ceHsxY2J9XHh7MWNjfQorCisvXHh7MDFjY30rL2ksdXRmCisgICAgXHh7MDFjYX1ceHswMWNifVx4ezAxY2N9CisgMDogXHh7MWNhfVx4ezFjYn1ceHsxY2N9CisKKworL1x4ezAxZjF9Ky9pLHV0ZgorICAgIFx4ezAxZjF9XHh7MDFmMn1ceHswMWYzfQorIDA6IFx4ezFmMX1ceHsxZjJ9XHh7MWYzfQorCisvXHh7MDFmMn0rL2ksdXRmCisgICAgXHh7MDFmMX1ceHswMWYyfVx4ezAxZjN9CisgMDogXHh7MWYxfVx4ezFmMn1ceHsxZjN9CisKKy9ceHswMWYzfSsvaSx1dGYKKyAgICBceHswMWYxfVx4ezAxZjJ9XHh7MDFmM30KKyAwOiBceHsxZjF9XHh7MWYyfVx4ezFmM30KKworCisvXHh7MDM0NX0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKyAwOiBceHszNDV9XHh7Mzk5fVx4ezNiOX1ceHsxZmJlfQorCisvXHh7MDM5OX0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKyAwOiBceHszNDV9XHh7Mzk5fVx4ezNiOX1ceHsxZmJlfQorCisvXHh7MDNiOX0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKyAwOiBceHszNDV9XHh7Mzk5fVx4ezNiOX1ceHsxZmJlfQorCisvXHh7MWZiZX0rL2ksdXRmCisgICAgXHh7MDM0NX1ceHswMzk5fVx4ezAzYjl9XHh7MWZiZX0KKyAwOiBceHszNDV9XHh7Mzk5fVx4ezNiOX1ceHsxZmJlfQorCisKKy9ceHswMzkyfSsvaSx1dGYKKyAgICBceHswMzkyfVx4ezAzYjJ9XHh7MDNkMH0KKyAwOiBceHszOTJ9XHh7M2IyfVx4ezNkMH0KKworL1x4ezAzYjJ9Ky9pLHV0ZgorICAgIFx4ezAzOTJ9XHh7MDNiMn1ceHswM2QwfQorIDA6IFx4ezM5Mn1ceHszYjJ9XHh7M2QwfQorCisvXHh7MDNkMH0rL2ksdXRmCisgICAgXHh7MDM5Mn1ceHswM2IyfVx4ezAzZDB9CisgMDogXHh7MzkyfVx4ezNiMn1ceHszZDB9CisgICAgCisKKy9ceHswMzk1fSsvaSx1dGYKKyAgICBceHswMzk1fVx4ezAzYjV9XHh7MDNmNX0KKyAwOiBceHszOTV9XHh7M2I1fVx4ezNmNX0KKworL1x4ezAzYjV9Ky9pLHV0ZgorICAgIFx4ezAzOTV9XHh7MDNiNX1ceHswM2Y1fQorIDA6IFx4ezM5NX1ceHszYjV9XHh7M2Y1fQorCisvXHh7MDNmNX0rL2ksdXRmCisgICAgXHh7MDM5NX1ceHswM2I1fVx4ezAzZjV9CisgMDogXHh7Mzk1fVx4ezNiNX1ceHszZjV9CisKKworL1x4ezAzOTh9Ky9pLHV0ZgorICAgIFx4ezAzOTh9XHh7MDNiOH1ceHswM2QxfVx4ezAzZjR9CisgMDogXHh7Mzk4fVx4ezNiOH1ceHszZDF9XHh7M2Y0fQorCisvXHh7MDNiOH0rL2ksdXRmCisgICAgXHh7MDM5OH1ceHswM2I4fVx4ezAzZDF9XHh7MDNmNH0KKyAwOiBceHszOTh9XHh7M2I4fVx4ezNkMX1ceHszZjR9CisKKy9ceHswM2QxfSsvaSx1dGYKKyAgICBceHswMzk4fVx4ezAzYjh9XHh7MDNkMX1ceHswM2Y0fQorIDA6IFx4ezM5OH1ceHszYjh9XHh7M2QxfVx4ezNmNH0KKworL1x4ezAzZjR9Ky9pLHV0ZgorICAgIFx4ezAzOTh9XHh7MDNiOH1ceHswM2QxfVx4ezAzZjR9CisgMDogXHh7Mzk4fVx4ezNiOH1ceHszZDF9XHh7M2Y0fQorICAgIAorCisvXHh7MDM5YX0rL2ksdXRmCisgICAgXHh7MDM5YX1ceHswM2JhfVx4ezAzZjB9CisgMDogXHh7MzlhfVx4ezNiYX1ceHszZjB9CisKKy9ceHswM2JhfSsvaSx1dGYKKyAgICBceHswMzlhfVx4ezAzYmF9XHh7MDNmMH0KKyAwOiBceHszOWF9XHh7M2JhfVx4ezNmMH0KKworL1x4ezAzZjB9Ky9pLHV0ZgorICAgIFx4ezAzOWF9XHh7MDNiYX1ceHswM2YwfQorIDA6IFx4ezM5YX1ceHszYmF9XHh7M2YwfQorICAgIAorCisvXHh7MDNhMH0rL2ksdXRmCisgICAgXHh7MDNhMH1ceHswM2MwfVx4ezAzZDZ9IAorIDA6IFx4ezNhMH1ceHszYzB9XHh7M2Q2fQorCisvXHh7MDNjMH0rL2ksdXRmCisgICAgXHh7MDNhMH1ceHswM2MwfVx4ezAzZDZ9IAorIDA6IFx4ezNhMH1ceHszYzB9XHh7M2Q2fQorCisvXHh7MDNkNn0rL2ksdXRmCisgICAgXHh7MDNhMH1ceHswM2MwfVx4ezAzZDZ9IAorIDA6IFx4ezNhMH1ceHszYzB9XHh7M2Q2fQorCisKKy9ceHswM2ExfSsvaSx1dGYKKyAgICBceHswM2ExfVx4ezAzYzF9XHh7MDNmMX0KKyAwOiBceHszYTF9XHh7M2MxfVx4ezNmMX0KKworL1x4ezAzYzF9Ky9pLHV0ZgorICAgIFx4ezAzYTF9XHh7MDNjMX1ceHswM2YxfQorIDA6IFx4ezNhMX1ceHszYzF9XHh7M2YxfQorCisvXHh7MDNmMX0rL2ksdXRmCisgICAgXHh7MDNhMX1ceHswM2MxfVx4ezAzZjF9CisgMDogXHh7M2ExfVx4ezNjMX1ceHszZjF9CisKKworL1x4ezAzYTN9Ky9pLHV0ZgorICAgIFx4ezAzQTN9XHh7MDNDMn1ceHswM0MzfQorIDA6IFx4ezNhM31ceHszYzJ9XHh7M2MzfQorCisvXHh7MDNjMn0rL2ksdXRmCisgICAgXHh7MDNBM31ceHswM0MyfVx4ezAzQzN9CisgMDogXHh7M2EzfVx4ezNjMn1ceHszYzN9CisKKy9ceHswM2MzfSsvaSx1dGYKKyAgICBceHswM0EzfVx4ezAzQzJ9XHh7MDNDM30KKyAwOiBceHszYTN9XHh7M2MyfVx4ezNjM30KKyAgICAKKworL1x4ezAzYTZ9Ky9pLHV0ZgorICAgIFx4ezAzYTZ9XHh7MDNjNn1ceHswM2Q1fSAKKyAwOiBceHszYTZ9XHh7M2M2fVx4ezNkNX0KKworL1x4ezAzYzZ9Ky9pLHV0ZgorICAgIFx4ezAzYTZ9XHh7MDNjNn1ceHswM2Q1fSAKKyAwOiBceHszYTZ9XHh7M2M2fVx4ezNkNX0KKworL1x4ezAzZDV9Ky9pLHV0ZgorICAgIFx4ezAzYTZ9XHh7MDNjNn1ceHswM2Q1fSAKKyAwOiBceHszYTZ9XHh7M2M2fVx4ezNkNX0KKworCisvXHh7MDNjOX0rL2ksdXRmCisgICAgXHh7MDNjOX1ceHswM2E5fVx4ezIxMjZ9CisgMDogXHh7M2M5fVx4ezNhOX1ceHsyMTI2fQorCisvXHh7MDNhOX0rL2ksdXRmCisgICAgXHh7MDNjOX1ceHswM2E5fVx4ezIxMjZ9CisgMDogXHh7M2M5fVx4ezNhOX1ceHsyMTI2fQorCisvXHh7MjEyNn0rL2ksdXRmCisgICAgXHh7MDNjOX1ceHswM2E5fVx4ezIxMjZ9CisgMDogXHh7M2M5fVx4ezNhOX1ceHsyMTI2fQorICAgIAorCisvXHh7MWU2MH0rL2ksdXRmCisgICAgXHh7MWU2MH1ceHsxZTYxfVx4ezFlOWJ9CisgMDogXHh7MWU2MH1ceHsxZTYxfVx4ezFlOWJ9CisKKy9ceHsxZTYxfSsvaSx1dGYKKyAgICBceHsxZTYwfVx4ezFlNjF9XHh7MWU5Yn0KKyAwOiBceHsxZTYwfVx4ezFlNjF9XHh7MWU5Yn0KKworL1x4ezFlOWJ9Ky9pLHV0ZgorICAgIFx4ezFlNjB9XHh7MWU2MX1ceHsxZTlifQorIDA6IFx4ezFlNjB9XHh7MWU2MX1ceHsxZTlifQorICAgIAorCisvXHh7MWU5ZX0rL2ksdXRmCisgICAgXHh7MWU5ZX1ceHswMGRmfQorIDA6IFx4ezFlOWV9XHh7ZGZ9CisKKy9ceHswMGRmfSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisgMDogXHh7MWU5ZX1ceHtkZn0KKyAgICAKKworL1x4ezFmODh9Ky9pLHV0ZgorICAgIFx4ezFmODh9XHh7MWY4MH0gCisgMDogXHh7MWY4OH1ceHsxZjgwfQorCisvXHh7MWY4MH0rL2ksdXRmCisgICAgXHh7MWY4OH1ceHsxZjgwfSAKKyAwOiBceHsxZjg4fVx4ezFmODB9CisKKyMgUGVybCA1LjEyLjQgZ2V0cyB0aGVzZSB3cm9uZywgYnV0IDUuMTUuMyBpcyBPSyAKKworL1x4ezAwNGJ9Ky9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorIDA6IEtrXHh7MjEyYX0KKworL1x4ezAwNmJ9Ky9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorIDA6IEtrXHh7MjEyYX0KKworL1x4ezIxMmF9Ky9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorIDA6IEtrXHh7MjEyYX0KKworCisvXHh7MDA1M30rL2ksdXRmCisgICAgXHh7MDA1M31ceHswMDczfVx4ezAxN2Z9CisgMDogU3NceHsxN2Z9CisKKy9ceHswMDczfSsvaSx1dGYKKyAgICBceHswMDUzfVx4ezAwNzN9XHh7MDE3Zn0KKyAwOiBTc1x4ezE3Zn0KKworL1x4ezAxN2Z9Ky9pLHV0ZgorICAgIFx4ezAwNTN9XHh7MDA3M31ceHswMTdmfQorIDA6IFNzXHh7MTdmfQorCisvXlxwe0FueX0qXGR7NH0vdXRmCisgICAgMTIzNAorIDA6IDEyMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMyAKK05vIG1hdGNoCisKKy9eXFgqXHd7NH0vdXRmCisgICAgMTIzNAorIDA6IDEyMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMyAgCitObyBtYXRjaAorCisvXkFccytaL3V0Zix1Y3AKKyAgICBBXHh7MjAwNX1aCisgMDogQVx4ezIwMDV9WgorICAgIEFceHs4NX1ceHsyMDA1fVoKKyAwOiBBXHh7ODV9XHh7MjAwNX1aCisKKy9eQVtcc10rWi91dGYsdWNwCisgICAgQVx4ezIwMDV9WgorIDA6IEFceHsyMDA1fVoKKyAgICBBXHh7ODV9XHh7MjAwNX1aCisgMDogQVx4ezg1fVx4ezIwMDV9WgorCisvXltbOmdyYXBoOl1dKyQvdXRmLHVjcAorICAgIExldHRlcjpBQkMKKyAwOiBMZXR0ZXI6QUJDCisgICAgTWFyazpceHszMDB9XHh7MWQxNzJ9XHh7MWQxN2J9CisgMDogTWFyazpceHszMDB9XHh7MWQxNzJ9XHh7MWQxN2J9CisgICAgTnVtYmVyOjlceHs2NjB9CisgMDogTnVtYmVyOjlceHs2NjB9CisgICAgUHVuY3R1YXRpb246XHh7NjZhfSw7CisgMDogUHVuY3R1YXRpb246XHh7NjZhfSw7CisgICAgU3ltYm9sOlx4ezZkZX08Plx4e2ZmZmN9CisgMDogU3ltYm9sOlx4ezZkZX08Plx4e2ZmZmN9CisgICAgQ2YtcHJvcGVydHk6XHh7YWR9XHh7NjAwfVx4ezYwMX1ceHs2MDJ9XHh7NjAzfVx4ezYwNH1ceHs2ZGR9XHh7NzBmfQorIDA6IENmLXByb3BlcnR5Olx4e2FkfVx4ezYwMH1ceHs2MDF9XHh7NjAyfVx4ezYwM31ceHs2MDR9XHh7NmRkfVx4ezcwZn0KKyAgICBceHsyMDBifVx4ezIwMGN9XHh7MjAwZH1ceHsyMDBlfVx4ezIwMGZ9CisgMDogXHh7MjAwYn1ceHsyMDBjfVx4ezIwMGR9XHh7MjAwZX1ceHsyMDBmfQorICAgIFx4ezIwMmF9XHh7MjAyYn1ceHsyMDJjfVx4ezIwMmR9XHh7MjAyZX0KKyAwOiBceHsyMDJhfVx4ezIwMmJ9XHh7MjAyY31ceHsyMDJkfVx4ezIwMmV9CisgICAgXHh7MjA2MH1ceHsyMDYxfVx4ezIwNjJ9XHh7MjA2M31ceHsyMDY0fQorIDA6IFx4ezIwNjB9XHh7MjA2MX1ceHsyMDYyfVx4ezIwNjN9XHh7MjA2NH0KKyAgICBceHsyMDZhfVx4ezIwNmJ9XHh7MjA2Y31ceHsyMDZkfVx4ezIwNmV9XHh7MjA2Zn0KKyAwOiBceHsyMDZhfVx4ezIwNmJ9XHh7MjA2Y31ceHsyMDZkfVx4ezIwNmV9XHh7MjA2Zn0KKyAgICBceHtmZWZmfQorIDA6IFx4e2ZlZmZ9CisgICAgXHh7ZmZmOX1ceHtmZmZhfVx4e2ZmZmJ9CisgMDogXHh7ZmZmOX1ceHtmZmZhfVx4e2ZmZmJ9CisgICAgXHh7MTEwYmR9CisgMDogXHh7MTEwYmR9CisgICAgXHh7MWQxNzN9XHh7MWQxNzR9XHh7MWQxNzV9XHh7MWQxNzZ9XHh7MWQxNzd9XHh7MWQxNzh9XHh7MWQxNzl9XHh7MWQxN2F9CisgMDogXHh7MWQxNzN9XHh7MWQxNzR9XHh7MWQxNzV9XHh7MWQxNzZ9XHh7MWQxNzd9XHh7MWQxNzh9XHh7MWQxNzl9XHh7MWQxN2F9CisgICAgXHh7ZTAwMDF9CisgMDogXHh7ZTAwMDF9CisgICAgXHh7ZTAwMjB9XHh7ZTAwMzB9XHh7ZTAwNDB9XHh7ZTAwNTB9XHh7ZTAwNjB9XHh7ZTAwNzB9XHh7ZTAwN2Z9CisgMDogXHh7ZTAwMjB9XHh7ZTAwMzB9XHh7ZTAwNDB9XHh7ZTAwNTB9XHh7ZTAwNjB9XHh7ZTAwNzB9XHh7ZTAwN2Z9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHswOX0KK05vIG1hdGNoCisgICAgXHh7MGF9CitObyBtYXRjaAorICAgIFx4ezFEfQorTm8gbWF0Y2gKKyAgICBceHsyMH0KK05vIG1hdGNoCisgICAgXHh7ODV9CitObyBtYXRjaAorICAgIFx4e2EwfQorTm8gbWF0Y2gKKyAgICBceHsxNjgwfQorTm8gbWF0Y2gKKyAgICBceHsyMDI4fQorTm8gbWF0Y2gKKyAgICBceHsyMDI5fQorTm8gbWF0Y2gKKyAgICBceHsyMDJmfQorTm8gbWF0Y2gKKyAgICBceHsyMDY1fQorTm8gbWF0Y2gKKyAgICBceHszMDAwfQorTm8gbWF0Y2gKKyAgICBceHtlMDAwMn0KK05vIG1hdGNoCisgICAgXHh7ZTAwMWZ9CitObyBtYXRjaAorICAgIFx4e2UwMDgwfSAKK05vIG1hdGNoCisKKy9eW1s6cHJpbnQ6XV0rJC91dGYsdWNwCisgICAgU3BhY2U6IFx4e2EwfQorIDA6IFNwYWNlOiBceHthMH0KKyAgICBceHsxNjgwfVx4ezIwMDB9XHh7MjAwMX1ceHsyMDAyfVx4ezIwMDN9XHh7MjAwNH1ceHsyMDA1fQorIDA6IFx4ezE2ODB9XHh7MjAwMH1ceHsyMDAxfVx4ezIwMDJ9XHh7MjAwM31ceHsyMDA0fVx4ezIwMDV9CisgICAgXHh7MjAwNn1ceHsyMDA3fVx4ezIwMDh9XHh7MjAwOX1ceHsyMDBhfSAKKyAwOiBceHsyMDA2fVx4ezIwMDd9XHh7MjAwOH1ceHsyMDA5fVx4ezIwMGF9CisgICAgXHh7MjAyZn1ceHsyMDVmfSAKKyAwOiBceHsyMDJmfVx4ezIwNWZ9CisgICAgXHh7MzAwMH0KKyAwOiBceHszMDAwfQorICAgIExldHRlcjpBQkMKKyAwOiBMZXR0ZXI6QUJDCisgICAgTWFyazpceHszMDB9XHh7MWQxNzJ9XHh7MWQxN2J9CisgMDogTWFyazpceHszMDB9XHh7MWQxNzJ9XHh7MWQxN2J9CisgICAgTnVtYmVyOjlceHs2NjB9CisgMDogTnVtYmVyOjlceHs2NjB9CisgICAgUHVuY3R1YXRpb246XHh7NjZhfSw7CisgMDogUHVuY3R1YXRpb246XHh7NjZhfSw7CisgICAgU3ltYm9sOlx4ezZkZX08Plx4e2ZmZmN9CisgMDogU3ltYm9sOlx4ezZkZX08Plx4e2ZmZmN9CisgICAgQ2YtcHJvcGVydHk6XHh7YWR9XHh7NjAwfVx4ezYwMX1ceHs2MDJ9XHh7NjAzfVx4ezYwNH1ceHs2ZGR9XHh7NzBmfQorIDA6IENmLXByb3BlcnR5Olx4e2FkfVx4ezYwMH1ceHs2MDF9XHh7NjAyfVx4ezYwM31ceHs2MDR9XHh7NmRkfVx4ezcwZn0KKyAgICBceHsyMDBifVx4ezIwMGN9XHh7MjAwZH1ceHsyMDBlfVx4ezIwMGZ9CisgMDogXHh7MjAwYn1ceHsyMDBjfVx4ezIwMGR9XHh7MjAwZX1ceHsyMDBmfQorICAgIFx4ezIwMmF9XHh7MjAyYn1ceHsyMDJjfVx4ezIwMmR9XHh7MjAyZX0KKyAwOiBceHsyMDJhfVx4ezIwMmJ9XHh7MjAyY31ceHsyMDJkfVx4ezIwMmV9CisgICAgXHh7MjAyZn0KKyAwOiBceHsyMDJmfQorICAgIFx4ezIwNjB9XHh7MjA2MX1ceHsyMDYyfVx4ezIwNjN9XHh7MjA2NH0KKyAwOiBceHsyMDYwfVx4ezIwNjF9XHh7MjA2Mn1ceHsyMDYzfVx4ezIwNjR9CisgICAgXHh7MjA2YX1ceHsyMDZifVx4ezIwNmN9XHh7MjA2ZH1ceHsyMDZlfVx4ezIwNmZ9CisgMDogXHh7MjA2YX1ceHsyMDZifVx4ezIwNmN9XHh7MjA2ZH1ceHsyMDZlfVx4ezIwNmZ9CisgICAgXHh7ZmVmZn0KKyAwOiBceHtmZWZmfQorICAgIFx4e2ZmZjl9XHh7ZmZmYX1ceHtmZmZifQorIDA6IFx4e2ZmZjl9XHh7ZmZmYX1ceHtmZmZifQorICAgIFx4ezExMGJkfQorIDA6IFx4ezExMGJkfQorICAgIFx4ezFkMTczfVx4ezFkMTc0fVx4ezFkMTc1fVx4ezFkMTc2fVx4ezFkMTc3fVx4ezFkMTc4fVx4ezFkMTc5fVx4ezFkMTdhfQorIDA6IFx4ezFkMTczfVx4ezFkMTc0fVx4ezFkMTc1fVx4ezFkMTc2fVx4ezFkMTc3fVx4ezFkMTc4fVx4ezFkMTc5fVx4ezFkMTdhfQorICAgIFx4e2UwMDAxfQorIDA6IFx4e2UwMDAxfQorICAgIFx4e2UwMDIwfVx4e2UwMDMwfVx4e2UwMDQwfVx4e2UwMDUwfVx4e2UwMDYwfVx4e2UwMDcwfVx4e2UwMDdmfQorIDA6IFx4e2UwMDIwfVx4e2UwMDMwfVx4e2UwMDQwfVx4e2UwMDUwfVx4e2UwMDYwfVx4e2UwMDcwfVx4e2UwMDdmfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MDl9CitObyBtYXRjaAorICAgIFx4ezFEfQorTm8gbWF0Y2gKKyAgICBceHs4NX0KK05vIG1hdGNoCisgICAgXHh7MjAyOH0KK05vIG1hdGNoCisgICAgXHh7MjAyOX0KK05vIG1hdGNoCisgICAgXHh7MjA2NX0KK05vIG1hdGNoCisgICAgXHh7ZTAwMDJ9CitObyBtYXRjaAorICAgIFx4e2UwMDFmfQorTm8gbWF0Y2gKKyAgICBceHtlMDA4MH0gCitObyBtYXRjaAorCisvXltbOnB1bmN0Ol1dKyQvdXRmLHVjcAorICAgIFwkKzw9Pl5gfH4KKyAwOiAkKzw9Pl5gfH4KKyAgICAhXCIjJSYnKCkqLC0uLzo7P0BbXFxdX3t9CisgMDogISIjJSYnKCkqLC0uLzo7P0BbXF1fe30KKyAgICBceHthMX1ceHthN30gIAorIDA6IFx4e2ExfVx4e2E3fQorICAgIFx4ezM3ZX0gCisgMDogXHh7MzdlfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGUgIAorTm8gbWF0Y2gKKworL15bWzpeZ3JhcGg6XV0rJC91dGYsdWNwCisgICAgXHh7MDl9XHh7MGF9XHh7MUR9XHh7MjB9XHh7ODV9XHh7YTB9XHh7MTY4MH0KKyAwOiBceHswOX1ceHswYX1ceHsxZH0gXHh7ODV9XHh7YTB9XHh7MTY4MH0KKyAgICBceHsyMDI4fVx4ezIwMjl9XHh7MjAyZn1ceHsyMDY1fQorIDA6IFx4ezIwMjh9XHh7MjAyOX1ceHsyMDJmfVx4ezIwNjV9CisgICAgXHh7MzAwMH1ceHtlMDAwMn1ceHtlMDAxZn1ceHtlMDA4MH0KKyAwOiBceHszMDAwfVx4e2UwMDAyfVx4e2UwMDFmfVx4e2UwMDgwfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgTGV0dGVyOkFCQworTm8gbWF0Y2gKKyAgICBNYXJrOlx4ezMwMH1ceHsxZDE3Mn1ceHsxZDE3Yn0KK05vIG1hdGNoCisgICAgTnVtYmVyOjlceHs2NjB9CitObyBtYXRjaAorICAgIFB1bmN0dWF0aW9uOlx4ezY2YX0sOworTm8gbWF0Y2gKKyAgICBTeW1ib2w6XHh7NmRlfTw+XHh7ZmZmY30KK05vIG1hdGNoCisgICAgQ2YtcHJvcGVydHk6XHh7YWR9XHh7NjAwfVx4ezYwMX1ceHs2MDJ9XHh7NjAzfVx4ezYwNH1ceHs2ZGR9XHh7NzBmfQorTm8gbWF0Y2gKKyAgICBceHsyMDBifVx4ezIwMGN9XHh7MjAwZH1ceHsyMDBlfVx4ezIwMGZ9CitObyBtYXRjaAorICAgIFx4ezIwMmF9XHh7MjAyYn1ceHsyMDJjfVx4ezIwMmR9XHh7MjAyZX0KK05vIG1hdGNoCisgICAgXHh7MjA2MH1ceHsyMDYxfVx4ezIwNjJ9XHh7MjA2M31ceHsyMDY0fQorTm8gbWF0Y2gKKyAgICBceHsyMDZhfVx4ezIwNmJ9XHh7MjA2Y31ceHsyMDZkfVx4ezIwNmV9XHh7MjA2Zn0KK05vIG1hdGNoCisgICAgXHh7ZmVmZn0KK05vIG1hdGNoCisgICAgXHh7ZmZmOX1ceHtmZmZhfVx4e2ZmZmJ9CitObyBtYXRjaAorICAgIFx4ezExMGJkfQorTm8gbWF0Y2gKKyAgICBceHsxZDE3M31ceHsxZDE3NH1ceHsxZDE3NX1ceHsxZDE3Nn1ceHsxZDE3N31ceHsxZDE3OH1ceHsxZDE3OX1ceHsxZDE3YX0KK05vIG1hdGNoCisgICAgXHh7ZTAwMDF9CitObyBtYXRjaAorICAgIFx4e2UwMDIwfVx4e2UwMDMwfVx4e2UwMDQwfVx4e2UwMDUwfVx4e2UwMDYwfVx4e2UwMDcwfVx4e2UwMDdmfQorTm8gbWF0Y2gKKworL15bWzpecHJpbnQ6XV0rJC91dGYsdWNwCisgICAgXHh7MDl9XHh7MUR9XHh7ODV9XHh7MjAyOH1ceHsyMDI5fVx4ezIwNjV9CisgMDogXHh7MDl9XHh7MWR9XHh7ODV9XHh7MjAyOH1ceHsyMDI5fVx4ezIwNjV9CisgICAgXHh7ZTAwMDJ9XHh7ZTAwMWZ9XHh7ZTAwODB9CisgMDogXHh7ZTAwMDJ9XHh7ZTAwMWZ9XHh7ZTAwODB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBTcGFjZTogXHh7YTB9CitObyBtYXRjaAorICAgIFx4ezE2ODB9XHh7MjAwMH1ceHsyMDAxfVx4ezIwMDJ9XHh7MjAwM31ceHsyMDA0fVx4ezIwMDV9CitObyBtYXRjaAorICAgIFx4ezIwMDZ9XHh7MjAwN31ceHsyMDA4fVx4ezIwMDl9XHh7MjAwYX0gCitObyBtYXRjaAorICAgIFx4ezIwMmZ9XHh7MjA1Zn0gCitObyBtYXRjaAorICAgIFx4ezMwMDB9CitObyBtYXRjaAorICAgIExldHRlcjpBQkMKK05vIG1hdGNoCisgICAgTWFyazpceHszMDB9XHh7MWQxNzJ9XHh7MWQxN2J9CitObyBtYXRjaAorICAgIE51bWJlcjo5XHh7NjYwfQorTm8gbWF0Y2gKKyAgICBQdW5jdHVhdGlvbjpceHs2NmF9LDsKK05vIG1hdGNoCisgICAgU3ltYm9sOlx4ezZkZX08Plx4e2ZmZmN9CitObyBtYXRjaAorICAgIENmLXByb3BlcnR5Olx4e2FkfVx4ezYwMH1ceHs2MDF9XHh7NjAyfVx4ezYwM31ceHs2MDR9XHh7NmRkfVx4ezcwZn0KK05vIG1hdGNoCisgICAgXHh7MjAwYn1ceHsyMDBjfVx4ezIwMGR9XHh7MjAwZX1ceHsyMDBmfQorTm8gbWF0Y2gKKyAgICBceHsyMDJhfVx4ezIwMmJ9XHh7MjAyY31ceHsyMDJkfVx4ezIwMmV9CitObyBtYXRjaAorICAgIFx4ezIwMmZ9CitObyBtYXRjaAorICAgIFx4ezIwNjB9XHh7MjA2MX1ceHsyMDYyfVx4ezIwNjN9XHh7MjA2NH0KK05vIG1hdGNoCisgICAgXHh7MjA2YX1ceHsyMDZifVx4ezIwNmN9XHh7MjA2ZH1ceHsyMDZlfVx4ezIwNmZ9CitObyBtYXRjaAorICAgIFx4e2ZlZmZ9CitObyBtYXRjaAorICAgIFx4e2ZmZjl9XHh7ZmZmYX1ceHtmZmZifQorTm8gbWF0Y2gKKyAgICBceHsxMTBiZH0KK05vIG1hdGNoCisgICAgXHh7MWQxNzN9XHh7MWQxNzR9XHh7MWQxNzV9XHh7MWQxNzZ9XHh7MWQxNzd9XHh7MWQxNzh9XHh7MWQxNzl9XHh7MWQxN2F9CitObyBtYXRjaAorICAgIFx4e2UwMDAxfQorTm8gbWF0Y2gKKyAgICBceHtlMDAyMH1ceHtlMDAzMH1ceHtlMDA0MH1ceHtlMDA1MH1ceHtlMDA2MH1ceHtlMDA3MH1ceHtlMDA3Zn0KK05vIG1hdGNoCisKKy9eW1s6XnB1bmN0Ol1dKyQvdXRmLHVjcAorICAgIGFiY2RlICAKKyAwOiBhYmNkZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXCQrPD0+XmB8fgorTm8gbWF0Y2gKKyAgICAhXCIjJSYnKCkqLC0uLzo7P0BbXFxdX3t9CitObyBtYXRjaAorICAgIFx4e2ExfVx4e2E3fSAgCitObyBtYXRjaAorICAgIFx4ezM3ZX0gCitObyBtYXRjaAorCisvW1JTVF0rL2ksdXRmLHVjcAorICAgIFNzXHh7MTdmfQorIDA6IFNzXHh7MTdmfQorICAgIAorL1tSLVRdKy9pLHV0Zix1Y3AKKyAgICBTc1x4ezE3Zn0KKyAwOiBTc1x4ezE3Zn0KKworL1txLXVdKy9pLHV0Zix1Y3AKKyAgICBTc1x4ezE3Zn0KKyAwOiBTc1x4ezE3Zn0KKworL15zP2MvaW0sdXRmCisgICAgc2NhdAorIDA6IHNjCisgICAgCisjIFRoZSBuZXh0IGZvdXIgdGVzdHMgYXJlIGZvciByZXBlYXRlZCBjYXNlbGVzcyBiYWNrIHJlZmVyZW5jZXMgd2hlbiB0aGUgCisjIGNvZGUgdW5pdCBsZW5ndGggb2YgdGhlIG1hdGNoZWQgdGV4dCBpcyBkaWZmZXJlbnQgdG8gdGhhdCBvZiB0aGUgb3JpZ2luYWwKKyMgZ3JvdXAgaW4gdGhlIFVURi04IGNhc2UuCisKKy9eKFx4ezIzYX0pXDEqKC4pL2ksdXRmCisgICAgXHh7MjNhfVx4ezIzYX1ceHsyM2F9XHh7MjNhfQorIDA6IFx4ezIzYX1ceHsyM2F9XHh7MjNhfVx4ezIzYX0KKyAxOiBceHsyM2F9CisgMjogXHh7MjNhfQorICAgIFx4ezIzYX1ceHsyYzY1fVx4ezJjNjV9XHh7MmM2NX0KKyAwOiBceHsyM2F9XHh7MmM2NX1ceHsyYzY1fVx4ezJjNjV9CisgMTogXHh7MjNhfQorIDI6IFx4ezJjNjV9CisgICAgXHh7MjNhfVx4ezIzYX1ceHsyYzY1fVx4ezIzYX0KKyAwOiBceHsyM2F9XHh7MjNhfVx4ezJjNjV9XHh7MjNhfQorIDE6IFx4ezIzYX0KKyAyOiBceHsyM2F9CisKKy9eKFx4ezIzYX0pXDEqKC4uKS9pLHV0ZgorICAgIFx4ezIzYX1ceHsyYzY1fVx4ezJjNjV9XHh7MmM2NX0KKyAwOiBceHsyM2F9XHh7MmM2NX1ceHsyYzY1fVx4ezJjNjV9CisgMTogXHh7MjNhfQorIDI6IFx4ezJjNjV9XHh7MmM2NX0KKyAgICBceHsyM2F9XHh7MjNhfVx4ezJjNjV9XHh7MjNhfQorIDA6IFx4ezIzYX1ceHsyM2F9XHh7MmM2NX1ceHsyM2F9CisgMTogXHh7MjNhfQorIDI6IFx4ezJjNjV9XHh7MjNhfQorCisvXihceHsyM2F9KVwxKiguLi4pL2ksdXRmCisgICAgXHh7MjNhfVx4ezJjNjV9XHh7MmM2NX1ceHsyYzY1fQorIDA6IFx4ezIzYX1ceHsyYzY1fVx4ezJjNjV9XHh7MmM2NX0KKyAxOiBceHsyM2F9CisgMjogXHh7MmM2NX1ceHsyYzY1fVx4ezJjNjV9CisgICAgXHh7MjNhfVx4ezIzYX1ceHsyYzY1fVx4ezIzYX0KKyAwOiBceHsyM2F9XHh7MjNhfVx4ezJjNjV9XHh7MjNhfQorIDE6IFx4ezIzYX0KKyAyOiBceHsyM2F9XHh7MmM2NX1ceHsyM2F9CisKKy9eKFx4ezIzYX0pXDEqKC4uLi4pL2ksdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsyM2F9XHh7MmM2NX1ceHsyYzY1fVx4ezJjNjV9CitObyBtYXRjaAorICAgIFx4ezIzYX1ceHsyM2F9XHh7MmM2NX1ceHsyM2F9CitObyBtYXRjaAorCisvW0EtYF0vaSx1dGYKKyAgICBhYmNkZWZnaGlqa2xtbm8KKyAwOiBhCisKKyJbXFNcVlxIXSJ1dGYKKworL1teXHB7QW55fV0qK3gvdXRmCisgICAgeAorIDA6IHgKKworL1tbOnB1bmN0Ol1dL3V0Zix1Y3AKKyAgICBceHtiNH0gCitObyBtYXRjaAorCisvW1s6XmFzY2lpOl1dL3V0Zix1Y3AKKyAgICBceHsxMDB9CisgMDogXHh7MTAwfQorICAgIFx4ezIwMH0KKyAwOiBceHsyMDB9CisgICAgXHh7MzAwfQorIDA6IFx4ezMwMH0KKyAgICBceHszN2V9CisgMDogXHh7MzdlfQorXD0gRXhwZWN0IG5vIG1hdGNoICAgICAKKyAgICBhYQorTm8gbWF0Y2gKKyAgICA5OQorTm8gbWF0Y2gKKyAgICAKKy9bWzpeYXNjaWk6XVx3XS91dGYsdWNwCisgICAgYWEKKyAwOiBhCisgICAgOTkKKyAwOiA5CisgICAgZ2cKKyAwOiBnCisgICAgXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBceHsyMDB9CisgMDogXHh7MjAwfQorICAgIFx4ezMwMH0KKyAwOiBceHszMDB9CisgICAgXHh7MzdlfQorIDA6IFx4ezM3ZX0KKworL1tcd1s6XmFzY2lpOl1dL3V0Zix1Y3AKKyAgICBhYQorIDA6IGEKKyAgICA5OQorIDA6IDkKKyAgICBnZworIDA6IGcKKyAgICBceHsxMDB9CisgMDogXHh7MTAwfQorICAgIFx4ezIwMH0KKyAwOiBceHsyMDB9CisgICAgXHh7MzAwfQorIDA6IFx4ezMwMH0KKyAgICBceHszN2V9CisgMDogXHh7MzdlfQorCisvW15bOmFzY2lpOl1cV10vdXRmLHVjcAorICAgIFx4ezEwMH0KKyAwOiBceHsxMDB9CisgICAgXHh7MjAwfQorIDA6IFx4ezIwMH0KK1w9IEV4cGVjdCBubyBtYXRjaCAgICAgCisgICAgYWEKK05vIG1hdGNoCisgICAgOTkKK05vIG1hdGNoCisgICAgZ2cKK05vIG1hdGNoCisgICAgXHh7MzdlfQorTm8gbWF0Y2gKKworL1teWzpeYXNjaWk6XVxkXS91dGYsdWNwCisgICAgYQorIDA6IGEKKyAgICB+CisgMDogfgorICAgIFxhCisgMDogXHh7MDd9CisgICAgXHh7N2Z9CisgMDogXHh7N2Z9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAwCitObyBtYXRjaAorICAgIFx4ezM4OX0KK05vIG1hdGNoCisgICAgXHh7MjBhY30KK05vIG1hdGNoCisKKyMgRW5kIG9mIHRlc3RpbnB1dDQKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ1IGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE5YWQ4YwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ1CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ2IGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFlMDkyYgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ2CkBAIC0wLDAgKzEsNzY3NiBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBjaGVjayB0aGUgREZBIG1hdGNoaW5nIGZ1bmN0aW9uYWxpdHkgb2YgcGNyZTJfZGZhX21hdGNoKCksCisjIGV4Y2x1ZGluZyBVVEYgYW5kIFVuaWNvZGUgcHJvcGVydHkgc3VwcG9ydC4gQWxsIG1hdGNoZXMgYXJlIGRvbmUgdXNpbmcgREZBLAorIyBmb3JjZWQgYnkgc2V0dGluZyBhIGRlZmF1bHQgc3ViamVjdCBtb2RpZmllciBhdCB0aGUgc3RhcnQuCisgICAgCisjZm9yYmlkX3V0ZgorI3N1YmplY3QgZGZhCisjbmV3bGluZV9kZWZhdWx0IGxmIGFueWNybGYgYW55CisgICAgIAorL2FiYy8KKyAgICBhYmMKKyAwOiBhYmMKKyAgICAKKy9hYipjLworICAgIGFiYworIDA6IGFiYworICAgIGFiYmJiYworIDA6IGFiYmJiYworICAgIGFjCisgMDogYWMKKyAgICAKKy9hYitjLworICAgIGFiYworIDA6IGFiYworICAgIGFiYmJiYmJjCisgMDogYWJiYmJiYmMKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYworTm8gbWF0Y2gKKyAgICBhYgorTm8gbWF0Y2gKKyAgICAKKy9hKi9ub19hdXRvX3Bvc3Nlc3MKKyAgICBhCisgMDogYQorIDE6IAorICAgIGFhYWFhYWFhYWFhYWFhYWFhCitNYXRjaGVkLCBidXQgb2Zmc2V0cyB2ZWN0b3IgaXMgdG9vIHNtYWxsIHRvIHNob3cgYWxsIG1hdGNoZXMKKyAwOiBhYWFhYWFhYWFhYWFhYWFhYQorIDE6IGFhYWFhYWFhYWFhYWFhYWEKKyAyOiBhYWFhYWFhYWFhYWFhYWEKKyAzOiBhYWFhYWFhYWFhYWFhYQorIDQ6IGFhYWFhYWFhYWFhYWEKKyA1OiBhYWFhYWFhYWFhYWEKKyA2OiBhYWFhYWFhYWFhYQorIDc6IGFhYWFhYWFhYWEKKyA4OiBhYWFhYWFhYWEKKyA5OiBhYWFhYWFhYQorMTA6IGFhYWFhYWEKKzExOiBhYWFhYWEKKzEyOiBhYWFhYQorMTM6IGFhYWEKKzE0OiBhYWEKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFcPW92ZWN0b3I9MTAgCitNYXRjaGVkLCBidXQgb2Zmc2V0cyB2ZWN0b3IgaXMgdG9vIHNtYWxsIHRvIHNob3cgYWxsIG1hdGNoZXMKKyAwOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAxOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDI6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAzOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA0OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDU6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA2OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA3OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDg6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA5OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFcPWRmYV9zaG9ydGVzdAorIDA6IAorICAgIAorLyhhfGFiY2R8YWZyaWNhbikvCisgICAgYQorIDA6IGEKKyAgICBhYmNkCisgMDogYWJjZAorIDE6IGEKKyAgICBhZnJpY2FuCisgMDogYWZyaWNhbgorIDE6IGEKKyAgICAKKy9eYWJjLworICAgIGFiY2RlZgorIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6YWJjCitObyBtYXRjaAorICAgIHh5elxuYWJjICAgIAorTm8gbWF0Y2gKKyAgICAKKy9eYWJjL20KKyAgICBhYmNkZWYKKyAwOiBhYmMKKyAgICB4eXpcbmFiYyAgICAKKyAwOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5emFiYworTm8gbWF0Y2gKKyAgICAKKy9cQWFiYy8KKyAgICBhYmNkZWYKKyAwOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5emFiYworTm8gbWF0Y2gKKyAgICB4eXpcbmFiYyAgICAKK05vIG1hdGNoCisgICAgCisvXEFhYmMvbQorICAgIGFiY2RlZgorIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6YWJjCitObyBtYXRjaAorICAgIHh5elxuYWJjICAgIAorTm8gbWF0Y2gKKyAgICAKKy9cR2FiYy8KKyAgICBhYmNkZWYKKyAwOiBhYmMKKyAgICB4eXphYmNcPW9mZnNldD0zCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXphYmMgICAgCitObyBtYXRjaAorICAgIHh5emFiY1w9b2Zmc2V0PTIKK05vIG1hdGNoCisgICAgCisveFxkeVxEei8KKyAgICB4OXl6egorIDA6IHg5eXp6CisgICAgeDB5K3oKKyAwOiB4MHkregorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6CitObyBtYXRjaAorICAgIHh4eTB6ICAgICAKK05vIG1hdGNoCisgICAgCisveFxzeVxTei8KKyAgICB4IHl6egorIDA6IHggeXp6CisgICAgeCB5K3oKKyAwOiB4IHkregorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6CitObyBtYXRjaAorICAgIHh4eXl6CitObyBtYXRjaAorICAgIAorL3hcd3lcV3ovCisgICAgeHh5K3oKKyAwOiB4eHkregorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHh5MHoKK05vIG1hdGNoCisgICAgeCt5K3ogICAgICAgICAKK05vIG1hdGNoCisgICAgCisveC55LworICAgIHgreQorIDA6IHgreQorICAgIHgteQorIDA6IHgteQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeFxueQorTm8gbWF0Y2gKKyAgICAKKy94LnkvcworICAgIHgreQorIDA6IHgreQorICAgIHgteQorIDA6IHgteQorICAgIHhcbnkKKyAwOiB4XHgwYXkKKworLyhhLmIoP3MpYy5kfHgueSlwLnEvCisgICAgYStiYytkcCtxCisgMDogYStiYytkcCtxCisgICAgYStiY1xuZHArcQorIDA6IGErYmNceDBhZHArcQorICAgIHhcbnlwK3EgCisgMDogeFx4MGF5cCtxCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYVxuYmNcbmRwK3EKK05vIG1hdGNoCisgICAgYStiY1xuZHBcbnEKK05vIG1hdGNoCisgICAgeFxueXBcbnEgCitObyBtYXRjaAorCisvYVxkXHovCisgICAgYmEwCisgMDogYTAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhMFxuCitObyBtYXRjaAorICAgIGJhMFxuY2QgICAKK05vIG1hdGNoCisKKy9hXGRcei9tCisgICAgYmEwCisgMDogYTAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhMFxuCitObyBtYXRjaAorICAgIGJhMFxuY2QgICAKK05vIG1hdGNoCisKKy9hXGRcWi8KKyAgICBiYTAKKyAwOiBhMAorICAgIGJhMFxuCisgMDogYTAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhMFxuY2QgICAKK05vIG1hdGNoCisKKy9hXGRcWi9tCisgICAgYmEwCisgMDogYTAKKyAgICBiYTBcbgorIDA6IGEwCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYTBcbmNkICAgCitObyBtYXRjaAorCisvYVxkJC8KKyAgICBiYTAKKyAwOiBhMAorICAgIGJhMFxuCisgMDogYTAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhMFxuY2QgICAKK05vIG1hdGNoCisKKy9hXGQkL20KKyAgICBiYTAKKyAwOiBhMAorICAgIGJhMFxuCisgMDogYTAKKyAgICBiYTBcbmNkICAgCisgMDogYTAKKworL2FiYy9pCisgICAgYWJjCisgMDogYWJjCisgICAgYUJjCisgMDogYUJjCisgICAgQUJDCisgMDogQUJDCisgICAgCisvW15hXS8KKyAgICBhYmNkCisgMDogYgorICAgIAorL2FiP1x3LworICAgIGFiegorIDA6IGFiegorIDE6IGFiCisgICAgYWJiegorIDA6IGFiYgorIDE6IGFiCisgICAgYXp6ICAKKyAwOiBhegorCisveHswLDN9eXovCisgICAgYXl6cQorIDA6IHl6CisgICAgYXh5enEKKyAwOiB4eXoKKyAgICBheHh5egorIDA6IHh4eXoKKyAgICBheHh4eXpxCisgMDogeHh4eXoKKyAgICBheHh4eHl6cQorIDA6IHh4eHl6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBheAorTm8gbWF0Y2gKKyAgICBheHggICAgIAorTm8gbWF0Y2gKKyAgICAgIAorL3h7M315ei8KKyAgICBheHh4eXpxCisgMDogeHh4eXoKKyAgICBheHh4eHl6cQorIDA6IHh4eHl6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBheAorTm8gbWF0Y2gKKyAgICBheHggICAgIAorTm8gbWF0Y2gKKyAgICBheXpxCitObyBtYXRjaAorICAgIGF4eXpxCitObyBtYXRjaAorICAgIGF4eHl6CitObyBtYXRjaAorICAgICAgCisveHsyLDN9eXovCisgICAgYXh4eXoKKyAwOiB4eHl6CisgICAgYXh4eHl6cQorIDA6IHh4eHl6CisgICAgYXh4eHh5enEKKyAwOiB4eHh5egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYXgKK05vIG1hdGNoCisgICAgYXh4ICAgICAKK05vIG1hdGNoCisgICAgYXl6cQorTm8gbWF0Y2gKKyAgICBheHl6cQorTm8gbWF0Y2gKKyAgICAgIAorL1teYV0rL25vX2F1dG9fcG9zc2VzcworICAgIGJhYworIDA6IGIKKyAgICBiY2RlZmF4CisgMDogYmNkZWYKKyAxOiBiY2RlCisgMjogYmNkCisgMzogYmMKKyA0OiBiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhYSAgIAorTm8gbWF0Y2gKKworL1teYV0qL25vX2F1dG9fcG9zc2VzcworICAgIGJhYworIDA6IGIKKyAxOiAKKyAgICBiY2RlZmF4CisgMDogYmNkZWYKKyAxOiBiY2RlCisgMjogYmNkCisgMzogYmMKKyA0OiBiCisgNTogCisgICAgYWFhYWEgICAKKyAwOiAKKyAgICAKKy9bXmFdezMsNX0vbm9fYXV0b19wb3NzZXNzCisgICAgeHl6CisgMDogeHl6CisgICAgYXd4eXphCisgMDogd3h5egorIDE6IHd4eQorICAgIGFiY2RlZmEKKyAwOiBiY2RlZgorIDE6IGJjZGUKKyAyOiBiY2QKKyAgICBhYmNkZWZnaGlqaworIDA6IGJjZGVmCisgMTogYmNkZQorIDI6IGJjZAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYXh5YQorTm8gbWF0Y2gKKyAgICBheGEKK05vIG1hdGNoCisgICAgYWFhYWEgICAgICAgICAKK05vIG1hdGNoCisKKy9cZCovCisgICAgMTIzNGI1NjcKKyAwOiAxMjM0CisgICAgeHl6CisgMDogCisgICAgCisvXEQqLworICAgIGExMjM0YjU2NworIDA6IGEKKyAgICB4eXoKKyAwOiB4eXoKKyAgICAgCisvXGQrLworICAgIGFiMTIzNGM1NgorIDA6IDEyMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5egorTm8gbWF0Y2gKKyAgICAKKy9cRCsvCisgICAgYWIxMjNjNTYKKyAwOiBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgNzg5CitObyBtYXRjaAorICAgIAorL1xkP0EvCisgICAgMDQ1QUJDCisgMDogNUEKKyAgICBBQkMKKyAwOiBBCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYWVoKK05vIG1hdGNoCisgICAgCisvXEQ/QS8KKyAgICBBQkMKKyAwOiBBCisgICAgQkFDCisgMDogQkEKKyAgICA5QUJDICAgICAgICAgICAgIAorIDA6IEEKKworL2ErLworICAgIGFhYWEKKyAwOiBhYWFhCisKKy9eLip4eXovCisgICAgeHl6CisgMDogeHl6CisgICAgZ2dnZ2dnZ2d4eXoKKyAwOiBnZ2dnZ2dnZ3h5egorICAgIAorL14uK3h5ei8KKyAgICBhYmNkeHl6CisgMDogYWJjZHh5egorICAgIGF4eXoKKyAwOiBheHl6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXoKK05vIG1hdGNoCisgICAgCisvXi4/eHl6LworICAgIHh5egorIDA6IHh5egorICAgIGN4eXogICAgICAgCisgMDogY3h5egorCisvXlxkezIsM31YLworICAgIDEyWAorIDA6IDEyWAorICAgIDEyM1gKKyAwOiAxMjNYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgIDFYCitObyBtYXRjaAorICAgIDEyMzRYICAgICAKK05vIG1hdGNoCisKKy9eW2FiY2RdXGQvCisgICAgYTQ1CisgMDogYTQKKyAgICBiOTMKKyAwOiBiOQorICAgIGM5OXoKKyAwOiBjOQorICAgIGQwNAorIDA6IGQwCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBlNDUKK05vIG1hdGNoCisgICAgYWJjZCAgICAgIAorTm8gbWF0Y2gKKyAgICBhYmNkMTIzNAorTm8gbWF0Y2gKKyAgICAxMjM0ICAKK05vIG1hdGNoCisKKy9eW2FiY2RdKlxkLworICAgIGE0NQorIDA6IGE0CisgICAgYjkzCisgMDogYjkKKyAgICBjOTl6CisgMDogYzkKKyAgICBkMDQKKyAwOiBkMAorICAgIGFiY2QxMjM0CisgMDogYWJjZDEKKyAgICAxMjM0ICAKKyAwOiAxCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBlNDUKK05vIG1hdGNoCisgICAgYWJjZCAgICAgIAorTm8gbWF0Y2gKKworL15bYWJjZF0rXGQvCisgICAgYTQ1CisgMDogYTQKKyAgICBiOTMKKyAwOiBiOQorICAgIGM5OXoKKyAwOiBjOQorICAgIGQwNAorIDA6IGQwCisgICAgYWJjZDEyMzQKKyAwOiBhYmNkMQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNCAgCitObyBtYXRjaAorICAgIGU0NQorTm8gbWF0Y2gKKyAgICBhYmNkICAgICAgCitObyBtYXRjaAorCisvXmErWC8KKyAgICBhWAorIDA6IGFYCisgICAgYWFYIAorIDA6IGFhWAorCisvXlthYmNkXT9cZC8KKyAgICBhNDUKKyAwOiBhNAorICAgIGI5MworIDA6IGI5CisgICAgYzk5egorIDA6IGM5CisgICAgZDA0CisgMDogZDAKKyAgICAxMjM0ICAKKyAwOiAxCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkMTIzNAorTm8gbWF0Y2gKKyAgICBlNDUKK05vIG1hdGNoCisKKy9eW2FiY2RdezIsM31cZC8KKyAgICBhYjQ1CisgMDogYWI0CisgICAgYmNkOTMKKyAwOiBiY2Q5CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0IAorTm8gbWF0Y2gKKyAgICBhMzYgCitObyBtYXRjaAorICAgIGFiY2QxMjM0CitObyBtYXRjaAorICAgIGVlNDUKK05vIG1hdGNoCisKKy9eKGFiYykqXGQvCisgICAgYWJjNDUKKyAwOiBhYmM0CisgICAgYWJjYWJjYWJjNDUKKyAwOiBhYmNhYmNhYmM0CisgICAgNDJ4eXogCisgMDogNAorCisvXihhYmMpK1xkLworICAgIGFiYzQ1CisgMDogYWJjNAorICAgIGFiY2FiY2FiYzQ1CisgMDogYWJjYWJjYWJjNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgNDJ4eXogCitObyBtYXRjaAorCisvXihhYmMpP1xkLworICAgIGFiYzQ1CisgMDogYWJjNAorICAgIDQyeHl6IAorIDA6IDQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2FiY2FiYzQ1CitObyBtYXRjaAorCisvXihhYmMpezIsM31cZC8KKyAgICBhYmNhYmM0NQorIDA6IGFiY2FiYzQKKyAgICBhYmNhYmNhYmM0NQorIDA6IGFiY2FiY2FiYzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2FiY2FiY2FiYzQ1CitObyBtYXRjaAorICAgIGFiYzQ1CitObyBtYXRjaAorICAgIDQyeHl6IAorTm8gbWF0Y2gKKworLzEoYWJjfHh5eikyKD8xKTMvCisgICAgMWFiYzJhYmMzNDU2CisgMDogMWFiYzJhYmMzCisgICAgMWFiYzJ4eXozNDU2IAorIDA6IDFhYmMyeHl6MworCisvXihhKlx3fGFiKT0oYSpcd3xhYikvCisgICAgYWI9YWIKKyAwOiBhYj1hYgorIDE6IGFiPWEKKworL14oYSpcd3xhYik9KD8xKS8KKyAgICBhYj1hYgorIDA6IGFiPWFiCisgMTogYWI9YQorCisvXihbXigpXXxcKCg/MSkqXCkpKiQvCisgICAgYWJjCisgMDogYWJjCisgICAgYShiKWMKKyAwOiBhKGIpYworICAgIGEoYihjKSlkICAKKyAwOiBhKGIoYykpZAorXD0gRXhwZWN0IG5vIG1hdGNoKQorICAgIGEoYihjKWQgIAorTm8gbWF0Y2gKKworL14+YWJjPihbXigpXXxcKCg/MSkqXCkpKjx4eXo8JC8KKyAgICA+YWJjPjEyMzx4eXo8CisgMDogPmFiYz4xMjM8eHl6PAorICAgID5hYmM+MSgyKTM8eHl6PAorIDA6ID5hYmM+MSgyKTM8eHl6PAorICAgID5hYmM+KDEoMikzKTx4eXo8CisgMDogPmFiYz4oMSgyKTMpPHh5ejwKKworL14oPz5hKilcZC8KKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTk4NzYKKyAwOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTkKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorTm8gbWF0Y2gKKworLzwgKD86ICg/KFIpIFxkKysgIHwgW148Pl0qKykgfCAoP1IpKSAqID4veAorICAgIDw+CisgMDogPD4KKyAgICA8YWJjZD4KKyAwOiA8YWJjZD4KKyAgICA8YWJjIDwxMjM+IGhpaj4KKyAwOiA8YWJjIDwxMjM+IGhpaj4KKyAgICA8YWJjIDxkZWY+IGhpaj4KKyAwOiA8ZGVmPgorICAgIDxhYmM8PmRlZj4gCisgMDogPGFiYzw+ZGVmPgorICAgIDxhYmM8PiAgICAgIAorIDA6IDw+CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICA8YWJjCitObyBtYXRjaAorCisvXig/KD89YWJjKVx3ezN9OnxcZFxkKSQvCisgICAgYWJjOiAgICAgICAgICAgICAgICAgICAgICAgICAgCisgMDogYWJjOgorICAgIDEyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAwOiAxMgorXD0gRXhwZWN0IG5vIG1hdGNoICAgICAgICAgICAgICAgICAgICAgCisgICAgMTIzICAgICAgICAgICAgICAgICAgICAgICAKK05vIG1hdGNoCisgICAgeHl6ICAgICAgICAgICAgICAgICAgICAgICAgCitObyBtYXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy9eKD8oPyFhYmMpXGRcZHxcd3szfTopJC8KKyAgICBhYmM6ICAgICAgICAgICAgICAgICAgICAgICAgCisgMDogYWJjOgorICAgIDEyICAgICAgICAgCisgMDogMTIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMworTm8gbWF0Y2gKKyAgICB4eXogICAgCitObyBtYXRjaAorCisvXig/PWFiYylcd3s1fTokLworICAgIGFiY2RlOiAgICAgICAgICAgICAgICAgICAgICAgICAgCisgMDogYWJjZGU6CitcPSBFeHBlY3Qgbm8gbWF0Y2ggICAgICAgICAgICAgICAgICAgICAKKyAgICBhYmMuLiAKK05vIG1hdGNoCisgICAgMTIzICAgICAgICAgICAgICAgICAgICAgICAKK05vIG1hdGNoCisgICAgdnd4eXogICAgICAgICAgICAgICAgICAgICAgICAKK05vIG1hdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorL14oPyFhYmMpXGRcZCQvCisgICAgMTIgICAgICAgICAKKyAwOiAxMgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGU6CitObyBtYXRjaAorICAgIGFiYy4uICAKK05vIG1hdGNoCisgICAgMTIzCitObyBtYXRjaAorICAgIHZ3eHl6ICAgIAorTm8gbWF0Y2gKKworLyg/PD1hYmN8eHkpMTIzLworICAgIGFiYzEyMzQ1CisgMDogMTIzCisgICAgd3h5MTIzegorIDA6IDEyMworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzYWJjCitObyBtYXRjaAorCisvKD88IWFiY3x4eSkxMjMvCisgICAgMTIzYWJjCisgMDogMTIzCisgICAgbW5vMTIzNDU2IAorIDA6IDEyMworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjMTIzNDUKK05vIG1hdGNoCisgICAgd3h5MTIzegorTm8gbWF0Y2gKKworL2FiYyg/QzEpeHl6LworICAgIGFiY3h5egorLS0tPmFiY3h5egorICAxIF4gIF4gICAgICAgeAorIDA6IGFiY3h5egorICAgIDEyM2FiY3h5ejk5OSAKKy0tLT4xMjNhYmN4eXo5OTkKKyAgMSAgICBeICBeICAgICAgICAgIHgKKyAwOiBhYmN4eXoKKworLyhhYnxjZCl7Myw0fS9hdXRvX2NhbGxvdXQKKyAgYWJhYmFiCistLS0+YWJhYmFiCisgKzAgXiAgICAgICAgICAoYWJ8Y2QpezMsNH0KKyArMSBeICAgICAgICAgIGEKKyArNCBeICAgICAgICAgIGMKKyArMiBeXiAgICAgICAgIGIKKyArMyBeIF4gICAgICAgIHwKKyArMSBeIF4gICAgICAgIGEKKyArNCBeIF4gICAgICAgIGMKKyArMiBeICBeICAgICAgIGIKKyArMyBeICAgXiAgICAgIHwKKyArMSBeICAgXiAgICAgIGEKKyArNCBeICAgXiAgICAgIGMKKyArMiBeICAgIF4gICAgIGIKKyArMyBeICAgICBeICAgIHwKKysxMiBeICAgICBeICAgIAorICsxIF4gICAgIF4gICAgYQorICs0IF4gICAgIF4gICAgYworIDA6IGFiYWJhYgorICBhYmNkYWJjZAorLS0tPmFiY2RhYmNkCisgKzAgXiAgICAgICAgICAgIChhYnxjZCl7Myw0fQorICsxIF4gICAgICAgICAgICBhCisgKzQgXiAgICAgICAgICAgIGMKKyArMiBeXiAgICAgICAgICAgYgorICszIF4gXiAgICAgICAgICB8CisgKzEgXiBeICAgICAgICAgIGEKKyArNCBeIF4gICAgICAgICAgYworICs1IF4gIF4gICAgICAgICBkCisgKzYgXiAgIF4gICAgICAgICkKKyArMSBeICAgXiAgICAgICAgYQorICs0IF4gICBeICAgICAgICBjCisgKzIgXiAgICBeICAgICAgIGIKKyArMyBeICAgICBeICAgICAgfAorKzEyIF4gICAgIF4gICAgICAKKyArMSBeICAgICBeICAgICAgYQorICs0IF4gICAgIF4gICAgICBjCisgKzUgXiAgICAgIF4gICAgIGQKKyArNiBeICAgICAgIF4gICAgKQorKzEyIF4gICAgICAgXiAgICAKKyAwOiBhYmNkYWJjZAorIDE6IGFiY2RhYgorICBhYmNkY2RjZGNkY2QgIAorLS0tPmFiY2RjZGNkY2RjZAorICswIF4gICAgICAgICAgICAgICAgKGFifGNkKXszLDR9CisgKzEgXiAgICAgICAgICAgICAgICBhCisgKzQgXiAgICAgICAgICAgICAgICBjCisgKzIgXl4gICAgICAgICAgICAgICBiCisgKzMgXiBeICAgICAgICAgICAgICB8CisgKzEgXiBeICAgICAgICAgICAgICBhCisgKzQgXiBeICAgICAgICAgICAgICBjCisgKzUgXiAgXiAgICAgICAgICAgICBkCisgKzYgXiAgIF4gICAgICAgICAgICApCisgKzEgXiAgIF4gICAgICAgICAgICBhCisgKzQgXiAgIF4gICAgICAgICAgICBjCisgKzUgXiAgICBeICAgICAgICAgICBkCisgKzYgXiAgICAgXiAgICAgICAgICApCisrMTIgXiAgICAgXiAgICAgICAgICAKKyArMSBeICAgICBeICAgICAgICAgIGEKKyArNCBeICAgICBeICAgICAgICAgIGMKKyArNSBeICAgICAgXiAgICAgICAgIGQKKyArNiBeICAgICAgIF4gICAgICAgICkKKysxMiBeICAgICAgIF4gICAgICAgIAorIDA6IGFiY2RjZGNkCisgMTogYWJjZGNkCisKKy9eYWJjLworICAgIGFiY2RlZgorIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGVmXD1ub3Rib2wKK05vIG1hdGNoCisKKy9eKGEqfHh5eikvCisgICAgYmNkCisgMDogCisgICAgYWFhYmNkCisgMDogYWFhCisgICAgeHl6CisgMDogeHl6CisgMTogCisgICAgeHl6XD1ub3RlbXB0eQorIDA6IHh5egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmNkXD1ub3RlbXB0eQorTm8gbWF0Y2gKKyAgICAKKy94eXokLworICAgIHh5egorIDA6IHh5egorICAgIHh5elxuCisgMDogeHl6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXpcPW5vdGVvbAorTm8gbWF0Y2gKKyAgICB4eXpcblw9bm90ZW9sCitObyBtYXRjaAorICAgIAorL3h5eiQvbQorICAgIHh5egorIDA6IHh5egorICAgIHh5elxuIAorIDA6IHh5egorICAgIGFiY3h5elxucHFyIAorIDA6IHh5egorICAgIGFiY3h5elxucHFyXD1ub3Rlb2wKKyAwOiB4eXoKKyAgICB4eXpcblw9bm90ZW9sCisgMDogeHl6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXpcPW5vdGVvbAorTm8gbWF0Y2gKKworL1xHYWJjLworICAgIGFiY2RlZgorIDA6IGFiYworICAgIGRlZmFiY3h5elw9b2Zmc2V0PTMKKyAwOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBkZWZhYmN4eXoKK05vIG1hdGNoCisKKy9eYWJjZGVmLworICAgIGFiXD1wcworUGFydGlhbCBtYXRjaDogYWIKKyAgICBhYmNkZVw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiY2RlCisgICAgYWJjZGVmXD1wcworIDA6IGFiY2RlZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJ4XD1wcworTm8gbWF0Y2gKKworL15hezIsNH1cZCt6LworICAgIGFcPXBzCitQYXJ0aWFsIG1hdGNoOiBhCisgICAgYWFcPXBzCitQYXJ0aWFsIG1hdGNoOiBhYQorICAgIGFhMlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFhMgorICAgIGFhYVw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFhYQorICAgIGFhYTIzXD1wcworUGFydGlhbCBtYXRjaDogYWFhMjMKKyAgICBhYWFhMTIzNDVcPXBzCitQYXJ0aWFsIG1hdGNoOiBhYWFhMTIzNDUKKyAgICBhYTB6XD1wcworIDA6IGFhMHoKKyAgICBhYWFhNDQ0NDQ0NDQ0NDQ0NHpcPXBzCisgMDogYWFhYTQ0NDQ0NDQ0NDQ0NDR6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhelw9cHMKK05vIG1hdGNoCisgICAgYWFhYWFcPXBzCitObyBtYXRjaAorICAgIGE1Nlw9cHMKK05vIG1hdGNoCisKKy9eYWJjZGVmLworICAgYWJjXD1wcworUGFydGlhbCBtYXRjaDogYWJjCisgICBkZWZcPWRmYV9yZXN0YXJ0CisgMDogZGVmCisgICAKKy8oPzw9Zm9vKWJhci8KKyAgIGZvb2JcPXBzLG9mZnNldD0yCitQYXJ0aWFsIG1hdGNoOiBmb29iCisgICAgICAgICAgICAgICA8PDwKKyAgIGZvb2Jhci4uLlw9cHMsZGZhX3Jlc3RhcnQsb2Zmc2V0PTQKKyAwOiBhcgorICAgZm9vYmFyXD1vZmZzZXQ9MgorIDA6IGJhcgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICB4eXpmb1w9cHMKK05vIG1hdGNoCisgICBvYmFyXD1kZmFfcmVzdGFydAorTm8gbWF0Y2gKKworLyhhYiooY2R8ZWYpKStYLworICAgIGxramhsa2pobGtqaGxramhhYmJiYmJiY2RhZWZhYmJiYmJiYmVmYVw9cHMsbm90Ym9sLG5vdGVvbAorUGFydGlhbCBtYXRjaDogYWJiYmJiYmNkYWVmYWJiYmJiYmJlZmEKKyAgICBjZGFiYmJiYmJiYlw9cHMsbm90Ym9sLGRmYV9yZXN0YXJ0LG5vdGVvbAorUGFydGlhbCBtYXRjaDogY2RhYmJiYmJiYmIKKyAgICBlZmFiYmJiYmJiYmJiYmJiYmJiXD1wcyxub3Rib2wsZGZhX3Jlc3RhcnQsbm90ZW9sCitQYXJ0aWFsIG1hdGNoOiBlZmFiYmJiYmJiYmJiYmJiYmJiCisgICAgYmJiYmJiYmJiYmJiY2RYeWFzZGZhZGZcPXBzLG5vdGJvbCxkZmFfcmVzdGFydCxub3Rlb2wKKyAwOiBiYmJiYmJiYmJiYmJjZFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFkZmFkYWRha2xobGthbGthamhsa2phaGRmYXNkZmFzZGZsYWRzZmpralw9cHMsbm90ZW9sCitObyBtYXRjaAorCisvdGhlIHF1aWNrIGJyb3duIGZveC8KKyAgICB0aGUgcXVpY2sgYnJvd24gZm94CisgMDogdGhlIHF1aWNrIGJyb3duIGZveAorICAgIFdoYXQgZG8geW91IGtub3cgYWJvdXQgdGhlIHF1aWNrIGJyb3duIGZveD8KKyAwOiB0aGUgcXVpY2sgYnJvd24gZm94CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGUgcXVpY2sgYnJvd24gRk9YCitObyBtYXRjaAorICAgIFdoYXQgZG8geW91IGtub3cgYWJvdXQgVEhFIFFVSUNLIEJST1dOIEZPWD8KK05vIG1hdGNoCisKKy9UaGUgcXVpY2sgYnJvd24gZm94L2kKKyAgICB0aGUgcXVpY2sgYnJvd24gZm94CisgMDogdGhlIHF1aWNrIGJyb3duIGZveAorICAgIFRoZSBxdWljayBicm93biBGT1gKKyAwOiBUaGUgcXVpY2sgYnJvd24gRk9YCisgICAgV2hhdCBkbyB5b3Uga25vdyBhYm91dCB0aGUgcXVpY2sgYnJvd24gZm94PworIDA6IHRoZSBxdWljayBicm93biBmb3gKKyAgICBXaGF0IGRvIHlvdSBrbm93IGFib3V0IFRIRSBRVUlDSyBCUk9XTiBGT1g/CisgMDogVEhFIFFVSUNLIEJST1dOIEZPWAorCisvYWJjZFx0XG5cclxmXGFcZVwwNzFceDNiXCRcXFw/Y2F4eXovCisgICAgYWJjZFx0XG5cclxmXGFcZTk7XCRcXD9jYXh5egorIDA6IGFiY2RceDA5XHgwYVx4MGRceDBjXHgwN1x4MWI5OyRcP2NheHl6CisKKy9hKmFiYz94eXorcHFyezN9YWJ7Mix9eHl7NCw1fXBxezAsNn1BQnswLH16ei8KKyAgICBhYnh5enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWJ4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYWJ4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFhYWJ4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWFhYnh5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFiY3h5enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFiY3h5enBxcnJyYWJieHl5eXlwcUF6egorICAgIGFhYmN4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWJjeHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cEF6egorIDA6IGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBBenoKKyAgICBhYWFiY3h5enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFxQXp6CisgMDogYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFxQXp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFxcUF6egorIDA6IGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFBenoKKyAgICBhYWFiY3h5enBxcnJyYWJieHl5eXlwcXFxcUF6egorIDA6IGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFxQXp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFxcXFxQXp6CisgMDogYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFxcXFxQXp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFxcXFxcUF6egorIDA6IGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBxcXFxcXFBenoKKyAgICBhYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYnh5enpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYnh5enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWJ4eXp6enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFhYnh5enp6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFhYnh5enp6enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFhYWJ4eXp6enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWFhYnh5enp6enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFhYWFieHl6enp6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWJjeHl6enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFiY3h5enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWJjeHl6enpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWJjeHl6enpwcXJycmFiYnh5eXl5cHFBenoKKyAgICBhYWFiY3h5enp6enBxcnJyYWJieHl5eXlwcUF6egorIDA6IGFhYWJjeHl6enp6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFhYWJjeHl6enp6cHFycnJhYmJ4eXl5eXBxQXp6CisgMDogYWFhYWJjeHl6enp6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgYWFhYWJjeHl6enp6cHFycnJhYmJieHl5eXlwcUF6egorIDA6IGFhYWFiY3h5enp6enBxcnJyYWJiYnh5eXl5cHFBenoKKyAgICBhYWFhYmN4eXp6enpwcXJycmFiYmJ4eXl5eXlwcUF6egorIDA6IGFhYWFiY3h5enp6enBxcnJyYWJiYnh5eXl5eXBxQXp6CisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cEFCenoKKyAwOiBhYWFiY3h5enBxcnJyYWJieHl5eXlwQUJ6egorICAgIGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBBQkJ6egorIDA6IGFhYWJjeHl6cHFycnJhYmJ4eXl5eXBBQkJ6egorICAgID4+PmFhYWJ4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAwOiBhYWFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgICAgPmFhYWFieHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgMDogYWFhYWJ4eXpwcXJycmFiYnh5eXl5cHFBenoKKyAgICA+Pj4+YWJjeHl6cHFycnJhYmJ4eXl5eXBxQXp6CisgMDogYWJjeHl6cHFycnJhYmJ4eXl5eXBxQXp6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYnh5enBxcnJhYmJ4eXl5eXBxQXp6CitObyBtYXRjaAorICAgIGFieHl6cHFycnJyYWJieHl5eXlwcUF6egorTm8gbWF0Y2gKKyAgICBhYnh5enBxcnJyYWJ4eXl5eXBxQXp6CitObyBtYXRjaAorICAgIGFhYWFiY3h5enp6enBxcnJyYWJiYnh5eXl5eXlwcUF6egorTm8gbWF0Y2gKKyAgICBhYWFhYmN4eXp6enpwcXJycmFiYmJ4eXl5cHFBenoKK05vIG1hdGNoCisgICAgYWFhYmN4eXpwcXJycmFiYnh5eXl5cHFxcXFxcXFBenoKK05vIG1hdGNoCisKKy9eKGFiYyl7MSwyfXp6LworICAgIGFiY3p6CisgMDogYWJjenoKKyAgICBhYmNhYmN6egorIDA6IGFiY2FiY3p6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB6egorTm8gbWF0Y2gKKyAgICBhYmNhYmNhYmN6egorTm8gbWF0Y2gKKyAgICA+PmFiY3p6CitObyBtYXRjaAorCisvXihiKz98YSl7MSwyfT9jLworICAgIGJjCisgMDogYmMKKyAgICBiYmMKKyAwOiBiYmMKKyAgICBiYmJjCisgMDogYmJiYworICAgIGJhYworIDA6IGJhYworICAgIGJiYWMKKyAwOiBiYmFjCisgICAgYWFjCisgMDogYWFjCisgICAgYWJiYmJiYmJiYmJiYworIDA6IGFiYmJiYmJiYmJiYmMKKyAgICBiYmJiYmJiYmJiYmFjCisgMDogYmJiYmJiYmJiYmJhYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhYworTm8gbWF0Y2gKKyAgICBhYmJiYmJiYmJiYmJhYworTm8gbWF0Y2gKKworL14oYit8YSl7MSwyfWMvCisgICAgYmMKKyAwOiBiYworICAgIGJiYworIDA6IGJiYworICAgIGJiYmMKKyAwOiBiYmJjCisgICAgYmFjCisgMDogYmFjCisgICAgYmJhYworIDA6IGJiYWMKKyAgICBhYWMKKyAwOiBhYWMKKyAgICBhYmJiYmJiYmJiYmJjCisgMDogYWJiYmJiYmJiYmJiYworICAgIGJiYmJiYmJiYmJiYWMKKyAwOiBiYmJiYmJiYmJiYmFjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFjCitObyBtYXRjaAorICAgIGFiYmJiYmJiYmJiYmFjCitObyBtYXRjaAorCisvXihiK3xhKXsxLDJ9P2JjLworICAgIGJiYworIDA6IGJiYworCisvXihiKnxiYSl7MSwyfT9iYy8KKyAgICBiYWJjCisgMDogYmFiYworICAgIGJiYWJjCisgMDogYmJhYmMKKyAgICBiYWJhYmMKKyAwOiBiYWJhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJhYmFiYmMKK05vIG1hdGNoCisgICAgYmFiYWJhYmMKK05vIG1hdGNoCisKKy9eKGJhfGIqKXsxLDJ9P2JjLworICAgIGJhYmMKKyAwOiBiYWJjCisgICAgYmJhYmMKKyAwOiBiYmFiYworICAgIGJhYmFiYworIDA6IGJhYmFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmFiYWJiYworTm8gbWF0Y2gKKyAgICBiYWJhYmFiYworTm8gbWF0Y2gKKworL15cY2FcY0FcY1tcY3tcYzovCisgICAgXHgwMVx4MDFcZTt6CisgMDogXHgwMVx4MDFceDFiO3oKKworL15bYWJcXWNkZV0vCisgICAgYXRoaW5nCisgMDogYQorICAgIGJ0aGluZworIDA6IGIKKyAgICBddGhpbmcKKyAwOiBdCisgICAgY3RoaW5nCisgMDogYworICAgIGR0aGluZworIDA6IGQKKyAgICBldGhpbmcKKyAwOiBlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBmdGhpbmcKK05vIG1hdGNoCisgICAgW3RoaW5nCitObyBtYXRjaAorICAgIFxcdGhpbmcKK05vIG1hdGNoCisKKy9eW11jZGVdLworICAgIF10aGluZworIDA6IF0KKyAgICBjdGhpbmcKKyAwOiBjCisgICAgZHRoaW5nCisgMDogZAorICAgIGV0aGluZworIDA6IGUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGF0aGluZworTm8gbWF0Y2gKKyAgICBmdGhpbmcKK05vIG1hdGNoCisKKy9eW15hYlxdY2RlXS8KKyAgICBmdGhpbmcKKyAwOiBmCisgICAgW3RoaW5nCisgMDogWworICAgIFxcdGhpbmcKKyAwOiBcCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhdGhpbmcKK05vIG1hdGNoCisgICAgYnRoaW5nCitObyBtYXRjaAorICAgIF10aGluZworTm8gbWF0Y2gKKyAgICBjdGhpbmcKK05vIG1hdGNoCisgICAgZHRoaW5nCitObyBtYXRjaAorICAgIGV0aGluZworTm8gbWF0Y2gKKworL15bXl1jZGVdLworICAgIGF0aGluZworIDA6IGEKKyAgICBmdGhpbmcKKyAwOiBmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBddGhpbmcKK05vIG1hdGNoCisgICAgY3RoaW5nCitObyBtYXRjaAorICAgIGR0aGluZworTm8gbWF0Y2gKKyAgICBldGhpbmcKK05vIG1hdGNoCisKKy9eXIEvCisgICAggQorIDA6IFx4ODEKKworL17/LworICAgIP8KKyAwOiBceGZmCisKKy9eWzAtOV0rJC8KKyAgICAwCisgMDogMAorICAgIDEKKyAwOiAxCisgICAgMgorIDA6IDIKKyAgICAzCisgMDogMworICAgIDQKKyAwOiA0CisgICAgNQorIDA6IDUKKyAgICA2CisgMDogNgorICAgIDcKKyAwOiA3CisgICAgOAorIDA6IDgKKyAgICA5CisgMDogOQorICAgIDEwCisgMDogMTAKKyAgICAxMDAKKyAwOiAxMDAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworTm8gbWF0Y2gKKworL14uKm50ZXIvCisgICAgZW50ZXIKKyAwOiBlbnRlcgorICAgIGludGVyCisgMDogaW50ZXIKKyAgICB1cG9udGVyCisgMDogdXBvbnRlcgorCisvXnh4eFswLTldKyQvCisgICAgeHh4MAorIDA6IHh4eDAKKyAgICB4eHgxMjM0CisgMDogeHh4MTIzNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHh4CitObyBtYXRjaAorCisvXi4rWzAtOV1bMC05XVswLTldJC8KKyAgICB4MTIzCisgMDogeDEyMworICAgIHh4MTIzCisgMDogeHgxMjMKKyAgICAxMjM0NTYKKyAwOiAxMjM0NTYKKyAgICB4MTIzNAorIDA6IHgxMjM0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjMKK05vIG1hdGNoCisKKy9eLis/WzAtOV1bMC05XVswLTldJC8KKyAgICB4MTIzCisgMDogeDEyMworICAgIHh4MTIzCisgMDogeHgxMjMKKyAgICAxMjM0NTYKKyAwOiAxMjM0NTYKKyAgICB4MTIzNAorIDA6IHgxMjM0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjMKK05vIG1hdGNoCisKKy9eKFteIV0rKSEoLispPWFwcXV4elwuaXhyXC56enpcLmFjXC51ayQvCisgICAgYWJjIXBxcj1hcHF1eHouaXhyLnp6ei5hYy51aworIDA6IGFiYyFwcXI9YXBxdXh6Lml4ci56enouYWMudWsKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICFwcXI9YXBxdXh6Lml4ci56enouYWMudWsKK05vIG1hdGNoCisgICAgYWJjIT1hcHF1eHouaXhyLnp6ei5hYy51aworTm8gbWF0Y2gKKyAgICBhYmMhcHFyPWFwcXV4ejppeHIuenp6LmFjLnVrCitObyBtYXRjaAorICAgIGFiYyFwcXI9YXBxdXh6Lml4ci56enouYWMudWtrCitObyBtYXRjaAorCisvOi8KKyAgICBXZWxsLCB3ZSBuZWVkIGEgY29sb246IHNvbWV3aGVyZQorIDA6IDoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIE5vIG1hdGNoIHdpdGhvdXQgYSBjb2xvbgorTm8gbWF0Y2gKKworLyhbXGRhLWY6XSspJC9pCisgICAgMGFiYworIDA6IDBhYmMKKyAgICBhYmMKKyAwOiBhYmMKKyAgICBmZWQKKyAwOiBmZWQKKyAgICBFCisgMDogRQorICAgIDo6CisgMDogOjoKKyAgICA1ZjAzOjEyQzA6OjkzMmUKKyAwOiA1ZjAzOjEyQzA6OjkzMmUKKyAgICBmZWQgZGVmCisgMDogZGVmCisgICAgQW55IG9sZCBzdHVmZgorIDA6IGZmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAwenp6CitObyBtYXRjaAorICAgIGd6enoKK05vIG1hdGNoCisgICAgZmVkXHgyMAorTm8gbWF0Y2gKKyAgICBBbnkgb2xkIHJ1YmJpc2gKK05vIG1hdGNoCisKKy9eLipcLihcZHsxLDN9KVwuKFxkezEsM30pXC4oXGR7MSwzfSkkLworICAgIC4xLjIuMworIDA6IC4xLjIuMworICAgIEEuMTIuMTIzLjAKKyAwOiBBLjEyLjEyMy4wCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAuMS4yLjMzMzMKK05vIG1hdGNoCisgICAgMS4yLjMKK05vIG1hdGNoCisgICAgMTIzNC4yLjMKK05vIG1hdGNoCisKKy9eKFxkKylccytJTlxzK1NPQVxzKyhcUyspXHMrKFxTKylccypcKFxzKiQvCisgICAgMSBJTiBTT0Egbm9uLXNwMSBub24tc3AyKAorIDA6IDEgSU4gU09BIG5vbi1zcDEgbm9uLXNwMigKKyAgICAxICAgIElOICAgIFNPQSAgICBub24tc3AxICAgIG5vbi1zcDIgICAoCisgMDogMSAgICBJTiAgICBTT0EgICAgbm9uLXNwMSAgICBub24tc3AyICAgKAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMUlOIFNPQSBub24tc3AxIG5vbi1zcDIoCitObyBtYXRjaAorCisvXlthLXpBLVpcZF1bYS16QS1aXGRcLV0qKFwuW2EtekEtWlxkXVthLXpBLXpcZFwtXSopKlwuJC8KKyAgICBhLgorIDA6IGEuCisgICAgWi4KKyAwOiBaLgorICAgIDIuCisgMDogMi4KKyAgICBhYi1jLnBxLXIuCisgMDogYWItYy5wcS1yLgorICAgIHN4ay56enouYWMudWsuCisgMDogc3hrLnp6ei5hYy51ay4KKyAgICB4LS55LS4KKyAwOiB4LS55LS4KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIC1hYmMucGVxLgorTm8gbWF0Y2gKKworL15cKlwuW2Etel0oW2EtelwtXGRdKlthLXpcZF0rKT8oXC5bYS16XShbYS16XC1cZF0qW2EtelxkXSspPykqJC8KKyAgICAqLmEKKyAwOiAqLmEKKyAgICAqLmIwLWEKKyAwOiAqLmIwLWEKKyAgICAqLmMzLWIuYworIDA6ICouYzMtYi5jCisgICAgKi5jLWEuYi1jCisgMDogKi5jLWEuYi1jCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAqLjAKK05vIG1hdGNoCisgICAgKi5hLQorTm8gbWF0Y2gKKyAgICAqLmEtYi5jLQorTm8gbWF0Y2gKKyAgICAqLmMtYS4wLWMKK05vIG1hdGNoCisKKy9eKD89YWIoZGUpKShhYmQpKGUpLworICAgIGFiZGUKKyAwOiBhYmRlCisKKy9eKD8hKGFiKWRlfHgpKGFiZCkoZikvCisgICAgYWJkZgorIDA6IGFiZGYKKworL14oPz0oYWIoY2QpKSkoYWIpLworICAgIGFiY2QKKyAwOiBhYgorCisvXltcZGEtZl0oXC5bXGRhLWZdKSokL2kKKyAgICBhLmIuYy5kCisgMDogYS5iLmMuZAorICAgIEEuQi5DLkQKKyAwOiBBLkIuQy5ECisgICAgYS5iLmMuMS4yLjMuQworIDA6IGEuYi5jLjEuMi4zLkMKKworL15cIi4qXCJccyooOy4qKT8kLworICAgIFwiMTIzNFwiCisgMDogIjEyMzQiCisgICAgXCJhYmNkXCIgOworIDA6ICJhYmNkIiA7CisgICAgXCJcIiA7IHJodWJhcmIKKyAwOiAiIiA7IHJodWJhcmIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFwiMTIzNFwiIDogdGhpbmdzCitObyBtYXRjaAorCisvXiQvCisgICAgXAorIDA6IAorCisvICAgXiAgICBhICAgKD8jIGJlZ2lucyB3aXRoIGEpICBiXHNjICg/IyB0aGVuIGIgYykgJCAoPyMgdGhlbiBlbmQpL3gKKyAgICBhYiBjCisgMDogYWIgYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCitObyBtYXRjaAorICAgIGFiIGNkZQorTm8gbWF0Y2gKKworLyg/eCkgICBeICAgIGEgICAoPyMgYmVnaW5zIHdpdGggYSkgIGJcc2MgKD8jIHRoZW4gYiBjKSAkICg/IyB0aGVuIGVuZCkvCisgICAgYWIgYworIDA6IGFiIGMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworTm8gbWF0Y2gKKyAgICBhYiBjZGUKK05vIG1hdGNoCisKKy9eICAgYVwgYltjIF1kICAgICAgICQveAorICAgIGEgYmNkCisgMDogYSBiY2QKKyAgICBhIGIgZAorIDA6IGEgYiBkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkCitObyBtYXRjaAorICAgIGFiIGQKK05vIG1hdGNoCisKKy9eKGEoYihjKSkpKGQoZShmKSkpKGgoaShqKSkpKGsobChtKSkpJC8KKyAgICBhYmNkZWZoaWprbG0KKyAwOiBhYmNkZWZoaWprbG0KKworL14oPzphKGIoYykpKSg/OmQoZShmKSkpKD86aChpKGopKSkoPzprKGwobSkpKSQvCisgICAgYWJjZGVmaGlqa2xtCisgMDogYWJjZGVmaGlqa2xtCisKKy9eW1x3XVtcV11bXHNdW1xTXVtcZF1bXERdW1xiXVtcbl1bXGNdXVtcMDIyXS8KKyAgICBhKyBaMCtceDA4XG5ceDFkXHgxMgorIDA6IGErIFowK1x4MDhceDBhXHgxZFx4MTIKKworL15bLl4kfCgpKis/eyx9XSsvCisgICAgLl5cJCgqKyl8ez8sP30KKyAwOiAuXiQoKispfHs/LD99CisKKy9eYSpcdy8KKyAgICB6CisgMDogegorICAgIGF6CisgMDogYXoKKyAxOiBhCisgICAgYWFhegorIDA6IGFhYXoKKyAxOiBhYWEKKyAyOiBhYQorIDM6IGEKKyAgICBhCisgMDogYQorICAgIGFhCisgMDogYWEKKyAxOiBhCisgICAgYWFhYQorIDA6IGFhYWEKKyAxOiBhYWEKKyAyOiBhYQorIDM6IGEKKyAgICBhKworIDA6IGEKKyAgICBhYSsKKyAwOiBhYQorIDE6IGEKKworL15hKj9cdy8KKyAgICB6CisgMDogegorICAgIGF6CisgMDogYXoKKyAxOiBhCisgICAgYWFhegorIDA6IGFhYXoKKyAxOiBhYWEKKyAyOiBhYQorIDM6IGEKKyAgICBhCisgMDogYQorICAgIGFhCisgMDogYWEKKyAxOiBhCisgICAgYWFhYQorIDA6IGFhYWEKKyAxOiBhYWEKKyAyOiBhYQorIDM6IGEKKyAgICBhKworIDA6IGEKKyAgICBhYSsKKyAwOiBhYQorIDE6IGEKKworL15hK1x3LworICAgIGF6CisgMDogYXoKKyAgICBhYWF6CisgMDogYWFhegorIDE6IGFhYQorIDI6IGFhCisgICAgYWEKKyAwOiBhYQorICAgIGFhYWEKKyAwOiBhYWFhCisgMTogYWFhCisgMjogYWEKKyAgICBhYSsKKyAwOiBhYQorCisvXmErP1x3LworICAgIGF6CisgMDogYXoKKyAgICBhYWF6CisgMDogYWFhegorIDE6IGFhYQorIDI6IGFhCisgICAgYWEKKyAwOiBhYQorICAgIGFhYWEKKyAwOiBhYWFhCisgMTogYWFhCisgMjogYWEKKyAgICBhYSsKKyAwOiBhYQorCisvXlxkezh9XHd7Mix9LworICAgIDEyMzQ1Njc4OTAKKyAwOiAxMjM0NTY3ODkwCisgICAgMTIzNDU2NzhhYgorIDA6IDEyMzQ1Njc4YWIKKyAgICAxMjM0NTY3OF9fCisgMDogMTIzNDU2NzhfXworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzNDU2NworTm8gbWF0Y2gKKworL15bYWVpb3VcZF17NCw1fSQvCisgICAgdW9pZQorIDA6IHVvaWUKKyAgICAxMjM0CisgMDogMTIzNAorICAgIDEyMzQ1CisgMDogMTIzNDUKKyAgICBhYWFhYQorIDA6IGFhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0NTYKK05vIG1hdGNoCisKKy9eW2FlaW91XGRdezQsNX0/LworICAgIHVvaWUKKyAwOiB1b2llCisgICAgMTIzNAorIDA6IDEyMzQKKyAgICAxMjM0NQorIDA6IDEyMzQ1CisgMTogMTIzNAorICAgIGFhYWFhCisgMDogYWFhYWEKKyAxOiBhYWFhCisgICAgMTIzNDU2CisgMDogMTIzNDUKKyAxOiAxMjM0CisKKy9eRnJvbSArKFteIF0rKSArW2EtekEtWl1bYS16QS1aXVthLXpBLVpdICtbYS16QS1aXVthLXpBLVpdW2EtekEtWl0gK1swLTldP1swLTldICtbMC05XVswLTldOlswLTldWzAtOV0vCisgICAgRnJvbSBhYmNkICBNb24gU2VwIDAxIDEyOjMzOjAyIDE5OTcKKyAwOiBGcm9tIGFiY2QgIE1vbiBTZXAgMDEgMTI6MzMKKworL15Gcm9tXHMrXFMrXHMrKFthLXpBLVpdezN9XHMrKXsyfVxkezEsMn1ccytcZFxkOlxkXGQvCisgICAgRnJvbSBhYmNkICBNb24gU2VwIDAxIDEyOjMzOjAyIDE5OTcKKyAwOiBGcm9tIGFiY2QgIE1vbiBTZXAgMDEgMTI6MzMKKyAgICBGcm9tIGFiY2QgIE1vbiBTZXAgIDEgMTI6MzM6MDIgMTk5NworIDA6IEZyb20gYWJjZCAgTW9uIFNlcCAgMSAxMjozMworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgRnJvbSBhYmNkICBTZXAgMDEgMTI6MzM6MDIgMTk5NworTm8gbWF0Y2gKKworL14xMi4zNC9zCisgICAgMTJcbjM0CisgMDogMTJceDBhMzQKKyAgICAxMlxyMzQKKyAwOiAxMlx4MGQzNAorCisvXHcrKD89XHQpLworICAgIHRoZSBxdWljayBicm93blx0IGZveAorIDA6IGJyb3duCisKKy9mb28oPyFiYXIpKC4qKS8KKyAgICBmb29iYXIgaXMgZm9vbGlzaCBzZWU/CisgMDogZm9vbGlzaCBzZWU/CisKKy8oPzooPyFmb28pLi4ufF4uezAsMn0pYmFyKC4qKS8KKyAgICBmb29iYXIgY3Jvd2JhciBldGMKKyAwOiByb3diYXIgZXRjCisgICAgYmFycmVsCisgMDogYmFycmVsCisgICAgMmJhcnJlbAorIDA6IDJiYXJyZWwKKyAgICBBIGJhcnJlbAorIDA6IEEgYmFycmVsCisKKy9eKFxEKikoPz1cZCkoPyExMjMpLworICAgIGFiYzQ1NgorIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjMTIzCitObyBtYXRjaAorCisvXjEyMzQoPyMgdGVzdCBuZXdsaW5lcworICBpbnNpZGUpLworICAgIDEyMzQKKyAwOiAxMjM0CisKKy9eMTIzNCAjY29tbWVudCBpbiBleHRlbmRlZCByZQorICAveAorICAgIDEyMzQKKyAwOiAxMjM0CisKKy8jcmh1YmFyYgorICBhYmNkL3gKKyAgICBhYmNkCisgMDogYWJjZAorCisvXmFiY2Qjcmh1YmFyYi94CisgICAgYWJjZAorIDA6IGFiY2QKKworLyg/IV4pYWJjLworICAgIHRoZSBhYmMKKyAwOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworTm8gbWF0Y2gKKworLyg/PV4pYWJjLworICAgIGFiYworIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgdGhlIGFiYworTm8gbWF0Y2gKKworL15bYWJdezEsM30oYWIqfGIpL25vX2F1dG9fcG9zc2VzcworICAgIGFhYmJiYmIKKyAwOiBhYWJiYmJiCisgMTogYWFiYmJiCisgMjogYWFiYmIKKyAzOiBhYWJiCisgNDogYWFiCisgNTogYWEKKworL15bYWJdezEsM30/KGFiKnxiKS9ub19hdXRvX3Bvc3Nlc3MKKyAgICBhYWJiYmJiCisgMDogYWFiYmJiYgorIDE6IGFhYmJiYgorIDI6IGFhYmJiCisgMzogYWFiYgorIDQ6IGFhYgorIDU6IGFhCisKKy9eW2FiXXsxLDN9PyhhYio/fGIpL25vX2F1dG9fcG9zc2VzcworICAgIGFhYmJiYmIKKyAwOiBhYWJiYmJiCisgMTogYWFiYmJiCisgMjogYWFiYmIKKyAzOiBhYWJiCisgNDogYWFiCisgNTogYWEKKworL15bYWJdezEsM30oYWIqP3xiKS9ub19hdXRvX3Bvc3Nlc3MKKyAgICBhYWJiYmJiCisgMDogYWFiYmJiYgorIDE6IGFhYmJiYgorIDI6IGFhYmJiCisgMzogYWFiYgorIDQ6IGFhYgorIDU6IGFhCisKKy8gICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCBsZWFkaW5nIGNvbW1lbnQKKyg/OiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgd29yZAorKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICApKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGEgcGVyaW9kCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisjIGFkZHJlc3MKK3wgICAgICAgICAgICAgICAgICAgICAjICBvcgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorIiAoPzogICAgICAgICAgICAgICAgICAgICAgIyBvcGVuaW5nIHF1b3RlLi4uCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gICAgICAgICAgICAgICAgIyAgIEFueXRoaW5nIGV4Y2VwdCBiYWNrc2xhc2ggYW5kIHF1b3RlCit8ICAgICAgICAgICAgICAgICAgICAgIyAgICBvcgorXFwgW15ceDgwLVx4ZmZdICAgICAgICAgICAjICAgRXNjYXBlZCBzb21ldGhpbmcgKHNvbWV0aGluZyAhPSBDUikKKykqICIgICMgY2xvc2luZyBxdW90ZQorKSAgICAgICAgICAgICAjIG9uZSB3b3JkLCBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5Li4uLgorKD86CitbXigpPD5ALDs6Ii5cXFxbXF1ceDgwLVx4ZmZcMDAwLVwwMTBcMDEyLVwwMzddICB8ICAjIGF0b20gYW5kIHNwYWNlIHBhcnRzLCBvci4uLgorXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgICAgICB8ICAjIGNvbW1lbnRzLCBvci4uLgorCisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCisjIHF1b3RlZCBzdHJpbmdzCispKgorPCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICAgICAgICAgICAgICAgICAgIyBsZWFkaW5nIDwKKyg/OiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKworKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICwgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKykqICMgZnVydGhlciBva2F5LCBpZiBsZWQgYnkgY29tbWEKKzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2xvc2luZyBjb2xvbgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICApPyAjICAgICAgIG9wdGlvbmFsIHJvdXRlCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgd29yZAorKD86ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICApKiAjIGZ1cnRoZXIgb2theSwgaWYgbGVkIGJ5IGEgcGVyaW9kCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIEAgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBpbml0aWFsIHN1YmRvbWFpbgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGxlZCBieSBhIHBlcmlvZC4uLgorKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICMgICAuLi5mdXJ0aGVyIG9rYXkKKykqCisjICAgICAgIGFkZHJlc3Mgc3BlYworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICA+ICMgICAgICAgICAgICAgICAgICB0cmFpbGluZyA+CisjIG5hbWUgYW5kIGFkZHJlc3MKKykgICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50CisveAorICAgIEFsYW4gT3RoZXIgPHVzZXJcQGRvbS5haW4+CisgMDogQWxhbiBPdGhlciA8dXNlckBkb20uYWluPgorICAgIDx1c2VyXEBkb20uYWluPgorIDA6IHVzZXJAZG9tLmFpbgorIDE6IHVzZXJAZG9tCisgICAgdXNlclxAZG9tLmFpbgorIDA6IHVzZXJAZG9tLmFpbgorIDE6IHVzZXJAZG9tCisgICAgXCJBLiBPdGhlclwiIDx1c2VyLjEyMzRcQGRvbS5haW4+IChhIGNvbW1lbnQpCisgMDogIkEuIE90aGVyIiA8dXNlci4xMjM0QGRvbS5haW4+IChhIGNvbW1lbnQpCisgMTogIkEuIE90aGVyIiA8dXNlci4xMjM0QGRvbS5haW4+IAorIDI6ICJBLiBPdGhlciIgPHVzZXIuMTIzNEBkb20uYWluPgorICAgIEEuIE90aGVyIDx1c2VyLjEyMzRcQGRvbS5haW4+IChhIGNvbW1lbnQpCisgMDogIE90aGVyIDx1c2VyLjEyMzRAZG9tLmFpbj4gKGEgY29tbWVudCkKKyAxOiAgT3RoZXIgPHVzZXIuMTIzNEBkb20uYWluPiAKKyAyOiAgT3RoZXIgPHVzZXIuMTIzNEBkb20uYWluPgorICAgIFwiL3M9dXNlci9vdT1ob3N0L289cGxhY2UvcHJtZD11dS55eS9hZG1kPSAvYz1nYi9cIlxAeDQwMC1yZS5sYXkKKyAwOiAiL3M9dXNlci9vdT1ob3N0L289cGxhY2UvcHJtZD11dS55eS9hZG1kPSAvYz1nYi8iQHg0MDAtcmUubGF5CisgMTogIi9zPXVzZXIvb3U9aG9zdC9vPXBsYWNlL3BybWQ9dXUueXkvYWRtZD0gL2M9Z2IvIkB4NDAwLXJlCisgICAgQSBtaXNzaW5nIGFuZ2xlIDx1c2VyXEBzb21lLndoZXJlCisgMDogdXNlckBzb21lLndoZXJlCisgMTogdXNlckBzb21lCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBUaGUgcXVpY2sgYnJvd24gZm94CitObyBtYXRjaAorCisvW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCBsZWFkaW5nIGNvbW1lbnQKKyg/OgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorIyBBdG9tCit8ICAgICAgICAgICAgICAgICAgICAgICAjICBvcgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIKK1teXFxceDgwLVx4ZmZcblwwMTUiXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBub3JtYWwKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICBbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiApKiAgICAgICAgIyAgICggc3BlY2lhbCBub3JtYWwqICkqCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICIKKyMgUXVvdGVkIHN0cmluZworKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitcLgorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorIyBBdG9tCit8ICAgICAgICAgICAgICAgICAgICAgICAjICBvcgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICIKK1teXFxceDgwLVx4ZmZcblwwMTUiXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICBub3JtYWwKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICBbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiApKiAgICAgICAgIyAgICggc3BlY2lhbCBub3JtYWwqICkqCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICIKKyMgUXVvdGVkIHN0cmluZworKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBhZGRpdGlvbmFsIHdvcmRzCispKgorQAorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorXFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50cworKD86CitcLgorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfAorXFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKQorW1wwNDBcdF0qICAgICAgICAgICAgICAgICAgICAjIE5hYiB3aGl0ZXNwYWNlLgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK1tcMDQwXHRdKiApKiAgICAjIElmIGNvbW1lbnQgZm91bmQsIGFsbG93IG1vcmUgc3BhY2VzLgorIyBvcHRpb25hbCB0cmFpbGluZyBjb21tZW50cworKSoKKyMgYWRkcmVzcworfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgb3IKKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KKyMgQXRvbQorfCAgICAgICAgICAgICAgICAgICAgICAgIyAgb3IKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgbm9ybWFsCisoPzogIFxcIFteXHg4MC1ceGZmXSAgW15cXFx4ODAtXHhmZlxuXDAxNSJdICogKSogICAgICAgICMgICAoIHNwZWNpYWwgbm9ybWFsKiApKgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAiCisjIFF1b3RlZCBzdHJpbmcKKykKKyMgbGVhZGluZyB3b3JkCitbXigpPD5ALDs6Ii5cXFxbXF1ceDgwLVx4ZmZcMDAwLVwwMTBcMDEyLVwwMzddICogICAgICAgICAgICAgICAjICJub3JtYWwiIGF0b21zIGFuZCBvciBzcGFjZXMKKyg/OgorKD86CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAoCisoPzogIFxcIFteXHg4MC1ceGZmXSAgfAorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICkqICAgICAgICAjICAgICAoc3BlY2lhbCBub3JtYWwqKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgKQorKSAgICAjICAgICAgICAgc3BlY2lhbAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICBub3JtYWwqCispKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgKSoKK1wpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICkKK3wKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAiCitbXlxcXHg4MC1ceGZmXG5cMDE1Il0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgbm9ybWFsCisoPzogIFxcIFteXHg4MC1ceGZmXSAgW15cXFx4ODAtXHhmZlxuXDAxNSJdICogKSogICAgICAgICMgICAoIHNwZWNpYWwgbm9ybWFsKiApKgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAiCispICMgInNwZWNpYWwiIGNvbW1lbnQgb3IgcXVvdGVkIHN0cmluZworW14oKTw+QCw7OiIuXFxcW1xdXHg4MC1ceGZmXDAwMC1cMDEwXDAxMi1cMDM3XSAqICAgICAgICAgICAgIyAgbW9yZSAibm9ybWFsIgorKSoKKzwKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgPAorKD86CitACitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCisoPzoKK1wuCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCispKgorKD86ICwKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KK0AKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKK1xbICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudHMKKyg/OgorXC4KK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKK1xbICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudHMKKykqCispKiAgIyBhZGRpdGlvbmFsIGRvbWFpbnMKKzoKK1tcMDQwXHRdKiAgICAgICAgICAgICAgICAgICAgIyBOYWIgd2hpdGVzcGFjZS4KKyg/OgorXCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgIG5vcm1hbCoKKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgKAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIHwKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICgKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogIFxcIFteXHg4MC1ceGZmXSAgIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gKiApKiAgICAgICAgIyAgICAgKHNwZWNpYWwgbm9ybWFsKikqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICkKKykgICAgIyAgICAgICAgIHNwZWNpYWwKK1teXFxceDgwLVx4ZmZcblwwMTUoKV0gKiAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgbm9ybWFsKgorKSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICkqCitcKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgICApCitbXDA0MFx0XSogKSogICAgIyBJZiBjb21tZW50IGZvdW5kLCBhbGxvdyBtb3JlIHNwYWNlcy4KKyMgb3B0aW9uYWwgdHJhaWxpbmcgY29tbWVudHMKKyk/ICAgICAjICAgICAgIG9wdGlvbmFsIHJvdXRlCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCisjIEF0b20KK3wgICAgICAgICAgICAgICAgICAgICAgICMgIG9yCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIG5vcm1hbAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIFteXFxceDgwLVx4ZmZcblwwMTUiXSAqICkqICAgICAgICAjICAgKCBzcGVjaWFsIG5vcm1hbCogKSoKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIgorIyBRdW90ZWQgc3RyaW5nCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1wuCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCisjIEF0b20KK3wgICAgICAgICAgICAgICAgICAgICAgICMgIG9yCisiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgIgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgIG5vcm1hbAorKD86ICBcXCBbXlx4ODAtXHhmZl0gIFteXFxceDgwLVx4ZmZcblwwMTUiXSAqICkqICAgICAgICAjICAgKCBzcGVjaWFsIG5vcm1hbCogKSoKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIgorIyBRdW90ZWQgc3RyaW5nCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIGFkZGl0aW9uYWwgd29yZHMKKykqCitACitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCisoPzoKK1wuCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CitcWyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispCitbXDA0MFx0XSogICAgICAgICAgICAgICAgICAgICMgTmFiIHdoaXRlc3BhY2UuCisoPzoKK1woICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgKAorW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBub3JtYWwqCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICgKKyg/OiAgXFwgW15ceDgwLVx4ZmZdICB8CitcKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAoCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgbm9ybWFsKgorKD86ICBcXCBbXlx4ODAtXHhmZl0gICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogKSogICAgICAgICMgICAgIChzcGVjaWFsIG5vcm1hbCopKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICApCispICAgICMgICAgICAgICBzcGVjaWFsCitbXlxcXHg4MC1ceGZmXG5cMDE1KCldICogICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgIG5vcm1hbCoKKykqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICApKgorXCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgKQorW1wwNDBcdF0qICkqICAgICMgSWYgY29tbWVudCBmb3VuZCwgYWxsb3cgbW9yZSBzcGFjZXMuCisjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnRzCispKgorIyAgICAgICBhZGRyZXNzIHNwZWMKKz4gICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgICAgICAgID4KKyMgbmFtZSBhbmQgYWRkcmVzcworKQorL3gKKyAgICBBbGFuIE90aGVyIDx1c2VyXEBkb20uYWluPgorIDA6IEFsYW4gT3RoZXIgPHVzZXJAZG9tLmFpbj4KKyAgICA8dXNlclxAZG9tLmFpbj4KKyAwOiB1c2VyQGRvbS5haW4KKyAxOiB1c2VyQGRvbQorICAgIHVzZXJcQGRvbS5haW4KKyAwOiB1c2VyQGRvbS5haW4KKyAxOiB1c2VyQGRvbQorICAgIFwiQS4gT3RoZXJcIiA8dXNlci4xMjM0XEBkb20uYWluPiAoYSBjb21tZW50KQorIDA6ICJBLiBPdGhlciIgPHVzZXIuMTIzNEBkb20uYWluPgorICAgIEEuIE90aGVyIDx1c2VyLjEyMzRcQGRvbS5haW4+IChhIGNvbW1lbnQpCisgMDogIE90aGVyIDx1c2VyLjEyMzRAZG9tLmFpbj4KKyAgICBcIi9zPXVzZXIvb3U9aG9zdC9vPXBsYWNlL3BybWQ9dXUueXkvYWRtZD0gL2M9Z2IvXCJcQHg0MDAtcmUubGF5CisgMDogIi9zPXVzZXIvb3U9aG9zdC9vPXBsYWNlL3BybWQ9dXUueXkvYWRtZD0gL2M9Z2IvIkB4NDAwLXJlLmxheQorIDE6ICIvcz11c2VyL291PWhvc3Qvbz1wbGFjZS9wcm1kPXV1Lnl5L2FkbWQ9IC9jPWdiLyJAeDQwMC1yZQorICAgIEEgbWlzc2luZyBhbmdsZSA8dXNlclxAc29tZS53aGVyZQorIDA6IHVzZXJAc29tZS53aGVyZQorIDE6IHVzZXJAc29tZQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgVGhlIHF1aWNrIGJyb3duIGZveAorTm8gbWF0Y2gKKworL2FiY1wwZGVmXDAwcHFyXDAwMHh5elwwMDAwQUIvCisgICAgYWJjXDBkZWZcMDBwcXJcMDAweHl6XDAwMDBBQgorIDA6IGFiY1x4MDBkZWZceDAwcHFyXHgwMHh5elx4MDAwQUIKKyAgICBhYmM0NTYgYWJjXDBkZWZcMDBwcXJcMDAweHl6XDAwMDBBQkNERQorIDA6IGFiY1x4MDBkZWZceDAwcHFyXHgwMHh5elx4MDAwQUIKKworL2FiY1x4MGRlZlx4MDBwcXJceDAwMHh5elx4MDAwMEFCLworICAgIGFiY1x4MGRlZlx4MDBwcXJceDAwMHh5elx4MDAwMEFCCisgMDogYWJjXHgwZGVmXHgwMHBxclx4MDAweHl6XHgwMDAwQUIKKyAgICBhYmM0NTYgYWJjXHgwZGVmXHgwMHBxclx4MDAweHl6XHgwMDAwQUJDREUKKyAwOiBhYmNceDBkZWZceDAwcHFyXHgwMDB4eXpceDAwMDBBQgorCisvXltcMDAwLVwwMzddLworICAgIFwwQQorIDA6IFx4MDAKKyAgICBcMDFCCisgMDogXHgwMQorICAgIFwwMzdDCisgMDogXHgxZgorCisvXDAqLworICAgIFwwXDBcMFwwCisgMDogXHgwMFx4MDBceDAwXHgwMAorCisvQVx4MHsyLDN9Wi8KKyAgICBUaGUgQVx4MFx4MFoKKyAwOiBBXHgwMFx4MDBaCisgICAgQW4gQVwwXHgwXDBaCisgMDogQVx4MDBceDAwXHgwMFoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFcMFoKK05vIG1hdGNoCisgICAgQVwwXHgwXDBceDBaCitObyBtYXRjaAorCisvXlxzLworICAgIFwwNDBhYmMKKyAwOiAgCisgICAgXHgwY2FiYworIDA6IFx4MGMKKyAgICBcbmFiYworIDA6IFx4MGEKKyAgICBccmFiYworIDA6IFx4MGQKKyAgICBcdGFiYworIDA6IFx4MDkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworTm8gbWF0Y2gKKworL15hCWIKKyAgICAMICBjL3gKKyAgICBhYmMKKyAwOiBhYmMKKworL2FiezEsM31iYy8KKyAgICBhYmJiYmMKKyAwOiBhYmJiYmMKKyAgICBhYmJiYworIDA6IGFiYmJjCisgICAgYWJiYworIDA6IGFiYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworTm8gbWF0Y2gKKyAgICBhYmJiYmJjCitObyBtYXRjaAorCisvKFteLl0qKVwuKFteOl0qKTpbVCBdKyguKikvCisgICAgdHJhY2sxLnRpdGxlOlRCbGFoIGJsYWggYmxhaAorIDA6IHRyYWNrMS50aXRsZTpUQmxhaCBibGFoIGJsYWgKKworLyhbXi5dKilcLihbXjpdKik6W1QgXSsoLiopL2kKKyAgICB0cmFjazEudGl0bGU6VEJsYWggYmxhaCBibGFoCisgMDogdHJhY2sxLnRpdGxlOlRCbGFoIGJsYWggYmxhaAorCisvKFteLl0qKVwuKFteOl0qKTpbdCBdKyguKikvaQorICAgIHRyYWNrMS50aXRsZTpUQmxhaCBibGFoIGJsYWgKKyAwOiB0cmFjazEudGl0bGU6VEJsYWggYmxhaCBibGFoCisKKy9eW1ctY10rJC8KKyAgICBXWFlfXmFiYworIDA6IFdYWV9eYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB3eHkKK05vIG1hdGNoCisKKy9eW1ctY10rJC9pCisgICAgV1hZX15hYmMKKyAwOiBXWFlfXmFiYworICAgIHd4eV9eQUJDCisgMDogd3h5X15BQkMKKworL15bXHgzZi1ceDVGXSskL2kKKyAgICBXWFlfXmFiYworIDA6IFdYWV9eYWJjCisgICAgd3h5X15BQkMKKyAwOiB3eHlfXkFCQworCisvXmFiYyQvbQorICAgIGFiYworIDA6IGFiYworICAgIHFxcVxuYWJjCisgMDogYWJjCisgICAgYWJjXG56enoKKyAwOiBhYmMKKyAgICBxcXFcbmFiY1xuenp6CisgMDogYWJjCisKKy9eYWJjJC8KKyAgICBhYmMKKyAwOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHFxcVxuYWJjCitObyBtYXRjaAorICAgIGFiY1xuenp6CitObyBtYXRjaAorICAgIHFxcVxuYWJjXG56enoKK05vIG1hdGNoCisKKy9cQWFiY1xaL20KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBhYmNcbiAKKyAwOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHFxcVxuYWJjCitObyBtYXRjaAorICAgIGFiY1xuenp6CitObyBtYXRjaAorICAgIHFxcVxuYWJjXG56enoKK05vIG1hdGNoCisgICAgCisvXEEoLikqXFovcworICAgIGFiY1xuZGVmCisgMDogYWJjXHgwYWRlZgorCisvXEEoLikqXFovbQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjXG5kZWYKK05vIG1hdGNoCisKKy8oPzpiKXwoPzo6KykvCisgICAgYjo6YworIDA6IGIKKyAgICBjOjpiCisgMDogOjoKKworL1stYXpdKy8KKyAgICBhei0KKyAwOiBhei0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGIKK05vIG1hdGNoCisKKy9bYXotXSsvCisgICAgemEtCisgMDogemEtCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiCitObyBtYXRjaAorCisvW2FcLXpdKy8KKyAgICBhLXoKKyAwOiBhLXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGIKK05vIG1hdGNoCisKKy9bYS16XSsvCisgICAgYWJjZHh5egorIDA6IGFiY2R4eXoKKworL1tcZC1dKy8KKyAgICAxMi0zNAorIDA6IDEyLTM0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWEKK05vIG1hdGNoCisKKy9bXGQtel0rLworICAgIDEyLTM0egorIDA6IDEyLTM0egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhCitObyBtYXRjaAorCisvXHg1Yy8KKyAgICBcXAorIDA6IFwKKworL1x4MjBaLworICAgIHRoZSBab28KKyAwOiAgWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWnVsdQorTm8gbWF0Y2gKKworL2FiezNjZC8KKyAgICBhYnszY2QKKyAwOiBhYnszY2QKKworL2FiezMsY2QvCisgICAgYWJ7MyxjZAorIDA6IGFiezMsY2QKKworL2FiezMsNGF9Y2QvCisgICAgYWJ7Myw0YX1jZAorIDA6IGFiezMsNGF9Y2QKKworL3s0LDVhfWJjLworICAgIHs0LDVhfWJjCisgMDogezQsNWF9YmMKKworL15hLmIvbmV3bGluZT1sZgorICAgIGFccmIKKyAwOiBhXHgwZGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcbmIKK05vIG1hdGNoCisKKy9hYmMkLworICAgIGFiYworIDA6IGFiYworICAgIGFiY1xuCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNcbmRlZgorTm8gbWF0Y2gKKworLyhhYmMpXDEyMy8KKyAgICBhYmNceDUzCisgMDogYWJjUworCisvKGFiYylcMjIzLworICAgIGFiY1x4OTMKKyAwOiBhYmNceDkzCisKKy8oYWJjKVwzMjMvCisgICAgYWJjXHhkMworIDA6IGFiY1x4ZDMKKworLyhhYmMpXDEwMC8KKyAgICBhYmNceDQwCisgMDogYWJjQAorICAgIGFiY1wxMDAKKyAwOiBhYmNACisKKy8oYWJjKVwxMDAwLworICAgIGFiY1x4NDAwCisgMDogYWJjQDAKKyAgICBhYmNceDQwXHgzMAorIDA6IGFiY0AwCisgICAgYWJjXDEwMDAKKyAwOiBhYmNAMAorICAgIGFiY1wxMDBceDMwCisgMDogYWJjQDAKKyAgICBhYmNcMTAwXDA2MAorIDA6IGFiY0AwCisgICAgYWJjXDEwMFw2MAorIDA6IGFiY0AwCisKKy8oYSkoYikoYykoZCkoZSkoZikoZykoaCkoaSkoaikoaylcMTJcMTIzLworICAgIGFiY2RlZmdoaWprXDEyUworIDA6IGFiY2RlZmdoaWprXHgwYVMKKworL2F7MH1iYy8KKyAgICBiYworIDA6IGJjCisKKy8oYXwoYmMpKXswLDB9P3h5ei8KKyAgICB4eXoKKyAwOiB4eXoKKworL2FiY1tcMTBdZGUvCisgICAgYWJjXDAxMGRlCisgMDogYWJjXHgwOGRlCisKKy9hYmNbXDFdZGUvCisgICAgYWJjXDFkZQorIDA6IGFiY1x4MDFkZQorCisvKGFiYylbXDFdZGUvCisgICAgYWJjXDFkZQorIDA6IGFiY1x4MDFkZQorCisvKD9zKWEuYi8KKyAgICBhXG5iCisgMDogYVx4MGFiCisKKy9eKFteYV0pKFteXGJdKShbXmNdKikoW15kXXszLDR9KS8KKyAgICBiYU5PVGNjY2NkCisgMDogYmFOT1RjY2NjCisgMTogYmFOT1RjY2MKKyAyOiBiYU5PVGNjCisgMzogYmFOT1RjCisgICAgYmFOT1RjY2NkCisgMDogYmFOT1RjY2MKKyAxOiBiYU5PVGNjCisgMjogYmFOT1RjCisgICAgYmFOT1RjY2QKKyAwOiBiYU5PVGNjCisgMTogYmFOT1RjCisgICAgYmFjY2NkCisgMDogYmFjY2MKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFueXRoaW5nCitObyBtYXRjaAorICAgIGJcYmMgICAKK05vIG1hdGNoCisgICAgYmFjY2QKK05vIG1hdGNoCisKKy9bXmFdLworICAgIEFiYworIDA6IEEKKyAgCisvW15hXS9pCisgICAgQWJjIAorIDA6IGIKKworL1teYV0rLworICAgIEFBQWFBYmMKKyAwOiBBQUEKKyAgCisvW15hXSsvaQorICAgIEFBQWFBYmMgCisgMDogYmMKKworL1teYV0rLworICAgIGJiYlxuY2NjCisgMDogYmJiXHgwYWNjYworICAgCisvW15rXSQvCisgICAgYWJjCisgMDogYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJrICAgCitObyBtYXRjaAorICAgCisvW15rXXsyLDN9JC8KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBrYmMKKyAwOiBiYworICAgIGthYmMgCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmsKK05vIG1hdGNoCisgICAgYWtiCitObyBtYXRjaAorICAgIGFrayAKK05vIG1hdGNoCisKKy9eXGR7OCx9XEAuK1tea10kLworICAgIDEyMzQ1Njc4XEBhLmIuYy5kCisgMDogMTIzNDU2NzhAYS5iLmMuZAorICAgIDEyMzQ1Njc4OVxAeC55LnoKKyAwOiAxMjM0NTY3ODlAeC55LnoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQ1Njc4XEB4LnkudWsKK05vIG1hdGNoCisgICAgMTIzNDU2N1xAYS5iLmMuZCAgICAgICAKK05vIG1hdGNoCisKKy9bXmFdLworICAgIGFhYWFiY2QKKyAwOiBiCisgICAgYWFBYWJjZCAKKyAwOiBBCisKKy9bXmFdL2kKKyAgICBhYWFhYmNkCisgMDogYgorICAgIGFhQWFiY2QgCisgMDogYgorCisvW15hel0vCisgICAgYWFhYWJjZAorIDA6IGIKKyAgICBhYUFhYmNkIAorIDA6IEEKKworL1teYXpdL2kKKyAgICBhYWFhYmNkCisgMDogYgorICAgIGFhQWFiY2QgCisgMDogYgorCisvXDAwMFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzdcMDQwXDA0MVwwNDJcMDQzXDA0NFwwNDVcMDQ2XDA0N1wwNTBcMDUxXDA1MlwwNTNcMDU0XDA1NVwwNTZcMDU3XDA2MFwwNjFcMDYyXDA2M1wwNjRcMDY1XDA2NlwwNjdcMDcwXDA3MVwwNzJcMDczXDA3NFwwNzVcMDc2XDA3N1wxMDBcMTAxXDEwMlwxMDNcMTA0XDEwNVwxMDZcMTA3XDExMFwxMTFcMTEyXDExM1wxMTRcMTE1XDExNlwxMTdcMTIwXDEyMVwxMjJcMTIzXDEyNFwxMjVcMTI2XDEyN1wxMzBcMTMxXDEzMlwxMzNcMTM0XDEzNVwxMzZcMTM3XDE0MFwxNDFcMTQyXDE0M1wxNDRcMTQ1XDE0NlwxNDdcMTUwXDE1MVwxNTJcMTUzXDE1NFwxNTVcMTU2XDE1N1wxNjBcMTYxXDE2MlwxNjNcMTY0XDE2NVwxNjZcMTY3XDE3MFwxNzFcMTcyXDE3M1wxNzRcMTc1XDE3NlwxNzdcMjAwXDIwMVwyMDJcMjAzXDIwNFwyMDVcMjA2XDIwN1wyMTBcMjExXDIxMlwyMTNcMjE0XDIxNVwyMTZcMjE3XDIyMFwyMjFcMjIyXDIyM1wyMjRcMjI1XDIyNlwyMjdcMjMwXDIzMVwyMzJcMjMzXDIzNFwyMzVcMjM2XDIzN1wyNDBcMjQxXDI0MlwyNDNcMjQ0XDI0NVwyNDZcMjQ3XDI1MFwyNTFcMjUyXDI1M1wyNTRcMjU1XDI1NlwyNTdcMjYwXDI2MVwyNjJcMjYzXDI2NFwyNjVcMjY2XDI2N1wyNzBcMjcxXDI3MlwyNzNcMjc0XDI3NVwyNzZcMjc3XDMwMFwzMDFcMzAyXDMwM1wzMDRcMzA1XDMwNlwzMDdcMzEwXDMxMVwzMTJcMzEzXDMxNFwzMTVcMzE2XDMxN1wzMjBcMzIxXDMyMlwzMjNcMzI0XDMyNVwzMjZcMzI3XDMzMFwzMzFcMzMyXDMzM1wzMzRcMzM1XDMzNlwzMzdcMzQwXDM0MVwzNDJcMzQzXDM0NFwzNDVcMzQ2XDM0N1wzNTBcMzUxXDM1MlwzNTNcMzU0XDM1NVwzNTZcMzU3XDM2MFwzNjFcMzYyXDM2M1wzNjRcMzY1XDM2NlwzNjdcMzcwXDM3MVwzNzJcMzczXDM3NFwzNzVcMzc2XDM3Ny8KKyBcMDAwXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzN1wwNDBcMDQxXDA0MlwwNDNcMDQ0XDA0NVwwNDZcMDQ3XDA1MFwwNTFcMDUyXDA1M1wwNTRcMDU1XDA1NlwwNTdcMDYwXDA2MVwwNjJcMDYzXDA2NFwwNjVcMDY2XDA2N1wwNzBcMDcxXDA3MlwwNzNcMDc0XDA3NVwwNzZcMDc3XDEwMFwxMDFcMTAyXDEwM1wxMDRcMTA1XDEwNlwxMDdcMTEwXDExMVwxMTJcMTEzXDExNFwxMTVcMTE2XDExN1wxMjBcMTIxXDEyMlwxMjNcMTI0XDEyNVwxMjZcMTI3XDEzMFwxMzFcMTMyXDEzM1wxMzRcMTM1XDEzNlwxMzdcMTQwXDE0MVwxNDJcMTQzXDE0NFwxNDVcMTQ2XDE0N1wxNTBcMTUxXDE1MlwxNTNcMTU0XDE1NVwxNTZcMTU3XDE2MFwxNjFcMTYyXDE2M1wxNjRcMTY1XDE2NlwxNjdcMTcwXDE3MVwxNzJcMTczXDE3NFwxNzVcMTc2XDE3N1wyMDBcMjAxXDIwMlwyMDNcMjA0XDIwNVwyMDZcMjA3XDIxMFwyMTFcMjEyXDIxM1wyMTRcMjE1XDIxNlwyMTdcMjIwXDIyMVwyMjJcMjIzXDIyNFwyMjVcMjI2XDIyN1wyMzBcMjMxXDIzMlwyMzNcMjM0XDIzNVwyMzZcMjM3XDI0MFwyNDFcMjQyXDI0M1wyNDRcMjQ1XDI0NlwyNDdcMjUwXDI1MVwyNTJcMjUzXDI1NFwyNTVcMjU2XDI1N1wyNjBcMjYxXDI2MlwyNjNcMjY0XDI2NVwyNjZcMjY3XDI3MFwyNzFcMjcyXDI3M1wyNzRcMjc1XDI3NlwyNzdcMzAwXDMwMVwzMDJcMzAzXDMwNFwzMDVcMzA2XDMwN1wzMTBcMzExXDMxMlwzMTNcMzE0XDMxNVwzMTZcMzE3XDMyMFwzMjFcMzIyXDMyM1wzMjRcMzI1XDMyNlwzMjdcMzMwXDMzMVwzMzJcMzMzXDMzNFwzMzVcMzM2XDMzN1wzNDBcMzQxXDM0MlwzNDNcMzQ0XDM0NVwzNDZcMzQ3XDM1MFwzNTFcMzUyXDM1M1wzNTRcMzU1XDM1NlwzNTdcMzYwXDM2MVwzNjJcMzYzXDM2NFwzNjVcMzY2XDM2N1wzNzBcMzcxXDM3MlwzNzNcMzc0XDM3NVwzNzZcMzc3CisgMDogXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwOVx4MGFceDBiXHgwY1x4MGRceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhmZgorCisvUFteKl1UQUlSRVteKl17MSw2fT9MTC8KKyAgICB4eHh4eHh4eHh4eFBTVEFJUkVJU0xMeHh4eHh4eHh4CisgMDogUFNUQUlSRUlTTEwKKworL1BbXipdVEFJUkVbXipdezEsfT9MTC8KKyAgICB4eHh4eHh4eHh4eFBTVEFJUkVJU0xMeHh4eHh4eHh4CisgMDogUFNUQUlSRUlTTEwKKworLyhcLlxkXGRbMS05XT8pXGQrLworICAgIDEuMjMwMDAzOTM4CisgMDogLjIzMDAwMzkzOAorICAgIDEuODc1MDAwMjgyICAgCisgMDogLjg3NTAwMDI4MgorICAgIDEuMjM1ICAKKyAwOiAuMjM1CisgICAgICAgICAgICAgICAgICAKKy8oXC5cZFxkKCg/PTApfFxkKD89XGQpKSkvCisgICAgMS4yMzAwMDM5MzggICAgICAKKyAwOiAuMjMwCisgMTogLjIzCisgICAgMS44NzUwMDAyODIKKyAwOiAuODc1CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgMS4yMzUgCitObyBtYXRjaAorICAgIAorL2EoPyliLworICAgIGFiIAorIDA6IGFiCisgCisvXGIoZm9vKVxzKyhcdyspL2kKKyAgICBGb29kIGlzIG9uIHRoZSBmb28gdGFibGUKKyAwOiBmb28gdGFibGUKKyAgICAKKy9mb28oLiopYmFyLworICAgIFRoZSBmb29kIGlzIHVuZGVyIHRoZSBiYXIgaW4gdGhlIGJhcm4uCisgMDogZm9vZCBpcyB1bmRlciB0aGUgYmFyIGluIHRoZSBiYXIKKyAxOiBmb29kIGlzIHVuZGVyIHRoZSBiYXIKKyAgICAKKy9mb28oLio/KWJhci8KKyAgICBUaGUgZm9vZCBpcyB1bmRlciB0aGUgYmFyIGluIHRoZSBiYXJuLgorIDA6IGZvb2QgaXMgdW5kZXIgdGhlIGJhciBpbiB0aGUgYmFyCisgMTogZm9vZCBpcyB1bmRlciB0aGUgYmFyCisKKy8oLiopKFxkKikvbm9fYXV0b19wb3NzZXNzCisgICAgSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKK01hdGNoZWQsIGJ1dCBvZmZzZXRzIHZlY3RvciBpcyB0b28gc21hbGwgdG8gc2hvdyBhbGwgbWF0Y2hlcworIDA6IEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMTogSSBoYXZlIDIgbnVtYmVyczogNTMxNAorIDI6IEkgaGF2ZSAyIG51bWJlcnM6IDUzMQorIDM6IEkgaGF2ZSAyIG51bWJlcnM6IDUzCisgNDogSSBoYXZlIDIgbnVtYmVyczogNQorIDU6IEkgaGF2ZSAyIG51bWJlcnM6IAorIDY6IEkgaGF2ZSAyIG51bWJlcnM6CisgNzogSSBoYXZlIDIgbnVtYmVycworIDg6IEkgaGF2ZSAyIG51bWJlcgorIDk6IEkgaGF2ZSAyIG51bWJlCisxMDogSSBoYXZlIDIgbnVtYgorMTE6IEkgaGF2ZSAyIG51bQorMTI6IEkgaGF2ZSAyIG51CisxMzogSSBoYXZlIDIgbgorMTQ6IEkgaGF2ZSAyIAorICAgIAorLyguKikoXGQrKS8KKyAgICBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworIDA6IEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMTogSSBoYXZlIDIKKyAKKy8oLio/KShcZCopL25vX2F1dG9fcG9zc2VzcworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CitNYXRjaGVkLCBidXQgb2Zmc2V0cyB2ZWN0b3IgaXMgdG9vIHNtYWxsIHRvIHNob3cgYWxsIG1hdGNoZXMKKyAwOiBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworIDE6IEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQKKyAyOiBJIGhhdmUgMiBudW1iZXJzOiA1MzEKKyAzOiBJIGhhdmUgMiBudW1iZXJzOiA1MworIDQ6IEkgaGF2ZSAyIG51bWJlcnM6IDUKKyA1OiBJIGhhdmUgMiBudW1iZXJzOiAKKyA2OiBJIGhhdmUgMiBudW1iZXJzOgorIDc6IEkgaGF2ZSAyIG51bWJlcnMKKyA4OiBJIGhhdmUgMiBudW1iZXIKKyA5OiBJIGhhdmUgMiBudW1iZQorMTA6IEkgaGF2ZSAyIG51bWIKKzExOiBJIGhhdmUgMiBudW0KKzEyOiBJIGhhdmUgMiBudQorMTM6IEkgaGF2ZSAyIG4KKzE0OiBJIGhhdmUgMiAKKworLyguKj8pKFxkKykvCisgICAgSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKyAwOiBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworIDE6IEkgaGF2ZSAyCisKKy8oLiopKFxkKykkLworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMDogSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKworLyguKj8pKFxkKykkLworICAgIEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisgMDogSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKworLyguKilcYihcZCspJC8KKyAgICBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworIDA6IEkgaGF2ZSAyIG51bWJlcnM6IDUzMTQ3CisKKy8oLipcRCkoXGQrKSQvCisgICAgSSBoYXZlIDIgbnVtYmVyczogNTMxNDcKKyAwOiBJIGhhdmUgMiBudW1iZXJzOiA1MzE0NworCisvXlxEKig/ITEyMykvCisgICAgQUJDMTIzCisgMDogQUIKKyAxOiBBCisgMjogCisgICAgIAorL14oXEQqKSg/PVxkKSg/ITEyMykvCisgICAgQUJDNDQ1CisgMDogQUJDCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkMxMjMKK05vIG1hdGNoCisgICAgCisvXltXLV00Nl0vCisgICAgVzQ2XTc4OSAKKyAwOiBXNDZdCisgICAgLTQ2XTc4OQorIDA6IC00Nl0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFdhbGwKK05vIG1hdGNoCisgICAgWmVicmEKK05vIG1hdGNoCisgICAgNDIKK05vIG1hdGNoCisgICAgW2FiY2RdIAorTm8gbWF0Y2gKKyAgICBdYWJjZFsKK05vIG1hdGNoCisgICAgICAgCisvXltXLVxdNDZdLworICAgIFc0Nl03ODkgCisgMDogVworICAgIFdhbGwKKyAwOiBXCisgICAgWmVicmEKKyAwOiBaCisgICAgWHlsb3Bob25lICAKKyAwOiBYCisgICAgNDIKKyAwOiA0CisgICAgW2FiY2RdIAorIDA6IFsKKyAgICBdYWJjZFsKKyAwOiBdCisgICAgXFxiYWNrc2xhc2ggCisgMDogXAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgLTQ2XTc4OQorTm8gbWF0Y2gKKyAgICB3ZWxsCitObyBtYXRjaAorICAgIAorL1xkXGRcL1xkXGRcL1xkXGRcZFxkLworICAgIDAxLzAxLzIwMDAKKyAwOiAwMS8wMS8yMDAwCisKKy93b3JkICg/OlthLXpBLVowLTldKyApezAsMTB9b3RoZXJ3b3JkLworICB3b3JkIGNhdCBkb2cgZWxlcGhhbnQgbXVzc2VsIGNvdyBob3JzZSBjYW5hcnkgYmFib29uIHNuYWtlIHNoYXJrIG90aGVyd29yZAorIDA6IHdvcmQgY2F0IGRvZyBlbGVwaGFudCBtdXNzZWwgY293IGhvcnNlIGNhbmFyeSBiYWJvb24gc25ha2Ugc2hhcmsgb3RoZXJ3b3JkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyaworTm8gbWF0Y2gKKworL3dvcmQgKD86W2EtekEtWjAtOV0rICl7MCwzMDB9b3RoZXJ3b3JkLworXD0gRXhwZWN0IG5vIG1hdGNoCisgIHdvcmQgY2F0IGRvZyBlbGVwaGFudCBtdXNzZWwgY293IGhvcnNlIGNhbmFyeSBiYWJvb24gc25ha2Ugc2hhcmsgdGhlIHF1aWNrIGJyb3duIGZveCBhbmQgdGhlIGxhenkgZG9nIGFuZCBzZXZlcmFsIG90aGVyIHdvcmRzIGdldHRpbmcgY2xvc2UgdG8gdGhpcnR5IGJ5IG5vdyBJIGhvcGUKK05vIG1hdGNoCisKKy9eKGEpezAsMH0vCisgICAgYmNkCisgMDogCisgICAgYWJjCisgMDogCisgICAgYWFiICAgICAKKyAwOiAKKworL14oYSl7MCwxfS8KKyAgICBiY2QKKyAwOiAKKyAgICBhYmMKKyAwOiBhCisgMTogCisgICAgYWFiICAKKyAwOiBhCisgMTogCisKKy9eKGEpezAsMn0vCisgICAgYmNkCisgMDogCisgICAgYWJjCisgMDogYQorIDE6IAorICAgIGFhYiAgCisgMDogYWEKKyAxOiBhCisgMjogCisKKy9eKGEpezAsM30vCisgICAgYmNkCisgMDogCisgICAgYWJjCisgMDogYQorIDE6IAorICAgIGFhYgorIDA6IGFhCisgMTogYQorIDI6IAorICAgIGFhYSAgIAorIDA6IGFhYQorIDE6IGFhCisgMjogYQorIDM6IAorCisvXihhKXswLH0vCisgICAgYmNkCisgMDogCisgICAgYWJjCisgMDogYQorIDE6IAorICAgIGFhYgorIDA6IGFhCisgMTogYQorIDI6IAorICAgIGFhYQorIDA6IGFhYQorIDE6IGFhCisgMjogYQorIDM6IAorICAgIGFhYWFhYWFhICAgIAorIDA6IGFhYWFhYWFhCisgMTogYWFhYWFhYQorIDI6IGFhYWFhYQorIDM6IGFhYWFhCisgNDogYWFhYQorIDU6IGFhYQorIDY6IGFhCisgNzogYQorIDg6IAorCisvXihhKXsxLDF9LworICAgIGFiYworIDA6IGEKKyAgICBhYWIgIAorIDA6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJjZAorTm8gbWF0Y2gKKworL14oYSl7MSwyfS8KKyAgICBhYmMKKyAwOiBhCisgICAgYWFiICAKKyAwOiBhYQorIDE6IGEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJjZAorTm8gbWF0Y2gKKworL14oYSl7MSwzfS8KKyAgICBhYmMKKyAwOiBhCisgICAgYWFiCisgMDogYWEKKyAxOiBhCisgICAgYWFhICAgCisgMDogYWFhCisgMTogYWEKKyAyOiBhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiY2QKK05vIG1hdGNoCisKKy9eKGEpezEsfS8KKyAgICBhYmMKKyAwOiBhCisgICAgYWFiCisgMDogYWEKKyAxOiBhCisgICAgYWFhCisgMDogYWFhCisgMTogYWEKKyAyOiBhCisgICAgYWFhYWFhYWEgICAgCisgMDogYWFhYWFhYWEKKyAxOiBhYWFhYWFhCisgMjogYWFhYWFhCisgMzogYWFhYWEKKyA0OiBhYWFhCisgNTogYWFhCisgNjogYWEKKyA3OiBhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiY2QKK05vIG1hdGNoCisKKy8uKlwuZ2lmLworICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKyAwOiBiaWIuZ2lmCisKKy8uezAsfVwuZ2lmLworICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKyAwOiBiaWIuZ2lmCisKKy8uKlwuZ2lmL20KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisgMDogYmliLmdpZgorCisvLipcLmdpZi9zCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ubworIDA6IGJvcmZsZVx4MGFiaWIuZ2lmCisKKy8uKlwuZ2lmL21zCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ubworIDA6IGJvcmZsZVx4MGFiaWIuZ2lmCisgICAgCisvLiokLworICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKyAwOiBubworCisvLiokL20KKyAgICBib3JmbGVcbmJpYi5naWZcbm5vCisgMDogYm9yZmxlCisKKy8uKiQvcworICAgIGJvcmZsZVxuYmliLmdpZlxubm8KKyAwOiBib3JmbGVceDBhYmliLmdpZlx4MGFubworCisvLiokL21zCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ubworIDA6IGJvcmZsZVx4MGFiaWIuZ2lmXHgwYW5vCisgMTogYm9yZmxlXHgwYWJpYi5naWYKKyAyOiBib3JmbGUKKyAgICAKKy8uKiQvCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ub1xuCisgMDogbm8KKworLy4qJC9tCisgICAgYm9yZmxlXG5iaWIuZ2lmXG5ub1xuCisgMDogYm9yZmxlCisKKy8uKiQvcworICAgIGJvcmZsZVxuYmliLmdpZlxubm9cbgorIDA6IGJvcmZsZVx4MGFiaWIuZ2lmXHgwYW5vXHgwYQorIDE6IGJvcmZsZVx4MGFiaWIuZ2lmXHgwYW5vCisKKy8uKiQvbXMKKyAgICBib3JmbGVcbmJpYi5naWZcbm5vXG4KKyAwOiBib3JmbGVceDBhYmliLmdpZlx4MGFub1x4MGEKKyAxOiBib3JmbGVceDBhYmliLmdpZlx4MGFubworIDI6IGJvcmZsZVx4MGFiaWIuZ2lmCisgMzogYm9yZmxlCisgICAgCisvKC4qWHxeQikvCisgICAgYWJjZGVcbjEyMzRYeXoKKyAwOiAxMjM0WAorICAgIEJhckZvbyAKKyAwOiBCCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkZVxuQmFyICAKK05vIG1hdGNoCisKKy8oLipYfF5CKS9tCisgICAgYWJjZGVcbjEyMzRYeXoKKyAwOiAxMjM0WAorICAgIEJhckZvbyAKKyAwOiBCCisgICAgYWJjZGVcbkJhciAgCisgMDogQgorCisvKC4qWHxeQikvcworICAgIGFiY2RlXG4xMjM0WHl6CisgMDogYWJjZGVceDBhMTIzNFgKKyAgICBCYXJGb28gCisgMDogQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZGVcbkJhciAgCitObyBtYXRjaAorCisvKC4qWHxeQikvbXMKKyAgICBhYmNkZVxuMTIzNFh5egorIDA6IGFiY2RlXHgwYTEyMzRYCisgICAgQmFyRm9vIAorIDA6IEIKKyAgICBhYmNkZVxuQmFyICAKKyAwOiBCCisKKy8oP3MpKC4qWHxeQikvCisgICAgYWJjZGVcbjEyMzRYeXoKKyAwOiBhYmNkZVx4MGExMjM0WAorICAgIEJhckZvbyAKKyAwOiBCCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWJjZGVcbkJhciAgCitObyBtYXRjaAorCisvKD9zOi4qWHxeQikvCisgICAgYWJjZGVcbjEyMzRYeXoKKyAwOiBhYmNkZVx4MGExMjM0WAorICAgIEJhckZvbyAKKyAwOiBCCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWJjZGVcbkJhciAgCitObyBtYXRjaAorCisvXi4qQi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY1xuQgorTm8gbWF0Y2gKKyAgICAgCisvKD9zKV4uKkIvCisgICAgYWJjXG5CCisgMDogYWJjXHgwYUIKKworLyg/bSleLipCLworICAgIGFiY1xuQgorIDA6IEIKKyAgICAgCisvKD9tcyleLipCLworICAgIGFiY1xuQgorIDA6IGFiY1x4MGFCCisKKy8oP21zKV5CLworICAgIGFiY1xuQgorIDA6IEIKKworLyg/cylCJC8KKyAgICBCXG4KKyAwOiBCCisKKy9eWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldWzAtOV1bMC05XVswLTldLworICAgIDEyMzQ1NjY1NDMyMQorIDA6IDEyMzQ1NjY1NDMyMQorICAKKy9eXGRcZFxkXGRcZFxkXGRcZFxkXGRcZFxkLworICAgIDEyMzQ1NjY1NDMyMSAKKyAwOiAxMjM0NTY2NTQzMjEKKworL15bXGRdW1xkXVtcZF1bXGRdW1xkXVtcZF1bXGRdW1xkXVtcZF1bXGRdW1xkXVtcZF0vCisgICAgMTIzNDU2NjU0MzIxCisgMDogMTIzNDU2NjU0MzIxCisgIAorL15bYWJjXXsxMn0vCisgICAgYWJjYWJjYWJjYWJjCisgMDogYWJjYWJjYWJjYWJjCisgICAgCisvXlthLWNdezEyfS8KKyAgICBhYmNhYmNhYmNhYmMKKyAwOiBhYmNhYmNhYmNhYmMKKyAgICAKKy9eKGF8YnxjKXsxMn0vCisgICAgYWJjYWJjYWJjYWJjIAorIDA6IGFiY2FiY2FiY2FiYworCisvXlthYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5MDEyMzQ1Njc4OV0vCisgICAgbgorIDA6IG4KK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICB6IAorTm8gbWF0Y2gKKworL2FiY2RlezAsMH0vCisgICAgYWJjZAorIDA6IGFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2UgIAorTm8gbWF0Y2gKKworL2FiW2NkXXswLDB9ZS8KKyAgICBhYmUKKyAwOiBhYmUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2RlIAorTm8gbWF0Y2gKKyAgICAKKy9hYihjKXswLDB9ZC8KKyAgICBhYmQKKyAwOiBhYmQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2QgICAKK05vIG1hdGNoCisKKy9hKGIqKS8KKyAgICBhCisgMDogYQorICAgIGFiCisgMDogYWIKKyAgICBhYmJiYgorIDA6IGFiYmJiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYmJiYiAgICAKK05vIG1hdGNoCisgICAgCisvYWJcZHswfWUvCisgICAgYWJlCisgMDogYWJlCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYjFlICAgCitObyBtYXRjaAorICAgIAorLyIoW15cXCJdK3xcXC4pKiIvCisgICAgdGhlIFwicXVpY2tcIiBicm93biBmb3gKKyAwOiAicXVpY2siCisgICAgXCJ0aGUgXFxcInF1aWNrXFxcIiBicm93biBmb3hcIiAKKyAwOiAidGhlIFwicXVpY2tcIiBicm93biBmb3giCisKKy8uKj8vZyxhZnRlcnRleHQKKyAgICBhYmMKKyAwOiBhYmMKKyAwKyAKKyAxOiBhYgorIDI6IGEKKyAzOiAKKyAwOiAKKyAwKyAKKyAgCisvXGIvZyxhZnRlcnRleHQKKyAgICBhYmMgCisgMDogCisgMCsgYWJjCisgMDogCisgMCsgCisKKy9cYi9nLGFmdGVydGV4dAorICAgIGFiYyAKKyAwOiAKKyAwKyBhYmMKKyAwOiAKKyAwKyAKKworLy9nCisgICAgYWJjCisgMDogCisgMDogCisgMDogCisgMDogCisKKy88dHIoW1x3XFdcc1xkXVtePD5dezAsfSk+PFREKFtcd1xXXHNcZF1bXjw+XXswLH0pPihbXGRdezAsfVwuKSguKikoKDxCUj4oW1x3XFdcc1xkXVtePD5dezAsfSl8W1xzXXswLH0pKTxcL2E+PFwvVEQ+PFREKFtcd1xXXHNcZF1bXjw+XXswLH0pPihbXHdcV1xzXGRdW148Pl17MCx9KTxcL1REPjxURChbXHdcV1xzXGRdW148Pl17MCx9KT4oW1x3XFdcc1xkXVtePD5dezAsfSk8XC9URD48XC9UUj4vaXMKKyAgPFRSIEJHQ09MT1I9JyNEQkU5RTknPjxURCBhbGlnbj1sZWZ0IHZhbGlnbj10b3A+NDMuPGEgaHJlZj0nam9ibGlzdC5jZm0/Sm9iSUQ9OTQgNjczNSZLZXl3b3JkPSc+V29yZCBQcm9jZXNzb3I8QlI+KE4tMTI4Nik8L2E+PC9URD48VEQgYWxpZ249bGVmdCB2YWxpZ249dG9wPkxlZ2EgbHN0YWZmLmNvbTwvVEQ+PFREIGFsaWduPWxlZnQgdmFsaWduPXRvcD5DQSAtIFN0YXRld2lkZTwvVEQ+PC9UUj4KKyAwOiA8VFIgQkdDT0xPUj0nI0RCRTlFOSc+PFREIGFsaWduPWxlZnQgdmFsaWduPXRvcD40My48YSBocmVmPSdqb2JsaXN0LmNmbT9Kb2JJRD05NCA2NzM1JktleXdvcmQ9Jz5Xb3JkIFByb2Nlc3NvcjxCUj4oTi0xMjg2KTwvYT48L1REPjxURCBhbGlnbj1sZWZ0IHZhbGlnbj10b3A+TGVnYSBsc3RhZmYuY29tPC9URD48VEQgYWxpZ249bGVmdCB2YWxpZ249dG9wPkNBIC0gU3RhdGV3aWRlPC9URD48L1RSPgorCisvYVteYV1iLworICAgIGFjYgorIDA6IGFjYgorICAgIGFcbmIKKyAwOiBhXHgwYWIKKyAgICAKKy9hLmIvCisgICAgYWNiCisgMDogYWNiCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYVxuYiAgIAorTm8gbWF0Y2gKKyAgICAKKy9hW15hXWIvcworICAgIGFjYgorIDA6IGFjYgorICAgIGFcbmIgIAorIDA6IGFceDBhYgorICAgIAorL2EuYi9zCisgICAgYWNiCisgMDogYWNiCisgICAgYVxuYiAgCisgMDogYVx4MGFiCisKKy9eKGIrP3xhKXsxLDJ9P2MvCisgICAgYmFjCisgMDogYmFjCisgICAgYmJhYworIDA6IGJiYWMKKyAgICBiYmJhYworIDA6IGJiYmFjCisgICAgYmJiYmFjCisgMDogYmJiYmFjCisgICAgYmJiYmJhYyAKKyAwOiBiYmJiYmFjCisKKy9eKGIrfGEpezEsMn0/Yy8KKyAgICBiYWMKKyAwOiBiYWMKKyAgICBiYmFjCisgMDogYmJhYworICAgIGJiYmFjCisgMDogYmJiYWMKKyAgICBiYmJiYWMKKyAwOiBiYmJiYWMKKyAgICBiYmJiYmFjIAorIDA6IGJiYmJiYWMKKyAgICAKKy8oPyFcQSl4L20KKyAgICBhXGJ4XG4gIAorIDA6IHgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHhcbmJcbgorTm8gbWF0Y2gKKyAgICAKKy9ceDB7YWJ9LworICAgIFwwe2FifSAKKyAwOiBceDAwe2FifQorCisvKEF8QikqP0NELworICAgIENEIAorIDA6IENECisgICAgCisvKEF8QikqQ0QvCisgICAgQ0QgCisgMDogQ0QKKworLyg/PCFiYXIpZm9vLworICAgIGZvbworIDA6IGZvbworICAgIGNhdGZvb2QKKyAwOiBmb28KKyAgICBhcmZvb3RsZQorIDA6IGZvbworICAgIHJmb29zaAorIDA6IGZvbworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmFyZm9vCitObyBtYXRjaAorICAgIHRvd2JhcmZvbworTm8gbWF0Y2gKKworL1x3ezN9KD88IWJhcilmb28vCisgICAgY2F0Zm9vZAorIDA6IGNhdGZvbworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgZm9vCitObyBtYXRjaAorICAgIGJhcmZvbworTm8gbWF0Y2gKKyAgICB0b3diYXJmb28KK05vIG1hdGNoCisKKy8oPzw9KGZvbylhKWJhci8KKyAgICBmb29hYmFyCisgMDogYmFyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiYXIKK05vIG1hdGNoCisgICAgZm9vYmJhcgorTm8gbWF0Y2gKKyAgICAgIAorL1xBYWJjXHovbQorICAgIGFiYworIDA6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjXG4gICAKK05vIG1hdGNoCisgICAgcXFxXG5hYmMKK05vIG1hdGNoCisgICAgYWJjXG56enoKK05vIG1hdGNoCisgICAgcXFxXG5hYmNcbnp6egorTm8gbWF0Y2gKKworIig/Pi4qLylmb28iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAvdGhpcy9pcy9hL3ZlcnkvbG9uZy9saW5lL2luL2RlZWQvd2l0aC92ZXJ5L21hbnkvc2xhc2hlcy9pbi9pdC95b3Uvc2VlLworTm8gbWF0Y2gKKworIig/Pi4qLylmb28iCisgICAgL3RoaXMvaXMvYS92ZXJ5L2xvbmcvbGluZS9pbi9kZWVkL3dpdGgvdmVyeS9tYW55L3NsYXNoZXMvaW4vYW5kL2ZvbworIDA6IC90aGlzL2lzL2EvdmVyeS9sb25nL2xpbmUvaW4vZGVlZC93aXRoL3ZlcnkvbWFueS9zbGFzaGVzL2luL2FuZC9mb28KKworLyg/PihcLlxkXGRbMS05XT8pKVxkKy8KKyAgICAxLjIzMDAwMzkzOAorIDA6IC4yMzAwMDM5MzgKKyAgICAxLjg3NTAwMDI4MgorIDA6IC44NzUwMDAyODIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICAxLjIzNSAKK05vIG1hdGNoCisKKy9eKCg/Plx3Kyl8KD8+XHMrKSkqJC8KKyAgICBub3cgaXMgdGhlIHRpbWUgZm9yIGFsbCBnb29kIG1lbiB0byBjb21lIHRvIHRoZSBhaWQgb2YgdGhlIHBhcnR5CisgMDogbm93IGlzIHRoZSB0aW1lIGZvciBhbGwgZ29vZCBtZW4gdG8gY29tZSB0byB0aGUgYWlkIG9mIHRoZSBwYXJ0eQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgdGhpcyBpcyBub3QgYSBsaW5lIHdpdGggb25seSB3b3JkcyBhbmQgc3BhY2VzIQorTm8gbWF0Y2gKKyAgICAKKy8oXGQrKShcdykvCisgICAgMTIzNDVhCisgMDogMTIzNDVhCisgMTogMTIzNDUKKyAyOiAxMjM0CisgMzogMTIzCisgNDogMTIKKyAgICAxMjM0NSsgCisgMDogMTIzNDUKKyAxOiAxMjM0CisgMjogMTIzCisgMzogMTIKKworLygoPz5cZCspKShcdykvCisgICAgMTIzNDVhCisgMDogMTIzNDVhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0NSsgCitObyBtYXRjaAorCisvKD8+YSspYi8KKyAgICBhYWFiCisgMDogYWFhYgorCisvKCg/PmErKWIpLworICAgIGFhYWIKKyAwOiBhYWFiCisKKy8oPz4oYSspKWIvCisgICAgYWFhYgorIDA6IGFhYWIKKworLyg/PmIpKy8KKyAgICBhYWFiYmJjY2MKKyAwOiBiYmIKKyAxOiBiYgorIDI6IGIKKworLyg/PmErfGIrfGMrKSpjLworICAgIGFhYWJiYmJjY2NjZAorIDA6IGFhYWJiYmJjY2NjCisgMTogYWFhYmJiYmMKKyAgICAKKy8oYSt8Yit8YyspKmMvCisgICAgYWFhYmJiYmNjY2NkCisgMDogYWFhYmJiYmNjY2MKKyAxOiBhYWFiYmJiY2NjCisgMjogYWFhYmJiYmNjCisgMzogYWFhYmJiYmMKKworLygoPz5bXigpXSspfFwoW14oKV0qXCkpKy8KKyAgICAoKGFiYyhhZGUpdWZoKCkoKXgKKyAwOiBhYmMoYWRlKXVmaCgpKCl4CisgMTogYWJjKGFkZSl1ZmgoKSgpCisgMjogYWJjKGFkZSl1ZmgoKQorIDM6IGFiYyhhZGUpdWZoCisgNDogYWJjKGFkZSkKKyA1OiBhYmMKKyAgICAKKy9cKCgoPz5bXigpXSspfFwoW14oKV0rXCkpK1wpLworICAgIChhYmMpCisgMDogKGFiYykKKyAgICAoYWJjKGRlZil4eXopCisgMDogKGFiYyhkZWYpeHl6KQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgKCgoKWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhICAgCitObyBtYXRjaAorCisvYSg/LWkpYi9pCisgICAgYWIKKyAwOiBhYgorICAgIEFiCisgMDogQWIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBhQgorTm8gbWF0Y2gKKyAgICBBQgorTm8gbWF0Y2gKKyAgICAgICAgCisvKGEgKD94KWIgYylkIGUvCisgICAgYSBiY2QgZQorIDA6IGEgYmNkIGUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEgYiBjZCBlCitObyBtYXRjaAorICAgIGFiY2QgZSAgIAorTm8gbWF0Y2gKKyAgICBhIGJjZGUgCitObyBtYXRjaAorIAorLyhhIGIoP3gpYyBkICg/LXgpZSBmKS8KKyAgICBhIGJjZGUgZgorIDA6IGEgYmNkZSBmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkZWYgIAorTm8gbWF0Y2gKKworLyhhKD9pKWIpYy8KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBhQmMKKyAwOiBhQmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiQworTm8gbWF0Y2gKKyAgICBhQkMgIAorTm8gbWF0Y2gKKyAgICBBYmMKK05vIG1hdGNoCisgICAgQUJjCitObyBtYXRjaAorICAgIEFCQworTm8gbWF0Y2gKKyAgICBBYkMKK05vIG1hdGNoCisgICAgCisvYSg/aTpiKWMvCisgICAgYWJjCisgMDogYWJjCisgICAgYUJjCisgMDogYUJjCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgQUJDCitObyBtYXRjaAorICAgIGFiQworTm8gbWF0Y2gKKyAgICBhQkMKK05vIG1hdGNoCisgICAgCisvYSg/aTpiKSpjLworICAgIGFCYworIDA6IGFCYworICAgIGFCQmMKKyAwOiBhQkJjCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYUJDCitObyBtYXRjaAorICAgIGFCQkMKK05vIG1hdGNoCisgICAgCisvYSg/PWIoP2kpYylcd1x3ZC8KKyAgICBhYmNkCisgMDogYWJjZAorICAgIGFiQ2QKKyAwOiBhYkNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhQkNkCitObyBtYXRjaAorICAgIGFiY0QgICAgIAorTm8gbWF0Y2gKKyAgICAKKy8oP3MtaTptb3JlLip0aGFuKS4qbWlsbGlvbi9pCisgICAgbW9yZSB0aGFuIG1pbGxpb24KKyAwOiBtb3JlIHRoYW4gbWlsbGlvbgorICAgIG1vcmUgdGhhbiBNSUxMSU9OCisgMDogbW9yZSB0aGFuIE1JTExJT04KKyAgICBtb3JlIFxuIHRoYW4gTWlsbGlvbiAKKyAwOiBtb3JlIFx4MGEgdGhhbiBNaWxsaW9uCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBNT1JFIFRIQU4gTUlMTElPTiAgICAKK05vIG1hdGNoCisgICAgbW9yZSBcbiB0aGFuIFxuIG1pbGxpb24gCitObyBtYXRjaAorCisvKD86KD9zLWkpbW9yZS4qdGhhbikuKm1pbGxpb24vaQorICAgIG1vcmUgdGhhbiBtaWxsaW9uCisgMDogbW9yZSB0aGFuIG1pbGxpb24KKyAgICBtb3JlIHRoYW4gTUlMTElPTgorIDA6IG1vcmUgdGhhbiBNSUxMSU9OCisgICAgbW9yZSBcbiB0aGFuIE1pbGxpb24gCisgMDogbW9yZSBceDBhIHRoYW4gTWlsbGlvbgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgTU9SRSBUSEFOIE1JTExJT04gICAgCitObyBtYXRjaAorICAgIG1vcmUgXG4gdGhhbiBcbiBtaWxsaW9uIAorTm8gbWF0Y2gKKyAgICAKKy8oPz5hKD9pKWIrKStjLworICAgIGFiYworIDA6IGFiYworICAgIGFCYmMKKyAwOiBhQmJjCisgICAgYUJCYyAKKyAwOiBhQkJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYmMKK05vIG1hdGNoCisgICAgYWJBYiAgICAKK05vIG1hdGNoCisgICAgYWJiQyAKK05vIG1hdGNoCisgICAgCisvKD89YSg/aSliKVx3XHdjLworICAgIGFiYworIDA6IGFiYworICAgIGFCYworIDA6IGFCYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWIgCitObyBtYXRjaAorICAgIGFiQworTm8gbWF0Y2gKKyAgICBhQkMgICAgIAorTm8gbWF0Y2gKKyAgICAKKy8oPzw9YSg/aSliKShcd1x3KWMvCisgICAgYWJ4eGMKKyAwOiB4eGMKKyAgICBhQnh4YworIDA6IHh4YworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWJ4eGMKK05vIG1hdGNoCisgICAgQUJ4eGMKK05vIG1hdGNoCisgICAgYWJ4eEMgICAgICAKK05vIG1hdGNoCisKKy9eKD8oPz1hYmMpXHd7M306fFxkXGQpJC8KKyAgICBhYmM6CisgMDogYWJjOgorICAgIDEyCisgMDogMTIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMworTm8gbWF0Y2gKKyAgICB4eXogICAgCitObyBtYXRjaAorCisvXig/KD8hYWJjKVxkXGR8XHd7M306KSQvCisgICAgYWJjOgorIDA6IGFiYzoKKyAgICAxMgorIDA6IDEyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjMKK05vIG1hdGNoCisgICAgeHl6ICAgIAorTm8gbWF0Y2gKKyAgICAKKy8oPyg/PD1mb28pYmFyfGNhdCkvCisgICAgZm9vYmFyCisgMDogYmFyCisgICAgY2F0CisgMDogY2F0CisgICAgZmNhdAorIDA6IGNhdAorICAgIGZvY2F0ICAgCisgMDogY2F0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBmb29jYXQgIAorTm8gbWF0Y2gKKworLyg/KD88IWZvbyljYXR8YmFyKS8KKyAgICBmb29iYXIKKyAwOiBiYXIKKyAgICBjYXQKKyAwOiBjYXQKKyAgICBmY2F0CisgMDogY2F0CisgICAgZm9jYXQgICAKKyAwOiBjYXQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGZvb2NhdCAgCitObyBtYXRjaAorCisvKD8+YSopKi8KKyAgICBhCisgMDogYQorIDE6IAorICAgIGFhCisgMDogYWEKKyAxOiAKKyAgICBhYWFhCisgMDogYWFhYQorIDE6IAorICAgIAorLyhhYmN8KSsvCisgICAgYWJjCisgMDogYWJjCisgMTogCisgICAgYWJjYWJjCisgMDogYWJjYWJjCisgMTogYWJjCisgMjogCisgICAgYWJjYWJjYWJjCisgMDogYWJjYWJjYWJjCisgMTogYWJjYWJjCisgMjogYWJjCisgMzogCisgICAgeHl6ICAgICAgCisgMDogCisKKy8oW2FdKikqLworICAgIGEKKyAwOiBhCisgMTogCisgICAgYWFhYWEgCisgMDogYWFhYWEKKyAxOiBhYWFhCisgMjogYWFhCisgMzogYWEKKyA0OiBhCisgNTogCisgCisvKFthYl0qKSovCisgICAgYQorIDA6IGEKKyAxOiAKKyAgICBiCisgMDogYgorIDE6IAorICAgIGFiYWJhYgorIDA6IGFiYWJhYgorIDE6IGFiYWJhCisgMjogYWJhYgorIDM6IGFiYQorIDQ6IGFiCisgNTogYQorIDY6IAorICAgIGFhYWFiY2RlCisgMDogYWFhYWIKKyAxOiBhYWFhCisgMjogYWFhCisgMzogYWEKKyA0OiBhCisgNTogCisgICAgYmJiYiAgICAKKyAwOiBiYmJiCisgMTogYmJiCisgMjogYmIKKyAzOiBiCisgNDogCisgCisvKFteYV0qKSovCisgICAgYgorIDA6IGIKKyAxOiAKKyAgICBiYmJiCisgMDogYmJiYgorIDE6IGJiYgorIDI6IGJiCisgMzogYgorIDQ6IAorICAgIGFhYSAgIAorIDA6IAorIAorLyhbXmFiXSopKi8KKyAgICBjY2NjCisgMDogY2NjYworIDE6IGNjYworIDI6IGNjCisgMzogYworIDQ6IAorICAgIGFiYWIgIAorIDA6IAorIAorLyhbYV0qPykqLworICAgIGEKKyAwOiBhCisgMTogCisgICAgYWFhYSAKKyAwOiBhYWFhCisgMTogYWFhCisgMjogYWEKKyAzOiBhCisgNDogCisgCisvKFthYl0qPykqLworICAgIGEKKyAwOiBhCisgMTogCisgICAgYgorIDA6IGIKKyAxOiAKKyAgICBhYmFiCisgMDogYWJhYgorIDE6IGFiYQorIDI6IGFiCisgMzogYQorIDQ6IAorICAgIGJhYmEgICAKKyAwOiBiYWJhCisgMTogYmFiCisgMjogYmEKKyAzOiBiCisgNDogCisgCisvKFteYV0qPykqLworICAgIGIKKyAwOiBiCisgMTogCisgICAgYmJiYgorIDA6IGJiYmIKKyAxOiBiYmIKKyAyOiBiYgorIDM6IGIKKyA0OiAKKyAgICBhYWEgICAKKyAwOiAKKyAKKy8oW15hYl0qPykqLworICAgIGMKKyAwOiBjCisgMTogCisgICAgY2NjYworIDA6IGNjY2MKKyAxOiBjY2MKKyAyOiBjYworIDM6IGMKKyA0OiAKKyAgICBiYWJhICAgCisgMDogCisgCisvKD8+YSopKi8KKyAgICBhCisgMDogYQorIDE6IAorICAgIGFhYWJjZGUgCisgMDogYWFhCisgMTogCisgCisvKCg/PmEqKSkqLworICAgIGFhYWFhCisgMDogYWFhYWEKKyAxOiAKKyAgICBhYWJiYWEgCisgMDogYWEKKyAxOiAKKyAKKy8oKD8+YSo/KSkqLworICAgIGFhYWFhCisgMDogYWFhYWEKKyAxOiAKKyAgICBhYWJiYWEgCisgMDogYWEKKyAxOiAKKworLyg/KD89W15hLXpdK1thLXpdKSAgXGR7Mn0tW2Etel17M30tXGR7Mn0gIHwgIFxkezJ9LVxkezJ9LVxkezJ9ICkgL3gKKyAgICAxMi1zZXAtOTgKKyAwOiAxMi1zZXAtOTgKKyAgICAxMi0wOS05OAorIDA6IDEyLTA5LTk4CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBzZXAtMTItOTgKK05vIG1hdGNoCisgICAgICAgIAorLyg/aTpzYXR1cmRheXxzdW5kYXkpLworICAgIHNhdHVyZGF5CisgMDogc2F0dXJkYXkKKyAgICBzdW5kYXkKKyAwOiBzdW5kYXkKKyAgICBTYXR1cmRheQorIDA6IFNhdHVyZGF5CisgICAgU3VuZGF5CisgMDogU3VuZGF5CisgICAgU0FUVVJEQVkKKyAwOiBTQVRVUkRBWQorICAgIFNVTkRBWQorIDA6IFNVTkRBWQorICAgIFN1bkRheQorIDA6IFN1bkRheQorICAgIAorLyhhKD9pKWJjfEJCKXgvCisgICAgYWJjeAorIDA6IGFiY3gKKyAgICBhQkN4CisgMDogYUJDeAorICAgIGJieAorIDA6IGJieAorICAgIEJCeAorIDA6IEJCeAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjWAorTm8gbWF0Y2gKKyAgICBhQkNYCitObyBtYXRjaAorICAgIGJiWAorTm8gbWF0Y2gKKyAgICBCQlggICAgICAgICAgICAgICAKK05vIG1hdGNoCisKKy9eKFthYl0oP2kpW2NkXXxbZWZdKS8KKyAgICBhYworIDA6IGFjCisgICAgYUMKKyAwOiBhQworICAgIGJECisgMDogYkQKKyAgICBlbGVwaGFudAorIDA6IGUKKyAgICBFdXJvcGUgCisgMDogRQorICAgIGZyb2cKKyAwOiBmCisgICAgRnJhbmNlCisgMDogRgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWZyaWNhICAgICAKK05vIG1hdGNoCisKKy9eKGFifGEoP2kpW2ItY10oP20taSlkfHgoP2kpeXx6KS8KKyAgICBhYgorIDA6IGFiCisgICAgYUJkCisgMDogYUJkCisgICAgeHkKKyAwOiB4eQorICAgIHhZCisgMDogeFkKKyAgICB6ZWJyYQorIDA6IHoKKyAgICBaYW1iZXNpCisgMDogWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYUNEICAKK05vIG1hdGNoCisgICAgWFkgIAorTm8gbWF0Y2gKKworLyg/PD1mb29cbileYmFyL20KKyAgICBmb29cbmJhcgorIDA6IGJhcgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmFyCitObyBtYXRjaAorICAgIGJhelxuYmFyICAgCitObyBtYXRjaAorCisvKD88PSg/PCFmb28pYmFyKWJhei8KKyAgICBiYXJiYXoKKyAwOiBiYXoKKyAgICBiYXJiYXJiYXogCisgMDogYmF6CisgICAga29vYmFyYmF6IAorIDA6IGJhegorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYmF6CitObyBtYXRjaAorICAgIGZvb2JhcmJheiAKK05vIG1hdGNoCisKKyMgVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUgdGFrZW4gZnJvbSB0aGUgUGVybCA1LjAwNSB0ZXN0IHN1aXRlOyBzb21lIG9mIHRoZW0KKyMgYXJlIGNvbXBhdGlibGUgd2l0aCA1LjAwNCwgYnV0IEknZCByYXRoZXIgbm90IGhhdmUgdG8gc29ydCB0aGVtIG91dC4KKworL2FiYy8KKyAgICBhYmMKKyAwOiBhYmMKKyAgICB4YWJjeQorIDA6IGFiYworICAgIGFiYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4YmMKK05vIG1hdGNoCisgICAgYXhjCitObyBtYXRjaAorICAgIGFieAorTm8gbWF0Y2gKKworL2FiKmMvCisgICAgYWJjCisgMDogYWJjCisKKy9hYipiYy8KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBhYmJjCisgMDogYWJiYworICAgIGFiYmJiYworIDA6IGFiYmJiYworCisvLnsxfS8KKyAgICBhYmJiYmMKKyAwOiBhCisKKy8uezMsNH0vCisgICAgYWJiYmJjCisgMDogYWJiYgorCisvYWJ7MCx9YmMvCisgICAgYWJiYmJjCisgMDogYWJiYmJjCisKKy9hYitiYy8KKyAgICBhYmJjCisgMDogYWJiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjCitObyBtYXRjaAorICAgIGFicQorTm8gbWF0Y2gKKworL2FiK2JjLworICAgIGFiYmJiYworIDA6IGFiYmJiYworCisvYWJ7MSx9YmMvCisgICAgYWJiYmJjCisgMDogYWJiYmJjCisKKy9hYnsxLDN9YmMvCisgICAgYWJiYmJjCisgMDogYWJiYmJjCisKKy9hYnszLDR9YmMvCisgICAgYWJiYmJjCisgMDogYWJiYmJjCisKKy9hYns0LDV9YmMvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYnEKK05vIG1hdGNoCisgICAgYWJiYmJjCitObyBtYXRjaAorCisvYWI/YmMvCisgICAgYWJiYworIDA6IGFiYmMKKyAgICBhYmMKKyAwOiBhYmMKKworL2FiezAsMX1iYy8KKyAgICBhYmMKKyAwOiBhYmMKKworL2FiP2JjLworCisvYWI/Yy8KKyAgICBhYmMKKyAwOiBhYmMKKworL2FiezAsMX1jLworICAgIGFiYworIDA6IGFiYworCisvXmFiYyQvCisgICAgYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmJiYmMKK05vIG1hdGNoCisgICAgYWJjYworTm8gbWF0Y2gKKworL15hYmMvCisgICAgYWJjYworIDA6IGFiYworCisvXmFiYyQvCisKKy9hYmMkLworICAgIGFhYmMKKyAwOiBhYmMKKyAgICBhYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWJjZAorTm8gbWF0Y2gKKworL14vCisgICAgYWJjCisgMDogCisKKy8kLworICAgIGFiYworIDA6IAorCisvYS5jLworICAgIGFiYworIDA6IGFiYworICAgIGF4YworIDA6IGF4YworCisvYS4qYy8KKyAgICBheHl6YworIDA6IGF4eXpjCisKKy9hW2JjXWQvCisgICAgYWJkCisgMDogYWJkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBheHl6ZAorTm8gbWF0Y2gKKyAgICBhYmMKK05vIG1hdGNoCisKKy9hW2ItZF1lLworICAgIGFjZQorIDA6IGFjZQorCisvYVtiLWRdLworICAgIGFhYworIDA6IGFjCisKKy9hWy1iXS8KKyAgICBhLQorIDA6IGEtCisKKy9hW2ItXS8KKyAgICBhLQorIDA6IGEtCisKKy9hXS8KKyAgICBhXQorIDA6IGFdCisKKy9hW11dYi8KKyAgICBhXWIKKyAwOiBhXWIKKworL2FbXmJjXWQvCisgICAgYWVkCisgMDogYWVkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmQKK05vIG1hdGNoCisgICAgYWJkCitObyBtYXRjaAorCisvYVteLWJdYy8KKyAgICBhZGMKKyAwOiBhZGMKKworL2FbXl1iXWMvCisgICAgYWRjCisgMDogYWRjCisgICAgYS1jCisgMDogYS1jCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXWMKK05vIG1hdGNoCisKKy9cYmFcYi8KKyAgICBhLQorIDA6IGEKKyAgICAtYQorIDA6IGEKKyAgICAtYS0KKyAwOiBhCisKKy9cYnlcYi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5CitObyBtYXRjaAorICAgIHl6CitObyBtYXRjaAorICAgIHh5egorTm8gbWF0Y2gKKworL1xCYVxCLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYS0KK05vIG1hdGNoCisgICAgLWEKK05vIG1hdGNoCisgICAgLWEtCitObyBtYXRjaAorCisvXEJ5XGIvCisgICAgeHkKKyAwOiB5CisKKy9cYnlcQi8KKyAgICB5egorIDA6IHkKKworL1xCeVxCLworICAgIHh5egorIDA6IHkKKworL1x3LworICAgIGEKKyAwOiBhCisKKy9cVy8KKyAgICAtCisgMDogLQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorTm8gbWF0Y2gKKworL2Fcc2IvCisgICAgYSBiCisgMDogYSBiCisKKy9hXFNiLworICAgIGEtYgorIDA6IGEtYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYSBiCitObyBtYXRjaAorCisvXGQvCisgICAgMQorIDA6IDEKKworL1xELworICAgIC0KKyAwOiAtCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxCitObyBtYXRjaAorCisvW1x3XS8KKyAgICBhCisgMDogYQorCisvW1xXXS8KKyAgICAtCisgMDogLQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorTm8gbWF0Y2gKKworL2FbXHNdYi8KKyAgICBhIGIKKyAwOiBhIGIKKworL2FbXFNdYi8KKyAgICBhLWIKKyAwOiBhLWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEgYgorTm8gbWF0Y2gKKworL1tcZF0vCisgICAgMQorIDA6IDEKKworL1tcRF0vCisgICAgLQorIDA6IC0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEKK05vIG1hdGNoCisKKy9hYnxjZC8KKyAgICBhYmMKKyAwOiBhYgorICAgIGFiY2QKKyAwOiBhYgorCisvKCllZi8KKyAgICBkZWYKKyAwOiBlZgorCisvJGIvCisKKy9hXChiLworICAgIGEoYgorIDA6IGEoYgorCisvYVwoKmIvCisgICAgYWIKKyAwOiBhYgorICAgIGEoKGIKKyAwOiBhKChiCisKKy9hXFxiLworICAgIGFcXGIKKyAwOiBhXGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcYgorTm8gbWF0Y2gKKworLygoYSkpLworICAgIGFiYworIDA6IGEKKworLyhhKWIoYykvCisgICAgYWJjCisgMDogYWJjCisKKy9hK2IrYy8KKyAgICBhYWJiYWJjCisgMDogYWJjCisKKy9hezEsfWJ7MSx9Yy8KKyAgICBhYWJiYWJjCisgMDogYWJjCisKKy9hLis/Yy8KKyAgICBhYmNhYmMKKyAwOiBhYmNhYmMKKyAxOiBhYmMKKworLyhhK3xiKSovCisgICAgYWIKKyAwOiBhYgorIDE6IGEKKyAyOiAKKworLyhhK3xiKXswLH0vCisgICAgYWIKKyAwOiBhYgorIDE6IGEKKyAyOiAKKworLyhhK3xiKSsvCisgICAgYWIKKyAwOiBhYgorIDE6IGEKKworLyhhK3xiKXsxLH0vCisgICAgYWIKKyAwOiBhYgorIDE6IGEKKworLyhhK3xiKT8vCisgICAgYWIKKyAwOiBhCisgMTogCisKKy8oYSt8Yil7MCwxfS8KKyAgICBhYgorIDA6IGEKKyAxOiAKKworL1teYWJdKi8KKyAgICBjZGUKKyAwOiBjZGUKKworL2FiYy8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGIKK05vIG1hdGNoCisKKy9hKi8KKworLyhbYWJjXSkqZC8KKyAgICBhYmJiY2QKKyAwOiBhYmJiY2QKKworLyhbYWJjXSkqYmNkLworICAgIGFiY2QKKyAwOiBhYmNkCisKKy9hfGJ8Y3xkfGUvCisgICAgZQorIDA6IGUKKworLyhhfGJ8Y3xkfGUpZi8KKyAgICBlZgorIDA6IGVmCisKKy9hYmNkKmVmZy8KKyAgICBhYmNkZWZnCisgMDogYWJjZGVmZworCisvYWIqLworICAgIHhhYnlhYmJiegorIDA6IGFiCisgICAgeGF5YWJiYnoKKyAwOiBhCisKKy8oYWJ8Y2QpZS8KKyAgICBhYmNkZQorIDA6IGNkZQorCisvW2FiaGdlZmRjXWlqLworICAgIGhpagorIDA6IGhpagorCisvXihhYnxjZCllLworCisvKGFiY3wpZWYvCisgICAgYWJjZGVmCisgMDogZWYKKworLyhhfGIpYypkLworICAgIGFiY2QKKyAwOiBiY2QKKworLyhhYnxhYiopYmMvCisgICAgYWJjCisgMDogYWJjCisKKy9hKFtiY10qKWMqLworICAgIGFiYworIDA6IGFiYworIDE6IGEKKworL2EoW2JjXSopKGMqZCkvCisgICAgYWJjZAorIDA6IGFiY2QKKworL2EoW2JjXSspKGMqZCkvCisgICAgYWJjZAorIDA6IGFiY2QKKworL2EoW2JjXSopKGMrZCkvCisgICAgYWJjZAorIDA6IGFiY2QKKworL2FbYmNkXSpkY2RjZGUvCisgICAgYWRjZGNkZQorIDA6IGFkY2RjZGUKKworL2FbYmNkXStkY2RjZGUvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkZQorTm8gbWF0Y2gKKyAgICBhZGNkY2RlCitObyBtYXRjaAorCisvKGFifGEpYipjLworICAgIGFiYworIDA6IGFiYworCisvKChhKShiKWMpKGQpLworICAgIGFiY2QKKyAwOiBhYmNkCisKKy9bYS16QS1aX11bYS16QS1aMC05X10qLworICAgIGFscGhhCisgMDogYWxwaGEKKworL15hKGJjK3xiW2VoXSlnfC5oJC8KKyAgICBhYmgKKyAwOiBiaAorCisvKGJjK2QkfGVmKmcufGg/aShqfGspKS8KKyAgICBlZmZnegorIDA6IGVmZmd6CisgICAgaWoKKyAwOiBpagorICAgIHJlZmZnegorIDA6IGVmZmd6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBlZmZnCitObyBtYXRjaAorICAgIGJjZGQKK05vIG1hdGNoCisKKy8oKCgoKCgoKCgoYSkpKSkpKSkpKSkvCisgICAgYQorIDA6IGEKKworLygoKCgoKCgoKGEpKSkpKSkpKSkvCisgICAgYQorIDA6IGEKKworL211bHRpcGxlIHdvcmRzIG9mIHRleHQvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYQorTm8gbWF0Y2gKKyAgICB1aC11aAorTm8gbWF0Y2gKKworL211bHRpcGxlIHdvcmRzLworICAgIG11bHRpcGxlIHdvcmRzLCB5ZWFoCisgMDogbXVsdGlwbGUgd29yZHMKKworLyguKiljKC4qKS8KKyAgICBhYmNkZQorIDA6IGFiY2RlCisKKy9cKCguKiksICguKilcKS8KKyAgICAoYSwgYikKKyAwOiAoYSwgYikKKworL1trXS8KKworL2FiY2QvCisgICAgYWJjZAorIDA6IGFiY2QKKworL2EoYmMpZC8KKyAgICBhYmNkCisgMDogYWJjZAorCisvYVstXT9jLworICAgIGFjCisgMDogYWMKKworL2FiYy9pCisgICAgQUJDCisgMDogQUJDCisgICAgWEFCQ1kKKyAwOiBBQkMKKyAgICBBQkFCQworIDA6IEFCQworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWF4YWJ4YmF4YmJ4CitObyBtYXRjaAorICAgIFhCQworTm8gbWF0Y2gKKyAgICBBWEMKK05vIG1hdGNoCisgICAgQUJYCitObyBtYXRjaAorCisvYWIqYy9pCisgICAgQUJDCisgMDogQUJDCisKKy9hYipiYy9pCisgICAgQUJDCisgMDogQUJDCisgICAgQUJCQworIDA6IEFCQkMKKworL2FiKj9iYy9pCisgICAgQUJCQkJDCisgMDogQUJCQkJDCisKKy9hYnswLH0/YmMvaQorICAgIEFCQkJCQworIDA6IEFCQkJCQworCisvYWIrP2JjL2kKKyAgICBBQkJDCisgMDogQUJCQworCisvYWIrYmMvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJDCitObyBtYXRjaAorICAgIEFCUQorTm8gbWF0Y2gKKworL2FiezEsfWJjL2kKKworL2FiK2JjL2kKKyAgICBBQkJCQkMKKyAwOiBBQkJCQkMKKworL2FiezEsfT9iYy9pCisgICAgQUJCQkJDCisgMDogQUJCQkJDCisKKy9hYnsxLDN9P2JjL2kKKyAgICBBQkJCQkMKKyAwOiBBQkJCQkMKKworL2FiezMsNH0/YmMvaQorICAgIEFCQkJCQworIDA6IEFCQkJCQworCisvYWJ7NCw1fT9iYy9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQlEKK05vIG1hdGNoCisgICAgQUJCQkJDCitObyBtYXRjaAorCisvYWI/P2JjL2kKKyAgICBBQkJDCisgMDogQUJCQworICAgIEFCQworIDA6IEFCQworCisvYWJ7MCwxfT9iYy9pCisgICAgQUJDCisgMDogQUJDCisKKy9hYj8/YmMvaQorCisvYWI/P2MvaQorICAgIEFCQworIDA6IEFCQworCisvYWJ7MCwxfT9jL2kKKyAgICBBQkMKKyAwOiBBQkMKKworL15hYmMkL2kKKyAgICBBQkMKKyAwOiBBQkMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQkJCQworTm8gbWF0Y2gKKyAgICBBQkNDCitObyBtYXRjaAorCisvXmFiYy9pCisgICAgQUJDQworIDA6IEFCQworCisvXmFiYyQvaQorCisvYWJjJC9pCisgICAgQUFCQworIDA6IEFCQworCisvXi9pCisgICAgQUJDCisgMDogCisKKy8kL2kKKyAgICBBQkMKKyAwOiAKKworL2EuYy9pCisgICAgQUJDCisgMDogQUJDCisgICAgQVhDCisgMDogQVhDCisKKy9hLio/Yy9pCisgICAgQVhZWkMKKyAwOiBBWFlaQworCisvYS4qYy9pCisgICAgQUFCQworIDA6IEFBQkMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVpECitObyBtYXRjaAorCisvYVtiY11kL2kKKyAgICBBQkQKKyAwOiBBQkQKKworL2FbYi1kXWUvaQorICAgIEFDRQorIDA6IEFDRQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJDCitObyBtYXRjaAorICAgIEFCRAorTm8gbWF0Y2gKKworL2FbYi1kXS9pCisgICAgQUFDCisgMDogQUMKKworL2FbLWJdL2kKKyAgICBBLQorIDA6IEEtCisKKy9hW2ItXS9pCisgICAgQS0KKyAwOiBBLQorCisvYV0vaQorICAgIEFdCisgMDogQV0KKworL2FbXV1iL2kKKyAgICBBXUIKKyAwOiBBXUIKKworL2FbXmJjXWQvaQorICAgIEFFRAorIDA6IEFFRAorCisvYVteLWJdYy9pCisgICAgQURDCisgMDogQURDCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkQKK05vIG1hdGNoCisgICAgQS1DCitObyBtYXRjaAorCisvYVteXWJdYy9pCisgICAgQURDCisgMDogQURDCisKKy9hYnxjZC9pCisgICAgQUJDCisgMDogQUIKKyAgICBBQkNECisgMDogQUIKKworLygpZWYvaQorICAgIERFRgorIDA6IEVGCisKKy8kYi9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBXUMKK05vIG1hdGNoCisgICAgQgorTm8gbWF0Y2gKKworL2FcKGIvaQorICAgIEEoQgorIDA6IEEoQgorCisvYVwoKmIvaQorICAgIEFCCisgMDogQUIKKyAgICBBKChCCisgMDogQSgoQgorCisvYVxcYi9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBXD1ub3Rib2wKK05vIG1hdGNoCisKKy8oKGEpKS9pCisgICAgQUJDCisgMDogQQorCisvKGEpYihjKS9pCisgICAgQUJDCisgMDogQUJDCisKKy9hK2IrYy9pCisgICAgQUFCQkFCQworIDA6IEFCQworCisvYXsxLH1iezEsfWMvaQorICAgIEFBQkJBQkMKKyAwOiBBQkMKKworL2EuKz9jL2kKKyAgICBBQkNBQkMKKyAwOiBBQkNBQkMKKyAxOiBBQkMKKworL2EuKj9jL2kKKyAgICBBQkNBQkMKKyAwOiBBQkNBQkMKKyAxOiBBQkMKKworL2EuezAsNX0/Yy9pCisgICAgQUJDQUJDCisgMDogQUJDQUJDCisgMTogQUJDCisKKy8oYSt8YikqL2kKKyAgICBBQgorIDA6IEFCCisgMTogQQorIDI6IAorCisvKGErfGIpezAsfS9pCisgICAgQUIKKyAwOiBBQgorIDE6IEEKKyAyOiAKKworLyhhK3xiKSsvaQorICAgIEFCCisgMDogQUIKKyAxOiBBCisKKy8oYSt8Yil7MSx9L2kKKyAgICBBQgorIDA6IEFCCisgMTogQQorCisvKGErfGIpPy9pCisgICAgQUIKKyAwOiBBCisgMTogCisKKy8oYSt8Yil7MCwxfS9pCisgICAgQUIKKyAwOiBBCisgMTogCisKKy8oYSt8Yil7MCwxfT8vaQorICAgIEFCCisgMDogQQorIDE6IAorCisvW15hYl0qL2kKKyAgICBDREUKKyAwOiBDREUKKworL2FiYy9pCisKKy9hKi9pCisKKy8oW2FiY10pKmQvaQorICAgIEFCQkJDRAorIDA6IEFCQkJDRAorCisvKFthYmNdKSpiY2QvaQorICAgIEFCQ0QKKyAwOiBBQkNECisKKy9hfGJ8Y3xkfGUvaQorICAgIEUKKyAwOiBFCisKKy8oYXxifGN8ZHxlKWYvaQorICAgIEVGCisgMDogRUYKKworL2FiY2QqZWZnL2kKKyAgICBBQkNERUZHCisgMDogQUJDREVGRworCisvYWIqL2kKKyAgICBYQUJZQUJCQloKKyAwOiBBQgorICAgIFhBWUFCQkJaCisgMDogQQorCisvKGFifGNkKWUvaQorICAgIEFCQ0RFCisgMDogQ0RFCisKKy9bYWJoZ2VmZGNdaWovaQorICAgIEhJSgorIDA6IEhJSgorCisvXihhYnxjZCllL2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQ0RFCitObyBtYXRjaAorCisvKGFiY3wpZWYvaQorICAgIEFCQ0RFRgorIDA6IEVGCisKKy8oYXxiKWMqZC9pCisgICAgQUJDRAorIDA6IEJDRAorCisvKGFifGFiKiliYy9pCisgICAgQUJDCisgMDogQUJDCisKKy9hKFtiY10qKWMqL2kKKyAgICBBQkMKKyAwOiBBQkMKKyAxOiBBCisKKy9hKFtiY10qKShjKmQpL2kKKyAgICBBQkNECisgMDogQUJDRAorCisvYShbYmNdKykoYypkKS9pCisgICAgQUJDRAorIDA6IEFCQ0QKKworL2EoW2JjXSopKGMrZCkvaQorICAgIEFCQ0QKKyAwOiBBQkNECisKKy9hW2JjZF0qZGNkY2RlL2kKKyAgICBBRENEQ0RFCisgMDogQURDRENERQorCisvYVtiY2RdK2RjZGNkZS9pCisKKy8oYWJ8YSliKmMvaQorICAgIEFCQworIDA6IEFCQworCisvKChhKShiKWMpKGQpL2kKKyAgICBBQkNECisgMDogQUJDRAorCisvW2EtekEtWl9dW2EtekEtWjAtOV9dKi9pCisgICAgQUxQSEEKKyAwOiBBTFBIQQorCisvXmEoYmMrfGJbZWhdKWd8LmgkL2kKKyAgICBBQkgKKyAwOiBCSAorCisvKGJjK2QkfGVmKmcufGg/aShqfGspKS9pCisgICAgRUZGR1oKKyAwOiBFRkZHWgorICAgIElKCisgMDogSUoKKyAgICBSRUZGR1oKKyAwOiBFRkZHWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQURDRENERQorTm8gbWF0Y2gKKyAgICBFRkZHCitObyBtYXRjaAorICAgIEJDREQKK05vIG1hdGNoCisKKy8oKCgoKCgoKCgoYSkpKSkpKSkpKSkvaQorICAgIEEKKyAwOiBBCisKKy8oKCgoKCgoKChhKSkpKSkpKSkpL2kKKyAgICBBCisgMDogQQorCisvKD86KD86KD86KD86KD86KD86KD86KD86KD86KGEpKSkpKSkpKSkpL2kKKyAgICBBCisgMDogQQorCisvKD86KD86KD86KD86KD86KD86KD86KD86KD86KGF8YnxjKSkpKSkpKSkpKS9pCisgICAgQworIDA6IEMKKworL211bHRpcGxlIHdvcmRzIG9mIHRleHQvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUEKK05vIG1hdGNoCisgICAgVUgtVUgKK05vIG1hdGNoCisKKy9tdWx0aXBsZSB3b3Jkcy9pCisgICAgTVVMVElQTEUgV09SRFMsIFlFQUgKKyAwOiBNVUxUSVBMRSBXT1JEUworCisvKC4qKWMoLiopL2kKKyAgICBBQkNERQorIDA6IEFCQ0RFCisKKy9cKCguKiksICguKilcKS9pCisgICAgKEEsIEIpCisgMDogKEEsIEIpCisKKy9ba10vaQorCisvYWJjZC9pCisgICAgQUJDRAorIDA6IEFCQ0QKKworL2EoYmMpZC9pCisgICAgQUJDRAorIDA6IEFCQ0QKKworL2FbLV0/Yy9pCisgICAgQUMKKyAwOiBBQworCisvYSg/IWIpLi8KKyAgICBhYmFkCisgMDogYWQKKworL2EoPz1kKS4vCisgICAgYWJhZAorIDA6IGFkCisKKy9hKD89Y3xkKS4vCisgICAgYWJhZAorIDA6IGFkCisKKy9hKD86YnxjfGQpKC4pLworICAgIGFjZQorIDA6IGFjZQorCisvYSg/OmJ8Y3xkKSooLikvCisgICAgYWNlCisgMDogYWNlCisgMTogYWMKKworL2EoPzpifGN8ZCkrPyguKS8KKyAgICBhY2UKKyAwOiBhY2UKKyAgICBhY2RiY2RiZQorIDA6IGFjZGJjZGJlCisgMTogYWNkYmNkYgorIDI6IGFjZGJjZAorIDM6IGFjZGJjCisgNDogYWNkYgorIDU6IGFjZAorCisvYSg/OmJ8Y3xkKSsoLikvCisgICAgYWNkYmNkYmUKKyAwOiBhY2RiY2RiZQorIDE6IGFjZGJjZGIKKyAyOiBhY2RiY2QKKyAzOiBhY2RiYworIDQ6IGFjZGIKKyA1OiBhY2QKKworL2EoPzpifGN8ZCl7Mn0oLikvCisgICAgYWNkYmNkYmUKKyAwOiBhY2RiCisKKy9hKD86YnxjfGQpezQsNX0oLikvCisgICAgYWNkYmNkYmUKKyAwOiBhY2RiY2RiCisgMTogYWNkYmNkCisKKy9hKD86YnxjfGQpezQsNX0/KC4pLworICAgIGFjZGJjZGJlCisgMDogYWNkYmNkYgorIDE6IGFjZGJjZAorCisvKChmb28pfChiYXIpKSovCisgICAgZm9vYmFyCisgMDogZm9vYmFyCisgMTogZm9vCisgMjogCisKKy9hKD86YnxjfGQpezYsN30oLikvCisgICAgYWNkYmNkYmUKKyAwOiBhY2RiY2RiZQorCisvYSg/OmJ8Y3xkKXs2LDd9PyguKS8KKyAgICBhY2RiY2RiZQorIDA6IGFjZGJjZGJlCisKKy9hKD86YnxjfGQpezUsNn0oLikvCisgICAgYWNkYmNkYmUKKyAwOiBhY2RiY2RiZQorIDE6IGFjZGJjZGIKKworL2EoPzpifGN8ZCl7NSw2fT8oLikvCisgICAgYWNkYmNkYmUKKyAwOiBhY2RiY2RiZQorIDE6IGFjZGJjZGIKKworL2EoPzpifGN8ZCl7NSw3fSguKS8KKyAgICBhY2RiY2RiZQorIDA6IGFjZGJjZGJlCisgMTogYWNkYmNkYgorCisvYSg/OmJ8Y3xkKXs1LDd9PyguKS8KKyAgICBhY2RiY2RiZQorIDA6IGFjZGJjZGJlCisgMTogYWNkYmNkYgorCisvYSg/OmJ8KGN8ZSl7MSwyfT98ZCkrPyguKS8KKyAgICBhY2UKKyAwOiBhY2UKKworL14oLispP0IvCisgICAgQUIKKyAwOiBBQgorCisvXihbXmEtel0pfChcXikkLworICAgIC4KKyAwOiAuCisKKy9eWzw+XSYvCisgICAgPCZPVVQKKyAwOiA8JgorCisvKD86KGYpKG8pKG8pfChiKShhKShyKSkqLworICAgIGZvb2JhcgorIDA6IGZvb2JhcgorIDE6IGZvbworIDI6IAorCisvKD88PWEpYi8KKyAgICBhYgorIDA6IGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGNiCitObyBtYXRjaAorICAgIGIKK05vIG1hdGNoCisKKy8oPzwhYyliLworICAgIGFiCisgMDogYgorICAgIGIKKyAwOiBiCisgICAgYgorIDA6IGIKKworLyg/Oi4uKSphLworICAgIGFiYQorIDA6IGFiYQorIDE6IGEKKworLyg/Oi4uKSo/YS8KKyAgICBhYmEKKyAwOiBhYmEKKyAxOiBhCisKKy9eKCl7Myw1fS8KKyAgICBhYmMKKyAwOiAKKworL14oYSspKmF4LworICAgIGFheAorIDA6IGFheAorCisvXigoYXxiKSspKmF4LworICAgIGFheAorIDA6IGFheAorCisvXigoYXxiYykrKSpheC8KKyAgICBhYXgKKyAwOiBhYXgKKworLyhhfHgpKmFiLworICAgIGNhYgorIDA6IGFiCisKKy8oYSkqYWIvCisgICAgY2FiCisgMDogYWIKKworLyg/Oig/aSlhKWIvCisgICAgYWIKKyAwOiBhYgorCisvKCg/aSlhKWIvCisgICAgYWIKKyAwOiBhYgorCisvKD86KD9pKWEpYi8KKyAgICBBYgorIDA6IEFiCisKKy8oKD9pKWEpYi8KKyAgICBBYgorIDA6IEFiCisKKy8oPzooP2kpYSliLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgY2IKK05vIG1hdGNoCisgICAgYUIKK05vIG1hdGNoCisKKy8oKD9pKWEpYi8KKworLyg/aTphKWIvCisgICAgYWIKKyAwOiBhYgorCisvKCg/aTphKSliLworICAgIGFiCisgMDogYWIKKworLyg/aTphKWIvCisgICAgQWIKKyAwOiBBYgorCisvKCg/aTphKSliLworICAgIEFiCisgMDogQWIKKworLyg/aTphKWIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhQgorTm8gbWF0Y2gKKyAgICBhQgorTm8gbWF0Y2gKKworLygoP2k6YSkpYi8KKworLyg/Oig/LWkpYSliL2kKKyAgICBhYgorIDA6IGFiCisKKy8oKD8taSlhKWIvaQorICAgIGFiCisgMDogYWIKKworLyg/Oig/LWkpYSliL2kKKyAgICBhQgorIDA6IGFCCisKKy8oKD8taSlhKWIvaQorICAgIGFCCisgMDogYUIKKworLyg/Oig/LWkpYSliL2kKKyAgICBhQgorIDA6IGFCCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYgorTm8gbWF0Y2gKKworLygoPy1pKWEpYi9pCisKKy8oPzooPy1pKWEpYi9pCisgICAgYUIKKyAwOiBhQgorCisvKCg/LWkpYSliL2kKKyAgICBhQgorIDA6IGFCCisKKy8oPzooPy1pKWEpYi9pCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBYgorTm8gbWF0Y2gKKyAgICBBQgorTm8gbWF0Y2gKKworLygoPy1pKWEpYi9pCisKKy8oPy1pOmEpYi9pCisgICAgYWIKKyAwOiBhYgorCisvKCg/LWk6YSkpYi9pCisgICAgYWIKKyAwOiBhYgorCisvKD8taTphKWIvaQorICAgIGFCCisgMDogYUIKKworLygoPy1pOmEpKWIvaQorICAgIGFCCisgMDogYUIKKworLyg/LWk6YSliL2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCCitObyBtYXRjaAorICAgIEFiCitObyBtYXRjaAorCisvKCg/LWk6YSkpYi9pCisKKy8oPy1pOmEpYi9pCisgICAgYUIKKyAwOiBhQgorCisvKCg/LWk6YSkpYi9pCisgICAgYUIKKyAwOiBhQgorCisvKD8taTphKWIvaQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQWIKK05vIG1hdGNoCisgICAgQUIKK05vIG1hdGNoCisKKy8oKD8taTphKSliL2kKKworLygoPy1pOmEuKSliL2kKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCCitObyBtYXRjaAorICAgIGFcbkIKK05vIG1hdGNoCisKKy8oKD9zLWk6YS4pKWIvaQorICAgIGFcbkIKKyAwOiBhXHgwYUIKKworLyg/OmN8ZCkoPzopKD86YSg/OikoPzpiKSg/OmIoPzopKSg/OmIoPzopKD86YikpKS8KKyAgICBjYWJiYmIKKyAwOiBjYWJiYmIKKworLyg/OmN8ZCkoPzopKD86YWFhYWFhYWEoPzopKD86YmJiYmJiYmIpKD86YmJiYmJiYmIoPzopKSg/OmJiYmJiYmJiKD86KSg/OmJiYmJiYmJiKSkpLworICAgIGNhYWFhYWFhYWJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiCisgMDogY2FhYWFhYWFhYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmIKKworL2Zvb1x3KlxkezR9YmF6LworICAgIGZvb2JhcjEyMzRiYXoKKyAwOiBmb29iYXIxMjM0YmF6CisKKy94KH5+KSooPzooPzpGKT8pPy8KKyAgICB4fn4KKyAwOiB4fn4KKyAxOiB4CisKKy9eYSg/I3h4eCl7M31jLworICAgIGFhYWMKKyAwOiBhYWFjCisKKy9eYSAoPyN4eHgpICg/I3l5eSkgezN9Yy94CisgICAgYWFhYworIDA6IGFhYWMKKworLyg/PCFbY2RdKWIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBCXG5CCitObyBtYXRjaAorICAgIGRiY2IKK05vIG1hdGNoCisKKy8oPzwhW2NkXSlbYWJdLworICAgIGRiYWFjYgorIDA6IGEKKworLyg/PCEoY3xkKSliLworCisvKD88IShjfGQpKVthYl0vCisgICAgZGJhYWNiCisgMDogYQorCisvKD88IWNkKVthYl0vCisgICAgY2RhY2NiCisgMDogYgorCisvXig/OmE/Yj8pKiQvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBkYmNiCitObyBtYXRjaAorICAgIGEtLQorTm8gbWF0Y2gKKworLygoP3MpXmEoLikpKCg/bSleYiQpLworICAgIGFcbmJcbmNcbgorIDA6IGFceDBhYgorCisvKCg/bSleYiQpLworICAgIGFcbmJcbmNcbgorIDA6IGIKKworLyg/bSleYi8KKyAgICBhXG5iXG4KKyAwOiBiCisKKy8oP20pXihiKS8KKyAgICBhXG5iXG4KKyAwOiBiCisKKy8oKD9tKV5iKS8KKyAgICBhXG5iXG4KKyAwOiBiCisKKy9cbigoP20pXmIpLworICAgIGFcbmJcbgorIDA6IFx4MGFiCisKKy8oKD9zKS4pYyg/IS4pLworICAgIGFcbmJcbmNcbgorIDA6IFx4MGFjCisgICAgYVxuYlxuY1xuCisgMDogXHgwYWMKKworLygoP3MpYi4pYyg/IS4pLworICAgIGFcbmJcbmNcbgorIDA6IGJceDBhYworICAgIGFcbmJcbmNcbgorIDA6IGJceDBhYworCisvXmIvCisKKy8oKV5iLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxuYlxuY1xuCitObyBtYXRjaAorICAgIGFcbmJcbmNcbgorTm8gbWF0Y2gKKworLygoP20pXmIpLworICAgIGFcbmJcbmNcbgorIDA6IGIKKworLyg/KD8hYSlhfGIpLworCisvKD8oPyFhKWJ8YSkvCisgICAgYQorIDA6IGEKKworLyg/KD89YSlifGEpLworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorTm8gbWF0Y2gKKyAgICBhCitObyBtYXRjaAorCisvKD8oPz1hKWF8YikvCisgICAgYQorIDA6IGEKKworLyhcdys6KSsvCisgICAgb25lOgorIDA6IG9uZToKKworLyQoPzw9XihhKSkvCisgICAgYQorIDA6IAorCisvKFtcdzpdKzo6KT8oXHcrKSQvCisgICAgYWJjZAorIDA6IGFiY2QKKyAgICB4eTp6Ojo6YWJjZAorIDA6IHh5Ono6OjphYmNkCisKKy9eW15iY2RdKihjKykvCisgICAgYWV4eWNkCisgMDogYWV4eWMKKworLyhhKiliKy8KKyAgICBjYWFiCisgMDogYWFiCisKKy8oW1x3Ol0rOjopPyhcdyspJC8KKyAgICBhYmNkCisgMDogYWJjZAorICAgIHh5Ono6OjphYmNkCisgMDogeHk6ejo6OmFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2Q6CitObyBtYXRjaAorICAgIGFiY2Q6CitObyBtYXRjaAorCisvXlteYmNkXSooYyspLworICAgIGFleHljZAorIDA6IGFleHljCisKKy8oPmErKWFiLworCisvKD8+YSspYi8KKyAgICBhYWFiCisgMDogYWFhYgorCisvKFtbOl0rKS8KKyAgICBhOltiXToKKyAwOiA6WworCisvKFtbPV0rKS8KKyAgICBhPVtiXT0KKyAwOiA9WworCisvKFtbLl0rKS8KKyAgICBhLltiXS4KKyAwOiAuWworCisvKCg/PmErKWIpLworICAgIGFhYWIKKyAwOiBhYWFiCisKKy8oPz4oYSspKWIvCisgICAgYWFhYgorIDA6IGFhYWIKKworLygoPz5bXigpXSspfFwoW14oKV0qXCkpKy8KKyAgICAoKGFiYyhhZGUpdWZoKCkoKXgKKyAwOiBhYmMoYWRlKXVmaCgpKCl4CisgMTogYWJjKGFkZSl1ZmgoKSgpCisgMjogYWJjKGFkZSl1ZmgoKQorIDM6IGFiYyhhZGUpdWZoCisgNDogYWJjKGFkZSkKKyA1OiBhYmMKKworL2FcWi8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFhYWIKK05vIG1hdGNoCisgICAgYVxuYlxuCitObyBtYXRjaAorCisvYlxaLworICAgIGFcbmJcbgorIDA6IGIKKworL2Jcei8KKworL2JcWi8KKyAgICBhXG5iCisgMDogYgorCisvYlx6LworICAgIGFcbmIKKyAwOiBiCisgICAgCisvKD8+LiopKD88PShhYmNkfHd4eXopKS8KKyAgICBhbHBoYWJldGFiY2QKKyAwOiBhbHBoYWJldGFiY2QKKyAgICBlbmRpbmd3eHl6CisgMDogZW5kaW5nd3h5egorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYSByYXRoZXIgbG9uZyBzdHJpbmcgdGhhdCBkb2Vzbid0IGVuZCB3aXRoIG9uZSBvZiB0aGVtCitObyBtYXRjaAorCisvd29yZCAoPz4oPzooPyFvdGhlcndvcmQpW2EtekEtWjAtOV0rICl7MCwzMH0pb3RoZXJ3b3JkLworICAgIHdvcmQgY2F0IGRvZyBlbGVwaGFudCBtdXNzZWwgY293IGhvcnNlIGNhbmFyeSBiYWJvb24gc25ha2Ugc2hhcmsgb3RoZXJ3b3JkCisgMDogd29yZCBjYXQgZG9nIGVsZXBoYW50IG11c3NlbCBjb3cgaG9yc2UgY2FuYXJ5IGJhYm9vbiBzbmFrZSBzaGFyayBvdGhlcndvcmQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHdvcmQgY2F0IGRvZyBlbGVwaGFudCBtdXNzZWwgY293IGhvcnNlIGNhbmFyeSBiYWJvb24gc25ha2Ugc2hhcmsKK05vIG1hdGNoCisgIAorL3dvcmQgKD8+W2EtekEtWjAtOV0rICl7MCwzMH1vdGhlcndvcmQvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB3b3JkIGNhdCBkb2cgZWxlcGhhbnQgbXVzc2VsIGNvdyBob3JzZSBjYW5hcnkgYmFib29uIHNuYWtlIHNoYXJrIHRoZSBxdWljayBicm93biBmb3ggYW5kIHRoZSBsYXp5IGRvZyBhbmQgc2V2ZXJhbCBvdGhlciB3b3JkcyBnZXR0aW5nIGNsb3NlIHRvIHRoaXJ0eSBieSBub3cgSSBob3BlCitObyBtYXRjaAorCisvKD88PVxkezN9KD8hOTk5KSlmb28vCisgICAgOTk5Zm9vCisgMDogZm9vCisgICAgMTIzOTk5Zm9vIAorIDA6IGZvbworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTIzYWJjZm9vCitObyBtYXRjaAorICAgIAorLyg/PD0oPyEuLi45OTkpXGR7M30pZm9vLworICAgIDk5OWZvbworIDA6IGZvbworICAgIDEyMzk5OWZvbyAKKyAwOiBmb28KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyM2FiY2ZvbworTm8gbWF0Y2gKKworLyg/PD1cZHszfSg/ITk5OSkuLi4pZm9vLworICAgIDEyM2FiY2ZvbworIDA6IGZvbworICAgIDEyMzQ1NmZvbyAKKyAwOiBmb28KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzk5OWZvbyAgCitObyBtYXRjaAorICAgIAorLyg/PD1cZHszfS4uLikoPzwhOTk5KWZvby8KKyAgICAxMjNhYmNmb28gICAKKyAwOiBmb28KKyAgICAxMjM0NTZmb28gCisgMDogZm9vCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM5OTlmb28gIAorTm8gbWF0Y2gKKworLygoWikrfEEpKi8KKyAgICBaQUJDREVGRworIDA6IFpBCisgMTogWgorIDI6IAorCisvKFooKXxBKSovCisgICAgWkFCQ0RFRkcKKyAwOiBaQQorIDE6IFoKKyAyOiAKKworLyhaKCgpKXxBKSovCisgICAgWkFCQ0RFRkcKKyAwOiBaQQorIDE6IFoKKyAyOiAKKworLygoPz5aKSt8QSkqLworICAgIFpBQkNERUZHCisgMDogWkEKKyAxOiBaCisgMjogCisKKy8oKD8+KSt8QSkqLworICAgIFpBQkNERUZHCisgMDogCisKKy9hKi9nCisgICAgYWJiYWIKKyAwOiBhCisgMDogCisgMDogCisgMDogYQorIDA6IAorIDA6IAorCisvXltcZC1hXS8KKyAgICBhYmNkZQorIDA6IGEKKyAgICAtdGhpbmdzCisgMDogLQorICAgIDBkaWdpdAorIDA6IDAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGJjZGVmICAgIAorTm8gbWF0Y2gKKyAgICAKKy9bWzpzcGFjZTpdXSsvCisgICAgPiBceDA5XHgwYVx4MGNceDBkXHgwYjwKKyAwOiAgXHgwOVx4MGFceDBjXHgwZFx4MGIKKyAgICAgCisvW1s6Ymxhbms6XV0rLworICAgID4gXHgwOVx4MGFceDBjXHgwZFx4MGI8CisgMDogIFx4MDkKKyAgICAgCisvW1xzXSsvCisgICAgPiBceDA5XHgwYVx4MGNceDBkXHgwYjwKKyAwOiAgXHgwOVx4MGFceDBjXHgwZFx4MGIKKyAgICAgCisvXHMrLworICAgID4gXHgwOVx4MGFceDBjXHgwZFx4MGI8CisgMDogIFx4MDlceDBhXHgwY1x4MGRceDBiCisgICAgIAorL2ELYi94CisgICAgYWIKKyAwOiBhYgorCisvKD8hXEEpeC9tCisgIGFcbnhiXG4KKyAwOiB4CisKKy8oPyFeKXgvbQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxueGJcbgorTm8gbWF0Y2gKKworL2FiY1xRYWJjXEVhYmMvCisgICAgYWJjYWJjYWJjCisgMDogYWJjYWJjYWJjCisgICAgCisvYWJjXFEoKit8XEVhYmMvCisgICAgYWJjKCorfGFiYyAKKyAwOiBhYmMoKit8YWJjCisKKy8gICBhYmNcUSBhYmNcRWFiYy94CisgICAgYWJjIGFiY2FiYworIDA6IGFiYyBhYmNhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2FiY2FiYyAgCitObyBtYXRjaAorICAgIAorL2FiYyNjb21tZW50CisgICAgXFEjbm90IGNvbW1lbnQKKyAgICBsaXRlcmFsXEUveAorICAgIGFiYyNub3QgY29tbWVudFxuICAgIGxpdGVyYWwgICAgIAorIDA6IGFiYyNub3QgY29tbWVudFx4MGEgICAgbGl0ZXJhbAorCisvYWJjI2NvbW1lbnQKKyAgICBcUSNub3QgY29tbWVudAorICAgIGxpdGVyYWwveAorICAgIGFiYyNub3QgY29tbWVudFxuICAgIGxpdGVyYWwgICAgIAorIDA6IGFiYyNub3QgY29tbWVudFx4MGEgICAgbGl0ZXJhbAorCisvYWJjI2NvbW1lbnQKKyAgICBcUSNub3QgY29tbWVudAorICAgIGxpdGVyYWxcRSAjbW9yZSBjb21tZW50CisgICAgL3gKKyAgICBhYmMjbm90IGNvbW1lbnRcbiAgICBsaXRlcmFsICAgICAKKyAwOiBhYmMjbm90IGNvbW1lbnRceDBhICAgIGxpdGVyYWwKKworL2FiYyNjb21tZW50CisgICAgXFEjbm90IGNvbW1lbnQKKyAgICBsaXRlcmFsXEUgI21vcmUgY29tbWVudC94CisgICAgYWJjI25vdCBjb21tZW50XG4gICAgbGl0ZXJhbCAgICAgCisgMDogYWJjI25vdCBjb21tZW50XHgwYSAgICBsaXRlcmFsCisKKy9cUWFiY1wkeHl6XEUvCisgICAgYWJjXFxcJHh5egorIDA6IGFiY1wkeHl6CisKKy9cUWFiY1xFXCRcUXh5elxFLworICAgIGFiY1wkeHl6CisgMDogYWJjJHh5egorCisvXEdhYmMvCisgICAgYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXphYmMgIAorTm8gbWF0Y2gKKworL1xHYWJjLi9nCisgICAgYWJjMWFiYzJ4eXphYmMzCisgMDogYWJjMQorIDA6IGFiYzIKKworL2FiYy4vZworICAgIGFiYzFhYmMyeHl6YWJjMyAKKyAwOiBhYmMxCisgMDogYWJjMgorIDA6IGFiYzMKKworL2EoP3g6IGIgYyApZC8KKyAgICBYYWJjZFkKKyAwOiBhYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgWGEgYiBjIGQgWSAKK05vIG1hdGNoCisKKy8oKD94KXggeSB6IHwgYSBiIGMpLworICAgIFhhYmNZCisgMDogYWJjCisgICAgQXh5ekIgCisgMDogeHl6CisKKy8oP2kpQUIoPy1pKUMvCisgICAgWGFiQ1kKKyAwOiBhYkMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhhYmNZICAKK05vIG1hdGNoCisKKy8oKD9pKUFCKD8taSlDfEQpRS8KKyAgICBhYkNFCisgMDogYWJDRQorICAgIERFCisgMDogREUKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY0UKK05vIG1hdGNoCisgICAgYWJDZSAgCitObyBtYXRjaAorICAgIGRFCitObyBtYXRjaAorICAgIERlICAgIAorTm8gbWF0Y2gKKworL1t6XFFhLWRdXEVdLworICAgIHoKKyAwOiB6CisgICAgYQorIDA6IGEKKyAgICAtCisgMDogLQorICAgIGQKKyAwOiBkCisgICAgXSAKKyAwOiBdCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBiICAgICAKK05vIG1hdGNoCisKKy8oYSspKmIvCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIAorTm8gbWF0Y2gKKyAgICAKKy8oP2kpcmVnKD86dWwoPzpbYeRdfGFlKXJ8ZXgpLworICAgIFJFR3VsYXIKKyAwOiBSRUd1bGFyCisgICAgcmVndWxhZXIKKyAwOiByZWd1bGFlcgorICAgIFJlZ2V4ICAKKyAwOiBSZWdleAorICAgIHJlZ3Vs5HIgCisgMDogcmVndWxceGU0cgorCisvxebl5FvgLf/ALd9dKy8KKyAgICDF5uXk4AorIDA6IFx4YzVceGU2XHhlNVx4ZTRceGUwCisgICAgxebl5P8KKyAwOiBceGM1XHhlNlx4ZTVceGU0XHhmZgorICAgIMXm5eTACisgMDogXHhjNVx4ZTZceGU1XHhlNFx4YzAKKyAgICDF5uXk3worIDA6IFx4YzVceGU2XHhlNVx4ZTRceGRmCisKKy8oPzw9WilYLi8KKyAgICBceDg0WEFaWEIKKyAwOiBYQgorCisvXig/KDIpYXwoMSkoMikpKyQvCisgICAgMTIzYQorRmFpbGVkOiBlcnJvciAtNDA6IGJhY2tyZWZlcmVuY2UgY29uZGl0aW9uIG9yIHJlY3Vyc2lvbiB0ZXN0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIERGQSBtYXRjaGluZworCisvKD88PWF8YmJiYiljLworICAgIGFjCisgMDogYworICAgIGJiYmJjCisgMDogYworCisvbGluZVxuYnJlYWsvCisgICAgdGhpcyBpcyBhIGxpbmVcbmJyZWFrCisgMDogbGluZVx4MGFicmVhaworICAgIGxpbmUgb25lXG50aGlzIGlzIGEgbGluZVxuYnJlYWsgaW4gdGhlIHNlY29uZCBsaW5lIAorIDA6IGxpbmVceDBhYnJlYWsKKworL2xpbmVcbmJyZWFrL2ZpcnN0bGluZQorICAgIHRoaXMgaXMgYSBsaW5lXG5icmVhaworIDA6IGxpbmVceDBhYnJlYWsKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBsaW5lIG9uZVxudGhpcyBpcyBhIGxpbmVcbmJyZWFrIGluIHRoZSBzZWNvbmQgbGluZSAKK05vIG1hdGNoCisKKy9saW5lXG5icmVhay9tLGZpcnN0bGluZQorICAgIHRoaXMgaXMgYSBsaW5lXG5icmVhaworIDA6IGxpbmVceDBhYnJlYWsKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBsaW5lIG9uZVxudGhpcyBpcyBhIGxpbmVcbmJyZWFrIGluIHRoZSBzZWNvbmQgbGluZSAKK05vIG1hdGNoCisKKy8xMjM0LworICAgIDEyM1w9cHMKK1BhcnRpYWwgbWF0Y2g6IDEyMworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGE0XD1wcyxkZmFfcmVzdGFydAorTm8gbWF0Y2gKKworLzEyMzQvCisgICAgMTIzXD1wcworUGFydGlhbCBtYXRjaDogMTIzCisgICAgNFw9cHMsZGZhX3Jlc3RhcnQKKyAwOiA0CisKKy9eL2dtCisgICAgYVxuYlxuY1xuCisgMDogCisgMDogCisgMDogCisgICAgXCAKKyAwOiAKKyAgICAKKy8oPzw9Q1xuKV4vZ20KKyAgICBBXG5DXG5DXG4gCisgMDogCisKKy8oP3MpQT9CLworICAgIEFCCisgMDogQUIKKyAgICBhQiAgCisgMDogQgorCisvKD9zKUEqQi8KKyAgICBBQgorIDA6IEFCCisgICAgYUIgIAorIDA6IEIKKworLyg/bSlBP0IvCisgICAgQUIKKyAwOiBBQgorICAgIGFCICAKKyAwOiBCCisKKy8oP20pQSpCLworICAgIEFCCisgMDogQUIKKyAgICBhQiAgCisgMDogQgorCisvQ29udGVudC1UeXBlXHgzQVteXHJcbl17Nix9LworICAgIENvbnRlbnQtVHlwZTp4eHh4eHl5eSAKKyAwOiBDb250ZW50LVR5cGU6eHh4eHh5eXkKKworL0NvbnRlbnQtVHlwZVx4M0FbXlxyXG5dezYsfXovCisgICAgQ29udGVudC1UeXBlOnh4eHh4eXl5egorIDA6IENvbnRlbnQtVHlwZTp4eHh4eHl5eXoKKworL0NvbnRlbnQtVHlwZVx4M0FbXmFdezYsfS8KKyAgICBDb250ZW50LVR5cGU6eHh4eXl5IAorIDA6IENvbnRlbnQtVHlwZTp4eHh5eXkKKworL0NvbnRlbnQtVHlwZVx4M0FbXmFdezYsfXovCisgICAgQ29udGVudC1UeXBlOnh4eHl5eXoKKyAwOiBDb250ZW50LVR5cGU6eHh4eXl5egorCisvXmFiYy9JbSxuZXdsaW5lPWxmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IG11bHRpbGluZQorRm9yY2VkIG5ld2xpbmUgaXMgTEYKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK0xhc3QgY29kZSB1bml0ID0gJ2MnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICB4eXpcbmFiYworIDA6IGFiYworICAgIHh5elxyXG5hYmMKKyAwOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5elxyYWJjCitObyBtYXRjaAorICAgIHh5emFiY1xyCitObyBtYXRjaAorICAgIHh5emFiY1xycHFyCitObyBtYXRjaAorICAgIHh5emFiY1xyXG4KK05vIG1hdGNoCisgICAgeHl6YWJjXHJcbnBxcgorTm8gbWF0Y2gKKworL15hYmMvSW0sbmV3bGluZT1jcmxmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IG11bHRpbGluZQorRm9yY2VkIG5ld2xpbmUgaXMgQ1JMRgorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIHh5elxyXG5hYmNsZj4KKyAwOiBhYmMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHh5elxuYWJjbGYKK05vIG1hdGNoCisgICAgeHl6XHJhYmNsZgorTm8gbWF0Y2gKKyAgICAKKy9eYWJjL0ltLG5ld2xpbmU9Y3IKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogbXVsdGlsaW5lCitGb3JjZWQgbmV3bGluZSBpcyBDUgorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorTGFzdCBjb2RlIHVuaXQgPSAnYycKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIHh5elxyYWJjCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXpcbmFiYworTm8gbWF0Y2gKKyAgICB4eXpcclxuYWJjCitObyBtYXRjaAorCisvLiovSSxuZXdsaW5lPWxmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK0ZvcmNlZCBuZXdsaW5lIGlzIExGCitGaXJzdCBjb2RlIHVuaXQgYXQgc3RhcnQgb3IgZm9sbG93cyBuZXdsaW5lCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICBhYmNcbmRlZgorIDA6IGFiYworICAgIGFiY1xyZGVmCisgMDogYWJjXHgwZGRlZgorICAgIGFiY1xyXG5kZWYKKyAwOiBhYmNceDBkCisKKy8uKi9JLG5ld2xpbmU9Y3IKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworRm9yY2VkIG5ld2xpbmUgaXMgQ1IKK0ZpcnN0IGNvZGUgdW5pdCBhdCBzdGFydCBvciBmb2xsb3dzIG5ld2xpbmUKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY1xuZGVmCisgMDogYWJjXHgwYWRlZgorICAgIGFiY1xyZGVmCisgMDogYWJjCisgICAgYWJjXHJcbmRlZgorIDA6IGFiYworCisvLiovSSxuZXdsaW5lPWNybGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworRm9yY2VkIG5ld2xpbmUgaXMgQ1JMRgorRmlyc3QgY29kZSB1bml0IGF0IHN0YXJ0IG9yIGZvbGxvd3MgbmV3bGluZQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgYWJjXG5kZWYKKyAwOiBhYmNceDBhZGVmCisgICAgYWJjXHJkZWYKKyAwOiBhYmNceDBkZGVmCisgICAgYWJjXHJcbmRlZgorIDA6IGFiYworCisvXHcrKC4pKC4pP2RlZi9JcworQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAyCitPcHRpb25zOiBkb3RhbGwKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDAgMSAyIDMgNCA1IDYgNyA4IDkgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCAKKyAgUSBSIFMgVCBVIFYgVyBYIFkgWiBfIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAKK0xhc3QgY29kZSB1bml0ID0gJ2YnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDUKKyAgICBhYmNcbmRlZgorIDA6IGFiY1x4MGFkZWYKKyAgICBhYmNccmRlZgorIDA6IGFiY1x4MGRkZWYKKyAgICBhYmNcclxuZGVmCisgMDogYWJjXHgwZFx4MGFkZWYKKworL1x3KyguKSguKT9kZWYvcworICAgIGFiY1xuZGVmCisgMDogYWJjXHgwYWRlZgorICAgIGFiY1xyZGVmCisgMDogYWJjXHgwZGRlZgorICAgIGFiY1xyXG5kZWYKKyAwOiBhYmNceDBkXHgwYWRlZgorCisvXlx3Kz0uKihcXFxuLiopKi8KKyAgICBhYmM9eHl6XFxcbnBxcgorIDA6IGFiYz14eXpcXHgwYXBxcgorIDE6IGFiYz14eXpcXHgwYXBxCisgMjogYWJjPXh5elxceDBhcAorIDM6IGFiYz14eXpcXHgwYQorIDQ6IGFiYz14eXpcCisgNTogYWJjPXh5egorIDY6IGFiYz14eQorIDc6IGFiYz14CisgODogYWJjPQorCisvXihhKCkqKSovCisgICAgYWFhYQorIDA6IGFhYWEKKyAxOiBhYWEKKyAyOiBhYQorIDM6IGEKKyA0OiAKKworL14oPzphKD86KD86KSkqKSovCisgICAgYWFhYQorIDA6IGFhYWEKKyAxOiBhYWEKKyAyOiBhYQorIDM6IGEKKyA0OiAKKworL14oYSgpKykrLworICAgIGFhYWEKKyAwOiBhYWFhCisgMTogYWFhCisgMjogYWEKKyAzOiBhCisKKy9eKD86YSg/Oig/OikpKykrLworICAgIGFhYWEKKyAwOiBhYWFhCisgMTogYWFhCisgMjogYWEKKyAzOiBhCisKKy8oYXwpKlxkLworICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE0CisgMDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhNAorXD0gRXhwZWN0IG5vIG1hdGNoCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorTm8gbWF0Y2gKKworLyg/PmF8KSpcZC8KKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhNAorIDA6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTQKK1w9IEV4cGVjdCBubyBtYXRjaAorICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK05vIG1hdGNoCisKKy8oPzphfCkqXGQvCisgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYTQKKyAwOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitObyBtYXRjaAorCisvXmEuYi9uZXdsaW5lPWxmCisgICAgYVxyYgorIDA6IGFceDBkYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxuYgorTm8gbWF0Y2gKKworL15hLmIvbmV3bGluZT1jcgorICAgIGFcbmIKKyAwOiBhXHgwYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFccmIKK05vIG1hdGNoCisKKy9eYS5iL25ld2xpbmU9YW55Y3JsZgorICAgIGFceDg1YgorIDA6IGFceDg1YgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVxyYgorTm8gbWF0Y2gKKworL15hLmIvbmV3bGluZT1hbnkKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcbmIKK05vIG1hdGNoCisgICAgYVxyYgorTm8gbWF0Y2gKKyAgICBhXHg4NWIKK05vIG1hdGNoCisKKy9eYWJjLi9nbXgsbmV3bGluZT1hbnkKKyAgICBhYmMxIFx4MGFhYmMyIFx4MGJhYmMzeHggXHgwY2FiYzQgXHgwZGFiYzV4eCBceDBkXHgwYWFiYzYgXHg4NWFiYzcgSlVOSworIDA6IGFiYzEKKyAwOiBhYmMyCisgMDogYWJjMworIDA6IGFiYzQKKyAwOiBhYmM1CisgMDogYWJjNgorIDA6IGFiYzcKKworL2FiYy4kL2dteCxuZXdsaW5lPWFueQorICAgIGFiYzFceDBhIGFiYzJceDBiIGFiYzNceDBjIGFiYzRceDBkIGFiYzVceDBkXHgwYSBhYmM2XHg4NSBhYmM5CisgMDogYWJjMQorIDA6IGFiYzIKKyAwOiBhYmMzCisgMDogYWJjNAorIDA6IGFiYzUKKyAwOiBhYmM2CisgMDogYWJjOQorCisvXmFcUmIvYnNyPXVuaWNvZGUKKyAgICBhXG5iCisgMDogYVx4MGFiCisgICAgYVxyYgorIDA6IGFceDBkYgorICAgIGFcclxuYgorIDA6IGFceDBkXHgwYWIKKyAgICBhXHgwYmIKKyAwOiBhXHgwYmIKKyAgICBhXHgwY2IKKyAwOiBhXHgwY2IKKyAgICBhXHg4NWIgICAKKyAwOiBhXHg4NWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcblxyYiAgICAKK05vIG1hdGNoCisKKy9eYVxSKmIvYnNyPXVuaWNvZGUKKyAgICBhYgorIDA6IGFiCisgICAgYVxuYgorIDA6IGFceDBhYgorICAgIGFccmIKKyAwOiBhXHgwZGIKKyAgICBhXHJcbmIKKyAwOiBhXHgwZFx4MGFiCisgICAgYVx4MGJiCisgMDogYVx4MGJiCisgICAgYVx4MGNiCisgMDogYVx4MGNiCisgICAgYVx4ODViICAgCisgMDogYVx4ODViCisgICAgYVxuXHJiICAgIAorIDA6IGFceDBhXHgwZGIKKyAgICBhXG5cclx4ODVceDBjYiAKKyAwOiBhXHgwYVx4MGRceDg1XHgwY2IKKworL15hXFIrYi9ic3I9dW5pY29kZQorICAgIGFcbmIKKyAwOiBhXHgwYWIKKyAgICBhXHJiCisgMDogYVx4MGRiCisgICAgYVxyXG5iCisgMDogYVx4MGRceDBhYgorICAgIGFceDBiYgorIDA6IGFceDBiYgorICAgIGFceDBjYgorIDA6IGFceDBjYgorICAgIGFceDg1YiAgIAorIDA6IGFceDg1YgorICAgIGFcblxyYiAgICAKKyAwOiBhXHgwYVx4MGRiCisgICAgYVxuXHJceDg1XHgwY2IgCisgMDogYVx4MGFceDBkXHg4NVx4MGNiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYiAgCitObyBtYXRjaAorICAgIAorL15hXFJ7MSwzfWIvYnNyPXVuaWNvZGUKKyAgICBhXG5iCisgMDogYVx4MGFiCisgICAgYVxuXHJiCisgMDogYVx4MGFceDBkYgorICAgIGFcblxyXHg4NWIKKyAwOiBhXHgwYVx4MGRceDg1YgorICAgIGFcclxuXHJcbmIgCisgMDogYVx4MGRceDBhXHgwZFx4MGFiCisgICAgYVxyXG5cclxuXHJcbmIgCisgMDogYVx4MGRceDBhXHgwZFx4MGFceDBkXHgwYWIKKyAgICBhXG5cclxuXHJiCisgMDogYVx4MGFceDBkXHgwYVx4MGRiCisgICAgYVxuXG5cclxuYiAKKyAwOiBhXHgwYVx4MGFceDBkXHgwYWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcblxuXG5ccmIKK05vIG1hdGNoCisgICAgYVxyCitObyBtYXRjaAorCisvLitmb28vCisgICAgYWZvbworIDA6IGFmb28KK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBcclxuZm9vIAorTm8gbWF0Y2gKKyAgICBcbmZvbyAKK05vIG1hdGNoCisKKy8uK2Zvby9uZXdsaW5lPWNybGYKKyAgICBhZm9vCisgMDogYWZvbworICAgIFxuZm9vIAorIDA6IFx4MGFmb28KK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBcclxuZm9vIAorTm8gbWF0Y2gKKworLy4rZm9vL25ld2xpbmU9YW55CisgICAgYWZvbworIDA6IGFmb28KK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBcbmZvbyAKK05vIG1hdGNoCisgICAgXHJcbmZvbyAKK05vIG1hdGNoCisKKy8uK2Zvby9zCisgICAgYWZvbworIDA6IGFmb28KKyAgICBcclxuZm9vIAorIDA6IFx4MGRceDBhZm9vCisgICAgXG5mb28gCisgMDogXHgwYWZvbworCisvXiQvZ20sbmV3bGluZT1hbnkKKyAgICBhYmNcclxyeHl6CisgMDogCisgICAgYWJjXG5ccnh5eiAgCisgMDogCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgYWJjXHJcbnh5egorTm8gbWF0Y2gKKworL15YL20KKyAgICBYQUJDCisgMDogWAorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFhBQkNcPW5vdGJvbAorTm8gbWF0Y2gKKworLyg/bSleJC9nLG5ld2xpbmU9YW55LGFmdGVydGV4dAorICAgIGFiY1xyXG5cclxuCisgMDogCisgMCsgXHgwZFx4MGEKKworLyg/bSleJHxeXHJcbi9nLG5ld2xpbmU9YW55LGFmdGVydGV4dAorICAgIGFiY1xyXG5cclxuCisgMDogXHgwZFx4MGEKKyAwKyAKKyAxOiAKKyAgICAKKy8oP20pJC9nLG5ld2xpbmU9YW55LGFmdGVydGV4dAorICAgIGFiY1xyXG5cclxuCisgMDogCisgMCsgXHgwZFx4MGFceDBkXHgwYQorIDA6IAorIDArIFx4MGRceDBhCisgMDogCisgMCsgCisKKy8oP3woYWJjKXwoeHl6KSkvCisgICA+YWJjPAorIDA6IGFiYworICAgPnh5ejwgCisgMDogeHl6CisKKy8oeCkoP3woYWJjKXwoeHl6KSkoeCkvCisgICAgeGFiY3gKKyAwOiB4YWJjeAorICAgIHh4eXp4IAorIDA6IHh4eXp4CisKKy8oeCkoP3woYWJjKShwcXIpfCh4eXopKSh4KS8KKyAgICB4YWJjcHFyeAorIDA6IHhhYmNwcXJ4CisgICAgeHh5enggCisgMDogeHh5engKKworLyg/fChhYmMpfCh4eXopKSg/MSkvCisgICAgYWJjYWJjCisgMDogYWJjYWJjCisgICAgeHl6YWJjIAorIDA6IHh5emFiYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIHh5enh5eiAKK05vIG1hdGNoCisgCisvXEhcaFxWXHYvCisgICAgWCBYXHgwYQorIDA6IFggWFx4MGEKKyAgICBYXHgwOVhceDBiCisgMDogWFx4MDlYXHgwYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHhhMCBYXHgwYSAgIAorTm8gbWF0Y2gKKyAgICAKKy9cSCpcaCtcVj9cdnszLDR9LworICAgIFx4MDlceDIwXHhhMFhceDBhXHgwYlx4MGNceDBkXHgwYQorIDA6IFx4MDkgXHhhMFhceDBhXHgwYlx4MGNceDBkCisgICAgXHgwOVx4MjBceGEwXHgwYVx4MGJceDBjXHgwZFx4MGEKKyAwOiBceDA5IFx4YTBceDBhXHgwYlx4MGNceDBkCisgICAgXHgwOVx4MjBceGEwXHgwYVx4MGJceDBjCisgMDogXHgwOSBceGEwXHgwYVx4MGJceDBjCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgXHgwOVx4MjBceGEwXHgwYVx4MGIKK05vIG1hdGNoCisgICAgIAorL1xIezMsNH0vCisgICAgWFkgIEFCQ0RFCisgMDogQUJDRAorICAgIFhZICBQUVIgU1QgCisgMDogUFFSCisgICAgCisvLlxoezMsNH0uLworICAgIFhZICBBQiAgICBQUVJTCisgMDogQiAgICBQCisgMTogQiAgICAKKworL1xoKlhcaD9cSCtZXEg/Wi8KKyAgICA+WE5OTllaCisgMDogWE5OTllaCisgICAgPiAgWCBOWVFaCisgMDogICBYIE5ZUVoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgID5YWVogICAKK05vIG1hdGNoCisgICAgPiAgWCBOWSBaCitObyBtYXRjaAorCisvXHYqWFx2P1lcditaXFYqXHgwYVxWK1x4MGJcVnsyLDN9XHgwYy8KKyAgICA+WFlceDBhWlx4MGFBXHgwYk5OXHgwYworIDA6IFhZXHgwYVpceDBhQVx4MGJOTlx4MGMKKyAgICA+XHgwYVx4MGRYXHgwYVlceDBhXHgwYlpaWlx4MGFBQUFceDBiTk5OXHgwYworIDA6IFx4MGFceDBkWFx4MGFZXHgwYVx4MGJaWlpceDBhQUFBXHgwYk5OTlx4MGMKKworLy4rQS9uZXdsaW5lPWNybGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFxyXG5BCitObyBtYXRjaAorICAgIAorL1xuQS9uZXdsaW5lPWNybGYKKyAgICBcclxuQSAKKyAwOiBceDBhQQorCisvW1xyXG5dQS9uZXdsaW5lPWNybGYKKyAgICBcclxuQSAKKyAwOiBceDBhQQorCisvKFxyfFxuKUEvbmV3bGluZT1jcmxmCisgICAgXHJcbkEgCisgMDogXHgwYUEKKworL2FcUmIvSSxic3I9YW55Y3JsZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitcUiBtYXRjaGVzIENSLCBMRiwgb3IgQ1JMRgorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgYVxyYgorIDA6IGFceDBkYgorICAgIGFcbmIKKyAwOiBhXHgwYWIKKyAgICBhXHJcbmIKKyAwOiBhXHgwZFx4MGFiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHg4NWIKK05vIG1hdGNoCisgICAgYVx4MGJiICAgICAKK05vIG1hdGNoCisKKy9hXFJiL0ksYnNyPXVuaWNvZGUKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorXFIgbWF0Y2hlcyBhbnkgVW5pY29kZSBuZXdsaW5lCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKyAgICBhXHJiCisgMDogYVx4MGRiCisgICAgYVxuYgorIDA6IGFceDBhYgorICAgIGFcclxuYgorIDA6IGFceDBkXHgwYWIKKyAgICBhXHg4NWIKKyAwOiBhXHg4NWIKKyAgICBhXHgwYmIgICAgIAorIDA6IGFceDBiYgorICAgIAorL2FcUj9iL0ksYnNyPWFueWNybGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorXFIgbWF0Y2hlcyBDUiwgTEYsIG9yIENSTEYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFccmIKKyAwOiBhXHgwZGIKKyAgICBhXG5iCisgMDogYVx4MGFiCisgICAgYVxyXG5iCisgMDogYVx4MGRceDBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ODViCitObyBtYXRjaAorICAgIGFceDBiYiAgICAgCitObyBtYXRjaAorCisvYVxSP2IvSSxic3I9dW5pY29kZQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitcUiBtYXRjaGVzIGFueSBVbmljb2RlIG5ld2xpbmUKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMgorICAgIGFccmIKKyAwOiBhXHgwZGIKKyAgICBhXG5iCisgMDogYVx4MGFiCisgICAgYVxyXG5iCisgMDogYVx4MGRceDBhYgorICAgIGFceDg1YgorIDA6IGFceDg1YgorICAgIGFceDBiYiAgICAgCisgMDogYVx4MGJiCisgICAgCisvYVxSezIsNH1iL0ksYnNyPWFueWNybGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorXFIgbWF0Y2hlcyBDUiwgTEYsIG9yIENSTEYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorICAgIGFcclxuXG5iCisgMDogYVx4MGRceDBhXHgwYWIKKyAgICBhXG5cclxyYgorIDA6IGFceDBhXHgwZFx4MGRiCisgICAgYVxyXG5cclxuXHJcblxyXG5iCisgMDogYVx4MGRceDBhXHgwZFx4MGFceDBkXHgwYVx4MGRceDBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4MGJceDBiYiAgICAgCitObyBtYXRjaAorICAgIGFceDg1XHg4NWIKK05vIG1hdGNoCisKKy9hXFJ7Miw0fWIvSSxic3I9dW5pY29kZQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitcUiBtYXRjaGVzIGFueSBVbmljb2RlIG5ld2xpbmUKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorICAgIGFcclxyYgorIDA6IGFceDBkXHgwZGIKKyAgICBhXG5cblxuYgorIDA6IGFceDBhXHgwYVx4MGFiCisgICAgYVxyXG5cblxyXHJiCisgMDogYVx4MGRceDBhXHgwYVx4MGRceDBkYgorICAgIGFceDg1XHg4NWIKKyAwOiBhXHg4NVx4ODViCisgICAgYVx4MGJceDBiYiAgICAgCisgMDogYVx4MGJceDBiYgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFcclxyXHJcclxyYiAKK05vIG1hdGNoCisgICAgCisvYSg/ISl8XHdiYy8KKyAgICBhYmMgCisgMDogYWJjCisKKy9hW11iL2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiCitObyBtYXRjaAorCisvYVtdK2IvYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIgCitObyBtYXRjaAorCisvYVtdKitiL2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiIAorTm8gbWF0Y2gKKworL2FbXl1iL2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKKyAgICBhWGIKKyAwOiBhWGIKKyAgICBhXG5iIAorIDA6IGFceDBhYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIgIAorTm8gbWF0Y2gKKyAgICAKKy9hW15dK2IvYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworICAgIGFYYgorIDA6IGFYYgorICAgIGFcblhcblhiIAorIDA6IGFceDBhWFx4MGFYYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIgIAorTm8gbWF0Y2gKKworL1gkL2RvbGxhcl9lbmRvbmx5CisgICAgWAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBYXG4gCitObyBtYXRjaAorCisvWCQvCisgICAgWAorIDA6IFgKKyAgICBYXG4gCisgMDogWAorCisveHl6L2F1dG9fY2FsbG91dAorICB4eXogCistLS0+eHl6CisgKzAgXiAgICAgICB4CisgKzEgXl4gICAgICB5CisgKzIgXiBeICAgICB6CisgKzMgXiAgXiAgICAKKyAwOiB4eXoKKyAgYWJjeHl6IAorLS0tPmFiY3h5egorICswICAgIF4gICAgICAgeAorICsxICAgIF5eICAgICAgeQorICsyICAgIF4gXiAgICAgegorICszICAgIF4gIF4gICAgCisgMDogeHl6CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgIGFiYworTm8gbWF0Y2gKKyAgYWJjeHlwcXIgIAorTm8gbWF0Y2gKKworL3h5ei9hdXRvX2NhbGxvdXQsbm9fc3RhcnRfb3B0aW1pemUKKyAgYWJjeHl6IAorLS0tPmFiY3h5egorICswIF4gICAgICAgICAgeAorICswICBeICAgICAgICAgeAorICswICAgXiAgICAgICAgeAorICswICAgIF4gICAgICAgeAorICsxICAgIF5eICAgICAgeQorICsyICAgIF4gXiAgICAgegorICszICAgIF4gIF4gICAgCisgMDogeHl6CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgIGFiYworLS0tPmFiYworICswIF4gICAgICAgeAorICswICBeICAgICAgeAorICswICAgXiAgICAgeAorICswICAgIF4gICAgeAorTm8gbWF0Y2gKKyAgYWJjeHlwcXIgIAorLS0tPmFiY3h5cHFyCisgKzAgXiAgICAgICAgICAgIHgKKyArMCAgXiAgICAgICAgICAgeAorICswICAgXiAgICAgICAgICB4CisgKzAgICAgXiAgICAgICAgIHgKKyArMSAgICBeXiAgICAgICAgeQorICsyICAgIF4gXiAgICAgICB6CisgKzAgICAgIF4gICAgICAgIHgKKyArMCAgICAgIF4gICAgICAgeAorICswICAgICAgIF4gICAgICB4CisgKzAgICAgICAgIF4gICAgIHgKKyArMCAgICAgICAgIF4gICAgeAorTm8gbWF0Y2gKKworLygqTk9fU1RBUlRfT1BUKXh5ei9hdXRvX2NhbGxvdXQKKyAgYWJjeHl6IAorLS0tPmFiY3h5egorKzE1IF4gICAgICAgICAgeAorKzE1ICBeICAgICAgICAgeAorKzE1ICAgXiAgICAgICAgeAorKzE1ICAgIF4gICAgICAgeAorKzE2ICAgIF5eICAgICAgeQorKzE3ICAgIF4gXiAgICAgegorKzE4ICAgIF4gIF4gICAgCisgMDogeHl6CisgIAorLyg/QylhYi8KKyAgYWIKKy0tLT5hYgorICAwIF4gICAgICBhCisgMDogYWIKKyAgYWJcPWNhbGxvdXRfbm9uZQorIDA6IGFiCisgIAorL2FiL2F1dG9fY2FsbG91dAorICBhYgorLS0tPmFiCisgKzAgXiAgICAgIGEKKyArMSBeXiAgICAgYgorICsyIF4gXiAgICAKKyAwOiBhYgorICBhYlw9Y2FsbG91dF9ub25lCisgMDogYWIKKworL14iKCg/KD89W2FdKVteIl0pfGIpKiIkL2F1dG9fY2FsbG91dAorICAgICJhYiIKKy0tLT4iYWIiCisgKzAgXiAgICAgICAgXgorICsxIF4gICAgICAgICIKKyArMiBeXiAgICAgICAoKD8oPz1bYV0pW14iXSl8YikqCisrMjEgXl4gICAgICAgIgorICszIF5eICAgICAgICg/KD89W2FdKVteIl0pCisrMTggXl4gICAgICAgYgorICs1IF5eICAgICAgICg/PVthXSkKKyArOCAgXiAgICAgICBbYV0KKysxMSAgXl4gICAgICApCisrMTIgXl4gICAgICAgW14iXQorKzE2IF4gXiAgICAgICkKKysxNyBeIF4gICAgICB8CisrMjEgXiBeICAgICAgIgorICszIF4gXiAgICAgICg/KD89W2FdKVteIl0pCisrMTggXiBeICAgICAgYgorICs1IF4gXiAgICAgICg/PVthXSkKKyArOCAgIF4gICAgICBbYV0KKysxOSBeICBeICAgICApCisrMjEgXiAgXiAgICAgIgorICszIF4gIF4gICAgICg/KD89W2FdKVteIl0pCisrMTggXiAgXiAgICAgYgorICs1IF4gIF4gICAgICg/PVthXSkKKyArOCAgICBeICAgICBbYV0KKysxNyBeICBeICAgICB8CisrMjIgXiAgIF4gICAgJAorKzIzIF4gICBeICAgIAorIDA6ICJhYiIKKyAgICAiYWIiXD1jYWxsb3V0X25vbmUKKyAwOiAiYWIiCisKKy9cZCtYfDkrWS8KKyAgICArKysrMTIzOTk5XD1wcworUGFydGlhbCBtYXRjaDogMTIzOTk5CisgICAgKysrKzEyMzk5OVlcPXBzCisgMDogOTk5WQorCisvWigqRikvCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgWlw9cHMKK05vIG1hdGNoCisgICAgWkFcPXBzCitObyBtYXRjaAorICAgIAorL1ooPyEpLworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFpcPXBzCitObyBtYXRjaAorICAgIFpBXD1wcworTm8gbWF0Y2gKKworL2RvZyhzYm9keSk/LworICAgIGRvZ3NcPXBzCisgMDogZG9nCisgICAgZG9nc1w9cGgKK1BhcnRpYWwgbWF0Y2g6IGRvZ3MKKyAgICAKKy9kb2coc2JvZHkpPz8vCisgICAgZG9nc1w9cHMKKyAwOiBkb2cKKyAgICBkb2dzXD1waAorUGFydGlhbCBtYXRjaDogZG9ncworCisvZG9nfGRvZ3Nib2R5LworICAgIGRvZ3NcPXBzCisgMDogZG9nCisgICAgZG9nc1w9cGgKK1BhcnRpYWwgbWF0Y2g6IGRvZ3MKKyAKKy9kb2dzYm9keXxkb2cvCisgICAgZG9nc1w9cHMKKyAwOiBkb2cKKyAgICBkb2dzXD1waAorUGFydGlhbCBtYXRjaDogZG9ncworCisvWigqRilRfFpYWS8KKyAgICBaXD1wcworUGFydGlhbCBtYXRjaDogWgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFpBXD1wcworTm8gbWF0Y2gKKyAgICBYXD1wcworTm8gbWF0Y2gKKworL1xidGhlIGNhdFxiLworICAgIHRoZSBjYXRcPXBzCisgMDogdGhlIGNhdAorICAgIHRoZSBjYXRcPXBoCitQYXJ0aWFsIG1hdGNoOiB0aGUgY2F0CisKKy9kb2coc2JvZHkpPy8KKyAgICBkb2dzXD1wcworIDA6IGRvZworICAgIGJvZHlcPWRmYV9yZXN0YXJ0CisgMDogYm9keQorCisvZG9nKHNib2R5KT8vCisgICAgZG9nc1w9cGgKK1BhcnRpYWwgbWF0Y2g6IGRvZ3MKKyAgICBib2R5XD1kZmFfcmVzdGFydAorIDA6IGJvZHkKKworL2FiYy8KKyAgIGFiY1w9cHMKKyAwOiBhYmMKKyAgIGFiY1w9cGgKKyAwOiBhYmMKKworL2FiY1xLMTIzLworICAgIHh5emFiYzEyM3BxcgorRmFpbGVkOiBlcnJvciAtNDI6IHBhdHRlcm4gY29udGFpbnMgYW4gaXRlbSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIERGQSBtYXRjaGluZworICAgIAorLyg/PD1hYmMpMTIzLworICAgIHh5emFiYzEyM3BxciAKKyAwOiAxMjMKKyAgICB4eXphYmMxMlw9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiYzEyCisgICAgICAgICAgICAgICA8PDwKKyAgICB4eXphYmMxMlw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiYzEyCisgICAgICAgICAgICAgICA8PDwKKworL1xiYWJjXGIvCisgICAgKysrYWJjKysrCisgMDogYWJjCisgICAgKysrYWJcPXBzCitQYXJ0aWFsIG1hdGNoOiArYWIKKyAgICAgICAgICAgICAgIDwKKyAgICArKythYlw9cGgKK1BhcnRpYWwgbWF0Y2g6ICthYgorICAgICAgICAgICAgICAgPAorCisvKD89QykvZyxhZnRlcnRleHQKKyAgICBBQkNERUNCQQorIDA6IAorIDArIENERUNCQQorIDA6IAorIDArIENCQQorCisvKGFiY3xkZWZ8eHl6KS9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IGEgZCB4IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisgICAgdGVyaGprO2FiY2RhYWRzZmUKKyAwOiBhYmMKKyAgICB0aGUgcXVpY2sgeHl6IGJyb3duIGZveCAKKyAwOiB4eXoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIHRoZWprO2FkbGZqIGFlbmpsO2ZkYSBhc2RmYXNkIGVoajtranh5YXNpdXBkCitObyBtYXRjaAorCisvKGFiY3xkZWZ8eHl6KS9JLG5vX3N0YXJ0X29wdGltaXplCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK09wdGlvbnM6IG5vX3N0YXJ0X29wdGltaXplCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICB0ZXJoams7YWJjZGFhZHNmZQorIDA6IGFiYworICAgIHRoZSBxdWljayB4eXogYnJvd24gZm94CisgMDogeHl6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB0aGVqazthZGxmaiBhZW5qbDtmZGEgYXNkZmFzZCBlaGo7a2p4eWFzaXVwZAorTm8gbWF0Y2gKKworL2FiY2QqL2FmdGVydGV4dAorICAgIHh4eHhhYmNkXD1wcworIDA6IGFiY2QKKyAwKyAKKyAgICB4eHh4YWJjZFw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiY2QKKyAgICBkZGR4eHhcPWRmYV9yZXN0YXJ0CisgMDogZGRkCisgMCsgeHh4CisgICAgeHh4eGFiY2RcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmNkCisgICAgeHh4XD1kZmFfcmVzdGFydAorIDA6IAorIDArIHh4eAorCisvYWJjZCovaQorICAgIHh4eHhhYmNkXD1wcworIDA6IGFiY2QKKyAgICB4eHh4YWJjZFw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiY2QKKyAgICBYWFhYQUJDRFw9cHMKKyAwOiBBQkNECisgICAgWFhYWEFCQ0RcPXBoCitQYXJ0aWFsIG1hdGNoOiBBQkNECisKKy9hYmNcZCovCisgICAgeHh4eGFiYzFcPXBzCisgMDogYWJjMQorICAgIHh4eHhhYmMxXD1waAorUGFydGlhbCBtYXRjaDogYWJjMQorCisvYWJjW2RlXSovCisgICAgeHh4eGFiY2RlXD1wcworIDA6IGFiY2RlCisgICAgeHh4eGFiY2RlXD1waAorUGFydGlhbCBtYXRjaDogYWJjZGUKKworLyg/Oig/MSl8QikoQSgqRil8QykvCisgICAgQUJDRAorIDA6IEJDCisgICAgQ0NECisgMDogQ0MKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIENBRCAgIAorTm8gbWF0Y2gKKworL14oPzooPzEpfEIpKEEoKkYpfEMpLworICAgIENDRAorIDA6IENDCisgICAgQkNEIAorIDA6IEJDCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkNECitObyBtYXRjaAorICAgIENBRAorTm8gbWF0Y2gKKyAgICBCQUQgICAgCitObyBtYXRjaAorCisvXig/IWEoKlNLSVApYikvCisgICAgYWMKK0ZhaWxlZDogZXJyb3IgLTQyOiBwYXR0ZXJuIGNvbnRhaW5zIGFuIGl0ZW0gdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBERkEgbWF0Y2hpbmcKKyAgICAKKy9eKD89YSgqU0tJUClifGFjKS8KKyAgICBhYworRmFpbGVkOiBlcnJvciAtNDI6IHBhdHRlcm4gY29udGFpbnMgYW4gaXRlbSB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIERGQSBtYXRjaGluZworICAgIAorL14oPz1hKCpUSEVOKWJ8YWMpLworICAgIGFjCitGYWlsZWQ6IGVycm9yIC00MjogcGF0dGVybiBjb250YWlucyBhbiBpdGVtIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBmb3IgREZBIG1hdGNoaW5nCisgICAgCisvXig/PWEoKlBSVU5FKWIpLworICAgIGFiICAKK0ZhaWxlZDogZXJyb3IgLTQyOiBwYXR0ZXJuIGNvbnRhaW5zIGFuIGl0ZW0gdGhhdCBpcyBub3Qgc3VwcG9ydGVkIGZvciBERkEgbWF0Y2hpbmcKKworL14oPyg/IWEoKlNLSVApYikpLworICAgIGFjCitGYWlsZWQ6IGVycm9yIC00MjogcGF0dGVybiBjb250YWlucyBhbiBpdGVtIHRoYXQgaXMgbm90IHN1cHBvcnRlZCBmb3IgREZBIG1hdGNoaW5nCisKKy8oPzw9YWJjKWRlZi8KKyAgICBhYmNcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmMKKyAgICAgICAgICAgICAgIDw8PAorCisvYWJjJC8KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBhYmNcPXBzCisgMDogYWJjCisgICAgYWJjXD1waAorUGFydGlhbCBtYXRjaDogYWJjCisKKy9hYmMkL20KKyAgICBhYmMKKyAwOiBhYmMKKyAgICBhYmNcbgorIDA6IGFiYworICAgIGFiY1w9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiYworICAgIGFiY1xuXD1waAorIDA6IGFiYworICAgIGFiY1w9cHMKKyAwOiBhYmMKKyAgICBhYmNcblw9cHMKKyAwOiBhYmMKKworL2FiY1x6LworICAgIGFiYworIDA6IGFiYworICAgIGFiY1w9cHMKKyAwOiBhYmMKKyAgICBhYmNcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmMKKworL2FiY1xaLworICAgIGFiYworIDA6IGFiYworICAgIGFiY1w9cHMKKyAwOiBhYmMKKyAgICBhYmNcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmMKKworL2FiY1xiLworICAgIGFiYworIDA6IGFiYworICAgIGFiY1w9cHMKKyAwOiBhYmMKKyAgICBhYmNcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmMKKworL2FiY1xCLworICAgIGFiY1w9cHMKK1BhcnRpYWwgbWF0Y2g6IGFiYworICAgIGFiY1w9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiYworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiYworTm8gbWF0Y2gKKworLy4rLworICAgIGFiY1w9b2Zmc2V0PTAKKyAwOiBhYmMKKyAgICBhYmNcPW9mZnNldD0xCisgMDogYmMKKyAgICBhYmNcPW9mZnNldD0yCisgMDogYworXD0gQmFkIG9mZnNldHMKKyAgICBhYmNcPW9mZnNldD00CitGYWlsZWQ6IGVycm9yIC0zMzogYmFkIG9mZnNldCB2YWx1ZQorICAgIGFiY1w9b2Zmc2V0PS00IAorKiogSW52YWxpZCB2YWx1ZSBpbiAnb2Zmc2V0PS00JworXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiY1w9b2Zmc2V0PTMKK05vIG1hdGNoCisKKy9eKD86YSkrK1x3LworICAgICBhYWFhYgorIDA6IGFhYWFiCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgIGFhYWEgCitObyBtYXRjaAorICAgICBiYmIgCitObyBtYXRjaAorCisvXig/OmFhfCg/OmEpKytcdykvCisgICAgIGFhYWFiCisgMDogYWFhYWIKKyAxOiBhYQorICAgICBhYWFhIAorIDA6IGFhCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgIGJiYiAKK05vIG1hdGNoCisKKy9eKD86YSkqK1x3LworICAgICBhYWFhYgorIDA6IGFhYWFiCisgICAgIGJiYiAKKyAwOiBiCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgIGFhYWEgCitObyBtYXRjaAorCisvXihhKSsrXHcvCisgICAgIGFhYWFiCisgMDogYWFhYWIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICAgYWFhYSAKK05vIG1hdGNoCisgICAgIGJiYiAKK05vIG1hdGNoCisKKy9eKGF8KSsrXHcvCisgICAgIGFhYWFiCisgMDogYWFhYWIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICAgYWFhYSAKK05vIG1hdGNoCisgICAgIGJiYiAKK05vIG1hdGNoCisKKy8oPz1hYmMpezN9YWJjL2FmdGVydGV4dAorICAgIGFiY2FiY2FiYworIDA6IGFiYworIDArIGFiY2FiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeHl6ICAKK05vIG1hdGNoCisgICAgCisvKD89YWJjKSthYmMvYWZ0ZXJ0ZXh0CisgICAgYWJjYWJjYWJjCisgMDogYWJjCisgMCsgYWJjYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXogIAorTm8gbWF0Y2gKKyAgICAKKy8oPz1hYmMpKythYmMvYWZ0ZXJ0ZXh0CisgICAgYWJjYWJjYWJjCisgMDogYWJjCisgMCsgYWJjYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXogIAorTm8gbWF0Y2gKKyAgICAKKy8oPz1hYmMpezB9eHl6LworICAgIHh5eiAKKyAwOiB4eXoKKworLyg/PWFiYyl7MX14eXovCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4eXogCitObyBtYXRjaAorICAgIAorLyg/PShhKSk/Li8KKyAgICBhYgorIDA6IGEKKyAgICBiYworIDA6IGIKKyAgICAgIAorLyg/PShhKSk/Py4vCisgICAgYWIKKyAwOiBhCisgICAgYmMKKyAwOiBiCisKKy9eKD89KGEpKXswfWIoPzEpLworICAgIGJhY2tnYW1tb24KKyAwOiBiYQorCisvXig/PSg/MSkpP1thel0oW2FiY10pZC8KKyAgICBhYmQgCisgMDogYWJkCisgICAgemNkeHggCisgMDogemNkCisKKy9eKD8hYSl7MH1cdysvCisgICAgYWFhYWEKKyAwOiBhYWFhYQorCisvKD88PShhYmMpKT94eXovCisgICAgYWJjeHl6CisgMDogeHl6CisgICAgcHFyeHl6IAorIDA6IHh5egorCisvKCg/MikpKCg/MSkpLworICAgIGFiYworRmFpbGVkOiBlcnJvciAtNTI6IG5lc3RlZCByZWN1cnNpb24gYXQgdGhlIHNhbWUgc3ViamVjdCBwb3NpdGlvbgorCisvKD8oUilhK3woP1IpYikvCisgICAgYWFhYWJjZGUKKyAwOiBhYWFhYgorCisvKD8oUilhK3woKD9SKSliKS8KKyAgICBhYWFhYmNkZQorIDA6IGFhYWFiCisKKy8oKD8oUilhK3woPzEpYikpLworICAgIGFhYWFiY2RlCisgMDogYWFhYWIKKworLygoPyhSMilhK3woPzEpYikpLworICAgIGFhYWFiY2RlCitGYWlsZWQ6IGVycm9yIC00MDogYmFja3JlZmVyZW5jZSBjb25kaXRpb24gb3IgcmVjdXJzaW9uIHRlc3QgaXMgbm90IHN1cHBvcnRlZCBmb3IgREZBIG1hdGNoaW5nCisKKy8oPyhSKWEqKD8xKXwoKD9SKSliKS8KKyAgICBhYWFhYmNkZQorRmFpbGVkOiBlcnJvciAtNTI6IG5lc3RlZCByZWN1cnNpb24gYXQgdGhlIHNhbWUgc3ViamVjdCBwb3NpdGlvbgorCisvKGErKS9ub19hdXRvX3Bvc3Nlc3MKKyAgICBhYWFhXD1vdmVjdG9yPTMKK01hdGNoZWQsIGJ1dCBvZmZzZXRzIHZlY3RvciBpcyB0b28gc21hbGwgdG8gc2hvdyBhbGwgbWF0Y2hlcworIDA6IGFhYWEKKyAxOiBhYWEKKyAyOiBhYQorICAgIGFhYWFcPW92ZWN0b3I9NAorIDA6IGFhYWEKKyAxOiBhYWEKKyAyOiBhYQorIDM6IGEKKworL15cUi8KKyAgICBcclw9cHMKKyAwOiBceDBkCisgICAgXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkCisgICAgCisvXlxSezIsM314LworICAgIFxyXD1wcworUGFydGlhbCBtYXRjaDogXHgwZAorICAgIFxyXD1waAorUGFydGlhbCBtYXRjaDogXHgwZAorICAgIFxyXHJcPXBzCitQYXJ0aWFsIG1hdGNoOiBceDBkXHgwZAorICAgIFxyXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkXHgwZAorICAgIFxyXHJcclw9cHMKK1BhcnRpYWwgbWF0Y2g6IFx4MGRceDBkXHgwZAorICAgIFxyXHJcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4MGRceDBkXHgwZAorICAgIFxyXHJ4CisgMDogXHgwZFx4MGR4CisgICAgXHJcclxyeCAgICAKKyAwOiBceDBkXHgwZFx4MGR4CisKKy9eXFJ7MiwzfT94LworICAgIFxyXD1wcworUGFydGlhbCBtYXRjaDogXHgwZAorICAgIFxyXD1waAorUGFydGlhbCBtYXRjaDogXHgwZAorICAgIFxyXHJcPXBzCitQYXJ0aWFsIG1hdGNoOiBceDBkXHgwZAorICAgIFxyXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkXHgwZAorICAgIFxyXHJcclw9cHMKK1BhcnRpYWwgbWF0Y2g6IFx4MGRceDBkXHgwZAorICAgIFxyXHJcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4MGRceDBkXHgwZAorICAgIFxyXHJ4CisgMDogXHgwZFx4MGR4CisgICAgXHJcclxyeCAgICAKKyAwOiBceDBkXHgwZFx4MGR4CisgICAgCisvXlxSP3gvCisgICAgXHJcPXBzCitQYXJ0aWFsIG1hdGNoOiBceDBkCisgICAgXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkCisgICAgeAorIDA6IHgKKyAgICBccnggIAorIDA6IFx4MGR4CisKKy9eXFIreC8KKyAgICBcclw9cHMKK1BhcnRpYWwgbWF0Y2g6IFx4MGQKKyAgICBcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4MGQKKyAgICBcclxuXD1wcworUGFydGlhbCBtYXRjaDogXHgwZFx4MGEKKyAgICBcclxuXD1waAorUGFydGlhbCBtYXRjaDogXHgwZFx4MGEKKyAgICBccnggIAorIDA6IFx4MGR4CisKKy9eYSQvbmV3bGluZT1jcmxmCisgICAgYVxyXD1wcworUGFydGlhbCBtYXRjaDogYVx4MGQKKyAgICBhXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBhXHgwZAorCisvXmEkL20sbmV3bGluZT1jcmxmCisgICAgYVxyXD1wcworUGFydGlhbCBtYXRjaDogYVx4MGQKKyAgICBhXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBhXHgwZAorCisvXihhJHxhXHIpL25ld2xpbmU9Y3JsZgorICAgIGFcclw9cHMKKyAwOiBhXHgwZAorICAgIGFcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFceDBkCisKKy9eKGEkfGFccikvbSxuZXdsaW5lPWNybGYKKyAgICBhXHJcPXBzCisgMDogYVx4MGQKKyAgICBhXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBhXHgwZAorCisvLi9uZXdsaW5lPWNybGYKKyAgICBcclw9cHMKKyAwOiBceDBkCisgICAgXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceDBkCisgIAorLy57MiwzfS9uZXdsaW5lPWNybGYKKyAgICBcclw9cHMKK1BhcnRpYWwgbWF0Y2g6IFx4MGQKKyAgICBcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4MGQKKyAgICBcclxyXD1wcworIDA6IFx4MGRceDBkCisgICAgXHJcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4MGRceDBkCisgICAgXHJcclxyXD1wcworIDA6IFx4MGRceDBkXHgwZAorICAgIFxyXHJcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4MGRceDBkXHgwZAorCisvLnsyLDN9Py9uZXdsaW5lPWNybGYKKyAgICBcclw9cHMKK1BhcnRpYWwgbWF0Y2g6IFx4MGQKKyAgICBcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4MGQKKyAgICBcclxyXD1wcworIDA6IFx4MGRceDBkCisgICAgXHJcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4MGRceDBkCisgICAgXHJcclxyXD1wcworIDA6IFx4MGRceDBkXHgwZAorIDE6IFx4MGRceDBkCisgICAgXHJcclxyXD1waAorUGFydGlhbCBtYXRjaDogXHgwZFx4MGRceDBkCisKKyMgVGVzdCBzaW1wbGUgdmFsaWRpdHkgY2hlY2sgZm9yIHJlc3RhcnRzIAorCisvYWJjZGVmLworICAgYWJjXD1kZmFfcmVzdGFydAorRmFpbGVkOiBlcnJvciAtMzg6IGludmFsaWQgZGF0YSBpbiB3b3Jrc3BhY2UgZm9yIERGQSByZXN0YXJ0CisKKy88SCgoPyg/ITxIfEY+KSguKXwoP1IpKSsrKSpGPi8KKyAgICB0ZXh0IDxIIG1vcmUgdGV4dCA8SCB0ZXh0aW5nIG1vcmUgIGhleEEwLSJceEEwIiAgICBoZXggYWJvdmUgN0YtIlx4QkMiIEY+IHRleHQgeHh4eHggPEggdGV4dCBGPiB0ZXh0IEY+IHRleHQyIDxIIHRleHQgc2FtcGxlIEY+IG1vcmUgdGV4dC4KKyAwOiA8SCBtb3JlIHRleHQgPEggdGV4dGluZyBtb3JlICBoZXhBMC0iXHhhMCIgICAgaGV4IGFib3ZlIDdGLSJceGJjIiBGPiB0ZXh0IHh4eHh4IDxIIHRleHQgRj4gdGV4dCBGPgorCisvXig/Pi57NH0pYWJjfF5cd1x3LnhhYmNkLworICAgIHh4eHhhYmNkCisgMDogeHh4eGFiY2QKKyAxOiB4eHh4YWJjCisgICAgeHhceGEweGFiY2QgCisgMDogeHhceGEweGFiY2QKKyAxOiB4eFx4YTB4YWJjCisKKy9eKC57NH0pezJ9K2FiY3xeXHdcdy54XHdcd1x3XHdhYmNkLworICAgIHh4eHh4eHh4YWJjZAorIDA6IHh4eHh4eHh4YWJjZAorIDE6IHh4eHh4eHh4YWJjCisgICAgeHhceGEweHh4eHhhYmNkIAorIDA6IHh4XHhhMHh4eHh4YWJjZAorIDE6IHh4XHhhMHh4eHh4YWJjCisKKy9hYmNkLworICAgIGFiY2RcPW92ZWN0b3I9MAorIDA6IGFiY2QKKworIyBUaGVzZSB0ZXN0cyBzaG93IHVwIGF1dG8tcG9zc2Vzc2lmaWNhdGlvbiAKKworL1thYl0qLworICAgIGFhYWEKKyAwOiBhYWFhCisgICAgCisvW2FiXSo/LworICAgIGFhYWEKKyAwOiBhYWFhCisgMTogYWFhCisgMjogYWEKKyAzOiBhCisgNDogCisgICAgCisvW2FiXT8vCisgICAgYWFhYQorIDA6IGEKKyAgICAKKy9bYWJdPz8vCisgICAgYWFhYQorIDA6IGEKKyAxOiAKKyAgICAKKy9bYWJdKy8KKyAgICBhYWFhCisgMDogYWFhYQorICAgIAorL1thYl0rPy8KKyAgICBhYWFhCisgMDogYWFhYQorIDE6IGFhYQorIDI6IGFhCisgMzogYQorICAgIAorL1thYl17MiwzfS8KKyAgICBhYWFhCisgMDogYWFhCisgICAgCisvW2FiXXsyLDN9Py8KKyAgICBhYWFhCisgMDogYWFhCisgMTogYWEKKyAgICAKKy9bYWJdezIsfS8KKyAgICBhYWFhICAgIAorIDA6IGFhYWEKKworL1thYl17Mix9Py8KKyAgICBhYWFhICAgIAorIDA6IGFhYWEKKyAxOiBhYWEKKyAyOiBhYQorCisnXEEoPzpbXlwiXSsrfFwiKD86W15cIl0qK3xcIlwiKSorXCIpKysnCisgICAgTk9OIFFVT1RFRCBcIlFVT1RcIlwiRURcIiBBRlRFUiBcIk5PVCBNQVRDSEVECisgMDogTk9OIFFVT1RFRCAiUVVPVCIiRUQiIEFGVEVSIAorCisnXEEoPzpbXlwiXSsrfFwiKD86W15cIl0rK3xcIlwiKSorXCIpKysnCisgICAgTk9OIFFVT1RFRCBcIlFVT1RcIlwiRURcIiBBRlRFUiBcIk5PVCBNQVRDSEVECisgMDogTk9OIFFVT1RFRCAiUVVPVCIiRUQiIEFGVEVSIAorCisvYWJjKD89eHl6KS9hbGx1c2VkdGV4dAorICAgIGFiY3h5enBxcgorIDA6IGFiY3h5egorICAgICAgID4+PgorICAgIGFiY3h5enBxclw9YWZ0ZXJ0ZXh0CisgMDogYWJjeHl6CisgICAgICAgPj4+CisgMCsgeHl6cHFyCisgICAgCisvKD88PXBxcilhYmMoPz14eXopL2FsbHVzZWR0ZXh0CisgICAgeHl6cHFyYWJjeHl6cHFyCisgMDogcHFyYWJjeHl6CisgICAgPDw8ICAgPj4+CisgICAgeHl6cHFyYWJjeHl6cHFyXD1hZnRlcnRleHQKKyAwOiBwcXJhYmN4eXoKKyAgICA8PDwgICA+Pj4KKyAwKyB4eXpwcXIKKyAgICAKKy9hXGIvCisgICAgYS5cPWFsbHVzZWR0ZXh0CisgMDogYS4KKyAgICAgPgorICAgIGFcPWFsbHVzZWR0ZXh0ICAKKyAwOiBhCisKKy9hYmMoPz1hYmNkZSkoPz1hYikvYWxsdXNlZHRleHQKKyAgICBhYmNhYmNkZWZnCisgMDogYWJjYWJjZGUKKyAgICAgICA+Pj4+PgorCisvYSo/Yio/LworICAgIGFiCisgMDogYWIKKyAxOiBhCisgMjogCisKKy8oKk5PVEVNUFRZKWEqP2IqPy8KKyAgICBhYgorIDA6IGFiCisgMTogYQorICAgIGJhCisgMDogYgorICAgIGNiICAKKyAwOiBiCisKKy8oKk5PVEVNUFRZX0FUU1RBUlQpYSo/Yio/L2FmdGVydGV4dAorICAgIGFiCisgMDogYWIKKyAwKyAKKyAxOiBhCisgICAgY2RhYiAKKyAwOiAKKyAwKyBkYWIKKworLyhhKShiKXwoYykvCisgICAgWGNYXD1vdmVjdG9yPTIsZ2V0PTEsZ2V0PTIsZ2V0PTMsZ2V0PTQsZ2V0YWxsCisgMDogYworR2V0IHN1YnN0cmluZyAxIGZhaWxlZCAoLTU1KTogcmVxdWVzdGVkIHZhbHVlIGlzIG5vdCBzZXQKK0dldCBzdWJzdHJpbmcgMiBmYWlsZWQgKC01NCk6IHJlcXVlc3RlZCB2YWx1ZSBpcyBub3QgYXZhaWxhYmxlCitHZXQgc3Vic3RyaW5nIDMgZmFpbGVkICgtNTQpOiByZXF1ZXN0ZWQgdmFsdWUgaXMgbm90IGF2YWlsYWJsZQorR2V0IHN1YnN0cmluZyA0IGZhaWxlZCAoLTU0KTogcmVxdWVzdGVkIHZhbHVlIGlzIG5vdCBhdmFpbGFibGUKKyAwTCBjCisKKy8oPzxBPmFhKS8KKyAgICBhYVw9Z2V0PUEKKyAwOiBhYQorR2V0IHN1YnN0cmluZyAnQScgZmFpbGVkICgtNDEpOiBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBERkEgbWF0Y2hpbmcKKyAgICBhYVw9Y29weT1BIAorIDA6IGFhCitDb3B5IHN1YnN0cmluZyAnQScgZmFpbGVkICgtNDEpOiBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBERkEgbWF0Y2hpbmcKKworL2ErL25vX2F1dG9fcG9zc2VzcworICAgIGFcPW92ZWN0b3I9MixnZXQ9MSxnZXQ9MixnZXRhbGwKKyAwOiBhCitHZXQgc3Vic3RyaW5nIDEgZmFpbGVkICgtNTUpOiByZXF1ZXN0ZWQgdmFsdWUgaXMgbm90IHNldAorR2V0IHN1YnN0cmluZyAyIGZhaWxlZCAoLTU0KTogcmVxdWVzdGVkIHZhbHVlIGlzIG5vdCBhdmFpbGFibGUKKyAwTCBhCisgICAgYWFhXD1vdmVjdG9yPTIsZ2V0PTEsZ2V0PTIsZ2V0YWxsCitNYXRjaGVkLCBidXQgb2Zmc2V0cyB2ZWN0b3IgaXMgdG9vIHNtYWxsIHRvIHNob3cgYWxsIG1hdGNoZXMKKyAwOiBhYWEKKyAxOiBhYQorIDFHIGFhICgyKQorR2V0IHN1YnN0cmluZyAyIGZhaWxlZCAoLTU0KTogcmVxdWVzdGVkIHZhbHVlIGlzIG5vdCBhdmFpbGFibGUKKyAwTCBhYWEKKyAxTCBhYQorCisvYShiKWMoZCkvCisgICAgYWJjXD1waCxjb3B5PTAsY29weT0xLGdldGFsbAorUGFydGlhbCBtYXRjaDogYWJjCisgMEMgYWJjICgzKQorQ29weSBzdWJzdHJpbmcgMSBmYWlsZWQgKC0yKTogcGFydGlhbCBtYXRjaAorZ2V0IHN1YnN0cmluZyBsaXN0IGZhaWxlZCAoLTIpOiBwYXJ0aWFsIG1hdGNoCisKKy9hYig/QyIgYW55IHRleHQgd2l0aCBzcGFjZXMgIiljZGUvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBhYgorICAgICAgICBDYWxsb3V0U3RyICIgYW55IHRleHQgd2l0aCBzcGFjZXMgIiA2IDMwIDEKKyAgICAgICAgY2RlCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGFiY2RlCitDYWxsb3V0ICg2KTogIiBhbnkgdGV4dCB3aXRoIHNwYWNlcyAiCistLS0+YWJjZGUKKyAgICBeIF4gICAgICAgYworIDA6IGFiY2RlCisgICAgMTJhYmNkZQorQ2FsbG91dCAoNik6ICIgYW55IHRleHQgd2l0aCBzcGFjZXMgIgorLS0tPjEyYWJjZGUKKyAgICAgIF4gXiAgICAgICBjCisgMDogYWJjZGUKKworL15hKGIpYyg/QzEpZGVmLworICAgICAgYWJjZGVmCistLS0+YWJjZGVmCisgIDEgXiAgXiAgICAgICBkCisgMDogYWJjZGVmCisKKy9eYShiKWMoP0MiQUIiKWRlZi8KKyAgICAgIGFiY2RlZgorQ2FsbG91dCAoMTApOiAiQUIiCistLS0+YWJjZGVmCisgICAgXiAgXiAgICAgICBkCisgMDogYWJjZGVmCisKKy9eYShiKWMoP0MxKWRlZi8KKyAgICAgIGFiY2RlZlw9Y2FsbG91dF9jYXB0dXJlCitDYWxsb3V0IDE6IGxhc3QgY2FwdHVyZSA9IDAKKyAwOiAKKy0tLT5hYmNkZWYKKyAgICBeICBeICAgICAgIGQKKyAwOiBhYmNkZWYKKworL15hKGIpYyg/Q3tBQn0pZGVmL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBhCisgICAgICAgIENCcmEgMQorICAgICAgICBiCisgICAgICAgIEtldAorICAgICAgICBjCisgICAgICAgIENhbGxvdXRTdHIge0FCfSAxMCAxNCAxCisgICAgICAgIGRlZgorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIGFiY2RlZlw9Y2FsbG91dF9jYXB0dXJlCitDYWxsb3V0ICgxMCk6IHtBQn0gbGFzdCBjYXB0dXJlID0gMAorIDA6IAorLS0tPmFiY2RlZgorICAgIF4gIF4gICAgICAgZAorIDA6IGFiY2RlZgorCisvXig/KD9DMjUpKD89YWJjKWFiY2R8eHl6KS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIF4KKyAgICAgICAgQ29uZAorICAgICAgICBDYWxsb3V0IDI1IDkgNworICAgICAgICBBc3NlcnQKKyAgICAgICAgYWJjCisgICAgICAgIEtldAorICAgICAgICBhYmNkCisgICAgICAgIEFsdAorICAgICAgICB4eXoKKyAgICAgICAgS2V0CisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIGFiY2RlZmcKKy0tLT5hYmNkZWZnCisgMjUgXiAgICAgICAgICAgKD89YWJjKQorIDA6IGFiY2QKKyAgICB4eXoxMjMgCistLS0+eHl6MTIzCisgMjUgXiAgICAgICAgICAoPz1hYmMpCisgMDogeHl6CisKKy9eKD8oP0MkYWJjJCkoPz1hYmMpYWJjZHx4eXopL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgXgorICAgICAgICBDb25kCisgICAgICAgIENhbGxvdXRTdHIgJGFiYyQgNyAxMiA3CisgICAgICAgIEFzc2VydAorICAgICAgICBhYmMKKyAgICAgICAgS2V0CisgICAgICAgIGFiY2QKKyAgICAgICAgQWx0CisgICAgICAgIHh5egorICAgICAgICBLZXQKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgYWJjZGVmZworQ2FsbG91dCAoNyk6ICRhYmMkCistLS0+YWJjZGVmZworICAgIF4gICAgICAgICAgICg/PWFiYykKKyAwOiBhYmNkCisgICAgeHl6MTIzIAorQ2FsbG91dCAoNyk6ICRhYmMkCistLS0+eHl6MTIzCisgICAgXiAgICAgICAgICAoPz1hYmMpCisgMDogeHl6CisKKy9eYWIoP0MnZmlyc3QnKWNkKD9DInNlY29uZCIpZWYvCisgICAgYWJjZGVmZworQ2FsbG91dCAoNyk6ICdmaXJzdCcKKy0tLT5hYmNkZWZnCisgICAgXiBeICAgICAgICAgYworQ2FsbG91dCAoMjApOiAic2Vjb25kIgorLS0tPmFiY2RlZmcKKyAgICBeICAgXiAgICAgICBlCisgMDogYWJjZGVmCisKKy8oPzphKD9DYGNvZGVgKSl7M31YLworICAgIGFhYVhZCitDYWxsb3V0ICg4KTogYGNvZGVgCistLS0+YWFhWFkKKyAgICBeXiAgICAgICAgKQorQ2FsbG91dCAoOCk6IGBjb2RlYAorLS0tPmFhYVhZCisgICAgXiBeICAgICAgICkKK0NhbGxvdXQgKDgpOiBgY29kZWAKKy0tLT5hYWFYWQorICAgIF4gIF4gICAgICApCisgMDogYWFhWAorCisjIEJpbmFyeSB6ZXJvIGluIGNhbGxvdXQgc3RyaW5nCisjICBhICAoICA/ICBDICAnICB4ICAgICB6ICAnICApICBiCisvIDYxIDI4IDNmIDQzIDI3IDc4IDAwIDdhIDI3IDI5IDYyL2hleAorICAgIGFiY2RlZmdoCitDYWxsb3V0ICg1KTogJ3hceDAweicKKy0tLT5hYmNkZWZnaAorICAgIF5eICAgICAgICAgICBiCisgMDogYWIKKworLyg/KD8hKWF8YikvCisgICAgYmJiCisgMDogYgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWFhIAorTm8gbWF0Y2gKKworL14vZ20KKyAgICBcblxuXG4KKyAwOiAKKyAwOiAKKyAwOiAKKworL14vZ20sYWx0X2NpcmN1bWZsZXgKKyAgICBcblxuXG4KKyAwOiAKKyAwOiAKKyAwOiAKKyAwOiAKKworL2FiYy91c2Vfb2Zmc2V0X2xpbWl0CisgICAgMTIzNGFiY2RlXD1vZmZzZXRfbGltaXQ9MTAwCisgMDogYWJjCisgICAgMTIzNGFiY2RlXD1vZmZzZXRfbGltaXQ9OQorIDA6IGFiYworICAgIDEyMzRhYmNkZVw9b2Zmc2V0X2xpbWl0PTQKKyAwOiBhYmMKKyAgICAxMjM0YWJjZGVcPW9mZnNldF9saW1pdD00LG9mZnNldD00CisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0YWJjZGVcPW9mZnNldF9saW1pdD00LG9mZnNldD01CitObyBtYXRjaAorICAgIDEyMzRhYmNkZVw9b2Zmc2V0X2xpbWl0PTMKK05vIG1hdGNoCisKKy8oPzw9YWJjKS91c2Vfb2Zmc2V0X2xpbWl0CisgICAgMTIzNGFiY1w9b2Zmc2V0X2xpbWl0PTcKKyAwOiAKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzRhYmNcPW9mZnNldF9saW1pdD02CitObyBtYXRjaAorCisvYWJjZC9udWxsX2NvbnRleHQKKyAgICBhYmNkXD1udWxsX2NvbnRleHQKKyAwOiBhYmNkCisKKyMgRW5kIG9mIHRlc3RpbnB1dDYKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ3IGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgwNDE4NQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ3CkBAIC0wLDAgKzEsMzU0MiBAQAorIyBUaGlzIHNldCBvZiB0ZXN0cyBjaGVja3MgVVRGIGFuZCBVbmljb2RlIHByb3BlcnR5IHN1cHBvcnQgd2l0aCB0aGUgREZBCisjIG1hdGNoaW5nIGZ1bmN0aW9uYWxpdHkgb2YgcGNyZV9kZmFfbWF0Y2goKS4gQSBkZWZhdWx0IHN1YmplY3QgbW9kaWZpZXIgaXMKKyMgdXNlZCB0byBmb3JjZSBERkEgbWF0Y2hpbmcgZm9yIGFsbCB0ZXN0cy4KKworI3N1YmplY3QgZGZhCisjbmV3bGluZV9kZWZhdWx0IExGIGFueSBhbnlDUkxGCisKKy9ceHsxMDB9YWIvdXRmCisgIFx4ezEwMH1hYgorIDA6IFx4ezEwMH1hYgorICAKKy9hXHh7MTAwfSpiL3V0ZgorICAgIGFiCisgMDogYWIKKyAgICBhXHh7MTAwfWIgIAorIDA6IGFceHsxMDB9YgorICAgIGFceHsxMDB9XHh7MTAwfWIgIAorIDA6IGFceHsxMDB9XHh7MTAwfWIKKyAgICAKKy9hXHh7MTAwfStiL3V0ZgorICAgIGFceHsxMDB9YiAgCisgMDogYVx4ezEwMH1iCisgICAgYVx4ezEwMH1ceHsxMDB9YiAgCisgMDogYVx4ezEwMH1ceHsxMDB9YgorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIGFiCitObyBtYXRjaAorICAgICAKKy9cYlgvdXRmCisgICAgWG9hbm9uCisgMDogWAorICAgICtYb2Fub24KKyAwOiBYCisgICAgXHh7MzAwfVhvYW5vbiAKKyAwOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgWVhvYW5vbiAgCitObyBtYXRjaAorICAgIAorL1xCWC91dGYKKyAgICBZWG9hbm9uCisgMDogWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWG9hbm9uCitObyBtYXRjaAorICAgICtYb2Fub24gICAgCitObyBtYXRjaAorICAgIFx4ezMwMH1Yb2Fub24gCitObyBtYXRjaAorCisvWFxiL3V0ZgorICAgIFgrb2Fub24KKyAwOiBYCisgICAgWlhceHszMDB9b2Fub24gCisgMDogWAorICAgIEZBWCAKKyAwOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgWG9hbm9uICAKK05vIG1hdGNoCisgICAgCisvWFxCL3V0ZgorICAgIFhvYW5vbiAgCisgMDogWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWCtvYW5vbgorTm8gbWF0Y2gKKyAgICBaWFx4ezMwMH1vYW5vbiAKK05vIG1hdGNoCisgICAgRkFYIAorTm8gbWF0Y2gKKyAgICAKKy9bXmFdL3V0ZgorICAgIGFiY2QKKyAwOiBiCisgICAgYVx4ezEwMH0gICAKKyAwOiBceHsxMDB9CisKKy9eW2FiY1x4ezEyM31ceHs0MDB9LVx4ezQwMn1dezIsM31cZC91dGYKKyAgICBhYjk5CisgMDogYWI5CisgICAgXHh7MTIzfVx4ezEyM300NQorIDA6IFx4ezEyM31ceHsxMjN9NAorICAgIFx4ezQwMH1ceHs0MDF9XHh7NDAyfTYgIAorIDA6IFx4ezQwMH1ceHs0MDF9XHh7NDAyfTYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGQ5OQorTm8gbWF0Y2gKKyAgICBceHsxMjN9XHh7MTIyfTQgICAKK05vIG1hdGNoCisgICAgXHh7NDAwfVx4ezQwM302ICAKK05vIG1hdGNoCisgICAgXHh7NDAwfVx4ezQwMX1ceHs0MDJ9XHh7NDAyfTYgIAorTm8gbWF0Y2gKKworL2EuYi91dGYKKyAgICBhY2IKKyAwOiBhY2IKKyAgICBhXHg3ZmIKKyAwOiBhXHh7N2Z9YgorICAgIGFceHsxMDB9YiAKKyAwOiBhXHh7MTAwfWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcbmIgIAorTm8gbWF0Y2gKKworL2EoLnszfSliL3V0ZgorICAgIGFceHs0MDAwfXh5YiAKKyAwOiBhXHh7NDAwMH14eWIKKyAgICBhXHh7NDAwMH1ceDdmeWIgCisgMDogYVx4ezQwMDB9XHh7N2Z9eWIKKyAgICBhXHh7NDAwMH1ceHsxMDB9eWIgCisgMDogYVx4ezQwMDB9XHh7MTAwfXliCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7NDAwMH1iIAorTm8gbWF0Y2gKKyAgICBhY1xuY2IgCitObyBtYXRjaAorCisvYSguKj8pKC4pLworICAgIGFceGMwXHg4OGIKKyAwOiBhXHhjMFx4ODhiCisgMTogYVx4YzBceDg4CisgMjogYVx4YzAKKworL2EoLio/KSguKS91dGYKKyAgICBhXHh7MTAwfWIKKyAwOiBhXHh7MTAwfWIKKyAxOiBhXHh7MTAwfQorCisvYSguKikoLikvCisgICAgYVx4YzBceDg4YgorIDA6IGFceGMwXHg4OGIKKyAxOiBhXHhjMFx4ODgKKyAyOiBhXHhjMAorCisvYSguKikoLikvdXRmCisgICAgYVx4ezEwMH1iCisgMDogYVx4ezEwMH1iCisgMTogYVx4ezEwMH0KKworL2EoLikoLikvCisgICAgYVx4YzBceDkyYmNkCisgMDogYVx4YzBceDkyCisKKy9hKC4pKC4pL3V0ZgorICAgIGFceHsyNDB9YmNkCisgMDogYVx4ezI0MH1iCisKKy9hKC4/KSguKS8KKyAgICBhXHhjMFx4OTJiY2QKKyAwOiBhXHhjMFx4OTIKKyAxOiBhXHhjMAorCisvYSguPykoLikvdXRmCisgICAgYVx4ezI0MH1iY2QKKyAwOiBhXHh7MjQwfWIKKyAxOiBhXHh7MjQwfQorCisvYSguPz8pKC4pLworICAgIGFceGMwXHg5MmJjZAorIDA6IGFceGMwXHg5MgorIDE6IGFceGMwCisKKy9hKC4/PykoLikvdXRmCisgICAgYVx4ezI0MH1iY2QKKyAwOiBhXHh7MjQwfWIKKyAxOiBhXHh7MjQwfQorCisvYSguezN9KWIvdXRmCisgICAgYVx4ezEyMzR9eHliIAorIDA6IGFceHsxMjM0fXh5YgorICAgIGFceHsxMjM0fVx4ezQzMjF9eWIgCisgMDogYVx4ezEyMzR9XHh7NDMyMX15YgorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iIAorIDA6IGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MTIzNH1iIAorTm8gbWF0Y2gKKyAgICBhY1xuY2IgCitObyBtYXRjaAorCisvYSguezMsfSliL3V0ZgorICAgIGFceHsxMjM0fXh5YiAKKyAwOiBhXHh7MTIzNH14eWIKKyAgICBhXHh7MTIzNH1ceHs0MzIxfXliIAorIDA6IGFceHsxMjM0fVx4ezQzMjF9eWIKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9YiAKKyAwOiBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9YgorICAgIGF4eHh4YmNkZWZnaGlqYiAKKyAwOiBheHh4eGJjZGVmZ2hpamIKKyAxOiBheHh4eGIKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9XHh7MzQyMX1iIAorIDA6IGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1ceHszNDIxfWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceHsxMjM0fWIgCitObyBtYXRjaAorCisvYSguezMsfT8pYi91dGYKKyAgICBhXHh7MTIzNH14eWIgCisgMDogYVx4ezEyMzR9eHliCisgICAgYVx4ezEyMzR9XHh7NDMyMX15YiAKKyAwOiBhXHh7MTIzNH1ceHs0MzIxfXliCisgICAgYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfWIgCisgMDogYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfWIKKyAgICBheHh4eGJjZGVmZ2hpamIgCisgMDogYXh4eHhiY2RlZmdoaWpiCisgMTogYXh4eHhiCisgICAgYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfVx4ezM0MjF9YiAKKyAwOiBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9XHh7MzQyMX1iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MTIzNH1iIAorTm8gbWF0Y2gKKworL2EoLnszLDV9KWIvdXRmCisgICAgYVx4ezEyMzR9eHliIAorIDA6IGFceHsxMjM0fXh5YgorICAgIGFceHsxMjM0fVx4ezQzMjF9eWIgCisgMDogYVx4ezEyMzR9XHh7NDMyMX15YgorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iIAorIDA6IGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1iCisgICAgYXh4eHhiY2RlZmdoaWpiIAorIDA6IGF4eHh4YgorICAgIGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1ceHszNDIxfWIgCisgMDogYVx4ezEyMzR9XHh7NDMyMX1ceHszNDEyfVx4ezM0MjF9YgorICAgIGF4Ynh4YmNkZWZnaGlqYiAKKyAwOiBheGJ4eGIKKyAgICBheHh4eHhiY2RlZmdoaWpiIAorIDA6IGF4eHh4eGIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceHsxMjM0fWIgCitObyBtYXRjaAorICAgIGF4eHh4eHhiY2RlZmdoaWpiIAorTm8gbWF0Y2gKKworL2EoLnszLDV9PyliL3V0ZgorICAgIGFceHsxMjM0fXh5YiAKKyAwOiBhXHh7MTIzNH14eWIKKyAgICBhXHh7MTIzNH1ceHs0MzIxfXliIAorIDA6IGFceHsxMjM0fVx4ezQzMjF9eWIKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9YiAKKyAwOiBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9YgorICAgIGF4eHh4YmNkZWZnaGlqYiAKKyAwOiBheHh4eGIKKyAgICBhXHh7MTIzNH1ceHs0MzIxfVx4ezM0MTJ9XHh7MzQyMX1iIAorIDA6IGFceHsxMjM0fVx4ezQzMjF9XHh7MzQxMn1ceHszNDIxfWIKKyAgICBheGJ4eGJjZGVmZ2hpamIgCisgMDogYXhieHhiCisgICAgYXh4eHh4YmNkZWZnaGlqYiAKKyAwOiBheHh4eHhiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7MTIzNH1iIAorTm8gbWF0Y2gKKyAgICBheHh4eHh4YmNkZWZnaGlqYiAKK05vIG1hdGNoCisKKy9eW2FceHtjMH1dL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MTAwfQorTm8gbWF0Y2gKKworLyg/PD1hWGIpY2QvdXRmCisgICAgYVhiY2QKKyAwOiBjZAorCisvKD88PWFceHsxMDB9YiljZC91dGYKKyAgICBhXHh7MTAwfWJjZAorIDA6IGNkCisKKy8oPzw9YVx4ezEwMDAwMH1iKWNkL3V0ZgorICAgIGFceHsxMDAwMDB9YmNkCisgMDogY2QKKyAgICAKKy8oPzpceHsxMDB9KXszfWIvdXRmCisgICAgXHh7MTAwfVx4ezEwMH1ceHsxMDB9YgorIDA6IFx4ezEwMH1ceHsxMDB9XHh7MTAwfWIKK1w9IEV4cGVjdCBubyBtYXRjaCAKKyAgICBceHsxMDB9XHh7MTAwfWIKK05vIG1hdGNoCisKKy9ceHthYn0vdXRmCisgICAgXHh7YWJ9IAorIDA6IFx4e2FifQorICAgIFx4YzJceGFiCisgMDogXHh7YWJ9CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgXHgwMHthYn0KK05vIG1hdGNoCisKKy8oPzw9KC4pKVgvdXRmCisgICAgV1hZWgorIDA6IFgKKyAgICBceHsyNTZ9WFlaIAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhZWiAKK05vIG1hdGNoCisKKy9bXmFdKy9nLHV0ZgorICAgIGJjZAorIDA6IGJjZAorICAgIFx4ezEwMH1hWVx4ezI1Nn1aIAorIDA6IFx4ezEwMH0KKyAwOiBZXHh7MjU2fVoKKyAgICAKKy9eW15hXXsyfS91dGYKKyAgICBceHsxMDB9YmMKKyAwOiBceHsxMDB9YgorIAorL15bXmFdezIsfS91dGYKKyAgICBceHsxMDB9YmNBYQorIDA6IFx4ezEwMH1iY0EKKworL15bXmFdezIsfT8vdXRmCisgICAgXHh7MTAwfWJjYQorIDA6IFx4ezEwMH1iYworIDE6IFx4ezEwMH1iCisKKy9bXmFdKy9naSx1dGYKKyAgICBiY2QKKyAwOiBiY2QKKyAgICBceHsxMDB9YVlceHsyNTZ9WiAKKyAwOiBceHsxMDB9CisgMDogWVx4ezI1Nn1aCisgICAgCisvXlteYV17Mn0vaSx1dGYKKyAgICBceHsxMDB9YmMKKyAwOiBceHsxMDB9YgorIAorL15bXmFdezIsfS9pLHV0ZgorICAgIFx4ezEwMH1iY0FhCisgMDogXHh7MTAwfWJjCisKKy9eW15hXXsyLH0/L2ksdXRmCisgICAgXHh7MTAwfWJjYQorIDA6IFx4ezEwMH1iYworIDE6IFx4ezEwMH1iCisKKy9ceHsxMDB9ezAsMH0vdXRmCisgICAgYWJjZAorIDA6IAorIAorL1x4ezEwMH0/L3V0ZgorICAgIGFiY2QKKyAwOiAKKyAgICBceHsxMDB9XHh7MTAwfSAKKyAwOiBceHsxMDB9CisKKy9ceHsxMDB9ezAsM30vdXRmCisgICAgXHh7MTAwfVx4ezEwMH0gCisgMDogXHh7MTAwfVx4ezEwMH0KKyAgICBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9IAorIDA6IFx4ezEwMH1ceHsxMDB9XHh7MTAwfQorICAgIAorL1x4ezEwMH0qL3V0ZgorICAgIGFiY2UKKyAwOiAKKyAgICBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9IAorIDA6IFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKworL1x4ezEwMH17MSwxfS91dGYKKyAgICBhYmNkXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfSAKKyAwOiBceHsxMDB9CisKKy9ceHsxMDB9ezEsM30vdXRmCisgICAgYWJjZFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0gCisgMDogXHh7MTAwfVx4ezEwMH1ceHsxMDB9CisKKy9ceHsxMDB9Ky91dGYKKyAgICBhYmNkXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfSAKKyAwOiBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisKKy9ceHsxMDB9ezN9L3V0ZgorICAgIGFiY2RceHsxMDB9XHh7MTAwfVx4ezEwMH1YWAorIDA6IFx4ezEwMH1ceHsxMDB9XHh7MTAwfQorCisvXHh7MTAwfXszLDV9L3V0ZgorICAgIGFiY2RceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9WFgKKyAwOiBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfQorCisvXHh7MTAwfXszLH0vdXRmLG5vX2F1dG9fcG9zc2VzcworICAgIGFiY2RceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9WFgKKyAwOiBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisgMTogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisgMjogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKyAzOiBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisgNDogXHh7MTAwfVx4ezEwMH1ceHsxMDB9CisKKy8oPzw9YVx4ezEwMH17Mn1iKVgvdXRmCisgICAgWHl5eWFceHsxMDB9XHh7MTAwfWJYenp6CisgMDogWAorCisvXEQqL3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitNYXRjaGVkLCBidXQgb2Zmc2V0cyB2ZWN0b3IgaXMgdG9vIHNtYWxsIHRvIHNob3cgYWxsIG1hdGNoZXMKKyAwOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAxOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDI6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAzOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA0OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDU6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA2OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA3OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDg6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA5OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzEwOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTE6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzEyOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzEzOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTQ6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKworL1xEKi91dGYsbm9fYXV0b19wb3NzZXNzCisgIFx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfQorTWF0Y2hlZCwgYnV0IG9mZnNldHMgdmVjdG9yIGlzIHRvbyBzbWFsbCB0byBzaG93IGFsbCBtYXRjaGVzCisgMDogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisgMTogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKyAyOiBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisgMzogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisgNDogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKyA1OiBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisgNjogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisgNzogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKyA4OiBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisgOTogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisxMDogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKzExOiBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisxMjogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisxMzogXHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH0KKzE0OiBceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9XHh7MTAwfVx4ezEwMH1ceHsxMDB9CisKKy9cRC91dGYKKyAgICAxWDIKKyAwOiBYCisgICAgMVx4ezEwMH0yIAorIDA6IFx4ezEwMH0KKyAgCisvPlxTL3V0ZgorICAgID4gPlggWQorIDA6ID5YCisgICAgPiA+XHh7MTAwfSBZCisgMDogPlx4ezEwMH0KKyAgCisvXGQvdXRmCisgICAgXHh7MTAwfTMKKyAwOiAzCisgICAgCisvXHMvdXRmCisgICAgXHh7MTAwfSBYCisgMDogIAorICAgIAorL1xEKy91dGYKKyAgICAxMmFiY2QzNAorIDA6IGFiY2QKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDEyMzQgIAorTm8gbWF0Y2gKKworL1xEezIsM30vdXRmCisgICAgMTJhYmNkMzQKKyAwOiBhYmMKKyAgICAxMmFiMzQKKyAwOiBhYgorXD0gRXhwZWN0IG5vIG1hdGNoICAKKyAgICAxMjM0CitObyBtYXRjaAorICAgIDEyYTM0ICAKK05vIG1hdGNoCisKKy9cRHsyLDN9Py91dGYKKyAgICAxMmFiY2QzNAorIDA6IGFiYworIDE6IGFiCisgICAgMTJhYjM0CisgMDogYWIKK1w9IEV4cGVjdCBubyBtYXRjaCAgCisgICAgMTIzNAorTm8gbWF0Y2gKKyAgICAxMmEzNCAgCitObyBtYXRjaAorCisvXGQrL3V0ZgorICAgIDEyYWJjZDM0CisgMDogMTIKKworL1xkezIsM30vdXRmCisgICAgMTJhYmNkMzQKKyAwOiAxMgorICAgIDEyMzRhYmNkCisgMDogMTIzCitcPSBFeHBlY3Qgbm8gbWF0Y2ggIAorICAgIDEuNCAKK05vIG1hdGNoCisKKy9cZHsyLDN9Py91dGYKKyAgICAxMmFiY2QzNAorIDA6IDEyCisgICAgMTIzNGFiY2QKKyAwOiAxMjMKKyAxOiAxMgorXD0gRXhwZWN0IG5vIG1hdGNoICAKKyAgICAxLjQgCitObyBtYXRjaAorCisvXFMrL3V0ZgorICAgIDEyYWJjZDM0CisgMDogMTJhYmNkMzQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFwgICAgXCAKK05vIG1hdGNoCisKKy9cU3syLDN9L3V0ZgorICAgIDEyYWJjZDM0CisgMDogMTJhCisgICAgMTIzNGFiY2QKKyAwOiAxMjMKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFwgICAgIFwgIAorTm8gbWF0Y2gKKworL1xTezIsM30/L3V0ZgorICAgIDEyYWJjZDM0CisgMDogMTJhCisgMTogMTIKKyAgICAxMjM0YWJjZAorIDA6IDEyMworIDE6IDEyCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBcICAgICBcICAKK05vIG1hdGNoCisKKy8+XHMrPC91dGYKKyAgICAxMj4gICAgICA8MzQKKyAwOiA+ICAgICAgPAorCisvPlxzezIsM308L3V0ZgorICAgIGFiPiAgPGNkCisgMDogPiAgPAorICAgIGFiPiAgIDxjZQorIDA6ID4gICA8CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYj4gICAgPGNkIAorTm8gbWF0Y2gKKworLz5cc3syLDN9PzwvdXRmCisgICAgYWI+ICA8Y2QKKyAwOiA+ICA8CisgICAgYWI+ICAgPGNlCisgMDogPiAgIDwKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiPiAgICA8Y2QgCitObyBtYXRjaAorCisvXHcrL3V0ZgorICAgIDEyICAgICAgMzQKKyAwOiAxMgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgKysrPSohIAorTm8gbWF0Y2gKKworL1x3ezIsM30vdXRmCisgICAgYWIgIGNkCisgMDogYWIKKyAgICBhYmNkIGNlCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhLmIuYworTm8gbWF0Y2gKKworL1x3ezIsM30/L3V0ZgorICAgIGFiICBjZAorIDA6IGFiCisgICAgYWJjZCBjZQorIDA6IGFiYworIDE6IGFiCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhLmIuYworTm8gbWF0Y2gKKworL1xXKy91dGYKKyAgICAxMj09PT0zNAorIDA6ID09PT0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY2QgCitObyBtYXRjaAorCisvXFd7MiwzfS91dGYKKyAgICBhYj09PT1jZAorIDA6ID09PQorICAgIGFiPT1jZAorIDA6ID09CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhLmIuYworTm8gbWF0Y2gKKworL1xXezIsM30/L3V0ZgorICAgIGFiPT09PWNkCisgMDogPT09CisgMTogPT0KKyAgICBhYj09Y2QKKyAwOiA9PQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYS5iLmMKK05vIG1hdGNoCisKKy9bXHh7MTAwfV0vdXRmCisgICAgXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBaXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBceHsxMDB9WgorIDA6IFx4ezEwMH0KKworL1taXHh7MTAwfV0vdXRmCisgICAgWlx4ezEwMH0KKyAwOiBaCisgICAgXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBceHsxMDB9WgorIDA6IFx4ezEwMH0KKworL1tceHsxMDB9XHh7MjAwfV0vdXRmCisgICBhYlx4ezEwMH1jZAorIDA6IFx4ezEwMH0KKyAgIGFiXHh7MjAwfWNkCisgMDogXHh7MjAwfQorCisvW1x4ezEwMH0tXHh7MjAwfV0vdXRmCisgICBhYlx4ezEwMH1jZAorIDA6IFx4ezEwMH0KKyAgIGFiXHh7MjAwfWNkCisgMDogXHh7MjAwfQorICAgYWJceHsxMTF9Y2QgCisgMDogXHh7MTExfQorCisvW3otXHh7MjAwfV0vdXRmCisgICBhYlx4ezEwMH1jZAorIDA6IFx4ezEwMH0KKyAgIGFiXHh7MjAwfWNkCisgMDogXHh7MjAwfQorICAgYWJceHsxMTF9Y2QgCisgMDogXHh7MTExfQorICAgYWJ6Y2QKKyAwOiB6CisgICBhYnxjZCAgCisgMDogfAorCisvW1FceHsxMDB9XHh7MjAwfV0vdXRmCisgICBhYlx4ezEwMH1jZAorIDA6IFx4ezEwMH0KKyAgIGFiXHh7MjAwfWNkCisgMDogXHh7MjAwfQorICAgUT8gCisgMDogUQorCisvW1FceHsxMDB9LVx4ezIwMH1dL3V0ZgorICAgYWJceHsxMDB9Y2QKKyAwOiBceHsxMDB9CisgICBhYlx4ezIwMH1jZAorIDA6IFx4ezIwMH0KKyAgIGFiXHh7MTExfWNkIAorIDA6IFx4ezExMX0KKyAgIFE/IAorIDA6IFEKKworL1tRei1ceHsyMDB9XS91dGYKKyAgIGFiXHh7MTAwfWNkCisgMDogXHh7MTAwfQorICAgYWJceHsyMDB9Y2QKKyAwOiBceHsyMDB9CisgICBhYlx4ezExMX1jZCAKKyAwOiBceHsxMTF9CisgICBhYnpjZAorIDA6IHoKKyAgIGFifGNkICAKKyAwOiB8CisgICBRPyAKKyAwOiBRCisKKy9bXHh7MTAwfVx4ezIwMH1dezEsM30vdXRmCisgICBhYlx4ezEwMH1jZAorIDA6IFx4ezEwMH0KKyAgIGFiXHh7MjAwfWNkCisgMDogXHh7MjAwfQorICAgYWJceHsyMDB9XHh7MTAwfVx4ezIwMH1ceHsxMDB9Y2QKKyAwOiBceHsyMDB9XHh7MTAwfVx4ezIwMH0KKworL1tceHsxMDB9XHh7MjAwfV17MSwzfT8vdXRmCisgICBhYlx4ezEwMH1jZAorIDA6IFx4ezEwMH0KKyAgIGFiXHh7MjAwfWNkCisgMDogXHh7MjAwfQorICAgYWJceHsyMDB9XHh7MTAwfVx4ezIwMH1ceHsxMDB9Y2QKKyAwOiBceHsyMDB9XHh7MTAwfVx4ezIwMH0KKyAxOiBceHsyMDB9XHh7MTAwfQorIDI6IFx4ezIwMH0KKworL1tRXHh7MTAwfVx4ezIwMH1dezEsM30vdXRmCisgICBhYlx4ezEwMH1jZAorIDA6IFx4ezEwMH0KKyAgIGFiXHh7MjAwfWNkCisgMDogXHh7MjAwfQorICAgYWJceHsyMDB9XHh7MTAwfVx4ezIwMH1ceHsxMDB9Y2QKKyAwOiBceHsyMDB9XHh7MTAwfVx4ezIwMH0KKworL1tRXHh7MTAwfVx4ezIwMH1dezEsM30/L3V0ZgorICAgYWJceHsxMDB9Y2QKKyAwOiBceHsxMDB9CisgICBhYlx4ezIwMH1jZAorIDA6IFx4ezIwMH0KKyAgIGFiXHh7MjAwfVx4ezEwMH1ceHsyMDB9XHh7MTAwfWNkCisgMDogXHh7MjAwfVx4ezEwMH1ceHsyMDB9CisgMTogXHh7MjAwfVx4ezEwMH0KKyAyOiBceHsyMDB9CisKKy8oPzw9W1x4ezEwMH1ceHsyMDB9XSlYL3V0ZgorICAgIGFiY1x4ezIwMH1YCisgMDogWAorICAgIGFiY1x4ezEwMH1YIAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFggIAorTm8gbWF0Y2gKKworLyg/PD1bUVx4ezEwMH1ceHsyMDB9XSlYL3V0ZgorICAgIGFiY1x4ezIwMH1YCisgMDogWAorICAgIGFiY1x4ezEwMH1YIAorIDA6IFgKKyAgICBhYlFYIAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFggIAorTm8gbWF0Y2gKKworLyg/PD1bXHh7MTAwfVx4ezIwMH1dezN9KVgvdXRmCisgICAgYWJjXHh7MTAwfVx4ezIwMH1ceHsxMDB9WAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiY1x4ezIwMH1YCitObyBtYXRjaAorICAgIFggIAorTm8gbWF0Y2gKKworL1teXHh7MTAwfVx4ezIwMH1dWC91dGYKKyAgICBBWAorIDA6IEFYCisgICAgXHh7MTUwfVgKKyAwOiBceHsxNTB9WAorICAgIFx4ezUwMH1YIAorIDA6IFx4ezUwMH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDB9WAorTm8gbWF0Y2gKKyAgICBceHsyMDB9WCAgIAorTm8gbWF0Y2gKKworL1teUVx4ezEwMH1ceHsyMDB9XVgvdXRmCisgICAgQVgKKyAwOiBBWAorICAgIFx4ezE1MH1YCisgMDogXHh7MTUwfVgKKyAgICBceHs1MDB9WCAKKyAwOiBceHs1MDB9WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MTAwfVgKK05vIG1hdGNoCisgICAgXHh7MjAwfVggICAKK05vIG1hdGNoCisgICAgUVggCitObyBtYXRjaAorCisvW15ceHsxMDB9LVx4ezIwMH1dWC91dGYKKyAgICBBWAorIDA6IEFYCisgICAgXHh7NTAwfVggCisgMDogXHh7NTAwfVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezEwMH1YCitObyBtYXRjaAorICAgIFx4ezE1MH1YCitObyBtYXRjaAorICAgIFx4ezIwMH1YICAgCitObyBtYXRjaAorCisvW3otXHh7MTAwfV0vaSx1dGYKKyAgICB6CisgMDogegorICAgIFogCisgMDogWgorICAgIFx4ezEwMH0KKyAwOiBceHsxMDB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDJ9CitObyBtYXRjaAorICAgIHkgICAgCitObyBtYXRjaAorCisvW1x4RkZdLworICAgID5ceGZmPAorIDA6IFx4ZmYKKworL1tceGZmXS91dGYKKyAgICA+XHh7ZmZ9PAorIDA6IFx4e2ZmfQorCisvW15ceEZGXS8KKyAgICBYWVoKKyAwOiBYCisKKy9bXlx4ZmZdL3V0ZgorICAgIFhZWgorIDA6IFgKKyAgICBceHsxMjN9IAorIDA6IFx4ezEyM30KKworL15bYWNdKmIvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4YgorTm8gbWF0Y2gKKworL15bYWNceHsxMDB9XSpiL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgeGIKK05vIG1hdGNoCisKKy9eW154XSpiL2ksdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4YgorTm8gbWF0Y2gKKworL15bXnhdKmIvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4YgorTm8gbWF0Y2gKKyAgCisvXlxkKmIvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICB4YiAKK05vIG1hdGNoCisKKy8ofGEpL2csdXRmCisgICAgY2F0YWMKKyAwOiAKKyAwOiBhCisgMTogCisgMDogCisgMDogYQorIDE6IAorIDA6IAorIDA6IAorICAgIGFceHsyNTZ9YSAKKyAwOiBhCisgMTogCisgMDogCisgMDogYQorIDE6IAorIDA6IAorCisvXlx4ezg1fSQvaSx1dGYKKyAgICBceHs4NX0KKyAwOiBceHs4NX0KKworL15hYmMuL2dteCxuZXdsaW5lPWFueSx1dGYKKyAgICBhYmMxIFx4MGFhYmMyIFx4MGJhYmMzeHggXHgwY2FiYzQgXHgwZGFiYzV4eCBceDBkXHgwYWFiYzYgXHh7MDA4NX1hYmM3IFx4ezIwMjh9YWJjOCBceHsyMDI5fWFiYzkgSlVOSworIDA6IGFiYzEKKyAwOiBhYmMyCisgMDogYWJjMworIDA6IGFiYzQKKyAwOiBhYmM1CisgMDogYWJjNgorIDA6IGFiYzcKKyAwOiBhYmM4CisgMDogYWJjOQorCisvYWJjLiQvZ214LG5ld2xpbmU9YW55LHV0ZgorICAgIGFiYzFceDBhIGFiYzJceDBiIGFiYzNceDBjIGFiYzRceDBkIGFiYzVceDBkXHgwYSBhYmM2XHh7MDA4NX0gYWJjN1x4ezIwMjh9IGFiYzhceHsyMDI5fSBhYmM5CisgMDogYWJjMQorIDA6IGFiYzIKKyAwOiBhYmMzCisgMDogYWJjNAorIDA6IGFiYzUKKyAwOiBhYmM2CisgMDogYWJjNworIDA6IGFiYzgKKyAwOiBhYmM5CisKKy9eYVxSYi9ic3I9dW5pY29kZSx1dGYKKyAgICBhXG5iCisgMDogYVx4ezBhfWIKKyAgICBhXHJiCisgMDogYVx4ezBkfWIKKyAgICBhXHJcbmIKKyAwOiBhXHh7MGR9XHh7MGF9YgorICAgIGFceDBiYgorIDA6IGFceHswYn1iCisgICAgYVx4MGNiCisgMDogYVx4ezBjfWIKKyAgICBhXHh7ODV9YiAgIAorIDA6IGFceHs4NX1iCisgICAgYVx4ezIwMjh9YiAKKyAwOiBhXHh7MjAyOH1iCisgICAgYVx4ezIwMjl9YiAKKyAwOiBhXHh7MjAyOX1iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXG5ccmIgICAgCitObyBtYXRjaAorCisvXmFcUipiL2Jzcj11bmljb2RlLHV0ZgorICAgIGFiCisgMDogYWIKKyAgICBhXG5iCisgMDogYVx4ezBhfWIKKyAgICBhXHJiCisgMDogYVx4ezBkfWIKKyAgICBhXHJcbmIKKyAwOiBhXHh7MGR9XHh7MGF9YgorICAgIGFceDBiYgorIDA6IGFceHswYn1iCisgICAgYVx4MGNceHsyMDI4fVx4ezIwMjl9YgorIDA6IGFceHswY31ceHsyMDI4fVx4ezIwMjl9YgorICAgIGFceHs4NX1iICAgCisgMDogYVx4ezg1fWIKKyAgICBhXG5ccmIgICAgCisgMDogYVx4ezBhfVx4ezBkfWIKKyAgICBhXG5cclx4ezg1fVx4MGNiIAorIDA6IGFceHswYX1ceHswZH1ceHs4NX1ceHswY31iCisKKy9eYVxSK2IvYnNyPXVuaWNvZGUsdXRmCisgICAgYVxuYgorIDA6IGFceHswYX1iCisgICAgYVxyYgorIDA6IGFceHswZH1iCisgICAgYVxyXG5iCisgMDogYVx4ezBkfVx4ezBhfWIKKyAgICBhXHgwYmIKKyAwOiBhXHh7MGJ9YgorICAgIGFceDBjXHh7MjAyOH1ceHsyMDI5fWIKKyAwOiBhXHh7MGN9XHh7MjAyOH1ceHsyMDI5fWIKKyAgICBhXHh7ODV9YiAgIAorIDA6IGFceHs4NX1iCisgICAgYVxuXHJiICAgIAorIDA6IGFceHswYX1ceHswZH1iCisgICAgYVxuXHJceHs4NX1ceDBjYiAKKyAwOiBhXHh7MGF9XHh7MGR9XHh7ODV9XHh7MGN9YgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWIgIAorTm8gbWF0Y2gKKworL15hXFJ7MSwzfWIvYnNyPXVuaWNvZGUsdXRmCisgICAgYVxuYgorIDA6IGFceHswYX1iCisgICAgYVxuXHJiCisgMDogYVx4ezBhfVx4ezBkfWIKKyAgICBhXG5cclx4ezg1fWIKKyAwOiBhXHh7MGF9XHh7MGR9XHh7ODV9YgorICAgIGFcclxuXHJcbmIgCisgMDogYVx4ezBkfVx4ezBhfVx4ezBkfVx4ezBhfWIKKyAgICBhXHJcblxyXG5cclxuYiAKKyAwOiBhXHh7MGR9XHh7MGF9XHh7MGR9XHh7MGF9XHh7MGR9XHh7MGF9YgorICAgIGFcblxyXG5ccmIKKyAwOiBhXHh7MGF9XHh7MGR9XHh7MGF9XHh7MGR9YgorICAgIGFcblxuXHJcbmIgCisgMDogYVx4ezBhfVx4ezBhfVx4ezBkfVx4ezBhfWIKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFcblxuXG5ccmIKK05vIG1hdGNoCisgICAgYVxyCitObyBtYXRjaAorCisvXGgrXFY/XHZ7Myw0fS91dGYsbm9fYXV0b19wb3NzZXNzCisgICAgXHgwOVx4MjBceHthMH1YXHgwYVx4MGJceDBjXHgwZFx4MGEKKyAwOiBceHswOX0gXHh7YTB9WFx4ezBhfVx4ezBifVx4ezBjfVx4ezBkfQorIDE6IFx4ezA5fSBceHthMH1YXHh7MGF9XHh7MGJ9XHh7MGN9CisKKy9cVj9cdnszLDR9L3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICBceDIwXHh7YTB9WFx4MGFceDBiXHgwY1x4MGRceDBhCisgMDogWFx4ezBhfVx4ezBifVx4ezBjfVx4ezBkfQorIDE6IFhceHswYX1ceHswYn1ceHswY30KKworL1xoK1xWP1x2ezMsNH0vdXRmLG5vX2F1dG9fcG9zc2VzcworICAgID5ceDA5XHgyMFx4e2EwfVhceDBhXHgwYVx4MGE8CisgMDogXHh7MDl9IFx4e2EwfVhceHswYX1ceHswYX1ceHswYX0KKworL1xWP1x2ezMsNH0vdXRmLG5vX2F1dG9fcG9zc2VzcworICAgID5ceDA5XHgyMFx4e2EwfVhceDBhXHgwYVx4MGE8CisgMDogWFx4ezBhfVx4ezBhfVx4ezBhfQorCisvXEhcaFxWXHYvdXRmCisgICAgWCBYXHgwYQorIDA6IFggWFx4ezBhfQorICAgIFhceDA5WFx4MGIKKyAwOiBYXHh7MDl9WFx4ezBifQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7YTB9IFhceDBhICAgCitObyBtYXRjaAorICAgIAorL1xIKlxoK1xWP1x2ezMsNH0vdXRmLG5vX2F1dG9fcG9zc2VzcworICAgIFx4MDlceDIwXHh7YTB9WFx4MGFceDBiXHgwY1x4MGRceDBhCisgMDogXHh7MDl9IFx4e2EwfVhceHswYX1ceHswYn1ceHswY31ceHswZH0KKyAxOiBceHswOX0gXHh7YTB9WFx4ezBhfVx4ezBifVx4ezBjfQorICAgIFx4MDlceDIwXHh7YTB9XHgwYVx4MGJceDBjXHgwZFx4MGEKKyAwOiBceHswOX0gXHh7YTB9XHh7MGF9XHh7MGJ9XHh7MGN9XHh7MGR9CisgMTogXHh7MDl9IFx4e2EwfVx4ezBhfVx4ezBifVx4ezBjfQorICAgIFx4MDlceDIwXHh7YTB9XHgwYVx4MGJceDBjCisgMDogXHh7MDl9IFx4e2EwfVx4ezBhfVx4ezBifVx4ezBjfQorXD0gRXhwZWN0IG5vIG1hdGNoIAorICAgIFx4MDlceDIwXHh7YTB9XHgwYVx4MGIKK05vIG1hdGNoCisgICAgIAorL1xIXGhcVlx2L3V0ZgorICAgIFx4ezMwMDF9XHh7MzAwMH1ceHsyMDMwfVx4ezIwMjh9CisgMDogXHh7MzAwMX1ceHszMDAwfVx4ezIwMzB9XHh7MjAyOH0KKyAgICBYXHh7MTgwZX1YXHh7ODV9CisgMDogWFx4ezE4MGV9WFx4ezg1fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MjAwOX0gWFx4MGEgICAKK05vIG1hdGNoCisgICAgCisvXEgqXGgrXFY/XHZ7Myw0fS91dGYsbm9fYXV0b19wb3NzZXNzCisgICAgXHh7MTY4MH1ceHsxODBlfVx4ezIwMDd9WFx4ezIwMjh9XHh7MjAyOX1ceDBjXHgwZFx4MGEKKyAwOiBceHsxNjgwfVx4ezE4MGV9XHh7MjAwN31YXHh7MjAyOH1ceHsyMDI5fVx4ezBjfVx4ezBkfQorIDE6IFx4ezE2ODB9XHh7MTgwZX1ceHsyMDA3fVhceHsyMDI4fVx4ezIwMjl9XHh7MGN9CisgICAgXHgwOVx4ezIwNWZ9XHh7YTB9XHgwYVx4ezIwMjl9XHgwY1x4ezIwMjh9XHgwYQorIDA6IFx4ezA5fVx4ezIwNWZ9XHh7YTB9XHh7MGF9XHh7MjAyOX1ceHswY31ceHsyMDI4fQorIDE6IFx4ezA5fVx4ezIwNWZ9XHh7YTB9XHh7MGF9XHh7MjAyOX1ceHswY30KKyAgICBceDA5XHgyMFx4ezIwMmZ9XHgwYVx4MGJceDBjCisgMDogXHh7MDl9IFx4ezIwMmZ9XHh7MGF9XHh7MGJ9XHh7MGN9CitcPSBFeHBlY3Qgbm8gbWF0Y2ggCisgICAgXHgwOVx4ezIwMGF9XHh7YTB9XHh7MjAyOH1ceDBiCitObyBtYXRjaAorICAgICAKKy9hXFJiL0ksYnNyPWFueWNybGYsdXRmCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorXFIgbWF0Y2hlcyBDUiwgTEYsIG9yIENSTEYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGFccmIKKyAwOiBhXHh7MGR9YgorICAgIGFcbmIKKyAwOiBhXHh7MGF9YgorICAgIGFcclxuYgorIDA6IGFceHswZH1ceHswYX1iCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhXHh7ODV9YgorTm8gbWF0Y2gKKyAgICBhXHgwYmIgICAgIAorTm8gbWF0Y2gKKworL2FcUmIvSSxic3I9dW5pY29kZSx1dGYKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitcUiBtYXRjaGVzIGFueSBVbmljb2RlIG5ld2xpbmUKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworTGFzdCBjb2RlIHVuaXQgPSAnYicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworICAgIGFccmIKKyAwOiBhXHh7MGR9YgorICAgIGFcbmIKKyAwOiBhXHh7MGF9YgorICAgIGFcclxuYgorIDA6IGFceHswZH1ceHswYX1iCisgICAgYVx4ezg1fWIKKyAwOiBhXHh7ODV9YgorICAgIGFceDBiYiAgICAgCisgMDogYVx4ezBifWIKKyAgICAKKy9hXFI/Yi9JLGJzcj1hbnljcmxmLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1xSIG1hdGNoZXMgQ1IsIExGLCBvciBDUkxGCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK0xhc3QgY29kZSB1bml0ID0gJ2InCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDIKKyAgICBhXHJiCisgMDogYVx4ezBkfWIKKyAgICBhXG5iCisgMDogYVx4ezBhfWIKKyAgICBhXHJcbmIKKyAwOiBhXHh7MGR9XHh7MGF9YgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYVx4ezg1fWIKK05vIG1hdGNoCisgICAgYVx4MGJiICAgICAKK05vIG1hdGNoCisKKy9hXFI/Yi9JLGJzcj11bmljb2RlLHV0ZgorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK1xSIG1hdGNoZXMgYW55IFVuaWNvZGUgbmV3bGluZQorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitMYXN0IGNvZGUgdW5pdCA9ICdiJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAyCisgICAgYVxyYgorIDA6IGFceHswZH1iCisgICAgYVxuYgorIDA6IGFceHswYX1iCisgICAgYVxyXG5iCisgMDogYVx4ezBkfVx4ezBhfWIKKyAgICBhXHh7ODV9YgorIDA6IGFceHs4NX1iCisgICAgYVx4MGJiICAgICAKKyAwOiBhXHh7MGJ9YgorIAorL1gvbmV3bGluZT1hbnksdXRmLGZpcnN0bGluZQorICAgIEFceHsxZWM1fUFCQ1hZWgorIDA6IFgKKworL2FiY2QqL3V0ZgorICAgIHh4eHhhYmNkXD1wcworIDA6IGFiY2QKKyAgICB4eHh4YWJjZFw9cGgKK1BhcnRpYWwgbWF0Y2g6IGFiY2QKKworL2FiY2QqL2ksdXRmCisgICAgeHh4eGFiY2RcPXBzCisgMDogYWJjZAorICAgIHh4eHhhYmNkXD1waAorUGFydGlhbCBtYXRjaDogYWJjZAorICAgIFhYWFhBQkNEXD1wcworIDA6IEFCQ0QKKyAgICBYWFhYQUJDRFw9cGgKK1BhcnRpYWwgbWF0Y2g6IEFCQ0QKKworL2FiY1xkKi91dGYKKyAgICB4eHh4YWJjMVw9cHMKKyAwOiBhYmMxCisgICAgeHh4eGFiYzFcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmMxCisKKy9hYmNbZGVdKi91dGYKKyAgICB4eHh4YWJjZGVcPXBzCisgMDogYWJjZGUKKyAgICB4eHh4YWJjZGVcPXBoCitQYXJ0aWFsIG1hdGNoOiBhYmNkZQorCisvXGJ0aGUgY2F0XGIvdXRmCisgICAgdGhlIGNhdFw9cHMKKyAwOiB0aGUgY2F0CisgICAgdGhlIGNhdFw9cGgKK1BhcnRpYWwgbWF0Y2g6IHRoZSBjYXQKKworLy4vbmV3bGluZT1jcmxmLHV0ZgorICAgIFxyXD1wcworIDA6IFx4ezBkfQorICAgIFxyXD1waAorUGFydGlhbCBtYXRjaDogXHh7MGR9CisgIAorLy57MiwzfS9uZXdsaW5lPWNybGYsdXRmCisgICAgXHJcPXBzCitQYXJ0aWFsIG1hdGNoOiBceHswZH0KKyAgICBcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4ezBkfQorICAgIFxyXHJcPXBzCisgMDogXHh7MGR9XHh7MGR9CisgICAgXHJcclw9cGgKK1BhcnRpYWwgbWF0Y2g6IFx4ezBkfVx4ezBkfQorICAgIFxyXHJcclw9cHMKKyAwOiBceHswZH1ceHswZH1ceHswZH0KKyAgICBcclxyXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceHswZH1ceHswZH1ceHswZH0KKworLy57MiwzfT8vbmV3bGluZT1jcmxmLHV0ZgorICAgIFxyXD1wcworUGFydGlhbCBtYXRjaDogXHh7MGR9CisgICAgXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceHswZH0KKyAgICBcclxyXD1wcworIDA6IFx4ezBkfVx4ezBkfQorICAgIFxyXHJcPXBoCitQYXJ0aWFsIG1hdGNoOiBceHswZH1ceHswZH0KKyAgICBcclxyXHJcPXBzCisgMDogXHh7MGR9XHh7MGR9XHh7MGR9CisgMTogXHh7MGR9XHh7MGR9CisgICAgXHJcclxyXD1waAorUGFydGlhbCBtYXRjaDogXHh7MGR9XHh7MGR9XHh7MGR9CisKKy9bXlx4ezEwMH1dL3V0ZgorICAgIFx4ezEwMH1ceHsxMDF9WAorIDA6IFx4ezEwMX0KKworL1teXHh7MTAwfV0rL3V0ZgorICAgIFx4ezEwMH1ceHsxMDF9WAorIDA6IFx4ezEwMX1YCisKKy9ccExcUHtOZH0vdXRmCisgICAgQUIKKyAwOiBBQgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQTAKK05vIG1hdGNoCisgICAgMDAKK05vIG1hdGNoCisKKy9cWC4vdXRmCisgICAgQUIKKyAwOiBBQgorICAgIEFceHszMDB9QkMKKyAwOiBBXHh7MzAwfUIKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkMKKyAwOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MzAwfQorTm8gbWF0Y2gKKworL1xYXFgvdXRmCisgICAgQUJDCisgMDogQUIKKyAgICBBXHh7MzAwfUJceHszMDB9XHh7MzAxfUMKKyAwOiBBXHh7MzAwfUJceHszMDB9XHh7MzAxfQorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQworIDA6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHszMDB9CitObyBtYXRjaAorCisvXlxwTCsvdXRmCisgICAgYWJjZAorIDA6IGFiY2QKKyAgICBhCisgMDogYQorCisvXlxQTCsvdXRmCisgICAgMTIzNAorIDA6IDEyMzQKKyAgICA9CisgMDogPQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYWJjZAorTm8gbWF0Y2gKKworL15cWCsvdXRmCisgICAgYWJjZEFceHszMDB9XHh7MzAxfVx4ezMwMn0KKyAwOiBhYmNkQVx4ezMwMH1ceHszMDF9XHh7MzAyfQorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn0KKyAwOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9CisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUFceHszMDB9XHh7MzAxfVx4ezMwMn0KKyAwOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QVx4ezMwMH1ceHszMDF9XHh7MzAyfQorICAgIGEKKyAwOiBhCisgICAgXHh7MzAwfVx4ezMwMX1ceHszMDJ9CisgMDogXHh7MzAwfVx4ezMwMX1ceHszMDJ9CisKKy9cWD9hYmMvdXRmCisgICAgYWJjCisgMDogYWJjCisgICAgQVx4ezMwMH1hYmMKKyAwOiBBXHh7MzAwfWFiYworICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1BXHh7MzAwfUFceHszMDB9QVx4ezMwMH1hYmN4eXoKKyAwOiBBXHh7MzAwfWFiYworICAgIFx4ezMwMH1hYmMKKyAwOiBceHszMDB9YWJjCisKKy9eXFg/YWJjL3V0ZgorICAgIGFiYworIDA6IGFiYworICAgIEFceHszMDB9YWJjCisgMDogQVx4ezMwMH1hYmMKKyAgICBceHszMDB9YWJjCisgMDogXHh7MzAwfWFiYworXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUFceHszMDB9QVx4ezMwMH1BXHh7MzAwfWFiY3h5egorTm8gbWF0Y2gKKworL1xYKmFiYy91dGYKKyAgICBhYmMKKyAwOiBhYmMKKyAgICBBXHh7MzAwfWFiYworIDA6IEFceHszMDB9YWJjCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUFceHszMDB9QVx4ezMwMH1BXHh7MzAwfWFiY3h5egorIDA6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1BXHh7MzAwfUFceHszMDB9QVx4ezMwMH1hYmMKKyAgICBceHszMDB9YWJjCisgMDogXHh7MzAwfWFiYworCisvXlxYKmFiYy91dGYKKyAgICBhYmMKKyAwOiBhYmMKKyAgICBBXHh7MzAwfWFiYworIDA6IEFceHszMDB9YWJjCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUFceHszMDB9QVx4ezMwMH1BXHh7MzAwfWFiY3h5egorIDA6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1BXHh7MzAwfUFceHszMDB9QVx4ezMwMH1hYmMKKyAgICBceHszMDB9YWJjCisgMDogXHh7MzAwfWFiYworCisvXlxwTD89Li91dGYKKyAgICBBPWIKKyAwOiBBPWIKKyAgICA9YworIDA6ID1jCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxPTIKK05vIG1hdGNoCisgICAgQUFBQT1iCitObyBtYXRjaAorCisvXlxwTCo9Li91dGYKKyAgICBBQUFBPWIKKyAwOiBBQUFBPWIKKyAgICA9YworIDA6ID1jCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxPTIKK05vIG1hdGNoCisKKy9eXFh7MiwzfVgvdXRmCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUFceHszMDB9XHh7MzAxfVx4ezMwMn1YCisgMDogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUFceHszMDB9XHh7MzAxfVx4ezMwMn1YCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUFceHszMDB9XHh7MzAxfVx4ezMwMn1BXHh7MzAwfVx4ezMwMX1ceHszMDJ9WAorIDA6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1BXHh7MzAwfVx4ezMwMX1ceHszMDJ9QVx4ezMwMH1ceHszMDF9XHh7MzAyfVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfVgKK05vIG1hdGNoCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUFceHszMDB9XHh7MzAxfVx4ezMwMn1BXHh7MzAwfVx4ezMwMX1ceHszMDJ9QVx4ezMwMH1ceHszMDF9XHh7MzAyfVgKK05vIG1hdGNoCisKKy9eXHBDXHBMXHBNXHBOXHBQXHBTXHBaPC91dGYKKyAgICBceDdmXHh7YzB9XHh7MzBmfVx4ezY2MH1ceHs2NmN9XHh7ZjAxfVx4ezE2ODB9PAorIDA6IFx4ezdmfVx4e2MwfVx4ezMwZn1ceHs2NjB9XHh7NjZjfVx4e2YwMX1ceHsxNjgwfTwKKyAgICBcbnBceHszMDB9OSFcJCA8CisgMDogXHh7MGF9cFx4ezMwMH05ISQgPAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYXBceHszMDB9OSFcJCA8CitObyBtYXRjaAorICAKKy9eXFBDL3V0ZgorICAgIFgKKyAwOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceDdmCitObyBtYXRjaAorICAKKy9eXFBML3V0ZgorICAgIDkKKyAwOiA5CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHtjMH0KK05vIG1hdGNoCisgIAorL15cUE0vdXRmCisgICAgWAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezMwZn0KK05vIG1hdGNoCisgIAorL15cUE4vdXRmCisgICAgWAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezY2MH0KK05vIG1hdGNoCisgIAorL15cUFAvdXRmCisgICAgWAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezY2Y30KK05vIG1hdGNoCisgIAorL15cUFMvdXRmCisgICAgWAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4e2YwMX0KK05vIG1hdGNoCisgIAorL15cUFovdXRmCisgICAgWAorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezE2ODB9CitObyBtYXRjaAorICAgIAorL15ccHtDY30vdXRmCisgICAgXHh7MDE3fQorIDA6IFx4ezE3fQorICAgIFx4ezA5Zn0KKyAwOiBceHs5Zn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezA2MDB9CitObyBtYXRjaAorICAKKy9eXHB7Q2Z9L3V0ZgorICAgIFx4ezYwMX0KKyAwOiBceHs2MDF9CisgICAgXHh7MTgwZX0KKyAwOiBceHsxODBlfQorICAgIFx4ezA2MWN9CisgMDogXHh7NjFjfQorICAgIFx4ezIwNjZ9CisgMDogXHh7MjA2Nn0KKyAgICBceHsyMDY3fQorIDA6IFx4ezIwNjd9CisgICAgXHh7MjA2OH0KKyAwOiBceHsyMDY4fQorICAgIFx4ezIwNjl9CisgMDogXHh7MjA2OX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezA5Zn0KK05vIG1hdGNoCisgIAorL15ccHtDbn0vdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHswOWZ9CitObyBtYXRjaAorICAKKy9eXHB7Q299L3V0ZgorICAgIFx4e2Y4ZmZ9CisgMDogXHh7ZjhmZn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezA5Zn0KK05vIG1hdGNoCisgIAorL15ccHtDc30vdXRmCisgICAgXHh7ZGZmZn1cPW5vX3V0Zl9jaGVjaworIDA6IFx4e2RmZmZ9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHswOWZ9CitObyBtYXRjaAorICAKKy9eXHB7TGx9L3V0ZgorICAgIGEKKyAwOiBhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBaCitObyBtYXRjaAorICAgIFx4e2UwMDB9CitObyBtYXRjaAorICAKKy9eXHB7TG19L3V0ZgorICAgIFx4ezJiMH0KKyAwOiBceHsyYjB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCitObyBtYXRjaAorICAKKy9eXHB7TG99L3V0ZgorICAgIFx4ezFiYn0KKyAwOiBceHsxYmJ9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhCitObyBtYXRjaAorICAgIFx4ezJiMH0KK05vIG1hdGNoCisgIAorL15ccHtMdH0vdXRmCisgICAgXHh7MWM1fQorIDA6IFx4ezFjNX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGEKK05vIG1hdGNoCisgICAgXHh7MmIwfQorTm8gbWF0Y2gKKyAgCisvXlxwe0x1fS91dGYKKyAgICBBCisgMDogQQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7MmIwfQorTm8gbWF0Y2gKKyAgCisvXlxwe01jfS91dGYKKyAgICBceHs5MDN9CisgMDogXHh7OTAzfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHszMDB9CitObyBtYXRjaAorICAgICAgIAorL15ccHtNZX0vdXRmCisgICAgXHh7NDg4fQorIDA6IFx4ezQ4OH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgXHh7OTAzfQorTm8gbWF0Y2gKKyAgICBceHszMDB9CitObyBtYXRjaAorICAKKy9eXHB7TW59L3V0ZgorICAgIFx4ezMwMH0KKyAwOiBceHszMDB9CisgICAgXHh7MWExYn0KKyAwOiBceHsxYTFifQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHs5MDN9CitObyBtYXRjaAorICAKKy9eXHB7TmR9Ky91dGYsbm9fYXV0b19wb3NzZXNzCisgICAgMDEyMzQ1Njc4OVx4ezY2MH1ceHs2NjF9XHh7NjYyfVx4ezY2M31ceHs2NjR9XHh7NjY1fVx4ezY2Nn1ceHs2Njd9XHh7NjY4fVx4ezY2OX1ceHs2NmF9CitNYXRjaGVkLCBidXQgb2Zmc2V0cyB2ZWN0b3IgaXMgdG9vIHNtYWxsIHRvIHNob3cgYWxsIG1hdGNoZXMKKyAwOiAwMTIzNDU2Nzg5XHh7NjYwfVx4ezY2MX1ceHs2NjJ9XHh7NjYzfVx4ezY2NH1ceHs2NjV9XHh7NjY2fVx4ezY2N31ceHs2Njh9XHh7NjY5fQorIDE6IDAxMjM0NTY3ODlceHs2NjB9XHh7NjYxfVx4ezY2Mn1ceHs2NjN9XHh7NjY0fVx4ezY2NX1ceHs2NjZ9XHh7NjY3fVx4ezY2OH0KKyAyOiAwMTIzNDU2Nzg5XHh7NjYwfVx4ezY2MX1ceHs2NjJ9XHh7NjYzfVx4ezY2NH1ceHs2NjV9XHh7NjY2fVx4ezY2N30KKyAzOiAwMTIzNDU2Nzg5XHh7NjYwfVx4ezY2MX1ceHs2NjJ9XHh7NjYzfVx4ezY2NH1ceHs2NjV9XHh7NjY2fQorIDQ6IDAxMjM0NTY3ODlceHs2NjB9XHh7NjYxfVx4ezY2Mn1ceHs2NjN9XHh7NjY0fVx4ezY2NX0KKyA1OiAwMTIzNDU2Nzg5XHh7NjYwfVx4ezY2MX1ceHs2NjJ9XHh7NjYzfVx4ezY2NH0KKyA2OiAwMTIzNDU2Nzg5XHh7NjYwfVx4ezY2MX1ceHs2NjJ9XHh7NjYzfQorIDc6IDAxMjM0NTY3ODlceHs2NjB9XHh7NjYxfVx4ezY2Mn0KKyA4OiAwMTIzNDU2Nzg5XHh7NjYwfVx4ezY2MX0KKyA5OiAwMTIzNDU2Nzg5XHh7NjYwfQorMTA6IDAxMjM0NTY3ODkKKzExOiAwMTIzNDU2NzgKKzEyOiAwMTIzNDU2NworMTM6IDAxMjM0NTYKKzE0OiAwMTIzNDUKKyAgICBceHs2ZjB9XHh7NmYxfVx4ezZmMn1ceHs2ZjN9XHh7NmY0fVx4ezZmNX1ceHs2ZjZ9XHh7NmY3fVx4ezZmOH1ceHs2Zjl9XHh7NmZhfQorIDA6IFx4ezZmMH1ceHs2ZjF9XHh7NmYyfVx4ezZmM31ceHs2ZjR9XHh7NmY1fVx4ezZmNn1ceHs2Zjd9XHh7NmY4fVx4ezZmOX0KKyAxOiBceHs2ZjB9XHh7NmYxfVx4ezZmMn1ceHs2ZjN9XHh7NmY0fVx4ezZmNX1ceHs2ZjZ9XHh7NmY3fVx4ezZmOH0KKyAyOiBceHs2ZjB9XHh7NmYxfVx4ezZmMn1ceHs2ZjN9XHh7NmY0fVx4ezZmNX1ceHs2ZjZ9XHh7NmY3fQorIDM6IFx4ezZmMH1ceHs2ZjF9XHh7NmYyfVx4ezZmM31ceHs2ZjR9XHh7NmY1fVx4ezZmNn0KKyA0OiBceHs2ZjB9XHh7NmYxfVx4ezZmMn1ceHs2ZjN9XHh7NmY0fVx4ezZmNX0KKyA1OiBceHs2ZjB9XHh7NmYxfVx4ezZmMn1ceHs2ZjN9XHh7NmY0fQorIDY6IFx4ezZmMH1ceHs2ZjF9XHh7NmYyfVx4ezZmM30KKyA3OiBceHs2ZjB9XHh7NmYxfVx4ezZmMn0KKyA4OiBceHs2ZjB9XHh7NmYxfQorIDk6IFx4ezZmMH0KKyAgICBceHs5NjZ9XHh7OTY3fVx4ezk2OH1ceHs5Njl9XHh7OTZhfVx4ezk2Yn1ceHs5NmN9XHh7OTZkfVx4ezk2ZX1ceHs5NmZ9XHh7OTcwfQorIDA6IFx4ezk2Nn1ceHs5Njd9XHh7OTY4fVx4ezk2OX1ceHs5NmF9XHh7OTZifVx4ezk2Y31ceHs5NmR9XHh7OTZlfVx4ezk2Zn0KKyAxOiBceHs5NjZ9XHh7OTY3fVx4ezk2OH1ceHs5Njl9XHh7OTZhfVx4ezk2Yn1ceHs5NmN9XHh7OTZkfVx4ezk2ZX0KKyAyOiBceHs5NjZ9XHh7OTY3fVx4ezk2OH1ceHs5Njl9XHh7OTZhfVx4ezk2Yn1ceHs5NmN9XHh7OTZkfQorIDM6IFx4ezk2Nn1ceHs5Njd9XHh7OTY4fVx4ezk2OX1ceHs5NmF9XHh7OTZifVx4ezk2Y30KKyA0OiBceHs5NjZ9XHh7OTY3fVx4ezk2OH1ceHs5Njl9XHh7OTZhfVx4ezk2Yn0KKyA1OiBceHs5NjZ9XHh7OTY3fVx4ezk2OH1ceHs5Njl9XHh7OTZhfQorIDY6IFx4ezk2Nn1ceHs5Njd9XHh7OTY4fVx4ezk2OX0KKyA3OiBceHs5NjZ9XHh7OTY3fVx4ezk2OH0KKyA4OiBceHs5NjZ9XHh7OTY3fQorIDk6IFx4ezk2Nn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgIAorL15ccHtObH0vdXRmCisgICAgXHh7MTZlZX0KKyAwOiBceHsxNmVlfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHs5NjZ9CitObyBtYXRjaAorICAKKy9eXHB7Tm99L3V0ZgorICAgIFx4e2IyfQorIDA6IFx4e2IyfQorICAgIFx4e2IzfQorIDA6IFx4e2IzfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHsxNmVlfQorTm8gbWF0Y2gKKyAgCisvXlxwe1BjfS91dGYKKyAgICBceDVmCisgMDogXworICAgIFx4ezIwM2Z9CisgMDogXHh7MjAzZn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgLQorTm8gbWF0Y2gKKyAgICBceHs1OGF9CitObyBtYXRjaAorICAKKy9eXHB7UGR9L3V0ZgorICAgIC0KKyAwOiAtCisgICAgXHh7NThhfQorIDA6IFx4ezU4YX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgXHh7MjAzZn0KK05vIG1hdGNoCisgIAorL15ccHtQZX0vdXRmCisgICAgKQorIDA6ICkKKyAgICBdCisgMDogXQorICAgIH0KKyAwOiB9CisgICAgXHh7ZjNifQorIDA6IFx4e2YzYn0KKyAgICBceHsyMzA5fQorIDA6IFx4ezIzMDl9CisgICAgXHh7MjMwYn0KKyAwOiBceHsyMzBifQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHsyMDNmfQorTm8gbWF0Y2gKKyAgICAoCitObyBtYXRjaAorICAgIFsKK05vIG1hdGNoCisgICAgeworTm8gbWF0Y2gKKyAgICBceHtmM2N9CitObyBtYXRjaAorCisvXlxwe1BmfS91dGYKKyAgICBceHtiYn0KKyAwOiBceHtiYn0KKyAgICBceHsyMDE5fQorIDA6IFx4ezIwMTl9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgIFx4ezIwM2Z9CitObyBtYXRjaAorICAKKy9eXHB7UGl9L3V0ZgorICAgIFx4e2FifQorIDA6IFx4e2FifQorICAgIFx4ezIwMTh9CisgMDogXHh7MjAxOH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgXHh7MjAzZn0KK05vIG1hdGNoCisgIAorL15ccHtQb30vdXRmCisgICAgIQorIDA6ICEKKyAgICBceHszN2V9CisgMDogXHh7MzdlfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHsyMDNmfQorTm8gbWF0Y2gKKyAgCisvXlxwe1BzfS91dGYKKyAgICAoCisgMDogKAorICAgIFsKKyAwOiBbCisgICAgeworIDA6IHsKKyAgICBceHtmM2N9CisgMDogXHh7ZjNjfQorICAgIFx4ezIzMDh9CisgMDogXHh7MjMwOH0KKyAgICBceHsyMzBhfQorIDA6IFx4ezIzMGF9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgICkKK05vIG1hdGNoCisgICAgXQorTm8gbWF0Y2gKKyAgICB9CitObyBtYXRjaAorICAgIFx4e2YzYn0KK05vIG1hdGNoCisgIAorL15ccHtTY30rL3V0ZgorICAgICRceHthMn1ceHthM31ceHthNH1ceHthNX1ceHthNn0KKyAwOiAkXHh7YTJ9XHh7YTN9XHh7YTR9XHh7YTV9CisgICAgXHh7OWYyfQorIDA6IFx4ezlmMn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgXHh7MmMyfQorTm8gbWF0Y2gKKyAgCisvXlxwe1NrfS91dGYKKyAgICBceHsyYzJ9CisgMDogXHh7MmMyfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHs5ZjJ9CitObyBtYXRjaAorICAKKy9eXHB7U219Ky91dGYKKyAgICArPHx+XHh7YWN9XHh7MjA0NH0KKyAwOiArPHx+XHh7YWN9XHh7MjA0NH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgXHh7OWYyfQorTm8gbWF0Y2gKKyAgCisvXlxwe1NvfS91dGYKKyAgICBceHthNn0KKyAwOiBceHthNn0KKyAgICBceHs0ODJ9CisgMDogXHh7NDgyfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHs5ZjJ9CitObyBtYXRjaAorICAKKy9eXHB7Wmx9L3V0ZgorICAgIFx4ezIwMjh9CisgMDogXHh7MjAyOH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgXHh7MjAyOX0KK05vIG1hdGNoCisgIAorL15ccHtacH0vdXRmCisgICAgXHh7MjAyOX0KKyAwOiBceHsyMDI5fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWAorTm8gbWF0Y2gKKyAgICBceHsyMDI4fQorTm8gbWF0Y2gKKyAgCisvXlxwe1pzfS91dGYKKyAgICBcIFwKKyAwOiAgCisgICAgXHh7YTB9CisgMDogXHh7YTB9CisgICAgXHh7MTY4MH0KKyAwOiBceHsxNjgwfQorICAgIFx4ezIwMDB9CisgMDogXHh7MjAwMH0KKyAgICBceHsyMDAxfQorIDA6IFx4ezIwMDF9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsyMDI4fQorTm8gbWF0Y2gKKyAgICBceHsyMDBkfQorTm8gbWF0Y2gKKyAgCisvXHB7TmR9KyguLikvdXRmCisgICAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAwOiBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQgorIDE6IFx4ezY2MH1ceHs2NjF9XHh7NjYyfUEKKyAyOiBceHs2NjB9XHh7NjYxfVx4ezY2Mn0KKyAgCisvXHB7TmR9Kz8oLi4pL3V0ZgorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgMDogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUIKKyAxOiBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BCisgMjogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9CisgIAorL1xwe05kfXsyLH0oLi4pL3V0ZgorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgMDogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUIKKyAxOiBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BCisgIAorL1xwe05kfXsyLH0/KC4uKS91dGYKKyAgICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworIDA6IFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCCisgMTogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QQorICAKKy9ccHtOZH0qKC4uKS91dGYKKyAgICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworIDA6IFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCCisgMTogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QQorIDI6IFx4ezY2MH1ceHs2NjF9XHh7NjYyfQorIDM6IFx4ezY2MH1ceHs2NjF9CisgIAorL1xwe05kfSo/KC4uKS91dGYKKyAgICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworIDA6IFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCCisgMTogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QQorIDI6IFx4ezY2MH1ceHs2NjF9XHh7NjYyfQorIDM6IFx4ezY2MH1ceHs2NjF9CisgIAorL1xwe05kfXsyfSguLikvdXRmCisgICAgICBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BQkMKKyAwOiBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BCisgIAorL1xwe05kfXsyLDN9KC4uKS91dGYKKyAgICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworIDA6IFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCCisgMTogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QQorICAKKy9ccHtOZH17MiwzfT8oLi4pL3V0ZgorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgMDogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUIKKyAxOiBceHs2NjB9XHh7NjYxfVx4ezY2Mn1BCisgIAorL1xwe05kfT8oLi4pL3V0ZgorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgMDogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9CisgMTogXHh7NjYwfVx4ezY2MX0KKyAgCisvXHB7TmR9Pz8oLi4pL3V0ZgorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgMDogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9CisgMTogXHh7NjYwfVx4ezY2MX0KKyAgCisvXHB7TmR9KisoLi4pL3V0ZgorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCisgMDogXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUIKKyAgCisvXHB7TmR9KisoLi4uKS91dGYKKyAgICAgIFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworIDA6IFx4ezY2MH1ceHs2NjF9XHh7NjYyfUFCQworICAKKy9ccHtOZH0qKyguLi4uKS91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICAgXHh7NjYwfVx4ezY2MX1ceHs2NjJ9QUJDCitObyBtYXRjaAorICAKKy9ccHtMdX0vaSx1dGYKKyAgICBBCisgMDogQQorICAgIGFceHsxMGEwfUIKKyAwOiBceHsxMGEwfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgYQorTm8gbWF0Y2gKKyAgICBceHsxZDAwfQorTm8gbWF0Y2gKKworL1xwe15MdX0vaSx1dGYKKyAgICAxMjM0CisgMDogMQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQUJDCitObyBtYXRjaAorCisvXFB7THV9L2ksdXRmCisgICAgMTIzNAorIDA6IDEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQworTm8gbWF0Y2gKKworLyg/PD1BXHB7TmR9KVhZWi91dGYKKyAgICBBMlhZWgorIDA6IFhZWgorICAgIDEyM0E1WFlaUFFSCisgMDogWFlaCisgICAgQUJBXHh7NjYwfVhZWnBxcgorIDA6IFhZWgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVhZWgorTm8gbWF0Y2gKKyAgICBYWVoKK05vIG1hdGNoCisgICAgCisvKD88IVxwTClYWVovdXRmCisgICAgMVhZWgorIDA6IFhZWgorICAgIEFCPVhZWi4uCisgMDogWFlaCisgICAgWFlaCisgMDogWFlaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBXWFlaCitObyBtYXRjaAorCisvW1xwe05kfV0vdXRmCisgICAgMTIzNAorIDA6IDEKKworL1tccHtOZH0rLV0rL3V0ZgorICAgIDEyMzQKKyAwOiAxMjM0CisgICAgMTItMzQKKyAwOiAxMi0zNAorICAgIDEyK1x4ezY2MX0tMzQKKyAwOiAxMitceHs2NjF9LTM0CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkCitObyBtYXRjaAorCisvW1xQe05kfV0rL3V0ZgorICAgIGFiY2QKKyAwOiBhYmNkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMjM0CitObyBtYXRjaAorCisvXEQrL3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorTWF0Y2hlZCwgYnV0IG9mZnNldHMgdmVjdG9yIGlzIHRvbyBzbWFsbCB0byBzaG93IGFsbCBtYXRjaGVzCisgMDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAxOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgMjogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgMzogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA0OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgNTogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgNjogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA3OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgODogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgOTogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzEwOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisxMTogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisxMjogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzEzOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisxNDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMQorTm8gbWF0Y2gKKyAgICAgCisvXFB7TmR9Ky91dGYsbm9fYXV0b19wb3NzZXNzCisgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK01hdGNoZWQsIGJ1dCBvZmZzZXRzIHZlY3RvciBpcyB0b28gc21hbGwgdG8gc2hvdyBhbGwgbWF0Y2hlcworIDA6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgMTogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDI6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDM6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgNDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDU6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDY6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgNzogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDg6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDk6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisxMDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTE6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTI6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisxMzogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTQ6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK05vIG1hdGNoCisKKy9bXERdKy91dGYsbm9fYXV0b19wb3NzZXNzCisgICAgYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK01hdGNoZWQsIGJ1dCBvZmZzZXRzIHZlY3RvciBpcyB0b28gc21hbGwgdG8gc2hvdyBhbGwgbWF0Y2hlcworIDA6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgMTogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDI6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDM6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgNDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDU6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDY6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisgNzogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDg6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDk6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisxMDogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTE6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTI6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisxMzogYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTQ6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEKK05vIG1hdGNoCisKKy9bXFB7TmR9XSsvdXRmLG5vX2F1dG9fcG9zc2VzcworICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitNYXRjaGVkLCBidXQgb2Zmc2V0cyB2ZWN0b3IgaXMgdG9vIHNtYWxsIHRvIHNob3cgYWxsIG1hdGNoZXMKKyAwOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDE6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAyOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAzOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDQ6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA1OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA2OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDc6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA4OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA5OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTA6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzExOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzEyOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTM6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzE0OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitObyBtYXRjaAorCisvW1xEXFB7TmR9XSsvdXRmLG5vX2F1dG9fcG9zc2VzcworICAgIGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCitNYXRjaGVkLCBidXQgb2Zmc2V0cyB2ZWN0b3IgaXMgdG9vIHNtYWxsIHRvIHNob3cgYWxsIG1hdGNoZXMKKyAwOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDE6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAyOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyAzOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDQ6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA1OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA2OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorIDc6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA4OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKyA5OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTA6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzExOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzEyOiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQorMTM6IGFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKKzE0OiBhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIDExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExCitObyBtYXRjaAorCisvXHBML3V0ZgorICAgIGEKKyAwOiBhCisgICAgQQorIDA6IEEKKworL1xwTC9pLHV0ZgorICAgIGEKKyAwOiBhCisgICAgQQorIDA6IEEKKyAgICAKKy9ccHtMdX0vdXRmCisgICAgQQorIDA6IEEKKyAgICBhWgorIDA6IFoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFiYworTm8gbWF0Y2gKKworL1xwe0x1fS9pLHV0ZgorICAgIEEKKyAwOiBBCisgICAgYVoKKyAwOiBaCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKK05vIG1hdGNoCisKKy9ccHtMbH0vdXRmCisgICAgYQorIDA6IGEKKyAgICBBegorIDA6IHoKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFCQworTm8gbWF0Y2gKKworL1xwe0xsfS9pLHV0ZgorICAgIGEKKyAwOiBhCisgICAgQXoKKyAwOiB6CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQkMKK05vIG1hdGNoCisKKy9eXHh7YzB9JC9pLHV0ZgorICAgIFx4e2MwfQorIDA6IFx4e2MwfQorICAgIFx4e2UwfQorIDA6IFx4e2UwfQorCisvXlx4e2UwfSQvaSx1dGYKKyAgICBceHtjMH0KKyAwOiBceHtjMH0KKyAgICBceHtlMH0KKyAwOiBceHtlMH0KKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS91dGYKKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAwOiBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorTm8gbWF0Y2gKKyAgICBBXHh7M2IxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KK05vIG1hdGNoCisgICAgQVx4ezM5MX1ceHsxMDQ0Rn1ceHtmZjNhfVx4ezFmYjB9CitObyBtYXRjaAorICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmY1YX1ceHsxZmIwfQorTm8gbWF0Y2gKKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiOH0KK05vIG1hdGNoCisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vaSx1dGYKKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAwOiBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAgICBhXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAwOiBhXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAgICBBXHh7M2IxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAwOiBBXHh7M2IxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAgICBBXHh7MzkxfVx4ezEwNDRGfVx4e2ZmM2F9XHh7MWZiMH0KKyAwOiBBXHh7MzkxfVx4ezEwNDRmfVx4e2ZmM2F9XHh7MWZiMH0KKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmNWF9XHh7MWZiMH0KKyAwOiBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmNWF9XHh7MWZiMH0KKyAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiOH0KKyAwOiBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiOH0KKworL1x4ezM5MX0rL2ksdXRmCisgICAgXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX0KKyAwOiBceHszOTF9XHh7M2IxfVx4ezNiMX1ceHszYjF9XHh7MzkxfQorCisvXHh7MzkxfXszLDV9KC4pL2ksdXRmCisgICAgXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX1YCisgMDogXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX1YCisgMTogXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX0KKyAyOiBceHszOTF9XHh7M2IxfVx4ezNiMX1ceHszYjF9CisKKy9ceHszOTF9ezMsNX0/KC4pL2ksdXRmCisgICAgXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX1YCisgMDogXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX1YCisgMTogXHh7MzkxfVx4ezNiMX1ceHszYjF9XHh7M2IxfVx4ezM5MX0KKyAyOiBceHszOTF9XHh7M2IxfVx4ezNiMX1ceHszYjF9CisKKy9bXHh7MzkxfVx4e2ZmM2F9XS9pLHV0ZgorICAgIFx4ezM5MX0KKyAwOiBceHszOTF9CisgICAgXHh7ZmYzYX0KKyAwOiBceHtmZjNhfQorICAgIFx4ezNiMX0KKyAwOiBceHszYjF9CisgICAgXHh7ZmY1YX0KKyAwOiBceHtmZjVhfQorICAgIAorL1tceHtjMH1ceHszOTF9XS9pLHV0ZgorICAgIFx4e2MwfQorIDA6IFx4e2MwfQorICAgIFx4e2UwfQorIDA6IFx4e2UwfQorCisvW1x4ezEwNX0tXHh7MTA5fV0vaSx1dGYKKyAgICBceHsxMDR9CisgMDogXHh7MTA0fQorICAgIFx4ezEwNX0KKyAwOiBceHsxMDV9CisgICAgXHh7MTA5fQorIDA6IFx4ezEwOX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezEwMH0KK05vIG1hdGNoCisgICAgXHh7MTBhfQorTm8gbWF0Y2gKKyAgICAKKy9bei1ceHsxMDB9XS9pLHV0ZgorICAgIFoKKyAwOiBaCisgICAgegorIDA6IHoKKyAgICBceHszOWN9CisgMDogXHh7MzljfQorICAgIFx4ezE3OH0KKyAwOiBceHsxNzh9CisgICAgfAorIDA6IHwKKyAgICBceHs4MH0KKyAwOiBceHs4MH0KKyAgICBceHtmZn0KKyAwOiBceHtmZn0KKyAgICBceHsxMDB9CisgMDogXHh7MTAwfQorICAgIFx4ezEwMX0KKyAwOiBceHsxMDF9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxMDJ9CitObyBtYXRjaAorICAgIFkKK05vIG1hdGNoCisgICAgeQorTm8gbWF0Y2gKKworL1t6LVx4ezEwMH1dL2ksdXRmCisKKy9eXFgvdXRmCisgICAgQQorIDA6IEEKKyAgICBBXHh7MzAwfUJDCisgMDogQVx4ezMwMH0KKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkMKKyAwOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9CisgICAgXHh7MzAwfQorIDA6IFx4ezMwMH0KKworL14oXFgqKUMvdXRmCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9CisgMDogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9QworIDA6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfUMKKyAxOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkMKKworL14oXFgqPylDL3V0ZgorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfQorIDA6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQworICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfUMKKyAwOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX1DCisgMTogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDCisKKy9eKFxYKikoLikvdXRmCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9CisgMDogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQQorIDE6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQworIDI6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CCisgMzogQQorICAgIEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfUMKKyAwOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX1DCisgMTogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQQorIDI6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQworIDM6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CCisgNDogQQorCisvXihcWCo/KSguKS91dGYKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBXHh7MzAwfVx4ezMwMX0KKyAwOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBCisgMTogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDCisgMjogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUIKKyAzOiBBCisgICAgQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDQVx4ezMwMH1ceHszMDF9QworIDA6IEFceHszMDB9XHh7MzAxfVx4ezMwMn1CQ0FceHszMDB9XHh7MzAxfUMKKyAxOiBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9QkNBCisgMjogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUJDCisgMzogQVx4ezMwMH1ceHszMDF9XHh7MzAyfUIKKyA0OiBBCisKKy9eXFgoLikvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBXHh7MzAwfVx4ezMwMX1ceHszMDJ9CitObyBtYXRjaAorCisvXlxYezIsM30oLikvdXRmCisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1YCisgMDogQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1YCisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DXHh7MzAwfVx4ezMwMX0KKyAwOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUMKKyAgICBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfVgKKyAwOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfVgKKyAxOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUMKKyAgICBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfURBXHh7MzAwfVgKKyAwOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfUQKKyAxOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUMKKyAgICAKKy9eXFh7MiwzfT8oLikvdXRmCisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1YCisgMDogQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1YCisgICAgQVx4ezMwMH1ceHszMDF9Qlx4ezMwMH1DXHh7MzAwfVx4ezMwMX0KKyAwOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUMKKyAgICBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfVgKKyAwOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfVgKKyAxOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUMKKyAgICBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfURBXHh7MzAwfVgKKyAwOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUNceHszMDB9XHh7MzAxfUQKKyAxOiBBXHh7MzAwfVx4ezMwMX1CXHh7MzAwfUMKKworL15ccE57MiwzfVgvCisgICAgMTJYCisgMDogMTJYCisgICAgMTIzWAorIDA6IDEyM1gKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgMVgKK05vIG1hdGNoCisgICAgMTIzNFgKK05vIG1hdGNoCisKKy9ceHsxMDB9L2ksdXRmCisgICAgXHh7MTAwfQorIDA6IFx4ezEwMH0KKyAgICBceHsxMDF9CisgMDogXHh7MTAxfQorICAgIAorL15ccHtIYW59Ky91dGYKKyAgICBceHsyZTgxfVx4ezMwMDd9XHh7MmY4MDR9XHh7MzFhMH0KKyAwOiBceHsyZTgxfVx4ezMwMDd9XHh7MmY4MDR9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsyZTdmfQorTm8gbWF0Y2gKKworL15cUHtLYXRha2FuYX0rL3V0ZgorICAgIFx4ezMxMDV9CisgMDogXHh7MzEwNX0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezMwZmZ9CitObyBtYXRjaAorCisvXltccHtBcmFiaWN9XS91dGYKKyAgICBceHswNmU5fQorIDA6IFx4ezZlOX0KKyAgICBceHswNjBifQorIDA6IFx4ezYwYn0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFhceHswNmU5fQorTm8gbWF0Y2gKKworL15bXFB7WWl9XS91dGYKKyAgICBceHsyZjgwMH0KKyAwOiBceHsyZjgwMH0KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4e2EwMTR9CitObyBtYXRjaAorICAgIFx4e2E0YzZ9CitObyBtYXRjaAorCisvXlxwe0FueX1YL3V0ZgorICAgIEFYWVoKKyAwOiBBWAorICAgIFx4ezEyMzR9WFlaCisgMDogXHh7MTIzNH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYCitObyBtYXRjaAorICAgIAorL15cUHtBbnl9WC91dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYCitObyBtYXRjaAorICAgIAorL15ccHtBbnl9P1gvdXRmCisgICAgWFlaCisgMDogWAorICAgIEFYWVoKKyAwOiBBWAorICAgIFx4ezEyMzR9WFlaCisgMDogXHh7MTIzNH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQlhZWgorTm8gbWF0Y2gKKworL15cUHtBbnl9P1gvdXRmCisgICAgWFlaCisgMDogWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVhZWgorTm8gbWF0Y2gKKyAgICBceHsxMjM0fVhZWgorTm8gbWF0Y2gKKyAgICBBQlhZWgorTm8gbWF0Y2gKKworL15ccHtBbnl9K1gvdXRmCisgICAgQVhZWgorIDA6IEFYCisgICAgXHh7MTIzNH1YWVoKKyAwOiBceHsxMjM0fVgKKyAgICBBXHh7MTIzNH1YWVoKKyAwOiBBXHh7MTIzNH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBYWVoKK05vIG1hdGNoCisKKy9eXFB7QW55fStYL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVhZWgorTm8gbWF0Y2gKKyAgICBceHsxMjM0fVhZWgorTm8gbWF0Y2gKKyAgICBBXHh7MTIzNH1YWVoKK05vIG1hdGNoCisgICAgWFlaCitObyBtYXRjaAorCisvXlxwe0FueX0qWC91dGYKKyAgICBYWVoKKyAwOiBYCisgICAgQVhZWgorIDA6IEFYCisgICAgXHh7MTIzNH1YWVoKKyAwOiBceHsxMjM0fVgKKyAgICBBXHh7MTIzNH1YWVoKKyAwOiBBXHh7MTIzNH1YCisKKy9eXFB7QW55fSpYL3V0ZgorICAgIFhZWgorIDA6IFgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIEFYWVoKK05vIG1hdGNoCisgICAgXHh7MTIzNH1YWVoKK05vIG1hdGNoCisgICAgQVx4ezEyMzR9WFlaCitObyBtYXRjaAorCisvXltccHtBbnl9XVgvdXRmCisgICAgQVhZWgorIDA6IEFYCisgICAgXHh7MTIzNH1YWVoKKyAwOiBceHsxMjM0fVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFgKK05vIG1hdGNoCisgICAgCisvXltcUHtBbnl9XVgvdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWAorTm8gbWF0Y2gKKyAgICAKKy9eW1xwe0FueX1dP1gvdXRmCisgICAgWFlaCisgMDogWAorICAgIEFYWVoKKyAwOiBBWAorICAgIFx4ezEyMzR9WFlaCisgMDogXHh7MTIzNH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBQlhZWgorTm8gbWF0Y2gKKworL15bXFB7QW55fV0/WC91dGYKKyAgICBYWVoKKyAwOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWFlaCitObyBtYXRjaAorICAgIFx4ezEyMzR9WFlaCitObyBtYXRjaAorICAgIEFCWFlaCitObyBtYXRjaAorCisvXltccHtBbnl9XStYL3V0ZgorICAgIEFYWVoKKyAwOiBBWAorICAgIFx4ezEyMzR9WFlaCisgMDogXHh7MTIzNH1YCisgICAgQVx4ezEyMzR9WFlaCisgMDogQVx4ezEyMzR9WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgWFlaCitObyBtYXRjaAorCisvXltcUHtBbnl9XStYL3V0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgQVhZWgorTm8gbWF0Y2gKKyAgICBceHsxMjM0fVhZWgorTm8gbWF0Y2gKKyAgICBBXHh7MTIzNH1YWVoKK05vIG1hdGNoCisgICAgWFlaCitObyBtYXRjaAorCisvXltccHtBbnl9XSpYL3V0ZgorICAgIFhZWgorIDA6IFgKKyAgICBBWFlaCisgMDogQVgKKyAgICBceHsxMjM0fVhZWgorIDA6IFx4ezEyMzR9WAorICAgIEFceHsxMjM0fVhZWgorIDA6IEFceHsxMjM0fVgKKworL15bXFB7QW55fV0qWC91dGYKKyAgICBYWVoKKyAwOiBYCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBBWFlaCitObyBtYXRjaAorICAgIFx4ezEyMzR9WFlaCitObyBtYXRjaAorICAgIEFceHsxMjM0fVhZWgorTm8gbWF0Y2gKKworL15ccHtBbnl9ezMsNX0/L3V0ZgorICAgIGFiY2RlZmdoCisgMDogYWJjZGUKKyAxOiBhYmNkCisgMjogYWJjCisgICAgXHh7MTIzNH1cblxyXHh7MzQ1Nn14eXoKKyAwOiBceHsxMjM0fVx4ezBhfVx4ezBkfVx4ezM0NTZ9eAorIDE6IFx4ezEyMzR9XHh7MGF9XHh7MGR9XHh7MzQ1Nn0KKyAyOiBceHsxMjM0fVx4ezBhfVx4ezBkfQorCisvXlxwe0FueX17Myw1fS91dGYKKyAgICBhYmNkZWZnaAorIDA6IGFiY2RlCisgICAgXHh7MTIzNH1cblxyXHh7MzQ1Nn14eXoKKyAwOiBceHsxMjM0fVx4ezBhfVx4ezBkfVx4ezM0NTZ9eAorCisvXlxQe0FueX17Myw1fT8vdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmNkZWZnaAorTm8gbWF0Y2gKKyAgICBceHsxMjM0fVxuXHJceHszNDU2fXh5egorTm8gbWF0Y2gKKworL15ccHtMJn1YL3V0ZgorICAgICBBWFkKKyAwOiBBWAorICAgICBhWFkKKyAwOiBhWAorICAgICBceHsxYzV9WFkKKyAwOiBceHsxYzV9WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgIFx4ezFiYn1YWQorTm8gbWF0Y2gKKyAgICAgXHh7MmIwfVhZCitObyBtYXRjaAorICAgICAhWFkKK05vIG1hdGNoCisKKy9eW1xwe0wmfV1YL3V0ZgorICAgICBBWFkKKyAwOiBBWAorICAgICBhWFkKKyAwOiBhWAorICAgICBceHsxYzV9WFkKKyAwOiBceHsxYzV9WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgIFx4ezFiYn1YWQorTm8gbWF0Y2gKKyAgICAgXHh7MmIwfVhZCitObyBtYXRjaAorICAgICAhWFkKK05vIG1hdGNoCisKKy9eXHB7TCZ9K1gvdXRmCisgICAgIEFYWQorIDA6IEFYCisgICAgIGFYWQorIDA6IGFYCisgICAgIEFiY2RlWHl6CisgMDogQWJjZGVYCisgICAgIFx4ezFjNX1BYlhZCisgMDogXHh7MWM1fUFiWAorICAgICBhYmNERVh5cHFyZVhsbW4KKyAwOiBhYmNERVh5cHFyZVgKKyAxOiBhYmNERVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICBceHsxYmJ9WFkKK05vIG1hdGNoCisgICAgIFx4ezJiMH1YWQorTm8gbWF0Y2gKKyAgICAgIVhZCitObyBtYXRjaAorCisvXltccHtMJn1dK1gvdXRmCisgICAgIEFYWQorIDA6IEFYCisgICAgIGFYWQorIDA6IGFYCisgICAgIEFiY2RlWHl6CisgMDogQWJjZGVYCisgICAgIFx4ezFjNX1BYlhZCisgMDogXHh7MWM1fUFiWAorICAgICBhYmNERVh5cHFyZVhsbW4KKyAwOiBhYmNERVh5cHFyZVgKKyAxOiBhYmNERVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICBceHsxYmJ9WFkKK05vIG1hdGNoCisgICAgIFx4ezJiMH1YWQorTm8gbWF0Y2gKKyAgICAgIVhZCitObyBtYXRjaAorCisvXlxwe0wmfSs/WC91dGYKKyAgICAgQVhZCisgMDogQVgKKyAgICAgYVhZCisgMDogYVgKKyAgICAgQWJjZGVYeXoKKyAwOiBBYmNkZVgKKyAgICAgXHh7MWM1fUFiWFkKKyAwOiBceHsxYzV9QWJYCisgICAgIGFiY0RFWHlwcXJlWGxtbgorIDA6IGFiY0RFWHlwcXJlWAorIDE6IGFiY0RFWAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgIFx4ezFiYn1YWQorTm8gbWF0Y2gKKyAgICAgXHh7MmIwfVhZCitObyBtYXRjaAorICAgICAhWFkKK05vIG1hdGNoCisKKy9eW1xwe0wmfV0rP1gvdXRmCisgICAgIEFYWQorIDA6IEFYCisgICAgIGFYWQorIDA6IGFYCisgICAgIEFiY2RlWHl6CisgMDogQWJjZGVYCisgICAgIFx4ezFjNX1BYlhZCisgMDogXHh7MWM1fUFiWAorICAgICBhYmNERVh5cHFyZVhsbW4KKyAwOiBhYmNERVh5cHFyZVgKKyAxOiBhYmNERVgKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgICBceHsxYmJ9WFkKK05vIG1hdGNoCisgICAgIFx4ezJiMH1YWQorTm8gbWF0Y2gKKyAgICAgIVhZCitObyBtYXRjaAorCisvXlxQe0wmfVgvdXRmCisgICAgICFYWQorIDA6ICFYCisgICAgIFx4ezFiYn1YWQorIDA6IFx4ezFiYn1YCisgICAgIFx4ezJiMH1YWQorIDA6IFx4ezJiMH1YCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAgXHh7MWM1fVhZCitObyBtYXRjaAorICAgICBBWFkKK05vIG1hdGNoCisKKy9eW1xQe0wmfV1YL3V0ZgorICAgICAhWFkKKyAwOiAhWAorICAgICBceHsxYmJ9WFkKKyAwOiBceHsxYmJ9WAorICAgICBceHsyYjB9WFkKKyAwOiBceHsyYjB9WAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgIFx4ezFjNX1YWQorTm8gbWF0Y2gKKyAgICAgQVhZCitObyBtYXRjaAorCisvXlx4ezAyM2F9Kz8oXHh7MDEzMH0rKS9pLHV0ZgorICBceHswMjNhfVx4ezJjNjV9XHh7MDEzMH0KKyAwOiBceHsyM2F9XHh7MmM2NX1ceHsxMzB9CisgIAorL15ceHswMjNhfSsoW15YXSkvaSx1dGYKKyAgXHh7MDIzYX1ceHsyYzY1fVgKKyAwOiBceHsyM2F9XHh7MmM2NX0KKyAKKy9ceHtjMH0rXHh7MTE2fSsvaSx1dGYKKyAgICBceHtjMH1ceHtlMH1ceHsxMTZ9XHh7MTE3fQorIDA6IFx4e2MwfVx4e2UwfVx4ezExNn1ceHsxMTd9CisKKy9bXHh7YzB9XHh7MTE2fV0rL2ksdXRmCisgICAgXHh7YzB9XHh7ZTB9XHh7MTE2fVx4ezExN30KKyAwOiBceHtjMH1ceHtlMH1ceHsxMTZ9XHh7MTE3fQorCisjIENoZWNrIHByb3BlcnR5IHN1cHBvcnQgaW4gbm9uLVVURi04IG1vZGUKKyAKKy9ccHtMfXs0fS8KKyAgICAxMjNhYmNkZWZnCisgMDogYWJjZAorICAgIDEyM2FiY1x4YzRceGM1enoKKyAwOiBhYmNceGM0CisKKy9ccHtDYXJpYW59XHB7Q2hhbX1ccHtLYXlhaF9MaX1ccHtMZXBjaGF9XHB7THljaWFufVxwe0x5ZGlhbn1ccHtPbF9DaGlraX1ccHtSZWphbmd9XHB7U2F1cmFzaHRyYX1ccHtTdW5kYW5lc2V9XHB7VmFpfS91dGYKKyAgICBceHsxMDJBNH1ceHtBQTUyfVx4e0E5MUR9XHh7MUM0Nn1ceHsxMDI4M31ceHsxMDkyRX1ceHsxQzZCfVx4e0E5M0J9XHh7QThCRn1ceHsxQkEwfVx4e0E1MEF9PT09PQorIDA6IFx4ezEwMmE0fVx4e2FhNTJ9XHh7YTkxZH1ceHsxYzQ2fVx4ezEwMjgzfVx4ezEwOTJlfVx4ezFjNmJ9XHh7YTkzYn1ceHthOGJmfVx4ezFiYTB9XHh7YTUwYX0KKworL1x4e2E3N2R9XHh7MWQ3OX0vaSx1dGYKKyAgICBceHthNzdkfVx4ezFkNzl9CisgMDogXHh7YTc3ZH1ceHsxZDc5fQorICAgIFx4ezFkNzl9XHh7YTc3ZH0KKyAwOiBceHsxZDc5fVx4e2E3N2R9CisKKy9ceHthNzdkfVx4ezFkNzl9L3V0ZgorICAgIFx4e2E3N2R9XHh7MWQ3OX0KKyAwOiBceHthNzdkfVx4ezFkNzl9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHsxZDc5fVx4e2E3N2R9CitObyBtYXRjaAorCisvXlxwe1hhbn0vdXRmCisgICAgQUJDRAorIDA6IEEKKyAgICAxMjM0CisgMDogMQorICAgIFx4ezZjYX0KKyAwOiBceHs2Y2F9CisgICAgXHh7YTZjfQorIDA6IFx4e2E2Y30KKyAgICBceHsxMGE3fQorIDA6IFx4ezEwYTd9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBfQUJDCitObyBtYXRjaAorCisvXlxwe1hhbn0rL3V0ZgorICAgIEFCQ0QxMjM0XHh7NmNhfVx4e2E2Y31ceHsxMGE3fV8KKyAwOiBBQkNEMTIzNFx4ezZjYX1ceHthNmN9XHh7MTBhN30KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIF9BQkMKK05vIG1hdGNoCisKKy9eXHB7WGFufSovdXRmCisgICAgQUJDRDEyMzRceHs2Y2F9XHh7YTZjfVx4ezEwYTd9XworIDA6IEFCQ0QxMjM0XHh7NmNhfVx4e2E2Y31ceHsxMGE3fQorICAgIAorL15ccHtYYW59ezIsOX0vdXRmCisgICAgQUJDRDEyMzRceHs2Y2F9XHh7YTZjfVx4ezEwYTd9XworIDA6IEFCQ0QxMjM0XHh7NmNhfQorICAgIAorL15bXHB7WGFufV0vdXRmCisgICAgQUJDRDEyMzRfCisgMDogQQorICAgIDEyMzRhYmNkXworIDA6IDEKKyAgICBceHs2Y2F9CisgMDogXHh7NmNhfQorICAgIFx4e2E2Y30KKyAwOiBceHthNmN9CisgICAgXHh7MTBhN30KKyAwOiBceHsxMGE3fQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgX0FCQworTm8gbWF0Y2gKKyAKKy9eW1xwe1hhbn1dKy91dGYKKyAgICBBQkNEMTIzNFx4ezZjYX1ceHthNmN9XHh7MTBhN31fCisgMDogQUJDRDEyMzRceHs2Y2F9XHh7YTZjfVx4ezEwYTd9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBfQUJDCitObyBtYXRjaAorCisvXj5ccHtYc3B9L3V0ZgorICAgID5ceHsxNjgwfVx4ezIwMjh9XHh7MGJ9CisgMDogPlx4ezE2ODB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHswYn0KK05vIG1hdGNoCisKKy9ePlxwe1hzcH0rL3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAwOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAxOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH0KKyAyOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9CisgMzogPiBceHswOX1ceHswYX1ceHswY31ceHswZH1ceHthMH0KKyA0OiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfQorIDU6ID4gXHh7MDl9XHh7MGF9XHh7MGN9CisgNjogPiBceHswOX1ceHswYX0KKyA3OiA+IFx4ezA5fQorIDg6ID4gCisKKy9ePlxwe1hzcH0qL3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAwOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAxOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH0KKyAyOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9CisgMzogPiBceHswOX1ceHswYX1ceHswY31ceHswZH1ceHthMH0KKyA0OiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfQorIDU6ID4gXHh7MDl9XHh7MGF9XHh7MGN9CisgNjogPiBceHswOX1ceHswYX0KKyA3OiA+IFx4ezA5fQorIDg6ID4gCisgOTogPgorICAgIAorL14+XHB7WHNwfXsyLDl9L3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAwOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAxOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH0KKyAyOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9CisgMzogPiBceHswOX1ceHswYX1ceHswY31ceHswZH1ceHthMH0KKyA0OiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfQorIDU6ID4gXHh7MDl9XHh7MGF9XHh7MGN9CisgNjogPiBceHswOX1ceHswYX0KKyA3OiA+IFx4ezA5fQorICAgIAorL14+W1xwe1hzcH1dL3V0Zixub19hdXRvX3Bvc3Nlc3MKKyAgICA+XHh7MjAyOH1ceHswYn0KKyAwOiA+XHh7MjAyOH0KKyAKKy9ePltccHtYc3B9XSsvdXRmLG5vX2F1dG9fcG9zc2VzcworICAgID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorIDA6ID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorIDE6ID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fQorIDI6ID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH0KKyAzOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfQorIDQ6ID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9CisgNTogPiBceHswOX1ceHswYX1ceHswY30KKyA2OiA+IFx4ezA5fVx4ezBhfQorIDc6ID4gXHh7MDl9CisgODogPiAKKworL14+XHB7WHBzfS91dGYKKyAgICA+XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorIDA6ID5ceHsxNjgwfQorICAgID5ceHthMH0KKyAwOiA+XHh7YTB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHswYn0KK05vIG1hdGNoCisKKy9ePlxwe1hwc30rL3V0ZgorICAgID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorIDA6ID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorCisvXj5ccHtYcHN9Kz8vdXRmCisgICAgPlx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAwOiA+XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorIDE6ID5ceHsxNjgwfVx4ezIwMjh9CisgMjogPlx4ezE2ODB9CisKKy9ePlxwe1hwc30qL3V0ZgorICAgID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorIDA6ID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorICAgIAorL14+XHB7WHBzfXsyLDl9L3V0ZgorICAgID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorIDA6ID4gXHh7MDl9XHh7MGF9XHh7MGN9XHh7MGR9XHh7YTB9XHh7MTY4MH1ceHsyMDI4fVx4ezBifQorICAgIAorL14+XHB7WHBzfXsyLDl9Py91dGYKKyAgICA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAwOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAxOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH0KKyAyOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9CisgMzogPiBceHswOX1ceHswYX1ceHswY31ceHswZH1ceHthMH0KKyA0OiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfQorIDU6ID4gXHh7MDl9XHh7MGF9XHh7MGN9CisgNjogPiBceHswOX1ceHswYX0KKyA3OiA+IFx4ezA5fQorICAgIAorL14+W1xwe1hwc31dL3V0ZgorICAgID5ceHsyMDI4fVx4ezBifQorIDA6ID5ceHsyMDI4fQorIAorL14+W1xwe1hwc31dKy91dGYKKyAgICA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKyAwOiA+IFx4ezA5fVx4ezBhfVx4ezBjfVx4ezBkfVx4e2EwfVx4ezE2ODB9XHh7MjAyOH1ceHswYn0KKworL15ccHtYd2R9L3V0ZgorICAgIEFCQ0QKKyAwOiBBCisgICAgMTIzNAorIDA6IDEKKyAgICBceHs2Y2F9CisgMDogXHh7NmNhfQorICAgIFx4e2E2Y30KKyAwOiBceHthNmN9CisgICAgXHh7MTBhN30KKyAwOiBceHsxMGE3fQorICAgIF9BQkMKKyAwOiBfCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBbXQorTm8gbWF0Y2gKKworL15ccHtYd2R9Ky91dGYKKyAgICBBQkNEMTIzNFx4ezZjYX1ceHthNmN9XHh7MTBhN31fCisgMDogQUJDRDEyMzRceHs2Y2F9XHh7YTZjfVx4ezEwYTd9XworCisvXlxwe1h3ZH0qL3V0ZgorICAgIEFCQ0QxMjM0XHh7NmNhfVx4e2E2Y31ceHsxMGE3fV8KKyAwOiBBQkNEMTIzNFx4ezZjYX1ceHthNmN9XHh7MTBhN31fCisgICAgCisvXlxwe1h3ZH17Miw5fS91dGYKKyAgICBBXzEyXHh7NmNhfVx4e2E2Y31ceHsxMGE3fQorIDA6IEFfMTJceHs2Y2F9XHh7YTZjfVx4ezEwYTd9CisgICAgCisvXltccHtYd2R9XS91dGYKKyAgICBBQkNEMTIzNF8KKyAwOiBBCisgICAgMTIzNGFiY2RfCisgMDogMQorICAgIFx4ezZjYX0KKyAwOiBceHs2Y2F9CisgICAgXHh7YTZjfQorIDA6IFx4e2E2Y30KKyAgICBceHsxMGE3fQorIDA6IFx4ezEwYTd9CisgICAgX0FCQworIDA6IF8KK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFtdCitObyBtYXRjaAorIAorL15bXHB7WHdkfV0rL3V0ZgorICAgIEFCQ0QxMjM0XHh7NmNhfVx4e2E2Y31ceHsxMGE3fV8KKyAwOiBBQkNEMTIzNFx4ezZjYX1ceHthNmN9XHh7MTBhN31fCisKKyMgVW5pY29kZSBwcm9wZXJ0aWVzIGZvciBcYiBhYmQgXEIgCisKKy9cYi4uLlxCL3V0Zix1Y3AKKyAgICBhYmNfCisgMDogYWJjCisgICAgXHh7MzdlfWFiY1x4ezM3Nn0KKyAwOiBhYmMKKyAgICBceHszN2V9XHh7Mzc2fVx4ezM3MX1ceHszOTN9XHh7Mzk0fQorIDA6IFx4ezM3Nn1ceHszNzF9XHh7MzkzfQorICAgICFceHtjMH0rK1x4e2MxfVx4e2MyfQorIDA6ICsrXHh7YzF9CisgICAgIVx4e2MwfSsrKysrCisgMDogXHh7YzB9KysKKworIyBXaXRob3V0IFBDUkVfVUNQLCBub24tQVNDSUkgYWx3YXlzIGZhaWwsIGV2ZW4gaWYgPCAyNTYgIAorCisvXGIuLi5cQi91dGYKKyAgICBhYmNfCisgMDogYWJjCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHszN2V9YWJjXHh7Mzc2fQorTm8gbWF0Y2gKKyAgICBceHszN2V9XHh7Mzc2fVx4ezM3MX1ceHszOTN9XHh7Mzk0fQorTm8gbWF0Y2gKKyAgICAhXHh7YzB9KytceHtjMX1ceHtjMn0KK05vIG1hdGNoCisgICAgIVx4e2MwfSsrKysrCitObyBtYXRjaAorCisjIFdpdGggUENSRV9VQ1AsIG5vbi1VVEY4IGNoYXJzIHRoYXQgYXJlIDwgMjU2IHN0aWxsIGNoZWNrIHByb3BlcnRpZXMgIAorCisvXGIuLi5cQi91Y3AKKyAgICBhYmNfCisgMDogYWJjCisgICAgIVx4e2MwfSsrXHh7YzF9XHh7YzJ9CisgMDogKytceGMxCisgICAgIVx4e2MwfSsrKysrCisgMDogXHhjMCsrCisgICAgCisjIENhc2VsZXNzIHNpbmdsZSBuZWdhdGVkIGNoYXJhY3RlcnMgPiAxMjcgbmVlZCBVQ1Agc3VwcG9ydCAKKworL1teXHh7MTAwfV0vaSx1dGYKKyAgICBceHsxMDB9XHh7MTAxfVgKKyAwOiBYCisKKy9bXlx4ezEwMH1dKy9pLHV0ZgorICAgIFx4ezEwMH1ceHsxMDF9WFgKKyAwOiBYWAorCisvXlxYL3V0ZgorICAgIEFcPXBzCisgMDogQQorICAgIEFcPXBoCitQYXJ0aWFsIG1hdGNoOiBBCisgICAgQVx4ezMwMH1ceHszMDF9XD1wcworIDA6IEFceHszMDB9XHh7MzAxfQorICAgIEFceHszMDB9XHh7MzAxfVw9cGgKK1BhcnRpYWwgbWF0Y2g6IEFceHszMDB9XHh7MzAxfQorICAgIEFceHszMDF9XD1wcworIDA6IEFceHszMDF9CisgICAgQVx4ezMwMX1cPXBoCitQYXJ0aWFsIG1hdGNoOiBBXHh7MzAxfQorICAgIAorL15cWHsyLDN9L3V0ZgorICAgIEFcPXBzCitQYXJ0aWFsIG1hdGNoOiBBCisgICAgQVw9cGgKK1BhcnRpYWwgbWF0Y2g6IEEKKyAgICBBQVw9cHMKKyAwOiBBQQorICAgIEFBXD1waAorUGFydGlhbCBtYXRjaDogQUEKKyAgICBBXHh7MzAwfVx4ezMwMX1cPXBzCitQYXJ0aWFsIG1hdGNoOiBBXHh7MzAwfVx4ezMwMX0KKyAgICBBXHh7MzAwfVx4ezMwMX1cPXBoCitQYXJ0aWFsIG1hdGNoOiBBXHh7MzAwfVx4ezMwMX0KKyAgICBBXHh7MzAwfVx4ezMwMX1BXHh7MzAwfVx4ezMwMX1cPXBzCisgMDogQVx4ezMwMH1ceHszMDF9QVx4ezMwMH1ceHszMDF9CisgICAgQVx4ezMwMH1ceHszMDF9QVx4ezMwMH1ceHszMDF9XD1waAorUGFydGlhbCBtYXRjaDogQVx4ezMwMH1ceHszMDF9QVx4ezMwMH1ceHszMDF9CisKKy9eXFh7Mn0vdXRmCisgICAgQUFcPXBzCisgMDogQUEKKyAgICBBQVw9cGgKK1BhcnRpYWwgbWF0Y2g6IEFBCisgICAgQVx4ezMwMH1ceHszMDF9QVx4ezMwMH1ceHszMDF9XD1wcworIDA6IEFceHszMDB9XHh7MzAxfUFceHszMDB9XHh7MzAxfQorICAgIEFceHszMDB9XHh7MzAxfUFceHszMDB9XHh7MzAxfVw9cGgKK1BhcnRpYWwgbWF0Y2g6IEFceHszMDB9XHh7MzAxfUFceHszMDB9XHh7MzAxfQorICAgIAorL15cWCsvdXRmCisgICAgQUFcPXBzCisgMDogQUEKKyAgICBBQVw9cGgKK1BhcnRpYWwgbWF0Y2g6IEFBCisKKy9eXFgrP1ovdXRmCisgICAgQUFcPXBzCitQYXJ0aWFsIG1hdGNoOiBBQQorICAgIEFBXD1waAorUGFydGlhbCBtYXRjaDogQUEKKworIyBUaGVzZSBhcmUgdGVzdHMgZm9yIGV4dGVuZGVkIGdyYXBoZW1lIGNsdXN0ZXJzICAKKworL15cWC91dGYsYWZ0ZXJ0ZXh0CisgICAgR1x4ezM0ZX1ceHszNGV9WAorIDA6IEdceHszNGV9XHh7MzRlfQorIDArIFgKKyAgICBceHszNGV9XHh7MzRlfVgKKyAwOiBceHszNGV9XHh7MzRlfQorIDArIFgKKyAgICBceDA0WAorIDA6IFx4ezA0fQorIDArIFgKKyAgICBceHsxMTAwfVgKKyAwOiBceHsxMTAwfQorIDArIFgKKyAgICBceHsxMTAwfVx4ezM0ZX1YCisgMDogXHh7MTEwMH1ceHszNGV9CisgMCsgWAorICAgIFx4ezFiMDR9XHh7MWIwNH1YCisgMDogXHh7MWIwNH1ceHsxYjA0fQorIDArIFgKK1w9IFRoZXNlIG1hdGNoIHVwIHRvIHRoZSByb21hbiBsZXR0ZXJzCisgICAgXHh7MTExMX1ceHsxMTExfUwsTAorIDA6IFx4ezExMTF9XHh7MTExMX0KKyAwKyBMLEwKKyAgICBceHsxMTExfVx4ezExMTF9XHh7MTE2OX1MLEwsVgorIDA6IFx4ezExMTF9XHh7MTExMX1ceHsxMTY5fQorIDArIEwsTCxWCisgICAgXHh7MTExMX1ceHthZTRjfUwsIExWCisgMDogXHh7MTExMX1ceHthZTRjfQorIDArIEwsIExWCisgICAgXHh7MTExMX1ceHthZDg5fUwsIExWVAorIDA6IFx4ezExMTF9XHh7YWQ4OX0KKyAwKyBMLCBMVlQKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTE2OX1MLCBMViwgVgorIDA6IFx4ezExMTF9XHh7YWU0Y31ceHsxMTY5fQorIDArIEwsIExWLCBWCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExNjl9XHh7MTE2OX1MLCBMViwgViwgVgorIDA6IFx4ezExMTF9XHh7YWU0Y31ceHsxMTY5fVx4ezExNjl9CisgMCsgTCwgTFYsIFYsIFYKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTE2OX1ceHsxMWZlfUwsIExWLCBWLCBUCisgMDogXHh7MTExMX1ceHthZTRjfVx4ezExNjl9XHh7MTFmZX0KKyAwKyBMLCBMViwgViwgVAorICAgIFx4ezExMTF9XHh7YWQ4OX1ceHsxMWZlfUwsIExWVCwgVAorIDA6IFx4ezExMTF9XHh7YWQ4OX1ceHsxMWZlfQorIDArIEwsIExWVCwgVAorICAgIFx4ezExMTF9XHh7YWQ4OX1ceHsxMWZlfVx4ezExZmV9TCwgTFZULCBULCBUCisgMDogXHh7MTExMX1ceHthZDg5fVx4ezExZmV9XHh7MTFmZX0KKyAwKyBMLCBMVlQsIFQsIFQKKyAgICBceHthZDg5fVx4ezExZmV9XHh7MTFmZX1MVlQsIFQsIFQKKyAwOiBceHthZDg5fVx4ezExZmV9XHh7MTFmZX0KKyAwKyBMVlQsIFQsIFQKK1w9IFRoZXNlIG1hdGNoIGp1c3QgdGhlIGZpcnN0IGNvZGVwb2ludCAoaW52YWxpZCBzZXF1ZW5jZSkKKyAgICBceHsxMTExfVx4ezExZmV9TCwgVAorIDA6IFx4ezExMTF9CisgMCsgXHh7MTFmZX1MLCBUCisgICAgXHh7YWU0Y31ceHsxMTExfUxWLCBMCisgMDogXHh7YWU0Y30KKyAwKyBceHsxMTExfUxWLCBMCisgICAgXHh7YWU0Y31ceHthZTRjfUxWLCBMVgorIDA6IFx4e2FlNGN9CisgMCsgXHh7YWU0Y31MViwgTFYKKyAgICBceHthZTRjfVx4e2FkODl9TFYsIExWVAorIDA6IFx4e2FlNGN9CisgMCsgXHh7YWQ4OX1MViwgTFZUCisgICAgXHh7MTE2OX1ceHsxMTExfVYsIEwKKyAwOiBceHsxMTY5fQorIDArIFx4ezExMTF9ViwgTAorICAgIFx4ezExNjl9XHh7YWU0Y31WLCBMVgorIDA6IFx4ezExNjl9CisgMCsgXHh7YWU0Y31WLCBMVgorICAgIFx4ezExNjl9XHh7YWQ4OX1WLCBMVlQKKyAwOiBceHsxMTY5fQorIDArIFx4e2FkODl9ViwgTFZUCisgICAgXHh7YWQ4OX1ceHsxMTExfUxWVCwgTAorIDA6IFx4e2FkODl9CisgMCsgXHh7MTExMX1MVlQsIEwKKyAgICBceHthZDg5fVx4ezExNjl9TFZULCBWCisgMDogXHh7YWQ4OX0KKyAwKyBceHsxMTY5fUxWVCwgVgorICAgIFx4e2FkODl9XHh7YWU0Y31MVlQsIExWCisgMDogXHh7YWQ4OX0KKyAwKyBceHthZTRjfUxWVCwgTFYKKyAgICBceHthZDg5fVx4e2FkODl9TFZULCBMVlQKKyAwOiBceHthZDg5fQorIDArIFx4e2FkODl9TFZULCBMVlQKKyAgICBceHsxMWZlfVx4ezExMTF9VCwgTAorIDA6IFx4ezExZmV9CisgMCsgXHh7MTExMX1ULCBMCisgICAgXHh7MTFmZX1ceHsxMTY5fVQsIFYKKyAwOiBceHsxMWZlfQorIDArIFx4ezExNjl9VCwgVgorICAgIFx4ezExZmV9XHh7YWU0Y31ULCBMVgorIDA6IFx4ezExZmV9CisgMCsgXHh7YWU0Y31ULCBMVgorICAgIFx4ezExZmV9XHh7YWQ4OX1ULCBMVlQKKyAwOiBceHsxMWZlfQorIDArIFx4e2FkODl9VCwgTFZUCitcPSBUZXN0IGV4dGVuZCBhbmQgc3BhY2luZyBtYXJrCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezA3MTF9TCwgTFYsIGV4dGVuZAorIDA6IFx4ezExMTF9XHh7YWU0Y31ceHs3MTF9CisgMCsgTCwgTFYsIGV4dGVuZAorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxYjA0fUwsIExWLCBzcGFjaW5nIG1hcmsKKyAwOiBceHsxMTExfVx4e2FlNGN9XHh7MWIwNH0KKyAwKyBMLCBMViwgc3BhY2luZyBtYXJrCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezFiMDR9XHh7MDcxMX1ceHsxYjA0fUwsIExWLCBzcGFjaW5nIG1hcmssIGV4dGVuZCwgc3BhY2luZyBtYXJrCisgMDogXHh7MTExMX1ceHthZTRjfVx4ezFiMDR9XHh7NzExfVx4ezFiMDR9CisgMCsgTCwgTFYsIHNwYWNpbmcgbWFyaywgZXh0ZW5kLCBzcGFjaW5nIG1hcmsKK1w9IFRlc3QgQ1IsIExGLCBhbmQgY29udHJvbAorICAgIFx4MGRceHswNzExfUNSLCBleHRlbmQKKyAwOiBceHswZH0KKyAwKyBceHs3MTF9Q1IsIGV4dGVuZAorICAgIFx4MGRceHsxYjA0fUNSLCBzcGFjaW5nbWFyaworIDA6IFx4ezBkfQorIDArIFx4ezFiMDR9Q1IsIHNwYWNpbmdtYXJrCisgICAgXHgwYVx4ezA3MTF9TEYsIGV4dGVuZAorIDA6IFx4ezBhfQorIDArIFx4ezcxMX1MRiwgZXh0ZW5kCisgICAgXHgwYVx4ezFiMDR9TEYsIHNwYWNpbmdtYXJrCisgMDogXHh7MGF9CisgMCsgXHh7MWIwNH1MRiwgc3BhY2luZ21hcmsKKyAgICBceDBiXHh7MDcxMX1Db250cm9sLCBleHRlbmQKKyAwOiBceHswYn0KKyAwKyBceHs3MTF9Q29udHJvbCwgZXh0ZW5kCisgICAgXHgwOVx4ezFiMDR9Q29udHJvbCwgc3BhY2luZ21hcmsKKyAwOiBceHswOX0KKyAwKyBceHsxYjA0fUNvbnRyb2wsIHNwYWNpbmdtYXJrCitcPSBUaGVyZSBhcmUgbm8gUHJlcGVuZCBjaGFyYWN0ZXJzLCBzbyB3ZSBjYW4ndCB0ZXN0IFByZXBlbmQsIENSCisgICAgCisvXig/PlxYezJ9KVgvdXRmLGFmdGVydGV4dAorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorIDA6IFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorIDArIAorICAgIAorL15cWHsyLDR9WC91dGYsYWZ0ZXJ0ZXh0CisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgMDogXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgMCsgCisgICAgXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorIDA6IFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAwKyAKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorIDA6IFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgMCsgCisKKy9eXFh7Miw0fT9YL3V0ZixhZnRlcnRleHQKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAwOiBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAwKyAKKyAgICBceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgMDogXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9WAorIDArIAorICAgIFx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31YCisgMDogXHh7MTExMX1ceHthZTRjfVx4ezExMTF9XHh7YWU0Y31ceHsxMTExfVx4e2FlNGN9XHh7MTExMX1ceHthZTRjfVgKKyAwKyAKKworL1x4ezFlOWV9Ky9pLHV0ZgorICAgIFx4ezFlOWV9XHh7MDBkZn0KKyAwOiBceHsxZTllfVx4e2RmfQorCisvW3pceHsxZTllfV0rL2ksdXRmCisgICAgXHh7MWU5ZX1ceHswMGRmfQorIDA6IFx4ezFlOWV9XHh7ZGZ9CisKKy9ceHswMGRmfSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisgMDogXHh7MWU5ZX1ceHtkZn0KKworL1t6XHh7MDBkZn1dKy9pLHV0ZgorICAgIFx4ezFlOWV9XHh7MDBkZn0KKyAwOiBceHsxZTllfVx4e2RmfQorCisvXHh7MWY4OH0rL2ksdXRmCisgICAgXHh7MWY4OH1ceHsxZjgwfQorIDA6IFx4ezFmODh9XHh7MWY4MH0KKworL1t6XHh7MWY4OH1dKy9pLHV0ZgorICAgIFx4ezFmODh9XHh7MWY4MH0KKyAwOiBceHsxZjg4fVx4ezFmODB9CisKKyMgUGVybCBtYXRjaGVzIHRoZXNlIAorCisvXHh7MDBiNX0rL2ksdXRmCisgICAgXHh7MDBiNX1ceHswMzljfVx4ezAzYmN9CisgMDogXHh7YjV9XHh7MzljfVx4ezNiY30KKworL1x4ezAzOWN9Ky9pLHV0ZgorICAgIFx4ezAwYjV9XHh7MDM5Y31ceHswM2JjfQorIDA6IFx4e2I1fVx4ezM5Y31ceHszYmN9CisKKy9ceHswM2JjfSsvaSx1dGYKKyAgICBceHswMGI1fVx4ezAzOWN9XHh7MDNiY30KKyAwOiBceHtiNX1ceHszOWN9XHh7M2JjfQorCisKKy9ceHswMGM1fSsvaSx1dGYKKyAgICBceHswMGM1fVx4ezAwZTV9XHh7MjEyYn0KKyAwOiBceHtjNX1ceHtlNX1ceHsyMTJifQorCisvXHh7MDBlNX0rL2ksdXRmCisgICAgXHh7MDBjNX1ceHswMGU1fVx4ezIxMmJ9CisgMDogXHh7YzV9XHh7ZTV9XHh7MjEyYn0KKworL1x4ezIxMmJ9Ky9pLHV0ZgorICAgIFx4ezAwYzV9XHh7MDBlNX1ceHsyMTJifQorIDA6IFx4e2M1fVx4e2U1fVx4ezIxMmJ9CisKKy9ceHswMWM0fSsvaSx1dGYKKyAgICBceHswMWM0fVx4ezAxYzV9XHh7MDFjNn0KKyAwOiBceHsxYzR9XHh7MWM1fVx4ezFjNn0KKworL1x4ezAxYzV9Ky9pLHV0ZgorICAgIFx4ezAxYzR9XHh7MDFjNX1ceHswMWM2fQorIDA6IFx4ezFjNH1ceHsxYzV9XHh7MWM2fQorCisvXHh7MDFjNn0rL2ksdXRmCisgICAgXHh7MDFjNH1ceHswMWM1fVx4ezAxYzZ9CisgMDogXHh7MWM0fVx4ezFjNX1ceHsxYzZ9CisKKy9ceHswMWM3fSsvaSx1dGYKKyAgICBceHswMWM3fVx4ezAxYzh9XHh7MDFjOX0KKyAwOiBceHsxYzd9XHh7MWM4fVx4ezFjOX0KKworL1x4ezAxYzh9Ky9pLHV0ZgorICAgIFx4ezAxYzd9XHh7MDFjOH1ceHswMWM5fQorIDA6IFx4ezFjN31ceHsxYzh9XHh7MWM5fQorCisvXHh7MDFjOX0rL2ksdXRmCisgICAgXHh7MDFjN31ceHswMWM4fVx4ezAxYzl9CisgMDogXHh7MWM3fVx4ezFjOH1ceHsxYzl9CisKKworL1x4ezAxY2F9Ky9pLHV0ZgorICAgIFx4ezAxY2F9XHh7MDFjYn1ceHswMWNjfQorIDA6IFx4ezFjYX1ceHsxY2J9XHh7MWNjfQorCisvXHh7MDFjYn0rL2ksdXRmCisgICAgXHh7MDFjYX1ceHswMWNifVx4ezAxY2N9CisgMDogXHh7MWNhfVx4ezFjYn1ceHsxY2N9CisKKy9ceHswMWNjfSsvaSx1dGYKKyAgICBceHswMWNhfVx4ezAxY2J9XHh7MDFjY30KKyAwOiBceHsxY2F9XHh7MWNifVx4ezFjY30KKworL1x4ezAxZjF9Ky9pLHV0ZgorICAgIFx4ezAxZjF9XHh7MDFmMn1ceHswMWYzfQorIDA6IFx4ezFmMX1ceHsxZjJ9XHh7MWYzfQorCisvXHh7MDFmMn0rL2ksdXRmCisgICAgXHh7MDFmMX1ceHswMWYyfVx4ezAxZjN9CisgMDogXHh7MWYxfVx4ezFmMn1ceHsxZjN9CisKKy9ceHswMWYzfSsvaSx1dGYKKyAgICBceHswMWYxfVx4ezAxZjJ9XHh7MDFmM30KKyAwOiBceHsxZjF9XHh7MWYyfVx4ezFmM30KKworL1x4ezAzNDV9Ky9pLHV0ZgorICAgIFx4ezAzNDV9XHh7MDM5OX1ceHswM2I5fVx4ezFmYmV9CisgMDogXHh7MzQ1fVx4ezM5OX1ceHszYjl9XHh7MWZiZX0KKworL1x4ezAzOTl9Ky9pLHV0ZgorICAgIFx4ezAzNDV9XHh7MDM5OX1ceHswM2I5fVx4ezFmYmV9CisgMDogXHh7MzQ1fVx4ezM5OX1ceHszYjl9XHh7MWZiZX0KKworL1x4ezAzYjl9Ky9pLHV0ZgorICAgIFx4ezAzNDV9XHh7MDM5OX1ceHswM2I5fVx4ezFmYmV9CisgMDogXHh7MzQ1fVx4ezM5OX1ceHszYjl9XHh7MWZiZX0KKworL1x4ezFmYmV9Ky9pLHV0ZgorICAgIFx4ezAzNDV9XHh7MDM5OX1ceHswM2I5fVx4ezFmYmV9CisgMDogXHh7MzQ1fVx4ezM5OX1ceHszYjl9XHh7MWZiZX0KKworL1x4ezAzOTJ9Ky9pLHV0ZgorICAgIFx4ezAzOTJ9XHh7MDNiMn1ceHswM2QwfQorIDA6IFx4ezM5Mn1ceHszYjJ9XHh7M2QwfQorCisvXHh7MDNiMn0rL2ksdXRmCisgICAgXHh7MDM5Mn1ceHswM2IyfVx4ezAzZDB9CisgMDogXHh7MzkyfVx4ezNiMn1ceHszZDB9CisKKy9ceHswM2QwfSsvaSx1dGYKKyAgICBceHswMzkyfVx4ezAzYjJ9XHh7MDNkMH0KKyAwOiBceHszOTJ9XHh7M2IyfVx4ezNkMH0KKyAgICAKKworL1x4ezAzOTV9Ky9pLHV0ZgorICAgIFx4ezAzOTV9XHh7MDNiNX1ceHswM2Y1fQorIDA6IFx4ezM5NX1ceHszYjV9XHh7M2Y1fQorCisvXHh7MDNiNX0rL2ksdXRmCisgICAgXHh7MDM5NX1ceHswM2I1fVx4ezAzZjV9CisgMDogXHh7Mzk1fVx4ezNiNX1ceHszZjV9CisKKy9ceHswM2Y1fSsvaSx1dGYKKyAgICBceHswMzk1fVx4ezAzYjV9XHh7MDNmNX0KKyAwOiBceHszOTV9XHh7M2I1fVx4ezNmNX0KKworL1x4ezAzOTh9Ky9pLHV0ZgorICAgIFx4ezAzOTh9XHh7MDNiOH1ceHswM2QxfVx4ezAzZjR9CisgMDogXHh7Mzk4fVx4ezNiOH1ceHszZDF9XHh7M2Y0fQorCisvXHh7MDNiOH0rL2ksdXRmCisgICAgXHh7MDM5OH1ceHswM2I4fVx4ezAzZDF9XHh7MDNmNH0KKyAwOiBceHszOTh9XHh7M2I4fVx4ezNkMX1ceHszZjR9CisKKy9ceHswM2QxfSsvaSx1dGYKKyAgICBceHswMzk4fVx4ezAzYjh9XHh7MDNkMX1ceHswM2Y0fQorIDA6IFx4ezM5OH1ceHszYjh9XHh7M2QxfVx4ezNmNH0KKworL1x4ezAzZjR9Ky9pLHV0ZgorICAgIFx4ezAzOTh9XHh7MDNiOH1ceHswM2QxfVx4ezAzZjR9CisgMDogXHh7Mzk4fVx4ezNiOH1ceHszZDF9XHh7M2Y0fQorCisvXHh7MDM5YX0rL2ksdXRmCisgICAgXHh7MDM5YX1ceHswM2JhfVx4ezAzZjB9CisgMDogXHh7MzlhfVx4ezNiYX1ceHszZjB9CisKKy9ceHswM2JhfSsvaSx1dGYKKyAgICBceHswMzlhfVx4ezAzYmF9XHh7MDNmMH0KKyAwOiBceHszOWF9XHh7M2JhfVx4ezNmMH0KKworL1x4ezAzZjB9Ky9pLHV0ZgorICAgIFx4ezAzOWF9XHh7MDNiYX1ceHswM2YwfQorIDA6IFx4ezM5YX1ceHszYmF9XHh7M2YwfQorICAgIAorL1x4ezAzYTB9Ky9pLHV0ZgorICAgIFx4ezAzYTB9XHh7MDNjMH1ceHswM2Q2fQorIDA6IFx4ezNhMH1ceHszYzB9XHh7M2Q2fQorCisvXHh7MDNjMH0rL2ksdXRmCisgICAgXHh7MDNhMH1ceHswM2MwfVx4ezAzZDZ9CisgMDogXHh7M2EwfVx4ezNjMH1ceHszZDZ9CisKKy9ceHswM2Q2fSsvaSx1dGYKKyAgICBceHswM2EwfVx4ezAzYzB9XHh7MDNkNn0KKyAwOiBceHszYTB9XHh7M2MwfVx4ezNkNn0KKworL1x4ezAzYTF9Ky9pLHV0ZgorICAgIFx4ezAzYTF9XHh7MDNjMX1ceHswM2YxfQorIDA6IFx4ezNhMX1ceHszYzF9XHh7M2YxfQorCisvXHh7MDNjMX0rL2ksdXRmCisgICAgXHh7MDNhMX1ceHswM2MxfVx4ezAzZjF9CisgMDogXHh7M2ExfVx4ezNjMX1ceHszZjF9CisKKy9ceHswM2YxfSsvaSx1dGYKKyAgICBceHswM2ExfVx4ezAzYzF9XHh7MDNmMX0KKyAwOiBceHszYTF9XHh7M2MxfVx4ezNmMX0KKworL1x4ezAzYTN9Ky9pLHV0ZgorICAgIFx4ezAzQTN9XHh7MDNDMn1ceHswM0MzfQorIDA6IFx4ezNhM31ceHszYzJ9XHh7M2MzfQorCisvXHh7MDNjMn0rL2ksdXRmCisgICAgXHh7MDNBM31ceHswM0MyfVx4ezAzQzN9CisgMDogXHh7M2EzfVx4ezNjMn1ceHszYzN9CisKKy9ceHswM2MzfSsvaSx1dGYKKyAgICBceHswM0EzfVx4ezAzQzJ9XHh7MDNDM30KKyAwOiBceHszYTN9XHh7M2MyfVx4ezNjM30KKworL1x4ezAzYTZ9Ky9pLHV0ZgorICAgIFx4ezAzYTZ9XHh7MDNjNn1ceHswM2Q1fQorIDA6IFx4ezNhNn1ceHszYzZ9XHh7M2Q1fQorCisvXHh7MDNjNn0rL2ksdXRmCisgICAgXHh7MDNhNn1ceHswM2M2fVx4ezAzZDV9CisgMDogXHh7M2E2fVx4ezNjNn1ceHszZDV9CisKKy9ceHswM2Q1fSsvaSx1dGYKKyAgICBceHswM2E2fVx4ezAzYzZ9XHh7MDNkNX0KKyAwOiBceHszYTZ9XHh7M2M2fVx4ezNkNX0KKworL1x4ezAzYzl9Ky9pLHV0ZgorICAgIFx4ezAzYzl9XHh7MDNhOX1ceHsyMTI2fQorIDA6IFx4ezNjOX1ceHszYTl9XHh7MjEyNn0KKworL1x4ezAzYTl9Ky9pLHV0ZgorICAgIFx4ezAzYzl9XHh7MDNhOX1ceHsyMTI2fQorIDA6IFx4ezNjOX1ceHszYTl9XHh7MjEyNn0KKworL1x4ezIxMjZ9Ky9pLHV0ZgorICAgIFx4ezAzYzl9XHh7MDNhOX1ceHsyMTI2fQorIDA6IFx4ezNjOX1ceHszYTl9XHh7MjEyNn0KKyAgICAKKy9ceHsxZTYwfSsvaSx1dGYKKyAgICBceHsxZTYwfVx4ezFlNjF9XHh7MWU5Yn0KKyAwOiBceHsxZTYwfVx4ezFlNjF9XHh7MWU5Yn0KKworL1x4ezFlNjF9Ky9pLHV0ZgorICAgIFx4ezFlNjB9XHh7MWU2MX1ceHsxZTlifQorIDA6IFx4ezFlNjB9XHh7MWU2MX1ceHsxZTlifQorCisvXHh7MWU5Yn0rL2ksdXRmCisgICAgXHh7MWU2MH1ceHsxZTYxfVx4ezFlOWJ9CisgMDogXHh7MWU2MH1ceHsxZTYxfVx4ezFlOWJ9CisgICAgCisvXHh7MWU5ZX0rL2ksdXRmCisgICAgXHh7MWU5ZX1ceHswMGRmfQorIDA6IFx4ezFlOWV9XHh7ZGZ9CisKKy9ceHswMGRmfSsvaSx1dGYKKyAgICBceHsxZTllfVx4ezAwZGZ9CisgMDogXHh7MWU5ZX1ceHtkZn0KKyAgICAKKy9ceHsxZjg4fSsvaSx1dGYKKyAgICBceHsxZjg4fVx4ezFmODB9CisgMDogXHh7MWY4OH1ceHsxZjgwfQorCisvXHh7MWY4MH0rL2ksdXRmCisgICAgXHh7MWY4OH1ceHsxZjgwfQorIDA6IFx4ezFmODh9XHh7MWY4MH0KKworL1x4ezAwNGJ9Ky9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorIDA6IEtrXHh7MjEyYX0KKworL1x4ezAwNmJ9Ky9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorIDA6IEtrXHh7MjEyYX0KKworL1x4ezIxMmF9Ky9pLHV0ZgorICAgIFx4ezAwNGJ9XHh7MDA2Yn1ceHsyMTJhfQorIDA6IEtrXHh7MjEyYX0KKworL1x4ezAwNTN9Ky9pLHV0ZgorICAgIFx4ezAwNTN9XHh7MDA3M31ceHswMTdmfQorIDA6IFNzXHh7MTdmfQorCisvXHh7MDA3M30rL2ksdXRmCisgICAgXHh7MDA1M31ceHswMDczfVx4ezAxN2Z9CisgMDogU3NceHsxN2Z9CisKKy9ceHswMTdmfSsvaSx1dGYKKyAgICBceHswMDUzfVx4ezAwNzN9XHh7MDE3Zn0KKyAwOiBTc1x4ezE3Zn0KKworL2lzdC9pLHV0ZgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgaWt0CitObyBtYXRjaAorCisvaXMrdC9pLHV0ZgorICAgIGlTc1x4ezE3Zn10CisgMDogaVNzXHh7MTdmfXQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGlrdAorTm8gbWF0Y2gKKworL2lzKz90L2ksdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBpa3QKK05vIG1hdGNoCisKKy9pcz90L2ksdXRmCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBpa3QKK05vIG1hdGNoCisKKy9pc3syfXQvaSx1dGYKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIGlza3QKK05vIG1hdGNoCisKKy9eXHB7WHVjfS91dGYKKyAgICAkYWJjCisgMDogJAorICAgIEBhYmMKKyAwOiBACisgICAgYGFiYworIDA6IGAKKyAgICBceHsxMjM0fWFiYworIDA6IFx4ezEyMzR9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBhYmMKK05vIG1hdGNoCisKKy9eXHB7WHVjfSsvdXRmCisgICAgJEBgXHh7YTB9XHh7MTIzNH1ceHtlMDAwfSoqCisgMDogJEBgXHh7YTB9XHh7MTIzNH1ceHtlMDAwfQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7OWZ9CitObyBtYXRjaAorCisvXlxwe1h1Y30rPy91dGYKKyAgICAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9KioKKyAwOiAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9CisgMTogJEBgXHh7YTB9XHh7MTIzNH0KKyAyOiAkQGBceHthMH0KKyAzOiAkQGAKKyA0OiAkQAorIDU6ICQKK1w9IEV4cGVjdCBubyBtYXRjaAorICAgIFx4ezlmfQorTm8gbWF0Y2gKKworL15ccHtYdWN9Kz9cKi91dGYKKyAgICAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9KioKKyAwOiAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9KgorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7OWZ9CitObyBtYXRjaAorCisvXlxwe1h1Y30rKy91dGYKKyAgICAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9KioKKyAwOiAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHs5Zn0KK05vIG1hdGNoCisKKy9eXHB7WHVjfXszLDV9L3V0ZgorICAgICRAYFx4e2EwfVx4ezEyMzR9XHh7ZTAwMH0qKgorIDA6ICRAYFx4e2EwfVx4ezEyMzR9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHs5Zn0KK05vIG1hdGNoCisKKy9eXHB7WHVjfXszLDV9Py91dGYKKyAgICAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9KioKKyAwOiAkQGBceHthMH1ceHsxMjM0fQorIDE6ICRAYFx4e2EwfQorIDI6ICRAYAorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgXHh7OWZ9CitObyBtYXRjaAorCisvXltccHtYdWN9XS91dGYKKyAgICAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9KioKKyAwOiAkCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHs5Zn0KK05vIG1hdGNoCisKKy9eW1xwe1h1Y31dKy91dGYKKyAgICAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9KioKKyAwOiAkQGBceHthMH1ceHsxMjM0fVx4e2UwMDB9CitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICBceHs5Zn0KK05vIG1hdGNoCisKKy9eXFB7WHVjfS91dGYKKyAgICBhYmMKKyAwOiBhCitcPSBFeHBlY3Qgbm8gbWF0Y2gKKyAgICAkYWJjCitObyBtYXRjaAorICAgIEBhYmMKK05vIG1hdGNoCisgICAgYGFiYworTm8gbWF0Y2gKKyAgICBceHsxMjM0fWFiYworTm8gbWF0Y2gKKworL15bXFB7WHVjfV0vdXRmCisgICAgYWJjCisgMDogYQorXD0gRXhwZWN0IG5vIG1hdGNoCisgICAgJGFiYworTm8gbWF0Y2gKKyAgICBAYWJjCitObyBtYXRjaAorICAgIGBhYmMKK05vIG1hdGNoCisgICAgXHh7MTIzNH1hYmMKK05vIG1hdGNoCisKKy9eQVxzK1ovdXRmLHVjcAorICAgIEFceHsyMDA1fVoKKyAwOiBBXHh7MjAwNX1aCisgICAgQVx4ezg1fVx4ezE4MGV9XHh7MjAwNX1aCisgMDogQVx4ezg1fVx4ezE4MGV9XHh7MjAwNX1aCisKKy9eQVtcc10rWi91dGYsdWNwCisgICAgQVx4ezIwMDV9WgorIDA6IEFceHsyMDA1fVoKKyAgICBBXHh7ODV9XHh7MTgwZX1ceHsyMDA1fVoKKyAwOiBBXHh7ODV9XHh7MTgwZX1ceHsyMDA1fVoKKworLyg/PD1ceHsxMDB9KVx4ezIwMH0oPz1ceHszMDB9KS91dGYsYWxsdXNlZHRleHQKKyAgICBceHsxMDB9XHh7MjAwfVx4ezMwMH0KKyAwOiBceHsxMDB9XHh7MjAwfVx4ezMwMH0KKyAgICA8PDw8PDw8ICAgICAgID4+Pj4+Pj4KKworIyBFbmQgb2YgdGVzdGlucHV0NwpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtMTYtMiBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTE2LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU2NjliYgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTE2LTIKQEAgLTAsMCArMSwxMDMwIEBACisjIFRoZXJlIGFyZSB0d28gc29ydHMgb2YgcGF0dGVybnMgaW4gdGhpcyB0ZXN0LiBBIG51bWJlciBvZiB0aGVtIGFyZQorIyByZXByZXNlbnRhdGl2ZSBwYXR0ZXJucyB3aG9zZSBsZW5ndGhzIGFuZCBvZmZzZXRzIGFyZSBjaGVja2VkLiBUaGlzIGlzIGp1c3QgYQorIyBkb3VibGVjaGVjayB0ZXN0IHRvIGVuc3VyZSB0aGUgc2l6ZXMgZG9uJ3QgZ28gaG9ycmlibHkgd3Jvbmcgd2hlbiBzb21ldGhpbmcKKyMgaXMgY2hhbmdlZC4gVGhlIG9wZXJhdGlvbiBvZiB0aGVzZSBwYXR0ZXJucyBpcyBjaGVja2VkIGluIG90aGVyIHRlc3RzLgorIworIyBUaGlzIGZpbGUgYWxzbyBjb250YWlucyB0ZXN0cyB3aG9zZSBvdXRwdXQgdmFyaWVzIHdpdGggY29kZSB1bml0IHNpemUgYW5kL29yCisjIGxpbmsgc2l6ZS4gVW5pY29kZSBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGVzZSB0ZXN0cy4gVGhlcmUgYXJlIHNlcGFyYXRlCisjIG91dHB1dCBmaWxlcyBmb3IgZWFjaCBjb2RlIHVuaXQgc2l6ZSBhbmQgbGluayBzaXplLgorCisjcGF0dGVybiBmdWxsYmluY29kZSxtZW1vcnkKKworLygoP2kpYikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICA1IENCcmEgMQorICA1ICAvaSBiCisgIDcgICA1IEtldAorICA5ICAgOSBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/cykoLipYfF5CKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNiBCcmEKKyAgMiAgIDcgQ0JyYSAxCisgIDUgICAgIEFsbEFueSoKKyAgNyAgICAgWAorICA5ICAgNSBBbHQKKyAxMSAgICAgXgorIDEyICAgICBCCisgMTQgIDEyIEtldAorIDE2ICAxNiBLZXQKKyAxOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/czouKlh8XkIpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE1IEJyYQorICAyICAgNiBCcmEKKyAgNCAgICAgQWxsQW55KgorICA2ICAgICBYCisgIDggICA1IEFsdAorIDEwICAgICBeCisgMTEgICAgIEIKKyAxMyAgMTEgS2V0CisgMTUgIDE1IEtldAorIDE3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXltbOmFsbnVtOl1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0NgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDIwIEJyYQorICAyICAgICBeCisgIDMgICAgIFswLTlBLVphLXpdCisgMjAgIDIwIEtldAorIDIyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvIy9JeAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICAyIEJyYQorICAyICAgMiBLZXQKKyAgNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworT3B0aW9uczogZXh0ZW5kZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvYSMvSXgKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgYQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogZXh0ZW5kZWQKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy94PysvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIHg/KworICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL3grKy8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgeCsrCisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisveHsxLDN9Ky8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNyBCcmEKKyAgMiAgICAgeAorICA0ICAgICB4ezAsMn0rCisgIDcgICA3IEtldAorICA5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKHgpKisvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTAgQnJhCisgIDIgICAgIEJyYXBvc3plcm8KKyAgMyAgIDUgQ0JyYVBvcyAxCisgIDYgICAgIHgKKyAgOCAgIDUgS2V0UnBvcworIDEwICAxMCBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL14oKGErKSg/VSkoW2FiXSspKD8tVSkoW2JjXSspKFx3KikpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA2OCBCcmEKKyAgMiAgICAgXgorICAzICA2MyBDQnJhIDEKKyAgNiAgIDUgQ0JyYSAyCisgIDkgICAgIGErCisgMTEgICA1IEtldAorIDEzICAyMSBDQnJhIDMKKyAxNiAgICAgW2FiXSs/CisgMzQgIDIxIEtldAorIDM2ICAyMSBDQnJhIDQKKyAzOSAgICAgW2JjXSsKKyA1NyAgMjEgS2V0CisgNTkgICA1IENCcmEgNQorIDYyICAgICBcdyorCisgNjQgICA1IEtldAorIDY2ICA2MyBLZXQKKyA2OCAgNjggS2V0CisgNzAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyI4SlwkV0VcPFwuclhcK2l4XFtkMWJcIUhcI1w/dlYwdnJLXDpaSDFcPTJNXD5pVlw7XD9hUGhGQlw8XCp2V1xAUVdcQHNPOVx9Y2ZaQVwtaVwnd1wlaEtkNmd0MVVKUFwsMTVfXCNRWVwkTVxeTXNzX1VcL1xdXCZMSzlcWzV2UXViXF53XFtLRERcPEVqbWhVWlw/XC5ha3AyZEZcPnFtalw7Mlx9WVdGZFl4XC5BcFxdaGpDUFRQXChuMjhrXCszXDtvXCZXWHFzXC9nT1hkclwkXDpyXCdkbzBcO2I0Y1woZl9Hclw9XCJcXDRcKVxbMDFUN2FqUUp2TFwkV1x+bUxfc1NcLzRoXDp4XCpcW1pOXD1LTHNcJkw1elhcL1wvXD5pdFwsb1w6YVVcKFw7Wlw+cFdcJlQ3b1BcJzJLXF5FXDp4OVwnY1xbXCV6XC1cLDY0SlE1QWVIX0dcI0tpalVLZ2hRd1xeXFx2ZWEzYVw/a2thX0dcJDhcI1xgXCpreW5zeHpCTHJ1XCdcXWtfXFs3RnJWeFx9XF5cPVwkYmx4XD5zXC1OXCVqXDtEXCphWkRuc3dcOllLWlwlUVwuS25lOVwjaFBcP1wrYjNcKFNPdkxcLFxeXDtcJnU1XEBcPzVDNUJoYlw9bVwtdkVoX0wxNUpsXF1VXCkwUlA2XHtxXCVMXF5fejVFXCdEdzZYXGIiCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE2NDgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDgyMSBCcmEKKyAgMiAgICAgOEokV0U8LnJYK2l4W2QxYiFIIz92VjB2cks6WkgxPTJNPmlWOz9hUGhGQjwqdldAUVdAc085fWNmWkEtaSd3JWhLZDZndDFVSlAsMTVfI1FZJE1eTXNzX1UvXSZMSzlbNXZRdWJed1tLREQ8RWptaFVaPy5ha3AyZEY+cW1qOzJ9WVdGZFl4LkFwXWhqQ1BUUChuMjhrKzM7byZXWHFzL2dPWGRyJDpyJ2RvMDtiNGMoZl9Hcj0iXDQpWzAxVDdhalFKdkwkV35tTF9zUy80aDp4KltaTj1LTHMmTDV6WC8vPml0LG86YVUoO1o+cFcmVDdvUCcyS15FOng5J2NbJXotLDY0SlE1QWVIX0cjS2lqVUtnaFF3Xlx2ZWEzYT9ra2FfRyQ4I2Aqa3luc3h6QkxydSdda19bN0ZyVnh9Xj0kYmx4PnMtTiVqO0QqYVpEbnN3OllLWiVRLktuZTkjaFA/K2IzKFNPdkwsXjsmdTVAPzVDNUJoYj1tLXZFaF9MMTVKbF1VKTBSUDZ7cSVMXl96NUUnRHc2WAorODIwICAgICBcYgorODIxIDgyMSBLZXQKKzgyMyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIlwkXDxcLlhcK2l4XFtkMWJcIUhcI1w/dlYwdnJLXDpaSDFcPTJNXD5pVlw7XD9hUGhGQlw8XCp2V1xAUVdcQHNPOVx9Y2ZaQVwtaVwnd1wlaEtkNmd0MVVKUFwsMTVfXCNRWVwkTVxeTXNzX1VcL1xdXCZMSzlcWzV2UXViXF53XFtLRERcPEVqbWhVWlw/XC5ha3AyZEZcPnFtalw7Mlx9WVdGZFl4XC5BcFxdaGpDUFRQXChuMjhrXCszXDtvXCZXWHFzXC9nT1hkclwkXDpyXCdkbzBcO2I0Y1woZl9Hclw9XCJcXDRcKVxbMDFUN2FqUUp2TFwkV1x+bUxfc1NcLzRoXDp4XCpcW1pOXD1LTHNcJkw1elhcL1wvXD5pdFwsb1w6YVVcKFw7Wlw+cFdcJlQ3b1BcJzJLXF5FXDp4OVwnY1xbXCV6XC1cLDY0SlE1QWVIX0dcI0tpalVLZ2hRd1xeXFx2ZWEzYVw/a2thX0dcJDhcI1xgXCpreW5zeHpCTHJ1XCdcXWtfXFs3RnJWeFx9XF5cPVwkYmx4XD5zXC1OXCVqXDtEXCphWkRuc3dcOllLWlwlUVwuS25lOVwjaFBcP1wrYjNcKFNPdkxcLFxeXDtcJnU1XEBcPzVDNUJoYlw9bVwtdkVoX0wxNUpsXF1VXCkwUlA2XHtxXCVMXF5fejVFXCdEdzZYXGIiCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE2MjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDgxMSBCcmEKKyAgMiAgICAgJDwuWCtpeFtkMWIhSCM/dlYwdnJLOlpIMT0yTT5pVjs/YVBoRkI8KnZXQFFXQHNPOX1jZlpBLWkndyVoS2Q2Z3QxVUpQLDE1XyNRWSRNXk1zc19VL10mTEs5WzV2UXViXndbS0REPEVqbWhVWj8uYWtwMmRGPnFtajsyfVlXRmRZeC5BcF1oakNQVFAobjI4ayszO28mV1hxcy9nT1hkciQ6cidkbzA7YjRjKGZfR3I9Ilw0KVswMVQ3YWpRSnZMJFd+bUxfc1MvNGg6eCpbWk49S0xzJkw1elgvLz5pdCxvOmFVKDtaPnBXJlQ3b1AnMkteRTp4OSdjWyV6LSw2NEpRNUFlSF9HI0tpalVLZ2hRd15cdmVhM2E/a2thX0ckOCNgKmt5bnN4ekJMcnUnXWtfWzdGclZ4fV49JGJseD5zLU4lajtEKmFaRG5zdzpZS1olUS5LbmU5I2hQPytiMyhTT3ZMLF47JnU1QD81QzVCaGI9bS12RWhfTDE1SmxdVSkwUlA2e3ElTF5fejVFJ0R3NlgKKzgxMCAgICAgXGIKKzgxMSA4MTEgS2V0Cis4MTMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oYSg/MSliKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMyBCcmEKKyAgMiAgIDkgQ0JyYSAxCisgIDUgICAgIGEKKyAgNyAgIDIgUmVjdXJzZQorICA5ICAgICBiCisgMTEgICA5IEtldAorIDEzICAxMyBLZXQKKyAxNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyhhKD8xKStiKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNyBCcmEKKyAgMiAgMTMgQ0JyYSAxCisgIDUgICAgIGEKKyAgNyAgIDQgT25jZQorICA5ICAgMiBSZWN1cnNlCisgMTEgICA0IEtldFJtYXgKKyAxMyAgICAgYgorIDE1ICAxMyBLZXQKKyAxNyAgMTcgS2V0CisgMTkgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hKD9QPG5hbWUxPmJ8YylkKD9QPGxvbmdlcm5hbWUyPmUpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA1NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI0IEJyYQorICAyICAgICBhCisgIDQgICA1IENCcmEgMQorICA3ICAgICBiCisgIDkgICA0IEFsdAorIDExICAgICBjCisgMTMgICA5IEtldAorIDE1ICAgICBkCisgMTcgICA1IENCcmEgMgorIDIwICAgICBlCisgMjIgICA1IEtldAorIDI0ICAyNCBLZXQKKyAyNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/OmEoP1A8Yz5jKD9QPGQ+ZCkpKSg/UDxhPmEpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA2NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI5IEJyYQorICAyICAxOCBCcmEKKyAgNCAgICAgYQorICA2ICAxMiBDQnJhIDEKKyAgOSAgICAgYworIDExICAgNSBDQnJhIDIKKyAxNCAgICAgZAorIDE2ICAgNSBLZXQKKyAxOCAgMTIgS2V0CisgMjAgIDE4IEtldAorIDIyICAgNSBDQnJhIDMKKyAyNSAgICAgYQorIDI3ICAgNSBLZXQKKyAyOSAgMjkgS2V0CisgMzEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oP1A8YT5hKS4uLig/UD1hKWJiYig/UD5hKWQvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDU0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjQgQnJhCisgIDIgICA1IENCcmEgMQorICA1ICAgICBhCisgIDcgICA1IEtldAorICA5ICAgICBBbnkKKyAxMCAgICAgQW55CisgMTEgICAgIEFueQorIDEyICAgICBcMQorIDE0ICAgICBiYmIKKyAyMCAgIDIgUmVjdXJzZQorIDIyICAgICBkCisgMjQgIDI0IEtldAorIDI2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYWJjKD9DMjU1KWRlKD9DKWYvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDUwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjIgQnJhCisgIDIgICAgIGFiYworICA4ICAgICBDYWxsb3V0IDI1NSAxMCAxCisgMTIgICAgIGRlCisgMTYgICAgIENhbGxvdXQgMCAxNiAxCisgMjAgICAgIGYKKyAyMiAgMjIgS2V0CisgMjQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hYmNkZS9hdXRvX2NhbGxvdXQKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNzgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzNiBCcmEKKyAgMiAgICAgQ2FsbG91dCAyNTUgMCAxCisgIDYgICAgIGEKKyAgOCAgICAgQ2FsbG91dCAyNTUgMSAxCisgMTIgICAgIGIKKyAxNCAgICAgQ2FsbG91dCAyNTUgMiAxCisgMTggICAgIGMKKyAyMCAgICAgQ2FsbG91dCAyNTUgMyAxCisgMjQgICAgIGQKKyAyNiAgICAgQ2FsbG91dCAyNTUgNCAxCisgMzAgICAgIGUKKyAzMiAgICAgQ2FsbG91dCAyNTUgNSAwCisgMzYgIDM2IEtldAorIDM4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7MTAwfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezEwMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHsxMDAwfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezEwMDAwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMiAgICAgXHh7MTAwMDB9CisgIDUgICA1IEtldAorICA3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwMDAwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMiAgICAgXHh7MTAwMDAwfQorICA1ICAgNSBLZXQKKyAgNyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezEwZmZmZn0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDIgICAgIFx4ezEwZmZmZn0KKyAgNSAgIDUgS2V0CisgIDcgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMTAwMDB9L3V0ZgorRmFpbGVkOiBlcnJvciAxMzQgYXQgb2Zmc2V0IDk6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx4e30gb3IgXG97fSBpcyB0b28gbGFyZ2UKKworL1tceHtmZn1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHtmZn0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHh7MTAwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4ezEwMH0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceDgwL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHs4MH0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceGZmL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHtmZn0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHswMDQxfVx4ezIyNjJ9XHh7MDM5MX1ceHswMDJlfS9JLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEwIEJyYQorICAyICAgICBBXHh7MjI2Mn1ceHszOTF9LgorIDEwICAxMCBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnQScKK0xhc3QgY29kZSB1bml0ID0gJy4nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKworL1x4e0Q1NWN9XHh7YWQ2ZH1ceHtDNUI0fS9JLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA4IEJyYQorICAyICAgICBceHtkNTVjfVx4e2FkNmR9XHh7YzViNH0KKyAgOCAgIDggS2V0CisgMTAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7ZDU1Y30KK0xhc3QgY29kZSB1bml0ID0gXHh7YzViNH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvXHh7NjVlNX1ceHs2NzJjfVx4ezhhOWV9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDIyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDggQnJhCisgIDIgICAgIFx4ezY1ZTV9XHh7NjcyY31ceHs4YTllfQorICA4ICAgOCBLZXQKKyAxMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHs2NWU1fQorTGFzdCBjb2RlIHVuaXQgPSBceHs4YTllfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9bXHh7MTAwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4ezEwMH0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWlx4ezEwMH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA1NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI0IEJyYQorICAyICAgICBbWlx4ezEwMH1dCisgMjQgIDI0IEtldAorIDI2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXltceHsxMDB9XEUtXFFcRVx4ezE1MH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEwIEJyYQorICAyICAgICBeCisgIDMgICAgIFtceHsxMDB9LVx4ezE1MH1dCisgMTAgIDEwIEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXltcUcSAXEUtXFHFkFxFXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMCBCcmEKKyAgMiAgICAgXgorICAzICAgICBbXHh7MTAwfS1ceHsxNTB9XQorIDEwICAxMCBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15bXFHEgFxFLVxRxZBcRS91dGYKK0ZhaWxlZDogZXJyb3IgMTA2IGF0IG9mZnNldCAxMzogbWlzc2luZyB0ZXJtaW5hdGluZyBdIGZvciBjaGFyYWN0ZXIgY2xhc3MKKworL1tccHtMfV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICAgIFtccHtMfV0KKyAgOSAgIDkgS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHB7Xkx9XS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgICAgW1xQe0x9XQorICA5ICAgOSBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tcUHtMfV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICAgIFtcUHtMfV0KKyAgOSAgIDkgS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXFB7Xkx9XS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgICAgW1xwe0x9XQorICA5ICAgOSBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1thYmNccHtMfVx4ezA2NjB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyNyBCcmEKKyAgMiAgICAgW2EtY1xwe0x9XHh7NjYwfV0KKyAyNyAgMjcgS2V0CisgMjkgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHB7TmR9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgICAgW1xwe05kfV0KKyAgOSAgIDkgS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHB7TmR9Ky1dKy91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNTgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyNiBCcmEKKyAgMiAgICAgWytcLVxwe05kfV0rKworIDI2ICAyNiBLZXQKKyAyOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS9pLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEzIEJyYQorICAyICAvaSBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAxMyAgMTMgS2V0CisgMTUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDMyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTMgQnJhCisgIDIgICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorIDEzICAxMyBLZXQKKyAxNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceHsxMDV9LVx4ezEwOX1dL2ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICAgIFtceHsxMDR9LVx4ezEwOX1dCisgIDkgICA5IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCAoICg/KDEpMHwpICkqICAgKS94CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDUyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjMgQnJhCisgIDIgIDE5IENCcmEgMQorICA1ICAgICBCcmF6ZXJvCisgIDYgIDEzIFNDQnJhIDIKKyAgOSAgIDYgQ29uZAorIDExICAgMSBDb25kIHJlZgorIDEzICAgICAwCisgMTUgICAyIEFsdAorIDE3ICAgOCBLZXQKKyAxOSAgMTMgS2V0Um1heAorIDIxICAxOSBLZXQKKyAyMyAgMjMgS2V0CisgMjUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oICAoPygxKTB8KSogICApL3gKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxOCBCcmEKKyAgMiAgMTQgQ0JyYSAxCisgIDUgICAgIEJyYXplcm8KKyAgNiAgIDYgU0NvbmQKKyAgOCAgIDEgQ29uZCByZWYKKyAxMCAgICAgMAorIDEyICAgMiBBbHQKKyAxNCAgIDggS2V0Um1heAorIDE2ICAxNCBLZXQKKyAxOCAgMTggS2V0CisgMjAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bYV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIGEKKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIGEKKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHhhYV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4e2FhfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceGFhXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7YWF9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15hXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgW15hXQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFteYV0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXlx4YWFdLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBbXlx4e2FhfV0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXlx4YWFdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBbXlx4e2FhfV0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNwYXR0ZXJuIC1tZW1vcnkKKworL1teXGRdL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgICAgW15ccHtOZH1dCisgIDkgICA5IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6XmFscGhhOl1bOl5jbnRybDpdXSsvdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEzIEJyYQorICAyICAgICBbXFB7TH1cUHtDY31dKysKKyAxMyAgMTMgS2V0CisgMTUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzpeY250cmw6XVs6XmFscGhhOl1dKy91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTMgQnJhCisgIDIgICAgIFtcUHtDY31cUHtMfV0rKworIDEzICAxMyBLZXQKKyAxNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tbOmFscGhhOl1dKy91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTAgQnJhCisgIDIgICAgIFtccHtMfV0rKworIDEwICAxMCBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tbOl5hbHBoYTpdXFNdKy91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTMgQnJhCisgIDIgICAgIFtcUHtMfVxQe1hzcH1dKysKKyAxMyAgMTMgS2V0CisgMTUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hYmMoZHxlKSgqVEhFTil4KDEyMygqVEhFTik0fDU2NyhifHEpKCpUSEVOKXh4KS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA2MCBCcmEKKyAgMiAgICAgYWJjCisgIDggICA1IENCcmEgMQorIDExICAgICBkCisgMTMgICA0IEFsdAorIDE1ICAgICBlCisgMTcgICA5IEtldAorIDE5ICAgICAqVEhFTgorIDIwICAgICB4CisgMjIgIDEyIENCcmEgMgorIDI1ICAgICAxMjMKKyAzMSAgICAgKlRIRU4KKyAzMiAgICAgNAorIDM0ICAyNCBBbHQKKyAzNiAgICAgNTY3CisgNDIgICA1IENCcmEgMworIDQ1ICAgICBiCisgNDcgICA0IEFsdAorIDQ5ICAgICBxCisgNTEgICA5IEtldAorIDUzICAgICAqVEhFTgorIDU0ICAgICB4eAorIDU4ICAzNiBLZXQKKyA2MCAgNjAgS2V0CisgNjIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oKChhXDIpfChhKilcZzwtMT4pKSphPy8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzOSBCcmEKKyAgMiAgICAgQnJhemVybworICAzICAzMiBTQ0JyYSAxCisgIDYgIDI3IE9uY2UKKyAgOCAgMTIgQ0JyYSAyCisgMTEgICA3IENCcmEgMworIDE0ICAgICBhCisgMTYgICAgIFwyCisgMTggICA3IEtldAorIDIwICAxMSBBbHQKKyAyMiAgIDUgQ0JyYSA0CisgMjUgICAgIGEqCisgMjcgICA1IEtldAorIDI5ICAyMiBSZWN1cnNlCisgMzEgIDIzIEtldAorIDMzICAyNyBLZXQKKyAzNSAgMzIgS2V0Um1heAorIDM3ICAgICBhPysKKyAzOSAgMzkgS2V0CisgNDEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oKD8rMSkoXDEpKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyMCBCcmEKKyAgMiAgMTYgT25jZQorICA0ICAxMiBDQnJhIDEKKyAgNyAgIDkgUmVjdXJzZQorICA5ICAgNSBDQnJhIDIKKyAxMiAgICAgXDEKKyAxNCAgIDUgS2V0CisgMTYgIDEyIEtldAorIDE4ICAxNiBLZXQKKyAyMCAgMjAgS2V0CisgMjIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyIoPzEpKD8jPycpezJ9KGEpIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDIxIEJyYQorICAyICAgNCBPbmNlCisgIDQgIDE0IFJlY3Vyc2UKKyAgNiAgIDQgS2V0CisgIDggICA0IE9uY2UKKyAxMCAgMTQgUmVjdXJzZQorIDEyICAgNCBLZXQKKyAxNCAgIDUgQ0JyYSAxCisgMTcgICAgIGEKKyAxOSAgIDUgS2V0CisgMjEgIDIxIEtldAorIDIzICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLigoPzIpKD9SKXxcMXwkKSgpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI4IEJyYQorICAyICAgICBBbnkKKyAgMyAgMTggT25jZQorICA1ICAgNyBDQnJhIDEKKyAgOCAgMjMgUmVjdXJzZQorIDEwICAgMCBSZWN1cnNlCisgMTIgICA0IEFsdAorIDE0ICAgICBcMQorIDE2ICAgMyBBbHQKKyAxOCAgICAgJAorIDE5ICAxNCBLZXQKKyAyMSAgMTggS2V0CisgMjMgICAzIENCcmEgMgorIDI2ICAgMyBLZXQKKyAyOCAgMjggS2V0CisgMzAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8uKCg/MykoP1IpKCkoPzIpfFwxfCQpKCkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzUgQnJhCisgIDIgICAgIEFueQorICAzICAyNSBPbmNlCisgIDUgIDE0IENCcmEgMQorICA4ICAzMCBSZWN1cnNlCisgMTAgICAwIFJlY3Vyc2UKKyAxMiAgIDMgQ0JyYSAyCisgMTUgICAzIEtldAorIDE3ICAxMiBSZWN1cnNlCisgMTkgICA0IEFsdAorIDIxICAgICBcMQorIDIzICAgMyBBbHQKKyAyNSAgICAgJAorIDI2ICAyMSBLZXQKKyAyOCAgMjUgS2V0CisgMzAgICAzIENCcmEgMworIDMzICAgMyBLZXQKKyAzNSAgMzUgS2V0CisgMzcgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oPzEpKCkoKCgoKChcMSsrKSlceDg1KSspfCkpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDUwIEJyYQorICAyICAgNCBSZWN1cnNlCisgIDQgICAzIENCcmEgMQorICA3ICAgMyBLZXQKKyAgOSAgMzkgQ0JyYSAyCisgMTIgIDMyIENCcmEgMworIDE1ICAyNyBDQnJhIDQKKyAxOCAgMjIgQ0JyYSA1CisgMjEgIDE1IENCcmEgNgorIDI0ICAxMCBDQnJhIDcKKyAyNyAgIDUgT25jZQorIDI5ICAgICBcMSsKKyAzMiAgIDUgS2V0CisgMzQgIDEwIEtldAorIDM2ICAxNSBLZXQKKyAzOCAgICAgXHh7ODV9CisgNDAgIDIyIEtldFJtYXgKKyA0MiAgMjcgS2V0CisgNDQgICAyIEFsdAorIDQ2ICAzNCBLZXQKKyA0OCAgMzkgS2V0CisgNTAgIDUwIEtldAorIDUyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIENoZWNrIHRoZSBhYnNvbHV0ZSBsaW1pdCBvbiBuZXN0aW5nICg/fCBldGMuIFRoaXMgdmFyaWVzIHdpdGggY29kZSB1bml0CisjIHdpZHRoIGJlY2F1c2UgdGhlIHdvcmtzcGFjZSBpcyBhIGRpZmZlcmVudCBudW1iZXIgb2YgYnl0ZXMuIEl0IHdpbGwgZmFpbAorIyB3aXRoIGxpbmsgc2l6ZSAyIGluIDgtYml0IGFuZCAxNi1iaXQgYnV0IG5vdCBpbiAzMi1iaXQuCisKKy8oP3woP3woP0o6KD98KD94Oig/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fAorKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpCisvcGFyZW5zX25lc3RfbGltaXQ9MTAwMCwtZnVsbGJpbmNvZGUKK0ZhaWxlZDogZXJyb3IgMTg0IGF0IG9mZnNldCAxNTQwOiAoP3wgYW5kL29yICg/Sjogb3IgKD94OiBwYXJlbnRoZXNlcyBhcmUgdG9vIGRlZXBseSBuZXN0ZWQKKworIyBVc2UgImV4cGFuZCIgdG8gY3JlYXRlIHNvbWUgdmVyeSBsb25nIHBhdHRlcm5zIHdpdGggbmVzdGVkIHBhcmVudGhlc2VzLCBpbgorIyBvcmRlciB0byB0ZXN0IHdvcmtzcGFjZSBvdmVyZmxvdy4gQWdhaW4sIHRoaXMgdmFyaWVzIHdpdGggY29kZSB1bml0IHdpZHRoLAorIyBhbmQgZXZlbiB3aXRoIGl0IGZhaWxzIGluIHR3byBtb2RlcywgdGhlIGVycm9yIG9mZnNldCBkaWZmZXJzLiBJdCBhbHNvIHZhcmllcworIyB3aXRoIGxpbmsgc2l6ZSAtIGhlbmNlIG11bHRpcGxlIHRlc3RzIHdpdGggZGlmZmVyZW50IHZhbHVlcy4KKworLyg/J0FCQydcW1tiYXJdKF17MTA1fSpUSEVOOlxbQV17MjU1fVxbKV17MTA2fS9leHBhbmQsLWZ1bGxiaW5jb2RlCitGYWlsZWQ6IGVycm9yIDE4NiBhdCBvZmZzZXQgNTk0OiByZWd1bGFyIGV4cHJlc3Npb24gaXMgdG9vIGNvbXBsaWNhdGVkCisKKy8oPydBQkMnXFtbYmFyXShdezEwNn0qVEhFTjpcW0FdezI1NX1cWyldezEwN30vZXhwYW5kLC1mdWxsYmluY29kZQorRmFpbGVkOiBlcnJvciAxODYgYXQgb2Zmc2V0IDU5NDogcmVndWxhciBleHByZXNzaW9uIGlzIHRvbyBjb21wbGljYXRlZAorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxNTl9KlRIRU46XFtBXXsyNTV9XFspXXsxNjB9L2V4cGFuZCwtZnVsbGJpbmNvZGUKK0ZhaWxlZDogZXJyb3IgMTg2IGF0IG9mZnNldCA1OTQ6IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyB0b28gY29tcGxpY2F0ZWQKKworLyg/J0FCQydcW1tiYXJdKF17MTk5fSpUSEVOOlxbQV17MjU1fVxbKV17MjAwfS9leHBhbmQsLWZ1bGxiaW5jb2RlCitGYWlsZWQ6IGVycm9yIDE4NiBhdCBvZmZzZXQgNTk0OiByZWd1bGFyIGV4cHJlc3Npb24gaXMgdG9vIGNvbXBsaWNhdGVkCisKKy8oPydBQkMnXFtbYmFyXShdezI5OX0qVEhFTjpcW0FdezI1NX1cWyldezMwMH0vZXhwYW5kLC1mdWxsYmluY29kZQorRmFpbGVkOiBlcnJvciAxODYgYXQgb2Zmc2V0IDU5NDogcmVndWxhciBleHByZXNzaW9uIGlzIHRvbyBjb21wbGljYXRlZAorCisvKD8oMSkoPzEpKXs4LH0rKCkvZGVidWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA3OSBCcmEKKyAgMiAgNzAgT25jZQorICA0ICAgNiBDb25kCisgIDYgICAxIENvbmQgcmVmCisgIDggIDc0IFJlY3Vyc2UKKyAxMCAgIDYgS2V0CisgMTIgICA2IENvbmQKKyAxNCAgIDEgQ29uZCByZWYKKyAxNiAgNzQgUmVjdXJzZQorIDE4ICAgNiBLZXQKKyAyMCAgIDYgQ29uZAorIDIyICAgMSBDb25kIHJlZgorIDI0ICA3NCBSZWN1cnNlCisgMjYgICA2IEtldAorIDI4ICAgNiBDb25kCisgMzAgICAxIENvbmQgcmVmCisgMzIgIDc0IFJlY3Vyc2UKKyAzNCAgIDYgS2V0CisgMzYgICA2IENvbmQKKyAzOCAgIDEgQ29uZCByZWYKKyA0MCAgNzQgUmVjdXJzZQorIDQyICAgNiBLZXQKKyA0NCAgIDYgQ29uZAorIDQ2ICAgMSBDb25kIHJlZgorIDQ4ICA3NCBSZWN1cnNlCisgNTAgICA2IEtldAorIDUyICAgNiBDb25kCisgNTQgICAxIENvbmQgcmVmCisgNTYgIDc0IFJlY3Vyc2UKKyA1OCAgIDYgS2V0CisgNjAgIDEwIFNCcmFQb3MKKyA2MiAgIDYgU0NvbmQKKyA2NCAgIDEgQ29uZCByZWYKKyA2NiAgNzQgUmVjdXJzZQorIDY4ICAgNiBLZXQKKyA3MCAgMTAgS2V0UnBvcworIDcyICA3MCBLZXQKKyA3NCAgIDMgQ0JyYSAxCisgNzcgICAzIEtldAorIDc5ICA3OSBLZXQKKyA4MSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgYWJjZAorIDA6IAorIDE6IAorCisvKD8oMSl8YSg/MSliKXsyLH0rKCkvZGVidWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA0MyBCcmEKKyAgMiAgMzQgT25jZQorICA0ICAgNCBDb25kCisgIDYgICAxIENvbmQgcmVmCisgIDggICA4IEFsdAorIDEwICAgICBhCisgMTIgIDM4IFJlY3Vyc2UKKyAxNCAgICAgYgorIDE2ICAxMiBLZXQKKyAxOCAgMTYgU0JyYVBvcworIDIwICAgNCBTQ29uZAorIDIyICAgMSBDb25kIHJlZgorIDI0ICAgOCBBbHQKKyAyNiAgICAgYQorIDI4ICAzOCBSZWN1cnNlCisgMzAgICAgIGIKKyAzMiAgMTIgS2V0CisgMzQgIDE2IEtldFJwb3MKKyAzNiAgMzQgS2V0CisgMzggICAzIENCcmEgMQorIDQxICAgMyBLZXQKKyA0MyAgNDMgS2V0CisgNDUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY2RlCitObyBtYXRjaAorCisvKCg/MSkoPzIpKD8zKSg/NCkoPzUpKD82KSg/NykoPzgpKD85KSg/OSkoPzgpKD83KSg/NikoPzUpKD80KSg/MykoPzIpKD8xKSg/MCkpezIsfSgpKCkoKSgpKCkoKSgpKCkoKS9kZWJ1ZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgMTMzIEJyYQorICAyICA0MSBDQnJhIDEKKyAgNSAgIDIgUmVjdXJzZQorICA3ICA4OCBSZWN1cnNlCisgIDkgIDkzIFJlY3Vyc2UKKyAxMSAgOTggUmVjdXJzZQorIDEzIDEwMyBSZWN1cnNlCisgMTUgMTA4IFJlY3Vyc2UKKyAxNyAxMTMgUmVjdXJzZQorIDE5IDExOCBSZWN1cnNlCisgMjEgMTIzIFJlY3Vyc2UKKyAyMyAxMjMgUmVjdXJzZQorIDI1IDExOCBSZWN1cnNlCisgMjcgMTEzIFJlY3Vyc2UKKyAyOSAxMDggUmVjdXJzZQorIDMxIDEwMyBSZWN1cnNlCisgMzMgIDk4IFJlY3Vyc2UKKyAzNSAgOTMgUmVjdXJzZQorIDM3ICA4OCBSZWN1cnNlCisgMzkgICAyIFJlY3Vyc2UKKyA0MSAgIDAgUmVjdXJzZQorIDQzICA0MSBLZXQKKyA0NSAgNDEgU0NCcmEgMQorIDQ4ICAgMiBSZWN1cnNlCisgNTAgIDg4IFJlY3Vyc2UKKyA1MiAgOTMgUmVjdXJzZQorIDU0ICA5OCBSZWN1cnNlCisgNTYgMTAzIFJlY3Vyc2UKKyA1OCAxMDggUmVjdXJzZQorIDYwIDExMyBSZWN1cnNlCisgNjIgMTE4IFJlY3Vyc2UKKyA2NCAxMjMgUmVjdXJzZQorIDY2IDEyMyBSZWN1cnNlCisgNjggMTE4IFJlY3Vyc2UKKyA3MCAxMTMgUmVjdXJzZQorIDcyIDEwOCBSZWN1cnNlCisgNzQgMTAzIFJlY3Vyc2UKKyA3NiAgOTggUmVjdXJzZQorIDc4ICA5MyBSZWN1cnNlCisgODAgIDg4IFJlY3Vyc2UKKyA4MiAgIDIgUmVjdXJzZQorIDg0ICAgMCBSZWN1cnNlCisgODYgIDQxIEtldFJtYXgKKyA4OCAgIDMgQ0JyYSAyCisgOTEgICAzIEtldAorIDkzICAgMyBDQnJhIDMKKyA5NiAgIDMgS2V0CisgOTggICAzIENCcmEgNAorMTAxICAgMyBLZXQKKzEwMyAgIDMgQ0JyYSA1CisxMDYgICAzIEtldAorMTA4ICAgMyBDQnJhIDYKKzExMSAgIDMgS2V0CisxMTMgICAzIENCcmEgNworMTE2ICAgMyBLZXQKKzExOCAgIDMgQ0JyYSA4CisxMjEgICAzIEtldAorMTIzICAgMyBDQnJhIDkKKzEyNiAgIDMgS2V0CisxMjggICAzIENCcmEgMTAKKzEzMSAgIDMgS2V0CisxMzMgMTMzIEtldAorMTM1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxMAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKyMgRW5kIG9mIHRlc3RpbnB1dDgKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTE2LTMgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0xNi0zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxODg0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0xNi0zCkBAIC0wLDAgKzEsMTAyNiBAQAorIyBUaGVyZSBhcmUgdHdvIHNvcnRzIG9mIHBhdHRlcm5zIGluIHRoaXMgdGVzdC4gQSBudW1iZXIgb2YgdGhlbSBhcmUKKyMgcmVwcmVzZW50YXRpdmUgcGF0dGVybnMgd2hvc2UgbGVuZ3RocyBhbmQgb2Zmc2V0cyBhcmUgY2hlY2tlZC4gVGhpcyBpcyBqdXN0IGEKKyMgZG91YmxlY2hlY2sgdGVzdCB0byBlbnN1cmUgdGhlIHNpemVzIGRvbid0IGdvIGhvcnJpYmx5IHdyb25nIHdoZW4gc29tZXRoaW5nCisjIGlzIGNoYW5nZWQuIFRoZSBvcGVyYXRpb24gb2YgdGhlc2UgcGF0dGVybnMgaXMgY2hlY2tlZCBpbiBvdGhlciB0ZXN0cy4KKyMKKyMgVGhpcyBmaWxlIGFsc28gY29udGFpbnMgdGVzdHMgd2hvc2Ugb3V0cHV0IHZhcmllcyB3aXRoIGNvZGUgdW5pdCBzaXplIGFuZC9vcgorIyBsaW5rIHNpemUuIFVuaWNvZGUgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhlc2UgdGVzdHMuIFRoZXJlIGFyZSBzZXBhcmF0ZQorIyBvdXRwdXQgZmlsZXMgZm9yIGVhY2ggY29kZSB1bml0IHNpemUgYW5kIGxpbmsgc2l6ZS4KKworI3BhdHRlcm4gZnVsbGJpbmNvZGUsbWVtb3J5CisKKy8oKD9pKWIpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEyIEJyYQorICAzICAgNiBDQnJhIDEKKyAgNyAgL2kgYgorICA5ICAgNiBLZXQKKyAxMiAgMTIgS2V0CisgMTUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oP3MpKC4qWHxeQikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjAgQnJhCisgIDMgICA4IENCcmEgMQorICA3ICAgICBBbGxBbnkqCisgIDkgICAgIFgKKyAxMSAgIDYgQWx0CisgMTQgICAgIF4KKyAxNSAgICAgQgorIDE3ICAxNCBLZXQKKyAyMCAgMjAgS2V0CisgMjMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oP3M6LipYfF5CKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxOSBCcmEKKyAgMyAgIDcgQnJhCisgIDYgICAgIEFsbEFueSoKKyAgOCAgICAgWAorIDEwICAgNiBBbHQKKyAxMyAgICAgXgorIDE0ICAgICBCCisgMTYgIDEzIEtldAorIDE5ICAxOSBLZXQKKyAyMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15bWzphbG51bTpdXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyMSBCcmEKKyAgMyAgICAgXgorICA0ICAgICBbMC05QS1aYS16XQorIDIxICAyMSBLZXQKKyAyNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyMvSXgKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgMyBCcmEKKyAgMyAgIDMgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK09wdGlvbnM6IGV4dGVuZGVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworL2EjL0l4CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDMgICAgIGEKKyAgNSAgIDUgS2V0CisgIDggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGV4dGVuZGVkCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisveD8rLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA1IEJyYQorICAzICAgICB4PysKKyAgNSAgIDUgS2V0CisgIDggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy94KysvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDMgICAgIHgrKworICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL3h7MSwzfSsvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDggQnJhCisgIDMgICAgIHgKKyAgNSAgICAgeHswLDJ9KworICA4ICAgOCBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyh4KSorLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEzIEJyYQorICAzICAgICBCcmFwb3N6ZXJvCisgIDQgICA2IENCcmFQb3MgMQorICA4ICAgICB4CisgMTAgICA2IEtldFJwb3MKKyAxMyAgMTMgS2V0CisgMTYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eKChhKykoP1UpKFthYl0rKSg/LVUpKFtiY10rKShcdyopKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTY2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNzkgQnJhCisgIDMgICAgIF4KKyAgNCAgNzIgQ0JyYSAxCisgIDggICA2IENCcmEgMgorIDEyICAgICBhKworIDE0ICAgNiBLZXQKKyAxNyAgMjIgQ0JyYSAzCisgMjEgICAgIFthYl0rPworIDM5ICAyMiBLZXQKKyA0MiAgMjIgQ0JyYSA0CisgNDYgICAgIFtiY10rCisgNjQgIDIyIEtldAorIDY3ICAgNiBDQnJhIDUKKyA3MSAgICAgXHcqKworIDczICAgNiBLZXQKKyA3NiAgNzIgS2V0CisgNzkgIDc5IEtldAorIDgyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiOEpcJFdFXDxcLnJYXCtpeFxbZDFiXCFIXCNcP3ZWMHZyS1w6WkgxXD0yTVw+aVZcO1w/YVBoRkJcPFwqdldcQFFXXEBzTzlcfWNmWkFcLWlcJ3dcJWhLZDZndDFVSlBcLDE1X1wjUVlcJE1cXk1zc19VXC9cXVwmTEs5XFs1dlF1Ylxed1xbS0REXDxFam1oVVpcP1wuYWtwMmRGXD5xbWpcOzJcfVlXRmRZeFwuQXBcXWhqQ1BUUFwobjI4a1wrM1w7b1wmV1hxc1wvZ09YZHJcJFw6clwnZG8wXDtiNGNcKGZfR3JcPVwiXFw0XClcWzAxVDdhalFKdkxcJFdcfm1MX3NTXC80aFw6eFwqXFtaTlw9S0xzXCZMNXpYXC9cL1w+aXRcLG9cOmFVXChcO1pcPnBXXCZUN29QXCcyS1xeRVw6eDlcJ2NcW1wlelwtXCw2NEpRNUFlSF9HXCNLaWpVS2doUXdcXlxcdmVhM2FcP2trYV9HXCQ4XCNcYFwqa3luc3h6QkxydVwnXF1rX1xbN0ZyVnhcfVxeXD1cJGJseFw+c1wtTlwlalw7RFwqYVpEbnN3XDpZS1pcJVFcLktuZTlcI2hQXD9cK2IzXChTT3ZMXCxcXlw7XCZ1NVxAXD81QzVCaGJcPW1cLXZFaF9MMTVKbFxdVVwpMFJQNlx7cVwlTFxeX3o1RVwnRHc2WFxiIgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNjUyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCA4MjIgQnJhCisgIDMgICAgIDhKJFdFPC5yWCtpeFtkMWIhSCM/dlYwdnJLOlpIMT0yTT5pVjs/YVBoRkI8KnZXQFFXQHNPOX1jZlpBLWkndyVoS2Q2Z3QxVUpQLDE1XyNRWSRNXk1zc19VL10mTEs5WzV2UXViXndbS0REPEVqbWhVWj8uYWtwMmRGPnFtajsyfVlXRmRZeC5BcF1oakNQVFAobjI4ayszO28mV1hxcy9nT1hkciQ6cidkbzA7YjRjKGZfR3I9Ilw0KVswMVQ3YWpRSnZMJFd+bUxfc1MvNGg6eCpbWk49S0xzJkw1elgvLz5pdCxvOmFVKDtaPnBXJlQ3b1AnMkteRTp4OSdjWyV6LSw2NEpRNUFlSF9HI0tpalVLZ2hRd15cdmVhM2E/a2thX0ckOCNgKmt5bnN4ekJMcnUnXWtfWzdGclZ4fV49JGJseD5zLU4lajtEKmFaRG5zdzpZS1olUS5LbmU5I2hQPytiMyhTT3ZMLF47JnU1QD81QzVCaGI9bS12RWhfTDE1SmxdVSkwUlA2e3ElTF5fejVFJ0R3NlgKKzgyMSAgICAgXGIKKzgyMiA4MjIgS2V0Cis4MjUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyJcJFw8XC5YXCtpeFxbZDFiXCFIXCNcP3ZWMHZyS1w6WkgxXD0yTVw+aVZcO1w/YVBoRkJcPFwqdldcQFFXXEBzTzlcfWNmWkFcLWlcJ3dcJWhLZDZndDFVSlBcLDE1X1wjUVlcJE1cXk1zc19VXC9cXVwmTEs5XFs1dlF1Ylxed1xbS0REXDxFam1oVVpcP1wuYWtwMmRGXD5xbWpcOzJcfVlXRmRZeFwuQXBcXWhqQ1BUUFwobjI4a1wrM1w7b1wmV1hxc1wvZ09YZHJcJFw6clwnZG8wXDtiNGNcKGZfR3JcPVwiXFw0XClcWzAxVDdhalFKdkxcJFdcfm1MX3NTXC80aFw6eFwqXFtaTlw9S0xzXCZMNXpYXC9cL1w+aXRcLG9cOmFVXChcO1pcPnBXXCZUN29QXCcyS1xeRVw6eDlcJ2NcW1wlelwtXCw2NEpRNUFlSF9HXCNLaWpVS2doUXdcXlxcdmVhM2FcP2trYV9HXCQ4XCNcYFwqa3luc3h6QkxydVwnXF1rX1xbN0ZyVnhcfVxeXD1cJGJseFw+c1wtTlwlalw7RFwqYVpEbnN3XDpZS1pcJVFcLktuZTlcI2hQXD9cK2IzXChTT3ZMXCxcXlw7XCZ1NVxAXD81QzVCaGJcPW1cLXZFaF9MMTVKbFxdVVwpMFJQNlx7cVwlTFxeX3o1RVwnRHc2WFxiIgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNjMyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCA4MTIgQnJhCisgIDMgICAgICQ8LlgraXhbZDFiIUgjP3ZWMHZySzpaSDE9Mk0+aVY7P2FQaEZCPCp2V0BRV0BzTzl9Y2ZaQS1pJ3claEtkNmd0MVVKUCwxNV8jUVkkTV5Nc3NfVS9dJkxLOVs1dlF1Yl53W0tERDxFam1oVVo/LmFrcDJkRj5xbWo7Mn1ZV0ZkWXguQXBdaGpDUFRQKG4yOGsrMztvJldYcXMvZ09YZHIkOnInZG8wO2I0YyhmX0dyPSJcNClbMDFUN2FqUUp2TCRXfm1MX3NTLzRoOngqW1pOPUtMcyZMNXpYLy8+aXQsbzphVSg7Wj5wVyZUN29QJzJLXkU6eDknY1slei0sNjRKUTVBZUhfRyNLaWpVS2doUXdeXHZlYTNhP2trYV9HJDgjYCpreW5zeHpCTHJ1J11rX1s3RnJWeH1ePSRibHg+cy1OJWo7RCphWkRuc3c6WUtaJVEuS25lOSNoUD8rYjMoU092TCxeOyZ1NUA/NUM1QmhiPW0tdkVoX0wxNUpsXVUpMFJQNntxJUxeX3o1RSdEdzZYCis4MTEgICAgIFxiCis4MTIgODEyIEtldAorODE1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKGEoPzEpYikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTcgQnJhCisgIDMgIDExIENCcmEgMQorICA3ICAgICBhCisgIDkgICAzIFJlY3Vyc2UKKyAxMiAgICAgYgorIDE0ICAxMSBLZXQKKyAxNyAgMTcgS2V0CisgMjAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oYSg/MSkrYikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDU0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjMgQnJhCisgIDMgIDE3IENCcmEgMQorICA3ICAgICBhCisgIDkgICA2IE9uY2UKKyAxMiAgIDMgUmVjdXJzZQorIDE1ICAgNiBLZXRSbWF4CisgMTggICAgIGIKKyAyMCAgMTcgS2V0CisgMjMgIDIzIEtldAorIDI2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYSg/UDxuYW1lMT5ifGMpZCg/UDxsb25nZXJuYW1lMj5lKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzMCBCcmEKKyAgMyAgICAgYQorICA1ICAgNiBDQnJhIDEKKyAgOSAgICAgYgorIDExICAgNSBBbHQKKyAxNCAgICAgYworIDE2ICAxMSBLZXQKKyAxOSAgICAgZAorIDIxICAgNiBDQnJhIDIKKyAyNSAgICAgZQorIDI3ICAgNiBLZXQKKyAzMCAgMzAgS2V0CisgMzMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oPzphKD9QPGM+Yyg/UDxkPmQpKSkoP1A8YT5hKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogODQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzOCBCcmEKKyAgMyAgMjMgQnJhCisgIDYgICAgIGEKKyAgOCAgMTUgQ0JyYSAxCisgMTIgICAgIGMKKyAxNCAgIDYgQ0JyYSAyCisgMTggICAgIGQKKyAyMCAgIDYgS2V0CisgMjMgIDE1IEtldAorIDI2ICAyMyBLZXQKKyAyOSAgIDYgQ0JyYSAzCisgMzMgICAgIGEKKyAzNSAgIDYgS2V0CisgMzggIDM4IEtldAorIDQxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD9QPGE+YSkuLi4oP1A9YSliYmIoP1A+YSlkLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA2NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI4IEJyYQorICAzICAgNiBDQnJhIDEKKyAgNyAgICAgYQorICA5ICAgNiBLZXQKKyAxMiAgICAgQW55CisgMTMgICAgIEFueQorIDE0ICAgICBBbnkKKyAxNSAgICAgXDEKKyAxNyAgICAgYmJiCisgMjMgICAzIFJlY3Vyc2UKKyAyNiAgICAgZAorIDI4ICAyOCBLZXQKKyAzMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2FiYyg/QzI1NSlkZSg/QylmLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA2MgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI3IEJyYQorICAzICAgICBhYmMKKyAgOSAgICAgQ2FsbG91dCAyNTUgMTAgMQorIDE1ICAgICBkZQorIDE5ICAgICBDYWxsb3V0IDAgMTYgMQorIDI1ICAgICBmCisgMjcgIDI3IEtldAorIDMwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYWJjZGUvYXV0b19jYWxsb3V0CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEwNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDQ5IEJyYQorICAzICAgICBDYWxsb3V0IDI1NSAwIDEKKyAgOSAgICAgYQorIDExICAgICBDYWxsb3V0IDI1NSAxIDEKKyAxNyAgICAgYgorIDE5ICAgICBDYWxsb3V0IDI1NSAyIDEKKyAyNSAgICAgYworIDI3ICAgICBDYWxsb3V0IDI1NSAzIDEKKyAzMyAgICAgZAorIDM1ICAgICBDYWxsb3V0IDI1NSA0IDEKKyA0MSAgICAgZQorIDQzICAgICBDYWxsb3V0IDI1NSA1IDAKKyA0OSAgNDkgS2V0CisgNTIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA1IEJyYQorICAzICAgICBceHsxMDB9CisgIDUgICA1IEtldAorICA4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwMH0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDMgICAgIFx4ezEwMDB9CisgIDUgICA1IEtldAorICA4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA2IEJyYQorICAzICAgICBceHsxMDAwMH0KKyAgNiAgIDYgS2V0CisgIDkgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMDAwMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA2IEJyYQorICAzICAgICBceHsxMDAwMDB9CisgIDYgICA2IEtldAorICA5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTBmZmZmfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNiBCcmEKKyAgMyAgICAgXHh7MTBmZmZmfQorICA2ICAgNiBLZXQKKyAgOSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezExMDAwMH0vdXRmCitGYWlsZWQ6IGVycm9yIDEzNCBhdCBvZmZzZXQgOTogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisvW1x4e2ZmfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDMgICAgIFx4e2ZmfQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceHsxMDB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgXHh7MTAwfQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ODAvdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDMgICAgIFx4ezgwfQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ZmYvdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDMgICAgIFx4e2ZmfQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezAwNDF9XHh7MjI2Mn1ceHswMzkxfVx4ezAwMmV9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDMwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTEgQnJhCisgIDMgICAgIEFceHsyMjYyfVx4ezM5MX0uCisgMTEgIDExIEtldAorIDE0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdBJworTGFzdCBjb2RlIHVuaXQgPSAnLicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvXHh7RDU1Y31ceHthZDZkfVx4e0M1QjR9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDMgICAgIFx4e2Q1NWN9XHh7YWQ2ZH1ceHtjNWI0fQorICA5ICAgOSBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHtkNTVjfQorTGFzdCBjb2RlIHVuaXQgPSBceHtjNWI0fQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9ceHs2NWU1fVx4ezY3MmN9XHh7OGE5ZX0vSSx1dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMyAgICAgXHh7NjVlNX1ceHs2NzJjfVx4ezhhOWV9CisgIDkgICA5IEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezY1ZTV9CitMYXN0IGNvZGUgdW5pdCA9IFx4ezhhOWV9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL1tceHsxMDB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgXHh7MTAwfQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1taXHh7MTAwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDYwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjYgQnJhCisgIDMgICAgIFtaXHh7MTAwfV0KKyAyNiAgMjYgS2V0CisgMjkgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1x4ezEwMH1cRS1cUVxFXHh7MTUwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDMyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTIgQnJhCisgIDMgICAgIF4KKyAgNCAgICAgW1x4ezEwMH0tXHh7MTUwfV0KKyAxMiAgMTIgS2V0CisgMTUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1xRxIBcRS1cUcWQXEVdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEyIEJyYQorICAzICAgICBeCisgIDQgICAgIFtceHsxMDB9LVx4ezE1MH1dCisgMTIgIDEyIEtldAorIDE1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXltcUcSAXEUtXFHFkFxFL3V0ZgorRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDEzOiBtaXNzaW5nIHRlcm1pbmF0aW5nIF0gZm9yIGNoYXJhY3RlciBjbGFzcworCisvW1xwe0x9XS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMSBCcmEKKyAgMyAgICAgW1xwe0x9XQorIDExICAxMSBLZXQKKyAxNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tccHteTH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDExIEJyYQorICAzICAgICBbXFB7TH1dCisgMTEgIDExIEtldAorIDE0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xQe0x9XS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMSBCcmEKKyAgMyAgICAgW1xQe0x9XQorIDExICAxMSBLZXQKKyAxNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tcUHteTH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDExIEJyYQorICAzICAgICBbXHB7TH1dCisgMTEgIDExIEtldAorIDE0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW2FiY1xwe0x9XHh7MDY2MH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA2NgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI5IEJyYQorICAzICAgICBbYS1jXHB7TH1ceHs2NjB9XQorIDI5ICAyOSBLZXQKKyAzMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tccHtOZH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDExIEJyYQorICAzICAgICBbXHB7TmR9XQorIDExICAxMSBLZXQKKyAxNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tccHtOZH0rLV0rL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA2NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI4IEJyYQorICAzICAgICBbK1wtXHB7TmR9XSsrCisgMjggIDI4IEtldAorIDMxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9L2ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDM2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTQgQnJhCisgIDMgIC9pIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorIDE0ICAxNCBLZXQKKyAxNyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNCBCcmEKKyAgMyAgICAgQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9CisgMTQgIDE0IEtldAorIDE3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1x4ezEwNX0tXHh7MTA5fV0vaSx1dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMSBCcmEKKyAgMyAgICAgW1x4ezEwNH0tXHh7MTA5fV0KKyAxMSAgMTEgS2V0CisgMTQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oICggKD8oMSkwfCkgKSogICApL3gKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNzAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzMSBCcmEKKyAgMyAgMjUgQ0JyYSAxCisgIDcgICAgIEJyYXplcm8KKyAgOCAgMTcgU0NCcmEgMgorIDEyICAgNyBDb25kCisgMTUgICAxIENvbmQgcmVmCisgMTcgICAgIDAKKyAxOSAgIDMgQWx0CisgMjIgIDEwIEtldAorIDI1ICAxNyBLZXRSbWF4CisgMjggIDI1IEtldAorIDMxICAzMSBLZXQKKyAzNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyggICg/KDEpMHwpKiAgICkveAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA1NgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI0IEJyYQorICAzICAxOCBDQnJhIDEKKyAgNyAgICAgQnJhemVybworICA4ICAgNyBTQ29uZAorIDExICAgMSBDb25kIHJlZgorIDEzICAgICAwCisgMTUgICAzIEFsdAorIDE4ICAxMCBLZXRSbWF4CisgMjEgIDE4IEtldAorIDI0ICAyNCBLZXQKKyAyNyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1thXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgYQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1thXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgYQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceGFhXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgXHh7YWF9CisgIDUgICA1IEtldAorICA4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1x4YWFdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA1IEJyYQorICAzICAgICBceHthYX0KKyAgNSAgIDUgS2V0CisgIDggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXmFdLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA1IEJyYQorICAzICAgICBbXmFdCisgIDUgICA1IEtldAorICA4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15hXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgW15hXQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHhhYV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDMgICAgIFteXHh7YWF9XQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHhhYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDMgICAgIFteXHh7YWF9XQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI3BhdHRlcm4gLW1lbW9yeQorCisvW15cZF0vdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDExIEJyYQorICAzICAgICBbXlxwe05kfV0KKyAxMSAgMTEgS2V0CisgMTQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzpeYWxwaGE6XVs6XmNudHJsOl1dKy91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTUgQnJhCisgIDMgICAgIFtcUHtMfVxQe0NjfV0rKworIDE1ICAxNSBLZXQKKyAxOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tbOl5jbnRybDpdWzpeYWxwaGE6XV0rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNSBCcmEKKyAgMyAgICAgW1xQe0NjfVxQe0x9XSsrCisgMTUgIDE1IEtldAorIDE4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6YWxwaGE6XV0rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMiBCcmEKKyAgMyAgICAgW1xwe0x9XSsrCisgMTIgIDEyIEtldAorIDE1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6XmFscGhhOl1cU10rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNSBCcmEKKyAgMyAgICAgW1xQe0x9XFB7WHNwfV0rKworIDE1ICAxNSBLZXQKKyAxOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2FiYyhkfGUpKCpUSEVOKXgoMTIzKCpUSEVOKTR8NTY3KGJ8cSkoKlRIRU4peHgpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDcwIEJyYQorICAzICAgICBhYmMKKyAgOSAgIDYgQ0JyYSAxCisgMTMgICAgIGQKKyAxNSAgIDUgQWx0CisgMTggICAgIGUKKyAyMCAgMTEgS2V0CisgMjMgICAgICpUSEVOCisgMjQgICAgIHgKKyAyNiAgMTMgQ0JyYSAyCisgMzAgICAgIDEyMworIDM2ICAgICAqVEhFTgorIDM3ICAgICA0CisgMzkgIDI4IEFsdAorIDQyICAgICA1NjcKKyA0OCAgIDYgQ0JyYSAzCisgNTIgICAgIGIKKyA1NCAgIDUgQWx0CisgNTcgICAgIHEKKyA1OSAgMTEgS2V0CisgNjIgICAgICpUSEVOCisgNjMgICAgIHh4CisgNjcgIDQxIEtldAorIDcwICA3MCBLZXQKKyA3MyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLygoKGFcMil8KGEqKVxnPC0xPikpKmE/LworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDUyIEJyYQorICAzICAgICBCcmF6ZXJvCisgIDQgIDQzIFNDQnJhIDEKKyAgOCAgMzYgT25jZQorIDExICAxNSBDQnJhIDIKKyAxNSAgIDggQ0JyYSAzCisgMTkgICAgIGEKKyAyMSAgICAgXDIKKyAyMyAgIDggS2V0CisgMjYgIDE1IEFsdAorIDI5ICAgNiBDQnJhIDQKKyAzMyAgICAgYSoKKyAzNSAgIDYgS2V0CisgMzggIDI5IFJlY3Vyc2UKKyA0MSAgMzAgS2V0CisgNDQgIDM2IEtldAorIDQ3ICA0MyBLZXRSbWF4CisgNTAgICAgIGE/KworIDUyICA1MiBLZXQKKyA1NSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLygoPysxKShcMSkpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI4IEJyYQorICAzICAyMiBPbmNlCisgIDYgIDE2IENCcmEgMQorIDEwICAxMyBSZWN1cnNlCisgMTMgICA2IENCcmEgMgorIDE3ICAgICBcMQorIDE5ICAgNiBLZXQKKyAyMiAgMTYgS2V0CisgMjUgIDIyIEtldAorIDI4ICAyOCBLZXQKKyAzMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIig/MSkoPyM/Jyl7Mn0oYSkiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzAgQnJhCisgIDMgICA2IE9uY2UKKyAgNiAgMjEgUmVjdXJzZQorICA5ICAgNiBLZXQKKyAxMiAgIDYgT25jZQorIDE1ICAyMSBSZWN1cnNlCisgMTggICA2IEtldAorIDIxICAgNiBDQnJhIDEKKyAyNSAgICAgYQorIDI3ICAgNiBLZXQKKyAzMCAgMzAgS2V0CisgMzMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8uKCg/MikoP1IpfFwxfCQpKCkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzkgQnJhCisgIDMgICAgIEFueQorICA0ICAyNSBPbmNlCisgIDcgIDEwIENCcmEgMQorIDExICAzMiBSZWN1cnNlCisgMTQgICAwIFJlY3Vyc2UKKyAxNyAgIDUgQWx0CisgMjAgICAgIFwxCisgMjIgICA0IEFsdAorIDI1ICAgICAkCisgMjYgIDE5IEtldAorIDI5ICAyNSBLZXQKKyAzMiAgIDQgQ0JyYSAyCisgMzYgICA0IEtldAorIDM5ICAzOSBLZXQKKyA0MiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy4oKD8zKSg/UikoKSg/Mil8XDF8JCkoKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA0OSBCcmEKKyAgMyAgICAgQW55CisgIDQgIDM1IE9uY2UKKyAgNyAgMjAgQ0JyYSAxCisgMTEgIDQyIFJlY3Vyc2UKKyAxNCAgIDAgUmVjdXJzZQorIDE3ICAgNCBDQnJhIDIKKyAyMSAgIDQgS2V0CisgMjQgIDE3IFJlY3Vyc2UKKyAyNyAgIDUgQWx0CisgMzAgICAgIFwxCisgMzIgICA0IEFsdAorIDM1ICAgICAkCisgMzYgIDI5IEtldAorIDM5ICAzNSBLZXQKKyA0MiAgIDQgQ0JyYSAzCisgNDYgICA0IEtldAorIDQ5ICA0OSBLZXQKKyA1MiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/MSkoKSgoKCgoKFwxKyspKVx4ODUpKyl8KSkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNjkgQnJhCisgIDMgICA2IFJlY3Vyc2UKKyAgNiAgIDQgQ0JyYSAxCisgMTAgICA0IEtldAorIDEzICA1MyBDQnJhIDIKKyAxNyAgNDMgQ0JyYSAzCisgMjEgIDM2IENCcmEgNAorIDI1ICAyOSBDQnJhIDUKKyAyOSAgMjAgQ0JyYSA2CisgMzMgIDEzIENCcmEgNworIDM3ICAgNiBPbmNlCisgNDAgICAgIFwxKworIDQzICAgNiBLZXQKKyA0NiAgMTMgS2V0CisgNDkgIDIwIEtldAorIDUyICAgICBceHs4NX0KKyA1NCAgMjkgS2V0Um1heAorIDU3ICAzNiBLZXQKKyA2MCAgIDMgQWx0CisgNjMgIDQ2IEtldAorIDY2ICA1MyBLZXQKKyA2OSAgNjkgS2V0CisgNzIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgQ2hlY2sgdGhlIGFic29sdXRlIGxpbWl0IG9uIG5lc3RpbmcgKD98IGV0Yy4gVGhpcyB2YXJpZXMgd2l0aCBjb2RlIHVuaXQKKyMgd2lkdGggYmVjYXVzZSB0aGUgd29ya3NwYWNlIGlzIGEgZGlmZmVyZW50IG51bWJlciBvZiBieXRlcy4gSXQgd2lsbCBmYWlsCisjIHdpdGggbGluayBzaXplIDIgaW4gOC1iaXQgYW5kIDE2LWJpdCBidXQgbm90IGluIDMyLWJpdC4KKworLyg/fCg/fCg/SjooP3woP3g6KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98CispKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkKKy9wYXJlbnNfbmVzdF9saW1pdD0xMDAwLC1mdWxsYmluY29kZQorCisjIFVzZSAiZXhwYW5kIiB0byBjcmVhdGUgc29tZSB2ZXJ5IGxvbmcgcGF0dGVybnMgd2l0aCBuZXN0ZWQgcGFyZW50aGVzZXMsIGluCisjIG9yZGVyIHRvIHRlc3Qgd29ya3NwYWNlIG92ZXJmbG93LiBBZ2FpbiwgdGhpcyB2YXJpZXMgd2l0aCBjb2RlIHVuaXQgd2lkdGgsCisjIGFuZCBldmVuIHdpdGggaXQgZmFpbHMgaW4gdHdvIG1vZGVzLCB0aGUgZXJyb3Igb2Zmc2V0IGRpZmZlcnMuIEl0IGFsc28gdmFyaWVzCisjIHdpdGggbGluayBzaXplIC0gaGVuY2UgbXVsdGlwbGUgdGVzdHMgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxMDV9KlRIRU46XFtBXXsyNTV9XFspXXsxMDZ9L2V4cGFuZCwtZnVsbGJpbmNvZGUKKworLyg/J0FCQydcW1tiYXJdKF17MTA2fSpUSEVOOlxbQV17MjU1fVxbKV17MTA3fS9leHBhbmQsLWZ1bGxiaW5jb2RlCisKKy8oPydBQkMnXFtbYmFyXShdezE1OX0qVEhFTjpcW0FdezI1NX1cWyldezE2MH0vZXhwYW5kLC1mdWxsYmluY29kZQorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxOTl9KlRIRU46XFtBXXsyNTV9XFspXXsyMDB9L2V4cGFuZCwtZnVsbGJpbmNvZGUKK0ZhaWxlZDogZXJyb3IgMTg2IGF0IG9mZnNldCAxMTQ3OiByZWd1bGFyIGV4cHJlc3Npb24gaXMgdG9vIGNvbXBsaWNhdGVkCisKKy8oPydBQkMnXFtbYmFyXShdezI5OX0qVEhFTjpcW0FdezI1NX1cWyldezMwMH0vZXhwYW5kLC1mdWxsYmluY29kZQorRmFpbGVkOiBlcnJvciAxODYgYXQgb2Zmc2V0IDExNDc6IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyB0b28gY29tcGxpY2F0ZWQKKworLyg/KDEpKD8xKSl7OCx9KygpL2RlYnVnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAxMTAgQnJhCisgIDMgIDk3IE9uY2UKKyAgNiAgIDggQ29uZAorICA5ICAgMSBDb25kIHJlZgorIDExIDEwMyBSZWN1cnNlCisgMTQgICA4IEtldAorIDE3ICAgOCBDb25kCisgMjAgICAxIENvbmQgcmVmCisgMjIgMTAzIFJlY3Vyc2UKKyAyNSAgIDggS2V0CisgMjggICA4IENvbmQKKyAzMSAgIDEgQ29uZCByZWYKKyAzMyAxMDMgUmVjdXJzZQorIDM2ICAgOCBLZXQKKyAzOSAgIDggQ29uZAorIDQyICAgMSBDb25kIHJlZgorIDQ0IDEwMyBSZWN1cnNlCisgNDcgICA4IEtldAorIDUwICAgOCBDb25kCisgNTMgICAxIENvbmQgcmVmCisgNTUgMTAzIFJlY3Vyc2UKKyA1OCAgIDggS2V0CisgNjEgICA4IENvbmQKKyA2NCAgIDEgQ29uZCByZWYKKyA2NiAxMDMgUmVjdXJzZQorIDY5ICAgOCBLZXQKKyA3MiAgIDggQ29uZAorIDc1ICAgMSBDb25kIHJlZgorIDc3IDEwMyBSZWN1cnNlCisgODAgICA4IEtldAorIDgzICAxNCBTQnJhUG9zCisgODYgICA4IFNDb25kCisgODkgICAxIENvbmQgcmVmCisgOTEgMTAzIFJlY3Vyc2UKKyA5NCAgIDggS2V0CisgOTcgIDE0IEtldFJwb3MKKzEwMCAgOTcgS2V0CisxMDMgICA0IENCcmEgMQorMTA3ICAgNCBLZXQKKzExMCAxMTAgS2V0CisxMTMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY2QKKyAwOiAKKyAxOiAKKworLyg/KDEpfGEoPzEpYil7Mix9KygpL2RlYnVnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNTggQnJhCisgIDMgIDQ1IE9uY2UKKyAgNiAgIDUgQ29uZAorICA5ICAgMSBDb25kIHJlZgorIDExICAxMCBBbHQKKyAxNCAgICAgYQorIDE2ICA1MSBSZWN1cnNlCisgMTkgICAgIGIKKyAyMSAgMTUgS2V0CisgMjQgIDIxIFNCcmFQb3MKKyAyNyAgIDUgU0NvbmQKKyAzMCAgIDEgQ29uZCByZWYKKyAzMiAgMTAgQWx0CisgMzUgICAgIGEKKyAzNyAgNTEgUmVjdXJzZQorIDQwICAgICBiCisgNDIgIDE1IEtldAorIDQ1ICAyMSBLZXRScG9zCisgNDggIDQ1IEtldAorIDUxICAgNCBDQnJhIDEKKyA1NSAgIDQgS2V0CisgNTggIDU4IEtldAorIDYxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICBhYmNkZQorTm8gbWF0Y2gKKworLygoPzEpKD8yKSg/MykoPzQpKD81KSg/NikoPzcpKD84KSg/OSkoPzkpKD84KSg/NykoPzYpKD81KSg/NCkoPzMpKD8yKSg/MSkoPzApKXsyLH0oKSgpKCkoKSgpKCkoKSgpKCkvZGVidWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDE5NCBCcmEKKyAgMyAgNjEgQ0JyYSAxCisgIDcgICAzIFJlY3Vyc2UKKyAxMCAxMzEgUmVjdXJzZQorIDEzIDEzOCBSZWN1cnNlCisgMTYgMTQ1IFJlY3Vyc2UKKyAxOSAxNTIgUmVjdXJzZQorIDIyIDE1OSBSZWN1cnNlCisgMjUgMTY2IFJlY3Vyc2UKKyAyOCAxNzMgUmVjdXJzZQorIDMxIDE4MCBSZWN1cnNlCisgMzQgMTgwIFJlY3Vyc2UKKyAzNyAxNzMgUmVjdXJzZQorIDQwIDE2NiBSZWN1cnNlCisgNDMgMTU5IFJlY3Vyc2UKKyA0NiAxNTIgUmVjdXJzZQorIDQ5IDE0NSBSZWN1cnNlCisgNTIgMTM4IFJlY3Vyc2UKKyA1NSAxMzEgUmVjdXJzZQorIDU4ICAgMyBSZWN1cnNlCisgNjEgICAwIFJlY3Vyc2UKKyA2NCAgNjEgS2V0CisgNjcgIDYxIFNDQnJhIDEKKyA3MSAgIDMgUmVjdXJzZQorIDc0IDEzMSBSZWN1cnNlCisgNzcgMTM4IFJlY3Vyc2UKKyA4MCAxNDUgUmVjdXJzZQorIDgzIDE1MiBSZWN1cnNlCisgODYgMTU5IFJlY3Vyc2UKKyA4OSAxNjYgUmVjdXJzZQorIDkyIDE3MyBSZWN1cnNlCisgOTUgMTgwIFJlY3Vyc2UKKyA5OCAxODAgUmVjdXJzZQorMTAxIDE3MyBSZWN1cnNlCisxMDQgMTY2IFJlY3Vyc2UKKzEwNyAxNTkgUmVjdXJzZQorMTEwIDE1MiBSZWN1cnNlCisxMTMgMTQ1IFJlY3Vyc2UKKzExNiAxMzggUmVjdXJzZQorMTE5IDEzMSBSZWN1cnNlCisxMjIgICAzIFJlY3Vyc2UKKzEyNSAgIDAgUmVjdXJzZQorMTI4ICA2MSBLZXRSbWF4CisxMzEgICA0IENCcmEgMgorMTM1ICAgNCBLZXQKKzEzOCAgIDQgQ0JyYSAzCisxNDIgICA0IEtldAorMTQ1ICAgNCBDQnJhIDQKKzE0OSAgIDQgS2V0CisxNTIgICA0IENCcmEgNQorMTU2ICAgNCBLZXQKKzE1OSAgIDQgQ0JyYSA2CisxNjMgICA0IEtldAorMTY2ICAgNCBDQnJhIDcKKzE3MCAgIDQgS2V0CisxNzMgICA0IENCcmEgOAorMTc3ICAgNCBLZXQKKzE4MCAgIDQgQ0JyYSA5CisxODQgICA0IEtldAorMTg3ICAgNCBDQnJhIDEwCisxOTEgICA0IEtldAorMTk0IDE5NCBLZXQKKzE5NyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMTAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisjIEVuZCBvZiB0ZXN0aW5wdXQ4CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0zMi0yIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtMzItMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWJkMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtMzItMgpAQCAtMCwwICsxLDEwMjYgQEAKKyMgVGhlcmUgYXJlIHR3byBzb3J0cyBvZiBwYXR0ZXJucyBpbiB0aGlzIHRlc3QuIEEgbnVtYmVyIG9mIHRoZW0gYXJlCisjIHJlcHJlc2VudGF0aXZlIHBhdHRlcm5zIHdob3NlIGxlbmd0aHMgYW5kIG9mZnNldHMgYXJlIGNoZWNrZWQuIFRoaXMgaXMganVzdCBhCisjIGRvdWJsZWNoZWNrIHRlc3QgdG8gZW5zdXJlIHRoZSBzaXplcyBkb24ndCBnbyBob3JyaWJseSB3cm9uZyB3aGVuIHNvbWV0aGluZworIyBpcyBjaGFuZ2VkLiBUaGUgb3BlcmF0aW9uIG9mIHRoZXNlIHBhdHRlcm5zIGlzIGNoZWNrZWQgaW4gb3RoZXIgdGVzdHMuCisjCisjIFRoaXMgZmlsZSBhbHNvIGNvbnRhaW5zIHRlc3RzIHdob3NlIG91dHB1dCB2YXJpZXMgd2l0aCBjb2RlIHVuaXQgc2l6ZSBhbmQvb3IKKyMgbGluayBzaXplLiBVbmljb2RlIHN1cHBvcnQgaXMgcmVxdWlyZWQgZm9yIHRoZXNlIHRlc3RzLiBUaGVyZSBhcmUgc2VwYXJhdGUKKyMgb3V0cHV0IGZpbGVzIGZvciBlYWNoIGNvZGUgdW5pdCBzaXplIGFuZCBsaW5rIHNpemUuCisKKyNwYXR0ZXJuIGZ1bGxiaW5jb2RlLG1lbW9yeQorCisvKCg/aSliKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgIDUgQ0JyYSAxCisgIDUgIC9pIGIKKyAgNyAgIDUgS2V0CisgIDkgICA5IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD9zKSguKlh8XkIpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA3NgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE2IEJyYQorICAyICAgNyBDQnJhIDEKKyAgNSAgICAgQWxsQW55KgorICA3ICAgICBYCisgIDkgICA1IEFsdAorIDExICAgICBeCisgMTIgICAgIEIKKyAxNCAgMTIgS2V0CisgMTYgIDE2IEtldAorIDE4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD9zOi4qWHxeQikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDcyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTUgQnJhCisgIDIgICA2IEJyYQorICA0ICAgICBBbGxBbnkqCisgIDYgICAgIFgKKyAgOCAgIDUgQWx0CisgMTAgICAgIF4KKyAxMSAgICAgQgorIDEzICAxMSBLZXQKKyAxNSAgMTUgS2V0CisgMTcgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1s6YWxudW06XV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDYwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTIgQnJhCisgIDIgICAgIF4KKyAgMyAgICAgWzAtOUEtWmEtel0KKyAxMiAgMTIgS2V0CisgMTQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8jL0l4CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDIwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDIgQnJhCisgIDIgICAyIEtldAorICA0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitPcHRpb25zOiBleHRlbmRlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy9hIy9JeAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBhCisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBleHRlbmRlZAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL3g/Ky8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgeD8rCisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisveCsrLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICB4KysKKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy94ezEsM30rLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0MAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA3IEJyYQorICAyICAgICB4CisgIDQgICAgIHh7MCwyfSsKKyAgNyAgIDcgS2V0CisgIDkgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oeCkqKy8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMCBCcmEKKyAgMiAgICAgQnJhcG9zemVybworICAzICAgNSBDQnJhUG9zIDEKKyAgNiAgICAgeAorICA4ICAgNSBLZXRScG9zCisgMTAgIDEwIEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXigoYSspKD9VKShbYWJdKykoPy1VKShbYmNdKykoXHcqKSkvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDIyMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDUyIEJyYQorICAyICAgICBeCisgIDMgIDQ3IENCcmEgMQorICA2ICAgNSBDQnJhIDIKKyAgOSAgICAgYSsKKyAxMSAgIDUgS2V0CisgMTMgIDEzIENCcmEgMworIDE2ICAgICBbYWJdKz8KKyAyNiAgMTMgS2V0CisgMjggIDEzIENCcmEgNAorIDMxICAgICBbYmNdKworIDQxICAxMyBLZXQKKyA0MyAgIDUgQ0JyYSA1CisgNDYgICAgIFx3KisKKyA0OCAgIDUgS2V0CisgNTAgIDQ3IEtldAorIDUyICA1MiBLZXQKKyA1NCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIjhKXCRXRVw8XC5yWFwraXhcW2QxYlwhSFwjXD92VjB2cktcOlpIMVw9Mk1cPmlWXDtcP2FQaEZCXDxcKnZXXEBRV1xAc085XH1jZlpBXC1pXCd3XCVoS2Q2Z3QxVUpQXCwxNV9cI1FZXCRNXF5Nc3NfVVwvXF1cJkxLOVxbNXZRdWJcXndcW0tERFw8RWptaFVaXD9cLmFrcDJkRlw+cW1qXDsyXH1ZV0ZkWXhcLkFwXF1oakNQVFBcKG4yOGtcKzNcO29cJldYcXNcL2dPWGRyXCRcOnJcJ2RvMFw7YjRjXChmX0dyXD1cIlxcNFwpXFswMVQ3YWpRSnZMXCRXXH5tTF9zU1wvNGhcOnhcKlxbWk5cPUtMc1wmTDV6WFwvXC9cPml0XCxvXDphVVwoXDtaXD5wV1wmVDdvUFwnMktcXkVcOng5XCdjXFtcJXpcLVwsNjRKUTVBZUhfR1wjS2lqVUtnaFF3XF5cXHZlYTNhXD9ra2FfR1wkOFwjXGBcKmt5bnN4ekJMcnVcJ1xda19cWzdGclZ4XH1cXlw9XCRibHhcPnNcLU5cJWpcO0RcKmFaRG5zd1w6WUtaXCVRXC5LbmU5XCNoUFw/XCtiM1woU092TFwsXF5cO1wmdTVcQFw/NUM1QmhiXD1tXC12RWhfTDE1SmxcXVVcKTBSUDZce3FcJUxcXl96NUVcJ0R3NlhcYiIKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzI5NgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgODIxIEJyYQorICAyICAgICA4SiRXRTwuclgraXhbZDFiIUgjP3ZWMHZySzpaSDE9Mk0+aVY7P2FQaEZCPCp2V0BRV0BzTzl9Y2ZaQS1pJ3claEtkNmd0MVVKUCwxNV8jUVkkTV5Nc3NfVS9dJkxLOVs1dlF1Yl53W0tERDxFam1oVVo/LmFrcDJkRj5xbWo7Mn1ZV0ZkWXguQXBdaGpDUFRQKG4yOGsrMztvJldYcXMvZ09YZHIkOnInZG8wO2I0YyhmX0dyPSJcNClbMDFUN2FqUUp2TCRXfm1MX3NTLzRoOngqW1pOPUtMcyZMNXpYLy8+aXQsbzphVSg7Wj5wVyZUN29QJzJLXkU6eDknY1slei0sNjRKUTVBZUhfRyNLaWpVS2doUXdeXHZlYTNhP2trYV9HJDgjYCpreW5zeHpCTHJ1J11rX1s3RnJWeH1ePSRibHg+cy1OJWo7RCphWkRuc3c6WUtaJVEuS25lOSNoUD8rYjMoU092TCxeOyZ1NUA/NUM1QmhiPW0tdkVoX0wxNUpsXVUpMFJQNntxJUxeX3o1RSdEdzZYCis4MjAgICAgIFxiCis4MjEgODIxIEtldAorODIzICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiXCRcPFwuWFwraXhcW2QxYlwhSFwjXD92VjB2cktcOlpIMVw9Mk1cPmlWXDtcP2FQaEZCXDxcKnZXXEBRV1xAc085XH1jZlpBXC1pXCd3XCVoS2Q2Z3QxVUpQXCwxNV9cI1FZXCRNXF5Nc3NfVVwvXF1cJkxLOVxbNXZRdWJcXndcW0tERFw8RWptaFVaXD9cLmFrcDJkRlw+cW1qXDsyXH1ZV0ZkWXhcLkFwXF1oakNQVFBcKG4yOGtcKzNcO29cJldYcXNcL2dPWGRyXCRcOnJcJ2RvMFw7YjRjXChmX0dyXD1cIlxcNFwpXFswMVQ3YWpRSnZMXCRXXH5tTF9zU1wvNGhcOnhcKlxbWk5cPUtMc1wmTDV6WFwvXC9cPml0XCxvXDphVVwoXDtaXD5wV1wmVDdvUFwnMktcXkVcOng5XCdjXFtcJXpcLVwsNjRKUTVBZUhfR1wjS2lqVUtnaFF3XF5cXHZlYTNhXD9ra2FfR1wkOFwjXGBcKmt5bnN4ekJMcnVcJ1xda19cWzdGclZ4XH1cXlw9XCRibHhcPnNcLU5cJWpcO0RcKmFaRG5zd1w6WUtaXCVRXC5LbmU5XCNoUFw/XCtiM1woU092TFwsXF5cO1wmdTVcQFw/NUM1QmhiXD1tXC12RWhfTDE1SmxcXVVcKTBSUDZce3FcJUxcXl96NUVcJ0R3NlhcYiIKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzI1NgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgODExIEJyYQorICAyICAgICAkPC5YK2l4W2QxYiFIIz92VjB2cks6WkgxPTJNPmlWOz9hUGhGQjwqdldAUVdAc085fWNmWkEtaSd3JWhLZDZndDFVSlAsMTVfI1FZJE1eTXNzX1UvXSZMSzlbNXZRdWJed1tLREQ8RWptaFVaPy5ha3AyZEY+cW1qOzJ9WVdGZFl4LkFwXWhqQ1BUUChuMjhrKzM7byZXWHFzL2dPWGRyJDpyJ2RvMDtiNGMoZl9Hcj0iXDQpWzAxVDdhalFKdkwkV35tTF9zUy80aDp4KltaTj1LTHMmTDV6WC8vPml0LG86YVUoO1o+cFcmVDdvUCcyS15FOng5J2NbJXotLDY0SlE1QWVIX0cjS2lqVUtnaFF3Xlx2ZWEzYT9ra2FfRyQ4I2Aqa3luc3h6QkxydSdda19bN0ZyVnh9Xj0kYmx4PnMtTiVqO0QqYVpEbnN3OllLWiVRLktuZTkjaFA/K2IzKFNPdkwsXjsmdTVAPzVDNUJoYj1tLXZFaF9MMTVKbF1VKTBSUDZ7cSVMXl96NUUnRHc2WAorODEwICAgICBcYgorODExIDgxMSBLZXQKKzgxMyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyhhKD8xKWIpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA2NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEzIEJyYQorICAyICAgOSBDQnJhIDEKKyAgNSAgICAgYQorICA3ICAgMiBSZWN1cnNlCisgIDkgICAgIGIKKyAxMSAgIDkgS2V0CisgMTMgIDEzIEtldAorIDE1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKGEoPzEpK2IpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA4MAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE3IEJyYQorICAyICAxMyBDQnJhIDEKKyAgNSAgICAgYQorICA3ICAgNCBPbmNlCisgIDkgICAyIFJlY3Vyc2UKKyAxMSAgIDQgS2V0Um1heAorIDEzICAgICBiCisgMTUgIDEzIEtldAorIDE3ICAxNyBLZXQKKyAxOSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2EoP1A8bmFtZTE+YnxjKWQoP1A8bG9uZ2VybmFtZTI+ZSkvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEwOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI0IEJyYQorICAyICAgICBhCisgIDQgICA1IENCcmEgMQorICA3ICAgICBiCisgIDkgICA0IEFsdAorIDExICAgICBjCisgMTMgICA5IEtldAorIDE1ICAgICBkCisgMTcgICA1IENCcmEgMgorIDIwICAgICBlCisgMjIgICA1IEtldAorIDI0ICAyNCBLZXQKKyAyNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/OmEoP1A8Yz5jKD9QPGQ+ZCkpKSg/UDxhPmEpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyOSBCcmEKKyAgMiAgMTggQnJhCisgIDQgICAgIGEKKyAgNiAgMTIgQ0JyYSAxCisgIDkgICAgIGMKKyAxMSAgIDUgQ0JyYSAyCisgMTQgICAgIGQKKyAxNiAgIDUgS2V0CisgMTggIDEyIEtldAorIDIwICAxOCBLZXQKKyAyMiAgIDUgQ0JyYSAzCisgMjUgICAgIGEKKyAyNyAgIDUgS2V0CisgMjkgIDI5IEtldAorIDMxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD9QPGE+YSkuLi4oP1A9YSliYmIoP1A+YSlkLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMDgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyNCBCcmEKKyAgMiAgIDUgQ0JyYSAxCisgIDUgICAgIGEKKyAgNyAgIDUgS2V0CisgIDkgICAgIEFueQorIDEwICAgICBBbnkKKyAxMSAgICAgQW55CisgMTIgICAgIFwxCisgMTQgICAgIGJiYgorIDIwICAgMiBSZWN1cnNlCisgMjIgICAgIGQKKyAyNCAgMjQgS2V0CisgMjYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hYmMoP0MyNTUpZGUoP0MpZi8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTAwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjIgQnJhCisgIDIgICAgIGFiYworICA4ICAgICBDYWxsb3V0IDI1NSAxMCAxCisgMTIgICAgIGRlCisgMTYgICAgIENhbGxvdXQgMCAxNiAxCisgMjAgICAgIGYKKyAyMiAgMjIgS2V0CisgMjQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hYmNkZS9hdXRvX2NhbGxvdXQKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTU2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzYgQnJhCisgIDIgICAgIENhbGxvdXQgMjU1IDAgMQorICA2ICAgICBhCisgIDggICAgIENhbGxvdXQgMjU1IDEgMQorIDEyICAgICBiCisgMTQgICAgIENhbGxvdXQgMjU1IDIgMQorIDE4ICAgICBjCisgMjAgICAgIENhbGxvdXQgMjU1IDMgMQorIDI0ICAgICBkCisgMjYgICAgIENhbGxvdXQgMjU1IDQgMQorIDMwICAgICBlCisgMzIgICAgIENhbGxvdXQgMjU1IDUgMAorIDM2ICAzNiBLZXQKKyAzOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezEwMH0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4ezEwMH0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMDAwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7MTAwMH0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMDAwMH0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4ezEwMDAwfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezEwMDAwMH0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4ezEwMDAwMH0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMGZmZmZ9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHsxMGZmZmZ9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTEwMDAwfS91dGYKK0ZhaWxlZDogZXJyb3IgMTM0IGF0IG9mZnNldCA5OiBjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBceHt9IG9yIFxve30gaXMgdG9vIGxhcmdlCisKKy9bXHh7ZmZ9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7ZmZ9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1x4ezEwMH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHsxMDB9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHg4MC91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7ODB9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHhmZi91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7ZmZ9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MDA0MX1ceHsyMjYyfVx4ezAzOTF9XHh7MDAyZX0vSSx1dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMCBCcmEKKyAgMiAgICAgQVx4ezIyNjJ9XHh7MzkxfS4KKyAxMCAgMTAgS2V0CisgMTIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gJ0EnCitMYXN0IGNvZGUgdW5pdCA9ICcuJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSA0CisKKy9ceHtENTVjfVx4e2FkNmR9XHh7QzVCNH0vSSx1dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOCBCcmEKKyAgMiAgICAgXHh7ZDU1Y31ceHthZDZkfVx4e2M1YjR9CisgIDggICA4IEtldAorIDEwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4e2Q1NWN9CitMYXN0IGNvZGUgdW5pdCA9IFx4e2M1YjR9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL1x4ezY1ZTV9XHh7NjcyY31ceHs4YTllfS9JLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA4IEJyYQorICAyICAgICBceHs2NWU1fVx4ezY3MmN9XHh7OGE5ZX0KKyAgOCAgIDggS2V0CisgMTAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7NjVlNX0KK0xhc3QgY29kZSB1bml0ID0gXHh7OGE5ZX0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvW1x4ezEwMH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHsxMDB9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1pceHsxMDB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNzYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNiBCcmEKKyAgMiAgICAgW1pceHsxMDB9XQorIDE2ICAxNiBLZXQKKyAxOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15bXHh7MTAwfVxFLVxRXEVceHsxNTB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMCBCcmEKKyAgMiAgICAgXgorICAzICAgICBbXHh7MTAwfS1ceHsxNTB9XQorIDEwICAxMCBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15bXFHEgFxFLVxRxZBcRV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDUyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTAgQnJhCisgIDIgICAgIF4KKyAgMyAgICAgW1x4ezEwMH0tXHh7MTUwfV0KKyAxMCAgMTAgS2V0CisgMTIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1xRxIBcRS1cUcWQXEUvdXRmCitGYWlsZWQ6IGVycm9yIDEwNiBhdCBvZmZzZXQgMTM6IG1pc3NpbmcgdGVybWluYXRpbmcgXSBmb3IgY2hhcmFjdGVyIGNsYXNzCisKKy9bXHB7TH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0OAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA5IEJyYQorICAyICAgICBbXHB7TH1dCisgIDkgICA5IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xwe15MfV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICAgIFtcUHtMfV0KKyAgOSAgIDkgS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXFB7TH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0OAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA5IEJyYQorICAyICAgICBbXFB7TH1dCisgIDkgICA5IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xQe15MfV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICAgIFtccHtMfV0KKyAgOSAgIDkgS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bYWJjXHB7TH1ceHswNjYwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDg4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTkgQnJhCisgIDIgICAgIFthLWNccHtMfVx4ezY2MH1dCisgMTkgIDE5IEtldAorIDIxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xwe05kfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICAgIFtccHtOZH1dCisgIDkgICA5IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xwe05kfSstXSsvdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDg0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTggQnJhCisgIDIgICAgIFsrXC1ccHtOZH1dKysKKyAxOCAgMTggS2V0CisgMjAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vaSx1dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMiBCcmEKKyAgMiAgL2kgQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9CisgMTIgIDEyIEtldAorIDE0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA2MAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEyIEJyYQorICAyICAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAxMiAgMTIgS2V0CisgMTQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHh7MTA1fS1ceHsxMDl9XS9pLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0OAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA5IEJyYQorICAyICAgICBbXHh7MTA0fS1ceHsxMDl9XQorICA5ICAgOSBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyggKCAoPygxKTB8KSApKiAgICkveAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMDQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyMyBCcmEKKyAgMiAgMTkgQ0JyYSAxCisgIDUgICAgIEJyYXplcm8KKyAgNiAgMTMgU0NCcmEgMgorICA5ICAgNiBDb25kCisgMTEgICAxIENvbmQgcmVmCisgMTMgICAgIDAKKyAxNSAgIDIgQWx0CisgMTcgICA4IEtldAorIDE5ICAxMyBLZXRSbWF4CisgMjEgIDE5IEtldAorIDIzICAyMyBLZXQKKyAyNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyggICg/KDEpMHwpKiAgICkveAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA4NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE4IEJyYQorICAyICAxNCBDQnJhIDEKKyAgNSAgICAgQnJhemVybworICA2ICAgNiBTQ29uZAorICA4ICAgMSBDb25kIHJlZgorIDEwICAgICAwCisgMTIgICAyIEFsdAorIDE0ICAgOCBLZXRSbWF4CisgMTYgIDE0IEtldAorIDE4ICAxOCBLZXQKKyAyMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1thXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgYQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1thXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgYQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceGFhXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7YWF9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1x4YWFdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHthYX0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXmFdLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBbXmFdCisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15hXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgW15hXQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHhhYV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFteXHh7YWF9XQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHhhYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFteXHh7YWF9XQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI3BhdHRlcm4gLW1lbW9yeQorCisvW15cZF0vdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA5IEJyYQorICAyICAgICBbXlxwe05kfV0KKyAgOSAgIDkgS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzpeYWxwaGE6XVs6XmNudHJsOl1dKy91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTMgQnJhCisgIDIgICAgIFtcUHtMfVxQe0NjfV0rKworIDEzICAxMyBLZXQKKyAxNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tbOl5jbnRybDpdWzpeYWxwaGE6XV0rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMyBCcmEKKyAgMiAgICAgW1xQe0NjfVxQe0x9XSsrCisgMTMgIDEzIEtldAorIDE1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6YWxwaGE6XV0rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMCBCcmEKKyAgMiAgICAgW1xwe0x9XSsrCisgMTAgIDEwIEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6XmFscGhhOl1cU10rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMyBCcmEKKyAgMiAgICAgW1xQe0x9XFB7WHNwfV0rKworIDEzICAxMyBLZXQKKyAxNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2FiYyhkfGUpKCpUSEVOKXgoMTIzKCpUSEVOKTR8NTY3KGJ8cSkoKlRIRU4peHgpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDYwIEJyYQorICAyICAgICBhYmMKKyAgOCAgIDUgQ0JyYSAxCisgMTEgICAgIGQKKyAxMyAgIDQgQWx0CisgMTUgICAgIGUKKyAxNyAgIDkgS2V0CisgMTkgICAgICpUSEVOCisgMjAgICAgIHgKKyAyMiAgMTIgQ0JyYSAyCisgMjUgICAgIDEyMworIDMxICAgICAqVEhFTgorIDMyICAgICA0CisgMzQgIDI0IEFsdAorIDM2ICAgICA1NjcKKyA0MiAgIDUgQ0JyYSAzCisgNDUgICAgIGIKKyA0NyAgIDQgQWx0CisgNDkgICAgIHEKKyA1MSAgIDkgS2V0CisgNTMgICAgICpUSEVOCisgNTQgICAgIHh4CisgNTggIDM2IEtldAorIDYwICA2MCBLZXQKKyA2MiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLygoKGFcMil8KGEqKVxnPC0xPikpKmE/LworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDM5IEJyYQorICAyICAgICBCcmF6ZXJvCisgIDMgIDMyIFNDQnJhIDEKKyAgNiAgMjcgT25jZQorICA4ICAxMiBDQnJhIDIKKyAxMSAgIDcgQ0JyYSAzCisgMTQgICAgIGEKKyAxNiAgICAgXDIKKyAxOCAgIDcgS2V0CisgMjAgIDExIEFsdAorIDIyICAgNSBDQnJhIDQKKyAyNSAgICAgYSoKKyAyNyAgIDUgS2V0CisgMjkgIDIyIFJlY3Vyc2UKKyAzMSAgMjMgS2V0CisgMzMgIDI3IEtldAorIDM1ICAzMiBLZXRSbWF4CisgMzcgICAgIGE/KworIDM5ICAzOSBLZXQKKyA0MSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLygoPysxKShcMSkpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDIwIEJyYQorICAyICAxNiBPbmNlCisgIDQgIDEyIENCcmEgMQorICA3ICAgOSBSZWN1cnNlCisgIDkgICA1IENCcmEgMgorIDEyICAgICBcMQorIDE0ICAgNSBLZXQKKyAxNiAgMTIgS2V0CisgMTggIDE2IEtldAorIDIwICAyMCBLZXQKKyAyMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIig/MSkoPyM/Jyl7Mn0oYSkiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjEgQnJhCisgIDIgICA0IE9uY2UKKyAgNCAgMTQgUmVjdXJzZQorICA2ICAgNCBLZXQKKyAgOCAgIDQgT25jZQorIDEwICAxNCBSZWN1cnNlCisgMTIgICA0IEtldAorIDE0ICAgNSBDQnJhIDEKKyAxNyAgICAgYQorIDE5ICAgNSBLZXQKKyAyMSAgMjEgS2V0CisgMjMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8uKCg/MikoP1IpfFwxfCQpKCkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjggQnJhCisgIDIgICAgIEFueQorICAzICAxOCBPbmNlCisgIDUgICA3IENCcmEgMQorICA4ICAyMyBSZWN1cnNlCisgMTAgICAwIFJlY3Vyc2UKKyAxMiAgIDQgQWx0CisgMTQgICAgIFwxCisgMTYgICAzIEFsdAorIDE4ICAgICAkCisgMTkgIDE0IEtldAorIDIxICAxOCBLZXQKKyAyMyAgIDMgQ0JyYSAyCisgMjYgICAzIEtldAorIDI4ICAyOCBLZXQKKyAzMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy4oKD8zKSg/UikoKSg/Mil8XDF8JCkoKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzNSBCcmEKKyAgMiAgICAgQW55CisgIDMgIDI1IE9uY2UKKyAgNSAgMTQgQ0JyYSAxCisgIDggIDMwIFJlY3Vyc2UKKyAxMCAgIDAgUmVjdXJzZQorIDEyICAgMyBDQnJhIDIKKyAxNSAgIDMgS2V0CisgMTcgIDEyIFJlY3Vyc2UKKyAxOSAgIDQgQWx0CisgMjEgICAgIFwxCisgMjMgICAzIEFsdAorIDI1ICAgICAkCisgMjYgIDIxIEtldAorIDI4ICAyNSBLZXQKKyAzMCAgIDMgQ0JyYSAzCisgMzMgICAzIEtldAorIDM1ICAzNSBLZXQKKyAzNyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/MSkoKSgoKCgoKFwxKyspKVx4ODUpKyl8KSkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNTAgQnJhCisgIDIgICA0IFJlY3Vyc2UKKyAgNCAgIDMgQ0JyYSAxCisgIDcgICAzIEtldAorICA5ICAzOSBDQnJhIDIKKyAxMiAgMzIgQ0JyYSAzCisgMTUgIDI3IENCcmEgNAorIDE4ICAyMiBDQnJhIDUKKyAyMSAgMTUgQ0JyYSA2CisgMjQgIDEwIENCcmEgNworIDI3ICAgNSBPbmNlCisgMjkgICAgIFwxKworIDMyICAgNSBLZXQKKyAzNCAgMTAgS2V0CisgMzYgIDE1IEtldAorIDM4ICAgICBceHs4NX0KKyA0MCAgMjIgS2V0Um1heAorIDQyICAyNyBLZXQKKyA0NCAgIDIgQWx0CisgNDYgIDM0IEtldAorIDQ4ICAzOSBLZXQKKyA1MCAgNTAgS2V0CisgNTIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgQ2hlY2sgdGhlIGFic29sdXRlIGxpbWl0IG9uIG5lc3RpbmcgKD98IGV0Yy4gVGhpcyB2YXJpZXMgd2l0aCBjb2RlIHVuaXQKKyMgd2lkdGggYmVjYXVzZSB0aGUgd29ya3NwYWNlIGlzIGEgZGlmZmVyZW50IG51bWJlciBvZiBieXRlcy4gSXQgd2lsbCBmYWlsCisjIHdpdGggbGluayBzaXplIDIgaW4gOC1iaXQgYW5kIDE2LWJpdCBidXQgbm90IGluIDMyLWJpdC4KKworLyg/fCg/fCg/SjooP3woP3g6KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98CispKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkKKy9wYXJlbnNfbmVzdF9saW1pdD0xMDAwLC1mdWxsYmluY29kZQorCisjIFVzZSAiZXhwYW5kIiB0byBjcmVhdGUgc29tZSB2ZXJ5IGxvbmcgcGF0dGVybnMgd2l0aCBuZXN0ZWQgcGFyZW50aGVzZXMsIGluCisjIG9yZGVyIHRvIHRlc3Qgd29ya3NwYWNlIG92ZXJmbG93LiBBZ2FpbiwgdGhpcyB2YXJpZXMgd2l0aCBjb2RlIHVuaXQgd2lkdGgsCisjIGFuZCBldmVuIHdpdGggaXQgZmFpbHMgaW4gdHdvIG1vZGVzLCB0aGUgZXJyb3Igb2Zmc2V0IGRpZmZlcnMuIEl0IGFsc28gdmFyaWVzCisjIHdpdGggbGluayBzaXplIC0gaGVuY2UgbXVsdGlwbGUgdGVzdHMgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxMDV9KlRIRU46XFtBXXsyNTV9XFspXXsxMDZ9L2V4cGFuZCwtZnVsbGJpbmNvZGUKKworLyg/J0FCQydcW1tiYXJdKF17MTA2fSpUSEVOOlxbQV17MjU1fVxbKV17MTA3fS9leHBhbmQsLWZ1bGxiaW5jb2RlCisKKy8oPydBQkMnXFtbYmFyXShdezE1OX0qVEhFTjpcW0FdezI1NX1cWyldezE2MH0vZXhwYW5kLC1mdWxsYmluY29kZQorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxOTl9KlRIRU46XFtBXXsyNTV9XFspXXsyMDB9L2V4cGFuZCwtZnVsbGJpbmNvZGUKK0ZhaWxlZDogZXJyb3IgMTg2IGF0IG9mZnNldCA5Nzk6IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyB0b28gY29tcGxpY2F0ZWQKKworLyg/J0FCQydcW1tiYXJdKF17Mjk5fSpUSEVOOlxbQV17MjU1fVxbKV17MzAwfS9leHBhbmQsLWZ1bGxiaW5jb2RlCitGYWlsZWQ6IGVycm9yIDE4NiBhdCBvZmZzZXQgOTc5OiByZWd1bGFyIGV4cHJlc3Npb24gaXMgdG9vIGNvbXBsaWNhdGVkCisKKy8oPygxKSg/MSkpezgsfSsoKS9kZWJ1ZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDc5IEJyYQorICAyICA3MCBPbmNlCisgIDQgICA2IENvbmQKKyAgNiAgIDEgQ29uZCByZWYKKyAgOCAgNzQgUmVjdXJzZQorIDEwICAgNiBLZXQKKyAxMiAgIDYgQ29uZAorIDE0ICAgMSBDb25kIHJlZgorIDE2ICA3NCBSZWN1cnNlCisgMTggICA2IEtldAorIDIwICAgNiBDb25kCisgMjIgICAxIENvbmQgcmVmCisgMjQgIDc0IFJlY3Vyc2UKKyAyNiAgIDYgS2V0CisgMjggICA2IENvbmQKKyAzMCAgIDEgQ29uZCByZWYKKyAzMiAgNzQgUmVjdXJzZQorIDM0ICAgNiBLZXQKKyAzNiAgIDYgQ29uZAorIDM4ICAgMSBDb25kIHJlZgorIDQwICA3NCBSZWN1cnNlCisgNDIgICA2IEtldAorIDQ0ICAgNiBDb25kCisgNDYgICAxIENvbmQgcmVmCisgNDggIDc0IFJlY3Vyc2UKKyA1MCAgIDYgS2V0CisgNTIgICA2IENvbmQKKyA1NCAgIDEgQ29uZCByZWYKKyA1NiAgNzQgUmVjdXJzZQorIDU4ICAgNiBLZXQKKyA2MCAgMTAgU0JyYVBvcworIDYyICAgNiBTQ29uZAorIDY0ICAgMSBDb25kIHJlZgorIDY2ICA3NCBSZWN1cnNlCisgNjggICA2IEtldAorIDcwICAxMCBLZXRScG9zCisgNzIgIDcwIEtldAorIDc0ICAgMyBDQnJhIDEKKyA3NyAgIDMgS2V0CisgNzkgIDc5IEtldAorIDgxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICBhYmNkCisgMDogCisgMTogCisKKy8oPygxKXxhKD8xKWIpezIsfSsoKS9kZWJ1ZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDQzIEJyYQorICAyICAzNCBPbmNlCisgIDQgICA0IENvbmQKKyAgNiAgIDEgQ29uZCByZWYKKyAgOCAgIDggQWx0CisgMTAgICAgIGEKKyAxMiAgMzggUmVjdXJzZQorIDE0ICAgICBiCisgMTYgIDEyIEtldAorIDE4ICAxNiBTQnJhUG9zCisgMjAgICA0IFNDb25kCisgMjIgICAxIENvbmQgcmVmCisgMjQgICA4IEFsdAorIDI2ICAgICBhCisgMjggIDM4IFJlY3Vyc2UKKyAzMCAgICAgYgorIDMyICAxMiBLZXQKKyAzNCAgMTYgS2V0UnBvcworIDM2ICAzNCBLZXQKKyAzOCAgIDMgQ0JyYSAxCisgNDEgICAzIEtldAorIDQzICA0MyBLZXQKKyA0NSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgYWJjZGUKK05vIG1hdGNoCisKKy8oKD8xKSg/MikoPzMpKD80KSg/NSkoPzYpKD83KSg/OCkoPzkpKD85KSg/OCkoPzcpKD82KSg/NSkoPzQpKD8zKSg/MikoPzEpKD8wKSl7Mix9KCkoKSgpKCkoKSgpKCkoKSgpL2RlYnVnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAxMzMgQnJhCisgIDIgIDQxIENCcmEgMQorICA1ICAgMiBSZWN1cnNlCisgIDcgIDg4IFJlY3Vyc2UKKyAgOSAgOTMgUmVjdXJzZQorIDExICA5OCBSZWN1cnNlCisgMTMgMTAzIFJlY3Vyc2UKKyAxNSAxMDggUmVjdXJzZQorIDE3IDExMyBSZWN1cnNlCisgMTkgMTE4IFJlY3Vyc2UKKyAyMSAxMjMgUmVjdXJzZQorIDIzIDEyMyBSZWN1cnNlCisgMjUgMTE4IFJlY3Vyc2UKKyAyNyAxMTMgUmVjdXJzZQorIDI5IDEwOCBSZWN1cnNlCisgMzEgMTAzIFJlY3Vyc2UKKyAzMyAgOTggUmVjdXJzZQorIDM1ICA5MyBSZWN1cnNlCisgMzcgIDg4IFJlY3Vyc2UKKyAzOSAgIDIgUmVjdXJzZQorIDQxICAgMCBSZWN1cnNlCisgNDMgIDQxIEtldAorIDQ1ICA0MSBTQ0JyYSAxCisgNDggICAyIFJlY3Vyc2UKKyA1MCAgODggUmVjdXJzZQorIDUyICA5MyBSZWN1cnNlCisgNTQgIDk4IFJlY3Vyc2UKKyA1NiAxMDMgUmVjdXJzZQorIDU4IDEwOCBSZWN1cnNlCisgNjAgMTEzIFJlY3Vyc2UKKyA2MiAxMTggUmVjdXJzZQorIDY0IDEyMyBSZWN1cnNlCisgNjYgMTIzIFJlY3Vyc2UKKyA2OCAxMTggUmVjdXJzZQorIDcwIDExMyBSZWN1cnNlCisgNzIgMTA4IFJlY3Vyc2UKKyA3NCAxMDMgUmVjdXJzZQorIDc2ICA5OCBSZWN1cnNlCisgNzggIDkzIFJlY3Vyc2UKKyA4MCAgODggUmVjdXJzZQorIDgyICAgMiBSZWN1cnNlCisgODQgICAwIFJlY3Vyc2UKKyA4NiAgNDEgS2V0Um1heAorIDg4ICAgMyBDQnJhIDIKKyA5MSAgIDMgS2V0CisgOTMgICAzIENCcmEgMworIDk2ICAgMyBLZXQKKyA5OCAgIDMgQ0JyYSA0CisxMDEgICAzIEtldAorMTAzICAgMyBDQnJhIDUKKzEwNiAgIDMgS2V0CisxMDggICAzIENCcmEgNgorMTExICAgMyBLZXQKKzExMyAgIDMgQ0JyYSA3CisxMTYgICAzIEtldAorMTE4ICAgMyBDQnJhIDgKKzEyMSAgIDMgS2V0CisxMjMgICAzIENCcmEgOQorMTI2ICAgMyBLZXQKKzEyOCAgIDMgQ0JyYSAxMAorMTMxICAgMyBLZXQKKzEzMyAxMzMgS2V0CisxMzUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworIyBFbmQgb2YgdGVzdGlucHV0OApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDgtMzItMyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTMyLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFiZDBjNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTMyLTMKQEAgLTAsMCArMSwxMDI2IEBACisjIFRoZXJlIGFyZSB0d28gc29ydHMgb2YgcGF0dGVybnMgaW4gdGhpcyB0ZXN0LiBBIG51bWJlciBvZiB0aGVtIGFyZQorIyByZXByZXNlbnRhdGl2ZSBwYXR0ZXJucyB3aG9zZSBsZW5ndGhzIGFuZCBvZmZzZXRzIGFyZSBjaGVja2VkLiBUaGlzIGlzIGp1c3QgYQorIyBkb3VibGVjaGVjayB0ZXN0IHRvIGVuc3VyZSB0aGUgc2l6ZXMgZG9uJ3QgZ28gaG9ycmlibHkgd3Jvbmcgd2hlbiBzb21ldGhpbmcKKyMgaXMgY2hhbmdlZC4gVGhlIG9wZXJhdGlvbiBvZiB0aGVzZSBwYXR0ZXJucyBpcyBjaGVja2VkIGluIG90aGVyIHRlc3RzLgorIworIyBUaGlzIGZpbGUgYWxzbyBjb250YWlucyB0ZXN0cyB3aG9zZSBvdXRwdXQgdmFyaWVzIHdpdGggY29kZSB1bml0IHNpemUgYW5kL29yCisjIGxpbmsgc2l6ZS4gVW5pY29kZSBzdXBwb3J0IGlzIHJlcXVpcmVkIGZvciB0aGVzZSB0ZXN0cy4gVGhlcmUgYXJlIHNlcGFyYXRlCisjIG91dHB1dCBmaWxlcyBmb3IgZWFjaCBjb2RlIHVuaXQgc2l6ZSBhbmQgbGluayBzaXplLgorCisjcGF0dGVybiBmdWxsYmluY29kZSxtZW1vcnkKKworLygoP2kpYikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICA1IENCcmEgMQorICA1ICAvaSBiCisgIDcgICA1IEtldAorICA5ICAgOSBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/cykoLipYfF5CKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNzYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNiBCcmEKKyAgMiAgIDcgQ0JyYSAxCisgIDUgICAgIEFsbEFueSoKKyAgNyAgICAgWAorICA5ICAgNSBBbHQKKyAxMSAgICAgXgorIDEyICAgICBCCisgMTQgIDEyIEtldAorIDE2ICAxNiBLZXQKKyAxOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/czouKlh8XkIpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA3MgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE1IEJyYQorICAyICAgNiBCcmEKKyAgNCAgICAgQWxsQW55KgorICA2ICAgICBYCisgIDggICA1IEFsdAorIDEwICAgICBeCisgMTEgICAgIEIKKyAxMyAgMTEgS2V0CisgMTUgIDE1IEtldAorIDE3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXltbOmFsbnVtOl1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA2MAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEyIEJyYQorICAyICAgICBeCisgIDMgICAgIFswLTlBLVphLXpdCisgMTIgIDEyIEtldAorIDE0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvIy9JeAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICAyIEJyYQorICAyICAgMiBLZXQKKyAgNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworT3B0aW9uczogZXh0ZW5kZWQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisvYSMvSXgKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgYQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogZXh0ZW5kZWQKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy94PysvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIHg/KworICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL3grKy8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgeCsrCisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisveHsxLDN9Ky8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNyBCcmEKKyAgMiAgICAgeAorICA0ICAgICB4ezAsMn0rCisgIDcgICA3IEtldAorICA5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKHgpKisvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDUyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTAgQnJhCisgIDIgICAgIEJyYXBvc3plcm8KKyAgMyAgIDUgQ0JyYVBvcyAxCisgIDYgICAgIHgKKyAgOCAgIDUgS2V0UnBvcworIDEwICAxMCBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL14oKGErKSg/VSkoW2FiXSspKD8tVSkoW2JjXSspKFx3KikpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA1MiBCcmEKKyAgMiAgICAgXgorICAzICA0NyBDQnJhIDEKKyAgNiAgIDUgQ0JyYSAyCisgIDkgICAgIGErCisgMTEgICA1IEtldAorIDEzICAxMyBDQnJhIDMKKyAxNiAgICAgW2FiXSs/CisgMjYgIDEzIEtldAorIDI4ICAxMyBDQnJhIDQKKyAzMSAgICAgW2JjXSsKKyA0MSAgMTMgS2V0CisgNDMgICA1IENCcmEgNQorIDQ2ICAgICBcdyorCisgNDggICA1IEtldAorIDUwICA0NyBLZXQKKyA1MiAgNTIgS2V0CisgNTQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyI4SlwkV0VcPFwuclhcK2l4XFtkMWJcIUhcI1w/dlYwdnJLXDpaSDFcPTJNXD5pVlw7XD9hUGhGQlw8XCp2V1xAUVdcQHNPOVx9Y2ZaQVwtaVwnd1wlaEtkNmd0MVVKUFwsMTVfXCNRWVwkTVxeTXNzX1VcL1xdXCZMSzlcWzV2UXViXF53XFtLRERcPEVqbWhVWlw/XC5ha3AyZEZcPnFtalw7Mlx9WVdGZFl4XC5BcFxdaGpDUFRQXChuMjhrXCszXDtvXCZXWHFzXC9nT1hkclwkXDpyXCdkbzBcO2I0Y1woZl9Hclw9XCJcXDRcKVxbMDFUN2FqUUp2TFwkV1x+bUxfc1NcLzRoXDp4XCpcW1pOXD1LTHNcJkw1elhcL1wvXD5pdFwsb1w6YVVcKFw7Wlw+cFdcJlQ3b1BcJzJLXF5FXDp4OVwnY1xbXCV6XC1cLDY0SlE1QWVIX0dcI0tpalVLZ2hRd1xeXFx2ZWEzYVw/a2thX0dcJDhcI1xgXCpreW5zeHpCTHJ1XCdcXWtfXFs3RnJWeFx9XF5cPVwkYmx4XD5zXC1OXCVqXDtEXCphWkRuc3dcOllLWlwlUVwuS25lOVwjaFBcP1wrYjNcKFNPdkxcLFxeXDtcJnU1XEBcPzVDNUJoYlw9bVwtdkVoX0wxNUpsXF1VXCkwUlA2XHtxXCVMXF5fejVFXCdEdzZYXGIiCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDMyOTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDgyMSBCcmEKKyAgMiAgICAgOEokV0U8LnJYK2l4W2QxYiFIIz92VjB2cks6WkgxPTJNPmlWOz9hUGhGQjwqdldAUVdAc085fWNmWkEtaSd3JWhLZDZndDFVSlAsMTVfI1FZJE1eTXNzX1UvXSZMSzlbNXZRdWJed1tLREQ8RWptaFVaPy5ha3AyZEY+cW1qOzJ9WVdGZFl4LkFwXWhqQ1BUUChuMjhrKzM7byZXWHFzL2dPWGRyJDpyJ2RvMDtiNGMoZl9Hcj0iXDQpWzAxVDdhalFKdkwkV35tTF9zUy80aDp4KltaTj1LTHMmTDV6WC8vPml0LG86YVUoO1o+cFcmVDdvUCcyS15FOng5J2NbJXotLDY0SlE1QWVIX0cjS2lqVUtnaFF3Xlx2ZWEzYT9ra2FfRyQ4I2Aqa3luc3h6QkxydSdda19bN0ZyVnh9Xj0kYmx4PnMtTiVqO0QqYVpEbnN3OllLWiVRLktuZTkjaFA/K2IzKFNPdkwsXjsmdTVAPzVDNUJoYj1tLXZFaF9MMTVKbF1VKTBSUDZ7cSVMXl96NUUnRHc2WAorODIwICAgICBcYgorODIxIDgyMSBLZXQKKzgyMyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIlwkXDxcLlhcK2l4XFtkMWJcIUhcI1w/dlYwdnJLXDpaSDFcPTJNXD5pVlw7XD9hUGhGQlw8XCp2V1xAUVdcQHNPOVx9Y2ZaQVwtaVwnd1wlaEtkNmd0MVVKUFwsMTVfXCNRWVwkTVxeTXNzX1VcL1xdXCZMSzlcWzV2UXViXF53XFtLRERcPEVqbWhVWlw/XC5ha3AyZEZcPnFtalw7Mlx9WVdGZFl4XC5BcFxdaGpDUFRQXChuMjhrXCszXDtvXCZXWHFzXC9nT1hkclwkXDpyXCdkbzBcO2I0Y1woZl9Hclw9XCJcXDRcKVxbMDFUN2FqUUp2TFwkV1x+bUxfc1NcLzRoXDp4XCpcW1pOXD1LTHNcJkw1elhcL1wvXD5pdFwsb1w6YVVcKFw7Wlw+cFdcJlQ3b1BcJzJLXF5FXDp4OVwnY1xbXCV6XC1cLDY0SlE1QWVIX0dcI0tpalVLZ2hRd1xeXFx2ZWEzYVw/a2thX0dcJDhcI1xgXCpreW5zeHpCTHJ1XCdcXWtfXFs3RnJWeFx9XF5cPVwkYmx4XD5zXC1OXCVqXDtEXCphWkRuc3dcOllLWlwlUVwuS25lOVwjaFBcP1wrYjNcKFNPdkxcLFxeXDtcJnU1XEBcPzVDNUJoYlw9bVwtdkVoX0wxNUpsXF1VXCkwUlA2XHtxXCVMXF5fejVFXCdEdzZYXGIiCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDMyNTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDgxMSBCcmEKKyAgMiAgICAgJDwuWCtpeFtkMWIhSCM/dlYwdnJLOlpIMT0yTT5pVjs/YVBoRkI8KnZXQFFXQHNPOX1jZlpBLWkndyVoS2Q2Z3QxVUpQLDE1XyNRWSRNXk1zc19VL10mTEs5WzV2UXViXndbS0REPEVqbWhVWj8uYWtwMmRGPnFtajsyfVlXRmRZeC5BcF1oakNQVFAobjI4ayszO28mV1hxcy9nT1hkciQ6cidkbzA7YjRjKGZfR3I9Ilw0KVswMVQ3YWpRSnZMJFd+bUxfc1MvNGg6eCpbWk49S0xzJkw1elgvLz5pdCxvOmFVKDtaPnBXJlQ3b1AnMkteRTp4OSdjWyV6LSw2NEpRNUFlSF9HI0tpalVLZ2hRd15cdmVhM2E/a2thX0ckOCNgKmt5bnN4ekJMcnUnXWtfWzdGclZ4fV49JGJseD5zLU4lajtEKmFaRG5zdzpZS1olUS5LbmU5I2hQPytiMyhTT3ZMLF47JnU1QD81QzVCaGI9bS12RWhfTDE1SmxdVSkwUlA2e3ElTF5fejVFJ0R3NlgKKzgxMCAgICAgXGIKKzgxMSA4MTEgS2V0Cis4MTMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oYSg/MSliKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNjQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMyBCcmEKKyAgMiAgIDkgQ0JyYSAxCisgIDUgICAgIGEKKyAgNyAgIDIgUmVjdXJzZQorICA5ICAgICBiCisgMTEgICA5IEtldAorIDEzICAxMyBLZXQKKyAxNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyhhKD8xKStiKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogODAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNyBCcmEKKyAgMiAgMTMgQ0JyYSAxCisgIDUgICAgIGEKKyAgNyAgIDQgT25jZQorICA5ICAgMiBSZWN1cnNlCisgMTEgICA0IEtldFJtYXgKKyAxMyAgICAgYgorIDE1ICAxMyBLZXQKKyAxNyAgMTcgS2V0CisgMTkgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hKD9QPG5hbWUxPmJ8YylkKD9QPGxvbmdlcm5hbWUyPmUpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMDgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyNCBCcmEKKyAgMiAgICAgYQorICA0ICAgNSBDQnJhIDEKKyAgNyAgICAgYgorICA5ICAgNCBBbHQKKyAxMSAgICAgYworIDEzICAgOSBLZXQKKyAxNSAgICAgZAorIDE3ICAgNSBDQnJhIDIKKyAyMCAgICAgZQorIDIyICAgNSBLZXQKKyAyNCAgMjQgS2V0CisgMjYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oPzphKD9QPGM+Yyg/UDxkPmQpKSkoP1A8YT5hKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjkgQnJhCisgIDIgIDE4IEJyYQorICA0ICAgICBhCisgIDYgIDEyIENCcmEgMQorICA5ICAgICBjCisgMTEgICA1IENCcmEgMgorIDE0ICAgICBkCisgMTYgICA1IEtldAorIDE4ICAxMiBLZXQKKyAyMCAgMTggS2V0CisgMjIgICA1IENCcmEgMworIDI1ICAgICBhCisgMjcgICA1IEtldAorIDI5ICAyOSBLZXQKKyAzMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/UDxhPmEpLi4uKD9QPWEpYmJiKD9QPmEpZC8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTA4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjQgQnJhCisgIDIgICA1IENCcmEgMQorICA1ICAgICBhCisgIDcgICA1IEtldAorICA5ICAgICBBbnkKKyAxMCAgICAgQW55CisgMTEgICAgIEFueQorIDEyICAgICBcMQorIDE0ICAgICBiYmIKKyAyMCAgIDIgUmVjdXJzZQorIDIyICAgICBkCisgMjQgIDI0IEtldAorIDI2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYWJjKD9DMjU1KWRlKD9DKWYvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEwMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDIyIEJyYQorICAyICAgICBhYmMKKyAgOCAgICAgQ2FsbG91dCAyNTUgMTAgMQorIDEyICAgICBkZQorIDE2ICAgICBDYWxsb3V0IDAgMTYgMQorIDIwICAgICBmCisgMjIgIDIyIEtldAorIDI0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYWJjZGUvYXV0b19jYWxsb3V0CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE1NgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDM2IEJyYQorICAyICAgICBDYWxsb3V0IDI1NSAwIDEKKyAgNiAgICAgYQorICA4ICAgICBDYWxsb3V0IDI1NSAxIDEKKyAxMiAgICAgYgorIDE0ICAgICBDYWxsb3V0IDI1NSAyIDEKKyAxOCAgICAgYworIDIwICAgICBDYWxsb3V0IDI1NSAzIDEKKyAyNCAgICAgZAorIDI2ICAgICBDYWxsb3V0IDI1NSA0IDEKKyAzMCAgICAgZQorIDMyICAgICBDYWxsb3V0IDI1NSA1IDAKKyAzNiAgMzYgS2V0CisgMzggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHsxMDB9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwMH0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4ezEwMDB9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHsxMDAwMH0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMDAwMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHsxMDAwMDB9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTBmZmZmfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7MTBmZmZmfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezExMDAwMH0vdXRmCitGYWlsZWQ6IGVycm9yIDEzNCBhdCBvZmZzZXQgOTogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisvW1x4e2ZmfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4e2ZmfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceHsxMDB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7MTAwfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ODAvdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4ezgwfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ZmYvdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4e2ZmfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezAwNDF9XHh7MjI2Mn1ceHswMzkxfVx4ezAwMmV9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDUyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTAgQnJhCisgIDIgICAgIEFceHsyMjYyfVx4ezM5MX0uCisgMTAgIDEwIEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdBJworTGFzdCBjb2RlIHVuaXQgPSAnLicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvXHh7RDU1Y31ceHthZDZkfVx4e0M1QjR9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDggQnJhCisgIDIgICAgIFx4e2Q1NWN9XHh7YWQ2ZH1ceHtjNWI0fQorICA4ICAgOCBLZXQKKyAxMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHtkNTVjfQorTGFzdCBjb2RlIHVuaXQgPSBceHtjNWI0fQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9ceHs2NWU1fVx4ezY3MmN9XHh7OGE5ZX0vSSx1dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOCBCcmEKKyAgMiAgICAgXHh7NjVlNX1ceHs2NzJjfVx4ezhhOWV9CisgIDggICA4IEtldAorIDEwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9IFx4ezY1ZTV9CitMYXN0IGNvZGUgdW5pdCA9IFx4ezhhOWV9CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL1tceHsxMDB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7MTAwfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1taXHh7MTAwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDc2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTYgQnJhCisgIDIgICAgIFtaXHh7MTAwfV0KKyAxNiAgMTYgS2V0CisgMTggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1x4ezEwMH1cRS1cUVxFXHh7MTUwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDUyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTAgQnJhCisgIDIgICAgIF4KKyAgMyAgICAgW1x4ezEwMH0tXHh7MTUwfV0KKyAxMCAgMTAgS2V0CisgMTIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1xRxIBcRS1cUcWQXEVdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA1MgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEwIEJyYQorICAyICAgICBeCisgIDMgICAgIFtceHsxMDB9LVx4ezE1MH1dCisgMTAgIDEwIEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXltcUcSAXEUtXFHFkFxFL3V0ZgorRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDEzOiBtaXNzaW5nIHRlcm1pbmF0aW5nIF0gZm9yIGNoYXJhY3RlciBjbGFzcworCisvW1xwe0x9XS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgICAgW1xwe0x9XQorICA5ICAgOSBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tccHteTH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0OAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA5IEJyYQorICAyICAgICBbXFB7TH1dCisgIDkgICA5IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xQe0x9XS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgICAgW1xQe0x9XQorICA5ICAgOSBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tcUHteTH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0OAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA5IEJyYQorICAyICAgICBbXHB7TH1dCisgIDkgICA5IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW2FiY1xwe0x9XHh7MDY2MH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA4OAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE5IEJyYQorICAyICAgICBbYS1jXHB7TH1ceHs2NjB9XQorIDE5ICAxOSBLZXQKKyAyMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tccHtOZH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0OAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA5IEJyYQorICAyICAgICBbXHB7TmR9XQorICA5ICAgOSBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tccHtOZH0rLV0rL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA4NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE4IEJyYQorICAyICAgICBbK1wtXHB7TmR9XSsrCisgMTggIDE4IEtldAorIDIwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9L2ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDYwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTIgQnJhCisgIDIgIC9pIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorIDEyICAxMiBLZXQKKyAxNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMiBCcmEKKyAgMiAgICAgQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9CisgMTIgIDEyIEtldAorIDE0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1x4ezEwNX0tXHh7MTA5fV0vaSx1dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgICAgW1x4ezEwNH0tXHh7MTA5fV0KKyAgOSAgIDkgS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oICggKD8oMSkwfCkgKSogICApL3gKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTA0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjMgQnJhCisgIDIgIDE5IENCcmEgMQorICA1ICAgICBCcmF6ZXJvCisgIDYgIDEzIFNDQnJhIDIKKyAgOSAgIDYgQ29uZAorIDExICAgMSBDb25kIHJlZgorIDEzICAgICAwCisgMTUgICAyIEFsdAorIDE3ICAgOCBLZXQKKyAxOSAgMTMgS2V0Um1heAorIDIxICAxOSBLZXQKKyAyMyAgMjMgS2V0CisgMjUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oICAoPygxKTB8KSogICApL3gKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogODQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxOCBCcmEKKyAgMiAgMTQgQ0JyYSAxCisgIDUgICAgIEJyYXplcm8KKyAgNiAgIDYgU0NvbmQKKyAgOCAgIDEgQ29uZCByZWYKKyAxMCAgICAgMAorIDEyICAgMiBBbHQKKyAxNCAgIDggS2V0Um1heAorIDE2ICAxNCBLZXQKKyAxOCAgMTggS2V0CisgMjAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bYV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIGEKKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIGEKKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHhhYV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4e2FhfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceGFhXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7YWF9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15hXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgW15hXQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFteYV0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXlx4YWFdLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBbXlx4e2FhfV0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXlx4YWFdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBbXlx4e2FhfV0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNwYXR0ZXJuIC1tZW1vcnkKKworL1teXGRdL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgICAgW15ccHtOZH1dCisgIDkgICA5IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6XmFscGhhOl1bOl5jbnRybDpdXSsvdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEzIEJyYQorICAyICAgICBbXFB7TH1cUHtDY31dKysKKyAxMyAgMTMgS2V0CisgMTUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzpeY250cmw6XVs6XmFscGhhOl1dKy91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTMgQnJhCisgIDIgICAgIFtcUHtDY31cUHtMfV0rKworIDEzICAxMyBLZXQKKyAxNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tbOmFscGhhOl1dKy91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTAgQnJhCisgIDIgICAgIFtccHtMfV0rKworIDEwICAxMCBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tbOl5hbHBoYTpdXFNdKy91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTMgQnJhCisgIDIgICAgIFtcUHtMfVxQe1hzcH1dKysKKyAxMyAgMTMgS2V0CisgMTUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hYmMoZHxlKSgqVEhFTil4KDEyMygqVEhFTik0fDU2NyhifHEpKCpUSEVOKXh4KS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA2MCBCcmEKKyAgMiAgICAgYWJjCisgIDggICA1IENCcmEgMQorIDExICAgICBkCisgMTMgICA0IEFsdAorIDE1ICAgICBlCisgMTcgICA5IEtldAorIDE5ICAgICAqVEhFTgorIDIwICAgICB4CisgMjIgIDEyIENCcmEgMgorIDI1ICAgICAxMjMKKyAzMSAgICAgKlRIRU4KKyAzMiAgICAgNAorIDM0ICAyNCBBbHQKKyAzNiAgICAgNTY3CisgNDIgICA1IENCcmEgMworIDQ1ICAgICBiCisgNDcgICA0IEFsdAorIDQ5ICAgICBxCisgNTEgICA5IEtldAorIDUzICAgICAqVEhFTgorIDU0ICAgICB4eAorIDU4ICAzNiBLZXQKKyA2MCAgNjAgS2V0CisgNjIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oKChhXDIpfChhKilcZzwtMT4pKSphPy8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzOSBCcmEKKyAgMiAgICAgQnJhemVybworICAzICAzMiBTQ0JyYSAxCisgIDYgIDI3IE9uY2UKKyAgOCAgMTIgQ0JyYSAyCisgMTEgICA3IENCcmEgMworIDE0ICAgICBhCisgMTYgICAgIFwyCisgMTggICA3IEtldAorIDIwICAxMSBBbHQKKyAyMiAgIDUgQ0JyYSA0CisgMjUgICAgIGEqCisgMjcgICA1IEtldAorIDI5ICAyMiBSZWN1cnNlCisgMzEgIDIzIEtldAorIDMzICAyNyBLZXQKKyAzNSAgMzIgS2V0Um1heAorIDM3ICAgICBhPysKKyAzOSAgMzkgS2V0CisgNDEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oKD8rMSkoXDEpKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyMCBCcmEKKyAgMiAgMTYgT25jZQorICA0ICAxMiBDQnJhIDEKKyAgNyAgIDkgUmVjdXJzZQorICA5ICAgNSBDQnJhIDIKKyAxMiAgICAgXDEKKyAxNCAgIDUgS2V0CisgMTYgIDEyIEtldAorIDE4ICAxNiBLZXQKKyAyMCAgMjAgS2V0CisgMjIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyIoPzEpKD8jPycpezJ9KGEpIgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDIxIEJyYQorICAyICAgNCBPbmNlCisgIDQgIDE0IFJlY3Vyc2UKKyAgNiAgIDQgS2V0CisgIDggICA0IE9uY2UKKyAxMCAgMTQgUmVjdXJzZQorIDEyICAgNCBLZXQKKyAxNCAgIDUgQ0JyYSAxCisgMTcgICAgIGEKKyAxOSAgIDUgS2V0CisgMjEgIDIxIEtldAorIDIzICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLigoPzIpKD9SKXxcMXwkKSgpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI4IEJyYQorICAyICAgICBBbnkKKyAgMyAgMTggT25jZQorICA1ICAgNyBDQnJhIDEKKyAgOCAgMjMgUmVjdXJzZQorIDEwICAgMCBSZWN1cnNlCisgMTIgICA0IEFsdAorIDE0ICAgICBcMQorIDE2ICAgMyBBbHQKKyAxOCAgICAgJAorIDE5ICAxNCBLZXQKKyAyMSAgMTggS2V0CisgMjMgICAzIENCcmEgMgorIDI2ICAgMyBLZXQKKyAyOCAgMjggS2V0CisgMzAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8uKCg/MykoP1IpKCkoPzIpfFwxfCQpKCkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzUgQnJhCisgIDIgICAgIEFueQorICAzICAyNSBPbmNlCisgIDUgIDE0IENCcmEgMQorICA4ICAzMCBSZWN1cnNlCisgMTAgICAwIFJlY3Vyc2UKKyAxMiAgIDMgQ0JyYSAyCisgMTUgICAzIEtldAorIDE3ICAxMiBSZWN1cnNlCisgMTkgICA0IEFsdAorIDIxICAgICBcMQorIDIzICAgMyBBbHQKKyAyNSAgICAgJAorIDI2ICAyMSBLZXQKKyAyOCAgMjUgS2V0CisgMzAgICAzIENCcmEgMworIDMzICAgMyBLZXQKKyAzNSAgMzUgS2V0CisgMzcgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oPzEpKCkoKCgoKChcMSsrKSlceDg1KSspfCkpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDUwIEJyYQorICAyICAgNCBSZWN1cnNlCisgIDQgICAzIENCcmEgMQorICA3ICAgMyBLZXQKKyAgOSAgMzkgQ0JyYSAyCisgMTIgIDMyIENCcmEgMworIDE1ICAyNyBDQnJhIDQKKyAxOCAgMjIgQ0JyYSA1CisgMjEgIDE1IENCcmEgNgorIDI0ICAxMCBDQnJhIDcKKyAyNyAgIDUgT25jZQorIDI5ICAgICBcMSsKKyAzMiAgIDUgS2V0CisgMzQgIDEwIEtldAorIDM2ICAxNSBLZXQKKyAzOCAgICAgXHh7ODV9CisgNDAgIDIyIEtldFJtYXgKKyA0MiAgMjcgS2V0CisgNDQgICAyIEFsdAorIDQ2ICAzNCBLZXQKKyA0OCAgMzkgS2V0CisgNTAgIDUwIEtldAorIDUyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIENoZWNrIHRoZSBhYnNvbHV0ZSBsaW1pdCBvbiBuZXN0aW5nICg/fCBldGMuIFRoaXMgdmFyaWVzIHdpdGggY29kZSB1bml0CisjIHdpZHRoIGJlY2F1c2UgdGhlIHdvcmtzcGFjZSBpcyBhIGRpZmZlcmVudCBudW1iZXIgb2YgYnl0ZXMuIEl0IHdpbGwgZmFpbAorIyB3aXRoIGxpbmsgc2l6ZSAyIGluIDgtYml0IGFuZCAxNi1iaXQgYnV0IG5vdCBpbiAzMi1iaXQuCisKKy8oP3woP3woP0o6KD98KD94Oig/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fCg/fAorKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpCisvcGFyZW5zX25lc3RfbGltaXQ9MTAwMCwtZnVsbGJpbmNvZGUKKworIyBVc2UgImV4cGFuZCIgdG8gY3JlYXRlIHNvbWUgdmVyeSBsb25nIHBhdHRlcm5zIHdpdGggbmVzdGVkIHBhcmVudGhlc2VzLCBpbgorIyBvcmRlciB0byB0ZXN0IHdvcmtzcGFjZSBvdmVyZmxvdy4gQWdhaW4sIHRoaXMgdmFyaWVzIHdpdGggY29kZSB1bml0IHdpZHRoLAorIyBhbmQgZXZlbiB3aXRoIGl0IGZhaWxzIGluIHR3byBtb2RlcywgdGhlIGVycm9yIG9mZnNldCBkaWZmZXJzLiBJdCBhbHNvIHZhcmllcworIyB3aXRoIGxpbmsgc2l6ZSAtIGhlbmNlIG11bHRpcGxlIHRlc3RzIHdpdGggZGlmZmVyZW50IHZhbHVlcy4KKworLyg/J0FCQydcW1tiYXJdKF17MTA1fSpUSEVOOlxbQV17MjU1fVxbKV17MTA2fS9leHBhbmQsLWZ1bGxiaW5jb2RlCisKKy8oPydBQkMnXFtbYmFyXShdezEwNn0qVEhFTjpcW0FdezI1NX1cWyldezEwN30vZXhwYW5kLC1mdWxsYmluY29kZQorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxNTl9KlRIRU46XFtBXXsyNTV9XFspXXsxNjB9L2V4cGFuZCwtZnVsbGJpbmNvZGUKKworLyg/J0FCQydcW1tiYXJdKF17MTk5fSpUSEVOOlxbQV17MjU1fVxbKV17MjAwfS9leHBhbmQsLWZ1bGxiaW5jb2RlCitGYWlsZWQ6IGVycm9yIDE4NiBhdCBvZmZzZXQgOTc5OiByZWd1bGFyIGV4cHJlc3Npb24gaXMgdG9vIGNvbXBsaWNhdGVkCisKKy8oPydBQkMnXFtbYmFyXShdezI5OX0qVEhFTjpcW0FdezI1NX1cWyldezMwMH0vZXhwYW5kLC1mdWxsYmluY29kZQorRmFpbGVkOiBlcnJvciAxODYgYXQgb2Zmc2V0IDk3OTogcmVndWxhciBleHByZXNzaW9uIGlzIHRvbyBjb21wbGljYXRlZAorCisvKD8oMSkoPzEpKXs4LH0rKCkvZGVidWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA3OSBCcmEKKyAgMiAgNzAgT25jZQorICA0ICAgNiBDb25kCisgIDYgICAxIENvbmQgcmVmCisgIDggIDc0IFJlY3Vyc2UKKyAxMCAgIDYgS2V0CisgMTIgICA2IENvbmQKKyAxNCAgIDEgQ29uZCByZWYKKyAxNiAgNzQgUmVjdXJzZQorIDE4ICAgNiBLZXQKKyAyMCAgIDYgQ29uZAorIDIyICAgMSBDb25kIHJlZgorIDI0ICA3NCBSZWN1cnNlCisgMjYgICA2IEtldAorIDI4ICAgNiBDb25kCisgMzAgICAxIENvbmQgcmVmCisgMzIgIDc0IFJlY3Vyc2UKKyAzNCAgIDYgS2V0CisgMzYgICA2IENvbmQKKyAzOCAgIDEgQ29uZCByZWYKKyA0MCAgNzQgUmVjdXJzZQorIDQyICAgNiBLZXQKKyA0NCAgIDYgQ29uZAorIDQ2ICAgMSBDb25kIHJlZgorIDQ4ICA3NCBSZWN1cnNlCisgNTAgICA2IEtldAorIDUyICAgNiBDb25kCisgNTQgICAxIENvbmQgcmVmCisgNTYgIDc0IFJlY3Vyc2UKKyA1OCAgIDYgS2V0CisgNjAgIDEwIFNCcmFQb3MKKyA2MiAgIDYgU0NvbmQKKyA2NCAgIDEgQ29uZCByZWYKKyA2NiAgNzQgUmVjdXJzZQorIDY4ICAgNiBLZXQKKyA3MCAgMTAgS2V0UnBvcworIDcyICA3MCBLZXQKKyA3NCAgIDMgQ0JyYSAxCisgNzcgICAzIEtldAorIDc5ICA3OSBLZXQKKyA4MSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgYWJjZAorIDA6IAorIDE6IAorCisvKD8oMSl8YSg/MSliKXsyLH0rKCkvZGVidWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA0MyBCcmEKKyAgMiAgMzQgT25jZQorICA0ICAgNCBDb25kCisgIDYgICAxIENvbmQgcmVmCisgIDggICA4IEFsdAorIDEwICAgICBhCisgMTIgIDM4IFJlY3Vyc2UKKyAxNCAgICAgYgorIDE2ICAxMiBLZXQKKyAxOCAgMTYgU0JyYVBvcworIDIwICAgNCBTQ29uZAorIDIyICAgMSBDb25kIHJlZgorIDI0ICAgOCBBbHQKKyAyNiAgICAgYQorIDI4ICAzOCBSZWN1cnNlCisgMzAgICAgIGIKKyAzMiAgMTIgS2V0CisgMzQgIDE2IEtldFJwb3MKKyAzNiAgMzQgS2V0CisgMzggICAzIENCcmEgMQorIDQxICAgMyBLZXQKKyA0MyAgNDMgS2V0CisgNDUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY2RlCitObyBtYXRjaAorCisvKCg/MSkoPzIpKD8zKSg/NCkoPzUpKD82KSg/NykoPzgpKD85KSg/OSkoPzgpKD83KSg/NikoPzUpKD80KSg/MykoPzIpKD8xKSg/MCkpezIsfSgpKCkoKSgpKCkoKSgpKCkoKS9kZWJ1ZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgMTMzIEJyYQorICAyICA0MSBDQnJhIDEKKyAgNSAgIDIgUmVjdXJzZQorICA3ICA4OCBSZWN1cnNlCisgIDkgIDkzIFJlY3Vyc2UKKyAxMSAgOTggUmVjdXJzZQorIDEzIDEwMyBSZWN1cnNlCisgMTUgMTA4IFJlY3Vyc2UKKyAxNyAxMTMgUmVjdXJzZQorIDE5IDExOCBSZWN1cnNlCisgMjEgMTIzIFJlY3Vyc2UKKyAyMyAxMjMgUmVjdXJzZQorIDI1IDExOCBSZWN1cnNlCisgMjcgMTEzIFJlY3Vyc2UKKyAyOSAxMDggUmVjdXJzZQorIDMxIDEwMyBSZWN1cnNlCisgMzMgIDk4IFJlY3Vyc2UKKyAzNSAgOTMgUmVjdXJzZQorIDM3ICA4OCBSZWN1cnNlCisgMzkgICAyIFJlY3Vyc2UKKyA0MSAgIDAgUmVjdXJzZQorIDQzICA0MSBLZXQKKyA0NSAgNDEgU0NCcmEgMQorIDQ4ICAgMiBSZWN1cnNlCisgNTAgIDg4IFJlY3Vyc2UKKyA1MiAgOTMgUmVjdXJzZQorIDU0ICA5OCBSZWN1cnNlCisgNTYgMTAzIFJlY3Vyc2UKKyA1OCAxMDggUmVjdXJzZQorIDYwIDExMyBSZWN1cnNlCisgNjIgMTE4IFJlY3Vyc2UKKyA2NCAxMjMgUmVjdXJzZQorIDY2IDEyMyBSZWN1cnNlCisgNjggMTE4IFJlY3Vyc2UKKyA3MCAxMTMgUmVjdXJzZQorIDcyIDEwOCBSZWN1cnNlCisgNzQgMTAzIFJlY3Vyc2UKKyA3NiAgOTggUmVjdXJzZQorIDc4ICA5MyBSZWN1cnNlCisgODAgIDg4IFJlY3Vyc2UKKyA4MiAgIDIgUmVjdXJzZQorIDg0ICAgMCBSZWN1cnNlCisgODYgIDQxIEtldFJtYXgKKyA4OCAgIDMgQ0JyYSAyCisgOTEgICAzIEtldAorIDkzICAgMyBDQnJhIDMKKyA5NiAgIDMgS2V0CisgOTggICAzIENCcmEgNAorMTAxICAgMyBLZXQKKzEwMyAgIDMgQ0JyYSA1CisxMDYgICAzIEtldAorMTA4ICAgMyBDQnJhIDYKKzExMSAgIDMgS2V0CisxMTMgICAzIENCcmEgNworMTE2ICAgMyBLZXQKKzExOCAgIDMgQ0JyYSA4CisxMjEgICAzIEtldAorMTIzICAgMyBDQnJhIDkKKzEyNiAgIDMgS2V0CisxMjggICAzIENCcmEgMTAKKzEzMSAgIDMgS2V0CisxMzMgMTMzIEtldAorMTM1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxMAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKyMgRW5kIG9mIHRlc3RpbnB1dDgKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTMyLTQgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0zMi00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYmQwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC0zMi00CkBAIC0wLDAgKzEsMTAyNiBAQAorIyBUaGVyZSBhcmUgdHdvIHNvcnRzIG9mIHBhdHRlcm5zIGluIHRoaXMgdGVzdC4gQSBudW1iZXIgb2YgdGhlbSBhcmUKKyMgcmVwcmVzZW50YXRpdmUgcGF0dGVybnMgd2hvc2UgbGVuZ3RocyBhbmQgb2Zmc2V0cyBhcmUgY2hlY2tlZC4gVGhpcyBpcyBqdXN0IGEKKyMgZG91YmxlY2hlY2sgdGVzdCB0byBlbnN1cmUgdGhlIHNpemVzIGRvbid0IGdvIGhvcnJpYmx5IHdyb25nIHdoZW4gc29tZXRoaW5nCisjIGlzIGNoYW5nZWQuIFRoZSBvcGVyYXRpb24gb2YgdGhlc2UgcGF0dGVybnMgaXMgY2hlY2tlZCBpbiBvdGhlciB0ZXN0cy4KKyMKKyMgVGhpcyBmaWxlIGFsc28gY29udGFpbnMgdGVzdHMgd2hvc2Ugb3V0cHV0IHZhcmllcyB3aXRoIGNvZGUgdW5pdCBzaXplIGFuZC9vcgorIyBsaW5rIHNpemUuIFVuaWNvZGUgc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhlc2UgdGVzdHMuIFRoZXJlIGFyZSBzZXBhcmF0ZQorIyBvdXRwdXQgZmlsZXMgZm9yIGVhY2ggY29kZSB1bml0IHNpemUgYW5kIGxpbmsgc2l6ZS4KKworI3BhdHRlcm4gZnVsbGJpbmNvZGUsbWVtb3J5CisKKy8oKD9pKWIpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0OAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA5IEJyYQorICAyICAgNSBDQnJhIDEKKyAgNSAgL2kgYgorICA3ICAgNSBLZXQKKyAgOSAgIDkgS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oP3MpKC4qWHxeQikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDc2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTYgQnJhCisgIDIgICA3IENCcmEgMQorICA1ICAgICBBbGxBbnkqCisgIDcgICAgIFgKKyAgOSAgIDUgQWx0CisgMTEgICAgIF4KKyAxMiAgICAgQgorIDE0ICAxMiBLZXQKKyAxNiAgMTYgS2V0CisgMTggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oP3M6LipYfF5CKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNzIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNSBCcmEKKyAgMiAgIDYgQnJhCisgIDQgICAgIEFsbEFueSoKKyAgNiAgICAgWAorICA4ICAgNSBBbHQKKyAxMCAgICAgXgorIDExICAgICBCCisgMTMgIDExIEtldAorIDE1ICAxNSBLZXQKKyAxNyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15bWzphbG51bTpdXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMiBCcmEKKyAgMiAgICAgXgorICAzICAgICBbMC05QS1aYS16XQorIDEyICAxMiBLZXQKKyAxNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyMvSXgKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgMiBCcmEKKyAgMiAgIDIgS2V0CisgIDQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK09wdGlvbnM6IGV4dGVuZGVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworL2EjL0l4CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIGEKKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGV4dGVuZGVkCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisveD8rLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICB4PysKKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy94KysvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIHgrKworICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL3h7MSwzfSsvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDcgQnJhCisgIDIgICAgIHgKKyAgNCAgICAgeHswLDJ9KworICA3ICAgNyBLZXQKKyAgOSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyh4KSorLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA1MgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEwIEJyYQorICAyICAgICBCcmFwb3N6ZXJvCisgIDMgICA1IENCcmFQb3MgMQorICA2ICAgICB4CisgIDggICA1IEtldFJwb3MKKyAxMCAgMTAgS2V0CisgMTIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eKChhKykoP1UpKFthYl0rKSg/LVUpKFtiY10rKShcdyopKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjIwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNTIgQnJhCisgIDIgICAgIF4KKyAgMyAgNDcgQ0JyYSAxCisgIDYgICA1IENCcmEgMgorICA5ICAgICBhKworIDExICAgNSBLZXQKKyAxMyAgMTMgQ0JyYSAzCisgMTYgICAgIFthYl0rPworIDI2ICAxMyBLZXQKKyAyOCAgMTMgQ0JyYSA0CisgMzEgICAgIFtiY10rCisgNDEgIDEzIEtldAorIDQzICAgNSBDQnJhIDUKKyA0NiAgICAgXHcqKworIDQ4ICAgNSBLZXQKKyA1MCAgNDcgS2V0CisgNTIgIDUyIEtldAorIDU0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiOEpcJFdFXDxcLnJYXCtpeFxbZDFiXCFIXCNcP3ZWMHZyS1w6WkgxXD0yTVw+aVZcO1w/YVBoRkJcPFwqdldcQFFXXEBzTzlcfWNmWkFcLWlcJ3dcJWhLZDZndDFVSlBcLDE1X1wjUVlcJE1cXk1zc19VXC9cXVwmTEs5XFs1dlF1Ylxed1xbS0REXDxFam1oVVpcP1wuYWtwMmRGXD5xbWpcOzJcfVlXRmRZeFwuQXBcXWhqQ1BUUFwobjI4a1wrM1w7b1wmV1hxc1wvZ09YZHJcJFw6clwnZG8wXDtiNGNcKGZfR3JcPVwiXFw0XClcWzAxVDdhalFKdkxcJFdcfm1MX3NTXC80aFw6eFwqXFtaTlw9S0xzXCZMNXpYXC9cL1w+aXRcLG9cOmFVXChcO1pcPnBXXCZUN29QXCcyS1xeRVw6eDlcJ2NcW1wlelwtXCw2NEpRNUFlSF9HXCNLaWpVS2doUXdcXlxcdmVhM2FcP2trYV9HXCQ4XCNcYFwqa3luc3h6QkxydVwnXF1rX1xbN0ZyVnhcfVxeXD1cJGJseFw+c1wtTlwlalw7RFwqYVpEbnN3XDpZS1pcJVFcLktuZTlcI2hQXD9cK2IzXChTT3ZMXCxcXlw7XCZ1NVxAXD81QzVCaGJcPW1cLXZFaF9MMTVKbFxdVVwpMFJQNlx7cVwlTFxeX3o1RVwnRHc2WFxiIgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzMjk2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCA4MjEgQnJhCisgIDIgICAgIDhKJFdFPC5yWCtpeFtkMWIhSCM/dlYwdnJLOlpIMT0yTT5pVjs/YVBoRkI8KnZXQFFXQHNPOX1jZlpBLWkndyVoS2Q2Z3QxVUpQLDE1XyNRWSRNXk1zc19VL10mTEs5WzV2UXViXndbS0REPEVqbWhVWj8uYWtwMmRGPnFtajsyfVlXRmRZeC5BcF1oakNQVFAobjI4ayszO28mV1hxcy9nT1hkciQ6cidkbzA7YjRjKGZfR3I9Ilw0KVswMVQ3YWpRSnZMJFd+bUxfc1MvNGg6eCpbWk49S0xzJkw1elgvLz5pdCxvOmFVKDtaPnBXJlQ3b1AnMkteRTp4OSdjWyV6LSw2NEpRNUFlSF9HI0tpalVLZ2hRd15cdmVhM2E/a2thX0ckOCNgKmt5bnN4ekJMcnUnXWtfWzdGclZ4fV49JGJseD5zLU4lajtEKmFaRG5zdzpZS1olUS5LbmU5I2hQPytiMyhTT3ZMLF47JnU1QD81QzVCaGI9bS12RWhfTDE1SmxdVSkwUlA2e3ElTF5fejVFJ0R3NlgKKzgyMCAgICAgXGIKKzgyMSA4MjEgS2V0Cis4MjMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyJcJFw8XC5YXCtpeFxbZDFiXCFIXCNcP3ZWMHZyS1w6WkgxXD0yTVw+aVZcO1w/YVBoRkJcPFwqdldcQFFXXEBzTzlcfWNmWkFcLWlcJ3dcJWhLZDZndDFVSlBcLDE1X1wjUVlcJE1cXk1zc19VXC9cXVwmTEs5XFs1dlF1Ylxed1xbS0REXDxFam1oVVpcP1wuYWtwMmRGXD5xbWpcOzJcfVlXRmRZeFwuQXBcXWhqQ1BUUFwobjI4a1wrM1w7b1wmV1hxc1wvZ09YZHJcJFw6clwnZG8wXDtiNGNcKGZfR3JcPVwiXFw0XClcWzAxVDdhalFKdkxcJFdcfm1MX3NTXC80aFw6eFwqXFtaTlw9S0xzXCZMNXpYXC9cL1w+aXRcLG9cOmFVXChcO1pcPnBXXCZUN29QXCcyS1xeRVw6eDlcJ2NcW1wlelwtXCw2NEpRNUFlSF9HXCNLaWpVS2doUXdcXlxcdmVhM2FcP2trYV9HXCQ4XCNcYFwqa3luc3h6QkxydVwnXF1rX1xbN0ZyVnhcfVxeXD1cJGJseFw+c1wtTlwlalw7RFwqYVpEbnN3XDpZS1pcJVFcLktuZTlcI2hQXD9cK2IzXChTT3ZMXCxcXlw7XCZ1NVxAXD81QzVCaGJcPW1cLXZFaF9MMTVKbFxdVVwpMFJQNlx7cVwlTFxeX3o1RVwnRHc2WFxiIgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzMjU2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCA4MTEgQnJhCisgIDIgICAgICQ8LlgraXhbZDFiIUgjP3ZWMHZySzpaSDE9Mk0+aVY7P2FQaEZCPCp2V0BRV0BzTzl9Y2ZaQS1pJ3claEtkNmd0MVVKUCwxNV8jUVkkTV5Nc3NfVS9dJkxLOVs1dlF1Yl53W0tERDxFam1oVVo/LmFrcDJkRj5xbWo7Mn1ZV0ZkWXguQXBdaGpDUFRQKG4yOGsrMztvJldYcXMvZ09YZHIkOnInZG8wO2I0YyhmX0dyPSJcNClbMDFUN2FqUUp2TCRXfm1MX3NTLzRoOngqW1pOPUtMcyZMNXpYLy8+aXQsbzphVSg7Wj5wVyZUN29QJzJLXkU6eDknY1slei0sNjRKUTVBZUhfRyNLaWpVS2doUXdeXHZlYTNhP2trYV9HJDgjYCpreW5zeHpCTHJ1J11rX1s3RnJWeH1ePSRibHg+cy1OJWo7RCphWkRuc3c6WUtaJVEuS25lOSNoUD8rYjMoU092TCxeOyZ1NUA/NUM1QmhiPW0tdkVoX0wxNUpsXVUpMFJQNntxJUxeX3o1RSdEdzZYCis4MTAgICAgIFxiCis4MTEgODExIEtldAorODEzICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKGEoPzEpYikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDY0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTMgQnJhCisgIDIgICA5IENCcmEgMQorICA1ICAgICBhCisgIDcgICAyIFJlY3Vyc2UKKyAgOSAgICAgYgorIDExICAgOSBLZXQKKyAxMyAgMTMgS2V0CisgMTUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oYSg/MSkrYikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDgwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTcgQnJhCisgIDIgIDEzIENCcmEgMQorICA1ICAgICBhCisgIDcgICA0IE9uY2UKKyAgOSAgIDIgUmVjdXJzZQorIDExICAgNCBLZXRSbWF4CisgMTMgICAgIGIKKyAxNSAgMTMgS2V0CisgMTcgIDE3IEtldAorIDE5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYSg/UDxuYW1lMT5ifGMpZCg/UDxsb25nZXJuYW1lMj5lKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTA4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjQgQnJhCisgIDIgICAgIGEKKyAgNCAgIDUgQ0JyYSAxCisgIDcgICAgIGIKKyAgOSAgIDQgQWx0CisgMTEgICAgIGMKKyAxMyAgIDkgS2V0CisgMTUgICAgIGQKKyAxNyAgIDUgQ0JyYSAyCisgMjAgICAgIGUKKyAyMiAgIDUgS2V0CisgMjQgIDI0IEtldAorIDI2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD86YSg/UDxjPmMoP1A8ZD5kKSkpKD9QPGE+YSkvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI5IEJyYQorICAyICAxOCBCcmEKKyAgNCAgICAgYQorICA2ICAxMiBDQnJhIDEKKyAgOSAgICAgYworIDExICAgNSBDQnJhIDIKKyAxNCAgICAgZAorIDE2ICAgNSBLZXQKKyAxOCAgMTIgS2V0CisgMjAgIDE4IEtldAorIDIyICAgNSBDQnJhIDMKKyAyNSAgICAgYQorIDI3ICAgNSBLZXQKKyAyOSAgMjkgS2V0CisgMzEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oP1A8YT5hKS4uLig/UD1hKWJiYig/UD5hKWQvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEwOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI0IEJyYQorICAyICAgNSBDQnJhIDEKKyAgNSAgICAgYQorICA3ICAgNSBLZXQKKyAgOSAgICAgQW55CisgMTAgICAgIEFueQorIDExICAgICBBbnkKKyAxMiAgICAgXDEKKyAxNCAgICAgYmJiCisgMjAgICAyIFJlY3Vyc2UKKyAyMiAgICAgZAorIDI0ICAyNCBLZXQKKyAyNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2FiYyg/QzI1NSlkZSg/QylmLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMDAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyMiBCcmEKKyAgMiAgICAgYWJjCisgIDggICAgIENhbGxvdXQgMjU1IDEwIDEKKyAxMiAgICAgZGUKKyAxNiAgICAgQ2FsbG91dCAwIDE2IDEKKyAyMCAgICAgZgorIDIyICAyMiBLZXQKKyAyNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2FiY2RlL2F1dG9fY2FsbG91dAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzNiBCcmEKKyAgMiAgICAgQ2FsbG91dCAyNTUgMCAxCisgIDYgICAgIGEKKyAgOCAgICAgQ2FsbG91dCAyNTUgMSAxCisgMTIgICAgIGIKKyAxNCAgICAgQ2FsbG91dCAyNTUgMiAxCisgMTggICAgIGMKKyAyMCAgICAgQ2FsbG91dCAyNTUgMyAxCisgMjQgICAgIGQKKyAyNiAgICAgQ2FsbG91dCAyNTUgNCAxCisgMzAgICAgIGUKKyAzMiAgICAgQ2FsbG91dCAyNTUgNSAwCisgMzYgIDM2IEtldAorIDM4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7MTAwfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezEwMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHsxMDAwfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezEwMDAwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7MTAwMDB9CisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwMDAwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgXHh7MTAwMDAwfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezEwZmZmZn0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4ezEwZmZmZn0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMTAwMDB9L3V0ZgorRmFpbGVkOiBlcnJvciAxMzQgYXQgb2Zmc2V0IDk6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx4e30gb3IgXG97fSBpcyB0b28gbGFyZ2UKKworL1tceHtmZn1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHtmZn0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHh7MTAwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4ezEwMH0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceDgwL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHs4MH0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceGZmL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHtmZn0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHswMDQxfVx4ezIyNjJ9XHh7MDM5MX1ceHswMDJlfS9JLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA1MgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEwIEJyYQorICAyICAgICBBXHh7MjI2Mn1ceHszOTF9LgorIDEwICAxMCBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnQScKK0xhc3QgY29kZSB1bml0ID0gJy4nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKworL1x4e0Q1NWN9XHh7YWQ2ZH1ceHtDNUI0fS9JLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA4IEJyYQorICAyICAgICBceHtkNTVjfVx4e2FkNmR9XHh7YzViNH0KKyAgOCAgIDggS2V0CisgMTAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHh7ZDU1Y30KK0xhc3QgY29kZSB1bml0ID0gXHh7YzViNH0KK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvXHh7NjVlNX1ceHs2NzJjfVx4ezhhOWV9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDggQnJhCisgIDIgICAgIFx4ezY1ZTV9XHh7NjcyY31ceHs4YTllfQorICA4ICAgOCBLZXQKKyAxMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceHs2NWU1fQorTGFzdCBjb2RlIHVuaXQgPSBceHs4YTllfQorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9bXHh7MTAwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4ezEwMH0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWlx4ezEwMH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA3NgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE2IEJyYQorICAyICAgICBbWlx4ezEwMH1dCisgMTYgIDE2IEtldAorIDE4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXltceHsxMDB9XEUtXFFcRVx4ezE1MH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA1MgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEwIEJyYQorICAyICAgICBeCisgIDMgICAgIFtceHsxMDB9LVx4ezE1MH1dCisgMTAgIDEwIEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXltcUcSAXEUtXFHFkFxFXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMCBCcmEKKyAgMiAgICAgXgorICAzICAgICBbXHh7MTAwfS1ceHsxNTB9XQorIDEwICAxMCBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15bXFHEgFxFLVxRxZBcRS91dGYKK0ZhaWxlZDogZXJyb3IgMTA2IGF0IG9mZnNldCAxMzogbWlzc2luZyB0ZXJtaW5hdGluZyBdIGZvciBjaGFyYWN0ZXIgY2xhc3MKKworL1tccHtMfV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICAgIFtccHtMfV0KKyAgOSAgIDkgS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHB7Xkx9XS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgICAgW1xQe0x9XQorICA5ICAgOSBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tcUHtMfV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICAgIFtcUHtMfV0KKyAgOSAgIDkgS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXFB7Xkx9XS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgICAgW1xwe0x9XQorICA5ICAgOSBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1thYmNccHtMfVx4ezA2NjB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogODgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxOSBCcmEKKyAgMiAgICAgW2EtY1xwe0x9XHh7NjYwfV0KKyAxOSAgMTkgS2V0CisgMjEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHB7TmR9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgMiAgICAgW1xwe05kfV0KKyAgOSAgIDkgS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHB7TmR9Ky1dKy91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogODQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxOCBCcmEKKyAgMiAgICAgWytcLVxwe05kfV0rKworIDE4ICAxOCBLZXQKKyAyMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS9pLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA2MAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEyIEJyYQorICAyICAvaSBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAxMiAgMTIgS2V0CisgMTQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDYwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTIgQnJhCisgIDIgICAgIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorIDEyICAxMiBLZXQKKyAxNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceHsxMDV9LVx4ezEwOX1dL2ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICAgIFtceHsxMDR9LVx4ezEwOX1dCisgIDkgICA5IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCAoICg/KDEpMHwpICkqICAgKS94CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEwNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDIzIEJyYQorICAyICAxOSBDQnJhIDEKKyAgNSAgICAgQnJhemVybworICA2ICAxMyBTQ0JyYSAyCisgIDkgICA2IENvbmQKKyAxMSAgIDEgQ29uZCByZWYKKyAxMyAgICAgMAorIDE1ICAgMiBBbHQKKyAxNyAgIDggS2V0CisgMTkgIDEzIEtldFJtYXgKKyAyMSAgMTkgS2V0CisgMjMgIDIzIEtldAorIDI1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCAgKD8oMSkwfCkqICAgKS94CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDg0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTggQnJhCisgIDIgIDE0IENCcmEgMQorICA1ICAgICBCcmF6ZXJvCisgIDYgICA2IFNDb25kCisgIDggICAxIENvbmQgcmVmCisgMTAgICAgIDAKKyAxMiAgIDIgQWx0CisgMTQgICA4IEtldFJtYXgKKyAxNiAgMTQgS2V0CisgMTggIDE4IEtldAorIDIwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW2FdLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBhCisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW2FdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBhCisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1x4YWFdLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBceHthYX0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHhhYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFx4e2FhfQorICA0ICAgNCBLZXQKKyAgNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teYV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDQgQnJhCisgIDIgICAgIFteYV0KKyAgNCAgIDQgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXmFdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA0IEJyYQorICAyICAgICBbXmFdCisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15ceGFhXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgW15ceHthYX1dCisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15ceGFhXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgMiAgICAgW15ceHthYX1dCisgIDQgICA0IEtldAorICA2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjcGF0dGVybiAtbWVtb3J5CisKKy9bXlxkXS91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDIgICAgIFteXHB7TmR9XQorICA5ICAgOSBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tbOl5hbHBoYTpdWzpeY250cmw6XV0rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMyBCcmEKKyAgMiAgICAgW1xQe0x9XFB7Q2N9XSsrCisgMTMgIDEzIEtldAorIDE1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6XmNudHJsOl1bOl5hbHBoYTpdXSsvdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEzIEJyYQorICAyICAgICBbXFB7Q2N9XFB7TH1dKysKKyAxMyAgMTMgS2V0CisgMTUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzphbHBoYTpdXSsvdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEwIEJyYQorICAyICAgICBbXHB7TH1dKysKKyAxMCAgMTAgS2V0CisgMTIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzpeYWxwaGE6XVxTXSsvdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEzIEJyYQorICAyICAgICBbXFB7TH1cUHtYc3B9XSsrCisgMTMgIDEzIEtldAorIDE1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYWJjKGR8ZSkoKlRIRU4peCgxMjMoKlRIRU4pNHw1NjcoYnxxKSgqVEhFTil4eCkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNjAgQnJhCisgIDIgICAgIGFiYworICA4ICAgNSBDQnJhIDEKKyAxMSAgICAgZAorIDEzICAgNCBBbHQKKyAxNSAgICAgZQorIDE3ICAgOSBLZXQKKyAxOSAgICAgKlRIRU4KKyAyMCAgICAgeAorIDIyICAxMiBDQnJhIDIKKyAyNSAgICAgMTIzCisgMzEgICAgICpUSEVOCisgMzIgICAgIDQKKyAzNCAgMjQgQWx0CisgMzYgICAgIDU2NworIDQyICAgNSBDQnJhIDMKKyA0NSAgICAgYgorIDQ3ICAgNCBBbHQKKyA0OSAgICAgcQorIDUxICAgOSBLZXQKKyA1MyAgICAgKlRIRU4KKyA1NCAgICAgeHgKKyA1OCAgMzYgS2V0CisgNjAgIDYwIEtldAorIDYyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCgoYVwyKXwoYSopXGc8LTE+KSkqYT8vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzkgQnJhCisgIDIgICAgIEJyYXplcm8KKyAgMyAgMzIgU0NCcmEgMQorICA2ICAyNyBPbmNlCisgIDggIDEyIENCcmEgMgorIDExICAgNyBDQnJhIDMKKyAxNCAgICAgYQorIDE2ICAgICBcMgorIDE4ICAgNyBLZXQKKyAyMCAgMTEgQWx0CisgMjIgICA1IENCcmEgNAorIDI1ICAgICBhKgorIDI3ICAgNSBLZXQKKyAyOSAgMjIgUmVjdXJzZQorIDMxICAyMyBLZXQKKyAzMyAgMjcgS2V0CisgMzUgIDMyIEtldFJtYXgKKyAzNyAgICAgYT8rCisgMzkgIDM5IEtldAorIDQxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCg/KzEpKFwxKSkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjAgQnJhCisgIDIgIDE2IE9uY2UKKyAgNCAgMTIgQ0JyYSAxCisgIDcgICA5IFJlY3Vyc2UKKyAgOSAgIDUgQ0JyYSAyCisgMTIgICAgIFwxCisgMTQgICA1IEtldAorIDE2ICAxMiBLZXQKKyAxOCAgMTYgS2V0CisgMjAgIDIwIEtldAorIDIyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiKD8xKSg/Iz8nKXsyfShhKSIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyMSBCcmEKKyAgMiAgIDQgT25jZQorICA0ICAxNCBSZWN1cnNlCisgIDYgICA0IEtldAorICA4ICAgNCBPbmNlCisgMTAgIDE0IFJlY3Vyc2UKKyAxMiAgIDQgS2V0CisgMTQgICA1IENCcmEgMQorIDE3ICAgICBhCisgMTkgICA1IEtldAorIDIxICAyMSBLZXQKKyAyMyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy4oKD8yKSg/Uil8XDF8JCkoKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyOCBCcmEKKyAgMiAgICAgQW55CisgIDMgIDE4IE9uY2UKKyAgNSAgIDcgQ0JyYSAxCisgIDggIDIzIFJlY3Vyc2UKKyAxMCAgIDAgUmVjdXJzZQorIDEyICAgNCBBbHQKKyAxNCAgICAgXDEKKyAxNiAgIDMgQWx0CisgMTggICAgICQKKyAxOSAgMTQgS2V0CisgMjEgIDE4IEtldAorIDIzICAgMyBDQnJhIDIKKyAyNiAgIDMgS2V0CisgMjggIDI4IEtldAorIDMwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLigoPzMpKD9SKSgpKD8yKXxcMXwkKSgpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDM1IEJyYQorICAyICAgICBBbnkKKyAgMyAgMjUgT25jZQorICA1ICAxNCBDQnJhIDEKKyAgOCAgMzAgUmVjdXJzZQorIDEwICAgMCBSZWN1cnNlCisgMTIgICAzIENCcmEgMgorIDE1ICAgMyBLZXQKKyAxNyAgMTIgUmVjdXJzZQorIDE5ICAgNCBBbHQKKyAyMSAgICAgXDEKKyAyMyAgIDMgQWx0CisgMjUgICAgICQKKyAyNiAgMjEgS2V0CisgMjggIDI1IEtldAorIDMwICAgMyBDQnJhIDMKKyAzMyAgIDMgS2V0CisgMzUgIDM1IEtldAorIDM3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD8xKSgpKCgoKCgoXDErKykpXHg4NSkrKXwpKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA1MCBCcmEKKyAgMiAgIDQgUmVjdXJzZQorICA0ICAgMyBDQnJhIDEKKyAgNyAgIDMgS2V0CisgIDkgIDM5IENCcmEgMgorIDEyICAzMiBDQnJhIDMKKyAxNSAgMjcgQ0JyYSA0CisgMTggIDIyIENCcmEgNQorIDIxICAxNSBDQnJhIDYKKyAyNCAgMTAgQ0JyYSA3CisgMjcgICA1IE9uY2UKKyAyOSAgICAgXDErCisgMzIgICA1IEtldAorIDM0ICAxMCBLZXQKKyAzNiAgMTUgS2V0CisgMzggICAgIFx4ezg1fQorIDQwICAyMiBLZXRSbWF4CisgNDIgIDI3IEtldAorIDQ0ICAgMiBBbHQKKyA0NiAgMzQgS2V0CisgNDggIDM5IEtldAorIDUwICA1MCBLZXQKKyA1MiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBDaGVjayB0aGUgYWJzb2x1dGUgbGltaXQgb24gbmVzdGluZyAoP3wgZXRjLiBUaGlzIHZhcmllcyB3aXRoIGNvZGUgdW5pdAorIyB3aWR0aCBiZWNhdXNlIHRoZSB3b3Jrc3BhY2UgaXMgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGJ5dGVzLiBJdCB3aWxsIGZhaWwKKyMgd2l0aCBsaW5rIHNpemUgMiBpbiA4LWJpdCBhbmQgMTYtYml0IGJ1dCBub3QgaW4gMzItYml0LgorCisvKD98KD98KD9KOig/fCg/eDooP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3wKKykpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKQorL3BhcmVuc19uZXN0X2xpbWl0PTEwMDAsLWZ1bGxiaW5jb2RlCisKKyMgVXNlICJleHBhbmQiIHRvIGNyZWF0ZSBzb21lIHZlcnkgbG9uZyBwYXR0ZXJucyB3aXRoIG5lc3RlZCBwYXJlbnRoZXNlcywgaW4KKyMgb3JkZXIgdG8gdGVzdCB3b3Jrc3BhY2Ugb3ZlcmZsb3cuIEFnYWluLCB0aGlzIHZhcmllcyB3aXRoIGNvZGUgdW5pdCB3aWR0aCwKKyMgYW5kIGV2ZW4gd2l0aCBpdCBmYWlscyBpbiB0d28gbW9kZXMsIHRoZSBlcnJvciBvZmZzZXQgZGlmZmVycy4gSXQgYWxzbyB2YXJpZXMKKyMgd2l0aCBsaW5rIHNpemUgLSBoZW5jZSBtdWx0aXBsZSB0ZXN0cyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuCisKKy8oPydBQkMnXFtbYmFyXShdezEwNX0qVEhFTjpcW0FdezI1NX1cWyldezEwNn0vZXhwYW5kLC1mdWxsYmluY29kZQorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxMDZ9KlRIRU46XFtBXXsyNTV9XFspXXsxMDd9L2V4cGFuZCwtZnVsbGJpbmNvZGUKKworLyg/J0FCQydcW1tiYXJdKF17MTU5fSpUSEVOOlxbQV17MjU1fVxbKV17MTYwfS9leHBhbmQsLWZ1bGxiaW5jb2RlCisKKy8oPydBQkMnXFtbYmFyXShdezE5OX0qVEhFTjpcW0FdezI1NX1cWyldezIwMH0vZXhwYW5kLC1mdWxsYmluY29kZQorRmFpbGVkOiBlcnJvciAxODYgYXQgb2Zmc2V0IDk3OTogcmVndWxhciBleHByZXNzaW9uIGlzIHRvbyBjb21wbGljYXRlZAorCisvKD8nQUJDJ1xbW2Jhcl0oXXsyOTl9KlRIRU46XFtBXXsyNTV9XFspXXszMDB9L2V4cGFuZCwtZnVsbGJpbmNvZGUKK0ZhaWxlZDogZXJyb3IgMTg2IGF0IG9mZnNldCA5Nzk6IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyB0b28gY29tcGxpY2F0ZWQKKworLyg/KDEpKD8xKSl7OCx9KygpL2RlYnVnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNzkgQnJhCisgIDIgIDcwIE9uY2UKKyAgNCAgIDYgQ29uZAorICA2ICAgMSBDb25kIHJlZgorICA4ICA3NCBSZWN1cnNlCisgMTAgICA2IEtldAorIDEyICAgNiBDb25kCisgMTQgICAxIENvbmQgcmVmCisgMTYgIDc0IFJlY3Vyc2UKKyAxOCAgIDYgS2V0CisgMjAgICA2IENvbmQKKyAyMiAgIDEgQ29uZCByZWYKKyAyNCAgNzQgUmVjdXJzZQorIDI2ICAgNiBLZXQKKyAyOCAgIDYgQ29uZAorIDMwICAgMSBDb25kIHJlZgorIDMyICA3NCBSZWN1cnNlCisgMzQgICA2IEtldAorIDM2ICAgNiBDb25kCisgMzggICAxIENvbmQgcmVmCisgNDAgIDc0IFJlY3Vyc2UKKyA0MiAgIDYgS2V0CisgNDQgICA2IENvbmQKKyA0NiAgIDEgQ29uZCByZWYKKyA0OCAgNzQgUmVjdXJzZQorIDUwICAgNiBLZXQKKyA1MiAgIDYgQ29uZAorIDU0ICAgMSBDb25kIHJlZgorIDU2ICA3NCBSZWN1cnNlCisgNTggICA2IEtldAorIDYwICAxMCBTQnJhUG9zCisgNjIgICA2IFNDb25kCisgNjQgICAxIENvbmQgcmVmCisgNjYgIDc0IFJlY3Vyc2UKKyA2OCAgIDYgS2V0CisgNzAgIDEwIEtldFJwb3MKKyA3MiAgNzAgS2V0CisgNzQgICAzIENCcmEgMQorIDc3ICAgMyBLZXQKKyA3OSAgNzkgS2V0CisgODEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY2QKKyAwOiAKKyAxOiAKKworLyg/KDEpfGEoPzEpYil7Mix9KygpL2RlYnVnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNDMgQnJhCisgIDIgIDM0IE9uY2UKKyAgNCAgIDQgQ29uZAorICA2ICAgMSBDb25kIHJlZgorICA4ICAgOCBBbHQKKyAxMCAgICAgYQorIDEyICAzOCBSZWN1cnNlCisgMTQgICAgIGIKKyAxNiAgMTIgS2V0CisgMTggIDE2IFNCcmFQb3MKKyAyMCAgIDQgU0NvbmQKKyAyMiAgIDEgQ29uZCByZWYKKyAyNCAgIDggQWx0CisgMjYgICAgIGEKKyAyOCAgMzggUmVjdXJzZQorIDMwICAgICBiCisgMzIgIDEyIEtldAorIDM0ICAxNiBLZXRScG9zCisgMzYgIDM0IEtldAorIDM4ICAgMyBDQnJhIDEKKyA0MSAgIDMgS2V0CisgNDMgIDQzIEtldAorIDQ1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICBhYmNkZQorTm8gbWF0Y2gKKworLygoPzEpKD8yKSg/MykoPzQpKD81KSg/NikoPzcpKD84KSg/OSkoPzkpKD84KSg/NykoPzYpKD81KSg/NCkoPzMpKD8yKSg/MSkoPzApKXsyLH0oKSgpKCkoKSgpKCkoKSgpKCkvZGVidWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDEzMyBCcmEKKyAgMiAgNDEgQ0JyYSAxCisgIDUgICAyIFJlY3Vyc2UKKyAgNyAgODggUmVjdXJzZQorICA5ICA5MyBSZWN1cnNlCisgMTEgIDk4IFJlY3Vyc2UKKyAxMyAxMDMgUmVjdXJzZQorIDE1IDEwOCBSZWN1cnNlCisgMTcgMTEzIFJlY3Vyc2UKKyAxOSAxMTggUmVjdXJzZQorIDIxIDEyMyBSZWN1cnNlCisgMjMgMTIzIFJlY3Vyc2UKKyAyNSAxMTggUmVjdXJzZQorIDI3IDExMyBSZWN1cnNlCisgMjkgMTA4IFJlY3Vyc2UKKyAzMSAxMDMgUmVjdXJzZQorIDMzICA5OCBSZWN1cnNlCisgMzUgIDkzIFJlY3Vyc2UKKyAzNyAgODggUmVjdXJzZQorIDM5ICAgMiBSZWN1cnNlCisgNDEgICAwIFJlY3Vyc2UKKyA0MyAgNDEgS2V0CisgNDUgIDQxIFNDQnJhIDEKKyA0OCAgIDIgUmVjdXJzZQorIDUwICA4OCBSZWN1cnNlCisgNTIgIDkzIFJlY3Vyc2UKKyA1NCAgOTggUmVjdXJzZQorIDU2IDEwMyBSZWN1cnNlCisgNTggMTA4IFJlY3Vyc2UKKyA2MCAxMTMgUmVjdXJzZQorIDYyIDExOCBSZWN1cnNlCisgNjQgMTIzIFJlY3Vyc2UKKyA2NiAxMjMgUmVjdXJzZQorIDY4IDExOCBSZWN1cnNlCisgNzAgMTEzIFJlY3Vyc2UKKyA3MiAxMDggUmVjdXJzZQorIDc0IDEwMyBSZWN1cnNlCisgNzYgIDk4IFJlY3Vyc2UKKyA3OCAgOTMgUmVjdXJzZQorIDgwICA4OCBSZWN1cnNlCisgODIgICAyIFJlY3Vyc2UKKyA4NCAgIDAgUmVjdXJzZQorIDg2ICA0MSBLZXRSbWF4CisgODggICAzIENCcmEgMgorIDkxICAgMyBLZXQKKyA5MyAgIDMgQ0JyYSAzCisgOTYgICAzIEtldAorIDk4ICAgMyBDQnJhIDQKKzEwMSAgIDMgS2V0CisxMDMgICAzIENCcmEgNQorMTA2ICAgMyBLZXQKKzEwOCAgIDMgQ0JyYSA2CisxMTEgICAzIEtldAorMTEzICAgMyBDQnJhIDcKKzExNiAgIDMgS2V0CisxMTggICAzIENCcmEgOAorMTIxICAgMyBLZXQKKzEyMyAgIDMgQ0JyYSA5CisxMjYgICAzIEtldAorMTI4ICAgMyBDQnJhIDEwCisxMzEgICAzIEtldAorMTMzIDEzMyBLZXQKKzEzNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMTAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisjIEVuZCBvZiB0ZXN0aW5wdXQ4CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTIgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE5YWEwYQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTgtMgpAQCAtMCwwICsxLDEwMjkgQEAKKyMgVGhlcmUgYXJlIHR3byBzb3J0cyBvZiBwYXR0ZXJucyBpbiB0aGlzIHRlc3QuIEEgbnVtYmVyIG9mIHRoZW0gYXJlCisjIHJlcHJlc2VudGF0aXZlIHBhdHRlcm5zIHdob3NlIGxlbmd0aHMgYW5kIG9mZnNldHMgYXJlIGNoZWNrZWQuIFRoaXMgaXMganVzdCBhCisjIGRvdWJsZWNoZWNrIHRlc3QgdG8gZW5zdXJlIHRoZSBzaXplcyBkb24ndCBnbyBob3JyaWJseSB3cm9uZyB3aGVuIHNvbWV0aGluZworIyBpcyBjaGFuZ2VkLiBUaGUgb3BlcmF0aW9uIG9mIHRoZXNlIHBhdHRlcm5zIGlzIGNoZWNrZWQgaW4gb3RoZXIgdGVzdHMuCisjCisjIFRoaXMgZmlsZSBhbHNvIGNvbnRhaW5zIHRlc3RzIHdob3NlIG91dHB1dCB2YXJpZXMgd2l0aCBjb2RlIHVuaXQgc2l6ZSBhbmQvb3IKKyMgbGluayBzaXplLiBVbmljb2RlIHN1cHBvcnQgaXMgcmVxdWlyZWQgZm9yIHRoZXNlIHRlc3RzLiBUaGVyZSBhcmUgc2VwYXJhdGUKKyMgb3V0cHV0IGZpbGVzIGZvciBlYWNoIGNvZGUgdW5pdCBzaXplIGFuZCBsaW5rIHNpemUuCisKKyNwYXR0ZXJuIGZ1bGxiaW5jb2RlLG1lbW9yeQorCisvKCg/aSliKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMyBCcmEKKyAgMyAgIDcgQ0JyYSAxCisgIDggIC9pIGIKKyAxMCAgIDcgS2V0CisgMTMgIDEzIEtldAorIDE2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD9zKSguKlh8XkIpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDIxIEJyYQorICAzICAgOSBDQnJhIDEKKyAgOCAgICAgQWxsQW55KgorIDEwICAgICBYCisgMTIgICA2IEFsdAorIDE1ICAgICBeCisgMTYgICAgIEIKKyAxOCAgMTUgS2V0CisgMjEgIDIxIEtldAorIDI0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD9zOi4qWHxeQikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDIzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTkgQnJhCisgIDMgICA3IEJyYQorICA2ICAgICBBbGxBbnkqCisgIDggICAgIFgKKyAxMCAgIDYgQWx0CisgMTMgICAgIF4KKyAxNCAgICAgQgorIDE2ICAxMyBLZXQKKyAxOSAgMTkgS2V0CisgMjIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1s6YWxudW06XV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzcgQnJhCisgIDMgICAgIF4KKyAgNCAgICAgWzAtOUEtWmEtel0KKyAzNyAgMzcgS2V0CisgNDAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8jL0l4CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgMyBCcmEKKyAgMyAgIDMgS2V0CisgIDYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK09wdGlvbnM6IGV4dGVuZGVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworL2EjL0l4CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgYQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogZXh0ZW5kZWQKK0ZpcnN0IGNvZGUgdW5pdCA9ICdhJworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy94PysvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgeD8rCisgIDUgICA1IEtldAorICA4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisveCsrLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDMgICAgIHgrKworICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL3h7MSwzfSsvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDkgQnJhCisgIDMgICAgIHgKKyAgNSAgICAgeHswLDJ9KworICA5ICAgOSBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyh4KSorLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE0IEJyYQorICAzICAgICBCcmFwb3N6ZXJvCisgIDQgICA3IENCcmFQb3MgMQorICA5ICAgICB4CisgMTEgICA3IEtldFJwb3MKKyAxNCAgMTQgS2V0CisgMTcgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eKChhKykoP1UpKFthYl0rKSg/LVUpKFtiY10rKShcdyopKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTIwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAxMTYgQnJhCisgIDMgICAgIF4KKyAgNCAxMDkgQ0JyYSAxCisgIDkgICA3IENCcmEgMgorIDE0ICAgICBhKworIDE2ICAgNyBLZXQKKyAxOSAgMzkgQ0JyYSAzCisgMjQgICAgIFthYl0rPworIDU4ICAzOSBLZXQKKyA2MSAgMzkgQ0JyYSA0CisgNjYgICAgIFtiY10rCisxMDAgIDM5IEtldAorMTAzICAgNyBDQnJhIDUKKzEwOCAgICAgXHcqKworMTEwICAgNyBLZXQKKzExMyAxMDkgS2V0CisxMTYgMTE2IEtldAorMTE5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiOEpcJFdFXDxcLnJYXCtpeFxbZDFiXCFIXCNcP3ZWMHZyS1w6WkgxXD0yTVw+aVZcO1w/YVBoRkJcPFwqdldcQFFXXEBzTzlcfWNmWkFcLWlcJ3dcJWhLZDZndDFVSlBcLDE1X1wjUVlcJE1cXk1zc19VXC9cXVwmTEs5XFs1dlF1Ylxed1xbS0REXDxFam1oVVpcP1wuYWtwMmRGXD5xbWpcOzJcfVlXRmRZeFwuQXBcXWhqQ1BUUFwobjI4a1wrM1w7b1wmV1hxc1wvZ09YZHJcJFw6clwnZG8wXDtiNGNcKGZfR3JcPVwiXFw0XClcWzAxVDdhalFKdkxcJFdcfm1MX3NTXC80aFw6eFwqXFtaTlw9S0xzXCZMNXpYXC9cL1w+aXRcLG9cOmFVXChcO1pcPnBXXCZUN29QXCcyS1xeRVw6eDlcJ2NcW1wlelwtXCw2NEpRNUFlSF9HXCNLaWpVS2doUXdcXlxcdmVhM2FcP2trYV9HXCQ4XCNcYFwqa3luc3h6QkxydVwnXF1rX1xbN0ZyVnhcfVxeXD1cJGJseFw+c1wtTlwlalw7RFwqYVpEbnN3XDpZS1pcJVFcLktuZTlcI2hQXD9cK2IzXChTT3ZMXCxcXlw7XCZ1NVxAXD81QzVCaGJcPW1cLXZFaF9MMTVKbFxdVVwpMFJQNlx7cVwlTFxeX3o1RVwnRHc2WFxiIgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA4MjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDgyMiBCcmEKKyAgMyAgICAgOEokV0U8LnJYK2l4W2QxYiFIIz92VjB2cks6WkgxPTJNPmlWOz9hUGhGQjwqdldAUVdAc085fWNmWkEtaSd3JWhLZDZndDFVSlAsMTVfI1FZJE1eTXNzX1UvXSZMSzlbNXZRdWJed1tLREQ8RWptaFVaPy5ha3AyZEY+cW1qOzJ9WVdGZFl4LkFwXWhqQ1BUUChuMjhrKzM7byZXWHFzL2dPWGRyJDpyJ2RvMDtiNGMoZl9Hcj0iXDQpWzAxVDdhalFKdkwkV35tTF9zUy80aDp4KltaTj1LTHMmTDV6WC8vPml0LG86YVUoO1o+cFcmVDdvUCcyS15FOng5J2NbJXotLDY0SlE1QWVIX0cjS2lqVUtnaFF3Xlx2ZWEzYT9ra2FfRyQ4I2Aqa3luc3h6QkxydSdda19bN0ZyVnh9Xj0kYmx4PnMtTiVqO0QqYVpEbnN3OllLWiVRLktuZTkjaFA/K2IzKFNPdkwsXjsmdTVAPzVDNUJoYj1tLXZFaF9MMTVKbF1VKTBSUDZ7cSVMXl96NUUnRHc2WAorODIxICAgICBcYgorODIyIDgyMiBLZXQKKzgyNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIlwkXDxcLlhcK2l4XFtkMWJcIUhcI1w/dlYwdnJLXDpaSDFcPTJNXD5pVlw7XD9hUGhGQlw8XCp2V1xAUVdcQHNPOVx9Y2ZaQVwtaVwnd1wlaEtkNmd0MVVKUFwsMTVfXCNRWVwkTVxeTXNzX1VcL1xdXCZMSzlcWzV2UXViXF53XFtLRERcPEVqbWhVWlw/XC5ha3AyZEZcPnFtalw7Mlx9WVdGZFl4XC5BcFxdaGpDUFRQXChuMjhrXCszXDtvXCZXWHFzXC9nT1hkclwkXDpyXCdkbzBcO2I0Y1woZl9Hclw9XCJcXDRcKVxbMDFUN2FqUUp2TFwkV1x+bUxfc1NcLzRoXDp4XCpcW1pOXD1LTHNcJkw1elhcL1wvXD5pdFwsb1w6YVVcKFw7Wlw+cFdcJlQ3b1BcJzJLXF5FXDp4OVwnY1xbXCV6XC1cLDY0SlE1QWVIX0dcI0tpalVLZ2hRd1xeXFx2ZWEzYVw/a2thX0dcJDhcI1xgXCpreW5zeHpCTHJ1XCdcXWtfXFs3RnJWeFx9XF5cPVwkYmx4XD5zXC1OXCVqXDtEXCphWkRuc3dcOllLWlwlUVwuS25lOVwjaFBcP1wrYjNcKFNPdkxcLFxeXDtcJnU1XEBcPzVDNUJoYlw9bVwtdkVoX0wxNUpsXF1VXCkwUlA2XHtxXCVMXF5fejVFXCdEdzZYXGIiCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDgxNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgODEyIEJyYQorICAzICAgICAkPC5YK2l4W2QxYiFIIz92VjB2cks6WkgxPTJNPmlWOz9hUGhGQjwqdldAUVdAc085fWNmWkEtaSd3JWhLZDZndDFVSlAsMTVfI1FZJE1eTXNzX1UvXSZMSzlbNXZRdWJed1tLREQ8RWptaFVaPy5ha3AyZEY+cW1qOzJ9WVdGZFl4LkFwXWhqQ1BUUChuMjhrKzM7byZXWHFzL2dPWGRyJDpyJ2RvMDtiNGMoZl9Hcj0iXDQpWzAxVDdhalFKdkwkV35tTF9zUy80aDp4KltaTj1LTHMmTDV6WC8vPml0LG86YVUoO1o+cFcmVDdvUCcyS15FOng5J2NbJXotLDY0SlE1QWVIX0cjS2lqVUtnaFF3Xlx2ZWEzYT9ra2FfRyQ4I2Aqa3luc3h6QkxydSdda19bN0ZyVnh9Xj0kYmx4PnMtTiVqO0QqYVpEbnN3OllLWiVRLktuZTkjaFA/K2IzKFNPdkwsXjsmdTVAPzVDNUJoYj1tLXZFaF9MMTVKbF1VKTBSUDZ7cSVMXl96NUUnRHc2WAorODExICAgICBcYgorODEyIDgxMiBLZXQKKzgxNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyhhKD8xKWIpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE4IEJyYQorICAzICAxMiBDQnJhIDEKKyAgOCAgICAgYQorIDEwICAgMyBSZWN1cnNlCisgMTMgICAgIGIKKyAxNSAgMTIgS2V0CisgMTggIDE4IEtldAorIDIxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKGEoPzEpK2IpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI0IEJyYQorICAzICAxOCBDQnJhIDEKKyAgOCAgICAgYQorIDEwICAgNiBPbmNlCisgMTMgICAzIFJlY3Vyc2UKKyAxNiAgIDYgS2V0Um1heAorIDE5ICAgICBiCisgMjEgIDE4IEtldAorIDI0ICAyNCBLZXQKKyAyNyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2EoP1A8bmFtZTE+YnxjKWQoP1A8bG9uZ2VybmFtZTI+ZSkvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDM2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzIgQnJhCisgIDMgICAgIGEKKyAgNSAgIDcgQ0JyYSAxCisgMTAgICAgIGIKKyAxMiAgIDUgQWx0CisgMTUgICAgIGMKKyAxNyAgMTIgS2V0CisgMjAgICAgIGQKKyAyMiAgIDcgQ0JyYSAyCisgMjcgICAgIGUKKyAyOSAgIDcgS2V0CisgMzIgIDMyIEtldAorIDM1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD86YSg/UDxjPmMoP1A8ZD5kKSkpKD9QPGE+YSkvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNDEgQnJhCisgIDMgIDI1IEJyYQorICA2ICAgICBhCisgIDggIDE3IENCcmEgMQorIDEzICAgICBjCisgMTUgICA3IENCcmEgMgorIDIwICAgICBkCisgMjIgICA3IEtldAorIDI1ICAxNyBLZXQKKyAyOCAgMjUgS2V0CisgMzEgICA3IENCcmEgMworIDM2ICAgICBhCisgMzggICA3IEtldAorIDQxICA0MSBLZXQKKyA0NCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/UDxhPmEpLi4uKD9QPWEpYmJiKD9QPmEpZC8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzMCBCcmEKKyAgMyAgIDcgQ0JyYSAxCisgIDggICAgIGEKKyAxMCAgIDcgS2V0CisgMTMgICAgIEFueQorIDE0ICAgICBBbnkKKyAxNSAgICAgQW55CisgMTYgICAgIFwxCisgMTkgICAgIGJiYgorIDI1ICAgMyBSZWN1cnNlCisgMjggICAgIGQKKyAzMCAgMzAgS2V0CisgMzMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hYmMoP0MyNTUpZGUoP0MpZi8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyNyBCcmEKKyAgMyAgICAgYWJjCisgIDkgICAgIENhbGxvdXQgMjU1IDEwIDEKKyAxNSAgICAgZGUKKyAxOSAgICAgQ2FsbG91dCAwIDE2IDEKKyAyNSAgICAgZgorIDI3ICAyNyBLZXQKKyAzMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2FiY2RlL2F1dG9fY2FsbG91dAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA1MworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDQ5IEJyYQorICAzICAgICBDYWxsb3V0IDI1NSAwIDEKKyAgOSAgICAgYQorIDExICAgICBDYWxsb3V0IDI1NSAxIDEKKyAxNyAgICAgYgorIDE5ICAgICBDYWxsb3V0IDI1NSAyIDEKKyAyNSAgICAgYworIDI3ICAgICBDYWxsb3V0IDI1NSAzIDEKKyAzMyAgICAgZAorIDM1ICAgICBDYWxsb3V0IDI1NSA0IDEKKyA0MSAgICAgZQorIDQzICAgICBDYWxsb3V0IDI1NSA1IDAKKyA0OSAgNDkgS2V0CisgNTIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA2IEJyYQorICAzICAgICBceHsxMDB9CisgIDYgICA2IEtldAorICA5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwMH0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDExCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDcgQnJhCisgIDMgICAgIFx4ezEwMDB9CisgIDcgICA3IEtldAorIDEwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA4IEJyYQorICAzICAgICBceHsxMDAwMH0KKyAgOCAgIDggS2V0CisgMTEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMDAwMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA4IEJyYQorICAzICAgICBceHsxMDAwMDB9CisgIDggICA4IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTBmZmZmfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOCBCcmEKKyAgMyAgICAgXHh7MTBmZmZmfQorICA4ICAgOCBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezExMDAwMH0vdXRmCitGYWlsZWQ6IGVycm9yIDEzNCBhdCBvZmZzZXQgOTogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisvW1x4e2ZmfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDYgQnJhCisgIDMgICAgIFx4e2ZmfQorICA2ICAgNiBLZXQKKyAgOSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceHsxMDB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNiBCcmEKKyAgMyAgICAgXHh7MTAwfQorICA2ICAgNiBLZXQKKyAgOSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ODAvdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDYgQnJhCisgIDMgICAgIFx4ezgwfQorICA2ICAgNiBLZXQKKyAgOSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ZmYvdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDYgQnJhCisgIDMgICAgIFx4e2ZmfQorICA2ICAgNiBLZXQKKyAgOSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezAwNDF9XHh7MjI2Mn1ceHswMzkxfVx4ezAwMmV9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTQgQnJhCisgIDMgICAgIEFceHsyMjYyfVx4ezM5MX0uCisgMTQgIDE0IEtldAorIDE3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdBJworTGFzdCBjb2RlIHVuaXQgPSAnLicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvXHh7RDU1Y31ceHthZDZkfVx4e0M1QjR9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTUgQnJhCisgIDMgICAgIFx4e2Q1NWN9XHh7YWQ2ZH1ceHtjNWI0fQorIDE1ICAxNSBLZXQKKyAxOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGVkCitMYXN0IGNvZGUgdW5pdCA9IFx4YjQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvXHh7NjVlNX1ceHs2NzJjfVx4ezhhOWV9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTUgQnJhCisgIDMgICAgIFx4ezY1ZTV9XHh7NjcyY31ceHs4YTllfQorIDE1ICAxNSBLZXQKKyAxOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGU2CitMYXN0IGNvZGUgdW5pdCA9IFx4OWUKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvW1x4ezEwMH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA2IEJyYQorICAzICAgICBceHsxMDB9CisgIDYgICA2IEtldAorICA5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1pceHsxMDB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA0MyBCcmEKKyAgMyAgICAgW1pceHsxMDB9XQorIDQzICA0MyBLZXQKKyA0NiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15bXHh7MTAwfVxFLVxRXEVceHsxNTB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNCBCcmEKKyAgMyAgICAgXgorICA0ICAgICBbXHh7MTAwfS1ceHsxNTB9XQorIDE0ICAxNCBLZXQKKyAxNyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15bXFHEgFxFLVxRxZBcRV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTQgQnJhCisgIDMgICAgIF4KKyAgNCAgICAgW1x4ezEwMH0tXHh7MTUwfV0KKyAxNCAgMTQgS2V0CisgMTcgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1xRxIBcRS1cUcWQXEUvdXRmCitGYWlsZWQ6IGVycm9yIDEwNiBhdCBvZmZzZXQgMTU6IG1pc3NpbmcgdGVybWluYXRpbmcgXSBmb3IgY2hhcmFjdGVyIGNsYXNzCisKKy9bXHB7TH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDExIEJyYQorICAzICAgICBbXHB7TH1dCisgMTEgIDExIEtldAorIDE0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xwe15MfV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTEgQnJhCisgIDMgICAgIFtcUHtMfV0KKyAxMSAgMTEgS2V0CisgMTQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXFB7TH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDExIEJyYQorICAzICAgICBbXFB7TH1dCisgMTEgIDExIEtldAorIDE0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xQe15MfV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTEgQnJhCisgIDMgICAgIFtccHtMfV0KKyAxMSAgMTEgS2V0CisgMTQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bYWJjXHB7TH1ceHswNjYwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDUwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNDYgQnJhCisgIDMgICAgIFthLWNccHtMfVx4ezY2MH1dCisgNDYgIDQ2IEtldAorIDQ5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xwe05kfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTEgQnJhCisgIDMgICAgIFtccHtOZH1dCisgMTEgIDExIEtldAorIDE0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xwe05kfSstXSsvdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNDQgQnJhCisgIDMgICAgIFsrXC1ccHtOZH1dKysKKyA0NCAgNDQgS2V0CisgNDcgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vaSx1dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyMSBCcmEKKyAgMyAgL2kgQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9CisgMjEgIDIxIEtldAorIDI0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDIxIEJyYQorICAzICAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAyMSAgMjEgS2V0CisgMjQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHh7MTA1fS1ceHsxMDl9XS9pLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEzIEJyYQorICAzICAgICBbXHh7MTA0fS1ceHsxMDl9XQorIDEzICAxMyBLZXQKKyAxNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyggKCAoPygxKTB8KSApKiAgICkveAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDM0IEJyYQorICAzICAyOCBDQnJhIDEKKyAgOCAgICAgQnJhemVybworICA5ICAxOSBTQ0JyYSAyCisgMTQgICA4IENvbmQKKyAxNyAgIDEgQ29uZCByZWYKKyAyMCAgICAgMAorIDIyICAgMyBBbHQKKyAyNSAgMTEgS2V0CisgMjggIDE5IEtldFJtYXgKKyAzMSAgMjggS2V0CisgMzQgIDM0IEtldAorIDM3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCAgKD8oMSkwfCkqICAgKS94CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDMwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjYgQnJhCisgIDMgIDIwIENCcmEgMQorICA4ICAgICBCcmF6ZXJvCisgIDkgICA4IFNDb25kCisgMTIgICAxIENvbmQgcmVmCisgMTUgICAgIDAKKyAxNyAgIDMgQWx0CisgMjAgIDExIEtldFJtYXgKKyAyMyAgMjAgS2V0CisgMjYgIDI2IEtldAorIDI5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW2FdLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDMgICAgIGEKKyAgNSAgIDUgS2V0CisgIDggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgYQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceGFhXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogOQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA1IEJyYQorICAzICAgICBceHthYX0KKyAgNSAgIDUgS2V0CisgIDggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHhhYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDYgQnJhCisgIDMgICAgIFx4e2FhfQorICA2ICAgNiBLZXQKKyAgOSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teYV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgW15hXQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgW15hXQorICA1ICAgNSBLZXQKKyAgOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHhhYV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNSBCcmEKKyAgMyAgICAgW15ceHthYX1dCisgIDUgICA1IEtldAorICA4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15ceGFhXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNiBCcmEKKyAgMyAgICAgW15ceHthYX1dCisgIDYgICA2IEtldAorICA5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjcGF0dGVybiAtbWVtb3J5CisKKy9bXlxkXS91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTEgQnJhCisgIDMgICAgIFteXHB7TmR9XQorIDExICAxMSBLZXQKKyAxNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tbOl5hbHBoYTpdWzpeY250cmw6XV0rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNSBCcmEKKyAgMyAgICAgW1xQe0x9XFB7Q2N9XSsrCisgMTUgIDE1IEtldAorIDE4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6XmNudHJsOl1bOl5hbHBoYTpdXSsvdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE1IEJyYQorICAzICAgICBbXFB7Q2N9XFB7TH1dKysKKyAxNSAgMTUgS2V0CisgMTggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzphbHBoYTpdXSsvdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEyIEJyYQorICAzICAgICBbXHB7TH1dKysKKyAxMiAgMTIgS2V0CisgMTUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzpeYWxwaGE6XVxTXSsvdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE1IEJyYQorICAzICAgICBbXFB7TH1cUHtYc3B9XSsrCisgMTUgIDE1IEtldAorIDE4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYWJjKGR8ZSkoKlRIRU4peCgxMjMoKlRIRU4pNHw1NjcoYnxxKSgqVEhFTil4eCkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNzMgQnJhCisgIDMgICAgIGFiYworICA5ICAgNyBDQnJhIDEKKyAxNCAgICAgZAorIDE2ICAgNSBBbHQKKyAxOSAgICAgZQorIDIxICAxMiBLZXQKKyAyNCAgICAgKlRIRU4KKyAyNSAgICAgeAorIDI3ICAxNCBDQnJhIDIKKyAzMiAgICAgMTIzCisgMzggICAgICpUSEVOCisgMzkgICAgIDQKKyA0MSAgMjkgQWx0CisgNDQgICAgIDU2NworIDUwICAgNyBDQnJhIDMKKyA1NSAgICAgYgorIDU3ICAgNSBBbHQKKyA2MCAgICAgcQorIDYyICAxMiBLZXQKKyA2NSAgICAgKlRIRU4KKyA2NiAgICAgeHgKKyA3MCAgNDMgS2V0CisgNzMgIDczIEtldAorIDc2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCgoYVwyKXwoYSopXGc8LTE+KSkqYT8vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNTcgQnJhCisgIDMgICAgIEJyYXplcm8KKyAgNCAgNDggU0NCcmEgMQorICA5ICA0MCBPbmNlCisgMTIgIDE4IENCcmEgMgorIDE3ICAxMCBDQnJhIDMKKyAyMiAgICAgYQorIDI0ICAgICBcMgorIDI3ICAxMCBLZXQKKyAzMCAgMTYgQWx0CisgMzMgICA3IENCcmEgNAorIDM4ICAgICBhKgorIDQwICAgNyBLZXQKKyA0MyAgMzMgUmVjdXJzZQorIDQ2ICAzNCBLZXQKKyA0OSAgNDAgS2V0CisgNTIgIDQ4IEtldFJtYXgKKyA1NSAgICAgYT8rCisgNTcgIDU3IEtldAorIDYwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCg/KzEpKFwxKSkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzEgQnJhCisgIDMgIDI1IE9uY2UKKyAgNiAgMTkgQ0JyYSAxCisgMTEgIDE0IFJlY3Vyc2UKKyAxNCAgIDggQ0JyYSAyCisgMTkgICAgIFwxCisgMjIgICA4IEtldAorIDI1ICAxOSBLZXQKKyAyOCAgMjUgS2V0CisgMzEgIDMxIEtldAorIDM0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiKD8xKSg/Iz8nKXsyfShhKSIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzMSBCcmEKKyAgMyAgIDYgT25jZQorICA2ICAyMSBSZWN1cnNlCisgIDkgICA2IEtldAorIDEyICAgNiBPbmNlCisgMTUgIDIxIFJlY3Vyc2UKKyAxOCAgIDYgS2V0CisgMjEgICA3IENCcmEgMQorIDI2ICAgICBhCisgMjggICA3IEtldAorIDMxICAzMSBLZXQKKyAzNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy4oKD8yKSg/Uil8XDF8JCkoKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA0MiBCcmEKKyAgMyAgICAgQW55CisgIDQgIDI3IE9uY2UKKyAgNyAgMTEgQ0JyYSAxCisgMTIgIDM0IFJlY3Vyc2UKKyAxNSAgIDAgUmVjdXJzZQorIDE4ICAgNiBBbHQKKyAyMSAgICAgXDEKKyAyNCAgIDQgQWx0CisgMjcgICAgICQKKyAyOCAgMjEgS2V0CisgMzEgIDI3IEtldAorIDM0ICAgNSBDQnJhIDIKKyAzOSAgIDUgS2V0CisgNDIgIDQyIEtldAorIDQ1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLigoPzMpKD9SKSgpKD8yKXxcMXwkKSgpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDUzIEJyYQorICAzICAgICBBbnkKKyAgNCAgMzggT25jZQorICA3ICAyMiBDQnJhIDEKKyAxMiAgNDUgUmVjdXJzZQorIDE1ICAgMCBSZWN1cnNlCisgMTggICA1IENCcmEgMgorIDIzICAgNSBLZXQKKyAyNiAgMTggUmVjdXJzZQorIDI5ICAgNiBBbHQKKyAzMiAgICAgXDEKKyAzNSAgIDQgQWx0CisgMzggICAgICQKKyAzOSAgMzIgS2V0CisgNDIgIDM4IEtldAorIDQ1ICAgNSBDQnJhIDMKKyA1MCAgIDUgS2V0CisgNTMgIDUzIEtldAorIDU2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD8xKSgpKCgoKCgoXDErKykpXHg4NSkrKXwpKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA3NyBCcmEKKyAgMyAgIDYgUmVjdXJzZQorICA2ICAgNSBDQnJhIDEKKyAxMSAgIDUgS2V0CisgMTQgIDYwIENCcmEgMgorIDE5ICA0OSBDQnJhIDMKKyAyNCAgNDEgQ0JyYSA0CisgMjkgIDMzIENCcmEgNQorIDM0ICAyMyBDQnJhIDYKKyAzOSAgMTUgQ0JyYSA3CisgNDQgICA3IE9uY2UKKyA0NyAgICAgXDErCisgNTEgICA3IEtldAorIDU0ICAxNSBLZXQKKyA1NyAgMjMgS2V0CisgNjAgICAgIFx4ezg1fQorIDYyICAzMyBLZXRSbWF4CisgNjUgIDQxIEtldAorIDY4ICAgMyBBbHQKKyA3MSAgNTIgS2V0CisgNzQgIDYwIEtldAorIDc3ICA3NyBLZXQKKyA4MCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBDaGVjayB0aGUgYWJzb2x1dGUgbGltaXQgb24gbmVzdGluZyAoP3wgZXRjLiBUaGlzIHZhcmllcyB3aXRoIGNvZGUgdW5pdAorIyB3aWR0aCBiZWNhdXNlIHRoZSB3b3Jrc3BhY2UgaXMgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGJ5dGVzLiBJdCB3aWxsIGZhaWwKKyMgd2l0aCBsaW5rIHNpemUgMiBpbiA4LWJpdCBhbmQgMTYtYml0IGJ1dCBub3QgaW4gMzItYml0LgorCisvKD98KD98KD9KOig/fCg/eDooP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3wKKykpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKQorL3BhcmVuc19uZXN0X2xpbWl0PTEwMDAsLWZ1bGxiaW5jb2RlCitGYWlsZWQ6IGVycm9yIDE4NCBhdCBvZmZzZXQgMTU0MDogKD98IGFuZC9vciAoP0o6IG9yICg/eDogcGFyZW50aGVzZXMgYXJlIHRvbyBkZWVwbHkgbmVzdGVkCisKKyMgVXNlICJleHBhbmQiIHRvIGNyZWF0ZSBzb21lIHZlcnkgbG9uZyBwYXR0ZXJucyB3aXRoIG5lc3RlZCBwYXJlbnRoZXNlcywgaW4KKyMgb3JkZXIgdG8gdGVzdCB3b3Jrc3BhY2Ugb3ZlcmZsb3cuIEFnYWluLCB0aGlzIHZhcmllcyB3aXRoIGNvZGUgdW5pdCB3aWR0aCwKKyMgYW5kIGV2ZW4gd2l0aCBpdCBmYWlscyBpbiB0d28gbW9kZXMsIHRoZSBlcnJvciBvZmZzZXQgZGlmZmVycy4gSXQgYWxzbyB2YXJpZXMKKyMgd2l0aCBsaW5rIHNpemUgLSBoZW5jZSBtdWx0aXBsZSB0ZXN0cyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuCisKKy8oPydBQkMnXFtbYmFyXShdezEwNX0qVEhFTjpcW0FdezI1NX1cWyldezEwNn0vZXhwYW5kLC1mdWxsYmluY29kZQorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxMDZ9KlRIRU46XFtBXXsyNTV9XFspXXsxMDd9L2V4cGFuZCwtZnVsbGJpbmNvZGUKK0ZhaWxlZDogZXJyb3IgMTg2IGF0IG9mZnNldCA2Mzc6IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyB0b28gY29tcGxpY2F0ZWQKKworLyg/J0FCQydcW1tiYXJdKF17MTU5fSpUSEVOOlxbQV17MjU1fVxbKV17MTYwfS9leHBhbmQsLWZ1bGxiaW5jb2RlCitGYWlsZWQ6IGVycm9yIDE4NiBhdCBvZmZzZXQgNjM3OiByZWd1bGFyIGV4cHJlc3Npb24gaXMgdG9vIGNvbXBsaWNhdGVkCisKKy8oPydBQkMnXFtbYmFyXShdezE5OX0qVEhFTjpcW0FdezI1NX1cWyldezIwMH0vZXhwYW5kLC1mdWxsYmluY29kZQorRmFpbGVkOiBlcnJvciAxODYgYXQgb2Zmc2V0IDYzNzogcmVndWxhciBleHByZXNzaW9uIGlzIHRvbyBjb21wbGljYXRlZAorCisvKD8nQUJDJ1xbW2Jhcl0oXXsyOTl9KlRIRU46XFtBXXsyNTV9XFspXXszMDB9L2V4cGFuZCwtZnVsbGJpbmNvZGUKK0ZhaWxlZDogZXJyb3IgMTg2IGF0IG9mZnNldCA2Mzc6IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyB0b28gY29tcGxpY2F0ZWQKKworLyg/KDEpKD8xKSl7OCx9KygpL2RlYnVnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAxMTkgQnJhCisgIDMgMTA1IE9uY2UKKyAgNiAgIDkgQ29uZAorICA5ICAgMSBDb25kIHJlZgorIDEyIDExMSBSZWN1cnNlCisgMTUgICA5IEtldAorIDE4ICAgOSBDb25kCisgMjEgICAxIENvbmQgcmVmCisgMjQgMTExIFJlY3Vyc2UKKyAyNyAgIDkgS2V0CisgMzAgICA5IENvbmQKKyAzMyAgIDEgQ29uZCByZWYKKyAzNiAxMTEgUmVjdXJzZQorIDM5ICAgOSBLZXQKKyA0MiAgIDkgQ29uZAorIDQ1ICAgMSBDb25kIHJlZgorIDQ4IDExMSBSZWN1cnNlCisgNTEgICA5IEtldAorIDU0ICAgOSBDb25kCisgNTcgICAxIENvbmQgcmVmCisgNjAgMTExIFJlY3Vyc2UKKyA2MyAgIDkgS2V0CisgNjYgICA5IENvbmQKKyA2OSAgIDEgQ29uZCByZWYKKyA3MiAxMTEgUmVjdXJzZQorIDc1ICAgOSBLZXQKKyA3OCAgIDkgQ29uZAorIDgxICAgMSBDb25kIHJlZgorIDg0IDExMSBSZWN1cnNlCisgODcgICA5IEtldAorIDkwICAxNSBTQnJhUG9zCisgOTMgICA5IFNDb25kCisgOTYgICAxIENvbmQgcmVmCisgOTkgMTExIFJlY3Vyc2UKKzEwMiAgIDkgS2V0CisxMDUgIDE1IEtldFJwb3MKKzEwOCAxMDUgS2V0CisxMTEgICA1IENCcmEgMQorMTE2ICAgNSBLZXQKKzExOSAxMTkgS2V0CisxMjIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY2QKKyAwOiAKKyAxOiAKKworLyg/KDEpfGEoPzEpYil7Mix9KygpL2RlYnVnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNjEgQnJhCisgIDMgIDQ3IE9uY2UKKyAgNiAgIDYgQ29uZAorICA5ICAgMSBDb25kIHJlZgorIDEyICAxMCBBbHQKKyAxNSAgICAgYQorIDE3ICA1MyBSZWN1cnNlCisgMjAgICAgIGIKKyAyMiAgMTYgS2V0CisgMjUgIDIyIFNCcmFQb3MKKyAyOCAgIDYgU0NvbmQKKyAzMSAgIDEgQ29uZCByZWYKKyAzNCAgMTAgQWx0CisgMzcgICAgIGEKKyAzOSAgNTMgUmVjdXJzZQorIDQyICAgICBiCisgNDQgIDE2IEtldAorIDQ3ICAyMiBLZXRScG9zCisgNTAgIDQ3IEtldAorIDUzICAgNSBDQnJhIDEKKyA1OCAgIDUgS2V0CisgNjEgIDYxIEtldAorIDY0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICBhYmNkZQorTm8gbWF0Y2gKKworLygoPzEpKD8yKSg/MykoPzQpKD81KSg/NikoPzcpKD84KSg/OSkoPzkpKD84KSg/NykoPzYpKD81KSg/NCkoPzMpKD8yKSg/MSkoPzApKXsyLH0oKSgpKCkoKSgpKCkoKSgpKCkvZGVidWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDIwNSBCcmEKKyAgMyAgNjIgQ0JyYSAxCisgIDggICAzIFJlY3Vyc2UKKyAxMSAxMzMgUmVjdXJzZQorIDE0IDE0MSBSZWN1cnNlCisgMTcgMTQ5IFJlY3Vyc2UKKyAyMCAxNTcgUmVjdXJzZQorIDIzIDE2NSBSZWN1cnNlCisgMjYgMTczIFJlY3Vyc2UKKyAyOSAxODEgUmVjdXJzZQorIDMyIDE4OSBSZWN1cnNlCisgMzUgMTg5IFJlY3Vyc2UKKyAzOCAxODEgUmVjdXJzZQorIDQxIDE3MyBSZWN1cnNlCisgNDQgMTY1IFJlY3Vyc2UKKyA0NyAxNTcgUmVjdXJzZQorIDUwIDE0OSBSZWN1cnNlCisgNTMgMTQxIFJlY3Vyc2UKKyA1NiAxMzMgUmVjdXJzZQorIDU5ICAgMyBSZWN1cnNlCisgNjIgICAwIFJlY3Vyc2UKKyA2NSAgNjIgS2V0CisgNjggIDYyIFNDQnJhIDEKKyA3MyAgIDMgUmVjdXJzZQorIDc2IDEzMyBSZWN1cnNlCisgNzkgMTQxIFJlY3Vyc2UKKyA4MiAxNDkgUmVjdXJzZQorIDg1IDE1NyBSZWN1cnNlCisgODggMTY1IFJlY3Vyc2UKKyA5MSAxNzMgUmVjdXJzZQorIDk0IDE4MSBSZWN1cnNlCisgOTcgMTg5IFJlY3Vyc2UKKzEwMCAxODkgUmVjdXJzZQorMTAzIDE4MSBSZWN1cnNlCisxMDYgMTczIFJlY3Vyc2UKKzEwOSAxNjUgUmVjdXJzZQorMTEyIDE1NyBSZWN1cnNlCisxMTUgMTQ5IFJlY3Vyc2UKKzExOCAxNDEgUmVjdXJzZQorMTIxIDEzMyBSZWN1cnNlCisxMjQgICAzIFJlY3Vyc2UKKzEyNyAgIDAgUmVjdXJzZQorMTMwICA2MiBLZXRSbWF4CisxMzMgICA1IENCcmEgMgorMTM4ICAgNSBLZXQKKzE0MSAgIDUgQ0JyYSAzCisxNDYgICA1IEtldAorMTQ5ICAgNSBDQnJhIDQKKzE1NCAgIDUgS2V0CisxNTcgICA1IENCcmEgNQorMTYyICAgNSBLZXQKKzE2NSAgIDUgQ0JyYSA2CisxNzAgICA1IEtldAorMTczICAgNSBDQnJhIDcKKzE3OCAgIDUgS2V0CisxODEgICA1IENCcmEgOAorMTg2ICAgNSBLZXQKKzE4OSAgIDUgQ0JyYSA5CisxOTQgICA1IEtldAorMTk3ICAgNSBDQnJhIDEwCisyMDIgICA1IEtldAorMjA1IDIwNSBLZXQKKzIwOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMTAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisjIEVuZCBvZiB0ZXN0aW5wdXQ4CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTMgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZlMTE2OAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTgtMwpAQCAtMCwwICsxLDEwMjcgQEAKKyMgVGhlcmUgYXJlIHR3byBzb3J0cyBvZiBwYXR0ZXJucyBpbiB0aGlzIHRlc3QuIEEgbnVtYmVyIG9mIHRoZW0gYXJlCisjIHJlcHJlc2VudGF0aXZlIHBhdHRlcm5zIHdob3NlIGxlbmd0aHMgYW5kIG9mZnNldHMgYXJlIGNoZWNrZWQuIFRoaXMgaXMganVzdCBhCisjIGRvdWJsZWNoZWNrIHRlc3QgdG8gZW5zdXJlIHRoZSBzaXplcyBkb24ndCBnbyBob3JyaWJseSB3cm9uZyB3aGVuIHNvbWV0aGluZworIyBpcyBjaGFuZ2VkLiBUaGUgb3BlcmF0aW9uIG9mIHRoZXNlIHBhdHRlcm5zIGlzIGNoZWNrZWQgaW4gb3RoZXIgdGVzdHMuCisjCisjIFRoaXMgZmlsZSBhbHNvIGNvbnRhaW5zIHRlc3RzIHdob3NlIG91dHB1dCB2YXJpZXMgd2l0aCBjb2RlIHVuaXQgc2l6ZSBhbmQvb3IKKyMgbGluayBzaXplLiBVbmljb2RlIHN1cHBvcnQgaXMgcmVxdWlyZWQgZm9yIHRoZXNlIHRlc3RzLiBUaGVyZSBhcmUgc2VwYXJhdGUKKyMgb3V0cHV0IGZpbGVzIGZvciBlYWNoIGNvZGUgdW5pdCBzaXplIGFuZCBsaW5rIHNpemUuCisKKyNwYXR0ZXJuIGZ1bGxiaW5jb2RlLG1lbW9yeQorCisvKCg/aSliKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNiBCcmEKKyAgNCAgIDggQ0JyYSAxCisgMTAgIC9pIGIKKyAxMiAgIDggS2V0CisgMTYgIDE2IEtldAorIDIwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD9zKSguKlh8XkIpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI1IEJyYQorICA0ICAxMCBDQnJhIDEKKyAxMCAgICAgQWxsQW55KgorIDEyICAgICBYCisgMTQgICA3IEFsdAorIDE4ICAgICBeCisgMTkgICAgIEIKKyAyMSAgMTcgS2V0CisgMjUgIDI1IEtldAorIDI5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD9zOi4qWHxeQikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjMgQnJhCisgIDQgICA4IEJyYQorICA4ICAgICBBbGxBbnkqCisgMTAgICAgIFgKKyAxMiAgIDcgQWx0CisgMTYgICAgIF4KKyAxNyAgICAgQgorIDE5ICAxNSBLZXQKKyAyMyAgMjMgS2V0CisgMjcgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1s6YWxudW06XV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzggQnJhCisgIDQgICAgIF4KKyAgNSAgICAgWzAtOUEtWmEtel0KKyAzOCAgMzggS2V0CisgNDIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8jL0l4CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNCBCcmEKKyAgNCAgIDQgS2V0CisgIDggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK09wdGlvbnM6IGV4dGVuZGVkCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKworL2EjL0l4CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDExCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDYgQnJhCisgIDQgICAgIGEKKyAgNiAgIDYgS2V0CisgMTAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IGV4dGVuZGVkCitGaXJzdCBjb2RlIHVuaXQgPSAnYScKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisveD8rLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA2IEJyYQorICA0ICAgICB4PysKKyAgNiAgIDYgS2V0CisgMTAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy94KysvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDExCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDYgQnJhCisgIDQgICAgIHgrKworICA2ICAgNiBLZXQKKyAxMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL3h7MSwzfSsvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTAgQnJhCisgIDQgICAgIHgKKyAgNiAgICAgeHswLDJ9KworIDEwICAxMCBLZXQKKyAxNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyh4KSorLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE3IEJyYQorICA0ICAgICBCcmFwb3N6ZXJvCisgIDUgICA4IENCcmFQb3MgMQorIDExICAgICB4CisgMTMgICA4IEtldFJwb3MKKyAxNyAgMTcgS2V0CisgMjEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eKChhKykoP1UpKFthYl0rKSg/LVUpKFtiY10rKShcdyopKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTMyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAxMjcgQnJhCisgIDQgICAgIF4KKyAgNSAxMTggQ0JyYSAxCisgMTEgICA4IENCcmEgMgorIDE3ICAgICBhKworIDE5ICAgOCBLZXQKKyAyMyAgNDAgQ0JyYSAzCisgMjkgICAgIFthYl0rPworIDYzICA0MCBLZXQKKyA2NyAgNDAgQ0JyYSA0CisgNzMgICAgIFtiY10rCisxMDcgIDQwIEtldAorMTExICAgOCBDQnJhIDUKKzExNyAgICAgXHcqKworMTE5ICAgOCBLZXQKKzEyMyAxMTggS2V0CisxMjcgMTI3IEtldAorMTMxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiOEpcJFdFXDxcLnJYXCtpeFxbZDFiXCFIXCNcP3ZWMHZyS1w6WkgxXD0yTVw+aVZcO1w/YVBoRkJcPFwqdldcQFFXXEBzTzlcfWNmWkFcLWlcJ3dcJWhLZDZndDFVSlBcLDE1X1wjUVlcJE1cXk1zc19VXC9cXVwmTEs5XFs1dlF1Ylxed1xbS0REXDxFam1oVVpcP1wuYWtwMmRGXD5xbWpcOzJcfVlXRmRZeFwuQXBcXWhqQ1BUUFwobjI4a1wrM1w7b1wmV1hxc1wvZ09YZHJcJFw6clwnZG8wXDtiNGNcKGZfR3JcPVwiXFw0XClcWzAxVDdhalFKdkxcJFdcfm1MX3NTXC80aFw6eFwqXFtaTlw9S0xzXCZMNXpYXC9cL1w+aXRcLG9cOmFVXChcO1pcPnBXXCZUN29QXCcyS1xeRVw6eDlcJ2NcW1wlelwtXCw2NEpRNUFlSF9HXCNLaWpVS2doUXdcXlxcdmVhM2FcP2trYV9HXCQ4XCNcYFwqa3luc3h6QkxydVwnXF1rX1xbN0ZyVnhcfVxeXD1cJGJseFw+c1wtTlwlalw7RFwqYVpEbnN3XDpZS1pcJVFcLktuZTlcI2hQXD9cK2IzXChTT3ZMXCxcXlw7XCZ1NVxAXD81QzVCaGJcPW1cLXZFaF9MMTVKbFxdVVwpMFJQNlx7cVwlTFxeX3o1RVwnRHc2WFxiIgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA4MjgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDgyMyBCcmEKKyAgNCAgICAgOEokV0U8LnJYK2l4W2QxYiFIIz92VjB2cks6WkgxPTJNPmlWOz9hUGhGQjwqdldAUVdAc085fWNmWkEtaSd3JWhLZDZndDFVSlAsMTVfI1FZJE1eTXNzX1UvXSZMSzlbNXZRdWJed1tLREQ8RWptaFVaPy5ha3AyZEY+cW1qOzJ9WVdGZFl4LkFwXWhqQ1BUUChuMjhrKzM7byZXWHFzL2dPWGRyJDpyJ2RvMDtiNGMoZl9Hcj0iXDQpWzAxVDdhalFKdkwkV35tTF9zUy80aDp4KltaTj1LTHMmTDV6WC8vPml0LG86YVUoO1o+cFcmVDdvUCcyS15FOng5J2NbJXotLDY0SlE1QWVIX0cjS2lqVUtnaFF3Xlx2ZWEzYT9ra2FfRyQ4I2Aqa3luc3h6QkxydSdda19bN0ZyVnh9Xj0kYmx4PnMtTiVqO0QqYVpEbnN3OllLWiVRLktuZTkjaFA/K2IzKFNPdkwsXjsmdTVAPzVDNUJoYj1tLXZFaF9MMTVKbF1VKTBSUDZ7cSVMXl96NUUnRHc2WAorODIyICAgICBcYgorODIzIDgyMyBLZXQKKzgyNyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIlwkXDxcLlhcK2l4XFtkMWJcIUhcI1w/dlYwdnJLXDpaSDFcPTJNXD5pVlw7XD9hUGhGQlw8XCp2V1xAUVdcQHNPOVx9Y2ZaQVwtaVwnd1wlaEtkNmd0MVVKUFwsMTVfXCNRWVwkTVxeTXNzX1VcL1xdXCZMSzlcWzV2UXViXF53XFtLRERcPEVqbWhVWlw/XC5ha3AyZEZcPnFtalw7Mlx9WVdGZFl4XC5BcFxdaGpDUFRQXChuMjhrXCszXDtvXCZXWHFzXC9nT1hkclwkXDpyXCdkbzBcO2I0Y1woZl9Hclw9XCJcXDRcKVxbMDFUN2FqUUp2TFwkV1x+bUxfc1NcLzRoXDp4XCpcW1pOXD1LTHNcJkw1elhcL1wvXD5pdFwsb1w6YVVcKFw7Wlw+cFdcJlQ3b1BcJzJLXF5FXDp4OVwnY1xbXCV6XC1cLDY0SlE1QWVIX0dcI0tpalVLZ2hRd1xeXFx2ZWEzYVw/a2thX0dcJDhcI1xgXCpreW5zeHpCTHJ1XCdcXWtfXFs3RnJWeFx9XF5cPVwkYmx4XD5zXC1OXCVqXDtEXCphWkRuc3dcOllLWlwlUVwuS25lOVwjaFBcP1wrYjNcKFNPdkxcLFxeXDtcJnU1XEBcPzVDNUJoYlw9bVwtdkVoX0wxNUpsXF1VXCkwUlA2XHtxXCVMXF5fejVFXCdEdzZYXGIiCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDgxOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgODEzIEJyYQorICA0ICAgICAkPC5YK2l4W2QxYiFIIz92VjB2cks6WkgxPTJNPmlWOz9hUGhGQjwqdldAUVdAc085fWNmWkEtaSd3JWhLZDZndDFVSlAsMTVfI1FZJE1eTXNzX1UvXSZMSzlbNXZRdWJed1tLREQ8RWptaFVaPy5ha3AyZEY+cW1qOzJ9WVdGZFl4LkFwXWhqQ1BUUChuMjhrKzM7byZXWHFzL2dPWGRyJDpyJ2RvMDtiNGMoZl9Hcj0iXDQpWzAxVDdhalFKdkwkV35tTF9zUy80aDp4KltaTj1LTHMmTDV6WC8vPml0LG86YVUoO1o+cFcmVDdvUCcyS15FOng5J2NbJXotLDY0SlE1QWVIX0cjS2lqVUtnaFF3Xlx2ZWEzYT9ra2FfRyQ4I2Aqa3luc3h6QkxydSdda19bN0ZyVnh9Xj0kYmx4PnMtTiVqO0QqYVpEbnN3OllLWiVRLktuZTkjaFA/K2IzKFNPdkwsXjsmdTVAPzVDNUJoYj1tLXZFaF9MMTVKbF1VKTBSUDZ7cSVMXl96NUUnRHc2WAorODEyICAgICBcYgorODEzIDgxMyBLZXQKKzgxNyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyhhKD8xKWIpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyNworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDIyIEJyYQorICA0ICAxNCBDQnJhIDEKKyAxMCAgICAgYQorIDEyICAgNCBSZWN1cnNlCisgMTYgICAgIGIKKyAxOCAgMTQgS2V0CisgMjIgIDIyIEtldAorIDI2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKGEoPzEpK2IpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDMwIEJyYQorICA0ICAyMiBDQnJhIDEKKyAxMCAgICAgYQorIDEyICAgOCBPbmNlCisgMTYgICA0IFJlY3Vyc2UKKyAyMCAgIDggS2V0Um1heAorIDI0ICAgICBiCisgMjYgIDIyIEtldAorIDMwICAzMCBLZXQKKyAzNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2EoP1A8bmFtZTE+YnxjKWQoP1A8bG9uZ2VybmFtZTI+ZSkvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzggQnJhCisgIDQgICAgIGEKKyAgNiAgIDggQ0JyYSAxCisgMTIgICAgIGIKKyAxNCAgIDYgQWx0CisgMTggICAgIGMKKyAyMCAgMTQgS2V0CisgMjQgICAgIGQKKyAyNiAgIDggQ0JyYSAyCisgMzIgICAgIGUKKyAzNCAgIDggS2V0CisgMzggIDM4IEtldAorIDQyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD86YSg/UDxjPmMoP1A8ZD5kKSkpKD9QPGE+YSkvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDU1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNTAgQnJhCisgIDQgIDMwIEJyYQorICA4ICAgICBhCisgMTAgIDIwIENCcmEgMQorIDE2ICAgICBjCisgMTggICA4IENCcmEgMgorIDI0ICAgICBkCisgMjYgICA4IEtldAorIDMwICAyMCBLZXQKKyAzNCAgMzAgS2V0CisgMzggICA4IENCcmEgMworIDQ0ICAgICBhCisgNDYgICA4IEtldAorIDUwICA1MCBLZXQKKyA1NCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/UDxhPmEpLi4uKD9QPWEpYmJiKD9QPmEpZC8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzNCBCcmEKKyAgNCAgIDggQ0JyYSAxCisgMTAgICAgIGEKKyAxMiAgIDggS2V0CisgMTYgICAgIEFueQorIDE3ICAgICBBbnkKKyAxOCAgICAgQW55CisgMTkgICAgIFwxCisgMjIgICAgIGJiYgorIDI4ICAgNCBSZWN1cnNlCisgMzIgICAgIGQKKyAzNCAgMzQgS2V0CisgMzggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hYmMoP0MyNTUpZGUoP0MpZi8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzMiBCcmEKKyAgNCAgICAgYWJjCisgMTAgICAgIENhbGxvdXQgMjU1IDEwIDEKKyAxOCAgICAgZGUKKyAyMiAgICAgQ2FsbG91dCAwIDE2IDEKKyAzMCAgICAgZgorIDMyICAzMiBLZXQKKyAzNiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2FiY2RlL2F1dG9fY2FsbG91dAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA2NworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDYyIEJyYQorICA0ICAgICBDYWxsb3V0IDI1NSAwIDEKKyAxMiAgICAgYQorIDE0ICAgICBDYWxsb3V0IDI1NSAxIDEKKyAyMiAgICAgYgorIDI0ICAgICBDYWxsb3V0IDI1NSAyIDEKKyAzMiAgICAgYworIDM0ICAgICBDYWxsb3V0IDI1NSAzIDEKKyA0MiAgICAgZAorIDQ0ICAgICBDYWxsb3V0IDI1NSA0IDEKKyA1MiAgICAgZQorIDU0ICAgICBDYWxsb3V0IDI1NSA1IDAKKyA2MiAgNjIgS2V0CisgNjYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA3IEJyYQorICA0ICAgICBceHsxMDB9CisgIDcgICA3IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwMH0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDggQnJhCisgIDQgICAgIFx4ezEwMDB9CisgIDggICA4IEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA5IEJyYQorICA0ICAgICBceHsxMDAwMH0KKyAgOSAgIDkgS2V0CisgMTMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMDAwMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA5IEJyYQorICA0ICAgICBceHsxMDAwMDB9CisgIDkgICA5IEtldAorIDEzICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTBmZmZmfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOSBCcmEKKyAgNCAgICAgXHh7MTBmZmZmfQorICA5ICAgOSBLZXQKKyAxMyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezExMDAwMH0vdXRmCitGYWlsZWQ6IGVycm9yIDEzNCBhdCBvZmZzZXQgOTogY2hhcmFjdGVyIGNvZGUgcG9pbnQgdmFsdWUgaW4gXHh7fSBvciBcb3t9IGlzIHRvbyBsYXJnZQorCisvW1x4e2ZmfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDcgQnJhCisgIDQgICAgIFx4e2ZmfQorICA3ICAgNyBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceHsxMDB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNyBCcmEKKyAgNCAgICAgXHh7MTAwfQorICA3ICAgNyBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ODAvdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDcgQnJhCisgIDQgICAgIFx4ezgwfQorICA3ICAgNyBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ZmYvdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDcgQnJhCisgIDQgICAgIFx4e2ZmfQorICA3ICAgNyBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezAwNDF9XHh7MjI2Mn1ceHswMzkxfVx4ezAwMmV9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDIwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTUgQnJhCisgIDQgICAgIEFceHsyMjYyfVx4ezM5MX0uCisgMTUgIDE1IEtldAorIDE5ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiB1dGYKK0ZpcnN0IGNvZGUgdW5pdCA9ICdBJworTGFzdCBjb2RlIHVuaXQgPSAnLicKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gNAorCisvXHh7RDU1Y31ceHthZDZkfVx4e0M1QjR9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDIxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTYgQnJhCisgIDQgICAgIFx4e2Q1NWN9XHh7YWQ2ZH1ceHtjNWI0fQorIDE2ICAxNiBLZXQKKyAyMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGVkCitMYXN0IGNvZGUgdW5pdCA9IFx4YjQKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvXHh7NjVlNX1ceHs2NzJjfVx4ezhhOWV9L0ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDIxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTYgQnJhCisgIDQgICAgIFx4ezY1ZTV9XHh7NjcyY31ceHs4YTllfQorIDE2ICAxNiBLZXQKKyAyMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSBceGU2CitMYXN0IGNvZGUgdW5pdCA9IFx4OWUKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMworCisvW1x4ezEwMH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA3IEJyYQorICA0ICAgICBceHsxMDB9CisgIDcgICA3IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1pceHsxMDB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNTAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA0NSBCcmEKKyAgNCAgICAgW1pceHsxMDB9XQorIDQ1ICA0NSBLZXQKKyA0OSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15bXHh7MTAwfVxFLVxRXEVceHsxNTB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNiBCcmEKKyAgNCAgICAgXgorICA1ICAgICBbXHh7MTAwfS1ceHsxNTB9XQorIDE2ICAxNiBLZXQKKyAyMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL15bXFHEgFxFLVxRxZBcRV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDIxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTYgQnJhCisgIDQgICAgIF4KKyAgNSAgICAgW1x4ezEwMH0tXHh7MTUwfV0KKyAxNiAgMTYgS2V0CisgMjAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1xRxIBcRS1cUcWQXEUvdXRmCitGYWlsZWQ6IGVycm9yIDEwNiBhdCBvZmZzZXQgMTU6IG1pc3NpbmcgdGVybWluYXRpbmcgXSBmb3IgY2hhcmFjdGVyIGNsYXNzCisKKy9bXHB7TH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEzIEJyYQorICA0ICAgICBbXHB7TH1dCisgMTMgIDEzIEtldAorIDE3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xwe15MfV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTMgQnJhCisgIDQgICAgIFtcUHtMfV0KKyAxMyAgMTMgS2V0CisgMTcgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXFB7TH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDEzIEJyYQorICA0ICAgICBbXFB7TH1dCisgMTMgIDEzIEtldAorIDE3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xQe15MfV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTMgQnJhCisgIDQgICAgIFtccHtMfV0KKyAxMyAgMTMgS2V0CisgMTcgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bYWJjXHB7TH1ceHswNjYwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDUzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNDggQnJhCisgIDQgICAgIFthLWNccHtMfVx4ezY2MH1dCisgNDggIDQ4IEtldAorIDUyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xwe05kfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTMgQnJhCisgIDQgICAgIFtccHtOZH1dCisgMTMgIDEzIEtldAorIDE3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xwe05kfSstXSsvdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDUxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNDYgQnJhCisgIDQgICAgIFsrXC1ccHtOZH1dKysKKyA0NiAgNDYgS2V0CisgNTAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9BXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0vaSx1dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyMiBCcmEKKyAgNCAgL2kgQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9CisgMjIgIDIyIEtldAorIDI2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyNworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDIyIEJyYQorICA0ICAgICBBXHh7MzkxfVx4ezEwNDI3fVx4e2ZmM2F9XHh7MWZiMH0KKyAyMiAgMjIgS2V0CisgMjYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHh7MTA1fS1ceHsxMDl9XS9pLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE1IEJyYQorICA0ICAgICBbXHh7MTA0fS1ceHsxMDl9XQorIDE1ICAxNSBLZXQKKyAxOSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyggKCAoPygxKTB8KSApKiAgICkveAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0NworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDQyIEJyYQorICA0ICAzNCBDQnJhIDEKKyAxMCAgICAgQnJhemVybworIDExICAyMyBTQ0JyYSAyCisgMTcgICA5IENvbmQKKyAyMSAgIDEgQ29uZCByZWYKKyAyNCAgICAgMAorIDI2ICAgNCBBbHQKKyAzMCAgMTMgS2V0CisgMzQgIDIzIEtldFJtYXgKKyAzOCAgMzQgS2V0CisgNDIgIDQyIEtldAorIDQ2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCAgKD8oMSkwfCkqICAgKS94CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDM3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzIgQnJhCisgIDQgIDI0IENCcmEgMQorIDEwICAgICBCcmF6ZXJvCisgMTEgICA5IFNDb25kCisgMTUgICAxIENvbmQgcmVmCisgMTggICAgIDAKKyAyMCAgIDQgQWx0CisgMjQgIDEzIEtldFJtYXgKKyAyOCAgMjQgS2V0CisgMzIgIDMyIEtldAorIDM2ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW2FdLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA2IEJyYQorICA0ICAgICBhCisgIDYgICA2IEtldAorIDEwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW2FdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA2IEJyYQorICA0ICAgICBhCisgIDYgICA2IEtldAorIDEwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1x4YWFdLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA2IEJyYQorICA0ICAgICBceHthYX0KKyAgNiAgIDYgS2V0CisgMTAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHhhYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDcgQnJhCisgIDQgICAgIFx4e2FhfQorICA3ICAgNyBLZXQKKyAxMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teYV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDExCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDYgQnJhCisgIDQgICAgIFteYV0KKyAgNiAgIDYgS2V0CisgMTAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXmFdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA2IEJyYQorICA0ICAgICBbXmFdCisgIDYgICA2IEtldAorIDEwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15ceGFhXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNiBCcmEKKyAgNCAgICAgW15ceHthYX1dCisgIDYgICA2IEtldAorIDEwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15ceGFhXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNyBCcmEKKyAgNCAgICAgW15ceHthYX1dCisgIDcgICA3IEtldAorIDExICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjcGF0dGVybiAtbWVtb3J5CisKKy9bXlxkXS91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTMgQnJhCisgIDQgICAgIFteXHB7TmR9XQorIDEzICAxMyBLZXQKKyAxNyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tbOl5hbHBoYTpdWzpeY250cmw6XV0rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNyBCcmEKKyAgNCAgICAgW1xQe0x9XFB7Q2N9XSsrCisgMTcgIDE3IEtldAorIDIxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6XmNudHJsOl1bOl5hbHBoYTpdXSsvdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE3IEJyYQorICA0ICAgICBbXFB7Q2N9XFB7TH1dKysKKyAxNyAgMTcgS2V0CisgMjEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzphbHBoYTpdXSsvdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE0IEJyYQorICA0ICAgICBbXHB7TH1dKysKKyAxNCAgMTQgS2V0CisgMTggICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzpeYWxwaGE6XVxTXSsvdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE3IEJyYQorICA0ICAgICBbXFB7TH1cUHtYc3B9XSsrCisgMTcgIDE3IEtldAorIDIxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYWJjKGR8ZSkoKlRIRU4peCgxMjMoKlRIRU4pNHw1NjcoYnxxKSgqVEhFTil4eCkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgODMgQnJhCisgIDQgICAgIGFiYworIDEwICAgOCBDQnJhIDEKKyAxNiAgICAgZAorIDE4ICAgNiBBbHQKKyAyMiAgICAgZQorIDI0ICAxNCBLZXQKKyAyOCAgICAgKlRIRU4KKyAyOSAgICAgeAorIDMxICAxNSBDQnJhIDIKKyAzNyAgICAgMTIzCisgNDMgICAgICpUSEVOCisgNDQgICAgIDQKKyA0NiAgMzMgQWx0CisgNTAgICAgIDU2NworIDU2ICAgOCBDQnJhIDMKKyA2MiAgICAgYgorIDY0ICAgNiBBbHQKKyA2OCAgICAgcQorIDcwICAxNCBLZXQKKyA3NCAgICAgKlRIRU4KKyA3NSAgICAgeHgKKyA3OSAgNDggS2V0CisgODMgIDgzIEtldAorIDg3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCgoYVwyKXwoYSopXGc8LTE+KSkqYT8vCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNzAgQnJhCisgIDQgICAgIEJyYXplcm8KKyAgNSAgNTkgU0NCcmEgMQorIDExICA0OSBPbmNlCisgMTUgIDIxIENCcmEgMgorIDIxICAxMSBDQnJhIDMKKyAyNyAgICAgYQorIDI5ICAgICBcMgorIDMyICAxMSBLZXQKKyAzNiAgMjAgQWx0CisgNDAgICA4IENCcmEgNAorIDQ2ICAgICBhKgorIDQ4ICAgOCBLZXQKKyA1MiAgNDAgUmVjdXJzZQorIDU2ICA0MSBLZXQKKyA2MCAgNDkgS2V0CisgNjQgIDU5IEtldFJtYXgKKyA2OCAgICAgYT8rCisgNzAgIDcwIEtldAorIDc0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCg/KzEpKFwxKSkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzkgQnJhCisgIDQgIDMxIE9uY2UKKyAgOCAgMjMgQ0JyYSAxCisgMTQgIDE4IFJlY3Vyc2UKKyAxOCAgIDkgQ0JyYSAyCisgMjQgICAgIFwxCisgMjcgICA5IEtldAorIDMxICAyMyBLZXQKKyAzNSAgMzEgS2V0CisgMzkgIDM5IEtldAorIDQzICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiKD8xKSg/Iz8nKXsyfShhKSIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA0MCBCcmEKKyAgNCAgIDggT25jZQorICA4ICAyOCBSZWN1cnNlCisgMTIgICA4IEtldAorIDE2ICAgOCBPbmNlCisgMjAgIDI4IFJlY3Vyc2UKKyAyNCAgIDggS2V0CisgMjggICA4IENCcmEgMQorIDM0ICAgICBhCisgMzYgICA4IEtldAorIDQwICA0MCBLZXQKKyA0NCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy4oKD8yKSg/Uil8XDF8JCkoKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA1MyBCcmEKKyAgNCAgICAgQW55CisgIDUgIDM0IE9uY2UKKyAgOSAgMTQgQ0JyYSAxCisgMTUgIDQzIFJlY3Vyc2UKKyAxOSAgIDAgUmVjdXJzZQorIDIzICAgNyBBbHQKKyAyNyAgICAgXDEKKyAzMCAgIDUgQWx0CisgMzQgICAgICQKKyAzNSAgMjYgS2V0CisgMzkgIDM0IEtldAorIDQzICAgNiBDQnJhIDIKKyA0OSAgIDYgS2V0CisgNTMgIDUzIEtldAorIDU3ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLigoPzMpKD9SKSgpKD8yKXxcMXwkKSgpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDY3IEJyYQorICA0ICAgICBBbnkKKyAgNSAgNDggT25jZQorICA5ICAyOCBDQnJhIDEKKyAxNSAgNTcgUmVjdXJzZQorIDE5ICAgMCBSZWN1cnNlCisgMjMgICA2IENCcmEgMgorIDI5ICAgNiBLZXQKKyAzMyAgMjMgUmVjdXJzZQorIDM3ICAgNyBBbHQKKyA0MSAgICAgXDEKKyA0NCAgIDUgQWx0CisgNDggICAgICQKKyA0OSAgNDAgS2V0CisgNTMgIDQ4IEtldAorIDU3ICAgNiBDQnJhIDMKKyA2MyAgIDYgS2V0CisgNjcgIDY3IEtldAorIDcxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD8xKSgpKCgoKCgoXDErKykpXHg4NSkrKXwpKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA5NiBCcmEKKyAgNCAgIDggUmVjdXJzZQorICA4ICAgNiBDQnJhIDEKKyAxNCAgIDYgS2V0CisgMTggIDc0IENCcmEgMgorIDI0ICA2MCBDQnJhIDMKKyAzMCAgNTAgQ0JyYSA0CisgMzYgIDQwIENCcmEgNQorIDQyICAyOCBDQnJhIDYKKyA0OCAgMTggQ0JyYSA3CisgNTQgICA4IE9uY2UKKyA1OCAgICAgXDErCisgNjIgICA4IEtldAorIDY2ICAxOCBLZXQKKyA3MCAgMjggS2V0CisgNzQgICAgIFx4ezg1fQorIDc2ICA0MCBLZXRSbWF4CisgODAgIDUwIEtldAorIDg0ICAgNCBBbHQKKyA4OCAgNjQgS2V0CisgOTIgIDc0IEtldAorIDk2ICA5NiBLZXQKKzEwMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBDaGVjayB0aGUgYWJzb2x1dGUgbGltaXQgb24gbmVzdGluZyAoP3wgZXRjLiBUaGlzIHZhcmllcyB3aXRoIGNvZGUgdW5pdAorIyB3aWR0aCBiZWNhdXNlIHRoZSB3b3Jrc3BhY2UgaXMgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGJ5dGVzLiBJdCB3aWxsIGZhaWwKKyMgd2l0aCBsaW5rIHNpemUgMiBpbiA4LWJpdCBhbmQgMTYtYml0IGJ1dCBub3QgaW4gMzItYml0LgorCisvKD98KD98KD9KOig/fCg/eDooP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3woP3wKKykpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKQorL3BhcmVuc19uZXN0X2xpbWl0PTEwMDAsLWZ1bGxiaW5jb2RlCisKKyMgVXNlICJleHBhbmQiIHRvIGNyZWF0ZSBzb21lIHZlcnkgbG9uZyBwYXR0ZXJucyB3aXRoIG5lc3RlZCBwYXJlbnRoZXNlcywgaW4KKyMgb3JkZXIgdG8gdGVzdCB3b3Jrc3BhY2Ugb3ZlcmZsb3cuIEFnYWluLCB0aGlzIHZhcmllcyB3aXRoIGNvZGUgdW5pdCB3aWR0aCwKKyMgYW5kIGV2ZW4gd2l0aCBpdCBmYWlscyBpbiB0d28gbW9kZXMsIHRoZSBlcnJvciBvZmZzZXQgZGlmZmVycy4gSXQgYWxzbyB2YXJpZXMKKyMgd2l0aCBsaW5rIHNpemUgLSBoZW5jZSBtdWx0aXBsZSB0ZXN0cyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuCisKKy8oPydBQkMnXFtbYmFyXShdezEwNX0qVEhFTjpcW0FdezI1NX1cWyldezEwNn0vZXhwYW5kLC1mdWxsYmluY29kZQorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxMDZ9KlRIRU46XFtBXXsyNTV9XFspXXsxMDd9L2V4cGFuZCwtZnVsbGJpbmNvZGUKKworLyg/J0FCQydcW1tiYXJdKF17MTU5fSpUSEVOOlxbQV17MjU1fVxbKV17MTYwfS9leHBhbmQsLWZ1bGxiaW5jb2RlCitGYWlsZWQ6IGVycm9yIDE4NiBhdCBvZmZzZXQgOTM2OiByZWd1bGFyIGV4cHJlc3Npb24gaXMgdG9vIGNvbXBsaWNhdGVkCisKKy8oPydBQkMnXFtbYmFyXShdezE5OX0qVEhFTjpcW0FdezI1NX1cWyldezIwMH0vZXhwYW5kLC1mdWxsYmluY29kZQorRmFpbGVkOiBlcnJvciAxODYgYXQgb2Zmc2V0IDkzNjogcmVndWxhciBleHByZXNzaW9uIGlzIHRvbyBjb21wbGljYXRlZAorCisvKD8nQUJDJ1xbW2Jhcl0oXXsyOTl9KlRIRU46XFtBXXsyNTV9XFspXXszMDB9L2V4cGFuZCwtZnVsbGJpbmNvZGUKK0ZhaWxlZDogZXJyb3IgMTg2IGF0IG9mZnNldCA5MzY6IHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyB0b28gY29tcGxpY2F0ZWQKKworLyg/KDEpKD8xKSl7OCx9KygpL2RlYnVnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAxNTAgQnJhCisgIDQgMTMyIE9uY2UKKyAgOCAgMTEgQ29uZAorIDEyICAgMSBDb25kIHJlZgorIDE1IDE0MCBSZWN1cnNlCisgMTkgIDExIEtldAorIDIzICAxMSBDb25kCisgMjcgICAxIENvbmQgcmVmCisgMzAgMTQwIFJlY3Vyc2UKKyAzNCAgMTEgS2V0CisgMzggIDExIENvbmQKKyA0MiAgIDEgQ29uZCByZWYKKyA0NSAxNDAgUmVjdXJzZQorIDQ5ICAxMSBLZXQKKyA1MyAgMTEgQ29uZAorIDU3ICAgMSBDb25kIHJlZgorIDYwIDE0MCBSZWN1cnNlCisgNjQgIDExIEtldAorIDY4ICAxMSBDb25kCisgNzIgICAxIENvbmQgcmVmCisgNzUgMTQwIFJlY3Vyc2UKKyA3OSAgMTEgS2V0CisgODMgIDExIENvbmQKKyA4NyAgIDEgQ29uZCByZWYKKyA5MCAxNDAgUmVjdXJzZQorIDk0ICAxMSBLZXQKKyA5OCAgMTEgQ29uZAorMTAyICAgMSBDb25kIHJlZgorMTA1IDE0MCBSZWN1cnNlCisxMDkgIDExIEtldAorMTEzICAxOSBTQnJhUG9zCisxMTcgIDExIFNDb25kCisxMjEgICAxIENvbmQgcmVmCisxMjQgMTQwIFJlY3Vyc2UKKzEyOCAgMTEgS2V0CisxMzIgIDE5IEtldFJwb3MKKzEzNiAxMzIgS2V0CisxNDAgICA2IENCcmEgMQorMTQ2ICAgNiBLZXQKKzE1MCAxNTAgS2V0CisxNTQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY2QKKyAwOiAKKyAxOiAKKworLyg/KDEpfGEoPzEpYil7Mix9KygpL2RlYnVnCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNzYgQnJhCisgIDQgIDU4IE9uY2UKKyAgOCAgIDcgQ29uZAorIDEyICAgMSBDb25kIHJlZgorIDE1ICAxMiBBbHQKKyAxOSAgICAgYQorIDIxICA2NiBSZWN1cnNlCisgMjUgICAgIGIKKyAyNyAgMTkgS2V0CisgMzEgIDI3IFNCcmFQb3MKKyAzNSAgIDcgU0NvbmQKKyAzOSAgIDEgQ29uZCByZWYKKyA0MiAgMTIgQWx0CisgNDYgICAgIGEKKyA0OCAgNjYgUmVjdXJzZQorIDUyICAgICBiCisgNTQgIDE5IEtldAorIDU4ICAyNyBLZXRScG9zCisgNjIgIDU4IEtldAorIDY2ICAgNiBDQnJhIDEKKyA3MiAgIDYgS2V0CisgNzYgIDc2IEtldAorIDgwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxCitNYXggYmFjayByZWZlcmVuY2UgPSAxCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDAKKyAgICBhYmNkZQorTm8gbWF0Y2gKKworLygoPzEpKD8yKSg/MykoPzQpKD81KSg/NikoPzcpKD84KSg/OSkoPzkpKD84KSg/NykoPzYpKD81KSg/NCkoPzMpKD8yKSg/MSkoPzApKXsyLH0oKSgpKCkoKSgpKCkoKSgpKCkvZGVidWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDI2NiBCcmEKKyAgNCAgODIgQ0JyYSAxCisgMTAgICA0IFJlY3Vyc2UKKyAxNCAxNzYgUmVjdXJzZQorIDE4IDE4NiBSZWN1cnNlCisgMjIgMTk2IFJlY3Vyc2UKKyAyNiAyMDYgUmVjdXJzZQorIDMwIDIxNiBSZWN1cnNlCisgMzQgMjI2IFJlY3Vyc2UKKyAzOCAyMzYgUmVjdXJzZQorIDQyIDI0NiBSZWN1cnNlCisgNDYgMjQ2IFJlY3Vyc2UKKyA1MCAyMzYgUmVjdXJzZQorIDU0IDIyNiBSZWN1cnNlCisgNTggMjE2IFJlY3Vyc2UKKyA2MiAyMDYgUmVjdXJzZQorIDY2IDE5NiBSZWN1cnNlCisgNzAgMTg2IFJlY3Vyc2UKKyA3NCAxNzYgUmVjdXJzZQorIDc4ICAgNCBSZWN1cnNlCisgODIgICAwIFJlY3Vyc2UKKyA4NiAgODIgS2V0CisgOTAgIDgyIFNDQnJhIDEKKyA5NiAgIDQgUmVjdXJzZQorMTAwIDE3NiBSZWN1cnNlCisxMDQgMTg2IFJlY3Vyc2UKKzEwOCAxOTYgUmVjdXJzZQorMTEyIDIwNiBSZWN1cnNlCisxMTYgMjE2IFJlY3Vyc2UKKzEyMCAyMjYgUmVjdXJzZQorMTI0IDIzNiBSZWN1cnNlCisxMjggMjQ2IFJlY3Vyc2UKKzEzMiAyNDYgUmVjdXJzZQorMTM2IDIzNiBSZWN1cnNlCisxNDAgMjI2IFJlY3Vyc2UKKzE0NCAyMTYgUmVjdXJzZQorMTQ4IDIwNiBSZWN1cnNlCisxNTIgMTk2IFJlY3Vyc2UKKzE1NiAxODYgUmVjdXJzZQorMTYwIDE3NiBSZWN1cnNlCisxNjQgICA0IFJlY3Vyc2UKKzE2OCAgIDAgUmVjdXJzZQorMTcyICA4MiBLZXRSbWF4CisxNzYgICA2IENCcmEgMgorMTgyICAgNiBLZXQKKzE4NiAgIDYgQ0JyYSAzCisxOTIgICA2IEtldAorMTk2ICAgNiBDQnJhIDQKKzIwMiAgIDYgS2V0CisyMDYgICA2IENCcmEgNQorMjEyICAgNiBLZXQKKzIxNiAgIDYgQ0JyYSA2CisyMjIgICA2IEtldAorMjI2ICAgNiBDQnJhIDcKKzIzMiAgIDYgS2V0CisyMzYgICA2IENCcmEgOAorMjQyICAgNiBLZXQKKzI0NiAgIDYgQ0JyYSA5CisyNTIgICA2IEtldAorMjU2ICAgNiBDQnJhIDEwCisyNjIgICA2IEtldAorMjY2IDI2NiBLZXQKKzI3MCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMTAKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorCisjIEVuZCBvZiB0ZXN0aW5wdXQ4CmRpZmYgLS1naXQgYS9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTQgYi9kaXN0Mi90ZXN0ZGF0YS90ZXN0b3V0cHV0OC04LTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE5OTNiMgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ4LTgtNApAQCAtMCwwICsxLDEwMjUgQEAKKyMgVGhlcmUgYXJlIHR3byBzb3J0cyBvZiBwYXR0ZXJucyBpbiB0aGlzIHRlc3QuIEEgbnVtYmVyIG9mIHRoZW0gYXJlCisjIHJlcHJlc2VudGF0aXZlIHBhdHRlcm5zIHdob3NlIGxlbmd0aHMgYW5kIG9mZnNldHMgYXJlIGNoZWNrZWQuIFRoaXMgaXMganVzdCBhCisjIGRvdWJsZWNoZWNrIHRlc3QgdG8gZW5zdXJlIHRoZSBzaXplcyBkb24ndCBnbyBob3JyaWJseSB3cm9uZyB3aGVuIHNvbWV0aGluZworIyBpcyBjaGFuZ2VkLiBUaGUgb3BlcmF0aW9uIG9mIHRoZXNlIHBhdHRlcm5zIGlzIGNoZWNrZWQgaW4gb3RoZXIgdGVzdHMuCisjCisjIFRoaXMgZmlsZSBhbHNvIGNvbnRhaW5zIHRlc3RzIHdob3NlIG91dHB1dCB2YXJpZXMgd2l0aCBjb2RlIHVuaXQgc2l6ZSBhbmQvb3IKKyMgbGluayBzaXplLiBVbmljb2RlIHN1cHBvcnQgaXMgcmVxdWlyZWQgZm9yIHRoZXNlIHRlc3RzLiBUaGVyZSBhcmUgc2VwYXJhdGUKKyMgb3V0cHV0IGZpbGVzIGZvciBlYWNoIGNvZGUgdW5pdCBzaXplIGFuZCBsaW5rIHNpemUuCisKKyNwYXR0ZXJuIGZ1bGxiaW5jb2RlLG1lbW9yeQorCisvKCg/aSliKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxOSBCcmEKKyAgNSAgIDkgQ0JyYSAxCisgMTIgIC9pIGIKKyAxNCAgIDkgS2V0CisgMTkgIDE5IEtldAorIDI0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD9zKSguKlh8XkIpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAzNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDI5IEJyYQorICA1ICAxMSBDQnJhIDEKKyAxMiAgICAgQWxsQW55KgorIDE0ICAgICBYCisgMTYgICA4IEFsdAorIDIxICAgICBeCisgMjIgICAgIEIKKyAyNCAgMTkgS2V0CisgMjkgIDI5IEtldAorIDM0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKD9zOi4qWHxeQikvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDMzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjcgQnJhCisgIDUgICA5IEJyYQorIDEwICAgICBBbGxBbnkqCisgMTIgICAgIFgKKyAxNCAgIDggQWx0CisgMTkgICAgIF4KKyAyMCAgICAgQgorIDIyICAxNyBLZXQKKyAyNyAgMjcgS2V0CisgMzIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1s6YWxudW06XV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzkgQnJhCisgIDUgICAgIF4KKyAgNiAgICAgWzAtOUEtWmEtel0KKyAzOSAgMzkgS2V0CisgNDQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8jL0l4CitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDExCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDUgQnJhCisgIDUgICA1IEtldAorIDEwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitNYXkgbWF0Y2ggZW1wdHkgc3RyaW5nCitPcHRpb25zOiBleHRlbmRlZAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKy9hIy9JeAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA3IEJyYQorICA1ICAgICBhCisgIDcgICA3IEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitPcHRpb25zOiBleHRlbmRlZAorRmlyc3QgY29kZSB1bml0ID0gJ2EnCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL3g/Ky8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNyBCcmEKKyAgNSAgICAgeD8rCisgIDcgICA3IEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisveCsrLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA3IEJyYQorICA1ICAgICB4KysKKyAgNyAgIDcgS2V0CisgMTIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy94ezEsM30rLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDExIEJyYQorICA1ICAgICB4CisgIDcgICAgIHh7MCwyfSsKKyAxMSAgMTEgS2V0CisgMTYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oeCkqKy8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyMCBCcmEKKyAgNSAgICAgQnJhcG9zemVybworICA2ICAgOSBDQnJhUG9zIDEKKyAxMyAgICAgeAorIDE1ICAgOSBLZXRScG9zCisgMjAgIDIwIEtldAorIDI1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXigoYSspKD9VKShbYWJdKykoPy1VKShbYmNdKykoXHcqKSkvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE0NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgMTM4IEJyYQorICA1ICAgICBeCisgIDYgMTI3IENCcmEgMQorIDEzICAgOSBDQnJhIDIKKyAyMCAgICAgYSsKKyAyMiAgIDkgS2V0CisgMjcgIDQxIENCcmEgMworIDM0ICAgICBbYWJdKz8KKyA2OCAgNDEgS2V0CisgNzMgIDQxIENCcmEgNAorIDgwICAgICBbYmNdKworMTE0ICA0MSBLZXQKKzExOSAgIDkgQ0JyYSA1CisxMjYgICAgIFx3KisKKzEyOCAgIDkgS2V0CisxMzMgMTI3IEtldAorMTM4IDEzOCBLZXQKKzE0MyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIjhKXCRXRVw8XC5yWFwraXhcW2QxYlwhSFwjXD92VjB2cktcOlpIMVw9Mk1cPmlWXDtcP2FQaEZCXDxcKnZXXEBRV1xAc085XH1jZlpBXC1pXCd3XCVoS2Q2Z3QxVUpQXCwxNV9cI1FZXCRNXF5Nc3NfVVwvXF1cJkxLOVxbNXZRdWJcXndcW0tERFw8RWptaFVaXD9cLmFrcDJkRlw+cW1qXDsyXH1ZV0ZkWXhcLkFwXF1oakNQVFBcKG4yOGtcKzNcO29cJldYcXNcL2dPWGRyXCRcOnJcJ2RvMFw7YjRjXChmX0dyXD1cIlxcNFwpXFswMVQ3YWpRSnZMXCRXXH5tTF9zU1wvNGhcOnhcKlxbWk5cPUtMc1wmTDV6WFwvXC9cPml0XCxvXDphVVwoXDtaXD5wV1wmVDdvUFwnMktcXkVcOng5XCdjXFtcJXpcLVwsNjRKUTVBZUhfR1wjS2lqVUtnaFF3XF5cXHZlYTNhXD9ra2FfR1wkOFwjXGBcKmt5bnN4ekJMcnVcJ1xda19cWzdGclZ4XH1cXlw9XCRibHhcPnNcLU5cJWpcO0RcKmFaRG5zd1w6WUtaXCVRXC5LbmU5XCNoUFw/XCtiM1woU092TFwsXF5cO1wmdTVcQFw/NUM1QmhiXD1tXC12RWhfTDE1SmxcXVVcKTBSUDZce3FcJUxcXl96NUVcJ0R3NlhcYiIKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogODMwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCA4MjQgQnJhCisgIDUgICAgIDhKJFdFPC5yWCtpeFtkMWIhSCM/dlYwdnJLOlpIMT0yTT5pVjs/YVBoRkI8KnZXQFFXQHNPOX1jZlpBLWkndyVoS2Q2Z3QxVUpQLDE1XyNRWSRNXk1zc19VL10mTEs5WzV2UXViXndbS0REPEVqbWhVWj8uYWtwMmRGPnFtajsyfVlXRmRZeC5BcF1oakNQVFAobjI4ayszO28mV1hxcy9nT1hkciQ6cidkbzA7YjRjKGZfR3I9Ilw0KVswMVQ3YWpRSnZMJFd+bUxfc1MvNGg6eCpbWk49S0xzJkw1elgvLz5pdCxvOmFVKDtaPnBXJlQ3b1AnMkteRTp4OSdjWyV6LSw2NEpRNUFlSF9HI0tpalVLZ2hRd15cdmVhM2E/a2thX0ckOCNgKmt5bnN4ekJMcnUnXWtfWzdGclZ4fV49JGJseD5zLU4lajtEKmFaRG5zdzpZS1olUS5LbmU5I2hQPytiMyhTT3ZMLF47JnU1QD81QzVCaGI9bS12RWhfTDE1SmxdVSkwUlA2e3ElTF5fejVFJ0R3NlgKKzgyMyAgICAgXGIKKzgyNCA4MjQgS2V0Cis4MjkgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyJcJFw8XC5YXCtpeFxbZDFiXCFIXCNcP3ZWMHZyS1w6WkgxXD0yTVw+aVZcO1w/YVBoRkJcPFwqdldcQFFXXEBzTzlcfWNmWkFcLWlcJ3dcJWhLZDZndDFVSlBcLDE1X1wjUVlcJE1cXk1zc19VXC9cXVwmTEs5XFs1dlF1Ylxed1xbS0REXDxFam1oVVpcP1wuYWtwMmRGXD5xbWpcOzJcfVlXRmRZeFwuQXBcXWhqQ1BUUFwobjI4a1wrM1w7b1wmV1hxc1wvZ09YZHJcJFw6clwnZG8wXDtiNGNcKGZfR3JcPVwiXFw0XClcWzAxVDdhalFKdkxcJFdcfm1MX3NTXC80aFw6eFwqXFtaTlw9S0xzXCZMNXpYXC9cL1w+aXRcLG9cOmFVXChcO1pcPnBXXCZUN29QXCcyS1xeRVw6eDlcJ2NcW1wlelwtXCw2NEpRNUFlSF9HXCNLaWpVS2doUXdcXlxcdmVhM2FcP2trYV9HXCQ4XCNcYFwqa3luc3h6QkxydVwnXF1rX1xbN0ZyVnhcfVxeXD1cJGJseFw+c1wtTlwlalw7RFwqYVpEbnN3XDpZS1pcJVFcLktuZTlcI2hQXD9cK2IzXChTT3ZMXCxcXlw7XCZ1NVxAXD81QzVCaGJcPW1cLXZFaF9MMTVKbFxdVVwpMFJQNlx7cVwlTFxeX3o1RVwnRHc2WFxiIgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA4MjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDgxNCBCcmEKKyAgNSAgICAgJDwuWCtpeFtkMWIhSCM/dlYwdnJLOlpIMT0yTT5pVjs/YVBoRkI8KnZXQFFXQHNPOX1jZlpBLWkndyVoS2Q2Z3QxVUpQLDE1XyNRWSRNXk1zc19VL10mTEs5WzV2UXViXndbS0REPEVqbWhVWj8uYWtwMmRGPnFtajsyfVlXRmRZeC5BcF1oakNQVFAobjI4ayszO28mV1hxcy9nT1hkciQ6cidkbzA7YjRjKGZfR3I9Ilw0KVswMVQ3YWpRSnZMJFd+bUxfc1MvNGg6eCpbWk49S0xzJkw1elgvLz5pdCxvOmFVKDtaPnBXJlQ3b1AnMkteRTp4OSdjWyV6LSw2NEpRNUFlSF9HI0tpalVLZ2hRd15cdmVhM2E/a2thX0ckOCNgKmt5bnN4ekJMcnUnXWtfWzdGclZ4fV49JGJseD5zLU4lajtEKmFaRG5zdzpZS1olUS5LbmU5I2hQPytiMyhTT3ZMLF47JnU1QD81QzVCaGI9bS12RWhfTDE1SmxdVSkwUlA2e3ElTF5fejVFJ0R3NlgKKzgxMyAgICAgXGIKKzgxNCA4MTQgS2V0Cis4MTkgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oYSg/MSliKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMzIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyNiBCcmEKKyAgNSAgMTYgQ0JyYSAxCisgMTIgICAgIGEKKyAxNCAgIDUgUmVjdXJzZQorIDE5ICAgICBiCisgMjEgIDE2IEtldAorIDI2ICAyNiBLZXQKKyAzMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyhhKD8xKStiKS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAzNiBCcmEKKyAgNSAgMjYgQ0JyYSAxCisgMTIgICAgIGEKKyAxNCAgMTAgT25jZQorIDE5ICAgNSBSZWN1cnNlCisgMjQgIDEwIEtldFJtYXgKKyAyOSAgICAgYgorIDMxICAyNiBLZXQKKyAzNiAgMzYgS2V0CisgNDEgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hKD9QPG5hbWUxPmJ8YylkKD9QPGxvbmdlcm5hbWUyPmUpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA1MAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDQ0IEJyYQorICA1ICAgICBhCisgIDcgICA5IENCcmEgMQorIDE0ICAgICBiCisgMTYgICA3IEFsdAorIDIxICAgICBjCisgMjMgIDE2IEtldAorIDI4ICAgICBkCisgMzAgICA5IENCcmEgMgorIDM3ICAgICBlCisgMzkgICA5IEtldAorIDQ0ICA0NCBLZXQKKyA0OSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/OmEoP1A8Yz5jKD9QPGQ+ZCkpKSg/UDxhPmEpLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA2NQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDU5IEJyYQorICA1ICAzNSBCcmEKKyAxMCAgICAgYQorIDEyICAyMyBDQnJhIDEKKyAxOSAgICAgYworIDIxICAgOSBDQnJhIDIKKyAyOCAgICAgZAorIDMwICAgOSBLZXQKKyAzNSAgMjMgS2V0CisgNDAgIDM1IEtldAorIDQ1ICAgOSBDQnJhIDMKKyA1MiAgICAgYQorIDU0ICAgOSBLZXQKKyA1OSAgNTkgS2V0CisgNjQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oP1A8YT5hKS4uLig/UD1hKWJiYig/UD5hKWQvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQ0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzggQnJhCisgIDUgICA5IENCcmEgMQorIDEyICAgICBhCisgMTQgICA5IEtldAorIDE5ICAgICBBbnkKKyAyMCAgICAgQW55CisgMjEgICAgIEFueQorIDIyICAgICBcMQorIDI1ICAgICBiYmIKKyAzMSAgIDUgUmVjdXJzZQorIDM2ICAgICBkCisgMzggIDM4IEtldAorIDQzICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvYWJjKD9DMjU1KWRlKD9DKWYvCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDQzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMzcgQnJhCisgIDUgICAgIGFiYworIDExICAgICBDYWxsb3V0IDI1NSAxMCAxCisgMjEgICAgIGRlCisgMjUgICAgIENhbGxvdXQgMCAxNiAxCisgMzUgICAgIGYKKyAzNyAgMzcgS2V0CisgNDIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9hYmNkZS9hdXRvX2NhbGxvdXQKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogODEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA3NSBCcmEKKyAgNSAgICAgQ2FsbG91dCAyNTUgMCAxCisgMTUgICAgIGEKKyAxNyAgICAgQ2FsbG91dCAyNTUgMSAxCisgMjcgICAgIGIKKyAyOSAgICAgQ2FsbG91dCAyNTUgMiAxCisgMzkgICAgIGMKKyA0MSAgICAgQ2FsbG91dCAyNTUgMyAxCisgNTEgICAgIGQKKyA1MyAgICAgQ2FsbG91dCAyNTUgNCAxCisgNjMgICAgIGUKKyA2NSAgICAgQ2FsbG91dCAyNTUgNSAwCisgNzUgIDc1IEtldAorIDgwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOCBCcmEKKyAgNSAgICAgXHh7MTAwfQorICA4ICAgOCBLZXQKKyAxMyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezEwMDB9L3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA5IEJyYQorICA1ICAgICBceHsxMDAwfQorICA5ICAgOSBLZXQKKyAxNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezEwMDAwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMCBCcmEKKyAgNSAgICAgXHh7MTAwMDB9CisgMTAgIDEwIEtldAorIDE1ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXHh7MTAwMDAwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxMCBCcmEKKyAgNSAgICAgXHh7MTAwMDAwfQorIDEwICAxMCBLZXQKKyAxNSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1x4ezEwZmZmZn0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE2CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTAgQnJhCisgIDUgICAgIFx4ezEwZmZmZn0KKyAxMCAgMTAgS2V0CisgMTUgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHsxMTAwMDB9L3V0ZgorRmFpbGVkOiBlcnJvciAxMzQgYXQgb2Zmc2V0IDk6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx4e30gb3IgXG97fSBpcyB0b28gbGFyZ2UKKworL1tceHtmZn1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA4IEJyYQorICA1ICAgICBceHtmZn0KKyAgOCAgIDggS2V0CisgMTMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHh7MTAwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDggQnJhCisgIDUgICAgIFx4ezEwMH0KKyAgOCAgIDggS2V0CisgMTMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceDgwL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA4IEJyYQorICA1ICAgICBceHs4MH0KKyAgOCAgIDggS2V0CisgMTMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceGZmL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA4IEJyYQorICA1ICAgICBceHtmZn0KKyAgOCAgIDggS2V0CisgMTMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9ceHswMDQxfVx4ezIyNjJ9XHh7MDM5MX1ceHswMDJlfS9JLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE2IEJyYQorICA1ICAgICBBXHh7MjI2Mn1ceHszOTF9LgorIDE2ICAxNiBLZXQKKyAyMSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorT3B0aW9uczogdXRmCitGaXJzdCBjb2RlIHVuaXQgPSAnQScKK0xhc3QgY29kZSB1bml0ID0gJy4nCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDQKKworL1x4e0Q1NWN9XHh7YWQ2ZH1ceHtDNUI0fS9JLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE3IEJyYQorICA1ICAgICBceHtkNTVjfVx4e2FkNmR9XHh7YzViNH0KKyAxNyAgMTcgS2V0CisgMjIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhlZAorTGFzdCBjb2RlIHVuaXQgPSBceGI0CitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL1x4ezY1ZTV9XHh7NjcyY31ceHs4YTllfS9JLHV0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE3IEJyYQorICA1ICAgICBceHs2NWU1fVx4ezY3MmN9XHh7OGE5ZX0KKyAxNyAgMTcgS2V0CisgMjIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK09wdGlvbnM6IHV0ZgorRmlyc3QgY29kZSB1bml0ID0gXHhlNgorTGFzdCBjb2RlIHVuaXQgPSBceDllCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworL1tceHsxMDB9XS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgOCBCcmEKKyAgNSAgICAgXHh7MTAwfQorICA4ICAgOCBLZXQKKyAxMyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1taXHh7MTAwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDUzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNDcgQnJhCisgIDUgICAgIFtaXHh7MTAwfV0KKyA0NyAgNDcgS2V0CisgNTIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1x4ezEwMH1cRS1cUVxFXHh7MTUwfV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTggQnJhCisgIDUgICAgIF4KKyAgNiAgICAgW1x4ezEwMH0tXHh7MTUwfV0KKyAxOCAgMTggS2V0CisgMjMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9eW1xRxIBcRS1cUcWQXEVdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE4IEJyYQorICA1ICAgICBeCisgIDYgICAgIFtceHsxMDB9LVx4ezE1MH1dCisgMTggIDE4IEtldAorIDIzICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXltcUcSAXEUtXFHFkFxFL3V0ZgorRmFpbGVkOiBlcnJvciAxMDYgYXQgb2Zmc2V0IDE1OiBtaXNzaW5nIHRlcm1pbmF0aW5nIF0gZm9yIGNoYXJhY3RlciBjbGFzcworCisvW1xwe0x9XS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNSBCcmEKKyAgNSAgICAgW1xwe0x9XQorIDE1ICAxNSBLZXQKKyAyMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tccHteTH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE1IEJyYQorICA1ICAgICBbXFB7TH1dCisgMTUgIDE1IEtldAorIDIwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1xQe0x9XS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNSBCcmEKKyAgNSAgICAgW1xQe0x9XQorIDE1ICAxNSBLZXQKKyAyMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tcUHteTH1dLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE1IEJyYQorICA1ICAgICBbXHB7TH1dCisgMTUgIDE1IEtldAorIDIwICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW2FiY1xwe0x9XHh7MDY2MH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA1NgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDUwIEJyYQorICA1ICAgICBbYS1jXHB7TH1ceHs2NjB9XQorIDUwICA1MCBLZXQKKyA1NSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tccHtOZH1dL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAyMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE1IEJyYQorICA1ICAgICBbXHB7TmR9XQorIDE1ICAxNSBLZXQKKyAyMCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tccHtOZH0rLV0rL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA1NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDQ4IEJyYQorICA1ICAgICBbK1wtXHB7TmR9XSsrCisgNDggIDQ4IEtldAorIDUzICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9L2ksdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDI5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMjMgQnJhCisgIDUgIC9pIEFceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfQorIDIzICAyMyBLZXQKKyAyOCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL0FceHszOTF9XHh7MTA0Mjd9XHh7ZmYzYX1ceHsxZmIwfS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAyMyBCcmEKKyAgNSAgICAgQVx4ezM5MX1ceHsxMDQyN31ceHtmZjNhfVx4ezFmYjB9CisgMjMgIDIzIEtldAorIDI4ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1x4ezEwNX0tXHh7MTA5fV0vaSx1dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNyBCcmEKKyAgNSAgICAgW1x4ezEwNH0tXHh7MTA5fV0KKyAxNyAgMTcgS2V0CisgMjIgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8oICggKD8oMSkwfCkgKSogICApL3gKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogNTYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA1MCBCcmEKKyAgNSAgNDAgQ0JyYSAxCisgMTIgICAgIEJyYXplcm8KKyAxMyAgMjcgU0NCcmEgMgorIDIwICAxMCBDb25kCisgMjUgICAxIENvbmQgcmVmCisgMjggICAgIDAKKyAzMCAgIDUgQWx0CisgMzUgIDE1IEtldAorIDQwICAyNyBLZXRSbWF4CisgNDUgIDQwIEtldAorIDUwICA1MCBLZXQKKyA1NSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyggICg/KDEpMHwpKiAgICkveAorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiA0NAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDM4IEJyYQorICA1ICAyOCBDQnJhIDEKKyAxMiAgICAgQnJhemVybworIDEzICAxMCBTQ29uZAorIDE4ICAgMSBDb25kIHJlZgorIDIxICAgICAwCisgMjMgICA1IEFsdAorIDI4ICAxNSBLZXRSbWF4CisgMzMgIDI4IEtldAorIDM4ICAzOCBLZXQKKyA0MyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1thXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNyBCcmEKKyAgNSAgICAgYQorICA3ICAgNyBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1thXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNyBCcmEKKyAgNSAgICAgYQorICA3ICAgNyBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tceGFhXS8KK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNyBCcmEKKyAgNSAgICAgXHh7YWF9CisgIDcgICA3IEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1x4YWFdL3V0ZgorTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxNAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA4IEJyYQorICA1ICAgICBceHthYX0KKyAgOCAgIDggS2V0CisgMTMgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXmFdLworTWVtb3J5IGFsbG9jYXRpb24gKGNvZGUgc3BhY2UpOiAxMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgICA3IEJyYQorICA1ICAgICBbXmFdCisgIDcgICA3IEtldAorIDEyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW15hXS91dGYKK01lbW9yeSBhbGxvY2F0aW9uIChjb2RlIHNwYWNlKTogMTMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAgNyBCcmEKKyAgNSAgICAgW15hXQorICA3ICAgNyBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHhhYV0vCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDEzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDcgQnJhCisgIDUgICAgIFteXHh7YWF9XQorICA3ICAgNyBLZXQKKyAxMiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXHhhYV0vdXRmCitNZW1vcnkgYWxsb2NhdGlvbiAoY29kZSBzcGFjZSk6IDE0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgIDggQnJhCisgIDUgICAgIFteXHh7YWF9XQorICA4ICAgOCBLZXQKKyAxMyAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI3BhdHRlcm4gLW1lbW9yeQorCisvW15cZF0vdXRmLHVjcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDE1IEJyYQorICA1ICAgICBbXlxwe05kfV0KKyAxNSAgMTUgS2V0CisgMjAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bWzpeYWxwaGE6XVs6XmNudHJsOl1dKy91dGYsdWNwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgMTkgQnJhCisgIDUgICAgIFtcUHtMfVxQe0NjfV0rKworIDE5ICAxOSBLZXQKKyAyNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tbOl5jbnRybDpdWzpeYWxwaGE6XV0rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxOSBCcmEKKyAgNSAgICAgW1xQe0NjfVxQe0x9XSsrCisgMTkgIDE5IEtldAorIDI0ICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6YWxwaGE6XV0rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxNiBCcmEKKyAgNSAgICAgW1xwe0x9XSsrCisgMTYgIDE2IEtldAorIDIxICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvW1s6XmFscGhhOl1cU10rL3V0Zix1Y3AKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICAxOSBCcmEKKyAgNSAgICAgW1xQe0x9XFB7WHNwfV0rKworIDE5ICAxOSBLZXQKKyAyNCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL2FiYyhkfGUpKCpUSEVOKXgoMTIzKCpUSEVOKTR8NTY3KGJ8cSkoKlRIRU4peHgpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDkzIEJyYQorICA1ICAgICBhYmMKKyAxMSAgIDkgQ0JyYSAxCisgMTggICAgIGQKKyAyMCAgIDcgQWx0CisgMjUgICAgIGUKKyAyNyAgMTYgS2V0CisgMzIgICAgICpUSEVOCisgMzMgICAgIHgKKyAzNSAgMTYgQ0JyYSAyCisgNDIgICAgIDEyMworIDQ4ICAgICAqVEhFTgorIDQ5ICAgICA0CisgNTEgIDM3IEFsdAorIDU2ICAgICA1NjcKKyA2MiAgIDkgQ0JyYSAzCisgNjkgICAgIGIKKyA3MSAgIDcgQWx0CisgNzYgICAgIHEKKyA3OCAgMTYgS2V0CisgODMgICAgICpUSEVOCisgODQgICAgIHh4CisgODggIDUzIEtldAorIDkzICA5MyBLZXQKKyA5OCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLygoKGFcMil8KGEqKVxnPC0xPikpKmE/LworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDgzIEJyYQorICA1ICAgICBCcmF6ZXJvCisgIDYgIDcwIFNDQnJhIDEKKyAxMyAgNTggT25jZQorIDE4ICAyNCBDQnJhIDIKKyAyNSAgMTIgQ0JyYSAzCisgMzIgICAgIGEKKyAzNCAgICAgXDIKKyAzNyAgMTIgS2V0CisgNDIgIDI0IEFsdAorIDQ3ICAgOSBDQnJhIDQKKyA1NCAgICAgYSoKKyA1NiAgIDkgS2V0CisgNjEgIDQ3IFJlY3Vyc2UKKyA2NiAgNDggS2V0CisgNzEgIDU4IEtldAorIDc2ICA3MCBLZXRSbWF4CisgODEgICAgIGE/KworIDgzICA4MyBLZXQKKyA4OCAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLygoPysxKShcMSkpLworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgIDQ3IEJyYQorICA1ICAzNyBPbmNlCisgMTAgIDI3IENCcmEgMQorIDE3ICAyMiBSZWN1cnNlCisgMjIgIDEwIENCcmEgMgorIDI5ICAgICBcMQorIDMyICAxMCBLZXQKKyAzNyAgMjcgS2V0CisgNDIgIDM3IEtldAorIDQ3ICA0NyBLZXQKKyA1MiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIig/MSkoPyM/Jyl7Mn0oYSkiCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNDkgQnJhCisgIDUgIDEwIE9uY2UKKyAxMCAgMzUgUmVjdXJzZQorIDE1ICAxMCBLZXQKKyAyMCAgMTAgT25jZQorIDI1ICAzNSBSZWN1cnNlCisgMzAgIDEwIEtldAorIDM1ICAgOSBDQnJhIDEKKyA0MiAgICAgYQorIDQ0ICAgOSBLZXQKKyA0OSAgNDkgS2V0CisgNTQgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8uKCg/MikoP1IpfFwxfCQpKCkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAgNjQgQnJhCisgIDUgICAgIEFueQorICA2ICA0MSBPbmNlCisgMTEgIDE3IENCcmEgMQorIDE4ICA1MiBSZWN1cnNlCisgMjMgICAwIFJlY3Vyc2UKKyAyOCAgIDggQWx0CisgMzMgICAgIFwxCisgMzYgICA2IEFsdAorIDQxICAgICAkCisgNDIgIDMxIEtldAorIDQ3ICA0MSBLZXQKKyA1MiAgIDcgQ0JyYSAyCisgNTkgICA3IEtldAorIDY0ICA2NCBLZXQKKyA2OSAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy4oKD8zKSg/UikoKSg/Mil8XDF8JCkoKS8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA4MSBCcmEKKyAgNSAgICAgQW55CisgIDYgIDU4IE9uY2UKKyAxMSAgMzQgQ0JyYSAxCisgMTggIDY5IFJlY3Vyc2UKKyAyMyAgIDAgUmVjdXJzZQorIDI4ICAgNyBDQnJhIDIKKyAzNSAgIDcgS2V0CisgNDAgIDI4IFJlY3Vyc2UKKyA0NSAgIDggQWx0CisgNTAgICAgIFwxCisgNTMgICA2IEFsdAorIDU4ICAgICAkCisgNTkgIDQ4IEtldAorIDY0ICA1OCBLZXQKKyA2OSAgIDcgQ0JyYSAzCisgNzYgICA3IEtldAorIDgxICA4MSBLZXQKKyA4NiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyg/MSkoKSgoKCgoKFwxKyspKVx4ODUpKyl8KSkvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMCAxMTUgQnJhCisgIDUgIDEwIFJlY3Vyc2UKKyAxMCAgIDcgQ0JyYSAxCisgMTcgICA3IEtldAorIDIyICA4OCBDQnJhIDIKKyAyOSAgNzEgQ0JyYSAzCisgMzYgIDU5IENCcmEgNAorIDQzICA0NyBDQnJhIDUKKyA1MCAgMzMgQ0JyYSA2CisgNTcgIDIxIENCcmEgNworIDY0ICAgOSBPbmNlCisgNjkgICAgIFwxKworIDczICAgOSBLZXQKKyA3OCAgMjEgS2V0CisgODMgIDMzIEtldAorIDg4ICAgICBceHs4NX0KKyA5MCAgNDcgS2V0Um1heAorIDk1ICA1OSBLZXQKKzEwMCAgIDUgQWx0CisxMDUgIDc2IEtldAorMTEwICA4OCBLZXQKKzExNSAxMTUgS2V0CisxMjAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgQ2hlY2sgdGhlIGFic29sdXRlIGxpbWl0IG9uIG5lc3RpbmcgKD98IGV0Yy4gVGhpcyB2YXJpZXMgd2l0aCBjb2RlIHVuaXQKKyMgd2lkdGggYmVjYXVzZSB0aGUgd29ya3NwYWNlIGlzIGEgZGlmZmVyZW50IG51bWJlciBvZiBieXRlcy4gSXQgd2lsbCBmYWlsCisjIHdpdGggbGluayBzaXplIDIgaW4gOC1iaXQgYW5kIDE2LWJpdCBidXQgbm90IGluIDMyLWJpdC4KKworLyg/fCg/fCg/SjooP3woP3g6KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98KD98CispKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkKKy9wYXJlbnNfbmVzdF9saW1pdD0xMDAwLC1mdWxsYmluY29kZQorCisjIFVzZSAiZXhwYW5kIiB0byBjcmVhdGUgc29tZSB2ZXJ5IGxvbmcgcGF0dGVybnMgd2l0aCBuZXN0ZWQgcGFyZW50aGVzZXMsIGluCisjIG9yZGVyIHRvIHRlc3Qgd29ya3NwYWNlIG92ZXJmbG93LiBBZ2FpbiwgdGhpcyB2YXJpZXMgd2l0aCBjb2RlIHVuaXQgd2lkdGgsCisjIGFuZCBldmVuIHdpdGggaXQgZmFpbHMgaW4gdHdvIG1vZGVzLCB0aGUgZXJyb3Igb2Zmc2V0IGRpZmZlcnMuIEl0IGFsc28gdmFyaWVzCisjIHdpdGggbGluayBzaXplIC0gaGVuY2UgbXVsdGlwbGUgdGVzdHMgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxMDV9KlRIRU46XFtBXXsyNTV9XFspXXsxMDZ9L2V4cGFuZCwtZnVsbGJpbmNvZGUKKworLyg/J0FCQydcW1tiYXJdKF17MTA2fSpUSEVOOlxbQV17MjU1fVxbKV17MTA3fS9leHBhbmQsLWZ1bGxiaW5jb2RlCisKKy8oPydBQkMnXFtbYmFyXShdezE1OX0qVEhFTjpcW0FdezI1NX1cWyldezE2MH0vZXhwYW5kLC1mdWxsYmluY29kZQorCisvKD8nQUJDJ1xbW2Jhcl0oXXsxOTl9KlRIRU46XFtBXXsyNTV9XFspXXsyMDB9L2V4cGFuZCwtZnVsbGJpbmNvZGUKKworLyg/J0FCQydcW1tiYXJdKF17Mjk5fSpUSEVOOlxbQV17MjU1fVxbKV17MzAwfS9leHBhbmQsLWZ1bGxiaW5jb2RlCitGYWlsZWQ6IGVycm9yIDE4NiBhdCBvZmZzZXQgMTIyNDogcmVndWxhciBleHByZXNzaW9uIGlzIHRvbyBjb21wbGljYXRlZAorCisvKD8oMSkoPzEpKXs4LH0rKCkvZGVidWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwIDE4MSBCcmEKKyAgNSAxNTkgT25jZQorIDEwICAxMyBDb25kCisgMTUgICAxIENvbmQgcmVmCisgMTggMTY5IFJlY3Vyc2UKKyAyMyAgMTMgS2V0CisgMjggIDEzIENvbmQKKyAzMyAgIDEgQ29uZCByZWYKKyAzNiAxNjkgUmVjdXJzZQorIDQxICAxMyBLZXQKKyA0NiAgMTMgQ29uZAorIDUxICAgMSBDb25kIHJlZgorIDU0IDE2OSBSZWN1cnNlCisgNTkgIDEzIEtldAorIDY0ICAxMyBDb25kCisgNjkgICAxIENvbmQgcmVmCisgNzIgMTY5IFJlY3Vyc2UKKyA3NyAgMTMgS2V0CisgODIgIDEzIENvbmQKKyA4NyAgIDEgQ29uZCByZWYKKyA5MCAxNjkgUmVjdXJzZQorIDk1ICAxMyBLZXQKKzEwMCAgMTMgQ29uZAorMTA1ICAgMSBDb25kIHJlZgorMTA4IDE2OSBSZWN1cnNlCisxMTMgIDEzIEtldAorMTE4ICAxMyBDb25kCisxMjMgICAxIENvbmQgcmVmCisxMjYgMTY5IFJlY3Vyc2UKKzEzMSAgMTMgS2V0CisxMzYgIDIzIFNCcmFQb3MKKzE0MSAgMTMgU0NvbmQKKzE0NiAgIDEgQ29uZCByZWYKKzE0OSAxNjkgUmVjdXJzZQorMTU0ICAxMyBLZXQKKzE1OSAgMjMgS2V0UnBvcworMTY0IDE1OSBLZXQKKzE2OSAgIDcgQ0JyYSAxCisxNzYgICA3IEtldAorMTgxIDE4MSBLZXQKKzE4NiAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMQorTWF4IGJhY2sgcmVmZXJlbmNlID0gMQorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisgICAgYWJjZAorIDA6IAorIDE6IAorCisvKD8oMSl8YSg/MSliKXsyLH0rKCkvZGVidWcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwICA5MSBCcmEKKyAgNSAgNjkgT25jZQorIDEwICAgOCBDb25kCisgMTUgICAxIENvbmQgcmVmCisgMTggIDE0IEFsdAorIDIzICAgICBhCisgMjUgIDc5IFJlY3Vyc2UKKyAzMCAgICAgYgorIDMyICAyMiBLZXQKKyAzNyAgMzIgU0JyYVBvcworIDQyICAgOCBTQ29uZAorIDQ3ICAgMSBDb25kIHJlZgorIDUwICAxNCBBbHQKKyA1NSAgICAgYQorIDU3ICA3OSBSZWN1cnNlCisgNjIgICAgIGIKKyA2NCAgMjIgS2V0CisgNjkgIDMyIEtldFJwb3MKKyA3NCAgNjkgS2V0CisgNzkgICA3IENCcmEgMQorIDg2ICAgNyBLZXQKKyA5MSAgOTEgS2V0CisgOTYgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDEKK01heCBiYWNrIHJlZmVyZW5jZSA9IDEKK01heSBtYXRjaCBlbXB0eSBzdHJpbmcKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMAorICAgIGFiY2RlCitObyBtYXRjaAorCisvKCg/MSkoPzIpKD8zKSg/NCkoPzUpKD82KSg/NykoPzgpKD85KSg/OSkoPzgpKD83KSg/NikoPzUpKD80KSg/MykoPzIpKD8xKSg/MCkpezIsfSgpKCkoKSgpKCkoKSgpKCkoKS9kZWJ1ZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDAgMzI3IEJyYQorICA1IDEwMiBDQnJhIDEKKyAxMiAgIDUgUmVjdXJzZQorIDE3IDIxOSBSZWN1cnNlCisgMjIgMjMxIFJlY3Vyc2UKKyAyNyAyNDMgUmVjdXJzZQorIDMyIDI1NSBSZWN1cnNlCisgMzcgMjY3IFJlY3Vyc2UKKyA0MiAyNzkgUmVjdXJzZQorIDQ3IDI5MSBSZWN1cnNlCisgNTIgMzAzIFJlY3Vyc2UKKyA1NyAzMDMgUmVjdXJzZQorIDYyIDI5MSBSZWN1cnNlCisgNjcgMjc5IFJlY3Vyc2UKKyA3MiAyNjcgUmVjdXJzZQorIDc3IDI1NSBSZWN1cnNlCisgODIgMjQzIFJlY3Vyc2UKKyA4NyAyMzEgUmVjdXJzZQorIDkyIDIxOSBSZWN1cnNlCisgOTcgICA1IFJlY3Vyc2UKKzEwMiAgIDAgUmVjdXJzZQorMTA3IDEwMiBLZXQKKzExMiAxMDIgU0NCcmEgMQorMTE5ICAgNSBSZWN1cnNlCisxMjQgMjE5IFJlY3Vyc2UKKzEyOSAyMzEgUmVjdXJzZQorMTM0IDI0MyBSZWN1cnNlCisxMzkgMjU1IFJlY3Vyc2UKKzE0NCAyNjcgUmVjdXJzZQorMTQ5IDI3OSBSZWN1cnNlCisxNTQgMjkxIFJlY3Vyc2UKKzE1OSAzMDMgUmVjdXJzZQorMTY0IDMwMyBSZWN1cnNlCisxNjkgMjkxIFJlY3Vyc2UKKzE3NCAyNzkgUmVjdXJzZQorMTc5IDI2NyBSZWN1cnNlCisxODQgMjU1IFJlY3Vyc2UKKzE4OSAyNDMgUmVjdXJzZQorMTk0IDIzMSBSZWN1cnNlCisxOTkgMjE5IFJlY3Vyc2UKKzIwNCAgIDUgUmVjdXJzZQorMjA5ICAgMCBSZWN1cnNlCisyMTQgMTAyIEtldFJtYXgKKzIxOSAgIDcgQ0JyYSAyCisyMjYgICA3IEtldAorMjMxICAgNyBDQnJhIDMKKzIzOCAgIDcgS2V0CisyNDMgICA3IENCcmEgNAorMjUwICAgNyBLZXQKKzI1NSAgIDcgQ0JyYSA1CisyNjIgICA3IEtldAorMjY3ICAgNyBDQnJhIDYKKzI3NCAgIDcgS2V0CisyNzkgICA3IENCcmEgNworMjg2ICAgNyBLZXQKKzI5MSAgIDcgQ0JyYSA4CisyOTggICA3IEtldAorMzAzICAgNyBDQnJhIDkKKzMxMCAgIDcgS2V0CiszMTUgICA3IENCcmEgMTAKKzMyMiAgIDcgS2V0CiszMjcgMzI3IEtldAorMzMyICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAxMAorTWF5IG1hdGNoIGVtcHR5IHN0cmluZworU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAwCisKKyMgRW5kIG9mIHRlc3RpbnB1dDgKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ5IGIvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dDkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwYTdlMAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXQ5CkBAIC0wLDAgKzEsMzY3IEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGlzIHJ1biBvbmx5IHdpdGggdGhlIDgtYml0IGxpYnJhcnkuIFRoZXkgbXVzdCBub3QgcmVxdWlyZSAKKyMgVVRGLTggb3IgVW5pY29kZSBwcm9wZXJ0eSBzdXBwb3J0LiAqLworICAgIAorI2ZvcmJpZF91dGYKKyNuZXdsaW5lX2RlZmF1bHQgbGYgYW55IGFueWNybGYKKworL2FiLworXD0gRXhwZWN0IGVycm9yIG1lc3NhZ2UgKHRvbyBiaWcgY2hhcikgYW5kIG5vIG1hdGNoCisgICAgQVx4ezEyM31CCisqKiBDaGFyYWN0ZXIgXHh7MTIzfSBpcyBncmVhdGVyIHRoYW4gMjU1IGFuZCBVVEYtOCBtb2RlIGlzIG5vdCBlbmFibGVkLgorKiogVHJ1bmNhdGlvbiB3aWxsIHByb2JhYmx5IGdpdmUgdGhlIHdyb25nIHJlc3VsdC4KK05vIG1hdGNoCisgICAgQVxvezQ0M31CCisqKiBDaGFyYWN0ZXIgXHh7MTIzfSBpcyBncmVhdGVyIHRoYW4gMjU1IGFuZCBVVEYtOCBtb2RlIGlzIG5vdCBlbmFibGVkLgorKiogVHJ1bmNhdGlvbiB3aWxsIHByb2JhYmx5IGdpdmUgdGhlIHdyb25nIHJlc3VsdC4KK05vIG1hdGNoCisgIAorL1x4ezEwMH0vSQorRmFpbGVkOiBlcnJvciAxMzQgYXQgb2Zmc2V0IDY6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx4e30gb3IgXG97fSBpcyB0b28gbGFyZ2UKKworL1xvezQwMH0vSQorRmFpbGVkOiBlcnJvciAxMzQgYXQgb2Zmc2V0IDY6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx4e30gb3IgXG97fSBpcyB0b28gbGFyZ2UKKworLyAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIGxlYWRpbmcgY29tbWVudAorKD86ICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKykgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCB3b3JkCisoPzogICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKykgICkqICMgZnVydGhlciBva2F5LCBpZiBsZWQgYnkgYSBwZXJpb2QKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKyMgYWRkcmVzcworfCAgICAgICAgICAgICAgICAgICAgICMgIG9yCisoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8CisiICg/OiAgICAgICAgICAgICAgICAgICAgICAjIG9wZW5pbmcgcXVvdGUuLi4KK1teXFxceDgwLVx4ZmZcblwwMTUiXSAgICAgICAgICAgICAgICAjICAgQW55dGhpbmcgZXhjZXB0IGJhY2tzbGFzaCBhbmQgcXVvdGUKK3wgICAgICAgICAgICAgICAgICAgICAjICAgIG9yCitcXCBbXlx4ODAtXHhmZl0gICAgICAgICAgICMgICBFc2NhcGVkIHNvbWV0aGluZyAoc29tZXRoaW5nICE9IENSKQorKSogIiAgIyBjbG9zaW5nIHF1b3RlCispICAgICAgICAgICAgICMgb25lIHdvcmQsIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkuLi4uCisoPzoKK1teKCk8PkAsOzoiLlxcXFtcXVx4ODAtXHhmZlwwMDAtXDAxMFwwMTItXDAzN10gIHwgICMgYXRvbSBhbmQgc3BhY2UgcGFydHMsIG9yLi4uCitcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICAgICAgIHwgICMgY29tbWVudHMsIG9yLi4uCisKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKyMgcXVvdGVkIHN0cmluZ3MKKykqCis8ICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgICAgICAgICAgICAgICAgICAjIGxlYWRpbmcgPAorKD86ICBAICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCBzdWJkb21haW4KKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBsZWQgYnkgYSBwZXJpb2QuLi4KKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAjICAgLi4uZnVydGhlciBva2F5CispKgorCisoPzogICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgLCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBAICAoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAgKD86CitbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSsgICAgIyBzb21lIG51bWJlciBvZiBhdG9tIGNoYXJhY3RlcnMuLi4KKyg/IVteKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKSAjIC4ubm90IGZvbGxvd2VkIGJ5IHNvbWV0aGluZyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYW4gYXRvbQorfCAgIFxbICAgICAgICAgICAgICAgICAgICAgICAgICMgWworKD86IFteXFxceDgwLVx4ZmZcblwwMTVcW1xdXSB8ICBcXCBbXlx4ODAtXHhmZl0gICkqICAgICMgICAgc3R1ZmYKK1xdICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgXQorKSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCBzdWJkb21haW4KKyg/OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogIFwuICAgICAgICAgICAgICAgICAgICAgICAgIyBpZiBsZWQgYnkgYSBwZXJpb2QuLi4KKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAjICAgLi4uZnVydGhlciBva2F5CispKgorKSogIyBmdXJ0aGVyIG9rYXksIGlmIGxlZCBieSBjb21tYQorOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjbG9zaW5nIGNvbG9uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICk/ICMgICAgICAgb3B0aW9uYWwgcm91dGUKKyg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKykgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbCB3b3JkCisoPzogICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgXC4gICg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wKKyIgKD86ICAgICAgICAgICAgICAgICAgICAgICMgb3BlbmluZyBxdW90ZS4uLgorW15cXFx4ODAtXHhmZlxuXDAxNSJdICAgICAgICAgICAgICAgICMgICBBbnl0aGluZyBleGNlcHQgYmFja3NsYXNoIGFuZCBxdW90ZQorfCAgICAgICAgICAgICAgICAgICAgICMgICAgb3IKK1xcIFteXHg4MC1ceGZmXSAgICAgICAgICAgIyAgIEVzY2FwZWQgc29tZXRoaW5nIChzb21ldGhpbmcgIT0gQ1IpCispKiAiICAjIGNsb3NpbmcgcXVvdGUKKykgICkqICMgZnVydGhlciBva2F5LCBpZiBsZWQgYnkgYSBwZXJpb2QKKyg/OiBbXDA0MFx0XSB8ICBcKAorKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gIHwgIFwoICg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICApKiBcKSAgKSoKK1wpICApKiAgQCAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICg/OgorW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0rICAgICMgc29tZSBudW1iZXIgb2YgYXRvbSBjaGFyYWN0ZXJzLi4uCisoPyFbXihcMDQwKTw+QCw7OiIuXFxcW1xdXDAwMC1cMDM3XHg4MC1ceGZmXSkgIyAuLm5vdCBmb2xsb3dlZCBieSBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGFuIGF0b20KK3wgICBcWyAgICAgICAgICAgICAgICAgICAgICAgICAjIFsKKyg/OiBbXlxcXHg4MC1ceGZmXG5cMDE1XFtcXV0gfCAgXFwgW15ceDgwLVx4ZmZdICApKiAgICAjICAgIHN0dWZmCitcXSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgICAgIF0KKykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGluaXRpYWwgc3ViZG9tYWluCisoPzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIworKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICBcLiAgICAgICAgICAgICAgICAgICAgICAgICMgaWYgbGVkIGJ5IGEgcGVyaW9kLi4uCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogICAoPzoKK1teKFwwNDApPD5ALDs6Ii5cXFxbXF1cMDAwLVwwMzdceDgwLVx4ZmZdKyAgICAjIHNvbWUgbnVtYmVyIG9mIGF0b20gY2hhcmFjdGVycy4uLgorKD8hW14oXDA0MCk8PkAsOzoiLlxcXFtcXVwwMDAtXDAzN1x4ODAtXHhmZl0pICMgLi5ub3QgZm9sbG93ZWQgYnkgc29tZXRoaW5nIHRoYXQgY291bGQgYmUgcGFydCBvZiBhbiBhdG9tCit8ICAgXFsgICAgICAgICAgICAgICAgICAgICAgICAgIyBbCisoPzogW15cXFx4ODAtXHhmZlxuXDAxNVxbXF1dIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogICAgIyAgICBzdHVmZgorXF0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgICBdCispICAgICAgICAgICAgICAgICAgICAgIyAgIC4uLmZ1cnRoZXIgb2theQorKSoKKyMgICAgICAgYWRkcmVzcyBzcGVjCisoPzogW1wwNDBcdF0gfCAgXCgKKyg/OiAgW15cXFx4ODAtXHhmZlxuXDAxNSgpXSAgfCAgXFwgW15ceDgwLVx4ZmZdICB8ICBcKCAoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgKSogXCkgICkqCitcKSAgKSogID4gIyAgICAgICAgICAgICAgICAgIHRyYWlsaW5nID4KKyMgbmFtZSBhbmQgYWRkcmVzcworKSAgKD86IFtcMDQwXHRdIHwgIFwoCisoPzogIFteXFxceDgwLVx4ZmZcblwwMTUoKV0gIHwgIFxcIFteXHg4MC1ceGZmXSAgfCAgXCggKD86ICBbXlxcXHg4MC1ceGZmXG5cMDE1KCldICB8ICBcXCBbXlx4ODAtXHhmZl0gICkqIFwpICApKgorXCkgICkqICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIHRyYWlsaW5nIGNvbW1lbnQKKy9JeAorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitDb250YWlucyBleHBsaWNpdCBDUiBvciBMRiBtYXRjaAorT3B0aW9uczogZXh0ZW5kZWQKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDkgXHgyMCAhICIgIyAkICUgJiAnICggKiArIC0gLyAwIDEgMiAzIDQgNSA2IDcgOCAKKyAgOSA9ID8gQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggWSBaIF4gXyBgIGEgYiBjIGQgZSAKKyAgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogeyB8IH0gfiBceDdmIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAzCisKKy9caC9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MDkgXHgyMCBceGEwIAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9cSC9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHYvSQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBceDBhIFx4MGIgXHgwYyBceDBkIFx4ODUgCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDEKKworL1xWL0kKK0NhcHR1cmluZyBzdWJwYXR0ZXJuIGNvdW50ID0gMAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKy9cUi9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IFx4MGEgXHgwYiBceDBjIFx4MGQgXHg4NSAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvW1xoXS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtceDA5IFx4YTBdCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgID5ceDA5PAorIDA6IFx4MDkKKworL1tcaF0rL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4MDkgXHhhMF0rKworICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICA+XHgwOVx4MjBceGEwPAorIDA6IFx4MDkgXHhhMAorCisvW1x2XS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtceDBhLVx4MGRceDg1XQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1tcSF0vQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwMC1ceDA4XHgwYS1ceDFmIS1ceDlmXHhhMS1ceGZmXQorICAgICAgICBLZXQKKyAgICAgICAgRW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworL1teXGhdL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4MDAtXHgwOFx4MGEtXHgxZiEtXHg5Zlx4YTEtXHhmZl0gKG5lZykKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXFZdL0IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW1x4MDAtXHgwOVx4MGUtXHg4NFx4ODYtXHhmZl0KKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXHgwYVxWXS9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtceDAwLVx4MGFceDBlLVx4ODRceDg2LVx4ZmZdCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvXDc3Ny9JCitGYWlsZWQ6IGVycm9yIDE1MSBhdCBvZmZzZXQgMzogb2N0YWwgdmFsdWUgaXMgZ3JlYXRlciB0aGFuIFwzNzcgaW4gOC1iaXQgbm9uLVVURi04IG1vZGUKKworLygqOjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYpWFgvbWFyaworRmFpbGVkOiBlcnJvciAxNzYgYXQgb2Zmc2V0IDI1OTogbmFtZSBpcyB0b28gbG9uZyBpbiAoKk1BUkspLCAoKlBSVU5FKSwgKCpTS0lQKSwgb3IgKCpUSEVOKQorICAgIFhYCisgICAgIAorLygqOjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYpWFgvbWFyayxhbHRfdmVyYm5hbWVzCitGYWlsZWQ6IGVycm9yIDE3NiBhdCBvZmZzZXQgMjU4OiBuYW1lIGlzIHRvbyBsb25nIGluICgqTUFSSyksICgqUFJVTkUpLCAoKlNLSVApLCBvciAoKlRIRU4pCisgICAgWFgKKyAgICAgCisvKCo6MDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFKVhYL21hcmsKKyAgICBYWAorIDA6IFhYCitNSzogMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFCisKKy8oKjowMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREUpWFgvbWFyayxhbHRfdmVyYm5hbWVzCisgICAgWFgKKyAwOiBYWAorTUs6IDAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERUYwMTIzNDU2Nzg5QUJDREVGMDEyMzQ1Njc4OUFCQ0RFRjAxMjM0NTY3ODlBQkNERQorCisvXHUwMTAwL2FsdF9ic3V4LGFsbG93X2VtcHR5X2NsYXNzLG1hdGNoX3Vuc2V0X2JhY2tyZWYsZHVwbmFtZXMKK0ZhaWxlZDogZXJyb3IgMTc3IGF0IG9mZnNldCA1OiBjaGFyYWN0ZXIgY29kZSBwb2ludCB2YWx1ZSBpbiBcdS4uLi4gc2VxdWVuY2UgaXMgdG9vIGxhcmdlCisKKy9bXHUwMTAwLVx1MDIwMF0vYWx0X2JzdXgsYWxsb3dfZW1wdHlfY2xhc3MsbWF0Y2hfdW5zZXRfYmFja3JlZixkdXBuYW1lcworRmFpbGVkOiBlcnJvciAxNzcgYXQgb2Zmc2V0IDY6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx1Li4uLiBzZXF1ZW5jZSBpcyB0b28gbGFyZ2UKKworL1teXHgwMC1hXXsxMix9W15iLVx4ZmZdKi9CCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQnJhCisgICAgICAgIFtiLVx4ZmZdIChuZWcpezEyLH0rCisgICAgICAgIFtceDAwLWFdIChuZWcpKisKKyAgICAgICAgS2V0CisgICAgICAgIEVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy9bXlxzXSpccyogW15cV10rXFcrIFteXGRdKj9cZDAgW15cZFx3XXs0LDZ9P1x3KkEvQgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIEJyYQorICAgICAgICBbXHgwMC1ceDA4XHgwZS1ceDFmIS1ceGZmXSAobmVnKSorCisgICAgICAgIFxzKgorICAgICAgICAgCisgICAgICAgIFswLTlBLVpfYS16XSsrCisgICAgICAgIFxXKworICAgICAgICAgCisgICAgICAgIFtceDAwLS86LVx4ZmZdIChuZWcpKisKKyAgICAgICAgXGQKKyAgICAgICAgMCAKKyAgICAgICAgW1x4MDAtLzotQFstXmB7LVx4ZmZdIChuZWcpezQsNn0rCisgICAgICAgIFx3KgorICAgICAgICBBCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvKCpNQVJLOmFceHsxMDB9Yil6L2FsdF92ZXJibmFtZXMgCitGYWlsZWQ6IGVycm9yIDEzNCBhdCBvZmZzZXQgMTQ6IGNoYXJhY3RlciBjb2RlIHBvaW50IHZhbHVlIGluIFx4e30gb3IgXG97fSBpcyB0b28gbGFyZ2UKKworIyBFbmQgb2YgdGVzdGlucHV0OQpkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdGVzdG91dHB1dEVCQyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXRFQkMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDNlMTc5YQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3Rlc3RvdXRwdXRFQkMKQEAgLTAsMCArMSwyMDUgQEAKKyMgVGhpcyBpcyBhIHNwZWNpYWxpemVkIHRlc3QgZm9yIGNoZWNraW5nLCB3aGVuIFBDUkUyIGlzIGNvbXBpbGVkIHdpdGggdGhlCisjIEVCQ0RJQyBvcHRpb24gYnV0IGluIGFuIEFTQ0lJIGVudmlyb25tZW50LCB0aGF0IG5ld2xpbmUsIHdoaXRlIHNwYWNlLCBhbmQgXGMKKyMgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nLiBJdCBjYXRjaGVzIGNhc2VzIHdoZXJlIGV4cGxpY2l0IHZhbHVlcyBzdWNoIGFzIDB4MGEKKyMgaGF2ZSBiZWVuIHVzZWQgaW5zdGVhZCBvZiBuYW1lcyBsaWtlIENIQVJfTEYuIE5lZWRsZXNzIHRvIHNheSwgaXQgaXMgbm90IGEKKyMgZ2VudWluZSBFQkNESUMgdGVzdCEgSW4gcGF0dGVybnMsIGFscGhhYmV0aWMgY2hhcmFjdGVycyB0aGF0IGZvbGxvdyBhCisjIGJhY2tzbGFzaCBtdXN0IGJlIGluIEVCQ0RJQyBjb2RlLiBJbiBkYXRhLCBOTCwgTkVMLCBMRiwgRVNDLCBhbmQgREVMIG11c3QgYmUKKyMgaW4gRUJDRElDLCBidXQgY2FuIG9mIGNvdXJzZSBiZSBzcGVjaWZpZWQgYXMgZXNjYXBlcy4KKworIyBUZXN0IGRlZmF1bHQgbmV3bGluZSBhbmQgdmFyaWF0aW9ucworCisvXkEvbQorICAgIEFCQworIDA6IEEKKyAgICAxMlx4MTVBQkMKKyAwOiBBCisKKy9eQS9tLG5ld2xpbmU9YW55CisgICAgMTJceDE1QUJDCisgMDogQQorICAgIDEyXHgwZEFCQworIDA6IEEKKyAgICAxMlx4MGRceDE1QUJDCisgMDogQQorICAgIDEyXHgyNUFCQworIDA6IEEKKworL15BL20sbmV3bGluZT1hbnljcmxmCisgICAgMTJceDE1QUJDCisgMDogQQorICAgIDEyXHgwZEFCQworIDA6IEEKKyAgICAxMlx4MGRceDE1QUJDCisgMDogQQorICAgICoqIEZhaWwKK05vIG1hdGNoCisgICAgMTJceDI1QUJDCitObyBtYXRjaAorCisjIFRlc3QgXGgKKworL15BXIgvCisgICAgQSBCCisgMDogQVx4MjAKKyAgICBBXHg0MUIgCisgMDogQUEKKworIyBUZXN0IFxICisKKy9eQVzILworICAgIEFCCisgMDogQUIKKyAgICBBXHg0MkIgCisgMDogQUIKKyAgICAqKiBGYWlsCitObyBtYXRjaAorICAgIEEgQgorTm8gbWF0Y2gKKyAgICBBXHg0MUIgCitObyBtYXRjaAorCisjIFRlc3QgXFIKKworL15BXNkvCisgICAgQVx4MTVCCisgMDogQVx4MTUKKyAgICBBXHgwZEIKKyAwOiBBXHgwZAorICAgIEFceDI1QgorIDA6IEFceDI1CisgICAgQVx4MGJCCisgMDogQVx4MGIKKyAgICBBXHgwY0IKKyAwOiBBXHgwYworICAgICoqIEZhaWwKK05vIG1hdGNoCisgICAgQSBCCitObyBtYXRjaAorCisjIFRlc3QgXHYKKworL15BXKUvCisgICAgQVx4MTVCCisgMDogQVx4MTUKKyAgICBBXHgwZEIKKyAwOiBBXHgwZAorICAgIEFceDI1QgorIDA6IEFceDI1CisgICAgQVx4MGJCCisgMDogQVx4MGIKKyAgICBBXHgwY0IKKyAwOiBBXHgwYworICAgICoqIEZhaWwKK05vIG1hdGNoCisgICAgQSBCCitObyBtYXRjaAorCisjIFRlc3QgXFYKKworL15BXOUvCisgICAgQSBCCisgMDogQVx4MjAKKyAgICAqKiBGYWlsCitObyBtYXRjaAorICAgIEFceDE1QgorTm8gbWF0Y2gKKyAgICBBXHgwZEIKK05vIG1hdGNoCisgICAgQVx4MjVCCitObyBtYXRjaAorICAgIEFceDBiQgorTm8gbWF0Y2gKKyAgICBBXHgwY0IKK05vIG1hdGNoCisgICAgCisjIEZvciByZXBlYXRlZCBpdGVtcywgdXNlIGFuIGF0b21pYyBncm91cCBzbyB0aGF0IHRoZSBvdXRwdXQgaXMgdGhlIHNhbWUKKyMgZm9yIERGQSBtYXRjaGluZyAob3RoZXJ3aXNlIGl0IG1heSBzaG93IG11bHRpcGxlIG1hdGNoZXMpLgorCisjIFRlc3QgXGgrCisKKy9eQSg/PlyIKykvCisgICAgQSBCCisgMDogQVx4MjAKKworIyBUZXN0IFxIKworCisvXkEoPz5cyCspLworICAgIEFCCisgMDogQUIKKyAgICAqKiBGYWlsCitObyBtYXRjaAorICAgIEEgQgorTm8gbWF0Y2gKKworIyBUZXN0IFxSKworCisvXkEoPz5c2SspLworICAgIEFceDE1QgorIDA6IEFceDE1CisgICAgQVx4MGRCCisgMDogQVx4MGQKKyAgICBBXHgyNUIKKyAwOiBBXHgyNQorICAgIEFceDBiQgorIDA6IEFceDBiCisgICAgQVx4MGNCCisgMDogQVx4MGMKKyAgICAqKiBGYWlsCitObyBtYXRjaAorICAgIEEgQgorTm8gbWF0Y2gKKworIyBUZXN0IFx2KworCisvXkEoPz5cpSspLworICAgIEFceDE1QgorIDA6IEFceDE1CisgICAgQVx4MGRCCisgMDogQVx4MGQKKyAgICBBXHgyNUIKKyAwOiBBXHgyNQorICAgIEFceDBiQgorIDA6IEFceDBiCisgICAgQVx4MGNCCisgMDogQVx4MGMKKyAgICAqKiBGYWlsCitObyBtYXRjaAorICAgIEEgQgorTm8gbWF0Y2gKKworIyBUZXN0IFxWKworCisvXkEoPz5c5SspLworICAgIEEgQgorIDA6IEFceDIwQgorICAgICoqIEZhaWwKK05vIG1hdGNoCisgICAgQVx4MTVCCitObyBtYXRjaAorICAgIEFceDBkQgorTm8gbWF0Y2gKKyAgICBBXHgyNUIKK05vIG1hdGNoCisgICAgQVx4MGJCCitObyBtYXRjaAorICAgIEFceDBjQgorTm8gbWF0Y2gKKyAgICAKKyMgVGVzdCBcYyBmdW5jdGlvbmFsaXR5IAorICAgIAorL1yDQFyDQVyDYlyDQ1yDZFyDRVyDZlyDR1yDaFyDSVyDSlyDS1yDbFyDbVyDTlyDT1yDcFyDcVyDclyDU1yDVFyDdVyDVlyDV1yDWFyDeVyDWi8KKyAgICBceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZgorIDA6IFx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYQorCisvXINbXINcXINdXINeXINfLworICAgIFx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmCisgMDogXHgxYlx4MWNceDFkXHgxZVx4MWYKKyAgICAKKy9cgz8vCisgICAgQVx4ZmZCCisgMDogXHhmZgorCisvXIMmLworRmFpbGVkOiBlcnJvciAxNjggYXQgb2Zmc2V0IDI6IFxjXHgyMG11c3RceDIwYmVceDIwZm9sbG93ZWRceDIwYnlceDIwYVx4MjBsZXR0ZXJceDIwb3JceDIwb25lXHgyMG9mXHgyMFtcXV5fXHgzZgorCisjIEVuZApkaWZmIC0tZ2l0IGEvZGlzdDIvdGVzdGRhdGEvdmFsZ3JpbmQtaml0LnN1cHAgYi9kaXN0Mi90ZXN0ZGF0YS92YWxncmluZC1qaXQuc3VwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2U4N2QyCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdDIvdGVzdGRhdGEvdmFsZ3JpbmQtaml0LnN1cHAKQEAgLTAsMCArMSw3IEBACit7CisgICBuYW1lCisgICBNZW1jaGVjazpBZGRyMTYKKyAgIG9iajoqCisgICBvYmo6KgorICAgb2JqOioKK30KZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3dpbnRlc3RpbnB1dDMgYi9kaXN0Mi90ZXN0ZGF0YS93aW50ZXN0aW5wdXQzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkODAxN2EKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0Mi90ZXN0ZGF0YS93aW50ZXN0aW5wdXQzCkBAIC0wLDAgKzEsMTA0IEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGNoZWNrcyBsb2NhbC1zcGVjaWZpYyBmZWF0dXJlcywgdXNpbmcgdGhlICJmcl9GUiIgbG9jYWxlLiAKKyMgSXQgaXMgbm90IFBlcmwtY29tcGF0aWJsZS4gV2hlbiBydW4gdmlhIFJ1blRlc3QsIHRoZSBsb2NhbGUgaXMgZWRpdGVkIHRvCisjIGJlIHdoaWNoZXZlciBvZiAiZnJfRlIiLCAiZnJlbmNoIiwgb3IgImZyIiBpcyBmb3VuZCB0byBleGlzdC4gVGhlcmUgaXMKKyMgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGNhbGxlZCB3aW50ZXN0aW5wdXQzIGZvciB1c2Ugb24gV2luZG93cywKKyMgd2hlcmUgdGhlIGxvY2FsZSBpcyBjYWxsZWQgImZyZW5jaCIgYW5kIHRoZSB0ZXN0cyBhcmUgcnVuIHVzaW5nCisjIFJ1blRlc3QuYmF0LiAKKworI2ZvcmJpZF91dGYKKworL15bXHddKy8KKyAgICAqKiogRmFpbGVycworICAgIMljb2xlCisKKy9eW1x3XSsvbG9jYWxlPWZyZW5jaAorICAgIMljb2xlCisKKy9eW1x3XSsvCisgICAgKioqIEZhaWxlcnMKKyAgICDJY29sZQorCisvXltcV10rLworICAgIMljb2xlCisKKy9eW1xXXSsvbG9jYWxlPWZyZW5jaAorICAgICoqKiBGYWlsZXJzCisgICAgyWNvbGUKKworL1tcYl0vCisgICAgXGIKKyAgICAqKiogRmFpbGVycworICAgIGEKKworL1tcYl0vbG9jYWxlPWZyZW5jaAorICAgIFxiCisgICAgKioqIEZhaWxlcnMKKyAgICBhCisKKy9eXHcrLworICAgICoqKiBGYWlsZXJzCisgICAgyWNvbGUKKworL15cdysvbG9jYWxlPWZyZW5jaAorICAgIMljb2xlCisKKy8oLispXGIoLispLworICAgIMljb2xlCisKKy8oLispXGIoLispL2xvY2FsZT1mcmVuY2gKKyAgICAqKiogRmFpbGVycworICAgIMljb2xlCisKKy/JY29sZS9pCisgICAgyWNvbGUKKyAgICAqKiogRmFpbGVycworICAgIOljb2xlCisKKy/JY29sZS9pLGxvY2FsZT1mcmVuY2gKKyAgICDJY29sZQorICAgIOljb2xlCisKKy9cdy9JCisKKy9cdy9JLGxvY2FsZT1mcmVuY2gKKworIyBBbGwgcmVtYWluaW5nIHRlc3RzIGFyZSBpbiB0aGUgZnJlbmNoIGxvY2FsZSwgc28gc2V0IHRoZSBkZWZhdWx0LgorCisjcGF0dGVybiBsb2NhbGU9ZnJlbmNoCisKKy9eW1x4YzgtXHhjOV0vaQorICAgIMljb2xlCisgICAg6WNvbGUKKworL15bXHhjOC1ceGM5XS8KKyAgICDJY29sZQorICAgICoqKiBGYWlsZXJzIAorICAgIOljb2xlCisKKy9cVysvCisgICAgPj4+XHhhYTw8PAorICAgID4+Plx4YmE8PDwgCisKKy9bXFddKy8KKyAgICA+Pj5ceGFhPDw8CisgICAgPj4+XHhiYTw8PCAKKworL1teWzphbHBoYTpdXSsvCisgICAgPj4+XHhhYTw8PAorICAgID4+Plx4YmE8PDwgCisKKy9cdysvCisgICAgPj4+XHhhYTw8PAorICAgID4+Plx4YmE8PDwgCisKKy9bXHddKy8KKyAgICA+Pj5ceGFhPDw8CisgICAgPj4+XHhiYTw8PCAKKworL1tbOmFscGhhOl1dKy8KKyAgICA+Pj5ceGFhPDw8CisgICAgPj4+XHhiYTw8PCAKKyAgICAKKy9bWzphbHBoYTpdXVtbOmxvd2VyOl1dW1s6dXBwZXI6XV0vSUIKKworIyBFbmQgb2YgdGVzdGlucHV0MyAKZGlmZiAtLWdpdCBhL2Rpc3QyL3Rlc3RkYXRhL3dpbnRlc3RvdXRwdXQzIGIvZGlzdDIvdGVzdGRhdGEvd2ludGVzdG91dHB1dDMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ4YTY5MAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QyL3Rlc3RkYXRhL3dpbnRlc3RvdXRwdXQzCkBAIC0wLDAgKzEsMTc1IEBACisjIFRoaXMgc2V0IG9mIHRlc3RzIGNoZWNrcyBsb2NhbC1zcGVjaWZpYyBmZWF0dXJlcywgdXNpbmcgdGhlICJmcl9GUiIgbG9jYWxlLiAKKyMgSXQgaXMgbm90IFBlcmwtY29tcGF0aWJsZS4gV2hlbiBydW4gdmlhIFJ1blRlc3QsIHRoZSBsb2NhbGUgaXMgZWRpdGVkIHRvCisjIGJlIHdoaWNoZXZlciBvZiAiZnJfRlIiLCAiZnJlbmNoIiwgb3IgImZyIiBpcyBmb3VuZCB0byBleGlzdC4gVGhlcmUgaXMKKyMgZGlmZmVyZW50IHZlcnNpb24gb2YgdGhpcyBmaWxlIGNhbGxlZCB3aW50ZXN0aW5wdXQzIGZvciB1c2Ugb24gV2luZG93cywKKyMgd2hlcmUgdGhlIGxvY2FsZSBpcyBjYWxsZWQgImZyZW5jaCIgYW5kIHRoZSB0ZXN0cyBhcmUgcnVuIHVzaW5nCisjIFJ1blRlc3QuYmF0LiAKKworI2ZvcmJpZF91dGYKKworL15bXHddKy8KKyAgICAqKiogRmFpbGVycworTm8gbWF0Y2gKKyAgICDJY29sZQorTm8gbWF0Y2gKKworL15bXHddKy9sb2NhbGU9ZnJlbmNoCisgICAgyWNvbGUKKyAwOiDJY29sZQorCisvXltcd10rLworICAgICoqKiBGYWlsZXJzCitObyBtYXRjaAorICAgIMljb2xlCitObyBtYXRjaAorCisvXltcV10rLworICAgIMljb2xlCisgMDogXHhjOQorCisvXltcV10rL2xvY2FsZT1mcmVuY2gKKyAgICAqKiogRmFpbGVycworIDA6ICoqKiAKKyAgICDJY29sZQorTm8gbWF0Y2gKKworL1tcYl0vCisgICAgXGIKKyAwOiBceDA4CisgICAgKioqIEZhaWxlcnMKK05vIG1hdGNoCisgICAgYQorTm8gbWF0Y2gKKworL1tcYl0vbG9jYWxlPWZyZW5jaAorICAgIFxiCisgMDogXHgwOAorICAgICoqKiBGYWlsZXJzCitObyBtYXRjaAorICAgIGEKK05vIG1hdGNoCisKKy9eXHcrLworICAgICoqKiBGYWlsZXJzCitObyBtYXRjaAorICAgIMljb2xlCitObyBtYXRjaAorCisvXlx3Ky9sb2NhbGU9ZnJlbmNoCisgICAgyWNvbGUKKyAwOiDJY29sZQorCisvKC4rKVxiKC4rKS8KKyAgICDJY29sZQorIDA6IFx4Yzljb2xlCisgMTogXHhjOQorIDI6IGNvbGUKKworLyguKylcYiguKykvbG9jYWxlPWZyZW5jaAorICAgICoqKiBGYWlsZXJzCisgMDogKioqIEZhaWxlcnMKKyAxOiAqKiogCisgMjogRmFpbGVycworICAgIMljb2xlCitObyBtYXRjaAorCisvyWNvbGUvaQorICAgIMljb2xlCisgMDogXHhjOWNvbGUKKyAgICAqKiogRmFpbGVycworTm8gbWF0Y2gKKyAgICDpY29sZQorTm8gbWF0Y2gKKworL8ljb2xlL2ksbG9jYWxlPWZyZW5jaAorICAgIMljb2xlCisgMDogyWNvbGUKKyAgICDpY29sZQorIDA6IOljb2xlCisKKy9cdy9JCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDAgMSAyIDMgNCA1IDYgNyA4IDkgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCAKKyAgUSBSIFMgVCBVIFYgVyBYIFkgWiBfIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAKK1N1YmplY3QgbGVuZ3RoIGxvd2VyIGJvdW5kID0gMQorCisvXHcvSSxsb2NhbGU9ZnJlbmNoCitDYXB0dXJpbmcgc3VicGF0dGVybiBjb3VudCA9IDAKK1N0YXJ0aW5nIGNvZGUgdW5pdHM6IDAgMSAyIDMgNCA1IDYgNyA4IDkgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCAKKyAgUSBSIFMgVCBVIFYgVyBYIFkgWiBfIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAKKyAggyCKIIwgjiCaIJwgniCfIKogsiCzILUguSC6IMAgwSDCIMMgxCDFIMYgxyDIIMkgyiDLIMwgzSDOIM8g0CDRINIg0yDUINUg1iAKKyAg2CDZINog2yDcIN0g3iDfIOAg4SDiIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SDuIO8g8CDxIPIg8yD0IPUg9iD4IPkg+iD7IPwg/SAKKyAg/iD/IAorU3ViamVjdCBsZW5ndGggbG93ZXIgYm91bmQgPSAxCisKKyMgQWxsIHJlbWFpbmluZyB0ZXN0cyBhcmUgaW4gdGhlIGZyZW5jaCBsb2NhbGUsIHNvIHNldCB0aGUgZGVmYXVsdC4KKworI3BhdHRlcm4gbG9jYWxlPWZyZW5jaAorCisvXltceGM4LVx4YzldL2kKKyAgICDJY29sZQorIDA6IMkKKyAgICDpY29sZQorIDA6IOkKKworL15bXHhjOC1ceGM5XS8KKyAgICDJY29sZQorIDA6IMkKKyAgICAqKiogRmFpbGVycyAKK05vIG1hdGNoCisgICAg6WNvbGUKK05vIG1hdGNoCisKKy9cVysvCisgICAgPj4+XHhhYTw8PAorIDA6ID4+PgorICAgID4+Plx4YmE8PDwgCisgMDogPj4+CisKKy9bXFddKy8KKyAgICA+Pj5ceGFhPDw8CisgMDogPj4+CisgICAgPj4+XHhiYTw8PCAKKyAwOiA+Pj4KKworL1teWzphbHBoYTpdXSsvCisgICAgPj4+XHhhYTw8PAorIDA6ID4+PgorICAgID4+Plx4YmE8PDwgCisgMDogPj4+CisKKy9cdysvCisgICAgPj4+XHhhYTw8PAorIDA6IKoKKyAgICA+Pj5ceGJhPDw8IAorIDA6ILoKKworL1tcd10rLworICAgID4+Plx4YWE8PDwKKyAwOiCqCisgICAgPj4+XHhiYTw8PCAKKyAwOiC6CisKKy9bWzphbHBoYTpdXSsvCisgICAgPj4+XHhhYTw8PAorIDA6IKoKKyAgICA+Pj5ceGJhPDw8IAorIDA6ILoKKyAgICAKKy9bWzphbHBoYTpdXVtbOmxvd2VyOl1dW1s6dXBwZXI6XV0vSUIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBCcmEKKyAgICAgICAgW0EtWmEtelx4ODNceDhhXHg4Y1x4OGVceDlhXHg5Y1x4OWVceDlmXHhhYVx4YjJceGIzXHhiNVx4YjlceGJhXHhjMC1ceGQ2XHhkOC1ceGY2XHhmOC1ceGZmXQorICAgICAgICBbYS16XHg4M1x4OWFceDljXHg5ZVx4YWFceGI1XHhiYVx4ZGYtXHhmNlx4ZjgtXHhmZl0KKyAgICAgICAgW0EtWlx4OGFceDhjXHg4ZVx4OWZceGMwLVx4ZDZceGQ4LVx4ZGVdCisgICAgICAgIEtldAorICAgICAgICBFbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2FwdHVyaW5nIHN1YnBhdHRlcm4gY291bnQgPSAwCitTdGFydGluZyBjb2RlIHVuaXRzOiBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSBWIFcgWCBZIFogCisgIGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiCDIIogjCCOIJognCCeIJ8gqiCyILMgCisgILUguSC6IMAgwSDCIMMgxCDFIMYgxyDIIMkgyiDLIMwgzSDOIM8g0CDRINIg0yDUINUg1iDYINkg2iDbINwg3SDeIN8g4CDhIOIgCisgIOMg5CDlIOYg5yDoIOkg6iDrIOwg7SDuIO8g8CDxIPIg8yD0IPUg9iD4IPkg+iD7IPwg/SD+IP8gCitTdWJqZWN0IGxlbmd0aCBsb3dlciBib3VuZCA9IDMKKworIyBFbmQgb2YgdGVzdGlucHV0MyAK